/* ==========================================================================
   agent-ui.css —— 智能体面板 / 智能表单 / 写确认 / 消息 / 语音
   颜色全部走 style.css 的变量，深色模式自动跟着变。
   ========================================================================== */

/* ---------------- 顶部：当前是谁在答 ---------------- */
.agent-bar{display:flex;align-items:center;gap:8px;min-width:0;flex:1;justify-content:center}
.ab-who{display:inline-flex;align-items:center;gap:6px;height:26px;padding:0 9px 0 4px;border-radius:13px;
  background:var(--p-soft);color:var(--p-strong);font-size:12px;font-weight:600;flex:0 0 auto}
.ab-ico{width:18px;height:18px;border-radius:6px;background:var(--p);color:#fff;display:grid;place-items:center;
  font-size:10px;font-weight:600;font-style:normal}
.ab-why{font-size:11.5px;color:var(--t3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:340px}
/* .ab-more（顶部「换一个」按钮）2026-10-28 随按钮一起删掉：右侧面板本来就能直接切换 */
.agent-bar+ .iconbtn{flex:0 0 auto}

/* 消息铃铛的小红点 */
.iconbtn{position:relative}
.bell-dot{position:absolute;top:-2px;right:-3px;min-width:15px;height:15px;padding:0 3px;border-radius:8px;
  background:var(--err);color:#fff;font-size:9.5px;line-height:15px;text-align:center;font-style:normal;font-weight:600}
.iconbtn.ear.hands{color:var(--ok);background:var(--ok-soft)}
.iconbtn.ear.speak{color:var(--p);background:var(--p-soft)}

/* ---------------- 右栏 tab：三方 + 收起 ---------------- */
.ptabs .px{width:26px;flex:0 0 auto;display:grid;place-items:center;color:var(--t3);border-radius:6px;margin-bottom:3px}
.ptabs .px:hover{background:var(--bd2);color:var(--t1)}
.pdot{position:absolute;top:6px;right:8px;width:5px;height:5px;border-radius:50%;background:var(--p);font-style:normal}
.ptab{position:relative}
.p-drag{position:absolute;left:-3px;top:0;bottom:0;width:6px;cursor:col-resize;z-index:5}
.p-drag:hover{background:linear-gradient(90deg,var(--p-bd),transparent)}
body.dragging{cursor:col-resize;user-select:none}

/* ---------------- 智能体面板 ---------------- */
.ag-route{display:flex;align-items:flex-start;gap:6px;font-size:11.5px;color:var(--t2);
  background:var(--p-soft2);border:1px solid var(--p-bd);border-radius:9px;padding:7px 9px;margin-bottom:10px;line-height:1.5}
.ag-route b{color:var(--p-strong)}
.ag-route button{margin-left:auto;color:var(--p);font-size:11.5px;white-space:nowrap;flex:0 0 auto}

.ag-card{background:var(--card);border:1px solid var(--bd);border-radius:11px;padding:11px;margin-bottom:12px;box-shadow:var(--sh)}
.ag-hd{display:flex;gap:9px;align-items:center}
.ag-ico{width:32px;height:32px;border-radius:10px;background:linear-gradient(135deg,var(--p),var(--p-strong));color:#fff;
  display:grid;place-items:center;font-size:13px;font-weight:600;font-style:normal;flex:0 0 auto}
.ag-ico.sm{width:26px;height:26px;border-radius:8px;font-size:11px}
.ag-nm{font-size:13.5px;font-weight:600;display:flex;align-items:center;gap:6px}
.ag-tag{font-size:9.5px;font-weight:500;color:var(--p);background:var(--p-soft);border-radius:5px;padding:1px 5px}
.ag-sub{font-size:11px;color:var(--t3);margin-top:1px}
.ag-intro{font-size:12px;color:var(--t2);line-height:1.65;margin-top:8px}
.ag-scope{margin-top:8px;font-size:10.5px;color:var(--t3);line-height:1.9}
.ag-scope span{display:inline-block;background:var(--bd2);color:var(--t2);border-radius:5px;padding:1px 6px;margin-right:4px}

.ag-sec{font-size:11px;color:var(--t3);margin:12px 0 6px}

/* 拿不到智能体时的空态：说清楚原因和下一步，不留一片空白 */
.ag-empty{padding:14px 12px;border:1px dashed var(--bd);border-radius:10px;
  background:var(--p-soft2);display:flex;flex-direction:column;gap:8px;align-items:flex-start}
.ag-empty b{font-size:12.5px;color:var(--t1);font-weight:600}
.ag-empty span{font-size:11.5px;color:var(--t2);line-height:1.7;word-break:break-word}
.ag-empty button{font-size:11.5px;padding:4px 12px;border-radius:7px;border:1px solid var(--p-bd);
  background:var(--p-soft);color:var(--p);cursor:pointer}
.ag-empty button:hover{background:var(--p);color:#fff;border-color:var(--p)}

/* 名单是上一次的、这次没拉到（2026-10-27）。
   场景：away 会话过期、网络抖一下。这时右栏**保留**旧名单而不是擦成空白，
   但必须明说一句"这份是上次的"，否则用户会以为后台刚改的授权没生效。
   低调一点 —— 这是解释，不是告警。 */
.ag-stale{
  display:flex;align-items:center;gap:8px;margin:0 0 8px;padding:7px 9px;
  border-radius:8px;background:var(--warn-soft);
  border:.5px solid color-mix(in srgb,var(--warn) 28%,transparent);
  font-size:11px;line-height:1.5;color:var(--t2);
}
.ag-stale span{flex:1;min-width:0;word-break:break-word}
.ag-stale button{
  flex:0 0 auto;font-size:11px;padding:2px 8px;border-radius:6px;cursor:pointer;
  border:1px solid var(--bd2);background:transparent;color:var(--t2);
}
.ag-stale button:hover{color:var(--p);border-color:var(--p-bd);background:var(--p-soft)}

/* 登录态过期时的过渡卡（2026-10-27）。
   以前这个场景是"右栏悄悄空掉"，什么提示都没有；现在至少先把发生什么事说清楚，
   再自动重载 / 回登录页。用 fixed 居中 + 轻遮罩，别让人以为界面卡死了。 */
.ag-expired{
  position:fixed;inset:0;z-index:9999;display:flex;align-items:center;justify-content:center;
  background:color-mix(in srgb,var(--bg) 40%,transparent);
  backdrop-filter:blur(3px);
}
.ag-expired-b{
  display:flex;flex-direction:column;gap:7px;align-items:flex-start;
  max-width:min(420px,84vw);padding:18px 20px;border-radius:14px;
  background:var(--card);border:.5px solid var(--bd2);
  box-shadow:0 18px 48px rgba(10,20,40,.18);
}
.ag-expired-b b{font-size:14px;color:var(--t1);font-weight:600}
.ag-expired-b span{font-size:12.5px;color:var(--t2);line-height:1.7}
.ag-expired-load{
  display:block;width:100%;height:3px;border-radius:2px;margin-top:5px;
  background:var(--p-soft);overflow:hidden;position:relative;
}
.ag-expired-load::after{
  content:'';position:absolute;inset:0;border-radius:2px;
  background:var(--p);animation:agExp 1s ease-in-out infinite;
}
@keyframes agExp{0%{transform:translateX(-100%)}100%{transform:translateX(100%)}}
.ag-row{display:flex;align-items:center;gap:8px;width:100%;text-align:left;padding:7px 8px;border-radius:9px;
  border:1px solid transparent;margin-bottom:4px;transition:.12s}
.ag-row:hover{background:var(--p-soft2);border-color:var(--bd)}
.ag-row.on{background:var(--p-soft);border-color:var(--p-bd)}
.ag-row.off{opacity:.55;cursor:not-allowed}
.ag-rowtx{display:flex;flex-direction:column;min-width:0;flex:1}
.ag-rowtx b{font-size:12.5px;font-weight:600;display:flex;align-items:center;gap:6px}
.ag-rowtx em{font-size:9.5px;font-style:normal;color:var(--ok);background:var(--ok-soft);border-radius:5px;padding:0 5px;font-weight:500}
.ag-rowtx em.no{color:var(--t3);background:var(--bd2)}
.ag-rowtx small{font-size:10.5px;color:var(--t3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ag-foot{font-size:10.5px;color:var(--t3);line-height:1.7;margin-top:10px;padding-top:9px;border-top:1px dashed var(--bd)}

/* ---------------- 智能表单 ---------------- */
.frm,.frmhost{padding:2px}
.frm-loading,.frm-empty,.frm-err{padding:26px 12px;text-align:center;font-size:12px;color:var(--t3);line-height:1.8}
.frm-err{color:var(--err)}
.frm-err span{color:var(--t3);font-size:11px}
.frm-hd{display:flex;flex-direction:column;gap:2px;margin-bottom:10px}
.frm-hd b{font-size:13.5px}
.frm-hd span{font-size:10.5px;color:var(--t3)}
.frm-note{font-size:11.5px;color:var(--warn);background:var(--warn-soft);border-radius:8px;padding:6px 9px;margin-bottom:9px;line-height:1.6}
/* 草稿接上了：轻一条，别做得像警告 —— 这是好事，不是问题 */
.frm-draft{display:flex;align-items:center;gap:8px;font-size:11.5px;color:var(--t2);
  background:var(--p-soft);border-left:2px solid var(--p);border-radius:8px;padding:6px 9px;margin-bottom:9px;line-height:1.6}
.frm-draft span{flex:1;min-width:0}
.frm-draft button{flex:none;font-size:11px;color:var(--p);background:transparent;border:1px solid var(--p-soft2);
  border-radius:6px;padding:2px 7px;cursor:pointer}
.frm-draft button:hover{background:var(--p-soft2)}
.frm-body{display:grid;grid-template-columns:repeat(var(--cols,2),minmax(0,1fr));gap:9px 10px}
/* 多行文本 / 系统标了整行的字段横跨所有栏（系统录入页也是这么渲染的） */
.frm-body>.fld.full{grid-column:1 / -1}
/* ---- 明细行（一对多）：加一行 / 删一行 / 序号重排 ---- */
.mrow-hd{display:flex;align-items:baseline;gap:6px;margin-bottom:7px}
.mrow-hd b{font-size:12px;color:var(--t1)}
.mrow-hd span{font-size:10.5px;color:var(--t3)}
.mrows{display:flex;flex-direction:column;gap:8px}
.mrow{border:1px solid var(--bd);border-radius:9px;background:var(--card);overflow:hidden}
.mrow.bad{border-color:var(--err);box-shadow:0 0 0 1px var(--err) inset}
.mrow-top{display:flex;align-items:center;justify-content:space-between;padding:5px 9px;
  background:var(--bg);border-bottom:1px solid var(--bd)}
.mrow-top b{font-size:11px;color:var(--t2);font-weight:600}
.mrow-del{font-size:10.5px;color:var(--err);background:transparent;border:1px solid var(--bd);
  border-radius:5px;padding:1px 7px;cursor:pointer}
.mrow-del:hover{background:var(--err-soft);border-color:var(--err)}
.mrow-body{padding:8px 9px;display:flex;flex-direction:column;gap:7px}
.mrow-empty{font-size:11.5px;color:var(--t3);background:var(--bg);border:1px dashed var(--bd);
  border-radius:9px;padding:12px 10px;text-align:center;line-height:1.7}
.mrow-add{margin-top:8px;width:100%;font-size:12px;color:var(--p);background:var(--p-soft);
  border:1px dashed var(--p-soft2);border-radius:8px;padding:7px 0;cursor:pointer}
.mrow-add:hover{background:var(--p-soft2)}
.fld{display:flex;flex-direction:column;gap:3px}
.fld label{font-size:11.5px;color:var(--t2);display:flex;align-items:center;gap:4px}
.fld label i{color:var(--err);font-style:normal}
.fld label em{font-size:9px;font-style:normal;color:var(--p);background:var(--p-soft);border-radius:4px;padding:0 4px}
.fld input,.fld textarea,.fld select{
  width:100%;border:1px solid var(--bd);border-radius:8px;background:var(--card);color:var(--t1);
  padding:6px 9px;font-size:12.5px;outline:none;transition:.12s}
.fld input:focus,.fld textarea:focus,.fld select:focus{border-color:var(--p);box-shadow:0 0 0 3px var(--p-soft)}
.fld.pre input,.fld.pre textarea,.fld.pre select{background:var(--p-soft2);border-color:var(--p-bd)}
.fld input[readonly],.fld textarea[readonly],.fld select:disabled{background:var(--bd2);color:var(--t2)}
.fld.bad input,.fld.bad textarea,.fld.bad select{border-color:var(--err);background:var(--err-soft)}
.fld-err{font-size:10.5px;color:var(--err);min-height:0}
.fld-err:empty{display:none}
.fld-file{font-size:11.5px;color:var(--t3);border:1px dashed var(--bd);border-radius:8px;padding:6px 9px}
.frm-miss:empty{display:none}
.mis{font-size:11.5px;border-radius:8px;padding:6px 9px;line-height:1.6;background:var(--err-soft);color:var(--err)}
.frm-act{display:flex;align-items:center;gap:8px;margin-top:14px;padding-top:11px;border-top:1px solid var(--bd)}
.frm-act .sp{flex:1}
.frm-alt{font-size:11.5px;color:var(--t2);border:1px solid var(--bd);border-radius:8px;padding:5px 10px}
.frm-alt:hover{background:var(--bd2)}
.frm-save{font-size:12.5px;font-weight:600;color:#fff;background:var(--p);border-radius:8px;padding:6px 16px}
.frm-save:disabled{opacity:.6;cursor:default}
.frm-ok{font-size:12px;color:var(--ok);background:var(--ok-soft);border-radius:8px;padding:6px 11px;font-weight:600}
.frm-tip{font-size:10.5px;color:var(--t3);margin-top:7px}

/* ---------------- 写操作确认条 ---------------- */
.confirm-bar{display:none;align-items:center;gap:10px;margin:0 auto 8px;max-width:820px;
  background:var(--card);border:1px solid var(--p-bd);border-left:3px solid var(--p);border-radius:10px;
  padding:9px 12px;box-shadow:var(--sh-md);animation:cbIn .18s ease-out}
.confirm-bar.on{display:flex}
.confirm-bar.danger{border-color:var(--err);border-left-color:var(--err);background:var(--err-soft)}
@keyframes cbIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
.cb-ic{width:22px;height:22px;border-radius:50%;background:var(--p-soft);color:var(--p);display:grid;place-items:center;
  font-size:12px;font-weight:700;flex:0 0 auto}
.confirm-bar.danger .cb-ic{background:rgba(196,49,75,.14);color:var(--err)}
.cb-tx{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}
.cb-tx b{font-size:12.5px}
.cb-tx span{font-size:11.5px;color:var(--t2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cb-tx small{font-size:10.5px;color:var(--t3)}
.cb-act{display:flex;gap:6px;flex:0 0 auto}
.cb-no{font-size:11.5px;color:var(--t2);border:1px solid var(--bd);border-radius:7px;padding:5px 11px}
.cb-no:hover{background:var(--bd2)}
.cb-yes{font-size:11.5px;font-weight:600;color:#fff;background:var(--p);border-radius:7px;padding:5px 13px}
.confirm-bar.danger .cb-yes{background:var(--err)}

/* ---------------- 消息抽屉 ---------------- */
.notice-drawer{position:fixed;top:56px;right:12px;width:340px;max-height:70vh;overflow-y:auto;z-index:60;
  background:var(--card);border:1px solid var(--bd);border-radius:13px;box-shadow:var(--sh-lg);
  display:none;padding:0}
.notice-drawer.on{display:block;animation:cbIn .16s ease-out}
.nd-hd{display:flex;align-items:baseline;gap:7px;padding:12px 13px 9px;border-bottom:1px solid var(--bd2)}
.nd-hd b{font-size:13px}
.nd-hd span{font-size:10.5px;color:var(--t3);flex:1}
.nd-x{font-size:16px;color:var(--t3);line-height:1;padding:0 2px}
.nd-me{margin:10px 12px;padding:9px;border:1px dashed var(--p-bd);border-radius:9px;background:var(--p-soft2)}
.nd-me p{font-size:11.5px;color:var(--t2);margin:0 0 7px}
.nd-merow{display:flex;gap:6px}
.nd-merow input{flex:1;border:1px solid var(--bd);border-radius:7px;padding:4px 8px;font-size:12px;background:var(--card);color:var(--t1)}
.nd-merow button{font-size:11.5px;color:#fff;background:var(--p);border-radius:7px;padding:4px 10px}
.nd-me small{display:block;font-size:10px;color:var(--t3);margin-top:6px;line-height:1.6}
.nd-act{display:flex;gap:6px;padding:0 12px 8px}
.nd-act button{font-size:11px;color:var(--t2);border:1px solid var(--bd);border-radius:7px;padding:3px 9px}
.nd-act button:hover{background:var(--bd2)}
.nd-empty{padding:24px 14px;text-align:center;font-size:11.5px;color:var(--t3);line-height:1.8}
.nd-empty span{font-size:10.5px}
.nd-list{padding:0 6px 8px}
.nd-item{padding:9px 8px;border-radius:9px;border-bottom:1px solid var(--bd2)}
.nd-item.unread{background:var(--p-soft2)}
.nd-t{font-size:12.5px;font-weight:600;line-height:1.5}
.nd-b{font-size:11.5px;color:var(--t2);margin-top:2px;line-height:1.6}
.nd-m{font-size:10px;color:var(--t3);margin-top:4px}

/* ---------------- 发送按钮的停止态 ---------------- */
.send.stop{background:var(--err)}
.send.stop:hover{background:var(--err)}

/* ---------------- 轻提示 ---------------- */
.ag-toast{position:fixed;left:50%;bottom:96px;transform:translate(-50%,8px);z-index:99;
  background:rgba(24,36,52,.92);color:#fff;font-size:12px;padding:7px 14px;border-radius:9px;
  opacity:0;pointer-events:none;transition:.18s}
.ag-toast.on{opacity:1;transform:translate(-50%,0)}

/* 窄屏：右栏本来就隐藏，消息抽屉贴边 */
@media (max-width:900px){
  .notice-drawer{right:8px;left:8px;width:auto}
  .agent-bar{justify-content:flex-start}
  .ab-why{display:none}
}

/* 顶栏「消息」入口的小红点 */
#imBtn{position:relative}
.imdot{
  display:none;position:absolute;top:4px;right:4px;min-width:14px;height:14px;padding:0 3px;
  border-radius:7px;background:var(--err);color:#fff;font-size:9px;font-weight:700;
  line-height:14px;text-align:center;box-shadow:0 0 0 1.5px var(--card);
}

/* ---------- 人员 / 部门 / 关联记录：选择器按钮 + 弹层 ---------- */
.fld-pick{
  width:100%;display:flex;align-items:center;gap:6px;justify-content:space-between;
  border:1px solid var(--bd);border-radius:8px;background:var(--card);color:var(--t1);
  padding:6px 9px;font-size:12.5px;text-align:left;cursor:pointer;transition:.12s;
  font-family:inherit;line-height:1.5;
}
.fld-pick:hover{border-color:var(--p);background:var(--p-soft2)}
.fld-pick[disabled]{cursor:default;background:var(--bd2);color:var(--t2)}
.fld-pick .ph{color:var(--t3)}
.fld-pick.has{color:var(--t1)}
.fld-pick .selcount{color:var(--t1);font-weight:600}
.fld-pick .selhint{color:var(--t3);font-size:10.5px;margin-left:2px}
.fld-pick .pk-ar{flex:0 0 auto;color:var(--t3)}
.fld label em.reqinf{background:transparent;color:var(--warn,#C08A00);border:1px solid currentColor;opacity:.75}

.pkmask{position:fixed;inset:0;background:rgba(12,21,34,.34);z-index:920;display:flex;align-items:center;justify-content:center}
.pkbox{
  width:min(460px,92vw);max-height:min(600px,86vh);display:flex;flex-direction:column;
  background:var(--card);border:1px solid var(--bd);border-radius:14px;overflow:hidden;
  box-shadow:0 18px 48px rgba(12,21,34,.22);
}
.pk-h{display:flex;align-items:center;gap:8px;padding:12px 14px;border-bottom:1px solid var(--bd)}
.pk-h b{font-size:13px;color:var(--t1)}
.pk-h span{font-size:11px;color:var(--t3)}
.pk-h .pk-x{margin-left:auto;border:0;background:transparent;color:var(--t3);font-size:19px;cursor:pointer;line-height:1;padding:0 2px}
.pk-h .pk-x:hover{color:var(--t1)}
.pk-s{padding:10px 14px 4px}
.pk-s input{width:100%;border:1px solid var(--bd);border-radius:8px;padding:7px 10px;font-size:12.5px;background:var(--bg);color:var(--t1);outline:none}
.pk-s input:focus{border-color:var(--p);box-shadow:0 0 0 3px var(--p-soft)}
.pk-l{flex:1;overflow:auto;padding:2px 8px 8px}
.pk-g{font-size:10.5px;color:var(--t3);padding:8px 6px 3px;display:flex;gap:5px;align-items:center}
.pk-g i{font-style:normal;opacity:.7}
.pk-i{display:flex;align-items:center;gap:8px;padding:7px 8px;border-radius:8px;cursor:pointer;font-size:12.5px;color:var(--t1)}
.pk-i:hover{background:var(--p-soft2)}
.pk-i.on{background:var(--p-soft)}
.pk-i .pk-nm{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pk-i .pk-sub{font-size:10.5px;color:var(--t3)}
.pk-i .pk-ck{color:var(--p);font-weight:700}
.pk-empty{padding:22px 10px;text-align:center;font-size:12px;color:var(--t3)}
.pk-f{display:flex;align-items:center;gap:8px;padding:10px 14px;border-top:1px solid var(--bd)}
.pk-f #pkTip{flex:1;font-size:11px;color:var(--t3)}

/* ---------- 对话里的表单摘要卡（完整表单在右栏） ---------- */
.fcard{border:1px solid var(--bd);border-radius:12px;background:var(--card);overflow:hidden;max-width:100%}
.fc-h{display:flex;align-items:center;gap:6px;padding:10px 12px;border-bottom:1px solid var(--bd);
  font-size:12.5px;color:var(--t1);font-weight:600}
.fc-h svg{color:var(--p);flex:0 0 auto}
.fc-tag{margin-left:auto;font-size:10px;font-weight:400;color:var(--p);background:var(--p-soft);border-radius:4px;padding:1px 5px}
.fc-b{padding:10px 12px}
.fc-kv>div+div{margin-top:10px}
.fc-kv dt{font-size:10.5px;color:var(--t3);margin-bottom:3px}
.fc-kv dd{margin:0;font-size:12px;color:var(--t1);line-height:1.7}
.fc-pill{display:inline-block;font-size:10.5px;border-radius:5px;padding:1px 6px;margin:0 4px 4px 0}
.fc-pill.ai{background:var(--p-soft);color:var(--p)}
.fc-pill.roe{background:var(--bd2);color:var(--t2)}
.fc-more{font-size:10.5px;color:var(--t3)}

/* 「已预填」：字段 | 值 两列。
   2026-10-27 用户反馈原话「-3 就很丑，-4 这个图就不错」——
   丑在两个地方：只给药丸看不到抽出来的是什么值；值一长就被挤成一字一行。
   所以做成固定两列，值列吃满宽度、按词换行，行高随内容长。 */
.fc-pre{background:var(--p-soft2);border:1px solid var(--bd2);border-radius:9px;padding:9px 10px 7px}
.fc-pre-h{font-size:11.5px;color:var(--t1);margin-bottom:7px;line-height:1.6}
.fc-pre-h b{color:var(--p);font-weight:600}
.fc-pre-h span{display:block;font-size:10.5px;color:var(--t3);margin-top:1px}
.fc-pre-tb{width:100%;border-collapse:collapse;table-layout:fixed}
.fc-pre-tb th{font-size:10.5px;font-weight:500;color:var(--t3);text-align:left;
  padding:0 6px 5px;border-bottom:1px solid var(--bd2)}
.fc-pre-tb th:first-child{width:88px}
.fc-pre-tb td{font-size:12px;color:var(--t1);padding:5px 6px;vertical-align:top;
  line-height:1.65;border-bottom:1px dashed var(--bd2);word-break:break-word;white-space:normal}
.fc-pre-tb tr:last-child td{border-bottom:0}
.fc-pre-tb td.k{color:var(--t2)}
.fc-pre-tb .ai{font-size:9px;font-style:normal;color:var(--p);background:var(--p-soft);
  border-radius:4px;padding:0 4px;margin-left:6px;vertical-align:1px;white-space:nowrap}
.fc-pre-m{font-size:10.5px;color:var(--t3);margin-top:6px}

/* 「先定一下是哪一个」—— 一张表挂多个入口时（党委会 / 董事会 / 总办会 / 其他会议），
   把入口摆成按钮让人点，别替他挑（挑错打开的就是另一个录入页）。 */
.fc-need{padding:2px 0}
.fc-need-t{font-size:12.5px;color:var(--t1);font-weight:500;margin-bottom:3px}
.fc-need-d{font-size:11.5px;color:var(--t2);line-height:1.65;margin-bottom:8px}
.fc-need-l{display:flex;flex-wrap:wrap;gap:6px}
.fc-need-b{font:inherit;font-size:12px;line-height:1;padding:8px 13px;border-radius:8px;cursor:pointer;
  border:1px solid var(--p-bd);background:var(--p-soft);color:var(--p-strong);transition:.15s}
.fc-need-b:hover{background:var(--p);border-color:var(--p);color:#fff}
.fc-need-n{font-size:10.5px;color:var(--t3);margin-top:8px;line-height:1.6}
.fc-note{font-style:normal;color:var(--t3);font-size:10.5px}
.fc-dim{color:var(--t3)}
.fc-steps{display:flex;flex-wrap:wrap;gap:5px;margin-top:10px}
.fc-step{font-size:10.5px;border:1px solid var(--bd);border-radius:6px;padding:2px 6px;color:var(--t2)}
.fc-step.on{border-color:var(--p);color:var(--p);background:var(--p-soft)}
.fc-step i{font-style:normal;color:var(--t3);margin-left:3px}
.fc-hint{font-size:10.5px;color:var(--t3);margin-top:9px;line-height:1.6}
.fc-load{font-size:11.5px;color:var(--t3)}
/* ★ 2026-10-27 三次踩坑，这次把这行彻底交出去：
 *   ① 一开始写 flex，把 view.css 的 grid 盖掉 → 两个按钮按文字宽度排、不撑满；
 *   ② 后来改成 grid 1fr 1fr，又把 view.css 的 flex-wrap 盖掉 → 提示语掉进第 1 格、
 *      「系统填表」掉到第 2 行左格，右边空一大块（用户原话："一个一行什么意思呀 多丑呀"）；
 *   ③ 现在：**这里一行布局都不写**，display / gap / 排列方向全部归 view.css 管。
 *      本文件在 view.css 之后加载，只要这里出现 display 就会赢，所以只能留 padding 这种外皮。
 * 教训：同一个组件的布局，整个项目只能有一个地方写。 */
.fc-f{padding:11px 14px 13px;
  border-top:.5px solid var(--bd);background:var(--bg)}
.vw-btn.pri{background:var(--p);border-color:var(--p);color:#fff}
.vw-btn.pri:hover{background:var(--p-strong);border-color:var(--p-strong)}

/* ---------- 右栏多步表单：导航式（左竖排步骤 + 右侧当前步卡片） ---------- */
/* 原来是一条横向步骤条，问题是看不出"我这单走到哪、还剩几步"，
 * 也不像低代码平台那种办理导航。现在改成竖排：左边步骤、右边卡片。 */
.fstepwrap{display:block;border-bottom:1px solid var(--bd)}
.fstepwrap.wide{display:flex;align-items:stretch}
.fstepwrap.wide .fnav{flex:0 0 130px;border-right:1px solid var(--bd);background:var(--bg);padding:8px 0}
.fstepwrap.wide .fmain{flex:1;min-width:0;padding:8px 0 0}
.fnav-hd{font-size:10px;color:var(--t3);padding:2px 10px 6px;letter-spacing:.5px}
.fnavi{display:flex;align-items:center;gap:7px;width:100%;text-align:left;border:0;background:transparent;
  padding:6px 10px;cursor:pointer;font-family:inherit;color:var(--t2);font-size:12px}
.fnavi:hover{background:var(--bd2)}
.fnavi i{font-style:normal;width:18px;height:18px;border-radius:50%;background:var(--bd2);color:var(--t3);
  display:inline-flex;align-items:center;justify-content:center;font-size:10px;flex:0 0 auto}
.fnavi span{display:flex;flex-direction:column;min-width:0}
.fnavi b{font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.fnavi em{font-style:normal;font-size:9.5px;color:var(--t3)}
.fnavi.on{color:var(--p);font-weight:600;background:var(--p-soft)}
.fnavi.on i{background:var(--p);color:#fff}
.fnavi.done:not(.on) i{background:var(--bd);color:var(--t2)}

/* 面板被拖窄：步骤改成上方一排小胶囊，不然左边 130px 会把字段挤没 */
.fstepwrap:not(.wide) .fnav{display:flex;flex-wrap:wrap;gap:4px;padding:8px 10px;
  border-bottom:1px solid var(--bd);background:var(--bg)}
.fstepwrap:not(.wide) .fnav-hd{display:none}
.fstepwrap:not(.wide) .fnavi{width:auto;padding:3px 8px;border:1px solid var(--bd);
  border-radius:7px;background:var(--card)}
.fstepwrap:not(.wide) .fnavi.on{border-color:var(--p)}
.fstepwrap:not(.wide) .fnavi span{flex-direction:row;align-items:center;gap:3px}

.fstep-hint{font-size:10.5px;color:var(--t3);padding:7px 12px 0;line-height:1.6}
.frm-note.req{background:var(--p-soft2);color:var(--t2);border-left:2px solid #C08A00}

/* 编号类字段：不给人填，明说系统生成 */
.fld-auto{display:flex;align-items:center;border:1px dashed var(--bd);border-radius:7px;
  padding:7px 10px;font-size:11.5px;color:var(--t3);background:var(--bg)}
/* 「自动带出」：值是按当前登录人/部门填的，标一句免得人以为是库里旧的 */
.fld label em.sysdef{background:var(--p-soft2);color:var(--t2)}

/* ---------- 填表模式切换 ---------- */
.fmode{display:flex;gap:4px;padding:8px 10px;border-bottom:1px solid var(--bd);background:var(--card)}
.fmode button{border:1px solid var(--bd);background:transparent;color:var(--t2);font-size:11px;
  padding:3px 8px;border-radius:6px;cursor:pointer;font-family:inherit}
.fmode button:hover{background:var(--bd2)}
.fmode button.on{background:var(--p-soft);border-color:var(--p);color:var(--p);font-weight:600}

/* ---------- 对话流里的系统提示卡 ----------
   从系统点「新增」跳进来时，主区得有一句话说清楚"表在右栏"，
   否则人看到的还是上一次对话内容，会以为没跳成功。 */
.sysnote{display:flex;gap:9px;margin:10px 0 4px;padding:11px 13px;border-radius:10px;
  background:var(--p-soft);border:1px solid var(--p-bd,var(--bd))}
.sysnote-i{flex:0 0 auto;width:20px;height:20px;border-radius:50%;background:var(--p);
  color:#fff;display:flex;align-items:center;justify-content:center;margin-top:1px}
.sysnote-b{flex:1;min-width:0}
.sysnote-t{font-size:12.5px;color:var(--t1);line-height:1.75}
.sysnote-a{margin-top:6px;font-size:12px}
.sysnote-a a{color:var(--p);text-decoration:none;border-bottom:1px dashed var(--p)}

/* 保存成功后的下一步入口：把「已保存」和「接着填下一步」放在一起，
   省得人再回左边导航找一次。 */
.frm-alt.pri{background:var(--p);border-color:var(--p);color:#fff;font-weight:600}
.frm-alt.pri:hover{filter:brightness(1.06);background:var(--p)}
.frm-done-all{font-size:11.5px;color:var(--t3)}
/* 保存回执里的"系统改写了这几项"说明：区别于失败提示，用中性色 */
.frm-chg{font-size:11px;color:var(--t3);line-height:1.7;margin:-2px 0 4px;width:100%}
/* 业务赋值回执："系统自动定了"——不是失败、也不是我填的，用主色弱化底衬把它和信息区分开 */
.frm-auto{font-size:11px;color:var(--t2);line-height:1.7;margin:-2px 0 4px;width:100%;
  background:var(--p-soft,rgba(64,120,255,.07));border-radius:7px;padding:5px 9px}
.frm-ok{flex:1 0 100%;font-size:12px;color:var(--t1);font-weight:600;margin-bottom:2px}

/* 分步导航：右上角进度、左侧"还差几项"标记 */
.fnav-hd{display:flex;align-items:center;justify-content:space-between;gap:6px}
.fnav-hd em{font-style:normal;font-size:9.5px;color:var(--p);font-weight:600}
.fnavi em.must{color:var(--t3)}
.fnavi.on em.must,.fnavi em.must{font-size:9.5px}
.fnavi.on em.must{color:var(--p)}

/* ==================================================================
   表单在对话里填（2026-10-25）
   右栏「表单」tab 已下线，表单卡片就地展开 → 需要：
   · 展开后把摘要/按钮收起来，别在表单上面挂一大段说明
   · 明细表按系统的 cols 分栏、full 占整行
   · 行内报错单独一块，红在那一行而不是整张表
   ================================================================== */

.fc-h .fc-t{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* 「与系统同源 · 4 段 / 3 张明细表」：这不是装饰，是告诉人必填/联动从哪来的 */
.fc-tag2{font-size:9.5px;color:var(--t3);margin-left:2px}
.fc-h .fc-tag{margin-left:auto}

/* 展开之后：摘要和两个按钮都收起来，只留表单本体 */
.fcard.open .fc-b,.fcard.open .fc-f{display:none}
.fc-form{display:none}
.fcard.open .fc-form{display:block;padding:0 12px 12px}

/* 摘要里的分段路线：任务信息 → 承办单位 → 协办单位 → 任务阶段 */
.fc-steps{display:flex;flex-wrap:wrap;align-items:center;gap:4px}
.fc-arrow{font-size:10px;color:var(--t3)}
.fc-step .must{color:var(--err);font-weight:600}
.fc-step .mul{color:var(--p)}

/* 明细表：按系统的 cols 分栏；full 的字段占整行 */
.mrow-body{display:grid;grid-template-columns:repeat(auto-fit,minmax(108px,1fr));gap:8px}
.mrow-c{min-width:0}

/* 行号 + 行标题 */
.mrow-top{gap:7px}
.mrow-top b{width:17px;height:17px;border-radius:5px;background:var(--p-soft);color:var(--p);
  display:inline-flex;align-items:center;justify-content:center;font-size:10px;flex:0 0 auto}
.mrow-n{flex:1;min-width:0;font-size:11px;color:var(--t2);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

/* 这一行的规则报错（跨行重叠、超主表时限）：写在行里面，写明跟谁比 */
.rerr{font-size:10.5px;color:var(--err);line-height:1.65;padding:0 9px}
.rerr:empty{display:none}
.rerr>div{padding:4px 0 6px}

/* 明细段说明：有必填就写"每行都要填齐"，没必填就写"不加也能保存" */
.mnote{font-size:10.5px;color:var(--t3);line-height:1.6;margin:-2px 0 8px}

/* 收起飞走 */
.frm-fold{margin-top:10px;text-align:right}
.frm-fold button{font-size:10.5px;color:var(--t3);background:transparent;padding:2px 4px}
.frm-fold button:hover{color:var(--p)}

/* ============ 内嵌系统原页面：只做显隐分步（native-form.js） ============
   思路：整页照搬系统录入页，外层加一条步骤条 + 上一步/下一步/提交。
   字段映射、属性联动、必填、日期规则全由系统自己的 JS 跑，这里只负责"切哪一屏"。 */
.fcard .fc-native{display:none;border-top:1px solid var(--bd);padding:0}
.fcard.native .fc-native{display:block}
.fcard.native .fc-f{display:none}
.fcard.native .fc-form{display:none}
/* 展开原页面时摘要还留着（里面有分段路线），但把"在这儿分步填"那排按钮收起 */
.fcard.native .fc-hint{display:none}

.nf{display:flex;flex-direction:column;gap:0}
.nf-hd{display:flex;align-items:center;gap:8px;padding:9px 12px 7px;flex-wrap:wrap}
.nf-hd b{font-size:12.5px;color:var(--t1);font-weight:600}
.nf-tag{font-size:10px;color:var(--t3);background:var(--bg);border:1px solid var(--bd);
  border-radius:20px;padding:1px 7px}
.nf-hd .nf-alt{margin-left:auto;border:0;background:transparent;color:var(--t3);font-size:10.5px;
  padding:2px 4px;cursor:pointer;text-decoration:underline;text-underline-offset:2px}
.nf-hd .nf-alt:hover{color:var(--p)}

/* 步骤条：点哪一段就显示哪一段，已填的段落不会丢（DOM 一直在，只是隐藏） */
.nf-nav{display:flex;flex-wrap:wrap;gap:5px;padding:0 12px 9px}
.nf-s{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--bd);background:var(--bg);
  color:var(--t2);border-radius:8px;padding:4px 9px 4px 5px;font-size:11.5px;cursor:pointer;
  transition:.12s;max-width:100%}
.nf-s i{width:16px;height:16px;border-radius:5px;background:var(--card);color:var(--t3);
  display:inline-flex;align-items:center;justify-content:center;font-size:10px;font-style:normal;
  font-weight:600;flex:0 0 auto}
.nf-s span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.nf-s:hover{border-color:var(--p-bd);color:var(--p)}
.nf-s.on{background:var(--p-soft);border-color:var(--p-bd);color:var(--p-strong);font-weight:600}
.nf-s.on i{background:var(--p);color:#fff}

/* 页面本体：iframe 高度跟着内容长，避免双滚动条 */
.nf-body{border:1px solid var(--bd);border-radius:10px;overflow:hidden;background:#fff}
.nf-frame{display:block;width:100%;height:360px;border:0;background:var(--bg);transition:height .12s}

.nf-act{display:flex;align-items:center;gap:8px;padding:9px 12px 2px}
.nf-act .sp{flex:1}
.nf-act button{height:30px;padding:0 14px;border-radius:8px;font-size:12px;border:1px solid var(--bd);
  background:var(--card);color:var(--t2);cursor:pointer;transition:.12s}
.nf-act button:hover:not(:disabled){border-color:var(--p-bd);color:var(--p)}
.nf-act button:disabled{opacity:.6;cursor:default}
.nf-act .nf-next,.nf-act .nf-submit{background:var(--p);border-color:var(--p);color:#fff;font-weight:600}
.nf-act .nf-next:hover:not(:disabled),.nf-act .nf-submit:hover:not(:disabled){filter:brightness(1.06);color:#fff}

/* 校验/回执：跟输入框一起在正常流里，不绝对定位（会骑到按钮上） */
.nf-msg{padding:2px 12px}
.nf-m{font-size:11.5px;line-height:1.7;border-radius:8px;padding:7px 10px;margin-top:6px}
.nf-m.bad{background:var(--err-soft,#FDECEC);color:var(--err);border:1px solid var(--err-bd,#F5C2C0)}
.nf-m.ok{background:var(--ok-soft);color:var(--ok);border:1px solid var(--ok)}
.nf-m .sub{color:var(--t3);font-size:10.5px}

.nf-tip{font-size:10.5px;color:var(--t3);line-height:1.7;padding:7px 12px 10px}
.nf-err{font-size:12px;color:var(--t2);line-height:1.8;padding:14px;background:var(--bg);
  border:1px dashed var(--bd);border-radius:10px;margin:10px 12px}
.nf-err b{color:var(--t1)}
.nf-err .nf-open{margin-top:8px;height:28px;padding:0 12px;border-radius:7px;border:1px solid var(--bd);
  background:var(--card);color:var(--p);font-size:11.5px;cursor:pointer}

/* 窄屏：步骤条横滑，别挤成三行 */
@media (max-width:900px){
  .nf-nav{flex-wrap:nowrap;overflow-x:auto;padding-bottom:6px}
  .nf-s{flex:0 0 auto}
  .nf-frame{height:min(64vh,520px);min-height:320px}
}

/* ---------- 表单卡视觉收口（2026-10-25 用户反馈"UI 太丑"） ----------
   只动观感不动结构：边框压淡、圆角统一、头部留白加大、标签做成胶囊。
   字号往 1px 内收，避免一屏全是小字挤在一起。 */
.fcard{border:.5px solid var(--bd);border-radius:13px;box-shadow:0 1px 3px rgba(16,32,60,.05)}
.fc-h{padding:11px 14px;border-bottom:.5px solid var(--bd);font-size:13px;font-weight:500}
.fc-h svg{opacity:.9}
.fc-h .fc-tag,.fc-h .fc-tag2{
  font-size:10px;font-weight:400;line-height:1.5;padding:2px 7px;border-radius:5px;
  background:var(--p-soft);color:var(--p);margin-left:6px;
}
.fc-h .fc-tag{margin-left:auto}
.fc-h .fc-tag2{margin-left:0;background:var(--p-soft2);color:var(--t3)}
.fc-h .fc-tag2:empty{display:none}
.fc-b{padding:12px 14px}
.fc-kv dt{font-size:11px;letter-spacing:.2px}
.fc-kv dd{font-size:12.5px}
.fc-pill{font-size:10.5px;padding:2px 7px;border-radius:5px;margin:0 5px 5px 0}
.fc-step{font-size:11px;border-radius:7px;padding:3px 8px}
.fc-step.on{box-shadow:0 1px 2px rgba(20,40,80,.06)}

/* ---------- 表单卡状态徽标：草稿 / 已提交 / 修改中 ----------
   用户 2026-10-25 要的：「已提交之后…表单上方会有一个状态叫"已提交"，
   如果有草稿的话，也会有"草稿"状态」。空的时候整个不占位。 */
.fc-st:empty{display:none}
.fc-st{
  font-size:10px;font-weight:500;line-height:1.5;padding:2px 7px;border-radius:5px;
  margin-left:6px;flex:0 0 auto;white-space:nowrap;
  background:var(--bd2);color:var(--t2);
}
.fc-st.submitted{background:var(--ok-soft);color:var(--ok)}
.fc-st.draft{background:var(--warn-soft);color:var(--warn)}
.fc-st.editing{background:var(--p-soft);color:var(--p)}
/* 已提交的整张卡：边框转成"这件事已经落地"的色，别再加对勾图标堆噪 */
.fcard-done{border-color:rgba(18,153,107,.3)}

/* ============================================================================
   右栏智能体卡（2026-10-26 重做）
   ----------------------------------------------------------------------------
   上一版是「当前智能体大卡 + 一堆 ag-row」，一屏两种排法，用户说"非常丑"。
   现在全部统一 104px：14 个扫下去是齐的。高度是硬约束 ——
   描述文本长短差很多（有的 20 字有的 60 字），不锁高就会参差不齐。
   锁高 + line-clamp:2 之后，任何一条描述都不会把卡片撑变形。
   ========================================================================== */
.acard{
  position:relative;display:flex;gap:9px;width:100%;text-align:left;
  padding:10px;height:104px;margin-bottom:7px;overflow:hidden;
  border:1px solid var(--bd);border-radius:11px;background:var(--card);
  transition:border-color .14s, box-shadow .14s, transform .14s;
}
.acard:hover{border-color:var(--p);box-shadow:var(--sh-md);transform:translateY(-1px)}
.acard.on{border-color:var(--p);box-shadow:0 0 0 3px var(--p-soft)}
/* 当前这张：左侧一根竖条，比整块变色克制，也不影响标签的读色 */
.acard.on::before{
  content:'';position:absolute;left:0;top:10px;bottom:10px;width:3px;
  border-radius:0 3px 3px 0;background:var(--p);
}
.acard.off{opacity:.52;cursor:not-allowed}
.acard.off:hover{transform:none;box-shadow:none;border-color:var(--bd)}

.ac-lg{
  width:36px;height:36px;border-radius:10px;flex:0 0 auto;overflow:hidden;
  display:grid;place-items:center;background:var(--p-soft);
  color:var(--p);font-size:13px;font-style:normal;font-weight:600;
}
.ac-lg img{width:36px;height:36px;display:block;border-radius:10px}

.ac-bd{display:flex;flex-direction:column;min-width:0;flex:1;gap:3px}
.ac-t1{display:flex;align-items:baseline;gap:6px;min-width:0}
.ac-t1 b{
  font-size:12.5px;font-weight:600;color:var(--t1);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.ac-t1 em{font-style:normal;font-size:10px;color:var(--t3);white-space:nowrap;flex:0 0 auto}
.ac-t1 em.no{color:var(--err);background:var(--err-soft,#fdeff1);border-radius:4px;padding:0 4px}

/* 两行截断：height 必须写死，否则 clamp 在不同浏览器里行高算法不一致，
   同一份数据在两台机器上会差 1~2px，整列就歪了 */
.ac-ds{
  font-size:11px;line-height:1.5;color:var(--t3);height:33px;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;
}
.ac-tg{display:flex;gap:4px;margin-top:auto;overflow:hidden;flex-wrap:nowrap}
.ac-tg i{
  font-style:normal;font-size:10px;line-height:1.6;padding:0 6px;border-radius:5px;
  background:var(--p-soft);color:var(--p);white-space:nowrap;
}
.ac-cur{
  position:absolute;right:8px;top:8px;font-style:normal;font-size:9.5px;
  color:#fff;background:var(--p);border-radius:20px;padding:0 6px;line-height:15px;
}
.ag-cnt{font-size:10.5px;color:var(--t3);font-weight:400;margin-left:6px}
.ag-empty{padding:18px 10px;font-size:12px;color:var(--t3);text-align:center;line-height:1.7}

/* ---------------------------------------------------------------- 越界分诊卡 */
/* 兜底助手接不住这句话时，在回答下面给一张"换个人答"的卡（2026-10-26）。
   颜色全走主题变量，换皮肤/切深色自动跟随；不做独立配色，避免像第三方组件。 */
.hf{
  display:flex;gap:9px;align-items:flex-start;margin-top:11px;padding:10px 11px;
  border:1px solid var(--p-bd);background:var(--p-soft2);border-radius:11px;
}
.hf-ico{
  width:26px;height:26px;border-radius:8px;flex:0 0 auto;font-style:normal;
  display:grid;place-items:center;font-size:12px;font-weight:600;color:#fff;
  background:linear-gradient(135deg,var(--p),var(--p-strong));
}
.hf-tx{flex:1;min-width:0;font-size:12px;line-height:1.6;color:var(--t2)}
.hf-tx b{color:var(--t1);font-weight:600}
.hf-tx span{display:block;color:var(--t3);font-size:11.5px;margin-top:2px}
.hf-btn{
  flex:0 0 auto;align-self:center;cursor:pointer;border:0;border-radius:8px;
  background:var(--p);color:var(--on-p);font-size:12px;font-weight:500;
  padding:6px 11px;line-height:1.5;white-space:nowrap;font-family:inherit;
}
.hf-btn:hover{filter:brightness(1.06)}
.hf-btn:active{transform:translateY(1px)}

/* 「不用」：次要动作，不做成主色按钮，避免变成两个同等重量的选择 */
.hf-no{
  flex:0 0 auto;align-self:center;cursor:pointer;border:1px solid var(--bd);border-radius:8px;
  background:transparent;color:var(--t2);font-size:12px;line-height:1.5;
  padding:5px 9px;white-space:nowrap;font-family:inherit;
}
.hf-no:hover{color:var(--t1);border-color:var(--t3)}
.hf-btn[disabled]{opacity:.6;cursor:default;filter:none}
