.layout .workbench-model-picker {
  display: flex;
  align-items: center;
  flex: 0 0 auto;
  flex-wrap: nowrap;
  gap: var(--workbench-space-2);
  min-width: 0;
  margin: 0;
  font-size: var(--workbench-font-size-sm);
  font-weight: 400;
  line-height: 1;
  color: var(--workbench-color-text-secondary);
  white-space: nowrap;
  width: max-content;
  max-width: 100%;
}

.layout .workbench-model-picker select {
  width: var(--workbench-composer-model-select-width, 112px);
  max-width: var(--workbench-composer-model-select-width, 112px);
  min-width: 0;
  height: var(--workbench-composer-row-height, 32px);
  min-height: var(--workbench-composer-row-height, 32px);
  padding: 0 var(--workbench-space-2);
  font-size: var(--workbench-font-size-sm);
  line-height: 1;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/*
 * Workbench layout contract v1.31
 *
 * This file owns geometry and scroll responsibility only. Visual component
 * styling remains in styles.css. The shell has one source of truth for rails,
 * gaps, taskbars, stages, and composers so modules cannot drift apart.
 */
:root {
  --module-edge-gap: 10px;
  --module-rail-width: 176px;
  --module-taskbar-height: 58px;
  --module-composer-height: 106px;
  --module-media-composer-height: 60px;
  --workbench-composer-model-column: 320px;
  --workbench-composer-model-select-width: 320px;
}

/* v1.34: Codex-style single-shell composer.
   Keep the textarea, file entry, full model name, and send action in one quiet
   control surface. This is a layout treatment only; model IDs and labels stay
   exactly as returned by the server. */
:root {
  --workbench-composer-shell-radius: 18px;
  --workbench-composer-model-column: 320px;
  --workbench-composer-model-select-width: 320px;
}

body:has(.layout) .layout :where(.workbench-composer-form, .chat-form, .production-chat-form, .image-task-message-form) {
  padding: 10px 12px 8px !important;
  gap: 4px !important;
  border: 0 !important;
  border-radius: var(--workbench-composer-shell-radius) !important;
  background: var(--workbench-color-input) !important;
  box-shadow: none !important;
}

body:has(.layout) .layout :where(.workbench-composer-form, .chat-form, .production-chat-form, .image-task-message-form):focus-within {
  border-color: transparent !important;
  background: var(--workbench-color-input) !important;
}

body:has(.layout) .layout :where(.workbench-composer-form, .chat-form, .production-chat-form, .image-task-message-form) > textarea {
  border: 0 !important;
  border-radius: 10px !important;
  background: transparent !important;
  box-shadow: none !important;
  outline: none !important;
}

body:has(.layout) .layout .workbench-composer-footer {
  gap: var(--workbench-space-2);
  padding-top: var(--workbench-space-1);
}

body:has(.layout) .layout .workbench-composer-help-slot {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: var(--workbench-space-2);
  min-width: 0;
  overflow: visible;
}

body:has(.layout) .layout .workbench-composer-help-slot .workbench-model-picker {
  position: relative;
  flex: 0 0 var(--workbench-composer-model-column);
  width: var(--workbench-composer-model-column);
  max-width: var(--workbench-composer-model-column);
  min-width: var(--workbench-composer-model-column);
  height: var(--workbench-composer-row-height);
  gap: 0;
  color: var(--workbench-color-text);
}

body:has(.layout) .layout .workbench-composer-help-slot .workbench-model-picker > span {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

body:has(.layout) .layout .workbench-composer-help-slot .workbench-model-picker::after {
  content: '⌄';
  position: absolute;
  top: 50%;
  right: var(--workbench-space-2);
  color: var(--workbench-color-text-muted);
  font-size: var(--workbench-type-body);
  line-height: 1;
  pointer-events: none;
  transform: translateY(-55%);
}

body:has(.layout) .layout .workbench-composer-help-slot .workbench-model-picker select {
  width: var(--workbench-composer-model-select-width) !important;
  max-width: var(--workbench-composer-model-select-width) !important;
  min-width: var(--workbench-composer-model-select-width) !important;
  height: var(--workbench-composer-row-height) !important;
  min-height: var(--workbench-composer-row-height) !important;
  padding: 0 28px 0 var(--workbench-space-2) !important;
  border: 0 !important;
  border-radius: 12px !important;
  outline: none !important;
  background: transparent !important;
  color: var(--workbench-color-text) !important;
  font-size: var(--workbench-type-body) !important;
  font-weight: 400;
  appearance: none;
  cursor: pointer;
}

body:has(.layout) .layout .workbench-composer-help-slot .workbench-model-picker select:focus {
  background: transparent !important;
  box-shadow: none !important;
}

body:has(.layout) .layout .workbench-composer-footer .production-image-input-compact .production-image-add {
  border-color: transparent !important;
  border-radius: 12px !important;
  background: transparent !important;
  color: var(--workbench-color-text) !important;
}

body:has(.layout) .layout .workbench-composer-footer .production-image-input-compact .production-image-add:hover,
body:has(.layout) .layout .workbench-composer-footer .production-image-input-compact .production-image-add:focus-visible {
  border-color: transparent !important;
  background: transparent !important;
}

body:has(.layout) .layout .workbench-composer-send-slot > .primary,
body:has(.layout) .layout .workbench-composer-send-slot .workbench-composer-actions .primary {
  border-radius: 999px !important;
}

@container (max-width: 900px) {
  body:has(.layout) .layout .workbench-composer-help-slot .workbench-model-picker {
    flex: 1 1 auto;
    flex-basis: auto;
    width: 100%;
    max-width: 100%;
    min-width: 0;
  }

  body:has(.layout) .layout .workbench-composer-help-slot .workbench-model-picker select {
    width: 100% !important;
    max-width: 100% !important;
    min-width: 0 !important;
  }
}

@container (max-width: 520px) {
  body:has(.layout) .layout .workbench-composer-help-slot .workbench-model-picker {
    flex: 1 1 auto;
    flex-basis: auto;
    width: 100%;
    max-width: 100%;
    min-width: 0;
  }

  body:has(.layout) .layout .workbench-composer-help-slot .workbench-model-picker select {
    width: 100% !important;
    max-width: 100% !important;
    min-width: 0 !important;
  }
}

body:has(.layout) {
  overflow-x: hidden;
}

body:has(.layout) .layout {
  display: grid;
  grid-template-columns: var(--module-rail-width) minmax(0, 1fr) var(--module-rail-width);
  grid-template-rows: minmax(0, 1fr);
  column-gap: var(--module-edge-gap);
  width: 100%;
  height: 100dvh;
  min-height: 0;
  overflow: hidden;
}

/* 覆盖历史导航宽度规则，确保左右轨道使用同一个全局宽度令牌。 */
body:has(.layout) .layout.has-recent-work {
  grid-template-columns: var(--module-rail-width) minmax(0, 1fr) var(--module-rail-width) !important;
}

body:has(.layout) .layout:not(.has-recent-work) {
  grid-template-columns: var(--module-rail-width) minmax(0, 1fr) !important;
}

body:has(.layout) .layout:not(.has-recent-work) {
  grid-template-columns: var(--module-rail-width) minmax(0, 1fr);
}

body:has(.layout) .layout > .sidebar,
body:has(.layout) .layout > .recent-work-rail {
  position: relative;
  top: auto;
  grid-row: 1;
  width: auto;
  height: 100%;
  min-width: 0;
  min-height: 0;
  margin: 0;
  overflow: hidden;
}

body:has(.layout) .layout > .sidebar {
  grid-column: 1;
}

body:has(.layout) .layout > .recent-work-rail {
  grid-column: 3;
}

body:has(.layout:not(.has-recent-work)) .layout > .recent-work-rail {
  display: none;
}

body:has(.layout) .layout > .sidebar > .module-nav {
  min-height: 0;
  overflow-x: hidden;
  overflow-y: auto;
  scrollbar-gutter: stable;
}

body:has(.layout) .layout > .recent-work-rail .recent-work-panel {
  min-height: 0;
  height: 100%;
}

body:has(.layout) .layout > .workspace {
  grid-column: 2;
  grid-row: 1;
  width: auto;
  height: 100%;
  min-width: 0;
  min-height: 0;
  margin: 0;
  padding: var(--module-edge-gap) 0;
  overflow: hidden;
  scrollbar-gutter: stable;
}

body:has(.layout) .workspace > :where(.module-workbench, .module-list-workbench) {
  width: 100%;
  min-width: 0;
  min-height: 0;
  margin: 0;
}

/* Content pages use the center workspace as their single vertical scroller. */
body[data-page-mode="home"] .workspace,
body[data-page-mode="list"] .workspace,
body[data-page-mode="create"] .workspace,
body[data-page-section="resources"] .workspace,
body[data-page-section="management"] .workspace {
  overflow-x: hidden !important;
  overflow-y: auto !important;
}

/* Work pages keep the shell fixed; only their result surface scrolls. */
body[data-page-mode="work"] .workspace {
  overflow: hidden !important;
}

body[data-page-mode="work"] .module-workbench {
  display: grid;
  grid-template-rows: var(--module-taskbar-height) minmax(0, 1fr);
  gap: var(--module-edge-gap);
  width: 100%;
  height: 100%;
  min-height: 0;
  padding: 0;
}

body[data-page-mode="work"] .module-workbench:has(> .module-composer),
body[data-page-mode="work"] .module-workbench:has(> .image-task-composer) {
  grid-template-rows: var(--module-taskbar-height) minmax(0, 1fr) var(--module-media-composer-height);
}

body[data-page-mode="work"] .module-workbench > .module-taskbar,
body[data-page-mode="work"] .module-workbench > .module-stage,
body[data-page-mode="work"] .module-workbench > .module-composer {
  width: 100%;
  min-width: 0;
  margin: 0 !important;
  box-sizing: border-box;
}

body[data-page-mode="work"] .module-workbench > .module-taskbar {
  height: var(--module-taskbar-height);
  min-height: var(--module-taskbar-height);
  max-height: var(--module-taskbar-height);
}

body[data-page-mode="work"] .module-workbench > .module-stage {
  position: relative;
  height: auto;
  min-height: 0;
  overflow: hidden;
}

body[data-page-mode="work"] .module-workbench > .module-stage > :where(.module-output-scroll, .media-output-scroll, .image-output-frame) {
  width: 100%;
  height: 100%;
  min-height: 0;
  overflow-x: hidden;
  overflow-y: auto;
  scrollbar-gutter: stable;
}

/* 视频生产把输入区挂在 stage 内部，仍按“结果区 + 输入区”分配空间。 */
body[data-module="bilibili"][data-page-mode="work"] .video-workbench .video-module-stage:has(> .module-composer) {
  display: grid;
  grid-template-rows: minmax(0, 1fr) var(--module-media-composer-height);
  gap: var(--module-edge-gap);
  min-height: 0;
  overflow: hidden;
}

body[data-module="bilibili"][data-page-mode="work"] .video-workbench .video-module-stage:has(> .module-composer) > :where(.module-output-scroll, .media-output-scroll) {
  min-height: 0;
  height: 100%;
  overflow-x: hidden;
  overflow-y: auto;
}

body[data-module="bilibili"][data-page-mode="work"] .video-workbench .video-module-stage > .module-composer {
  position: static;
  inset: auto;
  width: 100%;
  min-width: 0;
  height: var(--module-media-composer-height);
  grid-row: 2;
  align-self: stretch;
}

body[data-page-mode="work"] .module-workbench > .module-composer {
  position: static !important;
  inset: auto !important;
  height: var(--module-media-composer-height);
  min-height: var(--module-media-composer-height);
  max-height: none;
  overflow: visible;
}

/* Lists and creation forms scroll with the center workspace, not the body. */
body[data-page-mode="list"] .module-list-workbench,
body[data-page-mode="create"] .module-workbench {
  display: grid;
  grid-template-rows: var(--module-taskbar-height) minmax(0, 1fr);
  gap: var(--module-edge-gap);
  width: 100%;
  min-height: 100%;
  padding: 0;
}

body[data-page-mode="list"] .module-list-workbench > .module-taskbar,
body[data-page-mode="create"] .module-workbench > .module-taskbar {
  width: 100%;
  height: var(--module-taskbar-height);
  min-height: var(--module-taskbar-height);
  max-height: var(--module-taskbar-height);
  margin: 0 !important;
}

body[data-page-mode="list"] .module-list-workbench > .module-stage,
body[data-page-mode="create"] .module-workbench > .module-stage {
  width: 100%;
  min-width: 0;
  min-height: 0;
  height: auto;
  overflow: visible;
}

body[data-page-mode="list"] .module-list-scroll,
body[data-page-mode="create"] .module-workbench .module-output-scroll {
  width: 100%;
  min-width: 0;
  min-height: 0;
  height: auto;
  overflow: visible;
}

/* Smart chat has the same three-level shell without a module-workbench wrapper. */
body[data-module="chat"][data-page-mode="work"] .workspace {
  display: grid;
  grid-template-rows: var(--module-taskbar-height) minmax(0, 1fr);
  gap: var(--module-edge-gap);
}

body[data-module="chat"][data-page-mode="work"] .chat-page-head.module-taskbar {
  width: 100%;
  height: var(--module-taskbar-height);
  min-height: var(--module-taskbar-height);
  margin: 0 !important;
}

body[data-module="chat"][data-page-mode="work"] .chat-layout {
  display: grid;
  grid-template-rows: minmax(0, 1fr);
  gap: var(--module-edge-gap);
  width: 100%;
  min-width: 0;
  min-height: 0;
  height: 100%;
  padding: 0 !important;
  overflow: hidden;
}

body[data-module="chat"][data-page-mode="work"] .chat-main,
body[data-module="chat"][data-page-mode="work"] .chat-thread {
  min-width: 0;
  min-height: 0;
  height: 100%;
  overflow: hidden;
}

body[data-module="chat"][data-page-mode="work"] .chat-thread {
  display: flex;
  flex-direction: column;
  gap: var(--module-edge-gap);
}

body[data-module="chat"][data-page-mode="work"] .workbench-message-list {
  flex: 1 1 auto;
  width: 100%;
  height: auto;
  min-height: 0;
  max-height: none;
  margin: 0;
  overflow-x: hidden;
  overflow-y: auto;
  scrollbar-gutter: stable;
}

body[data-module="chat"][data-page-mode="work"] .chat-composer-row {
  position: static !important;
  inset: auto !important;
  width: 100%;
  min-width: 0;
  min-height: var(--module-composer-height);
  height: auto;
  margin: 0;
}

/* Note production keeps the composer inside the center shell but outside the thread scroller. */
body[data-module="notes"][data-page-mode="work"] .workspace {
  display: grid;
  grid-template-rows: var(--module-taskbar-height) minmax(0, 1fr);
  gap: var(--module-edge-gap);
}

body[data-module="notes"][data-page-mode="work"] .production-page-head.module-taskbar {
  width: 100%;
  height: var(--module-taskbar-height);
  min-height: var(--module-taskbar-height);
  margin: 0 !important;
}

body[data-module="notes"][data-page-mode="work"] .notes-module-stage {
  display: grid;
  grid-template-rows: minmax(0, 1fr) var(--module-composer-height);
  gap: var(--module-edge-gap);
  width: 100%;
  min-width: 0;
  min-height: 0;
  height: auto;
  padding: 0 !important;
  box-sizing: border-box;
  overflow: hidden;
}

body[data-module="notes"][data-page-mode="work"] .notes-output-scroll {
  display: block;
  width: 100%;
  min-width: 0;
  min-height: 0;
  height: 100%;
  padding: 0;
  box-sizing: border-box;
  overflow-x: hidden;
  overflow-y: auto;
  scrollbar-gutter: stable;
}

body[data-module="notes"][data-page-mode="work"] .notes-output-scroll:has(> .new-note-panel) {
  display: block;
}

body[data-module="notes"][data-page-mode="work"] .production-workspace {
  display: block;
  width: 100%;
  min-width: 0;
  min-height: 0;
  height: auto;
  overflow: visible;
}

/* 桌面端也必须由生产工作区承载输入区，禁止回落到旧版 fixed 定位。
   这样输入区始终贴着中间结果区底部，并与任务栏保持同一列宽。 */
body[data-module="notes"][data-page-mode="work"] .production-composer-row {
  position: static !important;
  inset: auto !important;
  width: 100%;
  min-width: 0;
  height: var(--module-composer-height);
  min-height: var(--module-composer-height);
  margin: 0;
  z-index: 20;
}

body[data-module="notes"][data-page-mode="work"] .production-thread {
  min-width: 0;
  min-height: 0;
  height: auto;
  margin: 0 !important;
  padding: 0 !important;
  border: 0 !important;
  border-radius: 0 !important;
  background: transparent !important;
  overflow: visible;
  scrollbar-gutter: stable;
}

body[data-module="notes"][data-page-mode="work"] .production-thread,
body[data-module="notes"][data-page-mode="work"] .workbench-message-list {
  max-height: none;
}

/* v1.31: 笔记生产对话流与工作区边界统一。
   旧版的 72ch 内容上限只适合普通聊天阅读区，放到笔记生产的结构化长内容里
   会在工作区内部再次收窄，造成消息内容与左右边界出现大块空白。AI 输出使用
   工作区的完整内宽；用户消息仍保留右侧紧凑气泡，避免改变对话层级。 */

body[data-module="notes"][data-page-mode="work"] .workbench-message-list {
  width: 100%;
  max-width: none;
  margin: 0 !important;
  /* Keep the outer workbench edges aligned while retaining the same reading
     gutter as the smart-chat message list inside the result area. */
  padding: var(--module-edge-gap) var(--module-edge-gap) !important;
}

body[data-module="notes"][data-page-mode="work"] .workbench-message-turn.is-assistant,
body[data-module="notes"][data-page-mode="work"] .workbench-message-turn.is-assistant > .workbench-message,
body[data-module="notes"][data-page-mode="work"] .workbench-message-turn.is-assistant .workbench-message-markdown,
body[data-module="notes"][data-page-mode="work"] .workbench-message-turn.is-assistant .note-markdown {
  width: 100%;
  max-width: none;
}

body[data-module="notes"][data-page-mode="work"] .workbench-message-turn.is-user {
  width: min(82%, 680px);
  max-width: 680px;
  justify-self: end;
}

body[data-module="notes"][data-page-mode="work"] .production-composer-row {
  position: static !important;
  inset: auto !important;
  width: 100%;
  min-width: 0;
  min-height: var(--module-composer-height);
  height: auto;
  margin: 0;
}

/* v1.37: 笔记具体任务页纳入与图片/视频相同的统一工作页外壳。
   旧实现把 taskbar 和 stage 直接挂在 workspace 下，导致通用 module-workbench
   规则无法命中；同时 styles.css 的历史 workspace 规则会重新接管高度。
   现在 workspace 只承载一个 notes-workbench，shell 内固定 taskbar + stage，
   stage 内固定结果滚动层 + composer，职责与智能对话/图片/视频一致。 */
body[data-module="notes"][data-page-mode="work"] .workspace {
  display: block !important;
  grid-template-rows: none !important;
  gap: 0 !important;
}

body[data-module="notes"][data-page-mode="work"] .workspace > .notes-workbench {
  display: grid;
  grid-template-rows: var(--module-taskbar-height) minmax(0, 1fr);
  gap: var(--module-edge-gap);
  width: 100%;
  height: 100%;
  min-width: 0;
  min-height: 0;
  margin: 0;
  padding: 0;
}

body[data-module="notes"][data-page-mode="work"] .notes-workbench > .module-taskbar,
body[data-module="notes"][data-page-mode="work"] .notes-workbench > .module-stage {
  width: 100%;
  min-width: 0;
  margin: 0 !important;
  box-sizing: border-box;
}

body[data-module="notes"][data-page-mode="work"] .notes-workbench > .module-taskbar {
  height: var(--module-taskbar-height);
  min-height: var(--module-taskbar-height);
  max-height: var(--module-taskbar-height);
}

body[data-module="notes"][data-page-mode="work"] .notes-workbench > .notes-module-stage {
  height: auto;
  min-height: 0;
}

body[data-module="notes"][data-page-mode="work"] .notes-workbench .production-composer-row {
  top: auto !important;
  right: auto !important;
  bottom: auto !important;
  left: auto !important;
}

/* Management and resource pages never inherit the workflow scroll lock. */
body[data-page-section="resources"] .layout,
body[data-page-section="management"] .layout {
  overflow: hidden;
}

body[data-page-section="resources"] .workspace,
body[data-page-section="management"] .workspace {
  overflow-x: hidden;
  overflow-y: auto;
}

body[data-page-section="resources"] .workspace > *,
body[data-page-section="management"] .workspace > * {
  min-width: 0;
  max-width: 100%;
}

@media (min-width: 761px) and (max-width: 1020px) {
  :root { --module-rail-width: 164px; }

  body:has(.layout) .layout {
    grid-template-columns: var(--module-rail-width) minmax(0, 1fr);
    grid-template-rows: minmax(0, 1fr) auto;
  }

  body:has(.layout) .layout.has-recent-work {
    grid-template-columns: var(--module-rail-width) minmax(0, 1fr) !important;
  }

  body:has(.layout) .layout:not(.has-recent-work) {
    grid-template-columns: var(--module-rail-width) minmax(0, 1fr) !important;
  }

  body:has(.layout) .layout > .recent-work-rail {
    grid-column: 2;
    grid-row: 2;
    width: auto;
    height: 300px;
    margin: 0;
    padding: 0 0 var(--module-edge-gap);
  }

  body:has(.layout:not(.has-recent-work)) .layout {
    grid-template-rows: minmax(0, 1fr);
  }
}

/*
 * Workbench composer contract v1.33
 *
 * 输入区的主层级只有「添加文件 / 模型 / 发送」。快捷键和文件限制属于
 * 辅助信息，只有在有足够空间时才显示；窄宽度下不再把长文案压缩成省略号。
 * 模型选择使用后台返回的原始名称，完整名称同时保留在 title 和无障碍标签中。
 * 极窄宽度下模型独立占第二行，保证控件不会缩成单字母或发生遮挡。
 */
body:has(.layout) .layout .workbench-composer-help-slot {
  grid-area: help;
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: var(--workbench-space-2);
  min-width: 0;
  max-width: 100%;
  overflow: hidden;
}

body:has(.layout) .layout .workbench-composer-help-slot .workbench-model-picker {
  flex: 0 0 var(--workbench-composer-model-column);
  width: var(--workbench-composer-model-column);
  max-width: var(--workbench-composer-model-column);
  min-width: var(--workbench-composer-model-column);
  gap: var(--workbench-space-2);
  font-size: var(--workbench-composer-help-size) !important;
  font-weight: 400;
  line-height: 1;
  white-space: nowrap;
}

body:has(.layout) .layout .workbench-composer-help-slot .workbench-model-picker > span {
  flex: 0 0 auto;
  color: var(--workbench-color-text-muted);
  font-size: var(--workbench-composer-help-size) !important;
  font-weight: 400;
}

body:has(.layout) .layout .workbench-composer-help-slot .workbench-model-picker {
  overflow: visible;
}

body:has(.layout) .layout .workbench-composer-help-slot .workbench-composer-help {
  flex: 1 1 auto;
  min-width: 0;
  max-width: 100%;
  margin: 0;
  overflow: hidden;
  text-align: right;
  text-overflow: ellipsis;
  white-space: nowrap;
}

body:has(.layout) .layout .workbench-composer-help-slot .workbench-model-picker select {
  flex: 1 1 auto;
  width: var(--workbench-composer-model-select-width);
  max-width: var(--workbench-composer-model-select-width);
  min-width: var(--workbench-composer-model-select-width);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* 表单本身通常比浏览器视口窄；仍保持文件入口、模型和发送按钮同一行。
   长提示收进 title，模型选择器使用剩余宽度，避免把发送按钮挤到第二行。 */
@container (max-width: 900px) {
  body:has(.layout) .layout .workbench-composer-footer,
  body:has(.layout) .layout .workbench-composer-footer:has(.workbench-composer-actions) {
    grid-template-columns: minmax(0, 1fr) minmax(260px, 320px) var(--workbench-composer-send-width) !important;
    grid-template-areas: "image help send" !important;
    grid-template-rows: var(--workbench-composer-row-height) !important;
    row-gap: 0 !important;
    min-height: var(--workbench-composer-row-height) !important;
  }

  body:has(.layout) .layout .workbench-composer-help-slot {
    gap: 0;
    justify-content: flex-start;
  }

  body:has(.layout) .layout .workbench-composer-help-slot .workbench-composer-help {
    display: none;
  }

  body:has(.layout) .layout .workbench-composer-help-slot .workbench-model-picker {
    flex: 1 1 auto !important;
    width: 100% !important;
    max-width: 100% !important;
    min-width: 0 !important;
  }

  body:has(.layout) .layout .workbench-composer-help-slot .workbench-model-picker select {
    width: 100% !important;
    max-width: 100% !important;
    min-width: 0 !important;
  }

  body:has(.layout) .layout .workbench-composer-footer .production-image-hint {
    display: none;
  }

  body:has(.layout) .layout .workbench-composer-send-slot {
    align-self: stretch;
  }
}

/* 520px 以下保留文件入口和发送按钮在第一行，模型名称独立一行，避免被压缩或裁切。 */
@container (max-width: 520px) {
  body:has(.layout) .layout .workbench-composer-footer,
  body:has(.layout) .layout .workbench-composer-footer:has(.workbench-composer-actions) {
    grid-template-columns: minmax(0, 1fr) var(--workbench-composer-send-width) !important;
    grid-template-areas: "image send" "help send" !important;
    grid-template-rows: var(--workbench-composer-row-height) var(--workbench-composer-row-height) !important;
    row-gap: var(--workbench-space-1);
    min-height: calc(var(--workbench-composer-row-height) * 2 + var(--workbench-space-1));
  }

  body:has(.layout) .layout .workbench-composer-help-slot {
    justify-content: flex-start;
    overflow: visible;
  }

  body:has(.layout) .layout .workbench-composer-help-slot .workbench-composer-help {
    display: none;
  }

  body:has(.layout) .layout .workbench-composer-help-slot .workbench-model-picker {
    flex: 1 1 auto !important;
    width: 100% !important;
    max-width: 100% !important;
    min-width: 0 !important;
  }

  body:has(.layout) .layout .workbench-composer-help-slot .workbench-model-picker select {
    width: 100% !important;
    max-width: 100% !important;
    min-width: 0 !important;
  }
}

@media (max-width: 760px) {
  :root {
    --module-rail-width: 0px;
    --module-taskbar-height: 52px;
  }

  body:has(.layout) .layout,
  body:has(.layout) .layout:not(.has-recent-work) {
    display: block;
    width: 100%;
    height: auto;
    min-height: 100dvh;
    overflow: visible;
  }

  body:has(.layout) .layout > .sidebar,
  body:has(.layout) .layout > .recent-work-rail,
  body:has(.layout) .layout > .workspace {
    width: 100%;
    height: auto;
    min-height: 0;
    margin: 0;
    overflow: visible;
  }

  body:has(.layout) .layout > .sidebar {
    padding-block: var(--module-edge-gap);
  }

  body:has(.layout) .layout > .recent-work-rail {
    padding: 0 var(--module-edge-gap) var(--module-edge-gap);
  }

  body:has(.layout) .layout > .workspace,
  body[data-page-mode="work"] .workspace,
  body[data-page-section="resources"] .workspace,
  body[data-page-section="management"] .workspace {
    padding: var(--module-edge-gap);
    overflow: visible;
  }

  body[data-page-mode="work"] .module-workbench,
  body[data-page-mode="create"] .module-workbench {
    height: auto;
    min-height: 0;
  }

  body[data-page-mode="work"] .module-workbench > .module-stage,
  body[data-page-mode="work"] .module-workbench > .module-stage > :where(.module-output-scroll, .media-output-scroll, .image-output-frame),
  body[data-module="chat"][data-page-mode="work"] .chat-layout,
  body[data-module="notes"][data-page-mode="work"] .notes-module-stage,
  body[data-module="notes"][data-page-mode="work"] .notes-output-scroll,
  body[data-module="notes"][data-page-mode="work"] .production-workspace,
  body[data-module="notes"][data-page-mode="work"] .production-thread {
    height: auto;
    min-height: 0;
    overflow: visible;
  }

  body[data-module="chat"][data-page-mode="work"] .workspace,
  body[data-module="notes"][data-page-mode="work"] .workspace {
    display: block;
  }

  body[data-module="chat"][data-page-mode="work"] .chat-thread {
    height: auto;
    overflow: visible;
  }

  body[data-module="chat"][data-page-mode="work"] .workbench-message-list {
    flex: none;
    height: auto;
    overflow: visible;
  }

  body[data-module="chat"][data-page-mode="work"] .chat-composer-row,
  body[data-page-mode="work"] .module-workbench > .module-composer {
    position: sticky !important;
    bottom: var(--module-edge-gap);
    z-index: 20;
  }

  /* 笔记生产移动端也保持固定三段结构：页面不滚动，只有消息结果区滚动。
     输入框与右侧阶段操作栏回到同一个网格行，避免粘性定位在长内容末尾停在
     普通文档位置，造成底部空白或固定区覆盖消息。 */
  body[data-module="notes"][data-page-mode="work"] .layout {
    display: grid;
    grid-template-columns: minmax(0, 1fr) !important;
    grid-template-rows: auto minmax(0, 1fr);
    width: 100%;
    height: 100dvh;
    min-height: 0;
    overflow: hidden;
  }

  body[data-module="notes"][data-page-mode="work"] .layout > .sidebar {
    grid-column: 1;
    grid-row: 1;
    width: 100%;
    height: auto;
    min-height: 0;
    overflow: visible;
  }

  body[data-module="notes"][data-page-mode="work"] .layout > .workspace {
    grid-column: 1;
    grid-row: 2;
    width: 100%;
    height: 100%;
    min-height: 0;
    overflow: hidden;
    padding: var(--module-edge-gap);
    display: grid;
    grid-template-rows: var(--module-taskbar-height) minmax(0, 1fr);
    gap: var(--module-edge-gap);
    box-sizing: border-box;
  }

  body[data-module="notes"][data-page-mode="work"] .notes-module-stage,
  body[data-module="notes"][data-page-mode="work"] .notes-output-scroll {
    display: grid;
    width: 100%;
    height: auto;
    min-height: 0;
  }

  body[data-module="notes"][data-page-mode="work"] .notes-module-stage {
    grid-template-rows: minmax(0, 1fr) var(--module-composer-height);
    gap: var(--module-edge-gap);
    padding-bottom: 0 !important;
    box-sizing: border-box;
    overflow: hidden;
  }

  body[data-module="notes"][data-page-mode="work"] .notes-output-scroll {
    display: block;
    height: 100%;
    overflow-x: hidden;
    overflow-y: auto;
    scrollbar-gutter: stable;
  }

  body[data-module="notes"][data-page-mode="work"] .production-workspace {
    display: block;
    height: 100%;
    min-height: 0;
    overflow: visible;
  }

  body[data-module="notes"][data-page-mode="work"] .production-thread {
    height: auto;
    min-height: 0;
    overflow: visible;
    padding-bottom: 18px;
  }

  body[data-module="notes"][data-page-mode="work"] .production-composer-row {
    position: static !important;
    inset: auto !important;
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    width: 100%;
    min-width: 0;
    min-height: var(--module-composer-height);
    height: auto;
    margin: 0;
    z-index: 20;
  }
}

/* v1.33: 账号设置菜单是外壳弹层，必须在布局文件的最后保持可见。
   侧栏自身仍由 module-nav 承载滚动，弹层不应被侧栏的裁切规则吞掉。 */
body:has(.layout) .layout > .sidebar {
  overflow: visible;
}

body:has(.layout) .layout .shell-settings-menu {
  position: absolute !important;
  left: 0 !important;
  top: auto !important;
  right: auto !important;
  bottom: calc(100% + 8px) !important;
  z-index: 1000 !important;
}

body:has(.layout) .layout .shell-settings-menu[hidden] {
  display: none !important;
}

body:has(.layout) .layout .shell-settings-menu:not([hidden]) {
  display: grid !important;
  pointer-events: auto;
  visibility: visible;
}

/* v1.34: 图片任务栏在窄屏增加到两行时，父级网格同步放开高度，避免第二行被裁切。 */
@media (max-width: 760px) {
  body[data-module="images"][data-page-mode="work"] .module-workbench:has(> .module-taskbar .work-taskbar-image-size) {
    grid-template-rows: auto minmax(0, 1fr) var(--module-media-composer-height) !important;
  }

  body[data-module="images"][data-page-mode="work"] .module-workbench > .module-taskbar:has(.work-taskbar-image-size) {
    height: auto !important;
    min-height: 80px !important;
    max-height: none !important;
    overflow: visible;
  }
}

/* v1.35: 对话输入底栏统一为「资源 + / 模型与联网 / 发送」。
   资源菜单和控制组只占内容需要的宽度，剩余空间留给左侧资源入口；
   快捷键提示收进 title，避免长文案把模型名或发送按钮挤出边界。 */
:root {
  --workbench-composer-model-min-width: 132px;
  --workbench-composer-model-max-width: 236px;
  --workbench-composer-network-width: 76px;
  --workbench-composer-control-gap: var(--workbench-space-2);
  --workbench-composer-resource-size: var(--workbench-composer-row-height);
}

body:has(.layout) .layout .workbench-composer-footer {
  grid-template-columns: minmax(0, 1fr) auto auto !important;
  grid-template-areas: "resource controls send" !important;
  grid-template-rows: var(--workbench-composer-row-height) !important;
  column-gap: var(--workbench-composer-footer-gap);
  row-gap: 0 !important;
  min-height: var(--workbench-composer-row-height) !important;
}

body:has(.layout) .layout .workbench-composer-resource-slot,
body:has(.layout) .layout .workbench-composer-controls-slot,
body:has(.layout) .layout .workbench-composer-help-slot,
body:has(.layout) .layout .workbench-composer-send-slot {
  min-width: 0;
  max-width: 100%;
}

body:has(.layout) .layout .workbench-composer-resource-slot {
  grid-area: resource;
  display: flex;
  align-items: center;
  width: 100%;
  overflow: visible;
}

body:has(.layout) .layout .workbench-composer-controls-slot {
  grid-area: controls;
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: var(--workbench-composer-control-gap);
  width: max-content;
  overflow: visible;
}

body:has(.layout) .layout .workbench-composer-controls-slot .workbench-model-picker {
  flex: 0 1 clamp(var(--workbench-composer-model-min-width), 18vw, var(--workbench-composer-model-max-width));
  width: clamp(var(--workbench-composer-model-min-width), 18vw, var(--workbench-composer-model-max-width));
  max-width: var(--workbench-composer-model-max-width);
  min-width: var(--workbench-composer-model-min-width);
  overflow: hidden;
}

body:has(.layout) .layout .workbench-composer-controls-slot .workbench-model-picker > span {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  clip-path: inset(50%);
  white-space: nowrap;
  border: 0;
}

body:has(.layout) .layout .workbench-composer-controls-slot .workbench-model-picker select {
  width: 100% !important;
  max-width: 100% !important;
  min-width: 0 !important;
  padding-inline: var(--workbench-space-2) 24px !important;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

body:has(.layout) .layout .workbench-composer-controls-slot .chat-research-control {
  flex: 0 0 var(--workbench-composer-network-width);
  width: var(--workbench-composer-network-width);
  min-width: 0;
  padding-inline: 8px;
  overflow: hidden;
}

body:has(.layout) .layout .workbench-composer-controls-slot .chat-research-control-label {
  overflow: hidden;
  text-overflow: ellipsis;
}

body:has(.layout) .layout .workbench-composer-help-slot {
  display: none !important;
}

body:has(.layout) .layout .workbench-composer-send-slot {
  grid-area: send;
  display: flex;
  align-items: center;
  justify-content: flex-end;
  width: max-content;
  overflow: visible;
}

/* 执行状态统一渲染在消息流中，不占用输入壳层的列或附加行。 */

body:has(.layout) .layout .workbench-composer-resource-slot .production-image-input-compact {
  width: auto;
  max-width: none;
  overflow: visible;
}

body:has(.layout) .layout .workbench-composer-resource-slot .production-image-input-compact .production-image-drop-zone {
  width: auto;
  max-width: none;
  gap: 0;
  padding: 0;
  border: 0;
  background: transparent;
  overflow: visible;
}

body:has(.layout) .layout .workbench-composer-resource-slot .production-image-input-compact .production-image-hint,
body:has(.layout) .layout .workbench-composer-resource-slot .production-image-input-compact .production-image-add,
body:has(.layout) .layout .workbench-composer-resource-slot .production-image-input-compact .reference-case-add {
  display: none !important;
}

body:has(.layout) .layout .workbench-composer-resource-slot .reference-case-compact-control {
  display: inline;
}

@container (max-width: 620px) {
  body:has(.layout) .layout .workbench-composer-footer,
  body:has(.layout) .layout .workbench-composer-footer:has(.workbench-composer-actions) {
    grid-template-columns: minmax(0, 1fr) auto auto !important;
    grid-template-areas: "resource controls send" !important;
    grid-template-rows: var(--workbench-composer-row-height) !important;
    min-height: var(--workbench-composer-row-height) !important;
  }

  body:has(.layout) .layout .workbench-composer-controls-slot {
    gap: var(--workbench-space-1);
  }

  body:has(.layout) .layout .workbench-composer-controls-slot .workbench-model-picker {
    flex-basis: clamp(92px, 30vw, 168px);
    width: clamp(92px, 30vw, 168px);
    min-width: 92px;
  }

  body:has(.layout) .layout .workbench-composer-controls-slot .chat-research-control {
    flex-basis: 40px;
    width: 40px;
    padding-inline: 6px;
  }

  body:has(.layout) .layout .workbench-composer-controls-slot .chat-research-control-label {
    display: none;
  }
}

/* v1.36: 资源入口必须保留独立槽位，窄屏时只收缩模型文本，不能让「＋」溢出覆盖模型选择器。 */
body:has(.layout) .layout .workbench-composer-footer {
  grid-template-columns: var(--workbench-composer-resource-size) minmax(0, 1fr) auto !important;
  grid-template-areas: "resource controls send" !important;
}

body:has(.layout) .layout .workbench-composer-resource-slot {
  width: var(--workbench-composer-resource-size);
  min-width: var(--workbench-composer-resource-size);
  max-width: var(--workbench-composer-resource-size);
  justify-content: flex-start;
}

body:has(.layout) .layout .workbench-composer-resource-slot .workbench-composer-resource-trigger {
  flex: 0 0 var(--workbench-composer-resource-size);
  width: var(--workbench-composer-resource-size);
}

body:has(.layout) .layout .workbench-composer-controls-slot {
  width: 100%;
  min-width: 0;
}

body:has(.layout) .layout .workbench-composer-controls-slot .workbench-model-picker {
  flex: 1 1 auto;
  width: auto;
  min-width: 0;
}

body:has(.layout) .layout .workbench-composer-controls-slot .chat-research-control {
  flex: 0 1 var(--workbench-composer-network-width);
}

/* v1.40: 输入控件最终几何合同。联网状态必须与模型选择同一行，
   窄屏只收缩模型列，不隐藏联网文案，也不让发送按钮进入第二行。 */
:root {
  --workbench-composer-network-width: 96px;
}

body:has(.layout) .layout .workbench-composer-controls-slot {
  gap: var(--workbench-space-2);
  min-width: 0;
  overflow: visible;
}

body:has(.layout) .layout .workbench-composer-controls-slot .workbench-model-picker {
  flex: 1 1 auto;
  width: auto;
  min-width: 0;
  max-width: none;
}

body:has(.layout) .layout .workbench-composer-controls-slot .workbench-model-picker select {
  width: 100% !important;
  min-width: 0 !important;
  max-width: 100% !important;
}

body:has(.layout) .layout .workbench-composer-controls-slot .chat-research-control {
  flex: 0 0 var(--workbench-composer-network-width) !important;
  width: var(--workbench-composer-network-width) !important;
  min-width: var(--workbench-composer-network-width) !important;
  overflow: visible;
}

body:has(.layout) .layout .workbench-composer-controls-slot .chat-research-control-label,
body:has(.layout) .layout .workbench-composer-controls-slot .chat-research-control-state {
  display: inline !important;
  overflow: visible;
  text-overflow: clip;
}

@container (max-width: 620px) {
  body:has(.layout) .layout .workbench-composer-controls-slot {
    gap: var(--workbench-space-1);
  }

  body:has(.layout) .layout .workbench-composer-controls-slot .workbench-model-picker {
    flex: 1 1 auto;
    width: auto;
    min-width: 0;
  }

  body:has(.layout) .layout .workbench-composer-controls-slot .chat-research-control {
    flex: 0 0 var(--workbench-composer-network-width) !important;
    width: var(--workbench-composer-network-width) !important;
    min-width: var(--workbench-composer-network-width) !important;
    padding-inline: var(--workbench-space-1);
  }
}

/* v1.41: 一体式输入壳层。
   外层 workbench-composer-form 继续使用原有背景和高度；资源入口、模型选择、联网开关
   只作为同一壳层里的控件，不再各自绘制一块背景。联网、模型和资源入口不再各自占用独立背景块；
   联网仍保留可见轨道、文字和开关状态。 */
body:has(.layout) .layout :where(
  .workbench-composer-footer,
  .workbench-composer-resource-slot,
  .workbench-composer-controls-slot,
  .workbench-composer-send-slot,
  .workbench-composer-resource,
  .workbench-composer-resource .production-image-input-compact,
  .workbench-composer-resource .production-image-drop-zone
) {
  background: transparent !important;
  border: 0 !important;
  box-shadow: none !important;
}

body:has(.layout) .layout .workbench-composer-resource-trigger {
  color: var(--wb-text) !important;
  border: 0 !important;
  background: transparent !important;
  box-shadow: none !important;
}

body:has(.layout) .layout .workbench-composer-resource-trigger:hover,
body:has(.layout) .layout .workbench-composer-resource-trigger:focus-visible,
body:has(.layout) .layout .workbench-composer-resource-trigger[aria-expanded="true"] {
  color: var(--wb-accent) !important;
  border: 0 !important;
  background: transparent !important;
  box-shadow: none !important;
  outline: none;
}

body:has(.layout) .layout .workbench-composer-controls-slot .workbench-model-picker,
body:has(.layout) .layout .workbench-composer-controls-slot .workbench-model-picker select {
  color: var(--wb-text) !important;
  border: 0 !important;
  background: transparent !important;
  box-shadow: none !important;
}

body:has(.layout) .layout .workbench-composer-controls-slot .workbench-model-picker {
  padding-inline: 0 !important;
}

body:has(.layout) .layout .workbench-composer-controls-slot .chat-research-control,
body:has(.layout) .layout .workbench-composer-controls-slot .chat-research-control:hover,
body:has(.layout) .layout .workbench-composer-controls-slot .chat-research-control:focus-within,
body:has(.layout) .layout .workbench-composer-controls-slot .chat-research-control:has(input:checked) {
  color: var(--wb-text) !important;
  border: 0 !important;
  background: transparent !important;
  box-shadow: none !important;
}

body:has(.layout) .layout .workbench-composer-controls-slot .chat-research-control {
  flex: 0 0 var(--workbench-composer-network-width) !important;
  width: var(--workbench-composer-network-width) !important;
  min-width: var(--workbench-composer-network-width) !important;
  padding-inline: 0 !important;
  overflow: visible;
}

body:has(.layout) .layout .chat-research-control-track {
  flex: 0 0 30px;
  width: 30px;
  height: 18px;
  background: var(--wb-text-secondary) !important;
}

body:has(.layout) .layout .chat-research-control-track::after {
  width: 12px;
  height: 12px;
  background: var(--wb-bg) !important;
}

body:has(.layout) .layout .chat-research-control input:checked + .chat-research-control-track {
  background: var(--wb-accent) !important;
}

body:has(.layout) .layout .chat-research-control input:checked + .chat-research-control-track::after {
  background: var(--wb-on-accent) !important;
}

body:has(.layout) .layout .workbench-composer-controls-slot .chat-research-control-label,
body:has(.layout) .layout .workbench-composer-controls-slot .chat-research-control-state {
  display: inline !important;
  flex: 0 0 auto;
  color: var(--wb-text) !important;
  overflow: visible;
  text-overflow: clip;
  white-space: nowrap;
}

body:has(.layout) .layout .workbench-composer-send-slot > .primary,
body:has(.layout) .layout .workbench-composer-send-slot .workbench-composer-actions .primary {
  background: var(--wb-accent) !important;
  color: var(--wb-on-accent) !important;
}

body:has(.layout) .layout .workbench-create-runtime-control-group,
body:has(.layout) .layout .workbench-create-runtime-control-group .workbench-model-picker,
body:has(.layout) .layout .workbench-create-runtime-control-group .chat-research-control {
  background: transparent !important;
  border: 0 !important;
  box-shadow: none !important;
}

body:has(.layout) .layout .workbench-create-runtime-control-group .workbench-model-picker {
  padding-inline: 0 !important;
}

/* v1.42: 统一可点击区域的视觉契约。
   只复用工作台已有的画布、选中面、强调色和错误色；不新增颜色，不改变业务结构。
   这里集中覆盖历史 CSS 中“透明但可点击”“整张卡片可点但实际只有局部可点”等冲突规则。 */
body:has(.layout) .layout {
  --workbench-interaction-surface: var(--wb-selected);
  --workbench-interaction-accent: var(--wb-accent);
  --workbench-interaction-danger: var(--wb-error);
}

body:has(.layout) .layout :where(.primary) {
  color: var(--wb-on-accent) !important;
  border: 1px solid var(--workbench-interaction-accent) !important;
  background: var(--workbench-interaction-accent) !important;
}

body:has(.layout) .layout :where(.secondary) {
  color: var(--wb-text) !important;
  border: 1px solid var(--workbench-interaction-surface) !important;
  background: var(--workbench-interaction-surface) !important;
}

body:has(.layout) .layout :where(.secondary:hover, .secondary:focus-visible) {
  color: var(--wb-text) !important;
  border-color: var(--workbench-interaction-accent) !important;
  background: var(--workbench-interaction-surface) !important;
}

body:has(.layout) .layout :where(.text, .button-link) {
  color: var(--workbench-interaction-accent) !important;
  border: 1px solid transparent !important;
  background: transparent !important;
  text-decoration: underline;
  text-decoration-color: var(--workbench-interaction-accent);
  text-underline-offset: 3px;
}

body:has(.layout) .layout :where(.text:hover, .text:focus-visible, .button-link:hover, .button-link:focus-visible) {
  color: var(--wb-text) !important;
  border-color: var(--workbench-interaction-surface) !important;
  background: var(--workbench-interaction-surface) !important;
  text-decoration-color: var(--wb-text);
}

body:has(.layout) .layout :where(.danger-text) {
  color: var(--workbench-interaction-danger) !important;
  text-decoration-color: var(--workbench-interaction-danger);
}

body:has(.layout) .layout :where(.danger-text:hover, .danger-text:focus-visible) {
  color: var(--workbench-interaction-danger) !important;
  border-color: var(--workbench-interaction-surface) !important;
  background: var(--workbench-interaction-surface) !important;
  text-decoration-color: var(--workbench-interaction-danger);
}

/* 被动卡片不冒充整块入口；真正的按钮/行才显示可点击反馈。 */
body:has(.layout) .layout :where(.task-card, .case-card) {
  cursor: default !important;
}

body:has(.layout) .layout :where(.task-card, .case-card)::after {
  display: none !important;
}

body:has(.layout) .layout :where(
  .module-card,
  .recent-work-item,
  .task-card-open,
  .case-card-open,
  .case-group-item,
  .session-item,
  .job-item,
  .conversation-item,
  .admin-capability-row,
  .admin-output-row,
  .case-row-thumb
) {
  cursor: pointer !important;
}

body:has(.layout) .layout :where(
  .recent-work-item,
  .case-group-item,
  .session-item,
  .job-item,
  .conversation-item,
  .admin-capability-row,
  .admin-output-row
) {
  border-color: var(--workbench-interaction-surface) !important;
  background: var(--workbench-interaction-surface) !important;
}

body:has(.layout) .layout :where(
  .recent-work-item:hover,
  .recent-work-item:focus-visible,
  .recent-work-item.active,
  .case-group-item:hover,
  .case-group-item:focus-visible,
  .case-group-item.active,
  .session-item:hover,
  .session-item:focus-visible,
  .session-item.active,
  .job-item:hover,
  .job-item:focus-visible,
  .job-item.active,
  .conversation-item:hover,
  .conversation-item:focus-visible,
  .conversation-item.active,
  .admin-capability-row:hover,
  .admin-capability-row:focus-visible,
  .admin-capability-row.is-active,
  .admin-output-row:hover,
  .admin-output-row:focus-visible,
  .admin-output-row.is-active
) {
  border-color: var(--workbench-interaction-accent) !important;
  background: var(--workbench-interaction-surface) !important;
}

body:has(.layout) .layout :where(.module-card:hover, .module-card:focus-visible, .task-card-open:hover, .task-card-open:focus-visible, .case-card-open:hover, .case-card-open:focus-visible) {
  outline: 2px solid var(--workbench-interaction-accent);
  outline-offset: -2px;
}

/* 图标按钮、图片预览和上传区域都保留可见的命中范围。 */
body:has(.layout) .layout :where(.workbench-copy-action, .workbench-quote-action, .image-asset-actions button, .task-card-actions button, .case-card-delete) {
  min-width: var(--workbench-button-height-small);
  min-height: var(--workbench-button-height-small);
  color: var(--workbench-interaction-accent) !important;
  border: 1px solid transparent !important;
  border-radius: var(--workbench-radius-sm);
  background: transparent !important;
}

body:has(.layout) .layout :where(.workbench-copy-action:hover, .workbench-copy-action:focus-visible, .workbench-quote-action:hover, .workbench-quote-action:focus-visible, .image-asset-actions button:hover, .image-asset-actions button:focus-visible, .task-card-actions button:hover, .task-card-actions button:focus-visible, .case-card-delete:hover, .case-card-delete:focus-visible) {
  color: var(--wb-text) !important;
  border-color: var(--workbench-interaction-accent) !important;
  background: var(--workbench-interaction-surface) !important;
}

body:has(.layout) .layout :where(.image-preview-trigger, .admin-output-image-button, .task-history-attachment) {
  border: 1px solid var(--workbench-interaction-surface) !important;
  background: var(--workbench-interaction-surface) !important;
  cursor: zoom-in !important;
}

body:has(.layout) .layout :where(.image-preview-trigger:hover, .image-preview-trigger:focus-visible, .admin-output-image-button:hover, .admin-output-image-button:focus-visible, .task-history-attachment:hover, .task-history-attachment:focus-visible) {
  border-color: var(--workbench-interaction-accent) !important;
}

body:has(.layout) .layout :where(.case-upload-zone, .production-image-drop-zone, .case-content-upload) {
  border: 1px dashed var(--workbench-interaction-surface) !important;
  background: var(--workbench-interaction-surface) !important;
  cursor: pointer !important;
}

body:has(.layout) .layout :where(.case-upload-zone:hover, .case-upload-zone:focus-visible, .case-upload-zone.drag-over, .production-image-drop-zone:hover, .production-image-drop-zone:focus-within, .production-image-drop-zone.is-dragging, .case-content-upload:hover, .case-content-upload:focus-visible) {
  border-color: var(--workbench-interaction-accent) !important;
  background: var(--workbench-interaction-surface) !important;
}

/* 一体式输入壳层内的资源入口仍不拆出第二个背景块。 */
body:has(.layout) .layout :where(.workbench-composer-resource .production-image-drop-zone) {
  border: 0 !important;
  background: transparent !important;
}

body:has(.layout) .layout :where(.skill-toggle, .chat-research-control) {
  cursor: pointer !important;
}

body:has(.layout) .layout :where(.skill-toggle:focus-within, .chat-research-control:focus-within) {
  outline: 2px solid var(--workbench-interaction-accent);
  outline-offset: 2px;
}

body:has(.layout) .layout :where(details > summary) {
  color: var(--workbench-interaction-accent) !important;
  border: 1px solid transparent !important;
  background: transparent !important;
}

body:has(.layout) .layout :where(details > summary:hover, details > summary:focus-visible, details[open] > summary) {
  color: var(--wb-text) !important;
  border-color: var(--workbench-interaction-surface) !important;
  background: var(--workbench-interaction-surface) !important;
}

/* 状态、时间、数量和说明只传达信息，不显示成按钮。 */
body:has(.layout) .layout :where(.status-badge, .pill, .task-status, .case-number, .model-badge, time, .muted, small, .admin-section-help, .image-help) {
  cursor: default !important;
}
