Social-Bild-Endpoint:
- Logo aus page_config (gefärbt in Theme-Akzent) statt Wordmark
- Status-Pill (ONLINE/Demo/Info/Anhörung/Stammtisch/Sitzung) aus
Titel-Keywords und Tags, mit eigener Farbe
- Description-Snippet unter Titel (Square + Story)
- Story-Format 1080x1920 ergänzt
- Theme-Varianten: wald (default), transparent-onlight,
transparent-ondark
- Uhrzeit unter Datum (2. Zeile) mit Clock-Icon im Akzent-Grün
- QR linksbündig bei Square + Story, kleiner (180px)
- Location-Pin top-aligned, Title-Fontsize dynamisch bei langen Titeln
Neue Route /termin/[slug]: OG-Meta-Tags für Link-Previews
(FB/WhatsApp/Twitter), JS-Redirect zu /kalender/#event-<slug>.
QR-Code im Social-Bild zeigt jetzt auf /termin/[slug].
Calendar-Block Aktionen reorganisiert:
- Primary-Reihe: Mehr Info, Auf Karte, Anhang
- Kompakte Toolbar (gerahmt): Kalender (ICS, Google) | Teilen (Link,
Share, Bild) | Im Grid
- Theme-Selector im Social-Modal mit Vorschau-Hintergrund-Indikator
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Single Button öffnet Vorschau-Modal mit beiden Formaten side-by-side.
Pro Format Download-Button. ESC + Click-outside schließen.
Endpoint generiert zusätzlich QR-Code (qrcode → PNG-Buffer), der
direkt auf den Termin im Kalender-Grid verweist
(/kalender/#event-<slug>). Pin-Icon, QR und Layout für OG (1200x630)
und Square (1080x1080).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Neuer Endpoint /api/social/calendar/[slug] rendert Termin via satori +
resvg zu PNG. Formate: og (1200x630) und square (1080x1080).
Gebrandetes Layout mit Datum, Titel, Ort. Inter-Font lazy von gstatic,
10min In-Memory-Cache pro Slug+Format.
CalendarBlock: zwei Download-Buttons pro Termin (Bild quer / quadr.).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Per-Status LayerGroups statt einer globalen labelLayer. syncLabels
respektiert hiddenStatuses und entfernt Labels für versteckte
Status-Kategorien beim Zoomen.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Marker-Klick zeigt jetzt zusätzlich Name, Rolle, Email und Telefon
der Kontaktpersonen pro Organisation.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Neuer Block-Typ `organisations_map`: Leaflet-Karte mit CircleMarkern für alle
Organisationen die ein location.lat/lng haben. Klick auf Marker öffnet
Detail-Panel (Desktop: rechte Sidebar / Mobile: Bottom Sheet) mit Name,
Standort, Beschreibung und Website-Link.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Neue Felder whatsapp/youtube (string) auf OrganisationEntry.
OrganisationsCard zeigt Icon-Buttons wenn gesetzt.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Subheadlines in page headers and post cards support inline markdown
(bold, italic, links) via marked.parseInline.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- KI-Prompt kopieren mit Ton/Haltung-Slidern und persönlichem Hinweis
- Output-Textarea editierbar (field-sizing: content, auto-height)
- Stepper zeigt Füllstand: Haken (komplett), gelb (leer), grau (unbesucht)
- Weiter-Buttons mit Tooltips bei leerem Schritt
- Auto-Generate beim Betreten von Step 4, live bei Eingabe-Änderungen
- Drag & Drop Umsortierung der Argumente in Step 4
- Step in localStorage persistiert (HMR-Fix)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Filter:
- Tag-Pill-Reihe in Step 2 oberhalb der Suche. Multi-Select, OR-Logik
zwischen Pills, AND mit Text-Suche. Pills aus allen Nicht-Fetch-Tags
der deduplizierten Fragmente, alphabetisch sortiert. "Filter
zurücksetzen" erscheint bei ≥1 aktivem Pill. Empty-State erklärt
was nicht matcht (Text/Pills/beides).
Akkordeons raus (Variante B):
- Gruppen-Header bleiben als sichtbare Trenner (Label + Anzahl + "Alle"-
Toggle), aber Click-to-Expand-Mechanik weg — Items immer offen.
expandedGroups + toggleGroup als dead code entfernt.
Bedienkomfort:
- Sticky Mobile-Footer für alle 5 Step-Nav-Rows: bottom-2 mit
weißem BG + Shadow + Backdrop-Blur. Auf Desktop unverändert (sm:static).
- Auto-Save-Indikator "✓ Gespeichert" rechts oben, blitzt 2s nach
jeder Mutation. Pure UI — wir speichern eh schon in localStorage.
- Auto-Focus per Svelte-Action beim Step-Wechsel: Step 2 → Such-Input,
Step 3 → Betroffenheit-Textarea, Step 4 → Name-Input.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Step 0 (Gebietskontext):
- Gebiets-Nummer (W-37) deutlich größer: text-4xl tracking-tight
- Detail-Felder als Cards: rounded-lg border-wald-200 bg-white/70 p-3 shadow-sm
- Icons (Gemeinden, Fläche, Anlagen geplant, Max. Höhe, Investor, Status)
oben links als eigenes Element statt inline; size-5 text-wald-600
- Labels: text-sm sm:text-base font-semibold text-wald-800 whitespace-nowrap
(kleiner auf Mobile damit "Anlagen geplant" in der Card bleibt)
- Werte: text-stein-600 (grau) mit mt-1 Abstand
- Steckbrief-<details> default open
Step 2 (Allgemeine Argumente):
- "Weiter"-Button nicht mehr disabled bei 0 Auswahl — Mindest-Auswahl
weggefallen, Anzahl nur im Label wenn >0
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- layout.server.ts: NavLink um optional children?: NavLink[] erweitert.
navHeader-Resolve von 'links' auf 'all' (navgroup-sub-links werden mit
aufgelöst). Resolver-Loop erkennt navgroup-Entries (_type==='navgroup'
oder Shape label+links) und baut NavLink mit Children + Parent-URL.
- Header.svelte: Desktop-Dropdown mit Hover/Focus-Open + ARIA (haspopup,
expanded, role=menu/menuitem). Mobile: collapsible Submenu via
openSubmenu-State, slide-animiert; "– Übersicht"-Link wenn Parent
selbst eine URL hat. isActiveTree(): Parent gilt aktiv wenn ein Child
aktiv ist.
- Overflow-Fix: .gradient-blob-bg setzt overflow:hidden → clipte den
Desktop-Dropdown. Neue Variante .gradient-blob-bg-inner als absoluter
Inner-Layer (eigenes overflow-hidden), Header selbst bleibt
overflow-visible. Bestehende .gradient-blob-bg-Nutzungen (z.B.
DeadlineBannerBlock) unverändert.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Notizfeld an jedem Argument (expanded) → erscheint im Output als "Anmerkung:"
- Einleitung und Abschluss in Step 5 via <details> editierbar
- Beide mit Zurücksetzen-Button auf Default
- Alles in localStorage persistiert
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- E-Mail-Button: mailto-Link wenn recipientEmail im Block gesetzt
- Name in Grußformel: "Mit freundlichen Grüßen\n\nMax Mustermann"
- Datum-Fix: heute in buildText() berechnet, nicht beim Render
- Disabled-Hint: roter Hinweis wenn Name fehlt
- "Alle ab" klappt Gruppe ein (Symmetrie zu "Alle" öffnet)
- Schritt X von Y unter Step-Indikator
- recipientEmail-Feld in StellingnahmeGeneratorBlockData
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>