Index: src/assets/js/mod/read.js
===================================================================
--- src/assets/js/mod/read.js	(revision 27cb1e3836c5a71c0462ee3118823c328a44135e)
+++ src/assets/js/mod/read.js	(revision edd5ccc940df3aed0360fd45706dfb521927c7f6)
@@ -476,6 +476,12 @@
       vertrek = lenis.scroll;
       clearTimeout(raakTimer);
+      // TIMEOUT 0, geen 150ms. Dit event komt binnen VOOR lenis zelf de
+      // touchend verwerkt (de emit staat in de bron boven de verwerking), dus
+      // targetScroll is hier nog het oude doel. Een tik later is de uitloop
+      // gestart en staat targetScroll op de echte landing -- en dan sturen we
+      // hem meteen bij, in plaats van de uitloop 150ms te laten lopen en er
+      // dan een aparte snap-animatie overheen te zetten.
       raakTimer = setTimeout(() => {
-        if (!laatsteRichtingOmlaag) return;
+        if (!laatsteRichtingOmlaag || snap.isStopped) return;
         const doel = lenis.targetScroll;   // de echte landing, niet de raakdelta
         const punten = snap.computeSnaps();
@@ -492,6 +498,13 @@
         });
         if (eerste < 0) return;            // niets meer voor je: vrij uitscrollen
-        if (doel >= punten[eerste].value - vangZone()) echtGaNaar(eerste);
-      }, 150);
+        // HET RICHTEN IS DE SNAP (Robins regel, 24-8): geen aparte animatie
+        // met een eigen duur, maar de lopende uitloop een nieuw doel geven,
+        // met DEZELFDE demping (syncTouchLerp) waarmee hij al onderweg is.
+        // Zo is er een doorlopende beweging die toevallig op de lijn eindigt,
+        // in plaats van een glijvlucht met halverwege een muur.
+        if (doel >= punten[eerste].value - vangZone()) {
+          lenis.scrollTo(punten[eerste].value, { lerp: 0.09, force: true, userData: { initiator: 'snap' } });
+        }
+      }, 0);
     });
   }
Index: src/views/shell.ejs
===================================================================
--- src/views/shell.ejs	(revision 27cb1e3836c5a71c0462ee3118823c328a44135e)
+++ src/views/shell.ejs	(revision edd5ccc940df3aed0360fd45706dfb521927c7f6)
@@ -505,5 +505,5 @@
   // Eén nummer voor de hele map. Te vaak bumpen kost één download; te weinig
   // bumpen kost een bugfix die nooit aankomt.
-  var MOD_V = 57;
+  var MOD_V = 58;
 
   // name -> 1 (aan het laden) of de module-namespace (geladen). Een module
