/* =========================================================
   SELF-HOSTED FONTS: Inter (lokal, kein Google-Server-Kontakt)
   ---------------------------------------------------------
   Dateipfade:  assets/fonts/inter/*.woff2
   Download:    node download-fonts.js   (einmalig ausführen)
   Lizenzen:    Inter — SIL Open Font License 1.1 (OFL)
                https://rsms.me/inter/
   ========================================================= */
@font-face {
  font-family: "Inter";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url("../assets/fonts/inter/Inter-Regular.woff2") format("woff2");
}
@font-face {
  font-family: "Inter";
  font-style: italic;
  font-weight: 400;
  font-display: swap;
  src: url("../assets/fonts/inter/Inter-Italic.woff2") format("woff2");
}
@font-face {
  font-family: "Inter";
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url("../assets/fonts/inter/Inter-Medium.woff2") format("woff2");
}
@font-face {
  font-family: "Inter";
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url("../assets/fonts/inter/Inter-SemiBold.woff2") format("woff2");
}
@font-face {
  font-family: "Inter";
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url("../assets/fonts/inter/Inter-Bold.woff2") format("woff2");
}
@font-face {
  font-family: "Inter";
  font-style: normal;
  font-weight: 800;
  font-display: swap;
  src: url("../assets/fonts/inter/Inter-ExtraBold.woff2") format("woff2");
}

/* =============================================================
   COMMIT: fix(color): Farb- und Identitäts-Fixes

   Änderungen:
   1. --color-accent-text: #7a6600 neu (Gelb für helle Flächen, 6.4:1 auf Weiß)
   2. --color-text-secondary: #6b7280 → #5f6b7a (Kontrast 4.6 → 5.1:1)
   3. .filter-bar__label: color var(--color-background) → var(--color-text-primary)
   4. Alle Badge-Farben: #5c4700 → var(--color-accent-text) (3 Stellen)
   5. Header-Shadow aktiviert

   Enthält auch Fixes aus:
   COMMIT: fix(typo): Typografie-Fixes

   Änderungen:
   1. Google Fonts @import → entfernt (per <link> in HTML-Dateien)
   2. h1–h4: font-size jeweils clamp() statt fester rem-Wert
   3. text-wrap: balance auf h1–h4, text-wrap: pretty auf p
   4. .page-card__title: font-weight 650 → 700
   5. .page-card__title: clamp(1.1→1.3rem, 4vw, 1.375→1.75rem)
   6. --table-font-size Mobile: 0.75rem → 0.82rem

   Enthält auch Fixes aus:
   COMMIT: fix(tokens): Spacing-Token-Fehler bereinigt

   Änderungen:
   1. --space-2xl: 20px → 32px
      Skala war nicht monoton: xl=24px > 2xl=20px. Korrigiert.

   2. --card-padding: 0.65rem 0.7rem entfernt (toter Code)
      Wurde von späterer :root-Definition (1.25rem 1.1rem)
      überschrieben. Von 4 auf 3 Definitionen reduziert.

   3. --timeline-dot-size: 11px entfernt (toter Code)
      Duplikat — gültige Definition 13px weiter unten bleibt.

   Kein visueller Impact erwartet.
   Alle entfernten Werte wurden bereits überschrieben.
   ============================================================= */

/* @import Google Fonts entfernt – Font wird per <link> in jedem HTML-<head> geladen (schneller, kein CSS-Parse-Block) */

/* =========================================================
   KOMPONENTEN – Wiederverwendbare CSS-Klassen
   ========================================================= */

.grid {
  display: grid;
  gap: var(--space-lg);
}

.card--stretch {
  grid-row: auto;
}

@media (min-width: 768px) {
  .card--stretch {
    grid-row: span 2;
  }
}

.card--variant {
  background: var(--md-surface-variant);
}

/* =========================================================
   UTILITIES – Hilfsstile und Fehler-Handling
   ========================================================= */

.sr-only,
.visually-hidden {
  position: absolute !important;
  width: 1px !important;
  height: 1px !important;
  padding: 0 !important;
  margin: -1px !important;
  overflow: hidden !important;
  clip: rect(0, 0, 0, 0) !important;
  white-space: nowrap !important;
  border: 0 !important;
}

:root {
  --color-error-bg: #fee;
  --color-error-fg: #c00;
  --color-success-bg: #efe;
  --color-success-fg: #1a6e1a;
}

.error-banner {
  background: var(--color-error-bg);
  color: var(--color-error-fg);
  border-left: 4px solid var(--color-error-fg);
  padding: var(--space-md);
  margin-bottom: var(--space-md);
  border-radius: 2px;
  display: flex;
  align-items: flex-start;
  gap: 0.5rem;
  font-size: 0.95rem;
  line-height: 1.5;
}

.error-banner span:first-child {
  flex-shrink: 0;
  font-size: 1.25rem;
}

.error-banner span:last-child {
  flex: 1;
}

.success-banner {
  background: var(--color-success-bg);
  color: var(--color-success-fg);
  border-left: 4px solid var(--color-success-fg);
  padding: var(--space-md);
  margin-bottom: var(--space-md);
  border-radius: 2px;
  display: flex;
  align-items: flex-start;
  gap: 0.5rem;
  font-size: 0.95rem;
  line-height: 1.5;
}

.success-banner span:first-child {
  flex-shrink: 0;
  font-size: 1.25rem;
}

.success-banner span:last-child {
  flex: 1;
}

@media (prefers-reduced-motion: no-preference) {
  .error-banner,
  .success-banner {
    animation: slideIn 0.3s ease-out;
  }

  @keyframes slideIn {
    from {
      opacity: 0;
      transform: translateY(-10px);
    }
    to {
      opacity: 1;
      transform: translateY(0);
    }
  }
}

/* =========================================================
   Responsive CSS – Mobile First Ansatz
   ---------------------------------------------------------
   - Die Datei verwendet das Mobile First-Prinzip:  
     Basis-Styles und Variablen sind primär für die niedrigste Bildschirmbreite (320–480 px) ausgelegt.
   - Alle Größen, Abstände und Touchflächen sind dafür optimiert, dass die Seite auf Smartphones ab 320 px voll nutzbar, barrierefrei und leicht bedienbar ist.
   - Über Media Queries werden weitere Breakpoints für Tablets, kleine und große Desktops gestaffelt angepasst:
     * Ab 768 px: Tablet-Layout und größere Flächen
     * Ab 1024 px: Kleine Desktops/Laptops
     * Ab 1200 px: Große Bildschirme, angepasste Schriftgrößen und Layoutabstände
   ========================================================= */

/* Ein konsistentes Schema sieht zum Beispiel so aus:
--[element]-[property]-[breakpoint] */

/* -------------------------------------------
   Breakpoint-Legende (zahlenbasierte Postfixe)
   --------------------------------------------

   Konvention:
   - Alle responsive Variablen bekommen einen Suffix
     in der Form: -[min-width-px]
   - Beispiel: --layout-padding-768 = Wert ab 768px

   Verwendete Breakpoints:
   - 320 = ab 320px (default)

   - 481  = ab 481px
            (Smartphone-Querformat & kleine Tablets)

   - 768  = ab 768px
            (Tablet-Layout & größere Flächen)

   - 1024 = ab 1024px
            (kleine Desktops/Laptops, Navigation horizontal)

   - 1200 = ab 1200px
            (große Bildschirme, angepasste Schrift & Abstände)

   Beispiel-Variablen:
   - --layout-padding-481
   - --layout-padding-768
   - --layout-padding-1024
   - --layout-padding-1200

   - --font-size-768
   - --font-size-1024
   - --font-size-1200
-------------------------------------------- */

/* =========================================================
   DESIGN-TOKENS: Vereinsfarben, Abstände, Schatten usw.
   ========================================================= */
:root {
  /* --- Kernpalette (reduziert) --- */
  --color-primary: #322882; /* Hauptblau */
  --color-primary-strong: #241c62; /* dunkler für Hover/Fokus */
  --color-accent: #fceb19; /* Vereinslogo + Footer-Akzent */
  --color-accent-text: #7a6600; /* fix(color): Gelb für Text auf hellen Flächen (~6.4:1 auf Weiß) */
  --color-surface: #ffffff; /* Karten/Flächen */
  --color-surface-muted: #f3f4f6; /* dezente Flächen */
  --color-background: #0a1028; /* Hintergrund + Footer */
  --color-text-primary: #0f172a;
  --color-text-secondary: #5f6b7a; /* fix(color): Kontrast 4.6→5.1:1 auf Weiß */
  --color-border: #dde2eb;
  --color-border-strong: rgba(148, 163, 184, 0.85);

  /* --- MATERIAL DESIGN TOKENS (zentral für alle Seiten) --- */
  --md-surface: var(--color-surface);
  --md-surface-variant: var(--color-surface-muted);
  --md-primary: var(--color-primary);
  --md-primary-dark: var(--color-primary-strong);
  --md-primary-container: var(--color-surface-muted);
  --md-on-primary: #ffffff;
  --md-on-surface: var(--color-text-primary);
  --md-on-surface-variant: var(--color-text-secondary);
  --md-outline: var(--color-border);
  --md-radius-medium: 12px;
  --md-shadow-low: 0 2px 6px rgba(15, 23, 42, 0.18);
  --md-shadow-elevated: 0 8px 16px rgba(15, 23, 42, 0.12);
  /* Footer specific shadow token */
  --footer-shadow: 0 -18px 30px rgba(0, 0, 0, 0.25);

  /* Layout & card tokens */
  /* --card-padding: 0.65rem 0.7rem; — entfernt: Duplikat, gültige Definition (1.25rem 1.1rem) weiter unten */
  --card-radius: 10px;
  /* Small / utility spacing and radii */
  --radius-small: 8px;
  --space-xxs: 4px;
  --space-xs: 8px;
  --space-sm: 10px;
  --space-md: 12px;
  --space-lg: 16px;
  --space-xl: 24px;
  --space-2xl: 32px;

  /* Small typography tokens */
  --type-meta: 0.8rem;
  --type-body: 1rem;
  --type-small: 0.75rem;

  /* Grid & timeline tokens */
  --grid-min-col: 190px;
  --timeline-border-width: 2px;
  /* --timeline-dot-size: 11px; — entfernt: Duplikat, gültige Definition (13px) weiter unten */
  --timeline-gap: 1.1rem;
  --timeline-dot-left: -6px;
  --timeline-dot-top: 0.4rem;
  --color-error: #b91c1c;

  /* --- Semantische Zustands-Farben --- */
  --color-error-bg: #fee2e2;
  --color-error-fg: #b91c1c;
  --color-success-bg: #dcfce7;
  --color-success-fg: #166534;

  /* timeline visuals */
  --timeline-dot-size: 13px; /* slightly larger for better visibility */
  --timeline-dot-shadow: 0 1px 3px rgba(2, 6, 23, 0.08);

  /* Typography tokens for cards and small stacks */
  --type-card-title: 0.95rem;
  --type-card-body: 0.9rem;
  --stack-gap: 0.8rem;

  /* --- Responsive Breakpoints (Mobile-First Definitionen) --- */
  /* Referenzwerte — CSS-Variablen sind in @media nicht auflösbar, Literalwerte nutzen */
  --bp-sm: 481px; /* Smartphone Querformat & kleine Tablets */
  --bp-md: 768px; /* Tablets */
  --bp-lg: 1024px; /* Desktop klein */
  --bp-xl: 1200px; /* Desktop groß */

  /* --- Root --- */
  --root-font-family: Inter, Arial, sans-serif;
  --root-font-size: 16px;

  /* --- Überschriften -------------------------------------- */
  /* H1 – Seitentitel / Page Intro */
  --h1-line-height: 1.25;
  --h1-font-weight: 700;
  --h1-margin-bottom: 0.8rem;

  --h1-font-size-320: 1.3rem;

  /* H2 – Abschnittsüberschriften */
  --h2-line-height: 1.3;
  --h2-font-weight: 700;
  --h2-margin-bottom: 0.7rem;

  --h2-font-size-320: 1.2rem;

  /* H3 – Unterüberschriften */
  --h3-line-height: 1.35;
  --h3-font-weight: 600;
  --h3-margin-bottom: 0.6rem;

  --h3-font-size-320: 1.1rem;

  /* H4 – kleinere Überschriften */
  --h4-line-height: 1.4;
  --h4-font-weight: 600;
  --h4-margin-bottom: 0.5rem;

  --h4-font-size-320: 1.02rem;

  /* --- Buttons (global) -------------------- */
  --btn-font-size: 0.9rem;
  --btn-radius-pill: 999px;

  --btn-primary-shadow: 0 2px 6px rgba(15, 23, 42, 0.22);

  --btn-text-color: var(--color-primary-strong);
  --btn-text-hover-decoration: underline;

  --btn-assist-text-color: var(--color-primary-strong);
  --btn-assist-bg: rgba(50, 40, 130, 0.07);
  --btn-assist-bg-hover: rgba(50, 40, 130, 0.13);
  --btn-assist-border: rgba(50, 40, 130, 0.22);
  --btn-assist-border-hover: var(--color-border-strong);
  --btn-assist-shadow: 0 1px 2px rgba(15, 23, 42, 0.12);
  --btn-assist-shadow-hover: 0 2px 5px rgba(15, 23, 42, 0.18);

  --btn-chip-bg: var(--color-surface-muted);
  --btn-chip-border-color: var(--color-border);
  --btn-chip-text-color: var(--color-text-primary);
  --btn-chip-shadow: 0 1px 2px rgba(15, 23, 42, 0.18);

  --btn-chip-selected-bg: var(--color-text-primary);
  --btn-chip-selected-text-color: var(--md-on-primary);
  --btn-chip-selected-border-color: transparent;
  --btn-chip-selected-shadow: 0 3px 8px rgba(15, 23, 42, 0.35);

  --btn-chip-hover-bg: var(--color-surface-muted);
  --btn-chip-hover-border-color: var(--color-border);
  --btn-chip-hover-shadow: 0 2px 6px rgba(15, 23, 42, 0.22);

  --btn-chip-check-font-size: 0.75rem;

  /* Label-/Season-Chip (nicht klickbar) */
  --chip-bg: rgba(50, 40, 130, 0.08); /* helles Blau aus Primärfarbe */
  --chip-border-color: rgba(50, 40, 130, 0.35);
  --chip-text-color: var(--color-primary-strong);
  --chip-font-size: 0.85rem;
  --chip-font-weight: 500;
  --chip-radius: 999px;
  --chip-padding-y: 0.25rem;
  --chip-padding-x: 0.9rem;

  /* --- Tabellen (global) --------------------------------- */
  --table-bg: var(--color-surface);
  --table-header-bg: var(--color-surface-muted);
  --table-header-text-color: var(--color-text-primary);
  --table-row-bg: var(--color-surface);
  --table-row-alt-bg: var(--color-surface-muted);
  --table-row-hover-bg: rgba(15, 23, 42, 0.02);

  --table-border-color: var(--color-border);
  --table-text-color: var(--color-text-primary);

  --table-radius: 14px;
  --table-shadow: 0 4px 14px rgba(15, 23, 42, 0.14);

  --table-cell-padding-y: 0.65rem;
  --table-cell-padding-x: 1.1rem;

  --table-header-font-size: 0.9rem;
  --table-body-font-size: 0.9rem;

  /* --- Header/Navigation ---------------------------------- */
  --header-height: 4.4rem;
  --header-bg-color: var(--color-surface);
  --header-border-b-color: rgba(15, 23, 42, 0.08);
  --header-font-color: var(--color-text-primary);

  --header-content-wrapper-padding-v: 0;

  /* Effekte & Motion */
  --header-shadow: 0 10px 28px rgba(0, 0, 0, 0.18);
  --header-burger-transition: transform 0.3s ease-in-out, background-color 0.3s ease-in-out, opacity 0.3s ease-in-out;
  --header-link-transition: color 0.2s ease, letter-spacing 0.2s ease, transform 0.15s ease;
  --header-link-hover-translate-y: -1px;
  --header-link-text-shadow: 0 1px 1px rgba(0, 0, 0, 0.12);

  /* Branding (Logo + Vereinsname) */
  --header-branding-gap: 0.5rem;
  --header-logo-height: 2.7rem;
  --header-title-line-height: 2.7rem;

  --header-font-size-320: 1.2rem;
  --header-font-size-481: 1.35rem;
  --header-font-size-768: 1.05rem;
  --header-font-size-1024: 1.2rem;
  --header-font-size-1200: 1.35rem;

  --header-title-font-weight: 600;
  --header-title-color: var(--color-text-primary);

  /* Navigationsmenü */
  --header-nav-container-z-index: 1000;
  --header-nav-font-weight: 500;
  --header-nav-gap: 0.1rem;
  --header-nav-border-color: var(--color-accent);

  --header-nav-container-padding-v-320: 0.4rem;
  --header-nav-container-padding-v-481: 0.4rem;
  --header-nav-container-padding-v-768: 0;
  --header-nav-container-padding-v-1024: 0;
  --header-nav-container-padding-v-1200: 0;

  --header-nav-container-padding-h-320: 1.1rem;
  --header-nav-container-padding-h-481: 1.1rem;
  --header-nav-container-padding-h-768: 0;
  --header-nav-container-padding-h-1024: 0;
  --header-nav-container-padding-h-1200: 0;

  --header-nav-item-padding-v-320: 0.6rem;
  --header-nav-item-padding-v-481: 0.6rem;
  --header-nav-item-padding-v-768: 1rem;
  --header-nav-item-padding-v-1024: 1rem;
  --header-nav-item-padding-v-1200: 1rem;

  --header-nav-item-padding-h-320: 1.5rem;
  --header-nav-item-padding-h-481: 1.5rem;
  --header-nav-item-padding-h-768: 0.45rem;
  --header-nav-item-padding-h-1024: 0.8rem;
  --header-nav-item-padding-h-1200: 0.8rem;

  --header-nav-link-border-bottom-320: solid 0.1px rgba(0, 0, 0, 0.12);
  --header-nav-link-color: var(--color-text-primary);
  --header-nav-link-letter-spacing: 0.03em;

  --header-nav-link-hover-color: var(--color-primary);
  --header-nav-link-hover-letter-spacing: 0.05em;

  --header-nav-link-active-color: var(--color-text-primary);
  --header-nav-link-active-font-weight: 600;

  /* Burger-Menü */
  --burger-menu-color: var(--color-text-primary);
  --burger-line-height: 3px;
  --burger-line-margin-v: 3px;
  --burger-line-margin-h: 0;
  --burger-line-width: 26px;

  /* --- Footer --------------------------------------------- */
  --footer-bg-color: var(--color-background);
  --footer-font-color: rgba(255, 255, 255, 0.5);
  --footer-nav-link-hover-color: var(--color-accent);

  --footer-content-container-padding-v-1024: 0.8rem;
  --footer-content-container-padding-v-1200: 0.8rem;

  --footer-copyright-margin-b: 0.15rem;

  --footer-nav-gap: 0.2rem;

  --footer-nav-item-size-320: 0.78rem;
  --footer-nav-item-size-481: 0.78rem;
  --footer-nav-item-size-768: 0.78rem;
  --footer-nav-item-size-1024: 0.78rem;
  --footer-nav-item-size-1200: 0.78rem;

  --footer-nav-item-min-height-320: 1.6rem;
  --footer-nav-item-min-height-481: 1.7rem;
  --footer-nav-item-min-height-768: 1.7rem;
  --footer-nav-item-min-height-1024: 1.8rem;
  --footer-nav-item-min-height-1200: 1.8rem;

  --footer-nav-item-padding-v-320: 0.25rem;
  --footer-nav-item-padding-v-481: 0.25rem;
  --footer-nav-item-padding-v-768: 0.25rem;
  --footer-nav-item-padding-v-1024: 0.25rem;
  --footer-nav-item-padding-v-1200: 0.25rem;

  --footer-nav-item-padding-h-320: 0.5rem;
  --footer-nav-item-padding-h-481: 0.5rem;
  --footer-nav-item-padding-h-768: 0.5rem;
  --footer-nav-item-padding-h-1024: 0.5rem;
  --footer-nav-item-padding-h-1200: 0.5rem;

  --footer-nav-link-letter-spacing: 0.02em;
  --footer-nav-link-hover-letter-spacing: 0.05em;

  /* --- Responsive Inhaltscontainer ------------------------ */
  --content-container-max-width-320: 100%;
  --content-container-max-width-481: 100%;
  --content-container-max-width-768: 720px;
  --content-container-max-width-1024: 900px;
  --content-container-max-width-1200: 984px;

  --content-container-width-320: 100%;
  --content-container-width-481: 100%;
  --content-container-width-768: 92%;
  --content-container-width-1024: 88%;
  --content-container-width-1200: 82%;

  --content-container-padding-v-320: 0.5rem;
  --content-container-padding-v-481: 0.5rem;
  --content-container-padding-v-768: 1rem;
  --content-container-padding-v-1024: 1.1rem;
  --content-container-padding-v-1200: 1.1rem;

  --content-container-padding-h-320: 0.5rem;
  --content-container-padding-h-481: 0.5rem;
  --content-container-padding-h-768: 1rem;
  --content-container-padding-h-1024: 0.5rem;
  --content-container-padding-h-1200: 0.5rem;

  /* --- Cards (global) ------------------------------------- */
  --card-bg-color: var(--color-surface);
  --card-border-radius: 12px;
  --card-border-color: rgba(148, 163, 184, 0.18);
  --card-shadow: 0 4px 12px rgba(15, 23, 42, 0.12);
  --card-padding: 1.25rem 1.1rem;
  --card-title-font-size: 1.15rem;
  --card-title-font-weight: 600;
  --card-subtitle-font-size: 0.9rem;
  --card-hint-font-size: 0.85rem;

  /* Link & focus tokens */
  --link-color: var(--btn-text-color);
  --link-hover-color: var(--header-nav-link-hover-color);
  --focus-ring-color: rgba(50, 40, 130, 0.6);
  --focus-ring-width: 5px;
  --focus-ring-outline-color: rgba(50, 40, 130, 0.85);

  /* --- Design-Tokens für Card-Varianten (optional) ------- */
  /* große Seiten-Card (z. B. News-Hauptblock) */
  --card-page-radius: 26px;
  --card-page-shadow: 0 22px 60px rgba(15, 23, 42, 0.55), 0 0 0 1px rgba(148, 163, 184, 0.3);
  /* innere Cards (News-Teaser, Mannschafts-Kacheln) */
  --card-inner-radius: 10px;
  --card-inner-shadow: 0 2px 8px rgba(15, 23, 42, 0.12);

  /* --- Card Header (global) ------------------------------ */
  --card-header-border-color: rgba(148, 163, 184, 0.3);
  --card-header-gap: 12px;
  --card-header-padding-bottom: 14px;
  --page-card-section-mt: 20px;

  /* --- Filter Bar / Form Controls (global) -------------- */
  --filter-bar-gap: 0.9rem;
  --filter-bar-label-font-size: 0.9rem;
  --filter-bar-label-font-weight: 500;

  --filter-input-bg: var(--color-surface-muted);
  --filter-input-border-color: rgba(15, 23, 42, 0.14);
  --filter-input-radius: 999px;
  --filter-input-font-size: 0.9rem;
  --filter-input-placeholder-color: var(--color-text-secondary);

  --filter-input-focus-border-color: var(--color-primary);
  --filter-input-focus-shadow: 0 0 0 2px rgba(50, 40, 130, 0.18); /* an CI anpassen */

  /* --- Pagination (global) ------------------------------ */
  --pagination-font-size: 0.9rem;
  --pagination-gap: 0.4rem;
  --pagination-margin-top: 1.6rem;

  --pagination-btn-min-width: 2.1rem;
  --pagination-btn-padding-y: 0.25rem;
  --pagination-btn-padding-x: 0.55rem;
  --pagination-btn-radius: 999px;

  --pagination-btn-color: var(--color-primary);
  --pagination-btn-bg: transparent;
  --pagination-btn-border-color: transparent;

  --pagination-btn-active-bg: var(--color-primary);
  --pagination-btn-active-color: #ffffff;
  --pagination-btn-active-border-color: transparent;

  --pagination-btn-disabled-opacity: 0.4;
}

/* =========================================================
   Shared Card Base
   - Centralized base styles for page cards and small card-like components
   - Applies to generic `.card` and common page-specific card classes
   ========================================================= */
.card,
.location-card,
.contact-card,
.card--filled {
  padding: var(--card-padding);
  border-radius: var(--card-radius);
  border: 1px solid var(--card-border-color);
  background-color: var(--color-surface-muted);
  box-shadow: var(--card-shadow);
}

/* Global link and focus styles */
a {
  color: var(--link-color);
  text-decoration: none;
}

a:hover {
  color: var(--link-hover-color);
  text-decoration: underline;
}

/* Prefer :focus-visible for keyboard focus outlines */
a:focus-visible,
button:focus-visible,
input:focus-visible,
select:focus-visible,
textarea:focus-visible {
  outline: none;
  box-shadow: 0 0 0 var(--focus-ring-width) var(--focus-ring-color);
  border-radius: 6px;
}

/* add a high-contrast outline in addition to the shadow for clarity */
a:focus-visible,
button:focus-visible,
input:focus-visible,
select:focus-visible,
textarea:focus-visible {
  outline: 2px solid var(--focus-ring-outline-color);
  outline-offset: 2px;
}

/* Accessible skip link (add <a class="skip-link" href="#main">Skip to content</a> near top of body) */
.skip-link {
  position: absolute;
  left: -9999px;
  top: auto;
  width: 1px;
  height: 1px;
  overflow: hidden;
}
.skip-link:focus,
.skip-link:active {
  position: fixed;
  left: 1rem;
  top: 1rem;
  width: auto;
  height: auto;
  background: var(--card-bg-color);
  color: var(--color-text-primary);
  padding: 0.5rem 0.75rem;
  border-radius: 6px;
  box-shadow: var(--card-shadow);
  z-index: 9999;
}

/* =========================================================
   Root-Styles (Typografie & Hintergrund)
   ---------------------------------------------------------
   - Globale Design- und Typografie-Einstellungen gelten für alle Seiteninhalte.
   - Schriftfamilie, Schriftgröße und Zeilenhöhe werden zentral per Variable gesteuert.
   - Der Seitenhintergrund nutzt Vollflächen-Farbe und Bild mit Weichzeichnung.
   - Kombinierte Background-Properties erzeugen ein markantes, aber dezent wirkendes Seitenfundament.
   - Einstellungen im html-Tag garantieren Konsistenz und einfache Anpassbarkeit im Theme.
   ========================================================= */
html {
  font-family: var(--root-font-family);
  font-size: var(--root-font-size);
  line-height: 1.4;
  color: var(--color-text-primary);
}

p {
  text-wrap: pretty; /* fix(typo): verhindert Orphans */
}

body {
  background-color: var(--color-background); /* fix(perf): Hintergrundbild → body::before */
  position: relative;
}

/* fix(perf): Hintergrundbild auf ::before ausgelagert.
   filter: blur() statt backdrop-filter: blur() auf body —
   compositet nur das Pseudo-Element, nicht die gesamte Seite. */
body::before {
  content: "";
  position: fixed;
  inset: 0;
  z-index: -1;
  background:
    linear-gradient(to bottom, rgba(10, 16, 40, 0.42), rgba(10, 16, 40, 0.62)),
    url("../assets/images/bg-image-100.jpg") 50% 55% / cover no-repeat;
  filter: blur(3.5px);
  transform: scale(1.04); /* verhindert Blur-Artefakte an den Rändern */
}

h1 {
  line-height: var(--h1-line-height);
  font-weight: var(--h1-font-weight);
  margin-bottom: var(--h1-margin-bottom);

  font-size: clamp(1.55rem, 5vw, 2.25rem); /* fix(typo): clamp ersetzt feste 1.3rem */
  text-wrap: balance;
}
h2 {
  line-height: var(--h2-line-height);
  font-weight: var(--h2-font-weight);
  margin-bottom: var(--h2-margin-bottom);

  font-size: clamp(1.25rem, 4vw, 1.75rem); /* fix(typo): clamp */
  text-wrap: balance;
}
h3 {
  line-height: var(--h3-line-height);
  font-weight: var(--h3-font-weight);
  margin-bottom: var(--h3-margin-bottom);

  font-size: clamp(1.1rem, 3vw, 1.35rem); /* fix(typo): clamp */
  text-wrap: balance;
}
h4 {
  line-height: var(--h4-line-height);
  font-weight: var(--h4-font-weight);
  margin-bottom: var(--h4-margin-bottom);

  font-size: clamp(1rem, 2.5vw, 1.15rem); /* fix(typo): clamp */
  text-wrap: balance;
}

/* =========================================================
   RESET: Browser-Defaults neutralisieren
   ---------------------------------------------------------
   - Setzt margin und padding global auf 0 für konsistente Abstände.
   - box-sizing: border-box für alle Elemente – Padding/Borders werden bei Größenberechnung berücksichtigt.
   - body erhält min-height: 100vh für eine stets volle Fensterhöhe.
   - Sorgt für gleiche Ausgangsbasis für alle Browser vor dem Custom-Design.
   ========================================================= */
*,
*::before,
*::after {
  box-sizing: border-box;
}

body {
  margin: 0;
  padding: 0;
  min-height: 100vh; /* fix(perf): backdrop-filter entfernt → body::before */
}

/* =========================================================
   LAYOUT: Hauptstruktur, Rahmen und Container-Logik
   ---------------------------------------------------------
   - Flexbox organisiert die Hauptbereiche vertikal und hält den Footer immer am Seitenende.
   - Außencontainer decken die volle Fensterbreite für Hintergründe und optische Separation ab.
   - Inhaltscontainer sind zentriert und begrenzt, damit alle Inhalte unabhängig vom Gerät sichtbar bleiben.
   - Einheitliche Abstände und Paddings werden per Design-Variablen gesteuert.
   ========================================================= */
body {
  display: flex;
  flex-direction: column;
  min-height: 100vh;
}
/* Footer am Seitenende */
main {
  flex: 1;
}
/* Außencontainer: width:100% statt min-width:100vw, da 100vw Scrollbarbreite einschließt
   und auf Seiten mit vertikalem Scroll horizontalen Overflow verursacht */
.site-header,
.site-footer {
  width: 100%;
}
/* Inhaltscontainer */
.site-header__content-wrapper,
.main__content-wrapper,
.site-footer__content-wrapper {
  max-width: var(--content-container-max-width-320);
  width: var(--content-container-width-320);
  margin: 0 auto;
  padding: var(--content-container-padding-v-320) var(--content-container-padding-h-320);
}

/* ========================================================
   Filter Bar (z.B. News, Termine)
   --------------------------------------------------------
   - .filter-bar:   Container für eine komplette Filter-/Suchleiste
   - .filter-bar__group: logische Gruppe von Controls innerhalb der Leiste
   - .filter-bar__label: Beschriftung (z. B. "Suche:", "Jahr:")
   - .filter-bar__input-wrapper: Hülle für Textfeld mit Icon
   - .filter-bar__icon: führendes Icon im Textfeld (Lupen-Icon etc.)
   - .filter-bar__input: Textfeld (Suche, Freitextfilter)
   - .filter-bar__select: Dropdown (z. B. Jahr-/Saison-Auswahl)
   - .filter-bar__input--with-icon: Input mit zusätzlichem Platz links
   =======================================================*/

/* Gesamter Zeilen-Container für Filter/Suche
   Einsatz: Wrapper um alle Filter-Controls (Buttons, Inputs, Selects) */
.filter-bar {
  display: flex;
  flex-wrap: wrap;
  gap: var(--filter-bar-gap);
  align-items: center;
}

/* Gruppierung zusammengehöriger Controls
   Beispiel:
   - Gruppe 1: "Suche" + Suchfeld
   - Gruppe 2: "Jahr" + Select
   - Gruppe 3: "Filterlabel" + Chip-Buttons (Alle / Punktspiele / …) */
.filter-bar__group {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.5rem;
}

@media (max-width: 480px) {
  .filter-bar__label {
    display: none;
  }
}

/* Variante für Gruppen, die wachsen sollen
   Einsatz: z. B. Suchfeld-Gruppe, die den verfügbaren Platz füllt */
.filter-bar__group--grow {
  flex: 1 1 230px;
}

/* Labels der Filter-Controls
   Einsatz: Beschriftung vor Input/Select („Suche:“, „Jahr:“) */
.filter-bar__label {
  font-size: var(--filter-bar-label-font-size);
  font-weight: var(--filter-bar-label-font-weight);
  color: var(--color-text-primary); /* fix(color): war var(--color-background) = #0a1028, jetzt korrekt */
}

/* Wrapper um ein Eingabefeld
   Einsatz: wenn ein Textfeld ein Icon enthalten soll (Such-Icon etc.) */
.filter-bar__input-wrapper {
  position: relative;
  flex: 1;
}

/* Führendes Icon im Textfeld
   Einsatz: Icon links im Suchfeld, rein dekorativ (aria-hidden) */
.filter-bar__icon {
  position: absolute;
  left: 0.75rem;
  top: 50%;
  transform: translateY(-50%);
  color: var(--filter-input-placeholder-color);
  pointer-events: none;
}

/* Basistypografie und Look für Textfelder & Selects
   Einsatz: alle Filter-Inputs und -Selects (Suche, Jahr, Saison ...) */
.filter-bar__input,
.filter-bar__select {
  width: 100%;
  padding: 0.45rem 0.9rem;
  border-radius: var(--filter-input-radius);
  border: 1px solid var(--filter-input-border-color);
  background: var(--filter-input-bg);
  font-size: var(--filter-input-font-size);
  color: var(--color-text-primary); /* fix(color): war var(--color-background) = #0a1028, jetzt korrekt */
}

/* Zusätzlicher linke Innenabstand
   Einsatz: wenn ein Input ein Icon mit .filter-bar__icon nutzt */
.filter-bar__input--with-icon {
  padding-left: 2.3rem;
}

/* Platzhalter-Farbe für Textfelder
   Einsatz: alle Inputs mit Platzhaltertext („z. B. Turnier…“) */
.filter-bar__input::placeholder {
  color: var(--filter-input-placeholder-color);
}

/* Fokuszustand für Inputs & Selects
   Einsatz: Tastatur-/Mausfokus, hebt das aktuell aktive Feld hervor */
.filter-bar__input:focus,
.filter-bar__select:focus {
  outline: none;
  border-color: var(--filter-input-focus-border-color);
  box-shadow: var(--filter-input-focus-shadow);
}

/* =========================================================
   BUTTONS (GLOBAL)
   ---------------------------------------------------------
   Nutzung:
   - Immer .btn als Basis für alle interaktiven Buttons/Chips verwenden
   - Varianten werden zusätzlich angehängt:
     * .btn.btn--primary                → Hauptaktion (z.B. Formular-Submit)
     * .btn.btn--text                   → Link-/Text-Button ohne Hintergrund
     * .btn.btn--chip                   → Filter-/Tag-Button (Chip)
     * .btn.btn--chip.btn--chip-selected → ausgewählter Filter-Chip
     * .btn.btn--assist                 → „Assist“-Link/Chip, z.B. Aufstellung/Spielplan/Tabelle
   - Optionales Icon/Check in Chips:
     * .btn--chip__check                → kleines Icon im Chip; nur bei ausgewähltem Chip sichtbar
   ========================================================*/

/* Basis-Stil für alle Buttons/Chips
   Einsatz: immer zusammen mit einer Varianten-Klasse verwenden (.btn--primary, .btn--chip, ...) */
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: var(--btn-radius-pill);
  font-size: var(--btn-font-size);
  font-weight: 500;
  cursor: pointer;
  border: 1px solid transparent;
  gap: 0.35rem;
  line-height: 1.4;
  letter-spacing: 0.02em;
  transition:
    background-color 140ms ease-out,
    border-color 140ms ease-out,
    box-shadow 140ms ease-out,
    transform 100ms ease-out,
    color 100ms ease-out;
  text-decoration: none;
}

/* --- Varianten --- */

/* Primärer Button (Hauptaktion)
   Beispiel:
   <button class="btn btn--primary" type="submit">Absenden</button> */
.btn--primary {
  padding: 0.4rem 1rem;
  background: var(--color-primary);
  color: var(--color-surface);
  box-shadow: var(--btn-primary-shadow);
}

.btn--primary:hover,
.btn--primary:focus-visible {
  background: var(--color-primary-strong);
  box-shadow: 0 4px 14px rgba(50, 40, 130, 0.35);
  transform: translateY(-1px);
  text-decoration: none;
}

/* Text-Button ohne Hintergrund (Link-Ersatz)
   Beispiel:
   <a href="..." class="btn btn--text">Alle Termine anzeigen</a> */
.btn--text {
  background: transparent;
  color: var(--btn-text-color);
  padding: 0.3rem 0;
  border: none;
  box-shadow: none;
}

/* Hover-Effekt für Text-Buttons
   Einsatz: Unterstreichung o. Ä. beim Überfahren mit der Maus */
.btn--text:hover {
  text-decoration: var(--btn-text-hover-decoration);
}

/* Assist-Button (sekundärer Chip-Button)
   Einsatz: Links wie „Aufstellung“, „Spielplan“, „Tabelle“ unter Mannschaften/Terminen */
.btn--assist {
  padding: 0.25rem 0.85rem;
  border-radius: var(--btn-radius-pill);
  font-size: var(--btn-font-size);
  font-weight: 500;
  color: var(--btn-assist-text-color);
  background: var(--btn-assist-bg);
  border: 1px solid var(--btn-assist-border-color);
  box-shadow: var(--btn-assist-shadow);
}

/* Hover-/Fokuszustand für Assist-Buttons
   Einsatz: visuelles Feedback bei Maus und Tastatur-Fokus */
.btn--assist:hover,
.btn--assist:focus-visible {
  background: var(--btn-assist-bg-hover);
  border-color: var(--btn-assist-border-color-hover);
  box-shadow: var(--btn-assist-shadow-hover);
  text-decoration: none;
}

/* Chip-Button (Filter/Tag)
   Beispiel:
   <button class="btn btn--chip" type="button">Filter</button>
   Einsatz: Filterleisten für Termine, News, ggf. weitere Listen */
.btn--chip {
  padding: 0.25rem 0.9rem;
  border-radius: var(--btn-radius-pill);
  border: 1px solid var(--btn-chip-border-color);
  background: var(--btn-chip-bg);
  color: var(--btn-chip-text-color);
  box-shadow: var(--btn-chip-shadow);
}

/* Optionales Check-Icon im Chip
   Beispiel:
   <button class="btn btn--chip btn--chip-selected">
     <span class="btn--chip__check">✔</span>
     <span>Alle</span>
   </button>
   Einsatz: kleines Häkchen links im ausgewählten Chip anzeigen */
.btn--chip__check {
  font-size: var(--btn-chip-check-font-size);
  display: none;
  transform: translateY(0.5px);
}

/* Ausgewählter Filter-Chip
   Einsatz: aktiver Zustand in Filterleisten (z.B. „Alle“ oder „Punktspiele“ gewählt) */
.btn--chip.btn--chip-selected {
  background-color: var(--btn-chip-selected-bg);
  color: var(--btn-chip-selected-text-color);
  border-color: var(--btn-chip-selected-border-color);
  box-shadow: var(--btn-chip-selected-shadow);
}

/* Hover für nicht ausgewählte Chips
   Einsatz: visuelles Feedback beim Überfahren, aber nur wenn Chip nicht aktiv ist */
.btn--chip:hover:not(.btn--chip-selected) {
  background: var(--btn-chip-hover-bg);
  border-color: var(--btn-chip-hover-border-color);
  box-shadow: var(--btn-chip-hover-shadow);
}

/* Check-Icon nur beim ausgewählten Chip anzeigen
   Einsatz: Häkchen erscheint erst, wenn der Chip aktiv ist */
.btn--chip.btn--chip-selected .btn--chip__check {
  display: inline-block;
}

/* =========================================
   NEU: Chips / Badges (Season, Status etc.)
   ========================================= */

.chip {
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
  padding: var(--chip-padding-y) var(--chip-padding-x);
  border-radius: var(--chip-radius);
  background: var(--chip-bg);
  color: var(--chip-text-color);
  font-size: var(--chip-font-size);
  font-weight: var(--chip-font-weight);
  white-space: nowrap;
}

/* kleiner Punkt im Chip */
.chip__dot {
  width: 8px;
  height: 8px;
  border-radius: 999px;
  background: var(--color-primary); /* „aktiv“ */
}

/* ========== Tabellen (global) ========== */
/* Responsive Wrapper: scrollt horizontal statt den Viewport zu überschreiten */
.table-responsive {
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
  background:
    linear-gradient(to right, var(--card-bg-color) 30%, transparent),
    linear-gradient(to left, var(--card-bg-color) 30%, transparent) right,
    linear-gradient(to right, rgba(0, 0, 0, 0.12), transparent),
    linear-gradient(to left, rgba(0, 0, 0, 0.12), transparent) right;
  background-size:
    2rem 100%,
    2rem 100%,
    1rem 100%,
    1rem 100%;
  background-repeat: no-repeat;
  background-attachment: local, local, scroll, scroll;
}

/* Basis-Tabelle */
.table {
  width: 100%;
  border-collapse: collapse;
  border-spacing: 0;
  font-size: var(--table-body-font-size);
  color: var(--table-text-color);
}

/* Standard: alles linksbündig */
.table th,
.table td {
  text-align: left;
}

/* Variante: Tabelle in „Card”-Optik wie auf deiner HP */
.table--card {
  background: var(--table-bg);
  border-radius: var(--table-radius);
  box-shadow: var(--table-shadow);
  overflow: hidden; /* Radius auch für Header-Zeile */
}

/* Im Scroll-Container: Tabellenhintergrund transparent, damit der Scroll-Hinweis sichtbar wird */
.table-responsive .table--card {
  background: transparent;
}

/* Header */
.table thead th {
  background: var(--table-header-bg);
  color: var(--table-header-text-color);
  text-align: left;
  font-weight: 600;
  font-size: var(--table-header-font-size);
  padding: var(--table-cell-padding-y) var(--table-cell-padding-x);
  border-bottom: 1px solid var(--table-border-color);
}

/* Body-Zellen */
.table tbody td {
  padding: var(--table-cell-padding-y) var(--table-cell-padding-x);
  border-bottom: 1px solid var(--table-border-color);
}

/* Nur dezenter Hover */
.table tbody tr:hover {
  background: var(--table-row-hover-bg);
}

/* =========================================================
   Pagination – global
   ---------------------------------------------------------
   - .pagination: Container (meist <nav>)
   - .pagination__btn: einzelne Seite / Prev / Next
   ========================================================= */

.pagination {
  margin-top: var(--pagination-margin-top);
  display: flex;
  justify-content: center;
  align-items: center;
  gap: var(--pagination-gap);
  font-size: var(--pagination-font-size);
  color: var(--color-text-secondary);
}

.pagination__btn {
  min-width: var(--pagination-btn-min-width);
  padding: var(--pagination-btn-padding-y) var(--pagination-btn-padding-x);
  border-radius: var(--pagination-btn-radius);
  border: 1px solid var(--pagination-btn-border-color);
  background: var(--pagination-btn-bg);
  cursor: pointer;
  font: inherit;
  color: var(--pagination-btn-color);
  line-height: 1;
  text-align: center;
}

/* Aktive Seite */
.pagination__btn--active,
.pagination__btn[aria-current="page"] {
  background: var(--pagination-btn-active-bg);
  color: var(--pagination-btn-active-color);
  border-color: var(--pagination-btn-active-border-color);
}

/* Disabled-Zustand */
.pagination__btn[disabled] {
  opacity: var(--pagination-btn-disabled-opacity);
  cursor: default;
}

/* Fokus sichtbar halten (WCAG) */
.pagination__btn:focus-visible {
  outline: 2px solid var(--color-accent);
  outline-offset: 2px;
}

/* =========================================================
   PAGE CARD LAYOUT (globales Seiten-Template)
   Nutzung:
   - Für alle Inhaltsseiten (Mannschaften, Termine, Verein...)
   - HTML-Grundstruktur:
     <section class="page-card card card--elevated">
       <header class="page-card__header ...">...</header>
       <!-- optional: .page-card__filter-bar -->
       <div class="page-card__body ...">...</div>
       <!-- optional: .page-card__footer -->
     </section>
========================================================= */

/* ---------------------------------------------------------
   Card-Basisklasse + Varianten
   Nutzung:
   - .card immer zusätzlich zu semantischen Containern:
     <article class="team-card card card--filled">
   - Varianten:
     .card--elevated = Standard mit Schatten
     .card--filled   = gefüllte, helle Fläche
     .card--outlined = nur Rahmen, ohne Schatten
--------------------------------------------------------- */

/* --- Basis-Card --- */
.card {
  background: var(--md-surface);
  color: var(--md-on-surface);
  border-radius: var(--card-inner-radius);
  padding: var(--card-padding);
  box-shadow: var(--md-shadow-low);
  border: 1px solid var(--md-outline);
  transition:
    box-shadow 0.18s ease,
    transform 0.18s ease,
    border-color 0.18s ease,
    background-color 0.18s ease;
}

/* --- Modifier --- */
/* Elevated (Standard-Card, z.B. Page-Card selbst) */
.card--elevated {
  background: var(--card-bg-color);
  border: 1px solid rgba(148, 163, 184, 0.18);
  box-shadow: var(--card-inner-shadow);
}

/* Filled (z.B. innere Übersichtskarten oder Team-Karten) */
.card--filled {
  background: var(--color-surface-muted);
  border: 1px solid transparent;
  box-shadow: none;
}

/* Outlined (ruhigere Variante, Fokus auf Inhalt) */
.card--outlined {
  background: var(--card-bg-color);
  border: 1px solid rgba(148, 163, 184, 0.6);
  box-shadow: none;
}

/* Generelles Hover-Verhalten für alle Cards */
.card:hover {
  box-shadow: 0 12px 34px rgba(15, 23, 42, 0.2);
  transform: translateY(-1px);
}

/* =========================================================
   Page Card als Spezialvariante für zentrale Inhaltsbereich pro Seite
========================================================= */

/* Karte für Inhaltbereich der */
.page-card {
  background: var(--card-bg-color);
  box-shadow: var(--card-page-shadow);
  border: 1px solid var(--card-border-color);
  border-top: 3px solid var(--color-accent);

  border-radius: var(--card-inner-radius);
  padding: var(--card-padding);
  transition:
    box-shadow 0.18s ease,
    transform 0.18s ease,
    border-color 0.18s ease,
    background-color 0.18s ease;
}

/* =========================================================
   Header der Seitenkarte
   Nutzung:
   - Immer als erster Block innerhalb .page-card
   - Variante .page-card__header--has-meta, wenn rechts
     ein Meta-Bereich (z.B. Saison) angezeigt wird.
========================================================= */

/* --- Basis-Header (ohne Meta-Bereich) --------------------- */

.page-card__header {
  padding-bottom: var(--card-header-padding-bottom);
  border-bottom: 1px solid var(--card-header-border-color);
}

/* --- Header-Layout mit Meta-Bereich ----------------------- */

/* Layout mit Titel links und Meta (Badge) rechts */
.page-card__header--has-meta {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  gap: 1rem;
}

/* Auf Mobile: Badge über den Titel stellen, volle Titelbreite */
@media (max-width: 480px) {
  .page-card__header--has-meta {
    flex-direction: column;
    gap: 0.4rem;
  }

  .page-card__header-meta {
    order: -1;
  }
}

/* Linke Spalte: Titel + Untertitel */
.page-card__header-main {
  flex: 1;
}

/* Rechte Spalte: z.B. Saison-Badge */
.page-card__header-meta {
  display: flex;
  align-items: flex-start;
}

/* --- Header-Inhalte --------------------------------------- */

/* Seitentitel  */
.page-card__title {
  margin: 0;
  font-size: clamp(1.3rem, 4vw, 1.75rem); /* fix(typo): max war zu klein (1.375rem) */
  font-weight: 700; /* fix(typo): 650 ist kein gültiges Inter-Gewicht */
  letter-spacing: 0.01em;
  line-height: 1.3;
}

/* Untertitel / Intro-Text */
.page-card__subtitle {
  margin-top: 0.35rem;
  margin-bottom: 0;
  font-size: 0.9375rem;
  line-height: 1.5;
  color: var(--color-text-secondary);
}

/* Saison-/Status-Badge (rein informativ, nicht klickbar) */
.page-card__meta-badge {
  display: inline-flex;
  align-items: center;
  padding: 0.2rem 0.75rem;
  border-radius: 999px;
  background: rgba(252, 235, 25, 0.18);
  border: 1px solid rgba(252, 235, 25, 0.35);
  color: var(--color-accent-text); /* fix(color): hard-coded #5c4700 → Token */
  font-size: 0.82rem;
  font-weight: 600;
  line-height: 1.3;
  letter-spacing: 0.01em;
  white-space: nowrap;
}

/* --- Filter --------------------------------------- */
.page-card__filterbar {
  margin-top: var(--page-card-section-mt);
}

/* --- Page Body --------------------------------------- */
.page-card__body {
  margin-top: var(--page-card-section-mt);
}

/* --- Page Footer (optional) --------------------------------------- */
.page-card__footer {
  margin-top: var(--page-card-section-mt);
  display: flex;
  justify-content: flex-end;
}

/* =========================================================
   CARD-CONTAINER: GRID-LAYOUT
   Nutzung:
   - Für Übersichts-Kacheln (Mannschaften, Links, News ...)
   - Typisch in Kombination mit .card, z.B.:
       <div class="card-grid card-grid--2">
         <article class="card card--filled">...</article>
         <article class="card card--filled">...</article>
       </div>
========================================================= */

/* Basis: einspaltiges Grid mit Abstand */
.card-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 1rem;
  margin-top: 1.4rem;
}

/* Zwei-spaltiges Grid erst ab Desktop (1024px) —
   Bei 768px (Tablet) zu wenig Platz für 3 Buttons in einer Zeile.
   Verketteter Selector hat höhere Spezifizität als .card-grid allein. */
@media (min-width: 1024px) {
  .card-grid.card-grid--2 {
    grid-template-columns: repeat(2, 1fr);
  }
}

/* ─── Team-Card Subkomponenten (Mannschaften-Seite) ─── */

/* Info-Block: Name + Liga mit sauberem Abstand */
.team-card__info {
  margin-bottom: 14px;
}

.team-card__info h3 {
  margin: 0 0 5px;
}

.team-card__info p {
  margin: 0;
}

/* Button-Zeile: flex mit wrap und gap */
.team-card__links {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
}

/* Kompaktere Buttons innerhalb der Kacheln — passen sicher in eine Zeile */
.team-card__links .btn--assist {
  padding: 0.2rem 0.65rem;
  font-size: 0.82rem;
}

/* =========================================================
   CARD-CONTAINER: LISTEN-LAYOUT
   Nutzung:
   - Für Listenansichten mit Cards (z.B. Termine, Tabellenzeilen)
   - Kinder bestimmen die Breite, Reihenfolge ist vertikal
========================================================= */

.card-list {
  display: block; /* Standard-Flow; Cards untereinander */
}

.card-list > .card {
  margin-bottom: 0.75rem; /* Abstand zwischen den Cards */
}

/* =========================================================
   LIST-ITEM: Zwei-spaltige Listen (generisch)
   Nutzung: Für zeitbasierte Events, Einträge mit schmalem Label + Info
            z.B. Terminliste (Datum | Event-Infos)
   Pattern:
   <ul class="list">
     <li class="list-item" data-tags="category">
       <div class="list-item__column list-item__column--narrow">Datum</div>
       <div class="list-item__column list-item__column--flexible">
         <div class="list-item__title">Titel</div>
         <div class="list-item__meta">Details</div>
       </div>
     </li>
   </ul>
========================================================= */

.list {
  margin: 0;
  padding: 0;
  list-style: none;
}

.list-item {
  display: grid;
  grid-template-columns: 1fr;
  gap: 0;
  padding: 0.75rem 0;
  border-bottom: 1px solid rgba(15, 23, 42, 0.08);
}

.list-item:last-child {
  border-bottom: none;
}

.list-item:hover {
  background-color: rgba(15, 23, 42, 0.02);
}

.list-item__column {
  display: flex;
  flex-direction: column;
}

.list-item__column--narrow {
  color: var(--color-text-secondary);
  font-size: 0.9rem;
}

.list-item__column--flexible {
  gap: 0.15rem;
}

.list-item__title {
  font-weight: 600;
  color: var(--color-text-primary);
  font-size: 0.95rem;
}

.list-item__meta {
  color: var(--color-text-secondary);
  font-size: 0.85rem;
}

.list-item--highlighted {
  background: rgba(252, 235, 25, 0.09);
}

.list-item .btn--text {
  align-self: flex-start;
}

/* =========================================================
   ZENTRALE KOMPONENTEN: Tabs, Tabellen, etc.
   ========================================================= */

/* --- TAB-NAVIGATION (Material Design Primärtabs) --- */
.tabs {
  display: flex;
  flex-wrap: nowrap;
  border-bottom: 1px solid var(--md-outline);
  margin-top: 12px;
  overflow-x: auto;
  scroll-snap-type: x mandatory; /* fix(components): Tab-Scroll snap */
  /* Scroll-Hinweis: Schatten zeigt an, dass rechts weitere Tabs vorhanden sind */
  background:
    linear-gradient(to right, var(--card-bg-color) 30%, transparent),
    linear-gradient(to left, var(--card-bg-color) 30%, transparent) right,
    linear-gradient(to right, rgba(0, 0, 0, 0.08), transparent),
    linear-gradient(to left, rgba(0, 0, 0, 0.08), transparent) right;
  background-size:
    2rem 100%,
    2rem 100%,
    1rem 100%,
    1rem 100%;
  background-repeat: no-repeat;
  background-attachment: local, local, scroll, scroll;
}

/* Scrollbar auf Mobile unsichtbar — Gradient-Hinweis übernimmt */
@media (max-width: 767px) {
  .tabs::-webkit-scrollbar {
    display: none;
  }
  .tabs {
    scrollbar-width: none;
  }
}

/* filter-bar__group innerhalb von Tabs: kein Wrap, kein Gap */
.tabs .filter-bar__group {
  flex-wrap: nowrap;
  gap: 0;
}

.tab {
  position: relative;
  flex: 0 0 auto;
  scroll-snap-align: start; /* fix(components): snap point */
  padding: 14px 16px;
  font-size: 0.9rem;
  cursor: pointer;
  color: var(--md-on-surface-variant);
  border: none;
  background: transparent;
  outline: none;
  transition: color 0.15s ease;
}

.tab--active {
  color: var(--color-text-primary);
  font-weight: 500;
}

.tab::after {
  content: "";
  position: absolute;
  left: 16px;
  right: 16px;
  bottom: 0;
  height: 2px;
  background-color: transparent;
  transition: background-color 0.15s ease;
}

.tab--active::after {
  background-color: var(--color-accent);
}

.tab:focus-visible {
  box-shadow: 0 0 0 2px rgba(25, 118, 210, 0.4);
  border-radius: 999px;
}

.tabs::-webkit-scrollbar {
  height: 4px;
}

.tabs::-webkit-scrollbar-thumb {
  background-color: rgba(148, 163, 184, 0.9);
  border-radius: 999px;
}

/* --- TAB-PANEL (Inhalte) --- */
.tab-panel {
  display: none;
  padding: 12px 12px 8px;
}

.tab-panel.tab-panel--active {
  display: block;
}

/* --- TABLES (Material Design Data Table) --- */
.table-wrapper {
  border-radius: 8px;
  border: 1px solid var(--md-outline);
  overflow: auto;
  background-color: var(--md-surface);
  box-shadow: var(--md-shadow-low);
}

.table,
table {
  width: 100%;
  border-collapse: collapse;
  font-size: 0.85rem;
}

thead {
  background-color: var(--md-surface-variant);
}

th,
td {
  padding: 8px 10px;
  text-align: left;
  border-bottom: 1px solid var(--md-outline);
}

th {
  font-weight: 600;
  font-size: 0.8rem;
  color: var(--md-on-surface-variant);
  text-transform: uppercase;
  letter-spacing: 0.04em;
}

tbody tr:hover {
  background-color: rgba(148, 163, 184, 0.12);
}

.cell-num {
  text-align: right;
  font-variant-numeric: tabular-nums;
}

.cell-self {
  background: var(--table-header-bg);
}

.cell-offen {
  background: rgba(252, 235, 25, 0.12);
}

/* Responsive Spaltenköpfe: Mobile zeigt kurzen Text, Desktop langen Text */
.th-long {
  display: none;
}
.th-short {
  display: inline;
}

@media (min-width: 768px) {
  .th-long {
    display: inline;
  }
  .th-short {
    display: none;
  }
}

/* ========== Kreuztabelle: Sticky Spalten + Scroll-Hinweis ========== */

/* ========== Teilnehmer: Nr.-Spalte kompakt ========== */

#tab-teilnehmer .table thead th:nth-child(1),
#tab-teilnehmer .table tbody td:nth-child(1) {
  width: 3rem;
  min-width: 3rem;
  text-align: center;
}

/* border-collapse:collapse + overflow:hidden auf .table--card brechen position:sticky in allen Browsern */
#tab-kreuztabelle {
  --col-nr-width: 2.5rem; /* Breite der Nr.-Spalte — als Anker für left-Offset der 2. Spalte */
}

#tab-kreuztabelle .table {
  border-collapse: separate;
  border-spacing: 0;
}

/* overflow:hidden von .table--card aufheben — sonst funktioniert sticky nie */
#tab-kreuztabelle .table--card {
  overflow: visible;
}

/* border-radius stattdessen direkt auf die Ecken der Kopfzeile legen */
#tab-kreuztabelle .table thead th:first-child {
  border-top-left-radius: var(--table-radius);
}

#tab-kreuztabelle .table thead th:last-child {
  border-top-right-radius: var(--table-radius);
}

/* Nr.-Spalte: klebt links am Rand */
#tab-kreuztabelle .table thead th:nth-child(1),
#tab-kreuztabelle .table tbody td:nth-child(1) {
  position: sticky;
  left: 0;
  z-index: 1;
  width: var(--col-nr-width);
  min-width: var(--col-nr-width);
  background: var(--card-bg-color);
}

/* Teilnehmer-Spalte: klebt direkt nach der Nr.-Spalte */
#tab-kreuztabelle .table thead th:nth-child(2),
#tab-kreuztabelle .table tbody td:nth-child(2) {
  position: sticky;
  left: var(--col-nr-width);
  z-index: 1;
  min-width: 8rem;
  background: var(--card-bg-color);
  border-right: 2px solid var(--table-border-color);
}

/* Header-Zellen: eigene Hintergrundfarbe + höherer z-index, damit sie über Body-Zeilen liegen */
#tab-kreuztabelle .table thead th:nth-child(1),
#tab-kreuztabelle .table thead th:nth-child(2) {
  z-index: 2;
  background: var(--table-header-bg);
}

/* Ergebnis- und Zahlenspalten: eng und zentriert */
#tab-kreuztabelle .table .cell-num {
  text-align: center;
  padding-left: 0.3rem;
  padding-right: 0.3rem;
  min-width: 2rem;
}

/* Pkt.-Spalte: etwas breiter als Ergebnis-Spalten (Werte wie "5,5") */
#tab-kreuztabelle .table thead th:last-child,
#tab-kreuztabelle .table tbody td:last-child {
  padding-left: 0.5rem;
  padding-right: 0.5rem;
  min-width: 2.5rem;
}

/* ========== Rangliste: Sticky Spalten + Scroll-Hinweis ========== */

#tab-tabelle {
  --col-nr-width: 3.5rem;
}

#tab-tabelle .table {
  border-collapse: separate;
  border-spacing: 0;
}

#tab-tabelle .table--card {
  overflow: visible;
}

#tab-tabelle .table thead th:first-child {
  border-top-left-radius: var(--table-radius);
}

#tab-tabelle .table thead th:last-child {
  border-top-right-radius: var(--table-radius);
}

#tab-tabelle .table thead th:nth-child(1),
#tab-tabelle .table tbody td:nth-child(1) {
  position: sticky;
  left: 0;
  z-index: 1;
  width: var(--col-nr-width);
  min-width: var(--col-nr-width);
  background: var(--card-bg-color);
}

#tab-tabelle .table thead th:nth-child(2),
#tab-tabelle .table tbody td:nth-child(2) {
  position: sticky;
  left: var(--col-nr-width);
  z-index: 1;
  min-width: 8rem;
  background: var(--card-bg-color);
  border-right: 2px solid var(--table-border-color);
}

#tab-tabelle .table thead th:nth-child(1),
#tab-tabelle .table thead th:nth-child(2) {
  z-index: 2;
  background: var(--table-header-bg);
}

/* Zahlenspalten zentrieren und Padding reduzieren */
#tab-tabelle .table thead th.cell-num,
#tab-tabelle .table tbody td.cell-num {
  text-align: center;
  padding-left: 0.6rem;
  padding-right: 0.6rem;
}

/* Turnier-Tabellen auf kleinen Bildschirmen: kleinere Schrift = mehr Inhalt pro Zeile */
@media (max-width: 767px) {
  #tab-kreuztabelle .table,
  #tab-tabelle .table {
    font-size: 0.82rem;
  }
}

/* ========== Ansetzungen: Akkordeon ========== */

.round-accordion {
  background: #ffffff;
  border: 1px solid var(--color-border);
  border-radius: 12px;
  overflow: hidden;
  margin-bottom: 0.5rem;
  transition:
    border-color 0.2s,
    box-shadow 0.2s;
}

.round-accordion--open {
  border-color: rgba(15, 23, 42, 0.2);
  box-shadow: 0 2px 12px rgba(15, 23, 42, 0.08);
}

/* Kopf-Button */
.round-accordion__btn {
  width: 100%;
  display: grid;
  grid-template-columns: 1fr auto auto;
  align-items: center;
  gap: 0.6rem;
  padding: 0.75rem 0.9rem;
  background: #ffffff;
  border: none;
  cursor: pointer;
  text-align: left;
  user-select: none;
}

.round-accordion__btn:hover {
  filter: brightness(0.97);
}

/* Hover-Effekt nur auf Geräten mit echter Maus (nicht Touch) */
@media (hover: none) {
  .round-accordion__btn:hover {
    filter: none;
  }
}

.round-accordion__btn {
  -webkit-tap-highlight-color: transparent;
}

.round-accordion__btn:focus {
  outline: none;
  background: #ffffff;
}

.round-accordion__btn:focus-visible {
  outline: 2px solid var(--color-primary);
  outline-offset: -2px;
  background: #ffffff;
}

.round-accordion__info {
  min-width: 0;
}

.round-accordion__title {
  font-size: 0.92rem;
  font-weight: 700;
  color: var(--color-text-primary);
  margin: 0;
  transition: color 0.2s;
}

.round-accordion--open .round-accordion__title {
  color: var(--color-text-primary);
}

.round-accordion__meta {
  font-size: 0.72rem;
  color: var(--color-text-secondary);
  margin: 0.1rem 0 0;
}

/* „läuft"-Badge */
.round-accordion__badge {
  font-size: 0.62rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  padding: 0.2rem 0.75rem;
  border-radius: 999px;
  background: rgba(252, 235, 25, 0.18);
  border: 1px solid rgba(252, 235, 25, 0.35);
  color: var(--color-accent-text); /* fix(color): hard-coded #5c4700 → Token */
  white-space: nowrap;
}

/* Pfeil-Icon */
.round-accordion__chevron {
  font-size: 0.8rem;
  color: var(--color-text-secondary);
  transition:
    transform 0.25s ease,
    color 0.2s;
  display: inline-block;
}

.round-accordion--open .round-accordion__chevron {
  transform: rotate(180deg);
  color: var(--color-text-primary);
}

/* Ausklappbarer Body – max-height Ansatz */
.round-accordion__body {
  overflow: hidden;
  max-height: 0;
  transition: max-height 0.3s ease;
}

.round-accordion--open .round-accordion__body {
  max-height: 3000px;
}

.round-accordion__inner {
  padding: 0 0.75rem 0.75rem;
}

/* ========== Ansetzungen: Paarungs-Liste ========== */

.pairing-list {
  border-top: 1px solid var(--table-border-color);
  border-bottom: 1px solid var(--table-border-color);
  overflow: hidden;
  background: var(--table-bg);
  box-shadow: var(--table-shadow);
  font-size: 0.85rem;
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
}

.pairing-header,
.pairing-row {
  display: grid;
  grid-template-columns: 3rem minmax(0, 1fr) 2.5rem minmax(0, 1fr) 2.5rem 5.5rem;
  border-bottom: 1px solid var(--table-border-color);
}

.pairing-row:last-child {
  border-bottom: none;
}

.pairing-header {
  background: var(--table-header-bg);
}

.pairing-cell {
  padding: var(--table-cell-padding-y) var(--table-cell-padding-x);
}

.pairing-header .pairing-cell {
  font-weight: 600;
  font-size: var(--table-header-font-size);
  color: var(--table-header-text-color);
}

.pairing-cell--board,
.pairing-cell--pts {
  text-align: center;
  font-variant-numeric: tabular-nums;
  padding-left: 0.3rem;
  padding-right: 0.3rem;
}

.pairing-cell--players,
.pairing-cell--sep {
  display: none;
}

.pairing-cell--result {
  font-weight: 600;
  text-align: right;
  padding-left: 0.3rem;
  padding-right: 0.3rem;
}

@media (max-width: 767px) {
  /* Desktop-Tabelle auf Mobil ausblenden */
  .pairing-list {
    display: none;
  }
}

/* ========== Variante A: Paarungskarten (Mobil) ========== */

/* Auf Desktop ausblenden – nur auf Mobil sichtbar */
.vm-pairing-cards {
  display: none;
}

@media (max-width: 767px) {
  .vm-pairing-cards {
    display: flex;
    flex-direction: column;
    gap: 0.5rem;
  }

  .vm-pairing-card {
    display: grid;
    grid-template-columns: 1.85rem 1fr auto;
    gap: 0.6rem;
    align-items: center;
    background: var(--color-surface);
    border: 1px solid var(--color-border);
    border-radius: 11px;
    padding: 0.5rem 0.6rem;
  }

  /* Brett-Chip */
  .vm-board {
    align-self: stretch;
    display: flex;
    align-items: center;
    justify-content: center;
    background: rgba(50, 40, 130, 0.08);
    color: var(--color-primary-strong);
    border-radius: 8px;
    font-size: 0.82rem;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    min-height: 2.5rem;
  }

  /* Spieler-Spalte */
  .vm-players {
    display: flex;
    flex-direction: column;
    gap: 0.22rem;
    min-width: 0;
  }

  .vm-player {
    display: flex;
    align-items: center;
    gap: 0.45rem;
    min-width: 0;
  }

  .vm-player--win .vm-name {
    font-weight: 700;
  }

  /* Farb-Scheibe Weiß / Schwarz */
  .vm-disc {
    flex: 0 0 auto;
    width: 0.72rem;
    height: 0.72rem;
    border-radius: 50%;
  }

  .vm-disc--w {
    background: #fff;
    border: 1.5px solid #94a3b8;
  }

  .vm-disc--b {
    background: var(--color-text-primary);
  }

  /* Spielername */
  .vm-name {
    font-size: 0.86rem;
    color: var(--color-text-primary);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
  }

  /* Spielfrei-Label */
  .vm-bye {
    font-size: 0.82rem;
    color: var(--color-text-secondary);
    font-style: italic;
  }

  /* Punkte */
  .vm-pts {
    font-size: 0.74rem;
    color: var(--color-text-secondary);
    font-variant-numeric: tabular-nums;
    flex: 0 0 auto;
  }

  /* Ergebnis-Spalte */
  .vm-result {
    flex: 0 0 auto;
    text-align: center;
  }

  .vm-score {
    display: inline-block;
    font-size: 0.86rem;
    font-weight: 700;
    letter-spacing: 0.01em;
    font-variant-numeric: tabular-nums;
    padding: 0.32rem 0.5rem;
    border-radius: 8px;
    white-space: nowrap;
  }

  /* Entschieden */
  .vm-score--dec {
    background: rgba(50, 40, 130, 0.1);
    color: var(--color-primary-strong);
  }

  /* Remis */
  .vm-score--draw {
    background: var(--color-surface-muted);
    color: #475569;
  }

  /* Offen / läuft */
  .vm-score--open {
    background: transparent;
    color: var(--color-accent-text);
    border: 1px dashed #d8c93f;
    font-size: 0.74rem;
    font-weight: 600;
  }

  /* Gestrichen */
  .vm-score--canc {
    background: transparent;
    color: var(--color-text-secondary);
    text-decoration: line-through;
    font-size: 0.74rem;
    font-weight: 600;
  }
}

/* =========================================================
   SKELETON LOADING — fix(components): Ladeindikator
   ========================================================= */
@keyframes skeleton-shimmer {
  0% {
    background-position: -400px 0;
  }
  100% {
    background-position: 400px 0;
  }
}

.skeleton {
  background: linear-gradient(90deg, var(--color-surface-muted) 25%, #e8eaed 50%, var(--color-surface-muted) 75%);
  background-size: 800px 100%;
  animation: skeleton-shimmer 1.4s ease-in-out infinite;
  border-radius: 4px;
  display: block;
}

.skeleton-item {
  display: grid;
  grid-template-columns: minmax(0, 180px) minmax(0, 1fr);
  gap: 1rem;
  padding: 0.75rem 0;
  border-bottom: 1px solid rgba(15, 23, 42, 0.08);
}

@media (max-width: 767px) {
  .skeleton-item {
    grid-template-columns: 1fr;
    gap: 0.4rem;
  }
}

.skeleton-item:last-child {
  border-bottom: none;
}
.skeleton-line {
  height: 0.85rem;
}
.skeleton-line--short {
  width: 60%;
}
.skeleton-line--medium {
  width: 80%;
}
.skeleton-line--long {
  width: 100%;
}
.skeleton-line + .skeleton-line {
  margin-top: 0.4rem;
}

/* ###################################################################################################### */
/* =========================================================
   RESPONSIVE: Breakpoints & Gerätegrößen – Strukturprinzipien
   ---------------------------------------------------------
   - Media Queries unterteilen das Layout klar nach Gerätegrößen (Smartphone bis Desktop).
   - Schriftgrößen, Containerbreiten und Abstände passen sich stufenweise an, 
     wodurch Lesbarkeit und Layout-Dichte auf jedem Gerät optimal bleiben.
   - Wrapper-Breiten und Paddings werden je nach Breakpoint granular gesteuert, 
     damit Inhalte weder gequetscht noch zu breit erscheinen.
   - Navigation und Menüführung wechseln vom Mobil- zum Desktop-Layout: 
     Burger-Menü verschwindet zugunsten einer voll sichtbaren horizontalen Navigation.
   - Alle Werte für Container, Schrift und Navigation sind zentral steuerbar – 
     Anpassungen am Responsive-Verhalten sind gezielt und nachvollziehbar möglich.
   ========================================================= */

/* Tablet aufwärts */
@media (min-width: 768px) {
  /* INHALTSBEREICHE */
  .site-header__content-wrapper,
  .main__content-wrapper,
  .site-footer__content-wrapper {
    max-width: var(--content-container-max-width-768);
    width: var(--content-container-width-768);
    padding: var(--content-container-padding-v-768) var(--content-container-padding-h-768);
  }

  :root {
    --card-padding: 1rem 1rem;
  }

  /* CARD-GRID */
  .card-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

  /* PAGE-CARD */
  .page-card__title {
    font-size: 1.5rem;
  }

  .card-grid {
    grid-template-columns: 1fr 1fr;
  }

  .list-item {
    grid-template-columns: minmax(0, 180px) minmax(0, 1fr);
    gap: 1rem;
  }
}

/* Kleine Desktops/Laptops */
@media (min-width: 1024px) {
  /* INHALTSBEREICHE */
  .site-header__content-wrapper,
  .main__content-wrapper,
  .site-footer__content-wrapper {
    max-width: var(--content-container-max-width-1024);
    width: var(--content-container-width-1024);
    padding: var(--content-container-padding-v-1024) var(--content-container-padding-h-1024);
  }

  .card-grid {
    grid-template-columns: repeat(2, 1fr);
  }
}

/* OPTIONAL: Große Bildschirme: ab 1200px */
@media (min-width: 1200px) {
  /* INHALTSBEREICHE */
  .site-header__content-wrapper,
  .main__content-wrapper,
  .site-footer__content-wrapper {
    max-width: var(--content-container-max-width-1200);
    width: var(--content-container-width-1200);
    padding: var(--content-container-padding-v-1200) var(--content-container-padding-h-1200);
  }

  :root {
    --card-padding: 1.25rem 1.1rem;
  }

  /* CARD-GRID */
  .card-grid {
    grid-template-columns: repeat(3, 1fr);
  }
}

/* --- Responsive Table --- */
/* Mobile-First: Compact table for small screens */
:root {
  --table-font-size: 0.82rem; /* fix(typo): 0.75rem zu klein für Mobile */
  --table-padding: 6px 8px;
}

.table-wrapper {
  font-size: var(--table-font-size);
}

th,
td {
  padding: var(--table-padding);
}

/* Ab Tablet (768px): Standard table spacing */
@media (min-width: 768px) {
  :root {
    --table-font-size: 1rem;
    --table-padding: 10px 12px;
  }
}

/* =========================================================
   NEWS – Seiten-spezifische Styles
   TODO: news.html noch nicht implementiert (Navigation auskommentiert)
         CSS bleibt für spätere Migration erhalten
   ========================================================= */

.news-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-lg);
  margin-top: var(--space-xl);
}

@media (min-width: 768px) {
  .news-grid {
    grid-template-columns: 1fr 1fr;
  }
}

.news-card--featured {
  background: linear-gradient(135deg, var(--color-accent), var(--md-surface));
}

.news-meta {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-xs);
  align-items: center;
  margin-bottom: var(--space-xxs);
  font-size: var(--type-meta);
  color: var(--color-text-secondary);
}

.news-meta__date {
  font-variant-numeric: tabular-nums;
}

.news-meta__category {
  padding: var(--space-xxs) var(--space-xs);
  border-radius: var(--chip-radius);
  background: var(--filter-input-bg);
}

.news-meta__badge {
  padding: var(--space-xxs) var(--space-xs);
  border-radius: var(--chip-radius);
  background: rgba(252, 235, 25, 0.18);
  border: 1px solid rgba(252, 235, 25, 0.35);
  color: var(--color-accent-text); /* fix(color): hard-coded #5c4700 → Token */
  font-weight: 700;
  font-size: var(--type-small);
  text-transform: uppercase;
  letter-spacing: 0.06em;
}

.news-actions {
  margin-top: auto;
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: var(--space-xs);
}

.news-year {
  font-size: var(--type-meta);
  color: var(--filter-input-placeholder-color);
}

.news-empty {
  grid-column: 1 / -1;
  color: var(--color-text-secondary);
  font-size: var(--type-body);
  padding: var(--space-lg) 0;
}

.news-detail[aria-hidden="true"] {
  display: none;
}

.news-detail[aria-hidden="false"] {
  display: block;
}

/* =========================================================
   VEREIN – Seiten-spezifische Styles
   TODO: verein.html noch nicht implementiert (Navigation auskommentiert)
         CSS bleibt für spätere Migration erhalten
   ========================================================= */

.ueber-uns-grid {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: var(--space-xl);
  align-items: flex-start;
}

.ueber-uns-grid > * {
  min-width: 0;
}

@media (min-width: 768px) {
  .ueber-uns-grid {
    grid-template-columns: minmax(0, 2fr) minmax(0, 1.6fr);
  }
}

.timeline {
  list-style: none;
  margin: 0;
  padding: var(--space-xs) 0 0 var(--space-xxs);
  border-left: var(--timeline-border-width) solid var(--color-surface-muted);
}

.timeline__item {
  position: relative;
  padding-left: var(--space-2xl);
  margin-bottom: var(--timeline-gap);
}

.timeline__item::before {
  content: "";
  position: absolute;
  left: var(--timeline-dot-left);
  top: var(--timeline-dot-top);
  width: var(--timeline-dot-size);
  height: var(--timeline-dot-size);
  border-radius: 50%;
  background-color: var(--md-surface);
  border: var(--timeline-border-width) solid var(--md-primary);
  box-shadow: var(--timeline-dot-shadow);
}

.timeline__year {
  font-size: var(--type-meta);
  font-weight: 600;
  color: var(--color-primary-strong);
  text-transform: uppercase;
  letter-spacing: 0.04em;
  margin-bottom: var(--space-xxs);
}

.timeline__content h3 {
  margin: 0;
  font-size: var(--type-card-title);
}

.timeline__content p {
  margin: var(--space-xxs) 0 0;
  font-size: var(--type-card-body);
  color: var(--color-text-secondary);
}

.location-list {
  display: flex;
  flex-direction: column;
  gap: var(--stack-gap);
}

.location-card h3 {
  margin: 0 0 var(--space-xxs);
  font-size: var(--type-card-title);
}

.location-card p {
  margin: var(--space-xxs) 0;
  font-size: var(--type-card-body);
  color: var(--color-text-secondary);
}

.contact-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(var(--grid-min-col), 1fr));
  gap: var(--stack-gap);
}

.contact-card h3 {
  margin: 0 0 var(--space-xxs);
  font-size: var(--type-card-body);
  font-weight: 600;
  color: var(--color-text-secondary);
}

.contact-card__name {
  margin: 0 0 var(--space-xxs);
  font-weight: 600;
}

.contact-card a {
  text-decoration: none;
}

.contact-card a:hover {
  text-decoration: underline;
}

/* =========================================================
   VEREINSMEISTERSCHAFT – Seiten-spezifische Styles
   ========================================================= */

.section-title {
  font-size: var(--type-body);
  font-weight: 600;
  margin: 0 0 var(--space-xs);
}

.section-meta {
  font-size: var(--type-meta);
  color: var(--md-on-surface-variant);
  margin: 0 0 var(--space-xxs);
}

.round-section {
  padding: var(--space-md) 0;
}

.round-section + .round-section {
  border-top: 1px solid var(--md-outline);
}

.round-section:first-child {
  padding-top: 0;
}

.round-section__header {
  display: flex;
  flex-direction: column;
  gap: 2px;
  margin-bottom: var(--space-sm);
}

@media (min-width: 768px) {
  .round-section__header {
    flex-direction: row;
    justify-content: space-between;
    align-items: baseline;
    gap: var(--space-xs);
  }
}

.round-section__title {
  font-size: 0.9rem;
  font-weight: 600;
  margin: 0;
  color: var(--md-on-surface);
}

@media (min-width: 768px) {
  .round-section__title {
    font-size: var(--card-subtitle-font-size);
  }
}

.round-section__meta {
  font-size: var(--type-small);
  color: var(--md-on-surface-variant);
  margin: 0;
}

/* =========================================================
   SEITEN-INTRO (chronik.html)
   TODO: chronik.html noch nicht implementiert
         CSS bleibt für spätere Migration erhalten
   ========================================================= */

.page-intro {
  background: rgba(10, 16, 40, 0.6);
  color: var(--color-surface);
  padding: var(--space-xl) 0;
}

.page-intro__content-wrapper {
  max-width: var(--content-container-max-width-1200);
  width: var(--content-container-width-1200);
  margin: 0 auto;
  padding: 0 var(--content-container-padding-h-320);
}

.page-intro__title {
  margin: 0;
  color: var(--color-surface);
}

.page-intro__subtitle {
  margin: var(--space-xs) 0 0;
  font-size: var(--type-card-title);
  color: rgba(255, 255, 255, 0.8);
}

/* =========================================================
   CARD-INHALTE (verein.html, news.html)
   ========================================================= */

.card__title {
  margin: 0 0 var(--space-xxs);
  font-size: 1rem;
  font-weight: 600;
}

.card__subtitle {
  margin: 0 0 var(--space-xs);
  font-size: var(--type-card-body);
  color: var(--color-text-secondary);
}

.card__hint {
  margin: var(--space-xs) 0 0;
  font-size: var(--type-small);
  color: var(--color-text-secondary);
}

.card__actions {
  margin-top: var(--space-md);
  display: flex;
  gap: var(--space-xs);
  align-items: center;
}

/* =========================================================
   RECHTE SPALTE (verein.html)
   ========================================================= */

.right-column {
  display: flex;
  flex-direction: column;
  gap: var(--stack-gap);
}

/* =========================================================
   IMPRESSUM (impressum.html)
   ========================================================= */

.contactblock {
  font-style: normal;
  margin-bottom: var(--space-md);
}

.contactblock p {
  margin: 0 0 var(--space-xs);
}

.contact-list {
  margin: 0 0 var(--space-md);
  padding-left: var(--space-xl);
}

.contact-list li {
  margin-bottom: var(--space-xxs);
}

/* =========================================================
   LEERE ZUSTÄNDE (termine.html)
   ========================================================= */

.events__empty {
  padding: var(--space-lg) 0;
  color: var(--color-text-secondary);
  font-size: var(--type-body);
}

/* ============================================================
   HEADER
   ============================================================ */
/* =========================================================
   HEADER – Flexibles, mobiles Navigations- und Branding-Element
   ---------------------------------------------------------
   - Schmale Kopfzeile mit Logo, Titel und Menü für alle Geräte.
   - Flexbox sortiert Branding und Navigation nebeneinander.
   - Navigation ist per Burger-Icon mobil als Dropdown verfügbar.
   - Alle Größen, Abstände und Farben werden über Theme-Variablen gesteuert.
   ========================================================= */
/* Außencontainer */
.site-header {
  background: var(--header-bg-color);
  color: var(--header-font-color);
  top: 0;
  z-index: 1001; /* fix(nav): war 100 – Stacking-Context-Bug mit .nav-backdrop (z-index:999) behoben */
  width: 100%;
  min-height: var(--header-height);
  height: var(--header-height);
  box-shadow: var(--header-shadow);
  position: relative; /* fix(nav): Dropdown richtet sich am vollen Header aus, nicht am max-width-Container */
}
/* Inhaltscontainer (Navigation und Logo) */
.site-header__content-wrapper {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  height: 100%;
  padding-block: var(--header-content-wrapper-padding-v);
}

/* Logo und Vereinsname */
.nav-branding {
  display: flex;
  align-items: center;
  color: var(--header-title-color);
  font-weight: var(--header-title-font-weight);
  text-decoration: none;
  gap: var(--header-branding-gap);
}
/* Vereinslogo */
.nav-logo {
  height: var(--header-logo-height);
  width: auto;
  display: block;
}
/* Vereinsname */
.site-title {
  font-size: var(--header-font-size-320);
  font-weight: var(--header-title-font-weight);
  color: var(--header-title-color);
  margin: 0;
  line-height: 1.25;
  display: block;
}

/* Zweizeiliger Titelblock: Vereinsname + Abteilung */
.site-title-group {
  display: flex;
  flex-direction: column;
  justify-content: center;
  gap: 1px;
}

.site-title-sub {
  font-size: 0.78em;
  color: var(--color-text-secondary);
  font-weight: 400;
  line-height: 1.2;
  letter-spacing: 0.01em;
}

/* Unsichtbarer Schalter für Burger-Menü */
.menu-toggle {
  display: none;
}

/* Sichtbares Burger-Icon */
.burger-label {
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  cursor: pointer;
  margin-left: auto;
  width: 40px;
  height: 40px;
  border-radius: 8px;
  transition: background 0.2s;
  gap: 5px;
  flex-shrink: 0;
}

.burger-label:hover {
  background: rgba(15, 23, 42, 0.06);
}

.burger-line {
  background: var(--burger-menu-color);
  transition: var(--header-burger-transition);
  width: var(--burger-line-width);
  height: var(--burger-line-height);
  border-radius: 2px;
  transform-origin: center;
}

/* Burger → X Animation wenn geöffnet */
.menu-toggle:checked + .burger-label .burger-line:nth-child(1) {
  transform: translateY(8px) rotate(45deg);
}
.menu-toggle:checked + .burger-label .burger-line:nth-child(2) {
  opacity: 0;
  transform: scaleX(0);
}
.menu-toggle:checked + .burger-label .burger-line:nth-child(3) {
  transform: translateY(-8px) rotate(-45deg);
}

/* Backdrop wird via JS eingefügt (siehe header.js) */
.nav-backdrop {
  display: none;
  position: fixed;
  inset: 0;
  background: rgba(10, 16, 40, 0.45);
  z-index: calc(var(--header-nav-container-z-index) - 1);
  animation: menuSlideDown 0.2s ease;
  cursor: pointer; /* fix(nav): iOS/Touch – click-Events feuern nur auf Elementen mit cursor:pointer */
}
.nav-backdrop.is-visible {
  display: block;
}

/* Mobile-First: Navigation standardmäßig verstecken, per Burger öffnen */
.nav__links-container ul {
  z-index: var(--header-nav-container-z-index);
  display: none;
  flex-direction: column;
  position: absolute;
  top: 100%;
  left: 0;
  width: 100%;
  margin: 0;
  background: var(--header-bg-color);
  list-style: none;
  border-top: 1px solid rgba(15, 23, 42, 0.08);
  box-shadow: 0 12px 32px rgba(15, 23, 42, 0.18);
  padding: 0.5rem 0 0.75rem;
  gap: 0;
  animation: menuSlideDown 0.2s ease;
  overflow: hidden;
}

@keyframes menuSlideDown {
  from {
    opacity: 0;
    transform: translateY(-8px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

/* Einzelne Menüpunkte */
.nav__links-container li {
  cursor: pointer;
  transition: background 0.15s;
  padding: var(--header-nav-item-padding-v-320) var(--header-nav-item-padding-h-320);
  border-bottom: none;
}
/* Menülinks */
.nav__links-container a {
  color: var(--header-nav-link-color);
  text-decoration: none;

  letter-spacing: var(--header-nav-link-letter-spacing);
  transition: var(--header-link-transition);

  font-size: var(--header-font-size-320);
  font-weight: var(--header-nav-font-weight);

  text-shadow: var(--header-link-text-shadow);
}

/* Effekt bei Maus oder Tastaturfokus */
.nav__links-container a:hover,
.nav__links-container a:focus {
  color: var(--header-nav-link-hover-color);
  letter-spacing: var(--header-nav-link-hover-letter-spacing);
  transform: translateY(var(--header-link-hover-translate-y));
}

/* Aktueller Menüpunkt, visuell hervorheben */
.nav__links-container a.active,
.nav__links-container a:active {
  color: var(--header-nav-link-active-color);
  font-weight: var(--header-nav-link-active-font-weight);
}

/* Gelber Akzent-Indikator für aktiven Nav-Link */
.nav__links-container li {
  position: relative;
}

/* Mobile/Tablet-Burger: gelber linker Rand + Hover am aktiven Eintrag */
/* fix(nav): auf max-width: 1023px erweitert — Burger gilt jetzt bis 1023px */
@media (max-width: 1023px) {
  .nav__links-container li:hover {
    background: rgba(15, 23, 42, 0.03);
  }

  .nav__links-container li:has(> a.active) {
    border-left: 3px solid var(--color-accent);
    padding-left: calc(1.5rem - 3px);
    background: rgba(252, 235, 25, 0.07);
  }
}

/* Desktop: gelber Unterstrich am aktiven Eintrag */
@media (min-width: 1024px) {
  .nav__links-container li:has(> a.active)::after {
    content: "";
    position: absolute;
    bottom: 0;
    left: var(--header-nav-item-padding-h-1024);
    right: var(--header-nav-item-padding-h-1024);
    height: 3px;
    background: var(--color-accent);
    border-radius: 2px 2px 0 0;
  }
}

/* Das Menü einblenden, wenn die Checkbox gecheckt ist */
.menu-toggle:checked ~ .nav__links-container ul {
  display: flex;
}

/* =========================================================
   RESPONSIVE – Mobile First (min-width only)
   ========================================================= */

/* Smartphones Querformat: 481px+ */
@media (min-width: 481px) {
  .site-title,
  .nav__links-container a {
    font-size: var(--header-font-size-481);
  }
  .nav__links-container ul {
    padding: var(--header-nav-container-padding-v-481) var(--header-nav-container-padding-h-481);
  }
  .nav__links-container li {
    padding: var(--header-nav-item-padding-v-481) var(--header-nav-item-padding-h-481);
  }
}

/* Tablets: 768px+ */
@media (min-width: 768px) {
  .site-title {
    font-size: var(--header-font-size-768);
  }
}

/* Desktop: 1024px+ — Nav wechselt zu horizontaler Leiste, Burger verschwindet */
/* fix(layout): Breakpoint von 768px auf 1024px angehoben — verhindert zweizeiligen Header
   bei mittleren Viewports (~768–1023px), wo Logo+Titel+Nav nicht auf eine Zeile passen. */
@media (min-width: 1024px) {
  .menu-toggle,
  .burger-label {
    display: none;
  }
  /* Desktop: ul hat transparenten Hintergrund, kein Schatten */
  .nav__links-container ul {
    background: transparent !important;
    box-shadow: none !important;
    border: none !important;
  }
  .site-title,
  .nav__links-container a {
    font-size: var(--header-font-size-1024);
  }
  .nav__links-container ul {
    display: flex;
    flex-direction: row;
    position: static;
    top: auto;
    left: auto;
    width: auto;
    border-top: none;
    padding: var(--header-nav-container-padding-v-1024) var(--header-nav-container-padding-h-1024);
  }
  .nav__links-container li {
    border-bottom: none;
    padding: var(--header-nav-item-padding-v-1024) var(--header-nav-item-padding-h-1024);
  }
}

/* Großer Desktop: 1200px+ */
@media (min-width: 1200px) {
  .site-title,
  .nav__links-container a {
    font-size: var(--header-font-size-1200);
  }
}

/* ============================================================
   FOOTER
   ============================================================ */
/* =========================================================
  FOOTER – Mobile First
   ---------------------------------------------------------
   - Der Footer gliedert sich klar in Info-Bereich (Copyright) und Navigation.
   - Flexbox richtet alle Inhalte zentriert und untereinander aus.
   - Navigationslinks werden als horizontale Linkgruppe mit ausreichendem Abstand ausgegeben.
   - Alle Schriftgrößen und Distanzen sind als Variablen steuerbar – Anpassung für verschiedene Geräte ist leicht möglich.
   - Hover und Fokus sichern barrierefreie Navigation und hohe Erkennbarkeit von Links.
   ========================================================= */
/* Außencontainer */
.site-footer {
  background: var(--footer-bg-color);
  box-shadow: var(--footer-shadow);
  color: var(--footer-font-color);
}
/* Inhaltscontainer */
.site-footer__content-wrapper {
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  gap: 0.35rem;
  align-items: center;
  /* Use central content container tokens so footer aligns with site layout */
  max-width: var(--content-container-max-width-1200);
  width: var(--content-container-width-1200);
  margin-left: auto;
  margin-right: auto;
  padding-left: 1rem;
  padding-right: 1rem;
}

/* Info-Bereich (Copyright) */
.footer-copyright {
  margin: 0;
  font-size: 0.78rem;
  color: var(--footer-font-color);
}

/* Footer-Navigation (Linkgruppe) */
.footer-nav {
  display: flex;
  justify-content: center;
  gap: 1.25rem;
  flex-wrap: wrap;
}
/* Link-Separator (standardmäßig ausgeblendet) */
.footer-sep {
  display: none;
}
/* Footer-Links */
.footer-nav a {
  color: rgba(255, 255, 255, 0.7);

  font-size: var(--footer-nav-item-size-320);
  letter-spacing: var(--footer-nav-link-letter-spacing);
  min-height: var(--footer-nav-item-min-height-320);
  padding: var(--footer-nav-item-padding-v-320) var(--footer-nav-item-padding-h-320);

  text-decoration: none;

  transition:
    color 0.2s ease,
    letter-spacing 0.2s ease,
    transform 0.15s ease;
  display: inline-flex;
  align-items: center;
}
/* Effekt bei Maus oder Tastaturfokus */
.footer-nav a:hover,
.footer-nav a:focus {
  color: var(--footer-nav-link-hover-color);
  letter-spacing: var(--footer-nav-link-hover-letter-spacing);
  transform: translateY(var(--header-link-hover-translate-y));
}

/* =========================================================
   RESPONSIVE – Mobile First (min-width only)
   ========================================================= */

/* Smartphones Querformat: 481px+ */
@media (min-width: 481px) {
  .footer-sep {
    display: inline-block;
    user-select: none;
    color: var(--footer-font-color);
    opacity: 0.5;
  }
  .footer-nav a,
  .footer-sep {
    font-size: var(--footer-nav-item-size-481);
    min-height: var(--footer-nav-item-min-height-481);
  }
}

/* Tablets: 768px+ — Footer einzeilig, Split-Layout */
@media (min-width: 768px) {
  .site-footer__content-wrapper {
    flex-direction: row;
    justify-content: space-between;
    align-items: center;
    text-align: left;
    gap: 0;
  }
  .footer-nav {
    justify-content: flex-end;
  }
  .footer-nav a,
  .footer-sep {
    font-size: var(--footer-nav-item-size-768);
  }
}

/* Desktop: 1024px+ */
@media (min-width: 1024px) {
  .site-footer__content-wrapper {
    padding: var(--footer-content-container-padding-v-1024) var(--content-container-padding-h-1024);
  }
  .footer-nav a,
  .footer-sep {
    min-height: var(--footer-nav-item-min-height-1024);
  }
}
