/* ============================================================
   Web Runtime Console v1 — 样式
   最高规范来源:APP_UI设计规范_v1_3.md
   视觉参考:网页原型_v1.html
   - 设计 token(规范 2.3)
   - 三档断点 Mobile <768 / Tablet 768-1280 / Desktop ≥1280(规范 2.4)
   - 画布锁最大宽度(规范 2.2)
   - 所有尺寸引 token,不裸 px(规范 2.3)
   ============================================================ */

/* ---------- 设计 token(规范 2.3) ---------- */
:root{
  --text-sm:0.875rem; --text-base:1rem; --text-lg:1.125rem; --text-xl:1.25rem;
  --space-1:0.25rem; --space-2:0.5rem; --space-3:1rem;
  --space-4:1.5rem; --space-6:2rem;
  --radius-sm:0.5rem; --radius-md:0.75rem; --radius-lg:1rem;
  --input-min-h:3.5rem; --input-max-h:15rem;
  --canvas-max-w:80rem;          /* 1280px */
  --history-max-w:48rem;

  /* 浅色主题(默认)— 工业实用,无渐变、无玻璃拟物(规范第十章) */
  --bg:#f4f5f7;
  --canvas:#ffffff;
  --card:#fbfbfc;
  --ink:#1c2127;
  --ink-soft:#5b6470;
  --ink-faint:#9aa3af;
  --line:#e3e6ea;
  --line-strong:#cdd2d9;
  --brand:#1c4e8a;
  --brand-soft:#e8f0f9;
  --dl:#3572c6;          /* 下载/操作按钮·默认(淡一点) */
  --dl-hi:#1c4e8a;       /* 同上·悬停(深一点) */
  --accent:#c2410c;
  --ok:#15803d;
  --warn-bg:#fef3e2;
  --warn-ink:#9a5b16;
  --shadow:0 1px 2px rgba(20,30,45,.06),0 2px 8px rgba(20,30,45,.05);
  --shadow-pop:0 6px 24px rgba(20,30,45,.14);
}
[data-theme="dark"]{
  --bg:#15181d;
  --canvas:#1c2127;
  --card:#22272e;
  /* owner 2026-07-11:深色模式下 --surface 之前没定义→伺服表「电机代码」输入框回退成白底+浅字看不清。
     补上暗色 surface,让输入框/固定列(轴)/清除键 都跟随深色,文字可读。 */
  --surface:#2a3038;
  --surface-2:#333b45;
  --ink:#e6e9ed;
  --ink-soft:#9aa3af;
  --ink-faint:#6b7480;
  --line:#2e353d;
  --line-strong:#3a424c;
  --brand:#5b9bd5;
  --brand-soft:#1e2c3c;
  --dl:#5b9bd5;          /* 下载/操作按钮·默认(淡一点) */
  --dl-hi:#3f7cb8;       /* 同上·悬停(深一点) */
  --accent:#fb923c;
  --ok:#4ade80;
  --warn-bg:#2a2418;
  --warn-ink:#d8a35a;
  --shadow:0 1px 2px rgba(0,0,0,.3),0 2px 8px rgba(0,0,0,.25);
  --shadow-pop:0 6px 24px rgba(0,0,0,.5);
}

*{box-sizing:border-box;margin:0;padding:0;}
html,body{height:100%;}
body{
  font-family:"PingFang SC","Microsoft YaHei",-apple-system,system-ui,sans-serif;
  background:var(--bg);
  color:var(--ink);
  font-size:var(--text-base);
  line-height:1.6;
  -webkit-font-smoothing:antialiased;
}

/* ---------- 顶栏 ---------- */
.topbar{
  height:3.25rem;
  background:var(--canvas);
  border-bottom:1px solid var(--line);
  display:flex;align-items:center;
  padding:0 var(--space-4);
  gap:var(--space-3);
  position:sticky;top:0;z-index:30;
}
.brand-mark{
  display:flex;align-items:center;gap:var(--space-2);
  font-weight:700;letter-spacing:.02em;
}
.brand-mark .logo{
  width:1.6rem;height:1.6rem;border-radius:var(--radius-sm);
  background:var(--brand);color:#fff;
  display:flex;align-items:center;justify-content:center;
  font-size:.8rem;font-weight:800;
}
.brand-mark .sub{
  font-size:var(--text-sm);color:var(--ink-faint);font-weight:500;
}
.topbar .spacer{flex:1;}
.topbar .env-tag{
  font-size:var(--text-sm);color:var(--accent);
  border:1px solid var(--accent);
  padding:0 var(--space-2);border-radius:var(--radius-sm);
  font-weight:600;white-space:nowrap;
}
.icon-btn{
  width:2.1rem;height:2.1rem;border-radius:var(--radius-sm);
  border:1px solid var(--line);background:var(--card);
  color:var(--ink-soft);cursor:pointer;
  display:flex;align-items:center;justify-content:center;
  font-size:1rem;transition:.15s;flex:none;
}
.icon-btn:hover{border-color:var(--line-strong);color:var(--ink);}
/* ---------- /os 顶栏挂官网导航 ----------
   与官网 nav 同构(logo+品牌+5 链接),让用户进诊断后仍能回官网/去任意页。
   全部 scope 在 .topbar 下、只用 app 自己的 token(不引 home.css,避免撞名污染 app 配色);
   主题仍由 app.js(body[data-theme])统管,logo 靠 CSS content 随主题换深色版,零 JS 冲突。 */
.topbar .brand{display:flex;align-items:center;gap:.55rem;flex-shrink:0;text-decoration:none;color:inherit;}
.topbar .brand-logo{height:2rem;width:auto;}
body[data-theme="dark"] .topbar .brand-logo{content:url(/yigaite_logo_dark.png);}  /* 深色底换白字 logo */
.topbar .brand-name{font-weight:800;font-size:1rem;line-height:1.05;color:var(--ink);}
.topbar .brand-name small{display:block;font-size:.58rem;font-weight:600;color:var(--ink-faint);letter-spacing:.16em;}
.topbar .nav-links{display:flex;gap:1.15rem;margin-left:.9rem;align-items:center;}
.topbar .nav-links a{font-size:.92rem;color:var(--ink-soft);font-weight:600;text-decoration:none;white-space:nowrap;transition:.15s;}
.topbar .nav-links a:hover{color:var(--brand);}
@media(max-width:820px){
  .topbar .brand-name{display:none;}      /* 窄屏只留 logo,腾地方给链接 */
  .topbar .env-tag{display:none;}
  .topbar .nav-links{gap:.7rem;margin-left:.5rem;overflow-x:auto;-webkit-overflow-scrolling:touch;}
  .topbar .nav-links a{font-size:.85rem;}
}

/* ---------- 画布:锁最大宽度,居中(规范 2.2 / 2.4) ---------- */
.stage{
  height:calc(100vh - 3.25rem);
  display:flex;justify-content:center;
  overflow:hidden;
}
.canvas{
  width:100%;
  max-width:var(--canvas-max-w);
  background:var(--canvas);
  display:flex;flex-direction:column;
  position:relative;
}
@media(min-width:1280px){
  /* 中间竖线拿掉(owner 2026-07-05):画布不描边,只靠背景色区分 */
}

/* ---------- 状态机:空状态居中 / 对话状态钉底(规范 3.1) ----------
   空状态改为「正常流 flex 纵向居中」:hero → composer → chips 依次排,
   整组在画布内垂直居中。不再用绝对定位互相叠放(旧方案 hero 被居中的
   composer 盖住 = 看不见的根因),正常流下内容一定可见。 */
.canvas[data-state="empty"]{
  justify-content:center;         /* 三块(hero/composer/chips)作为一组垂直居中 */
  align-items:center;
  gap:var(--space-2);
  padding-bottom:6rem;            /* 略微上抬,视觉重心更稳 */
}
.canvas[data-state="empty"] .history{display:none;}
.canvas[data-state="empty"] .empty-hero{display:flex;}
.canvas[data-state="empty"] .composer-wrap{
  position:static;transform:none;background:transparent;
  width:100%;flex:0 0 auto;
}
.canvas[data-state="chat"] .empty-hero{display:none;}
.canvas[data-state="chat"] .history{display:block;}
.canvas[data-state="chat"] .composer-wrap{
  position:static;transform:none;
  border-top:1px solid var(--line);
}

.empty-hero{
  flex-direction:column;
  align-items:center;justify-content:center;
  gap:var(--space-3);
  padding:var(--space-4) var(--space-6);
  text-align:center;
  flex:0 0 auto;                  /* 自然高度,正常流 */
}
.empty-hero h1{font-size:1.6rem;font-weight:700;letter-spacing:.01em;}
.empty-hero p{
  color:var(--ink-soft);font-size:var(--text-base);max-width:32rem;
}
/* (原 canvas 左上角常驻 logo `.corner-brand`/`.cb-logo` 整套已退役·2026-07-28:
    顶栏 nav 已带品牌 logo,画布内不再重复;连带删除其聊天态预留高度与顶部遮罩,不留死空间) */
.canvas[data-state="chat"] .history{padding-top:var(--space-4);}
.eh-examples{
  display:flex;flex-wrap:wrap;gap:var(--space-2);justify-content:center;
  max-width:36rem;margin-top:var(--space-1);
}
/* 示例作为画布直接子级,坐在输入框下方;仅空状态显示 */
.canvas > .eh-examples{width:100%;max-width:42rem;margin:var(--space-3) auto 0;padding:0 var(--space-4);box-sizing:border-box;}
.canvas[data-state="empty"] > .eh-examples{display:flex;flex:0 0 auto;}
.canvas[data-state="chat"]  > .eh-examples{display:none;}
.eh-example{
  border:none;border-radius:999px;cursor:pointer;padding:8px 16px;
  background:var(--brand-soft);color:var(--brand);
  font-size:var(--text-sm);line-height:1.4;transition:.12s;
}
.eh-example:hover{background:var(--brand);color:#fff;}
/* 示例追问 chips:空状态在 composer 下方;chat 状态隐藏。
   独立于 .empty-hero 定位,避免被 .composer-wrap 的居中绝对定位遮挡。 */
.canvas > .chips{
  display:flex;flex-wrap:wrap;gap:var(--space-2);
  justify-content:center;
  max-width:42rem;width:100%;
  margin:var(--space-2) auto 0;
  padding:0 var(--space-4);
  pointer-events:auto;
}
.canvas[data-state="empty"] > .chips{display:flex;flex:0 0 auto;}
.canvas[data-state="chat"]  > .chips{display:none;}
.example-chip{
  font-size:var(--text-sm);color:var(--ink-soft);
  background:var(--card);border:1px solid var(--line);
  padding:var(--space-2) var(--space-3);
  border-radius:var(--radius-md);cursor:pointer;transition:.15s;
}
.example-chip:hover{border-color:var(--brand);color:var(--brand);}

/* ---------- 对话历史区(规范第七章) ---------- */
.history{
  flex:1;overflow-y:auto;
  padding:var(--space-4) var(--space-4) var(--space-6);
}
.history-inner{max-width:var(--history-max-w);margin:0 auto;}

.msg{margin-bottom:var(--space-4);}
.msg-user{display:flex;justify-content:flex-end;}
.msg-user .bubble{
  background:var(--brand-soft);
  border:1px solid var(--line);
  color:var(--ink);
  padding:var(--space-2) var(--space-3);
  border-radius:var(--radius-md);
  max-width:80%;white-space:pre-wrap;word-break:break-word;
}

/* 答案块 */
.answer{
  background:var(--card);
  border:1px solid var(--line);
  border-radius:var(--radius-md);
  padding:var(--space-4);
  box-shadow:var(--shadow);
}

/* Runtime 详情:默认折叠 —— 工程师想看证据才展开,不常驻、不压答案 */
.rt-details{
  margin-top:var(--space-3);
  border-top:1px solid var(--line);
  padding-top:var(--space-2);
}
.rt-details summary{
  font-size:var(--text-sm);color:var(--ink-faint);
  cursor:pointer;user-select:none;list-style:none;
}
.rt-details summary::-webkit-details-marker{display:none;}
.rt-details summary::before{content:"\25B8  ";}
.rt-details[open] summary::before{content:"\25BE  ";}

/* Stage 7.5 · runtime_clarification 问题列表 */
.rt-clar-list{
  margin:0 0 var(--space-2);
  padding-left:1.2em;
  list-style:disc;
  font-size:var(--text-base);
  color:var(--ink);
}
.rt-clar-list li{margin-bottom:6px;line-height:1.55;}

/* Stage 8.5 · 结构化证据多选列表 */
.rt-opt-list{
  display:flex;flex-direction:column;gap:var(--space-2);
  margin-bottom:var(--space-3);
}
.rt-opt-pill{
  display:flex;align-items:flex-start;gap:var(--space-2);
  border:1px solid var(--line);border-radius:var(--radius-md);
  padding:var(--space-3);
  cursor:pointer;background:var(--canvas);color:var(--ink);
  transition:.12s;font-size:var(--text-base);line-height:1.45;
}
.rt-opt-pill:hover{border-color:var(--brand);background:var(--brand-soft);}
.rt-opt-pill input[type=checkbox]{
  margin-top:0.25em;flex-shrink:0;cursor:pointer;
  accent-color:var(--brand);
}
.rt-opt-pill .rt-opt-label{flex:1;}
.rt-opt-pill:has(input:checked){
  border-color:var(--brand);background:var(--brand-soft);
}

/* 主行动按钮(提交已选) —— 与 .opt 样式区分:有 brand 填色 */
.opt.opt-primary{
  background:var(--brand);color:#fff;border-color:var(--brand);
  font-weight:600;text-align:center;
}
.opt.opt-primary:hover{filter:brightness(0.95);}
.opt.opt-primary:disabled{
  opacity:.5;cursor:not-allowed;filter:none;
}

/* Stage 8.6 · 弹窗内 textarea(补充描述) */
.rt-clar-textarea-wrap{
  display:flex;flex-direction:column;gap:var(--space-2);
  margin-bottom:var(--space-3);
}
.rt-clar-textarea-label{
  font-size:var(--text-sm);color:var(--ink-soft);
  line-height:1.5;
}
.rt-clar-textarea{
  width:100%;
  border:1px solid var(--line);border-radius:var(--radius-md);
  padding:var(--space-3);
  font-family:inherit;font-size:var(--text-base);
  color:var(--ink);background:var(--canvas);
  resize:vertical;min-height:5em;
}
.rt-clar-textarea:focus{
  outline:none;border-color:var(--brand);
  box-shadow:0 0 0 2px var(--brand-soft);
}

.seg{margin-bottom:var(--space-3);}
.seg:last-of-type{margin-bottom:0;}
.seg-label{
  font-size:var(--text-sm);font-weight:700;
  color:var(--brand);letter-spacing:.03em;
  margin-bottom:var(--space-1);
}
.seg p{font-size:var(--text-base);white-space:pre-wrap;}
.seg-safety .seg-label{color:#b5650f;}

/* 对比表 —— Mobile 可横向滚动 */
.pm-table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch;}
.pm-table{
  border-collapse:collapse;width:100%;min-width:22rem;
  font-size:var(--text-sm);
}
.pm-table th,.pm-table td{
  border:1px solid var(--line);
  padding:var(--space-2);text-align:left;vertical-align:top;
}
.pm-table th{background:var(--brand-soft);color:var(--brand);font-weight:600;}
.pm-table td:first-child,.pm-table th:first-child{
  color:var(--ink-faint);white-space:nowrap;
}

/* 伺服参数表:列多(库全参数)→等宽一致+表头换行,套 .pm-table-wrap 左右滚动 */
.rt-servo-tbl{table-layout:fixed;width:auto;}
.rt-servo-tbl th,.rt-servo-tbl td{
  width:4rem;min-width:4rem;max-width:4rem;
  padding-left:4px;padding-right:4px;
  white-space:normal;word-break:break-word;
  text-align:center;vertical-align:middle;
}
.rt-servo-tbl th{font-size:.7rem;line-height:1.2;}
.rt-servo-th-def{font-weight:600;}
.rt-servo-mc-edit{
  width:100%;box-sizing:border-box;
  border:1px solid var(--line);border-radius:4px;
  padding:4px 2px;text-align:center;
  font-size:var(--text-sm);background:var(--surface,#fff);color:var(--ink);
}
.rt-servo-mc-edit:focus{outline:none;border-color:var(--brand);background:var(--brand-soft);}
.rt-servo-models{margin-top:var(--space-2);}
.rt-servo-model-line{font-size:var(--text-sm);font-weight:600;color:var(--ink);}
.rt-servo-model-pick{
  font-size:var(--text-sm);color:var(--ink);cursor:pointer;
  padding:3px 6px;border-radius:4px;display:inline-block;margin:2px 8px 2px 0;
}
.rt-servo-model-pick:hover{background:var(--brand-soft);}
.rt-servo-model-pick.selected{color:var(--brand);font-weight:600;background:var(--brand-soft);}
.rt-servo-update{
  margin-top:var(--space-3,14px);padding:11px 32px;font-size:var(--text-base,15px);font-weight:600;cursor:pointer;
  border:1px solid var(--brand);border-radius:var(--radius-md,8px);
  background:var(--brand);color:#fff;
}
.rt-servo-update:hover{filter:brightness(1.06);}
.rt-servo-clear{
  margin:var(--space-3,14px) 0 0 var(--space-2);padding:11px 26px;font-size:var(--text-base,15px);cursor:pointer;
  border:1px solid var(--line);border-radius:var(--radius-md,8px);
  background:var(--surface,#fff);color:var(--ink-soft);
}
.rt-servo-clear:hover{background:var(--surface-2,#f5f5f5);}
.rt-servo-tbl td.rt-cell-bad{
  background:#fdecea;color:#c0392b;font-weight:600;cursor:help;
}
.rt-servo-alarm{
  margin:var(--space-2) 0;padding:8px 12px;border-radius:var(--radius-sm);
  background:#fff4e5;border:1px solid #f0b27a;color:#b9540b;
  font-size:var(--text-sm);font-weight:600;
}
.rt-servo-th-code{margin-top:2px;font-weight:400;color:var(--ink-faint);font-size:.64rem;}
.rt-servo-tbl th:first-child,.rt-servo-tbl td:first-child{
  width:2.5rem;min-width:2.5rem;max-width:2.5rem;
  position:sticky;left:0;z-index:1;background:var(--surface,#fff);
}
.rt-servo-tbl th:first-child{background:var(--brand-soft);}

.seg ol{padding-left:var(--space-4);}
.seg ol li{margin-bottom:var(--space-1);font-size:var(--text-base);}
.ct-jump{
  display:inline-block;padding:var(--space-1) var(--space-3);
  border:1px solid var(--line);border-radius:var(--radius-sm);
  font-size:var(--text-sm);color:var(--brand);background:var(--card);
  cursor:pointer;user-select:none;transition:.12s;
}
.ct-jump:hover{background:var(--brand-soft);border-color:var(--brand);}

/* 安全提示块 */
.safety{
  background:var(--warn-bg);color:var(--warn-ink);
  border-radius:var(--radius-sm);
  padding:var(--space-2) var(--space-3);
  font-size:var(--text-sm);
  margin-top:var(--space-2);
}

/* ---------- 反馈入口(规范第八章) ---------- */
.fb{
  margin-top:var(--space-3);
  padding-top:var(--space-2);
  border-top:1px solid var(--line);
  display:flex;justify-content:flex-end;
}
.fb-trigger{
  font-size:var(--text-sm);color:var(--ink-faint);
  background:none;border:none;cursor:pointer;
  display:flex;align-items:center;gap:var(--space-1);
  min-height:1.75rem;transition:.15s;
}
.fb-trigger:hover{color:var(--ink-soft);}
.fb-nomatch .fb-trigger{color:var(--brand);}

.fb-panel{
  margin-top:var(--space-2);
  background:var(--canvas);border:1px solid var(--line);
  border-radius:var(--radius-md);padding:var(--space-3);
  display:none;
}
.fb-panel.open{display:block;}
.fb-panel .ttl{
  font-size:var(--text-sm);font-weight:600;margin-bottom:var(--space-2);
}
.fb-tags{display:flex;flex-wrap:wrap;gap:var(--space-2);
  margin-bottom:var(--space-2);}
.fb-tag{
  font-size:var(--text-sm);
  border:1px solid var(--line);background:var(--card);
  color:var(--ink-soft);
  padding:var(--space-1) var(--space-2);
  border-radius:var(--radius-sm);cursor:pointer;transition:.12s;
  user-select:none;
}
.fb-tag.on{background:var(--brand-soft);border-color:var(--brand);
  color:var(--brand);}
.fb-note{
  width:100%;border:1px solid var(--line);background:var(--card);
  border-radius:var(--radius-sm);color:var(--ink);
  font-family:inherit;font-size:var(--text-sm);
  padding:var(--space-2);resize:vertical;min-height:3.5rem;
  margin-bottom:var(--space-2);
}
.fb-note:focus{outline:none;border-color:var(--brand);}
.fb-actions{display:flex;gap:var(--space-2);justify-content:flex-end;}
.btn{
  font-size:var(--text-sm);
  border:1px solid var(--line);background:var(--card);
  color:var(--ink-soft);
  padding:var(--space-1) var(--space-3);
  border-radius:var(--radius-sm);cursor:pointer;transition:.12s;
}
.btn:hover{border-color:var(--line-strong);color:var(--ink);}
.btn-primary{background:var(--brand);border-color:var(--brand);color:#fff;}
.btn-primary:hover{filter:brightness(1.08);color:#fff;}
.fb-done{
  font-size:var(--text-sm);color:var(--ok);font-weight:600;
  display:flex;align-items:center;gap:var(--space-1);
}

/* 思考中指示 */
.thinking{
  display:flex;align-items:center;gap:var(--space-2);
  color:var(--ink-faint);font-size:var(--text-sm);
  padding:var(--space-2) 0;
}
.thinking .dot{
  width:.5rem;height:.5rem;border-radius:50%;background:var(--ink-faint);
  animation:blink 1.2s infinite ease-in-out;
}
.thinking .dot:nth-child(2){animation-delay:.2s;}
.thinking .dot:nth-child(3){animation-delay:.4s;}
@keyframes blink{0%,80%,100%{opacity:.25;}40%{opacity:1;}}

/* 系统错误气泡 */
.msg-error .answer{
  border-color:var(--accent);
}
.msg-error .seg-label{color:var(--accent);}

/* ---------- 输入框 composer(规范第四章) ---------- */
.composer-wrap{padding:var(--space-3) var(--space-4);background:var(--canvas);}
.composer-inner{
  max-width:var(--history-max-w);margin:0 auto;position:relative;
}
.composer{
  background:var(--card);
  border:1px solid var(--line-strong);
  border-radius:var(--radius-lg);
  min-height:var(--input-min-h);
  display:flex;align-items:flex-end;
  gap:var(--space-2);
  padding:var(--space-2);
  transition:border-color .15s;
}
.composer:focus-within{border-color:var(--brand);}

.plus-btn{
  width:2.4rem;height:2.4rem;flex:none;
  border-radius:var(--radius-md);
  border:1px solid var(--line);background:var(--canvas);
  color:var(--ink-soft);font-size:1.3rem;cursor:pointer;
  display:flex;align-items:center;justify-content:center;
  transition:.15s;
}
.plus-btn:hover{border-color:var(--line-strong);color:var(--ink);}

.txt{
  flex:1;border:none;background:none;outline:none;resize:none;
  font-family:inherit;font-size:var(--text-base);color:var(--ink);
  line-height:1.5;
  max-height:var(--input-max-h);
  padding:var(--space-2) 0;
}
.txt::placeholder{color:var(--ink-faint);}
/* owner B·2026-07-11:语言 + 深度思考 挪到输入框上方单独一小排(不再挤在输入框里) */
.toggle-row{display:flex;gap:var(--space-2);align-items:center;
  margin-bottom:var(--space-2);padding-left:2px;flex-wrap:wrap;}
.tg{
  font-size:var(--text-sm);
  border:1px solid var(--line);background:var(--canvas);
  color:var(--ink-faint);
  padding:var(--space-1) var(--space-2);
  border-radius:var(--radius-sm);
  white-space:nowrap;transition:.12s;user-select:none;
}
/* 语言选择下拉(§7 出投影):外观同胶囊;选非中文=该语种输出(DeepSeek 翻译) */
.tg-lang{cursor:pointer;appearance:auto;line-height:1.2;}
.tg-lang:hover{border-color:var(--accent,#3b82f6);color:var(--ink);}
.tg-lang:focus{outline:none;border-color:var(--accent,#3b82f6);}
/* 外贸开关 = 语言开关(§7);关=中文输出 / 开=英文输出(目标语种 lang 随请求带后端) */
button.tg{cursor:pointer;}
button.tg:hover{border-color:var(--accent,#3b82f6);color:var(--ink);}
/* 深度思考开关:关=胶囊灰;开=蓝底高亮(在线 AI 作答·知识库为主) */
.tg-deep{cursor:pointer;}
.tg-deep:hover{border-color:var(--accent,#3b82f6);color:var(--ink);}
.tg-deep.on{background:var(--accent,#3b82f6);border-color:var(--accent,#3b82f6);color:#fff;}
/* 深思答案:AI 徽标(顶部声明是在线 AI)+ 脚注 + 回落提示 */
.rt-ai-badge{display:inline-flex;align-items:center;gap:5px;font-size:var(--text-sm);font-weight:600;
  color:var(--accent,#3b82f6);background:rgba(59,130,246,.10);
  border:1px solid rgba(59,130,246,.30);border-radius:var(--radius-sm);
  padding:2px 8px;margin-bottom:var(--space-2);}
.rt-ai-badge-icon{height:1.25em;width:auto;display:block;flex:0 0 auto;}
.fb-icon{height:1.15em;width:auto;vertical-align:-0.22em;margin-right:4px;}
/* 采购意向紧凑条:LOGO + 「选型或者采购请联系」+ 可点联系方式(库内库外通用·不占地方) */
.rt-lead{display:inline-flex;flex-direction:column;gap:8px;max-width:100%;
  padding:10px 14px;background:rgba(59,130,246,.08);
  border:1px solid rgba(59,130,246,.28);border-radius:12px;}
.rt-lead-head{display:flex;align-items:center;gap:8px;}
.rt-lead-icon{height:1.5em;width:auto;flex:0 0 auto;}
.rt-lead-text{font-size:var(--text-md,15px);font-weight:600;color:var(--accent,#3b82f6);}
.rt-lead-contacts{display:flex;flex-wrap:wrap;gap:7px;}
.rt-lead-chip{display:inline-flex;align-items:center;font-size:var(--text-sm,13px);
  color:var(--ink);background:var(--canvas,#fff);text-decoration:none;
  border:0.5px solid var(--line);border-radius:999px;padding:3px 11px;white-space:nowrap;}
a.rt-lead-chip:hover{border-color:var(--accent,#3b82f6);color:var(--accent,#3b82f6);}
.rt-lead-co{font-size:var(--text-xs,12px);color:var(--ink-faint);}
/* 版本匹配卡片(owner 2026-07-13):匹配=绿框、不匹配=橙框;主题(明/暗)跟随变量。 */
.rt-vmatch{display:flex;flex-direction:column;gap:9px;max-width:100%;
  padding:12px 15px;border-radius:12px;border:1px solid var(--line);}
.rt-vmatch.ok{background:rgba(34,197,94,.09);border-color:rgba(34,197,94,.34);}
.rt-vmatch.warn{background:var(--brand-soft);border-color:var(--brand);}
.rt-vmatch.suggest{background:var(--brand-soft);border-color:var(--brand);}   /* 下一步建议卡·淡蓝 */
.rt-shoot-btn{display:inline-flex;align-items:center;gap:6px;align-self:flex-start;
  font-size:var(--text-sm,13px);font-weight:600;color:#fff;background:var(--dl,#3572c6);
  border:none;border-radius:8px;padding:7px 14px;cursor:pointer;margin-top:2px;transition:background .15s;}
.rt-shoot-btn:hover{background:var(--dl-hi,#1c4e8a);}
.rt-vmatch-head{display:flex;align-items:center;gap:8px;}
.rt-vmatch-title{font-size:var(--text-md,15px);font-weight:700;color:var(--ink);}
.rt-vmatch-pair{display:flex;align-items:center;flex-wrap:wrap;gap:8px;}
.rt-vmatch-tag{font-size:var(--text-sm,13px);font-weight:600;color:var(--ink);
  background:var(--canvas,#fff);border:0.5px solid var(--line);border-radius:8px;padding:3px 10px;}
.rt-vmatch-arrow{font-size:var(--text-md,15px);color:var(--ink-faint);font-weight:700;}
.rt-vmatch-msg{font-size:var(--text-sm,13px);line-height:1.55;color:var(--ink);}
.rt-vmatch-dl{display:flex;flex-direction:column;gap:7px;margin-top:2px;
  padding-top:9px;border-top:0.5px solid var(--line);}
.rt-vmatch-dl-head{font-size:var(--text-sm,13px);font-weight:600;color:var(--brand,#2563eb);}
.rt-dl-row{display:flex;align-items:center;flex-wrap:wrap;gap:8px;}
.rt-dl-label{font-size:var(--text-sm,13px);color:var(--ink-faint);min-width:6em;}
.rt-dl-btn{display:inline-flex;align-items:center;font-size:var(--text-sm,13px);font-weight:600;
  color:#fff;background:var(--dl,#3572c6);text-decoration:none;transition:background .15s;
  border-radius:8px;padding:5px 13px;white-space:nowrap;}
a.rt-dl-btn:hover{background:var(--dl-hi,#1c4e8a);}
.rt-dl-file{font-size:var(--text-xs,12px);color:var(--ink);word-break:break-all;}
.rt-dl-note{font-size:var(--text-xs,12px);color:var(--ink-faint);}
.rt-svu-notes{background:var(--brand-soft);border-radius:8px;padding:9px 12px;}
.rt-svu-h{font-size:var(--text-sm,13px);font-weight:700;color:var(--brand,#2563eb);margin-bottom:4px;}
.rt-svu-ul{margin:0;padding-left:18px;display:flex;flex-direction:column;gap:3px;}
.rt-svu-li{font-size:var(--text-sm,13px);line-height:1.55;color:var(--ink);}
.rt-svu-titlewrap{display:flex;flex-direction:column;gap:2px;}
.rt-svu-sub{font-size:var(--text-sm,13px);color:var(--ink-faint);}
.rt-svu-notice{font-size:var(--text-sm,13px);font-weight:700;color:#b45309;margin-bottom:8px;}
@media (prefers-color-scheme: dark){.rt-svu-notice{color:#fbbf24;}}
[data-theme="dark"] .rt-svu-notice{color:#fbbf24;}
[data-theme="light"] .rt-svu-notice{color:#b45309;}
.rt-svu-oph{font-size:var(--text-sm,13px);font-weight:600;color:var(--ink);margin-bottom:7px;}
.rt-svu-grid{display:grid;grid-template-columns:1fr 1fr;gap:5px 18px;}
.rt-svu-op{display:flex;gap:6px;font-size:var(--text-sm,13px);line-height:1.5;color:var(--ink);min-width:0;}
.rt-svu-opn{color:var(--ink-faint);flex:0 0 auto;}
.rt-svu-opt{min-width:0;}
@media (max-width:440px){.rt-svu-grid{grid-template-columns:1fr;}}
.rt-svu-warn{font-size:var(--text-sm,13px);font-weight:700;color:#b45309;
  background:rgba(245,158,11,.14);border-radius:8px;padding:7px 11px;}
@media (prefers-color-scheme: dark){.rt-svu-warn{color:#fbbf24;}}
[data-theme="dark"] .rt-svu-warn{color:#fbbf24;}
[data-theme="light"] .rt-svu-warn{color:#b45309;}
/* 电机代码不一致 内嵌"诊断"收集卡(owner 2026-07-13·C版) */
.rt-svc{display:flex;flex-direction:column;gap:11px;max-width:100%;
  background:var(--surface,var(--canvas,#fff));border:0.5px solid var(--line);border-radius:12px;padding:15px 16px;margin-top:4px;}
.rt-svc-head{display:flex;align-items:flex-start;gap:9px;}
.rt-svc-icon{height:1.5em;width:auto;flex:0 0 auto;margin-top:1px;}
.rt-svc-title{font-size:var(--text-md,15px);font-weight:600;color:var(--ink);}
.rt-svc-guide{font-size:var(--text-sm,13px);line-height:1.6;color:var(--ink-faint);}
.rt-svc-row{display:grid;grid-template-columns:1fr 1fr;gap:10px;}
.rt-svc-field{display:flex;flex-direction:column;gap:4px;font-size:var(--text-xs,12px);color:var(--ink-faint);min-width:0;}
.rt-svc-input{height:38px;border:0.5px solid var(--line);border-radius:8px;padding:0 10px;font-size:var(--text-sm,14px);
  color:var(--ink);background:var(--canvas,#fff);width:100%;box-sizing:border-box;}
.rt-svc-input:focus{outline:none;border-color:var(--brand,#2563eb);}
.rt-svc-btn{height:40px;border:none;border-radius:8px;background:var(--brand,#2563eb);color:#fff;
  font-size:var(--text-md,14px);font-weight:600;cursor:pointer;}
.rt-svc-btn:hover{opacity:.9;}
/* 报警卡一键深思(样式A·蓝色实心大按钮·owner 2026-07-18):整条铺满,内联SVG sparkles+文案,无尾箭头 */
.rt-alarm-deep{width:100%;margin-top:var(--space-3);min-height:46px;padding:10px 16px;box-sizing:border-box;
  border:none;border-radius:10px;background:var(--brand);color:#fff;font-size:var(--text-md,15px);font-weight:600;
  cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background .15s;}
.rt-alarm-deep:hover{background:var(--dl-hi);}
.rt-alarm-deep:disabled{opacity:.6;cursor:default;}
@media (max-width:420px){.rt-svc-row{grid-template-columns:1fr;}}
.rt-ai-note{margin-top:var(--space-3);padding-top:var(--space-2);
  border-top:1px dashed var(--line);color:var(--ink-faint);
  font-size:var(--text-sm);line-height:1.5;}
.rt-deep-fallback{color:var(--ink-faint);font-size:var(--text-sm);
  background:rgba(148,163,184,.10);border:1px solid var(--line);
  border-radius:var(--radius-sm);padding:var(--space-2);margin-bottom:var(--space-2);}
.tg.on{background:var(--accent,#3b82f6);border-color:var(--accent,#3b82f6);color:#fff;}

.send-btn{
  width:2.4rem;height:2.4rem;flex:none;
  border-radius:var(--radius-md);border:none;
  background:var(--line-strong);color:var(--canvas);
  font-size:1.1rem;cursor:not-allowed;
  display:flex;align-items:center;justify-content:center;
  transition:.15s;
}
.send-btn:not([disabled]){background:var(--brand);cursor:pointer;}
.send-btn:not([disabled]):hover{filter:brightness(1.1);}

/* ---------- 加号气泡菜单(规范 4.5) ---------- */
.plus-menu{
  position:absolute;bottom:3.6rem;left:0;
  background:var(--canvas);
  border:1px solid var(--line);
  border-radius:var(--radius-md);
  box-shadow:var(--shadow-pop);
  padding:var(--space-1);
  display:none;flex-direction:column;
  min-width:13rem;z-index:20;
}
.plus-menu.open{display:flex;}
.pm-item{
  display:flex;align-items:center;gap:var(--space-2);
  padding:var(--space-2) var(--space-3);
  border-radius:var(--radius-sm);
  font-size:var(--text-base);font-family:inherit;
  border:none;background:none;color:var(--ink);
  width:100%;text-align:left;cursor:pointer;transition:.1s;
}
button.pm-item:hover{background:var(--brand-soft);}
.pm-item .ico{font-size:1.15rem;width:1.5rem;text-align:center;}
.pm-item .tag{
  font-size:.7rem;border:1px solid var(--line-strong);
  border-radius:3px;padding:0 4px;margin-left:auto;color:var(--ink-faint);
}

/* ---------- 当前讨论锚点芯片(v0 轻量上下文)---------- */
/* 只在有 active_anchor 时显示;[hidden] 默认隐藏。 */
.anchor-chip{
  display:inline-flex;align-items:center;gap:var(--space-2);
  background:var(--bg);border:1px solid var(--line);
  border-radius:999px;
  padding:.25rem .55rem .25rem .7rem;
  margin-bottom:var(--space-2);
  font-size:var(--text-sm);color:var(--ink-soft);
  max-width:100%;
}
.anchor-chip[hidden]{display:none;}
.anchor-chip-label{
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.anchor-chip-close{
  border:1px solid var(--line);background:transparent;cursor:pointer;
  color:var(--ink-soft);font-size:.76rem;line-height:1;
  padding:.18rem .5rem;border-radius:999px;
  display:inline-flex;align-items:center;gap:.15rem;white-space:nowrap;
  transition:.12s;
}
.anchor-chip-close:hover{
  background:var(--line);color:var(--ink);
}

/* ---------- 附件 chip 区(规范 4.5.3) ---------- */
.attach-strip{
  display:flex;flex-wrap:wrap;gap:var(--space-2);
  margin-bottom:var(--space-2);
}
.attach-strip:empty{display:none;}
.attach-chip{
  display:flex;align-items:center;gap:var(--space-2);
  background:var(--card);border:1px solid var(--line);
  border-radius:var(--radius-sm);
  padding:var(--space-1) var(--space-2);
  font-size:var(--text-sm);color:var(--ink-soft);
  max-width:14rem;
}
.attach-chip .thumb{
  width:1.75rem;height:1.75rem;flex:none;
  border-radius:var(--radius-sm);object-fit:cover;
  background:var(--brand-soft);
  display:flex;align-items:center;justify-content:center;font-size:1rem;
}
.attach-chip .meta{
  display:flex;flex-direction:column;min-width:0;line-height:1.3;
}
.attach-chip .nm{
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ink);
}
.attach-chip .sz{font-size:.75rem;color:var(--ink-faint);}
.attach-chip .bar{
  width:3rem;height:3px;background:var(--line);border-radius:2px;
  overflow:hidden;flex:none;
}
.attach-chip .bar i{
  display:block;height:100%;background:var(--brand);width:0;
  transition:width .2s;
}
.attach-chip .x{
  cursor:pointer;color:var(--ink-faint);font-weight:700;
  flex:none;padding:0 var(--space-1);
}
.attach-chip .x:hover{color:var(--accent);}

/* 用户消息气泡内的附件缩略 */
.msg-user .bubble .att-row{
  display:flex;flex-wrap:wrap;gap:var(--space-1);
  margin-top:var(--space-1);
}
.msg-user .bubble .att-mini{
  font-size:var(--text-sm);color:var(--ink-soft);
  background:var(--canvas);border:1px solid var(--line);
  border-radius:var(--radius-sm);padding:0 var(--space-2);
}

/* ---------- 画布拖拽上传(规范 4.5:仅 Desktop / Tablet) ---------- */
.drop-overlay{
  position:absolute;inset:0;z-index:40;
  display:none;align-items:center;justify-content:center;
  background:rgba(28,78,138,.08);
  padding:var(--space-6);
}
.drop-overlay.show{display:flex;}
.drop-box{
  border:2px dashed var(--brand);border-radius:var(--radius-lg);
  background:var(--canvas);color:var(--brand);font-weight:600;
  padding:var(--space-6) var(--space-4);
  width:100%;text-align:center;
}

/* ---------- 错误提示条 ---------- */
.toast{
  position:fixed;left:50%;bottom:var(--space-4);
  transform:translateX(-50%) translateY(2rem);
  background:var(--ink);color:var(--canvas);
  font-size:var(--text-sm);
  padding:var(--space-2) var(--space-4);
  border-radius:var(--radius-md);
  box-shadow:var(--shadow-pop);
  opacity:0;pointer-events:none;transition:.25s;z-index:80;
  max-width:90vw;
}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0);}

/* ---------- 响应式:三档断点(规范 2.4) ---------- */
/* Mobile < 768 */
@media(max-width:767px){
  .topbar{padding:0 var(--space-3);}
  .brand-mark .sub{display:none;}
  .history{padding:var(--space-3) var(--space-3) var(--space-4);}
  .composer-wrap{padding:var(--space-2) var(--space-3);}
  .empty-hero h1{font-size:1.3rem;}
  .empty-hero{padding:var(--space-3);}
  /* 触控目标 ≥44px(规范 2.5) */
  .plus-btn,.send-btn{width:2.75rem;height:2.75rem;}
  .icon-btn{width:2.5rem;height:2.5rem;}
  .fb-trigger{min-height:2.75rem;}
  .pm-item{padding:var(--space-3);}
  /* 拖拽上传仅 Desktop / Tablet(规范 4.5) */
  .drop-overlay{display:none!important;}
}
/* Tablet 768-1280:画布居中,最大宽度 720px(规范 2.4) */
@media(min-width:768px) and (max-width:1279px){
  .canvas{max-width:45rem;}
}
/* Desktop ≥1280:画布锁 1280px,两侧留白 —— 已由 .canvas 处理 */

/* ---- OCR 识别结果:网络/通讯参数键值表 ---- */
.kv-table{border-collapse:collapse;width:100%;font-size:var(--text-sm);
  margin:.3rem 0;}
.kv-table td{border-bottom:1px solid var(--line);padding:.4rem .6rem;
  color:var(--ink);}
.kv-table td:first-child{color:var(--ink-soft);width:42%;}

/* 选型库·机型规格表(owner 2026-07-17:照官网「主要规格」那种表格)——表头/数值成对、四列一排。
   格子内容由库数据决定(哪类机型带哪几项、什么顺序都照库声明),这里只管长相。 */
.rt-spec-tb{border:1px solid var(--line);border-radius:var(--radius-sm);overflow:hidden;
  margin:.4rem 0 .6rem;font-size:var(--text-sm);}
.rt-spec-row{display:grid;grid-template-columns:repeat(4,1fr);}
.rt-spec-cell{padding:.45rem .5rem;text-align:center;color:var(--ink);
  border-right:1px solid var(--line);border-bottom:1px solid var(--line);
  word-break:break-all;line-height:1.4;}
.rt-spec-cell:last-child{border-right:none;}
.rt-spec-row:last-child .rt-spec-cell{border-bottom:none;}
.rt-spec-head .rt-spec-cell{background:var(--bg);color:var(--ink-soft);font-weight:600;}
@media (max-width:520px){.rt-spec-row{grid-template-columns:repeat(2,1fr);}}

/* ============================================================
   Runtime UX Engineering Phase 4(2026-05-25)
   payload.runtime_ui_state 渲染样式 · Banner / Timeline /
   Branch Cards / Verification Progress / Event Badges / Scope Msg
   ============================================================ */

.runtime-ux-bar{
  position:sticky;top:0;z-index:50;
  background:var(--canvas);border-bottom:1px solid var(--line);
  padding:.5rem 1rem;
  font-size:var(--text-sm);
  box-shadow:var(--shadow);
}
.rux-tl-node.active{
  background:var(--brand);color:#fff;border-color:var(--brand);
  font-weight:600;
}

/* ---- Refresh flash 视觉反馈 ---- */
@keyframes rdbFlash {
  0%   { box-shadow:0 0 0 2px rgba(28,78,138,.28); }
  100% { box-shadow:var(--shadow); }
}

/* ============================================================
   Phase 6B · CurrentRuntimePanel + Card Lifecycle 样式
   主流程容器 · 6 状态视觉区分
   ============================================================ */
.current-runtime-panel{
  margin: var(--space-4) auto;
  max-width: 48rem;
  background: linear-gradient(180deg, rgba(255,255,255,.96), rgba(248,250,254,.92));
  border: 1px solid var(--border);
  border-radius: var(--radius-lg);
  padding: var(--space-5) var(--space-6);
  box-shadow: 0 4px 18px rgba(20,30,50,.08);
  position: relative;
  z-index: 35; /* 高于 modal(25)但低于 toast(80)*/
}
.current-runtime-panel[hidden]{ display: none !important; }
@keyframes rtCardLoading{
  0%{ background-position: -200% 0; }
  100%{ background-position: 200% 0; }
}

/* ---- composer 强制 z-index 高于 modal ---- */
.composer-wrap{ position: relative; z-index: 40; }

/* ---- body data-rt-ui-state 调试可视(可选) ---- */
body[data-rt-ui-state]::before{ content: ''; }

/* ============================================================
   Phase 16 · Industrial Runtime Cockpit · 6-zone layout
   全部 position:fixed · body.cockpit-mode 时给 .stage 让 margin
   ============================================================ */

:root{
  --cockpit-status-bar-h: 36px;
  --cockpit-sidebar-w: 220px;
  --cockpit-diag-w: 280px;
  --cockpit-bottom-h: 200px;
  --cockpit-bg: #f6f7fb;
  --cockpit-border: #d6dae6;
  --cockpit-text: #1a2540;
  --cockpit-muted: #5a6680;
  --cockpit-accent: #5588dd;
  --cockpit-warn: #d68a1f;
  --cockpit-danger: #c0454c;
  --cockpit-ok: #2ea66f;
}

/* Cockpit mode 给 stage 让出空间 */
body.cockpit-mode .stage{
  margin-top: var(--cockpit-status-bar-h);
  margin-left: var(--cockpit-sidebar-w);
  margin-right: var(--cockpit-diag-w);
  margin-bottom: var(--cockpit-bottom-h);
  transition: margin .2s ease;
}
body.cockpit-mode.dock-collapsed-session-nav .stage{
  margin-left: 32px;
}
body.cockpit-mode.dock-collapsed-diag-sidebar .stage{
  margin-right: 32px;
}
body.cockpit-mode.dock-collapsed-timeline.dock-collapsed-telemetry .stage{
  margin-bottom: 36px;
}
@keyframes csbDriftPulse{
  0%, 100%{ opacity: 1; }
  50%{ opacity: .55; }
}
.cnav-list li.active{ background: #fff; border-left-color: var(--cockpit-accent); font-weight: 600; }
@media (max-width: 720px){
  body.cockpit-mode .stage{
    margin-left: 0 !important;
    margin-right: 0 !important;
  }
}
body.persona-customer.cockpit-mode .stage{
  margin-left: 0;
  margin-bottom: 0;
}
body.runtime-advanced .adv-toggle{
  background: #1a3470;
  color: #fff;
  border-color: #1a3470;
}

/* Phase 16 cockpit chrome 已经是 body.cockpit-mode 才显;
   Phase 17A 即使开了 cockpit-mode,某些 zone 也要看 advanced */

/* ---- runtime-advanced 模式打开 · 解锁全部 Runtime Thinking ---- */
body.runtime-advanced .rt-narrative-zone.rt-narrative-top,
body.runtime-advanced .rt-narrative-zone.rt-narrative-bottom,
body.runtime-advanced .rt-narrowing-progress,
body.runtime-advanced .rt-narrative-direction,
body.runtime-advanced .rt-narrative-stage,
body.runtime-advanced .rt-narrative-why,
body.runtime-advanced .rt-narrative-confidence,
body.runtime-advanced .rt-narrative-evidence-reasoning,
body.runtime-advanced .rt-narrative-causal-reasoning,
body.runtime-advanced .rt-narrative-temporal-reasoning{
  display: block !important;
}
body.runtime-advanced .rt-narrative-zone{
  display: grid !important;
}
body.runtime-advanced .rt-journey-zone{
  display: block !important;
}
body.runtime-advanced .rt-archived-cardgroup{
  display: block !important;
}

/* ---- 主聊天区 panel 紧凑化 · 让 question + cards 成为视觉主角 ---- */
.current-runtime-panel{
  /* 收缩 panel 内边距 */
  padding: var(--space-3, 12px) var(--space-4, 16px);
}
body.runtime-advanced .rt-mini-status{ display: none; }

/* ---- composer 在默认(非 cockpit)模式下,确保不被遗弃 ---- */
body:not(.cockpit-mode) .composer-wrap{
  position: sticky;
  bottom: 0;
  z-index: 50;
  background: var(--canvas, #fff);
}
/* 高级模式时 hide(高级模式自己出 narrative top)*/
body.runtime-advanced .rt-compact-suspicion{
  display: none;
}
/* 高级模式时 hide(高级模式自己出 narrative bottom)*/
body.runtime-advanced .rt-mini-status{
  display: none;
}

/* ============================================================
   UI RESTORE · 恢复 APP_UI设计规范_v1_3.md 原始简洁界面
   强制隐藏所有 Phase 4-17A 累积的非规范 UI 元素
   规范第四章/第六章只保留:topbar + canvas + composer + modal
   ============================================================ */

/* ---- 1. 隐藏 Phase 4 Runtime UX bar(顶部 sticky banner)---- */
.runtime-ux-bar,
.runtime-ux-bar *{
  display: none !important;
}

/* ---- 8. 把 body.cockpit-mode / .runtime-advanced 副作用清零 ---- */
body.cockpit-mode .stage,
body.runtime-advanced .stage{
  margin: 0 !important;
}

/* ---- 9. CurrentRuntimePanel 极简化:不像 card,像内联对话流 ---- */
.current-runtime-panel{
  background: transparent !important;
  border: none !important;
  box-shadow: none !important;
  padding: 0 !important;
  max-width: 48rem !important;
  margin: var(--space-4) auto !important;
  z-index: auto !important;
}

/* ============================================================
   2026-05-26 · 架构重定位 · chat-inline card-group
   panel 单例废弃 · cards 跟随 reply 在 chat bubble 末尾 inline
   ============================================================ */

/* ---- 最高优先级:强制隐藏可能残留的 panel 单例 ---- */
#currentRuntimePanel,
.current-runtime-panel{
  display: none !important;
}
.card-group{
  display: grid;
  gap: 8px;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  margin-top: var(--space-2, 8px);
}
.card-group .rt-card{
  background: #fff;
  border: 1px solid var(--border, #e4e8f0);
  border-radius: 8px;
  padding: 12px 14px;
  font: inherit;
  color: inherit;
  cursor: pointer;
  text-align: left;
  transition: border-color .12s, background .12s, box-shadow .12s;
  display: flex;
  flex-direction: column;
  gap: 3px;
}
.card-group .rt-card:hover:not(:disabled){
  border-color: #5588dd;
  background: #f8fafd;
}
.card-group .rt-card:disabled{
  cursor: default;
  opacity: .55;
}
.card-group .rt-card.rt-card-selected{
  border-color: #2ea66f;
  background: #f0fbf4;
  opacity: 1;
}
.card-group .rt-card.rt-card-selected::after{
  content: '✓ 已选';
  display: block;
  font-size: .72rem;
  color: #2ea66f;
  margin-top: 4px;
  font-weight: 600;
}
.card-group .rt-card-title{
  font-size: .92rem;
  font-weight: 600;
  color: #1a2540;
  line-height: 1.4;
}
.card-group .rt-card-sub{
  font-size: .76rem;
  color: #6a7590;
  line-height: 1.35;
}

/* 旧 turn 的 cards · 留在历史里只读 · 视觉淡化 */
.card-group-archived{
  opacity: .55;
}
.card-group-archived .rt-card{
  cursor: default !important;
}
.card-group-archived .rt-card:hover{
  border-color: var(--border, #e4e8f0) !important;
  background: #fff !important;
}

/* card-group 4 级 lifecycle(active 是默认,无需 class)*/
.card-group-superseded{ opacity: .6; pointer-events: none; }
.card-group-superseded::after{
  content: '已记录'; display: inline-block;
  margin: 6px 0 2px 0; font-size: .72rem; color: #98a0b4;
}
.card-group-completed{ opacity: .85; pointer-events: none; }
.card-group-completed::after{
  content: '已完成'; display: inline-block;
  margin: 6px 0 2px 0; font-size: .72rem; color: #2ea66f; font-weight: 600;
}
.card-group-expired{ opacity: .35; pointer-events: none; filter: grayscale(.6); }

/* ============================================================
   Phase 7-B(2026-05-26)· Chat Message Bus 容器样式
   每条 bot 响应是一个 .cb-msg 容器,内部 .cb-msg-bubble 是 bot 元素的挂载点
   消除散件直接挂 historyInner 导致的"跨 msg 混淆"问题
   ============================================================ */
.cb-msg-bubble{
  display: flex; flex-direction: column;
  gap: 8px;
}
/* 一旦本 msg 不是最后一条(说明已经有新 msg 来了)→ 内部 cards 全部 disabled
   保证旧 message 一旦 close 自然归档,用户不能再点过去的 cards */
.cb-msg:not(:last-of-type) .card-group:not(.card-group-completed) .rt-card{
  opacity: .55;
  pointer-events: none;
}

/* ============================================================
   Phase 7-D(2026-05-26)· 撤销链接(只挂在当前 collapse 后的 msg footer)
   ============================================================ */
.cb-msg-undo-footer{
  margin-top: 4px; padding-top: 6px;
  border-top: 1px dashed #e0e4ee;
  display: flex; justify-content: flex-end;
}
.cb-msg-undo-link{
  background: transparent;
  border: none;
  color: #6a7590;
  font-size: .82rem;
  cursor: pointer;
  padding: 4px 8px;
  border-radius: 6px;
  transition: background .08s ease, color .08s ease;
}
.cb-msg-undo-link:hover:not(:disabled){
  background: #fef0f2;
  color: #c0454c;
}
.cb-msg-undo-link:disabled{
  color: #b9c0d4;
  cursor: not-allowed;
}
/* 历史 msg 的撤销 footer 自动隐藏(过了 10s 自然消失,但即使没消失,
   新 msg 来了也不能再撤销了) */
.cb-msg:not(:last-of-type) .cb-msg-undo-footer{
  display: none;
}

/* ===== v1.5 Runtime Projection Envelope 渲染(单契约 · 2026-05-28)=====
   E.1 Runtime Header + B.4 narrative/clarification + G.1 Hard Exit。轻量,引设计 token。 */
.rt-answer-object { max-width: var(--history-max-w, 720px); margin: 8px 0; position: relative; overflow: hidden; }
/* 答案卡水印:真文字「易改特 · Runtime OS」斜排·垫在内容后面(owner 2026-07-24)。
   ★一大段文字自动换行铺满(按实际卡尺寸填·非固定行数)→ 长卡右下角也不空。真文字非图片=无接缝;
   内容(含图片识别卡不透明底)z-index:1 盖在上面→卡片不受影响·水印只文字空隙透出。 */
.rt-wm { position: absolute; inset: 0; overflow: hidden; pointer-events: none; z-index: 0; }
.rt-wm-rot { position: absolute; top: 50%; left: 50%; width: 200%; height: 200%;
  transform: translate(-50%, -50%) rotate(-27deg);
  font-size: 15px; font-weight: 500; line-height: 4.0; word-break: break-all; text-align: center;
  color: rgba(17,17,17,0.09); }
.rt-answer-object > :not(.rt-wm) { position: relative; z-index: 1; }
@media (prefers-color-scheme: dark){ .rt-wm-rot { color: rgba(255,255,255,0.10); } }
/* 手动切主题:app 用裸 [data-theme]（属性在 <body>·见 styles.css:41），不是 :root/<html>·否则深色下不匹配→水印仍黑字看不见 */
[data-theme="dark"] .rt-wm-rot { color: rgba(255,255,255,0.10); }
[data-theme="light"] .rt-wm-rot { color: rgba(17,17,17,0.09); }
.rt-v15-narrative { color: var(--ink); line-height: 1.7; white-space: pre-wrap; }
.rt-clar-q { color: var(--ink); line-height: 1.6; }

/* E.2 三段式答案(conclusion/reason/steps/safety · 2026-05-28)*/
.rt-v15-conclusion { color: var(--ink); font-weight: 600; line-height: 1.7; margin-bottom: 8px; white-space: pre-wrap; }
.rt-v15-sec-title { color: var(--ink-soft); font-size: 13px; font-weight: 600; margin: 8px 0 4px; }
.rt-v15-ul { margin: 0 0 4px; padding-left: 20px; color: var(--ink); line-height: 1.7; }
.rt-v15-ul li { margin: 2px 0; }
.rt-v15-safety .rt-v15-sec-title { color: var(--cockpit-warn, #c47f17); }

/* E.2 ⑥ Runtime 详情(?debug=1 工程师闸门)*/
.rt-v15-debug { margin-top: 8px; font-size: 12px; color: var(--ink-faint); }
.rt-v15-debug summary { cursor: pointer; color: var(--ink-soft); }
.rt-v15-debug pre { background: var(--card, #f6f6f6); border: 1px solid var(--line);
                    border-radius: var(--radius-md, 8px); padding: 8px; overflow-x: auto;
                    white-space: pre-wrap; word-break: break-all; }
ol.rt-v15-ul { padding-left: 22px; }
ol.rt-v15-ul li { margin: 3px 0; }

/* 系统信封渲染:direct_hit 答案 / clarification 候选 */
.rt-ans-title { color: var(--ink); font-size: var(--text-lg); font-weight: 700;
                margin: 0 0 var(--space-3); line-height: 1.4; }
.rt-sec-body { color: var(--ink); font-size: var(--text-base); line-height: 1.7;
               margin: 0 0 var(--space-2); }
/* 顺序编号步骤(报警处理"1、… 2、…"拆行):每步独立一行,略留行距。 */
.rt-sec-step { display: block; }
.rt-sec-step + .rt-sec-step { margin-top: var(--space-1); }
.rt-sec-note { color: var(--ink-faint); font-size: var(--text-sm); margin: 0 0 var(--space-2); }
/* 字典内容递归子块(content_render_contract):键=小标题,值递归,整体缩进显层级。 */
.rt-sec-nest { margin: 2px 0 4px; padding-left: 12px;
               border-left: 2px solid var(--line); }
.rt-sec-nest .rt-v15-sec-title { font-size: 12px; margin: 6px 0 2px; }
.rt-clar-note { color: var(--ink-soft); font-size: var(--text-sm);
                background: var(--brand-soft); border-radius: var(--radius-sm);
                padding: var(--space-2) var(--space-3); margin-bottom: var(--space-3); }
.rt-clar-opts { display: flex; flex-direction: column; gap: var(--space-2);
                margin-top: var(--space-3); }
.rt-opt { display: block; width: 100%; text-align: left; cursor: pointer;
          border: 1px solid var(--line); border-radius: var(--radius-md);
          padding: var(--space-3); background: var(--canvas); color: var(--ink);
          font-size: var(--text-base); line-height: 1.45; transition: .12s; }
.rt-opt:hover { border-color: var(--brand); background: var(--brand-soft); }
/* 库内收敛候选 = 极简无边框高亮气泡(方案F·省地方·流式换行) */
.rt-clar-opts.rt-clar-chips { flex-direction: row; flex-wrap: wrap;
                              gap: var(--space-1) var(--space-2); }
.rt-opt.rt-opt-chip { display: inline-block; width: auto; border: none;
                      border-radius: var(--radius-sm); padding: 6px 10px;
                      background: var(--brand-soft); color: var(--brand);
                      font-size: var(--text-sm); line-height: 1.4; }
.rt-opt.rt-opt-chip:hover { background: var(--brand); color: #fff; }

/* ===== 搜不到 no-hit · 设计E 三段编号引导(闸内库内搜索失败·2026-07-06) ===== */
.rt-nohit-steps { display: flex; flex-direction: column; gap: 8px; margin: 6px 0; }
.rt-step { display: flex; gap: 10px; align-items: flex-start;
           padding: 11px 13px; border: 1px solid var(--line); border-radius: 10px; background: var(--canvas); }
.rt-step-chips { flex-direction: column; }
.rt-step-head { display: flex; gap: 10px; align-items: flex-start; }
.rt-step-n { flex: none; width: 20px; height: 20px; border-radius: 50%;
             background: var(--brand-soft); color: var(--brand); font-size: 12px; font-weight: 700;
             display: grid; place-items: center; margin-top: 1px; }
.rt-step-t { font-size: var(--text-sm); color: var(--ink); line-height: 1.6; }
.rt-step-chipwrap { margin-top: 8px; margin-left: 30px; }
.rt-nohit-related { font-size: 12.5px; color: var(--ink-faint); line-height: 1.6; margin-top: 10px; }
.rt-nohit-related-lbl { color: var(--ink-faint); }
/* 正文内联交叉引用链接:默认无下划线(清爽·owner),hover 才有 */
.rt-jump-link { text-decoration: none; }
.rt-jump-link:hover { text-decoration: underline; }
/* 转出路由:一行一条·蓝字直接可点(无"点击这里查看"·去内部信息·owner) */
.rt-route-line { margin: 4px 0; font-size: var(--text-sm); line-height: 1.6; }

/* ===== 分层渐进展示 · 内容领着走(2026-07-06) ===== */
.rt-guide{
  margin-top:var(--space-4); padding:var(--space-3);
  background:var(--brand-soft); border:1px solid var(--line);
  border-radius:var(--radius-md);
}
.rt-guide-lead{
  font-size:var(--text-sm); color:var(--ink-soft);
  margin-bottom:var(--space-2); line-height:1.55;
}
.rt-guide-lead b{ color:var(--ink); font-weight:600; }
.rt-guide-chips{ display:flex; flex-wrap:wrap; gap:var(--space-2); }
.rt-guide-chip{
  flex:1 1 0; text-align:center; white-space:nowrap;   /* 等宽铺满一行·右边不留空(owner) */
  padding:0.5rem 1.1rem; background:var(--canvas);
  border:1px solid var(--line-strong); border-radius:999px;
  font-size:var(--text-base); color:var(--brand); font-weight:600;
  cursor:pointer;
  transition:border-color .15s, box-shadow .15s, transform .1s;
}
.rt-guide-chip:hover{ border-color:var(--brand); box-shadow:var(--shadow); transform:translateY(-1px); }
.rt-guide-chip.rt-guide-done{ opacity:.45; cursor:default; pointer-events:none; }
.rt-guide-chip.rt-guide-done::after{ content:' ✓'; color:var(--ok); }

.rt-layer{ animation:rtFade .22s ease; }
@keyframes rtFade{ from{opacity:0; transform:translateY(-4px);} to{opacity:1; transform:none;} }

/* 安全边界:醒目·折叠·置顶 */
.rt-safety{
  margin:var(--space-3) 0; background:var(--warn-bg);
  border:1px solid var(--warn-ink); border-left:4px solid var(--warn-ink);
  border-radius:var(--radius-sm); overflow:hidden;
}
.rt-safety-hdr{
  padding:0.65rem 0.85rem; color:var(--warn-ink); font-size:var(--text-base);
  cursor:pointer; display:flex; align-items:center; gap:0.4rem; user-select:none;
}
.rt-safety-hdr b{ font-weight:700; }
.rt-safety-caret{ margin-left:auto; font-size:0.9rem; transition:transform .15s; }
.rt-safety.open .rt-safety-caret{ transform:rotate(180deg); }
.rt-safety-body{ padding:0 0.85rem 0.75rem; }

/* 字典套字典 → 表格(参数表等·2026-07-06) */
.rt-kv-wrap{ margin:var(--space-2) 0; overflow-x:auto; -webkit-overflow-scrolling:touch; }
.rt-kv-table{ border-collapse:collapse; width:100%; font-size:var(--text-sm); }
.rt-kv-table th, .rt-kv-table td{
  border:1px solid var(--line); padding:0.4rem 0.7rem;
  text-align:left; vertical-align:top; white-space:nowrap;
}
.rt-kv-table thead th{
  background:var(--card); color:var(--ink-soft);
  font-weight:600; font-size:0.8rem; position:sticky; top:0;
}
.rt-kv-rowh{
  background:var(--brand-soft); color:var(--ink);
  font-weight:600; white-space:nowrap;
  position:sticky; left:0; z-index:1;
}
.rt-kv-corner{ background:var(--card); }
.rt-kv-table td{ color:var(--ink); }

/* 脚手架"教怎么用"教学卡(owner 2026-07-15):复用 rt-svc 卡片主题 + 对称 2 列网格 */
.rt-guide-card{margin-top:2px;}
.rt-guide-card .rt-svc-guide{margin:2px 0 10px;}
.rt-guide-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px;}
@media (max-width:420px){.rt-guide-grid{grid-template-columns:1fr;}}
.rt-guide-example{display:flex;flex-direction:column;align-items:flex-start;gap:3px;text-align:left;width:100%;height:auto;padding:9px 13px;line-height:1.35;border-radius:10px;}
.rt-guide-ex-title{font-weight:600;color:var(--ink);font-size:.9rem;}
.rt-guide-ex-hint{font-size:.72rem;color:var(--ink-faint);}

/* 功率不匹配·据电机码反查的具体处理卡(owner 2026-07-16):主题蓝框流程(值随电机码·参考图2)+「写不进去」键进伺服版本升级诊断 */
.rt-pf-box{background:var(--brand-soft);border-radius:10px;padding:12px 15px;margin:4px 0 10px;color:var(--brand);font-size:.95rem;line-height:2;}
.rt-pf-arr{opacity:.5;margin:0 3px;}
.rt-pf-val{font-weight:700;font-size:1.12em;}
.rt-pf-btn{width:100%;padding:11px;border:1px solid var(--line-strong);border-radius:9px;background:var(--card);color:var(--ink);font-size:.95rem;font-weight:600;cursor:pointer;}
.rt-pf-btn:hover{border-color:var(--brand);color:var(--brand);}
