refactor(motion): 收敛末批 P1 入场时长与变量递增 stagger 步进

动效合规专项(Task #16)收尾。

改动:
- page-transition.tsx:入场 duration 0.4/0.5 → 0.3(末处真 P1,由 client-layout 消费)
- 17 文件 21 处子元素 stagger 步进 80/100ms → 60ms
  (CONTEXT.md 原则4「子元素 stagger 30-60ms」;属已批准决策 04e91e3 的漏网,
   因当时审计脚本看不见 delay: i * N 的乘法写法)
- 审计脚本补盲区:新增变量递增 stagger 识别 + 明细表(此前漏掉全站 33 处)
- 审计脚本新增 NON_ENTRANCE 排除:flip-clock 机械翻转、design-system 死代码令牌
- delay 判据自我纠正:硬禁令约束的是 duration(动效时长),
  delay 属调度而非动效本身,一律判 P2(偏离指引),不得判 P0

门禁(全绿):
- tsc 0 error
- eslint 0 error(50 warnings 均为既有)
- jest 130/130 套件,1573 通过 / 2 跳过 / 0 失败
- 运行时冒烟 16/16 PASS(8 路由 × 浅深双版,0 控制台报错)
- 审计:P0=0 · P1=0 · stagger 步进 P2=0
This commit is contained in:
2026-09-04 08:39:00 +08:00
parent aad714e268
commit 8f4a860180
18 changed files with 92 additions and 27 deletions
+1 -1
View File
@@ -14,7 +14,7 @@ export function CaseStudyCard({ study, index }: CaseStudyCardProps) {
initial={{ opacity: 0, y: 20 }}
whileInView={{ opacity: 1, y: 0 }}
viewport={{ once: true, margin: '-50px' }}
transition={{ duration: 0.3, delay: index * 0.1 }}
transition={{ duration: 0.3, delay: index * 0.06 }}
className="rounded-xl border border-gray-200 bg-white p-6 shadow-sm transition-shadow hover:shadow-md"
>
<div className="mb-3 flex items-center gap-2">
@@ -103,7 +103,7 @@ export function DetailTrustSection({
viewport={{ once: true, margin: '-60px' }}
transition={{
duration: 0.3,
delay: index * 0.08,
delay: index * 0.06,
ease: [0.22, 1, 0.36, 1],
}}
className="bain-card p-8 sm:p-10"
@@ -140,7 +140,7 @@ export function DetailTrustSection({
viewport={{ once: true, margin: '-60px' }}
transition={{
duration: 0.3,
delay: index * 0.08,
delay: index * 0.06,
ease: [0.22, 1, 0.36, 1],
}}
>
+1 -1
View File
@@ -134,7 +134,7 @@ export function ServiceValueSection({ service }: ServiceValueSectionProps) {
whileInView={{ opacity: 1, x: 0 }}
viewport={{ once: true }}
transition={{
delay: index * 0.08,
delay: index * 0.06,
duration: 0.3,
ease: [0.22, 1, 0.36, 1],
}}
+2 -2
View File
@@ -62,7 +62,7 @@ export function SolutionValueSection({ solution }: SolutionValueSectionProps) {
whileInView={{ opacity: 1, y: 0 }}
viewport={{ once: true }}
transition={{
delay: index * 0.08,
delay: index * 0.06,
duration: 0.3,
ease: [0.22, 1, 0.36, 1],
}}
@@ -141,7 +141,7 @@ export function SolutionValueSection({ solution }: SolutionValueSectionProps) {
whileInView={{ opacity: 1, y: 0 }}
viewport={{ once: true }}
transition={{
delay: index * 0.08,
delay: index * 0.06,
duration: 0.3,
ease: [0.22, 1, 0.36, 1],
}}