| Scene | Duration | Visual | Text/Subtitle | Audio cue (WebAudio tone) |
|---|---|---|---|---|
| 1 | 8s | Truck arrives at dock, cold mist rolls out | "Chilled goods live between 2 and 8 degrees." | soft start chime |
| 2 | 12s | Gate 1 card slides in: thermometer icon over paperwork | "Gate 1 — Check the logger before you touch the load." | click |
| 3 | 12s | Logger screen shows 3.5 °C → green tick | "In range? Continue." | positive blip |
| 4 | 14s | Gate 2: probe into box core; needle animation to 6.2 °C | "Gate 2 — Probe the core. Surface lies." | probe beep |
| 5 | 16s | Split panel: 7.9 °C accept / 9.4 °C reject with two paths lighting up | "Above 8 at the core? That's a reject decision — not a guess." | alert tone |
| 6 | 14s | Clock overlay on dock timer counting toward 30 min; pallet sliding to chill door | "Gate 3 — The clock owns you at the dock. Park it back in the chill while you escalate." | ticking |
| 7 | 10s | Gate 4: clipboard stamp ACCEPT / REJECT with doc icon | "Gate 4 — Whatever you decide, write it down. Paper protects the next shift." | stamp thunk |
| 8 | 4s | All four gates in a row, done state | "Four gates. Ninety seconds. Every pallet." | resolve chord |
Controls: play/pause, replay, caption-language toggle (EN; NL captions are a draft pending native-speaker review), sound on/off, scene dots, arrow keys. Captions are on-screen text in a polite live region, not WebVTT; there is no voiceover. Under reduced motion each scene shows its full content at once. Total runtime ~90 s.
Intro screen (30 s): client-fiction framing + objective + progress indicator.
Section 1 — Why chilled differs (90 s)
Section 2 — The four gates (3 min) — one gate per interactive card:
Section 3 — Borderline calls (2 min): three decision incidents with branching consequences:
Section 4 — Certification (2.5 min): 7 items randomized from an 8-item bank, ≥85% pass, item-level remediation links, completion screen with printable result placeholder (SCORM/xAPI mapping documented separately).
Same scenario, timing and scoring as the 2D dock run (dock-data.js). The learner works at a receiver's eye height (1.7 m) on a wet winter evening; every frame below is a render from the shipped build (receiving.js, cc-world.js, cc-pallets.js, work/_shared/3d-fx.js), captured with node tools/qa/scene_frames.mjs cold-chain.
Design rules. The core is unknown until probed; the IR gun reads and labels only the surface. Each pallet's dock time lives on a tag on the pallet, not in a floating bar. The driver stays in the cab (lit, engine idling) and speaks over the intercom. Light follows the place: cold LED inside, sodium in the yard, a cyan cast from the chill bay; no bloom, no lens effects. Every reading is also in the panel.













Interaction map. Pick a pallet (click it or use the panel) → the camera walks to it. IR scan (1 min) → gun in hand, surface reading. Core probe (4 min) → three close inserts: door-side corner, centre from the top, rear face. To chill bay (2 min) → a short cut to fetch the truck, then you pull the pallet through the curtain (the strips part) to a free slot. Disposition (2 min) → the pallet goes on the truck to the accept lane or quarantine; a split restacks the 14 door-side crates on skid R1 (a cut, because restacking takes minutes). Sign → the trailer leaves. Under reduced motion every move is a cut.
Animated HTML replaces the 90-second video: zero filming dependency, immediately embeddable in the Rise-free portfolio page, demonstrates front-end craft + motion timing — equivalent evidence of media production ability for Marel/Exact/Lirin.
Prefer the source? Download the raw markdown.