/*
 * Neutraler Standardsatz (ADR-0024).
 *
 * Erscheinung — Farben, Wappen, Schriften — ist Mandantendatum nach ADR-0003.
 * Sie kommt spaeter als CSS-Variablen je Mandant; hier stehen nur die
 * Vorgabewerte.
 *
 * HIER STAND BIS ZUM 28.08.2026: "Bis zum zweiten Verein genuegt das."
 * ADR-0046 hat diesen Aufschub abgeloest und nennt genau diese Stelle in
 * seinen Konsequenzen: Die Erscheinung je Verein wartet nicht mehr auf den
 * zweiten Verein. Der Satz wird mitgezogen, sonst steht die alte Begruendung
 * ueber dem neuen Code.
 *
 * Was der Standardsatz IST, steht bei ihm selbst (Suchwort --verein).
 *
 * Eigene Datei statt inline, damit die Content-Security-Policy ohne
 * 'unsafe-inline' auskommt (kern/sicherheit.php).
 */

:root {
  /* ---------------------------------------------------------------------
     DER SEITENGRUND IST NICHT WEISS (ADR-0031).

     --grund ist die Seitenflaeche HINTER den Karten, --karte die Karte
     selbst. Weiss auf Weiss waere eine Flaechentrennung von 1,00 — die
     Karte waere buchstaeblich unsichtbar, und der Bausteinsatz aus
     ADR-0024 setzt eine Trennung voraus. Gemessen sind es 1,23.

     Daraus folgt eine Regel, die man nicht sieht, wenn man sie nicht
     kennt: --grund-tief steht NIE direkt auf --grund. Die stille Flaeche
     erreicht dort nur 1,12 und verschwindet. Sie gehoert in eine Karte,
     wo sie mit 1,38 traegt. Wer eine stille Flaeche ausserhalb einer
     Karte braucht, braucht eine Karte.
     --------------------------------------------------------------------- */
  --karte: #ffffff;
  --grund: #e4e9e4;
  --grund-tief: #d6ddd7;

  /* Fliesstext im ganzen Portal. EIN Schwarzton, nicht zwei — vorher stand
     hier --schrift #1c1c1c neben --tinte #1b211e, zwei Namen fuer eine
     Sache (Tokensatz, Nachtrag der Umsetzung). Gegen --grund 13,31. */
  --tinte: #1b211e;
  --tinte-leise: #556059;

  /* Zwei Linien, und der Unterschied ist keine Geschmacksfrage:
     --linie ist ZIERLINIE (Zeilentrenner) und erreicht auf der Karte nur
     1,60. --linie-stark traegt die Raender aller BEDIENELEMENTE und haelt
     mit 4,48 die Schwelle aus WCAG 1.4.11. Ein Feldrand in --linie waere
     ein Verstoss. */
  --linie: #c6cfc8;
  --linie-stark: #6b7b70;

  /* Rot ist Hauptaktion UND Gefahr, sonst nichts (ADR-0024) — deshalb ein
     Token und nicht zwei. Weisse Schrift darauf: 7,49. */
  --gefahr: #a81622;
  --gefahr-schrift: #ffffff;

  --ok: #1c6b39;
  --info: #1b5a96;
  --hinweis: #74571c;

  /* ---------------------------------------------------------------------
     MESSING MARKIERT AUSSCHLIESSLICH VERPFLICHTUNG (ADR-0030).

     Wo Messing steht, muss jemand etwas tun: eine Faelligkeit, eine offene
     Rueckgabe, eine Frist, ein Befund, der eine Entscheidung verlangt.
     "Wichtig" ist nicht "verpflichtend".

     Messing ist NIE Text. Ausschliesslich Flaeche und Linie — damit greift
     die Textschwelle 4,5:1 nicht, sondern die Nichttext-Schwelle 3:1.
     Gemessen: gegen --karte 4,97, gegen --grund 4,04, gegen --grund-tief
     3,60, gegen --verein-hell mindestens 3,35 — zugesichert ist >= 3,34
     (Vorgaben, korrigiert am 19.08.2026).

     EINE erlaubte Ausnahme, und nur diese eine:

      1. DIE TRENNKANTE UNTER DEM KOPFBAND (.kopf unten). Sie grenzt an die
         Vereinsfarbe, die beliebig dunkel sein kann; gegen #2B3A67 sind es
         nur 2,22. Das ist hinnehmbar, weil eine Kante zwischen zwei Flaechen
         keine Zustandsanzeige ist und nicht unter WCAG 1.4.11 faellt.
         DIESER KOMMENTAR IST DIE BEGRUENDUNG — ohne ihn meldet die naechste
         Pruefung die Kante als Verstoss.

     AUSNAHME 2 IST AUFGEHOBEN, SOWEIT SIE SCHRIFT IST (ADR-0030, Nachtrag vom
     28.08.2026, Entscheidung des Betreibers). Hier stand bis dahin: "DAS
     PRODUKTZEICHEN SELBST (.fuss-marke)" — und damit war Messing als
     SCHRIFTton im Fussband erlaubt. DIE VERBOTSLISTE DESSELBEN ADR SAGT SEIT
     DEM ERSTEN TAG DAS GEGENTEIL: "Messing auf Ueberschriften, MARKEN oder
     Kennzahlen", Zeile 41, unter "Nicht erlaubt, auch wenn es gut aussieht".
     Beides stand nebeneinander, und niemand hat es gegeneinander gehalten.

     Die Wortmarke im Fuss fuehrt --tinte (wortmarke-tinte.svg). Zugesichert
     in 120_farbe.php, und zwar in der DATEI und nicht nur hier: Die Marke
     besteht aus zwei <img>, ihre Farbe steht im SVG und nicht in diesem
     Stilblatt.

     DIE BILDMARKE IST DAVON NICHT BERUEHRT. Sie ist kein Text; ob sie den Ton
     behaelt, entscheidet der Betreiber mit Design (ADR-0049). Hier wird
     nichts erschlossen.

     Weitere Ausnahmen gibt es nicht. Eine zweite braucht ein neues ADR.
     --------------------------------------------------------------------- */
  --messing: #8a6b2e;

  /* Form, Mass, Bewegung. */
  --abstand: 1rem;
  --radius: 6px;
  --radius-gross: 10px;
  --dauer: 140ms;

  /* DIE ABSTANDSSKALA (Gestaltungsanweisung Uebersicht, 20.08.2026).
     Zwischen zwei Zonenkarten am Schreibtisch 14px, am Handy 10px. Der Wert
     wechselt in der Bruchkante weiter unten und nirgends sonst — wer ihn an
     einer Karte einzeln setzt, hat zwei Skalen. */
  --zonenabstand: 14px;

  /* DAS ZEILENMASS. Steht als Token, weil body und Karte es teilen und weil
     eine Zahl, die an zwei Stellen steht, an einer davon veraltet. */
  --zeilenmass: 1.5;

  /* DIE SATZBREITE (Uebersicht-Vorgaben, Abschnitt 2). Das zweite Mass, das
     fehlte: die ZeilenLAENGE. Die Inhaltsspalte ist 68 rem breit, ein Absatz
     laeuft darin ueber etwa 135 Zeichen — mehr als das Doppelte des Lesbaren.

     HIER STAND BIS ZUM 29.08.2026: "66 und nicht 74 wie auf Papier: Am
     Schreibtisch haelt 66 die Zeile." DER SATZ WAR RICHTIG UND DIE ZAHL IST
     ES NICHT MEHR — Design hat am 29.08.2026 auf 72ch entschieden
     (anweisung-farbe-dunkelmodus-inhaltsbreite.md, Punkt 6), nachdem der Kern
     gemeldet hatte, dass 66ch im Fliesstextgrad nur 525 px von 1060 px
     Kartenbreite belegen.

     WARUM NICHT 75ch, und das ist Designs Begruendung und nicht unsere: 75ch
     ist das obere Ende der Lesbarkeitsspanne. "Der Leser dieses Vereins ist
     jenseits 50 und liest im Vereinsheim. Das obere Ende einer Spanne ist kein
     Zielwert."

     DIE 426 px, DIE IM BESTAND ALS UNTERE GRENZE HERUMSTANDEN, WAREN EIN
     ZWEITER SCHRIFTGRAD und kein Rundungsfehler: Sie messen 66ch in
     --grad-klein (13px). Design im Wortlaut: "Die Spanne ist kein
     Rundungsfehler, sondern zwei Grade."

     Sie gilt fuer LAUFENDEN TEXT — Absaetze, Einleitungen einer Zone,
     Meldungstexte, der Satz des leeren Falls. NICHT fuer Zeilen in
     Faelligkeitszonen, Tabellenzellen, Titel, Kicker, Feldbeschriftungen: Die
     sind kurz, und eine Grenze bricht sie nur frueher.

     ES GIBT NUR DEN NAMEN --satzbreite. Design fuehrte in den eigenen Dateien
     zeitweise --satz-breite mit 74ch daneben und hat das am 29.08.2026
     widerrufen (Punkt 10). Der Name mit Bindestrich ist in KEINER Datei zu
     verwenden; 060_bedienkonzept.php haelt das zu.

     GEWAEHLT, nicht gerechnet. */
  --satzbreite: 72ch;

  /* DIE ZEILENHOEHE (Auftrag App-Eindruck, Abschnitt 2). 56px, weil am Handy
     der Daumen trifft und 44px das Minimum ist — die 12px darueber halten die
     Zeile lesbar. Hergeleitet.

     Der Auftrag nennt sie sein einziges neues Token. Aus ihm sind vier
     geworden: --zeile-hoehe, --grad-seitentitel, --grad-seitentitel-schmal
     (Antwort auf Rueckfrage 2) und --karte-innen-schmal (Antwort auf
     Rueckfrage 6). Die Zahl im Auftrag ist der Stand vom 20.08.2026 vormittags
     und nicht falsch gewesen — sie ist ueberholt. */
  --zeile-hoehe: 56px;

  /* DIE RAENDER (Kopfband-Vorgaben, Abschnitt 3). Bis zum 20.08.2026 stand
     ueberall --abstand. Ein Mass fuer alles ist kein Mass.

     Alle drei Saetze sind GEWAEHLT, mit einem gemeinsamen Verhaeltnis: unten
     mehr als oben (rund 1 : 1,2), weil eine Seite unten Luft braucht, damit sie
     endet und nicht abbricht. Die Werte je Bruchkante stehen dort. */
  --seitenrand: 20px;
  --randoben: 22px;
  --randunten: 26px;

  /* Beide Schriften sind ausgeliefert und gebunden: fuenf @font-face weiter
     unten, fuenf Dateien in oeffentlich/schriften/, Lizenztexte daneben.
     Der Rueckfall auf system-ui und Georgia bleibt trotzdem in der Kette —
     ein Ladefehler darf die Oberflaeche nicht unlesbar machen.

     Bis zum 20.08.2026 stand hier "NICHT ausgeliefert ... im Repository
     liegen sie nicht". Der Satz hat einen Bericht der Gestaltung in die Irre
     gefuehrt: Er steht da, wo man ihn liest, wenn man von oben liest, und
     widerspricht der Datei, in der er steht. */
  --schrift-text: "Source Sans 3", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  /* ZAHLEN IN BITTER PRO BRAUCHEN tabular-nums, Zahlen in Source Sans 3
     nicht. Der Grund ist gemessen und nicht Geschmack: Bitter laeuft
     proportional (432 bis 635 Einheiten je Ziffer) und bringt das Merkmal
     tnum mit; Source Sans laeuft ohnehin gleich breit (497 fuer alle zehn)
     und hat gar kein tnum — dort waere es wirkungslos.

     Wer also eine Zahlenkolonne in den Zierschnitt setzt, setzt
     font-variant-numeric: tabular-nums dazu. Sonst tanzen die Spalten.
     Genau der Fall, fuer den der Zierschnitt vorgesehen ist: Zahlen in
     Auswertungen. Ein Test haelt das an jeder Regel, die ihn verwendet. */
  --schrift-zier: "Bitter Pro", Georgia, serif;

  /* Nie unter 16px im Fliesstext. --grad-klein sind 13px und damit die
     Untergrenze fuer Text auf --grund-tief (Tokensatz, Abschnitt 5). */
  --grad-klein: 0.8125rem;
  --grad-text: 1rem;
  --grad-gross: 1.25rem;
  --grad-titel: 1.625rem;

  /* DER SEITENTITEL HAT EINEN EIGENEN GRAD (Gestaltung, 20.08.2026, Antwort
     auf Rueckfrage 2). Bis dahin trug er 30px auf Zonenseiten und
     --grad-titel (26px) sonst — dieselbe Ueberschrift in zwei Groessen, je
     nachdem ob eine Uebergangsliste abgearbeitet ist. Das war in beiden
     Groessen falsch.

     GEWAEHLT sind die 30px, und der Grund ist die Lage: Der Seitentitel ist
     die einzige Schrift, die auf --grund steht — ohne Karte, ohne Kante, ohne
     Kicker. Er hat nichts, was ihn traegt, ausser seinem Grad. Bei 26px liegt
     er zu nah an den Kartentiteln, die auf Weiss stehen und dort optisch
     groesser wirken.

     HERGELEITET sind die 25px am Handy: der groesste Grad, in dem die
     laengste Ueberschrift des Bestands bei 390px in zwei Zeilen bleibt.

     --grad-titel bleibt, wo er hingehoert: Kartentitel. */
  --grad-seitentitel: 1.875rem;
  --grad-seitentitel-schmal: 1.5625rem;

  /* EIN TOKEN FUER ZWEI STELLEN, DAMIT SIE NICHT AUSEINANDERLAUFEN KOENNEN
     (Gestaltung, Antwort auf Rueckfrage 6): der Innenabstand der Karte am
     Handy UND der Einzug des Seitenkopfs. Unter 700px stehen Seitentitel,
     Rueckverweis und Karteninhalt auf derselben senkrechten Kante; zwei
     getrennte 16 waeren zwei Zahlen ueber dieselbe Sache. */
  --karte-innen-schmal: 16px;
}

/* ---------------------------------------------------------------------------
   Die Schriften. Selbst ausgeliefert, kein Fremdhost — die CSP erlaubt
   font-src 'self', und der Ausfall eines fremden Hosts waere unser Ausfall.

   font-display: swap ist Pflicht und keine Feinheit: Ohne sie bleibt der Text
   bis zu drei Sekunden unsichtbar, waehrend die Datei laedt. Der Rueckfall auf
   system-ui und Georgia waere dann formal vorhanden und praktisch nie zu sehen.

   Bitter Pro hat NUR zwei Schnitte, 600 und 700, und das ist Absicht: Es ist
   reine Auszeichnung — Seitentitel, Wortmarke, Zahlen in Auswertungen. Kein
   Regular. Wer einen dritten Schnitt nachlaedt, hat die Schrift zur
   Fliesstextschrift gemacht.

   DIE FAMILIE WIRD HIER BENANNT, NICHT AUS DER DATEI GELESEN. Die name-Tabelle
   der beiden Bitter-Dateien nennt sie weiterhin "Bitter Thin" — ein bekanntes
   Verhalten des Instanziierers, der die Namen beim Festsetzen der Gewichte
   nicht nachzieht. Ohne Folge, solange font-family und font-weight hier stehen.
   Wer das fuer einen Fehler haelt und die Dateien "richtigstellt", tauscht eine
   geprueft eingegangene Datei gegen eine selbstgebaute.

   Die Pfade sind relativ zu dieser Datei und nicht ab Wurzel: So traegt das
   Stylesheet auch, wenn das Portal einmal unter einem Unterpfad liegt.

   Herkunft, Fassung und Lizenz stehen in DRITTANBIETER.md, die Lizenztexte
   liegen neben den Dateien — die OFL verlangt ihre Mitlieferung.
   --------------------------------------------------------------------------- */
@font-face {
  font-family: "Source Sans 3";
  src: url("schriften/SourceSans3-Regular.woff2") format("woff2");
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Source Sans 3";
  src: url("schriften/SourceSans3-SemiBold.woff2") format("woff2");
  font-weight: 600;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Source Sans 3";
  src: url("schriften/SourceSans3-Bold.woff2") format("woff2");
  font-weight: 700;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Bitter Pro";
  src: url("schriften/BitterPro-SemiBold.woff2") format("woff2");
  font-weight: 600;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Bitter Pro";
  src: url("schriften/BitterPro-Bold.woff2") format("woff2");
  font-weight: 700;
  font-style: normal;
  font-display: swap;
}

* { box-sizing: border-box; }

body {
  margin: 0;
  background: var(--grund);
  color: var(--tinte);
  font: var(--grad-text)/var(--zeilenmass) var(--schrift-text);
}

/* ---------------------------------------------------------------------------
   DER VERWEIS (Gestaltungsanweisung Uebersicht, 20.08.2026).

   --tinte mit 1px --linie-stark darunter. KEIN BLAU und keine eigene
   Linkfarbe: Das Portal traegt drei bedeutungstragende Farben — Vereinsfarbe
   fuer Zugehoerigkeit, Messing fuer Verpflichtung, Rot fuer Hauptaktion und
   Gefahr (ADR-0030). Eine vierte fuer "hier kann man klicken" waere die
   vierte, und ADR-0030 verlangt dafuer ein eigenes ADR.

   Der Unterstrich und nicht text-decoration: Er sitzt tiefer, er traegt seine
   eigene Farbe, und er ueberlebt eine Zeile, die umbricht. Die Farbe ist
   --linie-stark, weil sie gegen alle drei Flaechen ueber 3,0 haelt — dieselbe
   Zahl, die 120_farbe an jedem Rand eines Bedienelements misst.

   Das Kopfband ist ausgenommen: Dort steht weisse Schrift auf der
   Vereinsfarbe, und ein --tinte-Verweis waere dort unlesbar.
   --------------------------------------------------------------------------- */
.inhalt a,
.fuss a {
  color: var(--tinte);
  text-decoration: none;
  border-bottom: 1px solid var(--linie-stark);
}
.inhalt a:hover,
.inhalt a:focus-visible,
.fuss a:hover,
.fuss a:focus-visible {
  border-bottom-color: var(--tinte);
}
/* Knoepfe sind keine Verweise. Ein Knopf, der als Verweis gebaut ist, traegt
   seine eigene Form und nicht zusaetzlich einen Unterstrich. */
.inhalt a.knopf-haupt,
.inhalt a.knopf-still,
.inhalt a.knopf-plus,
.inhalt a.knopf-zeile {
  border-bottom: 0;
}

/* ---------------------------------------------------------------------------
   DAS KOPFBAND IN DREI BREITEN (Kopfband-Vorgaben, Abschnitte 1 und 2).

   Bis zum 20.08.2026 gab es genau eine Fassung, und die brach um: Unter 700px
   stand das Band auf drei Zeilen und frass ein Sechstel des Bildschirms, bevor
   Inhalt kam. Keine Vorgabe hatte je etwas darueber gesagt.

   Jetzt drei Fassungen mit gemessenen Grenzen:

     ab 1120px   eine Zeile, 72px hoch
     700-1119px  zwei Zeilen, 115px hoch, Navigation offen
     unter 700px eine Zeile, 62px hoch, Navigation im Menue

   DIE 1120 SIND HERGELEITET, nicht gerundet: Wappen 38 + 12 + Vereinsname von
   22 Zeichen (rund 200) + 28 + Haarlinie + 28 + fuenf Eintraege (rund 400) +
   28 + Kontoname (rund 130) + 16 + Abmelden (rund 108) + 48 Innenabstand =
   1094px. Der Aufschlag auf 1120 ist die Reserve fuer einen laengeren Namen.

   DIE 13px INNENABSTAND SIND GERECHNET: Das hoechste Teil im Band ist Abmelden
   mit 44px Treffbereich (ADR-0024). 13 + 44 + 13 = 70, mit der Kante 72 — das
   ist auf einem Bildschirm von 800px ein Elftel statt eines Sechstels.

   DER VEREINSNAME KUERZT, DIE NAVIGATION NIE. Ein Modul, das still aus dem
   Band faellt, ist fuer den Nutzer nicht vorhanden; ein gekuerzter Vereinsname
   ist eine Unschoenheit, ein fehlendes Modul ein Fehler.
   --------------------------------------------------------------------------- */

.kopf {
  display: flex;
  align-items: center;
  gap: 28px;
  padding: 13px 24px;
  flex-wrap: nowrap;
  position: sticky;
  top: 0;
  z-index: 20;
}

/* Der Namensblock kuerzt. min-width: 0 ist die Bedingung dafuer, dass
   text-overflow in einem Flex-Kind ueberhaupt greift. */
.kopf-name {
  display: inline-flex;
  align-items: center;
  gap: 12px;
  flex: 1 1 auto;
  min-width: 0;
  font-size: 18px;
  font-weight: 600;
  text-decoration: none;
  color: inherit;
}
.kopf-name span {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* DIE SENKRECHTE HAARLINIE IST FORT (Vorgabe 27.08.2026, Abschnitt 3.1).
   Sie trennte Zugehoerigkeit von Bedienung. Im Band steht seit E1 keine
   Bedienung mehr ausser Abmelden, also gibt es nichts mehr zu trennen. Hier
   stand `.kopf-strich`; die Regel ist geloescht und nicht auskommentiert.

   `.kopf-nav` IST EBENFALLS FORT. Die Navigation steht in drei eigenen
   Fassungen weiter unten — Seitenleiste, Modulzeile, Fussleiste. */

/* Der rechte Block wird GESCHOBEN, nicht getrennt. Keine zweite Linie: Eine
   Linie markiert eine Grenze, zwei markieren keine. */
.kopf-ich {
  margin-left: auto;
  padding-left: 8px;
  display: flex;
  align-items: center;
  gap: 16px;
  flex: none;
}
.kopf-ich form { margin: 0; }

/* ---------------------------------------------------------------------------
   DAS BENUTZERZEICHEN IM BAND (Design, 29.08.2026, Punkt 12, Bauteile q und r).

   ES STEHT NEBEN `.kopf-ich` UND NICHT DARIN, und das ist der tragende Teil
   dieses Bauteils: `.kopf-ich` ist unter der E4-Bedingung `display: none`.
   Das Zeichen IST die Geraetefassung des Weges zum eigenen Konto — steckte es
   in `.kopf-ich`, waere es genau dort weg, wo es gebraucht wird.

   `align-self: stretch` UND NICHT `align-items: center` DES BANDES: Die
   weisse Flaeche des offenen Zustands muss bis an die Bandunterkante reichen
   und die Messingkante ueberdecken. Ein zentriertes Kind kennt seinen Abstand
   zur Bandunterkante nicht; ein gedehntes ist genau so hoch wie der
   Inhaltskasten des Bandes, und was darunter noch fehlt, ist der
   Innenabstand plus die Kante — beides feste Zahlen je Bruchkante.

   DAHER `--band-unterhang`: der Weg von der Unterkante dieses Elements bis
   unter die Messingkante. 13px Innenabstand + 2px Kante = 15; unter der
   E4-Bedingung 8 + 2 = 10. WER DEN INNENABSTAND VON `.kopf` AENDERT, AENDERT
   DIESE ZAHL MIT — sie steht deshalb neben ihm im selben Medienblock und
   nicht hier als Literal.
   --------------------------------------------------------------------------- */
.kopf-benutzer {
  --band-unterhang: 15px;
  /* 72 Band + 7 Hals. Unter der E4-Bedingung 62 + 7 + 60 Fussleiste. */
  --flaeche-luft: 79px;
  /* DER RUECKZUG STEHT GENAU EINMAL IM BLATT, und die Bruchstellen setzen nur
     noch die ZAHL. Zuerst stand `margin-right` in beiden Medienblöcken; die
     Zusicherung „Kein Rand aus einer Bruchstelle wird spaeter von einer
     Grundregel ueberholt" (060_bedienkonzept.php) hat es angeschlagen. Sie
     hatte im Ergebnis unrecht — die zwei Bloecke schliessen einander aus —,
     und im Verfahren recht: Wer zwei Raender an denselben Selektor haengt,
     verlaesst sich darauf, dass zwei Medienbedingungen sich nie ueberlappen.
     Eine Zahl in einer Marke kann das nicht. */
  margin-right: var(--zeichen-rueckzug, 0px);
  position: relative;
  flex: none;
  align-self: stretch;
  display: flex;
  align-items: center;
}

/* DER TREFFBEREICH IST 44 x 44 px (ADR-0024, Nachtrag vom 27.08.2026: "Der
   Treffbereich jeder Handlung betraegt am Geraet mindestens 44 px. Er gilt
   fuer ... Bandeintrag."). Das Zeichen darin misst 24px — die Mindestgroesse
   der Zeichenliste. */
.kopf-benutzer > summary {
  cursor: pointer;
  list-style: none;
  width: 44px;
  height: 44px;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: var(--radius);
  position: relative;
}
.kopf-benutzer > summary::-webkit-details-marker { display: none; }

/* DER RING NIMMT DIE SCHRIFTFARBE UND IST DESHALB IN BEIDEN ZUSTAENDEN
   SICHTBAR: geschlossen weiss auf der Vereinsfarbe, geoeffnet --tinte auf
   --karte. Ein fester Ton waere in einem der zwei Zustaende unsichtbar — das
   ist derselbe Fall, den `.geraet-menue > summary:focus-visible` am
   27.08.2026 hatte. */
.kopf-benutzer > summary:focus-visible {
  outline: 2px solid currentColor;
  outline-offset: -2px;
}

/* DAS ZEICHEN KOMMT ALS MASKE, wie die Navigationszeichen und aus demselben
   Grund: Ueber `<img src=…>` greift `currentColor` nicht, und dieses Zeichen
   traegt zwei Toene. `.nav-zeichen` wird NICHT wiederverwendet — es ist die
   Klasse der Navigation, und das Benutzerzeichen ist keine
   (tests/faelle/175_navigation.php haelt jene Klasse gegen die
   Menuereihenfolge). */
.kopf-zeichen {
  display: block;
  width: 24px;
  height: 24px;
  flex: none;
  position: relative;
  background-color: currentColor;
  -webkit-mask-image: url(zeichen/person.svg);
          mask-image: url(zeichen/person.svg);
  -webkit-mask-repeat: no-repeat;
          mask-repeat: no-repeat;
  -webkit-mask-position: center;
          mask-position: center;
  -webkit-mask-size: contain;
          mask-size: contain;
}

/* DAS ZEICHENFELD IM OFFENEN ZUSTAND — der obere Teil der Verbindung.

   `z-index: -1` legt es HINTER das Zeichen und VOR die Flaeche und die
   Messingkante des Bandes: Ein negativer Index bleibt im Stapelkontext von
   `.kopf` (position: sticky, z-index: 20) und malt dort ueber dessen eigenen
   Hintergrund und Rand, aber unter jeden Inhalt. Genau das verlangt Design:
   "Es reicht bis an die Bandunterkante und ueberdeckt die Messinglinie auf
   seinen 44 px." */
.kopf-benutzer[open]::before {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  top: calc(50% - 22px);
  bottom: 0;
  border-radius: var(--radius) var(--radius) 0 0;
  background: var(--karte);
  z-index: -1;
}

/* DER HALS — 44px breit, also GENAU SO BREIT WIE DAS ZEICHENFELD, und 7px
   lang. Design: "Er ist die einzige Verbindung", "sie schwebt nicht".

   ER IST EIN ZWEITES PSEUDOELEMENT UND KEIN LAENGERES ERSTES, und der Grund
   ist die Kante der Flaeche: Die Flaeche traegt oben 1px `--linie`, und die
   liefe quer durch den Hals. Der Hals liegt deshalb DARUEBER (z-index 28
   gegen 27) und reicht 1px in die Flaeche hinein.

   Seine Laenge ist `--band-unterhang` + 7 + 1: vom Ende des gedehnten
   Kastens bis unter die Bandkante, dann die 7px des Halses, dann das eine
   Pixel ueber die Kante der Flaeche. */
.kopf-benutzer[open]::after {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  top: 100%;
  height: calc(var(--band-unterhang) + 8px);
  background: var(--karte);
  z-index: 28;
}

/* DIE FLAECHE HINTER DEM ZEICHEN. 270px, rechts buendig mit dem Zeichenfeld —
   nur so trifft der 44px breite Hals ihre Oberkante.

   OBEN RECHTS SCHARF: Design nennt den Grund, und er ist geometrisch. Der
   Hals sitzt in den rechten 44px der Oberkante; eine Rundung dort schnitte
   ihm eine Kerbe in die Verbindung.

   KEIN SCHATTEN: "Der Bestand kennt keine schwebenden Flaechen. Fuss,
   Modulzeile und Fussleiste sind Baender mit einer Kante." Das ist der
   Unterschied zu `.mehr-flaeche` und `.menue-flaeche`, die beide einen
   tragen — sie haengen an nichts. */
.kopf-benutzer-flaeche {
  position: absolute;
  top: calc(100% + var(--band-unterhang) + 7px);
  right: 0;
  width: 270px;
  background: var(--karte);
  border: 1px solid var(--linie);
  border-radius: var(--radius);
  border-top-right-radius: 0;
  padding: 0 16px 12px;
  /* SIE IST NACH UNTEN BEGRENZT UND ROLLT — wie `.mehr-flaeche` (70vh) und
     `.menue-flaeche` (100dvh - 122px), und aus deren Grund.

     HEUTE PASST SIE OHNEHIN: zwei Zeilen, 162,5px, gemessen am 29.08.2026 bei
     390 x 844. DIE VORGABE NENNT SIEBEN — dann sind es rund 400px, und im
     Querformat (844 x 390, E4 ueber die Hoehenbedingung) liefe die letzte
     Zeile aus dem Bild. Die letzte Zeile ist `Abmelden`, und unter der
     E4-Bedingung ist sie der EINZIGE Weg hinaus.

     `--flaeche-luft` ist, was ueber und unter der Flaeche verbraucht ist:
     Bandhoehe plus die 7px des Halses, unter E4 zusaetzlich die 60px der
     Fussleiste. Gemessen am 29.08.2026: Band 62px am Geraet, 72px ab 700px. */
  max-height: calc(100dvh - var(--flaeche-luft));
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
  z-index: 27;
}

/* DER KOPF DER FLAECHE. Er traegt heute NUR DEN NAMEN — die Rolle fehlt, und
   das ist gemessen und gemeldet: `ich()` liefert sie nicht, und
   `rollen_der_person()` liefert eine LISTE. Welche davon hier steht, ist
   nicht entschieden. Der Kommentar in kern/ansicht/kopf.php nennt den Preis
   beider Wege. */
.kopf-benutzer-kopfzeile {
  font-family: var(--schrift-zier);
  font-variant-numeric: tabular-nums;
  font-size: 19px;
  margin: 0;
  padding: 14px 0 10px;
}

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

/* 48px JE ZEILE (Design, Punkt 12) — mehr als die 44px des Treffbereichs und
   weniger als die 56px der Modulzeilen (`--zeile-hoehe`). Es ist eine eigene
   Zahl der Vorgabe und wird deshalb hingeschrieben statt aus einer der zwei
   bestehenden abgeleitet. */
.kopf-benutzer-weg {
  display: flex;
  align-items: center;
  min-height: 48px;
  font-size: 17px;
  text-decoration: none;
  border-bottom: 1px solid var(--linie);
}
.kopf-benutzer-weg:hover,
.kopf-benutzer-weg:focus-visible { text-decoration: underline; text-underline-offset: 3px; }

.kopf-benutzer-austritt { margin: 0; }

/* `Abmelden` IST DIE EINZIGE HANDLUNG IN EINER LISTE VON WEGEN und steht
   zuletzt, halbfett (Design, Punkt 12). Es sieht aus wie eine Zeile und ist
   ein Knopf: Ein Verweis, der abmeldet, waere eine Handlung hinter einem GET.

   ES TRAEGT KEINE FLAECHE UND KEINEN RAND — es ist kein `knopf-still` in
   einem Formularfuss, sondern die letzte Zeile einer Liste. */
.kopf-benutzer-abmelden {
  display: flex;
  align-items: center;
  width: 100%;
  min-height: 48px;
  padding: 0;
  background: none;
  border: 0;
  font-family: inherit;
  font-size: 17px;
  font-weight: 600;
  color: inherit;
  text-align: left;
  cursor: pointer;
}
.kopf-benutzer-abmelden:hover,
.kopf-benutzer-abmelden:focus-visible { text-decoration: underline; text-underline-offset: 3px; }

/* ---------------------------------------------------------------------------
   DAS ZEICHEN AM SCHREIBTISCH (Design, Punkt 12: "32 px am Schreibtisch. Das
   Zeichen steht als Marke davor, 32 px, 9 px Abstand. Kein Umbau des
   Bandes.").

   DIESELBE BEDINGUNG WIE DIE SEITENLEISTE (E1) und nicht `min-width` allein:
   Ein Telefon im Querformat ist 844px breit und faellt unter E4 — dort gilt
   die Geraetefassung mit 24px, sonst stuende das grosse Zeichen in einem
   62px hohen Band.

   DIE 9 PX SIND EINE RECHNUNG AUS VIER BEKANNTEN ZAHLEN, und sie steht als
   calc da, damit sie beim naechsten Griff mitgelesen wird:

     -  9  der gewuenschte Abstand zwischen Zeichen und Name
     -  6  das Spiel im Treffbereich: (44 - 32) / 2
     - 28  `.kopf { gap }`
     -  8  `.kopf-ich { padding-left }`

   WER EINE DIESER VIER ZAHLEN AENDERT, AENDERT DIE ABSTAENDE HIER MIT. Das
   ist der Preis dafuer, dass das Zeichen NEBEN `.kopf-ich` steht und nicht
   darin — und dass es dort steht, ist die E4-Bedingung und keine Wahl.

   GEMELDET, WEIL UNGEPRUEFT: Ob die 9px vom ZEICHEN oder vom TREFFBEREICH aus
   gelten, sagt die Anweisung nicht. Gebaut ist "vom Zeichen", weil der Satz
   das Zeichen zum Subjekt hat. Das Beiblatt
   `pruefung/benutzerzeichen-29-08-2026.html`, das es entscheiden wuerde, ist
   nicht mitgeliefert worden.
   --------------------------------------------------------------------------- */
/* DER ABSTAND ZUM NAMEN GILT UEBERALL, WO `.kopf-ich` SICHTBAR IST — also ab
   700px und ab 451px Hoehe, nicht erst am Schreibtisch.

   HIER FIEL DER BEREICH 700 BIS 1119 DURCH BEIDE BLOECKE (gefunden vom Skill
   code-review am 29.08.2026, nachgemessen bei 900 x 700): Das Zeichen stand
   dort 46px vom Namen — 10px Spiel im Feld, 28px Bandabstand, 8px
   Innenabstand von `.kopf-ich` — statt der verlangten 9. Es sah aus wie eine
   Marke ohne Zugehoerigkeit.

   ZWEI BLOECKE UND NICHT EINER, weil das Spiel im 44-px-Feld von der
   Zeichengroesse abhaengt: (44 - 24) / 2 = 10 hier, (44 - 32) / 2 = 6 am
   Schreibtisch. Die Rechnung steht in beiden als calc und nicht als Ergebnis. */
@media (min-width: 700px) and (min-height: 451px) {
  .kopf-benutzer { --zeichen-rueckzug: calc(9px - 10px - 28px - 8px); }
}

@media (min-width: 1120px) and (min-height: 451px) {
  .kopf-zeichen { width: 32px; height: 32px; }
  .kopf-benutzer { --zeichen-rueckzug: calc(9px - 6px - 28px - 8px); }
  /* DIE KANTE FAELLT AM SCHREIBTISCH WEG — die Regel dafuer steht im
     Farbabschnitt und nicht hier. SIE MUSS DORT STEHEN: Die weisse Kante wird
     unten gesetzt, und ein Medienblock erhoeht die Spezifitaet nicht. Ein
     `border-color: transparent` an dieser Stelle waere von der spaeteren
     Regel ueberschrieben worden — gemessen, nicht vermutet. */
}

/* Die drei Navigationsfassungen sind im Grundzustand ALLE AUS und schalten
   sich je in ihrem eigenen Medienblock ein (siehe "DIE NAVIGATION IN DREI
   FASSUNGEN" weiter unten). Drei Bedingungen, die einander ausschliessen,
   sind leichter richtig zu halten als drei, die einander ueberschreiben —
   und display:none nimmt eine Fassung auch der Vorlesehilfe, statt sie ihr
   als zweite Liste derselben Ziele vorzulegen. */
.seitenleiste,
.modulzeile,
.fussleiste { display: none; }

/* Seitentitel und Kartenueberschrift: der Zierschnitt, sonst nirgends.
   tabular-nums, weil Bitter Pro proportionale Ziffern hat (siehe :root).

   EIN GRAD FUER JEDES h1 IM INHALT, mit Zonen oder ohne (Gestaltung,
   20.08.2026, Antwort auf Rueckfrage 2). Bis dahin stand hier --grad-titel
   (26px) und weiter unten fuer Zonenseiten 30px — dieselbe Ueberschrift in
   zwei Groessen, je nachdem ob die Uebergangsliste fuer diese Seite schon
   abgearbeitet ist. Das war in beiden Groessen falsch, und es waere mit der
   letzten Modulseite stillschweigend verschwunden, ohne dass jemand
   entschieden haette, welcher Grad gilt.

   --grad-titel IST DAMIT UNBENUTZT, und das steht hier, weil der Kommentar
   sonst eine Regel behauptet, die es nicht gibt: Die Antwort sagt, er bleibe
   "wo er hingehoert: Kartentitel" — im Stilblatt gibt es aber keine Regel fuer
   h2 im Inhalt. Gemessen: `var(--grad-titel)` kommt null mal vor, und die
   einzige h2-Regel ist `.fenster h2` mit --grad-gross. Die Kartentitel tragen
   heute den Vorgabewert des Browsers. Das ist eine Luecke in der Vorgabe und
   keine im Bau — sie ist gemeldet, und bis sie entschieden ist, bleibt das
   Token stehen, statt still zu verschwinden. Begruendung der beiden Werte des
   Seitentitels am Token. */
.inhalt h1 {
  font-size: var(--grad-seitentitel);
  font-family: var(--schrift-zier);
  font-variant-numeric: tabular-nums;
  margin-top: 0;
}
@media (max-width: 699px) {
  .inhalt h1 { font-size: var(--grad-seitentitel-schmal); }
}

/* ---------------------------------------------------------------------------
   DIE SEITE IST NICHT EINE KARTE MIT ABSCHNITTEN
   (Gestaltungsanweisung Uebersicht, 20.08.2026).

   Jede Zone ist eine EIGENE Karte auf --grund. Der Seitentitel steht auf
   --grund, nicht auf Weiss.

   Das widerspricht ADR-0031 nicht, es setzt ihn zum ersten Mal um: Der ADR
   sagt "darauf stehen weisse Karten" und begruendet sich damit, dass Zone 1
   des Dashboards auf den ersten Blick von Zone 4 unterscheidbar sein muss
   (ADR-0025). Eine einzige Karte ueber die ganze Seite leistet das nicht — sie
   hat genau eine Flaeche, und darin sind alle Zonen gleich.

   DER UEBERGANG STEHT HIER UND IST BENANNT: Seiten, die ihre Zonen selbst
   setzen, tragen `.inhalt.zonen`. Alle uebrigen behalten die eine Karte, bis
   ihre Sitzung sie umstellt — das sind heute die Modulseiten, und sie gehoeren
   nicht dem Kern. Die Liste steht in 060_bedienkonzept und schrumpft; ist sie
   leer, faellt die Regel darunter weg.
   --------------------------------------------------------------------------- */
.inhalt {
  padding: var(--abstand) var(--seitenrand);
  max-width: 1100px;
  margin: var(--randoben) auto var(--randunten);
  background: var(--karte);
  border-radius: var(--radius-gross);
}

/* DIE RAENDER SIND DREI TOKEN, NICHT EINES (Kopfband-Vorgaben, Abschnitt 3).
   --randoben ist der Abstand unter dem Band, --randunten der unter dem Inhalt,
   --seitenrand der seitliche. Sie sind NICHT --zonenabstand: der regelt den
   Abstand ZWISCHEN Karten und bleibt bei 14/10px. */
.inhalt.zonen {
  padding: 0 var(--seitenrand);
  background: none;
  border-radius: 0;
  display: flex;
  flex-direction: column;
  gap: var(--zonenabstand);
}

/* Die Zonenkarte. Weiss auf --grund, damit alles Darinliegende — Listen,
   Formulare, stille Flaechen — sein gewohntes Verhaeltnis zu Weiss behaelt.
   --flaeche steht nie direkt auf --grund (ADR-0031), und das ist der Grund,
   warum eine Zone eine Karte braucht und nicht bloss einen Abstand. */
.karte {
  padding: var(--abstand);
  background: var(--karte);
  border-radius: var(--radius-gross);
}

/* ---------------------------------------------------------------------------
   DIE TEXTKARTE (Design, 29.08.2026, Punkt 6). ZWEI FASSUNGEN, EINE REGEL.

   `.karte` SELBST WIRD NICHT ANGEFASST — das steht so in der Anweisung
   ("`.karte` selbst wird in keinem Fall angefasst"), und der Grund ist
   gemessen: Kolonnenkarten wie das Vereinsbuch oder die Rollenseite behalten
   ihre Breite. Eine Begrenzung an `.karte` haette jede Tabelle mitgenommen.

   WAS DER FALL IST, den beide Fassungen loesen: Bei 1512 px Fensterbreite ist
   die Karte 1060 px breit. Laufender Text darin haelt --satzbreite und belegt
   damit 525 px — die uebrigen 535 px sind leere weisse Flaeche, und der Leser
   sieht eine Karte, die zur Haelfte leer ist. Design im Wortlaut: "wo die
   Flaeche sonst leer bliebe, folgt ihr die Karte."

   AUFGELOEST WURDE DABEI EIN WIDERSPRUCH, DEN DIE FRAGE SELBST ERZEUGT HATTE:
   `kopfband-vorgaben.md:433` verlangt "beides zusammen, nicht eines statt des
   anderen" — Text breiter UND Karte schmaler. Die Frage an den Betreiber war
   als Entweder-oder gestellt ("Karte schmaler ODER Text breiter"), seine
   Antwort BREITER gilt und ist hier enthalten: 66ch -> 72ch, und die Karte
   folgt.

   1. `.textkarte` — DIE KARTE ENDET BEIM SATZ.

   Die Begrenzung steht auf DIESER Klasse und nicht auf `.karte`. Die Rechnung
   ist keine gewaehlte Zahl: --satzbreite ist die INHALTSbreite, die Karte
   traegt links und rechts je `--abstand` Innenabstand, und `box-sizing:
   border-box` gilt im ganzen Blatt (Zeile 276). Also Satzbreite plus zweimal
   Innenabstand.

   UNTER DER BRUCHKANTE IST SIE AUSGESCHALTET, und das steht als Regel im
   Bruchkantenblock — nicht als Annahme hier.

   HIER STAND: „UNTER DER BRUCHKANTE WIRKT SIE NIE ... weil das Fenster die
   Grenze ohnehin unterschreitet." DAS WAR FALSCH, gemessen am 29.08.2026: Die
   Bruchkante liegt bei 700 px, die Begrenzung greift ab rund 606 px. In den
   94 px dazwischen war die Karte randlos UND begrenzt und hoerte vor der
   Geraetekante auf — bei 667 px mit einer Luecke von 62 px.

   GEFUNDEN HAT ES DER SKILL code-review, NICHT DIE KETTE. Der Fall ist die
   Klasse „ein Grund, der den heutigen Zustand beschreibt statt der Bauart":
   Die Aussage stimmte fuer 390 px und fuer 500 px, an denen jeder hinsieht,
   und nicht fuer 667.

   2. `.textkarte-beiwerk` — VOLLE KARTENBREITE, SATZ LINKS, RANDSPALTE RECHTS.

   Beiwerk sind nach Designs Aufzaehlung: Stand (wann beschlossen, wann
   geaendert), Zustaendig (welches Amt), Dazu gehoert (Verweise auf andere
   Module).

   SIE HAT AM 29.08.2026 KEINEN VERWENDER IM BESTAND, und das steht hier mit
   Datum, weil es sonst niemand merkt: Keine Kernseite und keine Modulseite
   traegt heute Beiwerk. Design sagt ausdruecklich "nur wo vorhanden, kein
   Nachtragen erzwungen, eine leere Randspalte gibt es nicht" — es ist also
   kein Versaeumnis, sondern die Vorgabe. WER DIE ERSTE SEITE MIT BEIWERK
   BAUT, IST DER ERSTE, DER DIESE REGEL IM BILD SIEHT; bis dahin ist sie am
   Rendervorgang ungeprueft.

   DIE DREI ZAHLEN SIND DESIGNS UND NICHT UNSERE: Satz --satzbreite, Randspalte
   260 px, dazwischen 32 px und eine Trennlinie in --linie. Die Linie steht als
   linke Kante der Randspalte, also 32 px neben dem Satz; ihr Innenabstand
   haelt den Text der Randspalte von ihr weg. Weicht Design davon ab, ist es
   EINE Zahl an EINER Stelle.
   --------------------------------------------------------------------------- */
.textkarte {
  max-width: calc(var(--satzbreite) + 2 * var(--abstand));
}

.textkarte-beiwerk {
  display: grid;
  grid-template-columns: minmax(0, var(--satzbreite)) 260px;
  column-gap: 32px;
  align-items: start;
}
.textkarte-beiwerk > .beiwerk {
  border-left: 1px solid var(--linie);
  padding-left: 16px;
  font-size: var(--grad-klein);
  color: var(--tinte-leise);
}
/* Unter 1120 px ist fuer zwei Spalten kein Platz: 72ch plus 260 plus 32 plus
   zweimal Innenabstand ueberschreiten die Karte. Dann steht das Beiwerk unter
   dem Satz, und die Trennlinie wandert von links nach oben — sie trennt
   weiterhin dieselben zwei Dinge, nur in der anderen Richtung. */
@media (max-width: 1119px) {
  .textkarte-beiwerk { grid-template-columns: minmax(0, 1fr); row-gap: 32px; }
  .textkarte-beiwerk > .beiwerk {
    border-left: 0;
    border-top: 1px solid var(--linie);
    padding-left: 0;
    padding-top: 16px;
  }
}

/* Der Seitentitel steht auf --grund. Kein Kasten, keine Karte: Er benennt die
   Seite und traegt selbst nichts.

   DER GRAD DES SEITENTITELS STEHT NICHT MEHR HIER, sondern einmal an
   `.inhalt h1` weiter oben: Er gilt fuer jedes h1 im Inhalt, mit Zonen oder
   ohne (Gestaltung, Antwort auf Rueckfrage 2). Hier bleibt nur, was die Zone
   angeht — der Seitenkopf traegt keinen eigenen Aussenabstand, weil der
   Zonenabstand ihn setzt. */
.inhalt.zonen > .seitenkopf {
  margin: 0;
}

/* Der Rueckverweis steht wie der Seitentitel auf --grund und nicht in einer
   Karte. Das widerspricht ADR-0031 nicht: Der ADR verbietet --flaeche direkt
   auf --grund, und ein Verweis ist keine Flaeche — er ist Text mit Unterlinie,
   genau wie die Ueberschrift daneben Text ist.

   Eine eigene Karte um einen einzigen Verweis waere eine Zone, die kein Thema
   hat; im Seitenkopf neben dem Titel waere er eine Aktion, die er nicht ist.
   Beides von der Gestaltung am 20.08.2026 bestaetigt (Antwort auf Rueckfrage
   5), mit zwei Berichtigungen:

   ER STEHT UEBER DEM SEITENKOPF, NICHT DARUNTER. Unter dem Kopf liegt er
   zwischen Titel und erster Karte und liest sich als deren erste Zeile. Ueber
   dem Titel ist er, was er ist: der Weg herein, also auch der Weg hinaus.
   Hergeleitet aus der Leserichtung, nicht gewaehlt — deshalb steht die
   Reihenfolge im Markup und nicht hier.

   UND ER TRAEGT EIN `‹` DAVOR, gespiegelt zum `›` der Befundzeile, damit Hin
   und Zurueck dasselbe Zeichen in beide Richtungen tragen.

   14PX ABSTAND ZUM TITEL — UND DIE 14 STEHEN SCHON DA. Hier stand bis zum
   21.08.2026 `margin: 0 0 14px`, und der Zonenstapel legt seinen
   `gap: var(--zonenabstand)` (ebenfalls 14px) DAZU: Flex-Abstand und
   Aussenabstand werden addiert, nicht zusammengelegt. Gemessen im Browser:
   28px statt 14. Der Abstand kommt jetzt aus dem Zonenabstand, wo er ohnehin
   herkommt, und die Regel setzt ihn nicht ein zweites Mal.

   ENTSCHIEDEN AM 22.08.2026 — Gestaltung, Nachtrag in
   `docs/gestaltung/antwort-rueckfragen-kern.md`: Es gilt --zonenabstand, also
   14px am Schreibtisch und 10px unter 700px. Der Abstand kommt hier aus dem
   Token und ist nicht eigens gesetzt. Abschnitt 5 der Vorgabe nannte nur die
   14 und keine zweite Breite; die zweite Breite ist mit dem Nachtrag
   nachgetragen. Der Bau bleibt, wie er hier steht.

   Warum so gebaut — und das ist kein Geschmack: Eine feste 14 neben einer
   Skala, die unter 700px bei 10 endet, veraltet beim naechsten Mal, wenn
   jemand die Skala anfasst. Dann stehen zwei Werte fuer dieselbe Frage da, und
   nur einer wird nachgezogen.

   DIESER KOMMENTAR SICHERT NICHTS ZU: Ein Kommentar wird nicht rot
   (Gestaltung, 22.08.2026). Das tut `tests/faelle/060_bedienkonzept.php` —
   die Zeile „Der Abstand zwischen Rueckverweis und Seitentitel ist
   var(--zonenabstand) und keine eigene Zahl" prueft die Bindung an das Token
   und die drei Nullen, die den Abstand freihalten: hier, am Seitenkopf und am
   Titel darin. */
.inhalt .zurueck {
  margin: 0;
}
/* 44 px Trefffläche, dieselbe Zahl wie bei Hilfe und Support (Auftrag
   App-Eindruck, Abschnitt 8). Ein Rueckweg, den der Daumen nicht trifft, ist
   am Handy kein Rueckweg — und er ist dort haeufiger gebraucht als am
   Schreibtisch, wo der Browser einen Zurueck-Knopf hat. */
.inhalt .zurueck a {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  min-height: 44px;
}
/* Der Winkel gehoert zum Weg, nicht zum Wort: Er traegt keine Unterlinie und
   steht in --tinte-leise. 19px und line-height 1 wie am `›` der Befundzeile.

   DAMIT DAS STIMMT, TRAEGT DAS WORT DIE UNTERLINIE UND NICHT DER VERWEIS.
   Stuende sie wie sonst am `a`, liefe sie unter dem Winkel mit — im Bild
   gesehen, nicht im Text. Am `›` der Befundzeile ist es genauso geloest
   (Auftrag App-Eindruck, Abschnitt 2). */
.inhalt .zurueck a { border-bottom: 0; }
.zurueck-wort { border-bottom: 1px solid var(--linie-stark); }
.inhalt .zurueck a:hover .zurueck-wort,
.inhalt .zurueck a:focus-visible .zurueck-wort { border-bottom-color: var(--tinte); }
.zurueck-winkel {
  font-size: 19px;
  line-height: 1;
  color: var(--tinte-leise);
}

/* Der Punkt im offenen Menue steht auf --karte — dort traegt Messing 4,97,
   waehrend es auf der Vereinsfarbe rund 1,0 erreicht. Eine Regel, zwei
   Flaechen (Kopfband-Vorgaben, Abschnitt 2.5). */
.menue-punkt {
  display: inline-block;
  width: 8px;
  height: 8px;
  margin-left: 8px;
  border-radius: 50%;
  background: var(--messing);
}

/* Eine Meldung IST auf einer Zonenseite eine eigene Zone.

   Der Grund ist ADR-0031 und nicht Geschmack: --grund-tief ist die stille
   Flaeche und steht nie direkt auf --grund — dort erreicht sie 1,14 und
   verschwindet. Sie braucht eine Karte um sich, und auf einer Zonenseite ist
   die Meldung selbst eine.

   HIER STEHT NUR NOCH, WAS SICH VON `.meldung` UNTERSCHEIDET: Grund, Rahmen
   und Radius traegt die Meldung seit dem 20.08.2026 ohnehin (Gestaltung,
   Antwort auf Rueckfrage 9) — sie stehen deshalb nicht ein zweites Mal hier.
   Was die Zone braucht, ist der Abstand: kein eigener Aussenabstand, weil der
   Zonenabstand ihn setzt, und der volle Innenabstand einer Karte statt der
   8px einer Zeile im Fliesstext. */
.inhalt.zonen > .meldung {
  margin: 0;
  padding: var(--abstand);
}

/* Der Satz in der Meldung. Er traegt die Satzbreite, damit die Karte sie
   nicht tragen muss (siehe oben) — auf JEDER Seite, mit Zonen oder ohne.

   Hier stand bis zum 21.08.2026: "Auf einer Seite ohne Zonen aendert er
   nichts: Dort ist `.meldung` selbst schon 66ch breit." Das war wahr, solange
   `.meldung` selbst ein max-width trug. Seit dem 20.08.2026 traegt sie keines
   mehr, und der Satz behauptete seither das Gegenteil dessen, was dasteht. */
.meldung-satz {
  display: block;
  max-width: var(--satzbreite);
}

/* DIE VERPFLICHTUNGSKANTE. Die Regel selbst und keine Ausnahme (ADR-0030,
   Nachtrag 20.08.2026): Wo sie steht, muss jemand etwas tun.

   3px und nicht 2 — randlose Karten am Handy tragen 2px nicht: Unter der
   Bruchkante liegt die Karte am Bildschirmrand an, und eine 2px-Kante
   verschwindet dort in der Geraetekante.

   Sie sitzt an der KARTE und nicht an einer Liste darin. Bis zum 20.08.2026
   hing sie an einer ul (.befundliste) — dann markiert sie den Befund und nicht
   die Zone, und wer die Zone ueberfliegt, sieht sie nicht. */
.karte-pflicht {
  border-left: 3px solid var(--messing);
}

.seitenkopf { display: flex; align-items: center; gap: var(--abstand); flex-wrap: wrap; }
.seitenkopf-aktionen { margin-left: auto; }
/* DIE ZAHL AM SEITENTITEL BLEIBT, ABER NICHT ALS FUSSNOTE (Gestaltung,
   20.08.2026, Antwort auf Rueckfrage 4). Bis dahin stand sie in --grad-klein
   (13px) neben einem 30px-Titel; das ist keine Nebeninformation mehr, sondern
   eine Fussnote.

   Die Unterscheidung zum Zonentitel haelt: Ein Zonentitel steht ueber einer
   bis drei Zeilen, die man sieht, ohne zu zaehlen — dort ist die Zahl Laerm,
   und eine Zusicherung haelt sie fern. "Wie viele sind wir" ist dagegen eine
   Frage, die ein Funktionaer wirklich hat.

   17px und nicht --grad-text: --grad-text ist der Fliesstextgrad (16px);
   17px ist der Grad der Bedienschrift und steht so schon an .knopf-zeile und
   .kopf-name. Gemessen, nicht angenommen — die Antwort der Gestaltung nennt
   beides in einem Zug, und der Wert entscheidet.

   Source Sans 3 in 400: Dort laufen alle zehn Ziffern gleich breit (497
   Einheiten), tabular-nums waere wirkungslos — es steht trotzdem da, weil die
   Zahl beim Filtern wechselt und die Kolonnenlage dann sichtbar wird, falls
   der Rueckfallschnitt einspringt. */
.anzahl {
  color: var(--tinte-leise);
  font-family: var(--schrift-text);
  font-weight: 400;
  font-size: 17px;
  font-variant-numeric: tabular-nums;
  margin-left: 8px;
}

/* ---------- Knoepfe ---------- */

/* ---------------------------------------------------------------------------
   DIE EINE HAUPTAKTION JE BILDSCHIRM IST GEFUELLT IN DER VEREINSFARBE
   (Kopfband-Vorgaben, Abschnitt 5.1). GEFAHR IST ROT UND NIE GEFUELLT.

   Das berichtigt ADR-0024, Aufzaehlungspunkt 1, und die Entscheidung dahinter
   ist dieselbe geblieben — "eine gefuellte Flaeche je Bildschirm". Nur die
   FARBE war an eine Annahme gebunden, die entfallen ist: Das ADR ist am
   17.08.2026 geschrieben worden und nimmt die Erscheinung ausdruecklich aus.
   Damals gab es keine Vereinsfarbe. Jetzt gibt es sie, und sie traegt das Band.

   DER FALL, DER NICHT WARTET: Fuehrt ein Verein Rot als Vereinsfarbe —
   Schuetzenkompanien tun das —, dann waeren Hauptaktion und Gefahr dieselbe
   rote Flaeche. Genau davor schuetzt "Gefahr ist nie gefuellt": Die Hauptaktion
   ist die einzige gefuellte Flaeche im Inhalt, Gefahr ist Schrift und Rand. So
   bleiben beide unterscheidbar, in jedem Mandanten.

   Der Kontrast traegt: Die Vereinsfarbe ist auf weissen Text normiert, Garantie
   mindestens 4,64 ueber beide Fallmengen.

   Die Farbe selbst steht im Mandantensatz weiter unten — hier steht die Form.
   --------------------------------------------------------------------------- */
/* DIE MASSE STEHEN SEIT DEM 29.08.2026 FEST (Design, Punkt 10).

   HIER STAND `padding: 8px 16px` UND `font: inherit`. Beides ist ersetzt, und
   zwar durch Zahlen, die Design aus dem GEBAUTEN Stand uebernommen und
   geschaerft hat — nicht neu erfunden. Was sich aendert:

     Innenabstand   8/16   ->  10/18
     Schriftgrad    16 px  ->  17 px      (`font: inherit` war --grad-text)
     Gewicht        400    ->  600
     Zeilenmass     1.5    ->  1.2
     Umbruch        erlaubt -> nowrap
     Zeichen->Wort  keiner ->  9 px

   `font` ALS KURZSCHRIFT UND NICHT VIER ZEILEN: Design gibt sie so an
   (`600 17px/1.2 var(--schrift-text)`), und die Kurzschrift setzt die
   uebrigen Bestandteile auf ihren Vorgabewert zurueck — das ist hier gewollt,
   weil `font: inherit` sonst durch die Hintertuer weiterwirkte.

   DIE MINDESTHOEHE VON 44 px WIRKT UND IST NICHT DEKORATION: 10 + 17*1,2 + 10
   ergibt 40,4 px. Ohne sie waere jeder Knopf unter dem Treffbereich, den
   ADR-0024 fuer den Daumen am Telefon verlangt. Design: „Der Treffbereich am
   Handy ist keine Groessenfrage."

   `white-space: nowrap` UND SEIN PREIS: Ein Knopf bricht nicht mehr um,
   sondern schiebt die Zeile. Das ist die Vorgabe; `.formular-fuss` traegt
   dafuer `flex-wrap: wrap`, damit die KNOEPFE untereinander rutschen statt
   ihre WOERTER.

   `display: inline-flex` STEHT DAZU, WEIL DIE 9 px SONST NICHTS TUN: Ein
   `gap` wirkt nur in einem Flex- oder Rasterbehaelter. Ein <button> ist
   keiner. Und derselbe Griff macht `justify-content: center` auf der
   Anmeldeflaeche zum ersten Mal wirksam — es stand dort und tat nichts.

   ZWEI FASSUNGEN UND NICHT DREI: Designs dritte, `text` (durchsichtig, Schrift
   in --messing, unterstrichen), IST NICHT GEBAUT. Sie setzt Messing als
   SCHRIFTfarbe, und das verbietet ADR-0030 in seiner Verbotsliste seit dem
   ersten Tag; der Nachtrag vom 28.08.2026 hat genau diese Ausnahme wieder
   geschlossen, auf Designs eigene Meldung hin. Dieselbe Anweisung sagt es in
   Punkt 5 selbst: „Messing ist ein Zierton, kein Schriftton." Sie hat
   ausserdem keinen Verwender im Bestand. Gemeldet, nicht ausgelegt. */
.knopf-haupt {
  background: var(--tinte);
  color: #fff;
  border: 1px solid var(--tinte);
  min-height: 44px;
  border-radius: var(--radius);
  padding: 10px 18px;
  font: 600 17px/1.2 var(--schrift-text);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 9px;
  white-space: nowrap;
  cursor: pointer;
}

.knopf-still {
  background: transparent;
  color: inherit;
  border: 1px solid var(--linie-stark);
  min-height: 44px;
  border-radius: var(--radius);
  padding: 10px 18px;
  font: 600 17px/1.2 var(--schrift-text);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 9px;
  white-space: nowrap;
  cursor: pointer;
}

/* Der Plus-Knopf ist die Hauptaktion der Liste (ADR-0024) und traegt deshalb
   dieselbe Farbe wie jede Hauptaktion: die Vereinsfarbe, nicht Rot. Eine Seite
   hat entweder einen Plus-Knopf oder eine Hauptaktion, nie beides — die eine
   gefuellte Flaeche je Bildschirm.

   DAS background DIESER REGEL IST NICHT DIE FARBE DES KNOPFES. Hier steht der
   neutrale Satz und die FORM — genau wie bei .knopf-haupt, dessen Kommentar
   mit demselben Satz endet. Die Vereinsfarbe kommt aus dem Mandantensatz
   weiter unten: dort steht .knopf-plus ein zweites Mal, mit var(--verein) und
   :hover mit var(--verein-hover). Gleiche Spezifitaet, spaeter im Blatt — die
   spaetere gewinnt, und zwar IMMER: --verein ist im :root unbedingt gesetzt
   und faellt auch ohne aufgeloesten Mandanten nicht aus.

   NACHGEMESSEN AM 21.08.2026, weil der Kommentar bis dahin die Farbe erklaerte
   und die Zeile darunter eine andere zeigte: Von den zwoelf Deklarationen
   dieser Regel ist background die EINZIGE ueberschriebene; die uebrigen elf
   wirken. Wer die Farbe hier aendert, aendert nichts — wer sie hier sucht,
   sucht am falschen Ort. Die Zeile bleibt trotzdem stehen; sie ist der
   neutrale Satz und dieselbe Bauart wie .knopf-haupt, und ein Knopf, der als
   einziger keinen hat, wird von der naechsten Sitzung "repariert".

   ER IST RECHTECKIG UND TRAEGT EIN WORT, seit dem 20.08.2026 (Gestaltung,
   Antwort auf Rueckfrage 3). Die Fuellung war richtig und bleibt; falsch waren
   die Form und das fehlende Wort:

   RUND — ein runder, gefuellter Knopf oben rechts ist die Geste, gegen die
   dieses Erscheinungsbild sich abgrenzt. Der Kaeufer zeigt die Seite vor
   zwoelf Leuten. Bedienelemente im Inhalt sind rechteckig, --radius.

   OHNE WORT — fuer einen Funktionaer jenseits 50 ist ein nacktes Plus eine
   Vermutung: Was legt es an, eine Rolle oder ein Mitglied? Der Knopf traegt
   die Sache im Wort. title und aria-label bleiben trotzdem Pflicht (ADR-0024,
   gehalten in 060_bedienkonzept.php) — sie tragen den vollen Satz, das Wort
   auf der Flaeche traegt die Sache.

   44px hoch: Mindesttrefffläche, dieselbe Zahl wie ueberall. */
.knopf-plus {
  background: var(--tinte);
  color: #fff;
  border: none;
  border-radius: var(--radius);
  min-height: 44px;
  padding: 10px 18px;
  font-family: var(--schrift-text);
  font-size: 17px;
  font-weight: 600;
  line-height: 1;
  cursor: pointer;
  transition: background var(--dauer);
}

/*
 * Zeilenaktionen: still, randlos, Farbe erst beim Zeigen (ADR-0024).
 * Ohne title und aria-label darf hier kein Symbol stehen — das prueft
 * tests/lauf.php.
 */
.knopf-zeile {
  background: transparent;
  border: none;
  color: var(--tinte-leise);
  padding: 4px 6px;
  font-size: 17px;
  line-height: 1;
  cursor: pointer;
  border-radius: var(--radius);
  text-decoration: none;
  display: inline-block;
}
.knopf-zeile { transition: background var(--dauer), color var(--dauer); }
.knopf-zeile:hover,
.knopf-zeile:focus-visible { color: var(--gefahr); background: var(--grund-tief); }

/* ---------- Meldungen: vier Stufen, ein Hinweis ist nie rot ---------- */

/* DIE MELDUNG TRAEGT KEINE FARBIGE KANTE (Gestaltung, 20.08.2026, Antwort auf
   Rueckfrage 1). Die Stufe steht im Auszeichnungswort am Zeilenanfang.

   DER WEG HIERHER GEHOERT DAZU, weil er zweimal falsch war: Bis zum
   20.08.2026 war die Stufenkante eine senkrechte 4-px-Kante LINKS — dieselbe
   Form und dieselbe Stelle wie die Verpflichtungskante. Dann wanderte sie nach
   OBEN und wurde 3px, damit sie sich in der Form unterscheidet. Beides
   verfehlt dasselbe: Die Kante ist das Zeichen, nicht die Farbe. Sobald eine
   zweite Sorte Karte eine 3-px-Kante traegt, ist die Kante keine Marke mehr,
   sondern Dekor — und dann ist gleichgueltig, welchen Ton sie fuehrt. Die
   Kantenlage oben/links trennt zwei Formen nur fuer den, der beide
   gleichzeitig sieht, und das ist nie der Fall.

   GEMESSEN, warum ein anderer Ton nicht gereicht haette: --hinweis (#74571c)
   und --messing (#8a6b2e) erreichen gegeneinander 1,35 : 1. Ein anderer Ton
   haette das Problem in die naechste Fassung verschoben.

   --hinweis bleibt #74571C und wandert von der Kante in das Wort. Als Wort auf
   --karte erreicht es 6,7 : 1 und konkurriert dort mit keiner Kante: Schrift
   wird gelesen, eine Kante wird gesehen. Kein Farbwert der Palette aendert
   sich.

   Die Meldung ist damit eine Karte wie jede andere: 1px --linie, Radius an
   ALLEN VIER Ecken. Keine Satzbreite an der Flaeche — die traegt
   .meldung-satz. */
.meldung {
  border: 1px solid var(--linie);
  background: var(--karte);
  padding: 8px var(--abstand);
  margin: 0 0 var(--abstand);
  border-radius: var(--radius-gross);
}

/* Das Auszeichnungswort. Es steht in der Schrift und nicht in einer Kante,
   seit dem 20.08.2026. Gewicht 600 und Fliesstextgrad: Es ist der Anfang des
   Satzes und keine Beschriftung darueber.

   HIER STAND BIS ZUM 29.08.2026: "Die vier Stufen behalten ihre vier Farben
   (ADR-0024) ... Ein Hinweis erscheint weiterhin nie rot als Fehler."

   DER FEHLER IST SEIT DEM 29.08.2026 NICHT MEHR ROT (Design, Punkt 4;
   entschieden vom Betreiber am selben Tag: "fehler ohne linie"). Designs
   Begruendung im Wortlaut: "Ein Fehler in einem Vereinsformular ist 'das
   Passwort stimmt nicht' oder 'der Beitrag fehlt', nicht ein Alarm." Das Rot
   auf dem Bildschirmabzug vom 28.08.2026 war nicht beantragt und nicht
   entschieden.

   DIE MESSINGLINIE AUS DERSELBEN VORGABE IST NICHT GEBAUT, und das ist keine
   Auslassung: Punkt 4 verlangte daneben "eine Messinglinie links der Flaeche,
   3 px, --messing". Sie haette ADR-0030 gebrochen — Messing markiert
   AUSSCHLIESSLICH Verpflichtung, und ein Formularfehler erfuellt davon die
   erste Haelfte ("ich muss etwas tun") und nicht die zweite ("es laeuft eine
   Frist oder ist abgelaufen"). Der Betreiber hat am 29.08.2026 die ANWEISUNG
   geaendert statt das ADR: Die Linie entfaellt ersatzlos. ADR-0030 ist
   unangetastet.

   --gefahr WIRD DABEI NICHT GESTRICHEN und ist kein Token ohne Verwender:
   `.knopf-zeile:focus-visible` fuehrt es weiter. Das ist ein Fokusrahmen und
   keine Meldungsfarbe — die Bedienbarkeit haengt daran (ADR-0049), und Punkt 4
   sagt darueber nichts. Wer meint, er gehoere mit, entscheidet das nicht hier.

   DIE DREI UEBRIGEN STUFEN TRAGEN WEITERHIN IHRE FARBE. Designs Satz "Es gibt
   keinen Signalsatz — kein Rot fuer Fehler, kein Gelb fuer Warnung, kein Gruen
   fuer Erfolg" reicht weiter als sein eigener Bauauftrag c), der nur die
   FEHLERdarstellung nennt. Nach ADR-0049 legt eine bauende Sitzung eine
   Gestaltungsvorgabe nicht aus. Der Unterschied ist gemeldet.

   DIE FOLGE STEHT HIER, WEIL SIE SONST NIEMAND SIEHT: Von den vier Stufen ist
   damit ausgerechnet die schwerste die einzige ohne Farbe. Das ist die Lage,
   die entschieden wurde, und nicht die, die jemand uebersehen hat. */
.meldung-wort { font-weight: 600; }
.meldung-ok      .meldung-wort { color: var(--ok); }
.meldung-info    .meldung-wort { color: var(--info); }
.meldung-hinweis .meldung-wort { color: var(--hinweis); }
/* AUSDRUECKLICH GESETZT UND NICHT GESTRICHEN: Ohne diese Zeile erbte das Wort
   --tinte vom Rumpf und saehe genauso aus — aber die Entscheidung waere
   unsichtbar, und die naechste Sitzung haelt die Luecke fuer ein Versehen. */
.meldung-fehler  .meldung-wort { color: var(--tinte); }

/* ---------- Listen ---------- */

.liste { width: 100%; border-collapse: collapse; margin: var(--abstand) 0; }
.liste th, .liste td {
  text-align: left;
  padding: 8px;
  border-bottom: 1px solid var(--linie);
  vertical-align: top;
}
/* Der Tabellenkopf ist die stille Flaeche, und dort ist die Reserve am
   kleinsten: --tinte-leise auf --grund-tief sind 4,74. Deshalb --grad-klein
   (13px) als Untergrenze und kein kleinerer Grad (Tokensatz, Abschnitt 5). */
.liste th {
  font-size: var(--grad-klein);
  color: var(--tinte-leise);
  font-weight: 600;
  background: var(--grund-tief);
}
.spalte-aktionen { width: 1%; white-space: nowrap; text-align: right; }

/* DER DATEINAME WIRD GEKUERZT, UND ER IST DIE EINZIGE ZELLE, DIE DAS BRAUCHT
   (Vorgabe der Gestaltung, 27.08.2026).
   ---------------------------------------------------------------------------
   DER GRUND IST NICHT DIE HEUTIGE MESSUNG, SONDERN IHRE HALTBARKEIT — im
   Wortlaut der Gestaltung: „Ohne diese Regel haette die Antwort von einer
   Messung abgehangen, die morgen ein neuer Import widerlegt." Jede andere
   Zelle der Importtabelle hat eine Obergrenze, die aus dem Bau folgt: ein
   Zeitpunkt, ein Listenschluessel, zwei Zahlen, ein Zustandswort, ein Knopf.
   DER DATEINAME HAT KEINE — er kommt aus der hochgeladenen Datei, und den
   Namen vergibt der Verein.

   SIE HAENGT AN EINEM BLOCK IM td UND NICHT AM td SELBST. `max-width` an einer
   Tabellenzelle ist bei automatischem Tabellensatz nicht verlaesslich; ein
   Block darin traegt es. Das ist eine Bauart und keine Vorsicht.

   30ch UND NICHT WENIGER: Der laengste Name, den dieses Portal SELBST erzeugt,
   ist die Vorlage zum Ausfuellen — heute `vorlage-kern-personen.csv`, 25
   Zeichen (gemessen ueber vorlagen(), 27.08.2026). Wer sie herunterlaedt,
   ausfuellt und zurueckgibt, darf seinen Dateinamen nicht gekuerzt sehen. Ein
   Modul mit langem Schluessel kommt darueber — DANN GREIFT DIE KUERZUNG, UND
   GENAU DAFUER IST SIE DA. Die Zusicherung ist nicht die Zahl, sondern das
   `title`.

   DER VOLLE NAME GEHT NICHT VERLOREN: Er steht als `title` daneben und —
   wichtiger — vollstaendig im Markup. Eine Kuerzung durch `text-overflow`
   aendert den Baum fuer Hilfsmittel nicht; ein Vorleser liest den ganzen
   Namen, gekuerzt ist nur das Bild. */
.dateiname {
  display: block;
  max-width: 30ch;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.name { font-weight: 500; }
.nebensache { color: var(--tinte-leise); font-size: var(--grad-klein); }

/* DER LEISE SATZ IN EINER ZEILE (Gestaltung, 22.08.2026).
   ---------------------------------------------------------------------------
   EIGENE KLASSE UND KEINE ERWEITERUNG VON .nebensache: Alle neun bestehenden
   Verwendungen von .nebensache sind BESCHRIFTUNGEN — "seit <datum>", "keines",
   "abgelaufen", "—". Kein Satz. Die Einrichtungskarte ist die erste Stelle,
   die die leise Tinte fuer laufenden Text nimmt. Die Frage lautet nicht: haelt
   .nebensache eine Satzbreite, sondern: ist das eine Beschriftung oder ein
   Satz. .nebensache bleibt unveraendert; dass sie keine Satzbreite haelt, ist
   ihre Aufgabe und kein Mangel.

   display: block, WEIL EINE BREITE AN EINEM INLINE-ELEMENT NICHT GREIFT. Das
   Element bleibt ein span und das Markup gueltig — der Einwand gegen ein <p>
   im <span> wird nicht umgangen, sondern respektiert.

   margin-top: 2px ALS AUSGLEICH: Inline trennte der Wortabstand Name und Satz;
   nach dem Umbruch trennt sie nichts, und ohne Ausgleich saesse der Satz enger
   am Namen als vorher. Zwei und nicht mehr, WEIL DER SATZ ZUM NAMEN UEBER IHM
   GEHOERT — er ist die Begruendung dieses Schrittes und nicht der naechste
   Block.

   DIE 2 STEHT ALS ZAHL UND NICHT ALS TOKEN, und das ist die Gestaltung im
   Gegenlauf zu ihrer eigenen Regel vom selben Tag ("wo ein Token die Frage
   regelt, nennt man das Token"): Hier regelt keines sie — --zonenabstand ist
   die falsche Skala, --abstand ist der Karteninnenrand. Ein drittes fuer einen
   Ausgleich an genau einer Klasse waere eine Skala fuer einen Einzelfall. Die
   Zahl steht in der Klasse, der Grund daneben.

   ZUGESICHERT IST GENAU EINES: die Bindung an --satzbreite
   (060_bedienkonzept.php, Abschnitt 2a). NICHT die 2 px — sie ist eine
   Gestaltungsgroesse wie der Seitentitelgrad, und ein Wertetest daran bindet
   jede Feinkorrektur an einen Test.
   --------------------------------------------------------------------------- */
.zeilensatz {
  display: block;
  margin-top: 2px;
  color: var(--tinte-leise);
  font-size: var(--grad-klein);
  max-width: var(--satzbreite);
}

/* DAS WORT "Stattdessen:" IM SATZ (Gestaltung, 22.08.2026, Issue 56).
   ---------------------------------------------------------------------------
   Der Befund war, dass der zweite Teil im Fluss untergeht. Der erste Satz sagt,
   was fehlt, der zweite, was solange gilt — das ist ein Wechsel der Aufgabe,
   und er stand ohne Zeichen da.

   KEIN UMBRUCH — UEBERHOLT AM 22.08.2026 (Gestaltung, Issue 58, angenommen von
   der Projektleitung). Der alte Wortlaut, damit die Aenderung nachlesbar
   bleibt: "KEIN UMBRUCH: Der Stattdessen-Satz ist die FORTSETZUNG und nicht der
   naechste Punkt. Zwei Bloecke daraus sagten dem Leser, es seien zwei Sachen.
   Der Umbruch ist als naechste Stufe benannt und waere eine eigene
   Entscheidung; das kleinste Mittel steht zuerst, weil es zurueckgenommen
   werden kann."

   DIE NAECHSTE STUFE IST GEBAUT, IHR GRUND ABER NICHT WEGGEFALLEN: Umgebrochen
   wird VOR dem Wort, der Satz geht mit — zwei Bloecke werden daraus gerade
   nicht. Die Regel steht im Block darunter.

   KEIN MESSING, obwohl der Teil eine Verpflichtung beschreibt: Messing ist nie
   Text (zwei benannte Ausnahmen, keine davon hier). Die Verpflichtung traegt
   die Marke am Zeilenanfang.

   NICHT --tinte STATT --tinte-leise: Das Gewicht sagt "hier wechselt die
   Aufgabe", eine Farbe sagte "hier wechselt der Rang". Es wechselt die Aufgabe.

   600 UND NICHT 700, WEIL 600 DIE FETTUNG DIESES STILBLATTS IST — nachgemessen
   am 22.08.2026, vor dieser Zeile: 14 font-weight-Angaben, davon 5 in
   @font-face. Von den 9 uebrigen Regeln tragen 7 die 600 — .kopf-name (der
   Vereinsname im Band), .menue-liste a[aria-current="page"] (die aktive
   Menuezeile), .knopf-plus, .liste th, .meldung-wort, .marke-aktiv,
   .menue-kicker; die zwei anderen sind .name mit 500 und .anzahl mit 400.
   DIE 700 STEHT ZWEIMAL, und beide Male nur als @font-face der Bold-Schnitte —
   KEINE Regel nimmt sie. Ohne diese Zeile faellt <strong> auf den
   Browservorgabewert bold, also 700, und holte damit einen Schnitt ins Bild,
   den das Stilblatt sonst nirgends benutzt.

   NICHTS ZUGESICHERT: Eine Fettung ist eine Gestaltungsgroesse wie die 2 px
   darueber. Zugesichert bleibt genau die Bindung an --satzbreite
   (060_bedienkonzept.php, Abschnitt 2a); sie ist unangetastet.
   --------------------------------------------------------------------------- */
.zeilensatz strong { font-weight: 600; }

/* DER UMBRUCH VOR "Stattdessen:" (Gestaltung, 22.08.2026, Issue 58).
   ---------------------------------------------------------------------------
   DAS IST DIE NAECHSTE STUFE, DIE DER BLOCK DARUEBER ALS EIGENE ENTSCHEIDUNG
   BENANNT HAT — und sie ist gefallen. Das Wort steht an der linken Kante, sein
   Satz laeuft dahinter weiter.

   WOGEGEN SIE GEBAUT IST: Ohne sie hing das Bild an der Umbruchstelle. Bei
   500 px stand "Stattdessen:" zufaellig am Zeilenanfang und sah richtig aus,
   bei anderen Breiten mitten in der Zeile — derselbe Code, zwei Ergebnisse,
   entschieden allein davon, wo der Text umbrach.

   ::before UND NICHT display: block AM <strong>: Ein Block setzte das Wort
   allein auf eine Zeile und trennte es von seinem Satz, und der Satz ist die
   Fortsetzung. Auch kein zweites Element im Markup — das bleibt ein .zeilensatz
   mit einem <strong> darin, unangetastet.

   BEIDE ZEILEN TRAGEN, EINE ALLEIN TUT NICHTS: content: "\A" setzt ein
   Zeilenumbruchzeichen, das die Leerraumzusammenfassung zu einem gewoehnlichen
   Leerzeichen macht; erst white-space: pre laesst es stehen. Das pre gilt nur
   fuer den Inhalt des ::before und nicht fuer den Satz — der bricht weiter
   normal um.

   ZUGESICHERT IST DIESE REGEL IM WORTLAUT (060_bedienkonzept.php, Abschnitt
   2b), anders als die 600 und die 2 px darueber. Der Unterschied ist der Grund
   von oben: Ein Mittel, das nur manchmal wirkt, ist ohne Zusicherung von einem
   Zufall nicht zu unterscheiden — es sah bei genau einer Fensterbreite schon
   vorher richtig aus.

   DIE AUSZEICHNUNG IST DAMIT FERTIG (Gestaltung, 22.08.2026): 600 bleibt,
   --tinte-leise bleibt, nichts kommt darueber hinaus.
   --------------------------------------------------------------------------- */
.zeilensatz strong::before { content: "\A"; white-space: pre; }

.marke {
  display: inline-block;
  background: var(--grund-tief);
  border: 1px solid var(--linie);
  border-radius: 999px;
  padding: 1px 8px;
  font-size: 0.85em;
  margin: 1px 2px 1px 0;
}
.marke-aktiv { border-color: var(--ok); color: var(--ok); }

/* LAUFENDER TEXT HAELT DIE SATZBREITE (Uebersicht-Vorgaben, Abschnitt 2).
   .leerhinweis ist die Einleitung einer Zone, .hinweistext der erklaerende
   Absatz — beide laufen sonst ueber die volle Kartenbreite. */
.leerhinweis { color: var(--tinte-leise); max-width: var(--satzbreite); }
.hinweistext { color: var(--tinte-leise); font-size: var(--grad-klein); max-width: var(--satzbreite); }

/* ---------- Formulare ---------- */

.formular { display: flex; flex-direction: column; gap: 4px; }
.formular-schmal { max-width: 22rem; }
/* DIE BESCHRIFTUNG STEHT NIE NEBEN DEM FELD (Design, 29.08.2026, Punkt 10):
   „Eine Beschriftung links vom Feld bricht am Handy in die Zeile darueber und
   steht dann doch oben." `.formular` ist eine Spalte, damit steht sie oben,
   und die 4 px Abstand kommen aus dem `gap` der Spalte — nicht aus einer
   zweiten Zahl hier.

   SIE IST KLEINER UND LEISER ALS DER INHALT, nicht umgekehrt: 13 px
   (--grad-klein) gegen 17 px, --tinte-leise gegen --tinte. „Sonst laese man
   die Beschriftung als Inhalt."

   EINE STELLE IM BESTAND WEICHT AB, UND SIE IST GERECHNET: Auf der
   Anmeldeflaeche traegt die Beschriftung --tinte statt --tinte-leise, weil
   --tinte-leise auf --verein-hell nur 4,41 erreicht und damit unter der
   Textschwelle liegt. Die Regel steht bei `.anmelde-formular label`. Sie ist
   an Design gemeldet und hier nicht stillschweigend ueberschrieben. */
.formular label { font-size: var(--grad-klein); color: var(--tinte-leise); margin-top: 8px; }

/* DIE FELDMASSE STEHEN SEIT DEM 29.08.2026 FEST (Design, Punkt 10).

   HIER STAND `font: inherit` UND `padding: 8px`. Gemessen am Rendervorgang
   der Anmeldeseite war das Feld damit 42 px hoch — zwei unter dem
   Treffbereich, den ADR-0024 verlangt, und niemandem war es aufgefallen, weil
   42 und 44 im Bild nicht zu unterscheiden sind. GENAU DAFUER IST DIE
   MESSUNG DA.

     Innenabstand   8      ->  10/12
     Schriftgrad    16 px  ->  17 px
     Mindesthoehe   keine  ->  44 px

   `box-sizing: border-box` GILT IM GANZEN BLATT (Zeile 276) und ist die
   Bedingung dafuer, dass `width: 100%` mit Innenabstand und Rand nicht ueber
   die Karte laeuft. Design nennt es eigens; hier ist es nicht zu wiederholen,
   sondern nachzusehen — es steht dort. */
/* `:not([type=...])` UND NICHT `.formular input` PAUSCHAL — gemessen am
   29.08.2026, gefunden vom Skill code-review.

   Ein Auswahlknopf und ein Ankreuzfeld sind Bedienelemente, aber keine
   EINGABEFELDER: Designs Vorgabe (44 px Mindesthoehe, 10/12 Innenabstand,
   100 % Breite) beschreibt das Feld, in das jemand schreibt. Auf einen
   Auswahlknopf angewandt ergibt sie einen 460 x 44 px grossen Knopf — gemessen
   im Zuordnungskatalog von `gruppen`, fuenf davon untereinander, dazu ein
   Ankreuzfeld mit 478 x 44.

   HIER STAND: „das Aussehen der Auswahlknoepfe bleibt damit genau, wie es vor
   dem 29.08.2026 war". DAS WAR FALSCH, und zwar in meinem eigenen Kommentar —
   nachgemessen, bevor es eingecheckt wurde:

     vor diesem Bau     Auswahlknopf 13 x 460, Ankreuzfeld 13 x 478
     mit 44px (kurz)    Auswahlknopf 44 x 460, Ankreuzfeld 44 x 478
     jetzt              Auswahlknopf 13 x 13,  Ankreuzfeld 13 x 13

   DIE HOEHE KAM MIT DIESEM BAU UND IST WIEDER WEG. DIE BREITE STAND SCHON
   VORHER FALSCH und ist es jetzt AUCH NICHT MEHR — `width: 100%` erreicht sie
   nicht mehr, weil der Waehler sie ausschliesst. Das ist eine Aenderung am
   Bild, die niemand beauftragt hat; sie ist gemeldet und nicht verschwiegen.
   Wer sie zurueck will, nimmt die Ausschluesse aus `width` heraus und laesst
   sie an `min-height` stehen.

   `[type=file]` UND `[type=range]` STEHEN ABSICHTLICH NICHT IN DER LISTE: Es
   gibt sie im Bestand nicht, und eine Ausnahme fuer etwas, das es nicht gibt,
   veraltet, ohne dass jemand es merkt. */
.formular input:not([type="checkbox"]):not([type="radio"]),
.formular textarea,
.formular select {
  font-family: var(--schrift-text);
  font-size: 17px;
  min-height: 44px;
  padding: 10px 12px;
  border: 1px solid var(--linie-stark);
  border-radius: var(--radius);
  background: var(--karte);
  color: var(--tinte);
  width: 100%;
}
.feldpaar { display: flex; gap: var(--abstand); }
.feldpaar > div { flex: 1; }
/* `flex-wrap: wrap` IST DIE GEGENSEITE VON `white-space: nowrap` AM KNOPF
   (Design, 29.08.2026, Punkt 10): „Handlungen stehen rechts, mit 8 px
   Abstand, flex-wrap: wrap, margin-top: var(--abstand)." Seit der Knopf sein
   Wort nicht mehr umbricht, muss die ZEILE umbrechen koennen — sonst schiebt
   ein langes Wort den Knopf aus der Karte. */
.formular-fuss {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  justify-content: flex-end;
  margin-top: var(--abstand);
}
/* DER HINWEIS UNTER DEM FELD HAELT DIE SATZBREITE (Design, 29.08.2026,
   Punkt 10). Er ist laufender Text und lief bisher ueber die volle
   Kartenbreite — bei 1060 px sind das rund 135 Zeichen je Zeile.

   DAS IST DIE STELLE, AN DER DESIGNS EIGENER FEHLER SASS: In deren Unterlagen
   griff der Hinweis auf `--satz-breite` zu, eine Marke, die es in der
   Anwendung nicht gibt. Eine unaufgeloeste CSS-Marke wird nicht rot — sie
   wirkt nur nicht, und der Hinweis blieb unbegrenzt. Widerrufen am
   29.08.2026; es gibt nur `--satzbreite`. */
.feldhinweis, .schreibhinweis {
  color: var(--tinte-leise);
  font-size: var(--grad-klein);
  max-width: var(--satzbreite);
  margin: 4px 0 0;
}
/* Zeigen, was ein Klick schreibt (ADR-0024). */
.schreibhinweis {
  border-top: 1px solid var(--linie);
  padding-top: 8px;
  margin-top: var(--abstand);
}

.suchzeile { display: flex; gap: 8px; margin: var(--abstand) 0; max-width: 30rem; }
.suchzeile input { flex: 1; font: inherit; padding: 8px; border: 1px solid var(--linie-stark); border-radius: var(--radius); }

/* ---------- Katalogauswahl: Suchfeld ueber sichtbarer, scrollbarer Liste ----
 * Keine native datalist (zeigt auf dem Telefon nichts Verlaessliches an),
 * keine Filterknopfleiste (ADR-0024).
 */
.katalog { border: 1px solid var(--linie-stark); border-radius: var(--radius); }
.katalog-suche {
  width: 100%;
  border: none;
  border-bottom: 1px solid var(--linie-stark);
  padding: 8px;
  font: inherit;
  border-radius: var(--radius) var(--radius) 0 0;
}
.katalog-liste {
  list-style: none;
  margin: 0;
  padding: 0;
  max-height: 12rem;
  overflow-y: auto;
}
/* Zeilentrenner, also --linie und nicht --grund-tief: Eine Flaeche als Linie
   zu verwenden ist der Rest der Umbenennung von --flaeche und war nie
   Absicht. --linie ist das Token, dessen Zweck genau das ist. */
.katalog-liste li { border-bottom: 1px solid var(--linie); }
.katalog-liste label { display: block; padding: 8px; cursor: pointer; font-size: 1rem; color: inherit; margin: 0; }
.katalog-liste label { transition: background var(--dauer); }
.katalog-liste label:hover { background: var(--grund-tief); }
.katalog-liste li[hidden] { display: none; }

/* ---------- Fenster: Bearbeiten oeffnet ein Fenster, kein Seitenwechsel ---- */

.fenster {
  border: 1px solid var(--linie);
  border-radius: var(--radius-gross);
  padding: var(--abstand);
  max-width: 32rem;
  width: calc(100% - 2 * var(--abstand));
  background: var(--karte);
  color: inherit;
}
.fenster::backdrop { background: rgba(0, 0, 0, 0.4); }
.fenster h2 {
  margin-top: 0;
  font-size: var(--grad-gross);
  font-family: var(--schrift-zier);
  font-variant-numeric: tabular-nums;
}

/* Nur fuer Hilfsmittel, nicht sichtbar. */
.nur-lesbar {
  position: absolute;
  width: 1px; height: 1px;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
}

/* ---------- Unter 700 px wird die Liste zum Stapel, nicht scrollbar -------- */

@media (max-width: 700px) {
  .liste thead { display: none; }
  .liste, .liste tbody, .liste tr, .liste td { display: block; width: 100%; }
  .liste tr {
    border: 1px solid var(--linie);
    border-radius: var(--radius);
    margin-bottom: var(--abstand);
    padding: 4px;
  }
  .liste td { border: none; padding: 4px 8px; }
  .liste td[data-titel]::before {
    content: attr(data-titel);
    display: block;
    font-size: var(--grad-klein);
    color: var(--tinte-leise);
  }
  .spalte-aktionen { width: auto; text-align: left; }
  /* IM STAPEL GIBT ES KEINE NACHBARSPALTE MEHR, DIE PLATZ BRAUCHT — die Zelle
     hat die ganze Kartenbreite. Die 30ch von oben wuerden hier kuerzen, wo
     nichts drueckt: Am Handy stuende ein Name gekuerzt da, obwohl daneben
     nichts steht. `100%` kuerzt erst, wenn die Karte wirklich zu schmal ist,
     und behaelt Kuerzung samt `title` fuer diesen Fall. */
  .dateiname { max-width: 100%; }
  .feldpaar { flex-direction: column; gap: 0; }

  /* RANDLOSE KARTEN AM HANDY. Der Bildschirm ist die Karte; ein seitlicher
     Rand kostet dort Breite, die der Inhalt braucht.

     Das steht hier, weil die 3px der Verpflichtungskante genau daran haengen:
     Die Karte liegt an der Geraetekante an, und eine 2px-Kante verschwindet
     darin (ADR-0030, Nachtrag 20.08.2026). Ohne diese Regel waere die
     Begruendung der 3px gegenstandslos. */
  .inhalt { border-radius: 0; }
  .karte {
    border-radius: 0;
    border-right: 0;
    padding: var(--karte-innen-schmal);
  }
  /* Die Meldung ist eine Karte und wird mit ihnen randlos (Gestaltung,
     Antwort auf Rueckfrage 9). Anders als `.karte` traegt sie einen Rahmen —
     ohne ihn waere sie nach dem Wegfall der Stufenkante von einer stillen
     Karte nur noch am ersten Wort zu unterscheiden. Waagrecht bleibt er
     deshalb stehen, senkrecht faellt er mit der Kante weg. */
  .meldung {
    border-radius: 0;
    border-left: 0;
    border-right: 0;
  }
  /* AM HANDY STEHT DER PLUS-KNOPF UNTER DEM TITEL, NICHT NEBEN IHM
     (Gestaltung, Antwort auf Rueckfrage 3): Bei 390px kostet das Nebeneinander
     beides — der Titel kuerzt, und der Knopf wird schmaler als sein Wort.
     Volle Breite minus Einzug ergibt sich von selbst, weil der Seitenkopf den
     Einzug traegt. */
  .seitenkopf { flex-direction: column; align-items: stretch; }
  .seitenkopf-aktionen { margin-left: 0; }
  .seitenkopf-aktionen .knopf-plus { width: 100%; }
  /* NICHT .karte-pflicht. Die Verpflichtungskante ueberlebt die Bruchkante —
     sonst faellt genau am Geraet weg, fuer das ihre 3px begruendet sind.

     Gemessen und im Bild gesehen: Ein pauschales border-left: 0 auf .karte
     steht spaeter im Stilblatt als .karte-pflicht, hat dieselbe Spezifitaet
     und gewinnt. Die Kante war am Handy weg, und die Kette hat es nicht
     bemerkt — sie prueft seither auch das. */
  .karte:not(.karte-pflicht) { border-left: 0; }

  /* UND DIE TEXTKARTE GIBT IHRE BEGRENZUNG HIER AUF, weil der Bildschirm die
     Karte ist. Ohne diese Zeile hoert sie randlos VOR der Geraetekante auf und
     sieht nach einem Darstellungsfehler aus statt nach einer Absicht.

     GEMESSEN AM 29.08.2026, UND ES BERICHTIGT MEINEN EIGENEN KOMMENTAR OBEN:
     Dort stand, die Begrenzung wirke unter der Bruchkante nie, weil die Karte
     dort schmaler sei als 72 Zeichen. DIE GRENZE IST ABER NICHT 700 px,
     SONDERN RUND 606 — genau `calc(72ch + 2 * --abstand)`. Dazwischen liegen
     94 px, in denen beides zugleich galt: randlos (border-radius 0) UND
     begrenzt. Bei 667 px — dem Handy im Querformat — klaffte rechts eine
     Luecke von 62 px.

     Das ist die Klasse „ein Grund, der den heutigen Zustand beschreibt statt
     der Bauart": Der Satz war richtig gedacht und an der falschen Zahl
     aufgehaengt. Jetzt ist er GEBAUT und nicht mehr angenommen. */
  .textkarte { max-width: none; }

}

/* ---------------------------------------------------------------------------
   DAS BAND AM GERAET — UND DIE BEDINGUNG IST NEU (Entscheidung E4).

   `(max-width: 699px), (max-height: 450px)` — DAS KOMMA IST DAS ODER. Die
   Vorgabe schreibt `(max-width: 699px) or (max-height: 450px)`; das ist
   Media Queries Level 4 und braucht die aeussere Klammer. Die Kommaform sagt
   dasselbe und wird von jedem Browser verstanden, der `dvh` kennt.

   SIE FAENGT DAS HANDY IM QUERFORMAT: 844 px breit, 390 px hoch. Das lag
   bisher in der Tablettfassung, und der Kopfbereich frass 124 von 390 px —
   mit der Fussleiste sind es 62, bei praktisch gleichem Restplatz (266 gegen
   268 px). Der Grund ist nicht der Platz, sondern der Griffweg: Wer das Geraet
   dreht, soll die Bedienung nicht an einer anderen Stelle suchen.

   DIE 450 SIND GEWAEHLT UND LIEGEN IN EINER LUECKE: Ein Telefon im Querformat
   ist 375 bis 430 px hoch, ein Tablett im Querformat 744 px und mehr. Der Wert
   liegt zwischen zwei Geraetemengen und nicht am Rand einer.

   DIE UEBRIGEN 699er-BLOECKE IN DIESEM STILBLATT BEKOMMEN DIE HOEHE NICHT.
   Sie regeln Raender, Listen und Karten; ein Fenster von 1440 x 400 soll seine
   Karten behalten. E4 ist eine Entscheidung ueber die NAVIGATION, und nur die
   Regeln, die zur Navigation gehoeren, tragen sie: Bandhoehe, Fussleiste, der
   Platz darunter.

   60px hoch, mit Kante 62. Der Innenabstand ist RECHTS JETZT 14 STATT 6: Die
   6 waren damit begruendet, dass "der Menueknopf seine 44px selbst mitbringt".
   Faellt der Knopf weg, faellt die Begruendung weg, und der Rand ist wieder
   symmetrisch (Vorgabe Fussleiste, Abschnitt 1).

   Der Vereinsname bleibt stehen und bekommt die ganze Breite: Das Band traegt
   im Verein die Zugehoerigkeit und nicht die Bedienung.
   --------------------------------------------------------------------------- */
@media (max-width: 699px), (max-height: 450px) {
  /* DIE SEITE IST EIN BILDSCHIRM, KEIN BLATT (Auftrag, Abschnitt 5).
     Kopfband oben fest, der Inhalt scrollt darunter. Das FUSSBAND gehoert in
     den scrollenden Teil und nicht an die Unterkante — sonst nimmt es dauerhaft
     Hoehe weg fuer etwas, das man einmal liest.

     100dvh und nicht 100vh: vh rechnet am Telefon die Adressleiste mit, dvh
     nicht. Mit vh steht die Seite unter der Leiste und ist unerreichbar. */
  body {
    height: 100dvh;
    display: flex;
    flex-direction: column;
  }
  .seitenlauf {
    flex: 1;
    overflow-y: auto;
    -webkit-overflow-scrolling: touch;
  }

  /* 60 plus 2px Kante = 62. Dieselbe Zahl steht an .geraet-menue[open]::before
     als top. */
  .kopf {
    gap: 12px;
    padding: 8px 14px;
    min-height: 60px;
  }
  .kopf-name { font-size: 17px; line-height: 1.25; }

  /* DER UNTERHANG FOLGT DEM INNENABSTAND DIESES BLOCKS: 8px unten + 2px
     Messingkante. Er steht hier und nicht als Literal bei `.kopf-benutzer`,
     damit er mit dem Innenabstand darueber zusammen gelesen wird. */
  .kopf-benutzer { --band-unterhang: 10px; --flaeche-luft: 129px; }

  /* 8 px VOM RAND (Design, Punkt 12) — der Innenabstand des Bandes ist hier
     14. Die 6px Unterschied nimmt dieses Element fuer sich, das Band behaelt
     seinen symmetrischen Rand (Fussleisten-Vorgabe, Abschnitt 1). Damit
     enden Zeichenfeld UND Flaeche 8px vor der Geraetekante, und der Hals
     trifft sie.

     GEMELDET: Design nennt die 8 ohne den Innenabstand des Bandes zu nennen.
     Das ist die Lesart „Treffbereich und Flaeche fluchten", nicht „das Band
     bekommt einen anderen Rand". */
  .kopf-benutzer { --zeichen-rueckzug: -6px; }
  /* ABMELDEN IST HIER NICHT WEG, SONDERN UMGEZOGEN: Es steht im Fuss des
     Blattes hinter `Mehr`. Waere es nur ausgeblendet, gaebe es am Geraet
     keinen Weg hinaus — deshalb steht der Fuss dort und nicht nur Hilfe und
     Support. */
  .kopf-ich { display: none; }

  /* DIE FUSSLEISTE. 60px, fuenf Felder zu je `flex: 1 1 0`, an der
     Geraetekante fest. Keine Rundung und keine Schattenkante: Sie sitzt an der
     Kante und braucht keine. */
  .fussleiste {
    display: flex;
    position: fixed;
    left: 0;
    right: 0;
    bottom: 0;
    height: 60px;
    background: var(--karte);
    border-top: 1px solid var(--linie);
    z-index: 28;
  }

  /* DER INHALT BEKOMMT UNTEN 60px, damit die letzte Zeile nicht unter der
     Leiste liegt. DAS IST KEIN NEUER SEITENRAND: --randunten bleibt am Geraet
     bei 0, die 60px sind die Hoehe der Leiste und aendern sich mit ihr. */
  .seitenlauf { padding-bottom: 60px; }
}

/* ---------------------------------------------------------------------------
   DIE RAENDER DER MITTLEREN FASSUNG, 700 bis 1119px.

   DIE ZWEIZEILIGE FASSUNG DES BANDES IST AUFGEHOBEN (Vorgabe 27.08.2026,
   Abschnitt 8, zu 2.2). Hier standen bis zum 27.08.2026 die Regeln, die das
   Band umbrechen liessen und die Navigation in eine zweite Bandzeile setzten.
   Ihre Zahl — 115px — war an einem Band OHNE Zeichen gemessen; mit Zeichen war
   Einzeiligkeit bei 768px nicht erreichbar, und das Band wurde 172px hoch.

   AN IHRER STELLE STEHT DIE MODULZEILE: 72 + 52 = 124px, weiss statt farbig,
   unter dem Band statt darin. Sie steht weiter unten bei "DIE NAVIGATION IN
   DREI FASSUNGEN".

   DIESER BLOCK BEHAELT NUR NOCH DIE RAENDER. Sie haben mit der Navigation
   nichts zu tun und tragen deshalb auch die Hoehenbedingung aus E4 nicht.
   --------------------------------------------------------------------------- */
@media (min-width: 700px) and (max-width: 1119px) {
  :root {
    --seitenrand: 14px;
    --randoben: 16px;
    --randunten: 20px;
  }
  .kopf-name { font-size: 18px; }
  .kopf-ich { gap: 14px; }
}

/* ===========================================================================
   DIE NAVIGATION IN DREI FASSUNGEN (Vorgabe der Gestaltung, 27.08.2026,
   Entscheidungen E1 bis E6; Fussleiste in der Vorgabe vom selben Tag).

   Sie ersetzt Abschnitt 1.4 der Kopfband-Vorgaben VOLLSTAENDIG.

     ab 1120px und ab 451px hoch    Seitenleiste links, 240px, weiss
     700 bis 1119px, ab 451px hoch  weisse Modulzeile unter dem Band
     E4-Bedingung                   Fussleiste unten, 60px

   DIE DREI BEDINGUNGEN SCHLIESSEN EINANDER AUS, und das ist Absicht: Die
   Grundregel weiter oben stellt alle drei auf display:none, und jeder
   Medienblock schaltet genau eine ein. Drei Fassungen, die einander
   ueberschreiben, waeren bei der naechsten Aenderung nicht mehr zu halten.

   BEIDE OBEREN FASSUNGEN TRAGEN `(min-height: 451px)`. Ohne diese Zeile stuende
   auf einem Handy im Querformat (844 x 390) die Modulzeile UND die Fussleiste
   da — E4 waere dann eine Ergaenzung statt einer Bruchkante.
   =========================================================================== */

/* ---------------------------------------------------------------------------
   DIE ZEICHEN.

   SIE KOMMEN ALS MASKE UND NICHT ALS <img>, und dafuer gibt es genau einen
   Grund: Die Vorgabe des Zeichensatzes sagt "Ueber `<img src=…>` greift
   `currentColor` nicht". Ein Zeichen im <img> traegt die Farbe, die in der
   Datei steht — Tinte —, und sonst keine. Die Navigation braucht drei Toene:
   Tinte in der Seitenleiste, --tinte-leise im ruhenden Feld der Fussleiste,
   die Vereinsfarbe im aktiven Eintrag.

   Die Maske nimmt den Alphakanal der Datei und faerbt ihn mit
   `background-color: currentColor`. DAMIT WIRD KEINE DATEI ANGEFASST — die 45
   Zeichen bleiben Byte fuer Byte die gelieferten, und 165_zeichensatz.php misst
   sie weiter. Der andere Weg waere gewesen, die SVG in das Markup zu schreiben;
   dann stuenden 45 Zeichnungen in einer PHP-Vorlage, und die naechste Lieferung
   muesste sie dort suchen.

   DIE CSP TRAEGT DAS: kern/sicherheit.php erlaubt `img-src 'self' data:`, und
   eine Maske wird als Bild geladen. Kein Inline-Stil, keine Ausnahme.

   ---------------------------------------------------------------------------
   24 PX UND NICHT 22 ODER 20 — UND DAS IST EINE ABWEICHUNG VON DER
   NAVIGATIONS-VORGABE, DIE GEMELDET IST.

   Die Navigations-Vorgabe nennt 22px in der Seitenleiste und 20px in der
   Modulzeile. Die BAUVORSCHRIFT des Zeichensatzes (Abschnitt 2 der
   Zeichenliste) sagt: "Mindestgroesse 24 px — keine kompakte Fassung, darunter
   laesst man das Zeichen weg, statt es kleiner zu setzen."

   Beide Vorgaben stammen vom selben Tag und derselben Stelle. Die Zeichenliste
   sagt von sich: "Diese Datei ist massgeblich" — fuer die Namen, die Gruppen
   und die BAUVORSCHRIFT. Die Mindestgroesse steht in der Bauvorschrift.

   Der dritte Weg — das Zeichen weglassen — scheidet aus: E1 und E6 setzen
   ausdruecklich Zeichen in Seitenleiste und Modulzeile.

   Gebaut ist deshalb 24px in allen drei Fassungen. WER DIE 22 UND 20 WILL,
   ENTSCHEIDET GEGEN DIE BAUVORSCHRIFT UND NICHT GEGEN DIESE ZEILE.

   DER PREIS IST BEZAHLT UND NICHT MEHR OFFEN (Vorgabe der Gestaltung,
   27.08.2026, an der Buehne gemessen). Hier stand bis dahin: die groesseren
   Zeichen koennten die Modulzeile bei 768px ueber die Kante schieben, das
   schiebe aber bloss waagrecht und breche keine Zusicherung. DAS WAR RICHTIG
   UND ZU WENIG — E6 verlangt sechs Eintraege und den Oeffner OHNE Schieben,
   und der Ueberhang waere 28px gewesen. Die Gestaltung hat dafuer den
   Innenabstand und den Abstand zwischen den Eintraegen neu gemessen; die
   Rechnung steht bei `.zeile-lauf`.

   IN DER SEITENLEISTE HAT DERSELBE PREIS DIE BREITE GEKOSTET: 232px -> 240px,
   Rechnung bei `.seitenleiste`.
   --------------------------------------------------------------------------- */
.nav-zeichen {
  display: block;
  width: 24px;
  height: 24px;
  flex: none;
  background-color: currentColor;
  -webkit-mask-repeat: no-repeat;
          mask-repeat: no-repeat;
  -webkit-mask-position: center;
          mask-position: center;
  -webkit-mask-size: contain;
          mask-size: contain;
}

/* DER PLATZHALTER FUER `Daten`. Es hat kein Zeichen, und die Gestaltung hat
   keines gezeichnet — "der Satz kennt `einlesen` und `ausliefern` als
   HANDLUNGEN, aber keinen Ort, an dem Daten liegen".

   Er ist LEER UND NICHT WEG: In einer Zeilenliste stuende das Wort sonst 36px
   weiter links als jedes andere, und eine Liste mit einer ausscherenden Zeile
   liest sich als Fehler. Er zeigt nichts an — das ist der Unterschied zu einem
   Ersatzzeichen, das etwas behaupten wuerde. */
.nav-zeichen-leer {
  background-color: transparent;
  -webkit-mask-image: none;
          mask-image: none;
}

/* DIE ELF ZUORDNUNGEN — ZEHN MENUEPLAETZE UND `Daten`.

   Die Reihenfolge ist die Menuereihenfolge, und die ersten zehn Namen sind die
   der Gruppe "Modul" des Zeichensatzes: Alle zehn Menueeintraege tragen eines,
   und die Liste der Gestaltung fuehrt sie genau so. Der Platzschluessel in
   kern/navigation.php IST dieser Dateiname ohne Endung — deshalb steht hier
   keine zweite Zuordnung, sondern dieselbe.

   `daten` IST DIE ELFTE UND FOLGT DIESER REGEL NICHT, und das ist der Grund,
   warum sie eigens dasteht: `Daten` hat KEINEN Platz in menuevorgabe(). Der
   Eintrag haengt an dem Recht `import_fuehren` und wird in
   navigationseintraege() eigens angehaengt, abgesetzt durch eine Zierlinie —
   er ist kein Modul. Sein Zeichenname steht dort als Literal und nicht als
   Platzschluessel.

   EIN WEITERER EINTRAG BRAUCHT HIER EINE ZEILE. Dass er sie hat, prueft
   tests/faelle/175_navigation.php — und zwar gegen JEDES Zeichen, das die
   Navigation ausgibt, nicht nur gegen menuevorgabe(). Die Schleife las bis zum
   27.08.2026 nur die Plaetze; `daten` waere durchgefallen, ohne dass etwas rot
   geworden waere. Ohne die Zeile stuende ein leerer Platz neben einem Wort, und
   niemand saehe es am Schreibtisch — eine Maske, die nicht laedt, faerbt nichts
   und meldet nichts. */
.nav-zeichen[data-zeichen="startseite"]      { -webkit-mask-image: url(zeichen/startseite.svg);      mask-image: url(zeichen/startseite.svg); }
.nav-zeichen[data-zeichen="termin"]          { -webkit-mask-image: url(zeichen/termin.svg);          mask-image: url(zeichen/termin.svg); }
.nav-zeichen[data-zeichen="vereinsbuch"]     { -webkit-mask-image: url(zeichen/vereinsbuch.svg);     mask-image: url(zeichen/vereinsbuch.svg); }
.nav-zeichen[data-zeichen="amtsseite"]       { -webkit-mask-image: url(zeichen/amtsseite.svg);       mask-image: url(zeichen/amtsseite.svg); }
.nav-zeichen[data-zeichen="sitzungen"]       { -webkit-mask-image: url(zeichen/sitzungen.svg);       mask-image: url(zeichen/sitzungen.svg); }
.nav-zeichen[data-zeichen="veranstaltungen"] { -webkit-mask-image: url(zeichen/veranstaltungen.svg); mask-image: url(zeichen/veranstaltungen.svg); }
.nav-zeichen[data-zeichen="vereinskassa"]    { -webkit-mask-image: url(zeichen/vereinskassa.svg);    mask-image: url(zeichen/vereinskassa.svg); }
.nav-zeichen[data-zeichen="zeugwart"]        { -webkit-mask-image: url(zeichen/zeugwart.svg);        mask-image: url(zeichen/zeugwart.svg); }
.nav-zeichen[data-zeichen="notenarchiv"]     { -webkit-mask-image: url(zeichen/notenarchiv.svg);     mask-image: url(zeichen/notenarchiv.svg); }
.nav-zeichen[data-zeichen="chronik"]         { -webkit-mask-image: url(zeichen/chronik.svg);         mask-image: url(zeichen/chronik.svg); }
.nav-zeichen[data-zeichen="daten"]           { -webkit-mask-image: url(zeichen/daten.svg);           mask-image: url(zeichen/daten.svg); }

/* ---------------------------------------------------------------------------
   FASSUNG 1 — DIE SEITENLEISTE AB 1120 PX (E1).
   --------------------------------------------------------------------------- */
@media (min-width: 1120px) and (min-height: 451px) {
  /* DIE HUELLE WIRD ZUM RASTER UND NICHT ZUR FLEX-ZEILE, und das hat einen
     gemessenen Grund: In `.seitenlauf` liegen DREI Kinder — die Leiste, der
     Inhalt und das Fussband. Eine Flex-Zeile stellte das Fussband NEBEN den
     Inhalt. Im Raster steht die Leiste in Spalte 1 ueber beide Zeilen, Inhalt
     und Fussband untereinander in Spalte 2.

     minmax(0, 1fr) und nicht 1fr: Ohne die Null als Untergrenze weigert sich
     eine Rasterspalte, schmaler zu werden als ihr laengster Inhalt — eine
     breite Tabelle schoebe dann die Leiste aus dem Bild. */
  /* DIE ERSTE SPALTE IST `auto` UND NICHT DIE LEISTENBREITE, UND DAS IST DER
     ANMELDESEITE GESCHULDET.

     Diese Vorlage traegt auch die Anmelde- und die Fehlerseite, und dort gibt
     es keine Leiste — kern/ansicht/kopf.php gibt sie nur fuer ein angemeldetes
     Konto aus. Mit einer festen Spalte stand dort eine LEERE weisse Spalte,
     und der Inhalt begann um die Leistenbreite weiter rechts. Gemessen am
     27.08.2026 an `anmelden`: .inhalt bei x = 232 statt bei 0 — 232px war die
     Leistenbreite jenes Tages, seit dem 27.08.2026 (Vorgabe der Gestaltung,
     an der Buehne gemessen) sind es 240px. DIE MESSUNG BLEIBT HIER MIT IHRER
     ZAHL STEHEN: Sie sagt, was an ihrem Tag gemessen wurde, und wird nicht auf
     einen Stand umgeschrieben, den sie nie gesehen hat.

     `auto` nimmt die Breite ihres Inhalts: mit Leiste 240px (die Leiste bringt
     sie mit), ohne Leiste null. Damit haengt die Spalte am Bau und nicht an
     einer zweiten Bedingung, die jemand vergessen kann — und sie zieht bei der
     naechsten Massaenderung von selbst mit. */
  .seitenlauf {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr);
    grid-template-rows: auto auto;
  }
  .seitenleiste { display: block; grid-column: 1; grid-row: 1 / span 2; }
  /* `width: 100%` IST HIER NICHT ZIERAT, SONDERN NOTWENDIG, und der Fall ist
     gemessen: `.inhalt` und `.fuss` tragen `max-width: 1100px` mit
     `margin-left/right: auto`. Im normalen Fluss zentriert das einen Block
     ueber die volle Breite. IN EINER RASTERZELLE MACHEN AUTO-RAENDER AUS DEM
     ELEMENT EIN `fit-content` — es schrumpft auf seinen Inhalt und steht
     mittig darin.

     Gemessen am 27.08.2026 bei 1280 px Fensterbreite: ohne diese Zeile war
     `.inhalt` 597 px breit statt 1033 und begann bei x = 450. Im Bild sah es
     aus wie eine sehr schmale Spalte neben einer sehr breiten Leiste, und
     nichts in der Kette haette das gezeigt. */
  .inhalt { grid-column: 2; grid-row: 1; width: 100%; }
  .fuss   { grid-column: 2; grid-row: 2; width: 100%; }
}

/* Die Leiste selbst. Ihre Masse gelten unabhaengig davon, ob sie gerade
   sichtbar ist — eingeschaltet wird sie oben, gestaltet hier. Das haelt die
   Medienbloecke kurz und die Masse an einer Stelle. */
/* 240 PX UND NICHT 232, UND DIE ACHT PIXEL SIND EINE MESSUNG (Vorgabe der
   Gestaltung, 27.08.2026, an der Buehne gemessen und nicht gerechnet).

   SIE HAENGEN AN DEN 24-PX-ZEICHEN. Der Platz fuer den Namen ist, was von der
   Breite uebrig bleibt, und er rechnet sich aus vier Zahlen, die alle hier in
   der Datei stehen:

     240  Breite der Leiste
     - 1  die Haarlinie rechts (box-sizing: border-box, Zeile 254)
     -36  padding 0 18px an `.leiste-liste a`
     -24  das Zeichen `.nav-zeichen`
     -12  gap zwischen Zeichen und Wort
     ---
      167 px fuer den Namen — der laengste misst 163 px (Gestaltung, gemessen).

   MIT 232 PX WAEREN ES 159 GEWESEN, und der laengste Name haette umgebrochen.
   Eine umgebrochene Zeile in einer Liste, in der alle anderen einzeilig sind,
   liest sich als Fehler — und keine Zusicherung dieses Baums haette es
   gezeigt, weil ein Umbruch im Bild steht und nicht im Bau.

   WER EINE DER VIER ZAHLEN AENDERT, AENDERT DEN PLATZ FUER DEN NAMEN.
   tests/faelle/175_navigation.php rechnet die Summe nach und wird rot, wenn
   sie unter 167 faellt. */
.seitenleiste {
  width: 240px;
  flex: none;
  background: var(--karte);
  border-right: 1px solid var(--linie);
  padding: 12px 0;
  /* SIE SCROLLT FUER SICH UND NICHT DIE SEITE. Gemessen von der Gestaltung:
     elf Eintraege zu 44px sind 585px — auf 800px Bildschirmhoehe passt das,
     bei mehr Modulen nicht mehr. Dann scrollt die Leiste, und der Inhalt
     bleibt stehen, wo er war.

     72px ist die Bandhoehe: 70 plus 2px Messingkante. */
  position: sticky;
  top: 72px;
  height: calc(100vh - 72px);
  overflow-y: auto;
}

.leiste-kicker {
  font-family: var(--schrift-zier);
  font-variant-numeric: tabular-nums;
  font-size: 11.5px;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--tinte-leise);
  padding: 6px 18px 4px;
  margin: 0;
}

.leiste-liste {
  list-style: none;
  margin: 0;
  padding: 0;
}
.leiste-liste a {
  display: flex;
  align-items: center;
  gap: 12px;
  min-height: 44px;
  padding: 0 18px;
  font-size: 15px;
  color: var(--tinte);
  text-decoration: none;
}
.leiste-liste a:hover { background: var(--grund); }

/* DER AKTIVE EINTRAG: Gewicht 600 und ein Band links, 3px in der Vereinsfarbe.
   KEINE FLAECHE — damit gilt ADR-0024, Nachtrag vom 20.08.2026, auch hier.

   ALS `inset`-SCHATTEN UND NICHT ALS RAHMEN: Ein border-left schoebe die Zeile
   beim Wechsel um 3px nach rechts, und dann wandert bei jedem Seitenwechsel
   die ganze Leiste.

   DIE 3 PX SIND HIER ZULAESSIG, und der Grund steht in den alten Vorgaben,
   Abschnitt 2.6: Die Zusicherung ueber die senkrechte Kante gilt fuer Kanten AN
   EINER KARTENKANTE IM INHALT. Die Leiste ist kein Inhalt, und auf ihr liegt
   keine Karte — beide zugleich zu sehen ist nicht moeglich. */
.leiste-liste a[aria-current="page"] {
  font-weight: 600;
  box-shadow: inset 3px 0 0 var(--verein);
}

/* DIE ZIERLINIE VOR `Daten`. Es ist kein Modul und steht deshalb abgesetzt.
   Als Pseudoelement und mit 18px Einzug: Eine Linie ueber die volle Breite
   sieht aus wie das Ende der Leiste. */
.leiste-abgesetzt {
  position: relative;
  margin-top: 21px;
}
.leiste-abgesetzt::before {
  content: "";
  position: absolute;
  top: -10px;
  left: 18px;
  right: 18px;
  border-top: 1px solid var(--linie);
}

/* ---------------------------------------------------------------------------
   FASSUNG 2 — DIE MODULZEILE, 700 BIS 1119 PX (E6).
   --------------------------------------------------------------------------- */
@media (min-width: 700px) and (max-width: 1119px) and (min-height: 451px) {
  .modulzeile { display: flex; }
}

/* DER INNENABSTAND IST 10 PX UND NICHT 14 (Vorgabe der Gestaltung,
   27.08.2026, an der Buehne gemessen). Die vier Pixel je Seite gehen an die
   Eintraege; die Begruendung steht bei `.zeile-lauf` weiter unten, weil sie
   dort mit dem Abstand ZWISCHEN den Eintraegen zusammen eine Rechnung ergibt.

   DIE 18 PX HIER SIND GEBLIEBEN, und das ist kein Uebersehen: Dieser gap steht
   zwischen der schiebenden Huelle und dem Oeffner `Mehr` — nicht zwischen
   Eintraegen. Die Vorgabe aendert den Abstand ZWISCHEN EINTRAEGEN. */
.modulzeile {
  align-items: center;
  height: 52px;
  padding: 0 10px;
  gap: 18px;
  background: var(--karte);
  border-bottom: 1px solid var(--linie);
  flex-wrap: nowrap;
  /* SIE BLEIBT UNTER DEM BAND STEHEN. Das Band ist sticky; eine Modulzeile,
     die wegscrollt, waere die Navigation, die man am Tablett verliert, sobald
     man einmal blaettert. 72px ist die Bandhoehe. */
  position: sticky;
  top: 72px;
  z-index: 19;
}

/* KEIN UMBRUCH, IN KEINER BREITE, UND KEIN STILLES ABSCHNEIDEN. Reicht der
   Platz nicht, schiebt die Zeile waagrecht. Das ist Zusicherung 2: "Reicht ein
   Platz nicht, wird geschoben oder geoeffnet — nie abgeschnitten."

   GESCHOBEN WIRD DIE HUELLE UM DIE EINTRAEGE UND NICHT DIE GANZE ZEILE, und
   der Grund ist gemessen: `overflow-x: auto` schneidet AUCH SENKRECHT ab. Der
   Oeffner `Mehr` haengt eine Flaeche unter sich; laege er in derselben Huelle,
   waere diese Flaeche oben weggeschnitten. Ein Menue, das sich oeffnet und
   nichts zeigt, ist schlimmer als keines — und im Bild ist es NICHT zu sehen,
   solange die Zeile noch nicht ueberlaeuft. */
/* DIE 14 PX ABSTAND SIND GEMESSEN UND NICHT GEWAEHLT (Vorgabe der Gestaltung,
   27.08.2026, an der Buehne gemessen).

   SIE SIND DER PREIS DER 24-PX-ZEICHEN, und die Rechnung geht so auf:

     +8   Innenabstand der Zeile, 14px -> 10px, zweimal
     +20  Abstand zwischen den Eintraegen, 18px -> 14px, bei sechs Eintraegen
          fuenfmal
     ---
      28 px

   MIT DEN 24-PX-ZEICHEN UND DEN ALTEN ABSTAENDEN WAEREN BEI 768 PX GENAU
   28 PX UEBER DIE KANTE GESTANDEN. Mit den neuen ist der Ueberhang in allen
   drei geprueften Breiten 0px — 768, 844 und 1024. Sechs Eintraege und der
   Oeffner messen zusammen 658 von 748 px (Gestaltung, gemessen).

   WARUM DAS UEBERHAUPT AUFFALLEN MUSSTE: Ein Ueberhang bricht hier NICHTS —
   `overflow-x: auto` schiebt, und Zusicherung 2 ist gehalten. E6 verlangt aber
   sechs Eintraege und den Oeffner OHNE Schieben. Die Zeile haette geschoben,
   niemand haette etwas gesehen, und E6 waere still gebrochen gewesen.

   DIE ALTE BEGRUENDUNG STAND AUF ZEICHEN ZU 20 PX und ist damit ueberholt; sie
   wird nicht danebengestellt, weil sie eine Rechnung war und keine Messung. */
.zeile-lauf {
  display: flex;
  align-items: center;
  gap: 14px;
  flex: 0 1 auto;
  min-width: 0;
  overflow-x: auto;
  white-space: nowrap;
}

.zeile-eintrag {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  flex: none;
  min-height: 44px;
  font-size: 15px;
  color: var(--tinte);
  text-decoration: none;
  border-bottom: 2px solid transparent;
}

/* DER AKTIVE EINTRAG: Vereinsfarbe, Gewicht 600, 2px Unterkante, keine Flaeche.
   ZWEI PX UND NICHT DREI: 3px ist die Signatur der Verpflichtungskante, und
   dieselbe Staerke an einem Zierband naehme ihr die Einmaligkeit — dieselbe
   Rechnung wie bei der Trennkante unter dem Band. Die Kante liegt WAAGRECHT,
   Zusicherung 5 ist also nicht beruehrt. */
.zeile-eintrag[aria-current="page"] {
  color: var(--verein);
  font-weight: 600;
  border-bottom-color: var(--verein);
}

/* Die senkrechte Zierlinie vor `Daten` in der Zeile. Dasselbe wie die
   waagrechte in der Leiste, nur um 90 Grad gedreht, weil der Aufbau sich
   gedreht hat. 1px — keine Kante im Sinne von Zusicherung 5, die faengt erst
   ab 2px und nur an einer Kartenkante im Inhalt. */
.zeile-zierlinie {
  flex: none;
  width: 1px;
  align-self: stretch;
  margin: 12px 0;
  background: var(--linie);
}

/* DER OEFFNER `Mehr`, rechts aussen. KEINE FLAECHE IN KEINEM ZUSTAND — damit
   gilt ADR-0024, Nachtrag vom 20.08.2026, auch hier. */
.mehr-oeffner {
  position: relative;
  margin-left: auto;
  flex: none;
}
.mehr-knopf {
  display: flex;
  align-items: center;
  gap: 6px;
  min-height: 44px;
  padding: 0 4px;
  font-size: 15px;
  color: var(--tinte-leise);
  cursor: pointer;
  list-style: none;
}
.mehr-knopf::-webkit-details-marker { display: none; }
.mehr-knopf:focus-visible {
  outline: 2px solid var(--tinte-leise);
  outline-offset: -2px;
}
.mehr-winkel { display: inline-block; }
.mehr-oeffner[open] > .mehr-knopf { color: var(--tinte); font-weight: 600; }
.mehr-oeffner[open] > .mehr-knopf .mehr-winkel { transform: rotate(180deg); }

/* ---------------------------------------------------------------------------
   FASSUNG 3 — DIE FUSSLEISTE AM GERAET (E5).

   Eingeschaltet wird sie im E4-Block weiter oben; hier stehen ihre Masse.
   --------------------------------------------------------------------------- */
.fussleiste-feld {
  flex: 1 1 0;
  min-width: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 4px;
  padding: 6px 2px;
  color: var(--tinte-leise);
  text-decoration: none;
  /* Der Platzhalter fuer die aktive Kante. Er liegt im Ruhezustand
     durchsichtig da, damit das Feld beim Wechsel nicht springt. */
  box-shadow: inset 0 2px 0 transparent;
}

/* DAS AKTIVE FELD: Vereinsfarbe fuer Zeichen und Wort, Gewicht 600, dazu eine
   waagrechte Kante 2px in der Vereinsfarbe an der OBERKANTE des Felds. Keine
   Flaeche. Zwei Gruende fuer 2px und nicht 3, beide dieselben wie in der
   Modulzeile: die Signatur der Verpflichtungskante, und die Kante liegt
   waagrecht. */
.fussleiste-feld[aria-current="page"] {
  color: var(--verein);
  font-weight: 600;
  box-shadow: inset 0 2px 0 var(--verein);
}
.fussleiste-feld:focus-visible {
  outline: 2px solid var(--tinte-leise);
  outline-offset: -2px;
}

/* 12PX IST DER KLEINSTE SCHRIFTGRAD IM GANZEN SYSTEM, und die Gestaltung sagt
   selbst, dass sie ihn nicht am Geraet gemessen hat: "Die Breiten sind gemessen
   und passen; ob der Grad am Geraet lesbar ist, ist es nicht. Faellt er durch,
   ist die Alternative ein Feld nur mit Zeichen und dem Namen allein am aktiven
   Feld — NICHT ein gekuerzter Name."

   nowrap und kein text-overflow: Ein Name, der hier kuerzte, waere genau das,
   was die Aufnahmebedingung verhindern soll. Passt er nicht, gehoert das Modul
   hinter `Mehr` — das entscheidet kern/navigation.php und nicht diese Zeile. */
.fussleiste-wort {
  font-size: 12px;
  line-height: 1.2;
  white-space: nowrap;
}

/* Der Benachrichtigungspunkt sitzt am Zeichen und nicht am Wort: oben rechts,
   2px Abstand. Das Feld ist eine Spalte, und ein Punkt hinter dem Wort saesse
   in der zweiten Zeile statt an der Marke. */
.fussleiste-zeichenfeld {
  position: relative;
  display: block;
  height: 24px;
}
.fussleiste-zeichenfeld .nav-punkt {
  position: absolute;
  top: -2px;
  right: -6px;
  margin: 0;
}

/* Der Oeffner ist das fuenfte Feld und traegt dasselbe Mass wie die vier
   anderen. Das <details> selbst muss dafuer die Zeile mittragen — sonst
   bekaeme das Feld seine Breite aus dem Wort statt aus `flex: 1 1 0`. */
.geraet-menue {
  flex: 1 1 0;
  min-width: 0;
  display: flex;
}
.geraet-menue > summary { flex: 1 1 0; }
/* Der offene Zustand am Feld selbst: Es ist derselbe Treffbereich, und ein
   zweiter Knopf zum Schliessen waere ein zweiter Treffbereich an derselben
   Stelle. Kein Hintergrund — Zusicherung 3 gilt auch hier. */
.geraet-menue[open] > summary { color: var(--tinte); font-weight: 600; }

/* ---------------------------------------------------------------------------
   DIE ZEILENFORM, GETEILT VON BEIDEN `Mehr`-FLAECHEN.

   Sie ist die Form des alten offenen Menues (Kopfband-Vorgaben, 2.6) und
   lebt hier weiter: Mindesthoehe 56px, Zeichen, voller Name, rechts der
   Winkel, Zeilentrenner. Was dazugekommen ist, ist das Zeichen und die
   abgesetzte Zeile fuer `Daten`.
   --------------------------------------------------------------------------- */
.menue-abgesetzt {
  position: relative;
  margin-top: 21px;
}
.menue-abgesetzt::before {
  content: "";
  position: absolute;
  top: -10px;
  left: 0;
  right: 0;
  border-top: 1px solid var(--linie);
}

/* Unter 700px sind die Raender seitlich NULL. Das ist nicht Sparsamkeit,
   sondern der Bestand: Die Karten sind dort randlos, der Bildschirm IST die
   Karte. Oben bleiben 15px — ohne sie klebt der Seitentitel an der
   Messingkante, und die Kante wird als Unterstreichung des Titels gelesen. */
@media (max-width: 699px) {
  :root {
    --seitenrand: 0px;
    --randoben: 15px;
    --randunten: 0px;
  }

  /* --seitenrand IST DER AUSSENRAND UND NICHT DER INNENABSTAND, und diese
     zwei Regeln stellen das wieder her.

     Auf einer Zonenseite ist --seitenrand der Abstand ZWISCHEN Karte und
     Geraetekante; null zu setzen ist genau die randlose Karte aus dem Auftrag.
     Auf einer Seite OHNE Zonen ist derselbe Wert der Innenabstand der einen
     grossen Karte — dort bedeutet null, dass Beschriftung, Eingabefeld und
     Hinweistext an der Geraetekante kleben. Im Bild gesehen an `anmelden` bei
     500 px: Das Passwortfeld lief von Kante zu Kante, der Hinweis darunter
     stiess rechts an. Der Auftrag verlangt das Gegenteil — Abschnitt 5 nennt
     ausdruecklich "Innenabstand 16 px statt 26 px".

     --karte-innen-schmal und keine eigene Zahl: dieselbe Kante wie `.karte`
     unter der Bruchkante. Sonst stuenden zwei Innenabstaende nebeneinander,
     die dasselbe meinen (Gestaltung, Antwort auf Rueckfrage 6). */
  .inhalt:not(.zonen) {
    padding-left: var(--karte-innen-schmal);
    padding-right: var(--karte-innen-schmal);
  }

  /* Der Seitentitel und der Rueckverweis stehen auf --grund und liegen damit
     ausserhalb jeder Karte. Ohne eigenen Einzug beginnen sie bei null, waehrend
     jede Ueberschrift in der Karte darunter bei 16px beginnt — die Vorlage
     (bild/3-handy-390.png) zeigt beide auf derselben Kante. Die Gestaltung hat
     das am 20.08.2026 bestaetigt und den Wert an ein gemeinsames Token
     gebunden, damit die beiden Kanten nicht auseinanderlaufen koennen. */
  .inhalt.zonen > .seitenkopf,
  .inhalt .zurueck {
    padding-left: var(--karte-innen-schmal);
    padding-right: var(--karte-innen-schmal);
  }
}

/* Die Abstandsskala wechselt HIER und nirgends sonst: 10px am Handy statt 14px
   am Schreibtisch (Gestaltungsanweisung, 20.08.2026).

   Eigener Block auf :root und nicht eine Zeile im Stapelblock darueber: Eine
   Eigenschaft direkt im Rumpf einer Bruchkante gehoert zu keinem Waehler und
   wird verworfen — sie sieht aus wie eine Zuweisung und ist keine. */
@media (max-width: 700px) {
  :root { --zonenabstand: 10px; }
}

/* ---------------------------------------------------------------------------
   Erscheinung des Mandanten

   Die drei Werte kommen aus der Seite `farben`, nicht aus einem style-Element:
   Der CSP erlaubt keine Inline-Stile. Ohne Mandanten bleibt der neutrale Satz.

   Ein Mandant liefert EINEN Farbwert, der Kern rechnet drei. Rechenweg in
   docs/gestaltung/farbnormierung.md, Zahlen und Garantien in
   docs/gestaltung/farbnormierung-vorgaben.md.

   --verein-hover ersetzt einen CSS-Filter. Einen zu entfernen gab es nicht, und
   es soll auch keiner mehr entstehen: Ein brightness()-Filter auf einer
   normierten Farbe fuehrt aus dem Korridor hinaus, fuer den gerechnet wurde.
   --------------------------------------------------------------------------- */
:root {
  /* -----------------------------------------------------------------
     DER STANDARDSATZ IST DIE NORMIERUNG VON --tinte, KEIN EIGENER WERT.

     Entschieden vom Betreiber am 28.08.2026: "ich sagte, ich will den
     testverein in den standardfarben der anwendung."

     Bis dahin stand hier #4A5568 — ein Blaugrau, das zu KEINER Palette
     dieses Projekts gehoert. Gemessen ueber den ganzen Bestand: keine
     einzige Vorgabe, die es setzt, und null Fundstellen unter
     docs/gestaltung/. Die Palette der Anwendung ist gruengrau
     (--grund #E4E9E4, --tinte #1B211E, --linie #C6CFC8).

     WOHER DIE DREI ZAHLEN KOMMEN: Sie sind gerechnet, nicht gewaehlt.
     farbe_normieren('#1B211E') — dem Ton der Wortmarke im Fussband —
     liefert genau sie. --tinte liegt mit Leuchtdichte 0,01414 UNTER dem
     Korridor (0,045-0,175), der Eingriff heisst deshalb "aufgehellt";
     der Satz traegt darum #343E39 und nicht --tinte selbst.

     Weiss auf --verein erreicht 11,09 (zugesichert >= 4,64), Weiss auf
     --verein-hover 12,80 (>= 5,92), Messing auf --verein-hell 3,35
     (>= 3,34).

     WER EINEN DER DREI WERTE VON HAND AENDERT, MACHT
     tests/faelle/120_farbe.php ROT. Verschiebt sich der Korridor, ist
     DIESER SATZ nachzuziehen — nicht die Zusicherung.
     ----------------------------------------------------------------- */
  --verein: #343e39;
  --verein-hell: #d4d4d4;
  --verein-hover: #2c3430;

  /* ---------------------------------------------------------------------
     MESSING MARKIERT AUSSCHLIESSLICH VERPFLICHTUNG (ADR-0030).

     Wo Messing steht, muss jemand etwas tun: eine Faelligkeit, eine offene
     Rueckgabe, eine Frist, ein Befund, der eine Entscheidung verlangt.
     "Wichtig" ist nicht "verpflichtend".

     Messing ist NIE Text. Ausschliesslich Flaeche und Linie — damit greift
     die Textschwelle 4,5:1 nicht, sondern die Nichttext-Schwelle 3:1.
     Gemessen: gegen Weiss 4,97, gegen --verein-hell mindestens 3,35 —
     zugesichert ist >= 3,34 (Vorgaben, korrigiert am 19.08.2026).

     EINE erlaubte Ausnahme, und nur diese eine:

      1. DIE TRENNKANTE UNTER DEM KOPFBAND (.kopf unten). Sie grenzt an die
         Vereinsfarbe, die beliebig dunkel sein kann; gegen #2B3A67 sind es
         nur 2,22. Das ist hinnehmbar, weil eine Kante zwischen zwei Flaechen
         keine Zustandsanzeige ist und nicht unter WCAG 1.4.11 faellt.
         DIESER KOMMENTAR IST DIE BEGRUENDUNG — ohne ihn meldet die naechste
         Pruefung die Kante als Verstoss.

     AUSNAHME 2 IST AUFGEHOBEN, SOWEIT SIE SCHRIFT IST (ADR-0030, Nachtrag vom
     28.08.2026, Entscheidung des Betreibers). Hier stand bis dahin: "DAS
     PRODUKTZEICHEN SELBST (.fuss-marke)" — und damit war Messing als
     SCHRIFTton im Fussband erlaubt. DIE VERBOTSLISTE DESSELBEN ADR SAGT SEIT
     DEM ERSTEN TAG DAS GEGENTEIL: "Messing auf Ueberschriften, MARKEN oder
     Kennzahlen", Zeile 41, unter "Nicht erlaubt, auch wenn es gut aussieht".
     Beides stand nebeneinander, und niemand hat es gegeneinander gehalten.

     Die Wortmarke im Fuss fuehrt --tinte (wortmarke-tinte.svg). Zugesichert
     in 120_farbe.php, und zwar in der DATEI und nicht nur hier: Die Marke
     besteht aus zwei <img>, ihre Farbe steht im SVG und nicht in diesem
     Stilblatt.

     DIE BILDMARKE IST DAVON NICHT BERUEHRT. Sie ist kein Text; ob sie den Ton
     behaelt, entscheidet der Betreiber mit Design (ADR-0049). Hier wird
     nichts erschlossen.

     Weitere Ausnahmen gibt es nicht. Eine zweite braucht ein neues ADR.
     --------------------------------------------------------------------- */
  --messing: #8a6b2e;
}

/* ---------------------------------------------------------------------------
   Das Kopfband: die ganze Kopfzeile ist Flaeche in der Vereinsfarbe.

   Es ist RAHMEN und keine Handlungsflaeche (Nachtrag zu ADR-0024). Die volle
   Vereinsfarbe macht das Band zur gefuellten Flaeche; damit es die Regel "eine
   gefuellte Flaeche je Bildschirm" nicht bricht, ist im Band nichts gefuellt —
   keine Pille, kein Kasten, kein Knopf mit Hintergrund.

   Weisse Schrift darauf ist der Fall, fuer den der Korridor gebaut ist:
   garantiert mindestens 4,64 (Korridorfaelle) beziehungsweise 4,66
   (Praxisfaelle).
   --------------------------------------------------------------------------- */
/* DIE TRENNKANTE IST 2px, NICHT 3 (Kopfband-Vorgaben, Abschnitt 1.2).
   Berichtigung gegen den Ist-Zustand: 3px ist das Mass der
   Verpflichtungskante. Ein Zierband in derselben Staerke nimmt der
   Verpflichtung genau die Einmaligkeit, die sie traegt. Ausnahme 1 der
   Messing-Regel bleibt bestehen, mit ihrer Begruendung und mit 2px. */
.kopf {
  background: var(--verein);
  color: #fff;
  border-bottom: 2px solid var(--messing);   /* Ausnahme 1, siehe oben */
}

.kopf a,
.kopf .kopf-ich span {
  color: #fff;
}

/* DER NAME IM BAND IST DER WEG ZUR KONTOSEITE (Design, 29.08.2026, Punkt 7).

   ER SIEHT IM RUHEZUSTAND AUS WIE VORHER, und das ist die Vorgabe und keine
   Zurueckhaltung: Das Band traegt Zugehoerigkeit, nicht Bedienung. Ein
   unterstrichener Verweis neben `Abmelden` machte aus zwei Dingen zwei
   Knoepfe.

   DER ZEIGEZUSTAND IST DAS, WAS IHN VERRAET. Unterstreichung beim Zeigen und
   beim Tastaturfokus — nicht eine Farbaenderung: Die Bandfarbe ist ein
   Mandantendatum und kann beliebig dunkel sein (ADR-0003), ein zweiter weisser
   Ton darauf ist nicht zu garantieren. Eine Unterstreichung traegt auf jedem
   Grund.

   44 px TREFFBEREICH, dieselbe Zahl wie ueberall: Am Geraet steht der Name im
   Blatt unmittelbar ueber `Abmelden`, und zwei Ziele uebereinander brauchen
   je ihre volle Hoehe. */
/* `.menue-konto` STAND HIER MIT und ist am 29.08.2026 entfallen: Der Name im
   Mehr-Blatt war die E4-Fassung dieses Weges, und die ist jetzt das
   Benutzerzeichen im Band (Design, Punkt 12, Bauteil s). */
.kopf-konto {
  color: inherit;
  text-decoration: none;
  min-height: 44px;
  display: inline-flex;
  align-items: center;
}
.kopf-konto:hover,
.kopf-konto:focus-visible {
  text-decoration: underline;
  text-underline-offset: 3px;
}

/* ---------------------------------------------------------------------------
   DAS BENUTZERZEICHEN — DIE LAGE (Design, 29.08.2026, Punkt 12).

   Was hier steht, haengt an der VEREINSFARBE und gehoert deshalb in diesen
   Abschnitt; Masse und Bauform stehen oben im neutralen Satz.

   GESCHLOSSEN: Zeichen weiss auf der Vereinsfarbe, dazu eine Kante aus Weiss
   mit 45 % Deckung. Sie zeigt den Treffbereich, ohne eine Fuellung zu sein —
   ADR-0024, Nachtrag: "Im Kopfband traegt nichts eine Fuellung." Eine Kante
   ist keine.

   GEOEFFNET: Das Feld wird `--karte` (das Pseudoelement oben), also wechselt
   das Zeichen auf `--tinte` und die weisse Kante verschwindet. Sie stehen zu
   lassen hiesse, eine weisse Linie auf eine weisse Flaeche zu zeichnen.

   AM SCHREIBTISCH KEINE KANTE — Design nennt es ausdruecklich, und der Grund
   ist der Zeiger: Wer eine Maus hat, sucht keinen Treffbereich, er sieht ihn
   am Zeigezustand. */
.kopf-benutzer > summary {
  border: 1px solid rgba(255, 255, 255, 0.45);
}
.kopf-benutzer[open] > summary {
  border-color: transparent;
  color: var(--tinte);
}

/* KEINE KANTE AM SCHREIBTISCH (Design, Punkt 12: "Am Schreibtisch keine
   Kante."). Wer eine Maus hat, sucht keinen Treffbereich — er sieht ihn am
   Zeigezustand.

   SIE STEHT HIER UND NICHT BEI DEN UEBRIGEN SCHREIBTISCHREGELN, weil die
   weisse Kante zwei Zeilen darueber gesetzt wird und ein Medienblock die
   Spezifitaet nicht erhoeht: Weiter oben stuende sie VOR ihrer eigenen
   Grundregel und taete nichts. */
@media (min-width: 1120px) and (min-height: 451px) {
  .kopf-benutzer > summary { border-color: transparent; }
}

/* `.kopf a { color: #fff }` steht weiter oben und traefe die Wege in der
   Flaeche mit. Sie liegen auf `--karte`, und Weiss auf Weiss ist kein Text.
   Zwei Klassen statt einer, damit die Regel nicht an der Reihenfolge im Blatt
   haengt. */
.kopf .kopf-benutzer-flaeche,
.kopf .kopf-benutzer-flaeche a {
  color: var(--tinte);
}

.kopf-name {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
}

/* DER FELDGRUND IST WEISS und wechselt NIE von selbst (Uebersicht-Vorgaben,
   Abschnitt 5, Ziffern 1, 2 und 4). Es gibt keine Bildauswertung, die ihn
   umschaltet — heute nicht, und ohne Hochladeweg auch spaeter nicht. Ein Wappen
   mit hellem Rand kann gewollt sein; eine Umschaltung ohne Ort, an dem ein
   Mensch widerspricht, ist kein halber Schutz, sondern eine Entscheidung ohne
   Einspruch.

   NIE MESSING: Der Feldgrund markiert keine Verpflichtung (ADR-0030).

   Ohne hinterlegtes Logo entfaellt das Feld GANZ — das steht in kopf.php und
   nicht hier, weil ein leeres Feld gar nicht erst entstehen soll. */
/* DAS WAPPENFELD IST QUADRATISCH, NICHT HOEHENBEZOGEN (Kopfband-Vorgaben,
   Abschnitt 1.3). Hergeleitet aus einem Fehlfall: Bei height: 1.6em bekommt ein
   hochkantes Wappen dieselbe Hoehe wie ein quadratisches und wirkt dadurch halb
   so gross, und ein breites Logo waechst ueber die Bandhoehe hinaus. Das Feld
   ist die konstante Flaeche, das Logo passt sich ein.

   Der Feldgrund ist weiss und wechselt NIE von selbst (Uebersicht-Vorgaben,
   Abschnitt 5). Nie Messing.

   Ohne hinterlegtes Logo entfaellt das Feld GANZ — das steht in kopf.php, weil
   ein leeres Feld gar nicht erst entstehen soll. */
.kopf-wappen {
  width: 38px;
  height: 38px;
  flex: none;
  object-fit: contain;
  background: #fff;
  border-radius: 4px;
  padding: 3px;
}

/* DER BENACHRICHTIGUNGSPUNKT, jetzt MESSING statt weiss (Vorgabe 27.08.2026,
   Abschnitt 6).

   DIE REGEL IST DIESELBE GEBLIEBEN, ihr Ergebnis nicht: "Der Punkt steht dort,
   wo der Weg zur Startseite steht, und nimmt den Ton, der auf seiner Flaeche
   traegt." Bisher stand er im Band auf der Vereinsfarbe, und dort erreicht
   Messing rund 1,0 — weiss war die einzige Farbe, die trug. Seit E1 steht er
   in Seitenleiste, Modulzeile und Fussleiste, also durchweg auf --karte, und
   dort haelt Messing 4,97.

   WEISS ENTFAELLT IN ALLEN DREI FASSUNGEN, weil die Flaeche entfaellt, auf der
   es noetig war — nicht, weil jemand die Farbe schoener findet. Das ist keine
   Ausnahme von ADR-0030, sondern seine Anwendung: Die Flaeche entscheidet den
   Ton, nicht die Sitzung.

   8px, damit es eine Markierung bleibt und keine Pille wird (ADR-0024,
   Nachtrag): hoechstens 10px, ohne Text, ohne eigenen Treffbereich. */
.nav-punkt {
  display: inline-block;
  width: 8px;
  height: 8px;
  margin-left: 6px;
  border-radius: 50%;
  background: var(--messing);
  vertical-align: 0.15em;
}

/* Nur fuer die Vorlesehilfe. Der Punkt allein sagt einem Screenreader nichts;
   clip-path statt display:none, weil Verborgenes nicht vorgelesen wird. */
.nur-vorlesen {
  position: absolute;
  width: 1px;
  height: 1px;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
}

.kopf .knopf-still {
  background: none;
  border: 1px solid rgba(255, 255, 255, 0.6);
  color: #fff;
}

.kopf .knopf-still:hover {
  background: var(--verein-hover);
}

/* ---------------------------------------------------------------------------
   DAS BLATT VON UNTEN (Vorgabe Fussleiste, Abschnitt 2, `Mehr`).

   ES IST DER NACHFOLGER DES HANDYMENUES, und der Menueknopf mit den drei
   Balken ist damit fort — hier standen `.menue-balken-1` bis `-3` und die
   zwei Regeln, die sie im offenen Zustand zum Kreuz drehten. Der Oeffner ist
   jetzt das fuenfte Feld der Fussleiste und traegt drei Punkte waagrecht;
   der Zeichensatz hat dafuer kein Zeichen und braucht keines.

   OHNE FRAMEWORK UND OHNE SKRIPT: <details> mit <summary>. Oeffnen,
   Schliessen, Tastatur und die Ansage an die Vorlesehilfe bringt der Browser
   mit. Die Fluchttaste ist der einzige Teil, den er nicht mitbringt — dafuer
   genuegt oeffentlich/menue.js. FAELLT SIE AUS, BLEIBT DAS BLATT BEDIENBAR.

   KEIN AUSKLAPPEN UNTER DER LEISTE, sondern ein Blatt UEBER der Seite: Ein
   Ausklappen schiebt den Inhalt, und der Nutzer verliert die Stelle, an der er
   war.
   --------------------------------------------------------------------------- */
.geraet-menue > summary {
  cursor: pointer;
  list-style: none;
}
.geraet-menue > summary::-webkit-details-marker { display: none; }

/* DER FOKUSRING IST NICHT MEHR WEISS, und das ist keine Geschmacksfrage.
   Der Oeffner sass bis zum 27.08.2026 im farbigen Band, dort trug weiss. Er
   sitzt jetzt auf --karte, und ein weisser Ring auf Weiss ist kein Ring.
   --tinte-leise ist der Ton, der auf der Karte traegt. */
.geraet-menue > summary:focus-visible {
  outline: 2px solid var(--tinte-leise);
  outline-offset: -2px;
}

/* Drei Punkte waagrecht, 19px. Kein Zeichen aus dem Satz: `Mehr` ist kein Ort
   und kein Gegenstand, sondern die Fortsetzung der Leiste. */
.mehr-punkte {
  display: block;
  font-size: 19px;
  line-height: 24px;
  height: 24px;
}

/* DIE ABDECKUNG DER SEITE, ab der Bandunterkante. Als Pseudoelement und nicht
   als eigenes Markup: Ein leeres <span> nur fuer eine Flaeche waere ein
   Element, das eine Vorlesehilfe ansagen koennte.

   top: 62px IST DIE BANDHOEHE AM GERAET: min-height 60 plus 2px
   Messing-Trennkante an .kopf. Wer die eine aendert, aendert die andere — das
   Band bleibt sichtbar, damit der Verein sichtbar bleibt. */
.geraet-menue[open]::before {
  content: "";
  position: fixed;
  top: 62px;
  left: 0;
  right: 0;
  /* DIE LEISTE WIRD NICHT MITGEDECKT, und das ist derselbe Grund wie beim
     Blatt: Auf ihr liegt der einzige Weg zurueck. Gemessen im Bild am
     27.08.2026: Mit `bottom: 0` lag die Deckung ueber der Leiste, Weiss wurde
     zu (177,179,178) — sie sah aus wie abgeschaltet, und genau sie ist es
     nicht. Gedeckt wird die SEITE, nicht die Bedienung. */
  bottom: 60px;
  background: rgba(27, 33, 30, 0.34);
  z-index: 29;
}

/* Das Blatt selbst. Es ist nach oben begrenzt: Gemessen hat die Gestaltung,
   dass es ohne Grenze auf einem 390px hohen Bildschirm 2px ueber den Rand
   lief. Mit E4 tritt der Fall nicht mehr auf; DIE GRENZE BLEIBT TROTZDEM —
   sie kostet nichts und faengt jedes kuenftige Geraet.

   ---------------------------------------------------------------------------
   `bottom: 60px` UND NICHT `bottom: 0` — EINE ABWEICHUNG VON DER VORGABE, UND
   SIE IST GEMELDET.

   Die Vorgabe schreibt `bottom: 0`. Sie verlangt im selben Abschnitt "Oeffnen
   und Schliessen OHNE SKRIPT ... Faellt die Skriptdatei aus, bleibt das Blatt
   bedienbar." BEIDES ZUSAMMEN GEHT NICHT: Der Oeffner ist seit E5 das fuenfte
   FELD DER FUSSLEISTE, und ein Blatt an `bottom: 0` deckt ihn zu. Ein
   <details> schliesst nur ueber sein <summary> oder ueber die Fluchttaste —
   und ein Telefon hat keine Fluchttaste.

   Ein hoeherer z-index an der Leiste hilft NICHT, und das ist gemessen: Das
   Blatt ist ein NACHFAHRE der Leiste. Wer der Leiste einen Stapelkontext gibt,
   nimmt das Blatt mit hinein — es kann seine eigene Leiste nicht unterlaufen.

   Die alte Fassung hatte das Problem nicht: Dort sass der Knopf OBEN im Band,
   und das Blatt begann darunter. Die Vorgabe hat den Knopf nach unten geholt
   und die Zeile `bottom: 0` aus der alten Fassung mitgenommen.

   Der Preis der Abweichung sind 60px Hoehe. Der Preis des Wortlauts waere ein
   Blatt, das sich am Telefon nicht mehr schliessen laesst.
   ---------------------------------------------------------------------------

   Die 122px der Hoehengrenze sind 62 Band plus 60 Leiste: Das Band bleibt
   sichtbar, so steht es in der Vorgabe. */
.menue-flaeche {
  position: fixed;
  left: 0;
  right: 0;
  bottom: 60px;
  max-height: calc(100dvh - 122px);
  background: var(--karte);
  color: var(--tinte);
  border-radius: 14px 14px 0 0;
  box-shadow: 0 -8px 24px rgba(27, 33, 30, 0.16);
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
  display: flex;
  flex-direction: column;
  z-index: 30;
}

/* Der Griff. 44 x 4px, Radius 2 — er sagt "das hier laesst sich schliessen",
   ohne ein zweiter Treffbereich neben dem Oeffner zu sein. */
.menue-griff {
  display: block;
  width: 44px;
  height: 4px;
  border-radius: 2px;
  background: var(--linie-stark);
  margin: 8px auto 2px;
  flex: none;
}

/* DIE FLAECHE HINTER `Mehr` IN DER MODULZEILE (Vorgabe, Abschnitt 4.1).
   Dieselbe Zeilenform wie im Blatt, aber KEIN Blatt: Sie haengt unter ihrem
   Oeffner, rechts ausgerichtet, und deckt die Seite nicht ab. Am Tablett ist
   der Rest der Seite bedienbar; am Geraet ist er es nicht, weil das Blatt die
   halbe Hoehe nimmt. */
.mehr-flaeche {
  position: absolute;
  top: 100%;
  right: 0;
  width: 296px;
  max-height: 70vh;
  overflow-y: auto;
  background: var(--karte);
  border: 1px solid var(--linie);
  border-radius: var(--radius-gross);
  box-shadow: 0 10px 28px rgba(27, 33, 30, 0.18);
  padding: 6px;
  z-index: 25;
}

.menue-kicker {
  font-family: var(--schrift-zier);
  font-variant-numeric: tabular-nums;
  font-size: 12px;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--tinte-leise);
  padding: 18px 16px 0;
  margin: 0;
}

.menue-liste {
  list-style: none;
  margin: 0;
  padding: 0 16px;
}
.menue-liste a {
  display: flex;
  align-items: center;
  /* 12px zwischen Zeichen und Wort, wie in der Seitenleiste. Die Zeile traegt
     seit dem 27.08.2026 ein Zeichen; ohne den Abstand klebte das Wort daran. */
  gap: 12px;
  min-height: var(--zeile-hoehe);
  font-size: 17px;
  color: var(--tinte);
  text-decoration: none;
  border-bottom: 1px solid var(--linie);
}
.menue-liste a .zeile-winkel { margin-left: auto; }

/* DER EINE FALL, IN DEM EINE SENKRECHTE KANTE NICHT MESSING IST — und er
   widerspricht der Zusicherung aus den Uebersicht-Vorgaben nicht: Die gilt fuer
   Kanten AN EINER KARTENKANTE im Inhalt. Diese Kante steht auf einer Menuezeile
   in einer Flaeche ueber der Seite, auf der keine Karte liegt und keine
   Verpflichtungskante sichtbar ist. Beide zugleich zu sehen ist nicht moeglich.

   Sie markiert keine Verpflichtung, sondern wo ich stehe — deshalb die
   Vereinsfarbe. */
.menue-liste a[aria-current="page"] {
  border-left: 3px solid var(--verein);
  font-weight: 600;
  margin-left: -16px;
  padding-left: 13px;
  background: var(--grund-tief);
}

.menue-fuss {
  margin-top: auto;
  background: var(--verein);
  color: #fff;
  padding: 26px 16px 22px;
  display: flex;
  flex-direction: column;
  gap: 14px;
}
/* HIER STANDEN DREI REGELN DES BLOCKS `Angemeldet` — der Kicker auf der
   Vereinsfarbe, der Abmeldeknopf und der Name im Zierschnitt. Der Block ist
   am 29.08.2026 entfallen (Design, Punkt 12, Bauteil s): "Damit steht das
   Konto an einer Stelle statt an zweien, und das Mehr-Blatt traegt nur noch
   Module." Sein Inhalt ist der Kopf der Flaeche hinter dem Benutzerzeichen.

   SIE SIND GELOESCHT UND NICHT AUSKOMMENTIERT. Eine Regel ohne Verwender
   sieht beim naechsten Griff aus wie eine Entscheidung. */

/* HIER STANDEN `.menue-verein` UND `.menue-trenner`.

   `.menue-wappen` — das 96-px-Vereinslogo — ist am 29.08.2026 vormittags
   entfallen (Design, Punkt 11, Abweichung 3), `.menue-verein` war sein
   Nachfolger und traegt denselben Grund. Beide sind am selben Abend mit dem
   Block `Angemeldet` gegangen (Punkt 12, Bauteil s).

   DAS IST EINE FOLGERUNG UND IST GEMELDET: Design nennt den Vereinsnamen
   nicht. Was den Ausschlag gab, ist Punkt 11 fuer den Fuss selbst — "Zeile 1
   ‚laeuft mit‘ und Wortmarke. Zeile 2: die Wege. NICHTS SONST." — und die
   Messung vom 29.08.2026 bei 393 x 852 mit geoeffnetem Blatt: Das Kopfband
   steht sichtbar darueber und traegt Wappen und Namen.

   DER TRENNER TRUG 1px WEISS MIT 22 % DECKUNG. Er trennte den Block vom
   dunklen Fuss; ohne den Block gibt es nichts zu trennen. */
/* ---------------------------------------------------------------------------
   DER DUNKLE FUSS — DIESELBE BAUFORM WIE `.fuss`, ANDERE LAGE (Design,
   29.08.2026, Punkt 11).

   "Der Fuss ist ein Baustein, nicht zwei. Zwischen den Lagen aendert sich NUR
   die Lage. Reihenfolge, Grade, Abstaende und Wortlaut sind gleich."

   Deshalb stehen hier `.fuss-marke` und `.fuss-hilfe` — dieselben Klassen wie
   im Seitenfuss. Was hier steht, ist ausschliesslich die LAGE: die Flaeche ist
   --verein, also ist die Schrift weiss.

   DREI ABWEICHUNGEN WAREN GEBAUT, ALLE DREI AM 29.08.2026 IM BROWSER GEMESSEN
   (393 x 852, Mehr-Blatt geoeffnet):

     1. DIE REIHENFOLGE WAR UMGEKEHRT. Kindfolge von `.menue-hilfe`:
        [a, a, nebensache, fuss-marke] — die Wege standen VOR der Marke, im
        Seitenfuss danach. Behoben in kern/ansicht/kopf.php.
     2. "laeuft mit" STAND IN --tinte-leise AUF --verein: #556059 auf #4A5568
        sind 1,15 : 1. Verlangt sind 4,5; Weiss misst auf demselben Grund 7,53.
        Der Ton war nicht falsch GEWAEHLT — `.nebensache` ist eine Regel der
        HELLEN Lage und stand hier mit derselben Farbe da.
     3. DER UNTERSTRICH SASS 12,5 PX UNTER DEM WORT statt 3. Er hing am Kasten,
        und der Kasten ist 44px hoch. Im Seitenfuss sind es 2,5px, weil dort
        derselbe Rand an einem gewoehnlichen Inline-Kasten haengt.

   DIE 44 PX BLEIBEN. Sie sind der Treffbereich aus ADR-0024 (Nachtrag vom
   27.08.2026), und ein Menueeintrag faellt ausdruecklich darunter. Der
   Unterstrich zieht statt dessen auf ein eigenes Element um, das nur das Wort
   umfasst — der Treffbereich haengt am Kasten, der Strich am Wort.
   --------------------------------------------------------------------------- */
.menue-hilfe {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 12px;
}
/* `.fuss-hilfe` traegt in seiner Grundregel margin-left: auto — im Seitenfuss
   schiebt das die Wege an den rechten Rand der Zeile. In einer Spalte schoebe
   es sie ebenso, und dann staende die zweite Zeile nicht unter der ersten. */
.menue-hilfe .fuss-hilfe { margin-left: 0; }
.menue-hilfe .nebensache { color: #fff; }
.menue-hilfe a {
  color: #fff;
  text-decoration: none;
  border-bottom: 0;
  min-height: 44px;
  display: inline-flex;
  align-items: center;
}
/* Der Strich am Wort. 1px, wie im Seitenfuss — nur in der Farbe der Lage. */
.menue-hilfe a > span { border-bottom: 1px solid rgba(255, 255, 255, 0.55); }
.menue-hilfe a:hover > span,
.menue-hilfe a:focus-visible > span { border-bottom-width: 2px; }

/* ---------------------------------------------------------------------------
   --verein-hell hat genau DREI Aufgaben (Vorgaben, Abschnitt 4, Nachtrag vom
   21.08.2026): die Anmeldeflaeche, der Druckkopf, und die Farbvorschau in der
   Einrichtungsmaske — die ZEIGT den Wert und verwendet ihn nicht als Flaeche.

   Eine VIERTE Verwendung ist eine Rueckfrage an die Gestaltung und keine
   Auslegung. Text darauf ist --tinte, garantiert mindestens 11,02.
   --------------------------------------------------------------------------- */
/* Die Hauptaktion traegt die Vereinsfarbe — PORTALWEIT und nicht nur im leeren
   Fall (Kopfband-Vorgaben, Abschnitt 5.1). Die Begruendung steht bei
   .knopf-haupt im neutralen Satz; hier steht nur die Farbe, weil sie erst mit
   dem Mandanten existiert. */
.knopf-haupt {
  background: var(--verein);
  border-color: var(--verein);
  color: #fff;
}
.knopf-haupt:hover {
  background: var(--verein-hover);
  border-color: var(--verein-hover);
}

/* Und dasselbe fuer den Plus-Knopf: Form, Groesse und Wort stehen oben im
   neutralen Satz, hier steht nur die Farbe. Diese Regel ueberschreibt das
   background der Regel oben vollstaendig — wer dort sucht, findet var(--tinte)
   und liegt falsch. Der Hinweis darauf steht dort. */
.knopf-plus {
  background: var(--verein);
}
.knopf-plus:hover {
  background: var(--verein-hover);
}

/* ---------------------------------------------------------------------------
   DIE ANMELDEFLAECHE — GROSSFLAECHIG, MIT WAPPEN AUF WEISSER UNTERLAGE.

   Woertliche Vorgabe der Gestaltung seit dem 19.08.2026
   (docs/gestaltung/farbnormierung-vorgaben.md, Abschnitt 4, Aufgabe 1 von
   dreien). SIE HAT NEUN TAGE LANG KEINEN VERWENDER GEHABT: Die Regel stand
   hier mit `--verein-hell` und `--tinte`, und `kern/seiten/anmelden.php` hat
   sie nie angefasst. Gebaut war eine kleine weisse Karte auf --grund.

   Am 28.08.2026 hat ein Vorstand genau diese Seite angesehen und nicht
   wiedererkannt; daraus ist ADR-0049 geworden.

   SIE IST DIE HUELLE UND KEINE KARTE DARIN: `main.inhalt.anmeldeflaeche`. Ein
   eigenes Seitengeruest waere ein zweiter Ort fuer Kopf, Fuss und Meldung.

   border-radius: 0 BRAUCHT ES FUER DIE BREITE FASSUNG, NICHT FUER DAS HANDY —
   UND HIER STAND BIS ZUM 28.08.2026 DIE UMGEKEHRTE BEGRUENDUNG, ALS
   „gemessen" AUSGEGEBEN. Sie behauptete, ohne die Null hebe diese Regel das
   `.inhalt { border-radius: 0 }` der Bruchkante bei 700px wieder auf.

   NACHGEMESSEN IST ES ANDERSHERUM: `.anmeldeflaeche` erklaert sonst gar kein
   border-radius, also gaebe es nichts, was die Null der Bruchkante aufheben
   koennte. Am Handy waere sie auch ohne diese Zeile null. Was ohne sie bliebe,
   ist `--radius-gross` aus `.inhalt` — und zwar AB 700px, also genau dort, wo
   die Flaeche randlos ueber den ganzen Bildschirm laeuft. Eine vollflaechige
   Flaeche mit gerundeten Ecken haette an den Bildschirmkanten vier weisse
   Zwickel.

   Der Fehler war nicht die Zeile, sondern der Satz daneben: eine Behauptung
   mit dem Wort „gemessen", die niemand gemessen hatte. Genau die Klasse, gegen
   die dieses Repository seine Kommentare prueft.

   FLEX-DIRECTION: COLUMN IST KEINE ZIERDE, SONDERN EIN GEMESSENER FEHLER
   (28.08.2026, gefunden im Bild). `kern/ansicht/kopf.php` bindet
   `meldung.php` INNERHALB von `<main class="inhalt">` ein — die Meldung ist
   also ein GESCHWISTER von `.anmelde-mitte`. Ohne Richtung legt Flex beide
   NEBENEINANDER: Bei jeder fehlgeschlagenen Anmeldung stand die Fehlermeldung
   LINKS neben dem Anmeldeblock, und der Block rutschte aus der Mitte nach
   rechts. Gemessen bei 1280px und bei 500px, dort teilten sich Meldung und
   Formular die Zeile.

   `.inhalt.zonen` traegt dieselbe Zeile aus demselben Grund. Wer hier Flex
   ohne Richtung setzt, hat den Fall nicht bedacht, in dem eine Seite etwas zu
   melden hat — und das ist auf einer Anmeldeseite der haeufigste.

   WAS AUF DIESER FLAECHE STEHEN DARF, IST GERECHNET UND NICHT GESCHAETZT
   (28.08.2026, ueber alle neunzehn Pruefaelle der Vorgaben):

     --tinte        auf --verein-hell   >= 11,02   traegt als Text
     --tinte-leise  auf --verein-hell      4,41    TRAEGT NICHT (4,5 verlangt)
     --linie-stark  auf --verein-hell      3,01    traegt als Feldrand (1.4.11)
     --verein       auf --verein-hell      3,13    traegt als Flaeche
     --karte        auf --verein-hell      1,47    hebt sich ab

   DARAUS FOLGT DIE EINZIGE ABWEICHUNG VOM UEBRIGEN PORTAL: Beschriftungen und
   Hinweistext tragen hier --tinte statt --tinte-leise. Sonst stuende auf der
   ersten Seite, die ein Mensch von Vereinswart sieht, Text mit 4,41.
   --------------------------------------------------------------------------- */
.anmeldeflaeche {
  background: var(--verein-hell);
  color: var(--tinte);
  max-width: none;
  margin: 0;
  border-radius: 0;
  min-height: 60vh;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
}

/* Die Meldung steht UEBER dem Block und auf derselben Breite wie er. Ohne die
   Breite waere sie so schmal wie ihr Satz und stuende als schwebender Kasten
   ueber einem Formular, das an anderer Kante beginnt. */
.anmeldeflaeche > .meldung {
  width: 100%;
  max-width: 22rem;
}

/* Der Inhalt sammelt sich in der Mitte. Die Flaeche ist gross, der Satz ist
   es nicht — 22rem ist dieselbe Breite, die `.formular-schmal` im ganzen
   Portal fuehrt, und keine zweite Zahl fuer dieselbe Sache. */
.anmelde-mitte {
  width: 100%;
  max-width: 22rem;
  display: flex;
  flex-direction: column;
  align-items: stretch;
  padding: var(--abstand) 0 2rem;
}

/* WAPPEN AUF WEISSER UNTERLAGE — die Unterlage ist diese Regel.

   HIER STAND BIS ZUM 29.08.2026: "96px wie `.menue-wappen`, und aus demselben
   Grund dieselbe Zahl: zwei Masse fuer dasselbe Feld veralten an zwei Tagen."

   DEN PARTNER GIBT ES NICHT MEHR. `.menue-wappen` ist mit Designs Abweichung 3
   entfallen; dieses Feld ist das einzige grosse geblieben. Der Satz haette
   einen Leser auf die Suche nach einer Regel geschickt, die es nicht gibt.

   DIE 96 BLEIBEN, und ihr Grund steht jetzt bei sich selbst: Sie sind die
   Grenze, an der `wappenquelle()` von der kompakten auf die Regelfassung
   umschaltet (64px, siehe dort). 060_bedienkonzept.php prueft, dass ueberhaupt
   noch ein Feld ueber dieser Grenze liegt — sonst teilte sie keine Menge mehr
   und koennte nicht rot werden.

   `object-fit: contain` haelt jedes Seitenverhaeltnis, das ein Verein
   hochlaedt — und das Produktzeichen im neutralen Fall ebenso. */
.anmelde-wappen {
  width: 96px;
  height: 96px;
  align-self: center;
  object-fit: contain;
  background: var(--karte);
  border-radius: var(--radius);
  padding: 10px;
  margin-bottom: var(--abstand);
}

/* Der Vereinsname steht mittig ueber dem Feld und traegt --tinte (>= 11,02).
   Kein eigener Schriftgrad: `.inhalt h1` gilt hier wie ueberall. */
.anmeldeflaeche h1 {
  text-align: center;
  margin-bottom: var(--abstand);
}

/* DIE EINZIGE ABWEICHUNG, und sie ist oben gerechnet: --tinte statt
   --tinte-leise. 4,41 auf dieser Flaeche ist unter der Textschwelle. */
.anmelde-formular label { color: var(--tinte); }
.anmeldeflaeche .hinweistext {
  color: var(--tinte);
  margin-top: 1.5rem;
  max-width: none;
}

/* Der Knopf traegt die ganze Breite: Es ist die einzige Handlung auf der
   Flaeche, und am Handy ist eine volle Zeile der sicherste Treffer.

   DIE BREITE KOMMT AUS `width`, NICHT AUS DEM FLEXCONTAINER. Hier stand
   `justify-content: stretch` auf `.formular-fuss` — der Wert ist auf einem
   Flexcontainer wirkungslos (Box Alignment bildet ihn auf `flex-start` ab).
   Die Zeile sah aus, als truege sie die Breite, und tat nichts; wer das
   `width` daneben entfernt haette, haette einen Knopf in Textbreite bekommen
   und die Ursache an der falschen Stelle gesucht. */
.anmelde-formular .knopf-haupt { width: 100%; justify-content: center; }

@media print {
  .kopf {
    background: var(--verein-hell);
    color: var(--tinte);
    border-bottom: 2px solid var(--messing);
  }
  .kopf a { color: var(--tinte); }
}

/* Das Produktzeichen. KEINE Ausnahme der Messing-Regel mehr, soweit Schrift:
   Die Wortmarke fuehrt --tinte (ADR-0030, Nachtrag vom 28.08.2026). Das
   Zeichen daneben ist Bild und keine Schrift; es liegt als SVG in
   oeffentlich/marke/ und wird hier nicht gefaerbt. */
.fuss {
  margin-top: 2.5rem;
  /* DIE FLAECHE STEHT DA UND WIRD NICHT GEERBT (Design, 29.08.2026, Punkt 11:
     "Lage hell: Flaeche --grund"). Bis dahin trug `.fuss` gar keine — im
     Browser gemessen `rgba(0, 0, 0, 0)`. Sichtbar war trotzdem --grund, weil
     `body` sie traegt. Das ist richtig aus einem Grund, den niemand
     aufgeschrieben hat: Wer den Fuss einmal in eine Karte legt, bekommt ihn
     auf Weiss und sieht im Stilblatt keinen Unterschied. */
  background: var(--grund);
  /* DER INNENABSTAND IST EINE ZAHL (Design, 29.08.2026, Punkt 11): 18px oben
     und unten, 14px links und rechts. Am Rechner 24 / 32 — die Fassung steht
     im Medienblock UNMITTELBAR DARUNTER und nicht weiter oben, und das ist
     kein Sortiergeschmack: Diese Kurzschreibweise setzt jede fruehere Seite
     zurueck. Genau daran ist am 20.08.2026 eine Regel im 700er-Block
     gestorben, und `060_bedienkonzept.php` sichert seither zu, dass es nicht
     wieder geschieht.

     HIER STAND BIS ZUM 29.08.2026 `0.75rem max(var(--seitenrand),
     var(--karte-innen-schmal)) 0`. Das max() beantwortete die Frage, was gilt,
     wenn --seitenrand unter 699px auf null faellt; mit einer eigenen Zahl
     stellt sich die Frage nicht mehr.

     UND UNTEN STEHT JETZT DIESELBE ZAHL WIE OBEN. Vorher stand dort 0, und die
     letzte Zeile des Fusses lag auf der Kante der Fussleiste — gemessen am
     29.08.2026 bei 393 x 852: Unterkante "Hilfe" 792, Oberkante der Leiste
     792. Nicht verdeckt, aber ohne Luft.

     UND DIE 14 KOSTEN ETWAS, DAS DAS max() MITGEBRACHT HAT — gemessen am
     29.08.2026, damit es niemand als Fehler sucht: Unter 699px war
     --seitenrand null, das max() lieferte --karte-innen-schmal (16px), und die
     linke Kante des Fusses lag damit GENAU auf der Textkante der Karte.
     Gemessen bei 393 und 500px: Fuss bei x = 14, Kartentext bei x = 16 — zwei
     Pixel Versatz, wo vorher keiner war.

     DIE 14 STEHEN TROTZDEM, weil Design sie als Zahl nennt und Gestaltung
     dort entschieden wird (ADR-0049). Der Versatz ist gemeldet und nicht
     eigenmaechtig auf 16 zurueckgesetzt.

     UND DIE FLUCHT WAR OHNEHIN NUR UNTER 699PX DA: bei 700 bis 1119px lagen
     Fuss und Kartentext schon vorher 14px auseinander, am Rechner 16. */
  padding: 18px 14px;
  max-width: 1100px;
  margin-left: auto;
  margin-right: auto;
  border-top: 1px solid var(--linie);
  display: flex;
  gap: var(--abstand);
  font-size: var(--grad-klein);
}

/* Der Rechner. Steht HINTER der Grundregel, siehe dort. */
@media (min-width: 1120px) {
  .fuss { padding: 24px 32px; }
}


/* DIE MARKE IN FASSUNG 5.

   DIE MASSE DER EINBAUBESTAETIGUNG STANDEN HIER BIS ZUM 29.08.2026 ALS DER
   GEBAUTE STAND: "Zeichen 28 x 22, Wortmarke 118,4 x 16, dazwischen 8px, davor
   'laeuft mit' mit 16px Abstand." ZWEI DER VIER ZAHLEN GELTEN NICHT MEHR:

     Wortmarke  118,4 x 16   ->   19px hoch (Design, 29.08.2026, Punkt 11)
     margin-left 16px        ->   entfaellt, siehe unten bei .fuss-marke

   Zeichen 28 x 22 und die 8px dazwischen gelten unveraendert. Die Zahlen der
   Einbaubestaetigung bleiben oben stehen, weil sie sagen, was an ihrem Tag
   geliefert wurde — sie sind kein Bericht ueber den heutigen Bau.

   Die KOMPAKTE Fassung und nicht die Regelfassung: Bei height 22px war das
   sichtbare Zeichen der Regelfassung nur 18,6px hoch — die Luft der viewBox
   legte rund 2px in den Abstand zur Wortmarke. Aufgefallen ist es im Bild,
   nicht in der Pruefliste.

   Damit traegt kein Textknoten im ganzen Portal Messing. DIESER SATZ WAR SEIT
   DEM 20.08.2026 RICHTIG UND STAND OHNE ZUSICHERUNG DA: Die Pruefung liess
   `.fuss-marke` bis zum 28.08.2026 ausdruecklich frei. Seither nicht mehr —
   120_farbe.php rechnet ueber ALLE Waehler, ohne Ausnahme, und prueft
   zusaetzlich den Ton der geladenen Wortmarkendatei. */
.fuss-marke {
  display: inline-flex;
  align-items: center;
  gap: 8px;
}
.fuss-marke img { display: block; }
.fuss-zeichen { width: 28px; height: 22px; }
/* 19px UND NICHT MEHR 16 (Design, 29.08.2026, Punkt 11). Die 16 waren die
   nachgemessene Zahl der Einbaubestaetigung zu Fassung 5.

   DIE REGEL STEHT GENAU EINMAL, und das ist die Bedingung dafuer, dass es EIN
   Fuss ist: `.fuss-wort` kommt in der hellen Lage (`.fuss`) und in der dunklen
   (`.menue-hilfe`) vor. Zwei Regeln waeren zwei Zahlen, die an zwei Tagen
   veralten. */
.fuss-wort { height: 19px; width: auto; }

/* Hilfe und Support stehen rechts aussen im Fussband (Kopfband-Vorgaben,
   Abschnitt 4.1). Als Verweise in der Form des Portals — keine eigene
   Linkfarbe, keine Knopfform. */
.fuss-hilfe {
  margin-left: auto;
  display: flex;
  gap: 20px;
  align-items: center;
  flex-wrap: wrap;
}

/* Die Modulzeilen sind EIN Block, nicht einer je Modul. Auf dem Schreibtisch
   sieht man das nicht — dieselbe Zeile, derselbe Abstand; unter 1120px ist es
   der Unterschied zwischen drei Bloecken und drei plus der Zahl der Module. */
.fuss-module {
  display: flex;
  flex-wrap: wrap;
  gap: var(--abstand);
  align-items: center;
}

/* UNTER 1120 PX STAPELT DAS FUSSBAND LINKS (Gestaltung, 20.08.2026, Antwort
   auf Rueckfrage 7).

   DER ALTE ZUSTAND WAR KEIN UMBRUCH, SONDERN EIN REST: `.fuss` trug
   flex-wrap, und `.fuss-hilfe` traegt margin-left:auto. Sobald die Zeile
   umbrach, standen Hilfe und Support allein in einer zweiten Zeile am rechten
   Rand — das auto galt weiter, obwohl nichts mehr rechts von ihm lag. Im Bild
   gesehen (bild/daten-mittel-fuss.png bei 834px), nicht in der Kette.

   Kein flex-wrap mehr: Ein Umbruch, der sich selbst sucht, findet jedes Mal
   etwas anderes. Statt dessen drei Bloecke untereinander, alle auf derselben
   linken Kante.

   DER BLOCK STEHT HIER UND NICHT WEITER OBEN, und das ist gemessen: `.fuss-hilfe`
   traegt `margin-left: auto` in seiner Grundregel. Stuende dieser Block davor,
   setzte die spaetere Grundregel das auto gleich wieder — dieselbe Falle wie
   bei `.fuss { padding }` am selben Tag, nur mit `margin` statt `padding`. Im
   Bild gesehen: Hilfe und Support standen im Stapel weiter rechts aussen.

   HERGELEITET ist die Grenze: 1120px ist die Grenze, die das Kopfband schon
   fuehrt. Zwei Umbruchpunkte fuer dasselbe Fenster waeren zwei Regeln fuer
   einen Fall. GEWAEHLT ist der Stapel selbst. */
@media (max-width: 1119px) {
  .fuss {
    flex-direction: column;
    align-items: flex-start;
    /* 12px UND NICHT MEHR 14 (Design, 29.08.2026, Punkt 11: "Abstand 12 px").
       DIESELBE ZAHL WIE IM DUNKLEN FUSS — zwei Abstaende fuer eine Bauform
       waeren zwei Bauformen. */
    gap: 12px;
  }
  .fuss-hilfe { margin-left: 0; }
  /* HIER STAND BIS ZUM 29.08.2026 `.fuss-marke { margin-left: 0 }`, und der
     Grund war gut: `.fuss-marke` trug in seiner Grundregel margin-left: 16px,
     und im Stapel begann der Block dadurch 16px weiter rechts als die zwei
     anderen (gemessen bei 834px: Marke 32, Module 16, Hilfe 16).

     DIE GRUNDREGEL TRAEGT DEN RAND NICHT MEHR, also gibt es nichts
     zurueckzunehmen. Der Grund fuer die Streichung ist Designs Bauform vom
     29.08.2026: DIESELBE Marke steht jetzt auch im dunklen Fuss, und dort gibt
     es keinen Medienblock, der einen Sonderrand wieder abraeumte. Ein Rand,
     den man an einer Stelle setzt und an einer zweiten zuruecknehmen muss, ist
     an der dritten vergessen.

     DIE ZUSICHERUNG DAGEGEN BLEIBT: "Kein Block des Fussbands behaelt im
     Stapel einen eigenen linken Rand" in 060_bedienkonzept.php faengt jeden
     `.fuss-`-Block, der wieder einen bekommt. */
}

.filterzeile {
  display: flex;
  flex-wrap: wrap;
  gap: 0.4rem;
  margin: 0.75rem 0 1rem;
}

.marke-aktiv {
  border-color: var(--verein);
  font-weight: 600;
}

/* ---------------------------------------------------------------------------
   DIE ZEILE IST DER VERWEIS (Auftrag App-Eindruck, Abschnitt 2).

   Bis zum 20.08.2026 war das Anklickbare ein Wortpaar hinter einem
   Gedankenstrich — acht Zeichen breit. Am Handy zu wenig, und der
   Gedankenstrich trennte einen Satz, der keiner ist.

   Jetzt ist die GANZE ZEILE der Verweis: volle Kartenbreite, mindestens
   --zeile-hoehe. Kein Blau und keine Unterstreichung der ganzen Zeile — die
   Palette hat keine Linkfarbe und braucht keine: Unterlinie am Wort, Winkel,
   Flaeche beim Zeigen.

   KEINE LINIE UNTER DER LETZTEN ZEILE: Sie zoege einen Kasten um die
   Zeilengruppe, den die Karte schon ist.

   Die Befundliste traegt KEINE Messing-Kante (20.08.2026). Sie hing an einer ul
   statt an einer Karte — dann markiert sie den einzelnen Befund und nicht die
   Zone. Die Kante steht an .karte-pflicht.
   --------------------------------------------------------------------------- */
.befundliste {
  margin: 0.5rem 0 0;
  padding: 0;
  list-style: none;
}

.zeile {
  display: flex;
  align-items: center;
  gap: 16px;
  min-height: var(--zeile-hoehe);
  padding: 12px 2px;
  border-bottom: 1px solid var(--linie);
  color: var(--tinte);
  text-decoration: none;
}
.befundliste > li:last-child > .zeile,
.befundliste > .zeile:last-child {
  border-bottom: 0;
}

.zeile-text { flex: 1; }

/* Die Zeigeflaeche. Nur am Verweis, nicht an der Zeile ohne Ziel: Eine Flaeche,
   die auf Zeigen reagiert und nichts tut, ist ein Versprechen ohne Deckung. */
a.zeile:hover,
a.zeile:focus-visible {
  background: var(--grund-tief);
}

/* Das Wort traegt die Unterlinie, nicht die Zeile. Sie ist --linie-stark wie
   jeder Verweis im Inhalt; der Winkel steht daneben und ist leiser. */
.zeile-ziel {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  flex: none;
}
.zeile-ziel span {
  border-bottom: 1px solid var(--linie-stark);
}
.zeile-winkel {
  font-size: 19px;
  line-height: 1;
  color: var(--tinte-leise);
}

/* Der leere Zustand des Dashboards: ein Satz und eine Handlung (Nachtrag zu
   ADR-0025). Kein leerer Bildschirm, keine Stimmungsgrafik, keine Statistik. */
/* DER LEERE FALL (Uebersicht-Vorgaben, Abschnitt 7). Eine weisse Karte auf
   --grund wie jede Zonenkarte — kein Sonderbildschirm. Kein eigener
   Aussenabstand: Der kommt vom Stapel (--zonenabstand), sonst gaebe es zwei
   Skalen.

   Der Satz in --grad-gross: Er ist der EINZIGE Satz auf der Seite,
   --grad-text waere zu leise, --grad-titel doppelte den Seitentitel. */
.leerzustand p {
  font-size: var(--grad-gross);
  margin: 0 0 var(--abstand);
  max-width: var(--satzbreite);
}

/* Die Vorschau in der Einrichtungsmaske. Sie ZEIGT die Werte, sie verwendet sie
   nicht als Flaeche — und genau deshalb darf sie die DRITTE Aufgabe von
   --verein-hell sein, ohne die Regel aufzuweichen (Vorgaben, Abschnitt 4,
   Nachtrag vom 21.08.2026). Bis dahin stand hier "keine dritte Verwendung":
   Der Grund ist derselbe geblieben, nur die Seite hat gewechselt. Der Satz
   oben bei .anmeldeflaeche zaehlt sie mit. */
.farbvorschau {
  display: flex;
  flex-wrap: wrap;
  gap: 1rem;
  margin: 0.75rem 0;
}

.farbprobe {
  min-width: 8rem;
}

.farbprobe-flaeche {
  height: 3rem;
  border-radius: var(--radius);
  border: 1px solid var(--linie);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: var(--grad-klein);
}

.farbprobe-verein .farbprobe-flaeche { background: var(--verein); color: #fff; }
.farbprobe-hover .farbprobe-flaeche  { background: var(--verein-hover); color: #fff; }
.farbprobe-hell .farbprobe-flaeche   { background: var(--verein-hell); color: var(--tinte); }
