diff --git a/VERSION b/VERSION
index 555d7ba..cd94665 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-0.4.64-beta
+0.4.65-beta
diff --git a/db/024_creative_pupil_levels.sql b/db/024_creative_pupil_levels.sql
new file mode 100644
index 0000000..dd6170f
--- /dev/null
+++ b/db/024_creative_pupil_levels.sql
@@ -0,0 +1,7 @@
+-- Kleurplaten gebruiken dezelfde klas-standaard-met-leerling-override als de
+-- andere vakgebieden. Bestaande niveaukeuzes blijven ongewijzigd; alleen de
+-- toegestane waarde 'creatief' wordt aan de constraint toegevoegd.
+ALTER TABLE pupil_levels DROP CONSTRAINT IF EXISTS pupil_levels_subject_check;
+ALTER TABLE pupil_levels
+ ADD CONSTRAINT pupil_levels_subject_check
+ CHECK (subject IN ('taal','rekenen','world','creatief'));
diff --git a/public/css/coloring.css b/public/css/coloring.css
new file mode 100644
index 0000000..2e2e7df
--- /dev/null
+++ b/public/css/coloring.css
@@ -0,0 +1,46 @@
+/* Thematische kleurplaten */
+.coloring-app{height:100%;min-height:0;display:flex;flex-direction:column;background:var(--surface);color:var(--ink)}
+.coloring-choices,.coloring-tools{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:8px 10px;border-bottom:1px solid var(--line);background:color-mix(in srgb,var(--orange) 7%,var(--surface))}
+.coloring-choices label{display:grid;grid-template-columns:auto minmax(120px,1fr);align-items:center;gap:6px;color:var(--muted);font-size:11px;font-weight:850}
+.coloring-choices select{height:34px;max-width:230px;border:1px solid var(--line);border-radius:9px;padding:0 28px 0 9px;background:var(--surface);color:var(--ink);font:inherit;font-weight:750}
+.coloring-fit{margin-left:auto;padding:5px 9px;border-radius:999px;background:var(--surface);color:var(--muted);font-size:11px;font-weight:800;white-space:nowrap}
+.coloring-tools{gap:6px;background:var(--surface)}
+.coloring-tool-buttons,.coloring-palette,.coloring-sizes{display:flex;align-items:center;gap:4px;padding:3px;border-radius:11px;background:var(--surface-2)}
+.coloring-tools button{width:36px;height:36px;display:grid;place-items:center;border:0;border-radius:9px;background:transparent;color:var(--ink);font:inherit;font-size:18px;cursor:pointer}
+.coloring-tools button:is(:hover,:focus-visible),.coloring-tools button.on{background:var(--surface);box-shadow:0 1px 5px rgba(30,50,90,.18)}
+.coloring-tool-buttons button.on{outline:2px solid var(--orange);outline-offset:-2px}
+.coloring-color i{width:22px;height:22px;display:block;border:1px solid rgba(38,52,74,.22);border-radius:50%;box-shadow:inset 0 0 0 1px rgba(255,255,255,.18)}
+.coloring-color.on{outline:2.5px solid var(--ink);outline-offset:-3px}
+.coloring-size i{display:block;border-radius:50%;background:var(--ink)}
+.coloring-size.on{outline:2px solid var(--orange);outline-offset:-2px}
+.coloring-custom{display:flex;align-items:center;gap:5px;color:var(--muted);font-size:10px;font-weight:800}
+.coloring-custom input{width:36px;height:36px;padding:3px;border:1px solid var(--line);border-radius:9px;background:var(--surface);cursor:pointer}
+.coloring-tools .coloring-reset{margin-left:auto;background:var(--red-soft);color:var(--red)}
+.coloring-tools .coloring-done{width:auto;min-width:112px;padding:0 12px;color:#fff;font-size:13px}
+.coloring-stage{flex:1;min-height:0;overflow:auto;display:grid;place-items:center;padding:12px;background:linear-gradient(135deg,var(--surface-2),color-mix(in srgb,var(--purple) 5%,var(--surface)))}
+.coloring-paper{position:relative;width:min(100%,900px);aspect-ratio:4/3;flex:none;overflow:hidden;border:1px solid var(--line);border-radius:16px;background:#fff;box-shadow:0 10px 28px rgba(30,50,90,.14);isolation:isolate}
+.coloring-art,.coloring-paper canvas{position:absolute;inset:0;width:100%;height:100%}
+.coloring-art svg{width:100%;height:100%;display:block;background:#fff}
+.coloring-art [hidden]{display:none}
+.coloring-paper canvas{z-index:2;touch-action:none;cursor:crosshair;mix-blend-mode:multiply}
+.coloring-app[data-tool="bucket"] .coloring-art{cursor:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30'%3E%3Ctext y='24' font-size='23'%3E%F0%9F%AA%A3%3C/text%3E%3C/svg%3E") 6 24,pointer}
+.coloring-app[data-tool="bucket"] .coloring-art [data-fillable]{pointer-events:all}
+.coloring-hint{min-height:30px;padding:7px 11px;color:var(--muted);font-size:11px;font-weight:700;text-align:center;background:var(--surface)}
+.widget[data-widget="coloring"]{--widget-accent:var(--orange)}
+
+@media(max-width:620px){
+ .coloring-choices,.coloring-tools{padding:6px;gap:4px}
+ .coloring-choices label{grid-template-columns:1fr;gap:2px;flex:1;min-width:125px}
+ .coloring-choices select{width:100%;max-width:none;height:32px}
+ .coloring-fit{width:100%;margin:0;text-align:center}
+ .coloring-tools button{width:32px;height:32px;font-size:16px}
+ .coloring-color i{width:18px;height:18px}
+ .coloring-custom span{display:none}.coloring-custom input{width:32px;height:32px}
+ .coloring-tools .coloring-reset{margin-left:0}
+ .coloring-tools .coloring-done{min-width:90px;font-size:11px}
+ .coloring-stage{place-items:start center;padding:6px}
+ .coloring-paper{min-width:360px;border-radius:10px}
+ .coloring-hint{font-size:10px}
+}
+@media(pointer:coarse){.coloring-tools button,.coloring-custom input{min-width:40px;min-height:40px}.coloring-choices select{min-height:40px}}
+@media(prefers-reduced-motion:reduce){.coloring-app *{scroll-behavior:auto!important}}
diff --git a/public/index.html b/public/index.html
index a3c7284..fddacc4 100644
--- a/public/index.html
+++ b/public/index.html
@@ -7,6 +7,7 @@
+