/* ===== 设计 token：暖色画布 / 方向 A ===== */
:root{
  --primary:#CC6A4E; --canvas:#FAF8F3; --shell:#D8D2C8;
  --ink:#2B2722; --ink2:#312C25; --sub:#8c8475; --sub2:#a39a8c; --ph:#a89f91;
  --userbub:#EFE6DA; --panel:#F1EADD; --panel2:#F3ECE1; --chip:#EFE8DB;
  --bd:#E7DECF; --bd2:#EFE7D9; --bd3:#EEE7DA; --bd4:#E8DFD2; --bd5:#E5DACA;
  --codehead:#211E1B; --codebody:#2A2723; --codeink:#E7E0D4; --codebd:#38332e;
  --green:#46a05f; --greenink:#3f8a55;
  --ctxbar-empty:#E4DBC9;   /* 上下文进度条「未使用」段底色（白天浅色） */
  /* —— 语义色（主题切换时覆盖）—— */
  --surface:#ffffff; --surface2:#faf6ef; --divider:#f3ede3; --icon:#5f574b;
  --inlink:#6a4636; --link:#CC6A4E;
  --toolbg:#FBF4E8; --toolbd:#ECDDBE; --toolink:#9a7b32; --toolname:#7a5c1e; --toolarg:#a99570;
  --warnbg:#FBEDE9; --warnink:#a4503c;
  --glow:rgba(204,106,78,.6);
  --card-shadow:0 8px 22px -10px rgba(55,39,24,.48),0 2px 6px -3px rgba(55,39,24,.28);
  --sans:'Hanken Grotesk','Noto Sans SC',-apple-system,sans-serif;
  --serif:'Newsreader',Georgia,serif;
  --mono:'JetBrains Mono',ui-monospace,monospace;
}
/* ===== VSCode Dark+ 主题：覆盖全部变量即可整体换肤 ===== */
[data-theme="vscode"]{
  --primary:#0e639c; --canvas:#1e1e1e; --shell:#303030;
  --ink:#d4d4d4; --ink2:#d4d4d4; --sub:#9d9d9d; --sub2:#7a7a7a; --ph:#6a6a6a;
  --userbub:#264f78; --panel:#2d2d2d; --panel2:#2a2a2a; --chip:#2d2d2d;
  --bd:#3c3c3c; --bd2:#333333; --bd3:#2b2b2b; --bd4:#3c3c3c; --bd5:#454545;
  --codehead:#252526; --codebody:#1e1e1e; --codeink:#d4d4d4; --codebd:#333333;
  --green:#89d185; --greenink:#89d185;
  --ctxbar-empty:#15171c;   /* 暗色主题：未使用段为近黑 */
  --surface:#252526; --surface2:#2a2d2e; --divider:#333333; --icon:#c5c5c5;
  --inlink:#ce9178; --link:#3794ff;
  --toolbg:#2d2d2d; --toolbd:#3c3c3c; --toolink:#dcdcaa; --toolname:#569cd6; --toolarg:#9d9d9d;
  --warnbg:#5a1d1d; --warnink:#f48771;
  --glow:rgba(14,99,156,.55);
  --card-shadow:0 9px 24px -10px rgba(0,0,0,.72),0 2px 7px -3px rgba(0,0,0,.62);
}
*{box-sizing:border-box;}
html,body{margin:0;height:100%;}
body{
  background:var(--shell); font-family:var(--sans); color:var(--ink);
  -webkit-font-smoothing:antialiased; display:flex; justify-content:center; align-items:stretch;
}
@keyframes blink{0%,49%{opacity:1}50%,100%{opacity:0}}
@keyframes dotPulse{0%,80%,100%{opacity:.25;transform:scale(.7)}40%{opacity:1;transform:scale(1)}}
@keyframes sheetUp{from{transform:translateY(12px);opacity:0}to{transform:translateY(0);opacity:1}}
.ncs::-webkit-scrollbar{display:none;}
.ncs{scrollbar-width:none;}

/* ===== App 外壳：所有视口统一使用完整工作区 ===== */
.app{
  position:relative; width:100%; background:var(--canvas);
  display:flex; flex-direction:column; min-height:0; height:100dvh; overflow:hidden;
}
.pad-top{height:env(safe-area-inset-top);}
.pad-bot{height:env(safe-area-inset-bottom);}

.view{flex:1; min-height:0; display:flex; flex-direction:column;}
.hidden{display:none !important;}

/* ===== 会话列表页 ===== */
.list-head{display:flex; align-items:flex-start; gap:10px; padding:14px 18px 12px;}
.list-title{font:600 20px/1.1 var(--serif); color:var(--ink);}
.list-sub{font:500 12.5px var(--sans); color:var(--sub2); margin-top:3px;}
.btn-new{display:flex; align-items:center; gap:6px; background:var(--primary); border:none;
  border-radius:5px; padding:9px 14px; cursor:pointer; color:#fff; font:600 13.5px var(--sans);
  box-shadow:0 4px 12px -4px var(--glow); flex:none;}
.btn-new:active{transform:scale(.96);}
.btn-icon{flex:none; width:36px; height:36px; border-radius:5px; border:1px solid var(--bd2);
  background:var(--surface); color:var(--icon); display:flex; align-items:center; justify-content:center; cursor:pointer;}
.btn-icon:active{transform:scale(.94);}
/* 「在线设备」一级标签：横向可滚动药丸条 */
.devtabs{display:flex; gap:8px; padding:2px 16px 12px; overflow-x:auto; -webkit-overflow-scrolling:touch;}
.devtabs::-webkit-scrollbar{display:none;}
.devtab{flex:none; display:flex; align-items:center; gap:6px; cursor:pointer;
  background:var(--panel); border:1px solid var(--bd); border-radius:999px;
  padding:6px 12px; font:600 12.5px var(--sans); color:var(--sub);
  transition:background .15s, border-color .15s, color .15s;}
.devtab:hover{color:var(--ink);}
.devtab.sel{background:var(--surface); border-color:var(--primary); color:var(--ink);
  box-shadow:0 0 0 1px var(--primary) inset;}
.devtab.off{opacity:.5; cursor:not-allowed;}
.devtab .dico{font-size:12px; line-height:1;}
.devtab .dname{white-space:nowrap;}
.devtab .ddot{width:7px; height:7px; border-radius:50%; flex:none; background:var(--sub2);}
.devtab .ddot.on{background:var(--green); box-shadow:0 0 5px var(--green);}
.devtab .ddot.off{background:var(--sub2); box-shadow:none;}
.devtab .drun{min-width:16px; text-align:center; font:700 10.5px var(--mono); color:#fff;
  background:var(--primary); border-radius:999px; padding:1px 5px; line-height:1.4;}

.search{padding:0 16px 12px;}
.search-pill{display:flex; align-items:center; gap:9px; background:var(--panel);
  border-radius:5px; padding:10px 14px; color:var(--sub2);}
.search-pill input{border:none; outline:none; background:transparent; flex:1; min-width:0;
  font:400 14.5px var(--sans); color:var(--ink);}
.search-pill input::placeholder{color:var(--ph);}
.cards{flex:1; overflow-y:auto; padding:2px 12px 16px; display:flex; flex-direction:column; gap:9px;}

/* —— 日期分组（默认折叠）—— */
.group{display:flex; flex-direction:column; gap:9px;}
.group-head{display:flex; align-items:center; gap:8px; padding:6px 6px 4px; cursor:pointer;
  user-select:none; -webkit-user-select:none;}
.group-head .chev{flex:none; color:var(--sub2); transition:transform .18s ease;}
.group-head.open .chev{transform:rotate(90deg);}
.sidebar-history .group-head .chev{display:none;}
.sidebar-history .group-head{cursor:default; padding-left:5px;}
.group-head .gl{font:600 13px var(--sans); color:var(--ink);}
.group-head .gc{font:500 11.5px var(--sans); color:var(--sub2);}
.group-body{display:flex; flex-direction:column; gap:9px;}
.group-body.collapsed{display:none;}

/* —— 按住弹出删除 —— */
.card-wrap{position:relative;}
.card{display:flex; align-items:flex-start; gap:13px; padding:14px; background:var(--surface);
  border:1px solid var(--bd2); border-radius:5px; cursor:pointer; position:relative; overflow:hidden;
  box-shadow:0 2px 8px -5px rgba(70,50,30,.18); text-align:left; width:100%;
  transition:transform .15s ease; touch-action:pan-y;
  -webkit-user-select:none; user-select:none; -webkit-touch-callout:none;}
/* 上下文用量背景条：左对齐浅半透明填充，宽度=用量%，置于卡片内容之下 */
.ctxfill{position:absolute; left:0; top:0; bottom:0; z-index:0; pointer-events:none;
  background:color-mix(in srgb, var(--primary) 13%, transparent); transition:width .3s ease;}
.card > :not(.ctxfill){position:relative; z-index:1;}
.pop .si > :not(.ctxfill){position:relative; z-index:1;}
.card:active{transform:scale(.985);}
.card-wrap.pressing .card{transform:scale(.96);}

/* 卡片操作底部弹层（长按弹出） */
#cardSheet{position:fixed; inset:0; background:rgba(30,22,14,.46); display:none;
  align-items:flex-end; justify-content:center; z-index:62;}
#cardSheet.show{display:flex;}
.csheet-acts{display:flex; flex-direction:column; gap:9px;}
.csheet-acts button{padding:14px; border:none; border-radius:5px; font:600 15px var(--sans); cursor:pointer;}
.csheet-rename{background:var(--primary); color:#fff;}
.csheet-rename:active{filter:brightness(.92);}
.csheet-del{background:#d9533c; color:#fff;}
.csheet-del:active{background:#c4452f;}
.csheet-cancel{background:var(--surface); border:1px solid var(--bd5); color:var(--ink);}
.card-body{flex:1; min-width:0;}
.card-row1{display:flex; align-items:center; gap:7px;}
.card-name{font:600 15.5px var(--sans); color:var(--ink); overflow:hidden; text-overflow:ellipsis; white-space:nowrap;}
.branch{flex:none; font:500 10.5px var(--mono); color:var(--sub2); background:var(--panel);
  padding:2px 6px; border-radius:5px;}
.card-last{font:400 13px/1.45 var(--sans); color:var(--sub); margin-top:4px;
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap;}
.card-meta{display:flex; align-items:center; gap:8px; margin-top:7px;}
.running{display:flex; align-items:center; gap:5px; font:600 11.5px var(--sans); color:var(--greenink);}
.running .dot{width:6px; height:6px; border-radius:50%; background:var(--green);}
.reltime{font:500 11.5px var(--sans); color:var(--sub2);}
.badge{margin-left:auto; font:600 11px var(--sans); color:#fff; background:var(--primary);
  min-width:18px; height:18px; border-radius:5px; display:flex; align-items:center; justify-content:center; padding:0 5px;}
.empty{margin:auto; text-align:center; color:var(--sub2); font:400 14px var(--sans); padding:40px;}
.empty b{display:block; font:600 15px var(--serif); color:var(--ink); margin-bottom:6px;}

/* ===== 对话页（一个 pane = 一格）===== */
.pane{flex:1 1 auto; height:100%; min-height:0; min-width:0; display:flex; flex-direction:column;
  position:relative; overflow:hidden; background:var(--canvas);}
.chat-head{display:flex; align-items:center; gap:10px; padding:8px 16px 11px;
  border-bottom:1px solid var(--bd3); position:relative;}
.chat-titl{flex:1; min-width:0;}
.chat-name{font:600 15px var(--sans); color:var(--ink); display:flex; align-items:center; gap:7px;}
.chat-name span.t{overflow:hidden; text-overflow:ellipsis; white-space:nowrap;}
.chat-name .branch{background:var(--chip); padding:2px 7px; border-radius:5px; font-size:11px;}
.chat-status{font:500 12px var(--sans); color:var(--sub2); margin-top:1px; display:flex; align-items:center; gap:6px;}
.sdot{width:7px; height:7px; border-radius:50%; background:#c2af9a; flex:none;}
.sdot.on{background:var(--green);} .sdot.off{background:#cf8a7a;}
.kebab{width:22px; height:22px; cursor:pointer; color:var(--icon); flex:none;}

.stream{flex:1; overflow-y:auto; overflow-x:hidden; -webkit-overflow-scrolling:touch; overscroll-behavior:contain;
  padding:18px 18px 12px; display:flex; flex-direction:column; gap:20px;}
.stream::-webkit-scrollbar{width:8px;}
.stream::-webkit-scrollbar-track{background:transparent;}
.stream::-webkit-scrollbar-thumb{background:var(--bd5); border-radius:5px; border:2px solid transparent; background-clip:padding-box;}
.stream::-webkit-scrollbar-thumb:hover{background:var(--sub2); background-clip:padding-box;}
.stream{scrollbar-width:thin; scrollbar-color:var(--bd5) transparent;}
.row{display:flex;}
.row.user{justify-content:flex-end;}
.bubble{max-width:82%; background:var(--userbub); color:var(--ink2); padding:11px 15px;
  border-radius:5px; font:400 15px/1.5 var(--sans); white-space:pre-wrap; word-break:break-word; overflow-wrap:anywhere;}
.a-row{display:flex; gap:11px; align-items:flex-start;}
.a-av{flex:none; width:28px; height:28px; border-radius:5px; background:var(--primary); color:#fff;
  display:flex; align-items:center; justify-content:center; margin-top:1px;}
.a-main{flex:1; min-width:0; display:flex; flex-direction:column;}
.a-body{min-width:0; font:400 15px/1.62 var(--sans); color:var(--ink2); word-break:break-word; overflow-wrap:anywhere;}
.a-body p{margin:0 0 8px;} .a-body p:last-child{margin-bottom:0;}
.a-body h1,.a-body h2,.a-body h3{font:600 15px/1.4 var(--sans); margin:10px 0 6px; color:var(--ink);}
.a-body ul{margin:4px 0 8px; padding-left:20px;} .a-body li{margin:2px 0;}
.a-body code.inl{font:500 13px var(--mono); background:var(--panel); padding:1px 5px; border-radius:5px; color:var(--inlink);}
.a-body a{color:var(--link);}
.a-body .md-table{border-collapse:collapse; margin:10px 0; font-size:13.5px; display:block; overflow-x:auto; max-width:100%;}
.a-body .md-table th,.a-body .md-table td{border:1px solid var(--bd); padding:6px 11px; text-align:left; vertical-align:top;}
.a-body .md-table th{background:var(--panel); font-weight:600; color:var(--ink); white-space:nowrap;}
.a-body .md-table tr:nth-child(even) td{background:color-mix(in srgb, var(--panel) 45%, transparent);}
.cursor{display:inline-block; width:8px; height:16px; background:var(--primary); border-radius:5px;
  vertical-align:-2px; margin-left:2px; animation:blink 1s steps(1) infinite;}
.dots{display:flex; gap:5px; padding:7px 0;}
.dots span{width:7px; height:7px; border-radius:50%; background:#c2af9a; animation:dotPulse 1s infinite;}
.dots span:nth-child(2){animation-delay:.15s;} .dots span:nth-child(3){animation-delay:.3s;}
.think{font:italic 400 13.5px/1.55 var(--sans); color:var(--sub); border-left:2px solid var(--bd);
  padding:2px 0 2px 10px; margin:0 0 8px; white-space:pre-wrap;}
.codeblk{margin-top:12px; border-radius:5px; overflow:hidden; border:1px solid var(--codebd);}
.codeblk .ch{display:flex; align-items:center; gap:8px; padding:9px 13px; background:var(--codehead);}
.codeblk .ch .fn{font:500 12px var(--mono); color:#d8c7b3; flex:1; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;}
.codeblk .ch .cp{cursor:pointer; color:#9a8f80; flex:none; display:flex;}
.codeblk .ch .cp.ok{color:var(--green);}
.codeblk pre{margin:0; padding:13px 15px; background:var(--codebody); font:400 12.5px/1.7 var(--mono);
  color:var(--codeink); white-space:pre; overflow-x:auto;}
.tool{display:flex; align-items:center; gap:8px; margin-top:10px; background:var(--toolbg);
  border:1px solid var(--toolbd); border-radius:5px; padding:8px 11px; font:500 12.5px var(--mono); color:var(--toolink);}
.tool svg{flex:none;} .tool .tn{font-weight:600; color:var(--toolname);}
.tool .ti{color:var(--toolarg); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; flex:1;}
/* 选项回执：内联在 assistant 行调用位置的「已选择 …」确认条 */
.answerline{display:flex; align-items:center; gap:8px; margin-top:10px;
  background:color-mix(in srgb, var(--primary) 9%, var(--panel)); border:1px solid var(--toolbd);
  border-left:3px solid var(--primary); border-radius:5px; padding:8px 11px;
  font:500 12.5px var(--sans); color:var(--ink2);}
.answerline svg{flex:none; color:var(--primary);}
.answerline span{overflow:hidden; text-overflow:ellipsis; min-width:0;}
.sysline{align-self:center; max-width:90%; text-align:center; font:500 12px var(--sans); color:var(--sub2);
  background:var(--panel); border-radius:5px; padding:6px 12px;}
.sysline.warn{background:var(--warnbg); color:var(--warnink);}
/* 「正在准备选项…」占位：AskUserQuestion 参数生成期间的等待反馈，弹窗到达即移除 */
.qpending{align-self:center; display:flex; align-items:center; gap:8px; margin-top:8px;
  font:500 12.5px var(--sans); color:var(--sub); background:var(--panel);
  border-radius:5px; padding:7px 13px;}
.qpending .qp-spin{flex:none; width:12px; height:12px; border-radius:50%;
  border:2px solid var(--bd5); border-top-color:var(--primary); animation:spin .8s linear infinite;}
/* 子任务卡片（Agent 工具 / 后台子任务）：started 建卡、progress 更新、终态收尾贴 summary */
.subtask{margin-top:10px; background:var(--panel); border:1px solid var(--bd);
  border-left:3px solid var(--sub2); border-radius:6px; padding:9px 12px;}
.subtask.running{border-left-color:var(--primary);}
.subtask.done{border-left-color:var(--green);}
.subtask.failed,.subtask.stopped{border-left-color:var(--warnink);}
.subtask .st-head{display:flex; align-items:flex-start; gap:8px;}
/* 标题可换行，最多 2 行后省略；不再单行截断 */
.subtask .st-title{font:600 13px/1.35 var(--sans); color:var(--ink2); overflow:hidden;
  text-overflow:ellipsis; flex:1; min-width:0;
  display:-webkit-box; -webkit-box-orient:vertical; -webkit-line-clamp:2;}
.subtask .st-tok{flex:none; font:600 11.5px var(--mono); color:var(--sub2);}
.subtask .st-tok:empty{display:none;}
.subtask .st-spin{flex:none; margin-top:2px; width:12px; height:12px; border-radius:50%;
  border:2px solid var(--bd5); border-top-color:var(--primary); animation:st-spin .8s linear infinite;}
.subtask:not(.running) .st-spin{display:none;}
/* 状态行允许换行，指标多了自然折行而不溢出 */
.subtask .st-status{margin-top:4px; font:500 12px/1.45 var(--mono); color:var(--sub);
  white-space:normal; overflow-wrap:anywhere;}
.subtask .st-summary:not(:empty){margin-top:7px; padding-top:7px; border-top:1px dashed var(--bd);
  font:400 13.5px/1.5 var(--sans); color:var(--ink);}
@keyframes st-spin{to{transform:rotate(360deg);}}
.todo-card{margin-top:10px; background:var(--panel); border:1px solid var(--bd);
  border-left:3px solid var(--sub2); border-radius:6px; padding:9px 12px;}
.todo-card.done{border-left-color:var(--green);}
.todo-card.stopped{border-left-color:var(--warnink);}
.todo-card-head,.todo-pop-head{display:flex; align-items:center; justify-content:space-between; gap:10px;}
.todo-card-head span,.todo-pop-head span{font:700 12.5px var(--mono); color:var(--ink2);}
.todo-card-head b,.todo-pop-head b{font:700 11.5px var(--mono); color:var(--sub2);}
.todo-rows{margin-top:7px;}
.todo-row{display:grid; grid-template-columns:28px minmax(0,1fr) auto; gap:8px; align-items:center;
  padding:6px 0; border-top:1px dashed var(--bd); font:500 12.5px var(--sans);}
.todo-row:first-child{border-top:none;}
.todo-mark{height:20px; min-width:24px; padding:0 5px; border-radius:999px; display:flex; align-items:center;
  justify-content:center; background:var(--surface2); color:var(--sub); font:700 10px var(--mono); text-transform:uppercase;}
.todo-row.done .todo-mark{background:color-mix(in srgb,var(--green) 18%,var(--surface)); color:var(--greenink);}
.todo-row.running .todo-mark{background:color-mix(in srgb,var(--primary) 14%,var(--surface)); color:var(--primary);}
.todo-text{min-width:0; color:var(--ink2); overflow:hidden; text-overflow:ellipsis; white-space:nowrap;}
.todo-state{color:var(--sub2); font:600 10.5px var(--mono); text-transform:uppercase; white-space:nowrap;}
/* 历史折叠：初始只显近段，向上滚动逐批展开 */
.hist-hidden{display:none !important;}
.hist-sent{align-self:center; margin:0 0 4px; font:500 12px var(--sans); color:var(--sub2);
  background:var(--panel2); border:1px solid var(--bd); border-radius:5px; padding:5px 14px; cursor:pointer;}
.hist-sent:active{opacity:.65;}

/* ===== 输入区 ===== */
.composer{position:relative; padding:8px 14px 10px;}
.todo-strip{position:relative; padding:0 4px 6px; z-index:22;}
.todo-pill{width:100%; display:flex; align-items:center; gap:8px; border:1px solid var(--bd);
  background:var(--panel); color:var(--ink2); border-radius:5px; padding:7px 10px;
  font:600 12px var(--mono); cursor:pointer; box-shadow:0 5px 16px -12px rgba(70,50,30,.28);}
.todo-pill:active{transform:translateY(1px);}
.todo-pill.done{border-color:color-mix(in srgb,var(--green) 40%,var(--bd));}
.todo-spin{flex:none; width:12px; height:12px; border-radius:50%;
  border:2px solid var(--bd5); border-top-color:var(--primary); animation:st-spin .8s linear infinite;}
.todo-pill.done .todo-spin{display:none;}
.todo-count{flex:none; color:var(--primary);}
.todo-current{flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; text-align:left;}
.todo-chev{flex:none; color:var(--sub2);}
.todo-pop{position:absolute; left:4px; right:4px; bottom:100%; margin-bottom:8px; z-index:25;
  background:var(--surface); border:1px solid var(--bd4); border-radius:6px; padding:10px 12px;
  box-shadow:0 14px 34px -10px rgba(60,45,30,.28); max-height:min(42vh,320px); overflow:auto; animation:sheetUp .14s ease;}
/* 输入框上方状态条：左=上下文进度条（黑灰底 + 绿→红渐变），右=自动允许开关 */
.cstrip{display:flex; align-items:center; gap:10px; padding:0 4px 8px;}
.ctxwrap{display:flex; align-items:center; gap:8px; flex:1; min-width:0;}
.ctxbar{position:relative; flex:none; width:78px; height:8px; border-radius:5px; overflow:hidden;
  background:linear-gradient(90deg,#1c7a45 0%, #93802a 52%, #a83c3c 100%);
  box-shadow:inset 0 0 0 1px rgba(127,127,127,.16);}
.ctxbar-mask{position:absolute; top:0; right:0; bottom:0; width:100%; background:var(--ctxbar-empty); transition:width .35s ease;}
.ctxtxt{font:500 11px var(--mono); color:var(--sub2); white-space:nowrap;}
.effortbtn,.autobtn{display:flex; align-items:center; gap:6px; font:600 12px var(--mono); color:var(--sub2);
  padding:4px 10px; border-radius:5px; border:none; background:transparent; cursor:pointer; white-space:nowrap;}
.effortbtn:active,.autobtn:active{opacity:.65;}
.effortbtn{color:var(--primary); background:color-mix(in srgb,var(--primary) 9%,transparent);}
.effortbtn:disabled{cursor:not-allowed; opacity:.45;}
.effort-icon{font-size:11px;}
.autobtn.on{color:#1f9a55; background:rgba(31,154,85,.13);}
.autodot{width:7px; height:7px; border-radius:50%; background:var(--sub2); transition:.2s;}
.autobtn.on .autodot{background:#1f9a55; box-shadow:0 0 6px rgba(31,154,85,.75);}
.pop{position:absolute; bottom:100%; margin-bottom:8px; background:var(--surface); border:1px solid var(--bd4);
  border-radius:5px; box-shadow:0 14px 34px -10px rgba(60,45,30,.28); overflow:hidden; z-index:20; animation:sheetUp .14s ease;}
.pop.cmds{left:14px; right:14px;} .pop.attach{left:14px; min-width:172px;}
.pop.effort-pop{right:92px; min-width:205px; padding:5px;}
.effort-option{width:100%; display:flex; align-items:center; justify-content:space-between; gap:14px; padding:9px 10px;
  border:none; border-radius:4px; background:transparent; color:var(--ink); text-align:left; cursor:pointer;}
.effort-option:hover,.effort-option:active{background:var(--surface2);}
.effort-option span{display:flex; flex-direction:column; gap:2px;}
.effort-option b{font:600 12.5px var(--mono);}
.effort-option small{font:400 11px var(--sans); color:var(--sub2);}
.effort-option i{font:700 14px var(--sans); color:var(--primary); font-style:normal;}
.effort-option.selected{background:color-mix(in srgb,var(--primary) 9%,transparent);}
.pop .ci{display:flex; align-items:center; gap:10px; padding:11px 15px; cursor:pointer; border-bottom:1px solid var(--divider);}
.pop .ci:last-child{border-bottom:none;} .pop .ci:active{background:var(--surface2);}
.pop .ci .cmd{font:600 13px var(--mono); color:var(--primary);}
.pop .ci .desc{font:400 13px var(--sans); color:var(--sub);}
.pop .ai{display:flex; align-items:center; gap:11px; padding:11px 16px; cursor:pointer; font:500 14px var(--sans); color:var(--ink);}
.pop .ai:active{background:var(--surface2);}
.pop.sessions{left:14px; right:14px;}
.pop .si{display:flex; align-items:center; gap:10px; padding:10px 14px; cursor:pointer; border-bottom:1px solid var(--divider); position:relative; overflow:hidden;}
.pop .si:last-child{border-bottom:none;} .pop .si:active{background:var(--surface2);}
.pop .si.none{justify-content:center; color:var(--sub2); font:400 13px var(--sans); cursor:default;}
.pop .si .savatar{flex:none; width:30px; height:30px; border-radius:5px; display:flex; align-items:center;
  justify-content:center; font:600 13px var(--mono); color:#fff;}
.pop .si .sb{flex:1; min-width:0; display:flex; flex-direction:column;}
.pop .si .srow{display:flex; align-items:center; gap:7px; min-width:0;}
.pop .si .sname{font:600 13.5px var(--sans); color:var(--ink); overflow:hidden; text-overflow:ellipsis; white-space:nowrap;}
.pop .si .sproj{flex:none; max-width:46%; font:500 11px var(--mono); color:var(--sub); background:var(--surface2);
  border-radius:4px; padding:1px 6px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;}
.pop .si .stime{flex:none; margin-left:auto; padding-left:7px; font:500 11px var(--sans); color:var(--sub2); white-space:nowrap;}
.pop .si .sprev{font:400 12px var(--sans); color:var(--sub); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; margin-top:1px;}
.pop .si .sdot{flex:none;}
/* 切换会话弹层里的「子任务」组 */
.pop .si-grouplabel{padding:7px 14px 5px; font:600 11px var(--sans); letter-spacing:.04em; color:var(--sub2);
  text-transform:none; background:var(--surface2); border-bottom:1px solid var(--divider);}
.pop .si .savatar.sub{background:var(--primary); color:#fff;}
.pop .si.back-parent .savatar{background:var(--panel); color:var(--ink);}
/* 子任务视图：与对话流同级、二选一显示（进度+回执放大版）*/
.subtask-view{flex:1; min-height:0; display:flex; flex-direction:column; background:var(--canvas);}
.stv-head{flex:none; display:flex; align-items:center; gap:10px; padding:10px 16px; border-bottom:1px solid var(--bd3);}
.stv-back{flex:none; display:flex; align-items:center; gap:3px; border:1px solid var(--bd4); background:var(--surface);
  color:var(--ink); border-radius:6px; padding:5px 11px 5px 7px; font:600 13px var(--sans); cursor:pointer;}
.stv-back:active{background:var(--surface2);}
.stv-name{font:600 15px var(--serif); color:var(--ink); overflow:hidden; text-overflow:ellipsis; white-space:nowrap;}
.stv-stop{flex:none; display:flex; align-items:center; gap:5px; border:1px solid var(--warnink); background:transparent;
  color:var(--warnink); border-radius:6px; padding:5px 11px; font:600 13px var(--sans); cursor:pointer;}
.stv-stop:active{background:var(--warnbg);}
.stv-scroll{flex:1; min-height:0; overflow-y:auto; padding:16px;}
.stv-status{font:500 13px var(--mono); color:var(--sub); margin-bottom:12px;}
.stv-summary:not(:empty){font:400 14.5px/1.6 var(--sans); color:var(--ink);
  background:var(--panel); border:1px solid var(--bd); border-radius:8px; padding:12px 14px;}
.inputcard{background:var(--surface); border:1px solid var(--bd); border-radius:5px;
  box-shadow:0 6px 20px -8px rgba(70,50,30,.2); padding:6px 6px 8px; display:flex; flex-direction:column;}
.pendchips{display:flex; flex-wrap:wrap; gap:6px; margin:2px 4px 6px;}
.pendchips.hidden{display:none;}
.pendchip{display:flex; align-items:center; gap:8px; background:var(--panel2); border:1px solid var(--bd);
  border-radius:5px; padding:6px 11px; font:500 13px var(--sans); color:var(--sub); max-width:100%;}
.pendchip .pend-name{overflow:hidden; text-overflow:ellipsis; white-space:nowrap; max-width:200px;}
.pendchip .x{cursor:pointer; color:var(--sub2); font:600 13px sans-serif; flex:none;}
.pendimgs{display:flex; flex-wrap:wrap; gap:7px; margin:2px 4px 6px;}
.pendimgs.hidden{display:none;}
.pthumb{position:relative; width:56px; height:56px; border-radius:5px; overflow:hidden; border:1px solid var(--bd);}
.pthumb img{width:100%; height:100%; object-fit:cover; display:block;}
.pthumb .rm{position:absolute; top:2px; right:2px; width:17px; height:17px; border-radius:50%;
  background:rgba(0,0,0,.6); color:#fff; font:600 11px sans-serif; display:flex; align-items:center;
  justify-content:center; cursor:pointer; line-height:1;}
/* 消息气泡里的图片 */
.bubimgs{display:flex; flex-wrap:wrap; gap:6px; margin-bottom:6px;}
.bubimgs img{max-width:160px; max-height:200px; border-radius:5px; display:block;}
/* markdown 行内图片（![alt](url)） */
.md-img{display:block; max-width:min(420px,100%); border-radius:6px; margin:6px 0;}
.imgph{font:500 12.5px var(--sans); color:var(--sub); }
.pane-input{border:none; outline:none; resize:none; background:transparent; font:400 15px/1.4 var(--sans);
  color:var(--ink); padding:8px 10px 4px; width:100%; min-height:35px; max-height:110px; overflow-y:hidden;}
.pane-input::placeholder{color:var(--ph);}
/* 仅当内容超过最大高度时由 JS 加上 .scrolling，才显示一条纤细的滚动条 */
.pane-input.scrolling{overflow-y:auto;}
.pane-input.scrolling{scrollbar-width:thin; scrollbar-color:var(--ph) transparent;}
.pane-input.scrolling::-webkit-scrollbar{width:6px;}
.pane-input.scrolling::-webkit-scrollbar-track{background:transparent;}
.pane-input.scrolling::-webkit-scrollbar-thumb{background:var(--ph); border-radius:5px;}
.toolrow{display:flex; align-items:center; gap:2px; padding:2px 2px 0;}
.tbtn{width:34px; height:34px; border-radius:5px; border:none; background:transparent; display:flex;
  align-items:center; justify-content:center; cursor:pointer; color:var(--icon);}
.tbtn:active{background:var(--surface2);}
.grow{flex:1;}
.mainbtn{width:37px; height:37px; border-radius:50%; border:none; display:flex; align-items:center;
  justify-content:center; cursor:pointer; flex:none;}
.mainbtn:active{transform:scale(.93);}
.mainbtn.send{background:var(--primary);}
.mainbtn.stop{background:#2B2722;} .mainbtn.stop span{width:12px; height:12px; border-radius:5px; background:#fff;}
.mainbtn.mic{background:transparent; color:#857b6e;}
.mainbtn.compacting{background:var(--panel2); cursor:default;}
.mainbtn.compacting:active{transform:none;}
.cspin{width:15px; height:15px; border:2px solid var(--bd5); border-top-color:var(--primary);
  border-radius:50%; animation:spin .7s linear infinite;}
@keyframes spin{to{transform:rotate(360deg);}}
/* 进会话加载遮罩：盖住历史重放那段逐条渲染+滚动，避免晃眼 */
.loadmask{position:absolute; inset:0; z-index:25; background:var(--canvas);
  display:flex; flex-direction:column; align-items:center; justify-content:center; gap:12px;}
.loadmask.hidden{display:none;}
.pane .chat-head{position:relative; z-index:26;}   /* 头部留在遮罩之上 */
.pane .composer{z-index:26;}                         /* 输入框留在遮罩之上（composer 本就 relative）*/
.loadspin{width:30px; height:30px; border:3px solid var(--bd4); border-top-color:var(--primary);
  border-radius:50%; animation:spin .8s linear infinite;}
.loadmask .lt{font:500 13px var(--sans); color:var(--sub2);}

/* ===== 弹层（每格内联：权限 / 问题；全局：目录）===== */
.sheet{width:100%; max-width:480px; background:var(--canvas); border-radius:5px;
  padding:20px 20px calc(20px + env(safe-area-inset-bottom)); animation:sheetUp .2s ease;}
.sheet h3{margin:0 0 4px; font:600 16px var(--serif); color:var(--ink); display:flex; align-items:center; gap:8px;}
.sheet .who{font:400 13px var(--sans); color:var(--sub); margin-bottom:12px;}
.sheet .who b{color:var(--primary); font:600 13px var(--mono);}
.sheet pre{margin:0 0 16px; background:var(--surface); border:1px solid var(--bd2); border-radius:5px;
  padding:12px 14px; overflow:auto; max-height:38vh; font:400 12.5px/1.6 var(--mono); color:var(--ink2); white-space:pre-wrap; word-break:break-word;}
.sheet .acts{display:flex; gap:10px;}
.sheet .acts button{flex:1; padding:13px; border:none; border-radius:5px; font:600 15px var(--sans); cursor:pointer;}
.sheet .deny{background:var(--surface); border:1px solid var(--bd5); color:var(--warnink);}
.sheet .allow{background:var(--primary); color:#fff;}
.qcount{font:500 12px var(--sans); color:var(--sub2); margin-left:auto;}

/* 权限弹层：每格内联，盖在本格之内 */
.pane-mask{position:absolute; inset:0; background:rgba(30,22,14,.46); display:none; align-items:flex-end;
  justify-content:center; z-index:40;}
.pane-mask.show{display:flex;}

/* 选项弹窗（AskUserQuestion）：每格内联 */
.pane-qmask{position:absolute; inset:0; background:rgba(30,22,14,.46); display:none; align-items:flex-end;
  justify-content:center; z-index:45;}
.pane-qmask.show{display:flex;}
.pane-qmask .sheet{max-height:88vh; overflow-y:auto;}
.qblock{margin-bottom:16px;}
.qhead{font:600 11px var(--sans); letter-spacing:.04em; text-transform:uppercase; color:var(--primary); margin-bottom:5px;}
.qtext{font:600 15px/1.4 var(--sans); color:var(--ink); margin-bottom:11px;}
.qopts{display:flex; flex-direction:column; gap:9px;}
.qopt{display:flex; gap:11px; align-items:flex-start; text-align:left; width:100%; cursor:pointer;
  background:var(--surface); border:1.5px solid var(--bd2); border-radius:5px; padding:12px 14px;}
.qopt:active{transform:scale(.99);}
.qopt.sel{border-color:var(--primary); background:var(--toolbg);}
.qopt .tick{flex:none; width:20px; height:20px; border-radius:50%; border:2px solid var(--bd5);
  display:flex; align-items:center; justify-content:center; margin-top:1px; color:#fff;}
.qopt.sel .tick{background:var(--primary); border-color:var(--primary);}
.qopt .tick svg{display:none;} .qopt.sel .tick svg{display:block;}
.qopt .ob{flex:1; min-width:0;}
.qopt .ol{font:600 14.5px var(--sans); color:var(--ink);}
.qopt .od{font:400 12.5px/1.45 var(--sans); color:var(--sub); margin-top:2px; white-space:pre-wrap;}
.qhint{font:400 11.5px var(--sans); color:var(--sub2); margin-top:6px;}
/* 步骤面包屑（多组依次弹，可点击重选） */
.qsteps{display:flex; flex-wrap:wrap; gap:7px; margin-bottom:15px;}
.qchip{font:600 12px var(--sans); padding:6px 11px; border-radius:5px; border:1.5px solid var(--bd2);
  background:var(--surface); color:var(--sub); cursor:pointer; max-width:100%; overflow:hidden;
  text-overflow:ellipsis; white-space:nowrap;}
.qchip.done{border-color:var(--primary); color:var(--primary); background:var(--toolbg);}
.qchip.cur{border-color:var(--primary); background:var(--primary); color:#fff;}
.qchip.pend{opacity:.65;}
/* 末尾自定义输入兜底项 */
.qopt.custom{align-items:center;}
.qcustom-input{width:100%; border:none; outline:none; background:transparent; margin-top:3px; padding:0;
  font:500 14.5px var(--sans); color:var(--ink);}
.qcustom-input::placeholder{color:var(--ph);}

/* ===== 目录选择器（全局单例）===== */
#dirMask{position:fixed; inset:0; background:rgba(30,22,14,.46); display:none; align-items:flex-end;
  justify-content:center; z-index:70;}
#dirMask.show{display:flex;}
.dirpath{font:500 12.5px var(--mono); color:var(--sub); margin-bottom:10px; word-break:break-all;}
.dirlist{max-height:46vh; overflow:auto; border:1px solid var(--bd2); border-radius:5px;
  background:var(--surface); margin:0 0 14px;}
.diritem{display:flex; align-items:center; gap:9px; padding:12px 14px; border-bottom:1px solid var(--divider);
  cursor:pointer; font:500 14.5px var(--sans); color:var(--ink);}
.diritem:last-child{border-bottom:none;}
.diritem:active{background:var(--surface2);}
.diritem.up{color:var(--sub);}
.dirempty{padding:22px; text-align:center; color:var(--sub2); font:400 13.5px var(--sans);}

/* ===== 分屏模式 ===== */
body.split{padding:0; align-items:stretch;}
body.split .app{max-width:none; width:100%; height:100dvh; border-radius:0; box-shadow:none;}
#splitShell{flex:1; min-height:0; display:flex; flex-direction:row; background:var(--shell);}
.sidebar{width:300px; flex:none; border-right:1px solid var(--bd3); display:flex; flex-direction:column; min-height:0; background:var(--canvas);}
.sidebar-history{flex:1; min-height:0; display:flex; flex-direction:column;}
.history-calendar{flex:none; padding:7px 12px 9px; border-top:1px solid var(--bd3); background:var(--canvas);}
.cal-toggle{flex:none; height:28px; display:flex; align-items:center; justify-content:center; gap:3px; padding:0 3px; border:0; background:transparent; color:var(--sub); cursor:pointer; font:600 11px var(--sans);}
.cal-toggle:hover{color:var(--ink);}
.cal-toggle svg{width:14px; height:14px; transition:transform .16s;}
.cal-toggle[aria-expanded="true"] svg{transform:rotate(180deg);}
.cal-body{padding-top:1px;}
.cal-head{height:28px; display:grid; grid-template-columns:32px minmax(0,1fr) 32px; align-items:center; color:var(--sub); font:600 10.5px var(--sans);}
.cal-head-center{display:flex; align-items:center; justify-content:center; gap:4px; min-width:0;}
.cal-head select{min-width:0; border:1px solid var(--bd); border-radius:4px; background:var(--surface); color:var(--ink); padding:2px 4px; font:600 10px var(--sans);}
.cal-year{width:67px}.cal-month{width:50px}
.cal-nav,.cal-today{border:0; background:transparent; color:var(--sub); cursor:pointer; padding:2px 5px; font:600 11px var(--sans);}
.cal-nav{width:32px; height:28px; display:flex; align-items:center; font-size:17px; line-height:1;}
.cal-nav:first-child{justify-content:flex-start;}.cal-nav:last-child{justify-content:flex-end;}
.cal-nav:disabled{opacity:.25; cursor:default;}
.cal-week,.cal-grid{display:grid; grid-template-columns:repeat(7,1fr); gap:4px;}
.cal-week{margin:3px 0 4px; color:var(--sub2); text-align:center; font:500 9px var(--sans);}
.cal-grid{grid-template-rows:repeat(6,1fr);}
.cal-day,.cal-blank{aspect-ratio:1; min-width:0;}
.cal-day{display:flex; align-items:center; justify-content:center; padding:0; border:1px solid color-mix(in srgb,var(--bd) 80%,transparent); border-radius:3px; background:var(--surface); cursor:pointer; color:var(--sub); font:500 9px var(--sans);}
.cal-day.future{opacity:.28; cursor:default;}
.cal-blank{display:block; visibility:hidden;}
.cal-day.l1{background:#d5ead8}.cal-day.l2{background:#8fd19a}.cal-day.l3{background:#45a85d}.cal-day.l4{background:#187a37}
.cal-day.selected{outline:2px solid var(--primary); outline-offset:1px;}
[data-theme="vscode"] .cal-day.l1{background:#183d24}[data-theme="vscode"] .cal-day.l2{background:#246b36}
[data-theme="vscode"] .cal-day.l3{background:#319148}[data-theme="vscode"] .cal-day.l4{background:#55bd6c}
.sidebar-devices{position:relative; flex:none; padding:10px 12px 12px; border-top:1px solid var(--bd3);}
.sidebar .device-picker{display:block!important; padding:0; overflow:visible;}
.device-current-row{display:grid; grid-template-columns:minmax(0,1fr) 38px; gap:7px; align-items:stretch;}
.device-current{width:100%; min-width:0; min-height:54px; display:grid; grid-template-columns:auto 1fr auto; grid-template-areas:"dot name chev" "dot meta chev";
  align-items:center; column-gap:9px; padding:9px 11px; border:1px solid var(--bd); border-radius:7px; background:var(--surface);
  color:var(--ink); text-align:left; cursor:pointer; box-shadow:0 4px 14px -9px rgba(40,30,20,.45);}
.device-current .ddot{grid-area:dot; width:8px; height:8px; border-radius:50%; background:var(--sub2);}
.device-current .ddot.on{background:var(--green); box-shadow:0 0 5px var(--green);}
.device-current .dc-name{grid-area:name; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; font:600 12.5px var(--sans);}
.device-current .dc-meta{grid-area:meta; color:var(--sub2); font:500 10.5px var(--sans);}
.device-current .dc-chev{grid-area:chev; width:15px; height:15px; color:var(--sub); transition:transform .16s;}
.device-picker.open .device-current .dc-chev{transform:rotate(180deg);}
.device-settings{display:flex; align-items:center; justify-content:center; border:1px solid var(--bd); border-radius:7px; background:var(--surface); color:var(--sub); cursor:pointer; box-shadow:0 4px 14px -9px rgba(40,30,20,.45);}
.device-settings:hover{color:var(--primary); border-color:var(--primary);}
.device-settings svg{width:18px; height:18px;}
@keyframes device-spin{to{transform:rotate(360deg)}}
.device-menu{display:none; position:absolute; left:12px; right:12px; bottom:72px; z-index:45; max-height:min(330px,50vh); overflow-y:auto;
  padding:7px; border:1px solid var(--bd); border-radius:7px; background:var(--surface); box-shadow:var(--card-shadow);}
.device-picker.open .device-menu{display:flex; flex-direction:column; gap:5px;}
.device-menu .devtab{width:100%; flex:none; justify-content:flex-start; border-radius:5px;}
.sidebar-toggle{transition:background .16s, border-color .16s, color .16s;}
.sidebar-toggle svg{width:18px; height:18px;}
#splitShell.sidebar-open .sidebar-toggle{background:color-mix(in srgb,var(--primary) 10%,var(--surface)); border-color:var(--primary); color:var(--primary);}
#splitShell:not(.sidebar-open) .sidebar{width:48px;}
#splitShell:not(.sidebar-open) .sidebar-history{overflow:hidden;}
#splitShell:not(.sidebar-open) .sidebar-history > .search,
#splitShell:not(.sidebar-open) .history-calendar,
#splitShell:not(.sidebar-open) .sidebar-devices{display:none;}
#splitShell:not(.sidebar-open) .sidebar .list-head{padding:14px 6px;}
#splitShell:not(.sidebar-open) .sidebar .list-head > :not(.sidebar-toggle){display:none;}
#splitShell:not(.sidebar-open) .sidebar .cards{padding:6px; gap:6px; align-items:center;}
#splitShell:not(.sidebar-open) .sidebar .group-head,
#splitShell:not(.sidebar-open) .sidebar .empty{display:none;}
#splitShell:not(.sidebar-open) .sidebar .group-body{width:100%; align-items:center; gap:6px;}
#splitShell:not(.sidebar-open) .sidebar .card-wrap{width:36px; height:36px; flex:none;}
#splitShell:not(.sidebar-open) .sidebar .card{width:36px; height:36px; padding:0; align-items:center;
  justify-content:center; border:0; border-radius:6px; background:transparent; box-shadow:none; overflow:visible;}
#splitShell:not(.sidebar-open) .sidebar .card:hover{background:var(--surface2);}
#splitShell:not(.sidebar-open) .sidebar .card-body,
#splitShell:not(.sidebar-open) .sidebar .ctxfill{display:none;}
#splitShell:not(.sidebar-open) .sidebar .card[data-state="running"]::after{content:""; width:10px; height:10px;
  border-radius:50%; background:var(--green); box-shadow:0 0 0 4px color-mix(in srgb,var(--green) 18%,transparent),0 0 6px var(--green);}
#splitShell:not(.sidebar-open) .sidebar .card[data-state="done"]::after{content:"✓"; width:20px; height:20px;
  display:flex; align-items:center; justify-content:center; border:1px solid var(--bd); border-radius:50%;
  background:var(--surface); color:var(--sub2); font:700 11px var(--sans);}
@media (max-width:720px){
  #splitShell{position:relative;}
  #splitShell.sidebar-open .sidebar{position:absolute; inset:0 auto 0 0; z-index:50;
    width:min(300px,calc(100% - 48px)); box-shadow:12px 0 28px -14px rgba(35,28,20,.55);}
  #splitShell:not(.sidebar-open) .sidebar{position:relative; z-index:2; box-shadow:none;}
}
.grid{flex:1; min-width:0; min-height:0; display:grid; grid-template-columns:minmax(0,1fr);
  grid-template-rows:minmax(0,1fr); background:var(--canvas);}
.cell{position:relative; overflow:hidden; min-width:0; min-height:0; display:flex;
  border:0; border-radius:0; background:var(--canvas); box-shadow:none;}
.workspace-empty{width:min(520px,calc(100% - 48px)); margin:auto; padding:32px 20px; display:flex;
  flex-direction:column; align-items:center; text-align:center; color:var(--sub);}
.we-icon{width:42px; height:42px; margin-bottom:16px; color:var(--sub2);}
.we-title{font:600 18px var(--serif); color:var(--ink);}
.we-copy{max-width:420px; margin-top:8px; font:400 13.5px/1.7 var(--sans); color:var(--sub);}
.we-meta{display:flex; align-items:center; gap:7px; margin-top:17px; font:500 11.5px var(--sans); color:var(--sub2);}
.we-dot{width:6px; height:6px; border-radius:50%; background:var(--green); box-shadow:0 0 5px var(--green);}
/* 分屏里每格的弹层不再贴最底，而是居中盖住本格 */
body.split .pane-mask, body.split .pane-qmask{align-items:center;}
body.split .pane-mask .sheet, body.split .pane-qmask .sheet{border-radius:5px; max-width:90%; margin:0 16px;}

/* ===== 全局设置 ===== */
body.settings-open{overflow:hidden;}
.settings-mask{position:fixed; inset:0; z-index:90; display:none; align-items:center; justify-content:center;
  padding:24px; background:rgba(20,18,16,.55); backdrop-filter:blur(2px);}
.settings-mask.show{display:flex;}
.settings-dialog{width:min(780px,calc(100vw - 32px)); height:min(580px,calc(100vh - 48px)); min-height:420px;
  display:flex; flex-direction:column; overflow:hidden; border:1px solid var(--bd); border-radius:12px;
  background:var(--surface); color:var(--ink); box-shadow:0 28px 80px -28px rgba(20,16,12,.65);
  animation:settingsIn .16s ease-out;}
.settings-head{height:58px; flex:none; display:flex; align-items:center; justify-content:space-between;
  padding:0 18px 0 22px; border-bottom:1px solid var(--divider);}
.settings-head h2{margin:0; font:600 18px var(--sans);}
.settings-close{width:34px; height:34px; display:flex; align-items:center; justify-content:center; border:0;
  border-radius:7px; background:transparent; color:var(--sub); cursor:pointer;}
.settings-close:hover{background:var(--surface2); color:var(--ink);}
.settings-close svg{width:18px; height:18px;}
.settings-body{flex:1; min-height:0; display:grid; grid-template-columns:190px minmax(0,1fr);}
.settings-nav{padding:14px 10px; border-right:1px solid var(--divider); background:color-mix(in srgb,var(--surface2) 58%,var(--surface));}
.settings-nav-item{width:100%; display:flex; align-items:center; padding:10px 12px; margin-bottom:3px;
  border:0; border-radius:7px; background:transparent; color:var(--ink); font:500 14px var(--sans);
  text-align:left; cursor:pointer;}
.settings-nav-item:hover{background:var(--surface2);}
.settings-nav-item.active{background:color-mix(in srgb,var(--primary) 12%,var(--surface)); color:var(--primary); font-weight:600;}
.settings-content{min-width:0; overflow-y:auto; padding:28px 30px;}
.settings-page{display:none;}
.settings-page.active{display:block;}
.settings-page h3{margin:0 0 22px; font:600 19px var(--sans);}
.settings-empty{margin:0; padding:22px; border:1px dashed var(--bd); border-radius:9px;
  color:var(--sub); font:400 13.5px/1.6 var(--sans); text-align:center;}
.settings-loading::before{content:''; display:inline-block; width:12px; height:12px; margin-right:8px; border:2px solid var(--bd); border-top-color:var(--primary); border-radius:50%; vertical-align:-2px; animation:device-spin .8s linear infinite;}
.settings-group{border-top:1px solid var(--divider);}
.settings-row{min-height:76px; display:flex; align-items:center; gap:20px; padding:13px 2px;
  border-bottom:1px solid var(--divider);}
.settings-row-copy{flex:1; min-width:0; display:flex; flex-direction:column; gap:5px;}
.settings-row-copy strong{font:600 14px var(--sans); color:var(--ink);}
.settings-row-copy span{font:400 12.5px/1.45 var(--sans); color:var(--sub);}
.settings-action{width:36px; height:36px; flex:none; display:flex; align-items:center; justify-content:center;
  border:1px solid var(--bd); border-radius:8px; background:var(--surface); color:var(--sub); cursor:pointer;}
.settings-action:hover:not(:disabled){border-color:var(--primary); color:var(--primary); background:color-mix(in srgb,var(--primary) 6%,var(--surface));}
.settings-action:disabled{cursor:not-allowed; opacity:.45;}
.settings-action svg{width:18px; height:18px;}
.settings-action.busy{opacity:.85; cursor:wait;}
.settings-action.busy svg{animation:device-spin .8s linear infinite;}
.settings-status{min-height:22px; margin-top:18px; color:var(--sub); font:500 12.5px/1.5 var(--sans);}
.settings-status.success{color:var(--greenink);}
.settings-status.error{color:var(--warnink);}

.cap-toolbar{display:flex; align-items:center; justify-content:space-between; gap:14px; margin:-8px 0 14px; color:var(--sub); font:500 12.5px/1.45 var(--sans);}
.settings-save{height:32px; flex:none; padding:0 12px; border:1px solid var(--bd); border-radius:8px; background:var(--surface); color:var(--ink); font:600 12.5px var(--sans); cursor:pointer;}
.settings-save:hover:not(:disabled){border-color:var(--primary); color:var(--primary); background:color-mix(in srgb,var(--primary) 6%,var(--surface));}
.settings-save:disabled{cursor:not-allowed; opacity:.45;}
.settings-save.busy{opacity:.85; cursor:wait;}
.cap-list{display:flex; flex-direction:column; gap:9px;}
.cap-item{display:flex; align-items:flex-start; gap:11px; padding:12px 13px; border:1px solid var(--bd); border-radius:10px; background:var(--surface); cursor:pointer; transition:border-color .12s ease, background .12s ease;}
.cap-item:hover{border-color:color-mix(in srgb,var(--primary) 40%,var(--bd)); background:color-mix(in srgb,var(--primary) 4%,var(--surface));}
.cap-item.selected{border-color:color-mix(in srgb,var(--primary) 58%,var(--bd)); background:color-mix(in srgb,var(--primary) 8%,var(--surface));}
.cap-item.disabled{opacity:.55; cursor:not-allowed;}
.cap-item input{position:absolute; opacity:0; pointer-events:none;}
.cap-check{width:18px; height:18px; flex:none; margin-top:2px; border:1.5px solid var(--bd); border-radius:5px; background:var(--surface2); box-shadow:inset 0 0 0 2px var(--surface2);}
.cap-item.selected .cap-check{border-color:var(--primary); background:var(--primary);}
.cap-copy{min-width:0; display:flex; flex-direction:column; gap:4px;}
.cap-copy strong{font:600 14px var(--sans); color:var(--ink);}
.cap-copy span{font:400 12.5px/1.45 var(--sans); color:var(--sub);}
.cap-copy em{font:500 11.5px/1.35 var(--sans); color:var(--sub2); font-style:normal;}
.cap-snapshot{margin-top:12px; border-top:1px solid var(--bd); padding-top:11px;}
.cap-snapshot-title{margin-bottom:8px; color:var(--sub); font:600 11px var(--sans); letter-spacing:.02em; text-transform:uppercase;}
.cap-snapshot-empty{margin:0; color:var(--sub); font:12px/1.45 var(--sans);}
.cap-snapshot-item{display:flex; align-items:flex-start; gap:11px; padding:9px 12px; border:1px solid var(--bd); border-radius:9px; background:color-mix(in srgb,var(--surface) 78%,var(--bg)); color:var(--sub); opacity:.68;}
.cap-snapshot-item + .cap-snapshot-item{margin-top:7px;}
.cap-snapshot-item .cap-check{flex:none; margin-top:2px; border-color:var(--bd); background:var(--bg); color:var(--sub); text-align:center; font:600 12px/16px var(--sans); box-shadow:none;}
@keyframes settingsIn{from{opacity:0; transform:translateY(8px) scale(.985)}to{opacity:1; transform:none}}
@media (max-width:640px){
  .settings-mask{padding:0; align-items:flex-end;}
  .settings-dialog{width:100%; height:min(82vh,680px); min-height:480px; border-radius:14px 14px 0 0;}
  .settings-body{grid-template-columns:112px minmax(0,1fr);}
  .settings-nav{padding:12px 7px;}
  .settings-nav-item{padding:10px 9px;}
  .settings-content{padding:22px 18px;}
}

/* ===== 会话设置弹窗（复用上方 .settings-* 骨架，仅补充页内组件） ===== */
.sess-title-edit{display:flex; align-items:center; gap:8px; flex:none;}
.sess-title-input{width:216px; max-width:36vw; height:32px; padding:0 10px; border:1px solid var(--bd); border-radius:8px;
  background:var(--surface); color:var(--ink); font:500 13px var(--sans);}
.sess-title-input:focus{outline:none; border-color:var(--primary);}
.sess-title-input:disabled{opacity:.5; cursor:not-allowed;}
.sess-info-row{min-height:44px; gap:14px;}
.sess-info-value{min-width:0; font:500 12.5px/1.5 var(--mono); color:var(--ink); word-break:break-all; text-align:right;}
.settings-save.on{border-color:var(--primary); color:var(--primary); background:color-mix(in srgb,var(--primary) 8%,var(--surface));}
.model-groups{display:flex; flex-direction:column; gap:5px;}
.model-group-head{display:flex; align-items:center; justify-content:space-between; width:100%; padding:10px 12px;
  border:1px solid var(--bd); border-radius:9px; background:var(--surface2); color:var(--sub);
  font:600 12.5px var(--sans); text-align:left; cursor:pointer;}
.model-group-head:hover{color:var(--ink);}
.model-option{display:flex; flex-direction:column; gap:2px; padding:10px 12px; border:1px solid var(--bd);
  border-radius:9px; background:var(--surface); cursor:pointer; transition:border-color .12s ease, background .12s ease;}
.model-option:hover{border-color:color-mix(in srgb,var(--primary) 40%,var(--bd));}
.model-option.selected{border-color:color-mix(in srgb,var(--primary) 58%,var(--bd)); background:color-mix(in srgb,var(--primary) 8%,var(--surface));}
.model-option.selected .mo-name{color:var(--primary); font-weight:600;}
.model-option.disabled{opacity:.5; cursor:not-allowed;}
.model-option.switching{border-color:var(--primary); background:color-mix(in srgb,var(--primary) 6%,var(--surface)); cursor:wait; opacity:.85;}
.model-option.switching .mo-name::after{content:''; display:inline-block; width:12px; height:12px; margin-left:8px; border:2px solid var(--bd); border-top-color:var(--primary); border-radius:50%; vertical-align:-2px; animation:device-spin .8s linear infinite;}
.model-option .mo-name{font:500 13.5px var(--sans); color:var(--ink);}
.model-option .mo-id{font:400 11.5px var(--mono); color:var(--sub2); word-break:break-all;}
.model-reload{padding:6px 0 10px;}
.sess-busy-hint{margin:0 0 10px; color:var(--sub); font:500 12.5px/1.45 var(--sans);}
.session-danger-btn{height:32px; flex:none; padding:0 14px; border:1px solid color-mix(in srgb,var(--warnink) 55%,var(--bd));
  border-radius:8px; background:var(--surface); color:var(--warnink); font:600 12.5px var(--sans); cursor:pointer;}
.session-danger-btn:hover{border-color:var(--warnink); background:color-mix(in srgb,var(--warnink) 8%,var(--surface));}
