Index: src/views/partials/shared-styles.ejs
===================================================================
--- src/views/partials/shared-styles.ejs	(revision 4dcefa15b0246b6ede13ff025c959da6985f7bed)
+++ src/views/partials/shared-styles.ejs	(revision 1c6d61c61d3c00833d7281c35f27f08ec8ccf6b8)
@@ -36,5 +36,8 @@
 }
 .view-switch-btn:hover { color: var(--ink); }
-.view-switch-btn[aria-selected="true"] { background: var(--paper); color: var(--ink); box-shadow: 0 1px 2px rgba(0,0,0,.06); }
+/* Actief = wit (lichte achtergrond, donkere tekst). Via aria-selected (element-
+   attribuut, door syncAria gezet + op htmx:afterSettle) → htmx-robuust. Op niet-
+   feed-pagina's zet syncAria aria-selected=false → beide grijs. */
+.view-switch-btn[aria-selected="true"] { background: var(--ink); color: var(--paper); border-color: var(--ink); }
 
 /* Agenda = een EIGEN pill (los van Tijdlijn/Grid, zodat de feed-toggle nooit
Index: src/views/partials/view-switcher.ejs
===================================================================
--- src/views/partials/view-switcher.ejs	(revision 4dcefa15b0246b6ede13ff025c959da6985f7bed)
+++ src/views/partials/view-switcher.ejs	(revision 1c6d61c61d3c00833d7281c35f27f08ec8ccf6b8)
@@ -36,10 +36,10 @@
     <div class="view-switcher" role="tablist" aria-label="Weergave">
       <button type="button" class="view-switch-btn" data-view="timeline" role="tab"
-              aria-selected="<%= (typeof site !== 'undefined' && site && site.feed_view_default === 'grid') ? 'false' : 'true' %>">
+              aria-selected="<%= (!_neutral && !(typeof site !== 'undefined' && site && site.feed_view_default === 'grid')) ? 'true' : 'false' %>">
         <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><line x1="8" y1="6" x2="21" y2="6"/><line x1="8" y1="12" x2="21" y2="12"/><line x1="8" y1="18" x2="21" y2="18"/><line x1="3" y1="6" x2="3.01" y2="6"/><line x1="3" y1="12" x2="3.01" y2="12"/><line x1="3" y1="18" x2="3.01" y2="18"/></svg>
         <span>Tijdlijn</span>
       </button>
       <button type="button" class="view-switch-btn" data-view="grid" role="tab"
-              aria-selected="<%= (typeof site !== 'undefined' && site && site.feed_view_default === 'grid') ? 'true' : 'false' %>">
+              aria-selected="<%= (!_neutral && (typeof site !== 'undefined' && site && site.feed_view_default === 'grid')) ? 'true' : 'false' %>">
         <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="3" width="7" height="7"/><rect x="14" y="3" width="7" height="7"/><rect x="14" y="14" width="7" height="7"/><rect x="3" y="14" width="7" height="7"/></svg>
         <span>Grid</span>
Index: src/views/shell.ejs
===================================================================
--- src/views/shell.ejs	(revision 4dcefa15b0246b6ede13ff025c959da6985f7bed)
+++ src/views/shell.ejs	(revision 1c6d61c61d3c00833d7281c35f27f08ec8ccf6b8)
@@ -384,6 +384,11 @@
 
   function syncAria() {
+    // Alleen op een feed-pagina hoort Tijdlijn/Grid 'actief' (wit) te zijn; op
+    // agenda/downloads/post/etc. beide grijs. Inline feed-check (FEED_PAGE_CLASSES
+    // staat verderop, maar deze functie draait al bij init).
+    var _feedC = ['on-home','on-tag','on-type','on-user','on-cirkel'];
+    var _onFeed = _feedC.some(function(c){ return body.classList.contains(c); });
     document.querySelectorAll('.view-switch-btn').forEach(function(b) {
-      b.setAttribute('aria-selected', b.dataset.view === body.dataset.feedView ? 'true' : 'false');
+      b.setAttribute('aria-selected', (_onFeed && b.dataset.view === body.dataset.feedView) ? 'true' : 'false');
     });
     document.querySelectorAll('.grid-cols-btn').forEach(function(b) {
