Index: src/assets/css/style.css
===================================================================
--- src/assets/css/style.css	(revision 73cffc30d25c5479bab9b91cc9ff40f0c028eb73)
+++ src/assets/css/style.css	(revision 2eca08338db9aa5243d74819007e9f383e619562)
@@ -2381,4 +2381,7 @@
 .post-list-cover img,
 .grid-tile:not(.grid-tile-gradient) { background-color: #fff; }
+/* Cover as a real <img> (not background-image): browsers downsample <img> with the
+   high-quality image pipeline, so high-res line-art covers don't go jagged when shrunk. */
+.grid-tile-img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; object-position: center; display: block; }
 .grid-tile:hover { transform: scale(0.98); }
 .grid-tile-overlay {
Index: src/views/pages/post.ejs
===================================================================
--- src/views/pages/post.ejs	(revision 73cffc30d25c5479bab9b91cc9ff40f0c028eb73)
+++ src/views/pages/post.ejs	(revision 2eca08338db9aa5243d74819007e9f383e619562)
@@ -177,7 +177,5 @@
                hx-push-url="/<%= rp.slug %>" hx-indicator="#pcms-loading"<% } %>>
               <% if (rp.cover_image_url) { %>
-                <span class="post-related-cover<%= rp.nsfw ? ' nsfw-media' : '' %>"
-                      style="background-image: url('<%= rp.cover_image_url %>')"
-                      aria-hidden="true"><% if (rp.nsfw) { %><span class="nsfw-veil"><span class="nsfw-veil-label">🔞 <%= rp.content_warning || t('post.nsfw_warning') %></span><span class="nsfw-veil-btn"><%= t('post.nsfw_show') %></span></span><% } %></span>
+                <span class="post-related-cover<%= rp.nsfw ? ' nsfw-media' : '' %>" aria-hidden="true"><img class="post-related-img" src="<%= rp.cover_image_url %>" alt="" loading="lazy" decoding="async"><% if (rp.nsfw) { %><span class="nsfw-veil"><span class="nsfw-veil-label">🔞 <%= rp.content_warning || t('post.nsfw_warning') %></span><span class="nsfw-veil-btn"><%= t('post.nsfw_show') %></span></span><% } %></span>
               <% } else { %>
                 <span class="post-related-cover post-related-cover--empty<%= rp.nsfw ? ' nsfw-media' : '' %>" aria-hidden="true"><% if (rp.nsfw) { %><span class="nsfw-veil"><span class="nsfw-veil-label">🔞 <%= rp.content_warning || t('post.nsfw_warning') %></span><span class="nsfw-veil-btn"><%= t('post.nsfw_show') %></span></span><% } %></span>
@@ -450,7 +448,10 @@
 .post-related-cover {
   display: block;
+  position: relative;
+  overflow: hidden;
   aspect-ratio: 16 / 10;
   background: var(--paper-2) center/cover no-repeat;
 }
+.post-related-img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; display: block; }
 .post-related-cover--empty {
   background-image: linear-gradient(135deg,
Index: src/views/partials/post-tile.ejs
===================================================================
--- src/views/partials/post-tile.ejs	(revision 73cffc30d25c5479bab9b91cc9ff40f0c028eb73)
+++ src/views/partials/post-tile.ejs	(revision 2eca08338db9aa5243d74819007e9f383e619562)
@@ -16,6 +16,8 @@
 <a class="grid-tile<%= _hasCover ? '' : ' grid-tile-gradient' %><%= (_isPinned || _isBoost) ? ' is-pinned' : '' %><%= post.nsfw ? ' nsfw-media' : '' %>"
    href="<%= _href %>"
-   <% if (_hasCover) { %>style="background-image: url('<%= post.cover_image_url %>'); --tile-hue: <%= _tileHue %>;"<% } else { %>style="--tile-hue: <%= _tileHue %>;"<% } %>
+   style="--tile-hue: <%= _tileHue %>;"
    <% if (_ext) { %>target="_blank" rel="noopener"<% } else { %>hx-get="<%= _href %>?partial=1" hx-target="#pcms-main" hx-swap="innerHTML" hx-push-url="<%= _href %>" hx-indicator="#pcms-loading"<% } %>>
+
+  <% if (_hasCover) { %><img class="grid-tile-img" src="<%= post.cover_image_url %>" alt="" loading="lazy" decoding="async"><% } %>
 
   <% if (_typeLabel) { %>
Index: src/views/shell.ejs
===================================================================
--- src/views/shell.ejs	(revision 73cffc30d25c5479bab9b91cc9ff40f0c028eb73)
+++ src/views/shell.ejs	(revision 2eca08338db9aa5243d74819007e9f383e619562)
@@ -198,5 +198,5 @@
 
 <!-- v9 stylesheet (full palette system) -->
-<link rel="stylesheet" href="/assets/css/style.css?v=57">
+<link rel="stylesheet" href="/assets/css/style.css?v=58">
 <script>
 /* iOS safe-area, built by hand. env(safe-area-inset-top) resolves to 0 on this iOS in
