diff --git a/ALICIA.md b/ALICIA.md
new file mode 100644
index 0000000..9c043bb
--- /dev/null
+++ b/ALICIA.md
@@ -0,0 +1,165 @@
+# ALICIA.md — NOVA Control Reparatur
+
+**Auftrag:** Behebe 26 binäre Gates in `index.html`. Jedes Gate ist ein klares Ja/Nein-Kriterium — erst erfüllt, wenn nachweisbar wahr.
+
+**Repo:** `git@git.datenhimmel.work:danielkrause/nova-control.git`
+**Branch:** `master`
+**Datei:** Nur `index.html` — eine Datei, kein Framework, keine Libs, kein CDN, offline.
+
+---
+
+## Arbeitsweise
+
+1. **Gate für Gate.** Nicht mehrere auf einmal. Ein Gate → implementieren → testen → commit.
+2. **Vor jedem Commit:** `index.html` im Browser öffnen und das Gate manuell verifizieren.
+3. **Commit-Message:** `fix: P0.1 Datei-Dialog entfernt` o.ä.
+4. **Push nach jeder Phase** (P0, P1, P2) — nicht nach jedem einzelnen Gate.
+
+## Reihenfolge (P0 → P1 → P2)
+
+### P0 — BLOCKER (zuerst, weil App sonst beim Start kaputt)
+
+**P0.1 — Datei-Dialog**
+- Zeile mit `document.getElementById('imp').click();` **löschen**
+- Test: Seite laden → KEIN Datei-Dialog
+
+**P0.2 — Command-Palette**
+- `rp()` wird nie aufgerufen → `cmds` bleibt `[]`
+- `rp()` auf ≥8 Befehle erweitern: Board, Streaks, Insights, Neues Task, Import, Export, Reset/Demo, 500 Tasks
+- `ld()` ruft am Ende `rp()` auf, dann `inipal()` beim Öffnen der Palette
+- Tasks dynamisch als anspringbare Einträge in die Liste
+- Test: Cmd+K → Liste zeigt ≥8 Einträge
+
+**P0.3 — Dark Mode**
+- `:root` hat nur Hell-Werte, `[data-theme="dark"]`-Block fehlt
+- CSS: `[data-theme="dark"]` mit `--bg`, `--surface`, `--text`, `--border`
+- `at()`: `matchMedia('(prefers-color-scheme:dark)').addEventListener('change', ...)` für Live-Reaktion
+- `localStorage` für Persistenz (existiert via `sv()`)
+- Test: 🌙 klicken → Hintergrund dunkel. Reload → bleibt dunkel.
+
+### P1 — KERN-FEATURES
+
+**P1.1 — Maus-Drag & Drop**
+- HTML5 DnD API: `draggable="true"` auf `.task`
+- `dragstart`/`dragover`/`drop` Events
+- Drop-Indikator (gestrichelter Rahmen oder Platzhalter)
+- Inter-Spalte (Status wechselt) + Intra-Spalte (Reihenfolge)
+- Nach Drop: `sv()` + `rv()`
+- Test: Task von Backlog nach Aktiv ziehen. Nach Reload noch da.
+
+**P1.2 — Tastatur-DnD**
+- Fokussiertes Task: Ctrl+Alt+Pfeiltasten
+- ←→: Spalte wechseln | ↑↓: Position in Spalte
+- `
` für Status-Ansagen
+- Test: Nur Tastatur, Task durch alle 4 Spalten bewegen.
+
+**P1.3 — Feld-Schema**
+- `op()`-Create speichert Fälligkeit als `du`, Board liest `d`
+- `du` → `d` vereinheitlichen (in Create + Edit)
+- `ldDemo()` und Render prüfen: benutzen die `d`?
+- Test: Task mit Datum anlegen → Reload → Datum noch da.
+
+**P1.4 — Streak-Berechnung**
+- Pro Habit: aktuelle Serie + längste Serie
+- Regeln: Wert > 0 = erfüllt. Tag mit 0 = Bruch. Heute noch nicht erfüllt = kein Bruch.
+- Anzeige im Streak-View
+- Test: Serie bricht bei 0, läuft weiter wenn heute noch kein Wert.
+
+**P1.5 — Export**
+- `exportData()`: `{version:1, tasks, habits, theme}` als JSON-Blob → Download
+- Command "Export" in Palette
+- Import validiert `version` + `tasks` Array
+- Test: Export → localStorage löschen → Import → identischer Zustand.
+
+**P1.6 — Zweiter Chart + Trend-Wochen**
+- `