Index: src/views/partials/profile-header.ejs
===================================================================
--- src/views/partials/profile-header.ejs	(revision 2165b6d3d57ceaa8b5d1f70491868482149470cf)
+++ src/views/partials/profile-header.ejs	(revision 7bc636b391c66ac399c33e54f7173a022c6a3cbd)
@@ -26,13 +26,4 @@
   try { _profileLinks = JSON.parse(site.profile_links) || []; } catch (e) { _profileLinks = []; }
 }
-
-// Profile-summary (lightbox) helpers — used by the avatar + the summary modal.
-const _base = (typeof siteUrlBase !== 'undefined' && siteUrlBase) ? siteUrlBase : '';
-const _avatarUrl = (site && site.profile_photo) || ((typeof siteOwnerAvatar !== 'undefined' && siteOwnerAvatar) || '');
-const _platforms = (typeof platforms_catalog !== 'undefined' && platforms_catalog) || {};
-const _linkHref = function (p, u) { u = String(u || '').trim(); if (p === 'email' && u && u.indexOf('mailto:') !== 0) return 'mailto:' + u; if (p === 'phone' && u && !/^tel:/i.test(u)) return 'tel:' + u.replace(/[^\d+]/g, ''); return u; };
-const _linkVal = function (u) { return String(u || '').replace(/^(mailto:|tel:|https?:\/\/)/i, '').replace(/\/$/, ''); };
-const _isPrem = (typeof isPremium !== 'undefined' && isPremium);
-let _sinceStr = ''; try { if (site && site.created_at) _sinceStr = new Date(site.created_at).toLocaleDateString('nl-NL', { day: '2-digit', month: 'short', year: 'numeric' }); } catch (e) {}
 %>
 
@@ -41,9 +32,14 @@
   <div class="container profile-header-inner">
 
-    <%# 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="<%= avatar(_avatarUrl, 256) %>" alt="">
-      <% } else if (site.enable_audio_player && (typeof audioEnabled === 'undefined' || audioEnabled)) { %>
+    <a class="profile-photo" href="<%= (typeof siteUrlBase !== 'undefined' && siteUrlBase) ? siteUrlBase : '' %>/"
+       hx-get="<%= (typeof siteUrlBase !== 'undefined' && siteUrlBase) ? siteUrlBase : '' %>/?partial=1"
+       hx-target="#pcms-main" hx-swap="innerHTML"
+       hx-push-url="<%= (typeof siteUrlBase !== 'undefined' && siteUrlBase) ? siteUrlBase : '' %>/"
+       hx-indicator="#pcms-loading" aria-label="Home">
+      <% if (typeof user !== 'undefined' && user && user.avatar_url) { %>
+        <img src="<%= user.avatar_url %>" alt="">
+      <% } else if (site.profile_photo) { %>
+        <img src="<%= site.profile_photo %>" alt="">
+      <% } else if (site.enable_audio_player) { %>
         <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">
@@ -56,5 +52,5 @@
         <span class="profile-photo-fallback" aria-hidden="true"><%= (_displayName || '?').charAt(0).toUpperCase() %></span>
       <% } %>
-    </button>
+    </a>
 
     <div class="profile-info">
@@ -72,8 +68,5 @@
       <% } %>
 
-      <%# Follow-via-fediverse: a compact icon in the links row (keeps the header
-          short), and hidden for the owner — you don't follow yourself. %>
-      <% var _showFollow = (typeof canManageFedi === 'undefined' || !canManageFedi) && site && site.slug && (typeof apEnabled === 'undefined' || apEnabled); %>
-      <% if (_profileLinks.length || _showFollow) { %>
+      <% if (_profileLinks.length) { %>
         <% const _platforms = (typeof platforms_catalog !== 'undefined' && platforms_catalog) || {}; %>
         <ul class="profile-links" aria-label="External links">
@@ -93,10 +86,4 @@
             </li>
           <% }); %>
-          <% if (_showFollow) { %>
-            <li style="order:-1">
-              <button type="button" class="profile-link profile-fedi-link" data-fedi-actor-slug="<%= site.slug %>"
-                      aria-label="<%= t('fedi.profile_follow') %>" title="<%= t('fedi.profile_follow') %>"><svg viewBox="151 31 530 530" fill="currentColor" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"><g transform="translate(6.6789703,-32.495842)"><path d="M257.1,266.8c-4.9,9.4-12.6,17.1-22.1,22l121.3,121.8l29.2-14.8L257.1,266.8z M417.1,427.4l-29.2,14.8l61.5,61.7c4.9-9.4,12.6-17.1,22.1-22L417.1,427.4z"/><path d="M557.5,315l-68.7,34.8l5.1,32.4l77.7-39.4C564.1,335.2,559.2,325.5,557.5,315z M448.9,370l-162.4,82.3c7.5,7.6,12.4,17.3,14.1,27.8L454,402.4L448.9,370z"/><path d="M396.7,167.3l-78.4,153l23.1,23.2l83-162C414,179.7,404.3,174.7,396.7,167.3z M298,360l-39.7,77.5c10.5,1.8,20.2,6.7,27.7,14.2l35.1-68.5L298,360z"/><path d="M234.3,289.1c-8,4-16.9,5.9-25.8,5.4c-1.7-0.1-3.3-0.3-5-0.5l23.2,148.2c8-4,16.9-5.9,25.8-5.4c1.7,0.1,3.3,0.3,5,0.5L234.3,289.1z"/><path d="M300.8,480.8c0.5,3.4,0.7,6.9,0.5,10.4c-0.4,7.1-2.3,14-5.5,20.4l148.2,23.8c-0.5-3.4-0.7-6.9-0.5-10.4c0.4-7.1,2.3-14,5.5-20.4L300.8,480.8z"/><path d="M572.1,343.3l-68.4,133.6c10.5,1.8,20.2,6.7,27.7,14.2l68.4-133.6C589.4,355.8,579.7,350.8,572.1,343.3z"/><path d="M478.8,154.4c-4.9,9.4-12.6,17.1-22.1,22l105.9,106.4c4.9-9.4,12.6-17.1,22.1-22L478.8,154.4z"/><path d="M382.1,138.9l-133.9,67.9c7.5,7.6,12.4,17.3,14.1,27.8l133.9-67.9C388.7,159.1,383.8,149.4,382.1,138.9z"/><path d="M456.5,176.6c-8.1,4.1-17.1,6.1-26.2,5.6c-1.5-0.1-3-0.3-4.5-0.5l11.9,76l32.4,5.2L456.5,176.6z M444.5,301.8l28.1,179.6c7.9-3.9,16.7-5.7,25.4-5.2c1.8,0.1,3.6,0.3,5.4,0.6L476.8,307L444.5,301.8z"/><path d="M262.4,235.2c0.6,3.5,0.7,7,0.6,10.6c-0.4,7-2.2,13.9-5.4,20.2l76,12.2l14.9-29.2L262.4,235.2z M392.7,256.1l-14.9,29.2l179.6,28.9c-0.5-3.4-0.7-6.9-0.5-10.3c0.4-7.1,2.3-14.1,5.5-20.5L392.7,256.1z"/><circle cx="433" cy="130.6" r="47"/><circle cx="608.4" cy="306.6" r="47"/><circle cx="495.1" cy="527.8" r="47"/><circle cx="249.7" cy="488.4" r="47"/><circle cx="211.3" cy="242.9" r="47"/></g></svg></button>
-            </li>
-          <% } %>
         </ul>
       <% } %>
@@ -105,62 +92,4 @@
   </div>
 </aside>
-
-<%# Profile-summary modal — opened by clicking the avatar. Shows photo + title + subtitle
-    + contact details + start date + premium status. %>
-<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>
-    <% if (_avatarUrl) { %>
-      <img class="pf-summary-photo" src="<%= avatar(_avatarUrl, 128) %>" 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>
-    <% if (_bioText) { %><p class="pf-summary-bio"><%= _bioText %></p><% } %>
-    <% if (_profileLinks.length) { %>
-      <ul class="pf-summary-links">
-        <% _profileLinks.forEach(function (l) { var meta = _platforms[l.platform]; if (!meta) return; var href = _linkHref(l.platform, l.url); var ext = (l.platform !== 'email' && l.platform !== 'phone'); %>
-          <li>
-            <a href="<%= href %>" <% if (ext) { %>target="_blank" rel="noopener noreferrer"<% } %> style="--brand: <%= meta.brand %>">
-              <span class="pf-summary-ico" aria-hidden="true"><%- meta.svg %></span>
-              <span class="pf-summary-rowtext"><span class="pf-summary-lbl"><%= meta.label %></span><span class="pf-summary-val"><%= _linkVal(l.url) %></span></span>
-            </a>
-          </li>
-        <% }); %>
-      </ul>
-    <% } %>
-    <% if (_showFollow) { %>
-      <button type="button" class="pf-summary-follow profile-fedi-link" data-fedi-actor-slug="<%= site.slug %>" aria-label="<%= t('fedi.profile_follow') %>">
-        <svg class="pf-summary-follow-ico" viewBox="151 31 530 530" fill="currentColor" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"><g transform="translate(6.6789703,-32.495842)"><path d="M257.1,266.8c-4.9,9.4-12.6,17.1-22.1,22l121.3,121.8l29.2-14.8L257.1,266.8z M417.1,427.4l-29.2,14.8l61.5,61.7c4.9-9.4,12.6-17.1,22.1-22L417.1,427.4z"/><path d="M557.5,315l-68.7,34.8l5.1,32.4l77.7-39.4C564.1,335.2,559.2,325.5,557.5,315z M448.9,370l-162.4,82.3c7.5,7.6,12.4,17.3,14.1,27.8L454,402.4L448.9,370z"/><path d="M396.7,167.3l-78.4,153l23.1,23.2l83-162C414,179.7,404.3,174.7,396.7,167.3z M298,360l-39.7,77.5c10.5,1.8,20.2,6.7,27.7,14.2l35.1-68.5L298,360z"/><path d="M234.3,289.1c-8,4-16.9,5.9-25.8,5.4c-1.7-0.1-3.3-0.3-5-0.5l23.2,148.2c8-4,16.9-5.9,25.8-5.4c1.7,0.1,3.3,0.3,5,0.5L234.3,289.1z"/><path d="M300.8,480.8c0.5,3.4,0.7,6.9,0.5,10.4c-0.4,7.1-2.3,14-5.5,20.4l148.2,23.8c-0.5-3.4-0.7-6.9-0.5-10.4c0.4-7.1,2.3-14,5.5-20.4L300.8,480.8z"/><path d="M572.1,343.3l-68.4,133.6c10.5,1.8,20.2,6.7,27.7,14.2l68.4-133.6C589.4,355.8,579.7,350.8,572.1,343.3z"/><path d="M478.8,154.4c-4.9,9.4-12.6,17.1-22.1,22l105.9,106.4c4.9-9.4,12.6-17.1,22.1-22L478.8,154.4z"/><path d="M382.1,138.9l-133.9,67.9c7.5,7.6,12.4,17.3,14.1,27.8l133.9-67.9C388.7,159.1,383.8,149.4,382.1,138.9z"/><path d="M456.5,176.6c-8.1,4.1-17.1,6.1-26.2,5.6c-1.5-0.1-3-0.3-4.5-0.5l11.9,76l32.4,5.2L456.5,176.6z M444.5,301.8l28.1,179.6c7.9-3.9,16.7-5.7,25.4-5.2c1.8,0.1,3.6,0.3,5.4,0.6L476.8,307L444.5,301.8z"/><path d="M262.4,235.2c0.6,3.5,0.7,7,0.6,10.6c-0.4,7-2.2,13.9-5.4,20.2l76,12.2l14.9-29.2L262.4,235.2z M392.7,256.1l-14.9,29.2l179.6,28.9c-0.5-3.4-0.7-6.9-0.5-10.3c0.4-7.1,2.3-14.1,5.5-20.5L392.7,256.1z"/><circle cx="433" cy="130.6" r="47"/><circle cx="608.4" cy="306.6" r="47"/><circle cx="495.1" cy="527.8" r="47"/><circle cx="249.7" cy="488.4" r="47"/><circle cx="211.3" cy="242.9" r="47"/></g></svg>
-        <span><%= t('fedi.profile_follow') %></span>
-      </button>
-    <% } %>
-    <% if (_sinceStr) { %><p class="pf-summary-since"><%= t('profile.since') %> <%= _sinceStr %></p><% } %>
-  </div>
-</div>
-<% if (_showFollow) { %>
-<%# Follow-via-fediverse modal — replaces the native prompt() (which looked ugly). %>
-<div class="pf-follow">
-  <div class="pf-follow-card" role="dialog" aria-label="<%= t('fedi.follow_heading') %>">
-    <button type="button" class="pf-follow-cancel pf-follow-x" aria-label="Sluiten">&times;</button>
-    <h3 class="pf-follow-title"><%= t('fedi.follow_heading') %></h3>
-    <p class="pf-follow-sub"><%= t('fedi.remote_prompt') %></p>
-    <input type="text" class="pf-follow-input" inputmode="url" autocomplete="off" autocapitalize="none" spellcheck="false"
-           placeholder="<%= t('fedi.remote_ph') %>">
-    <div class="pf-follow-actions">
-      <button type="button" class="pf-follow-cancel"><%= t('fedi.cancel') %></button>
-      <button type="button" class="pf-follow-go"><%= t('fedi.follow_btn') %></button>
-    </div>
-  </div>
-</div>
-<% } %>
-<%# Het script van de profielkop staat in assets/js/mod/chrome.js: deze partial
-    zit in de OOB-chrome en wordt bij elke htmx-navigatie opnieuw ingevoegd
-    (shaer-bqr). %>
 <% } %>
 
@@ -187,5 +116,4 @@
   width: 80px;
   height: 80px;
-  padding: 0;
   border-radius: 50%;
   overflow: hidden;
@@ -194,9 +122,5 @@
   transition: width 250ms, height 250ms;
   cursor: pointer;
-  font: inherit;
-  -webkit-appearance: none;
-  appearance: none;
-}
-.profile-photo[data-lightbox] { cursor: zoom-in; }
+}
 .profile-photo:hover {
   border-color: var(--accent);
@@ -326,65 +250,3 @@
 .on-special .profile-links,
 .on-archive .profile-links { display: none; }
-
-/* Follow-via-fediverse: compact icon button, sits in the links row */
-.profile-fedi-link { border: 0; padding: 0; background: var(--paper-2); cursor: pointer; -webkit-appearance: none; appearance: none; }
-/* The fediverse logo is an open line-network, so it reads smaller than a solid
-   glyph at 18px — render it larger INSIDE the same 36px circle (circle unchanged). */
-.profile-fedi-link svg { width: 22px; height: 22px; }
-
-/* Profile-summary modal (click the avatar) */
-.profile-photo[data-pf-summary] { cursor: zoom-in; }
-.pf-summary { position: fixed; inset: 0; z-index: 2147483600; display: none;
-  align-items: center; justify-content: center; padding: 4vmin;
-  background: rgba(0,0,0,.7); -webkit-backdrop-filter: blur(4px); backdrop-filter: blur(4px); }
-.pf-summary.is-open { display: flex; }
-.pf-summary-card { position: relative; width: 100%; max-width: 380px; max-height: 90vh; overflow-y: auto;
-  background: var(--paper); color: var(--ink); border: 1px solid var(--rule); border-radius: 20px;
-  padding: 1.75rem 1.5rem; box-shadow: 0 20px 60px rgba(0,0,0,.4); text-align: center; }
-.pf-summary-close { position: absolute; top: .6rem; right: .7rem; width: 36px; height: 36px; border: 0;
-  border-radius: 50%; background: var(--paper-2); color: var(--ink-soft); font-size: 1.5rem; line-height: 1;
-  cursor: pointer; display: flex; align-items: center; justify-content: center; }
-.pf-summary-close:hover { color: var(--ink); }
-.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;
-  font-size: .75rem; font-weight: 600; background: var(--paper-2); color: var(--ink-soft); }
-.pf-summary-prem.is-prem { background: color-mix(in srgb, #e8b04b 22%, transparent); color: #b8860b; }
-.pf-summary-bio { color: var(--ink-soft); font-size: .92rem; line-height: 1.5; margin: 0 0 1rem; }
-.pf-summary-links { list-style: none; padding: 0; margin: .25rem 0 1rem; display: flex; flex-direction: column; gap: .4rem; text-align: left; }
-.pf-summary-links a { display: flex; align-items: center; gap: .7rem; padding: .5rem .7rem; border-radius: 12px;
-  text-decoration: none; color: var(--ink); background: var(--paper-2); transition: background .12s; }
-.pf-summary-links a:hover { background: color-mix(in srgb, var(--brand, var(--accent)) 16%, var(--paper-2)); }
-.pf-summary-ico { flex: 0 0 22px; width: 22px; height: 22px; color: var(--brand, var(--ink-soft)); display: inline-flex; }
-.pf-summary-ico svg { width: 22px; height: 22px; }
-.pf-summary-rowtext { display: flex; flex-direction: column; min-width: 0; line-height: 1.25; }
-.pf-summary-lbl { font-size: .72rem; font-weight: 600; color: var(--ink-soft); text-transform: uppercase; letter-spacing: .03em; }
-.pf-summary-val { font-size: .9rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
-.pf-summary-since { color: var(--ink-soft); font-size: .8rem; margin: 0; }
-.pf-summary-follow { display: inline-flex; align-items: center; gap: .5rem; margin: .2rem auto 1rem; padding: .5rem 1.15rem;
-  border: 1.5px solid var(--accent); border-radius: 999px; background: transparent; color: var(--accent);
-  font: inherit; font-weight: 600; font-size: .88rem; cursor: pointer; transition: background .15s, color .15s; }
-.pf-summary-follow:hover { background: var(--accent); color: var(--paper); }
-.pf-summary-follow-ico { width: 18px; height: 18px; flex: 0 0 auto; }
-.pf-follow { position: fixed; inset: 0; z-index: 2147483601; display: none; align-items: center; justify-content: center; padding: 1rem; background: rgba(0,0,0,.55); }
-.pf-follow.is-open { display: flex; }
-.pf-follow-card { position: relative; width: 100%; max-width: 380px; text-align: left;
-  background: var(--paper); color: var(--ink); border: 1px solid var(--rule); border-radius: 16px;
-  padding: 1.5rem 1.4rem 1.3rem; box-shadow: 0 18px 50px rgba(0,0,0,.4); }
-.pf-follow-x { position: absolute; top: .55rem; right: .65rem; width: 2rem; height: 2rem; border: 0; border-radius: 999px;
-  background: transparent; color: var(--ink-soft); font-size: 1.4rem; line-height: 1; cursor: pointer; }
-.pf-follow-title { margin: 0 0 .35rem; font-size: 1.15rem; }
-.pf-follow-sub { margin: 0 0 .8rem; color: var(--ink-soft); font-size: .86rem; line-height: 1.45; }
-.pf-follow-input { width: 100%; box-sizing: border-box; padding: .6rem .8rem; border: 1.5px solid var(--rule);
-  border-radius: 10px; background: var(--paper-2); color: var(--ink); font: inherit; font-size: .95rem; }
-.pf-follow-input:focus { outline: none; border-color: var(--accent); }
-.pf-follow-actions { display: flex; justify-content: flex-end; gap: .6rem; margin-top: 1rem; }
-.pf-follow-actions button { padding: .5rem 1.1rem; border-radius: 999px; font: inherit; font-weight: 600; font-size: .88rem; cursor: pointer; border: 0; }
-.pf-follow-actions .pf-follow-cancel { background: transparent; border: 1.5px solid var(--rule); color: var(--ink); }
-.pf-follow-actions .pf-follow-go { background: var(--accent); color: var(--paper); }
-.pf-follow-actions .pf-follow-go:hover { filter: brightness(1.06); }
 </style>
