Index: src/assets/js/embed-player.js
===================================================================
--- src/assets/js/embed-player.js	(revision 8d43aa10cb5fe28cd9f948d4c43bed2f239153ca)
+++ src/assets/js/embed-player.js	(revision 0d7acdfd541ca8374f3adc7a5f67f2ca00f4f4ef)
@@ -162,10 +162,4 @@
     if (!provider) return;
 
-    // Audio-only YouTube met een afspeellijst (?list=…) → album-kaart met tracklijst.
-    if (provider === 'youtube' && el.dataset.embedMode === 'audio') {
-      const lm = url.match(/[?&]list=([A-Za-z0-9_-]+)/);
-      if (lm) { try { buildYtAlbum(el, lm[1]); } catch (e) { console.error('[pcms-embed] yt-album faalde', e); } return; }
-    }
-
     el.classList.add('pcms-embed-card', 'pcms-embed-card--' + provider);
     el.classList.remove('pcms-embed-loading');
@@ -189,18 +183,8 @@
 
     // --- UI ophangen (verschilt per provider-type) ---
-    // Audio-only YouTube (data-embed-mode="audio"): render als audio-kaart met
-    // onze controls; de YT-speler draait verborgen (off-screen) en levert alleen
-    // het geluid. Video blijft de default.
-    const audioOnly = provider === 'youtube' && el.dataset.embedMode === 'audio';
-    if (audioOnly) el.classList.add('pcms-embed-audio-mode');
-    const isVideo = provider === 'youtube' && !audioOnly;
-    // Audio-only YT speelt via de site-onderbalk → geen eigen in-kaart controlebar.
-    const custom = (provider === 'youtube' || provider === 'soundcloud') && !audioOnly;
+    const isVideo = provider === 'youtube';
+    const custom = provider === 'youtube' || provider === 'soundcloud'; // eigen controls
     const poster = provider === 'youtube'
       ? `https://i.ytimg.com/vi/${ytId(ref, url)}/hqdefault.jpg` : '';
-    // 16:9-thumbnail ZONDER zwarte balken (mqdefault) voor de vierkante cover —
-    // hqdefault is 4:3 met letterbox en vult een vierkant niet schoon.
-    const ytThumb = provider === 'youtube'
-      ? `https://i.ytimg.com/vi/${ytId(ref, url)}/mqdefault.jpg` : '';
 
     el.innerHTML = ''
@@ -238,24 +222,4 @@
     let vol = 100;       // huidige volume 0-100 (wordt op de adapter toegepast)
     let preMuteVol = 100;
-    // Audio-only YouTube: zet de thumbnail als albumhoes op de audio-kaart.
-    let ytTitle = '';  // echte videotitel (via same-origin oEmbed-proxy)
-    if (audioOnly && ytThumb) {
-      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".
-      fetch('/audio/yt-title?url=' + encodeURIComponent(url))
-        .then((r) => (r.ok ? r.json() : null))
-        .then((d) => {
-          if (d && d.title) {
-            ytTitle = d.title;
-            const tt = el.querySelector('.pcms-embed-title');
-            if (tt) tt.textContent = d.title;
-          }
-        })
-        .catch(() => {});
-    }
 
     function setPlayingUI(on) {
@@ -332,11 +296,4 @@
     // Eerste interactie → adapter mounten + spelen. Daarna toggelt de knop.
     async function ensureMountedAndPlay() {
-      // Audio-only YouTube → speel via de site-audiospeler (onderbalk): zichtbaar
-      // én doorspelen bij navigeren. De inline-kaart is enkel de launcher.
-      if (audioOnly && window.pcmsAudioPlayer && typeof window.pcmsAudioPlayer.playYouTube === 'function') {
-        window.pcmsAudioPlayer.playYouTube({ id: ytId(ref, url), title: ytTitle || undefined, cover: ytThumb, postUrl: location.pathname + location.search });
-        el.classList.add('pcms-embed-elsewhere');
-        return;
-      }
       if (mounted) { if (adapter) adapter.play(); return; }
       mounted = true;
@@ -391,95 +348,4 @@
   }
 
-  // Haal de video-IDs van een YouTube-afspeellijst op via een verborgen,
-  // tijdelijke speler (cuePlaylist → getPlaylist). Geen API-key nodig.
-  function ytPlaylistIds(listId) {
-    return ytApi().then((YT) => new Promise((resolve) => {
-      if (!YT || !YT.Player) { resolve([]); return; }
-      const host = document.createElement('div');
-      host.style.cssText = 'position:absolute;left:-99999px;top:0;width:320px;height:180px;opacity:0;pointer-events:none';
-      const mount = document.createElement('div'); host.appendChild(mount); document.body.appendChild(host);
-      let done = false;
-      const finish = (ids) => { if (done) return; done = true; try { p.destroy(); } catch (e) {} try { host.remove(); } catch (e) {} resolve(ids || []); };
-      const p = new YT.Player(mount, {
-        host: 'https://www.youtube-nocookie.com', playerVars: { playsinline: 1 },
-        events: { onReady: () => {
-          try { p.cuePlaylist({ listType: 'playlist', list: listId }); } catch (e) {}
-          setTimeout(() => { let ids = []; try { ids = p.getPlaylist() || []; } catch (e) {} finish(ids); }, 2500);
-        } },
-      });
-      setTimeout(() => finish([]), 9000);
-    }));
-  }
-
-  // Render een audio-only YouTube-AFSPEELLIJST als album-kaart (zelfde stijl als
-  // de eigen albums) met tracklijst; afspelen loopt via de site-audiospeler.
-  async function buildYtAlbum(el, listId) {
-    el.className = 'folio-embed pcms-ytalbum';  // geen losse card-chrome; .post-album stuurt de stijl
-    const thumb = (id) => `https://i.ytimg.com/vi/${id}/mqdefault.jpg`;
-    el.innerHTML = ''
-      + '<div class="post-album">'
-      +   '<div class="post-album-header">'
-      +     '<button type="button" class="post-album-cover-btn" aria-label="Album afspelen">'
-      +       '<img class="post-album-cover-img" src="" alt="">'
-      +       '<span class="post-album-play-overlay" aria-hidden="true"><svg viewBox="0 0 24 24" fill="currentColor"><path d="M8 4l12 8-12 8z"/></svg></span>'
-      +     '</button>'
-      +     '<div class="post-album-info">'
-      +       '<h3 class="post-album-title">Album laden…</h3>'
-      +       '<p class="post-album-artist"></p>'
-      +       '<p class="post-album-count">YouTube</p>'
-      +     '</div>'
-      +   '</div>'
-      +   '<ol class="post-album-tracks"><li class="pcms-ytalbum-msg">Tracks laden…</li></ol>'
-      + '</div>';
-    const coverImg = el.querySelector('.post-album-cover-img');
-    const titleEl = el.querySelector('.post-album-title');
-    const countEl = el.querySelector('.post-album-count');
-    const olEl = el.querySelector('.post-album-tracks');
-    const coverBtn = el.querySelector('.post-album-cover-btn');
-
-    // Albumnaam via de oEmbed-proxy (playlist-url).
-    fetch('/audio/yt-title?url=' + encodeURIComponent('https://www.youtube.com/playlist?list=' + listId))
-      .then((r) => (r.ok ? r.json() : null)).then((d) => { if (d && d.title) titleEl.textContent = d.title; }).catch(() => {});
-
-    let ids = [];
-    try { ids = await ytPlaylistIds(listId); } catch (e) { ids = []; }
-    if (!ids.length) { olEl.innerHTML = '<li class="pcms-ytalbum-msg">Kon de afspeellijst niet laden.</li>'; return; }
-    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) =>
-      `<li class="post-album-track-compact" id="track-${id}" data-yt-id="${id}" data-yt-index="${i}">`
-      + `<button type="button" class="pat-row" aria-label="Speel track ${i + 1}">`
-      +   `<span class="pat-cover" style="background-image:url('${thumb(id)}')" aria-hidden="true"></span>`
-      +   `<span class="pat-meta"><span class="pat-title">Track ${i + 1}</span><span class="pat-artist"></span></span>`
-      +   `<span class="pat-duration pat-duration-empty">—:—</span>`
-      + `</button></li>`
-    ).join('');
-
-    // Tracktitels lazy invullen (oEmbed-proxy per video).
-    ids.forEach((id, i) => {
-      fetch('/audio/yt-title?url=' + encodeURIComponent('https://www.youtube.com/watch?v=' + id))
-        .then((r) => (r.ok ? r.json() : null))
-        .then((d) => { if (d && d.title) { const tt = olEl.querySelector(`[data-yt-index="${i}"] .pat-title`); if (tt) tt.textContent = d.title; } })
-        .catch(() => {});
-    });
-
-    function playAt(i) {
-      if (!(window.pcmsAudioPlayer && window.pcmsAudioPlayer.playYouTubeList)) return;
-      // Expandeer naar losse YT-tracks (betrouwbaarder dan loadPlaylist).
-      const items = ids.map((id, j) => ({
-        yt: id,
-        title: (olEl.querySelector(`[data-yt-index="${j}"] .pat-title`) || {}).textContent || ('Track ' + (j + 1)),
-        cover: thumb(id),
-        postUrl: location.pathname + location.search,
-      }));
-      window.pcmsAudioPlayer.playYouTubeList(items, i);
-    }
-    coverBtn.addEventListener('click', () => playAt(0));
-    olEl.addEventListener('click', (e) => { const li = e.target.closest('[data-yt-index]'); if (li) playAt(parseInt(li.dataset.ytIndex, 10) || 0); });
-  }
-
   // ============================================================
   // 4. Adapters — normaliseren de 3 zeer verschillende API's naar 1 vorm.
@@ -503,9 +369,6 @@
           events: {
             onReady() {
-              let d = 0; const meta = {};
-              try { d = player.getDuration() || 0; } catch (e) {}
-              try { const vd = player.getVideoData(); if (vd && vd.title) meta.title = vd.title; } catch (e) {}
-              meta.duration = d;
-              hooks.onReady(meta);
+              let d = 0; try { d = player.getDuration() || 0; } catch (e) {}
+              hooks.onReady({ duration: d });
               resolve({
                 play() { try { player.playVideo(); } catch (e) {} },
