// Festival 4D viewer — composition root (spec M4/M5/M6 + timeline markers). // // Boots by loading the frozen synthetic API (manifest, poses, anchors, events), builds the // video grid + 3D scene + timeline, wires transport controls + keyboard shortcuts, and runs a // single master animation loop that: advances the master clock & corrects every video // (transport), redraws each overlay for its displayed frame, updates the 3D frusta / follow-cam, // moves the timeline playhead, and refreshes the dev sync overlay. The master clock lives in // transport.js and is derived from performance.now() — never from a