Index: src/routes/admin-sites.js
===================================================================
--- src/routes/admin-sites.js	(revision 5d0d3f352a5ea5b25d79dc7d7c29ffe9cf6c0d40)
+++ src/routes/admin-sites.js	(revision 495b0191f40d1e9e9de36d8ce98cad627ffb13cb)
@@ -191,4 +191,5 @@
     users: listOwnerCandidates(),
     palettes: ThemeService.listPalettes(),
+    layouts: ThemeService.listLayouts(),
     accents: ThemeService.listAccents(),
     platforms: listPlatforms(),
@@ -268,4 +269,5 @@
     users: listOwnerCandidates(),
     palettes: ThemeService.listPalettes(),
+    layouts: ThemeService.listLayouts(),
     accents: ThemeService.listAccents(),
     platforms: listPlatforms(),
@@ -334,4 +336,8 @@
   // "Auto" — defer to user's prefers-color-scheme on first paint.
   const themeOverride = ['light', 'dark'].includes(f.theme_override) ? f.theme_override : '';
+  // layout: alleen een thema dat deze Klonkt kent (experimental/theme). Leeg
+  // is de gewone kop. Een onbekend id opslaan zou een site maken die naar
+  // niets verwijst, en die valt dan stil terug -- liever meteen leeg.
+  const layout = ThemeService.getLayout(f.layout) ? f.layout : null;
 
   // accent: only accept colors from the curated ACCENTS list. Falls back to
@@ -342,5 +348,5 @@
     UPDATE sites SET
       title = ?, description = ?, tagline = ?, language = ?,
-      palette = ?, accent = ?, theme_override = ?, profile_photo = ?,
+      palette = ?, accent = ?, theme_override = ?, layout = ?, profile_photo = ?,
       profile_enabled = ?,
       ap_aliases = ?,
@@ -361,4 +367,5 @@
     accent,
     themeOverride,
+    layout,
     f.profile_photo || null,
     f.profile_enabled ? 1 : 0,
