diff --git a/tasks/space-coloring/CLAUDE.md b/tasks/space-coloring/CLAUDE.md
new file mode 100644
index 0000000..d617304
--- /dev/null
+++ b/tasks/space-coloring/CLAUDE.md
@@ -0,0 +1,76 @@
+# Space Coloring Task Type
+
+**Theme:** nms (`assets/themes/nms/`)
+
+Full-page line-art coloring worksheets for kids. Each page is a single A4 portrait scene from a No Man's Sky-inspired universe: a detailed spaceship surrounded by asteroids, planets, and floating space artifacts. Header and footer are kept minimal so the coloring image dominates.
+
+## Layout
+
+- **Page:** A4 (210mm x 297mm), portrait, white background
+- **Header:** 16mm — small uppercase wordmark left, title centered, scene number right (`NN / NN`)
+- **Main:** flex-1, image centered with `object-contain`, 8mm side padding, 3mm vertical padding
+- **Footer:** 32mm — `footers/planet{1-9}.jpeg` with linear-gradient mask (transparent at top, solid at bottom), scene legend overlaid (italic, centered)
+
+## Coloring Image Assets
+
+- **Path:** `assets/themes/nms/coloring-pages/coloring{N}.png`
+- **Raw originals:** `assets/themes/nms/coloring-pages/raw/`
+- **Dimensions:** 864 x 1184 (ratio ~0.73). Fit cleanly inside a ~190mm x ~260mm area on A4.
+- **Style:** clean black bold outlines, no shading, no gray fills, pure white background, kid-friendly cartoon detail.
+
+## Image Generation
+
+Each coloring image is generated via the gen-image skill (Banatie API). Per-scene prep folders live in `temp/scene{N}/` with:
+- `prompt.md` — full prompt + legend + CLI command
+- `ref-ship-*.jpeg` — spaceship reference (from `hero-images/`)
+- `ref-asteroid*.png` — asteroid reference (from `items/asteroids/`)
+
+### Composition rules (every scene)
+
+- Main subject: one spaceship in the center foreground, lots of mechanical detail
+- 2-3 large detailed asteroids in the foreground
+- 5-10 smaller asteroids in the background
+- A planet (full or partial) in one corner as background
+- A few floating space artifacts (crystals, debris, alien orbs, satellite shards)
+- Action context (firing, mining, scanning, hiding, exploring)
+- 3D depth, like a video-game screenshot
+- Clean bold outlines only — no shading, hatching, or gray fills
+- White background
+
+### Settings
+
+- `--aspect-ratio 4:3` (portrait, fits A4)
+- `--template minimalist`
+- `--ref
` + `--ref ` (two refs, max)
+
+## Scene Legends
+
+Every page has a story legend in the footer (e.g. "Last Stand at Veridian Belt — a heavy gunship fires its twin cannons..."). The first phrase (scene title) is shown in `text-indigo-700` Fredoka, the rest in italic `text-indigo-950`. Keep legends to 1-2 short sentences.
+
+## Color Palette
+
+| Element | Class |
+|---------|-------|
+| Title | `text-indigo-950` |
+| Wordmark | `text-indigo-300` |
+| Page indicator | `text-indigo-400` |
+| Legend body | `text-indigo-950` (italic) |
+| Legend title | `text-indigo-700` (Fredoka) |
+| Header divider | `border-indigo-100` |
+
+## Scripts
+
+- `scripts/generate.mjs` — copies template -> output, runs `postGenerate()`. No data layer (coloring pages have no editable parameters).
+
+## Editor
+
+None. Coloring pages have no editable data — nothing to move, scale, or rotate inside a printed line-art page.
+
+## Adding a Page
+
+1. Drop a new prep folder in `temp/scene{N}/` with `prompt.md` + ref images
+2. Generate the line-art via gen-image skill into `assets/themes/nms/coloring-pages/coloring{N}.png`
+3. Update `.md` with the new scene legend
+4. Duplicate a page block in `.template.html`, swap the image path, footer planet, page indicator, and legend
+5. Run `generate.mjs` and verify screenshot
+6. Update `index.html` doc card (page count)
diff --git a/tasks/space-coloring/docs/space-coloring-1.md b/tasks/space-coloring/docs/space-coloring-1.md
new file mode 100644
index 0000000..99d19e3
--- /dev/null
+++ b/tasks/space-coloring/docs/space-coloring-1.md
@@ -0,0 +1,32 @@
+# Space Coloring 1
+
+**Theme:** nms
+**Type:** space-coloring
+**Pages:** 3
+
+## Concept
+
+Full-page line-art coloring worksheets. Each page is one A4 portrait scene from the No Man's Sky universe: a spaceship surrounded by asteroids, planets, and floating space artifacts. Minimal header (title) and minimal footer (planet strip + scene legend).
+
+## Pages
+
+### Page 1 — Last Stand at Veridian Belt
+**Image:** `assets/themes/nms/coloring-pages/coloring1.png`
+**Legend:** "Last Stand at Veridian Belt — a heavy gunship fires its twin cannons at incoming asteroids before they smash into the planet below."
+**Footer asset:** `assets/themes/nms/footers/planet3.jpeg`
+
+### Page 2 — Ore Hunter's Catch
+**Image:** `assets/themes/nms/coloring-pages/coloring2.png`
+**Legend:** "Ore Hunter's Catch — a rugged mining dropship reaches out with its grappling claw to crack open a giant asteroid rich with crystal ore."
+**Footer asset:** `assets/themes/nms/footers/planet6.jpeg`
+
+### Page 3 — The Whispering Cluster
+**Image:** `assets/themes/nms/coloring-pages/coloring3.png`
+**Legend:** "The Whispering Cluster — a sleek explorer sweeps its scanner across a spire-shaped asteroid field hiding the ruins of an ancient alien satellite."
+**Footer asset:** `assets/themes/nms/footers/planet8.jpeg`
+
+## Notes
+
+- All images are 864x1184 (ratio ~0.73), fit A4 portrait cleanly inside a 190mm × ~260mm area.
+- No `data.json` layer — the template is the final output.
+- Header uses Fredoka font for a friendly title.
diff --git a/tasks/space-coloring/docs/space-coloring-1.template.html b/tasks/space-coloring/docs/space-coloring-1.template.html
new file mode 100644
index 0000000..bc0e775
--- /dev/null
+++ b/tasks/space-coloring/docs/space-coloring-1.template.html
@@ -0,0 +1,96 @@
+
+
+
+
+
+
+
+
+
+ Space Coloring — Adventures of the Asteroid Belt
+
+
+
+
+
+
+
+
+ No Man's Coloring
+ Space Coloring — Asteroid Belt Adventures
+ 01 / 03
+
+
+
+
+
+
+
+
+
+
+ No Man's Coloring
+ Space Coloring — Asteroid Belt Adventures
+ 02 / 03
+
+
+
+
+
+
+
+
+
+
+ No Man's Coloring
+ Space Coloring — Asteroid Belt Adventures
+ 03 / 03
+
+
+
+
+
+
+
+
+
diff --git a/tasks/space-coloring/index.html b/tasks/space-coloring/index.html
new file mode 100644
index 0000000..e6cbbef
--- /dev/null
+++ b/tasks/space-coloring/index.html
@@ -0,0 +1,155 @@
+
+
+
+
+
+ Space Coloring — Space Math Adventures
+
+
+
+
+
+
+
+
+
← All Categories
+
+
+
+
+
+
+
+
+
+
Asteroid Belt Adventures
+
+ 3 pages
+ Coloring
+ Three full-page line-art scenes: a gunship’s last stand, a mining dropship’s catch, and an explorer’s mysterious cluster.
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tasks/space-coloring/scripts/generate.mjs b/tasks/space-coloring/scripts/generate.mjs
new file mode 100644
index 0000000..464dbd3
--- /dev/null
+++ b/tasks/space-coloring/scripts/generate.mjs
@@ -0,0 +1,38 @@
+#!/usr/bin/env node
+
+/**
+ * Generate output HTML from template for space-coloring documents.
+ *
+ * Usage: node generate.mjs
+ * Example: node generate.mjs space-coloring-1
+ *
+ * Coloring pages have no editable data layer — the template IS the output.
+ * If a data.json exists in the future, it's currently ignored.
+ */
+
+import { readFileSync, writeFileSync, existsSync } from 'fs';
+import { join, dirname } from 'path';
+import { fileURLToPath } from 'url';
+import { postGenerate } from '../../../src/scripts/post-generate.mjs';
+
+const __dirname = dirname(fileURLToPath(import.meta.url));
+const docsDir = join(__dirname, '..', 'docs');
+
+const docId = process.argv[2];
+if (!docId) {
+ console.error('Usage: node generate.mjs ');
+ process.exit(1);
+}
+
+const templatePath = join(docsDir, `${docId}.template.html`);
+const outputPath = join(docsDir, `${docId}.output.html`);
+
+if (!existsSync(templatePath)) {
+ console.error(`Template not found: ${templatePath}`);
+ process.exit(1);
+}
+
+const html = readFileSync(templatePath, 'utf-8');
+writeFileSync(outputPath, html);
+console.log(`Generated: ${outputPath}`);
+await postGenerate(outputPath);