fix: align segment type strings with frontend and coordinate page-load fetches master
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.