diff --git a/frontend-web/src/roundtable-planning/styles/roundtable-planning.css b/frontend-web/src/roundtable-planning/styles/roundtable-planning.css
index bf583d12..a9060f24 100644
--- a/frontend-web/src/roundtable-planning/styles/roundtable-planning.css
+++ b/frontend-web/src/roundtable-planning/styles/roundtable-planning.css
@@ -10,10 +10,10 @@
--rt-primary-active: var(--brand-950, #a8071a);
--rt-primary-soft: var(--brand-200, #feeded);
--rt-page-bg: #fef6f6;
- /* 圆桌全页最小可读字号(含 Step 3 方案展示 / 结果绘制) */
- --roundtable-chat-font-size: 16px;
- --roundtable-chat-meta-font-size: 16px;
- font-size: 16px;
+ /* 圆桌全页最小可读字号(含 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 块 */
@@ -29,10 +29,11 @@
/*
* 抬升页内显式写死的小字号类(text-xs / text-sm / text-[10–14px] / calc),
- * 避免 Step 3、侧栏、按钮条等遗漏逐文件改 class。text-base 及以上标题保持不变。
+ * 并让它们跟随设置页字号倍率,避免 Step 3、左右记录区和对话列表遗漏。
+ * text-base 及以上标题由全局 --text-* token 处理。
*/
.roundtable-planning :where(.text-xs, .text-sm) {
- font-size: 16px;
+ font-size: calc(16px * var(--ui-font-scale, 1));
}
.roundtable-planning :where(
@@ -46,7 +47,7 @@
[class*="text-[14px"],
[class*="text-[calc"]
):not(.w-5) {
- font-size: 16px;
+ font-size: calc(16px * var(--ui-font-scale, 1));
}
.roundtable-planning ::-webkit-scrollbar-thumb {
@@ -343,6 +344,17 @@
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(
diff --git a/frontend-web/src/strategy-components/Header.tsx b/frontend-web/src/strategy-components/Header.tsx
index 3ebee2a5..e132de1e 100644
--- a/frontend-web/src/strategy-components/Header.tsx
+++ b/frontend-web/src/strategy-components/Header.tsx
@@ -1,4 +1,4 @@
-import { Bell, ChevronDown, FileText, User } from "lucide-react";
+import { Bell, ChevronDown, User } from "lucide-react";
import { useState } from "react";
import { useLocation, useNavigate } from "react-router-dom";
@@ -12,6 +12,7 @@ import {
import { NotificationDialog } from "@/components/workspace/notification-dialog";
import { getStoredAuth } from "@/core/auth";
import { useLiveAccount } from "@/core/auth/use-live-account";
+import { getHeaderBrandAsset, getHeaderBrandFallback } from "@/core/branding/brand-assets";
import { isWujieEnv } from "@/core/embed/wujie";
import { useUnreadCount } from "@/core/notifications";
import { useMyPosition } from "@/core/positions";
@@ -46,6 +47,17 @@ type HeaderProps = {
const Header = ({ collapsed }: HeaderProps) => {
const { theme } = useTheme();
const isDark = theme === "dark";
+ const brandTheme = theme;
+ const configuredBrandLogo = getHeaderBrandAsset(brandTheme);
+ const fallbackBrandLogo = getHeaderBrandFallback(brandTheme);
+ const [failedBrandLogo, setFailedBrandLogo] = useState
(null);
+ const brandLogo =
+ failedBrandLogo === configuredBrandLogo ? fallbackBrandLogo : configuredBrandLogo;
+ const handleBrandLogoError = () => {
+ if (brandLogo !== fallbackBrandLogo) {
+ setFailedBrandLogo(brandLogo);
+ }
+ };
const [notificationOpen, setNotificationOpen] = useState(false);
const { data: unreadCount = 0 } = useUnreadCount();
const navigate = useNavigate();
@@ -59,7 +71,8 @@ const Header = ({ collapsed }: HeaderProps) => {
const positionName = myPosition?.name?.trim() || "";
const displayName = liveAccount.displayName;
- const showTopNav = isDark && !collapsed && !isWujieEnv();
+ // 深色侧栏收起只影响左侧导航,不应让顶栏回退到浅色的图标布局。
+ const showTopNav = isDark && !isWujieEnv();
// 浅色(红/蓝)顶栏:一级导航正常横排进顶栏,不做深色那种围绕基座的特殊处理。
// 与 collapsed 解耦(折叠只影响侧边栏,一级导航始终可见);wujie 嵌入下隐藏,
// 此时一级导航回落到侧边栏(见 page-sidebar.tsx)。
@@ -226,7 +239,19 @@ const Header = ({ collapsed }: HeaderProps) => {
{showTopNav ? (
<>
{/* 左分区(flex-1):菜单靠右贴近中间基座 */}
-
+
+
+

+
- {/* 中:CM助手(落在背景图发光基座上,纯文字无图标) */}
-
{desensitizeText("CM业务中心")}
+ {/* 中:系统 logo + 名称,落在背景图发光基座上。 */}
+
+
+ {desensitizeText("CM业务中心")}
+
+
{/* 右分区(flex-1):菜单靠左贴近中间基座,操作区靠最右 */}
@@ -260,10 +289,16 @@ const Header = ({ collapsed }: HeaderProps) => {
{/* 浅色顶栏:logo + 一级导航横排(白字落在 banner 上) */}
-
-
+
+
-
+
{desensitizeText("CM业务中心")}
@@ -287,7 +322,13 @@ const Header = ({ collapsed }: HeaderProps) => {
: "bg-white/20",
)}
>
-
+
{!collapsed && (
diff --git a/frontend-web/src/styles/globals.css b/frontend-web/src/styles/globals.css
index 097e616c..9725479f 100644
--- a/frontend-web/src/styles/globals.css
+++ b/frontend-web/src/styles/globals.css
@@ -1179,6 +1179,9 @@ html.dark .strategy-app-header {
white-space: nowrap;
pointer-events: none;
user-select: none;
+}
+
+.header-center-title__label {
/* 白→浅蓝→白 金属质感渐变文字 */
background: linear-gradient(
180deg,