// Global store: manifest, playhead (t_global), playing, rate, selected camera, audio source, // plus the loaded poses / anchors / events and per-video live playback status. Single source // of truth: the transport writes `tGlobal` every animation frame; every module reads it. // Discrete changes (play/pause/seek/selection) go through the tiny pub/sub below. // API origin/prefix. Local dev talks to the uvicorn server cross-origin on :8000 (default). // A hosted build sets VITE_API_BASE to a same-origin path prefix (e.g. "/festifun") so every // request — fetch,