/*
 * 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;

  /* DER ABSTAND UNTER DEM RUECKVERWEIS IST EIN EIGENER WERT UND KEIN
     ZONENABSTAND (Design, 29.08.2026, Antwort auf Issue #42 nach sieben
     Tagen): „Der Abstand zwischen Zeichen und Wort in einem Rueckverweis ist
     kein Zonenabstand. Er gehoert nicht an --zonenabstand gekoppelt, sondern
     als eigener Wert gesetzt: 14 px, alle Breiten."

     BIS DAHIN KAM ER AUS --zonenabstand und war damit 14 am Schreibtisch und
     10 darunter. Gemessen am 29.08.2026 im Browser, bei echten Breiten ueber
     Emulation.setDeviceMetricsOverride: 10px bei 390, 500 und 700, 14px bei
     900 und 1280. */
  --rueckverweis-abstand: 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 die eines Verweises.

   BERICHTIGT AM 02.09.2026. HIER STAND, ZWEI ZEILEN LANG:

       "Knoepfe sind keine Verweise. Ein Knopf, der als Verweis gebaut ist,
        traegt seine eigene Form und nicht zusaetzlich einen Unterstrich."

   Der Satz ist richtig und war zu eng. Er nannte ein BEISPIEL — den
   Unterstrich — statt seines Gegenstands, und der Regelblock darunter nahm
   dem Knopf-Verweis nur die Kante. DIE SCHRIFTFARBE BLIEB DIE DES VERWEISES,
   und niemand hat es gesehen, weil die Zusicherung daneben die Kante mass.

   WAS DAS ANGERICHTET HAT, gemeldet vom Betreiber am Schirm ("der Button hat
   eine falsche Schriftfarbe", Karte "Verein konfigurieren"):
   `.inhalt a` setzt color: var(--tinte) und hat die Spezifitaet 0,1,1;
   `.knopf-haupt` und `.knopf-plus` setzen color: #fff und haben 0,1,0.
   HOEHERE SPEZIFITAET GEWINNT UNABHAENGIG VON DER REIHENFOLGE — auch gegen
   die spaetere Regel im Mandantensatz. Gemessen im Browser am 02.09.2026:
   <a class="knopf-plus"> stand in rgb(27,33,30) auf rgb(52,62,57), also
   --tinte auf --verein. Der Text war da und nicht zu lesen.

   DIE KANTE GILT FUER ALLE VIER, DIE FARBE FUER DREI — und das ist gemessen,
   nicht angenommen:

     .knopf-still  traegt color: inherit, also gar keinen eigenen Ton. Was
                   .inhalt a ihm gibt, ist genau das, was er sonst erbt. Er
                   braucht keine Regel, und eine waere eine Behauptung.

   NACHGETRAGEN AM 02.09.2026 — .knopf-zeile HAT JETZT EINE:

     .knopf-zeile  traegt --tinte-leise und ist der stille Zeilenknopf
                   (ADR-0024). Als <a> stand er in --tinte, also im Ton eines
                   Verweises, und war damit lauter als derselbe Knopf als
                   <button>. Zehn Fundstellen im Bestand, gemessen.

   DER GEGENSTAND IST NICHT DER TON, SONDERN DER UNTERSCHIED. Welchen Ton der
   Zeilenknopf traegt, entscheidet ADR-0024, und daran aendert diese Regel
   nichts — sie sorgt dafuer, dass das Element, das ihn traegt, ihn nicht
   umstoesst. Entschieden hat das der Betreiber am 02.09.2026: „Das Design des
   Vereinsbuch ist das SOLL! Dazu keine Abklaerung mit Design notwendig, das
   ist eine Nutzerentscheidung."

   NACHGETRAGEN AM 02.09.2026 — .handlung KOMMT DAZU, UND ZWAR NUR IN DIE
   KANTENREGEL.

   Der Stift der Statutenseite ist seit heute ein <a> (der Weg ohne Skript,
   kern/seiten/statuten.php). AM BILD GESEHEN und nicht befuerchtet: Unter
   jedem der sechs Stifte stand ein 44 px breiter Strich — `.inhalt a` gibt
   ihn, und `.handlung { text-decoration: none }` nimmt ihn nicht weg, weil er
   eine KANTE ist und keine Textauszeichnung. Gemessen im Browser am
   02.09.2026 (chromium 1194, 1280 x 900): textDecorationLine „none", und der
   Strich trotzdem da.

   NUR IN DIE KANTENREGEL, UND DAS IST GEMESSEN: `.handlung` setzt selbst
   `color: var(--tinte)` — denselben Wert, den `.inhalt a` gibt. Es gibt also
   keinen Unterschied zwischen <a> und <button> zu berichtigen; eine Zeile in
   der Farbregel waere eine Behauptung ohne Fall, genau wie bei .knopf-still.

   NACHGETRAGEN AM 02.09.2026 (ABENDS) — .knopf-still STEHT NICHT MEHR IN DER
   KANTENREGEL, UND DER GRUND IST DERSELBE, AUS DEM SIE ENTSTAND.

   HIER STANDEN FUENF WAEHLER IN EINER REGEL, .knopf-still darunter. DAS HAT
   IHM DIE UNTERKANTE GENOMMEN: `border-bottom: 0` nimmt nicht den Unterstrich
   des Verweises, sondern die VIERTE SEITE SEINES RAHMENS. AM SCHIRM GESEHEN
   und nicht gerechnet (chromium 1194 ueber das Fernsteuerungsprotokoll, echte
   390 px — innerWidth 390, `(max-width:449px)` trifft):

       <a class="knopf-still">Abbrechen</a>      1px / 1px / 0px / 1px, unten none
       <button class="knopf-still">Speichern</b> 1px / 1px / 1px / 1px, unten solid

   Ein U neben einem geschlossenen Kasten, und beide stehen nebeneinander in
   derselben Formularfussleiste (kern/ansicht/statutenfeld.php:223-224). Die
   zweite Fundstelle traegt denselben Fall seit laengerem ohne Zwilling
   daneben: kern/seiten/datenbericht.php:216.

   .knopf-still IST DIE EINZIGE DER FUENF MIT EINEM SICHTBAREN RAHMEN, und ihr
   Rahmen steht in --linie-stark — DEMSELBEN WERT, den der Unterstrich des
   Verweises traegt. An ihr fallen die zwei Fragen auseinander, die der Satz
   oben zusammenzieht: „traegt er die Marke des Verweises?" und „traegt er als
   <a> dasselbe wie als <button>?" Bei gleichem Wert sind sie nicht
   gleichzeitig zu beantworten, und die zweite ist die gemeinte.

   DIE VIER UEBRIGEN BLEIBEN, WO SIE WAREN, und das ist gemessen und nicht
   angenommen: .knopf-plus, .knopf-zeile und .handlung tragen selbst
   `border: none` — ihnen nimmt die Regel nichts. .knopf-haupt traegt eine
   Kante in der Farbe seiner eigenen Flaeche (Mandantensatz weiter unten:
   `background` und `border-color` beide var(--verein)); sie faellt als <a>
   weg, ohne dass es zu sehen waere, und beide Formen stehen 44 px hoch.

   WARUM ER TROTZDEM NICHT MITREPARIERT WIRD: Eine `border-bottom`-Zeile fuer
   ihn an dieser Stelle zoege entweder die Vereinsfarbe in den neutralen Satz
   oder legte ihm einen --linie-stark-Strich auf die Vereinsflaeche — .inhalt a
   setzt die Farbe der Unterkante mit 0,1,1 und schlaegt damit das
   `border-color` des Mandantensatzes (0,1,0). Er steht deshalb in
   060_bedienkonzept.php als benannte Ausnahme, mit einer Wache auf ihrem
   Grund: Fallen `background` und `border-color` dort auseinander, wird sie rot.

   Wer hier eine weitere Klasse eintraegt, traegt sie in die Farbregel und in
   GENAU EINE der zwei Kantenregeln ein — oder in keine.
   060_bedienkonzept.php rechnet die Kaskade nach und meldet den Unterschied
   zwischen <a> und <button>. Fuer die Kante gilt das seit dem 02.09.2026 mit
   einer eigenen Zusicherung; vorher mass sie nur die Farbe, und der Strich
   unter dem Stift ist ihr deshalb entgangen.
   --------------------------------------------------------------------------- */
/* DIE DREI OHNE EIGENEN RAHMEN: Hier nimmt `border-bottom: 0` nur den
   Unterstrich des Verweises weg und sonst nichts. Bis zum 08.09.2026 waren es
   vier — `.handlung` traegt seit ADR-0078 (Punkt 2) einen Rahmen und steht
   jetzt in der Regel darunter. */
.inhalt a.knopf-haupt,
.inhalt a.knopf-plus,
.inhalt a.knopf-zeile {
  border-bottom: 0;
}
/* DIE ZWEI MIT RAHMEN: Sie bekommen ihre vierte Seite ausdruecklich wieder,
   nicht durch das Weglassen der Zeile darueber. Ohne diese Regel saehe der
   Knopf zwar richtig aus — .inhalt a (0,1,1) schlaegt .knopf-still (0,1,0)
   und gaebe ihm zufaellig denselben Wert. `.handlung` steht seit dem
   08.09.2026 dabei, aus demselben Grund und mit derselben Kante.

   IHR GRUND, BERICHTIGT AM 02.09.2026. Hier stand: „die Zusicherung verglich
   zwei Zahlen aus derselben Quelle und koennte nicht mehr widersprechen."
   DAS TRIFFT NICHT ZU — ohne diese Regel kaemen die zwei Werte aus ZWEI
   Regeln, .inhalt a gegen .knopf-still, und eine Aenderung an .knopf-still
   ALLEIN roetete 060_bedienkonzept.php ohnehin. Der alte Grund beschrieb den
   heutigen Zustand statt der Bauart (.claude/rules/15-lead-und-agent.md).

   WAS SIE WIRKLICH TUT: Sie macht die Unterkante des <a> an der KNOPFregel
   fest statt an der Verweisregel. Deshalb faellt auch die GEMEINSAME Aenderung
   von .inhalt a und .knopf-still auf, die ohne sie stumm bliebe. Gemessen in
   einer Kopie am 02.09.2026, beide Werte auf 2px: ohne diese Regel bleibt
   060_bedienkonzept.php gruen, mit ihr wird es rot. */
.inhalt a.knopf-still,
.inhalt a.handlung {
  border-bottom: 1px solid var(--linie-stark);
}
/* Die zwei GEFUELLTEN Knoepfe: Sie stehen auf var(--verein), und darauf ist
   die Schrift weiss — dieselbe Farbe wie an .knopf-haupt und .knopf-plus im
   neutralen Satz, hier nur mit der Spezifitaet, die gegen .inhalt a haelt. */
.inhalt a.knopf-haupt,
.inhalt a.knopf-plus {
  color: #fff;
}
/* Der STILLE Zeilenknopf: derselbe Ton wie an .knopf-zeile im neutralen Satz,
   hier nur mit der Spezifitaet, die gegen .inhalt a haelt. Nicht weiss — auf
   durchsichtigem Grund waere er unsichtbar. */
.inhalt a.knopf-zeile {
  color: var(--tinte-leise);
}

/* ---------------------------------------------------------------------------
   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 KONTOWEG IM BAND — EIN ELEMENT (Design, 29.08.2026, juengere Fassung).

   IM WORTLAUT: „Im Band, ganz rechts: Personenzeichen und Name, EIN Element,
   ein Weg zur Kontoseite. 32 px Zeichen, 9 px Abstand, dann der Name. KEIN
   ‚Abmelden‘ im Band. Ab 1120 px genau dieses eine Element, nicht zwei."

   HIER STANDEN ZWEIHUNDERTSIEBZIG ZEILEN FUER ZWEI BAUTEILE: `.kopf-ich` mit
   Name und Abmeldeknopf, und daneben `.kopf-benutzer` — ein `<details>` mit
   44-px-Zeichenfeld, einem Hals aus zwei Pseudoelementen, einer 270 px breiten
   Flaeche mit Kopfzeile, Wegeliste und einem zweiten Abmeldeknopf.

   SIE SIND FORT UND NICHT AUSKOMMENTIERT. Was davon bleibt, ist `.kopf-zeichen`
   — dasselbe Zeichen, nur jetzt IM Verweis statt daneben.

   DER GANZE GRUND FUER DAS DANEBENSTEHEN WAR EINE ZEILE, DIE ES NICHT MEHR
   GIBT: `.kopf-ich { display: none }` im E4-Block. Das Zeichen musste
   ausserhalb stehen, um sie zu ueberleben. Seit dem 29.08.2026 wandert das
   `display: none` auf den NAMEN, das Element bleibt sichtbar — und damit faellt
   der Grund weg, aus dem das Zeichen daneben stand.

   WAS DAS AN RECHNEREI SPART, IST DER BELEG DAFUER, DASS ES DIE RICHTIGE
   BAUART IST: Der Abstand von 9 px stand vorher als
   `calc(9px - 6px - 28px - 8px)` da — ein negativer Aussenabstand, der das
   Spiel im Treffbereich, den Bandabstand und einen Innenabstand wieder
   herausrechnete, und zwar je Bruchkante mit anderen Zahlen. Jetzt ist es
   `gap: 9px` zwischen zwei Geschwistern.

   DER TREFFBEREICH HAENGT AM VERWEIS UND NICHT AM ZEICHEN. Unter der
   E4-Bedingung ist der Name fort und das Zeichen 24 px gross; ohne
   `min-width`/`min-height` waere der Treffbereich dann 24 px statt der 44,
   die ADR-0024 (Nachtrag 27.08.2026) verlangt.

   `.kopf-rechts` HAELT KONTOWEG UND VOREINSTELLUNGEN ZUSAMMEN. margin-left:
   auto steht am Kasten, nicht mehr an `.kopf-ich`: Kaeme der Oeffner als
   eigenes Flexkind davor, schoebe der Automatismus eine Luecke zwischen
   Vereinsart und Personenzeichen.
   --------------------------------------------------------------------------- */
.kopf-rechts {
  margin-left: auto;
  display: flex;
  align-items: center;
  /* 10 PX UND NICHT MEHR 8 — ADR-0078 (08.09.2026), Punkt 4; BAUTEILE.md,
     Kopfband: „Abstand zwischen Name, Maennchen, Lyra 10 px". */
  gap: 10px;
  flex: none;
}
/* DER KONTOWEG: NAME, DANN DAS MAENNCHEN — gespiegelt seit dem 08.09.2026
   (ADR-0078, Punkt 4). Die Reihenfolge traegt das Markup in
   kern/ansicht/kopf.php; hier steht nur der Abstand, und `gap: 10px` ist
   dieselbe Zahl wie an `.kopf-rechts` — in jeder Breite, an EINER Stelle
   (die zwei Rueckzugsrechnungen je Bruchkante sind seit dem 29.08.2026 fort,
   siehe weiter unten). Bis zum 08.09.2026 stand hier 9. */
.kopf-ich {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
  flex: none;
  min-width: 44px;
  min-height: 44px;
  border-radius: var(--radius);
  color: inherit;
  text-decoration: none;
}

/* ---------------------------------------------------------------------------
   DIE ZWEI ZEICHENFLAECHEN SIND KNOEPFE — ADR-0078 (08.09.2026), Punkt 4.

   HIER STAND BIS ZUM 08.09.2026 an `.kopf-verwaltung`: „Keine Fuellung, keine
   Kante — dieselbe Bauart wie .kopf-ich, damit das Band Zugehoerigkeit bleibt
   und nicht Bedienung vortaeuscht." Der Betreiber hat am Bild das Gegenteil
   entschieden: „Im Kopfband die Lyra fuer die Administration und das
   Maennchen als Button umsetzen." Die Zahlen sind die der Lieferung
   (BAUTEILE.md, Kopfband; TOKENS.md, Kopfband-Knopfrahmen): 44 x 44, Rahmen
   1 px rgba(255,255,255,.42), Radius --radius, keine Fuellung; Zeichen 22 px
   Weiss, mittig. Zeigen: Fuellung rgba(255,255,255,.12), Rahmen .70. Fokus:
   outline 2 px Weiss, 2 px nach aussen.

   DER KONTOWEG BLEIBT EIN ELEMENT (`.kopf-ich` mit Name und Zeichen, 060);
   der Knopf ist seine ZEICHENFLAECHE `.kopf-zeichen`, der Name bleibt Text
   davor. Bei der Verwaltung ist der ganze Verweis der Knopf.

   .kopf-zeichen UND .nav-zeichen WERDEN NICHT WIEDERVERWENDET. Das eine
   ist person.svg (Kontoweg, 060), das andere die Modulnavigation (175). */
.kopf-zeichen, .kopf-verwaltung {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex: none;
  box-sizing: border-box;
  width: 44px;
  height: 44px;
  min-width: 44px;
  min-height: 44px;
  margin: 0;
  padding: 0;
  border: 1px solid rgba(255, 255, 255, 0.42);
  border-radius: var(--radius);
  background: transparent;
  color: inherit;
  font: inherit;
  cursor: pointer;
  text-decoration: none;
}
.kopf-ich:hover .kopf-zeichen, .kopf-verwaltung:hover {
  background: rgba(255, 255, 255, 0.12);
  border-color: rgba(255, 255, 255, 0.7);
}
.kopf-ich:focus-visible,
.kopf-verwaltung:focus-visible {
  outline: 2px solid #fff;
  outline-offset: 2px;
}

/* DAS ZEICHEN KOMMT ALS MASKE, wie die Navigationszeichen und aus demselben
   Grund: Ueber `<img src=…>` griffe keine Farbe aus dem Blatt, und dieses
   Zeichen steht weiss auf der Vereinsfarbe.

   22 PX IN JEDER BREITE (Lieferung 08.09.2026, TOKENS.md: „Zeichen in
   Knoepfen 22 px"). Die 24 hier und die 32 am Schreibtisch sind mit
   ADR-0078, Punkt 4, abgeloest — der Medienblock dafuer ist fort.

   BEIM KONTOWEG LIEGT DIE MASKE AUF EINEM PSEUDO-ELEMENT: `.kopf-zeichen`
   ist jetzt der Rahmen (oben), das Zeichen steht darin, ohne ein zweites
   Element im Markup. Bei der Verwaltung ist der Verweis der Rahmen und
   `.kopf-verwaltung-zeichen` das Zeichen. Dessen Datei haengt an data-art —
   der Rueckfall (leer, unbekannt, Sportverein ohne Lieferung) ist die
   Produktmarke, nicht ein achtes Vereinsart-Zeichen (ADR-0056). */
.kopf-zeichen::before,
.kopf-verwaltung-zeichen {
  display: block;
  width: 22px;
  height: 22px;
  flex: none;
  background-color: #fff;
  -webkit-mask-repeat: no-repeat;
          mask-repeat: no-repeat;
  -webkit-mask-position: center;
          mask-position: center;
  -webkit-mask-size: contain;
          mask-size: contain;
}
.kopf-zeichen::before {
  content: "";
  -webkit-mask-image: url(zeichen/person.svg);
          mask-image: url(zeichen/person.svg);
}
.kopf-verwaltung-zeichen {
  -webkit-mask-image: url(marke/zeichen-kompakt-messing.svg);
          mask-image: url(marke/zeichen-kompakt-messing.svg);
}
.kopf-verwaltung-zeichen[data-art="vereinsartKapelle"] {
  -webkit-mask-image: url(zeichen/vereinsartKapelle.svg);
          mask-image: url(zeichen/vereinsartKapelle.svg);
}
.kopf-verwaltung-zeichen[data-art="vereinsartChor"] {
  -webkit-mask-image: url(zeichen/vereinsartChor.svg);
          mask-image: url(zeichen/vereinsartChor.svg);
}
.kopf-verwaltung-zeichen[data-art="vereinsartSchuetzenkompanie"] {
  -webkit-mask-image: url(zeichen/vereinsartSchuetzenkompanie.svg);
          mask-image: url(zeichen/vereinsartSchuetzenkompanie.svg);
}
.kopf-verwaltung-zeichen[data-art="vereinsartSchuetzengilde"] {
  -webkit-mask-image: url(zeichen/vereinsartSchuetzengilde.svg);
          mask-image: url(zeichen/vereinsartSchuetzengilde.svg);
}
.kopf-verwaltung-zeichen[data-art="vereinsartLandjugend"] {
  -webkit-mask-image: url(zeichen/vereinsartLandjugend.svg);
          mask-image: url(zeichen/vereinsartLandjugend.svg);
}
.kopf-verwaltung-zeichen[data-art="vereinsartBlaulicht"] {
  -webkit-mask-image: url(zeichen/vereinsartBlaulicht.svg);
          mask-image: url(zeichen/vereinsartBlaulicht.svg);
}

/* DIE ZWEI MEDIENBLOECKE FUER DEN ABSTAND SIND FORT — es gibt nur noch EINE
   Zahl, und sie steht oben als `gap: 10px` (bis zum 08.09.2026: 9px).

   HIER STANDEN ZWEI RUECKZUGSRECHNUNGEN, je Bruchkante eine:

       @media (min-width: 700px)  … calc(9px - 10px - 28px - 8px)
       @media (min-width: 1120px) … calc(9px -  6px - 28px - 8px)

   Sie holten die 9 px zurueck, die zwischen zwei GESCHWISTERN gar nicht erst
   entstanden waeren: Spiel im 44-px-Feld, Bandabstand, Innenabstand. Ihre
   Zahlen waren verschieden, WEIL das Spiel im Treffbereich von der
   Zeichengroesse abhing — (44-24)/2 gegen (44-32)/2.

   IHR ANLASS BLEIBT LESENSWERT, DENN ER IST DIE KLASSE, DIE HIER GELOEST IST:
   Der Bereich 700 bis 1119 fiel am 29.08.2026 durch BEIDE Bloecke, das Zeichen
   stand dort 46 px vom Namen statt 9. Gefunden hat es der Skill code-review,
   nicht die Kette. EINE Zahl an EINER Stelle kann durch keinen Bereich fallen.

   UND SEIT DEM 08.09.2026 GIBT ES AUCH KEINE ZWEITE ZEICHENGROESSE MEHR: Hier
   stand ein Block `(min-width: 1120px) and (min-height: 451px)` mit 32 px fuer
   beide Zeichen. ADR-0078, Punkt 4: 22 px in jeder Breite, oben gesetzt. */

/* 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; }

/* Der Oeffner des Untermenues AM GERAET gehoert zur dritten Fassung und wird
   mit ihr eingeschaltet — derselbe Grundzustand und derselbe Grund wie eine
   Zeile darueber. Die zwei anderen Fassungen brauchen keinen eigenen
   Schalter: Ihr Untermenue steckt in Elementen, die es ohne sie nicht gibt
   (`.mehr-oeffner` in der Modulzeile, `.leiste-untermenue` in der
   Seitenleiste). */
.geraet-untermenue { 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.

   UEBERHOLT AM 10.09.2026, UND DER ALTE WORTLAUT BLEIBT DARUEBER STEHEN: Die
   Entscheidung ist gefallen. BAUTEILE.md:98-99 der Lieferung vom 08.09.2026
   gibt die Kartenueberschrift vor (11 px Versalien wie ein Spaltenkopf),
   ADR-0078 macht sie verbindlich. Die Regel steht jetzt bei `.karte` als
   `.karte > h2` — es war eine Luecke in der Vorgabe und ist seit dem
   08.09.2026 eine im Bau gewesen. `--grad-titel` bleibt weiterhin unbenutzt:
   Der neue Wert ist 11 px und nicht 26. */
.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.

   DER 1-PX-RAND IST DIE REGEL DER LIEFERUNG VOM 08.09.2026 UND GILT FUER JEDE
   KARTE (BAUTEILE.md „Karte": „Flaeche --karte, 1 px --linie, Radius 10
   (--radius-gross), overflow: hidden"; TOKENS.md „Kartenrand 1 px --linie";
   ADR-0078, Entscheidung Punkt 1 und 4).

   ER STAND BIS ZUM 10.09.2026 AN GENAU EINER KARTE — `.karte.vereinsbuch-karte`
   (Z. 6370), also an der einen Karte der gelieferten Seite. Gemessen am
   10.09.2026 im Markup von kern/seiten/ und kern/ansicht/: 79 Karten-Elemente,
   davon eine mit Rand; die uebrigen 78 standen randlos auf --grund (Kontrast
   --karte gegen --grund 1,23). Das ist die Klasse aus
   .claude/rules/00-jede-regel-mit-anlass.md (Nachtrag 07.09.2026): Die
   Festlegung war am Anlassfall eingeloest, fuer die MENGE hat niemand
   nachgesehen. Die Menge ist hier abgeleitet und nicht aufgezaehlt — sie ist
   `.karte`, und die Regel steht an der Klasse.

   `overflow: hidden` GEHOERT DAZU, weil die Karte Kolonnen traegt: Die Huelle
   `.listenlauf` liegt in der Karte und rundet unten; ohne die Klammer laeuft
   eine breite Kolonne ueber die Kartenecke hinaus (dieselbe Zeile steht seit
   dem 09.09.2026 an `.karte.vereinsbuch-karte`, `.karte.klapp` und
   `.karte-ausgaben`).

   AM HANDY FALLEN LINKE UND RECHTE KANTE mit dem Radius (Block bei 700 px,
   `border-left`/`border-right: 0`) — die zwei Zeilen standen dort schon, sie
   bekommen mit diesem Rand ihren Gegenstand. */
.karte {
  padding: var(--abstand);
  background: var(--karte);
  border: 1px solid var(--linie);
  border-radius: var(--radius-gross);
  overflow: hidden;
}

/* ---------------------------------------------------------------------------
   DIE KARTENUEBERSCHRIFT — 11 PX VERSALIEN WIE EIN SPALTENKOPF
   (Lieferung 08.09.2026, BAUTEILE.md „Karte": „Kartenueberschrift h2
   (Programme, Verlauf): 11 px Versalien wie ein Spaltenkopf, padding
   12px 12px 8px"; TOKENS.md „Spaltenkopf 11 px, 600, Versalien, Laufweite
   .06em, --tinte-leise"; ADR-0078).

   BIS ZUM 10.09.2026 GAB ES IM PORTAL KEINE ALLGEMEINE REGEL FUER EINE
   KARTENUEBERSCHRIFT. Gemessen an diesem Tag: drei h2-Regeln im ganzen Blatt —
   `.fenster h2` (--grad-gross, 20 px), `.karte.klapp > summary h2` (11 px) und
   `.karte-stimmen > h2` (11 px). Jede uebrige Kartenueberschrift trug den
   Vorgabewert des Browsers.

   DER KOMMENTAR WEITER OBEN AN `.inhalt h1` NANNTE DAS EINE „LUECKE IN DER
   VORGABE UND KEINE IM BAU" und berief sich auf die Antwort der Gestaltung vom
   20.08.2026 auf Rueckfrage 2. DIESER SATZ IST SEIT DEM 08.09.2026 UEBERHOLT:
   BAUTEILE.md:98-99 liefert die Vorgabe nach, ADR-0078 macht sie verbindlich —
   damit ist die Luecke eine im Bau, und sie ist hier geschlossen. Der alte
   Wortlaut bleibt dort stehen, mit dem Vermerk daneben.

   WARUM `margin: 0 0 8px` UND NICHT `padding: 12px 12px 8px` — DIE HERLEITUNG
   STEHT HIER, WEIL SIE SONST WIE EINE ABWEICHUNG AUSSIEHT (ADR-0078,
   Entscheidung Punkt 5): Die Lieferung setzt die 12/12 an der Ueberschrift,
   weil ihre Karte `padding: 0` traegt (`.na2-stueck .karte`, Lieferung
   stil.css:7141 — „padding 0 fuer Listenkarten"). Eine Karte des Kerns traegt
   `padding: var(--abstand)`; die 12 waagrecht und oben sind dort schon da. Was
   bleibt, ist der Abstand von 8 px UNTER der Ueberschrift, und genau der steht
   hier. Wer einer Karte `padding: 0` gibt, gibt der Ueberschrift ihre 12/12
   dazu — so machen es `.karte.klapp > summary h2` und `.karte-stimmen > h2`.

   `> h2` UND NICHT `h2`: Ein h2 in einem `<dialog class="fenster">` innerhalb
   einer Karte ist die Fensterueberschrift und traegt --grad-gross
   (`.fenster h2`); ein h2 in einer eingebetteten Ansicht gehoert dieser und
   nicht der Karte. Der Gegenstand ist die Ueberschrift DIESER Karte.
   --------------------------------------------------------------------------- */
.karte > h2 {
  margin: 0 0 8px;
  font-family: var(--schrift-text);
  font-size: 11px;
  font-weight: 600;
  letter-spacing: .06em;
  text-transform: uppercase;
  color: var(--tinte-leise);
}

/* ---------------------------------------------------------------------------
   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));
}

/* ---------------------------------------------------------------------------
   DER SATZ IN DER KARTE (Design, 29.08.2026, Antwort auf Issue #53).

   IM WORTLAUT: „`.karte-satz { max-width: var(--satzbreite) }`. Die Klasse
   sitzt am ABSATZ, nicht an der Karte. Die Karte behaelt ihre Breite, weil sie
   Kolonnen tragen kann. Kein anderes Markup."

   DAS IST DIE DRITTE FASSUNG NEBEN DEN ZWEI DARUEBER, UND SIE LOEST EINEN
   ANDEREN FALL:

     `.textkarte`         Die KARTE endet beim Satz. Fuer eine Karte, in der
                          nichts als Text steht.
     `.textkarte-beiwerk` Die Karte bleibt breit, der Satz haelt links seine
                          Breite, rechts steht eine Randspalte.
     `.karte-satz`        Die Karte bleibt breit UND es gibt keine Randspalte —
                          weil in derselben Karte noch etwas anderes steht, das
                          die Breite braucht: eine Liste, ein Formular, eine
                          Kolonne.

   WARUM NICHT EINFACH `.karte p`: Weil dann jeder Absatz betroffen waere, auch
   der, der eine Kolonne beschriftet oder in einer Tabellenzelle steht. Design
   sagt „die Klasse sitzt am Absatz" und nicht „alle Absaetze" — die Wahl bleibt
   beim Bauenden, und sie steht sichtbar im Markup.

   GEMESSEN AM 29.08.2026 im Browser bei 1512 px, bevor diese Regel stand: Die
   Karte war 1060 px breit, der Absatz nahm 1028 px davon — rund 130 Zeichen je
   Zeile. --satzbreite ergibt an derselben Stelle 573 px.

   `max-width` UND NICHT `width`: Ist die Karte schmaler als der Satz — am
   Geraet ist sie das immer —, bleibt der Absatz so breit wie die Karte. Eine
   feste Breite haette ihn dort ueber die Karte hinauslaufen lassen.
   --------------------------------------------------------------------------- */
.karte-satz {
  max-width: var(--satzbreite);
}

/* ---------------------------------------------------------------------------
   DIE KLAPPKARTE — ADR-0078, Nachtrag vom 09.09.2026 (mittags), Punkt 6

   Sein Wortlaut: „die Klappkarte (`<details class="karte klapp">`, `summary`
   44 px mit Winkel, Zahl neben der Ueberschrift, zu) ist ein neuer Baustein
   des Kerns — mit Designs Regel: nachgeordnete Auskuenfte auf einer
   Detailseite sind Klappkarten, zu. Die Reichweite (jede Detailseite:
   Mitglied, Gegenstand, Sitzung …) ist damit entschieden."

   ERSTER VERWENDER IST DIE KARTE „Ähnliche Schreibweisen" auf
   module/notenarchiv/seiten/namenslisten.php (09.09.2026). Der Nachtrag nennt
   die Stueckseite als ersten Ort; gebaut wurde zuerst, was zuerst fertig war.
   Die Regel ist dieselbe, sie steht hier einmal und nicht zweimal.

   `.karte` SELBST WIRD NICHT ANGEFASST — derselbe Satz wie bei der Textkarte
   darueber. Was hier steht, gilt nur mit `.klapp` daneben.

   DER INNENABSTAND WANDERT VON DER KARTE IN IHRE ZWEI TEILE, und das ist
   noetig und keine Vorliebe: Der `summary` ist die Trefflaeche zum Aufklappen
   und muss 44 px hoch sein (dieselbe Zahl wie die Zeilenaktion, ADR-0078). Mit
   dem Kartenabstand darueber und darunter waere er 44 plus zweimal --abstand.

   DER WINKEL IST DER DER AUSWAHLFELDER — dieselbe eingebettete Zeichnung wie
   an `.vereinsbuch-artfilter` (10 x 6, --tinte-leise als #556059; die CSP
   erlaubt `img-src data:`). ZWEI VERSCHIEDENE WINKEL AUF EINER SEITE waeren
   zwei Antworten auf dieselbe Frage; dies ist die vorhandene.

   `list-style: none` UND `::-webkit-details-marker`: Das voreingestellte
   Dreieck der Browser steht links und ist nicht das gelieferte Zeichen.
   Beide Zeilen braucht es, weil aeltere WebKit-Staende die erste ignorieren.

   KEIN `transition`: Das Portal fuehrt keine Bewegung an Karten, und ein
   Uebergang allein an dieser waere die einzige seiner Art.
   --------------------------------------------------------------------------- */
.karte.klapp {
  padding: 0;
}
.karte.klapp > summary {
  display: flex;
  align-items: center;
  gap: 8px;
  min-height: 44px;
  padding: 0 var(--abstand);
  cursor: pointer;
  list-style: none;
}
.karte.klapp > summary::-webkit-details-marker { display: none; }
.karte.klapp > summary::after {
  content: "";
  flex: 0 0 10px;
  width: 10px;
  height: 6px;
  margin-left: auto;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' fill='none' stroke='%23556059' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: center;
}
.karte.klapp[open] > summary::after { transform: rotate(180deg); }
.karte.klapp > summary:hover { background: var(--grund); }
.karte.klapp > summary:focus-visible { outline: 2px solid var(--verein); outline-offset: -2px; }
.karte.klapp > summary > h2 { margin: 0; }
.karte.klapp > .klapp-inhalt { padding: 0 var(--abstand) var(--abstand); }
/* DASSELBE TOKEN WIE `.karte` UNTER DER BRUCHKANTE (--karte-innen-schmal).
   `.karte` wechselt unter 700 px von --abstand auf --karte-innen-schmal; die
   Klappkarte tat es bis zum 10.09.2026 nicht und nannte in JEDER Breite
   --abstand. Heute ist das folgenlos, weil beide 16 px sind — und genau das
   ist der Fall, den 060_bedienkonzept.php (Rueckfrage 6) beschreibt: „zwei 16
   nebeneinander laufen beim naechsten Umbau auseinander, und niemand sieht es,
   weil beide ‚16' heissen." */
@media (max-width: 699px) {
  .karte.klapp > summary { padding: 0 var(--karte-innen-schmal); }
  .karte.klapp > .klapp-inhalt { padding: 0 var(--karte-innen-schmal) var(--karte-innen-schmal); }
}

.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.

   HIER STAND BIS ZUM 29.08.2026 die Entscheidung vom 22.08.2026: „Es gilt
   --zonenabstand, also 14px am Schreibtisch und 10px unter 700px." SIE IST
   ABGELOEST, und zwar von der Stelle, die sie getroffen hat: Design hat am
   29.08.2026 Issue #42 beantwortet und den Abstand aus dem Token
   herausgenommen — „als eigener Wert gesetzt: 14 px, alle Breiten".

   DIE ALTE BEGRUENDUNG WAR NICHT FALSCH, SIE IST UEBERSTIMMT: Sie sagte, eine
   feste 14 neben einer Skala, die bei 10 endet, veralte beim naechsten Griff
   an die Skala. Das stimmt fuer eine hingeschriebene 14. Es stimmt NICHT fuer
   die Fassung unten — sie rechnet den Stapelabstand heraus und ergibt
   --rueckverweis-abstand in JEDER Breite, auch wenn jemand --zonenabstand
   aendert.

   UND GENAU DAS IST DER UNTERSCHIED ZWISCHEN AUSGLEICH UND KOPPLUNG: Der WERT
   steht in --rueckverweis-abstand und haengt an nichts. Dass --zonenabstand im
   calc vorkommt, macht ihn nicht abhaengig — es macht ihn unabhaengig, weil
   genau das abgezogen wird, was der Stapel dazulegt.

   DER GRUND FUER DEN AUSGLEICH IST DER ANLASS AUS DER ALTEN FASSUNG, UND ER
   GILT UNVERAENDERT: Flex-Abstand und Aussenabstand werden ADDIERT, nicht
   zusammengelegt. Hier stand bis zum 21.08.2026 `margin: 0 0 14px` neben dem
   `gap` des Zonenstapels; gemessen im Browser waren es 28px statt 14. Wer die
   Zeile unten in eine feste `margin-bottom: 14px` zurueckdreht, baut genau
   diesen Fall wieder ein.

   DIESER KOMMENTAR SICHERT NICHTS ZU: Ein Kommentar wird nicht rot
   (Gestaltung, 22.08.2026). Das tut `tests/faelle/060_bedienkonzept.php` —
   die Zeile „Der Rueckverweis haelt --rueckverweis-abstand in jeder Breite". */
.inhalt .zurueck {
  margin: 0;
  margin-bottom: var(--rueckverweis-abstand);
}
/* IN DER ZONENSPALTE LEGT DER STAPEL SEINEN `gap` DAZU. Die Differenz steht
   als calc und nicht als Ergebnis, damit sie beim naechsten Griff mitgelesen
   wird: 14 - 14 = 0 ab 700px, 14 - 10 = 4 darunter, wirksam beide Male 14.

   AUSSERHALB DER ZONENSPALTE GIBT ES KEINEN `gap`, und dort trug der
   Rueckverweis bis zum 29.08.2026 GAR KEINEN ABSTAND — gemessen an der Bauart
   von `kern/ansicht/verweigert.php` und `kern/ansicht/ohne_verein.php`: 0px in
   allen fuenf gemessenen Breiten, die Ueberschrift sass unmittelbar darunter.
   Das ist mit der Grundregel darueber behoben und war vorher niemandem
   aufgefallen, weil keine dieser zwei Seiten in der Vorschau steht. */
.inhalt.zonen > .zurueck {
  margin-bottom: calc(var(--rueckverweis-abstand) - var(--zonenabstand));
}
/* 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);
}

/* DER SEITENKOPF DER LIEFERUNG VOM 08.09.2026 (ADR-0078, Scheibe B; BAUTEILE.md
   „Seitenkopf"): `display:flex; align-items:center; gap 16; margin: 6px 0 22px`
   (Handy 4px 0 14px), Titel 26 px / 1.2 ohne Umbruch ab 700, Zahl 15 px mit
   10 px Abstand, rechts genau EIN Knopf (`.knopf-plus`; „Spalten" und „Ansicht
   ausgeben" stehen in der Leiste).

   KEIN AUSSENABSTAND AM KOPF — das Bild gilt (ADR-0078): GEMESSEN an den drei
   gelieferten Seiten bei 390, 834 und 1280 px ist der Aussenabstand des Kopfes
   0 und der Abstand zur Karte der Zonenabstand (14, Handy 10). BAUTEILE.md nennt
   `margin: 6px 0 22px` (Handy 4/14); die Regel des Listenblatts (`main.lp
   .seitenkopf`, 0,2,1) verliert auf jeder gelieferten Seite gegen den Zonenkopf
   (`.inhalt.zonen > .seitenkopf { margin: 0 }`, 0,3,0). Die 6/22 stehen deshalb
   nicht hier — sie wirkten nirgends, und der Rueckverweis-Abstand
   (060_bedienkonzept.php: „Seitenkopf und Titel legen nichts dazu") bleibt,
   was er war. Gemeldet.

   BERICHTIGT AM 10.09.2026: „SIE WIRKTEN NIRGENDS" WAR AN DEN VIER GELIEFERTEN
   SEITEN GEMESSEN UND ALS ALLGEMEINER SATZ FALSCH. Die vier gelieferten Seiten
   sind alle Zonenseiten; auf ihnen schlaegt `.inhalt.zonen > .seitenkopf`
   (0,3,0) jede Kopfregel, und der Satz stimmt. GEMESSEN AM BESTAND am
   10.09.2026: 44 Seiten tragen `class="seitenkopf"`, ZEHN davon setzen kein
   `$zonen` — module/zeugwart/seiten/{arten,ausgaben,gruppen,lagerorte,
   zustaende}.php, module/sitzungen/seiten/{sitzung,sitzungen,beschluesse}.php,
   module/termine/seiten/termine.php, module/notenarchiv/seiten/kategorien.php.
   Auf diesen zehn greift die Zonenregel gar nicht, und der gelieferte Abstand
   fehlte ersatzlos: 0 statt 6/22 beziehungsweise 4/14.

   Das ist die Form aus .claude/rules/00-jede-regel-mit-anlass.md — eine
   Begruendung, die an ihrem Anlassfall richtig ist und deren Reichweite
   niemand nachgesehen hat. DIE GELIEFERTE REGEL STEHT DESHALB JETZT AN
   `.seitenkopf` (0,1,0), und der Zonenkopf (0,3,0) ueberstimmt sie
   unveraendert — das Bild der vier gelieferten Seiten bleibt Bit fuer Bit, was
   es war, und die zehn Seiten ohne Zonen bekommen, was BAUTEILE.md:75 und
   TOKENS.md:45 fuer sie sagen. 060_bedienkonzept.php haelt die Null seither
   AM ZONENKOPF und nicht an jeder Kopfregel; die Zusicherung war vorher rot.

   22 PX UNTER 700 (im 700er-Block), NICHT DIE 26 DES BILDES: BAUTEILE.md sagt
   „Handy 22 px, bricht", TOKENS.md „Handy 22 px", und alle drei Modulblaetter
   der Lieferung setzen im 699er-Block 22 (`.vb2/.zw2/.na2 .seitenkopf h1`).
   Die drei gelieferten Seiten messen bei echten 390 px trotzdem 26, weil ihr
   Listenblatt (`main.lp .seitenkopf h1`, 0,2,2, ausserhalb jedes @media) die
   22 der Modulblaetter (0,2,1) ueberstimmt — ein Versehen des Blatts, keine
   Zahl: dieselbe Klasse wie Befund 4 des Nachtrags vom 08.09.2026 (abends) zu
   ADR-0078, dort gegen das Bild entschieden, weil Regel, BAUTEILE.md und
   TOKENS.md dasselbe sagen. Bis zur Nachbesserung vom 09.09.2026 stand hier
   „26 px auch unter 700" (das Bild); 060_bedienkonzept.php haelt jetzt die
   vier Grade. Der Titel bricht unter 700 um (`white-space: normal`) und steht
   mittig (`align-items: center` am gestapelten Kopf, ADR-0078 Nachtrag). */
.seitenkopf { display: flex; align-items: center; gap: 16px; flex-wrap: wrap; margin: 6px 0 22px; }
.seitenkopf-aktionen { margin-left: auto; }
.seitenkopf h1 { font-size: 26px; line-height: 1.2; white-space: nowrap; }
.seitenkopf-aktionen .knopf-plus { white-space: nowrap; }
/* Plus statt Wort — Betreiber 13.09.2026, Programm anlegen. 44er Quadrat,
   das Wort steht nur für die Vorlesehilfe. Unter 700 px nicht vollbreit:
   ein nacktes Plus auf 358 px Goldfläche wäre die Fläche ohne die Sache. */
.knopf-plus:has(.knopf-plus-zeichen) {
  width: 44px;
  min-width: 44px;
  padding: 0;
  flex: 0 0 44px;
}
.knopf-plus-zeichen {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 22px;
  height: 22px;
}
.knopf-plus-zeichen svg { display: block; }
/* 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. */
/* 15 PX UND 10 PX SEIT DEM 09.09.2026 (ADR-0078; TOKENS.md „Zahl am Titel":
   15 px, --tinte-leise, 10 px nach dem Titel). Bis dahin 17 px und 8 px; die
   Begruendung darueber (Bedienschrift, kein Fussnotengrad) bleibt richtig —
   die Zahl ist die der Lieferung. */
.anzahl {
  color: var(--tinte-leise);
  font-family: var(--schrift-text);
  font-weight: 400;
  font-size: 15px;
  font-variant-numeric: tabular-nums;
  margin-left: 10px;
}

/* ---------- 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);
  text-decoration: none;
  /* DAS WORT BRICHT NICHT (Lieferung 08.09.2026, BAUTEILE.md Seitenkopf:
     „.knopf-plus … white-space: nowrap, 44 hoch"). Ein Hauptknopf, dessen
     Wort umbricht, wird hoeher als seine Nachbarn — gemessen im Zeugwart bei
     390 px mit drei Knoepfen in einer Zeile: 54 statt 44. */
  white-space: nowrap;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}

/*
 * 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;
  /* Bezugsrahmen fuer die Treffflaeche darunter. Ohne diese Zeile suchte sich
     das absolut gesetzte ::after den naechsten positionierten Vorfahren —
     irgendwo auf der Seite, und niemand saehe es. */
  position: relative;
}
.knopf-zeile { transition: background var(--dauer), color var(--dauer); }
/* DER ZEIGEZUSTAND IST --grund-tief UND NICHTS SONST — Lieferung 08.09.2026,
   BAUTEILE.md „Knoepfe": „`.knopf-zeile` … BRICHT: Zeigezustand `--gefahr` des
   heutigen `.knopf-zeile` wird nicht uebernommen, wo er bleibt: `--grund-tief`."
   ADR-0078, Tabelle Zeile 12, nennt dieselbe Zeile.

   HIER STAND BIS ZUM 10.09.2026 `color: var(--gefahr)`. Die Flaeche war seit
   dem 08.09.2026 richtig, die SCHRIFTFARBE nicht: Sie wurde beim Zeigen rot
   (#a81622) — an Wortknoepfen, die keine Gefahr sind („Oeffnen", „Beenden",
   „Ausgeben", „Zuruecknehmen"). Rot ist im Portal Hauptaktion UND Gefahr und
   sonst nichts (TOKENS.md:15, Kommentar an den Meldungsstufen).

   DIE GEGENREDE IM BESTAND IST AELTER ALS DIE LIEFERUNG und steht weiter oben
   an den Meldungsstufen: „--gefahr bleibt an `.knopf-zeile:focus-visible`, das
   ist ein Fokusrahmen und keine Meldungsfarbe." Sie ist mit dieser Lieferung
   ueberholt — BAUTEILE.md nennt danach ausdruecklich diesen Zeigezustand, und
   ein Fokusrahmen ist eine `outline` und keine Schriftfarbe. Den Fokusrahmen
   traegt der Knopf jetzt als `outline` — 2 px --verein, offset 1, dieselben
   zwei Zeilen wie an `.handlung` (BAUTEILE.md:282-283, ADR-0024). GEMESSEN am
   10.09.2026: Es gibt im Blatt KEINE portalweite `:focus-visible`-Regel; ohne
   diese zwei Zeilen faellt der Knopf auf den Umriss des Browsers zurueck, und
   die Farbe waere ersatzlos weg statt ersetzt.

   `color: var(--tinte)` UND NICHT „weglassen": Ohne die Zeile bliebe
   --tinte-leise aus der Grundregel stehen, und der Knopf saehe beim Zeigen
   genauso aus wie in Ruhe. Der Zeigezustand der Lieferung ist die Flaeche;
   das Wort tritt dabei aus dem Nebenrang in den Text. */
.knopf-zeile:hover,
.knopf-zeile:focus-visible { color: var(--tinte); background: var(--grund-tief); }
.knopf-zeile:focus-visible {
  outline: 2px solid var(--verein);
  outline-offset: 1px;
}

/*
 * DIE TREFFFLAECHE IST 44 PX, DIE ZEICHNUNG BLEIBT 25 (Design, 30.08.2026).
 *
 * Im Wortlaut: „Die sichtbare Zeile bleibt 25 px hoch — die Zeilenhoehe der
 * Listen wird nicht angefasst. Die Trefflaeche wird auf 44 px gebracht, ohne
 * den Fluss zu aendern: ein unsichtbares ::after ueber dem Knopf, mittig,
 * Hoehe 44 px, Breite mindestens 44 px, pointer-events auf diesen Bereich.
 * ADR-0024 fordert die Trefflaeche, nicht die Zeichnung."
 *
 * DIE 25 SIND GERECHNET UND NICHT GESETZT: 4 + 17 + 4 (padding, font-size bei
 * line-height 1). Sie stehen an keiner Stelle als Zahl — wer sie sucht, findet
 * die drei Zeilen darueber.
 *
 * WARUM NICHT `min-height: 44px` AM KNOPF SELBST: Das ist der kuerzere Weg und
 * der falsche. Er macht aus jeder Aktionszelle eine 44-px-Zelle und schiebt
 * jede Liste auseinander — bei zehn Zeilen sind das 190 px. Genau das schliesst
 * Designs Satz aus.
 *
 * `width: 100%` UND `min-width: 44px` ZUSAMMEN, und beide tragen: Ein
 * Zeichenknopf ist 26 px breit und braucht die 44; ein Wortknopf
 * („Zuruecknehmen") ist 125 px breit, und eine feste Breite von 44 machte
 * seinen Treffbereich KLEINER als seine Zeichnung.
 *
 * KEIN `pointer-events` UND DAS IST DER PUNKT: Ein Pseudoelement gehoert beim
 * Treffen zu seinem Erzeuger; ein Klick darauf landet auf dem Knopf. Wer hier
 * `pointer-events: none` hinschriebe, haette den Treffbereich wieder auf 25 px
 * zurueckgedreht, ohne dass eine Regel dagegen dastuende.
 *
 * WAS SIE NICHT LEISTET, und das gehoert daneben: Wo zwei Zeilenaktionen
 * nebeneinander in einer Zelle stehen, ueberlagern sich ihre Trefffelder —
 * gemessen am 30.08.2026 im Browser. Die Flaeche ist gebaut; dass sie an jeder
 * einzelnen Stelle ungeschmaelert ankommt, sagt sie nicht.
 */
.knopf-zeile::after {
  content: "";
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  width: 100%;
  min-width: 44px;
  height: 44px;
}

/* ---------- 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.

   UEBERHOLT AM 10.09.2026, und der alte Wortlaut steht darueber: BAUTEILE.md
   der Lieferung vom 08.09.2026 („Knoepfe") nimmt genau diesen Zeigezustand
   zurueck — „BRICHT: Zeigezustand --gefahr des heutigen .knopf-zeile wird
   nicht uebernommen, wo er bleibt: --grund-tief" —, ADR-0078 (Tabelle Zeile
   12) macht es verbindlich, und der Fokusrahmen steht dort seither als
   `outline: 2px solid var(--verein)` und nicht als Schriftfarbe. `--gefahr`
   hat damit im Blatt keinen Verwender mehr; das TOKEN bleibt stehen, weil es
   die Meldungsstufe „Fehler" gegen „Hinweis" abgrenzt (120_farbe.php misst
   beide Werte und ihren Abstand) und weil Rot Hauptaktion UND Gefahr ist.

   DER KOMMENTAR LAEUFT HIER WEITER UND SCHLIESST ERST UNTEN — 10.09.2026.
   Hier stand eine Kommentar-ENDMARKE, und die neun Zeilen darunter standen damit
   AUSSERHALB jedes Kommentars. Ein CSS-Parser liest einen solchen Block als
   Waehler-Vorspann bis zur naechsten `{` und verwirft die ganze Regel:
   `.meldung-wort { font-weight: 600 }` gab es im Blatt nicht mehr, gemessen
   ueber das CSSOM (Chromium 141, ueber http://): gerechnetes font-weight 400
   statt 600 an allen vier Meldungswoertern. Der Fehler war unsichtbar, weil
   `ohne_kommentare()` in tests/rahmen.php nur vollstaendige Kommentar-PAARE
   entfernt (Anfangs- und Endmarke zusammen) — der
   verwaiste Block blieb stehen und wanderte in den Waehler-Teil, wo die
   Zusicherung ihn weiter fand.

   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 ---------- */

/* ---------------------------------------------------------------------------
   DIE KOLONNE — ein Bauteil fuer jede Liste (ADR-0078, Scheibe B; Lieferung
   08.09.2026, BAUTEILE.md „Liste als Tabelle (.liste) und Huelle (.listenlauf)").

   JEDE `table.liste` STEHT IN EINER HUELLE `.listenlauf` (Markup: 72 Tabellen,
   aus `grep -rn 'class="liste' kern/ module/` abgeleitet, 09.09.2026). Die
   Huelle traegt den Abstand, den die Tabelle bis dahin trug (`margin:
   var(--abstand) 0`), und `position: relative`: Der Kopf der Handlungsspalte
   fuehrt `.nur-lesbar`, ein absolut gesetztes 1-px-Element — ohne einen
   positionierten Vorfahren in der Huelle landet es ausserhalb des
   Scrollbereichs und dehnt die Seite (gemessen von Design am Handy: 631 statt
   390 px). `min-width: 0` an der Huelle, damit sie als Flex-Posten schrumpfen
   und schieben kann statt die Seite zu dehnen.

   KOPFZEILE 44 PX, 11 PX VERSALIEN, --karte: TOKENS.md „Kopfzeile Kolonne 44
   (hergeleitet: Treffflaeche)", „Spaltenkopf 11 px, 600, Versalien, Laufweite
   .06em, --tinte-leise". Bis zum 09.09.2026 stand der Kopf auf --grund-tief mit
   --grad-klein; die Reserve --tinte-leise auf --karte ist groesser als auf
   --grund-tief, die alte Untergrenze (13 px wegen 4,74) haengt an der alten
   Flaeche. `vertical-align: middle` am Kopf ist hergeleitet: Der Sortierverweis
   fuellt die Zelle (`.listensort`, display:flex, 44 hoch) — ein Kopf ohne
   Verweis soll dasselbe Bild geben.

   ZELLEN 14 PX, INNENABSTAND 4/12, MITTIG (TOKENS.md „Zelle 14 px", „Zellen-
   innenabstand 12 waagrecht, 4 senkrecht"; BAUTEILE.md „Zeilen … Innenabstand
   4/12, Linie unten 1 px --linie, letzte Zeile ohne"). Die Zeilenhoehe (52 oder
   60) setzt jede benannte Liste selbst — TOKENS.md „gewaehlt": 60 traegt zwei
   Zeilen (Zeugwart, Notenarchiv), 52 eine Zeile plus Knopf 44 + 2 x 4
   (Vereinsbuch). Eine Liste ohne Vorgabe bekommt keine Hoehe und keine
   Mindestbreite; ist sie breiter als ihre Huelle, schiebt die Huelle.
   --------------------------------------------------------------------------- */
.liste { width: 100%; border-collapse: collapse; margin: 0; }
.listenlauf { position: relative; margin: var(--abstand) 0; min-width: 0; overflow-x: auto; overflow-y: hidden; }
.liste th, .liste td {
  text-align: left;
  border-bottom: 1px solid var(--linie);
}
.liste td {
  padding: 4px 12px;
  font-size: 14px;
  vertical-align: middle;
}
.liste th {
  height: 44px;
  padding: 0 12px;
  font-family: var(--schrift-text);
  font-size: 11px;
  font-weight: 600;
  letter-spacing: .06em;
  text-transform: uppercase;
  color: var(--tinte-leise);
  background: var(--karte);
  white-space: nowrap;
  vertical-align: middle;
}
.liste tbody tr:last-child td { border-bottom: 0; }
/* ---------------------------------------------------------------------------
   DIE GRUPPENZEILE EINER LISTE — der Baustein steht seit dem 10.09.2026 EINMAL
   da und nicht an einer Karte.

   HERGELEITET UND NICHT GEDEUTET (ADR-0078, Entscheidung Punkte 4 und 5): Das
   Bauteil gibt es seit Scheibe C an `.karte-stimmen tr.gruppe th` — 56 hoch,
   --grund, --linie-stark oben und unten, 15 px/600 in --tinte, KEINE Versalien
   (ADR-0078, Nachtrag 09.09.2026 mittags, Punkt 1). Seine Masse stehen hier
   Zeile fuer Zeile; die Karte darunter behaelt nur noch, was sie DAZU hat.

   WAS DIESE REGEL AUSDRUECKLICH NICHT UEBERNIMMT: die farbige Kante
   (`box-shadow: inset 3px 0 0 var(--verein)`). ADR-0030, Nachtrag 21.08.2026:
   „In der Anwendung gibt es genau eine 3 px starke farbige Kante an einer
   Karte … Sobald eine zweite Sorte Karte eine traegt, ist die Kante keine
   Marke mehr, sondern Dekor." Der Nachtrag zu ADR-0078 laesst sie fuer die
   Stimmenkarte zu und fuer sie allein; sie bleibt deshalb unten stehen.

   DER ANLASS, gemessen an der Kaskade und nicht am Bild: Die Gruppenzeile der
   Karte „Ausgabe & Beschriftung" (module/notenarchiv/seiten/mappen.php) trug
   keine Klasse. Damit griff allein `.liste th` darueber — 44 px, 11 px,
   --tinte-leise auf --karte —, also GENAU DIESELBE REGEL wie die
   Spaltenkopfzeile unmittelbar darueber. Zwei Zeilen verschiedener Bedeutung
   sahen gleich aus, und keine von beiden hob sich von den weissen Datenzeilen
   ab. (Der Vorgaenger hat dasselbe getan — `table.liste tr.gruppen-zeile th`
   gleicht bei ihm `table.liste thead th`; bei ihm ist aber BEIDES getoent,
   waehrend hier beides weiss ist. Dieselbe Entscheidung, anderes Ergebnis.)

   DIE MENGE IST ABGELEITET UND NICHT AUFGEZAEHLT: jede Gruppenzeile in einer
   Liste. Heute sind es zwei (Stueckseite, Mappenseite); die dritte bekommt die
   Form, ohne dass jemand daran denken muss.
   --------------------------------------------------------------------------- */
.liste tr.gruppe th {
  display: table-cell;
  height: 56px;
  padding: 0 8px 0 16px;
  background: var(--grund);
  border-top: 1px solid var(--linie-stark);
  border-bottom: 1px solid var(--linie-stark);
  text-align: left;
  font-family: var(--schrift-text);
  font-size: 15px;
  font-weight: 600;
  letter-spacing: 0;
  text-transform: none;
  color: var(--tinte);
  white-space: normal;
}
/*
 * ZEILE BEIM ZEIGEN: --grund-tief auf der weissen Liste (Anweisung Vereinsbuch
 * Abschnitt 5, Uebersicht Punkt 2). :active fuer den Finger — :hover allein
 * gibt es am Handy nicht. Die Zeile wird keine Verknuepfung; nur die Flaeche
 * wechselt. Betreiber 31.08.2026, am Design-Schirm: durchgaengig, auch mobil.
 */
.liste tbody tr:hover td,
.liste tbody tr:active td {
  background: var(--grund-tief);
}
.spalte-aktionen { width: 1%; white-space: nowrap; }

/* ... AUSSER SIE TRAEGT EIN FORMULAR — 08.09.2026, UND DAS GILT IN JEDER BREITE.
   ---------------------------------------------------------------------------
   `width: 1%` und `white-space: nowrap` in der Zeile darueber sind fuer
   GEZEICHNETE MARKEN gebaut: Die Spalte soll so schmal wie moeglich sein, und
   die zwei Zeichen sollen nicht untereinander rutschen.

   FUER EIN FORMULAR WIDERSPRECHEN SICH DIE BEIDEN. `width: 1%` zieht die
   Spalte schmal, `nowrap` verbietet dem Text darin jeden Umbruch — und der
   `schreibhinweis` ist laufender Text. Gemessen am 08.09.2026 an
   kern/seiten/konto.php, Karte „Deine Einwilligungen":

     bei 1280 px   Hinweis 465 px breit, Inhalt braucht 582 px -> abgeschnitten
                   document.scrollWidth 1353 bei innerWidth 1280
                   — DIE GANZE SEITE SCHIEBT SICH 73 px NACH RECHTS
     bei  390 px   Hinweis 332 px breit, Inhalt braucht 582 px -> abgeschnitten

   Auf dem Schirm stand: „Dieser Schritt schreibt: Er haelt deine Zustimmung
   mit Datum fest. D" — mitten im Wort zu Ende.

   DAS IST NICHT NUR HAESSLICH, ES NIMMT ADR-0024 SEINEN GEGENSTAND: „Zeigen,
   was ein Klick schreibt" verlangt, dass der Hinweis DASTEHT. Ein Hinweis, der
   nach zwei Dritteln abgeschnitten ist, nennt nicht mehr, was er schreibt —
   und 060_bedienkonzept.php kann das nicht sehen, weil es den Text im Markup
   findet und nicht auf dem Schirm.

   ES IST DERSELBE FEHLER WIE IM STAPEL WEITER UNTEN, nur eine Regel frueher:
   eine Vorgabe fuer Zeichen, angewandt auf ein Formular. Deshalb steht der
   Waehler hier ausserhalb jedes @media-Blocks — der Widerspruch haengt an der
   Zelle und nicht an der Breite.

   ZWEI FUNDSTELLEN, abgeleitet in tests/faelle/060_bedienkonzept.php und nicht
   aufgezaehlt. Gegenprobe ueber alle 72 Vorschauseiten bei 1280 UND bei echten
   390 px: ausser diesen Zellen bewegt sich nichts. */
.spalte-aktionen:has(form) { width: auto; white-space: normal; }

/* ---------------------------------------------------------------------------
   DIE ZEILENAKTIONEN SIND EINE ZEILE IN DER RECHTEN OBEREN ECKE, 9 PX
   AUSEINANDER — IN JEDER BREITE.

   ANGEORDNET vom Betreiber am 05.09.2026, in zwei Antworten desselben
   Durchgangs: „9px aber in der rechten oberen Ecke!" und „mit Stift und
   Papierkorb in die Zeile und zeichnen lassen". Festgehalten in ADR-0024,
   Nachtrag vom 05.09.2026 (nachts). Der Nachtrag vom 02.09.2026 („immer an
   der selben Stelle in der Box … in der rechten Ecke") gilt weiter; er hat
   jetzt auch eine HOEHE.

   DIE 9 PX SIND KEINE NEUE ZAHL. Das Portal fuehrt sie fuer den Abstand
   benachbarter Bedienelemente schon zweimal: `gap: 9px` zwischen Zeichen und
   Name im Kopfband und dieselbe Zahl in `.knopf-haupt` / `.knopf-still`
   zwischen Zeichen und Wort.

   ────────────────────────────────────────────────────────────────────────
   HIER STAND BIS ZUM 05.09.2026 `.spalte-aktionen > .handlung { display:
   flex; margin-left: auto; margin-right: 0 }`, UND GENAU DIESE REGEL WAR DER
   ANLASS. Sie machte aus dem Knopf einen BLOCK; ein zweites Zeichen daneben
   rueckte darunter — gemessen am 05.09.2026 (chromium 1194 ueber das
   Fernsteuerungsprotokoll): Zellenhoehe 33 → 77 px bei echten 390 px, 42 → 86
   px bei 1280 px. Solange sie steht, gibt es keine Zeile.

   WARUM DER ORT JETZT AN DER ZELLE HAENGT UND NICHT MEHR AM KNOPFNAMEN, und
   das ist der Punkt, an dem diese Regel vom Wortlaut des Nachtrags abweicht:
   Er sagt „der Ort haengt weiterhin am Knopfnamen `.handlung`". Eine Gruppe
   laesst sich am einzelnen Knopf nicht ausrichten — was ausgerichtet wird,
   ist die Zeile, und die gehoert der Zelle. Der Satz, der die Sache traegt,
   gilt unveraendert und sogar weiter: „Wer eine Zeilenaktion baut, bekommt
   Ort und Abstand geschenkt" — jetzt fuer JEDES Kind der Aktionszelle und
   nicht nur fuer eines, das `.handlung` heisst. DEM BETREIBER GEMELDET.

   `display: flex` AN DER ZELLE IST GEMESSEN UND VERWORFEN, NICHT UEBERSEHEN.
   Ein `<td>`, das kein `table-cell` mehr ist, bekommt vom Browser eine
   ANONYME Tabellenzelle darum. Gemessen am 05.09.2026 bei 1280 px an
   zeugwart-bestand: die Aktionsspalte sprang von 75 auf 134 px und zog die
   ganze Tabelle neu (462 → 433 px in der ersten Spalte), `width: 1%` galt
   danach dem INNEREN Kasten (16 px) statt der Zelle, der Stift schrumpfte von
   44 auf 24 px und die Knoepfe standen bei x = 1036 AUSSERHALB ihrer eigenen
   Zelle. Und `border-bottom` von `.liste td` waere mitgewandert — die
   Trennlinie der letzten Spalte haette in jeder Zeile einen Sprung. UNTER
   700 px ist das kein Thema: dort ist die Zelle ohnehin `display: block`.
   ────────────────────────────────────────────────────────────────────────

   `text-align: right` AN `.liste td.spalte-aktionen` UND NICHT AN
   `.spalte-aktionen`: Der zweite Waehler verliert gegen `.liste th, .liste td
   { text-align: left }` (0,1,0 gegen 0,1,1). Das stand seit dem 02.09.2026
   als Befund daneben — „eine Regel, die dasteht und nichts tut" — und ist
   hier behoben statt weiter vermerkt. Dass die Zeile trotzdem rechts AUSSAH,
   lag an `width: 1%`; im schmalen Umbruch, wo die Zelle die ganze
   Kartenbreite hat, half das nichts.

   DER ABSTAND KOMMT AUS `margin-left` UND NICHT AUS `gap`: `gap` wirkt nur im
   Flex- oder Rasterbehaelter, und den kann die Zelle aus dem Grund oben nicht
   werden. `margin-left` an jedem Geschwister ausser dem ersten gibt dieselbe
   Zahl in beiden Breiten, mit einer Regel.

   UND DIE DREI REGELN TRAGEN `.liste td` MIT, OBWOHL `.spalte-aktionen > *`
   KUERZER WAERE — DAS IST GEMESSEN UND KEIN GESCHMACK. Ein `*` zaehlt in der
   Spezifitaet NULL: `.spalte-aktionen > * + *` ist (0,1,0) und damit
   gleichauf mit `.handlung { margin: 0 auto }`, das WEITER UNTEN im Stilblatt
   steht und deshalb gewinnt. Gemessen am 05.09.2026 im Browser: die drei
   Zeichen des Zeugwarts standen bei x = 1120, 1164, 1208 — Abstand NULL, die
   Regel stand da und tat nichts. Mit `.liste td` davor ist sie (0,2,1) und
   der Abstand 9 px. Es ist dieselbe Klasse wie beim `text-align` darueber,
   einen Absatz spaeter und mit einem anderen Gegner.

   `font-size: 0` AN DER ZELLE, UND ES IST KEIN SCHMUCK: Zwischen zwei
   Inline-Elementen steht der Zeilenumbruch des Markups als WORTZWISCHENRAUM.
   Gemessen am 05.09.2026 bei 1280 px: 3 px zwischen den zwei Zeichenknoepfen
   des Zeugwarts. Ohne diese Zeile waeren es 12 statt 9, und die Zahl haenge
   an der Schrift des Geraets — genau die Sorte Begruendung, die bricht,
   sobald sich eine Nebenbedingung aendert.

   SEINE REICHWEITE IST BEGRENZT UND NACHGEZAEHLT: Geerbt wird die Null nur
   von Kindern OHNE eigene Schriftgroesse. `.knopf-zeile` (17px),
   `.knopf-still` (font-Kurzschrift) und `.nebensache` (--grad-klein) bringen
   ihre eigene mit; `.handlung` traegt keinen Text. Bleibt das `<form>` in
   zwei Aktionszellen (kern/seiten/konto.php, module/notenarchiv/…/bestand.php)
   — es steht darum in der Regel darunter.

   DAS `<form>` IST KEINE ZEILENAKTION. Es ist ein Formular mit einem
   Schreibhinweis, das in einer Aktionsspalte steht; `text-align: right`
   rueckte seinen Satz nach rechts, die Null seine Schrift auf null. Beides
   wird zurueckgenommen — und zwar benannt, damit niemand die Ausnahme fuer
   einen Fehler haelt und sie wegraeumt.
   --------------------------------------------------------------------------- */
.liste td.spalte-aktionen {
  text-align: right;
  font-size: 0;
  /* 4/8 statt 4/12: TOKENS.md „8 px in td.spalte-aktionen"; die Handlungs-
     spalte ist n x 44 + (n - 1) x 6 + 2 x 8 breit (174 / 112 / 60). */
  padding: 4px 8px;
  white-space: nowrap;
}
.liste td.spalte-aktionen > * {
  margin-left: 0;
  margin-right: 0;
  vertical-align: middle;
}
.liste td.spalte-aktionen > * + * {
  margin-left: 9px;
}
/* ZWEI ZEICHENKNOEPFE NEBENEINANDER STEHEN 6 PX AUSEINANDER — ADR-0078
   (08.09.2026), Punkt 2; BAUTEILE.md Zeilenaktionen: „Abstand zwischen
   Knoepfen 6 px", TOKENS.md „Abstand Zeilenknoepfe 6 px". Die 9 darueber
   bleiben fuer jedes andere Kind der Zelle (ein Wortknopf neben einem Stift).
   (0,3,1) gegen (0,2,1): Diese Regel gewinnt, wo beide zutreffen.

   GEMESSEN AN DER GELIEFERTEN SEITE: 8,8 px, nicht 6 — die Regel dort setzt
   ebenfalls 6, und die 2,8 sind ein Wortzwischenraum, weil das Zusatzblatt der
   Lieferung die Zelle wieder auf 14 px Schrift stellt; der Kern haelt sie auf
   `font-size: 0` (oben), also stehen hier 6. Gemeldet. */
.liste td.spalte-aktionen .handlung + .handlung {
  margin-left: 6px;
}
.liste td.spalte-aktionen > form {
  text-align: left;
  font-size: var(--grad-text);
}

/* 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; }

/* ---------------------------------------------------------------------------
   DIE BEZEICHNUNG DES GEGENSTANDES IN EINER LISTENZEILE — 06.09.2026.

   ANGEORDNET vom Betreiber am 06.09.2026 am Handy, im Wortlaut
   (docs/lieferung/betrieb-am-bild-2026-09-06.md): „Dann in allen Ansichten die
   Bezeichnung des Gegenstandes Stück z. b. fett und deutlich groesser schreiben
   (Vereinsbuch ist besser, duerfte aber groesser sein." Und zum Notenarchiv
   noch einmal einzeln: „der Titel ist zu klein und bitte fett."

   WAS DIESE KLASSE MEINT: die EINE Angabe, an der ein Mensch die Zeile
   wiedererkennt — der Name des Mitglieds, die Bezeichnung des Gegenstandes, der
   Titel des Stuecks, der Wortlaut des Beschlusses. NICHT jede Zelle, nicht der
   Spaltenkopf, nicht ein Name mitten in einem Satz.

   DESHALB EINE EIGENE KLASSE UND NICHT `.name` DARUEBER: `.name` traegt im
   Bestand ZWEI Rollen. Gemessen am 06.09.2026 ueber
   `grep -rn 'class="name\b' kern/ module/ --include=*.php`: 42 Fundstellen.
   Ein Teil davon ist die fuehrende Angabe einer Listenzeile — der andere steht
   MITTEN IN EINEM SATZ, in kern/ansicht/kontaktfeld.php (dreimal),
   statutenfeld.php, kern/seiten/konto.php, statuten.php, import.php,
   verwaltung.php, meinbereich.php und datenbericht.php: „Heute steht hier
   <span class=name>…</span>." Ein Fliesstext mit einem 20-px-Wort darin waere
   keine Hervorhebung, sondern ein Bruch.

   DIE ZWEI MENGEN SIND NICHT MECHANISCH ZU TRENNEN, und deshalb wird `.name`
   nicht umgewidmet, sondern eine zweite Klasse danebengesetzt: Welche der 42
   Stellen eine fuehrende Angabe ist, entscheidet der Satz drumherum und keine
   Regel, die ein Rechner ziehen koennte.

   DIE ZWEI ZAHLEN, BEIDE MIT IHRER HERKUNFT UND KEINE DAVON GEWAEHLT:

     font-weight: 650   ist das Gewicht, das der Vereinsbuchname in der Karte
                        schon traegt (`table.liste.vereinsbuch td[data-titel=
                        "Name"] .name`, weiter unten in dieser Datei). Der
                        Betreiber nennt das Vereinsbuch als Massstab; das
                        Gewicht wird deshalb UEBERNOMMEN und nicht neu gesetzt.

     font-size: var(--grad-gross)   sind 20 px und der NAECHSTE vorhandene Grad
                        ueber dem Vereinsbuchnamen (1.05rem = 16,8 px, gemessen
                        am 06.09.2026 im Browser). „duerfte aber groesser sein"
                        ist damit eingeloest, ohne dass eine neue Zahl in den
                        Tokensatz kommt: --grad-gross fuehrt das Portal schon an
                        drei Stellen, gemessen am 06.09.2026 — `.fenster h2`,
                        `.leerzustand p` und `.streckenkopf-titel`.

   WARUM SIE NACH `.name` STEHT UND NICHT DAVOR: Beide Waehler haben dieselbe
   Spezifitaet (0,1,0). Wo ein Element `class="name zeilentitel"` traegt,
   entscheidet die Reihenfolge in dieser Datei — und `font-weight: 500` aus
   `.name` soll fallen. Das ist eine Bauart und keine Vorliebe: Wer die zwei
   Regeln vertauscht, dreht die Wirkung um, ohne dass etwas rot wird.

   `display: block` DAMIT DIE ANGABE IHRE ZEILE HAT. Im schmalen Umbruch wird
   die Tabellenzeile zur Karte, und dort stehen Marken und Beisaetze hinter der
   Bezeichnung; ohne den Block liefe der Beisatz in derselben Zeile weiter und
   die 20 px zoegen ihn mit.
   --------------------------------------------------------------------------- */
/* 15 PX / 600 SEIT DEM 09.09.2026 — ADR-0078 (Scheibe B), TOKENS.md „Fuehrende
   Angabe 15 px, 600", BAUTEILE.md „Zeilentitel". GEMESSEN an den drei
   gelieferten Seiten bei 390/834/1280: 15 px, Gewicht 600, Zeilenhoehe 1.25
   (die Modulblaetter der Lieferung nennen 16/650 und 17/650, das Listenblatt
   dahinter setzt 15/600 mit Vorrang — das Bild zeigt 15/600). Bis dahin
   --grad-gross (20 px) und 650 nach der Anordnung vom 06.09.2026; die
   Anordnung „fett und deutlich groesser" ist mit der Lieferung am Bild
   entschieden: groesser als die Zelle (14), fett (600), aber eine Zeile. */
.zeilentitel {
  display: block;
  font-size: 15px;
  font-weight: 600;
  line-height: 1.25;
}

.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.
   --------------------------------------------------------------------------- */

/* ---------------------------------------------------------------------------
   AUFGEHOBEN AM 29.08.2026 — ZWEI BLOCKELEMENTE STATT DES ERZWUNGENEN UMBRUCHS.

   HIER STAND, und der Wortlaut bleibt daneben stehen:

       .zeilensatz strong::before { content: "\A"; white-space: pre; }

   Sie erzwang den Umbruch VOR dem Wort, weil das Markup nur EIN Element haben
   durfte. Design hat diese Beschraenkung am 29.08.2026 fuer diesen einen Fall
   aufgehoben (Issue #56, Punkt 2): "Zwei Blockelemente statt eines span. Der
   Zwischenraum ist die 2, die die Anweisung ohnehin nannte — sie greift jetzt,
   weil es zwei Elemente gibt."

   SIE WIRD GESTRICHEN UND NICHT STEHENGELASSEN, und das ist gemessen: Das
   zweite `.zeilensatz` ist ein Block und bricht selbst um. Das `::before`
   setzte darin ein ZUSAETZLICHES Zeilenumbruchzeichen und damit eine leere
   Zeile vor dem Wort — eine Regel, die ihre Wirkung verloren hat, wird nicht
   zur Zierde, sondern zum Fehler.

   IHR ANLASS IST NICHT WEGGEFALLEN, ER IST ANDERS GELOEST: Ohne sie hing das
   Bild an der zufaelligen Umbruchstelle — bei 500 px stand "Stattdessen:"
   zufaellig am Zeilenanfang, bei anderen Breiten mitten in der Zeile. Ein
   eigener Block steht in JEDER Breite an der Kante; das leistet mehr als der
   erzwungene Umbruch, nicht weniger.

   DER ZWEITE TON IST DER TEIL, DER DIE TRENNUNG ERST TRAEGT (Design,
   29.08.2026): "Zwei gleich laute Saetze untereinander sind zwei Saetze, aber
   noch keine Rangfolge." --tinte-leise sagt "Nebensache", --tinte sagt "das
   hier gilt".

   `.zeilensatz` STEHT WEITER AM ZWEITEN ELEMENT und wird nicht ersetzt: Der
   Block, die 2 px Abstand, der Schriftgrad und --satzbreite gelten fuer beide
   Saetze gleich. Was sich unterscheidet, ist genau EINE Eigenschaft — und
   deshalb steht hier genau eine Zeile.
   --------------------------------------------------------------------------- */
.zeilensatz-stattdessen { color: var(--tinte); }

.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); }

/* MARKEN IN ZELLEN SIND TEXT MIT BEISTRICH, KEIN ETIKETT — ADR-0078 (Scheibe B),
   BAUTEILE.md „Liste als Tabelle": „Marken in Zellen (.marke) sind Text mit
   Beistrich, kein Etikett — Faecher, Aemter, Instrumente." Betreiber am Bild,
   08.09.2026: „Ein Fach ist eine Angabe, kein Etikett."

   DIE REGEL STEHT NICHT HIER, SONDERN AN DEN LISTEN, DIE DIE LIEFERUNG ZEIGT:
   Faecher im Notenarchiv-Bestand (Abschnitt „Die Kolonnen der
   Modul-Bestandslisten", `table.liste[data-liste="notenarchiv/bestand"] td
   .marke`), Aemter und Instrumente im Vereinsbuch (`.vereinsbuch-amt`, dort
   Text mit Beistrich ueber `::after`). Genau so scopt die Lieferung sie —
   `.na2 table.liste td .marke` und `.vb2 .vereinsbuch-amt` — und nicht auf
   jede Zelle des Portals. Bis zum 09.09.2026 stand hier `table.liste td
   .marke:not(.marke-aktiv) { display: inline … }` ohne Schluessel; gemessen
   ueber alle Vorschauseiten bei 1280 px traf sie 149 Marken auf 21 Seiten,
   davon 131 auf 18 Seiten, die die Lieferung nicht zeigt — Zustandsworte wie
   „uebernommen", „abgelehnt", „Luecke" (Konto, Einrichtung, Rollen), die kein
   Fach sind und als Fliesstext in den Wert liefen. Was die Lieferung nicht
   zeigt, ist eine Nachfrage und keine Deutung (ADR-0078, „Was dieses ADR
   NICHT entscheidet"); ausserhalb der zwei Listen bleibt `.marke` das Etikett
   von vorher. 060_bedienkonzept.php haelt es: kein `.marke`-Text ohne
   Listenschluessel. Die Ausnahmen: „Vorschlag" traegt `.marke.marke-aktiv`
   (Messing, Vereinsbuch-Blatt), „ausgemustert" steht an der Zeugwart-Liste. */

/* 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); }

/* DER GEPFLEGTE TEXT DES VEREINS HEBT SICH VOM PORTALTEXT AB — 11.09.2026.
   ---------------------------------------------------------------------------
   ENTSCHEIDUNG DES BETREIBERS, im Wortlaut: "Gestaltungsfrage: Beschreibung
   vom Portaltext abheben. Nicht verstecken. Keine Angabenliste auf dieser
   Seite."

   DER ANLASS, gemessen an module/notenarchiv/seiten/mappen.php: In der Karte
   "Inhalt" stehen zwei .hinweistext-Absaetze untereinander. Der obere ist
   Portaltext aus dem Quelltext ("Was in ... liegt, in der Reihenfolge der
   Mappe"), der untere ist die vom VEREIN gepflegte `beschreibung` der Mappe.
   Gleiche Klasse, gleicher Ton, gleicher Grad — niemand sah, welcher Satz von
   wem stammt.

   DAS MITTEL IST NICHT NEU, ES IST DAS DER GESCHWISTERREGEL
   `.zeilensatz-stattdessen` ein Stueck weiter oben. Ihr Begruendungsblock
   traegt den Wortlaut der Gestaltung vom 29.08.2026: "Zwei gleich laute
   Saetze untereinander sind zwei Saetze, aber noch keine Rangfolge."
   --tinte-leise sagt "Nebensache", --tinte sagt "das hier gilt". Und derselbe
   Block sagt, wie weit der Eingriff geht: "Was sich unterscheidet, ist genau
   EINE Eigenschaft — und deshalb steht hier genau eine Zeile." Diese Regel
   haelt sich daran.

   DASS `.hinweistext` DEN LAUTEN TON TRAGEN DARF, IST SCHON ENTSCHIEDEN:
   `.anmeldeflaeche .hinweistext` fuehrt --tinte seit dem 28.08.2026 unter
   einer benannten Bedingung, zugesichert in tests/faelle/120_farbe.php ("Und
   der Hinweistext ebenso"). Hier kommt kein Ton dazu, der nicht schon an
   dieser Klasse gilt.

   WARUM HINAUF UND NICHT HINUNTER: "Nicht verstecken" steht in seinem Satz.
   Leiser stellen — kleinerer Grad, geringere Deckkraft, eine Klappe — waere
   genau das Verstecken, das er ausgeschlossen hat. Der Portaltext ist der
   stille Satz; abgehoben wird der, den der Verein selbst geschrieben hat.

   KEINE KANTE, KEINE FLAECHE, und das ist kein Geschmack, sondern ADR-0030
   mit seinem Nachtrag vom 21.08.2026: "In der Anwendung gibt es genau eine
   3 px starke farbige Kante an einer Karte." Seine zweite Klausel spricht
   nicht von der Farbe, sondern von der KANTE — "sobald eine zweite Sorte
   Karte eine traegt, ist die Kante keine Marke mehr, sondern Dekor". Ein
   Streifen links am Absatz waere genau diese zweite Sorte.

   DIE REICHWEITE STEHT NICHT HIER, SONDERN IN DER ZUSICHERUNG:
   tests/faelle/531_mappenpflege.php erhebt sie aus dem Markup — jeder
   .hinweistext, dessen sichtbarer Inhalt nichts als eine Ausgabe ist und der
   ein Feld `beschreibung`/`beschriftung` zeigt, muss diese Klasse tragen. Wer
   hier eine Liste von Seiten hinschriebe, waere am Tag der naechsten Stelle
   gruen und falsch (.claude/rules/00-jede-regel-mit-anlass.md, 07.09.2026).
   --------------------------------------------------------------------------- */
.hinweistext-gepflegt { color: var(--tinte); }

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

.formular { display: flex; flex-direction: column; gap: 4px; }
/* ---------------------------------------------------------------------------
   HIER STAND `.formular-schmal { max-width: 22rem; }` — GEFALLEN AM
   02.09.2026 MIT SEINEM EINZIGEN VERWENDER.

   DER VERWENDER war `<form class="formular formular-schmal">` je Parameter in
   kern/seiten/statuten.php. Am 02.09.2026 sind die sechs offenen Formulare in
   EIN Fenster gezogen (ADR-0024, Nachtrag vom 02.09.2026: geaendert wird ueber
   den Stift). Die Hoechstbreite setzt dort das Fenster, und zwei Begrenzungen
   uebereinander ergaeben ein Formular, das IM Fenster schmaler steht als das
   Fenster — gemessen an diesem Tag: Fenster 358 px, Formular darin 324 px, bei
   echten 390 px. Die Herleitung steht im Kopf von kern/ansicht/statutenfeld.php.

   DAMIT HATTE `.formular-schmal` NULL VERWENDER — gemessen am 02.09.2026 ueber
   99 Quelldateien. EINE REGEL OHNE VERWENDER IST GRUEN, BEVOR SIE LAEUFT
   (derselbe Befund wie bei `.kartenkopf` am selben Tag, bei `.verwaltung-art`
   und bei den Maskenregeln `amt` und `etikett`, tests/faelle/165_zeichensatz.php).
   Sie stehen zu lassen hiesse, der naechsten Sitzung eine zweite
   Breitenbegrenzung anzubieten, die niemand mehr braucht — und die im Fenster
   falsch waere.

   WER SIE WIEDER BRAUCHT, BAUT SIE MIT IHREM VERWENDER IM SELBEN ZUG. Eine
   Regel auf Vorrat ist keine Vorhaltung, sondern eine Zusicherung ohne
   Gegenstand.

   ZUGESICHERT IN tests/faelle/190_statuten.php: dass der Name in keiner
   Quelldatei und in diesem Blatt mehr vorkommt.
   --------------------------------------------------------------------------- */
/* 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.

   BERICHTIGT AM 17.09.2026: `[type=file]` UND `[type=range]` GIBT ES SEHR WOHL.

   HIER STAND: „`[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." DER ZWEITE HALBSATZ IST
   EINGETRETEN, UND ZWAR AN IHM SELBST.

   NACHGEMESSEN am 17.09.2026 ueber 155 Markup-Dateien unter kern/, module/ und
   oeffentlich/. PHP-Bloecke wurden dafuer neutralisiert: Ein `?>` mitten im Tag
   schneidet jede einzeilige Suche ab — mit diesem Fehler zaehlt dasselbe
   Verfahren 94 Formulare ohne Klasse statt 17.

     type="file"    6 Felder in 6 Dateien   alle 6 in einem `class="formular"`
     type="range"   1 Feld                  in einem `class="formular"`

   DIE REGEL DARUNTER ERREICHT ALSO ALLE SIEBEN. Aufgefallen ist es am Regler:
   `oeffentlich/betrachter.css` nimmt ihn seit dem 10.09.2026 ueber
   `#fenster-blatt input[type="range"]` wieder zurueck — und hat diese
   Berichtigung dort auch bestellt, „in denselben Zug wie dieser Bau".

   WAS HIER NICHT ENTSCHIEDEN WIRD: ob die sechs Dateifelder eine eigene Regel
   wollen. Das ist Sichtbares und liegt beim Betreiber. Hier steht nur, dass die
   Begruendung fuer ihr Fehlen nicht mehr traegt. */
/* UND `.vereinsbuch-beenden` STEHT IN DIESER LISTE, WEIL DIE VORGABE DAS FELD
   MEINT UND NICHT DAS FORMULAR — Betreiber, 17.09.2026: „Darstellung der
   Datumsfelder mit Bug."

   `.vereinsbuch-beenden` ist das einzige Formular des Portals MIT EINEM
   DATUMSFELD, das kein `class="formular"` traegt. Damit hat die Regel darunter
   seine zwei Datumsfelder nie erreicht: keine 44 px Mindesthoehe, kein
   Innenabstand, kein Rand, kein Schriftgrad, keine Breite.

   HIER STAND „das EINZIGE Formular des Portals ohne `class="formular"`" — OHNE
   DEN FILTER, UND SO IST DER SATZ FALSCH. Nachgemessen am 17.09.2026 ueber 155
   Markup-Dateien unter kern/, module/ und oeffentlich/, PHP-Bloecke
   neutralisiert: 183 `<form>`-Tags, davon 166 mit `class="formular"` und 17
   ohne. VON DIESEN 17 FUEHREN GENAU ZWEI EIN `type="date"`, und beide sind
   `.vereinsbuch-beenden`. Die uebrigen 15 in 12 Dateien sind Such-, Filter- und
   Einzelknopf-Formulare: sechsmal `.vereinsbuch-suche` (dreimal mit
   `suchzeile`), je einmal `.kopf-abmelden`, `.menue-austritt`, `.filterzeile`,
   `.ueben-form`, `.favorit-form`, viermal ganz ohne Klasse.

   DER FILTER IST NICHT KOSMETIK: Ohne ihn liest der Naechste, ausserhalb der
   Feldregel stehe nichts mehr, und sieht sich die 15 nicht an. Die Zusicherung
   in tests/faelle/511_datumsfelder.php deckt sie NICHT — sie deckt
   `type="date"` und sonst nichts.

   GEMESSEN AM 17.09.2026 ueber einen frisch gebauten `vorschau/`-Bestand, ueber
   http (php -S, nicht file://), bei ECHTEN 390 px ueber
   Emulation.setDeviceMetricsOverride:

     22 von 204 Datumsfeldern ueber 84 Vorschauseiten    125,3 x 21,3 px
     die uebrigen 182                                      324 x 47   px

   DIE 22 SIND GENAU DIE, DIE `.formular input` NICHT ERREICHT, und alle 22
   stehen in `.vereinsbuch-beenden`. 21,3 px neben einem 44 px hohen Knopf
   „Beenden" — weniger als die Haelfte der Mindesthoehe, die der Kommentar
   darueber als Designs Vorgabe vom 29.08.2026 fuehrt.

   DIE VORGABE NANNTE `.formular` ALS BEISPIEL, IHR GEGENSTAND IST JEDES FELD,
   IN DAS JEMAND SCHREIBT (.claude/rules/00-jede-regel-mit-anlass.md: „Nennt
   meine Regel den Gegenstand — oder ein Beispiel dafuer?"). Hier wird also
   nichts entschieden, sondern eine getroffene Entscheidung auf die Stelle
   angewandt, an der kein Wort sie hinschickte.

   NUR `[type="date"]` UND NICHT `input` PAUSCHAL: In diesem Formular stehen
   ausserdem VIER `input[type="hidden"]` (fs, was, person_id, zuweisung_id). Sie sind `display: none` und nehmen
   heute nichts an; eine Regel, die sie trotzdem trifft, waere eine Wirkung auf
   Vorrat. Kommt ein sichtbares Feld dazu, gehoert es in die Wahlliste — und
   tests/faelle/511_datumsfelder.php wird rot, bis es drinsteht. */
.formular input:not([type="checkbox"]):not([type="radio"]),
.vereinsbuch-beenden input[type="date"],
.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); }

/* ---------- Katalog: geschlossen, bis jemand tippt (Nachtrag ADR-0024, 31.08.2026)
 * Keine native datalist (060). Ohne .js bleibt die Liste sichtbar.
 */
.katalog { position: relative; border: 1px solid var(--linie-stark); border-radius: var(--radius); }
.katalog-suche {
  width: 100%;
  border: none;
  padding: 8px;
  font: inherit;
  border-radius: var(--radius);
  background: transparent;
}
.katalog-liste {
  list-style: none;
  margin: 0;
  padding: 0;
  max-height: 12rem;
  overflow-y: auto;
}
.katalog.js .katalog-liste { display: none; }
.katalog.js.offen .katalog-liste {
  display: block;
  position: absolute;
  left: 0;
  right: 0;
  top: 100%;
  z-index: 6;
  background: var(--karte);
  border: 1px solid var(--linie-stark);
  border-radius: 0 0 var(--radius) var(--radius);
}
/* 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 .katalog-vorschlag {
  display: block;
  width: 100%;
  padding: 8px;
  border: 0;
  background: transparent;
  font: inherit;
  font-size: 1rem;
  color: inherit;
  text-align: left;
  cursor: pointer;
}
.katalog-liste .katalog-vorschlag { transition: background var(--dauer); }
.katalog-liste .katalog-vorschlag:hover { background: var(--grund-tief); }
.katalog-liste li[hidden] { display: none; }
/*
 * HÄKCHEN-KATALOG: GEWÄHLTE ZEILEN BLEIBEN SICHTBAR, AUCH WENN DIE LISTE ZU IST.
 *
 * Radio und `.katalog-vorschlag` füllen das Suchfeld (bedienung.js). Ein
 * Häkchen kann das nicht allein — mehrere sind wählbar (ADR-0081 Punkt 2),
 * und der Filtertext wäre dann die Auswahl. Sichtbar war ein leeres Feld
 * „Name suchen…", die Häkchen lagen in `.katalog.js .katalog-liste { display:
 * none }`. Betreiber 13.09.2026 am Schirm: der Name bleibt nach dem Anhaken
 * nicht im Feld.
 *
 * NUR SICHTBARKEIT, KEIN RAND: Die geschlossene Liste steht im Fluss, nicht
 * als Overlay, und zeigt nur die angehakten Zeilen. Tippen öffnet weiter die
 * ganze Liste (`.offen` oben).
 */
.katalog.js:not(.offen):has(input[type="checkbox"]:checked) .katalog-liste {
  display: block;
  position: static;
  max-height: none;
  overflow: visible;
}
.katalog.js:not(.offen) .katalog-liste li:has(input[type="checkbox"]:not(:checked)) {
  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;
}
/*
 * DAS BREITE FENSTER — Lieferung vom 09.09.2026, `stil.css` Z. 7615
 * (`.na2-stueck .fenster-breit { max-width: 640px; }`). Verwender sind die
 * zwei Fenster der Stueckseite: die Recherche (neun Quellenknoepfe in einer
 * umbrechenden Reihe, darunter die Feldpaare der Klangbeispiele) und das
 * Klangbeispiel (eine 16:9-Flaeche, in der ein Player steht).
 *
 * WARUM SIE HIER STEHT UND NICHT AM MODUL: `.fenster` ist ein Baustein des
 * Kerns (ADR-0024, „Bausteine genau einmal vom Kern"), und eine zweite Breite
 * desselben Bausteins gehoert daneben. Die Lieferung setzt den Waehler auf die
 * Seite (`.na2-stueck`), weil ihr Nachbaublatt je Seite gebaut ist; hier gibt
 * es das Blatt einmal.
 *
 * 40rem UND NICHT 640px: `.fenster` darueber traegt 32rem, und die
 * Wurzelschrift dieses Portals ist 16 px — im Browser gemessen am 10.09.2026,
 * nicht angenommen. 40rem sind damit ziffernweise die 640 px der Lieferung,
 * in der Einheit des Bestands.
 *
 * GEMESSEN, WAS OHNE SIE GESCHAH, und deshalb steht hier eine Zahl: Beide
 * Fenster trugen die Klasse seit dem 09.09.2026 im Markup, und im Stilblatt
 * gab es sie nicht — `dialog.fenster.fenster-breit` mass 512 px gegen 640 px
 * in der gerenderten Lieferung, bei 1280 px ueber das Fernsteuerungsprotokoll.
 * EIN KLASSENNAME OHNE REGEL AENDERT NICHTS UND SIEHT AUS WIE EINE
 * ENTSCHEIDUNG; tests/faelle/060_bedienkonzept.php misst seitdem jede Klasse
 * an jedem <dialog> gegen dieses Blatt.
 *
 * KEINE EIGENE SCHMALREGEL: `width: calc(100% - 2 * var(--abstand))` steht
 * schon an `.fenster` und gilt weiter — unter 40rem ist das breite Fenster
 * genauso breit wie jedes andere. Die Lieferung schreibt dafuer eine zweite
 * Regel (`width: calc(100vw - 16px); max-width: none`), weil ihr Blatt die
 * Grundregel nicht hat.
 */
.fenster-breit { max-width: 40rem; }
/*
 * Ohne JavaScript bleibt [open] nicht-modal. Die klebende Kopfzeile der
 * Vereinsbuch-Liste hat z-index 1 und ginge sonst über das Fenster
 * (gemessen 31.08.2026). Mit showModal liegt es in der obersten Schicht;
 * diese Regel ist der Weg ohne Skript.
 */
.fenster[open] {
  position: fixed;
  z-index: 40;
  inset: 0;
  margin: auto;
}
/*
 * UND ES MUSS AUCH GANZ HINEINPASSEN. Gemessen am 02.09.2026 (chromium 1194
 * ueber das Fernsteuerungsprotokoll, echte 390 x 844, Skriptausfuehrung
 * ausgeschaltet): Das Statutenfenster auf dem Register mit vier Formularen ist
 * 1594 px hoch, steht bei top -375 und traegt weder max-height noch overflow.
 * `position: fixed` heisst, dass Scrollen der Seite es NICHT bewegt — die
 * Reiterleiste oben und der Speichern-Knopf unten sind unerreichbar. Bei
 * 1280 x 900 dasselbe: 1399 px hoch, top -249.
 *
 * MIT SKRIPT GIBT ES DAS NICHT: showModal() legt das Fenster in die oberste
 * Schicht, und der Browser setzt dort von sich aus
 * `max-height: calc(100% - 38px)` und `overflow: auto` (gemessen, gleiche
 * Sitzung: 806 px hoch, innen scrollbar). Die Regel hier holt genau das fuer
 * den Weg OHNE Skript nach.
 *
 * `:not(:modal)` UND NICHT AN `.fenster[open]` SELBST, und der Grund ist eine
 * Messung und keine Vorsicht: An `[open]` haenge ich max-height auch an jedes
 * modale Fenster und mache es um 6 px hoeher als heute — eine Aenderung an
 * jedem Fenster des Portals fuer einen Fall, der nur den skriptlosen Weg
 * betrifft. So bleibt das modale Fenster Pixel fuer Pixel, was es war.
 */
.fenster[open]:not(:modal) {
  max-height: calc(100% - 2 * var(--abstand));
  overflow: auto;
}
.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 bleibt die Liste eine Kolonne und schiebt in ihrer Huelle ----------

   ADR-0078 (08.09.2026), Widerspruch 1: „Unter 700 px ist eine Liste kein
   Stapel, sondern dieselbe Tabelle in `.listenlauf`, waagrecht schiebend;
   Leiste bleibt seitenbreit" — loest ADR-0024, Entscheidung Punkt „Listen
   werden unter 700 px zum Stapel, nicht scrollbar" ab. Grund (Betreiber, am
   Bild): Der Stapel war „unaufgeraeumt"; was der Verein einblendet, steht da,
   die Kolonne bleibt lesbar.

   HIER STANDEN BIS ZUM 09.09.2026 DIE STAPELREGELN — `thead` aus, `tr` als
   Karte, `td[data-titel]::before { content: attr(data-titel) }`, das Raster
   mit der Aktionszelle in der ersten Reihe, die Ausnahmen fuer Formulare und
   die Aktionsspalte. Sie sind gefallen, nicht verschoben; `data-titel` bleibt
   im Markup (Zusicherungen und Vorlesehilfe lesen es).

   NUR DIE KOLONNE SCHIEBT — Betreiber, 08.09.2026: „mobil darf nur der
   Tabelleninhalt zum Scrollen sein. Die Filter und das Suchfeld muessen
   seitenbreit sein." GEMESSEN von Design: Der Inhalt war 818 px breit bei
   390 px Fenster — als Flex-Posten nahm er die Mindestbreite der Tabelle an
   (`min-width: auto`), und der ganze Seitenlauf schob. `min-width: 0` an
   Inhalt, Karte und Huelle bricht die Kette; schieben darf nur die Huelle
   (`overflow-x: auto; overflow-y: hidden`), der Seitenlauf schneidet waagrecht
   ab. Gemessen an der gelieferten Seite bei echten 390 px:
   `document.documentElement.scrollWidth` 390, `.listenlauf.scrollWidth` 721
   (Vereinsbuch), 817 (Zeugwart), 1000 (Notenarchiv).

   DER BLOCK HEISST WEITER `(max-width: 700px)`: Er ist der Block, in dem der
   Kern seit dem 20.08.2026 die Bruchkante der Listen fuehrt; die Lieferung
   schreibt 699 (LIESMICH.md, Bauhinweis 1: Reihenfolge ist Bedeutung, nicht
   die Zahl). */

@media (max-width: 700px) {
  .seitenlauf { overflow-x: hidden; }
  .inhalt { min-width: 0; max-width: 100%; width: 100%; box-sizing: border-box; }
  .karte { min-width: 0; max-width: 100%; }
  .listenlauf { min-width: 0; width: 100%; max-width: 100%; overflow-x: auto; overflow-y: hidden; }
  /* Die Handy-Regeln der Leiste stehen HINTER ihrer Grundregel (Abschnitt
     „Die Leiste"), weil gleiche Spezifitaet spaeter gewinnt — hier stuenden sie
     vor ihr und wirkten nicht (gemessen am 09.09.2026: Filter bei 390 px in
     Wortbreite statt zu zweit). */
  /* DER TITEL BRICHT UM, steht mittig (`align-items: center` am gestapelten
     Kopf, weiter unten in diesem Block) und misst 22 px — BAUTEILE.md „Handy
     22 px, bricht", TOKENS.md, die drei Modulblaetter der Lieferung im
     699er-Block; die Herleitung steht am Seitenkopf (Abschnitt „Der Seitenkopf
     der Lieferung vom 08.09.2026"). */
  .seitenkopf h1 { white-space: normal; font-size: 22px; }
  /* DER AUSSENABSTAND DES KOPFES AM HANDY — BAUTEILE.md:75 „(Handy: 4px 0
     14px)", TOKENS.md:45 „Seitenkopf Abstand unten 22 px (Handy 14)". Er steht
     hier und nicht in der Grundregel, weil er eine Lagenzahl ist; die
     Herleitung und der Anlass stehen bei der Grundregel („Der Seitenkopf der
     Lieferung vom 08.09.2026", Berichtigung vom 10.09.2026). Auf einer
     Zonenseite ueberstimmt `.inhalt.zonen > .seitenkopf { margin: 0 }` (0,3,0)
     auch diese Zeile — das Bild der gelieferten Seiten bleibt. */
  .seitenkopf { margin: 4px 0 14px; }

  /* DIE FELDLISTE EINES EINZELNEN DINGS IST HIER EINE BOX UND NICHT VIER.
     -------------------------------------------------------------------------
     BETREIBER, 07.09.2026 am laufenden System, im Wortlaut: „Stammdaten der
     Stuecke bitte nicht alle separat als Box. Da eine Box und einen Stift und
     dann im Popup bearbeiten."
     (docs/lieferung/betrieb-am-bild-2026-09-07.md, Abschnitt A.)

     ES WAREN NIE VIER GEBAUTE BOXEN. Die Seite baut EINE Liste; die Regeln
     darueber zerlegen jede `.liste tr` in eine Karte. Vier Zeilen ergeben vier
     Karten mit je einem Stift — und am Telefon sieht niemand, dass alle vier
     denselben Knopf sind.

     WARUM EINE KLASSE UND NICHT EIN WAEHLER AUF DAS MARKUP: Eine Feldliste
     („Angabe | Stand | Aktionen" an EINEM Ding) und eine Dingliste sind am
     Markup nicht zu unterscheiden. tests/faelle/548_zeilentitel.php hat das am
     06./07.09.2026 gemessen und hingeschrieben: „Der Unterschied liegt darin,
     WAS die Zeile ist — ein Ding oder ein Feld —, und das steht nirgends."
     Seit dem 07.09.2026 steht es: `class="liste angabenliste"`.
     tests/faelle/549_angabenliste.php leitet die Menge aus dem Markup ab
     (alle Stifte oeffnen dasselbe, zeilenunabhaengige Fenster) statt sie
     aufzuzaehlen.

     DIE ZEILEN VERLIEREN RAND UND HINTERGRUND, DIE TABELLE BEKOMMT SIE. Damit
     ist die Box die Liste und nicht die Zeile. `margin-bottom` faellt mit —
     sonst stuenden zwischen den Zeilen der einen Box die Luecken der vier
     alten.

     KEIN `:hover` AUF DER ZEILE: Eine hervorgehobene Zeile in einer Box, die
     als Ganzes EIN Ding ist, verspricht, dass die Zeile etwas kann. */
  /* SEIT DEM 09.09.2026 IST DIE BOX IN JEDER BREITE EIN RASTER AUS PAAREN
     (ADR-0078, Scheibe C; BAUTEILE.md „Feldliste": „Eine Box, ein Stift — in
     jeder Breite"). HIER STANDEN Rand (1 px --linie), Radius, --karte und 4 px
     Innenabstand fuer den schmalen Umbruch — die Kastenform von damals. Die
     Regeln stehen jetzt im Abschnitt „Die Stueckseite des Notenarchivs nach der
     Lieferung vom 08./09.09.2026" am Ende dieser Datei, ohne Breitenbedingung;
     der Waehler darunter (ununterscheidbare Stifte der Folgezeilen fallen)
     bleibt hier mit seinem Anlass stehen und gilt dort in jeder Breite. */
  .liste.angabenliste tr:hover,
  .liste.angabenliste tr:active {
    background: transparent;
  }

  /* UND EIN STIFT STATT VIER — ABER NUR, WO ES WIRKLICH DERSELBE IST.
     -------------------------------------------------------------------------
     `:not([data-reiter]):not([data-feld]):not([href])` IST DER GANZE PUNKT UND
     KEINE VORSICHT. Gemessen am 07.09.2026 an ALLEN FUENF abgeleiteten
     Feldlisten — und alle fuenf stehen hier, weil eine Fundstellenliste, die
     eine Fundstelle auslaesst, aussieht wie eine vollstaendige.

     DIE KLASSE TRAEGT SECHS TABELLEN, NICHT FUENF, und die sechste steht
     deshalb gleich hier: `kern/seiten/vereinskonto.php` hat GAR KEINEN Stift.
     Die Regeln der Box darueber greifen dort ebenso — Rand, Hintergrund,
     Radius —, dieser Waehler findet nichts. Sie ist keine abgeleitete
     Feldliste, weil die Ableitung am festen Fensternamen haengt und ohne Stift
     kein Fenster dasteht.

     BERICHTIGT AM 07.09.2026 ABENDS, GEMELDET VON pruefung-vor-pr: Hier stand
     „ALLEN FUENF" ohne diesen Absatz, und das Wort „abgeleitet" war der einzige
     Hinweis darauf, dass die Zahl nicht die Zahl der Tabellen ist. `GEBAUT.md`
     nannte die sechste als benannte Grenze, dieses Stilblatt nicht — und wer
     hier liest, liest nicht dort. ES IST DIESELBE FORM WIE DIE BERICHTIGUNG
     DARUNTER: eine Liste, die vollstaendig aussieht, weil ihre Menge nicht
     danebensteht.

     DIE FUENF ABGELEITETEN:

       module/notenarchiv/seiten/stueck.php:671   vier Stifte, alle
                                                  `data-fenster-auf="bearbeiten"`,
                                                  kein weiteres Merkmal — DASSELBE.
       kern/seiten/erscheinung.php:178            `data-reiter="vereinsart|farbe|
                                                  wappen"` — drei verschiedene
                                                  Register desselben Fensters.
       kern/seiten/statuten.php:370               `data-reiter`, `data-feld` und ein
                                                  eigenes `href` je Zeile.
       kern/seiten/konto.php:559 (Kontakt)        `href` und `data-reiter` je Angabe.
       kern/seiten/konto.php:791 (Bild)           EINE Datenzeile, ein Stift mit
                                                  `href` — unterscheidbar, und die
                                                  Regel greift ohnehin erst ab der
                                                  zweiten Zeile.

     BERICHTIGT AM 07.09.2026: HIER STANDEN VIER ZEILEN UNTER DEM WORT „fuenf",
     und `konto.php` war einmal genannt statt zweimal. Gefunden von
     pruefung-vor-pr. Die Zahl war richtig, die Liste nicht — und wer sie liest,
     zaehlt nicht nach.

     WER HIER PAUSCHAL AUSBLENDET, NIMMT DEM BETREIBER DEN WEG ZU „Farbe" UND
     „Wappen" — und das waere genau der Fehler, den ADR-0074 am selben Tag
     benannt hat: ein Bedienelement, das unter einer Bedingung verschwindet.
     Ausgeblendet wird deshalb nur, was von dem Stift daneben nicht zu
     unterscheiden ist.

     DIE ERSTE ZEILE BEHAELT IHN, und dass er dort steht, ist zugesichert und
     nicht angenommen: tests/faelle/549_angabenliste.php wird rot, wenn der
     einzige ununterscheidbare Stift einer Angabenliste in einer Folgezeile
     stuende — dann naehme diese Regel ihn ganz weg.

     -------------------------------------------------------------------------
     WAS DIESER WAEHLER NICHT KANN, UND WER ES DESHALB TRAEGT
     -------------------------------------------------------------------------

     ER VERGLEICHT DEN WERT VON `data-fenster-auf` NICHT. Er unterscheidet
     Stifte an ihren MERKMALEN — `data-reiter`, `data-feld`, `href` —, nie
     daran, WOHIN sie fuehren. Zwei Stifte mit `bearbeiten` und `loeschen`,
     beide ohne weiteres Merkmal, sind ihm derselbe, und den zweiten blendet er
     aus. CSS kann das nicht anders; es gibt keinen Waehler dafuer.

     DAS WAERE ADR-0074 IN REINFORM: ein Bedienelement, das unter einer
     Bedingung verschwindet. Gemeldet von pruefung-vor-pr am 07.09.2026.

     ALSO TRAEGT DIE KETTE DIE VORAUSSETZUNG:
     tests/faelle/549_angabenliste.php sichert zu, dass alle
     ununterscheidbaren Stifte EINER Angabenliste denselben Fensternamen
     tragen. Gegengeprobt am 07.09.2026 in einer Kopie: ein zweiter Stift mit
     `loeschen` macht die Zusicherung rot, waehrend die Regel „in der ersten
     Zeile" gruen bleibt.

     DER GRUND DARF NICHT „heute hat keine Liste zwei Fenster" LAUTEN — das
     beschriebe den Bestand und braeche an dem Tag, an dem jemand einen zweiten
     Knopf anbringt, ohne diese Zeilen zu kennen. Er lautet: diese Regel SETZT
     ES VORAUS, und die Zusicherung setzt es durch.

     WAS GESCHIEHT, WENN EIN BROWSER `:not()` MIT ATTRIBUT NICHT KENNT: Es
     bleiben vier Stifte stehen. Das ist der Zustand von gestern und kein
     Schaden. */
  .liste.angabenliste tbody tr:not(:first-child)
    td.spalte-aktionen > [data-fenster-auf]:not([data-reiter]):not([data-feld]):not([href]) {
    display: none;
  }

  /* 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). Sie traegt 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.

     HIER STAND BIS ZUM 10.09.2026 „Anders als `.karte` traegt sie einen
     Rahmen". Das war der Nebensatz, an dem die Verengung der Kartenregel im
     Blatt selbst sichtbar war: `.karte` traegt seit dem 10.09.2026 den 1-px-
     Rand der Lieferung (BAUTEILE.md „Karte", ADR-0078), und der Unterschied
     ist damit keiner mehr. Die Regel hier bleibt trotzdem stehen — sie nimmt
     der Meldung waagrecht NICHT den Rand, den `.karte` am Handy verliert. */
  .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.
     `flex-direction: column` setzt den ORT.

     UND ER IST VOLLBREIT — ADR-0078 (08.09.2026), Punkt 9. Der Betreiber hatte
     das am 02.09.2026 am Bild aufgehoben („Ein Button ist niemals vollbreit!",
     ADR-0024, Nachtrag 02.09.2026; gemessen danach 197 px bei 390) und am
     08.09.2026 an seinen Mobilbildern das Gegenteil entschieden: Der Hauptknopf
     steht unter 700 px so breit wie seine Spalte. BAUTEILE.md sagt zum
     `.knopf-plus` „bleibt", die Bilder zeigen es anders — das Bild gilt
     (ADR-0078, Tabelle Zeile 9). Die Regeln sind die der Lieferung
     (`.seitenkopf-aktionen { width: 100% }`, `.knopf-plus { flex: 1 1 auto }`,
     dort je Modul). `display: flex` an `.seitenkopf-aktionen` ist die
     Voraussetzung dafuer, dass `flex: 1 1 auto` wirkt; die Lieferung traegt es
     in der Grundregel jedes Moduls (`display: flex; gap: 8px; align-items:
     center`) — ohne `align-items: center` streckte der Behaelter den Knopf
     auf die Hoehe eines zweiten Kindes (gemessen im Zeugwart bei 390: 54 statt
     44 px), ohne `gap` staende ein Wortzwischenraum dazwischen. Gemessen an
     der gelieferten Seite bei echten 390 px: Knopf 358 von 358 px der Spalte.
     Ab 700 px unveraendert: Wortbreite, rechts.

     DER BLOCK HIER HEISST `(max-width: 700px)` UND NICHT 699 wie in der
     Lieferung: Er ist der Block, in dem der Kern seit dem 20.08.2026 den ORT
     des Knopfs setzt (`flex-direction: column`), und Ort und Breite gehoeren
     unter dieselbe Bedingung (LIESMICH.md der Lieferung, Bauhinweis 1). */
  /* `align-items: center` UND NICHT `stretch` — ADR-0078, Nachtrag 08.09.2026
     (abends): „Der Seitentitel steht unter 700 px mittig — aus `align-items:
     center` am gestapelten Seitenkopf der Lieferung. Das Bild gilt." Gemessen
     an den drei gelieferten Seiten bei echten 390 px: Mitte des h1 bei x 195.
     Der Hauptknopf bleibt vollbreit ueber `.seitenkopf-aktionen { width: 100% }`
     darunter. */
  .seitenkopf { flex-direction: column; align-items: center; }
  /* `flex-wrap: wrap` IST FUER DEN UEBERGANG BIS SCHEIBE B (ADR-0078,
     Konsequenzen): Die Lieferung zeigt im Seitenkopf genau EINEN Knopf, dann
     ist der Umbruch wirkungslos. Heute tragen Zeugwart („Gruppen", „Spalten")
     und Notenarchiv („Spalten") noch zwei bis drei; ohne Umbruch schrumpfte
     der Hauptknopf bei 390 px auf 146 px und sein Wort brach auf zwei Zeilen
     (gemessen: 54 statt 44 px hoch), mit `nowrap` liefe die Zeile 34 px aus
     der Spalte. Mit Scheibe B wandern beide Nebenknoepfe (Leiste, Untermenue),
     und diese Zeile kann fallen. */
  .seitenkopf-aktionen { margin-left: 0; width: 100%; display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
  .seitenkopf-aktionen .knopf-plus { flex: 1 1 auto; }
  .seitenkopf-aktionen .knopf-plus:has(.knopf-plus-zeichen) { flex: 0 0 44px; width: 44px; }
  /* 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;
  }
  /* DER FUSS STEHT UNTEN, AUCH AM GERAET — ADR-0078 (08.09.2026), Punkt 3. Der
     Seitenlauf scrollt hier selbst (body 100dvh, `flex: 1` oben); als
     Flex-Spalte gibt er dem Inhalt den Rest (`flex: 1 0 auto`), und der Fuss
     steht unten, wenn der Inhalt kuerzer ist als der Lauf. Ist er laenger,
     folgt der Fuss dem Inhalt. Die 60 px `padding-bottom` fuer die Fussleiste
     (weiter unten) bleiben und liegen UNTER dem Fuss — gemessen an der
     gelieferten Seite bei 390: Fuss bei y 826 bis 912, padding-bottom 60.
     `width: 100%` an `.inhalt`: derselbe Grund wie im Block 700–1119 und in
     der Rasterzelle ab 1120 — ein Flex-Kind mit auto-Raendern wird sonst
     `fit-content`. */
  .seitenlauf { display: flex; flex-direction: column; }
  .inhalt { flex: 1 0 auto; width: 100%; }
  .fuss { flex: none; align-self: stretch; margin-top: 0; }

  /* 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; }

  /* ---------------------------------------------------------------------
     DAS `display: none` IST VON `.kopf-ich` AUF DEN NAMEN GEWANDERT (Design,
     29.08.2026): „AM GERAET bleibt das Element SICHTBAR. Ausgeblendet wird
     der NAME darin."

     HIER STAND `.kopf-ich { display: none; }` mit dem Kommentar: „ABMELDEN
     IST HIER NICHT WEG, SONDERN UMGEZOGEN: Es steht im Fuss des Blattes
     hinter `Mehr`."

     DER SATZ GILT WEITER UND MEINT JETZT ETWAS ANDERES: `Abmelden` steht
     nicht mehr im Band — in keiner Breite —, sondern als letzte Zeile auf der
     Kontoseite und als Zeile im Mehr-Blatt. Der Weg hinaus ist am Geraet
     damit da, wo er vorher war.

     WAS HIER VERSCHWINDET, IST NUR NOCH DER NAME. Das Zeichen bleibt, und mit
     ihm der Weg zum eigenen Konto — genau deshalb steht das Zeichen seit dem
     29.08.2026 IN diesem Verweis und nicht mehr daneben.

     DER TREFFBEREICH BLEIBT 44 PX, obwohl das Zeichen nur 24 misst: Die
     `min-width`/`min-height` steht an `.kopf-ich` selbst und nicht in diesem
     Block — sie gilt in jeder Breite und kann hier nicht vergessen werden.

     DIESE ZWEI BLOECKE SIND MITGEGANGEN, weil ihr Gegenstand fort ist:
     `--band-unterhang` und `--flaeche-luft` massen die aufklappende Flaeche
     des alten Benutzerblattes, `--zeichen-rueckzug` holte den 8-px-Rand
     zurueck, den ein Element NEBEN `.kopf-ich` brauchte.
     --------------------------------------------------------------------- */
  .kopf-ich-name { 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; }

  /* ---------------------------------------------------------------------
     DER OEFFNER DES UNTERMENUES, UEBER DER LEISTE (05.09.2026).

     ER IST KEIN SECHSTES FELD DER LEISTE, und das ist gerechnet und nicht
     gewaehlt: Die Leiste traegt fuenf Felder zu je `flex: 1 1 0`, und
     kern/navigation.php haelt fest, dass "ein sechstes Feld den Treffbereich
     von 44 px unterschreitet". Ein Feld fuer das Untermenue braeche also
     genau die Zahl, die dort steht.

     ER LIEGT UEBER DER LEISTE UND NICHT DARUNTER: Unter ihr waere er nicht
     erreichbar — die Leiste sitzt an der Geraetekante. 60px ist ihre Hoehe,
     dieselbe Zahl wie beim `padding-bottom` darueber und bei `.menue-flaeche`.

     ─────────────────────────────────────────────────────────────────────
     BERICHTIGT AM 06.09.2026: HIER STAND „36 PX HOCH UND NICHT 44", UND DAS
     WAR EINE AUSNAHME, DIE ADR-0024 NICHT GIBT.

     DER ALTE WORTLAUT: „36 PX HOCH UND NICHT 44: Er ist kein Ziel, sondern ein
     Griff an einem Blatt, das darueber aufgeht — der Treffbereich der WEGE
     liegt in der Leiste darunter. Die Zeile traegt Text und keinen Punkt, also
     ist die ganze Breite die Trefflaeche und nicht ein 44-px-Quadrat."

     ADR-0024, NACHTRAG VOM 27.08.2026, IM WORTLAUT: „Der Treffbereich jeder
     Handlung betraegt am Geraet mindestens 44 px. Er gilt fuer alles, was
     dieses ADR eine Fuellung nennt: Knopf, Zeilenaktion, Menueeintrag,
     Bandeintrag." EIN <summary>, DAS EIN MENUE OEFFNET, IST EINE HANDLUNG —
     „ein Griff" ist eine Beschreibung und keine Ausnahme.

     BETREIBER, 06.09.2026 am Handy: „Das extra Menü hat in der Bezeichnung
     immer noch eine viel zu kleine Schrift und Fläche zum Öffnen. Es sol touch
     optimiert sein."

     BEIDE ZAHLEN KOMMEN AUS DEM BLATT, DAS ER OEFFNET, und keine ist neu:

       min-height  var(--zeile-hoehe) = 56 px. Die Hoehe, die JEDE Zeile in
                   diesem Blatt schon traegt — `.menue-liste a` und
                   `.menue-abmelden`. Der Oeffner ist damit so gross wie das,
                   was er aufmacht, und liegt ueber den 44 px des ADR.
       font-size   17px. Der Grad, den `.menue-liste a` in derselben Liste
                   fuehrt (begruendet weiter oben: „17px und nicht
                   --grad-text"). Er trug 14 — gemessen am 06.09.2026, chromium
                   1194 ueber das Fernsteuerungsprotokoll, echte 390 px.

     NICHT 60 PX, obwohl Kopfband und Fussleiste diese Zahl fuehren: Der
     Oeffner ist kein drittes Band, sondern die oberste Zeile des Blattes, das
     unter ihm liegt. 56 ist die Zahl dieser Zeile.

     KEINE FLAECHE, KEINE FARBE — Zusicherung 3 und ADR-0024, Nachtrag vom
     20.08.2026. Nur die Haarlinie nach oben, damit er sich vom Inhalt loest.
     Daran aendert die Groesse nichts: Was waechst, ist der Treffbereich, nicht
     die Zeichnung. */
  .geraet-untermenue {
    display: block;
    position: fixed;
    left: 0;
    right: 0;
    bottom: 60px;
    background: var(--karte);
    border-top: 1px solid var(--linie);
    z-index: 27;
  }
  .untermenue-knopf {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 6px;
    min-height: var(--zeile-hoehe);
    padding: 0 14px;
    font-size: 17px;
    color: var(--tinte-leise);
    cursor: pointer;
    list-style: none;
  }
  .untermenue-knopf::-webkit-details-marker { display: none; }
  .untermenue-knopf:focus-visible {
    outline: 2px solid var(--tinte-leise);
    outline-offset: -2px;
  }
  .geraet-untermenue[open] > .untermenue-knopf { color: var(--tinte); font-weight: 600; }
  .geraet-untermenue[open] > .untermenue-knopf .mehr-winkel { transform: rotate(180deg); }
  /* DIE DECKUNG DER SEITE, UND SIE IST AM 06.09.2026 DAZUGEKOMMEN.

     BETREIBER, 06.09.2026: „So dass es klarer als Menüerkennbar ist."

     DAS BLATT HINTER `Mehr` DECKT DIE SEITE SEIT DEM 27.08.2026
     (`.geraet-menue[open]::before`), DAS BLATT DES UNTERMENUES DECKTE NICHTS —
     dasselbe Bauteil, einmal als Menue erkennbar und einmal nicht. Gemessen am
     06.09.2026 im Bild: weisses Blatt auf weisser Seite, ohne Rand, ohne
     Deckung; es las sich als Fortsetzung der Seite.

     TON UND LAGE SIND DIE DES BRUDERS, Ziffer fuer Ziffer — eine zweite
     Deckungsfarbe waere eine zweite Wahrheit ueber dieselbe Sache.

     `bottom: 116px` UND NICHT `60px`: Gedeckt wird die SEITE, nicht die
     Bedienung — derselbe Grund, der an der Deckung des `Mehr`-Blattes steht.
     Dort ist der Weg zurueck die Fussleiste, hier ist es der Oeffner. Ein
     gedeckter Oeffner saehe aus wie ein abgeschalteter, und er ist das
     einzige, was das Blatt wieder zumacht.

     ALS PSEUDOELEMENT UND NICHT ALS MARKUP, auch das wie beim Bruder: Ein
     leeres <span> nur fuer eine Flaeche waere ein Element, das eine
     Vorlesehilfe ansagen koennte. */
  .geraet-untermenue[open]::before {
    content: "";
    position: fixed;
    top: 62px;
    left: 0;
    right: 0;
    bottom: 116px;
    background: rgba(27, 33, 30, 0.34);
    z-index: 29;
  }
  /* Das Blatt sitzt ueber dem Oeffner, nicht ueber der Leiste: 60 Leiste plus
     56 Oeffner = 116. Dieselbe Rechnung wie bei `.menue-flaeche`, eine Zeile
     hoeher — die 56 sind seit dem 06.09.2026 --zeile-hoehe und nicht mehr 36.

     DIE HOEHENSCHRANKE: 62 Band + 60 Leiste + 56 Oeffner = 178, und dazu der
     Rand nach oben. „Die Box soll nach oben und zur Seite etwas Margin haben"
     (Betreiber, 06.09.2026) — nach oben ist es kein Rand, sondern eine
     Schranke: Das Blatt haengt an der Unterkante und waechst nach oben. */
  .geraet-untermenue > .menue-flaeche {
    bottom: 116px;
    max-height: calc(100dvh - 178px - var(--abstand));
  }

  /* DER INHALT BEKOMMT NOCH EINMAL DIE HOEHE DES OEFFNERS, solange der Oeffner
     dasteht — seit dem 06.09.2026 sind das 56 und nicht mehr 36. Ohne diese
     Zeile liegt die letzte Inhaltszeile unter ihm — derselbe Fall wie bei der
     Leiste darueber, nur eine Zeile hoeher.

     ALS GESCHWISTERWAHL UND NICHT ALS `:has`, und das ist gemessen und keine
     Vorsicht: `.geraet-untermenue` steht im Markup VOR `.seitenlauf`
     (kern/ansicht/kopf.php — Modulzeile, Untermenue, Fussleiste, dann der
     scrollende Teil). `:has(~ …)` sucht nach hinten und faende hier nichts;
     der Nachbarwaehler sucht in der Richtung, in der das Element steht. */
  .geraet-untermenue ~ .seitenlauf { padding-bottom: 116px; }
}

/* ---------------------------------------------------------------------------
   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 }` IST HIER FORT. Der Abstand trennte frueher den
     Namen vom Abmeldeknopf — zwei Bedienelemente in einem Kasten. Seit dem
     29.08.2026 ist es EIN Element, und der einzige Abstand darin ist der
     zwischen Zeichen und Name: 9 px, in jeder Breite, oben gesetzt (Design,
     29.08.2026). Eine zweite Zahl an derselben Frage waere genau das, was die
     zwei geloeschten Rueckzugsrechnungen verursacht hat. */
}

/* ===========================================================================
   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);
    /* DER FUSS STEHT UNTEN — ADR-0078 (08.09.2026), Punkt 3: Die zweite Zeile
       bekommt den Rest bis zur Fensterunterkante (`1fr auto` statt `auto
       auto`), und der Lauf ist mindestens so hoch wie das Fenster ohne Band.
       Ist der Inhalt laenger als das Fenster, folgt der Fuss dem Inhalt.

       72 UND NICHT 62 — ADR-0078, Nachtrag vom 08.09.2026 (abends), Befund 3:
       TOKENS.md leitet die 62 als „Fensterhoehe minus Kopfband" her; das Band
       ist mit den 44er-Knoepfen derselben Lieferung 72 hoch (13 + 44 + 13 + 2).
       „Die Herleitung gilt, die Zahl war vor den Knoepfen gemessen." Mit 62
       lief eine kurze Seite bei 1280 px um 10 px ueber. GEMESSEN am 09.09.2026
       an der gelieferten und an der eigenen Seite bei 1280 px: `.kopf` 72 px,
       Seitenlauf beginnt bei y = 72. Dieselbe 72 fuehrt `.seitenleiste`
       (`top: 72px; height: calc(100vh - 72px)`) seit dem 27.08.2026. */
    grid-template-rows: 1fr auto;
    min-height: calc(100vh - 72px);
  }
  .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%; align-self: start; }
  .fuss   { grid-column: 2; grid-row: 2; width: 100%; align-self: end; }
}

/* 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 FUSS STEHT UNTEN — ADR-0078 (08.09.2026), Punkt 3: Flex-Spalte mit
     `min-height: calc(100vh - 62px - 44px)` (TOKENS.md: „minus Kopfband (60 +
     2 Kante) minus Modulzeile (44)"). DER BLOCK STEHT HIER, IM HOEHENGEBUNDENEN
     BLOCK DER MODULZEILE: Die 44 sind die Modulzeile, und die gibt es nur
     hier — unter 451 px Hoehe gilt die Fussleiste und der E4-Block.

     GEMESSEN an der gelieferten Seite bei 834 px: Band 72 px, Modulzeile 52 px,
     der Seitenlauf beginnt bei y = 124 — mit 694 px Mindesthoehe (62 + 44)
     lief eine kurze Seite um 18 px ueber. SEIT DEM 09.09.2026 STEHEN DIE
     GEMESSENEN ZAHLEN HIER (ADR-0078, Nachtrag 08.09.2026 abends, Befund 3):
     72 + 52 = 124, und eine kurze Seite endet an der Fensterunterkante.

     `width: 100%` AN `.inhalt` IST HERGELEITET UND NICHT GELIEFERT: `.inhalt`
     traegt `margin: … auto …`, und ein Flex-Kind mit auto-Raendern in der
     Querachse wird nicht gestreckt, sondern `fit-content` — dieselbe Falle wie
     in der Rasterzelle ab 1120 (dort seit dem 27.08.2026 gemessen und mit
     derselben Zeile behoben). Die Lieferung brauchte sie nicht, weil ihre vier
     Seiten 100 %-breite Karten tragen; die Grundregel muss auch eine kurze
     Textseite tragen. `max-width: 1100px` und die auto-Raender bleiben, also
     steht der Inhalt wie bisher hoechstens 1100 breit und mittig. */
  .seitenlauf { display: flex; flex-direction: column; min-height: calc(100vh - 72px - 52px); }
  /* `min-width: 0`: Die Huelle einer breiten Kolonne schiebt (BAUTEILE.md
     „700–1119: ist sie breiter, schiebt die Huelle"); ohne die Zeile nahm der
     Inhalt die Mindestbreite der Tabelle an und die SEITE schob — gemessen an
     der gelieferten Notenarchiv-Seite bei 834 px: Dokument 1010 px breit. */
  .inhalt { flex: 1 0 auto; width: 100%; min-width: 0; }
  .fuss { flex: none; align-self: stretch; }
}

/* 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,
.kopf .kopf-verwaltung {
  color: #fff;
}

/* ---------------------------------------------------------------------------
   DER KONTOWEG — DIE LAGE (Design, 29.08.2026).

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

   ER SIEHT IM RUHEZUSTAND AUS WIE VORHER, und das ist die Vorgabe und keine
   Zurueckhaltung: Das Band traegt Zugehoerigkeit, nicht Bedienung.

   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.

   DIE UNTERSTREICHUNG STEHT AM NAMEN UND NICHT AM VERWEIS. Stuende sie am
   Verweis, liefe sie unter dem Zeichen mit — derselbe Fall wie beim
   Rueckverweis, wo das Wort die Unterlinie traegt und nicht das `a`. Unter der
   E4-Bedingung ist der Name fort; dort bleibt der Fokusring, der oben im
   neutralen Satz steht.

   HIER STANDEN BIS ZUM 29.08.2026 VIER WEITERE REGELN, und sie sind mit ihrem
   Gegenstand gegangen: die weisse Kante am 44-px-Zeichenfeld des alten
   Benutzerblattes (`.kopf-benutzer > summary`), ihre zwei Zustaende und die
   Tintenfarbe in der aufgeklappten Flaeche. Es gibt kein Zeichenfeld und keine
   Flaeche mehr — das Zeichen steht im Verweis, und der klappt nichts auf.

   DAMIT ENTFAELLT AUCH DIE KANTE, DIE ADR-0024 GERADE NOCH ERLAUBTE ("Im
   Kopfband traegt nichts eine Fuellung. Eine Kante ist keine"). Sie war die
   Anzeige eines Treffbereichs, den man ohne sie nicht sah; neben dem Namen
   sieht man ihn.

   SEIT DEM 08.09.2026 TRAGEN DIE ZWEI ZEICHENFLAECHEN WIEDER EINE KANTE — als
   Knoepfe (ADR-0078, Punkt 4; Regel bei `.kopf-zeichen, .kopf-verwaltung`
   weiter oben). Die Unterstreichung des Namens beim Zeigen bleibt daneben
   bestehen; sie ist die Rueckmeldung am Wort, die Kante die am Knopf. */
.kopf-ich:hover .kopf-ich-name,
.kopf-ich:focus-visible .kopf-ich-name {
  text-decoration: underline;
  text-underline-offset: 3px;
}

.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
   das fuenfte Feld der Fussleiste und traegt drei Punkte waagrecht als
   Schriftzeichen (`.mehr-punkte`, weiter unten).

   AM 08.09.2026 ZWEIMAL ENTSCHIEDEN, UND DIE SPAETERE GILT: Am Vormittag hat
   der Betreiber den Tausch angenommen (ADR-0024, Nachtrag 08.09.2026 — `mehr`
   als Zeichen aus dem Satz, Datei `zeichen/mehr`, gebaut in #145). Am Abend zeigt seine
   Lieferung am Bild den Oeffner wieder mit `···` und `verlauf` mit den drei
   Strichen (ADR-0078, Punkt 7). Die Datei `zeichen/mehr` und ihre Maskenregel
   sind gefallen.

   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, als Schriftzeichen — die Regel vom 27.08.2026,
   wieder in Kraft seit dem 08.09.2026 (ADR-0078, Punkt 7: Die Lieferung zeigt
   den Oeffner mit `···`, die Datei `zeichen/mehr` ist gefallen). Zwischen dem
   Vormittag und dem Abend des 08.09.2026 stand hier eine Berichtigung zugunsten
   jener Datei (ADR-0024, Nachtrag 08.09.2026, #145); der Wortlaut steht im
   Verlauf. `verlauf` traegt wieder die drei Striche, also stehen im Zeugwart
   und in den Beschluessen nicht mehr zwei gleiche Bilder uebereinander. */
.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.

   ---------------------------------------------------------------------------
   ES IST SEIT DEM 06.09.2026 EINE BOX MIT RAND, UND SIE FAEHRT VON UNTEN
   HEREIN.

   BETREIBER, 06.09.2026 am Handy: „Gemerel möchte ich, das sich beim Öffnen
   des Menüs von unten eine Box mit dem Menü schiebt (mobil zumindest). So dass
   es klarer als Menüerkennbar ist. Die Box soll nach oben und zur Seite etwas
   Margin haben"

   WAS VORHER GEMESSEN WAR (chromium 1194 ueber das Fernsteuerungsprotokoll,
   echte 390 px, `.geraet-untermenue` aufgeschlagen):

     transitionDuration   0s            es schob sich NICHT, es stand da
     left / right         0px / 0px     randlos bis an die Geraetekanten

   DER RAND IST --abstand UND KEINE ZAHL: Er steht einmal in :root; drei
   hingeschriebene 16 waeren drei Zahlen ueber dieselbe Sache. Nach oben ist
   es kein Rand, sondern ein Abzug in der Hoehenschranke — das Blatt haengt an
   der Unterkante und waechst nach oben.

   KEIN RAND NACH UNTEN, und das ist sein Wortlaut („nach oben und zur Seite"):
   Unten sitzt das Blatt auf der Fussleiste beziehungsweise auf dem Oeffner
   auf. Deshalb bleibt der Radius oben und faellt unten weg — eine gerundete
   Unterkante auf einer weissen Leiste waere Weiss auf Weiss.

   DIE BEWEGUNG OHNE SKRIPT, UND SIE IST AN DIESEM MARKUP GEMESSEN UND NICHT
   AUS EINER EMPFEHLUNG UEBERNOMMEN: `<details>` nimmt seinen Inhalt beim
   Schliessen aus der Darstellung; ein `transition` allein bewegt darum nichts,
   weil es keinen Anfangswert gibt. `@starting-style` liefert genau ihn.
   Gemessen am 06.09.2026 in chromium 1194, zwei Bilder nach dem Oeffnen:
   `transform: matrix(1, 0, 0, 1, 0, 686)`, 600 ms spaeter
   `matrix(1, 0, 0, 1, 0, 0)`. Kein npm, kein Build, kein Node-Prozess.

   DAS BLATT FAEHRT DABEI HINTER DER FUSSLEISTE HERVOR: `.geraet-menue` liegt
   in der Leiste (z-index 28), `.geraet-untermenue` auf 27 — waehrend der
   180 ms steht das Blatt zum Teil unter beiden. Das ist der Weg, den ein Blatt
   von unten nimmt, und kein Fehler.
   --------------------------------------------------------------------------- */
.menue-flaeche {
  position: fixed;
  left: var(--abstand);
  right: var(--abstand);
  bottom: 60px;
  max-height: calc(100dvh - 122px - var(--abstand));
  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;
  transform: translateY(0);
  transition: transform 180ms ease-out;
}
@starting-style {
  details[open] > .menue-flaeche { transform: translateY(100%); }
}
/* UND ES MUSS OHNE DIE BEWEGUNG FUNKTIONIEREN.

   Wer `prefers-reduced-motion: reduce` gesetzt hat, bekommt keine Animation.
   ABGESCHALTET WIRD DIE `transition` UND NICHT DER `transform`: Der Endwert
   ist `translateY(0)` — ohne die Ueberblendung springt das Blatt sofort
   dorthin, und Rand, Radius und Hoehenschranke haengen an keiner Bewegung.
   Waere hier `transform: none`, gaebe es zwei Wahrheiten ueber denselben Wert.

   GEMESSEN am 06.09.2026 mit `Emulation.setEmulatedMedia`, nicht angenommen. */
@media (prefers-reduced-motion: reduce) {
  .menue-flaeche { transition: none; }
}

/* 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);
}

/* ---------------------------------------------------------------------------
   DAS UNTERMENUE EINES MODULS (05.09.2026).

   ANLASS: Anordnung des Betreibers vom 05.09.2026 — "findest lediglich eine
   Loesung wie wir das mit dem Submenue loesen". Die Form kommt aus dem
   Vorgaenger (`modul_nav()` mit `unter` und `spalten`); hier stehen ihre Masse.

   DREI SORTEN ZEILE, UND DIE ZWEI ERSTEN SIND KEIN WEG:

     .untermenue-wort   Ein Sammelpunkt ohne eigene Seite ("Verwaltung").
     .untermenue-titel  Die Ueberschrift EINER SPALTE des Vorgaengers
                        ("Verwaltung Mappen").
     .untermenue-punkt  Ein Weg, eingerueckt unter seiner Ueberschrift.

   SIE TRAGEN KEINE KANTE UND KEINEN WINKEL — beides gehoert der Modulzeile
   (`.menue-liste a`). Ein Untermenuepunkt ist kein Modul, und wer ihn so
   aussehen liesse, machte aus zehn Modulen scheinbar vierzehn.

   DER EINZUG IST 12 PX UND NICHT 16: Er soll erkennbar sein und die Zeile
   nicht ins Rutschen bringen. Auf der aktiven Zeile kommt links die 3-px-Kante
   der Vereinsfarbe dazu — dieselbe wie bei `.menue-liste`, mit derselben
   Begruendung, und ohne dass eine zweite Kante entsteht. */
/* DIE ZWEI AUFSCHRIFTEN SIND AM 06.09.2026 GEWACHSEN — UND DER GRUND IST EINE
   MESSUNG UND KEIN GESCHMACK.

   ANGEORDNET vom Betreiber am selben Tag am Handy, im Wortlaut
   (docs/lieferung/betrieb-am-bild-2026-09-06.md): „Das neue Menue hat eune viel
   zu kleine Beschriftung und ist unlogisch bei der Unterteilung."

   WAS GEMESSEN WURDE (chromium 1194 ueber das Fernsteuerungsprotokoll, echte
   390 px, Untermenue des Notenarchivs aufgeschlagen):

     Eintrag („Verleih", „Mappen")   17 px
     Sammelpunkt („Verwaltung")      13 px   <- die UEBERSCHRIFT
     Gruppenaufschrift               12 px   <- die zweite UEBERSCHRIFT

   BEIDE UEBERSCHRIFTEN WAREN KLEINER ALS DAS, WAS UNTER IHNEN STAND. Das ist
   die Sorte Fehler, die man nicht als Groesse liest, sondern als Ordnung: Was
   kleiner ist als seine Kinder, wirkt wie ein Beisatz zu ihnen und nicht wie
   ihr Titel — und dann sieht die Gliederung „unlogisch" aus, obwohl die
   Gliederung stimmt.

   UND DIE 12 PX LAGEN UNTER DER UNTERGRENZE DES EIGENEN TOKENSATZES. In :root
   steht woertlich: „Nie unter 16px im Fliesstext. --grad-klein sind 13px und
   damit die Untergrenze fuer Text auf --grund-tief (Tokensatz, Abschnitt 5)."
   Die Gruppenaufschrift stand mit 12 px darunter — als einzige Stelle im
   ganzen Stilblatt.

   DIE NEUEN ZAHLEN, BEIDE AUS DEM VORHANDENEN SATZ:

     .untermenue-wort   var(--grad-text) = 16 px, Gewicht 650.
                        16 px, weil der Tokensatz sie als Untergrenze fuer
                        lesbaren Text nennt und der Sammelpunkt damit nicht
                        mehr unter seinen 17-px-Eintraegen liegt. 650 ist das
                        Gewicht, das `.zeilentitel` und der Vereinsbuchname
                        schon fuehren — die naechste Stufe ueber 600 im
                        Bestand, keine neue.

     .untermenue-titel  var(--grad-klein) = 13 px, Gewicht 600, KEINE VERSALIEN.
                        Das ist Zeichen fuer Zeichen die Form, die `.liste th`
                        seit jeher traegt (--grad-klein, --tinte-leise, 600) —
                        die vorhandene Aufschriftenform des Portals, samt ihrer
                        Begruendung fuer genau diese Untergrenze. Ein zweiter
                        Aufschriftengrad daneben waere eine zweite Wahrheit.

   DIE VERSALIEN FALLEN, und das ist der Teil, der ohne die Zahlen unsichtbar
   bliebe: `text-transform: uppercase` mit `letter-spacing` kostet bei kleinem
   Grad genau die Wortform, an der man ein Wort erkennt, ohne es zu lesen. Der
   Betreiber nennt die Aufschrift „viel zu klein" — sie war klein UND in
   Versalien, und beides zusammen ist mehr als die Summe.

   WAS NICHT VERAENDERT IST: der Einzug, der Zierschnitt am Sammelpunkt, die
   Farben. Nur Grad, Gewicht und die Versalien. */
.untermenue .untermenue-wort {
  font-family: var(--schrift-zier);
  /* tabular-nums, weil Bitter Pro proportionale Ziffern hat (siehe :root) —
     dieselbe Auflage wie an jeder anderen Regel mit dem Zierschnitt. Ein
     Modulname traegt selten eine Ziffer und darf sie tragen. */
  font-variant-numeric: tabular-nums;
  font-size: var(--grad-text);
  font-weight: 650;
  color: var(--tinte);
  padding: 10px 0 2px;
}
/* UND AM 06.09.2026 (SPAETER) KAM DIE FAMILIE DAZU — „IN EINER FALSCHEN
   SCHRIFTART".

   BETREIBER am selben Tag, nach dem naechsten Blick aufs Handy: „Die
   Überschriften im Menü sind immer noch zu klein und in einer falschen
   Schriftart. Optisch auch besser gliedern."

   GEMESSEN (chromium 1194, echte 390 px, `.geraet-untermenue` aufgeschlagen):

     .untermenue-punkt a   17 px   "Source Sans 3"   die EINTRAEGE
     .untermenue-wort      16 px   "Bitter Pro"      die Ueberschrift
     .untermenue-titel     13 px   "Source Sans 3"   die zweite Ueberschrift

   ZWEI FAMILIEN FUER ZWEI EBENEN DERSELBEN LISTE, und die untere hatte gar
   keine gesetzt — sie erbte --schrift-text. Die Aufschrift traegt jetzt die
   Familie der Ebene UEBER ihr; damit hat die Liste eine Auszeichnungsschrift
   und nicht zwei.

   `font-variant-numeric: tabular-nums` GEHOERT ZUM ZIERSCHNITT, siehe :root
   und die Regel darueber — eine Gruppenaufschrift kann eine Jahreszahl
   tragen.

   DER GRAD BLEIBT HIER --grad-klein UND WAECHST NUR IM BLATT, eine Regel
   weiter unten. Der Grund ist, dass diese Regel ZWEI Orte bedient: das Blatt
   am Geraet (Eintraege 17 px) und die Seitenleiste am Schreibtisch
   (`.leiste-untermenue .untermenue a`, 14 px). Eine Zahl fuer beide waere eine
   Zahl ueber zwei Gegenstaende. */
.untermenue .untermenue-titel {
  font-family: var(--schrift-zier);
  font-variant-numeric: tabular-nums;
  font-size: var(--grad-klein);
  font-weight: 600;
  color: var(--tinte-leise);
  padding: 8px 0 2px 12px;
}

/* ---------------------------------------------------------------------------
   DIE ZWEI AUFSCHRIFTEN IM BLATT — GRAD UND GLIEDERUNG (06.09.2026)

   „Die Überschriften im Menü sind immer noch zu klein … Optisch auch besser
   gliedern." Der erste Anlauf am selben Tag hatte beide auf einen Grad des
   TOKENSATZES gehoben (12 -> 13, 13 -> 16) und war damit gruen — und beide
   standen trotzdem UNTER dem Grad ihrer eigenen Eintraege (17 px). Was kleiner
   ist als seine Kinder, liest sich als deren Beisatz.

   DIE ZWEI GRADE, BEIDE AUS DEM BESTAND:

     .untermenue-wort   var(--grad-gross) = 20 px. Der naechste vorhandene Grad
                        ueber den 17 px der Eintraege — dieselbe Herleitung,
                        mit der `.zeilentitel` am 06.09.2026 auf --grad-gross
                        kam.
     .untermenue-titel  17 px. Der Grad, den `.menue-liste a` in genau dieser
                        Liste fuehrt und der weiter oben begruendet ist („17px
                        und nicht --grad-text"). DIE AUFSCHRIFT STEHT DAMIT AUF
                        DEM GRAD IHRER ZEILEN UND NICHT DARUNTER.

   WARUM HIER EINE ZAHL STEHT UND KEIN TOKEN: Zwischen --grad-text (16) und
   --grad-gross (20) hat der Tokensatz nichts. 16 waere wieder einen Pixel
   unter den Eintraegen, 20 machte die Unterebene so laut wie die Ebene
   darueber. Die 17 sind nicht erfunden — sie sind die Zahl der Zeilen, ueber
   denen die Aufschrift steht, und die Zusicherung in
   tests/faelle/060_bedienkonzept.php vergleicht gegen GENAU DIESE Regel und
   nicht gegen eine hingeschriebene 17.

   NUR IM BLATT (`.menue-liste.untermenue`) UND NICHT IN DER SEITENLEISTE: Dort
   traegt dieselbe Klasse eine 14-px-Zeile. Die Seitenleiste bleibt, was sie
   war — sie war nicht Gegenstand seiner Beanstandung, und ihre Aufschrift
   liegt mit 16 px ueber ihren 14-px-Eintraegen.

   ── DIE GLIEDERUNG ──────────────────────────────────────────────────────
   „Optisch auch besser gliedern." Gemessen im selben Lauf: Jeder Eintrag trug
   eine Haarlinie unten, die zwei Aufschriften trugen keine. Die einzige Linie
   im Blatt trennte Zeile von Zeile — nie Gruppe von Gruppe. Aufschrift und
   Eintraege sahen gleich aus, nur eingerueckt.

   EINE AUFSCHRIFT SETZT IHRE GRUPPE JETZT MIT LINIE UND LUFT AB. Die Linie
   laeuft ueber die ganze Blattbreite und nicht nur ueber die Textspalte — der
   negative Aussenabstand hebt die 16 px Innenabstand von `.menue-liste` auf
   und der Innenabstand der Aufschrift setzt sie wieder. So unterscheidet sich
   die GRUPPENlinie von der ZEILENlinie durch ihre Laenge und braucht keinen
   zweiten Ton.

   KEINE FARBIGE 3-PX-KANTE: ADR-0030 samt Nachtraegen — es gibt genau eine,
   und sie ist vergeben. Dies ist --linie und 1 px, dieselbe Haarlinie, die die
   Menuezeile schon fuehrt.

   UND DIE ZEILE VOR EINER AUFSCHRIFT GIBT IHRE EIGENE LINIE AB. Ohne diese
   Haelfte stehen zwei Haarlinien uebereinander, getrennt durch die Luft der
   Aufschrift — das sieht man nur im Bild, und die Kette misst keine Kanten.
   `:has(+ …)` und nicht eine Klasse am `li`: Welche Zeile die letzte ihrer
   Gruppe ist, entscheidet die Stellung und nicht das Markup. Kennt ein Browser
   `:has()` nicht, steht die zweite Linie da — der Zustand von gestern und kein
   Schaden.

   DER EINZUG BLEIBT, WIE ER WAR, und das ist gemeldet und nicht vergessen:
   Die Eintraege einer Gruppe tiefer einzuruecken als ihre Aufschrift braeuchte
   einen Waehler „jeder Punkt NACH einer Aufschrift" (`~`). Der trifft auch
   Punkte einer spaeteren Gruppe OHNE Aufschrift und rueckt sie falsch ein —
   eine Regel, die in einer Reihenfolge stimmt und in der naechsten nicht.
   --------------------------------------------------------------------------- */
.menue-liste.untermenue > .untermenue-wort {
  font-size: var(--grad-gross);
  margin-left: -16px;
  margin-right: -16px;
  padding: var(--abstand) 16px 4px;
  border-top: 1px solid var(--linie);
}
.menue-liste.untermenue > .untermenue-titel {
  font-size: 17px;
  margin-left: -16px;
  margin-right: -16px;
  padding: var(--abstand) 16px 4px 28px;
  border-top: 1px solid var(--linie);
}
/* Die erste Zeile des Blattes braucht keine Linie nach oben: Ueber ihr steht
   der Griff und sonst nichts. */
.menue-liste.untermenue > :first-child { border-top: 0; }
.menue-liste.untermenue > li:has(+ .untermenue-wort) a,
.menue-liste.untermenue > li:has(+ .untermenue-titel) a {
  border-bottom: 0;
}
/* DER EINZUG SITZT AM `li` UND NICHT AM `a`, UND DAS IST GEMESSEN UND KEINE
   Vorliebe: `.menue-liste a[aria-current="page"]` setzt eigene Werte fuer
   `margin-left` und `padding-left` — ein Einzug am Anker verschwaende beim
   Wechsel auf die aktive Zeile, und der Punkt spraenge nach links.

   UND ES GIBT HIER KEINE EIGENE KANTE FUER DIE AKTIVE ZEILE. Die Flaechen
   tragen `class="menue-liste untermenue"`, also gilt die Kante von
   `.menue-liste` — sie ist DIESELBE und keine zweite. Eine eigene waere die
   zweite farbige 3-px-Kante, und tests/faelle/160_marke.php misst genau das:
   „Eine zweite farbige 3-px-Kante an einer Karte macht die erste zu Dekor." */
.untermenue .untermenue-punkt { padding-left: 12px; }

/* IN DER SEITENLEISTE STEHT DASSELBE OFFEN UND OHNE OEFFNER, weil dort Platz
   ist — der Vorgaenger macht es genauso. Es steht EINGERUECKT unter seinem
   Modul, damit die Zugehoerigkeit ohne ein zweites Wort sichtbar ist, und OHNE
   Zeilentrenner: Die Leiste fuehrt keine, und eine Linie nur an diesen Zeilen
   sae­he aus wie ein abgesetzter Block. */
.leiste-untermenue { list-style: none; }
.leiste-untermenue .untermenue {
  list-style: none;
  margin: 0;
  padding: 0 0 6px 18px;
}
.leiste-untermenue .untermenue a {
  min-height: 36px;
  padding: 0 18px;
  font-size: 14px;
  border-bottom: 0;
}
.leiste-untermenue .untermenue a:hover { background: var(--grund); }
.leiste-untermenue .untermenue a[aria-current="page"] {
  margin-left: 0;
  padding-left: 18px;
  background: none;
  border-left: 0;
  box-shadow: inset 3px 0 0 var(--verein);
}
.leiste-untermenue .untermenue .untermenue-wort,
.leiste-untermenue .untermenue .untermenue-titel { padding-left: 18px; }
.leiste-untermenue .untermenue .untermenue-punkt a { padding-left: 30px; }

/* ---------------------------------------------------------------------------
   `Abmelden` IM MEHR-BLATT (Design, 29.08.2026: „Der ‚Angemeldet‘-Block im
   Mehr-Blatt entfaellt. Die ZEILE ‚Abmelden‘ bleibt dort.").

   SIE SIEHT AUS WIE EINE MENUEZEILE UND IST KEINE: `.menue-liste` ist die
   Liste der Module, und `Abmelden` ist kein Modul. Deshalb ein eigenes
   Formular unter der Liste statt eines elften Eintrags darin — die Zahl der
   Module bleibt die Zahl der Module.

   DIE MASSE SIND DIE DER MENUEZEILE UND STEHEN HIER NOCH EINMAL: derselbe
   Innenabstand 16, dieselbe `--zeile-hoehe`, derselbe Grad. Das ist eine
   Wiederholung mit Grund — zwei Elemente, die gleich aussehen sollen, aber
   nicht dasselbe sind, ueber einen gemeinsamen Waehler zu binden hiesse, dass
   die naechste Aenderung an der Modulliste diese Zeile mitnimmt.

   KEINE KANTE UNTEN: Sie ist die letzte Zeile vor dem dunklen Fuss, und der
   traegt seine eigene Kante durch den Farbwechsel.

   ES IST EIN KNOPF UND KEIN VERWEIS, weil dahinter ein POST steht. Er sieht
   aus wie eine Zeile: keine Flaeche, kein Rand — dieselbe Bauform, die der
   Abmeldeknopf im alten Benutzerblatt hatte.
   --------------------------------------------------------------------------- */
.menue-austritt {
  margin: 0;
  padding: 0 16px;
}
.menue-abmelden {
  display: flex;
  align-items: center;
  width: 100%;
  min-height: var(--zeile-hoehe);
  padding: 0;
  background: none;
  border: 0;
  font-family: inherit;
  font-size: 17px;
  font-weight: 600;
  color: var(--tinte);
  text-align: left;
  cursor: pointer;
}
.menue-abmelden:hover,
.menue-abmelden:focus-visible { text-decoration: underline; text-underline-offset: 3px; }

.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, dieselbe Zahl wie an `.anmeldeflaeche > .meldung` drei
   Zeilen weiter oben, damit Meldung und Block an derselben Kante beginnen.

   BERICHTIGT AM 02.09.2026. HIER STAND: „22rem ist dieselbe Breite, die
   `.formular-schmal` im ganzen Portal fuehrt, und keine zweite Zahl fuer
   dieselbe Sache." DIE KLASSE GIBT ES NICHT MEHR (gefallen am selben Tag mit
   ihrem einzigen Verwender, Vermerk bei `.formular` weiter oben).

   UND DER SATZ WAR SCHON VORHER SCHIEF: Eine gemeinsame QUELLE gab es nie —
   beide Stellen schrieben 22rem hin. Der Verweis behauptete eine Bindung, die
   es mechanisch nicht gab. Wer die Anmeldeflaeche schmaler will, aendert die
   zwei Zahlen HIER; ausserhalb dieses Abschnitts haengt nichts daran. */
.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 ANMELDEKNOPF TRAEGT NICHT MEHR DIE GANZE BREITE — 02.09.2026.

   HIER STAND:

       .anmelde-formular .knopf-haupt { width: 100%; justify-content: center; }

   mit der Begruendung: „Der Knopf traegt die ganze Breite: Es ist die einzige
   Handlung auf der Flaeche, und am Handy ist eine volle Zeile der sicherste
   Treffer." Daneben stand ein zweiter, gemessener Satz, der WEITER GILT und
   deshalb hier bleibt: Die Breite kam aus `width` und nicht aus dem
   Flexcontainer — `justify-content: stretch` an `.formular-fuss` ist auf einem
   Flexcontainer wirkungslos (Box Alignment bildet ihn auf `flex-start` ab).

   DER BETREIBER HAT DIE BREITE AM 02.09.2026 AUFGEHOBEN, im Wortlaut: „Ein
   Button ist niemals vollbreit!" — ausdruecklich auch auf der Anmeldeflaeche
   (ADR-0024, Nachtrag vom 02.09.2026, Punkt 1). Die Begruendung „sicherster
   Treffer" ist damit nicht widerlegt, sondern ueberstimmt; die 44 px Hoehe
   der Treffflaeche bleiben unangetastet.

   DIE GANZE REGEL FAELLT UND NICHT NUR IHR `width`, und das ist gemessen:
   `justify-content: center` steht bereits in `.knopf-haupt` selbst. Die Zeile
   hier wiederholte es nur — eine Regel, die nichts mehr entscheidet, sieht
   beim naechsten Lesen nach einer Absicht aus, die es nicht gibt.

   WO DER KNOPF JETZT STEHT: in seinem `.formular-fuss`, also rechts
   (`justify-content: flex-end`) — dieselbe Stelle wie jede andere Hauptaktion
   im Portal. Gemessen (chromium 1194 ueber das Fernsteuerungsprotokoll, echte
   390 px, 02.09.2026): vorher 352 von 352 px, danach 134 px.
   --------------------------------------------------------------------------- */

@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 {
  /* DER FUSS IST WEISS UND STEHT UNTEN — ADR-0078 (08.09.2026), Punkt 3;
     Lieferung 08.09.2026, BAUTEILE.md Seitenfuss. Der Betreiber am Bild: „Dann
     den Footer nicht aufsteigen lassen, sondern unten floaten lassen — Laeuft
     mit Vereinswart links, Hilfe und Support rechts. Hintergrund weiss."

     HIER STAND BIS ZUM 08.09.2026 `margin-top: 2.5rem` und `background:
     var(--grund)` (Design, 29.08.2026, Punkt 11: „Lage hell: Flaeche --grund")
     — samt dem Satz, dass die Flaeche dasteht und nicht geerbt wird (bis dahin
     trug `.fuss` gar keine, im Browser gemessen `rgba(0, 0, 0, 0)`). Der Satz
     gilt weiter, die Flaeche ist eine andere: --karte, mit der Haarlinie
     --linie oben als Trennung vom Grund. In diesem Punkt abgeloest durch
     ADR-0078; der Abstand nach oben kommt jetzt aus dem Seitenlauf (Raster
     beziehungsweise Flex-Spalte, die den Fuss unten haelt), nicht aus einem
     Rand. */
  margin-top: 0;
  background: var(--karte);
  /* 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;
  /* VOLLE BREITE DER SPALTE (Lieferung 08.09.2026: `width: 100%; max-width:
     none`). Bis zum 08.09.2026 stand hier `max-width: 1100px` mit auto-Raendern
     — die Hoechstbreite des Inhalts, und der Fuss trug sie mit. Er ist jetzt
     die zweite Zeile des Seitenlaufs und so breit wie dessen Spalte. */
  width: 100%;
  max-width: none;
  margin-left: 0;
  margin-right: 0;
  border-top: 1px solid var(--linie);
  /* EINE ZEILE AB 700 PX: Marke links, Hilfe und Support rechts (BAUTEILE.md
     Seitenfuss: „display:flex; justify-content: space-between;
     align-items:center; gap 16"). Gemessen an der gelieferten Seite: 71 px
     hoch bei 1280, 59 px bei 834. Unter 700 zwei Zeilen mittig — der Block
     dafuer steht weiter unten, HINTER `.fuss-hilfe`, aus dem Grund, der dort
     steht. Bis zum 08.09.2026: `gap: var(--abstand)`, ohne Ausrichtung. */
  display: flex;
  flex-direction: row;
  flex-wrap: nowrap;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  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 700 PX ZWEI ZEILEN, MITTIG — ADR-0078 (08.09.2026), Punkt 3. Der
   Betreiber am Bild: „Fusszeile bitte zweizeilig und zentrieren." Marke oben,
   Hilfe und Support darunter, Abstand 10, Innenabstand 16/14 (BAUTEILE.md
   Seitenfuss). Gemessen an der gelieferten Seite bei echten 390 px: 85 px
   hoch, Mitte beider Zeilen bei x = 195.

   HIER STAND BIS ZUM 08.09.2026 EIN BLOCK `(max-width: 1119px)`, der das
   Fussband ab dem Tablet LINKS STAPELTE (Gestaltung, 20.08.2026, Antwort auf
   Rueckfrage 7; `gap: 12px` nach Design, 29.08.2026, Punkt 11). Er ist mit
   ADR-0078 abgeloest: Zwischen 700 und 1119 gilt jetzt die EINE Zeile der
   Grundregel (Marke links, Hilfe und Support rechts), wie ab 1120.

   SEIN ANLASS BLEIBT UND GILT AUCH FUER DIESEN BLOCK: `.fuss-hilfe` traegt in
   seiner Grundregel `margin-left: auto`. Ein Block, der das zuruecknimmt, muss
   HINTER ihr stehen, sonst setzt die spaetere Grundregel das auto gleich
   wieder — dieselbe Falle wie bei `.fuss { padding }` am 20.08.2026. Deshalb
   steht dieser Block hier und nicht weiter oben. `margin: 0` ist die Kurzform
   und nimmt beide Seiten; `justify-content: center` richtet den Inhalt der
   zwei Flex-Zeilen (Marke: Wort, Zeichen, Wortmarke; Hilfe: zwei Verweise)
   in sich mittig aus.

   DIE ZUSICHERUNG „Kein Block des Fussbands behaelt im Stapel einen eigenen
   linken Rand" in 060_bedienkonzept.php gilt weiter; sie faengt jeden
   `.fuss-`-Block, der wieder einen bekommt. */
@media (max-width: 699px) {
  .fuss {
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 10px;
    text-align: center;
    padding: 16px 14px;
  }
  .fuss .fuss-marke { margin: 0; justify-content: center; }
  .fuss .fuss-hilfe { margin: 0; justify-content: center; }
}

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

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

/* Stimmenchips in Meine Mappe — Betreiber 13.09.2026: „Chips zum Abtippen.
   Alle Stimmen und dann jeweils die Einzelstimmen." `.inhalt a` legt die
   Verweiskante auf jedes <a>; die Marke hat schon ihren Rand. Ohne diese
   Zeile saeße unter dem Chip ein zweiter Strich in --linie-stark. 44 px,
   weil ein Chip zum Abtippen eine Treffflaeche ist (ADR-0024). */
.inhalt .filterzeile.stimmenfilter a.marke {
  border: 1px solid var(--linie);
}
.inhalt .filterzeile.stimmenfilter a.marke:hover,
.inhalt .filterzeile.stimmenfilter a.marke:focus-visible {
  border-color: var(--verein);
}
.inhalt .filterzeile.stimmenfilter .marke {
  display: inline-flex;
  align-items: center;
  min-height: 44px;
  padding: 0 12px;
}
/* DAS STIMMENSTUECK IM CHIP IST EIN TEXTLAUF UND KEIN FLEX-KIND — 16.09.2026
   (abends), gemessen am ersten Bild nach dem Bau von `.buchname-stimme`
   (Abschnitt „Meine Mappen", na2): Der Chip ist `inline-flex`, und ein
   Flex-Behaelter macht aus dem Text davor und dem Span ZWEI Kinder. Die
   Luecke am Ende des ersten fiel weg („Marschbuch 1 –1. Flügelhorn in B",
   217 statt 220 px), und bei 360 px stand ein langer Name zweispaltig im
   Chip — Text zweizeilig links, Stimme rechts daneben. `display: contents`
   loest den Kasten des Spans auf, sein Text wird Teil des einen Textlaufs;
   `white-space: nowrap` erbt er trotzdem. Gemessen bei 360 px: „Konzertmappe
   Frühjahrskonzert –" / „1. Flügelhorn in B", ein Chip, 326 px. Der <h1> und
   die Buchliste sind kein Flex-Behaelter und brauchen die Zeile nicht. */
.inhalt .filterzeile.stimmenfilter .marke .buchname-stimme { display: contents; }

/* ---------------------------------------------------------------------------
   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); }

/* ===========================================================================
   DIE SEITE „DATEN" — DREI ABSCHNITTE UND EINE STRECKE

   Design, 29.08.2026: `design-anweisung-29-08-2026-daten.md` mit den zwei
   Beiblaettern `daten-ordnung-29-08-2026.html` und
   `daten-zuordnung-29-08-2026.html`. Alle Masse dort bei 1496 px am
   Rendervorgang abgelesen; hier steht keine Zahl, die nicht dort steht.

   WO DIE ZWEI QUELLEN AUSEINANDERGEHEN, GILT DAS BEIBLATT: Es ist die
   juengere Lieferung desselben Tages und widerruft die Anweisung an drei
   Stellen ausdruecklich (--loden-hell, --loden-tief, der Zaehlerstreifen).
   Jede dieser drei Stellen steht unten bei ihrer Regel.
   =========================================================================== */

/* ---------------------------------------------------------------------------
   HIER STAND DIE ABSCHNITTSZEILE — Herein · Hinaus · Loeschbegehren.
   ENTFALLEN AM 03.09.2026 MIT ADR-0063.

   `.abschnittszeile` und `.abschnitt-eintrag` trugen die geteilte
   Registerleiste der Seite „Daten": 52 px, weiss, 14 px Abstand, Haarlinie
   unten, der aktive Eintrag in der Vereinsfarbe mit 2 px Unterkante.

   DER BETREIBER HAT DIE LEISTE AUFGEHOBEN, im Wortlaut: „die punkte import und
   export und separat löschbegehren [wären] eigene punkte im administrationsmenü
   des vereins … die seite mit dem sammelsurium daten generell entfernen." Drei
   Punkte, drei Adressen — es gibt nichts mehr zu waehlen, wo die Leiste stand.

   WAS MIT IHR VERLOREN GEHT, UND ES IST AUFGESCHRIEBEN STATT VERSCHWIEGEN:
   Der wichtigste Satz der alten Regel war „SIE HEISST NICHT `.modulzeile`" —
   zwei Dinge unter einem Namen waeren zwei Wahrheiten ueber dieselbe Klasse,
   und zwischen 700 und 1119 px stuenden dann die Module UND die Abschnitte in
   derselben Zeile. Die Verwechslungsgefahr ist mit der Leiste weg; die Regel
   dagegen ist es auch. Wer eine Abschnittsleiste zurueckbringt, bringt beides
   zurueck — der volle Wortlaut steht im Verlauf dieser Datei.

   UND EINE ENTSCHEIDUNG, DIE MIT IHR RUHT: Das Beiblatt zeichnete die aktive
   Kante in MESSING, gebaut war sie in der Vereinsfarbe — ADR-0030, „Messing
   markiert ausschliesslich Verpflichtung", und ein Reiter markiert, wo ich
   stehe, und verlangt nichts. Diese Abweichung war gemeldet und nicht still
   entschieden; sie gilt weiter fuer jede kuenftige Reiterleiste.
   --------------------------------------------------------------------------- */

/* ---------------------------------------------------------------------------
   DAS KACHELGITTER (Anweisung, Abschnitt 7; Beiblatt eins, `.gitter`).

   `repeat(auto-fit, minmax(420px, 1fr))`, 18 px Abstand. Zwei Kacheln stehen
   nebeneinander, solange der Platz reicht, sonst untereinander.

   `align-items: stretch` UND `height: 100%` AN DER KACHEL sind zusammen die
   eine Vorgabe „eine Reihe waechst auf die hoechste": Die Knoepfe stehen
   dadurch auf einer Linie — auf verschiedener Hoehe laese sich der hoehere
   als der wichtigere.

   18 PX UND NICHT --zonenabstand (14): Der Zonenabstand regelt den Abstand
   ZWISCHEN gestapelten Karten (Uebersicht-Vorgaben, 20.08.2026). Hier stehen
   zwei Kacheln NEBENEINANDER, und die 18 px stehen im Beiblatt. Als eigenes
   Token, damit die Zahl einmal dasteht und nicht in vier Regeln.
   --------------------------------------------------------------------------- */
:root { --kachelabstand: 18px; }

.kachelgitter {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(420px, 1fr));
  gap: var(--kachelabstand);
  align-items: stretch;
}

/* UNTER 460 PX WAERE minmax(420px, 1fr) BREITER ALS DIE SPALTE und schoebe die
   Seite waagrecht. `1fr` allein laesst die Kachel fallen, ohne die
   Mindestbreite dort aufzugeben, wo sie traegt. Die Bruchkante ist die des
   Blattes (700 px) und keine neue: Darunter steht ohnehin alles untereinander,
   und die Vorgabe „zwei nebeneinander, solange der Platz reicht" ist damit
   erfuellt und nicht gebrochen. */
@media (max-width: 699px) {
  .kachelgitter { grid-template-columns: 1fr; }
}

.kachelgitter > .karte {
  display: flex;
  flex-direction: column;
  height: 100%;
}

/* DER KNOPF STEHT ZULETZT (Anweisung, Abschnitt 7; Beiblatt `.tun`).
   `margin-top: auto` schiebt den Fuss ans untere Ende der Kachel — das ist die
   eine Haelfte der Vorgabe „die Knoepfe stehen auf einer Linie"; die andere
   ist `height: 100%` darueber. */
.kachelgitter > .karte > .formular-fuss,
.kachelgitter > .karte > form > .formular-fuss {
  margin-top: auto;
}

/* ---------------------------------------------------------------------------
   DER SATZ UEBER DER ERSTEN KACHEL (Anweisung, Abschnitt 3).

   „Der Zugang endet am … Bis dahin kannst du den Bestand ziehen." In --tinte,
   Linie links, KEIN ROT — eine Frist ist kein Alarm (ADR-0053).

   EIN PX UND NICHT DREI, obwohl das Beiblatt drei zeichnet — und die Zahl ist
   nicht gewaehlt, sondern die einzige, die uebrig bleibt:

     3 px  ist die Signatur der Verpflichtungskante. tests/faelle/060 sammelt
           JEDE 3-px-Kante ausser der in --linie und haelt die Menge gegen zwei
           benannte Namen; eine dritte waere rot — zu Recht, denn „die Kante
           ist das Zeichen, nicht die Farbe" (ADR-0030, Nachtrag 21.08.2026).
     2 px  faellt unter „nur die Verpflichtungskante ist eine SENKRECHTE Kante
           ab 2 px" (dieselbe Datei). Ein Fristsatz ist keine Verpflichtung: Er
           nennt ein Datum und verlangt nichts.
     1 px  ist die Zierlinie und traegt keine Signatur.

   GEMELDET. Was hier steht, ist die Linie links in --tinte, wie die Anweisung
   sie verlangt — nur in der einzigen Staerke, die keine Bedeutung wegnimmt.
   --------------------------------------------------------------------------- */
.fristsatz {
  border-left: 1px solid var(--tinte);
  padding: 12px var(--abstand);
  margin: 0 0 var(--kachelabstand);
  color: var(--tinte);
  max-width: var(--satzbreite);
}

/* ---------------------------------------------------------------------------
   DIE STRECKE (Beiblatt zwei).

   KEINE SEITENLEISTE, KEINE MODULZEILE, KEINE FUSSLEISTE: „Eine Strecke nimmt
   den Bildschirm. Ein Modulwechsel mitten im Vorgang waere ein Ausgang ohne
   Rueckweg." Der Ausgang heisst `Abbrechen` und steht oben rechts.

   DER SCHRITTKOPF: weiss, 1 px --linie unten, Modultitel links, die vier
   Schritte rechts. Padding 16px, Abstand 20px — beides aus dem Beiblatt.

   DER SEITLICHE RAND IST DER DES KOPFBANDES (24 px) UND NICHT --seitenrand,
   und das ist am Bild gemessen: --seitenrand ist unter 700 px NULL, weil dort
   die Karten randlos an der Geraetekante liegen. Der Schrittkopf ist keine
   Karte, sondern ein BAND — wie `.kopf` darueber. Mit 0 px stand „Daten
   herein" bei 390 px an der Kante des Bildschirms.

   14 PX WIE `.kopf` UNTER DER BRUCHKANTE WAEREN DIE GENAUERE ANGLEICHUNG und
   sind hier absichtlich NICHT gesetzt: Das Band darunter traegt Text in
   Fliessrichtung, keine Zeichen; 24 px halten ihn auf beiden Seiten frei,
   ohne dass eine zweite Bruchkante entsteht. Wer die Angleichung will, setzt
   sie mit derselben Bedingung wie `.kopf` und nicht daneben.
   --------------------------------------------------------------------------- */
.streckenkopf {
  display: flex;
  align-items: center;
  gap: 20px;
  flex-wrap: wrap;
  padding: 16px 24px;
  background: var(--karte);
  border-bottom: 1px solid var(--linie);
}

.streckenkopf-titel {
  font-weight: 600;
  font-size: var(--grad-gross);
}

.streckenschritte {
  display: flex;
  align-items: center;
  margin-left: auto;
}

/* DIE VIER SCHRITTE, GETRENNT DURCH 1-PX-STRICHE. Als Pseudoelement und nicht
   als Rand am Element: Ein Rand am ersten Schritt saesse links aussen und
   sagte, davor stuende noch etwas. */
.streckenschritt {
  position: relative;
  padding: 0 14px;
  font-size: 15px;
  color: var(--tinte-leise);
}

.streckenschritt + .streckenschritt::before {
  content: "";
  position: absolute;
  left: 0;
  top: 50%;
  width: 1px;
  height: 14px;
  background: var(--linie);
  transform: translateY(-50%);
}

/* DER LAUFENDE SCHRITT IN --tinte HALBFETT, die uebrigen leise. */
.streckenschritt[aria-current="step"] {
  color: var(--tinte);
  font-weight: 600;
}

/* DER AUSGANG. Unterstrichen und kein Knopf: Er schreibt nichts, er geht
   zurueck — dieselbe Unterscheidung wie bei `Verwerfen` auf der Datenseite. */
.streckenausgang {
  margin-left: 22px;
  font-size: 15px;
}

/* ---------------------------------------------------------------------------
   DER ZAEHLER.

   KEINE GETOENTE FLAECHE — und das ist eine BERICHTIGUNG des Beiblatts an der
   Anweisung, im Wortlaut des Beiblatts: „Er gehoert zum weissen Schrittkopf:
   Flaeche --karte, oben 1 px --linie, unten 1 px --linie-stark gegen --grund."

   Die Anweisung sagte an derselben Stelle „getoenter Streifen --loden-hell";
   dasselbe Beiblatt zieht --loden-hell ausdruecklich aus der Anwendung zurueck
   („1,09 auf --grund und 1,13 auf --karte … ein Wert, der UNTER dem verbotenen
   Fall liegt"). Und --loden-tief ist derselbe Wert wie --grund-tief, das es
   hier schon gibt. ES IST DESHALB KEIN NEUES FARBTOKEN ANGELEGT WORDEN,
   obwohl Bauauftrag r2) zwei verlangt — die juengere Fassung zieht beide
   zurueck. Gemeldet.
   --------------------------------------------------------------------------- */
.streckenzaehler {
  display: flex;
  align-items: center;
  gap: 32px;
  flex-wrap: wrap;
  padding: 18px 24px;
  background: var(--karte);
  border-top: 1px solid var(--linie);
  border-bottom: 1px solid var(--linie-stark);
}

.streckenzaehler-menge {
  font-weight: 600;
  font-size: var(--grad-titel);
  white-space: nowrap;
}

.streckenzaehler-hand {
  margin-left: auto;
  color: var(--tinte-leise);
  font-size: 15px;
  text-align: right;
  max-width: 44ch;
}

.streckenzaehler-hand strong { color: var(--tinte); }

/* DER BALKEN. 10 px, --grund-tief mit einem Rand in --linie-stark, Radius 5.

   DIE FUELLUNG IST --linie-stark UND NICHT DAS DUNKLE LODEN DES BEIBLATTS:
   #343E39 ist der Stellvertreter, mit dem ein eigenstaendiges Blatt den
   gefuellten Knopf zeichnet; in der Anwendung ist das --verein. Eine
   Fortschrittsanzeige in der Vereinsfarbe waere Zugehoerigkeit an einer
   Stelle, die nichts ueber Zugehoerigkeit sagt (ADR-0030: drei Farben, drei
   Bedeutungen). Das Beiblatt nennt fuer den zweiten Balken derselben Fläche
   — den Fuellgrad — ausdruecklich --linie-stark auf --grund-tief; diese hier
   nimmt dieselbe Paarung.

   ER STEHT IN EINER FLAECHE IN --karte, wo --grund-tief mit 1,38 traegt.
   Direkt auf --grund waeren es 1,12 und er waere weg (ADR-0031). */
.balken {
  flex: 1 1 200px;
  max-width: 620px;
  height: 10px;
  background: var(--grund-tief);
  border: 1px solid var(--linie-stark);
  border-radius: 5px;
  overflow: hidden;
}

.balken span {
  display: block;
  height: 100%;
  background: var(--linie-stark);
}

/* ---------------------------------------------------------------------------
   EINE SPALTE JE BILD (Beiblatt `.eine`).

   Links die Quellspalte mit Fuellgrad und drei echten Werten, rechts die Wahl.
   Zwei gleich breite Spalten, 24 px Abstand; darunter untereinander.

   BERICHTIGT AM 29.08.2026 — HIER STAND „unter 900 px untereinander", UND DIE
   ZAHL KAM NICHT AUS DEM BEIBLATT.

   Der Satz las sich wie eine Vorgabe der Gestaltung und war keine. GEMESSEN
   ueber beide Beiblaetter des 29.08.2026 (`daten-zuordnung`, `daten-ordnung`),
   nachdem der eingebettete Zeichensatz aus dem Text entfernt war: NULL
   Fundstellen fuer „900", „899" und `@media`. Die Treffer, die eine rohe Suche
   liefert, stehen ausnahmslos im base64-Block der Schrift.

   Das ist „eine Vorgabe aus zweiter Hand, die als gemessen auftritt" — sie
   wird nicht mehr geprueft, weil sie geprueft aussieht.

   DIE BRUCHKANTE IST JETZT DIE DES BLATTES (700 px) UND KEINE NEUE. 899 war
   die einzige ihrer Art im ganzen Stilblatt; sonst gibt es 699/700, 1119/1120
   und 450/451. Bei `.kachelgitter` steht derselbe Satz und aus demselben
   Grund: Zwei Umbruchpunkte fuer dasselbe Fenster waeren zwei Regeln fuer
   einen Fall.

   GEMESSEN UND NICHT ANGENOMMEN, dass die zwei Spalten bei 700 px noch
   tragen (29.08.2026, Chromium ueber einen eigenen Server, nicht ueber
   file://): Bei 700 px stehen Fuellgrad, drei Werteproben, die drei
   Wahlzeilen mit ihren Saetzen, das Feld-Auswahlfeld und die zwei Teile
   nebeneinander, ohne Beschnitt und ohne waagrechtes Schieben.

   WORAN DIE MESSUNG IHRE GRENZE HAT, und sie gehoert dazu: Die Vorschau
   zeigt diese Flaeche NICHT. `daten-strecke-zuordnen.html` steht dort im
   Zustand „Dieser Schritt braucht eine gelesene Datei" — die Datei reist im
   Formular und liegt nirgends (ADR-0041), also gibt es sie in der Vorschau
   nie. Gemessen wurde deshalb an einer Nachbildung der Markierung aus
   kern/seiten/datenzuordnung.php gegen DIESES Stilblatt, nicht an der
   gebauten Seite.
   --------------------------------------------------------------------------- */
.spaltenpaar {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  gap: 24px;
  align-items: start;
}

@media (max-width: 699px) {
  .spaltenpaar { grid-template-columns: 1fr; }
}

/* DER FUELLGRAD STEHT IMMER, AUCH BEI 100 % (Anweisung, Abschnitt 6): „Eine
   Zuordnung ohne Fuellgrad fuehrt in die Irre — eine Spalte mit vier
   gefuellten von 46 Zeilen ist keine Zuordnung wert." 120 px, --linie-stark
   auf --grund-tief. */
.fuellgrad {
  display: flex;
  align-items: center;
  gap: 10px;
  color: var(--tinte-leise);
  font-size: 15px;
  margin: 0 0 18px;
}

.fuellgrad-balken {
  flex: none;
  width: 120px;
  height: 7px;
  background: var(--grund-tief);
  border-radius: 4px;
  overflow: hidden;
}

.fuellgrad-balken span {
  display: block;
  height: 100%;
  background: var(--linie-stark);
}

/* DREI ECHTE WERTE AUS DER DATEI, mit Zeile und Mitglied. In
   Schreibmaschinenschrift, wie im Beiblatt: Was aus einer fremden Datei
   zitiert ist, soll als Zitat lesbar sein und nicht als Satz dieser
   Anwendung. */
.werteprobe {
  border-top: 1px solid var(--linie);
  margin: 0;
}

.werteprobe > div {
  border-bottom: 1px solid var(--linie);
  padding: 9px 0;
  font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  overflow-wrap: anywhere;
}

.werteprobe .woher {
  display: block;
  margin-top: 2px;
  font-family: inherit;
  font-size: var(--grad-klein);
  color: var(--tinte-leise);
}

/* DIE ZERLEGUNG (Beiblatt `.teile`). Nummer, Quelle in Schreibmaschinenschrift,
   Zielfeld rechts.

   DIE NUMMER IST LEISE UND NICHT IN MESSING, obwohl das Beiblatt Messing
   zeichnet: ADR-0030 — „Messing markiert ausschliesslich Verpflichtung", und
   eine laufende Nummer verlangt nichts. Die Verbotsliste des ADR nennt
   „Messing auf Ueberschriften, Marken oder Kennzahlen" ausdruecklich.
   Gemeldet. */
.teile {
  border-top: 1px solid var(--linie);
  margin: 8px 0 0;
}

.teile > div {
  display: flex;
  align-items: center;
  gap: 14px;
  flex-wrap: wrap;
  padding: 12px 0;
  border-bottom: 1px solid var(--linie);
}

.teile .teilnummer {
  flex: none;
  width: 26px;
  color: var(--tinte-leise);
  font-variant-numeric: tabular-nums;
}

.teile .teilquelle {
  font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  overflow-wrap: anywhere;
}

.teile .teilziel { margin-left: auto; }

/* DIE WAHL (Beiblatt `.wahl`). Drei Zeilen zu 52 px, der Vorschlag der
   Maschine ist vorgewaehlt — „wer einverstanden ist, drueckt einmal". */
.wahlliste {
  border-top: 1px solid var(--linie);
  margin: 4px 0 var(--abstand);
}

.wahlzeile {
  display: flex;
  align-items: flex-start;
  gap: 12px;
  min-height: 52px;
  padding: 12px 0;
  border-bottom: 1px solid var(--linie);
  font-size: 17px;
}

.wahlzeile input { margin-top: 0.35rem; }

.wahlzeile .wahlsatz {
  display: block;
  margin-top: 2px;
  font-size: 15px;
  font-weight: 400;
  color: var(--tinte-leise);
}

/* DIE LEISE ZEILE UNTER DER WAHL: „44 Spalten hat die Maschine zugeordnet." */
.leisezeile {
  display: flex;
  flex-wrap: wrap;
  gap: 24px;
  color: var(--tinte-leise);
  font-size: 15px;
  margin: 22px 0 0;
}

/* ---------------------------------------------------------------------------
   DER BERICHT (Schritt 4). Vier Zeilen, die Zahl rechts.

   DIESE KARTE ENDET BEIM SATZ, „weil kein Beiwerk daneben steht" — das ist
   `.textkarte`, die es seit dem 29.08.2026 gibt, und keine zweite Rechnung.
   Die Berichtkarte traegt sie im Markup.
   --------------------------------------------------------------------------- */
.berichtzeilen {
  border-top: 1px solid var(--linie);
  margin: 18px 0 0;
}

.berichtzeilen > div {
  display: flex;
  gap: 16px;
  padding: 12px 0;
  border-bottom: 1px solid var(--linie);
}

.berichtzeilen > div span:last-child {
  margin-left: auto;
  font-weight: 600;
  font-variant-numeric: tabular-nums;
}


/* ---------------------------------------------------------------------------
   DIE STUFEN EINES BALKENS.

   ALS KLASSEN UND NICHT ALS `style`-MERKMAL: Der CSP aus kern/sicherheit.php
   sagt `style-src 'self'`. Ein Inline-Stil wird verworfen, und ein Balken ohne
   Fuellung saehe aus wie „nichts zugeordnet" — ein stiller Fehler, der das
   Gegenteil dessen behauptet, was er misst.

   FUENFERSCHRITTE: Auf 620 px sind fuenf Prozent 31 px. Feiner waere eine
   Genauigkeit, die niemand ablesen kann. Der Wert kommt aus balkenstufe()
   in kern/bootstrap.php und wird dort gerundet, nicht abgeschnitten.
   --------------------------------------------------------------------------- */
.balken-0 { width: 0%; }
.balken-5 { width: 5%; }
.balken-10 { width: 10%; }
.balken-15 { width: 15%; }
.balken-20 { width: 20%; }
.balken-25 { width: 25%; }
.balken-30 { width: 30%; }
.balken-35 { width: 35%; }
.balken-40 { width: 40%; }
.balken-45 { width: 45%; }
.balken-50 { width: 50%; }
.balken-55 { width: 55%; }
.balken-60 { width: 60%; }
.balken-65 { width: 65%; }
.balken-70 { width: 70%; }
.balken-75 { width: 75%; }
.balken-80 { width: 80%; }
.balken-85 { width: 85%; }
.balken-90 { width: 90%; }
.balken-95 { width: 95%; }
.balken-100 { width: 100%; }

/*
 * VEREINSBUCH (Issue #103, Anweisung 29.08.2026, Bauteile a–j).
 *
 * ANLASS: Drei Handlungen in drei Bauformen am Zeilenende. Die Masse stehen
 * in der Anweisung, Abschnitt 5. NUR `.liste.vereinsbuch` — andere Listen
 * bleiben unangetastet, und `.knopf-zeile` bleibt 25 px Zeichnung (Abschnitt 10
 * des Issues: die 44 px nicht an jede Liste haengen).
 *
 * TABELLENSATZ: `auto`, wie `.liste` im Zeugwart. `table-layout: fixed` plus
 * 220+300+260 px hat die Spalte Konto auf null gedrueckt — „eingerichtet"
 * lief auf den Stift (Betreiber 31.08.2026, Schirm). Das ist der gemessene
 * Befund. Die Karte um die Liste kommt daher, dass Vereinsbuch Zonen setzt
 * und `--grund-tief` auf `--karte` sitzen muss (ADR-0031). Der Zeugwart hat
 * keine Extra-Karte: dort ist `.inhalt` selbst die Karte.
 *
 * FARBE: Zeichen `--tinte`, Zeigen `--grund-tief`, kein Rahmen, kein Zierton.
 * ADR-0030 Nachtrag 21.08.2026: „Die Kante ist das Zeichen, nicht die Farbe."
 * `--messing` als Schrift ist verboten (Nachtrag 28.08.2026).
 */
/* FESTE SPALTENBREITEN — entschieden vom Betreiber am 08.09.2026 („Moeglichkeit
   2", Vereinsbuch-Blatt der Lieferung): `table-layout: fixed`, das Kuerzel so
   breit wie das Kuerzel (76), das Datum so breit wie ein Datum (150), Aemter
   22 %, Instrument 18 %, der Stift so breit wie seine Treffflaeche (72), der
   Name bekommt den Rest. Gemessen an der gelieferten Seite bei 1280 px:
   76 · 292 · 150 · 216 · 177 · 72. Unter 700: 68 · 190 · 130 · 130 · 130 · 72
   bei 660 px Mindestbreite (721 gemessen). Datum rechts und mit Tabellenziffern;
   was zu lang ist, wird gekuerzt und bricht nicht um.

   DIE BREITEN HAENGEN AM SPALTENSCHLUESSEL (`th[data-spalte]`) UND NICHT AN
   `nth-child`: Die gelieferte Seite ist statisches HTML; hier entstehen die
   Koepfe aus der Spaltenwahl, und eine Zaehlung traefe die falsche Spalte,
   sobald jemand das Bild einblendet. */
.liste.vereinsbuch {
  width: 100%;
  margin: 0;
  background: transparent;
  table-layout: fixed;
}
/* 52 PX IST DIE UNTERGRENZE UND KEINE WAHL (Lieferung): Der Stift ist 44 px
   hoch, dazu 4 px Innenabstand oben und unten. Bis dahin 56. */
.liste.vereinsbuch tbody tr { height: 52px; }
.liste.vereinsbuch tbody tr:hover td { background: var(--grund-tief); }
/* HIER STAND BIS ZUM 09.09.2026 `.liste.vereinsbuch thead th { position: sticky;
   top: 0; z-index: 1 }` — die Kopfzeile, die beim Rollen stehen bleibt
   (Design-Anweisung Vereinsbuch, 29.08.2026, Abschnitt Kopfzeile). SEIT DIE
   TABELLE IN DER HUELLE `.listenlauf` STEHT (ADR-0078, Widerspruch 1), TAT SIE
   NICHTS MEHR: Ein Vorfahr mit overflow ungleich visible wird zum Haftbezug,
   und die Huelle rollt nicht senkrecht — gemessen an der Vorschau (1280 x 500,
   echte Breite ueber Emulation.setDeviceMetricsOverride): nach 400 px Rollen
   stand der Kopf 400 px hoeher, mit der Regel wie ohne. Die Lieferung traegt
   dieselbe tote Regel in ihrer byte-gleichen Basis; ihr Bild zeigt keinen
   haftenden Kopf. Eine Regel, die dasteht und nichts tut, faellt
   (060_bedienkonzept.php haelt es: keine Listenregel haftet). DIE VORGABE VOM
   29.08.2026 IST DAMIT AM BILD NICHT EINGELOEST UND NICHT ABGELOEST — ADR-0078
   loest sie in Zeile 6 nur fuer das Register ab; gemeldet, nicht entschieden.
   Ein Kopf, der haften soll, braeuchte eine Huelle, die senkrecht rollt: eine
   andere Bauart und eine Entscheidung des Betreibers. Flaeche und Linie des
   Kopfes kommen aus `.liste th` (--karte, 1 px --linie), wie in jeder Liste. */
table.liste.vereinsbuch th[data-spalte="art"] { width: 76px; }
table.liste.vereinsbuch th[data-spalte="mitgliedschaft"] { width: 150px; }
table.liste.vereinsbuch th[data-spalte="aemter"] { width: 22%; }
table.liste.vereinsbuch th[data-spalte="instrument"] { width: 18%; }
table.liste.vereinsbuch th[data-spalte="mitgliedschaft"],
table.liste.vereinsbuch td[data-titel="Mitgliedschaft"] { text-align: right; font-variant-numeric: tabular-nums; }
table.liste.vereinsbuch td[data-titel="Ämter"],
table.liste.vereinsbuch td[data-titel="Instrument"],
table.liste.vereinsbuch td[data-titel="Mitgliedschaft"] { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
/* DIE ZELLE KUERZT DEN NAMEN SELBST, der Name ist gewoehnlicher Text (Lieferung,
   Vereinsbuch-Blatt, „nach dem Rahmen-Widerruf nachgezogen"); die Marke
   „Vorschlag" steht neben ihm. Kein eigener Grad hier — der kommt aus
   `.zeilentitel` (060_bedienkonzept.php haelt es). */
table.liste.vereinsbuch td[data-titel="Name"] { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
table.liste.vereinsbuch td[data-titel="Name"] .name { display: inline; max-width: none; overflow: visible; }
/* MESSING: GENAU EIN TRAEGER, UND NUR FUER VERPFLICHTUNG (ADR-0030, von
   ADR-0078 ausdruecklich bestaetigt). Eine Zeile mit offenem Vorschlag traegt
   links die 3-px-Kante und die Marke „Vorschlag" in Messing — hier ist etwas
   zu tun. Lieferung, Vereinsbuch-Blatt. */
table.liste.vereinsbuch tbody tr:has(.marke-aktiv) td:first-child { box-shadow: inset 3px 0 0 var(--messing); }
table.liste.vereinsbuch .marke.marke-aktiv {
  background: transparent;
  border: 1px solid var(--messing);
  color: var(--tinte);
  border-radius: 999px;
  padding: 1px 8px;
  font-size: 11px;
  font-weight: 600;
  margin-left: 8px;
  white-space: nowrap;
  vertical-align: middle;
}

/* DIE KONTOSPALTE UND IHR HAKEN — beide Regeln aus der Basis der Lieferung vom
   08.09.2026 (dort 5282 und 5287); mit Scheibe B1 waren sie ohne Anlass
   gefallen, das Markup (kern/seiten/mitglieder.php) verwendete sie weiter.
   Befund der Pruefung vom 09.09.2026; 370_mitgliedschaft.php haelt sie.

   72 PX UND NICHT DIE `1%` DER BASIS — GEMESSEN, NICHT GEWAEHLT: Die Basis
   schrieb die 1 % fuer `table-layout: auto`, wo sie „so schmal wie der Inhalt"
   heissen. Das Vereinsbuch-Blatt derselben Lieferung setzt `table-layout:
   fixed` (oben), und dort sind 1 % woertlich 1 %: Mit `width: 1%` mass die
   eingeblendete Spalte 9,8 px bei 1280, 8 px bei 834, 0 px bei 390 (Vorschau,
   echte Breite ueber Emulation.setDeviceMetricsOverride), und der Kopf
   „Konto" (37,4 px) lief ueber die Nachbarspalte. Die Lieferung zeigt die
   Kontospalte nicht; ein Wert, der fehlt, wird aus dem Bauteil hergeleitet
   (ADR-0078, Entscheidung 5): Kopfwort mit Sortierpfeil „Konto ↓" in der
   Kopfschrift (11 px, 600, Versalien, Laufweite .06em) gemessen 47,7 px, dazu
   2 x 12 Innenabstand = 71,7, also 72 — dieselbe Bauart wie die
   Handlungsspalte (44 + 2 x 14 = 72). Die Spalte traegt ihre Breite am `th`
   (erste Zeile zaehlt im festen Satz); am `td` bleibt die Regel fuer Mitte
   und Nichtumbruch.

   `.liste` DAVOR, WEIL DIE MITTE SONST TOT IST — gemessen am 09.09.2026: Als
   blosse Klasse (0,1,0) verlor `text-align: center` gegen `.liste th, .liste
   td { text-align: left }` (0,1,1), und zwar schon auf 401d947 und in der
   Basis der Lieferung — der Haken stand immer links (td: `left` gemessen).
   Mit `.liste` davor (0,2,0) gewinnt die Mitte. Der Kopf ist ein Flex-Verweis
   (`.listensort`, fuellt die Zelle); dort zentriert `justify-content`, nicht
   `text-align` — Kopfwort und Haken stehen auf einer Achse. */
.liste .vereinsbuch-spalte-konto {
  width: 72px;
  text-align: center;
  white-space: nowrap;
}
.liste th.vereinsbuch-spalte-konto .listensort { justify-content: center; }
.vereinsbuch-haken {
  font-weight: 650;
  color: var(--tinte);
}

.vereinsbuch-spalte-kuerzel { white-space: nowrap; }
.vereinsbuch-spalte-handlung { width: 72px; }

/* DIE BILDSPALTE (ADR-0065).

   `width: 1%` WIE BEI DER KONTOSPALTE: Die Zelle nimmt, was ihr Inhalt
   braucht, und der Rest der Breite bleibt beim Namen. Ohne sie zoege eine
   Spalte mit 40-px-Bildern die Tabelle auseinander.

   DIE ZAHLEN STEHEN AUSSERDEM AM <img> (width/height): Ohne sie springt die
   Zeile, sobald das erste Bild geladen ist — und in einer Liste mit zweihundert
   Zeilen springt sie zweihundertmal. Das Stilblatt setzt dieselben Werte, damit
   ein Bild mit anderem Seitenverhaeltnis die Zeilenhoehe nicht sprengt.

   `object-fit: cover` UND NICHT `contain` — anders als beim Wappen, und das ist
   der Unterschied zwischen einem Zeichen und einem Gesicht: Ein Wappen darf
   nicht beschnitten werden, ein Portraet soll das Quadrat fuellen. */
.vereinsbuch-spalte-bild {
  width: 1%;
  white-space: nowrap;
}
.mitgliedsbild {
  display: block;
  width: 40px;
  height: 40px;
  object-fit: cover;
  border-radius: var(--radius);
  background: var(--grund-tief);
}
.mitgliedsbild-gross {
  width: 160px;
  height: 160px;
}

.vereinsbuch-art {
  display: block;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* 14 PX IN --tinte (Lieferung: Vereinsbuch-Blatt `.vereinsbuch-seit` in
   --tinte, Listenblatt 14 px); das Wort „seit" gehoert zur Angabe. */
.vereinsbuch-seit {
  display: block;
  color: var(--tinte);
  font-size: 14px;
}

.vereinsbuch-fehlend { color: var(--tinte-leise); }

/* DAS KUERZEL IST EINE ANGABE UND KEIN ETIKETT (Lieferung, Vereinsbuch-Blatt):
   schmale Versalien, eine Haarlinie, keine Fuellung; 11 px (TOKENS.md). */
.vereinsbuch-kuerzel {
  display: inline-block;
  min-width: 44px;
  text-align: center;
  padding: 2px 6px;
  border: 1px solid var(--linie);
  border-radius: 4px;
  background: transparent;
  font-size: 11px;
  font-weight: 600;
  letter-spacing: .06em;
  color: var(--tinte-leise);
  font-variant-numeric: tabular-nums;
}

/* AEMTER UND INSTRUMENTE SIND TEXT MIT BEISTRICH, KEINE KAESTCHEN — Betreiber
   am Bild, 08.09.2026: „diese Punkttrennung stoert mich" und „er gehoert ohne
   Abstand beim Vorgaengerwort und mit einfachem Abstand danach." Der Beistrich
   haengt als `::after` am vorigen Wort. Wo eine ausgeblendete Marke im Wort
   steckt, rueckt er um den Wortabstand zurueck (Lieferung 6469).

   DIE MARKE „Haupt" ENTFAELLT IN DER ANZEIGE — Betreiber, 08.09.2026: „Den
   Hinweis Haupt entfernen wir komplett." ADR-0078, Entscheidung Punkt 2: „was
   sie nicht zeigt, ist keiner. Das Feld dahinter bleibt" — das Kaestchen
   „Hauptinstrument" im Reiter ist eine Handlung und keine Anzeige. */
.vereinsbuch-amt {
  display: inline;
  margin: 0;
  padding: 0;
  border: 0;
  background: none;
  color: var(--tinte);
  font-size: 14px;
}
.vereinsbuch-amt:has(+ .vereinsbuch-amt)::after { content: ","; color: var(--tinte); }
.vereinsbuch-amt:has(.marke):has(+ .vereinsbuch-amt)::after { margin-left: -.28em; }
table.liste td .vereinsbuch-amt .marke,
.vereinsbuch-amt .marke { display: none; }

/* DER KOPF DER HANDLUNGSSPALTE TRAEGT KEIN WORT — gemessen, nicht Geschmack
   (Lieferung, Vereinsbuch-Blatt): Die Spalte ist 72 px breit, das Wort
   „bearbeiten" braucht 74; es lief ueber die Kante. Der Name bleibt fuer die
   Vorlesehilfe da (1 x 1 px). */
.vereinsbuch-handlung-kopf {
  width: 72px;
  text-align: right;
}
.vereinsbuch-handlung-kopf .vereinsbuch-gegenstand,
.vereinsbuch-handlung-kopf .vereinsbuch-verb {
  position: absolute;
  width: 1px;
  height: 1px;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
}

/* Ort, Innenabstand und Ausrichtung des Stifts kommen aus
   `.liste td.spalte-aktionen` (4/8, rechts) — hier steht nichts mehr, was
   ihnen widerspraeche. */
.vereinsbuch-zelle-handlung { vertical-align: middle; }

/*
 * 44 px Treffflaeche, 22 px Zeichnung, AM KNOPF SELBST.
 * Anlass: Issue #103 verbietet, `.knopf-zeile` auf 44 px zu heben — das
 * zoege jede andere Liste mit. Deshalb eine eigene Klasse. `height: 44px`
 * (nicht min-height): die Vereinsbuch-Zeile misst bereits mindestens 56 px
 * (Bauteil e), die Treffflaeche darf die Zeichnung fest umschliessen.
 *
 * JEDES ZEICHEN MIT EIGENER HANDLUNG IST EIN KNOPF — ADR-0078 (08.09.2026),
 * Punkt 2. Der Betreiber am Bild: „jetzt ueberall die Zeichen mit separater
 * Funktion als Buttons umsetzen." HIER STAND BIS DAHIN `border: none` und
 * `background: transparent` — der stille, randlose Symbolknopf aus ADR-0024
 * („Zeilenaktionen sind stille Symbolknoepfe, randlos"; abgeloest in diesem
 * Punkt durch ADR-0078). Die Zahlen sind die der Lieferung (BAUTEILE.md,
 * Zeilenaktionen): 44 x 44 (auch als Mindestmass), 1 px --linie-stark,
 * --karte, Radius --radius, Zeichen 22 px; Zeigen --grund-tief; Fokus
 * outline 2 px --verein mit 1 px Abstand. Auf der gezeigten Zeile behaelt der
 * Knopf sein Weiss — das folgt aus `background: var(--karte)` hier und
 * braucht keine zweite Regel an `tr:hover`.
 *
 * DIE GRUNDREGEL UND NICHT `.liste .handlung`, UND DER GRUND DAFUER HAT SICH
 * AM 10.09.2026 GEAENDERT — die Regel nicht.
 *
 * HIER STAND BIS DAHIN: „und das ist gemessen: Jedes `.handlung` des Portals
 * steht in einer `td.spalte-aktionen` einer `.liste` (Kern und Module, 22
 * Dateien am 08.09.2026) — DIE MENGE IST DIESELBE."
 *
 * DIESER SATZ IST SEIT DEM BETRACHTER FALSCH, und zwar gemessen:
 * module/notenarchiv/seiten/betrachter.php setzt VIER `.handlung` in zwei
 * `<span class="steuergruppe">` einer Steuerleiste — Blaettern und Groesse,
 * ueber einer Blattflaeche, in der es gar keine Zeilen gibt. Gezaehlt am
 * 10.09.2026 ueber kern/ und module/: 51 Fundstellen in 23 Dateien, davon 4
 * ausserhalb jeder `.liste`. `.liste .handlung` traefe diese vier NICHT.
 *
 * WARUM DIE ZEILE TROTZDEM SO STEHT, UND DAS IST JETZT DER GRUND, DER TRAEGT:
 * Ein Zeichenknopf traegt seine Bauform, weil er ein Knopf ist (ADR-0078,
 * Punkt 2), und nicht, weil er in einer Tabelle steht. Ein `.handlung` in
 * einer Leiste sieht aus wie eines in einer Zeile — das ist die Absicht.
 * DIE MENGE IST ALSO NICHT MEHR DIESELBE, SONDERN GROESSER, und die
 * Grundregel ist die einzige, die sie ganz erreicht.
 *
 * DIE ALTE BEGRUENDUNG WAR EINE UEBER DEN HEUTIGEN BESTAND, die neue eine
 * ueber die Bauart (.claude/rules/15-lead-und-agent.md: „Wer einen Grund
 * nennt, prueft, ob er den heutigen Zustand oder die Bauart beschreibt").
 * Eine Zahl in diesem Kommentar altert am Tag des naechsten Verwenders; die
 * Bauart nicht.
 *
 * UND DER ZWEITE GRUND STEHT UNVERAENDERT: `.inhalt a.handlung` (0,2,1)
 * schluege `.liste .handlung` (0,2,0) an der Unterkante; der Verweis-Knopf
 * (Verlauf) stuende dann als offenes U neben dem geschlossenen <button>.
 * `.handlung` steht deshalb bei den rahmentragenden Klassen der Kantenregel
 * weiter oben.
 */
.handlung {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 44px;
  height: 44px;
  min-width: 44px;
  min-height: 44px;
  margin: 0 auto;
  padding: 0;
  border: 1px solid var(--linie-stark);
  border-radius: var(--radius);
  background: var(--karte);
  color: var(--tinte);
  vertical-align: middle;
  cursor: pointer;
  text-decoration: none;
}
.handlung { transition: background var(--dauer); }
.handlung:hover,
.handlung:focus-visible {
  background: var(--grund-tief);
  color: var(--tinte);
}
.handlung:focus-visible {
  outline: 2px solid var(--verein);
  outline-offset: 1px;
}

.vereinsbuch-fenster-liste {
  list-style: none;
  margin: 0 0 var(--abstand);
  padding: 0;
}
.vereinsbuch-fenster-liste li {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px;
  padding: 8px 0;
  border-bottom: 1px solid var(--linie);
}
.vereinsbuch-fenster-name {
  flex: 1 1 8rem;
  font-weight: 650;
}
/* `align-items: flex-end` STATT `center` — 17.09.2026, und es ist die Folge der
   Beschriftung und keine eigene Entscheidung.

   Bis zum 17.09.2026 hatte dieses Formular genau zwei sichtbare Kinder gleicher
   Hoehe: das Datumsfeld (47 px) und den Knopf „Beenden" (44 px). `center` und
   `flex-end` waren dabei nicht zu unterscheiden — 1,5 px.

   SEIT DAS FELD EINE BESCHRIFTUNG UEBER SICH TRAEGT, ist sein Behaelter
   `.vereinsbuch-beenden-feld` 70,5 px hoch (19,5 Beschriftung + 4 Abstand + 47
   Feld) und der Knopf weiter 44. Mit `center` stuende der Knopf mittig neben
   BESCHRIFTUNG UND FELD und damit zu hoch.

   GEMESSEN AM 17.09.2026 IM BROWSER und nicht gerechnet — echte 390 px ueber
   Emulation.setDeviceMetricsOverride, ueber http, beide Ausrichtungen am selben
   Bild nacheinander gesetzt:

     flex-end   Unterkante Feld 314,0   Unterkante Knopf 314,0   gleich
     center     Unterkante Feld 314,0   Unterkante Knopf 300,8   13,2 px hoeher

   Mit `flex-end` stehen die Unterkanten von Feld und Knopf auf derselben Linie,
   und die Beschriftung sitzt darueber.

   ADR-0024 (Nachtrag 31.08.2026, Zeilen 123-126) verlangt „das Datum steht
   daneben" — das ist die ZEILE von Feld und Knopf, und die haelt. Gemessen
   nach dem Bau: Knopf rechts vom Feld, Hoehen ueberlappen, bei 390 und
   1280 px. */
.vereinsbuch-beenden {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-end;
  gap: 8px;
  margin: 0;
}
/* DIE BREITE KOMMT AUS DER ZEILE UND NICHT AUS DEM FELDINHALT — 17.09.2026.

   HIER STAND `width: auto`. Das ist die EIGENBREITE des Bedienelements, also
   die Breite seines Inhalts — und der ist leer, seit `bd5f59d` die Vorbelegung
   mit dem heutigen Tag entfernt hat (Abschnitt „Kein Rueckfall auf den heutigen
   Tag"). Was ein leeres Datumsfeld fuer seine Eigenbreite haelt, entscheidet
   die Plattform. Auf dem Telefon des Betreibers war es ein Pfeil in einem rund
   60 px breiten Kaestchen.

   IN DIESEM CHROMIUM IST DAS NICHT NACHZUSTELLEN, und das gehoert dazu:
   Gemessen ist dasselbe Feld mit Wert und ohne Wert 125,3 px breit — der
   Desktop-Chromium haelt den Platz fuer „tt.mm.jjjj" auch leer frei, und auch
   `appearance: menulist-button` (so zeichnet Chrome fuer Android ein
   Datumsfeld) aendert die Zahl nicht. BELEGT IST ALSO DIE BAUART UND NICHT DIE
   ZAHL DES BETREIBERS.

   `flex: 1 1 9rem` STATT EINER FESTEN BREITE, und die 9rem sind ein WUNSCH und
   keine Grenze: Das Feld waechst in den Platz, den der Knopf „Beenden" uebrig
   laesst, und schrumpft darunter, ohne je aus der Karte zu laufen. Die Bauart
   ist die der Zeile darueber — `.vereinsbuch-fenster-name` traegt
   `flex: 1 1 8rem` seit jeher. ENTSCHEIDEND IST NICHT DIE ZAHL, SONDERN DASS
   DIE BASIS NICHT `auto` HEISST: nur dann kommt die Hauptgroesse aus der
   Umgebung statt aus dem Bedienelement.

   `min-width: 0` GEHOERT DAZU UND IST KEINE ZIER: Ein Flex-Element schrumpft
   von sich aus nicht unter seine Inhaltsbreite (`min-width: auto`). Ohne diese
   Zeile schoebe ein Datumsfeld mit Wert die Zeile im schmalen Umbruch
   auseinander.

   DIE ZWEI QUELLEN, AM 17.09.2026 IM WORTLAUT NACHGESEHEN UND NICHT AUS
   ZWEITER HAND UEBERNOMMEN:

   1. docs/gestaltung/lieferungen/design-2026-08-29/
      design-anweisung-29-08-2026-farbe-dunkelmodus-inhaltsbreite.md,
      Zeilen 349-360, „Eingabefeld — die verbindlichen Werte". Von dort kommen
      die 44 px Mindesthoehe, der Innenabstand 10/12, `--radius`, die 1 px
      `--linie-stark`, `--karte` und die 17 px `--tinte` der Regel weiter oben.
      ADR-0024 setzt im Nachtrag vom 27.08.2026 (ab Zeile 469) dieselben 44 px
      als Mindest-Treffbereich jeder Fuellung — beide zeigen in dieselbe
      Richtung, die Zahl ist an zwei Stellen gedeckt.

   2. docs/adr/0024-bedienkonzept.md, Entscheidung Zeilen 42-45: „Beenden in
      der Zeile eines Fensters ist ausgenommen (Nachtrag 31.08.2026): Knopf und
      Datum tragen den Inhalt selbst." Und der Nachtrag selbst, Zeilen 123-126:
      „Der Knopf heisst das Wort, das Datum steht daneben."

   WARUM HIER TROTZDEM KEINE 100 % BREITE STEHT, obwohl Zeile 360 der Vorgabe
   genau das verlangt: DANEBEN HEISST IN DERSELBEN ZEILE. Ein Feld mit 100 %
   Breite fuellt die Zeile allein und schoebe den Knopf „Beenden" in die
   naechste — die Vorgabe waere erfuellt und ADR-0024 gebrochen.
   `flex: 1 1 9rem` haelt beides: Die Hauptgroesse kommt aus der Umgebung und
   nicht aus dem Bedienelement, und der Knopf behaelt seinen Platz. DIE
   ABWEICHUNG VON DER VORGABE IST ALSO GEDECKT UND NICHT UNBENANNT.

   EINGELOEST AM 17.09.2026, UND DER ALTE WORTLAUT STEHT DANEBEN. Hier stand:
   „NICHT GEBAUT UND AUSDRUECKLICH OFFEN: Zeile 357 derselben Tabelle verlangt
   eine Beschriftung von 13 px ‚immer ueber dem Feld'. Das Feld traegt heute nur
   `aria-label="Letzter Tag"`. ADR-0024 sagt dazu nichts; das ist Sichtbares
   und liegt beim Betreiber. Es ist ihm vorgelegt und hier nicht entschieden."

   DER BETREIBER HAT ENTSCHIEDEN, am 17.09.2026 im Wortlaut: „Ueber beiden soll
   eine Beschriftung stehen. Ab: und Bis:" Das Feld traegt seither
   `<label for>Bis:</label>` ueber sich, in `.vereinsbuch-beenden-feld`, mit den
   13 px und dem Abstand 4 px aus Zeile 357 derselben Tabelle. DAS `aria-label`
   IST DABEI GEFALLEN und nicht vergessen worden: Ein Feld hat EINEN Namen,
   und stehen beide da, gewinnt das `aria-label` und verdeckt das, was auf dem
   Schirm steht. Der ausgeschriebene Grund steht am Markup selbst, in
   kern/seiten/mitglieder.php ueber der Aemterliste des Fensters.

   GEMESSEN NACH DEM BAU, echte 390 px und 1280 px, mit Wert und ohne:
   163 x 47 px, einzeilig neben dem Knopf, kein Ueberlauf — vorher
   125,3 x 21,3 px. Zugesichert in tests/faelle/511_datumsfelder.php. */
/* DIE BESCHRIFTUNG STEHT UEBER DEM FELD, UND DESHALB BRAUCHT ES DIESEN
   BEHAELTER — Betreiber, 17.09.2026: „Ueber beiden soll eine Beschriftung
   stehen. Ab: und Bis:"

   `.vereinsbuch-beenden` ist eine ZEILE (Feld neben Knopf, ADR-0024 Nachtrag
   31.08.2026). Eine Beschriftung ueber dem Feld kann darin nicht stehen, ohne
   auch ueber dem Knopf zu stehen. Der Behaelter macht aus dem einen Kind der
   Zeile eine kleine SPALTE: Beschriftung oben, Feld darunter — und der Knopf
   bleibt daneben.

   DIE WERTE SIND NICHT GEWAEHLT, SONDERN ZITIERT: 13 px (`--grad-klein` ist
   0.8125rem) und `--tinte-leise` und der Abstand 4 px stehen in
   docs/gestaltung/lieferungen/design-2026-08-29/
   design-anweisung-29-08-2026-farbe-dunkelmodus-inhaltsbreite.md, Zeile 357 der
   Tabelle „Eingabefeld — die verbindlichen Werte", zusammen mit den 44 px und
   dem Polster, die die Feldregel weiter oben schon fuehrt. Dieselbe Vorgabe
   sagt: „Die Beschriftung steht nie neben dem Feld."

   `flex: 1 1 9rem; min-width: 0` STEHT JETZT HIER UND NICHT MEHR AM FELD, und
   das ist der Grund: In einer Spalte waere `flex-basis: 9rem` eine HOEHE. Am
   Behaelter bleibt es die Hauptgroesse in der Zeile — genau das, was es vorher
   am Feld war. Das Feld selbst nimmt die 100 % Breite aus der Feldregel weiter
   oben und fuellt damit den Behaelter.

   ENTSCHEIDEND IST WIE VORHER, DASS DIE BASIS NICHT `auto` HEISST: nur dann
   kommt die Hauptgroesse aus der Umgebung statt aus dem leeren Bedienelement.
   Der Anlass dafuer steht unveraendert im Block darueber. */
.vereinsbuch-beenden-feld {
  display: flex;
  flex-direction: column;
  gap: 4px;
  flex: 1 1 9rem;
  min-width: 0;
}
.vereinsbuch-beenden-feld > label {
  font-size: var(--grad-klein);
  color: var(--tinte-leise);
}
/* DAS FELD BEHAELT NUR NOCH `min-width: 0` — ein Flex-Element schrumpft von
   sich aus nicht unter seine Inhaltsbreite, und das gilt fuer das Feld im
   Behaelter genauso wie vorher fuer das Feld in der Zeile.

   DIE REGEL BLEIBT ALS REGEL STEHEN, auch wenn sie nur noch eine Zeile fuehrt:
   tests/faelle/120_farbe.php fuehrt diesen Waehler in $keineBedienelemente und
   sichert zu, dass jeder Eintrag beider Listen noch eine Regel im Stilblatt
   hat. Wer sie streicht, macht dort eine Zusicherung rot. */
.vereinsbuch-beenden input[type="date"] {
  min-width: 0;
}
.vereinsbuch-zellenknopf {
  display: block;
  width: 100%;
  margin: 0;
  padding: 4px 0;
  border: 0;
  background: transparent;
  font: inherit;
  color: inherit;
  text-align: left;
  cursor: pointer;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.vereinsbuch-zellenknopf:hover,
.vereinsbuch-zellenknopf:focus-visible { text-decoration: underline; text-underline-offset: 3px; text-decoration-color: var(--verein); }

/* ---------------------------------------------------------------------------
   DIE EIGENE UEBUNGSSTUFE — EIN BAUTEIL, VIER ORTE (ADR-0073)

   SIE STAND BIS ZUM 10.09.2026 IN oeffentlich/betrachter.css. Der Nachtrag vom
   09.09.2026 zu ADR-0073 nennt vier Orte: „in ‚Meine Mappe', im Betrachter, an
   der Stückzeile, und als eigene Kachel auf dem Dashboard des Mitglieds". Drei
   davon sind gewoehnliche Seiten, und KEINE laedt betrachter.css — ADR-0079
   Punkt 3 behaelt es der Zerlegeseite und dem Betrachter vor. Das Bauteil
   gehoert deshalb ins Blatt, das jede Seite laedt.

   IM BETRACHTER BLEIBT NUR, WAS WIRKLICH SEINS IST: `flex: 0 0 auto` an seiner
   Steuerleiste. Doppelt geschrieben ist hier nichts.

   ZWEI BAUFORMEN, BEIDE AUS DER BAUVORLAGE VOM 10.09.2026, Abschnitt 5.3:

   `.ueben-schalter` — die Werte von `.vereinsbuch-suche-zeile > .knopf-still`:
   44 hoch, Polster 0/16, 1 px --linie-stark, Radius --radius, Flaeche --karte,
   15 px in 600. SIE STEHEN NOCH EINMAL DA UND WERDEN NICHT GEERBT, und das ist
   gemessen: Jener Waehler ist ein KINDwaehler (`>`), und der Schalter steht in
   einem `<form>` — er ist ein ENKEL der Zeile.

   `.ueben-punktknopf` — die Werte von `.vereinsbuch-zellenknopf` darueber PLUS
   die 44, die dem Vorbild fehlen: Dieser Schalter traegt weder Rand noch
   Flaeche, aber er bleibt ein Ziel fuer einen Finger.

   ER HIESS BIS ZUM 10.09.2026 (ABENDS) `.ueben-zelle`, weil er nur in einer
   Tabellenzelle vorkam. SEITDEM STEHT ER AUCH AN DER STUECKZEILE: Der
   Betreiber hat die Form des Vorgaengers angeordnet, und dort stand vorher ein
   `.ueben-schalter` — ein weisser gerandeter Kasten mit nichts darin als einem
   Punkt, eine Form, die der Klon `270571f` nirgends hat. Der Klon kennt fuer
   eine freistehende, klickbare Ampel genau eine: `.ampel-knopf`
   (`kern/assets/style.css:637-652`), durchsichtig und ohne Rand. Das ist
   diese.

   DASS DIE FORM NICHT AN DIE ZELLE GEBUNDEN IST, SAGT DER KLON SELBST: Er
   traegt die Form an `.ampel-knopf` und die PLATZIERUNG getrennt daneben an
   `td.st-nr .ampel-knopf` (`:653`). Genau so ist es hier gebaut — die
   PLATZIERUNG STEHT UNMITTELBAR UNTER DIESEM BLOCK, IN DREI REGELN, und das
   sind alle, die es gibt (am 17.09.2026 ueber dieses Blatt gemessen — keine
   Zeilennummer daneben, die wandert beim naechsten Absatz):

     `.ueben-punkte`                      die Punkte als REIHE
     `.liste .nr-mit-stufe .nr-reihe`     die innere Huelle der Zelle als REIHE
     `.liste .nr-mit-stufe .nr-zahl`      die eigene Spalte der Ziffer

   HIER STAND ZWEIMAL AN EINEM TAG EIN WAEHLER, DEN ES NICHT GIBT, und beide
   Male hat es die Pruefung vor dem Pull Request gefunden:

     · „die Platzierung steht unten an `.liste .nr-mit-stufe .ueben-form`" —
       dieser Waehler ist am 17.09.2026 (nachmittags) weggefallen, weil die
       Punkte neben die Nummer rueckten und das Formular keine eigene Regel
       mehr braucht.
     · „an `.ueben-punkte` (die Saeule) und an `.liste .nr-mit-stufe` (die
       Reihe in der Zelle)" — DIE BERICHTIGUNG HAT EINEN FEHLER DURCH ZWEI
       ERSETZT. `.ueben-punkte` ist seit demselben Nachmittag KEINE SAEULE
       mehr (`flex-direction: column` ist weg, der Grund steht unten), und
       `.liste .nr-mit-stufe { … }` gibt es ueberhaupt nicht: Die Reihe haengt
       an der inneren Huelle `.nr-reihe`, damit das `<td>` ein `table-cell`
       bleibt.

   DIESER ABSATZ IST DER ORT, AN DEM EIN LESER DIE TRENNUNG FORM/PLATZIERUNG
   NACHSCHLAEGT — ein Verweis auf einen Waehler, den es nicht gibt, schickt ihn
   suchen. DASS DIESELBE ZEILE ZWEIMAL AN EINEM TAG DANEBENGRIFF, ist der
   Grund, warum hier jetzt DIE WAEHLER STEHEN UND NICHT IHRE ROLLEN: „die
   Saeule", „die Reihe in der Zelle" liest sich auch dann richtig, wenn der
   Waehler daneben falsch ist — die Rolle traegt den Satz, und der Waehler
   faellt niemandem auf.

   AUSDRUECKLICH NICHT `.knopf-zeile`: Sein Zeigezustand faerbt die Schrift
   --gefahr rot. Ein Uebungsstand, der beim Beruehren rot wird, macht eine
   Aussage, die niemand getroffen hat.

   ES GIBT KEIN WORT MEHR IM SCHALTER — ANGEORDNET AM 10.09.2026 (ABENDS).

   HIER STAND: „ZWEI WOERTER IM SCHALTER: ‚Üben' klein und leise sagt, WOVON
   die Rede ist; die Stufe daneben in 600 sagt, WAS gilt. Dieselbe Aufteilung
   wie `.meldung-wort`." Und darunter, vom Nachmittag desselben Tages: „IN DER
   ZELLE FALLEN BEIDE WOERTER WEG."

   DER BETREIBER HAT DIE FORM DES VORGAENGERS ANGEORDNET: ueberall nur der
   Punkt, kein Wort. Damit faellt das leise „Üben" (`.ueben-name`) ganz weg,
   und der Stand ist an ALLEN Orten ein Punkt. Das kurze Wort steht weiterhin
   im Markup, nur unter `.nur-vorlesen` — die Vorlesehilfe bekommt es, das Auge
   bekommt den Punkt und den `title`. Begruendung mit den vier gemessenen
   Breiten: unten bei `.ueben-punkt`.

   WAS DAMIT AUS DIESEM BLATT VERSCHWUNDEN IST: `.ueben-name`. Eine Regel ohne
   Verwender ist gruen, bevor sie laeuft — und sie ist die Einladung, das Wort
   wieder anzubringen, weil die Gestaltung dafuer ja noch dastuende.
   --------------------------------------------------------------------------- */
.ueben-form { display: inline-flex; margin: 0; }
/* `gap`, `font-size`, `font-weight` und `white-space` stehen hier seit dem
   Abend des 10.09.2026 OHNE Wirkung: Der Knopf hat seitdem genau ein Kind, und
   das ist ein 15-px-Punkt ohne Text. SIE BLEIBEN TROTZDEM STEHEN, und der
   Grund ist eine Grenze und keine Bequemlichkeit — angeordnet war die Form der
   AMPEL. Was ein Knopf dieses Portals an Schrift mitbringt, ist eine
   Gestaltungsentscheidung ueber `.ueben-schalter` als Bedienelement, und die
   trifft ein Bauauftrag ueber die Ampel nicht. GEMELDET STATT GEBAUT. */
.ueben-schalter {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  height: 44px;
  min-height: 44px;
  box-sizing: border-box;
  padding: 0 16px;
  border: 1px solid var(--linie-stark);
  border-radius: var(--radius);
  background: var(--karte);
  color: var(--tinte);
  font-family: inherit;
  font-size: 15px;
  font-weight: 600;
  white-space: nowrap;
  cursor: pointer;
}
.ueben-schalter:hover { background: var(--grund-tief); }
.ueben-schalter:focus-visible { outline: 2px solid var(--verein); outline-offset: 1px; }
.ueben-punktknopf {
  display: inline-flex;
  align-items: center;
  min-height: 44px;
  margin: 0;
  padding: 0;
  border: 0;
  background: none;
  font: inherit;
  color: inherit;
  white-space: nowrap;
  cursor: pointer;
}
.ueben-punktknopf:hover,
.ueben-punktknopf:focus-visible { text-decoration: underline; text-underline-offset: 3px; text-decoration-color: var(--verein); }
.ueben-wort { font-weight: 600; }
/* ---------------------------------------------------------------------------
   DER PUNKT — FORM, KEINE FARBE. AN JEDEM ORT, SEIT 10.09.2026 (ABENDS)

   HIER STAND „DER PUNKT IN DER NUMMERNSPALTE". Das war der Stand vom
   Nachmittag desselben Tages: Punkt in „Meine Mappe", Wort in der
   Betrachterleiste und an der Stueckzeile.

   DER BETREIBER HAT AM ABEND DIE FORM DES VORGAENGERS ANGEORDNET — ueberall
   nur der Punkt, kein Wort. Diese Regel gilt seitdem an allen vier Orten, und
   `.ueben-name` ist mit ihrem Markup weggefallen.

   DER VORGAENGER ZEIGT DIE AMPEL AN DREI STELLEN UND AN KEINER ALS WORT
   (Klon `270571f`): `noten/ansicht.php:628` (Betrachterleiste),
   `noten/meine_mappe.php:90` (`td.st-nr`), `noten/index.php:298` (Dashboard).
   Die Auskunft steckt bei ihm in `title` und `aria-label`
   (`noten/inc/noten.php:2762-2771`, `kern/assets/style.css:628-654`).

   DIE 15 PX SIND DIE DES MAPPEN-PUNKTES UND NICHT DIE DES BETRACHTERS, und das
   ist gemessen: Der Vorgaenger fuehrt in seiner Betrachterleiste eine EIGENE
   Kopie mit 14 px und `rgba(26,20,16,.18)` (`noten/ansicht.php:188-192`),
   weil jener Betrachter `style.css` bewusst nicht laedt. Hier gibt es EIN
   Bauteil fuer alle vier Orte; zwei Groessen waeren zwei Stellen, an denen die
   Farbe spaeter gesetzt werden muesste.

   GEMESSEN UND NICHT GEWAEHLT (echte 390 px ueber das Fernsteuerungsprotokoll,
   10.09.2026, Vorschauseite notenarchiv-meinemappe-eine.html):

     eigene Spalte „Üben"        Tabelle 477 px — 87 px ausserhalb
     WORT in der Nummernspalte   Tabelle 434 px — 44 px ausserhalb
     Wort mit Umbruch            Tabelle 401 px — 11 px ausserhalb, Zeile 74 hoch
     PUNKT in der Nummernspalte  Tabelle 390 px — passt genau

   Das Wort „nicht bewertet" ist der laengste der fuenf Wortlaute und zwingt
   die Nummernspalte auf seine Breite. Der Satz des Nachtrags — „ohne die
   Spalte ist die Tabelle exakt 390 und passt" — stellt sich nur mit dem Punkt
   ein.

   `background: currentColor` UND KEIN EIGENER FARBWERT: Die Farbe kommt aus
   den fuenf `.ueben-N .ueben-wort`-Zeilen weiter unten und nirgends sonst. Der
   Punkt IST dieselbe `.ueben-wort` wie das Wort, nur anders geformt — deshalb
   bleibt „die Farbe steht an einer Stelle" wahr.

   15 PX UND DER INNENRAND: Beides vom Vorgaenger (`.ampel-knopf .ampel`,
   `kern/assets/style.css:648-652`). Der Innenrand ist der Grund, warum der
   helle Punkt auf weissem Grund ueberhaupt eine Kante hat; er ist in --tinte
   gerechnet statt in dessen `rgba(26,20,16,.15)`, weil dieses Portal seine
   eigene Tinte fuehrt.

   KEINE KANTE IM SINNE VON ADR-0030: Das ist ein Innenschatten an einem
   Punkt, keine 3-px-Kante an einer Karte. --messing kommt nicht vor.
   --------------------------------------------------------------------------- */
.ueben-punkt {
  display: inline-block;
  width: 15px;
  height: 15px;
  border-radius: 50%;
  background: currentColor;
  box-shadow: inset 0 0 0 1px rgba(27, 33, 30, 0.15);
}
/* ---------------------------------------------------------------------------
   DIE PUNKTE STEHEN NEBEN DER NUMMER — 17.09.2026, BETREIBER AM BILD

   Im Wortlaut: „der übungspunkt (ampel) muss richtigerweise daneben stehen und
   auf die stimme bezogen sein. nicht auf den nutzer. hier sind zwei stimmen im
   buch. daher müssten auch zwei übungspunkte stehen (gerne übereinander)."

   HIER STAND BIS HEUTE: „Der Schalter steht in der Zelle auf einer eigenen
   Zeile und mittig UEBER der Nummer — beim Vorgaenger `td.st-nr .ampel-knopf {
   display: block; margin: 0 auto }` und `… + div { text-align: center }`."

   DIE ZWEI SAETZE UEBER DEN VORGAENGER SIND WEITER RICHTIG UND TRAGEN NICHT
   MEHR: Er fuehrt EINE Ampel je Zeile, weil er die Stufe je Mitglied und
   Stueck fuehrt. Zwei Punkte uebereinander UND die Nummer darunter waeren drei
   Zeilen in einer Zelle, die bei echten 390 px 43 px breit ist. Die Anordnung
   loest das, indem sie die Punkte NEBEN die Nummer stellt.

   ---------------------------------------------------------------------------
   BERICHTIGT NOCH AM 17.09.2026 — DIE ZIFFER LINKS, DIE PUNKTE NEBENEINANDER

   Der Betreiber, nachdem ihm die Aufnahme vorlag: „Ziffer links in einer
   eigenen spalte. dann die punkte nebeneinander". DAMIT IST „gerne
   übereinander" AUS SEINER EIGENEN ANORDNUNG VOM VORMITTAG AUFGEHOBEN.

   HIER STAND: „`.nr-mit-stufe` IST DESHALB EINE REIHE: links die Punkte
   (gestapelt), rechts die Ziffer. `align-items: center` haelt die Ziffer auf
   der Mitte der Saeule, auch wenn die zwei Punkte hoeher bauen als sie."

   GENAU DIESER SATZ WAR DAS PROBLEM, UND ER HAT ES SELBST BESCHRIEBEN: Die
   Ziffer sass mittig in der Saeule — also in der LUECKE ZWISCHEN den zwei
   Punkten. Jeder Knopf ist 44 px hoch, zwei sind 90 px, der Zeileninhalt zwei
   Textzeilen. Bei drei Punkten (dem Uebergangsfall mit „ohne Stimme") hing der
   dritte so weit unten, dass er zur naechsten Zeile zu gehoeren schien. DIE
   KETTE WAR DABEI GRUEN und jede Zusicherung hielt — sie liest Regeln und
   misst keine Kanten.

   IN DER ZELLE STEHT EINE REIHE MIT ZWEI ZONEN: links die ZIFFER in ihrer
   eigenen Spalte, rechts daneben die PUNKTE NEBENEINANDER. `align-items:
   center` haelt beide auf einer Linie; die Zeile ist jetzt so hoch wie EIN
   Knopf und nicht wie zwei.

   ---------------------------------------------------------------------------
   DIE REIHE HAENGT AN EINER INNEREN HUELLE `.nr-reihe` UND NICHT AM `<td>` —
   GEMESSEN AM BILD, 17.09.2026 (nachmittags)

   HIER STAND `.liste .nr-mit-stufe { display: flex … }`, also `display: flex`
   AM TABELLENFELD. DAS HAT EINEN SICHTBAREN PREIS, und er ist im Browser
   gemessen und nicht erwogen: Ein `<td>` mit `display: flex` ist kein
   `table-cell` mehr und STRECKT SICH NICHT AUF DIE ZEILENHOEHE. Bei echten
   390 px, Vorschauseite `notenarchiv-meinemappe-eine`: Zelle 53 px hoch,
   ZEILE 80 px — und die untere Linie der Zelle (`border-bottom`) lag damit
   HOEHER als die der Nachbarzellen. Im Bild sind das zwei Trennlinien auf
   zwei Hoehen.

   MIT DER INNEREN HUELLE BLEIBT DAS FELD EIN `table-cell`: Es streckt sich wie
   jedes andere, die Linie liegt auf einer Hoehe, und die Reihe steht darin.
   DER FEHLER WAR VORMITTAGS NICHT ZU SEHEN, weil die Saeule mit 99 px die
   hoechste Zelle der Zeile war — die Zeile richtete sich nach ihr. Er kam
   erst heraus, als die Punkte nebeneinander rueckten und die Zelle flach
   wurde. DIE KETTE HAT IHN NICHT GEMELDET; die Aufnahme schon.

   DIE ZWEI ZONEN SIND ZONEN DER ZELLE UND KEINE ZWEITE TABELLENSPALTE. Er hat
   keine Ueberschrift dafuer genannt, und die Kopfzeile traegt „NR."; eine
   eigene `<th>`-Spalte braeuchte eine. GEMESSEN, WARUM DAS TRAEGT: Die Ziffer
   steht mit `min-width` auf einer festen Breite, die Punkte beginnen damit in
   jeder Zeile an derselben Stelle — genau das, was „eigene Spalte" am Bild
   leistet.

   DIE DREI ZEICHEN SIND EINE GRENZE UND KEINE WETTE: `notenmappeneintraege.nummer`
   ist `SMALLINT UNSIGNED` (in der Datenbank gemessen: `smallint(5) unsigned`)
   und liesse FUENF Stellen zu. Drei decken die laufende Nummer einer Mappe.
   `tabular-nums` sorgt dafuer, dass die Ziffern gleich breit sind und die
   Flucht ueberhaupt eine sein kann.

   HIER STAND ALS FOLGE: „eine vierte schiebt die Punkte dieser einen Zeile um
   ein Zeichen nach rechts, und mehr passiert nicht — die Spalte verliert dort
   ihre Flucht, nichts bricht." DAS BESCHREIBT DIE FOLGE FUER VIER STELLEN UND
   NENNT FUENF ALS MOEGLICH, OHNE SIE ZU RECHNEN. Gefunden von der Pruefung vor
   dem Pull Request; nachgemessen am 17.09.2026 im Browser bei echten 390 px
   (Fernsteuerungsprotokoll, Vorschauseite `notenarchiv-meinemappe-eine`, die
   Zifferzone waechst je Stelle um rund 6,97 px):

     Stellen   zwei Punkte      drei Punkte (Uebergangsfall „ohne Stimme")
     3         Ende bei  94,9   Ende bei 117,9   —  8,1 px vor der Zellkante
     4         Ende bei 101,8   Ende bei 124,8   —  1,1 px vor der Zellkante
     5         Ende bei 108,8   Ende bei 131,8   —  5,9 px IN DER TITELSPALTE

   Die Zellkante liegt bei 125,9. DIE FOLGE HAENGT AN DER ZAHL DER PUNKTE UND
   NICHT AN DER ZAHL DER STELLEN ALLEIN: Mit ZWEI Punkten bricht auch
   fuenfstellig nichts. Mit DREI ist die vierte Stelle die letzte, die passt,
   und die fuenfte erzeugt GENAU DEN UEBERSTAND, DEN DIESER COMMIT BEHEBT —
   5,9 px statt der 30 px von vorher, aber derselbe Fehler an derselben Stelle.

   GEMELDET UND NICHT GEBAUT: Eine fuenfstellige Mappennummer neben drei
   Punkten ist Sichtbares und gehoert dem Betreiber — dieselbe Meldung wie beim
   VIERTEN Punkt (dort, wo die Spaltenbreite gerechnet wird), und mit demselben
   Preis: breitere Spalte, engere Fuge oder ein schmaleres Fingerziel.

   `.liste` DAVOR IST VORSORGE UND HEUTE NICHT NOETIG — UND DIESER UNTERSCHIED
   GEHOERT HINGESCHRIEBEN.

   HIER STAND: „`justify-content` an der Zelle braucht dieselbe Spezifitaet wie
   vorher `text-align`." DAS IST FALSCH UND WAR ES BEIM HINSCHREIBEN: Die Regel
   darunter setzt `display`, `align-items` und `gap` — und KEIN
   `justify-content`. Berichtigt am 17.09.2026, gefunden von der Pruefung vor
   dem Pull Request.

   WAS WIRKLICH GILT: `.liste th, .liste td` setzt `text-align` und sonst
   nichts. Fuer `display`, `align-items` und `gap` gibt es also gar keinen
   Gegner — eine blosse Klasse `.nr-mit-stufe` (0,1,0) haette hier GEWONNEN.
   Der `.liste`-Vorsatz kostet nichts und deckt den Tag, an dem jemand
   `display` oder `text-align` an `.liste td` setzt; er ist Vorsorge und kein
   Zwang.

   DER FALL VON DAMALS BLEIBT GEMESSEN UND IST NICHT VORBEI: Am 10.09.2026
   stand `.nr-mit-stufe` als blosse Klasse mit `text-align: center` da und
   verlor gegen `.liste th, .liste td { text-align: left }` (0,1,1). Im Browser
   gemessen: Punkt und Zelle teilten die Mitte (x = 300,7 bei 1280), die Ziffer
   stand bei 276, `getComputedStyle(td).textAlign` gab `left`. `text-align`
   steht heute nicht mehr an dieser Zelle — der Gegner aber schon.

   DESHALB MISST tests/faelle/536_uebungsstufe.php NICHT MEHR EINE EIGENSCHAFT,
   SONDERN DIE MENGE: Jede Regel, deren Waehler `.nr-mit-stufe` nennt und die
   `text-align`, `display`, `justify-content` oder `align-items` setzt, muss
   (0,1,1) schlagen. `.liste .nr-mit-stufe` ist (0,2,0) und tut es. Wer morgen
   `text-align` an einer blossen Klasse hier anbringt, wird rot — und genau
   dafuer ist der Vorsatz da.

   DIE KETTE HAT DAS NICHT GEMELDET, das Bild schon (.claude/rules/50-gestaltung.md).
   Die zwei aelteren Faelle stehen an `.liste td.spalte-aktionen` (02.09.2026)
   und an `.liste .vereinsbuch-spalte-konto` (09.09.2026), beide mit demselben
   Vermerk. Seit dem 10.09.2026 misst tests/faelle/536_uebungsstufe.php die
   Spezifitaet ab.

   DIE PLATZIERUNG GEHOERT DER ZELLE UND NICHT DER BAUFORM — 10.09.2026
   (abends), und das gilt unveraendert. Hier stand `.ueben-form-zelle`, eine
   Klasse, die das Bauteil selbst schrieb, sobald die Bauform `zelle` hiess.
   DER KLON MACHT ES EBENSO GETRENNT: Form an `.ampel-knopf`, Platzierung an
   `td.st-nr .ampel-knopf` (`kern/assets/style.css:653`).

   `.ueben-punkte` IST DIE REIHE DER PUNKTE und steht auch ohne Zelle richtig:
   Sie ist eine Reihe aus Schaltern, und mehr braucht sie nicht zu wissen.

   SIE WAR BIS ZUM 17.09.2026 (nachmittags) EINE SPALTE
   (`flex-direction: column`), weil der Betreiber am Vormittag „gerne
   übereinander" gesagt hatte. Am Bild hat er es zurueckgenommen; der Grund
   steht oben. `flex-direction` FAELLT DAMIT GANZ WEG statt auf `row` gesetzt
   zu werden — `row` ist der Vorgabewert, und eine Regel, die den Vorgabewert
   hinschreibt, ist eine Regel ohne Wirkung.

   `gap: 8px` UND NICHT MEHR 2: Uebereinander trennte die 44-px-Hoehe der
   Knoepfe die Ziele schon; NEBENEINANDER stossen zwei 15 px breite Ziele
   aneinander, und 2 px dazwischen sind kein Abstand, sondern eine Fuge. Die
   8 sind der Wert, den die Zelle daneben ohnehin fuehrt — kein neuer.

   `.nr-zahl` IST DIE EIGENE SPALTE DER ZIFFER — seit dem 17.09.2026
   (nachmittags), und das ist die eine Haelfte der Anordnung.

   HIER STAND: „`.nr-zahl` BEKOMMT HIER ABSICHTLICH KEINE REGEL. Die Ziffer
   erbt `text-align: left` von `.liste td`, und das ist in einer Reihe das
   Richtige." DER SATZ WAR RICHTIG, SOLANGE DIE ZIFFER RECHTS STAND UND SICH
   AN NICHTS AUSRICHTEN MUSSTE. „Eigene Spalte" heisst, dass die Punkte in
   JEDER Zeile an derselben Stelle beginnen — und dafuer braucht die Ziffer
   eine feste Breite. Ohne sie rutschte die Punktreihe bei einer zweistelligen
   Nummer nach rechts und die Flucht waere keine.

   DER KLASSENNAME HAT SEIT DEM 17.09.2026 EINEN VERWENDER IN DER KETTE:
   tests/faelle/536_uebungsstufe.php, „Und in jeder steht die Ziffer VOR den
   Punkten". Die Zeile vergleicht in der Quelle jeder Seite mit `nr-mit-stufe`
   die Stelle von `nr-zahl` mit der von `notenarchiv_uebungspunkte(`.

   WARUM ES DIESE ZEILE BRAUCHT: `display: flex` sagt, dass Ziffer und Punkte
   NEBENEINANDER stehen — WELCHE VON BEIDEN LINKS LIEGT, sagt allein die
   Reihenfolge im Markup. Wer die zwei Bloecke vertauscht, bekommt die Punkte
   links; das Stilblatt bleibt unberuehrt, und am Bild faellt es nur dem auf,
   der hinsieht. DIE ZEILE HAT AM 17.09.2026 GENAU DAS GEMESSEN: Sie ist mit
   der Berichtigung ROT GEWORDEN, weil die Reihenfolge sich umgedreht hat —
   und sie wurde UMGESCHRIEBEN und nicht geloescht.

   HIER STAND, der Name sei der Griff, „an dem die Zusicherung in
   tests/faelle/536_uebungsstufe.php die Ziffer von den Punkten unterscheidet".
   DIE ZUSICHERUNG GAB ES NICHT — gemessen am 17.09.2026 von der Pruefung vor
   dem Pull Request: `nr-zahl` hatte NULL Fundstellen unter `tests/`, und `536`
   unterschied ueber `.nr-mit-stufe`. Der Satz nannte einen Verwender, den es
   nicht gab, und der Klassenname hatte damit gar keinen. BERICHTIGT WURDE
   NICHT DER SATZ, SONDERN DER BESTAND: Die Zeile ist gebaut und in einer Kopie
   ohne `config.php` gegengeprobt.

   HIER STAND, sie melde „Punkte bei 8724, Ziffer bei 8662". DAS ZITAT WAR IN
   BEIDEN TEILEN FALSCH — in der Reihenfolge und in beiden Zahlen. Gefunden von
   der Pruefung vor dem Pull Request; in der Kopie nachgemessen am 17.09.2026:

     heutiger Stand       Ziffer bei 8684, Punkte bei 8746   gruen
     Bloecke vertauscht   Ziffer bei 8957, Punkte bei 8676   ROT
                          (536 meldet dabei 78 gut, 1 Fehler
                           statt 79 gut, 0 Fehler)

   DER WORTLAUT DER MELDUNG IST FEST UND NENNT IMMER ZUERST DIE ZIFFER
   (tests/faelle/536_uebungsstufe.php: „… : Ziffer bei X, Punkte bei Y"). Ein
   Zitat, das die zwei umdreht, laesst den Leser die Zahl der einen fuer die
   der anderen halten — und da beide Zahlen nah beieinanderliegen, faellt
   nichts auf. Der Name ist jetzt wirklich ein Griff.

   WAS AM BILD GEMESSEN IST (17.09.2026 nachmittags, echte 390 px ueber das
   Fernsteuerungsprotokoll, Vorschauseite `notenarchiv-meinemappe-eine`):
   Zelle 110 px bei x = 16, `display: table-cell`, HOEHE GLEICH DER ZEILE
   (80 px bei zwei Textzeilen, 63 bei einer). Ziffer 21 px bei x = 28, Punkte
   ab x = 57 — DIE ZIFFER STEHT LINKS, DIE PUNKTE RECHTS DANEBEN. Zwei Punkte
   enden bei x = 95, DREI bei x = 118, die Zelle bei 126: alles innerhalb.
   Tabelle 358 px bei x = 16, Dokument 390 px, die Huelle schiebt nicht.

   UND BEI 1280 px: Zelle 110 px bei x = 277, Ziffer bei 289, Punkte ab 318,
   drei enden bei 379, die Zelle bei 387. Tabelle 966 px, Dokument 1280,
   Zeilenhoehe 62 beziehungsweise 53. DIESELBE SPALTENBREITE IN BEIDEN
   BILDERN — sie haengt an `th[data-spalte="nr"]` und nicht am Fenster.

   DIE VORIGE LAGE, zum Vergleich und weil sie der Anlass der Berichtigung ist:
   Zelle 72 px, Saeule 15 px bei x = 28, Ziffer bei x = 51, Zeilenhoehe 99 px
   (zwei Knoepfe a 44 px plus 2 px Fuge) — die Ziffer sass in der Luecke
   ZWISCHEN den zwei Punkten.

   NICHT GEBAUT UND GEMELDET: Der Knopf ist 15 x 44 px. Die Breite kommt vom
   Punkt, `.ueben-punktknopf` traegt `min-height` und kein `min-width`. DAS IST
   NICHT NEU — mit den Regeln vom 16.09.2026 nachgestellt und im selben Browser
   gemessen: ebenfalls 15 x 44. NEBENEINANDER WIEGT ES SCHWERER ALS
   UEBEREINANDER: Uebereinander trennte die Hoehe die Ziele, nebeneinander
   stehen zwei 15-px-Ziele mit 8 px Fuge nebeneinander. Ob ein Fingerziel 15 px
   breit sein darf, ist Sichtbares und gehoert dem Betreiber — gemessen und
   gemeldet, nicht entschieden.
   --------------------------------------------------------------------------- */
.ueben-punkte { display: flex; gap: 8px; }
.liste .nr-mit-stufe .nr-reihe { display: flex; align-items: center; gap: 8px; }
.liste .nr-mit-stufe .nr-zahl { flex: 0 0 auto; min-width: 3ch; font-variant-numeric: tabular-nums; }
/* ---------------------------------------------------------------------------
   DIE FARBE DER STUFE — HIER UND NUR HIER

   ENTSCHIEDEN AM 10.09.2026 VOM BETREIBER, ADR-0073, Nachtrag „DIE FARBE IST
   ENTSCHIEDEN, UND DER ORT AUCH": „Die Stufen tragen die vier Toene des
   VORGAENGERS. Nicht die Portalskala, nicht farblos."

   BIS DAHIN STAND HIER: „Die Farbe der Uebungsstufe ist NICHT entschieden …
   FARBLOS GEBAUT." Das ist eingeloest, nicht widerrufen — die fuenf Zeilen
   waren genau die Vorbereitung darauf, und der Wechsel hat sie gekostet und
   sonst nichts.

   DIE VIER TOENE SIND IM KLON `270571f` ABGEMESSEN UND NICHT ERINNERT:
   `kern/assets/style.css:636` (rot), `:656` (orange), `:657` (gelb), `:658`
   (gruen). Der Vorgaenger traegt sie als `background` eines 15-px-Punktes
   (`.ampel`, `:628-634`).

   ============================================================================
   DIE GEMESSENEN KONTRASTE — SIE STEHEN HIER, DAMIT SIE NIEMAND FUER EIN
   VERSEHEN HAELT
   ============================================================================

   Gerechnet am 10.09.2026 mit kern/farbe.php (derselbe Weg wie
   tests/faelle/120_farbe.php), auf zwei Nachkommastellen:

     Stufe  Ton       gegen --grund   gegen --karte
       0    #cfc8bd        1,35            1,66
       1    #c8433c        3,95            4,86
       2    #dd8435        2,30            2,83
       3    #d9b13b        1,66            2,04
       4    #4f9e59        2,68            3,30

   DER PREIS STAND BEI DER ENTSCHEIDUNG DANEBEN UND IST TROTZDEM GEWAEHLT
   WORDEN (ADR-0073, Nachtrag): vier von fuenf halten die Nichttext-Schwelle
   3:1 gegen --grund nicht, und jeder Ton steht dicht neben einer belegten
   Portalfarbe — Rot neben --gefahr, Orange neben --messing und --hinweis,
   Gelb neben --verein, Gruen neben --ok. DAS WIRD HIER NICHT ERNEUT
   VORGETRAGEN, sondern festgehalten.

   EINE ZAHL WEICHT UM 0,01 AB, und das steht hier, weil eine stille
   Abweichung schlimmer ist als eine genannte: Der Nachtrag nennt fuer Gruen
   2,69, gemessen sind 2,681552, also 2,68. Die vier anderen stimmen aufs
   Hundertstel. Der Nachtrag wird deswegen nicht geaendert — ein ADR aendert
   der Bau nicht.

   DIE SCHWELLE HAENGT AN DER FORM, NICHT AM TON — UND ES GIBT SEIT DEM
   10.09.2026 (ABENDS) NUR NOCH EINE FORM. Hier stand: „In der ZELLE ist die
   Stufe ein Punkt … In der LEISTE und an der Stueckzeile ist sie ein WORT;
   fuer Text verlangt WCAG 1.4.3 dann 4,5:1, und keiner der vier erreicht
   das." ES GIBT KEIN WORT MEHR: Der Betreiber hat die Form des Vorgaengers
   angeordnet. Damit ist die Stufe an jedem Ort ein Nichttext-Element, und die
   Schwelle ist ueberall 3:1 — vier von fuenf halten sie nicht.

   STUFE 0 IST SEITDEM #cfc8bd, DER GRUNDPUNKT DES VORGAENGERS
   (`kern/assets/style.css:628`, `.ampel background`). HIER STAND
   --tinte-leise (5,33 gegen --grund), und der Grund dafuer war das WORT:
   „Dieselbe Zeile faerbt hier auch das WORT ‚nicht bewertet' in der
   Betrachterleiste und an der Stueckzeile. #cfc8bd waere dort 1,66 gegen
   --karte — der haeufigste Zustand des Portals waere unlesbar."

   MIT DEM WORT FAELLT DER GRUND WEG. Was #cfc8bd jetzt faerbt, ist ein
   15-px-Punkt mit Innenschatten; die Auskunft „nicht bewertet" steht im
   `title`, im `aria-label` und unter `.nur-vorlesen` und haengt an keiner
   Farbe. DIE 1,66 BLEIBEN TROTZDEM WAHR UND STEHEN DESHALB IN DER TABELLE
   OBEN: Dieser Punkt ist auf --karte kaum vom Grund zu unterscheiden — beim
   Vorgaenger genauso, und der Innenschatten ist dort wie hier das einzige,
   was ihm eine Kante gibt.

   WER ES ANDERS WILL, AENDERT DIESE EINE ZEILE.

   WER DIE FARBE AENDERT, AENDERT GENAU DIESE FUENF ZEILEN — nicht vierzehn
   Fundstellen und nicht zwei Stilblaetter. Die Stufe steht im Markup als
   Klasse `ueben-N`, N kommt aus der Datenbank, und geschrieben wird sie an
   genau einer Stelle: notenarchiv_uebungspunkt().
   tests/faelle/536_uebungsstufe.php zaehlt beides nach.

   DIE STUFENKLASSE SITZT SEIT DEM 10.09.2026 (ABENDS) AM PUNKT UND NICHT MEHR
   AM KNOPF, und die fuenf Waehler sind deshalb `.ueben-N` statt
   `.ueben-N .ueben-wort`. DER GRUND IST DER VIERTE ORT: Auf dem Dashboard des
   Mitglieds gibt es keinen Knopf, der die Klasse tragen koennte — dort steht
   der Punkt als Marke einer Zeile (`.zeilenpunkt`, kern/seiten/dashboard.php).
   Mit der Klasse am Knopf haette diese Stelle eine SECHSTE Farbzeile
   gebraucht, und „ein Ja zur Farbe kostet fuenf Zeilen" waere gebrochen
   gewesen.

   DER PUNKT HOLT SICH DIE FARBE UEBER `currentColor`, also aus `color` an
   seinem eigenen Element. Beide Bauarten tragen deshalb dieselben zwei
   Klassen nebeneinander — `ueben-punkt` fuer die Form, `ueben-N` fuer den Ton.
   --------------------------------------------------------------------------- */
.ueben-0 { color: #cfc8bd; }
.ueben-1 { color: #c8433c; }
.ueben-2 { color: #dd8435; }
.ueben-3 { color: #d9b13b; }
.ueben-4 { color: #4f9e59; }

/* ---------------------------------------------------------------------------
   DIE MARKE EINER DASHBOARD-ZEILE — DIE DRITTE FORM DES VORGAENGERS

   `kern/assets/style.css:655` im Klon `270571f`:
   `.knopf .ampel { width: 11px; height: 11px; margin-right: .3rem;
   vertical-align: -.08em; }` — ein KLEINERER Punkt, unmittelbar vor einem
   Linktext, und die Groesse haengt am Zusammenhang und nicht am Punkt selbst.

   GENAU SO IST ES HIER GEBAUT: `.ueben-punkt` traegt 15 px, und diese Regel
   ueberschreibt sie im Zusammenhang der Befundliste. `.befundliste
   .zeilenpunkt` ist (0,2,0) und schlaegt `.ueben-punkt` (0,1,0) sicher — kein
   Gleichstand, der von der Reihenfolge im Blatt abhinge. Der Klon loest es mit
   demselben Griff (`.knopf .ampel` gegen `.ampel`).

   `.zeilenpunkt` IST DER NAME DES KERNS UND KENNT KEINEN UEBUNGSSTAND. Welche
   Bedeutung die Marke traegt und welche Farbe sie hat, steht im Modul; der
   Kern weiss nur, dass eine Zeile eine tragen kann (kern/module.php,
   modul_punktmarke()).

   DIE 5 PX SIND SEINE `.3rem`: Der Klon rechnet in `rem` bei 16 px Grundmass,
   also 4,8 px. Dieses Portal rechnet Abstaende in ganzen Bildpunkten.
   --------------------------------------------------------------------------- */
.befundliste .zeilenpunkt {
  width: 11px;
  height: 11px;
  margin-right: 5px;
  vertical-align: -0.08em;
}
/*
 * DER SORTIERBARE SPALTENKOPF. HIESS BIS ZUM 05.09.2026 `.vereinsbuch-sort`.
 *
 * DIE ERKLAERUNGEN SIND UNVERAENDERT — Farbe erbt, keine Unterstreichung, eine
 * beim Zeigen. Umbenannt ist der NAME, weil die Mechanik seit dem 05.09.2026
 * portalweit ist (Anordnung des Betreibers, ADR-0024 Nachtrag 01.09.2026
 * Punkt 2, Reichweite an jenem Tag entschieden). Ein Spaltenkopf im Zeugwart
 * mit `vereinsbuch-sort` waere ein Vereinsbuch-Name auf einer fremden Seite.
 */
.listensort {
  color: inherit;
  text-decoration: none;
  font: inherit;
  /* DER VERWEIS FUELLT DIE ZELLE — Betreiber, 08.09.2026: „Die Sortierfelder —
     sind sie so gut touch-tauglich?" Gemessen von Design: nein, rund 30 px.
     ADR-0024 verlangt 44 px fuer jede Treffflaeche, und der Kopf ist eine, weil
     er sortiert (BAUTEILE.md „Kopfzeile"). */
  display: flex;
  align-items: center;
  min-height: 44px;
}
.listensort:hover,
.listensort:focus-visible {
  text-decoration: underline;
  text-decoration-color: var(--verein);
}
.reiterwahl {
  position: absolute;
  width: 1px;
  height: 1px;
  overflow: hidden;
  clip-path: inset(50%);
}
.reiterleiste {
  display: flex;
  flex-wrap: nowrap;
  gap: 0;
  border-bottom: 1px solid var(--linie);
  margin: 0 0 var(--abstand);
  overflow-x: auto;
}
.reiter {
  padding: 8px 12px;
  margin: 0;
  cursor: pointer;
  color: var(--tinte-leise);
  border-bottom: 2px solid transparent;
  font: inherit;
  flex: none;
  white-space: nowrap;
  min-height: 44px;
  display: inline-flex;
  align-items: center;
  box-sizing: border-box;
}
.reiterkasten:has(.reiterwahl-person:checked) .reiter[for*="reiter-person"],
.reiterkasten:has(.reiterwahl-vorschlaege:checked) .reiter[for*="reiter-vorschlaege"],
.reiterkasten:has(.reiterwahl-aemter:checked) .reiter[for*="reiter-aemter"],
.reiterkasten:has(.reiterwahl-instrument:checked) .reiter[for*="reiter-instrument"] {
  color: var(--tinte);
  border-bottom-color: var(--tinte);
  font-weight: 650;
}
.reiterkasten:has(.reiterwahl-person:focus-visible) .reiter[for*="reiter-person"],
.reiterkasten:has(.reiterwahl-vorschlaege:focus-visible) .reiter[for*="reiter-vorschlaege"],
.reiterkasten:has(.reiterwahl-aemter:focus-visible) .reiter[for*="reiter-aemter"],
.reiterkasten:has(.reiterwahl-instrument:focus-visible) .reiter[for*="reiter-instrument"] {
  outline: 2px solid var(--tinte);
  outline-offset: 2px;
}
.reiterblatt { display: none; }
.reiterwahl-person:checked ~ .reiterblatt-person,
/* Das vierte Register des Personenfensters (ADR-0066): die Kontaktdaten-
   Vorschlaege dieser Person. Es steht nur da, wenn einer offen ist —
   kern/seiten/mitglieder.php haengt es an $offeneVorschlaegeDerPerson. */
.reiterwahl-vorschlaege:checked ~ .reiterblatt-vorschlaege,
.reiterwahl-bild:checked ~ .reiterblatt-bild,
.reiterwahl-aemter:checked ~ .reiterblatt-aemter,
.reiterwahl-instrument:checked ~ .reiterblatt-instrument,
/* DIE SIEBEN REGISTER DER VOREINSTELLUNGEN STANDEN HIER BIS ZUM 03.09.2026:
   grund, vereinskonto, listen, mitgliederkonten, import, export, dsgvo.
   ADR-0063 hat den Reiterkasten des Administrationsmenues durch Punkte mit je
   eigener Adresse ersetzt; die sieben Blaetter gibt es nicht mehr.
   Eine Anzeigeregel ohne ihr Blatt ist gruen, bevor sie laeuft. */
.reiterwahl-vereinsart:checked ~ .reiterblatt-vereinsart,
.reiterwahl-farbe:checked ~ .reiterblatt-farbe,
.reiterwahl-wappen:checked ~ .reiterblatt-wappen,
.reiterwahl-statut-kern:checked ~ .reiterblatt-statut-kern,
.reiterwahl-statut-sitzungen:checked ~ .reiterblatt-statut-sitzungen,
/* Die vier Register des Vereinsfensters im Backend des Betreibers
   (ADR-0062, Punkt 5: "Das Backend ist keine zweite Gestaltungswelt").
   Sie stehen in DIESER Liste und nicht in einem eigenen Block: Eine zweite
   Stelle fuer dieselbe Mechanik veraltete am Tag, an dem jemand die erste
   anfasst. */
.reiterwahl-verein-stamm:checked ~ .reiterblatt-verein-stamm,
.reiterwahl-verein-netz:checked ~ .reiterblatt-verein-netz,
.reiterwahl-verein-zustand:checked ~ .reiterblatt-verein-zustand,
.reiterwahl-verein-datenbank:checked ~ .reiterblatt-verein-datenbank,
.reiterwahl-verein-module:checked ~ .reiterblatt-verein-module,
/* Die VIER Register der Kontoseite und die fuenf des Vorschlagsfensters
   (ADR-0066, kern/seiten/konto.php). Sie stehen in DIESER Liste und nicht in
   einem eigenen Block — derselbe Grund wie beim Vereinsfenster darueber: Eine
   zweite Stelle fuer dieselbe Mechanik veraltete am Tag, an dem jemand die
   erste anfasst.

   BERICHTIGT AM 04.09.2026: Hier stand "Die zwei Register der Kontoseite",
   und darunter standen DREI Zeilen. Seit dem Nachtrag zu ADR-0066 sind es
   vier — `mein-protokoll` kam dazu. */
.reiterwahl-meine-daten:checked ~ .reiterblatt-meine-daten,
.reiterwahl-mein-bild:checked ~ .reiterblatt-mein-bild,
.reiterwahl-mein-zugang:checked ~ .reiterblatt-mein-zugang,
.reiterwahl-mein-protokoll:checked ~ .reiterblatt-mein-protokoll,
.reiterwahl-kontakt-email:checked ~ .reiterblatt-kontakt-email,
.reiterwahl-kontakt-telefon:checked ~ .reiterblatt-kontakt-telefon,
.reiterwahl-kontakt-strasse:checked ~ .reiterblatt-kontakt-strasse,
.reiterwahl-kontakt-plz:checked ~ .reiterblatt-kontakt-plz,
.reiterwahl-kontakt-ort:checked ~ .reiterblatt-kontakt-ort { display: block; }

/* ---------------------------------------------------------------------------
   ZWEI KARTEN IN EINEM REGISTERBLATT STEHEN NICHT ANEINANDER.

   DIESE REGEL STAND SCHON EINMAL HIER UND IST AM 03.09.2026 MIT ADR-0063
   GEFALLEN — zusammen mit ihrem letzten Verwender. Der Vermerk daneben sagte:
   „Kommt ein Blatt mit zwei Karten zurueck, kommt die Regel mit ihm zurueck."
   ES IST AM 04.09.2026 EINGETRETEN: `reiterblatt-mein-zugang` auf der
   Kontoseite haelt drei Karten (Passwort, guter Rat, Abmelden).

   `--zonenabstand` regelt den Abstand ZWISCHEN gestapelten Karten, und die
   Anweisung nennt das Verhaeltnis und nicht den Behaelter: „Abstand zwischen
   den Karten: 14 px am Schreibtisch, 10 px am Handy"
   (docs/gestaltung/anweisung-uebersicht.md, Abschnitt 4).

   WARUM SIE NOETIG IST: Der Abstand steht als `gap` an `.inhalt.zonen`, und
   `gap` wirkt auf DIREKTE KINDER. Die Karten liegen hier als Enkel —
   `.inhalt.zonen > .reiterkasten > .reiterblatt > .karte` — und bekaemen
   davon nichts. Gemessen wurde das am 02.09.2026 im Browser an den
   Voreinstellungen: 0 px vorher, 14 beziehungsweise 10 px danach.

   KEIN `gap` AM BLATT: Das Blatt steht auf `display: block`, und ein `gap`
   wirkte dort nicht. Ein Wechsel auf `display: flex` haette die Anzeigeregel
   darueber mitgeaendert, die zwischen `none` und `block` schaltet.

   `~` UND NICHT `+`: Zwischen zwei Karten kann ein `<dialog class="fenster">`
   als Geschwister stehen. Mit `+` traefe die Regel dort nichts, und zwar
   lautlos — ein Dialog ohne `open` ist im Rohtext da und im Bild nicht.

   NICHT AN DIE ERSTE KARTE: Ein `margin-top` an jeder Karte schoebe auch die
   erste vom Registerreiter weg, dessen Abstand die Leiste selbst setzt
   (`.reiterleiste { margin: 0 0 var(--abstand) }`).

   ZUGESICHERT IN tests/faelle/060_bedienkonzept.php — und NICHT auf
   `.reiterblatt`: Gemessen wird jedes Elternteil, das zwei Karten haelt. Die
   Gegenrichtung wird dort ebenfalls gemessen, und sie ist der Grund, warum
   diese Regel ueberhaupt einmal gefallen ist: „Keine Trennregel steht ohne
   einen Ort, an dem zwei Karten stehen."
   --------------------------------------------------------------------------- */
.reiterblatt > .karte ~ .karte { margin-top: var(--zonenabstand); }

/* ---------------------------------------------------------------------------
   HIER STAND `.reiterblatt > .karte ~ .karte { margin-top: … }` — ENTFALLEN AM
   03.09.2026 MIT ADR-0063.

   Sie gab zwei gestapelten Karten IN EINEM REGISTERBLATT ihren Abstand, weil
   `gap` an `.inhalt.zonen` nur direkte Kinder erreicht und die Karten der
   Voreinstellungen als Enkel lagen (`.inhalt.zonen > .reiterkasten >
   .reiterblatt > .karte`). Gemessen war es am 02.09.2026 im Browser: sechs von
   neun Registerblaettern hielten zwei oder mehr Karten.

   ES GIBT KEIN SOLCHES BLATT MEHR. Der Reiterkasten des Administrationsmenues
   ist in Punkte mit eigener Adresse zerlegt; jede dieser Seiten stapelt
   ihre Karten direkt in `.inhalt.zonen`, und dort greift `gap`. Die
   verbliebenen Registerblaetter — Erscheinung, Vereinsbuch, Statuten, das
   Vereinsfenster des Backends — halten Formulare und keine Karten.

   ZUGESICHERT IN tests/faelle/060_bedienkonzept.php: „Keine Trennregel steht
   ohne einen Ort, an dem zwei Karten stehen." Genau diese Zeile ist beim
   Umbau rot geworden — eine Regel ohne Verwender ist gruen, bevor sie laeuft.
   Kommt ein Blatt mit zwei Karten zurueck, kommt die Regel mit ihm zurueck;
   die Begruendung steht im Verlauf dieser Datei.
   --------------------------------------------------------------------------- */
.reiterkasten:has(.reiterwahl-vereinsart:checked) .reiter[for*="reiter-vereinsart"],
.reiterkasten:has(.reiterwahl-farbe:checked) .reiter[for*="reiter-farbe"],
.reiterkasten:has(.reiterwahl-wappen:checked) .reiter[for*="reiter-wappen"],
.reiterkasten:has(.reiterwahl-statut-kern:checked) .reiter[for*="reiter-statut-kern"],
.reiterkasten:has(.reiterwahl-statut-sitzungen:checked) .reiter[for*="reiter-statut-sitzungen"],
.reiterkasten:has(.reiterwahl-verein-stamm:checked) .reiter[for*="reiter-verein-stamm"],
.reiterkasten:has(.reiterwahl-verein-netz:checked) .reiter[for*="reiter-verein-netz"],
.reiterkasten:has(.reiterwahl-verein-zustand:checked) .reiter[for*="reiter-verein-zustand"],
.reiterkasten:has(.reiterwahl-verein-datenbank:checked) .reiter[for*="reiter-verein-datenbank"],
.reiterkasten:has(.reiterwahl-verein-module:checked) .reiter[for*="reiter-verein-module"],
.reiterkasten:has(.reiterwahl-meine-daten:checked) .reiter[for*="reiter-meine-daten"],
.reiterkasten:has(.reiterwahl-mein-zugang:checked) .reiter[for*="reiter-mein-zugang"],
.reiterkasten:has(.reiterwahl-mein-protokoll:checked) .reiter[for*="reiter-mein-protokoll"],
.reiterkasten:has(.reiterwahl-kontakt-email:checked) .reiter[for*="reiter-kontakt-email"],
.reiterkasten:has(.reiterwahl-kontakt-telefon:checked) .reiter[for*="reiter-kontakt-telefon"],
.reiterkasten:has(.reiterwahl-kontakt-strasse:checked) .reiter[for*="reiter-kontakt-strasse"],
.reiterkasten:has(.reiterwahl-kontakt-plz:checked) .reiter[for*="reiter-kontakt-plz"],
.reiterkasten:has(.reiterwahl-kontakt-ort:checked) .reiter[for*="reiter-kontakt-ort"] {
  color: var(--tinte);
  border-bottom-color: var(--tinte);
  font-weight: 650;
}
.reiterkasten:has(.reiterwahl-vereinsart:focus-visible) .reiter[for*="reiter-vereinsart"],
.reiterkasten:has(.reiterwahl-farbe:focus-visible) .reiter[for*="reiter-farbe"],
.reiterkasten:has(.reiterwahl-wappen:focus-visible) .reiter[for*="reiter-wappen"],
.reiterkasten:has(.reiterwahl-statut-kern:focus-visible) .reiter[for*="reiter-statut-kern"],
.reiterkasten:has(.reiterwahl-statut-sitzungen:focus-visible) .reiter[for*="reiter-statut-sitzungen"],
.reiterkasten:has(.reiterwahl-verein-stamm:focus-visible) .reiter[for*="reiter-verein-stamm"],
.reiterkasten:has(.reiterwahl-verein-netz:focus-visible) .reiter[for*="reiter-verein-netz"],
.reiterkasten:has(.reiterwahl-verein-zustand:focus-visible) .reiter[for*="reiter-verein-zustand"],
.reiterkasten:has(.reiterwahl-verein-datenbank:focus-visible) .reiter[for*="reiter-verein-datenbank"],
.reiterkasten:has(.reiterwahl-verein-module:focus-visible) .reiter[for*="reiter-verein-module"],
.reiterkasten:has(.reiterwahl-meine-daten:focus-visible) .reiter[for*="reiter-meine-daten"],
.reiterkasten:has(.reiterwahl-mein-zugang:focus-visible) .reiter[for*="reiter-mein-zugang"],
.reiterkasten:has(.reiterwahl-mein-protokoll:focus-visible) .reiter[for*="reiter-mein-protokoll"],
.reiterkasten:has(.reiterwahl-kontakt-email:focus-visible) .reiter[for*="reiter-kontakt-email"],
.reiterkasten:has(.reiterwahl-kontakt-telefon:focus-visible) .reiter[for*="reiter-kontakt-telefon"],
.reiterkasten:has(.reiterwahl-kontakt-strasse:focus-visible) .reiter[for*="reiter-kontakt-strasse"],
.reiterkasten:has(.reiterwahl-kontakt-plz:focus-visible) .reiter[for*="reiter-kontakt-plz"],
.reiterkasten:has(.reiterwahl-kontakt-ort:focus-visible) .reiter[for*="reiter-kontakt-ort"] {
  outline: 2px solid var(--tinte);
  outline-offset: 2px;
}
.verwaltung-wappen {
  display: block;
  width: 48px;
  height: 48px;
  object-fit: contain;
  background: #fff;
  border-radius: var(--radius);
}
/*
 * HIER STAND `.verwaltung-art { font-weight: 650 }` — GEFALLEN AM 02.09.2026
 * MIT IHREM EINZIGEN VERWENDER.
 *
 * Die Vereinsart steht in der Karte Erscheinung seitdem als Chip
 * (`.marke`), wie der Betreiber es am 02.09.2026 angeordnet hat. Damit hatte
 * die Klasse null Verwender — und eine Regel ohne Verwender ist gruen, bevor
 * sie laeuft (derselbe Befund wie bei den Maskenregeln `amt` und `etikett`,
 * tests/faelle/165_zeichensatz.php).
 *
 * DIESER VERMERK STEHT HIER UND NICHT NUR IM VERLAUF, weil die naechste
 * Sitzung sonst eine eigene Klasse fuer dieselbe Angabe neu erfindet.
 */
/* ---------------------------------------------------------------------------
   HIER STAND `.kartenkopf` — GEFALLEN AM 02.09.2026 MIT SEINEM EINZIGEN
   VERWENDER, UND DAS IST EINE ANORDNUNG UND KEIN AUFRAEUMEN.

   DREI REGELN standen hier: `.kartenkopf` (flex, Ueberschrift links),
   `.kartenkopf > h2` und `.kartenkopf > .handlung` (margin-left: auto plus
   margin-right: 0). Ihr Zweck war ein Platz fuer GENAU EINE Handlung neben
   dem Kartentitel, gebaut am Vormittag des 02.09.2026 nach dem Satz des
   Betreibers „Aendern ist ueber den Stift zu bedienen".

   AM ABEND DESSELBEN TAGES HAT ER DEN ORT AUFGEHOBEN, im Wortlaut: „Stift
   außerhalb der Datenboxen ist falsch. Beispiel Vereinsart, Farbe und Wappen.
   Jede box muss den Stift haben." Und: „Ein Stift auch nit irgendwo, sondern
   immer an der selben Stelle in der Box. Ich entside mich jetzt für in der
   rechten Ecke." (ADR-0024, Nachtrag vom 02.09.2026.)

   DAMIT HATTE `.kartenkopf` NULL VERWENDER — gemessen: `kern/ansicht/
   verwaltung.php:69` war der einzige im ganzen Bestand. EINE REGEL OHNE
   VERWENDER IST GRUEN, BEVOR SIE LAEUFT (derselbe Befund wie bei
   `.verwaltung-art` zwanzig Zeilen weiter oben und bei den Maskenregeln
   `amt` und `etikett`, tests/faelle/165_zeichensatz.php). Sie stehen zu
   lassen hiesse, der naechsten Sitzung einen Kartenkopf anzubieten, den es
   nicht mehr geben darf.

   WAS AUS DEN DREI REGELN GEWORDEN IST, UND ES IST NICHT NICHTS: Die
   tragende von ihnen — margin-left: auto ZUSAMMEN MIT margin-right: 0, weil
   `.handlung` `margin: 0 auto` traegt und die Kurzschreibweise margin-right
   mitsetzt — steht jetzt bei `.spalte-aktionen > .handlung` weiter oben. Der
   gemessene Befund vom 02.09.2026 (der Stift sass bei 1280 px auf x = 710
   einer 1060 px breiten Karte, und die Kette war gruen) gilt dort
   unveraendert weiter.

   ZUGESICHERT IN tests/faelle/420_verwaltung.php: dass die Klasse in keiner
   Vorlage und in diesem Blatt mehr vorkommt.
   --------------------------------------------------------------------------- */
/* ---------------------------------------------------------------------------
   DER FARBFLECK — EIN HEXWERT IST KEINE FARBE, DIE MAN SIEHT.

   ANLASS: In der Karte Erscheinung stand die Fahnenfarbe nur als Text
   (`#AE0118`). Wer nachsehen will, welche Farbe der Verein fuehrt, liest
   sechs Zeichen und muss sie sich denken.

   ER IST KEINE FUELLUNG IM SINN VON ADR-0024, und das ist hergeleitet und
   nicht behauptet: Der Nachtrag vom 20.08.2026 nennt eine Fuellung „eine
   Flaeche, die eine Hand zu druecken versucht … ein Block mit eigenem
   Hintergrund UND eigenem Treffbereich"; der zweite Nachtrag desselben Abends
   stellt ausdruecklich fest, dass die Verknuepfung ein „und" ist. Der Fleck
   hat keinen Treffbereich, traegt keinen Text und bleibt mit 10 px innerhalb
   der Groesse, die derselbe Nachtrag fuer eine Markierung nennt.

   ER IST AUCH KEINE SIGNALFARBE (ADR-0053): Er bedeutet nichts, er ZEIGT den
   Wert, der eine Zeile weiter als Text steht. Und er fuehrt keinen neuen
   Farbwert — `--verein` ist die Fahnenfarbe selbst, dieselbe, die das
   Kopfband und die Hauptaktion tragen.
   --------------------------------------------------------------------------- */
.farbfleck {
  display: inline-block;
  width: 10px;
  height: 10px;
  border-radius: 999px;
  background: var(--verein);
  border: 1px solid var(--linie);
  margin-right: 6px;
}
.vereinsbuch-haupt {
  display: flex;
  align-items: center;
  gap: 8px;
  margin: 8px 0 0;
}

/* 22 PX SEIT DEM 08.09.2026 (ADR-0078, Punkt 2; TOKENS.md: „Zeichen in
   Knoepfen 22 px" — Kopfband, Leiste, Zeile dieselbe Zahl). Bis dahin 24. */
.handlung-bild {
  display: block;
  width: 22px;
  height: 22px;
  background-color: currentColor;
  -webkit-mask: center / contain no-repeat;
          mask: center / contain no-repeat;
}
.handlung-bild[data-zeichen="bearbeiten"] {
  -webkit-mask-image: url(zeichen/bearbeiten.svg);
          mask-image: url(zeichen/bearbeiten.svg);
}
/* DAS ZWEITE HANDLUNGSZEICHEN DES PORTALS: LOESCHEN.
   ---------------------------------------------------------------------------
   ANGEORDNET vom Betreiber am 05.09.2026, im Wortlaut: "Papierkorb Zeichen
   aufnehemen." Festgehalten in ADR-0024, Nachtrag vom 05.09.2026 (spaeter).

   SIE STEHT UNMITTELBAR NEBEN DER ERSTEN UND HAT WOERTLICH DIESELBE FORM —
   derselbe Waehler bis auf den Wert von `data-zeichen`, dieselben zwei
   Eigenschaften, dieselbe Reihenfolge (Praefix vor Standard). Groesse, Farbe
   und Maskenart kommen aus `.handlung-bild` darueber und stehen hier nicht
   noch einmal; eine zweite Kopie davon waere eine zweite Wahrheit, die am Tag
   der ersten Aenderung auseinanderlaeuft.

   DER ORT KOMMT NICHT VON HIER, SONDERN VOM KNOPFNAMEN. Der Nachtrag sagt es
   ausdruecklich: "sein ORT haengt am Knopfnamen `.handlung` und nicht am
   Zeichen." Wirksam wird er ueber `.spalte-aktionen > .handlung` weiter oben.

   WAS DAMIT NICHT ENTSCHIEDEN IST, und der Nachtrag benennt es selbst: ob ein
   Loeschknopf eine Rueckfrage bekommt. Der Bestand beantwortet das heute
   uneinheitlich, und diese Regel aendert daran nichts.
   --------------------------------------------------------------------------- */
.handlung-bild[data-zeichen="loeschen"] {
  -webkit-mask-image: url(zeichen/loeschen.svg);
          mask-image: url(zeichen/loeschen.svg);
}

/* DRITTES, VIERTES UND FUENFTES HANDLUNGSZEICHEN: WEITER, ZURUECK, VERLAUF.
   ---------------------------------------------------------------------------
   ANGEORDNET vom Betreiber am 05.09.2026, im Wortlaut: „mit Stift und
   Papierkorb in die Zeile und zeichnen lassen". Festgehalten in ADR-0024,
   Nachtrag vom 05.09.2026 (nachts): „`→`, `←` und `☰` bekommen ihre eigene,
   wie das Bearbeiten und das Löschen. Damit ist die Zeile einheitlich und
   nicht mehr halb gezeichnet, halb getippt."

   DIE FORM IST WOERTLICH DIE DER ZWEI DARUEBER — derselbe Waehler bis auf den
   Wert von `data-zeichen`, dieselben zwei Eigenschaften, dieselbe Reihenfolge
   (Praefix vor Standard). Groesse, Farbe und Maskenart kommen aus
   `.handlung-bild`; eine zweite Kopie davon liefe am Tag der ersten Aenderung
   auseinander.

   DIE NAMEN NENNEN DIE HANDLUNG UND NICHT DIE ZEICHNUNG, wie `bearbeiten` und
   `loeschen`: Ein Pfeil nach rechts fuehrt im Zeugwart das Ausgeben und in den
   Sitzungen das Oeffnen — `weiter` traegt beide, `pfeil-rechts` waere ein Name
   fuer die Feder und nicht fuer den Vorgang. Dieselbe Ueberlegung steht seit
   dem 05.09.2026 in module/sitzungen/seiten/beschluesse.php beim `bearbeiten`
   des Zustandsknopfes.

   DIE DREI SVG SIND NEU GEZEICHNET UND NICHT ABGELEITET: viewBox 0 0 48 48,
   `fill: none`, Strichstaerke 3, runde Enden und Ecken — die Bauart des
   ganzen Satzes, gemessen an bearbeiten.svg und loeschen.svg. Was zaehlt, ist
   die Silhouette: die Datei wird als MASKE gelesen, ihre Strichfarbe #1B211E
   kommt nie an den Schirm.

   DEM BETREIBER VORGELEGT, BEVOR SIE FEST WERDEN — der Nachtrag verlangt es:
   „Sie werden im Stil des vorhandenen Satzes entworfen und dem Betreiber als
   Bild vorgelegt, bevor sie fest werden. Zeichnen ist Bauen; welche Marke eine
   Handlung fuehrt, entscheidet er."
   --------------------------------------------------------------------------- */
.handlung-bild[data-zeichen="weiter"] {
  -webkit-mask-image: url(zeichen/weiter.svg);
          mask-image: url(zeichen/weiter.svg);
}
/* HINAUF / HINUNTER IM PROGRAMM — DIESELBE MASKE, GEDREHT.
   Nachjustage 12.09.2026, AUFTRAG-KERN.md Abschnitt 4: kein neues Zeichen
   `hoch`/`runter`; `weiter` um −90° / +90°. Wortlaut bleibt in title und
   aria-label. */
.handlung-hinauf .handlung-bild {
  transform: rotate(-90deg);
}
.handlung-hinunter .handlung-bild {
  transform: rotate(90deg);
}
.handlung-bild[data-zeichen="zurueck"] {
  -webkit-mask-image: url(zeichen/zurueck.svg);
          mask-image: url(zeichen/zurueck.svg);
}
.handlung-bild[data-zeichen="verlauf"] {
  -webkit-mask-image: url(zeichen/verlauf.svg);
          mask-image: url(zeichen/verlauf.svg);
}
/* DAS SECHSTE ZEICHEN DIESES BLOCKS: KOPIEREN — 17.09.2026.
   ---------------------------------------------------------------------------
   DIE SECHS SIND DIE ZEICHEN, DIE DER BETREIBER FUER DIE ZEILE ANGEORDNET HAT
   (bearbeiten, loeschen, weiter, zurueck, verlauf, kopieren) — UND NICHT ALLE
   `.handlung-bild`. Von denen gibt es mehr; die geltende Zahl steht im Titel
   von tests/faelle/165_zeichensatz.php („Es gibt Maskenregeln fuer
   Handlungszeichen (n)"), dort gemessen und bei jedem Lauf neu. Wer die Sechs
   fuer den Satz haelt, liest an ihrer Menge vorbei.
   ---------------------------------------------------------------------------
   ANGEORDNET vom Betreiber am 17.09.2026, am Testserver, im Wortlaut: „Ich
   kann Programme nicht mehr bearbeiten. Da fehlt der Stift und es ist schon
   wieder ein Textbutton eingebaut: Kopieren." Und auf die Frage, welche Marke
   sie tragen soll: „Falls es kein Zeichen gibt, nimm ein passendes
   Standartzeichen und ergaenze es im Regelwerk."

   ES GAB KEINES. Gemessen am 17.09.2026 ueber die Maskenregeln dieses Blattes:
   fuenf Handlungszeichen (bearbeiten, loeschen, weiter, zurueck, verlauf), und
   der ganze Satz in oeffentlich/zeichen/ fuehrt kein Kopierzeichen.

   DIE ZEICHNUNG IST DAS STANDARDSYMBOL UND NICHTS EIGENES: zwei ueberlappende
   Blaetter, das hintere als L-Weg, damit es nicht durch das vordere laeuft.
   Seine Bauart ist die des Satzes und gemessen an bearbeiten.svg und
   loeschen.svg: viewBox 0 0 48 48, `fill: none`, Strichstaerke 3, runde Enden
   und Ecken, Kasten 8..40 in beiden Richtungen. Was zaehlt, ist die
   Silhouette: die Datei wird als MASKE gelesen, ihre Strichfarbe #1B211E kommt
   nie an den Schirm.

   ANGESEHEN UND NICHT NUR GEBAUT (.claude/rules/50-gestaltung.md: „Wer
   Gestaltung aendert, sieht sie sich an"): gerendert neben bearbeiten,
   loeschen, ansehen und verlauf bei 22, 44 und 96 px. Bei 22 px — der Groesse
   aus ADR-0078 Punkt 2 — sind die zwei Blaetter getrennt zu erkennen.

   DIE FORM DIESER REGEL IST WOERTLICH DIE DER FUENF DARUEBER: derselbe Waehler
   bis auf den Wert von `data-zeichen`, dieselben zwei Eigenschaften, dieselbe
   Reihenfolge (Praefix vor Standard). Groesse, Farbe und Maskenart kommen aus
   `.handlung-bild`; eine zweite Kopie davon liefe am Tag der ersten Aenderung
   auseinander.

   SEIN VERWENDER IST DIE ZEILE DER PROGRAMMLISTE
   (module/notenarchiv/seiten/programme.php). Faellt er weg, faellt diese Regel
   mit — tests/faelle/165_zeichensatz.php misst Regel und Verwender gegeneinander,
   und eine Regel ohne Verwender ist gruen, bevor sie laeuft.

   DEM LEAD ZUGELIEFERT FUER DAS REGELWERK: Der Betreiber hat „ergaenze es im
   Regelwerk" angeordnet; der ADR-Text ist nicht Sache dieser Datei. Was hier
   steht, ist die Zeichnung und ihr Eintrag im Code. */
.handlung-bild[data-zeichen="kopieren"] {
  -webkit-mask-image: url(zeichen/kopieren.svg);
          mask-image: url(zeichen/kopieren.svg);
}

/* HIER STAND VOM VORMITTAG BIS ZUM ABEND DES 08.09.2026 DAS SECHSTE
   HANDLUNGSZEICHEN `mehr` (ADR-0024, Nachtrag 08.09.2026, #145). ADR-0078,
   Punkt 7: Der Oeffner traegt wieder `···` (`.mehr-punkte`), die Datei
   `zeichen/mehr` ist geloescht — eine Maskenregel ohne Datei und ohne Verwender waere gruen, bevor
   sie laeuft (165_zeichensatz.php). Es waren damit wieder fuenf
   Handlungszeichen; seit dem 17.09.2026 sind es SECHS — `kopieren` steht
   unmittelbar darueber. DIE ZAHL STEHT HIER MIT IHREM DATUM UND NICHT ALS
   STAND: Die geltende misst 165_zeichensatz.php und nennt sie im Titel
   („Es gibt Maskenregeln fuer Handlungszeichen (n)"). Wer die Zahl hier fuer
   den Stand haelt, liest an ihrem Datum vorbei. */

/* ===========================================================================
   DIE LEISTE — EIN BAUTEIL FUER ALLE LISTEN (ADR-0078, Scheibe B; Lieferung
   08.09.2026, BAUTEILE.md „Leiste", ZEICHEN.md „Wie die drei Leistenknoepfe
   gebaut sind", TOKENS.md).

   Betreiber, 08.09.2026: „ich will, dass die Module immer dasselbe Prinzip
   haben. etwas mehr Luft im Kopf. Suchfeld in der ersten Zeile separat mit
   Buttons Suchen, Spalten und Ansicht ausgeben. Anlegen immer oben in der
   Ueberschrift der Seite. … Weitere Buttons eher Filter, aber nicht mit
   Gewalt seitenbreit."

   DIE KLASSEN HEISSEN WEITER `vereinsbuch-…`, wie in der Lieferung: Sie hat
   das Bauteil des Vereinsbuchs auf Zeugwart und Notenarchiv uebertragen und
   die Namen mitgenommen (BAUTEILE.md: „heute .vereinsbuch-suche — NEU als
   Bauteil aller Listen"). Ein Umbenennen waere eine Aenderung, die niemand
   angeordnet hat.

   ZEILE 1: Das Suchfeld nimmt den Rest (`flex: 1 1 0; min-width: 0` — es
   schrumpft bis 0, damit die drei Quadrate mit ihm auch bei 320 px in einer
   Zeile stehen), dann Suchen, Spalten, Ansicht ausgeben als 44 x 44 mit
   Zeichen 22 px (Lupe, Spaltenraster, Drucker) und dem Wort im `.knopf-wort`
   nur fuer die Vorlesehilfe. ZEILE 2: die Auswahlfelder in Wortbreite. Der
   Zeilenbruch dazwischen ist ein leerer Flex-Posten (`::before`, volle
   Breite), damit Zeile 2 unabhaengig von Zeile 1 steht. Die Reihenfolge kommt
   aus `order` und ist in jedem Modul dieselbe: Feld 1, Knoepfe 2, Bruch 3,
   Filter 4 — sie haengt nicht am Markup.

   OHNE VORRANGMARKEN UND OHNE DIE ALTEN PLAETZE: Die Lieferung brauchte 24
   Vorrangmarken, um die Plaetze ihrer eigenen Modulblaetter (`#art`,
   `#sortieren`, `:nth-of-type`) aufzuheben; als Grundregel gibt es diese
   Plaetze nicht (LIESMICH.md, Bauhinweis 2). Gemessen am 09.09.2026: keine
   Vorrangmarke im Stilblatt (060_bedienkonzept.php haelt es).

   ABSTAND SUCHEN → SPALTEN 10 PX: Die gelieferte Vereinsbuch-Seite misst 20
   (ein `:nth-of-type(2) { margin-left: 10px }` ihres Modulblatts), Zeugwart
   und Notenarchiv 10, BAUTEILE.md/TOKENS.md 10. Zwei Seiten und die Prosa
   gegen einen Rest des alten Platzes — 10; gemeldet.
   =========================================================================== */
.vereinsbuch-suche {
  display: flex;
  flex-direction: column;
  align-items: stretch;
  gap: 4px;
  margin: 0;
  max-width: none;
  padding: 12px;
  background: var(--grund);
  border: 1px solid var(--linie);
  border-bottom: 0;
  border-radius: var(--radius-gross) var(--radius-gross) 0 0;
}
.vereinsbuch-suche > label {
  display: block;
  margin: 0 0 6px;
  font-size: 14px;
  color: var(--tinte-leise);
}
.vereinsbuch-suche-zeile {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px 10px;
}
/* `hidden` MUSS AN DIESER ZEILE WIRKEN — 17.09.2026, gemessen und nicht
   vermutet.

   `display: flex` darueber ist eine Autorenregel und schlaegt
   `[hidden] { display: none }` aus dem Vorgabe-Stilblatt des Browsers. Wer
   diese Klasse an ein verstecktes Element haengt, bekommt es TROTZDEM zu
   sehen — dieselbe Falle wie am Vollbild-Knopf des Betrachters
   (betrachter.css:98-124) und am `.formular-fuss` der Offline-Leiste
   (529_offline_mappe.php).

   DER GEMESSENE FALL: `oeffentlich/offline.html` traegt die Stiftleiste als
   `class="vereinsbuch-suche-zeile stiftleiste" hidden`. Gedeckt war das
   allein durch `.stiftleiste[hidden]` in `betrachter.css` — und die STATISCHE
   Offline-Seite laedt jenes Stilblatt erst NACH dem Aufdecken des Betrachters
   nach (offlinemappe-lesen.js), auf dem Fehlerpfad gar nicht. Bis dahin stand
   die Leiste sichtbar da, mit fuenf Knoepfen ohne Wirkung.

   DIE REGEL STEHT HIER UND NICHT DORT, weil hier die URSACHE steht: Wer
   `display` setzt, nimmt `hidden` die Wirkung — und dann gehoert die Ausnahme
   danebengeschrieben und nicht in ein zweites Blatt, das eine Seite vielleicht
   gar nicht laedt. 528_dienstarbeiter.php leitet die Menge ab: jedes Element
   mit `hidden` in `oeffentlich/offline.html` gegen jede Regel dieses Blattes,
   die auf es passt und `display` setzt. */
.vereinsbuch-suche-zeile[hidden] { display: none; }
.vereinsbuch-suche-zeile::before { content: ""; order: 3; flex: 1 0 100%; height: 0; margin: -6px 0 0; }
.vereinsbuch-suche-zeile > input[type="search"] {
  order: 1;
  flex: 1 1 0;
  min-width: 0;
  max-width: none;
  height: 44px;
  min-height: 44px;
  box-sizing: border-box;
  padding: 0 12px;
  border: 1px solid var(--linie-stark);
  border-radius: var(--radius);
  background: var(--karte);
  font: inherit;
  font-size: 15px;
}
.vereinsbuch-suche-zeile > .knopf-still,
.vereinsbuch-suche-zeile > a.knopf-still {
  order: 2;
  flex: 0 0 auto;
  width: auto;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  height: 44px;
  min-height: 44px;
  box-sizing: border-box;
  padding: 0 16px;
  border: 1px solid var(--linie-stark);
  border-radius: var(--radius);
  background: var(--karte);
  color: var(--tinte);
  font-size: 15px;
  font-weight: 600;
  text-decoration: none;
  white-space: nowrap;
  overflow: visible;
}
.vereinsbuch-suche-zeile > .knopf-still:hover,
.vereinsbuch-suche-zeile > a.knopf-still:hover { background: var(--grund-tief); color: var(--tinte); text-decoration: none; }
.vereinsbuch-suche-zeile > .knopf-still:focus-visible,
.vereinsbuch-suche-zeile > a.knopf-still:focus-visible,
.vereinsbuch-suche-zeile > input[type="search"]:focus-visible,
.vereinsbuch-suche-zeile > select:focus-visible { outline: 2px solid var(--verein); outline-offset: 1px; }
/* DIE DREI KNOEPFE TRAGEN NUR IHR ZEICHEN — Betreiber, 08.09.2026: „jetzt
   lassen wir bei den drei Buttons die Beschriftung ueberall weg." Quadratisch
   44 x 44, Zeichen 22 px als Maske in `currentColor`, in jeder Breite. Das Wort
   bleibt im Markup (`.knopf-wort`, 1 x 1 px) und steht als `title`. ADR-0024
   laesst ein Zeichen ohne Wort nur zu, wenn es universell verstaendlich ist —
   Lupe, Spaltenraster, Drucker: der Betreiber hat es am Bild entschieden
   (ADR-0078, Zeile 8). Die zwei neuen Zeichen `suchen.svg` und `spalten.svg`
   liegen ohne den c2pa-Block der Lieferung im Satz (165_zeichensatz.php).

   DIE WAEHLER HINGEN BIS ZUM 10.09.2026 AN EINEM EINZIGEN VORFAHREN
   (`.vereinsbuch-suche-zeile >`), UND DAS WAR DER GEGENSTAND EINES BEFUNDS:
   BAUTEILE.md:113-114 und ZEICHEN.md:39-47 sagen „ein Zeichenknopf ohne
   sichtbares Wort" — die Menge ist JEDER solche Knopf, nicht der einer Leiste.
   Gemessen am 10.09.2026: `knopf-wort` steht in kern/ und module/ an 11
   Stellen, gedeckt war genau eine Leiste. EIN ZEICHENKNOPF AUSSERHALB JENER
   LEISTE ZEIGTE SEIN WORT SICHTBAR UND SEIN ZEICHEN GAR NICHT — und keine
   Zusicherung merkte es, weil die Kette Markup misst und kein Bild.

   DIE MENGE STEHT JETZT AN DER KLASSE und nicht an einem Vorfahren. Sie ist
   damit dieselbe, die ZEICHEN.md beschreibt; die 11 heutigen Fundstellen
   liegen alle in einer Leiste, und genau deshalb aendert sich am Bild nichts —
   was sich aendert, ist die Reichweite fuer den zwoelften Knopf.

   `.knopf-wort` STEHT ALS EIGENE REGEL und nicht mehr unter `.knopf-still`:
   Das Wort gehoert dem Knopf, nicht seiner Sorte. Es ist dieselbe Bauform wie
   `.nur-lesbar` (1 x 1 px, `clip-path: inset(50%)`) — zwei Namen fuer zwei
   Gegenstaende: `.nur-lesbar` beschriftet, `.knopf-wort` IST die Beschriftung
   eines Knopfes, den man sonst nur am Zeichen erkennt. */
.knopf-still.suchen,
.knopf-still.spalten,
a.knopf-still.ausgeben { position: relative; flex: 0 0 44px; width: 44px; min-width: 44px; padding: 0; gap: 0; }
.knopf-still.suchen::before,
.knopf-still.spalten::before,
a.knopf-still.ausgeben::before {
  content: "";
  display: inline-block;
  width: 22px;
  height: 22px;
  flex: none;
  background: currentColor;
  -webkit-mask: center / contain no-repeat;
          mask: center / contain no-repeat;
}
.knopf-still.suchen::before { -webkit-mask-image: url(zeichen/suchen.svg); mask-image: url(zeichen/suchen.svg); }
.knopf-still.spalten::before { -webkit-mask-image: url(zeichen/spalten.svg); mask-image: url(zeichen/spalten.svg); }
a.knopf-still.ausgeben::before { -webkit-mask-image: url(zeichen/drucken.svg); mask-image: url(zeichen/drucken.svg); }
.knopf-wort { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
/* DIE FILTER: Auswahlfelder in Wortbreite, 44 hoch, Winkel 10 x 6 rechts bei
   10 px in --tinte-leise (#556059, eingebettet — die CSP erlaubt `img-src
   data:`), 15 px 400. Die Beschriftung steht als erste Option im Feld („Art
   alle", „Stoebern"); das `label` ist fuer die Vorlesehilfe da. „Nichts ist
   seitenbreit" ab 700 (BAUTEILE.md). */
.vereinsbuch-suche-zeile > .vereinsbuch-artfilter-label,
.vereinsbuch-artfilter-label {
  order: 4;
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: 0;
  border: 0;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
}
.vereinsbuch-artfilter,
.vereinsbuch-suche-zeile > select.vereinsbuch-artfilter {
  order: 4;
  flex: 0 0 auto;
  width: auto;
  max-width: 100%;
  margin: 0;
  height: 44px;
  min-height: 44px;
  box-sizing: border-box;
  padding: 0 30px 0 12px;
  border: 1px solid var(--linie-stark);
  border-radius: var(--radius);
  background-color: var(--karte);
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' fill='none' stroke='%23556059' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 10px center;
  -webkit-appearance: none;
          appearance: none;
  font: inherit;
  font-size: 15px;
  font-weight: 400;
  line-height: 42px;
  color: var(--tinte);
  cursor: pointer;
}
.vereinsbuch-artfilter:hover { background-color: var(--grund-tief); }
/* HANDY (BAUTEILE.md „Leiste — Handy"): Zeile 1 Feld + 3 x 44 in EINER Zeile
   (das Feld schrumpft bis 0), die Filter zu zweit je Zeile (`calc(50% - 3px)`,
   14 px, Innenabstand 0 26 0 10), Abstaende 8/6. Die Leiste bleibt seitenbreit
   — nur die Kolonne schiebt (Block bei 700 px, Abschnitt Kolonne). Gemessen an
   den drei gelieferten Seiten bei echten 390 px: Filter 178–179 px breit, zu
   zweit; Feld 212–214, dann drei Quadrate zu 44 mit 6 px Abstand. */
@media (max-width: 700px) {
  .vereinsbuch-suche { width: 100%; max-width: 100%; box-sizing: border-box; overflow: hidden; }
  .vereinsbuch-suche-zeile { width: 100%; max-width: 100%; gap: 8px 6px; }
  .vereinsbuch-suche-zeile::before { margin: -8px 0 0; }
  .vereinsbuch-suche-zeile > select.vereinsbuch-artfilter { flex: 1 1 calc(50% - 3px); max-width: calc(50% - 3px); font-size: 14px; padding: 0 26px 0 10px; }
}

/* EIN BOXMODELL — Betreiber, 08.09.2026: „das Hintergrund- bzw. Boxmodell ist
   in allen drei Bereichen unterschiedlich. Ueberall so wie im Vereinsbuch."
   Alle drei Bestandsseiten laufen mit `zonen`; die Leiste und die Huelle sind
   die eine weisse Karte (BAUTEILE.md „Karte": Flaeche --karte, 1 px --linie,
   Radius 10, padding 0 fuer Listenkarten; Leiste oben rund, Huelle unten rund).

   IM VEREINSBUCH TRAEGT `.vereinsbuch-karte` DIE KARTE; im Zeugwart und im
   Notenarchiv stehen Leiste und Huelle als Zonen direkt in `main` (Markup der
   Lieferung). DORT ZIEHT SICH DER NACHBAR UM DEN ZONENABSTAND NACH OBEN —
   derselbe Griff, den die Lieferung fuer die zweite Box der Stueckseite nennt
   (BAUTEILE.md „Feldliste": `margin-top: -14px`, Handy -10). GEMESSEN an den
   gelieferten Zeugwart- und Notenarchiv-Seiten: 14 px Luecke zwischen Leiste
   und Kolonne (der Zonenabstand), im Vereinsbuch derselben Lieferung 0 —
   BAUTEILE.md sagt fuer alle drei „unten offen zur Kolonne", „eine weisse
   Karte". Gebaut ist die Karte; die Luecke ist gemeldet.

   DIE RADIEN BLEIBEN AUCH UNTER 700 (BAUTEILE.md sagt „Handy: kein Radius
   (Kern)", die drei gelieferten Seiten messen bei echten 390 px oben 10/10 und
   unten 10/10 — das Bild gilt, gemeldet). */
.karte.vereinsbuch-karte { padding: 0; overflow: hidden; border: 1px solid var(--linie); border-radius: var(--radius-gross); }
.vereinsbuch-karte > .listenlauf,
.inhalt.zonen > .listenlauf { margin: 0; border-radius: 0 0 var(--radius-gross) var(--radius-gross); }
.inhalt.zonen > .vereinsbuch-suche { border-radius: var(--radius-gross) var(--radius-gross) 0 0; }
.inhalt.zonen > .listenlauf {
  background: var(--karte);
  border: 1px solid var(--linie);
  border-radius: 0 0 var(--radius-gross) var(--radius-gross);
}
.inhalt.zonen > .vereinsbuch-suche + .listenlauf,
.inhalt.zonen > .vereinsbuch-suche + .leerhinweis,
.inhalt.zonen > .blaetter,
.inhalt.zonen > .listenlauf + .filterzeile { margin-top: calc(-1 * var(--zonenabstand)); }
.inhalt.zonen > .listenlauf:has(+ .filterzeile) { border-radius: 0; }
/* DIE BLAETTERLEISTE UNTER EINER KARTE — derselbe Fuss, anderer Vorgaenger.
   `notenarchiv/bestand.php` legt seine Kolonne als `.listenlauf` unmittelbar
   in die Zone, `notenarchiv/namenslisten.php` je Liste in eine `.karte`. Die
   Regeln darunter hingen bis zum 10.09.2026 an der STELLE
   (`.listenlauf + .filterzeile`) statt an der SACHE (`.blaetter`) — und damit
   fiel die Leiste der Namenslisten auf die Pillenform von `.marke` zurueck
   (gemessen am Bild: border-radius 999px, 24 px hoch, 13,6 px). Die untere
   Rundung der Karte faellt weg, damit Karte und Fuss eine Flaeche sind. */
.inhalt.zonen > .karte:has(+ .blaetter) {
  border-bottom-left-radius: 0;
  border-bottom-right-radius: 0;
}
/* DER LEERHINWEIS NIMMT DEN PLATZ DER KOLONNE — Lieferung, Zeugwart-Blatt
   (`.zw2 .leerhinweis`): Fläche --karte, 1 px --linie, unten rund. `max-width:
   none` ist hergeleitet: Eine Karte, die schmaler ist als ihre Leiste, ist
   keine (BAUTEILE.md „eine weisse Karte"). */
.inhalt.zonen > .vereinsbuch-suche + .leerhinweis {
  margin: calc(-1 * var(--zonenabstand)) 0 0;
  padding: 16px 12px;
  max-width: none;
  background: var(--karte);
  border: 1px solid var(--linie);
  border-radius: 0 0 var(--radius-gross) var(--radius-gross);
}
.vereinsbuch-karte > .vereinsbuch-suche + .leerhinweis { margin: 0; padding: 16px 12px; max-width: none; }

/* ---------------------------------------------------------------------------
   DIE LEISTE AUF EINER SEITE OHNE ZONEN — 10.09.2026, ABGELEITET UND MIT
   DIESEM SATZ DANEBEN (ADR-0078, Entscheidung Punkt 5: „Ein Wert, der fehlt,
   wird aus dem Bauteil hergeleitet — und die Herleitung steht im Code
   daneben").

   DER ANLASS: BAUTEILE.md „Seitenkopf" nimmt „Spalten" aus dem Seitenkopf und
   zieht es in die Leiste; die Leiste ist „NEU als Bauteil ALLER Listen"
   (Ueberschrift des Abschnitts). Gemessen am 10.09.2026 stand der Oeffner der
   Spaltenwahl an 17 Stellen in 15 Modulseiten im Seitenkopf, und keine dieser
   Seiten laeuft mit Zonen. Die zwei Waehler darueber
   (`.inhalt.zonen > …`, `.vereinsbuch-karte > …`) erreichen sie nicht.

   DIE BAUART IST DIESELBE, EINE EBENE TIEFER: Leiste oben rund und unten
   offen, Huelle darunter mit Flaeche, Rand und unterem Radius — „Leiste +
   Kolonne sind die eine weisse Karte" (BAUTEILE.md „Karte"), „Huelle:
   --karte, 1 px --linie, Radius 0/0/10/10" (BAUTEILE.md „Liste"). Die drei
   Erklaerungen sind woertlich die von `.inhalt.zonen > .listenlauf`; neu ist
   allein der Ort.

   DIE ZWEI AUSNAHMEN STEHEN IM WAEHLER UND SIND GEMESSEN: `.vereinsbuch-karte`
   traegt den Rand selbst (Z. oben), ein zweiter an der Huelle waere eine
   Doppellinie; `.inhalt.zonen` hat seine eigene Regel mit dem
   Zonenabstand-Ausgleich.

   DIE GRENZE, UND SIE STEHT SEIT DEM 10.09.2026 HIER UND NICHT NUR IN ZWOELF
   SEITENDATEIEN: „ein Suchfeld waere eine neue Funktion und keine Gestaltung“.
   Zwoelf dieser Leisten tragen deshalb genau ein Bedienelement — den
   Zeichenknopf „Spalten" —, weil ihre Liste weder Suche noch Filter kennt:
   sitzungen/sitzungen, sitzungen/beschluesse-Geschwister, termine/termine,
   notenarchiv/{kategorien, mappen, programme, verleih, schrank},
   zeugwart/{arten, ausgaben, gruppen, lagerorte, zustaende}. Zwoelf ist die
   Zahl der Leisten OHNE Suche und ohne Filter; vierzehn ist die Zahl der neuen
   Leisten insgesamt (notenarchiv/stimmen und notenarchiv/meinemappe tragen
   einen Filter).

   UND DAS IST EINE OFFENE VORLAGE AN DEN BETREIBER, KEINE ENTSCHIEDENE FORM.
   Die Lieferung zeigt die Leiste an drei Stellen, und an allen drei mit
   Suchfeld, sichtbarer Beschriftung und drei Zeichenknoepfen (BAUTEILE.md
   „Leiste"; farbsatz-gelb/zeugwart-bestand.html). Eine Leiste, in der nichts
   als das Spaltenraster steht — ohne sichtbares Wort, und auf einem
   Beruehrgeraet auch ohne `title` —, hat er am Bild nicht gesehen; ADR-0078,
   Tabelle Zeile 8 nimmt das wortlose Zeichen ausdruecklich AN DEN DREI
   GELIEFERTEN LEISTEN ab. Gebaut ist sie, weil BAUTEILE.md „Seitenkopf"
   „Spalten" aus dem Seitenkopf nimmt und die Leiste „NEU als Bauteil ALLER
   Listen" fuehrt — der Knopf muss irgendwo hin. Was NICHT entschieden ist:
   ob diese Gestalt bleibt. */
main.inhalt:not(.zonen) > .vereinsbuch-suche + .listenlauf {
  margin-top: 0;
  background: var(--karte);
  border: 1px solid var(--linie);
  border-radius: 0 0 var(--radius-gross) var(--radius-gross);
}

/* ---------------------------------------------------------------------------
   DIE LISTENKARTE — 10.09.2026, BERICHTIGT AM SELBEN TAG NACH EINER MESSUNG IM
   BROWSER.

   HIER STAND, dass eine Karte, die eine Leiste traegt, ihrer Huelle Flaeche,
   Rand und unteren Radius gibt. DAS WAR EINE HALBE UEBERNAHME und hat einen
   Kasten in einen Kasten gesetzt: Seit die Grundregel `.karte` den 1-px-Rand
   traegt, stand eine gerahmte Kolonne in einer gerahmten Karte, dazwischen 16 px
   weisser Innenabstand. GEMESSEN bei 1280 px an zeugwart/arten, notenarchiv/
   kategorien, notenarchiv/programme und notenarchiv/verleih: Leiste um 17 px
   eingerueckt (16 Polster + 1 Rand), zwei Raender ineinander.

   DIE LIEFERUNG SETZT DAS PAAR ZUSAMMEN und nicht halb: `padding: 0;
   overflow: hidden; border: 1px solid var(--linie); border-radius: 10px`
   steht dort an beiden Karten, die einen Rand tragen (`.vb2
   .vereinsbuch-karte`, `.na2-stueck .karte`); BAUTEILE.md „Karte" schreibt
   „padding 0 fuer Listenkarten", BAUTEILE.md „Leiste" „Leiste + Kolonne sind
   die eine weisse Karte".

   GEBAUT IST DESHALB DIESELBE BAUART WIE AN `.karte.vereinsbuch-karte`, das
   der Betreiber am Bild abgenommen hat: Die KARTE ist die Box — sie traegt
   Flaeche, Rand, Radius und klammert mit `overflow: hidden`; Leiste und Huelle
   liegen randlos darin. GEMESSEN an mitglieder.html (der gebauten
   Vereinsbuchseite): Karte padding 0, Huelle border 0, Radius 0/0/10/10.

   DIE MENGE IST ABGELEITET UND NICHT AUFGEZAEHLT: `:has(> .vereinsbuch-suche)`
   — jede Karte, die eine Leiste fuehrt, heute acht, morgen die neunte. Eine
   Liste von Seitenpfaden waere am Tag der neunten gruen und falsch
   (.claude/rules/00-jede-regel-mit-anlass.md, Nachtrag 07.09.2026).

   DIE UEBERSCHRIFT BEKOMMT IHREN INNENABSTAND ZURUECK, weil die Karte keinen
   mehr hat: `padding: 12px 12px 8px` ist die Zahl aus BAUTEILE.md „Karte",
   Zeile „Kartenueberschrift h2" — dieselbe, die `.na2-stueck .karte > h2` der
   Lieferung fuehrt. Der Kontextsatz darunter steht auf denselben 12 px
   (Lieferung: `.na2-stueck .karte > .hinweistext { margin: 6px 12px 10px }`).

   UND DIE LEISTE RUNDET NICHT MEHR OBEN, WENN UEBER IHR NOCH ETWAS IN DER
   KARTE STEHT: Die Box beginnt dann an der Kartenkante und nicht an der
   Leiste. Dieselbe Bauart wie `.inhalt.zonen > .listenlauf:has(+ .filterzeile)`
   weiter oben, anderer Nachbar. Steht die Leiste als ERSTES in der Karte,
   behaelt sie ihre 10/10/0/0 — dann ist sie der obere Teil der Box, genau wie
   in `.vereinsbuch-karte`.

   DER ZWEITE WAEHLER IST DERSELBE FALL VON DER ANDEREN SEITE: Auf
   notenarchiv/schrank und notenarchiv/stimmen steht die Leiste NEBEN der Karte
   und nicht darin, weil dort je Gruppe eine eigene Karte laeuft. Die erste
   Karte ist dann die untere Haelfte der Box (die Regel weiter unten zieht sie
   an die Leiste heran und nimmt ihr den oberen Radius) — und eine untere
   Haelfte traegt so wenig eigenen Innenabstand wie eine Huelle. GEMESSEN bei
   1280 px vor dieser Zeile: die Kolonne stand 17 px eingerueckt in der Karte,
   waehrend die Leiste darueber an der Kante lag.

   `~` UND NICHT `+`, und der Grund ist am Bild gemessen: Beide Seiten fuehren
   JE GRUPPE eine Karte („Schrank A", „Schrank B"). Mit `+` bekam nur die erste
   den Innenabstand 0 und die zweite behielt 16 — zwei Schwesterkarten
   derselben Liste in zwei Bauformen untereinander. Es sind alles
   Listenkarten (BAUTEILE.md „Karte": „padding 0 fuer Listenkarten"), also
   bekommen sie alle dieselbe. GEMESSEN: Der Waehler erreicht ausschliesslich
   die Gruppenkarten von notenarchiv/schrank und notenarchiv/stimmen — es sind
   die einzigen zwei Seiten, auf denen eine Leiste als direktes Kind von
   `main.inhalt` steht und danach ueberhaupt eine Karte folgt.
   --------------------------------------------------------------------------- */
.karte:not(.vereinsbuch-karte):has(> .vereinsbuch-suche),
.inhalt > .vereinsbuch-suche ~ .karte { padding: 0; }
.karte:not(.vereinsbuch-karte):has(> .vereinsbuch-suche) > h2,
.inhalt > .vereinsbuch-suche ~ .karte > h2 { padding: 12px 12px 8px; }
.karte:not(.vereinsbuch-karte):has(> .vereinsbuch-suche) > .hinweistext,
.inhalt > .vereinsbuch-suche ~ .karte > .hinweistext { margin: 0 12px 10px; }
.karte:not(.vereinsbuch-karte):has(> .vereinsbuch-suche) > .leerhinweis,
.inhalt > .vereinsbuch-suche ~ .karte > .leerhinweis { padding: 0 12px 16px; max-width: none; }
.karte:not(.vereinsbuch-karte) > :not(.vereinsbuch-suche) + .vereinsbuch-suche { border-radius: 0; }
.karte:not(.vereinsbuch-karte) > .vereinsbuch-suche + .listenlauf {
  margin: 0;
  border-radius: 0 0 var(--radius-gross) var(--radius-gross);
}

/* ---------------------------------------------------------------------------
   DER KOPF EINER SCHRANKKARTE — notenarchiv_026, Betreiber 17.09.2026
   „rechts oben … einen button schrank bearbeiten … und ein button fach anlegen."
   Der Schrankplan ist eine `.vereinsbuch-suche ~ .karte` (Karte mit padding 0,
   der Titel traegt sein Padding selbst). Die zwei Knoepfe stehen in einem
   `.formular-fuss` direkt unter dem Titel — rechtsbuendig (das ist die Bauart
   des Fusses), mit dem 12-px-Einzug der Karte (wie h2/leerhinweis daneben) und
   ohne den grossen Fuss-Abstand nach oben, weil er hier oben steht und nicht
   unter einem Formular. `.formular-fuss` ist die vom Bedienkonzept verlangte
   Huelle fuer eine Handlung in einer Karte (060). Das Bild geht dem Betreiber
   vorgelegt (docs/lieferung/punkte-naechste-scheibe-2026-09-17.md).
   --------------------------------------------------------------------------- */
.schrank-karte > .formular-fuss { padding: 0 12px 10px; margin-top: 4px; }

/* ---------------------------------------------------------------------------
   DIE HUELLE OHNE LEISTE UEBER IHR — 10.09.2026, BAUTEILE.md „Liste":
   „`<div class="listenlauf">` … in JEDER Liste. Huelle: --karte, 1 px
   --linie, Radius 0/0/10/10."

   DER ANLASS IST EINE ZU ENGE REICHWEITE, gemessen am 10.09.2026: Die zwei
   Regeln darueber erreichen nur eine Huelle, die UNMITTELBAR auf eine Leiste
   folgt. Auf einer Seite mit mehreren Listen bekam damit genau eine die
   Kartenform und die uebrigen keine — zeugwart/ausgaben fuehrt vier Listen und
   nur „Zurzeit ausgegeben" stand in einer Box, „Ueberfaellig", „Abgaengig und
   trotzdem im Bestand" und „Verlauf" standen randlos auf dem weissen
   `main.inhalt`.

   DER RADIUS IST HERGELEITET UND DIE HERLEITUNG STEHT HIER (ADR-0078,
   Entscheidung Punkt 5): Die 0/0/10/10 der Lieferung sind die UNTERE Haelfte
   einer Box, deren obere die Leiste ist. Wo keine Leiste steht, ist die Huelle
   die ganze Box — und eine ganze Box traegt in dieser Lieferung
   `--radius-gross` rundum (BAUTEILE.md „Karte"). Die Regel darunter nimmt der
   Huelle den Radius wieder, sobald eine Leiste ueber ihr steht.

   NUR DIREKTE KINDER VON `main.inhalt`: Liegt die Huelle in einer Karte, ist
   die KARTE die Box und traegt Flaeche und Rand schon. Ein zweiter Rand darin
   waere derselbe Kasten-in-Kasten, der eine Regel weiter oben behoben ist. */
main.inhalt:not(.zonen) > .listenlauf {
  background: var(--karte);
  border: 1px solid var(--linie);
  border-radius: var(--radius-gross);
}
/* UND WENN AUF DIE LEISTE EINE KARTE FOLGT statt einer Huelle — der Fall des
   Schrankplans, der seine Faecher je Gruppe in eine eigene Karte legt, und der
   Stimmenseite, die je Gruppe eine Karte fuehrt: Dann ist die KARTE der untere
   Teil der einen Box. Sie traegt Flaeche und Rand schon selbst; ihr fehlt nur,
   dass sie oben an der Leiste anliegt und dort nicht rundet. Dieselbe
   Herleitung wie darueber, anderer Partner.

   AUF EINER ZONENSEITE MUSS DER ZONENABSTAND DABEI AUSGEGLICHEN WERDEN — die
   Zeile ist woertlich die von `.inhalt.zonen > .vereinsbuch-suche +
   .listenlauf` weiter oben. GEMESSEN am 10.09.2026 bei 1280 px: ohne sie stand
   zwischen Leiste und erster Karte eine Luecke von 14 px, also der
   Zonenabstand; mit ihr 0. */
main.inhalt:not(.zonen) > .vereinsbuch-suche + .karte,
.inhalt.zonen > .vereinsbuch-suche + .karte {
  border-radius: 0 0 var(--radius-gross) var(--radius-gross);
}
main.inhalt:not(.zonen) > .vereinsbuch-suche + .karte { margin-top: 0; }
.inhalt.zonen > .vereinsbuch-suche + .karte { margin-top: calc(-1 * var(--zonenabstand)); }
/* DIE KURZSCHREIBWEISE IST ABSICHT UND KEINE BEQUEMLICHKEIT: 060_bedienkonzept.php
   liest `border-radius` mit mehr als einem Wert und ordnet den Waehler den zwei
   Haelften einer Box zu. Mit `border-top-left-radius` haette dieselbe Kante
   dieselbe Wirkung und stuende in KEINER Zusicherung — eine Regel, die an der
   Messung vorbeigeht, ist genau das, was jene Zeile verhindern soll. */

/* DIE LEISTE OHNE ZWEITE ZEILE TRAEGT KEINEN ZEILENBRUCH — 10.09.2026.
   `.vereinsbuch-suche-zeile::before` ist ein leerer Flex-Posten mit
   `flex: 1 0 100%`; er trennt Zeile 1 (Feld und Zeichenknoepfe) von Zeile 2
   (die Auswahlfelder), damit die zweite unabhaengig von der ersten steht
   (BAUTEILE.md „Leiste", Zeile 2). Hat eine Leiste GAR KEINE Auswahlfelder —
   der Fall der Verwaltungslisten, die weder Suche noch Filter fuehren —, dann
   bricht er in eine leere Zeile um und kostet den Zeilenabstand: GEMESSEN bei
   1280 px 52 px statt 44 fuer die Zeile, die Leiste damit 77 statt 68.
   BAUTEILE.md gibt „Innenabstand 12" und ein 44er Bedienelement vor; 68 ist
   die Zahl der Lieferung, 77 ist ein Rest. */
.vereinsbuch-suche-zeile:not(:has(> select))::before { display: none; }
main.inhalt:not(.zonen) > .vereinsbuch-suche + .leerhinweis {
  margin-top: 0;
  padding: 16px 12px;
  max-width: none;
  background: var(--karte);
  border: 1px solid var(--linie);
  border-radius: 0 0 var(--radius-gross) var(--radius-gross);
}
/* IN EINER LISTENKARTE TRAEGT DIE KARTE FLAECHE UND RAND (siehe „DIE
   LISTENKARTE"); der Leerhinweis braucht nur seinen Innenabstand zurueck, den
   die Karte mit `padding: 0` abgegeben hat. */
.karte:not(.vereinsbuch-karte) > .vereinsbuch-suche + .leerhinweis {
  margin: 0;
  padding: 16px 12px;
  max-width: none;
}
/* DIE BLAETTERLEISTE des Notenarchivs ist der Fuss der Karte (Lieferung,
   Notenarchiv-Blatt „Blaetterleiste": eine Zeile aus Worten, das aktuelle
   Blatt traegt dieselbe Kante wie ein gewaehltes Register, 44 px, unten rund). */
.inhalt.zonen > .blaetter {
  display: flex;
  flex-direction: row;
  flex-wrap: wrap;
  align-items: stretch;
  gap: 0 4px;
  margin-bottom: 0;
  padding: 0 12px;
  background: var(--grund);
  border: 1px solid var(--linie);
  border-top: 0;
  border-radius: 0 0 var(--radius-gross) var(--radius-gross);
}
.inhalt.zonen > .blaetter .marke {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 44px;
  min-height: 44px;
  padding: 0 10px;
  margin: 0;
  background: transparent;
  border: 0;
  border-bottom: 2px solid transparent;
  border-radius: 0;
  font-size: 15px;
  color: var(--tinte);
  text-decoration: none;
}
.inhalt.zonen > .blaetter .marke:hover { background: var(--grund-tief); }
.inhalt.zonen > .blaetter .marke.marke-aktiv { border-bottom-color: var(--verein); font-weight: 600; color: var(--tinte); }
.inhalt.zonen > .blaetter .marke:focus-visible { outline: 2px solid var(--verein); outline-offset: -2px; }

/* ---------------------------------------------------------------------------
   EINE FILTERZEILE, DIE DIREKT IN DER ZONE STEHT — gemessen am 10.09.2026 bei
   echten 390 px (Fernsteuerungsprotokoll, nicht --window-size).

   DER FALL: Unter 700 px ist --seitenrand NULL, weil dort die Karten randlos
   sind und ihren eigenen Innenabstand mitbringen („der Bildschirm IST die
   Karte", Block bei 699 px). Wer statt einer Karte ein Bedienelement DIREKT in
   die Zone legt, bekommt diesen Innenabstand nicht: Suchfeld und Auswahlfeld
   der Namenslisten sassen auf der Geraetekante (links 0), waehrend Rueckweg
   und Kartenueberschrift derselben Seite auf 16 standen.

   DIE REGEL HAENGT AN DER SACHE UND NICHT AN DER SEITE: `.inhalt.zonen >
   form.filterzeile` ist die abgeleitete Menge — jede Filterzeile, die auf
   --grund steht statt in einer Karte. Heute ist das genau eine
   (`notenarchiv/namenslisten`); `sitzungen/beschluesse` traegt dieselbe
   Bauform, laeuft aber ohne `zonen` und ist deshalb nicht gemeint. Die
   Blaetterleiste (`p.filterzeile.blaetter`) ist NICHT gemeint — sie ist der
   Fuss einer Karte und bringt ihre eigenen 12 px mit.

   DASSELBE TOKEN WIE SEITENKOPF UND RUECKWEG (--karte-innen-schmal) und keine
   eigene Zahl: zwei 16 nebeneinander laufen beim naechsten Umbau auseinander
   (060_bedienkonzept.php, Rueckfrage 6).
   --------------------------------------------------------------------------- */
@media (max-width: 699px) {
  .inhalt.zonen > form.filterzeile {
    padding-left: var(--karte-innen-schmal);
    padding-right: var(--karte-innen-schmal);
  }
  /* DAS SUCHFELD SCHRUMPFT, DAMIT DIE ZEILE NICHT MIT EINER LUECKE BRICHT.
     Gemessen vorher bei 390 px: Feld 185 ab 0, Knopf 92 ab 191 (Ende 283),
     Auswahlfeld 128 in ZEILE 2 — rechts blieben rund 107 px leer. Es ist der
     Griff der gelieferten Leiste („Zeile 1 Feld + 3 x 44 in EINER Zeile, das
     Feld schrumpft bis 0", BAUTEILE.md „Leiste — Handy"), hier fuer die
     einfachere Zeile aus Feld, Zeichenknopf und einem Auswahlfeld. */
  .inhalt.zonen > form.filterzeile > input[type="search"] {
    flex: 1 1 120px;
    min-width: 0;
  }
}

/* ---------------------------------------------------------------------------
   HIER STAND DER SUCHKNOPF DER ZONEN-FILTERZEILE. GEFALLEN AM 10.09.2026 BEIM
   ZUSAMMENFUEHREN VON SCHEIBE F MIT SCHEIBE H.

   Er band Platz, Maske und das Wegblenden des Wortes an
   `.inhalt.zonen > form.filterzeile > .knopf-still…`, weil die Leiste sie
   damals an einen VORFAHREN band (`.vereinsbuch-suche-zeile >`) und diese
   Seite ihn nicht traegt. SEIN EIGENER KOMMENTAR HAT SEIN ENDE BESTELLT:
   „Sobald die Verallgemeinerung auf die Klasse `.knopf-wort` im Baum ist, ist
   dieser Block ueberfluessig und gehoert weg — er hat dann keinen eigenen
   Gegenstand mehr."

   SIE IST IM BAUM, seit dem 10.09.2026 und weiter oben: `.knopf-still.suchen`,
   `.knopf-still.suchen::before` und `.knopf-wort` haengen an der KLASSE. Die
   Deklarationen waren Wert fuer Wert dieselben.

   GEMESSEN AM BILD UND NICHT AM WAEHLER, wie es die Regel verlangt: beide
   Seiten mit `form.filterzeile` im Bestand (`notenarchiv/namenslisten` —
   `sitzungen/beschluesse` traegt kein `zonen` und war nie gemeint), bei echten
   390 px ueber das Fernsteuerungsprotokoll. Ohne diesen Block sind die
   berechneten Werte von Knopf, Zeichen und Wort unveraendert und die Aufnahme
   BYTE-GLEICH.

   UND DIE GEGENPROBE KANN AUSSCHLAGEN, sonst waere sie nichts wert: Nimmt man
   BEIDE Saetze weg, wird aus dem Knopf 92,2 x 44 mit sichtbarem Wort und ohne
   Maske — andere Werte, andere Aufnahme.

   DER BLOCK BEI 699 px DARUEBER BLEIBT. Er ist nicht gedoppelt: Er gibt der
   Filterzeile auf dem blanken Grund den Innenabstand, den ihr sonst eine Karte
   mitbraechte.
   --------------------------------------------------------------------------- */
/* DER WARNSATZ DES NOTENARCHIVS steht auf dem Grund, ueber der Karte
   (Lieferung 7746: `main.lp.zonen > p.nebensache { margin: 0 0 14px }`, mit
   Satzbreite und 14 px aus dem Notenarchiv-Blatt). */
.inhalt.zonen > p.nebensache { margin: 0 0 14px; max-width: var(--satzbreite); font-size: 14px; }

/*
 * UNTER 700 PX WIRD JEDE ZEILE EINE KARTE.
 *
 * Anlass: Betreiber, 31.08.2026, am Testschirm — „eine schöne, funktionale
 * und übersichtliche mobile Ansicht." Die Desktop-Anweisung (29.08.2026)
 * gilt weiter; sie sagt zum schmalen Schirm kein Wort.
 *
 * WARUM KEIN TABLEAU: table-layout: fixed mit 220 + 300 + 260 + 3×74 px
 * passt nicht in 390 px. Die rechten Spalten verschwinden oder werden
 * auf Breite null gedrückt. Waagrecht schieben darf 060 nur mit Eintrag
 * in `$scrollErlaubt`, und overflow-x am Rahmen tötet sticky am Schreibtisch.
 *
 * WARUM NICHT DER GLOBALE STAPEL UNVERÄNDERT: `.liste.vereinsbuch tbody tr
 * { height: 56px }` ist am Schreibtisch die Untergrenze der Tabellenzeile,
 * im Stapel eine Decke. Karten, Fussband und die nächste Zeile lagen
 * übereinander (gemessen 31.08.2026). Die drei Handlungsspalten würden
 * je ein eigenes `data-titel` als Block bekommen — dreimal dieselbe
 * Beschriftung, 44 px Zeichen darunter.
 *
 * ALSO: thead aus, Zeile = Karte (`display: flex`), `height: auto`.
 * Name als Titel. Extra-Spalten mit ihrem data-titel. Ämter und Instrument
 * als Klick in der Karte. Konto als beschriftete Zeile, nicht als Haken
 * rechts oben (Betreiber 31.08.2026, Schirm). Ein Stift. KEIN overflow-x.
 */
/*
 * HIER STAND BIS ZUM 09.09.2026 DER STAPEL DES VEREINSBUCHS — „UNTER 700 PX WIRD
 * JEDE ZEILE EINE KARTE" (Betreiber, 31.08.2026, am Testschirm), mit thead aus,
 * Zeile als Karte, Name als Titel, KEIN overflow-x. Der Betreiber hat am
 * 08.09.2026 am Bild die andere Antwort gewaehlt (ADR-0078, Widerspruch 1):
 * „Was der Verein einblendet, steht da — auch auf 390 px, und dann schiebt die
 * Kolonne waagrecht." Geschoben wird die Huelle um die Tabelle, nicht die
 * Karte — laege der Scrollbereich an der Karte, schoebe die Leiste mit
 * (Design, gemessen: Suchfeld bei x -250). Nichts klebt: Der Name schiebt mit
 * (Betreiber: „der Name verdeckt zu viel. Wenn, dann muss er mitschieben.").
 */
@media (max-width: 700px) {
  .karte.vereinsbuch-karte { overflow: visible; }
  table.liste.vereinsbuch { min-width: 660px; }
  table.liste.vereinsbuch th[data-spalte="art"] { width: 68px; }
  table.liste.vereinsbuch th[data-spalte="name"] { width: 190px; }
  table.liste.vereinsbuch th[data-spalte="mitgliedschaft"],
  table.liste.vereinsbuch th[data-spalte="aemter"],
  table.liste.vereinsbuch th[data-spalte="instrument"] { width: 130px; }
  table.liste.vereinsbuch .marke.marke-aktiv { margin-left: 0; }
}

/* ===========================================================================
   DIE KOLONNEN DER MODUL-BESTANDSLISTEN — Zeugwart und Notenarchiv (ADR-0078,
   Scheibe B; Lieferung 08.09.2026, Zeugwart- und Notenarchiv-Blatt).

   DER HAKEN IST DER LISTENSCHLUESSEL (`table.liste[data-liste="…"]`), der
   Schluessel des Listendienstes (kern/listen.php), und die Spalte ihr
   Katalogschluessel (`th[data-spalte]`) — dieselbe Bauart wie im Vereinsbuch,
   aus demselben Grund: Die Koepfe entstehen aus der Spaltenwahl.

   DIE ZAHLEN SIND GEMESSEN an den gelieferten Seiten (09.09.2026):
     Zeugwart      1280: Gegenstand Rest · Art 110 · Zustand 110 · Wo 310 · Aktionen 174
                    834: Gegenstand Rest · 96 · 96 · 190 · 174, Innenabstand 10
                    390: 250 · 96 · 96 · 200 · 174, Mindestbreite 720 (817 gemessen)
     Notenarchiv   1280: Titel Rest · Komponist 116 · Arrangeur 116 · Kategorie 96 ·
                         Ausgaben 104 · Bestand 100 · Status 150 · Aktionen 60
                    834: 116 · 116 · 90 · 90 · 100 · 150 · 60, Mindestbreite 980
                    390: Titel 260, Mindestbreite 1000
   Zeilen 60 px (TOKENS.md: „60 traegt zwei Zeilen — Bezeichnung + Nummer;
   Titel + Alternativtitel").

   DREI ZELLEN MESSEN 15 PX, NICHT 14 — Art, Zustand und Wo im Zeugwart, die
   Marken des Bestands im Notenarchiv (Regeln der Modulblaetter, die das
   Listenblatt nicht ueberschreibt). BAUTEILE.md sagt „Zellen 14 px"; das Bild
   gilt (ADR-0078), gemeldet. Die Handlungsspalte des Notenarchivs misst 60
   (BAUTEILE.md nennt 72 fuer einen Knopf) — gemessen 60 = 44 + 2 x 8, das
   Bild gilt, gemeldet.
   =========================================================================== */
table.liste[data-liste] { margin: 0; table-layout: fixed; width: 100%; }
table.liste[data-liste="zeugwart/bestand"] tbody tr,
table.liste[data-liste="notenarchiv/bestand"] tbody tr { height: 60px; }

/* Zeugwart: Gegenstand waechst, alles andere steht. Die Bezeichnung steht ganz,
   die Nummer darunter (Lieferung: „Eine gekuerzte Bezeichnung ist keine
   Bezeichnung"); „Wo" laeuft als Satz und bricht einmal um. */
table.liste[data-liste="zeugwart/bestand"] th[data-spalte="art"],
table.liste[data-liste="zeugwart/bestand"] th[data-spalte="zustand"] { width: 110px; }
table.liste[data-liste="zeugwart/bestand"] th[data-spalte="wo"] { width: 310px; }
table.liste[data-liste="zeugwart/bestand"] th.spalte-aktionen { width: 174px; }
table.liste[data-liste="zeugwart/bestand"] td[data-titel="Gegenstand"] { white-space: normal; overflow: hidden; }
table.liste[data-liste="zeugwart/bestand"] td[data-titel="Gegenstand"] .zeilentitel { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
table.liste[data-liste="zeugwart/bestand"] td[data-titel="Gegenstand"] .nebensache { display: inline-block; margin: 0 8px 0 0; line-height: 1.3; vertical-align: middle; }
/* „ausgemustert" bleibt eine Marke — die zweite Ausnahme (BAUTEILE.md). */
table.liste[data-liste="zeugwart/bestand"] td[data-titel="Gegenstand"] .marke {
  display: inline-block;
  margin: 0;
  padding: 0 8px;
  font-size: 11px;
  font-weight: 600;
  border-radius: 999px;
  border: 1px solid var(--linie-stark);
  background: transparent;
  color: var(--tinte-leise);
  vertical-align: middle;
}
table.liste[data-liste="zeugwart/bestand"] td[data-titel="Art"],
table.liste[data-liste="zeugwart/bestand"] td[data-titel="Zustand"] { font-size: 15px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
table.liste[data-liste="zeugwart/bestand"] td[data-titel="Wo"] { font-size: 15px; line-height: 1.25; white-space: normal; }
table.liste[data-liste="zeugwart/bestand"] td[data-titel="Wo"] .nebensache { display: inline; }

/* Notenarchiv: der Titel ist ein Verweis auf das Stueck, OHNE Unterstreichung
   in Ruhe — Betreiber, 08.09.2026: „Die Unterstreichung der Titel meine ich!"
   Gewicht 600 sagt, dass er einer ist; beim Zeigen Unterstreichung in
   --verein. Komponist, Arrangeur und Status duerfen einmal umbrechen; der
   Status traegt seine Mappe leise darunter. */
table.liste[data-liste="notenarchiv/bestand"] th[data-spalte="komponist"],
table.liste[data-liste="notenarchiv/bestand"] th[data-spalte="arrangeur"] { width: 116px; }
table.liste[data-liste="notenarchiv/bestand"] th[data-spalte="kategorie"] { width: 96px; }
table.liste[data-liste="notenarchiv/bestand"] th[data-spalte="ausgaben"] { width: 104px; }
table.liste[data-liste="notenarchiv/bestand"] th[data-spalte="bestand"] { width: 100px; }
table.liste[data-liste="notenarchiv/bestand"] th[data-spalte="status"] { width: 150px; }
table.liste[data-liste="notenarchiv/bestand"] th.spalte-aktionen { width: 60px; }
table.liste[data-liste="notenarchiv/bestand"] td[data-titel="Komponist"],
table.liste[data-liste="notenarchiv/bestand"] td[data-titel="Arrangeur"],
table.liste[data-liste="notenarchiv/bestand"] td[data-titel="Status"] { white-space: normal; line-height: 1.25; }
table.liste[data-liste="notenarchiv/bestand"] td[data-titel="Titel"] { overflow: hidden; }
table.liste[data-liste="notenarchiv/bestand"] td[data-titel="Titel"] a { color: var(--tinte); text-decoration: none; border-bottom: 0; box-shadow: none; }
table.liste[data-liste="notenarchiv/bestand"] td[data-titel="Titel"] .zeilentitel { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
table.liste[data-liste="notenarchiv/bestand"] td[data-titel="Titel"] a:hover .zeilentitel,
table.liste[data-liste="notenarchiv/bestand"] td[data-titel="Titel"] a:focus-visible .zeilentitel { text-decoration: underline; text-decoration-color: var(--verein); text-underline-offset: 3px; }
table.liste[data-liste="notenarchiv/bestand"] td[data-titel="Titel"] .nebensache { display: block; line-height: 1.3; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
table.liste[data-liste="notenarchiv/bestand"] td[data-titel="Kategorie"],
table.liste[data-liste="notenarchiv/bestand"] td[data-titel="Ausgaben"],
table.liste[data-liste="notenarchiv/bestand"] td[data-titel="Bestand"] { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
/* MARKEN WERDEN TEXT: EIN FACH IST EINE ANGABE (Lieferung, Notenarchiv-Blatt
   `.na2 table.liste td .marke`; BAUTEILE.md „Liste als Tabelle"). Mit
   Beistrich zwischen zweien; 15 px, wie gemessen (Abschnittskopf oben). Der
   Listenschluessel ist der Gegenstand der Regel und keine Verzierung: Die
   Lieferung scopt sie auf diese Liste, und ausserhalb bleibt `.marke` das
   Etikett (Herleitung am `.marke`-Abschnitt weiter oben). Die Status-Regeln
   darunter haben dieselbe Spezifitaet (0,4,2) und gewinnen als spaetere —
   Reihenfolge ist Bedeutung (LIESMICH.md, Bauhinweis 1). */
table.liste[data-liste="notenarchiv/bestand"] td .marke:not(.marke-aktiv) {
  display: inline;
  margin: 0;
  padding: 0;
  border: 0;
  border-radius: 0;
  background: none;
  font-size: 15px;
  color: var(--tinte);
}
table.liste[data-liste="notenarchiv/bestand"] td .marke:not(.marke-aktiv) + .marke:not(.marke-aktiv)::before { content: ", "; }
table.liste[data-liste="notenarchiv/bestand"] td[data-titel="Status"] .marke { display: block; color: var(--tinte-leise); font-size: 13px; }
table.liste[data-liste="notenarchiv/bestand"] td[data-titel="Status"] .marke:first-of-type::before { content: " · "; color: var(--tinte-leise); }

/* 700 bis 1119: enger, aber dieselbe Kolonne (Lieferung: „Art und Zustand sind
   kurze Woerter; sie geben ab" — bei 834 px war der Gegenstand 150 px breit
   und neun Zellen gekuerzt). Sieben Spalten passen nicht in 789 px: Das
   Notenarchiv steht auf 980 px und schiebt in der Huelle. */
@media (max-width: 1119px) {
  table.liste[data-liste="zeugwart/bestand"] th[data-spalte="art"],
  table.liste[data-liste="zeugwart/bestand"] th[data-spalte="zustand"] { width: 96px; }
  table.liste[data-liste="zeugwart/bestand"] th[data-spalte="wo"] { width: 190px; }
  table.liste[data-liste="zeugwart/bestand"] td:not(.spalte-aktionen),
  table.liste[data-liste="notenarchiv/bestand"] td:not(.spalte-aktionen) { padding-left: 10px; padding-right: 10px; }
  /* Nur das Notenarchiv zieht den KOPF auf 10 nach — gemessen an den
     gelieferten Seiten bei 834 px: Zeugwart-Kopf 0/12 (Zelle 4/10),
     Notenarchiv-Kopf 0/10. Das Bild gilt. */
  table.liste[data-liste="notenarchiv/bestand"] th { padding-left: 10px; padding-right: 10px; }
  table.liste[data-liste="notenarchiv/bestand"] { min-width: 980px; }
  table.liste[data-liste="notenarchiv/bestand"] th[data-spalte="kategorie"],
  table.liste[data-liste="notenarchiv/bestand"] th[data-spalte="ausgaben"] { width: 90px; }
}
/* Unter 700: die Huelle schiebt — also so breit, dass nichts gekuerzt werden
   muss (Lieferung: „mit 640 px waren neun Zellen gekuerzt, obwohl der Platz
   nur eine Wischbewegung entfernt liegt"). */
@media (max-width: 700px) {
  table.liste[data-liste="zeugwart/bestand"] { min-width: 720px; }
  table.liste[data-liste="zeugwart/bestand"] th[data-spalte="gegenstand"] { width: 250px; }
  table.liste[data-liste="zeugwart/bestand"] th[data-spalte="wo"] { width: 200px; }
  table.liste[data-liste="zeugwart/bestand"] td:not(.spalte-aktionen),
  table.liste[data-liste="zeugwart/bestand"] th { padding-left: 12px; padding-right: 12px; }
  table.liste[data-liste="notenarchiv/bestand"] { min-width: 1000px; }
  table.liste[data-liste="notenarchiv/bestand"] th[data-spalte="titel"] { width: 260px; }
  table.liste[data-liste="zeugwart/bestand"] th.spalte-aktionen { width: 174px; }
}
/* AB 1120 PX SCHIEBT KEINE KOLONNE — Betreiber, 08.09.2026: „ich moechte in der
   Desktopversion keine horizontalen Scrollleisten". Die drei benannten Listen
   stehen fest auf 100 %; die Huelle zeigt keinen Balken. `overflow: hidden`
   auf BEIDEN Achsen: ein `overflow-x: hidden` allein setzt overflow-y auf
   `auto`, und die Huelle zeigte einen senkrechten Balken (Design, gemessen).

   DIE REGEL GILT SEIT DEM 10.09.2026 FUER JEDE HUELLE UND JEDE TABELLE, NICHT
   MEHR NUR FUER DIE DREI BENANNTEN. BAUTEILE.md:140-142 und BRUCHKANTEN.md:9
   sagen „JEDE Tabelle steht fest auf 100 %, kein waagrechter Balken
   (Betreiber)"; gebaut waren bis dahin zwei Huellenwaehler
   (`.vereinsbuch-karte > .listenlauf`, `.inhalt.zonen > .listenlauf`) und das
   Merkmal `[data-liste]`, das im ganzen Kern GENAU EINE Tabelle traegt
   (kern/seiten/mitglieder.php). Gemessen am 10.09.2026: 35 Tabellen
   `class="liste"` im Kern, 30 ihrer Huellen liegen in einer `.karte` und sind
   damit kein direktes Kind von `main.inhalt.zonen` — sie behielten
   `overflow-x: auto` aus der Grundregel. Die Menge ist jetzt abgeleitet
   (`.listenlauf`, `table.liste`) und nicht aufgezaehlt.

   WAS HIER NICHT STEHT UND WARUM — `table-layout: fixed`: BAUTEILE.md nennt es
   im selben Atemzug, bindet es aber an gemessene Spaltenmasse („Spaltenmasse je
   Modul stehen im Stilblatt (Abschnitte vb2, zw2, na2); fuehrende Spalte
   waechst, Handlungsspalte fest (174 / 112 / 72)"). Ohne diese Masse verteilt
   `fixed` alle Spalten gleich UND nimmt `.spalte-aktionen { width: 1% }`
   woertlich. DAS IST NICHT GESCHLOSSEN, SONDERN GEMESSEN — am 10.09.2026 im
   Browser bei echten 1280 px (Fernsteuerungsprotokoll, Vorschau ueber http),
   an der zehnspaltigen Ausgabentabelle der Stueckseite:

     Huelle 966 px · Tabelle heute 998 · mit `table-layout: fixed` 1088
     Handlungsspalte mit `fixed`: 10 px — die zwei 44er-Knoepfe liefen heraus

   WELCHE KARTE, UND WANN — nachgetragen am 12.09.2026: Diese Zahlen sind vom
   10.09.2026. Die 966 ist die Huelle in einer `.karte` MIT 16-px-Polster. Die
   Ausgabentabelle der Stueckseite steht heute in `.karte-ausgaben`, und die
   traegt kein Polster — ihre Huelle misst heute 998 (auf einer scrollenden
   Seite 983), nachgemessen am Bild. DIE ZAHL VON DAMALS BLEIBT STEHEN; wer sie
   heute nachmisst, misst an einer anderen Karte. Welche Huellenbreiten es
   ueberhaupt gibt und woran sie haengen, steht EINMAL im Abschnitt
   „DREI ZAHLEN" weiter unten.

   `fixed` macht die Sache also SCHLECHTER und nicht besser, solange die
   Spalten nicht gemessen sind; fuer eine Liste, die die Lieferung nicht zeigt,
   ist kein Spaltenmass ableitbar (LIESMICH.md, „min-width einer neuen
   Tabelle"; BAUTEILE.md:144-147).

   BERICHTIGT AM 12.09.2026: DER ABSATZ DARUNTER GILT NICHT MEHR. Er sagt „0 von
   0", und das war am 10.09.2026 richtig gemessen. SEIT DEN SPALTENMASSEN DER
   LIEFERUNG VOM 12.09.2026 (Abschnitt `na2` weiter unten) LAUFEN HUELLEN UEBER.
   NACHGEMESSEN AM 12.09.2026 (nachts): ES SIND DREI VON 92 — ueber alle 79
   Seiten in `vorschau/gelb/` nach `rm -rf vorschau && php tools/vorschau.php`,
   Fernsteuerungsprotokoll (Emulation.setDeviceMetricsOverride) bei echtem
   1280-px-Sichtfenster, Vorschau ueber http:

     notenarchiv/mappeninhalt   1014 > 966   `titel` steht auf 196 px
     notenarchiv/programm       1142 > 966
     notenarchiv/gastlinks      1067 > 966

   WELCHE KARTE: Die 966 dieser drei Zeilen ist die Huelle in einer `.karte` MIT
   16-px-Polster. Nimmt der senkrechte Balken einer scrollenden Seite 15 px aus
   dem Fenster, misst dieselbe Huelle 951 und die Zeilen lauten 999, 1127 und
   1052 — auch gemessen. Welche Sorte Balken ein bestimmter Browser fuehrt, ist
   HIER NICHT GEMESSEN und deshalb eine Bedingung und keine Aussage; die zwei
   Huellenbreiten und ihr Weg stehen einmal im Abschnitt „DREI ZAHLEN".

   HIER STAND „VIER VON 95 HUELLEN, gemessen ueber alle 80 Vorschauseiten", und
   die erste Zeile lautete „mappeninhalt 1124 > 966, Titel-Spalte auf 0 px
   gedrueckt". NICHT NUR DIE VIERTE ZEILE JENER ZAEHLUNG IST GEFALLEN, SONDERN
   AUCH IHR NENNER: die 95 und die 80 stammen aus demselben veralteten
   Vorschaubestand. WORAN BEIDES GEFALLEN IST, GEHOERT DAZU:

     DIE VIERTE ZEILE („ohne Kennung, dateien, 998 > 966") STAND AUF EINER
     VORSCHAUDATEI, DIE ES NICHT MEHR GIBT: `notenarchiv-stimmen-dateien.html`,
     11.09.2026, waehrend die uebrigen 79 Seiten den 12.09. tragen.
     `tools/vorschau.php` nennt sie an keiner Stelle, und `vorschau/` raeumt
     nichts weg. SIE HAT DIE MESSUNG UM EINE ZEILE UND DEN NENNER UM EINE
     HUELLE VERLAENGERT — ein veralteter Vorschaubestand, gegen den dieses Blatt
     weiter unten selbst warnt.

     UND DAS IST EIN ANLASS FUER SICH, HIER EINMAL AUFGESCHRIEBEN UND NIRGENDS
     SONST: EIN NENNER AUS `vorschau/` ALTERT, OHNE DASS ETWAS ROT WIRD.
     `vorschau/` steht in `.gitignore` und wird nie ausgeraeumt; eine Seite, die
     `tools/vorschau.php` nicht mehr erzeugt, bleibt einfach liegen. UND KEINE
     ZUSICHERUNG SIEHT SIE — gemessen am 12.09.2026: Die Kette geht ueber
     `vorschau_seiten()`, also ueber die ANGEMELDETE Liste, und keine Falldatei
     zaehlt die Dateien, die wirklich in `vorschau/gelb/` liegen. Eine
     ueberzaehlige Seite ist damit fuer die Kette unsichtbar und macht jede
     Messung ueber den Bestand um eine Zeile zu lang. GEMESSEN HAT DAS DREI
     ZAHLEN DIESES BLATTS GETROFFEN: die Zaehlung hier, die 390-px-Zaehlung
     weiter unten und die Huellentabelle im Abschnitt „DREI ZAHLEN". WER EINE
     ZAHL UEBER `vorschau/` HINSCHREIBT, BAUT DEN BESTAND VORHER NEU:
     `rm -rf vorschau && php tools/vorschau.php`.

     DIE 1124 UND DIE NULL SIND DER STAND VOR DEN SPALTENMASSEN. Seit dem Block
     am Ende dieses Abschnitts summieren die acht festen Breiten oberhalb
     1120 px 770 statt 1076; `titel` bekommt den Rest und steht auf 196 px (mit
     Balken 181) statt auf 0. Der Ueberlauf ist damit nicht weg, aber er ist
     ein anderer: Die Tabelle steht auf 966 = Huelle, und ihr INHALT braucht
     1014 — `recht` 119 statt 112 und `aktionen` 160 statt 112, zusammen die
     48 px Unterschied.

   ALLE DREI HAENGEN AN EINEM ABSCHNITT, DER TEILWEISE GEBAUT IST — hier stand
   „DREI DAVON", als die Liste noch vier Zeilen hatte: Die
   Handlungsspalte war auf 174 beziehungsweise 112 px gesetzt, ihr INHALT mass
   350, 275 und 160 — „Hinauf · Hinunter · Bearbeiten · Streichen" als WOERTER.
   Abschnitt 4 derselben Lieferung ersetzt genau diese Woerter durch
   Piktogramme. PROGRAMM IST GEBAUT (13.09.2026): vier 44er, Spalte 212 px
   (4 × 44 + 3 × 6 + 2 × 8 = 210, Design nannte 212). Gastlinks Kopieren bleibt
   Wort, weil der Knopf nach dem Klick „Kopiert" sagt.

   `notenarchiv/mappeninhalt` TRUG DEN BEFUND, AUS DEM ENTSCHEIDUNG 2 GEWORDEN
   IST. BERICHTIGT AM 12.09.2026 (nach dem DRITTEN Lauf von
   `pruefung-vor-pr`), UND ZWAR AN ZWEI STELLEN DESSELBEN ABSATZES: ein Satz
   im Praesens, der eine Lage nicht mehr trifft, und eine Meldung, die als
   offen dasteht und laengst entschieden ist.

     HIER STAND, und der Wortlaut bleibt vollstaendig stehen:

       `notenarchiv/mappeninhalt` TRAEGT AUCH DANN NOCH: Seine acht
       ausdruecklichen Breiten summieren 1076 px
       (64+180+160+110+180+110+160+112) in einer 966 px breiten Karte —
       genauer, nachgetragen am 12.09.2026: die `.karte` misst 998, ihr
       16-px-Polster laesst der Huelle 966; gemeint ist die HUELLE und nicht
       die Karte — die fuehrende Spalte bekommt 0, mit Piktogrammen 40 px
       mehr und immer noch zu wenig. Design setzt dafuer `min-width: 1250px`
       und erwartet eine schiebende Huelle; oberhalb 1120 px darf sie das
       nicht (Betreiber, 08.09.2026: „ich moechte in der Desktopversion keine
       horizontalen Scrollleisten"). ZWEI ENTSCHEIDUNGEN, DIE EINANDER HIER
       AUSSCHLIESSEN — gemeldet am 12.09.2026 ueber den Betreiber, nicht im
       Bau entschieden.

     ERSTENS, DAS PRAESENS: Oberhalb 1120 px summieren die acht festen Breiten
     seit Entscheidung 2 nicht mehr 1076, sondern 770, und `titel` bekommt den
     Rest statt 0. Die Zahlen und der Weg, auf dem sie gemessen sind, stehen
     im eingerueckten Block weiter oben und vollstaendig im Abschnitt „DREI
     ZAHLEN" beim Block selbst. UNTERHALB 1120 px GILT DER ALTE SATZ WEITER:
     Dort stehen die acht Breiten der Lieferung unveraendert und die 1250er
     `min-width` dazu, und dort SOLL die Huelle schieben.

     DASS DER EINGERUECKTE BLOCK WEITER OBEN DIE ZAHLEN SCHON BERICHTIGT HAT,
     HAT NICHT GEREICHT — und das ist die Haelfte, auf die es ankommt: Er nahm
     die 1124 und die Null zurueck und liess den SCHLUSS stehen. Wer hier zu
     lesen anfing, fand einen Praesenssatz, der die obere Lage nicht nennt.
     Zahlen zu berichtigen, ohne den Satz danebenzustellen, den sie tragen,
     berichtigt die Ablesung und nicht die Aussage.

     ZWEITENS, DIE MELDUNG: SIE IST ENTSCHIEDEN UND STAND HIER ALS OFFEN.
     Design hat aufgeloest, dass es KEIN Widerspruch zweier Anordnungen des
     Betreibers war, sondern ein Fehler in der EIGENEN Lieferung, und hat ihn
     zurueckgezogen — im Wortlaut des Auftrags der Justage 3: „Nicht schieben:
     ‚jede Tabelle steht fest auf 100 %, kein waagrechter Balken' steht in
     BRUCHKANTEN.md als Anordnung des Betreibers. Eine Ausnahme davon trifft
     Design nicht." An die Stelle der schiebenden Huelle traten die schmaleren
     Masse; gebaut sind sie im Block „JUSTAGE 3 — ENTSCHEIDUNG 2" weiter
     unten. DIE ANORDNUNG VOM 08.09.2026 BLEIBT UNANGETASTET — nicht sie hat
     nachgegeben, sondern die Lieferung.

     WAS DER STEHENGEBLIEBENE SATZ ANGERICHTET HAETTE: Wer ihn liest, haelt
     einen erledigten Vorgang fuer offen und legt ihn dem Betreiber ein
     zweites Mal vor (.claude/rules/05-auftrag-des-betreibers.md, „Eine
     getroffene Entscheidung wird nicht erneut vorgelegt"). Das kostet
     doppelt: einmal seine Zeit, einmal das Vertrauen, dass eine Antwort
     ankommt.

   UNTER 1120 PX IST NICHTS ABGESCHNITTEN: Dort steht die Huelle auf
   `overflow-x: auto` und SCHIEBT, wie die Lieferung es vorsieht. NACHGEMESSEN
   AM 12.09.2026 (nachts) bei echten 390 px — Fernsteuerungsprotokoll,
   `innerWidth` 390 und `matchMedia("(max-width:449px)")` greift, Vorschau ueber
   http, alle 79 Seiten nach frischem Bau: ES GLEITEN 65 VON 92 HUELLEN, davon
   36 MIT Kennung und 29 ohne. Mit einem senkrechten Balken sind es 66 von 92.
   Das ist der schmale Normalfall und kein Befund.

   HIER STAND „65 von 95 Huellen, die meisten ohne jede Kennung", und beides war
   zu berichtigen: Der Nenner 95 stammt aus dem veralteten Vorschaubestand
   (Absatz weiter oben), und „die meisten" traf nicht zu — die MEHRHEIT der
   gleitenden Huellen traegt eine Kennung, 36 gegen 29. DER ZAEHLER 65 IST
   REPRODUZIERT; falsch waren der Nenner und die Verteilung.

   DER WORTLAUT VON DAMALS BLEIBT STEHEN, damit niemand die alte Messung fuer
   die heutige haelt:

   UND DIE HUELLE SCHNEIDET NICHTS AB — auch das war gemessen und nicht gehofft:
   ueber alle 54 Vorschauseiten mit Liste, bei 1280 px UND bei 1120 px, hat
   KEINE Huelle mehr Inhalt als Platz (`scrollWidth > clientWidth`: 0 von 0).
   Das `overflow: hidden` verdeckt heute also nichts; es verhindert den Balken.
   Der einzige Ueberlauf, den die erste Messung fand, stand auf einer LIEGEN
   GEBLIEBENEN Vorschaudatei vom 09.09.2026 — `vorschau/` wird nicht
   ausgeraeumt, und eine alte Datei sieht aus wie ein Befund. Der Lauf ist nach
   `rm -rf vorschau && php tools/vorschau.php` wiederholt.

   GEBAUT IST DAMIT DER GEGENSTAND DES SATZES — kein Balken, die Huelle
   schneidet ab, die Tabelle steht auf 100 % —, und `fixed` bleibt bei den
   Listen, deren Spalten gemessen sind. Gemeldet, nicht stillschweigend
   weggelassen. */
@media (min-width: 1120px) {
  .listenlauf { overflow: hidden; }
  table.liste { width: 100%; min-width: 0; }
}

/* ===========================================================================
   NA2 — DIE SPALTENMASSE DER SIEBEN NOTENARCHIV-SEITEN
   Lieferung Design vom 12.09.2026, Abschnitt 1
   (docs/gestaltung/lieferungen/nachjustage-2026-09-12/AUFTRAG-KERN.md; die
   Werte stehen dort in nachjustage.css unter „Spaltenmasse je Liste").

   BERICHTIGT AM 12.09.2026 (nachmittags) — DESIGN HAT ZWEI EIGENE ANGABEN
   WIDERRUFEN, und wer diesen Abschnitt liest, muss beide kennen:

     A  Jedes Listenmass steht in `@media (max-width: 1119px)`, und der
        `@media (min-width: 1120px)`-Block mit `[data-liste^="notenarchiv/"]`
        ist ersatzlos gefallen. Die Masse tragen die Modulzahl 1000 statt
        einer Schaetzung je Liste; nur `mappeninhalt` traegt 1250. Herleitung
        und Messung stehen beim Medienblock am ENDE dieses Abschnitts.
     B  `notenarchiv/ausgaben` und `notenarchiv/blaetter` bekommen von Design
        KEIN Mass — `.karte-ausgaben` und `.karte-stimmen` setzen sie schon.
        Herleitung und Messung stehen weiter unten bei jenen zwei Listen.

   DIE VIER SPALTENSCHLUESSEL DARUNTER SIND VON DESIGN BESTAETIGT (12.09.2026,
   im Wortlaut: „Nicht anfassen, was Sie schon nachgezogen haben — die
   Kataloge bleiben, wie sie sind"). Sie betreffen genau DREI der 20 Listen;
   die uebrigen haben kein `listensicht()` und keinen Katalog.

   WARUM SIE HIER STEHEN UND NICHT IN EINER EIGENEN DATEI — Auftrag, woertlich:
   „Sie gehoeren in den Abschnitt `na2` des Stilblatts, nicht als eigene Datei."
   Kein `@import`, kein Build (ADR-0016).

   WAS AUS DER GELIEFERTEN DATEI HIER NICHT STEHT: die `.ausgeben`-Regeln und
   die Drehung der Reihenfolge-Zeichen. Sie gehoeren zu den Abschnitten 2 und 4
   desselben Auftrags und sind nicht gebaut.

   DER HAKEN IST DIE LISTENKENNUNG, und sie ist seit dem 12.09.2026 an allen
   ZWANZIG Listen der sieben Seiten gesetzt (tests/faelle/532_listenkennung.php
   leitet die Menge aus dem Markup ab). Damit greift auch
   `table.liste[data-liste]` weiter oben — `table-layout: fixed`, `width: 100%`.

   BERICHTIGT AM 12.09.2026 (nach dem DRITTEN Lauf von `pruefung-vor-pr`) —
   DIE DREI LISTEN TRAGEN SEIT DEMSELBEN TAG MASSE, UND DER SATZ, DER HIER
   STAND, SAGT DAS GEGENTEIL. Er steht deshalb als alter Wortlaut da und nicht
   mehr als Auskunft:

     HIER STAND, und der Wortlaut bleibt vollstaendig stehen:

       DREI LISTEN TRAGEN ABSICHTLICH KEIN MASS: mappen „Verlauf der
       Verleihe", meinemappe „Programme" und „Alle Mappen & Buecher". Die
       Kennungstabelle der Lieferung nennt sie nicht — sie nennt 17 Listen,
       gemessen sind 20. Die Namen (`notenarchiv/mappenverlauf`,
       `…/meineprogramme`, `…/allemappen`) sind technisch vergeben; welche
       Breiten sie brauchen, ist Sichtbares und gehoert Design. Was sie ohne
       Mass tun, steht beim Medienblock am Ende.

     DER SATZ WAR RICHTIG, BIS DIE LIEFERUNG KAM — ER IST UEBERHOLT UND NICHT
     FALSCH, und so gehoert er gelesen. Ueber die Lieferung DIESES Abschnitts
     sagt er unveraendert Richtiges: Deren Kennungstabelle nennt diese drei
     nicht. Noch am selben Tag hat Design sie nachgereicht — Justage 3,
     Entscheidung 1,
     docs/gestaltung/lieferungen/justage-2026-09-12-drei/AUFTRAG-KERN.md.
     DAMIT IST „gehoert Design" EINGELOEST UND NICHT UEBERGANGEN: Die Werte
     sind Designs, uebernommen und nicht gerechnet.

     WAS HEUTE GILT: Alle drei tragen Spaltenmasse, und zwar in BEIDEN Lagen.
     Der Block steht unter „JUSTAGE 3 — ENTSCHEIDUNG 1" weiter unten in
     diesem Blatt und nennt dort unter „WAS SIE ABLOESEN" selbst, was er
     ersetzt. OHNE MASS IST KEINE DER DREI MEHR. Auch die letzte Zeile des
     alten Wortlauts zeigt seitdem ins Leere: Der Medienblock am Ende dieses
     Abschnitts vergibt `min-width`, und genau die bekommen diese drei nicht
     — zwei von ihnen gar keine, `meineprogramme` eine im 1119er Block beim
     Justage-Block selbst.

     WARUM DER VERMERK HIER STEHT UND NICHT NUR DORT, und das ist der ganze
     Anlass: Der Justage-Block weiss, was er abloest. DIESER ABSCHNITTSKOPF
     WUSSTE ES NICHT — und ihn liest ein Bauender ZUERST. Er haette hier
     gelesen, die drei seien absichtlich ohne Mass, und weiter unten im
     selben Blatt ihre Masse vorgefunden. Ein Vermerk am Abloeser ersetzt
     keinen am Abgeloesten. Gefunden hat es `pruefung-vor-pr` im dritten
     Lauf und nicht die Kette: Sie liest Regeln und misst keine Kanten
     (.claude/rules/50-gestaltung.md).

   VIER GELIEFERTE SPALTENSCHLUESSEL GIBT ES IN DIESEM PORTAL NICHT, und die
   Waehler sind deshalb auf die nachgezogen, die die Seite wirklich ausgibt —
   gemessen am 12.09.2026 gegen module/notenarchiv/notenarchiv.php:

     Lieferung        gebaut         Katalog
     favorit      ->  verwendet      notenarchiv_stimmen_spalten()
     sortierung   ->  reihenfolge    notenarchiv_stimmen_spalten()
     stuecke      ->  inhalt         notenarchiv_mappen_spalten()
     verliehen    ->  wo             notenarchiv_mappen_spalten()

   DER KATALOG IST DAS FESTE UND NICHT DER WAEHLER: `listensicht()` merkt sich
   die Spaltenwahl je Konto UNTER DIESEM SCHLUESSEL. Wer den Katalog auf die
   gelieferten Namen umbenennt, verwirft jede gespeicherte Sicht. Mass und
   Spalte sind unveraendert; nur der Name im Waehler ist der richtige.
   OHNE DIESE VIER AENDERUNGEN HAETTE AM BILD SCHLICHT KEINE BREITE GEGRIFFEN,
   und nichts haette es gemeldet — eine Regel ohne Verwender ist gruen, bevor
   sie laeuft. `532_listenkennung.php` haelt es jetzt fest.
   =========================================================================== */
table.liste[data-liste="notenarchiv/stimmen"] th[data-spalte="verwendet"] { width: 112px; }
table.liste[data-liste="notenarchiv/stimmen"] th[data-spalte="blaetter"] { width: 100px; }
table.liste[data-liste="notenarchiv/stimmen"] th[data-spalte="reihenfolge"] { width: 120px; }
table.liste[data-liste="notenarchiv/stimmen"] th.spalte-aktionen { width: 112px; }

table.liste[data-liste="notenarchiv/stimmendateien"] th[data-spalte="datei"] { width: 260px; }
table.liste[data-liste="notenarchiv/stimmendateien"] th[data-spalte="ausgabe"] { width: 180px; }
table.liste[data-liste="notenarchiv/stimmendateien"] th[data-spalte="zuordnen"] { width: 320px; }

/* DIE ANGABENLISTE BEKOMMT KEINE BREITE — `min-width: 0` ist der ganze
   Eintrag der Lieferung. Sie ist eine Feldliste (Angabe | Stand | Aktionen)
   und keine Kolonne; tests/faelle/549_angabenliste.php haelt die Bauform.
   Ihre Null steht seit dem 12.09.2026 im Medienblock am Ende dieses
   Abschnitts — sie ist KEINE geschaetzte Breite und wird deshalb nicht durch
   die Modulzahl 1000 ersetzt. Dasselbe gilt fuer `instueck` und `leihen`. */

/* WIDERRUFEN AM 12.09.2026 VON DESIGN SELBST — `notenarchiv/ausgaben` UND
   `notenarchiv/blaetter` BEKOMMEN VON DESIGN KEIN MASS.

   Hier stand am 12.09.2026 (frueh) `min-width: 1250px` fuer `ausgaben` und
   `min-width: 920px` fuer `blaetter`, beide wie geliefert. Design im Wortlaut:
   „Das Stilblatt setzt 1250 … und fuer die Blaetterliste `.karte-stimmen
   table.liste { min-width:920px; width:920px }` mit 22 % / 200 px auf der
   ersten Spalte. Die beiden Listen der Stueckseite brauchen von Design KEIN
   Mass. Sie bekommen die Kennung nur fuer die Spaltenwahl."

   DAS IST NACHGEMESSEN UND NICHT GEGLAUBT, bevor die Zeilen fielen — in einer
   Kopie der Vorschau ohne `config.php`, ueber alle 79 Seiten, bei echten 1280
   UND 1119 px (Fernsteuerungsprotokoll): Ohne die zwei Zeilen aendert sich an
   45 Listen NICHTS, an keiner der beiden auch nur ein Kopfmass.
   `.karte-ausgaben` (Z. ~8215) und `.karte-stimmen` (Z. ~8346) tragen allein.

   UND DIE NULL IST BELEGT, nicht gruen vor dem Lauf: Nimmt man in derselben
   Kopie stattdessen die zwei `.karte-*`-Zeilen weg, faellt `ausgaben` bei
   1119 px von 1250 auf 1070 und `blaetter` von 920 auf 1070. Das Verfahren
   misst `min-width` also wirklich.

   WAS BLEIBT: die Kennung und die Spaltenwaehler darunter. Sie sind nicht das
   Mass der Kolonne, sondern die Spaltenwahl, und der Auftrag nennt sie
   ausdruecklich.

   UND DAS IST GUT SO, DENN ZWEI DAVON TRAGEN — nachgemessen am 12.09.2026 in
   einer dritten Kopie, in der die sieben Spaltenwaehler dieser zwei Listen
   entfernt waren:

     bei 1280 px   folgenlos, alle sieben. `.karte-ausgaben` und
                   `.karte-stimmen` setzen dort `thead th:nth-child(n)` und
                   gewinnen mit (0,3,3) gegen (0,3,2).
     bei 1119 px   DIE ZWEI AUSGABEN-WAEHLER TRAGEN. Ohne sie faellt die
                   Handlungsspalte von 310 auf 13 px und die sechs 44er-Knoepfe
                   laufen heraus; die uebrigen sieben Spalten gehen von
                   225/128 auf gleiche 177. `.karte-ausgaben` setzt unterhalb
                   1120 die Kolonne fest auf 1300 px (width und Raster), damit
                   Stift, Mappe, Hochladen und Lupe erreichbar sind.
     bei 1119 px   die fuenf Blaetter-Waehler bleiben folgenlos —
                   `.karte-stimmen` fuehrt dieselben Masse ueber `nth-child`.
                   Sie sind Doppelung und stehen als Designs Eintrag.

   WER SIE FUER ENTBEHRLICH HAELT, WEIL DAS MASS DER KOLONNE ES IST, NIMMT DER
   AUSGABENLISTE IHRE HANDLUNGSSPALTE. Der Auftrag hat sie ausdruecklich
   ausgenommen; hier steht, was es gekostet haette. */
table.liste[data-liste="notenarchiv/ausgaben"] th[data-spalte="ausgabe"] { width: 18%; }
table.liste[data-liste="notenarchiv/ausgaben"] th.spalte-aktionen { width: 310px; }

table.liste[data-liste="notenarchiv/blaetter"] th[data-spalte="stimme"] { width: 22%; }
table.liste[data-liste="notenarchiv/blaetter"] th[data-spalte="seiten"] { width: 72px; }
table.liste[data-liste="notenarchiv/blaetter"] th[data-spalte="groesse"] { width: 90px; }
table.liste[data-liste="notenarchiv/blaetter"] th[data-spalte="hochgeladen"] { width: 150px; }
table.liste[data-liste="notenarchiv/blaetter"] th.spalte-aktionen { width: 260px; }

table.liste[data-liste="notenarchiv/instueck"] th[data-spalte="nr"] { width: 84px; }
table.liste[data-liste="notenarchiv/instueck"] th[data-spalte="termin"] { width: 140px; }
table.liste[data-liste="notenarchiv/leihen"] th[data-spalte="von"],
table.liste[data-liste="notenarchiv/leihen"] th[data-spalte="bis"] { width: 130px; }

table.liste[data-liste="notenarchiv/programme"] th[data-spalte="anlass"] { width: 220px; }
table.liste[data-liste="notenarchiv/programme"] th[data-spalte="stand"] { width: 130px; }
table.liste[data-liste="notenarchiv/programme"] th[data-spalte="stuecke"] { width: 90px; }
table.liste[data-liste="notenarchiv/programme"] th[data-spalte="offen"] { width: 120px; }
table.liste[data-liste="notenarchiv/programme"] th.spalte-aktionen { width: 174px; }

table.liste[data-liste="notenarchiv/programm"] th[data-spalte="pos"] { width: 64px; }
table.liste[data-liste="notenarchiv/programm"] th[data-spalte="komponist"] { width: 200px; }
table.liste[data-liste="notenarchiv/programm"] th[data-spalte="noten"] { width: 140px; }
table.liste[data-liste="notenarchiv/programm"] th[data-spalte="notiz"] { width: 200px; }
table.liste[data-liste="notenarchiv/programm"] th.spalte-aktionen { width: 212px; }

table.liste[data-liste="notenarchiv/gastlinks"] th[data-spalte="stimme"] { width: 200px; }
table.liste[data-liste="notenarchiv/gastlinks"] th[data-spalte="bis"] { width: 180px; }
table.liste[data-liste="notenarchiv/gastlinks"] th[data-spalte="link"] { width: 320px; }
table.liste[data-liste="notenarchiv/gastlinks"] th.spalte-aktionen { width: 174px; }

table.liste[data-liste="notenarchiv/mappen"] th[data-spalte="art"] { width: 140px; }
table.liste[data-liste="notenarchiv/mappen"] th[data-spalte="inhalt"] { width: 130px; }
table.liste[data-liste="notenarchiv/mappen"] th[data-spalte="wo"] { width: 180px; }
table.liste[data-liste="notenarchiv/mappen"] th.spalte-aktionen { width: 72px; }

table.liste[data-liste="notenarchiv/mappeninhalt"] th[data-spalte="nr"] { width: 64px; }
table.liste[data-liste="notenarchiv/mappeninhalt"] th[data-spalte="komponist"] { width: 180px; }
table.liste[data-liste="notenarchiv/mappeninhalt"] th[data-spalte="ausgabe"] { width: 160px; }
table.liste[data-liste="notenarchiv/mappeninhalt"] th[data-spalte="art"] { width: 110px; }
table.liste[data-liste="notenarchiv/mappeninhalt"] th[data-spalte="notiz"] { width: 180px; }
table.liste[data-liste="notenarchiv/mappeninhalt"] th[data-spalte="seit"] { width: 110px; }
table.liste[data-liste="notenarchiv/mappeninhalt"] th[data-spalte="recht"] { width: 160px; }
table.liste[data-liste="notenarchiv/mappeninhalt"] th.spalte-aktionen { width: 112px; }

table.liste[data-liste="notenarchiv/mappenbuecher"] th[data-spalte="nr"] { width: 64px; }
table.liste[data-liste="notenarchiv/mappenbuecher"] th[data-spalte="an"] { width: 180px; }
table.liste[data-liste="notenarchiv/mappenbuecher"] th[data-spalte="konto"] { width: 130px; }
table.liste[data-liste="notenarchiv/mappenbuecher"] th[data-spalte="bemerkung"] { width: 180px; }
table.liste[data-liste="notenarchiv/mappenbuecher"] th.spalte-aktionen { width: 112px; }

/* Am Handy faellt die Kontospalte; der Name liegt unter der Stimme
   (`.mappenbuch-an-schmal`). Ohne display:none saeße der Block in der
   breiten Ansicht doppelt — Marke in der Stimme UND in Konto. */
.mappenbuch-an-schmal { display: none; }

/* DREI SPALTEN SEIT DEM 13.09.2026 — Betreiber: „Mappe und Programme sollen
   für das Mitglied kompakter (ohne horizontal Scrollen) in der Ansicht sein."
   HIER STANDEN nr 84 / komponist 200 / noten 300, und darunter die Kolonne
   1000 (Modulzahl). Die Komponistenspalte ist gefallen (Name unter dem Titel),
   sonst wäre `th[data-spalte="komponist"]` ein Wähler ohne Verwender (532).

   nr 72: 44er Ampel plus 12 px Zellpolster je Seite, auf 72 gerundet damit der
   Punkt nicht an der Kante klebt. noten 156: 44er Auge plus 8 px Abstand plus
   Stimme; der Titel wächst. */
/* =========================================================================
   DIE NUMMERNSPALTE WÄCHST — 17.09.2026 (nachmittags), UND SIE MUSS ES

   HIER STAND `width: 72px`, gerechnet für EINE Ampel. Seit dem 17.09.2026
   steht in dieser Zelle die Ziffer in eigener Spalte UND ein Punkt JE STIMME,
   nebeneinander (Betreiber am Bild: „Ziffer links in einer eigenen spalte.
   dann die punkte nebeneinander").

   WARUM DAS NICHT BEI 72 BLEIBEN KANN, und es ist gemessen und keine
   Vorsicht: `table.liste[data-liste]` trägt `table-layout: fixed` — die
   Spaltenbreite kommt aus DIESER Zeile und NICHT aus dem Inhalt. Mit 72 px
   und drei Punkten ragte der dritte über die Zelle hinaus: GEMESSEN im
   Browser bei echten 390 px, Zeile 3 der Vorschauseite
   `notenarchiv-meinemappe-eine` — Zelle x 16 bis 88, dritter Knopf x 103 bis
   118, also 30 px IN DER TITELSPALTE, sichtbar auf dem Wort „Gladiatoren".
   DIE KETTE WAR DABEI GRÜN; gefunden hat es die Aufnahme.

   DIE BREITE IST GERECHNET UND NICHT GERUNDET, aus denselben Teilen wie die
   72 von damals:

     24 px  Zellpolster, 12 je Seite
     3ch    die Ziffer in ihrer eigenen Spalte (`.nr-zahl`, min-width)
      8 px  Fuge zwischen Ziffer und Punkten
     61 px  drei Punkte à 15 px mit zwei Fugen à 8 px

   = `calc(3ch + 93px)`. NACHGEMESSEN IM BROWSER: 110 px (109,922), nicht 114.

   HIER STAND ALS GRUND: „`3ch` loest bei 14 px Schriftgrad auf rund 17 px auf,
   waehrend die Zifferzone 21 px misst (`min-width` plus das, was das `<div>`
   ohnehin belegt)." DER GRUND IST IN BEIDEN HAELFTEN FALSCH — gefunden von der
   Pruefung vor dem Pull Request, nachgemessen am 17.09.2026 im Browser bei
   echten 390 px (Fernsteuerungsprotokoll):

     `3ch` AM `<th>`      (`.liste th`: 11 px, `font-weight: 600`)   16,922 px
     `3ch` AN DER ZIFFER  (`.liste td`: 14 px, `font-weight: 400`)   20,859 px

   Die 16,922 sind nicht „3ch bei 14 px", sondern 3ch bei ELF. Und die
   Zifferzone ist nicht „`min-width` plus etwas", sondern GENAU ihre
   `min-width` (berechnet 20,8739) — sie misst 20,859 und keinen Pixel mehr.

   DAS IST DIE BAUART UND KEIN RECHENFEHLER, und deshalb steht sie hier:
   `width` haengt am `<th>`, also loest `3ch` DORT auf — im Kopf der Spalte.
   Die Ziffer, fuer die der Posten gedacht ist, steht im `<td>`. DER POSTEN
   WIRD AN EINEM ANDEREN ELEMENT AUSGEWERTET ALS SEIN GEGENSTAND, und die
   Kopplung geht in beide Richtungen: `.liste th { font-size }` aendert die
   SPALTENBREITE ohne die Ziffer, `.liste td { font-size }` die ZIFFER ohne die
   Spalte. Die Schriftstaerke kommt dazu — 600 im Kopf, 400 in der Zelle —, und
   sie macht bei gleicher Groesse rund 3 % aus.

   WAS DAS KOSTET, gemessen und nicht erwogen: Die Spalte deckt ihren eigenen
   Posten um 20,859 − 16,922 = 3,937 px NICHT. Der dritte Punkt endet bei
   117,9, die rechte Polstergrenze liegt bei 113,9 — die Differenz nimmt sich
   der Punkt aus dem rechten Zellpolster, das dieselbe Rechnung schon als
   eigenen Posten (24 px) fuehrt. VON DEN 12 px RECHTS BLEIBEN 8,1.

   NICHTS RAGT DABEI IN DIE TITELSPALTE: Die Zellkante liegt bei 125,9, der
   dritte Punkt endet bei 117,9. Der Punkt klebt auch nicht an der Kante —
   genau das, wofuer die 72 von damals gerundet waren.

   DESHALB BLEIBT DER WERT STEHEN UND NUR DER GRUND WIRD BERICHTIGT. Die
   ehrliche Rechnung braeuchte die 20,859 statt der 16,922, also 113,9 statt
   109,9 px: VIER PIXEL MEHR SPALTE UND VIER WENIGER FUER DEN TITEL, der heute
   schon 92 px hat. DAS IST SICHTBARES UND GEHOERT DEM BETREIBER
   (.claude/rules/20-kanal.md) — gemessen und gemeldet, nicht entschieden.

   DIE RECHNUNG STEHT TROTZDEM SO DA, weil sie die Teile nennt; die 110 ist das
   Ergebnis und nicht die Absicht. WAS DIE KETTE DAZU MISST, steht in
   tests/faelle/330_notenarchiv.php, „Und jeder Posten der 93 steht noch so da,
   wie er gerechnet ist": nicht die 110 — die kann sie ohne Browser nicht sehen
   —, sondern die fuenf Posten der Summe UND den Ort, an dem `3ch` aufloest.
   Die geltende Menge steht im Titel jener Zeile und nicht hier; eine Zahl an
   zwei Orten altert an zwei Tagen (.claude/rules/40-tests.md).

   DREI PUNKTE SIND DIE GRENZE, UND SIE IST BENANNT: Wer VIER Stimmen in
   dieser Ansicht hat — ein Schlagwerker mit mehreren Büchern, gesehen über
   ein Programm —, bekommt einen vierten Punkt, und der ragt wieder heraus.
   `table-layout: fixed` kann sich nicht je Zeile anpassen; die Spalte ist
   eine Konstante. WAS DANN ZU TUN IST, IST SICHTBARES UND GEHÖRT DEM
   BETREIBER: breitere Spalte, engere Fuge zwischen den Punkten, oder ein
   schmaleres Fingerziel. GEMESSEN UND GEMELDET, NICHT ENTSCHIEDEN.

   WAS DIE BREITE KOSTET, bei echten 390 px gemessen: Die Tabelle misst
   358 px, `noten` 156, `nr` 110 — für den Titel bleiben 92 px statt 130. Der
   Titel bricht dort härter um („Tiroler / Holzhackerbuam"), und sein zweites
   Wort stösst an die Notenspalte. DIE ZEILE WIRD HÖHER, NICHT BREITER: die
   Hülle schiebt NICHT (`.listenlauf` gemessen, `scrollWidth === clientWidth`),
   das Dokument bleibt 390 px. DAS IST DER PREIS DER ANORDNUNG UND SICHTBARES
   — gemessen und gemeldet, nicht entschieden.
   ========================================================================= */
table.liste[data-liste="notenarchiv/meinemappe"] th[data-spalte="nr"] { width: calc(3ch + 93px); }
table.liste[data-liste="notenarchiv/meinemappe"] th[data-spalte="noten"] { width: 156px; }

/* Stimme links, Auge rechts, mehrere Stimmen übereinander. `.handlung` trägt
   `margin: 0 auto` — ohne den Widerruf hier stünde das Auge mittig und zöge
   die Stimme auf die andere Seite. */
.meinemappe-blatt {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
}
.meinemappe-blatt + .meinemappe-blatt { margin-top: 6px; }
.meinemappe-blatt .meinemappe-stimme { flex: 1 1 auto; min-width: 0; line-height: 1.3; }
.meinemappe-blatt .handlung { margin: 0; flex: 0 0 44px; }

/* DIE STIMME EINES BUCHNAMENS BRICHT NICHT — 16.09.2026 (abends), Betreiber-
   liste Zeile 4: „Mappe-Name am Telefon (Umbruch, …)". Gemessen bei echten
   390 px: Der <h1> „Konzertmappe 2026 – 1. Flügelhorn in B" brach als
   „Konzertmappe 2026 – 1." / „Flügelhorn in B", bei 360 px auch „Marschbuch 1
   – 1. Flügelhorn in B" („… Flügelhorn" / „in B") — mitten in der Stimme; in
   der Buchliste „Marschbuch 1 – 1." / „Flügelhorn in B" in 146 px.
   seiten/meinemappe.php legt das Stueck um die Stimme — im <h1>, an jedem
   Chip, in jeder Zeile der Buchliste —, und diese eine Regel haelt es
   zusammen: Der Name bricht hoechstens an der Luecke nach dem Gedankenstrich.
   NICHT der ganze Name (`.seitenkopf h1` bricht unter 700 px mit Absicht,
   BAUTEILE.md „Handy 22 px, bricht"): Ein 46-Zeichen-Name liefe sonst bei
   390 px ueber den Rand. Keine neue Form — kein Farbton, kein Bauteil, nur
   ein Umbruch, der woanders faellt. 523_meine_mappen.php haelt die Regel. */
.buchname-stimme { white-space: nowrap; }
table.liste[data-liste="notenarchiv/meinemappe"] td[data-titel="Titel"] .nebensache {
  display: block;
  line-height: 1.3;
}

/* DIE VIERTE SPALTE HEISST `blaetter` — DESIGN HAT SICH AM 12.09.2026 SELBST
   BERICHTIGT. nachjustage.css fuehrte

     table.liste[data-liste="notenarchiv/meinemappen"] th[data-spalte="seit"]{width:130px}

   und `seit` gibt es auf dieser Seite nicht. Der Bau vom Vormittag hat die
   Zeile deshalb NICHT gebaut und den Fall gemeldet — ein Waehler ohne
   Verwender ist gruen, bevor er laeuft. Design im Wortlaut: „Gemeint war
   `blaetter`, eine Zahl. `seit` war erfunden und faellt." Gemessen an
   meinemappe.php:925: `<th>Mappe</th><th>Nr.</th><th>Stimme</th><th>Blaetter</th>`.

   GEBAUT IST JETZT DIE BREITE AUF DEM SCHLUESSEL, DEN DIE SEITE FUEHRT — 130 px
   wie geliefert, nur unter dem richtigen Namen. Das Mass ist Designs, der
   Name ist gemessen; erfunden ist keines von beiden. */
table.liste[data-liste="notenarchiv/meinemappen"] th[data-spalte="nr"] { width: 84px; }
table.liste[data-liste="notenarchiv/meinemappen"] th[data-spalte="stimme"] { width: 240px; }
table.liste[data-liste="notenarchiv/meinemappen"] th[data-spalte="blaetter"] { width: 130px; }

table.liste[data-liste="notenarchiv/recht-ableitbar"] th.spalte-ankreuz { width: 56px; }
table.liste[data-liste="notenarchiv/recht-ableitbar"] th[data-spalte="ausgabe"] { width: 220px; }
table.liste[data-liste="notenarchiv/recht-ableitbar"] th[data-spalte="verlag"] { width: 200px; }
table.liste[data-liste="notenarchiv/recht-ableitbar"] th[data-spalte="beleg"] { width: 320px; }

table.liste[data-liste="notenarchiv/recht-hand"] th[data-spalte="ausgabe"] { width: 200px; }
table.liste[data-liste="notenarchiv/recht-hand"] th[data-spalte="verlag"] { width: 200px; }
table.liste[data-liste="notenarchiv/recht-hand"] th[data-spalte="warum"] { width: 320px; }

/* JEDES LISTENMASS STEHT IN SEINER MEDIA QUERY — BERICHTIGT AM 12.09.2026,
   UND DIE BERICHTIGUNG IST DESIGNS EIGENE.

   HIER STAND EIN `@media (min-width: 1120px)`-BLOCK MIT
   `table.liste[data-liste^="notenarchiv/"] { … min-width: 0 }`, und darueber
   standen siebzehn `min-width`-Zeilen AUSSERHALB JEDER MEDIA QUERY — beides
   wie geliefert (nachjustage.css Z. 19–107 und Z. 113–115). Der Block war der
   Versuch, die siebzehn oberhalb 1120 px wieder einzufangen.

   ES WAR EINE SPEZIFITAETSFALLE, und sie hat drei Listen abgeschnitten. Das
   globale `@media (min-width: 1120px) { table.liste { width: 100%;
   min-width: 0 } }` weiter oben hat die Spezifitaet (0,1,1); eine Zeile
   `table.liste[data-liste="…"] { min-width: … }` hat (0,2,1) und SCHLAEGT SIE,
   gleichgueltig in welcher Reihenfolge sie steht und gleichgueltig, dass sie
   in keiner Media Query steht. Design im Wortlaut: „Meine Zeilen waren
   Doppelung — und weil `[data-liste]` hoehere Spezifitaet hat als
   `table.liste`, haetten meine `min-width`-Zeilen ab 1120 die Kolonne
   erzwungen und den waagrechten Balken am Schreibtisch zurueckgebracht."

   WAS DIE FALLE GEKOSTET HAT — UND HIER STEHT EINE MESSUNG, DIE DER ERWARTUNG
   WIDERSPRICHT. SIE GEHOERT DAZU, WEIL SONST EINE FALSCHE URSACHE FESTFRIERT:

   Die Falle war ANGELEGT und hat NICHT GEWIRKT. Die Lieferung schickte den
   Einfangblock mit, und er hatte dieselbe Spezifitaet (0,2,1) wie die
   siebzehn Zeilen und stand SPAETER im Blatt — oberhalb 1120 px war die
   `min-width` jeder Notenarchiv-Liste deshalb schon vorher `0px`. Gemessen am
   Bild, vorher wie nachher, bei echten 1280 px.

   DIE DREI ABGESCHNITTENEN LISTEN HABEN ALSO EINE ANDERE URSACHE, und sie
   bleiben nach dieser Berichtigung Zeichen fuer Zeichen gleich:

     mappeninhalt  1014 > 966   nachgemessen am 12.09.2026 (nachts)
     programm      1142 > 966   vorher wie nachher
     gastlinks     1067 > 966   vorher wie nachher

   BERICHTIGT AM 12.09.2026 (nachts) — „VORHER WIE NACHHER" TRAEGT FUER DIE
   ERSTE ZEILE NICHT MEHR. Hier stand „mappeninhalt 1124 > 966 vorher wie
   nachher". Der Satz meint vorher/nachher DER SPEZIFITAETSBERICHTIGUNG und
   nicht vorher/nachher der Spaltenmasse — gelesen wird er als das Zweite, und
   dann ist er falsch: Die 1124 ist der Stand VOR den Spaltenmassen, heute misst
   dieselbe Huelle 1014 > 966 (mit Balken 999 > 951). FUER `programm` UND
   `gastlinks` SIND DIE ZAHLEN UNVERAENDERT; gefallen ist genau die erste Zeile.

   WELCHE KARTE: Die 966 ist hier wie oben die Huelle in einer `.karte` MIT
   16-px-Polster bei 1280 px Sichtfenster; nimmt ein senkrechter Balken 15 px,
   misst dieselbe Huelle 951. Welche Sorte Balken ein bestimmter Browser fuehrt,
   ist hier nicht gemessen — es ist eine Bedingung und keine Aussage. Die
   Huellenbreiten stehen einmal im Abschnitt „DREI ZAHLEN".

   WORAN ES WIRKLICH LIEGT, gemessen an den Kopfzellen bei 1280 px:

     mappeninhalt   BERICHTIGT AM 12.09.2026 (nachts): Dieser Absatz galt bis
                    zu den Spaltenmassen. DAMALS summierten die acht festen
                    Breiten 1076 (64+180+160+110+180+110+160+112) in einer
                    966er Huelle; `table-layout: fixed` nahm sie woertlich und
                    drueckte die fuehrende Spalte `titel` auf 0 px — DAS WAR
                    DIE SUMME DER SPALTENMASSE UND KEINE `min-width`.
                    HEUTE summieren sie oberhalb 1120 px 770, `titel` bekommt
                    den Rest und steht auf 196 px. Die Tabelle steht auf
                    966 = Huelle; ueber laeuft ihr INHALT mit 1014, und zwar an
                    `recht` (119 noetig, 112 zugeteilt) und an `aktionen`
                    (160 noetig, 112 zugeteilt). DAMIT IST DIE ERSTE ZEILE
                    HEUTE UEBERWIEGEND DERSELBE FALL WIE DIE ZWEI DARUNTER —
                    die Handlungsspalte traegt WOERTER.
     programm       GEBAUT 13.09.2026: vier Zeichenknoepfe, Spalte 212 px
                    (Design, justage-3e2e4e9/prompts/07-programme.txt).
     gastlinks      Die Handlungsspalte steht auf 174 px; Kopieren bleibt Wort,
                    weil der Knopf nach dem Klick „Kopiert" sagt. Zuruecknehmen
                    ist Wort, Ansehen ist Zeichen.

   WAS DIE BERICHTIGUNG TROTZDEM WERT IST, und das ist kein Trost: Der
   Einfangblock hat die Falle NEUTRALISIERT und nicht BESEITIGT. Er traf am
   Praefix `notenarchiv/` — eine `min-width` an irgendeiner anderen Kennung
   ausserhalb einer Query waere durchgefallen, und niemand haette es gesehen.
   Seit dieser Berichtigung gibt es oberhalb 1120 gar keine Kennungs-
   `min-width` mehr, und `tests/faelle/532_listenkennung.php` haelt es fest.

   DER FALL WAR KEIN WIDERSPRUCH ZWISCHEN ZWEI ANORDNUNGEN DES BETREIBERS —
   so weit trifft die Auflösung zu. Der Bau vom Vormittag hat ihn als solchen
   gemeldet („ich moechte in der Desktopversion keine horizontalen
   Scrollleisten" gegen Designs `min-width: 1250px`) und ihn nicht selbst
   entschieden. DASS DIE SPEZIFITAETSFALLE SEINE URSACHE WAR, IST DAMIT
   ABER NICHT BELEGT — gemessen ist das Gegenteil, und der Befund ueber die
   drei Listen steht unveraendert offen. DIE MELDUNG HAT DIE FALLE GEFUNDEN,
   die gruene Kette nicht: Sie liest Regeln und misst keine Kanten
   (.claude/rules/50-gestaltung.md).

   WAS AB JETZT GILT UND WARUM ES TRAEGT: Ein Listenmass steht in
   `@media (max-width: 1119px)` und nirgends sonst. Dann gibt es oberhalb 1120
   gar keine `min-width` je Liste, die man wieder einfangen muesste — der
   Einfangblock ist ERSATZLOS entbehrlich, und nicht bloss ueberfluessig.
   Dasselbe Muster fuehren `.karte-ausgaben`, `.karte-stimmen` und der
   vorbestehende Block fuer `notenarchiv/bestand` seit jeher.

   DIE MODULZAHL STATT EINER SCHAETZUNG JE LISTE. Design: „Die
   Notenarchiv-Listen tragen `min-width: 1000px` — die Modulzahl aus
   `BAUTEILE.md` (‚Notenarchiv 1000'), nicht je Liste geschaetzt. Nur
   `mappeninhalt` traegt 1250, weil es neun Spalten fuehrt." Geliefert waren
   760, 900, 860, 700, 920, 1250 und viermal 1000; gebaut ist die Modulzahl.
   WER EINE ENGERE LISTE SCHMALER WILL, aendert eine Zeile — dann mit Vermerk,
   denn sie weicht ab der Modulzahl ab.

   DREI NULLEN SIND KEINE SCHAETZUNG UND BLEIBEN NULL: `angaben`, `instueck`
   und `leihen` fuehrt die Lieferung ausdruecklich mit `min-width: 0`
   (nachjustage.css Z. 30, 42, 45). Das ist die Aussage „diese Liste schiebt
   nicht" und keine geratene Breite; die Modulzahl ersetzt sie deshalb nicht.
   Gemessen ist die Null hier folgenlos — es gibt keine globale `min-width` auf
   `table.liste` —, und sie steht als Designs Eintrag und nicht als Wirkung.

   DIE VIERTE NULL IST ANGEORDNET, NICHT GELIEFERT — 13.09.2026, Betreiber:
   „ohne horizontal Scrollen". `meinemappe` stand in der Modulzahl-Gruppe
   (1000). Drei Spalten brauchen keine Kolonne; die 1000 waere genau der
   Balken, den die Anordnung verbietet.

   ZWEI LISTEN FEHLEN HIER GANZ: `notenarchiv/ausgaben` und
   `notenarchiv/blaetter`. Begruendung und Messung stehen oben beim
   Widerruf B. */
@media (max-width: 1119px) {
  table.liste[data-liste="notenarchiv/stimmen"],
  table.liste[data-liste="notenarchiv/stimmendateien"],
  table.liste[data-liste="notenarchiv/programme"],
  table.liste[data-liste="notenarchiv/programm"],
  table.liste[data-liste="notenarchiv/gastlinks"],
  table.liste[data-liste="notenarchiv/mappen"],
  table.liste[data-liste="notenarchiv/mappenbuecher"],
  table.liste[data-liste="notenarchiv/meinemappen"],
  table.liste[data-liste="notenarchiv/recht-ableitbar"],
  table.liste[data-liste="notenarchiv/recht-hand"] { min-width: 1000px; }
  /* Neun Spalten, und deshalb als einzige mehr als die Modulzahl. */
  table.liste[data-liste="notenarchiv/mappeninhalt"] { min-width: 1250px; }
  /* Designs ausdrueckliche Null — keine Kolonne, also auch keine Modulzahl. */
  table.liste[data-liste="notenarchiv/angaben"],
  table.liste[data-liste="notenarchiv/instueck"],
  table.liste[data-liste="notenarchiv/leihen"] { min-width: 0; }
  /* Betreiber 13.09.2026: Mappe und Programme fuer das Mitglied ohne
     waagrechtes Scrollen. Drei Spalten; die Modulzahl 1000 waere eine
     Kolonne, die niemand bestellt hat. */
  table.liste[data-liste="notenarchiv/meinemappe"] { min-width: 0; }
}

/* Betreiber 13.09.2026: „in Programme zuweisen ist die Liste noch viel zu
   breit auseinandergerissen." Dieselbe Lage wie Meine Mappe: unter 700 px
   keine Kolonne. Komponist liegt unter dem Titel; Notiz, Ausgegeben-an und
   Konto fallen — der Name liegt unter der Stimme (`.mappenbuch-an-schmal`).
   mappeninhalt: Kolonne 1250 faellt, stille Spalten fallen, Titel und
   Entnehmen bleiben im Sichtfenster. */
@media (max-width: 699px) {
  table.liste[data-liste="notenarchiv/programm"],
  table.liste[data-liste="notenarchiv/mappenbuecher"],
  table.liste[data-liste="notenarchiv/meinemappen"] { min-width: 0; }
  table.liste[data-liste="notenarchiv/mappeninhalt"] { min-width: 0; }
  /* DIE BUCHLISTE VON „MEINE MAPPEN" PASST IN DIE HUELLE — 16.09.2026,
     Betreiber am Foto (390 px): „Dann die Spalten berichtigen. horizontal
     verschieben okay, aber wenn es am handy ohne geht, wäre mir lieber."
     GEMESSEN bei echten 390 px (Emulation.setDeviceMetricsOverride): Ohne
     eigene Masse in dieser Lage galten nr 84 / stimme 240 / blaetter 130
     weiter — 454 px in einer 358er Huelle. `table-layout: fixed` gab der
     fuehrenden Spalte „Mappe" 0 px: ihr Kopftext lief in die Nr.-Zelle
     („NRPPE" auf dem Foto), der Buchname brach Wort fuer Wort, die Zeile
     wurde 140 px hoch. Die Liste schiebt hier nicht (min-width 0 darueber),
     also muss sie passen: nr 44 wie mappenbuecher, blaetter 64 (eine Zahl
     unter ihrem Kopf). 523_meine_mappen.php haelt die Summe unter der
     Huelle; 532 kann das nicht, weil es unterhalb 1120 keine Bezugsbreite
     kennt.

     DIE SPALTE „STIMME" FAELLT HIER — 16.09.2026 (abends), Betreiberliste
     Zeile 4: „Mappe-Name am Telefon (Umbruch, doppelte Stimme)". HIER STAND
     `th[data-spalte="stimme"] { width: 104px; }` mit dem Vermerk „(der Chip
     bricht im Namen um)": Gemessen bei echten 390 px brach der Chip
     „1. Flügelhorn in B" in der 104er-Zelle in DREI Zeilen („1." /
     „Flügelhorn" / „in B", 58 px hoch), und daneben stand dieselbe Stimme
     schon im Namen „Marschbuch 1 – 1. Flügelhorn in B" — zweimal in einer
     Zeile, einmal davon zerbrochen. Die Stimme steht im Namen (330: „mit der
     Stimme im Namen"), der Chip ist dieselbe Beschriftung ueber den Katalog
     aufgeloest; unter 700 px faellt die Spalte wie Komponist/Notiz bei
     `programm` und drei Spalten bei `mappenbuecher` darunter — Kopf UND
     Zelle, sonst bleibt eine leere Kolonne. Ein `nowrap` am Chip liefe bei
     104 px in die Nachbarspalte, ein breiteres Mass naehme dem Namen die
     120 px, unter denen er dreizeilig wird. Rest fuer „Mappe": 250 px statt
     146 — „Marschbuch 1 – 1. Flügelhorn in B" bricht damit hoechstens am
     Gedankenstrich (`.buchname-stimme`). Was am Telefon damit fehlt, benannt:
     „keine erkannt" bei einer Beschriftung ohne Katalogstimme — eine Auskunft
     fuer den Notenwart, ab 700 px und in der Mappenpflege weiter da. */
  table.liste[data-liste="notenarchiv/meinemappen"] th[data-spalte="nr"] { width: 44px; }
  table.liste[data-liste="notenarchiv/meinemappen"] th[data-spalte="blaetter"] { width: 64px; }
  table.liste[data-liste="notenarchiv/meinemappen"] th[data-spalte="stimme"],
  table.liste[data-liste="notenarchiv/meinemappen"] td[data-titel="Stimme"] { display: none; }
  table.liste[data-liste="notenarchiv/programm"] th[data-spalte="komponist"],
  table.liste[data-liste="notenarchiv/programm"] td[data-titel="Komponist"],
  table.liste[data-liste="notenarchiv/programm"] th[data-spalte="notiz"],
  table.liste[data-liste="notenarchiv/programm"] td[data-titel="Notiz"] { display: none; }
  table.liste[data-liste="notenarchiv/programm"] td[data-titel="Titel"] .nebensache {
    display: block;
    line-height: 1.3;
  }
  table.liste[data-liste="notenarchiv/mappenbuecher"] th[data-spalte="an"],
  table.liste[data-liste="notenarchiv/mappenbuecher"] td[data-titel="Ausgegeben an"],
  table.liste[data-liste="notenarchiv/mappenbuecher"] th[data-spalte="bemerkung"],
  table.liste[data-liste="notenarchiv/mappenbuecher"] td[data-titel="Bemerkung"],
  table.liste[data-liste="notenarchiv/mappenbuecher"] th[data-spalte="konto"],
  table.liste[data-liste="notenarchiv/mappenbuecher"] td[data-titel="Konto"] { display: none; }
  table.liste[data-liste="notenarchiv/mappenbuecher"] .mappenbuch-an-schmal {
    display: block;
    margin-top: 4px;
  }
  table.liste[data-liste="notenarchiv/mappeninhalt"] th[data-spalte="komponist"],
  table.liste[data-liste="notenarchiv/mappeninhalt"] td[data-titel="Komponist"],
  table.liste[data-liste="notenarchiv/mappeninhalt"] th[data-spalte="ausgabe"],
  table.liste[data-liste="notenarchiv/mappeninhalt"] td[data-titel="Ausgabe"],
  table.liste[data-liste="notenarchiv/mappeninhalt"] th[data-spalte="art"],
  table.liste[data-liste="notenarchiv/mappeninhalt"] td[data-titel="Art"],
  table.liste[data-liste="notenarchiv/mappeninhalt"] th[data-spalte="notiz"],
  table.liste[data-liste="notenarchiv/mappeninhalt"] td[data-titel="Notiz"],
  table.liste[data-liste="notenarchiv/mappeninhalt"] th[data-spalte="seit"],
  table.liste[data-liste="notenarchiv/mappeninhalt"] td[data-titel="seit"] { display: none; }
  table.liste[data-liste="notenarchiv/programm"] th[data-spalte="pos"] { width: 44px; }
  table.liste[data-liste="notenarchiv/programm"] th[data-spalte="noten"] { width: 90px; }
  table.liste[data-liste="notenarchiv/mappenbuecher"] th[data-spalte="nr"] { width: 44px; }
  table.liste[data-liste="notenarchiv/mappeninhalt"] th[data-spalte="nr"] { width: 44px; }
}

/* ===========================================================================
   JUSTAGE 3 — ENTSCHEIDUNG 1: DIE DREI NACHGETRAGENEN LISTEN BEKOMMEN MASSE
   ===========================================================================
   docs/gestaltung/lieferungen/justage-2026-09-12-drei/AUFTRAG-KERN.md und
   nachjustage.css derselben Lieferung, Anker `3e2e4e9`. Die Werte sind
   uebernommen und nicht gerechnet.

   WAS SIE ABLOESEN, gemessen am Bild vor dem Bau (Fernsteuerungsprotokoll,
   echte Breiten, gelb/notenarchiv-mappe.html und
   gelb/notenarchiv-meinemappe-programme.html):

     mappenverlauf   1280: 246/246/246/246   1120: 206/206/206/206
     meineprogramme  1280: 193/193/193/193/193

   Das ist die Gleichverteilung, die `table.liste[data-liste]` mit
   `table-layout: fixed` erzeugt, sobald eine Kennung gesetzt ist und kein
   Mass danebensteht. Sie widerspricht dem Soll („fuehrende Spalte waechst",
   BAUTEILE.md, Kolonne): Bei 246/246/246/246 waechst keine, und ein Datum
   bekommt so viel Raum wie ein Name.

   UND HIER STEHEN DIE MASSE IN BEIDEN LAGEN — UNTER UND UEBER 1120 px. DAS IST
   DIE AUSNAHME VON DER REGEL EINEN ABSCHNITT WEITER OBEN, UND SIE IST
   AUSDRUECKLICH BEAUFTRAGT: „Diese Masse stehen in beiden Lagen (unter und
   ueber 1120), weil `table-layout: fixed` sonst gleichverteilt."

   DER UNTERSCHIED ZUR REGEL VON GESTERN IST NICHT DIE LAGE, SONDERN DIE
   EIGENSCHAFT, und daran haengt alles: Jene Regel handelt von `min-width` AN
   DER TABELLE. Eine solche Zeile hat die Spezifitaet (0,2,1) und schlaegt das
   globale `@media (min-width: 1120px) { table.liste { width: 100%;
   min-width: 0 } }` (0,1,1) — sie bringt oberhalb 1120 die Kolonne und den
   waagrechten Balken zurueck. HIER STEHT KEINE `min-width` OBERHALB 1120,
   sondern `width` AN DER KOPFZELLE; das globale Mass der Tabelle bleibt
   unberuehrt. Die einzige `min-width` dieses Abschnitts (meineprogramme, 700)
   steht wie jede andere allein im 1119er Block.

   `tests/faelle/532_listenkennung.php` haelt beides auseinander. SEINE SECHSTE
   REGEL PRUEFT DIE ANWESENHEIT IN BEIDEN LAGEN UND NICHT DIE GLEICHHEIT DER
   WERTE: Eine Kennung, die in einer Lage Spaltenmasse traegt, muss in der
   anderen welche tragen — sonst verteilt `table-layout: fixed` dort gleich,
   und ein Datum bekommt so viel Raum wie ein Name. Mehr sagt sie nicht.

   WER DARAUS EINE GLEICHHEITSREGEL MACHT, MACHT ENTSCHEIDUNG 2 ROT.
   `notenarchiv/mappeninhalt` fuehrt in den zwei Lagen MIT ABSICHT
   verschiedene Werte (770 ab 1120, 1076 darunter, Abschnitt weiter unten).
   Die Falldatei warnt in ihrem eigenen Kommentar zur sechsten Regel genau
   davor.

   BERICHTIGT AM 12.09.2026 (abends), UND DER ALTE WORTLAUT STEHT DANEBEN,
   WEIL ER IN DIE FALLE FUEHRTE: Hier stand „prueft seit heute zusaetzlich,
   dass die zwei Lagen DIESELBEN Werte fuehren — eine Doppelung, die
   auseinanderlaufen kann, ist sonst genau die Fehlerklasse dieses
   Projekts." Das war nicht bloss falsch. Wer den Satz las, hielt die
   Gleichheit fuer bewacht; wer ihn fuer eine Luecke hielt und sie
   „schloss", machte Entscheidung 2 rot. Gefunden hat es `pruefung-vor-pr`,
   nicht die Kette.

   KEIN `min-width` BEI DREI UND VIER SPALTEN — Designs Wortlaut: „Sie passen
   in jede Breite, auch in 390." Nur `meineprogramme` traegt eines, und es ist
   700 und nicht die Modulzahl 1000; das ist die im Block darueber verlangte
   Abweichung mit Vermerk, und der Vermerk ist dieser Satz.

   WAS AN DESIGNS BEGRUENDUNG AM BILD NICHT TRAEGT, und es ist gemessen und
   nicht vermutet: Diese Listen STAPELN bei 390 px NICHT — die vier Spalten
   des Verlaufs stehen dort nebeneinander (gemessen: 94/94/94/94 in einer
   375er Huelle, `matchMedia("(max-width:449px)")` greift). Mit diesen Massen
   bleiben `von` 110, `bis` 110 und `Ausgang` 140 auch dort stehen, und die
   fuehrende Spalte „Verliehen an" bekommt den Rest. DER BEFUND IST GEMELDET
   UND NICHT STILL GEBAUT; die Werte sind Designs, die Messung steht im
   Bericht vom 12.09.2026. */
@media (max-width: 1119px) {
  table.liste[data-liste="notenarchiv/mappenverlauf"] th[data-spalte="von"],
  table.liste[data-liste="notenarchiv/mappenverlauf"] th[data-spalte="bis"] { width: 110px; }
  table.liste[data-liste="notenarchiv/mappenverlauf"] th[data-spalte="ausgang"] { width: 140px; }

  table.liste[data-liste="notenarchiv/meineprogramme"] { min-width: 700px; }
  table.liste[data-liste="notenarchiv/meineprogramme"] th[data-spalte="datum"] { width: 130px; }
  table.liste[data-liste="notenarchiv/meineprogramme"] th[data-spalte="anlass"] { width: 220px; }
  table.liste[data-liste="notenarchiv/meineprogramme"] th[data-spalte="stand"] { width: 130px; }
  table.liste[data-liste="notenarchiv/meineprogramme"] th[data-spalte="stuecke"] { width: 90px; }

  table.liste[data-liste="notenarchiv/allemappen"] th[data-spalte="art"] { width: 140px; }
  table.liste[data-liste="notenarchiv/allemappen"] th[data-spalte="blaetter"] { width: 110px; }
}
@media (min-width: 1120px) {
  table.liste[data-liste="notenarchiv/mappenverlauf"] th[data-spalte="von"],
  table.liste[data-liste="notenarchiv/mappenverlauf"] th[data-spalte="bis"] { width: 110px; }
  table.liste[data-liste="notenarchiv/mappenverlauf"] th[data-spalte="ausgang"] { width: 140px; }

  table.liste[data-liste="notenarchiv/meineprogramme"] th[data-spalte="datum"] { width: 130px; }
  table.liste[data-liste="notenarchiv/meineprogramme"] th[data-spalte="anlass"] { width: 220px; }
  table.liste[data-liste="notenarchiv/meineprogramme"] th[data-spalte="stand"] { width: 130px; }
  table.liste[data-liste="notenarchiv/meineprogramme"] th[data-spalte="stuecke"] { width: 90px; }

  table.liste[data-liste="notenarchiv/allemappen"] th[data-spalte="art"] { width: 140px; }
  table.liste[data-liste="notenarchiv/allemappen"] th[data-spalte="blaetter"] { width: 110px; }
}

/* ===========================================================================
   JUSTAGE 3 — ENTSCHEIDUNG 2: `mappeninhalt` BEKOMMT OBERHALB 1120 SCHMALERE
   MASSE
   ===========================================================================
   DER BEFUND, den dieser Block aufloest, stand seit dem 12.09.2026 in der
   Rueckmeldung an Design und ist hier VOR DEM BAU noch einmal am Bild
   gemessen worden (Fernsteuerungsprotokoll, echte 1280 px):

     mappeninhalt   Tabelle 1076 in einer 951er Huelle,  titel: 0 px

   DAS IST DER ZUSTAND VOR DIESEM BLOCK UND NICHT DER HEUTIGE. Was heute
   dasteht, misst der Abschnitt „DREI ZAHLEN" weiter unten.

   Die acht festen Breiten summierten 1076 (64+180+160+110+180+110+160+112);
   `table-layout: fixed` nimmt sie woertlich und laesst der fuehrenden Spalte
   NICHTS — also genau der, die laut Soll wachsen soll.

   DESIGNS ENTSCHEIDUNG IST „SCHMALER", und die zwei naheliegenden Auswege
   sind im Auftrag ausdruecklich ausgeschlossen:
     SCHIEBEN NICHT — „jede Tabelle steht fest auf 100 %, kein waagrechter
     Balken" (BRUCHKANTEN.md, als Anordnung des Betreibers gekennzeichnet).
     EINE SPALTE WENIGER NICHT — `mappeninhalt` hat kein `listensicht()` und
     keinen Katalog; eine Spalte weniger hiesse, sie zu loeschen.

   DREI ZAHLEN STEHEN IN DIESEM ABSCHNITT ZU DERSELBEN FRAGE — 966, 951 UND
   791 —, UND JEDE BEANTWORTET EINE ANDERE. Wer sie verwechselt, haelt die
   guenstigste fuer den Preis. Die acht festen Breiten summieren 770
   (44+120+112+74+116+80+112+112), `titel` bekommt den Rest:

     966  DIE GEMESSENE HUELLE BEI 1280 px SICHTFENSTER — und zugleich die
          Zahl, auf die der Auftrag rechnet. Designs Rechnung der Justage 3
          im Wortlaut: „Gerechnet auf 966: acht feste = 770, `titel` = 196".
          DIESER WORTLAUT STEHT IN — Quelle richtiggestellt am 12.09.2026 —
      docs/gestaltung/lieferungen/justage-2026-09-12-drei/nachjustage.css:73
          und NICHT in AUFTRAG-KERN.md; die sagt dieselbe Sache anders
          („Summe 770 → titel 196", dort Zeile 63). Eine falsche Ortsangabe
          sieht immer plausibel aus, sie nennt eine Datei, die es gibt
          (.claude/rules/10-immer.md). `tests/faelle/532_listenkennung.php`
          nimmt genau diese Zahl als Bezugsbreite. WER SIE AENDERT, AENDERT
          EINE ZAHL DES AUFTRAGS.
     951  DIESELBE HUELLE, WENN EIN SENKRECHTER BALKEN 15 px DES FENSTERS
          NIMMT: Fenster 1280, Sichtfenster 1265, Huelle 951,
          `titel` = 951 - 770 = 181. Es ist keine andere Karte und keine
          andere Liste — es ist dieselbe Huelle auf einer Seite, die scrollt.
          Das ist die Zahl, die oben im Befund steht — dort noch mit den
          alten 1076, also mit `titel` auf 0.
     791  DIESELBE HUELLE AN DER SCHWELLE, AB DER DIESER BLOCK UEBERHAUPT
          GILT (Fenster 1120, mit Balken 1105 Sichtfenster).
          `titel` = 791 - 770 = 21. DAS IST DER SCHLECHTESTE
          FALL DIESER REGEL, und deshalb ist es der Preis und nicht die 951.

   GEMESSEN AM 12.09.2026 (abends) ueber das Fernsteuerungsprotokoll an
   vorschau/gelb/notenarchiv-mappe.html, echte Fensterbreiten — der Weg
   gehoert dazu, eine Zahl ohne ihn ist nicht eindeutig
   (.claude/rules/50-gestaltung.md):

     Fenster   1120   1200   1280   ab 1440
     Huelle     791    871    951      1026   (die Karte deckelt bei 1026)
     titel       21    101    181       256

   DIESE TABELLE IST FENSTERBREITE MIT KLASSISCHEM BALKEN, und das fehlte ihr.
   Nachgemessen am 12.09.2026 (nachts) an derselben Seite, zweimal gefahren —
   einmal mit verstecktem, einmal mit klassischem Balken:

     Fenster        1120   1200   1280   ab 1440
     ohne Balken     806    886    966      1026   (Sichtfenster = Fenster)
     mit  Balken     791    871    951      1026   (Sichtfenster - 15 px)

   Jede Zahl der oberen Tabelle ist die untere bei einem um 15 px schmaleren
   Sichtfenster; die Huelle ist Sichtfenster - 314, bis die Karte bei 1026
   deckelt. BEIDE REIHEN SIND RICHTIG UND BEANTWORTEN VERSCHIEDENE FRAGEN.

   BERICHTIGT AM 12.09.2026 (nachts) — UND SIE BERICHTIGT EINE BERICHTIGUNG.
   AN DIESER STELLE STAND NACHEINANDER ZWEIERLEI, BEIDES ZU WEIT:

     erst  „966 WORAUF DER AUFTRAG RECHNET, keine gemessene Huelle."
     dann  „966 ist ueberhaupt keine gemessene Huelle" (Lead, 12.09.2026)

   GEMESSEN IST: 966 IST DIE HUELLE DIESER LISTE. Nicht bloss eine im Bestand
   verbreitete Breite, sondern die Huelle von `notenarchiv/mappeninhalt` selbst,
   mit `titel` auf genau den 196 px, die Design ausgerechnet hat. Die 951 ist
   DIESELBE Huelle, 15 px schmaler, weil der senkrechte Balken einer scrollenden
   Seite diese 15 px aus dem Fenster nimmt. DER UNTERSCHIED IST NICHT DIE LISTE
   UND NICHT DIE KARTE, SONDERN DER BALKEN.

   DER WEG GEHOERT DAZU, sonst ist keine der beiden Zahlen eindeutig
   (.claude/rules/50-gestaltung.md): Fernsteuerungsprotokoll
   (`Emulation.setDeviceMetricsOverride`), Vorschau ueber http (eigener
   `php -S`, Log geprueft, ausgelieferte Groesse gegen die Platte gehalten, zwei
   Seiten verschieden gross — also nicht ein fremder Server), ueber ALLE 79
   Seiten in `vorschau/gelb/` nach `rm -rf vorschau && php tools/vorschau.php`,
   92 Huellen, jede ein `.listenlauf`. Die Menge ist abgeleitet und nicht
   aufgezaehlt:

     Huelle in einer `.karte` MIT 16-px-Polster      34   966 · mit Balken 951
     Huelle in einer Karte OHNE Polster oder ganz    55   998 · mit Balken 983
       ohne Karte (`karte-ausgaben`, `karte-stimmen`,
       `karte-stueck`, `karte klapp`, `vereinsbuch-karte`)
     `export`                                         1   457 in einer 489er Karte
     `konto`, zwei verdeckte Tabellen                 2   0

   ES GIBT OBERHALB 1120 px ALSO GENAU ZWEI TRAGENDE HUELLENBREITEN UND NICHT
   VIER: 966 und 998, dazu die drei Sonderfaelle der Tabelle (`export` und die
   zwei verdeckten Tabellen auf `konto`). Ob eine Huelle als 951 oder 983
   erscheint, ist eine Eigenschaft DER SEITE (scrollt sie?) und DES BROWSERS
   (nimmt sein Balken Platz?) und keine der Liste. WELCHE SORTE BALKEN DER
   BROWSER EINES MITGLIEDS FUEHRT, IST HIER NICHT GEMESSEN UND STEHT DESHALB
   ALS BEDINGUNG DA UND NICHT ALS AUSSAGE: gemessen ist der Mechanismus — 15 px
   weniger Sichtfenster sind 15 px weniger Huelle —, nicht sein Eintreten.
   Im Lauf mit klassischem
   Balken verteilten sich dieselben 92 Huellen auf 983x31, 998x24, 951x23 und
   966x11 — die Familiensummen 55 und 34 bleiben.

   UND EINE AELTERE ZAEHLUNG NENNT „80 Vorschauseiten, 93 Huellen": Gemessen
   sind nach frischem Bau 79 Seiten und 92 Huellen. Nachgesehen in dem Baum, in
   dem jene Zaehlung entstand: Die 80. Seite heisst
   `notenarchiv-stimmen-dateien.html` und traegt den 11.09.2026, waehrend die
   uebrigen 79 den 12.09.2026 tragen — `php tools/vorschau.php` erzeugt sie
   nicht mehr, und `vorschau/` raeumt nichts weg. IHRE Huelle ist
   die vierte Zeile jener Ueberlauf-Liste weiter oben („ohne Kennung, dateien,
   998 > 966"). DIESES BLATT WARNT SELBST DAVOR — weiter oben steht „`vorschau/`
   wird nicht ausgeraeumt, und eine alte Datei sieht aus wie ein Befund". Es ist
   wieder passiert, und zwar an der Messung, die diesen Absatz ausgeloest hat.

   WARUM NUR OBERHALB 1120 UND WARUM DIE ALTEN WERTE STEHEN BLEIBEN: Unterhalb
   1120 traegt die Liste `min-width: 1250px` (Block darueber, unveraendert) —
   dort schiebt sie ohnehin, und die alten, breiteren Werte haben in 1250 px
   Platz; gemessen bei echten 390 px steht `titel` dort auf 174 px und nicht
   auf 0 (1250 - 1076).

   DIESE BEGRUENDUNG RUHT AUF EINEM ZUSTAND, UND SEIT DEM 12.09.2026 (abends)
   HAELT IHN EINE ZUSICHERUNG: Faellt jene `min-width: 1250px` weg oder sinkt
   sie unter 1076, wird `tests/faelle/532_listenkennung.php` rot („Wer
   unterhalb 1120 px breiter baut als oberhalb erlaubt, hat den Platz
   zugesagt"). Vorher haette sie lautlos gebrochen: Die Regel ueber die
   Spaltenmasse sieht nur die obere Lage, die ueber die zwei Lagen nur die
   Anwesenheit. Die alten Zeilen stehen deshalb weiter oben in diesem Abschnitt
   ausserhalb jeder Query und gelten unterhalb 1120 fort; dieser Block
   ueberschreibt sie ab 1120, weil er bei gleicher Spezifitaet (0,3,2) SPAETER
   im Blatt steht. WER IHN NACH OBEN SCHIEBT, MACHT IHN WIRKUNGSLOS — eine
   Media Query erhoeht die Spezifitaet nicht.

   DER PREIS STEHT DANEBEN, und Design nennt ihn selbst: Bei 1280 ist diese
   Liste eng. Neun Spalten in 966 px sind eng, egal wie man sie teilt.
   GEMESSEN IST ER ABER NICHT BEI 1280, SONDERN AN DER SCHWELLE: bei 1280
   bleiben `titel` 181 px, bei 1120 noch 21 (Fensterbreiten mit Balken, die
   zweite Reihe oben). Designs Satz nennt den milderen
   Fall — nicht falsch, aber nicht der teuerste. Designs Empfehlung, `art`
   unter `ausgabe` zu legen, IST NICHT GEBAUT — der Betreiber hat sie am
   12.09.2026 ausdruecklich ausgeschlossen. SEIN WORTLAUT LIEGT AB — nachgetragen
   am 12.09.2026, weil ein Verweis ohne seine Ablage nur halb traegt — in
   docs/gestaltung/lieferungen/justage-2026-09-12-drei/ENTSCHEID-BETREIBER.md */
@media (min-width: 1120px) {
  table.liste[data-liste="notenarchiv/mappeninhalt"] th[data-spalte="nr"] { width: 44px; }
  table.liste[data-liste="notenarchiv/mappeninhalt"] th[data-spalte="komponist"] { width: 120px; }
  table.liste[data-liste="notenarchiv/mappeninhalt"] th[data-spalte="ausgabe"] { width: 112px; }
  table.liste[data-liste="notenarchiv/mappeninhalt"] th[data-spalte="art"] { width: 74px; }
  table.liste[data-liste="notenarchiv/mappeninhalt"] th[data-spalte="notiz"] { width: 116px; }
  table.liste[data-liste="notenarchiv/mappeninhalt"] th[data-spalte="seit"] { width: 80px; }
  table.liste[data-liste="notenarchiv/mappeninhalt"] th[data-spalte="recht"] { width: 112px; }
  table.liste[data-liste="notenarchiv/mappeninhalt"] th.spalte-aktionen { width: 112px; }
}




/* ---------------------------------------------------------------------------
   DAS BLATT — der Vereinsbuch-Export (ADR-0064, kern/seiten/vereinsbuchexport.php)

   WAS ANGEORDNET IST, im Wortlaut des Betreibers vom 03.09.2026: "mit titel des
   vereins und em wappen im kopf, einer leichten tabellenformatierung, dem
   ausgabedatum und namen des ausgebenden". Was hier steht, ist genau das und
   nichts darueber hinaus — kein neuer Farbton, kein neues Mass, kein zweiter
   Satz. Jede Farbe und jeder Abstand kommt aus dem Tokensatz oben.

   WARUM DAS UEBERHAUPT HIER STEHT UND NICHT BEI DESIGN (ADR-0049): Die
   Anordnung liegt schriftlich im Repository (ADR-0064), und ohne diese Regeln
   gaebe es das Blatt nicht. Was NICHT hier steht, ist eine Auslegung: Ob das
   Blatt eine Kopfzeile je Druckseite bekommt, ob die Tabelle Zebrastreifen
   traegt, wie breit das Wappen im Ausdruck sein soll — das ist Design und
   ausdruecklich nicht gebaut.

   DIE AUSRICHTUNG STEHT NICHT HIER. `@page` gilt fuer das ganze Dokument;
   das Querformat liegt in oeffentlich/druck-quer.css und wird von der Seite
   nach der Spaltenzahl eingebunden. Ein `@page` an dieser Stelle aenderte den
   Ausdruck JEDER Seite des Portals.
   --------------------------------------------------------------------------- */

.blatt-kopf {
  display: flex;
  align-items: center;
  gap: var(--abstand);
  padding-bottom: 12px;
  border-bottom: 2px solid var(--linie);
}
/* Das Wappen steht neben dem Namen und nicht ueber ihm: dieselbe Anordnung wie
   im Kopfband, damit ein Ausdruck neben dem Schirm wiedererkennbar ist. */
.blatt-wappen {
  width: 48px;
  height: 48px;
  object-fit: contain;
  flex: 0 0 auto;
}
.blatt-kopf-text { flex: 1 1 auto; }
.blatt-kopf-text h1 { margin: 0; }
.blatt-untertitel {
  margin: 2px 0 0;
  font-size: var(--grad-klein);
  color: var(--tinte-leise);
}
/* Ausgabedatum und Name des Ausgebenden. Rechts, klein, still — sie sind die
   Herkunft des Blattes und nicht sein Gegenstand. */
.blatt-herkunft {
  flex: 0 0 auto;
  text-align: right;
  font-size: var(--grad-klein);
  color: var(--tinte-leise);
}
.blatt-herkunft p { margin: 0; }
/* Der Umfang. Er steht auf dem Papier, weil eine gefilterte Liste sonst von
   einer vollstaendigen nicht zu unterscheiden ist. */
.blatt-umfang {
  margin: 12px 0;
  font-size: var(--grad-klein);
  color: var(--tinte-leise);
}
.blatt-fuss {
  margin: 16px 0 0;
  padding-top: 8px;
  border-top: 1px solid var(--linie);
  font-size: var(--grad-klein);
  color: var(--tinte-leise);
}
/* "Leichte Tabellenformatierung" (Betreiber, 03.09.2026): engere Zeilen als am
   Schirm und eine Linie je Zeile. Mehr nicht — eine Rahmenlinie um jede Zelle
   waere ein Formular und keine Liste. */
.blatt-tabelle th,
.blatt-tabelle td {
  padding: 5px 8px;
  font-size: var(--grad-klein);
}
/* Die Zeile leuchtet auf dem Blatt nicht auf: Ein Ausdruck hat keinen Zeiger,
   und am Schirm ist dieses Blatt eine Vorschau des Papiers. */
.blatt-tabelle tbody tr:hover td,
.blatt-tabelle tbody tr:active td { background: transparent; }

@media print {
  /* WAS NICHT AUF PAPIER GEHOERT: Band, Navigation in allen drei Fassungen,
     Fuss und jeder Weg. Ein gedruckter Menuepunkt ist ein toter Verweis.

     `.nicht-drucken` IST DER ALLGEMEINE GRIFF und nicht fuer diese eine Seite
     gemacht: Jede Seite, die etwas vom Ausdruck ausnehmen will, haengt die
     Klasse daran. */
  .kopf,
  .fuss,
  .seitenleiste,
  .modulzeile,
  .fussleiste,
  .nicht-drucken { display: none; }

  /* Das Blatt fuellt die Seite. `.inhalt` traegt am Schirm Spaltenbreite und
     Innenabstand; auf Papier setzt der Rand von @page beides. */
  .inhalt {
    max-width: none;
    margin: 0;
    padding: 0;
  }
  .blatt-tabelle { width: 100%; }
  /* Eine Zeile wird nicht in der Mitte umgebrochen, und der Tabellenkopf
     wiederholt sich auf jeder Seite — beides gehoert zu "leichte
     Tabellenformatierung": Ein Blatt zwei, dessen Spalten niemand mehr
     benennen kann, ist unbrauchbar. */
  .blatt-tabelle tr { break-inside: avoid; }
  .blatt-tabelle thead { display: table-header-group; }
}

/* ===========================================================================
   DIE STUECKSEITE DES NOTENARCHIVS NACH DER LIEFERUNG VOM 08./09.09.2026
   (ADR-0078 mit Nachtrag 09.09. mittags; Scheibe C) — Rueckverweis, Feldliste
   als Raster, eine Box, Kindzeile, Klappkarte, Karte „Digitale Stimmen".
   ---------------------------------------------------------------------------
   GEMESSEN an farbsatz-gelb/notenarchiv-stueck.html bei 390 (ueber das
   Fernsteuerungsprotokoll, Emulation.setDeviceMetricsOverride) und 1280 px;
   die Zahlen stehen an jeder Regel. Die Lieferung haengt alles an den Schaltern
   `.na2-stueck`/`.lp`; hier haengen die Grundregeln an den Klassen der Sache
   (`.angabenliste`, `.karte-stueck`, `.karte-ausgaben`, `.karte-stimmen`,
   `.ausgabe-kind`, `.karte.klapp`) — wie in Scheibe B1.

   KEINE VORRANGMARKE. Die fuenf der Lieferung (stil.css Z. 7594, 7676, 7683,
   7686 ×2) heben Bestandsregeln ihres eigenen Blatts auf (min-width 1000 an
   `.na2 table.liste`, Feldbreiten im Fenster „Zerlegen"), die der Kern nicht
   hat. 060_bedienkonzept.php misst den Rohtext, auch diesen Satz.
   =========================================================================== */

/* ---------------------------------------------------------------------------
   1. DER RUECKVERWEIS (BAUTEILE.md „Rueckverweis"): 15 px, bricht nicht
   („Zurueck zum / Bestand" war zwei Zeilen, Lieferung Z. 7413), Zeigen in der
   Vereinsfarbe. inline-flex / center / gap 6 / min-height 44 stehen schon an
   `.inhalt .zurueck a` (Auftrag App-Eindruck, Abschnitt 8) — gemessen an der
   Lieferung: 44 hoch, 15 px, nowrap. Die Regel gilt portalweit, wie das Bauteil.
   --------------------------------------------------------------------------- */
.inhalt .zurueck a { font-size: 15px; white-space: nowrap; }
.inhalt .zurueck a:hover .zurueck-wort,
.inhalt .zurueck a:focus-visible .zurueck-wort { border-bottom-color: var(--verein); }

/* ---------------------------------------------------------------------------
   2. DIE FELDLISTE IST IN JEDER BREITE EINE BOX AUS PAAREN — BAUTEILE.md
   „Feldliste (.liste.angabenliste)": „Eine Box, ein Stift — in jeder Breite
   (heute nur unter 700 im Kern)." Lieferung stil.css Z. 7371–7389 und
   7527–7530; Betreiber am Bild, 08.09.2026: „das ist sehr unuebersichtlich und
   viel zu auseinandergerissen" (390 px Karte fuer vier Angaben bei 1280).

   DAS MARKUP IST UNVERAENDERT: dieselbe <table class="liste angabenliste">,
   dieselben Zellen, derselbe Stift je Zeile im Quelltext. `tbody` ist ein
   Raster `repeat(auto-fit, minmax(150px, 1fr))` — gemessen: 5 Spuren bei
   1280, 2 bei 390 —, Abstaende 12/24, Innenabstand 12; `thead` aus; je Paar
   Aufschrift (12 px 600 Versalien --tinte-leise) ueber Wert (16 px), die
   Nebensache 12 px darunter, ein Verweis („im Bestand suchen") als eigene
   Zeile 13 px, der nicht bricht (in einer 200-px-Spur brach „Marsch im Bestand
   suchen" mitten im Verweis um, Lieferung Z. 7411).

   DIE REGEL GILT PORTALWEIT, weil die Angabenliste eine Bauform des Kerns ist
   (kern/seiten/erscheinung.php, konto.php, statuten.php, vereinskonto.php,
   notenarchiv/stueck.php — die Fundstellenliste steht beim 700er-Block, 549
   misst sie). GEMESSEN AM BILD IST ALLEIN DIE STUECKSEITE (Scheibe C); die
   uebrigen vier folgen der Regel und sind im Bericht als nicht gemessen
   genannt.

   DER STIFT: EINER, IN DER RECHTEN OBEREN ECKE DER BOX. Das ist der
   UNUNTERSCHEIDBARE Stift der ERSTEN Zeile — `[data-fenster-auf]` ohne
   `data-reiter`, `data-feld`, `href` —, absolut gesetzt; alle weiteren
   ununterscheidbaren fallen (die Regel, die das Stilblatt bis zum 09.09.2026
   nur unter 700 px hatte, jetzt in jeder Breite; Herleitung und Grenze im
   700er-Block, ADR-0074). Ein UNTERSCHEIDBARER Stift (erscheinung: je Zeile ein
   anderes Register; statuten, konto: je Zeile ein anderes Feld) bleibt bei
   seinem Paar stehen — die Lieferung blendet pauschal aus (`td.spalte-aktionen
   { display: none }`, Z. 7387), und genau das naehme den Weg zu „Farbe" und
   „Wappen" (GEBAUT.md, Feldliste). `:has()` traegt die Unterscheidung; der Kern
   nutzt es seit B1 (`.listenlauf:has(+ .filterzeile)`).

   DER ORT DES STIFTS IST DIE TABELLE (position: relative), nicht die Karte —
   so sitzt er in jeder Verschachtelung an der Box der Feldliste. Fuer die
   Stueckseite ergibt das, gemessen von der Aussenkante der Karte: 9 oben, 13
   rechts — dieselben Zahlen wie an der gelieferten Seite. DIE RECHNUNG IST
   EINE ANDERE, weil die Karte des Kerns KEINEN Rahmen traegt (gemessen am
   09.09.2026 ueber das Fernsteuerungsprotokoll, 1280 und 390: border 0, die
   Lieferung 1 px): Lieferung 1 (Rahmen) + 4 (Innenabstand) + 4 = 9 und
   4 + 8 + 1 = 13 (`top: 8px; right: 4px; padding: 0 8px` von der Karte aus,
   Z. 7475/7512); Kern 0 + 4 (Innenabstand der Karte) + 5 = 9 und 13 + 0 = 13.
   Mit `top: 4px; right: 12px` stand der Stift bei 8/12 — einen Pixel naeher
   an der Kante als im Bild, gemessen und berichtigt. BAUTEILE.md nennt
   „top 10; right 12" — die Prosa; das Bild misst 9/13, und das Bild gilt
   (ADR-0078, Punkt 4).

   UND DIE ERSTE ZEILE LAESST IHM PLATZ: unter 700 px `padding-right: 56px` an
   der ersten Zeile (Lieferung Z. 7513), ab 700 `padding-right: 68px` am ganzen
   Raster (Z. 7528) — nur, wo ein absoluter Stift da ist.
   --------------------------------------------------------------------------- */
.listenlauf:has(> .liste.angabenliste) { margin: 0; overflow: visible; }
.liste.angabenliste { display: block; position: relative; width: auto; min-width: 0; margin: 0; padding: 0; border: 0; border-radius: 0; background: transparent; }
.liste.angabenliste thead { display: none; }
.liste.angabenliste tbody { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 12px 24px; padding: 12px 12px 0; }
.liste.angabenliste tbody tr { display: block; height: auto; }
.liste.angabenliste tbody tr:hover td,
.liste.angabenliste tbody tr:active td { background: transparent; }
.liste.angabenliste td { display: block; width: auto; padding: 0; border: 0; }
.liste.angabenliste td[data-titel="Angabe"] { margin-bottom: 2px; font-size: 12px; font-weight: 600; letter-spacing: .06em; text-transform: uppercase; color: var(--tinte-leise); }
.liste.angabenliste td[data-titel="Stand"] { font-size: 16px; line-height: 1.3; }
.liste.angabenliste td[data-titel="Stand"] .nebensache { display: block; margin: 0; font-size: 12px; }
.liste.angabenliste td[data-titel="Stand"] a { display: block; width: max-content; margin: 2px 0 0; font-size: 13px; white-space: nowrap; }
.liste.angabenliste td.spalte-aktionen { width: auto; }
.liste.angabenliste td.spalte-aktionen:empty { display: none; }
/* Der eine Stift: absolut, oben rechts an der Box. `:has()` auf die Zelle, die
   einen ununterscheidbaren Stift TRAEGT — eine leere Zelle oder eine mit einem
   Register-Stift bleibt im Fluss. */
.liste.angabenliste tbody tr:first-child td.spalte-aktionen:has(> [data-fenster-auf]:not([data-reiter]):not([data-feld]):not([href])) { position: absolute; top: 5px; right: 13px; margin: 0; }
.liste.angabenliste:has(tbody tr:first-child td.spalte-aktionen > [data-fenster-auf]:not([data-reiter]):not([data-feld]):not([href])) tbody tr:first-child { padding-right: 56px; }
/* Alle weiteren ununterscheidbaren Stifte fallen — in jeder Breite (bis zum
   09.09.2026 nur unter 700 px; die Regel und ihr Grund stehen im 700er-Block,
   der Waehler ist derselbe). Und ihre ZELLE faellt mit, wenn sie sonst nichts
   traegt: Ein leerer Block im Paar ist im Bild nichts und in der Messung eine
   „sichtbare Stiftzelle" (gemessen: 3 statt 1). */
.liste.angabenliste tbody tr:not(:first-child)
  td.spalte-aktionen > [data-fenster-auf]:not([data-reiter]):not([data-feld]):not([href]) { display: none; }
.liste.angabenliste tbody tr:not(:first-child)
  td.spalte-aktionen:not(:has(> [data-reiter], > [data-feld], > [href])) { display: none; }
/* EIN UNTERSCHEIDBARER STIFT STEHT AM FUSS SEINES PAARS — abgeleitet, nicht
   gemessen: Die Lieferung zeigt keine Feldliste, in der jede Angabe ihr
   eigenes Fenster hat (Erscheinung: je Zeile ein Register; Statuten, Konto:
   je Zeile ein Feld). Dort blendet ihre Regel pauschal aus, und das naehme den
   Weg (ADR-0074). Hier bleibt der Stift bei seiner Angabe; damit er in einer
   Reihe von Paaren auf EINER Hoehe steht, ist das Paar eine Spalte und der
   Stift ihr letzter Posten. Das Bild dieser Seiten ist nicht gemessen und im
   Bericht als Ableitung genannt. */
.liste.angabenliste tbody tr { display: flex; flex-direction: column; }
.liste.angabenliste tbody tr td.spalte-aktionen:has(> [data-reiter], > [data-feld], > [href]) { margin-top: auto; padding-top: 8px; }
@media (min-width: 700px) {
  .liste.angabenliste:has(tbody tr:first-child td.spalte-aktionen > [data-fenster-auf]:not([data-reiter]):not([data-feld]):not([href])) tbody { padding-right: 68px; }
  .liste.angabenliste:has(tbody tr:first-child td.spalte-aktionen > [data-fenster-auf]:not([data-reiter]):not([data-feld]):not([href])) tbody tr:first-child { padding-right: 0; }
}

/* ---------------------------------------------------------------------------
   3. EINE BOX: STUECK UND AUSGABEN — Betreiber am Bild, 08.09.2026: „Boxen
   verschmelzen, keine Trennung, Ausgaben gehoeren zum Stueck"; „da wuerde der
   Titel jetzt ueber die Box und dazu der Button Ausgabe anlegen gehoeren. Der
   Stift dann in die weisse Box mit den Details und darunter die Tabelle wie
   im Modul! Also die erste Zeile anders und Ausgaben streichen."

   `.inhalt.zonen` ist eine Flex-Spalte mit `gap: var(--zonenabstand)` (14 px,
   unter 700 px 10). Die zweite Karte zieht sich um genau diesen Betrag nach
   oben — gemessen: Abstand 0, margin-top -14 / -10 —, die Radien treffen sich
   (10/10/0/0 und 0/0/10/10), eine Haarlinie bleibt als Trenner. Die
   Kartenueberschrift „Stammdaten" und der Hinweistext bleiben im Markup und
   fallen hier (BAUTEILE.md, Feldliste). Innenabstand der Stueckkarte 4/0/16
   (Lieferung Z. 7508).

   DER KOPF DER AUSGABENTABELLE TRAEGT --grund (Lieferung Z. 7526: „Im Modul ist
   der Spaltenkopf weiss — farbig ist dort die Leiste darueber. Hier gibt es
   keine Leiste; der Kopf nimmt das Band"), Zellen und Koepfe Innenabstand 8
   (Z. 7226–7228), Zeilen 60 wie die Liste des Bestands.
   --------------------------------------------------------------------------- */
.karte-stueck { position: relative; margin-bottom: 0; padding: 4px 0 16px; border-bottom: 0; border-radius: var(--radius-gross) var(--radius-gross) 0 0; }
.karte-stueck > h2,
.karte-stueck > .hinweistext { display: none; }
.karte-ausgaben { margin-top: calc(-1 * var(--zonenabstand)); padding: 0; border-top: 1px solid var(--linie); border-radius: 0 0 var(--radius-gross) var(--radius-gross); overflow: hidden; }
.karte-ausgaben > .leerhinweis { margin: 12px; }
.karte-ausgaben > .listenlauf { margin: 0; border: 0; }
.karte-ausgaben table.liste thead th { background: var(--grund); border-top: 0; padding-left: 8px; padding-right: 8px; }
.karte-ausgaben table.liste td { white-space: normal; padding-left: 8px; padding-right: 8px; }
.karte-ausgaben table.liste td.spalte-aktionen { white-space: nowrap; padding-right: 6px; }
.karte-ausgaben table.liste tbody tr { height: 60px; }
/* „Blaetter" ist ein Verweis auf die Gruppe der Stimmenkarte (Lieferung Z. 7597). */
.karte-ausgaben td[data-titel="Blätter"] a.blaetter { color: var(--tinte); font-weight: 600; text-decoration: none; border-bottom: 0; box-shadow: none; white-space: nowrap; }
.karte-ausgaben td[data-titel="Blätter"] a.blaetter:hover,
.karte-ausgaben td[data-titel="Blätter"] a.blaetter:focus-visible { text-decoration: underline; text-decoration-color: var(--verein); text-underline-offset: 3px; }
/* AB 1120 PX SCHIEBT KEINE KOLONNE (Betreiber, 08.09.2026: „in der Desktopversion
   keine horizontalen Scrollleisten"): fest auf 100 %, Aktionen 310 px
   (6 × 44 + 5 × 6 + 16: Stift · Mappe · Hochladen · Recherche · Katalog ·
   Abspielen — Mappe ist der sechste Knopf, 13.09.2026), Ausgabe 18 %, Art 9 %,
   Lagerort 10 %, Blaetter 9 %. Die gelieferte Seite mass 260 px fuer fuenf
   Knöpfe; der Upload an jeder Zeile und Mappe machen sechs. Darunter laeuft
   die Kolonne mit 1300 px fest in ihrer Huelle — Breite UND Raster, wie
   `.karte-stimmen` (Z. 8895–8898). Ohne `width` und `table-layout: fixed`
   fuellen die ersten drei Spalten das Sichtfenster, Stift und Lupe liegen
   rechts daneben, und nichts zeigt, dass sich die Tabelle schieben laesst. */
@media (min-width: 1120px) {
  .karte-ausgaben > .listenlauf { overflow: hidden; }
  .karte-ausgaben table.liste { min-width: 0; width: 100%; table-layout: fixed; }
  .karte-ausgaben table.liste thead th:nth-child(1) { width: 18%; }
  .karte-ausgaben table.liste thead th:nth-child(2) { width: 9%; }
  .karte-ausgaben table.liste thead th:nth-child(5) { width: 10%; }
  .karte-ausgaben table.liste thead th:nth-child(7) { width: 9%; }
  .karte-ausgaben table.liste thead th.spalte-aktionen { width: 310px; }
}
@media (max-width: 1119px) {
  .karte-ausgaben > .listenlauf { overflow-x: auto; overflow-y: hidden; }
  .karte-ausgaben table.liste { min-width: 1300px; width: 1300px; table-layout: fixed; }
}
/* ELTERN UND KIND (ADR-0070 §3; Betreiber, 08.09.2026: „Die Arten haben
   automatisch Abhaengigkeiten. Gedruckt zu digital, scan zu analog. Sind also
   Kinder davon. Das soll man auch sehen."): Die abgeleitete Ausgabe steht
   unter ihrer Quelle, eingerueckt (36), mit einem Verbindungswinkel vor dem
   Namen (left 16, 12 breit, halbe Zeilenhoehe, 1,5 px --linie-stark, Radius 4
   unten links) und dem Nebensatz 12 px; ihr Name traegt 500. Die Linie
   zwischen Vorlage und Kind entfaellt (Lieferung Z. 7527–7533). */
/* An `tr.ausgabe-kind` und der ERSTEN Zelle — nicht an `td[data-titel]`, denn
   ein `::before` mit Inhalt an einer Zelle mit data-titel ist fuer 060 die
   Aufschrift des alten Stapels (ADR-0078, Widerspruch 1); hier ist es der
   Winkel, und die erste Zelle ist die Titelzelle. Ein 1,5-px-Rahmen links ist
   keine Kante im Sinn von ADR-0030 (die beginnt bei 2 px, 060). */
tr.ausgabe-kind td:first-child { position: relative; padding-left: 36px; }
tr.ausgabe-kind td:first-child::before { content: ""; position: absolute; left: 16px; top: -2px; width: 12px; height: calc(50% + 2px); border-left: 1.5px solid var(--linie-stark); border-bottom: 1.5px solid var(--linie-stark); border-radius: 0 0 0 4px; }
tr.ausgabe-kind td:first-child .zeilentitel { font-weight: 500; color: var(--tinte); }
tr.ausgabe-kind td:first-child .nebensache { display: block; font-size: 12px; }
tr.ausgabe-kind td { border-top: 0; }
tr:has(+ tr.ausgabe-kind) td { border-bottom-color: transparent; }

/* ---------------------------------------------------------------------------
   4. DIE KLAPPKARTE — NEUER BAUSTEIN DES KERNS (ADR-0078, Nachtrag 09.09.
   mittags, Punkt 6). Betreiber: „die weiteren Infofelder darunter duerfen ruhig
   so zum Aufklappen sein, wie beim Vorgaenger. Das wuerde ich generell so
   handhaben." Designs Regel: nachgeordnete Auskuenfte auf einer Detailseite
   sind Klappkarten, zu.

   `<details class="karte klapp">`, der Oeffner ist die Ueberschrift: `summary`
   44 hoch (gemessen 44), Winkel 7/5 in --tinte-leise, gedreht wenn offen; das
   `h2` darin 11 px Versalien wie ein Spaltenkopf, `padding: 0` (BAUTEILE.md
   „Karte": Kartenueberschrift 11 px; Auftrag C, Punkt 12) — die gelieferte
   Seite misst 24 px, weil ihre Regel `.karte > h2` ein `summary > h2` nicht
   erreicht: ein Kaskadenrest wie Befund 5 des Nachtrags vom 09.09. (dort 26
   statt 22), und wie dort gilt die Regel, nicht der Rest. Die Zahl neben der
   Ueberschrift 13 px 400 --tinte-leise, 10 px Abstand (Lieferung Z. 7539).
   Gilt fuer jede Detailseite; gebaut zuerst an der Stueckseite.
   --------------------------------------------------------------------------- */
.karte.klapp { padding: 0; overflow: hidden; }
.karte.klapp > summary { list-style: none; cursor: pointer; display: flex; align-items: center; min-height: 44px; padding: 0 12px; }
.karte.klapp > summary::-webkit-details-marker { display: none; }
/* Der Winkel als beschnittene Flaeche und nicht als Rahmen-Dreieck (Lieferung
   Z. 7606: `border-left: 7px`): Ein linker Rahmen ab 2 px ist in diesem Portal
   die Verpflichtungskante und sonst nichts (060, ADR-0030) — dieselbe Form,
   7 breit und 10 hoch, in --tinte-leise. */
.karte.klapp > summary::before { content: ""; width: 7px; height: 10px; background: var(--tinte-leise); clip-path: polygon(0 0, 100% 50%, 0 100%); margin-right: 10px; transition: transform var(--dauer); }
.karte.klapp[open] > summary::before { transform: rotate(90deg); }
.karte.klapp > summary h2 { margin: 0; padding: 0; font-family: var(--schrift-text); font-size: 11px; font-weight: 600; letter-spacing: .06em; text-transform: uppercase; color: var(--tinte-leise); }
.karte.klapp > summary:hover { background: var(--grund-tief); }
.karte.klapp > summary:focus-visible { outline: 2px solid var(--verein); outline-offset: -2px; }
.karte.klapp[open] > summary { border-bottom: 1px solid var(--linie); }
.karte.klapp > .listenlauf { margin: 0; }
.karte.klapp > .leerhinweis { margin: 12px; }
/* UND EIN HINWEISTEXT IN EINER KLAPPKARTE BEKOMMT DENSELBEN ABSTAND —
   10.09.2026, abgeleitet aus der Zeile darueber und nicht aus einer neuen Zahl:
   Die Klappkarte traegt `padding: 0`, also setzt jedes freistehende Kind
   seinen Abstand selbst. Anlass ist die Klappkarte „Was an meinem Konto
   geschehen ist" (kern/seiten/konto.php), die erste im Kern; ohne diese Zeile
   klebte ihr Satz an Winkel und Kartenkante. */
.karte.klapp > .hinweistext { margin: 12px; }
.karte.klapp summary h2 .anzahl,
.karte-stimmen > h2 .anzahl { font-family: var(--schrift-text); font-size: 13px; font-weight: 400; letter-spacing: 0; text-transform: none; color: var(--tinte-leise); margin-left: 10px; }

/* ---------------------------------------------------------------------------
   5. DIE KARTE „DIGITALE STIMMEN" (Lieferung Z. 266–527, stil.css Z. 7564–7596,
   7632–7642, 7660–7662; BAUTEILE.md). Betreiber, 09.09.2026: „es fehlt noch
   der Button fuer die Ansicht (Auge) der Stimmen, und zwischen den digitalen
   Stimmen, also den Ausgaben, soll die Trennung etwas markanter sein."

   Eine Tabelle, ein Kopf; je Ausgabe ein `tbody#stimmen-N` mit GRUPPENZEILE
   (`tr.gruppe > th[colspan]`): 56 hoch (gemessen 56), --grund, Linien
   --linie-stark oben und unten, die Kante links 3 px in der Vereinsfarbe als
   `box-shadow: inset` (gemessen: rgb(136,115,0) 3px inset — dieselbe Kante, die
   in den Listen das Gewaehlte traegt; ADR-0078 Nachtrag: Punkt 1, gilt so), 20
   px Karte als Zwischenraum vor jeder weiteren Gruppe (13.09.2026, Betreiber:
   „die hellgrünen Spaltenüberschriften etwas deutlicher trennen" — 12 px
   `--grund` auf `--grund` war unsichtbar, sobald zwei Gruppen aneinanderliegen),
   die erste schliesst ohne Zwischenraum an den Kopf an. Blattzeile 52 (gemessen 53 mit Linie):
   Stimme 15 px 600, Datei als Verweis, der mit Auslassung kuerzt, Seiten /
   Groesse / hochgeladen tabellarisch; das Sammel-PDF (`tr.sammel`) getoent.
   Spalten ab 1120: 22 % · Rest · 72 · 90 · 150 · 212 px (gemessen 216 / 243 /
   72 / 90 / 150 / 212), fest auf 100 % — die Lieferung erzwingt hier
   `min-width: 0` mit Vorrangmarke gegen ihre Bestandsregel `min-width: 1000`,
   die der Kern nicht hat; darunter Kolonne 920 fest in der Huelle (gemessen 920 in
   388). Unter 700 steht der Knopf Hochladen vor dem Namen, die Gruppenzeile
   klebt links (Z. 7632–7642: „Hochladen stand bei x 415, Lauf endet bei 374").

   Der Abstand zwischen zwei Knoepfen ist 6 (Regel des Kerns an `.liste
   td.spalte-aktionen .handlung + .handlung`); die gelieferte Seite misst 8,8 —
   ein Wortzwischenraum ihres Blatts, Befund 4 des Nachtrags vom 08.09. (abends).
   --------------------------------------------------------------------------- */
.karte-stimmen { padding: 0; overflow: hidden; }
.karte-stimmen > h2 { margin: 0; padding: 14px 12px 10px; font-family: var(--schrift-text); font-size: 11px; font-weight: 600; letter-spacing: .06em; text-transform: uppercase; color: var(--tinte-leise); }
.karte-stimmen > .listenlauf { margin: 0; border: 0; }
.karte-stimmen table.liste thead th { background: var(--karte); border-top: 1px solid var(--linie); padding-left: 8px; padding-right: 8px; }
/* DIE MASSE STEHEN SEIT DEM 10.09.2026 OBEN an `.liste tr.gruppe th` — hier
   bleibt nur, was DIESE Karte dazu hat: die farbige Kante. ADR-0078, Nachtrag
   09.09.2026 mittags, Punkt 1 laesst sie fuer die Stimmenkarte zu; ADR-0030,
   Nachtrag 21.08.2026 laesst genau eine Sorte Karte eine farbige Kante tragen.
   Wer sie hier entfernt, entfernt eine entschiedene Ausnahme; wer sie nach oben
   schiebt, macht aus der Marke ein Dekor. */
.karte-stimmen tr.gruppe th { box-shadow: inset 3px 0 0 var(--verein); }
.karte-stimmen tbody + tbody tr.gruppe th {
  border-top: 20px solid var(--karte);
  box-shadow: inset 3px 0 0 var(--verein), inset 0 1px 0 var(--linie-stark);
}
.karte-stimmen tr.gruppe .gruppe-name { display: inline-flex; align-items: baseline; gap: 10px; flex-wrap: wrap; }
.karte-stimmen tr.gruppe .gruppe-name .nebensache { font-weight: 400; font-size: 13px; }
.karte-stimmen tr.gruppe .gruppe-aktionen { float: right; display: inline-flex; gap: 6px; margin: 3px 0 0 12px; }
.karte-stimmen table.liste tbody tr:not(.gruppe) { height: 52px; }
.karte-stimmen table.liste td { white-space: normal; padding-left: 8px; padding-right: 8px; }
.karte-stimmen table.liste td[data-titel="Stimme"] { padding-left: 12px; }
.karte-stimmen table.liste td[data-titel="Stimme"] .zeilentitel { font-size: 15px; font-weight: 600; }
.karte-stimmen table.liste td[data-titel="Stimme"] .nebensache { display: block; font-size: 12px; }
.karte-stimmen table.liste td[data-titel="Datei"] { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.karte-stimmen table.liste td[data-titel="Datei"] a.datei { color: var(--tinte); text-decoration: none; border-bottom: 0; box-shadow: none; }
.karte-stimmen table.liste td[data-titel="Datei"] a.datei:hover,
.karte-stimmen table.liste td[data-titel="Datei"] a.datei:focus-visible { text-decoration: underline; text-decoration-color: var(--verein); text-underline-offset: 3px; }
.karte-stimmen table.liste td[data-titel="Seiten"],
.karte-stimmen table.liste td[data-titel="Größe"],
.karte-stimmen table.liste td[data-titel="hochgeladen"] { font-variant-numeric: tabular-nums; white-space: nowrap; }
.karte-stimmen tr.sammel td { background: color-mix(in srgb, var(--grund) 45%, var(--karte)); }
.karte-stimmen table.liste td.spalte-aktionen { white-space: nowrap; padding-right: 6px; }
.karte-stimmen a.handlung { display: inline-flex; align-items: center; justify-content: center; text-decoration: none; }
.karte-stimmen tbody tr:not(.gruppe):last-child td { border-bottom: 0; }
.karte-stimmen tbody[id] { scroll-margin-top: 80px; }
.karte-stimmen table.liste thead th:nth-child(3) { width: 72px; }
.karte-stimmen table.liste thead th:nth-child(4) { width: 90px; }
.karte-stimmen table.liste thead th:nth-child(5) { width: 150px; }
.karte-stimmen table.liste thead th.spalte-aktionen { width: 260px; }
@media (min-width: 1120px) {
  .karte-stimmen > .listenlauf { overflow: hidden; }
  .karte-stimmen table.liste { min-width: 0; width: 100%; table-layout: fixed; }
  .karte-stimmen table.liste thead th:nth-child(1) { width: 22%; }
}
@media (max-width: 1119px) {
  .karte-stimmen table.liste { min-width: 968px; width: 968px; table-layout: fixed; }
  .karte-stimmen table.liste thead th:nth-child(1) { width: 200px; }
}
@media (max-width: 699px) {
  .karte-stimmen tr.gruppe th { padding-left: 12px; position: sticky; left: 0; }
  .karte-stimmen tr.gruppe .gruppe-aktionen { float: left; margin: 3px 10px 0 0; vertical-align: middle; }
  .karte-stimmen tr.gruppe .gruppe-name { display: inline; }
}

/* DOPPELTE STIMMEN — Scheibe D, 13.09.2026. Gezaehlt wird je Ausgabe
   (Tuba im Arrangement und Tuba im Original sind kein Doppel). Die Meldung
   steht AUSSERHALB der Karte: 060 „Keine Meldung liegt in der Karte einer
   Liste" misst jede Karte, nicht nur Bestandslisten; ADR-0078 Nachtrag
   Punkt 2 hat die Zusicherung nicht eingegrenzt. Stufe Hinweis: mehrere
   Blaetter einer Stimme sind meist gewollt. Gleiche Groesse traegt die
   Kante --hinweis (ADR-0078 Nachtrag Punkt 1, gilt so). */
.stimmen-meldung { margin: 0 0 12px; }
.stimmen-meldung .meldung-satz { max-width: none; font-size: 14px; line-height: 1.4; }
.karte-stimmen td[data-titel="Stimme"] .nebensache.doppelt { color: var(--hinweis); }
.karte-stimmen tr.doppel td:first-child { box-shadow: inset 3px 0 0 var(--hinweis); }

/* SECHSTES UND SIEBTES HANDLUNGSZEICHEN: ANSEHEN, HOCHLADEN (ZEICHEN.md „Neu am
   09.09.2026" und „Neu in Gebrauch"). Verwender: die Blattzeile und die
   Gruppenzeile der Karte „Digitale Stimmen" (165 verlangt fuer jede Maske
   einen). */
.handlung-bild[data-zeichen="ansehen"] {
  -webkit-mask-image: url(zeichen/ansehen.svg);
          mask-image: url(zeichen/ansehen.svg);
}
.handlung-bild[data-zeichen="hochladen"] {
  -webkit-mask-image: url(zeichen/hochladen.svg);
          mask-image: url(zeichen/hochladen.svg);
}
/* ACHTES BIS ZEHNTES: SUCHEN, VERWEIS, ABSPIELEN (Scheibe E, ZEICHEN.md „Neu am
   09.09.2026"). Verwender: die Ausgabenzeile (Recherche, Katalogseite,
   Abspielen), die Quellenliste im Recherchefenster und der grosse Knopf in der
   Klangflaeche.

   `suchen` TRAEGT ZWEI BEDEUTUNGEN, UND DAS IST GEMESSEN UND ENTSCHIEDEN:
   In der Leiste heisst die Lupe „Suchen" (`.knopf-still.suchen::before`), in
   der Zeile „Recherche". ZEICHEN.md nennt es und laesst es so: „in der Zeile
   gibt es keine zweite Suche." Die Maske ist deshalb dieselbe Datei, der
   Unterschied steht im `title` und im `aria-label`. */
.handlung-bild[data-zeichen="suchen"] {
  -webkit-mask-image: url(zeichen/suchen.svg);
          mask-image: url(zeichen/suchen.svg);
}
.handlung-bild[data-zeichen="verweis"] {
  -webkit-mask-image: url(zeichen/verweis.svg);
          mask-image: url(zeichen/verweis.svg);
}
.handlung-bild[data-zeichen="abspielen"] {
  -webkit-mask-image: url(zeichen/abspielen.svg);
          mask-image: url(zeichen/abspielen.svg);
}

/* ZWOELFTES BIS VIERZEHNTES: ZERLEGEN, AUSLIEFERN, MAPPE — Scheibe D, 13.09.2026.
   Verwender: die Schere an der kompletten Ausgabe (stueck.php), Herunterladen
   an der Blattzeile und in der Betrachterleiste, „In Mappe einlegen" an der
   Ausgabenzeile. 165 verlangt die Maske, sobald das Zeichen im Markup steht. */
.handlung-bild[data-zeichen="zerlegen"] {
  -webkit-mask-image: url(zeichen/zerlegen.svg);
          mask-image: url(zeichen/zerlegen.svg);
}
.handlung-bild[data-zeichen="ausliefern"] {
  -webkit-mask-image: url(zeichen/ausliefern.svg);
          mask-image: url(zeichen/ausliefern.svg);
}
.handlung-bild[data-zeichen="mappe"] {
  -webkit-mask-image: url(zeichen/mappe.svg);
          mask-image: url(zeichen/mappe.svg);
}
.handlung-bild[data-zeichen="mitnehmen"] {
  -webkit-mask-image: url(zeichen/mitnehmen.svg);
          mask-image: url(zeichen/mitnehmen.svg);
}

/* ELFTES HANDLUNGSZEICHEN: FAVORIT — 11.09.2026.
   ---------------------------------------------------------------------------
   ANLASS, GEMESSEN UND NICHT GEMEINT: Bei ECHTEN 390 px (Fernsteuerungs-
   protokoll, `Emulation.setDeviceMetricsOverride`, ueber `http://`) hatte der
   Favoritenschalter im Stimmenkatalog KEINEN sichtbaren Hinweis darauf, dass er
   schaltbar ist. Er war ein Wort in einem `.vereinsbuch-zellenknopf`, und der
   unterstreicht allein bei `:hover` und `:focus-visible` — am Telefon gibt es
   kein Hover.

   DER VORGAENGER SETZT HIER `★`/`☆` ALS TEXT (`noten/stimmen.php:351`). Das
   geht in diesem Portal nicht: ADR-0024, Nachtrag vom 05.09.2026 (nachts),
   verlangt fuer jede Zeilenaktion „eine Marke aus dem Zeichensatz, keine
   Schriftglyphe". Gemessen am 11.09.2026 fuehrte `oeffentlich/zeichen/` 62
   Dateien und keine Sternmarke; `favorit.svg` ist die 63.

   DIE FORM IST WOERTLICH DIE DER ZEHN DARUEBER — derselbe Waehler bis auf den
   Wert von `data-zeichen`, dieselben zwei Eigenschaften, dieselbe Reihenfolge
   (Praefix vor Standard). Groesse, Farbe und Maskenart kommen aus
   `.handlung-bild`; eine zweite Kopie davon liefe am Tag der ersten Aenderung
   auseinander.

   DIE DATEI IST NEU GEZEICHNET UND NICHT ABGELEITET: viewBox 0 0 48 48,
   `fill: none`, Strichstaerke 3, runde Enden und Ecken — abgemessen an
   `ansehen.svg` und in tests/faelle/330_notenarchiv.php GEGEN JENE DATEI
   verglichen statt gegen eine abgeschriebene Zahl.
   --------------------------------------------------------------------------- */
.handlung-bild[data-zeichen="favorit"] {
  -webkit-mask-image: url(zeichen/favorit.svg);
          mask-image: url(zeichen/favorit.svg);
}

/* GEWAEHLT UND NICHT GEWAEHLT — OHNE HOVER UNTERSCHEIDBAR.
   ---------------------------------------------------------------------------
   DIE AUFLAGE LAUTET „gewaehlt / nicht gewaehlt ohne Hover unterscheidbar",
   und sie ist der Grund, warum der Stand als KLASSE am Knopf steht und nicht
   als Zeigezustand: Was nur bei `:hover` erscheint, gibt es am Telefon nicht.

   DIE UNTERSCHEIDUNG IST DECKUNG UND NICHT FARBTON. Ein Farbwechsel allein
   stuende neben den Ueben-Stufen, deren Kontrast der Betreiber am 10.09.2026
   beanstandet hat (drei von fuenf halten die Nichttext-Schwelle 3:1 nicht).
   Die Deckung aendert die LEUCHTDICHTE derselben Tinte — der ungewaehlte
   Stern bleibt sichtbar, der gewaehlte steht deutlich davor.

   DIE ZAHL IST GEMESSEN UND NICHT GEWAEHLT, und der erste Entwurf war FALSCH:
   Bei `opacity: .4` liegt die wirksame Farbe des ungewaehlten Sterns auf
   rgb(164, 166, 165) und haelt gegen den Kartengrund nur 2,45 : 1 — UNTER der
   Nichttext-Schwelle 3 : 1. Das ist genau der Mangel, den der Betreiber am
   10.09.2026 an den Ueben-Stufen beanstandet hat; ihn hier neu zu bauen waere
   derselbe Fehler mit einem anderen Bauteil.

   Gemessen am 11.09.2026 bei ECHTEN 390 px ueber das Fernsteuerungsprotokoll,
   `vorschau/gelb/notenarchiv-stimmen.html` ueber `http://`:

     gewaehlt      rgb(27, 33, 30)    auf rgb(255,255,255)   16,37 : 1
     .4            rgb(164,166,165)                           2,45 : 1   ZU WENIG
     .62           rgb(114,117,116)                           4,64 : 1

   BEIDE ZEILEN SIND AM BILD ABGELESEN UND NICHT GERECHNET. Die Schwelle liegt
   RECHNERISCH bei a = 0,471 (genau 3 : 1); `.62` gibt Abstand nach oben und
   laesst den Unterschied zum gewaehlten Stand trotzdem gross — Faktor 3,5
   zwischen den beiden Kontrasten.

   DIE GRENZE DER MESSUNG GEHOERT DANEBEN: Sie ist gegen den WEISSEN Kartengrund
   gerechnet. Ein Farbsatz mit anderem `--karte` braeuchte eine eigene Messung;
   tests/faelle/330_notenarchiv.php rechnet deshalb gegen genau diesen Grund und
   nennt ihn.

   UND DER STAND STEHT ZUSAETZLICH ALS WORT DA (`.nur-vorlesen`, 1 x 1 px).
   Wer mit einer Vorlesehilfe hoert, bekommt ihn als Text; der Vorgaenger hat
   dort nur das Zeichen. Wir uebernehmen die Form und nicht diesen Mangel —
   derselbe Satz steht an notenarchiv_uebungspunkt().

   WAS HIER NICHT ENTSCHIEDEN IST UND VORGELEGT WURDE: die universelle Form
   „gefuellter Stern gegen Umriss-Stern". Eine Maske traegt eine Silhouette und
   laesst sich aus CSS nicht fuellen — das braeuchte eine ZWEITE gezeichnete
   Datei. Welche Marke eine Handlung fuehrt, entscheidet der Betreiber
   (.claude/rules/20-kanal.md); gebaut ist deshalb EIN Zeichen mit zwei
   Zustaenden.
   --------------------------------------------------------------------------- */
.favorit-an,
.favorit-aus {
  display: inline-flex;
  align-items: center;
  justify-content: flex-start;
  gap: 0;
  width: auto;
  min-width: 44px;
  min-height: 44px;
}
.favorit-aus .handlung-bild { opacity: .62; }

/* EINE ADRESSE OHNE LEERZEICHEN BRICHT NICHT VON SELBST — 11.09.2026.
   ---------------------------------------------------------------------------
   ANLASS: Die Spalte „Link" der Gastzugaenge traegt eine vollstaendige Adresse
   mit 64 Hexzeichen am Ende. Ohne diese Regel schiebt sie die Spalte breiter
   als die Karte, und am Telefon wandert der Rest der Zeile aus dem Bild —
   derselbe Fall, den 060_bedienkonzept.php fuer die Aktionszelle misst
   („min-width: auto … UND DIE ZEICHEN WANDERN AUS DEM BILD").

   `overflow-wrap: anywhere` UND NICHT `word-break: break-all`: Jenes bricht
   auch dort, wo ein Umbruch moeglich waere, und zerschneidet den lesbaren Teil
   der Adresse mitten im Wort. Dieses bricht erst, wenn es sein muss.

   DIE EIGENSCHAFT STEHT SCHON ZWEIMAL IM BESTAND (`.werteprobe > div`), dort
   aber an eine Stelle gebunden. Hier bekommt sie einen Namen, weil eine
   Adresse an mehr als einer Stelle stehen kann.
   --------------------------------------------------------------------------- */
.bricht-um { overflow-wrap: anywhere; }
.favorit-an .handlung-bild { opacity: 1; }

/* ---------------------------------------------------------------------------
   RECHERCHE, KATALOGSEITE, KLANGBEISPIEL (Scheibe E)
   ---------------------------------------------------------------------------

   Lieferung `stil.css` Z. 7689–7717; Betreiber an Design, 09.09.2026: „bei
   jeder Ausgabe braucht es noch einen Button zur Recherche … eine Art
   Playbutton, im Popup spielt das verlinkte Video."

   DIE KATALOGSEITE IST EIN <a> IN DER AKTIONENSPALTE. Der Kern kennt
   `a.handlung` und die Stimmenkarte richtet es schon aus; die Ausgabentabelle
   braucht dieselbe Zeile, sonst sitzt das Zeichen auf der Grundlinie statt in
   der Mitte.

   DIE SPALTENBREITE STEHT SCHON DA: 260 px ab 1120, Kolonne 1250 darunter
   (Scheibe C, weiter oben) — die Lieferung rechnet damit fuenf Knoepfe. Hier
   sind es vier: Stift, Recherche, Katalogseite, Abspielen. Der fuenfte ist
   „In Mappe einlegen" und gehoert Scheibe D; die Breite bleibt, weil sie fuer
   fuenf gemessen ist.
   --------------------------------------------------------------------------- */
.karte-ausgaben a.handlung { display: inline-flex; align-items: center; justify-content: center; text-decoration: none; }

/* DIE NEUN QUELLEN ALS KNOPFREIHE. Werte der Lieferung: umbrechende Reihe,
   Abstand 6, Zeichen 18 px, Schrift 14/600, Innenabstand 6/12.

   EINE ZEILE DER LIEFERUNG WIRD NICHT UEBERNOMMEN, UND ZWAR `min-height: 40px`:
   `.knopf-still` des Kerns traegt 44, und 44 ist der Treffbereich aus ADR-0024
   („44 px das Minimum ist", 060). Eine Lieferung, die ihn auf 40 senkt, senkt
   ihn fuer neun Bedienelemente in einem Fenster. Der Nachtrag zu ADR-0078 vom
   09.09.2026 zaehlt acht Stellen auf, an denen die Lieferung ein ADR bricht —
   diese ist NICHT darunter, also ist sie nicht entschieden, sondern
   unbemerkt. Gebaut sind 44; gemeldet ist es. */
.recherche-quellen { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: 6px; }
.recherche-quellen .knopf-still { padding: 6px 12px; font-size: 14px; text-decoration: none; }
.recherche-quellen .handlung-bild { width: 18px; height: 18px; }

/* DIE FELDPAARE DER KLANGBEISPIELE. Kein Tabellenmarkup: Es sind Feldpaare
   untereinander, und die Zeilen ENTSTEHEN (ADR-0078, Nachtrag 09.09., Punkt 3).
   Der Trennstrich sagt, wo ein Beispiel aufhoert und das naechste anfaengt —
   ohne ihn stehen bei drei Beispielen sechs Felder in einer Kolonne. */
.klangfelder .klangfeld + .klangfeld { margin-top: 10px; padding-top: 10px; border-top: 1px solid var(--linie); }

/* DIE ABSPIELFLAECHE, 16:9 IN --tinte (Lieferung Z. 7712–7717).

   WEISS STEHT HIER ALS #fff UND NICHT ALS TOKEN, und der Grund ist der
   Gegenstand des Tokens: Der Kern fuehrt `--karte: #ffffff` — das ist der
   GRUND EINER KARTE und keine Vordergrundfarbe. Wer ihn hier setzte, baende die
   Schrift auf der dunklen Flaeche an den Kartengrund: Wer eines Tages die
   Karte toent, toente den Abspielknopf mit, ohne es zu wollen. Der Kern macht
   es an jeder vergleichbaren Stelle ebenso — `.knopf-haupt` auf `--verein`
   traegt `color: #fff`, der Fokusring auf dunklem Grund ebenso. Gegen
   `--tinte` (#1b211e) misst Weiss 15,6:1.

   DER KNOPF IST 72 PX MIT EINEM ZEICHEN VON 32 (Lieferung, BAUTEILE.md). Er
   ist damit weit ueber dem Treffbereich und traegt trotzdem einen sichtbaren
   Rahmen — die Flaeche dahinter ist fast schwarz, ein Knopf ohne Rand
   verschwaende darin.

   `klang-laeuft` RAEUMT DIE FLAECHE, sobald der Spieler drin steht: keine
   Mitte-Ausrichtung mehr, das Element fuellt die 16:9.

   UND SEIT DEM 10.09.2026 RAEUMT ES SIE MIT DEM BLATT UND NICHT MIT DEM SKRIPT.
   bedienung.js setzte vorher `flaeche.innerHTML = ''` — Knopf und Satz waren
   damit WEG, und das Schliessen des Fensters konnte sie nicht zurueckholen (der
   Spieler lief hinter dem geschlossenen Fenster weiter). Jetzt bleiben beide
   liegen und werden hier verdeckt; das Skript nimmt nur den Spieler wieder
   heraus. AM BILD AENDERT SICH NICHTS: vorher entfernt, jetzt verborgen — in
   beiden Faellen fuellt der Spieler die Flaeche allein. */
.klangfenster { position: relative; aspect-ratio: 16 / 9; margin: 8px 0 0; background: var(--tinte); border-radius: var(--radius); display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 14px; overflow: hidden; }
.klangfenster.klang-laeuft .klang-start, .klangfenster.klang-laeuft .klang-hinweis { display: none; }
.klang-start { width: 72px; height: 72px; border-radius: 50%; border: 2px solid #fff; background: rgba(255,255,255,.12); display: inline-flex; align-items: center; justify-content: center; cursor: pointer; }
.klang-start:hover { background: rgba(255,255,255,.24); }
.klang-start:focus-visible { outline: 2px solid #fff; outline-offset: 3px; }
.klang-start .handlung-bild { width: 32px; height: 32px; background: #fff; margin-left: 4px; }
.klang-hinweis { margin: 0; padding: 0 24px; font-size: 13px; color: #fff; text-align: center; opacity: .85; }
.klangfenster.klang-laeuft { display: block; gap: 0; }
.klang-spieler { display: block; width: 100%; height: 100%; border: 0; }

/* Der Absatz „Verleih" im Fenster „Ausgabe berichtigen" (BAUTEILE.md, Fenster:
   `p.feldbezeichnung` 13 px Versalien, darunter Satz, Verweis oder Knopf im
   `formular-fuss formular-fuss-links`; Lieferung Z. 7707, 7717). */
.feldbezeichnung { margin: 14px 0 6px; font-size: 13px; font-weight: 600; letter-spacing: .06em; text-transform: uppercase; color: var(--tinte-leise); }
.formular-fuss.formular-fuss-links { justify-content: flex-start; padding-top: 6px; margin-top: 8px; }

/* ---------------------------------------------------------------------------
   DER PROGRAMMZETTEL — module/notenarchiv/seiten/programmblatt.php

   WOHER DIESE REGELN KOMMEN: Sie sind der Rueckbau auf den Vorgaenger, am
   10.09.2026 angeordnet („Was ist so schwer daran es so zu bauen wie der
   Vorgänger … Ich sagte keine Interpretationen!"; stehende Anordnung
   docs/lieferung/vorgaenger-genau-so-2026-09-05.md). Gemessen in
   `noten/programm_druck.php` (keimling79-lab/notenarchiv, 270571f), Zeilen
   103-134. Der Bau hatte an dieser Stelle eine Tabelle; der Vorgaenger druckt
   ZETTEL, ganzseitig oder zu zweit beziehungsweise zu viert auf einem A4-Bogen,
   mit gestrichelten Schnittkanten dazwischen.

   SEINE MILLIMETER STEHEN WOERTLICH DA — 210, 297, 148,5, 105 und 148 mm sind
   das PAPIER (A4 hoch, A4 quer, A5, A6) und keine Gestaltung. Wer sie aendert,
   aendert nicht das Aussehen, sondern das Blatt, auf dem geschnitten wird.

   SEINE FARBEN STEHEN NICHT DA. Fuer Farbe, Kante und Radius gilt die
   Lieferung vom 08.09.2026 und ADR-0078 (Betreiber, 10.09.2026: „halte dich an
   das neue design!"). Also `var(--karte)` statt `#fff` und `var(--linie)` statt
   seines `#9a8f80`. Sein Schattenwurf ist die Bauart dieses Portals fuer eine
   abgehobene Flaeche (`0 10px 28px rgba(27,33,30,.18)`, Z. 4275) und nicht
   seine eigene Zahl.

   SEINE SCHRIFTGRADE IN pt STEHEN DAGEGEN DA, und das ist eine Entscheidung
   mit Grund: Auf Papier ist der Punkt das Mass, das dort auch ankommt — 11 pt
   ganzseitig, 10,5 pt auf A5, 8,5 pt auf A6. Der Tokensatz dieses Portals hat
   keine Papiergrade; er ist fuer den Schirm gemacht. GEMELDET, weil es die
   einzige Stelle des Blattes ist, an der ein Mass nicht aus dem Tokensatz
   kommt.

   NUR `.blatt-1`, `.blatt-2` UND `.blatt-4` — NIE `.blatt` ALLEIN. Diese
   Klasse traegt auch der Vereinsbuch-Export (ADR-0064,
   kern/seiten/vereinsbuchexport.php). Eine Regel an `.blatt` machte aus jenem
   Blatt ein Raster von 210 mm Breite, und das ist ein anderes Blatt mit einer
   eigenen Anordnung.

   KEINE NEUE BRUCHKANTE. Sein `@media (max-width: 640px)` (`:99-101`) ordnet
   seine eigene Druck-Steuerleiste; hier traegt die Leiste des Portals das
   schon (`.vereinsbuch-suche-zeile`, `flex-wrap`).
   --------------------------------------------------------------------------- */

.blatt-1,
.blatt-2,
.blatt-4 {
  display: grid;
  margin: 0 auto var(--abstand);
  background: var(--karte);
  box-shadow: 0 10px 28px rgba(27, 33, 30, 0.18);
}
/* Ganzseitig: EIN A4-Bogen hoch. Lange Programme duerfen auf Folgeseiten
   weiterfliessen — deshalb `overflow: visible` und kein `grid-template-rows`. */
.blatt-1 { width: 210mm; grid-template-columns: 210mm; }
/* Zwei je Bogen: A4 QUER, zwei A5-Zettel nebeneinander. Das Querformat setzt
   oeffentlich/druck-quer.css, eingebunden von der Seite. */
.blatt-2 { width: 297mm; grid-template-columns: 148.5mm 148.5mm; grid-template-rows: 210mm; }
/* Vier je Bogen: A4 hoch, vier A6-Zettel. */
.blatt-4 { width: 210mm; grid-template-columns: 105mm 105mm; grid-template-rows: 148mm 148mm; }

.zettel { padding: 9mm 10mm; overflow: hidden; min-width: 0; }
.blatt-1 .zettel { min-height: 296mm; padding: 20mm 18mm; font-size: 11pt; overflow: visible; }
.blatt-2 .zettel { font-size: 10.5pt; }
.blatt-4 .zettel { font-size: 8.5pt; padding: 7mm 8mm; }

/* Die gestrichelte Kante IST die Schnittlinie und keine Zierde: Sie sagt, wo
   die Schere ansetzt. Sein Kopfkommentar: „mit gestrichelten Schnittlinien,
   z. B. für Zettel in Marschbuch oder Mappe." */
.blatt-2 .zettel + .zettel { border-left: 1px dashed var(--linie); }
.blatt-4 .zettel:nth-child(2n) { border-left: 1px dashed var(--linie); }
.blatt-4 .zettel:nth-child(n+3) { border-top: 1px dashed var(--linie); }

.zettel-titel { margin: 0 0 .2em; font-size: 1.55em; }
.zettel-unter { margin: 0 0 .9em; color: var(--tinte-leise); }
.zettel-liste { margin: 0; padding-left: 1.6em; }
.zettel-liste li { margin-bottom: .45em; }
/* „Stand: …" steht nur auf dem ganzseitigen Bogen — dem Blatt, das
   weitergegeben wird. Auf den kleinen Zetteln ist jede Zeile Platz. */
.zettel-stand {
  margin: 2.5em 0 0;
  padding-top: .6em;
  border-top: 1px solid var(--linie);
  color: var(--tinte-leise);
  font-size: .85em;
}
/* DIE WAHL DER ZETTELZAHL HAT EINE EIGENE KLASSE UND IST NICHT DIE LEISTE DES
   PORTALS — gemessen am 10.09.2026: `.vereinsbuch-suche` ist die OBERE HAELFTE
   einer Karte (BAUTEILE.md „Karte": „Leiste + Kolonne sind die eine weisse
   Karte"), und 060_bedienkonzept.php verlangt darunter ein Bauteil, das die
   Unterkante rundet. Hier steht darunter ein Bogen Papier und keine Liste.

   Der Vorgaenger fuehrt dafuer ebenfalls eine eigene Leiste (`.druck-steuer`,
   noten/programm_druck.php:92-101). Ihre Masse kommen aus dem Tokensatz; sein
   `max-width: 210mm` steht nicht da, weil die Spaltenbreite dieses Portals sie
   schon setzt.

   DER AKTIVE EINTRAG ist bei ihm ein `<span>` ohne Verweis (`:144`); hier
   traegt er zusaetzlich die Vereinsfarbe als Unterkante — dieselbe Marke, die
   das Portal an jedem offenen Ort fuehrt (`aria-current="page"`). */
.zettelwahl {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px 10px;
  margin: 0 0 var(--abstand);
}
.zettelwahl [aria-current="page"] {
  box-shadow: inset 0 -2px 0 var(--verein);
  cursor: default;
}

@media print {
  /* Auf Papier ist der Bogen der Bogen: kein Schatten, kein Aussenrand.

     DER VORSCHAU-ZOOM DER HANDY-ANSICHT WIRD HIER NICHT ZURUECKGESETZT, und
     das ist gemessen und keine Auslassung: Er steht als Inline-Stil am Element
     (das Skript setzt ihn), und ein Inline-Stil schlaegt jede Regel dieses
     Blattes. Nur eine Vorrangmarke kaeme dagegen an — und die verbietet
     060_bedienkonzept.php („Kein ausgeliefertes Stilblatt kennt eine
     Vorrangmarke"), zu Recht.

     STATTDESSEN NIMMT IHN DAS SKRIPT VOR DEM DRUCK SELBST WEG (`beforeprint`)
     und setzt ihn danach wieder (`afterprint`). Das ist auch die ehrlichere
     Stelle: Wer den Zoom gesetzt hat, raeumt ihn weg. */
  .blatt-1,
  .blatt-2,
  .blatt-4 {
    box-shadow: none;
    margin: 0;
  }
}
