/* chat-body.css —— workspace、个股侧栏与 Watchlist Brainstorm 共用「消息正文」渲染内核的样式。
   配合 chat-body.jsx(window.ChatBody / window.ToolBlock / window.ToolsPanel)。两个前端入口都加载本文件
   (工作台经 index.html、batx 产品页经 batx.html);规则与 app.css 中同名项一致(单一渲染、避免分叉)。
   各页只保留头像/消息排布；业务组件卡全部在本文件定义，并按实际容器宽度自适应。 */

/* ── 共享组件卡壳 ──
   slot 是容器查询边界：Watchlist 右栏即使处在宽屏浏览器里，也会按自身 300–500px
   的真实宽度切换紧凑布局，不再误用 viewport media query。 */
.chat-component-slot{
  width:100%;max-width:520px;min-width:0;box-sizing:border-box;
  container:chat-card / inline-size;
}
.chat-component-slot.is-wide{max-width:720px;}
.chat-component-card{
  width:100%;max-width:100%;min-width:0;box-sizing:border-box;margin:10px 0;
  border:1px solid var(--line2,#e4e7ea);border-radius:14px;background:var(--card,#fff);
  overflow:hidden;box-shadow:0 1px 2px rgba(15,37,64,.04);
}
.chat-component-card.is-live{
  border-color:rgba(58,109,240,.32);box-shadow:0 2px 14px rgba(58,109,240,.08);
}
.chat-component-card.is-muted{opacity:.72;}

/* 窄侧栏不直接压缩复杂业务卡：只留一行紧凑入口，完整组件在页面级弹层中展示。
   Workspace 默认 inline，不受这里影响；Watchlist 通过 ChatBody 参数显式启用 modal。 */
.chat-component-slot.is-modal-entry{max-width:100%;container:none;}
.chat-component-launcher{
  width:100%;min-width:0;display:flex;align-items:center;gap:10px;padding:10px 11px;
  border:1px solid var(--line2,#e4e7ea);border-radius:12px;background:var(--card,#fff);
  color:var(--t1,#1a1d21);text-align:left;cursor:pointer;box-shadow:0 1px 2px rgba(15,37,64,.04);
  transition:border-color .15s,box-shadow .15s,transform .15s;
}
.chat-component-launcher:hover{
  border-color:rgba(58,109,240,.35);box-shadow:0 5px 16px rgba(35,62,110,.10);transform:translateY(-1px);
}
.chat-component-launcher:focus-visible{outline:2px solid var(--blue,#3a6df0);outline-offset:2px;}
.chat-component-launcher-icon{
  width:32px;height:32px;flex:none;display:grid;place-items:center;border-radius:9px;
  color:var(--blue,#3a6df0);background:var(--blue-soft,#eef2fe);
}
.chat-component-launcher-icon svg{width:17px;height:17px;fill:none;stroke:currentColor;stroke-width:1.5;stroke-linecap:round;}
.chat-component-launcher[data-kind="todo"] .chat-component-launcher-icon{color:#0d9488;background:rgba(13,148,136,.10);}
.chat-component-launcher[data-kind="portfolio"] .chat-component-launcher-icon{color:#7c5ce5;background:rgba(124,92,229,.10);}
.chat-component-launcher[data-kind="chart"] .chat-component-launcher-icon{color:#d97706;background:rgba(217,119,6,.10);}
.chat-component-launcher[data-kind="draft"] .chat-component-launcher-icon{color:var(--t2,#5f666d);background:var(--surface-muted,#f1f3f5);}
.chat-component-launcher-copy{min-width:0;flex:1;display:flex;flex-direction:column;gap:1px;}
.chat-component-launcher-copy b{
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12.5px;line-height:1.4;font-weight:750;color:var(--t1,#1a1d21);
}
.chat-component-launcher-copy small{
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:10.5px;line-height:1.4;color:var(--t3,#8a93a0);
}
.chat-component-launcher-action{
  flex:none;display:inline-flex;align-items:center;gap:3px;font-size:11px;font-weight:700;color:var(--blue,#3a6df0);
}
.chat-component-launcher-action i{font-style:normal;font-size:17px;line-height:1;transform:translateY(-.5px);}
.chat-component-modal-overlay{
  position:fixed;inset:0;z-index:10020;display:flex;align-items:center;justify-content:center;padding:24px;
  background:rgba(20,25,35,.42);backdrop-filter:blur(3px);animation:toolsPop .15s ease;
}
.chat-component-modal{
  position:relative;width:min(720px,calc(100vw - 48px));max-height:calc(100vh - 48px);min-height:0;
  display:flex;flex-direction:column;overflow:visible;background:transparent;border:0;box-shadow:none;
}
.chat-component-modal-close{
  position:absolute;z-index:3;right:-13px;top:-13px;width:30px;height:30px;display:grid;place-items:center;
  border:1px solid var(--line2,#e4e7ea);border-radius:999px;background:var(--card,#fff);
  color:var(--t2,#5f666d);font-size:12px;cursor:pointer;box-shadow:0 7px 22px rgba(15,23,42,.20);
}
.chat-component-modal-close:hover{background:var(--surface-muted,#f1f3f5);color:var(--t1,#1a1d21);transform:scale(1.04);}
.chat-component-modal-close:focus-visible{outline:2px solid var(--blue,#3a6df0);outline-offset:2px;}
.chat-component-modal-scroll{min-height:0;overflow:auto;border-radius:16px;}
.chat-component-modal-content{
  width:100%;max-width:520px;min-width:0;margin:0 auto;container:chat-card / inline-size;
}
.chat-component-modal-content.is-wide{max-width:720px;}
.chat-component-modal-content>.chat-component-card,
.chat-component-modal-content>.chat-inline-charts,
.chat-component-modal-content>.exploration-draft{margin-top:0;margin-bottom:0;}
.chat-component-modal-content>.chat-component-card,
.chat-component-modal-content>.exploration-draft,
.chat-component-modal-content>.chat-inline-charts{
  box-shadow:0 24px 72px rgba(15,23,42,.28);
}
.chat-component-modal-content>.chat-inline-charts{
  padding:8px 12px;background:var(--card,#fff);border:1px solid var(--line2,#e4e7ea);border-radius:14px;
}
@media(max-width:640px){
  .chat-component-modal-overlay{align-items:flex-end;padding:12px;}
  .chat-component-modal{width:100%;max-height:calc(100vh - 24px);}
  .chat-component-modal-scroll{border-radius:14px;}
  .chat-component-modal-close{right:8px;top:8px;}
}

/* ── Research/Draft 非终态正文：保留可追溯草稿，但默认收起避免与最终答复平铺重复 ── */
.exploration-draft {
  margin: 4px 0 10px;
  border: 1px solid var(--line2, #e4e7ea);
  border-radius: 10px;
  background: var(--surface-sunken, #fbfcfd);
  overflow: hidden;
}
.exploration-draft > summary {
  min-height: 38px;
  padding: 0 12px;
  display: flex;
  align-items: center;
  gap: 8px;
  cursor: pointer;
  color: var(--t2, #878d94);
  font-size: 12px;
  list-style: none;
  user-select: none;
}
.exploration-draft > summary::-webkit-details-marker { display: none; }
.exploration-draft > summary::before {
  content: "›";
  width: 14px;
  color: var(--t3, #a8aeb5);
  font-size: 18px;
  line-height: 1;
  transform-origin: center;
  transition: transform .16s ease;
}
.exploration-draft[open] > summary::before { transform: rotate(90deg); }
.exploration-draft-title {
  color: var(--t2, #878d94);
  font-weight: 700;
}
.exploration-draft-status {
  padding: 2px 6px;
  border: 1px solid var(--line2, #e4e7ea);
  border-radius: 999px;
  color: var(--t3, #a8aeb5);
  font-size: 10px;
  font-weight: 600;
  line-height: 1.2;
}
.exploration-draft-meta {
  margin-left: auto;
  color: var(--t3, #a8aeb5);
  font-variant-numeric: tabular-nums;
}
.exploration-draft-body {
  padding: 2px 14px 12px 34px;
  border-top: 1px solid var(--line, #eef0f2);
  color: var(--t2, #878d94);
  font-size: 13px;
}
.exploration-draft-body > :first-child { margin-top: 10px; }
.exploration-draft-body > :last-child { margin-bottom: 0; }
.final-answer-label {
  margin: 12px 0 8px;
  padding-top: 10px;
  border-top: 1px solid var(--line, #eef0f2);
  display: flex;
  align-items: baseline;
  gap: 8px;
  color: var(--t1, #25282c);
}
.final-answer-label > span {
  font-size: 12px;
  font-weight: 800;
}
.final-answer-label > small {
  color: var(--t3, #a8aeb5);
  font-size: 10px;
}

/* ── Markdown 正文(window.Markdown 输出)── */
.md-body{white-space:normal;min-width:0;container:chat-markdown / inline-size;}
.md-body .md-p{margin:0 0 8px;}
.md-body .md-br{height:6px;}
.md-body .md-h{font-weight:700;margin:14px 0 6px;line-height:1.4;}
.md-body h1.md-h{font-size:17px;}
.md-body h2.md-h{font-size:15.5px;}
.md-body h3.md-h,.md-body h4.md-h{font-size:14px;}
.md-body ul,.md-body ol{margin:4px 0 8px;padding-left:20px;}
.md-body li{margin-bottom:3px;}
.md-body .md-bq{border-left:3px solid var(--line2);margin:6px 0;padding:4px 10px;color:var(--t2);font-style:italic;}
.md-body .md-hr{border:none;border-top:1px solid var(--line);margin:12px 0;}
.md-body strong{font-weight:700;}
.md-body em{font-style:italic;}
.md-body a{color:var(--blue);text-decoration:none;}
.md-body a:hover{text-decoration:underline;}
.md-fileref{display:inline-flex;align-items:center;gap:5px;cursor:pointer;
  background:var(--blue-soft);color:var(--blue);border-radius:6px;
  padding:2px 8px 2px 5px;font-size:12.5px;font-weight:500;
  border:1px solid #d6e0fc;margin:0 2px;vertical-align:middle;transition:background .12s;}
.md-fileref:hover{background:var(--blue-tint);}
.md-fileref-ext{font-size:10px;font-weight:700;background:var(--blue);color:#fff;
  border-radius:3px;padding:0 4px;line-height:16px;font-family:var(--mono);}
.md-ic{background:var(--surface-muted);border-radius:4px;padding:1px 5px;font-family:var(--mono);font-size:12.5px;color:#c7254e;}
.md-artifact{display:flex;align-items:center;gap:8px;cursor:pointer;
  background:var(--blue-soft);border:1px solid #c7d4fa;border-radius:8px;
  padding:8px 12px;margin:8px 0;transition:background .12s;}
.md-artifact:hover{background:var(--blue-tint);}
.md-artifact-ic::before{content:"";display:inline-block;width:14px;height:14px;
  background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%232563eb' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='2.5' y='3' width='11' height='10' rx='1.2'/%3E%3Cpath d='M2.5 5.8h11'/%3E%3C/svg%3E") center/contain no-repeat;}
.md-artifact-name{font-size:13px;font-weight:600;color:var(--blue);flex:1;}
.md-artifact-badge{font-size:10px;font-weight:700;background:var(--blue);color:#fff;
  border-radius:3px;padding:1px 5px;font-family:var(--mono);}
.md-artifact-ref-menu{position:fixed;z-index:12000;width:232px;padding:6px;background:var(--card,#fff);
  border:1px solid var(--line2,#e4e7ea);border-radius:11px;box-shadow:0 14px 38px rgba(15,23,42,.2);}
.md-artifact-ref-menu-label{padding:6px 9px 7px;color:var(--t3,#8a929c);font-size:11px;white-space:nowrap;
  overflow:hidden;text-overflow:ellipsis;border-bottom:1px solid var(--line,#edf0f2);}
.md-artifact-ref-menu button{width:100%;display:flex;align-items:center;gap:8px;margin-top:4px;padding:8px 9px;
  border:none;border-radius:8px;background:transparent;color:var(--t1,#20252b);font-size:13px;font-weight:650;
  text-align:left;cursor:pointer;}
.md-artifact-ref-menu button:hover,.md-artifact-ref-menu button:focus-visible{background:rgba(13,148,136,.1);
  color:#0d7f75;outline:none;}
.md-body .md-pre{background:#1e2229;border-radius:8px;padding:12px 14px;margin:8px 0;overflow-x:auto;}
.md-body .md-code{font-family:var(--mono);font-size:12.5px;color:#e8eaf0;white-space:pre;}
.md-body .md-table-wrap{overflow-x:auto;margin:8px 0;}
.md-body .md-table{border-collapse:collapse;font-size:13px;width:100%;}
.md-body .md-table th,.md-body .md-table td{border:1px solid var(--line);padding:5px 10px;text-align:left;}
.md-body .md-table th{background:var(--surface-hover);font-weight:600;}
.md-raw{white-space:pre-wrap;}

/* ── 流式光标 / 等待动画 ── */
.typing{display:inline-flex;gap:4px;align-items:center;color:var(--t2);font-size:13px;}
.typing i{width:6px;height:6px;border-radius:50%;background:var(--t3);animation:bln 1.2s infinite;}
.typing i:nth-child(2){animation-delay:.2s;} .typing i:nth-child(3){animation-delay:.4s;}
@keyframes bln{0%,60%,100%{opacity:.3;}30%{opacity:1;}}
.caret{display:inline-block;width:7px;color:var(--blue);font-weight:700;animation:bk 1s steps(2) infinite;margin-left:1px;}
@keyframes bk{0%,100%{opacity:1;}50%{opacity:0;}}

/* ── 工具调用块(ToolBlock)── */
.tool-block{white-space:normal;background:var(--surface-sunken);border:1px solid var(--line);border-radius:10px;margin:10px 0 4px;overflow:hidden;font-size:13px;}
.tool-header{display:flex;align-items:center;gap:8px;padding:6px 12px;background:var(--surface-muted);border-bottom:1px solid var(--line);}
.tool-label{font-size:11.5px;font-weight:700;color:var(--t2);letter-spacing:.3px;flex-shrink:0;}
.tool-arg{flex:1;min-width:0;font-family:var(--mono);font-size:11px;color:var(--t3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.tool-step{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:50%;background:var(--blue-soft);color:var(--blue);font-size:10px;font-weight:800;font-family:var(--mono);flex-shrink:0;}
.tool-status{font-size:11px;color:var(--down);flex-shrink:0;}.tool-status.err{color:var(--up);}
.tool-toggle{font-size:10.5px;color:var(--t3);user-select:none;flex-shrink:0;background:var(--surface-muted);padding:2px 7px;border-radius:5px;}
.tool-empty{padding:10px 18px;font-size:12px;color:var(--t3);}
.tool-running{display:inline-flex;gap:3px;align-items:center;}
.tool-running i{width:5px;height:5px;border-radius:50%;background:var(--blue);animation:bln 1.2s infinite;}
.tool-running i:nth-child(2){animation-delay:.2s;}.tool-running i:nth-child(3){animation-delay:.4s;}
.tool-code{padding:10px 14px;margin:0;font-family:var(--mono);font-size:12px;line-height:1.6;
  white-space:pre-wrap;word-break:break-all;max-height:260px;overflow-y:auto;color:var(--t1);}
.tool-result{border-top:1px solid var(--line);padding:10px 12px;display:flex;flex-direction:column;gap:8px;}
.tool-stdout{margin:0;font-family:var(--mono);font-size:12px;line-height:1.6;white-space:pre-wrap;
  color:var(--t1);background:var(--card);border-radius:6px;padding:8px 10px;max-height:220px;overflow-y:auto;}
.tool-error{margin:0;font-family:var(--mono);font-size:12px;line-height:1.6;white-space:pre-wrap;
  color:#c00;background:var(--danger-soft);border-radius:6px;padding:8px 10px;max-height:220px;overflow-y:auto;}
.tool-figure{max-width:100%;border-radius:8px;display:block;}
.tool-table-wrap{overflow:hidden;}
.tool-table-meta{font-size:11px;color:var(--t3);margin-bottom:4px;}
.tool-table{border-collapse:collapse;font-size:12px;width:100%;font-family:var(--mono);}
.tool-table th,.tool-table td{border:1px solid var(--line);padding:4px 8px;white-space:nowrap;text-align:right;}
.tool-table th{background:var(--surface-hover);font-weight:700;text-align:left;color:var(--t2);}
.tool-table tr:nth-child(even) td{background:var(--surface-sunken);}
.tool-table-pager{display:flex;align-items:center;justify-content:flex-end;gap:8px;margin-top:6px;}
.ttp-btn{border:none;background:var(--surface-muted);color:var(--t2);width:22px;height:22px;border-radius:6px;cursor:pointer;font-size:13px;line-height:1;transition:.13s;}
.ttp-btn:hover:not(:disabled){background:var(--blue-soft,var(--blue-soft));color:var(--blue,#3a6df0);}
.ttp-btn:disabled{opacity:.4;cursor:default;}
.ttp-info{font-size:11px;color:var(--t3);font-family:var(--mono);font-variant-numeric:tabular-nums;}

/* ── 工具调用弹窗(ToolsPanel)── */
.tools-overlay{position:fixed;inset:0;background:rgba(20,25,35,.42);backdrop-filter:blur(3px);z-index:9999;display:flex;align-items:center;justify-content:center;padding:24px;animation:toolsPop .15s ease;}
@keyframes toolsPop{from{opacity:0;}to{opacity:1;}}
@keyframes toolsUp{from{transform:translateY(14px);opacity:.5;}to{transform:none;opacity:1;}}
.tools-modal{width:min(700px,96vw);max-height:82vh;display:flex;flex-direction:column;background:var(--card);border:1px solid var(--line2);border-radius:16px;box-shadow:0 24px 64px rgba(20,25,35,.24);overflow:hidden;animation:toolsUp .26s cubic-bezier(.2,.7,.3,1);}
.tools-modal-head{display:flex;align-items:center;padding:14px 18px;background:var(--card);border-bottom:1px solid var(--line);flex-shrink:0;gap:10px;}
.tools-modal-head>span:first-child,.tools-head-name,.tools-head-title>span:first-child{font-size:14px;font-weight:800;color:var(--t1);letter-spacing:-.1px;}
.tools-head-title{display:flex;align-items:center;gap:9px;}
.tools-modal-head-badge{background:var(--blue-soft);color:var(--blue);font-size:11px;font-weight:800;padding:2px 9px;border-radius:999px;font-family:var(--mono);}
.tools-modal-close{margin-left:auto;background:var(--surface-muted);border:none;font-size:13px;color:var(--t2);cursor:pointer;width:28px;height:28px;border-radius:8px;line-height:1;flex-shrink:0;transition:background .15s,color .15s;display:grid;place-items:center;}
.tools-modal-close:hover{background:var(--line2);color:var(--t1);}
.tools-modal-body{overflow-y:auto;padding:0;display:flex;flex-direction:column;}
.tools-modal-body .tool-block{margin:0;border:none;border-left:3px solid #a8aeb5;border-radius:0;border-bottom:1px solid var(--line);background:var(--card);}
.tools-modal-body .tool-block:last-child{border-bottom:none;}
.tools-modal-body .tool-block.cat-code{border-left-color:var(--blue);}
.tools-modal-body .tool-block.cat-read{border-left-color:#0d9488;}
.tools-modal-body .tool-block.cat-search{border-left-color:#8b5cf6;}
.tools-modal-body .tool-block.cat-web{border-left-color:#e8852b;}
.tools-modal-body .tool-block.cat-write{border-left-color:#15a35a;}
.tools-modal-body .tool-block.cat-skill{border-left-color:var(--danger);}
.tools-modal-body .tool-block.is-err{border-left-color:var(--up);}
.tools-modal-body .tool-header{background:var(--surface-sunken);border-bottom:1px solid var(--line);padding:9px 16px;gap:9px;cursor:pointer;}
.tools-modal-body .tool-header:hover{background:var(--blue-soft);}
.tools-modal-body .tool-label{font-size:12.5px;font-weight:700;color:var(--t1);}
.tools-modal-body .tool-code{background:#0f1117;color:#c9d1d9;border-radius:0;margin:0;padding:14px 20px;max-height:200px;border-top:1px solid #222;}
.tools-modal-body .tool-result{background:var(--surface-sunken);border-top:1px dashed var(--line);padding:12px 18px;}
.tools-modal-body .tool-stdout{background:var(--card);color:var(--t1);}
.tools-modal-body .tool-error{background:var(--danger-soft);}
.tools-modal-body .tool-table-wrap{padding:0;}
/* 头部成败统计 */
.tools-head-stat{display:inline-flex;gap:10px;margin-left:2px;font-family:var(--mono);font-size:11px;font-weight:800;}
.tools-head-stat .ths-ok{color:var(--down);}.tools-head-stat .ths-fail{color:var(--up);}.tools-head-stat .ths-run{color:var(--blue);}
/* 类型 chip 条(点击=按类型筛选)*/
.tools-typebar{display:flex;flex-wrap:wrap;gap:6px;padding:10px 16px;background:var(--surface-hover);border-bottom:1px solid var(--line);flex-shrink:0;}
.tools-type-chip{border:1px solid var(--line);background:var(--card);color:var(--t2);font-size:11.5px;border-radius:999px;padding:3px 9px;cursor:pointer;display:inline-flex;align-items:center;gap:5px;transition:.13s;}
.tools-type-chip:hover{border-color:#c5d4f5;color:var(--t1);}
.tools-type-chip b{font-family:var(--mono);font-size:10.5px;color:#fff;background:#a8b0bb;border-radius:999px;min-width:15px;text-align:center;padding:0 4px;font-weight:800;}
.tools-type-chip.on{background:var(--blue);border-color:var(--blue);color:#fff;}
.tools-type-chip.on b{background:rgba(255,255,255,.28);}
/* 筛选框 */
.tools-filter{display:flex;align-items:center;gap:6px;padding:9px 16px;border-bottom:1px solid var(--line);flex-shrink:0;background:var(--card);}
.tools-filter input{flex:1;border:1px solid var(--line);border-radius:8px;padding:6px 10px;font-size:12.5px;color:var(--t1);outline:none;}
.tools-filter input:focus{border-color:var(--blue-line);box-shadow:0 0 0 3px rgba(58,109,240,.12);}
.tools-filter-x{border:none;background:var(--surface-muted);color:var(--t2);width:26px;height:26px;border-radius:7px;cursor:pointer;font-size:12px;flex-shrink:0;}
.tools-filter-x:hover{background:var(--line2);}
.tools-empty{padding:32px 18px;text-align:center;color:var(--t3);font-size:13px;}
@media(max-width:560px){
  .tools-modal{width:100vw;max-height:88vh;border-radius:14px 14px 0 0;}
  .tools-modal-body .tool-arg{font-size:10.5px;}
}

/* ── 工具调用:单独大区域 + 每工具「输入/输出」分段(重构) ── */
.tools-modal.lg{width:min(1100px,94vw);max-height:88vh;}
.tools-modal.lg .tools-modal-body{padding:0;}
.tool-io{display:flex;flex-direction:column;}
.tool-io-sec{border-top:1px solid var(--line);}
.tool-io-sec:first-child{border-top:none;}
.tool-io-label{font-size:11px;font-weight:800;letter-spacing:1px;padding:9px 16px 2px;}
.tool-io-label.in{color:var(--blue);}
.tool-io-label.out{color:#15a35a;}
.tool-args{padding:6px 16px 12px;display:flex;flex-direction:column;gap:8px;}
.tool-arg-row{display:flex;flex-direction:column;gap:3px;}
.tool-arg-k{font-size:11px;font-weight:700;color:var(--t2);font-family:var(--mono);}
.tool-arg-v{margin:0;font-family:var(--mono);font-size:12px;line-height:1.55;white-space:pre-wrap;
  word-break:break-word;background:#0f1117;color:#c9d1d9;border-radius:6px;padding:9px 12px;max-height:260px;overflow:auto;}
/* 大区域里输入代码/输出文字给更高上限,看全 Python 代码与结果 */
.tools-modal.lg .tool-code,.tools-modal.lg .tool-arg-v,.tools-modal.lg .tool-stdout,.tools-modal.lg .tool-error{max-height:360px;}
.tool-io .tool-result{border-top:none;}

/* ── 工具调用记录弹窗:左列表 + 右(含 tab)详情 ── */
.tools-modal.split{width:min(1080px,94vw);height:min(640px,86vh);max-height:86vh;}
.tools-split{flex:1;display:flex;min-height:0;}
.tools-list{width:288px;flex-shrink:0;border-right:1px solid var(--line);overflow-y:auto;background:var(--surface-sunken);}
.tools-list-filter{position:sticky;top:0;z-index:1;display:flex;align-items:center;gap:6px;padding:9px 12px;background:var(--surface-sunken);border-bottom:1px solid var(--line);}
.tools-list-filter input{flex:1;min-width:0;border:1px solid var(--line);border-radius:8px;padding:6px 9px;font-size:12px;color:var(--t1);outline:none;}
.tools-list-filter input:focus{border-color:var(--blue-line);box-shadow:0 0 0 3px rgba(58,109,240,.12);}
.tools-li{display:flex;align-items:center;gap:11px;width:100%;text-align:left;background:none;border:none;border-bottom:1px solid var(--line);padding:10px 12px;cursor:pointer;transition:background .12s;}
.tools-li:hover{background:var(--surface-hover);}
.tools-li.on{background:var(--blue-soft);}
.tools-li-step{flex-shrink:0;width:15px;text-align:center;font-family:var(--mono);font-size:11px;font-weight:800;color:var(--t3);}
.tools-li.on .tools-li-step{color:var(--blue);}
.tools-li-ic{flex-shrink:0;width:34px;height:34px;border-radius:10px;display:grid;place-items:center;background:var(--surface-muted);color:var(--t2);}
.tools-li.cat-code .tools-li-ic,.tools-li.cat-todo .tools-li-ic{background:var(--blue-soft);color:var(--blue);}
.tools-li.cat-read .tools-li-ic,.tools-li.cat-write .tools-li-ic{background:var(--down-soft);color:var(--down);}
.tools-li.cat-search .tools-li-ic{background:var(--violet-soft);color:var(--violet);}
.tools-li.cat-web .tools-li-ic{background:var(--amber-soft);color:var(--amber);}
.tools-li.cat-skill .tools-li-ic{background:var(--danger-soft);color:var(--danger);}
.tools-li.is-err .tools-li-ic{background:var(--up-soft);color:var(--up);}
.tools-li-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px;}
.tools-li-label{font-size:13px;font-weight:700;color:var(--t1);line-height:1.25;}
.tools-li-arg{font-family:var(--mono);font-size:10.5px;color:var(--t3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.tools-li-st{flex-shrink:0;width:22px;height:22px;border-radius:50%;display:grid;place-items:center;font-size:12px;font-weight:800;background:var(--down-soft);color:var(--down);}.tools-li-st.err{background:var(--up-soft);color:var(--up);}
.tools-li .tool-running{flex-shrink:0;width:22px;justify-content:center;}
.tools-detail{flex:1;min-width:0;display:flex;flex-direction:column;background:var(--card);}
.tools-tabs{display:flex;align-items:center;gap:2px;padding:0 14px;border-bottom:1px solid var(--line);flex-shrink:0;background:var(--card);}
.tools-tab{border:none;background:none;font-size:13px;font-weight:700;color:var(--t3);padding:11px 13px 9px;cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px;transition:color .12s,border-color .12s;}
.tools-tab:hover{color:var(--t1);}
.tools-tab.on{color:var(--blue);border-bottom-color:var(--blue);}
.tools-tab-cur{margin-left:auto;font-family:var(--mono);font-size:11px;color:var(--t3);}
.tools-detail-body{flex:1;overflow-y:auto;}
.tools-detail-body .tool-code{background:#0f1117;color:#c9d1d9;margin:0;border:none;border-radius:0;padding:14px 18px;max-height:none;}
.tools-detail-body .tool-args{padding:14px 16px;}
.tools-detail-body .tool-arg-v,.tools-detail-body .tool-stdout,.tools-detail-body .tool-error{max-height:none;}
.tools-detail-body .tool-result{border-top:none;background:var(--card);padding:14px 16px;}
.tools-detail-body .tool-stdout{background:var(--card);color:var(--t1);}
.tools-detail-body .tool-empty{padding:30px 18px;text-align:center;}
@media (max-width:760px){
  .tools-modal.split{height:88vh;}
  .tools-split{flex-direction:column;}
  .tools-list{width:auto;max-height:40%;border-right:none;border-bottom:1px solid var(--line);}
}

/* ── 事实核查证据账本面板(LedgerModal;复用 tools-* 分栏壳,仅补条目色点/三态标签/详情行) ── */
.ledger-dot{flex-shrink:0;width:8px;height:8px;border-radius:50%;margin:0 2px;}
.ledger-tag{flex-shrink:0;font-family:var(--mono);font-size:10px;font-weight:700;white-space:nowrap;letter-spacing:.02em;}
.ledger-detail{padding:16px 18px;}
.ledger-hero{display:flex;align-items:baseline;gap:12px;flex-wrap:wrap;margin-bottom:14px;padding-bottom:12px;border-bottom:1px solid var(--line);}
.ledger-hero-v{font-size:24px;font-weight:800;color:var(--t1);letter-spacing:-.01em;}
.ledger-hero-u{font-size:14px;font-weight:600;color:var(--t2);}
.ledger-drow{display:flex;gap:12px;padding:5px 0;font-size:12.5px;line-height:1.5;border-bottom:1px solid var(--surface-sunken);}
.ledger-dk{flex-shrink:0;width:78px;color:var(--t3);}
.ledger-dv{color:var(--t1);word-break:break-word;overflow-wrap:anywhere;}
a.ledger-dv{color:var(--blue);text-decoration:none;}a.ledger-dv:hover{text-decoration:underline;}
.ledger-ref-links{display:inline;line-height:1.7;}
.ledger-ref-link{display:inline;border:0;background:none;padding:0;color:var(--blue);font:inherit;
  font-weight:600;text-decoration:none;cursor:pointer;}
.ledger-ref-link:hover,.ledger-ref-link:focus-visible{text-decoration:underline;}
.ledger-ref-link:focus-visible{outline:2px solid var(--blue-line,#aabff6);outline-offset:2px;border-radius:2px;}
.ledger-ref-sep{color:var(--t3);}
.ledger-raw{margin-top:12px;}
.ledger-raw .ledger-dk{width:auto;margin-bottom:5px;}
.ledger-raw-pre{margin:0;padding:10px 12px;background:var(--surface-sunken);border-radius:8px;font-size:12px;line-height:1.55;color:var(--t2);white-space:pre-wrap;word-break:break-word;max-height:240px;overflow-y:auto;}

/* ── 普通用户:无细节的工具调用概览(图标色块 + 类别 + 名称 + 成败,不含参数/输入/输出) ── */
.tools-modal.simple{width:min(440px,94vw);max-height:78vh;}
.tools-simple-summary{display:flex;gap:18px;padding:11px 20px;border-bottom:1px solid var(--line);background:var(--surface-sunken);font-size:12px;color:var(--t2);flex-shrink:0;}
.tss-item b{font-family:var(--mono);font-weight:800;font-size:13.5px;color:var(--t1);margin-right:4px;}
.tss-item b.ok{color:var(--down);}.tss-item b.fail{color:var(--up);}.tss-item b.run{color:var(--blue);}
.tools-simple-scroll{flex:1;overflow-y:auto;padding:8px 9px;}
.tools-simple-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:3px;}
.tools-si{display:flex;align-items:center;gap:12px;padding:9px 11px;border-radius:12px;transition:background .13s;}
.tools-si:hover{background:var(--surface-hover);}
.tools-si-step{flex-shrink:0;width:15px;text-align:center;font-family:var(--mono);font-size:11px;font-weight:800;color:var(--t3);}
.tools-si-ic{flex-shrink:0;width:34px;height:34px;border-radius:10px;display:grid;place-items:center;background:var(--surface-muted);color:var(--t2);}
.tools-si.cat-code .tools-si-ic,.tools-si.cat-todo .tools-si-ic{background:var(--blue-soft);color:var(--blue);}
.tools-si.cat-read .tools-si-ic,.tools-si.cat-write .tools-si-ic{background:var(--down-soft);color:var(--down);}
.tools-si.cat-search .tools-si-ic{background:var(--violet-soft);color:var(--violet);}
.tools-si.cat-web .tools-si-ic{background:var(--amber-soft);color:var(--amber);}
.tools-si.cat-skill .tools-si-ic{background:var(--danger-soft);color:var(--danger);}
.tools-si.is-err .tools-si-ic{background:var(--up-soft);color:var(--up);}
.tools-si-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px;}
.tools-si-cat{font-size:10px;font-weight:800;letter-spacing:.06em;color:var(--t3);text-transform:uppercase;}
.tools-si-label{font-size:13.5px;font-weight:700;color:var(--t1);line-height:1.3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.tools-si-st{flex-shrink:0;width:22px;height:22px;border-radius:50%;display:grid;place-items:center;font-size:12px;font-weight:800;background:var(--surface-muted);}
.tools-si-st.ok{background:var(--down-soft);color:var(--down);}
.tools-si-st.err{background:var(--up-soft);color:var(--up);}
.tools-si .tool-running{flex-shrink:0;width:22px;justify-content:center;}
.tools-simple-foot{flex-shrink:0;padding:10px 16px;border-top:1px solid var(--line);background:var(--card);color:var(--t3);font-size:11.5px;text-align:center;}
@media(max-width:560px){
  .tools-modal.simple{width:100vw;max-height:82vh;border-radius:14px 14px 0 0;}
}

/* —— watchlist 任务末尾成果 gate(达成/未产出/路径误解) —— */
.gate-block{margin-top:8px;border-radius:10px;border:1px solid var(--line2);background:var(--card);padding:9px 12px;font-size:12.5px;}
.gate-block.ok{border-color:var(--ok-line);background:var(--ok-soft);}
.gate-block.err{border-color:var(--danger-line);background:var(--danger-soft);}
.gate-block.warn{border-color:var(--line2);background:var(--surface-sunken);}
.gate-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;}
.gate-pill{font-size:11px;font-weight:800;padding:2px 9px;border-radius:7px;color:#fff;background:#a8aeb5;}
.gate-pill.ok{background:var(--down);}
.gate-pill.err{background:var(--up);}
.gate-expected{color:var(--t3);font-size:11px;}
.gate-expected code{font-family:var(--mono);background:var(--bg);padding:1px 5px;border-radius:4px;color:var(--t2);}
.gate-body{margin-top:6px;color:var(--t2);line-height:1.6;}
.gate-body .md-fileref{margin:2px 4px 2px 0;}

/* ── 海报 bundle 回显卡：品牌封面/banner + 右侧操作区 ── */
.md-postercard{display:flex;flex-wrap:wrap;gap:14px;align-items:stretch;margin:10px 0;padding:10px;
  background:var(--card);border:1px solid var(--line,var(--line2));border-radius:12px;cursor:pointer;
  box-shadow:0 1px 2px rgba(20,25,35,.04);width:100%;max-width:640px;box-sizing:border-box;transition:box-shadow .15s;}
.md-postercard:hover{box-shadow:0 6px 18px rgba(20,25,35,.12);}
.md-postercard-frame{position:relative;flex:1 1 280px;min-width:0;max-width:100%;aspect-ratio:1200/628;
  overflow:hidden;}   /* banner 自带圆角;frame 不套圆角/灰底,贴合 1200×628 避免上下露底色 */
.md-postercard-iframe{border:0;pointer-events:none;transform-origin:0 0;display:block;}
.md-postercard-ph{position:relative;display:flex;flex-direction:column;justify-content:center;gap:6px;height:100%;padding:16px 18px;
  background:linear-gradient(135deg,#171c26 0%,#1f2a44 62%,#2b3f6e 100%);color:#fff;text-align:left;overflow:hidden;}
.md-postercard-ph::after{content:"";position:absolute;right:-46px;bottom:-72px;width:190px;height:190px;border-radius:50%;
  background:radial-gradient(circle,rgba(91,138,245,.38),rgba(91,138,245,0) 68%);pointer-events:none;}
.md-pc-brand{position:absolute;top:12px;left:18px;display:flex;align-items:center;gap:9px;}
.md-pc-logo{font-size:13.5px;font-weight:800;letter-spacing:.2px;color:#fff;line-height:1;}
.md-pc-logo i{font-style:normal;color:#7da2ff;}
.md-pc-kind{font-size:10px;font-weight:600;letter-spacing:2.5px;color:rgba(255,255,255,.52);line-height:1;
  padding-left:9px;border-left:1px solid rgba(255,255,255,.22);}
.md-pc-title{font-size:20px;font-weight:800;line-height:1.35;letter-spacing:.5px;text-wrap:balance;
  display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;}
.md-pc-code{position:absolute;left:18px;right:18px;bottom:11px;padding-top:8px;border-top:1px solid rgba(255,255,255,.14);
  font-size:10.5px;font-weight:600;color:rgba(255,255,255,.58);font-family:var(--mono,ui-monospace,Menlo,monospace);letter-spacing:1.5px;}
.md-postercard-side{flex:1 1 150px;display:flex;flex-direction:column;gap:8px;min-width:0;padding:6px 2px;}
.md-postercard-actions{margin-top:auto;display:flex;align-items:center;gap:8px;}
.md-postercard-share{width:30px;height:30px;border-radius:8px;border:1px solid var(--line2,#e4e7ea);background:var(--card,#fff);
  color:var(--t1b,#3f4650);display:inline-flex;align-items:center;justify-content:center;cursor:pointer;padding:0;flex:none;
  transition:background .15s,border-color .2s,color .2s,transform .15s;}
.md-postercard-share svg{width:15px;height:15px;}
.md-postercard-share:hover{background:var(--surface-hover,#f4f6f8);transform:translateY(-1px);}
.md-postercard-share:active{transform:translateY(0);}
.md-postercard-share:disabled{opacity:.7;cursor:default;}
.md-postercard-share.saved{background:var(--down,#15a35a);border-color:var(--down,#15a35a);color:#fff;animation:pcSharePop .4s cubic-bezier(.34,1.56,.64,1);}
@keyframes pcSharePop{0%{transform:scale(.72)}55%{transform:scale(1.12)}100%{transform:scale(1)}}
.md-postercard-name{font-size:13px;font-weight:700;color:var(--t1,var(--t1));
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.md-postercard-hint{font-size:11px;color:var(--t3,var(--t3));}
.md-postercard-save{align-self:flex-start;font-size:12px;font-weight:600;padding:6px 14px;border-radius:8px;
  cursor:pointer;border:1px solid var(--blue,#3a6df0);background:var(--blue,#3a6df0);color:#fff;}
.md-postercard-save:hover{filter:brightness(1.08);}
.md-postercard-save:disabled{opacity:.65;cursor:default;filter:none;}
.md-postercard-save.saved{background:var(--down,#15a35a);border-color:var(--down,#15a35a);}
.md-postercard-promote-sys{align-self:flex-start;font-size:12px;font-weight:600;padding:6px 14px;border-radius:8px;
  cursor:pointer;border:1px solid var(--t3,#878d94);background:transparent;color:var(--t1,#1a1d21);margin-top:4px;}
.md-postercard-promote-sys:hover{background:var(--paper,#f6f7f9);}
.md-postercard-promote-sys:disabled{opacity:.65;cursor:default;}
.md-postercard-promote-sys.saved{background:var(--down,#15a35a);color:#fff;border-color:var(--down,#15a35a);}
@media (max-width:640px){
  .md-postercard{flex-direction:column;}
  .md-postercard-frame{flex:none;max-width:100%;width:100%;}
}
@container chat-markdown (max-width:520px){
  .md-postercard{flex-direction:column;gap:9px;}
  .md-postercard-frame{flex:none;max-width:100%;width:100%;}
  .md-postercard-side{flex:none;padding:2px 2px 4px;}
  .md-postercard-actions{flex-wrap:wrap;}
  .md-foldercard{width:100%;max-width:100%;box-sizing:border-box;}
  .md-body .md-table-wrap{max-width:100%;overscroll-behavior-x:contain;}
}

/* ── 目录卡:[[file:...path/]] 尾斜杠节点 → 文件树卡(md.jsx 增强层拉 tree/expand 填充)── */
.md-foldercard{margin:10px 0;max-width:460px;background:var(--card,var(--card));border:1px solid var(--line2,var(--line2));
  border-radius:13px;box-shadow:0 1px 2px rgba(20,25,35,.05);overflow:hidden;cursor:pointer;transition:box-shadow .15s;
  font-family:var(--sans,-apple-system,BlinkMacSystemFont,"PingFang SC",sans-serif);}
.md-foldercard:hover{box-shadow:0 8px 22px rgba(20,25,35,.10);}
.md-foldercard-hd{display:flex;align-items:center;gap:10px;padding:12px 14px;}
.md-foldercard-ico{width:30px;height:30px;border-radius:9px;flex:none;display:grid;place-items:center;
  background:rgba(58,109,240,.10);color:var(--blue,#3a6df0);}
.md-foldercard-ico svg{width:16px;height:16px;}
.md-foldercard-nm{flex:1;min-width:0;font-family:var(--mono,ui-monospace,Menlo,Consolas,monospace);
  font-size:14px;font-weight:750;letter-spacing:-.2px;color:var(--t1,var(--t1));
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.md-foldercard-badge{flex:none;font-size:11px;font-weight:700;color:var(--blue,#3a6df0);
  background:rgba(58,109,240,.10);padding:4px 9px;border-radius:7px;font-variant-numeric:tabular-nums;}
.md-foldercard-tree{border-top:1px solid var(--line,var(--line2));}
.md-foldercard-tree:empty{display:none;}
.mfc-row{display:flex;align-items:center;gap:10px;padding:8px 14px;}
.mfc-row+.mfc-sub{margin-top:-4px;}
.mfc-row:hover{background:var(--surface-sunken,var(--surface-sunken));}
.mfc-file{cursor:pointer;}
.mfc-ico{width:23px;height:23px;border-radius:7px;flex:none;display:grid;place-items:center;
  background:var(--surface-muted,var(--surface-muted));color:var(--t2,var(--t2));}
.mfc-ico svg{width:13px;height:13px;}
.mfc-md{background:rgba(232,133,43,.11);color:var(--amber,#e8852b);}
.mfc-py{background:rgba(139,92,246,.11);color:var(--violet,#8b5cf6);}
.mfc-html{background:rgba(58,109,240,.10);color:var(--blue,#3a6df0);}
.mfc-dir-ico{background:rgba(58,109,240,.10);color:var(--blue,#3a6df0);}
.mfc-nm{flex:1;min-width:0;font-family:var(--mono,ui-monospace,Menlo,Consolas,monospace);font-size:12.5px;
  font-weight:550;color:var(--t1,var(--t1));white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.mfc-sl{color:var(--t3,var(--t3));}
.mfc-meta{flex:none;font-family:var(--mono,ui-monospace,Menlo,Consolas,monospace);font-size:11px;
  color:var(--t3,var(--t3));font-variant-numeric:tabular-nums;}
.mfc-chip{flex:none;font-size:10.5px;font-weight:650;color:var(--t2,var(--t2));
  background:var(--line,var(--line2));padding:2px 8px;border-radius:6px;font-variant-numeric:tabular-nums;}
.mfc-chip:empty{display:none;}
.mfc-sub{padding:0 14px 5px 40px;}
.mfc-sub:empty{display:none;}
.mfc-srow{display:flex;align-items:center;gap:8px;padding:4px 0;position:relative;}
.mfc-srow::before{content:"";position:absolute;left:-15px;top:0;bottom:50%;width:1px;background:var(--line2,#e4e7ea);}
.mfc-srow::after{content:"";position:absolute;left:-15px;top:50%;width:9px;height:1px;background:var(--line2,#e4e7ea);}
.mfc-sn{flex:1;min-width:0;font-family:var(--mono,ui-monospace,Menlo,Consolas,monospace);font-size:11.5px;
  color:var(--t2,var(--t2));white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.mfc-sm{flex:none;font-family:var(--mono,ui-monospace,Menlo,Consolas,monospace);font-size:10.5px;
  color:var(--t3,var(--t3));font-variant-numeric:tabular-nums;}

/* ── 对话流内的任务进度时间线(todo_write → 纵向 stepper)──
   放此处:chat-body.css 被 /workspace 与 batx 主页共同加载(app.css 仅 /workspace)。
   TodoChecklist 组件在 chat-body.jsx,样式须与其同域,否则主页上组件渲染却无样式=纯文本。
   var 一律带兜底值,防主页未定义某变量。 */
.todo-card{max-width:500px;}
.portfolio-card{max-width:520px;}
.todo-card-head{display:flex;align-items:center;justify-content:space-between;padding:10px 15px 9px;}
.todo-card-eyebrow{font-size:10.5px;font-weight:800;letter-spacing:.11em;text-transform:uppercase;color:var(--t3,var(--t3));}
.todo-card.is-live .todo-card-eyebrow{color:var(--blue,#3a6df0);}
.todo-card-count{font-family:var(--mono,ui-monospace,Menlo,Consolas,monospace);font-size:12px;color:var(--t3,var(--t3));}
.todo-card-count b{font-size:16px;font-weight:700;color:var(--t1,var(--t1));}
.todo-card-count i{font-style:normal;}
.todo-card-bar{height:3px;background:var(--line,var(--line2));}
.todo-card-bar-fill{height:3px;background:linear-gradient(90deg,var(--down,#15a35a),#4fb488);
  transition:width .45s cubic-bezier(.4,0,.2,1);border-radius:0 3px 3px 0;}
.todo-timeline{list-style:none;margin:0;padding:12px 16px 13px;}
.todo-step{position:relative;padding:0 0 15px 28px;}
.todo-step:last-child{padding-bottom:2px;}
.todo-step:not(:last-child)::before{content:"";position:absolute;left:8px;top:17px;bottom:1px;
  width:2px;background:var(--line2,#e4e7ea);border-radius:2px;}
.todo-step.completed:not(:last-child)::before{background:var(--down,#15a35a);}
.todo-node{position:absolute;left:2px;top:2px;width:15px;height:15px;border-radius:50%;
  border:2px solid var(--t3,#a8aeb5);background:var(--card,var(--card));box-sizing:border-box;}
.todo-step.completed .todo-node{border-color:var(--down,#15a35a);background:var(--down,#15a35a);}
.todo-step.completed .todo-node::after{content:"✓";position:absolute;inset:0;display:flex;
  align-items:center;justify-content:center;color:#fff;font-size:9px;font-weight:900;line-height:1;}
.todo-step.in_progress .todo-node{border-color:var(--blue,#3a6df0);animation:todoPing 1.9s ease-out infinite;}
.todo-step.in_progress .todo-node::after{content:"";position:absolute;inset:2.5px;border-radius:50%;background:var(--blue,#3a6df0);}
@keyframes todoPing{0%{box-shadow:0 0 0 0 rgba(58,109,240,.38);}70%,100%{box-shadow:0 0 0 6px rgba(58,109,240,0);}}
.todo-step-title{font-size:13px;line-height:1.45;}
.todo-step.pending .todo-step-title{color:var(--t3,var(--t3));}
.todo-step.completed .todo-step-title{color:var(--t2,var(--t2));}
.todo-step.in_progress .todo-step-title{color:var(--t1,var(--t1));font-weight:650;}
.todo-step-detail{margin-top:3px;font-family:var(--mono,ui-monospace,Menlo,Consolas,monospace);font-size:11.5px;
  color:var(--blue,#3a6df0);display:inline-flex;align-items:center;gap:5px;}
.todo-step-detail::before{content:"";width:4px;height:4px;border-radius:50%;background:var(--blue,#3a6df0);flex:0 0 auto;}
@media (prefers-reduced-motion:reduce){.todo-step.in_progress .todo-node{animation:none;}.todo-card-bar-fill{transition:none;}}

/* 组合确认卡：结构类与业务数据分离，宽/窄 chat 共用。 */
.portfolio-card-message{padding:10px 15px 13px;font-size:12.5px;line-height:1.55;}
.portfolio-current{margin:8px 12px 0;padding:8px 12px;border-radius:8px;background:var(--surface,#f5f6f8);}
.portfolio-proposed{margin:8px 12px 0;padding:10px 12px 8px;border-radius:8px;background:var(--blue-soft,#eef2fe);}
.portfolio-holding-row{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:3px 0;font-size:12px;}
.portfolio-holding-values{flex:none;text-align:right;}
.portfolio-totals{display:flex;flex-wrap:wrap;gap:8px 16px;padding:8px 15px 4px;}
.portfolio-actions{display:flex;gap:10px;padding:8px 15px 14px;}

/* Key-driven 卡片：确认卡为单页纵向结构；已保存资源仍复用下方运行组件。 */
.todo-card.key-card-promote{max-width:520px;transition:max-width .16s ease,width .16s ease;}
.todo-card.key-card-split-mode{width:720px;max-width:100%;}
.todo-card.key-card-single{width:720px;max-width:100%;}
.key-card-single-body{display:flex;flex-direction:column;gap:14px;padding:14px 15px 16px;}
.key-card-tags{display:flex;flex-wrap:wrap;gap:5px;margin-bottom:6px;}
.key-card-tags span{padding:3px 7px;border-radius:999px;background:var(--blue-soft,#eef2fe);color:var(--blue,#3a6df0);font-size:10px;font-weight:750;line-height:1.35;}
.key-card-intro h3{margin:0;color:var(--t1,#1a1d21);font-size:17px;line-height:1.4;}
.key-card-intro p{margin:6px 0 0;color:var(--t2,#878d94);font-size:12.5px;line-height:1.65;}
.key-card-references{display:flex;flex-wrap:wrap;gap:5px 8px;margin-top:8px;color:var(--t3,#a8aeb5);font-size:11px;line-height:1.5;}
.key-card-references b{color:var(--t2,#878d94);}
.key-card-references a,.key-card-references span{max-width:100%;overflow-wrap:anywhere;}
.key-card-references a{color:var(--blue,#3a6df0);text-decoration:none;}
.key-card-references a:hover{text-decoration:underline;}
.key-card-intro small{display:block;margin-top:8px;color:var(--t3,#a8aeb5);font-size:10.5px;}
.key-card-section{display:flex;flex-direction:column;gap:9px;padding-top:14px;border-top:1px solid var(--line,#eef0f2);}
.key-card-section-head{display:flex;align-items:center;justify-content:space-between;gap:12px;}
.key-card-section-head h4{margin:0;color:var(--t1,#1a1d21);font-size:12.5px;}
.key-card-section-head>span{color:var(--t3,#a8aeb5);font-size:10px;}
.key-card-definition-list{overflow:hidden;border:1px solid var(--line2,#e4e7ea);border-radius:10px;background:var(--card,#fff);}
.key-card-definition-row{display:grid;grid-template-columns:minmax(0,1fr) minmax(130px,.62fr);gap:16px;align-items:center;padding:11px 12px;border-bottom:1px solid var(--line,#eef0f2);}
.key-card-definition-row:last-child{border-bottom:0;}
.key-card-definition-row>div{display:flex;min-width:0;flex-direction:column;gap:3px;}
.key-card-definition-row>div:last-child{align-items:flex-end;text-align:right;}
.key-card-definition-row b{overflow:hidden;color:var(--t1,#1a1d21);font-size:12px;text-overflow:ellipsis;white-space:nowrap;}
.key-card-definition-row span{overflow:hidden;color:var(--t2,#5f666d);font-size:10.5px;line-height:1.45;text-overflow:ellipsis;white-space:nowrap;}
.key-card-definition-row small{color:var(--t3,#a8aeb5);font-size:9.5px;}
.key-card-single .key-signal-table,.key-card-single .key-research-list{min-width:0;width:100%;}
.key-card-single .key-signal-name b{overflow:hidden;color:var(--t1,#1a1d21);font-size:12.5px;text-overflow:ellipsis;white-space:nowrap;}
.key-card-single .key-signal-threshold{width:auto;padding:0;background:transparent;cursor:default;}
.key-card-confirm{width:100%;padding:11px 14px;border:0;border-radius:10px;background:var(--blue,#3a6df0);color:#fff;font-size:13px;font-weight:750;cursor:pointer;}
.key-card-confirm:hover:not(:disabled){filter:brightness(.96);}
.key-card-confirm:disabled{cursor:default;opacity:.6;}
.key-card-inline-error,.key-card-expired{padding:9px 11px;border-radius:8px;background:color-mix(in srgb,var(--up,#f0353b) 7%,transparent);color:var(--up,#f0353b);font-size:11.5px;}
.key-card-saved{padding:9px 11px;border-radius:8px;background:color-mix(in srgb,var(--down,#15a35a) 8%,transparent);color:var(--down,#15a35a);font-size:11.5px;font-weight:650;}
.key-card-internals-toggle{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:8px;width:100%;padding:9px 11px;border:1px solid color-mix(in srgb,var(--blue,#3a6df0) 24%,var(--line2,#e4e7ea));border-radius:9px;background:color-mix(in srgb,var(--blue,#3a6df0) 4%,var(--card,#fff));color:var(--blue,#3a6df0);font-size:11.5px;font-weight:750;text-align:left;cursor:pointer;}
.key-card-internals-toggle:hover,.key-card-internals-toggle.on{border-color:color-mix(in srgb,var(--blue,#3a6df0) 48%,var(--line2,#e4e7ea));background:color-mix(in srgb,var(--blue,#3a6df0) 8%,var(--card,#fff));}
.key-card-internals-toggle small{justify-self:start;padding:2px 6px;border-radius:999px;background:var(--blue,#3a6df0);color:#fff;font-family:var(--mono,ui-monospace,monospace);font-size:8px;font-weight:800;letter-spacing:.05em;}
.key-card-internals-toggle i{font-style:normal;font-size:15px;font-weight:500;line-height:1;}
.key-card-editor-internals{display:flex;flex-direction:column;gap:9px;margin-top:-7px;padding:15px 13px 13px;border:1px dashed color-mix(in srgb,var(--blue,#3a6df0) 28%,var(--line2,#e4e7ea));border-radius:0 0 11px 11px;background:color-mix(in srgb,var(--blue,#3a6df0) 2.5%,var(--card,#fff));}
.key-card-editor-internals .key-card-cost{min-height:0;padding:2px 0 4px;}
.key-card-tree-heading{margin-top:8px;padding-top:13px;border-top:1px solid var(--line,#eef0f2);}
.key-card-editor-internals .key-card-ledger-host{min-width:0;width:100%;}
.key-card-poster-link{align-self:flex-start;margin-top:2px;color:var(--blue,#3a6df0);font-size:11px;font-weight:700;text-decoration:none;}
.key-card-poster-link:hover{text-decoration:underline;text-underline-offset:2px;}
.key-card-pages{min-height:94px;padding:11px 15px 5px;}
.key-card-page{animation:keyCardPageIn .16s ease;}
@keyframes keyCardPageIn{from{opacity:0;transform:translateX(5px);}to{opacity:1;transform:none;}}
.key-card-details{overflow-x:auto;}
.key-runtime-tabs{display:flex;align-items:center;gap:4px;min-width:680px;margin-bottom:11px;padding:3px;border:1px solid var(--line2,#e4e7ea);border-radius:10px;background:var(--surface,#f7f8fa);}
.key-runtime-tabs button{flex:1;padding:7px 12px;border:0;border-radius:7px;background:transparent;color:var(--t3,#a8aeb5);font-size:11.5px;font-weight:650;cursor:pointer;}
.key-runtime-tabs button:hover{color:var(--t1,#1a1d21);}
.key-runtime-tabs button.on{background:var(--card,#fff);color:var(--blue,#3a6df0);box-shadow:0 1px 4px rgba(22,32,42,.08);}
.key-runtime-panel{min-width:680px;}
.key-signal-table{min-width:620px;border:1px solid var(--line2,#e4e7ea);border-radius:10px;overflow:hidden;background:var(--card,#fff);}
.key-signal-head,.key-signal-row{display:grid;grid-template-columns:minmax(190px,1.4fr) minmax(105px,.75fr) minmax(130px,.9fr) minmax(110px,.75fr);align-items:center;column-gap:14px;}
.key-signal-head{padding:8px 13px;background:var(--surface,#f7f8fa);border-bottom:1px solid var(--line,#eef0f2);font-size:10.5px;font-weight:700;color:var(--t3,#a8aeb5);}
.key-signal-row{padding:13px;min-height:58px;}
.key-signal-name{min-width:0;display:flex;flex-direction:column;gap:3px;}
.key-signal-name button{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:0;border:0;background:none;text-align:left;font:inherit;font-size:12.5px;font-weight:700;color:var(--t1,#1a1d21);cursor:pointer;}
.key-signal-name button:hover:not(:disabled){color:var(--blue,#3a6df0);text-decoration:underline;text-underline-offset:2px;}
.key-signal-name button:disabled{cursor:default;}
.key-signal-name span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:10.5px;color:var(--t3,#a8aeb5);}
.key-signal-value,.key-signal-threshold{font-size:13px;font-weight:700;color:var(--t1,#1a1d21);white-space:nowrap;}
.key-signal-threshold{width:max-content;padding:3px 6px;border:0;border-radius:6px;background:var(--surface,#f7f8fa);cursor:pointer;}
.key-signal-threshold:hover:not(:disabled){color:var(--blue,#3a6df0);background:var(--blue-soft,#eef2fe);}
.key-signal-threshold:disabled{cursor:default;}
.key-signal-value small{font-family:inherit;font-size:10.5px;font-weight:500;color:var(--t3,#a8aeb5);}
.key-signal-status{display:inline-flex;align-items:center;padding:4px 8px;border-radius:999px;background:color-mix(in srgb,currentColor 9%,transparent);font-size:11px;font-weight:700;white-space:nowrap;}
.key-research-list{display:flex;flex-direction:column;gap:9px;min-width:680px;}
.key-research-card{width:100%;padding:13px 14px;border:1px solid var(--line2,#e4e7ea);border-radius:11px;background:var(--card,#fff);color:var(--t1,#1a1d21);text-align:left;cursor:pointer;}
.key-research-card:hover{border-color:color-mix(in srgb,var(--blue,#3a6df0) 40%,var(--line2,#e4e7ea));box-shadow:0 2px 10px rgba(47,107,216,.06);}
.key-research-card:focus-visible{outline:2px solid color-mix(in srgb,var(--blue,#3a6df0) 55%,transparent);outline-offset:2px;}
.key-research-head{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;}
.key-research-head>div{min-width:0;display:flex;flex-direction:column;gap:3px;}
.key-research-head strong{font-size:13px;line-height:1.35;}
.key-research-head div>span{font-size:10.5px;line-height:1.4;color:var(--t3,#a8aeb5);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.key-research-status{flex:none;display:inline-flex;align-items:center;padding:4px 8px;border-radius:999px;background:color-mix(in srgb,currentColor 9%,transparent);font-size:11px;font-weight:700;white-space:nowrap;}
.key-research-status.running::before{content:"";width:5px;height:5px;margin-right:5px;border-radius:50%;background:currentColor;animation:keyResearchPulse 1.2s ease-in-out infinite;}
.key-research-scale{margin-top:10px;padding:10px;border:1px solid var(--line,#eef0f2);border-radius:8px;background:color-mix(in srgb,var(--blue,#3a6df0) 3%,var(--card,#fff));}
.key-research-scale-head{display:flex;align-items:center;justify-content:space-between;gap:8px;}
.key-research-scale-head small{font-size:9.5px;font-weight:700;color:var(--blue,#3a6df0);}
.key-research-scale-head span{font-size:9.5px;color:var(--t3,#a8aeb5);}
.key-research-hooks{display:flex;flex-direction:column;gap:5px;margin-top:7px;}
.key-research-hooks>div{display:grid;grid-template-columns:38px minmax(0,1fr);gap:7px;align-items:start;}
.key-research-hooks b{font-size:10px;color:var(--blue,#3a6df0);}
.key-research-hooks span{font-size:11px;line-height:1.45;color:var(--t2,#5f666d);}
.key-research-scale p{margin:8px 0 0;padding-top:7px;border-top:1px solid var(--line,#eef0f2);font-size:10px;line-height:1.45;color:var(--t3,#a8aeb5);}
.key-research-summary{margin-top:10px;padding:9px 10px;border-radius:8px;background:var(--surface,#f7f8fa);font-size:12px;line-height:1.55;color:var(--t2,#5f666d);}
.key-research-metrics{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:8px;margin-top:11px;}
.key-research-metrics>span{min-width:0;display:flex;flex-direction:column;gap:3px;}
.key-research-metrics small{font-size:9.5px;color:var(--t3,#a8aeb5);white-space:nowrap;}
.key-research-metrics b{font-size:11.5px;color:var(--t1,#1a1d21);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.key-research-actions{display:flex;align-items:center;gap:9px;margin-top:11px;padding-top:10px;border-top:1px solid var(--line,#eef0f2);}
.key-research-actions a{flex:none;padding:6px 11px;border:1px solid color-mix(in srgb,var(--blue,#3a6df0) 35%,var(--line2,#e4e7ea));border-radius:7px;background:color-mix(in srgb,var(--blue,#3a6df0) 7%,var(--card,#fff));color:var(--blue,#3a6df0);font-size:11px;font-weight:700;text-decoration:none;}
.key-research-actions a:hover{background:color-mix(in srgb,var(--blue,#3a6df0) 12%,var(--card,#fff));}
.key-research-actions button{flex:none;padding:6px 11px;border-radius:7px;background:var(--blue,#3a6df0);color:#fff;font-size:11px;font-weight:700;cursor:pointer;}
.key-research-actions button:hover:not(:disabled){filter:brightness(.96);}
.key-research-actions button:disabled{opacity:.55;cursor:default;}
.key-research-actions span{font-size:10px;color:var(--t3,#a8aeb5);}
@keyframes keyResearchPulse{0%,100%{opacity:.35}50%{opacity:1}}
.key-card-value-label{margin:13px 2px 6px;font-size:11px;font-weight:700;color:var(--t3,#a8aeb5);text-transform:uppercase;letter-spacing:.04em;}
.key-card-ledger-host{height:330px;min-width:680px;border:1px solid var(--line2,#e4e7ea);border-radius:10px;overflow:hidden;background:var(--card,#fff);}
.key-card-ledger-host>.tools-split{height:100%;}
.key-card-ledger-host .tools-list{width:220px;overflow:auto;}
.key-card-ledger-host .ledger-compact-tree .tools-li{gap:6px;min-width:max-content;padding-top:7px;padding-bottom:7px;}
.key-card-ledger-host .ledger-compact-tree .tools-li-main{flex:none;flex-direction:row;align-items:baseline;gap:6px;white-space:nowrap;}
.key-card-ledger-host .ledger-compact-tree .tools-li-label{white-space:nowrap;}
.key-card-ledger-host .ledger-compact-tree .tools-li-arg{overflow:visible;text-overflow:clip;}
.key-card-ledger-host .tools-detail-body{height:100%;overflow-y:auto;}
.key-card-ledger-host .ledger-hero{align-items:baseline;}
.key-card-ledger-host .ledger-hero-v{max-width:75%;overflow-wrap:anywhere;}
.key-research-poster-panel{overflow:hidden;border:1px solid var(--line2,#e4e7ea);border-radius:10px;background:var(--card,#fff);}
.key-research-poster-head{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:10px 12px;border-bottom:1px solid var(--line,#eef0f2);}
.key-research-poster-head>div{display:flex;min-width:0;flex-direction:column;gap:2px;}
.key-research-poster-head strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12.5px;color:var(--t1,#1a1d21);}
.key-research-poster-head span{font-size:10px;color:var(--t3,#a8aeb5);}
.key-research-poster-head a{flex:none;color:var(--blue,#3a6df0);font-size:11px;font-weight:700;text-decoration:none;}
.key-research-poster-head a:hover{text-decoration:underline;text-underline-offset:2px;}
.key-research-poster-frame{display:block;width:100%;height:520px;border:0;background:#edf1f4;}
.key-card-cost{min-height:188px;}
.key-card-cost-title{font-size:13px;font-weight:700;color:var(--t1,#1a1d21);}
.key-card-cost-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding:3px 0 11px;}
.key-card-cost-total{margin-top:4px;font-size:24px;font-weight:800;color:var(--t1,#1a1d21);letter-spacing:-.03em;}
.key-card-cost-total small{font-family:inherit;font-size:11px;font-weight:600;color:var(--t3,#a8aeb5);letter-spacing:0;}
.key-card-cost-actual{display:flex;flex-direction:column;align-items:flex-end;gap:3px;font-size:10.5px;color:var(--t3,#a8aeb5);}
.key-card-cost-actual b{font-size:13px;color:var(--t1,#1a1d21);}
.key-card-cost-list{border:1px solid var(--line2,#e4e7ea);border-radius:10px;overflow:hidden;}
.key-card-cost-row{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:9px 11px;border-bottom:1px solid var(--line,#eef0f2);}
.key-card-cost-row:last-child{border-bottom:0;}
.key-card-cost-row>div{display:flex;min-width:0;flex-direction:column;gap:2px;}
.key-card-cost-row>div:last-child{align-items:flex-end;flex-shrink:0;}
.key-card-cost-row b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:11.5px;color:var(--t1,#1a1d21);}
.key-card-cost-row span{font-size:9.5px;color:var(--t3,#a8aeb5);}
.key-card-cost-empty{padding:28px 12px;text-align:center;font-size:11px;color:var(--t3,#a8aeb5);}
.key-card-cost-note{padding:8px 2px 2px;font-size:9.5px;line-height:1.5;color:var(--t3,#a8aeb5);}
.key-card-notifications{min-height:224px;max-height:430px;overflow-y:auto;}
.key-card-notification-title{font-size:13px;font-weight:700;color:var(--t1,#1a1d21);}
.key-card-notification-sub{margin-top:4px;font-size:10.5px;line-height:1.5;color:var(--t3,#a8aeb5);}
.key-card-channel-list{display:flex;flex-direction:column;gap:7px;margin-top:12px;}
.key-card-channel{display:flex;align-items:flex-start;gap:10px;width:100%;padding:10px 11px;border:1px solid var(--line2,#e4e7ea);border-radius:10px;background:var(--card,#fff);color:var(--t1,#1a1d21);text-align:left;cursor:pointer;transition:border-color .14s ease,background .14s ease;}
.key-card-channel:hover:not(:disabled){border-color:color-mix(in srgb,var(--blue,#3a6df0) 45%,var(--line2,#e4e7ea));}
.key-card-channel.on{border-color:color-mix(in srgb,var(--blue,#3a6df0) 55%,var(--line2,#e4e7ea));background:color-mix(in srgb,var(--blue-soft,#eef2fe) 55%,var(--card,#fff));}
.key-card-channel:disabled{opacity:.52;cursor:not-allowed;}
.key-card-channel-check{display:grid;place-items:center;flex:none;width:18px;height:18px;margin-top:1px;border:1.5px solid var(--line2,#d5d9de);border-radius:5px;color:#fff;font-size:11px;font-weight:800;line-height:1;}
.key-card-channel.on .key-card-channel-check{border-color:var(--blue,#3a6df0);background:var(--blue,#3a6df0);}
.key-card-channel>span:last-child{display:flex;min-width:0;flex-direction:column;gap:3px;}
.key-card-channel b{font-size:12px;line-height:1.3;}
.key-card-channel small{font-size:10px;line-height:1.45;color:var(--t3,#a8aeb5);}
.key-card-action-agent{display:flex;flex-direction:column;gap:7px;margin-top:10px;padding-top:10px;border-top:1px solid var(--line,#eef0f2);}
.key-card-action-agent textarea{box-sizing:border-box;width:100%;min-height:72px;padding:9px 10px;resize:vertical;border:1px solid var(--line2,#e4e7ea);border-radius:9px;background:var(--card,#fff);color:var(--t1,#1a1d21);font:inherit;font-size:11px;line-height:1.5;outline:none;}
.key-card-action-agent textarea:focus{border-color:color-mix(in srgb,var(--blue,#3a6df0) 55%,var(--line2,#e4e7ea));box-shadow:0 0 0 2px color-mix(in srgb,var(--blue,#3a6df0) 10%,transparent);}
.key-card-action-status{font-size:9.5px;color:var(--t3,#a8aeb5);}
.key-card-notification-note{margin-top:9px;font-size:9.5px;line-height:1.45;color:var(--t3,#a8aeb5);}
.key-card-notification-actions{display:flex;align-items:center;gap:9px;padding:8px 15px 14px;}
.key-card-notification-actions button{flex:1;padding:10px 0;border:0;border-radius:10px;background:var(--blue,#3a6df0);color:#fff;font-size:13px;font-weight:700;cursor:pointer;}
.key-card-notification-actions button:disabled{opacity:.6;cursor:default;}
.key-card-notification-actions span{flex:none;color:var(--down,#15a35a);font-size:11px;font-weight:700;}
.key-card-pager{display:flex;align-items:center;justify-content:center;gap:10px;padding:8px 12px 11px;border-top:1px solid var(--line,#eef0f2);}
.key-card-pager>button{width:26px;height:26px;border-radius:8px;color:var(--t2,#878d94);font-size:19px;line-height:1;background:transparent;}
.key-card-pager>button:hover:not(:disabled){background:var(--surface-hover,#f4f6f8);color:var(--t1,#1a1d21);}
.key-card-pager>button:disabled{opacity:.28;cursor:default;}
.key-card-page-tabs{display:flex;align-items:center;gap:10px;}
.key-card-page-tabs button{display:flex;align-items:center;gap:4px;padding:4px 2px;color:var(--t3,#a8aeb5);font-size:10.5px;background:transparent;}
.key-card-page-tabs i{display:block;width:5px;height:5px;border-radius:999px;background:currentColor;transition:width .16s ease,background .16s ease;}
.key-card-page-tabs button.on{color:var(--blue,#3a6df0);font-weight:700;}
.key-card-page-tabs button.on i{width:14px;background:var(--blue,#3a6df0);}
@media (max-width:720px){
  .todo-card.key-card-split-mode{width:calc(100vw - 28px);max-width:100%;}
  .key-runtime-tabs,.key-runtime-panel{min-width:0;}
  .key-card-ledger-host{height:460px;}
  .key-research-poster-frame{height:460px;}
  .key-card-ledger-host .tools-list{width:auto;max-height:43%;}
  .key-research-list{min-width:0;}
  .key-research-metrics{grid-template-columns:repeat(3,minmax(0,1fr));}
}
@container chat-card (max-width:560px){
  .chat-component-card{border-radius:12px;}
  .todo-card.key-card-split-mode{width:100%;max-width:100%;}
  .todo-card.key-card-single{width:100%;max-width:100%;}
  .key-card-single-body{padding:12px 11px 14px;}
  .key-card-definition-row{grid-template-columns:minmax(0,1fr);gap:7px;}
  .key-card-definition-row>div:last-child{align-items:flex-start;text-align:left;}
  .key-card-pages{padding:10px 11px 5px;}
  .key-card-details{overflow-x:visible;}
  .key-runtime-tabs{
    min-width:0;max-width:100%;overflow-x:auto;overscroll-behavior-x:contain;
    scrollbar-width:none;
  }
  .key-runtime-tabs::-webkit-scrollbar{display:none;}
  .key-runtime-tabs button{min-width:max-content;padding:7px 9px;}
  .key-runtime-panel,.key-signal-table,.key-research-list,.key-card-ledger-host{min-width:0;width:100%;}
  .key-signal-head{display:none;}
  .key-signal-row{
    grid-template-columns:minmax(0,1fr) auto;gap:9px 12px;padding:11px;
    border-bottom:1px solid var(--line,#eef0f2);
  }
  .key-signal-row:last-child{border-bottom:0;}
  .key-signal-name{grid-column:1/-1;}
  .key-signal-value,.key-signal-threshold,.key-signal-state{
    display:flex;min-width:0;align-items:center;justify-content:space-between;gap:8px;
  }
  .key-signal-value{grid-column:1/2;}
  .key-signal-state{grid-column:2/3;}
  .key-signal-threshold{grid-column:1/-1;width:100%;box-sizing:border-box;}
  .key-signal-value::before,.key-signal-threshold::before,.key-signal-state::before{
    content:attr(data-label);font-family:var(--sans,-apple-system,BlinkMacSystemFont,"PingFang SC",sans-serif);
    font-size:9.5px;font-weight:650;color:var(--t3,#a8aeb5);
  }
  .key-research-head,.key-research-actions{flex-wrap:wrap;}
  .key-research-metrics{grid-template-columns:repeat(3,minmax(0,1fr));}
  .key-research-actions span{flex:1 1 100%;}
  .key-card-ledger-host{height:440px;}
  .key-card-ledger-host>.tools-split{flex-direction:column;}
  .key-card-ledger-host .tools-list{
    width:auto;max-height:42%;border-right:0;border-bottom:1px solid var(--line,#eef0f2);
  }
  .key-card-ledger-host .tools-detail{min-height:0;}
  .key-research-poster-frame{height:420px;}
  .portfolio-holding-row{align-items:flex-start;}
  .portfolio-holding-values{white-space:normal;}
  .portfolio-actions button:last-child{padding-left:14px!important;padding-right:14px!important;}
  .chat-inline-charts .tool-chart{height:280px;}
}
@container chat-card (max-width:380px){
  .todo-card-head{align-items:flex-start;gap:8px;padding-left:12px;padding-right:12px;}
  .todo-card-count{text-align:right;font-size:10.5px;}
  .key-card-page-tabs{gap:5px;}
  .key-card-page-tabs button{gap:3px;font-size:9.5px;}
  .key-runtime-tabs button{font-size:10.5px;}
  .key-research-metrics{grid-template-columns:repeat(2,minmax(0,1fr));}
  .portfolio-holding-row{flex-direction:column;gap:2px;}
  .portfolio-holding-values{text-align:left;}
  .portfolio-actions{flex-direction:column;}
  .portfolio-actions button{width:100%;padding:10px 0!important;}
  .chat-inline-charts .tool-chart{height:240px;}
}
@media (prefers-reduced-motion:reduce){.key-card-page{animation:none;}.key-card-page-tabs i{transition:none;}}

/* 流式实时活动 / 事实核实指示器(替代「思考中」三点);与 tob.css 同名规则一致,此处保证跨页可用 */
.tob-live-fc{display:flex;align-items:center;gap:6px;padding:5px 2px;font-size:12.5px;color:var(--t3,#8a93a0);line-height:1.4;flex-wrap:wrap;}
.tob-live-pulse{font-size:9px;animation:tobFcPulse 1.15s infinite ease-in-out;flex-shrink:0;}
@keyframes tobFcPulse{0%,100%{opacity:.35;}50%{opacity:1;}}
.tob-live-lbl{color:var(--t3,#8a93a0);font-weight:600;flex-shrink:0;}
.tob-live-claim{color:var(--t1,#1a1f26);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;animation:tobFcIn .32s ease;}
.tob-live-claim b{font-family:var(--mono,ui-monospace,monospace);font-weight:700;font-size:11px;}
.tob-live-cnt{color:var(--t3,#8a93a0);font-variant-numeric:tabular-nums;flex-shrink:0;}
@keyframes tobFcIn{from{opacity:0;transform:translateY(3px);}to{opacity:1;transform:translateY(0);}}
/* 实时指示器左侧图标:旋转 spinner(替代原 ◉ 脉冲点,避免与消息内其它圆点/头像重复) */
.tob-live-spin{width:9px;height:9px;border-radius:50%;border:1.6px solid rgba(130,140,150,.28);border-top-color:var(--blue,#3a6df0);animation:tobLiveSpin .7s linear infinite;flex-shrink:0;display:inline-block;box-sizing:border-box;}
@keyframes tobLiveSpin{to{transform:rotate(360deg);}}
.tob-live-done{color:#1e8e5a;font-weight:700;flex-shrink:0;font-size:12.5px;}
.tool-chart{height:360px;max-width:100%;border-radius:8px;margin:8px 0;background:#fff;border:1px solid #e7ebf1}
.tool-chart-loading,.tool-chart-err{display:flex;align-items:center;justify-content:center;gap:10px;color:#9aa1ad;font-size:13px}
.tool-chart-loading::before{content:"";width:12px;height:12px;border:2px solid rgba(130,140,150,.24);border-top-color:var(--blue,#3a6df0);border-radius:50%;animation:tobLiveSpin .7s linear infinite}
.tool-chart-err button{border:1px solid var(--line,#dfe3e8);border-radius:7px;background:var(--card,#fff);color:var(--blue,#3a6df0);padding:5px 10px;font:inherit;font-weight:600;cursor:pointer}
.chat-inline-charts{display:block;width:100%;margin:10px 0 14px}
