Files
tsv08kulmbach-website/public/assets/css/base.css
fs a101b0c3ec Stadionzeitung, Veranstaltungen, News-Artikel, Lightbox und Anzeigen-Verteilung
Stadionzeitung: Live-Seiten (Tabellen, Ergebnisse, Vorschau, Termine, News,
Kontakt, Historie, Sportheim, Partner, Momente, Impressum), automatisches Cover,
Swipe-Viewer mit Vollbildmodus und die Druckfassung als Falt-Heft. Anzeigen
kommen jetzt aus dem Bestand und werden gleichmäßig verteilt, nie mehr als zwei
hintereinander (vorher vier Blöcke à fünf). Die Doppelseiten-Regel rechnet das
Skript selbst, statt sie von Hand zu prüfen.

Veranstaltungen: Bereich /veranstaltungen mit Detailseite pro Fest, Lebenszyklus
über das Datum (Ankündigung vor dem Fest, Rückblick danach), Galerie mit
Lightbox. veranstaltungen.json ist dritte Termin-Quelle, damit ein Fest nie
doppelt gepflegt wird.

News-Artikel als dritte dynamische Prefix-Route, gemeinsamer detail-head.

Behobene Fehler:
- Wappen-Kontexte setzten Zeilen-Layout auf .crest statt auf die Zeile; das
  Wappen wurde zum Grid, Vereinsname und Tore rutschten darunter zusammen
  (Ergebnis-Rückblick, Vorschau, Cover).
- --header-h (60px) unterschätzt die Kopfleiste um 32px (Logo 72px + 20px
  Versatz): neues abgeleitetes --header-space, sonst klebten Zurück-Links
  unter dem Logo.
- base_url in der Produktions-Config ohne www, während .htaccess auf www
  umleitet; preflight prüft das jetzt.
- .lightbox brauchte display:none mit (0,2,0), sonst lag das Overlay offen.

Neue Werkzeuge: bin/anzeige-add.php (Anzeigen-Bestand), bin/veranstaltung-bilder.php
(Plakate und Galerien, Alt-Texte folgen der Quelldatei), bin/qr.php (Druck-QR mit
Warnung, wenn base_url nicht auf die echte Domain zeigt).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NzeVVgMCrzCDJAKeLEdKr7
2026-07-31 14:55:27 +02:00

158 lines
4.0 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* ============================================================
BASE — Fonts, Typografie, Links, Fokus, Skip-Link
============================================================ */
@font-face {
font-family: 'Coolvetica';
src: url('../fonts/coolvetica.woff2') format('woff2');
font-weight: 400;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: 'Abel';
src: url('../fonts/abel.woff2') format('woff2');
font-weight: 400;
font-style: normal;
font-display: swap;
}
/* Nur für Fließtext auf der Stadionzeitungs-Vorwort-Seite (--ff-serif,
tokens.css) — self-hosted wie Coolvetica/Abel, keine Google-Fonts-CDN.
Quelle: PT Serif (ParaType, OFL-Lizenz). */
@font-face {
font-family: 'PT Serif';
src: url('../fonts/pt-serif.woff2') format('woff2');
font-weight: 400;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: 'PT Serif';
src: url('../fonts/pt-serif-italic.woff2') format('woff2');
font-weight: 400;
font-style: italic;
font-display: swap;
}
/* Nur für die Unterschrift des Vorwort-Unterzeichners in der Stadionzeitung
(--ff-signature, tokens.css) — handschriftliche Signatur-Anmutung wie in
der Canva-Vorlage. Self-hosted, keine Google-Fonts-CDN.
Quelle: Mr Dafoe (Sudtipos, OFL-Lizenz), Latin-Subset inkl. Umlaute —
von Felix aus sechs OFL-Kandidaten ausgewählt (29.07.2026). */
@font-face {
font-family: 'Mr Dafoe';
src: url('../fonts/mr-dafoe.woff2') format('woff2');
font-weight: 400;
font-style: normal;
font-display: swap;
}
body {
font-family: var(--ff-body);
font-size: var(--fs-600);
font-weight: var(--fw-regular);
line-height: var(--lh-body);
color: var(--clr-text);
background-color: var(--clr-bg);
/* WebP primär (deutlich sauberere Textur), JPEG-Fallback für Alt-Browser */
background-image: url('../img/background.jpg');
background-image: image-set(url('../img/background.webp') type('image/webp'));
background-size: 100% auto;
background-attachment: fixed;
}
@media (max-width: 768px) {
body {
/* fixed-Attachment ruckelt auf Mobile */
background-attachment: scroll;
background-size: auto;
}
}
h1,
h2,
h3,
h4,
h5,
h6 {
font-weight: var(--fw-regular);
line-height: var(--lh-heading);
text-transform: uppercase;
text-wrap: balance;
}
/* h1h3 tragen Coolvetica: alle liegen über der 28px-Grenze (--fs-650). */
h1,
h2,
h3 {
font-family: var(--ff-heading);
}
h1 { font-size: var(--fs-900); }
h2 { font-size: var(--fs-800); }
h3 { font-size: var(--fs-700); }
/* h4h6 laufen über Abel statt Coolvetica. Coolvetica ist Condensed mit nur
einem Schnitt und wird in Uppercase unter --fs-650 (28px) unleserlich — diese
Ebenen liegen aber naturgemäß darunter. Abel + Sperrung hält sie lesbar und
trotzdem als Auszeichnung erkennbar; die Regel aus CLAUDE.md kann hier damit
gar nicht mehr verletzt werden. Zeilenhöhe zurück auf Fließtext-Maß, weil
--lh-heading (0.9) nur für die extremen Coolvetica-Größen gedacht ist. */
h4,
h5,
h6 {
font-family: var(--ff-body);
line-height: 1.2;
letter-spacing: var(--ls-caps);
}
h4 { font-size: var(--fs-650); }
h5 { font-size: var(--fs-600); }
h6 { font-size: var(--fs-500); }
a {
color: inherit;
text-decoration-thickness: 1px;
text-underline-offset: 0.2em;
}
a:hover {
color: var(--clr-text-muted);
}
:focus-visible {
outline: var(--focus-ring);
outline-offset: var(--focus-offset);
border-radius: 2px;
}
::selection {
background: var(--clr-accent);
color: var(--clr-text);
}
.skip-link {
position: absolute;
top: -100%;
left: 1rem;
z-index: 100;
padding: 0.75em 1.25em;
background: var(--clr-accent);
color: var(--clr-text);
text-decoration: none;
border-radius: 0 0 var(--radius-btn) var(--radius-btn);
}
.skip-link:focus-visible {
top: 0;
color: var(--clr-text);
}
/* Scrollbar dezent dunkel */
html {
scrollbar-width: thin;
scrollbar-color: var(--clr-bg-corporate) transparent;
}