- _normRecorder: add framerate field (recording_framerate || 'native');
remove stale static elapsed calc (was computing at poll time, never ticked)
- RecorderRow: replace frozen useMemo elapsed with a live 1s setInterval
that anchors to liveStatus.duration (authoritative from capture container)
and falls back to wall-clock diff from recorder.started_at so the counter
starts immediately on record and never freezes between 3s status polls
- displayFramerate: shows currentFps (2dp + 'fps') when recorder is live and
currentFps > 0; falls back to configured recording_framerate or 'native'
- Framerate stat block: always visible (was conditional on currentFps != null);
replaced the separate FPS-only block with a unified Framerate stat
- Also fixes latent padStart(2, '00') typo on minutes field in old elapsed calc
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>