/* ============================================================
   AUTO-GENERIERT von ui-kit/sync.py — NICHT hier editieren!
   Quelle: ui-kit/buttons.css + tabs.css + forms.css + modal.css + account-menu.css + menu.css + kaestchen-dunkel.css + login-gate.css
   Aussehen aendern? -> in der Quelle, dann "Sync".
   ============================================================ */

/* Button-Icon: Inline-SVG (currentColor, D-034: kein Icon-Asset) vor dem Text.
   Suite-eigen — das Buero fuehrt keine SVGs im Knopf. */
.btn svg { width: 14px; height: 14px; flex-shrink: 0; margin-right: var(--abstand-4); }

/* ══ HAUS-BAUSTEIN: knopf ══ Quelle: Material/design/bausteine/knopf.css
   HIER NIE EDITIEREN — der nächste Werkstatt-Sync überschreibt es,
   und zwar in ALLEN Dächern gleichzeitig. */
/* ══ KNOPF ══ eine Basis, sechs Aufsätze
   Gemeinsam seit V-3 (05.08.2026). Entschieden an der knopfkarte.html.

   BAUWEISE: Basis + Variante (Chris 05.08.2026) — `class="btn btn-primaer"`.
   Das Büro hatte fünf eigenständige Klassen, die Suite hatte die Basis. Die
   Basis gewinnt, weil sie WENIGER wird, wenn Varianten dazukommen: Ein neuer
   Knopf sagt nur noch, was ihn unterscheidet. Beim Umbau war das zugleich der
   risikoärmere Weg — die Büro-Namen blieben, es kam nur `btn` davor.

   WERTE: gemischt, je Zeile am Bild entschieden. Grob — Polsterung, Gewicht
   und die deckende Fläche kommen aus dem Büro (größeres Ziel für den Finger,
   und ein durchsichtiger Knopf verschwindet auf getönten Flächen halb); die
   Mindesthöhe, der Hover am Hauptknopf, die Rolle statt `#fff` beim
   zerstörenden Knopf und das ruhigere Ausgegraut kommen aus der Suite.

   `.btn-sekundaer` GIBT ES NICHT MEHR: Die Neben-Aktion IST die Basis. Wer
   `btn` schreibt, bekommt sie.

   Zwei Rollen mussten dafür in V-3a nachgezogen werden: das Büro bekam
   `--akzent-aktiv` (es hatte gar keinen Hover-Wert — der Hauptknopf gab beim
   Überfahren nichts zurück), die Suite `--schrift-kompakt` für den leisen
   Knopf. */

.btn {
    border: 1px solid var(--linie);
    background: var(--flaeche-erhaben);
    color: var(--text);
    font-family: inherit;
    font-size: var(--schrift-sm);
    font-weight: var(--gewicht-mittel);
    padding: var(--abstand-8) var(--abstand-14);
    /* 34px ist die einzige nackte Zahl hier und mit Absicht keine Rolle: Sie
       ist die Anatomie des Knopfs, kein geteilter Wert. Ohne sie sind Knöpfe
       verschieden hoch, je nachdem wie groß ihre Schrift gerade ist. */
    min-height: 34px;
    border-radius: var(--rundung-mittel);
    cursor: pointer;
    white-space: nowrap;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--abstand-6);
    /* Gezielt statt `all`: Ein `all` animiert auch, was niemand animiert haben
       will — beim Umschalten der Farbwelt etwa würde jede Rahmenfarbe
       hinterherlaufen. */
    transition: background 0.15s, border-color 0.15s, color 0.15s;
}
/* Die Fläche beim Überfahren nur dort, wo es einen Zeiger GIBT — am Handy
   bliebe sie sonst nach dem Antippen kleben. */
@media (hover: hover) {
    .btn:hover { background: var(--linie-zart); }
}

/* ── Haupt-Aktion ── der Knopf, den man sucht */
.btn-primaer {
    background: var(--akzent);
    border-color: var(--akzent);
    color: var(--text-auf-akzent);
    font-weight: var(--gewicht-halbfett);
    /* KEIN eigenes Polster (Chris 15.08.2026, an Aufträge/Benutzerverwaltung:
       „warum sind die blauen höher als die anderen?"): 10/16 statt 8/14 hob den
       Hauptknopf über die 34-px-Höhe seiner Nachbarn — in ALLEN Dächern, weil
       dieser Block überall hinsynct. Er hebt sich durch Farbe und Gewicht ab,
       nicht durch Größe: die Höhe ist die Anatomie des EINEN Knopfs. */
}
@media (hover: hover) {
    .btn-primaer:hover { background: var(--akzent-aktiv); border-color: var(--akzent-aktiv); }
}

/* ── Leise ── Tabellen-Aktionen und Nebenwege; trägt keine Fläche und keinen
      Rahmen, bleibt aber ein volles Treffer-Ziel (34px aus der Basis). */
.btn-leise {
    border: 0;
    background: transparent;
    color: var(--text-gedaempft);
    font-size: var(--schrift-kompakt);
    padding: var(--abstand-8) var(--abstand-10);
}
@media (hover: hover) {
    .btn-leise:hover { background: var(--linie-zart); color: var(--text); }
}
/* Löschen als TEXT — die leise Form des Entfernens, dort wo eine rote Fläche
   zu laut wäre. Der Hover hält die Farbe, damit sie nicht ins Neutrale kippt. */
.btn-loeschen { color: var(--fehler); }
@media (hover: hover) {
    .btn-loeschen:hover { color: var(--fehler); }
}

/* ── Zerstörend ── rote FLÄCHE, für den Punkt ohne Wiederkehr.
      Bis V-3 stand hier im Büro ein hartes `#fff` — der einzige Wert des
      ganzen Knopfs, den der Baustein-Lint ablehnt, und zu Recht: In einer
      geteilten Quelle muss auch die Schrift auf der Fläche eine Rolle sein. */
.btn-gefahr {
    background: var(--fehler-flaeche);
    border-color: var(--fehler-flaeche);
    color: var(--text-auf-akzent);
    font-weight: var(--gewicht-halbfett);
}
@media (hover: hover) {
    .btn-gefahr:hover { background: var(--fehler-flaeche-aktiv); border-color: var(--fehler-flaeche-aktiv); }
}

/* ── Klein ── für Zeilen und enge Köpfe. Die 2px sind Feinjustage, nicht
      Raster (Abstands-Modell: unter 4px kein Raster). */
.btn-klein {
    min-height: 26px;
    padding: 2px var(--abstand-8);
    font-size: var(--schrift-xs);
}
/* ── Symbol ── Quadrat für ein einzelnes Zeichen, gleich hoch wie die Basis */
.btn-symbol {
    width: 34px;
    padding: var(--abstand-6);
}

/* Ausgegraut: neutrale Fläche statt Deckkraft auf der Akzentfarbe. Deckkraft
   allein ergab auf Navy einen matschigen Graublau-Ton — auf der Knopfkarte
   nebeneinander gut zu sehen. */
.btn:disabled,
.btn:disabled:hover {
    background: var(--linie-zart);
    border-color: var(--linie);
    color: var(--text-leise);
    cursor: not-allowed;
    opacity: 0.55;
}
/* ══ HAUS-BAUSTEIN: knopf ENDE ══ */

/* ═══ SUITE-EIGENE KNOPF-REGELN — hinter dem Haus-Block, sonst frisst sie
   der nächste Werkstatt-Sync (am 15.08.2026 zweimal passiert). ═══ */

/* AUF ERHABENEM GRUND rückt der Knopf eine Stufe hoch (Chris 15.08.2026,
   Sollkurven-Leiste: „dunkler und schlechter lesbar"): Tab-Leiste und Topbar
   liegen selbst auf --flaeche-erhaben — dieselbe Farbe wie der Knopf. Gleiche
   Farbe auf gleicher Farbe: der Knopf hing nur noch an seiner Rahmenlinie.
   Jetzt trägt er dort --karte („schwebt drauf") und hovert nach --karte-aktiv.
   Farbige Varianten (primär, gefahr, leise) und der durchsichtige Instrumenten-
   Knopf sind ausgenommen — sie haben ihren eigenen Grund. */
.tabs .btn:not(.btn-primaer):not(.btn-gefahr):not(.btn-leise):not(.btn-instrument),
.topbar .btn:not(.btn-primaer):not(.btn-gefahr):not(.btn-leise):not(.btn-instrument) {
    background: var(--karte);
}
@media (hover: hover) {
    .tabs .btn:not(.btn-primaer):not(.btn-gefahr):not(.btn-leise):not(.btn-instrument):hover,
    .topbar .btn:not(.btn-primaer):not(.btn-gefahr):not(.btn-leise):not(.btn-instrument):hover {
        background: var(--karte-aktiv);
    }
}

/* INSTRUMENTEN-VARIANTE (Chris 15.08.2026, an der Sollkurven-Leiste): derselbe
   Knopf in der Typografie der Cockpit-Familie — Versalien, 2xs, Laufweite,
   gedämpft, durchsichtig. Genau die Sprache, die im Cockpit jede Beschriftung
   spricht (TOOLS · FILTER · Kachelköpfe · BEREIT); der Standardknopf wirkte
   dort „klobig, gedrungen" (Formular-Register). Ersetzt die frühere Kit-Pille
   .tab-pill-btn UND den Dashboard-Sonderling .sidebar-action-btn: EIN Knopf,
   eine weitere benannte Variante — wie primär/gefahr. KEINE eigene Höhe:
   Charakter und Größe sind zwei Achsen — Standard 34 (bündig mit Feldern) vom
   .btn, klein 26 per .btn-klein (Tab-Leiste, Chart-Kopf). `.active` = Schublade
   offen / Zustand an. Suite-eigen (Cockpit); das Büro braucht sie nicht. */
.btn.btn-instrument {
    padding-inline: 12px;
    background: transparent;
    border-color: var(--linie);
    color: var(--text-gedaempft);
    font-size: var(--schrift-2xs);
    font-weight: var(--gewicht-mittel);
    text-transform: uppercase;
    letter-spacing: var(--laufweite);
}
@media (hover: hover) {
    .btn.btn-instrument:hover { color: var(--text); border-color: var(--linie-stark); background: var(--karte); }
}
.btn.btn-instrument.active { color: var(--text); border-color: var(--linie-stark); background: var(--karte); }
.btn.btn-instrument:disabled, .btn.btn-instrument:disabled:hover {
    opacity: 0.4; color: var(--text-leise); border-color: var(--linie); background: transparent;
}

.tabs {
    flex-shrink: 0;
    height: 48px;   /* Suite-Topbar-Standard */
    background: var(--flaeche-erhaben);
    border-bottom: 1px solid var(--linie);
    padding: 0 0 0 var(--abstand-24);
    display: flex;
    align-items: stretch;
    gap: 2px;
}

.tab {
    background: transparent;
    border: none;
    color: var(--text-gedaempft);
    padding: 8px 18px 0;
    cursor: pointer;
    font-family: var(--schriftart-ui);
    font-size: var(--schrift-sm);
    font-weight: var(--gewicht-mittel);
    letter-spacing: 0.02em;
    border-bottom: 2px solid transparent;
    margin-bottom: -1px;   /* überlagert die 1px-Border der .tabs */
    transition: color 0.12s, border-color 0.12s;
}
.tab:hover {
    color: var(--text);
}
.tab.active {
    color: var(--text);
    border-bottom-color: var(--akzent);
}
.tab[disabled] {
    opacity: 0.4;
    cursor: not-allowed;
}
.tab[hidden] {
    display: none;
}

/* Gruppe rechts in der Leiste — Werkzeug-Knöpfe und/oder Konto-Menü */
.tab-pill-group {
    margin-left: auto;
    display: flex;
    align-items: center;
    gap: var(--abstand-8);
    padding-right: var(--abstand-12);
}

/* ══ HAUS-BAUSTEIN: feld ══ Quelle: Material/design/bausteine/feld.css
   HIER NIE EDITIEREN — der nächste Werkstatt-Sync überschreibt es,
   und zwar in ALLEN Dächern gleichzeitig. */
/* ══ FELD ══ Hülle · Etikett · Eingabe · Hinweis · Fehler
   Gemeinsam seit V-4b (05.08.2026). Entschieden an der feldkarte.html.

   BAUWEISE: eigene Klassen (Chris 05.08.2026) — `<input class="eingabe">`
   statt `.feld input`. Element-Selektoren wären kürzer im HTML, treffen aber
   auch, was man nicht meint: In den Büro-Tools stecken drei KÄSTCHEN in
   Feld-Hüllen, die mit einer Element-Regel das Aussehen eines Textfelds
   bekommen hätten. Wer eigene Klassen vergibt, kann das nicht.

   DIE HAUPTENTSCHEIDUNG war die Schriftgröße: 13px statt der 12px, die das
   Büro führte. Das stand seit dem 02.08.2026 als O-5 in formen.css offen
   („77 Fundstellen … eigener Schritt"). Ein Feld zeigt, was jemand
   EINGETIPPT hat — das ist Inhalt, keine Nebeninfo.

   DIE POLSTERUNG kommt vom Büro (10/12), nicht von der Suite (6/10): Chris
   sah die Büro-Felder als „luftiger" an. Nachgemessen war der Unterschied
   nicht die Höhe (36 gegen 34 px), sondern die Luft IM Feld — 10px über und
   unter dem Text gegen 6. Und die haengt nicht an der Schriftgröße: 13px mit
   10/12 ergibt 37px, also einen Pixel mehr Luft als das Büro vorher hatte.
   Beides ging, man musste nicht wählen.

   Die Mindesthöhe 34px kommt aus der Suite. Sie greift bei 37px nie — sie ist
   ein Boden für den Tag, an dem jemand die Polsterung kleiner dreht.

   WAS AUS WELCHEM DACH KOMMT, gemischt und je Zeile am Bild entschieden:
     Büro   → Polsterung, Etikett-Farbe, Größe von Hinweis und Fehler, der
              LESBARE Ausgegraut-Zustand, Fehler-Markierung an der Hülle
     Suite  → Schriftgröße, Mindesthöhe, Nur-Lesen-Zustand, Feldfläche

   `--eingabe` als Feldfläche ist die zweite sichtbare Änderung: In der hellen
   Welt ist sie identisch mit der bisherigen (#ffffff), in der DUNKLEN dunkler
   (#151D27 gegen #17212C). Ein Eingabefeld ist eine Vertiefung, keine
   erhabene Fläche — es liegt IN der Karte, nicht darauf. */

.feld {
    display: flex;
    flex-direction: column;
    gap: var(--abstand-6);
    min-width: 0;
}
.feld.voll { grid-column: 1 / -1; }

.feld-etikett {
    font-size: var(--schrift-xs);
    text-transform: uppercase;
    letter-spacing: var(--laufweite);
    color: var(--text-gedaempft);
    font-weight: var(--gewicht-mittel);
}

.eingabe {
    width: 100%;
    /* min-width schlägt width — ohne die 0 drückt die eingebaute Mindestbreite
       von iOS-Datumsfeldern das Feld über den Modal-Rand hinaus. */
    min-width: 0;
    max-width: 100%;
    background: var(--eingabe);
    color: var(--text);
    border: 1px solid var(--linie);
    border-radius: var(--rundung-mittel);
    font-family: inherit;
    font-size: var(--schrift-sm);
    /* Senkrecht 6 wie .auswahl und .btn. 34px ist die Zeilenhöhe des Hauses —
       sie steht als min-height bei JEDEM Formular-Bauteil. Nur .eingabe hielt
       sie nicht ein: mit 10 wurde sie von Natur aus 38px hoch (Datumsfelder
       sogar 40) und überfuhr damit ihre eigene Vorgabe, während Auswahl und
       Knopf daneben brav auf 34 standen. Mit 6 bleiben alle unter 34, und
       min-height gibt die Höhe vor — das hält auch, wenn sich später die
       Schriftgröße ändert.
       Chris fand es am 10.08.2026 am Sollkurven-Konfigurator und korrigierte
       es in der Suite; am 12.08.2026 nachgemessen, dass die Büro-Tools
       dieselbe Abweichung tragen, und hier in die Quelle gezogen. */
    padding: var(--abstand-6) var(--abstand-12);
    min-height: 34px;
    outline: none;
    transition: border-color 0.15s ease;
}
.eingabe::placeholder { color: var(--text-leise); opacity: 1; }

/* Fokus = Akzent-RAHMEN, kein Ring — Hausstil aller drei Dächer.
   Der Ring wird ERSETZT, nicht gestrichen: Ohne `outline: none` malt Safari
   seinen eigenen blauen Ring darüber, ohne den Rahmen sähe man mit der
   Tastatur nicht mehr, wo man steht. */
.eingabe:focus { border-color: var(--akzent); }

textarea.eingabe { resize: vertical; min-height: 76px; line-height: 1.5; }

/* GESPERRT und NUR-LESEN sind zwei verschiedene Dinge:
   gesperrt = darf hier niemand ändern · nur-lesen = wird woanders gepflegt.
   Gesperrt bekommt einen EIGENEN Stil statt Deckkraft — ohne den zeichnet iOS
   solche Felder so blass, dass man den Wert nicht mehr liest. Das war eine
   teure Lektion im Büro-Dach und ist der Grund, warum hier kein `opacity`
   steht. */
.eingabe:disabled {
    background: var(--linie-zart);
    color: var(--text-gedaempft);
    -webkit-text-fill-color: var(--text-gedaempft);
    opacity: 1;
    cursor: default;
}
.eingabe[readonly] {
    background: var(--flaeche);
    color: var(--text-gedaempft);
}

/* iOS zentriert den Datumswert — linksbündig wie jedes andere Feld.
   ALLE DREI Typen, nicht nur `date`: „Sicherheit" benutzt `datetime-local`,
   und dort stand der Wert lange als einziges Feld mittig. Am Mac fällt das
   nie auf, der Fehler ist WebKit-only.

   NICHT WEITER BEHANDELT — und das ist eine Entscheidung, kein Versäumnis
   (Chris, 12.08.2026): Auf dem iPhone ist `datetime-local` ein natives
   Rad-Auswahlfeld mit einer eigenen Mindestbreite. Im Unfall-Formular von
   Sicherheit ragt es dadurch als einziges Feld über den rechten Rand hinaus.
   Ein Versuch mit `width: 100%` auf diesem Pseudo-Element half nicht und ist
   deshalb wieder entfernt.

   Warum hier nichts weiter passiert: Der Hebel, der greifen würde
   (`-webkit-appearance: none`), nimmt dem Feld sein natives Aussehen — ein
   Eingriff in eine Plattform-Eigenheit, den alle acht Werkzeuge mittragen
   müssten. Chris' Entscheid: „wenn das ein Apple-spezifisches Ding ist, will
   ich, dass der Code stabil bleibt und keine Workarounds."

   NACHPRÜFBAR ist das übrigens nur am Gerät. Playwrights WebKit läuft auf
   macOS und baut dieses Feld anders — dort messen Text- und Datumsfeld auf den
   Pixel gleich, mit und ohne jede Korrektur (nachgestellt am 12.08.2026).
   Wer das je angeht, braucht ein echtes iPhone, nicht eine Emulation.
   Der saubere Weg wäre ohnehin kein CSS-Kniff, sondern zwei getrennte Felder
   (Datum + Uhrzeit) statt `datetime-local`. */
.eingabe[type="date"]::-webkit-date-and-time-value,
.eingabe[type="datetime-local"]::-webkit-date-and-time-value,
.eingabe[type="time"]::-webkit-date-and-time-value { text-align: left; }

/* Zahl-Felder ohne Spinner-Pfeile — Hausregel (Chris): getippt, nicht
   geklickt. Global und nicht auf `.eingabe` beschränkt, denn die Regel gilt
   für jedes Zahlenfeld; eines in Rennsport liegt ausserhalb jeder Hülle. */
input[type="number"] { appearance: textfield; -moz-appearance: textfield; }
input[type="number"]::-webkit-outer-spin-button,
input[type="number"]::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }

/* KEIN Kontakt-Autofill-Symbol — zweite Hausregel (Chris 03.08., bekräftigt
   05.08.: „das will ich in keinem Tool haben"). Safari ignoriert
   autocomplete="off" bei Feldern, die es für Kontaktdaten hält, und setzt sein
   Symbol trotzdem hinein; abschalten geht nur über das Pseudo-Element.
   Der Passwort-Manager am Login bleibt unangetastet — anderes Element. */
input::-webkit-contacts-auto-fill-button {
    visibility: hidden !important;
    display: none !important;
    pointer-events: none;
    position: absolute;
    right: 0;
}

.feld-hinweis { color: var(--text-leise); font-size: var(--schrift-xs); }

/* Der FEHLER hängt an der HÜLLE, nicht am Feld: So schaltet eine Klasse den
   roten Rahmen UND den Fehlertext gleichzeitig. Sässe sie am Feld, müsste das
   JavaScript zwei Stellen treffen und könnte eine vergessen. */
.feld-fehler { display: none; color: var(--fehler); font-size: var(--schrift-xs); }
.feld.fehler .eingabe { border-color: var(--fehler); }
.feld.fehler .feld-fehler { display: block; }
/* ══ HAUS-BAUSTEIN: feld ENDE ══ */

/* ══ HAUS-BAUSTEIN: suchfeld ══ Quelle: Material/design/bausteine/suchfeld.css
   HIER NIE EDITIEREN — der nächste Werkstatt-Sync überschreibt es,
   und zwar in ALLEN Dächern gleichzeitig. */
/* ══ SUCHFELD ══ das Feld über oder neben einer Liste
   Gemeinsam seit V-4c/1 (05.08.2026). Hieß in beiden Dächern `.search`.

   DIE BREITE STEHT ABSICHTLICH NICHT HIER. Sie ist der einzige echte
   Unterschied zwischen den Dächern, und sie ist Layout, kein Aussehen: Die
   Suite legt das Feld breit über die Liste (`width: 100%`), die Büro-Tools
   stellen es schmal in die Kopfzeile (`flex: 1 1 220px`). Beides steht so im
   Spiegel als BEANTWORTETE Frage — Suchen ist dort die Hauptbewegung, hier
   Nebensache. Hausregel seit V-2: Komponente = Optik zentral, Größe lokal.

   DIE FELDFLÄCHE ist `--eingabe`, nicht `--flaeche-erhaben`, das das Büro
   führte. Gleiche Begründung wie bei den Feldern in V-4b: Ein Suchfeld ist
   eine Vertiefung, keine erhabene Fläche. In der hellen Welt ist das
   identisch (#ffffff), in der dunklen einen Hauch tiefer.

   HÖHE UND POLSTERUNG kommen aus der Suite (6/12 auf Mindesthöhe 34) und
   nicht aus dem Büro (8/12, ohne Boden). Grund ist die Zeile, in der das Feld
   steht: Auswahl und Knöpfe daneben sind 34 px hoch. Ein Suchfeld, das als
   einziges 35 px misst, verzieht die Kopfleiste um einen Pixel.

   Es trägt NICHT die 13 px der Eingabefelder aus V-4b — hier steht keine
   Eingabe, die man später wieder liest, sondern ein Filter. */

.suche {
    background: var(--eingabe);
    color: var(--text);
    border: 1px solid var(--linie);
    border-radius: var(--rundung-mittel);
    font-family: inherit;
    font-size: var(--schrift-sm);
    padding: var(--abstand-6) var(--abstand-12);
    min-height: 34px;
    outline: none;
    transition: border-color 0.15s ease;
}
.suche::placeholder { color: var(--text-leise); opacity: 1; }

/* Fokus = Akzent-RAHMEN, kein Ring — Hausstil aller Dächer (siehe feld.css). */
.suche:focus { border-color: var(--akzent); }

/* KEIN eingebautes Lösch-Kreuz. Dieselbe Hausregel wie Spinner-Pfeile und
   Kontakt-Autofill (Chris): Ein Feld zeigt, was wir hineinbauen, nicht was der
   Browser dazustellt. Bisher lag die Regel nur in der Suite — Vertriebs
   Suchfeld trug das Kreuz. Nur WebKit zeichnet es überhaupt.

   Global und nicht auf `.suche` beschränkt, aus demselben Grund wie die
   Spinner-Regel in feld.css: Sie gilt für JEDES Suchfeld. Rennsport sucht
   über `.sec-filter` in der Abschnitts-Kopfzeile — ein anderes Bauteil, aber
   dieselbe Hausregel. */
input[type="search"]::-webkit-search-cancel-button {
    -webkit-appearance: none;
    appearance: none;
}

/* Touch: 16 px verhindern den iOS-Auto-Zoom beim Antippen. Anker ist der
   FINGER, nicht die Fensterbreite — sonst zoomt das iPad trotzdem (Vertrieb
   V-28). Die Regel lag bisher nur tool-lokal im Vertrieb; in der Suite zoomte
   die Suche auf dem iPad. Am Mac sieht man das nie.

   ENTSCHIEDEN am 05.08.2026 (Chris), nachdem wir die Alternative durchgesprochen
   haben: Es BLEIBT bei der Feld-Regel. Der Zoom ist Safaris Automatik, nicht
   unsere — ohne Gegenregel passiert er. Man könnte ihn auch mit einer Zeile in
   der Kopfzeile abstellen (`maximum-scale=1` im viewport); das wäre kürzer,
   hielte die 13 px auch auf Touch und machte das Lint-Ventil überflüssig.
   Dagegen sprach: Die Feld-Regel ist bewährt und beweisbar, die Kopfzeilen-Zeile
   ruht auf Browser-Verhalten, das hier niemand nachmessen kann, und auf Android
   sperrte sie zusätzlich das Aufziehen mit zwei Fingern. SICHER SCHLÄGT SCHLANK.
   Der Preis ist bekannt und angenommen: Eingabefelder sind auf Touch 16 px statt
   der 13 px aus V-4b. Wer das später ändern will, ändert eine Entscheidung —
   nicht ein Versehen. */
@media screen and (pointer: coarse) {
    .suche { font-size: 16px; }   /* haus-ausnahme: 16px ist die Schwelle, unter der iOS beim Antippen zoomt — eine Grenze des Betriebssystems, keine Rolle, die ein Dach je anders auflösen würde */
}

/* ══ DAS LÖSCH-KREUZ ══ (20.08.2026, Chris: „brauchen wir überall")
   Ein Suchfeld mit Text braucht einen Weg zurück, der EIN Griff ist — auf dem
   Tablet ist Markieren-und-Löschen kein Weg. Das native Kreuz kam dafür nicht
   in Frage (siehe Regel darüber): Nur WebKit zeichnet es, in jeder Fassung
   anders, und es ist für einen Finger zu klein. Also zeichnen wir es selbst —
   einmal hier, sichtbar in jedem Werkzeug.

   DER PREIS ist wie bei der Auswahl eine Hülle je Feld: Ein <input> kann kein
   ::after tragen. Die Hülle zieht `suchfeld.js` beim Laden von allein ein; im
   Markup der Werkzeuge steht weiterhin nur das Feld.

   KEIN `width` an der Hülle — dieselbe Regel wie bei `.auswahl-huelle`: Ob sie
   die ganze Breite füllt oder in einer Kopfleiste mitfließt, ist Layout und
   gehört dem Dach. Jedes Dach gibt der Hülle dort die Rolle, die vorher das
   Feld hatte (Suite: 100 %, Büro: flex). */
.suche-huelle {
    position: relative;
    display: block;
    min-width: 0;                    /* darf in einer Flex-Zeile schrumpfen */
}
/* Versteckt jemand das FELD, geht die Hülle mit — sonst bliebe ein Kreuz ohne
   Feld stehen. Die Lehre stammt von der Auswahl-Hülle (Vertriebs-Cockpit). */
.suche-huelle:has(> .suche[hidden]) { display: none; }

/* 100 % der HÜLLE — Vertrag der Komponente, nicht Layout: Das Kreuz sitzt an
   deren rechtem Rand, ein schmaleres Feld ließe es daneben schweben. */
.suche-huelle > .suche {
    width: 100%;
    min-width: 0;
    padding-right: 32px;   /* haus-ausnahme: die Freihaltung für das Kreuz (4 rechts + 26 Knopf + Luft) — Geometrie dieses Bauteils, dieselbe Rechnung wie die 32px der Auswahl, keine Abstands-Entscheidung für die Leiter */
}

/* Der Knopf ist 26 px groß, das gezeichnete Kreuz nur 9: Die Fläche ist für
   den Finger, das Zeichen fürs Auge (Touch-Regel des Hauses). Er erscheint
   erst, wenn etwas im Feld steht — `suchfeld.js` setzt `hidden`. */
.suche-loeschen {
    position: absolute;
    right: 4px;
    top: 50%;
    transform: translateY(-50%);
    width: 26px;
    height: 26px;
    padding: 0;
    border: 0;
    background: none;
    cursor: pointer;
    /* KEINE Rundung, keine Hover-Fläche: Der Knopf hat keinen Grund, auf dem
       sie sichtbar wäre — das Kreuz allein wird beim Überfahren dunkler.
       (Und `--rundung-klein` gibt es nur in der Dokument-Welt; im Rennsport
       fiele die Zeile still auf den Browser-Wert zurück — der Token-Wächter
       von Pitwall hat sie am 20.08.2026 genau dafür gemeldet.) */
    color: var(--text-gedaempft);
    display: grid;
    place-items: center;
}
.suche-loeschen:hover { color: var(--text); }
.suche-loeschen[hidden] { display: none; }

/* Das Kreuz: zwei Striche, gedreht — dieselbe Bauweise wie der Chevron der
   Auswahl (kein Bild, keine Schrift, kein zweites Adressenpaar je Dach). */
.suche-loeschen::before,
.suche-loeschen::after {
    content: "";
    position: absolute;
    width: 11px;
    height: 1.5px;
    background: currentColor;
    border-radius: 1px;
}
.suche-loeschen::before { transform: rotate(45deg); }
.suche-loeschen::after  { transform: rotate(-45deg); }
/* ══ HAUS-BAUSTEIN: suchfeld ENDE ══ */

/* Die BREITE ist Dach-Sache, nicht Haus-Sache (siehe Kopf des Bausteins):
   Die Suite legt die Suche breit über die Liste. Seit dem Lösch-Kreuz
   (20.08.2026) gilt sie AUCH für die Hülle: Sie ist es, die seither in der
   Zeile steht — das Feld füllt nur noch sie aus. */
.suche, .suche-huelle { width: 100%; }

/* ══ HAUS-BAUSTEIN: auswahl ══ Quelle: Material/design/bausteine/auswahl.css
   HIER NIE EDITIEREN — der nächste Werkstatt-Sync überschreibt es,
   und zwar in ALLEN Dächern gleichzeitig. */
/* ══ AUSWAHL ══ das Dropdown, geschlossen
   Gemeinsam seit V-4c/2 (05.08.2026). Entschieden an der wahlkarte.html.

   DAS HAUS HATTE DREI PFEILE, und das war der ganze Unterschied — der Kasten
   war überall fast derselbe:
     nativ      18 Felder im Büro. Das Betriebssystem malt ihn. Sieht auf Mac,
                Windows und iPhone verschieden aus und lässt sich NICHT
                einfärben — in der dunklen Welt blieb er, was macOS für richtig
                hält.
     SVG-Bild    6 Felder im Vertrieb. Ein gezeichneter Pfeil als Hintergrund.
                Sein Ton steckt IN der Bild-Adresse und ist deshalb keine
                Rolle; er musste je Farbwelt einzeln gepflegt werden. Dieselbe
                Regel stand zusätzlich in ALLEN VIER Suite-Werkzeugen und traf
                dort kein einziges sichtbares Feld — vier tote Regeln.
     Chevron     9 Felder in der Suite. GEWÄHLT (Chris 05.08.2026).

   WARUM DER CHEVRON GEWINNT: Er ist keine Datei, sondern eine gedrehte Ecke
   aus zwei Rahmenlinien. Sein Ton ist eine ROLLE (--text-gedaempft) und folgt
   der Farbwelt von allein. Beim nächsten Farbwechsel ist hier nichts zu tun —
   bei der Bild-Variante wären es zwei Adressen je Dach gewesen. Die Rolle
   --menue-pfeil ist damit ersatzlos entfallen.

   DER PREIS ist eine Hülle je Feld: Der Pfeil hängt an ihr, nicht am
   Auswahlfeld selbst — ein <select> kann kein ::after tragen.

   DIE MASSE kommen aus der Suite (Polsterung 6/10, Mindesthöhe 34), NICHT die
   10/12 der Eingabefelder aus V-4b. Grund ist die Zeile, in der die Auswahl
   steht: Sie sitzt neben Suchfeldern und Knöpfen, die 34 px hoch sind.
   Der GESPERRTE Zustand dagegen kommt vom Feld — siehe unten. */

/* Die Hülle trägt den Pfeil. Kein `width` hier: Ob sie die ganze Breite füllt
   (im Formular) oder sich an ihren Inhalt schmiegt (in einer Kopfleiste), ist
   Layout und gehört dem Werkzeug. Als Block tut sie von allein das Richtige. */
.auswahl-huelle {
    position: relative;
    display: block;
}
/* Versteckt jemand das FELD, muss die Hülle mit — sonst bleibt ein Chevron
   ohne Feld in der Zeile stehen. Genau das passierte im Vertriebs-Cockpit:
   Im Vergleichs-Modus wird `cockpitMa` versteckt, der Pfeil schwebte daneben
   (Chris 05.08.2026). Vor V-4c/2 saß der Pfeil am Feld selbst und verschwand
   mit ihm — beim Umzug auf die Hülle ging diese Selbstverständlichkeit
   verloren. Sie steht hier, damit sie nicht in jedem Werkzeug neu auffällt. */
.auswahl-huelle:has(> .auswahl[hidden]) { display: none; }

.auswahl-huelle::after {
    content: "";
    position: absolute;
    right: 12px;
    top: 50%;
    width: 5.5px;                    /* optisch ~8px — Chris 02.07.2026, final nach Live-Vergleich 10/9/8/6 */
    height: 5.5px;
    border-right: 1.25px solid var(--text-gedaempft);
    border-bottom: 1.25px solid var(--text-gedaempft);
    transform: translateY(-65%) rotate(45deg);
    pointer-events: none;
}

.auswahl {
    /* 100 % der HÜLLE — nicht Layout, sondern der Vertrag der Komponente:
       Der Pfeil sitzt am rechten Rand der Hülle. Wäre das Feld schmaler,
       schwebte er daneben. */
    width: 100%;
    min-width: 0;
    appearance: none;
    -webkit-appearance: none;
    background: var(--eingabe);
    color: var(--text);
    border: 1px solid var(--linie);
    border-radius: var(--rundung-mittel);
    font-family: inherit;
    font-size: var(--schrift-sm);
    padding: var(--abstand-6) 32px var(--abstand-6) var(--abstand-10);   /* haus-ausnahme: die 32px sind die Freihaltung für den Pfeil (12 rechts + 5,5 breit + Luft), also Geometrie dieses Bauteils — keine Abstands-Entscheidung, die auf die Leiter gehörte */
    min-height: 34px;
    cursor: pointer;
    outline: none;
    transition: border-color 0.15s ease;
}

/* Fokus = Akzent-RAHMEN, kein Ring — Hausstil aller Dächer (siehe feld.css). */
.auswahl:focus { border-color: var(--akzent); }

/* GESPERRT wie beim Eingabefeld, nicht wie bisher in der Suite (`opacity: .55`).
   Die teure Lektion aus V-4b gilt hier genauso: Mit Deckkraft zeichnet iOS den
   Wert so blass, dass man ihn nicht mehr liest. Eine gesperrte Auswahl soll
   sagen „hier ändert niemand etwas" — nicht „hier steht vielleicht etwas". */
.auswahl:disabled {
    background: var(--linie-zart);
    color: var(--text-gedaempft);
    -webkit-text-fill-color: var(--text-gedaempft);
    opacity: 1;
    cursor: not-allowed;
}
/* ══ HAUS-BAUSTEIN: auswahl ENDE ══ */

/* ══ HAUS-BAUSTEIN: kaestchen ══ Quelle: Material/design/bausteine/kaestchen.css
   HIER NIE EDITIEREN — der nächste Werkstatt-Sync überschreibt es,
   und zwar in ALLEN Dächern gleichzeitig. */
/* ══ KÄSTCHEN ══ das Häkchen-Feld
   Gemeinsam seit V-4c/2 (05.08.2026). Entschieden an der wahlkarte.html.

   BEIDE DÄCHER WAREN SICH LÄNGST EINIG, ohne voneinander zu wissen: nativ, in
   der Markenfarbe getönt. Die Suite hat das am 29.06.2026 nach Chris' Urteil
   so gewählt („die native Variante war beliebter") und ihre selbstgezeichnete
   Box damals stillgelegt; QS macht es seit je genauso. Zu entscheiden blieb
   allein die GRÖSSE — 15 px (Suite) oder 17 px (QS). Chris am 05.08.2026:
   **15**, weil das Kästchen dann so groß ist wie die Schrift daneben.

   EINE KORREKTUR AUF DEM WEG: Ich hatte „neun Kästchen im Büro" gemeldet.
   Fünf davon sind SCHALTER — dort ist das Kästchen nur die Mechanik unter der
   Bahn und darf dieses Aussehen gerade nicht bekommen. Echte Kästchen gibt es
   vier: drei in QS, eines in Rennsport. Das in Rennsport hatte überhaupt keine
   Regel und war so groß und so blau, wie das Betriebssystem es zeichnet.

   NICHT HIER, SONDERN SUITE-LOKAL: die Kästchen-LISTE (anklickbare Zeilen mit
   Innenabstand und Hover). Das Büro hat sie nirgends, und ihr Hover-Ton
   (--karte-aktiv) ist eine Rolle, die es im Büro nicht gibt. Ein Baustein,
   den nur ein Dach benutzt und für den das andere erst eine Rolle erfinden
   müsste, gehört nicht ins Haus. */

.kaestchen {
    display: inline-flex;
    align-items: center;
    gap: var(--abstand-8);
    cursor: pointer;
    font-family: var(--schriftart-ui);
    font-size: var(--schrift-sm);
    color: var(--text);
    user-select: none;
}

/* Nativ, nur getönt: `accent-color` färbt Kasten und Häkchen des Betriebssystems.
   Bewusst KEIN eigener Kasten aus <span> — die native Variante wirkt schlanker,
   trägt das vertraute OS-Häkchen und braucht kein zusätzliches Markup.

   ZWEI SCHREIBWEISEN, weil es zwei Lagen gibt: In einem Formular steht das
   Kästchen in seiner Beschriftung (`<label class="kaestchen">`), in einer
   Tabellenzelle steht es allein (`<input class="kaestchen">`). QS hat drei von
   der zweiten Sorte — ohne diese Zeile hätten sie ihr Aussehen verloren. */
.kaestchen input,
input.kaestchen {
    accent-color: var(--akzent);
    width: 15px;
    height: 15px;
    margin: 0;
    cursor: pointer;
    flex-shrink: 0;
}

.kaestchen:has(input:disabled) { cursor: not-allowed; }
.kaestchen input:disabled ~ * { opacity: 0.55; }
/* ══ HAUS-BAUSTEIN: kaestchen ENDE ══ */

/* Kästchen-LISTE — bewusst SUITE-LOKAL, nicht im Haus-Baustein.
   Kästchen als anklickbare Zeilen mit Innenabstand und Hover (Bericht-Modul-
   Picker, Optionen-Gruppen): die ganze Zeile ist das Ziel, nicht nur das
   Kästchen. Die Büro-Tools haben so etwas nirgends, und der Hover-Ton
   --karte-aktiv ist eine Rolle, die es dort nicht gibt. Ein Baustein, für den
   das zweite Dach erst eine Rolle erfinden müsste, gehört nicht ins Haus. */
.kaestchen-liste {
    display: flex;
    flex-direction: column;
}
.kaestchen-liste .kaestchen {
    padding: var(--abstand-6) var(--abstand-8);
    border-radius: var(--rundung-mittel);
    transition: background 0.12s ease;
}
.kaestchen-liste .kaestchen:hover {
    background: var(--karte-aktiv);
}

/* ══ HAUS-BAUSTEIN: schalter ══ Quelle: Material/design/bausteine/schalter.css
   HIER NIE EDITIEREN — der nächste Werkstatt-Sync überschreibt es,
   und zwar in ALLEN Dächern gleichzeitig. */
/* ══ SCHALTER ══ der Kippschalter (an/aus)
   Gemeinsam seit V-4c/1 (05.08.2026).

   NUR DER SCHALTER SELBST — die Zeile drumherum (Beschriftung links, Wert
   rechts, Abstände) ist tool-eigen. Das Büro führt das seit je so und hat
   `.schalter-feldzeile` bewusst außerhalb des Kits gelassen: Dieselbe
   Optik steht mal in einer Formularzeile, mal in einer Kopfleiste.

   DIE NAMENSKOLLISION, die diese Etappe ausgelöst hat: `.toggle` hieß im
   Büro die SEGMENTGRUPPE (mehrere Knöpfe, einer aktiv), in der Suite der
   KIPPSCHALTER. Zwei Bauteile, ein Name. Aufgelöst wurde es an der
   schlafenden Seite: Der Suite-Schalter war im Markup NULL Mal in Gebrauch
   (nur der Styleguide zeigte ihn), also kostete das Umbenennen keine einzige
   Markup-Änderung. Das Büro-`.toggle` behält seinen Namen — er ist wieder
   eindeutig, sobald der Schalter überall `.schalter` heißt.

   MASSE UND FARBEN kommen vom Büro: Es führt den Schalter live an sechs
   Stellen, die Suite an keiner. Die Unterschiede lagen ohnehin unter der
   Feinjustage-Schwelle (Bahn 38×23 gegen 40×22, Knopf 17 gegen 16).

   EINGESCHALTET IST GRÜN (`--ok`, Chris 05.08.2026) — nicht Akzentblau, das
   die Suite vorgesehen hatte. Ein Schalter meldet einen ZUSTAND; Akzentblau
   ist im Haus die Farbe für „hier drückst du".

   Aus der Suite kommt, was das Büro nicht hatte: der gesperrte Zustand. */

.schalter {
    position: relative;
    display: inline-block;
    flex: 0 0 auto;
    cursor: pointer;
}

/* Der native Eingang bleibt fokussierbar, wird nur unsichtbar — nicht
   `display:none`, das nähme ihn aus der Tastatur-Reihenfolge und aus dem
   Formular. */
.schalter input {
    position: absolute;
    opacity: 0;
    width: 0;
    height: 0;
}

.schalter .bahn {
    display: block;
    position: relative;
    width: 38px;
    height: 23px;
    border-radius: 999px;   /* Pille — bewusst voll rund, unabhängig vom globalen Radius */
    background: var(--linie);
    transition: background 0.15s;
}
.schalter .bahn::after {
    content: "";
    position: absolute;
    top: 3px;
    left: 3px;
    width: 17px;
    height: 17px;
    border-radius: 50%;
    background: var(--flaeche-erhaben);
    box-shadow: var(--schatten-knopf);
    transition: left 0.15s;
}

.schalter input:checked + .bahn { background: var(--ok); }
.schalter input:checked + .bahn::after { left: 18px; }   /* haus-ausnahme: die Strecke des Griffs — Bahn 38 minus Rand 3 minus Griff 17. Geometrie dieses Bauteils, kein Abstand auf der Leiter */

/* Gesperrt: der Zeiger sagt es, und der Schalter tritt zurück. Aus dem
   Suite-Kit übernommen — das Büro hatte für diesen Fall gar nichts. */
.schalter:has(input:disabled) { cursor: not-allowed; }
.schalter input:disabled + .bahn { opacity: 0.55; }
/* ══ HAUS-BAUSTEIN: schalter ENDE ══ */


/* ═══ K5-Regel auch für die FORMULAR-Welt (Chris, 10.08.2026) ═══
   "Ganz klar Nummer 1": Versehentliches Ziehen markierte in Sollkurven,
   Aufträge und Benutzerverwaltung Labels, Chips und halbe Tabellen blau —
   jetzt ist die Bedienung stumm wie in einer nativen App. Wer Werte
   herausholen will, öffnet das Modal (Eingabefelder BLEIBEN markierbar)
   oder exportiert. Bewusst GEGEN die Alternative "Chrome stumm, Tabellen-
   zellen markierbar" entschieden — erst mal beobachten, wie es sich in den
   nächsten Wochen anfühlt; der Rückweg ist eine Zeile.
   Wortgleich mit cockpit.css (K5) — Dashboard abonniert BEIDE Bausteine und
   erbt die Regel doppelt mit identischem Wert: kein Konflikt, kein Drift-
   Risiko, denn geändert wird sie nur über diese zwei Kit-Quellen.
   Das BÜRO-DACH (QS/Vertrieb/Sicherheit/Logistik) ist absichtlich NICHT
   dabei — eigene Werkstatt, eigener Beschluss, wenn Chris es dort will. */
body {
    user-select: none;
    -webkit-user-select: none;
}
input, textarea, [contenteditable] {
    user-select: text;
    -webkit-user-select: text;
}

/* ═══ Formular-Grundton + Passwort-Schlüssel — SUITE-Beschluss (14.08.2026) ═══
   Stand bis dahin byte-identisch DREIMAL in den Modulen (Dashboard, Aufträge,
   Benutzerverwaltung — Kit-Audit vom 15.08.), Sollkurven hatte es gar nicht.
   (1) Formularelemente erben Schrift und Farbe des Werkzeugs statt der
       Browser-Voreinstellung — sonst tippt man in Arial in einem Roboto-Tool.
   (2) Der Passwort-Manager-Schlüssel wird ausgeblendet. Der HAUS-Baustein
       „feld" oben nimmt bewusst nur das Kontakte-Symbol (Chris 05.08.) und
       lässt den Schlüssel stehen — die SUITE hat sich beim Login anders
       entschieden (er drängte sich ins Feld). Darum hier, ausserhalb der
       Haus-Marker: eine Suite-Entscheidung, keine Haus-Entscheidung, und
       das Büro-Dach behält seinen Schlüssel. */
button, input, textarea, select {
    font-family: inherit;
    color: inherit;
}
input::-webkit-credentials-auto-fill-button {
    visibility: hidden;
    display: none !important;
    pointer-events: none;
    height: 0;
    width: 0;
    margin: 0;
}

.modal-backdrop {
    position: fixed;
    inset: 0;
    background: rgba(0, 0, 0, 0.6);
    display: none;
    align-items: center;
    justify-content: center;
    z-index: 100;
    padding: var(--abstand-16);
}
.modal-backdrop.open { display: flex; }

.modal {
    background: var(--flaeche-gehoben);
    border: 1px solid var(--linie);
    border-radius: var(--rundung-gross);
    box-shadow: var(--schatten);
    max-width: 520px;
    width: 100%;
    max-height: 85vh;
    display: flex;
    flex-direction: column;
    overflow: hidden;
}
/* ══ HAUS-BAUSTEIN: dialog-breiten ══ Quelle: Material/design/bausteine/dialog-breiten.css
   HIER NIE EDITIEREN — der nächste Werkstatt-Sync überschreibt es,
   und zwar in ALLEN Dächern gleichzeitig. */
/* ══ BREITEN-LEITER ══ S 380 · M 520 (Standard, oben) · L 680 · XL 880
   Vier Stufen fürs ganze Haus (Chris 04.08.2026), gleich benannt in Suite,
   Büro und Racing. Vorher hieß dieselbe Stufe je nach Werkzeug .modal-md,
   .modal-breit oder gar nichts, und zwischen M und L hatten sich zwei
   Einzelstücke bei 560 eingenistet — die sind eingesammelt.
   Jedes Modal nimmt die KLEINSTE Stufe, die passt: Komponente zentral,
   Größe ist Kontext-Wahl. Wer eine fünfte Zahl braucht, braucht meist
   keinen Dialog, sondern eine Seite. */
.modal-s  { max-width: 380px; }
.modal-l  { max-width: 680px; }
.modal-xl { max-width: 880px; }
/* ══ HAUS-BAUSTEIN: dialog-breiten ENDE ══ */
.modal.modal-tall { max-height: 90vh; height: 80vh; }   /* hohe Variante, z.B. Tabellen-Modale */

/* ══ HAUS-BAUSTEIN: dialog ══ Quelle: Material/design/bausteine/dialog.css
   HIER NIE EDITIEREN — der nächste Werkstatt-Sync überschreibt es,
   und zwar in ALLEN Dächern gleichzeitig. */
/* ══ DIALOG — Innenleben ══ Kopf · Schließen-Knopf · Rumpf · Fuß
   Gemeinsam seit V-2 (04.08.2026). Maße nach der Dialogkarte entschieden:
   BÜRO gewinnt — mehr Polsterung, größerer Schließen-Knopf, halbfetter
   Titel. Die Büro-Fassung ist die durchgeprüfte, und das größere Ziel für
   den Finger zählt am Handy, wo „Sicherheit" bedient wird.

   NICHT hier, absichtlich:
   · Die HÜLLE (.overlay / .modal-backdrop). Die Dächer verstecken sie
     verschieden — Büro über das [hidden]-Attribut, Suite über eine
     .open-Klasse. Vereinen hieße, in acht Werkzeugen JavaScript umzubauen:
     viel Risiko für wenig Gewinn.
   · Die SCHALE (.modal selbst): Fläche, Schatten, Eckenradius. Dort
     unterscheiden sich die Dächer mit Grund. Die Suite setzt den Dialog auf
     ihre DRITTE Flächenstufe, damit er über den Panels schwebt — die helle
     Welt hat nur zwei Stufen, über Weiß liegt nichts. Und ein Schatten mit
     18 % Schwarz, der auf Papierweiß richtig sitzt, ist auf dunklem Grund
     unsichtbar. Beides wäre nur durch Raten zu vereinen.

   WAS DER DIALOG AN DER SCHALE ERWARTET (jedes Dach setzt es selbst):
   display:flex · flex-direction:column · overflow:hidden · max-height.
   Darauf beruht das beschlossene Verhalten: Kopf und Fuß bleiben stehen,
   nur der Rumpf scrollt (Chris 04.08.2026, Suite-Bauweise). */

.modal-kopf {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: var(--abstand-12);
    padding: var(--abstand-16) var(--abstand-20);
    border-bottom: 1px solid var(--linie);
    flex-shrink: 0;   /* der Kopf gibt nicht nach, wenn der Rumpf lang wird */
}
.modal-kopf h2 {
    margin: 0;
    font-size: var(--schrift-grund);
    font-weight: var(--gewicht-halbfett);
}
.modal-x {
    border: 0;
    background: transparent;
    color: var(--text-leise);
    font-size: var(--schrift-titel);
    line-height: 1;
    cursor: pointer;
    padding: var(--abstand-4) var(--abstand-8);
    border-radius: var(--rundung-mittel);
    font-family: inherit;
}
/* Die Fläche beim Überfahren nur dort, wo es einen Zeiger GIBT — am Handy
   bliebe sie sonst nach dem Antippen kleben. */
@media (hover: hover) {
    .modal-x:hover { background: var(--linie-zart); color: var(--text); }
}

/* Der Rumpf ist das einzige Teil, das nachgibt. `min-height: 0` ist dabei
   kein Schmuck: Ohne diese Zeile weigert sich ein Flex-Kind zu schrumpfen
   und drückt den Fuß aus dem Dialog heraus — die Regel stammt aus der
   Suite und war dort schon so kommentiert. */
.modal-body {
    flex: 1;
    min-height: 0;
    overflow-y: auto;
    padding: var(--abstand-20);
}

.modal-fuss {
    display: flex;
    gap: var(--abstand-10);
    align-items: center;
    padding: var(--abstand-16) var(--abstand-20);
    border-top: 1px solid var(--linie);
    flex-wrap: wrap;
    flex-shrink: 0;
}
/* Zwei Gruppen statt einer Ausrichtung: Ohne .links steht auch so alles
   rechts, weil .rechts sich den freien Platz nimmt. Umgekehrt ginge es
   nicht — ein reines justify-content: flex-end kann keinen Löschen-Knopf
   nach links stellen. Deshalb hat diese Bauweise die der Suite abgelöst. */
.modal-fuss .links  { display: flex; gap: var(--abstand-8);  align-items: center; flex-wrap: wrap; }
.modal-fuss .rechts { display: flex; gap: var(--abstand-10); align-items: center; margin-left: auto; }
/* Muss display:flex schlagen, sonst bleibt ein ausgeblendeter Fuß sichtbar. */
.modal-fuss[hidden] { display: none; }

/* ── Der Fehler IM Dialog ────────────────────────────────────────────────
   Kam mit V-7 (05.08.2026) ins Haus. Er stand nur im Büro-Dach, obwohl er
   nichts Büro-Eigenes hat: ein Satz, der über dem Formular erscheint, wenn
   das Abschicken nicht geklappt hat. Die Suite schickte solche Sätze bisher
   als schwebende Meldung — was für den Arbeitsbildschirm richtig ist, aber
   nicht für ein Formular, das man gerade ausgefüllt hat. Der Fehler gehört
   dorthin, wo der Blick schon ist.

   Er ist von Haus aus UNSICHTBAR und wird über `.zeigen` eingeblendet — so
   muss das JavaScript nur eine Klasse schalten und den Text setzen. */
.modal-fehler {
    display: none;
    margin: 0 0 var(--abstand-16);
    padding: var(--abstand-10) var(--abstand-12);
    border-radius: var(--rundung-mittel);
    background: color-mix(in srgb, var(--fehler) 9%, transparent);
    color: var(--fehler);
    font-size: var(--schrift-kompakt);
}
.modal-fehler.zeigen { display: block; }
/* ══ HAUS-BAUSTEIN: dialog ENDE ══ */

.user-acc {
    display: inline-flex;
    align-items: center;
    gap: var(--abstand-8);
    background: transparent;
    border: none;
    padding: 2px 4px;
    cursor: pointer;
    color: var(--text-gedaempft);
    font-size: var(--schrift-xs);
    border-radius: var(--rundung-mittel);
}

.user-acc:hover { color: var(--text); background: var(--karte); }

.user-acc-avatar {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 26px;
    height: 26px;
    border-radius: 50%;
    background: var(--eingabe);
    border: 1px solid var(--linie-stark);
    color: var(--akzent-aktiv);
    font-size: var(--schrift-2xs);
    font-weight: var(--gewicht-halbfett);
    letter-spacing: 0.04em;
    flex-shrink: 0;
}

.user-acc-name {
    max-width: 180px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.user-acc-caret {
    width: 8px;
    height: 5px;
    flex-shrink: 0;
    background-image: var(--konto-haken);
    background-repeat: no-repeat;
    background-position: center;
}

.user-menu {
    position: fixed;
    z-index: 150;          /* ueber Drawer/Inhalt, unter dem Login-Gate (300) */
    min-width: 220px;
    background: var(--flaeche-gehoben);
    border: 1px solid var(--linie);
    border-radius: var(--rundung-mittel);
    box-shadow: var(--schatten);
    padding: var(--abstand-8) 0;
}

.user-menu-kopf {
    display: flex;
    align-items: center;
    gap: var(--abstand-12);
    padding: var(--abstand-8) var(--abstand-12);
}

.user-menu-avatar {
    width: 34px;
    height: 34px;
    font-size: var(--schrift-xs);
}

.user-menu-name { font-size: var(--schrift-sm); color: var(--text); }

.user-menu-rolle {
    font-size: var(--schrift-2xs);
    color: var(--text-leise);
    text-transform: uppercase;
    letter-spacing: var(--laufweite);
}

.user-menu-trenner {
    height: 1px;
    background: var(--linie);
    margin: var(--abstand-8) 0;
}

.user-menu-label {
    padding: 2px var(--abstand-12);
    font-size: var(--schrift-2xs);
    color: var(--text-leise);
    text-transform: uppercase;
    letter-spacing: var(--laufweite);
}

.user-menu-item {
    display: flex;
    align-items: center;
    justify-content: space-between;
    width: 100%;
    background: none;
    border: none;
    padding: 7px var(--abstand-12);
    color: var(--text-gedaempft);
    font-size: var(--schrift-sm);
    text-align: left;
    cursor: pointer;
}

.user-menu-item:hover { background: var(--karte); color: var(--text); }

.user-menu-check { opacity: 0; color: var(--akzent-aktiv); }
.user-menu-item.aktiv { color: var(--text); }
.user-menu-item.aktiv .user-menu-check { opacity: 1; }

/* ══ HAUS-BAUSTEIN: menue ══ Quelle: Material/design/bausteine/menue.css
   HIER NIE EDITIEREN — der nächste Werkstatt-Sync überschreibt es,
   und zwar in ALLEN Dächern gleichzeitig. */
/* ══ MENUE ══ das schwebende Popup an einem Anker
   Gemeinsam seit 19.08.2026 (Auswahl-Listen-Etappe). Herkunft: Suite
   ui-kit/bausteine/menu.css — dort seit Wochen im Einsatz (Account-Menü,
   ⋮-Zeilenaktionen, Custom-Select). Das Büro-Dach hatte KEINE Popup-Schale;
   mit der gemeinsamen Auswahl-Liste braucht es sie.

   DREI NUTZER aus EINER Komponente:
     · ⋮-Zeilenaktionen (Bearbeiten/…/Löschen) mit .kebab als Auslöser
     · Auswahl-Liste (.cs* — bausteine/auswahl-liste.css + .js)
     · Account-Menü der Suite (eigene Datei, gleiche Anatomie)

   Position setzt das JS per getBoundingClientRect (randsicher). z-index 1100
   ist Anatomie: über den Modalen beider Dächer (Büro ≤ 100, Suite < 1100) —
   ein Select IM Modal muss sein Popup darüber öffnen können.

   ZWEI ROLLEN-ENTSCHEIDE beim Umzug in die Werkstatt (19.08.2026), weil ein
   geteilter Baustein nur Rollen sagen darf, die BEIDE Dächer auflösen:
     · Hover war in der Suite var(--karte) — das ging nur, weil der Menügrund
       dort dunkler ist als die Karte. Im hellen Büro wäre Weiß auf Weiß.
       Jetzt var(--karte-aktiv): DIE Hover-Rolle des Hauses, in beiden
       Dächern definiert. Suite-Delta: #222B3C → #2a3345, eine Nuance heller.
     · Schatten war in der Suite var(--schatten) — eine Rolle, die das Büro
       nicht führt (dort ist die Leiter benannt: kante/knopf/schwebend/
       fenster). Ein Popup schwebt: var(--schatten-schwebend).
       Suite-Delta: 0 4px 16px/.30 → 0 6px 24px/.35, minimal weicher.

   Markup (Zeilenaktionen):
     <button class="kebab" data-act="menu" aria-haspopup="true">⋮</button>
     <div class="menu" hidden>
        <button class="menu-item">Bearbeiten</button>
        <button class="menu-item danger">Löschen</button>
     </div>
   ══════════════════════════════════════════════════════════════════════════ */

.menu {
    position: fixed;
    z-index: 1100;
    min-width: 168px;
    background: var(--flaeche-gehoben);
    border: 1px solid var(--linie);
    border-radius: var(--rundung-mittel);
    box-shadow: var(--schatten-schwebend);
    padding: var(--abstand-4);
    display: flex;
    flex-direction: column;
    /* Luft zwischen den Einträgen: Hervorhebung des Gewählten und Hover des
       Nachbarn sind zwei gefüllte, gerundete Flächen — ohne Abstand backen
       sie zu einem Klumpen zusammen (Chris am Bild, 19.08.2026). 2px ist
       Feinjustage unterm 4er-Raster, wie beim kleinen Knopf. */
    gap: 2px;
}
.menu[hidden] { display: none; }

.menu-item {
    background: transparent;
    border: none;
    text-align: left;
    padding: var(--abstand-8) var(--abstand-12);
    border-radius: var(--rundung-mittel);
    color: var(--text);
    font-family: var(--schriftart-ui);
    font-size: var(--schrift-sm);
    cursor: pointer;
    white-space: nowrap;
}
.menu-item:hover,
.menu-item.is-active { background: var(--karte-aktiv); }   /* :hover + Tastatur-Hervorhebung */
.menu-item.danger { color: var(--fehler); }
.menu-item.danger:hover { background: color-mix(in srgb, var(--fehler) 12%, transparent); }

/* GESPERRTER Eintrag — nativ zeigt ihn das OS ausgegraut und übergeht ihn in
   der Tastatur; das JS der Auswahl-Liste tut dasselbe. Ein disabled-<button>
   feuert keinen Klick, aber :hover matcht trotzdem — darum die Rücknahme. */
.menu-item.is-disabled { color: var(--text-leise); cursor: default; }
.menu-item.is-disabled:hover { background: transparent; }

/* Kebab-Auslöser (⋮) — randloser, kompakter Trigger fürs .menu-Popup.
   Bewusst OHNE .btn-Rahmen/min-height (34px zog die Tabellenzeile in die Höhe);
   Punkte dicker durch größeren, fetteren Glyph. Zentral, damit jedes Tool
   denselben ⋮ nutzt (Benutzer-Tabelle, Auftrags-Baum …). */
.kebab {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 26px;
    height: 22px;
    padding: 0;
    border: none;
    background: transparent;
    color: var(--text-gedaempft);
    font-family: var(--schriftart-ui);
    font-size: var(--schrift-lg);       /* 18px — größere Punkte */
    font-weight: var(--gewicht-fett);   /* 700 — dickere Punkte */
    line-height: 1;
    border-radius: var(--rundung-mittel);
    cursor: pointer;
}
.kebab:hover { background: var(--karte-aktiv); color: var(--text); }
/* ══ HAUS-BAUSTEIN: menue ENDE ══ */

/* ══ HAUS-BAUSTEIN: auswahl-liste ══ Quelle: Material/design/bausteine/auswahl-liste.css
   HIER NIE EDITIEREN — der nächste Werkstatt-Sync überschreibt es,
   und zwar in ALLEN Dächern gleichzeitig. */
/* ══ AUSWAHL-LISTE ══ das Dropdown, GEÖFFNET
   Gemeinsam seit 19.08.2026. Herkunft: Suite ui-kit (menu.css + customselect.js).

   Der Baustein „auswahl" (V-4c/2) hat das GESCHLOSSENE Feld vereinheitlicht —
   die geöffnete Liste malte weiter das Betriebssystem: weißes OS-Popup mit
   Systemblau, auf jedem Rechner anders, im dunklen Werkzeug ein Loch im Bild.
   Und zwar UNHEILBAR: `color-scheme: dark` stand längst in beiden Dächern und
   erreicht die Liste trotzdem nicht — sie folgt dem Rechner, nicht der Seite
   (Chris' Befund am Logistik-Bild, 18.08.2026).

   DAS PRINZIP (aus der Suite übernommen): Das native <select> bleibt als
   Wert-/Form-Träger im DOM (display:none via .cs-native) und feuert weiter
   'change' — bestehende Handler laufen 1:1. Die Anzeige übernimmt ein
   .cs-trigger im Look des geschlossenen Feldes, die Liste ist ein .menu-Popup
   (bausteine/menue.css). Das Verhalten liefert bausteine/auswahl-liste.js.

   Der TRIGGER trägt wörtlich die Deklarationen aus auswahl.css — gleiche
   Polsterung, gleiche Mindesthöhe, gleicher Chevron, gleicher Gesperrt-
   Zustand. Ein Feld, zwei Zustände, EINE Optik. */

/* Das aufgerüstete native Feld: unsichtbar, aber im DOM und im Formular. */
select.cs-native { display: none; }

/* Sitzt das Feld in einer .auswahl-huelle, übernimmt der Trigger den Chevron —
   der Pfeil der Hülle geht aus, sonst stünden zwei übereinander. */
.auswahl-huelle.cs-host::after { display: none; }

.cs { position: relative; display: block; width: 100%; }

.cs-trigger {
    position: relative;
    width: 100%;
    text-align: left;
    background: var(--eingabe);
    border: 1px solid var(--linie);
    border-radius: var(--rundung-mittel);
    color: var(--text);
    /* inherit statt einer Schrift-Rolle — Doktrin aus auswahl.css: das Feld
       spricht die Schrift seiner Umgebung. Ein <button> erbt von sich aus
       NICHT, darum steht es hier ausdrücklich. */
    font-family: inherit;
    font-size: var(--schrift-sm);
    padding: var(--abstand-6) 32px var(--abstand-6) var(--abstand-10);   /* haus-ausnahme: die 32px sind die Freihaltung für den Pfeil (12 rechts + 5,5 breit + Luft), also Geometrie dieses Bauteils — keine Abstands-Entscheidung, die auf die Leiter gehörte */
    min-height: 34px;
    cursor: pointer;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    transition: border-color 0.15s ease;
}
.cs-trigger::after {                              /* Chevron — dieselbe gedrehte Ecke wie .auswahl-huelle */
    content: "";
    position: absolute;
    right: 12px;
    top: 50%;
    width: 5.5px;                                 /* optisch ~8px — Chris 02.07.2026, final */
    height: 5.5px;
    border-right: 1.25px solid var(--text-gedaempft);
    border-bottom: 1.25px solid var(--text-gedaempft);
    transform: translateY(-65%) rotate(45deg);
    pointer-events: none;
}

/* Fokus = Akzent-RAHMEN, kein Ring — Hausstil aller Dächer (siehe feld.css). */
.cs-trigger:focus { outline: none; border-color: var(--akzent); }

/* GESPERRT — wörtlich der Zustand aus auswahl.css: sagt „hier ändert niemand
   etwas", nicht „hier steht vielleicht etwas" (keine Deckkraft, V-4b-Lektion).
   Das JS spiegelt das disabled des nativen Feldes auf den Trigger. */
.cs-trigger:disabled {
    background: var(--linie-zart);
    color: var(--text-gedaempft);
    opacity: 1;
    cursor: not-allowed;
}

/* Versteckt jemand das FELD (hidden-Attribut), verschwindet die ganze
   Aufrüstung mit — Trigger UND Hülle. Ohne diese Regeln stünde ein sichtbarer
   Trigger vor einem unsichtbaren Feld: genau der Fall des Vertriebs-Cockpits
   (#zeitraum wird im Vergleichs-Modus versteckt). Die Schwester-Regel in
   auswahl.css (`> .auswahl[hidden]`) greift nach der Aufrüstung nicht mehr,
   weil .cs als Zwischenschicht dazwischenrückt. */
.cs:has(> .cs-native[hidden]) { display: none; }
.auswahl-huelle.cs-host:has(.cs-native[hidden]) { display: none; }

/* Lange Listen (z. B. Kunden) scrollen im Popup statt den Schirm zu fluten. */
.cs-pop { max-height: 280px; overflow-y: auto; }

/* Der aktuell gewählte Wert in der offenen Liste. */
.menu-item.is-sel { color: var(--akzent); }
/* ══ HAUS-BAUSTEIN: auswahl-liste ENDE ══ */

input[type="checkbox"] {
    appearance: none;
    -webkit-appearance: none;
    box-sizing: border-box;
    width: 13px;
    height: 13px;
    border: none;
    border-radius: 3px;
    background: #fff;
    position: relative;
    margin: 0;
    padding: 0;
    cursor: pointer;
    flex-shrink: 0;
    vertical-align: middle;   /* sitzt gerade — in der Zelle wie neben dem Text */
}
input[type="checkbox"]:checked,
input[type="checkbox"]:indeterminate { background: var(--akzent); }

/* Häkchen als SVG im Hintergrund, mittig gesetzt — NICHT als gedrehtes
   Winkel-Element. Zwei Anläufe mit `rotate(45deg)` saßen schief, und das ist
   kein Zufall: Ein Rechteck mit zwei Kanten hat seine Tinte NICHT in der
   Mitte, nach der Drehung erst recht nicht — man zentriert dann die falsche
   Sache und korrigiert mit Nachkommastellen hinterher. Ein Bild dagegen
   zentriert der Browser selbst (`center`), und das Häkchen ist im viewBox
   bereits mittig gezeichnet. Kein Rechnen, keine halben Pixel.
   Das SVG steht inline — keine Datei, kein Ladevorgang. */
input[type="checkbox"]:checked {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath d='M2.5 6.2 L4.8 8.5 L9.5 3.5' fill='none' stroke='white' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: center;
    background-size: 100% 100%;
}
/* Unbestimmt (Kopf-Kästchen „einige gewählt"): Strich statt Häkchen. */
input[type="checkbox"]:indeterminate::after {
    content: "";
    position: absolute;
    left: 2.5px;
    top: 5.5px;
    width: 8px;
    height: 2px;
    background: #fff;
    border-radius: 1px;
}
input[type="checkbox"]:disabled { opacity: 0.55; cursor: not-allowed; }
/* Fokus: Der Haus-Fokus färbt den RAHMEN — den gibt es hier nicht mehr,
   also ein Ring, damit Tastatur-Bedienung sichtbar bleibt. */
input[type="checkbox"]:focus-visible {
    outline: 2px solid var(--akzent);
    outline-offset: 2px;
}

/* ══ HAUS-BAUSTEIN: anmeldung ══ Quelle: Material/design/bausteine/anmeldung.css
   HIER NIE EDITIEREN — der nächste Werkstatt-Sync überschreibt es,
   und zwar in ALLEN Dächern gleichzeitig. */
/* ══ ANMELDUNG ══ das Tor: vollflächig, ein Formular, mehr nicht
   Gemeinsam seit V-7 (05.08.2026). Entschieden an der loginkarte.html.

   DIE KLEINSTE FAMILIE DER REIHE — und das ist ein Ergebnis, kein Zufall.
   Felder (V-4b), Knopf (V-3), Dialog und Breite (V-2, V-1) waren hier längst
   dieselben; die Anmeldung besteht fast nur aus Bauteilen, die schon
   gemeinsam sind. Übrig blieben zwei Fragen, und beide hat Chris am
   05.08.2026 entschieden:

     A  DAS LOGO, in beiden Dächern. Die Anmeldung ist die einzige Stelle, an
        der ein Werkzeug sagt, VON WEM es ist; welches es ist, sagt die Zeile
        darunter. Die Suite hatte bis dahin keine einzige Bilddatei — das
        Logo reist jetzt über den Kit-Sync mit, wie die Schriften.
     B  DER FEHLER STEHT IM DIALOG, über den Feldern. Das schränkt die
        V-6-Entscheidung („Fehler unten Mitte, bleibt stehen") für genau
        diesen Fall ein, und zwar mit Grund: Ein Anmelde-Tor ist kein
        Arbeitsbildschirm. Es füllt die ganze Fläche, hat ein einziges
        Formular — und die schwebende Meldung landete unten in der Mitte,
        also am einzigen Ort, an dem man gerade NICHT hinsieht. Der Kasten
        dafür ist `.modal-fehler` aus dem Dialog-Baustein.
     C  DIE AUSFÜLLHILFE BLEIBT AN. Ein Passwort-Manager, der Benutzer und
        Passwort einträgt, ist auf einem Werkstatt-Rechner ein Gewinn; wer
        keinen benutzt, merkt nichts davon. (Das ist Markup, kein CSS —
        `autocomplete="on"` am Formular.)

   WARUM DER LOGIN SEINEN EIGENEN RUMPF BAUT und nicht `.modal-body` nimmt:
   Er ist der einzige Dialog ohne Fuß. Kopf und Rumpf sitzen direkt
   aufeinander, und der Rumpf IST das Formular. Die zwei Zeilen `flex: 1` und
   `min-height: 0` sind dabei keine Kosmetik: Seit V-2 ist `.modal` eine
   Flex-Spalte mit `max-height: 85vh` — ohne sie wäre der Inhalt bei kleinem
   Fenster abgeschnitten und der Anmelde-Knopf säße unerreichbar unter der
   Kante. Gefunden 2026-08-04 beim Durchzählen der Dialoge, nicht von einem
   Test: 331 Proben liefen an der Stelle grün vorbei. */

/* Vollflächig und DECKEND — hinter dem Tor darf nichts zu sehen sein. */
.anmeldung {
    background: var(--flaeche);
    align-items: center;
}

.anmelde-karte {
    max-width: 380px;   /* Stufe S der Breiten-Leiter (dialog-breiten.css) */
    box-shadow: var(--schatten-fenster);
}

.anmelde-kopf {
    padding: 28px 28px 0;   /* haus-ausnahme: 28px ist die Anatomie dieser einen Karte — sie sitzt bewusst luftiger als ein Arbeits-Dialog, weil auf ihr nichts steht außer der Anmeldung */
    flex-shrink: 0;
}

.anmelde-body {
    padding: var(--abstand-16) 28px 28px;   /* haus-ausnahme: siehe Kopf — dieselben 28px, damit Logo und Formular auf einer Kante stehen */
    display: flex;
    flex-direction: column;
    gap: var(--abstand-14);
    flex: 1;
    min-height: 0;
    overflow-y: auto;
}

/* Welches Werkzeug — direkt unter dem Logo, das sagt, von wem es ist. */
.anmelde-titel {
    margin: 0;
    font-size: var(--schrift-grund);
    font-weight: var(--gewicht-halbfett);
    color: var(--text);
}

/* Die kleine Zeile unter dem Titel — wer sie braucht, nimmt sie: Die Suite
   schreibt dort „ProKASRO Suite" bzw. „Anmeldung", das Büro sagt beides schon
   im Titel und lässt sie weg. Ein Baustein darf mehr anbieten, als jedes Dach
   benutzt; er darf nur nichts ERZWINGEN. */
.anmelde-untertitel {
    color: var(--text-leise);
    font-size: var(--schrift-xs);
    text-transform: uppercase;
    letter-spacing: var(--laufweite);
    margin: -8px 0 0;   /* zieht sie an den Titel heran, gegen den Spalten-Abstand */
}

/* Der Anmelde-Knopf nimmt die volle Breite: Es gibt nichts daneben. */
.anmelde-body .btn-primaer {
    width: 100%;
    text-align: center;
    margin-top: 2px;
    padding: var(--abstand-12) var(--abstand-16);
}
/* ══ HAUS-BAUSTEIN: anmeldung ENDE ══ */

/* Das Tor liegt ÜBER allem, auch über dem Konto-Menü (150). Eigene Zeile,
   weil die Stapel-Ordnung eine Dach-Frage ist: Das Büro hat kein Konto-Menü
   und kommt dort mit 60 aus. */
.anmeldung { z-index: 300; }

/* Das Logo. Dach-eigen und NICHT im Baustein, weil die Einfärbung eine
   Dach-Frage ist: Die Datei ist dunkelblau (Logo-Navy). Das Büro dreht sie nur
   in seiner DUNKLEN Welt auf Weiß und lässt sie hell dunkel — die Suite hat
   überhaupt nur eine dunkle Welt, hier gilt es immer. Ohne diese Zeile stünde
   ein dunkelblaues Logo auf dunkelblauem Grund: unsichtbar. */
.logo {
    width: 130px;
    height: auto;
    display: block;
    filter: brightness(0) invert(1);
}
