/*
 * Generiert aus @bro/design-tokens (`pnpm css:generieren`) — NICHT von Hand bearbeiten.
 * Quelle der Wahrheit: Design-Canvas (Stand 28.08.2026) → src/tokens.ts (B17).
 * Mandanten-Branding überschreibt einzelne Variablen (z. B. --bro-akzent) — nie diese Datei.
 */

:root {
  --bro-flaeche-0: #f5f5f3;
  --bro-flaeche-1: #ffffff;
  --bro-tinte-1: #1d2321;
  --bro-tinte-2: #5c6663;
  --bro-tinte-3: #8a938f;
  --bro-linie: #e4e6e2;
  --bro-akzent: #116e64;
  --bro-akzent-tinte: #ffffff;
  --bro-erfolg: #2e7d4f;
  --bro-warnung: #b26a00;
  --bro-fehler: #b3372f;
  --bro-portal-airbnb: #e31c5f;
  --bro-portal-booking: #003580;
  --bro-portal-booking-hell: #0071c2;
  --bro-portal-tinte: #ffffff;
  --bro-akzent-flaeche: color-mix(in oklab, var(--bro-akzent) 9%, #ffffff);
  --bro-radius-s: 6px;
  --bro-radius-m: 10px;
  --bro-radius-l: 16px;
  --bro-schatten: 0 1px 2px rgba(18, 26, 23, 0.05);
  --bro-abstand-4: 4px;
  --bro-abstand-8: 8px;
  --bro-abstand-12: 12px;
  --bro-abstand-16: 16px;
  --bro-abstand-24: 24px;
  --bro-abstand-32: 32px;
  --bro-schrift-familie: "Hanken Grotesk", system-ui, "Segoe UI", sans-serif;
  --bro-schrift-anzeige-groesse: 28px;
  --bro-schrift-anzeige-zeilenhoehe: 36px;
  --bro-schrift-anzeige-gewicht: 700;
  --bro-schrift-titel-groesse: 18px;
  --bro-schrift-titel-zeilenhoehe: 26px;
  --bro-schrift-titel-gewicht: 700;
  --bro-schrift-betont-groesse: 15px;
  --bro-schrift-betont-zeilenhoehe: 22px;
  --bro-schrift-betont-gewicht: 600;
  --bro-schrift-fliesstext-groesse: 14px;
  --bro-schrift-fliesstext-zeilenhoehe: 21px;
  --bro-schrift-fliesstext-gewicht: 400;
  --bro-schrift-klein-groesse: 13px;
  --bro-schrift-klein-zeilenhoehe: 18px;
  --bro-schrift-klein-gewicht: 400;
  --bro-schrift-fein-groesse: 12.5px;
  --bro-schrift-fein-zeilenhoehe: 17px;
  --bro-schrift-fein-gewicht: 600;
  --bro-schrift-fein-laufweite: 0.4px;
  --bro-erledigt-deckkraft: 0.5;
  --bro-erledigt-wartezeit: 10s;
  --bro-erledigt-schliessdauer: 400ms;
}

/* Gebündelte Portal-Stile — generiert (`pnpm stile:generieren`), NICHT von Hand bearbeiten. */

@font-face {
  font-family: 'Hanken Grotesk';
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url(data:font/woff2;base64,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) format('woff2');
}

/*
 * @bro/ui — Grundbausteine der Bro-Oberfläche.
 * Referenziert AUSSCHLIESSLICH Design-Tokens (var(--bro-…), Hausregeln B14.7/B17);
 * Farb-Literale sind hier verboten und werden von der Token-Wache abgewiesen.
 * Voraussetzung: @bro/design-tokens/tokens.css ist geladen.
 */

/* Typo-Stufen (aus den Schrift-Tokens) */

.bro-text-anzeige,
.bro-text-titel,
.bro-text-betont,
.bro-text-fliesstext,
.bro-text-klein,
.bro-text-fein {
  font-family: var(--bro-schrift-familie);
  color: var(--bro-tinte-1);
}

.bro-text-anzeige {
  font-size: var(--bro-schrift-anzeige-groesse);
  line-height: var(--bro-schrift-anzeige-zeilenhoehe);
  font-weight: var(--bro-schrift-anzeige-gewicht);
}

.bro-text-titel {
  font-size: var(--bro-schrift-titel-groesse);
  line-height: var(--bro-schrift-titel-zeilenhoehe);
  font-weight: var(--bro-schrift-titel-gewicht);
}

.bro-text-betont {
  font-size: var(--bro-schrift-betont-groesse);
  line-height: var(--bro-schrift-betont-zeilenhoehe);
  font-weight: var(--bro-schrift-betont-gewicht);
}

.bro-text-fliesstext {
  font-size: var(--bro-schrift-fliesstext-groesse);
  line-height: var(--bro-schrift-fliesstext-zeilenhoehe);
  font-weight: var(--bro-schrift-fliesstext-gewicht);
}

.bro-text-klein {
  font-size: var(--bro-schrift-klein-groesse);
  line-height: var(--bro-schrift-klein-zeilenhoehe);
  font-weight: var(--bro-schrift-klein-gewicht);
  color: var(--bro-tinte-2);
}

.bro-text-fein {
  font-size: var(--bro-schrift-fein-groesse);
  line-height: var(--bro-schrift-fein-zeilenhoehe);
  font-weight: var(--bro-schrift-fein-gewicht);
  letter-spacing: var(--bro-schrift-fein-laufweite);
  text-transform: uppercase;
  color: var(--bro-tinte-2);
}

/* Knopf (primär/sekundär) */

.bro-knopf {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--bro-abstand-8);
  padding: var(--bro-abstand-8) var(--bro-abstand-16);
  border: 1px solid transparent;
  border-radius: var(--bro-radius-m);
  font-family: var(--bro-schrift-familie);
  font-size: var(--bro-schrift-betont-groesse);
  line-height: var(--bro-schrift-betont-zeilenhoehe);
  font-weight: var(--bro-schrift-betont-gewicht);
  cursor: pointer;
  text-decoration: none;
}

.bro-knopf:focus-visible {
  outline: 2px solid var(--bro-akzent);
  outline-offset: 2px;
}

.bro-knopf:disabled {
  cursor: not-allowed;
  opacity: 0.5;
}

.bro-knopf--primaer {
  background: var(--bro-akzent);
  color: var(--bro-akzent-tinte);
}

.bro-knopf--primaer:hover:not(:disabled) {
  background: color-mix(in oklab, var(--bro-akzent) 88%, var(--bro-tinte-1));
}

.bro-knopf--sekundaer {
  background: var(--bro-flaeche-1);
  color: var(--bro-tinte-1);
  border-color: var(--bro-linie);
}

.bro-knopf--sekundaer:hover:not(:disabled) {
  background: var(--bro-flaeche-0);
}

/* Eingabefeld */

.bro-eingabefeld {
  display: block;
  width: 100%;
  padding: var(--bro-abstand-8) var(--bro-abstand-12);
  border: 1px solid var(--bro-linie);
  border-radius: var(--bro-radius-s);
  background: var(--bro-flaeche-1);
  color: var(--bro-tinte-1);
  font-family: var(--bro-schrift-familie);
  font-size: var(--bro-schrift-fliesstext-groesse);
  line-height: var(--bro-schrift-fliesstext-zeilenhoehe);
  font-weight: var(--bro-schrift-fliesstext-gewicht);
}

.bro-eingabefeld::placeholder {
  color: var(--bro-tinte-3);
}

.bro-eingabefeld:focus-visible {
  outline: 2px solid var(--bro-akzent);
  outline-offset: 0;
  border-color: var(--bro-akzent);
}

.bro-eingabefeld[aria-invalid="true"] {
  border-color: var(--bro-fehler);
}

/* Karte */

.bro-karte {
  background: var(--bro-flaeche-1);
  border: 1px solid var(--bro-linie);
  border-radius: var(--bro-radius-l);
  box-shadow: var(--bro-schatten);
  padding: var(--bro-abstand-24);
}

/* Statuspille (Radius l wirkt bei Pillen-Höhe als Vollrundung) */

.bro-statuspille {
  display: inline-flex;
  align-items: center;
  gap: var(--bro-abstand-4);
  padding: var(--bro-abstand-4) var(--bro-abstand-8);
  border-radius: var(--bro-radius-l);
  font-family: var(--bro-schrift-familie);
  font-size: var(--bro-schrift-fein-groesse);
  line-height: var(--bro-schrift-fein-zeilenhoehe);
  font-weight: var(--bro-schrift-fein-gewicht);
  letter-spacing: var(--bro-schrift-fein-laufweite);
  text-transform: uppercase;
}

.bro-statuspille--erfolg {
  color: var(--bro-erfolg);
  background: color-mix(in oklab, var(--bro-erfolg) 9%, var(--bro-flaeche-1));
}

.bro-statuspille--warnung {
  color: var(--bro-warnung);
  background: color-mix(in oklab, var(--bro-warnung) 9%, var(--bro-flaeche-1));
}

.bro-statuspille--fehler {
  color: var(--bro-fehler);
  background: color-mix(in oklab, var(--bro-fehler) 9%, var(--bro-flaeche-1));
}

.bro-statuspille--neutral {
  color: var(--bro-tinte-2);
  background: var(--bro-flaeche-0);
}

/* Filter-Chip */

.bro-filter-chip {
  display: inline-flex;
  align-items: center;
  gap: var(--bro-abstand-8);
  padding: var(--bro-abstand-4) var(--bro-abstand-12);
  border: 1px solid var(--bro-linie);
  border-radius: var(--bro-radius-l);
  background: var(--bro-flaeche-1);
  color: var(--bro-tinte-2);
  font-family: var(--bro-schrift-familie);
  font-size: var(--bro-schrift-klein-groesse);
  line-height: var(--bro-schrift-klein-zeilenhoehe);
  font-weight: var(--bro-schrift-klein-gewicht);
  cursor: pointer;
}

.bro-filter-chip:hover {
  border-color: var(--bro-tinte-3);
}

.bro-filter-chip:focus-visible {
  outline: 2px solid var(--bro-akzent);
  outline-offset: 2px;
}

.bro-filter-chip--aktiv {
  border-color: var(--bro-akzent);
  background: var(--bro-akzent-flaeche);
  color: var(--bro-akzent);
}

/* Tabelle (Listen-Ansichten) */

.bro-tabelle {
  width: 100%;
  border-collapse: collapse;
  font-family: var(--bro-schrift-familie);
  font-size: var(--bro-schrift-fliesstext-groesse);
  line-height: var(--bro-schrift-fliesstext-zeilenhoehe);
  color: var(--bro-tinte-1);
}

.bro-tabelle th {
  text-align: left;
  padding: var(--bro-abstand-8) var(--bro-abstand-12);
  border-bottom: 1px solid var(--bro-linie);
  color: var(--bro-tinte-2);
  font-size: var(--bro-schrift-fein-groesse);
  line-height: var(--bro-schrift-fein-zeilenhoehe);
  font-weight: var(--bro-schrift-fein-gewicht);
  letter-spacing: var(--bro-schrift-fein-laufweite);
  text-transform: uppercase;
}

.bro-tabelle td {
  padding: var(--bro-abstand-8) var(--bro-abstand-12);
  border-bottom: 1px solid var(--bro-linie);
  vertical-align: middle;
}

.bro-tabelle tbody tr:hover {
  background: var(--bro-flaeche-0);
}

/* Abhaken-Kreis (Erledigen-Knopf in Listen) */

.bro-abhaken {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: var(--bro-abstand-24);
  height: var(--bro-abstand-24);
  border: 1px solid var(--bro-tinte-3);
  border-radius: var(--bro-radius-l);
  background: var(--bro-flaeche-1);
  color: transparent;
  cursor: pointer;
  padding: 0;
}

.bro-abhaken:hover {
  border-color: var(--bro-erfolg);
  background: color-mix(in oklab, var(--bro-erfolg) 9%, var(--bro-flaeche-1));
  color: var(--bro-erfolg);
}

.bro-abhaken:focus-visible {
  outline: 2px solid var(--bro-akzent);
  outline-offset: 2px;
}

/* Initialen-Kreis */

.bro-initialen {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: var(--bro-abstand-32);
  height: var(--bro-abstand-32);
  border-radius: var(--bro-radius-l);
  background: var(--bro-akzent-flaeche);
  color: var(--bro-akzent);
  font-size: var(--bro-schrift-klein-groesse);
  font-weight: var(--bro-schrift-betont-gewicht);
}

/* Navigationspunkt */

.bro-navigationspunkt {
  display: flex;
  align-items: center;
  gap: var(--bro-abstand-12);
  padding: var(--bro-abstand-8) var(--bro-abstand-12);
  border-radius: var(--bro-radius-m);
  color: var(--bro-tinte-2);
  font-family: var(--bro-schrift-familie);
  font-size: var(--bro-schrift-fliesstext-groesse);
  line-height: var(--bro-schrift-fliesstext-zeilenhoehe);
  font-weight: var(--bro-schrift-fliesstext-gewicht);
  text-decoration: none;
  cursor: pointer;
}

.bro-navigationspunkt:hover {
  background: var(--bro-flaeche-0);
  color: var(--bro-tinte-1);
}

.bro-navigationspunkt:focus-visible {
  outline: 2px solid var(--bro-akzent);
  outline-offset: 2px;
}

.bro-navigationspunkt--aktiv {
  background: var(--bro-akzent-flaeche);
  color: var(--bro-akzent);
  font-weight: var(--bro-schrift-betont-gewicht);
}

/*
 * Bedienhilfe-Block (Issue #2156) — natives <details>, kein Skript.
 * Der Aufklapp-Zustand kommt vom Browser; hier wird nur gestaltet.
 */

.bro-bedienhilfe {
  font-family: var(--bro-schrift-familie);
  background: var(--bro-flaeche-1);
  border: 1px solid var(--bro-linie);
  border-radius: var(--bro-radius-l);
  margin-bottom: var(--bro-abstand-16);
}

.bro-bedienhilfe-kopf {
  display: flex;
  align-items: center;
  gap: var(--bro-abstand-8);
  padding: var(--bro-abstand-12) var(--bro-abstand-16);
  cursor: pointer;
  color: var(--bro-tinte-1);
  font-size: var(--bro-schrift-betont-groesse);
  line-height: var(--bro-schrift-betont-zeilenhoehe);
  font-weight: var(--bro-schrift-betont-gewicht);
}

/*
 * Der Sichtbarkeits-Ring gehört auf den Kopf, weil er das bedienbare Element
 * ist: Wer mit der Tastatur ankommt, landet auf dem <summary>, nicht auf dem
 * <details>. Ohne diese Regel unterdrückt `list-style: none` in manchen
 * Browsern zugleich die Fokus-Anzeige.
 */
.bro-bedienhilfe-kopf:focus-visible {
  outline: 2px solid var(--bro-akzent);
  outline-offset: 2px;
}

.bro-bedienhilfe-rumpf {
  padding: 0 var(--bro-abstand-16) var(--bro-abstand-16);
  border-top: 1px solid var(--bro-linie);
  color: var(--bro-tinte-2);
  font-size: var(--bro-schrift-fliesstext-groesse);
  line-height: var(--bro-schrift-fliesstext-zeilenhoehe);
}

.bro-bedienhilfe-einleitung {
  margin: var(--bro-abstand-12) 0 0;
}

.bro-bedienhilfe-schritte {
  margin: var(--bro-abstand-12) 0 0;
  padding-left: var(--bro-abstand-24);
}

.bro-bedienhilfe-schritte > li {
  margin-top: var(--bro-abstand-4);
}

.bro-bedienhilfe-hinweis {
  margin: var(--bro-abstand-12) 0 0;
  padding: var(--bro-abstand-8) var(--bro-abstand-12);
  background: var(--bro-akzent-flaeche);
  border-radius: var(--bro-radius-m);
  color: var(--bro-tinte-1);
}

.bro-bedienhilfe-verweis {
  display: inline-block;
  margin-top: var(--bro-abstand-12);
  color: var(--bro-akzent);
}

/*
 * Portal-Layout (App-Schale, P1-002) — ausschließlich Token-Referenzen
 * (var(--bro-…), B14.7/B17); Farb-Literale weist die Token-Wache ab.
 * Wird zusammen mit tokens.css und @bro/ui in /stile.css gebündelt.
 */

* {
  box-sizing: border-box;
}

body.portal-boden {
  margin: 0;
  min-height: 100vh;
  background: var(--bro-flaeche-0);
  color: var(--bro-tinte-1);
  font-family: var(--bro-schrift-familie);
  font-size: var(--bro-schrift-fliesstext-groesse);
  line-height: var(--bro-schrift-fliesstext-zeilenhoehe);
}

.portal-marke {
  margin: 0;
  color: var(--bro-akzent);
  font-size: var(--bro-schrift-titel-groesse);
  line-height: var(--bro-schrift-titel-zeilenhoehe);
  font-weight: var(--bro-schrift-titel-gewicht);
}

/* Anmelde-Seite */

.portal-anmeldung {
  min-height: 100vh;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: var(--bro-abstand-24);
}

.portal-anmeldung-karte {
  width: 100%;
  max-width: 24rem;
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-12);
}

.portal-anmeldung-formular {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-8);
  margin: var(--bro-abstand-8) 0 0;
}

/* Hilfe-Link der Anmeldung (P2-006, Präzisierung 2): dezent unter dem Knopf. */
.portal-anmeldung-hilfe {
  color: var(--bro-tinte-2);
}

.portal-anmeldung-hilfe:hover {
  color: var(--bro-akzent);
}

.portal-anmeldung-hinweis {
  margin: var(--bro-abstand-8) 0 0;
  display: flex;
  align-items: center;
  gap: var(--bro-abstand-8);
}

/* Öffentliche Umfrage */

.portal-umfrage {
  max-width: 40rem;
  margin: 0 auto;
  padding: var(--bro-abstand-24);
}

.portal-umfrage-formular {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-12);
}

/* Öffentlicher Willkommens-Upload (#4256).
   Dieselbe Bauart wie die öffentliche Umfrage darüber: eine schmale Spalte
   ohne App-Schale, denn der Kunde hat keine Sitzung und sieht keine
   Navigation. Farben und Abstände ausschließlich über Tokens (B14.7) — in
   dieser Datei steht kein Farbliteral. */

.portal-willkommen {
  max-width: 44rem;
  margin: 0 auto;
  padding: var(--bro-abstand-24);
}

.portal-willkommen-schritte,
.portal-willkommen-unterlagen,
.portal-willkommen-eingegangen {
  margin-top: var(--bro-abstand-24);
}

.portal-willkommen-formular {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-12);
  margin-top: var(--bro-abstand-24);
}

/* Die Grenzen und der Verbrauch stehen VOR dem Absenden da, nicht erst in der
   Absage — deshalb ruhiger gesetzt als der Fließtext, aber lesbar. */
.portal-willkommen-grenzen,
.portal-willkommen-verbrauch,
.portal-willkommen-frist {
  color: var(--bro-tinte-2);
  font-size: var(--bro-schrift-klein-groesse);
}

.portal-willkommen-meldung,
.portal-willkommen-fertig {
  margin-top: var(--bro-abstand-12);
  padding: var(--bro-abstand-12);
  border-radius: var(--bro-radius-s);
  background: var(--bro-flaeche-1);
}

/* Angemeldete Umfragepflege (#2913) */

.portal-umfragen,
.portal-umfrage-liste,
.portal-umfrage-anlegen,
.portal-umfrage-aendern {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-12);
}

.portal-umfrage-liste {
  margin-top: var(--bro-abstand-24);
}

.portal-umfrage-pflege header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--bro-abstand-12);
}

.portal-umfrage-aktivierung {
  margin-top: var(--bro-abstand-12);
}

/* Öffentliche Buchungsseite (#2064) — bewusst dieselbe schmale Spalte wie die
   öffentliche Umfrage: Beide sind Ein-Aufgaben-Seiten für Gäste ohne Sitzung,
   und beide werden überwiegend am Telefon geöffnet. */

.portal-buchung {
  max-width: 40rem;
  margin: 0 auto;
  padding: var(--bro-abstand-24);
}

.portal-buchung-meldung {
  margin: var(--bro-abstand-12) 0;
  color: var(--bro-warnung);
}

.portal-buchung-gewaehlt {
  margin: 0 0 var(--bro-abstand-12);
  font-weight: var(--bro-schrift-betont-gewicht);
}

.portal-buchung-bestaetigt {
  margin: var(--bro-abstand-12) 0;
  font-size: var(--bro-schrift-titel-groesse);
  font-weight: var(--bro-schrift-betont-gewicht);
}

/* Die drei Auswahllisten. Sie sind `<ol>`, weil die Reihenfolge trägt (nächste
   Tage, aufsteigende Uhrzeiten) — die Zählmarke selbst wäre dabei nur Lärm. */

.portal-buchung-leistungen,
.portal-buchung-tage,
.portal-buchung-zeiten {
  list-style: none;
  margin: var(--bro-abstand-12) 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-8);
}

/* Die Zeiten liegen nebeneinander: An einem offenen Tag sind es leicht zwanzig,
   und untereinander wären sie eine Scrollstrecke. Genau daran ist die
   Alt-Buchungsseite gemessen worden (21.593 px Seitenhöhe, #2064). */

.portal-buchung-zeiten {
  flex-direction: row;
  flex-wrap: wrap;
}

/* Der Titel eines Tages im Überblick („3 frei“ / „wenige frei“, #2681). */

.portal-buchung-tagestitel {
  color: var(--bro-tinte-2);
}

/* Der Knappheitshinweis. Er ist eine AUSSAGE an die Kundin und wird deshalb
   betont, nicht versteckt — der Text selbst kommt wörtlich aus dem Fachkern. */

.portal-buchung-knappheit {
  margin: 0 0 var(--bro-abstand-8);
  font-weight: var(--bro-schrift-betont-gewicht);
}

/* Die Blätter-Navigation unter dem Tagesüberblick (#4532): „Vorherige Tage“ und
   „Weitere Tage“, durch ein Mittelpunkt-Trennzeichen verbunden. Sie bekommt nur
   den senkrechten Abstand der Listen darüber und sonst NICHTS — kein Rahmen,
   keine eigene Farbe, kein `display: flex`. Das ist Absicht: Die beiden Links
   und ihr Trennzeichen sind ein Fließtext-Gebilde, das der Autor der Seite so
   gebaut hat; ein Flex-Kontext machte aus dem „ · “ ein eigenes Element und
   verschöbe seinen Abstand. Die Blätterung führt die Seite nicht, sie schließt
   sie ab. */

.portal-buchung-tage-navigation {
  margin: var(--bro-abstand-12) 0;
}

.portal-buchung-dauer {
  color: var(--bro-tinte-2);
}

.portal-buchung-formular {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-12);
}

/* App-Rahmen */

.portal-schale {
  display: grid;
  grid-template-columns: 16rem minmax(0, 1fr);
  min-height: 100vh;
}

.portal-seitenleiste {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-24);
  padding: var(--bro-abstand-24) var(--bro-abstand-16);
  background: var(--bro-flaeche-1);
  border-right: 1px solid var(--bro-linie);
}

.portal-navigation {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-4);
}

.portal-seitenleiste-fuss {
  margin-top: auto;
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-8);
  border-top: 1px solid var(--bro-linie);
  padding-top: var(--bro-abstand-16);
}

.portal-nutzer {
  display: flex;
  align-items: center;
  gap: var(--bro-abstand-12);
  padding: var(--bro-abstand-8) var(--bro-abstand-12);
}

.portal-nutzer-avatar {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: var(--bro-abstand-32);
  height: var(--bro-abstand-32);
  border-radius: var(--bro-radius-l);
  background: var(--bro-akzent-flaeche);
  color: var(--bro-akzent);
  font-weight: var(--bro-schrift-betont-gewicht);
}

.portal-nutzer-name {
  display: flex;
  flex-direction: column;
}

/* Abmelden (P2-006): Formular-Knopf, der sich in die Seitenleiste einfügt. */
.portal-abmelden {
  margin: 0;
  display: flex;
}

.portal-abmelden-knopf {
  background: none;
  border: none;
  padding: 0;
  color: var(--bro-akzent);
  cursor: pointer;
  text-align: left;
}

.portal-abmelden-knopf:hover {
  text-decoration: underline;
}

/*
 * Die öffentliche Bewertungsseite (#2876) — eine eigene Seite ohne App-Schale,
 * wie die Abmelde-Seite darüber. Nur Tokens, keine festen Werte (B14.7).
 */
.portal-bewertung {
  margin: var(--bro-abstand-32) auto;
  max-width: 32rem;
}

/*
 * Die Signierseite `/sign/<token>` (#4259). Dieselbe Bauart wie die
 * Bewertungsseite darüber: eine einzelne Karte in der Mitte, kein Raster —
 * sie wird aus einer Mail heraus geöffnet, meist auf einem Handy, und trägt
 * genau eine Sache. Etwas breiter als die Bewertung, weil hier ein
 * Dokumenttitel und eine Anrede stehen und nicht fünf Sterne.
 */
.portal-signieren {
  margin: var(--bro-abstand-32) auto;
  max-width: 40rem;
}

/*
 * „Nicht zuständig?" — der Weiterleit-Block (#4259, Scheibe 3).
 *
 * `<details>` statt Overlay: Der Alt öffnet ein Modal, das ohne JavaScript
 * nicht geht (ADR-0003, ADR-0005). Die Zusammenfassung trägt die
 * Knopf-Klassen, damit sie wie ein Knopf aussieht und sich wie einer anfühlt;
 * das Dreieck des Browsers wäre daneben doppelte Auskunft.
 */
.portal-weiterleiten {
  margin-top: var(--bro-abstand-24);
}

.portal-weiterleiten > summary {
  cursor: pointer;
  display: inline-block;
  list-style: none;
}

.portal-weiterleiten > summary::-webkit-details-marker {
  display: none;
}

/*
 * Die fünf Sterne als Knopfreihe. `fieldset` bringt einen Rahmen mit, den
 * diese Reihe nicht braucht — sie steht ohnehin schon in einer Karte.
 */
.portal-bewertung-sterne {
  display: flex;
  gap: var(--bro-abstand-8);
  align-items: center;
  border: none;
  padding: 0;
  margin: var(--bro-abstand-16) 0;
}

/*
 * Ein Stern ist ein Radio-Knopf mit seiner Zahl. Die Zahl bleibt sichtbar
 * neben dem Kästchen: Ein reines Sternsymbol ist für eine Vorlesehilfe keine
 * Angabe, und wer mit der Tastatur wählt, muss sehen, wo er steht.
 */
.portal-bewertung-stern {
  display: inline-flex;
  gap: var(--bro-abstand-4);
  align-items: center;
  padding: var(--bro-abstand-8) var(--bro-abstand-12);
  border: 1px solid var(--bro-linie);
  border-radius: var(--bro-radius-m);
  cursor: pointer;
}

.portal-bewertung-stern:hover {
  background: var(--bro-akzent-flaeche);
}

/*
 * Die öffentliche Anamnese-Seite (Issue #2146) — dieselbe Breite wie die
 * Bewertungsseite darüber und aus demselben Grund: Sie steht allein auf dem
 * Bildschirm, ohne App-Schale, und ein Formular über die volle Fensterbreite
 * ist auf einem Rechner unlesbar.
 */
.portal-anamnese {
  margin: var(--bro-abstand-32) auto;
  max-width: 32rem;
}

/* Die öffentliche Vorbereiten-Seite (#3972) — dieselbe Bauart wie die
   Anamnese darüber: eine schmale, mittig stehende Karte ohne App-Schale. */
.portal-vorbereiten {
  margin: var(--bro-abstand-32) auto;
  max-width: 32rem;
}

/* Versteckte Elemente (z. B. Anmelde-Meldung vor dem ersten Fehler). */
[hidden] {
  display: none !important;
}

.portal-inhalt {
  min-width: 0;
  padding: var(--bro-abstand-32);
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-24);
}

.portal-kopf {
  display: flex;
  align-items: center;
  gap: var(--bro-abstand-12);
}

.portal-kopf h1 {
  margin: 0;
}

/* Kopfleisten-Aktionen (Glocke, Mandantenname) — rechts vom Titel (#2360). */
.portal-kopf-aktionen {
  display: flex;
  align-items: center;
  gap: var(--bro-abstand-12);
  margin-left: auto;
}

/* Die Glocke selbst: reiner Link, kein eigener Hintergrund — die Dringlichkeit
   der Meldungen färbt sie bewusst nicht (Fertig-Kriterium #2360). */
.portal-glocke {
  display: inline-flex;
  align-items: center;
  gap: var(--bro-abstand-4);
  text-decoration: none;
  color: inherit;
  font-size: var(--bro-schrift-fliesstext-groesse);
}

.portal-leer {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-4);
  align-items: flex-start;
}

.portal-leer p {
  margin: 0;
}

/* Testphasen-Streifen (#1509): eine Zeile über dem Inhalt der Modulseite.
   Nur Tokens, keine eigenen Farben — die Wertung trägt die Statuspille. */

.portal-testphase {
  display: flex;
  align-items: center;
  gap: var(--bro-abstand-12);
}

.portal-testphase p {
  margin: 0;
}

/* Zahlungs-Ampeln (#1745): zwei Urteile untereinander, getrennt lesbar.
   Nur Tokens — die Wertung trägt die Statuspille, nicht eine eigene Farbe. */

.portal-ampel {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-4);
  padding: var(--bro-abstand-12) 0;
}

.portal-ampel p {
  margin: 0;
}

/* Stammdaten-Seite (P1-004) */

.portal-werkzeuge {
  display: flex;
  align-items: center;
  gap: var(--bro-abstand-12);
}

.portal-suche {
  flex: 1;
  max-width: 26rem;
  margin: 0;
}

/* Die Suche über alles (Issue #2274).

   Das Feld im Seitenkopf ist ENGER als das der Stammdatenseite und wächst
   nicht mit: Es sitzt neben Glocke und Nutzername, und ein `flex: 1` wie bei
   `.portal-suche` würde die beiden an den Rand drücken. Auf schmalen Geräten
   fällt es ganz weg — die Ergebnisseite trägt dasselbe Feld noch einmal, also
   ist der Weg dorthin nicht verbaut, und ein drittes Element in einer engen
   Kopfzeile wäre schlechter als keines. */
.portal-kopfsuche {
  display: flex;
  gap: var(--bro-abstand-8);
  margin: 0;
  max-width: 18rem;
}

@media (max-width: 48rem) {
  /* Die feste Seitenspalte ließ bei 390px nur 134px für den Inhalt (#2250). */
  .portal-schale {
    grid-template-columns: minmax(0, 1fr);
  }

  .portal-seitenleiste {
    border-right: 0;
    border-bottom: 1px solid var(--bro-linie);
  }

  .portal-navigation {
    flex-direction: row;
    flex-wrap: wrap;
  }

  .portal-kopf,
  .portal-kopf-aktionen {
    flex-wrap: wrap;
  }

  .portal-kopfsuche {
    display: none;
  }
}

.portal-suche-ergebnis {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-16);
}

.portal-suchgruppe {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-8);
}

.portal-suchtreffer-liste {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-8);
  margin: 0;
  padding: 0;
  list-style: none;
}

/* Titel über Unterzeile, nicht nebeneinander: Die Unterzeile ist bei Kunden
   „Ort · Branche" und bei Belegen „Rechnung {Empfänger}" — beides kann lang
   werden, und in einer Zeile mit dem Titel wäre es der Teil, der abgeschnitten
   wird. */
.portal-suchtreffer {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-4);
  padding: var(--bro-abstand-8) 0;
  border-top: 1px solid var(--bro-linie);
}

.portal-suchtreffer:first-child {
  border-top: 0;
  padding-top: 0;
}

.portal-chips {
  display: flex;
  flex-wrap: wrap;
  gap: var(--bro-abstand-8);
}

.portal-tabelle-karte {
  padding: var(--bro-abstand-8) var(--bro-abstand-16) var(--bro-abstand-16);
}

/*
 * Der Papierkorb der Kundenakten (Issue #2733).
 *
 * Er ist bewusst mehr als ein Aufhänger für den Test: Der Abstand trennt
 * Überschrift, Erklärung, Tabelle und den Rückweg — dieselbe Anordnung wie
 * beim Angebots-Papierkorb (`portal-beleg`), damit sich zwei Papierkörbe nicht
 * verschieden anfühlen. Die Klasse ist zugleich der ANKER, an dem der
 * E2E-Test seinen Griff festmacht: Ein seitenweiter Locator wird durch einen
 * fremden, für sich korrekten PR mehrdeutig und bricht dann auf jedem Zweig.
 */
.portal-kunden-papierkorb {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-12);
  align-items: flex-start;
}

/* Der Papierkorb der Verwaltung (Issue #2168) — gelöschte Zugänge und Teams.
   Abschnitts-Anker und Abstand wie beim Kunden-Papierkorb darüber; nur Tokens,
   keine festen Werte (B14, ADR-0003). Der Anker trägt zugleich den Griff, mit
   dem `papierkorb.test.ts` prüft, dass der Abschnitt keinen Schreibweg außer
   dem Zurückholen anbietet — ein seitenweiter Griff würde durch einen fremden,
   für sich korrekten PR mehrdeutig. */
.portal-verwaltung-papierkorb {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-12);
  align-items: stretch;
}

.portal-verwaltung-papierkorb-abschnitt {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-8);
}

/* Die Sperrliste (Issue #2170) — Abschnitts-Anker und Abstand wie beim
   Papierkorb nebenan. Nur Tokens, keine festen Werte (B14, ADR-0003). */
.portal-sperrliste {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-12);
  align-items: flex-start;
}

/*
 * Die Gutschein-Seite (Issue #2706) — vier Karten mit gleicher Innenordnung:
 * anlegen, suchen, der Gutschein selbst, sein Beleg-Ausweis.
 *
 * Jede trägt eine eigene Klasse, und das ist nicht Kosmetik: Sie sind die
 * ANKER, an denen die E2E-Tests greifen. Vier Formulare auf einer Seite tragen
 * zusammen zweimal „Betrag (€)" und dreimal einen Knopf mit „Gutschein" im
 * Namen — ein seitenweiter Griff wäre hier nicht bloß spröde, er wäre von
 * Anfang an mehrdeutig.
 */
.portal-gutschein-anlegen,
.portal-gutschein-suche,
.portal-gutschein,
.portal-gutschein-beleg,
.portal-gutschein-sperre {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-8);
  align-items: flex-start;
  max-width: 34rem;
}

/*
 * Die eigenen Kontierungsregeln (Issue #2251) — eine Anlege-Karte, die Liste
 * und, je Zeile, ein Änderungs- und ein Umschalt-Formular.
 *
 * Auch hier sind die Klassen ANKER, nicht Kosmetik, und die Seite braucht sie
 * dringender als die meisten: Das Anlege-Formular und JEDE Zeile der Liste
 * tragen dieselben Feldnamen und dieselbe Kontierungs-Auswahl. Ein
 * seitenweiter Griff wäre bei zwei Regeln schon mehrdeutig — und die
 * Verneinung „dieser Text steht nicht mehr da" ginge ins Leere, weil derselbe
 * Text als Platzhalter im Anlege-Formular stehen bleibt (genau daran ist der
 * erste Entwurf des Seitentests umgefallen).
 */
.portal-lernregel-anlegen,
.portal-lernregel-liste,
.portal-lernregel-fehler {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-8);
  align-items: flex-start;
}

/*
 * Die beiden Formulare je Zeile stehen NEBENEINANDER, nicht untereinander:
 * Sie sitzen in einer Tabellenzelle, und eine gestapelte Zelle triebe die
 * Zeilenhöhe der ganzen Liste auseinander.
 */
.portal-lernregel-aendern {
  display: flex;
  flex-wrap: wrap;
  gap: var(--bro-abstand-8);
  align-items: center;
}

.portal-lernregel-umschalten {
  display: inline-flex;
  margin-top: var(--bro-abstand-8);
}

/*
 * Die beiden Formulare INNERHALB der Gutschein-Karte. Sie erben den
 * Karten-Abstand nicht, weil sie selbst keine Karte sind — ohne diese Regel
 * klebten Beschriftung, Feld und Knopf aneinander.
 */
.portal-gutschein-einloesen,
.portal-gutschein-sperren {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-4);
  align-self: stretch;
}

.portal-gutschein-daten {
  align-self: stretch;
  border-collapse: collapse;
  text-align: left;
}

.portal-gutschein-daten th,
.portal-gutschein-daten td {
  padding: var(--bro-abstand-4) var(--bro-abstand-8) var(--bro-abstand-4) 0;
  vertical-align: top;
}

/*
 * Der GoBD-Ausweis der Einlösung. Er steht in derselben Schrift wie der Beleg,
 * auf dem er landet — wer ihn hier liest, soll genau das sehen, was gedruckt
 * wird. Genau in dieser Zeile stand `40,5 €` statt `40,50 €` (#2476), und
 * niemand hat es gesehen, weil es keine Seite gab.
 */
.portal-gutschein-belegzeile {
  font-variant-numeric: tabular-nums;
}

.portal-name-zelle {
  display: inline-flex;
  align-items: center;
  gap: var(--bro-abstand-12);
}

.portal-tabelle-leer {
  text-align: center;
  padding: var(--bro-abstand-24);
}

.portal-fuss {
  display: flex;
  justify-content: space-between;
  gap: var(--bro-abstand-12);
  flex-wrap: wrap;
  padding-top: var(--bro-abstand-12);
}

/* Aufgaben-Seite (P1-008) */

/*
 * Behandlungsfotos (Issue #1158) — die beiden Klassen entstanden dort und
 * waren NICHT definiert. Aufgefallen ist das erst durch den Klassen-Wächter
 * aus #1880, wenige Stunden später: Der Pflicht-Check war grün, und die
 * Fotoliste wäre unformatiert ausgeliefert worden.
 *
 * Deshalb stehen sie hier und nicht in der Ausnahmeliste jenes Wächters. Die
 * Liste ist ausdrücklich Altbestand — wer eine Klasse anfasst, nimmt sie
 * heraus, und für die eigenen von heute gilt das zuerst.
 */
.portal-fotoliste {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(12rem, 1fr));
  gap: var(--bro-abstand-12);
}

.portal-foto {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-4);
  padding: var(--bro-abstand-8);
  border: 1px solid var(--bro-linie);
}

/* Ein Behandlungsfoto bestimmt nicht die Breite der Seite. */
.portal-foto img {
  width: 100%;
  height: auto;
  display: block;
}

/* Trefferliste der Art.-15-Auskunft (#2050). */
.portal-auskunft-treffer-liste {
  list-style: none;
  margin: var(--bro-abstand-12) 0 0;
  padding: 0;
}

.portal-auskunft-treffer {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-4);
  padding: var(--bro-abstand-12) 0;
  border-bottom: 1px solid var(--bro-linie);
}

.portal-auskunft-treffer:last-child {
  border-bottom: none;
}

/* Newsletter-Vorschau der Kundenbindung (#2147). */
.portal-kundenbindung-vorschau {
  margin-top: var(--bro-abstand-12);
}

.portal-kundenbindung-beispiele {
  list-style: none;
  margin: var(--bro-abstand-8) 0 0;
  padding: 0;
}

/* Trefferliste der Chargen-Suche (#2462). */
.portal-chargensuche-treffer-liste {
  list-style: none;
  margin: var(--bro-abstand-12) 0 0;
  padding: 0;
}

.portal-chargensuche-treffer {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-4);
  padding: var(--bro-abstand-12) 0;
  border-bottom: 1px solid var(--bro-linie);
}

.portal-chargensuche-treffer:last-child {
  border-bottom: none;
}
.portal-aufgabenliste {
  list-style: none;
  margin: 0;
  padding: 0;
}

.portal-aufgabe {
  display: flex;
  align-items: center;
  gap: var(--bro-abstand-12);
  padding: var(--bro-abstand-12) var(--bro-abstand-8);
  border-bottom: 1px solid var(--bro-linie);
}

.portal-aufgabe:last-child {
  border-bottom: none;
}

.portal-aufgabe-abhaken {
  margin: 0;
  display: flex;
}

.portal-aufgabe-titel {
  flex: 1;
  display: flex;
  flex-direction: column;
}

/* Erledigen-Quittung (P2-004, ADR-0005): Zeiten/Deckkraft als Tokens.
   „wartend" = Ups-Fenster (Haken sichtbar, halbtransparent);
   „schliesst" = Jalousien-Effekt beim Freigeben des Platzes. */

.portal-erledigt-wartend {
  opacity: var(--bro-erledigt-deckkraft);
}

.portal-erledigt-wartend .bro-abhaken {
  border-color: var(--bro-erfolg);
  background: color-mix(in oklab, var(--bro-erfolg) 9%, var(--bro-flaeche-1));
  color: var(--bro-erfolg);
}

.portal-erledigt-schliesst {
  overflow: hidden;
  padding-top: 0;
  padding-bottom: 0;
  border-bottom-width: 0;
  opacity: 0;
  transition:
    height var(--bro-erledigt-schliessdauer) ease,
    padding var(--bro-erledigt-schliessdauer) ease,
    border-bottom-width var(--bro-erledigt-schliessdauer) ease,
    opacity var(--bro-erledigt-schliessdauer) ease;
}

@media (prefers-reduced-motion: reduce) {
  .portal-erledigt-schliesst {
    transition: none;
  }
}

/* Übersicht (P1-008) */

.portal-uebersicht {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(18rem, 1fr));
  gap: var(--bro-abstand-16);
  align-items: start;
}

.portal-uebersicht-karte {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-12);
}

.portal-uebersicht-kopf {
  display: flex;
  align-items: center;
  justify-content: space-between;
}

.portal-uebersicht-kopf h2 {
  margin: 0;
}

.portal-uebersicht-liste {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-8);
}

.portal-uebersicht-zeile {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: var(--bro-abstand-8);
}

/* Eine Missstandszeile trägt Titel, Erklärung und Weg. Nebeneinander wurde
 * jede dieser drei Aussagen auf breiten Bildschirmen auf wenige Wörter
 * zusammengedrückt (#4574); untereinander bleibt jede davon lesbar. */
.portal-uebersicht-zeile[data-missstand] {
  align-items: flex-start;
  flex-direction: column;
}

/* Journal-Zeile (P2-012): Zeit · Text (dehnt sich) · Kennzeichnungen. */
.portal-journal-zeile {
  align-items: center;
  gap: var(--bro-abstand-8);
}

.portal-journal-text {
  flex: 1;
}

/* Zeilen mit Erledigen-Kreis (P2-004): Kreis + Titel mittig ausrichten. */
.portal-uebersicht-zeile[data-aufgabe] {
  align-items: center;
}

.portal-uebersicht-mehr {
  color: var(--bro-akzent);
  text-decoration: none;
}

.portal-uebersicht-mehr:hover {
  text-decoration: underline;
}

/* Berichte (P1-017) — schlichte Token-Balken, keine Chart-Bibliothek */

.portal-berichte {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(24rem, 1fr));
  gap: var(--bro-abstand-16);
  align-items: start;
}

.portal-berichte-hinweis {
  margin: 0;
}

/*
 * Die Umsatz-Monate (#3225): Tabelle, Protokollzeilen und die beiden
 * Formulare stehen untereinander in EINER Karte. Der Abstand ist das Einzige,
 * was sie braucht — die Tabelle bringt ihre Gestalt aus `bro-tabelle` mit,
 * die Formulare aus `portal-formular`. Die Klasse selbst ist trotzdem nötig:
 * Sie ist der Anker, an dem ein E2E-Locator den Abschnitt greift, statt
 * seitenweit nach „Monat" zu suchen.
 */
.portal-berichte-umsatzmonate {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-16);
}

/*
 * Ein Pflegeformular je Leistung (#2554): zehn Angaben untereinander, viele
 * davon in EINER Karte gestapelt. Dieselbe Bauart wie `portal-berichte-
 * umsatzmonate` darüber — die Felder bringen ihre Gestalt aus
 * `portal-formular` mit, hier steht nur, was den Stapel lesbar hält: Abstand
 * und eine Trennlinie zum nächsten Formular. Ohne die Linie laufen zehn Felder
 * der einen Leistung optisch in die zehn der nächsten.
 *
 * Die Klasse selbst ist auch ohne diese Gestalt nötig: Sie ist der Anker, an
 * dem ein E2E-Locator SEIN Formular greift, statt seitenweit nach
 * „Behandlungsdauer" zu suchen — und auf dieser Seite steht dieselbe
 * Beschriftung so oft, wie der Katalog Artikel hat.
 */
.portal-leistung-pflege {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-8);
  padding-block: var(--bro-abstand-16);
}

.portal-leistung-pflege + .portal-leistung-pflege {
  /* `--bro-linie` ist eine FARBE (definiert in `packages/design-tokens/
     tokens.css`), keine Rahmen-Kurzform: ohne Breite und Stil rendert
     `border-top: var(--bro-linie)` gar keine Linie. Dieselbe Schreibweise wie
     an den 29 anderen Stellen dieser Datei.

     Der Wert selbst steht hier ABSICHTLICH nicht: Diese Datei wird von
     `pnpm stile:generieren` samt Kommentaren in `stile.generiert.ts`
     eingebettet, und die Token-Wache (B14.7) liest dort jedes Farb-Literal —
     auch eines, das bloss erklaerend zitiert ist. Eine erste Fassung dieses
     Kommentars nannte den Hexwert und hat genau daran den Pflicht-Check
     rotgemacht. */
  border-top: 1px solid var(--bro-linie);
}

/*
 * Die Abweichung eines abgeschlossenen Monats (Issue #4048, Punkt D).
 *
 * Sie steht UNTER der festgeschriebenen Zahl, nicht daneben: In einer
 * Tabellenzelle nebeneinander schöbe der Satz die Spalte auf und die ganze
 * Tabelle über den Bildrand. Ein eigener Block bricht stattdessen um.
 *
 * **Keine feste Farbe** (B14.7) — die Auszeichnung trägt die kleinere Schrift
 * des Hauses, den Rest entscheidet das Token-Set. Und sie steht als Text da,
 * nicht als Farbe allein: Wer die Farbe nicht sieht, liest den Satz.
 */
.portal-berichte-monatsabweichung {
  display: block;
  font-size: var(--bro-schrift-klein-groesse);
}

/*
 * Zeitraum-Wahl (#403): steht ÜBER den Abschnitten und nimmt deshalb die
 * volle Breite des Rasters ein — sie gilt für mehrere Berichte, nicht für
 * einen.
 */
.portal-berichte-zeitraum {
  grid-column: 1 / -1;
  display: flex;
  flex-wrap: wrap;
  align-items: end;
  gap: var(--bro-abstand-16);
}

.portal-berichte-zeitraum label {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-4);
}

.portal-berichte-zeitraum p {
  flex-basis: 100%;
  margin: 0;
  color: var(--bro-tinte-2);
}

/*
 * Die benannten Lücken der Stundenkosten-Auswertung. Sie stehen bewusst
 * NICHT klein und grau weggeräumt: Zeit ohne Satz ist der Grund, warum eine
 * Kostensumme unvollständig sein kann.
 */
.portal-berichte-luecken {
  margin: 0;
  padding-left: var(--bro-abstand-16);
}

/*
 * Eine unbrauchbar gewordene Auswertungsvorlage (#1908).
 *
 * Sie steht an ihrem Platz in der Liste, unter ihrem Namen — nicht in einem
 * Sonderblock am Ende, den man erst finden muss. Damit sie sich trotzdem von
 * den gesunden Zeilen abhebt, trägt sie den linken Rand in der Fehlerfarbe und
 * einen sehr blassen Untergrund daraus (`color-mix`, wie `packages/ui`).
 *
 * **Kein Rot auf der Schrift.** Die Zeile ist kein Fehler des Betriebs, sondern
 * eine Folge der Weiterentwicklung — sie soll auffallen und nicht alarmieren.
 * Der Grund darunter steht in `--bro-tinte-2` wie jeder andere Kleintext.
 */
.portal-berichte-vorlage-unbrauchbar {
  border-left: 3px solid var(--bro-fehler);
  background: color-mix(in oklab, var(--bro-fehler) 5%, var(--bro-flaeche-1));
}

.portal-berichte-vorlage-unbrauchbar p {
  margin: 0 0 var(--bro-abstand-8);
  color: var(--bro-tinte-2);
}

.portal-balken-liste {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-8);
}

.portal-balken-zeile,
.portal-durchsatz-monat {
  display: grid;
  grid-template-columns: 9rem 1fr auto;
  align-items: center;
  column-gap: var(--bro-abstand-12);
  row-gap: var(--bro-abstand-4);
}

.portal-balken-spur {
  display: block;
  height: var(--bro-abstand-12);
  border-radius: var(--bro-radius-s);
  background: var(--bro-flaeche-0);
  overflow: hidden;
}

.portal-balken {
  display: block;
  height: 100%;
  border-radius: var(--bro-radius-s);
  background: var(--bro-akzent);
}

.portal-balken--erledigt {
  background: var(--bro-erfolg);
}

.portal-balken-wert {
  white-space: nowrap;
}

/* Finanzen (P1-015) */

.portal-beleg {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-16);
  max-width: 56rem;
}

.portal-beleg-kopf {
  display: flex;
  align-items: center;
  gap: var(--bro-abstand-12);
}

.portal-beleg-kopf h2 {
  margin: 0;
}

/* Dokumentnachweis (#4399): Beide Abschnitte sitzen auf `karteKlassen()` und
   brauchen nur ihren eigenen Innenabstand. Sie sind zugleich die benannten
   Anker für E2E-Locators — ein seitenweiter Locator wird durch einen fremden
   PR mehrdeutig. Nur Tokens, keine festen Werte. */
.portal-dokumentnachweis-kopf {
  display: grid;
  gap: var(--bro-abstand-8);
}
.portal-dokumentnachweis-kopf h2 {
  margin: 0;
}
.portal-dokumentnachweis-pruefung {
  display: grid;
  gap: var(--bro-abstand-12);
}
.portal-dokumentnachweis-pruefung h2 {
  margin: 0;
}

/* Die zwei Wege zum echten Beleg-PDF (Issue #2031): Ansehen, Herunterladen. */
.portal-beleg-pdf-links {
  display: flex;
  gap: var(--bro-abstand-8);
  margin: 0;
}

/*
 * Die Anhangs-Liste am Eingangsbeleg (Issue 2375). Eine schlichte Liste ohne
 * Punkte: Sie steht in einer Tabellenzelle, und Aufzählungszeichen neben
 * Dateinamen lesen sich dort als Unordnung statt als Struktur.
 */
.portal-beleg-anhaenge {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  gap: var(--bro-abstand-4);
}

.portal-beleg-daten {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(10rem, 1fr));
  gap: var(--bro-abstand-12);
  margin: 0;
}

/*
 * Das Formular „Buchung lösen/umhängen" am Eingangsbeleg (Issue #4623). Es
 * steht in einer Tabellenzelle neben der bezahlenden Buchung — ein knappes
 * senkrechtes Raster, keine breite Kartenform, sonst sprengt es die Zeile.
 */
.portal-buchung-umhaengen {
  display: grid;
  gap: var(--bro-abstand-4);
  margin-top: var(--bro-abstand-4);
}

.portal-beleg-daten dd,
.portal-summen dd {
  margin: 0;
}

.portal-summen {
  display: grid;
  grid-template-columns: auto auto;
  justify-content: end;
  column-gap: var(--bro-abstand-24);
  row-gap: var(--bro-abstand-4);
  margin: 0;
  border-top: 1px solid var(--bro-linie);
  padding-top: var(--bro-abstand-12);
}

.portal-summen dd {
  text-align: right;
}

.portal-beleg-link {
  color: var(--bro-akzent);
  text-decoration: none;
  font-weight: var(--bro-schrift-betont-gewicht);
}

.portal-beleg-link:hover {
  text-decoration: underline;
}

.portal-position-hinzufuegen {
  display: flex;
  gap: var(--bro-abstand-8);
  align-items: center;
}

.portal-position-hinzufuegen select {
  flex: 1;
}

.portal-position-hinzufuegen input {
  width: 6rem;
}

/*
 * Grenzpflege je Bestandszeile (Issue #1420) — zwei schmale Zahlenfelder und
 * ein ruhiger Knopf, damit die Eingabe in eine Tabellenzelle passt, ohne die
 * Zeile auseinanderzuziehen. Nur Tokens, keine eigenen Farbwerte (B14.7).
 */
.portal-grenzen-zeile {
  display: flex;
  gap: var(--bro-abstand-8);
  align-items: center;
}

.portal-grenzen-zeile input {
  width: 5rem;
}

/* Lagerorte führen (Issue #1608) */

/*
 * Ein Formular je Zeile, wie bei den Bestandsgrenzen daneben. Die Felder
 * dürfen umbrechen: In der Zeile stehen vier davon, und auf einem schmalen
 * Bildschirm ist ein Umbruch besser als ein waagerechter Rollbalken.
 */
.portal-ort-zeile {
  display: flex;
  flex-wrap: wrap;
  gap: var(--bro-abstand-8);
  align-items: center;
}

.portal-ort-zeile input {
  width: 8rem;
}

/*
 * Ein Knopf, der genau eine Sache tut, sitzt in seinem eigenen Formular —
 * ohne Skript, wie das ganze Portal (ADR-0003). `margin: 0` verhindert, dass
 * der Formular-Abstand die Tabellenzelle auseinanderzieht.
 */
.portal-ort-aktion {
  margin: 0;
  display: inline-flex;
}

/* Vormerkungen (Issue #1127) */

/*
 * Zwei Knöpfe in einer Tabellenzeile — „Eingelöst" und „Zurückziehen" gehören
 * zum selben Formular, weil sie dieselbe Vormerkung betreffen und sich nur im
 * Zielzustand unterscheiden. Sie dürfen umbrechen: Auf einem schmalen Fenster
 * ist die Tabelle sonst breiter als der Bildschirm.
 */
.portal-zeilenformular {
  margin: 0;
  display: flex;
  flex-wrap: wrap;
  gap: var(--bro-abstand-8);
}

/* Zeiterfassung (P1-011) */

.portal-werkzeuge-rechts {
  margin-left: auto;
  display: flex;
  align-items: center;
  gap: var(--bro-abstand-12);
}

.portal-zeit-einreichen {
  margin: 0;
  display: flex;
}

.portal-zeit-aktion {
  margin: 0;
  display: inline-flex;
  align-items: center;
  gap: var(--bro-abstand-8);
}

.portal-zeit-aktion + .portal-zeit-aktion {
  margin-top: var(--bro-abstand-8);
}

/* Anlege-Formular */

/*
 * Zeitliche Tagesansicht der Termine (#2161). Die Fachregel liefert Breite
 * und linken Abstand je Überschneidungsgruppe als CSS-Variablen. Dadurch
 * teilen nur tatsächlich parallele Termine ihre Zeile; alle anderen bleiben
 * über die volle Breite lesbar. Farben und Schrift kommen ausschließlich aus
 * den Design-Tokens.
 */
.portal-terminspuren {
  position: relative;
  min-height: 36rem;
  margin-bottom: var(--bro-abstand-16);
  border: 1px solid var(--bro-linie);
  border-radius: var(--bro-radius-m);
  background: var(--bro-flaeche-0);
  overflow: hidden;
}

.portal-terminspur {
  position: absolute;
  box-sizing: border-box;
  left: var(--termin-links);
  top: var(--termin-oben);
  width: var(--termin-breite);
  height: max(var(--termin-hoehe), 2rem);
  padding: var(--bro-abstand-4) var(--bro-abstand-8);
  border: 1px solid var(--bro-akzent);
  border-radius: var(--bro-radius-s);
  background: var(--bro-flaeche-1);
  color: var(--bro-tinte-1);
  overflow: hidden;
}

/*
 * Die Wochenansicht (Issue #2161): sieben Tagesspalten, in jeder ein eigenes
 * Spurenraster.
 *
 * Die Spalten sind die TAGE — nicht Personen oder Räume. Wonach eine
 * Tagesspalte weiter unterteilt wird, entscheidet #919 und liegt eine Ebene
 * darüber; innerhalb einer Tagesspalte ordnet dieselbe Regel an wie in der
 * Tagesansicht (`berechneTerminplaetze`). Deshalb werden `.portal-terminspuren`
 * und `.portal-terminspur` hier unverändert wiederbenutzt: Ein zweites
 * Blockformat wäre eine zweite Wahrheit über dieselbe Anordnung.
 *
 * `minmax(0, 1fr)` und nicht `1fr`: Ohne die Null-Untergrenze wächst eine
 * Spalte mit langem Kundennamen über ihren Anteil hinaus und schiebt die
 * Woche seitlich aus dem Bild.
 */
.portal-wochenraster {
  display: grid;
  grid-template-columns: repeat(7, minmax(0, 1fr));
  gap: var(--bro-abstand-8);
  margin-bottom: var(--bro-abstand-16);
}

/* Schrift und Farbe kommen aus der Typo-Stufe im Markup
 * (`textKlassen("klein")` → `bro-text-klein`), nicht von hier: Ein eigenes
 * `font` wäre ein zweiter Ort für dieselbe Entscheidung. */
.portal-wochentag h3 {
  margin: 0 0 var(--bro-abstand-4);
}

/* Im Wochenraster trägt jede Spalte ihr eigenes Raster — schmaler als der
 * Tag, aber mit derselben Höhe, damit die Zeitachse über alle sieben Spalten
 * auf derselben Höhe liegt. */
.portal-wochentag .portal-terminspuren {
  min-height: 24rem;
  margin-bottom: 0;
}

.portal-formular-karte {
  max-width: 32rem;
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-12);
}

.portal-formular-karte h2,
.portal-formular-karte p {
  margin: 0;
}

.portal-formular {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-8);
}

.portal-feld-schalter {
  display: flex;
  align-items: center;
  gap: var(--bro-abstand-8);
}

/*
 * Die Öffnungs-Einwilligung je Unterzeichner (#2799).
 *
 * Sie steht INNERHALB des `<li>` eines Unterzeichners, deshalb `row` statt der
 * Spalte von `.portal-formular`: Stand und Knopf gehören in dieselbe Zeile wie
 * der Name darüber, nicht in einen eigenen Block. `wrap` und `auto` am Rand,
 * damit ein langer Stand („erlaubt seit … — 12 Öffnungen, zuletzt …") auf
 * schmalen Geräten umbricht, statt den Knopf aus der Karte zu schieben.
 */
.portal-oeffnungs-einwilligung {
  flex-direction: row;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--bro-abstand-8);
  margin-block-start: var(--bro-abstand-4);
  color: var(--bro-tinte-2);
}

.portal-oeffnungs-einwilligung button {
  margin-inline-start: auto;
}

.portal-feld-schalter input {
  accent-color: var(--bro-akzent);
}

.portal-feld-hinweis {
  margin: 0;
}

.portal-formular-fehler {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-8);
  align-items: flex-start;
  border: 1px solid var(--bro-fehler);
  border-radius: var(--bro-radius-m);
  padding: var(--bro-abstand-12);
}

.portal-formular-fehler ul {
  margin: 0;
  padding-left: var(--bro-abstand-16);
}

.portal-formular-aktionen {
  display: flex;
  gap: var(--bro-abstand-8);
  margin-top: var(--bro-abstand-8);
}

/*
 * Adresssuche über dem Koordinatenpaar (Issue 2990)
 *
 * Sie steht MITTEN in einem Formular (Fahrgast, Einrichtung) und darf deshalb
 * nicht wie ein eigenes aussehen: ein Rahmen, der sie als Beiwerk kennzeichnet,
 * mehr nicht. Ausgeliefert wird sie `hidden` und erst von `/verhalten.js`
 * gezeigt — ohne Skript gibt es sie nicht.
 *
 * Die Trefferliste trägt keine Aufzählungszeichen: Es sind Knöpfe, keine
 * Aufzählung, und ein Punkt davor läse sich wie Text zum Lesen statt wie etwas
 * zum Anklicken.
 */
.portal-ortssuche {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-8);
  margin-block: var(--bro-abstand-8);
  padding: var(--bro-abstand-8);
  border: 1px solid var(--bro-linie);
  border-radius: var(--bro-radius-m);
}

.portal-ortssuche ul {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-4);
}

/*
 * Bestätigung eines späten Starts (Issue #3865)
 *
 * Der Losfahren-Knopf einer überfälligen Fahrt wird zur Rückfrage: ein Satz,
 * warum gefragt wird, ein Auswahlfeld für den Grund, dann der Knopf.
 *
 * `portal-formular-aktionen` darüber legt seine Kinder NEBENeinander — für
 * eine Reihe Knöpfe richtig, für diese Rückfrage falsch: Auf einem
 * Fahrer-Handy stünden Erklärung, Feld und Knopf in einer Zeile und wären
 * alle drei unlesbar schmal. Deshalb hier untereinander; alles andere
 * (Abstand, Farben, Schrift) erbt unverändert.
 *
 * Nur Tokens, keine eigenen Werte.
 */
.portal-spaetstart {
  flex-direction: column;
}

/*
 * Auslassen mit freiwilliger Angabe eines Grundes (Issue #2203)
 *
 * Dieselbe Lage und dieselbe Begründung wie beim späten Start darüber: Auf
 * einem Fahrer-Handy stünden Beschriftung, Feld, Hinweis und Knopf sonst in
 * einer Zeile und wären alle vier unlesbar schmal. Deshalb untereinander;
 * alles andere (Abstand, Farben, Schrift) erbt unverändert.
 *
 * Nur Tokens, keine eigenen Werte.
 */
.portal-auslassen {
  flex-direction: column;
}

/*
 * Kontakthistorie: Ändern und Löschen je Zeile (Issue 2132)
 *
 * Das Änderungsformular steckt in einem `<details>` und ist damit ohne
 * JavaScript bedienbar (ADR-0005) — zugeklappt kostet es keine Tabellenbreite,
 * aufgeklappt steht es unter seiner eigenen Zeile. Nur Tokens, keine eigenen
 * Farb- oder Schriftwerte.
 */
.portal-kontakt-aktionen {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-8);
  align-items: flex-start;
}

.portal-kontakt-aendern {
  margin-top: var(--bro-abstand-8);
  min-width: 16rem;
}

.portal-kontakt-loeschen {
  margin: 0;
}

/*
 * Verlauf der abgelösten Fassungen (Issue #3610) — steht neben der
 * „bearbeitet"-Pille, zugeklappt wie das Änderungsformular darüber. Nur
 * Tokens, keine eigenen Farb- oder Schriftwerte (ADR-0003).
 */
.portal-kontakt-verlauf {
  display: inline-block;
  margin-top: var(--bro-abstand-4);
}

.portal-kontakt-verlauf ul {
  margin: var(--bro-abstand-4) 0 0;
  padding-left: var(--bro-abstand-16);
}

.portal-kontakt-verlauf li + li {
  margin-top: var(--bro-abstand-8);
}

/*
 * Umbenennen einer Kostenrolle (Issue #3235) — steht in derselben Zelle wie
 * der Stilllegen-Knopf. Die Felder stehen untereinander, weil sie in einer
 * Tabellenzelle nebeneinander zu schmal würden; nur Tokens, keine festen
 * Werte (ADR-0003).
 */
.portal-kostenrolle-umbenennen {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-4);
  margin-top: var(--bro-abstand-8);
}

.portal-kostenrolle-umbenennen input {
  width: 100%;
}

/*
 * Abschluss-Formular der Warteliste (Issue #2457) — Termin-Kennung und die
 * zwei Absende-Knöpfe nebeneinander, in einer Tabellenzelle.
 */
.portal-warteliste-abschluss {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--bro-abstand-8);
}

.portal-warteliste-abschluss label {
  margin: 0;
}

.portal-warteliste-abschluss input {
  width: 10rem;
}

/* Gesperrte Felder (Issue #397) */

/*
 * Was nicht mehr geändert werden darf, sieht auch nicht änderbar aus: Muster
 * und Präfix eines angebrochenen Nummernkreises sind `readonly`, und der
 * Grund steht als Klartext daneben. Nur Tokens, keine eigenen Farbwerte.
 */
.portal-formular input[readonly] {
  background: var(--bro-flaeche-0);
  color: var(--bro-tinte-2);
  cursor: not-allowed;
}

/*
 * Entsperr-Seite (Issue 690) — der Weg zurück in einen ausgesperrten Betrieb.
 *
 * Nur Tokens, keine festen Farben (Hausregel B14). Die Marke am falschen Wort
 * ist der Grund, warum es hier überhaupt eigene Regeln gibt: Ein unbekanntes
 * Wort MUSS sichtbar sein, während es dasteht — wer 24 Wörter abtippt und
 * erst am Ende „falsch" hört, sucht blind.
 */
.entsperren__woerter {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(11rem, 1fr));
  gap: var(--bro-abstand-8);
  list-style: none;
  margin: var(--bro-abstand-12) 0 var(--bro-abstand-24);
  padding: 0;
}

.entsperren__feld {
  display: flex;
  align-items: center;
  gap: var(--bro-abstand-4);
}

.entsperren__nummer {
  color: var(--bro-tinte-2);
  font-variant-numeric: tabular-nums;
  min-width: 2ch;
  text-align: right;
}

.entsperren__wort {
  background: var(--bro-flaeche-0);
  border: 1px solid var(--bro-linie);
  border-radius: var(--bro-radius-s);
  color: var(--bro-tinte-1);
  flex: 1;
  font-family: var(--bro-schrift-familie);
  min-width: 0;
  padding: var(--bro-abstand-4) var(--bro-abstand-8);
}

/*
 * Ein Wort, das es nicht gibt. Die Farbe steht NICHT allein: Sie kommt mit
 * einer dickeren Linie, damit die Marke auch ohne Farbsehen ankommt — und
 * `aria-invalid` sagt es der Vorlesesoftware ohnehin.
 */
.entsperren__wort--falsch {
  border-color: var(--bro-fehler);
  border-width: 2px;
}

.entsperren__label {
  color: var(--bro-tinte-2);
  display: block;
  margin-bottom: var(--bro-abstand-4);
}

.entsperren__email {
  background: var(--bro-flaeche-0);
  border: 1px solid var(--bro-linie);
  border-radius: var(--bro-radius-s);
  color: var(--bro-tinte-1);
  font-family: var(--bro-schrift-familie);
  margin-bottom: var(--bro-abstand-16);
  padding: var(--bro-abstand-8);
  width: 100%;
}

.entsperren__erklaerung {
  display: grid;
  gap: var(--bro-abstand-8);
  margin: 0 0 var(--bro-abstand-24);
  padding-left: var(--bro-abstand-16);
}

.entsperren__ergebnis {
  border-top: 1px solid var(--bro-linie);
  display: grid;
  gap: var(--bro-abstand-8);
  margin-top: var(--bro-abstand-24);
  padding-top: var(--bro-abstand-16);
}

/*
 * Berechnungsbogen (Issue #2352). Der Bogen hat eine Spalte je Kalendertag —
 * bis zu 31 plus Wochensummen und die vier Preisspalten. Ohne eigenen
 * Roll-Rahmen würde die Seite selbst waagerecht scrollen, und die Navigation
 * wanderte mit aus dem Bild. Nur Tokens, keine festen Farben (B14, ADR-0003).
 */
/*
 * Der Abschnitt selbst. Er trägt einen eigenen Namen, damit ein E2E-Locator
 * seinen Abschnitt benennen kann statt die ganze Seite (Hausregel, #1686).
 */
.portal-bogen {
  display: grid;
  gap: var(--bro-abstand-8);
}

.portal-bogen-rollen {
  overflow-x: auto;
}

/*
 * Die Beispielzeilen des Glasfaser-Adressimports (Issue 2120).
 *
 * Eine fremde Liste bringt beliebig viele Spalten mit — der echte Export des
 * Auftraggebers hat mehr, als auf einen Bildschirm passen. Die Tabelle rollt
 * deshalb in sich statt die Seite breit zu machen. Eigene Klasse statt
 * `portal-bogen-rollen`: Die gehört dem Anwesenheitsbogen, und ein
 * mitbenutzter Name wird beim nächsten Umbau dort zur Falle.
 */
.portal-import-vorschau {
  overflow-x: auto;
}

/*
 * Der Scan-Upload des Begehungsprotokolls (#2226).
 *
 * Er trägt mehrere Seiten EINES Blattes, und die Reihenfolge zählt — das
 * Formular bekommt deshalb sichtbar Luft nach oben und unten, damit es nicht
 * mit der Liste darunter verschwimmt. Nur Tokens, keine festen Werte
 * (Hausregel „Design nur über Tokens").
 */
.portal-begehungsimport-upload {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-8);
  margin-top: var(--bro-abstand-16);
}

/* Die Tagesspalten sind eng und mittig — sie tragen nur „1" oder „2". */
.portal-bogen-tag {
  text-align: center;
  padding-left: var(--bro-abstand-4);
  padding-right: var(--bro-abstand-4);
}

/* Die Wochensumme schließt einen Block ab und wird deshalb abgesetzt. */
.portal-bogen-wochensumme {
  border-left: 1px solid var(--bro-linie);
  padding-left: var(--bro-abstand-8);
  white-space: nowrap;
}

/* Wähler und Preisformular: ruhiges Raster statt gestapelter Felder. */
.portal-bogen-waehler,
.portal-bogen-preise {
  display: grid;
  gap: var(--bro-abstand-8);
  margin-top: var(--bro-abstand-16);
}

/* Fahrtnachweis: die Pflegefelder je Fahrt (Issue #2040).
   Nebeneinander, weil km und Preis zusammen gelesen und zusammen getippt
   werden — untereinander wäre jede Zeile der Tabelle dreimal so hoch. */
.portal-nachweis-pflege {
  display: flex;
  flex-wrap: wrap;
  align-items: end;
  gap: var(--bro-abstand-8);
}

/* Barkasse: der TSE-Hinweis (Issue #2015) */

/*
 * Er steht über der ganzen Seite und ist nicht wegklickbar, solange keine
 * technische Sicherheitseinrichtung angeschlossen ist — und das ist im
 * Fachkern fest verdrahtet. Deshalb bekommt er einen eigenen Rahmen statt
 * einer Meldungs-Zeile: Ein Hinweis, den man zwei Jahre lang jeden Tag sieht,
 * muss ruhig aussehen und trotzdem sofort erkennbar bleiben.
 *
 * Ausschliesslich Tokens, keine festen Farben (Hausregel, ADR).
 */
.portal-kasse-tse {
  border: 1px solid var(--bro-fehler);
  border-radius: var(--bro-radius-m);
  padding: var(--bro-abstand-12) var(--bro-abstand-16);
  margin-bottom: var(--bro-abstand-16);
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-4);
}

.portal-kasse-tse p {
  margin: 0;
}

/* Fristen-Radar Kündigung (#2018) — steht ÜBER der Vertragsliste. */

/*
 * Er hat denselben Innenabstand wie die Tabellen-Karte, damit Radar und Liste
 * als ein Block gelesen werden: Der Radar ist eine Vorschaltung der Liste,
 * keine fremde Insel. Abgesetzt wird er nur unten, gegen die Liste.
 *
 * Farben stehen hier NICHT: Die Dringlichkeit trägt die Statuspille aus
 * @bro/ui (`bro-statuspille--fehler|warnung|neutral`). Eine eigene Farbe hier
 * wäre eine zweite Wahrheit über „wie dringend sieht dringend aus".
 */
.portal-kuendigungsradar {
  padding: var(--bro-abstand-8) var(--bro-abstand-16) var(--bro-abstand-16);
  margin-bottom: var(--bro-abstand-16);
}

/* Die Stufen-Pillen liegen in einer Zeile und dürfen umbrechen. */
.portal-kuendigungsradar p {
  display: flex;
  flex-wrap: wrap;
  gap: var(--bro-abstand-8);
  margin: var(--bro-abstand-8) 0 var(--bro-abstand-16);
}

/*
* Die Erstattungsseite eines Termins (Issue 2353). Nur Abstände: Die Karten,
 * Tabellen und Pillen darin tragen ihre eigenen Klassen aus `@bro/ui`, und
 * Farben kommen ausschließlich aus Tokens (Hausregel „Design nur über Tokens").
 */
.portal-erstattung {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-16);
}

/*
 * Locator-Anker für den Übergangs-Abschnitt der Vertrags-Detailseite (Issue
 * #2437) — Hausregel B14: Ein E2E-Locator benennt sein Formular oder seinen
 * Abschnitt, nie die ganze Seite. Die eigentliche Karten-Optik kommt aus
 * `bro-karte` (@bro/ui); diese Klasse trägt keine eigene.
 */
.portal-vertrag-uebergaenge {
  display: block;
}

/*
 * Locator-Anker für den Unterschriften-Abschnitt der Vertrags-Detailseite
 * (Issue #3407) — dieselbe Begründung wie an `.portal-vertrag-uebergaenge`
 * eine Zeile darüber: Hausregel B14, kein Text- oder Feld-Locator über die
 * ganze Seite. Die Karten-Optik kommt aus `bro-karte` (@bro/ui); diese
 * Klassen tragen keine eigene.
 */
.portal-unterschriften-mappe {
  display: block;
}

.portal-unterschriften-verlauf {
  display: block;
}

/*
 * Die Notiz des Kunden aus dem Willkommens-Upload auf der Vertragsseite
 * (#4256): ein Zitat, kein Formularfeld — der Mitarbeiter liest, er ändert
 * hier nichts. Der Akzentstrich sagt „das hat der Kunde geschrieben".
 */
.portal-willkommen-notiz {
  margin: var(--bro-abstand-12) 0;
  padding: var(--bro-abstand-12);
  border-left: 3px solid var(--bro-akzent);
  background: var(--bro-flaeche-0);
  white-space: pre-wrap;
}

.portal-willkommen-unterlagen {
  display: block;
}

/*
 * Die Kennzahlenleiste des Lagers (Issue #2048). Ein Raster statt fester
 * Spaltenzahl: Die sechste Kachel („Zeilen ohne Artikel") erscheint nur, wenn
 * es den Fall gibt, und eine Leiste, die dann umbricht statt zu springen, ist
 * die ruhigere Lösung.
 */
.portal-kennzahlen {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(11rem, 1fr));
  gap: var(--bro-abstand-12);
}

.portal-kennzahl {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-4);
  padding: var(--bro-abstand-8);
  border: 1px solid var(--bro-linie);
  border-radius: var(--bro-radius-m);
  background: var(--bro-flaeche-1);
}

.portal-kennzahl-name {
  color: var(--bro-tinte-2);
}

.portal-kennzahl-wert {
  font-size: var(--bro-schrift-titel-groesse);
  line-height: var(--bro-schrift-titel-zeilenhoehe);
}

/*
 * Die Filterleiste bricht um, statt die Seite breit zu ziehen: Sie führt
 * Suche, Art, Kategorie und Sortierung nebeneinander, und die Kategorie
 * kommt erst dazu, wenn es Kategorien gibt (#2108).
 */
.portal-lager-filter {
  flex-wrap: wrap;
  align-items: flex-end;
  gap: var(--bro-abstand-12);
}

/*
 * Die Mehrfachauswahl beim Zuordnen (#3050). Sie führt die offenen Forderungen
 * in der Reihenfolge, in der ein Eingang auf sie verteilt wird — deshalb steht
 * die Reihenfolge-Spalte schmal und in Ziffern-Breite: Eine Liste, deren
 * Nummern unterschiedlich breit laufen, liest sich nicht mehr als Reihenfolge.
 */
.portal-zuordnung-auswahl {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-12);
}

.portal-zuordnung-auswahl td:nth-child(2) {
  font-variant-numeric: tabular-nums;
  color: var(--bro-tinte-2);
  white-space: nowrap;
}

/*
 * Das Lösen sitzt je Teilzuordnung in einer eigenen Zeile. Ohne die feste
 * Grundlinie stünde der Knopf bei mehrzeiligen Nachbarzellen versetzt, und
 * eine verteilte Zahlung sähe aus wie mehrere unzusammenhängende Vorgänge.
 */
.portal-zuordnung-loesen {
  margin: 0;
}

/*
 * Locator-Anker für die beiden Formulare des Kontoauszugs (Issue #4125,
 * Prüfer-KI-Fund an `e6ae1d2`) — Hausregel B14: Ein E2E-Locator benennt sein
 * Formular, nie einen Feldnamen der ganzen Seite. „Datei", „IBAN des eigenen
 * Kontos", „Ansehen" und „Übernehmen" sind für sich genommen seitenweite
 * Griffe. Die Karten-Optik kommt aus `bro-karte` (@bro/ui); diese Klassen
 * tragen keine eigene.
 */
.portal-auszug-formular,
.portal-auszug-uebernehmen {
  display: block;
}

/*
 * Locator-Anker für die Arbeitsliste der Zuordnung (Issue #4125) — Hausregel
 * B14: Ein E2E-Locator benennt seinen Abschnitt, nie die ganze Seite. Ein
 * `getByRole("link", { name: "Zuordnen" })` über die Seite würde mehrdeutig,
 * sobald irgendwo sonst ein „Zuordnen" auftaucht, und `.first()` wäre derselbe
 * Fehler positionsabhängig. Die Karten-Optik kommt aus `bro-karte` (@bro/ui);
 * diese Klasse trägt keine eigene.
 */
.portal-zuordnung-liste {
  display: block;
}

/*
 * Von Hand kontieren (Issue #4125). Beschriftung, Auswahl und Knopf
 * untereinander wie bei der Mehrfachauswahl darüber: Die Auswahl führt
 * neunundzwanzig Möglichkeiten in drei Gruppen und wird breit, ein Knopf
 * daneben rutschte damit aus dem Blick. Zugleich der Anker, an dem der
 * E2E-Griff festmacht.
 */
.portal-kontierung-hand {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: var(--bro-abstand-8);
}

/*
 * Die Aufstellung nach dem Verteilen (#3244). Sie sagt je Fahrt, was mit ihr
 * geschieht — deshalb steht sie als eigener Abschnitt unter der Meldung und
 * nicht in ihr: Die Meldung ist die Summe, die Aufstellung der Einzelfall.
 */
.portal-verteilung-aufstellung {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-12);
}

/*
 * Das Kennzeichen steht in Ziffern-Breite und bricht nicht um: Zugeteilte
 * Fahrten werden spaltenweise gelesen („welcher Wagen fährt was“), und ein
 * umgebrochenes Kennzeichen zerreißt genau diese Spalte.
 */
.portal-verteilung-wagen {
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}

/*
 * Der Grund einer liegengebliebenen Fahrt ist eine Erklärung, kein Ergebnis.
 * Die schwächere Tinte trennt ihn in derselben Spalte vom Kennzeichen, ohne
 * dass die Zeile eine eigene Farbe bekommt — Farbe allein trüge die Aussage
 * sonst für alle, die sie nicht unterscheiden können.
 */
.portal-verteilung-grund {
  color: var(--bro-tinte-2);
}

/*
 * Die Aufstellung des Tourenplans (#2703) — dieselbe Bauart wie die der
 * Verteilung darüber, damit zwei Aufstellungen auf derselben Seite nicht
 * verschieden aussehen.
 */
.portal-tourplan-aufstellung {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-12);
}

/*
 * Fahrzeit und ihre Herkunft stehen in EINER Zelle. Zwei Spalten daraus zu
 * machen hieße, die Tabelle für eine Angabe zu verbreitern, die man nur beim
 * Zweifeln liest. Ziffern-Breite an der Zelle, damit die Minuten spaltenweise
 * vergleichbar bleiben.
 */
.portal-tourplan-zeitzelle {
  font-variant-numeric: tabular-nums;
}

/*
 * Nur die HERKUNFT in schwächerer Tinte: Die Minuten sind das Ergebnis, die
 * Herkunft sagt, wie belastbar es ist. Die Klasse sass vorher am `<td>` und
 * färbte damit auch die Minuten — der Kommentar versprach etwas anderes, als
 * die Regel tat.
 */
.portal-tourplan-fahrzeit {
  color: var(--bro-tinte-2);
}

/*
 * Die Vermietungs-Ansichten (Issue #2133): drei Reiter, ein Raster über 31
 * Tage und der getrennte Sortierbereich.
 *
 * Nur Abstände, Ausrichtung und Rollbarkeit — Farben und Schriften kommen
 * ausschließlich aus Tokens (Hausregel „Design nur über Tokens"). Eine
 * belegte Zelle trägt deshalb eine KLASSE und keine Farbe: Welche Farbe der
 * Belegung zusteht, entscheidet das Token-Set, nicht diese Datei.
 */
.portal-vermietung-reiter {
  display: flex;
  flex-wrap: wrap;
  gap: var(--bro-abstand-8);
  margin-bottom: var(--bro-abstand-16);
}

.portal-vermietung-blaettern {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: var(--bro-abstand-8);
  margin: var(--bro-abstand-8) 0 var(--bro-abstand-16);
}

.portal-vermietung-stadt {
  margin-bottom: var(--bro-abstand-24);
}

/*
 * 31 Spalten passen auf kein Handy. Das Raster rollt deshalb in seinem
 * EIGENEN Bereich; die Seite selbst rollt nie waagerecht — sonst wanderten
 * Navigation und Kopfzeile mit aus dem Bild.
 */
.portal-vermietung-raster-rollbereich {
  overflow-x: auto;
}

.portal-vermietung-belegt {
  background: var(--bro-akzent-flaeche);
  text-align: center;
}

.portal-vermietung-frei {
  text-align: center;
}

/* Stillgelegte Zellen bleiben auch sichtbar unterscheidbar, wenn ihr
 * Zeilenkopf beim horizontalen Rollen aus dem Bild wandert (#4423). */
.portal-vermietung-stillgelegt {
  background: var(--bro-flaeche-0);
  border-color: var(--bro-linie);
  opacity: var(--bro-erledigt-deckkraft);
  text-align: center;
}

/*
 * „frei" und „belegt" stehen als Text in der Zelle, nicht nur als Farbe:
 * Eine Belegung, die allein an der Farbe hängt, ist für einen Screenreader
 * und für jeden mit einer Farbsehschwäche nicht da. Sichtbar ist der Text
 * nur dort, wo Platz ist — verborgen bleibt er lesbar.
 */
.portal-vermietung-nichts {
  position: absolute;
  width: 1px;
  height: 1px;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
}

.portal-vermietung-nummer {
  font-size: var(--bro-schrift-klein-groesse);
  white-space: nowrap;
}

.portal-vermietung-sortierung {
  margin-top: var(--bro-abstand-8);
}

.portal-vermietung-sortierung ol {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-8);
  margin: var(--bro-abstand-8) 0;
}

/*
 * Die Pflege der beiden Wohnungs-Schalter (Issue #3596).
 *
 * **Ein Formular je Tabellenzeile**, denn ohne JavaScript (ADR-0005) wird
 * beim Absenden gespeichert und nicht beim Klicken. Die drei Bedienteile —
 * zwei Kästchen und ein Knopf — stehen nebeneinander, solange Platz ist, und
 * brechen auf schmalen Geräten um, statt die Tabelle breiter zu machen als
 * das Bild: Die Seite rollt nie waagerecht (dieselbe Zusage wie beim Raster
 * darüber).
 *
 * Keine festen Farben und keine festen Abstände — nur Tokens (Hausregel
 * „Design nur über Tokens", B14.7).
 */
.portal-vermietung-schalter-formular {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--bro-abstand-8);
}

/*
 * Kästchen und Beschriftung gehören zusammen und dürfen nicht zwischen
 * beiden umbrechen: Ein Häkchen ohne sein Wort ist nicht mehr zuzuordnen.
 * Die Beschriftung steht als `<label>` am Feld, damit auch der Klick auf das
 * Wort schaltet — und ein Screenreader das Kästchen benennen kann.
 */
.portal-vermietung-schalter {
  display: inline-flex;
  align-items: center;
  gap: var(--bro-abstand-4);
  white-space: nowrap;
}

/*
 * Die Eigentümerabrechnung (Issue #4407): Objektwahl, gespeicherte Zeiträume,
 * die fünf Summen, die Einzelzeilen und das Entwurfsformular.
 *
 * Keine Farben und keine Schriften — nur Abstand, Ausrichtung und Rollbarkeit
 * aus den Tokens (Hausregel „Design nur über Tokens", B14.7). Die Klassen sind
 * zugleich die Anker, an denen ein Test SEINEN Abschnitt greift: „Zeitraum"
 * und „Nettoauszahlung" stehen auf dieser Seite mehrfach.
 */
.portal-eigentuemer-objekte {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-8);
  margin: var(--bro-abstand-8) 0 0;
  padding-left: var(--bro-abstand-16);
}

/*
 * Die Summen-Tabelle trägt Beträge rechtsbündig untereinander, damit sich
 * die Zeile „Nettoauszahlung" gegen die vier darüber nachrechnen lässt.
 */
.portal-eigentuemer-summen td {
  text-align: right;
  white-space: nowrap;
}

/*
 * Sieben Spalten Einzelzeilen und drei Spalten gespeicherte Abrechnungen
 * passen auf kein Telefon. Beide rollen in ihrem eigenen Kasten waagerecht,
 * statt die Seite zu verbreitern — dieselbe Zusage wie beim Belegungsraster.
 */
.portal-eigentuemer-zeilen,
.portal-eigentuemer-liste {
  display: block;
  overflow-x: auto;
}

.portal-eigentuemer-formular {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-8);
  margin-top: var(--bro-abstand-16);
}

/* Wissensablage (Issue #3811) — nur Tokens, keine festen Farben (B14.7). */

/* Der Baum: verschachtelte Listen ohne Aufzählungszeichen, eingerückt je Stufe. */
.portal-wissen-baum {
  list-style: none;
  margin: 0;
  padding-left: var(--bro-abstand-16);
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-4);
}

/* Die Wurzelliste braucht keine Einrückung — nur die Stufen darunter. */
.portal-wissen-baum:not(.portal-wissen-baum .portal-wissen-baum) {
  padding-left: 0;
}

/*
 * Der gerenderte Seiteninhalt.
 *
 * `overflow-wrap` und der scrollende Codeblock sind hier kein Schmuck: Der
 * Inhalt kommt von einem Menschen, und eine einzige lange Zeile — eine URL,
 * eine Protokollzeile — schöbe sonst die ganze Seitenbreite auf.
 */
.portal-wissen-inhalt {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-8);
  overflow-wrap: anywhere;
}

.portal-wissen-inhalt pre {
  margin: 0;
  padding: var(--bro-abstand-8);
  background: var(--bro-flaeche-1);
  border-radius: var(--bro-radius-s);
  overflow-x: auto;
}

.portal-wissen-inhalt blockquote {
  margin: 0;
  padding-left: var(--bro-abstand-12);
  border-left: 2px solid var(--bro-linie);
}

/* Der Kommentarfaden: Antworten stehen eingerückt unter ihrem Kommentar. */
.portal-wissen-kommentare {
  list-style: none;
  margin: 0;
  padding-left: 0;
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-12);
}

.portal-wissen-kommentare .portal-wissen-kommentare {
  padding-left: var(--bro-abstand-16);
  border-left: 1px solid var(--bro-linie);
}

/*
 * Die Projekt-Seiten (#3835). Sie machen den Fachkern `@bro/projekte` aus
 * #2445 erreichbar; hier steht nur, wie er aussieht — jede Regel wohnt im
 * Paket. Farben und Abstände ausschliesslich über Tokens (B14.7).
 */
.portal-projekte {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-16);
}

/*
 * Die Suche steht in EINER Zeile und bricht erst um, wenn der Platz fehlt.
 * Sie ist ein GET-Formular auf dieselbe Adresse: Die gefundene Liste bleibt
 * dadurch verlinkbar, und die gewählte Sicht reist als verstecktes Feld mit,
 * statt beim Suchen verloren zu gehen.
 */
.portal-projekte-suche {
  display: flex;
  flex-wrap: wrap;
  align-items: end;
  gap: var(--bro-abstand-8);
}

/*
 * Beträge rechtsbündig und mit Ziffern gleicher Breite — nur so sind sie
 * spaltenweise vergleichbar. Dieselbe Regel wie bei der Fahrzeit-Zelle.
 */
.portal-projekt-budget {
  text-align: right;
  font-variant-numeric: tabular-nums;
}

.portal-projekt {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-16);
}

.portal-projekt-kopf {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-8);
  align-items: start;
}

/*
 * Kopfdaten als zweispaltiges Gitter: Bezeichnung links, Wert rechts. Bei
 * schmalem Fenster fällt die zweite Spalte weg, statt den Wert abzuschneiden.
 */
.portal-projekt-daten {
  display: grid;
  grid-template-columns: minmax(8rem, auto) 1fr;
  gap: var(--bro-abstand-4) var(--bro-abstand-12);
  margin: 0;
}

.portal-projekt-daten dt {
  color: var(--bro-tinte-2);
}

.portal-projekt-daten dd {
  margin: 0;
}

.portal-projekt-aufgaben {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-12);
  padding: var(--bro-abstand-16);
}

.portal-projekt-aufgabenliste {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-4);
  margin: 0;
  padding: 0;
  list-style: none;
}

/*
 * Titel und Zustand einer Aufgabe stehen nebeneinander, nicht untereinander:
 * Die Liste ist eine Übersicht über den Stand, kein Ersatz für die
 * Aufgabenseite — wer mehr will, geht dorthin.
 */
.portal-projekt-aufgabe {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  gap: var(--bro-abstand-8);
  padding: var(--bro-abstand-4) 0;
  border-bottom: 1px solid var(--bro-linie);
}

.portal-projekt-fuehren {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-16);
  padding: var(--bro-abstand-16);
}

/**
 * Das Einbau-Stück der Besuchermessung (#2610) — der Textblock, den der
 * Betrieb in seine eigene Website kopiert.
 *
 * `pre` bricht von sich aus NICHT um; ohne `overflow-x` schöbe die lange
 * `script`-Zeile die ganze Einstellungsseite nach rechts. Umbrechen wäre die
 * schlechtere Wahl: Was hier steht, wird kopiert, und ein eingefügter
 * Zeilenumbruch landete mit im HTML des Kunden.
 */
.portal-einbau-stueck {
  margin: var(--bro-abstand-8) 0 0;
  padding: var(--bro-abstand-12);
  background: var(--bro-flaeche-1);
  border: 1px solid var(--bro-linie);
  border-radius: var(--bro-radius-m);
  color: var(--bro-tinte-1);
  font-size: var(--bro-schrift-klein-groesse);
  overflow-x: auto;
}

/*
 * Redaktionsplan (Issue #2607): eine Monatsfläche mit Blätter-Kopf. Die Zeilen
 * selbst tragen die Tabellen-Gestaltung aus @bro/ui — hier steht nur, was die
 * Fläche darüber hinaus braucht.
 */
.portal-redaktionsplan {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-16);
}

.portal-redaktionsplan-kopf {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--bro-abstand-12);
  padding-bottom: var(--bro-abstand-8);
  border-bottom: 1px solid var(--bro-linie);
}

.portal-redaktionsplan-kopf h2 {
  margin: 0;
}

.portal-redaktionsplan-kopf a {
  color: var(--bro-akzent);
  text-decoration: none;
}

.portal-redaktionsplan-kopf a:hover {
  text-decoration: underline;
}

/*
 * Die Ads-Zeile trägt die Form der Statuspille, aber den Mandanten-Akzent
 * statt einer Wertung: Eine Tagessumme ist weder Erfolg noch Warnung. Grün
 * („erfolg") hieße im Alt „verschickt" — das wäre hier schlicht eine andere
 * Aussage. Nur Token-Referenzen, wie überall in dieser Datei (B14.7).
 * Steht NACH @bro/ui im Bündel und gewinnt deshalb bei gleicher Spezifität.
 */
.portal-redaktionsplan-ads {
  color: var(--bro-akzent);
  background: color-mix(in oklab, var(--bro-akzent) 9%, var(--bro-flaeche-1));
}

/*
 * Das Monatsraster: sieben gleich breite Spalten, damit die Wochen untereinander
 * stehen. Die Felder tragen ihre Einträge als Liste — je Feld beliebig viele.
 */
.portal-redaktionsplan-raster {
  table-layout: fixed;
  width: 100%;
}

.portal-redaktionsplan-feld {
  vertical-align: top;
  height: var(--bro-abstand-32);
}

.portal-redaktionsplan-feld--leer {
  background: var(--bro-flaeche-0);
}

.portal-redaktionsplan-liste {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-4);
  margin: var(--bro-abstand-4) 0 0;
  padding: 0;
  list-style: none;
}

.portal-redaktionsplan-eintrag {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-4);
}

/*
 * Eine Pflegezeile INNERHALB einer Tabellenzelle (Glasfaser-Preistafel, #3620).
 *
 * Dieselben Felder wie ein gewöhnliches `portal-formular`, nur nebeneinander
 * statt untereinander: Eine Preistafel führt bis zu 22 Positionen, und
 * 22 untereinander gestapelte Formulare wären keine Tafel mehr, sondern eine
 * Seite zum Scrollen. Reine Anordnung, keine Farbe und keine Schrift — die
 * kommen weiter aus den Tokens (B14.7).
 */
.portal-formular-zeile {
  flex-direction: row;
  flex-wrap: wrap;
  align-items: flex-end;
}

/*
 * Impressum und Datenschutzhinweise (#2225).
 *
 * Der Fuß hängt unter JEDER Seite (`seitenGeruest`), auch unter der
 * angemeldeten — § 5 DDG verlangt „ständig verfügbar", nicht „auf der
 * Anmeldeseite". Deshalb ist er bewusst leise: kleine Schrift, gedeckte Tinte,
 * kein Rahmen. Er soll auffindbar sein, nicht auffallen.
 */
.portal-rechtsfuss {
  display: flex;
  gap: var(--bro-abstand-16);
  justify-content: center;
  padding: var(--bro-abstand-16);
  font-size: var(--bro-schrift-klein-groesse);
  line-height: var(--bro-schrift-klein-zeilenhoehe);
}

.portal-rechtsfuss a {
  color: var(--bro-tinte-2);
}

.portal-rechtsfuss a:hover {
  color: var(--bro-akzent);
}

/*
 * Die Rechtsseiten selbst: oben ausgerichtet statt mittig, weil ein
 * Datenschutzhinweis länger ist als der Bildschirm — mittig zentriert wäre der
 * Anfang des Textes nicht sichtbar.
 */
.portal-rechtsseite {
  align-items: flex-start;
}

.portal-rechtskarte {
  width: 100%;
  max-width: 44rem;
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-12);
}

.portal-rechtsangaben {
  display: grid;
  grid-template-columns: auto 1fr;
  gap: var(--bro-abstand-4) var(--bro-abstand-12);
  margin: 0;
}

.portal-rechtsangaben dt {
  color: var(--bro-tinte-2);
}

.portal-rechtsangaben dd {
  margin: 0;
}

.portal-rechtszweck {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-4);
}

.portal-rechtsliste {
  margin: 0;
  padding-left: var(--bro-abstand-16);
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-4);
}

.portal-rechtsfassung {
  color: var(--bro-tinte-2);
}

/* Umzüge (Issue #4085): KPI-Kacheln, Listen-Link, Status-Workflow-Reihe. */

.portal-umzug-kacheln {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--bro-abstand-16);
  padding: var(--bro-abstand-16);
}

.portal-umzug-liste-link {
  color: var(--bro-akzent);
  text-decoration: none;
  font-weight: var(--bro-schrift-betont-gewicht);
}

.portal-umzug-liste-link:hover {
  text-decoration: underline;
}

/* Ein stornierter Auftrag bleibt in der Liste sichtbar, tritt aber zurück
   (Alt: `opacity-60`, `Index.cshtml:55`) — derselbe Token wie bei einer
   erledigten Aufgabe. */
.portal-umzug-storniert {
  opacity: var(--bro-erledigt-deckkraft);
}

.portal-umzug-status-reihe {
  display: flex;
  flex-wrap: wrap;
  gap: var(--bro-abstand-8);
}

.portal-umzug-status-knopf {
  display: inline-flex;
}

/* Ein bereits durchlaufener Status-Schritt (Alt: grün hinterlegt,
   `Detail.cshtml:41`) — dieselbe Erfolgsfarbe wie die Statuspille. */
.portal-umzug-status-erledigt {
  border-color: var(--bro-erfolg);
  color: var(--bro-erfolg);
}

/*
 * Der Wortlaut einer Aufnahme (Issue #2223). Umbrechend statt scrollend: Ein
 * Transkript ist Fließtext mit eigenen Zeilenenden, keine Tabelle und kein
 * Quelltext — eine waagerechte Bildlaufleiste macht es unlesbar. Die Höhe ist
 * begrenzt, damit ein langes Gespräch die Detailseite nicht zur Endlosrolle
 * macht; darin wird gescrollt.
 */
.portal-transkript {
  margin: 0;
  max-height: 24rem;
  overflow-y: auto;
  white-space: pre-wrap;
  overflow-wrap: anywhere;
  font-family: inherit;
  padding: var(--bro-abstand-8);
  border: 1px solid var(--bro-linie);
  border-radius: var(--bro-radius-s);
  background: var(--bro-flaeche-0);
}

/* Bewertungsantworten (#3808). Die Klassen tragen keine Farben und keine
   Schriften — nur Abstand und Trennlinie aus den Tokens (B14.7). Sie sind
   zugleich die Anker, an denen die E2E ihren Abschnitt benennt, statt einen
   Text der ganzen Seite zu suchen. */
.portal-bewertung-karte {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-12);
}

.portal-bewertung-gasttext {
  padding: var(--bro-abstand-12);
  border-left: 3px solid var(--bro-linie);
  border-radius: var(--bro-radius-s);
  background: var(--bro-flaeche-0);
}

.portal-bewertung-vorgang {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-8);
  padding-top: var(--bro-abstand-12);
  border-top: 1px solid var(--bro-linie);
}

/* Die beiden Formulare sind der Kern der Zusage aus #2483: Entwerfen und
   Veröffentlichen sind zwei Handlungen, nie ein Klick. Der sichtbare Abstand
   dazwischen ist deshalb kein Schmuck. */
.portal-bewertung-entwurf,
.portal-bewertung-veroeffentlichen {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-8);
}

.portal-bewertung-veroeffentlichen {
  padding: var(--bro-abstand-12);
  border: 1px solid var(--bro-linie);
  border-radius: var(--bro-radius-m);
}

/*
 * Der Impressums-Hinweis in den Firmendaten (#2225). Eine eigene Klasse, damit
 * ein Test ihn ansprechen kann, ohne über `role` zu greifen — die Karte trägt
 * genau EINEN `alert` (die Rechnungs-Lücken), und das soll so bleiben.
 */
.portal-impressum-hinweis {
  margin: 0;
}

/*
 * Der Protokoll-Versand an der Glasfaser-Detailseite (Issue 2228).
 *
 * Das Formular ist breiter begrenzt als ein gewöhnliches Eingabeformular,
 * weil die Vorschau darin einen ganzen Mailtext zeigt: Auf 32rem bräche jede
 * Zeile zweimal um, und der Mensch sähe nicht mehr, was der Empfänger sieht.
 */
.portal-protokoll-versand {
  max-width: 48rem;
}

/*
 * Der Vorschau-Block hebt sich von den Eingabefeldern ab, weil er etwas
 * ANDERES ist: kein Feld, das man ausfüllt, sondern das Ergebnis. Ohne die
 * Absetzung liest er sich wie ein weiteres, seltsam unbeschriftetes Feld.
 */
.portal-protokoll-vorschau {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-4);
  padding: var(--bro-abstand-12);
  border: 1px solid var(--bro-linie);
  border-radius: var(--bro-radius-m);
  background: var(--bro-flaeche-1);
}

.portal-protokoll-vorschau h3,
.portal-protokoll-vorschau p {
  margin: 0;
}

/*
 * Der Mailtext selbst. Umbrechend statt scrollend, aus demselben Grund wie
 * beim Transkript (`.portal-transkript`): Es ist Fließtext mit eigenen
 * Zeilenenden, und eine waagerechte Bildlaufleiste macht ihn unlesbar. Die
 * Schriftfamilie wird geerbt, damit die Vorschau aussieht wie eine Mail und
 * nicht wie Quelltext — `pre` trägt sonst eine Festbreitenschrift.
 */
.portal-protokoll-vorschau-text {
  margin: 0;
  white-space: pre-wrap;
  overflow-wrap: anywhere;
  font-family: inherit;
  color: var(--bro-tinte-2);
}

/*
 * Die Entwurfsansicht einer Gastnachricht (Issue #4478).
 *
 * Keine festen Farben und keine festen Größen — alles über Tokens
 * (Hausregel „Design nur über Tokens"). Und keine Fremd-Ressource: Was hier
 * steht, kommt aus dem eigenen Bündel (ADR-0003).
 */
.portal-entwurf {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-12);
}

/* Gast, Buchung, Betreff als zweispaltige Liste — sie ordnet, sie rechnet nicht. */
.portal-entwurf-kopf {
  display: grid;
  grid-template-columns: auto 1fr;
  gap: var(--bro-abstand-4) var(--bro-abstand-12);
  margin: 0;
}

.portal-entwurf-kopf dt {
  color: var(--bro-tinte-2);
  font-size: var(--bro-schrift-klein-groesse);
  line-height: var(--bro-schrift-klein-zeilenhoehe);
}

.portal-entwurf-kopf dd {
  margin: 0;
}

/*
 * Die letzte Nachricht des Gasts. Sie ist abgesetzt, damit niemand sie mit
 * dem eigenen Entwurf verwechselt — der eine Text geht hinaus, der andere
 * kam herein.
 */
.portal-entwurf-gastnachricht blockquote {
  margin: 0;
  padding: var(--bro-abstand-8) var(--bro-abstand-12);
  border-inline-start: 2px solid var(--bro-linie);
  border-radius: var(--bro-radius-s);
  background: var(--bro-flaeche-1);
}

/*
 * Die Bedienregel aus #4493 steht AM Feld und nicht erst in der
 * Fehlermeldung — sonst erfährt der Mitarbeiter sie erst, wenn er gegen sie
 * gelaufen ist. Sie ist deshalb sichtbar, aber ruhig: klein und in der
 * zweiten Tinte, wie jeder andere Hinweis am Formular.
 */
.portal-entwurf-bedienregel,
.portal-entwurf-schutz {
  margin: 0;
  color: var(--bro-tinte-2);
}

.portal-entwurf textarea {
  width: 100%;
  box-sizing: border-box;
  font-family: var(--bro-schrift-familie);
  font-size: var(--bro-schrift-fliesstext-groesse);
  line-height: var(--bro-schrift-fliesstext-zeilenhoehe);
  padding: var(--bro-abstand-8);
  border: 1px solid var(--bro-linie);
  border-radius: var(--bro-radius-s);
  background: var(--bro-flaeche-0);
  color: var(--bro-tinte-1);
}

/* Das Gedächtnis der Wohnungen (#2165). Je Wohnung eine Karte mit Tabelle und
   zwei Formularen; die Karte bringt ihre Gestalt aus `bro-karte` mit, hier
   steht nur der Abstand. Die Klassen selbst sind auch ohne Gestalt nötig: Sie
   sind die Anker, an denen ein E2E-Locator SEIN Formular greift — auf dieser
   Seite steht „Diesen Satz löschen“ so oft, wie das Gedächtnis Sätze hat. */

.portal-gedaechtnis-wohnung {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-8);
}

.portal-gedaechtnis-loeschen,
.portal-gedaechtnis-leeren,
.portal-gedaechtnis-pflege {
  margin: 0;
}
/* Die Zuordnung der Portal-Inserate (#2295). Die Karte bringt ihre Gestalt aus
   `bro-karte` mit; hier stehen nur der Abstand und die waagerechte Rolle der
   Tabelle. Die Klassen sind auch ohne eigene Gestalt nötig: Sie sind die Anker,
   an denen ein E2E-Locator SEIN Formular greift — auf dieser Seite steht
   „Zuordnen“ so oft, wie das Portal Inserate gemeldet hat. */

.portal-kanal-zuordnung {
  margin-bottom: var(--bro-abstand-16);
}

/* Eine Tabelle mit fünf Spalten passt auf einem Telefon nicht. Sie rollt
   deshalb in ihrem eigenen Kasten waagerecht, statt die ganze Seite zu
   verbreitern. */

.portal-kanal-tabelle {
  overflow-x: auto;
}

.portal-kanal-stand {
  margin: var(--bro-abstand-8) 0;
}

.portal-kanal-zuordnen {
  display: flex;
  flex-wrap: wrap;
  align-items: end;
  gap: var(--bro-abstand-8);
}

/* #2250: Tabellen der Nebenkostenabrechnung bleiben auch mobil lesbar. */
[data-nebenkosten-detail] {
  display: flex;
  flex-direction: column;
  gap: var(--bro-abstand-24);
  min-width: 0;
  overflow-wrap: anywhere;
}

[data-nebenkosten-detail] > section,
[data-nebenkosten-detail] fieldset,
.nebenkosten-position,
.nebenkosten-beleg {
  min-width: 0;
}

.nebenkosten-tabelle,
.hausverwaltung-tabelle {
  overflow-x: auto;
  overflow-wrap: normal;
}

/* Hausverwaltung: Zählerformulare und ein vollständig zuordenbarer Ausdruck. */
.hausverwaltung-uebergabe-oeffnen,
[class^="hausverwaltung-zaehler-"] form,
.hausverwaltung-ablesung-erfassen form {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: var(--bro-abstand-12);
}

.hausverwaltung-uebergabe-kontext {
  display: grid;
  grid-template-columns: max-content 1fr;
  gap: var(--bro-abstand-8) var(--bro-abstand-16);
}

.hausverwaltung-uebergabe-kontext dd {
  margin: 0;
  overflow-wrap: anywhere;
}

@media print {
  @page hausverwaltung-uebergabe {
    margin: 16mm;
  }

  body.portal-boden:has(.hausverwaltung-uebergabe) {
    page: hausverwaltung-uebergabe;
    min-height: 0;
    background: var(--bro-flaeche-1);
  }

  .portal-schale:has(.hausverwaltung-uebergabe),
  .portal-inhalt:has(> .hausverwaltung-uebergabe) {
    display: block;
    min-height: 0;
    padding: 0;
  }

  .portal-schale:has(.hausverwaltung-uebergabe) > .portal-seitenleiste,
  .portal-inhalt:has(> .hausverwaltung-uebergabe) > :not(.hausverwaltung-uebergabe),
  .hausverwaltung-uebergabe-druckhinweis,
  body:has(.hausverwaltung-uebergabe) > .portal-rechtsfuss {
    display: none;
  }

  .hausverwaltung-uebergabe {
    border: 0;
    box-shadow: none;
    padding: 0;
    overflow: visible;
  }

  .hausverwaltung-uebergabe .bro-statuspille {
    white-space: normal;
    color: var(--bro-tinte-1);
  }

  .hausverwaltung-uebergabe h2,
  .hausverwaltung-uebergabe h3 {
    break-after: avoid;
  }

  .hausverwaltung-uebergabe tr,
  .hausverwaltung-uebergabe li {
    break-inside: avoid;
  }
}
