Index: src/views/pages/lees.ejs
===================================================================
--- src/views/pages/lees.ejs	(revision f5cf299d117e37bf9b4a410dcf3f49ad46836e62)
+++ src/views/pages/lees.ejs	(revision f5cf299d117e37bf9b4a410dcf3f49ad46836e62)
@@ -0,0 +1,35 @@
+<%
+// De meeslepende tijdlijn: één bericht vult het scherm, de chrome gaat weg.
+//
+// Barts idee, naar bartoverkamp.nl: lezen zonder balken, en voorbij de rand
+// scrollen brengt je bij de buurman. De ⏫/⏬ verschijnen bij de rand en worden
+// 🔄 als je ver genoeg doortrekt; de 👋 blijft staan als weg terug, want een
+// scherm zonder uitgang is geen scherm maar een val.
+//
+// Alles wat beweegt zit in de client (pageJs 'lees'). Zonder JavaScript blijft
+// dit een leesbaar artikel met twee gewone links -- dat is met opzet: een
+// tijdlijn die alleen met script bestaat, bestaat niet voor wie hem uitzet.
+var _b = (typeof siteUrlBase !== 'undefined' && siteUrlBase) ? siteUrlBase : '';
+%>
+
+<div class="lees-shell" id="lees-shell">
+  <%- include('../partials/lees-article', {
+        post: post, entry: entry, newerPost: newerPost, olderPost: olderPost,
+      }) %>
+
+  <%# De weg terug. Blijft zichtbaar als de chrome weg is -- op bartoverkamp.nl
+      is de 👋 de sessieknop in het zwevende menu, en hier doet hij hetzelfde
+      werk: hij brengt je uit het leesscherm terug naar de site. %>
+  <nav class="lees-exit" aria-label="<%= t('lees.exit_label') %>">
+    <a class="lees-hand" href="<%= _b %>/" title="<%= t('lees.exit') %>" aria-label="<%= t('lees.exit') %>">👋</a>
+  </nav>
+
+  <%# Zonder script geen overscroll: dan zijn dit gewoon twee links, en kom je
+      er nog steeds doorheen. %>
+  <noscript>
+    <nav class="lees-fallback">
+      <% if (newerPost) { %><a href="<%= _b %>/lees/<%= newerPost.slug %>">⏫ <%= newerPost.title %></a><% } %>
+      <% if (olderPost) { %><a href="<%= _b %>/lees/<%= olderPost.slug %>">⏬ <%= olderPost.title %></a><% } %>
+    </nav>
+  </noscript>
+</div>
Index: src/views/partials/lees-article.ejs
===================================================================
--- src/views/partials/lees-article.ejs	(revision f5cf299d117e37bf9b4a410dcf3f49ad46836e62)
+++ src/views/partials/lees-article.ejs	(revision f5cf299d117e37bf9b4a410dcf3f49ad46836e62)
@@ -0,0 +1,39 @@
+<%
+// Eén artikel in de meeslepende tijdlijn, met zijn schildwachten.
+//
+// Dit is precies het stuk dat bij het overscrollen wordt ingeruild, dus alles
+// wat de navigatie nodig heeft staat erin: welke buren er zijn, en waar ze
+// wonen. De client leest die van data-attributen en hoeft niets te onthouden --
+// na een verwisseling klopt de staat vanzelf, want hij komt uit het nieuwe stuk.
+//
+// De schildwachten staan BINNEN dit blok en niet eromheen: zouden ze buiten
+// staan, dan blijven ze na een swap naar het vorige bericht wijzen.
+var _b = (typeof siteUrlBase !== 'undefined' && siteUrlBase) ? siteUrlBase : '';
+var _newer = (typeof newerPost !== 'undefined' && newerPost) ? newerPost : null;
+var _older = (typeof olderPost !== 'undefined' && olderPost) ? olderPost : null;
+%>
+<article class="lees-article"
+         id="lees-article"
+         data-slug="<%= post.slug %>"
+         data-newer="<%= _newer ? _newer.slug : '' %>"
+         data-older="<%= _older ? _older.slug : '' %>"
+         data-base="<%= _b %>">
+
+  <%# Schildwacht BOVEN: verschijnt pas als je voorbij de bovenrand trekt.
+      Leeg als er niets nieuwers is -- dan hoort er ook niets te gebeuren. %>
+  <div class="lees-sentinel lees-sentinel--prev" data-dir="newer" aria-hidden="true"
+       <% if (!_newer) { %>hidden<% } %>><span class="lees-cue">⏫</span></div>
+
+  <header class="lees-head">
+    <h1 class="lees-title"><%= post.title || '' %></h1>
+    <% if (post.published_at) { %>
+      <p class="lees-when"><%= formatDateTime(post.published_at) %></p>
+    <% } %>
+  </header>
+
+  <%- include('post-body', { post: post, access: entry.access, teaser: entry.teaser, _base: _b }) %>
+
+  <%# Schildwacht ONDER. %>
+  <div class="lees-sentinel lees-sentinel--next" data-dir="older" aria-hidden="true"
+       <% if (!_older) { %>hidden<% } %>><span class="lees-cue">⏬</span></div>
+</article>
