When a trick completes, the four cards collect to the winning seat and the winner flashes. These are static frames of the real timeline — the canonical PLAY_TRICK_STEPS schedule from core/ui/animationTimeline, with collect progress read straight from its trickCollect keyframe via sampleAt. The trick itself is a real completed engine trick (real cards, the engine's resolved winner), not a fixture. Self-contained, proof-only.
The trick collects to the winner — Thuru 304 (8 cards)
P
Player P1
P
Player P2
P
Player P3
P
9
D
★
Player P4
P
Player P1
P
Player P2
P
Player P3
P
9
D
★
Player P4
P
Player P1
P
Player P2
P
Player P3
P
9
D
★
Player P4
Deck-agnostic — Hokm 52 (13 cards), mid-collect
P
D
Player P1
P
9
★
Player P2
P
Player P3
P
Player P4
The schedule — core/ui animationTimeline · PLAY_TRICK_STEPS
| keyframe | transition | start ms | end ms | dur | kind |
|---|---|---|---|---|---|
| play seat 1 | playCard | 0 | 250 | 250 | decorative |
| play seat 2 | playCard | 250 | 500 | 250 | decorative |
| play seat 3 | playCard | 500 | 750 | 250 | decorative |
| play seat 4 | playCard | 750 | 1000 | 250 | decorative |
| collect to winner | trickCollect | 1000 | 1540 | 540 | decorative |
| read the trick | trickClearPause | 1540 | 4540 | 3000 | info |
| total | 4540 ms | ||||