# 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**
- `