/* =====================================================================
   Ausbildungszentrum AGV Bau Saar - Gestaltung der Website
   ---------------------------------------------------------------------
   ALLE FARBEN UND GROESSEN STEHEN IM BLOCK ":root" DIREKT DARUNTER.
   Wer die Farbe der ganzen Website aendern moechte, aendert dort nur
   eine einzige Zeile - der Rest passt sich automatisch an.
   ===================================================================== */

:root {
  /* --- Farben (hier aendern) ------------------------------------- */
  --blau:          #2D438F;   /* Hausfarbe aus dem Logo               */
  --blau-dunkel:   #22336E;   /* fuer Fussbereich und Mouseover       */
  --blau-sehrhell: #EEF1F9;   /* zarte Hinterlegung von Infokaesten   */

  /* Orange des AGV Bau Saar - zeigt die Zusammengehoerigkeit von
     Verband und Ausbildungszentrum. Bewusst sparsam eingesetzt:
     vor allem dort, wo der Mauszeiger darueber faehrt.              */
  --orange:        #FF6200;   /* Originalton des Verbandes            */
  --orange-dunkel: #C24A00;   /* fuer Schrift auf Weiss (gut lesbar)  */
  --orange-hell:   #FF8A3D;   /* fuer Schrift auf dunklem Grund       */
  --orange-zart:   #FFF4EC;   /* zarte Hinterlegung beim Darueberfahren */
  --orange-mittel: #FFD2B0;   /* kraeftigere Hinterlegung, z. B. Tabellenzeile */
  /* Nur fuer fehlende Pflichtangaben in Formularen - sonst kommt Rot
     auf dieser Website nicht vor (ausser als Schriftfarbe, die jemand
     in der Verwaltung selbst setzt - siehe --farbe-rot).             */
  --rot:           #C0392B;   /* Rahmen eines fehlenden Pflichtfeldes */
  --rot-zart:      #FDEDEC;   /* zarte Hinterlegung dazu              */
  /* Schriftfarben aus der Schreibleiste (03.10.2026, sein Wunsch: "ein
     paar Standardfarben wie Rot, Gruen, Gelb, Blau"). Vier feste Toene,
     jeder auf Weiss und auf den hellen Flaechen (grau, zartblau,
     zartorange) mindestens 4,7 : 1. Im Inhalt steht nur der Name
     (class="farbe-rot") - wer einen Ton aendern will, aendert ihn hier. */
  --farbe-rot:     #C0392B;
  --farbe-gruen:   #1E7B3A;
  --farbe-gelb:    #8A6500;   /* dunkel - helles Gelb ist auf Weiss nicht lesbar */
  /* Blau: ein Azurblau, deutlich weg vom Blau der Verweise (Punkt 34,
     04.10.2026). Befund vom Geraetecheck: Blau geschriebener Text aehnelte
     einem Verweis. Bis dahin #1565C0 - im Farbkreis 15 Grad neben dem
     Verweis-Blau, jetzt 26 Grad. Auf Weiss 5,5 : 1, auf Zartblau 4,9 : 1. */
  --farbe-blau:    #0B6FA4;
  --schrift:       #1A1A1A;   /* normale Textfarbe (schwarz)          */
  --schrift-grau:  #5A5F6B;   /* Nebentexte, Datumsangaben            */
  --hintergrund:   #FFFFFF;   /* Seitenhintergrund (weiss)            */
  --flaeche-grau:  #F6F7F9;   /* abgesetzte Abschnitte                */
  --linie:         #E3E6EC;   /* Trennlinien und Rahmen               */
  --feldrand:      #8A8F9C;   /* Rand der Eingabefelder - 3,2 : 1 gegen Weiss */

  /* --- Groessen --------------------------------------------------- */
  --breite:        1180px;    /* maximale Inhaltsbreite               */
  /* Der Rand links und rechts neben dem Inhalt. Er waechst mit der
     Fensterbreite mit, damit Inhalte nicht am Rand kleben. EINE Angabe
     fuer alles, was sich danach richtet (10.10.2026): `.bereich`, die
     Punkte im Kopfstreifen und in der Bearbeitung der Stift am Hauptmenue
     (verwaltung/gestaltung.css, `.navi-zusatz`). */
  --rand:          clamp(1.25rem, 5vw, 3.75rem);
  --radius:        10px;      /* Eckenrundung                         */
  --abstand:       clamp(3rem, 7vw, 5.5rem);  /* Abstand je Abschnitt */

  /* --- Schrift ---------------------------------------------------- */
  /* Inter zuerst (29.10.2026, Punkt 86 - die Dateien stehen im Block
     "@font-face" direkt unter diesem). Die Geraeteschriften dahinter
     bleiben als Rueckfall: falls die Datei nicht kommt, und fuer
     Zeichen, die in Inter fehlen. */
  --schriftart: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
                "Helvetica Neue", Arial, sans-serif;
}

/* --- Die Schrift Inter, vom eigenen Server (29.10.2026, Punkt 86) -----
   Seine Wahl nach dem Vergleich an Startseite und Kursseite, am PC und
   am Handy: "Wir nehmen dann Inter". Bis dahin stand hier nur die
   Geraeteschrift - auf jedem Geraet eine andere (Mac und iPhone San
   Francisco, Windows Segoe UI, Android Roboto). Inter kommt der
   Apple-Schrift am naechsten.
   Quelle: Paket @fontsource-variable/inter 5.3.0 (cdn.jsdelivr.net),
   die Dateien unveraendert in schriften/. Lizenz: SIL Open Font License
   1.1, der Text liegt daneben (schriften/inter-lizenz.txt).
   Vom eigenen Server, nie von einem fremden (kein Google Fonts): So
   erfaehrt niemand sonst von einem Besuch.
   Die opsz-Dateien sind Absicht: Neben der Strichstaerke tragen sie die
   optische Groesse - grosse Ueberschriften stehen damit enger, wie bei
   Apple, und so hat er Inter im Vergleich gesehen. `font-optical-sizing`
   deshalb nicht abschalten. Die Laufweiten (`letter-spacing`) bleiben,
   wie sie sind - auch die hat er mit Inter gesehen.
   Zwei Dateien: lateinisch (alle deutschen Texte) und lateinisch
   erweitert (etwa polnische oder tuerkische Namen). Die zweite laedt der
   Browser nur, wenn ein solches Zeichen auf der Seite steht. Die
   Bereiche (`unicode-range`) stammen aus opsz.css des Pakets.
   Aendert sich eine Datei je, bekommt sie einen neuen Namen: Sie wird
   ein Jahr zwischengespeichert (.htaccess). Der Name steht dann auch in
   verwaltung/baukasten/rahmen.php und verwaltung/kern/seite.php
   (Vorladen) und in verwaltung/umfrage-blatt.php (eigenes @font-face
   fuer das Druckblatt) - alle mitziehen. */
@font-face {
  font-family: "Inter";
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url("schriften/inter-latin-opsz-normal.woff2") format("woff2");
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,
                 U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122,
                 U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: "Inter";
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url("schriften/inter-latin-ext-opsz-normal.woff2") format("woff2");
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF,
                 U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF,
                 U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F,
                 U+A720-A7FF;
}

/* =====================================================================
   Grundlagen
   ===================================================================== */

*, *::before, *::after { box-sizing: border-box; }

html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; }

/* --- Der Scrollbalken am rechten Rand ---------------------------------
   Der Browser malt dort von Haus aus einen 15 Bildpunkte breiten
   Streifen mit eigener grauer Rinne. Auf einem schmalen Bildschirm nimmt
   der spuerbar Platz weg - und er sieht aus wie ein Bedienelement,
   obwohl er nur anzeigt, wie weit man schon unten ist.

   31.08.2026: schmal, ohne Rinne, halb durchsichtig.

   17.09.2026: DAS REICHTE NICHT. Die Rinne war nur durchsichtig, nicht
   weg - der Browser hielt am rechten Rand weiter 11 Bildpunkte frei
   (gemessen: Fenster 1.512, Seite 1.501). Dort schien das Weiss durch,
   neben dem blauen Fussbereich als eigener heller Streifen. Der Nutzer:
   „nicht seine eigene Linie ganz rechts, wo alles weiss ist, nur damit
   der Balken da langgehen kann", dazu „viel kuerzer" und „leicht
   dunkler, durchsichtiger".

   Mit CSS allein geht das nicht: Kein Browser legt den Balken der
   ganzen Seite ueber den Inhalt, solange er ihn selbst zeichnet.
   Deshalb am PC: den eigenen Balken der Seite ausblenden, und
   `script.js` zeichnet einen kurzen, der ueber dem Rand mitgleitet
   (Block „Der Rollbalken am PC"). Die Seite wird dadurch so breit wie
   das Fenster.

   18.09.2026: JETZT AUF JEDEM GERAET. Der Nutzer: „Beim Rollbalken
   wollte ich die Veraenderung eigentlich mehr auf dem Handy haben, das
   war der wichtige Part." Bis dahin war er auf Maus und Trackpad
   beschraenkt. Er waehlte Fassung B von `rollbalken-probe.html`: klare
   Kanten, kein Ausbleichen an den Enden - und er verschwindet, solange
   niemand scrollt.

   AUF DEM HANDY ZEIGT ER NUR AN (`pointer-events: none`). Ein Finger,
   der ihn trifft, soll die Seite scrollen und ihn nicht aus Versehen
   verziehen. Mit Maus bleibt er greifbar.

   NUR FUER DIE GANZE SEITE (`html`). Breite Tabellen und Fenster, die
   in sich scrollen, behalten ihren schmalen Balken von unten.

   Steht bewusst HIER und nicht in der Gestaltung der Verwaltung: Diese
   Datei liegt in jeder Seite der Website, die Verwaltungsdatei nur im
   Bearbeitungsmodus. Sonst saehe der Balken beim Bearbeiten anders aus
   als auf der fertigen Seite. */
html {
  scrollbar-width: thin;                             /* Firefox */
  scrollbar-color: rgba(26, 26, 26, .28) transparent;
}
::-webkit-scrollbar { width: 8px; height: 8px; }     /* Chrome, Safari, Edge */
::-webkit-scrollbar-track { background: transparent; border: 0; }
::-webkit-scrollbar-corner { background: transparent; }
::-webkit-scrollbar-thumb {
  background: rgba(26, 26, 26, .28);
  border-radius: 999px;
}
::-webkit-scrollbar-thumb:hover { background: rgba(26, 26, 26, .45); }
@media (max-width: 700px) {
  ::-webkit-scrollbar { width: 4px; height: 4px; }
}

/* Erst wenn das Skript seinen Balken wirklich gebaut hat, setzt es
   `rollbalken-eigen` auf <html>. Ohne Skript bleibt also der schmale
   Balken von oben - nie steht eine Seite ganz ohne da. */
html.rollbalken-eigen { scrollbar-width: none; }
html.rollbalken-eigen::-webkit-scrollbar { width: 0; height: 0; display: none; }

/* Der Balken selbst - Fassung B, vom Nutzer am 18.09.2026 gewaehlt.

   4 Bildpunkte breit, 48 hoch, 4 vom Rand weg. Dort steht nie Text:
   Jede Seite laesst seitlich mindestens 20 Bildpunkte frei (`.bereich`).

   DER HELLE RING IST NICHT SCHMUCK, ER TRAEGT IHN. Nachgerechnet: Die
   Fuellung allein steht auf dem blauen Fussbereich bei 1,2 : 1 - man
   sieht sie schlicht nicht. Der Ring bei 55 % bringt sie dort auf
   4,7 : 1 und auf dem dunklen Kopfstreifen auf 5,8 : 1. Auf Weiss
   traegt umgekehrt die Fuellung (3,7 : 1), und der Ring faellt nicht
   auf. Jeder Grund kommt so ueber die 3 : 1 aus WCAG 1.4.11.

   DREI SCHICHTEN STATT EINER (24.09.2026)
   ---------------------------------------------------------------------
   Sein Befund, zum zweiten Mal: Auf dem iPhone laeuft der Balken
   "abgehackt und unfluessig", am MacBook einwandfrei. Die Ursache liegt
   nicht in unserer Rechnung, sondern im iPhone selbst: Dort schiebt ein
   eigener Teil des Systems die Seite, und das Skript erfaehrt davon
   erst hinterher. Jede Position, die das Skript setzt, kommt also ein
   bis zwei Bilder zu spaet an - beim schnellen Wischen sieht man das
   als Ruckeln. Kein Skript kann das aufholen.

   Seit iOS 26.4 (Safari 26.4) kann der Browser einen Balken SELBST
   mitfuehren, im selben Takt wie die Seite (`animation-timeline:
   scroll()`, laut webkit.org "on the compositor thread"). Dafuer
   braucht es drei Schichten:

     .rollbalken-bahn     die Strecke, auf der er laeuft - vom oberen
                          Rand (plus 6 Luft) bis 54 ueber dem unteren
                          (6 Luft + 48 Balkenhoehe). Steht still.
                          Seit 24.09.2026 ueber `svh` - siehe dort.
     .rollbalken-laeufer  genau so hoch wie die Bahn. Wird um 0 bis 100 %
                          seiner EIGENEN Hoehe verschoben - also genau
                          um die Bahnlaenge, ohne dass jemand misst.
     .rollbalken          der sichtbare Balken, oben am Laeufer.

   Wer das nicht kann (aeltere iPhones, Firefox), bekommt dieselben drei
   Schichten, und `script.js` schiebt den Laeufer wie bisher. Aussehen
   und Mass sind in beiden Faellen gleich. */
.rollbalken-bahn {
  position: fixed;
  top: calc(var(--rollbalken-oben, 0px) + 6px);
  /* 24.09.2026: HOEHE STATT UNTERKANTE. Vorher `bottom: 54px` - damit
     hing die Laenge der Bahn an der sichtbaren Fensterhoehe, und die
     aendert sich auf dem iPhone jedes Mal, wenn Safaris Leisten beim
     Scrollen ein- oder ausfahren. Dann musste die Seite die Bahn neu
     vermessen, waehrend der Balken schon lief. `svh` ist die Hoehe MIT
     eingeblendeten Leisten und bleibt beim Scrollen gleich. Folge: Bei
     eingefahrenen Leisten endet die Bahn ein Stueck ueber dem unteren
     Rand - dort, wo sonst die Leiste liegt. Am PC sind `svh` und `vh`
     gleich; die erste Zeile gilt fuer Browser, die `svh` nicht kennen. */
  height: calc(100vh - var(--rollbalken-oben, 0px) - 60px);
  height: calc(100svh - var(--rollbalken-oben, 0px) - 60px);
  right: 4px;
  width: 4px;
  /* Ueber der stehenbleibenden Kopfleiste (100) - am Seitenanfang liegt
     er sonst darunter und laesst sich nicht greifen. Unter dem grossen
     Bild (200) und den Fenstern der Verwaltung (ab 900). */
  z-index: 150;
  /* Die Bahn ist so hoch wie das Fenster - sie darf nie einen Klick
     auf die Seite darunter abfangen. Nur der Balken selbst nimmt ihn. */
  pointer-events: none;
}
.rollbalken-laeufer {
  height: 100%;
  will-change: transform;
}
html.rollbalken-selbst .rollbalken-laeufer {
  /* Die Reihenfolge ist Pflicht: Die Kurzschreibweise `animation`
     setzt `animation-timeline` zurueck. */
  animation: rollbalken-lauf linear both;
  animation-timeline: scroll(root block);
}
@keyframes rollbalken-lauf {
  from { transform: translateY(0); }
  to   { transform: translateY(100%); }
}
.rollbalken {
  position: absolute;
  top: 0; right: 0;
  pointer-events: auto;
  width: 4px; height: 48px;
  border-radius: 999px;
  /* 23.09.2026, sein Wunsch: "kann gerne noch ein kleines bisschen
     dunkelgrauer werden". Von 0,55 auf 0,72. Das verbessert nur -
     auf Weiss steigt die Fuellung von 3,7 : 1 auf 6,0 : 1, und auf
     dunklem Grund traegt ohnehin der helle Ring, der unveraendert
     bleibt. Die Untergrenze aus WCAG 1.4.11 ist 3 : 1. */
  background: rgba(30, 33, 41, 0.72);
  box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.55);
  opacity: 1;
  transition: opacity 0.3s ease, width 0.15s ease-out, background-color 0.15s ease-out;
}
.rollbalken-bahn[hidden] { display: none; }

/* ER VERSCHWINDET, SOLANGE NIEMAND SCROLLT (18.09.2026, seine Wahl).
   So machen es Handys von Haus aus. `script.js` setzt `ruht` knapp eine
   Sekunde nach der letzten Bewegung. */
.rollbalken.ruht { opacity: 0; }

/* Nur mit Maus oder Trackpad laesst er sich greifen. Zum Treffen ist
   die Flaeche unsichtbar erweitert - 4 Bildpunkte trifft man sonst
   kaum; so sind es 24, die Untergrenze aus WCAG 2.5.8. */
@media (hover: hover) and (pointer: fine) {
  .rollbalken::before {
    content: ""; position: absolute; top: -8px; bottom: -8px; right: -6px; left: -14px;
  }
  .rollbalken:hover, .rollbalken.wird-gezogen {
    width: 7px;
    background: rgba(30, 33, 41, 0.88);
  }
}
/* Auf dem Handy zeigt er nur an: Ein Finger, der ihn trifft, soll die
   Seite scrollen. */
@media (hover: none) {
  .rollbalken { pointer-events: none; }
}
/* Waehrend des Ziehens wird auf der Seite nichts markiert. */
html.rollbalken-zieht, html.rollbalken-zieht * { user-select: none !important; }
@media (prefers-reduced-motion: reduce) {
  .rollbalken { transition: none; }
  /* Ohne Uebergang wuerde er hart wegspringen - dann bleibt er lieber
     stehen. */
  .rollbalken.ruht { opacity: 1; }
}
@media print {
  .rollbalken-bahn { display: none !important; }
}

/* UEBERZIEHEN AM SEITENRAND BLEIBT BLAU (23.09.2026)
   ---------------------------------------------------------------------
   Auf dem Handy laesst sich eine Seite ueber ihr Ende hinausziehen
   ("Gummiband"). Dabei wird die Flaeche HINTER der Seite sichtbar - und
   die war weiss. Am blauen Fussbereich schlug es dadurch in Weiss um;
   man sah, dass der Fuss nur ein Kasten ist.

   Diese Flaeche heisst in der Fachsprache "Canvas". Sie nimmt die Farbe
   von <html>; hat <html> keine, nimmt sie die von <body>. Bisher hatte
   nur <body> eine - deshalb weiss. Jetzt bekommt <html> das Dunkelblau
   des Fussbereichs, und <body> behaelt sein Weiss fuer die Seite selbst.

   Es gibt bewusst nur EINE Farbe fuer oben und unten: Der Browser kennt
   fuer das Gummiband keine zwei. Dunkelblau ist die richtige Wahl - am
   Fuss trifft es die Farbe genau, und oben nimmt es dem weissen
   Kopfbereich die Blendwirkung, ueber die er sich beschwert hat.

   `min-height: 100vh` ist die Absicherung fuer sehr kurze Seiten: Waere
   <body> kuerzer als der Bildschirm, stuende sonst unter dem Inhalt ein
   blauer Rest. */
html { background: var(--blau-dunkel); }

body {
  margin: 0;
  min-height: 100vh;
  background: var(--hintergrund);
  color: var(--schrift);
  font-family: var(--schriftart);
  font-size: 1.0625rem;          /* 17px */
  line-height: 1.65;
  overflow-wrap: break-word;
}

img { max-width: 100%; height: auto; display: block; }

/* Verweise sind blau. Faehrt der Mauszeiger darueber, werden sie orange -
   dasselbe Prinzip wie auf der Website des AGV Bau Saar.              */
a {
  color: var(--blau);
  text-decoration: none;
  transition: color 0.25s ease-out, border-color 0.25s ease-out,
              background-color 0.25s ease-out;
}
/* NUR MIT MAUSZEIGER (24.09.2026) - gilt fuer alle Stellen mit diesem
   Vermerk. Das iPhone laesst den Zustand „Maus darueber" nach einer
   Beruehrung einfach stehen, bis man woanders hintippt. Sein Befund bei
   den Meldungen: „der Titel bleibt blau, bis ich woanders draufdruecke".
   Dasselbe traf verdeckt auch Verweise im Text, den Fussbereich, den
   Pfad oben, die Punkte am Startbild, „nach oben" und die Pfeile im
   Bildfenster. Am Handy antworten diese Stellen beim Antippen wie bisher
   (eigenes Orange oder der Tipp-Kasten des Browsers), nur kleben bleibt
   nichts mehr. Die Klappmenues oben (.navi) sind bewusst NICHT dabei:
   Auf einem Tablet oeffnen sie sich nur ueber genau diesen Zustand. */
@media (hover: hover) {
  a:hover { color: var(--orange-dunkel); text-decoration: underline; }
}

@media (prefers-reduced-motion: reduce) {
  /* `.termin` und sein Knopf sind am 20.09.2026 dazugekommen: Sie haben
     seitdem denselben weichen Uebergang wie die Kacheln - und gehoeren
     deshalb auch hierher. Wer im Geraet "Bewegung reduzieren" eingestellt
     hat, bekaeme sonst ausgerechnet bei den Terminen die einzige
     Bewegung der Seite. */
  a, .knopf, .kachel, .karte, .termin, .termin__mehr,
  .partnerliste a, .sozial a, .burger span { transition: none; }
  .termin__mehr::before { transition: none; }
}

:focus-visible {
  outline: 3px solid var(--blau);
  outline-offset: 2px;
  border-radius: 3px;
}

/* Springt man ueber einen Verweis wie "#anfahrt" an eine Stelle weiter
   unten, soll die Ueberschrift nicht unter der stehenbleibenden
   Kopfleiste verschwinden. Dieser Abstand haelt sie frei. */
/* Springt man auf eine Sprungmarke, soll sie nicht unter der Kopfleiste
   landen. `--balken-hoehe` setzt die Bearbeitungsoberflaeche auf die
   gemessene Hoehe ihres blauen Balkens; auf der fertigen Website gibt es
   ihn nicht, dort bleibt es bei den 6 rem wie bisher. */
[id] { scroll-margin-top: calc(var(--balken-hoehe, 0px) + 6rem); }

h1, h2, h3, h4 {
  line-height: 1.2;
  letter-spacing: -0.015em;
  margin: 0 0 0.6em;
  font-weight: 700;
}
h1 { font-size: clamp(1.9rem, 4.5vw, 3rem); }
h2 { font-size: clamp(1.5rem, 3vw, 2.1rem); }
h3 { font-size: clamp(1.2rem, 2.2vw, 1.45rem); }
h4 { font-size: 1.1rem; }

p  { margin: 0 0 1.1em; }
ul, ol { margin: 0 0 1.2em; padding-left: 1.3em; }
li { margin-bottom: 0.35em; }

hr { border: 0; border-top: 1px solid var(--linie); margin: 2.5rem 0; }

/* Sprunglink fuer Tastatur- und Screenreader-Nutzung */
.sprunglink {
  position: absolute; left: -9999px; top: 0; z-index: 200;
  background: var(--blau); color: #fff; padding: 0.8rem 1.2rem;
}
.sprunglink:focus { left: 0; }

/* =====================================================================
   Raster / Container
   ===================================================================== */

.bereich {
  width: 100%; max-width: var(--breite); margin: 0 auto;
  padding: 0 var(--rand);
}

.abschnitt        { padding: var(--abstand) 0; }
.abschnitt--grau  { background: var(--flaeche-grau); }
.abschnitt--schmal{ padding: calc(var(--abstand) * 0.6) 0; }

/* Ueberschrift eines Abschnitts mit farbigem Strich darueber.
   Der Strich ist blau mit einem kurzen orangen Ende - ein leiser
   Hinweis auf die Zusammengehoerigkeit mit dem AGV Bau Saar. */
.titel-strich::before {
  content: "";
  display: block;
  width: 56px; height: 4px;
  background: linear-gradient(90deg, var(--blau) 0 38px, var(--orange) 38px);
  border-radius: 2px;
  margin-bottom: 1.1rem;
}
.titel-strich--mitte { text-align: center; }
.titel-strich--mitte::before { margin-left: auto; margin-right: auto; }

.vorspann {
  font-size: 1.15rem;
  color: var(--schrift-grau);
  max-width: 62ch;
  margin-bottom: 2.5rem;
}

/* =====================================================================
   Kopfbereich mit Navigation
   ===================================================================== */

.kopf {
  position: sticky; top: 0; z-index: 100;
  background: rgba(255, 255, 255, 0.97);
  backdrop-filter: saturate(180%) blur(8px);
  border-bottom: 1px solid var(--linie);
}

.kopf__innen {
  display: flex; align-items: center; justify-content: space-between;
  gap: 1rem; min-height: 76px;
}

.kopf__logo img { height: 52px; width: auto; }

/* --- Hauptnavigation (ab Tablet sichtbar) ------------------------- */
.navi { display: none; }

.navi ul { list-style: none; margin: 0; padding: 0; display: flex; gap: 0.35rem; }

.navi > ul > li { position: relative; }

.navi a {
  display: block;
  padding: 0.6rem 0.85rem;
  color: var(--schrift);
  font-weight: 600;
  font-size: 0.98rem;
  border-radius: 6px;
  white-space: nowrap;
}
/* Grundsatz: Wo der Hintergrund orange wird, bleibt die Schrift schwarz. */
.navi a:hover {
  background: var(--orange-zart);
  color: var(--schrift);
  text-decoration: none;
  box-shadow: inset 0 -3px 0 var(--orange);
  border-radius: 6px 6px 0 0;
}
/* Die aktuell geoeffnete Seite bleibt blau markiert. */
.navi a[aria-current="page"] { color: var(--blau); box-shadow: inset 0 -3px 0 var(--blau); border-radius: 6px 6px 0 0; }
.navi a[aria-current="page"]:hover { color: var(--blau); background: var(--blau-sehrhell); box-shadow: inset 0 -3px 0 var(--blau); }

/* Untermenue als Klappliste */
.navi__unter {
  position: absolute; left: 0; top: 100%;
  min-width: 270px;
  background: #fff;
  border: 1px solid var(--linie);
  border-radius: var(--radius);
  box-shadow: 0 14px 34px rgba(20, 30, 60, 0.13);
  padding: 0.4rem;
  display: none !important;
  flex-direction: column; gap: 0;
}
.navi li:hover > .navi__unter,
.navi li:focus-within > .navi__unter { display: flex !important; }
.navi__unter a { font-weight: 500; font-size: 0.94rem; white-space: normal; }

/* --- Burger-Schaltflaeche (nur auf kleinen Bildschirmen) ----------
   18.09.2026, Fassung C, vom Nutzer gewaehlt („am schoensten“): kein
   Rahmen mehr, drei blaue Striche, nach unten kuerzer, der letzte orange
   - der blau-orange Strich der Kacheln im Kleinen. Vorher ein heller
   Rahmen mit drei schwarzen Strichen, 46 x 42 px.
   Die Tippflaeche bleibt 48 x 48, auch ohne sichtbaren Rahmen.
   Geoeffnet werden alle drei gleich lang und blau und bilden ein Kreuz. */
.burger {
  display: inline-flex; flex-direction: column; justify-content: center;
  align-items: flex-end; gap: 5px;
  width: 48px; height: 48px; padding: 0 10px;
  background: none; border: 0; border-radius: 8px;
  cursor: pointer;
}
.burger:active { background: var(--orange-zart); }
.burger span {
  display: block; width: 26px; height: 3px; border-radius: 2px;
  background: var(--blau-dunkel);
  transition: transform 0.15s ease-out, opacity 0.15s ease-out;
}
.burger span:nth-child(2) { width: 20px; }
.burger span:nth-child(3) { width: 14px; background: var(--orange); }
.burger[aria-expanded="true"] span { width: 26px; background: var(--blau-dunkel); }
/* 8 px = Strichdicke 3 + Abstand 5: So treffen sich die Striche mittig */
.burger[aria-expanded="true"] span:nth-child(1) { transform: translateY(8px) rotate(45deg); }
.burger[aria-expanded="true"] span:nth-child(2) { opacity: 0; }
.burger[aria-expanded="true"] span:nth-child(3) { transform: translateY(-8px) rotate(-45deg); }

/* --- Ausklappmenue auf dem Handy ---------------------------------- */
/* DAS MENUE DECKT DIE SEITE ZU (23.09.2026)
   ---------------------------------------------------------------------
   Sein Befund: "Wenn ich auf den Navigationsbereich draufdruecke,
   werden mir zwar die Navigationsmoeglichkeiten angezeigt, aber der
   Bereich darunter ist immer noch die Seite, auf der ich gerade war.
   Ich kann dort dann quasi immer noch so halbseitig scrollen. Das soll
   bitte weg."

   Bisher war das Menue ein Kasten unter der Kopfleiste, hoechstens
   72 % der Bildschirmhoehe hoch - darunter blieb die alte Seite stehen
   und liess sich weiterschieben. Jetzt reicht es bis zum unteren Rand
   und ist weiss hinterlegt; von der Seite darunter ist nichts mehr zu
   sehen. Dass sie sich auch nicht mehr schieben laesst, macht
   `script.js` (`menue-offen` auf <body>).

   `100dvh` statt `100vh`: Auf dem iPhone waechst und schrumpft die
   sichtbare Hoehe, wenn Safaris Leisten ein- und ausfahren. `vh`
   rechnet mit der GROESSTEN Hoehe - das Menue waere unten abgeschnitten.
   `dvh` rechnet mit der gerade wirklich sichtbaren. Aeltere Browser
   kennen es nicht und nehmen dann die Zeile darueber. */
.mobilnavi {
  display: none;
  border-top: 1px solid var(--linie);
  background: #fff;
  max-height: calc(100vh - 77px);
  max-height: calc(100dvh - 77px);
  min-height: calc(100vh - 77px);
  min-height: calc(100dvh - 77px);
  overflow-y: auto;
  overscroll-behavior: contain;
  padding: 0.75rem 0 1.5rem;
}
.mobilnavi.offen { display: block; }
/* Die Seite hinter dem offenen Menue steht still. */
body.menue-offen { overflow: hidden; }
.mobilnavi ul { list-style: none; margin: 0; padding: 0; }
.mobilnavi a {
  display: block;
  padding: 0.7rem 0.75rem;
  color: var(--schrift); font-weight: 600;
  border-bottom: 1px solid var(--linie);
  border-radius: 8px;
  transition: background-color 0.2s ease-out, box-shadow 0.2s ease-out;
}
/* Beim Antippen dieselbe Hervorhebung wie am Rechner: orange Flaeche
   mit orangem Rahmen, Schrift bleibt schwarz. Der Rahmen entsteht ueber
   einen Schatten nach innen, damit beim Antippen nichts verspringt. */
.mobilnavi a:hover,
.mobilnavi a:active,
.mobilnavi a:focus-visible {
  background: var(--orange-zart);
  box-shadow: inset 0 0 0 1px var(--orange);
  color: var(--schrift);
  text-decoration: none;
}
/* Die gerade geoeffnete Seite bleibt blau markiert. */
.mobilnavi a[aria-current="page"] { color: var(--blau); }
.mobilnavi a[aria-current="page"]:hover,
.mobilnavi a[aria-current="page"]:active {
  background: var(--blau-sehrhell);
  box-shadow: inset 0 0 0 1px var(--blau);
  color: var(--blau);
}
.mobilnavi .mobilnavi__unter a {
  font-weight: 400; font-size: 0.95rem;
  padding-left: 1.1rem; color: var(--schrift-grau);
  border-bottom: 1px dashed var(--linie);
}

/* Ab 1.008 Bildpunkten Fensterbreite steht die Menuezeile, darunter die
   drei Striche (29.10.2026, Punkt 86; vorher 992). Mit Inter ist die
   Zeile der Auslieferung 804 Bildpunkte breit und passt erst ab 999
   neben das Logo (mit der Geraeteschrift 795, ab 992). Die 9 Bildpunkte
   dazwischen sind Reserve fuer Windows ohne Skript, wo der Rollbalken
   der Seite 8 davon nimmt. Nachgemessen bei 1.008: 812 frei, die Zeile
   braucht 804. Die Zahl steht noch zweimal: bei `.navi-rahmen` weiter
   unten und in verwaltung/gestaltung.css (`.navi-zusatz`) - immer alle
   drei aendern. */
@media (min-width: 1008px) {
  .navi   { display: block; }
  .burger { display: none; }
  .mobilnavi { display: none !important; }
}

/* DIE MENÜZEILE LÄSST SICH ZUR SEITE SCHIEBEN (05.10.2026, Runde 2)
   ---------------------------------------------------------------------
   Seit sich im Hauptmenü neue Oberpunkte anlegen lassen, ist die Zeile
   nicht mehr immer gleich lang - neben dem Logo ist aber nur Platz für
   höchstens 953 Bildpunkte. Seine Entscheidung: „dass man das Menü
   einfach durchscrollen kann … natürlich mit so einer Abgrauung ganz
   rechts, damit man sieht, dass man scrollen kann, oder wie wir das
   sonst immer gemacht haben.“

   Passt die Zeile, ändert sich nichts. Passt sie nicht:
     - Sie lässt sich schieben - mit dem Finger, mit zwei Fingern auf dem
       Tastfeld, mit der Tabulatortaste.
     - Wo es weitergeht, blendet ihr Rand ins Weiße aus, und dort steht
       ein Pfeil. Der Pfeil ist für die Maus: Mit einem gewöhnlichen
       Mausrad kommt man in einer Zeile nicht zur Seite. Ein Klick schiebt
       ein gutes Stück weiter. Beides - Rand und Pfeil - ist EIN Knopf. Er
       steht in der Seite (baukasten/rahmen.php) und ist nur zu sehen,
       solange es dort weitergeht.

   Kein Rollbalken unter der Zeile: Er stünde mitten im Kopfbereich und
   machte ihn höher. Dafür der Pfeil.

   `flex: none` am Logo: Sonst schöbe eine zu lange Zeile zuerst das Logo
   zusammen (nachgemessen am 05.10.2026: Logo 0 Bildpunkte breit) und
   ließe sich erst danach schieben.

   6 Bildpunkte Rand rundum, außen wieder abgezogen: Der Kasten schneidet
   ab, was über ihn hinausragt - auch den blauen Rahmen, den ein
   Menüpunkt mit der Tabulatortaste bekommt (3 breit, 2 Abstand). Mit dem
   Rand hat der Rahmen Platz, und die Zeile steht trotzdem, wo sie stand.
   Der Rand sitzt an der LISTE, nicht am Kasten, und die Liste ist so
   breit wie ihr Inhalt (`max-content`): Den rechten Rand eines Kastens
   zählt der Browser beim Schieben nicht mit - ganz nach rechts geschoben
   stand der letzte Punkt sonst 6 Bildpunkte zu weit rechts (nachgemessen).

   Die Klappliste unter einem Menüpunkt (`.navi__unter` oben) vertrüge
   sich damit nicht - sie würde ebenfalls abgeschnitten. Der Baukasten
   baut seit August keine mehr; wer sie zurückholt, muss das hier lösen.

   DER RAHMEN UM DIE ZEILE (06.10.2026). Die Zeile steht in
   `.navi-rahmen`, und die zwei Pfeile liegen darin an seinen Enden - über
   der Zeile, nicht daneben: Tauchte einer daneben auf, würde die Zeile
   schmaler und rutschte unter dem Finger weg. Einen Tag lang stellte
   script.js die Pfeile nach Maß hin; das Maß kam auf ganze Bildpunkte
   gerundet, die Zeile liegt aber oft auf einem halben. Sein Befund: „dass
   auf der linken Seite neben dem Pfeil noch ein kleiner Spalt ist, wo das
   Durchgescrollte angezeigt wird“. Jetzt gibt es nichts mehr zu messen.
   Jeder Pfeil reicht dazu einen Bildpunkt über das Ende des Rahmens
   hinaus (dort ist der Kopfbereich ohnehin weiß) - zwei Flächen, die sich
   nur berühren, zeigen bei krummer Vergrößerung sonst wieder eine Naht.

   Der Rahmen bekommt, was vorher die Zeile selbst hatte: den Platz neben
   dem Logo und die 6 Bildpunkte, die außen wieder abgezogen werden. Eine
   Zeile OHNE Rahmen (buchung.php hat ihren eigenen kleinen Kopf) behält
   beides wie bisher. */
.kopf__logo { flex: none; }
.navi-rahmen { display: none; position: relative; min-width: 0; margin: -6px; }
@media (min-width: 1008px) { .navi-rahmen { display: block; } }
.navi {
  min-width: 0;
  overflow-x: auto; overflow-y: hidden;
  overscroll-behavior-x: contain;
  scroll-behavior: smooth;
  /* Ein Menüpunkt, den die Tabulatortaste holt, soll nicht unter dem
     ausblendenden Rand stehen bleiben. */
  scroll-padding: 0 3.75rem;
  margin: -6px;
  scrollbar-width: none;                      /* Firefox */
}
.navi-rahmen > .navi { margin: 0; }
.navi::-webkit-scrollbar { display: none; }   /* Chrome, Safari, Edge */
.navi > ul { width: max-content; padding: 6px; }

.navi-pfeil {
  position: absolute; z-index: 1;
  top: 0; bottom: 0;
  /* 3,5 rem für Rand und Pfeil, dazu der eine Bildpunkt nach außen. */
  width: calc(3.5rem + 1px);
  display: flex; align-items: center;
  padding: 0; border: 0; border-radius: 0;
  -webkit-appearance: none; appearance: none;
  color: var(--blau-dunkel);
  cursor: pointer;
}
.navi-pfeil[hidden] { display: none; }
.navi-pfeil--rechts {
  right: -1px; padding-right: 1px;
  justify-content: flex-end;
  background: linear-gradient(to right, rgba(255, 255, 255, 0), #fff 58%);
}
.navi-pfeil--links {
  left: -1px; padding-left: 1px;
  justify-content: flex-start;
  background: linear-gradient(to left, rgba(255, 255, 255, 0), #fff 58%);
}
/* Gezeichnet statt geschrieben: Es sind die beiden Pfeile der Bilderschau
   (weiter unten, `.bildschau__zeichen`) - dieselbe Klasse, dieselben zwei
   Zeichnungen, dort nur einmal eingetragen. Hier steht allein die Größe. */
.navi-pfeil .bildschau__zeichen { width: 1.5rem; height: 1.5rem; }
/* Orange heißt auf dieser Website „hier kann man klicken“ - nur mit
   Mauszeiger, siehe a:hover. */
@media (hover: hover) { .navi-pfeil:hover { color: var(--orange); } }
@media (prefers-reduced-motion: reduce) { .navi { scroll-behavior: auto; } }

/* =====================================================================
   Startbild (Hero)
   ===================================================================== */

.hero {
  position: relative;
  color: #fff;
  background: var(--blau-dunkel);
  min-height: 62vh;
  display: flex; align-items: center;
}
/* ---------------------------------------------------------------------
   Die Startbilder und ihr Schleier

   Jedes Bild liegt als eigene Ebene im Abschnitt, mit seinem eigenen
   Schleier darueber (Auswahl siehe „Bild im Kopfstreifen und die
   Schleier"). Bei mehreren werden sie ineinander geblendet.

   Bis zum 17.09.2026 lag EIN fester blauer Verlauf ueber allen Bildern
   (`.hero::after`). Der Nutzer wollte „nicht jedes Bild blau" und je
   Bild selbst waehlen - deshalb gehoert der Schleier jetzt zum Bild.

   Warum Ebenen und kein Bildwechsel am Hintergrund: Ein neu gesetztes
   Hintergrundbild laedt erst beim Wechsel - man saehe kurz nichts.
   Die Ebenen sind alle da und werden nur ein- und ausgeblendet.

   Die Schriftfarbe haengt am Schleier (`ton-hell`, `ton-dunkel`,
   `ton-schatten` am Abschnitt). Beim Wechsel setzt `script.js` sie um.
   --------------------------------------------------------------------- */
.hero__bilder { position: absolute; inset: 0; }
.hero__bild {
  position: absolute; inset: 0;
  opacity: 0;
  transition: opacity 1.1s ease-in-out;
}
.hero__bild.ist-da { opacity: 1; }

/* Die Punkte sagen, wie viele Bilder es gibt und bei welchem man ist.
   Sie sind echte Schaltflaechen - anklickbar und mit der Tastatur
   erreichbar. */
.hero__punkte {
  position: absolute;
  bottom: 1.1rem; left: 0; right: 0;
  z-index: 2;
  display: flex; justify-content: center; gap: 0.55rem;
}
.hero__punkt {
  /* Kleiner und gefuellt statt hohl: Die Punkte sagen nur, wo man ist -
     sie sollen nicht mit den Schaltflaechen darueber um Aufmerksamkeit
     streiten. Halbdurchsichtiges Weiss laesst das Bild durchscheinen
     und traegt trotzdem auf hellen wie dunklen Stellen. */
  width: 0.6rem; height: 0.6rem;
  padding: 0; border-radius: 50%;
  border: 0;
  background: rgba(255, 255, 255, 0.42);
  cursor: pointer;
  transition: 0.18s;
}
.hero__punkt.ist-da { background: rgba(255, 255, 255, 0.92); }
/* Orange zeigt, wo der Zeiger liegt - wie ueberall auf der Seite. */
/* Orange bleibt: Es zeigt, wo der Zeiger liegt - wie ueberall sonst. */
.hero__punkt.zeiger-aktiv { background: var(--orange); }
@media (hover: hover) { .hero__punkt:hover { background: var(--orange); } }   /* nur mit Mauszeiger, siehe a:hover */
.hero__punkt:focus-visible { outline: 2px solid #fff; outline-offset: 3px; }

/* Wer im Betriebssystem eingestellt hat, dass Bewegung ihn stoert,
   bekommt keinen selbsttaetigen Wechsel - das Skript prueft das. Die
   Ueberblendung wird hier zusaetzlich abgeschaltet. */
@media (prefers-reduced-motion: reduce) {
  .hero__bild { transition: none; }
}

/* padding-block, damit der seitliche Rand von .bereich erhalten bleibt */
.hero__innen { position: relative; z-index: 1; padding-block: clamp(3rem, 9vw, 6rem); }
.hero h1 { color: #fff; margin-bottom: 0.5rem; }
.hero__vorzeile {
  display: inline-block;
  font-size: 0.85rem; font-weight: 700;
  letter-spacing: 0.14em; text-transform: uppercase;
  /* Kraeftig genug, dass es durch den blauen Schleier darunter
     wirklich orange wirkt und nicht braeunlich. */
  background: rgba(255, 98, 0, 0.78);
  border: 1px solid rgba(255, 128, 46, 0.9);
  border-radius: 999px;
  padding: 0.35rem 0.9rem;
  margin-bottom: 1.4rem;
}
.hero__leistungen {
  list-style: none; padding: 0; margin: 1.6rem 0 2.2rem;
  display: flex; flex-wrap: wrap; gap: 0.6rem 2rem;
  font-size: clamp(1.05rem, 2vw, 1.3rem); font-weight: 600;
}
.hero__leistungen li { display: flex; align-items: center; gap: 0.6rem; margin: 0; }
.hero__leistungen li::before {
  content: ""; width: 9px; height: 9px; border-radius: 50%;
  background: #fff; flex: none;
}

/* AUF DEM HANDY UNTEREINANDER (23.09.2026)
   ---------------------------------------------------------------------
   Nachgemessen bei 390 px (sein iPhone 13): "Ueberbetriebliche
   Ausbildung" ist 244 px breit und fuellt die Zeile allein. Die beiden
   kurzen rutschen dadurch NEBENEINANDER in die zweite Zeile (181 px und
   129 px, zusammen 342 px - es passt eben gerade). Das Ergebnis sieht
   aus wie ein Versehen: ein Punkt oben, zwei darunter.

   Unter 700 px steht deshalb jeder Punkt in einer eigenen Zeile. Am PC
   bleiben sie nebeneinander, dort ist genug Platz und die Reihe wirkt
   als eine Aussage. `align-items: flex-start` ist noetig, weil ein
   Listenpunkt selbst ein Flex-Kasten ist und sonst auf volle Breite
   gezogen wuerde. */
@media (max-width: 699px) {
  .hero__leistungen { flex-direction: column; align-items: flex-start; gap: 0.5rem;
                      margin: 1.1rem 0 1.5rem; }
}

/* WARUM DIE ABSTAENDE DARUEBER UND DARUNTER SCHRUMPFEN
   Drei Zeilen statt zwei machen die Liste 34 px hoeher (65 -> 99 px).
   Die holt der kleinere Abstand um die Liste herum wieder herein
   (vorher 1,6 rem oben und 2,2 rem unten). Nachgemessen, beide Faelle
   auf derselben Seite:
     390 x 844 (sein iPhone 13):   Startbereich 523 px vorher, 523 px
                                   jetzt - genau ausgeglichen.
     320 x 536 (alter Android):    574 px vorher, 551 px jetzt - dort
                                   brach die Liste ohnehin schon auf
                                   drei Zeilen um, also 23 px gewonnen.
   Die Schriftgroesse bleibt unangetastet. */

/* AM HANDY OBEN UND UNTEN NUR HALB SO VIEL LEERES BILD (27.09.2026)
   ---------------------------------------------------------------------
   SEIN WUNSCH: Ueber dem Text und unter den Knoepfen sieht man „ausser
   dem Bild selber nichts Wichtiges“ - beide Bereiche um die Haelfte
   kuerzen, dann ist sichtlich mehr Platz.

   Der leere Streifen hat zwei Teile: den Innenabstand (48 px) und, auf
   hohen Handys, den Rest, den die Mindesthoehe 62 vh dazugibt (der
   Inhalt steht mittig). Beides wird halbiert:
     - Innenabstand 24 statt 48 px.
     - Mindesthoehe: halb Inhalt, halb 62 vh - gerechnet mit dem ueblichen
       Inhalt von rund 330 px (Vorzeile, Titel, drei Punkte, Knoepfe):
       165 px + 31 vh.
   Nachgemessen, leer oben und unten je:
     320 x 536 (alter Android):  48 -> 24 px
     360 x 740 (ueblich):        66 -> 33 px
     390 x 844 (sein iPhone 13): 98 -> 49 px (Startbild 523 -> 425 px)
   Am PC und auf dem Tablet bleibt alles wie es war. */
@media (max-width: 559px) {
  .hero { min-height: calc(165px + 31vh); }
  .hero__innen { padding-block: 1.5rem; }
}

/* =====================================================================
   Schaltflaechen
   ===================================================================== */

/* `font-family: inherit` seit 27.09.2026 (Gerätecheck, Punkt 16, sein Ja):
   Ein <button class="knopf"> - „Antworten abschicken“, „Weiter zur
   Bestätigung“ - nahm sonst die Schrift des Browsers (Arial), während
   ein <a class="knopf"> daneben die der Seite hatte. */
.knopf {
  display: inline-flex; align-items: center; gap: 0.5rem;
  padding: 0.8rem 1.5rem;
  background: var(--blau); color: #fff;
  font-family: inherit; font-weight: 600; font-size: 1rem;
  border: 2px solid var(--blau); border-radius: 8px;
  cursor: pointer; transition: 0.18s;
}
/* Beim Darueberfahren wechseln die Schaltflaechen auf Orange -
   mit schwarzer Schrift, die darauf am besten lesbar ist. */
.knopf.zeiger-aktiv, .knopf:active {
  background: var(--orange); border-color: var(--orange);
  color: var(--schrift); text-decoration: none;
}

/* Die beiden Schaltflaechen im Startbild: beim Beruehren zart orange
   hinterlegt, beim Anklicken voll orange. */
.knopf--hell { background: #fff; color: var(--blau); border-color: #fff; }
.knopf--hell.zeiger-aktiv {
  background: var(--orange-zart); border-color: var(--orange); color: var(--schrift);
}
.knopf--hell:active {
  background: var(--orange); border-color: var(--orange); color: var(--schrift);
}

.knopf--rand { background: transparent; color: var(--blau); }
.knopf--rand.zeiger-aktiv {
  background: var(--orange); border-color: var(--orange); color: var(--schrift);
}

.knopf-reihe { display: flex; flex-wrap: wrap; gap: 0.8rem; }

/* =====================================================================
   Karten und Raster
   ===================================================================== */

.raster { display: grid; gap: 1.6rem; grid-template-columns: 1fr; }
@media (min-width: 620px)  { .raster--2, .raster--3, .raster--4 { grid-template-columns: repeat(2, 1fr); } }
@media (min-width: 940px)  { .raster--3 { grid-template-columns: repeat(3, 1fr); }
                             .raster--4 { grid-template-columns: repeat(4, 1fr); } }

.karte {
  display: flex; flex-direction: column;
  background: #fff;
  border: 1px solid var(--linie);
  border-radius: var(--radius);
  overflow: hidden;
  transition: 0.2s;
}
/* Bewusst unveraendert: Die Kacheln unter "Aktuelles aus dem
   Ausbildungszentrum" behalten ihre blaue Hervorhebung.
   Gesteuert wird sie - wie bei Kurstabelle und Kacheln - vom Skript
   ueber "karte-aktiv", damit sie beim Scrollen sofort mitwandert.

   SOLANGE DER FINGER LIEGT (24.09.2026, spaet)
   Sein Befund am iPhone: Die Meldungen werden beim Beruehren „nur ganz
   schnell einmal blau hervorgehoben und gehen dann direkt wieder weg" -
   anders als die Kacheln, die stehen bleiben, „bis man den Finger
   wieder herunternimmt". Vorher war das auch hier so.
   Der Unterschied: Eine Kachel IST ein Verweis, und einem Verweis gibt
   das iPhone `:active`, solange der Finger darauf liegt - deshalb steht
   bei `.kachel` seit jeher auch `:active`. Bei der Meldung ist nur der
   Titel der Verweis (am Handy ueber die ganze Karte gezogen). Stehen
   blieb bisher nur, weil der Titel ueber `:hover` blau wurde - und genau
   das klebte danach fest und ist seit heute nur noch mit Mauszeiger.
   Jetzt wie bei den Kacheln: `:active` am Titel haelt Karte und blauen
   Titel, bis der Finger abhebt - und nicht laenger. */
.karte.karte-aktiv,
.karte:has(.karte__titel a:active) { border-color: var(--blau); box-shadow: 0 12px 30px rgba(20, 30, 60, 0.11); transform: translateY(-3px); }
/* Der Bildausschnitt sitzt etwas hoeher, damit auf Gruppenfotos
   die Koepfe nicht abgeschnitten werden. */
.karte__bild {
  aspect-ratio: 16 / 9; width: 100%;
  object-fit: cover; object-position: center 28%;
  background: var(--flaeche-grau);
}
.karte__inhalt { padding: 1.15rem 1.25rem 1.35rem; display: flex; flex-direction: column; flex: 1; }
.karte__datum { font-size: 0.83rem; color: var(--schrift-grau); font-weight: 600; letter-spacing: 0.03em; margin-bottom: 0.4rem; }
.karte__titel { font-size: 1.12rem; margin: 0 0 0.55rem; }
.karte__titel a { color: var(--schrift); }
@media (hover: hover) { .karte__titel a:hover { color: var(--blau); text-decoration: none; } }   /* nur mit Mauszeiger, siehe a:hover */
.karte__titel a:active { color: var(--blau); }   /* Finger liegt darauf - siehe „SOLANGE DER FINGER LIEGT" */
.karte__text { font-size: 0.95rem; color: var(--schrift-grau); margin: 0 0 1rem; }
/* "Weiterlesen" steht normalerweise schlicht da. Erst wenn der
   Mauszeiger die Kachel beruehrt, wird daraus ein kraeftig oranges
   Feld - mit schwarzer Schrift. */
.karte__mehr {
  margin-top: auto;
  align-self: flex-start;
  font-weight: 600; font-size: 0.95rem;
  color: var(--blau);
  background: transparent;
  border: 1px solid transparent;
  text-decoration: none;
  border-radius: 6px;
  padding: 0.3rem 0;
  transition: background-color 0.2s ease-out, color 0.2s ease-out,
              padding 0.2s ease-out;
}
.karte__mehr::after { content: " \2192"; }
.karte__mehr:hover { text-decoration: none; }
.karte.karte-aktiv .karte__mehr,
.karte:focus-within .karte__mehr {
  background: var(--orange);
  border-color: var(--orange);
  color: var(--schrift);
  padding: 0.3rem 0.7rem;
}

/* Mitarbeiterkarten: Portraits quadratisch und am Kopf ausgerichtet */
.karte__bild--portrait { aspect-ratio: 1 / 1; object-position: center 25%; }
.karte__kontakt { margin: auto 0 0; font-size: 0.9rem; line-height: 1.5; }
.karte__kontakt a { word-break: break-word; }

/* MELDUNGEN AUF DEM HANDY WIE IN EINER NACHRICHTEN-APP (17.09.2026)
   ---------------------------------------------------------------------
   Vom Nutzer so bestellt: links ein kleines Bild, rechts Datum und Titel.
   Gemessen am 16.09.2026 bei 375 px: eine Karte bis 466 px hoch, die neun
   Meldungen der Startseite zusammen 4.320 px - mehr als fuenf Bildschirme.
   Der Anriss und "Weiterlesen" fallen hier weg; die ganze Karte fuehrt zur
   Meldung.

   Nur `article.karte`: Die Mitarbeiterkarten auf "Mitarbeiter" sind
   ebenfalls `.karte`, aber ein <div> - an ihnen aendert sich nichts. */
@media (max-width: 640px) {
  /* 17.09.2026: Das Bild fuellt das ganze linke Drittel, bis an den Rand der
     Karte - vorher ein eingeruecktes Quadrat mit Luft ringsum. Der Nutzer
     liess die Wahl offen; randlos wirkt ruhiger und zeigt mehr vom Foto.
     Die Rundung kommt von der Karte (`overflow: hidden`). */
  article.karte {
    position: relative;
    display: grid;
    grid-template-columns: 34% minmax(0, 1fr);
    align-items: stretch;
    min-height: 7.5rem;
  }
  /* `height: 0` plus `min-height: 100%`: Das Bild richtet sich nach der
     Karte, nicht die Karte nach dem Bild. Mit `height: 100%` zog ein
     Hochkant-Foto die Karte auf bis zu 203 statt 120 px (gemessen). */
  article.karte .karte__bild {
    width: 100%;
    height: 0;
    min-height: 100%;
    aspect-ratio: auto;
    border-radius: 0;
  }
  /* Eine Meldung ohne Bild nutzt die ganze Breite */
  article.karte .karte__inhalt { padding: 0.85rem 0.9rem; }
  article.karte .karte__inhalt:first-child { grid-column: 1 / -1; }
  article.karte .karte__datum { font-size: 0.875rem; margin-bottom: 0.25rem; }
  article.karte .karte__titel {
    font-size: 1rem; line-height: 1.3; margin: 0;
    overflow-wrap: anywhere;
  }
  article.karte .karte__titel a::after {
    content: ""; position: absolute; inset: 0;
  }
  article.karte .karte__text,
  article.karte .karte__mehr { display: none; }
}

/* Karte, die komplett verlinkt ist (z. B. Menue-Uebersichten) */
.kachel {
  position: relative;
  display: block; padding: 1.4rem 1.5rem;
  background: #fff; color: var(--schrift);
  border: 1px solid var(--linie);
  border-radius: var(--radius); transition: 0.18s;
  overflow: hidden;
}
/* Auch hier der senkrechte Strich: erst blau, dann orange. */
.kachel::before {
  content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: 4px;
  background: linear-gradient(180deg, var(--blau) 0 68%, var(--orange) 68%);
}

/* Eine Ebene tiefer: durchgehend blauer Strich.
   ---------------------------------------------------------------------
   Kacheln auf einer Hauptseite (Ausbildung, Nachwuchs, Über uns ...)
   haben den blau-orangen Strich der ganzen Website. Steht eine Kachel
   dagegen auf einer Seite, die man selbst erst ueber eine Kachel
   erreicht hat, ist der Strich durchgehend blau - das Zeichen dafuer,
   dass man sich bereits eine Ebene tiefer befindet.  */
.kachel--tiefer::before { background: var(--blau); }

/* Hervorhebung unter dem Mauszeiger.
   ---------------------------------------------------------------------
   Gesteuert vom Skript ueber "kachel-aktiv" statt ueber :hover - genau
   wie bei der Kurstabelle. Grund: Beim Scrollen mit zwei Fingern merkt
   der Browser von allein nicht, dass unter dem stehenden Zeiger jetzt
   eine andere Kachel liegt; die Hervorhebung bliebe bis zum Stillstand
   auf der alten Kachel haengen. Beides gleichzeitig zu benutzen ginge
   nicht: Dann waeren waehrend des Scrollens zwei Kacheln markiert.
   :active sorgt fuer dieselbe Rueckmeldung beim Antippen am Handy. */
.kachel.kachel-aktiv,
.kachel:active {
  background: var(--orange-zart);
  border-color: var(--orange);
  color: var(--schrift);
  text-decoration: none;
  transform: translateX(3px);
}
.kachel.kachel-aktiv::before,
.kachel:active::before { background: var(--orange); }
.kachel.kachel-aktiv strong,
.kachel:active strong { color: var(--schrift); }
/* AUF DEM HANDY ERSCHEINT DIE HERVORHEBUNG SOFORT - verschoben ans Ende
   dieser Datei (24.09.2026), siehe dort. */

/* KEIN GRAUER BLITZ BEIM ANTIPPEN (24.09.2026)
   ---------------------------------------------------------------------
   Sein Befund: Beim Antippen einer Kachel wird sie orange - und beim
   echten Druecken „kommt noch mal wie so ein kleiner Lichtblitz". Das
   sei „doppelt gemoppelt" und wirke „ein bisschen schlampig".

   Der Blitz ist nicht von uns, sondern vom iPhone (und von Android):
   Tippt man auf einen Verweis oder Knopf, legt der Browser von selbst
   einen grauen, halb durchsichtigen Kasten darueber. Den gibt es, damit
   Seiten OHNE eigene Rueckmeldung ueberhaupt eine haben.

   Er wird deshalb nur dort abgeschaltet, wo wir selbst eine haben - die
   Liste deckt sich mit `HERVORHEBUNG` in `script.js` und den Stellen mit
   `:active`. Ueberall sonst (Verweise im Fliesstext, die Punkte im
   Startbild, das Fenster fuer grosse Bilder) bleibt der Blitz, denn
   dort ist er die einzige Rueckmeldung. */
.kachel, .karte, .termin, .kursleiste__verweis,
.seminarliste tbody tr, .inhalt tbody tr, .tabelle tbody tr,
.knopf, .dateiblock, .video__start, .partnerliste a, .sozial a,
.jahrwahl__knopf, .auswahl__knopf, .wahl, .haken, .formfeld,
.termin__mehr, .aufklapper, .fuss__weg, .burger, .mobilnavi a {
  -webkit-tap-highlight-color: transparent;
}

.kachel strong { display: block; font-size: 1.05rem; margin-bottom: 0.15rem; }
.kachel span   { font-size: 0.92rem; color: var(--schrift-grau); }

/* Kachel, hinter der eine Datei steckt: die Art der Datei steht vorne. */
.kachel--datei strong { padding-right: 1.5rem; }

/* HANDY: SCHMALE KACHELN (18.09.2026, Fassung A)
   ---------------------------------------------------------------------
   Der Nutzer: Jede Kachel einzeln untereinander werde „eine riesige
   Scrollerei“. Gemessen bei 375 px: Ausbildung 15 Kacheln 2.886 px,
   Berufsbilder 20 Kacheln 3.707 px - jede Kachel 161-189 px hoch, weil
   der Beschreibungstext drei, vier Zeilen fuellte.
   Gewaehlt aus drei Fassungen („definitiv die beste“): Jede Kachel bleibt
   eine eigene Kachel mit Strich, zeigt aber nur den Titel und einen
   Pfeil - Ausbildung jetzt 952 px, Berufsbilder 1.272 px.
   * Der Beschreibungstext ist meist ein automatischer Anriss der Seite.
     Die Suche ueber den Kacheln findet ihn weiter, auch unsichtbar.
   * Datei-Kacheln behalten ihre Zeile „PDF · …“: Bei einer Datei ist die
     Art die wichtigste Angabe.
   * Am PC aendert sich nichts. */
@media (max-width: 640px) {
  .raster > .kachel {
    display: grid; grid-template-columns: minmax(0, 1fr) 1.25rem;
    column-gap: 0.75rem; align-items: center;
    min-height: 3.5rem; padding: 0.8rem 1rem 0.8rem 1.25rem;
  }
  .raster:has(> .kachel) { gap: 0.5rem; }
  .raster > .kachel strong {
    margin: 0; padding-right: 0;
    font-size: 1rem; line-height: 1.35; overflow-wrap: anywhere;
  }
  .raster > .kachel:not(.kachel--datei) span { display: none; }
  .raster > .kachel--datei span { grid-column: 1; font-size: 0.875rem; margin-top: 0.15rem; }
  /* Der Pfeil ist nur Schmuck - Vorleseprogramme lassen ihn aus */
  .raster > .kachel::after {
    content: "›"; content: "›" / "";
    grid-column: 2; grid-row: 1 / span 2;
    font-size: 1.7rem; line-height: 1; text-align: right;
    color: var(--orange-dunkel);
  }
}

/* =====================================================================
   FREMDE WEBSITES BEKOMMEN EINEN KLEINEN PFEIL (24.09.2026)
   ---------------------------------------------------------------------
   Die Datenschutzerklaerung des ABZ sagt: „Derartige Querverweise sind
   im Angebot der Webseite entsprechend als extern zu erkennen. z.B.
   Kennzeichnung als: (Externer Link)." Auf der alten Seite stimmte das
   nur hier und da - von Hand getippt, mal „(Externer Link)", mal
   „(Extern)", meist gar nicht. Sein Wunsch: ein kleiner Pfeil, „am
   besten nicht so auffaellig. Hauptsache, der Datenschutzsatz stimmt
   nachher."

   DAS MACHT DIESE DATEI, NICHT DER MENSCH. Fremd ist jeder Verweis, der
   mit http:// oder https:// beginnt und nicht auf abz-bau-saar.de zeigt.
   Egal, wo er gesetzt wurde - im Schreibfeld, als Kachel, im Fussbereich
   -, der Pfeil steht von selbst dahinter. Niemand muss etwas ankreuzen.
   E-Mail-Adressen und Telefonnummern bekommen keinen: Sie fuehren auf
   keine andere Website.

   KEIN PFEIL AM ZEILENENDE ALLEIN. Zwischen Wort und Pfeil steht ein
   schmales, festes Leerzeichen (U+202F). Die Zeile darf dort nicht
   umbrechen - bricht sie, wandert das letzte Wort mit. Der Pfeil gehoert
   zum Verweis und steht im Textfluss; was danach kommt, rueckt um
   genau seine Breite weiter und liegt nie darunter.

   `\FE0E` sorgt dafuer, dass kein Telefon daraus ein buntes Emoji macht.
   Vorleseprogramme hoeren statt des Pfeils „(externe Website)" - dasselbe
   Wort, das auf Kacheln und unter Bildern sichtbar steht.

   Wo ein anderer Weg besser passt:
     * Bild als Verweis: eine kleine Zeile „↗ Externe Website" darunter -
       ein Zeichen neben einem Bild saehe verloren aus.
     * Netzwerk-Symbole unten (Facebook, YouTube, Instagram): keiner. Das
       Zeichen des Dienstes zeigt schon, wohin es geht.

   KACHEL AM HANDY: PFEIL HINTER DEM TITEL, „›" BLEIBT (24.09.2026, spaet)
   Bis dahin ersetzte der Pfeil am Handy das „›" am rechten Rand - er
   stand dort hoeher als die „›" der anderen Kacheln. Sein Wunsch: der
   Pfeil „direkt hinter das Wort", am Rand „bleiben die normalen Pfeile
   ... so, wie sie sonst auch immer da sind". Jetzt wie am PC: ↗ hinter
   dem Titel, dazu das „›" jeder Kachel, mittig wie ueberall.

   AUF MITTLERER HOEHE DER WOERTER (24.09.2026, spaet)
   Sein Befund: Die Pfeile „kleben momentan ganz unten am unteren Rand".
   Nachgemessen am Bildschirmfoto: Der Pfeil ist kleiner als die Schrift
   (0,8) und sass mit seinem Fuss auf der Grundlinie - seine Mitte lag
   1,4 px unter der Mitte der Buchstaben (Grundlinie bis Oberkante der
   Grossbuchstaben). `vertical-align` hebt ihn um genau diese Strecke.
   Die Unterstreichung eines Verweises bleibt dabei, wo sie ist - der
   Pfeil steht ueber ihr wie die Buchstaben auch. Die Zeile wird dadurch
   nicht hoeher (nachgemessen).
   Unter Bildern geht das nicht: Pfeil und „Externe Website" sind dort
   EIN Text, der sich nicht in Teilen verschieben laesst. Der Pfeil ist
   dort deshalb ein gezeichnetes Bild in derselben Form, das auf der
   Grundlinie steht und seine Hoehe selbst mitbringt. */
a:is([href^="http://"], [href^="https://"]):not([href*="abz-bau-saar.de"], .kachel, .dateiblock, :has(img, svg))::after,
.kachel:is([href^="http://"], [href^="https://"]):not([href*="abz-bau-saar.de"]) strong::after,
.dateiblock:is([href^="http://"], [href^="https://"]):not([href*="abz-bau-saar.de"]) strong::after {
  content: "\202F\2197\FE0E";
  content: "\202F\2197\FE0E" / " (externe Website)";
  font-size: 0.8em;
  font-weight: 400;
  vertical-align: 0.11em;
}
a:is([href^="http://"], [href^="https://"]):not([href*="abz-bau-saar.de"]):has(> img)::after {
  /* Der Pfeil: 8 x 8 px, Strich 1,2 px - Groesse und Strichstaerke des
     Zeichens ↗ in 14 px. Das Bild ist 8,9 px hoch und steht auf der
     Grundlinie; so liegt die Pfeilmitte 4,9 px darueber, auf halber
     Hoehe der Grossbuchstaben. Farbe = --schrift-grau (#5A5F6B). */
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8.9' viewBox='0 0 8 8.9'%3E%3Cpath d='M.6 7.4 7.4.6M2.6.6h4.8v4.8' fill='none' stroke='%235A5F6B' stroke-width='1.2'/%3E%3C/svg%3E") "\00A0 Externe Website";
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8.9' viewBox='0 0 8 8.9'%3E%3Cpath d='M.6 7.4 7.4.6M2.6.6h4.8v4.8' fill='none' stroke='%235A5F6B' stroke-width='1.2'/%3E%3C/svg%3E") "\00A0 Externe Website" / "(externe Website)";
  /* inline-block statt block: Nur so erbt die Zeile nicht die
     Unterstreichung des Verweises. Nach dem Bild steht sie ohnehin in
     einer eigenen Zeile. 0,875 rem = 14 px, die eigene Untergrenze. */
  display: inline-block;
  margin-top: 0.35rem;
  font-size: 0.875rem;
  color: var(--schrift-grau);
}

/* =====================================================================
   Infokasten / Hinweisblock
   ===================================================================== */

/* Der senkrechte Strich links zeigt dasselbe Verhaeltnis wie die
   waagerechten: erst blau, dann orange. */
.infokasten {
  position: relative;
  background: var(--blau-sehrhell);
  border-radius: 0 var(--radius) var(--radius) 0;
  padding: 1.5rem 1.6rem;
  padding-left: calc(1.6rem + 4px);
}
/* DER KASTEN WANDERT MIT (20.09.2026)
   ---------------------------------------------------------------------
   Auf der Startseite stehen links die Termine, rechts der Kasten
   "Anmeldung für das Gästehaus". Bei drei Terminen passt das; bei sieben
   ist die linke Spalte 1.228 px hoch und der Kasten 387 px - darunter
   klaffte eine Luecke von 841 px. Der Nutzer: "Das sieht nicht gut aus."

   Statt den Kasten leer in die Hoehe zu ziehen, bleibt er beim Scrollen
   oben stehen, solange die Terminliste laeuft. Rechts steht damit an
   jeder Stelle etwas - die Luecke entsteht gar nicht erst.

   Nur ab 620 px, denn erst dort stehen die beiden ueberhaupt
   nebeneinander (siehe `.raster--2`); darunter liegt der Kasten unter
   den Terminen und haette nichts zum Mitwandern. `max-height` sorgt
   dafuer, dass auch ein langer Kasten auf einem flachen Fenster
   vollstaendig erreichbar bleibt.

   DER ABSTAND NACH OBEN IST NICHT FREI GEWAEHLT (20.09.2026, zweiter
   Anlauf): Die Kopfleiste mit der Navigation steht selbst fest oben
   (`.kopf`, sticky). Mit 1,5 rem Abstand verschwand die halbe
   Ueberschrift "Anmeldung für das Gästehaus" dahinter - der Nutzer:
   "Die halbe Überschrift hängt oben in dem Balken fest." Deshalb
   dieselbe Rechnung wie fuer Sprungmarken weiter oben in dieser Datei:
   Kopfleiste plus Luft, und in der Bearbeitungsoberflaeche zusaetzlich
   deren eigener Balken (`--balken-hoehe`). */
@media (min-width: 620px) {
  .raster--2 > .infokasten {
    position: sticky;
    top: calc(var(--balken-hoehe, 0px) + 6rem);
    max-height: calc(100vh - var(--balken-hoehe, 0px) - 7.5rem);
    overflow: auto;
  }
}
.infokasten::before {
  content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: 4px;
  background: linear-gradient(180deg, var(--blau) 0 68%, var(--orange) 68%);
}
.infokasten h3 { margin-top: 0; color: var(--blau-dunkel); }
/* Derselbe blau-orange Strich wie ueber den Abschnittsueberschriften -
   aber NUR ueber dem Titel des Kastens (der ersten Ueberschrift darin).
   Vorher galt er fuer jede h3 im Kasten. Wer im Kasten eine "Kleine
   Ueberschrift" schrieb, bekam denselben Strich wie der Kastentitel -
   es sah nach einem zweiten Kasten aus. 31.08.2026. */
.infokasten > h3:first-of-type::before {
  content: ""; display: block;
  width: 56px; height: 4px;
  background: linear-gradient(90deg, var(--blau) 0 38px, var(--orange) 38px);
  border-radius: 2px; margin-bottom: 0.9rem;
}

/*
 * UEBERSCHRIFTEN MITTEN IM KASTEN
 *
 * Ein Infokasten ist schmal. Eine gewoehnliche h2 waere darin bis zu
 * 2,1 rem gross - deutlich groesser als der Kastentitel selbst - und
 * schwarz, waehrend alles andere im Kasten dunkelblau ist. Genau das
 * hat der Nutzer im Gaestehauskasten gesehen.
 *
 * Jetzt gilt im Kasten eine eigene Staffelung:
 *   Grosse Ueberschrift  = neuer Teil des Kastens, mit dem Strich
 *                          darueber, der die Teile voneinander trennt
 *   Kleine Ueberschrift  = Zwischentitel innerhalb eines Teils, ohne
 *                          Strich, nur etwas kraeftiger
 */
.infokasten h2 {
  font-size: clamp(1.2rem, 2.2vw, 1.45rem);
  color: var(--blau-dunkel);
  margin-top: 2.2rem;
}
.infokasten h2::before {
  content: ""; display: block;
  width: 56px; height: 4px;
  background: linear-gradient(90deg, var(--blau) 0 38px, var(--orange) 38px);
  border-radius: 2px; margin-bottom: 0.9rem;
}
.infokasten h3 { font-size: 1.08rem; margin-top: 1.7rem; }
/* Der Kastentitel selbst bleibt, wie er war: gross und ohne Abstand
   nach oben. Er steht direkt unter dem oberen Rand des Kastens. */
.infokasten > h3:first-of-type {
  font-size: clamp(1.2rem, 2.2vw, 1.45rem);
  margin-top: 0;
}
.infokasten :last-child { margin-bottom: 0; }

/* =====================================================================
   Termine auf der Startseite (18.09.2026, Fassung D)
   ---------------------------------------------------------------------
   Vorher standen die Termine als Fliesstext untereinander - auf dem
   Handy 1.053 px, „Text, Text, Text, ziemlich wild“ (der Nutzer). Jetzt
   ist jeder Termin eine leichte Kachel mit dem blau-orangen Strich:

       [Blatt]  Überschrift          ← für wen / worum es geht
       13:00 Uhr     Mehr anzeigen ▾ ← Ort und Text erst beim Aufklappen

   Die Anordnung hat der Nutzer selbst festgelegt; auch dass der Ort erst
   beim Aufklappen erscheint. Gemessen bei 375 px: 551 statt 1.053 px.

   Ohne Skript bleibt alles aufgeklappt und der Knopf verborgen - dann
   fehlt nichts, es ist nur laenger. `script.js` klappt beim Laden zu.
   Am PC gilt dieselbe Darstellung: eine Form fuer beide. */
.termin {
  position: relative; overflow: hidden;
  display: grid; grid-template-columns: 4.75rem minmax(0, 1fr);
  column-gap: 1rem; row-gap: 0.5rem; align-items: center;
  background: #fff;
  border: 1px solid var(--linie); border-radius: var(--radius);
  padding: 1rem 1.1rem 1rem calc(1.1rem + 4px);
  /* Derselbe weiche Uebergang wie bei den Kacheln (`.kachel`, 0,18 s).
     Ohne ihn sprang die Hervorhebung hart um - der Nutzer: "fuehlt sich
     ruppiger an als bei den Kacheln" (20.09.2026). Das Aussehen war
     gleich, nur der Weg dorthin nicht. */
  transition: 0.18s;
}
.termin + .termin { margin-top: 0.75rem; }
.termin::before {
  content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: 4px;
  background: linear-gradient(180deg, var(--blau) 0 68%, var(--orange) 68%);
}
/* Die ganze Kachel laesst sich antippen, sobald das Skript sie
   zugeklappt hat - nicht nur der Knopf. Offen nicht mehr: Zu geht er nur
   mit „Weniger anzeigen" (24.09.2026, spaet). */
.termin.klappbar:not(.offen) { cursor: pointer; }

/* HERVORHEBUNG UNTER DEM MAUSZEIGER - GENAU WIE BEI DEN KACHELN
   (20.09.2026, zweiter Anlauf)
   ---------------------------------------------------------------------
   Der erste Versuch hatte nur Flaeche und Rand orange gefaerbt. Der
   Nutzer: "Die heben sich nicht hervor. Die werden einfach nur orange
   umrandet und hinterlegt. Macht es einfach wie bei den Kacheln."

   Also dasselbe wie `.kachel.kachel-aktiv`, Stueck fuer Stueck:
     * zarte orange Flaeche, kraeftiger oranger Rand,
     * der blau-orange Streifen links wird GANZ orange,
     * die Kachel rueckt 3 px nach rechts,
   dazu "Mehr anzeigen" wie das "Weiterlesen" der Meldungen: aus dem
   schlichten orangen Wort wird ein kraeftig oranges Feld mit schwarzer
   Schrift.

   Gesteuert ueber `termin-aktiv` vom Skript, NICHT ueber :hover - aus
   demselben Grund wie bei Kacheln und Kurstabelle: Beim Scrollen merkt
   der Browser nicht von allein, dass unter dem stehenden Zeiger jetzt
   ein anderer Termin liegt. `:active` gibt dieselbe Rueckmeldung beim
   Antippen auf dem Handy.

   AUFGEKLAPPT BLEIBT ER WEISS (24.09.2026, spaet)
   Sein Befund: Nach „Mehr anzeigen" streift der Finger beim Lesen ueber
   den Text, und jedes Mal wird der Termin orange hinterlegt - „sonst
   kann man das gar nicht lesen". Seine Regel: aufgeklappt keine
   Hinterlegung, erst nach „Weniger anzeigen" wieder. Deshalb `:active`
   nur, solange er zu ist; `termin-aktiv` setzt das Skript fuer einen
   offenen Termin gar nicht erst (script.js, Bedingung der Gruppe).
   Zuerst galt das nur am Handy. Am selben Abend kam dazu, dass ein
   offener Termin nur noch ueber „Weniger anzeigen" zugeht - ein Klick in
   den Text tut nichts mehr. Seitdem gilt es auch am PC: Orange heisst
   auf dieser Website „anklickbar". Den Knopf selbst faerbt am PC dann
   der Mauszeiger direkt darauf (siehe unten). */
.termin.termin-aktiv,
.termin:not(.offen):active {
  background: var(--orange-zart);
  border-color: var(--orange);
  transform: translateX(3px);
}
.termin.termin-aktiv::before,
.termin:not(.offen):active::before { background: var(--orange); }
/* DAS ORANGE FELD LIEGT HINTER DEM WORT, NICHT AUF DEM GANZEN KNOPF
   (20.09.2026, dritter Anlauf)
   ---------------------------------------------------------------------
   Der Knopf ist 48 px hoch - das ist die Tippflaeche fuers Handy und
   bleibt so. Faerbt man IHN ein, wird daraus ein 48 px hoher Klotz. Der
   Nutzer: "etwas zu hoch und ein bisschen zu dick ... Guck dir an, wie du
   es bei den Meldungen gemacht hast. Da passt sich der orangene Kasten
   viel besser an die Form des Wortes an."

   Also wie bei `.karte__mehr`: ein Feld, das nur das Wort umschliesst.
   Es liegt als eigene Flaeche HINTER dem Text (`::before`), damit der
   Knopf seine 48 px behaelt. `z-index: 0` am Knopf ist noetig, damit das
   `-1` der Flaeche nur bis hinter den Text reicht und nicht hinter die
   ganze Kachel rutscht - dort waere sie unsichtbar.

   Kein Wechsel von `padding` wie bei den Karten: Der Knopf steht rechts
   buendig, er wuerde beim Faerben springen. Die Flaeche ist von Anfang an
   da und nur durchsichtig - deshalb laeuft der Farbwechsel weich. */
.termin__mehr { position: relative; z-index: 0; }
.termin__mehr::before {
  content: "";
  position: absolute; z-index: -1;
  top: 50%; left: -0.7rem; right: -0.7rem;
  /* 2,45 em = 37 px bei 0,95 rem Schrift - auf den Punkt die Hoehe des
     Feldes hinter "Weiterlesen" bei den Meldungen. Seitlich dieselben
     0,7 rem ueber das Wort hinaus. */
  height: 2.45em;
  transform: translateY(-50%);
  background: transparent;
  border-radius: 6px;
  transition: background-color 0.18s ease-out;
}
/* „MEHR ANZEIGEN" WIRD NUR NOCH AM PC ORANGE (24.09.2026)
   ---------------------------------------------------------------------
   Erster Anlauf am selben Tag: am Handy nur beim echten Druecken. Sein
   Urteil danach: „Auf dem Handy ist der glaube ich nicht notwendig ...
   der blitzt wirklich nur fuer eine halbe Sekunde auf, das lohnt sich
   nicht. Bitte auf dem Handy wegmachen, auf dem PC bleibt er. Gleiches
   gilt beim ‚Mehr anzeigen' bei der Anmeldung vom Gaestehaus."
   Am Handy antwortet der Knopf also nur noch damit, dass der Text
   auf- oder zuklappt - das ist Rueckmeldung genug. Die Kachel darum
   herum wird beim Beruehren weiter kurz orange (seine Regel 1).
   Weg ist dabei auch `:focus-within` von frueher: Es liess den Knopf auf
   Android nach dem Antippen orange STEHEN (Chrome gibt einem angetippten
   Knopf den Fokus). Fuer die Tastatur bleibt `:focus-visible` - das
   zeigt der Browser nur, wenn wirklich mit Tasten bedient wird. */
@media (hover: hover) {
  .termin.termin-aktiv .termin__mehr::before,
  .termin.offen .termin__mehr:hover::before { background: var(--orange); }
  .termin.termin-aktiv .termin__mehr,
  .termin.offen .termin__mehr:hover { color: var(--schrift); }
}
.termin__mehr:focus-visible::before { background: var(--orange); }
.termin__mehr:focus-visible { color: var(--schrift); }

.termin .kalenderblatt { grid-column: 1; grid-row: 1; }
.termin__titel {
  grid-column: 2; grid-row: 1; margin: 0;
  font-size: 1.1rem; line-height: 1.35; color: var(--blau-dunkel);
  overflow-wrap: anywhere;
}
/* Ohne Datum kein Blatt - dann nimmt die Ueberschrift die ganze Breite */
.termin--ohne-datum .termin__titel { grid-column: 1 / -1; }
.termin__zeit {
  grid-column: 1; grid-row: 2; text-align: center;
  font-weight: 700; font-size: 0.95rem; white-space: nowrap;
}
/* „Mehr anzeigen“ - bei den Terminen und am Gaestehaus-Kasten dieselbe
   Form (`.aufklapper`), damit man es beim zweiten Mal wiedererkennt. */
.termin__mehr, .aufklapper {
  display: inline-flex; align-items: center;
  min-height: 48px; padding: 0;
  border: 0; background: none; cursor: pointer;
  font: inherit; font-size: 0.95rem; font-weight: 600;
  color: var(--orange-dunkel);
}
.termin__mehr {
  grid-column: 2; grid-row: 2; justify-self: end;
  /* Der Farbwechsel des Wortes laeuft weich mit; die orange Flaeche
     dahinter bringt ihren eigenen Uebergang mit (siehe `::before`). */
  transition: color 0.18s ease-out;
  /* 48 px Tippflaeche; die Raender nach aussen gleichen die Hoehe aus,
     damit die Kachel nicht hoeher wird als die Schrift. */
  margin: -0.4rem 0 -0.6rem;
}
.termin__mehr[hidden], .aufklapper[hidden] { display: none; }
.termin__mehr::after, .aufklapper::after { content: "▾"; content: "▾" / ""; margin-left: 0.35rem; }
.termin.offen .termin__mehr::after,
.aufklapper[aria-expanded="true"]::after { content: "▴"; content: "▴" / ""; }
.termin__mehrtext { grid-column: 1 / -1; }
.termin__mehrtext[hidden] { display: none; }
.termin__ort  { margin: 0.3rem 0 0.35rem; font-size: 0.97rem; }
.termin__text { margin: 0; font-size: 0.97rem; color: var(--schrift-grau); white-space: pre-line; }

/* HINWEISE OHNE DATUM (18.09.2026)
   Stehen ganz oben und zeigen alles sofort - sie sollen als Erstes
   gelesen werden. Der Text ist deshalb schwarz statt grau: Er ist hier
   die Hauptsache, nicht die Ergaenzung zu einer Ueberschrift. */
.termin--hinweis .termin__text { color: var(--schrift); }
.termin--hinweis .termin__titel + .termin__mehrtext .termin__ort:first-child,
.termin--hinweis .termin__titel + .termin__mehrtext .termin__text:first-child { margin-top: 0.1rem; }
.termin--ohne-titel .termin__mehrtext > :first-child { margin-top: 0; }
/* Lange Hinweise: nach vier Zeilen „…“ und „Mehr anzeigen“ rechts
   darunter, wie bei den Terminen. Ob gekuerzt wird, misst `script.js`. */
.termin--hinweis .termin__mehr { grid-column: 1 / -1; grid-row: auto; margin: -0.5rem 0 -0.6rem; }
.termin--hinweis.gekuerzt .termin__text {
  display: -webkit-box; -webkit-box-orient: vertical;
  -webkit-line-clamp: 4; line-clamp: 4;
  overflow: hidden;
}

/* GAESTEHAUS-KASTEN AUF DEM HANDY (18.09.2026)
   Zugeklappt zeigt er nur seine Ueberschrift und „Mehr anzeigen“. Auf
   dem hellblauen Grund ist der Knopf blau statt orange: Orange erreicht
   dort nur 4,3 : 1, Blau 8 : 1. */
.infokasten .aufklapper { color: var(--blau); margin: 0.25rem 0 -0.6rem; }
.infokasten__inhalt[hidden] { display: none; }
.infokasten--klappbar.zu h3 { margin-bottom: 0; }
.infokasten--klappbar.zu { cursor: pointer; }

/* Das Kalenderblatt. Eine Form fuer jedes Datum - erst bei den
   Terminen, spaeter vielleicht auch in der Seminarliste.
   Heisst `kalenderblatt`, NICHT `blatt`: `.blatt` ist seit jeher der
   Textbereich von 891 Seiten. Am 18.09.2026 hiess es einige Stunden so -
   dann bekam der Textbereich auf Nachwuchs, Download und allen
   Unterseiten Rahmen, Rundung und mittige Schrift des Blatts. */
.kalenderblatt {
  display: block; text-align: center; line-height: 1.1;
  background: #fff; border: 1px solid var(--linie); border-radius: 8px;
  overflow: hidden;
}
.kalenderblatt__monat {
  display: block; padding: 0.25rem 0;
  background: var(--blau); color: #fff;
  font-size: 0.875rem; font-weight: 700; letter-spacing: 0.05em; text-transform: uppercase;
}
.kalenderblatt__tag {
  display: block; padding: 0.3rem 0 0;
  font-size: 1.65rem; font-weight: 800; color: var(--blau-dunkel);
}
.kalenderblatt__wochentag {
  display: block; padding: 0 0 0.35rem;
  font-size: 0.875rem; color: var(--schrift-grau);
}

/* Sind alle Termine vorbei, steht der Gaestehaus-Kasten allein - dann
   nicht auf halber Breite am linken Rand, sondern lesbar breit. */
.infokasten--allein { max-width: 46rem; }

/* =====================================================================
   Inhaltsbereich von Unterseiten und News-Beitraegen
   (Formatierung der uebernommenen Original-Texte)
   ===================================================================== */

.inhalt { max-width: 74ch; }
.inhalt--breit { max-width: none; }
.inhalt img { border-radius: var(--radius); margin: 1.5rem 0; }
.inhalt figure { margin: 1.8rem 0; }
.inhalt figcaption { font-size: 0.9rem; color: var(--schrift-grau); margin-top: 0.5rem; }
.inhalt h2 { margin-top: 2.2rem; }
.inhalt h3 { margin-top: 1.8rem; }
.inhalt a { text-decoration: underline; text-underline-offset: 2px; }
/* UNTERSTRICHENES SIEHT ANDERS AUS ALS EIN VERWEIS (03.10.2026 abends,
   Punkt 30). Befund vom Geraetecheck: Ein Verweis ist blau und
   unterstrichen, Unterstrichenes schwarz und unterstrichen - es unterschied
   nur die Farbe (Blau gegen Schwarz 1,9 : 1, das sieht nicht jeder), und am
   Handy tippt man darauf. Unterstrichen bleibt es (seine Entscheidung vom
   03.10.2026). Deshalb unterscheidet jetzt der STRICH: kraeftig und ein
   Stueck tiefer, wie mit dem Lineal gezogen. Der Verweis behaelt seinen
   feinen Strich dicht an der Schrift - auch, wenn in ihm etwas
   unterstrichen ist. */
/* Mit der Schrift mitwachsend (03.10.2026 nachts, Pruef-Helfer Befund 4):
   Feste 2 px waren in einer grossen Ueberschrift nicht kraeftiger als der
   gewoehnliche Strich - im Lager stehen viele <h2><u>...</u></h2>. Im
   Fliesstext bleibt es bei 2 px und 4 px. */
.blatt u, .inhalt u {
  text-decoration-thickness: max(2px, 0.11em);
  text-underline-offset: max(4px, 0.22em);
}
.blatt a u, .inhalt a u { text-decoration-thickness: auto; text-underline-offset: 2px; }
/* EIN VERWEIS IN UNTERSTRICHENEM TEXT HAT EINEN STRICH, NICHT ZWEI
   (Punkt 33, behoben am 04.10.2026 - sein Auftrag: "die offenen Befunde aus
   der Vorrunde beheben"; am 03.10.2026 hiess es noch "ist egal"). Bis dahin
   lagen dort der feine Strich des Verweises und darunter der kraeftige des
   Unterstrichenen. Wegnehmen laesst sich der kraeftige unter dem Verweis
   nicht - er gehoert dem <u> und laeuft unter allem durch, was darin steht.
   Deshalb zieht der Verweis seinen eigenen Strich genau AUF den kraeftigen:
   gleiche Dicke, gleiche Tiefe. Zu sehen ist ein Strich, unter dem Verweis
   in dessen Blau (auf einer Probeseite angesehen). */
.blatt u a, .inhalt u a {
  text-decoration-thickness: max(2px, 0.11em);
  text-underline-offset: max(4px, 0.22em);
}

/* SCHRIFTFARBEN (03.10.2026 nachts) - siehe die Werte ganz oben. Gesetzt
   werden sie in der Schreibleiste ("Schriftfarbe"); im Inhalt steht
   <span class="farbe-rot">. In der blauen Kopfzeile einer Tabelle bleibt
   die Schrift weiss - eine Farbe waere dort nicht zu lesen. */
.farbe-rot   { color: var(--farbe-rot); }
.farbe-gruen { color: var(--farbe-gruen); }
.farbe-gelb  { color: var(--farbe-gelb); }
.farbe-blau  { color: var(--farbe-blau); }
.inhalt table:not(.eingefuegt) th [class^="farbe-"],
.tabelle th [class^="farbe-"] { color: inherit; }

/* =====================================================================
   Das "Blatt" - eine einheitliche Form fuer alle uebernommenen Inhalte
   ---------------------------------------------------------------------
   Hinter den Kacheln liegen ueber zwanzig Jahre gewachsene Seiten: die
   eine faengt mit einer grossen Ueberschrift an, die naechste mit einer
   kleinen; Bilder haben feste Breiten aus der Zeit fester Bildschirme;
   auf ein PDF wird einmal ueber ein Symbolbild und einmal ueber einen
   Satz verwiesen. Inhaltlich ist alles richtig - es sieht nur auf jeder
   Seite anders aus.

   Diese Regeln geben allen diesen Seiten dieselbe Form. Die Reihenfolge
   von Text und Bildern bleibt dabei unangetastet: Was auf der alten
   Seite oben stand, steht auch hier oben. Vereinheitlicht wird nur die
   Darstellung - Ueberschriftgroessen, Bildbreiten, Abstaende, Kaesten.
   ===================================================================== */

.blatt { max-width: 74ch; }
.blatt.inhalt--breit { max-width: none; }

/* Ueberschriften: erste Stufe mit blauem Strich davor, zweite Stufe
   schlicht. Auf jeder Seite gleich - egal, womit sie im alten Auftritt
   angefangen hat (das Bauwerkzeug stuft die Ueberschriften vorher um). */
.blatt h2 {
  font-size: clamp(1.3rem, 2.4vw, 1.6rem);
  margin-top: 2.6rem;
  padding-left: 0.9rem;
  border-left: 4px solid var(--blau);
}
.blatt h2:first-child { margin-top: 0; }
.blatt h3 { font-size: 1.15rem; margin-top: 2rem; color: var(--blau-dunkel); }
.blatt h4 { font-size: 1.03rem; margin-top: 1.6rem; color: var(--schrift); }

/* AUFZÄHLUNG IN EINER ÜBERSCHRIFT (04.10.2026)
   ---------------------------------------------------------------------
   Im Schreibfeld können „Überschrift“ und „Aufzählung“ zugleich an sein;
   der Punkt ist dann so groß wie die Überschrift (<h2><ul><li>…). Darunter
   gilt der Abstand der Überschrift - ohne diese Regel käme der einer
   Aufzählung dazu, und der Abstand wäre doppelt so groß wie unter einer
   Überschrift ohne Punkt. */
h2 > ul, h3 > ul, h4 > ul { margin-bottom: 0; }
h2 > ul > li:last-child, h3 > ul > li:last-child, h4 > ul > li:last-child { margin-bottom: 0; }

/* MITTIG ODER RECHTS: DER BALKEN WANDERT UNTER DIE SCHRIFT (02.10.2026)
   ---------------------------------------------------------------------
   Seine Wahl 1C auf der Vergleichsseite („Mittig, Balken unter der
   Schrift“). Links bliebe der Balken weit weg von einer mittigen Schrift
   stehen - es saehe aus, als sei etwas verrutscht. Deshalb steht er dann
   als kurzer Strich unter der Schrift, mittig bzw. rechts wie sie.
   Die Ausrichtung steht als `style="text-align: …"` am Element - in genau
   dieser Schreibweise schreibt sie das Speichern (stil_saeubern() in
   kern/aendern.php) und der Browser im Schreibfeld. */
.blatt h2[style*="text-align: center"],
.blatt h2[style*="text-align: right"] {
  border-left: 0;
  padding-left: 0;
}
.blatt h2[style*="text-align: center"]::after,
.blatt h2[style*="text-align: right"]::after {
  content: "";
  display: block;
  width: 3rem;
  height: 4px;
  margin-top: 0.45rem;
  border-radius: 2px;
  background: var(--blau);
}
.blatt h2[style*="text-align: center"]::after { margin-left: auto; margin-right: auto; }
.blatt h2[style*="text-align: right"]::after  { margin-left: auto; }

/* EINGEFUEGTES BLEIBT, WIE ES KAM (02.10.2026, seine Entscheidung 2B)
   ---------------------------------------------------------------------
   Was aus Word, Excel oder einer Website eingefuegt wurde, behaelt seine
   Gestaltung (Schrift, Groesse, Farbe stehen als `style` daran). Das
   Schreibfeld kennzeichnet eingefuegte Ueberschriften und Tabellen mit
   `eingefuegt` - hier verlieren sie die Gestaltung der Website, die sie
   sonst ueberstimmen wuerde: den blauen Balken, die blaue Kopfzeile, die
   grauen Streifen, die feinen Linien. `all: revert` setzt alles zurueck,
   was nicht am Element selbst steht; was dort steht, gilt weiter.
   Eine eingefuegte Tabelle darf auf dem Handy zur Seite rollen, statt die
   ganze Seite breiter zu machen (Word-Tabellen haben oft eine feste
   Breite). */
.blatt :is(h1, h2, h3, h4, h5, h6).eingefuegt { border-left: 0; padding-left: 0; }
/* Eine eingefuegte feste Breite darf die Seite am Handy nicht breiter
   machen als den Bildschirm (Geraetecheck 02.10.2026): hoechstens so breit
   wie der Platz. */
.blatt [style*="width"] { max-width: 100%; }
.blatt h2.eingefuegt::after { content: none; }
/* `.inhalt.blatt` doppelt, damit es die Streifen-Regel weiter unten
   (`.inhalt thead + tbody tr:nth-child(even)`) sicher ueberstimmt. */
.inhalt.blatt table.eingefuegt,
.inhalt.blatt table.eingefuegt :is(caption, colgroup, col, thead, tbody, tr, th, td) { all: revert; }
/* `border-collapse: collapse`: Word und Excel lassen die Linien benachbarter
   Zellen immer zusammenfallen. Der Browser verliert diese Angabe beim
   Einfuegen manchmal (nachgestellt in Chrome) - dann staenden ueberall
   doppelte Linien. Steht sie an der Tabelle selbst, gilt die. */
.inhalt.blatt table.eingefuegt {
  display: block; max-width: 100%; overflow-x: auto; border-collapse: collapse;
}

/* Bilder: Rundung und Abstaende. Die festen Groessenangaben aus dem alten
   Auftritt entfernt das Bauwerkzeug.

   KEIN BILD WIRD GROESSER GEZOGEN, ALS ES IST (15.10.2026, seine
   Entscheidung an der Vergleichsseite: „wir nehmen B … und bleiben bei dem
   Grundsatz, dass kein Bild größer gezogen wird, als es ist“). Bis dahin zog
   `width: 100%` jedes Bild auf die volle Breite - ein Bild von 111 px auf
   323. Jetzt hat jedes Bild seine echte Breite (die schreibt das Bauen als
   width/height an), hoechstens die Spalte.

   SCHMALE BILDER STEHEN LINKS (15.10.2026, sein Wort: „Links – schmale
   Bilder stehen am linken Rand, auch die hohen.“). Der Bild-Baustein ist so
   breit wie sein Bild (`fit-content`) - so steht die Unterschrift unter dem
   Bild und im Schreibfeld ✎ ⇔ ✕ an seiner Ecke. Mittig oder rechts steht
   ein Bild nur, wenn es im Fenster „Wie groß soll das Bild sein?“ so
   gewaehlt ist (weiter unten). `:where()` haelt die Regel schwach, damit
   diese Wahl und die Bilderreihen sie ueberstimmen. */
.blatt .bild { margin: 1.8rem 0; }
.blatt .bild:where(:not(.galerie *)) { width: fit-content; max-width: min(100%, 620px); }
.blatt .bild img { margin: 0; max-width: 100%; }
/* Eine lange Unterschrift macht das Bild nicht breiter - sie bricht um. */
.blatt .bild:where(:not(.galerie *)) > figcaption { contain: inline-size; }
.blatt img { border-radius: var(--radius); }

/*
 * DAS KLEINE ZEICHEN "FUEHRT AUF EINE FREMDE WEBSITE"
 *
 * Es kam aus dem alten Auftritt als eigenes 20x20-Bild MITTEN im
 * Verweis. Damit fiel es unter die Regeln fuer Inhaltsbilder - volle
 * Breite bis 620 Bildpunkte, 1,5 rem Abstand oben und unten, abgerundete
 * Ecken. Auf "Nachwuchs" stand es dadurch in einer eigenen Zeile unter
 * dem Verweis, mit einer Handbreit Luft dazwischen: Es sah aus, als
 * haenge dort ein kaputtes Bild.
 *
 * Auf 15 Seiten steht dasselbe Zeichen. Deshalb eine Regel statt einer
 * Aenderung an 15 Stellen im Inhaltslager - das Zeichen SOLL ja da sein,
 * es stand nur falsch.
 */
.blatt a img[src$="externer_link.jpg"],
.inhalt a img[src$="externer_link.jpg"] {
  display: inline-block;
  /* Das Zeichen ist quadratisch (20x20). Breite und Hoehe fest
     angeben, damit die Zeile nicht springt, wenn das Bild - es traegt
     `loading="lazy"` - erst spaeter nachlaedt. */
  width: 0.9em;
  height: 0.9em;
  max-width: none;
  margin: 0 0 0 0.35em;
  vertical-align: -0.08em;
  border-radius: 0;
}

.blatt ul, .blatt ol { padding-left: 1.25em; }
.blatt li { margin-bottom: 0.4em; }
.blatt > :first-child { margin-top: 0; }

/*
 * WARUM HIER KEINE „THEMENLISTE" MEHR STEHT (31.08.2026, spät)
 * ------------------------------------------------------------
 * Am 31.08.2026 standen die sieben Stichworte auf „Nachwuchs" kurz als
 * ruhige Marken nebeneinander (`<ul class="themenliste">`). Das sah gut
 * aus und war trotzdem falsch:
 *
 * `kern/aendern.php` laesst an `p` und `ul` KEIN einziges Attribut zu -
 * mit Absicht, sonst waeren nach dem dritten Einfuegen aus Word die
 * Joomla-Reste wieder da, die wir gerade herausgeputzt haben. Die Klasse
 * haette also die erste Bearbeitung dieses Absatzes nicht ueberlebt: Der
 * Nutzer haette einen Buchstaben geaendert, und die Marken waeren
 * kommentarlos wieder eine gewoehnliche Aufzaehlung geworden - ohne dass
 * er haette wissen koennen, warum.
 *
 * Eine Gestaltung, die beim Bearbeiten verschwindet, ist schlimmer als
 * gar keine. Die sieben Stichworte stehen deshalb jetzt als schlichte
 * Aufzaehlung da. Das eigentliche Problem - sieben KAPITELUEBERSCHRIFTEN
 * untereinander - ist damit trotzdem behoben.
 *
 * Wer die Marken wirklich will, braucht dafuer einen eigenen Baustein
 * („Stichwortliste"), so wie es Bildreihe, Tabelle und Infokasten
 * werden sollen. Dann steht die Form im Baukasten und nicht im Text.
 */

/* Datei zum Herunterladen - ueberall derselbe Kasten, egal ob im alten
   Auftritt ein Symbolbild oder ein Textlink stand.

   EIN KLEINER KASTEN IN EINER ZEILE (08.10.2026, Philipps Wahl B)
   ---------------------------------------------------------------------
   Vorher war der Kasten so breit wie der Text und 123 Bildpunkte hoch -
   drei Zeilen fuer „PDF“, den Namen und „Herunterladen“. Jetzt steht
   alles in einer Zeile, und der Kasten ist nur so breit wie sein Inhalt:
   vorn klein die Art, dann der Name. 48 Bildpunkte hoch, damit man ihn am
   Handy trifft. Das Wort „Herunterladen“ faellt weg - der Kasten sagt es
   durch seine Form, und beim Video auf einer fremden Website stimmte es
   ohnehin nicht. Ein langer Name bricht im Kasten um, statt die Seite
   breiter zu machen. */
.dateiblock {
  display: inline-flex; align-items: center; gap: 0.65rem;
  position: relative;
  max-width: 100%; min-height: 48px;
  margin: 0.25rem 0;
  padding: 0.5rem 0.95rem;
  vertical-align: middle;
  background: #fff;
  border: 1px solid var(--linie);
  border-left: 4px solid var(--blau);
  border-radius: 0 var(--radius) var(--radius) 0;
  color: var(--schrift);
  text-decoration: none;
  transition: background-color 0.18s ease-out, border-color 0.18s ease-out;
}
.dateiblock.zeiger-aktiv, .dateiblock:active {
  background: var(--orange-zart);
  border-color: var(--orange);
  color: var(--schrift);
  text-decoration: none;
}
/* OHNE STRICH, AUCH MITTEN IM TEXT (10.10.2026): `.inhalt a` unterstreicht
   jeden Verweis und wiegt schwerer als `.dateiblock` allein - Name und Größe
   standen im Kasten unterstrichen da, obwohl oben `none` steht. Der Kasten
   ist als Ganzes zu erkennen; ein Strich darin sagt nichts dazu. Zwei
   Klassen statt einer, damit die Reihenfolge der Regeln keine Rolle spielt. */
.inhalt a.dateiblock, .blatt a.dateiblock { text-decoration: none; }
/* `break-word`, nicht `anywhere`: Mit `anywhere` duerfte der Browser den
   Kasten in einer engen Tabellenspalte auf einen Buchstaben Breite
   zusammenschieben. So bricht nur ein Wort um, das wirklich nicht passt. */
.dateiblock strong { min-width: 0; font-size: 1.05rem; font-weight: 600; overflow-wrap: break-word; }
.dateiblock__art {
  flex: none;
  font-size: 0.72rem; font-weight: 700; letter-spacing: 0.09em;
  text-transform: uppercase; color: var(--blau);
}
/* DIE GRÖSSE HINTER DER BESCHRIFTUNG (10.10.2026, Runde „Dateien im Text“):
   klein und grau - sie sagt, worauf man sich beim Öffnen einlässt, soll
   aber nicht mitreden. Die neun übernommenen Kästen tragen an dieser Stelle
   noch das Wort „Herunterladen“; das bleibt ausgeblendet wie bisher. */
.dateiblock__groesse {
  flex: none;
  /* 14 Bildpunkte - darunter liest es am Handy niemand mehr (Gerätecheck). */
  font-size: 0.875rem; color: var(--schrift-grau); white-space: nowrap;
}
.dateiblock > span:last-child:not(.dateiblock__groesse) { display: none; }
.dateiblock.zeiger-aktiv .dateiblock__art { color: var(--orange-dunkel); }

/* Kleine Abweichung fuer die Meldungen unter "Aktuelles":
   dieselbe Struktur, aber ein oranger Akzent statt eines blauen und
   Bilder bis zur vollen Breite (nicht nur 620 px). So liest sich eine
   Meldung ein wenig lebendiger als eine Infoseite - ohne aus der Reihe zu
   fallen. Aufgezogen wird auch hier nichts (15.10.2026). */
.blatt--meldung h2 { border-left-color: var(--orange); }
.blatt--meldung h3 { color: var(--schrift); }
.blatt--meldung .bild:where(:not(.galerie *)) { max-width: 100%; }
.blatt--meldung figcaption { font-style: italic; }

/* =====================================================================
   Eingebettete Videos
   ---------------------------------------------------------------------
   Aus Datenschutzgruenden wird ein Video erst nach einem Klick geladen.
   Vorher steht hier nur eine Flaeche - es geht keine Anfrage an Google.
   ===================================================================== */
.video {
  position: relative;
  width: 100%;
  aspect-ratio: 16 / 9;
  margin: 1.8rem 0;
  border-radius: var(--radius);
  overflow: hidden;
  background: linear-gradient(135deg, var(--blau-dunkel), var(--blau));
  display: flex; flex-direction: column;
  align-items: center; justify-content: center; gap: 0.9rem;
  padding: 1.5rem;
  text-align: center;
}
.video__start {
  display: inline-flex; align-items: center; gap: 0.7rem;
  font: inherit; font-weight: 600; font-size: 1rem;
  color: var(--schrift);
  background: #fff;
  border: 2px solid #fff; border-radius: 8px;
  padding: 0.7rem 1.3rem;
  cursor: pointer;
  transition: background-color 0.2s ease-out, border-color 0.2s ease-out;
}
.video__start.zeiger-aktiv { background: var(--orange-zart); border-color: var(--orange); }
.video__start:active { background: var(--orange); border-color: var(--orange); }
.video__symbol {
  width: 0; height: 0; flex: none;
  border-top: 8px solid transparent;
  border-bottom: 8px solid transparent;
  border-left: 13px solid var(--blau);
}
.video__hinweis {
  margin: 0; max-width: 42ch;
  font-size: 0.85rem; line-height: 1.5;
  color: rgba(255, 255, 255, 0.88);
}
/* Sobald das Video laeuft, fuellt es die ganze Flaeche. */
.video--laeuft { padding: 0; background: #000; }
.video iframe { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; }

/* Bilderstrecken: mehrere Fotos hintereinander werden zu einem Raster */
.galerie {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 0.5rem;
  margin: 1.8rem 0;
}
/* ZWEI BILDER NEBENEINANDER AUF DEM HANDY (20.09.2026, Frage 29)
   ---------------------------------------------------------------------
   Die 558 Galerien aus dem Umzug standen auf dem Handy untereinander -
   ein Bild je Zeile. Eine Meldung mit 14 Bildern war damit 3.684 px
   lang, die groesste Galerie hat 225 Bilder.

   Zwei nebeneinander, nicht drei: Gemessen auf einem 320-px-Handy ist
   die Flaeche 280 px breit. Bei zwei bleiben 136 px je Bild (Personen
   und Maschinen erkennbar), bei drei nur 88 px - etwa eine
   Daumenbreite. Seine eigene Befuerchtung: „Wenn man sie nur noch
   erkennen kann, indem man draufdrueckt, ist das Quatsch."
   Auf uebliche 390-430 px breiten Handys werden es 175-195 px.

   Ab 640 px gilt wieder die alte Regel: so viele, wie bei 190 px
   Mindestbreite hineinpassen. Am PC aendert sich also nichts. */
@media (min-width: 640px) {
  .galerie {
    grid-template-columns: repeat(auto-fill, minmax(190px, 1fr));
    gap: 0.8rem;
  }
}
.galerie img {
  margin: 0;
  width: 100%;
  aspect-ratio: 4 / 3;
  object-fit: cover;
  border-radius: 8px;
  background: var(--flaeche-grau);
}

/* WIE VIELE BILDER NEBENEINANDER (10.09.2026)
   ---------------------------------------------------------------------
   Ohne Zusatz bleibt es bei der alten Regel: so viele, wie bei 190 px
   Mindestbreite hineinpassen. Genau so stehen die 521 Bildreihen da, die
   aus dem Umzug stammen - an denen aendert sich nichts.

   Wer beim Anlegen eine Zahl waehlt, bekommt sie ab 640 px Breite. AUF
   DEM HANDY GILT SIE NICHT: Fuenf Bilder nebeneinander waeren dort 55 px
   breit - Briefmarken. Unter 640 px sind es immer zwei, ausser bei
   "sehr klein", da sind es drei. */
.galerie--2, .galerie--3, .galerie--4, .galerie--5, .galerie--6 {
  grid-template-columns: repeat(2, 1fr);
  /* Der Abstand steht hier ausdruecklich noch einmal: Die alten
     Galerien aus dem Umzug ruecken auf dem Handy auf 0,5 rem zusammen
     (mehr Platz fuers Bild), die selbst angelegten Bilderreihen behalten
     ihre 0,8 rem - so, wie sie abgenommen wurden. */
  gap: 0.8rem;
}
.galerie--6 { grid-template-columns: repeat(3, 1fr); gap: 0.5rem; }
@media (min-width: 640px) {
  .galerie--2 { grid-template-columns: repeat(2, 1fr); }
  .galerie--3 { grid-template-columns: repeat(3, 1fr); }
  .galerie--4 { grid-template-columns: repeat(4, 1fr); }
  .galerie--5 { grid-template-columns: repeat(5, 1fr); gap: 0.6rem; }
  .galerie--6 { grid-template-columns: repeat(6, 1fr); gap: 0.5rem; }
}

/* WIE GROSS EIN EINZELNES BILD IM TEXT ERSCHEINT (10.09.2026)
   ---------------------------------------------------------------------
   Ohne Zusatz steht es in seiner echten Groesse, hoechstens so breit wie
   das Blatt, am linken Rand (seit 15.10.2026, siehe „KEIN BILD WIRD
   GROESSER GEZOGEN“ oben; vorher immer volle Breite).

   Die drei Groessen sind absichtlich benannt und nicht frei einstellbar:
   Eine Breite in Bildpunkten stimmt auf einem Bildschirm und auf keinem
   anderen. `max-width` heisst: hoechstens so breit - auf dem Handy wird
   das Bild trotzdem nur so breit wie der Platz. */
.blatt .bild--klein  { max-width: 20rem; }
.blatt .bild--mittel { max-width: 32rem; }
.blatt .bild--klein, .blatt .bild--mittel { margin-left: auto; margin-right: auto; }
.blatt .bild--links  { margin-left: 0; margin-right: auto; }
.blatt .bild--rechts { margin-left: auto; margin-right: 0; }

/* HOHE BILDER IM TEXT (15.10.2026)
   ---------------------------------------------------------------------
   Sein Hinweis: „Quer geht es gerade noch so, aber Hochkant ist auf jeden
   Fall viel zu groß, vor allem viel zu lang nach unten.“ Ein Hochkant-Foto
   in voller Breite war 827 px hoch, in einer Meldung noch mehr.

   Jetzt ist kein Bild im Text hoeher als ein Querbild 4 : 3 in voller
   Breite - 465 px. Ein hoeheres wird dafuer schmaler; es steht links wie
   jedes schmale Bild (15.10.2026 abends, sein Wort - vorher mittig).
   Querbilder bleiben, wie sie sind. In einer Bilderreihe gilt das nicht:
   Dort hat jedes Bild ohnehin 4 : 3.

   Das Seitenverhaeltnis schreibt das Bauen an ein Bild, das hoeher als
   4 : 3 UND selbst hoeher als 465 px ist (bildmasse_einsetzen in
   verwaltung/baukasten/lager.php), im Schreibfeld das Skript
   (hoheBilderMessen in bearbeiten.js). Deshalb macht die Breite unten ein
   Bild nie groesser, als es ist: Wer niedriger ist als 465, bekommt die
   Angabe gar nicht. Gilt fuer jedes Bild im Text - im Bild-Baustein, mit
   Verweis darum und mitten im Absatz (dort waren am 15.10.2026 noch 96
   Bilder bis 1.600 px hoch).

   Breite statt Hoehe: Waere die Hoehe fest, verzoege `max-width` das Bild
   auf einem schmalen Handy. So rechnet der Browser die Hoehe aus der
   Breite, wie bei jedem anderen Bild. Eine feste Breite (keine Obergrenze
   mit Prozent) braucht es auch, damit der Bild-Baustein darum genau so
   breit wird wie das Bild. */
.blatt { --bild-hoechsthoehe: 465px; }
.blatt img[style*="--seitenverhaeltnis"]:not(.galerie *) {
  width: calc(var(--bild-hoechsthoehe) * var(--seitenverhaeltnis));
  max-width: 100%;
}

/* EIN VIDEO IM TEXT (16.10.2026)
   ---------------------------------------------------------------------
   Gebaut von videofigur() in verwaltung/baukasten/hilfen.php. Es steht
   still, bis jemand ▶ antippt, dann läuft es mit der Leiste des Browsers.
   Dieselben Maße wie ein Bild im Text: quer höchstens 620 px breit,
   hochkant nie höher als ein Querbild in voller Breite (465 px, siehe
   oben) - ein Hochkant-Video wird dafür schmaler und steht links. Die
   Form (quer 16 : 9, hochkant 3 : 4 wie beim Zuschneiden in
   videoschnitt.js) hält den Platz frei, bevor das Video geladen ist -
   ohne sie zeigte der Browser erst einen Kasten von 300 × 150. Die Größe
   („Mittel“, „Klein“ …) kommt aus denselben Klassen wie bei Bildern
   (`.bild--mittel` oben). `videodatei`, weil `video` schon der Kasten der
   alten YouTube-Videos heißt. `:where()` hält die Regel schwach, damit
   die Größen oben sie überstimmen (wie beim Bild-Baustein). */
.blatt :where(.videodatei) { margin: 1.8rem 0; max-width: min(100%, 620px); }
.videodatei video {
  display: block;
  width: 100%; height: auto;
  aspect-ratio: 16 / 9;
  background: #000;
  border-radius: var(--radius);
  /* Safari rundet ein Video mit border-radius allein nicht ab - es zeigt
     spitze Ecken, in der Verwaltung wie auf der Website (sein Befund vom
     18.10.2026, nachgestellt in der Technik von Safari). Mit clip-path
     schneidet es die Ecken wie Chrome. */
  clip-path: inset(0 round var(--radius));
}
/* Im Vollbild ohne runde Ecken. Zwei Regeln: Ein Browser, der eine der
   beiden Schreibweisen nicht kennt, verwürfe sonst beide. */
.videodatei video:fullscreen { clip-path: none; border-radius: 0; }
.videodatei video:-webkit-full-screen { clip-path: none; border-radius: 0; }
/* EIGENE LEISTE FÜR VIDEOS IN EINER REIHE (30.10.2026), siehe script.js:
   Dort sind sie zu schmal für den Vollbild-Knopf des Browsers. Der Rahmen
   hält Video und Leiste zusammen, eine Unterschrift bleibt darunter. Die
   Regeln zur Form stehen danach (`[style*="--videoform"]`), deshalb hat die
   große Fassung eine Klasse mehr. */
.videodatei__rahmen { position: relative; }
.videodatei__rahmen video { cursor: pointer; }
.videodatei__leiste {
  position: absolute; left: 0; right: 0; bottom: 0;
  display: flex; align-items: center; gap: 0.15rem;
  padding: 0 0.15rem;
  background: rgba(0, 0, 0, 0.6);
  border-radius: 0 0 var(--radius) var(--radius);
  transition: opacity 0.15s;
}
.videodatei__knopf {
  flex: none;
  width: 40px; height: 40px; padding: 0;
  border: 0; border-radius: 6px; cursor: pointer;
  background: transparent center / 20px no-repeat;
}
.videodatei__knopf:hover { background-color: rgba(255, 255, 255, 0.2); }
.videodatei__knopf:focus-visible { outline: 2px solid #fff; outline-offset: -2px; }
.videodatei__knopf--spielen { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3E%3Cpath fill='%23fff' d='M5 2.5l12 7.5-12 7.5z'/%3E%3C/svg%3E"); }
.videodatei__knopf--halten { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3E%3Cpath fill='%23fff' d='M4.5 2.5h4v15h-4zM11.5 2.5h4v15h-4z'/%3E%3C/svg%3E"); }
.videodatei__knopf--gross { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='none' stroke='%23fff' stroke-width='2'%3E%3Cpath d='M1 7V1h6M13 1h6v6M19 13v6h-6M7 19H1v-6'/%3E%3C/svg%3E"); }
.videodatei__knopf--klein { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='none' stroke='%23fff' stroke-width='2'%3E%3Cpath d='M7 1v6H1M19 7h-6V1M13 19v-6h6M1 13h6v6'/%3E%3C/svg%3E"); }
/* Der Regler. Getrennte Regeln: Ein Browser, der eine Schreibweise nicht
   kennt, verwürfe sonst die ganze Regel. */
.videodatei__stelle {
  -webkit-appearance: none; appearance: none;
  flex: 1 1 auto; min-width: 0;
  height: 40px; margin: 0; padding: 0;
  background: transparent; cursor: pointer;
}
.videodatei__stelle:focus-visible { outline: 2px solid #fff; outline-offset: -2px; border-radius: 6px; }
.videodatei__stelle::-webkit-slider-runnable-track {
  height: 4px; border-radius: 2px;
  background: linear-gradient(to right, #fff var(--stand, 0%), rgba(255, 255, 255, 0.6) var(--stand, 0%));
}
.videodatei__stelle::-moz-range-track {
  height: 4px; border-radius: 2px;
  background: linear-gradient(to right, #fff var(--stand, 0%), rgba(255, 255, 255, 0.6) var(--stand, 0%));
}
.videodatei__stelle::-webkit-slider-thumb {
  -webkit-appearance: none; appearance: none;
  width: 14px; height: 14px; margin-top: -5px;
  border: 0; border-radius: 50%; background: #fff;
}
.videodatei__stelle::-moz-range-thumb {
  width: 14px; height: 14px;
  border: 0; border-radius: 50%; background: #fff;
}
/* Groß: über der ganzen Seite, auch wenn der Browser das Vollbild ablehnt. */
html.videodatei-gross { overflow: hidden; }
.videodatei__rahmen--gross {
  position: fixed; inset: 0; z-index: 100000;
  background: #000;
}
.galerie .videodatei .videodatei__rahmen--gross video {
  width: 100%; height: 100%;
  aspect-ratio: auto; object-fit: contain;
  border-radius: 0; clip-path: none;
}
.videodatei__rahmen--gross .videodatei__leiste { border-radius: 0; }
.videodatei__rahmen--still,
.videodatei__rahmen--still video { cursor: none; }
.videodatei__rahmen--still .videodatei__leiste,
.videodatei__rahmen--still .videodatei__blaettern { opacity: 0; pointer-events: none; }
/* Blättern wie bei den Bildern: dieselben Pfeile (`.bildschau__pfeil`), nur groß
   zu sehen. Der Zähler ebenso; in der Reihe ist dafür kein Platz. */
.videodatei__rahmen .videodatei__blaettern { display: none; }
.videodatei__rahmen--gross .videodatei__blaettern {
  display: grid;
  position: absolute; top: 50%; margin-top: -1.5rem;
  transition: background 0.15s, opacity 0.15s;
}
.videodatei__blaettern.bildschau__pfeil--zurueck { left: clamp(0.6rem, 2vw, 1.5rem); }
.videodatei__blaettern.bildschau__pfeil--vor { right: clamp(0.6rem, 2vw, 1.5rem); }
.videodatei__zaehler { display: none; }
.videodatei__rahmen--gross .videodatei__zaehler {
  display: block; flex: none;
  padding: 0 0.4rem;
  color: #fff; font-size: 0.875rem; white-space: nowrap;
}
.videodatei--hochkant video { aspect-ratio: 3 / 4; }
/* Der Kasten ist so breit wie das Video - wie der Bild-Baustein: Dann
   steht die Unterschrift unter dem Video, „Mittel“ und „Klein“ stehen
   mittig, und im Schreibfeld sitzen ⇔ ✕ an seiner Ecke. Steht nach den
   Größen oben, damit „Mittel“ (32 rem) ein Hochkant-Video nicht wieder
   breiter macht; nur „Klein“ (20 rem) ist schmaler und gewinnt. */
.blatt .videodatei--hochkant { max-width: min(100%, calc(var(--bild-hoechsthoehe, 465px) * 3 / 4)); }
.blatt .videodatei--hochkant.bild--klein { max-width: min(100%, 20rem); }
/* „GANZES VIDEO“ (19.10.2026): Das Video hat die Form, in der es gefilmt
   ist. Das Bauen schreibt sie aus dem Namen der Datei als `--videoform`
   an den Kasten (videoform_einsetzen in verwaltung/baukasten/lager.php),
   das Schreibfeld ebenso (videoFormSetzen in bearbeiten.js). Gleiche Maße
   wie ein Bild: höchstens 620 px breit und nie höher als 465 px - ein
   Handyvideo 9 : 16 also 262 × 465, eines in 16 : 9 620 × 349. „Mittel“
   und „Klein“ machen es schmaler, nie höher. Steht nach den Regeln oben,
   damit es sie überstimmt. */
/* Rückfall: Ein „Ganzes Video“ ohne Rechteck im Namen (sollte es nie
   geben) nimmt die Form, die es selbst mitbringt, statt schwarzer Balken
   in 16 : 9 (Code-Prüfung 19.10.2026). */
.videodatei--ganz video { aspect-ratio: auto; }
.videodatei[style*="--videoform"] video { aspect-ratio: var(--videoform); }
.blatt .videodatei[style*="--videoform"] {
  max-width: min(100%, 620px, calc(var(--bild-hoechsthoehe, 465px) * var(--videoform)));
}
.blatt .videodatei.bild--mittel[style*="--videoform"] {
  max-width: min(100%, 32rem, calc(var(--bild-hoechsthoehe, 465px) * var(--videoform)));
}
.blatt .videodatei.bild--klein[style*="--videoform"] {
  max-width: min(100%, 20rem, calc(var(--bild-hoechsthoehe, 465px) * var(--videoform)));
}

/* EINZELBILDER OHNE TEXT DAZWISCHEN ALS REIHE (13.09.2026)
   ---------------------------------------------------------------------
   Ab drei Fotos hintereinander stellt der Baukasten sie in ein Raster
   (`bildreihe_bauen()` in verwaltung/baukasten/seite.php). Jedes Foto
   bleibt dabei ein <figure class="bild"> mit seiner Unterschrift - hier
   wird ihm nur der Abstand und die gewaehlte Groesse abgenommen. Diese
   Regeln stehen absichtlich NACH den Groessen darueber, damit sie
   gewinnen. Die Unterschrift steht klein unter jedem Bild; so hat der
   Nutzer es gewaehlt. */
.galerie--einzelbilder .bild { margin: 0; max-width: none; }

/* UNTERSCHRIFTEN IN EINER BILDERREIHE (18. Runde)
   Seit dem 13.09.2026 abends auch in der angelegten Bilderreihe: Ein Bild
   mit Unterschrift steht dort als <figure>, eines ohne bleibt ein blosses
   <img>. Dieselbe kleine Schrift wie bei den Einzelbildern - eine Regel
   fuer beide Arten Reihe. */
.galerie figure { margin: 0; }
.galerie figure > a { display: block; }
.galerie figcaption { font-size: 0.82rem; line-height: 1.35; margin-top: 0.35rem; }

/* Tabellen aus dem alten Auftritt lesbar und mobil scrollbar machen */
.inhalt table, .tabelle {
  width: 100%; border-collapse: collapse; margin: 1.5rem 0; font-size: 0.95rem;
}
.inhalt th, .tabelle th {
  background: var(--blau); color: #fff; text-align: left;
  padding: 0.7rem 0.85rem; font-weight: 600;
}
.inhalt td, .tabelle td { padding: 0.65rem 0.85rem; border-bottom: 1px solid var(--linie); }

/* GRAU UND WEISS IM WECHSEL - ABER NUR, WO ES HILFT (10.09.2026)
   ---------------------------------------------------------------------
   Der Nutzer: "Die sind ja je nach Spalte immer grau und weiß; vielleicht
   kannst du da mal drüberschauen." Er hat recht, und es waren zwei
   Fehler auf einmal:

   1. VON 29 TABELLEN HATTE GENAU EINE EINE ECHTE KOPFZEILE. Bei den
      anderen war die oberste Zeile ein gewoehnliches <td> mit fettem
      Text - kein <th>, kein <thead>. Sie bekam deshalb keinen blauen
      Balken, und `nth-child(even)` zaehlte sie als erste Datenzeile mit.
      Ergebnis: Die Streifen liefen dort GENAU UMGEKEHRT wie in der einen
      richtigen Tabelle. Auf zwei Seiten nebeneinander sah dieselbe Art
      Tabelle verschieden aus.

   2. STREIFEN AUF EINER LAYOUT-TABELLE ZERHACKEN TEXT. `pruefungstermine`
      ist keine Datentabelle, sondern ein Stueck Seitenaufbau aus Joomla:
      278 Zeilen, davon 51 ganz leer, mit Ueberschriften und ganzen
      Saetzen darin - ein Satz laeuft ueber zwei Zeilen und wurde in der
      Mitte grau. Dazu graue Balken auf leeren Zeilen.

   DIE REGEL, DIE BEIDES LOEST: Streifen gibt es nur in einer Tabelle mit
   Kopfzeile. Streifen helfen, in einer breiten Tabelle die Zeile nicht zu
   verlieren - dafuer braucht es Spalten, die etwas bedeuten, und das sagt
   die Kopfzeile. Ohne Kopfzeile bleiben die feinen Trennlinien, mehr
   nicht. `.tabelle` stand hier bisher gar nicht - auch das ist jetzt
   gleich behandelt.

   `thead + tbody` statt `table:has(thead)`: Beides trifft dieselben
   Tabellen - der Browser stellt einen fehlenden <tbody> von sich aus
   her, und einen zweiten <tbody> gibt es hier nirgends. Aber `:has()`
   kennen erst Firefox ab 121 und Safari ab 15.4; wo es fehlt, faellt
   die GANZE Regel aus. Der Nachbar-Doppelpunkt geht seit jeher. */
.inhalt thead + tbody tr:nth-child(even),
.tabelle thead + tbody tr:nth-child(even) { background: var(--flaeche-grau); }
/* Die ganze Zeile hervorheben, damit man in breiten Tabellen
   (z. B. Seminartermine) die Zeile nicht verliert.
   ---------------------------------------------------------------------
   Orange bedeutet auf dieser Website: "hier kann man klicken". Deshalb
   wird eine Zeile nur dann hervorgehoben, wenn wirklich ein Verweis
   darin steht. Eine reine Datentabelle - etwa die Ergebnisliste eines
   Leistungswettbewerbs - bleibt ruhig. Gesteuert wird das vom Skript
   (Kennzeichnung "zeile-aktiv"), damit die Hervorhebung auch beim
   Scrollen sofort mitwandert. */
.inhalt tbody tr.zeile-aktiv { background: var(--orange-zart); }
.tabelle-scroll {
  overflow-x: auto; -webkit-overflow-scrolling: touch;
  border: 1px solid var(--linie);
  border-radius: var(--radius);
  margin: 1.8rem 0;
}
.tabelle-scroll table { margin: 0; }

/* ES GEHT ZUR SEITE WEITER (18. Runde, 15.09.2026)
   Der Rand blendet aus, solange dort noch Spalten kommen. Die Kennzeichnung
   setzt script.js (Abschnitt 3a) - nur bei einer Tabelle, die breiter ist
   als ihr Kasten. Ausgeblendet wird nicht ganz, sondern auf ein Fünftel:
   Man soll sehen, dass dort etwas steht. */
.tabelle-scroll--rechts {
  -webkit-mask-image: linear-gradient(to right, #000 calc(100% - 3rem), rgba(0, 0, 0, 0.2));
          mask-image: linear-gradient(to right, #000 calc(100% - 3rem), rgba(0, 0, 0, 0.2));
}
.tabelle-scroll--links {
  -webkit-mask-image: linear-gradient(to left, #000 calc(100% - 3rem), rgba(0, 0, 0, 0.2));
          mask-image: linear-gradient(to left, #000 calc(100% - 3rem), rgba(0, 0, 0, 0.2));
}
/* AUF DEM HANDY NAEHER AN DEN RAND (23.09.2026)
   ---------------------------------------------------------------------
   Sein Befund: "Das ragt vielleicht ein bisschen zu weit in den
   Bildschirm hinein. Kann man das minimal weiter am Rand halten, um
   mehr Platz in der Mitte zu schaffen?"
   Gerechnet: 3 rem sind 48 px. Bei 390 px Bildschirmbreite abzueglich
   2 x 20 px Seitenrand bleiben 350 px fuer die Tabelle - 48 px davon
   sind knapp 14 Prozent, und auf der anderen Seite noch einmal
   dieselben. Auf 1,4 rem (22,4 px) sind es 6 Prozent. Man sieht immer
   noch, dass es weitergeht; der lesbare Bereich in der Mitte waechst
   von 254 auf 305 px. Am PC bleiben die 3 rem - dort ist genug Platz,
   und der breitere Verlauf wirkt ruhiger. */
@media (max-width: 699px) {
  .tabelle-scroll--rechts {
    -webkit-mask-image: linear-gradient(to right, #000 calc(100% - 1.4rem), rgba(0, 0, 0, 0.2));
            mask-image: linear-gradient(to right, #000 calc(100% - 1.4rem), rgba(0, 0, 0, 0.2));
  }
  .tabelle-scroll--links {
    -webkit-mask-image: linear-gradient(to left, #000 calc(100% - 1.4rem), rgba(0, 0, 0, 0.2));
            mask-image: linear-gradient(to left, #000 calc(100% - 1.4rem), rgba(0, 0, 0, 0.2));
  }
}
.tabelle-scroll--links.tabelle-scroll--rechts {
  -webkit-mask-image: linear-gradient(to right, rgba(0, 0, 0, 0.2), #000 3rem,
                                      #000 calc(100% - 3rem), rgba(0, 0, 0, 0.2));
          mask-image: linear-gradient(to right, rgba(0, 0, 0, 0.2), #000 3rem,
                                      #000 calc(100% - 3rem), rgba(0, 0, 0, 0.2));
}

/* =====================================================================
   Seminarliste (Weiterbildung) - Tabelle am PC
   ---------------------------------------------------------------------
   Eigene Gestaltung, weil hier der Kurstitel die Hauptsache ist -
   die Kursnummer und die Termine sind Nebeninformationen.
   ===================================================================== */

.seminarliste table {
  font-size: 1rem;
  /* getrennte Zellraender, damit sich Ecken abrunden lassen */
  border-collapse: separate;
  border-spacing: 0;
}

.seminarliste thead th {
  background: var(--flaeche-grau);
  color: var(--schrift-grau);
  font-size: 0.78rem;
  font-weight: 700;
  letter-spacing: 0.09em;
  text-transform: uppercase;
  padding: 0.85rem 1rem;
  border-bottom: 2px solid var(--linie);
  white-space: nowrap;
}

/* Jede zweite Zeile leicht grau abgesetzt - das hilft beim Lesen und
   laesst die orange Hervorhebung auf JEDER Zeile deutlich werden.

   GEZAEHLT WERDEN NUR SICHTBARE ZEILEN (16.09.2026). Die Suche blendet
   Kurse aus, `nth-child(even)` zaehlte sie aber weiter mit - nach einer
   Suche standen dann zwei graue Zeilen untereinander. Deshalb setzt
   script.js die Streifen selbst ("zeile-grau") und kennzeichnet die Liste
   mit "streifen-gezaehlt". Ohne Skript bleibt es beim einfachen Zaehlen.
   Die zweite Regel nimmt der Zeile das Grau aus der allgemeinen
   Tabellenregel (`.inhalt thead + tbody tr`), das sonst durchschiene. */
.seminarliste:not(.streifen-gezaehlt) tbody tr:nth-child(even) td,
.seminarliste tbody tr.zeile-grau td { background: var(--flaeche-grau); }
.seminarliste.streifen-gezaehlt thead + tbody tr { background: none; }
.seminarliste tbody td {
  padding: 1rem;
  vertical-align: top;
  border-bottom: 1px solid var(--linie);
  transition: background-color 0.22s ease-out, box-shadow 0.22s ease-out;
}
.seminarliste tbody tr:last-child td { border-bottom: 0; }

/* Erste Spalte: die Kursnummer, bewusst zurueckhaltend */
.seminarliste tbody td:first-child {
  color: var(--schrift-grau);
  font-size: 0.88rem;
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
  width: 1%;
}

/* Zweite Spalte: der Kurstitel - die eigentliche Information */
.seminarliste tbody td:nth-child(2) { width: 60%; }
.seminarliste tbody td:nth-child(2) a {
  font-size: 1.1rem;
  font-weight: 600;
  line-height: 1.35;
  text-decoration: none;
  display: inline-block;
  transform-origin: left center;
  /* Vergroessern per transform statt per Schriftgroesse: das laeuft
     ruckelfrei, weil die Tabelle dabei nicht neu umbrechen muss. */
  transition: transform 0.22s ease-out, color 0.22s ease-out;
  will-change: transform;
}
.seminarliste tbody td:nth-child(2) a:hover { text-decoration: none; }

/* Termine: schmal, mit gleichmaessigen Ziffern */
.seminarliste tbody td:nth-child(n+3) {
  font-size: 0.92rem;
  color: var(--schrift-grau);
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}

/* Hervorhebung der Zeile unter dem Mauszeiger.
   ---------------------------------------------------------------------
   Gesteuert ausschliesslich vom Skript ueber die Kennzeichnung
   "zeile-aktiv" - NICHT zusaetzlich ueber :hover. Sonst gaebe es zwei
   Quellen, die auseinanderlaufen koennen: Beim Scrollen setzt das
   Skript die Markierung, danach bemerkt der Browser eine andere Zeile
   als "darueber" - und die alte Markierung bliebe stehen.

   Auf Handy und Tablet passiert hier nichts: Das Skript startet nur auf
   Geraeten mit echtem Mauszeiger. Eine Beruehrung mit dem Finger loest
   also keine haengenbleibende Hervorhebung aus. */
.seminarliste tbody tr.zeile-aktiv td {
  background: var(--orange-mittel);
  box-shadow: inset 0 1px 0 var(--orange), inset 0 -1px 0 var(--orange);
}
.seminarliste tbody tr.zeile-aktiv td:first-child {
  border-radius: 10px 0 0 10px;
  box-shadow: inset 0 1px 0 var(--orange), inset 0 -1px 0 var(--orange),
              inset 1px 0 0 var(--orange);
}
.seminarliste tbody tr.zeile-aktiv td:last-child {
  border-radius: 0 10px 10px 0;
  box-shadow: inset 0 1px 0 var(--orange), inset 0 -1px 0 var(--orange),
              inset -1px 0 0 var(--orange);
}
/* TITEL UND MARKE WACHSEN ZUSAMMEN (20.09.2026)
   ---------------------------------------------------------------------
   Bis heute wurde nur der Verweis vergroessert. Er wuchs dabei ueber die
   Marke "Neu" daneben - der Nutzer: "Der Kurstitel wird hervorgehoben und
   schiebt sich vor dieses Neu." Jetzt traegt die gemeinsame Huelle
   `.kurstitel` die Vergroesserung, der Abstand bleibt also erhalten.

   `transform-origin: left` zusaetzlich: Vorher wuchs der Titel nach
   beiden Seiten und ragte links in die Spalte mit der Kurs-Nr. */
.seminarliste tbody td:nth-child(2) .kurstitel {
  display: inline-block;
  transform-origin: left center;
  transition: transform 0.15s ease-out;
}
.seminarliste tbody tr.zeile-aktiv td:nth-child(2) .kurstitel {
  transform: scale(1.06);
}
.seminarliste tbody tr.zeile-aktiv td:nth-child(2) a {
  color: var(--schrift);
}

@media (prefers-reduced-motion: reduce) {
  .seminarliste tbody td,
  .seminarliste tbody td:nth-child(2) .kurstitel { transition: none; }
  .seminarliste tbody tr.zeile-aktiv td:nth-child(2) .kurstitel { transform: none; }
}

/* DIE MARKE "NEU" - IN BEIDEN ANSICHTEN DIESELBE (20.09.2026)
   ---------------------------------------------------------------------
   Sie stand bis heute nur in der Zeitleiste (Handy) als orange Marke; in
   der Tabelle war "Neu" schwarzer Text wie jeder andere. Der Nutzer:
   "Das machen wir bitte auch in diesem Orange mit der Umrandung, genau
   wie in der Handy-Ansicht."

   Deshalb EIN Regelsatz fuer beide Stellen statt zweier, die
   auseinanderlaufen. Der Rand kommt neu dazu - auch in der Zeitleiste:
   Die zarte Fuellung allein (#FFF4EC) verschwindet auf den grauen
   Wechselzeilen der Tabelle fast vollstaendig, und dann waere es keine
   Marke mehr, sondern nur oranger Text.

   `.seminarliste`/`.kursleiste` stehen davor, weil `.inhalt`-Regeln
   sonst mit gleichem Gewicht gewinnen (siehe Zeitleiste weiter unten).
   Gilt auch in der Bearbeitungsoberflaeche: Sie laedt dieselbe Datei. */
.seminarliste .kurs-neu,
.kursleiste .kurs-neu {
  display: inline-block;
  /* KEIN margin-left: Der Abstand zum Titel ist ein echtes Leerzeichen im
     HTML (siehe kurs_neu_html). Ein Abstand aus dem Stil bliebe auch dann
     stehen, wenn die Marke unter den Titel rutscht - sie saesse dort
     eingerueckt. Das Leerzeichen faellt beim Umbruch weg, die Marke
     beginnt dann genau dort, wo der Kurstitel beginnt (20.09.2026). */
  padding: 0 .5rem;
  border-radius: 999px;
  background: var(--orange-zart); color: var(--orange-dunkel);
  /* Rand kraeftiger als die Fuellung (--orange-hell statt --orange-mittel,
     20.09.2026): Der Nutzer sah den hellen Rand kaum und wollte trotzdem,
     dass er beim Darueberfahren noch dunkler werden kann. Jetzt hell-orange
     in Ruhe, dunkelorange auf der aktiven Zeile - zwei klar
     unterscheidbare Zustaende. */
  border: 1px solid var(--orange-hell);
  font-size: .875rem; font-weight: 700; line-height: 1.45;
  vertical-align: .08em;
  white-space: nowrap;
  /* Die Tabellenzeile faerbt sich beim Darueberfahren orange
     (--orange-mittel). Waere die Marke dann randlos, sae sie mittendrin
     unsichtbar - der weisse Rand haelt sie sichtbar. */
  transition: border-color .15s ease;
}
/* NUR ueber "zeile-aktiv", NICHT zusaetzlich ueber :hover - aus demselben
   Grund wie bei der Zeile selbst (siehe oben): zwei Quellen fuer dieselbe
   Hervorhebung laufen auseinander, und auf dem Handy bliebe der orange
   Rand nach einer Beruehrung haengen. */
.seminarliste tbody tr.zeile-aktiv .kurs-neu { border-color: var(--orange-dunkel); }

/* WELCHE DARSTELLUNG WO (19.09.2026)
   ---------------------------------------------------------------------
   Der Baukasten gibt beide aus: diese Tabelle fuer den PC und darunter die
   Zeitleiste fuers Handy. Der Nutzer: Die Zeitleiste ist "bewusst fuers
   Handy designt, weil dort wenig Platz ist" - am PC bleibt die Tabelle.
   Die Grenze ist dieselbe wie vorher fuer die Handy-Liste (640 px). */
@media (max-width: 640px) {
  .seminarliste .tabelle-scroll { display: none; }
}
@media (min-width: 641px) {
  .kursleiste { display: none; }
}

/* =====================================================================
   Seminarliste (Weiterbildung) - als Zeitleiste auf dem Handy (19.09.2026)
   ---------------------------------------------------------------------
   Bis heute eine Tabelle mit vier Spalten, auf dem Handy zu einer Liste
   umgebaut, grau im Wechsel. Aus fuenf Vorschlaegen hat der Nutzer die
   Zeitleiste gewaehlt: je Monat eine blaue Marke, links Tag und
   Wochentag, ein Punkt auf einer senkrechten Linie, daneben der Titel.

   Seine Festlegungen dazu (18./19.09.2026):
   * Titel schwarz und etwas groesser (1,1 rem), "Neu" als orange Marke,
     orange Pfeile - der Kurs soll vorn stehen, nicht das Datum.
   * Die Zeitleiste weit links, damit der Titel Platz hat.
   * Zwischen den Kursen helle Linien, die die Raender nicht beruehren:
     links beginnen sie beim Titel (die Zeitleiste bleibt ungestoert),
     rechts enden sie vor dem Rand. Orange war ihm "zu viel
     Farbenkunterbunt". Die Linie liegt im Abstand, macht die Liste also
     nicht laenger.
   * Nur Titel und Beginn (16.09.2026).
   * Nur auf dem Handy - am PC steht die Tabelle darueber (19.09.2026).

   ALLES MIT `.kursleiste` DAVOR: `.inhalt a` unterstreicht jeden Verweis
   im Inhalt und `.inhalt h3` gibt Abstand nach oben - beide haetten mit
   gleichem Gewicht gewonnen.
   ===================================================================== */
.kursleiste {
  /* Die Umstellung bei sehr grosser Schrift unten fragt DIESE Breite ab */
  container-type: inline-size;
}
.kursleiste .kursleiste__spur { position: relative; }
/* Die Zeitleiste selbst - mittig unter den Punkten */
.kursleiste .kursleiste__spur::before {
  content: "";
  position: absolute; top: .6rem; bottom: .6rem;
  left: calc(2.5rem + .5rem + .5rem - 1px);
  width: 2px;
  background: rgba(45, 67, 143, .3);
}
.kursleiste .kursleiste__monat + .kursleiste__monat { margin-top: .9rem; }
.kursleiste .kursleiste__monat[hidden],
.kursleiste .kursleiste__eintrag[hidden] { display: none; }

/* Die Monatsmarke liegt auf der Linie und verdeckt sie */
.kursleiste .kursleiste__kopf {
  position: relative; z-index: 1;
  margin: 0 0 .3rem;
  font-size: 1rem; line-height: 1;
}
.kursleiste .kursleiste__kopf span {
  display: inline-block;
  padding: .4rem .75rem;
  border-radius: 999px;
  background: var(--blau); color: #fff;
  font-size: .875rem; font-weight: 700; letter-spacing: .05em;
  text-transform: uppercase;
}
.kursleiste .kursleiste__kopf small {
  margin-left: .5rem;
  font-size: .875rem; font-weight: 400; color: var(--schrift-grau);
}

.kursleiste .kursleiste__liste { list-style: none; margin: 0; padding: 0; }
.kursleiste .kursleiste__eintrag { position: relative; margin: 0; padding: 0; }
.kursleiste .kursleiste__eintrag:not([hidden]) ~ .kursleiste__eintrag::before {
  content: "";
  position: absolute; top: 0; height: 1px;
  left: calc(2.5rem + .5rem + 1rem + .5rem); right: .75rem;
  background: rgba(45, 67, 143, .22);
}

/* Die Linie steht nur, wenn darueber ein SICHTBARER Kurs steht ("~" mit
   :not([hidden]) statt "+"): Blendet die Suche den ersten Kurs eines Monats
   aus, stuende sonst eine Linie direkt unter der Monatsmarke. */

/* Der ganze Eintrag ist der Verweis - Tag, Titel und Pfeil */
.kursleiste .kursleiste__verweis {
  display: grid;
  grid-template-columns: 2.5rem 1rem minmax(0, 1fr) 1.25rem;
  column-gap: .5rem;
  align-items: center;
  padding: .55rem .5rem .55rem 0;
  border-radius: 8px;
  color: var(--schrift);
  text-decoration: none;
  transition: background-color .15s ease-out;
}
/* Hervorgehoben wird ueber das Skript (script.js, "kursleiste__verweis--
   aktiv"), nicht ueber :hover - sonst bleibt es beim Scrollen haengen.
   :hover nimmt nur Orange und Unterstrich der allgemeinen Verweise weg. */
.kursleiste .kursleiste__verweis:hover { color: var(--schrift); text-decoration: none; }
/* DIE HERVORHEBUNG DECKT DIE ZEITLEISTE NICHT MEHR ZU (23.09.2026)
   ---------------------------------------------------------------------
   Sein Befund vom iPhone: "Wenn ich bei den Seminarangeboten auf die
   Seminare druecke, ueberdeckt das Orange die Linien und so weiter.
   Das geht natuerlich nicht."

   Er hat recht, und der Grund ist gebaut, nicht zufaellig: Der Verweis
   ist ein Raster ueber VIER Spalten - Tag, Punkt, Titel, Pfeil - und
   liegt damit auch ueber der senkrechten Zeitleiste. Eine Fuellung auf
   diesem Verweis malt zwangslaeufig ueber die Linie, ueber den Punkt
   und ueber den Trennstrich zum naechsten Kurs, denn die gehoeren zum
   Listeneintrag darunter und nicht zum Verweis.

   Statt der Flaeche zeichnet jetzt ein eigenes Feld die Hervorhebung,
   und zwar nur dort, wo nichts liegt: rechts vom Punkt, und oben und
   unten 3 px eingerueckt, damit die Trennstriche stehen bleiben.
   Gestalterisch ist es dieselbe Sprache wie bei den Kacheln, die er
   ausdruecklich in Ordnung fand: zarte orange Fuellung, orange
   Umrandung. Der Rahmen kommt ueber einen Schatten nach innen - ein
   echter Rand wuerde alles um zwei Bildpunkte verschieben.

   `background` wird hier BEWUSST nicht mehr gesetzt: In der
   Bearbeitungsoberflaeche traegt ein vergangener Kurs eine graue
   Fuellung (`gestaltung.css`, `--vorbei`). Ein `background: none` haette
   die beim Antippen weggenommen.

   Gilt in der Bearbeitungsoberflaeche mit - sie laedt dieselbe Datei;
   er hatte darum gebeten, es "gleich mitzuaendern". */
.kursleiste .kursleiste__verweis { position: relative; }
.kursleiste .kursleiste__verweis--aktiv::before,
.kursleiste .kursleiste__verweis:active::before {
  content: "";
  position: absolute;
  top: 3px; bottom: 3px;
  /* Tag (2,5rem) + Abstand (0,5) + Punkt (1) + halber Abstand (0,25) */
  left: calc(2.5rem + .5rem + 1rem + .25rem);
  right: 0;
  border-radius: 8px;
  background: var(--orange-zart);
  box-shadow: inset 0 0 0 2px var(--orange);
  z-index: 0;
}
/* Inhalt ueber das Feld legen, sonst verschwaende er darunter. */
.kursleiste .kursleiste__verweis > * { position: relative; z-index: 1; }
.kursleiste .kursleiste__verweis:focus-visible { outline: 3px solid var(--blau); outline-offset: -3px; }

.kursleiste .kursleiste__tag { text-align: center; line-height: 1.15; }
.kursleiste .kursleiste__tag b { display: block; font-size: 1.1rem; font-weight: 800; color: var(--blau); }
.kursleiste .kursleiste__tag small { display: block; font-size: .875rem; color: var(--schrift-grau); }
.kursleiste .kursleiste__punkt {
  position: relative; z-index: 1;
  justify-self: center;
  width: .75rem; height: .75rem;
  box-sizing: border-box;
  border-radius: 50%;
  background: #fff;
  border: 3px solid var(--blau);
}
.kursleiste .kursleiste__text { min-width: 0; }
.kursleiste .kursleiste__titel {
  display: block;
  font-size: 1.1rem; font-weight: 700; line-height: 1.35;
  /* "Fuehren_von_Erdbaumaschinen_und_Verdichter" ist EIN Wort */
  overflow-wrap: anywhere;
}
/* Die Marke "Neu" - siehe unter der Tabelle, sie gilt fuer beide Ansichten. */
.kursleiste .kursleiste__pfeil {
  font-size: 1.7rem; line-height: 1; text-align: right;
  color: var(--orange-dunkel);
}

/* SEHR GROSSE SCHRIFT AUF KLEINEM HANDY
   Bei doppelter Schrift auf 320 px blieben neben Tag, Punkt und Pfeil
   24 px fuer den Titel. Ist die Liste schmaler als 16 Zeichenbreiten
   ihrer eigenen Schrift, rueckt der Tag als Zeile ueber den Titel, Linie
   und Punkte fallen weg. Bei normaler Schrift greift das nie (320 px sind
   18 Zeichenbreiten). Browser ohne Container-Abfragen behalten die
   Zeitleiste. */
@container (max-width: 16em) {
  .kursleiste .kursleiste__spur::before,
  .kursleiste .kursleiste__punkt { display: none; }
  .kursleiste .kursleiste__verweis {
    grid-template-columns: minmax(0, 1fr) 1.25rem;
    padding: .55rem .5rem;
  }
  .kursleiste .kursleiste__tag {
    grid-column: 1; grid-row: 1;
    display: flex; gap: .35rem; align-items: baseline;
    text-align: left;
  }
  .kursleiste .kursleiste__tag b { display: inline; font-size: 1rem; }
  .kursleiste .kursleiste__tag small { display: inline; }
  .kursleiste .kursleiste__text { grid-column: 1; grid-row: 2; }
  .kursleiste .kursleiste__pfeil { grid-column: 2; grid-row: 1 / span 2; }
  .kursleiste .kursleiste__eintrag:not([hidden]) ~ .kursleiste__eintrag::before { left: .5rem; right: .5rem; }
}

@media (prefers-reduced-motion: reduce) {
  .kursleiste .kursleiste__verweis { transition: none; }
}

/* WENIGER LUFT ZWISCHEN KOPFSTREIFEN UND INHALT (20.09.2026)
   ---------------------------------------------------------------------
   Gemessen auf `ausbildung.html` bei 320 px: zwischen der Unterkante
   des grauen Streifens und der Ueberschrift „Uebersicht" lagen 88 px -
   ein Sechstel des Bildschirms fuer nichts. Der Nutzer: „Sie soll
   jetzt auch nicht press aneinanderstehen, aber ein bisschen kleiner
   kann man die Luecke da schon machen."

   Halbiert wird nur das Polster des ERSTEN Abschnitts; die Abstaende
   zwischen den Abschnitten bleiben, wie sie sind, und am PC aendert
   sich gar nichts. Der graue Streifen selbst bleibt unangetastet -
   dort kommen spaeter Bilder und Text hinein. */
@media (max-width: 699px) {
  .seitenkopf + .abschnitt { padding-top: 1.5rem; }
}

/* Kopfzeile einer Unterseite */
.seitenkopf {
  background: var(--flaeche-grau);
  border-bottom: 1px solid var(--linie);
  padding: clamp(2rem, 5vw, 3.4rem) 0 clamp(1.6rem, 4vw, 2.6rem);
}
.seitenkopf h1 { margin-bottom: 0.3rem; }
.brotkrumen { font-size: 0.9rem; color: var(--schrift-grau); margin-bottom: 0.9rem; }
.brotkrumen a { color: var(--schrift-grau); }
@media (hover: hover) { .brotkrumen a:hover { color: var(--orange-dunkel); } }   /* nur mit Mauszeiger, siehe a:hover */
.brotkrumen .krume__pfeil { margin: 0 0.4rem; }

/* AUF DEM HANDY NUR DIE EBENE DARUEBER (20.09.2026)
   ---------------------------------------------------------------------
   Gemessen auf der laengsten Kursseite (Asbest, 320 px): Der Kurstitel
   stand ZWEIMAL untereinander - im Pfad ueber sechs Zeilen (143 px) und
   gleich darunter als Ueberschrift (401 px). Zusammen 544 px, bevor ein
   Wort Inhalt kommt; ein Handy zeigt rund 536 px.

   Deshalb bleibt auf dem Handy nur "< Weiterbildung" stehen - die Stufe
   ueber dieser Seite, mit Pfeil nach links und 44 px Tippflaeche. Den
   Namen der Seite selbst sagt die Ueberschrift direkt darunter; ihn ein
   zweites Mal zu zeigen, kostet nur Platz. Am PC aendert sich nichts.

   Warum nicht alles einzeilig mit "...": Nielsen Norman Group und
   Baymard Institute empfehlen fuer Handys genau diese eine Stufe mit
   Pfeil. Die Warnung der Forschung (versteckte Ebenen fuehren in die
   Irre) greift hier nicht - die Website hat drei Ebenen, und die
   unterste ist die Seite selbst. */
@media (max-width: 699px) {
  .brotkrumen { margin-bottom: 0.2rem; }
  .brotkrumen .krume, .brotkrumen .krume__pfeil { display: none; }
  .brotkrumen .krume--eltern {
    display: inline-flex; align-items: center;
    min-height: 44px; padding-right: 0.5rem;
  }
  .brotkrumen .krume--eltern::before { content: "\2039"; content: "\2039" / ""; margin-right: 0.4rem; font-size: 1.15em; }
  /* Kurze wie lange Ueberschriften werden kleiner - so hat der Nutzer
     den Vorschlag auf `ueberschriften-probe.html` gesehen und
     angenommen (20.09.2026). */
  .seitenkopf h1 { font-size: 1.5rem; overflow-wrap: anywhere; }
}

/* =====================================================================
   Bild im Kopfstreifen und die Schleier (17.09.2026)
   ---------------------------------------------------------------------
   Der Kopfstreifen jeder Unterseite bleibt grau, solange niemand ein
   Bild setzt. Wer eines setzt, waehlt dazu einen Schleier - dieselbe
   Auswahl wie beim Startbild der Startseite.

   Der Nutzer: „Wir lassen es im Moment grau ... Aber wir geben die
   Moeglichkeit, dort immer ein Bild einzufuegen und jegliche Art von
   Schleier hintendran zu setzen." Die fuenf Ideen A-E vom 17.09.2026
   (Vergleichs-Block) sind damit erledigt und herausgenommen.

   DIE ABLAGE IST EINE LISTE, NICHT DIESE DATEI. Welche Schleier es gibt,
   steht in `schleier_katalog()` in verwaltung/baukasten/hilfen.php. Wer
   einen dazunimmt, traegt ihn dort ein UND schreibt hier seine Regel.

   DREI FARBEN, JE FUENF FORMEN, DAZU „OHNE":
     links    - links deckend, nach rechts auslaufend (die fruehere
                Moeglichkeit B, Vorauswahl beim Startbild)
     unten    - unten deckend, nach oben auslaufend
     kraeftig - gleichmaessig, dicht
     mittel   - gleichmaessig, halb
     leicht   - gleichmaessig, zart

   DIE SCHRIFT RICHTET SICH NACH DER FARBE (`ton-…` am Streifen):
     blau            -> weisse Schrift
     orange, weiss   -> schwarze Schrift. Orange mit Schwarz ist dieselbe
                        Regel wie bei den Knoepfen der Website („mit
                        schwarzer Schrift, die darauf am besten lesbar
                        ist"). Weiss auf Orange erreicht hoechstens 3 : 1.
     ohne            -> weisse Schrift mit Schatten
   Gerechnet fuer das unguenstigste Foto (ganz weiss oder ganz schwarz):
   „kraeftig" haelt in allen drei Farben 4,5 : 1. „leicht" haelt es
   nicht - dafuer sieht man im Fenster beim Waehlen das echte Bild.
   ===================================================================== */
.seitenkopf--bild {
  position: relative; overflow: hidden; isolation: isolate;
  border-bottom: 0;
  background: var(--blau-dunkel);        /* bis das Bild geladen ist */
  /* DER GRUND MUSS MITBLENDEN (18.09.2026)
     Seit jedes Bild seinen eigenen Schleier hat, wechselt `ton-…` beim
     Bildwechsel - und damit dieser Grund zwischen Dunkelblau und Hellgrau.
     Waehrend zwei Ebenen ineinander blenden, sind beide halb durchsichtig;
     in der Mitte scheint ein Viertel des Grundes durch ((1-0,5)·(1-0,5)).
     Ohne diese Zeile blitzte dort die andere Farbe auf. Dieselbe Dauer wie
     die Ebenen, sonst laufen sie auseinander. */
  transition: background-color 1.1s ease-in-out;
}
.seitenkopf--bild.ton-dunkel { background: var(--flaeche-grau); }
.seitenkopf--bild > .bereich { position: relative; z-index: 1; }

/* Das Bild ist Schmuck: nicht anklickbar, nicht vergroesserbar, wird
   nicht vorgelesen (`aria-hidden` im HTML). */
.kopfbild {
  position: absolute; inset: 0; z-index: 0;
  pointer-events: none;
}
/* Mehrere Bilder liegen als Ebenen uebereinander und werden ineinander
   geblendet - dieselbe Mechanik wie beim Startbild. */
.kopfbild__ebene {
  position: absolute; inset: 0;
  opacity: 0;
  transition: opacity 1.1s ease-in-out;
}
.kopfbild__ebene.ist-da { opacity: 1; }
@media (prefers-reduced-motion: reduce) {
  .kopfbild__ebene, .seitenkopf--bild { transition: none; }
}

/* Die Punkte stehen unten rechts im Streifen - dort, wo keine Schrift
   steht. Sie liegen NEBEN dem Bild, nicht darin: `.kopfbild` nimmt keine
   Klicks an, die Punkte muessen aber anklickbar sein. */
.kopfbild__punkte {
  position: absolute;
  right: var(--rand);
  bottom: .7rem;
  z-index: 2;
  display: flex; gap: .6rem;
}
.kopfbild__punkt {
  position: relative;
  width: 0.55rem; height: 0.55rem;
  padding: 0; border: 0; border-radius: 50%;
  background: rgba(255, 255, 255, 0.45);
  box-shadow: 0 0 0 1px rgba(0, 0, 0, .25);
  cursor: pointer;
  transition: 0.18s;
}
.kopfbild__punkt.ist-da { background: rgba(255, 255, 255, 0.95); }
.kopfbild__punkt.zeiger-aktiv { background: var(--orange); }
@media (hover: hover) { .kopfbild__punkt:hover { background: var(--orange); } }   /* nur mit Mauszeiger, siehe a:hover */
.kopfbild__punkt:focus-visible { outline: 2px solid #fff; outline-offset: 3px; }
/* Der Punkt ist klein - die Flaeche zum Treffen darf es nicht sein.
   WCAG 2.2 (2.5.8) verlangt 24 x 24 Bildpunkte; sichtbar bleibt der
   Punkt so klein wie bisher. Gilt auch fuer die Punkte am Startbild. */
.kopfbild__punkt::before,
.hero__punkt::before {
  content: "";
  position: absolute;
  top: 50%; left: 50%;
  width: 24px; height: 24px;
  transform: translate(-50%, -50%);
}
.hero__punkt { position: relative; }
/* Auf hellen Schleiern waere Weiss auf Weiss unsichtbar. */
.seitenkopf--bild.ton-dunkel .kopfbild__punkt { background: rgba(26, 26, 26, 0.35); }
.seitenkopf--bild.ton-dunkel .kopfbild__punkt.ist-da { background: rgba(26, 26, 26, 0.85); }
.seitenkopf--bild.ton-dunkel .kopfbild__punkt:focus-visible { outline-color: var(--blau); }

/* `object-fit: cover` fuellt den Streifen, ohne das Bild zu verzerren -
   was nicht hineinpasst, wird abgeschnitten. Welcher Teil stehen
   bleibt, sagt `object-position` (die „Bildmitte" aus dem Fenster). */
.kopfbild__bild,
.hero__bild img,
.hero__bild video {
  display: block;
  width: 100%; height: 100%; max-width: none;
  object-fit: cover;
}

/* DER TON-KNOPF EINES VIDEOS IM STARTBEREICH (15.10.2026)
   Ein Video läuft stumm los - mit Ton spielt kein Browser von selbst ab.
   Hat es Ton, schaltet dieser runde Knopf ihn ein und aus. Zu sehen nur,
   solange ein Video mit Ton läuft (script.js nimmt `hidden` weg). 44 px,
   auch mit Handschuhen zu treffen; unten rechts, damit er weder Text
   noch Punkte verdeckt. */
.hero__ton {
  position: absolute;
  right: 1rem; bottom: 1rem;
  z-index: 2;
  width: 2.75rem; height: 2.75rem;
  display: flex; align-items: center; justify-content: center;
  padding: 0;
  border: 2px solid rgba(255, 255, 255, .85);
  border-radius: 50%;
  background: rgba(16, 24, 56, .6);
  color: #fff;
  cursor: pointer;
  transition: background .18s, border-color .18s;
}
.hero__ton[hidden] { display: none; }
.hero__ton svg { display: block; }
/* Das Zeichen zeigt, was gerade gilt: durchgestrichen = stumm. */
.hero__ton[aria-pressed="false"] .hero__ton-an,
.hero__ton[aria-pressed="true"] .hero__ton-aus { display: none; }
.hero__ton.zeiger-aktiv { background: var(--orange); border-color: var(--orange); }
@media (hover: hover) { .hero__ton:hover { background: var(--orange); border-color: var(--orange); } }   /* nur mit Mauszeiger, siehe a:hover */
.hero__ton:focus-visible { outline: 2px solid #fff; outline-offset: 3px; }
/* Auf hellen Schleiern dunkel - wie die Punkte. */
.hero.ton-dunkel .hero__ton { background: rgba(255, 255, 255, .8); border-color: var(--schrift); color: var(--schrift); }
.hero.ton-dunkel .hero__ton:focus-visible { outline-color: var(--blau); }
/* AM HANDY UNTER DEN KNÖPFEN, NICHT DANEBEN
   Nachgerechnet bei 360 px Breite: „Weiterbildung“ endet 328 px vom
   linken Rand, der Ton-Knopf begänne bei 300 - beide überlappten um
   12 px in der Höhe. Deshalb steht er am Handy tiefer (8 px vom Rand), und
   der Startbereich bekommt unten so viel mehr Platz, dass zwischen den
   Knöpfen und ihm 8 px frei bleiben. Nur mit Ton-Knopf - sonst bleibt
   alles, wie es war. */
@media (max-width: 559px) {
  .hero--mit-ton .hero__innen { padding-bottom: 3.75rem; }
  .hero__ton { right: .75rem; bottom: .5rem; }
}
/* DERSELBE KNOPF IM KOPFSTREIFEN (16.10.2026), dort OBEN rechts: Unten
   rechts stehen die Punkte einer Folge, und eine lange Überschrift reicht
   bis an den rechten Rand. Oben steht links nur der Pfad, am Handy nur
   „‹ Weiterbildung“. */
.seitenkopf--bild .hero__ton { top: .75rem; bottom: auto; right: var(--rand); }
.seitenkopf--bild.ton-dunkel .hero__ton { background: rgba(255, 255, 255, .8); border-color: var(--schrift); color: var(--schrift); }
.seitenkopf--bild.ton-dunkel .hero__ton:focus-visible { outline-color: var(--blau); }
@media (max-width: 559px) {
  .seitenkopf--bild .hero__ton { top: .5rem; right: .75rem; }
}

.schleier { position: absolute; inset: 0; pointer-events: none; }

/* --- Blau (Hausfarbe, dunkel) ------------------------------------- */
.schleier--blau-links {
  background: linear-gradient(to right, rgba(24, 36, 82, .88) 0%, rgba(24, 36, 82, .72) 34%,
                                        rgba(24, 36, 82, .28) 62%, rgba(24, 36, 82, .05) 100%);
}
.schleier--blau-unten {
  background: linear-gradient(to top, rgba(24, 36, 82, .90) 0%, rgba(24, 36, 82, .62) 45%,
                                      rgba(24, 36, 82, .12) 100%);
}
.schleier--blau-kraeftig { background: rgba(24, 36, 82, .86); }
.schleier--blau-mittel   { background: rgba(24, 36, 82, .64); }
.schleier--blau-leicht   { background: rgba(24, 36, 82, .40); }

/* --- Orange (Originalton des Verbandes) ---------------------------- */
.schleier--orange-links {
  background: linear-gradient(to right, rgba(255, 98, 0, .90) 0%, rgba(255, 98, 0, .78) 34%,
                                        rgba(255, 98, 0, .30) 62%, rgba(255, 98, 0, .05) 100%);
}
.schleier--orange-unten {
  background: linear-gradient(to top, rgba(255, 98, 0, .92) 0%, rgba(255, 98, 0, .66) 45%,
                                      rgba(255, 98, 0, .12) 100%);
}
.schleier--orange-kraeftig { background: rgba(255, 98, 0, .90); }
.schleier--orange-mittel   { background: rgba(255, 98, 0, .70); }
.schleier--orange-leicht   { background: rgba(255, 98, 0, .45); }

/* --- Weiss (das Grau des Streifens) --------------------------------- */
.schleier--weiss-links {
  background: linear-gradient(to right, rgba(246, 247, 249, .94) 0%, rgba(246, 247, 249, .82) 34%,
                                        rgba(246, 247, 249, .30) 62%, rgba(246, 247, 249, .04) 100%);
}
.schleier--weiss-unten {
  background: linear-gradient(to top, rgba(246, 247, 249, .94) 0%, rgba(246, 247, 249, .70) 45%,
                                      rgba(246, 247, 249, .12) 100%);
}
.schleier--weiss-kraeftig { background: rgba(246, 247, 249, .90); }
.schleier--weiss-mittel   { background: rgba(246, 247, 249, .72); }
.schleier--weiss-leicht   { background: rgba(246, 247, 249, .50); }

/* --- Ohne ------------------------------------------------------------ */
.schleier--kein { background: none; }

/* Auf dem Handy steht die Schrift ueber die ganze Breite. Laeuft der
   Schleier dort nach rechts ganz aus, steht das Ende einer langen
   Ueberschrift auf dem blanken Foto. Deshalb dort nur halb auslaufend. */
@media (max-width: 640px) {
  .schleier--blau-links   { background: linear-gradient(to right, rgba(24, 36, 82, .88), rgba(24, 36, 82, .62)); }
  .schleier--orange-links { background: linear-gradient(to right, rgba(255, 98, 0, .90), rgba(255, 98, 0, .66)); }
  .schleier--weiss-links  { background: linear-gradient(to right, rgba(246, 247, 249, .94), rgba(246, 247, 249, .70)); }
}

/* --- Die Schrift auf dem Kopfstreifen -------------------------------- */
.seitenkopf--bild.ton-hell h1,
.seitenkopf--bild.ton-schatten h1 { color: #fff; }
.seitenkopf--bild.ton-hell .brotkrumen,
.seitenkopf--bild.ton-hell .brotkrumen a,
.seitenkopf--bild.ton-hell .vorspann,
.seitenkopf--bild.ton-schatten .brotkrumen,
.seitenkopf--bild.ton-schatten .brotkrumen a,
.seitenkopf--bild.ton-schatten .vorspann { color: rgba(255, 255, 255, .92); }
@media (hover: hover) {   /* nur mit Mauszeiger, siehe a:hover */
  .seitenkopf--bild.ton-hell .brotkrumen a:hover,
  .seitenkopf--bild.ton-schatten .brotkrumen a:hover { color: var(--orange-hell); }
}
.seitenkopf--bild.ton-schatten h1,
.seitenkopf--bild.ton-schatten .brotkrumen,
.seitenkopf--bild.ton-schatten .vorspann {
  text-shadow: 0 1px 2px rgba(0, 0, 0, .65), 0 0 14px rgba(0, 0, 0, .45);
}
.seitenkopf--bild.ton-dunkel h1,
.seitenkopf--bild.ton-dunkel .brotkrumen,
.seitenkopf--bild.ton-dunkel .brotkrumen a,
.seitenkopf--bild.ton-dunkel .vorspann { color: var(--schrift); }
/* Auf Orange waere ein oranger Verweis unsichtbar - unterstreichen reicht. */
@media (hover: hover) { .seitenkopf--bild.ton-dunkel .brotkrumen a:hover { color: var(--schrift); } }   /* nur mit Mauszeiger */

/* --- Die Schrift auf dem Startbild ---------------------------------- */
.hero.ton-dunkel,
.hero.ton-dunkel h1 { color: var(--schrift); }
.hero.ton-dunkel .hero__leistungen li::before { background: var(--schrift); }
/* Weisse Knoepfe auf weissem Schleier haetten keine Kante mehr. */
.hero.ton-dunkel .knopf--hell { border-color: var(--blau); }
.hero.ton-dunkel .hero__punkt { background: rgba(26, 26, 26, .32); }
.hero.ton-dunkel .hero__punkt.ist-da { background: rgba(26, 26, 26, .85); }
/* Am Handy kleiner und leiser (24.10.2026, sein Wunsch: „auf dem Handy ein
   bisschen kleiner und unauffälliger“). Am PC bleibt alles wie am
   20.08.2026 festgelegt (0,6 rem). Steht hier unten, damit es auch die
   Regeln für helle Schleier darüber überstimmt; das Orange beim Zeiger
   kommt deshalb hier noch einmal. Leiser wird nur der gewählte Punkt: Der
   andere behält seine Deckkraft, sonst fiele er gegen den Schleier unter
   3 : 1 (WCAG 1.4.11; Gerätecheck 24.10.2026). */

/* PUNKTEANZEIGEN: ENG UND HÖCHSTENS FÜNF (24.10.2026, sein Wunsch, gilt
   für jede Punkteanzeige - Startbereich und Kopfbild; Regel auch in der
   Designsprache). „Relativ eng zusammen – nicht press aneinander“: Der
   Abstand ist `--a`, der Punkt selbst ist `--d`. Am PC seit 29.10.2026
   etwa zwei Drittel Punkt, 0,4 statt 0,3 rem (sein Wunsch „minimal weiter
   auseinander“, am Bild gewählt: Mitten 16 statt 14,4 px) - im
   Startbereich und im Kopfbild. Am Handy unverändert (sein Wort: „passt
   das so, wie es jetzt ist“), siehe unten.
   Den Abstand tragen die Ränder der Punkte, nicht `gap` der Reihe: So
   schrumpft ein Punkt, der aus der Reihe geht (`ist-weg`, siehe
   punkteFenster() in script.js), samt seinem Abstand auf null, und die
   Reihe gleitet weiter wie beim Durchscrollen. Ein Randpunkt, hinter dem
   es weitergeht (`ist-klein`), ist kleiner; seine Mitte bleibt, wo sie
   war.
   ANTIPPEN: Es zählt nur die Seite des hellen Punkts (links zurück,
   rechts vor, script.js). Die Flächen zum Antippen sind 24 hoch und so
   breit wie der Abstand von Mitte zu Mitte - sie stoßen aneinander,
   überlappen nicht. Die beiden äußeren reichen von ihrer Mitte 24 px nach
   außen. Links
   und rechts vom hellen Punkt ist die Fläche damit immer mindestens
   24 x 24 (WCAG 2.5.8). */
.hero__punkte, .kopfbild__punkte { gap: 0; align-items: center; }
.hero__punkt { --d: 0.6rem; --a: 0.4rem; }
.kopfbild__punkt { --d: 0.55rem; --a: 0.4rem; }
.hero__punkt, .kopfbild__punkt {
  --g: var(--d);
  flex: none;
  width: var(--g); height: var(--g);
  margin: 0 calc((var(--a) + var(--d) - var(--g)) / 2);
}
.hero__punkt.ist-klein, .kopfbild__punkt.ist-klein { --g: calc(var(--d) * 0.6); }
.hero__punkt.ist-weg, .kopfbild__punkt.ist-weg { --g: 0px; margin: 0; opacity: 0; pointer-events: none; }
.hero__punkt::before, .kopfbild__punkt::before { width: calc(var(--d) + var(--a)); }
.hero__punkt.ist-rand-links::before, .kopfbild__punkt.ist-rand-links::before {
  width: calc(24px + (var(--d) + var(--a)) / 2); left: calc(50% - 24px); transform: translateY(-50%);
}
.hero__punkt.ist-rand-rechts::before, .kopfbild__punkt.ist-rand-rechts::before {
  width: calc(24px + (var(--d) + var(--a)) / 2); left: calc(50% - (var(--d) + var(--a)) / 2); transform: translateY(-50%);
}
@media (prefers-reduced-motion: reduce) {
  .hero__punkt, .kopfbild__punkt { transition: none; }
}
@media (max-width: 699px) {
  /* Abstand 0,3 statt 0,25 rem: sein Wunsch „ein ganz kleines, winziges
     Stückchen weiter auseinander“ (25.10.2026) - eine Stufe, nicht mehr. */
  .hero__punkt { --d: 0.45rem; --a: 0.3rem; }
  /* Das Kopfbild behält am Handy seinen Abstand von vorher (29.10.2026):
     Oben am PC wurde er größer, am Handy sollte sich nichts ändern. */
  .kopfbild__punkt { --a: 0.3rem; }
  .hero__punkt.ist-da { background: rgba(255, 255, 255, 0.8); }
  .hero__punkt.zeiger-aktiv { background: var(--orange); }
  .hero.ton-dunkel .hero__punkt.ist-da { background: rgba(26, 26, 26, .72); }
}
@media (max-width: 699px) and (hover: hover) { .hero__punkt:hover { background: var(--orange); } }
.hero.ton-schatten h1,
.hero.ton-schatten .hero__leistungen {
  text-shadow: 0 1px 2px rgba(0, 0, 0, .65), 0 0 14px rgba(0, 0, 0, .45);
}
.hero, .hero h1 { transition: color .6s ease-in-out; }
@media (prefers-reduced-motion: reduce) {
  .hero, .hero h1 { transition: none; }
}

@media print {
  .kopfbild, .hero__bilder, .hero__ton { display: none !important; }
  .seitenkopf--bild { background: none; }
  .seitenkopf--bild h1, .seitenkopf--bild .brotkrumen, .seitenkopf--bild .brotkrumen a,
  .seitenkopf--bild .vorspann { color: #000 !important; text-shadow: none !important; }
}

/* =====================================================================
   Partner- und Foerderlogos
   ===================================================================== */

.partnerliste {
  list-style: none; padding: 0; margin: 0;
  display: flex; flex-wrap: wrap; gap: 0.7rem;
}
.partnerliste a {
  display: inline-block;
  padding: 0.6rem 1.1rem;
  background: #fff; color: var(--schrift);
  border: 1px solid var(--linie); border-radius: 999px;
  font-weight: 600; font-size: 0.95rem;
}
.partnerliste a.zeiger-aktiv { border-color: var(--orange); background: var(--orange-zart);
                        color: var(--schrift); text-decoration: none; }

.foerderlogos { display: flex; flex-wrap: wrap; align-items: center; gap: 1.8rem; }
/* FESTE HOEHE STATT HOECHSTHOEHE (24.09.2026): Zusammen mit Breite und
   Hoehe im <img> (rahmen.php) steht der Platz fest, bevor das Bild da
   ist. Vorher war der Streifen bis zum Nachladen 0 px hoch und die Seite
   wurde mitten im Scrollen 56 bzw. 76 px laenger - der Rollbalken sprang
   dabei zurueck. Alle drei Logos sind groesser als 76 px und standen
   schon bisher genau in dieser Hoehe da; es aendert sich also nichts. */
.foerderlogos img { height: 76px; width: auto; }

/* =====================================================================
   Fussbereich
   ===================================================================== */

.fuss {
  background: var(--blau-dunkel);
  color: rgba(255, 255, 255, 0.82);
  padding: 3.5rem 0 0;
  margin-top: 0;
  font-size: 0.96rem;
}
.fuss h3 { color: #fff; font-size: 1.02rem; margin-bottom: 0.9rem; }
.fuss a { color: #fff; }
@media (hover: hover) { .fuss a:hover { color: var(--orange-hell); text-decoration: underline; } }   /* nur mit Mauszeiger, siehe a:hover */
.fuss__raster {
  display: grid; gap: 2.2rem; grid-template-columns: 1fr;
  padding-bottom: 2.5rem;
}
/* NAVIGATION UND PARTNER RUECKEN ZUSAMMEN (23.09.2026)
   ---------------------------------------------------------------------
   Sein Wunsch: "Navigation und Partner koennen ruhig noch ein kleines
   Stueckchen enger aneinander." Die 2,2 rem Abstand sind richtig
   zwischen der Anschrift und dem ersten Klappblock - das sind zwei
   verschiedene Dinge. Zwischen den beiden Klappbloecken sind sie zu
   viel: Die gehoeren zusammen und sehen sonst aus wie zwei Abschnitte.
   Deshalb nur DORT weniger, und nur auf dem Handy (am PC stehen sie
   ohnehin nebeneinander, dort gibt es kein Untereinander). */
@media (max-width: 699px) {
  .fuss__klappbar + .fuss__klappbar { margin-top: -1.3rem; }
}
/* WIEDER DREI SPALTEN AM PC (23.09.2026)
   Vom 20. bis zum 23.09.2026 waren es zwei: Die Partnerliste stand
   damals hier ein zweites Mal und war herausgenommen, eine dritte
   Spalte waere leer geblieben. Jetzt ist die Partnerliste NUR noch
   hier - der grosse Abschnitt auf der Startseite ist dafuer weg -,
   also sind wieder drei Spalten gefuellt: Anschrift, Navigation,
   Partner. Auf dem Handy bleibt es eine Spalte untereinander. */
@media (min-width: 700px) { .fuss__raster { grid-template-columns: 1.6fr 1fr 1fr; } }
.fuss ul { list-style: none; padding: 0; margin: 0; }
.fuss li { margin-bottom: 0.5rem; }

.sozial { display: flex; gap: 0.6rem; margin-top: 1.2rem; flex-wrap: wrap; }
/* Ein Netzwerk, fuer das es keine Zeichnung gibt, steht als Wort da -
   besser als ein Eintrag, der stillschweigend verschwindet. Der Kreis
   wird dafuer zur Kapsel, damit auch ein laengerer Name hineinpasst. */
.sozial a:has(.sozial__wort) { width: auto; border-radius: 999px; padding: 0 1rem; }
.sozial__wort { font-size: 0.85rem; font-weight: 600; white-space: nowrap; }
.sozial a {
  display: inline-flex; align-items: center; justify-content: center;
  width: 42px; height: 42px; border-radius: 50%;
  background: rgba(255, 255, 255, 0.12);
  transition: 0.18s;
}
.sozial a.zeiger-aktiv { background: var(--orange); }
.sozial svg { width: 20px; height: 20px; fill: #fff; transition: fill 0.25s ease-out; }
.sozial a.zeiger-aktiv svg { fill: var(--schrift); }

/* ZWEI WEGE ZUM ABZ: ANRUFEN UND E-MAIL (20.09.2026)
   ---------------------------------------------------------------------
   Frueher standen hier zwei Textzeilen "Telefon: ..." und "E-Mail: ...".
   Auf dem Handy war die Ziffernfolge 16 px hoch - zu wenig zum Treffen.
   Jetzt steht beides in einer eigenen Huelle: am PC zwei Zeilen wie
   vorher, auf dem Handy zwei Knoepfe ueber die ganze Breite.
   Die Nummer und die Adresse bleiben dabei LESBAR stehen - ein Knopf,
   auf dem nur "Anrufen" steht, verbirgt, wen man anruft. */
.fuss__anschrift { margin-bottom: 0.5rem; }
.fuss__wege { display: flex; flex-direction: column; gap: 0.15rem; }
.fuss__weg { display: block; }
.fuss__weg-wort::after { content: ":"; }
/* Zwischen Wort und Wert steht ein ECHTES Leerzeichen im HTML, kein
   Abstand aus der Gestaltungsdatei: Ein Vorleseprogramm liest den
   Abstand nicht mit und machte aus "Anrufen: 0681 989 06 0" sonst
   "Anrufen:0681989060" - eine Zahl, die niemand versteht. Auf dem Handy
   stehen die beiden untereinander; dort laesst das Rasterverfahren den
   Zwischenraum von selbst weg. */
.fuss__weg-wort { color: rgba(255, 255, 255, 0.82); }
.fuss__weg-wert { overflow-wrap: anywhere; }
/* AM PC „TELEFON:“, AM HANDY „ANRUFEN“ (27.09.2026, Frage 58)
   Seit dem 20.09.2026 stand ueberall „Anrufen:“, damit es im HTML nur
   eine Fassung gibt. Seine Antwort: „was gängiger ist“ - am Schreibtisch
   ist das „Telefon:“, am Handy ist es ein Knopf, und der sagt, was er
   tut. Beide Woerter stehen im HTML; das jeweils andere ist mit
   display:none auch fuer Vorleseprogramme weg. */
.fuss__weg-handy { display: none; }

/* AUF DEM HANDY ZWEI ECHTE KNOEPFE
   48 px hoch (Geraetecheck: Bedienung mit Handschuhen), untereinander,
   ueber die ganze Breite. Das Wort steht klein darueber, die Nummer
   gross darunter. */
/* EINZEILIG STATT ZWEIZEILIG (23.09.2026)
   ---------------------------------------------------------------------
   Sein Wunsch: "Vielleicht schreibst du einfach 'Anrufen' und 'E-Mail'
   vor die Nummern und die E-Mail-Adresse, dann machst du das Feld ein
   bisschen kleiner."

   Das Wort stand bis heute UEBER dem Wert, der Kasten war damit
   zweizeilig. Jetzt steht es davor, und der Kasten ist eine Zeile hoch.
   Der Doppelpunkt kommt dabei zurueck - nebeneinander braucht es ihn,
   damit "Anrufen 0681..." nicht wie ein Satz klingt; untereinander war
   er ueberfluessig und stand deshalb auf leer.

   Die 48 px Mindesthoehe BLEIBEN. Sie sind keine Gestaltung, sondern
   die Trefferflaeche aus dem Geraetecheck - kleiner darf der Kasten
   nicht werden, auch wenn die Schrift jetzt weniger Platz braucht.
   Kleiner wird er trotzdem sichtbar: zwei Zeilen wurden eine.

   `flex-wrap` als Notausgang: Wird die Schrift stark vergroessert,
   rutscht der Wert unter das Wort, statt aus dem Kasten zu laufen. */
@media (max-width: 699px) {
  .fuss__wege { gap: 0.55rem; margin-top: 1.1rem; }
  .fuss__weg {
    display: flex; flex-direction: row; align-items: center;
    flex-wrap: wrap; column-gap: 0.5rem; row-gap: 0.1rem;
    min-height: 48px; padding: 0.35rem 0.9rem;
    border: 1px solid rgba(255, 255, 255, 0.35); border-radius: 8px;
    background: rgba(255, 255, 255, 0.12);
    text-decoration: none;
  }
  /* Auf dem Handy gibt es kein Darueberfahren - die Rueckmeldung beim
     Antippen kommt von :active, wie ueberall sonst auf dieser Website. */
  .fuss__weg:active { background: var(--orange); border-color: var(--orange); }
  .fuss__weg:active, .fuss__weg:active .fuss__weg-wort,
  .fuss__weg:active .fuss__weg-wert { color: var(--schrift); }
  /* 0,875 rem = 14 px - die Untergrenze aus dem Geraetecheck, derselbe
     Wert wie das Datum auf den Meldungskacheln (17.09.2026). */
  .fuss__weg-wort { font-size: 0.875rem; flex: none; }
  .fuss__weg-wert { font-weight: 600; font-size: 1.02rem; }
  /* Am Handy der Knopf „Anrufen“, am PC „Telefon:“ (Frage 58). */
  .fuss__weg-pc { display: none; }
  .fuss__weg-handy { display: inline; }
}

/* NAVIGATION UND PARTNER ZUM AUFKLAPPEN (20.09.2026)
   ---------------------------------------------------------------------
   Der Fussbereich war auf dem Handy 1.034 px hoch - mehr als ein
   Bildschirm, und das Menue stand darin ein zweites Mal. Zugeklappt
   bleibt von beiden Listen nur die Ueberschrift.

   Den Knopf setzt `script.js` ein, nicht der Baukasten: Am PC stehen
   beide Listen offen und brauchen keinen. So gibt es im HTML nur EINE
   Fassung, und wer kein JavaScript hat, sieht den Fussbereich wie
   bisher - vollstaendig. Dieselbe Bauart wie beim Gaestehaus-Kasten
   der Startseite (18.09.2026). */
.fuss__klapper {
  display: flex; align-items: center; justify-content: space-between;
  width: 100%; min-height: 48px; padding: 0;
  background: none; border: 0; color: #fff;
  font: inherit; text-align: left; cursor: pointer;
}
.fuss__klapper::after { content: "\25BE"; content: "\25BE" / ""; margin-left: 0.6rem; }
.fuss__klapper[aria-expanded="true"]::after { content: "\25B4"; content: "\25B4" / ""; }
.fuss__klappbar h3:has(.fuss__klapper) { margin-bottom: 0; }
.fuss__inhalt[hidden] { display: none; }
@media (max-width: 699px) {
  .fuss__klappbar .fuss__inhalt { margin-top: 0.9rem; }
  /* IMPRESSUM UND DATENSCHUTZ SIND ANTIPPBAR (Geraetecheck 20.09.2026)
     Gemessen waren sie 73 x 17 px - unter den 24 x 24 px aus WCAG 2.2
     (2.5.8) und auf einer Baustelle mit Handschuhen nicht zu treffen.
     Jetzt 44 px hoch, ohne dass sich am Aussehen etwas aendert. */
  .fuss__unten a { display: inline-flex; align-items: center; min-height: 44px; }
  .fuss__unten ul { align-items: center; }
}

/* DER UEBERLAUF BEI DOPPELTER SCHRIFT (gemessen 20.09.2026)
   ---------------------------------------------------------------------
   Stellt jemand die Schrift im Geraet doppelt so gross, lief der
   Fussbereich auf einem 320-px-Handy 28 px seitlich ueber. Ursache:
   In einem Raster ist jede Spalte von sich aus mindestens so breit wie
   ihr laengstes Wort - "Ausbildungszentrum" ist bei 32 px Schrift
   breiter als das ganze Handy. `min-width: 0` hebt diese Regel auf,
   `overflow-wrap: anywhere` erlaubt dem Wort den Zeilenumbruch. */
.fuss__raster > * { min-width: 0; }
.fuss h3, .fuss__anschrift, .fuss li, .fuss__unten { overflow-wrap: anywhere; }

.fuss__unten {
  border-top: 1px solid rgba(255, 255, 255, 0.16);
  padding: 1.2rem 0 1.6rem;
  display: flex; flex-wrap: wrap; gap: 0.6rem 1.5rem;
  align-items: center; justify-content: space-between;
  font-size: 0.9rem;
}
.fuss__unten ul { display: flex; flex-wrap: wrap; gap: 1.2rem; }
.fuss__unten li { margin: 0; }

/* Streifen mit den Foerdermittelgeber-Logos ueber dem Fussbereich
   ---------------------------------------------------------------------
   AUF DEM HANDY KOMPAKTER, ABER NICHT VERSTECKT (20.09.2026)

   Die Frage des Nutzers war, ob man diesen Streifen einklappt oder
   ganz weglaesst. Nachgesehen: Der Hinweis auf eine oeffentliche
   Foerderung ist ueblicherweise eine AUFLAGE aus dem
   Zuwendungsbescheid (Allgemeine Nebenbestimmungen) und muss „an
   deutlich sichtbarer Stelle" stehen. Wer ihn hinter einen Knopf legt,
   riskiert eine Beanstandung - im Zweifel um ein paar hundert
   Bildpunkte. Auf gefoerderten Websites steht so ein Streifen deshalb
   ueblicherweise offen direkt ueber dem Fussbereich, genau wie hier.

   Was geht: ihn kleiner machen. Auf dem Handy 1,4 statt 2,2 rem
   Polster, 1,2 statt 1,8 rem Abstand, Logos 56 statt 76 px hoch.
   Am PC aendert sich nichts.

   Ob die Auflage fuer das ABZ wirklich gilt, weiss nur der
   Zuwendungsbescheid - das gehoert auf die Liste der Fragen ans ABZ. */
.foerderstreifen { background: #fff; padding: 2.2rem 0; border-top: 1px solid var(--linie); }
@media (max-width: 699px) {
  .foerderstreifen { padding: 1.4rem 0; }
  .foerderstreifen p { margin-bottom: 0.7rem; font-size: 0.8rem; }
  .foerderlogos { gap: 1.2rem; }
  .foerderlogos img { height: 56px; }
}
.foerderstreifen p { font-size: 0.88rem; color: var(--schrift-grau); margin-bottom: 1rem; text-transform: uppercase; letter-spacing: 0.08em; font-weight: 600; }

/* =====================================================================
   News-Archiv: Suche und Filter
   ===================================================================== */

.filterleiste {
  display: flex; flex-wrap: wrap; gap: 0.8rem; align-items: center;
  margin-bottom: 2rem;
}
.filterleiste input[type="search"] {
  font: inherit; font-size: 1rem;
  padding: 0.7rem 0.95rem;
  /* Derselbe dunklere Rand wie an den Feldern der Formulare (08.10.2026,
     Philipps Ja) - auch hier und an der Jahresauswahl daneben. */
  border: 1px solid var(--feldrand); border-radius: 8px;
  background: #fff; color: var(--schrift);
  min-width: 220px;
  flex: 1 1 280px;
  transition: background-color 0.2s ease-out, border-color 0.2s ease-out;
}
/* Beim Darueberfahren dieselbe orange Hinterlegung wie bei Menue,
   Kacheln und Schaltflaechen - die Suchleiste faellt damit nicht mehr
   aus der Reihe. Die Schrift bleibt schwarz. */
.filterleiste input[type="search"].zeiger-aktiv {
  background: var(--orange-zart);
  border-color: var(--orange);
  color: var(--schrift);
}
/* Beim Anklicken bleibt es beim blauen Rahmen von bisher. Diese Regel
   steht bewusst NACH der orangen: Wer im Feld steht, soll es auch dann
   blau sehen, wenn der Mauszeiger noch darueber liegt. */
.filterleiste input[type="search"]:focus,
.filterleiste input[type="search"]:focus {
  background: #fff;
  border-color: var(--blau);
  outline: none;
  box-shadow: 0 0 0 3px rgba(45, 67, 143, 0.16);
}

/* --- Jahresauswahl -------------------------------------------------
   Bewusst selbst gebaut statt des Auswahlfelds vom Betriebssystem.
   Ein normales <select> sieht unter Windows, macOS und Android jeweils
   anders aus; diese Fassung sieht ueberall gleich aus und passt zur
   Website. Die Jahre selbst kommen aus den vorhandenen Beitraegen,
   ein neues Jahr erscheint also von allein.
   ------------------------------------------------------------------ */
.jahrwahl { position: relative; min-width: 190px; }

.jahrwahl__knopf {
  display: flex; align-items: center; justify-content: space-between; gap: 0.8rem;
  width: 100%;
  font: inherit; font-size: 1rem; font-weight: 500;
  padding: 0.7rem 0.95rem;
  background: #fff; color: var(--schrift);
  border: 1px solid var(--feldrand); border-radius: 8px;   /* wie das Suchfeld daneben */
  cursor: pointer;
  transition: border-color 0.25s ease-out, background-color 0.25s ease-out;
}
.jahrwahl__knopf.zeiger-aktiv { background: var(--orange-zart); border-color: var(--orange); color: var(--schrift); }
.jahrwahl__knopf:focus-visible { outline: 3px solid var(--blau); outline-offset: 2px; }
.jahrwahl__knopf--gewaehlt { border-color: var(--blau); font-weight: 600; }

.jahrwahl__pfeil {
  width: 0; height: 0; flex: none;
  border-left: 5px solid transparent;
  border-right: 5px solid transparent;
  border-top: 6px solid var(--schrift-grau);
  transition: transform 0.2s ease-out;
}
.jahrwahl__knopf[aria-expanded="true"] .jahrwahl__pfeil { transform: rotate(180deg); }

.jahrwahl__liste {
  position: absolute; top: calc(100% + 4px); left: 0; right: 0; z-index: 60;
  list-style: none; margin: 0; padding: 0.3rem;
  max-height: 17rem; overflow-y: auto;
  background: #fff;
  border: 1px solid var(--linie); border-radius: 8px;
  box-shadow: 0 14px 34px rgba(20, 30, 60, 0.16);
}
.jahrwahl__option {
  padding: 0.55rem 0.7rem;
  margin: 0;
  border-radius: 5px;
  cursor: pointer;
  font-variant-numeric: tabular-nums;
}
/* Auch hier: oranger Hintergrund, schwarze Schrift. */
.jahrwahl__option:hover,
.jahrwahl__option:focus { background: var(--orange-zart); color: var(--schrift); outline: none; }
/* Das gewaehlte Jahr ist blau hinterlegt - derselbe Grundsatz wie im
   Menue: Blau zeigt, wo man gerade steht, Orange zeigt, wo der
   Mauszeiger liegt. Waere beides orange, saehe man zwei gleich
   aussehende Zeilen und wuesste nicht, welche die gewaehlte ist.
   Deshalb bleibt die gewaehlte Zeile auch beim Darueberfahren blau. */
.jahrwahl__option[aria-selected="true"],
.jahrwahl__option[aria-selected="true"]:hover,
.jahrwahl__option[aria-selected="true"]:focus {
  background: var(--blau-sehrhell);
  font-weight: 700; color: var(--blau);
}
.jahrwahl__option[aria-selected="true"]::after { content: " \2713"; }
.treffer-hinweis { color: var(--schrift-grau); font-size: 0.95rem; margin-bottom: 1.5rem; }

.mehr-laden { display: flex; justify-content: center; margin-top: 2.5rem; }

/* =====================================================================
   Kursseite und Buchung (Weiterbildung)
   ---------------------------------------------------------------------
   Aufbau wie auf der alten Website: oben die Eckdaten und der Preis,
   darunter die Beschreibung, die Unterlagen und das Buchungsformular.
   Nur aufgeraeumt und in der Gestaltung der neuen Seite.
   ===================================================================== */

.kurs { display: grid; gap: 2rem; grid-template-columns: 1fr; align-items: start; }
/* DERSELBE UEBERLAUF WIE IM FUSSBEREICH (gemessen 20.09.2026)
   Bei doppelter Schriftgroesse lief die Kursseite auf einem 320-px-Handy
   133 px seitlich ueber. Ursache ist dieselbe wie unten im Fussbereich:
   Eine Rasterspalte ist von sich aus mindestens so breit wie ihr
   laengstes Wort. `min-width: 0` hebt das auf, `overflow-wrap` erlaubt
   dem Wort den Umbruch. */
.kurs > * { min-width: 0; }
.kurs dt, .kurs dd, .kurs h2, .kurs h3, .kurs p, .kurs li { overflow-wrap: anywhere; }
@media (min-width: 820px) { .kurs { grid-template-columns: 1.6fr 1fr; } }
/* SOLANGE ALLES UNTEREINANDER STEHT: PREIS UND BUCHEN ZUERST (17.09.2026)
   Am PC stehen "Auf einen Blick" und der Preiskasten nebeneinander, der
   Knopf "Diesen Kurs buchen" ist sofort zu sehen. Untereinander kam er
   erst nach der ganzen Liste - bei 375 px nach 1.370 px, also im zweiten
   Bildschirm. Mit dem Kasten vorn steht er bei 454 px. */
@media (max-width: 819px) { .kurs__preis { order: -1; } }

/* Eckdaten als Beschriftung-Wert-Paare - auf jeder Kursseite gleich */
.daten { margin: 0; }
.daten > div {
  display: grid; grid-template-columns: 10.5rem 1fr; gap: 0.4rem 1rem;
  padding: 0.7rem 0;
  border-bottom: 1px solid var(--linie);
}
.daten > div:last-child { border-bottom: 0; }
.daten dt { font-weight: 600; color: var(--schrift-grau); font-size: 0.93rem; }
.daten dd { margin: 0; }
/* Termin steht noch nicht fest - sichtbar, aber erkennbar zurueckhaltend */
.daten__offen { color: var(--schrift-grau); font-style: italic; }
.daten__hinweis {
  margin: 1rem 0 0;
  padding: 0.8rem 1rem;
  background: var(--orange-zart);
  border-left: 4px solid var(--orange);
  border-radius: 0 8px 8px 0;
  font-size: 0.93rem;
}
@media (max-width: 520px) { .daten > div { grid-template-columns: 1fr; gap: 0.15rem; } }

.kurs__preis h3 { margin-bottom: 0.8rem; }
.preisliste { list-style: none; padding: 0; margin: 0 0 1rem; }
.preisliste li {
  display: flex; flex-wrap: wrap; gap: 0.4rem 1rem;
  justify-content: space-between; align-items: baseline;
  padding: 0.55rem 0; border-bottom: 1px solid rgba(45, 67, 143, 0.14);
}
.preisliste li:last-child { border-bottom: 0; }
.preisliste span   { color: var(--schrift-grau); font-size: 0.95rem; }
.preisliste strong { font-size: 1.1rem; color: var(--blau-dunkel); white-space: nowrap; }
.preisliste__einzeln { font-size: 1.2rem; font-weight: 700; color: var(--blau-dunkel); }
.kurs__zusatz { font-size: 0.92rem; color: var(--schrift-grau); margin-bottom: 1rem; }
.kurs__ausgebucht { font-weight: 600; color: var(--orange-dunkel); margin: 0; }
.kurs__meta { margin-top: 2.5rem; font-size: 0.9rem; color: var(--schrift-grau); }

.bereich--schmal { max-width: 860px; }

/* Hinweiskasten: derselbe Kasten wie sonst, nur mit orangem Strich */
.infokasten--hinweis { background: var(--orange-zart); }
.infokasten--hinweis::before { background: var(--orange); }
.infokasten--hinweis h3 { color: var(--schrift); }
.infokasten--hinweis h3::before { background: var(--orange); }

/* --- Eigene Auswahlliste ---------------------------------------------
   Aus demselben Grund wie die Jahresauswahl im Archiv selbst gebaut:
   Ein normales Auswahlfeld sieht unter macOS, Windows und Android jeweils
   anders aus. Diese Fassung sieht ueberall gleich aus und verhaelt sich
   wie der Rest der Seite - orange beim Darueberfahren, blau beim
   Anklicken. Das urspruengliche Feld bleibt unsichtbar bestehen und
   traegt weiterhin den Wert, der abgeschickt wird.
   --------------------------------------------------------------------- */
.auswahl { position: relative; }
.auswahl__unsichtbar {
  position: absolute; opacity: 0; width: 1px; height: 1px;
  pointer-events: none; margin: 0; padding: 0; border: 0;
}
.auswahl__knopf {
  display: flex; align-items: center; justify-content: space-between; gap: 0.8rem;
  width: 100%;
  font: inherit; font-size: 1rem;
  padding: 0.65rem 0.85rem;
  background: #fff; color: var(--schrift);
  border: 1px solid var(--feldrand); border-radius: 8px;   /* wie die Felder daneben */
  cursor: pointer; text-align: left;
  transition: background-color 0.2s ease-out, border-color 0.2s ease-out;
}
.auswahl__knopf.zeiger-aktiv { background: var(--orange-zart); border-color: var(--orange); }
.auswahl__knopf:focus-visible { outline: 3px solid var(--blau); outline-offset: 2px; }
.auswahl__knopf[aria-expanded="true"] { border-color: var(--blau); background: #fff; }
.auswahl__knopf--leer .auswahl__text { color: var(--schrift-grau); }
.auswahl__knopf--fehlt { border-color: var(--orange); background: var(--orange-zart); }

.auswahl__pfeil {
  width: 0; height: 0; flex: none;
  border-left: 5px solid transparent;
  border-right: 5px solid transparent;
  border-top: 6px solid var(--schrift-grau);
  transition: transform 0.2s ease-out;
}
.auswahl__knopf[aria-expanded="true"] .auswahl__pfeil { transform: rotate(180deg); }

.auswahl__liste {
  position: absolute; top: calc(100% + 4px); left: 0; right: 0; z-index: 60;
  list-style: none; margin: 0; padding: 0.3rem;
  max-height: 17rem; overflow-y: auto;
  background: #fff;
  border: 1px solid var(--linie); border-radius: 8px;
  box-shadow: 0 14px 34px rgba(20, 30, 60, 0.16);
}
.auswahl__option {
  padding: 0.55rem 0.7rem; margin: 0;
  border-radius: 5px; cursor: pointer;
}
.auswahl__option:hover,
.auswahl__option:focus { background: var(--orange-zart); color: var(--schrift); outline: none; }
/* Wie bei der Jahresauswahl: blau ist das Gewaehlte, orange das, worauf
   der Mauszeiger liegt. */
.auswahl__option[aria-selected="true"],
.auswahl__option[aria-selected="true"]:hover,
.auswahl__option[aria-selected="true"]:focus {
  background: var(--blau-sehrhell);
  font-weight: 700; color: var(--blau);
}
.auswahl__option[aria-selected="true"]::after { content: " \2713"; }

/* --- Das Buchungsformular ------------------------------------------ */

.buchung__hinweis { color: var(--schrift-grau); font-size: 0.95rem; margin-bottom: 2rem; }
.buchung__notiz   { color: var(--schrift-grau); font-size: 0.9rem; margin: 0.6rem 0 0; }
.pflicht { color: var(--orange-dunkel); font-weight: 700; }
/* Gegenstueck zum Stern: steht an jedem freiwilligen Feld */
.optional { color: var(--schrift-grau); font-weight: 400; font-size: 0.88em; }

/* Der Rahmen wird als Schatten nach innen gezeichnet, nicht als Rand.
   Grund: Ein <fieldset> mit Rand laesst oben eine Luecke fuer die
   Ueberschrift frei. Bei kurzen Woertern faellt das nicht auf, bei einem
   langen Satz schon - dann bricht die Zeile um und die Rahmenlinie laeuft
   mitten durch die Schrift. Ohne Rand gibt es keine Luecke, und die
   Ueberschrift steht als normale Zeile ueber dem Kasten. */
.buchung__block {
  border: 0;
  box-shadow: inset 0 0 0 1px var(--linie);
  border-radius: var(--radius);
  background: #fff;
  padding: 1.3rem 1.5rem 1.5rem;
  margin: 0 0 1.4rem;
}
/* Überschrift eines Abschnitts - steht ueber dem Kasten (siehe oben) */
.buchung__block > legend,
.buchung__titel {
  font-size: 1.05rem; font-weight: 700; color: var(--blau-dunkel);
  padding: 0; margin: 0 0 1rem;
  max-width: 100%;
}

/* Ein Feld je Zeile, ab Tablet zwei nebeneinander.
   "align-items: end" richtet die Eingabefelder an ihrer Unterkante aus -
   sonst haengt ein Feld tiefer, sobald seine Beschriftung zweizeilig
   wird (z. B. "Entfernung mit dem KFZ (km, eine Strecke)"). */
.formraster {
  display: grid; gap: 0.9rem 1.4rem; grid-template-columns: 1fr;
  align-items: end;
}
@media (min-width: 640px) { .formraster { grid-template-columns: 1fr 1fr; } }
.formraster--eng { max-width: 16rem; }
.formfeld { margin: 0; display: flex; flex-direction: column; gap: 0.35rem; }
.formfeld label { font-size: 0.92rem; font-weight: 600; color: var(--schrift-grau); }

/* Felder, die eine ganze Zeile brauchen (09.09.2026)
   ---------------------------------------------------------------------
   Ein mehrzeiliges Textfeld und eine Mehrfachauswahl tragen die Klasse
   `formfeld--breit` - seit dem Tag, an dem es beide Feldarten gibt.
   Nur: Im Stil stand die Klasse nie. Beide landeten deshalb in je einer
   halben Spalte, und weil das Raster unten ausrichtet (`align-items:
   end`), klebte das kurze Feld unten und liess oben ein Loch. Genau das
   war im Antrag auf verguenstigte Mittagessen zu sehen.

   Dieselbe Ursache traf `formfeld__schild` (die Beschriftung ueber einer
   Kaestchenliste - sie sah aus wie Fliesstext statt wie eine
   Feldbeschriftung), `formfeld__notiz` ("Bitte mindestens 3 auswählen")
   und das mehrzeilige Feld selbst, das ganz ohne Gestaltung dastand:
   eckiger Rahmen, andere Schrift, andere Hoehe als alle Felder daneben. */
.formfeld--breit { grid-column: 1 / -1; }
.formfeld__schild {
  font-size: 0.92rem; font-weight: 600; color: var(--schrift-grau);
}
.formfeld__notiz { font-size: 0.88rem; color: var(--schrift-grau); }

/* Die Kaestchen einer Mehrfachauswahl. Ab acht Stueck untereinander
   wird die Liste sehr lang - deshalb ab 640 px zwei Spalten. */
.hakenliste--feld { margin-top: 0.15rem; }
@media (min-width: 640px) {
  .hakenliste--feld { grid-template-columns: repeat(auto-fit, minmax(13rem, 1fr)); }
}

.buchung input[type="text"], .buchung input[type="email"],
.buchung input[type="tel"],  .buchung input[type="number"],
.buchung textarea,
.buchung select {
  font: inherit; font-size: 1rem;
  padding: 0.65rem 0.85rem;
  /* DER DUNKLERE RAND (08.10.2026, Philipps Wahl B): Die helle Linie hob
     sich kaum vom Weiss ab (1,25 : 1) - man sah Beschriftungen, aber kaum
     Felder. Jetzt derselbe Rand wie in der Bearbeitung und an der Skala
     der Umfragen (3,2 : 1). Groesse und Aufteilung bleiben gleich. Die
     Kaesten um Haekchen und Preiswahl behalten die helle Linie: Dort ist
     das Kaestchen selbst das Feld, der Kasten nur sein Rahmen. */
  border: 1px solid var(--feldrand); border-radius: 8px;
  background: #fff; color: var(--schrift);
  width: 100%;
  transition: background-color 0.2s ease-out, border-color 0.2s ease-out;
}
/* Ein mehrzeiliges Feld ist mindestens vier Zeilen hoch und laesst sich
   nach unten ziehen - aber nicht in die Breite: Sonst schoebe es das
   Raster auseinander. */
.buchung textarea {
  min-height: 7rem; resize: vertical; line-height: 1.5;
}
/* Dieselbe Regel wie bei der Suchleiste: erst orange, beim Hineinklicken blau. */
.formfeld.zeiger-aktiv input, .formfeld.zeiger-aktiv select,
.formfeld.zeiger-aktiv textarea {
  background: var(--orange-zart); border-color: var(--orange);
}
.buchung input:focus, .buchung select:focus, .buchung textarea:focus,
.formfeld.zeiger-aktiv input:focus, .formfeld.zeiger-aktiv select:focus,
.formfeld.zeiger-aktiv textarea:focus {
  background: #fff; border-color: var(--blau);
  outline: none; box-shadow: 0 0 0 3px rgba(45, 67, 143, 0.16);
}

/* Fehlende Pflichtangaben
   ---------------------------------------------------------------------
   Erst nachdem jemand auf "Weiter" gedrueckt hat, bekommt das Formular
   vom Skript die Kennzeichnung "geprueft". Vorher waere alles rot,
   obwohl noch niemand etwas falsch gemacht hat. Sobald ein Feld
   ausgefuellt ist, verschwindet die Markierung von selbst. */
.buchung.geprueft input:invalid,
.buchung.geprueft textarea:invalid,
.buchung.geprueft select:invalid {
  background: var(--rot-zart);
  border-color: var(--rot);
}
.buchung.geprueft .formfeld.zeiger-aktiv input:invalid,
.buchung.geprueft .formfeld.zeiger-aktiv select:invalid {
  background: var(--rot-zart);
  border-color: var(--rot);
}
/* Das unsichtbare Auswahlfeld kann man nicht sehen - deshalb faerbt
   sich der sichtbare Knopf daneben. */
.buchung.geprueft .auswahl:has(select:invalid) .auswahl__knopf,
.auswahl__knopf--fehlt {
  background: var(--rot-zart);
  border-color: var(--rot);
}
/* Nicht gesetzte Haken (AGB, Bestaetigung) */
.buchung.geprueft .zustimmung:has(input:invalid) {
  background: var(--rot-zart);
  border-radius: 8px;
  padding: 0.7rem 0.9rem;
  margin-left: -0.9rem; margin-right: -0.9rem;
}
.buchung.geprueft .haken:has(input:invalid) { border-color: var(--rot); }

/* Auswahl zwischen mehreren Preisen */
.wahlgruppe { display: grid; gap: 0.6rem; }
.wahl {
  display: flex; align-items: center; gap: 0.7rem;
  padding: 0.75rem 0.95rem;
  border: 1px solid var(--linie); border-radius: 8px;
  cursor: pointer;
  transition: background-color 0.18s ease-out, border-color 0.18s ease-out;
}
.wahl.zeiger-aktiv { background: var(--orange-zart); border-color: var(--orange); }
.wahl:has(input:checked) { border-color: var(--blau); background: var(--blau-sehrhell); }
.wahl input { accent-color: var(--blau); width: 1.1rem; height: 1.1rem; }

/* Liste von Kaestchen zum Ankreuzen (z. B. im Fahrtkostenantrag) */
.hakenliste { display: grid; gap: 0.55rem; margin-top: 0.4rem; }
.haken {
  display: flex; align-items: flex-start; gap: 0.7rem;
  padding: 0.55rem 0.75rem;
  border: 1px solid var(--linie); border-radius: 8px;
  cursor: pointer;
  transition: background-color 0.18s ease-out, border-color 0.18s ease-out;
}
.haken.zeiger-aktiv { background: var(--orange-zart); border-color: var(--orange); }
.haken input { margin-top: 0.2rem; width: 1.1rem; height: 1.1rem; accent-color: var(--blau); flex: none; }
.haken:has(input:checked) { border-color: var(--blau); background: var(--blau-sehrhell); }
.haken__notiz { color: var(--schrift-grau); font-size: 0.88rem; }

.buchung__fest { list-style: none; padding: 0; margin: 0; }
.buchung__fest li {
  padding: 0.65rem 0.95rem;
  background: var(--flaeche-grau);
  border-radius: 8px;
  font-size: 0.97rem;
}

/* Ein Kasten je Teilnehmer */
.teilnehmer {
  border: 1px dashed var(--linie); border-radius: 8px;
  padding: 1rem 1.2rem 1.2rem; margin: 0 0 1rem;
}
.teilnehmer__kopf { font-weight: 700; font-size: 0.97rem; margin: 0 0 0.9rem; }
.teilnehmer__weg { margin-top: 1rem; }
.teilnehmer:first-of-type .teilnehmer__weg { display: none; }
.knopf--klein { padding: 0.5rem 1rem; font-size: 0.92rem; }

/* Haekchen "Ich nehme selbst teil" - uebernimmt die Angaben von oben */
.zustimmung--selbst {
  margin: 0 0 1.2rem;
  padding: 0.8rem 1rem;
  background: var(--blau-sehrhell);
  border-radius: 8px;
  font-size: 0.97rem;
}
/* Uebernommene Felder: sichtbar, aber nicht doppelt zu pflegen */
.teilnehmer--uebernommen input[readonly] {
  background: var(--flaeche-grau);
  color: var(--schrift-grau);
  cursor: not-allowed;
}
.teilnehmer--uebernommen .formfeld.zeiger-aktiv input[readonly] {
  background: var(--flaeche-grau); border-color: var(--feldrand);
}
/* Die Anrede: ihr Knopf steht für das unsichtbare Auswahlfeld (siehe script.js). */
.teilnehmer--uebernommen .auswahl__knopf:disabled,
.teilnehmer--uebernommen .auswahl__knopf.zeiger-aktiv:disabled {
  background: var(--flaeche-grau); border-color: var(--feldrand);
  color: var(--schrift-grau);
  cursor: not-allowed;
}

/* Die Bestaetigung steht unmittelbar ueber der Schaltflaeche zum
   Abschicken - beim Klicken soll klar sein, was man bestaetigt. */
.zustimmung--absenden {
  margin: 1.6rem 0 1.2rem;
  padding: 0.9rem 1.1rem;
  background: var(--flaeche-grau);
  border-radius: 8px;
}

/* Hinweis oben auf der Seite: Weiter unten steht ein Formular.
   Sitzt rechts neben dem Text, damit der freie Platz genutzt wird und
   niemand erst bis ganz nach unten scrollen muss, um es zu finden. */
.formularhinweis {
  background: var(--blau-sehrhell);
  border-left: 4px solid var(--blau);
  border-radius: 0 var(--radius) var(--radius) 0;
  padding: 1.2rem 1.3rem;
  margin: 0 0 1.5rem;
}
.formularhinweis strong { display: block; color: var(--blau-dunkel); margin-bottom: 0.4rem; }
.formularhinweis p { font-size: 0.93rem; color: var(--schrift-grau); margin-bottom: 0.9rem; }
@media (min-width: 900px) {
  .formularhinweis { float: right; width: 20rem; margin: 0.3rem 0 1.5rem 2.5rem; }
}

.zustimmung { margin: 1.6rem 0 0; }
.zustimmung label { display: flex; gap: 0.7rem; align-items: flex-start; cursor: pointer; }
.zustimmung input { margin-top: 0.3rem; width: 1.1rem; height: 1.1rem; accent-color: var(--blau); flex: none; }

/* Spamschutz: dieses Feld ist fuer Menschen unsichtbar. Es wird nicht
   mit display:none ausgeblendet, weil manche Programme das erkennen. */
.falle { position: absolute; left: -9999px; width: 1px; height: 1px; overflow: hidden; }

/* --- Umfragen (26.09.2026) ------------------------------------------
   Eine Umfrage steht wie ein Antrag auf einer Seite, mit denselben
   grauen Kaesten. Neu sind nur der Satz zur Anonymitaet und die
   Skala 1 bis 5. */

/* Der Satz zur Anonymitaet steht VOR den Fragen - wer ueberlegt, ob er
   ehrlich antwortet, soll ihn gelesen haben, bevor er anfaengt. */
.umfrage__anonym {
  background: var(--blau-sehrhell);
  border-left: 4px solid var(--blau);
  border-radius: 0 8px 8px 0;
  padding: 0.8rem 1rem;
  font-size: 0.95rem;
  margin: 0 0 1.4rem;
}

/* DIE FRAGEN SELBST (sein Wunsch, 26.09.2026, spaet: „die gehen irgendwie
   so ein bisschen unter … ich muss erst noch suchen“). Vorher trugen sie
   die Beschriftung eines Antragsfelds - klein, grau, 14,7 px - und waren
   damit KLEINER als die Aussagen darunter (15,5 px, schwarz). In einem
   Antrag passt das, dort ist „Name“ nur ein Schild am Feld. In einer
   Umfrage ist die Frage die Hauptsache: schwarz, fett, 17 px, und mehr
   Luft zur naechsten Frage, damit jede als eigener Block steht. */
.buchung[data-umfrage] .formfeld__schild,
.buchung[data-umfrage] .formfeld > label {
  font-size: 1.08rem; font-weight: 700; line-height: 1.35;
  color: var(--schrift);
}
.buchung[data-umfrage] .formraster { row-gap: 1.9rem; }
.buchung[data-umfrage] .formfeld { gap: 0.55rem; }

/* SKALA 1 BIS 5
   Fuenf gleich breite Knoepfe, 46 Bildpunkte hoch - mit Handschuhen und
   auf einem alten Handy zu treffen. Das Optionsfeld liegt unsichtbar
   ueber der Zahl (nicht ausgeblendet): So springt der Browser bei einer
   fehlenden Antwort genau dorthin. Gewaehlt heisst blau gefuellt - wie
   ein angekreuztes Kaestchen im Rest des Formulars. */
.skala__rahmen { display: block; max-width: 24rem; }
/* Ueber der Reihe links das Wort fuer die 1, rechts das fuer die 5 -
   seit 26.09.2026, spaet, ohne „1 =“ und „5 =“ (sein Wunsch). Das rechte
   steht rechtsbuendig, damit es auch zweizeilig am Rand bleibt. */
.skala__enden {
  display: flex; justify-content: space-between; gap: 1rem;
  font-size: 0.875rem; color: var(--schrift-grau);
  margin: 0.15rem 0 0.35rem;
}
.skala__enden span:last-child { text-align: right; }
/* 8 px zwischen den Knoepfen - weniger, und der Daumen trifft den
   Nachbarn (Geraetecheck 26.09.2026). */
.skala__reihe { display: flex; gap: 0.5rem; }
.skala__wert {
  position: relative; flex: 1 1 0; min-width: 0;
  cursor: pointer; -webkit-tap-highlight-color: transparent;
}
.skala__wert input {
  position: absolute; left: 0; top: 0; width: 100%; height: 100%;
  margin: 0; opacity: 0; cursor: pointer;
}
.skala__wert span {
  display: flex; align-items: center; justify-content: center;
  min-height: 2.9rem;
  /* Rand 3,2 : 1 statt der hellen Linie (1,25 : 1): Bei Sonne sah man
     sonst nur fuenf Zahlen und keine Knoepfe. Derselbe Wert wie bei den
     Feldern in den Fenstern der Verwaltung (18.09.2026). */
  border: 1px solid var(--feldrand); border-radius: 8px;
  background: #fff; color: var(--blau-dunkel);
  font-weight: 700; font-size: 1.05rem;
  transition: background-color 0.18s ease-out, border-color 0.18s ease-out;
}
.skala__wert.zeiger-aktiv span,
.skala__wert:active span { background: var(--orange-zart); border-color: var(--orange); }
.skala__wert input:checked + span {
  background: var(--blau); border-color: var(--blau); color: #fff;
}
.skala__wert input:focus-visible + span { box-shadow: 0 0 0 3px rgba(45, 67, 143, 0.3); }
.buchung.geprueft .skala__reihe:has(input:invalid) span {
  background: var(--rot-zart); border-color: var(--rot);
}

/* „KANN ICH NICHT BEURTEILEN“ (27.09.2026) - nur an Fragen, an denen es
   eingeschaltet ist. Unter der Reihe, klein und gestrichelt umrandet:
   Es ist keine sechste Stufe, sondern „keine Angabe“, und soll auch
   nicht so aussehen, als gehoere es zur Skala. Gewaehlt wird es blau
   gefuellt wie eine Zahl - gewaehlt sieht ueberall gleich aus.
   40 px hoch (Handschuhe), Schrift 14 px grau (6,4 : 1). */
.skala__gruppe { display: block; }
.skala__ohne {
  position: relative; display: inline-flex; margin-top: 0.5rem;
  cursor: pointer; -webkit-tap-highlight-color: transparent;
}
.skala__ohne input {
  position: absolute; left: 0; top: 0; width: 100%; height: 100%;
  margin: 0; opacity: 0; cursor: pointer;
}
.skala__ohne span {
  display: inline-flex; align-items: center; min-height: 2.5rem; padding: 0 1rem;
  border: 1px dashed var(--feldrand); border-radius: 999px;
  background: #fff; color: var(--schrift-grau); font-size: 0.875rem;
  transition: background-color 0.18s ease-out, border-color 0.18s ease-out;
}
.skala__ohne.zeiger-aktiv span,
.skala__ohne:active span { background: var(--orange-zart); border-color: var(--orange); }
.skala__ohne input:checked + span {
  background: var(--blau); border: 1px solid var(--blau); color: #fff; font-weight: 700;
}
.skala__ohne input:focus-visible + span { box-shadow: 0 0 0 3px rgba(45, 67, 143, 0.3); }
.buchung.geprueft .skala__gruppe:has(input:invalid) .skala__ohne span {
  background: var(--rot-zart); border-color: var(--rot);
}

/* Mehrere Aussagen mit derselben Skala. Am Handy steht jede Aussage
   ueber ihrer Reihe, die Zeile mit den beiden Randwoertern nur einmal
   ganz oben.
   Ab 640 px stehen Aussage und Reihe nebeneinander, die Zeile oben
   genau ueber den Knoepfen. */
.skala__tabelle { display: grid; gap: 0.9rem; }
.skala__zeile { display: grid; gap: 0.35rem; }
.skala__zeile--kopf .skala__aussage { display: none; }
.skala__aussage { font-size: 0.97rem; }
.skala__zeile--kopf .skala__enden { margin: 0; }
@media (min-width: 640px) {
  .skala__tabelle { gap: 0.55rem; }
  .skala__zeile {
    grid-template-columns: minmax(0, 1fr) 17rem;
    column-gap: 1.2rem; align-items: center;
  }
  .skala__zeile--kopf .skala__aussage { display: block; }
  .skala__zeile:not(.skala__zeile--kopf) + .skala__zeile {
    border-top: 1px solid var(--linie); padding-top: 0.55rem;
  }
}

/* DER HINWEIS AUF DER STARTSEITE - direkt unter dem Startbild, nur wenn
   an der Umfrage eingeschaltet.

   SEIN WUNSCH (26.09.2026, spaet): kein Streifen ueber die ganze Breite,
   sondern „eher wie eine kleine eigene Kachel, so ein bisschen wie eine
   Dynamic Island“ (die schwarze Kapsel oben am iPhone), und nur so breit
   wie der Inhalt der Seite: vom linken Rand der Terminkacheln bis zum
   rechten Rand des blauen Gaestehaus-Kastens. Genau das ist die Breite
   von `.bereich` ohne seinen Innenabstand - deshalb sitzt die Kachel
   einfach darin und waechst und schrumpft mit allem anderen.

   Dunkelblau statt Schwarz: die Hausfarbe, und weisse Schrift darauf
   hat 11,9 : 1. Die Marke „Umfrage“ ist eine kleine orange Kapsel wie
   die Vorzeile im Startbild, aber mit dunkler Schrift (5,8 : 1 - weiss
   auf diesem Orange haette nur 3 : 1). Der Knopf ist der weisse aus dem
   Startbild. Die Ecken: 2 rem - einzeilig am PC ist das eine Kapsel,
   zweizeilig am Handy eine Kachel mit runden Ecken; eine volle Kapsel
   wuerde dort die Schrift in den Ecken anschneiden.

   Mehrere Umfragen: je eine Kachel, untereinander. */
.umfragestreifen { padding-top: clamp(1.25rem, 3vw, 2rem); }
/* Der Abschnitt darunter hat oben seinen vollen Abstand (bis 88 px) - mit
   der Kachel dazwischen stuende sie naeher am Bild als an dem, was folgt,
   und saehe aus wie ein Anhaengsel des Startbilds. */
.umfragestreifen + .abschnitt { padding-top: clamp(2rem, 4.5vw, 3.25rem); }
/* Rechts 1,4 rem (27.09.2026, zwei Schritte nach seinem Wunsch): erst
   „minimal weiter nach links, wirklich nur ein ganz ganz kleines Stueck“
   - 0,8 auf 1,1 rem, so viel wie links vor der Marke -, dann „das gleiche
   Stueck noch mal weiter nach links, dann passt es“ - 1,4 rem. Der Knopf
   sitzt damit 22,4 px vom rechten Rand statt urspruenglich 12,8 px. */
.umfragestreifen__zeile {
  display: flex; flex-wrap: wrap; align-items: center; gap: 0.6rem 1rem;
  margin: 0;
  padding: 0.8rem 1.4rem 0.8rem 1.1rem;
  background: var(--blau-dunkel); color: #fff;
  /* Ganz runde Enden (27.09.2026, sein Wort: „rechts und links genau an
     den Raendern noch ein klein wenig abgeflacht“). Vorher 2 rem = 32 px
     bei 70 px Hoehe - ein Halbkreis braucht 35 px, also blieb an jedem
     Ende ein 6 px hohes gerades Stueck. 999 px ergibt immer einen
     Halbkreis, auch wenn ein langer Titel die Kachel hoeher macht. Die
     Marke links und der Knopf rechts liegen weit genug innen. */
  border-radius: 999px;
  box-shadow: 0 6px 18px rgba(34, 51, 110, 0.18);
  position: relative;
  -webkit-tap-highlight-color: transparent;
  transition: background-color 0.18s, box-shadow 0.18s, transform 0.18s;
}
.umfragestreifen .bereich > * + * { margin-top: 0.75rem; }

/* DIE GANZE KACHEL IST DER VERWEIS - auch am PC (27.09.2026). Vorher war
   dort nur der Knopf anklickbar. Seit sie beim Darueberfahren orange
   umrandet wird wie jede Kachel, muss sie es auch sein: Orange heisst auf
   dieser Website „anklickbar“. Der Verweis legt eine unsichtbare Flaeche
   ueber die ganze Kapsel. */
.umfragestreifen__knopf::after {
  content: ""; position: absolute; inset: 0; border-radius: 999px;
}

/* HERVORHEBUNG WIE BEI DEN KACHELN (27.09.2026, sein Wunsch: „die
   orangene Umrandung ... so umsetzen wie sonst auch auf der Website“).
   Gesteuert wie Kacheln und Termine ueber eine Klasse aus script.js
   („umfrage-aktiv“, am PC unter dem Mauszeiger, am Handy beim
   Beruehren), dazu :active. Wie dort: oranger Rand und 3 px nach rechts.
   Der Rand liegt innen (Schatten statt Rahmen), sonst wuerde die Kapsel
   beim Darueberfahren 4 px groesser. Orange auf dem Dunkelblau: 4,0 : 1.

   DIE KAPSEL SELBST: NUR DER RAND (27.09.2026, spaetabends, sein Wort:
   „nur die orangene Umrandung der Kachel, keine orangene Hinterlegung
   zusaetzlich notwendig. Auf dem Handy das selbe“). Zuerst wurde sie
   dabei eine Stufe heller blau - wieder heraus.

   DER KNOPF AM PC: WIE DIE KNOEPFE IM STARTBILD (27.09.2026, gleich
   danach, sein Wort: „was orange hinterlegt werden kann, ist der weisse
   Bereich bei dem Button Jetzt mitmachen, dieser kann auch noch mal
   orange umrandet werden auf der PC-Version“). Dafuer braucht es keine
   eigene Regel: Die ganze Kapsel ist der Verweis, also setzt das Skript
   dem Knopf „zeiger-aktiv“, sobald der Mauszeiger irgendwo auf der
   Kapsel liegt - und .knopf--hell faerbt ihn wie im Startbild zartorange
   mit orangem Rand (beim Klicken kraeftig orange). Am Handy bleibt der
   Pfeilkreis unveraendert orange (Regel im Handy-Block unten). */
.umfragestreifen__zeile.umfrage-aktiv,
.umfragestreifen__zeile:active {
  box-shadow: 0 6px 18px rgba(34, 51, 110, 0.18), inset 0 0 0 2px var(--orange);
  transform: translateX(3px);
}
.umfragestreifen__marke {
  flex: none;
  font-size: 0.875rem; font-weight: 700; letter-spacing: 0.08em;
  text-transform: uppercase;
  background: var(--orange); color: var(--schrift);
  border-radius: 999px; padding: 0.3rem 0.75rem;
}
.umfragestreifen__titel { flex: 1 1 8rem; font-weight: 700; color: #fff; }
.umfragestreifen__knopf { flex: none; }
/* Zeichen und Pfeil gibt es nur am Handy (siehe unten). */
.umfragestreifen__zeichen, .umfragestreifen__pfeil { display: none; }

/* AM HANDY EINE KAPSEL (27.09.2026, seine Wahl nach den Vorschlaegen
   A-D): links das Umfrage-Zeichen, rechts der orange Pfeilkreis - sie
   ersetzen das Wort „Umfrage“ und den grossen Knopf (beide bleiben fuer
   Vorleseprogramme da). Die ganze Kapsel ist antippbar: Der Verweis legt
   eine unsichtbare Flaeche ueber sie (::after).

   Immer eine Kapsel mit runden Enden: Die beiden Kreise fuellen die
   Rundungen aus, die Schrift steht dazwischen und wird nie angeschnitten.

   Groesse: erst „ein Mix aus A und B“ (sein Wort) - Kreise 36 und 40 px
   (A 40/44, B 32/36), 7 px Innenabstand, 10 px zwischen den Teilen,
   Schrift 16 px. Dann „zwischen allen anderen Sachen doch ein wenig klein
   ... wirklich nur minimal, alles etwas groesser“: Kreise 38 und 42 px,
   Zeichen darin 21 und 23 px, 8 px Innenabstand, 11 px zwischen den
   Teilen, Schrift 17 px (fast wie die Titel der Terminkarten darunter,
   17,6 px).

   „Minimal breiter, aber nicht an den Raendern klebend, und passend zu
   den Terminen darunter“: 6 px je Seite ueber die Inhaltsbreite hinaus.
   Grund: Runde Enden wirken schmaler als die eckigen Terminkarten - ragt
   die Kapsel ein wenig hinaus, stehen die Kanten fuers Auge buendig
   (dasselbe tun runde Buchstaben an der Grundlinie). Bleiben 14 px zum
   Bildschirmrand.

   Der Titel steht immer ganz da. Braucht er mehr als zwei Zeilen, wird
   die Schrift kleiner - erst 16, dann 15, dann 14 px (nicht kleiner:
   Regel „kein Text unter 14 px“). Das misst script.js am echten Geraet
   und setzt data-stufe; ohne Skript bleiben es 17 px. */
@media (max-width: 559px) {
  .umfragestreifen__zeile {
    flex-wrap: nowrap; gap: 0.6875rem;
    margin: 0 -0.375rem; padding: 0.5rem;
  }
  .umfragestreifen__zeichen {
    display: flex; flex: none; align-items: center; justify-content: center;
    width: 2.375rem; height: 2.375rem; border-radius: 50%;
    background: var(--orange); color: var(--schrift);
  }
  .umfragestreifen__zeichen svg { width: 21px; height: 21px; }
  .umfragestreifen__marke,
  .umfragestreifen__knopftext {
    position: absolute; width: 1px; height: 1px;
    padding: 0; margin: -1px; overflow: hidden;
    clip: rect(0 0 0 0); white-space: nowrap; border: 0;
  }
  .umfragestreifen__titel {
    flex: 1 1 auto; min-width: 0;
    padding: 0.25rem 0; font-size: 1.0625rem; line-height: 1.3;
    text-wrap: balance;
  }
  .umfragestreifen__titel[data-stufe="1"] { font-size: 1rem; }
  .umfragestreifen__titel[data-stufe="2"] { font-size: 0.9375rem; }
  .umfragestreifen__titel[data-stufe="3"] { font-size: 0.875rem; }
  .umfragestreifen__knopf,
  .umfragestreifen__knopf.zeiger-aktiv,
  .umfragestreifen__knopf:active,
  .umfragestreifen__zeile.umfrage-aktiv .umfragestreifen__knopf {
    flex: none; justify-content: center; gap: 0;
    width: 2.625rem; height: 2.625rem; padding: 0;
    border: 0; border-radius: 50%;
    background: var(--orange); color: var(--schrift);
  }
  .umfragestreifen__pfeil { display: block; flex: none; width: 23px; height: 23px; }
}

/* Meldungen des Formulars */
.buchung__fehler {
  margin: 0 0 1.5rem; padding: 1rem 1.2rem;
  background: var(--orange-zart);
  border-left: 4px solid var(--orange);
  border-radius: 0 8px 8px 0;
}
.buchung__fehler ul { margin: 0.5rem 0 0; }

/* Uebersicht vor dem endgueltigen Abschicken */
.uebersicht__block { margin-bottom: 2rem; }
.uebersicht__block h2 {
  font-size: 1.15rem; padding-left: 0.9rem;
  border-left: 4px solid var(--blau); margin-bottom: 0.8rem;
}
.buchung__mitschrift {
  white-space: pre-wrap; font-size: 0.9rem;
  background: var(--flaeche-grau); padding: 1.2rem;
  border-radius: var(--radius); overflow-x: auto;
}

/* =====================================================================
   Kleinigkeiten
   ===================================================================== */

.nur-fuer-screenreader {
  position: absolute; width: 1px; height: 1px;
  padding: 0; margin: -1px; overflow: hidden;
  clip: rect(0 0 0 0); white-space: nowrap; border: 0;
}

.zurueck-link { display: inline-block; margin-bottom: 1.5rem; font-weight: 600; }
.zurueck-link::before { content: "\2190  "; }

/* ---------------------------------------------------------------------
   Zurück zum Seitenanfang

   Ein runder Knopf unten rechts, wie ihn der AGV Bau Saar auf seiner
   Website hat. Er ist in Wirklichkeit ein Verweis auf `#seitenanfang` -
   damit funktioniert er auch ohne JavaScript. Sichtbar wird er erst,
   wenn wirklich etwas zu scrollen war; das schaltet `script.js` über
   die Klasse `nach-oben--da`.

   Warum unten RECHTS und nicht links: Links steht auf dem Handy nichts,
   rechts liegt der Daumen. Und `bottom` rechnet mit dem sicheren
   Bereich, damit der Knopf auf dem iPhone nicht in der Streifenleiste
   klebt. */
.nach-oben {
  position: fixed;
  right: clamp(0.9rem, 3vw, 2rem);
  bottom: calc(clamp(0.9rem, 3vw, 2rem) + env(safe-area-inset-bottom, 0px));
  z-index: 90;
  width: 3rem; height: 3rem;
  display: grid; place-items: center;
  border-radius: 50%;
  background: var(--blau);
  color: #fff;
  font-size: 1.5rem; line-height: 1;
  text-decoration: none;
  /* Der zweite Schatten ist ein weisser Ring. Ganz unten steht der
     Knopf sonst blau auf dem dunkelblauen Fussbereich und ist dort
     kaum noch zu sehen. */
  box-shadow: 0 3px 12px rgba(0, 0, 0, 0.22), 0 0 0 2px rgba(255, 255, 255, 0.9);
  /* Bis script.js ihn einschaltet, ist er weg - aber nicht `display:
     none`: Sonst gäbe es nichts, was ein- und ausblenden könnte. */
  opacity: 0;
  visibility: hidden;
  transform: translateY(0.6rem);
  transition: opacity 0.18s, transform 0.18s, visibility 0.18s, background 0.18s;
}
.nach-oben--da { opacity: 1; visibility: visible; transform: none; }
.nach-oben:focus-visible { background: var(--orange); color: #fff; }
@media (hover: hover) { .nach-oben:hover { background: var(--orange); color: #fff; } }   /* nur mit Mauszeiger, siehe a:hover */
/* Ohne JavaScript bliebe der Knopf unsichtbar. Deshalb schaltet ihn die
   Tastatur beim Anspringen ebenfalls sichtbar. */
.nach-oben:focus-visible { opacity: 1; visibility: visible; transform: none; }

@media (prefers-reduced-motion: reduce) {
  .nach-oben { transition: none; transform: none; }
}

/* ---------------------------------------------------------------------
   Bilder groß ansehen

   Ein Foto legt sich über die ganze Seite: schwarz drumherum, das Bild
   in der Mitte, ✕ oben rechts, ‹ und › an den Seiten, unten die
   Zählung. Gebaut wird das Ganze von `script.js`; hier steht nur, wie
   es aussieht.

   Warum die Knöpfe so groß sind: Sie liegen über einem Foto, und ein
   Foto kann an dieser Stelle hell oder dunkel sein. Deshalb hat jeder
   Knopf einen eigenen dunklen Kreis unter sich - ein weißes Zeichen
   allein wäre auf einem hellen Himmel unsichtbar. 3 rem sind 48
   Bildpunkte; das trifft man auch mit Handschuhen. */
.bildschau {
  position: fixed;
  inset: 0;
  z-index: 200;
  display: grid;
  grid-template-columns: auto 1fr auto;
  grid-template-rows: 1fr auto;
  align-items: center;
  gap: 0.5rem;
  padding: clamp(0.6rem, 2vw, 1.5rem);
  background: rgba(0, 0, 0, 0.92);
  /* Der Finger soll das Bild wischen und nicht die Seite dahinter. */
  touch-action: none;
}
.bildschau[hidden] { display: none; }

.bildschau__mitte {
  grid-column: 1 / -1;
  grid-row: 1;
  display: grid;
  place-items: center;
  min-height: 0;
  min-width: 0;
  height: 100%;
}
/* Die Breite rechnet script.js aus: so groß wie möglich, aber höchstens
   doppelt so groß wie das Bild wirklich ist. Grund: Ein Teil der
   übernommenen Fotos ist nur 300 Bildpunkte breit. `max-width` allein
   half da nicht - eine Grenze zieht ein Bild nicht groß. Ohne die
   Rechnung stünde so ein Foto winzig mitten im schwarzen Feld, und es
   sähe aus, als sei beim Klicken nichts passiert. Doppelt ist bei einem
   Foto noch anständig, weiter aufgeblasen wird es matschig. */
.bildschau__bild {
  max-width: 100%;
  max-height: 100%;
  height: auto;
  border-radius: 6px;
  background: #111;
}

.bildschau__zu,
.bildschau__pfeil {
  width: 3rem; height: 3rem;
  display: grid; place-items: center;
  border: 0;
  border-radius: 50%;
  background: rgba(0, 0, 0, 0.55);
  color: #fff;
  cursor: pointer;
  line-height: 1;
  padding: 0;
  /* Der Ring hält den Knopf auch auf einem weißen Foto sichtbar. */
  box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.35);
  transition: background 0.15s;
}
/* EINE UMRANDUNG, NICHT ZWEI (02.10.2026). Der Nutzer sah am ✕ einen
   blauen und einen grauen Ring zugleich: den hellen Ring von oben und den
   blauen Fokusring der allgemeinen Regel (`:focus-visible`) - „da bitte
   für eine Umrandung entscheiden“. Entschieden: Es bleibt der helle Ring.
   Mit der Tastatur angesprungen wird DERSELBE Ring breit und ganz weiß,
   statt dass ein zweiter dazukommt. Blau wäre auf dem schwarzen Grund
   ohnehin kaum zu sehen (gerechnet 2,0 : 1, gefordert sind 3 : 1). Beim Öffnen bekommt die Hülle
   den Fokus, nicht mehr das ✕ (script.js) - deshalb steht anfangs an
   keinem Knopf ein breiter Ring. */
.bildschau:focus,
.bildschau:focus-visible { outline: none; }
.bildschau__zu:focus-visible,
.bildschau__pfeil:focus-visible {
  outline: none;
  box-shadow: 0 0 0 3px #fff;
}
/* Orange heißt auf dieser Website "hier kann man klicken" - deshalb nur
   beim Darüberfahren. */
@media (hover: hover) {   /* nur mit Mauszeiger, siehe a:hover */
  .bildschau__zu:hover, .bildschau__pfeil:hover {
    background: var(--orange);
  }
}
.bildschau__zu {
  position: absolute;
  top: clamp(0.6rem, 2vw, 1.5rem);
  right: clamp(0.6rem, 2vw, 1.5rem);
  z-index: 2;
}
.bildschau__pfeil {
  grid-row: 1;
  z-index: 2;
}
/* ✕, ‹ und › GEZEICHNET STATT GESCHRIEBEN (02.10.2026). Als Schriftzeichen
   standen sie dort, wo die Schrift sie hinsetzt - in Safari die Pfeile
   3 Bildpunkte zu tief (nachgemessen), mit `padding-bottom` nur notdürftig
   gehoben. Der Nutzer: „Da ist der Pfeil aber noch nicht perfekt mittig in
   dem Knopf“. Jetzt sind es kleine Zeichnungen (SVG als Maske, gefüllt mit
   der Schriftfarbe), jede um die Mitte ihres Kastens gezeichnet - sie
   stehen in jedem Browser und mit jeder Schrift genau in der Mitte des
   Kreises. Dasselbe Verfahren wie beim „?“ im Hinweiskasten der
   Verwaltung. */
.bildschau__zeichen {
  display: block;
  background: currentColor;
  -webkit-mask: var(--zeichen) center / contain no-repeat;
          mask: var(--zeichen) center / contain no-repeat;
}
.bildschau__zu .bildschau__zeichen {
  width: 1.25rem; height: 1.25rem;
  --zeichen: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.4' stroke-linecap='round'%3E%3Cpath d='M6 6l12 12M18 6L6 18'/%3E%3C/svg%3E");
}
.bildschau__pfeil .bildschau__zeichen { width: 1.75rem; height: 1.75rem; }
/* Dieselben zwei Pfeile trägt die Menüzeile, wenn sie sich schieben
   lässt (`.navi-pfeil`, oben bei der Kopfleiste). */
.bildschau__pfeil--zurueck .bildschau__zeichen,
.navi-pfeil--links .bildschau__zeichen {
  --zeichen: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M15.5 5l-7 7 7 7'/%3E%3C/svg%3E");
}
.bildschau__pfeil--vor .bildschau__zeichen,
.navi-pfeil--rechts .bildschau__zeichen {
  --zeichen: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M8.5 5l7 7-7 7'/%3E%3C/svg%3E");
}
/* Im Kontrastmodus von Windows malt der Browser Flächen in seiner eigenen
   Farbe - ohne diese Zeile wären die Zeichen dort unsichtbar. */
@media (forced-colors: active) {
  .bildschau__zeichen { background: ButtonText; forced-color-adjust: none; }
}
.bildschau__pfeil--zurueck { grid-column: 1; justify-self: start; }
.bildschau__pfeil--vor     { grid-column: 3; justify-self: end; }
.bildschau__pfeil[hidden]  { display: none; }

.bildschau__fuss {
  grid-column: 1 / -1;
  grid-row: 2;
  margin: 0;
  text-align: center;
  color: rgba(255, 255, 255, 0.9);
  font-size: 0.9rem;
  line-height: 1.4;
}
.bildschau__text { display: block; }
.bildschau__text[hidden] { display: none; }
.bildschau__zaehler { color: rgba(255, 255, 255, 0.6); font-size: 0.82rem; }

/* Solange ein Bild offen ist, steht die Seite dahinter still - sonst
   scrollt sie unter dem Foto weg, und beim Schließen ist man woanders. */
body.bild-offen { overflow: hidden; }
body.bild-offen .nach-oben { display: none; }

/* Ein Bild, das sich vergrößern lässt, zeigt das auch. Die Regeln sind
   dieselben wie in `script.js` bei `grossesBild()`: Fotos ja, Kacheln
   und Startbild nein, ein Bild in einem Verweis nur dann, wenn der
   Verweis auf eine Bilddatei zeigt. */
main img { cursor: zoom-in; }
main a img,
main .hero img,
main .karte img,
main .kachel img,
main .neu-kachel img { cursor: inherit; }
main a[href$=".jpg"] img, main a[href$=".JPG"] img,
main a[href$=".jpeg"] img, main a[href$=".png"] img,
main a[href$=".gif"] img { cursor: zoom-in; }

@media (prefers-reduced-motion: reduce) {
  .bildschau__zu, .bildschau__pfeil { transition: none; }
}

@media print {
  .bildschau { display: none !important; }
  .kopf, .fuss, .burger, .mobilnavi, .filterleiste, .mehr-laden,
  .nach-oben { display: none !important; }
  body { font-size: 11pt; }
  .hero { color: #000; background: none; min-height: 0; }
}

/* AUF DEM HANDY ERSCHEINT DIE HERVORHEBUNG SOFORT (23.09.2026)
   ---------------------------------------------------------------------
   Beim Einbau der Finger-Hervorhebung (script.js, 3b) nachgerechnet und
   daran fast gescheitert: Der Uebergang dauert 0,18 s - die Markierung
   beim Antippen aber nur 0,12 s. Das Orange waere nie angekommen; man
   haette ein blasses Flackern gesehen und sonst nichts.

   Auf einem Geraet ohne Mauszeiger gibt es kein langsames Heranfahren,
   auf das sich ein Uebergang lohnt - es gibt nur "Finger drauf" und
   "Finger weg". Deshalb schalten diese Stellen dort den Uebergang ab
   und springen sofort um. Das deckt sich mit der eigenen Geraeteregel
   ("keine Animation ueber 150 ms - auf einem alten Geraet ist jede
   Bewegung Wartezeit"). Am PC bleibt alles, wie es war.

   24.09.2026: STEHT JETZT GANZ AM ENDE DER DATEI - UND WIRKT ERST DAMIT.
   Bis heute stand dieser Block mitten in der Datei, hinter den Kacheln,
   aber VOR den Terminen, Dateiknoepfen, Netzwerk-Symbolen und der
   Kurs-Zeitleiste. Deren eigene Zeile `transition: 0.18s` kam spaeter und
   gewann - bei genau diesen Stellen lief das Orange am Handy also weiter
   weich ein und erreichte in 180 ms nie ganz seine Farbe. Aufgefallen
   beim Nachmessen von „Mehr anzeigen" (das Feld stand nach dem Antippen
   bei 64 % statt 100 %). Am Ende der Datei kann keine spaetere Zeile
   ihn mehr ueberstimmen. Die Zeitleiste braucht zusaetzlich ihren
   vollen Namen (`.kursleiste .kursleiste__verweis`), weil ihre eigene
   Regel so geschrieben ist. */
@media (hover: none) {
  .kachel, .karte, .karte__titel a, .termin, .knopf, .dateiblock,
  .partnerliste a, .sozial a, .sozial svg,
  .kursleiste .kursleiste__verweis, .kursleiste .kursleiste__verweis::before,
  .inhalt tbody tr, .tabelle tbody tr, .mobilnavi a,
  .termin__mehr, .termin__mehr::before, .skala__wert span {
    transition: none;
  }
}
