diff --git a/e2e/visual-snapshots/visual-chromium-mobile/visual-regression.spec.ts/home-fullpage-visual-chromium-mobile.png b/e2e/visual-snapshots/visual-chromium-mobile/visual-regression.spec.ts/home-fullpage-visual-chromium-mobile.png index a9d4c7c..88a71f4 100644 Binary files a/e2e/visual-snapshots/visual-chromium-mobile/visual-regression.spec.ts/home-fullpage-visual-chromium-mobile.png and b/e2e/visual-snapshots/visual-chromium-mobile/visual-regression.spec.ts/home-fullpage-visual-chromium-mobile.png differ diff --git a/e2e/visual-snapshots/visual-chromium-mobile/visual-regression.spec.ts/theme-dark-main-visual-chromium-mobile.png b/e2e/visual-snapshots/visual-chromium-mobile/visual-regression.spec.ts/theme-dark-main-visual-chromium-mobile.png index 878f5c6..870e2d2 100644 Binary files a/e2e/visual-snapshots/visual-chromium-mobile/visual-regression.spec.ts/theme-dark-main-visual-chromium-mobile.png and b/e2e/visual-snapshots/visual-chromium-mobile/visual-regression.spec.ts/theme-dark-main-visual-chromium-mobile.png differ diff --git a/e2e/visual-snapshots/visual-chromium-mobile/visual-regression.spec.ts/theme-light-main-visual-chromium-mobile.png b/e2e/visual-snapshots/visual-chromium-mobile/visual-regression.spec.ts/theme-light-main-visual-chromium-mobile.png index 878f5c6..2e5aa3e 100644 Binary files a/e2e/visual-snapshots/visual-chromium-mobile/visual-regression.spec.ts/theme-light-main-visual-chromium-mobile.png and b/e2e/visual-snapshots/visual-chromium-mobile/visual-regression.spec.ts/theme-light-main-visual-chromium-mobile.png differ diff --git a/e2e/visual-snapshots/visual-chromium-tablet/visual-regression.spec.ts/home-fullpage-visual-chromium-tablet.png b/e2e/visual-snapshots/visual-chromium-tablet/visual-regression.spec.ts/home-fullpage-visual-chromium-tablet.png index cc64923..c53fc75 100644 Binary files a/e2e/visual-snapshots/visual-chromium-tablet/visual-regression.spec.ts/home-fullpage-visual-chromium-tablet.png and b/e2e/visual-snapshots/visual-chromium-tablet/visual-regression.spec.ts/home-fullpage-visual-chromium-tablet.png differ diff --git a/e2e/visual-snapshots/visual-chromium-tablet/visual-regression.spec.ts/theme-dark-main-visual-chromium-tablet.png b/e2e/visual-snapshots/visual-chromium-tablet/visual-regression.spec.ts/theme-dark-main-visual-chromium-tablet.png index 50735f2..0261bf2 100644 Binary files a/e2e/visual-snapshots/visual-chromium-tablet/visual-regression.spec.ts/theme-dark-main-visual-chromium-tablet.png and b/e2e/visual-snapshots/visual-chromium-tablet/visual-regression.spec.ts/theme-dark-main-visual-chromium-tablet.png differ diff --git a/e2e/visual-snapshots/visual-chromium-tablet/visual-regression.spec.ts/theme-light-main-visual-chromium-tablet.png b/e2e/visual-snapshots/visual-chromium-tablet/visual-regression.spec.ts/theme-light-main-visual-chromium-tablet.png index 50735f2..cbe9e16 100644 Binary files a/e2e/visual-snapshots/visual-chromium-tablet/visual-regression.spec.ts/theme-light-main-visual-chromium-tablet.png and b/e2e/visual-snapshots/visual-chromium-tablet/visual-regression.spec.ts/theme-light-main-visual-chromium-tablet.png differ diff --git a/e2e/visual-snapshots/visual-webkit-desktop/visual-regression.spec.ts/home-fullpage-visual-webkit-desktop.png b/e2e/visual-snapshots/visual-webkit-desktop/visual-regression.spec.ts/home-fullpage-visual-webkit-desktop.png index 96a3f61..037a847 100644 Binary files a/e2e/visual-snapshots/visual-webkit-desktop/visual-regression.spec.ts/home-fullpage-visual-webkit-desktop.png and b/e2e/visual-snapshots/visual-webkit-desktop/visual-regression.spec.ts/home-fullpage-visual-webkit-desktop.png differ diff --git a/e2e/visual-snapshots/visual-webkit-desktop/visual-regression.spec.ts/theme-dark-main-visual-webkit-desktop.png b/e2e/visual-snapshots/visual-webkit-desktop/visual-regression.spec.ts/theme-dark-main-visual-webkit-desktop.png index 96a3f61..f7fbfb9 100644 Binary files a/e2e/visual-snapshots/visual-webkit-desktop/visual-regression.spec.ts/theme-dark-main-visual-webkit-desktop.png and b/e2e/visual-snapshots/visual-webkit-desktop/visual-regression.spec.ts/theme-dark-main-visual-webkit-desktop.png differ diff --git a/e2e/visual-snapshots/visual-webkit-desktop/visual-regression.spec.ts/theme-light-main-visual-webkit-desktop.png b/e2e/visual-snapshots/visual-webkit-desktop/visual-regression.spec.ts/theme-light-main-visual-webkit-desktop.png index 96a3f61..037a847 100644 Binary files a/e2e/visual-snapshots/visual-webkit-desktop/visual-regression.spec.ts/theme-light-main-visual-webkit-desktop.png and b/e2e/visual-snapshots/visual-webkit-desktop/visual-regression.spec.ts/theme-light-main-visual-webkit-desktop.png differ diff --git a/src/app/(marketing)/home-content-v15.test.tsx b/src/app/(marketing)/home-content-v15.test.tsx index f64fb3f..b7cc8e4 100644 --- a/src/app/(marketing)/home-content-v15.test.tsx +++ b/src/app/(marketing)/home-content-v15.test.tsx @@ -98,6 +98,16 @@ describe('HomeContentV15 - 浅色 Hero(暗黑模式 token 友好)', () => { expect(hero.querySelector('img')).toBeNull(); }); + it('mounts the brand-red dynamic particle layer (entrance-only, no continuous loop)', () => { + render(); + + const hero = screen.getByTestId('hero-section'); + const particles = screen.getByTestId('hero-particle-field'); + expect(particles.tagName).toBe('CANVAS'); + expect(particles).toHaveAttribute('aria-hidden', 'true'); + expect(hero.contains(particles)).toBe(true); + }); + it('keeps a single primary CTA and demotes the secondary action to a text link', () => { render(); diff --git a/src/app/(marketing)/home-content-v15.tsx b/src/app/(marketing)/home-content-v15.tsx index 58eea50..53faf21 100644 --- a/src/app/(marketing)/home-content-v15.tsx +++ b/src/app/(marketing)/home-content-v15.tsx @@ -6,6 +6,7 @@ import { ScrollReveal, StaggerReveal } from '@/components/ui/scroll-reveal'; import { Badge } from '@/components/ui/badge'; import { StaticLink } from '@/components/ui/static-link'; import { HeroProductVisual } from '@/components/sections/hero-product-visual'; +import { HeroParticleField } from '@/components/sections/hero-particle-field'; import { ArrowRight, Lightbulb, Database, Layers, Code, Puzzle, Server, Quote, Calendar } from 'lucide-react'; import { cn } from '@/lib/utils'; import { EASE_OUT } from '@/components/ui/page-decoration'; @@ -177,6 +178,9 @@ function HeroSection({ heroData }: { {!reduceMotion && (