
/* ── 值班室：纯白墙面 · 黑色墨迹 · 只有该看的地方才有颜色 ───────────── */
:root{
  --space-ui:10px;         /* 卡片、操作组与相邻内容区块的统一间距 */
  --paper:#FFFFFF;          /* 墙面：纯白 */
  --panel:#FCFCFD;          /* 抬高一层：卡片 */
  --sunk:#F7F8F9;           /* 沉下去：输入框、日志区 */
  --ink:#16181D;            /* 墨：正文 */
  --ink-2:#3F4654;          /* 次要（2026-09-03 调深，原 #5B6270 太灰看不清）*/
  --ink-3:#616977;          /* 元信息（调深，原 #8A919E）*/
  --ink-4:#8A919E;          /* 静默（调深，原 #B4BAC4）*/
  --line:rgba(22,24,29,.09);      /* 边：看不见但摸得着 */
  --line-2:rgba(22,24,29,.055);
  --on:#1B7F4B;             /* 在岗绿 */
  --on-bg:#EDF7F1;
  --alert:#C0392B;          /* 需要你出面 */
  --pain:#8E2B20;           /* 客户的问题点：暗红。比 --alert 沉，当标题不刺眼 */
  --alert-bg:#FDF0EE;
  --wait:#B5761F;           /* 让路中 */
  --wait-bg:#FDF6EA;
  --lift:0 0 0 1px rgba(22,24,29,.05), 0 1px 2px -1px rgba(22,24,29,.06),
         0 2px 6px rgba(22,24,29,.035);
  --r-s:7px; --r-m:11px; --r-l:15px;
  --ease:cubic-bezier(.23,1,.32,1);
}
*{box-sizing:border-box}
html{-webkit-font-smoothing:antialiased;overflow-y:scroll;scrollbar-gutter:stable}
body{margin:0;background:var(--paper);color:var(--ink);
     font:14px/1.55 -apple-system,BlinkMacSystemFont,"PingFang SC","Segoe UI",sans-serif;}
/* 2026-09-21 刘兆楠：页面背景那张大 logo 水印删了（「不重要的装饰」）*/
.wrap{position:relative;z-index:1}
.wrap{max-width:760px;margin:0 auto;padding:26px 24px 56px}
.site-compliance{position:fixed;right:max(20px,env(safe-area-inset-right));bottom:max(12px,env(safe-area-inset-bottom));z-index:10;margin:0;padding:4px 8px;background:var(--paper);text-align:right;color:var(--ink-4);font-size:11.5px;line-height:1.6}
.site-compliance a{color:inherit;text-decoration:none}
.site-compliance a:hover,.site-compliance a:focus-visible{color:var(--ink-2);text-decoration:underline}
.site-compliance-login{margin:0}

/* ── 顶栏 ─────────────────────────────────────────────── */
.top{display:flex;justify-content:flex-end;align-items:center;gap:14px;margin-bottom:14px}
.top .topgap{flex:1}
/* 左上角常驻的更新位：没新版时是一句小灰字，有新版变红并且能点 */
/* 左上角更新位：跟右下角版本号一样，**不要框**，就是一行淡字。
   有新版时变红加粗，不靠边框提示。*/
.updmini{font-size:11.5px;color:var(--ink-4);cursor:pointer;user-select:none;
  padding:3px 2px;white-space:nowrap;letter-spacing:.01em;
  transition:color .15s}
.updmini:empty{display:none}          /* 没内容时别留个空壳子 */
.updmini:hover{color:var(--ink-2)}
.updmini.has{color:var(--pain);font-weight:650}
.updmini.has:hover{color:var(--pain)}
/* 右下角常驻签名 */
/* 右下角版本号：**钉死在窗口右下角不跟着滚**（刘兆楠 2026-09-16：
   「为什么这个文字跟着边框一起往下翻」——放进内容流里就会跟着滚，不行）。
   **不要框**（「不要把文字框起来，太丑了」），就是一行淡字。
   右边界跟主体内容区对齐，不飘到外面去：
   窗口比主体宽时，两边各空 (100vw - 主体宽)/2，右边就贴着内容区的右沿。
   max() 兜住窄窗口：再窄也至少离窗口边 16px。*/
.sign{position:fixed;bottom:12px;z-index:50;font-size:11.5px;color:var(--ink-4);
  user-select:text;pointer-events:none;letter-spacing:.01em;
  right:max(16px, calc((100vw - 860px) / 2 + 24px))}
.wrap{padding-bottom:44px}   /* 给它留出地方，正文最后一行不会被压住 */
.top h1{font-size:15px;font-weight:600;margin:0;letter-spacing:-.01em}
.top .hint{font-size:12px;color:var(--ink-3)}
.top .hint kbd{font:inherit;font-weight:600;color:var(--ink-2);background:var(--sunk);
  border:1px solid var(--line);border-radius:4px;padding:1px 5px;margin:0 1px}

/* ── 签名元素：值守状态横幅（一眼看懂 AI 在干嘛）──────────────── */
.duty{display:flex;align-items:center;gap:16px;padding:18px 20px;border-radius:var(--r-l);
      background:var(--panel);box-shadow:var(--lift);margin-bottom:14px;
      transition:background .3s var(--ease)}
.duty.on{background:var(--on-bg);box-shadow:0 0 0 1px rgba(27,127,75,.16)}
.duty.wait{background:var(--wait-bg);box-shadow:0 0 0 1px rgba(181,118,31,.16)}
.dot{width:9px;height:9px;border-radius:50%;background:var(--ink-4);flex:none}
.duty.on .dot{background:var(--on);box-shadow:0 0 0 3px rgba(27,127,75,.16)}
.duty.wait .dot{background:var(--wait);box-shadow:0 0 0 3px rgba(181,118,31,.16)}
.duty.on .dot{animation:breathe 2.4s var(--ease) infinite}
@keyframes breathe{0%,100%{opacity:1}50%{opacity:.45}}
.duty .txt{flex:1;min-width:0}
.duty .st{font-size:16px;font-weight:600;letter-spacing:-.01em;line-height:1.3}
.duty.on .st{color:var(--on)} .duty.wait .st{color:var(--wait)}
.duty .sub{font-size:12.5px;color:var(--ink-3);margin-top:2px;
           overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sw{flex:none;cursor:pointer;border:1px solid var(--ink);background:var(--ink);
    color:#fff;border-radius:var(--r-s);padding:9px 22px;font:inherit;
    font-weight:600;font-size:13.5px;transition:.16s var(--ease);
    box-shadow:0 1px 3px rgba(22,24,29,.16)}
.sw:hover{opacity:.85} .sw:active{transform:scale(.97)}
/* 工作中 → 绿底，一眼看出在岗 */
.sw.on{background:var(--on);border-color:var(--on);
       box-shadow:0 1px 3px rgba(27,127,75,.3)}

/* ── 数字条：三个小指标，靠 tabular-nums 不跳字 ───────────── */
.meters{display:flex;gap:0;background:var(--panel);border-radius:var(--r-l);
        box-shadow:var(--lift);margin-bottom:22px;overflow:hidden}
.meter{flex:1;padding:13px 18px;position:relative}
.meter+.meter::before{content:'';position:absolute;left:0;top:12px;bottom:12px;
  width:1px;background:var(--line-2)}
.meter b{display:block;font-size:10.5px;font-weight:600;color:var(--ink-3);
  letter-spacing:.055em;text-transform:uppercase;margin-bottom:3px}
.meter span{font-size:19px;font-weight:600;letter-spacing:-.02em;
  font-variant-numeric:tabular-nums}
.meter.hot span{color:var(--alert)}

/* ── 区块 ─────────────────────────────────────────────── */
section{margin-bottom:22px}
section>h2{font-size:11px;font-weight:600;color:var(--ink-3);letter-spacing:.06em;
  text-transform:uppercase;margin:0 0 9px;display:flex;align-items:center;gap:8px}
section>h2 .r{margin-left:auto;text-transform:none;letter-spacing:0}

/* 需要你出面 */
.q{background:var(--panel);border-radius:var(--r-m);box-shadow:var(--lift);
   border-left:2.5px solid var(--alert);padding:14px 16px;margin-bottom:9px}
.q .h{display:flex;align-items:baseline;gap:8px}
.q .h b{font-size:14px;font-weight:600}
.q .h i{font-style:normal;font-size:11.5px;color:var(--ink-4);
        font-variant-numeric:tabular-nums;margin-left:auto}
.q .why{font-size:13px;color:var(--ink-2);margin:5px 0 0}
.q .spec{margin:8px 0 0;padding:10px 12px;background:var(--bg);border-radius:var(--r-s);
  border-left:3px solid var(--ink-3);font-size:13px;line-height:1.75;white-space:pre-wrap;
  font-family:inherit;color:var(--ink)}
.q .learn{display:flex;gap:8px;align-items:center;margin:11px 0 0}
.q .ansbox{flex:1;min-width:0;font:inherit;font-size:13px;padding:8px 11px;
  border:1px solid var(--line);border-radius:var(--r-s);background:var(--bg);color:var(--ink)}
.q .ansbox:focus{outline:none;border-color:var(--ink-3)}
.q pre{white-space:pre-wrap;font:12px/1.6 inherit;color:var(--ink-2);margin:9px 0 0;
  background:var(--sunk);border-radius:var(--r-s);padding:9px 11px;max-height:118px;
  overflow-y:auto}

/* 值班日志 */
#log{background:var(--sunk);border-radius:var(--r-m);padding:11px 14px;
     max-height:250px;overflow-y:auto;font-size:12.5px;line-height:1.85}
#log .l{display:flex;gap:10px}
#log .t{color:var(--ink-4);font-variant-numeric:tabular-nums;flex:none}
#log .m{color:var(--ink-2);min-width:0}
#log .warn .m{color:var(--wait)} #log .error .m{color:var(--alert)}
#log .empty{color:var(--ink-4);text-align:center;padding:16px 0}

/* 演练对话 */
#chat{background:var(--sunk);border-radius:var(--r-m);padding:14px;
      min-height:96px;max-height:330px;overflow-y:auto}
#chat .empty{color:var(--ink-4);text-align:center;padding:26px 12px;font-size:13px;line-height:1.7}
.bub{max-width:80%;padding:8px 12px;border-radius:var(--r-m);margin-bottom:8px;
     white-space:pre-wrap;font-size:13.5px;line-height:1.6;width:fit-content;
     animation:rise .22s var(--ease)}
@keyframes rise{from{opacity:0;transform:translateY(4px)}}
.bub.cust{background:var(--paper);border:1px solid var(--line);
          border-bottom-left-radius:3px}
.bub.me{background:var(--ink);color:#fff;margin-left:auto;border-bottom-right-radius:3px}
.bub.sys{background:var(--alert-bg);color:var(--alert);margin:10px auto;max-width:92%;
         font-size:12.5px;text-align:center;border-radius:var(--r-s)}
.bub.think{background:var(--paper);border:1px dashed var(--line);color:var(--ink-4)}
.ask{display:flex;gap:8px;margin-top:10px}
.ask input{flex:1}

/* 设置（折叠，平时不占地方）*/
/* 设置独立成页后，容器从 <details> 换成 <div class="cfg open">，样式要跟着认。 */
details.cfg,div.cfg{background:var(--panel);border-radius:var(--r-m);box-shadow:var(--lift);
            overflow:hidden}
details.cfg>summary{cursor:pointer;list-style:none;padding:12px 16px;font-size:13px;
  font-weight:600;color:var(--ink-2);display:flex;align-items:center;gap:8px;
  transition:background .14s var(--ease)}
details.cfg>summary::-webkit-details-marker{display:none}
details.cfg>summary:hover{background:var(--sunk)}
details.cfg>summary .chev{color:var(--ink-4);transition:transform .18s var(--ease)}
details.cfg[open]>summary .chev{transform:rotate(90deg)}
details.cfg>summary .now{margin-left:auto;font-weight:400;font-size:12px;color:var(--ink-3)}
.cfgbody{padding:4px 14px 14px;border-top:1px solid var(--line-2)}
.cfgbody label.lone{display:block;font-size:12px;color:var(--ink-3);margin:12px 0 5px;padding:0}
/* 设置页三格：输入框和下拉一样高，别预留多余位置（刘兆楠 2026-09-20）*/
.cfgbody .grid3{gap:10px}
.cfgbody .grid3 label{font-size:12px;margin:0 0 5px;padding:0;display:block}
.cfgbody .grid3 input,.cfgbody .grid3 select{font-size:13px;padding:6px 10px;height:34px;
  box-sizing:border-box;line-height:20px}
.cfgbody .grid3 select{padding-right:28px}
div.cfg.open>.cfgbody{padding:18px 18px 20px;border-top:0}
/* ⚠️ 原来是 auto-fit minmax(148px,1fr)，四列硬挤一行。
   长标签（「转给你之后，AI 先不管这个客户多久（分钟）」）折成两行，
   相邻格子的输入框还按一行的位置排 → **那一格的输入框被顶下去，看着就是错位**。
   （2026-09-03 刘兆楠截图指出）
   修法两条：① 每格自己是 flex 纵向，标签区 min-height 吃掉两行，
   输入框统一贴底 → 所有输入框对齐同一条线；② 列宽给足 200px，少折行。 */
.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(228px,1fr));
      gap:16px 18px;align-items:end}
/* 窄窗口时降到两列，别把第四格挤到下一行还错位 */
@media(max-width:1080px){.grid{grid-template-columns:repeat(2,1fr)}}
.grid>div{display:flex;flex-direction:column}
.grid>div>label{margin:13px 0 6px;min-width:0}
.grid>div>input,.grid>div>select,.grid>div>textarea{margin-top:auto}

/* 设置页那两组：三列，同样对齐 */
.grid3{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));
       gap:16px 18px;align-items:start}
.grid3>div{display:flex;flex-direction:column}
.grid3 label{margin:0 0 7px}
.hint2{font-size:11.5px;color:var(--ink-3);line-height:1.7;margin-top:7px}
.hint2 b{color:var(--ink-2);font-weight:650}
.timerow{display:flex;align-items:center;gap:9px}
.timerow input[type=time]{width:auto;flex:1;background:var(--sunk);color:var(--ink);
  border:1px solid var(--line);border-radius:var(--r-s);padding:8px 10px;
  font:13.5px/1.5 inherit}
.timerow .dash{color:var(--ink-3);font-size:12.5px;flex:none}
.savedline{margin:16px 0 0;min-height:18px}

/* 关于这个软件：一行一条 */
.abouts{display:flex;flex-direction:column;gap:1px;background:var(--line-2);
        border-radius:9px;overflow:hidden}
.arow{display:flex;align-items:center;gap:14px;background:var(--panel);
      padding:11px 14px;font-size:13px}
.arow .k{color:var(--ink-3);min-width:70px;font-size:12.5px}
.arow .v{color:var(--ink);font-weight:600}
label{display:block;font-size:11.5px;font-weight:500;color:var(--ink-3);
      margin:13px 0 5px}
input[type=text],input:not([type]),textarea,select{width:100%;background:var(--sunk);color:var(--ink);
  border:1px solid var(--line);border-radius:var(--r-s);padding:8px 10px;
  font:13.5px/1.5 inherit;transition:.14s var(--ease)}
input:hover,textarea:hover,select:hover{border-color:rgba(22,24,29,.16)}
input:focus,textarea:focus,select:focus{outline:none;background:var(--paper);
  border-color:var(--ink-3);box-shadow:0 0 0 3px rgba(22,24,29,.06)}
textarea{resize:vertical;line-height:1.65}
select{cursor:pointer;-webkit-appearance:none;appearance:none;
  background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath d='M3 4.5L6 7.5L9 4.5' stroke='%238A919E' stroke-width='1.4' fill='none' stroke-linecap='round'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 10px center;padding-right:28px}
.btn{cursor:pointer;border:1px solid var(--line);background:var(--paper);color:var(--ink);
     border-radius:var(--r-s);padding:7px 15px;font:inherit;font-size:13px;font-weight:500;
     transition:.14s var(--ease);white-space:nowrap}
.btn:hover{background:var(--sunk)} .btn:active{transform:scale(.97)}
.btn:disabled{opacity:.45;cursor:default;transform:none}
.btn.solid{background:var(--ink);color:#fff;border-color:var(--ink);font-weight:600;
  box-shadow:0 1px 3px rgba(22,24,29,.16)}
.btn.solid:hover{opacity:.85;background:var(--ink)}
.btn.alert{background:var(--alert);color:#fff;border-color:var(--alert);font-weight:600;
  box-shadow:0 1px 3px rgba(192,57,43,.28)}
.btn.alert:hover{opacity:.88}
.btn.sm{padding:4px 11px;font-size:12px;font-weight:400;color:var(--ink-3)}
.scope{background:var(--sunk);border-radius:var(--r-s);padding:11px 14px;font-size:12.5px;
       line-height:1.95;color:var(--ink-2)}
.scope b{display:inline-block;width:52px;font-weight:600}
.scope .y b{color:var(--on)} .scope .n b{color:var(--ink-3)}
.foot{font-size:11.5px;color:var(--ink-4);line-height:1.75;margin-top:26px;
      padding-top:16px;border-top:1px solid var(--line-2)}
::-webkit-scrollbar{width:9px;height:9px}
::-webkit-scrollbar-thumb{background:rgba(22,24,29,.14);border-radius:9px;
  border:2.5px solid transparent;background-clip:content-box}
::-webkit-scrollbar-thumb:hover{background:rgba(22,24,29,.24);background-clip:content-box}
::-webkit-scrollbar-track{background:transparent}


/* ══════════════════════════════════════════════════════════
   2026-09-03 新增：问答台 / 工具箱 / 算价器 / 客户档案
   ══════════════════════════════════════════════════════════ */
.wrap{max-width:860px}          /* 内容多了，放宽一点 */
.tabs{flex-wrap:wrap}
.tab .badge{display:inline-block;min-width:16px;padding:0 5px;margin-left:5px;
  border-radius:8px;background:var(--alert);color:#fff;font-size:10.5px;
  font-weight:700;line-height:16px;text-align:center;vertical-align:1px}

/* ── 通用：可复制的一句话 ── */
.copyable{position:relative;background:var(--panel);border-radius:var(--r-m);
  box-shadow:var(--lift);padding:14px 16px;margin-bottom:9px;cursor:pointer;
  transition:.15s var(--ease)}
.copyable:hover{box-shadow:0 0 0 1px rgba(22,24,29,.11),0 2px 8px rgba(22,24,29,.07);
  transform:translateY(-1px)}
.copyable:active{transform:translateY(0)}
.copyable.done{background:var(--on-bg);box-shadow:0 0 0 1px rgba(27,127,75,.22)}
.copyable .k{display:flex;align-items:baseline;gap:8px;margin-bottom:6px}
.copyable .k b{font-size:13px;font-weight:650;letter-spacing:-.01em}
/* 常用回复 / 问题应对两栏：标题写的是**客户当下的毛病**（客户加了微信不说话、
   客户嫌15天太久…），用暗红标出来，销售扫一眼就能对上自己遇到的情况。
   开场资料那栏是「先发名片」这种步骤名，不是问题点，保持黑色。 */
.copyable.pain .k b{color:var(--pain)}
/* 正文里的关键词：跟卡片标题同一个暗红，一眼看见哪几个字最要紧。
   用 <em class="key"> 而不是 <b>——语义上这是「要注意的词」，不只是加粗。 */
em.key{font-style:normal;font-weight:700;color:var(--pain)}
.copyable .k .tag{font-size:10.5px;color:var(--ink-4);background:var(--sunk);
  border-radius:5px;padding:1px 6px;font-weight:500}
.copyable .k .tag.edited{color:var(--wait);background:var(--wait-bg)}
/* 收藏星星：平时是空心淡灰，收藏后实心金色常亮 */
/* 星星在 .cardacts 里排队，位置由容器算——原来自己写 right:64px 手算，
   加一个按钮就得重算一次，必歪（刘兆楠 2026-09-16：「收藏的星星位置偏移了」）*/
.favbtn{border:0;background:transparent;cursor:pointer;
  font-size:15px;line-height:1;color:var(--ink-4);padding:3px 4px;border-radius:5px;
  opacity:0;transition:opacity .15s,color .15s,background .15s}
.cardacts .favbtn{position:static}
.copyable:hover .favbtn,.copyable:hover .cardacts .favbtn{opacity:1}
.favbtn:hover{background:var(--sunk);color:#C9911F}
.favbtn.on{opacity:1;color:#D9A21B}
.copyable .body{font-size:13.5px;line-height:1.75;color:var(--ink);
  white-space:pre-wrap;word-break:break-word}
.copyable .why{font-size:12.5px;color:var(--ink-2);line-height:1.75;margin-top:9px;
  padding-top:8px;border-top:1px solid var(--line-2)}
.copyable .why b{color:var(--alert);font-weight:650}
.copyable .hintcopy{position:absolute;top:13px;right:14px;font-size:11px;
  color:var(--ink-4);opacity:0;transition:.15s}
.copyable:hover .hintcopy{opacity:1}
.copyable.nocopy{cursor:default}
/* 每条话术右上角一个「改」，点了就地改，点卡外面存上 */
/* 卡片右上角那一排操作按钮（在访达里看 / 换文件 / 恢复公司版 / 修改）。
   用一个容器装着，按钮就不用各自算 right 了，加几个都不会打架。*/
.cardacts{position:absolute;top:9px;right:12px;display:flex;gap:6px;
  align-items:center;z-index:2}
.cardacts .edbtn{position:static;top:auto;right:auto}
.copyable:hover .cardacts .edbtn{opacity:1}
.edbtn.ghost{border-color:transparent;background:transparent;color:var(--ink-4)}
.edbtn{position:absolute;top:9px;right:12px;border:1px solid var(--line-2);
  background:var(--panel);color:var(--ink-3);border-radius:7px;
  padding:3px 10px;font:inherit;font-size:11.5px;cursor:pointer;
  opacity:0;transition:.15s}
.copyable:hover .edbtn{opacity:1}
.edbtn:hover{background:var(--sunk);color:var(--ink);border-color:var(--line)}
.copyable:hover .edbtn + .hintcopy,
.copyable .hintcopy{right:14px}
/* 「点一下复制」也进这一排一起排队——放在按钮左边。
   这样按钮加几个、文字多长都不用重算位置，flex 自己算（2026-09-16）。*/
.cardacts .hintcopy{position:static;margin-right:2px}
/* 标题给右上角那三样让出地方，标题再长也不会从按钮底下穿过去 */
/* 标题给右上角那排按钮让位。按钮是浮在卡片上的，
   这里留出一行高度，标题就不会从按钮底下穿过去。*/
.copyable .k{min-height:24px}
.copyable:has(.cardacts) .k{padding-right:12px}
.copyable.pain .hintcopy{right:96px}           /* 话术卡右上角固定三个位：提示｜星星｜修改 */
.copyable.editing{cursor:default;background:var(--panel);
  box-shadow:0 0 0 2px var(--pain),0 6px 20px rgba(22,24,29,.10)}
.copyable.editing .hintcopy.edhint{opacity:1;color:var(--pain);font-weight:650;right:14px}
.inline-ed{width:100%;margin-top:6px;font:inherit;font-size:14px;line-height:1.75;
  color:var(--ink);background:var(--sunk);border:1px solid var(--line-2);
  border-radius:8px;padding:10px 12px;resize:vertical}
.inline-ed:focus{outline:none;border-color:var(--pain);background:var(--panel)}
.btn.sm.danger{color:var(--pain);border-color:rgba(142,43,32,.28)}
.btn.sm.danger:hover{background:var(--alert-bg);border-color:var(--pain)}
/* 拖动调顺序 */
.draghandle{position:absolute;left:5px;top:50%;transform:translateY(-50%);
  color:var(--ink-4);font-size:13px;letter-spacing:-2px;cursor:grab;
  opacity:0;transition:.15s;padding:6px 3px;line-height:1}
.copyable:hover .draghandle{opacity:.6}
.draghandle:active{cursor:grabbing}
/* 拖动中：被拖的那张缩到很淡，位置由占位块顶着 */
.copyable.dragging{opacity:.28;transform:scale(.99)}
/* 占位块＝松手后这张卡会落在这里。虚线框 + 浅底，一眼看出空出来的位置多大。
   卡片之间用 transition 让位，所以是「下面的话术平滑往下挪」而不是闪一下。*/
.dropslot{border:2px dashed rgba(27,76,134,.45);border-radius:var(--r-m);
  background:rgba(27,76,134,.05);margin:0 0 10px;box-sizing:border-box}
#kitOut .copyable{transition:transform .16s var(--ease)}
.copyable.drop-above{box-shadow:0 -3px 0 0 var(--pain)}
.copyable.drop-below{box-shadow:0 3px 0 0 var(--pain)}
/* 软件自己的确认弹窗 */
.modal{position:fixed;inset:0;z-index:900;display:flex;align-items:center;
  justify-content:center;background:rgba(22,24,29,.34);
  backdrop-filter:blur(2px);animation:mfade .14s var(--ease)}
.modal[hidden]{display:none}
@keyframes mfade{from{opacity:0}to{opacity:1}}
.modal-card{background:var(--panel);border-radius:16px;padding:24px 26px 20px;
  width:min(460px,calc(100vw - 48px));
  box-shadow:0 18px 50px rgba(22,24,29,.24),0 0 0 1px rgba(22,24,29,.06);
  animation:mrise .18s var(--ease)}
@keyframes mrise{from{transform:translateY(10px);opacity:0}to{transform:none;opacity:1}}
.modal-t{font-size:16px;font-weight:700;color:var(--ink);letter-spacing:-.01em}
.modal-b{font-size:13.5px;line-height:1.8;color:var(--ink-2);margin-top:10px;
  white-space:pre-wrap}
.modal-b em{font-style:normal;color:var(--pain);font-weight:650}
.modal-btns{display:flex;justify-content:flex-end;gap:10px;margin-top:22px}
/* 识图的状态：设置页里一行小字，正常时几乎看不见 */
.envline{margin-top:10px;padding-top:10px;border-top:1px dashed var(--line);
  font-size:12.5px;color:var(--ink-2);line-height:1.7}
.modal.danger .modal-btns .btn.solid{background:var(--pain)}
.copyable.done .hintcopy{opacity:1;color:var(--on);font-weight:650}

/* ── 开场四样：编号大字 ── */
.stepcard{display:flex;gap:14px;align-items:flex-start}
.stepno{flex:none;width:26px;height:26px;border-radius:50%;background:var(--ink);
  color:#fff;font-size:12.5px;font-weight:700;display:flex;align-items:center;
  justify-content:center;margin-top:1px}
.stepcard.file .stepno{background:var(--ink-2)}
.stepbody{flex:1;min-width:0}
.filerow{display:flex;align-items:center;gap:8px;margin-top:7px;flex-wrap:wrap}
.filename{font-size:12px;color:var(--ink-2);background:var(--sunk);border-radius:6px;
  padding:4px 9px;font-family:ui-monospace,Menlo,monospace;word-break:break-all}
.missing{color:var(--alert);font-weight:650}


/* ── 开场四样：预览图 + 文件类型图标（2026-09-03 改，不暴露原文件名）── */
.openrow{display:flex;gap:16px;align-items:flex-start}
/* 名片缩略图跟其余三个文件图标**同尺寸**（88×88），四行的正文才对得齐一条竖线。
   原来图片按原比例撑到 92×116，第一行就歪出去 4px。 */
/* 名片：宽度跟其余图标一致（88，正文才对得齐），但**高度按原图比例**——
   裁成方块会把两张名片挤成一团，看不出是名片。contain 保证完整显示。 */
.thumb{flex:none;width:88px;border-radius:12px;overflow:hidden;
  box-shadow:inset 0 0 0 1px rgba(22,24,29,.08),0 1px 5px rgba(22,24,29,.09);
  background:#fff}
.thumb img{display:block;width:100%;height:auto}
.ficon{flex:none;width:88px;height:88px;border-radius:12px;display:flex;
  flex-direction:column;align-items:center;justify-content:center;gap:7px;
  box-shadow:inset 0 0 0 1px rgba(22,24,29,.06)}
.ficon .ext{font-size:11px;font-weight:750;letter-spacing:.06em;line-height:1}
.ficon .gl{display:flex;line-height:0}
.ficon .gl svg{width:30px;height:30px;display:block}
.ficon.xlsx{background:#E8F5EC;color:#1D7044}
.ficon.pdf{background:#FDECEA;color:#B3352A}
.ficon.text{background:#EFF2F7;color:#44506B}
/* 微信里发出去的文件长什么样，这里就长什么样：深底、文件名+大小、右边彩角标 */
/* 宽度跟卡里其他块一致，右边缘对齐（原来锁死 430px，比标题和按钮短一截）*/
.wxfile{display:flex;align-items:center;gap:14px;background:#2B2B2D;
  border-radius:10px;padding:12px 12px 12px 15px;margin-bottom:10px;width:100%}
.wxfile .wf-txt{flex:1;min-width:0}
.wxfile .wf-n{font-size:13.5px;font-weight:600;color:#F2F2F3;line-height:1.4;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.wxfile .wf-s{font-size:12px;color:#8B8B90;margin-top:5px}
.wxfile .wf-ic{flex:none;width:52px;height:52px;border-radius:7px;display:flex;
  flex-direction:column;align-items:center;justify-content:center;gap:2px;color:#fff}
.wxfile .wf-ic svg{width:22px;height:22px;display:block}
.wxfile .wf-ic span{font-size:9.5px;font-weight:750;letter-spacing:.04em}
.wxfile.xlsx .wf-ic{background:#1D9A57}
.wxfile.pdf  .wf-ic{background:#E0483C}
.wxfile.text .wf-ic{background:#5A6580}
.openbody{flex:1;min-width:0}
.fname{font-size:13.5px;font-weight:650;margin-bottom:8px}
.fbtns[hidden]{display:none}
/* 按钮一律左对齐——第一张卡（名片）里有个居中的上传区，
   text-align:center 会传染给后面的按钮，四张卡的按钮就不在一条竖线上了
   （2026-09-16 量出来差 104px）。这里显式压回左边。*/
.fbtns{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px;
  justify-content:flex-start;text-align:left}
/* 还没传东西的格子：虚线框，点也行拖也行。
   名片那一格默认就长这样——故意的，逼销售传自己那张。*/
/* ⚠️ hidden 属性打不过 display:flex/grid——踩过一次（.rolepick 那回）。
   凡是靠 el.hidden 藏的元素，都得有这条兜底。*/
[hidden]{display:none!important}
.uploadzone{border:1.5px dashed var(--line);border-radius:var(--r-s);
  padding:18px 14px;text-align:center;cursor:pointer;transition:.15s;
  background:var(--sunk);margin-bottom:10px}
.uploadzone:hover,.uploadzone.over{border-color:var(--ink-3);background:var(--paper)}
.uploadzone.over{border-style:solid}
.uploadzone b{display:block;font-size:13px;font-weight:600;color:var(--ink)}
.uploadzone span{display:block;font-size:11.5px;color:var(--ink-3);margin-top:3px}
.btn.sm.ghost{color:var(--ink-3);border-color:transparent;background:transparent}
/* ══════════════════════════════════════════════════════════
   ★ 总安全框：整个软件任何一块内容都不许画到自己的框外面。
     刘兆楠 2026-09-16：「直接做一个内部的显示安全框」

   这一条盖住全部：所有元素按边框算宽（padding 不再往外顶），
   并且任何容器都不许横向溢出。后面那些细则是锦上添花，
   真正兜底的是这三行——不管以后谁往里加什么，都出不去。
   ══════════════════════════════════════════════════════════ */
*,*::before,*::after{box-sizing:border-box}
body,.page,section,.cfgbody,.grid,.grid>div,.schedbox,.qzone,.fmod,.fin,.fgin{
  max-width:100%;min-width:0}
/* 文字类容器：宁可断行、宁可省略号，也绝不顶出去 */
label,.meter b,.arow .v,.fsub .sname,.fhead .ftxt b,.fhead .ftxt i{
  max-width:100%;overflow-wrap:break-word}

/* ══════════════════════════════════════════════════════════
   显示安全框（刘兆楠 2026-09-16：「直接做一个内部的显示安全框」）

   一条全局规则兜住所有「一行里并排放东西」的地方，
   不用一处处改结构、也不用每加一处就记得处理一次。

   三件事：
     ① 任何并排行都不许横向溢出（min-width:0），子元素才收缩得动
     ② 数字、计数、按钮、箭头、圆点 —— 锁死宽度，永远不被挤扁
     ③ 文字部分收缩 + 太长省略号收尾，绝不压到右边的东西上

   ⚠️ 为什么不是「哪里叠了修哪里」：叠不叠取决于窗口宽度和内容长度，
   平时看着好好的，客户名字长一点或者窗口窄一点就叠。要在结构上根除。
   ══════════════════════════════════════════════════════════ */
.fsub,.fhead,.flowstrip .fs,.meter,.qlbl,.qhd,.saverow,.rowbtns,.phead,.arow{
  min-width:0}
/* 这些是「固定大小的零件」：数字、圆点、按钮、箭头——一律不许被压缩 */
.fsub .schev,.fsub em,.fsub .btn,
.fhead .stepn,.fhead .fcnt,.fhead .fchev,
.flowstrip .fs b,.flowstrip i,
.meter span,.qlbl input,.saverow .btn,.arow .k{
  flex:none;white-space:nowrap}
/* 这些是「会变长的文字」：收缩得动，长了省略号收尾 */
.fsub .sname,.fhead .ftxt,.fhead .ftxt b,.fhead .ftxt i,.meter b,.arow .v{
  min-width:0;overflow:hidden;text-overflow:ellipsis}
/* 导航格里的文字是裸的（没套 span），给它个安全下限，别缩成一团 */
.flowstrip .fs{max-width:100%;overflow:hidden}
/* 输入框：浏览器给 input 内置了最小宽度，不写 min-width:0 的话
   flex:1 也压不下去，窄窗口下会把整行顶出去（时间选择框最明显）*/
.timerow,.schedbox,.qlbl,.grid>div{min-width:0}
.timerow input[type=time]{min-width:0}
.grid input,.grid select,.qlbl input{max-width:100%;min-width:0}
/* 标签文字太长就换行，别把整个格子撑破。
   ⚠️ .grid>div>label 自己是个 flex 容器（为了底对齐），
   里面装的是裸文字——flex 容器里的裸文字不换行就会把格子顶破，
   所以这里必须显式允许换行 + min-width:0。*/
/* ⚠️ word-break:break-word 是个废弃属性，跟 overflow-wrap:anywhere 一起写时
   在中文下会互相抵消，文字仍然挤在一行顶出去。用 break-all 才真的断得开。*/
/* 标签的硬安全框：宽度锁死在格子里，内容再长也只能往下换行，
   绝不可能顶出去。前面试过 overflow-wrap / word-break 各种组合，
   中文下都会差几个像素（标点不许放行首），只有锁死 max-width 才彻底。*/
.cfgbody label,.schedbox label,.grid label{
  overflow-wrap:break-word;word-break:break-all;
  min-width:0;max-width:100%;box-sizing:border-box;overflow:hidden}
/* 标签用 flex 是为了让它底对齐，但 flex 容器里的裸文字**不会自动断行**，
   只能整块放下或者顶出去（中文标点还不许放行首，所以常常差几个像素）。
   改成 block + 用 padding 顶到底，既保住底对齐，文字也能正常断行。*/
/* ⚠️ 这个 label 用 display:flex 是为了让文字底对齐输入框。
   但 flex 容器里的**裸文字**是一个不可分割的整体，
   white-space / word-break 全都管不到它，差几像素就顶出框。
   解法：把它变回普通文本块（display:block），用 padding 顶到底部实现同样的对齐。*/
/* ⚠️ 中文长标签在某些宽度下会差几个像素放不下（标点不许放行首，
   浏览器宁可顶出去也不断行）。留 1px 安全边 + 裁剪兜底：
   宁可最后一个字少一丝，也绝不让它画到格子外面去。*/
.grid>div>label{display:block;white-space:normal;min-width:0;
  min-height:2.9em;padding-top:1.3em;padding-right:1px;line-height:1.45;
  overflow:hidden}

/* 接待流程页 */
.flowstrip{display:flex;align-items:center;flex-wrap:wrap;gap:6px;margin:4px 0 18px;
  font-size:12px;color:var(--ink-3)}
.flowstrip .fs{display:inline-flex;align-items:center;gap:6px;padding:4px 10px 4px 5px;
  border:1px solid var(--line);border-radius:999px;background:var(--paper);color:var(--ink)}
.flowstrip .fs b{display:inline-flex;width:18px;height:18px;border-radius:50%;
  align-items:center;justify-content:center;background:var(--ink);color:#fff;
  font-size:11px;font-weight:600}
.flowstrip .fs.end b{background:var(--pain)}
.flowstrip i{font-style:normal;color:var(--ink-3)}
/* 接待流程：一步一个模块，点开的那步深蓝渐变（#062856，刘兆楠 2026-09-15 定） */
.flowstrip .fs{cursor:pointer;position:relative;overflow:hidden;z-index:0;
  transition:color .4s var(--ease),border-color .4s var(--ease)}
.flowstrip .fs::before{content:'';position:absolute;inset:0;z-index:-1;border-radius:999px;
  background:linear-gradient(90deg,#1B5AA3,#062856);opacity:0;transition:opacity .4s var(--ease)}
.flowstrip .fs.sel{color:#fff;border-color:transparent}
.flowstrip .fs.sel::before{opacity:1}
.flowstrip .fs b{transition:background .4s var(--ease),color .4s var(--ease)}
.flowstrip .fs.sel b{background:#fff;color:#062856}
.fmod.solo .fhead{cursor:default}
.fmod{background:var(--panel);border-radius:var(--r-m);box-shadow:var(--lift);margin-bottom:10px;overflow:hidden}
.fmod.open{background:#F3F6FB;box-shadow:0 0 0 1px rgba(6,40,86,.18),0 6px 18px rgba(6,40,86,.10)}
.fhead{display:flex;align-items:center;gap:12px;width:100%;text-align:left;border:0;font:inherit;cursor:pointer;
  padding:14px 16px;background:transparent;color:var(--ink);transition:background .35s var(--ease),color .35s var(--ease)}
.fhead .stepn{flex:none;width:26px;height:26px;border-radius:50%;background:var(--ink);color:#fff;
  font-size:13px;font-weight:700;display:inline-flex;align-items:center;justify-content:center;transition:.35s var(--ease)}
.fhead .ftxt{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.fhead .ftxt b{font-size:14px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fhead .ftxt i{font-style:normal;font-size:12px;color:var(--ink-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .35s}
/* 「N 句」和箭头 flex:none：不加的话标题一长就把它们压扁，
   数字会缩成「1…」甚至被挤没（同折叠条那个病）*/
.fhead .fcnt{flex:none;font-size:11.5px;color:var(--ink-4);transition:color .35s;white-space:nowrap}
.fhead .fchev{flex:none;width:22px;text-align:center;font-size:16px;color:var(--ink-4);transition:color .35s}
.fmod.open .fhead{background:linear-gradient(90deg,#1B5AA3 0%,#062856 100%);color:#fff}
.fmod.open .fhead .stepn{background:#fff;color:#062856}
.fmod.open .fhead .ftxt i,.fmod.open .fhead .fcnt,.fmod.open .fhead .fchev{color:rgba(255,255,255,.75)}
.fbody{display:grid;grid-template-rows:0fr;transition:grid-template-rows .38s var(--ease)}
.fmod.open .fbody{grid-template-rows:1fr}
.fin{overflow:hidden;min-height:0;padding:14px 14px 6px}
.fsub.static{cursor:default}
/* 折叠条：做成实心色块，字用白的——原来是白底浅字，一眼看不出这是一块
   （刘兆楠 2026-09-16：「做一个明显的方框色块，里面的字改成黑色或白色等更明显的颜色」） */
.fsub{display:flex;align-items:center;gap:9px;width:100%;text-align:left;border:0;font:inherit;
  font-size:13px;font-weight:700;color:var(--ink);background:#EFEFED;
  padding:10px 14px;margin:0 0 8px;border-radius:9px;letter-spacing:.01em;cursor:pointer;
  transition:background .18s,color .18s}
.fsub:hover{background:#E6E6E3}
.fgrp.open>.fsub{background:#E2E2DE}
/* 折叠条里每一块都要有自己的地盘，窗口再窄也不许叠在一起
   （刘兆楠 2026-09-16：「做一个安全框，让这些长度信息不被折叠遮挡」）。
   病根：组名原来是**裸文本节点**，没有容器就没有 flex 收缩能力，
   窗口一窄它不会让位，直接压到右边的「N 句」和按钮上面。
   解法：① 组名套 .sname，给它 min-width:0 才收缩得动，长了省略号收尾
        ② 「N 句」和按钮 flex:none，永远保住自己的宽度
        ③ 每块之间留 gap，靠 CSS 兜住间距，不靠运气 */
.fsub .sname{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fsub em{flex:none;font-style:normal;font-weight:500;color:var(--ink-3);font-size:12px;
  margin-right:6px}
.fsub .schev{flex:none;width:18px;height:18px;border-radius:5px;background:rgba(22,24,29,.10);
  color:var(--ink-2);font-size:14px;font-weight:700;line-height:18px;text-align:center}
.fsub .btn{flex:none;margin-left:auto;background:var(--panel);
  border-color:var(--line);color:var(--ink-2)}
.fsub .btn:hover{background:var(--paper)}
.fgrp.lv2{margin:6px 0}
.fgrp.lv2>.fsub{background:#F4F4F2;font-size:12.5px}
.fgrp.lv2>.fsub:hover{background:#EDEDEA}
.fgrp.lv2.open>.fsub{background:#E8E8E5}
.fgrp.lv3{margin:0 0 6px;padding-left:12px}
.fgrp.lv3>.fsub{background:#F8F8F6;font-size:12.5px;padding:8px 12px;color:var(--ink-2)}
.fgrp.lv3>.fsub:hover{background:#F1F1EE}
.fgrp .fgbody{display:grid;grid-template-rows:0fr;transition:grid-template-rows .32s var(--ease)}
.fgrp.open .fgbody{grid-template-rows:1fr}
.fgrp .fgin{overflow:hidden;min-height:0;padding-bottom:4px}
.fin .steptip{font-size:12px;color:var(--ink-3);line-height:1.6;margin:0 0 14px}
.stephd{display:flex;align-items:flex-start;gap:12px;margin:22px 0 10px;
  padding-top:14px;border-top:1px solid var(--line-2)}
.stephd:first-of-type{border-top:0;padding-top:0;margin-top:6px}
.stephd .stepn{flex:none;width:26px;height:26px;border-radius:50%;background:var(--ink);
  color:#fff;display:flex;align-items:center;justify-content:center;font-weight:600;font-size:13px}
.stephd .stepbody{flex:1;min-width:0}
.stephd .stepbody>b{font-size:14px}
.stephd .stepask{font-size:13px;margin-top:3px;color:var(--ink)}
.stephd .steptip{font-size:12px;color:var(--ink-3);margin-top:4px;line-height:1.6}
.stephd .btn{flex:none;margin-top:2px}
.stepempty{font-size:12px;color:var(--ink-3);padding:8px 0 4px 38px}
.tag.ai{background:var(--sunk);color:var(--ink-3);border:1px solid var(--line);
  border-radius:3px;padding:1px 5px;font-size:10.5px;margin-left:6px;font-weight:400}
.btn.sm.ghost:hover{background:var(--sunk);border-color:var(--line)}


/* ── 算价：顶部完整公式条（刘兆楠要求把公式全貌摆出来）── */
.fbox{background:#16181D;color:#fff;border-radius:var(--r-m);padding:16px 18px;
  margin-bottom:16px}
.fbox .lb{font-size:11px;opacity:.55;letter-spacing:.06em;margin-bottom:8px;
  font-weight:600}
.fbox .fm{font-size:15px;font-weight:600;line-height:1.7;letter-spacing:.01em;
  font-family:ui-monospace,Menlo,monospace;word-break:break-word}
.fbox .fm em{font-style:normal;color:#8FD9AC;font-weight:700}
.fbox .nt{font-size:12px;opacity:.62;margin-top:9px;line-height:1.7}
.fobtag{display:inline-block;margin-left:8px;font-size:10.5px;font-weight:700;
  background:rgba(255,255,255,.15);border-radius:4px;padding:2px 7px;
  vertical-align:2px;letter-spacing:.02em}

/* ── 算价器 ── */
.calctable{border:1px solid var(--line);border-radius:10px;overflow:hidden;
  margin-bottom:16px}
.calcrow{display:grid;gap:0;border-bottom:1px solid var(--line-2)}
.calcrow:last-child{border-bottom:0}
.calcrow.chead{background:var(--sunk);font-size:12px;font-weight:650;color:var(--ink-2)}
.calcrow.chead span{padding:8px 10px;border-right:1px solid var(--line-2);
  line-height:1.45}
.calcrow.chead span:last-child{border-right:0}
.calcrow.chead .u{display:block;font-size:11px;font-weight:400;color:var(--ink-4)}
.calcrow input{border:0;border-right:1px solid var(--line-2);background:transparent;
  font:inherit;font-size:14px;padding:11px 10px;width:100%;min-width:0;color:var(--ink)}
.calcrow input:last-child{border-right:0}
.calcrow input:focus{outline:0;background:#F3F7FD}
.step{background:var(--panel);border-radius:var(--r-m);box-shadow:var(--lift);
  padding:14px 16px;margin-bottom:9px}
.step .t{font-size:13px;font-weight:650;margin-bottom:9px}
.step .f{font-size:13px;color:var(--ink);font-family:ui-monospace,Menlo,monospace;
  background:var(--sunk);border-radius:7px;padding:8px 11px;line-height:1.9;
  word-break:break-word}
.step .f .eq{color:var(--ink-4);margin:0 6px}
.step .f .res{color:var(--on);font-weight:700}
.step .w{font-size:12.5px;color:var(--ink-2);line-height:1.8;margin-top:10px}
.step .w b{color:var(--ink-2)}
.bigprice{background:var(--ink);color:#fff;border-radius:var(--r-l);padding:20px 22px;
  margin:16px 0;display:flex;align-items:baseline;gap:14px;flex-wrap:wrap}
.bigprice .n{font-size:34px;font-weight:700;letter-spacing:-.03em;line-height:1}
.bigprice .l{font-size:12.5px;opacity:.62;line-height:1.5}
.bigprice .fob{display:inline-block;margin-top:3px;font-size:11px;font-weight:700;
  background:rgba(255,255,255,.16);border-radius:4px;padding:1px 6px;opacity:1;
  letter-spacing:.02em}
.bigprice .sub{font-size:13px;opacity:.8;margin-left:auto}
.warnbox{background:var(--alert-bg);border-radius:var(--r-m);padding:13px 16px;
  font-size:12.5px;line-height:1.8;color:#8E2B20;margin-bottom:12px}
.warnbox b{font-weight:700}

/* ── 问答台 ── */
.askbar[hidden]{display:none}
/* 输入区（刘兆楠 2026-09-18）：输入框在左，右边一竖列——
   上面两个小图标，下面「发送」。整个框别拉太宽，宽了排版散。 */
.chatbox{display:flex;flex-direction:column;gap:8px;align-items:stretch;
  border:1px solid var(--line);border-radius:12px;background:var(--panel);
  padding:7px 9px;margin:0 auto 14px;
  transition:border-color .14s var(--ease)}
.chatbox:focus-within{border-color:var(--line)}
.chatrow{flex:1;display:flex;align-items:center;min-width:0}
/* 输入框不描边——外面那圈 .chatbox 就是它的框，再描一层是两个框套一起 */
.chatrow input{flex:1;font:inherit;font-size:14px;padding:8px 6px;
  border:0;background:none;color:var(--ink);min-width:0}
.chatrow input:focus{outline:0}
.chatrow input::placeholder{color:var(--ink-4)}
/* 右边这一竖列：小图标在上，发送在下 */
.chatside{display:flex;flex-direction:column;align-items:flex-end;gap:5px;flex:none}
.chattools{display:flex;gap:1px;align-items:center}
.tbtn{display:inline-flex;align-items:center;gap:4px;cursor:pointer;font:inherit;
  font-size:11.5px;font-weight:600;color:var(--ink-3);background:none;border:0;
  border-radius:6px;padding:3px 7px;transition:.14s var(--ease);white-space:nowrap}
.tbtn svg{width:16px;height:16px}
.tbtn:hover{background:var(--sunk);color:var(--ink)}
.tbtn:disabled{opacity:.45;cursor:default}
.tbtn:disabled:hover{background:none;color:var(--ink-3)}
.sendbtn{padding:7px 20px}
/* 2026-09-20 刘兆楠：这两块要铺满窗口，别再锁 620 了
   （推翻 09-18 那条「整个对话框不要那么宽」，以这条为准）*/
.askbar{display:flex;gap:9px;margin-bottom:14px}
.askbar input{flex:1;font:inherit;font-size:14px;padding:12px 15px;
  border:1px solid var(--line);border-radius:10px;background:var(--panel)}
.askbar input:focus{outline:0;border-color:var(--ink-3);background:var(--paper)}
.answer{background:var(--panel);border-radius:var(--r-l);box-shadow:var(--lift);
  padding:30px 34px 34px;font-size:14px;line-height:1.95;margin-bottom:14px;
  color:var(--ink-2)}
/* 标题分四级，一眼看出大小差别（原来 h1~h3 全是 14px，跟正文一样大） */
.answer h1{font-size:22px;font-weight:700;color:var(--ink);letter-spacing:-.02em;
  margin:0 0 14px;line-height:1.4}
.answer>*:first-child{margin-top:0!important;padding-top:0!important;border-top:0!important}
.answer h2{font-size:17px;font-weight:700;color:var(--ink);letter-spacing:-.01em;
  margin:30px 0 10px;padding-top:20px;border-top:1px solid var(--line-2);line-height:1.5}
.answer h1+h2{margin-top:18px;padding-top:0;border-top:0}
.answer h3{font-size:14.5px;font-weight:650;color:var(--ink);margin:22px 0 8px}
.answer h4{font-size:13px;font-weight:650;color:var(--ink-2);margin:16px 0 6px}
.answer p{margin:0 0 12px}
.answer ul,.answer ol{margin:0 0 14px;padding-left:22px}
.answer li{margin-bottom:7px}
.answer blockquote{margin:0 0 14px;padding:13px 17px;background:var(--sunk);
  border-radius:10px;color:var(--ink-2);font-size:13.5px;line-height:1.85;
  border-left:3px solid var(--line)}
.answer hr{border:0;border-top:1px solid var(--line-2);margin:26px 0}
.answer code{background:var(--sunk);border-radius:4px;padding:1.5px 6px;font-size:12.5px;
  color:var(--pain);font-family:ui-monospace,Menlo,monospace}
.answer strong{font-weight:700;color:var(--ink)}
.answer table{border-collapse:collapse;width:100%;margin:0 0 14px;font-size:13px}
.answer td,.answer th{border:1px solid var(--line-2);padding:8px 11px;text-align:left}
.answer th{background:var(--sunk);font-weight:650;color:var(--ink)}
.srcs{display:flex;gap:7px;flex-wrap:wrap;margin-bottom:16px}
.src{font-size:11.5px;padding:5px 11px;border-radius:20px;background:var(--sunk);
  color:var(--ink-2);cursor:pointer;transition:.14s;border:1px solid var(--line-2)}
.src:hover{background:var(--paper);border-color:var(--line);color:var(--ink)}
.src.case{background:#FDF6EA;color:#8A5A14;border-color:rgba(181,118,31,.18)}
.src.talk{background:var(--on-bg);color:#166B40;border-color:rgba(27,127,75,.16)}
.thinking{display:flex;align-items:center;gap:10px;color:var(--ink-3);font-size:13px;
  padding:18px 4px}
.thinking .sp{width:13px;height:13px;border:2px solid var(--line);
  border-top-color:var(--ink-3);border-radius:50%;animation:spin .7s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.qsug[hidden]{display:none}
.qsug{display:flex;gap:7px;flex-wrap:wrap;margin-bottom:18px}
.qsug button{font:inherit;font-size:12px;padding:6px 12px;border-radius:20px;
  border:1px solid var(--line);background:var(--panel);color:var(--ink-2);
  cursor:pointer;transition:.14s}
.qsug button:hover{background:var(--sunk);color:var(--ink);border-color:var(--ink-4)}


/* ── 百科全书 ── */
.segs.mini .seg{font-size:12.5px;padding:6px 13px}
.pagelist{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));
  gap:8px;margin-bottom:6px}
.pageitem{text-align:left;font:inherit;font-size:12.5px;line-height:1.5;
  padding:10px 13px;border-radius:9px;border:1px solid var(--line-2);
  background:var(--panel);color:var(--ink-2);cursor:pointer;transition:.14s var(--ease)}
.pageitem:hover{background:var(--sunk);color:var(--ink);border-color:var(--line);
  transform:translateY(-1px)}
.snip{font-size:12.5px;color:var(--ink-2);line-height:1.8;margin-top:7px;
  padding-left:11px;border-left:2px solid var(--line);word-break:break-word}
.snip mark{background:#FDF0EE;color:var(--pain);font-weight:650;
  padding:1px 2px;border-radius:3px}
.casecard .ti .zt{display:inline-block;margin-left:9px;font-size:10.5px;font-weight:600;
  padding:2px 8px;border-radius:20px;background:var(--sunk);color:var(--ink-3);
  vertical-align:2px}
.zt.talk{background:var(--on-bg);color:#166B40}
.zt.case{background:#FDF6EA;color:#8A5A14}
.zt.know,.zt.prod{background:#EEF2FA;color:#3A4E77}
.zt.lv入门{background:var(--on-bg);color:#166B40}
.zt.lv进阶{background:#FDF6EA;color:#8A5A14}
.zt.lv高危{background:var(--alert-bg);color:var(--pain)}
.drillhead{font-size:13px;font-weight:650;margin-bottom:10px;
  display:flex;align-items:baseline;gap:6px}
.drillhead span{font-weight:400;font-size:12px;color:var(--ink-3)}


/* ── 业务地图：一段一行，点开才看细节 ── */
.bmap{display:flex;flex-direction:column;gap:8px}
.mseg{background:var(--panel);border-radius:var(--r-m);box-shadow:var(--lift);
  overflow:hidden;transition:.16s var(--ease)}
.mseg.open{box-shadow:0 0 0 1px rgba(22,24,29,.11),0 3px 12px rgba(22,24,29,.07)}
.mhead{width:100%;display:flex;align-items:center;gap:14px;padding:15px 18px;
  border:0;background:none;font:inherit;cursor:pointer;text-align:left;
  transition:.14s var(--ease)}
.mhead:hover{background:var(--sunk)}
.mseg.open .mhead{background:var(--sunk)}
.mno{flex:none;width:26px;height:26px;border-radius:50%;background:var(--ink);
  color:#fff;font-size:12.5px;font-weight:700;display:flex;align-items:center;
  justify-content:center}
.mseg.open .mno{background:var(--pain)}
.mtxt{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px}
.mtxt b{font-size:14.5px;font-weight:650;color:var(--ink);letter-spacing:-.01em}
.mtxt i{font-style:normal;font-size:12px;color:var(--ink-3);line-height:1.6}
.mcnt{flex:none;font-size:11.5px;color:var(--ink-3);background:var(--paper);
  border:1px solid var(--line-2);border-radius:20px;padding:2px 9px;font-weight:600}
.mchev{flex:none;font-size:17px;color:var(--ink-4);width:16px;text-align:center;
  font-weight:400;line-height:1}
.mseg.open .mchev{color:var(--pain)}
.mbody{padding:4px 18px 18px;display:grid;
  grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:8px}
/* 两层地图：上层通用流程、下层按品类 */
.maptitle{display:flex;align-items:baseline;gap:10px;margin:26px 0 10px;flex-wrap:wrap}
.maptitle:first-child{margin-top:4px}
.maptitle b{font-size:15px;font-weight:700;color:var(--ink);letter-spacing:-.01em}
.maptitle i{font-style:normal;font-size:12px;color:var(--ink-3)}
.mno.prod{background:var(--pain);font-size:13px}
/* 第一步：选身份 */
.rolepick{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:18px 0 6px}
.rolepick[hidden]{display:none}
/* 值守：现在走 AI 还是断网模式 */
.aibar{display:flex;align-items:center;gap:12px;padding:12px 15px;margin:14px 0 0;
  border-radius:var(--r-m);font-size:12.5px;line-height:1.65}
.aibar[hidden]{display:none}
.aibar b{font-size:13px;font-weight:700;flex:none}
.aibar .txt{flex:1;min-width:0}
.aibar.on{background:var(--on-bg);color:#14603A}
.aibar.on b{color:#0F4E2E}
.aibar.off{background:var(--alert-bg);color:#7A2A20}
.aibar.off b{color:var(--pain)}
.aibar button{flex:none;border:0;border-radius:8px;padding:7px 13px;cursor:pointer;
  font:inherit;font-size:12px;font-weight:650;background:var(--ink);color:#fff}
.aibar button:hover{opacity:.87}
.aibar button[disabled]{opacity:.5;cursor:default}
/* 右上角：登录的是谁。登了显示名字+头像，没登是灰的「未登录」 */
.acct{display:flex;align-items:center;gap:8px;border:1px solid var(--line-2);
  background:var(--panel);border-radius:20px;padding:4px 12px 4px 4px;
  cursor:pointer;font:inherit;font-size:12.5px;color:var(--ink-2);
  transition:.14s var(--ease);max-width:210px}
.acct:hover{background:var(--sunk)}
.acct .ava{flex:none;width:24px;height:24px;border-radius:50%;
  display:flex;align-items:center;justify-content:center;
  font-size:11.5px;font-weight:700;color:#fff;background:var(--ink-4)}
.acct.on .ava{background:var(--pain)}
.acct.off .ava{background:#B6B4AF;color:#fff}   /* 没登录：纯色灰人像 */
.acct .ava svg{display:block}
.acct.on{color:var(--ink)}
.acct .an{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:600}
.acct.off .an{color:var(--ink-3);font-weight:500}
/* 开场白：只读的，正文固定，只有名字电话是活的 */
.tplbox{background:var(--sunk);border:1px solid var(--line-2);border-radius:var(--r-s);
  padding:12px 14px;font-size:13px;line-height:1.85;color:var(--ink-2);
  white-space:pre-wrap;user-select:text}
.tplbox mark{background:none;color:var(--pain);font-weight:700;
  text-decoration:underline;text-underline-offset:3px;
  text-decoration-thickness:1.5px;margin:0 2px}   /* 去掉底色后要留点缝，否则跟前后字挤在一起 */
.tplhint{font-size:12px;color:var(--ink-3);line-height:1.7;margin:8px 0 0}
/* 保存按钮：右下角，符合习惯 */
.saverow{display:flex;justify-content:flex-end;align-items:center;gap:12px;margin:18px 0 0}
/* 算价黑框：上面一行是填了数的例子，下面一行说每一位是什么 */
.fbox .eg{font-family:ui-monospace,Menlo,monospace;font-size:18px;line-height:1.7;color:#F2EFE9;
  margin:10px 0 0;letter-spacing:.01em}
.fbox .eg b{color:#fff;font-weight:700}                    /* 你要填的 */
.fbox .eg i{font-style:normal;color:#8FD7A8;font-weight:600}/* 写死的系数 */
.fbox .eg s{text-decoration:none;color:#8A857C;margin:0 4px}
.fbox .eg u{text-decoration:none;color:#FFD9A0;font-weight:700}  /* 算出来的 */
.fbox .lg{font-size:12.5px;line-height:1.9;color:#B8B3AA;margin:9px 0 0}
.fbox .lg b{color:#fff;font-weight:650}
.fbox .lg i{font-style:normal;color:#8FD7A8;font-weight:600}
/* 这台电脑操作不了微信：值守整页灰掉，但别藏——要让人知道为什么 */
.duty.dead{opacity:.62}
.sw.dead{background:var(--line-2);color:var(--ink-4);cursor:default}
.deadpage .meters,.deadpage #queueSec,.deadpage .cfg{opacity:.5;pointer-events:none}
.rolepick button{border:1px solid var(--line-2);background:var(--panel);
  border-radius:var(--r-m);padding:13px 14px;cursor:pointer;font:inherit;
  text-align:left;display:flex;flex-direction:column;gap:4px;
  transition:.14s var(--ease)}
.rolepick button:hover{background:var(--sunk)}
.rolepick button b{font-size:14.5px;font-weight:650;color:var(--ink)}
.rolepick button i{font-style:normal;font-size:12px;color:var(--ink-3);line-height:1.55}
.rolepick button.sel{background:var(--ink);border-color:var(--ink)}
.rolepick button.sel b{color:#fff}
.rolepick button.sel i{color:rgba(255,255,255,.72)}
@media(max-width:640px){.rolepick{grid-template-columns:1fr}}
.mseg.prod.open .mno{background:var(--ink)}
.mcase{padding:0 18px 16px}
.mcase .ct{display:block;font-size:11px;font-weight:700;color:var(--ink-4);
  letter-spacing:.04em;margin-bottom:7px}
.mcase .mbody{padding:0}

/* ── 客户档案 ── */
.split{display:grid;grid-template-columns:246px 1fr;gap:16px;align-items:start}
/* 问题应对的目录页（刘兆楠 2026-09-20：像书的导航页，大类→细分标题，不编号）*/
.qasplit{display:grid;grid-template-columns:236px 1fr;gap:16px;align-items:start}
#kitDetail{min-width:0}
#kitDetail #kitSolo>.fmod{margin-bottom:0}
#kitDetail #kitActions{margin-top:var(--space-ui)}
@media(max-width:720px){.qasplit{grid-template-columns:1fr}}
.toc{background:var(--panel);border-radius:var(--r-m);box-shadow:var(--lift);padding:6px 0;
  position:sticky;top:12px;max-height:420px;overflow-y:auto}   /* 目录矮一点、自己滚（刘兆楠 2026-09-20）*/
.tocg{padding:4px 0}
.tocg-h{padding:7px 14px;font-size:13px;font-weight:700;color:var(--pain);cursor:pointer;
  border-left:3px solid transparent}   /* 大类红字，一眼看出是哪类问题 */
.tocg-h:hover{background:var(--sunk)}
.tocg.sel .tocg-h{border-left-color:var(--pain);background:var(--alert-bg)}
.tocg-l a{display:block;padding:4px 14px 4px 24px;font-size:12.5px;color:var(--ink-2);cursor:pointer;
  border-left:3px solid transparent;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tocg-l a:hover{color:var(--ink);background:var(--sunk)}
.tocg-l a.cur{color:var(--pain);background:var(--alert-bg)}
/* 跳到某条话术：不描边，灰→白亮一下 */
.copyable.hit{background:var(--alert-bg)}
.toc.blue .tocg-h{color:var(--ink);padding:6px 14px}
.toc.blue .tocg-l a{padding:3px 14px 5px 24px}
.toc.blue .tocg.sel .tocg-h{color:#062856;background:#EEF4FC;border-left-color:#1B4C86}
.toc.blue .tocg-l a.cur{color:#062856;background:#EEF4FC}
/* 接待流程的目录（2026-09-21）：章＝六步带序号圆点，顺序一目了然；整列放得下就不滚 */
.flowtoc{max-height:calc(100vh - 80px)}
.flowtoc .tocg-h{display:flex;align-items:center;gap:8px}
.flowtoc .tocg-h span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.flowtoc .stepn{flex:none;display:inline-flex;width:20px;height:20px;border-radius:50%;align-items:center;justify-content:center;
  background:var(--ink);color:#fff;font-size:11.5px;font-weight:700;font-style:normal}
.flowtoc .stepn.end{background:var(--pain)}
.flowtoc .tocg.sel .stepn{background:#1B4C86}
/* 接待流程右边：客户情况只留一行小标题，话术卡平铺 */
.fsit{margin-bottom:6px}
.fsit-h{font-size:12px;font-weight:650;color:var(--ink-3);padding:6px 4px 6px;letter-spacing:.02em}
.fsit + .fsit .fsit-h{margin-top:6px;border-top:1px dashed var(--line);padding-top:12px}
/* 接待流程整页是蓝的，话术卡标题和被导航到的底色也走蓝，红色只留给问题应对（刘兆楠 2026-09-21：「颜色要统一好」）*/
.fmod[data-mod="f"] .copyable.pain .k b{color:#1B4C86}
.fmod[data-mod="f"] .copyable.hit{background:#EEF4FC}
/* 案例正文的卡：不是话术，不要「点一下复制」那套手势 */
.casesec{cursor:default}
.casesec .k b{font-size:15px}                                   /* 节标题：大 */
.casesec .body{font-size:13px;line-height:1.85;color:var(--ink-2)}   /* 正文：小、稍浅 */
.casesec .body h3{font-size:13.5px;font-weight:700;color:var(--ink);margin:14px 0 4px}   /* 小标题：中 */
.casesec .body p{margin:4px 0 8px}
.casesec .body strong{color:var(--pain);font-weight:700}            /* 重点：红 */
.casesec .body li:has(> strong:first-child){color:var(--ink)}
.casesec .body p:has(> strong:first-child){color:var(--ink)}
.casesec .body ul,.casesec .body ol{padding-left:20px;margin:4px 0 8px}
.casesec .body li{margin:2px 0}
.casesec .body blockquote{margin:6px 0 10px;padding:6px 12px;border-left:3px solid var(--line);color:var(--ink-3);font-size:12.5px}
.casesec .body code{font-size:12px;background:var(--sunk);padding:1px 5px;border-radius:4px}
.casesec .body table{width:100%;border-collapse:collapse;margin:6px 0 10px;font-size:12.5px}
.casesec .body th,.casesec .body td{border:1px solid var(--line);padding:5px 9px;text-align:left;vertical-align:top}
.casesec .body th{background:var(--sunk);color:var(--ink);font-weight:650;font-size:12px}
.casesec .body td:first-child{color:var(--ink-3);white-space:nowrap}
@media(max-width:720px){.split{grid-template-columns:1fr}}
.clist{background:var(--panel);border-radius:var(--r-m);box-shadow:var(--lift);
  overflow:hidden;max-height:560px;overflow-y:auto}
.citem{padding:11px 14px;border-bottom:1px solid var(--line-2);cursor:pointer;
  transition:.13s}
.citem:last-child{border-bottom:0}
.citem:hover{background:var(--sunk)}
.citem.sel{background:var(--ink);color:#fff}
.citem .nm{font-size:13px;font-weight:600;margin-bottom:3px;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.citem .mt{font-size:11px;color:var(--ink-4)}
.citem.sel .mt{color:rgba(255,255,255,.6)}
.citem .nb{display:inline-block;width:6px;height:6px;border-radius:50%;
  background:var(--wait);margin-right:5px;vertical-align:1px}
.talkbox{background:var(--panel);border-radius:var(--r-m);box-shadow:var(--lift);
  padding:16px 18px;max-height:560px;overflow-y:auto}
.ev{margin-bottom:12px;font-size:13px;line-height:1.7}
.ev .t{font-size:10.5px;color:var(--ink-4);margin-bottom:3px}
.ev .c{padding:9px 13px;border-radius:11px;display:inline-block;max-width:86%;
  white-space:pre-wrap;word-break:break-word}
.ev.cust .c{background:var(--sunk)}
.ev.me{text-align:right}
.ev.me .c{background:var(--on-bg);color:#14603A;text-align:left}
.ev.sys{text-align:center}
.ev.sys .c{background:var(--wait-bg);color:#8A5A14;font-size:12px;max-width:94%}
.ev.note .c{background:#F0F3FA;color:#33456B;font-size:12.5px}
.bindbar[hidden]{display:none}
.bindbar{display:flex;gap:8px;align-items:center;flex-wrap:wrap;
  background:var(--wait-bg);border-radius:var(--r-m);padding:12px 15px;
  margin-bottom:14px;font-size:12.5px;color:#8A5A14}
.bindbar input,.bindbar select{font:inherit;font-size:12.5px;padding:6px 10px;
  border:1px solid rgba(181,118,31,.25);border-radius:7px;background:var(--paper)}
.bindbar input{flex:1;min-width:130px}
.bindbar select{flex:none;width:auto;min-width:88px}
.bindbar>span{flex:none}
.bound{background:var(--on-bg);color:#166B40}
.bound input,.bound select{border-color:rgba(27,127,75,.2)}
.empty{text-align:center;color:var(--ink-4);font-size:13px;padding:44px 20px}
.casecard{background:var(--panel);border-radius:var(--r-m);box-shadow:var(--lift);
  padding:15px 17px;margin-bottom:10px;cursor:pointer;transition:.15s var(--ease)}
.obform{display:grid;grid-template-columns:auto 1fr;gap:8px 10px;align-items:center;margin-top:14px}
.obform label{font-size:13px;color:var(--ink-3);white-space:nowrap}
.obform input,.obform select{width:100%;box-sizing:border-box;font:inherit;font-size:14px;padding:8px 11px;border:1px solid var(--line-2);border-radius:8px;background:var(--paper)}
.obform .obsel{position:relative;display:block}
.obform .obsel select{-webkit-appearance:none;appearance:none;padding-right:30px;cursor:pointer}
.obform .obsel::after{content:'';position:absolute;right:12px;top:50%;width:7px;height:7px;margin-top:-6px;
  border-right:1.5px solid var(--ink-3);border-bottom:1.5px solid var(--ink-3);transform:rotate(45deg);pointer-events:none}
.obform .obErr{grid-column:2;color:var(--pain);font-size:12.5px;min-height:14px}
.pageitem{display:flex;align-items:center;gap:9px}
.pageitem .pno{flex:none;width:20px;height:20px;border-radius:50%;background:var(--sunk);color:var(--ink-3);
  font-size:11.5px;font-weight:700;display:inline-flex;align-items:center;justify-content:center}
.pageitem.cur{background:var(--pain);color:#fff;border-color:var(--pain)}
.pageitem.cur:hover{background:var(--pain);color:#fff}
.pageitem.cur .pno{background:#fff;color:var(--pain)}
.mdoc{padding:6px 16px 18px;border-top:1px solid var(--line)}
.sugbox{background:var(--panel);border:1px solid var(--line);border-radius:var(--r-m);box-shadow:var(--lift);padding:6px;margin:-6px 0 12px}
.sugbox .sughd{font-size:11.5px;color:var(--ink-4);padding:4px 10px 6px}
.sugit{display:flex;align-items:center;gap:9px;width:100%;text-align:left;border:0;background:transparent;font:inherit;
  padding:8px 10px;border-radius:8px;cursor:pointer}
.sugit:hover{background:var(--sunk)}
.sugit b{font-size:13.5px;color:var(--ink);white-space:nowrap}
.sugit i{font-style:normal;font-size:12px;color:var(--ink-4);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sk{flex:none;font-size:10.5px;font-weight:700;padding:2px 7px;border-radius:5px;background:var(--sunk);color:var(--ink-3)}
.sk.词{background:#E3EAF5;color:#062856}.sk.话术{background:#FDF0EE;color:var(--pain)}.sk.用法{background:#EAF3EA;color:#2E5C2E}
/* 问得笼统时的引导选项：两三个方块，点一下当新问题重问
   （刘兆楠 2026-09-17）*/
.clarify{display:flex;flex-wrap:wrap;gap:7px;margin-top:7px}
.cbtn{cursor:pointer;font:inherit;font-size:12.5px;font-weight:600;
  color:#1B4C86;background:var(--panel);border:1px solid rgba(27,76,134,.32);
  border-radius:8px;padding:7px 13px;transition:.14s var(--ease);text-align:left}
.cbtn:hover{background:#F2F6FC;border-color:#1B4C86}
.sugchips{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.sugchip{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--line-2);background:var(--panel);border-radius:999px;
  padding:5px 11px 5px 6px;font:inherit;font-size:12.5px;cursor:pointer}
.sugchip:hover{background:var(--sunk)}
.term{padding:10px 12px;border-radius:9px;cursor:pointer;transition:background .15s}
.term:hover{background:var(--panel)}
.term.open{background:var(--panel);box-shadow:var(--lift)}
.term .tk{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}
.term .tk b{color:var(--pain);font-size:13.5px}
.term .tk em{font-style:normal;font-size:11.5px;color:var(--ink-4)}
.term .tb{font-size:13px;color:var(--ink-2);line-height:1.65;margin-top:3px}
.term .tmore{display:none;margin-top:8px;padding-top:8px;border-top:1px solid var(--line-2)}
.term.open .tmore{display:block}
.term .tdetail{font-size:12.5px;color:var(--ink-2);line-height:1.7;white-space:pre-wrap;margin-bottom:6px}
.termlist{background:var(--sunk);border-radius:var(--r-m);padding:6px;margin-bottom:8px}
.rsec .tm{display:inline-block;min-width:3.4em;color:#062856;font-weight:600;font-variant-numeric:tabular-nums}
.rsec{margin:4px 0 12px}
.rsec b{display:block;font-size:12px;color:#062856;margin-bottom:4px}
.rsec ul{margin:0;padding-left:18px;font-size:13px;line-height:1.75;color:var(--ink-2)}
.rsec .rlinks{font-size:12.5px;line-height:2}
/* 工作台聊天框：满版（刘兆楠 2026-09-17「整个界面做成满版的聊天框」）。
   高度按窗口算，不再是固定 300px——答案多的时候一屏能看完，不用滚半天。*/
.helpbox{height:calc(100vh - 300px);min-height:220px;overflow-y:auto}
/* 练习·演销售：左栏三档+场景清单，右栏聊天（照问题应对那页的分栏）*/
.drillsplit{display:grid;grid-template-columns:236px 1fr;gap:16px;align-items:start}
@media(max-width:720px){.drillsplit{grid-template-columns:1fr}}
.drillside{position:sticky;top:12px}
.drillside .segs{display:flex;width:100%;box-sizing:border-box}
.drillside .seg{flex:1;text-align:center;padding-left:6px;padding-right:6px}
.scenelist{margin-top:10px;background:var(--panel);border-radius:var(--r-m);box-shadow:var(--lift);padding:6px 0}
.scenelist a{display:block;padding:9px 14px;font-size:13px;color:var(--ink-2);cursor:pointer;
  border-left:3px solid transparent;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.scenelist a:hover{background:var(--sunk);color:var(--ink)}
.scenelist a.cur{color:#062856;background:#EEF4FC;border-left-color:#1B4C86;font-weight:600}
/* 答案块：标题暗红 + 正文小一号，几条答案并排在一个气泡里也分得清 */
.helpbox .ans{margin-bottom:13px}
.helpbox .ans:last-child{margin-bottom:0}
.helpbox .ans .at{font-size:12.5px;font-weight:700;color:var(--pain);
  margin-bottom:3px;letter-spacing:.01em}
.helpbox .ans .ab{font-size:12.5px;line-height:1.72;color:var(--ink)}
.helpbox .ans .ab.copybub{cursor:pointer;border-radius:7px;
  padding:5px 7px;margin:0 -7px;transition:background .13s}
.helpbox .ans .ab.copybub:hover{background:var(--sunk)}
/* 「要看细的」是一排入口，不是一条答案——弱化成灰色小字，
   跟上面暗红的答案标题区分开（刘兆楠 2026-09-17：要把内容分类好）*/
/* 设计稿取出来的图：能看清，也能一键发给客户（刘兆楠 2026-09-18）*/
.dsnimgs{display:flex;flex-wrap:wrap;gap:10px;margin-top:8px}
.dsn{margin:0;display:flex;flex-direction:column;gap:6px;align-items:center}
.dsn img{max-width:190px;max-height:250px;border:1px solid var(--line);
  border-radius:8px;background:var(--sunk);object-fit:contain;cursor:zoom-in}
.dsn img:hover{border-color:var(--ink-3)}
.dsn .btn.sm{font-size:11.5px;padding:4px 10px;white-space:nowrap}
/* 读出来的字：保留原来的换行（报价单一行一项，挤成一坨就没法看了）*/
.ocrtext{white-space:pre-wrap;line-height:1.8;max-height:420px;overflow:auto}
/* 图拖到聊天框上面时给个提示 */
.helpbox.dropping{outline:2px dashed #1B4C86;outline-offset:-4px;background:#F2F6FC}
/* 话术原文块（```…```）：照着发给客户的那几句，点一下复制 */
.fence{background:var(--sunk);border:1px solid var(--line-2);border-radius:8px;
  padding:9px 12px;margin:7px 0;font-size:12.5px;line-height:1.75;
  color:var(--ink);cursor:pointer;transition:.14s var(--ease)}
.fence:hover{background:#F2F6FC;border-color:rgba(27,76,134,.3)}
/* 正文里指向别篇资料的链接：渐变蓝 + 下划线，一眼看出能点
   （刘兆楠 2026-09-17：「这些知识都应该有一个导航」）。
   文字用渐变要靠 background-clip 裁切，普通 color 做不出渐变。 */
.wlink{cursor:pointer;font-weight:600;
  background:linear-gradient(90deg,#1B4C86 0%,#062856 100%);
  -webkit-background-clip:text;background-clip:text;
  -webkit-text-fill-color:transparent;color:#1B4C86;
  border-bottom:1px solid rgba(27,76,134,.45);padding-bottom:1px}
.wlink:hover{border-bottom-color:#1B4C86}
/* 资料里的表格：聊天气泡里也要能看（2026-09-17）*/
.mdt{border-collapse:collapse;width:100%;margin:7px 0;font-size:12px;table-layout:auto}
.mdt th,.mdt td{border:1px solid var(--line);padding:5px 8px;text-align:left;
  vertical-align:top;line-height:1.55}
.mdt th{background:var(--sunk);font-weight:700;white-space:nowrap}
.helpbox .ans.more{margin-top:15px;padding-top:10px;border-top:1px solid var(--line)}
.helpbox .ans.more .at{color:var(--ink-3);font-weight:600;font-size:11.5px}
.helpbox .ev.wide .c{max-width:100%}      /* 答案气泡占满，不留那 22% 空白 */
.hdrag{height:14px;display:flex;align-items:center;justify-content:center;cursor:ns-resize;margin:-4px 0 -2px}
.hdrag span{width:44px;height:4px;border-radius:2px;background:var(--line-2)}
.hdrag:hover span{background:var(--ink-4)}
.helpbox .ev .c{max-width:78%;white-space:pre-wrap}
.helpbox .ev.wide .c{max-width:100%;width:100%;box-sizing:border-box}
.helpbox .ev.cust .c{background:var(--paper);border:1px solid var(--line)}
.helpbox .c .lbl{display:block;font-size:11.5px;color:var(--ink-4);margin-bottom:4px}
.helpbox .c .tiny{display:block;font-size:11.5px;color:var(--ink-4);margin-top:6px}
.helpbox .c .copybub{display:block;cursor:pointer;padding:6px 8px;margin:0 -8px;border-radius:8px}
.helpbox .c .copybub:hover{background:var(--sunk)}
.helpbox .c .dim{color:var(--ink-4)}
/* 凡是「点了会跳去别处」的，一律渐变蓝 + 下划线，跟 .wlink 一个样
   （刘兆楠 2026-09-17：「问题的标题用红色字没错，但是只要涉及到导航页，
     全部都是蓝色字加下划线，并且颜色本身要用渐变蓝」）。
   暗红只留给标题——一眼分得出「这是题目」还是「这能点」。 */
.golink{cursor:pointer;font-weight:600;
  background:linear-gradient(90deg,#1B4C86 0%,#062856 100%);
  -webkit-background-clip:text;background-clip:text;
  -webkit-text-fill-color:transparent;color:#1B4C86;
  border-bottom:1px solid rgba(27,76,134,.45);padding-bottom:1px}
.golink:hover{border-bottom-color:#1B4C86}
.flash{animation:destination-reveal 1200ms ease-out both}
@keyframes destination-reveal{from{filter:brightness(.76);opacity:.55}to{filter:brightness(1);opacity:1}}
@media(prefers-reduced-motion:reduce){.flash{animation:none}}
.casecard.nohover{cursor:default}
.casecard.nohover:hover{transform:none}
.casecard:hover{transform:translateY(-1px);
  box-shadow:0 0 0 1px rgba(22,24,29,.1),0 3px 10px rgba(22,24,29,.07)}
.casecard .ti{font-size:13.5px;font-weight:650;margin-bottom:5px}
.casecard .br{font-size:12.5px;color:var(--ink-2);line-height:1.75}
.casecard .csub{font-size:11px;color:var(--ink-4);margin-top:7px;
  font-family:ui-monospace,Menlo,monospace}
.toast{position:fixed;bottom:26px;left:50%;transform:translateX(-50%) translateY(14px);
  background:var(--ink);color:#fff;padding:11px 20px;border-radius:24px;font-size:13px;
  font-weight:500;opacity:0;pointer-events:none;transition:.24s var(--ease);z-index:99;
  box-shadow:0 6px 22px rgba(22,24,29,.22)}
.toast.on{opacity:1;transform:translateX(-50%) translateY(0)}
.grpttl{font-size:11.5px;font-weight:700;color:var(--ink-4);letter-spacing:.04em;
  margin:22px 0 9px;text-transform:none}
.grpttl:first-child{margin-top:0}
.rowbtns[hidden]{display:none}
.rowbtns{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:16px;justify-content:flex-end}
/* 交互一律右下角（刘兆楠 2026-09-20）*/

/* ── 顶部标签页 ─────────────────────────────────────────── */
.tabs{display:flex;gap:4px;margin:0 0 20px;border-bottom:1px solid var(--line)}
.tab{cursor:pointer;border:0;background:none;font:inherit;font-size:14px;
     font-weight:600;color:var(--ink-3);padding:9px 15px 11px;position:relative;
     transition:.14s var(--ease);border-radius:var(--r-s) var(--r-s) 0 0}
.tab:hover{color:var(--ink-2);background:var(--sunk)}
/* 选中＝渐变蓝（刘兆楠 2026-09-16）。渐变没法直接做过渡，
   所以垫一层伪元素改透明度，颜色才是慢慢变的。 */
.tab::before{content:'';position:absolute;inset:0;border-radius:var(--r-s) var(--r-s) 0 0;
  background:linear-gradient(90deg,#1B4C86 0%,#062856 100%);opacity:0;
  transition:opacity .34s var(--ease);z-index:-1}
.tab.sel::before{opacity:1}
.tab.sel{color:#fff}
.tab.sel:hover{background:none;color:#fff}
.page{display:none} .page.sel{display:block}
/* ── 话术库 ─────────────────────────────────────────────── */
/* 分类＝左右两个抽屉，一次只看一类，不用滚到底才知道分界在哪 */
.segs{display:inline-flex;background:var(--sunk);border-radius:9px;padding:3px;
      gap:2px;border:1px solid var(--line-2)}
.seg{cursor:pointer;border:0;background:none;-webkit-appearance:none;appearance:none;font:inherit;font-size:13px;
     font-weight:600;color:var(--ink-2);padding:7px 16px;border-radius:7px;
     transition:.14s var(--ease);white-space:nowrap}
.seg:hover{color:var(--ink)}
.seg{position:relative;z-index:0}
.seg::before{content:'';position:absolute;inset:0;border-radius:7px;
  background:linear-gradient(90deg,#1B4C86 0%,#062856 100%);opacity:0;
  transition:opacity .34s var(--ease);z-index:-1}
.seg.sel::before{opacity:1}
.seg.sel{color:#fff}
.seg.sel:hover{color:#fff}
.seg .n{font-weight:500;color:var(--ink-4);margin-left:5px;font-size:12px}
.seg.sel .n{color:rgba(255,255,255,.7)}
/* ── 例子：退到最下面，收起来只是一行小字 ──
   刘兆楠 2026-09-16：「举例子的板块不应该这么明显」——
   有颜色有背景的应该是让人填东西的地方，不是例子。 */
.egbox{margin-top:22px;border-top:1px dashed var(--line);padding-top:12px}
.egbox>summary{font-size:12px;color:var(--ink-4);cursor:pointer;list-style:none;
  padding:3px 0;user-select:none}
.egbox>summary::-webkit-details-marker{display:none}
.egbox>summary::before{content:'▸ ';color:var(--ink-4)}
.egbox[open]>summary::before{content:'▾ '}
.egbox>summary:hover{color:var(--ink-2)}
.egbox>div,.egbox>textarea{margin-top:10px}
/* 例子里那块黑底的公式，收在折叠里就不抢眼了，但字号调小一号 */
.egbox .fbox{font-size:.92em}

/* ── 报价图 ── */
.qzone{margin-top:26px;padding-top:20px;border-top:1px solid var(--line)}
.qhd{display:flex;align-items:baseline;gap:12px;margin-bottom:14px;flex-wrap:wrap}
.qhd b{font-size:15px;color:var(--ink)}
.qtable{border:1px solid var(--line);border-radius:10px;overflow:hidden}
/* 2026-09-20：规格/厚度拆两格 + 行末多一个「算」→ 9 列 */
.qrow{display:grid;grid-template-columns:1fr 1.1fr .95fr .62fr .62fr .66fr .78fr .9fr;
  gap:0;border-bottom:1px solid var(--line-2);align-items:stretch}
.qrow:last-child{border-bottom:0}
.qrow.qhead{background:var(--sunk);font-size:12px;font-weight:650;color:var(--ink-2)}
.qrow.qhead span{padding:8px 10px;line-height:1.4;font-size:13px}
/* 长/宽/厚度：表头、单位、格子里的数全部居中（刘兆楠 2026-09-20）*/
.qrow.qhead .u{display:block;font-size:10px;font-weight:400;color:var(--ink-4);
  white-space:nowrap;font-style:normal}
/* 表头全部居中，横竖都居中（刘兆楠 2026-09-20：别挤在左上角）*/
.qrow.qhead{align-items:center}
.qrow.qhead span{text-align:center;align-self:stretch;display:flex;flex-direction:column;
  justify-content:center}
/* 填这五格就出单价——淡蓝标出来 */
.qrow.qhead span.hi{background:#E4EDF8;color:#1B4C86}
.qrow.qhead span.hi .u{color:#5B7AA3}
.qrow input.c{background:#F6F9FD}
.qrow input.pricecell{text-align:center;background:transparent}
.cform{gap:10px}
.cform label{display:block;font-size:12px;color:var(--ink-3);margin:0 0 5px}
.cform input{width:100%;font:inherit;font-size:13px;padding:6px 10px;box-sizing:border-box;
  border:1px solid var(--line);border-radius:8px;background:var(--panel);color:var(--ink)}
.cform input:focus{outline:0;border-color:var(--ink-3);background:var(--paper)}
.qrow input.c{text-align:center}
.qrow input::placeholder{text-align:center;color:#C3C8D1}
.qrow input{border:0;border-right:1px solid var(--line-2);background:transparent;
  font:inherit;font-size:14px;padding:12px 10px;width:100%;min-width:0;color:var(--ink)}
.qrow input:last-of-type{border-right:0}
.qrow input:focus{outline:0;background:#F3F7FD}
.qrow{position:relative}
.qtable:not(.mini){overflow:visible}          /* × 挂在栏外，表本身跟别的块一样齐 */
.qtable:not(.mini) .qrow.qhead{border-radius:9px 9px 0 0;overflow:hidden}
.qrow .del{position:absolute;right:-30px;top:0;bottom:0;width:26px;
  border:0;background:transparent;color:var(--ink-4);cursor:pointer;font-size:15px}
.qrow .del:hover{color:var(--pain)}
/* 行内「算」：填了规格和厚度就能按出单价 */
.qrow .rowcalc{border:0;border-left:1px solid var(--line-2);background:transparent;
  color:var(--sea,#1B4C86);font:inherit;font-size:12.5px;font-weight:650;
  cursor:pointer;padding:0 4px}
.qrow .rowcalc:hover{background:#EEF4FC}
.qrow .rowcalc:disabled{color:var(--ink-4);cursor:default;background:transparent}
/* 算完挂在行底下的明细，点开才看 */
.qdetail{border-bottom:1px solid var(--line-2);background:var(--sunk)}
.qdetail:last-child{border-bottom:0}
.qdetail summary{cursor:pointer;font-size:12px;color:var(--ink-2);padding:7px 12px;
  list-style:none}
.qdetail summary::-webkit-details-marker{display:none}
.qdetail summary b{color:var(--ink)}
.qdetail .qsw{color:var(--sea,#1B4C86);text-decoration:underline}
.qsteps{padding:2px 12px 10px}
.qsteps .qs{font-size:12px;color:var(--ink-2);line-height:1.9}
.qsteps .qs i{color:var(--ink);font-style:normal;font-weight:650}
.qsteps .qwarn{color:var(--ink-3);margin-top:4px;line-height:1.7}
.sidecalc{padding-top:4px}
.qsp{flex:1}
/* 表底下一条：加一行靠左，出图三个按钮靠右下 */
.qfoot{display:flex;align-items:center;gap:8px;margin-top:8px;flex-wrap:wrap}
/* 报价说明退成小字，挂在最底下 */
.qnotebox{margin-top:18px;border-top:1px dashed var(--line);padding-top:10px}
.qnotebox summary{cursor:pointer;font-size:11.5px;color:var(--ink-4);list-style:none}
.qnotebox summary::-webkit-details-marker{display:none}
.qnotebox summary::before{content:'▸ ';color:var(--ink-4)}
.qnotebox[open] summary::before{content:'▾ '}
.qnotebox .qnotes{margin-top:8px;font-size:12px}
/* 报价说明默认展开那版（刘兆楠 2026-09-20：不要折叠）*/
.qnotebox.open{margin-top:20px}
.qnotebox.open .nhd{font-size:12.5px;font-weight:650;color:var(--ink-2);margin-bottom:2px}
.qnotebox.open .nhd .hint2{font-weight:400}
/* 算法怎么算的那一句 */
.howline{font-size:12px;color:var(--ink-3);margin:10px 0 14px;line-height:1.7;
  font-family:ui-monospace,Menlo,monospace}
/* 小算价表 */
#sideBox{margin-bottom:22px}
.qtable.mini .qrow{grid-template-columns:none}
.miniout{font-size:12.5px;color:var(--ink-2)}
.miniout b{font-size:15px;color:var(--ink)}
.miniout a{color:var(--sea,#1B4C86);text-decoration:underline;margin-left:4px}
.miniout .bad{color:var(--pain);font-size:12.5px;font-weight:400}
.dim{color:var(--ink-4)}
/* 粘贴识别 */
/* ── 三块统一版式：标题在上，框铺满，按钮右下（刘兆楠 2026-09-20）── */
.qblock{margin-bottom:14px}
/* 卷膜总重量是算料的功能型公式，不是报价——选中用绿渐变区分（刘兆楠 2026-09-20）*/
#segRoll.sel::before{background:linear-gradient(135deg,#1F8A4C,#0E4D2B)}
/* 问题应对＝出状况时看的，整块走红（刘兆楠 2026-09-20）*/
#segQa2.sel::before{background:linear-gradient(135deg,#B0402F,#6B1F15)}
#kitSolo .fmod[data-mod="g"].open .fhead{background:linear-gradient(90deg,#B0402F 0%,#6B1F15 100%)}   /* 选中底色是 ::before 画的，改它才生效 */
@keyframes qfade{from{opacity:0}to{opacity:1}}
.qfade{animation:qfade .32s var(--ease)}
.qblock.main{margin:10px 0 14px}
.qblock .nhd{font-size:12.5px;font-weight:650;color:var(--ink-2);margin-bottom:7px}
.qblock .nhd .hint2{font-weight:400;margin-left:2px}
.qblock .qnotes{width:100%;box-sizing:border-box}
.qblock .qnotes.fixed{height:68px;resize:none;overflow-y:auto;font-size:11.5px;line-height:1.5;padding:7px 10px;color:var(--ink-3)}
.qblock .qnotes.notes{height:122px;resize:none;overflow-y:auto;font-size:12px;line-height:1.6;padding:8px 10px}
.nhd-row{display:flex;align-items:center;min-height:28px}
.nhd-row .btn{margin-left:auto}
/* 报价表 + 右边的公式 */
.qmain{display:block}
/* 公式横着跟在「报价表」后面，小字等宽 */
.qblock .nhd .fx{font-weight:400;font-size:11.5px;color:var(--ink-3);margin-left:10px;
  font-family:ui-monospace,Menlo,monospace}
.pastebox{margin-top:18px;padding-top:14px;border-top:1px dashed var(--line)}
/* 2026-09-21 刘兆楠：重点信息放大、次要信息缩小。
   主角＝报价表标题、格子里的数、算出来的单价；配角＝公式、粘贴框、报价说明、联系人 */
.qblock.main .nhd{align-items:baseline;margin-bottom:9px}
.qblock.main .nhd > span:first-child{font-size:17px;font-weight:700;color:var(--ink);letter-spacing:-.01em}
.qblock .nhd .fx{font-size:11px;color:var(--ink-4);margin-left:12px}
.qrow.qhead span{font-size:13.5px}
.qrow input{font-size:15px;padding:13px 10px}
.qrow input.pricecell{font-size:16.5px;font-weight:700}
.qrow input::placeholder{font-size:13.5px;font-weight:400}
#pasteBlock .nhd{font-size:12px;font-weight:600;color:var(--ink-3)}
#pasteBlock .qnotes.fixed{color:var(--ink-3)}
#qShared .qblock .nhd{font-size:12.5px;font-weight:600;color:var(--ink-3)}
#qShared .qnotes.notes{font-size:12px;color:var(--ink-3)}
#qShared .cform label{font-size:11.5px;color:var(--ink-4)}
#qShared .cform input{font-size:12.5px;color:var(--ink-2)}
/* 粘贴框挪到报价表上面那版，不要上边框 */
.pastebox.top{margin-top:0;padding-top:0;border-top:0;margin-bottom:22px}
/* 自动算出来的单价：淡蓝底，一眼看出是算的不是手填的 */
.qrow input.pricecell.auto{background:transparent}
.pastehd{margin-bottom:8px}
.pastehd b{font-size:13px;color:var(--ink)}
.pastehd .hint2{display:block;margin-top:2px}
/* 出图预览：图 + 右下角两个按钮 */
.qprev{margin-top:14px;border:1px solid var(--line);border-radius:10px;
  overflow:hidden;background:var(--panel)}
.qprev .qimg{margin:0;padding:12px;background:var(--sunk)}
.qprev .qimg img{width:100%;display:block;border-radius:6px}
.qprev .qfoot{margin:0;padding:10px 12px;border-top:1px solid var(--line-2)}
/* 2026-09-21 刘兆楠：报价图跟开场资料一样，整张点一下就复制，右上角浮「点一下复制」，复制完变绿 */
.qprev.copyable{padding:0;margin-bottom:0}
.qprev .hintcopy{top:10px;right:12px;background:rgba(255,255,255,.88);padding:3px 8px;border-radius:6px;z-index:2}
#qOutFoot{margin-top:10px}
#qOutFoot + .qblock{margin-top:28px}
.qlbl{font-size:12px;color:var(--ink-3);display:flex;align-items:center;gap:6px}
.qlbl input{border:1px solid var(--line);border-radius:6px;padding:5px 8px;
  font:inherit;font-size:12.5px;background:var(--panel)}
.qnotes{width:100%;border:1px solid var(--line);border-radius:8px;padding:10px 12px;
  font:inherit;font-size:12.5px;line-height:1.7;color:var(--ink-2);background:var(--panel);
  resize:vertical}
.qimg{margin-top:14px;border:1px solid var(--line);border-radius:10px;overflow:hidden;
  background:var(--sunk)}
.qimg img{display:block;width:100%}
.phead{display:flex;align-items:center;gap:14px;flex-wrap:wrap;
       margin:0 0 8px;justify-content:space-between}
.pwhat{font-size:13px;color:var(--ink-2);line-height:1.75;margin:0 0 20px}
.tip{background:var(--sunk);border:1px solid var(--line-2);border-radius:var(--r-m);
     padding:13px 16px;font-size:12.5px;color:var(--ink-2);line-height:1.9;
     margin-bottom:20px}
.tip b{color:var(--ink);font-weight:650}
.tip .warn{color:var(--alert);font-weight:650}
/* 卡片：不透明白底，压住背后的 logo 水印（之前透过来，字全糊了） */
.card{border:1px solid var(--line);border-radius:var(--r-m);background:#fff;
      padding:0;margin-bottom:10px;transition:.14s var(--ease);
      box-shadow:0 1px 2px rgba(22,24,29,.04)}
.card:hover{border-color:rgba(22,24,29,.2);box-shadow:0 2px 8px rgba(22,24,29,.07)}
.card.off{opacity:.55}
.card.off .cbody{display:none}
.chead{display:flex;align-items:center;gap:10px;padding:13px 15px;
       border-bottom:1px solid var(--line-2)}
.card.off .chead{border-bottom:0}
.chead .nm{flex:1;font-weight:650;font-size:14px;border:1px solid transparent;
           background:none;padding:5px 8px;color:var(--ink);min-width:0;
           border-radius:var(--r-s);margin-left:-8px}
.chead .nm:hover{background:var(--sunk)}
.chead .nm:focus{outline:0;background:#fff;border-color:var(--ink-3)}
.cbody{padding:14px 15px 15px}
.fld{margin-bottom:14px} .fld:last-child{margin-bottom:0}
.fld > label{display:block;font-size:12px;color:var(--ink-2);margin:0 0 6px;
             font-weight:600}
.fld > label em{font-style:normal;font-weight:400;color:var(--ink-4);
                margin-left:6px;font-size:11.5px}
/* 输入框比卡片深一档：往里凹，一眼看出是能打字的地方 */
.card textarea,.card .kw{width:100%;border:1px solid var(--line);
  border-radius:var(--r-s);background:var(--sunk);padding:9px 11px;
  font:inherit;font-size:13px;color:var(--ink);resize:vertical;line-height:1.75}
.card textarea::placeholder,.card .kw::placeholder{color:var(--ink-4)}
.card textarea:focus,.card .kw:focus{outline:0;border-color:var(--ink);
  background:#fff;box-shadow:0 0 0 3px rgba(22,24,29,.06)}
.card .note{font-size:12px;color:var(--ink-3);margin:10px 0 0;line-height:1.6;
            padding-left:11px;border-left:2px solid var(--line)}
.sw2{position:relative;width:36px;height:21px;flex:none;cursor:pointer}
.sw2 input{opacity:0;width:0;height:0;position:absolute}
.sw2 span{position:absolute;inset:0;background:rgba(22,24,29,.22);border-radius:21px;
          transition:.18s var(--ease)}
.sw2 span::before{content:'';position:absolute;width:17px;height:17px;left:2px;top:2px;
  background:#fff;border-radius:50%;transition:.18s var(--ease);
  box-shadow:0 1px 3px rgba(0,0,0,.25)}
.sw2 input:checked + span{background:var(--on)}
.sw2 input:checked + span::before{transform:translateX(15px)}
.xbtn{cursor:pointer;border:0;background:none;color:var(--ink-4);font-size:18px;
      line-height:1;padding:5px 8px;border-radius:var(--r-s);flex:none}
.xbtn:hover{color:var(--alert);background:var(--alert-bg)}
/* 保存栏：原来是 sticky 贴底浮着，会盖住下面的卡片（2026-09-03 实测第4样被挡）。
   它只在编辑时出现，正常跟在内容末尾就行，不用浮。 */
.savebar{padding:18px 0 6px;margin-top:14px;display:flex;align-items:center;gap:12px;
         border-top:1px solid var(--line-2)}
/* ⚠️ display:flex 会盖过 HTML 的 hidden 属性，元素明明 hidden=true 还照样显示。
   所有用 display 的块都要补这一条，否则 el.hidden 失效（2026-09-03 踩到）。*/
.savebar[hidden]{display:none}
.saved{font-size:12.5px;color:var(--on);font-weight:600}
.empty{color:var(--ink-3);font-size:13px;padding:26px 0;text-align:center;
       border:1px dashed var(--line);border-radius:var(--r-m);background:#fff}
::-webkit-scrollbar{width:9px;height:9px}
::-webkit-scrollbar-thumb{background:rgba(22,24,29,.14);border-radius:9px;
  border:2.5px solid transparent;background-clip:content-box}
::-webkit-scrollbar-thumb:hover{background:rgba(22,24,29,.24);background-clip:content-box}
::-webkit-scrollbar-track{background:transparent}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}

/* ══ 左侧栏版式（刘兆楠 2026-09-21：「把上面的菜单全部做到左边来」）══ */
.shell{display:flex;align-items:stretch;min-height:100vh;position:relative;z-index:1}
.side{flex:none;width:188px;position:sticky;top:0;height:100vh;box-sizing:border-box;
  display:flex;flex-direction:column;padding:16px 12px 14px;
  background:rgba(255,255,255,.62);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);
  border-right:1px solid var(--line)}
.brand{font-size:13px;font-weight:700;color:var(--ink);letter-spacing:.02em;padding:4px 10px 14px}
.side .tabs{display:flex;flex-direction:column;gap:2px;margin:0;border-bottom:0}
.side .tab{text-align:left;padding:9px 12px;font-size:13.5px;border-radius:8px;color:var(--ink-2)}
.side .tab::before{border-radius:8px}
.side .tab:hover{background:var(--sunk)}
.side .tab.sel:hover{background:none}
/* 侧栏底部：账号在上，快捷键、更新位在下 */
/* 侧栏底部（2026-09-21 刘兆楠：照 Codex 的底部排版）：
   头像+名字一行平铺、不套药丸边框；右边一个小键位；下面一行淡字放版本和更新状态。
   右下角原来那条浮在正文上的签名删了，正文一路撑到窗口底。 */
.side .top{flex-direction:column;align-items:stretch;gap:10px;margin:auto 0 0;padding-top:10px}
.side .acctrow{display:flex;align-items:center;gap:4px}
.side .acct{flex:1;min-width:0;justify-content:flex-start;border:0;background:none;
  border-radius:8px;padding:6px 8px 0;gap:10px;font-size:13px;max-width:none}
.side .acct:hover{background:var(--sunk)}
.side .acct .ava{width:26px;height:26px;font-size:12px}
.side .hk{flex:none;font:inherit;font-size:11px;font-weight:600;color:var(--ink-3);
  border:1px solid var(--line-2);border-radius:6px;padding:2px 6px;margin-right:4px;cursor:default}
.side .foot{display:flex;flex-direction:column;gap:10px;margin-top:0;border-top:0;padding:0 8px;font-size:11px;color:var(--ink-4);
  line-height:1.5}
.side .foot .updmini{cursor:pointer}
.side .foot .updmini:empty{display:none}
.side .foot .updmini.has{color:var(--pain);font-weight:600}
.side .foot .sign{position:static;pointer-events:auto;font-size:11px;color:var(--ink-4)}
.wrap{flex:1;min-width:0;max-width:none;margin:0;padding:22px 26px 22px}
/* ① 侧栏实色白底；选中项实色蓝、白字（.side .tab 的字色不许压过选中态）*/
.side{background:#fff;backdrop-filter:none;-webkit-backdrop-filter:none}
.side .tab.sel,.side .tab.sel:hover{color:#fff}
.side .tab::before{background:#1B4C86}
/* ② 正文这一栏撑到窗口底：聊天框高度按窗口算，输入栏贴到签名上方 */
.helpbox{height:calc(100vh - 200px);max-height:none}   /* .talkbox 的 560 上限别卡住它 */
/* 侧栏二级：一级选中时展开（高度动画），未选中收起 */
.subsrc{display:none !important}
.subs{display:grid;grid-template-rows:0fr;transition:grid-template-rows .32s var(--ease)}
.tab.sel + .subs{grid-template-rows:1fr}
.subsin{overflow:hidden;min-height:0;display:flex;flex-direction:column;gap:1px;padding:0}
.tab.sel + .subs .subsin{padding:2px 0 4px}   /* 收起时不留边，免得露出一条 */
.sub{display:block;width:100%;text-align:left;border:0;background:none;font:inherit;font-size:13px;
  color:var(--ink-3);padding:7px 12px 7px 24px;border-radius:8px;cursor:pointer;
  -webkit-appearance:none;appearance:none;transition:.14s var(--ease)}
.sub:hover{background:var(--sunk);color:var(--ink)}
.sub.sel{color:#1B4C86;background:#EEF4FC;font-weight:600}
.sub.red.sel{color:var(--pain);background:var(--alert-bg)}
.sub.green.sel{color:#0E4D2B;background:#E6F4EC}
.casechips{margin-bottom:12px}
/* 输入栏（照微信）：文字区 + 底下一行 工具左 / 发送右 */
.chatbox{padding:10px 12px 10px}
.chatin{width:100%;box-sizing:border-box;border:0;background:none;resize:none;font:inherit;font-size:14px;
  line-height:1.6;color:var(--ink);padding:4px 6px;min-height:66px}
.chatin:focus{outline:0}
.chatin::placeholder{color:var(--ink-4)}
.chatfoot{display:flex;align-items:center;gap:6px}
.chatfoot .chattools{gap:4px}
.chatfoot .sendbtn{padding:7px 22px}

/* 2026-09-22：连续工作区；助手回答采用文档排版。 */
button:focus-visible,a:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible,summary:focus-visible{outline:2px solid #1B4C86;outline-offset:3px}
button:disabled{opacity:.5;cursor:wait}
.workspace-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:10px;flex-wrap:wrap}
.workspace-head>div{display:flex;align-items:center;gap:8px}.workspace-head label{white-space:nowrap;font-size:12px;color:var(--ink-3)}
.workspace-head select{max-width:260px;min-width:130px}.workspace-head input{max-width:230px}
.sw-save{font:inherit;font-size:11px;border:0;background:none;color:var(--ink-3);cursor:pointer}
.sw-copy-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:10px}.sw-copy-button{margin-left:auto}.sw-copy-actions .btn{font-size:12px}.fence .sw-copy-actions{white-space:normal}
.sw-actions{display:flex;gap:8px;flex-wrap:wrap;margin:14px 0}.sw-detail{margin:18px 0;color:var(--ink-2)}.sw-detail summary{cursor:pointer;font-size:13px;font-weight:500;margin-bottom:10px}
.sw-link{display:block;text-align:left;background:none;border:0;padding:7px 0;font:inherit;color:#315b85;cursor:pointer;font-size:13px}
.sw-context{font-size:12px;color:var(--ink-3);margin-bottom:16px}.sw-history{display:flex;align-items:center;gap:8px;padding:14px 0;border-bottom:1px solid var(--line)}.sw-history>div{flex:1;min-width:0}.sw-history small{display:block;color:var(--ink-3);font-size:11px}
.qdetail{display:flex;align-items:center;gap:12px;flex-wrap:wrap;font-size:12px;padding:10px;background:#f7f9fb;border-bottom:1px solid var(--line)}.qcost{flex:1;min-width:200px;color:var(--ink-3)}.qvalid{font-size:11px}.ok{color:#237243}.bad{color:#9b372d}
.qrow input.pricecell{background:#f2f6fc;font-size:14px}#quoteHistory summary{cursor:pointer}#quoteHistorySearch{margin:14px 0;width:100%}
#pgHelp.sel{display:flex;flex-direction:column;height:calc(100dvh - 44px);min-height:450px}
#helpOut{flex:1;min-height:140px;height:auto!important;max-height:none;background:#fff;border:0;border-radius:0;box-shadow:none;padding:12px max(12px,calc((100% - 760px)/2));overflow-y:auto;scrollbar-gutter:stable}
#helpOut .ev{margin:0 0 30px;width:100%;display:block}
#helpOut .ev.me{display:flex;justify-content:flex-end}
#helpOut .ev.me .c{display:block;width:auto;max-width:80%;background:#f2f2f2;color:#202123;border:0;border-radius:20px;padding:9px 14px;font-size:14px;line-height:1.6}
#helpOut .ev.cust .c{display:block;width:100%;max-width:100%;padding:0;background:none;border:0;box-shadow:none;border-radius:0;white-space:normal;font-size:14px;line-height:1.75;font-weight:400;color:#202123}
#helpOut .ans{margin:0 0 20px}#helpOut .ans .at{font-size:15px;font-weight:600;line-height:1.6;color:#202123;margin:0 0 8px}
#helpOut .ans .ab{font-size:15px;line-height:1.8;white-space:pre-line;color:#202123;font-weight:400}
#helpOut p{margin:0 0 12px}#helpOut h1,#helpOut h2,#helpOut h3,#helpOut h4{font-size:16px;line-height:1.55;margin:22px 0 10px;color:#202123;font-weight:600}
#helpOut ul,#helpOut ol{padding-left:24px;margin:12px 0}#helpOut li{margin:5px 0}#helpOut strong{font-weight:600}#helpOut blockquote{margin:12px 0;padding:0 0 0 14px;border-left:3px solid #dedede;color:#50545a}
#helpOut .btn.sm{margin-top:8px;font-size:12px;padding:5px 10px;color:var(--ink-3);border-color:var(--line);background:transparent}
#helpOut table{border-collapse:collapse;width:100%;font-size:13px}#helpOut th,#helpOut td{padding:9px;border-bottom:1px solid var(--line);text-align:left}
/* Reserve only the resting height; the composer grows upward over the conversation. */
.help-composer-slot{position:relative;flex:none;width:min(100%,790px);align-self:center;height:126px;margin-top:8px;z-index:2}
#pgHelp .help-composer-slot>.chatbox{position:absolute;bottom:0;left:0;width:100%;border:1px solid #dedede;border-radius:20px;box-shadow:0 2px 8px rgba(0,0,0,.03);padding:12px 16px;gap:8px;margin:0;background:#fff}
#pgHelp #helpQ{display:block;min-height:56px;height:56px;max-height:none;overflow-y:auto;font-size:15px;line-height:1.6;padding:0;border:0;border-radius:0;background:transparent;box-shadow:none;outline:none;resize:none;transition:none}
#pgHelp .chatfoot{height:36px;flex:none}
#pgHelp .help-composer-slot>.sugbox{position:absolute;bottom:calc(100% + 8px);left:0;width:100%;max-height:120px;overflow:auto;margin:0;z-index:3}
@media(max-width:1000px){#helpOut{padding:12px 8px}.qrow input{font-size:13px;padding:12px 5px}}

/* 菜单及报价预览保持稳定，不随滚动高度变化重新定位侧栏。 */
.shell{padding-left:188px}.side{position:fixed;left:0;top:0;bottom:0;height:100dvh;overflow-y:auto}
.subs{transition:none}.side .tab,.side .sub{transition:color .14s,background-color .14s}.side .tab::before{transition:none}
#pgCalc .qdetail{justify-content:flex-end;background:transparent;padding:8px 10px}
.quote-folder{display:flex;align-items:center;gap:12px;margin:10px 0}.quote-folder span{flex:1;min-width:0;overflow-wrap:anywhere;font-size:12px;color:var(--ink-3)}
.quote-preview-head{margin-top:14px}#quoteHistorySearch{width:100%;margin:8px 0 12px}
#quoteHistory .sw-history{flex-wrap:wrap}#quoteHistory .sw-history>div{min-width:220px;overflow-wrap:anywhere}
#qOut img{height:auto}#qOut{overflow-anchor:none}#quoteHistory{overflow-anchor:none}
/* 工作台：左侧直接选择聊天，右侧继续当前对话。 */
#pgHelp.sel{display:grid;grid-template-columns:224px minmax(0,1fr);gap:28px;min-height:0}
.help-thread{display:flex;flex-direction:column;min-width:0;min-height:0;height:100%}.help-thread>.workspace-head{flex:none;flex-wrap:nowrap;min-height:34px}
.help-session-title{display:block!important;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:14px;font-weight:600}.help-thread .sw-save{flex:none}
@media(max-width:1000px){#pgHelp.sel{grid-template-columns:188px minmax(0,1fr);gap:20px}.help-thread .chatfoot>.hint2{display:none}}
/* 各菜单共用居中的内容宽度；底部为固定备案信息留出空间。 */
.wrap{--content-wide:1120px;--content-reading:840px;--content-top:22px;--content-bottom:52px;padding:var(--content-top) 26px var(--content-bottom)}
.wrap>.page{width:100%;max-width:var(--content-wide);margin-inline:auto}
#pgHelp.sel{height:calc(100dvh - var(--content-top) - var(--content-bottom))}
.admin-head{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:24px}.admin-head h1{font-size:18px;line-height:1.4;margin:0;color:var(--ink)}.admin-head p{margin:5px 0 0;font-size:13px;color:var(--ink-3);line-height:1.6}.admin-section-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px}.admin-section-head .hint2{margin:0}.admin-meters{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}.admin-meter{min-height:94px;border:1px solid var(--line);border-radius:12px;padding:16px;background:#fff;display:flex;flex-direction:column;justify-content:space-between}.admin-meter b{font-size:25px;line-height:1;color:var(--ink);font-weight:650}.admin-meter span{font-size:12px;color:var(--ink-3)}.admin-empty{font-size:13px;color:var(--ink-3)}.admin-list{display:grid}.admin-row{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;padding:12px 0;border-bottom:1px solid var(--line)}.admin-row:first-child{padding-top:0}.admin-row:last-child{padding-bottom:0;border-bottom:0}.admin-row b{font-size:13px;line-height:1.55;font-weight:600;color:var(--ink)}.admin-row p{margin:3px 0 0;font-size:12px;line-height:1.55;color:var(--ink-3)}.admin-row>span{max-width:42%;text-align:right;font-size:11px;line-height:1.6;color:var(--ink-3)}.system-flow{display:flex;width:100%;min-width:0;align-items:stretch;padding:3px 0 12px}.system-flow-node{position:relative;display:flex;min-width:0;min-height:126px;flex:1 1 0;flex-direction:column;gap:8px;padding:13px 12px;border:1px solid var(--line);border-radius:10px;background:#fff}.system-flow-node-head{display:flex;align-items:center;gap:7px;min-width:0}.system-flow-node-head b{min-width:0;font-size:13px;line-height:1.35;font-weight:650;color:var(--ink);white-space:nowrap}.system-flow-dot{display:grid;place-items:center;width:18px;height:18px;flex:0 0 18px;border-radius:999px;background:#edf4fb;color:var(--blue);font-size:12px;font-weight:700}.system-flow-node p{min-height:37px;margin:0;font-size:12px;line-height:1.55;color:var(--ink-3);overflow-wrap:anywhere}.system-flow-state{align-self:flex-start;margin-top:auto;padding:2px 7px;border-radius:999px;background:#eef5f1;color:#3d6b58;font-size:11px;font-style:normal;line-height:1.45;white-space:nowrap}.system-flow-node.needs_input .system-flow-dot{background:#faf4e7;color:#87651f}.system-flow-node.needs_input .system-flow-state{background:#faf4e7;color:#87651f}.system-flow-node.failed .system-flow-dot{background:#fdf0ef;color:#a55047}.system-flow-node.failed .system-flow-state{background:#fdf0ef;color:#a55047}.system-flow-link{position:relative;width:22px;height:1px;min-width:22px;align-self:center;flex:0 0 22px;background:var(--line)}.system-flow-link::after{position:absolute;top:50%;right:-1px;width:5px;height:5px;border-top:1px solid var(--ink-3);border-right:1px solid var(--ink-3);content:"";transform:translateY(-50%) rotate(45deg)}.admin-conversation-row>span{display:flex;align-items:center;justify-content:flex-end;gap:9px;white-space:nowrap}.admin-conversation-row .btn{min-width:42px}.admin-state{font-style:normal}.admin-state.failed,.admin-state.rejected,.admin-state.unavailable{color:#a55047}.admin-state.needs_input{color:#87651f}.admin-conversation{width:min(680px,calc(100vw - 32px))}.admin-conversation-meta{margin:4px 0 14px;font-size:12px;color:var(--ink-3)}.admin-conversation-messages{display:grid;gap:12px;max-height:min(58vh,620px);overflow:auto;padding-right:4px}.admin-conversation-message{border:1px solid var(--line);border-radius:10px;padding:11px 12px;background:#fff}.admin-conversation-message.from-sale{border-left:3px solid var(--blue)}.admin-conversation-message.from-agent{border-left:3px solid #94a3b8}.admin-conversation-message-head{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:6px;font-size:12px}.admin-conversation-message-head b{font-weight:600;color:var(--ink)}.admin-conversation-message-head span{color:var(--ink-3);font-size:11px}.admin-conversation-message-text{white-space:pre-wrap;overflow-wrap:anywhere;font-size:13px;line-height:1.65;color:var(--ink)}@media(max-width:680px){.admin-meters{grid-template-columns:repeat(2,minmax(0,1fr))}.admin-row{gap:10px}.admin-row>span{max-width:46%}.system-flow{min-width:0;flex-direction:column;align-items:stretch;padding-bottom:0}.system-flow-node{flex-basis:auto;min-height:0}.system-flow-node p{min-height:0}.system-flow-link{width:1px;height:18px;min-width:1px;min-height:18px;margin:0 auto;flex-basis:18px}.system-flow-link::after{top:auto;right:auto;bottom:-1px;left:50%;transform:translateX(-50%) rotate(135deg)}.admin-conversation-row>span{align-items:flex-end;flex-direction:column}}
.answer{max-width:var(--content-reading);margin-inline:auto}
#helpOut.is-empty{display:flex;align-items:center;justify-content:center;padding:24px 12px;scrollbar-gutter:auto}
.help-welcome{width:100%;max-width:560px;text-align:center;margin:auto;padding:24px 12px}
#helpOut .help-welcome p{margin:0;font-size:15px;line-height:1.8;color:var(--ink-3);text-wrap:balance}
.help-welcome .sw-actions{justify-content:center;align-items:center;gap:8px;margin:22px 0 0}
#helpOut .help-welcome .btn.sm{margin:0;white-space:nowrap;padding:7px 11px}
.empty>.sw-actions{justify-content:center}
.help-thread>.workspace-head{border-bottom:1px solid var(--line);padding-bottom:12px;margin-bottom:0}
.help-thread>.workspace-head,.help-thread>.chatbox{width:100%;max-width:790px;align-self:center}
@media(max-width:1000px){.wrap{--content-top:18px;padding-inline:20px}.help-welcome{padding:20px 0}#helpOut .help-welcome p{font-size:14px}}
/* 表格行操作留在表格内部，避免横向滚动和边缘跳动。 */
.qtable:not(.mini) .qrow{grid-template-columns:1fr 1.1fr .95fr .62fr .62fr .66fr .78fr .9fr 28px}
.qrow .del{position:static;width:28px;min-width:28px;height:auto;padding:0;align-self:stretch}
.chattools .tbtn[data-tool="shot"]{min-width:32px;min-height:32px;justify-content:center;padding:6px}

/* 新回复先在正文起点显示波点；辅助话题保持低于主回复的字号。 */
.reply-dots{display:inline-flex;align-items:center;gap:5px;height:27px;padding:0 2px}
.reply-dots i{display:block;width:6px;height:6px;border-radius:50%;background:#737982;animation:reply-dot 900ms ease-in-out infinite}
.reply-dots i:nth-child(2){animation-delay:150ms}.reply-dots i:nth-child(3){animation-delay:300ms}
@keyframes reply-dot{0%,60%,100%{transform:translateY(0);opacity:.4}30%{transform:translateY(-4px);opacity:1}}
.reply-thinking{text-align:left!important;min-height:27px}
#helpOut .reply-secondary,#helpOut .sw-detail{font-size:12px;line-height:1.7;color:#646b75}
#helpOut .reply-secondary .at,#helpOut .sw-detail .at,#helpOut .sw-detail summary{font-size:12px;line-height:1.6;color:#646b75;font-weight:600;margin-bottom:6px}
#helpOut .reply-secondary .ab,#helpOut .sw-detail .ab,#helpOut .sw-detail p,#helpOut .sw-detail li,#helpOut .sw-detail table{font-size:12px;line-height:1.7;color:#646b75}
#helpOut .sw-detail h1,#helpOut .sw-detail h2,#helpOut .sw-detail h3,#helpOut .sw-detail h4{font-size:13px;color:#505761;margin:14px 0 6px}
#helpOut .sw-detail .sw-link,#helpOut .sw-detail .btn.sm,#helpOut .ev.cust .c>.btn.sm{font-size:11px}
#helpOut .reply-secondary{margin-top:22px;margin-bottom:10px}
@media(prefers-reduced-motion:reduce){.reply-dots i{animation:none;opacity:.65}}

/* 回答分隔线属于“用户消息 → AI 回复”的边界，不放在回复末尾。 */
#helpOut .assistant-turn-divider{height:1px;margin:-8px 0 26px;background:#e2e4e7}
/* 知识库回答用标题色与留白分层，避免每段都被卡片边框包住。 */
#helpOut .assistant-answer{margin:0 0 24px;padding:0;border:0;border-radius:0;background:transparent}
#helpOut .assistant-answer:last-child{margin-bottom:0}
#helpOut .assistant-answer-head{display:flex;align-items:center;gap:10px;margin:0 0 12px}
#helpOut .assistant-answer .at{display:inline-flex;align-items:center;min-height:24px;margin:0;padding:2px 8px;border-radius:5px;background:#edf4fb;font-size:14px;line-height:1.55;font-weight:650;letter-spacing:-.012em;color:#214f83}
#helpOut .assistant-answer .ab{font-size:14px;line-height:1.75;color:#25272b;white-space:normal}
#helpOut .assistant-answer .ab p{margin:0 0 12px}
#helpOut .assistant-answer .ab p:last-child{margin-bottom:0}
#helpOut .assistant-answer .ab strong{font-weight:650;color:#17191d}
#helpOut .answer-citation{display:inline;padding:0;border:0;background:none;color:#315b85;font:inherit;font-size:.9em;line-height:inherit;text-decoration:underline;text-decoration-color:#b9c9dc;text-underline-offset:3px;cursor:pointer}
#helpOut .answer-citation:hover{color:#1b4c86;text-decoration-color:currentColor}
#helpOut .assistant-answer .ab h1,#helpOut .assistant-answer .ab h2,#helpOut .assistant-answer .ab h3,#helpOut .assistant-answer .ab h4{margin:18px 0 9px;padding-left:10px;border-left:2px solid #4d78a8;font-size:14px;line-height:1.55;font-weight:650;color:#294e79}
#helpOut .assistant-answer .ab h1:first-child,#helpOut .assistant-answer .ab h2:first-child,#helpOut .assistant-answer .ab h3:first-child,#helpOut .assistant-answer .ab h4:first-child{margin-top:0}
#helpOut .assistant-answer .ab ul,#helpOut .assistant-answer .ab ol{display:block;margin:0 0 14px;padding-left:22px}
#helpOut .assistant-answer .ab li{margin:7px 0;padding:0;line-height:1.7}
#helpOut .assistant-answer .ab li::marker{color:#4d78a8}
#helpOut .assistant-answer-foot{display:flex;align-items:center;justify-content:flex-end;min-height:25px;margin-top:12px;color:#80858d;font-size:11px;line-height:1.4}
#helpOut .answer-copy{display:inline-grid;place-items:center;width:28px;height:28px;padding:0;border:0;border-radius:6px;background:transparent;color:#747982;cursor:pointer;transition:background-color .14s ease,color .14s ease}
#helpOut .answer-copy:hover{background:#f1f2f3;color:#202123}
#helpOut .assistant-answer-action{margin:12px 0 0}
#helpOut .assistant-secondary{margin:26px 0 22px;padding:0 0 0 14px;border:0;border-left:2px solid #d9dfe6;border-radius:0;background:transparent}
#helpOut .assistant-secondary-title{margin:0 0 12px;color:#697386;font-size:12px;font-weight:600}
#helpOut .assistant-secondary .assistant-answer{margin-bottom:14px;padding:0;border:0;background:transparent}
#helpOut .assistant-secondary .assistant-answer .at{min-height:22px;padding:1px 7px;background:#f1f3f5;color:#555d68;font-size:13px}
#helpOut .assistant-secondary .assistant-answer .ab{font-size:13px;line-height:1.78;color:#626872}
#helpOut .assistant-secondary .assistant-answer .ab h1,#helpOut .assistant-secondary .assistant-answer .ab h2,#helpOut .assistant-secondary .assistant-answer .ab h3,#helpOut .assistant-secondary .assistant-answer .ab h4{border-left-color:#aeb7c2;color:#555d68}
#helpOut .assistant-secondary .assistant-answer-foot{font-size:10.5px}
#helpOut .related-materials{margin:21px 0 26px;padding:12px 0 0;border:0;border-top:1px solid #e6e9ed;border-radius:0;background:transparent}
#helpOut .related-materials-head{margin:0 0 7px;color:#697386;font-size:11px;font-weight:600;line-height:1.5}
#helpOut .related-materials-head span{margin-left:4px;color:#9ca1a8;font-weight:400}
#helpOut .related-materials-list{display:flex;flex-direction:column;align-items:flex-start;gap:3px}
#helpOut .related-materials .sw-link{padding:2px 0;border-radius:3px;color:#4a6f9d;font-size:12px;line-height:1.55;text-decoration:underline;text-decoration-color:#c8d4e2;text-underline-offset:3px}
#helpOut .related-materials .sw-link:hover{color:#1b4c86;text-decoration-color:currentColor}
#helpOut .related-materials .sw-link:focus-visible{outline-offset:2px}
@media(max-width:700px){#helpOut .assistant-answer .at{font-size:14px}#helpOut .assistant-answer .ab{font-size:13px;line-height:1.75}}


button.help-session-title{font:inherit;font-size:14px;font-weight:600;text-align:left;background:none;border:0;border-radius:5px;padding:4px 6px;margin-left:-6px;color:var(--ink);cursor:text}
button.help-session-title:hover{background:var(--sunk)}
.chat-editor{width:min(380px,calc(100vw - 40px));padding:24px;border:1px solid var(--line);border-radius:16px;box-shadow:0 18px 60px #0002;color:var(--ink);background:#fff}
.chat-editor::backdrop{background:#0004}
.chat-editor h2{font-size:16px;margin:0 0 20px}.chat-editor label{display:block;font-size:12px;color:var(--ink-2);margin:14px 0 6px}
.chat-editor input,.chat-editor select{width:100%;font:inherit;font-size:14px;padding:9px 10px;border:1px solid var(--line);border-radius:7px;background:#fff}
.chat-editor .editor-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:20px}
.chat-icon-btn{display:inline-flex;align-items:center;justify-content:center;flex:none;width:28px;height:28px;padding:5px;border:0;border-radius:5px;background:transparent;color:var(--ink-3);cursor:pointer}
.chat-icon-btn svg{display:block;flex:none}
.chat-icon-btn:hover{background:var(--line);color:var(--ink)}
.chat-icon-btn:active{background:var(--line-2)}
.chat-icon-btn:disabled{opacity:.4}
.chat-name-field{display:flex;align-items:center;gap:10px}
.chat-name-field input{flex:1;min-width:0}
.help-head-actions{flex:none}
.chat-archive-empty{font-size:12px;line-height:1.7;color:var(--ink-3);margin:8px 0 0}
.help-archive-link{display:flex;align-items:center;gap:8px;flex:none;width:100%;margin:0 0 var(--space-ui);padding:10px 8px;border:0;border-bottom:1px solid var(--line);background:transparent;color:var(--ink-3);font:inherit;font-size:12px;text-align:left;cursor:pointer}
.help-archive-link:hover{color:var(--ink);background:var(--rail-hover)}
.help-archive-link span{margin-left:auto;font-size:11px;color:var(--ink-4)}
.help-archive-link svg{flex:none}
.chat-archive{width:min(480px,calc(100vw - 40px));max-height:80dvh}
.chat-archive h2{margin-bottom:8px}
.chat-archive-list{max-height:50dvh;overflow-y:auto;margin-top:16px}
.chat-archive-row{display:flex;align-items:center;gap:16px;border-bottom:1px solid var(--line);padding:12px 0}
.chat-archive-view{min-width:0;flex:1;border:0;background:transparent;color:var(--ink);font:inherit;text-align:left;cursor:pointer;padding:4px;border-radius:5px}
.chat-archive-view:hover{background:var(--sunk)}
.chat-archive-view strong{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:14px;font-weight:500}
.chat-archive-view small{display:block;color:var(--ink-3);font-size:11px;margin-top:6px}
.chat-archive-row>.btn{flex:none}
.help-archive-notice{display:flex;align-items:center;justify-content:space-between;gap:12px;flex:none;width:min(100%,790px);align-self:center;padding:12px 16px;margin-top:8px;border:1px solid var(--line);border-radius:12px;font-size:12px;color:var(--ink-3)}
#chatEditError{font-size:12px;color:var(--pain);margin-top:8px}
#chatRemoveGroup{font-size:11px;color:var(--ink-3);margin-top:14px;padding:0;border:0;background:none;text-decoration:underline;cursor:pointer}
#chatDragGhost{position:fixed;z-index:2000;pointer-events:none;max-width:200px;padding:8px 12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;background:#fff;border:1px solid #d4dce7;border-radius:7px;box-shadow:0 5px 16px #0002;font-size:12px;color:#234c79}
.help-session-row.chat-dragging{opacity:.4}
.chat-drop-target{background:#e5edf7!important;box-shadow:inset 0 0 0 1px #b6cbe3}


/* 参照用户给出的 Codex 文件树：统一行高、文件夹父级、缩进聊天、低对比操作。 */
.help-history{--rail-hover:var(--line-2);--rail-selected:var(--line);display:flex;flex-direction:column;min-width:0;min-height:0;padding:4px 8px;background:var(--sunk);border-radius:0}
.help-new{display:flex;align-items:center;gap:12px;min-height:40px;width:100%;padding:8px;border:0;border-radius:6px;background:transparent;color:var(--ink-2);font:inherit;font-size:14px;font-weight:500;text-align:left;cursor:pointer}
.help-new svg{flex:none}.help-new:hover{background:var(--rail-hover)}
#helpSessions{flex:1;min-height:0;overflow-y:auto;overflow-x:hidden;display:flex;flex-direction:column;gap:0;margin-top:20px;scrollbar-width:thin}
.help-history-label{display:flex;align-items:center;justify-content:space-between;flex:none;height:32px;padding:0 8px;font-size:12px;font-weight:400;color:var(--ink-4)}
.chat-folders-label{margin-bottom:4px}
.chat-group,.chat-ungrouped{flex:none;min-width:0;margin:0;padding:0;border-radius:6px}
.chat-group-head{display:flex;align-items:center;min-width:0;height:36px;border-radius:6px}
.chat-group-head:hover{background:var(--rail-hover)}
.chat-group-toggle{display:flex;align-items:center;gap:12px;flex:1;min-width:0;height:36px;padding:0 8px;border:0;background:none;color:var(--ink-2);font:inherit;font-size:13px;line-height:20px;font-weight:400;text-align:left;cursor:pointer}
.chat-folder-icon{width:20px;height:20px;flex:none;color:var(--ink-3)}
.chat-group-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.help-session-row{display:flex;align-items:center;min-width:0;min-height:36px;border-radius:6px}
.help-session-row:hover{background:var(--rail-hover)}.help-session-row.active{background:var(--rail-selected)}
.help-session{flex:1;min-width:0;width:0;height:36px;padding:0 8px 0 40px;border:0;background:transparent;color:var(--ink-2);font:inherit;font-size:13px;line-height:20px;font-weight:400;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;cursor:grab;touch-action:none;user-select:none}
.help-session.active{color:var(--ink);font-weight:500}
.chat-group>.help-session-row{margin-left:0}
.chat-group.collapsed>.help-session-row{display:none}
.chat-group{margin-bottom:4px}.chat-ungrouped{margin-top:20px}
.chat-ungrouped>.help-history-label{margin-bottom:4px}
.chat-more{display:flex;align-items:center;justify-content:center;flex:none;width:28px;height:28px;margin-right:2px;padding:0;border:0;border-radius:5px;background:transparent;color:var(--ink-3);font:inherit;font-size:18px;cursor:pointer}
.chat-more:hover{background:var(--rail-selected);color:var(--ink)}
.chat-row-archive{margin-right:2px}
.chat-row-archive svg{width:14px;height:14px}
.help-session-row>.chat-more,.chat-group-head>.chat-more,.help-session-row>.chat-row-archive{opacity:0}
.help-session-row:hover>.chat-more,.help-session-row:focus-within>.chat-more,.chat-group-head:hover>.chat-more,.chat-group-head:focus-within>.chat-more,.help-session-row:hover>.chat-row-archive,.help-session-row:focus-within>.chat-row-archive,.help-session-row.active>.chat-row-archive{opacity:1}
@media(hover:none){.help-session-row>.chat-more,.chat-group-head>.chat-more,.help-session-row>.chat-row-archive{opacity:1}}

/* 聊天记录的起点与搜索入口共用一行；平时不额外占出空白。 */
.help-history{padding:0 8px}.help-history-toolbar{display:flex;align-items:center;gap:2px;min-height:48px;padding:0 4px}.help-history-toolbar .help-new{flex:1;min-width:0;width:auto;padding:8px 4px}.help-search-toggle{display:grid;place-items:center;flex:none;width:32px;height:32px;padding:0;border:0;border-radius:6px;background:transparent;color:var(--ink-3);cursor:pointer}.help-search-toggle:hover,.help-search-toggle[aria-expanded="true"]{background:var(--rail-hover);color:var(--ink)}.help-search-toggle:focus-visible{outline:2px solid #a9c0da;outline-offset:1px}.help-search-panel{display:flex;align-items:center;gap:3px;margin:0 4px 4px;padding:0 5px;border:1px solid var(--line);border-radius:7px;background:#fff}.help-search-panel[hidden]{display:none}.help-search-panel input{min-width:0;flex:1;height:32px;padding:0;border:0;outline:0;background:transparent;color:var(--ink);font:inherit;font-size:12px}.help-search-panel input::placeholder{color:var(--ink-4)}.help-search-clear{display:grid;place-items:center;width:24px;height:24px;padding:0;border:0;border-radius:4px;background:transparent;color:var(--ink-3);font:inherit;font-size:18px;line-height:1;cursor:pointer}.help-search-clear:hover{background:var(--sunk);color:var(--ink)}#helpSessions{margin-top:8px}.chat-ungrouped{margin-top:10px}.help-search-results{margin-top:0}.help-search-empty{margin:6px 8px;color:var(--ink-3);font-size:12px;line-height:1.6}.help-session-state{flex:none;margin-right:8px;color:var(--ink-4);font-size:11px;line-height:1.4}

.chat-group-head>.chat-row-archive{opacity:0}
.chat-group-head:hover>.chat-row-archive,.chat-group-head:focus-within>.chat-row-archive{opacity:1}
@media(hover:none){.chat-group-head>.chat-row-archive{opacity:1}}
.chat-archive-folder{border-bottom:1px solid var(--line)}
.chat-archive-folder-head{display:flex;align-items:center;gap:12px;padding:10px 0}
.chat-archive-folder-toggle{display:flex;align-items:center;gap:10px;min-width:0;flex:1;padding:4px;border:0;border-radius:5px;background:transparent;color:var(--ink);font:inherit;font-size:14px;text-align:left;cursor:pointer}
.chat-archive-folder-toggle:hover{background:var(--sunk)}
.chat-archive-folder-toggle span{min-width:0;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.chat-archive-folder-toggle small{font-size:11px;color:var(--ink-3)}
.chat-archive-folder-items{padding-left:28px}
.chat-archive-folder-items>.chat-archive-row:last-child{border-bottom:0}
.assistant-quote-image{width:min(100%,820px);margin:16px 0 0}.assistant-quote-image a{display:block;overflow:hidden;border:1px solid var(--line);border-radius:8px;background:var(--sunk)}.assistant-quote-image img{display:block;width:100%;height:auto}
#helpOut .ev.me .c:has(.chat-image){max-width:min(80%,560px);padding:8px;background:#f2f2f2}
#helpOut .chat-image{display:block;margin:0}.chat-image a{display:block;overflow:hidden;border-radius:13px;background:#fff}.chat-image img{display:block;width:100%;max-width:520px;height:auto}.chat-image figcaption{padding:6px 5px 1px;color:#747982;font-size:11px;line-height:1.45;overflow-wrap:anywhere}

/* 管理中心：按巡检类目纵向读取，避免状态被挤在同一条通道中。 */
.system-flow{display:grid;width:100%;min-width:0;overflow:hidden;border:1px solid var(--line);border-radius:12px;background:#fff}
.system-flow-node{display:grid;grid-template-columns:minmax(168px,.9fr) minmax(0,1.7fr) auto;align-items:center;min-width:0;min-height:0;gap:20px;padding:15px 18px;border:0;border-bottom:1px solid var(--line);border-radius:0;background:#fff}
.system-flow-node:last-child{border-bottom:0}
.system-flow-node-head{display:flex;align-items:center;gap:8px;min-width:0}
.system-flow-node-head b{min-width:0;font-size:13px;line-height:1.4;font-weight:650;color:var(--ink);white-space:normal}
.system-flow-node p{min-width:0;min-height:0;margin:0;font-size:12px;line-height:1.55;color:var(--ink-3);overflow-wrap:anywhere}
.system-flow-state{align-self:center;justify-self:end;margin:0;padding:2px 7px;font-size:11px;line-height:1.45;white-space:nowrap}
@media(max-width:680px){.system-flow-node{grid-template-columns:minmax(0,1fr) auto;gap:6px 12px;padding:13px 14px}.system-flow-node p{grid-column:1/-1}.system-flow-state{grid-column:2;grid-row:1;align-self:center}}

/* 开场资料沿用统一内容栏，仅保留卡片内部间距。 */
#pgKit .phead,#pgKit #kitOut,#pgKit .qfoot{width:100%}
#pgKit .phead{margin-bottom:14px}
#pgKit .copyable{margin-bottom:12px}
#pgKit .copyable .k{align-items:center;margin-bottom:9px}
#pgKit .copyable .why{margin-top:12px;padding-top:10px}

/* 外部间距统一为 10px；文字排版、表单内部留白、连续表格和导航行保持各自规格。 */
.split,.qasplit,.drillsplit,#pgHelp.sel,
.bmap,.mbody,.pagelist,.admin-meters,.admin-conversation-messages,
.ask,.askbar,.cardacts,.modal-btns,.filerow,.fbtns,.flowstrip,
.srcs,.qsug,.rolepick,.saverow,.bindbar,.clarify,.sugchips,.dsnimgs,
.rowbtns,.qfoot,.phead,.savebar,.workspace-head,.workspace-head>div,
.sw-copy-actions,.sw-actions,.quote-folder,.admin-head,.admin-section-head,
.admin-conversation-row>span,.chatfoot,.chatfoot .chattools,
.chat-editor .editor-actions,.help-history-toolbar,.help-head-actions{
  gap:var(--space-ui);
}

/* 区块下方只留一份外间距，卡片内部标题与正文不参与。 */
section:not(.help-thread),.duty,.meters,.q,.bub,.copyable,.fmod,.fbox,
.step,.answer,.casecard,.ev,.bindbar,.termlist,.rowbtns,.askbar,.fsit,
.qblock,.qblock.main,#sideBox,.pastebox.top,.phead,#pgKit .phead,
.pwhat,.tip,.card,.casechips,.admin-head,.sw-context,.pagelist,
#pgKit .copyable,#helpOut .ev,#helpOut .ans,#helpOut .assistant-answer{
  margin-bottom:var(--space-ui);
}
.chatbox{margin-bottom:var(--space-ui)}
.qblock.main{margin-top:0}
.pagelist>.casecard,.mbody>.casecard{margin-bottom:0}
#kitDetail #kitSolo>.fmod,#helpOut .assistant-answer:last-child{margin-bottom:0}

.qfoot,.ask,.saverow,.modal-btns,.scenelist,.dsnimgs,.egbox,.qzone,
.qnotebox,.qnotebox.open,.pastebox,.qprev,.qimg,.quote-preview-head,
#qOutFoot + .qblock,.savebar,.help-composer-slot,.help-archive-notice,
#helpSessions,.chat-archive-list,.assistant-quote-image,
.chat-editor .editor-actions{margin-top:var(--space-ui)}
.pastebox.top{margin-top:0}
.qprev .qfoot{margin:0}
.qnotes{display:block}
.sw-actions,.sw-detail,.quote-folder,#quoteHistorySearch,.rolepick{
  margin-block:var(--space-ui);
}
.help-welcome .sw-actions{gap:var(--space-ui);margin-top:var(--space-ui)}
#helpOut .sw-copy-actions .btn{margin-top:0}
#helpOut .assistant-answer-action,#helpOut .assistant-answer-foot{margin-top:var(--space-ui)}
#helpOut .assistant-secondary,#helpOut .reply-secondary,#helpOut .related-materials{
  margin-block:var(--space-ui);
}
#helpOut .assistant-turn-divider{margin-block:var(--space-ui)}
#pgHelp .help-composer-slot>.sugbox{bottom:calc(100% + var(--space-ui))}
#pgKit #kitOut>.copyable:last-child{margin-bottom:0}

/* Pending attachments belong to the composer, separate from sent messages. */
#pgHelp .chatbox{position:relative}
#pgHelp .chatbox::after{content:"";position:absolute;inset:4px;border:2px dashed var(--accent,#1B4C86);border-radius:16px;background:rgba(27,76,134,.04);pointer-events:none;opacity:0;transition:opacity 160ms ease}
#pgHelp .chatbox.dropping::after{opacity:1}
.composer-images{display:flex;gap:12px;flex-wrap:wrap;padding:12px 16px 0}
.composer-image{position:relative;width:72px;height:72px}
.composer-image img{width:100%;height:100%;object-fit:cover;border-radius:8px;border:1px solid var(--line)}
.composer-image button{position:absolute;right:-6px;top:-6px;width:24px;height:24px;border:1px solid var(--line);border-radius:50%;background:white;cursor:pointer}
.composer-image span{position:absolute;bottom:0;left:0;right:0;background:#fffE;font-size:11px;text-align:center;border-radius:4px}
@media(prefers-reduced-motion:reduce){#pgHelp .chatbox::after{transition:none}}

/* Keep every dialog centered, with scrolling when content exceeds the viewport. */
.chat-editor{position:fixed;inset:0;margin:auto;max-height:calc(100dvh - 40px);overflow:auto}
.modal{padding:20px}
.modal-card{max-width:100%;max-height:calc(100dvh - 40px);overflow:auto}
