ed89e2d542
Audit-driven UI fixes that don't fit the perf bucket: * NestActionBar — wire StopBroadcastButton between MicMuteToggle and LeaveStageButton while broadcasting. The doc table at the top of the file already advertised [Mute] [Stop] [Leave the Stage] but the button was defined and never used; speakers had to leave the stage to stop sending audio. * NestActivityContent — render an explicit loading spinner while the kind-30312 resolves and a clear "this room can't be opened" page with a Back button when the event is missing service/endpoint. Replaces the previous black-screen dead end. * HandRaiseQueueSection — wrap filter+sort in remember so a heartbeat doesn't rebuild the queue on every recompose, swap to LazyColumn so a long queue doesn't render every row every frame, and show UsernameDisplay instead of the raw 8-char hex prefix. * CreateNestSheet schedule picker — compute the timezone offset at the picked instant rather than at Instant.now(); the previous variant was off by one hour for rooms scheduled across a DST transition. * NestViewModelFactory — pass OkHttpNestsClient's httpClient via named parameter so the (String) -> OkHttpClient function reference doesn't get bound to the Long callTimeoutMs slot. Fixes the pre-existing :amethyst:compilePlayDebugKotlin failure on the branch base. Adds three strings (loading, unjoinable title/body, back). https://claude.ai/code/session_01DMeCvWyBYVVVPez2hwqCs4