Implement approved TV loading and bounded motion
All checks were successful
review/code-claude Code review passed on 16684454, no blocking finding
review/design-claude Design review pass: motion numbers equal direction A; 6 non-blocking notes

This commit is contained in:
justinzeus 2026-11-07 00:57:13 +01:00
parent fd48426fa7
commit 1668445418
86 changed files with 2026 additions and 121 deletions

View file

@ -1390,19 +1390,28 @@
}
},
"motion": {
"fast": {
"$type": "duration",
"$value": "140ms",
"easing": "ease = cubic-bezier(.25,.1,.25,1)",
"source": "index.html:125",
"page": {
".card/.btn/.chip/.pp/.prow/.crow/.srow/.pgear transform": "140ms",
".cap opacity (caption fade-in)": "120ms",
".dots svg opacity": "140ms"
},
"usedBy": "focus scale + ring in and out on every focusable; caption fade under a focused poster (page 120 ms folds in)",
"note": "q1, settled by Justin 2026-11-05 (corr=c248698d8546e1ab): the caption fade is 140 ms. Three durations in total (140, 160, 180) plus the blob spring."
},
"skeletonCycle": { "$type": "duration", "$value": "1400ms" },
"skeletonLowAlpha": { "$type": "number", "$value": 0.55 },
"focusMove": { "$type": "duration", "$value": "180ms" },
"captionDelay": { "$type": "duration", "$value": "60ms" },
"captionOut": { "$type": "duration", "$value": "100ms" },
"artReveal": { "$type": "duration", "$value": "160ms" },
"heroFade": { "$type": "duration", "$value": "320ms" },
"heroCopyOut": { "$type": "duration", "$value": "120ms" },
"heroCopyDelay": { "$type": "duration", "$value": "140ms" },
"heroCopyIn": { "$type": "duration", "$value": "200ms" },
"rowEnter": { "$type": "duration", "$value": "180ms" },
"lateLineFade": { "$type": "duration", "$value": "200ms" },
"copyEntryRise": { "$type": "dimension", "$value": "16px", "px": 16, "dp": 8 },
"reducedFade": { "$type": "duration", "$value": "80ms" },
"rowRise": { "$type": "dimension", "$value": "24px", "px": 24, "dp": 12 },
"captionRise": { "$type": "dimension", "$value": "10px", "px": 10, "dp": 5 },
"copyRise": { "$type": "dimension", "$value": "14px", "px": 14, "dp": 7 },
"readinessSlot": { "$type": "dimension", "$value": "56px", "px": 56, "dp": 28 },
"ease": { "$type": "cubicBezier", "$value": [0.25, 0.1, 0.25, 1] },
"easeOut": { "$type": "cubicBezier", "$value": [0.33, 1, 0.68, 1] },
"easeInOut": { "$type": "cubicBezier", "$value": [0.65, 0, 0.35, 1] },
"breatheEase": { "$type": "cubicBezier", "$value": [0.42, 0, 0.58, 1] },
"base": {
"$type": "duration",
"$value": "160ms",
@ -1475,9 +1484,9 @@
},
"reducedMotion": {
"$type": "rule",
"$value": "all transitions instant",
"source": "index.html:330",
"usedBy": "when Settings.Global ANIMATOR_DURATION_SCALE == 0: no scale animation, no scroll animation, blob snaps"
"$value": "no pulse or movement; fades at most 80ms",
"source": "tv-motion-speed direction A",
"usedBy": "system animator scale zero or Wolfskin reduced-motion flag"
}
},
"image": {
@ -1536,11 +1545,6 @@
"source": "index.html:550",
"usedBy": "cast portraits: decode min(source 185x278, slot)"
},
"crossfade": {
"$value": false,
"source": "index.html:536; answers p3",
"usedBy": "no crossfade on cards (Coil crossfade off)"
},
"memoryCacheMB": {
"$value": 64,
"source": "index.html:552; answers p3",