Index: src/middleware/render.js
===================================================================
--- src/middleware/render.js	(revision 931b4cb4516d24601a74d0f9d9297a1bd3467044)
+++ src/middleware/render.js	(revision cca2e89efa9f613f04995a0db4851ba5eb12dd25)
@@ -71,22 +71,19 @@
   // avatar change or role switch) heals itself without a new login.
   if (_u && _u.id) {
-    const _fresh = db.prepare('SELECT avatar_url, role, lang FROM users WHERE id = ?').get(_u.id);
-    if (_fresh) _u = { ..._u, avatar_url: _fresh.avatar_url, role: _fresh.role, lang: _fresh.lang };
-    // One identity: no own account avatar → fall back to the user's site photo,
-    // so the same picture shows everywhere (nav, account, comments).
-    if (_u && !_u.avatar_url) {
-      const _sp = db.prepare("SELECT profile_photo FROM sites WHERE owner_id = ? AND profile_photo IS NOT NULL ORDER BY is_primary DESC, created_at ASC LIMIT 1").get(_u.id);
-      if (_sp && _sp.profile_photo) _u = { ..._u, avatar_url: _sp.profile_photo };
-    }
+    const _fresh = db.prepare('SELECT role, lang FROM users WHERE id = ?').get(_u.id);
+    if (_fresh) _u = { ..._u, role: _fresh.role, lang: _fresh.lang };
+    // ONE image: a user's avatar everywhere (nav, account, comments) is simply their SITE
+    // photo — there is no separate account avatar. Falls back to the initial-letter
+    // placeholder when the site has no photo yet.
+    const _sp = db.prepare("SELECT profile_photo FROM sites WHERE owner_id = ? AND profile_photo IS NOT NULL ORDER BY is_primary DESC, created_at ASC LIMIT 1").get(_u.id);
+    _u = { ..._u, avatar_url: (_sp && _sp.profile_photo) || null };
   }
   const userOwnsSite = !!(_u && _u.role !== 'god' &&
     db.prepare('SELECT 1 FROM sites WHERE owner_id = ? LIMIT 1').get(_u.id));
 
-  // The avatar of the SITE OWNER (not the viewer!) — for the Klonkt site header,
-  // so the artist can use their own account photo as the site photo.
   const _site = data.site || res.locals.site || null;
-  const siteOwnerAvatar = (_site && _site.owner_id)
-    ? (db.prepare('SELECT avatar_url FROM users WHERE id = ?').get(_site.owner_id)?.avatar_url || null)
-    : null;
+  // The site header uses the SITE photo (site.profile_photo) — the one and only image,
+  // set in site settings. (No separate account-avatar fallback anymore.)
+  const siteOwnerAvatar = null;
 
   // Viewer mode: may view everything, change nothing. Views use canMutate
Index: src/services/i18n.js
===================================================================
--- src/services/i18n.js	(revision 931b4cb4516d24601a74d0f9d9297a1bd3467044)
+++ src/services/i18n.js	(revision cca2e89efa9f613f04995a0db4851ba5eb12dd25)
@@ -733,5 +733,5 @@
     'acct.profile': 'Profiel',
     'acct.avatar_change': 'Klik om je foto te wijzigen',
-    'acct.member_since': 'Lid sinds',
+    'acct.member_since': 'Lid sinds', 'acct.photo_site_hint': 'Je profielfoto stel je in bij je <a href="/admin">site-instellingen</a> — één foto, overal gebruikt.',
     'acct.avatar_remove': 'Foto verwijderen',
     'acct.username': 'Gebruikersnaam',
@@ -1643,5 +1643,5 @@
     'acct.profile': 'Profile',
     'acct.avatar_change': 'Click to change your photo',
-    'acct.member_since': 'Member since',
+    'acct.member_since': 'Member since', 'acct.photo_site_hint': 'Your profile photo is set in your <a href="/admin">site settings</a> — one photo, used everywhere.',
     'acct.avatar_remove': 'Remove photo',
     'acct.username': 'Username',
@@ -2553,5 +2553,5 @@
     'acct.profile': 'Profil',
     'acct.avatar_change': 'Zum Ändern deines Fotos klicken',
-    'acct.member_since': 'Mitglied seit',
+    'acct.member_since': 'Mitglied seit', 'acct.photo_site_hint': 'Dein Profilbild legst du in den <a href="/admin">Site-Einstellungen</a> fest — ein Bild für überall.',
     'acct.avatar_remove': 'Foto entfernen',
     'acct.username': 'Benutzername',
Index: src/views/pages/account.ejs
===================================================================
--- src/views/pages/account.ejs	(revision 931b4cb4516d24601a74d0f9d9297a1bd3467044)
+++ src/views/pages/account.ejs	(revision cca2e89efa9f613f04995a0db4851ba5eb12dd25)
@@ -27,31 +27,12 @@
 
     <div class="ax-profile-id">
-      <% if (canMutate) { %>
-        <form action="/account/avatar" method="post" enctype="multipart/form-data" class="ax-avatar-form">
-          <label class="ax-avatar-wrap" title="<%= t('acct.avatar_change') %>">
-            <span class="ax-profile-avatar">
-              <% var _av = account.avatar_url || (typeof siteAvatar !== 'undefined' ? siteAvatar : null); %>
-              <% if (_av) { %>
-                <img src="<%= _av %>" alt="">
-              <% } else { %>
-                <span><%= account.username.charAt(0).toUpperCase() %></span>
-              <% } %>
-            </span>
-            <span class="ax-avatar-edit" aria-hidden="true">
-              <svg viewBox="0 0 24 24" width="15" height="15" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M23 19a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h4l2-3h6l2 3h4a2 2 0 0 1 2 2z"/><circle cx="12" cy="13" r="4"/></svg>
-            </span>
-            <input type="file" name="avatar" accept="image/jpeg,image/png,image/webp,image/gif" onchange="this.form.submit()" hidden>
-          </label>
-        </form>
-      <% } else { %>
-        <span class="ax-profile-avatar ax-profile-avatar-static">
-          <% var _av2 = account.avatar_url || (typeof siteAvatar !== 'undefined' ? siteAvatar : null); %>
-          <% if (_av2) { %>
-            <img src="<%= _av2 %>" alt="">
-          <% } else { %>
-            <span><%= account.username.charAt(0).toUpperCase() %></span>
-          <% } %>
-        </span>
-      <% } %>
+      <span class="ax-profile-avatar ax-profile-avatar-static">
+        <% var _av = (typeof siteAvatar !== 'undefined' ? siteAvatar : null); %>
+        <% if (_av) { %>
+          <img src="<%= _av %>" alt="">
+        <% } else { %>
+          <span><%= account.username.charAt(0).toUpperCase() %></span>
+        <% } %>
+      </span>
       <div class="ax-profile-meta">
         <div class="ax-profile-name"><%= account.username %></div>
@@ -60,8 +41,6 @@
           <div class="ax-profile-joined"><%= t('acct.member_since') %> <%= formatDate(account.created_at) %></div>
         <% } %>
-        <% if (account.avatar_url && canMutate) { %>
-          <form action="/account/avatar/remove" method="post" class="ax-avatar-remove">
-            <button type="submit" class="ax-linkbtn"><%= t('acct.avatar_remove') %></button>
-          </form>
+        <% if (canMutate) { %>
+          <div class="ax-profile-joined"><%- t('acct.photo_site_hint') %></div>
         <% } %>
       </div>
