Index: src/views/pages/news.ejs
===================================================================
--- src/views/pages/news.ejs	(revision 0596945917047f2e8963b16e2ef73366d22a62e4)
+++ src/views/pages/news.ejs	(revision 515cf1a67cad06eb3a51a911df89d992e16275ac)
@@ -101,6 +101,4 @@
           </div>
 
-          <div class="tl-content"><%- p.content %></div>
-
           <%
             var media = []; try { media = JSON.parse(p.media_json || '[]'); } catch (e) { media = []; }
@@ -109,5 +107,11 @@
             var auds = media.filter(function(m){ return m && m.url && m.type && /^audio\//.test(m.type); });
             var _nsfwVisual = !!p.nsfw && (imgs.length || vids.length || auds.length);
+            var _nsfwText = !!p.nsfw && !(imgs.length || vids.length || auds.length);
           %>
+          <% if (_nsfwText) { %>
+            <div class="tl-content nsfw-media"><span class="nsfw-veil"><span class="nsfw-veil-label">🔞 <%= p.cw || t('post.nsfw_warning') %></span><span class="nsfw-veil-btn"><%= t('post.nsfw_show') %></span></span><%- p.content %></div>
+          <% } else { %>
+            <div class="tl-content"><%- p.content %></div>
+          <% } %>
           <% if (_nsfwVisual) { %><div class="nsfw-media"><% } %>
           <% if (imgs.length) { %>
Index: src/views/pages/post.ejs
===================================================================
--- src/views/pages/post.ejs	(revision 0596945917047f2e8963b16e2ef73366d22a62e4)
+++ src/views/pages/post.ejs	(revision 515cf1a67cad06eb3a51a911df89d992e16275ac)
@@ -181,5 +181,5 @@
                       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>
               <% } else { %>
-                <span class="post-related-cover post-related-cover--empty" aria-hidden="true"></span>
+                <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>
               <% } %>
               <span class="post-related-meta">
Index: src/views/partials/post-card.ejs
===================================================================
--- src/views/partials/post-card.ejs	(revision 0596945917047f2e8963b16e2ef73366d22a62e4)
+++ src/views/partials/post-card.ejs	(revision 515cf1a67cad06eb3a51a911df89d992e16275ac)
@@ -43,5 +43,5 @@
 }
 %>
-<li class="post-list-item<%= _hasCover ? ' has-cover' : '' %><%= (_isPinned || _isBoost) ? ' is-pinned' : '' %>">
+<li class="post-list-item<%= (_hasCover || post.nsfw) ? ' has-cover' : '' %><%= (_isPinned || _isBoost) ? ' is-pinned' : '' %>">
 
   <% if (_hasCover) { %>
@@ -51,4 +51,10 @@
       <img src="<%= post.cover_image_url %>" alt="" loading="lazy" decoding="async">
       <% if (post.nsfw) { %><span class="nsfw-veil"><span class="nsfw-veil-label">🔞 <%= post.content_warning || t('post.nsfw_warning') %></span><span class="nsfw-veil-btn"><%= t('post.nsfw_show') %></span></span><% } %>
+    </a>
+  <% } else if (post.nsfw) { %>
+    <a class="post-list-cover nsfw-media" href="<%= _href %>"
+       <% 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"<% } %>
+       aria-label="<%= post.title || '(zonder titel)' %>" tabindex="-1">
+      <span class="nsfw-veil"><span class="nsfw-veil-label">🔞 <%= post.content_warning || t('post.nsfw_warning') %></span><span class="nsfw-veil-btn"><%= t('post.nsfw_show') %></span></span>
     </a>
   <% } %>
