frontend-beautify
main
本次改动分两部分:修复一个潜伏的 P0 配置缺陷,以及按「清爽专业风」做的设计系统重构。
frontend/postcss.config.js 里误写入的是 Tailwind 的配置对象(content / theme / plugins),而非 PostCSS 的插件注册 —— 缺少 plugins 字段,导致 PostCSS 从未加载 tailwindcss。
frontend/postcss.config.js
content
theme
plugins
tailwindcss
后果:代码里所有 Tailwind 工具类一直都是无效字符串,页面只跑浏览器默认样式。这是原始提交就存在的问题。
证据:修复后构建产物 CSS 从 1.81 kB → 24.66 kB,且不再残留未编译的 @tailwind / @apply / @layer 指令。
@tailwind
@apply
@layer
tailwind.config.js
index.css
@layer base
prefers-reduced-motion
@layer components
.card
.btn
.field
.pill
.skeleton
.segment
App.tsx
Matches.tsx
TeamMark
EdgeBar
OutcomeCard
AgentCard
SkeletonRows
Spinner
flex-col → sm:flex-row
no_data
error
parse_error
tsc --noEmit
strict: true
vite build
scrollWidth === viewport
/api/v1/matches
/api/v1/predict
APIRouter(prefix="/api/v1")
loadSeq
predictSeq
后端 P0 修复(此前 4 个 commit)需要在有 PostgreSQL 的环境做一次运行时验证,本机无 PG 实例,尚未完成。
postcss.config.js 中写入的是 Tailwind 的配置对象(content/theme/plugins), 缺少 PostCSS 插件注册所需的 plugins 字段,导致 PostCSS 从未加载 tailwindcss。 所有 className 上的 Tailwind 工具类一直是无效字符串,页面仅使用浏览器默认样式。 修复为标准写法 plugins: { tailwindcss: {}, autoprefixer: {} }。 验证:构建产物 CSS 由 1.81 kB 增至 24.66 kB,且不再残留未编译的 @tailwind / @apply / @layer 指令。
设计令牌(tailwind.config.js): - brand 11 档蓝色阶、ink 11 档冷灰色阶、win/draw/loss 语义色 - 中文字体栈、tabular-nums 数字等宽、2xs 字号 - borderRadius card/pill、boxShadow card/raise/focus、fade-up/shimmer 动画 组件层(index.css): - @layer base: 全局背景/字色/抗锯齿、统一焦点环、自定义滚动条, 尊重 prefers-reduced-motion - @layer components: .card .btn .field .pill .skeleton .segment 界面: - App.tsx: SVG 队徽替代 emoji、sticky 毛玻璃头部、服务状态指示、页脚免责声明 - Matches.tsx: 比赛列表卡片化;新增 TeamMark(队名哈希色相队标)、 EdgeBar(home_edge 双向可视化)、OutcomeCard、AgentCard(状态徽章+证据 列表+无数据说明)、骨架屏;SVG Spinner 替代 emoji 转圈 可用性修复: - 预测面板拆为独立的胜平负/置信度/模式/耗时卡片,胜平负与比分各有 独立可视化条 - 移动端横向溢出:比赛行改为 flex-col -> sm:flex-row,元信息与操作按钮重排 - 无数据专家卡片补充说明文案,不再空白 保留原有契约:loadSeq/predictSeq 竞态防护、游标分页、全部类型定义。 验证:tsc --noEmit(strict)0 错误;vite build 成功; 360/390/414/768/1280px 五档实测 scrollWidth === viewport,零横向溢出。
.tools/ 与 .preview/ 为本机校验脚本与截图产物,不参与构建,不入库。
No dependencies set.
The note is not visible to the blocked user.
背景
本次改动分两部分:修复一个潜伏的 P0 配置缺陷,以及按「清爽专业风」做的设计系统重构。
🔴 关键修复:Tailwind 此前从未生效
frontend/postcss.config.js里误写入的是 Tailwind 的配置对象(content/theme/plugins),而非 PostCSS 的插件注册 —— 缺少plugins字段,导致 PostCSS 从未加载tailwindcss。后果:代码里所有 Tailwind 工具类一直都是无效字符串,页面只跑浏览器默认样式。这是原始提交就存在的问题。
证据:修复后构建产物 CSS 从 1.81 kB → 24.66 kB,且不再残留未编译的
@tailwind/@apply/@layer指令。改动内容
tailwind.config.js— 设计令牌:brand 11 档蓝色阶、ink 11 档冷灰色阶、win/draw/loss 语义色、中文字体栈、tabular-nums 数字等宽、2xs 字号、card/pill 圆角、三级阴影、fade-up/shimmer 动画index.css—@layer base(全局背景/字色、统一焦点环、自定义滚动条、尊重prefers-reduced-motion)+@layer components(.card/.btn/.field/.pill/.skeleton/.segment)App.tsx— SVG 队徽替代 emoji、粘性毛玻璃顶栏、服务状态指示、页脚免责声明Matches.tsx— 全面重写(366 → 740 行)。新增TeamMark(队名哈希色相队标)、EdgeBar(home_edge 双向可视化)、OutcomeCard、AgentCard、SkeletonRows、SVGSpinner一并修复的可用性问题
flex-col → sm:flex-rowno_data/error/parse_error专家卡片给出明确中文说明(原本空白,看起来像 bug)验证
tsc --noEmit(strict: true)0 错误vite build通过scrollWidth === viewport,零横向溢出/api/v1/matches、/api/v1/predict与后端APIRouter(prefix="/api/v1")一致loadSeq/predictSeq竞态防护、游标分页、全部类型定义合入后仍建议做的验证
后端 P0 修复(此前 4 个 commit)需要在有 PostgreSQL 的环境做一次运行时验证,本机无 PG 实例,尚未完成。
postcss.config.js 中写入的是 Tailwind 的配置对象(content/theme/plugins), 缺少 PostCSS 插件注册所需的 plugins 字段,导致 PostCSS 从未加载 tailwindcss。 所有 className 上的 Tailwind 工具类一直是无效字符串,页面仅使用浏览器默认样式。 修复为标准写法 plugins: { tailwindcss: {}, autoprefixer: {} }。 验证:构建产物 CSS 由 1.81 kB 增至 24.66 kB,且不再残留未编译的 @tailwind / @apply / @layer 指令。