:root{
  --ink:#14171C;--ink-2:#3A414B;--paper:#F4F3EF;--panel:#FFFFFF;
  --blue:#0A4FA0;--signal:#E8590C;--moss:#2F6B4F;--red:#B03030;--rule:#D8D6CE;
  --mono:ui-monospace,"SF Mono","JetBrains Mono","Roboto Mono",Menlo,Consolas,monospace;
  --sans:"PingFang SC","Hiragino Sans GB","Microsoft YaHei","Noto Sans SC",system-ui,sans-serif;
  --rail:214px;
}
*{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent}
body{background:var(--paper);color:var(--ink);font-family:var(--sans);font-size:14px;line-height:1.65;-webkit-font-smoothing:antialiased}
button{font-family:inherit;font-size:inherit;cursor:pointer;border:none;background:none;color:inherit;transition:transform .06s}
button:active{transform:translateY(1px) scale(.995)}
input,textarea,select{font-family:inherit;font-size:16px;color:inherit}
:focus-visible{outline:2px solid var(--signal);outline-offset:2px}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}

/* ===== Toast ===== */
#toast{position:fixed;left:50%;bottom:88px;transform:translateX(-50%) translateY(14px);z-index:900;
  background:var(--ink);color:#fff;padding:11px 18px;font-size:13px;max-width:82vw;text-align:center;
  opacity:0;pointer-events:none;transition:.25s;box-shadow:0 6px 24px rgba(0,0,0,.22)}
#toast.on{opacity:1;transform:translateX(-50%) translateY(0)}
#toast .ok{color:#7FD6A6;margin-right:7px;font-family:var(--mono)}

/* ===== 登录 ===== */
#login{min-height:100vh;display:grid;grid-template-columns:1.15fr 1fr}
.lo-left{background:var(--ink);color:#EDEBE6;padding:52px 44px;display:flex;flex-direction:column;justify-content:center;position:relative;overflow:hidden}
.lo-left .b1{position:absolute;right:-60px;top:60px;width:280px;height:280px;background:var(--blue);opacity:.45}
.lo-left .b2{position:absolute;right:110px;top:220px;width:150px;height:150px;background:var(--signal)}
.lo-in{position:relative;z-index:2;max-width:440px}
.lo-in .mk{display:inline-block;background:var(--signal);color:#fff;font-family:var(--mono);font-size:10px;letter-spacing:.16em;padding:4px 9px;margin-bottom:18px}
.lo-in h1{font-size:36px;font-weight:800;line-height:1.26;letter-spacing:-.01em}
.lo-in h1 em{font-style:normal;background:var(--signal);padding:0 7px}
.lo-in p{margin-top:17px;color:#B9BDC4;font-size:13.5px;max-width:400px}
.lo-in .ft{margin-top:30px;padding-top:17px;border-top:1px solid rgba(255,255,255,.2);font-family:var(--mono);font-size:10px;color:#8B9099;line-height:2}
.lo-right{background:var(--panel);padding:48px 40px;display:flex;flex-direction:column;justify-content:center}
.lo-form{max-width:360px;width:100%;margin:0 auto}
.lo-form h2{font-size:20px;font-weight:700;margin-bottom:3px}
.lo-form .sb{font-family:var(--mono);font-size:10px;color:#7C8189;letter-spacing:.06em;margin-bottom:24px}
.lo-form label{display:block;font-family:var(--mono);font-size:10px;letter-spacing:.12em;color:#7C8189;margin-bottom:5px}
.lo-form input{width:100%;padding:11px 12px;border:1px solid var(--rule);background:#FCFCFA;margin-bottom:15px;outline:none}
.lo-form input:focus{border-color:var(--blue)}
.lo-btn{width:100%;background:var(--ink);color:#fff;padding:12px;font-weight:700;letter-spacing:.04em}
.lo-btn:hover{background:var(--blue)}
.lo-err{color:var(--red);font-size:12px;margin-bottom:11px;display:none}

/* ===== 框架 ===== */
#app{display:none;min-height:100vh}
#app.on{display:flex}
.rail{width:var(--rail);flex:0 0 var(--rail);background:var(--ink);color:#EDEBE6;display:flex;flex-direction:column;position:sticky;top:0;height:100vh}
.rail-brand{padding:18px;border-bottom:1px solid rgba(255,255,255,.13)}
.rail-brand .mk{display:inline-block;background:var(--signal);color:#fff;font-family:var(--mono);font-size:9.5px;letter-spacing:.14em;padding:3px 7px;margin-bottom:9px}
.rail-brand h1{font-size:15.5px;font-weight:700;line-height:1.35}
.userbox{padding:14px 18px;border-bottom:1px solid rgba(255,255,255,.13);display:flex;align-items:center;gap:10px}
.userbox .av{width:32px;height:32px;display:grid;place-items:center;font-size:12px;font-weight:700;color:#fff;flex:0 0 32px}
.userbox .un{font-size:12.5px;font-weight:600}
.userbox .ur{font-family:var(--mono);font-size:9.5px;color:#8B9099}
.rail nav{padding:11px 0;flex:1;overflow-y:auto}
.navitem{display:flex;align-items:center;gap:10px;width:100%;text-align:left;padding:9px 18px;color:#B9BDC4;font-size:13px;border-left:3px solid transparent}
.navitem .n,.navitem .ni{font-family:var(--mono);font-size:11px;color:#6E747D;width:14px;text-align:center;flex:0 0 14px}
.navitem:hover{background:rgba(255,255,255,.05);color:#EDEBE6}
.navitem.on{background:rgba(255,255,255,.09);color:#fff;border-left-color:var(--signal);font-weight:600}
.navitem.on .n,.navitem.on .ni{color:var(--signal)}
/* 折叠区：常用 4 项之外的功能收在这里，首屏不糊一脸 */
.navmore{display:flex;align-items:center;gap:8px;width:100%;text-align:left;padding:10px 18px;margin-top:6px;
  border-top:1px solid rgba(255,255,255,.11);color:#8B9099;font-family:var(--mono);font-size:10.5px;letter-spacing:.06em}
.navmore:hover{color:#EDEBE6}
.navmore .nc{margin-left:auto;background:rgba(255,255,255,.12);padding:1px 6px;font-size:9.5px}
.navsub .navitem{padding-left:24px;font-size:12.5px}
.rail-foot{padding:12px 18px;border-top:1px solid rgba(255,255,255,.13)}
.logout{font-family:var(--mono);font-size:10px;color:#8B9099}
.logout:hover{color:var(--signal)}
main{flex:1;min-width:0}
.topbar{background:var(--panel);border-bottom:1px solid var(--rule);padding:12px 26px;display:flex;align-items:baseline;gap:12px;position:sticky;top:0;z-index:20}
.topbar h2{font-size:17px;font-weight:700}
.topbar .sub{font-family:var(--mono);font-size:10px;color:#7C8189;letter-spacing:.06em}
.topbar .sp{flex:1}
.pill{font-family:var(--mono);font-size:10px;padding:3px 8px;background:#EEEDE8;color:var(--ink-2)}
.wrap{padding:22px 26px 60px;max-width:1160px}
.page{animation:fade .24s ease}
@keyframes fade{from{opacity:0;transform:translateY(5px)}to{opacity:1;transform:none}}

/* 移动端底栏 */
#mnav{display:none}
#sheet{display:none}


/* 拜访记录：保存后自动推群的开关 */
.recpush{display:flex;gap:9px;align-items:flex-start;font-size:12.5px;line-height:1.75;margin-top:12px;padding:11px 13px;background:#F6F5F1;border-left:3px solid var(--blue);cursor:pointer}
.recpush input{margin-top:3px;width:15px;height:15px;flex:0 0 15px;accent-color:var(--blue);cursor:pointer}
.recpush span{display:block;color:#7C8189;font-size:11.5px;margin-top:3px}

/* ===== 逐条勾选（预演回顾校准 / 拜访记录归属）=====
 * 不复用 .recpush：那条规则里的 `.recpush input{width:15px;height:15px}`
 * 是按"只有一个复选框"写的，会把条目里的文本框压成 15px 高的一条缝。 */
.pickrow{display:flex;gap:9px;align-items:flex-start;font-size:12.5px;line-height:1.7;margin-top:8px;padding:10px 12px;background:#F6F5F1;border-left:3px solid var(--blue)}
.pickrow.off{opacity:.55;border-left-color:var(--rule)}
.pickrow>input[type=checkbox],.pickrow>input[type=radio]{margin-top:3px;width:15px;height:15px;flex:0 0 15px;accent-color:var(--blue);cursor:pointer}
.pickrow>label,.pickrow .bd{flex:1;min-width:0;cursor:pointer}
.pickrow .bd b{display:block;font-size:12.5px;font-weight:600}
.pickrow .bd .sub{display:block;color:#7C8189;font-size:11.5px;margin-top:3px}
.pickrow .bd .txt{display:block;margin-top:4px}
.pickrow .bd input[type=text]{width:100%;margin-top:5px;padding:7px 9px;border:1px solid var(--rule);background:#fff;font-size:12.5px;font-family:inherit;outline:none}
.pickrow .bd input[type=text]:focus{border-color:var(--blue)}
.pickrow .bd a{color:var(--blue);text-decoration:underline;cursor:pointer}
/* 勾中才显示的小标记。用 CSS 控，勾一下就不必整块重渲染——
   重渲染会把旁边那个正在敲的 textarea 一起清掉 */
.pickrow .mark{display:none}
.pickrow:not(.off) .mark{display:inline}

/* ===== 知识推送 · 匹配清单 ===== */
.pushlist{display:flex;flex-direction:column;gap:9px;margin-top:12px}
.pushitem{display:grid;grid-template-columns:52px 1fr;gap:11px;padding:11px 12px;border:1px solid var(--rule);background:#FCFCFA;opacity:.55;transition:opacity .15s,border-color .15s}
.pushitem.on{opacity:1;border-color:var(--ink);background:#fff}
.pushitem .pk{display:flex;flex-direction:column;align-items:center;gap:6px;cursor:pointer}
.pushitem .pk input{width:16px;height:16px;accent-color:var(--signal);cursor:pointer}
.pushitem .sc{font-family:var(--mono);font-size:14px;font-weight:700;color:var(--ink-2)}
.pushitem .pb{min-width:0}
.pushitem .ph{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-bottom:7px;font-size:12.5px}
.pushitem .own{font-family:var(--mono);font-size:10.5px;color:var(--blue)}
.pushitem .pt{width:100%;max-width:100%;padding:7px 9px;border:1px solid var(--rule);background:#fff;font-size:13px;font-weight:600;outline:none}
.pushitem .pt:focus{border-color:var(--blue)}
.pushitem .pw{font-size:11px;line-height:1.8;color:#7C8189;margin:6px 0}
.pushitem .pw span{display:inline-block;background:#EEEDE8;padding:1px 7px;margin-right:5px}
.pushitem .pa{width:100%;max-width:100%;padding:7px 9px;border:1px solid var(--rule);background:#fff;font-size:12.5px;line-height:1.7;outline:none;resize:vertical}
.pushitem .pa:focus{border-color:var(--blue)}

/* ===== 任务建议 ===== */
.card.tsk.dim{opacity:.5}
.tskfoot{font-family:var(--mono);font-size:10.5px;color:#9A9EA5;margin-top:9px;padding-top:8px;border-top:1px dashed var(--rule)}

/* ===== 通用 ===== */
.eyebrow{font-family:var(--mono);font-size:10px;letter-spacing:.16em;color:var(--signal);margin-bottom:7px}
.card{background:var(--panel);border:1px solid var(--rule);padding:18px 20px}
.card+.card{margin-top:14px}
h3.sec{font-size:15px;font-weight:700;margin-bottom:4px}
p.hint{color:var(--ink-2);font-size:12.5px;margin-bottom:13px}
.g2{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.g3{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}
.g4{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}
/* grid 子项默认 min-width:auto，一个 <select> 的最小宽度是它最长那条 option 的宽度——
   客户下拉里有「C-0417　某汽车零部件集团 · 国有企业」这种长选项，
   于是左栏被撑到几百像素，右栏被挤成一个字一行。所有栅格子项一律允许收缩。 */
.g2>*,.g3>*,.g4>*,.simgrid>*{min-width:0}
.g2 select,.g3 select,.g4 select,.card select,.setup select{max-width:100%}
.btn{background:var(--ink);color:#fff;padding:10px 17px;font-size:13px;font-weight:600;display:inline-flex;align-items:center;gap:7px}
.btn:hover{background:var(--blue)}
.btn.pri{background:var(--signal)}.btn.pri:hover{background:#C74A05}
.btn.ghost{background:none;border:1px solid var(--ink);color:var(--ink)}
.btn.ghost:hover{background:var(--ink);color:#fff}
.btn[disabled]{background:#C6C4BC!important;cursor:default;transform:none}
.btnrow{display:flex;gap:9px;flex-wrap:wrap;margin-top:13px}
.mini{font-size:11.5px;padding:6px 12px;border:1px solid var(--ink);white-space:nowrap}
.mini:hover{background:var(--ink);color:#fff}
.mini.done{background:var(--moss);border-color:var(--moss);color:#fff;cursor:default}
.mini.red{border-color:var(--red);color:var(--red)}
.mini.red:hover{background:var(--red);color:#fff}
.tag{display:inline-block;font-size:10.5px;padding:2px 7px;background:#EEEDE8;color:var(--ink-2);margin:0 5px 4px 0;font-family:var(--mono)}
.tag.warn{background:#FCE9DD;color:#A83E05}
.tag.blue{background:#E3EDF9;color:#083C7A}
.tag.ok,.tag.moss{background:#E1F0E7;color:#1D5738}
.tag.red{background:#FBE4E1;color:#8B2010}
.kv{display:flex;gap:10px;font-size:12.5px;padding:5px 0;border-bottom:1px dotted var(--rule)}
.kv:last-child{border-bottom:none}
.kv .k{flex:0 0 84px;color:#7C8189;font-family:var(--mono);font-size:10.5px;padding-top:2px}
.kv .v{flex:1;min-width:0}
.notice{background:#F2F6FC;border-left:3px solid var(--blue);padding:11px 14px;font-size:12.5px;color:var(--ink-2);margin-top:13px}
.notice.warn{background:#FDF3ED;border-left-color:var(--signal)}
.notice.ok{background:#F1F8F3;border-left-color:var(--moss)}
.notice b{color:var(--ink)}
.stat-n{font-family:var(--mono);font-size:26px;font-weight:700;letter-spacing:-.02em}
.stat-l{font-size:11.5px;color:var(--ink-2)}
.setup label{display:block;font-family:var(--mono);font-size:10px;letter-spacing:.1em;color:#7C8189;margin-bottom:5px}
.setup input,.setup select,.setup textarea{width:100%;padding:10px 11px;border:1px solid var(--rule);background:#FCFCFA;margin-bottom:12px;outline:none;font-size:14px}
.setup textarea{font-size:13.5px}
.setup input:focus,.setup textarea:focus{border-color:var(--blue)}
table.tb{width:100%;border-collapse:collapse;font-size:12.5px}
table.tb th{text-align:left;font-family:var(--mono);font-size:10px;color:#7C8189;padding:7px 9px;border-bottom:2px solid var(--ink);font-weight:400}
table.tb td{padding:9px;border-bottom:1px solid var(--rule);vertical-align:top}

/* 搜索筛选栏 */
.filterbar{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.filterbar input,.filterbar select{padding:8px 10px;border:1px solid var(--rule);background:#FCFCFA;outline:none;font-size:13px}
.filterbar input{flex:1 1 200px;min-width:0}
.filterbar select{flex:0 0 auto}
.filterbar input:focus,.filterbar select:focus{border-color:var(--blue)}
.filterbar .btn{padding:8px 14px}

/* 客户卡 */
.cust{display:flex;gap:14px;padding:15px 16px;border:1px solid var(--rule);background:var(--panel);cursor:pointer;transition:.14s;align-items:flex-start}
.cust+.cust{margin-top:9px}
.cust:hover{border-color:var(--ink)}
.cust.sel{border-color:var(--signal);border-left-width:4px;background:#FFF9F5}
.ring{flex:0 0 50px;height:50px;position:relative}
.ring svg{transform:rotate(-90deg)}
.ring span{position:absolute;inset:0;display:grid;place-items:center;font-family:var(--mono);font-size:11.5px;font-weight:700}
.cust-code{font-family:var(--mono);font-size:10.5px;color:var(--blue)}
.cust-name{font-size:14.5px;font-weight:700;margin:2px 0 4px}
.cust-meta{font-size:12px;color:var(--ink-2)}
.cust-pct{font-family:var(--mono);font-size:10px;color:#7C8189;text-align:right;flex:0 0 84px}

/* 对话 */
.simgrid{display:grid;grid-template-columns:1fr 262px;gap:14px;align-items:start}
.chat{background:var(--panel);border:1px solid var(--rule);display:flex;flex-direction:column;height:min(520px,62vh)}
.chat-hd{padding:10px 14px;border-bottom:1px solid var(--rule);display:flex;align-items:center;gap:9px;background:#FAFAF7}
.avatar{width:30px;height:30px;background:var(--blue);color:#fff;display:grid;place-items:center;font-size:12px;font-weight:700;flex:0 0 30px}
.chat-body{flex:1;overflow-y:auto;padding:14px}
.msg{margin-bottom:14px;max-width:86%}
.msg .who{font-family:var(--mono);font-size:9.5px;color:#7C8189;margin-bottom:4px}
.msg .bub{padding:10px 13px;font-size:13.5px;line-height:1.7}
.msg.ai .bub{background:#F1F0EB;border-left:3px solid var(--blue)}
.msg.me{margin-left:auto}.msg.me .who{text-align:right}
.msg.me .bub{background:var(--ink);color:#fff}
.msg.sys{max-width:100%}
.msg.sys .bub{background:#FCE9DD;border-left:3px solid var(--signal);font-size:12.5px;color:#7C3005}
.typing .bub{background:#F1F0EB;border-left:3px solid var(--blue);color:#7C8189;font-size:12.5px}
.dot{display:inline-block;animation:bl 1.2s infinite}
.dot:nth-child(2){animation-delay:.2s}.dot:nth-child(3){animation-delay:.4s}
@keyframes bl{0%,60%,100%{opacity:.25}30%{opacity:1}}
.cite{display:block;margin-top:6px;font-family:var(--mono);font-size:10px;color:var(--blue)}
.opts{border-top:1px solid var(--rule);padding:11px 14px;background:#FAFAF7}
.opt{display:block;width:100%;text-align:left;padding:10px 12px;border:1px solid var(--rule);background:#fff;margin-bottom:6px;font-size:12.5px;line-height:1.6}
.opt:hover{border-color:var(--ink);background:#F6F5F1}
.opt .oi{font-family:var(--mono);font-size:10px;color:var(--signal);margin-right:7px}

/* 预演自由应答：输入是主路径，参考应答折叠在下面 */
.ansbox{border:1px solid var(--rule);background:#fff}
.ansbox:focus-within{border-color:var(--blue)}
.ansbox textarea{display:block;width:100%;border:none;background:none;padding:11px 12px 4px;
  font-size:14px;line-height:1.7;outline:none;resize:vertical;font-family:inherit;min-height:62px}
.ansbar{display:flex;align-items:center;gap:8px;padding:5px 9px 8px}
/* 输入框下的一行规矩。说清楚代价，比事后弹一个警告框有用——
   人是在动手之前看这句话的 */
.ansrule{font-size:11px;line-height:1.65;color:#8A8F96;padding:0 10px 9px;border-top:1px dashed var(--rule);margin:0 9px;padding-top:8px}
.ansrule b{color:var(--signal)}
.anspend{font-family:var(--mono);font-size:10px;color:#7C8189;padding:14px 8px;text-align:center}
.peek{display:block;width:100%;text-align:left;margin-top:9px;padding:7px 2px;
  font-family:var(--mono);font-size:10.5px;color:#7C8189;letter-spacing:.04em}
.peek:hover{color:var(--ink)}
.peektip{font-size:11.5px;color:#8A6A45;background:#FFF9F0;border-left:3px solid #E8B96C;
  padding:7px 10px;margin-bottom:8px;line-height:1.6}

/* 生成中：分身生成要等十几秒、作战卡要等半分钟，这段时间屏幕不能是空的 */
.booting{padding:26px 22px;max-width:520px;margin:0 auto}
.booting .bt{font-size:15px;font-weight:700;margin-bottom:3px}
.booting .bsub{font-size:12.5px;color:var(--ink-2);margin-bottom:16px}
.bsteps{list-style:none;margin:0 0 16px}
.bsteps li{font-size:12.5px;padding:6px 0 6px 22px;position:relative;color:#9A9EA5;
  animation:fadein .3s ease}
.bsteps li:before{content:"○";position:absolute;left:2px;font-family:var(--mono);color:#C6C4BC}
.bsteps li.doing{color:var(--ink)}
.bsteps li.doing:before{content:"◐";color:var(--signal);animation:spin 1.1s linear infinite;display:inline-block}
.bsteps li.done{color:var(--ink-2)}
.bsteps li.done:before{content:"●";color:var(--moss)}
@keyframes fadein{from{opacity:0;transform:translateY(-3px)}to{opacity:1;transform:none}}
@keyframes spin{to{transform:rotate(360deg)}}
.booting .bnote{font-size:11.5px;color:#8A8F96;line-height:1.8;padding-top:12px;border-top:1px dotted var(--rule)}

/* 分身生成完先亮一下——这是"不是套壳"最直接的证据 */
.persona-card{border:1px solid var(--rule);background:#FAFAF7;padding:13px 15px;margin-bottom:14px}
.pc-hd{font-family:var(--mono);font-size:10px;letter-spacing:.12em;color:var(--moss);margin-bottom:9px}
.pc-row{display:flex;gap:10px;font-size:12.5px;line-height:1.7;padding:4px 0;border-bottom:1px dotted var(--rule)}
.pc-row:last-child{border-bottom:none}
.pc-row span{flex:0 0 62px;color:#8A8F96;font-size:11.5px}
.pc-row b{font-weight:700}

/* 逐轮点评 */
.msg.judge{max-width:86%;margin-left:auto}
.msg.judge .who{text-align:right}
.msg.judge .bub{background:#FAFAF7;border:1px solid var(--rule);border-left-width:3px;font-size:12.5px}
.msg.judge.good .bub{border-left-color:var(--moss);background:#F4F9F5}
.msg.judge.mid .bub{border-left-color:#B4B1A8}
.msg.judge.bad .bub{border-left-color:var(--signal);background:#FEF7F2}
.msg.judge .qtag{display:inline-block;font-family:var(--mono);font-size:10px;font-weight:700;
  padding:1px 7px;margin-bottom:5px;background:var(--ink);color:#fff}
.msg.judge.good .qtag{background:var(--moss)}
.msg.judge.bad .qtag{background:var(--signal)}
.msg.judge .jg{color:var(--ink-2)}
.msg.judge .jb{margin-top:5px;padding-top:5px;border-top:1px dotted var(--rule);color:var(--ink)}
.meter{margin-bottom:12px}.meter:last-child{margin-bottom:0}
.meter-top{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:4px}
.meter-top .mn{font-size:12px}
.meter-top .mv{font-family:var(--mono);font-size:12px;font-weight:700}
.bar{height:6px;background:#E7E5DE;position:relative;overflow:hidden}
.bar i{position:absolute;left:0;top:0;bottom:0;transition:width .5s cubic-bezier(.2,.8,.3,1)}
.delta{font-family:var(--mono);font-size:10.5px;margin-left:5px;opacity:0;transition:opacity .3s}
.delta.show{opacity:1}.delta.up{color:var(--moss)}.delta.dn{color:var(--signal)}
.goals li{list-style:none;font-size:12px;padding:4px 0 4px 19px;position:relative;color:var(--ink-2)}
.goals li:before{content:"○";position:absolute;left:2px;font-family:var(--mono);color:#B4B1A8}
.goals li.done{color:var(--ink)}.goals li.done:before{content:"●";color:var(--moss)}
.coach{border:1px solid var(--signal);background:#FFF9F5;padding:12px 14px;margin-top:14px}
.coach-hd{display:flex;justify-content:space-between;align-items:center;margin-bottom:7px}
.coach-hd .ct{font-family:var(--mono);font-size:9.5px;letter-spacing:.1em;color:var(--signal)}
.coach-hd .sw{font-family:var(--mono);font-size:9.5px;color:#7C8189;cursor:pointer;text-decoration:underline}
.hintline{font-size:12px;padding:6px 0;border-bottom:1px dotted #E5C9B4;line-height:1.6}
.hintline:last-child{border-bottom:none}
.hintline b{font-family:var(--mono);font-size:10px;margin-right:6px}
.hintline .fw{font-family:var(--mono);font-size:9.5px;color:#A88060;margin-left:5px}

/* 作战卡 */
.dossier{background:#fff;border:1px solid var(--ink)}
.dossier-hd{background:var(--ink);color:#fff;padding:15px 20px;display:flex;justify-content:space-between;align-items:flex-end;gap:12px}
.dossier-hd h3{font-size:18px;font-weight:800}
.dossier-hd .no{font-family:var(--mono);font-size:9.5px;color:#8B9099;text-align:right;line-height:1.8;white-space:nowrap}
.dossier-bd{padding:20px}
.dsec{margin-bottom:20px}.dsec:last-child{margin-bottom:0}
.dsec-h{display:flex;align-items:center;gap:9px;margin-bottom:9px;padding-bottom:6px;border-bottom:2px solid var(--ink)}
.dsec-h .idx{font-family:var(--mono);font-size:10px;background:var(--ink);color:#fff;padding:2px 6px}
.dsec-h .tt{font-size:13.5px;font-weight:700}
.qa{padding:10px 0;border-bottom:1px dotted var(--rule)}.qa:last-child{border-bottom:none}
.qa .q{font-size:13px;font-weight:600;margin-bottom:5px}
.qa .q b{color:var(--signal);font-family:var(--mono);font-size:11px;margin-right:6px}
.qa .a{font-size:12.5px;color:var(--ink-2);padding-left:18px;border-left:2px solid var(--rule)}
.chk li{list-style:none;font-size:12.5px;padding:6px 0 6px 25px;position:relative}
.chk li:before{content:"□";position:absolute;left:4px;font-family:var(--mono);font-size:14px;color:var(--blue)}
.gapi{display:flex;gap:10px;padding:8px 0;font-size:12.5px}
.gapi .lv{font-family:var(--mono);font-size:9.5px;padding:2px 6px;height:fit-content;flex:0 0 auto}
.lv.hi{background:var(--signal);color:#fff}.lv.md{background:#FCE9DD;color:#A83E05}
.goalbox{display:grid;grid-template-columns:1fr 1fr;gap:11px}
.goalbox div{padding:11px 13px;background:#F6F5F1;border-left:3px solid var(--ink)}
.goalbox div.ideal{border-left-color:var(--blue);background:#F2F6FC}
.goalbox .gl{font-family:var(--mono);font-size:9.5px;color:#7C8189;margin-bottom:3px}
.goalbox .gv{font-size:12.5px;font-weight:600}

/* Diff */
.diffrow{padding:11px 0;border-bottom:1px solid var(--rule)}.diffrow:last-child{border-bottom:none}
.diffrow .fld{font-family:var(--mono);font-size:10px;color:#7C8189;margin-bottom:5px}
.old{background:#FBE3E3;color:#8A2020;text-decoration:line-through;padding:1px 5px}
.new{background:#DFF0E5;color:#1D5738;padding:1px 5px;font-weight:600}
.bnew{font-family:var(--mono);font-size:9.5px;background:var(--moss);color:#fff;padding:2px 6px;margin-right:7px}
.bupd{font-family:var(--mono);font-size:9.5px;background:var(--blue);color:#fff;padding:2px 6px;margin-right:7px}
.src{font-family:var(--mono);font-size:10px;color:#7C8189;margin-top:5px}
.diffrow.gone{opacity:.35}
.diffrow.gone .new,.diffrow.gone .old{filter:grayscale(1)}

/* 拜访记录 */
.rec{background:#fff;border:1px solid var(--ink);font-size:13.5px;line-height:2}
.rec-hd{background:var(--ink);color:#fff;padding:11px 16px;display:flex;justify-content:space-between;align-items:center;gap:10px}
.rec-hd .rt{font-size:13px;font-weight:700}
.rec-hd .rn{font-family:var(--mono);font-size:9.5px;color:#8B9099}
.rec-bd{padding:16px 18px;white-space:pre-wrap;word-break:break-word}
.rec-bd .lb{color:var(--blue);font-weight:700}
.rec-bd .hl{background:#FFF3C4;padding:0 3px}
.stepbar{display:flex;gap:0;margin-bottom:16px;border:1px solid var(--rule);background:#fff;overflow:hidden}
.stepbar div{flex:1;padding:9px 10px;font-size:12px;text-align:center;color:#7C8189;border-right:1px solid var(--rule);position:relative}
.stepbar div:last-child{border-right:none}
.stepbar div.on{background:var(--ink);color:#fff;font-weight:700}
.stepbar div.ok{background:#F1F8F3;color:var(--moss)}
.stepbar .sn{font-family:var(--mono);font-size:10px;margin-right:5px}

/* 热力 */
.heatrow{display:flex;align-items:center;gap:11px;padding:7px 0;border-bottom:1px dotted var(--rule)}
.heatrow .hl{flex:0 0 190px;font-size:12.5px}
.heatbar{flex:1;height:19px;background:#EEEDE8;position:relative;min-width:60px}
.heatbar i{position:absolute;left:0;top:0;bottom:0;background:var(--signal);width:0;transition:width .8s cubic-bezier(.2,.8,.3,1)}
.heatbar i.lo{background:#F2B48C}
.heatrow .hv{flex:0 0 44px;text-align:right;font-family:var(--mono);font-size:12px;font-weight:700}
.quote{padding:11px 13px;background:#F6F5F1;border-left:3px solid var(--rule);font-size:12.5px;margin-bottom:8px;display:flex;gap:11px;align-items:flex-start}
.quote.picked{border-left-color:var(--moss);background:#F1F8F3}
.quote .qw{font-family:var(--mono);font-size:10px;color:#7C8189;margin-bottom:3px}

/* 广场 */
.tabs{display:flex;border-bottom:2px solid var(--ink);margin-bottom:15px;overflow-x:auto}
.tab{padding:9px 17px;font-size:13px;color:var(--ink-2);white-space:nowrap}
.tab.on{background:var(--ink);color:#fff;font-weight:700}
.pcard{background:var(--panel);border:1px solid var(--rule);padding:16px 18px}
.pcard .pt{font-size:14px;font-weight:700;line-height:1.4;margin-bottom:7px}
.pcard .pb{font-size:12.5px;color:var(--ink-2);margin:8px 0}
.pcard .pf{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-top:11px;padding-top:9px;border-top:1px dotted var(--rule);font-family:var(--mono);font-size:10.5px;color:#7C8189}
.pcard .pf button{font-family:var(--mono);font-size:10.5px;color:#7C8189}
.pcard .pf button.liked{color:var(--signal);font-weight:700}
.skl{background:var(--panel);border:1px solid var(--rule);padding:16px 18px}
.skl .sn{font-size:14px;font-weight:700}
.skl .sr{font-size:11.5px;color:var(--ink-2);padding:4px 0 4px 15px;position:relative;line-height:1.6}
.skl .sr:before{content:"▸";position:absolute;left:2px;color:var(--signal)}
.mask-hit{background:#FBE3E3;color:#8A2020;padding:0 3px;font-weight:600}
.audit{font-family:var(--mono);font-size:11.5px;padding:7px 0;border-bottom:1px dotted var(--rule);display:flex;gap:12px;flex-wrap:wrap}
.audit .tm{color:#7C8189;flex:0 0 128px}
.audit .ac{flex:0 0 80px}

/* 弹层 */
.modal{position:fixed;inset:0;background:rgba(20,23,28,.55);z-index:800;display:none;align-items:center;justify-content:center;padding:20px}
.modal.on{display:flex}
.modal-in{background:#fff;max-width:440px;width:100%;max-height:86vh;overflow-y:auto;border:1px solid var(--ink)}
.modal-hd{background:var(--ink);color:#fff;padding:13px 18px;display:flex;justify-content:space-between;align-items:center}
.modal-hd h3{font-size:14.5px;font-weight:700}
.modal-hd button{color:#B9BDC4;font-size:18px;line-height:1}
.modal-bd{padding:18px}

/* ================= 对话入口 ================= */
/* 这一串 min-width:0 不是装饰：flex item 的默认 min-width 是 auto，
   一层没写整条链就撑不回去，消息会溢出到视口外面（页面出现横向滚动）。 */
body.chat-mode main{display:flex;flex-direction:column;height:100vh;min-width:0;overflow:hidden}
body.chat-mode .wrap{padding:0;max-width:none;flex:1;min-height:0;min-width:0;display:flex}
body.chat-mode .page{flex:1;min-width:0;display:flex}

.ai-wrap{flex:1;min-width:0;display:flex;flex-direction:column;min-height:0;position:relative}
.ai-stream{flex:1;min-width:0;overflow-y:auto;overflow-x:hidden;padding:24px 26px 8px;
  display:flex;flex-direction:column;align-items:flex-start;gap:16px}
.ai-msg{max-width:min(760px,100%)}
.ai-msg.user{align-self:flex-end;max-width:min(600px,88%)}
.ai-bub{padding:12px 15px;font-size:14px;line-height:1.75;background:var(--panel);border:1px solid var(--rule);
  overflow-wrap:anywhere;word-break:break-word}
.ai-msg.ai>.ai-bub{border-left:3px solid var(--blue)}
.ai-msg.user .ai-bub{background:var(--ink);color:#fff;border-color:var(--ink)}
.ai-msg.sys .ai-bub{background:#F1F8F3;border-left:3px solid var(--moss);font-size:12.5px;color:#1D5738;padding:9px 13px}
.ai-msg.sys .ai-bub.bad{background:#FDF3ED;border-left-color:var(--signal);color:#8A3E05}
.ai-bub.think{color:#7C8189;font-size:13px}
/* 流式进行中：末尾一个跳动的光标，让人知道还在写 */
.ai-bub.live::after,.bub.live::after{content:"▍";margin-left:1px;color:var(--signal);animation:cursor .9s steps(2) infinite}
@keyframes cursor{0%,49%{opacity:1}50%,100%{opacity:0}}
.ai-att{margin-top:7px;padding-top:6px;border-top:1px solid rgba(255,255,255,.22);font-family:var(--mono);font-size:10.5px;opacity:.8}

.ai-chips{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
.ai-sug{border:1px solid var(--rule);background:var(--panel);padding:8px 13px;font-size:12.5px;text-align:left}
.ai-sug:hover{border-color:var(--ink);background:#F8F7F4}

/* 结果卡片 */
.ai-card{margin-top:11px;background:var(--panel);border:1px solid var(--ink);padding:14px 16px}
.ai-cardhd{display:flex;justify-content:space-between;align-items:baseline;gap:10px;flex-wrap:wrap;
  margin:-14px -16px 12px;padding:10px 16px;background:var(--ink);color:#fff}
.ai-cardhd b{font-size:13px}
.ai-cardhd span{font-family:var(--mono);font-size:9.5px;color:#8B9099}
.ai-tblwrap{max-height:340px;overflow:auto;border:1px solid var(--rule)}
.ai-tbl{font-size:12px}
.ai-tbl th{position:sticky;top:0;background:#FAFAF7;z-index:1}
.ai-tbl tr.dup{opacity:.5}
.ai-tbl input[type=checkbox]{width:15px;height:15px;accent-color:var(--signal)}
.ai-more{font-size:11.5px;color:#7C8189;margin-top:7px}
.ai-sub{font-size:12px;color:var(--ink-2);margin:9px 0;padding:8px 11px;background:#F6F5F1;border-left:3px solid var(--rule)}
.ai-foot{margin-top:10px;padding-top:8px;border-top:1px dotted var(--rule);font-family:var(--mono);font-size:10px;color:#7C8189;line-height:1.7}
.ai-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:12px}
.ai-stats div{background:#F6F5F1;padding:9px 11px}
.ai-stats em{display:block;font-family:var(--mono);font-size:20px;font-weight:700;font-style:normal}
.ai-stats span{font-size:11px;color:var(--ink-2)}
.ai-doc{padding:9px 0;border-bottom:1px dotted var(--rule);display:grid;grid-template-columns:1fr 118px;gap:8px 10px;align-items:start}
.ai-doc:last-of-type{border-bottom:none}
.ai-doct{font-size:13px;font-weight:600;line-height:1.5}
.ai-st{padding:5px 7px;border:1px solid var(--rule);background:#FCFCFA;font-size:12px;outline:none}
.ai-docx{grid-column:1/-1;font-size:11.5px;color:#7C8189;line-height:1.6}
.ai-docx em{font-family:var(--mono);font-style:normal}
/* @ 提及客户/关键人。口述拜访最烦的是打全名，@ 一下从库里选 */
.ai-mention{position:absolute;bottom:100%;left:26px;right:26px;max-width:420px;z-index:40;
  background:var(--panel);border:1px solid var(--ink);box-shadow:0 -4px 16px rgba(0,0,0,.08);
  max-height:260px;overflow:auto;display:none;margin-bottom:6px}
.ai-mention.on{display:block}
.mt-row{display:grid;grid-template-columns:44px 1fr;gap:8px;align-items:baseline;width:100%;
  padding:8px 11px;text-align:left;border-bottom:1px dotted var(--rule);background:none}
.mt-row:last-child{border-bottom:none}
.mt-row:hover,.mt-row.on{background:#EDF3FA}
.mt-k{font-family:var(--mono);font-size:9.5px;color:#fff;background:var(--blue);padding:2px 4px;text-align:center}
.mt-row b{font-size:13px}
.mt-row i{grid-column:2;font-style:normal;font-size:11px;color:#7C8189;line-height:1.6}
.mt-empty{padding:11px 13px;font-size:12px;color:#7C8189;line-height:1.7}
.ai-dock{position:relative}

/* 参考应答里的要害词。一条好应答和差应答的区别常常就压在这几个词上 */
.opt em.kw{font-style:normal;font-weight:700;color:var(--red)}

/* 交接卡：别忘了先传原件 */
.ai-remind{font-size:11.5px;line-height:1.75;padding:7px 10px;margin-bottom:7px;
  background:#FAF6EC;border-left:3px solid var(--signal)}

/* 预演页右侧的流程说明。作战卡不再单列菜单，得在这儿讲清它从哪来。
 *
 * ⚠️ li 的正文**必须**用一个元素包起来：`<li><div><b>标题</b>正文</div></li>`。
 * 直接写 `<li><b>标题</b>正文</li>` 会出一个很难看懂的 bug：
 * CSS Grid 会把直接躺在 grid 容器里的裸文本包成**匿名 grid item**，
 * 于是这一条 li 有三个 item（::before / <b> / 匿名文本），
 * 文本被挤到第 2 行第 1 列——而第 1 列只有 20px 宽，正文就变成一个字一行。
 * 表现出来像是"右栏被压扁了"，很容易误判成外层栅格或 select 撑爆了宽度。
 */
.flowsteps{counter-reset:fs;list-style:none;padding:0;margin:0 0 10px}
.flowsteps li{counter-increment:fs;display:grid;grid-template-columns:20px 1fr;gap:9px;
  font-size:12px;line-height:1.75;padding:6px 0;border-top:1px dotted var(--rule)}
.flowsteps li > *{min-width:0}
.flowsteps li:first-child{border-top:none}
.flowsteps li::before{content:counter(fs);font-family:var(--mono);font-size:10px;font-weight:600;
  color:#fff;background:var(--ink);width:17px;height:17px;display:flex;align-items:center;justify-content:center;margin-top:3px}
.flowsteps b{display:block;font-size:12.5px}
.flownote{font-size:11.5px;line-height:1.7;color:#7C8189;padding:7px 10px;background:#F6F5F1;margin-bottom:10px}

/* 教练规则库。通用规则和 To G 专项是两种东西，视觉上要分开 */
.ruleset{display:flex;flex-direction:column;gap:12px}
.rulegrp{border-top:1px solid var(--rule);padding-top:10px}
.rulegrp:first-child{border-top:none;padding-top:0}
.rulesc{font-size:13px;font-weight:700;margin-bottom:6px;display:flex;align-items:center;gap:7px;flex-wrap:wrap}
.rulesc i{font-family:var(--mono);font-size:10px;font-style:normal;color:#8A8F96;font-weight:400}
.rulerow{padding:7px 0 7px 11px;border-left:2px solid var(--rule);margin-bottom:6px}
.rulerow>div{display:grid;grid-template-columns:38px 1fr;gap:9px;font-size:12px;line-height:1.75;margin-bottom:2px}
.rulerow b{font-family:var(--mono);font-size:9.5px;letter-spacing:.06em;color:#8A8F96;font-weight:500;padding-top:3px}
.rulerow .ra{color:var(--moss)}
.rulerow .rx{color:var(--red)}
.notice.warn{background:#FAF6EC;border-left:3px solid var(--signal)}

/* 反幻觉告警。模型编出来的精确细节听着完全可信，必须显式标出来 */
.factwarn{margin:6px 0 10px 0;padding:7px 11px;background:#FBEEE4;border-left:3px solid var(--red);
  font-size:11.5px;line-height:1.7;color:var(--ink-2)}

/* 专项行动（第4轮·议题04）。
   ⚠️ 这一页刻意不做人员排名，见 lib/campaign.js 顶部注释与硬约束① */
.campbadge{display:flex;flex-wrap:wrap;gap:4px;margin:5px 0 3px}
.cb{display:inline-flex;align-items:center;gap:4px;font-family:var(--mono);font-size:9.5px;letter-spacing:.04em;
  padding:2px 6px;background:#EDF3FA;color:var(--blue);border:1px solid #C9DCEF}
.cb.hi{background:#FBEEE4;color:var(--signal);border-color:#F0CDB0}
.camptabs{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:12px}
.camptab{border:1px solid var(--rule);background:var(--panel);padding:7px 13px;font-size:12.5px;text-align:left}
.camptab:hover{border-color:var(--ink)}
.camptab.on{border-color:var(--ink);background:var(--ink);color:#fff}
.camptab i{display:block;font-family:var(--mono);font-size:9.5px;font-style:normal;opacity:.7;margin-top:1px}
.camphd{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;flex-wrap:wrap;margin-bottom:12px}
.campclock{display:flex;gap:18px}
.campclock em{display:block;font-family:var(--mono);font-size:22px;font-weight:700;font-style:normal;line-height:1.1;color:var(--signal)}
.campclock span{font-size:10.5px;color:#7C8189}
.ai-stats div.warn em{color:var(--red)}
.campstages{display:flex;flex-wrap:wrap;gap:5px;margin-top:4px}
.cwarn{font-size:11px;line-height:1.6;color:var(--ink-2)}
.cwarn.high{color:var(--red)}
.simcamp{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:8px 12px;margin-bottom:10px;
  background:#FBEEE4;border-left:3px solid var(--signal);font-size:12px}
.simcamp b{font-weight:600}
.simcamp i{font-family:var(--mono);font-size:10.5px;font-style:normal;color:var(--signal);margin-left:auto}
.cardcamp{margin-top:5px;font-family:var(--mono);font-size:10.5px;letter-spacing:.04em;color:var(--signal)}
.tag.ok{background:#E9F1EC;color:var(--moss)}

/* 关键人与打法（第4轮·议题02）。
   打法要摆给客户经理自己看，不能只喂给模型——他才是要上场的人 */
.playbox:not(:empty){margin:-4px 0 10px;border:1px solid var(--rule);background:#FAFAF7;padding:9px 11px}
.playhd{font-family:var(--mono);font-size:10.5px;letter-spacing:.06em;color:var(--blue);
  padding-bottom:6px;margin-bottom:6px;border-bottom:1px dotted var(--rule)}
.playrow{display:grid;grid-template-columns:58px 1fr;gap:9px;font-size:12px;line-height:1.7;padding:2px 0}
.playrow span{font-family:var(--mono);font-size:10px;color:#8A8F96;padding-top:2px}
.playempty{margin:-4px 0 10px;padding:9px 11px;background:#FBEEE4;border-left:3px solid var(--signal);font-size:12px;line-height:1.7}
.playempty a{color:var(--blue)}

.ctgaps{display:flex;flex-direction:column;gap:6px;margin-bottom:12px}
.ctgap{font-size:12px;line-height:1.7;padding:8px 11px;background:#F6F5F1;border-left:3px solid var(--rule)}
.ctgap.high{background:#FBEEE4;border-left-color:var(--red)}
.ctgap.mid{background:#FAF6EC;border-left-color:var(--signal)}
.ctgap b{display:block;font-size:12.5px;margin-bottom:2px}
.ctlist{display:flex;flex-direction:column;gap:9px}
.ctcard{border:1px solid var(--rule);background:var(--panel);padding:10px 12px}
.cthd{display:flex;align-items:baseline;gap:9px;flex-wrap:wrap;margin-bottom:7px}
.cthd b{font-size:13.5px}
.cthd span{font-size:11.5px;color:#7C8189}
.ctorder{margin-left:auto;font-family:var(--mono);font-size:10px;font-style:normal;color:var(--blue)}
.cthd .mini{margin-left:4px}
.cttags{display:flex;flex-wrap:wrap;gap:5px;margin-bottom:6px}
.ctconcern{font-size:12px;line-height:1.7;color:var(--ink-2)}
.ctconcern.miss{color:#8A8F96;font-style:italic}
.ctwhy{margin-top:5px;font-size:11.5px;line-height:1.7;color:#7C8189;padding-left:9px;border-left:2px solid var(--rule)}
.ctplay{margin-top:8px;padding-top:7px;border-top:1px dotted var(--rule);display:flex;flex-direction:column;gap:3px}
.ctplay div{display:grid;grid-template-columns:48px 1fr;gap:8px;font-size:11.5px;line-height:1.7}
.ctplay span{font-family:var(--mono);font-size:10px;color:#8A8F96}
.mini.red{color:var(--red)}

/* 大文件交接 TeleAgent。这张卡会停留很久——用户要切窗口去跑 TeleAgent 再回来，
   所以每一步的状态都要留得住、看得见 */
.ai-hfiles{display:flex;flex-direction:column;gap:5px;margin-bottom:12px}
.ai-hfile{display:flex;justify-content:space-between;align-items:baseline;gap:12px;
  font-size:12.5px;padding:7px 10px;background:#F6F5F1;border-left:3px solid var(--signal)}
.ai-hfile em{font-family:var(--mono);font-size:10.5px;color:#7C8189;font-style:normal;white-space:nowrap}
.ai-step{display:flex;align-items:center;gap:8px;margin:14px 0 8px;font-size:12.5px;font-weight:600}
.ai-stepn{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;
  background:var(--ink);color:#fff;font-family:var(--mono);font-size:10.5px;flex:0 0 auto}
.ai-types{display:grid;grid-template-columns:repeat(auto-fill,minmax(178px,1fr));gap:7px}
.ai-type{border:1px solid var(--rule);background:#FCFCFA;padding:9px 11px;text-align:left;display:block}
.ai-type:hover{border-color:var(--ink);background:#F5F4F0}
.ai-type.on{border-color:var(--blue);background:#EDF3FA;box-shadow:inset 0 0 0 1px var(--blue)}
.ai-type b{display:block;font-size:12.5px;line-height:1.5}
.ai-type i{display:block;margin-top:3px;font-size:11px;font-style:normal;color:#7C8189;line-height:1.6}
.ai-hloading{font-size:12px;color:#7C8189;padding:12px 0}
/* 交接卡：客户经理自己补的背景说明 */
.ai-extrabox{margin:8px 0 4px;padding:10px 12px;border:1px dashed var(--rule);background:#FBFAF7}
.ai-extra-on{font-size:11.5px;line-height:1.6;color:#1D5738;background:#F1F8F3;border-left:3px solid var(--moss);padding:7px 10px;margin:6px 0}
.ai-prompt,.ai-paste{width:100%;padding:10px 12px;border:1px solid var(--rule);background:#FCFCFA;
  font-family:var(--mono);font-size:11.5px;line-height:1.75;outline:none;resize:vertical}
.ai-prompt{height:160px;background:#F6F5F1;color:var(--ink-2)}
.ai-paste{height:110px}
.ai-paste:focus{border-color:var(--blue)}
.btnrow.tight{margin-top:7px;align-items:center;gap:10px}
.ai-tip{font-size:11.5px;color:#7C8189}
.ai-chip.big{background:#FBEEE4;box-shadow:inset 0 0 0 1px var(--signal)}
.ai-chip.done{background:#E9F1EC;box-shadow:inset 0 0 0 1px var(--moss)}
.ai-big{font-family:var(--mono);font-size:10px;font-style:normal;color:var(--signal)}

/* 文档摘要 */
.ai-bsum{font-size:13px;line-height:1.85;padding:10px 12px;background:#F6F5F1;border-left:3px solid var(--blue)}
.ai-bsec{margin-top:12px}
.ai-bsec h5{font-family:var(--mono);font-size:10px;letter-spacing:.1em;color:#7C8189;margin-bottom:5px;font-weight:500}
.ai-bsec ul{margin:0;padding-left:17px}
.ai-bsec li{font-size:12.5px;line-height:1.75;margin-bottom:3px}
.ai-bsec li::marker{color:var(--rule)}

.ai-ref{font-size:12.5px;padding:6px 0;border-bottom:1px dotted var(--rule)}
.ai-ref:last-child{border-bottom:none}
.ai-edit{width:100%;padding:11px 12px;border:1px solid var(--rule);background:#FCFCFA;font-size:13px;
  line-height:1.9;outline:none;resize:vertical;font-family:inherit}
.ai-edit:focus{border-color:var(--blue)}
.ai-row{display:flex;align-items:center;gap:10px;margin-top:10px;flex-wrap:wrap}
.ai-row label{font-family:var(--mono);font-size:10px;letter-spacing:.1em;color:#7C8189;flex:0 0 74px}
.ai-row select,.ai-row input{flex:1 1 220px;min-width:0;padding:9px 10px;border:1px solid var(--rule);background:#FCFCFA;outline:none;font-size:13px}
.ai-row select:focus,.ai-row input:focus{border-color:var(--blue)}

/* 输入区 */
.ai-dock{border-top:1px solid var(--rule);background:var(--panel);padding:12px 26px 14px}
/* 快捷动作：把系统真会干的事摆到明面上，别让人对着空框猜 */
.ai-quick{display:flex;flex-wrap:wrap;gap:7px;margin-bottom:9px}
.ai-q{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--rule);background:#FCFCFA;
  padding:7px 12px;font-size:12.5px;white-space:nowrap}
.ai-q:hover{border-color:var(--ink);background:#F5F4F0}
.ai-q .qi{font-family:var(--mono);color:var(--signal);font-size:12px}
.ai-accept{margin-top:8px;font-size:11px;line-height:1.75;color:#8A8F96}
.ai-accept b{color:var(--ink-2);font-weight:600}
.ai-files{display:flex;flex-wrap:wrap;gap:7px}
.ai-files:not(:empty){margin-bottom:9px}
.ai-chip{display:inline-flex;align-items:center;gap:7px;background:#EEEDE8;padding:5px 8px 5px 10px;font-size:12px;max-width:100%}
.ai-chip em{font-family:var(--mono);font-size:10px;color:#7C8189;font-style:normal}
.ai-chip button{color:#7C8189;font-size:13px;line-height:1}
.ai-chip button:hover{color:var(--red)}
.ai-box{border:1px solid var(--rule);background:#FCFCFA}
.ai-box:focus-within{border-color:var(--blue)}
.ai-box textarea{display:block;width:100%;border:none;background:none;padding:13px 14px 4px;font-size:15px;
  line-height:1.7;outline:none;resize:none;font-family:inherit;min-height:46px}
.ai-tools{display:flex;align-items:center;gap:8px;padding:6px 10px 9px}
.ai-tool{border:1px solid var(--rule);background:#fff;padding:6px 11px;font-size:12.5px;white-space:nowrap}
.ai-tool:hover{border-color:var(--ink)}
.ai-tool.rec{background:var(--signal);border-color:var(--signal);color:#fff;animation:pulse 1.2s infinite}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.62}}
.ai-tip{flex:1;font-family:var(--mono);font-size:10px;color:#9A9EA5;text-align:right;white-space:nowrap;overflow:hidden}
.ai-send{padding:8px 20px}

/* 拖放遮罩 */
.ai-drop{position:absolute;inset:0;z-index:30;display:none;place-items:center;
  background:rgba(20,23,28,.72);pointer-events:none}
.ai-drop.on{display:grid}
.ai-drop div{border:2px dashed rgba(255,255,255,.6);color:#fff;padding:34px 52px;font-size:16px;font-weight:700}

/* ================= 移动端 ================= */
@media(max-width:820px){
  #login{grid-template-columns:1fr;min-height:100dvh}
  .lo-left{padding:32px 22px 26px}
  .lo-left .b1{width:180px;height:180px;right:-50px;top:-20px}
  .lo-left .b2{width:90px;height:90px;right:60px;top:110px}
  .lo-in h1{font-size:26px}
  .lo-in p{font-size:12.5px;margin-top:12px}
  .lo-in .ft{display:none}
  .lo-right{padding:26px 20px 40px}
  .lo-form{max-width:100%}

  #app.on{display:block}
  .rail{display:none}
  main{width:100%}
  .topbar{padding:11px 16px;gap:8px}
  .topbar h2{font-size:16px}
  .topbar .sub{display:none}
  .wrap{padding:16px 14px 96px}

  /* 底部导航 */
  #mnav{display:flex;position:fixed;left:0;right:0;bottom:0;z-index:500;background:var(--ink);
        padding-bottom:env(safe-area-inset-bottom);box-shadow:0 -2px 14px rgba(0,0,0,.18)}
  #mnav button{flex:1;padding:9px 2px 8px;color:#8B9099;font-size:10.5px;display:flex;flex-direction:column;align-items:center;gap:3px;min-width:0}
  #mnav button .mi{font-size:16px;line-height:1}
  #mnav button.on{color:#fff}
  #mnav button.on .mi{color:var(--signal)}
  #mnav button span:last-child{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}

  /* 更多面板 */
  #sheet{display:block;position:fixed;inset:0;z-index:600;pointer-events:none}
  #sheet .msk{position:absolute;inset:0;background:rgba(20,23,28,.5);opacity:0;transition:.22s}
  #sheet .pn{position:absolute;left:0;right:0;bottom:0;background:#fff;transform:translateY(100%);transition:.26s cubic-bezier(.2,.8,.3,1);
             padding-bottom:calc(14px + env(safe-area-inset-bottom))}
  #sheet.on{pointer-events:auto}
  #sheet.on .msk{opacity:1}
  #sheet.on .pn{transform:translateY(0)}
  #sheet .sh{padding:14px 18px 10px;border-bottom:1px solid var(--rule);display:flex;justify-content:space-between;align-items:center}
  #sheet .sh h3{font-size:14px;font-weight:700}
  #sheet .si{display:flex;align-items:center;gap:11px;width:100%;padding:13px 18px;border-bottom:1px solid var(--rule);text-align:left;font-size:14px}
  #sheet .si .n{font-family:var(--mono);font-size:10px;color:#9A9EA5}
  #sheet .si.on{color:var(--signal);font-weight:700}
  #sheet .si.lg{color:var(--red)}

  .filterbar input{flex:1 1 100%}
  .filterbar select{flex:1 1 calc(50% - 4px)}
  .filterbar .btn{flex:1 1 calc(50% - 4px);justify-content:center}

  .g2,.g3{grid-template-columns:1fr;gap:12px}
  .g4{grid-template-columns:1fr 1fr;gap:10px}
  .card{padding:15px 15px}
  .stat-n{font-size:23px}
  .simgrid{grid-template-columns:1fr;gap:12px}
  .chat{height:64vh}
  .msg{max-width:92%}
  .goalbox{grid-template-columns:1fr}
  .dossier-hd{flex-direction:column;align-items:flex-start;gap:7px}
  .dossier-hd .no{text-align:left}
  .dossier-bd{padding:15px}
  .kv{flex-direction:column;gap:2px}
  .kv .k{flex:none}
  .cust{flex-wrap:wrap;gap:12px}
  .cust-pct{flex:1 0 auto;text-align:left;display:flex;align-items:baseline;gap:7px}
  .heatrow{flex-wrap:wrap;gap:6px}
  .heatrow .hl{flex:1 0 100%}
  .quote{flex-direction:column;gap:9px}
  .quote .mini{align-self:flex-start}
  .rec-hd{flex-direction:column;align-items:flex-start;gap:5px}
  .stepbar{flex-direction:column}
  .stepbar div{border-right:none;border-bottom:1px solid var(--rule);text-align:left}
  .btnrow .btn{flex:1 0 auto;justify-content:center}
  #toast{bottom:calc(72px + env(safe-area-inset-bottom))}

  /* 对话入口 */
  body.chat-mode #app.on{display:flex}
  body.chat-mode main{height:100dvh}
  .ai-stream{padding:14px 14px 4px;gap:13px}
  .ai-bub{font-size:13.5px;padding:11px 13px}
  .ai-dock{padding:10px 14px calc(10px + 60px + env(safe-area-inset-bottom))}
  .ai-quick{gap:6px;margin-bottom:8px;overflow-x:auto;flex-wrap:nowrap;padding-bottom:2px;-webkit-overflow-scrolling:touch}
  .ai-q{flex:0 0 auto;padding:6px 10px;font-size:12px}
  .ai-accept{display:none}
  .booting{padding:18px 4px}
  .persona-card{padding:11px 12px}
  .pc-row{flex-direction:column;gap:2px}
  .pc-row span{flex:none}
  .ai-box textarea{font-size:16px;padding:11px 12px 3px}   /* 16px 以下 iOS 会自动放大页面 */
  .ai-tip{display:none}
  .ai-send{flex:0 0 auto}
  .ai-card{padding:12px 13px}
  .ai-cardhd{margin:-12px -13px 11px;padding:9px 13px}
  .ai-stats{grid-template-columns:1fr 1fr}
  .ai-doc{grid-template-columns:1fr}
  .ai-tblwrap{max-height:none;border:none}
  .ai-tbl tr.dup{opacity:.55}
  .ai-row label{flex:1 0 100%}

  /* 表格 → 卡片 */
  table.tb,table.tb tbody,table.tb tr,table.tb td{display:block;width:100%}
  table.tb thead{display:none}
  table.tb tr{border:1px solid var(--rule);background:#fff;padding:11px 13px;margin-bottom:9px}
  table.tb td{border:none;padding:4px 0;display:flex;gap:10px;font-size:12.5px}
  table.tb td:before{content:attr(data-l);font-family:var(--mono);font-size:10px;color:#7C8189;flex:0 0 76px;padding-top:2px}
  table.tb td[colspan]{justify-content:center}
  table.tb td[colspan]:before{display:none}
}
@media(min-width:821px){ #mnav,#sheet{display:none!important} }
@media print{
  .rail,.topbar,#mnav,#sheet,.btnrow,#toast{display:none!important}
  .wrap{padding:0;max-width:100%}
  body{background:#fff}
}
