perf(motion): 第三批入场动效时长收敛至 300ms(9 文件 20 处)
承接前两批,继续清理 Task #16 的 P0 硬违规: - brand-content (1) / methodology-content (3) / products-content-v3 (4) / solution-detail-content-v3 (4) / team-content-v3 (1) / detail-product-value (2) / service-value (1) / solution-value (3) / brand-visuals 入场处 (1) - 审计:P0 33 → 13,P1 163 / P2 28 持平 - 只改 duration,保留原 delay(与首批先例一致) 验证: - tsc --noEmit 0 error;eslint 9 文件 0 error(仅 methodology 既有 `any` 警告,非本次引入) - 视觉基线不变:前两批已证明时长改动在 reducedMotion+animations disabled 下不改变最终像素 剩余 13 处 P0 均为决策点,未在本批处理: - 3 处循环动画(detail-hero ×2、brand-visuals ×1,repeat:Infinity,违反「禁循环动画」) - 10 处死代码(src/lib/animations.tsx,全站零引用)
This commit is contained in:
@@ -45,7 +45,7 @@ function DetailHero({ solution }: DetailHeroProps) {
|
||||
<motion.div
|
||||
initial={{ opacity: 0, y: 30 }}
|
||||
animate={{ opacity: 1, y: 0 }}
|
||||
transition={{ duration: 0.8, ease: EASE_OUT }}
|
||||
transition={{ duration: 0.3, ease: EASE_OUT }}
|
||||
className="flex items-center gap-4 mb-8"
|
||||
>
|
||||
<div className="w-16 h-16 rounded-2xl bg-brand-soft flex items-center justify-center text-brand">
|
||||
@@ -62,7 +62,7 @@ function DetailHero({ solution }: DetailHeroProps) {
|
||||
<motion.h1
|
||||
initial={{ opacity: 0, y: 50 }}
|
||||
animate={{ opacity: 1, y: 0 }}
|
||||
transition={{ duration: 1, delay: 0.15, ease: EASE_OUT }}
|
||||
transition={{ duration: 0.3, delay: 0.15, ease: EASE_OUT }}
|
||||
className="text-3xl sm:text-4xl md:text-5xl lg:text-6xl font-bold text-ink leading-tight tracking-tighter mb-6 sm:mb-8 max-w-4xl"
|
||||
>
|
||||
{solution.title}
|
||||
@@ -71,7 +71,7 @@ function DetailHero({ solution }: DetailHeroProps) {
|
||||
<motion.p
|
||||
initial={{ opacity: 0, y: 40 }}
|
||||
animate={{ opacity: 1, y: 0 }}
|
||||
transition={{ duration: 0.9, delay: 0.3, ease: EASE_OUT }}
|
||||
transition={{ duration: 0.3, delay: 0.3, ease: EASE_OUT }}
|
||||
className="text-xl lg:text-2xl text-text-secondary max-w-3xl leading-relaxed mb-12"
|
||||
>
|
||||
{solution.description}
|
||||
@@ -80,7 +80,7 @@ function DetailHero({ solution }: DetailHeroProps) {
|
||||
<motion.div
|
||||
initial={{ opacity: 0, y: 40 }}
|
||||
animate={{ opacity: 1, y: 0 }}
|
||||
transition={{ duration: 0.9, delay: 0.45, ease: EASE_OUT }}
|
||||
transition={{ duration: 0.3, delay: 0.45, ease: EASE_OUT }}
|
||||
className="flex flex-wrap gap-6"
|
||||
>
|
||||
<CTAButton href="/contact" dataTestId="solution-detail-hero-primary">
|
||||
|
||||
Reference in New Issue
Block a user