Index: CHANGELOG.md
===================================================================
--- CHANGELOG.md	(revision 1080d14a82b0bf566e31aa37f3c30190e96e2869)
+++ CHANGELOG.md	(revision f4b7b6a930558498ae023cb97614353f0e9a89ef)
@@ -15,4 +15,7 @@
 
 ### Gewijzigd
+- Login gesplitst: de publieke loginpagina (`/auth/login`) toont voor bezoekers nu
+  **alleen** Google-login (luisteraars/fans). De beheerders-login (gebruikersnaam +
+  wachtwoord) staat verborgen op `/auth/admin` (nergens gelinkt).
 - Post-navigatie (Newer/Older) houdt nu op elke post dezelfde twee-kaarten-structuur:
   ontbreekt er een nieuwere/oudere post, dan staat er een subtiele uitgegrijsde
Index: src/routes/auth.js
===================================================================
--- src/routes/auth.js	(revision 1080d14a82b0bf566e31aa37f3c30190e96e2869)
+++ src/routes/auth.js	(revision f4b7b6a930558498ae023cb97614353f0e9a89ef)
@@ -44,5 +44,9 @@
 }
 
-// ==================== LOGIN (beheerder = wachtwoord) ====================
+// ==================== LOGIN ====================
+// Publieke loginpagina: voor BEZOEKERS alleen Google-login (luisteraars/fans).
+// De beheerders-login (wachtwoord) staat hier bewust NIET — die zit verborgen op
+// /auth/admin (zie hieronder), zodat de admin-login niet zichtbaar is op de plek
+// waar bezoekers heen worden gestuurd.
 router.get('/login', (req, res) => {
   const next = safeNext(req.query.next) || '';
@@ -56,5 +60,25 @@
     success: req.query.success || null,
     username: '',
+    adminLogin: false,
     googleReady: fanLoginReady(),
+    next,
+  });
+});
+
+// Verborgen beheerders-login (gebruikersnaam + wachtwoord). Nergens in de UI
+// gelinkt — de beheerder navigeert hier rechtstreeks naartoe (/auth/admin).
+router.get('/admin', (req, res) => {
+  const next = safeNext(req.query.next) || '';
+  if (req.session.user) return res.redirect(next || '/');
+  if (isSetupMode()) return res.redirect('/auth/register' + (next ? '?next=' + encodeURIComponent(next) : ''));
+  renderPage(req, res, 'pages/auth-login', {
+    pageTitle: 'Beheerder inloggen',
+    bodyClass: 'on-special on-auth',
+    error: req.query.error || null,
+    gerr: null,
+    success: req.query.success || null,
+    username: '',
+    adminLogin: true,
+    googleReady: false,
     next,
   });
@@ -65,9 +89,12 @@
   const next = safeNext(req.body.next) || '';
 
+  // Foutweergave op de (verborgen) beheerders-loginpagina: toon het wachtwoord-
+  // formulier opnieuw (adminLogin:true), niet de Google-only publieke pagina.
   const renderErr = (error, status = 400) => {
     res.status(status);
     return renderPage(req, res, 'pages/auth-login', {
-      pageTitle: 'Inloggen', bodyClass: 'on-special',
-      error, success: null, username: username || '', googleReady: fanLoginReady(), next,
+      pageTitle: 'Beheerder inloggen', bodyClass: 'on-special on-auth',
+      error, gerr: null, success: null, username: username || '',
+      adminLogin: true, googleReady: false, next,
     });
   };
@@ -229,5 +256,5 @@
       updated_at = CURRENT_TIMESTAMP WHERE id = ?
   `).run(hash, row.id);
-  res.redirect('/auth/login?success=' + encodeURIComponent('Wachtwoord gereset — log nu in.'));
+  res.redirect('/auth/admin?success=' + encodeURIComponent('Wachtwoord gereset — log nu in.'));
 });
 
Index: src/views/pages/auth-login.ejs
===================================================================
--- src/views/pages/auth-login.ejs	(revision 1080d14a82b0bf566e31aa37f3c30190e96e2869)
+++ src/views/pages/auth-login.ejs	(revision f4b7b6a930558498ae023cb97614353f0e9a89ef)
@@ -1,4 +1,11 @@
+<%
+  // adminLogin = de verborgen beheerders-loginpagina (/auth/admin): toont het
+  // gebruikersnaam/wachtwoord-formulier. De publieke /auth/login toont voor
+  // bezoekers ALLEEN Google-login (luisteraars/fans). Zo staat de admin-login
+  // niet zichtbaar op de plek waar bezoekers heen gestuurd worden.
+  var _admin = (typeof adminLogin !== 'undefined' && adminLogin);
+%>
 <div class="container auth-page">
-  <h1>Inloggen</h1>
+  <h1><%= _admin ? 'Beheerder inloggen' : 'Inloggen' %></h1>
   <% if (typeof success !== 'undefined' && success) { %><div class="alert alert-success"><%= success %></div><% } %>
   <%
@@ -6,9 +13,9 @@
       admin: { icon: '🔐', title: 'Dit is een beheerders-account',
         body: 'Je logde in met Google, maar dit e-mailadres hoort bij de beheerder van deze site. Inloggen met Google is alleen voor luisteraars/fans — beheerders gebruiken altijd hun wachtwoord (zo kan een Google-login nooit per ongeluk beheerrechten geven).',
-        list: ['<strong>Ben je de beheerder?</strong> Log hieronder in met je <strong>gebruikersnaam + wachtwoord</strong>.', '<strong>Wil je als fan inloggen?</strong> Gebruik een <strong>ander Google-account</strong> (niet je beheerdersadres).'] },
+        list: ['<strong>Ben je de beheerder?</strong> <a href="/auth/admin">Log in met je gebruikersnaam + wachtwoord</a>.', '<strong>Wil je als fan inloggen?</strong> Gebruik een <strong>ander Google-account</strong> (niet je beheerdersadres).'] },
       session: { icon: '⏱️', title: 'Login afgebroken', body: 'De Google-login is afgebroken of de sessie was verlopen. Probeer het gewoon opnieuw.' },
-      email: { icon: '✉️', title: 'Geen geverifieerd e-mailadres', body: 'Je Google-account heeft geen geverifieerd e-mailadres. Verifieer je adres bij Google, of log in met je wachtwoord.' },
+      email: { icon: '✉️', title: 'Geen geverifieerd e-mailadres', body: 'Je Google-account heeft geen geverifieerd e-mailadres. Verifieer je adres bij Google.' },
       linked: { icon: '🔗', title: 'Adres al gekoppeld', body: 'Dit e-mailadres is al aan een ander Google-account gekoppeld. Gebruik dat account, of neem contact op met de beheerder.' },
-      unavailable: { icon: '🚫', title: 'Google-login niet beschikbaar', body: 'Inloggen met Google is op deze site (nog) niet ingesteld. Log in met je gebruikersnaam en wachtwoord.' },
+      unavailable: { icon: '🚫', title: 'Google-login niet beschikbaar', body: 'Inloggen met Google is op deze site (nog) niet ingesteld.' },
       failed: { icon: '⚠️', title: 'Google-login mislukt', body: 'Er ging iets mis bij het inloggen met Google. Probeer het opnieuw.' },
     };
@@ -24,22 +31,24 @@
   <% } else if (error) { %><div class="alert alert-error"><%= error %></div><% } %>
 
-  <form method="post" action="/auth/login" class="auth-form">
-    <% if (typeof next !== 'undefined' && next) { %>
-      <input type="hidden" name="next" value="<%= next %>">
-    <% } %>
-    <label>
-      <span>Gebruikersnaam of e-mail</span>
-      <input type="text" name="username" value="<%= username %>" required autofocus autocomplete="username">
-    </label>
-    <label>
-      <span>Wachtwoord</span>
-      <input type="password" name="password" required autocomplete="current-password">
-    </label>
-    <button type="submit" class="btn btn-primary">Inloggen</button>
-    <p class="auth-link auth-link-muted"><a href="/auth/reset-request">Wachtwoord vergeten?</a></p>
-  </form>
-
-  <% if (googleReady) { %>
-    <div class="auth-divider"><span>of als luisteraar</span></div>
+  <% if (_admin) { %>
+    <%# Verborgen beheerders-login (wachtwoord). %>
+    <form method="post" action="/auth/login" class="auth-form">
+      <% if (typeof next !== 'undefined' && next) { %>
+        <input type="hidden" name="next" value="<%= next %>">
+      <% } %>
+      <label>
+        <span>Gebruikersnaam of e-mail</span>
+        <input type="text" name="username" value="<%= username %>" required autofocus autocomplete="username">
+      </label>
+      <label>
+        <span>Wachtwoord</span>
+        <input type="password" name="password" required autocomplete="current-password">
+      </label>
+      <button type="submit" class="btn btn-primary">Inloggen</button>
+      <p class="auth-link auth-link-muted"><a href="/auth/reset-request">Wachtwoord vergeten?</a></p>
+    </form>
+  <% } else if (googleReady) { %>
+    <%# Publieke login: alleen Google, voor luisteraars/fans. %>
+    <p class="auth-sub">Log in om te reageren en je favorieten te bewaren.</p>
     <a class="btn btn-google" href="/auth/google<%= (typeof next !== 'undefined' && next) ? '?next=' + encodeURIComponent(next) : '' %>">
       <svg class="g-icon" width="18" height="18" viewBox="0 0 18 18" aria-hidden="true">
@@ -51,4 +60,6 @@
       <span>Inloggen met Google</span>
     </a>
+  <% } else { %>
+    <div class="alert">Inloggen met Google is op deze site nog niet ingesteld.</div>
   <% } %>
 </div>
@@ -61,3 +72,4 @@
   .auth-notice-list { margin: 0; padding-left: 18px; line-height: 1.6; }
   .auth-notice-list li { margin: 4px 0; }
+  .auth-sub { color: var(--ink-muted); margin: 0 0 1rem; }
 </style>
