diff --git a/web/zebra-spaces.html b/web/zebra-spaces.html
index a3fb8b2..504efd3 100644
--- a/web/zebra-spaces.html
+++ b/web/zebra-spaces.html
@@ -209,10 +209,34 @@
* sinks for the WebRTC track, no UI required */
audio { display: none; }
- /* screen-share tiles render in the LEFT (timeline) column at full width.
- * When sec-screens is shown the game tabs + iframe are hidden so the
- * screen owns the column. */
- #screens { display: grid; grid-template-columns: 1fr; gap: 0.75rem; }
+ /* spotlight: the active tile (camera OR screen) renders full-width
+ * in the middle column. All other tiles render as thumbnails inside
+ * the cameras-col. Clicking a thumbnail promotes it to the spotlight
+ * and demotes the current one back to the column. */
+ #spotlight { display: grid; grid-template-columns: 1fr; gap: 0; }
+ #screens-thumbs { display: grid; grid-template-columns: 1fr; gap: 0.45rem; margin-top: 0.5rem; }
+ .screens-thumbs-h2 { margin-top: 0.5rem; }
+ .screens-thumbs-h2.hidden { display: none; }
+ /* a thumbnail tile is the same DOM as a spotlight tile but with a
+ * thumb modifier class; clicking it triggers a spotlight swap */
+ .tile-thumb { cursor: pointer; }
+ .tile-thumb:hover { outline: 1px solid #888; }
+ /* spotlight sizing — a camera in the spotlight uses contain so the
+ * whole frame is visible (not cropped like the thumb cover) */
+ #spotlight > .camera-tile video {
+ aspect-ratio: 16 / 9;
+ object-fit: contain;
+ max-height: 92vh;
+ }
+ /* thumb sizing for either kind: small, cropped 16:9 */
+ .tile-thumb > video {
+ width: 100%; height: auto;
+ aspect-ratio: 16 / 9; object-fit: cover;
+ max-height: 22vh;
+ }
+ .tile-thumb > .screen-meta {
+ font-size: 0.6rem; padding: 0.15rem 0.3rem;
+ }
/* tile chrome (border + bg + meta) defaults to light-theme palette so
* the screen-share blends with a white page. Dark-theme overrides
* further down restore the black tile chrome for the night palette. */
@@ -239,9 +263,9 @@
font-family: monospace; font-size: 1rem; user-select: none;
}
.screen-tile.needs-tap .tap-play { display: grid; }
- /* sec-screens visible → push everything else in the timeline column down or hide */
- .timeline:has(> #sec-screens:not(.hidden)) > .game-tabs,
- .timeline:has(> #sec-screens:not(.hidden)) > #game-frame { display: none; }
+ /* spotlight active → hide the game iframe so the spotlight tile owns the column */
+ .timeline:has(> #sec-spotlight:not(.hidden)) > .game-tabs,
+ .timeline:has(> #sec-spotlight:not(.hidden)) > #game-frame { display: none; }
/* camera tiles live in the LEFT column now — single column, stacked
* vertically. Each tile keeps a 16:9 letterbox so faces don't squash. */
@@ -463,15 +487,16 @@ try {
-
-