Index: CHANGELOG.md
===================================================================
--- CHANGELOG.md	(revision f83ccf3b838f2286c34f9dc0acb91d31537b9832)
+++ CHANGELOG.md	(revision a7e8e193a00dc1e2ef13333d67c1d74dddeee367)
@@ -13,4 +13,11 @@
 
 ## [Unreleased]
+
+### Opgelost
+- Posts schrijven op mobiel: een opmaakknop (vet/cursief/…) stal de focus uit het
+  tekstveld → de selectie ging verloren (vet kon niet meer uitgezet worden) en de
+  pagina sprong naar beneden. De toolbar houdt de focus nu in de editor
+  (mousedown-preventDefault + focus zonder scroll), dus toggelen werkt en er is geen
+  sprong meer. Toolbar-taps zijn ook sneller (touch-action: manipulation).
 
 ### Toegevoegd
Index: src/views/pages/post-edit.ejs
===================================================================
--- src/views/pages/post-edit.ejs	(revision f83ccf3b838f2286c34f9dc0acb91d31537b9832)
+++ src/views/pages/post-edit.ejs	(revision a7e8e193a00dc1e2ef13333d67c1d74dddeee367)
@@ -393,4 +393,6 @@
   width: 32px; height: 32px;
   padding: 0;
+  touch-action: manipulation; /* snappy taps op mobiel, geen dubbeltik-zoom */
+  -webkit-user-select: none; user-select: none;
   background: transparent;
   border: 1px solid transparent;
@@ -1037,5 +1039,5 @@
   // ── Toolbar wiring
   function execCmd(cmd, arg) {
-    editor.focus();
+    editor.focus({ preventScroll: true });
     document.execCommand(cmd, false, arg);
     updateToolbarState();
@@ -1055,5 +1057,5 @@
     sel.removeAllRanges();
     sel.addRange(range);
-    editor.focus();
+    editor.focus({ preventScroll: true });
   }
   function linkPrompt() {
@@ -1077,5 +1079,5 @@
   // pak de wrapper uit; anders pas blockquote toe.
   function toggleBlockquote() {
-    editor.focus();
+    editor.focus({ preventScroll: true });
     const bq = blockquoteAncestor();
     if (bq) {
@@ -1107,4 +1109,12 @@
 
   if (toolbar) {
+    // CRUCIAAL (mobiel + desktop): voorkom dat een toolbar-knop de focus/selectie
+    // uit het editor-veld steelt. Zonder dit raakt de selectie kwijt bij het tikken
+    // → execCommand werkt op een lege selectie (vet kan niet meer UIT) én de browser
+    // scrollt de caret opnieuw in beeld (de "sprong naar beneden"). preventDefault op
+    // mousedown houdt de focus in de editor; de click blijft gewoon vuren.
+    toolbar.addEventListener('mousedown', (e) => {
+      if (e.target.closest('button')) e.preventDefault();
+    });
     toolbar.addEventListener('click', (e) => {
       const btn = e.target.closest('button[data-cmd]');
@@ -1166,5 +1176,5 @@
       const j = await uploadImage(file);
       const img = '<img src="' + j.url + '" alt="">';
-      editor.focus();
+      editor.focus({ preventScroll: true });
       document.execCommand('insertHTML', false, img);
       contentStatus.textContent = 'Ingevoegd ✓';
@@ -1204,5 +1214,5 @@
   // ── Insert chip helpers (track / playlist)
   function insertChip(kind, value) {
-    editor.focus();
+    editor.focus({ preventScroll: true });
     const chip = makeChip(kind, value);
     // Insert at caret using the Selection API (execCommand insertNode)
