/* ═══ 非想 · 对话 —— 单一变量式双主题（亮色默认 / 深色切换，禁绿） ═══ */
:root{
  --bg:#f4f6fa; --bg2:#eef1f7; --fg:#14161f; --fg1:#242a38; --dim:#5f6a7d; --dim2:#8a93a8;
  --card:#ffffff; --line:#e3e7f0; --line2:#eef1f7; --soft:#f0f3f9;
  --acc:#2b52c8; --acc2:#2d54c8; --accsoft:#e8eefc; --accborder:#c7d4ee;
  --user:#e8eefc; --bad:#c0455e; --code:#f0f3f9; --shadow:0 2px 10px rgba(20,26,40,.06);
}
html[data-theme=dark]{
  --bg:#0a0a10; --bg2:#0e0e16; --fg:#eaeaf2; --fg1:#d8d8e2; --dim:#7a8699; --dim2:#5a6478;
  --card:#12121a; --line:#22222e; --line2:#1a1a24; --soft:#16161f;
  --acc:#8fb0ff; --acc2:#8fb0ff; --accsoft:#1a2440; --accborder:#2e3e5e;
  --user:#1a2440; --bad:#c0566a; --code:#16161f; --shadow:0 2px 12px rgba(0,0,0,.4);
}
*{margin:0;padding:0;box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{height:100%}
body{background:var(--bg);color:var(--fg1);font-family:-apple-system,"PingFang SC",sans-serif;overflow:hidden;transition:background .2s,color .2s}
/* 锁屏 */
.lock{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100vh;min-height:100dvh;gap:15px;padding:20px}
.lock h1{font-family:"Songti SC","STSong","Source Han Serif SC",Georgia,serif;font-size:33px;font-weight:600;letter-spacing:7px;text-indent:7px;color:var(--fg)}
.lock .sub{color:var(--dim);font-size:13px;text-align:center;line-height:1.8;max-width:320px}
.lock input{background:var(--card);border:1px solid var(--line);color:var(--fg);padding:12px 16px;border-radius:10px;font-size:15px;width:min(90vw,320px);text-align:center;outline:none;font-family:ui-monospace,Menlo,monospace}
.lock input:focus{border-color:var(--acc)}
.lock button{background:var(--accsoft);border:1px solid var(--accborder);color:var(--acc);padding:12px 34px;border-radius:10px;font-size:15px;cursor:pointer;letter-spacing:4px;min-height:44px}
.lock .ltabs{display:flex;gap:4px;background:var(--soft);border:1px solid var(--line2);padding:3px;border-radius:999px}
.lock .ltab{background:transparent;border:0;color:var(--dim);font-size:13px;padding:8px 22px;border-radius:999px;letter-spacing:1px;cursor:pointer;min-height:36px;font-family:inherit}
@media (max-width:760px){
  /* v175.4.6：锁屏 5 个 tab 在手机上竖排挤压（新用户注册加入后超宽）—— 收紧内边距 + 禁止折行 */
  .lock .ltab{padding:8px 9px;font-size:12px;letter-spacing:0;white-space:nowrap;flex:1 1 auto;min-width:0;text-align:center}
  .lock .ltabs{overflow-x:auto}
}
.lock .ltab.on{background:var(--card);color:var(--acc)}
.lock .lpane{display:none;flex-direction:column;align-items:center;gap:15px;width:100%}
.lock .lpane.on{display:flex}
#cerr,#smsErr{color:var(--bad);font-size:13px;min-height:18px}
#lerr{color:var(--bad);font-size:13px;min-height:18px}
/* ═══ 布局：侧栏（品牌行 · 搜索触发 · 分段 · 新建 · 列表 · 批量 · 底栏） ═══ */
.app{display:none;height:100vh;height:100dvh}
.app.on{display:flex}
aside{width:262px;flex:none;background:var(--bg2);border-right:1px solid var(--line);display:flex;flex-direction:column;transition:width .34s cubic-bezier(.4,0,.2,1)}
aside.collapsed{width:0;border-right:0;overflow:hidden}

/* 顶栏品牌行：logo 标记 + 中文标题 + 折叠按钮 */                  /* v171：删品牌行（已不再用，保留占位以免 git diff 混乱） */
.aside-top{display:flex;align-items:center;gap:10px;padding:16px 14px 12px;border-bottom:1px solid var(--line)}
.aside-mark{
  width:34px;height:34px;flex:0 0 34px;border-radius:11px;display:grid;place-items:center;
  background:linear-gradient(140deg,var(--acc),var(--acc2) 55%,var(--accborder));
  color:#fff;font-family:"Noto Serif SC",serif;font-weight:700;font-size:15px;letter-spacing:-.5px;
  box-shadow:0 8px 22px -8px var(--accsoft);
}
.aside-top .sidetitle{
  display:flex;flex-direction:column;line-height:1.15;flex:1;min-width:0;
  font-family:"Noto Serif SC",serif;font-size:15px;letter-spacing:4px;color:var(--fg);
  text-decoration:none;
}
.aside-top .sidetitle .bw{padding-left:2px}
.aside-tx{display:flex;flex-direction:column;line-height:1.15;flex:1;min-width:0;gap:4px}
.aside-top .sidesub{
  font-family:-apple-system,"PingFang SC",sans-serif;
  font-size:9.5px;color:var(--dim2);letter-spacing:1.6px;text-transform:uppercase;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.ttbtn{
  width:30px;height:30px;flex:0 0 30px;border-radius:9px;background:transparent;border:1px solid transparent;
  color:var(--dim);cursor:pointer;display:grid;place-items:center;transition:.18s;
}
.ttbtn:hover{background:var(--soft);border-color:var(--line);color:var(--fg)}

/* ═══ v171：去品牌行后，侧栏顶部 = 搜索条 + 折叠按钮（一行） ═══ */
.sidehead{
  display:flex;align-items:center;gap:8px;
  padding:14px 12px 10px 14px;border-bottom:1px solid var(--line)
}
.sidehead .search-trigger{margin:0;flex:1;min-width:0}
.sidehead #sideToggle{flex:0 0 30px;width:30px;height:30px}

/* 搜索触发条：模拟 ⌘K 入口 */
.search-trigger{
  display:flex;align-items:center;gap:9px;margin:0 14px 12px;padding:9px 11px;
  border-radius:11px;background:var(--card);border:1px solid var(--line);
  color:var(--dim2);font-size:12.5px;cursor:pointer;transition:.2s;
  font-family:inherit;
}
.search-trigger:hover{border-color:var(--accborder);color:var(--fg1);background:var(--accsoft)}
.search-trigger svg{width:15px;height:15px;flex:0 0 15px}
.search-trigger kbd{
  margin-left:auto;font-family:inherit;font-size:10.5px;padding:2px 6px;border-radius:6px;
  background:var(--soft);border:1px solid var(--line);color:var(--dim2);
}

/* 侧栏头部容器：搜索触发 + 分段 + 新建按钮，全部由它管 */
.aside-h{padding:10px 12px 8px;padding-top:calc(10px + env(safe-area-inset-top,0px));display:flex;flex-direction:column;gap:0}  /* v175.4.3 + v168：抽屉头部 safe-area-inset-top 让收缩icon不被刘海压住 */

/* 分段（对话 / 任务 / 场景）：相对定位，背景作为 indicator */
.modeseg{
  position:relative;display:flex;gap:0;                          /* v172：下划线 tab —— 取消背景胶囊 */
  margin:6px 14px 8px;padding:0;
  border-bottom:1px solid var(--line);
}
.modeseg .seg-indicator{
  position:absolute;left:0;bottom:-1px;width:0;height:2px;       /* v172：下划线指示器（不再是胶囊背景） */
  background:var(--acc);border:0;border-radius:0;z-index:1;
  transition:transform .34s cubic-bezier(.4,0,.2,1), width .34s cubic-bezier(.4,0,.2,1);
}
.modeseg button{
  position:relative;z-index:2;border:0;background:transparent;color:var(--dim2);
  font-size:13px;padding:8px 14px 9px;cursor:pointer;transition:color .2s;
  font-family:inherit;letter-spacing:.5px;
}
.modeseg button:hover{color:var(--fg1)}
.modeseg button.active,.modeseg button.on{color:var(--acc);font-weight:500}

/* v171：tab 行整体 + 右侧一对动作按钮（批量 + 新建） */
/* v175.1：顶栏单行布局 —— [折叠 / tab / 新建 / 批量] 在左，[头像] 在最右 */
.sidetabbar{display:flex;flex-direction:row;align-items:center;gap:6px;padding:8px 10px;padding-top:calc(8px + env(safe-area-inset-top,0px));border-bottom:1px solid var(--line)}  /* v169 合并：v168 抽屉头部 safe-area 修复移植到新头部（原 .aside-h 已废弃） */
.sidetabbar .sfold,#sideToggle{flex:0 0 auto;width:28px;height:28px;min-width:28px;border-radius:50%;background:var(--card);border:1px solid var(--line);
  box-shadow:0 1px 3px rgba(20,26,40,.05);color:var(--dim);display:inline-flex;align-items:center;justify-content:center;cursor:pointer;padding:0;order:10}
.sidetabbar .sfold svg{width:15px;height:15px}
.sidetabbar .modeseg{flex:1 1 auto;margin:0;padding:0;border-bottom:0;min-width:0}
.sidetabbar .sidetab-extras{flex:0 0 auto;display:flex;align-items:center;gap:4px;margin-left:auto}
.sidetabbar .newbtn{flex:0 0 auto;width:30px;height:30px;padding:0;min-height:30px;background:var(--card);border:1px solid var(--line);color:var(--dim);border-radius:50%}
.sidetabbar .newbtn svg{width:14px;height:14px;display:block}
.sidetabbar .ghost-btn{flex:0 0 auto;width:30px;height:30px;padding:0;min-height:30px;background:var(--card);border:1px solid var(--line);color:var(--dim);border-radius:50%}
.sidetabbar .ghost-btn svg{width:14px;height:14px;display:block}
.sidetabbar .sfava{width:28px;height:28px;flex:0 0 auto;border-radius:50%;border:1.5px solid var(--line);background:var(--card);color:var(--dim);display:inline-flex;align-items:center;justify-content:center;cursor:pointer;padding:0;order:4}   /* v175.1：头像=4（< sfold=5，最右） */
.sidetabbar .sfava .avaph{width:100%;height:100%;border-radius:50%}
.sidetab-extras{display:flex;align-items:center;gap:6px}
.sidetab-extras .ghost-btn{flex:0 0 auto;padding:0 12px;min-height:34px}
.sidetab-extras .newbtn{flex:1;padding:0 12px;min-height:34px;font-size:12.5px;gap:6px;justify-content:center}

/* v175.2：每 tab 内容区顶部独立「新建 / 批量」按钮行（紧凑图标版） */
.side-extras{display:flex;align-items:center;gap:6px;padding:8px 10px 4px;border-bottom:1px dashed var(--line2)}
.side-extras .newbtn{flex:0 0 auto;width:32px;height:32px;min-height:32px;padding:0;background:var(--accsoft);border:1px solid var(--accborder);color:var(--acc2);border-radius:10px;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;transition:background .15s}
.side-extras .newbtn:hover{background:var(--accborder)}
.side-extras .newbtn svg{width:14px;height:14px;display:block}
/* v176.20：对话列表顶部的批量按钮删掉后 .side-extras 会变空 —— 别留一条空的虚线行 */
.side-extras:empty{display:none;padding:0;border-bottom:0}
.side-extras .ghost-btn.batchico{flex:0 0 auto;width:32px;height:32px;min-height:32px;padding:0;background:var(--card);border:1px solid var(--line);color:var(--dim);border-radius:10px;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;transition:color .15s,border-color .15s}
.side-extras .ghost-btn.batchico:hover{color:var(--fg);border-color:var(--line2)}
.side-extras .ghost-btn.batchico.on{color:var(--acc2);border-color:var(--accborder);background:var(--accsoft)}
.side-extras .ghost-btn.batchico svg{width:14px;height:14px;display:block}

/* 新建按钮：紧跟分段、整行宽 */
.sidebtns{display:flex;gap:8px;padding:0 14px 10px}
.newbtn{
  flex:1;display:flex;align-items:center;justify-content:center;gap:7px;
  padding:10px 0;border-radius:12px;border:0;cursor:pointer;
  background:var(--accsoft);border:1px solid var(--accborder);color:var(--acc2);
  font-size:13px;font-weight:600;font-family:inherit;
  transition:transform .18s,filter .18s,background .18s,border-color .18s;
}
.newbtn:hover{background:var(--accsoft);border-color:var(--acc2);filter:brightness(1.05);transform:translateY(-1px)}
.newbtn:active{transform:translateY(0) scale(.99)}
.newbtn svg{width:14px;height:14px}
.ghost-btn{
  padding:0 13px;border-radius:12px;background:var(--card);
  border:1px solid var(--line);color:var(--dim);font-size:12.5px;cursor:pointer;transition:.2s;
  font-family:inherit;
}
.ghost-btn:hover{border-color:var(--accborder);color:var(--fg);background:var(--soft)}
.ghost-btn.on{border-color:var(--acc);color:var(--acc);background:var(--accsoft)}

/* 智能体入口（保留 id：agEntry / agwrap2） */
.agwrap2{display:none!important}          /* v121：侧栏「我的智能体」入口不再显示（曾健要求）；DOM 保留，代码仍引用 */
.agwrap2.old{position:relative;margin:8px 0 0;padding:0 14px}
.agentry{
  display:flex;align-items:center;justify-content:center;gap:6px;width:100%;
  background:var(--card);border:1px solid var(--line);color:var(--fg1);
  border-radius:10px;padding:10px 16px;font-size:13.5px;cursor:pointer;min-height:44px;
  font-family:inherit;text-align:center;
}
.agentry:hover{border-color:var(--accborder);background:var(--accsoft);color:var(--acc)}


.agset:hover{color:var(--acc);background:var(--accsoft)}
.agset svg{width:15px;height:15px}
.agentry:hover{border-color:var(--accborder);background:var(--accsoft);color:var(--acc)}
.agentry svg{width:16px;height:16px;flex:none;color:var(--acc)}
.agentry .agsub{margin-left:auto;color:var(--dim2);font-size:12px}
.agwrap{position:fixed;inset:0;z-index:9998;display:none;background:rgba(12,16,30,.42)}
.agwrap.on{display:block}
.agpanel{position:absolute;right:0;top:0;bottom:0;width:min(560px,94vw);background:var(--bg);border-left:1px solid var(--line);display:flex;flex-direction:column;box-shadow:-18px 0 44px rgba(10,14,28,.18)}
.agh{display:flex;align-items:center;gap:8px;padding:13px 15px;border-bottom:1px solid var(--line);background:var(--card)}
.agtitle{font-weight:700;font-size:15px;flex:1}
.agbody{flex:1;overflow:auto;padding:14px 15px}
.agsec{margin-bottom:14px;background:var(--card);border:1px solid var(--line);border-radius:12px;padding:12px}
.agsect{font-size:13px;font-weight:700;margin-bottom:8px}
.aghint{font-size:12px;color:var(--dim);line-height:1.7;margin:-2px 0 8px}
.agrow{display:flex;align-items:center;gap:9px;padding:6px 0;font-size:13.5px;color:var(--fg1)}
.agrow label{flex:1;cursor:pointer}
.agrow input[type=number]{width:72px;background:var(--soft);border:1px solid var(--line);color:var(--fg);border-radius:8px;padding:5px 8px;font-family:inherit;font-size:13px}
.agrow input[type=checkbox]{width:17px;height:17px;accent-color:var(--acc);flex:none}
.sopai{display:none;max-height:170px;overflow:auto;border:1px solid var(--line);border-radius:10px;padding:8px 10px;background:var(--soft);margin:0 0 8px}
.sopai.on{display:block}
.sopai .b{margin:0 0 6px;font-size:13px;line-height:1.7;white-space:pre-wrap;word-break:break-word}
.sopai .b:last-child{margin-bottom:0}
.sopai .b.a{color:var(--dim);border-left:2px solid var(--accborder);padding-left:8px}
.soprow{display:flex;gap:8px;align-items:flex-end}
.soprow .agta{flex:1;min-height:46px;max-height:120px}
.sopbtn{background:none;border:1px solid var(--line);color:var(--dim);border-radius:8px;padding:7px 11px;font-size:12.5px;font-family:inherit;cursor:pointer;white-space:nowrap;flex:none}
.sopbtn:hover{color:var(--acc);border-color:var(--accborder)}
.sopbtn:disabled{opacity:.55;cursor:default}
.sopmiss{color:#e6a23c}
.sopls{display:flex;flex-direction:column;gap:4px;margin:0 0 8px}
.sopli{display:flex;align-items:center;gap:8px;padding:8px 10px;border:1px solid var(--line);border-radius:9px;font-size:13px;color:var(--fg1);cursor:pointer}
.sopli:hover{background:var(--soft)}
.sopli.on{border-color:var(--accborder);color:var(--acc2);background:var(--soft)}
.sopli b{font-weight:500;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sopli .st{font-size:11px;color:var(--dim2);flex:none}
.sopli .x{flex:none;background:none;border:none;color:var(--dim2);font-size:13px;cursor:pointer;padding:2px 4px;font-family:inherit}
.sopli .x:hover{color:var(--bad)}
.sopnow{font-size:12px;color:var(--acc2);font-weight:400;margin-left:6px}
/* v86：本体模式 */
.otstat{max-width:560px;margin:6px auto 0;font-size:12.5px;color:var(--dim);line-height:1.9}
.otstat b{color:var(--fg)}
.otdim{color:var(--dim2);font-size:11.5px}
.otbox{max-width:560px;margin:12px auto 0;text-align:left}
.otbox textarea{width:100%;box-sizing:border-box;background:var(--bg);border:1px solid var(--line);
  color:var(--fg);border-radius:10px;padding:10px 12px;font-size:13.5px;font-family:inherit;resize:vertical}
.otrow{display:flex;align-items:center;gap:8px;margin-top:8px;flex-wrap:wrap}
.otrow select{background:var(--card);border:1px solid var(--line);color:var(--fg);border-radius:9px;
  padding:8px 10px;font-size:13px;font-family:inherit}
.otcard{max-width:560px;margin:14px auto 0;border:1px solid var(--line);border-radius:12px;
  background:var(--card);padding:12px;text-align:left}
.ohd{font-size:12.5px;font-weight:600;color:var(--fg);margin-bottom:8px}
.otab{display:flex;flex-direction:column;gap:3px;max-height:260px;overflow:auto}
.otr{display:grid;grid-template-columns:minmax(88px,1fr) 84px minmax(90px,1.4fr);gap:6px;
  font-size:12px;color:var(--fg1);padding:5px 6px;border-radius:7px;background:var(--soft)}
.otr span{overflow:hidden;text-overflow:ellipsis}
.otq{margin-top:8px}
.otq summary{font-size:11.5px;color:var(--dim2);cursor:pointer}
.otq pre{font-size:11px;background:var(--soft);border-radius:8px;padding:8px;overflow:auto;color:var(--dim);white-space:pre-wrap}
.ostep{display:flex;gap:9px;padding:8px 0;border-top:1px solid var(--line);font-size:13px;color:var(--fg1)}
.ostep:first-of-type{border-top:none}
.ostep b{flex:none;width:18px;height:18px;border-radius:50%;background:var(--accsoft);color:var(--acc2);
  font-size:11px;display:inline-flex;align-items:center;justify-content:center;margin-top:2px}
.otwho{display:inline-block;font-size:11px;color:var(--acc2);border:1px solid var(--accborder);
  border-radius:6px;padding:0 6px;margin-right:5px}
.otwhy{font-size:12px;color:var(--dim);margin-top:3px}
.otbasis{font-size:11.5px;color:var(--acc2);margin-top:4px;line-height:1.6}
.ostep.nog .otbasis{color:#e6a23c}
.otbusy{max-width:560px;margin:14px auto 0;font-size:12.5px;color:var(--dim);line-height:1.9}
.mhomewrap{flex:1;min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch;padding:18px 16px 20px;scroll-behavior:smooth}
#taskReplyBar{display:none;align-items:center;gap:6px;margin:0 10px 6px;padding:6px 10px;border-radius:9px;
  background:var(--accsoft);border:1px solid var(--accborder);color:var(--acc);font-size:11.5px}
#taskReplyBar.on{display:flex}
#taskReplyBar .x{margin-left:auto;cursor:pointer;color:var(--dim)}
/* v95：IM 内容并入连接模式 —— 图片预览 / 文件卡片 / 通讯录 / 表情 */
.mquote{font-size:11.5px;color:var(--dim2);border-left:2px solid var(--accborder);padding-left:7px;margin-bottom:4px}
/* v142：表情反应（「敲键盘」= 已收到、正在处理） */
.reacts{display:inline-flex;gap:4px;margin-top:6px;align-items:center}
.reacts .rx{display:inline-flex;align-items:center;justify-content:center;min-width:22px;height:20px;
  padding:0 5px;font-size:12.5px;line-height:1;background:var(--card);border:1px solid var(--line);
  border-radius:10px;color:var(--dim);cursor:default;animation:rxn 1.05s ease-in-out infinite}
@keyframes rxn{0%,100%{opacity:.55;transform:translateY(0)}50%{opacity:1;transform:translateY(-1.5px)}}
@media (prefers-reduced-motion:reduce){.reacts .rx{animation:none;opacity:.9}}
.imimg{display:block;max-width:min(300px,74vw);max-height:280px;border-radius:10px;margin:5px 0 2px;
  cursor:zoom-in;border:1px solid var(--line);background:var(--soft)}
.imfile{display:inline-flex;align-items:center;gap:6px;margin:4px 0 2px;padding:7px 11px;border-radius:10px;
  background:var(--soft);border:1px solid var(--line);color:var(--fg1);text-decoration:none;font-size:12.5px;max-width:100%}
.imfile .fic{font-size:14px}
.imfile i{font-style:normal;color:var(--dim2);font-size:11px}
.imfile:hover{border-color:var(--accborder);color:var(--acc)}
.addrmask{display:none;position:fixed;inset:0;background:rgba(12,16,28,.42);z-index:60;align-items:center;justify-content:center;padding:20px}
.addrmask.on{display:flex}
.addrbox{width:min(560px,94vw);max-height:76vh;overflow:auto;background:var(--card);border:1px solid var(--line);
  border-radius:16px;padding:16px 18px;box-shadow:0 18px 50px rgba(10,14,30,.28)}
.addrbox h3{margin:0 0 10px;font-size:14px;color:var(--fg)}
.addrbox .agrp{font-size:11px;color:var(--dim2);margin:12px 0 6px}
.addrrow{display:flex;align-items:center;gap:9px;padding:9px 10px;border-radius:10px;cursor:pointer;border:1px solid transparent}
.addrrow:hover{background:var(--soft);border-color:var(--line)}
.addrrow .cidot{margin:0}
.addrrow .an{color:var(--fg);font-size:13px}
.addrrow .am{margin-left:auto;color:var(--dim2);font-size:11px}
.emopop{display:none;position:absolute;bottom:46px;right:52px;width:min(268px,80vw);background:var(--card);
  border:1px solid var(--line);border-radius:14px;padding:9px 10px;z-index:40;box-shadow:0 14px 36px rgba(10,14,30,.22);
  grid-template-columns:repeat(8,1fr);gap:3px}
.emopop.on{display:grid}
.emopop button{border:0;background:none;font-size:18px;line-height:1;padding:5px 0;border-radius:8px;cursor:pointer}
.emopop button:hover{background:var(--soft)}
/* v94：演示模式界面开关。v176.32：demo 放开全部能力（智能体/记忆/任务/场景/SOP/通知，数据按
   ident='demo' 隔离），只保留 MCP 隐藏 —— 它的勾选写的是服务端全局文件，demo 改了会动到 owner 的配置 */
body.demo #side{display:flex}                              /* v172：演示也能看到侧栏新布局 */
/* 注意：`#attBtn` 是双 id，特异性更高 → 必须写全路径，否则附件按钮照样露出来 */
body.demo #mcpBtn{display:none}   /* v176.32 保留：MCP 勾选落全局文件，仅 owner 可见 */

body.demo #vToggle{display:inline-flex}     /* v96：演示放开语音输入 */
body.demo .loopbtn{display:flex}            /* v96：演示放开发言方式（多模型一起答，含 SOP 流程） */
body.demo #demoBar{display:flex}
#demoBar{display:none;align-items:center;gap:8px;margin-left:auto;font-size:11.5px;color:var(--acc);
  background:var(--accsoft);border:1px solid var(--accborder);border-radius:999px;padding:4px 11px}
#demoBar b{font-weight:600}
#demoBar a{color:var(--acc);text-decoration:underline;cursor:pointer}
body.demo .mcpbar{justify-content:flex-end}
/* v92：模型下拉顶部的「参与对象」条（SOP 步骤的智能体/模型、多选对象） */
.mpart{display:none;border-bottom:1px solid var(--line);padding:9px 11px 10px;background:var(--soft)}
.mpart .ph{font-size:11px;color:var(--dim2);margin-bottom:6px}
.mpart .pchips{display:flex;flex-wrap:wrap;gap:5px}
.pchip{display:inline-flex;align-items:center;gap:4px;font-size:11.5px;color:var(--fg1);background:var(--card);
  border:1px solid var(--accborder);border-radius:999px;padding:3px 9px;max-width:100%;white-space:nowrap;
  overflow:hidden;text-overflow:ellipsis}
.pchip i{font-style:normal;font-size:10px;color:var(--dim2)}
.pchip.gov{border-color:var(--line);color:var(--dim)}
.pchip.miss{border-style:dashed;border-color:#c0455e;color:#c0455e}
/* v87：本体图谱 */
.ogsub{max-width:980px;margin:8px auto 0;display:flex;gap:6px;justify-content:center}
.ogsub button{font-family:inherit;font-size:12.5px;color:var(--dim);background:transparent;
  border:1px solid var(--line);border-radius:999px;padding:6px 14px;cursor:pointer}
.ogsub button.on{color:var(--acc2);border-color:var(--accborder);background:var(--accsoft);font-weight:600}
.ogbar{max-width:980px;margin:12px auto 0;display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.ogbar input{flex:1;min-width:180px;background:var(--bg);border:1px solid var(--line);color:var(--fg);
  border-radius:10px;padding:9px 12px;font-size:13.5px;font-family:inherit}
.ogbar button{font-family:inherit;font-size:13px;color:var(--acc);background:var(--accsoft);
  border:1px solid var(--accborder);border-radius:10px;padding:9px 14px;cursor:pointer}
.ogtypes{max-width:980px;margin:10px auto 0;display:flex;gap:6px;flex-wrap:wrap}
.ogtype{font-family:inherit;font-size:12px;color:var(--fg1);background:var(--card);border:1px solid var(--line);
  border-radius:999px;padding:5px 11px;cursor:pointer;white-space:nowrap}
.ogtype:hover{background:var(--soft)}
.ogtype.on{color:var(--acc2);border-color:var(--accborder);background:var(--accsoft)}
.ogtype i{font-style:normal;color:var(--dim2);margin-left:5px;font-size:11px}
.ogbody{max-width:980px;margin:12px auto 0;display:grid;grid-template-columns:1fr 250px;gap:12px}
@media (max-width:820px){ .ogbody{grid-template-columns:1fr} }
.ogsvg{width:100%;height:460px;background:var(--card);border:1px solid var(--line);border-radius:12px;display:block}
.ogside{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:11px;
  font-size:12.5px;color:var(--fg1);max-height:460px;overflow:auto;line-height:1.75}
.ogside h4{margin:0 0 4px;font-size:13px;color:var(--fg)}
.ogside .t{font-size:11px;color:var(--dim2);margin-bottom:8px}
.ogside .kv{display:flex;gap:6px;padding:3px 0;border-top:1px solid var(--line)}
.ogside .kv b{flex:none;color:var(--dim);font-weight:400;min-width:74px}
.ogside .kv span{color:var(--fg1);word-break:break-word}
.ogside .lk{color:var(--acc2)}
.ogno{max-width:980px;margin:14px auto 0;font-size:12.5px;color:var(--dim);line-height:1.9}



.agta{width:100%;min-height:150px;background:var(--soft);border:1px solid var(--line);border-radius:10px;padding:10px;color:var(--fg);font-family:inherit;font-size:13px;line-height:1.7;resize:vertical;box-sizing:border-box}
.agsel{background:var(--soft);border:1px solid var(--line);color:var(--fg);border-radius:8px;padding:6px 8px;font-family:inherit;font-size:13px;max-width:100%}
.memtxt{font-size:13.5px;line-height:1.65;color:var(--fg1)}
.memsrc{font-size:11.5px;color:var(--dim);line-height:1.5}
.agcnt{font-size:11.5px;color:var(--dim)}
.agmcp{font-size:12.5px;color:var(--dim);line-height:2}
.agtabs{display:flex;gap:6px;padding:9px 15px 0;background:var(--card)}
.agtab{background:transparent;border:1px solid transparent;color:var(--dim);border-radius:9px;padding:6px 13px;font-size:13px;font-family:inherit;cursor:pointer;min-height:32px}
.agtab.on{color:var(--acc);border-color:var(--accborder);background:var(--accsoft)}
.agmeth{flex:none;color:var(--dim2);font-size:11.5px;white-space:nowrap}
.agmeth.agstate{min-width:46px;text-align:right}
.agrowbtn{flex:none;padding:7px 15px;min-height:34px;font-size:13px}
.tkrow .tkname{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tkrow .tkmeta{color:var(--dim2);font-size:11.5px;margin-left:7px}
/* v176.x 任务执行记录详情（标题 + 通道徽章 + body 摘要 + 展开/收起） */
.tkrunrow{flex-wrap:wrap}
.tkrunrow .tkname{display:flex;align-items:baseline;gap:7px;flex:1 1 auto;min-width:0;white-space:normal;overflow:visible;text-overflow:clip}
.tkrun-title{font-size:13.5px;color:var(--fg);max-width:240px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tkrun-chans{display:flex;gap:5px;flex:none;margin-left:auto;padding-left:8px}
.tkbadge{display:inline-block;font-size:11px;padding:2px 8px;border-radius:9px;border:1px solid var(--line);color:var(--dim);background:var(--card2);line-height:1.4}
.tkbadge.tkok{color:var(--acc);border-color:var(--accborder);background:var(--accsoft)}
.tkbadge.tkfail{color:#f87171;border-color:#7f1d1d;background:#7f1d1d33}
.tkrun-body{width:100%;margin-top:6px;padding:6px 10px;background:var(--bg2);border-radius:8px;font-size:12px;color:var(--dim);cursor:pointer;line-height:1.5;word-break:break-all;white-space:pre-wrap}
.tkrun-body.tkrun-body-open{color:var(--fg);background:var(--card);border:1px solid var(--line)}
.tkrun-more{margin-left:8px;color:var(--acc);font-size:11px;text-decoration:underline}
.tkmini{flex:none;background:transparent;border:1px solid var(--line);color:var(--dim);border-radius:8px;padding:3px 9px;font-size:12px;font-family:inherit;cursor:pointer;min-height:26px}
.tkmini:hover{color:var(--acc);border-color:var(--accborder);background:var(--accsoft)}
.ntcmsg{display:flex;gap:9px;margin:10px 0;border:1px solid var(--accborder);background:var(--accsoft);border-radius:12px;padding:10px 12px}
.ntcav{flex:none;font-size:15px;line-height:1.45}
.ntcmain{flex:1;min-width:0}
.ntchd{display:flex;align-items:center;gap:8px;font-size:13.5px}
.ntchd b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ntchd i{margin-left:auto;color:var(--dim);font-size:11.5px;font-style:normal;white-space:nowrap}
.ntcx{cursor:pointer;color:var(--dim2);font-size:13px;padding:0 3px;flex:none}
.ntcb{color:var(--fg1);font-size:13px;line-height:1.7;white-space:pre-wrap;margin-top:3px}
.agf{display:flex;gap:9px;padding:12px 15px;border-top:1px solid var(--line);background:var(--card)}
.agf .cp{flex:1;min-height:42px;font-size:13.5px}
.clist{flex:1;overflow-y:auto;padding:4px 8px 10px;-webkit-overflow-scrolling:touch}
/* v134：任务设置（顶栏按钮 + 弹层） */
.tkhd .tkset{margin-left:auto;padding:2px 10px;border:1px solid var(--line);border-radius:999px;background:transparent;
  color:var(--dim);font-size:11.5px;cursor:pointer;font-family:inherit;flex:none}
.tkhd .tkset:hover{color:var(--acc);border-color:var(--accborder);background:var(--accsoft)}
.tksbox .tklbl{font-size:12px;color:var(--dim2);margin:14px 0 6px}
.tksbox .tkloops{display:flex;flex-wrap:wrap;gap:6px}
.tksbox .tkloop{padding:5px 12px;border:1px solid var(--line);border-radius:999px;background:var(--card);
  color:var(--fg2);font-size:12.5px;cursor:pointer;font-family:inherit}
.tksbox .tkloop.on{background:var(--accsoft);border-color:var(--accborder);color:var(--acc);font-weight:600}
.tksbox .tkmemlist{display:flex;flex-wrap:wrap;gap:6px;min-height:26px}
.tksbox .tkchip{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border:1px solid var(--line);
  border-radius:999px;background:var(--card);font-size:12px;color:var(--fg)}
.tksbox .tkchip .x{cursor:pointer;color:var(--dim2);font-style:normal}
.tksbox .tkchip .x:hover{color:#c0392b}
.tksbox .tkadds{display:flex;flex-direction:column;gap:8px;max-height:200px;overflow:auto}
.tksbox .tkaddrow{display:flex;flex-wrap:wrap;align-items:center;gap:6px}
.tksbox .tkaddt{font-size:11.5px;color:var(--dim2);width:46px;flex:none}
.tksbox .tkaddb{padding:3px 9px;border:1px dashed var(--line);border-radius:999px;background:transparent;
  color:var(--fg2);font-size:11.5px;cursor:pointer;font-family:inherit}
.tksbox .tkaddb:hover{border-color:var(--accborder);color:var(--acc);border-style:solid}
/* v133：会话批量选择 */
.secpick{padding:0 7px;height:22px;border:1px solid var(--line);border-radius:6px;background:transparent;
  color:var(--dim);font-size:11.5px;cursor:pointer;font-family:inherit;margin-right:4px}
.secpick:hover{color:var(--acc);border-color:var(--accborder)}
.secpick.on{color:var(--acc);border-color:var(--accborder);background:var(--accsoft)}
.convbar{display:flex;align-items:center;gap:6px;padding:6px 8px 2px;font-size:12px;color:var(--dim)}
.convbar button{padding:3px 9px;border:1px solid var(--line);border-radius:999px;background:var(--card);
  color:var(--fg2);font-size:11.5px;cursor:pointer;font-family:inherit}
.convbar button:hover{border-color:var(--accborder);color:var(--acc)}
.convbar button.danger{color:#c0392b;border-color:rgba(192,57,43,.35)}
#clist .citem.sel{background:var(--accsoft);border-color:var(--accborder)}
/* v136：进入批量模式后每行都显示勾选框（之前只有已选的才有标记，看不出来能勾） */
#clist.picking .citem{display:flex;align-items:center;gap:2px}
#clist.picking .citem::before{content:'';flex:none;width:15px;height:15px;margin-right:8px;border-radius:4px;
  border:1.6px solid var(--line);box-sizing:border-box;display:inline-block}
#clist.picking .citem.sel::before{content:'✓';background:var(--acc);border-color:var(--acc);color:#fff;
  font-size:11px;line-height:15px;text-align:center}
#clist.picking .citem .cacts{display:none}
/* v168：会话分组小标题（今天 / 昨天 / 更早） */
.cgrp{padding:14px 12px 6px;font-size:10.5px;font-weight:600;color:var(--dim2);
  letter-spacing:1.4px;text-transform:uppercase}
.cgrp:first-child{padding-top:8px}
/* v145：任务列表也要勾选框 —— 之前只给 #clist 写了 CSS，所以点「批量」后任务行没有勾选框 */
#tlist.picking .citem{display:flex;align-items:center;gap:2px}
#tlist.picking .citem::before{content:'';flex:none;width:15px;height:15px;margin-right:8px;border-radius:4px;
  border:1.6px solid var(--line);box-sizing:border-box;display:inline-block}
#tlist.picking .citem.sel::before{content:'✓';background:var(--acc);border-color:var(--acc);color:#fff;
  font-size:11px;line-height:15px;text-align:center}
#tlist.picking .citem .cacts{display:none}
/* v176.19：记忆批量选择 —— 点整行即选中（勾选框只是视觉提示，不用点它） */
#memBody.picking .agsec[data-mid]{cursor:pointer}
#memBody.picking .agsec[data-mid]:hover{border-color:var(--accborder)}
#memBody.picking .agsec[data-mid] .agsect{display:flex;align-items:center;gap:8px}
#memBody.picking .agsec[data-mid] .agsect::before{content:'';flex:none;width:15px;height:15px;border-radius:4px;
  border:1.6px solid var(--line);box-sizing:border-box}
#memBody.picking .agsec[data-mid].sel .agsect::before{content:'✓';background:var(--acc);border-color:var(--acc);color:#fff;
  font-size:11px;line-height:15px;text-align:center}
#memBody.picking .agsec[data-mid].sel{border-color:var(--accborder);background:var(--accsoft)}
#memSelBar{flex-wrap:wrap}
#memSelBar .cp.danger{color:#c0392b;border-color:rgba(192,57,43,.35)}
#memFoot .cp.on{border-color:var(--accborder);color:var(--acc);background:var(--accsoft)}
/* v159：任务页头关联愿景按钮 + 标签 */
.tkvis{font-size:12px;color:var(--dim);border:1px solid var(--line);border-radius:999px;padding:2px 9px;background:var(--card);cursor:pointer;font-family:inherit;margin-left:auto}
.tkvis:hover{color:var(--acc);border-color:var(--accborder)}
.tkvistag{font-size:11.5px;color:var(--acc);background:var(--accsoft);border:1px solid var(--accborder);border-radius:999px;padding:2px 9px;margin-left:6px;max-width:240px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.visline{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:6px;cursor:pointer;font-size:13px}
.visline:hover{background:var(--soft)}
.visline span{flex:1;min-width:0}
.visline .vm{font-size:11px;color:var(--dim);border:1px solid var(--line);border-radius:999px;padding:0 6px}
/* v158：已完成任务弱化 + 分隔 */
#tlist .tkdonehd{font-size:11px;color:var(--dim2);padding:8px 8px 4px;border-top:1px dashed var(--line2);margin-top:6px}
/* v196.12（曾健）：任务标题统一为黑色展示，不再按已完成置灰 */
#tlist .citem.tkdone .ct{color:inherit}
#tlist .citem.tkdone .tkdonetag{flex:none;font-size:10.5px;color:#3ecf8e;border:1px solid rgba(62,207,142,.45);border-radius:999px;padding:0 7px;line-height:18px;margin-left:6px;background:rgba(62,207,142,.08)}
#tlist .citem.sel{background:var(--accsoft);border-color:var(--accborder)}
#tlist .tkseq{flex:none;font-size:10.5px;font-family:var(--mono);color:var(--dim2);
  border:1px solid var(--line);border-radius:5px;padding:0 4px;margin-right:6px}
/* v133：洞察提取弹层 */
.insmask{position:fixed;inset:0;background:rgba(12,16,28,.5);backdrop-filter:blur(3px);display:none;z-index:1200;
  align-items:center;justify-content:center;padding:20px}
.insmask.on{display:flex}
.insbox{width:min(720px,94vw);max-height:86vh;display:flex;flex-direction:column;background:var(--card);
  border:1px solid var(--line);border-radius:14px;padding:18px 18px 14px;overflow:auto}
.insbox h3{margin:0 0 8px;font-size:16px;color:var(--fg)}
.insbox .inshint{font-size:12px;color:var(--dim);margin-bottom:8px;line-height:1.6}
.insbox textarea{width:100%;box-sizing:border-box;padding:9px 10px;border:1px solid var(--line);border-radius:9px;
  background:var(--bg);color:var(--fg);font-family:inherit;font-size:13px;resize:vertical}
.insbox .insacts{display:flex;gap:8px;margin:10px 0}
.insbox .insacts button{padding:6px 14px;border-radius:9px;border:1px solid var(--line);background:var(--card);
  color:var(--fg2);font-size:13px;cursor:pointer;font-family:inherit}
.insbox .insacts button:hover{border-color:var(--accborder);color:var(--acc)}
.insbox .insacts button.insgo{background:var(--accsoft);border-color:var(--accborder);color:var(--acc);font-weight:600}
.insbox .insacts button:disabled{opacity:.55;cursor:default}
.insbox .insout{white-space:pre-wrap;font-size:13px;line-height:1.75;color:var(--fg);background:var(--soft);
  border:1px solid var(--line);border-radius:10px;padding:12px;min-height:120px;font-family:inherit}
/* ═══ v106：左侧栏改成「分区列表」—— 对话 / 任务 / 连接 / 本体 全都在左栏，
       顶部不再有四个模式的切换菜单 ═══ */
.sidebody{flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden;padding-bottom:4px}
.sidesec{display:flex;flex-direction:column;border-top:1px solid var(--line);padding-top:2px}
.sidesec:first-child{border-top:0}
/* v109：左栏一个模式只显示一个分区，所以这个分区吃满整栏高度 ——
   原来封顶 34vh，笔记本上只看得到 ~6 条（曾健反馈「会话列表太短」） */
.sidesec .clist{flex:none;max-height:34vh}
.sidesec.on{flex:1;min-height:0}
.sidesec.on .clist{flex:1;min-height:0;max-height:none}
.sidesec.sec-on{background:transparent}
.sidesec .lbl{display:flex;align-items:center;gap:6px}
.sidesec .lbl>span:first-child{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}  /* v137：把按钮推到右侧 */
.sidesec .lbl.on span:first-child{color:var(--acc)}
.sidesec .lbl .lbldim{font-weight:400;font-size:11px;color:var(--dim2);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.secadd{flex:none;margin-left:auto;width:20px;height:20px;line-height:1;padding:0;border:1px solid var(--line);background:var(--card);
  color:var(--dim);border-radius:6px;font-size:12px;font-family:inherit;cursor:pointer}
.secadd:hover{color:var(--acc);border-color:var(--accborder);background:var(--accsoft)}
/* v171+：置顶 / 分组小标签 */
.cgrp{font-size:11px;color:var(--dim2);letter-spacing:1px;padding:10px 12px 6px;text-transform:uppercase}
.cgrp.pin{color:var(--acc);display:flex;align-items:center;gap:5px;padding-top:14px;letter-spacing:normal;text-transform:none;font-weight:600;font-size:12px}
.cgrp.pin::before{content:"\00a0";display:inline-block;width:10px;height:10px;border-radius:2px;background:linear-gradient(140deg,var(--acc),var(--acc2));flex:none}
.cgrp .x{margin-left:auto;font-weight:400;font-size:11px;color:var(--dim2);cursor:pointer;border:0;background:none;font-family:inherit}
.cgrp .x:hover{color:var(--acc)}
/* v171：场景卡片（独立项，比对话 / 任务更宽的卡片感） */
.scn{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:11px;cursor:pointer;color:var(--fg1);line-height:1.45}
.scn:hover{background:var(--soft)}
.scn .ico{flex:0 0 32px;width:32px;height:32px;border-radius:9px;display:grid;place-items:center;background:var(--accsoft);color:var(--acc);font-size:15px;font-weight:700;border:1px solid var(--accborder)}
.scn .tx{flex:1;min-width:0}
.scn .ti{font-size:13.5px;font-weight:600;letter-spacing:.5px}
.scn .de{font-size:11.5px;color:var(--dim2);margin-top:2px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.scn .tag{font-size:11px;color:var(--dim);flex:none;padding:2px 7px;border:1px solid var(--line);border-radius:999px;background:var(--card)}
/* v171：侧栏底部共用批量条 */
.sidebatch{display:flex;align-items:center;gap:6px;padding:10px 14px calc(8px + env(safe-area-inset-bottom));
  border-top:1px solid var(--line);background:var(--bg2);font-size:12.5px;color:var(--fg1);flex-wrap:wrap}
.sidebatch[hidden]{display:none}
.sidebatch .danger{color:var(--bad);border-color:rgba(192,69,94,.4)}
.sidebatch button{background:var(--card);border:1px solid var(--line);color:var(--dim);border-radius:9px;
  padding:5px 10px;font-size:12px;cursor:pointer;font-family:inherit}
.sidebatch button:hover{color:var(--acc);border-color:var(--accborder)}
.sidebatch #sideBatchCnt{flex:1;font-size:12px;color:var(--dim2)}

/* v171：场景模式下的主页 —— 极简、卡片网格 */
.empty.scene-home{padding:5vh 18px 8vh;max-width:780px;margin:0 auto;text-align:center}
.empty.scene-home .emark{font-family:"Noto Serif SC",serif;font-size:38px;letter-spacing:6px;color:var(--fg);font-weight:600;margin-bottom:14px}
.empty.scene-home .tkmotto{font-size:12.5px;color:var(--dim2);letter-spacing:1px;margin-bottom:32px;font-family:-apple-system,"PingFang SC",sans-serif}
.empty.scene-home .scngrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px;text-align:left}
.empty.scene-home .scngrid .scn{display:flex;border:1px solid var(--line);background:var(--card);border-radius:14px;padding:13px 14px;gap:11px;cursor:pointer;align-items:flex-start;line-height:1.5}
.empty.scene-home .scngrid .scn:hover{border-color:var(--accborder);background:var(--soft);transform:translateY(-2px)}
.empty.scene-home .scngrid .scn .ico{flex:0 0 36px;width:36px;height:36px;border-radius:10px;font-size:16px;font-weight:700}
.empty.scene-home .scngrid .scn .ti{font-size:14px;font-weight:600;letter-spacing:.5px}
.empty.scene-home .scngrid .scn .de{font-size:11.5px;line-height:1.55;margin-top:5px}
.empty.scene-home .scngrid .scn .tag{font-size:10.5px;padding:2px 8px}

/* v171：场景模板选择弹层 —— 大气、克制  */
.scnpick{position:fixed;inset:0;z-index:9999;background:rgba(10,14,26,.46);display:flex;align-items:center;justify-content:center;padding:24px}
.scnpickpanel{width:min(820px,96vw);max-height:84vh;display:flex;flex-direction:column;background:var(--bg);border:1px solid var(--line);border-radius:18px;overflow:hidden;box-shadow:0 30px 70px rgba(10,14,30,.35)}
.scnpickpanel .spp-h{display:flex;align-items:center;padding:14px 18px;border-bottom:1px solid var(--line);background:var(--card)}
.scnpickpanel .spp-h b{flex:1;font-size:15px;font-weight:600;letter-spacing:1px}
.scnpickpanel .spp-h .x{padding:4px 10px;border-radius:8px;background:var(--soft);border:1px solid var(--line);cursor:pointer;font-size:13px;color:var(--dim)}
.scnpickpanel .spp-h .x:hover{color:var(--acc);border-color:var(--accborder)}
.scnpickpanel .spp-b{padding:18px;overflow:auto;display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px}
.scnpickpanel .scncard{display:flex;gap:11px;align-items:flex-start;border:1px solid var(--line);background:var(--card);border-radius:14px;padding:13px 14px;cursor:pointer;text-align:left;font-family:inherit;color:var(--fg1);line-height:1.5;transition:.18s}
.scnpickpanel .scncard:hover{border-color:var(--accborder);background:var(--soft);transform:translateY(-2px)}
.scnpickpanel .scncard .ico{flex:0 0 36px;width:36px;height:36px;border-radius:10px;display:grid;place-items:center;background:var(--accsoft);color:var(--acc);font-size:16px;font-weight:700;border:1px solid var(--accborder)}
.scnpickpanel .scncard .tx{flex:1;min-width:0}
.scnpickpanel .scncard b{display:block;font-size:14px;font-weight:600;margin-bottom:4px}
.scnpickpanel .scncard i{font-style:normal;font-size:11.5px;color:var(--dim2);line-height:1.55;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.scnpickpanel .scncard .tag{font-size:10.5px;color:var(--dim);border:1px solid var(--line);border-radius:999px;padding:1px 8px;background:var(--bg);margin-top:6px;display:inline-block}
.scnpickpanel .spp-f{padding:10px 18px;border-top:1px solid var(--line);background:var(--card);font-size:12px;color:var(--dim2);text-align:center}

/* ═══ v176：Skill 市场 ═══ */
.skm-search{margin:12px 18px 0;display:flex}
.skm-search input{flex:1;min-width:0;background:var(--card);border:1px solid var(--line);border-radius:10px;padding:9px 12px;font-size:13px;color:var(--fg);outline:none;font-family:inherit}
.skm-search input:focus{border-color:var(--accborder)}
.skm-add{margin-left:8px;white-space:nowrap;background:var(--accsoft);border:1px solid var(--accborder);color:var(--acc);border-radius:10px;padding:0 14px;font-size:12.5px;cursor:pointer;font-family:inherit;font-weight:600}
.skm-add:hover{filter:brightness(.96)}
.skm-tags{display:flex;gap:6px;flex-wrap:wrap;padding:12px 18px 2px}
.skm-tag{font-size:12px;padding:5px 13px;border-radius:999px;border:1px solid var(--line);background:var(--card);color:var(--dim);cursor:pointer;font-family:inherit}
.skm-tag.on{color:var(--acc);border-color:var(--accborder);background:var(--accsoft);font-weight:600}
.scnpickpanel .skm-card{display:flex;flex-direction:column;gap:9px;border:1px solid var(--line);background:var(--card);border-radius:14px;padding:13px 14px;font-family:inherit;color:var(--fg1);text-align:left}
.scnpickpanel .skm-card:hover{border-color:var(--accborder)}
.scnpickpanel .skm-card .skm-top{display:flex;gap:11px;align-items:flex-start;min-width:0}
.scnpickpanel .skm-card b small{font-weight:400;font-size:10.5px}
.scnpickpanel .skm-card .tag{margin-top:6px}
.skm-acts{display:flex;gap:6px;flex-wrap:wrap}
.skm-btn{font-size:12px;padding:5px 12px;border-radius:8px;border:1px solid var(--line);background:var(--bg);color:var(--fg1);cursor:pointer;font-family:inherit}
.skm-btn.pri{background:var(--accsoft);border-color:var(--accborder);color:var(--acc);font-weight:600}
.skm-btn:hover{border-color:var(--accborder)}
.skm-btn.ghost{color:var(--dim)}
.skm-empty{grid-column:1/-1;text-align:center;color:var(--dim2);font-size:12.5px;padding:34px 0}
.skmform{display:flex;flex-direction:column;gap:11px;padding:14px 18px;overflow:auto}
.skmform label{font-size:12px;color:var(--dim);display:flex;flex-direction:column;gap:5px}
.skmform input,.skmform textarea{background:var(--card);border:1px solid var(--line);border-radius:9px;padding:9px 11px;font-size:13px;color:var(--fg);outline:none;font-family:inherit}
.skmform input:focus,.skmform textarea:focus{border-color:var(--accborder)}
.skmform textarea{min-height:88px;resize:vertical;line-height:1.6}
.skmform textarea.mono{font-family:ui-monospace,Menlo,monospace;font-size:12px}
.empty.scene-home .skhome-head{display:flex;align-items:center;gap:10px;margin:14px 0 12px}
.empty.scene-home .skhome-head b{font-size:13px;letter-spacing:2px;color:var(--dim)}
.empty.scene-home .skhome-head .ghost-btn{min-height:34px}

/* v171：左侧 scn 卡片里的置顶小星 */
.pinmark{font-size:11px;color:var(--acc);flex:none;font-weight:600;letter-spacing:1px}
.citem .cchk{flex:none;margin-right:6px}
.memlayers{display:flex;flex-wrap:wrap;gap:6px;padding:0 15px 8px}
.memlay{display:inline-flex;align-items:center;gap:5px;padding:4px 10px;border:1px solid var(--line);background:var(--card);
  color:var(--dim);border-radius:999px;font-size:12px;font-family:inherit;cursor:pointer}
.memlay:hover{border-color:var(--accborder)}
.memlay.on{border-color:var(--acc);color:var(--acc);background:var(--accsoft)}
.memlay .n{font-size:10.5px;opacity:.75}
.memlay.sep{margin-left:auto;border-style:dashed}
.memsub{padding:6px 15px 0}
.mempsub{font-size:11.5px;color:var(--dim2);padding:0 15px 6px}
.membadge{display:inline-block;padding:1px 7px;border-radius:999px;font-size:10.5px;border:1px solid var(--line);
  background:var(--soft);color:var(--dim);margin-right:6px}
.membadge.l-essence{border-color:var(--accborder);color:var(--acc);background:var(--accsoft)}
.membadge.l-summary{color:var(--fg1)}
.membadge.l-raw{color:var(--dim2)}
.memlay-pick{font-size:11.5px;font-family:inherit;border:1px solid var(--line);background:var(--card);color:var(--dim);
  border-radius:7px;padding:2px 5px}
.rcbox{border:1px solid var(--line);border-radius:10px;background:var(--soft);padding:9px 11px;margin:0 15px 10px;
  font-size:12px;color:var(--fg1);white-space:pre-wrap;max-height:240px;overflow:auto}
.rcrow{display:flex;align-items:center;gap:8px;padding:7px 0;flex-wrap:wrap}
.rcrow label{color:var(--fg1);font-size:13px}
.rcrow .agmeth{color:var(--dim2);font-size:11px}
.rcdo{display:inline-flex;align-items:center;gap:5px;padding:3px 8px;border-left:1px solid var(--line);color:var(--dim2);
  font-size:11px;background:none;border-top:0;border-right:0;border-bottom:0;font-family:inherit;cursor:pointer}
.rcdo:hover{color:var(--acc)}
.rcmode{display:flex;flex-wrap:wrap;gap:6px;padding:0 0 4px}
.rcmode button{padding:5px 10px;border:1px solid var(--line);background:var(--card);color:var(--dim);border-radius:999px;
  font-size:12px;font-family:inherit;cursor:pointer}
.rcmode button.on{border-color:var(--acc);color:var(--acc);background:var(--accsoft)}
/* 莫比乌斯环的 5 个页签：每个 pane 占满剩余高度、内部自滚 */
.mempane{display:none}
.mempane.on{display:flex;flex-direction:column;flex:1;min-height:0}
.cidot{width:7px;height:7px;border-radius:50%;background:var(--line2);flex:none}
.cidot.on{background:#3ec07a;box-shadow:0 0 0 3px rgba(62,192,122,.16)}
.cic{flex:none;font-size:12px;opacity:.75}
.cnone{color:var(--dim2);font-size:12.5px;padding:14px 10px;line-height:1.8}
.citem .cm.und{color:var(--acc2);font-weight:600}
/* 左侧栏滚动条隐藏（曾健 2026-09-13）：滚动照旧，只是不显示条 */
#side,#side *{scrollbar-width:none;-ms-overflow-style:none}
#side::-webkit-scrollbar,#side *::-webkit-scrollbar{width:0;height:0;display:none}
.lb-foot::-webkit-scrollbar{display:none}
.lb-foot{scrollbar-width:none}
.citem{display:flex;align-items:center;gap:8px;padding:9px 10px;border-radius:9px;cursor:pointer;color:var(--fg1);font-size:13.5px;line-height:1.4}
.citem:hover,.citem.on{background:var(--soft)}
.citem.on{color:var(--acc2)}
.citem .ct{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.citem .cm{font-size:11px;color:var(--dim2);flex:none}
.citem .cacts{display:none;gap:4px;flex:none}
.citem:hover .cacts,.citem.on .cacts{display:flex}
.citem .cb{background:var(--card);border:1px solid var(--line2);color:var(--fg1);font-size:13px;cursor:pointer;padding:2px 6px;border-radius:7px;line-height:1.2}
.citem .cb:hover{color:var(--bad)}
.aside-f{padding:10px 14px calc(12px + env(safe-area-inset-bottom));border-top:1px solid var(--line);font-size:11.5px;color:var(--dim2);line-height:1.8}
.aside-f a{color:var(--dim);text-decoration:none}
.aside-f a:hover{color:var(--acc2)}
/* 主区 */
.main{flex:1;display:flex;flex-direction:column;min-width:0}
.topbar{display:flex;align-items:center;gap:10px;padding:10px 14px;border-bottom:1px solid var(--line);background:var(--bg)}
.topbar{padding-top:calc(10px + env(safe-area-inset-top,0px))}  /* v175.4.3 + v168：safe-area 只归 top；原来误写进 shorthand 的 bottom，真机上顶栏被多撑高一个刘海 */
select#model{background:var(--card);border:1px solid var(--line);color:var(--fg1);padding:9px 11px;border-radius:9px;font-size:13.5px;outline:none;min-height:40px;max-width:min(60vw,320px)}
#menuBtn{display:none;background:var(--card);border:1px solid var(--line);color:var(--fg1);border-radius:9px;min-height:40px;min-width:40px;font-size:17px;cursor:pointer}
.spacer{flex:1}
.st{font-size:11.5px;color:var(--dim2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.msgs{flex:1;overflow-y:auto;-webkit-overflow-scrolling:touch;padding:20px 16px 8px;scroll-behavior:smooth}
/* v175.2：对话框上方靠右小工具条（暂只放交付物 #artBtn；desktop only） */
.chat-toolbar{display:flex;align-items:center;justify-content:flex-end;gap:8px;padding:6px 16px 2px;background:var(--bg);max-width:820px;margin:0 auto;width:100%;box-sizing:border-box}
.chat-toolbar #artBtn{margin-left:0}
.wrap{max-width:820px;margin:0 auto}
.empty{max-width:680px;margin:9vh auto 0;text-align:center;color:var(--dim)}
.empty h2{font-family:"Noto Serif SC",serif;font-size:25px;letter-spacing:3px;color:var(--fg);margin-bottom:12px;font-weight:500}
.empty p{font-size:13.5px;line-height:2}
.chips{display:flex;flex-wrap:wrap;gap:9px;justify-content:center;margin-top:20px}
.chip{background:var(--card);border:1px solid var(--line);color:var(--dim);padding:9px 13px;border-radius:999px;font-size:12.5px;cursor:pointer}
.chip:active{border-color:var(--accborder);color:var(--acc2)}
.msg{display:flex;gap:11px;padding:12px 0;align-items:flex-start}
.msg .av{flex:none;width:28px;height:28px;border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:600;background:var(--accsoft);color:var(--acc);border:1px solid var(--accborder)}
.msg.u .av{background:var(--soft);color:var(--dim);border-color:var(--line)}
.msg .body{flex:1;min-width:0;font-size:15px;line-height:1.78;color:var(--fg1);word-wrap:break-word;overflow-wrap:anywhere}
.msg.u .body{color:var(--fg)}
.md>*:first-child{margin-top:0}.md>*:last-child{margin-bottom:0}
.md h1,.md h2,.md h3,.md h4{color:var(--fg);line-height:1.35;margin:1em 0 .5em;font-weight:600}
.md h1{font-size:1.5em}.md h2{font-size:1.3em}.md h3{font-size:1.13em}.md h4{font-size:1em}
.md p{margin:.6em 0}
.md ul,.md ol{margin:.55em 0;padding-left:1.5em}
.md li{margin:.28em 0}
.md a{color:var(--acc2)}
.md blockquote{border-left:3px solid var(--accborder);padding:.2em 0 .2em .9em;margin:.7em 0;color:var(--dim)}
.md hr{border:none;border-top:1px solid var(--line);margin:1em 0}
.md code{background:var(--code);border:1px solid var(--line);border-radius:5px;padding:1px 5px;font-family:ui-monospace,Menlo,Consolas,monospace;font-size:.88em;color:var(--fg)}
.md pre{margin:0;padding:13px 14px;overflow-x:auto;-webkit-overflow-scrolling:touch}
.md pre code{background:none;border:none;padding:0;font-size:12.5px;line-height:1.65;color:var(--fg1)}
.codebox{position:relative;background:var(--code);border:1px solid var(--line);border-radius:11px;margin:.7em 0;overflow:hidden}
.cbar{display:flex;align-items:center;gap:6px;padding:6px 10px;border-bottom:1px solid var(--line);font-size:11px;color:var(--dim2);font-family:ui-monospace,Menlo,monospace}
.cbar>span:first-child{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-right:auto}
.cbar .cp{flex:0 0 auto}
.cbar .cp{background:var(--card);border:1px solid var(--line);color:var(--dim);border-radius:6px;padding:3px 10px;font-size:11px;cursor:pointer;min-height:26px}
.cbar .cp:active{color:var(--acc2);border-color:var(--accborder)}
/* ═══ v35：.cp 全局兜底 —— 「预览 / 全屏 / 下载代码 / 新窗口 / 收起」这些按钮不在 .cbar 里，
   此前没有任何基础样式 → 渲染成浏览器默认灰按钮，跟站内按钮风格明显不是一套。
   注意别删：.cbar .cp / .agf .cp 是更高优先级的局部覆写，仍然生效 ═══ */
.cp{display:inline-flex;align-items:center;justify-content:center;gap:5px;background:var(--card);border:1px solid var(--line);color:var(--dim);border-radius:8px;padding:5px 12px;font-size:12px;min-height:30px;cursor:pointer;font-family:inherit;white-space:nowrap;transition:color .15s,border-color .15s,background .15s}
.cp:hover{color:var(--acc2);border-color:var(--accborder);background:var(--accsoft)}
.md table{border-collapse:collapse;margin:.7em 0;font-size:13.5px;width:100%;display:block;overflow-x:auto}
.md th,.md td{border:1px solid var(--line);padding:8px 11px;text-align:left;white-space:nowrap}
.md th{background:var(--soft);color:var(--fg);font-weight:600}
.svgbox{margin:.75em 0;padding:14px;background:var(--card);border:1px solid var(--line);border-radius:12px;overflow-x:auto;text-align:center}
/* v152：HTML 预览卡片 */
.htmlbox{margin:.75em 0;border:1px solid var(--line);border-radius:12px;overflow:hidden;background:var(--card)}
.htmlbar{display:flex;gap:6px;align-items:center;padding:7px 10px;border-bottom:1px solid var(--line2);background:#fafbfe;flex-wrap:wrap}
.hbtn{padding:3px 11px;font-size:12px;line-height:1.7;border:1px solid var(--line);border-radius:7px;background:#fff;cursor:pointer;color:var(--dim)}
.hbtn:hover{border-color:var(--accborder);color:var(--acc)}
.hbtn.on{background:var(--accsoft);border-color:var(--accborder);color:var(--acc);font-weight:500}
.hsz{margin-left:auto;font-size:11.5px;color:var(--dim2)}
.htmlprev{background:#fff}
.htmlifr{width:100%;height:460px;border:0;display:block;background:#fff}
.htmlcode{max-height:460px;overflow:auto;background:#fbfcfe}
.htmlcode pre{margin:0;padding:12px;font-size:12.5px;line-height:1.65}
@media(max-width:640px){ .htmlifr{height:340px} }
.svgbox svg{max-width:100%;height:auto;display:inline-block}
.svgcap{font-size:11px;color:var(--dim2);margin-top:8px;letter-spacing:1px}
.err{background:rgba(192,69,94,.10);border:1px solid var(--bad);color:var(--bad);border-radius:10px;padding:10px 13px;font-size:13px;margin:.6em 0;white-space:pre-wrap;word-break:break-word}
.thinkbox{margin:2px 0 9px;border:1px solid var(--line);background:var(--soft);border-radius:10px;padding:7px 11px}
.thinkbox summary{cursor:pointer;font-size:12px;color:var(--dim);list-style:none;display:flex;align-items:center;gap:5px}
.thinkbox summary::-webkit-details-marker{display:none}
.thinkbox summary::before{content:'▸';color:var(--dim2);font-size:11px}
.thinkbox[open] summary::before{content:'▾'}
.thinkbody{margin-top:7px;white-space:pre-wrap;line-height:1.75;font-size:12.5px;color:var(--dim);max-height:320px;overflow:auto}
.tabpane{padding-bottom:14px}
.cursor{scroll-margin-bottom:18px}
.cursor{display:inline-block;margin-left:5px;vertical-align:-1px;font-size:13.5px;line-height:1;
  color:var(--acc);opacity:.5;animation:curInf 1.8s ease-in-out infinite;transform-origin:50% 55%}
.cursor::before{content:'\221E'}                       /* ∞ 躺着的 8 */
@keyframes curInf{0%,100%{opacity:.26;transform:scale(.9)}50%{opacity:.68;transform:scale(1.05)}}
@media (prefers-reduced-motion:reduce){.cursor{animation:none;opacity:.6}}
/* 输入区 */
.composer{border-top:1px solid var(--line);background:var(--bg);padding:12px 14px calc(14px + env(safe-area-inset-bottom))}
.cwrap{max-width:820px;margin:0 auto;display:flex;align-items:flex-end;gap:9px;background:var(--card);border:1px solid var(--line);border-radius:15px;padding:9px 9px 9px 14px;box-shadow:var(--shadow)}
.cwrap:focus-within{border-color:var(--accborder)}
#input{flex:1;background:none;border:none;color:var(--fg);font-size:15px;line-height:1.6;resize:none;outline:none;max-height:180px;font-family:inherit;padding:7px 0}
#input::placeholder{color:var(--dim2)}
#send,#stop{flex:none;width:38px;height:38px;border-radius:10px;border:1px solid var(--accborder);background:var(--accsoft);color:var(--acc);font-size:17px;cursor:pointer;display:flex;align-items:center;justify-content:center}
#send:disabled{opacity:.4;cursor:default}
#stop{background:rgba(192,69,94,.10);border-color:var(--bad);color:var(--bad);font-size:13px}
.hint{max-width:820px;margin:7px auto 0;font-size:11px;color:var(--dim2);text-align:center}
.scrim{display:none;position:fixed;inset:0;background:rgba(10,12,20,.42);z-index:30}

/* v174：mobile (≤760px) 重布局 —— desktop 上 #app{height:100vh; display:flex} 自带 side+main；
   但 main/aside-f/sideBody 实际挂在 body 直接子节点，desktop 上 body 默认静态布局它们会
   自然按顺序排开；mobile 上 #app 本身高度 100vh 把它们全部推到屏幕外。改为让 #app
   高度自适应，body 变 flex 让 main/aside-f/sideBody 在 app 之后自然堆叠。
   ⚠️ 只动 mobile，desktop 不变 —— 所以 #sideBody 不需要 display:none（它在 desktop 上
   一直在 #aside 内显示） */
@media (max-width:760px){
  body{display:flex;flex-direction:column;height:100vh;height:100dvh;overflow:hidden}  /* v175.5.5：100dvh —— 100vh 在真机上包含地址栏，输入框会被压到可视区外 */
  /* v175.4.7：莫比乌斯环面板手机全宽 + 页签单行 */
  .agpanel{width:100vw;border-left:0}
  .agtab{white-space:nowrap;padding:6px 9px;font-size:12.5px;flex:0 0 auto}
  .agtabs{overflow-x:auto;scrollbar-width:none}
  .agtabs::-webkit-scrollbar{display:none}
  .app{height:0;min-height:0;flex:0 0 auto;overflow:visible}              /* v175.3：app=抽屉容器，高度0，让 main 占满 body */
  main.main{flex:1 1 auto;min-height:0;width:100%;order:0;height:100vh;height:100dvh;box-sizing:border-box}     /* v175.4.5：用户栏只在抽屉打开时出现（盖在遮罩上），main 不再给它让位 */
  /* v175.4.2 mobile：aside-f 移到 body 直接子节点后，固定显示在屏幕底部（在 composer 之上） */
  body .aside-f{display:none}     /* v175.4.5：用户栏不再常驻手机屏底（Owner：下面的用户不应该一直在） */
  body.sf-sideopen .aside-f{display:flex;left:0;right:auto;width:86vw;max-width:340px}  /* 抽屉打开时才出现，宽度对齐抽屉=抽屉底栏（fixed/内边距沿用全局规则） */
  /* v175.2：mobile 上对话框上方的 chat-toolbar 隐藏（交付物回到 composer 由其它入口触发） */
  .chat-toolbar{display:none}
  /* sideBody / sideBatch 在 mobile 由 #side 内部展示（drawer 已在 #app 内），不需要管 */
}
@media(max-width:760px){
  aside{position:fixed;left:0;top:0;bottom:0;z-index:40;transform:translateX(-102%);transition:transform .24s ease;width:82vw;max-width:300px;box-shadow:var(--shadow)}
  aside.open{transform:none}
  .scrim.on{display:block}
  #menuBtn{display:flex}
  .msgs{flex:1;min-height:0;padding:14px 11px 6px}    /* v175.2：保留 flex:1 让 msgs 撑满 main 剩余高度 */
  .msg .body{font-size:14.5px}
  .wrap{max-width:none}
}

/* ═══ v2：图片工具栏 / 灯箱 / 消息操作条 / 回到最新 / 飞书登录 ═══ */
.svgbox .imbar{display:flex;gap:6px;justify-content:center;flex-wrap:wrap;margin-top:9px}
.svgbox .imbar button{padding:6px}
.svgbox .imbar button:active{color:var(--acc2);border-color:var(--accborder)}
.svgbox pre{margin:0}
.svgcap .dot{display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--acc);margin-right:6px;animation:bl 1s steps(2) infinite;vertical-align:1px}
.msg .mops{display:flex;gap:6px;flex-wrap:wrap;margin-top:9px;opacity:.5;transition:opacity .18s}
.msg:hover .mops,.msg .mops.show,.msg .mops.busy{opacity:1}
.msg .mops button{padding:6px}
.msg .mops button:hover{color:var(--acc2);border-color:var(--accborder)}
.msgs .msg:hover{background:var(--soft);border-radius:12px}
.lightbox{display:none;position:fixed;inset:0;background:#eef1f6;z-index:10000;flex-direction:column;padding:0}
.lightbox.on{display:flex}
.lb-in{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:20px;max-width:min(96vw,1100px);max-height:92vh;overflow:auto}
.lb-in svg{max-width:100%;height:auto;display:block}
.lb-close{position:absolute;top:14px;right:16px;background:var(--card);border:1px solid var(--line);color:var(--fg);border-radius:9px;width:38px;height:38px;font-size:17px;cursor:pointer}
#myArtWrap .artpanel{width:min(940px,94vw)}
.artpv2{margin-top:7px;position:relative}
.artovl{position:absolute;inset:0;cursor:zoom-in;z-index:2}
.artsvg{padding:6px;background:#fff;border-radius:9px;cursor:zoom-in;display:flex;justify-content:center}
.artsvg svg{max-width:100%;height:auto;display:block}
.artpv2 .artimg{cursor:zoom-in}
.artframe{width:100%;height:230px;border:0;border-radius:9px;background:#fff;display:block}
.artpv2 .artimg{margin-top:0}
.myartbar{display:flex;flex-wrap:wrap;gap:6px;padding:2px 0 10px;border-bottom:1px solid var(--line);margin-bottom:10px}
.myartbar .fchip{background:var(--card);border:1px solid var(--line);color:var(--dim);border-radius:999px;padding:5px 12px;font-size:12px;cursor:pointer;font-family:inherit}
.myartbar .fchip.on{background:var(--accsoft);border-color:var(--accborder);color:var(--acc)}
.artsum{color:var(--dim);font-size:12px;font-weight:400;margin-left:6px}
.artgrp{margin:14px 0 6px;color:var(--dim);font-size:12px;display:flex;align-items:center;gap:8px}
.artgrp::after{content:"";flex:1;height:1px;background:var(--line)}
.artitem .artimg{max-width:100%;max-height:180px;border-radius:8px;display:block;margin-top:6px;background:#fff}
.artempty{color:var(--dim);font-size:12.5px;padding:14px 2px;line-height:1.9}
#artBtn{margin-left:auto;display:inline-flex;align-items:center;gap:5px;background:var(--card);border:1px solid var(--line);color:var(--dim);border-radius:999px;padding:4px 10px;height:26px;font-size:11.5px;cursor:pointer;font-family:inherit}
#artBtn svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.75;stroke-linecap:round;stroke-linejoin:round}
#artBtn span{font-variant-numeric:tabular-nums}
#artBtn:hover{border-color:var(--acc);color:var(--acc)}
#artBtn.zempty{opacity:.68}
#artCnt{background:var(--acc);color:#fff;border-radius:999px;font-size:11px;padding:0 6px;min-width:17px;text-align:center;font-weight:600}
#toBottom{position:fixed;right:20px;bottom:118px;z-index:25;display:none;background:var(--card);border:1px solid var(--line);color:var(--dim);border-radius:50%;width:40px;height:40px;font-size:16px;cursor:pointer;box-shadow:var(--shadow);align-items:center;justify-content:center}
#toBottom.on{display:flex}
.fslogin{margin-top:2px;background:var(--card)!important;border:1px solid var(--line)!important;color:var(--fg1)!important;letter-spacing:0!important;display:flex;align-items:center;gap:8px;justify-content:center;width:min(90vw,320px)}
.fslogin b{color:var(--acc)}
.orline{font-size:12px;color:var(--dim2);margin:2px 0}

/* ═══════════ v3：格言空状态 / 模型选择器 / 图标按钮 / 灯箱缩放 ═══════════ */
.empty{max-width:640px;margin:12vh auto 0;text-align:center;color:var(--dim)}
/* v81：模式切换 + 任务模式 */
.modesw{display:inline-flex;align-items:center;gap:5px;height:26px;padding:0 10px;border:1px solid var(--line);background:var(--card);color:var(--dim);border-radius:999px;font-size:11.5px;cursor:pointer;font-family:inherit;flex:none}
.modesw:hover{border-color:var(--accborder);color:var(--acc)}
.modesw.task{border-color:var(--acc);color:var(--acc)}
/* v107：主页三个模式入口的样式（三个 button 分开，竖排卡片） */
.modepick{display:flex;flex-direction:column;gap:12px;width:min(420px,92vw);margin:18px auto 0}
.modepick button{display:flex;flex-direction:column;gap:5px;align-items:flex-start;text-align:left;
  padding:16px 18px;border:1px solid var(--line);background:var(--card);border-radius:14px;
  cursor:pointer;font-family:inherit;color:var(--fg)}
.modepick button:hover{border-color:var(--accborder);background:var(--accsoft)}
.modepick button.on{border-color:var(--acc);background:var(--accsoft)}
.modepick button b{font-size:15px;font-weight:600;color:var(--fg)}
.modepick button .ms{font-size:12px;color:var(--dim2);line-height:1.6}
.tklist{margin:16px auto 0;max-width:520px;text-align:left}
.tkrow{display:flex;align-items:center;gap:9px;padding:11px 12px;border:1px solid var(--line);background:var(--card);border-radius:12px;margin-bottom:8px;cursor:pointer}
.tkrow:hover{border-color:var(--accborder)}
.tkrow .tn{font-size:13.5px;color:var(--fg)}
.tkrow .tm{font-size:11px;color:var(--dim2);margin-left:auto}
.tkrow .tg{width:24px;height:24px;border-radius:8px;background:var(--accsoft);color:var(--acc);display:inline-flex;align-items:center;justify-content:center;font-size:12px;flex:none}
.tknew{display:flex;align-items:center;justify-content:center;gap:6px;padding:11px;border:1px dashed var(--line);border-radius:12px;color:var(--acc);cursor:pointer;font-size:13px;background:transparent;width:100%;font-family:inherit}
.tknew:hover{border-color:var(--accborder)}
.tkhd{display:flex;align-items:center;gap:8px;padding:9px 12px;margin:0 auto 8px;max-width:820px;border:1px solid var(--line);background:var(--card);border-radius:12px;font-size:12.5px;color:var(--dim)}
/* v106：只有「任务模式」的页头固定在顶部；对话/连接/本体不固定（曾健要求） */
/* v176.27：任务头部不再吸顶悬浮 —— 任务标题已在顶栏（#topTitle），这里随内容滚动 */
body:not(.im-mode) .tkhd{display:none!important}   /* v141：任务置顶只在任务/连接模式出现，回对话模式不留残影 */
.tkhd b{color:var(--fg);font-weight:600;flex:none}
.tkhd .tkmem{display:flex;align-items:center;gap:5px;flex-wrap:wrap;flex:1;min-width:0}
/* v176.34：tkhdHost 在顶栏里要占空间（v176.33 只把 taskHd 搬过去，没让它撑开宽度 → 任务详情宽度=0 看不见） */
.topbar .tkhd-host{flex:1 1 auto;min-width:0;display:inline-flex;align-items:center;gap:6px;overflow:hidden}
.tkhd-host:empty{display:none}   /* 空时不占顶栏空间，避免对话模式下挤压 topTitle */
/* v176.33：任务头控件进 top bar —— 去卡片壳，融入顶栏（任务名走 topTitle，不再重复） */
.topbar .tkhd{display:flex;align-items:center;gap:6px;margin:0;padding:0;max-width:none;
  border:0;background:transparent;font-size:12px;color:var(--dim);flex:1 1 auto;min-width:0;overflow:hidden}
.topbar .tkhd .tkvis{margin-left:0;flex:none;padding:2px 9px}
.topbar .tkhd .tkmem{flex:0 1 auto;flex-wrap:nowrap;overflow:hidden}
.topbar .tkhd .tkset{margin-left:0;flex:none}
.tkchip{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:999px;
  border:1px solid var(--line);background:var(--soft);font-size:11.5px;color:var(--fg1);max-width:190px;overflow:hidden;white-space:nowrap}
.tkchip i{font-style:normal;font-size:11px;opacity:.9}
.tkchip.k-model{border-color:var(--accborder);color:var(--acc);background:var(--accsoft)}
.tkchip.k-bot{border-color:#c0455e33;background:#c0455e14;color:#b03a52}
.tkchip.k-human{border-color:var(--line);color:var(--dim)}
.tkhd .mbsum{flex:none;font-size:11px;color:var(--dim2)}
.aghead .aggear{flex:none;margin-left:auto;width:28px;height:28px;border-radius:8px;border:1px solid var(--line);
  background:var(--card);color:var(--dim);display:inline-flex;align-items:center;justify-content:center;cursor:pointer}
.aghead .aggear:hover{color:var(--acc);border-color:var(--accborder);background:var(--accsoft)}
/* v102：统一确认弹窗 */
.cfwrap{position:fixed;inset:0;z-index:100005;display:flex;align-items:center;justify-content:center;
  background:rgba(12,16,28,0);backdrop-filter:blur(0px);transition:background .16s ease}
.cfwrap.on{background:rgba(12,16,28,.42);backdrop-filter:blur(3px)}
.cfcard{width:min(360px,calc(100vw - 40px));background:var(--card);border:1px solid var(--line);border-radius:16px;
  padding:20px 18px 14px;box-shadow:0 18px 48px rgba(10,16,32,.24);text-align:center;
  transform:translateY(8px) scale(.97);opacity:0;transition:transform .18s,opacity .18s}
.cfwrap.on .cfcard{transform:none;opacity:1}
.cfico{font-size:24px;line-height:1;margin-bottom:8px}
.cfttl{font-size:15px;font-weight:600;color:var(--fg);margin-bottom:6px}
.cfmsg{font-size:13px;color:var(--dim);line-height:1.6;word-break:break-word}
.cfextra{margin-top:10px;font-size:12.5px;color:var(--dim2);text-align:left}
.cfrow{display:flex;gap:10px;margin-top:18px}
.cfrow .cbtn{flex:1;height:38px;border-radius:10px;border:1px solid var(--line);background:var(--soft);
  color:var(--fg1);font-size:13.5px;cursor:pointer}
.cfrow .cbtn:hover{background:var(--bg2)}
.cfrow .cbtn.danger{background:#c0455e;border-color:#c0455e;color:#fff}
.cfrow .cbtn.danger:hover{background:#a83a50}
.tkhd b{color:var(--fg);font-weight:600}
.tkhd .mb{font-size:11.5px;color:var(--dim2)}
.mask2{position:fixed;inset:0;background:rgba(16,18,24,.55);backdrop-filter:blur(3px);display:none;align-items:center;justify-content:center;z-index:100002}
.mask2.on{display:flex}
.pick{width:min(560px,92vw);max-height:78vh;overflow:auto;background:var(--card);border:1px solid var(--line);border-radius:16px;padding:16px;box-shadow:var(--shadow)}
.pick h3{margin:0 0 10px;font-size:14px;color:var(--fg);font-weight:600}
.pick .tabs{display:flex;gap:6px;margin-bottom:12px;flex-wrap:wrap}
.pick .tabs button{padding:6px 11px;border-radius:999px;border:1px solid var(--line);background:transparent;color:var(--dim);font-size:12px;cursor:pointer;font-family:inherit}
.pick .tabs button.on{border-color:var(--acc);color:var(--acc);background:var(--accsoft)}
.pick .it{display:flex;align-items:center;gap:9px;padding:9px 10px;border-radius:10px;cursor:pointer;font-size:13px;color:var(--fg)}
.pick .it:hover{background:var(--soft)}
.pick .it input{accent-color:var(--acc)}
.pick .it .sub{font-size:11px;color:var(--dim2);margin-left:auto}
.pick .nm{width:100%;margin:12px 0;padding:10px 12px;border:1px solid var(--line);border-radius:10px;background:var(--bg);color:var(--fg);font-size:13.5px;font-family:inherit}
.pick .ft{display:flex;gap:8px;justify-content:flex-end;margin-top:12px}
.pick .ft button{padding:9px 16px;border-radius:10px;border:1px solid var(--line);background:transparent;color:var(--dim);cursor:pointer;font-size:13px;font-family:inherit}
.pick .ft button.pri{background:var(--acc);color:#fff;border-color:var(--acc)}
.creed{margin:26px auto 0;padding-top:18px;border-top:1px solid var(--line);max-width:420px}
.creed .cl{font-size:12.5px;line-height:2.05;color:var(--dim2);letter-spacing:.35px}
.creed .ca{margin-top:10px;font-size:11px;color:var(--dim2);opacity:.7;letter-spacing:1.2px}
.empty .emark{font-family:"Noto Serif SC",serif;font-size:34px;letter-spacing:14px;text-indent:14px;color:var(--fg);font-weight:500;margin-bottom:26px}
.empty .quote{font-family:"Noto Serif SC",serif;font-size:16px;line-height:2.15;letter-spacing:1.2px;color:var(--dim);max-width:520px;margin:0 auto;min-height:3.4em}
.empty .quote .who{display:block;margin-top:12px;font-size:12.5px;color:var(--dim2);letter-spacing:2px;text-align:right}
.chips{display:flex;flex-wrap:wrap;gap:18px;justify-content:center;margin-top:34px}
.chip{color:var(--dim2);font-size:12.5px;cursor:pointer;letter-spacing:.6px;border-bottom:1px dashed transparent;padding:2px 0;transition:color .18s,border-color .18s}
.chip:hover,.chip:active{color:var(--acc2);border-bottom-color:var(--accborder)}

/* 输入框下方：模型选择器（左下角） */
.cfoot{max-width:820px;margin:8px auto 0;display:flex;align-items:center;gap:10px;position:relative}
.mpill{display:inline-flex;align-items:center;gap:7px;background:transparent;border:1px solid var(--line);color:var(--dim);border-radius:999px;padding:5px 11px 5px 7px;font-size:12.5px;cursor:pointer;font-family:inherit;min-height:30px;transition:border-color .18s,color .18s}
.mpill:hover{border-color:var(--accborder);color:var(--fg)}
.mpill svg{opacity:.6}
.loopbtn{display:inline-flex;align-items:center;gap:6px;background:transparent;border:1px solid var(--line);color:var(--dim);border-radius:999px;padding:5px 10px 5px 8px;font-size:12.5px;cursor:pointer;font-family:inherit;min-height:30px;margin-left:6px;position:relative;transition:border-color .18s,color .18s}
.loopbtn:hover{border-color:var(--accborder);color:var(--fg)}
.loopbtn.on{color:var(--acc);border-color:var(--accborder);background:var(--accsoft)}
.loopbtn .ldot{width:7px;height:7px;border-radius:50%;background:var(--line);display:inline-block}
.loopbtn.on .ldot{background:var(--acc);box-shadow:0 0 0 3px rgba(99,140,255,.18)}
.loopbtn #loopIco{font-size:13px;font-style:normal}
.looppop{position:fixed;top:52px;right:12px;left:auto;bottom:auto;z-index:45;background:var(--card);border:1px solid var(--line);border-radius:11px;box-shadow:0 10px 30px rgba(0,0,0,.16);padding:6px;display:none;min-width:240px;max-width:280px}
.looppop.on{display:block}
.looppop .lph{font-size:11px;color:var(--dim2);padding:4px 8px 5px;letter-spacing:.3px}
.looppop button{display:flex;align-items:flex-start;gap:9px;width:100%;padding:7px 9px;background:none;border:0;color:var(--fg);font-family:inherit;font-size:12.5px;border-radius:8px;cursor:pointer;text-align:left}
.looppop button:hover{background:var(--soft)}
.looppop button.on{background:var(--accsoft);color:var(--acc2)}
.looppop button b{font-size:14px;color:var(--acc);font-style:normal;line-height:1;margin-top:1px;flex:none;width:18px;text-align:center}
.looppop button span{display:flex;flex-direction:column;min-width:0}
.looppop button strong{font-size:12.5px;color:inherit}
.looppop button i{font-style:normal;color:var(--dim2);font-size:11px;margin-top:1px}
.looppop .lpf{padding:6px 8px 4px;border-top:1px dashed var(--line);margin-top:4px;display:flex;gap:6px;align-items:center;font-size:11.5px;color:var(--dim2)}
.looppop .lpf input{width:46px;padding:3px 5px;border:1px solid var(--line);border-radius:6px;background:var(--soft);color:var(--fg);font-family:inherit;font-size:11.5px}
.looppop .lpf .cps{margin-left:auto;background:none;border:1px solid var(--line);color:var(--dim);border-radius:6px;padding:3px 8px;font-size:11px;font-family:inherit;cursor:pointer}
.looppop .lpf .cps:hover{color:var(--acc);border-color:var(--accborder)}
.mico{width:18px;height:18px;border-radius:5px;flex:none;display:inline-flex;align-items:center;justify-content:center;font-size:8.5px;font-weight:700;color:#fff;letter-spacing:-.2px;line-height:1}
.mname{max-width:46vw;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.hint{margin-left:auto;font-size:11px;color:var(--dim2);letter-spacing:.3px}
.mpop{position:absolute;left:0;bottom:calc(100% + 10px);width:min(360px,92vw);max-height:min(58vh,460px);background:var(--card);border:1px solid var(--line);border-radius:14px;box-shadow:0 18px 44px rgba(10,14,28,.18);display:none;flex-direction:column;overflow:hidden;z-index:40}
.mpop.on{display:flex}
/* v138：模型 / 智能体 两个 tab 都不再显示「当前对象」和搜索框（曾健要求） */
.mpop .mpart,.mpop .msearch{display:none!important}
/* v121：模型/智能体切换＝紧凑小胶囊（内容宽度），与搜索框同排 */
.mpop .mprow{display:flex;align-items:center;gap:8px;padding:9px 10px 4px}
.mpop .mprow .msearch{flex:1;margin:0;min-width:0}
.mpop .mptabs{display:flex;gap:4px;padding:0;border:0;background:none;flex:0 0 auto}
.mpop .mptabs .mpt{flex:0 0 auto;padding:4px 11px;border-radius:999px;border:1px solid var(--line);background:transparent;color:var(--dim);font-size:12px;line-height:1.35;cursor:pointer;font-family:inherit}
.mpop .mptabs .mpt:hover{color:var(--acc2);border-color:var(--accborder)}
.mpop .mptabs .mpt.on{border-color:var(--accborder);color:var(--acc);background:var(--accsoft);font-weight:600}
/* v155：机器人行 —— 在线状态点 */
.mitem .cidot{width:8px;height:8px;border-radius:50%;background:var(--dim2);flex:none;margin-right:2px;opacity:.5}
.mitem .cidot.on{background:#3ecf8e;opacity:1;box-shadow:0 0 6px rgba(62,207,142,.5)}
.msearch{padding:9px;border-bottom:1px solid var(--line)}
.msearch input{width:100%;background:var(--soft);border:1px solid var(--line);border-radius:9px;padding:7px 10px;color:var(--fg);font-size:13px;outline:none;font-family:inherit}
.mlist{overflow-y:auto;padding:6px}
.mgrp{margin-bottom:4px}
.mgh{display:flex;align-items:center;gap:7px;font-size:11px;color:var(--dim2);padding:7px 9px 4px;letter-spacing:.6px}
.mitem{display:flex;align-items:center;gap:9px;width:100%;text-align:left;background:none;border:none;color:var(--fg1);font-size:13px;padding:8px 9px;border-radius:9px;cursor:pointer;font-family:inherit}
.mitem:hover{background:var(--soft)}
.mitem.on{background:var(--accsoft);color:var(--acc2)}
.mitem .tick{margin-left:auto;color:var(--acc);font-size:12px;opacity:0}
.mitem.on .tick{opacity:1}

/* 图标化按钮（图形工具条 / 消息操作条） */
.imbar{display:flex;gap:4px;justify-content:center;margin-top:9px}
.imbar button,.mops button{display:inline-flex;align-items:center;justify-content:center;gap:5px;background:transparent;border:1px solid transparent;color:var(--dim2);border-radius:9px;padding:6px;font-size:11.5px;cursor:pointer;min-height:34px;min-width:34px;box-sizing:border-box;font-family:inherit;transition:color .16s,border-color .16s,background .16s}
.imbar button:hover,.mops button:hover{color:var(--acc2);border-color:var(--accborder);background:var(--accsoft)}
.imbar button svg,.mops button svg{width:15px;height:15px;stroke:currentColor;fill:none;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
.mops{display:flex;gap:4px;flex-wrap:wrap;margin-top:8px;opacity:.42;transition:opacity .18s}
.msg:hover .mops,.msg .mops.show,.msg .mops.busy{opacity:1}

/* 灯箱：拖动 / 缩放 */
.lightbox{display:none;position:fixed;inset:0;background:#eef1f6;z-index:10000;flex-direction:column;padding:0}
.lightbox.on{display:flex}
.lb-top{display:flex;gap:8px;justify-content:flex-end;align-items:center;padding:10px 14px;flex:none}
.lbbtn{background:#fff;border:1px solid #dfe3ec;color:#2a3244;border-radius:10px;min-width:38px;height:38px;font-size:15px;cursor:pointer;font-family:inherit;display:inline-flex;align-items:center;justify-content:center;padding:0 10px;box-shadow:0 2px 10px rgba(20,26,40,.07)}
.lbbtn:hover{background:#f3f5fa}
.lbbtn-x{margin-left:6px}
.lb-stage{flex:1;position:relative;overflow:hidden;cursor:grab;touch-action:none}
.lb-stage.grabbing{cursor:grabbing}
/* 单一原点：居中完全交给 applyLB 的 translate，避免 flex + transform 双重居中导致偏位 */
.lb-canvas{position:absolute;left:0;top:0;transform-origin:0 0;will-change:transform}
.lb-canvas svg{max-width:none;height:auto;background:#fff;border-radius:12px;box-shadow:0 14px 44px rgba(20,26,40,.16);display:block}
.lb-foot{flex:none;display:flex;gap:8px;align-items:center;padding:6px 14px calc(12px + env(safe-area-inset-bottom));overflow-x:auto}
.lbtool{display:inline-flex;align-items:center;gap:6px;background:#fff;border:1px solid #dfe3ec;color:#2a3244;border-radius:10px;padding:7px 12px;font-size:12.5px;font-family:inherit;cursor:pointer;white-space:nowrap;box-shadow:0 2px 10px rgba(20,26,40,.06)}
.lbtool:hover{background:#f3f5fa;border-color:#c9d1e2}
.lbtool svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.lb-gap{flex:1}
.sftoast{position:fixed;left:50%;bottom:calc(96px + env(safe-area-inset-bottom));transform:translate(-50%,10px);background:var(--card);color:var(--fg);border:1px solid var(--line);border-radius:999px;padding:8px 15px;font-size:12.5px;box-shadow:0 10px 30px rgba(10,14,28,.18);opacity:0;pointer-events:none;transition:opacity .18s,transform .18s;z-index:100020}
.sftoast.on{opacity:1;transform:translate(-50%,0)}
.tb-title{font-size:13px;color:var(--dim);letter-spacing:1px;margin-left:6px;font-family:"Noto Serif SC",serif}

/* ── 移动端适配 ── */
@media (max-width:820px){
  .topbar{padding:9px 12px;padding-top:calc(9px + env(safe-area-inset-top,0px))}  /* v175.4.3 + v168：shorthand 会盖掉基础里的 safe-area-top，这里补回 */
  .msgs{padding:0 12px}
  .msg{padding:10px 0;gap:9px}
  .composer{padding:8px 10px calc(10px + env(safe-area-inset-bottom));border-top:0;background:transparent}
  /* v175.5.2：DeepSeek 式一体化输入卡片 —— 圆角容器包住输入区+控制行 */
  .cwrap{gap:4px;border-radius:20px;padding:10px 10px 8px;box-shadow:0 4px 18px rgba(20,26,40,.10)}
  #input{min-height:40px;padding:4px 4px 0}
  .cbot{gap:6px}
  .composer .tip{margin:0 2px 6px}
  .cfoot{padding:0 2px;gap:8px}
  .hint{display:none}
  .tb-title{display:none}
  .mpop{width:min(100%,100vw);left:0;max-height:min(62vh,520px)}
  .empty{margin-top:14vh}
  .empty .emark{font-size:28px;letter-spacing:11px;text-indent:11px}
  .empty .quote{font-size:15px;padding:0 6px}
  .chips{gap:14px;margin-top:26px}
  .lb-top{padding:10px 12px}
  .lbbtn{min-width:34px;height:34px;font-size:14px}
}
@media (max-width:480px){
  .empty{margin-top:10vh}
  .empty .emark{font-size:24px;letter-spacing:9px;text-indent:9px;margin-bottom:20px}
  .empty .quote{font-size:14.5px;line-height:2}
  .chip{font-size:12px}
  .mname{max-width:40vw}
}

/* ═══ v4：嵌入式主题图标 / 我的菜单 / 圆角居中新建 ═══ */
#sfThemeBtn{display:none!important}
/* .aside-top / .ttbtn / .newbtn 已在「布局：侧栏」段统一定义（v168 整段重排），此处仅保留 #sideToggle / 移动端补偿 */
/* 左上角收起键：圆圈按钮（曾健 2026-09-13 反馈：不要方块/横条，要圆） */
#sideToggle{width:33px;height:33px;border-radius:50%;background:var(--card);border:1px solid var(--line);
  box-shadow:0 1px 4px rgba(20,26,40,.07);color:var(--dim);order:5}         /* v175.1：sfold 调到最右（modeSeg=1, extras=2,3, sfava=4） */
#sideToggle:hover{background:var(--accsoft);color:var(--acc);border-color:var(--accborder)}
#sideToggle:active{transform:scale(.94)}
#sideToggle svg{width:15px;height:15px}
html[data-theme="dark"] #sideToggle{box-shadow:0 1px 5px rgba(0,0,0,.5)}
/* v175.4.2 全局：aside-f 在 body 直接子节点，用 fixed 贴底部（desktop 跟 mobile 都 fixed，位置不同在 media 内调） */
.aside-f{position:fixed;left:0;right:0;bottom:0;display:flex;align-items:center;gap:10px;padding:8px 12px calc(10px + env(safe-area-inset-bottom));border-top:1px solid var(--line);background:var(--bg);z-index:50}
#app.side-hidden ~ .aside-f{display:none}   /* v175.4.5：桌面收起侧栏后用户栏不再悬空显示 */
/* v175.4.2 desktop：aside-f 贴在侧栏底部（width 跟随侧栏 280） */
@media (min-width:761px){
  .aside-f{left:0;right:auto;width:280px}
}
.mebtn{display:inline-flex;align-items:center;gap:6px;background:transparent;border:1px solid transparent;border-radius:10px;color:var(--dim2);font-size:12.5px;padding:6px 9px;cursor:pointer;font-family:inherit;transition:color .16s,border-color .16s}
.mebtn:hover{color:var(--fg);border-color:var(--line)}
.mewho{display:flex;align-items:center;gap:9px;padding:8px 10px 9px;border-bottom:1px solid var(--line);margin-bottom:4px}
.mewho .av{width:34px;height:34px;border-radius:50%;background:var(--accsoft);color:var(--acc);display:flex;align-items:center;justify-content:center;font-size:15px;font-weight:600;flex:none}
.mewho .mi2{min-width:0;display:flex;flex-direction:column}
.mewho .mi2 b{font-size:13px;color:var(--fg)}
.mewho .mi2 span{font-size:11px;color:var(--dim2);font-family:ui-monospace,Menlo,monospace;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:140px}
/* v175：mePop 脱离 aside 后用 fixed 定位 + JS 计算位置（避免依赖父节点 relative） */
.mepop{position:fixed;width:230px;max-height:min(72vh,520px);overflow:auto;background:var(--card);border:1px solid var(--line);border-radius:12px;box-shadow:0 16px 40px rgba(10,14,28,.16);padding:6px;display:none;z-index:45}  /* v175.4.6：限高+滚动 —— 原来 11 项全展开比屏还高，定位只能顶到 y=6，看起来像「弹不出来」 */
.mepop.on{display:block}
.mepop a,.mepop button{display:block;width:100%;text-align:left;background:none;border:none;color:var(--fg1);font-size:13px;padding:9px 10px;border-radius:8px;cursor:pointer;font-family:inherit;text-decoration:none}
.mepop a:hover,.mepop button:hover{background:var(--soft);color:var(--acc2)}
.mepop .icp{display:block;padding:8px 10px 4px;font-size:10.5px;color:var(--dim2);border-top:1px solid var(--line);margin-top:4px}
.icpline{text-align:center;font-size:10.5px;color:var(--dim2);padding:6px 0 2px;letter-spacing:.4px}

/* ═══ v5：消息左右分布 / 无头像 / 图片按钮左下 / 圆形发送 ═══ */
.msg .av{display:none!important}
.msg{gap:0}
.toolnote{display:none;align-items:center;gap:7px;margin:6px 0 2px;padding:6px 10px;border-radius:9px;background:var(--soft);border:1px solid var(--line);font-size:12px;color:var(--dim)}
.toolnote.on{display:inline-flex}
.toolnote.bad{border-color:#e6b3b3;color:#a33}
.toolnote b{color:var(--acc);font-weight:600}
.toolnote .tn-s{opacity:.72}
.doccard{display:flex;align-items:center;gap:8px;margin-top:8px;padding:8px 11px;border:1px solid var(--accborder);background:var(--accsoft);border-radius:10px;font-size:12.5px;max-width:100%}
.doccard.bad{border-color:#e6b3b3;background:#fdf1f1}
.doccard a{color:var(--acc);text-decoration:none;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.doccard a:hover{text-decoration:underline}
.doccard .dc-i{flex:none}
.doccard .dc-c{margin-left:auto;flex:none;font-size:11.5px;padding:3px 9px;border-radius:999px;border:1px solid var(--accborder);background:var(--card);color:var(--acc);cursor:pointer}
.doccard .dc-t{color:#a33}
.attcard{width:100%}
.attc-head{display:flex;align-items:center;gap:8px;background:var(--soft);border:1px solid var(--line);border-radius:10px;padding:7px 10px;font-size:12.5px}
.attc-head b{color:var(--fg);font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:60%}
.attc-head i{font-style:normal;color:var(--dim2);font-size:11px}
.attc-head .tog{margin-left:auto;color:var(--acc);cursor:pointer;font-size:11.5px}
.attc-body{margin:6px 0 0;padding:9px 11px;background:var(--bg);border:1px solid var(--line);border-radius:9px;max-height:320px;overflow:auto;
  white-space:pre-wrap;word-break:break-word;font-size:12px;color:var(--fg1)}
.msg.u{justify-content:flex-end}
.msg.u .body{flex:0 1 auto;max-width:min(78%,640px);background:var(--accsoft);border:1px solid var(--accborder);border-radius:16px 16px 5px 16px;padding:9px 14px}
.msg.u .body p:first-child{margin-top:0}
.msg.u .mops{justify-content:flex-end}
.msg.a .body{max-width:100%;padding-right:2px}
.msgs .msg:hover{background:transparent}
.svgbox{display:flex;flex-direction:column;align-items:flex-start}
.svgbox .imbar{justify-content:flex-start;padding-left:0;gap:2px}
.imbar{justify-content:flex-start;margin-top:6px}
#send,#stop{flex:none;width:37px;height:37px;border-radius:50%;border:none;background:var(--acc);color:#fff;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;box-shadow:0 3px 12px rgba(45,90,214,.26);transition:transform .14s,filter .14s,background .18s}
#send svg,#stop svg{width:18px;height:18px;stroke:currentColor;fill:none;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}
#send:hover{filter:brightness(1.07)}
#send:active{transform:scale(.93)}
#send:disabled{background:var(--soft);color:var(--dim2);box-shadow:none;cursor:default}
#stop{background:var(--card);color:var(--acc);border:1px solid var(--accborder);box-shadow:none}
#stop:active{transform:scale(.93)}
@media (max-width:820px){ .msg.u .body{max-width:88%} }

/* ═══ v6：输入框抬高 · 模型选择器在输入框内左下 · 发送按钮靠右下 ═══ */
.composer{padding:12px 14px calc(14px + env(safe-area-inset-bottom))}
.cwrap{position:relative;max-width:820px;margin:0 auto;display:flex;flex-direction:column;align-items:stretch;gap:6px;background:var(--card);border:1px solid var(--line);border-radius:18px;padding:12px 12px 10px;box-shadow:var(--shadow)}
.cwrap:focus-within{border-color:var(--accborder)}
#input{flex:none;min-height:54px;max-height:220px;padding:3px 5px 0;font-size:15px;line-height:1.68;background:none;border:none;color:var(--fg);resize:none;outline:none;font-family:inherit}
.cbot{display:flex;align-items:center;gap:8px;padding:0 1px}
.cspacer{flex:1}
.mpill{display:inline-flex;align-items:center;gap:6px;background:transparent;border:1px solid var(--line);color:var(--dim);border-radius:999px;padding:5px 10px 5px 6px;font-size:12.5px;cursor:pointer;font-family:inherit;min-height:30px;transition:border-color .18s,color .18s}
.mpill:hover{border-color:var(--accborder);color:var(--fg)}
.mpop{position:absolute;left:12px;bottom:calc(100% + 10px)}
@media (max-width:820px){
  .cwrap{border-radius:20px;padding:10px 10px 8px;box-shadow:0 4px 18px rgba(20,26,40,.10)}
  #input{min-height:48px}
  .mpop{left:0}
}

/* ═══ v7：图形卡右上角切代码 / 双击放大 / 无字幕 ═══ */
.svgbox{display:flex;flex-direction:column;align-items:stretch}
.svghead{display:flex;justify-content:flex-end;margin-bottom:2px}
.svgcode{display:inline-flex;align-items:center;justify-content:center;width:28px;height:26px;background:transparent;border:1px solid transparent;border-radius:8px;color:var(--dim2);cursor:pointer;padding:0}
.svgcode:hover{color:var(--acc2);border-color:var(--accborder);background:var(--accsoft)}
.svgcode svg{width:15px;height:15px;stroke:currentColor;fill:none;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
.svgview svg{cursor:zoom-in;max-width:100%;border-radius:10px}
.svgcodebar{display:flex;gap:6px;margin-bottom:6px}
.svgcodeview pre{max-height:320px;overflow:auto;background:var(--soft);border:1px solid var(--line);border-radius:10px;padding:11px 12px;margin:0;font-size:11.5px;line-height:1.6}
.svgcodeview pre code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;white-space:pre;color:var(--fg1);text-align:left;display:block}

/* ═══ v8：侧栏（收起按钮 / ⋯ 会话操作 / 我的靠右）═══ */
.aside-f{display:flex;justify-content:flex-end;padding:8px 8px calc(10px + env(safe-area-inset-bottom));border-top:1px solid var(--line)}
.mebtn{min-height:32px}
.citem{position:relative}
.citem .cacts{display:none;gap:2px;flex:none}
.citem:hover .cacts,.citem.on .cacts{display:flex}
.citem .cb{background:var(--card);border:1px solid var(--line2);color:var(--fg1);cursor:pointer;padding:2px 6px;border-radius:7px;font-size:14px;line-height:1.1;min-width:26px;min-height:26px;display:inline-flex;align-items:center;justify-content:center}
.citem .cb:hover{background:var(--soft)}
.citem .cb:hover{color:var(--fg);background:var(--soft)}
.cmenu{position:absolute;right:4px;top:34px;z-index:32;background:var(--card);border:1px solid var(--line);border-radius:11px;box-shadow:0 14px 34px rgba(10,14,28,.18);padding:5px;display:none;min-width:112px}
.cmenu.on{display:block}
.cmenu button{display:block;width:100%;text-align:left;background:none;border:none;color:var(--fg1);font-size:12.5px;padding:7px 10px;border-radius:7px;cursor:pointer;font-family:inherit}
.cmenu button:hover{background:var(--soft)}
.cmenu button.danger{color:var(--bad)}
#menuBtn{display:inline-flex}
#app.side-hidden #side{display:none}
/* 厂商 logo 底板（亮/暗都在白底上，保证可见） */
.mico{width:20px;height:20px;border-radius:6px;display:inline-flex;align-items:center;justify-content:center;overflow:hidden;flex:none;background:#fff;border:1px solid rgba(20,24,40,.10);box-sizing:border-box}
.mico img{width:14px;height:14px;object-fit:contain;display:block}
.mico b{font-size:8.5px;font-weight:700;letter-spacing:-.2px;line-height:1;color:var(--fg)}
html[data-theme="dark"] .mico{background:#f4f6fa;border-color:rgba(255,255,255,.16)}

/* ═══ v10：图形悬浮工具条 + 代码预览/运行 ═══ */
.svgbox{position:relative}
.svgview{overflow:auto;border-radius:10px}
.svgview svg{max-width:100%;cursor:zoom-in;display:block}
.svgops{position:absolute;top:9px;right:9px;z-index:7;display:flex;gap:4px;padding:4px;border-radius:12px;background:var(--card);border:1px solid var(--line);box-shadow:0 8px 22px rgba(10,14,28,.16);opacity:1;transition:opacity .18s}
.svgbox:hover .svgops,.svgops:focus-within{opacity:1}
.svgops .opset{display:flex;gap:4px}
.svgops button{display:inline-flex;align-items:center;justify-content:center;width:28px;height:27px;border-radius:8px;background:transparent;border:none;color:var(--dim);cursor:pointer;padding:0}
.svgops button:hover{background:var(--soft);color:var(--acc2)}
.svgops button svg{width:15px;height:15px;stroke:currentColor;fill:none;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
.svgcodeview{text-align:left}
.svgcodeview pre{text-align:left}
/* 间距由 .cbar gap 统一控制 */
.htmlprev{margin:0 0 10px;border:1px solid var(--line);border-radius:10px;overflow:hidden;background:#fff}
.htmlprev iframe{width:100%;height:340px;border:none;display:block;background:#fff}
.prevbar{display:flex;gap:6px;justify-content:flex-end;padding:6px 8px;border-top:1px solid var(--line);background:var(--soft)}
.runout{margin:0 0 10px;border:1px solid var(--line);border-radius:10px;overflow:hidden;background:var(--soft)}
.runout .ro-h{padding:6px 11px;font-size:11.5px;color:var(--dim2);border-bottom:1px solid var(--line);font-family:ui-monospace,Menlo,monospace}
.runout pre{margin:0;padding:10px 12px;font-size:12px;line-height:1.6;max-height:280px;overflow:auto;white-space:pre-wrap;word-break:break-word}
.runout .ro-o{color:var(--fg1)}
.runout .ro-e{color:#c0392b;background:rgba(192,57,43,.06)}
.runout .ro-img{max-width:100%;display:block;background:#fff;margin:8px;border-radius:8px}

/* ═══ v11：侧栏顶部标题 / 底部头像 + 竖三点 ═══ */
/* v168：原 .sidetitle 的 absolute/居中布局只在锁屏页用，避免影响 #side 里的 .aside-top 品牌行 */
.sidetitle{display:flex;align-items:center;gap:16px;text-decoration:none;cursor:pointer;color:var(--acc);font-weight:400;padding:0;line-height:1;user-select:none;background:none;-webkit-background-clip:initial;background-clip:initial;-webkit-text-fill-color:initial;text-indent:0}
.sidetitle .b8{font-size:29px;transform:scaleX(1.34);display:inline-block;line-height:1}
.sidetitle:hover{opacity:.78}
.sidetitle .bw{font-size:12.6px;letter-spacing:.14em;white-space:nowrap;line-height:1;transform:translateY(.3px)}  /* v90：与 ∞ 墨迹等高 */
.locklogo{display:flex;align-items:center;justify-content:center;gap:24px;color:var(--acc);margin:0 0 16px;font-weight:400;line-height:1;user-select:none}
.locklogo .b8{font-size:54px;transform:scaleX(1.42);display:inline-block}
.locklogo .bw{font-size:23px;letter-spacing:.16em;line-height:1;transform:translateY(.4px)}  /* v90：与 ∞ 墨迹等高、中线重合 */
.aside-f{display:flex;align-items:center;gap:10px}
/* v168：底栏改为「头像 · 名字 · 菜单」水平排布（参照样本样式） */
.aside-f .ava{margin-right:0;flex:0 0 30px}
.aside-f .ava .avaph{width:30px;height:30px}
.aside-f .meinfo{flex:1;min-width:0;display:flex;flex-direction:column;line-height:1.25}
.aside-f .meinfo b{display:block;font-size:12.5px;font-weight:600;color:var(--fg)}
.aside-f .meinfo span{font-size:10.5px;color:var(--dim2)}
.aside-f .mebtn{margin-left:auto}
.ava{width:34px;height:34px;border-radius:50%;border:1.5px dashed var(--line);background:transparent;cursor:pointer;padding:0;flex:none;display:inline-flex;align-items:center;justify-content:center;overflow:hidden;background-size:cover;background-position:center}
.ava:hover{border-color:var(--accborder)}
.ava .avaph{width:100%;height:100%;display:block}
.mebtn{font-size:19px;line-height:1;width:34px;height:34px;border-radius:10px;padding:0 0 8px;justify-content:center}

/* ═══ v12：用户消息操作条默认隐藏 + 悬浮在气泡外侧 ═══ */
.msg.u .body{position:relative;overflow:visible}
.msg.u{flex-wrap:wrap}
.msg.u .mops{flex:1 0 100%;position:static;right:auto;top:auto;margin:8px 0 0;opacity:1;pointer-events:auto;transition:opacity .16s;flex-wrap:nowrap;justify-content:flex-end}
.msg.u:hover .mops,.msg.u .mops.show,.msg.u .mops.busy{opacity:1;pointer-events:auto}
@media(max-width:820px){
  .msg.u .mops{position:static;right:auto;top:auto;margin-top:8px;opacity:1;pointer-events:auto;justify-content:flex-end}
}

/* ═══ v13：卡片贴合图片，工具条浮在图片右上角 ═══ */
.svgbox{display:flex;flex-direction:column;align-items:stretch;max-width:100%}
.svgview{width:100%;max-width:100%}
.svgview svg{display:block}
.svgcodeview{width:100%}

/* ═══ v14：输入框上方一句话 / 消息多选 + 批量操作 ═══ */
/* ── v50：对话框上方 MCP 条 ── */
.mcpbar{display:flex;align-items:center;gap:8px;margin:0 auto 6px;width:100%;max-width:820px;padding:0 4px 6px;box-sizing:border-box;position:relative}
/* v78：附件 / 交付物(文件夹) / MCP 三控件同高同位（原来 26/26/27 参差） */
.mcpbar .cico,.mcpbar #artBtn,.mcpbar #mcpBtn{height:26px;min-height:26px;max-height:26px;box-sizing:border-box;align-self:center}
.mcpbar #mcpBtn{padding:0 9px;gap:5px}
.mcpbar #mcpBtn .mtxt{font-size:11.5px;letter-spacing:.4px;font-weight:500;line-height:1}
.mcpbar #mcpBtn .d{width:6px;height:6px}
/* v147：删 libBtn（合并进 attBtn），保留的样式只用于「已被迁移的旧按钮若残留」——直接隐藏 */
.mcpbar #libBtn{display:none}

/* v147：attBtn 主体右下角 + 小角标（合并标志） */
.cbot #attBtn{position:relative}   /* v175.4.6：作用域从 .mcpbar 改 .cbot（v172 后 attBtn 移进输入按钮行） */

/* v147：弹层 tab + 内部条目（合并后只一份 attpop） */
/* v175.1：attPop 改 fixed 定位（避免依赖父 relative）；位置由 libOpen() 计算设置 */
.attpop{position:fixed;width:min(320px,90vw);background:var(--card);border:1px solid var(--line);
  border-radius:12px;box-shadow:0 14px 38px rgba(10,14,28,.18);display:none;flex-direction:column;padding:0;overflow:hidden;z-index:42}
.attpop.on{display:flex}
.attpop-tabs{display:flex;gap:0;border-bottom:1px solid var(--line);background:var(--bg2)}
.attpop-tab{flex:1;padding:9px 0;background:transparent;border:none;font-family:inherit;font-size:12.5px;color:var(--dim);cursor:pointer;border-bottom:2px solid transparent}
.attpop-tab.on{color:var(--acc);border-bottom-color:var(--acc);background:var(--card)}
.attpop-pane{display:flex;flex-direction:column;padding:6px;gap:2px}
.attpop-pane[hidden]{display:none}
.attpop-upload{display:flex;align-items:center;gap:10px;padding:10px;border:1px dashed var(--line);border-radius:10px;background:transparent;color:var(--ink);cursor:pointer;font-family:inherit;text-align:left;width:100%}
.attpop-upload:hover{border-color:var(--acc);color:var(--acc);background:var(--accsoft)}
.attpop-upload .attpu-ico{width:30px;height:30px;border-radius:8px;background:var(--bg2);color:var(--dim);display:inline-flex;align-items:center;justify-content:center;flex:none}
.attpop-upload:hover .attpu-ico{color:var(--acc);background:var(--card)}
.attpop-upload .attpu-ico svg{width:16px;height:16px}
.attpop-upload .attpu-tx{display:flex;flex-direction:column;line-height:1.35;min-width:0}
.attpop-upload .attpu-tx b{font-size:13px;font-weight:500}
.attpop-upload .attpu-tx i{font-style:normal;font-size:11.5px;color:var(--dim);margin-top:1px}
.attpop-hint{padding:4px 10px 8px;font-size:11px;color:var(--dim);letter-spacing:.2px;text-align:center}
.attpop-lib{display:flex;align-items:center;gap:8px;padding:9px 10px;border-radius:8px;border:none;background:transparent;color:var(--ink);cursor:pointer;font-family:inherit;text-align:left;line-height:1.35;width:100%}
.attpop-lib:hover{background:var(--bg2)}
.attpop-lib b{font-size:13px;font-weight:500;min-width:88px}
.attpop-lib i{font-style:normal;font-size:11.5px;color:var(--dim);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.attpop-lib span{color:var(--dim);font-size:11.5px;flex:none}

/* 资料库弹层（品类选择 + 列表） */
.libpop{position:absolute;left:12px;top:100%;margin-top:6px;min-width:280px;background:var(--bg);border:1px solid var(--line);border-radius:10px;box-shadow:0 8px 28px rgba(0,0,0,.12);padding:6px;display:none;z-index:9}
.libpop.open{display:block}
.libpop .libph{font-size:12px;color:var(--dim);padding:6px 8px 8px;letter-spacing:.4px}
.libpop button[type="button"]{display:flex;flex-direction:column;align-items:flex-start;width:100%;text-align:left;padding:8px 10px;border-radius:8px;border:none;background:transparent;color:var(--ink);cursor:pointer;gap:2px;line-height:1.35}
.libpop button[type="button"]:hover{background:var(--bg2)}
.libpop b{font-size:13px;font-weight:500}
.libpop i{font-style:normal;color:var(--dim);font-size:11.5px}
.libpop span{margin-left:auto;color:var(--dim);font-size:11.5px}
.libpop button[type="button"]{flex-direction:row;align-items:center}
.libpop button[type="button"] b,.libpop button[type="button"] i{display:block}
.libpop button[type="button"] b{min-width:84px}

.liblist{position:fixed;left:50%;top:50%;transform:translate(-50%,-50%);background:var(--bg);border:1px solid var(--line);border-radius:12px;box-shadow:0 18px 48px rgba(0,0,0,.28);padding:8px;display:none;z-index:60;width:min(760px,92vw);max-height:82vh;overflow:auto}
.liblist.open{display:block}
.liblist .lih{display:flex;justify-content:space-between;align-items:center;padding:6px 8px;border-bottom:1px solid var(--line);font-size:12px;color:var(--dim);letter-spacing:.4px}
.liblist .libitem{padding:8px 10px;border-radius:6px;cursor:pointer;border-bottom:1px solid var(--line);line-height:1.45}
.liblist .libitem:hover{background:var(--bg2)}
.liblist .libitem .t{font-size:12.5px;color:var(--ink)}
.liblist .libitem .s{font-size:11px;color:var(--dim);margin-top:3px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.liblist .libitem .m{display:flex;justify-content:space-between;align-items:center;margin-top:4px;font-size:11px;color:var(--dim)}
.liblist .libitem .x{color:var(--dim);font-size:11px}
/* v154：制品预览 —— 图直接显示，SVG/HTML 用沙箱缩略，代码用 pre 摘要 */
.liblist .pv{margin-top:6px;border:1px solid var(--line);border-radius:8px;background:var(--card);overflow:hidden;max-height:200px;display:flex;align-items:center;justify-content:center}
.liblist .pv img{max-width:100%;max-height:200px;object-fit:contain}
.liblist .pv iframe{width:100%;height:180px;border:0;background:#fff}
.liblist .pv .pvsvg{width:100%;height:180px;display:flex;align-items:center;justify-content:center}
.liblist .pv .pvsvg svg{max-width:100%;max-height:180px}
.liblist .pv pre{margin:0;padding:8px 10px;font-size:11px;color:var(--dim);white-space:pre-wrap;word-break:break-all;max-height:180px;overflow:hidden;text-align:left;width:100%}
.liblist .libempty{padding:18px 12px;text-align:center;color:var(--dim);font-size:12.5px}

/* v146：任务模式隐藏 MCP 开关（用不上），附件栏布局自动收拢 */
body.tmode-task .mcpbar #mcpBtn{display:none}
body.tmode-task .mcpbar{justify-content:flex-end}
/* v79：三者视觉重量也统一 —— 交付物空态原本 opacity:.68，边框发虚看着比 MCP 矮，改成不降透明度只降图标色 */
.mcpbar .cico,.mcpbar #artBtn,.mcpbar #mcpBtn{border:1px solid var(--line)}
.mcpbar #artBtn.zempty{opacity:1;color:var(--dim)}
.mcpbar #artBtn.zempty svg{opacity:.75}
.cico{width:30px;height:30px;min-width:30px;border-radius:50%;background:var(--card);border:1px solid var(--line);color:var(--dim);
  display:inline-flex;align-items:center;justify-content:center;cursor:pointer;font-family:inherit}
.cico:hover{color:var(--acc);border-color:var(--accborder)}
.cico svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.cico.on{color:#fff;background:#e0504f;border-color:#e0504f;animation:micPulse 1.15s ease-in-out infinite}
@keyframes micPulse{0%,100%{box-shadow:0 0 0 0 rgba(224,80,79,.5)}50%{box-shadow:0 0 0 8px rgba(224,80,79,0)}}
.cico.busy{opacity:.55;pointer-events:none}
.attstrip{display:flex;flex-wrap:wrap;gap:6px;padding:0 6px 6px}
.attchip{display:inline-flex;align-items:center;gap:6px;background:var(--soft);border:1px solid var(--line);border-radius:999px;padding:3px 9px;font-size:11.5px;color:var(--dim);max-width:240px}
.attchip b{font-weight:600;color:var(--fg);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:150px}
.attchip .x{cursor:pointer;opacity:.55}
.attchip .x:hover{opacity:1}
.attchip.err{border-color:#e0b0b0;color:#c0455e}
.mcpchip{display:inline-flex;align-items:center;gap:6px;background:var(--card);border:1px solid var(--line);color:var(--dim);
  border-radius:999px;padding:4px 11px;font-size:11.5px;cursor:pointer;font-family:inherit}
.mcpchip:hover{color:var(--acc);border-color:var(--accborder)}
.mcpchip .d{width:6px;height:6px;border-radius:50%;background:var(--line)}
.mcpchip.on .d{background:var(--acc);box-shadow:0 0 0 3px rgba(43,82,200,.16)}
.mcppop{position:absolute;left:0;bottom:36px;z-index:58;width:min(330px,calc(100vw - 32px));max-height:min(52vh,420px);overflow:auto;
  background:var(--card);border:1px solid var(--line);border-radius:12px;box-shadow:0 12px 34px rgba(16,20,34,.18);padding:8px;display:none}
.mcppop.on{display:block}
.mcppop .mph{display:flex;align-items:center;gap:8px;padding:6px 8px 8px;font-size:12px;color:var(--dim2);border-bottom:1px solid var(--line);margin-bottom:6px}
.mcppop .mph .mps{margin-left:auto;font-size:11px;color:var(--dim2)}
.mcppop .mpempty{padding:16px;text-align:center;color:var(--dim2);font-size:12.5px}
.mcpgrp{font-size:11px;color:var(--dim2);padding:7px 8px 3px;letter-spacing:.3px}
.mcprow{display:flex;align-items:flex-start;gap:9px;padding:7px 8px;border-radius:8px;cursor:pointer}
.mcprow:hover{background:var(--soft)}
.mcprow input{margin-top:2px;width:15px;height:15px;accent-color:var(--acc);flex:none}
.mcprow .mi{min-width:0;flex:1}
.mcprow .mn{font-size:12.5px;color:var(--fg);display:flex;align-items:center;gap:6px}
.mcprow .mn code{font-family:ui-monospace,Menlo,monospace;font-size:10.5px;color:var(--dim2)}
.mcprow.slim{align-items:center;padding:4px 8px;gap:6px}
.mcprow.slim .mn{font-size:12px;color:var(--fg);display:flex;align-items:center;gap:6px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mcprow.slim input{width:14px;height:14px;margin:0}
/* v122：任务模式只留 loop 按钮；连接模式模型/loop 都不显示 */
body.tmode-task .cbot .mpill{display:none}
body.tmode-conn .cbot .mpill,body.tmode-conn .cbot .loopbtn{display:none}
body.tmode-conn #taskReplyBar{display:none!important}
/* v146：任务模式不需要 MCP 开关（用不上），隐藏 mcp 按钮，附件栏布局自动收拢 */
body.tmode-task .mcpbar #mcpBtn{display:none}
body.tmode-task .mcpbar{justify-content:flex-end}
.tkmotto{font-size:14px;color:var(--dim);letter-spacing:.4px;margin-top:14px}
/* v123：连接模式＝接入入口 */
.connacts{display:flex;flex-wrap:wrap;gap:8px;justify-content:center;margin:20px auto 6px;max-width:560px}
.connact{display:inline-flex;align-items:center;padding:8px 14px;border:1px solid var(--line);border-radius:999px;
  background:var(--card);color:var(--fg2);font-size:13px;text-decoration:none;cursor:pointer;font-family:inherit}
.connact:hover{border-color:var(--accborder);color:var(--acc)}
.connact.pri{background:var(--accsoft);border-color:var(--accborder);color:var(--acc);font-weight:600}
.connbots{max-width:560px;margin:16px auto 0;text-align:left}
.connbots .cbh{font-size:12px;color:var(--dim2);margin:0 0 6px}
.connbots .cbrow{display:flex;align-items:center;gap:8px;padding:7px 10px;border:1px solid var(--line);
  border-radius:9px;background:var(--card);margin-bottom:6px;font-size:12.5px}
.connbots .cbrow .an{color:var(--fg)}
.connbots .cbrow .apid{font-family:ui-monospace,Menlo,monospace;font-size:11px;color:var(--dim2);margin-left:auto}
.connbots .cbrow .am{color:var(--dim);font-size:11.5px}
.connbots .cbrow{flex-wrap:wrap}
.connbots .cbrow.clickable{cursor:pointer}
.connbots .cbrow.clickable:hover{background:var(--soft)}
.connbots .cbopen{margin-left:auto;padding:2px 10px;border:1px solid var(--accborder);border-radius:999px;
  background:transparent;color:var(--acc);font-size:11.5px;cursor:pointer;font-family:inherit}
.connbots .cbsn{flex-basis:100%;color:var(--dim);font-size:11.5px;margin-top:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.connbots .cbeye{margin-left:8px;padding:2px 9px;border:1px solid var(--line);border-radius:999px;background:transparent;
  color:var(--dim);font-size:11.5px;cursor:pointer;font-family:inherit}
.connbots .cbeye:hover{color:var(--acc);border-color:var(--accborder)}
.connbots .cbsecret{flex-basis:100%;margin-top:6px;padding:8px 10px;border:1px dashed var(--line);border-radius:9px;background:var(--soft)}
.connbots .cbsecret .bl{font-size:11px;color:var(--dim2);margin:6px 0 2px}
.connbots .cbsecret code{display:block;font-family:ui-monospace,Menlo,monospace;font-size:11.5px;word-break:break-all;color:var(--fg)}
.connbots .cbsecret .acts{margin-top:8px}
.connbots .cbsecret .acts button{padding:4px 10px;border:1px solid var(--line);border-radius:8px;background:var(--card);
  color:var(--fg2);font-size:12px;cursor:pointer;font-family:inherit}
.botform{display:flex;flex-direction:column;gap:8px;margin:10px 0}
.botform input{padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:var(--bg);color:var(--fg);font-family:inherit;font-size:13px}
.botout{margin-top:8px}
.botout .bl{font-size:11.5px;color:var(--dim2);margin:8px 0 3px}
.botout code{display:block;font-family:ui-monospace,Menlo,monospace;font-size:12px;background:var(--soft);
  border:1px solid var(--line);border-radius:7px;padding:7px 9px;word-break:break-all;color:var(--fg)}
.botout pre{white-space:pre-wrap;word-break:break-all;font-size:11.5px;background:var(--soft);border:1px solid var(--line);
  border-radius:7px;padding:8px 9px;margin:0;color:var(--dim)}
.botout .acts{display:flex;gap:8px;margin-top:10px}
.botout .acts button{padding:6px 12px;border-radius:8px;border:1px solid var(--line);background:var(--card);
  color:var(--fg2);font-size:12.5px;cursor:pointer;font-family:inherit}
.botout .acts button:hover{border-color:var(--accborder);color:var(--acc)}
.botout .warn{margin-top:8px;font-size:11.5px;color:var(--dim2)}
#taskLine{display:none;font-size:12px;color:var(--dim);letter-spacing:.3px;padding:0 4px 5px;user-select:none}
body.tmode-task #taskLine{display:none}   /* v129：曾健要求不常驻；任务首页那句保留 */
.mcprow.slim .mn .md{font-style:normal;margin-left:8px;font-size:11px;color:var(--dim);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mcprow .mke{margin-left:auto;font-size:10px;color:var(--dim2);border:1px solid var(--line);border-radius:5px;padding:0 4px}
.mcprow .mcpy{margin-left:6px;background:var(--soft);border:1px solid var(--line);color:var(--dim);border-radius:6px;padding:1px 7px;font-size:11px;cursor:pointer;font-family:inherit}
.mcprow .mcpy:hover{color:var(--acc);border-color:var(--accborder)}
.sw{position:relative;display:inline-flex;align-items:center;width:30px;height:17px;flex:none;cursor:pointer}
.sw input{position:absolute;opacity:0;width:100%;height:100%;margin:0;cursor:pointer}
.sw i{position:absolute;inset:0;border-radius:999px;background:#d8dce4;transition:background .15s}
.sw i:before{content:"";position:absolute;top:2px;left:2px;width:13px;height:13px;border-radius:50%;background:#fff;transition:transform .15s;box-shadow:0 1px 2px rgba(0,0,0,.18)}
.sw input:checked + i{background:var(--acc)}
.sw input:checked + i:before{transform:translateX(13px)}
.sw.busy{opacity:.5;pointer-events:none}
.mcprow.slim{padding-right:6px}
.mcprow .md{font-size:11px;color:var(--dim2);margin-top:1px}
.mcppop .mpf{display:flex;gap:6px;padding:8px;border-top:1px solid var(--line);margin-top:6px}
.mcppop .mpf .cp{flex:1;background:var(--soft);border:1px solid var(--line);color:var(--dim);border-radius:8px;padding:7px;font-size:12px;font-family:inherit;cursor:pointer}
.mcppop .mpf .cp:hover{color:var(--acc);border-color:var(--accborder)}
.composer .tip{text-align:center;font-size:12.5px;color:var(--dim2);letter-spacing:.6px;margin:0 0 9px;user-select:none}
.cbot .cico{width:34px;height:34px;margin-right:6px;border:0;background:transparent;color:var(--dim);border-radius:10px;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto}
.cbot .cico:hover{background:var(--bg2);color:var(--fg)}
.selmode .cbot .cico{background:var(--accsoft);color:var(--acc)}
.selmode .msg{position:relative;cursor:pointer}
.selbox{display:none;position:absolute;top:5px;left:-3px;width:18px;height:18px;border-radius:50%;border:1.6px solid var(--line);background:var(--card);box-shadow:0 1px 3px rgba(0,0,0,.07);z-index:4}
.selmode .msg .selbox{display:block}
.selmode .msg.u .selbox{left:auto;right:-3px}
.selmode .msg.sel .selbox{background:var(--acc);border-color:var(--acc)}
.selmode .msg.sel .selbox::after{content:"";position:absolute;left:5.5px;top:2px;width:5px;height:9px;border:2px solid #fff;border-top:0;border-left:0;transform:rotate(42deg);border-radius:1px}
.selmode .msg.sel .body{outline:2px solid var(--acc);outline-offset:3px;border-radius:12px}
.selmode .msg .mops,.selmode .msg .svgops{display:none!important}
.selmode .composer .tip{visibility:hidden}
.selbar{display:none!important}                       /* v114：浮动批量条废弃（挡正文）→ 按钮移到顶部 sticky 条 */
.selbar .cnt{font-size:12.5px;color:var(--dim);padding:0 5px;white-space:nowrap}
.selbar button{background:var(--bg2);border:1px solid var(--line);color:var(--fg);font-size:12.5px;padding:7px 11px;border-radius:9px;white-space:nowrap;cursor:pointer;font-family:inherit}
.lbl{font-size:11.5px;color:var(--dim2);letter-spacing:1.2px;padding:6px 16px 2px;user-select:none}

/* ═══ v15：移动端适配（含左上角收栏 / 触碰目标 / 批量条） ═══ */
@media(max-width:760px){
  #side{width:86vw;max-width:340px}
  #menuBtn{padding:0;width:38px;height:38px;display:inline-flex;align-items:center;justify-content:center;border-radius:10px}
  .cbot .cico{width:32px;height:32px}
  .ttbtn{width:34px;height:34px;display:inline-flex;align-items:center;justify-content:center}
  .newbtn{padding:12px 14px;font-size:14px}
  .aside-top{padding:12px 12px 8px}
  .aside-mark{width:30px;height:30px;flex:0 0 30px;font-size:13px}
  .search-trigger{margin:0 12px 10px;padding:8px 10px;font-size:12px}
  .citem{padding:11px 12px;font-size:13.5px}
  .citem .cacts{opacity:1}
  .composer .tip{font-size:12px;margin:0 0 7px}
  .selbar{bottom:calc(112px + env(safe-area-inset-bottom,0px));gap:5px;padding:7px 8px;border-radius:13px;max-width:96vw}
  .selbar button{padding:9px 10px;font-size:12px}
  .selbar .cnt{font-size:12px}
  .selbox{width:20px;height:20px;top:4px}
  .selmode .msg.sel .selbox::after{left:6px;top:2.5px}
  .msg.u .mops{position:static;opacity:1;pointer-events:auto;justify-content:flex-end;margin:6px 0 0}
  .selmode .msg .mops{display:none!important}
  .msg .body{max-width:88%}
}
@media(max-width:400px){ .selbar .cnt{display:none} }

/* ═══ v16：流式不闪（常驻容器 + img 承载中间态图形） ═══ */
.livebox>*:first-child{margin-top:0}
.livebox>*:last-child{margin-bottom:0}
img.livesvg{display:block;max-width:100%;height:auto;margin:10px 0;border-radius:10px}
.mmeta{display:inline-block;font-size:11.5px;color:var(--dim2);margin-top:8px;letter-spacing:.3px;user-select:none;
  border:1px solid var(--line);background:var(--soft);border-radius:8px;padding:4px 10px}
#status{display:none}

/* ═══ v18：全选跟着消息走（消息区顶部吸顶） ═══ */
.seltop{display:none;flex:0 0 auto;align-items:center;gap:9px;padding:8px 12px;margin:0 0 2px;
  background:linear-gradient(180deg,var(--bg) 60%,transparent)}
body.selmode .seltop{display:flex}
.seltop .minibtn{display:inline-flex;align-items:center;gap:6px;background:var(--card);border:1px solid var(--line);
  color:var(--fg);font-size:12.5px;padding:6px 12px;border-radius:20px;cursor:pointer;font-family:inherit}
.seltop .minibtn:hover{border-color:var(--acc);color:var(--acc2)}
.seltop .minibtn svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.seltop .cnt{font-size:12px;color:var(--dim2);letter-spacing:.3px;white-space:nowrap}
.seltop .selops{display:flex;flex-wrap:wrap;gap:4px;margin:0;padding:0}
.seltop .selops .mico{width:30px;height:30px}
.seltop .selops .mico svg{width:15px;height:15px}
.seltop .minibtn{flex:0 0 auto}

/* ═══ v20：多标签并行对话（每标签独立会话 + 后台继续跑） ═══ */
.topbar{align-items:center}
.tabbar{flex:1;display:flex;align-items:center;gap:4px;min-width:0;overflow:hidden}
/* v87：多标签在手机上体验差（曾健要求去掉）→ 标签条整体隐藏，模式按钮移到顶栏右侧 */
.tabbar[hidden]{display:none}
.modesw{margin-left:auto}
.tablist{display:flex;align-items:center;gap:4px;overflow-x:auto;scrollbar-width:none;min-width:0}
.tablist::-webkit-scrollbar{display:none}
.tab{display:inline-flex;align-items:center;gap:7px;max-width:210px;padding:6px 7px 6px 12px;
  border-radius:10px;border:1px solid transparent;background:transparent;color:var(--dim);
  font-size:12.5px;font-family:inherit;cursor:pointer;white-space:nowrap;transition:background .16s,color .16s,border-color .16s}
.tab:hover{background:var(--soft);color:var(--fg)}
.tab.on{background:var(--card);border-color:var(--line);color:var(--fg);box-shadow:0 2px 10px rgba(20,26,40,.07)}
.tab .tname{max-width:132px;overflow:hidden;text-overflow:ellipsis}
.tab .tstat{display:inline-flex;align-items:center}
.tab .dot{width:7px;height:7px;border-radius:50%;background:var(--acc);animation:tabpulse 1.05s ease-in-out infinite}
.tab .dot.done{background:#2fa36b;animation:none}
.tab .tx{width:17px;height:17px;line-height:16px;text-align:center;border-radius:5px;font-size:12px;opacity:.45}
.tab .tx:hover{opacity:1;background:var(--soft)}
.tabnew{flex:none;width:30px;height:30px;border-radius:9px;border:1px solid var(--line);background:transparent;
  color:var(--dim);font-size:16px;line-height:1;cursor:pointer;font-family:inherit}
.tabnew:hover{color:var(--acc2);border-color:var(--accborder);background:var(--accsoft)}
@keyframes tabpulse{0%,100%{opacity:.35;transform:scale(.85)}50%{opacity:1;transform:scale(1)}}
/* 每个标签一个独立滚动容器（滚动位置、草稿、流式互不干扰） */
.msgs{flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden;padding:0}
.panes{flex:1;position:relative;min-height:0}
.tabpane{position:absolute;inset:0;overflow-y:auto;-webkit-overflow-scrolling:touch;display:none;padding:18px 16px 20px;scroll-behavior:smooth}
.tabpane.on{display:block}
@media (max-width:820px){ .tabpane{padding:14px 11px 6px} .tab .tname{max-width:96px} }
/* ═══ v32：顶栏那个白底方块按钮 —— 去白底，且不跟侧栏自带的收栏按钮重复 ═══ */
#menuBtn{background:transparent;border:1px solid transparent;color:var(--dim);padding:0;
  width:30px;height:30px;min-width:30px;min-height:30px;border-radius:9px;
  display:inline-flex;align-items:center;justify-content:center;transition:background .16s,color .16s}
#menuBtn:hover{background:var(--soft);color:var(--fg)}
@media (min-width:761px){ #app:not(.side-hidden) #menuBtn{display:none} }   /* 侧栏开着时用侧栏自己的 ‹‹，不重复 */
@media (max-width:760px){
  /* v172：cbot 在 mobile 上按钮太多会挤掉 input —— 折叠次要按钮到 ⋯ 弹层；v175.4.6：memBtn（莫比乌斯环）与 attBtn（附件）恢复显示（Owner 要求找回来），仅 MCP/语音继续隐藏 */
  .cbot .mcpchip,#cbot #mcpBtn,.cbot #vToggle{display:none}
  .cbot .cico{width:30px;height:30px;margin-right:0}
  .cbot{gap:4px;padding:0 1px}
  #input{min-height:42px;font-size:15px;padding:4px 6px}
  /* 展开侧栏按钮保证可见 */
  #menuBtn{width:34px;height:34px;min-width:34px;min-height:34px;color:var(--fg2)}
  /* v175.4.7：恢复消息区两侧留白 —— v175 把 padding 清零导致文字贴着屏幕边（Owner：左右文字挤出去了） */
  .tabpane{padding:14px 12px 8px}
  .msg pre{max-width:100%}
  .msg pre::-webkit-scrollbar{height:4px}
  .msg pre::-webkit-scrollbar-thumb{background:var(--line);border-radius:4px}
  .msg .body{font-size:14.5px}
  .citem{padding:10px 12px;font-size:13.5px}
  /* v175.4.6：cbot 自适应收窄 —— 长模型名/长发言方式把行撑爆、右侧按钮被挤出屏（Owner：左右文字挤出去了）。
     按钮 min-width:0 允许压缩，文字省略号截断；320px 极窄屏再藏发言方式文字只留图标 */
  .cbot .mpill,.cbot .loopbtn{min-width:0;flex-shrink:1}
  .cbot .mpill svg{flex:0 0 auto}
  #mName{max-width:30vw}
  #loopLabel{max-width:72px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
}
@media (max-width:340px){ #loopLabel{display:none} }
/* ═══ v32b：历史会话 hover 不再挤动标题（⋯ 原来 display:none→flex 会重算省略号＝文字闪）═══ */
.citem{transition:background .12s ease}
.citem .cm{transition:opacity .12s ease}
.citem .cacts{position:absolute;right:6px;top:50%;transform:translateY(-50%);display:flex;gap:3px;
  opacity:0;pointer-events:none;transition:opacity .12s ease;
  background:var(--soft);border-radius:9px;padding:3px 5px 3px 9px}   /* v68：实底，不再透出背后文字 */
.citem:not(:hover):not(.on) .cacts{background:transparent}
.citem:hover .cacts,.citem.on .cacts{opacity:1;pointer-events:auto}
.citem:hover .cm,.citem.on .cm{opacity:0}                        /* 计数让位给 ⋯，不挪位 */
.citem .cmenu{right:6px}
/* v73：菜单打开时不再依赖 hover（原来鼠标一离开行，.cacts 变 pointer-events:none → 删除点不到） */
.citem.menuopen{background:var(--soft);z-index:40}
.citem.menuopen .cacts{display:flex;opacity:1;pointer-events:auto}
.citem.menuopen .cm{opacity:0}
.citem.up .cmenu{top:auto;bottom:34px}
@media (max-width:760px){ .citem .cacts{position:static;transform:none;opacity:1;pointer-events:auto} }
@media (hover:none){ .citem .cacts{opacity:1;pointer-events:auto} }
/* ═══ v33：长代码/HTML 折叠 ═══ */
/* HTML 预览全屏 */
.prevfs{position:fixed;inset:0;z-index:9999;background:var(--bg);display:flex;flex-direction:column}
.prevfsbar{display:flex;align-items:center;gap:8px;padding:10px 14px;border-bottom:1px solid var(--line);background:var(--card)}
.prevfst{flex:1;font-size:13px;color:var(--dim);font-weight:600}
.prevfs iframe{flex:1;width:100%;border:0;background:#fff}
.codewrap{position:relative;margin:10px 0}
.codewrap.collapsed pre{max-height:320px;overflow:hidden}
.codewrap .cwfade{display:none}
.codewrap.collapsed .cwfade{display:block;position:absolute;left:0;right:0;bottom:38px;height:76px;pointer-events:none;
  background:linear-gradient(to bottom,transparent,var(--code));border-radius:0 0 10px 10px}
.cwbtn{display:inline-flex;align-items:center;gap:6px;margin-top:8px;padding:5px 12px;border-radius:8px;
  border:1px solid var(--line);background:var(--card);color:var(--dim);font-size:12px;cursor:pointer;font-family:inherit}
.cwbtn:hover{color:var(--acc2);border-color:var(--accborder);background:var(--accsoft)}
/* ═══ v33：右侧悬浮章节导航 ═══ */
.navrail{position:absolute;right:8px;top:50%;transform:translateY(-50%);z-index:12;display:none;justify-content:flex-end}
.navrail.on{display:flex}
.navrail .nrList{display:flex;flex-direction:column;gap:5px;align-items:flex-end;max-width:0;overflow:hidden;opacity:.75;
  background:var(--card);border:1px solid transparent;border-radius:12px;padding:0;transition:max-width .18s ease,opacity .18s ease,padding .18s ease}
.navrail:hover .nrList{max-width:280px;opacity:1;border-color:var(--line);padding:8px;box-shadow:0 12px 30px rgba(10,14,28,.14)}
.nritem{display:flex;align-items:center;gap:8px;background:none;border:none;cursor:pointer;padding:1px 0;font-family:inherit;color:var(--dim2)}
.nrdot{flex:none;width:16px;height:3px;border-radius:3px;background:var(--dim2);opacity:.55;transition:width .16s,background .16s,opacity .16s}
.nritem.on .nrdot,.nritem:hover .nrdot{background:var(--acc2);opacity:1;width:26px}
.nrlb{font-size:12px;line-height:1.5;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:0;transition:max-width .18s ease}
.navrail:hover .nrlb{max-width:210px}
.nritem.on .nrlb{color:var(--fg1)}
.mops button.faved{color:#e0a22b}
.mops button.faved svg{fill:currentColor}
@media (max-width:760px){ .navrail{right:2px} .nrlb{max-width:0} }
/* ═══ v35：选择器三分组（模型/智能体/Loop）· 发言方式 · 交付制品 ═══ */
.mghadd{margin-left:auto;background:none;border:1px solid var(--line);color:var(--dim);border-radius:999px;font-size:11px;padding:2px 9px;cursor:pointer;font-family:inherit}
.mghadd:hover{border-color:var(--accborder);color:var(--acc2)}
.mitem .mkind{font-size:10.5px;color:var(--dim2);border:1px solid var(--line);border-radius:999px;padding:1px 6px;margin-left:auto;flex:none}
.mitem.loo .mkind,.mitem.loo.on .mkind{border-color:var(--accborder);color:var(--acc)}
.mitem .radio{width:14px;height:14px;border:1.6px solid var(--line);border-radius:50%;flex:none;position:relative;box-sizing:border-box}
.mitem.loo.on .radio{border-color:var(--acc)}
.mitem.loo.on .radio::after{content:'';position:absolute;inset:2.6px;border-radius:50%;background:var(--acc)}
.mitem .nround{width:52px;background:var(--soft);border:1px solid var(--line);color:var(--fg);border-radius:7px;padding:2px 6px;font-family:inherit;font-size:12px;margin-left:6px}
.mdesc{font-size:11px;color:var(--dim2);line-height:1.6;padding:0 9px 6px 32px;margin-top:-4px}
.agin{flex:1;min-width:0;background:var(--soft);border:1px solid var(--line);color:var(--fg);border-radius:8px;padding:6px 9px;font-family:inherit;font-size:13px}
.agbar{display:flex;gap:8px;align-items:center;padding:10px 15px;border-bottom:1px solid var(--line);background:var(--card)}
.agbar .agsel{flex:1;min-width:0}
.artfab{position:fixed;right:16px;bottom:calc(140px + env(safe-area-inset-bottom));z-index:60;display:none;align-items:center;gap:6px;background:var(--acc);color:#fff;border:none;border-radius:999px;padding:9px 14px;font-family:inherit;font-size:12.5px;cursor:pointer;box-shadow:0 10px 26px rgba(10,14,28,.22)}
.artfab.on,.artfab:hover{filter:brightness(1.06)}
.artwrap{position:fixed;inset:0;z-index:9997;display:none;background:rgba(12,16,30,.42)}
.artwrap.on{display:block}
.artpanel{position:absolute;right:0;top:0;bottom:0;width:min(620px,95vw);background:var(--bg);border-left:1px solid var(--line);display:flex;flex-direction:column;box-shadow:-18px 0 44px rgba(10,14,28,.18)}
.arth{display:flex;align-items:center;gap:8px;padding:13px 15px;border-bottom:1px solid var(--line);background:var(--card)}
.arttitle{font-weight:700;font-size:15px;flex:1}
.artbody{flex:1;overflow:auto;padding:12px 15px}
.artitem{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:10px;margin-bottom:11px}
.artih{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:8px}
.artkind{font-size:11px;border-radius:999px;padding:2px 9px;border:1px solid var(--accborder);color:var(--acc2);background:var(--accsoft)}
.artname{font-size:11.5px;color:var(--dim2)}
.artbar{margin-left:auto;display:flex;gap:5px;flex-wrap:wrap}
.cp svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.cp.ic2{padding:5px 8px;gap:0}
.mico i{font-size:13.5px;font-style:normal;line-height:1;color:var(--acc);display:inline-flex;align-items:center;justify-content:center;width:100%;height:100%}
.mico i:only-child{font-size:14px}
.mitem.loo{align-items:flex-start}
.mitem.loo .radio{margin-top:4px}
.mitem.loo .cp{margin-left:auto;flex:none}

.artcode{margin:0;background:var(--soft);border:1px solid var(--line);border-radius:9px;padding:9px;font-size:11.5px;line-height:1.6;max-height:220px;overflow:auto;white-space:pre-wrap;word-break:break-all;color:var(--dim)}
.artpv{margin-top:9px;border:1px solid var(--line);border-radius:9px;overflow:hidden;background:#fff}
.artpv iframe{width:100%;height:330px;border:none;display:block;background:#fff}
/* ═══ v34：多选模式（模型多选）+ @ 目标（多模型/智能体并行同问） ═══ */
.mitem .mbox{width:14px;height:14px;border:1.6px solid var(--line);border-radius:4px;flex:none;display:none;position:relative;box-sizing:border-box}
.mitem.msel .mbox{display:block}
.mitem.msel .tick{display:none}
.mitem.on .mbox{border-color:var(--acc);background:var(--acc)}
.mitem.on .mbox::after{content:'';position:absolute;left:3.5px;top:0.5px;width:4px;height:8px;border:2px solid #fff;border-top:0;border-left:0;transform:rotate(42deg)}
.atpop{position:absolute;left:0;bottom:calc(100% + 8px);width:min(320px,88vw);max-height:46vh;overflow-y:auto;background:var(--card);border:1px solid var(--line);border-radius:12px;box-shadow:0 16px 38px rgba(10,14,28,.18);display:none;flex-direction:column;padding:6px;z-index:41}
.atpop.on{display:flex}
.atitem{display:block;width:100%;text-align:left;background:none;border:none;color:var(--fg1);font-family:inherit;font-size:13px;padding:9px 10px;border-radius:9px;cursor:pointer}
.atitem:hover{background:var(--accsoft);color:var(--acc2)}
.atitem.on{background:var(--accsoft);color:var(--acc2);outline:1px solid var(--acc2)}   /* v111：键盘上下选中 */
.wholabel{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;color:var(--acc2);background:var(--accsoft);border:1px solid var(--accborder);border-radius:999px;padding:2px 9px;margin-bottom:8px;letter-spacing:.2px}
/* 注意：标签必须挂在 .msg 上（不能塞进 .body）——renderMD 用 replaceChildren 会把它清掉 */
.msg.haswho{position:relative;padding-top:34px}
.msg.haswho>.wholabel{position:absolute;left:34px;top:12px;margin:0;max-width:calc(100% - 46px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* ═══ v53：语音/文字输入模式切换（语音与发送键合并）+ 附件与交付物同行 + 外部接口试/用 ═══ */
.mcpbar .csp2{flex:1}
/* v119：输入框那一行的模式切换（紧凑胶囊，与 MCP/附件/交付物 同高 26px） */
.mcpbar .modeseg{flex:0 0 auto;height:26px;box-sizing:border-box;padding:2px;gap:2px;  background:transparent;border:1px solid var(--line);border-radius:999px;align-items:center}
.mcpbar .modeseg button{flex:0 0 auto;min-height:20px;height:20px;padding:0 10px;border-radius:999px;
  font-size:12px;line-height:20px;box-sizing:border-box}
.mcpbar .modeseg button.on{background:var(--accsoft);color:var(--acc);font-weight:600}
/* v156：左栏顶部的模式切换 —— 隐藏输入框边那个旧的；新的大按钮 */
#modeSeg{display:none!important}
/* v168：侧栏顶部结构 = 分段整行 + 新建按钮整行（不并列） */
.sidebtns{flex-direction:column;gap:8px}
.sidebtns .modeseg{width:100%;height:34px;margin-top:0}
.sidebtns .modeseg button{font-size:13px}
#artBtn{margin-left:0}
#attBtn{width:26px;height:26px;min-width:26px;margin:0;padding:0;border-radius:50%;background:var(--card);border:1px solid var(--line);color:var(--dim);display:inline-flex;align-items:center;justify-content:center;cursor:pointer;flex:0 0 auto}
#attBtn:hover{border-color:var(--acc);color:var(--acc)}
#attBtn svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
#attBtn.on{background:var(--accsoft);border-color:var(--accborder);color:var(--acc);animation:none}
#attBtn.busy{opacity:.5;pointer-events:none}
/* 输入模式切换（语音 / 文字） */
#vToggle{width:34px;height:34px;padding:0;border:0;background:transparent;color:var(--dim);border-radius:10px;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto}
#vToggle:hover{background:var(--bg2);color:var(--fg)}
#vToggle svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
#vIcoKbd{display:none}
body.vmode #vToggle{background:var(--accsoft);color:var(--acc)}
body.vmode #vIcoMic{display:none}
body.vmode #vIcoKbd{display:block}
/* 语音模式：textarea 换成占满宽度的「按住 说话」条 */
#micHold.vbar{display:none;width:100%;min-height:54px;box-sizing:border-box;align-items:center;justify-content:center;gap:9px;padding:0 12px;
  background:var(--soft);border:1px solid var(--line);border-radius:13px;color:var(--dim);font-family:inherit;font-size:14.5px;letter-spacing:1px;
  cursor:pointer;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none;touch-action:none}
#micHold.vbar svg{width:19px;height:19px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;flex:none}
#micHold.vbar .vtxt2{display:none}
#micHold.vbar.on{background:#e0504f;border-color:#e0504f;color:#fff;animation:micPulse 1.15s ease-in-out infinite}
#micHold.vbar.on .vtxt1{display:none}
#micHold.vbar.on .vtxt2{display:inline}
body.vmode #micHold.vbar{display:flex}
body.vmode #input{display:none}
body.vmode #send{display:none!important}
body.vmode .cwrap{border-color:var(--accborder)}
/* 外部接口：试/用 结果区 */
.extres{display:none;margin:0 8px 7px;padding:7px 9px;background:var(--soft);border:1px solid var(--line);border-radius:9px;font-size:11.5px;line-height:1.6}
.extres.on{display:block}
.extres .eh{display:flex;align-items:center;gap:6px;color:var(--dim2);font-size:11px;margin-bottom:4px}
.extres .eh b{color:var(--fg);font-weight:600}
.extres .etg{margin-left:auto;background:none;border:0;padding:0;color:var(--acc);font-size:11px;font-family:inherit;cursor:pointer}
.extres pre{margin:0;white-space:pre-wrap;word-break:break-word;max-height:132px;overflow:auto;color:var(--fg1);font-size:11px;line-height:1.62}
.extres.exp pre{max-height:330px}
.extres.bad .eh b,.extres .eerr{color:#c0455e}
.mcprow .mcpy.busy{opacity:.5;pointer-events:none}
.extnote{margin:0 8px 6px;font-size:10.5px;color:var(--dim2);line-height:1.5}
#loopLabel{display:none}                   /* v68：发言方式触发器只留图标，文字在弹层里 */
body:not(.vmode) #vToggle{display:none}   /* v68：空闲态由「发送」键兼做语音键；语音模式保留返回键 */
#send .mic{display:none}
#send.voice .mic{display:block}
#send.voice .up{display:none}
#memBtn{flex:none;width:34px;height:34px;padding:0;border:0;background:transparent;color:var(--dim);
  border-radius:10px;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;position:relative}
#memBtn svg{width:19px;height:19px;stroke-width:2.2}    /* v175.4：memBtn 莫比乌斯环加粗（原 1.6 太细不易辨认） */
#memBtn:hover{background:var(--bg2);color:var(--fg)}
#memBtn.on{color:var(--acc)}                 /* v93：开=亮色 */
/* v93：原来 .on::after 有个右下角蓝点 → 曾健「莫比乌斯环那个点不要」。删除，只用颜色区分开/关 */
#memBtn:not(.on)::before{content:"";position:absolute;left:7px;right:7px;top:50%;height:1.6px;background:currentColor;
  transform:rotate(-45deg);border-radius:2px}
#mcpCnt{display:none}                    /* v70：chip 上不再显示「X/Y 已开启」，明细看面板 */
.mcpchip .micp{width:15px;height:15px;flex:none}
.mcpchip{padding:5px 8px}               /* v71：只剩图标，收紧内边距 */
.memsw{display:flex;align-items:center;gap:9px;padding:11px 15px 3px;background:var(--card)}
.memsl{font-size:13px;color:var(--fg1);cursor:pointer}
.sophostin{flex:1;overflow:auto;padding:12px 16px 0}
#sopBodyMount,#agPaneSop{display:flex;flex-direction:column;overflow:hidden;padding:0}
#sopHost{display:flex;flex-direction:column;flex:1;min-height:0}
#sopHost .agf{flex:none}
.memnote2{padding:2px 14px 6px;font-size:12px;color:var(--dim2);line-height:1.5}
.memnote{font-size:11.5px;color:var(--dim2);margin-left:auto}

/* ═══ v175.5.7：任务头部条手机适配 —— 原来不折行，标题/＋愿景/头像/说明全挤竖排 ═══ */
@media (max-width:760px){
  .tkhd{flex-wrap:wrap;row-gap:6px}
  /* v175.5.8：任务名在顶栏已显示，头部条里不再重复标题/图标，只留 ＋愿景 / 触发 / 成员 */
  .tkhd .tg{display:none}
  .tkhd b{display:none}
  .tkhd .tkvis{margin-left:0;white-space:nowrap}
  .tkhd .tkmem{display:none}   /* v176.4：成员不展示了，群里直接 @；愿景关联保留在顶部 */
  .tkhd .tkchip{white-space:nowrap;max-width:150px;overflow:hidden}
  .tkhd .mbsum{display:none}    /* 「全部模型与智能体随时可用 · 直接@」—— 描述性长句，手机不显示 */
  .tkhd .tkset{margin-left:auto;order:4}
}

/* ═══ v175.5.13：移动端附件选择 = 居中点选页卡（不再锚在按钮旁的小弹窗）═══ */
@media (max-width:760px){
  .attpop{left:50% !important;right:auto !important;top:50% !important;transform:translate(-50%,-50%) !important;
    width:min(430px,94vw);max-height:76vh;overflow:auto;border-radius:16px}
}


/* ═══════════ v176.1：莫比乌斯环视觉精修 —— 高级感 / 简洁 / 低干扰 ═══════════ */
#memWrap .agpanel{width:min(680px,100vw);border-left:0;box-shadow:-30px 0 80px rgba(10,14,28,.22)}
/* 头部：标题为主，其余轻量化 */
#memWrap .agh{padding:16px 18px 12px;background:transparent;border-bottom:0}
#memWrap .agtitle{font-size:17px;letter-spacing:.5px}
#memWrap .agh .cp{background:transparent;border:0;color:var(--dim);min-height:30px;padding:5px 8px}
#memWrap .agh .cp:hover{color:var(--acc);background:var(--soft)}
#memWrap .agcnt{font-size:11px;color:var(--dim2)}
/* 页签：下划线式，安静 */
#memWrap .agtabs{gap:2px;padding:0 12px;background:transparent;border-bottom:1px solid var(--line);overflow-x:auto;scrollbar-width:none}
#memWrap .agtabs::-webkit-scrollbar{display:none}
#memWrap .agtabs .agtab{border:0;background:transparent;color:var(--dim);border-radius:0;padding:10px 13px;font-size:13px;min-height:38px;position:relative;white-space:nowrap;flex:0 0 auto}
#memWrap .agtabs .agtab:hover{color:var(--fg)}
#memWrap .agtabs .agtab.on{color:var(--fg);font-weight:600}
#memWrap .agtabs .agtab.on::after{content:'';position:absolute;left:10px;right:10px;bottom:-1px;height:2px;border-radius:2px;background:var(--acc)}
/* 子页签：软分段 */
#memWrap #memTabs2{background:transparent;border-bottom:0;padding:4px 16px 0;gap:0}
#memWrap #memTabs2 .agtab{padding:7px 12px;border-radius:8px;font-size:12.5px;color:var(--dim2);min-height:32px}
#memWrap #memTabs2 .agtab.on{background:var(--soft);color:var(--fg);font-weight:600}
/* 工具条：软底输入 + 幽灵按钮 */
#memWrap .agbar{display:flex;align-items:center;gap:8px;padding:10px 16px 6px;background:transparent;flex-wrap:wrap}
#memWrap .agbar .agin,#memWrap .agbar .agsel,#memWrap .agbar input{background:var(--soft);border:1px solid transparent;color:var(--fg);border-radius:10px;min-height:36px}
#memWrap .agbar .agin:focus,#memWrap .agbar .agsel:focus,#memWrap .agbar input:focus{border-color:var(--accborder);background:var(--card);outline:none}
#memWrap .agbar .cp{background:transparent;border:1px solid var(--line);color:var(--acc2);border-radius:10px}
#memWrap .agbar .cp:hover{border-color:var(--accborder);background:var(--accsoft)}
#memWrap .memsw{padding:10px 16px 0}
#memWrap .memlayers{padding:6px 16px 2px}
#memWrap .memlay{border-color:transparent;background:var(--soft)}
#memWrap .memlay.on{background:var(--accsoft);border-color:var(--accborder)}
#memWrap .memnote2{padding:4px 16px 0;color:var(--dim2);font-size:11px}
/* 正文区：呼吸感 */
#memWrap .agbody{padding:8px 16px 14px}
#memWrap .visline{padding:8px 10px;border-bottom:1px solid var(--line);border-radius:0}
#memWrap .visline:hover{background:transparent}
#memWrap .visline:hover span{color:var(--acc2)}
/* 底部：无底色、轻按钮 */
#memWrap .agf{background:transparent;border-top:1px solid var(--line);padding:10px 16px calc(12px + env(safe-area-inset-bottom,0px))}
#memWrap .agf .cp{flex:0 0 auto;background:transparent;border:1px solid var(--line);color:var(--dim)}
#memWrap .agf .cp:hover{color:var(--acc);border-color:var(--accborder)}
/* 移动端：全宽 + 安全区 */
@media (max-width:760px){
  #memWrap .agpanel{width:100vw;box-shadow:none}
  #memWrap .agtitle{font-size:15px;white-space:nowrap}
  #memWrap .agcnt{display:none}          /* 计数在窄屏让位，防标题折行 */
  #memWrap .agh .cp{font-size:12px;padding:5px 6px}
  #memWrap .agh{padding:12px 14px 10px;padding-top:calc(12px + env(safe-area-inset-top,0px))}
  #memWrap .agbody{padding:6px 14px 12px}
  #memWrap .agbar{padding:8px 14px 4px}
}

/* ═══ v176.11：侧栏板块按钮行右对齐 + 版本记录弹层 ═══ */
.side-extras{display:flex;justify-content:flex-end;align-items:center;padding:6px 10px 2px}
.side-extras .batchico{width:28px;height:28px;padding:0}
.verrow{display:flex;align-items:center;gap:10px;padding:8px 2px;border-bottom:1px solid var(--line)}
.verrow b{font-size:12.5px}
.verrow span{flex:1;font-size:11.5px;color:var(--dim2)}
.pick h3{margin-bottom:10px}

/* ═══ v175.5.18：Loop 发言方式在顶栏右上角（⊕ 左边）═══ */
@media (min-width:761px){ #loopBtn{margin-left:auto} }
.topbar #loopBtn{min-height:32px}
@media (max-width:760px){
  .topbar #loopBtn{padding:5px 8px;font-size:12px}
  .looppop{top:54px;right:10px}
}

/* ═══ v175.5.6：批量选择时隐藏底部用户栏（否则盖住批量操作条）═══ */
body.sf-batching .aside-f{display:none}

/* ═══ v175.5.3：移动端顶栏（DeepSeek 式：标题 + ⊕新建）与 AI 生成提示 ═══ */
@media (max-width:760px){
  #topTitle{flex:1;min-width:0;font-size:15px;font-weight:600;color:var(--fg);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:left;letter-spacing:.3px}
  #topNew{flex:0 0 auto;width:32px;height:32px;min-width:32px;min-height:32px;margin-left:auto;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;background:transparent;border:0;color:var(--fg1);cursor:pointer}
  #topNew:hover{background:var(--soft)}
  #topNew svg{width:20px;height:20px}
  .composer{padding-bottom:6px}
  .ai-note{display:block;flex:0 0 auto;text-align:center;font-size:11px;color:var(--dim2);padding:4px 0 calc(8px + env(safe-area-inset-bottom,0px))}
}
@media (min-width:761px){
  #topNew,.ai-note{display:none}
}
/* v176.27：顶栏标题常驻 —— 桌面也显示当前会话/任务/场景标题（原先只有移动端可见，桌面顶栏空着） */
#topTitle{flex:1;min-width:0;font-size:15px;font-weight:600;color:var(--fg);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:left;letter-spacing:.3px}

/* ═══ v176.4：任务头部不展示成员（群里直接 @；愿景关联保留在顶部）═══ */
.tkhd .tkmem{display:none}

/* ═══ v176.31：登录前不显示用户栏 —— .aside-f 有多条 display:flex 覆盖（988/1077/1130），
   会吃掉 hidden 属性的 UA display:none，这里用同属性 !important 压回 ═══ */
.aside-f[hidden]{display:none!important}

/* ============ v176.34：轨迹页（langchain run 树）============ */
.tritem{display:flex;align-items:center;gap:8px;padding:9px 14px;border-bottom:1px solid var(--line);cursor:pointer;font-size:12.5px}
.tritem:hover{background:var(--soft)}
.tdot{width:7px;height:7px;border-radius:50%;flex:none}
.tdot.ok{background:#2fb36b}.tdot.bad{background:#d9534f}
.tritem .trt{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--fg)}
.trm{font-size:11px;color:var(--dim2);flex:none}
.trs{font-size:11px;color:var(--dim2);flex:none}
.trd{font-size:11px;color:var(--dim2);flex:none}
.tracehd{padding:9px 14px;font-size:13px;color:var(--fg);border-bottom:1px solid var(--line);display:flex;gap:8px;align-items:center}
.tracehd .trt{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:600}
.trtree{padding:10px 14px;font-size:12px}
.trrow{display:flex;align-items:center;gap:6px;padding:4px 0;line-height:1.4;min-width:0}
.trtag{flex:none;width:16px;height:16px;border-radius:4px;font-size:10px;display:inline-flex;align-items:center;justify-content:center;color:#fff;background:var(--dim2)}
.trtag.llm{background:var(--acc)}
.trtag.tool{background:#b8860b}
.trtag.memory{background:#2fb36b}
.trtag.prompt{background:#8867c9}
.trrow b{font-weight:600;color:var(--fg);flex:none}
.trms{font-size:10.5px;color:var(--dim2);flex:none}
.trerr{color:var(--bad);font-size:11px;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.trout{color:var(--dim2);font-size:11px;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

.tkdot{display:inline-block;width:6px;height:6px;border-radius:50%;margin-right:5px;vertical-align:1px;background:var(--acc)}
.tkdot.fail{background:#f87171}

/* ═══════════ v196.13：侧栏搜索 / 编辑已发消息 / 版本切换 / 命令面板 ═══════════ */
.qhide{display:none!important}
.sidesearch{position:relative;flex:none;padding:6px 10px 2px}
.sidesearch input{width:100%;box-sizing:border-box;height:30px;padding:0 26px 0 10px;border:1px solid var(--line);border-radius:9px;background:transparent;color:var(--fg);font-size:12.5px;font-family:inherit;outline:none}
.sidesearch input::placeholder{color:var(--dim2)}
.sidesearch input:focus{border-color:var(--accborder);background:var(--card)}
.sidesearch button{position:absolute;right:15px;top:50%;transform:translateY(-35%);border:0;background:none;color:var(--dim2);font-size:15px;line-height:1;cursor:pointer;padding:2px 4px}
.sidesearch button:hover{color:var(--fg)}
.msg.editing .mops{display:none}
.msg .editta{width:100%;box-sizing:border-box;min-height:56px;padding:8px 10px;border:1px solid var(--accborder);border-radius:10px;background:var(--card);color:var(--fg);font:inherit;line-height:1.6;resize:vertical;outline:none}
.msg .editrow{display:flex;justify-content:flex-end;gap:8px;margin-top:8px}
.msg .editrow .cbtn{height:30px;padding:0 14px;border-radius:8px;border:1px solid var(--line);background:var(--soft);color:var(--fg);font-size:12.5px;font-family:inherit;cursor:pointer}
.msg .editrow .cbtn:last-child{background:var(--accsoft);border-color:var(--accborder);color:var(--acc)}
.msg .editrow .cbtn:disabled{opacity:.5;cursor:default}
.verbar{display:inline-flex;align-items:center;gap:2px;color:var(--dim);font-size:12px}
.verbar i{font-style:normal;min-width:30px;text-align:center;font-variant-numeric:tabular-nums}
.verbar button{border:0;background:none;color:var(--dim);cursor:pointer;font-size:15px;line-height:1;padding:2px 5px;border-radius:6px}
.verbar button:hover:not(:disabled){color:var(--fg);background:var(--soft)}
.verbar button:disabled{opacity:.3;cursor:default}
.msg.flash .body{animation:msgflash 1.6s ease-out}
@keyframes msgflash{0%,40%{background:var(--accsoft)}100%{background:transparent}}
.cpmask{position:fixed;inset:0;z-index:100010;background:rgba(12,16,28,.4);display:flex;justify-content:center;align-items:flex-start;padding-top:14vh}
.cpbox{width:min(560px,92vw);background:var(--card);border:1px solid var(--line);border-radius:14px;box-shadow:0 18px 50px rgba(10,14,28,.28);overflow:hidden}
.cpin{width:100%;box-sizing:border-box;height:46px;padding:0 16px;border:0;border-bottom:1px solid var(--line);background:transparent;color:var(--fg);font-size:14.5px;font-family:inherit;outline:none}
.cpin::placeholder{color:var(--dim2)}
.cplist{max-height:min(52vh,420px);overflow:auto;padding:6px}
.cpitem{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:8px;cursor:pointer;font-size:13.5px;color:var(--fg1)}
.cpitem.on{background:var(--soft);color:var(--fg)}
.cpk{flex:none;min-width:30px;font-size:11px;color:var(--dim2)}
.cpt{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cph{flex:none;font-size:11px;color:var(--dim2);font-family:var(--mono)}
.cpnone{padding:18px;text-align:center;color:var(--dim2);font-size:12.5px}
