Index: src/assets/css/style.css
===================================================================
--- src/assets/css/style.css	(revision 600fbf32d8b88504151b06778e4a9069d2025672)
+++ src/assets/css/style.css	(revision 3038fc98d6a4082a8669142765a148803ad4a4ba)
@@ -1932,4 +1932,8 @@
     overflow: hidden;
     border-radius: var(--radius);
+    /* Accent-gradient placeholder while the cover image loads (image fades in over it). */
+    background-image: linear-gradient(135deg,
+        color-mix(in srgb, var(--accent, #888) 22%, var(--paper-2, var(--paper))) 0%,
+        color-mix(in srgb, var(--accent, #888) 6%, var(--paper-2, var(--paper))) 100%);
 }
 .post-list-cover img {
@@ -1937,6 +1941,9 @@
     object-fit: cover;
     display: block;
-    filter: blur(.4px); /* subtle smoothing of downscaled line-art covers */
-}
+    background-color: #fff;            /* transparent logos sit on white once loaded */
+    filter: blur(.4px);               /* subtle smoothing of downscaled line-art covers */
+    transition: opacity .4s ease;
+}
+.post-list-cover img.is-loading { opacity: 0; }
 .post-list-body { display: flex; flex-direction: column; gap: .35rem; }
 .post-list-meta {
Index: src/views/shell.ejs
===================================================================
--- src/views/shell.ejs	(revision 600fbf32d8b88504151b06778e4a9069d2025672)
+++ src/views/shell.ejs	(revision 3038fc98d6a4082a8669142765a148803ad4a4ba)
@@ -200,5 +200,5 @@
 
 <!-- v9 stylesheet (full palette system) -->
-<link rel="stylesheet" href="/assets/css/style.css?v=61">
+<link rel="stylesheet" href="/assets/css/style.css?v=62">
 <script>
 /* iOS safe-area, built by hand. env(safe-area-inset-top) resolves to 0 on this iOS in
