/* ========================================
 *  TBP 硅基世界聊天界面样式
 *  版本: v2.0 | 2026-06-12
 *  依赖: tbp-theme.css (设计令牌)
 *
 * 🍞 AI面包屑导航 ───────────────────────────────
 * 标签含义: @COUPLED=联动文件 @GOTCHA=陷阱 @BUGFIX=Bug修复 @MAGIC=魔数
 *          @DEPENDS=外部依赖 @ASSUME=假设 @TODO=待办 @WHY=选型理由
 *
 * 面包屑（改这里会影响谁）:
 *   @COUPLED 改样式需同步检查: public/chat.html, desktop/renderer/chat.html, public/js/chat-moments.js, public/js/workspace-panel.js
 *   📖 见: tbp-theme.css (设计令牌)
 *   @WHY 2026-07-11: P2-1 font-size:11px→0.6875rem (px→rem无障碍) + P3 按钮按下反馈+输入框聚焦光环
 *   @WHY 2026-07-11: 清理死代码 .chat-input-row/.chat-input-send/.chat-input-hint（旧版输入区遗骸，全项目0引用）
 *   @WHY 2026-07-11: P3 动效重做，挂到真元素 #tch-sendBtn :active缩放+发光 + #tch-msgInput :focus光环（!important覆盖JS内联style）
 *   @GOTCHA #tch-sendBtn/#tch-msgInput 是 JS 动态 innerHTML 创建含内联style，须用 #id 选择器 + !important 才能盖过
 *   @WHY 2026-07-11: 无障碍硬化 — 全文件硬编码色值→设计令牌(19处) + 代码块背景令牌化 + 移动TabBar颜色令牌化
 *   @WHY 2026-07-11: UI翻新阶段② — 侧栏玻璃态（surface-raised+噪点+深度阴影）+ 分割线赤金化（gold-divider）
 *          + 选中态赤金左边框(gold) + 分区标题大写字间距 + 底部退出区赤金划线 + hover改glass-bg
 *   @WHY 300行红线豁免: CSS 无 JS 式模块拆分机制，单文件级联+双入口引用同一是项目既定架构（拆分属独立重构工程，非单次改动夹带）
 *   @FEATURE 2026-07-26(聊天区紧凑化·用户拍板对齐 CodeBuddy): 消息gap16→10/列表padding24→16/气泡padding12,16→9,13/行高1.6→1.5
 *          + markdown 标题层次拉开(h1 1.5em/h2 1.3em+底部分隔线/strong 提亮/行内 code 胶囊)
 *          + .msg-row.msg-cont 连发合并头像(判定在 chat-core.js _markContIfSameSender，纯CSS相邻选择器会误伤群聊)
 *          + .duty-trigger/.duty-card-* 值守触发卡片(转换函数 chat-core.js _dutyTriggerDisplay，模型拿原文不变)
 *   @FEATURE 2026-07-26(UI视觉大优化·施工第2步·星空+消息区，定稿见 03-架构设计/UI视觉大优化-设计说明书-2026-07-26.md):
 *          ①body夜空渐变+各面板玻璃透底（tbp-starfield.js canvas 才透得出来）②AI气泡去气泡化=左2px紫金渐变细条
 *          ③用户气泡紫渐变→--tbp-fill纯色 ④msg-time改hover才显示 ⑤代码块透底+tbp-border-flow弱档流光
 *          ⑥头像渐变+微光 @ASSUME .msg-cont/.duty-card-*（同日紧凑化）未动
 * ────────────────────────────────────────────────
 * ======================================== */

/* ---- 通用按钮 ---- */
.btn {
  width:100%; padding:12px; border:none; border-radius:8px;
  font-size:14px; font-weight:600; cursor:pointer; font-family:inherit;
  transition:all .2s;
}
.btn-primary { background:linear-gradient(135deg,var(--tbp-accent),var(--tbp-accent-2)); color:#fff; }
.btn-primary:hover { opacity:.9; transform:translateY(-1px); }
.btn-primary:active { transform:translateY(0) scale(.97); box-shadow:0 0 8px rgba(102,126,234,.3); }
.btn-primary:disabled { opacity:.5; cursor:not-allowed; transform:none; }

*{margin:0;padding:0;box-sizing:border-box}
/* 🍞 2026-07-26(UI优化②): body 改夜空渐变（紫金晕深空，非纯黑）；星空 canvas=tbp-starfield.js 在 z-index:0，
   故 .app 提 z-index:1 压其上，各面板玻璃透底（--tbp-glass-*）让星空透出 */
body{font-family:var(--tbp-font-family);color:var(--tbp-text-primary);height:100vh;overflow:hidden;
  background:
    radial-gradient(ellipse 75% 50% at 12% -5%, rgba(102,126,234,0.13), transparent 62%),
    radial-gradient(ellipse 65% 45% at 92% 105%, rgba(139,92,246,0.11), transparent 62%),
    radial-gradient(ellipse 55% 40% at 55% 55%, rgba(201,169,110,0.045), transparent 68%),
    var(--tbp-bg-primary)}

/* ===== 主布局 ===== */
.app{display:flex;width:100%;height:100vh;overflow:hidden;position:relative;z-index:1}

/* ===== 工作区面板（右侧弹出） ===== */
.workspace-panel{
  width:400px;min-width:280px;max-width:60vw;flex-shrink:0;
  background:var(--tbp-glass-panel);backdrop-filter:blur(10px);  /* 🍞 2026-07-26(UI优化⑤): 实底→玻璃透底 */
  border-left:1px solid var(--tbp-separator);
  display:flex;flex-direction:column;overflow:hidden;position:relative;
}
/* 🍞 2026-07-26(UI优化⑤): 面板内自绘 SVG 图标尺寸 + 工具卡片加载环旋转 */
.workspace-panel .tbp-ic{font-size:14px}
.tc-spin .tbp-ic{animation:tbp-spin 1s linear infinite}
.ws-resize-handle{
  position:absolute;left:0;top:0;bottom:0;width:5px;cursor:col-resize;
  z-index:10;background:transparent;transition:background .15s;
}
.ws-resize-handle:hover,.ws-resize-handle.active{background:var(--tbp-accent)}
.model-resize-handle{
  position:absolute;left:0;top:0;bottom:0;width:5px;cursor:col-resize;
  z-index:10;background:transparent;transition:background .15s;
}
.model-resize-handle:hover,.model-resize-handle.active{background:var(--tbp-accent)}
.ws-header{
  display:flex;align-items:center;padding:0 8px;
  border-bottom:1px solid var(--tbp-separator);flex-shrink:0;height:36px;
}
.ws-tabs{display:flex;flex:1;gap:2px}
.ws-tab{
  background:none;border:none;color:var(--tbp-text-dim);font-size:12px;
  padding:6px 12px;cursor:pointer;border-bottom:2px solid transparent;
  transition:color .15s,border-color .15s;
}
.ws-tab:hover{color:var(--tbp-text-secondary)}
/* 🍞 2026-07-26(UI优化⑤): Tab 选中 底线+亮字 → 淡紫实底+紫字+底线微光（与全局选中语言统一） */
.ws-tab.active{
  color:var(--tbp-accent-light);border-bottom-color:var(--tbp-accent);
  background:rgba(102,126,234,.12);
  box-shadow:0 0 10px rgba(102,126,234,.08);
}
.ws-close{
  background:none;border:none;color:var(--tbp-text-dim);font-size:14px;
  cursor:pointer;padding:4px 8px;
}
.ws-close:hover{color:var(--tbp-fg-bright)}
/* 工作区三面板（浏览器/终端/桌面） */
.ws-body-panel{flex:1;overflow-y:auto;padding:8px;display:none;flex-direction:column}
.ws-body-panel.active{display:flex}
.ws-body-panel::-webkit-scrollbar{width:4px}
.ws-body-panel::-webkit-scrollbar-thumb{background:var(--tbp-border);border-radius:2px}
.ws-placeholder{color:var(--tbp-text-dim);font-size:13px;text-align:center;padding:48px 16px}
/* ===== AI客服监听记录 ===== */
.ws-listen-log{display:flex;flex-direction:column;gap:6px}
.ws-listen-item{display:flex;gap:8px;align-items:baseline;background:var(--tbp-bg-elevated,rgba(255,255,255,.04));border:1px solid var(--tbp-border,rgba(255,255,255,.08));border-radius:8px;padding:8px 10px;font-size:13px;line-height:1.4}
.ws-listen-time{color:var(--tbp-text-dim);font-variant-numeric:tabular-nums;flex:0 0 auto;font-size:12px}
.ws-listen-text{color:var(--tbp-text);flex:1;min-width:0;word-break:break-word}
/* ===== 🍞 RPA 录制 ===== */
.ws-rpa-btn{
  background:rgba(239,68,68,.12);color:#f87171;border:1px solid rgba(239,68,68,.4);
  font-size:12px;padding:4px 10px;border-radius:6px;cursor:pointer;margin-left:8px;flex:0 0 auto;
}
.ws-rpa-btn:hover{background:rgba(239,68,68,.22)}
.ws-rpa-btn.recording{background:#ef4444;color:#fff;animation:rpaPulse 1s infinite}
@keyframes rpaPulse{0%,100%{opacity:1}50%{opacity:.55}}
/* 标题栏 RPA 按钮（录制/录制管理/更新）：位于 .tbp-rpa-area 内（品牌右侧、窗口按钮左侧），需 no-drag 才能点击 */
.tbp-rpa-area{ flex:1; display:flex; align-items:center; justify-content:flex-end; gap:4px; -webkit-app-region:no-drag; padding:0 8px; overflow:hidden; white-space:nowrap }
.tbp-rpa-btn, .tbp-rpa-mgr, .tbp-rpa-upd{ -webkit-app-region:no-drag; margin-left:8px;font-size:12px;padding:4px 10px;border-radius:6px;cursor:pointer;flex:0 0 auto }
.tbp-rpa-mgr, .tbp-rpa-upd{ background:rgba(102,126,234,.12);color:#a5b4fc;border:1px solid rgba(102,126,234,.4) }
.tbp-rpa-upd:hover{ background:rgba(102,126,234,.25) }
/* 🍞 2026-08-01(更新按钮·用户拍板): 发现新版时红点提示 */
.tbp-rpa-upd.has-new{ background:rgba(239,68,68,.16);color:#f87171;border:1px solid rgba(239,68,68,.55);animation:rpaPulse 2s infinite }
.tbp-rpa-mgr:hover{ background:rgba(102,126,234,.22) }
/* 命名/通用模态浮框 */
.tbp-modal-overlay{position:fixed;inset:0;background:rgba(0,0,0,.55);display:flex;align-items:center;justify-content:center;z-index:99999}
.tbp-modal{background:#1a1d27;border:1px solid #2d3143;border-radius:12px;padding:18px 20px;width:320px;max-width:90vw;box-shadow:0 12px 40px rgba(0,0,0,.5)}
.tbp-modal-title{font-size:15px;font-weight:600;color:#e5e7eb;margin-bottom:4px}
.tbp-modal-sub{font-size:12px;color:#6b7280;margin-bottom:12px}
.tbp-modal-input{width:100%;box-sizing:border-box;background:#0d1117;border:1px solid #2d3143;border-radius:8px;color:#e5e7eb;padding:8px 10px;font-size:13px;outline:none}
.tbp-modal-input:focus{border-color:#667eea}
.tbp-modal-btns{display:flex;justify-content:flex-end;gap:8px;margin-top:14px}
.tbp-modal-btn{padding:6px 14px;border-radius:8px;font-size:13px;cursor:pointer;border:1px solid transparent}
.tbp-modal-btn.ghost{background:transparent;color:#9ca3af;border-color:#2d3143}
.tbp-modal-btn.ghost:hover{background:rgba(255,255,255,.06)}
.tbp-modal-btn.primary{background:#667eea;color:#fff}
.tbp-modal-btn.primary:hover{background:#5566d6}
/* RPA 录制管理浮框 */
.rpa-mgr-panel{background:#1a1d27;border:1px solid #2d3143;border-radius:12px;width:420px;max-width:92vw;max-height:76vh;display:flex;flex-direction:column;box-shadow:0 12px 40px rgba(0,0,0,.5)}
.rpa-mgr-head{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;border-bottom:1px solid #2d3143;font-size:15px;font-weight:600;color:#e5e7eb}
.rpa-mgr-close{background:transparent;border:none;color:#9ca3af;font-size:20px;line-height:1;cursor:pointer;width:28px;height:28px;border-radius:6px}
.rpa-mgr-close:hover{background:rgba(255,255,255,.08);color:#e5e7eb}
.rpa-mgr-list{overflow-y:auto;padding:10px 12px;display:flex;flex-direction:column;gap:8px}
.rpa-mgr-item{display:flex;align-items:center;justify-content:space-between;gap:10px;background:#0d1117;border:1px solid #2d3143;border-radius:8px;padding:10px 12px}
.rpa-mgr-info{min-width:0;flex:1}
.rpa-mgr-name{font-size:13px;color:#e5e7eb;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rpa-mgr-meta{font-size:11px;color:#6b7280;margin-top:2px}
.rpa-mgr-ops{display:flex;gap:6px;flex:0 0 auto}
.rpa-mgr-op{background:rgba(255,255,255,.06);border:1px solid #2d3143;color:#c9d1d9;font-size:12px;padding:4px 10px;border-radius:6px;cursor:pointer}
.rpa-mgr-op:hover{background:rgba(255,255,255,.12)}
.rpa-mgr-op.primary{background:rgba(102,126,234,.18);border-color:rgba(102,126,234,.5);color:#a5b4fc}
.rpa-mgr-op.danger{background:rgba(239,68,68,.14);border-color:rgba(239,68,68,.45);color:#f87171}
.ws-rpa-section{margin-top:12px;border-top:1px solid var(--tbp-separator);padding-top:10px}
.ws-rpa-title{font-size:12px;color:var(--tbp-text-dim);margin-bottom:8px}
.ws-rpa-list{display:flex;flex-direction:column;gap:6px}
.ws-rpa-item{display:flex;align-items:center;justify-content:space-between;gap:8px;background:var(--tbp-bg-elevated,rgba(255,255,255,.04));border:1px solid var(--tbp-border,rgba(255,255,255,.08));border-radius:8px;padding:6px 10px;font-size:13px}
.ws-rpa-name{color:var(--tbp-text);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ws-rpa-run{background:var(--tbp-accent,#4f8cff);color:#fff;border:none;border-radius:6px;padding:4px 12px;font-size:12px;cursor:pointer;flex:0 0 auto}
.ws-rpa-run:hover{opacity:.85}

/* 🍞 AI客服自动值守区块（监听 Tab 顶部） */
.ws-duty-section{padding:10px 12px;border-bottom:1px solid var(--tbp-border,rgba(255,255,255,.08));background:rgba(239,68,68,.06)}
.ws-duty-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}
.ws-duty-title{font-weight:600;font-size:13px;color:#ff6b6b}
.ws-duty-actions{display:flex;align-items:center;gap:8px}
.ws-duty-clear{padding:4px 12px;border-radius:14px;border:1px solid #9aa0a6;background:transparent;color:#9aa0a6;cursor:pointer;font-size:12px}
.ws-duty-clear:hover{background:rgba(154,160,166,.15)}
.ws-duty-hint2{color:#9aa0a6;font-size:11px;margin-bottom:8px;line-height:1.5}
/* 🍞 2026-07-23: 值守「回复打字」开关（打字机/真键盘） */

.ws-duty-steps{display:flex;flex-direction:column;gap:6px}
.ws-step{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:8px;background:rgba(255,255,255,.03);cursor:pointer;border:1px solid transparent}
/* 🍞 2026-07-26(引擎播报移面板): 值守工作流当前步光条——背景亮条从左到右循环扫（桥 workspace-panel.js __tbpDutyStepHighlight） */
.ws-step.ws-step-running{border-color:rgba(96,165,250,.55);position:relative;overflow:hidden}
.ws-step.ws-step-running::before{content:'';position:absolute;inset:0;background:linear-gradient(90deg,transparent 0%,rgba(96,165,250,.22) 50%,transparent 100%);transform:translateX(-100%);animation:wsStepSweep 1.5s linear infinite;pointer-events:none}
@keyframes wsStepSweep{to{transform:translateX(100%)}}
.ws-step:hover{border-color:rgba(255,255,255,.1)}
.ws-step-idx{width:18px;height:18px;flex:0 0 auto;border-radius:50%;background:rgba(255,255,255,.1);color:#c9d1d9;font-size:11px;display:flex;align-items:center;justify-content:center}
.ws-step-badge{font-size:11px;padding:2px 8px;border-radius:10px;flex:0 0 auto}
.ws-step-trigger{background:rgba(102,126,234,.18);color:#a5b4fc}
.ws-step-tool{background:rgba(16,185,129,.16);color:#6ee7a8}
.ws-step-llm{background:rgba(234,179,8,.16);color:#fde047}
.ws-step-rpa{background:rgba(239,68,68,.16);color:#fca5a5}
.ws-step-name{flex:1;min-width:0;color:#e5e7eb;font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ws-step-ops{display:flex;gap:2px;flex:0 0 auto}
.ws-step-ops button{background:transparent;border:none;color:#9ca3af;cursor:pointer;font-size:12px;padding:2px 5px;border-radius:5px}
.ws-step-ops button:hover{background:rgba(255,255,255,.1);color:#e5e7eb}
.ws-step-editor{background:rgba(0,0,0,.25);border:1px solid rgba(255,255,255,.08);border-radius:8px;padding:10px;margin-top:-2px}
.ws-step-types{display:flex;gap:6px;margin-bottom:8px}
.ws-step-type{background:rgba(255,255,255,.05);border:1px solid #2d3143;color:#c9d1d9;font-size:12px;padding:4px 10px;border-radius:8px;cursor:pointer}
.ws-step-type.active{background:#667eea;color:#fff;border-color:#667eea}
.ws-step-config label{display:block;font-size:11px;color:#9ca3af;margin:6px 0 4px}
.ws-step-action,.ws-step-script,.ws-step-prompt{width:100%;box-sizing:border-box;background:#0d1117;border:1px solid #2d3143;border-radius:8px;color:#e5e7eb;padding:7px 9px;font-size:12px;outline:none;font-family:inherit}
.ws-step-prompt{resize:vertical;min-height:58px}
.ws-step-action:focus,.ws-step-script:focus,.ws-step-prompt:focus{border-color:#667eea}
/* 🍞 2026-07-30(触发器白框根治·用户实锤"丑陋大白框"): 步骤编辑卡内数字/时间/下拉控件收编深色——此前只有 action/script/prompt 三件套有深色，
   ws-trig-* 全家（本轮步数/轮数/秒数/时刻/定时形式）裸奔浏览器默认白底；color-scheme:dark 让日历/时钟图标与下拉弹层同步深色（禁删） */
.ws-step-editor input[type="number"],.ws-step-editor input[type="time"],.ws-step-editor input[type="datetime-local"],.ws-step-editor input[type="text"],.ws-step-editor select{background:#0d1117;border:1px solid #2d3143;border-radius:8px;color:#e5e7eb;padding:5px 8px;font-size:12px;outline:none;font-family:inherit;color-scheme:dark}
.ws-step-editor input[type="number"]:focus,.ws-step-editor input[type="time"]:focus,.ws-step-editor input[type="datetime-local"]:focus,.ws-step-editor input[type="text"]:focus,.ws-step-editor select:focus{border-color:#667eea}
.ws-step-tip{font-size:12px;color:#9ca3af;line-height:1.5}
.ws-duty-add{display:flex;align-items:center;gap:8px;margin-top:10px}
.ws-duty-add-btn{padding:4px 12px;border-radius:14px;border:1px dashed #667eea;background:transparent;color:#a5b4fc;cursor:pointer;font-size:12px}
.ws-duty-add-btn:hover{background:rgba(102,126,234,.12)}
.ws-duty-try{padding:4px 12px;border-radius:14px;border:1px solid #3b82f6;background:transparent;color:#3b82f6;cursor:pointer;font-size:12px}
.ws-duty-try:hover{background:rgba(59,130,246,.12)}
/* AI客服「启动」滑块（参照 ollama 启停滑块） */
.ws-watch-switch{position:relative;display:inline-block;width:38px;height:20px;background:rgba(255,255,255,.15);border-radius:11px;cursor:pointer;transition:background .2s;flex:0 0 auto}
.ws-watch-switch .ws-watch-knob{position:absolute;top:2px;left:2px;width:16px;height:16px;border-radius:50%;background:#fff;transition:left .2s}
.ws-watch-switch.on{background:#22c55e}
.ws-watch-switch.on .ws-watch-knob{left:20px}
.ws-watch-switch.disabled{background:#6b7686;cursor:not-allowed} /* 🍞 2026-07-23 评论员：未配置工具，滑块置灰占位 */
.ws-watch-label{font-size:12px;color:#9aa0a6;margin-right:4px}
/* 线索搜集列表 */
.ws-clues-section{padding:12px}
.ws-clues-list{display:flex;flex-direction:column;gap:10px}
/* 🍞 2026-07-23 线索本地化工具条（目录显示 + 选择/清理按钮） */
.ws-clues-toolbar{display:flex;flex-direction:column;gap:8px;margin-bottom:12px;padding:10px;background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.08);border-radius:8px}
.ws-clue-dir{font-size:12px;color:#9aa4b2;word-break:break-all}
.ws-clue-dir-val{color:#cdd6e3}
.ws-clues-actions{display:flex;gap:8px}
.ws-clue-btn{font-size:12px;padding:6px 10px;border:1px solid rgba(255,255,255,.15);background:rgba(255,255,255,.06);color:#e6ebf2;border-radius:6px;cursor:pointer}
.ws-clue-btn:hover{background:rgba(255,255,255,.12)}
.ws-clue-btn-danger{border-color:rgba(255,90,90,.4);color:#ff9a9a}
.ws-clue-btn-danger:hover{background:rgba(255,90,90,.15)}
.ws-clue-item{background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.08);border-radius:10px;padding:10px 12px}
.ws-clue-cat{display:inline-block;font-size:11px;font-weight:600;color:#fde047;background:rgba(234,179,8,.12);padding:2px 8px;border-radius:10px;margin-bottom:6px}
/* 🍞 2026-07-23: 线索客户名（跟在类别徽标同行） */
.ws-clue-contact{font-size:11px;color:#93c5fd;margin-left:8px}
.ws-clue-content{font-size:13px;color:#e5e7eb;line-height:1.5;white-space:pre-wrap;word-break:break-word}
.ws-clue-time{font-size:11px;color:#6b7280;margin-top:6px}
/* 浏览器地址栏 */
.ws-url-bar{
  display:flex;align-items:center;gap:4px;padding:4px 6px;
  border-bottom:1px solid var(--tbp-separator);flex-shrink:0;
}
.ws-url-bar button{
  background:var(--tbp-bg-input-alt);border:none;color:var(--tbp-fg-subdued);font-size:13px;
  padding:4px 8px;border-radius:4px;cursor:pointer;white-space:nowrap;
}
.ws-url-bar button:hover{background:var(--tbp-border-strong);color:var(--tbp-fg-bright)}
.ws-url-bar button:disabled{opacity:.3;cursor:default}
.ws-url-bar input{
  flex:1;background:var(--tbp-bg-input-alt);border:1px solid var(--tbp-border-input);border-radius:4px;
  color:var(--tbp-fg-bright);font-size:12px;padding:4px 8px;outline:none;font-family:inherit;
}
.ws-url-bar input:focus{border-color:var(--tbp-accent)}
/* 短暂浮窗提示 */
.ws-toast{
  position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);
  background:rgba(0,0,0,.82);color:var(--tbp-fg-bright);font-size:13px;
  padding:10px 20px;border-radius:6px;z-index:var(--tbp-z-max);
  pointer-events:none;opacity:0;transition:opacity .25s;
}
.ws-toast.ws-toast-in{opacity:1}
.ws-step{margin-bottom:8px}
.ws-step-label{font-size:0.6875rem;color:var(--tbp-fg-subdued);margin-bottom:4px}
.ws-thumb{
  width:100%;border-radius:6px;border:1px solid var(--tbp-border-strong);
  cursor:zoom-in;max-height:200px;object-fit:scale-down;background:#000;
}
.ws-thumb.expanded{max-height:none;cursor:zoom-out}

/* 终端面板 - 等宽流式 */
.ws-term-lines{
  flex:1;font-family:'Cascadia Code','Fira Code','Consolas','Courier New',monospace;
  font-size:12px;color:var(--tbp-text-secondary);line-height:1.55;
}
.ws-term-line{padding:2px 0;border-bottom:1px solid rgba(255,255,255,0.025)}
.ws-term-line .term-prompt{color:#4ade80;margin-right:6px}
.ws-term-line .term-cmd{color:#93c5fd}
.ws-term-line .term-info{color:var(--tbp-text-dim);padding-left:16px}
.ws-term-line .term-ok{color:#4ade80;padding-left:16px}
.ws-term-line .term-err{color:#ef4444;padding-left:16px}

/* 小屏隐藏工作区面板 */
@media (max-width:768px){
  .workspace-panel{display:none!important}
}

/* ===== 左侧导航栏（响应式） ===== */
.sidebar{
  width:var(--tbp-sidebar-w);min-width:0;flex-shrink:0;
  background:var(--tbp-glass-panel);backdrop-filter:blur(10px);  /* 🍞 2026-07-26(UI优化②): 实底→玻璃透底透星空 */
  border-right:1px solid var(--tbp-glass-border);
  display:flex;flex-direction:column;
  overflow-y:auto;overflow-x:hidden;
  transition:width .25s ease;
  position: relative;
  box-shadow:var(--tbp-depth-2);
  z-index:1;
}
/* 噪点纹理 — 覆盖在侧栏背景上增加微质感 */
.sidebar::before{
  content:'';position:absolute;inset:0;z-index:0;
  pointer-events:none;opacity:.02;
  background-image:var(--tbp-noise);
}
.sidebar::-webkit-scrollbar{width:0}

/* 侧边栏外层包裹 */
.sidebar-wrapper {
  flex-shrink: 0; position: relative; display: flex;
}

/* 收起/展开按钮（浮在侧边栏顶部右边缘外侧） */
.sidebar-collapse-btn {
  position: absolute; top: 12px; right: -10px; transform: none; z-index: 20;
  width: 22px; height: 44px;
  background: var(--tbp-bg-input-alt); border: 1px solid var(--tbp-border);
  border-radius: 0 5px 5px 0; color: var(--tbp-text-dim); font-size: 0.6875rem;
  cursor: pointer; display: flex; align-items: center; justify-content: center;
  transition: all .2s; padding: 0;
}
.sidebar-collapse-btn:hover { border-color: var(--tbp-accent,var(--tbp-accent)); color: var(--tbp-accent-light); background: var(--tbp-separator); }

/* 收起状态 */
.sidebar.sidebar-collapsed {
  width: 48px !important;
  overflow: visible;
}
.sidebar.sidebar-collapsed .sidebar-user-meta,
.sidebar.sidebar-collapsed .sidebar-user-avatar { display: none; }
.sidebar.sidebar-collapsed .sidebar-user {
  flex-direction: column;
  padding: 6px 2px; gap: 3px;
  align-items: center;
}
/* 收起态操作按钮（朋友圈/已购/主页）：竖向图标列 */
.sidebar.sidebar-collapsed .sidebar-user-actions {
  display: flex !important;
  flex-direction: column;
  gap: 3px; margin-top: 2px;
  width: 100%;
}
.sidebar.sidebar-collapsed .sidebar-action-btn {
  font-size: 0; padding: 4px; border: none;
  border-radius: 4px; flex: none; width: 100%;
  min-height: 28px; display: flex;
  align-items: center; justify-content: center;
  background: transparent; color: var(--tbp-fg-subdued);
}
.sidebar.sidebar-collapsed .sidebar-action-btn:hover {
  background: var(--tbp-bg-hover); color: var(--tbp-fg-bright);
}
.sidebar.sidebar-collapsed #btnMoments::after { content: "🌐"; font-size: 14px; }
.sidebar.sidebar-collapsed #btnOrders::after { content: "🛍"; font-size: 14px; }
.sidebar.sidebar-collapsed #btnHome::after { content: "🏠"; font-size: 14px; }
.sidebar.sidebar-collapsed .sidebar-collapse-btn {
  transform: rotate(180deg);
}

/* 收起态自定义滚动条 */
.sidebar.sidebar-collapsed::-webkit-scrollbar { width: 0; }

/* 收起态：各条目显示图标代替文字 */
.sidebar.sidebar-collapsed .sidebar-user::after { content: "👤"; }
.sidebar.sidebar-collapsed #titleDirector::after { content: "🏢"; }
.sidebar.sidebar-collapsed #titleTasks::after { content: "📋"; }
.sidebar.sidebar-collapsed #titleConvs::after { content: "💬"; }
/* 🍞 2026-07-29(入口统一): titleAgents 分区已废除，折叠态图标同步退役 */
.sidebar.sidebar-collapsed .task-item::after { content: "📋"; }
.sidebar.sidebar-collapsed .conv-item::after { content: "💬"; }
.sidebar.sidebar-collapsed .agent-item::after { content: "🤖"; }
.sidebar.sidebar-collapsed .sidebar-footer .sidebar-logout-btn::after { content: "⏻"; }
.sidebar.sidebar-collapsed .sidebar-user::after,
.sidebar.sidebar-collapsed .section-title::after,
.sidebar.sidebar-collapsed .task-item::after,
.sidebar.sidebar-collapsed .conv-item::after,
.sidebar.sidebar-collapsed .agent-item::after,
.sidebar.sidebar-collapsed .sidebar-footer .sidebar-logout-btn::after {
  font-size: 14px; color: var(--tbp-fg-subdued); line-height: 1;
}
/* 收起态：隐藏所有原始文字内容 */
.sidebar.sidebar-collapsed .section-title {
  padding: 6px 4px; justify-content: center;
  font-size: 0; gap: 0;
}
.sidebar.sidebar-collapsed .section-title .arrow { display: none; }
.sidebar.sidebar-collapsed .section-content { display: block !important; }

.sidebar.sidebar-collapsed .task-item,
.sidebar.sidebar-collapsed .conv-item,
.sidebar.sidebar-collapsed .agent-item,
.sidebar.sidebar-collapsed .sidebar-link {
  padding: 6px 4px; justify-content: center; font-size: 0;
}
.sidebar.sidebar-collapsed .task-item > *,
.sidebar.sidebar-collapsed .conv-item > *,
.sidebar.sidebar-collapsed .agent-item > * { display: none; }
/* 收起态：所有条目显示手型 */
.sidebar.sidebar-collapsed .sidebar-user,
.sidebar.sidebar-collapsed .section-title,
.sidebar.sidebar-collapsed .task-item,
.sidebar.sidebar-collapsed .conv-item,
.sidebar.sidebar-collapsed .agent-item { cursor: pointer; }

/* 收起态退出按钮 */
.sidebar.sidebar-collapsed .sidebar-footer .sidebar-logout-btn {
  font-size: 0; text-align: center; padding: 6px 4px;
  border-color: transparent;
}

/* 收起态-即时悬浮 tooltip */
.sidebar-tooltip {
  position: fixed; z-index: var(--tbp-z-max); pointer-events: none;
  background: rgba(15, 15, 20, 0.95); border: 1px solid var(--tbp-border-strong);
  border-radius: 6px; padding: 6px 12px;
  color: var(--tbp-fg-bright); font-size: 12px; font-family: inherit;
  white-space: nowrap; opacity: 0; transition: opacity 0.1s;
}
.sidebar-tooltip.visible { opacity: 1; }

/* 用户信息区 */
.sidebar-user{
  display:flex;align-items:center;gap:10px;
  padding:16px 14px;border-bottom:1px solid var(--tbp-gold-divider);
}
/* 🍞 2026-07-26(UI优化③): 侧栏头像 渐变底+流光边框包裹+微光（定稿第2/4件） */
.sidebar-user-avatar{
  width:40px;height:40px;border-radius:50%;
  border:1.5px solid transparent;
  background:
    linear-gradient(135deg,var(--tbp-accent),var(--tbp-accent-2)) padding-box,
    linear-gradient(120deg,#a5b4fc,#e4c87a,#8b5cf6,#a5b4fc) border-box;
  background-size:100% 100%,300% 100%;
  animation:tbp-border-flow 7s linear infinite;
  box-shadow:0 0 10px rgba(102,126,234,.2);
  display:flex;align-items:center;justify-content:center;
  font-size:16px;font-weight:700;color:#fff;
  cursor:pointer;flex-shrink:0;overflow:hidden;
  transition:opacity .2s;
}
.sidebar-user-avatar:hover{opacity:.85}
.sidebar-user-avatar img{width:100%;height:100%;object-fit:cover}
.sidebar-user-meta{flex:1;min-width:0}
.sidebar-user-name{font-size:13px;font-weight:600;color:var(--tbp-text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sidebar-user-expiry{font-size:0.6875rem;color:var(--tbp-text-dim);margin-top:2px}
/* 🍞 2026-07-26(UI优化③): 会员到期 绿字 → 金 pill 徽章（定稿第4件：金=价值/会员） */
.sidebar-user-expiry.member{
  color:var(--tbp-gold-light);display:inline-block;padding:1px 8px;border-radius:999px;
  background:rgba(201,169,110,.14);border:1px solid rgba(201,169,110,.38);
  box-shadow:var(--tbp-glow-gold-soft);
}
.sidebar-user-expiry.trial{color:var(--tbp-warning)}
.sidebar-user-expiry.expired{color:var(--tbp-danger)}
.sidebar-user-actions{display:flex;gap:8px;margin-top:8px;flex-shrink:0}
.sidebar-action-btn{
  flex:1;padding:6px 0;border-radius:8px;
  border:1px solid var(--tbp-border);
  background:transparent;color:var(--tbp-text-secondary);
  font-size:12px;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:4px;
  transition:all .15s;white-space:nowrap;
}
.sidebar-action-btn:hover{background:var(--tbp-bg-hover);color:var(--tbp-text-primary);border-color:var(--tbp-accent)}
/* 图标精简按钮（回到首页） */
.sidebar-action-btn.sba-icon{flex:0 0 auto;width:36px;padding:6px 0;font-size:14px}
/* 🍞 2026-07-26(v5卡片统一·B分色): 渐变图标方块（TBP_ICONS.box 输出，背景/光晕由内联 style 给） */
.tbp-icobox{display:inline-flex;align-items:center;justify-content:center;color:#fff;flex:none;font-size:18px}
.tbp-icobox .tbp-ic{font-size:1em}
/* 🍞 2026-07-26(v5卡片统一): 状态色点（替代 🟢🗄⚪ emoji） */
.tbp-dot{width:7px;height:7px;border-radius:50%;display:inline-block;flex:none}
/* 🍞 2026-07-26(UI优化③): 自绘 SVG 图标在侧栏各容器的对齐尺寸 */
.sidebar-action-btn .tbp-ic{font-size:13px;flex-shrink:0}
.section-title .tbp-ic{font-size:14px;flex-shrink:0}
.sidebar-logout-btn .tbp-ic{font-size:13px}
.chat-header-btn,.ch-exit-btn{display:inline-flex;align-items:center;gap:5px}
.chat-header-btn .tbp-ic,.ch-exit-btn .tbp-ic{font-size:13px;flex-shrink:0}

/* 快捷链接 */
.sidebar-link{
  display:flex;align-items:center;gap:10px;
  padding:10px 14px;font-size:13px;color:var(--tbp-text-tertiary);
  cursor:pointer;border-bottom:1px solid var(--tbp-gold-divider);
  transition:all .15s;
}
.sidebar-link:hover{background:var(--tbp-glass-bg);color:var(--tbp-text-primary)}
.sidebar-link-icon{font-size:16px;width:20px;text-align:center}

/* 功能分区 */
.sidebar-section{border-bottom:1px solid var(--tbp-gold-divider)}

/* 区块标题 */
.section-title{
  padding:10px 14px;font-size:13px;font-weight:600;
  color:var(--tbp-text-tertiary);cursor:pointer;
  display:flex;align-items:center;gap:6px;
  transition:all var(--tbp-transition-fast);user-select:none;
  text-transform:uppercase;letter-spacing:.05em;
}
.section-title:hover{background:var(--tbp-glass-bg);color:var(--tbp-text-primary)}
.section-title .arrow{
  font-size:8px;transition:transform .2s;flex-shrink:0;width:12px;
}
.section-title.collapsed .arrow{transform:rotate(-90deg)}

/* 区块内容 */
.section-content{padding:2px 0}
.section-content.collapsed{display:none}
.section-empty{
  text-align:center;color:var(--tbp-text-muted);
  padding:16px;font-size:0.6875rem;
}

/* OPC 员工分类 导航项（2026-07-17） —— 外观对齐侧栏对话项 */
.opc-agent-item{
  display:flex;align-items:center;gap:8px;
  padding:8px 14px;font-size:13px;color:var(--tbp-text-tertiary);
  cursor:pointer;transition:all .15s;
  border-left:2px solid transparent;user-select:none;
}
.opc-agent-item:hover{background:var(--tbp-glass-bg);color:var(--tbp-text-primary)}
/* 🍞 2026-07-26(UI优化③): 员工选中项同款实底+扫光（与 .conv-item.active 同款语言） */
.opc-agent-item.active{
  color:var(--tbp-text-primary);
  background:linear-gradient(90deg,rgba(102,126,234,.32),rgba(139,92,246,.14));
  border-left-color:var(--tbp-accent);
  box-shadow:0 0 14px rgba(102,126,234,.18),inset 0 0 12px rgba(102,126,234,.08);
  position:relative;overflow:hidden;
}
.opc-agent-item.active::after{
  content:'';position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(100deg,transparent 25%,rgba(136,153,255,.16) 50%,transparent 75%);
  transform:translateX(-110%);animation:tbp-nav-flow 3.6s ease-in-out infinite;
}
/* 🍞 2026-07-26(UI优化③): 对话/任务选中项 同款实底+扫光（此前 .conv-item.active 竟无定义=选中无视觉；
   标记方 chat-conversations.js L282 / local-model-core.js L211；agent-item 结构未确认故未纳入） */
.conv-item.active,.task-item.active{
  background:linear-gradient(90deg,rgba(102,126,234,.32),rgba(139,92,246,.14));
  border-left-color:var(--tbp-accent);
  color:var(--tbp-text-primary);
  box-shadow:0 0 14px rgba(102,126,234,.18),inset 0 0 12px rgba(102,126,234,.08);
  position:relative;overflow:hidden;
}
.conv-item.active::after,.task-item.active::after{
  content:'';position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(100deg,transparent 25%,rgba(136,153,255,.16) 50%,transparent 75%);
  transform:translateX(-110%);animation:tbp-nav-flow 3.6s ease-in-out infinite;
}
.opc-agent-icon{font-size:15px;width:20px;text-align:center;flex-shrink:0}
.opc-agent-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* 🍞 2026-08-02(侧栏转圈·用户拍板"CodeBuddy顶部tab有转圈"): 对话/任务/OPC员工执行中转圈指示——
   chat-core.js isConversationStreaming(_running真相源) + 三处渲染函数 running 类消费 */
.conv-running-dot,.task-running-dot,.opc-running-dot{
  display:inline-block;width:10px;height:10px;margin-left:2px;flex-shrink:0;
  border:2px solid rgba(102,126,234,.22);border-top-color:var(--tbp-accent,#667eea);
  border-radius:50%;animation:convSpin .8s linear infinite;
}
@keyframes convSpin{to{transform:rotate(360deg)}}

/* 🍞 2026-07-28(视频工厂分组): 组头+子项缩进（chat-opc.js renderOpcSection 消费） */
.opc-vf-head{
  padding:8px 14px 4px;font-size:12px;font-weight:600;letter-spacing:.5px;
  color:var(--tbp-text-secondary,#d1d5db);display:flex;align-items:center;gap:6px;
  cursor:pointer;user-select:none;
}
.opc-vf-head:hover{color:var(--tbp-text-primary)}
/* 🍞 2026-07-28(视频工厂折叠): 箭头与 bindCollapsible 区同款旋转；.vf-collapsed 挂 #opcAgentList 隐藏子项 */
.opc-vf-arrow{font-size:10px;transition:transform .18s ease;display:inline-block}
.opc-vf-arrow.off{transform:rotate(-90deg)}
#opcAgentList.vf-collapsed .opc-agent-item.opc-vf-kid{display:none}
.opc-agent-item.opc-vf-kid{padding-left:26px;position:relative}
.opc-agent-item.opc-vf-kid::before{
  content:'';position:absolute;left:14px;top:0;bottom:0;width:1px;
  background:linear-gradient(180deg,rgba(102,126,234,.35),rgba(201,169,110,.25));
}

/* 底部退出 */
.sidebar-footer{padding:12px;margin-top:auto;border-top:1px solid var(--tbp-gold-divider)}
.sidebar-logout-btn{
  width:100%;padding:8px;border-radius:8px;
  border:1px solid var(--tbp-border);background:transparent;
  color:var(--tbp-danger);font-size:12px;cursor:pointer;
  transition:all .15s;
}
.sidebar-logout-btn:hover{background:var(--tbp-danger-bg);border-color:var(--tbp-danger);box-shadow:var(--tbp-depth-1)}

/* ===== 右侧对话区 ===== */
.chat-main{
  flex:1;display:flex;flex-direction:column;min-width:0;
  background:transparent;position:relative;  /* 🍞 2026-07-26(UI优化②): 实底→透明透星空 */
}

/* 空状态 */
.chat-empty-state{
  flex:1;display:flex;flex-direction:column;
  align-items:center;justify-content:center;gap:16px;
}
.chat-empty-icon{font-size:56px}
.chat-empty-state h3{font-size:18px;color:var(--tbp-text-primary)}
.chat-empty-state p{font-size:13px;color:var(--tbp-text-tertiary)}
.chat-empty-actions{display:flex;gap:12px;margin-top:8px}
.chat-empty-actions .btn-primary{
  background:linear-gradient(135deg,var(--tbp-accent),var(--tbp-accent-2));
  color:#fff;border:none;padding:10px 28px;border-radius:8px;
  font-size:14px;cursor:pointer;transition:opacity .2s;
}
.chat-empty-actions .btn-primary:hover{opacity:.9}
.chat-empty-actions .btn-secondary{
  background:transparent;color:var(--tbp-text-tertiary);
  border:1px solid var(--tbp-border);padding:10px 28px;
  border-radius:8px;font-size:14px;cursor:pointer;transition:all .15s;
}
.chat-empty-actions .btn-secondary:hover{border-color:var(--tbp-accent);color:var(--tbp-text-primary)}

/* 聊天头部 */
.chat-header{
  padding:14px 20px;border-bottom:1px solid var(--tbp-border-a1);  /* 🍞 2026-07-26(UI优化②): 实心灰边→白透明度 */
  background:var(--tbp-glass-head);backdrop-filter:blur(8px);       /* + 玻璃透底 */
  display:flex;align-items:center;gap:12px;flex-shrink:0;
}
/* 🍞 2026-07-26(UI优化③): 头部头像 渐变底+流光边框包裹+发光（定稿第2/4件） */
.chat-header-avatar,.ch-avatar{
  width:36px;height:36px;border-radius:10px;
  border:1.5px solid transparent;
  background:
    linear-gradient(135deg,var(--tbp-accent),var(--tbp-accent-2)) padding-box,
    linear-gradient(120deg,#a5b4fc,#e4c87a,#8b5cf6,#a5b4fc) border-box;
  background-size:100% 100%,300% 100%;
  animation:tbp-border-flow 6s linear infinite;
  box-shadow:0 0 18px rgba(102,126,234,.35);
  display:flex;align-items:center;justify-content:center;
  font-size:15px;color:#fff;flex-shrink:0;overflow:hidden;
}
.chat-header-avatar img,.ch-avatar img{width:100%;height:100%;object-fit:cover}
.chat-header-info,.ch-info{flex:1;min-width:0}
.chat-header-name,.ch-name{font-size:15px;font-weight:600;color:var(--tbp-text-primary)}
.chat-header-subject,.ch-subject{font-size:12px;color:var(--tbp-text-tertiary);margin-top:1px}
.chat-header-model,.ch-model-badge{
  font-size:0.6875rem;background:var(--tbp-info-bg);color:var(--tbp-accent-light);
  padding:2px 10px;border-radius:10px;white-space:nowrap;
  border:1px solid rgba(102,126,234,.28);box-shadow:0 0 10px rgba(102,126,234,.1);  /* 🍞 2026-07-26(UI优化③): 徽章描边+微光 */
}
.chat-header-btn,.ch-exit-btn{
  padding:6px 14px;border-radius:8px;border:1px solid var(--tbp-border);
  background:transparent;color:var(--tbp-text-tertiary);font-size:12px;
  cursor:pointer;transition:all .15s;white-space:nowrap;flex-shrink:0;
}
/* 🍞 2026-07-26(UI优化③): 头部按钮 hover=紫金渐变边框包裹+微光（定稿第4件） */
.chat-header-btn:hover,.ch-exit-btn:hover{
  border-color:transparent;
  background:
    linear-gradient(rgba(255,255,255,.06),rgba(255,255,255,.06)) padding-box,
    linear-gradient(135deg,rgba(102,126,234,.75),rgba(201,169,110,.5)) border-box;
  color:var(--tbp-text-primary);
  box-shadow:0 0 14px rgba(102,126,234,.18);
}

/* 积分进度条 */
.chat-token-bar{
  display:flex;align-items:center;gap:8px;
  padding:6px 20px;background:var(--tbp-bg-secondary);
  border-bottom:1px solid var(--tbp-border);font-size:0.6875rem;flex-shrink:0;
}
.chat-token-bar-label{color:var(--tbp-text-tertiary);white-space:nowrap}
.chat-token-bar-track{
  flex:1;height:6px;background:var(--tbp-border);border-radius:3px;
  overflow:hidden;max-width:200px;
}
.chat-token-bar-fill{
  height:100%;background:linear-gradient(90deg,var(--tbp-accent),var(--tbp-accent-2));
  border-radius:3px;transition:width .5s;width:100%;
}
.chat-token-bar-value{color:var(--tbp-warning);white-space:nowrap}
.chat-token-bar-status{color:var(--tbp-text-dim);white-space:nowrap}

/* 消息列表 */
.chat-messages{
  flex:1;overflow-y:auto;padding:16px;
  background:transparent;  /* 🍞 2026-07-26(UI优化②): 实底→透明透星空 */

  display:flex;flex-direction:column;gap:10px;min-height:0;
}
.chat-messages::-webkit-scrollbar{width:4px}
.chat-messages::-webkit-scrollbar-thumb{background:var(--tbp-border);border-radius:2px}

/* 回到底部按钮 */
.scroll-to-bottom-btn{
  position:absolute;bottom:80px;right:24px;
  width:36px;height:36px;border-radius:50%;
  background:rgba(102,126,234,.9);color:#fff;
  border:none;cursor:pointer;font-size:16px;
  display:none;align-items:center;justify-content:center;
  box-shadow:0 2px 8px rgba(0,0,0,.3);
  transition:opacity .2s,transform .2s;
  opacity:.8;z-index:10;
}
.scroll-to-bottom-btn:hover{opacity:1;transform:scale(1.05)}
.scroll-to-bottom-btn:active{transform:scale(.95)}
@media(max-width:768px){
  .scroll-to-bottom-btn{bottom:72px;right:12px;width:32px;height:32px;font-size:14px}
}

/* 空对话提示 */
.chat-messages-empty{
  flex:1;display:flex;flex-direction:column;
  align-items:center;justify-content:center;gap:12px;
}
.chat-messages-empty-icon{font-size:48px}
.chat-messages-empty-text{font-size:14px;color:var(--tbp-text-dim)}

/* 消息气泡 */
.msg-row{
  display:flex;gap:8px;max-width:85%;
  animation:msgIn .25s ease;
}
@keyframes msgIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}
.msg-row.user{align-self:flex-end;flex-direction:row-reverse}
.msg-row.assistant{align-self:flex-start}
.msg-avatar{
  width:32px;height:32px;border-radius:8px;flex-shrink:0;
  display:flex;align-items:center;justify-content:center;
  font-size:14px;color:#fff;overflow:hidden;
}
.msg-row.user .msg-avatar{background:linear-gradient(135deg,#8b5cf6,#c9a96e)}  /* 🍞 2026-07-26(UI优化②): 纯色→紫金渐变 */
.msg-row.assistant .msg-avatar{background:linear-gradient(135deg,var(--tbp-accent),#a78bfa);box-shadow:0 0 10px rgba(102,126,234,.3)}  /* 紫渐变+微光 */
.msg-avatar img{width:100%;height:100%;object-fit:cover;border-radius:8px;min-width:0;display:block}
.msg-body{min-width:0}
.msg-bubble{
  padding:9px 13px;border-radius:14px;font-size:14px;
  line-height:1.5;word-break:break-word;white-space:pre-wrap;
}
.msg-row.user .msg-bubble{
  background:var(--tbp-fill);  /* 🍞 2026-07-26(UI优化②): 紫渐变退役→纯色（定稿第6件） */
  border-bottom-right-radius:4px;
}
/* 🍞 2026-07-26(UI优化②): AI 气泡去气泡化——无色块，左 2px 紫金渐变细条+微光（定稿第6件；
   星空透底故文字直接排版；padding/行高沿用紧凑化数值未动） */
.msg-row.assistant .msg-bubble{
  background:transparent;
  border-radius:0;
  padding:2px 0 2px 13px;
  position:relative;
}
.msg-row.assistant .msg-bubble::before{
  content:'';position:absolute;left:0;top:2px;bottom:2px;width:2px;border-radius:2px;
  background:var(--tbp-grad-brand-v);
  box-shadow:var(--tbp-glow-line);
}
.msg-sender-name{
  font-size:0.6875rem;color:var(--tbp-text-dim);margin-bottom:2px;
}
.msg-row.user .msg-sender-name{
  color:rgba(255,255,255,.75);
}
.msg-row.user .msg-bubble{
  color:#fff;
}
.streamingBubble{opacity:0.85}
/* 附件缩略图 — 限制最大尺寸，防止原图撑爆屏幕 */
.att-bubble-preview{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.att-thumb-img{max-width:240px;max-height:180px;width:auto;height:auto;object-fit:cover;border-radius:8px;cursor:pointer;display:block;border:1px solid rgba(255,255,255,.08)}
.att-thumb-img:hover{opacity:.85}
.bubbleDone{opacity:1}

/* ===== P4 Markdown 渲染样式 ===== */
/* 覆盖 .msg-bubble 的 white-space:pre-wrap，让 rendered 内容使用正常换行 */
.bubble-text.rendered-md { white-space: normal; }
.bubble-text.rendered-md pre { white-space: pre-wrap; }
.bubble-text.rendered-md p { margin: 0.3em 0; }
/* 🍞 2026-07-26(标题层次拉开·对齐 CodeBuddy): 原 h1/h2/h3 只差 0.1em 肉眼难分；h1/h2 加底部分隔线、strong 提亮、行内 code 胶囊 */
.bubble-text.rendered-md h1,.bubble-text.rendered-md h2,.bubble-text.rendered-md h3,.bubble-text.rendered-md h4 { margin: 0.7em 0 0.35em; font-weight: 700; }
.bubble-text.rendered-md h1 { font-size: 1.5em; }
.bubble-text.rendered-md h2 { font-size: 1.3em; }
.bubble-text.rendered-md h3 { font-size: 1.15em; }
.bubble-text.rendered-md h1,.bubble-text.rendered-md h2 { border-bottom: 1px solid var(--tbp-border); padding-bottom: 0.2em; }
.bubble-text.rendered-md strong { font-weight: 700; color: #fff; }
.bubble-text.rendered-md code { background: rgba(255,255,255,.1); padding: 1px 6px; border-radius: 5px; font-size: 0.88em; font-family: 'Consolas','Monaco','Courier New',monospace; }
.msg-row.user .bubble-text.rendered-md code { background: rgba(255,255,255,.2); }
.bubble-text.rendered-md ul,.bubble-text.rendered-md ol { padding-left: 1.5em; margin: 0.4em 0; }
.bubble-text.rendered-md li { margin: 0.15em 0; }
.bubble-text.rendered-md blockquote { border-left: 3px solid var(--tbp-accent); padding-left: 12px; margin: 0.5em 0; color: var(--tbp-text-dim); }
.bubble-text.rendered-md a { color: var(--tbp-accent); text-decoration: underline; }
.bubble-text.rendered-md table { border-collapse: collapse; margin: 0.6em 0; font-size: 0.9em; }
.bubble-text.rendered-md th,.bubble-text.rendered-md td { border: 1px solid var(--tbp-border); padding: 6px 10px; text-align: left; }
.bubble-text.rendered-md th { background: rgba(102,126,234,.12); font-weight: 600; }
.bubble-text.rendered-md img { max-width: 100%; border-radius: 6px; }
.bubble-text.rendered-md hr { border: none; border-top: 1px solid var(--tbp-border); margin: 0.8em 0; }

/* 代码块容器 — 🍞 2026-07-26(UI优化②): 实底→透底玻璃透星空 + tbp-border-flow 弱档流光边框（定稿第2/3件） */
.code-block-wrap { margin: 0.6em 0; border-radius: 8px; overflow: hidden;
  border: 1.5px solid transparent;
  background:
    linear-gradient(var(--tbp-glass-code), var(--tbp-glass-code)) padding-box,
    linear-gradient(120deg, rgba(102,126,234,.5), rgba(201,169,110,.28), rgba(139,92,246,.26), rgba(102,126,234,.5)) border-box;
  background-size: 100% 100%, 300% 100%;
  animation: tbp-border-flow 9s linear infinite;
  backdrop-filter: blur(6px); }
.code-block-header { display: flex; justify-content: space-between; align-items: center; padding: 6px 12px; background: rgba(255,255,255,.04); border-bottom: 1px solid rgba(255,255,255,.06); }
.code-lang { font-size: 0.6875rem; color: #8b949e; text-transform: uppercase; font-weight: 600; letter-spacing: 0.5px; }
.code-copy-btn { padding: 2px 8px; font-size: 0.6875rem; border: 1px solid rgba(255,255,255,.12); border-radius: 4px; background: transparent; color: #8b949e; cursor: pointer; transition: all .15s; }
.code-copy-btn:hover { background: rgba(255,255,255,.08); color: #e6edf3; }
.code-block-wrap pre { margin: 0; padding: 12px 16px; overflow-x: auto; font-family: 'Consolas','Monaco','Courier New',monospace; font-size: 0.85em; line-height: 1.5; }
.code-block-wrap code { font-family: inherit; background: none; padding: 0; }
/* hljs 适配暗色背景 */
.code-block-wrap .hljs { background: transparent; padding: 0; }
/* 🍞 2026-07-26(UI优化②): 时间戳平时隐身，hover 消息才浮现（降噪；占位高度保留不抖动） */
.msg-time{
  font-size:0.6875rem;color:var(--tbp-text-dim);margin-top:4px;
  opacity:0;transition:opacity .2s;
}
.msg-row:hover .msg-time{opacity:1}
.msg-disclaimer{
  font-size:0.6875rem;color:var(--tbp-text-dim);margin-top:2px;
}
.msg-retry{
  cursor:pointer;font-size:12px;color:var(--tbp-text-dim);
  margin-left:8px;opacity:.5;transition:opacity .2s;
}
.msg-retry:hover{opacity:1}

/* ===== 2026-07-26 连续消息合并（同方同名连发只亮一次头像，对齐 CodeBuddy 一轮一头像） ===== */
/* 🍞 合并判定在 JS 侧 _markContIfSameSender（同名才加 .msg-cont）——不用纯 CSS 相邻选择器：群聊不同群友连发都是 .msg-row.assistant，会误藏第二人头像 */
.msg-row.msg-cont{margin-top:-6px}
.msg-row.msg-cont .msg-avatar{visibility:hidden}

/* ===== 2026-07-26 值守触发卡片（小饭盒显示层折叠：只露用户填写的提示词，全文点开才看） ===== */
/* 🍞 模型收到的原文一字不变（messages 数组存原文），仅 DOM 显示层折叠；转换函数 _dutyTriggerDisplay 在 chat-core.js */
.msg-row.user.duty-trigger .msg-bubble{background:var(--tbp-bg-secondary);border:1px solid var(--tbp-border)}
.duty-card-head{display:flex;align-items:center;gap:6px;font-size:11px;color:var(--tbp-accent);font-weight:700;margin-bottom:3px}
.duty-card-prompt{font-size:13px;color:#e5e7eb;white-space:pre-wrap;word-break:break-word}
.duty-card-toggle{font-size:11px;color:var(--tbp-text-dim);cursor:pointer;margin-top:5px;user-select:none}
.duty-card-toggle:hover{color:var(--tbp-accent)}
.duty-card-full{display:none;font-size:11px;color:var(--tbp-text-dim);white-space:pre-wrap;word-break:break-word;margin-top:5px;padding-top:5px;border-top:1px dashed var(--tbp-border);max-height:200px;overflow-y:auto;line-height:1.5}

/* 输入区 — 🍞 2026-07-26(UI优化②): 实底→玻璃透底透星空；实心灰边→白透明度 */
.chat-input-area{
  padding:16px 20px;border-top:1px solid var(--tbp-border-a1);flex-shrink:0;
  background:var(--tbp-glass-input);backdrop-filter:blur(8px);
  position:relative;
}
/* 🍞 2026-07-26(快修·用户拍板): 顶部光带撤除（用户嫌杂）——聚焦流光改到输入框本身边框（见 #tch-msgInput:focus） */

/* P3 动效：发送按钮按下反馈 + 输入框聚焦光环 */
/* ⚠ #tch-sendBtn/#tch-msgInput 由JS动态创建含内联style，需!important覆盖 */
#tch-sendBtn {
  transition: transform .1s, box-shadow .1s, opacity .2s, filter .15s !important;
  /* 🍞 2026-07-26(UI优化④): 发送按钮 纯色 → 紫金渐变底+流光边框包裹+发光（!important 盖内联style） */
  background:
    linear-gradient(135deg,#667eea,#8b5cf6) padding-box,
    linear-gradient(120deg,#a5b4fc,#e4c87a,#667eea,#a5b4fc) border-box !important;
  background-size: 100% 100%, 300% 100% !important;
  border: 1.5px solid transparent !important;
  animation: tbp-border-flow 5s linear infinite;
  box-shadow: 0 0 14px rgba(102,126,234,.25) !important;
}
#tch-sendBtn:hover {
  opacity: 1 !important;
  box-shadow: 0 0 24px rgba(102,126,234,.45) !important;
  filter: brightness(1.1);
}
#tch-sendBtn .tbp-ic{font-size:14px}
#tch-sendBtn:active {
  transform: scale(0.93) !important;
  box-shadow: 0 0 12px rgba(102,126,234,.4) !important;
}
#tch-sendBtn:disabled {
  opacity: 0.4 !important;
  cursor: not-allowed !important;
  transform: none !important;
}
#tch-sendBtn.stop {
  background: var(--tbp-danger) !important;
}
#tch-msgInput {
  transition: border-color .2s, box-shadow .2s !important;
  border-color: var(--tbp-border-a3) !important;  /* 🍞 2026-07-26(快修): 常态边框换白透明度（盖内联 #2d3143） */
}
/* 🍞 2026-07-26(快修·用户拍板): 输入框聚焦=本身边框光影流转（替代撤掉的输入区顶部光带） */
#tch-msgInput:focus {
  border: 1.5px solid transparent !important;
  background:
    linear-gradient(#1e1f2b, #1e1f2b) padding-box,
    linear-gradient(120deg, rgba(102,126,234,.85), rgba(201,169,110,.5), rgba(139,92,246,.45), rgba(102,126,234,.85)) border-box !important;
  background-size: 100% 100%, 300% 100% !important;
  animation: tbp-border-flow 6s linear infinite;
  box-shadow: 0 0 16px rgba(102,126,234,.12) !important;
}

/* ===== 输入工具栏 ===== */
.input-toolbar-top{
  display:flex;align-items:center;gap:6px;
  padding:0 0 6px;
}
.input-toolbar-bottom{
  display:flex;align-items:center;gap:4px;
}
/* 🍞 2026-07-26(UI优化④): 工具按钮上色——默认淡紫底+紫光描边，hover 紫渐变实底白字（定稿第4件） */
.tb-btn{
  padding:4px 10px;border:1px solid rgba(102,126,234,.2);
  background:rgba(102,126,234,.08);color:var(--tbp-text-secondary);
  border-radius:6px;font-size:12px;cursor:pointer;
  transition:all .15s;white-space:nowrap;
  box-shadow:0 0 8px rgba(102,126,234,.05);
}
.tb-btn:hover{
  background:linear-gradient(135deg,rgba(102,126,234,.85),rgba(139,92,246,.75));
  border-color:transparent;color:#fff;
  box-shadow:0 0 14px rgba(102,126,234,.3);
}
.tb-btn .tbp-ic{font-size:13px;flex-shrink:0}
.tb-btn-arrow{font-size:8px}
.model-switcher-bar{position:relative;display:inline-block}
.model-switcher-dropdown{
  position:absolute;bottom:100%;left:0;margin-bottom:4px;
  min-width:220px;max-width:340px;background:var(--tbp-bg-secondary);
  border:1px solid var(--tbp-border);border-radius:8px;
  box-shadow:0 4px 16px rgba(0,0,0,.4);z-index:var(--tbp-z-dropdown);
  padding:4px;display:none;
}
.model-switcher-bar.active .model-switcher-dropdown{display:block}
.mode-dropdown-wrap{position:relative;display:inline-block}
.mode-dropdown-menu{
  position:absolute;bottom:100%;left:0;margin-bottom:4px;
  min-width:160px;background:var(--tbp-bg-secondary);
  border:1px solid var(--tbp-border);border-radius:8px;
  box-shadow:0 4px 16px rgba(0,0,0,.4);z-index:var(--tbp-z-dropdown);
  padding:4px;display:none;
}
.mode-dropdown-wrap.active .mode-dropdown-menu{display:block}
.mode-dropdown-item{
  display:block;width:100%;padding:8px 12px;
  background:none;border:none;color:var(--tbp-text-secondary);
  font-size:13px;text-align:left;cursor:pointer;
  border-radius:4px;transition:background .1s;
}
.mode-dropdown-item:hover{background:var(--tbp-bg-hover);color:var(--tbp-text-primary)}
.sandbox-level-wrap{position:relative;display:inline-block}
.sandbox-level-menu{
  position:absolute;bottom:100%;left:0;margin-bottom:4px;
  min-width:140px;background:var(--tbp-bg-secondary);
  border:1px solid var(--tbp-border);border-radius:8px;
  box-shadow:0 4px 16px rgba(0,0,0,.4);z-index:var(--tbp-z-dropdown);
  padding:4px;display:none;
}
.sandbox-level-wrap.active .sandbox-level-menu{display:block}
.sandbox-level-item{
  display:block;width:100%;padding:8px 12px;
  background:none;border:none;color:var(--tbp-text-secondary);
  font-size:13px;text-align:left;cursor:pointer;
  border-radius:4px;transition:background .1s;
}
.sandbox-level-item:hover{background:var(--tbp-bg-hover);color:var(--tbp-text-primary)}
.sandbox-level-item.active{background:var(--tbp-info-bg);color:var(--tbp-accent-light)}
.sandbox-level-btn{
  display:inline-flex;align-items:center;gap:4px;
  padding:4px 10px;border:1px solid var(--tbp-border);
  background:transparent;color:var(--tbp-text-tertiary);
  border-radius:6px;font-size:12px;cursor:pointer;
  transition:all .15s;white-space:nowrap;
}
.sandbox-level-btn:hover{border-color:var(--tbp-accent);color:var(--tbp-accent)}
.sandbox-path-text{
  font-size:0.6875rem;color:var(--tbp-text-dim);cursor:pointer;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
  max-width:200px;line-height:28px;padding:0 4px;
}
.sandbox-path-text:hover{color:var(--tbp-accent-light)}

/* 模型选择器下拉内容 */
.model-group-header{
  padding:8px 12px 4px;font-size:0.6875rem;font-weight:600;
  color:var(--tbp-text-dim);text-transform:uppercase;letter-spacing:.5px;
}
/* @WHY 模型名过长省略号 + 标签块 flex:0 0 auto 锁定单行，避免未选模型时点开列表字段被压成多行 */
.model-option{
  display:flex;align-items:center;justify-content:space-between;
  padding:8px 12px;gap:8px;cursor:pointer;
  border-radius:4px;transition:background .1s;
}
.model-option:hover{background:var(--tbp-bg-hover)}
.model-option.active{background:var(--tbp-info-bg);color:var(--tbp-accent-light)}
.model-option-name{font-size:13px;color:var(--tbp-text-secondary);flex:1 1 auto;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.model-option.active .model-option-name{color:var(--tbp-accent-light)}
.model-option-badges{display:flex;gap:3px;flex:0 0 auto;flex-wrap:nowrap;justify-content:flex-end}

/* 2026-07-30 模型菜单分栏（用户拍板）：一级 4 项（文本模型/图片/视频/音乐）+ 悬停/点击右飞子菜单——
 * @WHY 滚动必须放各子菜单自身（max-height+overflow-y:auto），一级下拉容器禁 overflow 滚动（会裁切右飞飞层）；
 * @WHY 靠下一级项子菜单向上飞（bottom 对齐），防向下飞出屏幕底 */
.ms-l1-item{position:relative;display:flex;align-items:center;gap:6px;padding:9px 12px;cursor:pointer;border-radius:6px;white-space:nowrap}
.ms-l1-item:hover{background:var(--tbp-bg-hover)}
.ms-l1-label{font-size:13px;color:var(--tbp-text-secondary);flex:0 0 auto}
.ms-l1-cur{font-size:11px;color:var(--tbp-text-dim);flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;text-align:right}
.ms-l1-arrow{font-size:10px;color:var(--tbp-text-dim);flex:0 0 auto}
/* @WHY 2026-07-31: 子菜单全部底部锚定向上飞——下拉贴着屏幕底，向下飞必出下沿（用户实锤"文本模型超出下沿"）；
 *   滚动在子菜单自身（overflow-y:auto 滚轮原生支持），overscroll-behavior 防滚穿到页面 */
.ms-l2-menu{
  position:absolute;left:100%;bottom:-4px;margin-left:4px;display:none;
  min-width:240px;max-width:340px;max-height:50vh;overflow-y:auto;overscroll-behavior:contain;
  background:var(--tbp-bg-secondary);border:1px solid var(--tbp-border);border-radius:8px;
  box-shadow:0 4px 16px rgba(0,0,0,.4);z-index:var(--tbp-z-dropdown);padding:4px;
}
.ms-l1-item:hover>.ms-l2-menu,.ms-l1-item.ms-open>.ms-l2-menu{display:block}
.mod-label{font-size:0.6875rem;color:var(--tbp-text-dim);margin-right:2px;line-height:18px}
.mod-badge{
  display:inline-block;font-size:0.6875rem;padding:1px 6px;
  border-radius:3px;line-height:16px;
}
.mod-badge-input{background:rgba(102,126,234,.15);color:#8899ff}
.mod-badge-output{background:rgba(74,222,128,.15);color:#4ade80}

/* 模式下拉 */
.mode-dropdown-item.active{background:var(--tbp-info-bg);color:var(--tbp-accent-light)}
.mode-dropdown-item.disabled{opacity:.4;cursor:not-allowed;pointer-events:none}
.mode-item-desc{font-size:0.6875rem;color:var(--tbp-text-dim);margin-top:1px}

/* 输入工具栏主按钮 */
.tb-btn-primary{
  background:linear-gradient(135deg,var(--tbp-accent),var(--tbp-accent-2))!important;
  color:#fff!important;border:none!important;font-weight:500;
}
.tb-btn-primary:hover{opacity:.9}

/* 附件预览 */
.attachment-preview-wrap{
  display:flex;flex-wrap:wrap;gap:6px;
  padding:0 0 8px;
}
.attachment-preview{
  position:relative;width:72px;height:72px;
  border-radius:8px;border:1px solid var(--tbp-border);
  background:var(--tbp-bg-primary);overflow:hidden;
  display:flex;align-items:center;justify-content:center;
}
.attachment-preview img{width:100%;height:100%;object-fit:cover}
.attachment-preview.attachment-uploading{opacity:.6}
.attachment-remove{
  position:absolute;top:2px;right:2px;
  width:18px;height:18px;border-radius:50%;
  background:rgba(0,0,0,.7);color:#fff;border:none;
  font-size:0.6875rem;line-height:18px;text-align:center;
  cursor:pointer;display:none;padding:0;
}
.attachment-preview:hover .attachment-remove{display:block}
.att-order-badge{
  position:absolute;top:2px;left:2px;z-index:2;
  min-width:18px;height:18px;padding:0 4px;border-radius:50%;
  background:rgba(102,126,234,.92);color:#fff;border:none;
  font-size:11px;line-height:18px;text-align:center;font-weight:700;
  pointer-events:none;box-sizing:border-box;
}
.attachment-size-tag{
  position:absolute;bottom:2px;left:2px;
  font-size:0.6875rem;color:var(--tbp-text-dim);
  background:rgba(0,0,0,.6);padding:1px 4px;border-radius:3px;
}
.att-spinner{
  width:20px;height:20px;border:2px solid var(--tbp-border);
  border-top-color:var(--tbp-accent);border-radius:50%;
  animation:spin .8s linear infinite;
}
@keyframes spin{to{transform:rotate(360deg)}}
/* 🍞 A1-1-ux: 本地模型首响前的"正在启动"加载态（复用 spin 动画，蓝色=附件转圈同色） */
.tbp-spin{display:inline-block;width:13px;height:13px;border:2px solid var(--tbp-border);
  border-top-color:var(--tbp-accent);border-radius:50%;animation:spin .8s linear infinite;vertical-align:-2px;margin-right:6px}
.tbp-model-loading{padding:6px 2px;color:#9ca3af;font-size:12px;line-height:1.6}
.tbp-model-loading-hint{font-size:11px;color:#6b7280}
.att-file-icon{font-size:20px;line-height:1}
.att-file-name{font-size:0.6875rem;color:var(--tbp-text-dim);max-width:60px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* 沙盒弹窗 */
.sandbox-modal-overlay{
  position:fixed;inset:0;background:rgba(0,0,0,.6);
  z-index:var(--tbp-z-dropdown);display:flex;align-items:center;justify-content:center;
  animation:fadeIn .2s ease;
}
.sandbox-modal{
  background:var(--tbp-bg-secondary);border:1px solid var(--tbp-border);
  border-radius:16px;width:460px;max-height:85vh;
  overflow-y:auto;animation:modalIn .25s ease;padding:24px;
}
.sandbox-modal h4{font-size:15px;color:var(--tbp-text-primary);margin:0 0 16px}
.sandbox-options{display:flex;flex-direction:column;gap:8px;margin-bottom:16px}
.sandbox-option{
  display:flex;flex-direction:column;gap:2px;
  padding:12px;border:1px solid var(--tbp-border);border-radius:10px;
  cursor:pointer;transition:all .15s;
}
.sandbox-option:hover{border-color:var(--tbp-accent-light)}
.sandbox-option.selected{border-color:var(--tbp-accent);background:var(--tbp-info-bg)}
.sandbox-option input[type="radio"]{display:none}
.sandbox-option span{font-size:14px;color:var(--tbp-text-primary);font-weight:500}
.sandbox-option small{font-size:0.6875rem;color:var(--tbp-text-dim)}
.sandbox-path-row{
  display:flex;align-items:center;gap:8px;margin-bottom:16px;
}
.sandbox-path-row label{font-size:13px;color:var(--tbp-text-secondary);white-space:nowrap}
.sandbox-path-row input[type="text"]{
  flex:1;padding:8px 12px;background:var(--tbp-bg-primary);
  border:1px solid var(--tbp-border);border-radius:8px;
  color:var(--tbp-text-primary);font-size:13px;outline:none;
}
.sandbox-path-row input[type="text"]:focus{border-color:var(--tbp-accent)}
.sandbox-actions{display:flex;gap:8px;justify-content:flex-end}

/* 任务列表项 */
.task-item{
  display:flex;align-items:center;gap:8px;
  padding:8px 14px;cursor:pointer;transition:all .15s;
  border-left:3px solid transparent;
}
.task-item:hover{background:var(--tbp-glass-bg)}
.task-item.active{
  background:var(--tbp-glass-bg);border-left-color:var(--tbp-gold);
}
.task-item-icon{font-size:14px;flex-shrink:0}
.task-item-name{flex:1;font-size:13px;color:var(--tbp-text-secondary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.task-item.active .task-item-name{color:var(--tbp-text-primary)}
.task-item-edit,.task-item-close{
  font-size:12px;color:var(--tbp-text-dim);cursor:pointer;
  flex-shrink:0;opacity:0;transition:opacity .15s;
  width:22px;height:22px;display:flex;align-items:center;justify-content:center;border-radius:4px;
}
.task-item:hover .task-item-edit,.task-item:hover .task-item-close{opacity:1}
.task-item-edit:hover{color:var(--tbp-accent);background:var(--tbp-bg-hover)}
.task-item-close:hover{color:var(--tbp-danger);background:var(--tbp-danger-bg)}
.task-item-rename-input{
  flex:1;padding:2px 6px;background:var(--tbp-bg-primary);
  border:1px solid var(--tbp-accent);border-radius:4px;
  color:var(--tbp-text-primary);font-size:13px;outline:none;
}

/* ===== 设置弹窗 ===== */
.modal-overlay{
  position:fixed;inset:0;background:rgba(0,0,0,0.6);
  z-index:var(--tbp-z-dropdown);display:flex;align-items:center;justify-content:center;
  animation:fadeIn .2s ease;
}
@keyframes fadeIn{from{opacity:0}to{opacity:1}}
.modal-box{
  background:var(--tbp-bg-secondary);border:1px solid var(--tbp-border);
  border-radius:16px;width:440px;max-height:85vh;
  overflow-y:auto;animation:modalIn .25s ease;
}
@keyframes modalIn{from{opacity:0;transform:translateY(16px) scale(.97)}to{opacity:1;transform:translateY(0) scale(1)}}
.modal-box::-webkit-scrollbar{width:4px}
.modal-box::-webkit-scrollbar-thumb{background:var(--tbp-border);border-radius:2px}

.modal-header{
  display:flex;align-items:center;justify-content:space-between;
  padding:20px 24px 0;
}
.modal-header h3{font-size:16px;color:var(--tbp-text-primary)}
.modal-close{
  width:32px;height:32px;border-radius:8px;border:none;
  background:transparent;color:var(--tbp-text-dim);
  font-size:18px;cursor:pointer;display:flex;align-items:center;
  justify-content:center;transition:all .15s;
}
.modal-close:hover{color:var(--tbp-text-primary);background:var(--tbp-bg-hover)}

.modal-body{padding:16px 24px}
.modal-body label{
  display:block;font-size:12px;color:var(--tbp-text-tertiary);
  margin-bottom:6px;margin-top:14px;
}
.modal-body label:first-of-type{margin-top:0}
.modal-body input[type="text"],
.modal-body input[type="password"],
.modal-body input[type="number"]{
  width:100%;padding:10px 12px;background:var(--tbp-bg-primary);
  border:1px solid var(--tbp-border);border-radius:8px;
  color:var(--tbp-text-primary);font-size:13px;outline:none;
}
.modal-body input[type="text"]:focus,
.modal-body input[type="password"]:focus,
.modal-body input[type="number"]:focus{
  border-color:var(--tbp-accent);
  box-shadow:0 0 0 3px rgba(102,126,234,.12);
}

/* 头像编辑 */
.settings-avatar-row{display:flex;align-items:center;gap:12px}
.settings-avatar-preview{
  width:56px;height:56px;border-radius:12px;
  background:linear-gradient(135deg,var(--tbp-accent),var(--tbp-accent-2));
  display:flex;align-items:center;justify-content:center;
  font-size:24px;color:#fff;flex-shrink:0;overflow:hidden;
}
.settings-avatar-preview img{width:100%;height:100%;object-fit:cover}
.settings-avatar-row input{flex:1}
.settings-hint{font-size:0.6875rem;color:var(--tbp-text-dim);margin-top:4px}

/* 文件上传按钮暗色主题 */
.modal-body input[type="file"]{
  font-size:12px;color:var(--tbp-text-dim);
}
.modal-body input[type="file"]::file-selector-button{
  padding:6px 14px;margin-right:10px;
  background:var(--tbp-bg-primary);color:var(--tbp-accent);
  border:1px solid var(--tbp-border);border-radius:6px;
  cursor:pointer;font-size:12px;
}
.modal-body input[type="file"]::file-selector-button:hover{
  background:var(--tbp-bg-hover);
}

/* 隐私勾选 */
.settings-checkbox{
  display:flex;align-items:center;gap:8px;margin:14px 0;
}
.settings-checkbox label{font-size:13px;color:var(--tbp-text-dim);margin:0}

/* 数字资产 */
.settings-assets{
  margin:14px 0;padding:12px;
  background:var(--tbp-success-bg);border:1px solid rgba(46,204,113,.15);
  border-radius:8px;
}
.settings-assets-title{font-size:14px;font-weight:600;color:var(--tbp-success);margin-bottom:10px}
.settings-assets-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.settings-assets-label{font-size:0.6875rem;color:var(--tbp-text-dim);margin-bottom:2px}
.settings-assets-value{font-size:18px;font-weight:700;color:var(--tbp-warning)}
.settings-assets-teachers{margin-top:10px;padding-top:8px;border-top:1px solid rgba(46,204,113,.15)}
.settings-assets-teachers .settings-assets-label{font-size:0.6875rem;color:var(--tbp-text-dim);margin-bottom:4px}
.settings-assets-teachers > div:last-child{font-size:0.6875rem;color:var(--tbp-text-tertiary);line-height:1.6}
.settings-assets-buy{margin-top:8px;text-align:right}
.settings-assets-buy a{color:var(--tbp-accent);font-size:0.6875rem;text-decoration:none}
.settings-assets-buy a:hover{opacity:.8}

/* 危险操作 */
.settings-danger{
  margin-top:16px;padding:12px;
  background:var(--tbp-bg-primary);border-radius:8px;
  font-size:12px;line-height:1.8;
}
.settings-danger-title{color:var(--tbp-warning);margin-bottom:4px}
.settings-danger-actions{font-size:0.6875rem}
.settings-danger-actions a{color:var(--tbp-danger);text-decoration:none}
.settings-danger-actions a:hover{text-decoration:underline}
.settings-danger-actions span{color:var(--tbp-text-muted);margin:0 8px}

/* 协议链接 */
.settings-links{
  margin-top:12px;text-align:center;font-size:0.6875rem;color:var(--tbp-text-muted);
}
.settings-links a{color:var(--tbp-text-dim);text-decoration:none}
.settings-links a:hover{color:var(--tbp-text-tertiary)}

.modal-footer{
  display:flex;gap:8px;justify-content:flex-end;
  padding:16px 24px 24px;
}

/* ===== 工具执行步骤卡片 ===== */
.dtool-step{
  margin:4px 0 4px 36px;
  border-radius:6px;
  background:var(--tbp-bg-secondary);
  border:1px solid var(--tbp-border);
  overflow:hidden;
  font-size:12px;
  transition:border-color .2s,background .2s;
  max-width:600px;
}
.dtool-step:hover{border-color:var(--tbp-accent-light);background:var(--tbp-bg-hover)}
.dtool-step .dtool-header{
  display:flex;align-items:center;gap:8px;
  padding:6px 10px;
  user-select:none;
}
.dtool-step .dtool-header:hover{opacity:.95}
.dtool-step .dtool-detail{
  padding:6px 10px 8px 28px;
  border-top:1px solid var(--tbp-border);
  color:var(--tbp-text-secondary);
  font-size:0.6875rem;
  line-height:1.5;
  white-space:pre-wrap;
  word-break:break-word;
  max-height:240px;
  overflow-y:auto;
}
.dtool-step .dtool-detail::-webkit-scrollbar{width:4px}
.dtool-step .dtool-detail::-webkit-scrollbar-thumb{background:var(--tbp-border);border-radius:2px}

/* ===== 设置页 Tab 导航 ===== */
.settings-tabs{
  display:flex;gap:0;border-bottom:1px solid var(--tbp-border);
  padding:0 24px;overflow-x:auto;
}
.settings-tab{
  flex-shrink:0;padding:10px 16px;font-size:13px;color:var(--tbp-text-dim);
  background:none;border:none;border-bottom:2px solid transparent;
  cursor:pointer;transition:all .15s;white-space:nowrap;
}
.settings-tab:hover{color:var(--tbp-text-primary)}
.settings-tab.active{
  color:var(--tbp-accent);border-bottom-color:var(--tbp-accent);
  font-weight:600;
}

/* 设置面板切换 */
.settings-panel{display:none}
.settings-panel.active{display:block}

/* 隐私选项卡片 */
.privacy-desc{
  font-size:12px;color:var(--tbp-text-dim);margin-bottom:16px;
  line-height:1.6;
}
.privacy-option{
  display:flex;align-items:flex-start;gap:10px;
  padding:12px;margin-bottom:8px;border-radius:10px;
  border:1px solid var(--tbp-border);cursor:pointer;
  transition:all .15s;background:var(--tbp-bg-primary);
}
.privacy-option:hover{border-color:var(--tbp-accent)}
.privacy-option input[type="radio"]{
  margin-top:3px;flex-shrink:0;accent-color:var(--tbp-accent);
}
.privacy-option-title{
  font-size:14px;font-weight:600;color:var(--tbp-text-primary);
  margin-bottom:2px;
}
.privacy-option-desc{
  font-size:0.6875rem;color:var(--tbp-text-dim);line-height:1.5;
}

/* 密码提示 */
.settings-password-hint{
  font-size:12px;color:var(--tbp-text-dim);
  background:var(--tbp-bg-primary);padding:10px 12px;
  border-radius:8px;margin-bottom:14px;line-height:1.6;
}
.modal-footer .btn-primary{
  background:linear-gradient(135deg,var(--tbp-accent),var(--tbp-accent-2));
  color:#fff;border:none;padding:8px 20px;border-radius:8px;
  font-size:13px;cursor:pointer;transition:opacity .2s;
}
.modal-footer .btn-primary:hover{opacity:.9}
.modal-footer .btn-secondary{
  background:var(--tbp-border);color:var(--tbp-text-tertiary);
  border:none;padding:8px 20px;border-radius:8px;
  font-size:13px;cursor:pointer;transition:all .15s;
}
.modal-footer .btn-secondary:hover{background:var(--tbp-text-muted);color:var(--tbp-text-primary)}

/* 分身列表项 */
.teacher-item{
  display:flex;align-items:center;gap:10px;
  padding:10px 14px;cursor:pointer;transition:all .15s;
  border-left:2px solid transparent;
}
.teacher-item:hover{background:var(--tbp-bg-hover)}
.teacher-item.active{
  background:var(--tbp-info-bg);border-left-color:var(--tbp-accent);
}
.teacher-item-avatar{
  width:34px;height:34px;border-radius:8px;
  background:linear-gradient(135deg,var(--tbp-accent),var(--tbp-accent-2));
  display:flex;align-items:center;justify-content:center;
  font-size:14px;color:#fff;flex-shrink:0;overflow:hidden;
}
.teacher-item-avatar img{width:100%;height:100%;object-fit:cover}
.teacher-item-info{flex:1;min-width:0}
.teacher-item-name{font-size:13px;font-weight:600;color:var(--tbp-text-primary)}
.teacher-item-subject{font-size:0.6875rem;color:var(--tbp-text-tertiary);margin-top:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

/* v6.9.12: 响应式桌面适配 */

/* 平板（≤1100px）— 窄侧栏 */
@media (max-width:1100px){
  .chat-messages{padding:16px}
  .chat-header{padding:10px 14px}
  .chat-input-area{padding:12px 14px}
  .msg-row{max-width:90%}
  .sidebar-user{padding:12px 10px}
  .sidebar-user-avatar{width:34px;height:34px;font-size:14px}
  .sidebar-link{padding:8px 10px;font-size:12px}
  .section-title{padding:8px 10px;font-size:12px}
  .conv-item{padding:7px 10px;font-size:12px}
  .teacher-item{padding:8px 10px}
  .task-item{padding:7px 10px}
}

/* 小屏（≤768px）— 侧栏抽屉化 + 底部TabBar */
@media (max-width:768px){
  body{overflow-y:auto;overflow-x:hidden}
  .app{height:auto;min-height:100vh;overflow:visible}
  .sidebar-wrapper{display:none}
  .sidebar-collapse-btn{display:none}
  .chat-messages{padding:12px}
  .chat-input-area{padding:8px 10px}
  .msg-row{max-width:92%}
  .chat-header{padding:8px 10px;gap:4px;flex-wrap:wrap}
  .chat-header-name,.ch-name{font-size:13px;max-width:40vw;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .ch-exit-btn,.chat-header-btn{font-size:0.6875rem;padding:4px 8px}
  .ch-model-badge{font-size:0.6875rem;padding:2px 6px}
  .modal-box{width:95vw;max-height:90vh;margin:0 2.5vw}
  .sandbox-modal{width:95vw;margin:0 2.5vw}
  .chat-token-bar{padding:4px 12px;font-size:0.6875rem}
  .chat-token-bar-track{max-width:100px}
  .input-toolbar-top{flex-wrap:wrap}
  .input-toolbar-bottom{flex-wrap:wrap}
  .attachment-preview{width:56px;height:56px}
  /* 空状态 logo 缩放 */
  .chat-empty-state img{width:120px}
  .chat-empty-icon{font-size:40px}
  .chat-empty-state h3{font-size:16px}
  .chat-empty-state p{font-size:12px}

  /* 底部 TabBar 固定 + safe-area */
  .mobile-tabbar{
    display:flex;align-items:center;justify-content:space-around;
    position:fixed;bottom:0;left:0;right:0;z-index:var(--tbp-z-dropdown);
    height:56px;padding-bottom:env(safe-area-inset-bottom,0);
    background:var(--tbp-bg-secondary);
    border-top:1px solid var(--tbp-border);
  }
  .mobile-tab-item{
    flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;
    background:none;border:none;cursor:pointer;outline:none;
    font-family:inherit;color:var(--tbp-fg-subdued);padding:4px 0;gap:2px;
    transition:color .15s;-webkit-tap-highlight-color:transparent;
    min-height:44px;
  }
  .mobile-tab-item.active{color:var(--tbp-gold,#c9a96e)}
  .mobile-tab-item:active{opacity:.7}
  .mobile-tab-icon{font-size:18px;line-height:1}
  .mobile-tab-label{font-size:0.6875rem;line-height:1}
  .mobile-tab-plus{position:relative}
  .mobile-plus-circle{
    display:flex;align-items:center;justify-content:center;
    width:44px;height:44px;border-radius:50%;
    background:linear-gradient(135deg,var(--tbp-gold,#c9a96e),var(--tbp-gold-dark));
    color:var(--tbp-bg-primary);font-size:28px;font-weight:300;line-height:1;
    margin-top:-20px;
    box-shadow:0 4px 16px rgba(201,169,110,.4);
    transition:transform .15s;
  }
  .mobile-tab-plus:active .mobile-plus-circle{transform:scale(.92)}

  /* 主内容区避让底部TabBar */
  .chat-main{
    padding-bottom:56px;
    padding-bottom:calc(56px + env(safe-area-inset-bottom,0));
  }
  /* v6.9+ 朋友圈与 chatMain 平级，也需避让底部 TabBar */
  #momentsView{
    padding-bottom:56px;
    padding-bottom:calc(56px + env(safe-area-inset-bottom,0));
  }

  /* ===== 侧边栏抽屉 ===== */
  .sidebar.drawer-open{
    display:flex;flex-direction:column;
    position:fixed;top:0;left:0;z-index:var(--tbp-z-sticky);
    width:280px;height:100vh;height:100dvh;
    background:var(--tbp-bg-secondary);
    border-right:1px solid var(--tbp-border);
    transform:translateX(0);
    animation:sidebarSlideIn .25s ease-out;
    overflow-y:auto;
  }
  @keyframes sidebarSlideIn{
    from{transform:translateX(-100%)}
    to{transform:translateX(0)}
  }
  @keyframes sidebarSlideOut{
    from{transform:translateX(0)}
    to{transform:translateX(-100%)}
  }
  .sidebar.drawer-close{animation:sidebarSlideOut .2s ease-in forwards}

  /* 侧边栏遮罩 */
  .mobile-sidebar-overlay{
    display:none;
    position:fixed;inset:0;z-index:var(--tbp-z-sticky);
    background:rgba(0,0,0,.5);
    animation:fadeIn .2s;
  }
  .mobile-sidebar-overlay.show{display:block}
  @keyframes fadeIn{from{opacity:0}to{opacity:1}}

  /* 汉堡菜单按钮 */
  .mobile-hamburger{
    display:flex;align-items:center;justify-content:center;
    width:36px;height:36px;min-width:36px;border-radius:8px;
    background:none;border:1px solid var(--tbp-border);
    color:var(--tbp-text-secondary,#d1d5db);cursor:pointer;
    font-size:18px;-webkit-tap-highlight-color:transparent;
    transition:background .15s;
  }
  .mobile-hamburger:active{background:rgba(255,255,255,.05)}

  /* 弹窗和滚动触控优化 */
  .sidebar *{-webkit-overflow-scrolling:touch}
  .chat-messages{-webkit-overflow-scrolling:touch;scroll-behavior:smooth}
}

/* 大屏（≥1200px）— 对话区占满窗口 */
@media (min-width:1200px){
  .app{
    max-width:100%;
    border-right:none;
  }
  .msg-row{max-width:var(--tbp-content-max)}
}

/* ========================================
 *  朋友圈 (Moments) 样式
 *  版本: v1.0 | 依赖: tbp-theme.css
 * ======================================== */

/* 朋友圈视图容器 */
#momentsView{display:none;flex:1;flex-direction:column;overflow-y:auto;overflow-x:hidden;background:var(--tbp-bg-primary)}
#momentsView::-webkit-scrollbar{width:4px}
#momentsView::-webkit-scrollbar-thumb{background:var(--tbp-border);border-radius:2px}

/* 封面区 */
.moments-cover{
  position:relative;width:100%;height:180px;flex-shrink:0;
  background:linear-gradient(135deg,#1a1a3e 0%,#2d1f4e 30%,var(--tbp-bg-secondary) 60%,var(--tbp-bg-primary) 100%);
  overflow:hidden;background-size:cover;background-position:center;
}
.moments-cover::before{
  content:'';position:absolute;inset:0;
  background:radial-gradient(ellipse at 60% 30%,rgba(102,126,234,.15) 0%,transparent 60%),
             radial-gradient(ellipse at 30% 70%,rgba(201,169,110,.08) 0%,transparent 50%);
}
.moments-profile{
  position:absolute;bottom:28px;right:36px;
  display:flex;align-items:center;gap:10px;
}
.moments-profile-avatar{
  width:56px;height:56px;border-radius:8px;
  border:2px solid rgba(255,255,255,.2);
  background:linear-gradient(135deg,var(--tbp-accent),var(--tbp-accent-2));
  display:flex;align-items:center;justify-content:center;
  font-size:24px;font-weight:700;color:#fff;overflow:hidden;flex-shrink:0;
}
.moments-profile-avatar img{width:100%;height:100%;object-fit:cover;border-radius:6px}
.moments-profile-name{
  font-size:17px;font-weight:700;color:#fff;
  text-shadow:0 2px 8px rgba(0,0,0,.5);
}

/* 动态流 */
.moment{min-height:0}
.moments-feed{padding:8px 0 24px}

/* 发布入口 */
.moments-publish-bar{
  margin:8px 24px 12px;padding:12px 16px;
  background:var(--tbp-bg-secondary);border:1px solid var(--tbp-border);
  border-radius:var(--tbp-radius-lg);display:flex;align-items:center;gap:12px;
  cursor:pointer;transition:border-color .15s;
}
.moments-publish-bar:hover{border-color:var(--tbp-accent)}
.moments-publish-avatar{
  width:36px;height:36px;border-radius:6px;
  background:linear-gradient(135deg,var(--tbp-accent),var(--tbp-accent-2));
  display:flex;align-items:center;justify-content:center;
  font-size:16px;color:#fff;flex-shrink:0;
}
.moments-publish-hint{flex:1;font-size:13px;color:var(--tbp-text-dim)}

/* 动态卡片 */
.moment-card{
  margin:0 24px 12px;
  background:var(--tbp-bg-secondary);border:1px solid var(--tbp-border);
  border-radius:var(--tbp-radius-lg);overflow:hidden;
  transition:all .2s;
}
.moment-card:hover{border-color:rgba(102,126,234,.2)}

.moment-header{display:flex;align-items:flex-start;padding:12px 16px 0;gap:10px}
.moment-avatar{
  width:38px;height:38px;border-radius:6px;flex-shrink:0;
  display:flex;align-items:center;justify-content:center;
  font-size:16px;font-weight:700;color:#fff;overflow:hidden;
}
.moment-avatar.user{background:linear-gradient(135deg,var(--tbp-accent),var(--tbp-accent-2))}
.moment-avatar.teacher{background:linear-gradient(135deg,var(--tbp-gold),var(--tbp-gold-light))}
.moment-avatar img{width:100%;height:100%;object-fit:cover}

.moment-header-info{flex:1;min-width:0}
.moment-author-name{
  font-size:14px;font-weight:600;color:var(--tbp-text-primary);
  display:flex;align-items:center;gap:6px;
}
.moment-badge{
  font-size:0.6875rem;padding:2px 6px;border-radius:4px;font-weight:500;
}
.moment-badge.teacher{background:rgba(201,169,110,.15);color:var(--tbp-gold)}
.moment-badge.user{background:var(--tbp-info-bg);color:var(--tbp-accent-light)}
.moment-ai-tag{
  font-size:0.6875rem;padding:2px 6px;border-radius:4px;
  color:#f59e0b;background:rgba(245,158,11,0.1);font-weight:500;
}
.moment-time{font-size:0.6875rem;color:var(--tbp-text-dim);margin-top:2px}

.moment-body{padding:8px 16px 0}
.moment-content{
  font-size:14px;line-height:1.7;color:var(--tbp-text-secondary);
  margin-left:48px;word-break:break-word;
}

/* 图片网格 */
.moment-images{display:grid;gap:4px;margin:8px 0 0 48px}
.moment-images.cols-1{grid-template-columns:1fr;max-width:280px}
.moment-images.cols-2{grid-template-columns:1fr 1fr}
.moment-images.cols-3{grid-template-columns:1fr 1fr 1fr}
.moment-images img{
  width:100%;aspect-ratio:1;object-fit:cover;
  border-radius:6px;cursor:pointer;background:var(--tbp-bg-hover);
  transition:opacity .15s;
}
.moment-images img:hover{opacity:.85}

/* 操作栏 */
.moment-actions{
  display:flex;align-items:center;gap:20px;
  padding:8px 16px 8px 64px;
  border-top:1px solid rgba(255,255,255,.03);margin-top:6px;
}
.moment-action-btn{
  display:flex;align-items:center;gap:4px;
  font-size:12px;color:var(--tbp-text-dim);
  background:none;border:none;cursor:pointer;
  padding:2px 4px;border-radius:4px;transition:all .12s;
  font-family:inherit;
}
.moment-action-btn:hover{color:var(--tbp-text-secondary)}
.moment-action-btn .icon{font-size:15px}
.moment-action-btn.liked{color:var(--tbp-danger)}
.moment-delete-btn{
  margin-left:auto;font-size:0.6875rem;color:var(--tbp-text-dim);
  background:none;border:none;cursor:pointer;
  padding:2px 6px;border-radius:4px;transition:all .12s;
  font-family:inherit;
}
.moment-delete-btn:hover{color:var(--tbp-danger);background:var(--tbp-danger-bg)}

/* 评论区（超过6条折叠） */
.moment-comments{padding:0 16px 8px 64px}
.moment-comments.collapsed{max-height:156px;overflow:hidden;position:relative}
.moment-comments.collapsed::after{
  content:'';position:absolute;bottom:0;left:16px;right:16px;height:40px;
  background:linear-gradient(transparent,var(--tbp-bg-card,#1a1d27));pointer-events:none
}
.moment-comments-expand{
  display:block;width:100%;margin-top:0;padding:4px 0 2px 64px;
  font-size:12px;color:var(--tbp-accent-light,var(--tbp-accent));
  background:none;border:none;cursor:pointer;text-align:left;font-family:inherit
}
.moment-comments-expand:hover{opacity:.8}
.moment-comment{display:block;padding:3px 0;font-size:13px;line-height:1.6}
.moment-comment-head{display:flex;align-items:center;gap:4px;flex-shrink:0;margin-bottom:1px}
.moment-comment-name{color:var(--tbp-accent);font-weight:600;flex-shrink:0}
.moment-comment-name.teacher-name{color:var(--tbp-gold)}
.moment-comment-badge{font-size:0.6875rem;padding:0 5px;border-radius:6px;line-height:18px;flex-shrink:0;white-space:nowrap}
.moment-comment-reply-to{font-size:0.6875rem;color:var(--tbp-text-dim);white-space:nowrap;flex-shrink:0}
.moment-comment-text{color:var(--tbp-text-secondary);word-break:break-word}

.moment-comment-input{display:flex;gap:8px;padding:6px 16px 10px 64px}
.moment-comment-input input{
  flex:1;background:var(--tbp-bg-primary);
  border:1px solid var(--tbp-border);border-radius:var(--tbp-radius-full);
  padding:5px 12px;font-size:12px;color:var(--tbp-text-secondary);
  outline:none;font-family:inherit;
}
.moment-comment-input input:focus{border-color:var(--tbp-accent)}
.moment-comment-input input::placeholder{color:var(--tbp-text-muted)}
.moment-comment-send{
  flex-shrink:0;padding:5px 14px;font-size:12px;font-weight:500;
  background:var(--tbp-accent);color:#fff;border:none;
  border-radius:var(--tbp-radius-full);cursor:pointer;transition:opacity .15s;
}
.moment-comment-send:hover{opacity:.85}
.moment-comment-send:active{opacity:.7}

/* 评论删除按钮 */
.moment-comment-del{
  flex-shrink:0;margin-left:6px;width:22px;height:22px;line-height:22px;
  text-align:center;font-size:16px;font-weight:700;color:var(--tbp-text-muted);cursor:pointer;
  border-radius:50%;border:none;background:transparent;transition:all .15s;opacity:0;padding:0;font-family:inherit;
}
.moment-comment:hover .moment-comment-del{opacity:1}
.moment-comment-del:hover{color:#fff;background:var(--tbp-danger)}

/* 回复按钮 */
.moment-comment-reply{
  flex-shrink:0;margin-left:6px;padding:1px 8px;font-size:0.6875rem;color:var(--tbp-text-muted);
  border:1px solid var(--tbp-border);border-radius:10px;background:transparent;
  cursor:pointer;transition:all .15s;opacity:0;font-family:inherit;white-space:nowrap;
}
.moment-comment:hover .moment-comment-reply{opacity:1}
.moment-comment-reply:hover{color:var(--tbp-accent);border-color:var(--tbp-accent);background:var(--tbp-accent-bg)}

/* @mention 下拉 */
.mention-dropdown{
  position:absolute;z-index:var(--tbp-z-max);background:var(--tbp-bg-card);border:1px solid var(--tbp-border);
  border-radius:10px;box-shadow:0 8px 24px rgba(0,0,0,.15);overflow:hidden;display:none;
}
.mention-item{
  display:flex;align-items:center;gap:10px;padding:8px 14px;font-size:13px;
  color:var(--tbp-text-primary);cursor:pointer;transition:background .12s;
}
.mention-item:hover,.mention-item.selected{background:var(--tbp-accent-bg);color:var(--tbp-accent)}
.mention-avatar{
  width:26px;height:26px;border-radius:50%;background:var(--tbp-accent);color:#fff;
  display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:600;flex-shrink:0;
}
.mention-name{font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}

/* 加载更多 */
.moments-load-more{
  text-align:center;padding:20px;font-size:13px;
  color:var(--tbp-text-dim);cursor:pointer;transition:color .15s;
}
.moments-load-more:hover{color:var(--tbp-text-tertiary)}

/* 空状态 */
.moments-empty{
  display:flex;flex-direction:column;align-items:center;
  justify-content:center;padding:60px 20px;color:var(--tbp-text-dim);
}
.moments-empty-icon{font-size:48px;margin-bottom:12px}
.moments-empty-text{font-size:14px}

/* 发布弹窗 */
.moments-publish-modal{display:none}
.moments-publish-modal.show{display:flex}
.moments-publish-box textarea{
  width:100%;height:120px;margin:8px 0;
  background:var(--tbp-bg-primary);border:1px solid var(--tbp-border);
  border-radius:var(--tbp-radius-md);padding:12px;
  font-size:14px;color:var(--tbp-text-primary);
  font-family:inherit;resize:none;outline:none;
}
.moments-publish-box textarea:focus{border-color:var(--tbp-accent)}
.moments-publish-box .file-hint{
  font-size:0.6875rem;color:var(--tbp-text-dim);margin-bottom:8px;
}
.moments-publish-box input[type="file"]{display:none}
.moments-publish-box .file-label{
  font-size:12px;color:var(--tbp-accent-light);cursor:pointer;
  display:inline-flex;align-items:center;gap:4px;
}
.moments-publish-box .file-label:hover{opacity:.8}
.moments-preview-grid{
  display:flex;flex-wrap:wrap;gap:6px;margin-top:8px;
}
.moments-preview-grid .preview-item{
  width:64px;height:64px;border-radius:6px;overflow:hidden;
  border:1px solid var(--tbp-border);position:relative;
}
.moments-preview-grid .preview-item img{
  width:100%;height:100%;object-fit:cover;
}
.moments-preview-grid .preview-item .preview-remove{
  position:absolute;top:2px;right:2px;
  width:16px;height:16px;border-radius:50%;
  background:rgba(0,0,0,.6);color:#fff;
  font-size:0.6875rem;line-height:16px;text-align:center;
  cursor:pointer;display:none;
}
.moments-preview-grid .preview-item:hover .preview-remove{display:block}

/* 点赞动画 */
@keyframes likeBounce{
  0%{transform:scale(1)}
  30%{transform:scale(1.3)}
  60%{transform:scale(.9)}
  100%{transform:scale(1)}
}

/* sidebar 按钮激活态 */
.sidebar-action-btn.active{
  background:rgba(102,126,234,.15);border-color:var(--tbp-accent);color:var(--tbp-accent-light);
}

/* ===== H5 移动端元素桌面端默认隐藏（仅大屏生效，不在移动端覆盖 @media 内的 display:flex） ===== */
@media (min-width:769px){
  .mobile-tabbar{display:none}
  .mobile-hamburger{display:none}
  .mobile-sidebar-overlay{display:none}
}

/* ===== 确认关闭弹窗 ===== */
/* 🍞 2026-07-28(确认弹窗被墙压根治·用户实锤"删除子Agent点了没反应"): #confirmModal 从 z-dropdown(100) 提 z-max(10000)——
   确认弹窗语义=系统级覆盖（任何浮层/卡片墙之上都必须可见可点）；showConfirmDialog 全场景受益（删子Agent/关闭对话等） */
#confirmModal.modal-overlay{z-index:var(--tbp-z-max)}
.confirm-modal .modal-box{max-width:420px}
.confirm-danger-icon{font-size:42px;text-align:center;margin-bottom:10px;line-height:1}
.confirm-title{font-size:15px;font-weight:600;color:var(--tbp-text-primary);text-align:center;margin-bottom:2px}
.confirm-subtitle{font-size:12px;color:var(--tbp-text-dim);text-align:center;margin-bottom:14px}
.confirm-body-text{font-size:13px;color:var(--tbp-text-secondary);line-height:1.7;margin-bottom:12px}
.confirm-list{list-style:none;font-size:12px;color:var(--tbp-text-tertiary);line-height:1.9}
.confirm-list li::before{content:'• ';color:var(--tbp-danger);margin-right:4px}
.confirm-warn{font-size:0.6875rem;color:#f59e0b;line-height:1.6;margin-top:10px;padding:8px 12px;background:rgba(245,158,11,.06);border-radius:6px;border:1px solid rgba(245,158,11,.1)}
#btnConfirmOk{background:linear-gradient(135deg,#ef4444,#dc2626);color:#fff;border:none;padding:8px 20px;border-radius:8px;font-size:13px;cursor:pointer;transition:opacity .2s}
#btnConfirmOk:hover{opacity:.9}

/* ===== 任务继续执行浮动条 ===== */
.task-continue-bar{
  position:fixed;bottom:20px;left:50%;transform:translateX(-50%);
  z-index:var(--tbp-z-modal);animation:continueSlideUp .3s ease;
}
@keyframes continueSlideUp{from{opacity:0;transform:translateX(-50%) translateY(16px)}to{opacity:1;transform:translateX(-50%) translateY(0)}}
.task-continue-inner{
  display:flex;align-items:center;gap:12px;
  padding:10px 18px;
  background:rgba(22,27,34,.95);backdrop-filter:blur(12px);
  border:1px solid rgba(245,158,11,.4);border-radius:12px;
  box-shadow:0 4px 20px rgba(0,0,0,.4);
}
.task-continue-icon{font-size:16px}
.task-continue-text{font-size:13px;color:#f59e0b;white-space:nowrap}
.task-continue-btn{
  padding:6px 16px;border:none;border-radius:8px;
  background:linear-gradient(135deg,var(--tbp-accent),var(--tbp-accent-2));
  color:#fff;font-size:13px;font-weight:600;cursor:pointer;
  transition:opacity .15s;white-space:nowrap;
}
.task-continue-btn:hover{opacity:.9}
.task-continue-btn:disabled{opacity:.4;cursor:not-allowed}
.task-continue-close{
  width:24px;height:24px;border-radius:50%;border:none;
  background:rgba(255,255,255,.08);color:#9ca3af;
  font-size:12px;cursor:pointer;display:flex;
  align-items:center;justify-content:center;transition:all .15s;
}
.task-continue-close:hover{background:rgba(239,68,68,.2);color:#ef4444}
