/* ==========================================================================
   agent-team V8 F2/F3 — 全量设计 token + 深浅三态主题(v=517;PLAN-V8 P2-F2/P3-F3)
   视觉权威:docs/方向稿-V8/v-final.html(色=V3 冷温近黑×琥珀;稳=V1 形态;
   深色辅助文字已提亮 #99A3AD)。V1 微信绿全量退场,主色改琥珀信号系。
   分层:第 1 层原语(基础值,组件不直接引用)→ 第 2 层语义(组件只引用这层)。
   深色是设计原点(:root=深色,v-final 同构);浅色为完整覆写。
   首帧前 index.html 内联脚本已按 light/dark/auto 设好 data-theme。
   ========================================================================== */

/* ---------- 第 1 层:原语 token(基础值,永不变色) ---------- */
:root {
  /* 钢灰系(深色冷温近黑,V3) */
  --steel-950: #0a0c0e;
  --steel-900: #0e1013;
  --steel-850: #14171b;
  --steel-800: #191d22;
  --steel-750: #1f242a;
  --steel-text: #eceff2;
  --steel-text-2: #97a1ab;
  --steel-text-3: #6d7883;
  /* 琥珀信号系(V3) */
  --amber-300: #f2b95c;
  --amber-400: #e8a33d;
  --amber-500: #d8942c;
  --amber-700: #a8741a;
  --amber-800: #8f6316;
  /* 纸白系(浅色白天值班室,V3) */
  --paper-50: #f6f6f3;
  --paper-100: #efefeb;
  --paper-150: #e9e9e3;
  --paper-0: #ffffff;
  /* 墨系(浅色文字,V3) */
  --ink-900: #22262b;
  --ink-650: #555e68;
  --ink-450: #616a75;            /* 辅助字压深(定稿 #7a838c 白底实测 3.85 不达 4.5,沿用本批 danger 压深先例;森哥 2026-10-11 16:40 拍板) */
  /* 信号色 */
  --red-danger: #c13a35;          /* 浅色危险(压深达 4.5 线;定稿 #D9534F 实测 3.96) */
  --red-danger-deep: #e0655c;     /* 深色危险(定稿值) */
  --azure-600: #576b95;           /* 链接蓝(微信链接蓝沿用,浅色) */
  --azure-400: #94a8cc;           /* 链接蓝(深色提亮) */
  /* 文件类型识别色(V5 既有,深浅共用) */
  --vivid-orange: #e8622c;
  --vivid-blue: #5b8def;
  --vivid-gray: #8a8a8e;
  --vivid-gold: #e8b23d;

  /* 间距刻度 */
  --space-1: 4px;
  --space-2: 8px;
  --space-3: 12px;
  --space-4: 16px;
  --space-5: 20px;
  --space-6: 24px;
  /* 圆角档(V1 档 4/6/10) */
  --radius-sm: 4px;
  --radius-md: 6px;
  --radius-lg: 10px;
  /* 动效(工具型:克制,只做功能反馈) */
  --dur-fast: 150ms;
  --dur-slow: 240ms;
  --ease-ui: cubic-bezier(0.2, 0, 0, 1);

  /* ---------- 工位抽屉独立几何 token(红线:只换配色,不动几何;
     独立命名防止全局圆角调整连带抽屉——PLAN P2-F2) ---------- */
  --drawer-w: 400px;              /* 生产抽屉宽度(方向稿 260px 演示值不进生产) */
  --drawer-card-radius: 14px;     /* 抽屉分区卡圆角(V5 起既有值) */

  /* ---------- 头像色板(V8):JS 只传色槽 0-7(--avatar-bg 引用槽位 token);
     8 色取自 v-final 定稿演示色板(低饱和,白字可读,深浅两态通用) ---------- */
  --avatar-c0: #576b95;
  --avatar-c1: #4f9d8f;
  --avatar-c2: #d98b45;
  --avatar-c3: #7d6fc4;
  --avatar-c4: #4d7cb8;
  --avatar-c5: #8a7d5c;
  --avatar-c6: #5f7a61;
  --avatar-c7: #a06a8c;

  /* ---------- 代码高亮(github light 浅色值;深色值在语义层覆写) ---------- */
  --hl-comment: #6a737d;
  --hl-keyword: #d73a49;
  --hl-string: #032f62;
  --hl-number: #005cc5;
  --hl-function: #6f42c1;
  --hl-class: #22863a;
  --hl-symbol: #005cc5;
  --hl-meta: #b31d28;

  /* ---------- 布局尺寸(沿用既有几何,非本批翻新对象) ---------- */
  --v8-rail-w: 56px;              /* V8 F1:最左窄 rail(窄屏 48px 见媒体查询) */
  --sidebar-w: 280px;
  --header-h: 60px;
  --header-h-mobile: 52px;
  --room-item-h: 72px;
  --avatar-room: 40px;
  --avatar-msg: 36px;
  --composer-h: 150px;
  --bubble-max: min(78%, 760px);
  --bubble-max-mobile: 88%;
  --msg-padding: 24px;
  --msg-padding-mobile: 12px;

  /* 字体 */
  --font-ui: -apple-system, BlinkMacSystemFont, "Segoe UI", "Microsoft YaHei", "PingFang SC", sans-serif;
  --font-mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
  --fs-body: 14px;
  --fs-msg: 15px;
  --fs-mobile-input: 16px;
  --fs-room-name: 14px;
  --fs-summary: 12px;
  --fs-title: 17px;
  --fs-status: 12px;
  --lh-body: 1.6;

  /* 触摸目标 */
  --touch-min: 44px;
}

/* ---------- 第 2 层:语义 token —— 深色为设计原点(v-final 同构) ---------- */
:root {
  color-scheme: dark;

  /* 面 */
  --color-bg-rail: var(--steel-950);
  --color-bg-rail-hover: rgba(255, 255, 255, 0.08);
  --color-bg-panel: var(--steel-850);
  --color-bg-panel-head: var(--steel-850);
  --color-bg-page: var(--steel-900);
  --color-bg-hover: var(--steel-750);
  --color-bg-active: var(--steel-800);
  --color-bg-hover-weak: rgba(255, 255, 255, 0.05);
  --color-bg-bubble-other: var(--steel-800);
  --color-bg-bubble-me: #2b323b;
  --color-bg-input: var(--steel-800);
  --color-bg-subtle: rgba(255, 255, 255, 0.06);
  --color-bg-subtle-solid: var(--steel-800);
  --color-bg-note: rgba(255, 255, 255, 0.03);
  --color-bg-code: #10141a;
  --color-bg-code-inline: rgba(255, 255, 255, 0.09);
  --color-bg-table-header: rgba(255, 255, 255, 0.05);
  --color-bg-switch-off: rgba(255, 255, 255, 0.22);
  --color-switch-knob: var(--steel-text);
  --color-bg-wiz-rail: linear-gradient(180deg, #191e25, #14171b);
  --color-bg-mask: rgba(0, 0, 0, 0.5);
  --color-bg-mask-warm: rgba(0, 0, 0, 0.52);
  --color-bg-mask-drawer: rgba(0, 0, 0, 0.35);
  --color-bg-glass: rgba(18, 21, 26, 0.88);          /* 抽屉磨砂底(暖深) */
  --color-bg-card-overlay: rgba(28, 32, 39, 0.92);   /* 分区卡片(近实) */
  --color-bg-toast: rgba(20, 20, 20, 0.88);
  --color-pop-bg: var(--steel-750);

  /* 字 */
  --color-text-primary: var(--steel-text);
  --color-text-secondary: var(--steel-text-2);
  --color-text-faint: #99a3ad;                       /* 深色辅助提亮(v-final 盲评 P1 修复) */
  --color-text-lowest: var(--steel-text-3);
  --color-text-bubble-me: var(--steel-text);
  --color-text-code: #d5dce2;
  --color-text-toast: #f2f2f2;
  --color-link: var(--azure-400);
  --color-avatar-fallback: #79838d;
  --color-avatar-text: #ffffff;
  --color-on-fill: #ffffff;                          /* 饱和底上的图形/文字 */

  /* 描边 */
  --color-border-subtle: rgba(255, 255, 255, 0.07);
  --color-border-overlay: rgba(255, 255, 255, 0.09);
  --color-border-strong: rgba(255, 255, 255, 0.28);
  --color-border-faint: rgba(255, 255, 255, 0.05);
  --color-border-input: #3a424c;
  --color-border-input-hover: #4a545e;
  --color-border-glass: rgba(255, 255, 255, 0.08);
  --color-border-on-head: rgba(236, 239, 242, 0.35);
  --color-bg-hover-on-head: rgba(255, 255, 255, 0.08);

  /* 强调(琥珀信号系) */
  --color-accent: var(--amber-400);
  --color-accent-strong: var(--amber-500);
  --color-accent-text: var(--amber-400);             /* 小字强调文本(深色实测 8.34:1) */
  --color-on-accent: #1a1206;
  --color-accent-tint-weak: rgba(232, 163, 61, 0.1);
  --color-accent-tint: rgba(232, 163, 61, 0.16);
  --color-accent-border: rgba(232, 163, 61, 0.38);
  --color-accent-border-strong: rgba(232, 163, 61, 0.55);

  /* 信号色 */
  --color-danger: var(--red-danger-deep);
  --color-on-danger: #1f0e0b;                        /* 深色危险底配深字(白字实测 3.40 不达线) */
  --color-unread: var(--red-danger-deep);
  --color-ok: #58c477;                               /* V8 F3:体检通过(深色浮层底实测对比 7.13:1) */
  --color-err-bg: #331b19;
  --color-err-text: #ff8a80;
  --color-warn-bg: #2b2413;
  --color-warn-text: #d9b96a;
  --color-warn-strong: #e0a84e;
  --color-warn-deep: #e0b060;
  --color-warn-border: rgba(224, 176, 96, 0.45);
  --color-warn-tint: rgba(255, 193, 7, 0.1);
  --color-warn-bg-soft: #2e2614;
  --color-warn-agent: #e8a35c;                       /* 智能体域标签(暖橙,V7 盲评唯一橙) */
  --color-agent-tint: rgba(255, 152, 0, 0.16);
  --color-led-off: #4a545e;
  --color-link-tint: rgba(148, 168, 204, 0.16);
  --color-link-tint-weak: rgba(148, 168, 204, 0.1);
  --color-link-border: rgba(148, 168, 204, 0.45);
  --color-rail-icon: #79838d;
  --color-rail-icon-hover: #e8e8e8;
  --color-rail-icon-active: var(--amber-400);

  /* 阴影(深色整体加重) */
  --shadow-card: 0 2px 12px rgba(0, 0, 0, 0.4);
  --shadow-bubble: 0 1px 1px rgba(0, 0, 0, 0.2);
  --shadow-pop: 0 8px 24px rgba(0, 0, 0, 0.4), 0 2px 6px rgba(0, 0, 0, 0.3);
  --shadow-menu: 0 8px 24px rgba(0, 0, 0, 0.5), 0 2px 6px rgba(0, 0, 0, 0.35);
  --shadow-seg-on: 0 1px 2px rgba(0, 0, 0, 0.35);
  --shadow-1: 0 1px 2px rgba(0, 0, 0, 0.3), 0 8px 24px rgba(0, 0, 0, 0.35);
  --shadow-2: 0 24px 80px rgba(0, 0, 0, 0.55);
  --shadow-3: 0 32px 96px rgba(0, 0, 0, 0.6);
  --shadow-drawer: -24px 0 64px rgba(0, 0, 0, 0.45);
  --shadow-files: 0 1px 2px rgba(0, 0, 0, 0.3), 0 12px 32px rgba(0, 0, 0, 0.4);
  --shadow-knob: 0 1px 3px rgba(0, 0, 0, 0.4);
  --shadow-hover-raise: 0 4px 16px rgba(0, 0, 0, 0.4);

  /* 代码高亮(github dark) */
  --hl-comment: #8b949e;
  --hl-keyword: #ff7b72;
  --hl-string: #a5d6ff;
  --hl-number: #79c0ff;
  --hl-function: #d2a8ff;
  --hl-class: #7ee787;
  --hl-symbol: #79c0ff;
  --hl-meta: #ffa657;
}

/* ---------- 第 2 层:语义 token —— 浅色完整覆写(白天值班室) ---------- */
:root[data-theme="light"] {
  color-scheme: light;

  /* 面 */
  --color-bg-rail: #20252b;                          /* 浅色模式 rail 依旧深色(V3 控制台气质) */
  --color-bg-rail-hover: rgba(255, 255, 255, 0.08);
  --color-bg-panel: var(--paper-0);
  --color-bg-panel-head: var(--paper-0);
  --color-bg-page: var(--paper-50);
  --color-bg-hover: var(--paper-100);
  --color-bg-active: var(--paper-150);
  --color-bg-hover-weak: rgba(0, 0, 0, 0.045);
  --color-bg-bubble-other: var(--paper-0);
  --color-bg-bubble-me: #2c333b;                     /* 自己气泡:墨钢(V3 系,V1 绿不保留) */
  --color-bg-input: var(--paper-0);
  --color-bg-subtle: rgba(0, 0, 0, 0.05);
  --color-bg-subtle-solid: #f7f7f9;
  --color-bg-note: rgba(0, 0, 0, 0.02);
  --color-bg-code: #f6f8fa;
  --color-bg-code-inline: rgba(0, 0, 0, 0.06);
  --color-bg-table-header: rgba(0, 0, 0, 0.04);
  --color-bg-switch-off: rgba(0, 0, 0, 0.15);
  --color-switch-knob: #ffffff;
  --color-bg-wiz-rail: linear-gradient(180deg, #f9f8f5, #f1efea);
  --color-bg-mask: rgba(0, 0, 0, 0.35);
  --color-bg-mask-warm: rgba(43, 38, 32, 0.42);      /* 遮罩:暖深棕灰(V5 既有材质) */
  --color-bg-mask-drawer: rgba(43, 38, 32, 0.2);
  --color-bg-glass: rgba(252, 250, 246, 0.82);       /* 抽屉磨砂底(暖白) */
  --color-bg-card-overlay: rgba(255, 255, 253, 0.94);
  --color-bg-toast: rgba(20, 20, 20, 0.88);
  --color-pop-bg: var(--paper-0);

  /* 字 */
  --color-text-primary: var(--ink-900);
  --color-text-secondary: var(--ink-650);
  --color-text-faint: var(--ink-450);
  --color-text-lowest: var(--ink-450);
  --color-text-bubble-me: #f2f4f5;
  --color-text-code: #24292f;
  --color-text-toast: #f2f2f2;
  --color-link: var(--azure-600);
  --color-avatar-fallback: #79838d;
  --color-avatar-text: #ffffff;
  --color-on-fill: #ffffff;

  /* 描边 */
  --color-border-subtle: #e2e2da;
  --color-border-overlay: rgba(0, 0, 0, 0.07);
  --color-border-strong: rgba(0, 0, 0, 0.22);
  --color-border-faint: rgba(0, 0, 0, 0.04);
  --color-border-input: #dddddd;
  --color-border-input-hover: #bbbbbb;
  --color-border-glass: rgba(255, 255, 255, 0.6);
  --color-border-on-head: rgba(34, 38, 43, 0.35);
  --color-bg-hover-on-head: rgba(0, 0, 0, 0.06);

  /* 强调(琥珀,浅色压深达 4.5 线) */
  --color-accent: var(--amber-700);
  --color-accent-strong: var(--amber-800);
  --color-accent-text: var(--amber-800);             /* 小字强调文本(白底实测 5.30:1) */
  --color-on-accent: #ffffff;
  --color-accent-tint-weak: rgba(168, 116, 26, 0.07);
  --color-accent-tint: rgba(168, 116, 26, 0.12);
  --color-accent-border: rgba(168, 116, 26, 0.32);
  --color-accent-border-strong: rgba(143, 99, 22, 0.5);

  /* 信号色 */
  --color-danger: var(--red-danger);
  --color-on-danger: #ffffff;
  --color-unread: var(--red-danger);
  --color-ok: #1e7a3c;                               /* V8 F3:体检通过(浅色浮层底实测对比 5.38:1) */
  --color-err-bg: #fdecea;
  --color-err-text: #b3261e;
  --color-warn-bg: #fff7e0;
  --color-warn-text: #8a6d1a;
  --color-warn-strong: #9a5600;
  --color-warn-deep: #8a5a00;
  --color-warn-border: rgba(178, 106, 0, 0.45);
  --color-warn-tint: rgba(255, 193, 7, 0.08);
  --color-warn-bg-soft: #fff7e6;
  --color-warn-agent: #9c4f0c;
  --color-agent-tint: rgba(255, 152, 0, 0.14);
  --color-led-off: #b6bcc2;
  --color-link-tint: rgba(87, 107, 149, 0.12);
  --color-link-tint-weak: rgba(87, 107, 149, 0.08);
  --color-link-border: rgba(87, 107, 149, 0.45);
  --color-rail-icon: #8a939c;
  --color-rail-icon-hover: #e8e8e8;
  --color-rail-icon-active: var(--amber-400);

  /* 阴影 */
  --shadow-card: 0 2px 12px rgba(0, 0, 0, 0.08);
  --shadow-bubble: 0 1px 1px rgba(0, 0, 0, 0.03);
  --shadow-pop: 0 4px 16px rgba(0, 0, 0, 0.12), 0 1px 3px rgba(0, 0, 0, 0.08);
  --shadow-menu: 0 8px 24px rgba(0, 0, 0, 0.14), 0 2px 6px rgba(0, 0, 0, 0.08);
  --shadow-seg-on: 0 1px 2px rgba(0, 0, 0, 0.12);
  --shadow-1: 0 1px 2px rgba(0, 0, 0, 0.04), 0 8px 24px rgba(0, 0, 0, 0.06);
  --shadow-2: 0 24px 80px rgba(30, 25, 20, 0.28);
  --shadow-3: 0 32px 96px rgba(30, 25, 20, 0.34);
  --shadow-drawer: -24px 0 64px rgba(30, 25, 20, 0.16);
  --shadow-files: 0 1px 2px rgba(0, 0, 0, 0.04), 0 12px 32px rgba(0, 0, 0, 0.09);
  --shadow-knob: 0 1px 3px rgba(0, 0, 0, 0.2);
  --shadow-hover-raise: 0 4px 16px rgba(0, 0, 0, 0.1);

  /* 代码高亮(github light 原语值沿用) */
  --hl-comment: #6a737d;
  --hl-keyword: #d73a49;
  --hl-string: #032f62;
  --hl-number: #005cc5;
  --hl-function: #6f42c1;
  --hl-class: #22863a;
  --hl-symbol: #005cc5;
  --hl-meta: #b31d28;
}

/* ---------- 基础 ---------- */
* { box-sizing: border-box; margin: 0; padding: 0; }

[hidden] { display: none !important; } /* hidden 属性必须压过各视图的 display 规则 */

html, body {
  height: 100%;
  overflow: hidden;
}

body {
  font-family: var(--font-ui);
  font-size: var(--fs-body);
  line-height: var(--lh-body);
  letter-spacing: 0;
  color: var(--color-text-primary);
  background: var(--color-bg-page);
  -webkit-font-smoothing: antialiased;
}

#app {
  height: 100vh;
  height: 100dvh;
  overflow: hidden;
}

.view { height: 100%; }

button { font-family: inherit; cursor: pointer; }
input, textarea { font-family: inherit; }
::placeholder { color: var(--color-text-faint); opacity: 1; }

/* ---------- 通用组件 ---------- */
.avatar {
  flex: none;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 4px;
  color: var(--color-avatar-text);
  font-weight: 600;
  user-select: none;
  background: var(--avatar-bg, var(--color-avatar-fallback));
}
.avatar-sm { width: 32px; height: 32px; font-size: 13px; }

.btn-primary {
  border: none;
  border-radius: 4px;
  background: var(--color-accent-strong);
  color: var(--color-on-accent);
  font-size: 15px;
  padding: 10px 20px;
  transition: filter var(--dur-fast) var(--ease-ui), opacity var(--dur-fast) var(--ease-ui);
}
:root[data-theme="dark"] .btn-primary { background: var(--color-accent); }
.btn-primary:hover:not(:disabled) { filter: brightness(1.07); }
.btn-primary:active:not(:disabled) { filter: brightness(0.94); }
.btn-primary:disabled { opacity: 0.45; cursor: not-allowed; }
.btn-primary:focus-visible { outline: 2px solid var(--color-accent); outline-offset: 2px; }

.icon-btn {
  display: none;                 /* 桌面隐藏返回按钮 */
  width: var(--touch-min);
  height: var(--touch-min);
  border: none;
  background: transparent;
  color: var(--color-text-primary);
  align-items: center;
  justify-content: center;
  border-radius: 4px;
}
.icon-btn:focus-visible { outline: 2px solid var(--color-accent); outline-offset: -2px; }

/* ---------- 登录视图 ---------- */
#login-view {
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--color-bg-page);
  padding: 16px;
}

.login-card {
  width: 340px;
  max-width: 100%;
  background: var(--color-pop-bg);
  border-radius: 8px;
  padding: 36px 32px 28px;
  box-shadow: var(--shadow-card);
  display: flex;
  flex-direction: column;
  gap: 16px;
}

.login-title {
  font-size: 22px;
  font-weight: 600;
  text-align: center;
}

.login-sub {
  font-size: 13px;
  color: var(--color-text-secondary);
  text-align: center;
  margin-top: -10px;
}

.login-hint {
  font-size: 12px;
  color: var(--color-text-secondary);
  text-align: center;
}

.login-field { display: flex; flex-direction: column; gap: 6px; }
.login-label { font-size: 13px; color: var(--color-text-secondary); }

.login-field input {
  height: 40px;
  border: 1px solid var(--color-border-subtle);
  background: var(--color-bg-input);
  color: var(--color-text-primary);
  border-radius: 4px;
  padding: 0 12px;
  font-size: 15px;
  transition: border-color var(--dur-fast) var(--ease-ui);
}
.login-field input:focus { outline: none; border-color: var(--color-accent); }

.login-error {
  color: var(--color-err-text);
  font-size: 13px;
  min-height: 18px;
}

#login-btn { height: 42px; width: 100%; }

.login-status {
  text-align: center;
  font-size: 13px;
  color: var(--color-text-secondary);
}

/* ---------- 主界面三栏(V8 F1:rail + 列表 + 聊天;员工总览独占右两格) ---------- */
#main-view {
  display: grid;
  grid-template-columns: var(--v8-rail-w) var(--sidebar-w) minmax(0, 1fr);
  height: 100%;
}

/* V8:员工总览占列表+聊天两格(与二者 hidden 互斥,grid 显式定位防换行) */
#v8-bots-view {
  grid-column: 2 / -1;
  grid-row: 1;
  min-width: 0;
}

/* 左栏 */
#sidebar {
  background: var(--color-bg-panel);
  display: flex;
  flex-direction: column;
  min-height: 0;
  border-right: 1px solid var(--color-border-subtle);
}

#sidebar-header {
  position: relative; /* 新建菜单锚点 */
  height: var(--header-h);
  flex: none;
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 0 16px;
  border-bottom: 1px solid var(--color-border-subtle);
}

/* V5 热修:+ 号新建菜单(微信式白底小卡片;tool 型克制动效) */
#create-group-btn svg { transition: transform var(--dur-fast) var(--ease-ui); }
#create-group-btn.menu-open svg { transform: rotate(45deg); } /* + 旋转变 × */
.v5-create-menu {
  position: absolute;
  top: calc(100% - 12px); /* 紧贴+号下沿(+号悬在标题栏中部,贴栏底会离+号 18px 显得飘;上提盖住底部分隔线,微信同款) */
  right: 10px;
  z-index: 50; /* 低于浮层遮罩(60/70),不挡向导/抽屉 */
  min-width: 152px;
  padding: 4px;
  background: var(--color-pop-bg);
  border: 1px solid var(--color-border-subtle);
  border-radius: 10px;
  box-shadow: var(--shadow-menu);
  transform-origin: top right;
  animation: v5-pop-in var(--dur-fast) var(--ease-ui);
}
.v5-create-item {
  display: flex;
  align-items: center;
  gap: 8px;
  width: 100%;
  padding: 9px 12px;
  border: 0;
  background: none;
  border-radius: 7px;
  font-size: 14px;
  color: var(--color-text-primary);
  cursor: pointer;
  text-align: left;
  white-space: nowrap;
}
.v5-create-item svg { color: var(--color-text-secondary); flex: none; }
.v5-create-item:hover { background: var(--color-bg-active); }
.v5-create-item:hover svg { color: var(--color-accent); }
.v5-create-item:focus-visible { outline: 2px solid var(--color-accent); outline-offset: -2px; }
@media (prefers-reduced-motion: reduce) {
  #create-group-btn svg { transition: none; }
  .v5-create-menu { animation: none; }
}

.sidebar-user {
  font-size: 14px;
  font-weight: 600;
  flex: 1;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.conn-dot {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--color-led-off);
  flex: none;
}
.conn-dot.online { background: var(--color-accent); }
.conn-dot.offline { background: var(--color-danger); }

#room-list {
  list-style: none;
  overflow-y: auto;
  flex: 1;
  min-height: 0;
}

.room-item {
  height: var(--room-item-h);
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 0 16px;
  cursor: pointer;
  transition: background var(--dur-fast) var(--ease-ui);
}
.room-item:hover { background: var(--color-bg-hover); }
.room-item.active { background: var(--color-bg-active); }
.room-item:focus-visible { outline: 2px solid var(--color-accent); outline-offset: -2px; }

.room-avatar { width: var(--avatar-room); height: var(--avatar-room); font-size: 15px; }

.room-main { flex: 1; min-width: 0; }

.room-top {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 8px;
}

.room-name {
  font-size: var(--fs-room-name);
  font-weight: 500;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  min-width: 0;
}

.room-time {
  flex: none;
  font-size: 11px;
  color: var(--color-text-faint);
}

.room-summary {
  font-size: var(--fs-summary);
  color: var(--color-text-secondary);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  margin-top: 2px;
}

.room-empty {
  padding: 32px 16px;
  text-align: center;
  color: var(--color-text-secondary);
  font-size: 13px;
}

/* 右栏:聊天区 */
#chat-panel {
  display: flex;
  flex-direction: column;
  min-width: 0;
  min-height: 0;
  background: var(--color-bg-page);
}

#chat-header {
  min-height: var(--header-h); /* V6 F1:固定 height 改 min-height,成员状态行换行时随内容增高(PLAN-V6 5.5) */
  flex: none;
  display: flex;
  align-items: center;
  gap: 4px;
  padding: 6px 16px;
  background: var(--color-bg-panel-head);
  color: var(--color-text-primary);
}

#chat-title-wrap { min-width: 0; flex: 1; }

#chat-title {
  font-size: var(--fs-title);
  font-weight: 500;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* V6 F1 黑条:第一行总体信息(单行省略,"正在干活"轻提示);第二行默认空白,
   仅有成员出错时红色一行("小月 出错"/"小月、小码 出错",2026-10 森哥验收热修) */
.chat-status { min-width: 0; }

#chat-status-summary {
  font-size: var(--fs-status);
  color: var(--color-text-secondary);
  min-height: 16px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

#chat-member-status {
  font-size: 11px;
  line-height: 1.7;
  color: var(--color-text-secondary);
  overflow-wrap: anywhere;
}
#chat-member-status:empty { display: none; }
.member-status-text { min-width: 0; }
.member-status-text.is-error { color: var(--color-danger); font-weight: 600; }

/* 连接状态横幅 */
.conn-banner {
  flex: none;
  padding: 8px 16px;
  font-size: 13px;
  text-align: center;
}
.conn-banner.warn { background: var(--color-warn-bg); color: var(--color-warn-text); }
.conn-banner.error { background: var(--color-err-bg); color: var(--color-err-text); }

/* 消息区域(桌面纵向 padding 24px,与 PLAN 第 3 节对齐) */
#msg-scroll {
  flex: 1;
  min-height: 0;
  overflow-y: auto;
  padding: 24px var(--msg-padding);
}

.time-divider {
  text-align: center;
  margin: 12px 0;
}
.time-divider time {
  font-size: 12px;
  color: var(--color-text-faint);
  background: var(--color-bg-subtle);
  border-radius: 4px;
  padding: 2px 10px;
}

.msg-row {
  display: flex;
  gap: 10px;
  margin-bottom: 16px;
  min-width: 0;
}

.msg-row.own { flex-direction: row-reverse; }

.msg-avatar { width: var(--avatar-msg); height: var(--avatar-msg); font-size: 13px; }

.msg-body {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  min-width: 0;
  max-width: var(--bubble-max);
}
.msg-row.own .msg-body { align-items: flex-end; }

.msg-meta {
  font-size: 12px;
  color: var(--color-text-secondary);
  margin-bottom: 4px;
}

.bubble {
  min-width: 0;
  max-width: 100%;
  background: var(--color-bg-bubble-other);
  border-radius: 4px;
  padding: 10px 12px;
  font-size: var(--fs-msg);
  line-height: var(--lh-body);
  box-shadow: var(--shadow-bubble);
}

.msg-row.own .bubble { background: var(--color-bg-bubble-me); color: var(--color-text-bubble-me); }
.msg-row.own .bubble .mention,
.msg-row.own .bubble .md a { color: inherit; text-decoration: underline; }

.bubble-content {
  min-width: 0;
  overflow-wrap: anywhere;
  word-break: break-word;
}

.bubble-content.plain { white-space: pre-wrap; }

.bubble-status {
  font-size: 12px;
  color: var(--color-text-secondary);
  margin-top: 4px;
}
.bubble-status:empty { display: none; }

.msg-row.pending .bubble { opacity: 0.75; }
.bubble-status .st-error { color: var(--color-err-text); }

/* 流式"正在输入"三点 */
.typing-dots { display: inline-flex; gap: 4px; padding: 4px 2px; }
.typing-dots i {
  width: 6px; height: 6px; border-radius: 50%;
  background: var(--color-text-secondary);
  animation: typing-bounce 1s infinite var(--ease-ui);
}
.typing-dots i:nth-child(2) { animation-delay: 0.15s; }
.typing-dots i:nth-child(3) { animation-delay: 0.3s; }
@keyframes typing-bounce {
  0%, 60%, 100% { transform: translateY(0); opacity: 0.5; }
  30% { transform: translateY(-4px); opacity: 1; }
}

/* 回到底部 */
.back-to-bottom {
  position: absolute;
  right: 24px;
  bottom: calc(var(--composer-h) + 16px);
  border: 1px solid var(--color-border-subtle);
  background: var(--color-pop-bg);
  border-radius: 16px;
  padding: 6px 14px;
  font-size: 12px;
  color: var(--color-text-secondary);
  box-shadow: var(--shadow-pop);
}
.back-to-bottom:hover { color: var(--color-text-primary); }

#chat-panel { position: relative; }

/* ---------- 输入区 ---------- */
#composer {
  position: relative; /* V6 F1:@ 浮层定位基准 */
  flex: none;
  background: var(--color-bg-panel-head);
  border-top: 1px solid var(--color-border-subtle);
  padding: 12px 16px 10px;
  display: flex;
  flex-direction: column;
  gap: 8px;
}

/* V6 F1 输入区工具行(textarea 上方;@ 入口仅群聊可见) */
#composer-tools {
  display: flex;
  align-items: center;
  gap: 8px;
}

#mention-open-btn {
  min-width: 36px;
  height: 30px;
  padding: 0 10px;
  border: 1px solid var(--color-border-subtle);
  border-radius: 4px;
  background: var(--color-pop-bg);
  color: var(--color-text-secondary);
  font-size: 15px;
  line-height: 1;
  transition: background var(--dur-fast) var(--ease-ui);
}
#mention-open-btn:hover { background: var(--color-bg-panel); color: var(--color-text-primary); }
#mention-open-btn:focus-visible { outline: 2px solid var(--color-accent); outline-offset: 1px; }

/* V6 F1 @ 成员选择浮层:固定输入区上方,限高内部滚动,焦点留 textarea */
.mention-menu {
  position: absolute;
  left: 16px;
  right: 16px;
  bottom: calc(100% + 4px);
  max-height: 264px;
  overflow-y: auto;
  background: var(--color-pop-bg);
  border: 1px solid var(--color-border-subtle);
  border-radius: 8px;
  box-shadow: var(--shadow-pop);
  padding: 4px;
  z-index: 20;
}
.mention-option {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 6px 10px;
  border-radius: 6px;
  font-size: 14px;
  color: var(--color-text-primary);
  cursor: pointer;
  user-select: none;
}
.mention-option:hover { background: var(--color-bg-active); }
/* 键盘当前项:左侧品牌绿内刻线 + 底,hover 不抢键盘当前项 */
.mention-option.is-active { background: var(--color-bg-active); box-shadow: inset 2px 0 0 var(--color-accent); }
.mention-option.is-ambiguous { color: var(--color-text-faint); }
.mention-option-avatar { width: 24px; height: 24px; font-size: 11px; flex: none; }
.mention-option-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.mention-option-id { margin-left: auto; flex: none; font-size: 11px; color: var(--color-text-faint); }

@media (max-width: 767px) {
  #mention-open-btn { min-width: var(--touch-min); min-height: var(--touch-min); }
  .mention-menu { left: 8px; right: 8px; max-height: 40vh; max-height: 40dvh; }
  .mention-option { min-height: var(--touch-min); }
}

#composer-input {
  width: 100%;
  border: none;
  outline: none;
  resize: none;
  font-size: var(--fs-msg);
  line-height: var(--lh-body);
  height: calc(var(--composer-h) - 62px);
  max-height: calc(var(--composer-h) - 62px);
  overflow-y: auto;
  background: transparent;
}

#composer-bar {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: 12px;
}

.composer-counter { font-size: 12px; color: var(--color-text-faint); }
.composer-counter.near-limit { color: var(--color-danger); }
.composer-hint { font-size: 12px; color: var(--color-text-faint); flex: 1; text-align: right; }

.btn-send {
  min-width: 88px;
  height: 38px;
  padding: 0 18px;
  font-size: 14px;
}

/* ==========================================================================
   Markdown 正文排版(bubble 内 .md)
   ========================================================================== */
.md > *:first-child { margin-top: 0; }
.md > *:last-child { margin-bottom: 0; }

.md p { margin: 0.5em 0; }
.md h1, .md h2, .md h3, .md h4, .md h5, .md h6 {
  margin: 0.8em 0 0.4em;
  line-height: 1.4;
  font-weight: 600;
}
.md h1 { font-size: 1.35em; }
.md h2 { font-size: 1.22em; }
.md h3 { font-size: 1.12em; }
.md h4, .md h5, .md h6 { font-size: 1em; }

.md ul, .md ol { margin: 0.4em 0; padding-left: 1.6em; }
.md li { margin: 0.15em 0; }
.md li > ul, .md li > ol { margin: 0.1em 0; }

.md blockquote {
  margin: 0.5em 0;
  padding: 2px 12px;
  border-left: 3px solid var(--color-border-subtle);
  color: var(--color-text-secondary);
}

.md hr { border: none; border-top: 1px solid var(--color-border-subtle); margin: 0.8em 0; }

.md a { color: var(--color-link); text-decoration: none; }
.md a:hover { text-decoration: underline; }

.md code {
  font-family: var(--font-mono);
  font-size: 0.88em;
  background: var(--color-bg-code-inline);
  border-radius: 3px;
  padding: 1px 5px;
}

.md pre {
  margin: 0.5em 0;
  background: var(--color-bg-code);
  border-radius: 6px;
  padding: 10px 12px;
  overflow-x: auto;
  max-width: 100%;
}
.md pre code {
  background: transparent;
  padding: 0;
  font-size: 13px;
  line-height: 1.55;
  white-space: pre;
  overflow-wrap: normal;
  word-break: normal;
  display: block;
}

/* 表格独立横向滚动,不撑破布局 */
.md table {
  display: block;
  max-width: 100%;
  overflow-x: auto;
  border-collapse: collapse;
  margin: 0.5em 0;
  font-size: 0.92em;
}
.md th, .md td {
  border: 1px solid var(--color-border-subtle);
  padding: 5px 10px;
  white-space: nowrap;
}
.md th { background: var(--color-bg-table-header); font-weight: 600; }
.md td { white-space: normal; min-width: 60px; }

/* highlight.js 令牌配色(github light 风格,手写精简版) */
.hljs-comment, .hljs-quote { color: var(--hl-comment); font-style: italic; }
.hljs-keyword, .hljs-selector-tag, .hljs-doctag { color: var(--hl-keyword); }
.hljs-string, .hljs-regexp, .hljs-addition { color: var(--hl-string); }
.hljs-number, .hljs-literal { color: var(--hl-number); }
.hljs-built_in, .hljs-attr, .hljs-attribute, .hljs-variable, .hljs-template-variable, .hljs-type { color: var(--hl-function); }
.hljs-title, .hljs-title.function_, .hljs-section { color: var(--hl-function); }
.hljs-title.class_, .hljs-name, .hljs-selector-id, .hljs-selector-class { color: var(--hl-class); }
.hljs-symbol, .hljs-bullet, .hljs-link { color: var(--hl-symbol); }
.hljs-meta, .hljs-deletion { color: var(--hl-meta); }
.hljs-emphasis { font-style: italic; }
.hljs-strong { font-weight: 600; }

/* ==========================================================================
   中等屏:768–1023px 左栏收窄(PLAN 第 3 节;1024 起回归标准 280px 桌面档)
   ========================================================================== */
@media (min-width: 768px) and (max-width: 1023px) {
  :root { --sidebar-w: 240px; }
}

/* ==========================================================================
   手机竖屏:max-width 767px,单面板
   ========================================================================== */
@media (max-width: 767px) {
  :root { --v8-rail-w: 48px; } /* V8 F1:窄屏 rail 收 48px(PLAN P1-F1) */

  #main-view { display: block; position: relative; }

  /* V8:手机上面板从 rail 右侧起;rail「聊天」入口与返回键都能回列表。
     rail 本体的窄屏定位规则在文件尾 V8 段的媒体查询里(源序必须晚于 #v8-rail 基础规则,
     否则基础规则的 position:relative 会把这里的 absolute 按同特异性源序覆盖——2026-10-11 实踩) */

  #sidebar, #chat-panel, #v8-bots-view {
    position: absolute;
    top: 0;
    bottom: 0;
    left: var(--v8-rail-w);
    right: 0;
    transition: transform 200ms var(--ease-ui), visibility 200ms;
  }

  #sidebar { z-index: 1; }
  #chat-panel {
    z-index: 2;
    transform: translateX(100%);
    visibility: hidden;
  }
  #v8-bots-view { z-index: 3; }
  #main-view.chat-open #chat-panel { transform: translateX(0); visibility: visible; }
  #main-view.chat-open #sidebar { visibility: hidden; }

  #chat-header { min-height: var(--header-h-mobile); padding: 4px 4px 4px 0; }
  .icon-btn { display: flex; }

  #msg-scroll { padding: 12px var(--msg-padding-mobile); }
  .msg-body { max-width: var(--bubble-max-mobile); }
  .msg-row { margin-bottom: 12px; }

  #composer {
    padding: 8px 8px calc(8px + env(safe-area-inset-bottom, 0px));
  }
  #composer-input {
    font-size: var(--fs-mobile-input);   /* 防 iOS 聚焦自动放大 */
    height: auto;
    min-height: 40px;
    max-height: 120px;
  }
  .btn-send { min-height: var(--touch-min); min-width: 72px; }

  .back-to-bottom { bottom: 120px; right: 12px; }

  .login-card { padding: 28px 20px 22px; }
}

/* 无 JS 过渡偏好:工具型克制,仅保留面板切换,其余交 prefers-reduced-motion */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
  }
  .typing-dots i { animation: none; opacity: 0.8; }
}

/* ==========================================================================
   V2 群聊:沿用 V1 变量与组件,不发明新视觉风格
   ========================================================================== */

/* F1 侧栏建群入口(#v5-create-bot-btn 已挪进+号菜单作菜单项,32px 方钮样式不再适用——
   它与 .v5-create-item 叠加时 id 优先级更高,把菜单项压回 32px 小方框导致"新建员工"溢出卡片,2026-10-07 森哥三图实锤) */
#create-group-btn {
  flex: none;
  width: 32px;
  height: 32px;
  border: none;
  background: transparent;
  color: var(--color-text-secondary);
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 4px;
  transition: background var(--dur-fast) var(--ease-ui), color var(--dur-fast) var(--ease-ui);
}
#create-group-btn:hover { background: var(--color-bg-hover); color: var(--color-text-primary); }
#create-group-btn:focus-visible { outline: 2px solid var(--color-accent); outline-offset: -2px; }

/* F3 群顶栏管理入口(深色顶栏上的描边小按钮) */
#group-manage-btn {
  flex: none;
  border: 1px solid var(--color-border-on-head);
  background: transparent;
  color: var(--color-text-secondary);
  border-radius: 4px;
  font-size: 12px;
  padding: 5px 12px;
  min-height: 32px;
  transition: background var(--dur-fast) var(--ease-ui), color var(--dur-fast) var(--ease-ui);
}
#group-manage-btn:hover { background: var(--color-bg-hover-on-head); color: var(--color-text-primary); }
#group-manage-btn:focus-visible { outline: 2px solid var(--color-accent); outline-offset: -2px; }

/* F2 群九宫格头像:仅绘制真实成员,少于九人居中 */
.avatar.avatar-group {
  background: var(--color-border-subtle);
  display: flex;
  flex-wrap: wrap;
  align-content: center;
  justify-content: center;
  gap: 1px;
  padding: 3px;
}
.avatar-group .avatar-cell {
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--color-pop-bg);
  border-radius: 2px;
  overflow: hidden;
  user-select: none;
}
.avatar-group[data-n="1"] .avatar-cell { width: 34px; height: 34px; font-size: 15px; font-weight: 600; }
.avatar-group[data-n="2"] .avatar-cell,
.avatar-group[data-n="3"] .avatar-cell,
.avatar-group[data-n="4"] .avatar-cell { width: 16px; height: 16px; font-size: 8px; }
.avatar-group[data-n="5"] .avatar-cell,
.avatar-group[data-n="6"] .avatar-cell,
.avatar-group[data-n="7"] .avatar-cell,
.avatar-group[data-n="8"] .avatar-cell,
.avatar-group[data-n="9"] .avatar-cell { width: 10px; height: 10px; font-size: 6px; }

/* F2 群列表成员摘要行 */
.room-members {
  font-size: 11px;
  color: var(--color-text-faint);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  margin-top: 2px;
}

/* F4 @ 提及高亮(按服务端 mentions 片段,用户气泡绿底上仍可读) */
.mention { color: var(--color-link); font-weight: 500; }

/* F1/F5 弹窗与面板 */
.modal-mask {
  position: fixed;
  inset: 0;
  background: var(--color-bg-mask);
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 16px;
  z-index: 30;
}
.modal-card {
  width: 420px;
  max-width: 100%;
  max-height: calc(100vh - 32px);
  max-height: calc(100dvh - 32px);
  overflow-y: auto;
  background: var(--color-pop-bg);
  border-radius: 8px;
  box-shadow: var(--shadow-card);
  padding: 20px;
  display: flex;
  flex-direction: column;
  gap: 14px;
}
.modal-title { font-size: var(--fs-title); font-weight: 600; }
.modal-field { display: flex; flex-direction: column; gap: 6px; }
.modal-label { font-size: 13px; color: var(--color-text-secondary); }
.modal-field input,
.modal-field textarea {
  border: 1px solid var(--color-border-subtle);
  background: var(--color-bg-input);
  color: var(--color-text-primary);
  border-radius: 4px;
  padding: 0 12px;
  font-size: 15px;
  font-family: inherit;
  transition: border-color var(--dur-fast) var(--ease-ui);
}
.modal-field input { height: 40px; }
.modal-field textarea {
  padding: 8px 12px;
  resize: vertical;
  min-height: 72px;
  line-height: var(--lh-body);
}
.modal-field input:focus,
.modal-field textarea:focus { outline: none; border-color: var(--color-accent); }
.modal-error { color: var(--color-err-text); font-size: 13px; min-height: 18px; }
.modal-actions { display: flex; justify-content: flex-end; gap: 10px; }

.btn-plain {
  border: 1px solid var(--color-border-subtle);
  border-radius: 4px;
  background: var(--color-pop-bg);
  color: var(--color-text-primary);
  font-size: 15px;
  padding: 10px 20px;
  transition: background var(--dur-fast) var(--ease-ui);
}
.btn-plain:hover:not(:disabled) { background: var(--color-bg-panel); }
.btn-plain:disabled { color: var(--color-text-faint); cursor: not-allowed; }
.btn-plain:focus-visible { outline: 2px solid var(--color-accent); outline-offset: 2px; }

.btn-danger {
  border: none;
  border-radius: 4px;
  background: var(--color-danger);
  color: var(--color-pop-bg);
  font-size: 15px;
  padding: 10px 20px;
  transition: opacity var(--dur-fast) var(--ease-ui);
}
.btn-danger:hover:not(:disabled) { opacity: 0.88; }
.btn-danger:disabled { opacity: 0.6; cursor: not-allowed; }
.btn-danger.confirming { outline: 2px solid var(--color-danger); outline-offset: 2px; }
.btn-danger:focus-visible { outline: 2px solid var(--color-danger); outline-offset: 2px; }

/* F1 员工勾选列表 */
.bot-check-list {
  list-style: none;
  display: flex;
  flex-direction: column;
  gap: 6px;
  max-height: 180px;
  overflow-y: auto;
}
.bot-check-item {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 8px 10px;
  border: 1px solid var(--color-border-subtle);
  border-radius: 6px;
  cursor: pointer;
  transition: background var(--dur-fast) var(--ease-ui);
}
.bot-check-item:hover { background: var(--color-bg-page); }
.bot-check-item input[type="checkbox"] {
  width: 18px;
  height: 18px;
  flex: none;
  accent-color: var(--color-accent);
}
.bot-check-item input[type="checkbox"]:focus-visible { outline: 2px solid var(--color-accent); outline-offset: 1px; }
.bot-check-name { font-size: 14px; overflow: hidden; text-overflow: ellipsis; }
.bot-check-empty { padding: 12px; text-align: center; color: var(--color-text-secondary); font-size: 13px; }

/* F5 群信息面板 */
.panel-section { display: flex; flex-direction: column; gap: 4px; }
.panel-text { font-size: 14px; overflow-wrap: anywhere; }
#panel-desc { white-space: pre-wrap; }
.panel-desc-empty { color: var(--color-text-faint); }
.panel-member-list {
  list-style: none;
  display: flex;
  flex-direction: column;
  gap: 8px;
  max-height: 200px;
  overflow-y: auto;
}
.panel-member { display: flex; align-items: center; gap: 10px; font-size: 14px; }
.panel-member-tag {
  margin-left: auto;
  font-size: 11px;
  color: var(--color-text-faint);
  border: 1px solid var(--color-border-subtle);
  border-radius: 3px;
  padding: 1px 6px;
}

/* ==========================================================================
   V3 群聊协作:沿用既有 token,不发明新视觉风格
   ========================================================================== */

/* F1 输入框旁的协作意图轻提示 */
.collab-hint {
  align-self: flex-start;
  font-size: 12px;
  color: var(--color-accent-text);
  background: var(--color-bg-subtle);
  border-radius: 4px;
  padding: 2px 8px;
  max-width: 100%;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.collab-hint.warn { color: var(--color-warn-text); background: var(--color-warn-bg); }

/* F4 系统提示行:居中浅色小字(微信系统消息风格),无头像无气泡 */
.sys-notice {
  text-align: center;
  margin: 10px 0;
  font-size: 12px;
  color: var(--color-text-faint);
}
.sys-notice-text {
  display: inline-block;
  max-width: 86%;
  background: var(--color-bg-subtle);
  border-radius: 4px;
  padding: 2px 10px;
  overflow-wrap: anywhere;
}

/* ==========================================================================
   V4 无人值守协作:沿用既有 token,不发明新视觉风格
   ========================================================================== */

/* F2 房间列表协作状态徽标:一律带文字(色弱可读);"需处理"红底白字比普通完成醒目 */
.room-collab-badge {
  flex: none;
  margin-left: auto; /* 与时间一起靠右,群名占左侧弹性空间 */
  max-width: 96px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-size: 11px;
  line-height: 1.6;
  padding: 0 6px;
  border: 1px solid var(--color-border-subtle);
  border-radius: 3px;
  color: var(--color-text-secondary);
  background: var(--color-pop-bg);
}
.room-collab-badge.attention {
  border-color: var(--color-danger);
  background: var(--color-danger);
  color: var(--color-on-danger);
  font-weight: 600;
}

/* F3 群内轻量协作状态区:警示底 + 文字说明 + "知道了"清标按钮(键盘可达) */
.collab-status-bar {
  flex: none;
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 6px 16px;
  font-size: 12px;
  color: var(--color-warn-text);
  background: var(--color-warn-bg);
  border-bottom: 1px solid var(--color-border-subtle);
}
.collab-status-text {
  flex: 1;
  min-width: 0;
  overflow-wrap: anywhere;
}
.collab-ack-btn {
  flex: none;
  border: 1px solid var(--color-accent-border);
  border-radius: 4px;
  background: var(--color-pop-bg);
  color: var(--color-accent-text);
  font-size: 12px;
  padding: 3px 12px;
  min-height: 28px;
  transition: background var(--dur-fast) var(--ease-ui);
}
.collab-ack-btn:hover { background: var(--color-bg-active); }
.collab-ack-btn:focus-visible { outline: 2px solid var(--color-accent); outline-offset: 1px; }

@media (max-width: 767px) {
  .collab-status-bar { padding: 6px 12px; }
  .collab-ack-btn { min-height: var(--touch-min); padding: 4px 14px; }
}

/* ==========================================================================
   V2 手机竖屏补充:弹窗可视高度、触摸目标
   ========================================================================== */
@media (max-width: 767px) {
  #create-group-btn { width: var(--touch-min); height: var(--touch-min); }
  #group-manage-btn { min-height: 36px; padding: 5px 10px; margin-right: 4px; }

  /* 弹窗贴可视高度,软键盘升起时内容内部滚动、按钮仍可达 */
  .modal-mask { padding: 12px; }
  .modal-card { padding: 16px; gap: 12px; }
  .modal-actions .btn-primary,
  .modal-actions .btn-plain,
  .modal-actions .btn-danger { min-height: var(--touch-min); }
  .bot-check-item { min-height: var(--touch-min); }
}

/* ==========================================================================
   V5 员工工位(方向稿 v1-层叠工牌落地)
   材质:磨砂亚克力抽屉 + 半透卡片叠影;色彩全部取自既有 token,不发明新色。
   盲评整改落点:
   ① 向导首步收紧 → .v5-wizard[data-current="name"] 高度自适应 + 输入限宽
   ② 抽屉文件区主次 → .v5-dcard-files 增重 / .v5-dcard-compact 压缩 / 改绑箭头可辨
   ③ 浮层辨识度 → 暖调遮罩与浮面 + 三级阴影 + 身份小标记(kernel-tag/member-k/artifact-from)
   ========================================================================== */

/* V5 浮层材质/三级阴影/抽屉几何 token 已并入文件头两层 token 体系(深浅两套) */

/* ---------- 遮罩与浮层基础 ---------- */
.v5-mask {
  position: fixed;
  inset: 0;
  z-index: 60;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 24px;
  background: var(--color-bg-mask-warm);
  animation: v5-mask-in 0.25s var(--ease-ui);
}
@keyframes v5-mask-in { from { opacity: 0; } }

/* 弹层入场(工具型:modal/sheet 入场 200-300ms,opacity+translate 一次性) */
.v5-mask > * {
  animation: v5-pop-in 0.3s var(--ease-ui);
}
@keyframes v5-pop-in {
  from { opacity: 0; transform: translateY(16px) scale(0.98); }
  to { opacity: 1; transform: none; }
}

.v5-error {
  color: var(--color-err-text);
  background: var(--color-err-bg);
  border-radius: 8px;
  padding: 8px 12px;
  font-size: 12px;
  line-height: 1.5;
}
.v5-status { font-size: 12px; color: var(--color-text-faint); min-height: 1em; }
.v5-mono { font-family: var(--font-mono); font-size: 12px; }

/* ---------- 按钮族 ---------- */
.v5-btn {
  border: 1px solid var(--color-border-subtle);
  background: var(--color-pop-bg);
  color: var(--color-text-primary);
  border-radius: 10px;
  padding: 8px 20px;
  font-size: 14px;
  transition: background var(--dur-fast) var(--ease-ui), border-color var(--dur-fast) var(--ease-ui);
}
.v5-btn:hover { background: var(--color-bg-page); }
.v5-btn:focus-visible { outline: 2px solid var(--color-accent); outline-offset: 1px; }
.v5-btn.primary { background: var(--color-accent-strong); border-color: var(--color-accent-strong); color: var(--color-on-accent); }
:root[data-theme="dark"] .v5-btn.primary { background: var(--color-accent); border-color: var(--color-accent); }
.v5-btn.primary:hover:not(:disabled) { filter: brightness(1.07); }
.v5-btn.primary:active:not(:disabled) { filter: brightness(0.94); }
.v5-btn.primary:disabled { opacity: 0.45; cursor: not-allowed; }
.v5-btn.danger { background: var(--color-danger); border-color: var(--color-danger); color: var(--color-on-danger); }
.v5-btn.danger:hover:not(:disabled) { filter: brightness(0.92); }
.v5-btn:disabled { cursor: not-allowed; opacity: 0.6; }

.v5-mini-btn {
  border: 1px solid var(--color-border-overlay);
  background: var(--color-pop-bg);
  color: var(--color-text-primary);
  border-radius: 8px;
  padding: 5px 14px;
  font-size: 12px;
  transition: background var(--dur-fast) var(--ease-ui);
}
.v5-mini-btn:hover { background: var(--color-bg-hover-weak); }
.v5-mini-btn:focus-visible { outline: 2px solid var(--color-accent); outline-offset: 1px; }
.v5-mini-btn.primary { background: var(--color-accent-strong); border-color: var(--color-accent-strong); color: var(--color-on-accent); }
:root[data-theme="dark"] .v5-mini-btn.primary { background: var(--color-accent); border-color: var(--color-accent); }
.v5-mini-btn.primary:hover:not(:disabled) { filter: brightness(1.07); }
.v5-mini-btn:disabled { cursor: not-allowed; opacity: 0.6; }

.v5-text-btn {
  border: none;
  background: none;
  color: var(--color-link);
  font-size: 12px;
  padding: 2px 6px;
  border-radius: 6px;
}
.v5-text-btn:hover { background: var(--color-link-tint); }
.v5-text-btn:focus-visible { outline: 2px solid var(--color-link); outline-offset: 1px; }

/* ---------- 文件类型图标(纯 CSS 小方块) ---------- */
.v5-fi {
  flex: none;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 30px;
  height: 30px;
  border-radius: 8px;
  color: var(--color-on-fill);
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 0.02em;
  user-select: none;
}
.v5-fi-html { background: var(--vivid-orange); }
.v5-fi-img { background: var(--azure-600); }
.v5-fi-code { background: var(--vivid-blue); }
.v5-fi-txt { background: var(--vivid-gray); }
.v5-fi-dir { background: var(--vivid-gold); }

/* ==========================================================================
   F2 建号向导(左轨分步;盲评①:首步收紧)
   ========================================================================== */
.v5-wizard {
  width: 680px;
  max-width: 94vw;
  height: 480px;
  max-height: 88vh;
  background: var(--color-pop-bg);
  border-radius: 18px;
  box-shadow: var(--shadow-2);
  display: flex;
  overflow: hidden;
}
/* 盲评①:首步(起名)内容少,高度自适应收紧,输入/提示/按钮聚拢;后续步骤自动撑满 */
.v5-wizard[data-current="name"] { height: auto; min-height: 0; }
.v5-wizard[data-current="name"] .v5-wiz-body { padding: 24px 32px 4px; }
.v5-wizard[data-current="name"] #v5-bot-name { max-width: 340px; }
.v5-wizard[data-current="name"] .v5-field .v5-tip { max-width: 340px; }

.v5-wiz-rail {
  width: 176px;
  flex: none;
  background: var(--color-bg-wiz-rail); /* 暖调浅灰轨(深浅两套) */
  border-right: 1px solid var(--color-border-overlay);
  padding: 24px 0;
  display: flex;
  flex-direction: column;
}
.v5-wiz-title { font-size: 15px; font-weight: 600; padding: 0 20px 18px; }
.v5-wiz-steps { list-style: none; }
.v5-wstep {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 9px 20px;
  font-size: 13px;
  color: var(--color-text-faint);
}
.v5-wdot {
  width: 22px;
  height: 22px;
  flex: none;
  border-radius: 50%;
  border: 1.5px solid var(--color-border-strong);
  background: var(--color-pop-bg);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 11px;
  transition: all 0.25s var(--ease-ui);
}
.v5-wstep.cur { color: var(--color-text-primary); font-weight: 600; }
.v5-wstep.cur .v5-wdot {
  border-color: var(--color-accent);
  background: var(--color-accent);
  color: var(--color-on-accent);
  box-shadow: 0 0 0 4px var(--color-accent-tint); /* 当前步琥珀光晕(方向稿签名) */
}
.v5-wstep.done { color: var(--color-text-secondary); }
.v5-wstep.done .v5-wdot { border-color: var(--color-accent); color: var(--color-accent); }

.v5-wiz-main { flex: 1; display: flex; flex-direction: column; min-width: 0; }
.v5-wiz-body { flex: 1; overflow-y: auto; padding: 28px 32px; }
.v5-wiz-body fieldset { border: none; }
.v5-wiz-foot {
  flex: none;
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 14px 32px;
  border-top: 1px solid var(--color-border-overlay);
}
.v5-stephint { font-size: 12px; color: var(--color-text-faint); }
.v5-wiz-actions { display: flex; gap: 10px; }
.v5-wiz-error { margin: 0 32px 10px; }

.v5-field { display: block; }
.v5-label { display: block; font-size: 13px; color: var(--color-text-secondary); margin-bottom: 8px; font-weight: 500; }
.v5-label-note { color: var(--color-text-faint); font-weight: 400; }
.v5-field input[type="text"],
.v5-field textarea {
  width: 100%;
  border: 1px solid var(--color-border-input);
  border-radius: 10px;
  padding: 11px 14px;
  font-size: 15px;
  font-family: inherit;
  outline: none;
  transition: border-color var(--dur-fast) var(--ease-ui);
  background: var(--color-bg-input);
  color: var(--color-text-primary);
}
.v5-field input:focus,
.v5-field textarea:focus { border-color: var(--color-accent); }
.v5-tip { display: block; font-size: 12px; color: var(--color-text-faint); margin-top: 8px; line-height: 1.6; }

/* 内核选择卡 */
.v5-engine-list { display: flex; flex-direction: column; gap: 12px; margin-top: 10px; }
.v5-engine-loading { font-size: 13px; color: var(--color-text-faint); padding: 12px 2px; }
.v5-engine-opt {
  display: block;
  width: 100%;
  text-align: left;
  border: 1.5px solid var(--color-border-input);
  border-radius: 14px;
  background: var(--color-pop-bg);
  padding: 14px 16px;
  transition: all 0.18s var(--ease-ui);
}
.v5-engine-opt:hover:not(:disabled) { border-color: var(--color-border-input-hover); }
.v5-engine-opt:focus-visible { outline: 2px solid var(--color-accent); outline-offset: 1px; }
.v5-engine-opt.sel {
  border-color: var(--color-accent);
  background: var(--color-accent-tint-weak);
  box-shadow: 0 0 0 3px var(--color-accent-tint);
}
.v5-engine-opt.off { opacity: 0.55; cursor: not-allowed; }
.v5-engine-name { display: flex; align-items: center; gap: 8px; font-size: 15px; font-weight: 600; }
.v5-engine-desc { display: block; font-size: 12px; color: var(--color-text-secondary); margin-top: 6px; line-height: 1.6; }
.v5-kstatus { font-size: 11px; border-radius: 99px; padding: 1px 8px; font-weight: 400; }
.v5-kstatus.ok { color: var(--color-accent-text); background: var(--color-accent-tint); }
.v5-kstatus.off { color: var(--color-text-faint); background: var(--color-bg-subtle); }

/* 工位选择行 */
.v5-ws-pick-row { display: flex; align-items: center; gap: 10px; margin-top: 10px; }
.v5-ws-current {
  flex: 1;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  border: 1px solid var(--color-border-overlay);
  border-radius: 10px;
  padding: 9px 12px;
  background: var(--color-bg-subtle);
}
.v5-ws-empty { color: var(--color-text-faint); font-family: var(--font-ui); }

/* 摘要 */
.v5-wiz-summary {
  background: var(--color-bg-subtle-solid);
  border-radius: 12px;
  padding: 14px 16px;
  font-size: 13px;
  display: grid;
  grid-template-columns: 56px 1fr;
  gap: 6px 12px;
  margin-top: 10px;
}
.v5-wiz-summary dt { color: var(--color-text-secondary); }
.v5-wiz-summary dd { overflow-wrap: anywhere; }

/* ==========================================================================
   F2 目录选择器
   ========================================================================== */
.v5-picker {
  width: 560px;
  max-width: 94vw;
  max-height: 86vh;
  background: var(--color-pop-bg);
  border-radius: 16px;
  box-shadow: var(--shadow-2);
  display: flex;
  flex-direction: column;
  padding: 16px 20px;
  gap: 10px;
}
.v5-picker-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.v5-picker-title { font-size: 15px; font-weight: 600; }
#v5-directory-roots {
  max-width: 240px;
  border: 1px solid var(--color-border-subtle);
  border-radius: 8px;
  padding: 5px 8px;
  font-size: 12px;
  font-family: inherit;
  background: var(--color-bg-input);
  color: var(--color-text-primary);
}
.v5-crumb { display: flex; flex-wrap: wrap; align-items: center; gap: 2px; font-size: 12px; }
.v5-crumb-btn {
  border: none;
  background: none;
  color: var(--color-link);
  font-size: 12px;
  padding: 2px 4px;
  border-radius: 4px;
}
.v5-crumb-btn:hover { background: var(--color-link-tint); }
.v5-crumb-sep { color: var(--color-text-faint); }
.v5-dir-list {
  list-style: none;
  border: 1px solid var(--color-border-overlay);
  border-radius: 10px;
  min-height: 180px;
  max-height: 300px;
  overflow-y: auto;
  background: var(--color-pop-bg);
}
.v5-dir-btn {
  display: flex;
  align-items: center;
  gap: 10px;
  width: 100%;
  border: none;
  background: none;
  text-align: left;
  padding: 9px 12px;
  font-size: 13px;
  color: var(--color-text-primary);
  transition: background 0.12s var(--ease-ui);
}
.v5-dir-btn:hover { background: var(--color-bg-hover-weak); }
.v5-dir-btn:focus-visible { outline: 2px solid var(--color-accent); outline-offset: -2px; }
.v5-dir-btn .v5-fi { width: 24px; height: 24px; font-size: 9px; border-radius: 6px; }
.v5-dir-name { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.v5-dir-go { color: var(--color-text-faint); }
.v5-dir-up .v5-dir-btn { color: var(--color-text-secondary); }
.v5-dir-empty { padding: 24px 12px; text-align: center; font-size: 12px; color: var(--color-text-faint); }
.v5-dir-more { padding: 8px 12px; text-align: center; } /* D2:目录分页尾行(加载更多/已全部加载) */
.v5-dir-more-btn { width: 100%; max-width: 220px; }
.v5-picker-newdir,
.v5-picker-manual { display: flex; gap: 8px; }
.v5-picker-newdir input,
.v5-picker-manual input {
  flex: 1;
  min-width: 0;
  border: 1px solid var(--color-border-input);
  border-radius: 8px;
  padding: 8px 12px;
  font-size: 13px;
  font-family: inherit;
  outline: none;
  transition: border-color var(--dur-fast) var(--ease-ui);
}
.v5-picker-manual input { font-family: var(--font-mono); font-size: 12px; }
.v5-picker-newdir input:focus,
.v5-picker-manual input:focus { border-color: var(--color-accent); }
.v5-picker-foot { display: flex; justify-content: flex-end; gap: 10px; }

/* ==========================================================================
   F3 右侧抽屉(磨砂亚克力;盲评②③落点)
   ========================================================================== */
.v5-drawer-mask {
  position: fixed;
  inset: 0;
  z-index: 40;
  background: var(--color-bg-mask-drawer); /* 暖调浅遮罩:抽屉层最浅,不压聊天区 */
  opacity: 0;
  transition: opacity 0.25s var(--ease-ui);
}
.v5-drawer-mask.show { opacity: 1; }

#v5-workspace-drawer {
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  z-index: 41;
  width: var(--drawer-w);
  max-width: 92vw;
  background: var(--color-bg-glass);
  backdrop-filter: blur(24px) saturate(1.5);
  -webkit-backdrop-filter: blur(24px) saturate(1.5);
  border-left: 1px solid var(--color-border-glass);
  box-shadow: var(--shadow-drawer);
  transform: translateX(100%);
  transition: transform 0.32s var(--ease-ui); /* 容器形变:抽屉滑入 */
  display: flex;
  flex-direction: column;
}
#v5-workspace-drawer.show { transform: translateX(0); }

.v5-drawer-head {
  flex: none;
  height: 60px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 0 20px;
  border-bottom: 1px solid var(--color-border-overlay);
}
#v5-drawer-title { font-size: 15px; font-weight: 600; }
#v5-drawer-close {
  width: 32px;
  height: 32px;
  border: none;
  border-radius: 8px;
  background: none;
  color: var(--color-text-secondary);
  font-size: 16px;
  transition: background var(--dur-fast) var(--ease-ui);
}
#v5-drawer-close:hover { background: var(--color-bg-hover-weak); }
#v5-drawer-close:focus-visible { outline: 2px solid var(--color-accent); }

.v5-drawer-body {
  flex: 1;
  overflow-y: auto;
  padding: 16px;
  display: flex;
  flex-direction: column;
  gap: 14px;
}

/* 分区卡片:半透暖白 + L1 双层柔影 */
.v5-dcard {
  background: var(--color-bg-card-overlay);
  border: 1px solid var(--color-border-overlay);
  border-radius: var(--drawer-card-radius);
  box-shadow: var(--shadow-1);
  padding: 16px;
}
/* 入场阶梯上浮(仅抽屉打开时播放一次;rooms 刷新不重播) */
.v5-drawer-body.animate-in .v5-dcard {
  opacity: 0;
  transform: translateY(14px);
  animation: v5-card-in 0.45s var(--ease-ui) forwards;
}
.v5-drawer-body.animate-in .v5-dcard:nth-child(1) { animation-delay: 0ms; }
.v5-drawer-body.animate-in .v5-dcard:nth-child(2) { animation-delay: 60ms; }
.v5-drawer-body.animate-in .v5-dcard:nth-child(3) { animation-delay: 120ms; }
.v5-drawer-body.animate-in .v5-dcard:nth-child(4) { animation-delay: 180ms; }
.v5-drawer-body.animate-in .v5-dcard:nth-child(5) { animation-delay: 240ms; }
.v5-drawer-body.animate-in .v5-dcard:nth-child(6) { animation-delay: 300ms; }
@keyframes v5-card-in {
  to { opacity: 1; transform: none; }
}

.v5-dcard-title {
  font-size: 12px;
  font-weight: 600;
  color: var(--color-text-secondary);
  letter-spacing: 0.06em;
  margin-bottom: 12px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
}
.v5-dcard-note { font-size: 11px; color: var(--color-text-faint); margin-top: 8px; line-height: 1.6; }
/* S2:keepOnStale 超时后的"等待核实"就地提示(暖琥珀;服务器裁决后随重渲染消失) */
.v5-stale-hint { font-size: 12px; color: var(--color-warn-strong); margin: 8px 2px 0; line-height: 1.6; }
.v5-stale-hint::before { content: '⏳ '; }

/* 盲评②:成员/设置卡压缩,文件卡增重 */
.v5-dcard-compact { padding: 12px 16px; }
.v5-dcard-compact .v5-dcard-title { margin-bottom: 8px; }
.v5-dcard-files {
  padding: 16px;                                 /* 与其余分区卡同一边距(盲评 P1-1:全抽屉统一) */
  border-color: var(--color-accent-border);       /* 主操作区:琥珀描边提权重 */
  box-shadow: var(--shadow-files);
}
.v5-dcard-files .v5-dcard-title { font-size: 13px; color: var(--color-text-primary); }
.v5-dcard-files .v5-dcard-body { min-height: 240px; display: flex; flex-direction: column; }

/* 文件管理卡折叠(2026-10 森哥验收:默认收起只露卡头,点卡头展开;箭头沿用改绑的旋转交互) */
.v5-dcard-files.collapsed .v5-dcard-title { margin-bottom: 0; }
.v5-dcard-files .v5-dcard-body[hidden] { display: none; } /* hidden 被 flex 覆盖的兜底 */
.v5-files-toggle {
  flex: 1;
  min-width: 0;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  margin: -4px -6px;
  padding: 4px 6px;
  border: none;
  background: none;
  border-radius: 8px;
  font: inherit;
  color: inherit;
  letter-spacing: inherit;
  text-align: left;
  cursor: pointer;
  transition: background var(--dur-fast) var(--ease-ui);
}
.v5-files-toggle:hover { background: var(--color-link-tint-weak); }
.v5-files-toggle:focus-visible { outline: 2px solid var(--color-link); outline-offset: -1px; }
.v5-files-toggle-side { display: inline-flex; align-items: center; gap: 8px; flex: none; }
.v5-files-badge {
  font-size: 10px;
  font-weight: 400;
  letter-spacing: 0;
  color: var(--color-text-faint);
  border: 1px solid var(--color-border-overlay);
  border-radius: 99px;
  padding: 1px 8px;
}
.v5-files-chev { font-size: 14px; color: var(--color-text-faint); transition: transform 0.2s var(--ease-ui); }
.v5-dcard-files:not(.collapsed) .v5-files-chev { transform: rotate(90deg); }

/* 成员网格(紧凑) */
.v5-member-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px 8px; }
.v5-member { display: flex; flex-direction: column; align-items: center; gap: 4px; min-width: 0; }
.v5-av44 { width: 44px; height: 44px; font-size: 15px; border-radius: 50%; }
.v5-av56 { width: 56px; height: 56px; font-size: 20px; border-radius: 50%; }
.v5-member-n {
  font-size: 12px;
  color: var(--color-text-primary);
  max-width: 72px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.v5-member-k { font-size: 10px; color: var(--color-text-faint); } /* 盲评③:内核身份小标记 */
.v5-member-add {
  width: 44px;
  height: 44px;
  border-radius: 50%;
  border: 1.5px dashed var(--color-border-strong);
  background: none;
  color: var(--color-text-faint);
  font-size: 22px;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: all 0.2s var(--ease-ui);
}
.v5-member-add:hover { border-color: var(--color-accent); color: var(--color-accent); transform: scale(1.08); }
.v5-member-add:focus-visible { outline: 2px solid var(--color-accent); }
.v5-member-add.pop { animation: v5-add-pop 0.4s var(--ease-ui); } /* 功能反馈:点击弹跳 */
@keyframes v5-add-pop { 40% { transform: scale(1.25); border-color: var(--color-accent); color: var(--color-accent); } }
.v5-member-add-label { color: var(--color-text-faint); }

/* 私聊工牌(资料卡) */
.v5-badge-card { display: flex; gap: 14px; align-items: center; }
.v5-badge-meta { min-width: 0; }
.v5-badge-name { font-size: 17px; font-weight: 600; overflow-wrap: anywhere; }
.v5-kernel-tag {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  margin-top: 5px;
  font-size: 11px;
  color: var(--color-link);
  background: var(--color-link-tint-weak);
  border-radius: 99px;
  padding: 2px 10px;
}
.v5-kernel-tag i { width: 6px; height: 6px; border-radius: 50%; background: var(--color-accent); }
.v5-kernel-tag i.off { background: var(--color-text-faint); }
.v5-kernel-off { color: var(--color-warn-text); }

/* 职责说明 */
.v5-act-btn {
  border: none;
  background: none;
  color: var(--color-link);
  font-size: 12px;
  font-weight: 400;
  letter-spacing: 0;
  padding: 2px 6px;
  border-radius: 6px;
}
.v5-act-btn:hover { background: var(--color-link-tint); }
.v5-duty { font-size: 13px; line-height: 1.7; background: var(--color-bg-subtle); border-radius: 10px; padding: 10px 12px; white-space: pre-wrap; overflow-wrap: anywhere; }
.v5-duty-empty { color: var(--color-text-faint); }
.v5-duty-edit {
  width: 100%;
  font-family: inherit;
  font-size: 13px;
  line-height: 1.7;
  border: 1px solid var(--color-accent);
  border-radius: 10px;
  padding: 10px 12px;
  resize: vertical;
  min-height: 64px;
  outline: none;
}
.v5-duty-actions { display: flex; justify-content: flex-end; gap: 8px; margin-top: 8px; }

/* 工位文件夹行 + 改绑(盲评②:箭头+整行可辨) */
.v5-folder-row { display: flex; align-items: center; gap: 10px; font-size: 13px; }
.v5-folder-row .v5-fi { width: 26px; height: 26px; border-radius: 6px; }
.v5-folder-path {
  flex: 1;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  color: var(--color-text-primary);
}
.v5-rebind-btn {
  width: 100%;
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-top: 10px;
  padding: 10px 4px 2px;
  border: none;
  border-top: 1px dashed var(--color-border-overlay);
  background: none;
  color: var(--color-link);
  font-size: 13px;
  border-radius: 0 0 8px 8px;
  transition: background var(--dur-fast) var(--ease-ui);
}
.v5-rebind-btn:hover { background: var(--color-link-tint-weak); }
.v5-rebind-btn:focus-visible { outline: 2px solid var(--color-link); outline-offset: -1px; }
.v5-rebind-chev { font-size: 14px; transition: transform 0.2s var(--ease-ui); }
.v5-rebind-btn.open .v5-rebind-chev { transform: rotate(90deg); }
.v5-rebind-panel { padding-top: 10px; }

/* 设置行 + 开关 */
.v5-set-row { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 6px 2px; font-size: 14px; }
.v5-switch {
  width: 40px;
  height: 22px;
  flex: none;
  border: none;
  border-radius: 99px;
  background: var(--color-bg-switch-off);
  position: relative;
  transition: background 0.2s var(--ease-ui);
}
.v5-switch::after {
  content: '';
  position: absolute;
  top: 2px;
  left: 2px;
  width: 18px;
  height: 18px;
  border-radius: 50%;
  background: var(--color-switch-knob);
  box-shadow: var(--shadow-knob);
  transition: transform 0.2s var(--ease-ui);
}
.v5-switch.on { background: var(--color-accent); }
.v5-switch.on::after { transform: translateX(18px); }
.v5-switch:disabled { opacity: 0.5; cursor: not-allowed; }
.v5-switch:focus-visible { outline: 2px solid var(--color-accent); outline-offset: 2px; }
.v5-set-danger {
  width: 100%;
  border: none;
  background: none;
  color: var(--color-danger);
  font-size: 13px;
  text-align: center;
  padding: 10px 0 2px;
  border-radius: 8px;
  transition: background var(--dur-fast) var(--ease-ui);
}
.v5-set-danger:hover { background: var(--color-err-bg); }
.v5-ops-row { display: flex; gap: 10px; }
.v5-ops-danger { width: auto; padding: 5px 14px; }
.v5-memory-row { display: flex; align-items: center; gap: 10px; font-size: 14px; color: var(--color-text-faint); }
.v5-soon { margin-left: auto; font-size: 11px; border: 1px solid var(--color-border-overlay); border-radius: 99px; padding: 2px 10px; }

/* ==========================================================================
   F3 文件管理面板(抽屉内,主操作区)
   ========================================================================== */
.v5-file-toolbar { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; }
.v5-tool-btn {
  flex: none;
  border: 1px solid var(--color-border-overlay);
  background: var(--color-pop-bg);
  border-radius: 8px;
  padding: 4px 10px;
  font-size: 12px;
  color: var(--color-text-primary);
  transition: background var(--dur-fast) var(--ease-ui);
}
.v5-tool-btn:hover:not(:disabled) { background: var(--color-bg-hover-weak); }
.v5-tool-btn:disabled { opacity: 0.45; cursor: not-allowed; }
.v5-file-crumb { flex: 1; min-width: 0; }
.v5-file-list {
  list-style: none;
  flex: 1;
  border: 1px solid var(--color-border-overlay);
  border-radius: 10px;
  background: var(--color-pop-bg);
  overflow-y: auto;
  min-height: 160px;
}
.v5-file-row {
  display: flex;
  align-items: center;
  gap: 4px;
  padding-right: 8px;
  border-bottom: 1px solid var(--color-border-faint);
}
.v5-file-row:last-child { border-bottom: none; }
.v5-file-main {
  flex: 1;
  min-width: 0;
  display: flex;
  align-items: center;
  gap: 10px;
  border: none;
  background: none;
  text-align: left;
  padding: 9px 10px;
  transition: background 0.12s var(--ease-ui);
}
.v5-file-main:hover { background: var(--color-bg-hover-weak); }
.v5-file-main:focus-visible { outline: 2px solid var(--color-accent); outline-offset: -2px; }
.v5-file-main .v5-fi { width: 26px; height: 26px; font-size: 9px; border-radius: 6px; }
.v5-file-namewrap { flex: 1; min-width: 0; }
.v5-file-name {
  display: block;
  font-size: 13px;
  color: var(--color-text-primary);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.v5-file-meta { display: block; font-size: 11px; color: var(--color-text-faint); margin-top: 1px; }
/* 盲评②:文件操作入口常显可辨(不靠 hover 才出现) */
.v5-file-dl {
  flex: none;
  border: 1px solid var(--color-link-border);
  background: var(--color-pop-bg);
  color: var(--color-link);
  border-radius: 8px;
  padding: 3px 10px;
  font-size: 11px;
  transition: all var(--dur-fast) var(--ease-ui);
}
.v5-file-dl:hover { background: var(--color-link-tint); }
.v5-file-dl:disabled { opacity: 0.5; cursor: not-allowed; }
.v5-file-more { align-self: center; margin-top: 8px; }
.v5-file-note { font-size: 12px; color: var(--color-text-faint); line-height: 1.7; }
.v5-bind-entry { margin-top: 10px; }
.v5-file-empty { padding: 28px 12px; text-align: center; font-size: 12px; color: var(--color-text-faint); }
.v5-file-error-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  padding: 12px;
}
.v5-file-error-text { font-size: 12px; color: var(--color-err-text); }

/* ==========================================================================
   F3 成员添加 / 通用确认
   ========================================================================== */
#v5-member-dialog,
#v5-confirm-dialog {
  width: 400px;
  max-width: 94vw;
  background: var(--color-pop-bg);
  border-radius: 16px;
  box-shadow: var(--shadow-2);
  padding: 18px 20px;
  display: flex;
  flex-direction: column;
  gap: 12px;
}
#v5-member-mask { z-index: 65; }   /* 压过抽屉(41) */
#v5-confirm-mask { z-index: 80; }  /* 最顶:删除/改绑确认可压预览窗 */
.v5-dialog-title { font-size: 15px; font-weight: 600; }
.v5-confirm-text { font-size: 13px; line-height: 1.7; color: var(--color-text-primary); overflow-wrap: anywhere; }
/* 删除员工/删群:同时清理工作区勾选行 + 将删路径明示(默认勾选;取消勾选时路径行收起) */
.v5-confirm-purge {
  border: 1px solid var(--color-border-subtle);
  border-radius: 10px;
  padding: 10px 12px;
  display: flex;
  flex-direction: column;
  gap: 6px;
  background: var(--color-bg-subtle-solid);
}
.v5-confirm-purge-row {
  display: flex;
  align-items: flex-start;
  gap: 8px;
  font-size: 13px;
  line-height: 1.6;
  color: var(--color-text-primary);
  cursor: pointer;
  user-select: none;
}
.v5-confirm-purge-row input[type="checkbox"] { margin-top: 3px; accent-color: var(--color-accent); flex: none; }
.v5-confirm-purge-path {
  font-size: 12px;
  line-height: 1.5;
  color: var(--color-text-secondary);
  overflow-wrap: anywhere;
  padding-left: 24px; /* 与勾选文字对齐 */
}
.v5-confirm-purge-path.mono {
  font-family: ui-monospace, SFMono-Regular, Consolas, monospace;
  color: var(--color-danger);
}
.v5-dialog-actions { display: flex; justify-content: flex-end; gap: 10px; }
.v5-member-list {
  list-style: none;
  max-height: 300px;
  overflow-y: auto;
  border: 1px solid var(--color-border-overlay);
  border-radius: 10px;
}
.v5-member-item {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 9px 12px;
  cursor: pointer;
  transition: background 0.12s var(--ease-ui);
}
.v5-member-item:hover { background: var(--color-bg-hover-weak); }
.v5-member-name { font-size: 13px; }
.v5-member-eng { margin-left: auto; font-size: 11px; color: var(--color-text-faint); }
.v5-member-empty { padding: 20px 12px; text-align: center; font-size: 12px; color: var(--color-text-faint); }

/* ==========================================================================
   F4 产物卡片(消息气泡内;盲评③:来源身份小标记)
   ========================================================================== */
.v5-artifact-list {
  display: flex;
  flex-direction: column;
  gap: 8px;
  margin-top: 8px;
  max-width: 340px;
}
.v5-artifact {
  display: flex;
  align-items: center;
  gap: 12px;
  width: 100%;
  text-align: left;
  background: var(--color-pop-bg);
  border: 1px solid var(--color-border-overlay);
  border-radius: 12px;
  padding: 10px 12px;
  box-shadow: var(--shadow-1);
  transition: transform var(--dur-fast) var(--ease-ui), box-shadow var(--dur-fast) var(--ease-ui);
}
.v5-artifact:hover:not(.off) { transform: translateY(-1px); box-shadow: var(--shadow-hover-raise); }
.v5-artifact:focus-visible { outline: 2px solid var(--color-accent); outline-offset: 1px; }
.v5-artifact.off { opacity: 0.55; cursor: not-allowed; }
.v5-artifact-mid { flex: 1; min-width: 0; }
.v5-artifact-name {
  display: block;
  font-size: 13px;
  font-weight: 500;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.v5-artifact-meta { display: flex; gap: 8px; margin-top: 2px; font-size: 11px; color: var(--color-text-faint); }
.v5-artifact-from { color: var(--color-link); }  /* 盲评③:产物来源员工标记 */
.v5-artifact-stale { color: var(--color-warn-text); }
.v5-artifact-open { flex: none; font-size: 12px; color: var(--color-link); }

/* ==========================================================================
   F4 产物预览窗(L3 最顶层)
   ========================================================================== */
#v5-preview-mask { z-index: 70; }
#v5-preview-dialog {
  width: 820px;
  max-width: 94vw;
  height: 560px;
  max-height: 88vh;
  background: var(--color-pop-bg);
  border-radius: 18px;
  box-shadow: var(--shadow-3);
  display: flex;
  flex-direction: column;
  overflow: hidden;
}
.v5-pv-head {
  flex: none;
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 14px 20px;
  border-bottom: 1px solid var(--color-border-overlay);
}
.v5-pv-head .v5-fi { width: 34px; height: 34px; font-size: 11px; border-radius: 10px; }
.v5-pv-titlewrap { flex: 1; min-width: 0; display: flex; flex-direction: column; }
#v5-pv-name { font-size: 15px; font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.v5-pv-status { font-size: 12px; color: var(--color-text-faint); }
#v5-pv-download { flex: none; padding: 6px 16px; font-size: 13px; }
#v5-pv-close {
  flex: none;
  width: 32px;
  height: 32px;
  border: none;
  border-radius: 8px;
  background: none;
  color: var(--color-text-secondary);
  font-size: 16px;
  transition: background var(--dur-fast) var(--ease-ui);
}
#v5-pv-close:hover { background: var(--color-bg-hover-weak); }
#v5-pv-close:focus-visible,
#v5-pv-download:focus-visible { outline: 2px solid var(--color-accent); }
.v5-pv-body {
  flex: 1;
  min-height: 0;
  background: var(--color-bg-subtle-solid);
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: auto;
}
#v5-preview-frame { width: 100%; height: 100%; border: none; background: var(--color-bg-panel); }
#v5-preview-image { max-width: 100%; max-height: 100%; object-fit: contain; }
#v5-preview-code {
  width: 100%;
  height: 100%;
  overflow: auto;
  padding: 20px 24px;
  font-family: var(--font-mono);
  font-size: 13px;
  line-height: 1.65;
  background: var(--color-bg-panel);
  color: var(--color-text-code);
}
.v5-pv-empty { font-size: 13px; color: var(--color-text-secondary); padding: 24px; text-align: center; line-height: 1.8; }
.v5-pv-foot { flex: none; padding: 12px 20px; border-top: 1px solid var(--color-border-overlay); }
.v5-pv-note { font-size: 12px; color: var(--color-text-faint); }

/* ---------- 轻提示 ---------- */
.v5-toast {
  position: fixed;
  top: 20px;
  left: 50%;
  transform: translateX(-50%) translateY(-8px);
  z-index: 99;
  background: var(--color-bg-toast);
  color: var(--color-text-toast);
  font-size: 13px;
  border-radius: 10px;
  padding: 9px 18px;
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.25s var(--ease-ui), transform 0.25s var(--ease-ui);
}
.v5-toast.show { opacity: 1; transform: translateX(-50%); }

/* ---------- V5 手机适配(390 档) ---------- */
@media (max-width: 767px) {
  .v5-mask { padding: 12px; }
  /* 向导改纵列:轨道横置为步骤条 */
  /* PLAN-V9 B3.1 落点4:92vh 改带回退的动态视口约束(--app-vh 由 visualViewport 同步,
     软键盘升起时跟着缩短;老浏览器回退 vh,见文件尾「V9 B3 动态视口」段) */
  .v5-wizard { width: 100%; max-width: 100%; height: auto; max-height: 92vh; max-height: min(92dvh, var(--app-vh, 100dvh)); flex-direction: column; }
  .v5-wiz-rail {
    width: 100%;
    flex: none;
    border-right: none;
    border-bottom: 1px solid var(--color-border-overlay);
    padding: 14px 16px 10px;
  }
  .v5-wiz-title { padding: 0 0 8px; }
  .v5-wiz-steps { display: flex; gap: 4px; overflow-x: auto; }
  .v5-wstep { padding: 4px 6px; font-size: 11px; gap: 6px; white-space: nowrap; }
  .v5-wiz-body { padding: 18px 16px; }
  .v5-wiz-foot { padding: 12px 16px; }
  .v5-wiz-error { margin: 0 16px 8px; }
  .v5-btn { min-height: var(--touch-min); }

  .v5-picker { width: 100%; max-width: 100%; max-height: 92vh; max-height: min(92dvh, var(--app-vh, 100dvh)); }
  .v5-dir-list { max-height: 40vh; }

  #v5-workspace-drawer { width: 100%; max-width: 100%; border-left: none; }
  .v5-member-grid { grid-template-columns: repeat(4, 1fr); }
  .v5-file-dl { min-height: 32px; }

  #v5-member-dialog, #v5-confirm-dialog { width: 100%; max-width: 100%; }

  #v5-preview-dialog { width: 100%; max-width: 100%; height: 92vh; height: min(92dvh, var(--app-vh, 100dvh)); }
  .v5-artifact-list { max-width: 100%; }
}

/* V5 动效全局收口:无 JS 过渡偏好时全部瞬时(与底部既有 reduce 块叠加生效) */
@media (prefers-reduced-motion: reduce) {
  #v5-workspace-drawer { transition: none; }
  .v5-drawer-body.animate-in .v5-dcard { animation: none; opacity: 1; transform: none; }
  .v5-member-add.pop { animation: none; }
}

/* ==========================================================================
   V6 F2 显式协作入口 / 协作输入模式 / 定时任务面板 / 定时失败提示条
   (沿用既有 token,不发明新视觉风格;PLAN-V6 5.3/5.4/5.5)
   ========================================================================== */

/* 发起协作入口(工具行,与 @ 按钮同区同款) */
#collab-start-btn {
  height: 30px;
  padding: 0 12px;
  border: 1px solid var(--color-border-subtle);
  border-radius: 4px;
  background: var(--color-pop-bg);
  color: var(--color-text-secondary);
  font-size: 13px;
  transition: background var(--dur-fast) var(--ease-ui);
}
#collab-start-btn:hover:not(:disabled) { background: var(--color-bg-panel); color: var(--color-text-primary); }
#collab-start-btn:disabled { opacity: 0.5; cursor: not-allowed; }
#collab-start-btn:focus-visible { outline: 2px solid var(--color-accent); outline-offset: 1px; }

/* 发起协作轻浮层:固定输入区上方(与 @ 浮层同位,互斥不互抢) */
.collab-start-menu {
  position: absolute;
  left: 16px;
  bottom: calc(100% + 4px);
  width: 264px;
  max-width: calc(100% - 32px);
  background: var(--color-pop-bg);
  border: 1px solid var(--color-border-subtle);
  border-radius: 8px;
  box-shadow: var(--shadow-pop);
  padding: 10px 12px;
  z-index: 20;
}
.collab-start-title { font-size: 13px; font-weight: 600; color: var(--color-text-primary); margin-bottom: 8px; }
#collab-lead-select {
  width: 100%;
  height: 32px;
  border: 1px solid var(--color-border-subtle);
  border-radius: 4px;
  font-size: 14px;
  color: var(--color-text-primary);
  background: var(--color-bg-input);
  padding: 0 8px;
}
.collab-start-error { font-size: 12px; color: var(--color-err-text); margin-top: 6px; }
.collab-start-actions { display: flex; justify-content: flex-end; margin-top: 10px; }
.collab-start-actions .btn-primary { height: 30px; min-width: 0; padding: 0 14px; font-size: 13px; }

/* 协作输入模式条(textarea 上方):"由 X 牵头" + 取消 */
.collab-compose-mode {
  align-self: flex-start;
  display: flex;
  align-items: center;
  gap: 8px;
  max-width: 100%;
  font-size: 12px;
  color: var(--color-accent-text);
  background: var(--color-bg-subtle);
  border-radius: 4px;
  padding: 2px 4px 2px 8px;
}
#collab-compose-text { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
#collab-compose-cancel {
  flex: none;
  border: none;
  background: transparent;
  color: var(--color-text-secondary);
  font-size: 12px;
  padding: 2px 8px;
  border-radius: 3px;
  min-height: 24px;
}
#collab-compose-cancel:hover { background: var(--color-bg-panel); color: var(--color-text-primary); }
#collab-compose-cancel:focus-visible { outline: 2px solid var(--color-accent); outline-offset: 1px; }

/* system 定时触发消息:居中标签 + 原指令卡(不伪装 bot 气泡,无头像) */
.msg-system { text-align: center; margin: 10px 0; }
.msg-system-label {
  display: inline-block;
  max-width: 86%;
  font-size: 12px;
  color: var(--color-text-faint);
  background: var(--color-bg-subtle);
  border-radius: 4px;
  padding: 2px 10px;
  overflow-wrap: anywhere;
}
.msg-system-text {
  margin: 6px auto 0;
  max-width: var(--bubble-max);
  text-align: left;
  font-size: var(--fs-msg);
  line-height: var(--lh-body);
  color: var(--color-text-primary);
  background: var(--color-pop-bg);
  border: 1px dashed var(--color-border-subtle);
  border-radius: 4px;
  padding: 8px 12px;
  white-space: pre-wrap;
  overflow-wrap: anywhere;
}

/* 定时任务失败提示条:与协作状态条同款警示底,"知道了"按钮复用 .collab-ack-btn */
.schedule-attention-bar {
  flex: none;
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 6px 16px;
  font-size: 12px;
  color: var(--color-warn-text);
  background: var(--color-warn-bg);
  border-bottom: 1px solid var(--color-border-subtle);
}
#schedule-attention-text { flex: 1; min-width: 0; overflow-wrap: anywhere; }

/* 定时任务管理面板:从抽屉(41)唤起,须压过抽屉、低于通用确认框(80) */
#schedule-panel { z-index: 65; }
.schedule-card { width: 520px; }
.schedule-panel-status { font-size: 12px; color: var(--color-warn-text); }
#schedule-list { list-style: none; display: flex; flex-direction: column; gap: 10px; }
.schedule-empty { font-size: 13px; color: var(--color-text-faint); text-align: center; padding: 24px 0; }
.schedule-row {
  border: 1px solid var(--color-border-subtle);
  border-radius: 8px;
  padding: 10px 12px;
  display: flex;
  flex-direction: column;
  gap: 4px;
}
.schedule-row-head { display: flex; align-items: center; gap: 8px; }
.schedule-name {
  flex: 1;
  min-width: 0;
  font-size: 14px;
  font-weight: 600;
  color: var(--color-text-primary);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.schedule-pill {
  flex: none;
  font-size: 11px;
  color: var(--color-accent-text);
  border: 1px solid var(--color-accent-border);
  border-radius: 99px;
  padding: 1px 8px;
}
.schedule-pill.off { color: var(--color-text-faint); border-color: var(--color-border-subtle); }
.schedule-meta { font-size: 12px; color: var(--color-text-secondary); line-height: 1.6; overflow-wrap: anywhere; }
.schedule-result { color: var(--color-text-faint); }
.schedule-running { color: var(--color-warn-text); }
.schedule-ops { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 4px; }
.v5-mini-btn.danger { color: var(--color-danger); border-color: var(--color-danger); }
.v5-mini-btn.danger:hover { background: var(--color-err-bg); }

/* 定时表单:单列;周期五态切换行(每天/每周/每月/每隔/仅一次) */
#schedule-form { display: flex; flex-direction: column; gap: 12px; }
#schedule-form[hidden] { display: none; }
.schedule-form-note { font-size: 12px; color: var(--color-warn-text); margin-top: -6px; }
.schedule-interval-wrap { display: flex; gap: 8px; align-items: center; }
#schedule-interval, #schedule-monthday { width: 96px; }
.schedule-mode-check { display: flex; align-items: center; gap: 8px; font-size: 14px; color: var(--color-text-primary); }
#schedule-form select,
#schedule-form input[type="time"],
#schedule-form input[type="number"],
#schedule-form input[type="datetime-local"] {
  height: 40px;
  border: 1px solid var(--color-border-subtle);
  border-radius: 4px;
  padding: 0 12px;
  font-size: 15px;
  font-family: inherit;
  background: var(--color-bg-input);
  color: var(--color-text-primary);
}
#schedule-form select:focus,
#schedule-form input[type="time"]:focus,
#schedule-form input[type="number"]:focus { outline: none; border-color: var(--color-accent); }

@media (max-width: 767px) {
  #collab-start-btn { min-height: var(--touch-min); }
  .collab-start-menu { left: 8px; right: 8px; width: auto; max-width: none; }
  .schedule-attention-bar { padding: 6px 12px; }
  #schedule-ack-btn { min-height: var(--touch-min); padding: 4px 14px; }
  .schedule-ops .v5-mini-btn { min-height: var(--touch-min); }
  .schedule-card { width: 100%; }
  #schedule-form .btn-primary, #schedule-form .btn-plain { min-height: var(--touch-min); }
}

/* ==========================================================================
   V7 F1:顶部会话条 + 抽屉会话卡(PLAN-V7 11.2/11.3)
   视觉沿用现有 token 与 V5 抽屉卡片基调(方向稿 v1「抽屉卡匣」结构与行为);
   工具型动效:只做功能反馈(hover/旋转/淡入),不做叙事动效
   ========================================================================== */

/* ---- 顶部会话条(挂在 #chat-header 后;群聊整条 hidden 不留白) ---- */
.v7-session-bar {
  position: relative;
  flex: none;
  height: 36px;
  background: var(--color-bg-panel-head);
  border-bottom: 1px solid var(--color-border-subtle);
  display: flex;
  align-items: center;
  padding: 0 16px;
  gap: 8px;
}
#v7-session-toggle {
  display: flex;
  align-items: center;
  gap: 6px;
  min-width: 0;
  border: none;
  background: none;
  padding: 3px 8px;
  margin-left: -8px;
  border-radius: 6px;
  font-size: 13px;
  color: var(--color-text-primary);
  cursor: pointer;
  transition: background var(--dur-fast) var(--ease-ui);
}
#v7-session-toggle:hover { background: var(--color-bg-hover); }
#v7-session-toggle:focus-visible { outline: 2px solid var(--color-accent); outline-offset: -1px; }
#v7-session-toggle .v7-sb-chev { color: var(--color-text-secondary); flex: none; transition: transform var(--dur-fast) var(--ease-ui); }
#v7-session-toggle[aria-expanded="true"] .v7-sb-chev { transform: rotate(180deg); }
#v7-session-title {
  font-weight: 500;
  max-width: 280px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
#v7-session-toggle .v7-sb-state {
  flex: none;
  font-size: 11px;
  font-weight: 400;
  color: var(--color-text-faint);
  border: 1px solid var(--color-border-subtle);
  border-radius: 99px;
  padding: 0 7px;
  line-height: 16px;
}
#v7-session-toggle .v7-sb-state.archived { color: var(--color-warn-text); border-color: var(--color-warn-text); }
.v7-sb-spacer { flex: 1; }
#v7-task-complete {
  flex: none;
  border: 1px solid var(--color-border-subtle);
  border-radius: 6px;
  background: var(--color-pop-bg);
  color: var(--color-text-secondary);
  font-size: 12px;
  padding: 3px 10px;
  cursor: pointer;
  transition: background var(--dur-fast) var(--ease-ui), color var(--dur-fast) var(--ease-ui);
}
#v7-task-complete:hover:not(:disabled) { background: var(--color-accent-tint-weak); color: var(--color-accent-text); border-color: var(--color-accent-border); }
#v7-task-complete:disabled { cursor: not-allowed; opacity: 0.5; }
#v7-task-complete:focus-visible { outline: 2px solid var(--color-accent); outline-offset: 1px; }

/* 会话条下拉(quick-list 只显 active;当前项 aria-current) */
.v7-session-menu {
  position: absolute;
  top: calc(100% + 4px);
  left: 12px;
  z-index: 30;
  width: 260px;
  max-width: calc(100vw - 24px);
  background: var(--color-pop-bg);
  border: 1px solid var(--color-border-subtle);
  border-radius: 10px;
  box-shadow: var(--shadow-menu); /* 与 v5-create-menu 同一浮层影 */
  padding: 4px;
  animation: v7-dd-in var(--dur-fast) var(--ease-ui);
}
@keyframes v7-dd-in { from { opacity: 0; transform: translateY(-4px); } }
.v7-session-quick-list { max-height: 264px; overflow-y: auto; }
.v7-quick-row {
  display: flex;
  align-items: center;
  gap: 8px;
  width: 100%;
  border: none;
  background: none;
  border-radius: 8px;                             /* 便签级圆角(与抽屉会话行/便签统一) */
  padding: 8px 10px;
  font-size: 13px;
  color: var(--color-text-primary);
  text-align: left;
  cursor: pointer;
  transition: background var(--dur-fast) var(--ease-ui);
}
.v7-quick-row:hover { background: var(--color-bg-active); }
.v7-quick-row:focus-visible { outline: 2px solid var(--color-accent); outline-offset: -1px; }
.v7-quick-dot { width: 6px; height: 6px; border-radius: 50%; flex: none; background: transparent; }
/* 当前会话:与抽屉会话行同一浅绿高亮语言(会话条↔抽屉呼应) */
.v7-quick-row[aria-current="true"] { background: var(--color-accent-tint-weak); }
.v7-quick-row[aria-current="true"]:hover { background: var(--color-accent-tint); }
.v7-quick-row[aria-current="true"] .v7-quick-dot { background: var(--color-accent); }
.v7-quick-row[aria-current="true"] .v7-quick-name { font-weight: 600; }
.v7-quick-name { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.v7-quick-time { flex: none; font-size: 12px; color: var(--color-text-faint); }
.v7-quick-empty { padding: 10px 12px; font-size: 12px; color: var(--color-text-faint); }
#v7-session-new {
  display: flex;
  align-items: center;
  gap: 6px;
  width: 100%;
  border: none;
  border-top: 1px solid var(--color-border-subtle);
  background: none;
  border-radius: 0 0 8px 8px;
  padding: 9px 10px;
  margin-top: 4px;
  font-size: 13px;
  color: var(--color-accent-text);
  text-align: left;
  cursor: pointer;
  transition: background var(--dur-fast) var(--ease-ui);
}
#v7-session-new:hover { background: var(--color-bg-active); }
#v7-session-new:disabled { color: var(--color-text-faint); cursor: not-allowed; }
#v7-session-new:focus-visible { outline: 2px solid var(--color-accent); outline-offset: -1px; }
.v7-session-readonly {
  display: flex;
  align-items: center;
  gap: 8px;
  border-top: 1px dashed var(--color-border-subtle);
  margin-top: 4px;
  padding: 8px 10px 6px;
  font-size: 12px;
  color: var(--color-warn-text);
}
.v7-session-readonly-text { flex: 1; min-width: 0; }
.v7-session-readonly button {
  flex: none;
  border: 1px solid var(--color-border-subtle);
  border-radius: 6px;
  background: var(--color-pop-bg);
  color: var(--color-link);
  font-size: 12px;
  padding: 2px 10px;
  cursor: pointer;
}
.v7-session-readonly button:hover { background: var(--color-link-tint-weak); }

/* ---- 抽屉会话卡(与文件卡同构:卡头 toggle + 默认收起) ---- */
#v7-sessions-card .v5-dcard-body { min-height: 0; padding-top: 4px; }
.v7-sess-state { font-size: 12px; color: var(--color-text-faint); padding: 8px 2px; line-height: 1.6; }
.v7-sess-state.error { color: var(--color-err-text); }
.v7-sess-retry { border: none; background: none; color: var(--color-link); font-size: 12px; padding: 2px 6px; border-radius: 4px; cursor: pointer; }
.v7-sess-retry:hover { background: var(--color-link-tint-weak); }
#v7-sessions-list, #v7-sessions-archived-list { display: flex; flex-direction: column; gap: 6px; } /* 与便签 6px 间距统一 */
.v7-sess-row {
  position: relative;
  display: flex;
  flex-wrap: wrap; /* 删除二次确认条占满整行(basis 100%) */
  align-items: center;
  gap: 6px;
  min-height: 42px;
  padding: 3px 6px 3px 10px;
  border-radius: 8px;
  transition: background var(--dur-fast) var(--ease-ui), opacity 0.25s var(--ease-ui);
}
.v7-sess-row:hover { background: var(--color-bg-hover-weak); }
/* 当前会话:绿色内描条 + 浅绿底(与会话条 quick-row 当前项同一高亮语言) */
.v7-sess-row.current { background: var(--color-accent-tint-weak); box-shadow: inset 3px 0 0 var(--color-accent); }
.v7-sess-row.current:hover { background: var(--color-accent-tint); }
.v7-sess-row.leaving { opacity: 0; }
.v7-sess-open {
  flex: 1;
  min-width: 0;
  display: flex;
  align-items: baseline;
  gap: 8px;
  border: none;
  background: none;
  padding: 4px 0;
  font-size: 13px;
  color: var(--color-text-primary);
  text-align: left;
  cursor: pointer;
}
.v7-sess-open:focus-visible { outline: 2px solid var(--color-accent); outline-offset: 1px; }
.v7-sess-row.current [data-field="session-title"] { font-weight: 600; }
.v7-sess-open [data-field="session-title"] {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.v7-sess-time { margin-left: auto; flex: none; font-size: 11px; color: var(--color-text-faint); }
.v7-sess-busy { flex: none; font-size: 11px; color: var(--color-warn-text); }
/* V9 B3 落点7:飞书绑定会话标记(行内小徽标;与协作/冻结标识同族,行 flex-wrap 不挤破) */
.v7-sess-feishu {
  flex: none;
  font-size: 11px;
  line-height: 1;
  padding: 3px 8px;
  border-radius: 999px;
  border: 1px solid var(--color-accent-border);
  background: var(--color-accent-tint-weak);
  color: var(--color-accent-text);
}
.v7-sess-ops { display: none; align-items: center; gap: 2px; flex: none; }
.v7-sess-row:hover .v7-sess-ops, .v7-sess-row:focus-within .v7-sess-ops { display: flex; }
.v7-sess-row:hover .v7-sess-time, .v7-sess-row:focus-within .v7-sess-time { display: none; }
.v7-sess-op {
  width: 26px;
  height: 26px;
  border: none;
  border-radius: 6px;
  background: none;
  color: var(--color-text-secondary);
  font-size: 12px;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  transition: background var(--dur-fast) var(--ease-ui);
}
.v7-sess-op:hover:not(:disabled) { background: var(--color-bg-hover-weak); color: var(--color-text-primary); }
.v7-sess-op.danger:hover:not(:disabled) { background: var(--color-err-bg); color: var(--color-danger); }
.v7-sess-op:disabled { cursor: not-allowed; opacity: 0.45; }
.v7-sess-op svg { display: block; }
.v7-sess-rename {
  flex: 1;
  min-width: 0;
  border: 1px solid var(--color-accent);
  border-radius: 6px;
  padding: 4px 8px;
  font-size: 13px;
  font-family: inherit;
  outline: none;
  background: var(--color-bg-input);
  color: var(--color-text-primary);
}
/* 删除就地二次确认条(方向稿共同约定) */
.v7-sess-confirm {
  display: flex;
  flex-basis: 100%;
  align-items: center;
  gap: 8px;
  margin: 2px 0 4px;
  padding: 7px 10px;
  background: var(--color-err-bg);
  border-radius: 8px;
  font-size: 12px;
  color: var(--color-err-text);
}
.v7-sess-confirm-text { flex: 1; min-width: 0; line-height: 1.5; }
.v7-sess-confirm-btns { margin-left: auto; display: flex; gap: 6px; flex: none; }
.v7-sess-confirm-btns button {
  border: 1px solid var(--color-border-overlay);
  border-radius: 6px;
  background: var(--color-pop-bg);
  font-size: 12px;
  padding: 2px 10px;
  color: var(--color-text-primary);
  cursor: pointer;
}
.v7-sess-confirm-btns button[data-action="session-delete-confirm"] { background: var(--color-danger); border-color: var(--color-danger); color: var(--color-on-danger); }
.v7-sess-confirm-btns button:disabled { opacity: 0.6; cursor: not-allowed; }
/* 分页"更多" */
#v7-sessions-more {
  width: 100%;
  border: none;
  background: none;
  color: var(--color-link);
  font-size: 12px;
  padding: 7px 0 5px;
  border-radius: 6px;
  cursor: pointer;
}
#v7-sessions-more:hover { background: var(--color-link-tint-weak); }
#v7-sessions-more:disabled { color: var(--color-text-faint); cursor: default; }
/* 已归档折叠区(默认收起) */
#v7-sessions-archived-toggle {
  display: flex;
  align-items: center;
  gap: 5px;
  width: 100%;
  border: none;
  border-top: 1px dashed var(--color-border-overlay);
  background: none;
  margin-top: 6px;
  padding: 9px 4px 3px;
  font-size: 12px;
  color: var(--color-text-faint);
  cursor: pointer;
  transition: color var(--dur-fast) var(--ease-ui);
}
#v7-sessions-archived-toggle:hover { color: var(--color-text-secondary); }
#v7-sessions-archived-toggle .v7-arch-chev { transition: transform 0.2s var(--ease-ui); }
#v7-sessions-archived-toggle[aria-expanded="true"] .v7-arch-chev { transform: rotate(90deg); }
#v7-sessions-archived-list { margin-top: 2px; }
#v7-sessions-archived-list .v7-sess-row { min-height: 36px; }
#v7-sessions-archived-list .v7-sess-open { color: var(--color-text-secondary); font-size: 12px; }
#v7-sessions-error { font-size: 12px; color: var(--color-err-text); margin: 8px 2px 0; line-height: 1.6; }
/* 聊天区"查看更早消息"(session_history 从尾向前分页) */
.v7-older-row { display: flex; justify-content: center; margin-bottom: 16px; }
.v7-older-row button {
  border: 1px solid var(--color-border-subtle);
  border-radius: 99px;
  background: var(--color-pop-bg);
  color: var(--color-link);
  font-size: 12px;
  padding: 4px 14px;
  cursor: pointer;
  transition: background var(--dur-fast) var(--ease-ui);
}
.v7-older-row button:hover:not(:disabled) { background: var(--color-link-tint-weak); }
.v7-older-row button:disabled { color: var(--color-text-faint); cursor: default; }
/* V7 空态(无会话时的聊天区提示) */
.v7-empty-state { display: flex; flex-direction: column; align-items: center; gap: 8px; padding: 64px 24px; color: var(--color-text-faint); font-size: 13px; text-align: center; }

@media (max-width: 767px) {
  #v7-session-title { max-width: 38vw; }
  #v7-task-complete { min-height: 32px; }
  .v7-sess-op { width: 32px; height: 32px; }
  .v7-sess-ops { display: flex; } /* 触屏无 hover:操作常驻 */
  .v7-sess-row .v7-sess-time { display: none; }
}

/* ================= V7 F2:记忆卡/手册卡/全卡默认收起(盲评三意见落地) ================= */

/* --- 盲评 P1-2:展开卡随内容长高,抽屉统一滚动,卡内不出现半截滚动区 --- */
#v7-memory-card .v5-dcard-body,
#v7-handbook-card .v5-dcard-body { min-height: 0; max-height: none; overflow: visible; }

/* 通用可收起大卡(成员/定时任务,11.6):收起时卡头贴边,箭头旋转沿用文件卡交互 */
.v5-dcard-collapsible.collapsed .v5-dcard-title { margin-bottom: 0; }
.v5-dcard-collapsible:not(.collapsed) .v5-files-chev { transform: rotate(90deg); }
.v5-dcard-collapsible .v5-dcard-body[hidden] { display: none; }

/* 小型按钮(记忆表单/手册编辑面用,与 v5-mini-btn 同族更薄一号) */
.v7-mini-btn2 {
  border: 1px solid var(--color-border-overlay);
  border-radius: 6px;
  background: var(--color-pop-bg);
  color: var(--color-text-primary);
  font-size: 12px;
  padding: 4px 12px;
  cursor: pointer;
  transition: background var(--dur-fast) var(--ease-ui);
}
.v7-mini-btn2:hover:not(:disabled) { background: var(--color-bg-hover-weak); }
.v7-mini-btn2.primary { background: var(--color-accent-strong); border-color: var(--color-accent-strong); color: var(--color-on-accent); }
:root[data-theme="dark"] .v7-mini-btn2.primary { background: var(--color-accent); border-color: var(--color-accent); }
.v7-mini-btn2.primary:hover:not(:disabled) { filter: brightness(1.07); }
.v7-mini-btn2.danger { color: var(--color-danger); border-color: var(--color-danger); }
.v7-mini-btn2.danger:hover:not(:disabled) { background: var(--color-err-bg); }
.v7-mini-btn2:disabled { cursor: not-allowed; opacity: 0.6; }

/* --- 会话卡「+ 开新会话」(11.3,方向稿 v1 同款卡内入口) --- */
.v7-sessions-new-btn {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  width: 100%;
  border: 1px dashed var(--color-accent-border-strong);
  border-radius: 8px;
  background: var(--color-accent-tint-weak);
  color: var(--color-accent-text);
  font-size: 13px;
  padding: 8px 0;
  margin-bottom: 8px;
  cursor: pointer;
  transition: background var(--dur-fast) var(--ease-ui);
}
.v7-sessions-new-btn:hover:not(:disabled) { background: var(--color-accent-tint); }
.v7-sessions-new-btn:disabled { color: var(--color-text-faint); border-color: var(--color-border-overlay); background: none; cursor: not-allowed; }
.v7-sessions-new-plus { font-size: 14px; line-height: 1; }

/* --- 记忆卡:工具行 --- */
.v7-mem-toolbar {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-bottom: 4px;
}
.v7-mem-scope, .v7-mem-type {
  border: 1px solid var(--color-border-overlay);
  border-radius: 8px;
  background: var(--color-pop-bg);
  color: var(--color-text-primary);
  font-size: 12px;
  padding: 5px 8px;
  max-width: 46%;
  font-family: inherit;
}
.v7-mem-scope:focus-visible, .v7-mem-type:focus-visible, .v7-mem-search:focus-visible {
  outline: 2px solid var(--color-accent);
  outline-offset: -1px;
}
.v7-mem-scope:disabled { color: var(--color-text-secondary); background: var(--color-bg-subtle); }
.v7-mem-search {
  flex: 1;
  min-width: 110px;
  border: 1px solid var(--color-border-overlay);
  border-radius: 8px;
  background: var(--color-pop-bg);
  color: var(--color-text-primary);
  font-size: 12px;
  padding: 5px 10px;
  font-family: inherit;
}

/* 沉淀作业态(queued/running 才显示) */
.v7-mem-job {
  font-size: 12px;
  color: var(--color-warn-strong);
  margin: 6px 2px 2px;
  line-height: 1.6;
}
.v7-mem-job::before { content: '⏳ '; }

/* 两模块:标题 + 第二模块分隔线 */
.v7-mem-module { padding-bottom: 4px; }
.v7-mem-module + .v7-mem-module { border-top: 1px dashed var(--color-border-overlay); margin-top: 10px; padding-top: 2px; }
.v7-mem-scope-title {
  font-size: 12px;
  font-weight: 600;
  color: var(--color-text-secondary);
  letter-spacing: 0.04em;
  margin: 8px 2px 4px;
}

/* 五态行 */
.v7-mem-state { font-size: 12px; color: var(--color-text-faint); padding: 6px 2px; line-height: 1.6; }
.v7-mem-state.error { color: var(--color-err-text); }
.v7-mem-state.small { font-size: 11px; padding: 2px 2px 6px; }

/* 类别行(可收起,计数徽标=服务端绝对计数) */
.v7-mem-cat { margin: 2px 0; }
.v7-mem-cat-head {
  display: flex;
  align-items: center;
  gap: 8px;
  width: 100%;
  border: none;
  background: none;
  border-radius: 8px;
  padding: 5px 4px;
  font: inherit;
  text-align: left;
  cursor: pointer;
  transition: background var(--dur-fast) var(--ease-ui);
}
.v7-mem-cat-head:hover { background: var(--color-link-tint-weak); }
.v7-mem-cat-head:focus-visible { outline: 2px solid var(--color-link); outline-offset: -1px; }
.v7-mem-cat-name { font-size: 12px; font-weight: 600; color: var(--color-text-primary); }
.v7-mem-cat-badge {
  font-size: 10px;
  color: var(--color-text-faint);
  border: 1px solid var(--color-border-overlay);
  border-radius: 99px;
  padding: 0 7px;
  line-height: 16px;
}
.v7-mem-cat-chev { margin-left: auto; font-size: 14px; color: var(--color-text-faint); transition: transform 0.2s var(--ease-ui); }
.v7-mem-cat:not(.closed) > .v7-mem-cat-head .v7-mem-cat-chev { transform: rotate(90deg); }
.v7-mem-cat-body { padding: 2px 0 4px; }

/* --- 盲评 P1-1:便签=细边框 + 极浅底,无重阴影;两级圆角(卡 14px/便签 8px) --- */
.v7-mem-note {
  position: relative;
  border: 1px solid var(--color-border-overlay);
  border-radius: 8px;
  background: var(--color-bg-note);
  box-shadow: none;
  padding: 9px 10px;
  margin: 6px 0;
}
.v7-mem-note.editing { background: var(--color-bg-input); border-color: var(--color-accent-border); }
/* 类别胶囊:用户域沿用抽屉绿;智能体域仅标签用暖橙(盲评许可的唯一橙) */
.v7-mem-pill {
  display: inline-block;
  font-size: 10px;
  line-height: 16px;
  padding: 0 8px;
  border-radius: 99px;
  color: var(--color-accent-text);
  background: var(--color-accent-tint);
}
.v7-mem-note.agent .v7-mem-pill { color: var(--color-warn-agent); background: var(--color-agent-tint); }
.v7-mem-text {
  font-size: 13px;
  line-height: 1.6;
  color: var(--color-text-primary);
  margin: 5px 0 3px;
  word-break: break-word;
}
/* 盲评 P2:脚注统一「MM-DD · 触发事件」灰字 */
.v7-mem-foot { font-size: 11px; color: var(--color-text-faint); margin: 0; line-height: 1.5; }
/* hover 操作(编辑/删除),触屏常驻 */
.v7-mem-ops { position: absolute; top: 6px; right: 6px; display: none; align-items: center; gap: 2px; }
.v7-mem-note:hover .v7-mem-ops, .v7-mem-note:focus-within .v7-mem-ops { display: inline-flex; }
.v7-mem-confirm { margin-top: 6px; }

/* 记一条(虚线入口,两域各一;id 契约挂在用户域那颗上) */
.v7-mem-add {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  width: 100%;
  border: 1px dashed var(--color-border-overlay);
  border-radius: 8px;
  background: none;
  color: var(--color-text-secondary);
  font-size: 12px;
  padding: 7px 0;
  margin: 6px 0 2px;
  cursor: pointer;
  transition: border-color var(--dur-fast) var(--ease-ui), color var(--dur-fast) var(--ease-ui);
}
.v7-mem-add:hover:not(:disabled) { border-color: var(--color-accent-border-strong); color: var(--color-accent-text); }
.v7-mem-add:disabled { cursor: not-allowed; opacity: 0.55; }
.v7-mem-add-plus { color: var(--color-accent-text); font-size: 14px; line-height: 1; }

/* 编辑/新增表单(挂在便签壳里) */
.v7-mem-field { display: flex; flex-direction: column; gap: 3px; margin: 7px 0 0; }
.v7-mem-label { font-size: 11px; color: var(--color-text-secondary); }
.v7-mem-input {
  width: 100%;
  border: 1px solid var(--color-border-overlay);
  border-radius: 6px;
  background: var(--color-pop-bg);
  color: var(--color-text-primary);
  font-size: 13px;
  font-family: inherit;
  padding: 6px 8px;
  box-sizing: border-box;
}
.v7-mem-input:focus { outline: none; border-color: var(--color-accent); }
textarea.v7-mem-input { resize: vertical; line-height: 1.6; }
.v7-mem-hint { font-size: 11px; color: var(--color-text-faint); margin: 7px 0 0; line-height: 1.6; }
.v7-mem-hint.warn { color: var(--color-warn-strong); }
.v7-mem-hint.error { color: var(--color-err-text); }
.v7-mem-form-ops { display: flex; justify-content: flex-end; gap: 8px; margin-top: 9px; }

/* 分页与错误行(与会话卡同款) */
.v7-mem-more {
  width: 100%;
  border: none;
  background: none;
  color: var(--color-link);
  font-size: 12px;
  padding: 7px 0 5px;
  border-radius: 6px;
  cursor: pointer;
}
.v7-mem-more:hover:not(:disabled) { background: var(--color-link-tint-weak); }
.v7-mem-more:disabled { color: var(--color-text-faint); cursor: default; }
.v7-mem-error { font-size: 12px; color: var(--color-err-text); margin: 8px 2px 0; line-height: 1.6; }

/* --- 手册卡 --- */
.v7-hb-sec { display: flex; align-items: baseline; gap: 8px; margin: 12px 2px 6px; }
.v7-hb-sec:first-child { margin-top: 4px; }
.v7-hb-sec-name { font-size: 12px; font-weight: 600; color: var(--color-text-secondary); letter-spacing: 0.04em; }
.v7-hb-sec-hint { font-size: 11px; color: var(--color-text-faint); }
/* 主索引双计数「n/15 行 · m/1024B」,超限转红(与服务端 indexMetrics 同算法) */
.v7-hb-count { margin-left: auto; font-size: 11px; color: var(--color-text-faint); font-variant-numeric: tabular-nums; }
.v7-hb-count.over { color: var(--color-danger); font-weight: 600; }
.v7-hb-index {
  width: 100%;
  border: 1px solid var(--color-border-overlay);
  border-radius: 8px;
  background: var(--color-pop-bg);
  color: var(--color-text-primary);
  font-size: 13px;
  font-family: inherit;
  line-height: 1.7;
  padding: 8px 10px;
  resize: vertical;
  box-sizing: border-box;
}
.v7-hb-index:focus { outline: none; border-color: var(--color-accent); }
.v7-hb-index:disabled { background: var(--color-bg-subtle); color: var(--color-text-secondary); }
.v7-hb-note { font-size: 11px; color: var(--color-text-faint); line-height: 1.6; margin: 6px 2px; }

/* 规程文件行(逻辑文件名 + 字节/时间 + 未加入主索引标记) */
.v7-hb-file {
  border: 1px solid var(--color-border-overlay);
  border-radius: 8px;
  background: var(--color-bg-note);  /* 便签纸底(与记忆便签同一材质) */
  margin: 6px 0;
}
.v7-hb-file-head {
  display: flex;
  align-items: center;
  gap: 8px;
  width: 100%;
  border: none;
  background: none;
  border-radius: 8px;
  padding: 8px 10px;
  font: inherit;
  text-align: left;
  cursor: pointer;
  transition: background var(--dur-fast) var(--ease-ui);
}
.v7-hb-file-head:hover { background: var(--color-link-tint-weak); }
.v7-hb-file-head:focus-visible { outline: 2px solid var(--color-link); outline-offset: -1px; }
.v7-hb-file-mid { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 1px; }
.v7-hb-file-name {
  font-size: 13px;   /* 与全局正文字号统一 */
  color: var(--color-text-primary);
  font-family: ui-monospace, SFMono-Regular, Consolas, monospace;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.v7-hb-file-meta { display: flex; align-items: center; gap: 8px; font-size: 11px; color: var(--color-text-faint); }
.v7-hb-tag {
  font-size: 10px;
  line-height: 15px;
  padding: 0 7px;
  border-radius: 99px;
  color: var(--color-warn-strong);
  border: 1px dashed var(--color-warn-border);
  background: var(--color-warn-tint);
}
.v7-hb-unref { font-size: 11px; color: var(--color-warn-strong); line-height: 1.6; margin: 4px 2px 8px; }

/* 文件编辑面(单例) */
.v7-hb-editor {
  border: 1px solid var(--color-border-overlay);
  border-left: 3px solid var(--color-accent);
  border-radius: 8px;
  background: var(--color-pop-bg);
  padding: 10px;
  margin: 8px 0;
}
.v7-hb-name {
  width: 100%;
  border: 1px solid var(--color-border-overlay);
  border-radius: 6px;
  background: var(--color-pop-bg);
  color: var(--color-text-primary);
  font-size: 12.5px;
  font-family: ui-monospace, SFMono-Regular, Consolas, monospace;
  padding: 6px 8px;
  box-sizing: border-box;
}
.v7-hb-name:focus { outline: none; border-color: var(--color-accent); }
.v7-hb-name[readonly] { background: var(--color-bg-subtle); color: var(--color-text-secondary); }
.v7-hb-content {
  width: 100%;
  margin-top: 8px;
  border: 1px solid var(--color-border-overlay);
  border-radius: 6px;
  background: var(--color-pop-bg);
  color: var(--color-text-primary);
  font-size: 12.5px;
  font-family: ui-monospace, SFMono-Regular, Consolas, monospace;
  line-height: 1.6;
  padding: 8px;
  resize: vertical;
  box-sizing: border-box;
}
.v7-hb-content:focus { outline: none; border-color: var(--color-accent); }
.v7-hb-editor-ops { display: flex; justify-content: flex-end; gap: 8px; margin-top: 8px; }

/* 保存行:按钮旁固定说明(11.5) */
.v7-hb-save-row {
  display: flex;
  align-items: center;
  gap: 10px;
  margin-top: 12px;
  padding-top: 10px;
  border-top: 1px dashed var(--color-border-overlay);
}
.v7-hb-save {
  border: none;
  border-radius: 8px;
  background: var(--color-accent-strong);
  color: var(--color-on-accent);
  font-size: 13px;
  padding: 7px 18px;
  cursor: pointer;
  transition: filter var(--dur-fast) var(--ease-ui), opacity var(--dur-fast) var(--ease-ui);
}
:root[data-theme="dark"] .v7-hb-save { background: var(--color-accent); }
.v7-hb-save:hover:not(:disabled) { filter: brightness(1.07); }
.v7-hb-save:disabled { opacity: 0.55; cursor: not-allowed; }
.v7-hb-save-note { font-size: 11px; color: var(--color-text-faint); line-height: 1.5; }

/* 关闭守卫条(未保存草稿要关抽屉/收卡时就地裁决) */
.v7-hb-guard {
  display: flex;
  align-items: center;
  gap: 10px;
  margin-top: 10px;
  padding: 9px 12px;
  border: 1px solid var(--color-warn-border);
  border-radius: 8px;
  background: var(--color-warn-bg-soft);
}
.v7-hb-guard-text { flex: 1; min-width: 0; font-size: 12px; color: var(--color-warn-deep); line-height: 1.5; }
.v7-hb-guard-btns { display: flex; gap: 6px; flex: none; }

@media (max-width: 767px) {
  .v7-mem-ops { display: inline-flex; } /* 触屏无 hover:便签操作常驻 */
  .v7-mem-scope, .v7-mem-type { max-width: 100%; }
}

/* ==========================================================================
   V8 F2 — rail / 设置浮层 / 员工总览(全量语义 token 化;v=517;PLAN-V8 P2-F2)
   视觉基准:方向稿 v-final(56px 深栏 / 44px 命中区 / 琥珀选中态;rail 深浅两态常深,
   V3 控制台气质);聊天区等全部表面已并入文件头两层 token 体系。
   ========================================================================== */

/* ---------- rail 本体 ---------- */
#v8-rail {
  grid-column: 1;
  grid-row: 1;
  width: var(--v8-rail-w);
  flex: none;
  background: var(--color-bg-rail);
  display: flex;
  flex-direction: column;
  align-items: center;
  padding: 12px 0 10px;
  position: relative;
  z-index: 40; /* 高于面板,低于浮层遮罩 */
}

/* rail 顶部:圆头像 + 连接角标(#me-avatar/#sidebar-conn 旧 ID 随迁,样式按 rail 重定) */
#v8-rail-avatar {
  position: relative;
  width: 40px;
  height: 40px;
  padding: 0;
  border: none;
  border-radius: 50%;
  background: none;
  flex: none;
}
#v8-rail-avatar .avatar { width: 40px; height: 40px; font-size: 15px; border-radius: 50%; }
#v8-rail-avatar .conn-dot {
  position: absolute;
  right: -2px;
  bottom: -2px;
  width: 11px;
  height: 11px;
  border: 2px solid var(--color-bg-rail); /* 角标描边随 rail 底色,浅深主题都贴合 */
}
#v8-rail-avatar:focus-visible { outline: 2px solid var(--color-accent); outline-offset: 2px; }

/* rail 中部/底部按钮(命中区 44px 对齐 --touch-min;hover/选中/focus 态齐全) */
.v8-rail-nav {
  display: flex;
  flex-direction: column;
  gap: 6px;
  margin-top: 24px;
  flex: 1;
}
.v8-rail-foot {
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.v8-rail-btn {
  width: 44px;
  height: 44px;
  border: none;
  border-radius: 6px;
  background: none;
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--color-rail-icon);
  flex: none;
  transition: color var(--dur-fast) var(--ease-ui), background-color var(--dur-fast) var(--ease-ui), transform 80ms var(--ease-ui);
}
.v8-rail-btn:hover { color: var(--color-rail-icon-hover); background: var(--color-bg-rail-hover); }
.v8-rail-btn:active { transform: scale(0.94); }
.v8-rail-btn.active { color: var(--color-rail-icon-active); }
.v8-rail-btn.active:hover { color: var(--color-rail-icon-active); background: var(--color-bg-rail-hover); }
.v8-rail-btn:focus-visible { outline: 2px solid var(--color-accent); outline-offset: -2px; }

/* ---------- 设置浮层(rail 右侧弹出;账号/主题三态/退出) ---------- */
#v8-settings-pop {
  position: absolute;
  left: calc(var(--v8-rail-w) - 6px);
  bottom: 8px;
  width: 248px;
  background: var(--color-pop-bg);
  border: 1px solid var(--color-border-subtle);
  border-radius: 10px;
  box-shadow: var(--shadow-menu);
  padding: 12px;
  z-index: 45; /* 高于 rail,低于全屏浮层 */
}
.v8-pop-account {
  display: flex;
  gap: 10px;
  align-items: center;
  padding: 4px 4px 12px;
  border-bottom: 1px solid var(--color-border-subtle);
}
.v8-pop-account .avatar { width: 36px; height: 36px; font-size: 14px; border-radius: 50%; }
.v8-pop-account-main { min-width: 0; }
.v8-pop-account-main #me-name {
  display: block;
  font-size: 14px;
  font-weight: 600;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.v8-pop-account-main #v8-pop-conn {
  display: block;
  font-style: normal;
  font-size: 12px;
  color: var(--color-text-secondary);
  margin-top: 1px;
}
.v8-pop-row { padding: 10px 4px; border-bottom: 1px solid var(--color-border-subtle); }
.v8-pop-row .v8-pop-label {
  display: block;
  font-size: 12px;
  color: var(--color-text-secondary);
  margin-bottom: 8px;
}
#v8-theme-seg {
  display: flex;
  background: var(--color-bg-active);
  border-radius: 6px;
  padding: 2px;
  gap: 2px;
}
#v8-theme-seg button {
  flex: 1;
  border: none;
  background: none;
  font-size: 12.5px;
  padding: 5px 0;
  border-radius: 4px;
  color: var(--color-text-secondary);
  transition: background-color var(--dur-fast) var(--ease-ui), color var(--dur-fast) var(--ease-ui);
}
#v8-theme-seg button:hover { color: var(--color-text-primary); }
#v8-theme-seg button.on {
  background: var(--color-pop-bg);
  color: var(--color-text-primary);
  font-weight: 500;
  box-shadow: var(--shadow-seg-on);
}
#v8-theme-seg button:focus-visible { outline: 2px solid var(--color-accent); outline-offset: -2px; }
.v8-pop-item {
  display: block;
  width: 100%;
  text-align: left;
  border: none;
  background: none;
  font-size: 13.5px;
  padding: 9px 8px;
  margin-top: 4px;
  border-radius: 6px;
  color: var(--color-text-primary);
  transition: background-color var(--dur-fast) var(--ease-ui);
}
.v8-pop-item:hover { background: var(--color-bg-active); }
.v8-pop-item:focus-visible { outline: 2px solid var(--color-accent); outline-offset: -2px; }
.v8-pop-item.v8-pop-danger { color: var(--color-danger); }

/* ---------- 员工总览 ---------- */
/* V8:列表头头像/账号名/连接点已迁入 rail,仅剩「+」——靠右收(微信同款) */
#sidebar-header { justify-content: flex-end; }

#v8-bots-view {
  background: var(--color-bg-page);
  display: flex;
  flex-direction: column;
  min-height: 0;
}
#v8-bots-view[hidden] { display: none; }
#v8-bots-head {
  height: var(--header-h);
  flex: none;
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 0 20px;
  background: var(--color-bg-panel-head);
  color: var(--color-text-primary);
  border-bottom: 1px solid var(--color-border-subtle);
}
#v8-bots-head h2 { font-size: 15px; font-weight: 600; flex: 1; min-width: 0; }
#v8-bots-new {
  border: none;
  border-radius: 4px;
  background: var(--color-accent-strong);
  color: var(--color-on-accent);
  font-size: 13px;
  padding: 7px 14px;
  flex: none;
  transition: filter var(--dur-fast) var(--ease-ui);
}
:root[data-theme="dark"] #v8-bots-new { background: var(--color-accent); }
#v8-bots-new:hover { filter: brightness(1.07); }
#v8-bots-new:focus-visible { outline: 2px solid var(--color-accent); outline-offset: 2px; }
.v8-bots-status {
  padding: 14px 20px 0;
  font-size: 13px;
  color: var(--color-text-secondary);
}
.v8-bots-empty {
  padding: 40px 20px;
  text-align: center;
  font-size: 13px;
  color: var(--color-text-secondary);
}
#v8-bots-list {
  list-style: none;
  overflow-y: auto;
  flex: 1;
  min-height: 0;
  padding: 10px 20px 20px;
}
.v8-bot-rowbtn {
  display: flex;
  align-items: center;
  gap: 12px;
  width: 100%;
  text-align: left;
  padding: 12px 12px;
  margin-bottom: 8px;
  border: 1px solid var(--color-border-subtle);
  border-radius: 10px;
  background: var(--color-bg-panel);
  cursor: pointer;
  transition: background-color var(--dur-fast) var(--ease-ui), border-color var(--dur-fast) var(--ease-ui);
}
.v8-bot-rowbtn:hover { background: var(--color-bg-hover); }
.v8-bot-rowbtn:focus-visible { outline: 2px solid var(--color-accent); outline-offset: 2px; }
.v8-bot-rowbtn.off { opacity: 0.72; }
.v8-bot-avatar { width: 40px; height: 40px; font-size: 15px; border-radius: 6px; }
.v8-bot-main { flex: 1; min-width: 0; }
.v8-bot-top { display: flex; align-items: baseline; gap: 8px; min-width: 0; }
.v8-bot-name {
  font-size: 14px;
  font-weight: 600;
  color: var(--color-text-primary);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.v8-bot-engine {
  flex: none;
  font-size: 11px;
  color: var(--color-text-secondary);
  border: 1px solid var(--color-border-subtle);
  border-radius: 4px;
  padding: 0 5px;
  line-height: 16px;
}
.v8-bot-desc {
  font-size: 12.5px;
  color: var(--color-text-secondary);
  margin-top: 2px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.v8-bot-status { font-size: 12px; color: var(--color-accent-text); margin-top: 2px; }
.v8-bot-status.off { color: var(--color-text-faint); }
.v8-bot-chev { flex: none; color: var(--color-text-faint); font-size: 18px; line-height: 1; }

@media (max-width: 767px) {
  /* 窄屏 rail 定位(置文件尾:源序晚于上方 #v8-rail 基础规则,absolute 才能生效)——
     absolute 同时充当设置浮层的定位锚,顶/底贴视口,与桌面三段式一致 */
  #v8-rail {
    position: absolute;
    left: 0;
    top: 0;
    bottom: 0;
    z-index: 30;
  }
  /* 窄屏 rail:命中区保持 44px,浮层贴合收窄的 rail */
  .v8-rail-nav { margin-top: 18px; }
  #v8-settings-pop { left: calc(var(--v8-rail-w) - 4px); width: 232px; }
}

@media (prefers-reduced-motion: reduce) {
  .v8-rail-btn { transition: none; }
  .v8-bot-rowbtn, #v8-bots-new, .v8-pop-item, #v8-theme-seg button { transition: none; }
}

/* ==========================================================================
   V8 F3 — 桌面通知开关 / 内核体检区(v=517;PLAN-V8 P3-F3)
   全部引用语义 token;通过=--color-ok,未完成/未跑=--color-warn-strong,失败=--color-danger
   ========================================================================== */

/* 设置浮层内容可能因内核体检区变长:限高内部滚动,不遮 rail */
#v8-settings-pop {
  max-height: calc(100vh - 24px);
  overflow-y: auto;
  overscroll-behavior: contain;
}

/* ---------- 桌面通知开关(与主题分段同一形态;不可用时禁用并标注) ---------- */
.v8-pop-seg-line {
  display: flex;
  align-items: center;
  gap: 8px;
  min-width: 0;
}
.v8-pop-seg-line #v8-notify-seg {
  flex: 1;
  display: flex;
  background: var(--color-bg-active);
  border-radius: 6px;
  padding: 2px;
  gap: 2px;
}
.v8-pop-seg-line #v8-notify-seg button {
  flex: 1;
  border: none;
  background: none;
  font-size: 12.5px;
  padding: 5px 0;
  border-radius: 4px;
  color: var(--color-text-secondary);
  transition: background-color var(--dur-fast) var(--ease-ui), color var(--dur-fast) var(--ease-ui);
}
.v8-pop-seg-line #v8-notify-seg button:hover:not(:disabled) { color: var(--color-text-primary); }
.v8-pop-seg-line #v8-notify-seg button.on {
  background: var(--color-pop-bg);
  color: var(--color-text-primary);
  font-weight: 500;
  box-shadow: var(--shadow-seg-on);
}
.v8-pop-seg-line #v8-notify-seg button:disabled { opacity: 0.55; cursor: not-allowed; }
.v8-pop-seg-line #v8-notify-seg button:focus-visible { outline: 2px solid var(--color-accent); outline-offset: -2px; }
.v8-notify-state {
  flex: none;
  font-size: 11.5px;
  color: var(--color-text-faint);
  white-space: nowrap;
}

/* ---------- 内核体检区 ---------- */
#v8-kernel-sec { padding-bottom: 10px; }
.v8-kernel-warning {
  font-size: 12px;
  line-height: 1.55;
  color: var(--color-warn-text);
  background: var(--color-warn-bg);
  border: 1px solid var(--color-warn-border);
  border-radius: 6px;
  padding: 6px 8px;
  margin: 0 0 8px;
}
#v8-kernel-list {
  list-style: none;
  margin: 0 0 8px;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.v8-ke {
  border: 1px solid var(--color-border-subtle);
  border-radius: 8px;
  padding: 8px 9px;
  background: var(--color-bg-note);
}
.v8-ke-head {
  display: flex;
  align-items: baseline;
  gap: 8px;
  min-width: 0;
  width: 100%;
}
button.v8-ke-head { /* 可折叠引擎:整卡头行可点(森哥反馈:结果详情默认折叠,点击展开) */
  border: none;
  background: none;
  text-align: left;
  padding: 2px 2px;
  margin: -2px -2px;
  border-radius: 6px;
  cursor: pointer;
  color: inherit;
  font: inherit;
  transition: background-color var(--dur-fast) var(--ease-ui);
}
button.v8-ke-head:hover { background: var(--color-bg-hover-weak); }
button.v8-ke-head:focus-visible { outline: 2px solid var(--color-accent); outline-offset: -2px; }
.v8-ke-name {
  font-size: 13px;
  font-weight: 600;
  color: var(--color-text-primary);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.v8-ke-state { /* 整体状态徽标(摘要行内;颜色按状态类) */
  flex: none;
  font-size: 12px;
  font-weight: 600;
  color: var(--color-text-secondary);
}
.v8-ke-state.passed { color: var(--color-ok); }       /* 整体通过:当前版本必需 installed 项全过才可能有此态 */
.v8-ke-state.failed { color: var(--color-danger); }
.v8-ke-state.incomplete,
.v8-ke-state.interrupted { color: var(--color-warn-strong); }
.v8-ke-state.stale { color: var(--color-warn-strong); } /* V8 整改 R1:旧版本过期证据,不给绿色 */
.v8-ke-chev {
  flex: none;
  font-size: 11px;
  color: var(--color-text-faint);
  transition: transform var(--dur-fast) var(--ease-ui);
}
.v8-ke-chev.open { transform: rotate(180deg); }
.v8-ke-detail { /* 展开详情:轻过渡(折叠切换在既有 DOM 上就地改 hidden,动画只在显示时播) */
  margin-top: 7px;
  padding-top: 7px;
  border-top: 1px dashed var(--color-border-subtle);
  animation: v8ke-detail-in var(--dur-fast) var(--ease-ui);
}
.v8-ke-detail[hidden] { display: none; }
@keyframes v8ke-detail-in {
  from { opacity: 0; transform: translateY(-2px); }
}
.v8-ke-ver {
  flex: none;
  margin-left: auto;
  font-size: 12px;
  font-weight: 500;
  color: var(--color-text-secondary);
  font-family: var(--font-mono);
}
.v8-ke-ver.off { color: var(--color-text-faint); font-weight: 400; }
.v8-ke-ver.unknown { color: var(--color-warn-strong); } /* 未知版本不给任何"正常"色 */
.v8-ke-change {
  font-size: 12px;
  line-height: 1.55;
  color: var(--color-warn-strong);
  margin-top: 5px;
}
.v8-ke-last {
  font-size: 12px;
  line-height: 1.5;
  color: var(--color-text-secondary);
  margin-top: 4px;
}
.v8-ke-last.ok { color: var(--color-ok); } /* 仅"当前版本全部必需项通过"才给绿 */

/* 体检任务逐项结果(分段:样本回归 / 当前内核检查;整体状态徽标在头部摘要行) */
.v8-ke-result {
  margin-top: 6px;
}
.v8-kseg { margin-top: 6px; }
.v8-kseg-title {
  font-size: 11.5px;
  color: var(--color-text-faint);
  margin-bottom: 3px;
}
.v8-kseg-list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 2px;
}
.v8-kc {
  display: flex;
  gap: 6px;
  align-items: baseline;
  font-size: 12px;
  line-height: 1.5;
  min-width: 0;
}
.v8-kc-st { flex: none; font-size: 11px; }
.v8-kc.passed .v8-kc-st { color: var(--color-ok); }
.v8-kc.failed .v8-kc-st { color: var(--color-danger); }
.v8-kc.skipped .v8-kc-st { color: var(--color-warn-strong); }
.v8-kc-msg {
  color: var(--color-text-secondary);
  overflow-wrap: anywhere;
}
.v8-kc.failed .v8-kc-msg { color: var(--color-text-primary); }

#v8-kernel-run {
  display: block;
  width: 100%;
  border: none;
  border-radius: 6px;
  background: var(--color-accent-strong);
  color: var(--color-on-accent);
  font-size: 13px;
  font-weight: 500;
  padding: 8px 0;
  transition: filter var(--dur-fast) var(--ease-ui);
}
:root[data-theme="dark"] #v8-kernel-run { background: var(--color-accent); }
#v8-kernel-run:hover:not(:disabled) { filter: brightness(1.07); }
#v8-kernel-run:disabled { opacity: 0.55; cursor: not-allowed; }
#v8-kernel-run:focus-visible { outline: 2px solid var(--color-accent); outline-offset: 2px; }
.v8-kernel-status {
  font-size: 12px;
  color: var(--color-text-secondary);
  margin-top: 6px;
}

@media (prefers-reduced-motion: reduce) {
  #v8-kernel-run, .v8-pop-seg-line #v8-notify-seg button { transition: none; }
}


/* ==================== V8.1 B1:干活设置(工位卡内;颜色只引语义层 token,不出新风格) ==================== */
.v81-ws-status {
  font-size: 12px;
  line-height: 1.7;
  color: var(--color-text-secondary);
  margin: 2px 0 4px;
}
.v81-ws-status.v81-ws-saved { color: var(--color-accent-text); }
.v81-ws-status.v81-ws-err { color: var(--color-danger); }
.v81-ws-retry { margin: 2px 0 6px; }
.v81-ws-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  padding: 7px 2px;
  font-size: 14px;
}
.v81-ws-label { color: var(--color-text-primary); flex: none; }
.v81-ws-ctl { display: flex; align-items: center; gap: 8px; min-width: 0; }
.v81-ws-select {
  max-width: 178px;
  padding: 5px 8px;
  font-size: 13px;
  color: var(--color-text-primary);
  background: var(--color-bg-input);
  border: 1px solid var(--color-border-input);
  border-radius: var(--radius-sm);
  transition: border-color var(--dur-fast) var(--ease-ui);
}
.v81-ws-select:hover:not(:disabled) { border-color: var(--color-border-input-hover); }
.v81-ws-select:focus-visible { outline: 2px solid var(--color-accent); outline-offset: 1px; }
.v81-ws-select:disabled {
  color: var(--color-text-faint);
  background: var(--color-bg-subtle);
  cursor: not-allowed;
}
.v81-ws-mark {
  flex: none;
  font-size: 11px;
  line-height: 1;
  color: var(--color-text-faint);
  border: 1px solid var(--color-border-overlay);
  border-radius: 99px;
  padding: 3px 8px;
}
.v81-ws-mark.dirty { color: var(--color-accent-text); border-color: var(--color-accent-border); }
.v81-ws-fixed {
  display: inline-block;
  font-size: 13px;
  color: var(--color-text-primary);
  background: var(--color-bg-subtle);
  border-radius: var(--radius-sm);
  padding: 5px 10px;
}
.v81-ws-fixed-note {
  font-size: 11px;
  line-height: 1.7;
  color: var(--color-text-faint);
  margin: 2px 2px 6px;
}
.v81-ws-actions { display: flex; justify-content: flex-end; margin-top: 6px; }
.v81-ws-warns { display: grid; gap: 6px; margin-top: 8px; }
.v81-ws-warn { font-size: 11px; line-height: 1.7; color: var(--color-text-faint); }
.v81-ws-fallback {
  font-size: 12px;
  line-height: 1.7;
  color: var(--color-warn-text);
  background: var(--color-warn-bg);
  border: 1px solid var(--color-warn-border);
  border-radius: var(--radius-sm);
  padding: 6px 8px;
}
@media (max-width: 420px) {
  .v81-ws-select { max-width: 150px; }
}
@media (prefers-reduced-motion: reduce) {
  .v81-ws-select { transition: none; }
}


/* ==================== V8.1 B3:冻结会话受控解冻(会话行冻结条 + 解冻弹层;只引语义层 token) ==================== */
/* 会话行冻结条:整行折行展示(同 v7-sess-confirm 整行语言;行本身已 flex-wrap) */
.v81-thaw-freeze {
  flex: 1 1 100%;
  display: flex;
  align-items: baseline;
  flex-wrap: wrap;
  gap: 3px 8px;
  min-width: 0;
  font-size: 12px;
  line-height: 1.6;
}
.v81-thaw-badge {
  flex: none;
  font-size: 11px;
  line-height: 1;
  color: var(--color-warn-text);
  border: 1px solid var(--color-warn-border);
  border-radius: 99px;
  padding: 3px 8px;
}
.v81-thaw-reason-text {
  flex: 1 1 auto;
  min-width: 0;
  color: var(--color-text-secondary);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.v81-thaw-entry {
  flex: none;
  font-size: 11px;
  line-height: 1;
  color: var(--color-accent-text);
  background: none;
  border: 1px solid var(--color-accent-border);
  border-radius: 99px;
  padding: 4px 10px;
  cursor: pointer;
  transition: background var(--dur-fast) var(--ease-ui);
}
.v81-thaw-entry:hover { background: var(--color-accent-tint-weak); }
.v81-thaw-entry:focus-visible { outline: 2px solid var(--color-accent); outline-offset: 1px; }

/* V8.1 森哥反馈:输入区上方「待迁移」提示条(textarea 上方;沿用冻结条琥珀 token,
   内部徽标/说明/入口直接复用 .v81-thaw-badge/.v81-thaw-reason-text/.v81-thaw-entry,不引新视觉) */
.v81-thaw-note {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 4px 8px;
  padding: 6px 10px;
  border: 1px solid var(--color-warn-border);
  border-radius: 6px;
  background: var(--color-warn-bg);
  font-size: 12px;
  line-height: 1.6;
}
.v81-thaw-note .v81-thaw-reason-text { flex: 1 1 auto; white-space: normal; }
.v81-thaw-note[hidden] { display: none; }

/* 解冻弹层(v5-mask 遮罩/入场动画复用;面板底+二级阴影,与向导同材质) */
#v81-session-thaw { z-index: 62; } /* 压过工作区抽屉(z41),低于全屏预览 */
.v81-thaw {
  width: min(460px, 100%);
  max-height: calc(100vh - 48px);
  overflow: auto;
  background: var(--color-pop-bg);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-2);
  padding: 18px 18px 12px;
}
.v81-thaw-title {
  font-size: 16px;
  font-weight: 600;
  color: var(--color-text-primary);
  margin: 0 0 4px;
}
.v81-thaw-sess {
  font-size: 14px;
  font-weight: 500;
  color: var(--color-text-primary);
  margin: 0;
  overflow-wrap: anywhere;
}
.v81-thaw-why {
  font-size: 12px;
  line-height: 1.7;
  color: var(--color-text-secondary);
  margin: 2px 0 10px;
}
.v81-thaw-mode {
  border: 1px solid var(--color-border-input);
  border-radius: var(--radius-md);
  padding: 8px 10px 10px;
  margin: 0 0 10px;
  min-width: 0;
}
.v81-thaw-mode-legend {
  font-size: 12px;
  color: var(--color-text-secondary);
  padding: 0 4px;
}
.v81-thaw-mode-opt {
  display: grid;
  grid-template-columns: auto auto 1fr;
  align-items: baseline;
  gap: 6px;
  padding: 5px 2px;
  font-size: 14px;
  color: var(--color-text-primary);
  cursor: pointer;
}
.v81-thaw-mode-opt input { accent-color: var(--color-accent); margin: 0; }
.v81-thaw-mode-opt input:focus-visible { outline: 2px solid var(--color-accent); outline-offset: 1px; }
.v81-thaw-mode-desc {
  font-size: 11px;
  line-height: 1.6;
  color: var(--color-text-faint);
  min-width: 0;
}
.v81-thaw-reason-label {
  display: block;
  font-size: 12px;
  line-height: 1.7;
  color: var(--color-text-secondary);
  margin: 0 0 10px;
}
.v81-thaw-reason-input {
  display: block;
  width: 100%;
  margin-top: 4px;
  padding: 7px 9px;
  font-size: 13px;
  line-height: 1.6;
  color: var(--color-text-primary);
  background: var(--color-bg-input);
  border: 1px solid var(--color-border-input);
  border-radius: var(--radius-sm);
  resize: vertical;
  min-height: 44px;
  transition: border-color var(--dur-fast) var(--ease-ui);
}
.v81-thaw-reason-input:hover { border-color: var(--color-border-input-hover); }
.v81-thaw-reason-input:focus-visible { outline: 2px solid var(--color-accent); outline-offset: 1px; }
.v81-thaw-error { margin: 0 0 10px; }
.v81-thaw-confirm {
  border: 1px solid var(--color-warn-border);
  border-radius: var(--radius-md);
  background: var(--color-warn-bg);
  padding: 10px 12px;
  margin: 0 0 10px;
}
.v81-thaw-confirm[hidden] { display: none; }
.v81-thaw-confirm-text {
  font-size: 12px;
  line-height: 1.7;
  color: var(--color-warn-text);
  margin: 0 0 8px;
}
.v81-thaw-confirm-btns { display: flex; justify-content: flex-end; gap: 8px; }
.v81-thaw-actions { display: flex; justify-content: flex-end; gap: 8px; margin: 2px 0 6px; }
.v81-thaw-alt {
  font-size: 11px;
  line-height: 1.7;
  color: var(--color-text-faint);
  margin: 0;
  border-top: 1px solid var(--color-border-overlay);
  padding-top: 8px;
}
@media (max-width: 420px) {
  .v81-thaw { padding: 14px 14px 10px; }
  .v81-thaw-mode-desc { grid-column: 2 / -1; } /* 窄屏说明折到第二行,不挤压选项 */
}
@media (prefers-reduced-motion: reduce) {
  .v81-thaw-entry { transition: none; }
}


/* ==================== V8.1 B6:一键体验(文件面板入口条 + 体验窗口;只引语义层 token) ==================== */
/* 入口槽:挂在文件面板工具行下;当前目录含 agent-team-experience.json 才填充 */
.v81-exp-slot[hidden] { display: none; }
.v81-exp-entry {
  display: grid;
  gap: 6px;
  margin: 6px 0 2px;
  padding: 8px 10px;
  border: 1px solid var(--color-accent-border);
  border-radius: var(--radius-md);
  background: var(--color-accent-tint-weak);
}
.v81-exp-entry-head {
  display: flex;
  align-items: center;
  gap: 10px;
  min-width: 0;
}
.v81-exp-start { flex: none; }
.v81-exp-start:disabled { opacity: 0.6; cursor: default; }
.v81-exp-entry-hint {
  font-size: 11px;
  line-height: 1.6;
  color: var(--color-text-secondary);
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.v81-exp-note {
  font-size: 12px;
  line-height: 1.7;
  color: var(--color-text-secondary);
  margin: 0;
  cursor: help;
}
.v81-exp-startline {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 12px;
  color: var(--color-accent-text);
}
.v81-exp-startline[hidden] { display: none; }
.v81-exp-spinner {
  flex: none;
  width: 12px;
  height: 12px;
  border: 2px solid var(--color-accent-border);
  border-top-color: var(--color-accent);
  border-radius: 50%;
  animation: v81-exp-spin 0.9s linear infinite;
}
@keyframes v81-exp-spin { to { transform: rotate(360deg); } }
.v81-exp-error {
  font-size: 12px;
  line-height: 1.7;
  color: var(--color-danger);
  margin: 0;
}
.v81-exp-error[hidden] { display: none; }

/* 体验窗口:#v81-experience-preview = v5-mask 级全屏浮层 */
#v81-experience-preview { z-index: 62; } /* 压过工作区抽屉(z41),与解冻弹层同级 */
.v81-exp {
  display: flex;
  flex-direction: column;
  width: min(1040px, calc(100vw - 32px));
  height: min(760px, calc(100vh - 48px));
  background: var(--color-pop-bg);
  border: 1px solid var(--color-border-overlay);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-2);
  overflow: hidden;
}
.v81-exp-bar {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 10px 12px;
  border-bottom: 1px solid var(--color-border-overlay);
  min-width: 0;
}
.v81-exp-runid {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  min-width: 0;
  max-width: 40%;
}
.v81-exp-led {
  flex: none;
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--color-led-off);
}
.v81-exp-led.on { background: var(--color-ok); }
.v81-exp-runid-text {
  font-family: var(--font-mono, monospace);
  font-size: 11px;
  color: var(--color-text-secondary);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.v81-exp-state {
  flex: none;
  font-size: 12px;
  color: var(--color-text-primary);
}
.v81-exp-state-err { color: var(--color-danger); }
.v81-exp-left {
  flex: none;
  font-size: 12px;
  font-variant-numeric: tabular-nums;
  color: var(--color-accent-text);
}
.v81-exp-bar-spacer { flex: 1 1 auto; }
.v81-exp-stop:disabled { opacity: 0.55; cursor: not-allowed; }
.v81-exp-close {
  flex: none;
  width: 28px;
  height: 28px;
  border: none;
  border-radius: var(--radius-sm);
  background: transparent;
  color: var(--color-text-secondary);
  font-size: 14px;
  line-height: 1;
  cursor: pointer;
  transition: background var(--dur-fast) var(--ease-ui);
}
.v81-exp-close:hover { background: var(--color-bg-hover-on-head); color: var(--color-text-primary); }
.v81-exp-close:focus-visible { outline: 2px solid var(--color-accent); outline-offset: 1px; }
.v81-exp-body {
  flex: 1 1 auto;
  min-height: 0;
  background: var(--color-bg-subtle);
}
.v81-exp-frame {
  width: 100%;
  height: 100%;
  border: none;
  background: var(--color-bg-subtle);
}
@media (max-width: 640px) {
  /* PLAN-V9 B3 落点8:窗口高度跟随动态视口(键盘/工具栏下 iframe 仍可见);工具栏换行保底,
     停止/关闭键任何宽度都可点(不改变续签、关闭/停止语义) */
  .v81-exp { width: calc(100vw - 16px); height: calc(100vh - 24px); height: min(calc(100dvh - 24px), var(--app-vh, 100dvh)); }
  .v81-exp-bar { flex-wrap: wrap; row-gap: 6px; }
  .v81-exp-runid { max-width: 44%; }
  .v81-exp-entry-hint { display: none; }
}
@media (prefers-reduced-motion: reduce) {
  .v81-exp-spinner { animation: none; border-top-color: var(--color-accent-border); }
  .v81-exp-close { transition: none; }
}

/* ==========================================================================
   V9 B1:飞书机器人通道管理(设置浮层入口区 + 管理弹窗 + 绑定表单弹窗)
   颜色/间距/圆角/动效全部引用既有语义 token;不新增原语色值。
   ========================================================================== */

/* ---- 设置浮层内的飞书区(入口常驻;后端未就绪时状态行如实显示) ---- */
#v8-feishu-sec { padding-bottom: 12px; }
.v8-feishu-brief {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: 12.5px;
  line-height: 1.5;
  color: var(--color-text-secondary);
  margin: 0 0 8px;
}
.v8-feishu-brief::before {
  content: '';
  flex: none;
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: var(--color-led-off);
}
.v8-feishu-brief.st-ok::before { background: var(--color-ok); }
.v8-feishu-brief.st-warn::before { background: var(--color-warn-strong); }
.v8-feishu-brief.st-err::before { background: var(--color-danger); }
.v8-feishu-managebtn {
  display: block;
  width: 100%;
  border: none;
  border-radius: 6px;
  background: var(--color-accent-strong);
  color: var(--color-on-accent);
  font-size: 13px;
  font-weight: 500;
  padding: 8px 0;
  transition: filter var(--dur-fast) var(--ease-ui);
}
:root[data-theme="dark"] .v8-feishu-managebtn { background: var(--color-accent); }
.v8-feishu-managebtn:hover:not(:disabled) { filter: brightness(1.07); }
.v8-feishu-managebtn:disabled { opacity: 0.55; cursor: not-allowed; }
.v8-feishu-managebtn:focus-visible { outline: 2px solid var(--color-accent); outline-offset: 2px; }

/* ---- 管理弹窗(压普通浮层;表单弹窗再压一层;确认框仍最顶) ---- */
#v9-feishu-mask { z-index: 62; }
#v9-binding-mask { z-index: 66; }
#v9-feishu-dialog,
#v9-binding-dialog {
  width: 560px;
  max-width: 94vw;
  max-height: min(76vh, 640px);
  background: var(--color-pop-bg);
  border-radius: 16px;
  box-shadow: var(--shadow-2);
  padding: 18px 20px;
  display: flex;
  flex-direction: column;
  gap: 12px;
}
#v9-binding-dialog { width: 480px; }
.v9-fx-head {
  display: flex;
  align-items: center;
  gap: 10px;
  flex: none;
}
.v9-fx-title { font-size: 15px; font-weight: 600; flex: 1; }
#v9-feishu-close,
#v9-binding-close,
#v9-fxqr-close {
  flex: none;
  width: 28px;
  height: 28px;
  border: none;
  border-radius: var(--radius-sm);
  background: transparent;
  color: var(--color-text-secondary);
  font-size: 14px;
  line-height: 1;
  cursor: pointer;
  transition: background var(--dur-fast) var(--ease-ui);
}
#v9-feishu-close:hover,
#v9-binding-close:hover,
#v9-fxqr-close:hover { background: var(--color-bg-hover-weak); color: var(--color-text-primary); }
#v9-feishu-close:focus-visible,
#v9-binding-close:focus-visible,
#v9-fxqr-close:focus-visible { outline: 2px solid var(--color-accent); outline-offset: 1px; }
.v9-fx-body {
  overflow-y: auto;
  min-height: 0;
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.v9-fx-foot {
  flex: none;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
}
.v9-fx-foot-btns { display: flex; gap: 10px; }

/* ---- 状态卡:连接状态/配置摘要(仅已配置与否,绝不含 secret)/队列/最近错误 ---- */
.v9-fx-status {
  border: 1px solid var(--color-border-subtle);
  border-radius: 10px;
  background: var(--color-bg-note);
  padding: 10px 12px;
  display: flex;
  flex-direction: column;
  gap: 4px;
  font-size: 12.5px;
  line-height: 1.6;
  color: var(--color-text-secondary);
}
.v9-fx-status .st-line { display: flex; align-items: baseline; gap: 6px; flex-wrap: wrap; min-width: 0; }
.v9-fx-state {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 13px;
  font-weight: 600;
  color: var(--color-text-primary);
}
.v9-fx-state::before {
  content: '';
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--color-led-off);
}
.v9-fx-state.ok::before { background: var(--color-ok); }
.v9-fx-state.warn::before { background: var(--color-warn-strong); }
.v9-fx-state.err::before { background: var(--color-danger); }
.v9-fx-badge {
  flex: none;
  font-size: 11.5px;
  font-weight: 500;
  padding: 1px 8px;
  border-radius: 999px;
  border: 1px solid var(--color-border-overlay);
  color: var(--color-text-secondary);
}
.v9-fx-badge.on {
  color: var(--color-accent-text);
  border-color: var(--color-accent-border);
  background: var(--color-accent-tint-weak);
}
.v9-fx-status .st-errline { color: var(--color-danger); overflow-wrap: anywhere; }
.v9-fx-status .st-warnline { color: var(--color-warn-strong); overflow-wrap: anywhere; }

/* ---- 绑定列表 ---- */
.v9-fx-sec-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  margin-top: 2px;
}
.v9-fx-sec-title { font-size: 13px; font-weight: 600; color: var(--color-text-primary); }
.v9-fx-list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.v9-fx-empty,
.v9-fx-hintline {
  font-size: 12.5px;
  line-height: 1.6;
  color: var(--color-text-faint);
  padding: 14px 4px;
  text-align: center;
}
.v9-fx-hintline { text-align: left; padding: 4px; }
.v9-fx-hintline.err { color: var(--color-err-text); }
.v9-fx-retry {
  border: none;
  background: none;
  color: var(--color-link);
  font-size: 12.5px;
  cursor: pointer;
  padding: 2px 4px;
  border-radius: 4px;
}
.v9-fx-retry:hover { background: var(--color-bg-hover-weak); }
.v9-fx-retry:focus-visible { outline: 2px solid var(--color-accent); outline-offset: 1px; }
.v9-fx-item {
  border: 1px solid var(--color-border-subtle);
  border-radius: 8px;
  padding: 8px 10px;
  background: var(--color-pop-bg);
}
.v9-fx-item-top {
  display: flex;
  align-items: center;
  gap: 8px;
  min-width: 0;
}
.v9-fx-chatid {
  font-family: var(--font-mono);
  font-size: 12.5px;
  font-weight: 600;
  color: var(--color-text-primary);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.v9-fx-type {
  flex: none;
  font-size: 11px;
  padding: 1px 7px;
  border-radius: 999px;
  border: 1px solid var(--color-border-overlay);
  color: var(--color-text-secondary);
}
.v9-fx-room {
  margin-left: auto;
  flex: none;
  max-width: 45%;
  font-size: 12px;
  color: var(--color-text-secondary);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.v9-fx-sub {
  display: flex;
  align-items: baseline;
  gap: 8px;
  flex-wrap: wrap;
  margin-top: 4px;
  font-size: 12px;
  line-height: 1.55;
  color: var(--color-text-secondary);
  min-width: 0;
}
.v9-fx-sub .v9-fx-seg { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 100%; }
.v9-fx-st { flex: none; font-weight: 600; }
.v9-fx-st.on { color: var(--color-ok); }
.v9-fx-st.paused { color: var(--color-warn-strong); }
/* 异常投递状态标签(2026-10-16 整改建议3):发送失败=红 / 结果不明=橙 */
.v9-fx-st.err { color: var(--color-danger); }
.v9-fx-st.warn { color: var(--color-warn-strong); }
.v9-fx-dl-time {
  margin-left: auto;
  flex: none;
  font-size: 12px;
  color: var(--color-text-faint);
  font-variant-numeric: tabular-nums;
}
.v9-fx-actions {
  display: flex;
  gap: 6px;
  justify-content: flex-end;
  margin-top: 6px;
}
.v9-fx-statusline { font-size: 12px; color: var(--color-text-faint); min-height: 1em; margin: 0; }

/* ---- 绑定表单 ---- */
.v9-fx-field { display: flex; flex-direction: column; gap: 4px; }
.v9-fx-label { font-size: 12px; color: var(--color-text-secondary); }
#v9-binding-room,
#v9-binding-session,
#v9-binding-bot,
#v9-binding-chatid,
#v9-binding-openids {
  border: 1px solid var(--color-border-input);
  border-radius: 8px;
  background: var(--color-bg-input);
  color: var(--color-text-primary);
  font-size: 13px;
  padding: 8px 10px;
  font-family: inherit;
  min-width: 0;
}
#v9-binding-chatid { font-family: var(--font-mono); }
#v9-binding-openids { resize: vertical; }
#v9-binding-room:hover,
#v9-binding-session:hover,
#v9-binding-bot:hover,
#v9-binding-chatid:hover,
#v9-binding-openids:hover { border-color: var(--color-border-input-hover); }
#v9-binding-room:focus,
#v9-binding-session:focus,
#v9-binding-bot:focus,
#v9-binding-chatid:focus,
#v9-binding-openids:focus { border-color: var(--color-accent); outline: none; }
#v9-binding-room:disabled,
#v9-binding-session:disabled,
#v9-binding-bot:disabled,
#v9-binding-chatid:disabled { opacity: 0.55; cursor: not-allowed; }
.v9-fx-hint { font-size: 11.5px; line-height: 1.5; color: var(--color-text-faint); }
.v9-fx-check {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 13px;
  color: var(--color-text-primary);
  cursor: pointer;
  user-select: none;
}
.v9-fx-check input[type="checkbox"] { accent-color: var(--color-accent); flex: none; }
.v9-fx-revhint { font-size: 11.5px; color: var(--color-text-faint); }
/* 断点与 JS isMobile() 的 767 档对齐(--app-vh 只在 ≤767 写入;641-767 横屏手机同样要动态限高) */
@media (max-width: 767px) {
  /* PLAN-V9 B3 落点6:小屏限高改带回退的动态视口(软键盘下保存/关闭仍可达) */
  #v9-feishu-dialog, #v9-binding-dialog { padding: 14px; max-height: 86vh; max-height: min(86dvh, var(--app-vh, 100dvh)); }
  .v9-fx-room { max-width: 40%; }
}
@media (prefers-reduced-motion: reduce) {
  #v9-feishu-close, #v9-binding-close, .v8-feishu-managebtn, .v9-fx-retry { transition: none; }
}

/* ==========================================================================
   V9 扫码一键连接(管理面板顶部入口 + 「扫码连接」弹层;契约 2026-10-16 冻结)
   颜色/间距/圆角/动效全部引用既有语义 token;不新增原语色值。
   ========================================================================== */

/* ---- 管理面板顶部入口:未配置=高亮引导(primary),已配置=次要(quiet) ---- */
.v9-fxqr-entry { flex: none; display: flex; flex-direction: column; gap: 6px; }
.v9-fxqr-openbtn {
  display: block;
  width: 100%;
  border: 1px solid var(--color-border-overlay);
  border-radius: 8px;
  background: transparent;
  color: var(--color-text-primary);
  font-size: 13px;
  font-weight: 500;
  padding: 9px 0;
  cursor: pointer;
  transition: filter var(--dur-fast) var(--ease-ui), border-color var(--dur-fast) var(--ease-ui), background var(--dur-fast) var(--ease-ui);
}
.v9-fxqr-openbtn:hover:not(:disabled) { background: var(--color-bg-hover-weak); }
.v9-fxqr-openbtn:focus-visible { outline: 2px solid var(--color-accent); outline-offset: 2px; }
.v9-fxqr-openbtn:disabled { opacity: 0.55; cursor: not-allowed; }
.v9-fxqr-openbtn.guide {
  border: none;
  background: var(--color-accent-strong);
  color: var(--color-on-accent);
}
:root[data-theme="dark"] .v9-fxqr-openbtn.guide { background: var(--color-accent); }
.v9-fxqr-openbtn.guide:hover:not(:disabled) { filter: brightness(1.07); background: var(--color-accent-strong); }
:root[data-theme="dark"] .v9-fxqr-openbtn.guide:hover:not(:disabled) { background: var(--color-accent); }
.v9-fxqr-entryhint { font-size: 11.5px; line-height: 1.5; color: var(--color-accent-text); margin: 0; }

/* ---- 「扫码连接」弹层(内容 JS 渲染;面板 62 < 本层 66 < 确认框 80) ---- */
#v9-fxqr-mask { z-index: 66; }
#v9-fxqr-dialog {
  width: 400px;
  max-width: 94vw;
  max-height: min(76vh, 640px);
  background: var(--color-pop-bg);
  border-radius: 16px;
  box-shadow: var(--shadow-2);
  padding: 18px 20px;
  display: flex;
  flex-direction: column;
  gap: 12px;
}
.v9-fxqr-body {
  overflow-y: auto;
  min-height: 0;
  display: flex;
  flex-direction: column;
  gap: 12px;
  font-size: 12.5px;
  line-height: 1.6;
  color: var(--color-text-secondary);
}
.v9-fxqr-big {
  display: block;
  width: 100%;
  border: none;
  border-radius: 8px;
  background: var(--color-accent-strong);
  color: var(--color-on-accent);
  font-size: 14px;
  font-weight: 600;
  padding: 12px 0;
  cursor: pointer;
  transition: filter var(--dur-fast) var(--ease-ui);
}
:root[data-theme="dark"] .v9-fxqr-big { background: var(--color-accent); }
.v9-fxqr-big:hover:not(:disabled) { filter: brightness(1.07); }
.v9-fxqr-big:focus-visible { outline: 2px solid var(--color-accent); outline-offset: 2px; }
.v9-fxqr-big:disabled { opacity: 0.55; cursor: not-allowed; }
/* pending 态配对码:大字号等宽(手机端飞书输入用;层级上仅次于主按钮) */
.v9-fxqr-code {
  font-size: 26px;
  font-weight: 600;
  letter-spacing: 0.08em;
  font-family: var(--font-mono);
  color: var(--color-text-primary);
  text-align: center;
  padding: 8px 0 2px;
  user-select: all;
  overflow-wrap: anywhere;
}
.v9-fxqr-codelabel { text-align: center; margin: 0; }
.v9-fxqr-note {
  font-size: 11.5px;
  line-height: 1.6;
  color: var(--color-text-faint);
  margin: 0;
  overflow-wrap: anywhere;
}
.v9-fxqr-row { display: flex; gap: 10px; justify-content: center; flex-wrap: wrap; }
.v9-fxqr-linkline {
  display: flex;
  align-items: center;
  gap: 6px;
  min-width: 0;
  font-size: 12px;
  color: var(--color-accent-text);
}
.v9-fxqr-linkline a {
  color: var(--color-accent-text);
  overflow-wrap: anywhere;
  word-break: break-all;
}
.v9-fxqr-linkline a:focus-visible { outline: 2px solid var(--color-accent); outline-offset: 1px; }
.v9-fxqr-result {
  display: flex;
  align-items: baseline;
  gap: 8px;
  font-size: 16px;
  font-weight: 600;
  color: var(--color-ok);
  margin: 0;
}
.v9-fxqr-result.err { color: var(--color-err-text); }
.v9-fxqr-errmsg { color: var(--color-err-text); overflow-wrap: anywhere; margin: 0; }
.v9-fxqr-kv { margin: 0; overflow-wrap: anywhere; }
.v9-fxqr-kv .mono {
  font-family: var(--font-mono);
  color: var(--color-text-primary);
}
.v9-fxqr-steps { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 4px; }
.v9-fxqr-steps li { display: flex; gap: 8px; align-items: baseline; }
.v9-fxqr-steps .n {
  flex: none;
  width: 18px;
  height: 18px;
  border-radius: 50%;
  border: 1px solid var(--color-border-overlay);
  color: var(--color-text-secondary);
  font-size: 11px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  transform: translateY(3px);
}
@media (max-width: 767px) {
  /* 与 767 动态视口档对齐:软键盘/小屏下弹层内容与关闭键可达 */
  #v9-fxqr-dialog { padding: 14px; max-height: 86vh; max-height: min(86dvh, var(--app-vh, 100dvh)); }
}
@media (prefers-reduced-motion: reduce) {
  #v9-fxqr-close, .v9-fxqr-big, .v9-fxqr-openbtn { transition: none; }
}

/* ==========================================================================
   V9 B2:员工浏览器浏览记录(设置浮层入口区 + 记录弹窗 + 截图卡/预览弹窗 + 授权提示条)
   颜色/间距/圆角/动效全部引用既有语义 token;不新增原语色值。
   ========================================================================== */

/* ---- 聊天气泡里的截图引用卡(browser_image 类型化引用;点击开预览) ---- */
.v9-shot-list {
  display: flex;
  flex-direction: column;
  gap: 8px;
  margin-top: 8px;
  max-width: 340px;
}
.v9-shot-card {
  display: flex;
  align-items: center;
  gap: 12px;
  width: 100%;
  text-align: left;
  background: var(--color-pop-bg);
  border: 1px solid var(--color-border-overlay);
  border-radius: 12px;
  padding: 10px 12px;
  box-shadow: var(--shadow-1);
  cursor: pointer;
  transition: transform var(--dur-fast) var(--ease-ui), box-shadow var(--dur-fast) var(--ease-ui);
}
.v9-shot-card:hover:not(:disabled) { transform: translateY(-1px); box-shadow: var(--shadow-hover-raise); }
.v9-shot-card:focus-visible { outline: 2px solid var(--color-accent); outline-offset: 1px; }
.v9-shot-card:disabled { opacity: 0.55; cursor: not-allowed; }
.v9-shot-icon {
  flex: none;
  width: 34px;
  height: 34px;
  border-radius: 8px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--color-accent-tint);
  color: var(--color-accent-text);
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.5px;
}
.v9-shot-mid { flex: 1; min-width: 0; }
.v9-shot-name {
  display: block;
  font-size: 13px;
  font-weight: 500;
  color: var(--color-text-primary);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.v9-shot-meta { display: flex; gap: 8px; margin-top: 2px; font-size: 11px; color: var(--color-text-faint); }
.v9-shot-from { color: var(--color-link); }
.v9-shot-open { flex: none; font-size: 12px; color: var(--color-link); }

/* ---- 等待授权提示条(浅色;只做文本级识别,不改消息内容) ---- */
.v9-authbar {
  display: flex;
  align-items: baseline;
  gap: 8px;
  margin-top: 8px;
  padding: 7px 10px;
  border: 1px solid var(--color-warn-border);
  border-radius: var(--radius-md);
  background: var(--color-warn-bg-soft);
  color: var(--color-warn-strong);
  font-size: 12px;
  line-height: 1.55;
}
.v9-authbar-tag { flex: none; font-weight: 600; }

/* ---- 截图预览弹窗(压记录弹窗之上;打开才拉取,关闭撤销 object URL) ---- */
#v9-shot-mask { z-index: 70; }
#v9-shot-dialog {
  width: min(720px, 94vw);
  background: var(--color-pop-bg);
  border-radius: 16px;
  box-shadow: var(--shadow-3);
  padding: 18px 20px;
  display: flex;
  flex-direction: column;
  gap: 12px;
}
.v9-shot-body {
  min-height: 160px;
  display: flex;
  align-items: center;
  justify-content: center;
  border: 1px solid var(--color-border-subtle);
  border-radius: 10px;
  background: var(--color-bg-subtle-solid);
  overflow: auto;
}
#v9-shot-img {
  display: block;
  max-width: 100%;
  max-height: min(56vh, 520px);
  border-radius: 6px;
}
.v9-shot-body .v9-fx-hintline { padding: 32px 16px; text-align: center; }

/* ---- 浏览记录弹窗 ---- */
#v9-records-mask { z-index: 62; }
#v9-records-dialog {
  width: 640px;
  max-width: 94vw;
  max-height: min(80vh, 680px);
  background: var(--color-pop-bg);
  border-radius: 16px;
  box-shadow: var(--shadow-2);
  padding: 18px 20px;
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.v9-rec-toolbar {
  display: flex;
  align-items: center;
  gap: 8px;
  flex: none;
}
.v9-rec-toolbar .v9-fx-label { flex: none; }
#v9-records-bot {
  flex: 1;
  min-width: 0;
  border: 1px solid var(--color-border-input);
  border-radius: 8px;
  background: var(--color-bg-input);
  color: var(--color-text-primary);
  font-size: 13px;
  padding: 6px 10px;
  font-family: inherit;
}
#v9-records-bot:hover { border-color: var(--color-border-input-hover); }
#v9-records-bot:focus { border-color: var(--color-accent); outline: none; }
#v9-records-refresh { flex: none; }
.v9-rec-body {
  overflow: auto; /* 竖向滚动列表;窄屏下表格横向兜底,不整页横滚 */
  min-height: 120px;
}
.v9-rec-table {
  width: 100%;
  table-layout: fixed; /* 固定列宽占比,窄容器不横向溢出;单元格 ellipsis 兜底 */
  border-collapse: collapse;
  font-size: 12.5px;
}
.v9-rec-table th:nth-child(1) { width: 20%; }
.v9-rec-table th:nth-child(2) { width: 11%; }
.v9-rec-table th:nth-child(3) { width: 11%; }
.v9-rec-table th:nth-child(4) { width: 24%; }
.v9-rec-table th:nth-child(5) { width: 26%; }
.v9-rec-table th:nth-child(6) { width: 8%; }
.v9-rec-table th {
  position: sticky;
  top: 0;
  z-index: 1;
  text-align: left;
  font-weight: 500;
  color: var(--color-text-secondary);
  background: var(--color-bg-table-header);
  padding: 6px 8px;
  white-space: nowrap;
}
.v9-rec-table td {
  padding: 8px;
  border-top: 1px solid var(--color-border-faint);
  color: var(--color-text-primary);
  vertical-align: top;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.v9-rec-detail > td {
  background: var(--color-bg-note);
  border-top: 1px solid var(--color-border-subtle);
  padding: 10px 12px;
  white-space: normal; /* 展开详情恢复换行 */
}
.v9-rec-row { cursor: pointer; transition: background var(--dur-fast) var(--ease-ui); }
.v9-rec-row:hover { background: var(--color-bg-hover-weak); }
.v9-rec-row:focus-visible { outline: 2px solid var(--color-accent); outline-offset: -2px; }
.v9-rec-row[aria-expanded="true"] { background: var(--color-bg-hover-weak); }
.v9-rec-ts { white-space: nowrap; color: var(--color-text-secondary); }
.v9-rec-bot { font-weight: 500; white-space: nowrap; }
.v9-rec-cell-ellipsis {
  max-width: 180px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.v9-rec-state { flex: none; font-weight: 600; white-space: nowrap; }
.v9-rec-state.on { color: var(--color-ok); }
.v9-rec-state.run { color: var(--color-accent-text); }
.v9-rec-state.warn { color: var(--color-warn-strong); }
.v9-rec-state.err { color: var(--color-danger); }
.v9-rec-meta {
  display: flex;
  flex-wrap: wrap;
  gap: 4px 14px;
  font-size: 11.5px;
  line-height: 1.6;
  color: var(--color-text-secondary);
  margin: 0 0 8px;
}
.v9-rec-meta b { font-weight: 600; color: var(--color-text-primary); }
.v9-rec-meta .mono { font-family: var(--font-mono); }
.v9-rec-chips { display: flex; flex-wrap: wrap; gap: 6px; margin: 0 0 10px; }
.v9-rec-chip {
  font-size: 11px;
  padding: 1px 8px;
  border-radius: 999px;
  border: 1px solid var(--color-border-overlay);
  color: var(--color-text-secondary);
  overflow-wrap: anywhere;
}
.v9-rec-sec { font-size: 11.5px; color: var(--color-text-faint); margin: 0 0 6px; }
.v9-rec-thumbs {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}
.v9-rec-thumb {
  position: relative;
  width: 96px;
  height: 64px;
  padding: 0;
  border: 1px solid var(--color-border-overlay);
  border-radius: 8px;
  background: var(--color-bg-subtle-solid);
  overflow: hidden;
  cursor: pointer;
  transition: transform var(--dur-fast) var(--ease-ui), box-shadow var(--dur-fast) var(--ease-ui);
}
.v9-rec-thumb:hover:not(:disabled) { transform: translateY(-1px); box-shadow: var(--shadow-hover-raise); }
.v9-rec-thumb:focus-visible { outline: 2px solid var(--color-accent); outline-offset: 1px; }
.v9-rec-thumb img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.v9-rec-thumb-tip {
  position: absolute;
  inset: auto 0 0 0;
  font-size: 10px;
  line-height: 1.4;
  padding: 1px 4px;
  color: var(--color-text-toast);
  background: var(--color-bg-toast);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  text-align: left;
}
.v9-rec-thumb-err {
  width: 96px;
  font-size: 11px;
  line-height: 1.5;
  color: var(--color-err-text);
  display: flex;
  align-items: center;
  justify-content: center;
  text-align: center;
  padding: 4px;
}

/* 断点与 JS isMobile() 的 767 档对齐(--app-vh 只在 ≤767 写入) */
@media (max-width: 767px) {
  /* PLAN-V9 B3 落点6:同上,动态视口限高 */
  #v9-records-dialog, #v9-shot-dialog { padding: 14px; max-height: 88vh; max-height: min(88dvh, var(--app-vh, 100dvh)); }
  .v9-rec-cell-ellipsis { max-width: 120px; }
  .v9-shot-list { max-width: 100%; }
}
@media (prefers-reduced-motion: reduce) {
  .v9-shot-card, .v9-rec-thumb, .v9-rec-row { transition: none; }
  .v9-shot-card:hover:not(:disabled), .v9-rec-thumb:hover:not(:disabled) { transform: none; }
}

/* ==========================================================================
   V9 B3 手机动态视口约束(PLAN-V9 B3.1 落点2/4/5/6/8;置文件尾保证源序晚于各组件基础规则)
   --app-vh 由 app.js 的 visualViewport 单监听写入(软键盘弹出/收回、首次加载、旋转后同步)。
   三层回退:--app-vh 未写入(桌面档/无 visualViewport)→ 100dvh → 再不支持 → 100vh。
   目的:软键盘升起时浮层跟着缩短,底部按钮(保存/下载/关闭)不被键盘遮住;
   不用全局 overflow:hidden 掩盖溢出,不改变任何弹层的开关/滚动语义。
   ========================================================================== */

/* 全屏浮层遮罩:fixed inset:0 基础上给显式高度——与视口同高时零变化;
   --app-vh 变小(键盘弹出)时上缘固定、高度缩短,弹窗在可视区内居中 */
.v5-mask,
.v5-drawer-mask,
.modal-mask {
  height: 100vh;                                  /* 回退:不支持 dvh */
  height: var(--app-vh, 100dvh);
}

/* 工位抽屉(既有 top/bottom 双边拉伸):显式高度,键盘下抽屉底(下载/关闭)不被遮 */
#v5-workspace-drawer {
  height: 100vh;
  height: var(--app-vh, 100dvh);
}

/* 设置浮层(既有 calc(100vh-24px) 限高的动态视口版;仍浮层内滚动,飞书/浏览记录入口可达) */
#v8-settings-pop {
  max-height: calc(100vh - 24px);
  max-height: min(calc(100dvh - 24px), var(--app-vh, 100dvh));
}

/* ICP 备案悬挂(合规 footer,2026-10-20 备案通过后上线) */
.beian-footer{position:fixed;left:0;right:0;bottom:0;text-align:center;padding:2px 0;font-size:10px;line-height:1.4;background:transparent;pointer-events:auto;z-index:1}
.beian-footer a{color:rgba(128,128,128,.55);text-decoration:none}
.beian-footer a:hover{color:rgba(128,128,128,.85)}
.beian-footer .beian-sep{color:rgba(128,128,128,.4);margin:0 6px}
.beian-footer .beian-ga{display:inline-flex;align-items:center;gap:3px}
.beian-footer .beian-img{width:12px;height:12px;border:0;vertical-align:middle}
