Files
deerflow-code/frontend-web/src/roundtable-planning/styles/roundtable-planning.css
T

648 lines
26 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* 注意:不要在这里 `@import "tailwindcss"`。Tailwind 已由全局 globals.css 引入,
* 本文件被打进同一份样式表,再次 import 会把整套 theme/utilities 重复发一遍
* (CSS 体积翻倍,且重复发出的 --text-* 等主题变量会和全局覆盖打架)。
* 本文件只写圆桌页自己的作用域规则即可。 */
/* 圆桌规划 — 浅色红色主题(对齐 docs/浅红色ui修改.md) */
.roundtable-planning {
--rt-primary: var(--workspace-brand, #f5222d);
--rt-primary-hover: var(--brand-900, #cf1322);
--rt-primary-active: var(--brand-950, #a8071a);
--rt-primary-soft: var(--brand-200, #feeded);
--rt-page-bg: #fef6f6;
/* 圆桌全页最小可读字号(含 Step 3 方案展示 / 结果绘制),跟随「设置 → 字号」。 */
--roundtable-chat-font-size: calc(16px * var(--ui-font-scale, 1));
--roundtable-chat-meta-font-size: calc(16px * var(--ui-font-scale, 1));
font-size: calc(16px * var(--ui-font-scale, 1));
}
/* 会商对话区:气泡正文、步骤卡、Markdown 块 */
.roundtable-chat-message {
font-size: var(--roundtable-chat-font-size);
line-height: 1.625;
}
.roundtable-chat-meta {
font-size: var(--roundtable-chat-meta-font-size);
line-height: 1.5;
}
/*
* 抬升页内显式写死的小字号类(text-xs / text-sm / text-[10–14px] / calc),
* 并让它们跟随设置页字号倍率,避免 Step 3、左右记录区和对话列表遗漏。
* text-base 及以上标题由全局 --text-* token 处理。
*/
.roundtable-planning :where(.text-xs, .text-sm) {
font-size: calc(16px * var(--ui-font-scale, 1));
}
.roundtable-planning :where(
[class*="text-[9px"],
[class*="text-[10px"],
[class*="text-[10.5px"],
[class*="text-[11px"],
[class*="text-[11.5px"],
[class*="text-[12px"],
[class*="text-[13px"],
[class*="text-[14px"],
[class*="text-[calc"]
):not(.w-5) {
font-size: calc(16px * var(--ui-font-scale, 1));
}
.roundtable-planning ::-webkit-scrollbar-thumb {
background: #fcb5b9;
}
.roundtable-planning ::-webkit-scrollbar-thumb:hover {
background: #fa9196;
}
.roundtable-planning .custom-scrollbar-inner::-webkit-scrollbar-thumb {
background: #fddadc;
}
/* 深色模式:跟随全局 ThemeContext(html.dark)或组件 .roundtable-planning--dark
*
* 仅在本页 + 深色下,把语义 token 覆盖为《深蓝色 UI 规范》取值
* (docs/ui规范-深蓝/tokens.css,§1 深蓝系 ZS-004 / 渐蓝系 ZS-002)。
* 全模块组件均经由这些 token(bg-background / text-foreground / border-border …)
* 着色,所以这里统一覆盖即可整页换肤;浅色模式(无 .dark)保持红色主题不受影响。 */
.dark .roundtable-planning,
.roundtable-planning--dark {
/* —— 背景 / 容器(ZS-004 深蓝系,半透明版 —— 让背景图透出)—— */
--background: rgba(6, 14, 36, 0.92); /* zs-004-09 页面底,半透明 */
--foreground: #c5cfe0; /* zs-004-02 正文字体 */
--card: rgba(3, 38, 80, 0.82); /* 卡片底:对齐 sidebar-contents 半透明深蓝 */
--card-foreground: #c5cfe0;
--popover: rgba(3, 38, 80, 0.92); /* 下拉 / 浮层,略深一档 */
--popover-foreground: #c5cfe0;
--muted: rgba(2, 24, 58, 0.75); /* 次级容器(步骤条 / slate-50 表面) */
--muted-foreground: #6e88b0; /* zs-004-04 次级字体 */
--secondary: rgba(26, 47, 90, 0.78); /* zs-004-07 次级按钮底,半透明 */
--secondary-foreground: #c5cfe0;
--accent: rgba(26, 47, 90, 0.78); /* hover / 软高亮表面,半透明 */
--accent-foreground: #e8edf5; /* zs-004-01 */
/* —— 主色 / 链接(ZS-002 渐蓝系) —— */
--primary: #1677ff; /* zs-002-06 主操作 */
--primary-foreground: #ffffff;
--ring: rgba(22, 119, 255, 0.45);
/* —— 边框 / 控件描边:对齐 sidebar-contents 的蓝色发光边框 —— */
--border: rgba(43, 143, 254, 0.55); /* sidebar border-color 同款蓝边 */
--input: rgba(90, 169, 255, 0.35); /* 控件描边,略浅 */
/* —— 功能语义色 —— */
--destructive: #f5222d; /* zs-001-06 错误 */
/* —— brand-* 别名改深蓝(关键):globals.css 只在 :root 把 --brand-* 定为浅红/红,
* .dark 未覆盖,导致组件里 var(--brand-200/900/950) 在深色下泛粉/泛红、与深蓝冲突。
* 这里改为渐蓝系 ZS-002,所有 bg-[var(--brand-200)] / text-[var(--brand-900)] 等
* 一并由红转蓝。 —— */
--workspace-brand: #1677ff; /* 与 primary 对齐 */
--brand-200: #16335f; /* 浅红 chip 底 → 深蓝软底(chip / 头像底) */
--brand-900: #4096ff; /* 红强调 / 按钮 hover → 蓝(zs-002-05) */
--brand-950: #91caff; /* 深红文字 → 浅蓝(zs-002-03,深底上可读) */
/* Tailwind opacity fallbacks used by Chrome 109. Keep these in sync with
* the scoped semantic tokens above, otherwise /5, /20, etc. become opaque. */
--legacy-background-rgb: 6 14 36;
--legacy-foreground-rgb: 197 207 224;
--legacy-card-rgb: 3 38 80;
--legacy-muted-rgb: 2 24 58;
--legacy-muted-foreground-rgb: 110 136 176;
--legacy-secondary-rgb: 26 47 90;
--legacy-accent-rgb: 26 47 90;
--legacy-primary-rgb: 22 119 255;
--legacy-primary-foreground-rgb: 255 255 255;
--legacy-ring-rgb: 22 119 255;
--legacy-border-rgb: 43 143 254;
--legacy-input-rgb: 90 169 255;
--legacy-destructive-rgb: 245 34 45;
--legacy-workspace-brand-rgb: 22 119 255;
--legacy-brand-200-rgb: 22 51 95;
/* —— 圆桌局部别名(回落到上面已覆盖的 token) —— */
--rt-page-bg: var(--background);
--rt-primary: var(--primary);
--rt-primary-hover: var(--primary);
--rt-primary-soft: var(--accent);
color: var(--foreground);
}
/* 整页背景换深蓝主题底图(仅页面根 .roundtable-planning;浅色不受影响)。
* background-image 叠在 background-color 上 —— 底色作为图加载前/未覆盖区域的回落;
* cover 铺满、fixed 固定不随内容滚动(大屏背板观感,与应用渲染大屏一致)。
* url() 里的 SVG 由 Vite 当独立资源输出(非内联),浏览器缓存。 */
.dark .roundtable-planning {
background-color: var(--background);
background-image: url("../../assets/img/layout-bg-theme-dark-blue.svg");
background-size: cover;
background-position: center top;
background-repeat: no-repeat;
background-attachment: fixed;
}
/* Portal 弹窗(RecommendAgentsDialog 等挂 .roundtable-planning--dark 但不在页面根内):
* 不透明实底、无底图 —— 对齐 §21 Modal 容器色 ZS-004-08。 */
.roundtable-planning--dark:not(.roundtable-planning) {
--background: #122347;
--card: #0c1836;
--popover: #122347;
--muted: #0f1c3d;
--secondary: #1a2f5a;
--accent: #1a2f5a;
--legacy-background-rgb: 18 35 71;
--legacy-card-rgb: 12 24 54;
--legacy-muted-rgb: 15 28 61;
--legacy-secondary-rgb: 26 47 90;
--legacy-accent-rgb: 26 47 90;
background-color: var(--background);
background-image: none;
}
.dark .roundtable-planning ::-webkit-scrollbar-thumb,
.roundtable-planning--dark ::-webkit-scrollbar-thumb {
background: rgb(32 132 255 / 70%);
background: color-mix(in oklch, var(--primary) 45%, var(--border));
}
.dark .roundtable-planning ::-webkit-scrollbar-thumb:hover,
.roundtable-planning--dark ::-webkit-scrollbar-thumb:hover {
background: rgb(29 128 255 / 82%);
background: color-mix(in oklch, var(--primary) 65%, var(--border));
}
.dark .roundtable-planning .custom-scrollbar-inner::-webkit-scrollbar-thumb,
.roundtable-planning--dark .custom-scrollbar-inner::-webkit-scrollbar-thumb {
background: rgb(22 119 255 / 35%);
background: color-mix(in oklch, var(--primary) 35%, transparent);
}
/* =============================================================================
* 深色兜底映射 —— 把组件里写死的浅色 Tailwind 类映射到上面的深蓝 token。
*
* 这些组件原本只为浅色红主题写死了 slate / white / emerald 等色,深色靠这里
* 统一改写。作用域 :is(.dark .roundtable-planning, .roundtable-planning--dark)
* 同时覆盖「全局 html.dark」与「组件 --dark 修饰类」两种触发方式;浅色模式
* (无 .dark / 无 --dark)完全不命中,红主题不受影响。
*
* 维护:组件里新增写死颜色时,往下面对应分组补一行即可,不要在组件里写
* `dark:` 变体与本表打架(本表用 !important,会盖过同元素的 dark: 变体)。
* ========================================================================== */
/* ---- 页面底色:浅红 → 深蓝页面底 ---- */
:is(.dark .roundtable-planning, .roundtable-planning--dark).bg-\[\#fef6f6\],
:is(.dark .roundtable-planning, .roundtable-planning--dark) .bg-\[\#fef6f6\] {
background-color: var(--background) !important;
}
/* ---- 表面:白 / 近白底 → 卡片底(半透明,对齐 sidebar-contents 风格) ---- */
:is(.dark .roundtable-planning, .roundtable-planning--dark)
:is(.bg-white, .bg-white\/70, .hover\:bg-white:hover, .bg-\[\#fcfcfd\], .bg-\[\#fffdfa\]) {
background-color: var(--card) !important;
}
/* ---- 次级表面:slate-50/100(含透明度档)→ muted ---- */
:is(.dark .roundtable-planning, .roundtable-planning--dark)
:is(
.bg-slate-50, .bg-slate-50\/20, .bg-slate-50\/30, .bg-slate-50\/40,
.bg-slate-50\/50, .bg-slate-50\/60, .bg-slate-50\/80, .bg-slate-100,
.bg-slate-100\/80
) {
background-color: var(--muted) !important;
}
/* ---- 次级表面 hover → accent ---- */
:is(.dark .roundtable-planning, .roundtable-planning--dark)
:is(
.hover\:bg-slate-50:hover, .hover\:bg-slate-50\/60:hover,
.hover\:bg-slate-100:hover
) {
background-color: var(--accent) !important;
}
/* ---- 禁用 / 较实的中性底 → secondary ---- */
:is(.dark .roundtable-planning, .roundtable-planning--dark)
:is(.bg-slate-300, .disabled\:bg-slate-300:disabled) {
background-color: var(--secondary) !important;
}
/* ---- slate-200 作分隔条 → border 色 ---- */
:is(.dark .roundtable-planning, .roundtable-planning--dark) .bg-slate-200 {
background-color: var(--border) !important;
}
/* ---- 渐变端点 ---- */
:is(.dark .roundtable-planning, .roundtable-planning--dark) .from-slate-50 {
--tw-gradient-from: var(--muted) !important;
}
:is(.dark .roundtable-planning, .roundtable-planning--dark) .to-white {
--tw-gradient-to: var(--card) !important;
}
:is(.dark .roundtable-planning, .roundtable-planning--dark)
:is(.from-\[var\(--brand-200\)\]) {
--tw-gradient-from: rgb(26 47 90 / 60%) !important;
}
:is(.dark .roundtable-planning, .roundtable-planning--dark)
:is(.via-\[var\(--brand-200\)\]) {
--tw-gradient-via: rgb(26 47 90 / 60%) !important;
}
/* ---- 品牌浅红底(brand-200 等) → accent ---- */
:is(.dark .roundtable-planning, .roundtable-planning--dark) [class*="brand-200"] {
background-color: rgb(26 47 90 / 70%) !important;
background-color: color-mix(in oklch, var(--accent) 70%, transparent) !important;
}
/* ---- 中性文字:深 → 正文色 ---- */
:is(.dark .roundtable-planning, .roundtable-planning--dark)
:is(
.text-slate-900, .text-slate-800, .text-slate-700, .text-\[\#334155\],
.hover\:text-slate-900:hover, .hover\:text-slate-800:hover,
.hover\:text-slate-700:hover
) {
color: var(--foreground) !important;
}
/* ---- 中性文字:中 / 浅 → 次级文字色 ---- */
:is(.dark .roundtable-planning, .roundtable-planning--dark)
:is(
.text-slate-650, .text-slate-600, .text-slate-500, .text-slate-400,
.text-slate-300, .text-\[\#94a3b8\],
.hover\:text-slate-650:hover, .hover\:text-slate-600:hover,
.placeholder\:text-slate-400::placeholder
) {
color: var(--muted-foreground) !important;
}
/* ---- 中性边框:slate / red / 白 / #e2e8f0(含透明度档)→ border ---- */
:is(.dark .roundtable-planning, .roundtable-planning--dark)
:is(
.border-white, .border-white\/70, .border-slate-50, .border-slate-100, .border-slate-150,
.border-slate-200, .border-slate-200\/50, .border-slate-200\/80,
.border-slate-300, .border-slate-400, .border-slate-700,
.border-\[\#e2e8f0\],
.border-red-50, .border-red-100, .border-red-100\/50, .border-red-200,
.border-red-200\/50, .border-red-200\/85
) {
border-color: var(--border) !important;
}
/* ---- divide-slate-100 子项分隔线 → border ---- */
:is(.dark .roundtable-planning, .roundtable-planning--dark)
.divide-slate-100 > :not([hidden]) ~ :not([hidden]) {
border-color: var(--border) !important;
}
/* =============================================================================
* neutral 家族 + Step1 左栏写死的米色/浅底(业务链关系图背板、分析记录卡)。
*
* 这些是 RoundtableEntryRail / 分析记录 用 neutral-* 与米色 arbitrary hex
* (#FAF6F5 / #ECE7E4 / #E8D0CC)写死的浅色,上面 slate 表只覆盖 slate-* 与
* #e2e8f0,未含 neutral 与这些米色,导致深色下「关系图背景」「第N步 tag 底」
* 等仍泛白。这里按 slate 同一套语义 token 收口;neutral-900 浮层底(深色 tooltip)
* 保留不动。
* ========================================================================== */
/* ---- 表面:米白底 / neutral-50·100(含 tag 底)→ muted ---- */
:is(.dark .roundtable-planning, .roundtable-planning--dark)
:is(
.bg-\[\#FAF6F5\], .bg-\[\#faf6f5\],
.bg-neutral-50, .bg-neutral-50\/50, .bg-neutral-100
) {
background-color: var(--muted) !important;
}
/* ---- 次级表面 hover:neutral-50 → accent ---- */
:is(.dark .roundtable-planning, .roundtable-planning--dark)
.hover\:bg-neutral-50:hover {
background-color: var(--accent) !important;
}
/* ---- neutral / 米色边框(含 #ECE7E4 / #E8D0CC 虚线,透明度档)→ border ---- */
:is(.dark .roundtable-planning, .roundtable-planning--dark)
:is(
.border-neutral-100, .border-neutral-200, .border-neutral-300,
.hover\:border-neutral-300:hover,
.border-\[\#ECE7E4\], .border-\[\#ece7e4\],
.border-\[\#E8D0CC\], .border-\[\#E8D0CC\]\/60
) {
border-color: var(--border) !important;
}
/* ---- neutral 文字:深 → 正文色 ---- */
:is(.dark .roundtable-planning, .roundtable-planning--dark)
:is(.text-neutral-900, .text-neutral-800, .text-neutral-700) {
color: var(--foreground) !important;
}
/* ---- neutral 文字:中 / 浅 → 次级文字色(深色 tooltip 内的 neutral-300 同样可读) ---- */
:is(.dark .roundtable-planning, .roundtable-planning--dark)
:is(.text-neutral-500, .text-neutral-400, .text-neutral-300) {
color: var(--muted-foreground) !important;
}
/* ---- Step1 右侧「澄清记录」:覆盖 hover:bg-slate-50/80,避免深色下泛灰白 ---- */
:is(.dark .roundtable-planning, .roundtable-planning--dark)
.roundtable-clarification-entry:hover {
background-color: rgb(22 119 255 / 18%) !important;
}
:is(.dark .roundtable-planning, .roundtable-planning--dark)
.roundtable-clarification-entry:hover h4 {
color: #e8edf5 !important;
}
/* ---- focus ring:brand-200 → 主色淡环 ---- */
:is(.dark .roundtable-planning, .roundtable-planning--dark)
:is(
.ring-\[var\(--brand-200\)\],
.focus-within\:ring-\[var\(--brand-200\)\]\/50:focus-within,
.focus\:ring-\[var\(--brand-200\)\]\/50:focus
) {
--tw-ring-color: rgb(22 119 255 / 30%) !important;
}
/* ---- 选中边框 border-primary → 主色描边(柔化) ---- */
:is(.dark .roundtable-planning, .roundtable-planning--dark) .border-primary,
:is(.dark .roundtable-planning, .roundtable-planning--dark) .border-2.border-primary {
border-color: rgb(32 132 255 / 70%) !important;
border-color: color-mix(in oklch, var(--primary) 55%, var(--border)) !important;
}
/* =============================================================================
* 功能语义色(成功/警告/错误/信息/装饰)—— 深色下:浅底改深色同色调、深字提亮。
* 保留色相作为语义提示,只调明度以适配深蓝底。实心中等色按钮(emerald-600 等
* 配白字)本就在深底上可读,故不改。
* ========================================================================== */
/* —— 成功 · emerald —— */
:is(.dark .roundtable-planning, .roundtable-planning--dark)
:is(.bg-emerald-50, .bg-emerald-50\/40, .bg-emerald-50\/50, .bg-emerald-100, .bg-emerald-100\/40) {
background-color: #054059 !important;
background-color: color-mix(in oklch, #10b981 18%, var(--card)) !important;
}
:is(.dark .roundtable-planning, .roundtable-planning--dark)
:is(.border-emerald-200, .border-emerald-200\/40, .border-emerald-200\/50) {
border-color: #20a1ca !important;
border-color: color-mix(in oklch, #10b981 42%, var(--border)) !important;
}
:is(.dark .roundtable-planning, .roundtable-planning--dark)
:is(.text-emerald-800, .text-emerald-700, .text-emerald-600) {
color: #6ee7b7 !important;
}
/* —— 警告 · amber —— */
:is(.dark .roundtable-planning, .roundtable-planning--dark)
:is(
.bg-amber-50, .bg-amber-50\/60, .bg-amber-100, .bg-amber-100\/40, .bg-amber-200,
.hover\:bg-amber-100:hover, .hover\:bg-amber-200:hover
) {
background-color: #333e42 !important;
background-color: color-mix(in oklch, #f59e0b 20%, var(--card)) !important;
}
:is(.dark .roundtable-planning, .roundtable-planning--dark)
:is(
.border-amber-100, .border-amber-200, .border-amber-200\/40, .border-amber-300,
.border-amber-300\/50, .border-amber-500, .border-amber-700\/50
) {
border-color: #809598 !important;
border-color: color-mix(in oklch, #f59e0b 42%, var(--border)) !important;
}
:is(.dark .roundtable-planning, .roundtable-planning--dark)
:is(.text-amber-900, .text-amber-800, .text-amber-700, .text-amber-600) {
color: #fcd34d !important;
}
:is(.dark .roundtable-planning, .roundtable-planning--dark) .focus\:ring-amber-200:focus {
--tw-ring-color: rgb(245 158 11 / 35%) !important;
--tw-ring-color: color-mix(in oklch, #f59e0b 35%, transparent) !important;
}
/* —— 错误 · red / rose —— */
:is(.dark .roundtable-planning, .roundtable-planning--dark)
:is(.bg-red-50, .bg-red-200, .bg-rose-50, .hover\:bg-rose-50:hover) {
background-color: #2d2b4e !important;
background-color: color-mix(in oklch, #ef4444 18%, var(--card)) !important;
}
:is(.dark .roundtable-planning, .roundtable-planning--dark)
:is(.text-red-700, .text-rose-600, .hover\:text-rose-600:hover) {
color: #fca5a5 !important;
}
/* —— 信息 · sky(部分组件已自带 dark: 变体,这里兜底无 dark: 的) —— */
:is(.dark .roundtable-planning, .roundtable-planning--dark) .bg-sky-50 {
background-color: #053d6f !important;
background-color: color-mix(in oklch, #0ea5e9 18%, var(--card)) !important;
}
:is(.dark .roundtable-planning, .roundtable-planning--dark)
:is(.border-sky-200, .border-sky-300\/50) {
border-color: #1f98f5 !important;
border-color: color-mix(in oklch, #0ea5e9 42%, var(--border)) !important;
}
/* —— 装饰 · purple —— */
:is(.dark .roundtable-planning, .roundtable-planning--dark)
:is(.bg-purple-50, .bg-purple-100\/40) {
background-color: #212e6e !important;
background-color: color-mix(in oklch, #a855f7 18%, var(--card)) !important;
}
:is(.dark .roundtable-planning, .roundtable-planning--dark) .border-purple-200 {
border-color: #5f77fb !important;
border-color: color-mix(in oklch, #a855f7 42%, var(--border)) !important;
}
:is(.dark .roundtable-planning, .roundtable-planning--dark)
:is(.text-purple-700, .text-purple-500) {
color: #d8b4fe !important;
}
/* —— 装饰 · orange / pink —— */
:is(.dark .roundtable-planning, .roundtable-planning--dark) .bg-orange-50 {
background-color: #2f3144 !important;
background-color: color-mix(in oklch, #f97316 18%, var(--card)) !important;
}
:is(.dark .roundtable-planning, .roundtable-planning--dark) .border-orange-200\/50 {
border-color: #828bc7 !important;
border-color: color-mix(in oklch, #f97316 42%, var(--border)) !important;
}
:is(.dark .roundtable-planning, .roundtable-planning--dark) .bg-pink-100\/40 {
background-color: #2e2862 !important;
background-color: color-mix(in oklch, #ec4899 18%, var(--card)) !important;
}
/* =============================================================================
* 残留红色清理 —— 内联 SVG 红填充 + 红色发光阴影 → 深蓝系。
* (这些是写死在组件里的红:头像 fill 属性、按钮 rgba(245,34,45) 阴影,
* 不经 token,需在此单独改写;仅深色生效。)
* ========================================================================== */
/* 头像等内联 SVG 的红色 fill(CSS 可覆盖 SVG presentation 属性) */
:is(.dark .roundtable-planning, .roundtable-planning--dark) [fill="#f5222d"] {
fill: #1677ff !important;
}
:is(.dark .roundtable-planning, .roundtable-planning--dark) [fill="#cf1322"] {
fill: #0958d9 !important;
}
:is(.dark .roundtable-planning, .roundtable-planning--dark) [fill="#a8071a"] {
fill: #003eb3 !important;
}
/* 红色发光阴影 → 蓝色发光 */
:is(.dark .roundtable-planning, .roundtable-planning--dark)
.shadow-\[0_2px_8px_rgba\(245\2c 34\2c 45\2c 0\.15\)\] {
box-shadow: 0 2px 8px rgba(22, 119, 255, 0.28) !important;
}
:is(.dark .roundtable-planning, .roundtable-planning--dark)
.shadow-\[0_8px_30px_rgba\(245\2c 34\2c 45\2c 0\.06\)\] {
box-shadow: 0 8px 30px rgba(22, 119, 255, 0.14) !important;
}
/* =============================================================================
* 结构件覆盖(顶栏 / 步骤条 / 次要按钮)—— 保留原有针对性规则。
* ========================================================================== */
/* 顶栏 */
.dark .roundtable-planning > header,
.roundtable-planning--dark > header {
background-color: #122347 !important;
border-color: var(--border) !important;
box-shadow: none !important;
}
/* 步骤条容器 */
.dark .roundtable-planning header .rounded-2xl.border,
.roundtable-planning--dark header .rounded-2xl.border {
background-color: var(--muted) !important;
border-color: var(--border) !important;
}
/* 次要按钮(白底) */
.dark .roundtable-planning header button.bg-white,
.roundtable-planning--dark header button.bg-white {
background-color: var(--secondary) !important;
color: var(--foreground) !important;
}
/* 历史记录下拉面板:深色下改为不透明实底(避免 token 半透明透出底图)。 */
:is(.dark .roundtable-planning, .roundtable-planning--dark) .rt-history-dropdown-panel {
background-color: #122347 !important;
background-image: none !important;
}
:is(.dark .roundtable-planning, .roundtable-planning--dark) .rt-history-dropdown-header {
background-color: #122347 !important;
}
/* =============================================================================
* 派活链路流程图连接线(DispatchChainModal)。
*
* 弹窗经 Radix Dialog portal 到 <body>,**不在** .roundtable-planning 作用域内,
* 因此这些类必须是**全局**(无作用域前缀),并用语义 token(--primary/--border)
* 自适应明暗。连线三态:pending(灰虚线静止) / done(主色实线) / active(主色流动虚线)。
* ========================================================================== */
@keyframes rt-chain-flow {
to {
background-position: 18px 0;
}
}
.rt-chain-connector {
width: 100%;
height: 3px;
border-radius: 9999px;
/* 默认(pending):灰色等距虚线 */
background-image: linear-gradient(
90deg,
var(--border) 45%,
transparent 45%
);
background-size: 12px 100%;
background-repeat: repeat-x;
}
.rt-chain-connector--done {
background-image: none;
background-color: var(--primary);
opacity: 0.7;
}
.rt-chain-connector--active {
background-image: linear-gradient(
90deg,
var(--primary) 45%,
transparent 45%
);
background-size: 18px 100%;
background-repeat: repeat-x;
animation: rt-chain-flow 0.55s linear infinite;
}
/* Custom elegant scrollbar styling */
::-webkit-scrollbar {
width: 6px;
height: 6px;
}
::-webkit-scrollbar-track {
background: transparent;
}
::-webkit-scrollbar-thumb {
background: #cbd5e1;
border-radius: 4px;
}
::-webkit-scrollbar-thumb:hover {
background: #94a3b8;
}
.custom-scrollbar::-webkit-scrollbar-thumb {
background: #e2e8f0;
}
.custom-scrollbar-inner::-webkit-scrollbar-thumb {
background: #fddadc;
}
.dark .custom-scrollbar-inner::-webkit-scrollbar-thumb,
.roundtable-planning--dark .custom-scrollbar-inner::-webkit-scrollbar-thumb {
background: rgb(36 135 254 / 65%);
background: color-mix(in oklch, var(--primary) 35%, var(--border));
}
/* =============================================================================
* 会商消息列表滚动条易用性修复(Step1/Step2/Step3 都受益)。
*
* 症状:鼠标移到右侧纵向滚动条滑块上特别容易触发「左右拖动」,导致点不到滑块。
*
* 根因 1(Step2/Step3 有沙箱/流程图分栏时):分栏拖拽手柄
* `#roundtable-step2-separator`(react-resizable-panels Separator)默认命中区是
* `::after { left:50%; width:16px; transform:translateX(-50%) }`——居中跨在分隔线
* 上、向左探出 8px,正好压住左侧消息列表那条贴右边的纵向滚动条。于是抓滚动条时
* 实际抓到了 `cursor-col-resize` 的手柄命中区 → 误触发左右拖动、点不到滑块。
* 修法:把命中区整体挪到分隔线**右侧(沙箱一侧)**,左侧滚动条彻底让出。
* ID 选择器特异性(1,0,1) 高于 Tailwind 的 `after:*` 工具类(0,1,1),无视加载顺序生效。
*
* 根因 2(所有步骤通用):默认滚动条只有 6px,太细难抓。仅在 .roundtable-planning
* 作用域内加宽到 12px,并用「透明边框 + background-clip:padding-box」把可见滑块收
* 成带内边距的圆条(更像可抓的条,而非贴边细线),命中区仍是整 12px。
* ========================================================================== */
#roundtable-step2-separator::after {
left: 0;
right: auto;
width: 14px;
transform: none;
}
.roundtable-planning ::-webkit-scrollbar {
width: 12px;
height: 12px;
}
.roundtable-planning ::-webkit-scrollbar-thumb {
border: 3px solid transparent;
background-clip: padding-box;
border-radius: 9999px;
}