diff --git a/server/player/index.html b/server/player/index.html
index a56399b..64b00ee 100644
--- a/server/player/index.html
+++ b/server/player/index.html
@@ -995,7 +995,13 @@
}, 2000);
// ==================== Fullscreen ====================
- document.addEventListener('click', () => {
+ // Only attempt fullscreen on genuine user clicks. Synthetic clicks dispatched
+ // by the remote-control feature (touch forwarding from the dashboard) are not
+ // trusted by the browser and requestFullscreen() rejects with a "Permissions
+ // check failed" / "API can only be initiated by a user gesture" error every
+ // time, spamming the console.
+ document.addEventListener('click', (e) => {
+ if (!e.isTrusted) return;
if (!document.fullscreenElement && config.paired) {
document.documentElement.requestFullscreen?.() ||
document.documentElement.webkitRequestFullscreen?.();
diff --git a/server/player/sw.js b/server/player/sw.js
index 1ba0022..8f841b7 100644
--- a/server/player/sw.js
+++ b/server/player/sw.js
@@ -1,4 +1,4 @@
-const CACHE_NAME = 'rd-player-v7';
+const CACHE_NAME = 'rd-player-v8';
// Install: skip waiting to activate immediately
self.addEventListener('install', (event) => {