zebra-report/web
Russell Ballestrini df4668f14d
zebra-spaces: kind=game share — separate SFU publisher slot + Region Capture crop
Fix two complaints from fox:
1. share-gameplay used to grab the only sfuScreenPC slot, so a normal
   screen-share would be torn down. Now uses dedicated sfuGamePC /
   sfuGamePeerID / sfuGameStream so the two coexist freely.
2. The browser picker exposes whole tabs, not iframes. We now call
   CropTarget.fromElement(iframe) → videoTrack.cropTo(cropTarget)
   (Chromium Region Capture API) which restricts the captured frame
   to the iframe's rect — audience sees only the gameplay, none of
   the surrounding meeting UI. Firefox + Safari lack CropTarget so
   they fall back to whole-tab capture; user-controlled.

Paired with SFU 855f798 which adds 'game' to the kind allowlist.
streamID format: <16hex>-game (parallel to -screen / -camera).

Client wiring:
- new gameStreams / gameVideos Maps and TILE_KINDS.gameshare
- ontrack: kind === 'game' → renderVideoTile('gameshare', ...) with
  label prefix 'gameplay'. Listeners' screens-thumbs column gets the
  tile alongside any regular screen-shares from the same speaker.
- sfuPublishGame(iframe) / sfuUnpublishGame() mirror the screen helpers
- game-tile's 'share gameplay' button toggles sfuPublishGame ↔
  sfuUnpublishGame (not sfuPublishScreen — that's now untouched)
- leave / role-demotion / boot all clean up game-share too
2026-06-02 12:25:55 -04:00
..
blog phase 1: unfirehose reconstruction from session JSONL ingest 2026-05-27 13:51:14 -04:00
fonts phase 2: gap analysis — cat>> append + binary asset recovery 2026-05-27 13:54:19 -04:00
chat.html css: .row uses minmax(0, max-content) so long labels shrink + wrap 2026-06-02 09:27:55 -04:00
host-your-own.html zebra: dark mode default on all pages + unified theme key 2026-06-01 22:18:02 -04:00
how-it-works.html zebra: dark mode default on all pages + unified theme key 2026-06-01 22:18:02 -04:00
index.html web: bump mobile body padding from 1rem to 1.25rem so the right edge has visible breathing room 2026-05-31 14:13:25 -04:00
kernel.html web: bump mobile body padding from 1rem to 1.25rem so the right edge has visible breathing room 2026-05-31 14:13:25 -04:00
stamp.js web: stamp each zebra-report page with build date + md5/sha256 2026-05-28 17:50:12 -04:00
zebra-audio.html css: .row uses minmax(0, max-content) so long labels shrink + wrap 2026-06-02 09:27:55 -04:00
zebra-spaces.html zebra-spaces: kind=game share — separate SFU publisher slot + Region Capture crop 2026-06-02 12:25:55 -04:00