diff --git a/resources/views/components/partials/card-styles.blade.php b/resources/views/components/partials/card-styles.blade.php
new file mode 100644
index 0000000..50f64f0
--- /dev/null
+++ b/resources/views/components/partials/card-styles.blade.php
@@ -0,0 +1,669 @@
+{{-- Shared card styles (video-card + playlist-card). Extracted so the CSS
+ loads on pages that render playlist cards but no video cards, e.g.
+ /videos?filter=playlists. Wrapped in @once so it emits only once. --}}
+@once
+
+@endonce
diff --git a/resources/views/components/playlist-card.blade.php b/resources/views/components/playlist-card.blade.php
index c173dd8..a590be9 100644
--- a/resources/views/components/playlist-card.blade.php
+++ b/resources/views/components/playlist-card.blade.php
@@ -10,6 +10,11 @@
$plShuffleUrl = $firstVid ? route('playlists.shuffle', $pl->id) : null;
@endphp
+{{-- Playlist cards reuse .yt-video-card / .yt-video-thumb / .yt-video-info. That
+ CSS lives in this shared partial (also used by video-card) so it loads on
+ pages that show playlists but no videos, e.g. /videos?filter=playlists. --}}
+@include('components.partials.card-styles')
+
@once
-@endonce
+@include('components.partials.card-styles')
@once