/* ================================================================
   项目模式（地基）—— 视图切换、侧栏滑场、工作台双栏骨架
   视图切换严格复刻 knowledge.css：project-view-open class 驱动；
   侧栏滑场：#sidebar.project-mode 时聊天/项目两面板 transform 平移互切。
   ================================================================ */

/* === 四模式颜色令牌（状态持有阶段的视觉标识） === */
:root {
  --mode-ask:   #0067C0;
  --mode-plan:  #8661C5;
  --mode-build: #0F7B0F;
  --mode-agent: #CA5010;
}

[data-theme="dark"] {
  --mode-ask:   #4CA6E8;
  --mode-plan:  #A98BFF;
  --mode-build: #6CCB5F;
  --mode-agent: #F7894A;
}

/* === 视图切换：项目视图打开时隐藏聊天区（同 kb-view-open 模式） === */
#main-area.project-view-open #message-area,
#main-area.project-view-open #input-area {
  display: none;
}

/* === 侧栏滑场：聊天面板 ⇄ 项目面板 === */
/* #sidebar 本身 position:sticky + overflow:hidden（layout.css），
   已天然构成绝对定位面板的包含块与裁剪区，无需再覆写定位 */
.sidebar-panel {
  position: absolute;
  inset: 0;
  display: flex;
  flex-direction: column;
  transition: transform 200ms ease;
}

#sidebar-panel-chat {
  transform: translateX(0);
}

#sidebar-panel-project {
  transform: translateX(100%);
}

#sidebar.project-mode #sidebar-panel-chat {
  transform: translateX(-100%);
}

#sidebar.project-mode #sidebar-panel-project {
  transform: translateX(0);
}

/* === 项目侧栏面板内部 === */
#project-panel-top {
  padding: var(--space-lg) var(--space-sm) var(--space-xs);
  flex-shrink: 0;
}

#project-list {
  flex: 1;
  overflow-y: auto;
  min-height: 0;
  padding: 0 var(--space-sm);
  display: flex;
  flex-direction: column;
  gap: 2px;
}

.project-list-empty {
  padding: var(--space-xl) var(--space-md);
  color: var(--text-tertiary);
  font-size: var(--fs-l4);
  text-align: center;
}

/* 项目卡片：仿会话项视觉（hover 背景 / 圆角 / 间距沿用令牌） */
.project-card {
  padding: var(--space-sm) var(--space-md);
  border-radius: var(--radius-md);
  cursor: pointer;
  transition: background var(--transition-fast);
}

.project-card:hover {
  background: var(--surface-hover);
}

.project-card:active {
  background: var(--surface-pressed);
}

.project-card.active {
  background: var(--surface-hover);
}

.project-card-name {
  font-size: var(--fs-l3);
  font-weight: 500;
  color: var(--text-primary);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.project-card-path {
  font-size: var(--fs-l4);
  color: var(--text-tertiary);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  margin-top: 1px;
}

.project-card-time {
  font-size: var(--fs-l4);
  color: var(--text-tertiary);
  margin-top: 1px;
}

/* hover 操作行（重命名 / 重新定位 / 移除） */
.project-card-actions {
  display: none;
  gap: var(--space-xs);
  margin-top: var(--space-xs);
}

.project-card:hover .project-card-actions {
  display: flex;
}

.project-card-action {
  font-size: var(--fs-l4);
  font-family: var(--font-sans);
  color: var(--text-secondary);
  background: var(--surface-control);
  border: 1px solid var(--rule);
  border-radius: var(--radius-sm);
  padding: 2px 8px;
  cursor: pointer;
  transition: all var(--transition-fast);
}

.project-card-action:hover {
  color: var(--text-primary);
  border-color: var(--text-tertiary);
}

#project-panel-footer {
  flex-shrink: 0;
  padding: var(--space-sm) var(--space-lg);
}

#project-panel-footer .btn-new-chat {
  width: 100%;
  justify-content: center;
}

/* === 项目视图骨架：钉在视口内（对齐 #kb-view），整页不滚动 === */
/* #main-area 在文档流里高度由内容决定；不定高时 #project-view 的 flex:1（basis:0%）
   会盖过 height:100vh，内容把对话列撑出视口（滚动件限高失效、绝对定位标题栏被卷走，
   260817 从聊天会话直接切入项目视图渲染错乱 bug）。与 #main-area.is-home 同款钉高 */
#main-area.project-view-open { height: 100vh; }

#project-view {
  flex: 1;
  height: 100vh;   /* 标题栏在项目视图下为绝对定位覆盖（移出文档流），视图占满全高 */
  flex-direction: column;
  overflow: hidden;
}

/* 项目视图下主标题栏改为覆盖层：对话列消息滚动时可潜入标题栏下方，
   顶部渐变模糊（BlurMirror 镜像）才有内容可模糊（对齐聊天视图观感）。
   有活跃项目时收窄到对话列上方（right:360px 让开文件栏），从根上消除标题栏
   （及其镜像模糊层）对文件栏标签条行的遮挡——文件栏顶距因此只需 30px 对齐
   caption 行；caption 按钮不再压在标题栏上，右预留 138px 同步取消。
   文件栏折叠时恢复全宽（caption 重新回到标题栏上方，恢复预留）。 */
#main-area.project-view-open #chat-header {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  /* right 随文件栏折叠/展开（:has 翻转）同速补间，标题栏与其镜像模糊层
     与文件栏滑场保持同步，不瞬跳 */
  transition: right var(--transition-normal);
}

#main-area.project-view-open.has-project #chat-header {
  right: 360px;
  padding-right: var(--space-xl);
}

#main-area.project-view-open.has-project:has(#project-files-col.collapsed) #chat-header {
  right: 0;
  padding-right: calc(var(--space-xl) + 138px);
}

/* 空态 */
#project-empty {
  flex: 1;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: var(--space-md);
  padding: var(--space-xl);
}

.project-empty-title {
  font-size: var(--fs-l1);
  font-weight: 600;
  color: var(--text-primary);
}

.project-empty-hint {
  font-size: var(--fs-l3);
  color: var(--text-secondary);
  max-width: 420px;
  text-align: center;
  line-height: 1.6;
}

/* 工作台：左对话栏 + 右文件栏（display 由 JS 切 flex/none）；
   position:relative 供折叠态浮动展开钮 #btn-project-files-expand 定位 */
#project-workspace {
  flex: 1;
  min-height: 0;
  position: relative;
}

/* 对话列为滚动容器（对齐聊天视图的文档级滚动模型）：#project-messages 回归
   普通流内容、其 rect 随列滚动移动，BlurMirror 克隆位移公式天然成立；
   内容上潜绝对定位的 #chat-header 下方（padding-top 让位），也从 sticky
   输入卡下方滚过（输入卡磨砂的前提） */
#project-chat-col {
  flex: 1;
  min-width: 0;
  display: flex;
  flex-direction: column;
  min-height: 0;
  overflow-y: auto;
  /* 顶部让出标题栏（52px 覆盖层）：首条消息从标题栏下方开始，
     滚动时内容潜入标题栏下，由镜像模糊层呈现渐变模糊 */
  padding-top: 52px;
}

/* 对话栏头部留在主标题栏 #chat-header 内（随标题栏收窄到对话列上方），
   文件栏头部为文件栏列顶迷你行：两者默认隐藏，项目视图打开且有活跃项目时
   显示（空态由 JS 行内 display:none 压住）；均无 border-bottom（无分层样式）。 */
#project-chat-header,
#project-files-header {
  display: none;
}

/* 项目模式下标题栏左侧（汉堡/容量胶囊）不再独占整行，项目名紧随其后 */
#main-area.project-view-open #header-left {
  flex: 0 0 auto;
}

#main-area.project-view-open #project-chat-header {
  display: flex;
  align-items: center;
  gap: var(--space-md);
  flex: 1;
  min-width: 0;
  margin-left: var(--space-md);
}

/* 文件栏迷你头部：列顶一行（「文件」标题 + 索引状态指示），右侧让开窗口 caption
   按钮——列顶距 30px 与 caption 行同处一个高带，右预留 138px+4px 防止高 DPI 下
   caption 下缘（~45px）覆盖索引状态区 */
#main-area.project-view-open #project-files-header {
  display: flex;
  align-items: center;
  height: 30px;
  flex-shrink: 0;
  box-sizing: border-box;
  padding: 0 calc(138px + var(--space-xs)) 0 var(--space-lg);
  font-size: var(--fs-l3);
  font-weight: 600;
  color: var(--text-primary);
}

/* 折叠态展开入口：浮动于窗口右上角、标题栏与 caption 行之下（top:58px 避开任意
   DPI 的 caption 高度）；DOM 上是 #project-files-col 的后邻兄弟，仅折叠时显现 */
#btn-project-files-expand {
  position: absolute;
  top: 58px;
  right: 10px;
  z-index: 30;
  display: none;
}

#project-files-col.collapsed ~ #btn-project-files-expand {
  display: inline-flex;
}

/* 标题栏内的浮层（会话切换面板）不能继承窗口拖拽区，
   否则点面板空白会拖动窗口（app-region 按 DOM 区域表判定，无视 z-index）。
   索引菜单已随文件栏头部迁回列顶（列内无拖拽区，无需此规则） */
#chat-header .intensity-panel {
  -webkit-app-region: no-drag;
}

#project-name {
  font-size: var(--fs-l2);
  font-weight: 600;
  color: var(--text-primary);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

#project-conv-wrap {
  position: relative;   /* .intensity-panel 绝对定位锚点 */
}

/* 会话切换面板在标题栏，向下展开（.intensity-panel 默认向上，此处反转） */
#project-conv-wrap .intensity-panel {
  bottom: auto;
  top: calc(100% + 6px);
  min-width: 180px;
  max-height: 320px;
  overflow-y: auto;
}

/* 消息列表回归普通流内容（滚动容器是对话列）：自身不再滚动，
   rect 随列滚动移动，BlurMirror 克隆位移天然正确；
   flex-shrink:0——列内容超高时保持内容高、由列溢出滚动（默认 shrink 会压矮列表） */
#project-messages {
  flex-shrink: 0;
  padding: var(--space-md) 0 var(--space-lg);
}

/* 输入区：对齐全局 #input-area / #input-card 的视觉；sticky 置底（对齐聊天
   #input-area），消息从其下方滚过，输入卡镜像磨砂才有内容可糊 */
#project-input-area {
  position: sticky;
  bottom: 0;
  margin-top: auto;   /* 内容不足一屏时把输入区压到底部 */
  flex-shrink: 0;
  width: 100%;
  box-sizing: border-box;
  padding: var(--space-md) var(--space-xl) var(--space-lg);
  background: transparent;
  z-index: 10;
}

#project-input-card {
  position: relative;
  max-width: var(--content-max);
  margin: 0 auto;
  background: var(--surface-card-glass);
  border: 1px solid var(--glass-border);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-md);
  transition: border-color var(--transition-fast), box-shadow var(--transition-fast);
}

#project-input-card:focus-within {
  border-color: var(--accent-border);
  box-shadow: var(--shadow-lg), 0 0 0 3px var(--accent-subtle);
}

/* 与聊天输入框 #message-input 同一组尺寸（14px/1.5、上下 14/6px 节奏、180px 上限） */
#project-message-input {
  width: 100%;
  box-sizing: border-box;
  border: none;
  outline: none;
  resize: none;
  background: transparent;
  color: var(--text-primary);
  font-family: var(--font-sans);
  font-size: var(--fs-l2);
  line-height: var(--lh-l2);
  min-height: 24px;
  max-height: 180px;
  padding: calc(var(--space-sm) + 6px) var(--space-lg) 6px;
}

#project-message-input::placeholder {
  color: var(--text-tertiary);
}

/* 与聊天输入卡 #input-card-footer 同一 padding */
#project-input-footer {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-md);
  padding: 8px 12px 10px;
}

#project-footer-left,
#project-footer-right {
  display: flex;
  align-items: center;
  gap: var(--space-sm);
}

#project-mode-wrap {
  position: relative;   /* .intensity-panel 绝对定位锚点（向上展开，沿用默认方向） */
}

#project-model-wrap {
  position: relative;   /* 模型面板锚点（同上） */
}

#project-model-wrap .intensity-panel {
  min-width: 220px;
  max-height: 320px;
  overflow-y: auto;
}

#project-footer-left .mode-toggle {
  display: inline-flex;
  align-items: center;
}

/* 模式按钮图标：与模式面板行同款 SVG，颜色随按钮文字色（= 当前模式色） */
#btn-project-mode .project-mode-option-icon {
  width: 14px;
  height: 14px;
  margin-right: 6px;
  color: currentColor;
}

/* 模式面板：定宽——锚点 #project-mode-wrap 只有按钮宽，不定宽会被 shrink-to-fit 压成竖条；
   内容实测（图标15+名称3字+info+padding）约需 128px，给 148px 刚好不臃肿 */
#project-mode-wrap .intensity-panel {
  width: 148px;
}

/* 模式面板选项：模式色图标 + 名称 + 信息图标（说明收进悬浮提示）。
   每行以 --row-mode（JS 内联 = var(--mode-*)）做模式色垫底：默认 10%、hover 16%、active 20% 且名称转模式色 */
.project-mode-option {
  justify-content: flex-start;
  text-align: left;
  padding: 7px 10px;
  gap: 8px;
  background: color-mix(in srgb, var(--row-mode) 10%, transparent);
}

.project-mode-option:hover {
  background: color-mix(in srgb, var(--row-mode) 16%, transparent);
}

.project-mode-option:active {
  background: color-mix(in srgb, var(--row-mode) 22%, transparent);
}

.project-mode-option.active,
.project-mode-option.active:hover {
  background: color-mix(in srgb, var(--row-mode) 20%, transparent);
}

.project-mode-option-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 15px;
  height: 15px;
  flex-shrink: 0;
  color: var(--row-mode);
}

.project-mode-option-icon svg {
  width: 100%;
  height: 100%;
  display: block;
}

.project-mode-option-name {
  font-size: 13px;
  font-weight: 500;
  color: var(--text-primary);
}

.project-mode-option.active .project-mode-option-name {
  color: var(--row-mode);
}

.project-mode-info {
  position: relative;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 14px;
  height: 14px;
  margin-left: auto;
  flex-shrink: 0;
  color: var(--text-tertiary);
  cursor: help;
}

.project-mode-info svg {
  width: 100%;
  height: 100%;
  display: block;
}

.project-mode-info:hover {
  color: var(--text-secondary);
}

/* 信息图标悬浮提示：面板右侧弹出模式简介（言简意赅一句话） */
.project-mode-info::after {
  content: attr(data-tip);
  position: absolute;
  left: calc(100% + 10px);
  top: 50%;
  transform: translateY(-50%);
  width: max-content;
  max-width: 190px;
  white-space: normal;
  padding: 7px 10px;
  background: var(--surface-modal);
  border: 1px solid var(--rule);
  border-radius: var(--radius-sm);
  box-shadow: var(--shadow-lg);
  font-size: 12px;
  font-weight: 400;
  line-height: 1.5;
  color: var(--text-secondary);
  text-align: left;
  opacity: 0;
  visibility: hidden;
  transition: opacity var(--transition-fast);
  pointer-events: none;
  z-index: 1001;
}

.project-mode-info:hover::after {
  opacity: 1;
  visibility: visible;
}

/* 置灰禁用（Build / Agent 与执行菜单选项共用） */
.intensity-option[disabled] {
  opacity: 0.45;
  cursor: not-allowed;
}

.intensity-option[disabled]:hover {
  background: transparent;
}

/* 模型面板选项：模型名 + 供应商名双行 */
.project-model-option {
  flex-direction: column;
  align-items: flex-start;
  justify-content: center;
  text-align: left;
  padding: 6px 10px;
  gap: 1px;
}

.project-model-name {
  font-size: 13px;
  font-weight: 500;
  color: var(--text-primary);
  max-width: 240px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.project-model-provider {
  font-size: 11px;
  font-weight: 400;
  color: var(--text-tertiary);
}

/* 模式按钮按当前模式着色：文字 + 同色系底色 + 细边（令牌见文件头 --mode-*，亮暗主题自动适配） */
#btn-project-mode { border: 1px solid transparent; border-radius: var(--radius-sm); }
#btn-project-mode[data-mode="ask"]   { color: var(--mode-ask);   background: color-mix(in srgb, var(--mode-ask) 15%, transparent);   border-color: color-mix(in srgb, var(--mode-ask) 35%, transparent); }
#btn-project-mode[data-mode="plan"]  { color: var(--mode-plan);  background: color-mix(in srgb, var(--mode-plan) 15%, transparent);  border-color: color-mix(in srgb, var(--mode-plan) 35%, transparent); }
#btn-project-mode[data-mode="build"] { color: var(--mode-build); background: color-mix(in srgb, var(--mode-build) 15%, transparent); border-color: color-mix(in srgb, var(--mode-build) 35%, transparent); }
#btn-project-mode[data-mode="agent"] { color: var(--mode-agent); background: color-mix(in srgb, var(--mode-agent) 15%, transparent); border-color: color-mix(in srgb, var(--mode-agent) 35%, transparent); }
#btn-project-mode:hover { filter: brightness(1.15); }
/* Tab 切模式时的即时反馈：按钮短暂提亮 */
#btn-project-mode.mode-flash { animation: projectModeFlash .3s ease; }
@keyframes projectModeFlash { 0% { filter: brightness(1.7); } 100% { filter: none; } }

/* 文件栏 */
#project-files-col {
  width: 360px;
  flex-shrink: 0;
  border-left: 1px solid var(--rule);
  display: flex;
  flex-direction: column;
  min-height: 0;
  /* 顶距 30px 对齐窗口 caption 行：主标题栏在项目视图下已收窄到对话列上方
     （right:360px，见上），不再横跨文件栏，故只需让开原生 caption 按钮高度 */
  margin: 30px 0 0 0;
  /* 折叠/展开过渡（对齐主侧栏滑场手感）：见下 .collapsed */
  transition: margin-right var(--transition-normal), opacity var(--transition-normal), visibility 0s;
}

/* 折叠：margin-right 负值把整列向右滑出窗口（#project-view overflow:hidden 裁剪），
   对话列随 flex:1 同步补间变宽；visibility 延迟到动画结束后翻转，避免离屏期间
   仍可 Tab 聚焦/命中（同主侧栏收起约定）。不用 display:none——它不可过渡 */
#project-files-col.collapsed {
  margin-right: -360px;
  opacity: 0;
  visibility: hidden;
  transition: margin-right var(--transition-normal), opacity var(--transition-normal), visibility 0s 200ms;
}

/* 文件树 pane：tab-body 内的一个内容 pane，「文件」标签激活时占满整列高度 */
#project-file-tree {
  flex: 1;
  min-height: 0;
  overflow-y: auto;
  padding: 0 0 var(--space-xs);
}

#project-files-actions {
  display: flex;
  align-items: center;
  gap: 2px;
}

/* 标签条行：左端固定动作（折叠文件栏）+ 标签横向滚动区 */
#project-tabstrip-row {
  display: flex;
  align-items: stretch;
  flex-shrink: 0;
  border-bottom: 1px solid var(--rule);
}

#project-tabstrip-row #project-tabstrip {
  flex: 1;
  min-width: 0;
  border-bottom: none;
}

#project-strip-actions {
  display: flex;
  align-items: center;
  gap: 2px;
  padding: 0 2px 0 var(--space-xs);
  flex-shrink: 0;
}

/* 侧栏收起时折叠钮停靠窗口右缘（flex order 移到标签滚动区之后，DOM 序不变）
   并撑满标签条行高——文件栏在窗口右缘的常驻把手 */
body.sidebar-collapsed #project-strip-actions {
  order: 1;
  padding: 0 var(--space-xs) 0 2px;
}

body.sidebar-collapsed #project-strip-actions > .icon-btn {
  align-self: stretch;
  height: auto;
}

/* 目录树工具行：tab-body 顶部，随文件树 pane 显隐。
   常态 = 排序 chips + 搜索/刷新；搜索态 = 输入框 + 提交/退出（两个子条互斥显隐） */
#project-tree-toolbar {
  display: flex;
  align-items: center;
  padding: 2px var(--space-xs);
  flex-shrink: 0;
}

#pt-sort-bar,
#pt-search-bar {
  display: flex;
  align-items: center;
  gap: 2px;
  flex: 1;
  min-width: 0;
}

.pt-toolbar-spacer { flex: 1; }

/* 排序 chip：激活态 accent 色 + 升降序箭头（data-dir 驱动） */
.pt-sort-chip {
  font-size: 11px;
  padding: 2px 6px;
  border: none;
  border-radius: var(--radius-sm);
  background: transparent;
  color: var(--text-tertiary);
  cursor: pointer;
  white-space: nowrap;
}

.pt-sort-chip:hover {
  background: var(--surface-hover);
  color: var(--text-secondary);
}

.pt-sort-chip.active {
  color: var(--accent);
  background: var(--accent-subtle);
}

.pt-sort-chip.active::after {
  content: ' ▲';
  font-size: 8px;
}

.pt-sort-chip.active[data-dir="desc"]::after {
  content: ' ▼';
}

#pt-search-input {
  flex: 1;
  min-width: 0;
  font-size: 12px;
  padding: 3px 8px;
  border: 1px solid var(--glass-border);
  border-radius: var(--radius-sm);
  background: var(--surface-control);
  color: var(--text-primary);
  outline: none;
}

#pt-search-input:focus {
  border-color: var(--accent-border);
}

/* 文件栏标题区：「文件」+ 索引状态指示 */
#project-files-title {
  display: flex;
  align-items: center;
  gap: var(--space-md);
  min-width: 0;
}

#project-index-wrap { position: relative; }   /* .project-index-menu 绝对定位锚点 */

/* 索引状态指示：灰点=未索引 / 脉冲点=构建中 / 绿点=已索引 / 黄点=检索降级（点击弹「重建索引」菜单） */
#project-index-status {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 2px 6px;
  border: none;
  border-radius: var(--radius-sm);
  background: transparent;
  font-size: 11px;
  font-weight: 400;
  color: var(--text-tertiary);
  cursor: pointer;
  transition: background var(--transition-fast);
}

#project-index-status:hover {
  background: var(--surface-hover);
  color: var(--text-secondary);
}

.project-index-dot {
  flex-shrink: 0;
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: var(--text-tertiary);
}

.project-index-dot--building {
  background: var(--accent);
  animation: project-index-pulse 1.1s ease-in-out infinite;
}
.project-index-dot--indexed { background: var(--mode-build); }
.project-index-dot--degraded { background: var(--mode-agent); }

@keyframes project-index-pulse {
  0%, 100% { opacity: 1; transform: scale(1); }
  50% { opacity: 0.35; transform: scale(0.8); }
}

/* 「重建索引」小菜单：自状态元素下缘向下展开（.intensity-panel 默认向上，此处反转） */
.project-index-menu {
  bottom: auto;
  top: calc(100% + 6px);
  left: 0;
  min-width: 200px;
}

.project-index-menu .intensity-title {
  white-space: normal;
  line-height: 1.5;
}

/* 文件浏览器与文件阅读器共用同一列：标签区占满文件栏剩余高度，无上下分割 */
#project-tabs-area {
  flex: 1 1 0;
  min-height: 0;
  display: flex;
  flex-direction: column;
  position: relative;   /* #pt-multi-actions 绝对定位锚点 */
}

/* === 计划卡片（Plan 模式交付物，.project-plan-card，紫色系 --mode-plan） === */
.project-plan-card {
  position: relative;   /* .project-exec-menu 绝对定位锚点 */
  margin: 0 0 8px;
  padding: 10px 12px;
  border-radius: var(--radius-md);
  border: 1px solid color-mix(in srgb, var(--mode-plan) 35%, transparent);
  background: color-mix(in srgb, var(--mode-plan) 8%, transparent);
}

.project-plan-head {
  display: flex;
  align-items: center;
  gap: var(--space-sm);
  min-width: 0;
}

.project-plan-tag {
  flex-shrink: 0;
  font-size: 11px;
  font-weight: 600;
  color: var(--mode-plan);
}

.project-plan-file {
  font-family: var(--font-mono);
  font-size: 12px;
  color: var(--text-primary);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.project-plan-actions {
  display: flex;
  align-items: center;
  gap: var(--space-sm);
  margin-top: 8px;
}

.project-plan-btn {
  font-size: var(--fs-l4);
  font-family: var(--font-sans);
  color: var(--text-secondary);
  background: var(--surface-control);
  border: 1px solid var(--rule);
  border-radius: var(--radius-sm);
  padding: 2px 10px;
  cursor: pointer;
  transition: all var(--transition-fast);
}

.project-plan-btn:hover {
  color: var(--text-primary);
  border-color: var(--text-tertiary);
}

/* 「执行」小菜单：自卡片下缘向下展开（.intensity-panel 默认向上，此处反转） */
.project-exec-menu {
  bottom: auto;
  top: calc(100% + 6px);
  left: 0;
  min-width: 260px;
}

.project-exec-menu .intensity-title {
  white-space: normal;
  line-height: 1.5;
}

/* === Build 模式工具卡（.proj-tool-card 读取卡 / .proj-edit-card 编辑·新文件建议卡） === */
.proj-tool-card,
.proj-edit-card {
  margin: 0 0 8px;
  padding: 8px 12px;
  border-radius: var(--radius-md);
  border: 1px solid var(--rule);
  background: var(--surface-control);
}

.proj-edit-card {
  border-color: color-mix(in srgb, var(--mode-build) 35%, transparent);
  background: color-mix(in srgb, var(--mode-build) 7%, transparent);
}

.proj-tool-head,
.proj-edit-head {
  display: flex;
  align-items: center;
  gap: var(--space-sm);
  min-width: 0;
  cursor: pointer;
  user-select: none;
}

.proj-tool-icon {
  flex-shrink: 0;
  display: inline-flex;
  color: var(--text-tertiary);
}

.proj-edit-card .proj-tool-icon { color: var(--mode-build); }

.proj-edit-tag {
  flex-shrink: 0;
  font-size: 11px;
  font-weight: 600;
  color: var(--mode-build);
}

.proj-tool-path,
.proj-edit-file {
  font-family: var(--font-mono);
  font-size: 12px;
  color: var(--text-primary);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  min-width: 0;
}

.proj-tool-meta {
  flex-shrink: 0;
  font-size: 11px;
  color: var(--text-tertiary);
}

.proj-edit-stat {
  flex-shrink: 0;
  font-family: var(--font-mono);
  font-size: 11px;
  color: var(--mode-build);
}

/* 状态徽标（pending 不显示；applied 绿 / rejected 灰 / blocked 橙 / failed 红） */
.proj-edit-status {
  flex-shrink: 0;
  font-size: 11px;
  font-weight: 600;
  padding: 0 6px;
  border-radius: 8px;
}
.proj-edit-status--applied  { color: var(--mode-build); background: color-mix(in srgb, var(--mode-build) 14%, transparent); }
.proj-edit-status--rejected { color: var(--text-tertiary); background: var(--surface-hover); }
.proj-edit-status--blocked  { color: var(--mode-agent); background: color-mix(in srgb, var(--mode-agent) 14%, transparent); }
.proj-edit-status--failed   { color: var(--error); background: var(--error-bg); }

.proj-card-arrow {
  flex-shrink: 0;
  margin-left: auto;
  font-size: 9px;
  color: var(--text-tertiary);
  transition: transform var(--transition-fast);
}
.proj-card-arrow.open { transform: rotate(90deg); }

.proj-tool-preview,
.proj-edit-detail {
  margin-top: 6px;
  border-top: 1px solid var(--rule);
  padding-top: 6px;
}

.proj-card-pre {
  margin: 4px 0;
  padding: 6px 8px;
  border-radius: var(--radius-sm);
  background: var(--surface-sunken);
  font-family: var(--font-mono);
  font-size: 11px;
  line-height: 1.5;
  white-space: pre-wrap;
  word-break: break-all;
  max-height: 200px;
  overflow: auto;
  color: var(--text-secondary);
}

.proj-edit-block-label {
  font-size: 11px;
  color: var(--text-tertiary);
  margin: 6px 0 2px;
}
.proj-edit-block-label--fail { color: var(--error); }

/* search → replace 对照：search 微红底 / replace 微绿底 */
.proj-edit-search  { background: color-mix(in srgb, var(--error) 7%, var(--surface-sunken)); }
.proj-edit-replace { background: color-mix(in srgb, var(--mode-build) 9%, var(--surface-sunken)); }

.proj-edit-reason {
  font-size: var(--fs-l4);
  color: var(--mode-agent);
  margin: 4px 0;
}

.proj-edit-note {
  font-size: 11px;
  color: var(--text-tertiary);
  margin: 2px 0 8px;
}

.proj-edit-actions {
  display: flex;
  align-items: center;
  gap: var(--space-sm);
  margin-top: 8px;
}

.proj-edit-btn {
  font-size: var(--fs-l4);
  font-family: var(--font-sans);
  color: var(--text-secondary);
  background: var(--surface-control);
  border: 1px solid var(--rule);
  border-radius: var(--radius-sm);
  padding: 2px 10px;
  cursor: pointer;
  transition: all var(--transition-fast);
}

.proj-edit-btn:hover {
  color: var(--text-primary);
  border-color: var(--text-tertiary);
}

.proj-edit-btn--primary {
  color: var(--on-accent);
  background: var(--mode-build);
  border-color: var(--mode-build);
}

.proj-edit-btn--primary:hover {
  color: var(--on-accent);
  filter: brightness(1.08);
}

/* === Agent 模式：命令卡状态徽标 + 高风险确认卡（橙色 --mode-agent 色系） === */
.proj-run-card .proj-tool-icon { color: var(--mode-agent); }

.proj-run-status {
  flex-shrink: 0;
  font-size: 11px;
  font-weight: 600;
  padding: 0 6px;
  border-radius: 8px;
}
.proj-run-status--ok      { color: var(--mode-build); background: color-mix(in srgb, var(--mode-build) 14%, transparent); }
.proj-run-status--fail    { color: var(--error); background: var(--error-bg); }
.proj-run-status--timeout { color: var(--mode-agent); background: color-mix(in srgb, var(--mode-agent) 14%, transparent); }

.proj-confirm-card {
  margin: 0 0 8px;
  padding: 8px 12px;
  border-radius: var(--radius-md);
  border: 1px solid color-mix(in srgb, var(--mode-agent) 45%, transparent);
  background: color-mix(in srgb, var(--mode-agent) 8%, transparent);
}

.proj-confirm-card .proj-tool-icon { color: var(--mode-agent); }

.proj-confirm-tag {
  flex-shrink: 0;
  font-size: 11px;
  font-weight: 600;
  color: var(--mode-agent);
}

.proj-confirm-summary {
  margin-top: 4px;
  font-size: var(--fs-l4);
  line-height: 1.6;
  color: var(--text-primary);
  word-break: break-all;
}

.proj-confirm-actions {
  display: flex;
  align-items: center;
  gap: var(--space-sm);
  margin-top: 8px;
}

.proj-confirm-btn--primary {
  color: var(--on-accent);
  background: var(--mode-agent);
  border-color: var(--mode-agent);
}

.proj-confirm-btn--primary:hover {
  color: var(--on-accent);
  filter: brightness(1.08);
}

.proj-confirm-status {
  margin-top: 6px;
  font-size: 11px;
  font-weight: 600;
}
.proj-confirm-status--allowed { color: var(--mode-build); }
.proj-confirm-status--rejected { color: var(--text-tertiary); }
.proj-confirm-status--expired { color: var(--text-tertiary); opacity: 0.7; }

/* 工具执行失败小块 + content-round 冻结段间距 */
.proj-tool-error-block {
  margin: 0 0 8px;
  padding: 6px 10px;
  border-left: 3px solid var(--error);
  border-radius: var(--radius-md);
  background: var(--error-bg);
  font-size: var(--fs-l3);
  color: var(--text-secondary);
}

.proj-tool-error {
  font-size: var(--fs-l4);
  color: var(--error);
  margin-top: 4px;
}

/* 检索卡（proj_search）：查询词 + 命中列表，点击命中行在文件栏打开文件（不触发 LLM） */
.proj-search-hits {
  margin-top: 6px;
  border-top: 1px solid var(--rule);
  padding-top: 4px;
  display: flex;
  flex-direction: column;
  gap: 1px;
}

.proj-search-hit {
  display: flex;
  align-items: center;
  gap: var(--space-sm);
  min-width: 0;
  padding: 3px 6px;
  border: none;
  border-radius: var(--radius-sm);
  background: transparent;
  cursor: pointer;
  text-align: left;
  transition: background var(--transition-fast);
}

.proj-search-hit:hover { background: var(--surface-hover); }

.proj-search-hit-path {
  flex-shrink: 0;
  font-family: var(--font-mono);
  font-size: 11px;
  color: var(--accent);
}

.proj-search-hit-symbol {
  font-family: var(--font-mono);
  font-size: 11px;
  color: var(--text-tertiary);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  min-width: 0;
}

.proj-content-round { margin-bottom: 8px; }

/* === 减弱动画：滑场瞬切 === */
@media (prefers-reduced-motion: reduce) {
  .sidebar-panel {
    transition: none;
  }
}

/* === 标签页文件区（ProjectTabs：文件树 + 标签条 + 编辑器/预览） === */

/* 文件树 */
.pt-tree-hint {
  padding: var(--space-lg) var(--space-md);
  color: var(--text-tertiary);
  font-size: var(--fs-l4);
  text-align: center;
  white-space: pre-line;
}

.pt-tree-row {
  display: flex;
  align-items: center;
  gap: 5px;
  height: 28px;
  padding-right: var(--space-md);
  cursor: pointer;
  color: var(--text-secondary);
  font-size: var(--fs-l4);
  user-select: none;
}

.pt-tree-row:hover {
  background: var(--surface-hover);
}

.pt-tree-row.active {
  background: var(--accent-subtle);
  color: var(--text-primary);
}

.pt-tree-chevron {
  display: inline-flex;
  flex-shrink: 0;
  color: var(--text-tertiary);
  transition: transform var(--transition-fast);
}

.pt-tree-dir.open .pt-tree-chevron {
  transform: rotate(90deg);
}

.pt-tree-icon {
  display: inline-flex;
  flex-shrink: 0;
  color: var(--text-tertiary);
}

.pt-tree-row.active .pt-tree-icon {
  color: var(--accent);
}

.pt-tree-name {
  flex: 1;
  min-width: 0;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

/* 资源管理器详细信息列：修改时间 / 创建时间 / 大小，右对齐定宽窄列（目录大小留空） */
.pt-tree-meta {
  display: flex;
  align-items: center;
  flex-shrink: 0;
  margin-left: auto;
}

.pt-tree-col {
  font-size: 11px;
  color: var(--text-tertiary);
  text-align: right;
  white-space: nowrap;
  overflow: hidden;
}

.pt-tree-col-time { width: 62px; }
.pt-tree-col-size { width: 48px; }

/* 搜索结果行：名称后跟所在目录路径提示（替代 meta 列） */
.pt-tree-path {
  flex: 1;
  min-width: 0;
  font-size: 11px;
  color: var(--text-tertiary);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  text-align: right;
}

/* 「经本编辑器修改过」/ 脏文件行名前圆点 */
.pt-tree-row.marked .pt-tree-name::before {
  content: '';
  display: inline-block;
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--accent);
  margin-right: 5px;
  vertical-align: 1px;
}

/* 标签条：横向滚动，标签 min-width 防挤压变形（边框在 #project-tabstrip-row 上，
   左端动作区才有完整底线；滚动条视觉隐藏——细滚动条在窄列里是一整条深色带，
   溢出时滚轮纵向滚动会被 Chromium 转成横向滚动，功能不损） */
#project-tabstrip {
  height: 34px;
  flex-shrink: 0;
  align-items: stretch;
  overflow-x: auto;
  overflow-y: hidden;
  scrollbar-width: none;
  padding: 0 var(--space-xs);
  gap: 2px;
}

#project-tabstrip::-webkit-scrollbar {
  display: none;
}

.project-tab {
  position: relative;
  display: flex;
  align-items: center;
  gap: 5px;
  min-width: 110px;
  max-width: 170px;
  padding: 0 6px 0 10px;
  border-radius: var(--radius-md) var(--radius-md) 0 0;
  font-size: var(--fs-l4);
  color: var(--text-secondary);
  cursor: pointer;
  user-select: none;
  flex-shrink: 0;
}

.project-tab:hover {
  background: var(--surface-hover);
}

.project-tab.active {
  background: var(--surface-card);
  color: var(--text-primary);
}

/* active 态顶部 2px accent 条 */
.project-tab.active::before {
  content: '';
  position: absolute;
  top: 0;
  left: 6px;
  right: 6px;
  height: 2px;
  border-radius: 1px;
  background: var(--accent);
}

/* Ctrl/Shift 多选态 */
.project-tab.selected {
  background: var(--accent-subtle);
}

.project-tab.dragging {
  opacity: 0.5;
}

/* 固定「文件」浏览器标签：永远最左，不可关闭/拖拽/多选；active 态与普通标签一致（顶部 accent 条） */
.project-tab--files {
  min-width: 0;
  padding: 0 12px;
}

.project-tab--files .project-tab-label {
  flex: none;
}

.project-tab-icon {
  display: inline-flex;
  flex-shrink: 0;
  color: var(--text-tertiary);
}

.project-tab.active .project-tab-icon {
  color: var(--accent);
}

.project-tab-pre {
  flex-shrink: 0;
  font-size: 10px;
  color: var(--text-tertiary);
}

.project-tab-label {
  flex: 1;
  min-width: 0;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

/* 关闭槽位：× 默认隐藏（hover / 脏态显现）；脏时以圆点替代 × */
.project-tab-close {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 18px;
  height: 18px;
  flex-shrink: 0;
  border: none;
  border-radius: var(--radius-sm);
  background: transparent;
  color: var(--text-secondary);
  cursor: pointer;
  padding: 0;
  opacity: 0;
  transition: opacity var(--transition-fast), background var(--transition-fast);
}

.project-tab:hover .project-tab-close,
.project-tab.dirty .project-tab-close {
  opacity: 1;
}

.project-tab-close:hover {
  background: var(--surface-pressed);
  color: var(--text-primary);
}

.project-tab-dirty-dot {
  display: none;
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: var(--accent);
}

.project-tab.dirty .project-tab-dirty-dot {
  display: block;
}

.project-tab.dirty .project-tab-close svg {
  display: none;
}

.project-tab.dirty .project-tab-close:hover .project-tab-dirty-dot {
  display: none;
}

.project-tab.dirty .project-tab-close:hover svg {
  display: block;
}

/* 「在主窗口打开」悬停按钮：仅独立编辑器窗口标签注入（showAttachToMain），行为对齐关闭 × */
.project-tab-attach {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 18px;
  height: 18px;
  flex-shrink: 0;
  border: none;
  border-radius: var(--radius-sm);
  background: transparent;
  color: var(--text-secondary);
  cursor: pointer;
  padding: 0;
  opacity: 0;
  transition: opacity var(--transition-fast), background var(--transition-fast);
}

.project-tab:hover .project-tab-attach {
  opacity: 1;
}

.project-tab-attach:hover {
  background: var(--surface-pressed);
  color: var(--text-primary);
}

/* 多选态浮动条 */
#pt-multi-actions {
  position: absolute;
  top: 4px;
  right: 8px;
  z-index: 5;
  align-items: center;
  gap: 4px;
}

.pt-multi-close,
.pt-multi-cancel {
  font-family: var(--font-sans);
  font-size: 11px;
  border: 1px solid var(--rule);
  border-radius: var(--radius-md);
  background: var(--surface-card);
  color: var(--text-primary);
  box-shadow: var(--shadow-sm);
  cursor: pointer;
  padding: 3px 10px;
}

.pt-multi-close:hover {
  border-color: var(--accent);
  color: var(--accent);
}

.pt-multi-cancel {
  padding: 3px 8px;
  color: var(--text-secondary);
}

/* 标签主体 */
#project-tab-body {
  flex: 1;
  min-height: 0;
  display: flex;
  flex-direction: column;
}

.pt-pane {
  flex: 1;
  min-height: 0;
  flex-direction: column;
}

.pt-pane-hint {
  flex: 1;
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--text-tertiary);
  font-size: var(--fs-l4);
  text-align: center;
  white-space: pre-line;
  padding: var(--space-lg);
}

.pt-pane-notice {
  flex-shrink: 0;
  padding: 4px 12px;
  font-size: 11px;
  color: var(--text-tertiary);
  background: var(--surface-hover);
  border-bottom: 1px solid var(--rule);
}

/* 「源码 / 预览」工具条（仅 .md / .html 双态 pane 有；顺序源码在前，默认预览） */
.pt-pane-toolbar {
  flex-shrink: 0;
  display: flex;
  align-items: center;
  gap: 4px;
  padding: 4px 8px;
  border-bottom: 1px solid var(--rule);
}

.pt-view-btn {
  font-family: var(--font-sans);
  font-size: 11px;
  color: var(--text-secondary);
  background: transparent;
  border: none;
  border-radius: var(--radius-sm);
  padding: 3px 10px;
  cursor: pointer;
  transition: all var(--transition-fast);
}

.pt-view-btn:hover {
  background: var(--surface-hover);
  color: var(--text-primary);
}

.pt-view-btn.active {
  background: var(--accent-subtle);
  color: var(--accent);
}

.pt-source-wrap {
  flex: 1;
  min-height: 0;
  flex-direction: column;
}

/* VSCode 式编辑器三列：左行号列 + 中双层编辑器（hljs 高亮 + 透明 textarea）+ 右 minimap */
.pt-editor {
  position: relative;
  flex: 1;
  min-height: 0;
  display: flex;
}

/* minimap 颜色令牌：亮 / 暗主题各一套（_mmColors 经 getComputedStyle 读取） */
:root {
  --mm-keyword: #0000FF;
  --mm-string: #A31515;
  --mm-comment: #008000;
  --mm-number: #098658;
  --mm-title: #795E26;
  --mm-attr: #E50000;
  --mm-builtin: #267F99;
  --mm-default: rgba(122, 122, 122, 0.5);
  --mm-error: rgba(211, 47, 47, 0.5);
  --mm-viewport-fill: rgba(0, 103, 192, 0.10);
  --mm-viewport-border: #0067C0;
}

[data-theme="dark"] {
  --mm-keyword: #569CD6;
  --mm-string: #CE9178;
  --mm-comment: #6A9955;
  --mm-number: #B5CEA8;
  --mm-title: #DCDCAA;
  --mm-attr: #9CDCFE;
  --mm-builtin: #4EC9B0;
  --mm-default: rgba(140, 140, 140, 0.45);
  --mm-error: rgba(244, 67, 54, 0.55);
  --mm-viewport-fill: rgba(255, 255, 255, 0.12);
  --mm-viewport-border: #4CA6E8;
}

/* 行号列：宽度由 JS 按行数位数 calc(Nch + 14px) 自适应；行高必须与编辑器一致（13px × 1.6 = 20.8px） */
.pt-gutter {
  flex-shrink: 0;
  overflow: hidden;
  box-sizing: border-box;
  padding: 10px 6px 10px 8px;   /* padding-top 与 .pt-editor-hl/.pt-editor-input 一致 */
  font-family: var(--font-mono);
  font-size: 12px;
  line-height: 20.8px;
  text-align: right;
  color: var(--text-tertiary);
  user-select: none;
  border-right: 1px solid var(--rule);
}

.pt-gutter-line {
  height: 20.8px;
}

.pt-gutter-line.active {
  color: var(--text-primary);
}

/* 语法错误行：行号半透明红底 + 错误色行号（VSCode 同款标记，由 _applyGutterErrors 增量切换） */
.pt-gutter-line.error {
  background: rgba(211, 47, 47, 0.16);
  color: var(--error);
}

[data-theme="dark"] .pt-gutter-line.error {
  background: rgba(244, 67, 54, 0.22);
}

/* 自动换行态：pre/textarea 字符级断行（断行点可推算，行号高度按视觉行数对齐） */
.pt-editor--wrap .pt-editor-hl,
.pt-editor--wrap .pt-editor-input {
  white-space: pre-wrap;
  word-break: break-all;
  overflow-wrap: anywhere;
}

/* 编辑器底部状态栏（VSCode 式）：右簇 错误数/行列/缩进/编码/语言/换行钮 */
.pt-statusbar {
  flex-shrink: 0;
  display: flex;
  align-items: center;
  gap: 2px;
  height: 24px;
  padding: 0 6px;
  border-top: 1px solid var(--rule);
  font-family: var(--font-sans);
  font-size: 11px;
  color: var(--text-tertiary);
  user-select: none;
  overflow: hidden;
  white-space: nowrap;
}

.pt-status-spacer {
  flex: 1;
  min-width: 0;
}

.pt-status-item {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 1px 6px;
  border-radius: var(--radius-sm);
  flex-shrink: 0;
}

.pt-status-errors.has-errors {
  color: var(--error);
}

button.pt-status-item {
  background: transparent;
  border: none;
  font: inherit;
  color: inherit;
  cursor: pointer;
}

button.pt-status-item:hover {
  background: var(--surface-hover);
  color: var(--text-primary);
}

button.pt-status-item.active {
  background: var(--accent-subtle);
  color: var(--accent);
}

.pt-editor-core {
  position: relative;
  flex: 1;
  min-width: 0;
}

/* minimap：独立一列不遮挡文本与滚动条；canvas 铺满，点击/拖拽跳转 */
.pt-minimap {
  flex-shrink: 0;
  width: 90px;
  position: relative;
  border-left: 1px solid var(--rule);
  background: var(--surface-sunken);
}

.pt-minimap canvas {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  cursor: pointer;
}

.pt-editor-hl,
.pt-editor-input {
  position: absolute;
  inset: 0;
  margin: 0;
  padding: 10px 12px;
  border: none;
  box-sizing: border-box;
  font-family: var(--font-mono);
  font-size: 13px;
  line-height: 1.6;
  tab-size: 2;
  white-space: pre;
  overflow-wrap: normal;
}

.pt-editor-hl {
  overflow: hidden;
  pointer-events: none;
  color: var(--text-primary);
}

/* 压掉 github.min.css 的 .hljs 底色与 pre code.hljs 的 1em padding */
.pt-editor-hl code.hljs {
  display: block;
  padding: 0;
  overflow: visible;
  background: transparent;
  font: inherit;
}

.pt-editor-input {
  z-index: 1;
  overflow: auto;
  resize: none;
  outline: none;
  background: transparent;
  color: transparent;          /* 文字由底层高亮显示，这里只留光标与选区 */
  caret-color: var(--text-primary);
}

.pt-editor-input::selection {
  background: rgba(0, 103, 192, 0.28);
}

[data-theme="dark"] .pt-editor-input::selection {
  background: rgba(76, 166, 232, 0.35);
}

/* Markdown 预览 */
.pt-md-preview {
  flex: 1;
  min-height: 0;
  overflow-y: auto;
  padding: 12px 16px;
  font-size: var(--fs-l3);
}

/* HTML 沙箱预览 */
.pt-html-wrap {
  flex: 1;
  min-height: 0;
  display: flex;
}

.pt-html-preview {
  flex: 1;
  border: none;
  background: #FFFFFF;
}

/* 图片查看（棋盘格底纹） */
.pt-image-view {
  flex: 1;
  min-height: 0;
  overflow: auto;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: var(--space-lg);
  background: repeating-conic-gradient(rgba(128, 128, 128, 0.18) 0% 25%, transparent 0% 50%) 50% / 16px 16px;
}

.pt-image-view img {
  max-width: 100%;
  max-height: 100%;
  object-fit: contain;
}

/* === 跨窗口冲突条（其他窗口已修改磁盘版本） === */
.pt-conflict-bar {
  flex-shrink: 0;
  padding: 4px 12px;
  font-size: 11px;
  color: #8a6d00;
  background: rgba(255, 209, 56, 0.22);
  border-bottom: 1px solid rgba(255, 193, 7, 0.45);
}

[data-theme="dark"] .pt-conflict-bar {
  color: #ffd76e;
  background: rgba(255, 209, 56, 0.14);
}

/* === 独立编辑器窗口（标签拖出，EditorWindow：?editor=1 精简启动） === */

/* 主界面骨架整体隐藏，只留编辑器根容器（modal-overlay / toast 不在隐藏名单，确认框可用） */
.editor-window-mode #sidebar,
.editor-window-mode #sidebar-resizer,
.editor-window-mode #main-area,
.editor-window-mode #doc-scrollbar {
  display: none !important;
}

/* 渲染 bug 修复（260817）：body 仍是主界面的两列网格（首列轨 = --sidebar-width），
   主骨架 display:none 后 #editor-window-root 会被自动摆进首列轨——编辑器窗口一旦
   拉过 768px 断点（≤768 时 responsive.css 已强制单列，故窄窗正常），内容宽度
   就锁死在主侧栏宽度、右侧大片空白。编辑器窗口强制单列。 */
body.editor-window-mode {
  grid-template-columns: 1fr !important;
}

#editor-window-root {
  display: none;   /* 主窗口内永不显示（编辑器窗口才创建该元素） */
}

.editor-window-mode #editor-window-root {
  display: flex;
  flex-direction: column;
  height: 100vh;
  background: var(--surface-primary);
}

/* 标签条 / 标签主体：复刻 #project-tabstrip / #project-tab-body */
#ew-tabstrip {
  height: 34px;
  flex-shrink: 0;
  display: flex;
  align-items: stretch;
  border-bottom: 1px solid var(--rule);
  overflow-x: auto;
  overflow-y: hidden;
  scrollbar-width: thin;
  padding: 0 var(--space-xs);
  gap: 2px;
}

/* 隐藏标题栏（titleBarStyle:'hidden' + titleBarOverlay）：标签条兼作窗口拖拽区，
   右侧为 caption 按钮预留 138px（对齐主窗口 #chat-header 的预留量）；
   标签与其上的按钮必须 no-drag，否则点击被拖拽区吞掉 */
.editor-window-mode #ew-tabstrip {
  -webkit-app-region: drag;
  padding-right: 138px;
}

.editor-window-mode #ew-tabstrip .project-tab,
.editor-window-mode #ew-tabstrip .project-tab * {
  -webkit-app-region: no-drag;
}

#ew-tab-body {
  flex: 1;
  min-height: 0;
  display: flex;
  flex-direction: column;
}
