/* finesse · register=product · A=政务蓝白（沿用 v1 品牌蓝 #1a5fb4）+ clay 差异色
 * B=ui-sans/mono-data 700-400 · C=rail-shell + evidence column
 * D=hand-built log-axis diff map + feedback motion · E=calibration instrument
 * SOUL=6 SPECTACLE=4 DENSITY=8
 * surface=workbench(light, 白卡浮浅蓝底) · 全角色统一，board 深色面已停用
 * 2026-09-12 · 东盟标准通 UI v2.6.2＝v2.6.1 832px 保留左侧导航（v2 青绿 → v2.2 回归 v1 蓝白 → v2.3 取消角色换面
 *            → v2.4/v2.5 窄屏轨改浅色（误伤，弃）→ v2.6 恢复深色轨全端一致 + color-scheme:light 保留） */

/* ============================================================
   0 · TOKENS — 全部颜色走变量，深色表面只覆盖变量
   ============================================================ */
:root{
  /* 本产品只有浅色一套表面：显式声明，避免手机浏览器在系统深色模式下
     自动反色（Chrome for Android 的 Auto dark / 表单控件跟随系统变深） */
  color-scheme:light;
  /* 基底：v1 的浅蓝纸面 —— 白卡浮在其上，「蓝白」的对比就来自这一层 */
  --page:#eef4fb;               /* = v1 --blue-bg #eef4fb，原样沿用 */
  --bg:#fdfeff;                 /* 卡片面：带一丝蓝的近白，不用纯 #fff */
  --panel-2:#f5f8fd;
  --panel-3:#e7eefa;
  --border:rgba(16,42,86,.08);
  --border-strong:rgba(16,42,86,.16);

  /* 墨色三级（与原版 --ink #1c2430 同色相，压深到小字过 AA） */
  --ink-1:#131b28;
  --ink-2:#3b4757;
  --ink-3:#58657a;              /* WCAG AA：最差底色（--panel-3）5.06:1 */

  /* 品牌：单一 accent 锁定 —— v1 品牌蓝原值 */
  --accent:#1a5fb4;             /* = v1 --blue #1a5fb4，白卡上 5.39:1 可当正文色 */
  --accent-hi:#14498c;          /* 悬停走「压深」而非提亮，保证它当文字时也过 AA（7.63:1） */
  --accent-deep:#0f3d7a;        /* = v1 --blue-deep */
  --accent-2:#c4633f;              /* 第二序列 / 次动作；只做填充，不当正文色 */
  --accent-soft:rgba(26,95,180,.10);
  --accent-line:rgba(26,95,180,.28);
  --on-accent:#f7fbff;
  --glow:rgba(26,95,180,.30);

  /* 语义：与品牌分离，不可互换。
     取值按「自身 chip 合成底」定标，四色当小字用时一律过 AA 4.5 */
  --down:#b23c33;   --down-bg:rgba(178,60,51,.09);   --down-line:rgba(178,60,51,.24);
  --warn:#8d5b0e;   --warn-bg:rgba(141,91,14,.10);   --warn-line:rgba(141,91,14,.26);
  --up:#256b56;     --up-bg:rgba(37,107,86,.09);     --up-line:rgba(37,107,86,.24);
  --gap:#566073;    --gap-bg:rgba(86,96,115,.09);    --gap-line:rgba(86,96,115,.26);
                    /* 缺口用中性灰而非蓝：蓝已被品牌占用，灰＝「此处无数据」 */

  /* 轨道（左侧导航栏）—— v1 顶栏深蓝的延续：#0f3d7a → #1a5fb4 那条渐变，取深端做底 */
  --rail:#0a2540;
  --rail-2:#103459;
  --rail-3:#17426e;
  --rail-ink:#a3b8d6;
  --rail-ink-hi:#eaf3ff;
  --rail-border:rgba(255,255,255,.09);

  /* 圆角三级 */
  --r:18px;
  --r-sm:12px;
  --r-xs:9px;
  --r-pill:999px;

  /* 阴影：向品牌墨蓝偏，绝不用纯黑 —— 蓝白底上的阴影带蓝才不会发灰发脏 */
  --shadow:0 1px 3px rgba(16,42,86,.06);
  --shadow-md:0 8px 24px -16px rgba(16,42,86,.28);
  --shadow-lg:0 40px 90px -50px rgba(16,42,86,.32);

  /* 字号：固定刻度（产品register不用 clamp 巨字） */
  --t-display:26px;
  --t-h2:18px;
  --t-h3:14.5px;
  --t-body:13.5px;
  --t-sm:12.5px;
  --t-xs:11.5px;

  --font:"PingFang SC","Microsoft YaHei","Helvetica Neue",system-ui,sans-serif;
  --mono:"SF Mono","JetBrains Mono",ui-monospace,Menlo,Consolas,monospace;

  --rail-w:266px;
  --topbar-h:60px;
  --z-nav:60;
  --ease:cubic-bezier(.22,.61,.36,1);
}

/* 深色「监管态势屏」——市场监管角色用，仍是同一支蓝，只换明度层 */
body[data-surface="board"]{
  --page:#060b15;
  --bg:#0c1424;
  --panel-2:#121c2f;
  --panel-3:#1a2740;
  --border:rgba(255,255,255,.07);
  --border-strong:rgba(255,255,255,.14);

  --ink-1:#eaf1fb;
  --ink-2:#a8b6cb;
  --ink-3:#8e9cb2;              /* WCAG AA：最差底色（--panel-3）5.36:1 */

  --accent:#5b9bff;
  --accent-hi:#82b4ff;
  --accent-deep:#9cbcff;        /* 深色面上「深色」反而要提亮才当得了文字（7.29:1） */
  --accent-2:#f0a868;
  --accent-soft:rgba(91,155,255,.13);
  --accent-line:rgba(91,155,255,.32);
  --on-accent:#06101f;
  --glow:rgba(91,155,255,.26);

  --down:#ff6257;   --down-bg:rgba(255,98,87,.12);   --down-line:rgba(255,98,87,.30);
  --warn:#f0a868;   --warn-bg:rgba(240,168,104,.13); --warn-line:rgba(240,168,104,.30);
  --up:#3fcb86;     --up-bg:rgba(63,203,134,.12);    --up-line:rgba(63,203,134,.30);
  --gap:#96a2b4;    --gap-bg:rgba(150,162,180,.12);  --gap-line:rgba(150,162,180,.30);

  --rail:#04070e;
  --rail-2:#0a1220;
  --rail-3:#101b2e;             /* 深色面必须覆盖 rail-3，否则继承浅色面的蓝轨色 */
  --rail-ink:#9aabc4;           /* WCAG AA：轨道最亮层 7.38:1 */

  --shadow:0 1px 3px rgba(2,6,20,.40);
  --shadow-md:0 8px 24px -16px rgba(2,6,20,.72);
  --shadow-lg:0 40px 90px -50px rgba(2,6,20,.74);
}

/* ============================================================
   1 · BASE
   ============================================================ */
*,*::before,*::after{ box-sizing:border-box; }
*{ margin:0; padding:0; }
html{ -webkit-text-size-adjust:100%; }
html,body{ overflow-x:clip; }          /* M1：clip 而非 hidden，保住 sticky */
body{
  font-family:var(--font);
  font-size:var(--t-body);
  line-height:1.7;
  color:var(--ink-2);
  background:var(--page);
  min-height:100dvh;
  -webkit-font-smoothing:antialiased;
}
button,input,select,textarea{ font-family:inherit; font-size:inherit; }
a{ color:var(--accent); text-decoration:none; border-bottom:1px solid var(--accent-line); }
a:hover{ color:var(--accent-hi); border-bottom-color:var(--accent); }
:focus-visible{ outline:2px solid var(--accent); outline-offset:2px; border-radius:6px; }
.sr-only{ position:absolute; width:1px; height:1px; overflow:hidden; clip-path:inset(50%); white-space:nowrap; }
[hidden]{ display:none !important; }
::selection{ background:var(--accent-soft); color:var(--ink-1); }
code,kbd,.num{ font-family:var(--mono); font-variant-numeric:tabular-nums; }

/* 滚动条：低调，跟表面走 */
*{ scrollbar-width:thin; scrollbar-color:var(--border-strong) transparent; }
*::-webkit-scrollbar{ width:9px; height:9px; }
*::-webkit-scrollbar-thumb{ background:var(--border-strong); border-radius:99px; border:2px solid transparent; background-clip:content-box; }
*::-webkit-scrollbar-track{ background:transparent; }

/* ============================================================
   2 · SHELL — 左侧轨道 + 顶栏 + 内容
   ============================================================ */
.shell{
  display:grid;
  grid-template-columns:var(--rail-w) minmax(0,1fr);
  min-height:100dvh;
}
.main{ display:flex; flex-direction:column; min-width:0; }

/* ---- 轨道 ---- */
.rail{
  position:sticky; top:0;
  height:100dvh;
  display:flex; flex-direction:column;
  gap:26px;
  padding:20px 16px 18px;
  background:var(--rail);
  color:var(--rail-ink);
  border-right:1px solid var(--rail-border);
  z-index:var(--z-nav);
}
.rail-brand{ display:flex; align-items:center; gap:11px; padding:2px 6px 0; }
.rail-brand .mark{
  width:40px; height:40px; flex:0 0 40px;
  border-radius:11px;
  display:flex; align-items:center; justify-content:center;
  background:linear-gradient(150deg,var(--accent-hi),var(--accent-deep));
  color:var(--on-accent);
  font-size:15px; font-weight:800; letter-spacing:.02em; line-height:1;
}
body[data-surface="board"] .rail-brand .mark{ color:var(--on-accent); }
.rail-brand b{ display:block; font-size:14.5px; font-weight:700; color:var(--rail-ink-hi); letter-spacing:.02em; }
.rail-brand span{ display:block; font-size:10.5px; color:var(--rail-ink); letter-spacing:.07em; margin-top:2px; }

.rail-group{ display:flex; flex-direction:column; gap:7px; }
.rail-group.grow{ flex:1; min-height:0; overflow-y:auto; }
.rail-label{
  font-size:10.5px; font-weight:700; letter-spacing:.13em;
  color:var(--rail-ink); opacity:.72;
  padding:0 8px; margin-bottom:2px;
  display:flex; align-items:center; gap:8px;
}
.rail-label::after{ content:""; flex:1; height:1px; background:var(--rail-border); }

/* 角色卡（原 .role）*/
.roles{ display:flex; flex-direction:column; gap:6px; }
.role{
  display:block; width:100%; text-align:left;
  padding:9px 11px;
  border:1px solid transparent;
  border-radius:var(--r-sm);
  background:var(--rail-2);
  color:var(--rail-ink);
  cursor:pointer;
  transition:background .16s var(--ease), border-color .16s var(--ease), color .16s var(--ease);
}
.role:hover{ background:var(--rail-3); color:var(--rail-ink-hi); }
.role b{ display:block; font-size:12.5px; font-weight:600; color:var(--rail-ink-hi); }
.role span{ display:block; font-size:10.5px; line-height:1.55; margin-top:3px; opacity:.78; }
.role.active{
  background:var(--accent-soft);
  border-color:var(--accent-line);
}
.role.active b{ color:var(--accent); }
body[data-surface="board"] .role.active b{ color:var(--accent); }
.role.active span{ opacity:.9; }

/* 导航（原 .tabs/.tab）*/
.tabs{ display:flex; flex-direction:column; gap:3px; }
.tab{
  display:flex; align-items:center; gap:9px;
  width:100%; text-align:left;
  padding:9px 11px;
  border:0; border-radius:var(--r-sm);
  background:transparent;
  color:var(--rail-ink);
  font-size:13.5px;
  cursor:pointer;
  position:relative;
  transition:background .16s var(--ease), color .16s var(--ease);
}
.tab::before{
  content:""; width:3px; height:16px; flex:0 0 3px;
  border-radius:99px; background:transparent;
  transition:background .16s var(--ease), height .2s var(--ease);
}
.tab:hover{ background:var(--rail-2); color:var(--rail-ink-hi); }
.tab.active{ background:var(--rail-3); color:var(--rail-ink-hi); font-weight:600; }
.tab.active::before{ background:var(--accent); height:20px; }

.rail-foot{ display:flex; flex-direction:column; gap:9px; margin-top:auto; padding-top:14px; border-top:1px solid var(--rail-border); }
.rail-foot .badge{
  border:1px solid var(--rail-border); background:var(--rail-2); color:var(--rail-ink);
  font-size:10.5px; padding:5px 9px; border-radius:var(--r-pill);
  cursor:pointer; text-align:left;
  display:flex; align-items:center; gap:7px;
}
.rail-foot .badge:hover{ color:var(--rail-ink-hi); border-color:rgba(255,255,255,.16); }
.rail-foot .badge-gloss b{ color:var(--warn); font-weight:700; }

/* ---- 顶栏 ---- */
.topbar{
  height:var(--topbar-h);
  display:flex; align-items:center; gap:16px;
  padding:0 26px;
  background:var(--bg);
  border-bottom:1px solid var(--border);
  position:relative; z-index:1;
}
.topbar .tb-title{ min-width:0; display:flex; align-items:baseline; gap:10px; }
.topbar h1{
  font-size:var(--t-h3); font-weight:700; color:var(--ink-1);
  letter-spacing:.01em; white-space:nowrap;
}
.topbar .tb-sub{
  font-size:var(--t-sm); color:var(--ink-3);
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
  min-width:0;
}
.topbar .tb-right{ margin-left:auto; display:flex; align-items:center; gap:8px; flex:0 0 auto; }

/* 状态条（真实数据，来自已渲染 DOM）*/
.status-strip{ display:flex; align-items:center; gap:6px; }
.status-chip{
  display:inline-flex; align-items:center; gap:6px;
  padding:4px 9px; border-radius:var(--r-pill);
  background:var(--panel-2); border:1px solid var(--border);
  font-size:11px; color:var(--ink-2); white-space:nowrap;
}
.status-chip b{ font-family:var(--mono); font-variant-numeric:tabular-nums; color:var(--ink-1); font-weight:700; }
.status-chip .dot{ width:6px; height:6px; border-radius:99px; background:var(--accent); flex:0 0 6px; }
.status-chip.is-warn .dot{ background:var(--warn); }
.status-chip.is-down .dot{ background:var(--down); }

/* ---- 内容区 ---- */
main{ flex:1; padding:20px 26px 64px; max-width:1360px; width:100%; }
.panel{ display:none; }
.panel.active{ display:block; }
#role-help{
  font-size:var(--t-sm); color:var(--ink-3);
  padding:0 2px 16px; margin:0; line-height:1.7;
}

/* ============================================================
   3 · 通用件：卡 / 按钮 / 字段 / 标签
   ============================================================ */
.card{
  background:var(--bg);
  border:1px solid var(--border);
  border-radius:var(--r);
  padding:18px 20px;
  margin-bottom:14px;
  box-shadow:var(--shadow);
}
.card > h3{
  font-size:var(--t-h3); font-weight:700; color:var(--ink-1);
  letter-spacing:.01em; margin-bottom:10px;
  display:flex; align-items:center; gap:9px;
}
.card > h3::before{
  content:""; width:3px; height:14px; border-radius:99px;
  background:var(--accent); flex:0 0 3px;
}
.card h4{ font-size:var(--t-body); font-weight:600; color:var(--ink-1); margin:14px 0 6px; }
.card.flash{ border-color:var(--accent); box-shadow:0 0 0 3px var(--accent-soft); }

/* 主查询组件：抬起来一点，带品牌角光 */
.form-card{
  background:var(--bg);
  border:1px solid var(--border);
  border-radius:var(--r);
  padding:20px 22px;
  position:relative;
  overflow:hidden;
  box-shadow:var(--shadow-md);
}
.form-card::after{
  content:""; position:absolute; inset:0; pointer-events:none;
  background:radial-gradient(300px 190px at 96% -14%, var(--accent-soft), transparent 62%);
}
.form-card > *{ position:relative; }

.form-row{ display:flex; align-items:flex-end; gap:10px; flex-wrap:wrap; }
.filters{ align-items:center; }
.field{ display:flex; flex-direction:column; gap:6px; min-width:0; flex:1 1 200px; max-width:280px; }
.field label,.form-row > label{ font-size:var(--t-xs); font-weight:600; color:var(--ink-3); letter-spacing:.04em; }

select,input[type="text"],input[type="search"],textarea{
  width:100%;
  padding:9px 12px;
  border:1px solid var(--border-strong);
  border-radius:var(--r-xs);
  background:var(--bg);
  color:var(--ink-1);
  font-size:var(--t-body);
  transition:border-color .16s var(--ease), box-shadow .16s var(--ease);
  min-height:38px;
}
select{
  appearance:none;
  background-image:linear-gradient(45deg,transparent 50%,var(--ink-3) 50%),linear-gradient(135deg,var(--ink-3) 50%,transparent 50%);
  background-position:calc(100% - 16px) 17px,calc(100% - 11px) 17px;
  background-size:5px 5px,5px 5px;
  background-repeat:no-repeat;
  padding-right:32px;
}
select:hover,input:hover,textarea:hover{ border-color:var(--accent-line); }
select:focus,input:focus,textarea:focus{ outline:none; border-color:var(--accent); box-shadow:0 0 0 3px var(--accent-soft); }
textarea{ resize:vertical; line-height:1.7; }
.filters select{ min-width:126px; width:auto; flex:0 1 auto; }

.btn{
  display:inline-flex; align-items:center; justify-content:center; gap:7px;
  padding:9px 16px;
  min-height:38px;
  border-radius:var(--r-xs);
  border:1px solid var(--border-strong);
  background:var(--bg);
  color:var(--ink-1);
  font-size:var(--t-body); font-weight:500;
  cursor:pointer;
  white-space:nowrap;
  transition:background .16s var(--ease), border-color .16s var(--ease), color .16s var(--ease), transform .1s var(--ease);
}
.btn:hover{ border-color:var(--accent-line); background:var(--panel-2); color:var(--accent); }
.btn:active{ transform:translateY(1px); }
.btn.primary{
  background:var(--accent); border-color:var(--accent); color:var(--on-accent);
  font-weight:600;
  box-shadow:0 6px 18px -10px var(--glow);
}
.btn.primary:hover{ background:var(--accent-hi); border-color:var(--accent-hi); color:var(--on-accent); }
.btn.small{ padding:5px 11px; min-height:30px; font-size:var(--t-sm); border-radius:var(--r-xs); }
.btn.active,[aria-pressed="true"].btn{ background:var(--accent-soft); border-color:var(--accent-line); color:var(--accent); font-weight:600; }
button:disabled{ opacity:.55; cursor:wait; }

.hint{ font-size:var(--t-sm); color:var(--ink-3); line-height:1.7; margin-top:9px; }
.hint a{ color:var(--accent); }
/* 禁用/撤销登记提示：独立成行的风险提示，不能与普通 hint 同权重（用户易略过） */
.rest-hint{
  margin-top:12px; padding:9px 12px;
  border-left:3px solid var(--down-line);
  background:var(--down-bg);
  border-radius:0 var(--r-xs) var(--r-xs) 0;
  color:var(--down); font-weight:600;
}
/* 禁用清单条目（说明页，由 capabilities 动态渲染） */
.res-item{ padding:9px 0; border-bottom:1px solid var(--border); font-size:var(--t-sm); color:var(--ink-2); line-height:1.7; }
.res-item:last-child{ border-bottom:0; }

.chips{ display:flex; gap:7px; flex-wrap:wrap; align-items:center; margin-top:12px; }
.chips-label{ font-size:var(--t-xs); font-weight:600; color:var(--ink-3); letter-spacing:.04em; }
.chip{
  font-size:var(--t-sm);
  background:var(--panel-2); border:1px solid var(--border);
  color:var(--ink-2);
  border-radius:var(--r-pill);
  padding:5px 12px; cursor:pointer;
  transition:border-color .16s var(--ease), color .16s var(--ease), background .16s var(--ease);
}
.chip:hover{ border-color:var(--accent-line); color:var(--accent); background:var(--accent-soft); }

.badge{ font-size:var(--t-xs); padding:4px 10px; border-radius:var(--r-pill); white-space:nowrap; }
.badge-outline{ border:1px solid var(--border-strong); background:transparent; color:var(--ink-2); cursor:pointer; }
.badge-outline:hover{ border-color:var(--accent-line); color:var(--accent); }

.notice{
  position:sticky; top:0; z-index:20;
  padding:11px 15px; margin-bottom:14px;
  background:var(--bg); border:1px solid var(--accent-line);
  border-left:3px solid var(--accent);
  border-radius:var(--r-sm);
  color:var(--ink-1); font-size:var(--t-body);
  box-shadow:var(--shadow-md);
}
.notice.error{ border-color:var(--down-line); border-left-color:var(--down); color:var(--down); }

.workspace-bar{ display:flex; gap:10px; flex-wrap:wrap; align-items:center; }
.workspace-bar label{ font-size:var(--t-xs); font-weight:600; color:var(--ink-3); letter-spacing:.04em; }
.workspace-bar .hint{ flex-basis:100%; margin-top:2px; }
#saved-work{ flex:1 1 240px; min-width:0; }
#work-name{ width:100%; }

.skeleton{
  height:12px; border-radius:99px;
  background:linear-gradient(90deg,var(--panel-2) 25%,var(--panel-3) 37%,var(--panel-2) 63%);
  background-size:400% 100%;
  animation:sk 1.4s ease-in-out infinite;
}
@keyframes sk{ 0%{background-position:100% 0} 100%{background-position:0 0} }
.loading{ display:flex; flex-direction:column; gap:10px; padding:22px 0; color:var(--ink-3); font-size:var(--t-sm); }
.loading::before{ content:""; height:3px; border-radius:99px; background:var(--panel-3); overflow:hidden; }

/* 空态：不摆假图，只交代「这一步会产出什么」 */
.empty-state{
  background:var(--bg);
  border:1px dashed var(--border-strong);
  border-radius:var(--r);
  padding:22px 22px 20px;
  margin-bottom:14px;
}
.empty-state > h3{
  font-size:var(--t-h3); font-weight:700; color:var(--ink-1);
  margin-bottom:6px; display:flex; align-items:center; gap:9px;
}
.empty-state > h3::before{
  content:""; width:3px; height:14px; border-radius:99px; background:var(--accent);
}
.empty-state > p{ font-size:var(--t-sm); color:var(--ink-3); line-height:1.75; }
.empty-flow{ display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:11px; margin-top:15px; }
.empty-flow > div{
  background:var(--panel-2); border-radius:var(--r-sm);
  padding:13px 14px; border-left:2px solid var(--accent-line);
}
.empty-flow .n{
  font-family:var(--mono); font-size:11px; font-weight:700;
  color:var(--accent); letter-spacing:.1em;
}
.empty-flow b{ display:block; font-size:var(--t-body); color:var(--ink-1); margin:6px 0 4px; }
.empty-flow span{ font-size:var(--t-sm); color:var(--ink-3); line-height:1.65; }

/* ============================================================
   4 · 报告：标定卡（边界声明）+ KPI + 差异图谱 + 表
   ============================================================ */

/* ---- 4.1 标定卡：把产品的「不猜」变成可见的主角 ---- */
.calib{
  border-radius:var(--r);
  border:1px solid var(--accent-line);
  background:
    linear-gradient(180deg,var(--accent-soft),transparent 68%),
    var(--bg);
  padding:18px 20px 16px;
  margin-bottom:14px;
  position:relative;
  overflow:hidden;
  box-shadow:var(--shadow);
}
.calib::before{
  content:""; position:absolute; left:0; top:0; bottom:0; width:3px;
  background:linear-gradient(180deg,var(--accent),transparent 88%);
}
.calib-head{ display:flex; align-items:center; gap:10px; margin-bottom:12px; }
.calib-head .seal{
  width:26px; height:26px; flex:0 0 26px; border-radius:8px;
  display:flex; align-items:center; justify-content:center;
  border:1px solid var(--accent-line);
  background:var(--bg); color:var(--accent);
  font-size:13px; font-weight:800;
}
.calib-head .kicker{
  font-size:var(--t-xs); font-weight:700; letter-spacing:.12em;
  color:var(--accent); text-transform:uppercase;
}
.verdict{
  font-size:var(--t-h2); font-weight:800; letter-spacing:-.01em;
  color:var(--ink-1); line-height:1.35;
  display:block; margin-bottom:10px;
}
.verdict.high{ color:var(--down); }
.verdict.medium{ color:var(--warn); }
.verdict.low{ color:var(--up); }
.verdict.unknown{ color:var(--ink-1); }
.verdict .light{ display:none; }

.specline{
  display:flex; flex-wrap:wrap; gap:0 22px;
  padding-top:12px; border-top:1px solid var(--border);
}
.specline > span{
  display:flex; flex-direction:column; gap:2px;
  font-size:var(--t-xs); color:var(--ink-3);
}
.specline > span b{
  font-family:var(--mono); font-variant-numeric:tabular-nums;
  font-size:var(--t-body); font-weight:700; color:var(--ink-1);
}
.data-note{
  font-size:var(--t-sm); line-height:1.75; color:var(--ink-2);
  background:var(--panel-2);
  border-radius:var(--r-sm);
  padding:10px 13px; margin:12px 0 0;
  border-left:2px solid var(--border-strong);
}

/* 标定卡内容排序：先声明边界，再给数字，动作留到最后 */
.card.calib{ display:flex; flex-direction:column; }
.card.calib > *{ order:8; }          /* 兜底：未列出的子节点（限量表等）一律靠后 */
.card.calib > .calib-head{ order:1; }
.card.calib > h3{ order:2; }
.card.calib > h3::before{ display:none; }
.card.calib > .verdict{ order:3; }
.card.calib > .specline{ order:4; }
.card.calib > .data-note{ order:5; }
.card.calib > p:not(.hint):not(.data-note){ order:6; font-size:var(--t-body); color:var(--ink-2); }
.card.calib > .hint{ order:7; }
.card.calib > .report-actions{
  order:9; margin-top:15px; padding-top:13px;
  border-top:1px solid var(--border);
}

/* ---- 4.2 KPI 块 ---- */
.kpis{ display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:11px; margin-bottom:14px; }
.kpi{
  background:var(--bg); border:1px solid var(--border); border-radius:var(--r-sm);
  padding:13px 14px;
  display:flex; flex-direction:column; gap:3px;
  position:relative; overflow:hidden;
}
.kpi .kl{
  font-size:var(--t-xs); font-weight:600; letter-spacing:.05em;
  color:var(--ink-3); display:flex; align-items:center; gap:6px;
}
.kpi .kl i{ font-style:normal; font-size:12px; line-height:1; }
.kpi .kv{
  font-family:var(--mono); font-variant-numeric:tabular-nums;
  font-size:30px; font-weight:800; letter-spacing:-.02em; line-height:1.05;
  color:var(--ink-1);
}
.kpi .kv small{ font-size:13px; font-weight:600; color:var(--ink-3); margin-left:3px; letter-spacing:0; }
.kpi .ks{ font-size:var(--t-xs); color:var(--ink-3); }
.kpi.k-down{ border-color:var(--down-line); background:linear-gradient(180deg,var(--down-bg),var(--bg) 70%); }
.kpi.k-down .kv{ color:var(--down); }
.kpi.k-warn{ border-color:var(--warn-line); background:linear-gradient(180deg,var(--warn-bg),var(--bg) 70%); }
.kpi.k-warn .kv{ color:var(--warn); }
.kpi.k-up{ border-color:var(--up-line); background:linear-gradient(180deg,var(--up-bg),var(--bg) 70%); }
.kpi.k-up .kv{ color:var(--up); }
.kpi.k-gap{ border-color:var(--gap-line); border-style:dashed; }
.kpi.k-gap .kv{ color:var(--gap); }
.kpi{ animation:ascRise .46s var(--ease) both; }
.kpi:nth-child(1){ animation-delay:20ms; }
.kpi:nth-child(2){ animation-delay:80ms; }
.kpi:nth-child(3){ animation-delay:140ms; }
.kpi:nth-child(4){ animation-delay:200ms; }
@keyframes ascRise{ from{ opacity:0; transform:translateY(10px); } to{ opacity:1; transform:none; } }
/* 顶部 2px 强调条：把「量级」也画出来 */
.kpi::after{
  content:""; position:absolute; left:0; top:0; height:2px;
  background:var(--accent);
  width:calc(var(--w,0) * 1%);                   /* 兜底即终态 */
  animation:ascBar .95s var(--ease) both;
  animation-delay:.16s;
}
@keyframes ascBar{ from{ width:0; } to{ width:calc(var(--w,0) * 1%); } }
.kpi.k-down::after{ background:var(--down); }
.kpi.k-warn::after{ background:var(--warn); }
.kpi.k-up::after{ background:var(--up); }
.kpi.k-gap::after{ background:var(--gap); }

/* ---- 4.3 限量差异图谱 ---- */
.dmap{
  background:var(--bg); border:1px solid var(--border); border-radius:var(--r);
  padding:18px 20px 14px; margin-bottom:14px;
  box-shadow:var(--shadow);
}
.dmap-head{ display:flex; flex-wrap:wrap; align-items:baseline; gap:8px 16px; margin-bottom:6px; }
.dmap-head h3{
  font-size:var(--t-h3); font-weight:700; color:var(--ink-1);
  display:flex; align-items:center; gap:9px;
}
.dmap-head h3::before{ content:""; width:3px; height:14px; border-radius:99px; background:var(--accent); }
.dmap-head .dmap-sub{ font-size:var(--t-sm); color:var(--ink-3); }
.dmap-legend{
  display:flex; flex-wrap:wrap; gap:8px 18px; align-items:center;
  padding:10px 0 14px; border-bottom:1px solid var(--border); margin-bottom:6px;
}
.dmap-legend .lg{ display:inline-flex; align-items:center; gap:7px; font-size:var(--t-sm); color:var(--ink-2); }
.dmap-legend .mk{ width:12px; height:12px; flex:0 0 12px; position:relative; }
.mk-cn{ background:var(--accent); border-radius:3px; transform:rotate(45deg); }
.mk-tgt{ background:var(--accent-2); border-radius:3px; transform:rotate(45deg); }
.mk-eq{ background:linear-gradient(90deg,var(--accent) 0 50%,var(--accent-2) 50% 100%); border-radius:3px; transform:rotate(45deg); }
.mk-cac{ border:2px solid var(--ink-3); border-radius:99px; background:transparent; }
.mk-band{ width:20px !important; height:8px !important; border-radius:3px; background:var(--down-bg); border:1px solid var(--down-line); }
.mk-gapw{ background:repeating-linear-gradient(115deg,var(--gap-bg) 0 4px,transparent 4px 8px); border:1px dashed var(--gap-line); border-radius:3px; }
.dmap-legend .sep{ margin-left:4px; padding-left:16px; border-left:1px solid var(--border); }

/* 坐标轴：与泳道共用同一套网格列，保证刻度与标记严格对齐 */
.dmap-axis{
  display:grid;
  grid-template-columns:var(--lanew,206px) minmax(0,1fr) 96px;
  gap:12px; align-items:end;
  margin-top:10px;
}
.dmap-axis .ax-track{ position:relative; height:18px; }
.dmap-axis .tlabel{
  position:absolute; bottom:3px; transform:translateX(-50%);
  font-family:var(--mono); font-size:10.5px; color:var(--ink-3); white-space:nowrap;
}
.dmap-axis .unit{ position:absolute; right:0; bottom:3px; font-size:10.5px; color:var(--ink-3); }

.dmap-lanes{ display:flex; flex-direction:column; gap:2px; padding-top:8px; }
.lane{
  display:grid;
  grid-template-columns:var(--lanew,206px) minmax(0,1fr) 96px;
  align-items:center; gap:12px;
  padding:9px 0;
  border-radius:var(--r-xs);
  /* 入场用 animation + fill:both，末态即终态：脚本挂了也不会留下空白 */
  animation:ascLaneIn .46s var(--ease) both;
  animation-delay:calc(var(--i,0) * 45ms);
}
.lane:hover{ background:var(--panel-2); }
@keyframes ascLaneIn{ from{ opacity:0; transform:translateX(-12px); } to{ opacity:1; transform:none; } }
.lane-name{
  font-size:var(--t-sm); color:var(--ink-1); font-weight:600;
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
  padding-left:6px;
}
.lane-name em{ font-style:normal; font-weight:400; color:var(--ink-3); font-size:11px; margin-left:5px; }

.lane-track{
  position:relative; height:26px; min-width:0;
  background:var(--panel-2);   /* 量程参照轨道，不表示数值（正文已说明） */
}
.lane-track .gl{ position:absolute; top:0; bottom:0; width:1px; background:var(--border); }
.lane-track .baseline{
  position:absolute; left:0; right:0; top:50%; height:1px;
  background:var(--border); transform:translateY(-50%);
}
/* 差异带：宽度即倍数 */
.lane-track .band{
  position:absolute; top:50%; height:12px; margin-top:-6px;
  border-radius:99px;
  transform:scaleX(1); transform-origin:center;   /* 兜底即终态 */
  animation:ascScaleX .66s var(--ease) both;
  animation-delay:calc(var(--i,0) * 45ms + 150ms);
}
@keyframes ascScaleX{ from{ transform:scaleX(0); } to{ transform:scaleX(1); } }
.lane-red .band{ background:var(--down-bg); border:1px solid var(--down-line); }
.lane-yellow .band{ background:var(--warn-bg); border:1px solid var(--warn-line); }
.lane-green .band{ background:var(--up-bg); border:1px solid var(--up-line); }
.lane-grey .band{ background:repeating-linear-gradient(115deg,var(--gap-bg) 0 6px,transparent 6px 12px); border:1px dashed var(--gap-line); }
/* 标记 */
.lane-track .mk{ position:absolute; top:50%; }
.lane-track .mk-cn,
.lane-track .mk-tgt,
.lane-track .mk-eq{
  width:11px; height:11px; border-radius:2.5px; z-index:3;
  transform:translate(-50%,-50%) rotate(45deg);
  animation:ascPopD .44s var(--ease) both;
  animation-delay:calc(var(--i,0) * 45ms + 90ms);
}
.lane-track .mk-cn{ background:var(--accent); }
.lane-track .mk-tgt{ background:var(--accent-2); }
.lane-track .mk-eq{ background:linear-gradient(90deg,var(--accent) 0 50%,var(--accent-2) 50% 100%); }
.lane-track .mk-cac{
  width:9px; height:9px; border:2px solid var(--ink-3);
  border-radius:99px; background:var(--bg); z-index:2;
  transform:translate(-50%,-50%);
  animation:ascPop .44s var(--ease) both;
  animation-delay:calc(var(--i,0) * 45ms + 90ms);
}
@keyframes ascPop{ from{ transform:translate(-50%,-50%) scale(0); } to{ transform:translate(-50%,-50%) scale(1); } }
@keyframes ascPopD{ from{ transform:translate(-50%,-50%) rotate(45deg) scale(0); } to{ transform:translate(-50%,-50%) rotate(45deg) scale(1); } }
/* 缺口：没有目标值，用问号钉住整条道 */
.lane-track .mk-none{
  position:absolute; right:8px; top:50%; transform:translateY(-50%);
  font-size:11px; font-weight:700; color:var(--gap);
  letter-spacing:.02em;
}
.lane-track.is-gap{ border:1px dashed var(--gap-line); background:var(--gap-bg); }

.lane-verdict{ display:flex; align-items:center; gap:6px; justify-content:flex-end; }
.lane-ratio{
  font-family:var(--mono); font-variant-numeric:tabular-nums;
  font-size:var(--t-sm); font-weight:700; padding:2px 8px; border-radius:99px;
}
.lane-red .lane-ratio{ background:var(--down-bg); color:var(--down); }
.lane-yellow .lane-ratio{ background:var(--warn-bg); color:var(--warn); }
.lane-green .lane-ratio{ background:var(--up-bg); color:var(--up); }
.lane-grey .lane-ratio{ background:var(--gap-bg); color:var(--gap); }

.dmap-foot{
  display:flex; flex-wrap:wrap; gap:6px 18px; align-items:center;
  margin-top:12px; padding-top:11px; border-top:1px solid var(--border);
  font-size:var(--t-xs); color:var(--ink-3);
}
.dmap-foot b{ color:var(--ink-2); font-weight:600; }

/* ---- 4.4 表格 ---- */
.table-wrap{ overflow-x:auto; margin-top:4px; }
table{ width:100%; border-collapse:collapse; font-size:var(--t-body); }
caption{
  text-align:left; padding:0 0 10px; color:var(--ink-3);
  font-size:var(--t-sm); font-weight:500;
}
th{
  font-size:var(--t-xs); font-weight:700; letter-spacing:.05em;
  color:var(--ink-3); text-align:left;
  background:var(--panel-2);
  padding:9px 11px;
  border-bottom:1px solid var(--border);
  white-space:nowrap;
}
th:first-child{ border-radius:var(--r-xs) 0 0 0; }
th:last-child{ border-radius:0 var(--r-xs) 0 0; }
td{
  padding:9px 11px; text-align:left;
  border-bottom:1px solid var(--border);
  color:var(--ink-2); vertical-align:top;
}
/* 数值列：等宽右对齐 —— 眼睛扫量级的方式 */
td:nth-child(2),td:nth-child(3),td:nth-child(4){
  font-family:var(--mono); font-variant-numeric:tabular-nums;
  text-align:right; white-space:nowrap; color:var(--ink-1); font-weight:600;
}
tbody tr{ transition:background .14s var(--ease); }
tbody tr:hover td{ background:var(--panel-2); }
td .hint{ margin-top:3px; font-size:11.5px; line-height:1.6; }
/* 状态不靠颜色单独承载：行首加符号 */
tr.red-row td:first-child,tr.yellow-row td:first-child,
tr.green-row td:first-child,tr.grey-row td:first-child{ position:relative; padding-left:26px; }
tr.red-row td:first-child::before,tr.yellow-row td:first-child::before,
tr.green-row td:first-child::before,tr.grey-row td:first-child::before{
  position:absolute; left:10px; top:9px;
  font-family:var(--mono); font-weight:800; font-size:12px; line-height:1.5;
}
tr.red-row td:first-child::before{ content:"▼"; color:var(--down); }
tr.yellow-row td:first-child::before{ content:"="; color:var(--warn); }
tr.green-row td:first-child::before{ content:"✓"; color:var(--up); }
tr.grey-row td:first-child::before{ content:"?"; color:var(--gap); }
tr.red-row td:first-child{ box-shadow:inset 3px 0 0 var(--down); }
tr.yellow-row td:first-child{ box-shadow:inset 3px 0 0 var(--warn); }
tr.green-row td:first-child{ box-shadow:inset 3px 0 0 var(--up); }
tr.grey-row td:first-child{ box-shadow:inset 3px 0 0 var(--gap); }

.pill{
  display:inline-block; font-size:11px; font-weight:700;
  padding:2px 9px; border-radius:99px; white-space:nowrap;
}
.pill.red{ background:var(--down-bg); color:var(--down); border:1px solid var(--down-line); }
.pill.yellow{ background:var(--warn-bg); color:var(--warn); border:1px solid var(--warn-line); }
.pill.green{ background:var(--up-bg); color:var(--up); border:1px solid var(--up-line); }
.pill.grey{ background:var(--gap-bg); color:var(--gap); border:1px solid var(--gap-line); }

details.card > summary{
  cursor:pointer; list-style:none;
  font-size:var(--t-h3); font-weight:700; color:var(--ink-1);
  display:flex; align-items:center; gap:9px;
}
details.card > summary::-webkit-details-marker{ display:none; }
details.card > summary::before{
  content:""; width:3px; height:14px; border-radius:99px; background:var(--accent); flex:0 0 3px;
}
details.card > summary::after{
  content:"▾"; margin-left:auto; color:var(--ink-3); font-size:12px;
  transition:transform .2s var(--ease);
}
details.card[open] > summary::after{ transform:rotate(180deg); }
details.card[open] > summary{ margin-bottom:12px; }

/* 计数摘要（服务端/旧渲染可能用到） */
.counts{ display:flex; gap:8px; flex-wrap:wrap; margin:12px 0; }
.count-chip{ font-size:var(--t-xs); padding:4px 10px; border-radius:99px; font-weight:700; }
.count-chip.red{ background:var(--down-bg); color:var(--down); }
.count-chip.yellow{ background:var(--warn-bg); color:var(--warn); }
.count-chip.green{ background:var(--up-bg); color:var(--up); }
.count-chip.grey{ background:var(--gap-bg); color:var(--gap); }

/* ---- 4.5 清单 / 门禁 / 送检 ---- */
.check-item{
  display:flex; gap:11px; align-items:flex-start;
  padding:12px 4px; border-bottom:1px solid var(--border);
  font-size:var(--t-body); line-height:1.65; cursor:pointer;
  transition:background .14s var(--ease);
}
.check-item:hover{ background:var(--panel-2); }
.check-item:last-of-type{ border-bottom:0; }
.check-item input{
  width:19px; height:19px; flex:0 0 19px; margin-top:2px;
  accent-color:var(--accent); cursor:pointer;
}
.check-item span{ min-width:0; }
.check-item b{ color:var(--ink-1); font-weight:700; }
.check-item:has(input:checked) span{ color:var(--ink-3); }
.check-item:has(input:checked) b{ color:var(--up); }

#card-checklist > label:not(.check-item),#review-panel > label{
  display:block; margin:16px 0 6px;
  font-size:var(--t-xs); font-weight:600; color:var(--ink-3); letter-spacing:.04em;
}
.inspection-list{ list-style:none; margin:6px 0 14px; display:flex; flex-direction:column; gap:7px; }
.inspection-list li{
  padding:11px 13px; font-size:var(--t-body); line-height:1.65;
  background:var(--panel-2); border-radius:var(--r-sm);
  border-left:2px solid var(--accent-line);
}
.inspection-list li b{ color:var(--ink-1); font-weight:700; }
.inspection-list li .hint{ margin-top:4px; font-size:11.5px; }

.gate-item{
  display:flex; gap:10px; align-items:flex-start;
  padding:10px 0; border-bottom:1px dashed var(--border);
  font-size:var(--t-body); line-height:1.7;
}
.gate-item:last-child{ border-bottom:0; }
.gate-item b{
  flex:0 0 auto; color:var(--accent); font-weight:700;
  font-size:var(--t-sm); min-width:82px;
}
.gate-item .btn{ margin-left:auto; flex:0 0 auto; }
.gate-sev{ float:right; color:var(--ink-3); font-size:var(--t-xs); }

.actions{ list-style:none; }
.actions li{
  padding:8px 0 8px 22px; position:relative;
  font-size:var(--t-body); border-bottom:1px dashed var(--border);
}
.actions li::before{ content:"▸"; position:absolute; left:4px; color:var(--accent); }

.report-actions{ display:flex; flex-wrap:wrap; gap:8px; margin:14px 0 0; }

/* ---- 4.6 英文附录 ---- */
.en-report{
  background:var(--bg); border:1px solid var(--border); border-radius:var(--r);
  padding:18px 20px; margin-bottom:14px;
  box-shadow:var(--shadow);
  font-size:var(--t-sm); line-height:1.75; color:var(--ink-2);
  border-left:3px solid var(--accent-2);
}
.en-report h2{
  font-size:var(--t-h3); font-weight:700; color:var(--ink-1);
  margin-bottom:12px; letter-spacing:.01em;
}
.en-report h3{
  font-size:var(--t-sm); font-weight:700; color:var(--accent-deep);
  margin:14px 0 6px;
}
.en-report p{ margin-bottom:8px; }
.en-report ul{ margin:0 0 10px 18px; }
.en-report li{ margin-bottom:3px; }
.en-report b{ color:var(--ink-1); }

/* ============================================================
   5 · 通报预警中心
   ============================================================ */
.notif-list{ display:grid; grid-template-columns:repeat(auto-fill,minmax(330px,1fr)); gap:13px; }
.notif{
  background:var(--bg); border:1px solid var(--border); border-radius:var(--r);
  padding:15px 16px;
  display:flex; flex-direction:column; gap:9px;
  box-shadow:var(--shadow);
  transition:border-color .16s var(--ease), transform .16s var(--ease), box-shadow .16s var(--ease);
}
.notif:hover{ border-color:var(--accent-line); transform:translateY(-1px); box-shadow:var(--shadow-md); }
.notif .head{ display:flex; gap:8px; align-items:center; flex-wrap:wrap; }
.notif .head b{
  font-size:var(--t-xs); font-weight:700; letter-spacing:.06em;
  padding:2px 8px; border-radius:var(--r-pill);
  background:var(--accent-soft); color:var(--accent-deep);
}
body[data-surface="board"] .notif .head b{ color:var(--accent); }
.notif h4{ font-size:var(--t-body); line-height:1.6; font-weight:700; color:var(--ink-1); }
.notif .en-title{
  font-size:11.5px; color:var(--ink-3); line-height:1.6;
  display:-webkit-box; -webkit-line-clamp:2; line-clamp:2; -webkit-box-orient:vertical; overflow:hidden;
}
.notif .meta{ font-size:var(--t-xs); color:var(--ink-3); display:flex; gap:10px; flex-wrap:wrap; }
.notif .deadline{
  font-size:var(--t-xs); color:var(--down); font-weight:700;
  display:flex; align-items:center; gap:8px;
}
/* 每一条开放截止日都带倒计时环，色调只表达紧迫度 */
.notif .cd-line{
  font-size:var(--t-xs); font-weight:700;
  display:flex; align-items:center; gap:8px;
}
/* 倒计时环 */
.cd{ display:inline-flex; align-items:center; gap:6px; }
.cd-ring{ width:18px; height:18px; flex:0 0 18px; transform:rotate(-90deg); }
.cd-ring circle{ fill:none; stroke-width:2.5; }
.cd-ring .bgc{ stroke:var(--border-strong); }
.cd-ring .fgc{ stroke:var(--down); stroke-linecap:round; transition:stroke-dashoffset 1s var(--ease); }
.notif .translation{
  background:var(--panel-2); border-radius:var(--r-sm); padding:11px 13px;
  font-size:var(--t-sm); line-height:1.75; white-space:pre-wrap; color:var(--ink-2);
  border-left:2px solid var(--accent-line);
}
.notif .report-actions{ margin:0; padding-top:9px; border-top:1px solid var(--border); }

.watch-item{
  display:inline-flex; align-items:center; gap:7px;
  margin:8px 10px 0 0; padding:5px 6px 5px 12px;
  font-size:var(--t-sm);
  background:var(--panel-2); border:1px solid var(--border); border-radius:var(--r-pill);
}
#watch-list{ display:block; }
#watch-list .hint{ flex-basis:100%; }

#review-panel{ margin-top:16px; }
#review-panel a{ display:inline-block; margin-top:8px; font-size:var(--t-sm); }

/* ============================================================
   6 · 智能问答
   ============================================================ */
.answer-card{ display:block !important; }
.answer-card .answer-text{
  font-size:var(--t-body); line-height:1.9; white-space:pre-wrap; color:var(--ink-2);
}
.cites{ margin-top:14px; padding-top:12px; border-top:1px solid var(--border); }
.cite{
  font-size:var(--t-sm); color:var(--ink-3);
  background:var(--panel-2); border-radius:var(--r-sm);
  padding:10px 12px; margin-top:7px; line-height:1.7;
  border-left:2px solid var(--border-strong);
}
.cite b{ color:var(--accent-deep); }
body[data-surface="board"] .cite b{ color:var(--accent); }
.cite p{ margin-top:5px; color:var(--ink-2); }

/* ============================================================
   7 · 数据来源与服务保障
   ============================================================ */
.about-list{ list-style:none; }
.about-list li{
  font-size:var(--t-body); line-height:1.8;
  padding:8px 0 8px 20px; position:relative;
  border-bottom:1px solid var(--border);
}
.about-list li:last-child{ border-bottom:0; }
.about-list li::before{
  content:""; position:absolute; left:6px; top:19px;
  width:4px; height:4px; border-radius:99px; background:var(--accent);
}

.cli-cmd{
  display:flex; align-items:center; gap:10px;
  background:var(--panel-2); border:1px solid var(--border);
  border-radius:var(--r-xs); padding:9px 12px; margin-top:8px;
}
.cli-cmd code{
  font-family:var(--mono); font-size:12px; flex:1; word-break:break-all;
  color:var(--ink-1);
}
.agent-prompt{
  border:1px dashed var(--accent-line); border-radius:var(--r-sm);
  padding:13px 15px; margin-top:14px;
  background:linear-gradient(180deg,var(--accent-soft),transparent 80%);
}
.agent-prompt p{ font-size:var(--t-sm); line-height:1.75; }
.agent-prompt b{ color:var(--ink-1); }

/* 术语即点即释 */
.term{
  border:0; padding:0; background:transparent; font:inherit; color:inherit;
  border-bottom:1px dashed var(--accent-line);
  cursor:help;
}
.term:hover{ border-bottom-color:var(--accent); }
.gloss-pop{
  position:absolute; display:none; max-width:290px;
  background:var(--ink-1); color:var(--page);
  padding:11px 13px; border-radius:var(--r-sm);
  font-size:var(--t-sm); line-height:1.7; z-index:99;
  box-shadow:var(--shadow-lg);
}
.gloss-pop.show{ display:block; }

footer{
  text-align:center; font-size:var(--t-xs); color:var(--ink-3);
  padding:18px 26px; border-top:1px solid var(--border);
  background:var(--bg);
}
footer .sep{ margin:0 8px; opacity:.5; }

/* ============================================================
   8 · 入场：反馈性动效，一次性，不做装饰性循环
   （图谱与 KPI 的入场动画分别绑定在 §4.2 / §4.3 的自身规则上）
   ============================================================ */

/* ============================================================
   9 · 手机端 —— 每个多列区块都显式声明塌陷
   ============================================================ */
@media (max-width:1080px){
  .kpis{ grid-template-columns:repeat(2,minmax(0,1fr)); }
}
/* 介于手机和桌面之间仍保持图一的左侧导航，只把轨道收窄，避免 832px
   窗口误切成图二的整块顶部导航。 */
@media (max-width:980px) and (min-width:681px){
  :root{ --rail-w:200px; }
  .rail{ padding:16px 10px 14px; gap:18px; }
  .rail-brand{ gap:8px; padding:2px 4px 0; }
  .rail-brand .mark{ width:36px; height:36px; flex-basis:36px; font-size:14px; }
  .rail-brand b{ font-size:13px; }
  .rail-brand span{ font-size:9px; }
  .role{ padding:8px 9px; }
  .role b{ font-size:11.5px; }
  .role span{ font-size:9.5px; line-height:1.45; }
  .tab{ gap:7px; padding:8px 9px; font-size:12px; }
  .topbar{ padding:0 18px; gap:12px; }
  main{ padding:20px 18px 48px; }
}
@media (max-width:680px){
  /* 手机端才切换为上下结构；深色导航和浅蓝内容保持与图一同一套视觉。 */
  :root{ --rail-w:0px; }
  .shell{ grid-template-columns:minmax(0,1fr); }
  .rail{
    position:static; height:auto;
    padding:14px 14px 12px; gap:14px;
    border-right:0; border-bottom:1px solid var(--rail-border);
  }
  .rail-group.grow{ overflow:visible; }
  .roles{ flex-direction:row; gap:6px; }
  .role{ flex:1 1 0; min-width:0; }
  .role span{ display:none; }
  .tabs{ flex-direction:row; flex-wrap:wrap; gap:5px; }
  .tab{ width:auto; flex:1 1 30%; min-height:44px; justify-content:center; font-size:13px; padding:8px 10px; }
  .tab::before{ display:none; }
  .tab.active{ box-shadow:inset 0 -2px 0 var(--accent); }
  .rail-foot{ flex-direction:row; align-items:center; margin-top:0; padding-top:12px; }
  .topbar{ height:auto; padding:11px 14px; flex-wrap:wrap; gap:9px; }
  .topbar .tb-sub{ display:none; }
  .status-strip{ margin-left:0; width:100%; overflow-x:auto; padding-bottom:2px; }
  .status-strip::-webkit-scrollbar{ display:none; }
  .empty-flow{ grid-template-columns:minmax(0,1fr); }
  main{ padding:16px 14px 48px; }
  .dmap{ padding:15px 14px 12px; }
  /* 图谱在窄屏收成两段式：名称 + 道，比例移到自己那行 */
  .lane{ grid-template-columns:minmax(0,1fr) 74px; row-gap:5px; }
  .lane-name{ grid-column:1 / -1; white-space:normal; padding-left:2px; }
  .lane-track{ grid-column:1; }
  .lane-verdict{ grid-column:2; }
  .dmap-axis{ grid-template-columns:minmax(0,1fr) 74px; }
  .dmap-axis .ax-spacer{ display:none; }
  .dmap-axis .ax-track{ grid-column:1; }
  .dmap-axis .tlabel{ font-size:9.5px; }
  .dmap-axis .unit{ display:none; }
  .notif-list{ grid-template-columns:1fr; }
  .gate-item{ flex-wrap:wrap; }
  .gate-item .btn{ margin-left:0; }
  .table-wrap table{ min-width:620px; }
}
@media (max-width:560px){
  .kpis{ grid-template-columns:minmax(0,1fr); }
  /* 手机首屏优先让用户看到查询表单：角色说明收进桌面端，手机只保留角色名。 */
  .roles{ flex-direction:row; gap:5px; }
  .role{ padding:8px 7px; min-height:42px; }
  .role b{ font-size:11.5px; white-space:nowrap; }
  .role span{ display:none; }
  .rail{ gap:9px; padding:11px 12px 9px; }
  .rail-brand{ gap:8px; padding:1px 4px 0; }
  .rail-brand .mark{ width:36px; height:36px; flex-basis:36px; font-size:14px; }
  .rail-brand b{ font-size:14px; }
  .rail-brand span{ font-size:9.5px; }
  .rail-group{ gap:5px; }
  .tabs{ gap:3px; }
  .tab{ flex:1 1 30%; min-height:38px; padding:6px 5px; font-size:11.5px; justify-content:center; }
  .rail-foot{ padding-top:8px; gap:7px; }
  .form-row{ flex-direction:column; align-items:stretch; }
  .field{ max-width:none; flex-basis:auto; }
  .form-row .btn{ width:100%; }
  .filters{ flex-direction:row; }
  .filters select{ flex:1 1 44%; }
  .workspace-bar{ flex-direction:column; align-items:stretch; }
  .workspace-bar label{ display:block; }
  .verdict{ font-size:17px; }
  .dmap-legend{ gap:6px 13px; }
  .specline{ gap:10px 18px; }
}

/* ============================================================
   10 · 打印 —— 报告是要带走的那份纸
   ============================================================ */
@media print{
  :root{ --page:#fdfeff; --bg:#fdfeff; --panel-2:#f5f8fd; }
  body{ background:#fdfeff; font-size:10pt; }
  .rail,.topbar,footer,.form-card,.chips,.btn,.gloss-pop,.report-actions,
  .roles,.status-strip,.dmap-head .dmap-sub{ display:none !important; }
  .shell{ display:block; }
  main{ padding:0; max-width:none; }
  .panel{ display:none; }
  .panel.active{ display:block; }
  .card,.calib,.dmap,.notif,.en-report{
    border:1px solid #dbe1ec; box-shadow:none;
    page-break-inside:auto; break-inside:auto;
    padding:0 0 6mm; margin-bottom:5mm;
  }
  .kpis{ grid-template-columns:repeat(4,1fr); }
  tr,.check-item,.kpi{ break-inside:avoid; }
  .table-wrap{ overflow:visible; }
  .table-wrap table{ min-width:0; font-size:8.5pt; }
  th,td{ overflow-wrap:anywhere; }
  textarea{ height:auto; min-height:26mm; }
  .lane,.lane .band,.lane .mk,.lane .mk-cn,.lane .mk-tgt,.lane .mk-cac,
  .kpi,.kpi::after{ animation:none !important; }
  *{ -webkit-print-color-adjust:exact; print-color-adjust:exact; }
}
.no-print{ }

/* ============================================================
   11 · 减动效 —— duration 归零 + fill:both，动画直接落在末态
   ============================================================ */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{
    animation-duration:.01ms !important;
    animation-delay:0ms !important;
    animation-iteration-count:1 !important;
    transition-duration:.01ms !important;
    transition-delay:0ms !important;
    scroll-behavior:auto !important;
  }
}

/* ---------- 中国水果分类树（说明页） ---------- */
.tree-box{max-height:340px;overflow:auto;border:1px solid var(--border);border-radius:10px;padding:8px 10px;margin-top:8px;background:var(--bg)}
.tree-node{display:flex;align-items:baseline;gap:6px;padding:3px 0;font-size:12px;line-height:1.5;color:var(--ink-2)}
.tree-name{white-space:nowrap}
.tree-exc{color:var(--accent-2)}
.tree-badge{margin-left:auto;font-size:11px;padding:1px 7px;border-radius:9px;white-space:nowrap;flex:0 0 auto}
.tree-badge.has{background:rgba(26,95,180,.10);color:var(--accent)}
.tree-badge.none{background:rgba(88,101,122,.10);color:var(--ink-3)}
.tree-node.dim .tree-name{color:var(--ink-3)}
.tree-rest{margin:6px 0 0;font-size:12px;line-height:1.6;color:var(--ink-3)}
.tree-details{margin-top:8px;border-top:1px solid var(--border);padding-top:6px}
.tree-details[hidden]{display:none}
.tree-details>summary{cursor:pointer;font-size:12px;color:var(--accent);list-style:none}
.tree-details>summary::-webkit-details-marker{display:none}
.tree-details>summary::before{content:"▸ ";font-size:11px}
.tree-details[open]>summary::before{content:"▾ "}
.tree-details[open]>summary{margin-bottom:6px}
