/* 工作台基础样式：主题变量、消息、代码差异、任务与表单。
 * Focus 新版外壳、共享组件和响应式布局由 focus.css 统一负责。
 */
*{box-sizing:border-box}
html,body{height:100%;margin:0;background:var(--bg);color:var(--text);font-size:14px}
body{overflow:hidden;font-family:Inter,-apple-system,BlinkMacSystemFont,"SF Pro Text","PingFang SC","Microsoft YaHei",sans-serif;letter-spacing:-.005em}
button,input,textarea,select{font:inherit;color:inherit}
button{cursor:pointer;border:1px solid transparent;border-radius:8px;background:transparent;color:var(--text);transition:background .15s,border-color .15s,color .15s,transform .15s}
button:hover{background:var(--surface-soft);color:var(--text)}
button:active{transform:translateY(1px)}
button:disabled{cursor:not-allowed;opacity:.45}
button:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible{outline:2px solid color-mix(in srgb,var(--focus) 65%,transparent);outline-offset:2px}
.primary{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:650}
.primary:hover{background:var(--accent-strong);border-color:var(--accent-strong);color:#fff}
.hidden{display:none!important}
.muted{color:var(--muted)}
.small{font-size:12px}
.eyebrow{margin:0;color:var(--muted);font-size:10px;font-weight:700;letter-spacing:.12em;text-transform:uppercase}
.error{color:var(--danger);min-height:1.2em}
.notice{padding:11px 13px;border:1px solid color-mix(in srgb,var(--warning) 32%,var(--border));border-radius:9px;background:color-mix(in srgb,var(--warning) 8%,var(--surface));color:var(--warning);line-height:1.55}
.row{display:flex;align-items:center;gap:10px}
.row.end{justify-content:flex-end}
.two-col{display:grid;grid-template-columns:1fr 1fr;gap:12px}

/* ── 主题变量：默认（无 data-theme 时，登录页首屏用）与 clean-light 取自设计稿原色板 ── */
:root,[data-theme="clean-light"]{
  --bg:#f7f8fa;--surface:#fff;--surface-raised:#fff;--surface-soft:#f1f3f6;
  --border:#e4e7ec;--border-strong:#cfd5de;--text:#18202a;--muted:#78818e;--muted-dark:#9aa2ae;
  --accent:#3163e8;--accent-strong:#2851c9;--focus:#3163e8;
  --success:#209768;--waiting:#b7791f;--failure:#c94550;--danger:#c94550;--warning:#b7791f;
  --shadow:0 14px 38px rgba(22,32,49,.08);--radius:10px;
  --code-highlight:#f1f3f6;--diff-add:#167b50;--diff-remove:#b23a45;
  --modal:rgba(15,25,38,.35);--scrollbar:#cfd5de;color-scheme:light
}
[data-theme="warm-paper-light"]{
  --bg:#f8f4ec;--surface:#fffdf8;--surface-raised:#fffdf8;--surface-soft:#f1ece0;
  --border:#e6ddc9;--border-strong:#d6c9a9;--text:#2b2013;--muted:#7a6f57;--muted-dark:#9c9075;
  --accent:#8a5a2b;--accent-strong:#6e4520;--focus:#8a5a2b;
  --success:#3f7d3a;--waiting:#a3742c;--failure:#a3402c;--danger:#a3402c;--warning:#a3742c;
  --shadow:0 14px 38px rgba(50,40,20,.09);--radius:10px;
  --code-highlight:#efe6d3;--diff-add:#3f7d3a;--diff-remove:#a3402c;
  --modal:rgba(30,22,10,.36);--scrollbar:#d6c9a9;color-scheme:light
}
[data-theme="graphite-dark"]{
  --bg:#111318;--surface:#181b22;--surface-raised:#1d212a;--surface-soft:#242934;
  --border:#2b303b;--border-strong:#3c4451;--text:#e8ebf1;--muted:#99a1af;--muted-dark:#6f7888;
  --accent:#5b82f2;--accent-strong:#7b9dff;--focus:#7b9dff;
  --success:#3ecf8e;--waiting:#e0b76a;--failure:#f0838f;--danger:#f0838f;--warning:#e0b76a;
  --shadow:0 18px 44px rgba(0,0,0,.32);--radius:10px;
  --code-highlight:#1b202a;--diff-add:#3ecf8e;--diff-remove:#f0838f;
  --modal:rgba(0,0,0,.6);--scrollbar:#3c4451;color-scheme:dark
}

.brand-mark{display:block;width:34px;height:34px;object-fit:contain}

/* ── 登录页 ── */
.login-page{display:grid;place-items:center;min-height:100dvh;padding:30px;background:var(--bg)}
.login-card{width:min(440px,100%);padding:36px;border:1px solid var(--border);border-radius:16px;background:var(--surface);box-shadow:var(--shadow)}
.login-card .brand-mark{margin-bottom:20px}
.login-card h1{margin:8px 0 12px;font-size:26px;line-height:1.25;letter-spacing:-.03em}
.login-card>p{line-height:1.6;color:var(--muted)}
.login-card form{display:grid;gap:14px;margin:22px 0 14px}
.login-card form button{width:100%;padding:11px 14px}
label{display:grid;gap:6px;color:var(--muted);font-size:12px;font-weight:600}
input,textarea,select{width:100%;border:1px solid var(--border);border-radius:8px;background:var(--surface);color:var(--text);outline:none;padding:9px 11px}
input:hover,textarea:hover,select:hover{border-color:var(--border-strong)}
input:focus,textarea:focus,select:focus{border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 16%,transparent)}
textarea{min-height:100px;line-height:1.55;resize:vertical}
select{appearance:auto}

/* ── 外壳：72/286/1fr/298 四栏结构用 CSS 变量表达，收起/展开/聊天态只改变量，
   不再靠一大串类名组合分别覆盖 grid-template-columns（历史版本这里有层叠顺序 bug，
   right-panel-collapsed 在聊天态下会被后来的 .is-chat 规则覆盖失效，这次一并修正）。 */
.shell{
  --rail-w:64px;--sidebar-w:252px;--right-w:0px;
  display:grid;height:100dvh;min-height:0;
  grid-template-columns:var(--rail-w) var(--sidebar-w) minmax(0,1fr) var(--right-w);
  background:var(--bg)
}
/* 显式钉住每列的位置：#context-panel 在非会话视图 display:none 之后，
   隐式网格定位会把 main 挤进它腾出来的第 2 列（宽度是 --sidebar-w，会被折叠成 0），
   而不是第 3 列的 minmax(0,1fr)——固定列号让 main 不受兄弟元素显隐影响。 */
#rail{grid-column:1}
.shell #context-panel{grid-column:2}
.shell>main{grid-column:3}
.shell #right-panel{grid-column:4}
.shell.is-chat{--right-w:312px}
.shell.is-chat.right-panel-collapsed{--right-w:40px}
.shell:not(.is-chat) #right-panel{display:none}
.shell:not(.is-chat){--sidebar-w:0px}
.shell:not(.is-chat) #context-panel{display:none}
.shell.right-panel-collapsed .right-panel-tabs,.shell.right-panel-collapsed .right-panel-body{display:none}
.shell.right-panel-collapsed [data-action="toggle-right-panel"]{transform:rotate(180deg)}
.status-bar{display:none}

/* ── 主导航 rail：图标在上、标签在下的方形按钮，取自设计稿 .rail-btn ── */
#rail{display:flex;flex-direction:column;align-items:center;height:100dvh;min-height:0;padding:14px 8px;gap:4px;background:var(--surface);border-right:1px solid var(--border);overflow:hidden}
#rail .brand-mark{margin-bottom:14px}
#rail button{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;width:54px;height:54px;padding:4px 2px;border-radius:12px;color:var(--muted);font-size:11px;line-height:1;transition:background .15s,color .15s}
#rail button:hover{background:var(--surface-soft);color:var(--text)}
#rail button.active{background:color-mix(in srgb,var(--accent) 11%,var(--surface));color:var(--accent)}
#rail .rail-icon{font-size:19px;line-height:20px}
#rail .rail-label{font-size:10px;line-height:12px;white-space:nowrap}
.rail-spacer{flex:1}
.rail-sep{width:28px;height:1px;margin:5px 0;background:var(--border)}

/* ── 会话栏 / 上下文面板 ── */
#context-panel{display:flex;flex-direction:column;height:100dvh;min-height:0;overflow:hidden;padding:18px 14px;background:var(--surface);border-right:1px solid var(--border);transition:padding .15s}
.brand{display:flex;align-items:center;margin-bottom:18px}
.brand-logo{height:22px;width:auto;object-fit:contain}
#context-panel>label{padding:0 3px;color:var(--muted);font-size:11px;font-weight:600}
#project-select{margin-top:6px}
.sidebar-workspace{display:flex;flex:1;flex-direction:column;min-height:150px;margin-top:16px;padding:15px 0 8px;border-top:1px solid var(--border)}
.sidebar-section-head{display:flex;align-items:center;justify-content:space-between;margin:0 4px 8px;color:var(--text);font-size:12px;font-weight:650}
.sidebar-head-actions{display:flex;align-items:center;gap:2px}
.icon-button{width:28px;height:28px;padding:0;background:transparent;color:var(--muted);font-size:17px;line-height:1}
.icon-button:hover{background:var(--surface-soft);color:var(--accent)}
#conversation-search{margin:0 2px 9px;padding:8px 10px;background:var(--bg);border-color:transparent;font-size:12px}
#conversation-search:focus{background:var(--surface);border-color:var(--border-strong)}
#sidebar-conversations{min-height:0;overflow:auto;padding:0 2px 4px 0}
.conversation-section-title{margin:14px 6px 6px;color:var(--muted-dark);font-size:10px;letter-spacing:.09em;text-transform:uppercase}
.conversation-item{display:block;width:100%;margin:1px 0;padding:9px 10px;border-radius:9px;text-align:left;white-space:nowrap;overflow:hidden;color:var(--muted)}
.conversation-item:hover{background:var(--surface-soft);color:var(--text)}
.conversation-item.active{background:color-mix(in srgb,var(--accent) 10%,var(--surface));color:var(--accent)}
.conversation-item.filtered-out{display:none}
.conversation-title-row{display:flex;align-items:center;gap:6px;overflow:hidden}
.conversation-title{display:block;overflow:hidden;text-overflow:ellipsis}
.conversation-sub{display:flex;align-items:center;gap:6px;margin-top:3px}
.conversation-item small{display:block;overflow:hidden;text-overflow:ellipsis;color:var(--muted-dark);font-size:10px}
.invited-badge{flex:0 0 auto;padding:1px 6px;border-color:color-mix(in srgb,var(--accent) 40%,var(--border));background:color-mix(in srgb,var(--accent) 12%,var(--surface-soft));color:var(--accent)}
.sidebar-empty{padding:20px 8px;color:var(--muted);font-size:12px;line-height:1.5}
.sidebar-bottom{flex:0 0 auto;margin-top:14px;padding-top:12px;border-top:1px solid var(--border);color:var(--muted)}
.avatar{display:inline-flex;flex:0 0 auto;align-items:center;justify-content:center;width:22px;height:22px;border-radius:50%;color:#fff;font-size:10px;font-weight:600;letter-spacing:.02em;line-height:1}
.avatar-user{background:linear-gradient(145deg,color-mix(in srgb,var(--avatar) 82%,#fff) 0%,var(--avatar) 55%,color-mix(in srgb,var(--avatar) 78%,#000) 100%);box-shadow:inset 0 0 0 1px rgb(255 255 255 / .18)}
.avatar-agent{border-radius:6px;box-shadow:inset 0 0 0 1px rgb(255 255 255 / .22)}
.avatar-c0{--avatar:#3b6fd1}.avatar-c1{--avatar:#1f9e89}.avatar-c2{--avatar:#c2478a}.avatar-c3{--avatar:#d97706}.avatar-c4{--avatar:#6b5bd6}.avatar-c5{--avatar:#0891b2}.avatar-c6{--avatar:#be123c}.avatar-c7{--avatar:#4d7c0f}
.avatar-agent-planner{background:#3b6fd1}.avatar-agent-coding{background:#1f9e89}.avatar-agent-reviewer{background:#8452d5}.avatar-agent-researcher{background:#d97706}.avatar-agent-reporter{background:#c2478a}.avatar-agent-release{background:#55606e}.avatar-agent-analyst{background:#0891b2}
.avatar-agent svg{width:14px;height:14px;display:block}
.avatar-sm.avatar-agent svg{width:10px;height:10px}
.avatar-lg{width:34px;height:34px;font-size:14px}
.avatar-lg.avatar-agent svg{width:20px;height:20px}
.avatar-sm{width:16px;height:16px;font-size:8px}
.avatar-stack{display:inline-flex;flex:0 0 auto}
.avatar-stack .avatar{margin-left:-6px;border:1.5px solid var(--surface)}
.avatar-stack .avatar:first-child{margin-left:0}
.avatar-more{background:var(--surface-soft);color:var(--muted)}
.member-identity{display:flex;align-items:center;gap:10px}

/* ── 主区：顶栏 / 内容 / 页脚 ── */
main{display:grid;height:100dvh;min-height:0;grid-template-rows:auto minmax(0,1fr) auto;overflow:hidden;background:var(--bg)}
header{display:flex;align-items:center;justify-content:space-between;gap:20px;min-height:58px;padding:0 24px;border-bottom:1px solid var(--border);background:var(--surface)}
.header-main{display:flex;align-items:center;gap:16px;min-width:0}
.header-search{display:flex;align-items:center;gap:8px;width:min(360px,38vw);padding:8px 11px;border:1px solid var(--border);border-radius:9px;color:var(--muted);background:var(--bg);font-size:12px}
.header-search .search-icon{font-size:16px;line-height:1;color:var(--text)}
.header-search input{border:0;background:transparent;padding:0}
.header-search kbd{margin-left:auto;padding:2px 5px;border:1px solid var(--border);border-radius:4px;color:var(--muted-dark);font-size:10px;background:var(--surface-soft)}
.header-heading{display:flex;align-items:baseline;gap:8px;min-width:0}
.header-heading .eyebrow{display:none}
header h2{margin:0;font-size:14px;font-weight:650;color:var(--muted);letter-spacing:-.01em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.header-tools{display:flex;align-items:center;gap:9px}
#page-actions{display:flex;gap:6px;align-items:center}
.header-tool{width:30px;height:30px;padding:0;border-radius:8px;color:var(--muted);font-size:17px}
.header-tool:hover{background:var(--surface-soft);color:var(--text)}
.header-avatar{display:grid;place-items:center;width:30px;height:30px;border-radius:50%;background:var(--text);color:var(--bg);font-size:11px;font-weight:700}
.workspace-content{min-height:0;overflow:auto;padding:26px 30px 32px;max-width:1240px;width:100%;margin:0 auto}
.workspace-content:has(.chat-layout){max-width:none;margin:0;padding:0;overflow:hidden}
footer{margin:0;padding:8px 24px;border-top:1px solid var(--border);background:var(--surface);color:var(--muted-dark);font-size:10px}

/* ── 通用内容组件：卡片 / 徽标 / 任务行 / 事件 / 代码块 / 键值表 ── */
.panel,.card{border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);box-shadow:none}
.panel{padding:18px}
.card{padding:15px}
.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:12px}
.card h3,.panel h3{margin:0 0 9px;font-size:13px;font-weight:650}
.card p,.panel p{line-height:1.55}
.card-top{display:flex;align-items:flex-start;justify-content:space-between;gap:16px}
.card-top button,.task-actions button,.card button{padding:6px 10px;font-size:11px}
.empty{display:grid;place-items:center;min-height:170px;padding:28px;color:var(--muted);text-align:center;line-height:1.6}
.badge{display:inline-flex;align-items:center;width:max-content;padding:2px 8px;border:1px solid var(--border);border-radius:999px;background:var(--surface-soft);color:var(--muted);font-size:10px;line-height:1.5}
.badge.good{border-color:color-mix(in srgb,var(--success) 35%,var(--border));background:color-mix(in srgb,var(--success) 12%,var(--surface));color:var(--success)}
.badge.bad{border-color:color-mix(in srgb,var(--failure) 35%,var(--border));background:color-mix(in srgb,var(--failure) 12%,var(--surface));color:var(--failure)}
.task-line{display:grid;grid-template-columns:minmax(0,1fr) auto auto auto;align-items:center;gap:12px;min-height:58px;padding:10px 4px;border-bottom:1px solid var(--border)}
.task-line:last-child{border-bottom:0}
.task-line p{margin:0 0 4px}
.task-owner{min-width:68px;color:var(--muted)}
.event{padding:11px 0;border-bottom:1px solid var(--border)}
.event:last-child{border-bottom:0}
.event small{display:block;color:var(--muted)}
pre{margin:10px 0;padding:12px;border:1px solid var(--border);border-radius:8px;background:var(--code-highlight);color:var(--text);white-space:pre-wrap;word-break:break-word;font:12px/1.55 ui-monospace,SFMono-Regular,Menlo,monospace}
.fact-list{display:grid;grid-template-columns:auto 1fr;gap:8px 16px;font-size:12px}
.fact-list dt{color:var(--muted)}
.fact-list dd{margin:0;color:var(--text)}
.check-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin:9px 0 16px}
.check-grid label{display:flex;align-items:center;gap:7px;padding:8px 10px;border:1px solid var(--border);border-radius:8px;background:var(--surface-soft);font-weight:500}
.check-grid input{width:auto}
.detail-grid{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(260px,.7fr);gap:14px}
.detail-grid>.card{min-width:0}
.events{max-height:600px;overflow:auto}
.task-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:15px}
.task-actions button{padding:7px 12px}
.child{padding-left:16px;border-left:2px solid var(--border-strong)}

/* ── 工作台首页 ── */
.home-greeting{display:flex;align-items:flex-end;justify-content:space-between;margin-bottom:22px}
.home-greeting h1{margin:6px 0 0;font-size:26px;font-weight:700;letter-spacing:-.04em}
.home-greeting .sub{margin:6px 0 0;color:var(--muted);font-size:13px}
.home-date{align-self:flex-end;color:var(--muted);font-size:12px;padding-bottom:4px}
.attention-panel{border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);overflow:hidden;margin-bottom:26px}
.attention-panel .section-head{margin:0;padding:14px 16px;border-bottom:1px solid var(--border)}
.attention-panel .section-head h3{font-size:13px}
.text-button{padding:0;color:var(--muted);font-size:11px;background:transparent}
.text-button:hover{color:var(--accent);background:transparent}
.attention-row{display:grid;grid-template-columns:28px minmax(0,1fr) auto 16px;align-items:center;gap:10px;width:100%;padding:12px 16px;border:0;border-bottom:1px solid var(--border);border-radius:0;background:transparent;text-align:left}
.attention-row:last-child{border-bottom:0}
.attention-row:hover{background:var(--surface-soft)}
.attention-icon{display:grid;place-items:center;width:26px;height:26px;border-radius:8px;background:color-mix(in srgb,var(--accent) 13%,var(--surface));color:var(--accent);font-weight:700;font-size:12px}
.attention-row.violet .attention-icon{background:#eeeaff;color:#7358d8}
.attention-row.red .attention-icon{background:color-mix(in srgb,var(--danger) 14%,var(--surface));color:var(--danger)}
.attention-copy strong,.attention-copy small{display:block}
.attention-copy strong{font-size:12px;font-weight:650}
.attention-copy small{margin-top:3px;color:var(--muted);font-size:11px}
.attention-row>b{font-size:17px;font-weight:680}
.chevron{color:var(--muted-dark);font-size:17px}
.home-grid{display:grid;grid-template-columns:minmax(0,1.55fr) minmax(260px,.75fr);gap:28px;align-items:start}
.home-main{min-width:0}
.section-head{display:flex;align-items:center;justify-content:space-between;margin:0 0 11px}
.section-head h3{margin:0;font-size:13px;font-weight:650}
.section-head button{padding:5px 9px;font-size:11px}
.count-label{color:var(--muted);font-size:11px;font-weight:400;margin-left:5px}
.task-table{border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);overflow:hidden}
.task-table-head,.task-row{display:grid;grid-template-columns:minmax(0,1fr) 92px 94px 48px;gap:12px;align-items:center}
.task-table-head{padding:9px 12px;color:var(--muted-dark);font-size:10px;font-weight:600;background:var(--surface-soft);border-bottom:1px solid var(--border)}
.task-row{min-height:60px;padding:9px 12px;border-bottom:1px solid var(--border)}
.task-row:last-child{border-bottom:0}
.task-row:hover{background:var(--surface-soft)}
.task-name{display:flex;align-items:center;gap:10px;min-width:0}
.task-name strong,.task-name small{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.task-name strong{font-size:12px;font-weight:600}
.task-name small{margin-top:3px;color:var(--muted);font-size:10px}
.task-dot{width:7px;height:7px;border-radius:50%;background:var(--accent);flex:0 0 auto}
.task-dot.queued,.task-dot.draft,.task-dot.waiting{background:color-mix(in srgb,var(--accent) 60%,var(--muted))}
.task-dot.review{background:var(--warning)}
.task-dot.failed,.task-dot.interrupted,.task-dot.blocked{background:var(--danger)}
.task-state{font-size:10px;color:var(--accent)}
.task-state.review{color:var(--warning)}
.task-state.failed,.task-state.interrupted,.task-state.blocked{color:var(--danger)}
.task-time{color:var(--muted);font-size:10px}
.task-row button{padding:5px 7px;color:var(--muted);font-size:10px;background:transparent}
.task-row button:hover{color:var(--accent)}
.search-hidden{display:none!important}
.home-side{display:flex;flex-direction:column;gap:12px}
.side-card{padding:15px;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface)}
.side-card-title{display:flex;align-items:center;gap:5px}
.side-card h3{margin:0;font-size:12px;font-weight:650}
.info-dot{display:grid;place-items:center;width:15px;height:15px;border:1px solid var(--border-strong);border-radius:50%;color:var(--muted);font-size:9px}
.token-number{margin-top:14px;font-size:21px;font-weight:700;letter-spacing:-.03em}
.token-number span{font-size:11px;font-weight:400;color:var(--muted)}
.token-bar{height:6px;margin:10px 0 8px;border-radius:999px;background:var(--surface-soft);overflow:hidden}
.token-bar span{display:block;height:100%;border-radius:inherit;background:var(--accent)}
.token-meta{display:flex;justify-content:space-between;color:var(--muted);font-size:10px}
.legend{display:inline-block;width:7px;height:7px;margin-right:5px;border-radius:50%;background:var(--accent)}
.side-card .section-head{margin:0 0 6px}
.activity-list{border-top:1px solid var(--border)}
.activity-row{display:flex;gap:9px;padding:10px 0;border-bottom:1px solid var(--border)}
.activity-row:last-child{border-bottom:0}
.activity-dot{width:7px;height:7px;margin-top:5px;border-radius:50%;background:var(--success);flex:0 0 auto}
.activity-dot.red{background:var(--danger)}
.activity-row p{margin:0;font-size:11px;line-height:1.45}
.activity-row p small{display:block;color:var(--muted);font-size:10px;margin-top:3px}
.skill-list{border-top:1px solid var(--border)}
.skill-row{display:grid;grid-template-columns:24px minmax(0,1fr) 12px;align-items:center;gap:8px;width:100%;padding:9px 0;border:0;border-bottom:1px solid var(--border);background:transparent;text-align:left}
.skill-row:last-child{border-bottom:0}
.skill-row strong,.skill-row small{display:block}
.skill-row strong{font-size:11px}
.skill-row small{margin-top:3px;color:var(--muted);font-size:10px}
.skill-row>span:last-child{color:var(--muted-dark)}
.skill-symbol{display:grid;place-items:center;width:22px;height:22px;border-radius:7px;background:color-mix(in srgb,var(--accent) 12%,var(--surface));color:var(--accent);font-size:12px}

/* ── 会话（聊天）视图 ── */
.chat-layout{height:100%;min-height:0;display:flex;background:var(--bg)}
.chat-main{display:flex;flex:1;flex-direction:column;height:100%;min-height:0;background:var(--bg)}
.chat-header{flex:0 0 auto;padding:15px 28px;border-bottom:1px solid var(--border);background:var(--surface)}
.chat-title-row{display:flex;align-items:center;justify-content:space-between;gap:20px}
.chat-title-line{display:flex;align-items:center;gap:9px}
.chat-title-line strong{font-size:15px;font-weight:650}
.chat-title-block>.small{display:block;margin-top:5px}
.chat-actions{display:flex;gap:8px}
.chat-actions button{padding:6px 10px;font-size:11px}
.visibility-chip{padding:2px 8px;border-radius:999px;background:var(--surface-soft);color:var(--muted);font-size:10px}
#derive-banner:not(:empty){padding:14px 42px 0}
.messages{flex:1;min-height:0;max-width:930px;width:100%;margin:0 auto;overflow:auto;padding:28px 42px 22px;scrollbar-gutter:stable}
.message{max-width:80%;margin-bottom:22px}
.message .meta{display:flex;align-items:center;gap:8px;margin-bottom:6px;color:var(--muted);font-size:11px}
.message.mine .meta{justify-content:flex-end}
.message .meta strong{color:var(--text)}
.message .meta button{padding:2px 7px;border-color:transparent;background:transparent;color:var(--muted);font-size:10px}
.message .meta button:hover{background:var(--surface-soft);color:var(--text)}
.forwarded-tag{padding:1px 7px;border-radius:999px;background:var(--surface-soft);color:var(--muted);font-size:10px}
.message .attachment{margin-top:6px}
.message .attachment a{display:inline-flex;align-items:center;gap:5px;padding:5px 10px;border:1px solid var(--border);border-radius:8px;background:var(--surface-soft);color:var(--accent);font-size:12px;text-decoration:none}
.message .attachment a:hover{background:color-mix(in srgb,var(--accent) 10%,var(--surface-soft))}
.message .text{padding:0;border:0;border-radius:0;background:transparent;line-height:1.72;word-break:break-word}
.message:not(.agent):not(.system){max-width:100%}
.message:not(.agent):not(.system) .text{margin-left:auto;max-width:68%;border:1px solid color-mix(in srgb,var(--accent) 28%,var(--border));border-radius:16px;background:color-mix(in srgb,var(--accent) 10%,var(--surface));padding:10px 14px;color:var(--text)}
.message.agent{max-width:100%}
.message.agent .text{background:transparent;padding:0}
.message.system{max-width:100%;margin:0 0 16px}
.message.system .text{padding:9px 12px;border:1px solid color-mix(in srgb,var(--warning) 32%,var(--border));border-radius:9px;background:color-mix(in srgb,var(--warning) 7%,var(--surface));color:var(--warning);font-size:12px}
.message .text p{margin:0 0 10px}
.message .text p:last-child{margin-bottom:0}
.message .text ul,.message .text ol{margin:0 0 10px;padding-left:22px}
.message .text li{margin-bottom:4px}
.message .text h1,.message .text h2,.message .text h3,.message .text h4,.message .text h5,.message .text h6{margin:14px 0 8px;line-height:1.35;color:var(--text)}
.message .text h1:first-child,.message .text h2:first-child,.message .text h3:first-child,.message .text h4:first-child{margin-top:0}
.message .text code{padding:2px 5px;border-radius:5px;background:var(--code-highlight);color:var(--text);font:12px/1.4 ui-monospace,SFMono-Regular,Menlo,monospace}
.message .text pre code{padding:0;background:transparent}
.message .text table{width:100%;margin:4px 0 10px;border-collapse:collapse;font-size:12px}
.message .text th,.message .text td{padding:6px 10px;border:1px solid var(--border);text-align:left;vertical-align:top}
.message .text th{background:var(--surface-soft);color:var(--muted);font-weight:650}
.message .text tr:nth-child(even) td{background:color-mix(in srgb,var(--surface-soft) 55%,transparent)}
.message.system[data-pending-task] .text::after{content:'▍';margin-left:2px;opacity:.55;animation:cursor-blink 1s step-end infinite}
@keyframes cursor-blink{50%{opacity:0}}
.composer{flex:0 0 auto;padding:12px 42px 20px;border-top:1px solid var(--border);background:var(--bg)}
.composer-box{position:relative;max-width:930px;margin:0 auto;border:1px solid var(--border-strong);border-radius:12px;background:var(--surface);box-shadow:0 8px 22px rgba(22,32,49,.05)}
.composer-box:focus-within{border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 14%,transparent)}
.composer-toolbar,.composer-bottom{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 12px;color:var(--muted);font-size:10px}
.composer-toolbar{border-bottom:1px solid var(--border)}
.composer-hint kbd{padding:1px 5px;border:1px solid var(--border);border-radius:4px;color:var(--accent);background:var(--surface-soft)}
kbd{font:inherit}
.composer textarea{display:block;min-height:70px;max-height:180px;padding:12px 13px;border:0;background:transparent;resize:none}
.composer textarea:focus{outline:0}
.composer-scope{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-left:auto}
.composer-actions{display:flex;align-items:center;gap:4px;min-width:0}
.model-chip,.composer-icon{height:27px;padding:0 8px;border:1px solid var(--border);border-radius:7px;background:var(--surface-soft);color:var(--muted);font-size:10px;white-space:nowrap}
.model-chip:hover,.composer-icon:hover{border-color:var(--border-strong);color:var(--text)}
.composer-icon{width:27px;padding:0;font-size:14px;background:transparent;border-color:transparent}
.send-button{padding:6px 12px}
.send-button span{opacity:.6;margin-left:5px}
.quote-target{max-width:930px;margin:0 auto 7px;padding:6px 10px;border-left:3px solid var(--accent);background:color-mix(in srgb,var(--accent) 8%,var(--surface));color:var(--text);font-size:11px;cursor:pointer}
.mention-picker{position:absolute;right:10px;bottom:78px;left:10px;z-index:4;max-height:280px;overflow:auto;padding:5px;border:1px solid var(--border);border-radius:10px;background:var(--surface);box-shadow:var(--shadow)}
.mention-option{display:flex;align-items:center;width:100%;gap:10px;padding:8px 9px;border:0;background:transparent;text-align:left;border-radius:8px}
.mention-option:hover,.mention-option.active{background:var(--surface-soft)}
.mention-option strong,.mention-option small{display:block}
.mention-option small{color:var(--muted);font-size:10px}
.mention-avatar{display:grid;place-items:center;width:26px;height:26px;border-radius:8px;background:color-mix(in srgb,var(--accent) 13%,var(--surface));color:var(--accent);font-size:12px}
.mention-avatar.member{background:var(--surface-soft);color:var(--muted)}

/* ── 右侧检查面板（inspector）── */
#right-panel{display:flex;flex-direction:column;height:100dvh;min-height:0;overflow:hidden;background:var(--surface);border-left:1px solid var(--border)}
.right-panel-head{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:10px 11px 7px;border-bottom:1px solid var(--border)}
.right-panel-tabs{display:flex;flex-wrap:wrap;gap:2px}
.right-panel-tabs button{padding:6px 8px;border-color:transparent;background:transparent;color:var(--muted);font-size:10px}
.right-panel-tabs button.active{background:var(--surface-soft);color:var(--text)}
.right-panel-body{flex:1;min-height:0;overflow:auto;padding:14px}
.right-panel-body .card,.right-panel-body .task-line{margin-bottom:10px;padding:12px}
.right-panel-body h4{margin:0 0 8px;font-size:10px;color:var(--muted);text-transform:uppercase;letter-spacing:.06em}

/* ── 对话框 / 提示 ── */
dialog{width:min(560px,calc(100vw - 32px));max-height:calc(100dvh - 40px);padding:0;border:1px solid var(--border);border-radius:14px;background:var(--surface);color:var(--text);box-shadow:var(--shadow)}
dialog.wide-modal{width:min(760px,calc(100vw - 32px))}
dialog.wide-modal textarea{min-height:320px}
dialog::backdrop{background:var(--modal);backdrop-filter:blur(3px)}
#modal-content{max-height:calc(100dvh - 40px);overflow:auto;padding:22px}
#modal-content h2{margin:0 0 18px;font-size:18px}
#modal-content form{display:grid;gap:13px}
#modal-content h3{margin:3px 0 0;font-size:13px}
.toast{position:fixed;right:24px;bottom:24px;z-index:20;max-width:360px;padding:11px 15px;border:1px solid color-mix(in srgb,var(--success) 35%,var(--border));border-radius:9px;background:color-mix(in srgb,var(--success) 10%,var(--surface));color:var(--success);box-shadow:var(--shadow);font-size:13px}

/* ── 任务进度条 / diff / 任务卡 ── */
.stepper{display:flex;flex-wrap:wrap;align-items:center;gap:0}
.step{padding:4px 10px;border:1px solid var(--border);border-radius:999px;color:var(--muted);font-size:10px;white-space:nowrap}
.step[data-step="done"]{border-color:var(--success);color:var(--success);background:color-mix(in srgb,var(--success) 14%,transparent)}
.step[data-step="current"]{border-color:var(--focus);color:var(--focus);background:color-mix(in srgb,var(--focus) 16%,transparent);font-weight:700}
.step[data-step="bad current"]{border-color:var(--failure);color:var(--failure);background:color-mix(in srgb,var(--failure) 16%,transparent);font-weight:700}
.step-connector{width:14px;height:1px;background:var(--border)}
.step-connector.bad{background:var(--failure)}
.diff-add{display:block;color:var(--diff-add);background:color-mix(in srgb,var(--diff-add) 12%,transparent)}
.diff-remove{display:block;color:var(--diff-remove);background:color-mix(in srgb,var(--diff-remove) 12%,transparent)}
.diff-meta{display:block;color:var(--muted)}
.task-card{display:flex;flex-direction:column;gap:6px;margin-top:8px;padding:10px 12px;border:1px solid var(--border);border-radius:10px;background:var(--surface-soft);font-size:12px;color:var(--muted)}
.task-card-top{display:flex;align-items:center;justify-content:space-between;gap:8px}
.task-card strong{color:var(--text);font-size:13px}
.task-card button{align-self:flex-start;padding:4px 9px;font-size:11px}

/* ── 紧凑密度（自定义主题） ── */
.density-compact .task-card{padding:8px 10px;gap:4px}
.density-compact .card{padding:11px}
.density-compact .panel{padding:12px}
.density-compact .message{margin-bottom:12px}
.density-compact .task-line{padding:6px 4px;min-height:44px}
.density-compact .event{padding:7px 0}
.message.plan{max-width:100%;margin:0 0 18px}
.message.plan .plan-body{padding:12px 14px;border:1px solid color-mix(in srgb,var(--accent) 45%,var(--border));border-left:4px solid var(--accent);border-radius:10px;background:color-mix(in srgb,var(--accent) 6%,var(--surface))}
.message.plan.plan-confirmed .plan-body,.message.plan.plan-running .plan-body,.message.plan.plan-done .plan-body{border-left-color:var(--success)}
.message.plan.plan-blocked .plan-body,.message.plan.plan-failed .plan-body{border-left-color:var(--danger)}
.plan-steps{display:inline-flex;flex-wrap:wrap;align-items:center;gap:4px}
.plan-step{display:inline-flex;align-items:center;gap:5px;padding:2px 8px;border:1px solid var(--border);border-radius:999px;background:var(--surface);font-size:12px;cursor:pointer}
.plan-step-running,.plan-step-queued{border-color:color-mix(in srgb,var(--accent) 60%,var(--border))}
.plan-step-completed,.plan-step-review{border-color:color-mix(in srgb,var(--success) 60%,var(--border))}
.plan-step-failed,.plan-step-interrupted,.plan-step-blocked,.plan-step-cancelled{border-color:color-mix(in srgb,var(--danger) 60%,var(--border))}
.plan-step-waiting{opacity:.65}
.plan-step-arrow{color:var(--muted);font-size:12px}
.plan-step-fields{border:1px solid var(--border);border-radius:10px;padding:8px 12px;margin:8px 0}
.plan-step-fields legend{font-size:12px;color:var(--muted);padding:0 4px}
.message.plan.plan-superseded .plan-body,.message.plan.plan-cancelled .plan-body{opacity:.6;border-left-color:var(--muted)}
.plan-actions{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin-top:8px}
details.snapshot{margin-top:10px}
details.snapshot summary{cursor:pointer;color:var(--muted);font-size:12px}

/* 实时执行反馈：占位气泡里的状态行、可折叠思考；任务详情执行记录里的思考块 */
.live-status{margin:0 0 6px;color:var(--muted);font-size:12px}
.live-status::before{content:"";display:inline-block;width:8px;height:8px;margin-right:6px;border-radius:50%;background:var(--accent);animation:live-pulse 1.2s ease-in-out infinite}
@keyframes live-pulse{0%,100%{opacity:.25}50%{opacity:1}}
.live-thinking,.event-thinking{margin:0 0 8px;border-left:2px solid color-mix(in srgb,var(--accent) 40%,var(--border));padding-left:8px}
.live-thinking summary,.event-thinking summary{cursor:pointer;color:var(--muted);font-size:12px}
.live-thinking pre,.event-thinking pre{max-height:220px;overflow:auto;margin:4px 0 0;color:var(--muted);font-size:12px;white-space:pre-wrap}

/* 执行中：气泡上的停止按钮与输入区上方的执行中条 */
.stop-button{margin-left:auto;padding:1px 10px;border:1px solid color-mix(in srgb,var(--danger) 55%,var(--border));border-radius:999px;background:transparent;color:var(--danger);font-size:12px;cursor:pointer}
.stop-button:disabled{opacity:.5;cursor:default}
.running-bar{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin:0 0 6px;padding:6px 10px;border:1px dashed color-mix(in srgb,var(--accent) 50%,var(--border));border-radius:10px;font-size:12px;color:var(--muted)}
.running-bar .stop-button{margin-left:0}
