Index: src/assets/css/ward.css
===================================================================
--- src/assets/css/ward.css	(revision 2086ea255ae8ea5a474fc805eda10bd71146c947)
+++ src/assets/css/ward.css	(revision 5e0fea7c8a7ddd0a79c47ddf9be36e014aa2d5ed)
@@ -6,4 +6,7 @@
   --dim: #9aa7bb;
   --accent: #5a32e6;
+  --on-accent: #ffffff;
+  --bg-top: #1a2233;
+  --bg-bottom: #0d1017;
   --alarm: #ef9f27;
   --ok: #46c26a;
@@ -17,5 +20,6 @@
 body {
   margin: 0; padding: 16px calc(16px + env(safe-area-inset-right)) 32px calc(16px + env(safe-area-inset-left));
-  background: var(--bg); color: var(--ink);
+  background: linear-gradient(var(--bg-top), var(--bg-bottom)) fixed, var(--bg);
+  color: var(--ink);
   font: 16px/1.5 system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
 }
@@ -27,5 +31,5 @@
 .help button {
   width: 100%; padding: 18px; border: 0; border-radius: 14px;
-  background: var(--accent); color: #fff; font-size: 1.1rem; font-weight: 600;
+  background: var(--accent); color: var(--on-accent); font-size: 1.1rem; font-weight: 600;
 }
 .help button:disabled { background: #3a3f4d; color: var(--dim); }
@@ -50,5 +54,4 @@
 
 /* ── De feed ──────────────────────────────────────────────────────────── */
-.cards { display: grid; gap: 12px; }
 .post { background: var(--card); border-radius: 12px; padding: 12px 14px; border: 2px solid transparent; }
 .post .avatar { width: 28px; height: 28px; border-radius: 50%; object-fit: cover; }
@@ -84,5 +87,5 @@
 dialog#help-dialog menu { display: flex; gap: 8px; justify-content: flex-end; margin: 14px 0 0; padding: 0; }
 dialog#help-dialog button { border: 0; border-radius: 10px; padding: 10px 14px; background: #2a3342; color: var(--ink); font: inherit; }
-dialog#help-dialog button.primary { background: var(--accent); color: #fff; font-weight: 600; }
+dialog#help-dialog button.primary { background: var(--accent); color: var(--on-accent); font-weight: 600; }
 
 /* Voor schermlezers, niet voor het oog. */
@@ -138,5 +141,5 @@
   background: #131a25; color: var(--ink); padding: 10px 16px; font: inherit;
 }
-#thread-form button { border: 0; border-radius: 999px; padding: 10px 18px; background: var(--accent); color: #fff; font: inherit; font-weight: 600; }
+#thread-form button { border: 0; border-radius: 999px; padding: 10px 18px; background: var(--accent); color: var(--on-accent); font: inherit; font-weight: 600; }
 
 /* ── Het zwaai-paneel ─────────────────────────────────────────────────── */
@@ -148,5 +151,5 @@
 dialog#wave-dialog h2 { margin: 0 0 12px; font-size: 1.05rem; }
 .wave-answers { display: grid; gap: 8px; }
-.wave-answers button { border: 0; border-radius: 10px; padding: 12px; background: var(--accent); color: #fff; font: inherit; font-weight: 600; }
+.wave-answers button { border: 0; border-radius: 10px; padding: 12px; background: var(--accent); color: var(--on-accent); font: inherit; font-weight: 600; }
 #wave-cancel { margin-top: 10px; border: 0; background: none; color: var(--dim); font: inherit; }
 
@@ -170,5 +173,5 @@
 .feed-head { display: flex; align-items: center; gap: 12px; }
 .feed-head h2 { margin: 24px 0 10px; }
-#compose-open { margin-left: auto; border: 0; border-radius: 999px; padding: 8px 16px; background: var(--accent); color: #fff; font: inherit; font-weight: 600; }
+#compose-open { margin-left: auto; border: 0; border-radius: 999px; padding: 8px 16px; background: var(--accent); color: var(--on-accent); font: inherit; font-weight: 600; }
 
 dialog#compose-dialog {
@@ -180,5 +183,5 @@
 .compose-head #compose-cancel { border: 0; background: #2a3342; color: var(--ink); border-radius: 10px; padding: 8px 12px; font-size: 1rem; }
 .compose-head #compose-vis { flex: 1; border-radius: 10px; border: 1px solid #2a3342; background: #131a25; color: var(--ink); padding: 8px; font: inherit; }
-.compose-head .primary { border: 0; border-radius: 10px; padding: 8px 16px; background: var(--accent); color: #fff; font: inherit; font-weight: 600; }
+.compose-head .primary { border: 0; border-radius: 10px; padding: 8px 16px; background: var(--accent); color: var(--on-accent); font: inherit; font-weight: 600; }
 .compose-head .primary:disabled { background: #3a3f4d; color: var(--dim); }
 #compose-text { width: 100%; border-radius: 12px; border: 1px solid #2a3342; background: #131a25; color: var(--ink); padding: 10px; font: inherit; resize: vertical; }
@@ -192,2 +195,38 @@
 .compose-tools .tool { font-size: 1.4rem; cursor: pointer; padding: 4px 8px; border-radius: 10px; background: #131a25; }
 .compose-tools .hint { margin-left: auto; }
+
+/* ── Het kaartraster: meer kolommen naarmate er ruimte is ─────────────── */
+/* Robins wens (12-8): op desktop net als op mobiel en tablet MEERDERE
+   kolommen. auto-fill met een minimum vult zelf op: één kolom op een smalle
+   telefoon, twee op een tablet, drie of meer op een breed scherm. */
+.cards {
+  display: grid;
+  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
+  gap: 12px;
+  align-items: start;
+}
+
+/* ── De mini-speler ───────────────────────────────────────────────────── */
+#mini-player {
+  position: fixed; left: 12px; right: 12px; bottom: calc(12px + env(safe-area-inset-bottom));
+  z-index: 45; display: flex; align-items: center; gap: 10px;
+  padding: 8px 12px; border-radius: 14px;
+  background: var(--card); box-shadow: 0 6px 24px rgba(0,0,0,.4);
+  max-width: 520px; margin: 0 auto;
+}
+#mini-player #mini-toggle { border: 0; border-radius: 50%; width: 40px; height: 40px; background: var(--accent); color: var(--on-accent); font-size: 1rem; }
+#mini-player #mini-title { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
+#mini-player #mini-close { border: 0; background: none; color: var(--dim); font-size: 1rem; }
+
+/* ── De themakiezer ───────────────────────────────────────────────────── */
+.icon-btn { border: 0; background: #2a3342; border-radius: 999px; width: 38px; height: 38px; font-size: 1.1rem; }
+dialog#theme-dialog {
+  border: 0; border-radius: 16px; padding: 18px; max-width: 320px; width: calc(100% - 48px);
+  background: var(--card); color: var(--ink); text-align: center;
+}
+dialog#theme-dialog::backdrop { background: rgba(0,0,0,.4); }
+dialog#theme-dialog h2 { margin: 0 0 14px; font-size: 1.05rem; }
+.swatches { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; }
+.swatch { width: 100%; aspect-ratio: 1; border: 3px solid transparent; border-radius: 50%; cursor: pointer; }
+.swatch.chosen { border-color: var(--ink); }
+#theme-close { margin-top: 14px; border: 0; background: none; color: var(--dim); font: inherit; }
