diff --git a/server/player/index.html b/server/player/index.html
index 5cec7dd..9f0cc6b 100644
--- a/server/player/index.html
+++ b/server/player/index.html
@@ -494,6 +494,12 @@
let lastWallSync = null;
let currentVideoEl = null;
let currentItemStartedAt = 0;
+ // Bumped on every renderContent dispatch; a buffered (async warm-play) render captures it at start
+ // and bails if it changes. MUST be declared here with the other top-level state — the cold-start
+ // cached-playlist restore calls renderContent (→ renderSeq++) during initial script execution, which
+ // is long before line ~2400 where the buffered-video code lives. A `let` down there left renderSeq in
+ // the temporal dead zone on that early path → "can't access 'renderSeq' before initialization".
+ let renderSeq = 0;
// Followers in a video wall must stay silent — N copies of the same audio
// slightly out of sync produce a flanged echo across the wall. Only the
// leader is allowed to make sound. This helper is the single source of
@@ -2405,10 +2411,10 @@
// frame as the wipe's `to`, run the GL wipe, then mount + resume the real