Index: src/assets/css/style.css
===================================================================
--- src/assets/css/style.css	(revision 359b9aebc7b195f6f9d768920c5df8d88a479d15)
+++ src/assets/css/style.css	(revision 1720482bc8e10937812eea5cdd213db0cc85a347)
@@ -2824,4 +2824,11 @@
 .post-album-track-compact.pat-flash {
     animation: patFlash 1.6s ease-out;
+    border-radius: 8px;
+}
+/* Blijvende highlight op de track die NU actief is in de speler. */
+.post-audio-track.pat-playing,
+.post-album-track-compact.pat-playing {
+    background: color-mix(in srgb, var(--accent, #c2410c) 12%, var(--paper-2, transparent));
+    box-shadow: inset 3px 0 0 0 var(--accent, #c2410c);
     border-radius: 8px;
 }
Index: src/assets/js/audio-player.js
===================================================================
--- src/assets/js/audio-player.js	(revision 359b9aebc7b195f6f9d768920c5df8d88a479d15)
+++ src/assets/js/audio-player.js	(revision 1720482bc8e10937812eea5cdd213db0cc85a347)
@@ -276,4 +276,17 @@
   // Used by the site pre-seed so opening a page doesn't auto-download audio;
   // the blob is fetched lazily on the first play().
+  // Markeer de huidige track persistent (blijvende highlight zolang 'ie actief is).
+  function markPlaying(trackId) {
+    document.querySelectorAll('.pat-playing').forEach((e) => e.classList.remove('pat-playing'));
+    if (!trackId) return;
+    const el = document.getElementById('track-' + trackId);
+    if (el) el.classList.add('pat-playing');
+  }
+  // Na een htmx-navigatie is de post-DOM vervangen → highlight opnieuw zetten.
+  document.body.addEventListener('htmx:afterSettle', () => {
+    const t = queue[currentIndex];
+    if (t) markPlaying(t.id);
+  });
+
   function loadTrack(index, autoplay, metaOnly) {
     if (!queue[index]) {
@@ -300,4 +313,5 @@
     document.body.classList.add('has-audio-player');
     renderQueue();
+    markPlaying(t.id);
 
     if (metaOnly) return;
