chore: sync marketing pages, CMS extensions, tests and project docs

同步工作区剩余变更,主要包括:
- 营销页面组件与布局持续优化(about/news/services/solutions/team 等)
- 详情页四层叙事组件、布局组件、UI 组件调整
- CMS 数据模型、API 路由、权限、工作流、站内通知、媒体管理扩展
- 新增/补充单元测试与 E2E 测试(cms-workflow.spec.ts 等)
- ESLint 9 迁移、jest/tsconfig 配置更新、依赖调整
- 新增 ADR、CMS 评估文档、Release Review / Acceptance 报告
- 移除水墨装饰组件与大体积未使用字体文件
This commit is contained in:
张翔
2026-07-25 08:04:01 +08:00
parent e35090b914
commit 10404dbb36
208 changed files with 18107 additions and 8330 deletions
+1 -13
View File
@@ -16,18 +16,8 @@ import {
} from 'lucide-react';
import { useReducedMotion } from '@/hooks/use-reduced-motion';
import { cn } from '@/lib/utils';
import { GrainOverlay, FloatingInkParticles, SectionLabel, EASE_OUT } from '@/components/ui/page-decoration';
import { GrainOverlay, SectionLabel, EASE_OUT } from '@/components/ui/page-decoration';
const HOME_PARTICLES = [
{ x: 12, y: 28, scale: 0.8, duration: 10, delay: 0, size: 3 },
{ x: 78, y: 55, scale: 0.6, duration: 12, delay: 1.5, size: 2 },
{ x: 42, y: 38, scale: 1.0, duration: 9, delay: 0.8, size: 4 },
{ x: 88, y: 22, scale: 0.7, duration: 11, delay: 2.2, size: 2.5 },
{ x: 22, y: 72, scale: 0.9, duration: 8.5, delay: 1.0, size: 3.5 },
{ x: 62, y: 48, scale: 0.55, duration: 13, delay: 2.8, size: 2 },
{ x: 55, y: 18, scale: 0.65, duration: 10.5, delay: 3.2, size: 2.5 },
{ x: 32, y: 62, scale: 0.75, duration: 9.5, delay: 0.5, size: 3 },
];
const EASE_SPRING = { type: 'spring', stiffness: 300, damping: 30 } as const;
const SERVICES = [
@@ -366,7 +356,6 @@ function HeroSection() {
className="relative min-h-screen flex items-center overflow-hidden bg-ink"
>
<GrainOverlay />
<FloatingInkParticles particles={HOME_PARTICLES} />
<div className="absolute inset-0 pointer-events-none">
<motion.div style={{ y: gridY, scale }} className="absolute inset-0 opacity-[0.035]">
@@ -1045,7 +1034,6 @@ function CTASection() {
className="relative py-24 sm:py-32 md:py-40 lg:py-52 overflow-hidden bg-ink-light"
>
<GrainOverlay />
<FloatingInkParticles particles={HOME_PARTICLES} />
<div className="absolute inset-0 pointer-events-none">
<div