diff --git a/frontend/src/components/EmptyState.tsx b/frontend/src/components/EmptyState.tsx index 3132e905..1355491d 100644 --- a/frontend/src/components/EmptyState.tsx +++ b/frontend/src/components/EmptyState.tsx @@ -12,7 +12,7 @@ export function EmptyState({ icon: Icon = Construction, title, hint }: Props) {
-

{title}

+

{title}

{hint &&

{hint}

}
diff --git a/frontend/src/components/ExtDimensionAnalysis.tsx b/frontend/src/components/ExtDimensionAnalysis.tsx index 7d5de5e6..57463d25 100644 --- a/frontend/src/components/ExtDimensionAnalysis.tsx +++ b/frontend/src/components/ExtDimensionAnalysis.tsx @@ -385,7 +385,7 @@ export function ExtDimensionAnalysis({
-

{menu?.template === 'table' || menu?.template === 'ranking' ? '明细列表' : currentGroup?.key ?? `选择${activeKindLabel}`}

+

{menu?.template === 'table' || menu?.template === 'ranking' ? '明细列表' : currentGroup?.key ?? `选择${activeKindLabel}`}

{tableRows.length} 条

列来自菜单 detail_columns:{displayColumns.map(f => f.label || f.field).join(' / ') || '暂无字段'}

diff --git a/frontend/src/components/StockIntradayChart.tsx b/frontend/src/components/StockIntradayChart.tsx index 98a481cc..b06ed4d6 100644 --- a/frontend/src/components/StockIntradayChart.tsx +++ b/frontend/src/components/StockIntradayChart.tsx @@ -98,7 +98,7 @@ export function StockIntradayChart({
暂无分钟数据
@@ -109,7 +109,7 @@ export function StockIntradayChart({
diff --git a/frontend/src/components/analysis-shared.tsx b/frontend/src/components/analysis-shared.tsx index 94507fed..7f41351a 100644 --- a/frontend/src/components/analysis-shared.tsx +++ b/frontend/src/components/analysis-shared.tsx @@ -479,7 +479,7 @@ export function PresetFetchState({
-

{title}

+

{title}

{hint}

diff --git a/frontend/src/components/data/EnrichedRebuildPanel.tsx b/frontend/src/components/data/EnrichedRebuildPanel.tsx index f188db06..cb61cbf2 100644 --- a/frontend/src/components/data/EnrichedRebuildPanel.tsx +++ b/frontend/src/components/data/EnrichedRebuildPanel.tsx @@ -126,7 +126,7 @@ export function EnrichedRebuildPanel({ diff --git a/frontend/src/components/ext-data/EditExtDialog.tsx b/frontend/src/components/ext-data/EditExtDialog.tsx index 0a409054..f83541e8 100644 --- a/frontend/src/components/ext-data/EditExtDialog.tsx +++ b/frontend/src/components/ext-data/EditExtDialog.tsx @@ -243,7 +243,7 @@ export function EditExtDialog({ config, onClose }: { config: ExtDataConfig; onCl diff --git a/frontend/src/components/ext-data/ExtDataPullPanel.tsx b/frontend/src/components/ext-data/ExtDataPullPanel.tsx index e3d89776..1cd78567 100644 --- a/frontend/src/components/ext-data/ExtDataPullPanel.tsx +++ b/frontend/src/components/ext-data/ExtDataPullPanel.tsx @@ -475,7 +475,7 @@ export function ExtDataPullPanel({ config, onSaved }: { diff --git a/frontend/src/components/financials/MarkdownRenderer.tsx b/frontend/src/components/financials/MarkdownRenderer.tsx index 1d880766..f2e8825c 100644 --- a/frontend/src/components/financials/MarkdownRenderer.tsx +++ b/frontend/src/components/financials/MarkdownRenderer.tsx @@ -137,7 +137,7 @@ export function MarkdownRenderer({ content }: { content: string }) { if (hMatch) { const level = hMatch[1].length const text = hMatch[2] - const sizeCls = level === 1 ? 'text-base' : level === 2 ? 'text-sm' : 'text-xs' + const sizeCls = level === 1 ? 'text-[16px] leading-6' : level === 2 ? 'text-sm' : 'text-xs' const mtCls = level <= 2 ? 'mt-6' : 'mt-5' blocks.push(
diff --git a/frontend/src/components/monitor/RuleEditor.tsx b/frontend/src/components/monitor/RuleEditor.tsx index 9a3e609c..620cc562 100644 --- a/frontend/src/components/monitor/RuleEditor.tsx +++ b/frontend/src/components/monitor/RuleEditor.tsx @@ -544,7 +544,7 @@ export function RuleEditor({ rule, preset, simple, onClose, onSaved }: Props) {
-
@@ -1615,7 +1615,7 @@ export function RuleEditor({ rule, preset, simple, onClose, onSaved }: Props) {
-
diff --git a/frontend/src/components/screener/StrategyStoreDialog.tsx b/frontend/src/components/screener/StrategyStoreDialog.tsx index dc715dc9..8839c142 100644 --- a/frontend/src/components/screener/StrategyStoreDialog.tsx +++ b/frontend/src/components/screener/StrategyStoreDialog.tsx @@ -50,7 +50,7 @@ export function StrategyStoreDialog({ open, onClose }: Props) {
-

+

不定时更新更多策略

diff --git a/frontend/src/components/signals/CustomSignalDialog.tsx b/frontend/src/components/signals/CustomSignalDialog.tsx index 9a052f5e..fb509aa3 100644 --- a/frontend/src/components/signals/CustomSignalDialog.tsx +++ b/frontend/src/components/signals/CustomSignalDialog.tsx @@ -254,7 +254,7 @@ export function CustomSignalDialog({ open, signal, defaultKind = 'exit', onClose -

diff --git a/frontend/src/pages/AbnormalMoves.tsx b/frontend/src/pages/AbnormalMoves.tsx index 94a87c66..aacb20de 100644 --- a/frontend/src/pages/AbnormalMoves.tsx +++ b/frontend/src/pages/AbnormalMoves.tsx @@ -189,7 +189,7 @@ function AuctionView({ onOpenStock }: {

前往配置数据源 @@ -711,7 +711,7 @@ function DeviationView({ onPreview }: { -
diff --git a/frontend/src/pages/Branding.tsx b/frontend/src/pages/Branding.tsx index 5487584b..ca8f12f2 100644 --- a/frontend/src/pages/Branding.tsx +++ b/frontend/src/pages/Branding.tsx @@ -35,7 +35,7 @@ const VARIANTS: Variant[] = [ hint: '脉冲星、雷达波纹 — 青绿强调色,字重黑体,中等字距', icon: RadioTower, iconAccent: 'text-[#3DD68C]', - nameClass: 'font-sans font-black text-base tracking-[0.10em]', + nameClass: 'font-sans font-black text-[16px] leading-6 tracking-[0.10em]', glow: '#3DD68C', }, { @@ -45,7 +45,7 @@ const VARIANTS: Variant[] = [ hint: 'Vantablack — 纯白单色,字重最重,字距最宽,monochrome 高级感', icon: Square, iconAccent: 'text-[#FAFAFA]', - nameClass: 'font-sans font-black text-base tracking-[0.18em]', + nameClass: 'font-sans font-black text-[16px] leading-6 tracking-[0.18em]', glow: '#FAFAFA', }, { @@ -55,7 +55,7 @@ const VARIANTS: Variant[] = [ hint: 'DNA 螺旋 — 紫色强调,等宽字体,赛博朋克经典意象', icon: GitFork, iconAccent: 'text-[#8B5CF6]', - nameClass: 'font-mono font-bold text-base tracking-[0.08em]', + nameClass: 'font-mono font-bold text-[16px] leading-6 tracking-[0.08em]', glow: '#8B5CF6', }, { @@ -65,7 +65,7 @@ const VARIANTS: Variant[] = [ hint: '极光 — 青色强调,细字优雅,适中字距,与涨跌语义色不冲突', icon: Sparkles, iconAccent: 'text-[#22D3EE]', - nameClass: 'font-sans font-light text-base tracking-[0.12em]', + nameClass: 'font-sans font-light text-[16px] leading-6 tracking-[0.12em]', glow: '#22D3EE', }, ] diff --git a/frontend/src/pages/Dashboard.tsx b/frontend/src/pages/Dashboard.tsx index 23e04fb4..1d299368 100644 --- a/frontend/src/pages/Dashboard.tsx +++ b/frontend/src/pages/Dashboard.tsx @@ -718,7 +718,7 @@ export function Dashboard() {
看板加载失败
- +
) @@ -771,7 +771,7 @@ export function Dashboard() {
-

市场看板

+

市场看板

-

首次使用,需先获取行情数据

+

首次使用,需先获取行情数据

{isTickflowProvider ? '可通过 TickFlow 免费服务器拉取近 1 年全 A 股日K' diff --git a/frontend/src/pages/Data.tsx b/frontend/src/pages/Data.tsx index 8961cad0..9e126b99 100644 --- a/frontend/src/pages/Data.tsx +++ b/frontend/src/pages/Data.tsx @@ -1149,7 +1149,7 @@ export function Data() { @@ -1289,7 +1289,7 @@ export function Data() { diff --git a/frontend/src/pages/Dev.tsx b/frontend/src/pages/Dev.tsx index 58624190..9fd936ea 100644 --- a/frontend/src/pages/Dev.tsx +++ b/frontend/src/pages/Dev.tsx @@ -96,7 +96,7 @@ function MinuteProbePanel() {

- +
diff --git a/frontend/src/pages/Regime.tsx b/frontend/src/pages/Regime.tsx index c8ce6aa1..71909341 100644 --- a/frontend/src/pages/Regime.tsx +++ b/frontend/src/pages/Regime.tsx @@ -661,7 +661,7 @@ export function Regime() {
-

市场环境

+

市场环境

{view === 'phase' ? '涨停情绪 · 市场阶段 · 主线脉络' : '每日环境状态 · 赚钱效应 · 趋势分析'} diff --git a/frontend/src/pages/Review.tsx b/frontend/src/pages/Review.tsx index b428a229..2b5c04bb 100644 --- a/frontend/src/pages/Review.tsx +++ b/frontend/src/pages/Review.tsx @@ -756,7 +756,7 @@ function ReportPanel({
-
AI 大盘复盘
+
AI 大盘复盘

一键生成今日盘后复盘报告 —— 从一句话定调到明日交易计划, 结构化输出可直接指导次日仓位与节奏。 @@ -774,7 +774,7 @@ function ReportPanel({ { icon: '⚠️', label: '风险提示' }, ].map((s) => (

- {s.icon} + {s.icon} {s.label}
))} diff --git a/frontend/src/pages/Screener.tsx b/frontend/src/pages/Screener.tsx index 4a485899..2adadaed 100644 --- a/frontend/src/pages/Screener.tsx +++ b/frontend/src/pages/Screener.tsx @@ -990,7 +990,7 @@ export function Screener() { 筛选 {filterActive(filter) && ( - + {countActiveFilters(filter)} )} diff --git a/frontend/src/pages/StockAnalysis.tsx b/frontend/src/pages/StockAnalysis.tsx index c596214d..a3b869ae 100644 --- a/frontend/src/pages/StockAnalysis.tsx +++ b/frontend/src/pages/StockAnalysis.tsx @@ -228,7 +228,7 @@ function StockAnalysisBoard({ symbol }: { symbol: string }) { {rows.length} 个交易日 · 当前价 - + {curClose?.toFixed(2) ?? '—'}
diff --git a/frontend/src/pages/backtest/AddFactorSignalDialog.tsx b/frontend/src/pages/backtest/AddFactorSignalDialog.tsx index d59eb021..49f22be3 100644 --- a/frontend/src/pages/backtest/AddFactorSignalDialog.tsx +++ b/frontend/src/pages/backtest/AddFactorSignalDialog.tsx @@ -185,7 +185,7 @@ export function AddFactorSignalDialog({ type="button" onClick={() => save.mutate()} disabled={save.isPending || !selected || !thresholdValid || !name.trim()} - className="inline-flex items-center gap-1.5 rounded-btn bg-amber-500/90 px-3 py-1.5 text-xs font-medium text-base transition-colors hover:bg-amber-500 disabled:cursor-not-allowed disabled:opacity-50" + className="inline-flex items-center gap-1.5 rounded-btn bg-amber-500/90 px-3 py-1.5 text-xs font-medium text-white transition-colors hover:bg-amber-500 disabled:cursor-not-allowed disabled:opacity-50" > {save.isPending ? '保存中…' : '保存信号'} diff --git a/frontend/src/pages/backtest/StrategyBacktest.tsx b/frontend/src/pages/backtest/StrategyBacktest.tsx index 6a400469..a5cbc511 100644 --- a/frontend/src/pages/backtest/StrategyBacktest.tsx +++ b/frontend/src/pages/backtest/StrategyBacktest.tsx @@ -686,7 +686,7 @@ function Stat({ label, value, color }: { label: ReactNode; value: string; color?
{label}
diff --git a/frontend/src/pages/settings/DataSources.tsx b/frontend/src/pages/settings/DataSources.tsx index 4f2468ef..9cf91841 100644 --- a/frontend/src/pages/settings/DataSources.tsx +++ b/frontend/src/pages/settings/DataSources.tsx @@ -1015,7 +1015,7 @@ function PluginDetail({ plugin, isActive, matrixCaps, servingSet }: {
-

{plugin.display_name}

+

{plugin.display_name}

插件 · {plugin.runtime} 第三方 {isActive && ( @@ -1164,7 +1164,7 @@ function TickFlowDetail({ active, matrix }: { active: boolean; matrix?: Capabili
-

TickFlow

+

TickFlow

第三方 {active && ( diff --git a/frontend/src/pages/settings/ExtPages.tsx b/frontend/src/pages/settings/ExtPages.tsx index 6877ad99..3c856b08 100644 --- a/frontend/src/pages/settings/ExtPages.tsx +++ b/frontend/src/pages/settings/ExtPages.tsx @@ -141,7 +141,7 @@ export function SettingsExtPagesPanel() {
-
diff --git a/frontend/src/pages/settings/Monitoring.tsx b/frontend/src/pages/settings/Monitoring.tsx index 0b0dcb03..e4eb3e4d 100644 --- a/frontend/src/pages/settings/Monitoring.tsx +++ b/frontend/src/pages/settings/Monitoring.tsx @@ -625,7 +625,7 @@ export function SettingsMonitoringPanel({ highlight }: { highlight?: string } = @@ -701,7 +701,7 @@ export function SettingsMonitoringPanel({ highlight }: { highlight?: string } = @@ -783,7 +783,7 @@ export function SettingsMonitoringPanel({ highlight }: { highlight?: string } = @@ -866,7 +866,7 @@ export function SettingsMonitoringPanel({ highlight }: { highlight?: string } =
{emailError &&
{emailError}
}
- @@ -938,7 +938,7 @@ export function SettingsMonitoringPanel({ highlight }: { highlight?: string } = diff --git a/frontend/tailwind.config.ts b/frontend/tailwind.config.ts index 00e45f38..61d64c36 100644 --- a/frontend/tailwind.config.ts +++ b/frontend/tailwind.config.ts @@ -10,6 +10,8 @@ export default { extend: { colors: { // §6.0.1 色板 — CSS variables 见 src/index.css + // 注意: base 与字号 token 撞名, text-base 会生成 color 规则 (文字变背景色)。 + // 字号 16px 一律写 text-[16px] leading-6, 禁用 text-base。 base: 'hsl(var(--base) / )', surface: 'hsl(var(--surface) / )', elevated: 'hsl(var(--elevated) / )',