
> **Update von v0.8.1:** keine Pflichtschritte – die Datenbank wird beim Start erweitert (Migration 39, Pens). Für den Abgleich per Bundle beide Seiten auf v0.9.0 bringen, den Server zuerst.

### Neu
- **Pens: Größe ziehen, Kacheln einklappen:** Die Linie zwischen Code und Ergebnis lässt sich ziehen (seitlich die Breite, oben die Höhe; Pfeiltasten 10 px, mit Shift 1 px, Doppelklick setzt zurück). Das Ergebnis zeigt seine Breite in Pixeln – praktisch zum Prüfen von Breakpoints. HTML, CSS und JS lassen sich einzeln einklappen (oben als schmaler Streifen, seitlich als Kopfzeile, mit Zeilenzahl). Größe und eingeklappte Bereiche merkt sich der Browser.
- **Pens: externe Bibliotheken, Import-Map, JSX/TSX:** Ein Zahnrad bei CSS und JS öffnet die Einstellungen – externe Stylesheets und Skripte (in fester Reihenfolge vor dem eigenen Code), eine Import-Map (`import … from 'vue'`) und die Sprache JavaScript, JSX oder TypeScript (TSX). JSX/TSX wandelt der Server per esbuild um. Vorlagen für React, Preact und Vue tragen die Import-Map ein und setzen ein Beispiel ein. Eigenes JS mit `import`/`export` läuft automatisch als Modul. Die öffentliche Code-Ansicht nennt die eingebundenen Dateien. API: Feld `resources` an Pens.
- **404-Protokoll als CSV:** Die Listen *Offen* und *Ignoriert* lassen sich je Reiter als CSV herunterladen. In *Ignoriert* spielt ein CSV-Import eine Liste ein (Spalte `Pfad` oder ein Pfad pro Zeile, mit Vorschau): Offene Adressen wandern samt Zähler herüber, noch nie aufgerufene werden vorab als ignoriert angelegt – etwa eine Liste bekannter Bot-Pfade für jede neue Website. Optional holt *Fehlende zurückholen* nicht aufgeführte Adressen zurück zu *Offen*. API: `GET /notfound/export`, `POST /notfound/import`.

### Behoben
- **Markdown im HTML darf eingerückt sein:** `{% filter markdown %}` (und `|markdown`) entfernt vor dem Umwandeln die gemeinsame Einrückung aller Zeilen. Bisher wurde eingerückter Text – wie ihn der Editor innerhalb verschachtelter Elemente automatisch erzeugt – zum Codeblock. Was relativ weiter eingerückt ist (Unterpunkte, Code), bleibt erhalten.
- **Formatieren lässt Filter-Blöcke unangetastet:** Der Inhalt von `{% filter %}…{% endfilter %}` wird nicht mehr als HTML-Fließtext umbrochen – Markdown blieb danach eine einzige Zeile. Läuft ein Filter-Block über HTML-Elementgrenzen hinweg, bricht das Formatieren mit einer Meldung ab, statt die Struktur zu verändern.
- **Weiterleitungen:** Die Website-Auswahl oben überdeckte bei mehreren Websites die Überschrift.

### Geändert
- **Coolify:** `docker-compose.coolify.yml` enthält außer `TZ` keine `${…}`-Variablen mehr – Coolify legte für jede ein Pflichtfeld an, das Passwort-Manager mit den Coolify-Zugangsdaten füllten. Optionales bei Bedarf in Coolify von Hand ergänzen; ohne Eintrag gelten die Vorgaben des CMS (unverändert).

