New visitors (no nickname in localStorage) get a blocking welcome
modal instead of a silently-generated guest-N name, so everyone in a
room has a name they actually chose. It doubles as quick-start help
(join a channel, mic/deafen/share shortcuts, drag-to-reposition on the
spatial map) reachable any time via the new ? button. The sidebar nick
field no longer falls back to a random name when cleared — it now
just rejects the blank edit.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
The custom pointer-capture + frozen-camera drag math was fragile and
felt worse than before. Konva handles the drag gesture itself; the
"me" node's screen position stays pinned to the stage center via
dragBoundFunc + a worldLayer offset that recenters on every dragmove,
so the world pans under the avatar instead of the avatar drifting off
center. Grid, peers, and the audible-range circle all live in the same
world-space layer so they pan together.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- Mic button now swaps glyph (mic vs muted) and syncs immediately on
join/leave/load instead of relying on a subtle CSS underline.
- Spatial minimap camera now follows the local user, matching how the
audio panning is already centered on them, instead of plotting
absolute room coordinates stretched across whatever width the
screen happens to be.
- Screen-share tiles now show a speaking glow and muted badge, kept in
sync on the existing audio-meter tick without tearing down <video>
elements.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>