diff --git a/server/player/index.html b/server/player/index.html
index 11c5815..d27b8cd 100644
--- a/server/player/index.html
+++ b/server/player/index.html
@@ -329,6 +329,9 @@
// playback muted).
let userHasInteracted = false;
let advanceTimer = null;
+ // Per-zone rotation timers (multi-zone). Each zone advances independently on
+ // its own interval, decoupled from the fullscreen advanceTimer/nextItem.
+ let zoneTimers = {};
// Video wall state. wallConfig is the tile assignment from the server
// (null when this device isn't in a wall). The leader runs the playlist
// normally and broadcasts wall:sync every second; followers don't run
@@ -1297,8 +1300,14 @@
// releases the decoder and kills audio. Null event handlers so a late onended
// can't fire into a stale playlist state. Queries all