1. Audio/Video sync: During playback, let the browser handle media naturally
and only force-seek when drift > 250ms. Prevents audio glitching caused
by setting currentTime 30x/sec. When paused/scrubbing, sync precisely.
2. Blob URLs → Server uploads: All media uploads (BrandTabMedia, SceneFieldEditor,
TemplateFieldInput) now POST to /api/upload and use persistent server URLs
instead of blob: URLs that vanish on refresh.
3. Dynamic duration: Added useVideoDurations hook that probes actual video
durations from uploaded form videos. getTemplateDuration and
compileExpressToTimeline now accept videoDurations to override static
durationSeconds for form-sourced scenes.