0db80c66b8
Phase 2 of the Clubhouse/nests integration: when the live-activity channel screen is opened on a kind 30312 MeetingSpaceEvent, render an audio-room "stage" above the chat that shows host/speaker/audience avatars and exposes hand-raise + mute toggles backed by NIP-53 kind 10312 presence events. Quartz: - New MutedTag (`["muted","1"|"0"]`) and `muted()` builder helper for MeetingRoomPresenceEvent. - New MeetingRoomPresenceEvent.build() overload that accepts a 30312 MeetingSpaceEvent root (matching the existing 30313 overload) and optionally encodes hand-raise + mute flags in one call. Amethyst: - AudioRoomStage composable: filters participants from the 30312 event into hosts / speakers / audience, renders avatars, and publishes presence on enter + every 30 s while composed (on dispose it pushes one final lowered-hand presence so peers drop us before timeout). - ChannelView wires AudioRoomStage in next to ShowVideoStreaming; the latter is a no-op for non-30311 events so non-audio rooms are unaffected. No audio is captured yet — the mic toggle is a Nostr-only signal until Phase 3 brings the MoQ/WebTransport transport. https://claude.ai/code/session_013nVLALALKaHVgHm9u5Cg8D