Files
tsv08kulmbach-website/public/assets/css/components.css
fs 88fceb67b1 Banner-Slider: Eigenwerbung-Slide "Hier könnte Ihre Werbung stehen"
House-Ad mit TSV-08-Wappen und echtem Foto (fussball-hero) statt der
Platzhalter-Slides: wirbt selbst für die Werbefläche, CTA führt intern aufs
Kontaktformular (#kontakt). Komponente um generische Props erweitert: variant
(CSS-Modifier), tag (Badge-Text) und cta.internal (interner Link ohne
target=_blank/rel=sponsored). Neue Styles: rote Glas-/Foto-Variante mit
gestricheltem "Werbeplatz frei"-Frame, rot-dunkler Verlauf für Lesbarkeit.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KDQZ6FuchNUh2bxSW9PeNv
2026-06-19 08:27:57 +02:00

2440 lines
51 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.
/* ============================================================
COMPONENTS — eine Sektion pro Komponente, Banner-Kommentare
============================================================ */
/* === hero === */
.hero {
position: relative;
display: grid;
align-items: end;
min-height: min(92vh, 900px);
padding-block: calc(var(--header-h) + 80px) var(--space-section);
overflow: hidden;
}
/* Kompakte Variante: schlanker Unterseiten-Header statt vollflächig. */
.hero--compact {
min-height: min(60vh, 560px);
padding-block: calc(var(--header-h) + 64px) 3.5rem;
}
.hero__media {
position: absolute;
inset: 0;
z-index: -1;
}
.hero__img {
width: 100%;
height: 100%;
object-fit: cover;
}
.hero__video {
position: absolute;
inset: 0;
width: 100%;
height: 100%;
object-fit: cover;
}
@media (prefers-reduced-motion: reduce) {
.hero__video {
display: none;
}
}
/* Dunkler Verlauf wie auf der alten Seite: oben transparent → unten Seitenhintergrund */
.hero__media::after {
content: '';
position: absolute;
inset: 0;
background: linear-gradient(180deg, rgb(20 20 20 / 0.25) 0%, rgb(20 20 20 / 0.55) 55%, var(--clr-bg) 100%);
}
.hero__content {
width: 100%;
}
.hero__title {
text-shadow: 0 2px 24px rgb(0 0 0 / 0.5);
}
/* Keyword-Subline innerhalb der h1 (SEO) — visuell kleinere zweite Zeile */
.hero__tagline {
display: block;
margin-top: 0.75rem;
font-size: var(--fs-600);
letter-spacing: 0.14em;
}
.hero__text {
margin-top: 1rem;
max-width: 60ch;
text-shadow: 0 1px 12px rgb(0 0 0 / 0.6);
}
.hero__actions {
display: flex;
flex-wrap: wrap;
gap: 0.75rem;
margin-top: 1.75rem;
}
/* Variante: Text mittig zentriert (z. B. Startseite) */
.hero--center {
align-items: center;
text-align: center;
}
.hero--center .hero__text {
margin-inline: auto;
}
.hero--center .hero__actions {
justify-content: center;
}
/* Variante: Editorial-Display (Startseite) — linksbündig unten, große Typo */
.hero--display .hero__media::after {
/* zusätzlicher Verlauf von links für Textlesbarkeit über dem Video */
background:
linear-gradient(90deg, rgb(10 10 10 / 0.62) 0%, rgb(10 10 10 / 0.25) 45%, transparent 70%),
linear-gradient(180deg, rgb(20 20 20 / 0.2) 0%, rgb(20 20 20 / 0.45) 55%, var(--clr-bg) 100%);
}
.hero__kicker {
display: flex;
align-items: center;
gap: 0.75rem;
margin-bottom: 1.25rem;
font-size: var(--fs-500);
text-transform: uppercase;
letter-spacing: 0.18em;
color: var(--clr-text);
}
.hero__kicker::before {
content: '';
width: 3rem;
height: 4px;
background: var(--clr-accent);
border-radius: 2px;
}
.hero--display .hero__title {
font-size: clamp(3.5rem, 2rem + 7.5vw, 7.5rem);
}
.hero--display .hero__tagline {
margin-top: 0.5rem;
font-size: clamp(1.75rem, 1rem + 2.5vw, 2.75rem);
letter-spacing: 0.1em;
color: rgb(255 255 255 / 0.88);
}
.hero__scroll-cue {
position: absolute;
left: 50%;
bottom: 1.25rem;
translate: -50% 0;
display: grid;
place-items: center;
width: 44px;
height: 44px;
color: var(--clr-text-muted);
font-size: 1.4rem;
transition: color var(--transition);
animation: scroll-cue-bounce 2.4s ease-in-out infinite;
}
.hero__scroll-cue:hover {
color: var(--clr-text);
}
@keyframes scroll-cue-bounce {
0%, 100% { transform: translateY(0); }
50% { transform: translateY(8px); }
}
/* === instagram === */
/* Sektions-Kopf zentriert (einheitlich mit partners/persons/…) */
.instagram > .container > h2,
.instagram > .container > .text-muted {
text-align: center;
}
.instagram > .container > .text-muted {
max-width: 60ch;
margin-inline: auto;
}
.instagram__grid {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 1rem;
margin-top: 2rem;
}
@media (max-width: 600px) {
.instagram__grid {
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 0.75rem;
}
}
.instagram__link {
position: relative;
display: block;
border-radius: var(--radius-card);
overflow: hidden;
box-shadow: var(--shadow-card);
}
.instagram__link img {
width: 100%;
height: auto;
/* Instagram-Portrait 1080x1350 */
aspect-ratio: 4 / 5;
object-fit: cover;
transition: transform var(--transition);
}
.instagram__link:hover img,
.instagram__link:focus-visible img {
transform: scale(1.05);
}
.instagram__badge {
position: absolute;
top: 0.75rem;
right: 0.75rem;
display: grid;
place-items: center;
width: 2rem;
height: 2rem;
background: rgb(0 0 0 / 0.6);
border-radius: 50%;
font-size: 0.8rem;
color: var(--clr-text);
}
.instagram__fallback {
margin-top: 1.5rem;
padding: 2.5rem;
background: var(--clr-glass-bg);
border: 1px solid var(--clr-glass-border);
border-radius: var(--radius-card);
text-align: center;
}
.instagram__fallback p {
margin-inline: auto;
}
.instagram__fallback .btn {
margin-top: 1rem;
}
/* === split (Bild/Text-Sektion) === */
.split__inner {
display: grid;
grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
align-items: center;
gap: 3rem;
}
/* Sanft aufgehelltes, durchgehendes Band über die volle Breite — generisch für
jede Sektion (Split via tinted: true im JSON, person-grid u.a. per Klasse).
Direkt aufeinanderfolgende tinted-Sektionen verschmelzen nahtlos. */
.section--tinted {
background: linear-gradient(180deg, rgb(255 255 255 / 0.06), rgb(255 255 255 / 0.035));
border-block: 1px solid rgb(255 255 255 / 0.1);
}
.section--tinted + .section--tinted {
border-top: 0;
}
.section--tinted:has(+ .section--tinted) {
border-bottom: 0;
}
/* Bild/Text-Sektionen im Band: mehr Luft nach oben und unten */
.split.section--tinted {
padding-block: clamp(4.5rem, 3.5rem + 3vw, 7.5rem);
}
.split--flip .split__text {
order: 2;
}
.split--flip .split__media {
order: 1;
}
.split__text p {
margin-top: 1rem;
}
.split__cta {
margin-top: 1.5rem;
}
.split__img {
width: 100%;
border-radius: var(--radius-card);
box-shadow: var(--shadow-card);
}
/* Mannschafts-„Über"-Sektion: ruhiges 4:3-Bild (nicht zu hoch), mit dem Text ausbalanciert. */
#ueber .split__img {
aspect-ratio: 4 / 3;
object-fit: cover;
object-position: center top;
}
@media (max-width: 992px) {
.split__inner {
grid-template-columns: 1fr;
gap: 2rem;
}
.split--flip .split__text {
order: 0;
}
.split--flip .split__media {
order: 0;
}
}
/* === stats === */
.stats {
position: relative;
padding-block: 7rem;
overflow: hidden;
}
.stats__media {
position: absolute;
inset: 0;
z-index: -1;
}
.stats__img {
width: 100%;
height: 100%;
object-fit: cover;
}
/* Abdunkeln + weiche Kanten: oben/unten Verlauf in den Seitenhintergrund,
damit kein harter "Streifen" entsteht */
.stats__media::after {
content: '';
position: absolute;
inset: 0;
background: linear-gradient(180deg,
var(--clr-bg) 0%,
rgb(15 15 15 / 0.72) 28%,
rgb(15 15 15 / 0.72) 72%,
var(--clr-bg) 100%);
}
.stats__list {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 2rem;
text-align: center;
}
@media (max-width: 600px) {
.stats__list {
grid-template-columns: 1fr;
}
}
.stats__item {
display: grid;
gap: 0.25rem;
}
.stats__value {
font-family: var(--ff-heading);
font-size: var(--fs-900);
line-height: var(--lh-heading);
color: var(--clr-accent);
text-shadow: 0 2px 18px rgb(0 0 0 / 0.55), 0 0 30px rgb(var(--clr-accent-rgb) / 0.35);
}
.stats__label {
font-size: var(--fs-500);
text-transform: uppercase;
letter-spacing: 0.08em;
color: var(--clr-text-muted);
}
/* === timeline (Vereinshistorie, Museums-Look) === */
.timeline-intro {
max-width: 60ch;
margin-inline: auto;
padding-block: 2.5rem 0;
text-align: center;
color: var(--clr-text-muted);
}
/* Sprung-Navigation: Jahres-Pills, klebt beim Scrollen oben */
.timeline-nav {
position: sticky;
top: 1rem;
z-index: 5;
display: flex;
justify-content: center;
margin-bottom: 3rem;
}
.timeline-nav__list {
display: flex;
flex-wrap: wrap;
justify-content: center;
gap: 0.4rem;
padding: 0.4rem;
background: rgb(10 10 10 / 0.82);
border: 1px solid var(--clr-glass-border);
border-radius: 999px;
backdrop-filter: blur(6px);
}
.timeline-nav a {
display: inline-block;
padding: 0.25em 0.85em;
font-family: var(--ff-heading);
/* Coolvetica unter ~28px wird unleserlich (Projekt-Faustregel) */
font-size: var(--fs-650);
letter-spacing: 0.06em;
text-transform: uppercase;
text-decoration: none;
color: var(--clr-text-muted);
border-radius: 999px;
transition: color var(--transition), background var(--transition);
}
.timeline-nav a:hover {
color: var(--clr-text);
}
.timeline-nav a.is-active {
color: var(--clr-text);
background: var(--clr-accent);
}
/* Mittellinie + Stationen */
.timeline {
position: relative;
display: grid;
gap: 4.5rem;
padding-block: 1rem 2rem;
}
.timeline::before {
content: '';
position: absolute;
top: 0;
bottom: 0;
left: 50%;
width: 2px;
transform: translateX(-50%);
background: linear-gradient(180deg,
transparent,
rgb(var(--clr-accent-rgb) / 0.55) 6%,
rgb(var(--clr-accent-rgb) / 0.55) 94%,
transparent);
}
.timeline__event {
position: relative;
width: calc(50% - 3.5rem);
}
.timeline__event:nth-child(even) {
margin-left: auto;
}
.timeline__marker {
position: absolute;
top: 0.6rem;
left: calc(100% + 3.5rem);
width: 16px;
height: 16px;
transform: translateX(-50%);
background: var(--clr-accent);
border-radius: 50%;
box-shadow: 0 0 0 4px rgb(var(--clr-accent-rgb) / 0.25), 0 0 18px rgb(var(--clr-accent-rgb) / 0.5);
}
.timeline__event:nth-child(even) .timeline__marker {
left: -3.5rem;
}
.timeline__year {
font-size: var(--fs-900);
color: var(--clr-text);
text-shadow: 0 2px 18px rgb(0 0 0 / 0.5);
margin-bottom: 1rem;
}
.timeline__event:nth-child(odd) .timeline__year {
text-align: right;
}
/* Museums-Rahmen: Foto wie ein aufgezogener Print, leicht gedreht */
.timeline__figure {
margin: 0;
padding: 0.9rem 0.9rem 1.1rem;
background: #f3efe4;
border-radius: 3px;
box-shadow: 0 12px 35px rgb(0 0 0 / 0.5);
transform: rotate(-1.2deg);
transition: transform var(--transition);
}
.timeline__event:nth-child(even) .timeline__figure {
transform: rotate(1.2deg);
}
.timeline__event:hover .timeline__figure {
transform: rotate(0deg) scale(1.02);
}
.timeline__figure img {
width: 100%;
height: auto;
display: block;
}
.timeline__text {
padding-top: 0.9rem;
font-size: var(--fs-500);
line-height: 1.45;
color: #3a372f;
}
/* Scroll-Reveal nur mit JS (js-reveal), sonst alles sichtbar */
.js-reveal .timeline__event {
opacity: 0;
translate: 0 28px;
transition: opacity 600ms ease, translate 600ms ease;
}
.js-reveal .timeline__event.is-visible {
opacity: 1;
translate: 0 0;
}
@media (max-width: 768px) {
.timeline::before {
left: 8px;
}
.timeline__event,
.timeline__event:nth-child(even) {
width: auto;
margin-left: 0;
padding-left: 2.5rem;
}
.timeline__marker,
.timeline__event:nth-child(even) .timeline__marker {
left: 8px;
}
.timeline__event:nth-child(odd) .timeline__year {
text-align: left;
}
}
/* === partners === */
.partners > .container {
text-align: center;
}
.partners > .container > p {
max-width: 60ch;
margin-inline: auto;
}
/* Intro-Abstand zur Überschrift einheitlich mit den anderen Sektionen */
.partners__intro {
margin-top: 1rem;
}
.partners__grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(180px, 220px));
justify-content: center;
align-items: center;
gap: 2rem;
margin-block: 2.5rem;
}
.partners__item {
display: grid;
place-items: center;
padding: 1.5rem;
/* Dunkles Glas — die Partner-Logos sind weiße Varianten */
background: var(--clr-glass-bg);
border: 1px solid var(--clr-glass-border);
border-radius: var(--radius-card);
min-height: 120px;
}
.partners__item img {
max-height: 80px;
width: auto;
max-width: 100%;
object-fit: contain;
}
/* === persons (Ansprechpartner-Visitenkarten) === */
.persons > .container {
text-align: center;
}
.persons__intro {
margin-inline: auto;
margin-top: 1rem;
max-width: 60ch;
color: var(--clr-text-muted);
}
/* Max. 3 pro Reihe; unvollständige Reihen (z. B. 3+2) zentrieren sich automatisch */
.persons__grid {
display: flex;
flex-wrap: wrap;
justify-content: center;
gap: 1.5rem;
margin-top: 2.5rem;
text-align: left;
}
.persons__grid > li {
flex: 0 1 calc((100% - 3rem) / 3);
min-width: 220px;
max-width: 340px;
}
.person-card {
display: grid;
height: 100%;
background: var(--clr-glass-bg);
border: 1px solid var(--clr-glass-border);
border-radius: var(--radius-card);
overflow: hidden;
transition: transform var(--transition), box-shadow var(--transition);
}
.person-card:hover {
transform: translateY(-4px);
box-shadow: var(--shadow-card);
}
.person-card__media img {
width: 100%;
height: auto;
aspect-ratio: 4 / 5;
object-fit: cover;
/* Ausschnitt nach oben → Gesicht bleibt im Bild, nicht der Bauch */
object-position: center top;
}
.person-card__body {
display: grid;
gap: 0.2rem;
padding: 1.1rem 1.2rem 1.2rem;
/* Verlauf knüpft an die dunklen Studiofotos an */
background: linear-gradient(180deg, rgb(20 20 20 / 0) 0%, rgb(20 20 20 / 0.35) 100%);
}
.person-card__department {
font-size: var(--fs-650);
letter-spacing: 0.04em;
}
.person-card__name {
color: var(--clr-text-muted);
}
.person-card__contact {
display: inline-flex;
align-items: center;
gap: 0.5rem;
margin-top: 0.5rem;
padding-block: 0.3rem;
color: var(--clr-text);
text-decoration: none;
font-size: var(--fs-500);
}
.person-card__contact .icon {
color: var(--clr-accent);
flex: none;
}
.person-card__contact span {
overflow-wrap: anywhere;
}
.person-card__contact:hover {
text-decoration: underline;
text-underline-offset: 0.25em;
}
/* === contact form === */
.contact__inner {
display: grid;
gap: 2.5rem;
justify-items: center;
}
.contact__intro {
max-width: 60ch;
text-align: center;
}
.contact__intro p {
margin-top: 1rem;
}
.form {
display: grid;
gap: 1.25rem;
width: 100%;
max-width: 720px;
padding: 2rem;
background: var(--clr-glass-bg);
border: 1px solid var(--clr-glass-border);
border-radius: var(--radius-card);
}
.form__row {
display: grid;
grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
gap: 1.25rem;
}
@media (max-width: 600px) {
.form__row {
grid-template-columns: 1fr;
}
}
.form__field {
display: grid;
gap: 0.4rem;
}
.form__field label {
font-size: var(--fs-500);
}
.form__field input,
.form__field select,
.form__field textarea {
width: 100%;
padding: 10px 12px;
background: var(--clr-glass-bg);
border: 1px solid var(--clr-glass-border-strong);
border-radius: var(--radius-btn);
color: var(--clr-text);
transition: border-color var(--transition), background var(--transition), box-shadow var(--transition);
}
.form__field input:hover,
.form__field select:hover,
.form__field textarea:hover {
border-color: rgb(255 255 255 / 0.55);
}
/* Eigener, deutlich sichtbarer Fokus-Ring statt des globalen Outlines */
.form__field input:focus-visible,
.form__field select:focus-visible,
.form__field textarea:focus-visible {
outline: none;
border-color: rgb(255 255 255 / 0.75);
box-shadow: 0 0 0 3px rgb(255 255 255 / 0.18);
}
.form__field ::placeholder {
color: rgb(255 255 255 / 0.45);
}
/* Fehlerzustand: per JS (aria-invalid) und nativ nach Nutzereingabe (:user-invalid) */
.form__field input[aria-invalid="true"],
.form__field select[aria-invalid="true"],
.form__field textarea[aria-invalid="true"],
.form__field input:user-invalid,
.form__field select:user-invalid,
.form__field textarea:user-invalid {
border-color: var(--clr-error);
}
.form__field select {
appearance: none;
padding-right: 2.5rem;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='9' fill='none'%3E%3Cpath d='M1 1l6 6 6-6' stroke='%23ffffff' stroke-width='2' stroke-linecap='round'/%3E%3C/svg%3E");
background-repeat: no-repeat;
background-position: right 0.9rem center;
}
.form__field select option {
background: var(--clr-bg);
color: var(--clr-text);
}
.form__note {
margin: 0;
font-size: var(--fs-400);
color: var(--clr-text-muted);
}
.form__required {
color: var(--clr-accent);
}
.form__hint {
font-size: var(--fs-400);
color: var(--clr-text-muted);
}
.form__error-msg {
font-size: var(--fs-400);
color: var(--clr-error);
}
.form button[disabled] {
opacity: 0.65;
cursor: progress;
}
.form__field textarea {
resize: vertical;
min-height: 8rem;
}
.form__field--checkbox {
grid-template-columns: auto 1fr;
align-items: start;
gap: 0.6rem;
}
.form__field--checkbox input {
/* 24px — Mindest-Zielgröße (WCAG 2.5.8) */
width: 1.5rem;
height: 1.5rem;
margin-top: 0.1rem;
accent-color: var(--clr-accent);
}
.form__field--checkbox label {
font-size: var(--fs-500);
}
/* Leer: unsichtbar, aber im Accessibility-Tree — display:none würde die
aria-live-Region abmelden und Screenreader verpassen die erste Meldung. */
.form__status:empty {
position: absolute;
width: 1px;
height: 1px;
overflow: hidden;
clip-path: inset(50%);
}
.form__success {
padding: 0.75rem 1rem;
border: 1px solid var(--clr-success);
border-radius: var(--radius-btn);
color: var(--clr-success);
}
.form__error {
padding: 0.75rem 1rem;
border: 1px solid var(--clr-error);
border-radius: var(--radius-btn);
color: var(--clr-error);
}
.form__submit {
margin: 0;
}
/* === Werbe-/Sponsoren-Banner (Slider) === */
.ad-banner {
--banner-interval: 6s;
}
/* Sektions-Kopf zentriert (einheitlich mit partners/persons/…) */
.ad-banner > .container > h2,
.ad-banner__subline {
text-align: center;
}
.ad-banner__subline {
margin-top: 0.75rem;
/* Volle Breite, damit der Dank in einer Zeile steht; auf Mobil bricht er natürlich um. */
max-width: none;
text-wrap: balance;
}
.ad-banner__track {
list-style: none;
margin: 2rem 0 0;
padding: 0;
}
.ad-banner__slide[hidden] {
display: none;
}
.ad-banner__slide {
display: grid;
grid-template-columns: 2fr 1fr;
gap: 2.5rem;
align-items: center;
padding: clamp(1.75rem, 1rem + 2vw, 3rem);
background: var(--clr-glass-bg);
border: 1px solid var(--clr-glass-border);
border-radius: var(--radius-card);
box-shadow: var(--shadow-card);
}
/* Optionaler Hintergrund pro Banner (data: "background").
Dunkler Verlauf über dem Bild hält Text & CTA links lesbar. */
.ad-banner__slide--bg {
background-image:
linear-gradient(to right, rgb(0 0 0 / 0.82), rgb(0 0 0 / 0.45) 60%, rgb(0 0 0 / 0.3)),
var(--banner-bg);
background-size: cover;
background-position: center;
border-color: transparent;
}
.ad-banner__slide--bg .ad-banner__text {
color: var(--clr-text);
}
.ad-banner__slide--bg .ad-banner__logo {
background: rgb(0 0 0 / 0.4);
border-color: rgb(255 255 255 / 0.3);
backdrop-filter: blur(2px);
}
@media (max-width: 768px) {
/* Auf Mobil läuft der Verlauf nach unten, damit der gestapelte Text lesbar bleibt. */
.ad-banner__slide--bg {
background-image:
linear-gradient(to bottom, rgb(0 0 0 / 0.82), rgb(0 0 0 / 0.5)),
var(--banner-bg);
}
}
/* Eigenwerbung („Hier könnte Ihre Werbung stehen") — rote Glasfläche mit
gestricheltem Frame, das eine freie Werbefläche andeutet. */
.ad-banner__slide--house {
position: relative;
overflow: hidden;
background:
radial-gradient(135% 145% at 100% 0%, rgb(var(--clr-accent-rgb) / 0.24), transparent 55%),
var(--clr-glass-bg);
border-color: rgb(var(--clr-accent-rgb) / 0.5);
}
.ad-banner__slide--house .ad-banner__content,
.ad-banner__slide--house .ad-banner__logo {
position: relative;
z-index: 1;
}
.ad-banner__slide--house .ad-banner__tag {
color: #fff;
background: var(--clr-accent);
border-color: transparent;
}
.ad-banner__slide--house .ad-banner__text {
color: var(--clr-text);
}
.ad-banner__slide--house .ad-banner__logo {
background: rgb(0 0 0 / 0.25);
border-color: rgb(var(--clr-accent-rgb) / 0.45);
}
/* Eigenwerbung MIT Foto-Hintergrund: rot-dunkler Verlauf von links hält den
Text lesbar, das Foto bleibt rechts sichtbar. */
.ad-banner__slide--house.ad-banner__slide--bg {
background-image:
linear-gradient(to right, rgb(12 10 11 / 0.9), rgb(20 16 17 / 0.55) 55%, rgb(20 16 17 / 0.12) 90%),
var(--banner-bg);
background-size: cover;
background-position: center;
border-color: transparent;
}
.ad-banner__slide--house.ad-banner__slide--bg .ad-banner__logo {
background: rgb(0 0 0 / 0.45);
border-color: rgb(255 255 255 / 0.18);
backdrop-filter: blur(2px);
}
@media (max-width: 768px) {
/* Auf Mobil läuft der Verlauf nach unten (Text steht gestapelt darüber). */
.ad-banner__slide--house.ad-banner__slide--bg {
background-image:
linear-gradient(to bottom, rgb(12 10 11 / 0.88), rgb(20 16 17 / 0.7)),
var(--banner-bg);
}
}
.ad-banner__tag {
display: inline-block;
margin-bottom: 0.85rem;
padding: 0.2em 0.7em;
font-size: var(--fs-300);
text-transform: uppercase;
letter-spacing: 0.08em;
color: var(--clr-text-muted);
background: rgb(255 255 255 / 0.08);
border: 1px solid var(--clr-glass-border);
border-radius: 999px;
}
.ad-banner__title {
font-family: var(--ff-heading);
font-size: var(--fs-700);
line-height: var(--lh-heading);
margin-bottom: 0.6rem;
}
.ad-banner__text {
max-width: 52ch;
margin-bottom: 1.5rem;
color: var(--clr-text-muted);
}
.ad-banner__logo {
display: grid;
place-items: center;
min-height: 130px;
padding: 1.5rem;
background: rgb(0 0 0 / 0.18);
border: 1px solid var(--clr-glass-border);
border-radius: var(--radius-card);
}
.ad-banner__logo img {
width: auto;
max-width: 100%;
max-height: 96px;
object-fit: contain;
}
@media (max-width: 768px) {
.ad-banner__slide {
grid-template-columns: 1fr;
gap: 1.75rem;
}
}
/* Steuerung: Pause/Play-Taste + Indikatorleiste. */
.ad-banner__controls {
display: flex;
align-items: center;
justify-content: center;
gap: 1rem;
margin-top: 1.75rem;
}
.ad-banner__controls[hidden] {
display: none;
}
.ad-banner__toggle {
display: inline-grid;
place-items: center;
width: 2.25rem;
height: 2.25rem;
padding: 0;
color: var(--clr-text);
background: var(--clr-glass-bg);
border: 1px solid var(--clr-glass-border);
border-radius: 999px;
cursor: pointer;
transition: background var(--transition);
}
.ad-banner__toggle[hidden] {
display: none;
}
.ad-banner__toggle:hover {
background: rgb(255 255 255 / 0.2);
}
.ad-banner__toggle:focus-visible {
outline: 2px solid var(--clr-text);
outline-offset: 3px;
}
.ad-banner__toggle-icon {
font-size: 1.15rem;
}
/* Pause-Icon im Abspiel-Zustand, Play-Icon wenn pausiert. */
.ad-banner__toggle .ad-banner__toggle-icon--play {
display: none;
}
.ad-banner__toggle[aria-pressed="true"] .ad-banner__toggle-icon--pause {
display: none;
}
.ad-banner__toggle[aria-pressed="true"] .ad-banner__toggle-icon--play {
display: inline-block;
}
/* Indikatorleiste — die aktive Leiste füllt sich über --banner-interval. */
.ad-banner__indicators {
display: flex;
flex-wrap: wrap;
justify-content: center;
gap: 0.5rem;
}
.ad-banner__dot {
position: relative;
width: 48px;
height: 6px;
padding: 0;
border: 0;
border-radius: 999px;
background: var(--clr-glass-border);
cursor: pointer;
overflow: hidden;
transition: background var(--transition);
}
.ad-banner__dot:hover {
background: rgb(255 255 255 / 0.35);
}
.ad-banner__dot:focus-visible {
outline: 2px solid var(--clr-text);
outline-offset: 3px;
}
.ad-banner__progress {
position: absolute;
inset: 0;
background: var(--clr-accent);
transform: scaleX(0);
transform-origin: left;
}
.ad-banner__dot.is-active .ad-banner__progress {
animation: ad-progress var(--banner-interval) linear forwards;
}
.ad-banner.is-paused .ad-banner__dot.is-active .ad-banner__progress {
animation-play-state: paused;
}
@keyframes ad-progress {
from { transform: scaleX(0); }
to { transform: scaleX(1); }
}
@media (prefers-reduced-motion: reduce) {
.ad-banner__dot.is-active .ad-banner__progress {
animation: none;
transform: scaleX(1);
}
}
/* === key-facts (Faktenleiste) === */
.key-facts__grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 1rem;
margin: 0;
padding: 0;
list-style: none;
}
.key-facts__item {
display: flex;
align-items: center;
gap: 0.85rem;
padding: 1.1rem 1.25rem;
background: var(--clr-glass-bg);
border: 1px solid var(--clr-glass-border);
border-radius: var(--radius-card);
}
.key-facts__icon {
display: inline-flex;
font-size: 1.5rem;
color: var(--clr-accent);
}
.key-facts__text {
display: grid;
gap: 0.1rem;
}
.key-facts__label {
font-size: var(--fs-400);
text-transform: uppercase;
letter-spacing: 0.06em;
color: var(--clr-text-muted);
}
.key-facts__value {
font-family: var(--ff-heading);
font-size: var(--fs-650);
line-height: var(--lh-heading);
}
/* === team-about === */
.team-about p {
max-width: 68ch;
}
/* === training-location (Bento-Grid) === */
.bento {
display: grid;
grid-template-columns: repeat(4, 1fr);
grid-auto-rows: minmax(0, auto);
gap: 1.25rem;
}
/* Tile-Größen: Trainingszeiten = großer Anker, Spielort = breit, dazu zwei kleine. */
.bento__tile--times { grid-column: span 2; grid-row: span 2; }
.bento__tile--venue { grid-column: span 2; }
.bento__tile--accent { grid-column: span 1; }
.bento__tile--route { grid-column: span 1; }
.bento__tile {
position: relative;
display: flex;
flex-direction: column;
padding: 1.75rem;
background: var(--clr-glass-bg);
border: 1px solid var(--clr-glass-border);
border-radius: var(--radius-card);
overflow: hidden;
}
/* Akzent-Tile: gefüllt, weiße Schrift (gut lesbar), zentrierte Kennzahl. */
.bento__tile--accent {
justify-content: center;
gap: 0.35rem;
background: var(--clr-accent);
border-color: var(--clr-accent);
text-align: center;
}
.bento__tile--route {
justify-content: center;
align-items: center;
gap: 0.9rem;
text-align: center;
}
/* Inhalt über dem Deko-Icon halten. */
.bento__heading,
.bento__sessions,
.bento__address,
.bento__note {
position: relative;
z-index: 1;
}
.bento__heading {
display: flex;
align-items: center;
gap: 0.7rem;
margin-bottom: 1.5rem;
font-size: clamp(2rem, 1.6rem + 1.2vw, 2.6rem);
line-height: var(--lh-heading);
}
.bento__hicon {
flex: none;
font-size: 1.6rem;
color: var(--clr-accent);
}
.bento__sessions {
margin: 0;
padding: 0;
list-style: none;
}
.bento__sessions li {
display: flex;
align-items: baseline;
justify-content: space-between;
gap: 1rem;
padding: 1rem 0;
border-bottom: 1px solid var(--clr-glass-border);
}
.bento__sessions li:first-child { padding-top: 0; }
.bento__sessions li:last-child { padding-bottom: 0; border-bottom: 0; }
.bento__day {
font-size: var(--fs-600);
}
.bento__time {
font-family: var(--ff-heading);
font-size: var(--fs-650);
color: var(--clr-text);
}
.bento__note {
margin-top: 1rem;
}
.bento__address {
margin: 0;
font-size: var(--fs-600);
line-height: 1.5;
}
/* Akzent-Tile-Typo. */
.bento__stat-label {
font-size: var(--fs-500);
text-transform: uppercase;
letter-spacing: 0.08em;
color: rgb(255 255 255 / 0.85);
}
.bento__stat-value {
font-family: var(--ff-heading);
font-size: clamp(2rem, 1.5rem + 2vw, 2.8rem);
line-height: var(--lh-heading);
color: #fff;
}
.bento__route-label {
font-family: var(--ff-heading);
font-size: var(--fs-650);
}
/* Großes, angeschnittenes Deko-Icon unten rechts. */
.bento__deco {
position: absolute;
right: -1rem;
bottom: -1.75rem;
z-index: 0;
font-size: 9rem;
line-height: 1;
color: var(--clr-text);
opacity: 0.06;
pointer-events: none;
}
@media (max-width: 900px) {
.bento {
grid-template-columns: repeat(2, 1fr);
}
.bento__tile--times { grid-column: span 2; grid-row: auto; }
.bento__tile--venue { grid-column: span 2; }
}
@media (max-width: 560px) {
.bento {
grid-template-columns: 1fr;
}
.bento__tile--times,
.bento__tile--venue,
.bento__tile--accent,
.bento__tile--route {
grid-column: span 1;
}
}
/* === cta-band === */
.cta-band__inner {
max-width: 60ch;
margin-inline: auto;
text-align: center;
}
.cta-band__text {
margin-top: 0.75rem;
margin-inline: auto;
}
.cta-band__actions {
display: flex;
flex-wrap: wrap;
justify-content: center;
gap: 0.75rem;
margin-top: 1.75rem;
}
/* === faq (Accordion) === */
.faq__inner {
max-width: 760px;
margin-inline: auto;
}
.faq__inner > h2 {
text-align: center;
}
/* Schlichte Trennlinien-Liste statt Kästchen. */
.faq__list {
margin-top: 2.5rem;
border-top: 1px solid var(--clr-glass-border);
}
.faq__item {
border-bottom: 1px solid var(--clr-glass-border);
}
.faq__q {
display: flex;
align-items: center;
justify-content: space-between;
gap: 1rem;
padding: 1.35rem 0.25rem;
font-size: var(--fs-600);
line-height: 1.3;
cursor: pointer;
list-style: none;
transition: color var(--transition);
}
.faq__q::-webkit-details-marker {
display: none;
}
.faq__q:hover {
color: var(--clr-text-muted);
}
.faq__q:focus-visible {
outline: 2px solid var(--clr-text);
outline-offset: 2px;
}
.faq__chevron {
flex: none;
font-size: 0.9rem;
color: var(--clr-text-muted);
transition: transform var(--transition), color var(--transition);
}
.faq__item[open] .faq__q {
color: var(--clr-text);
}
.faq__item[open] .faq__chevron {
transform: rotate(180deg);
color: var(--clr-text);
}
.faq__a {
padding: 0 0.25rem 1.4rem;
color: var(--clr-text-muted);
}
.faq__a p {
max-width: 64ch;
margin: 0;
}
/* Antwort beim Öffnen sanft einblenden (reduced-motion via reset.css deaktiviert). */
.faq__item[open] .faq__a {
animation: faq-reveal 260ms ease;
}
@keyframes faq-reveal {
from { opacity: 0; transform: translateY(-4px); }
to { opacity: 1; transform: translateY(0); }
}
/* === age-groups (Jugend-Altersklassen) === */
.age-groups > .container {
text-align: center;
}
.age-groups__grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
gap: 1.5rem;
margin: 2.5rem 0 0;
padding: 0;
list-style: none;
text-align: left;
}
.age-group {
display: grid;
grid-template-rows: auto 1fr;
background: var(--clr-glass-bg);
border: 1px solid var(--clr-glass-border);
border-radius: var(--radius-card);
overflow: hidden;
transition: transform var(--transition), box-shadow var(--transition);
}
.age-group:hover {
transform: translateY(-4px);
box-shadow: var(--shadow-card);
}
.age-group__media {
position: relative;
overflow: hidden;
}
.age-group__img {
display: block;
width: 100%;
height: auto;
aspect-ratio: 4 / 3;
object-fit: cover;
transition: transform var(--transition);
}
.age-group:hover .age-group__img {
transform: scale(1.05);
}
/* Klassen-Badge (G/F/E/D/C) auf dem Bild. */
.age-group__badge {
position: absolute;
top: 0.75rem;
left: 0.75rem;
display: grid;
place-items: center;
width: 2.6rem;
height: 2.6rem;
font-family: var(--ff-heading);
font-size: var(--fs-650);
line-height: 1;
color: #fff;
background: var(--clr-accent);
border-radius: 50%;
box-shadow: 0 2px 10px rgb(0 0 0 / 0.35);
}
.age-group__body {
display: grid;
gap: 0.4rem;
align-content: start;
padding: 1.1rem 1.3rem 1.3rem;
}
.age-group__name {
font-size: var(--fs-650);
line-height: var(--lh-heading);
}
.age-group__training {
display: inline-flex;
align-items: center;
gap: 0.5rem;
margin: 0;
font-size: var(--fs-500);
color: var(--clr-text-muted);
}
.age-group__icon {
flex: none;
color: var(--clr-accent);
}
/* === team-cards (Mannschafts-Karten) === */
.team-cards > .container {
text-align: center;
}
.team-cards__intro {
max-width: 60ch;
margin: 1rem auto 0;
}
/* Intro als „Klärtext" unter den Kacheln → mehr Luft nach oben zur Kartenreihe */
.team-cards__intro--below {
margin-top: 2.5rem;
}
.team-cards__grid {
display: grid;
/* Zwei Karten pro Reihe (50/50) — bei vier Mannschaften ergibt das ein 2×2-Raster */
grid-template-columns: repeat(2, 1fr);
gap: 1.5rem;
margin: 2.5rem 0 0;
padding: 0;
list-style: none;
text-align: left;
}
@media (max-width: 600px) {
.team-cards__grid {
grid-template-columns: 1fr;
}
}
.team-card {
display: grid;
grid-template-rows: auto 1fr;
height: 100%;
color: var(--clr-text);
text-decoration: none;
background: var(--clr-glass-bg);
border: 1px solid var(--clr-glass-border);
border-radius: var(--radius-card);
overflow: hidden;
transition: transform var(--transition), box-shadow var(--transition);
}
.team-card:hover,
.team-card:focus-visible {
transform: translateY(-4px);
box-shadow: var(--shadow-card);
}
.team-card__img {
display: block;
width: 100%;
height: auto;
aspect-ratio: 16 / 10;
object-fit: cover;
transition: transform var(--transition);
}
.team-card:hover .team-card__img,
.team-card:focus-visible .team-card__img {
transform: scale(1.04);
}
.team-card__body {
display: flex;
flex-direction: column;
gap: 0.3rem;
padding: 1.4rem 1.5rem 1.5rem;
}
.team-card__name {
/* Coolvetica/Heading (siehe CLAUDE.md) — bewusst groß und prägnant. */
font-size: clamp(1.9rem, 1.4rem + 1.4vw, 2.4rem);
line-height: var(--lh-heading);
}
.team-card__meta {
font-size: var(--fs-500);
text-transform: uppercase;
letter-spacing: 0.06em;
color: var(--clr-text-muted);
}
.team-card__cta {
display: inline-flex;
align-items: center;
gap: 0.45rem;
/* an den unteren Rand schieben → CTA aller Karten fluchtet, egal wie lang der Name */
margin-top: auto;
padding-top: 1rem;
/* Body-Schrift (Abel) — Coolvetica bleibt den Überschriften vorbehalten */
font-size: var(--fs-500);
color: var(--clr-accent);
}
.team-card__arrow {
transition: transform var(--transition);
}
.team-card:hover .team-card__arrow {
transform: translateX(3px);
}
/* === team-roster (Kader + Trainerstab) === */
.team-roster > .container {
text-align: center;
}
.team-roster__intro {
max-width: 60ch;
margin: 1rem auto 0;
}
/* Positions-Zwischenüberschrift (Trainer & Betreuer, Torwart, Abwehr, …) */
.team-roster__group {
margin-top: 2.75rem;
padding-bottom: 0.5rem;
border-bottom: 1px solid var(--clr-glass-border);
text-align: left;
font-size: var(--fs-700);
line-height: var(--lh-heading);
}
.team-roster__grid {
display: grid;
/* Feste 5 pro Reihe → größere Cards/Bilder; runter gestuft auf schmaleren Screens */
grid-template-columns: repeat(5, 1fr);
gap: 1.25rem;
margin: 1.5rem 0 0;
padding: 0;
list-style: none;
text-align: left;
}
@media (max-width: 992px) {
.team-roster__grid {
grid-template-columns: repeat(4, 1fr);
}
}
@media (max-width: 768px) {
.team-roster__grid {
grid-template-columns: repeat(3, 1fr);
}
}
@media (max-width: 500px) {
.team-roster__grid {
grid-template-columns: repeat(2, 1fr);
}
}
.roster-card {
display: grid;
grid-template-rows: auto 1fr;
height: 100%;
background: var(--clr-glass-bg);
border: 1px solid var(--clr-glass-border);
border-radius: var(--radius-card);
overflow: hidden;
transition: transform var(--transition), box-shadow var(--transition);
}
.roster-card:hover {
transform: translateY(-4px);
box-shadow: var(--shadow-card);
}
/* Trainerstab dezent mit Akzentkante abgesetzt */
.roster-card--staff {
border-color: var(--clr-accent);
}
.roster-card__media img {
display: block;
width: 100%;
height: auto;
aspect-ratio: 4 / 5;
object-fit: cover;
object-position: center top;
}
.roster-card__body {
display: flex;
flex-direction: column;
gap: 0.1rem;
padding: 0.85rem 1rem 1rem;
background: linear-gradient(180deg, rgb(20 20 20 / 0) 0%, rgb(20 20 20 / 0.35) 100%);
}
.roster-card__role {
font-size: var(--fs-400);
text-transform: uppercase;
letter-spacing: 0.08em;
color: var(--clr-accent);
}
/* Name in Abel (Body) — Coolvetica wäre unter 28px unzulässig (siehe CLAUDE.md) */
.roster-card__name {
font-size: var(--fs-500);
}
/* --- Variante: Name als Overlay im Foto, unten links, dunkler Verlauf von unten --- */
.roster-card--overlay {
position: relative;
display: block;
}
.roster-card--overlay .roster-card__img {
display: block;
width: 100%;
height: auto;
aspect-ratio: 4 / 5;
object-fit: cover;
object-position: center top;
}
.roster-card__caption {
position: absolute;
inset: auto 0 0 0;
display: flex;
flex-direction: column;
gap: 0.15rem;
padding: 2.5rem 0.9rem 0.85rem;
/* dunkler Fade von unten → Name bleibt auf jedem Foto lesbar */
background: linear-gradient(180deg, rgb(15 15 15 / 0) 0%, rgb(15 15 15 / 0.55) 45%, rgb(15 15 15 / 0.9) 100%);
}
/* Name hier in Coolvetica (≥28px = fs-650, Mindestgröße eingehalten) */
.roster-card--overlay .roster-card__name {
font-family: var(--ff-heading);
font-size: var(--fs-650);
line-height: var(--lh-heading);
text-transform: uppercase;
color: #fff;
}
.roster-card--overlay .roster-card__role {
/* Auf dem dunklen Foto-Verlauf: klein und weiß statt rot → besser lesbar */
font-size: var(--fs-300);
color: #fff;
}
/* === faq-contact (FAQ 2/3 + Ansprechpartner 1/3) === */
.faq-contact__inner {
display: grid;
grid-template-columns: minmax(0, 2fr) minmax(0, 1fr);
gap: 3rem;
align-items: start;
}
/* Ohne Kontakt: FAQ allein, lesbar zentriert. */
.faq-contact--solo .faq-contact__inner {
grid-template-columns: minmax(0, 760px);
justify-content: center;
}
/* Sektions-Kopf zentriert über dem 2-Spalten-Inhalt (FAQ + Kontakt) */
.faq-contact__title {
text-align: center;
margin: 0;
}
/* Gedämpfte Subline unter der Überschrift (einheitlich mit den anderen Sektionen) */
.faq-contact__intro {
max-width: 60ch;
margin-inline: auto;
margin-bottom: 2.25rem;
text-align: center;
}
/* Abstände je nachdem, ob eine Subline folgt */
.faq-contact__title + .faq-contact__intro {
margin-top: 1rem;
}
.faq-contact__title + .faq-contact__inner {
margin-top: 2.25rem;
}
.faq-contact__aside > h2 {
margin-bottom: 1.5rem;
}
/* --- Ansprechpartner-Mini-Slider (mehrere Kontakte) ---
Ohne JS: alle Karten gestapelt sichtbar. Mit JS (--ready): nur eine sichtbar,
wechselt automatisch; Punkte zur manuellen Auswahl. */
.contact-slider {
/* Auf Kartenbreite begrenzt und zentriert → Karte und Punkte teilen dieselbe Mittelachse */
max-width: 320px;
margin-inline: auto;
}
.contact-slider__track {
display: flex;
flex-direction: column;
gap: 1.5rem;
margin: 0;
padding: 0;
list-style: none;
}
.contact-slider__dots {
/* Ohne JS funktionslos → ausgeblendet; erst mit aktivem Slider sichtbar. */
display: none;
}
.contact-slider--ready .contact-slider__dots {
display: flex;
justify-content: center;
gap: 0.4rem;
margin-top: 1rem;
}
.contact-slider__dot {
/* 24px-Ziel (WCAG 2.5.8), sichtbarer Punkt 10px */
display: grid;
place-items: center;
width: 24px;
height: 24px;
padding: 0;
background: none;
border: 0;
cursor: pointer;
}
.contact-slider__dot::before {
content: '';
width: 10px;
height: 10px;
border-radius: 50%;
border: 1px solid var(--clr-glass-border-strong);
transition: background var(--transition), border-color var(--transition);
}
.contact-slider__dot[aria-current="true"]::before {
background: var(--clr-accent);
border-color: var(--clr-accent);
}
@keyframes contact-slide-fade {
from { opacity: 0; }
to { opacity: 1; }
}
.contact-slider--ready .contact-slider__slide.is-active {
animation: contact-slide-fade 0.4s ease;
}
.faq-contact__main .faq__list {
margin-top: 0;
}
.faq-contact__aside .person-card {
max-width: 320px;
margin-inline: auto;
}
/* Flacheres Foto im Kontakt-Block (Gesicht bleibt oben erhalten). */
.faq-contact__aside .person-card__media img {
aspect-ratio: 4 / 3;
}
@media (max-width: 900px) {
.faq-contact__inner {
grid-template-columns: 1fr;
gap: 2.5rem;
}
}
/* === team-photo (Mannschaftsfoto in voller Breite) === */
.team-photo__figure {
margin: 0;
}
.team-photo__img {
display: block;
width: 100%;
height: auto;
border-radius: var(--radius-card);
border: 1px solid var(--clr-glass-border);
}
.team-photo__caption {
margin-top: 0.75rem;
text-align: center;
color: var(--clr-text-muted);
font-size: var(--fs-400);
}
/* === team-bento (Bild + Einleitung + Training + Spielort als Dashboard) === */
.team-bento {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 1.25rem;
grid-template-areas:
"about about about"
"train train klasse"
"venue venue venue";
}
.team-bento__about { grid-area: about; }
.team-bento__training { grid-area: train; }
.team-bento__klasse { grid-area: klasse; }
.team-bento__venue { grid-area: venue; }
.team-bento__about {
justify-content: center;
}
.team-bento__about > h2 {
margin-bottom: 0.75rem;
}
.team-bento__about p {
color: var(--clr-text-muted);
max-width: 60ch;
}
/* Spielort: breite untere Kachel — Adresse links, Button rechts. */
.team-bento__venue {
flex-direction: row;
flex-wrap: wrap;
align-items: center;
justify-content: space-between;
gap: 1.25rem;
}
.team-bento__venue-main {
position: relative;
z-index: 1;
}
.team-bento__venue .bento__heading {
margin-bottom: 0.6rem;
}
.team-bento__route {
position: relative;
z-index: 1;
flex: none;
}
@media (max-width: 900px) {
.team-bento {
grid-template-columns: 1fr;
grid-template-areas:
"about"
"train"
"klasse"
"venue";
}
}
/* === intro-bento (Jugend-Einleitung: Bild + Text + Spielort + Stat) === */
.intro-bento {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 1.25rem;
grid-template-areas:
"image about about"
"image venue stat";
}
.intro-bento__image {
grid-area: image;
position: relative;
min-height: 260px;
padding: 0;
overflow: hidden;
}
.intro-bento__img {
position: absolute;
inset: 0;
width: 100%;
height: 100%;
object-fit: cover;
object-position: center top;
}
.intro-bento__about {
grid-area: about;
justify-content: center;
}
.intro-bento__about > h2 {
margin-bottom: 0.75rem;
}
.intro-bento__about p {
max-width: 60ch;
color: var(--clr-text-muted);
}
.intro-bento__venue {
grid-area: venue;
}
.intro-bento__venue .bento__address {
margin-bottom: 1.25rem;
}
.intro-bento__route {
position: relative;
z-index: 1;
align-self: start;
margin-top: auto;
}
.intro-bento__stat {
grid-area: stat;
}
@media (max-width: 900px) {
.intro-bento {
grid-template-columns: 1fr;
grid-template-areas:
"image"
"about"
"venue"
"stat";
}
.intro-bento__image {
aspect-ratio: 16 / 10;
min-height: 0;
}
}
/* === legal (Impressum, Datenschutz) ===
Schmale, gut lesbare Fließtext-Seite. Top-Padding klärt den absolut
positionierten Header (analog zur Hero-Logik). */
.legal {
padding-block: calc(var(--header-h) + 80px) var(--space-section);
}
.legal__head {
max-width: 60ch;
margin-bottom: clamp(2.5rem, 1.5rem + 3vw, 4rem);
}
.legal__kicker {
display: flex;
align-items: center;
gap: 0.75rem;
margin-bottom: 1.25rem;
font-size: var(--fs-500);
text-transform: uppercase;
letter-spacing: 0.18em;
}
.legal__kicker::before {
content: '';
width: 3rem;
height: 4px;
background: var(--clr-accent);
border-radius: 2px;
}
.legal__lead {
margin-top: 1.25rem;
color: var(--clr-text-muted);
}
/* Lesespalte: angenehme Zeilenlänge für lange Rechtstexte */
.legal__body {
max-width: 72ch;
}
.legal__body > section + section {
margin-top: clamp(2.5rem, 1.8rem + 2vw, 3.5rem);
}
.legal__body h2 {
font-size: var(--fs-700);
margin-bottom: 1rem;
}
/* Coolvetica nie unter --fs-650 (28px) — Unterüberschriften daher in Abel,
per Laufweite/Uppercase ausgezeichnet statt in der Display-Schrift. */
.legal__body h3 {
font-family: var(--ff-body);
font-size: var(--fs-600);
font-weight: var(--fw-bold);
text-transform: none;
line-height: var(--lh-body);
margin-top: 1.75rem;
margin-bottom: 0.5rem;
}
.legal__body p,
.legal__body ul {
margin-bottom: 1rem;
}
.legal__body a {
color: var(--clr-text);
text-decoration: underline;
text-underline-offset: 0.2em;
}
.legal__body a:hover {
color: var(--clr-text-muted);
}
.legal__body ul {
padding-left: 1.25rem;
max-width: 70ch;
}
.legal__body li {
margin-bottom: 0.35rem;
}
.legal__body li::marker {
color: var(--clr-accent);
}
/* Adress-/Kontaktblöcke (Verantwortlicher, Bankverbindung) als abgesetzte Karte */
.legal__card {
margin-bottom: 1rem;
padding: clamp(1.25rem, 1rem + 1.5vw, 1.75rem);
background: var(--clr-glass-bg);
border: 1px solid var(--clr-glass-border);
border-radius: var(--radius-card);
}
.legal__card :last-child {
margin-bottom: 0;
}
.legal__card address {
font-style: normal;
line-height: var(--lh-body);
}
.legal__cards {
display: grid;
gap: 1rem;
margin-bottom: 1rem;
}
@media (min-width: 600px) {
.legal__cards--2 {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
}
/* === department-choice (Abteilungs-Auswahl Fußball | Turnen) === */
.department-choice > .container {
text-align: center;
}
.department-choice__intro {
max-width: 60ch;
margin: 1rem auto 0;
}
.department-choice__grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 1.5rem;
margin: 2.5rem 0 0;
padding: 0;
list-style: none;
text-align: left;
}
@media (max-width: 600px) {
.department-choice__grid {
grid-template-columns: 1fr;
}
}
.department-choice__card {
display: flex;
flex-direction: column;
gap: 0.5rem;
height: 100%;
padding: clamp(1.5rem, 1rem + 2vw, 2.25rem);
background: var(--clr-glass-bg);
border: 1px solid var(--clr-glass-border);
border-radius: var(--radius-card);
}
.department-choice__kicker {
font-size: var(--fs-400);
text-transform: uppercase;
letter-spacing: 0.08em;
color: var(--clr-accent);
}
.department-choice__heading {
font-size: var(--fs-650);
line-height: var(--lh-heading);
}
.department-choice__text {
color: var(--clr-text-muted);
}
.department-choice__btn {
align-self: start;
margin-top: auto;
display: inline-flex;
align-items: center;
gap: 0.5rem;
}
.department-choice__arrow {
font-size: 0.9em;
}
/* === fee-table (Beitragstabellen) === */
.fee-table {
padding: clamp(1.25rem, 1rem + 1.5vw, 1.75rem);
background: var(--clr-glass-bg);
border: 1px solid var(--clr-glass-border);
border-radius: var(--radius-card);
}
.fee-table__title {
font-size: var(--fs-600);
line-height: var(--lh-heading);
margin-bottom: 1rem;
}
.fee-table__list {
margin: 0;
}
.fee-table__row {
display: flex;
align-items: baseline;
justify-content: space-between;
gap: 1rem;
padding: 0.65rem 0;
border-bottom: 1px solid var(--clr-glass-border);
}
.fee-table__row:last-child {
border-bottom: 0;
}
.fee-table__label {
margin: 0;
}
.fee-table__price {
margin: 0;
flex: none;
font-family: var(--ff-heading);
font-size: var(--fs-650);
line-height: 1;
color: var(--clr-accent);
}
.fee-table__note {
margin-top: 1rem;
font-size: var(--fs-400);
color: var(--clr-text-muted);
}
.fee-table-grid {
display: grid;
gap: 1.5rem;
margin-top: 2rem;
}
@media (min-width: 768px) {
.fee-table-grid {
grid-template-columns: repeat(2, minmax(0, 1fr));
align-items: start;
}
}
/* === membership (Mitglied werden) === */
.membership-info__inner {
max-width: 70ch;
}
.membership-info__inner p {
margin-top: 1rem;
}
.membership-signup__inner {
max-width: 820px;
margin-inline: auto;
}
.membership-signup__intro {
max-width: 65ch;
margin: 1rem 0 2rem;
color: var(--clr-text-muted);
}
/* Fußball-Sektion: Beitragstabelle hat Abstand zum Formular */
.membership-signup .fee-table + .form {
margin-top: 2rem;
}
.membership-notes {
display: grid;
gap: 1.5rem;
margin: 0 0 2rem;
padding: 0;
list-style: none;
}
@media (min-width: 768px) {
.membership-notes {
grid-template-columns: repeat(3, minmax(0, 1fr));
}
}
.membership-notes__title {
font-size: var(--fs-600);
line-height: var(--lh-heading);
margin-bottom: 0.4rem;
padding-top: 0.75rem;
border-top: 2px solid var(--clr-accent);
}
.membership-download {
margin-top: 2rem;
}
.membership-download__btn {
display: inline-flex;
align-items: center;
gap: 0.5rem;
}
.membership-download__icon {
font-size: 0.9em;
}
.membership-download__hint,
.membership-download__contact {
margin-top: 0.75rem;
font-size: var(--fs-400);
color: var(--clr-text-muted);
}
.legal__muted {
color: var(--clr-text-muted);
}
/* === facility (Gelände / Drohnen-Luftbild auf der Vereinsseite) === */
.facility__lead {
max-width: 70ch;
margin-top: 1rem;
color: var(--clr-text-muted);
}
.facility__figure {
margin: 2.5rem 0 0;
}
.facility__img {
display: block;
width: 100%;
height: auto;
border-radius: var(--radius-card);
box-shadow: var(--shadow-card);
}
.facility__caption {
margin-top: 0.85rem;
color: var(--clr-text-faint);
font-size: var(--fs-500);
}
.facility__actions {
margin-top: 1.75rem;
}