feat: Onepage nach Filmcamp-Gliederung umgebaut

- Figtree als einzige Schrift, Logo mittig in fester Kopfzeile
- Headerbild ueber volle Breite und Hoehe, ohne Preis, mit Terminleiste
- "Was dich erwartet" stellt die Villa mit animierter Bilderfolge vor,
  darunter Tagesablauf als Karussell (Programm folgt als PDF)
- Preis: regulaerer Preis durchgestrichen, kein Verkaufsstartdatum,
  Ueberschrift "Jetzt Platz sichern mit Early Bird"
- Team als "Mit dabei", danach drei Reels im Hochformat
- Logo, Headerbild, Portraets und Reels ueber feste Dateinamen im
  Medienverzeichnis (docs/MEDIEN.md), ohne Neustart austauschbar
- Widerrufsbelehrung im Admin pflegbar, Seite /widerruf, Live-Verkauf
  ohne Freigabe gesperrt
- Anreise: Abholung am Bahnhof Firenze Santa Maria Novella
- Booking-Link entfernt, Gedankenstriche aus Kundentexten entfernt

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
This commit is contained in:
Nick SzaunigandClaude Opus 5.5 committed 2026-10-01 23:53:18 +02:00
1 parent 3cba3e2341
commit 7203cd1e6e
37 files changed
+962 -517

No files matched your search

+3
View File
@@ -17,6 +17,7 @@ const TYPES: Record<string, string> = {
".png": "image/png",
".webp": "image/webp",
".avif": "image/avif",
".svg": "image/svg+xml",
".mp4": "video/mp4",
".webm": "video/webm",
".vtt": "text/vtt",
@@ -48,6 +49,8 @@ export async function GET(request: Request, { params }: { params: Promise<{ path
"Accept-Ranges": "bytes",
"Cache-Control": "public, max-age=86400",
"X-Content-Type-Options": "nosniff",
// SVG (Logo) direkt aufgerufen: keine Skripte, keine Nachladungen.
...(type === "image/svg+xml" ? { "Content-Security-Policy": "default-src 'none'; style-src 'unsafe-inline'; sandbox" } : {}),
};
const range = /^bytes=(\d*)-(\d*)$/.exec(request.headers.get("range") ?? "");