Index: src/assets/css/style.css
===================================================================
--- src/assets/css/style.css	(revision 0a7ba905c05d6c28831160e9023b8c6d66787f6e)
+++ src/assets/css/style.css	(revision a78e0510b83d6c7816b9e170d532097356374f6f)
@@ -2396,16 +2396,18 @@
 }
 /* Bron-site (cirkel-feed): toont bij hover "van <site>" onder de titel. */
+/* Source label: small text that wraps to 2 lines if needed, with a big chain icon
+   beside it (the text was 1.44rem — bigger than the title — and overflowed on mobile). */
 .grid-tile-overlay-src {
     color: #fff; opacity: .85;
-    font-size: 1.44rem; margin-top: .2rem;
-    display: inline-flex; align-items: center;
-}
-.grid-tile-overlay-src::before { content: "⛓"; margin-right: .25rem; font-size: .9em; }
+    font-size: .72rem; line-height: 1.2; margin-top: .25rem;
+    display: flex; align-items: center; gap: .3rem; width: 100%;
+}
+.grid-tile-overlay-src::before { content: "⛓"; font-size: 1.3rem; line-height: 1; flex: 0 0 auto; }
 .grid-tile-gradient-src {
-    margin-top: .35rem; font-size: 1.44rem; opacity: .85;
+    margin-top: .35rem; font-size: .72rem; line-height: 1.2; opacity: .85;
     color: var(--ink-soft);
-    display: inline-flex; align-items: center;
-}
-.grid-tile-gradient-src::before { content: "⛓"; margin-right: .25rem; font-size: .9em; }
+    display: flex; align-items: center; gap: .3rem; width: 100%;
+}
+.grid-tile-gradient-src::before { content: "⛓"; font-size: 1.3rem; line-height: 1; flex: 0 0 auto; }
 .grid-tile-overlay strong {
     color: #fff;
Index: src/views/partials/profile-header.ejs
===================================================================
--- src/views/partials/profile-header.ejs	(revision 0a7ba905c05d6c28831160e9023b8c6d66787f6e)
+++ src/views/partials/profile-header.ejs	(revision a78e0510b83d6c7816b9e170d532097356374f6f)
@@ -41,26 +41,20 @@
   <div class="container profile-header-inner">
 
-    <% if (_avatarUrl) { %>
-      <%# With a real photo: clicking opens the profile-summary modal (photo + details). %>
-      <button type="button" class="profile-photo" data-pf-summary aria-label="<%= _displayName || 'Profile' %>">
+    <%# Clicking the avatar — photo OR placeholder — opens the profile-summary modal. %>
+    <button type="button" class="profile-photo" data-pf-summary aria-label="<%= _displayName || 'Profile' %>">
+      <% if (_avatarUrl) { %>
         <img src="<%= _avatarUrl %>" alt="">
-      </button>
-    <% } else { %>
-      <a class="profile-photo" href="<%= _base %>/"
-         hx-get="<%= _base %>/?partial=1" hx-target="#pcms-main" hx-swap="innerHTML"
-         hx-push-url="<%= _base %>/" hx-indicator="#pcms-loading" aria-label="Home">
-        <% if (site.enable_audio_player && (typeof audioEnabled === 'undefined' || audioEnabled)) { %>
-          <span class="profile-photo-fallback profile-photo-fallback--music" aria-hidden="true">
-            <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
-              <path d="M9 17V5l12-2v12"/>
-              <circle cx="6" cy="17" r="3"/>
-              <circle cx="18" cy="15" r="3"/>
-            </svg>
-          </span>
-        <% } else { %>
-          <span class="profile-photo-fallback" aria-hidden="true"><%= (_displayName || '?').charAt(0).toUpperCase() %></span>
-        <% } %>
-      </a>
-    <% } %>
+      <% } else if (site.enable_audio_player && (typeof audioEnabled === 'undefined' || audioEnabled)) { %>
+        <span class="profile-photo-fallback profile-photo-fallback--music" aria-hidden="true">
+          <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
+            <path d="M9 17V5l12-2v12"/>
+            <circle cx="6" cy="17" r="3"/>
+            <circle cx="18" cy="15" r="3"/>
+          </svg>
+        </span>
+      <% } else { %>
+        <span class="profile-photo-fallback" aria-hidden="true"><%= (_displayName || '?').charAt(0).toUpperCase() %></span>
+      <% } %>
+    </button>
 
     <div class="profile-info">
@@ -114,9 +108,16 @@
 <%# Profile-summary modal — opened by clicking the avatar. Shows photo + title + subtitle
     + contact details + start date + premium status. %>
-<% if (_avatarUrl) { %>
 <div class="pf-summary">
   <div class="pf-summary-card" role="dialog" aria-label="<%= _displayName %>">
     <button type="button" class="pf-summary-close" aria-label="Sluiten">&times;</button>
-    <img class="pf-summary-photo" src="<%= _avatarUrl %>" alt="">
+    <% if (_avatarUrl) { %>
+      <img class="pf-summary-photo" src="<%= _avatarUrl %>" alt="">
+    <% } else { %>
+      <div class="pf-summary-photo pf-summary-photo--ph" aria-hidden="true">
+        <% if (site.enable_audio_player && (typeof audioEnabled === 'undefined' || audioEnabled)) { %>
+          <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9 17V5l12-2v12"/><circle cx="6" cy="17" r="3"/><circle cx="18" cy="15" r="3"/></svg>
+        <% } else { %><span><%= (_displayName || '?').charAt(0).toUpperCase() %></span><% } %>
+      </div>
+    <% } %>
     <h3 class="pf-summary-name"><%= _displayName %></h3>
     <span class="pf-summary-prem<%= _isPrem ? ' is-prem' : '' %>"><%= _isPrem ? '★ Premium' : t('profile.free') %></span>
@@ -143,5 +144,4 @@
   </div>
 </div>
-<% } %>
 <% if (_showFollow) { %>
 <%# Follow-via-fediverse modal — replaces the native prompt() (which looked ugly). %>
@@ -403,4 +403,7 @@
 .pf-summary-photo { width: 110px; height: 110px; border-radius: 50%; object-fit: cover; margin: 0 auto .9rem;
   display: block; border: 3px solid var(--paper-2); background: #fff; }
+.pf-summary-photo--ph { display: flex; align-items: center; justify-content: center; background: var(--paper-2); }
+.pf-summary-photo--ph svg { width: 46px; height: 46px; color: var(--accent); }
+.pf-summary-photo--ph span { font-family: var(--font-display, serif); font-size: 2.6rem; font-weight: 700; color: var(--ink-soft); }
 .pf-summary-name { font-family: var(--font-display, serif); font-size: 1.4rem; margin: 0 0 .35rem; }
 .pf-summary-prem { display: inline-block; margin: 0 0 .7rem; padding: .15rem .6rem; border-radius: 999px;
Index: src/views/shell.ejs
===================================================================
--- src/views/shell.ejs	(revision 0a7ba905c05d6c28831160e9023b8c6d66787f6e)
+++ src/views/shell.ejs	(revision a78e0510b83d6c7816b9e170d532097356374f6f)
@@ -198,5 +198,5 @@
 
 <!-- v9 stylesheet (full palette system) -->
-<link rel="stylesheet" href="/assets/css/style.css?v=56">
+<link rel="stylesheet" href="/assets/css/style.css?v=57">
 <script>
 /* iOS safe-area, built by hand. env(safe-area-inset-top) resolves to 0 on this iOS in
