fix: align segment type strings with frontend and coordinate page-load fetches
cluster_segments() returned "transcripts"/"percepts" in the types list while
the frontend pill logic checks for "audio"/"screen", causing all zoom pills
to render as yellow/screen. Changed to "audio"/"screen" to match the frontend
and the ranges API convention.
The two page-load fetches (ranges + segments) were independent, so the
segments callback could run before timeline bounds were set, filtering
against default 9-10 AM range and showing "No segments in selected range".
Replaced with Promise.all so all initialization happens after both resolve.
Added error handling (.catch) with visible error state for fetch failures.
Updated test assertions and API baseline fixture.