Index: src/assets/js/audio-player.js
===================================================================
--- src/assets/js/audio-player.js	(revision e056e563ec0af5d9a555414ec779ca3dc159043d)
+++ src/assets/js/audio-player.js	(revision 8d43aa10cb5fe28cd9f948d4c43bed2f239153ca)
@@ -982,6 +982,11 @@
   }
 
+  // Maak de verborgen YT-speler vast aan (zonder iets te spelen), zodat 'ie bij de
+  // eerste klik al klaar staat → loadVideoById valt dan binnen de user-gesture en
+  // YouTube's autoplay-policy blokkeert het niet.
+  function prewarmYouTube() { try { ensureYT(); } catch (e) {} }
+
   window.pcmsAudioPlayer = {
-    setQueue, play, pause, next, prev, close, openSheet, closeSheet, playYouTube, playYouTubeList,
+    setQueue, play, pause, next, prev, close, openSheet, closeSheet, playYouTube, playYouTubeList, prewarmYouTube,
     isPlaying: () => isPlaying,
     currentTrack: () => queue[currentIndex] || null,
Index: src/assets/js/embed-player.js
===================================================================
--- src/assets/js/embed-player.js	(revision e056e563ec0af5d9a555414ec779ca3dc159043d)
+++ src/assets/js/embed-player.js	(revision 8d43aa10cb5fe28cd9f948d4c43bed2f239153ca)
@@ -243,4 +243,6 @@
       const art0 = el.querySelector('.pcms-embed-art');
       if (art0) { art0.style.backgroundImage = `url('${ytThumb}')`; art0.classList.add('has-art'); }
+      // Speler vast aanmaken → eerste klik valt binnen de user-gesture (autoplay).
+      if (window.pcmsAudioPlayer && window.pcmsAudioPlayer.prewarmYouTube) window.pcmsAudioPlayer.prewarmYouTube();
       // Haal de echte titel op (server-proxy, want YT-oEmbed heeft geen CORS) en
       // toon 'm i.p.v. "YouTube".
@@ -445,4 +447,6 @@
     countEl.textContent = ids.length + ' track' + (ids.length === 1 ? '' : 's');
     if (coverImg) coverImg.src = thumb(ids[0]);
+    // Speler vast aanmaken → eerste klik valt binnen de user-gesture (autoplay).
+    if (window.pcmsAudioPlayer && window.pcmsAudioPlayer.prewarmYouTube) window.pcmsAudioPlayer.prewarmYouTube();
 
     olEl.innerHTML = ids.map((id, i) =>
