- handshake.rs: add 10s timeout on recv_signal() waiting for CallAnswer — previously hung forever if relay didn't respond, making join button disappear with no feedback - main.ts: keep join button visible + show "Connecting…" state instead of hiding it before the await; button restores correctly on error Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>