  /* Neutrale Grundflächen (Grundanforderung 10.07.2026: kein flächiges Braun,
     Material-Optik lebt nur in der Bibliotheks-Szene). Gold bleibt der Akzent. */
  /* Renés Entwurf (09.08.2026): hell ist die Vorgabe, dunkel die zweite Welt.
     Der Akzent ist Indigo statt Gold — alle Bausteine hängen an den Variablen,
     deshalb trägt der Wechsel hier durch die ganze Anwendung. */
  :root {
    --bg: #f6f6fb; --panel: #ffffff; --linie: #e7e7f0; --text: #0e0e1a;
    --dim: #5c5c74; --gold: #4f46e5; --goldhell: #7c4dee; --gruen: #16a34a;
    --blau: #2563eb; --warn: #ea580c; --papier: #ffffff; --leder: #fafaff;
    --bgHell: #ffffff; --kopf: #0e0e1a; --randStark: #d5d5e4; --zeile: #f2f2f8;
    --griffFarbe: #c8c8dc; --flaecheV: #ffffff;
    --gruenText: #166534; --warnText: #9a3412; --blauText: #1d4ed8;
    /* Akzent als SCHRIFT muss dunkler (hell) bzw. heller (dunkel) sein als die
       Akzent-FLAECHE, sonst reisst das Kontrast-Minimum. */
    --goldText: #4338ca;
    --schrift: "Inter", "Segoe UI Variable Text", "Segoe UI", system-ui, -apple-system, sans-serif;
    --rund: 12px; --rundKlein: 9px;
    --griffAktiv: #a8a8c4;
    --schatten: 0 1px 2px rgba(16,16,40,.04), 0 10px 28px rgba(16,16,40,.06);
  }
  * { box-sizing: border-box; margin: 0; }

  /* --- Rollbalken (09.08.2026) ---------------------------------------------
     Die Balken des Betriebssystems sind hell und tragen Pfeil-Knöpfe — im
     dunklen Thema sitzt da ein Fremdkörper. Sie bekommen denselben Griff wie
     die Splitscreen-Grenze (`--griffFarbe`): wer etwas anfassen kann, sieht in
     dieser Anwendung überall gleich aus.

     Zwei Schreibweisen, aber NICHT nebeneinander: sobald `scrollbar-color`
     gesetzt ist, ignoriert Blink ab Version 121 die `::-webkit-`-Bausteine und
     zeichnet wieder in Systemform. Deshalb bekommt die Norm-Schreibweise nur,
     wer die Bausteine gar nicht kennt (Firefox). */
  @supports not selector(::-webkit-scrollbar) {
    * { scrollbar-width: thin; scrollbar-color: var(--griffFarbe) transparent; }
  }
  ::-webkit-scrollbar { width: 11px; height: 11px; }
  ::-webkit-scrollbar-track { background: transparent; }
  ::-webkit-scrollbar-thumb { background: var(--griffFarbe); border-radius: 99px;
    border: 3px solid transparent; background-clip: padding-box; }
  ::-webkit-scrollbar-thumb:hover { background: var(--griffAktiv); background-clip: padding-box; }
  /* Pfeil-Knöpfe weg: sie sind der auffälligste Teil der Systemform und in
     einer Anwendung, die überall sonst ohne sie auskommt, reine Altlast. */
  ::-webkit-scrollbar-button { display: none; width: 0; height: 0; }
  ::-webkit-scrollbar-corner { background: transparent; }
  body { background: var(--bg);
    color: var(--text); font: 15px/1.55 var(--schrift);
    -webkit-font-smoothing: antialiased;
    /* dvh statt vh (30.07.2026): Auf Mobilbrowsern zaehlt vh die Hoehe OHNE
       ein- und ausfahrende Adressleiste — die unterste Zeile (die Eingabe)
       lag dadurch unter der Browserleiste, und weil der Rumpf nicht scrollt,
       kam man nicht heran. vh bleibt als Rueckfall fuer alte Browser davor. */
    height: 100vh; height: 100dvh;
    display: flex; flex-direction: column; overflow: hidden; }
  header { padding: 10px 18px; border-bottom: 1px solid var(--linie); display: flex; gap: 12px; align-items: center; flex-wrap: wrap;
           background: var(--flaecheV); }
  header h1 { font: 700 20px var(--schrift); color: var(--kopf); letter-spacing: .3px;
    text-shadow: 0 1px 0 rgba(0,0,0,.6); }
  /* Status als stiller Punkt: Gold = Vorschau, Grün = Live; Klartext im Popover.
     32 Pixel, seit er im Fuss der Werkzeugleiste sitzt (16.08.2026): Das ist
     das Mindestmass fuer alles Antippbare. Der SICHTBARE Punkt darf kleiner
     sein — seine Flaeche nicht. Vorher waren es 26. */
  .statuspunkt { width: 32px; height: 32px; border-radius: 50%; border: 1px solid var(--linie);
    background: var(--panel); cursor: pointer; display: inline-flex; align-items: center;
    justify-content: center; padding: 0; }
  .statuspunkt #statusKern { width: 12px; height: 12px; border-radius: 50%; background: var(--dim); }
  .statuspunkt.attrappe #statusKern { background: var(--gold); box-shadow: 0 0 8px color-mix(in srgb, var(--gold) 55%, transparent); }
  .statuspunkt.echt #statusKern { background: var(--gruen); box-shadow: 0 0 8px rgba(88,214,141,.55); }
  .statuspunkt:hover, .statuspunkt:focus-visible { border-color: var(--gold); outline: none; }
  .infopunkt { width: 22px; height: 22px; border-radius: 50%; border: 1px solid var(--linie); background: var(--panel);
    color: var(--dim); font: 700 13px var(--schrift); cursor: pointer; line-height: 1; }
  .infopunkt:hover, .infopunkt:focus-visible { border-color: var(--gold); color: var(--goldText); outline: none; }
  .popover { position: fixed; z-index: 80; background: var(--papier); border: 1px solid var(--gold);
    border-radius: 10px; padding: 12px 14px; max-width: 340px; font-size: 13.5px; color: var(--text);
    box-shadow: 0 18px 50px rgba(0,0,0,.55); display: none; }
  .popover.offen { display: block; }
  /* Team-Roster: seit dem 16.08.2026 im Fuss der Werkzeugleiste statt in der
     Kopfzeile. Dort steht die Siegel-Reihe senkrecht und braucht ihre 32
     Pixel Grifflaeche wie jedes andere Bedienelement. */
  .rosterStack { display: flex; align-items: center; justify-content: center;
    min-width: 32px; min-height: 32px; background: transparent; border: 0; cursor: pointer;
    padding: 2px; transition: transform .15s ease, opacity .15s ease; }
  .rosterStack:hover, .rosterStack:focus-visible { transform: translateY(-1px); outline: none; }
  .rosterLabel { font-size: 11px; color: var(--dim); letter-spacing: .3px; margin-right: 7px; }
  .rosterKreis { width: 30px; height: 30px; border-radius: 50%; display: grid; place-items: center;
    font-size: 11.5px; font-weight: 600; color: #fff; background: var(--av, #3f6c9d);
    border: 2px solid var(--panel); }
  /* Die Überlappung im Kopf-Stapel ist eine BEZIEHUNG zwischen zwei Kreisen,
     keine Eigenschaft eines einzelnen. Als `margin-left: -9px` am Kreis selbst
     wirkte sie überall, auch dort, wo er als ERSTES Kind einer Zeile steht —
     im Einstellungs-Panel zog es die Marke um 9 px aus dem Behälter heraus,
     und der Rand schnitt sie an (Flow, 21.08.2026). */
  .rosterKreis + .rosterKreis { margin-left: -9px; }
  .rosterKreis.betreiber { box-shadow: 0 0 0 2px var(--gold); }
  /* Ein Maskottchen füllt den Kreis ganz — kein Farbfeld dahinter, sonst
     stünden zwei Farben übereinander, die nichts miteinander zu tun haben. */
  .rosterKreis.mitBild { background: var(--zeile); overflow: hidden; padding: 2px; }
  .rosterKreis.mitBild img { width: 100%; height: 100%; object-fit: contain;
    image-rendering: pixelated; }
  .rosterMehr { background: var(--zeile); color: var(--dim); font-weight: 400; }
  #rosterPopover { min-width: 220px; }
  #rosterPopover .popKopf { font: 700 13px var(--schrift); color: var(--kopf); margin-bottom: 8px; }
  /* Teilnehmer-Zeilen gelten an beiden Orten gleich: im Roster-Popover und in
     den Chat-Einstellungen. Menschen und Agenten sollen dieselbe Zeile haben —
     deshalb hängen die Regeln nicht mehr nur am Popover (11.08.2026). */
  #rosterPopover .rosterZeile, #chatEinstInhalt .rosterZeile {
    display: flex; align-items: center; gap: 8px; padding: 5px 2px; }
  #rosterPopover .rosterName, #chatEinstInhalt .rosterName {
    color: var(--text); font-size: 13px; }
  #chatEinstInhalt .rosterRolle { margin-left: auto; font-size: 10.5px; color: var(--dim);
    background: var(--zeile); border-radius: 99px; padding: 1px 7px; }
  #chatEinstInhalt .dsAktion { margin-left: 6px; }
  #chatEinstInhalt .rosterZeile .dsAktion:first-of-type { margin-left: auto; }
  #chatEinstInhalt .matrixTitel { margin: 14px 0 4px; }
  #chatEinstInhalt .matrixTitel h3 { font: 700 13px var(--schrift); color: var(--kopf); }
  #chatEinstInhalt .hinweis { color: var(--dim); font-size: 12.5px; margin-bottom: 6px; }
  /* Drei klar getrennte Abschnitte (Menschen/Agentinnen/Verfügbar) statt einer
     durchlaufenden Liste — Flows Befund, 13.08.2026: der Dialog wirkte wie
     eine einzige Liste, obwohl die Zeilen fachlich verschiedene Dinge waren. */
  #chatEinstInhalt .chatEinstAbschnitt { margin-top: 20px; padding-top: 14px;
    border-top: 1px solid var(--linie); }
  #chatEinstInhalt .chatEinstEinladenZeile { gap: 8px; }
  #chatEinstInhalt .chatEinstEinladenZeile select { flex: 1 1 auto; min-width: 0; }
  #rosterPopover .rosterRolle { margin-left: auto; font-size: 10.5px; color: var(--dim);
    background: var(--zeile); border-radius: 99px; padding: 1px 7px; }
  #rosterPopover .rosterAktivPunkt { flex: none; width: 7px; height: 7px; border-radius: 50%;
    background: var(--gruen); box-shadow: 0 0 6px var(--gruen); }
  #rosterPopover .rosterLegende { font-size: 10.5px; color: var(--dim); margin-top: 8px;
    border-top: 1px solid var(--linie); padding-top: 6px; }
  /* Zweite Liste im Roster: Agenten stehen wie Menschen da, bleiben aber auf
     einen Blick unterscheidbar — eckigerer Kreis statt eigener Bauform. */
  #rosterPopover .popKopf + .rosterZeile { margin-top: 2px; }
  #rosterPopover .rosterZeile + .popKopf { margin-top: 12px;
    border-top: 1px solid var(--linie); padding-top: 10px; }
  .rosterKreis.agent { border-radius: 9px; font-size: 10.5px; }
  #rosterPopover .rosterVerwalten { display: block; width: 100%; margin-top: 8px;
    background: transparent; border: 1px solid var(--linie); border-radius: 8px;
    padding: 6px 10px; color: var(--dim); font: inherit; font-size: 12px;
    cursor: pointer; text-align: left; }
  #rosterPopover .rosterVerwalten:hover, #rosterPopover .rosterVerwalten:focus-visible {
    border-color: var(--gold); color: var(--text); outline: none; }
  #menue { background: transparent; border: 1px solid transparent; padding: 6px 11px 6px 9px; cursor: pointer;
    border-radius: 8px; display: inline-flex; align-items: center; gap: 7px; color: var(--dim);
    font: inherit; font-size: 13px; }
  #menue:hover, #menue:focus-visible { background: var(--panel); border-color: var(--linie); color: var(--text); outline: none; }
  #menue .ikon { width: 22px; height: 22px; }
  /* Erstbesuch-Hinweis: der Schein liegt auf ::after, animiert wird nur die
     Deckkraft. Zusaetzlich begrenzt (8 Durchlaeufe statt endlos) — wer nach
     18 Sekunden nicht reagiert hat, braucht kein blinkendes Feld mehr,
     sondern eine Erklaerung. */
  #menue { position: relative; }
  body.erstbesuch #menue::after {
    box-shadow: 0 0 12px color-mix(in srgb, var(--gold) 35%, transparent);
    border: 1px solid var(--gold);
    animation: scheinPuls 2.2s ease-in-out 8; }
  /* Die drei Anzeigen am rechten Ende der Kopfzeile (16.08.2026): Besetzung,
     Kosten, Statuspunkt. Sie stehen hier, seit der Umschalter weg ist und der
     Platz frei wurde — in den 52 Pixeln der Werkzeugleiste hatten sie
     übereinander gequetscht gestanden. `margin-left: auto` schiebt die ganze
     Gruppe ans Ende, statt jedes Element einzeln. */
  .kopfWerkzeuge { display: flex; align-items: center; gap: 12px; margin-left: auto; }
  header .summe { font-size: 13px; color: var(--dim); font-variant-numeric: tabular-nums;
    white-space: nowrap; }
  header .summe:empty { display: none; }
  /* Seit dem 16.08.2026 hat `main` genau zwei Zustaende: Chat allein, oder Chat
     mit einem Begleiter rechts. Die Spalte springt in einem Frame — die FAHRT
     macht `#seite` per `transform` (siehe dort). Vorher stand hier eine
     Transition auf `grid-template-columns`; das ist eine Layout-Animation, bei
     der jeder einzelne Frame durch Layout und Paint laeuft und der Chat-Text in
     JEDEM Frame neu umbricht. `position: relative` ist Pflicht: ohne den
     Bezugsrahmen parkt `#seite` am Fenster statt am Raster und legt sich ueber
     die Eingabekarte. */
  /* `overflow: hidden` ist Pflicht, seit der Begleiter geparkt statt
     ausgeblendet wird: Er steht per `translateX` rechts AUSSERHALB, und ohne
     diesen Schnitt zaehlt seine Breite zur Seite. Auf einem 375 Pixel breiten
     Telefon ergab das eine 482 Pixel breite Seite, die sich waagerecht schieben
     liess — gefunden vom Bild-Pruefer am 16.08.2026, nicht von der Testsuite. */
  main { flex: 1; display: grid; min-height: 0; position: relative;
    overflow: hidden; grid-template-columns: minmax(0, 1fr); }
  body[data-bereich] main { grid-template-columns: var(--spaltLinks, minmax(380px, 44%)) 6px minmax(0, 1fr); }
  /* Vollbild-Bereiche (13.08.2026): Verwaltung ist keine Nebentaetigkeit zum
     Gespraech. Der Admin-Bereich fuellt das Fenster, statt sich neben den Chat
     zu quetschen — dort standen Rollen-Matrix und Rechte-Tabellen in einer
     halben Spalte und waren nicht bedienbar. Der Chat bleibt geladen und kommt
     beim Schliessen unveraendert zurueck. */
  body[data-bereich="admin"] main { grid-template-columns: minmax(0, 1fr); }
  body[data-bereich="admin"] #chat,
  body[data-bereich="admin"] #trenner { display: none !important; }
  /* Im Admin-Bereich gibt es niemanden zu fragen — der Chat ist ausgeblendet,
     also gehoert auch seine Eingabekarte weg. Sie stand hier bis 13.08.2026
     leer herum und lud dazu ein, ins Nichts zu tippen. */
  body[data-bereich="admin"] #eingabe { display: none !important; }
  body[data-bereich="admin"] #seite { grid-column: 1 / -1; }
  /* Ziehbare Fensterteilung: Fuge mit sichtbarem Griff (Pille) + "Größe ändern"-
     Tooltip beim Anfassen — Vorbild ist der Claude-Code-Trenner. */
  #trenner { display: none; cursor: col-resize; position: relative; z-index: 5;
    background: linear-gradient(var(--linie), var(--linie)) center / 1px 100% no-repeat; }
  body[data-bereich] #trenner { display: block; }
  #trenner::after { content: ""; position: absolute; inset: 0 -7px; }
  #trenner .griff { position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%);
    width: 5px; height: 56px; border-radius: 99px; background: var(--griffFarbe); pointer-events: none;
    box-shadow: 0 0 0 1px rgba(0,0,0,.4); transition: background .15s ease, height .15s ease; }
  #trenner:hover .griff, #trenner:focus-visible .griff, body.zieht #trenner .griff {
    background: var(--gold); height: 76px; }
  #trenner:focus-visible { outline: none; }
  #trenner::before { content: attr(data-tip); position: absolute; left: 14px; top: 50%;
    transform: translateY(-50%); background: var(--zeile); color: var(--text);
    border: 1px solid var(--linie); border-radius: 8px; padding: 6px 11px; font-size: 12.5px;
    white-space: nowrap; opacity: 0; pointer-events: none; transition: opacity .12s ease .15s;
    z-index: 40; box-shadow: 0 10px 30px rgba(0,0,0,.5); }
  #trenner:hover::before, #trenner:focus-visible::before { opacity: 1; }
  body.zieht #trenner::before { opacity: 0; }
  body.zieht { cursor: col-resize; user-select: none; }
  body.zieht main { transition: none; }
  body.zieht #seite iframe { pointer-events: none; }
  #chat { display: flex; flex-direction: column; min-width: 0; min-height: 0; border-right: 1px solid var(--linie); }
  /* Der Chat verschwindet nie mehr (16.08.2026, Renés R1) — er ist die
     Hauptansicht, alles andere tritt neben ihn. Einzige Ausnahme bleibt der
     Admin-Bereich weiter unten: Verwaltung ist keine Nebentaetigkeit zum
     Gespraech, sondern etwas anderes. */
  body[data-bereich] #chat { display: flex; }
  #verlauf { flex: 1; overflow-y: auto; padding: 20px; display: flex; flex-direction: column; gap: 12px; }
  /* Mini-Markdown in Antwort-Blasen (Flow 10.07.: Listen + Absätze statt Block-Text) */
  .blase p { margin: 7px 0; }
  .blase p:first-child { margin-top: 0; }
  .blase p:last-of-type { margin-bottom: 0; }
  .blase ul, .blase ol { margin: 7px 0 7px 20px; }
  .blase li { margin: 3px 0; }
  .blase code { background: color-mix(in srgb, var(--gold) 14%, transparent);
    border-radius: 4px; padding: 0 5px; font: 12.5px/1.5 Consolas, monospace; }
  /* Lange Dateipfade ohne Leerzeichen sprengten die Blase (gemessen 375px:
     Inhalt 614px in 272px Blase) und schoben den ganzen Verlauf seitwaerts. */
  .blase { position: relative; max-width: 82%; padding: 12px 16px; border-radius: 12px; white-space: pre-wrap;
    overflow-wrap: anywhere;
           box-shadow: 0 6px 16px rgba(0,0,0,.28); font-size: 14px; line-height: 1.6; animation: blaseRein .22s ease; }
  .blase.nutzer { align-self: flex-end; background: var(--leder); border: 1px solid var(--randStark); }
  .blase.assistent { align-self: flex-start;
    background: linear-gradient(180deg, var(--papier), var(--panel));
    border: 1px solid var(--linie); border-top: 2px solid color-mix(in srgb, var(--gold) 55%, transparent); max-width: min(82%, 46rem); padding-right: 44px; }
  .blase.hinweisblase { align-self: center; background: transparent; border: 1px dashed var(--linie); color: var(--dim); font-size: 12px; box-shadow: none; animation: none; }
  .blase .meta { display: block; margin-top: 10px; font-size: 12px; color: var(--dim); border-top: 1px solid var(--linie); padding-top: 8px; white-space: normal; }
  /* 32 Pixel Mindestfläche (Haus-Regel 17 §6) — gemessen 28 x 28 am
     25.08.2026. Das Symbol bleibt 18 Pixel; nur die Fläche wächst, deshalb
     `place-items: center` statt eines größeren Innenabstands. */
  .kopier { position: absolute; top: 8px; right: 8px; background: transparent; border: 1px solid transparent;
    border-radius: 7px; padding: 4px; cursor: pointer; line-height: 0;
    display: grid; place-items: center; min-width: 32px; min-height: 32px; }
  @media (max-width: 768px) { .kopier { min-width: 36px; min-height: 36px; } }
  .kopier { color: var(--dim); }
  .kopier .ikon { width: 18px; height: 18px; opacity: .75; }
  .kopier:hover .ikon, .kopier:focus-visible .ikon { color: var(--text); }
  .kopier:hover, .kopier:focus-visible { border-color: var(--gold); outline: none; }
  .kopier:hover .ikon { opacity: 1; }
  .kopier .bestaetigt { position: absolute; right: 28px; top: 4px; font-size: 12px; color: var(--gruen); white-space: nowrap; }
  /* Kosten-Chip: Ebene 1 = Klartext-Cent, Ebene 3 = aufklappbares Pro-Datei-Detail */
  .kostenChip { display: flex; width: fit-content; align-items: center; gap: 8px;
    margin-top: 10px; padding: 6px 12px; min-height: 32px;
    border: 1px solid color-mix(in srgb, var(--gold) 5%, transparent); border-radius: 99px; background: color-mix(in srgb, var(--gold) 8%, transparent);
    font-size: 14px; color: var(--text); cursor: pointer; }
  .kostenChip:hover, .kostenChip:focus-visible { border-color: var(--gold); outline: none; }
  .kostenChip .punkt { width: 10px; height: 10px; border-radius: 50%; background: var(--gold); flex: none; }
  .kostenDetail { display: none; margin-top: 8px; border: 1px solid var(--linie); border-radius: 10px;
    background: var(--bg); padding: 10px 12px; font-size: 13px; color: var(--dim);
    font-variant-numeric: tabular-nums; white-space: normal; user-select: text; }
  .kostenDetail.offen { display: block; }
  .kostenDetail .kdz { display: flex; justify-content: space-between; gap: 12px; padding: 2px 0; border-bottom: 1px solid var(--zeile); }
  .kostenDetail .kdz:last-child { border-bottom: 0; }
  .kostenDetail .kdz .kdatei { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--text); }
  .kostenDetail .kdz .kwert { flex: none; }
  /* Denkspur: die sichtbare Suche — Lampe, Notizen, Buch-Karten */
  .denkspur { align-self: stretch; max-width: min(96%, 52rem); border: 1px solid var(--linie); border-radius: 12px;
    background: linear-gradient(180deg, var(--papier), var(--panel)); padding: 12px 16px 12px 58px; position: relative; font-size: 14px; }
  .denkspur .lampe { position: absolute; left: 12px; top: 12px; width: 32px; height: 32px; border-radius: 50%;
    background: radial-gradient(circle at 50% 38%, #ffe9ad 0 28%, #c9a24b 62%, #3a2e1c 100%);
    box-shadow: 0 0 0 rgba(255,233,173,0); }
  /* Glut-Animation liegt auf .lampe::after (siehe scheinPuls weiter unten) */
  .denkspur .dkopf { display: flex; align-items: center; gap: 8px; margin-bottom: 6px; }
  .denkspur .dkopf .ikon { width: 18px; height: 18px; }
  .denkspur .dkopf b { font: 600 13.5px var(--schrift); color: var(--kopf); }
  .denkspur .herkunft { font-size: 11.5px; color: var(--goldText); border: 1px solid color-mix(in srgb, var(--gold) 45%, transparent);
    border-radius: 99px; padding: 2px 9px; margin-left: auto; cursor: pointer; background: transparent; font-family: inherit; }
  .denkspur .dschritt { display: flex; align-items: baseline; gap: 8px; padding: 3px 0; color: var(--dim); animation: zettelRein .25s ease; }
  .denkspur .dschritt.simuliert::after { content: "(simuliert)"; font-size: 11px; color: var(--warn); }
  .denkspur .dtreffer { display: flex; flex-wrap: wrap; gap: 8px; padding: 6px 0; }
  .denkspur .dbuch { background: var(--papier); border: 1px solid var(--linie); border-left: 3px solid var(--gold);
    border-radius: 8px; padding: 6px 10px; font-size: 12.5px; max-width: 240px; animation: karteRein .35s ease backwards; }
  .denkspur .dbuch .dname { color: var(--text); font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .denkspur .dbuch .dsnippet { color: var(--dim); font-size: 11.5px; max-height: 34px; overflow: hidden; }
  .denkspur .dfuss { display: flex; gap: 10px; margin-top: 6px; }
  .denkspurChip { align-self: flex-start; display: inline-flex; align-items: center;
    gap: 7px; margin-top: 2px; min-height: 32px;
    /* 100 % war ein Tippfehler (Bestand, gefunden 09.08.2026): Akzent-Schrift auf
       voller Akzent-Flaeche ergibt 1:1 — der Text war schlicht unsichtbar.
       12 % ist der Toenungswert, den die uebrigen Chips auch tragen. */
    background: color-mix(in srgb, var(--gold) 12%, transparent); border: 1px solid color-mix(in srgb, var(--gold) 45%, transparent); border-radius: 99px; padding: 5px 12px;
    font-size: 13px; color: var(--goldText); cursor: pointer; font-family: inherit; }
  .denkspurChip .ikon { width: 15px; height: 15px; }
  .dsAktion { background: transparent; border: 1px solid var(--linie); color: var(--dim); border-radius: 7px;
    padding: 3px 10px; font-size: 12px; cursor: pointer; font-family: inherit; }
  .dsAktion:hover { border-color: var(--gold); color: var(--text); }
  /* Der Begleiter-Slot (16.08.2026). Zwei Zustaende, EIN Element:
     geparkt  — absolut am rechten Rand, per `transform` aus dem Bild geschoben,
                `body { overflow: hidden }` schneidet den Ueberhang ab;
     offen    — normales Grid-Kind in der dritten Spalte.
     Er ist NIE `display: none`. Das ist keine Feinheit, sondern der Kern: Eine
     Szene vermisst sich beim Bauen, und in einem ausgeblendeten Rahmen misst sie
     0×0 — genau daher kam das leere Regal, das bisher nur ein kompletter
     Neuaufbau heilte. `transform` aendert weder Geometrie noch DOM-Position, die
     Szene behaelt also ihre Masse und laeuft im Parkzustand einfach weiter. */
  #seite { min-width: 0; background: var(--bg); position: absolute;
    top: 0; bottom: 0; right: 0; width: var(--begleiterBreite, 44%);
    transform: translateX(112%); pointer-events: none; z-index: 4; }
  /* `relative`, nicht `static`: Der Slot bleibt Grid-Kind (relativ steht im
     Fluss), ist aber weiterhin der Bezugsrahmen fuer seine absolut liegenden
     Kinder. Mit `static` bezog sich die Panel-Schicht auf `main` und legte sich
     ueber den Chat gleich mit — gemessen am 16.08.2026, eine Zeile Ursache. */
  body[data-bereich] #seite { position: relative; width: auto;
    transform: none; pointer-events: auto; }
  /* Das Panel ist eine eigene Schicht UEBER der Bibliothek, kein Ersatz fuer
     sie. Vorher blendete ein offener Bereich den iframe aus; damit schlossen
     sich die beiden Begleiter gegenseitig aus. `:empty` erledigt das Ein- und
     Ausblenden ohne eine Zeile JavaScript — der Wrapper ist genau dann da, wenn
     ein Panel darin haengt. */
  #seitePanel { position: absolute; inset: 0; z-index: 3; background: var(--bg); }
  #seitePanel:empty { display: none; }

  /* --- Die Fahrt (16.08.2026) ------------------------------------------------
     Nur `transform` und `opacity` — beides laeuft auf dem Compositor, ohne
     Layout und ohne Paint. Wichtig ist dabei die FESTE Breite: Weil sich die
     Breite waehrend der Fahrt nie aendert, bricht der Inhalt des Begleiters
     kein einziges Mal um. Eine Breiten- oder Rasteranimation tut genau das, in
     jedem Frame, und das ist der Grund, warum sie hier nicht steht.
     Herein: schnell los, weich ankommen. Hinaus: kuerzer und beschleunigend —
     ein Weggehen darf sich nicht so wichtig nehmen wie ein Ankommen. */
  @keyframes seiteRein { from { transform: translateX(102%); } to { transform: translateX(0); } }
  @keyframes seiteRaus { from { transform: translateX(0); } to { transform: translateX(102%); } }
  @keyframes inhaltRein { from { opacity: 0; } to { opacity: 1; } }
  /* Der Trenner schiebt mit herein: Er beginnt seine Fahrt am rechten Rand und
     kommt an seinem Platz zur Ruhe. Das ist es, was die Bewegung zu „jemand
     schiebt die Fensterteilung von aussen ins Bild" macht — ohne ihn faehrt
     nur eine Flaeche ein, mit ihm ist es eine Geste. */
  @keyframes trennerRein { from { transform: translateX(46px); opacity: 0; } to { transform: translateX(0); opacity: 1; } }
  body[data-bereich] #trenner { animation: trennerRein .34s cubic-bezier(.22, .9, .28, 1) both; }
  #seite.faehrtRein { animation: seiteRein .34s cubic-bezier(.22, .9, .28, 1) both; will-change: transform; }
  #seite.faehrtRaus { animation: seiteRaus .2s cubic-bezier(.55, 0, .85, .4) forwards; will-change: transform; }
  /* Der Inhalt blendet leicht verzoegert nach: Die Flaeche kommt zuerst, das
     Geschriebene darauf. Das ergibt Tiefe, ohne dass sich etwas bewegt. */
  #seite.faehrtRein #seitePanel, #seite.faehrtRein iframe { animation: inhaltRein .16s ease .09s both; }
  /* Ein Wechsel zwischen zwei offenen Begleitern faehrt NICHT hinaus und wieder
     herein — der Slot bleibt stehen, nur seine Schicht tauscht. Alles andere
     waere ein Zappeln fuer eine Bewegung, die niemand angefordert hat. */
  #seite.wechselt #seitePanel { animation: inhaltRein .12s ease both; }

  /* --- Werkzeugleiste am rechten Rand (20.08.2026, Renés N2) -----------------
     Sie STEHT. Vorher schwebte sie als Glaskapsel ueber dem Gespraech und kam
     erst, wenn der Zeiger sich naeherte — das kostete an einem Tag sechs
     Commits, drei davon fuer eine einzige Schwellen-Zahl, und Flow traf sie
     trotzdem nicht, wenn er im gerade geoeffneten Werkzeug arbeitete.

     Der Grund fuer das Schweben war: 60 Pixel dauerhaft „fuer zwei Knoepfe"
     seien eine Behauptung. Das stimmte. Mit meeting-gebundenen Werkzeugen
     stehen dort jetzt mehr, und die Behauptung ist eingeloest.

     Sie liegt jetzt im LAYOUT-FLUSS, nicht darueber. Das ist kein Detail: Ein
     schwebendes Element kann Bedienelemente verdecken, ohne dass eine Pruefung
     anschlaegt — der Bild-Pruefer kennt Verdeckung durch Schwebendes nicht.
     Im Fluss greift seine Ueberlappungs-Klinge wieder. */
  #arbeitsflaeche { flex: 1; min-height: 0; display: flex; }
  #gespraech { flex: 1; min-width: 0; display: flex; flex-direction: column; }
  #werkzeugleiste { flex: none; width: 60px; display: flex; flex-direction: column;
    align-items: center; gap: 10px; padding: 12px 0; overflow-y: auto;
    background: var(--panel); border-left: 1px solid var(--linie); }
  #werkzeugleiste .wlOben { display: flex; flex-direction: column; align-items: center; gap: 10px; }
  /* Die Knöpfe treten aus dem Glas hervor: eigene Fläche, eigener Rand, eigener
     Schatten — sonst schwimmen sie darin. Sie sind 44 Pixel groß, deutlich über
     dem Mindest-Tippziel; das Symbol darin ist der Blickfang, nicht der Kasten. */
  .wlKnopf { position: relative; width: 44px; height: 44px; display: flex;
    align-items: center; justify-content: center;
    background: color-mix(in srgb, var(--panel) 70%, transparent);
    border: 1px solid color-mix(in srgb, var(--linie) 80%, transparent);
    border-radius: 14px; color: var(--dim); cursor: pointer; font-family: inherit; padding: 0;
    box-shadow: 0 2px 10px rgba(0, 0, 0, .18);
    transition: color .18s ease, background .18s ease, border-color .18s ease,
                transform .22s cubic-bezier(.22, .9, .28, 1), box-shadow .22s ease; }
  .wlKnopf .ikon { width: 22px; height: 22px;
    transition: transform .22s cubic-bezier(.34, 1.56, .64, 1); }
  /* Beim Überfahren wächst der Knopf und atmet — ein ruhiger Puls, kein
     Blinken. Die Amplitude ist absichtlich klein (1.07 bis 1.13): Sie soll
     sagen „ich bin bereit", nicht um Aufmerksamkeit betteln. Alles über
     `transform`, also ohne Layout-Kosten. */
  @keyframes wlAtem {
    0%, 100% { transform: translateX(-3px) scale(1.07); }
    50%      { transform: translateX(-5px) scale(1.13); } }
  /* Der Klick-Impuls: ein kurzer Stoß nach vorn, deutlich stärker als der Puls,
     und ein Ring, der nach außen läuft. Er ist die Quittung — man sieht, DASS
     der Klick angekommen ist, bevor sich sonst irgendetwas bewegt. */
  @keyframes wlImpuls {
    0%   { transform: translateX(-5px) scale(1.13); }
    35%  { transform: translateX(-9px) scale(1.28); }
    100% { transform: translateX(0) scale(.96); } }
  @keyframes wlRing {
    from { transform: scale(.9); opacity: .55; }
    to   { transform: scale(1.9); opacity: 0; } }
  .wlKnopf:hover, .wlKnopf:focus-visible {
    background: color-mix(in srgb, var(--gold) 14%, var(--panel));
    border-color: color-mix(in srgb, var(--gold) 55%, transparent);
    color: var(--goldText); outline: none;
    animation: wlAtem 1.6s ease-in-out infinite;
    box-shadow: 0 6px 20px rgba(0, 0, 0, .3); }
  .wlKnopf:hover .ikon, .wlKnopf:focus-visible .ikon { transform: scale(1.16); }
  .wlKnopf.impuls, .wlKnopf.impuls:hover {
    animation: wlImpuls .34s cubic-bezier(.34, 1.56, .64, 1) both;
    background: color-mix(in srgb, var(--gold) 26%, var(--panel));
    border-color: var(--gold); }
  .wlKnopf.impuls::after {
    content: ""; position: absolute; inset: -2px; border-radius: 16px;
    border: 2px solid var(--gold); pointer-events: none;
    animation: wlRing .44s ease-out both; }
  .wlKnopf.aktiv { color: var(--goldText);
    background: color-mix(in srgb, var(--gold) 20%, var(--panel));
    border-color: color-mix(in srgb, var(--gold) 62%, transparent); }
  /* Der offene Knopf sagt beim Ueberfahren, was ein Klick tut: Sein Symbol
     weicht einem Kreuz. Ohne das ist er ein Knopf, der aussieht wie „hier bin
     ich" und sich verhaelt wie „hier gehe ich" — der Nutzer muss raten, ob er
     das Werkzeug schliesst oder es nur nochmal oeffnet. Ein Wort waere die
     andere Loesung; das Symbol ist die des Hauses. */
  /* Grundzustand: gar nicht da. Ohne diese Zeile ist das Kreuz an jedem NICHT
     offenen Knopf ein normales Inline-Element und steht neben dem Symbol —
     zwei Zeichen in einem Knopf, von denen eines nichts bedeutet (16.08.2026
     im Bild gesehen). Erst der offene Knopf legt es als Schicht darüber. */
  .wlKnopf .wlZu { display: none; }
  .wlKnopf.aktiv .wlZu { position: absolute; inset: 0; display: flex;
    align-items: center; justify-content: center; opacity: 0;
    transition: opacity .16s ease; pointer-events: none; }
  .wlKnopf.aktiv .wlZu .ikon { width: 18px; height: 18px; }
  .wlKnopf.aktiv:hover .wlZu, .wlKnopf.aktiv:focus-visible .wlZu { opacity: 1; }
  .wlKnopf.aktiv:hover > .ikon, .wlKnopf.aktiv:focus-visible > .ikon { opacity: 0; }
  .wlKnopf > .ikon { transition: transform .22s cubic-bezier(.34, 1.56, .64, 1), opacity .16s ease; }
  /* Der Indikator waechst aus der Mitte, statt zu erscheinen: eine Bewegung,
     die sagt „dieser hier", ohne dass ein zweites Element auftaucht. */
  .wlKnopf::before { content: ""; position: absolute; left: -7px; top: 50%;
    width: 3px; height: 22px; margin-top: -11px; border-radius: 99px;
    background: var(--gold); transform: scaleY(0); transform-origin: center;
    transition: transform .16s cubic-bezier(.22, .9, .28, 1); }
  .wlKnopf.aktiv::before { transform: scaleY(1); }
  /* Das Abzeichen sagt „hier liegt etwas Unerledigtes" — ein Punkt, keine Zahl.
     Die Zahl steht im Hover-Hinweis, wo sie niemanden beim Lesen stoert. */
  .wlKnopf .wlPunkt { position: absolute; top: 6px; right: 6px; width: 8px; height: 8px;
    border-radius: 50%; background: var(--gold);
    box-shadow: 0 0 0 2px var(--panel), 0 0 8px color-mix(in srgb, var(--gold) 70%, transparent); }
  .wlTrenner { width: 22px; height: 1px; background: var(--linie); border: 0; margin: 2px 0; }
  /* Der Inhalt bekommt KEINEN Rand für die Leiste. Sie schwebt darüber und darf
     überdecken — das ist der Sinn der Sache: Sie ist da, wenn man sie ruft, und
     kostet sonst nichts. Ein reservierter Streifen wäre die schlechteste
     Mischung aus beidem, dauerhaft schmaler Chat für ein Werkzeug, das man
     selten sieht. Dass sie nichts Wichtiges verdeckt, regeln zwei Dinge: Sie
     ist mittig und nur so hoch wie ihr Inhalt, und ihr `max-height` endet über
     der Eingabekarte. */
  /* Bereiche im Splitscreen fuellen die Flaeche — und muessen scrollen, wenn
     der Inhalt laenger ist (30.07.2026). Ohne overflow-y war alles unterhalb
     der Fensterkante unerreichbar: im Admin-Bereich hing die halbe Kontenliste
     ausserhalb, ohne jeden Hinweis darauf. `inset: 0` allein macht einen
     Kasten randvoll, nicht scrollbar. */
  #seite .pmInhalt { position: absolute; inset: 0; width: 100%; max-height: none; border-radius: 0; border: 0;
    border-left: 1px solid var(--linie); box-shadow: none;
    overflow-y: auto; overscroll-behavior: contain;
    padding-bottom: max(24px, env(safe-area-inset-bottom, 0)); }
  /* Der Kopf mit dem Schliessen-Knopf bleibt beim Scrollen stehen. Seit der
     Bereich scrollt, wanderte er sonst nach oben aus dem Bild — und mit ihm
     der einzige sichtbare Ausweg (30.07.2026). */
  /* Der Seitenkopf traegt den Namen des Bereichs, seit er mitwandert
     (13.08.2026). Die eigene Ueberschrift des Dialogs sagte danach dasselbe
     ein zweites Mal, 30 Pixel darunter — ein Fix, der im selben Zug seinen
     eigenen Fehler baute. Der Schliessen-Knopf bleibt, der Titel geht. */
  body[data-bereich] #seite .pmInhalt .pmKopf h2 { display: none; }
  /* Ohne die Überschrift fällt das `flex: 1` weg, das den Knopf nach rechts
     geschoben hat — er klebte dann in der linken oberen Ecke des Begleiters
     (Flow, 21.08.2026). Der Ausweg aus einem Panel gehört oben rechts, in
     JEDER Ansicht. */
  body[data-bereich] #seite .pmInhalt .pmKopf { justify-content: flex-end; }
  /* `top` muss den negativen Rand ausgleichen, sonst klebt der Kopf genau um
     diesen Betrag zu tief und legt sich ueber die erste Zeile darunter — im
     Notizzettel war das der halb verdeckte Einleitungssatz (16.08.2026
     gemessen: Kopf 72–130, Hinweis 112–135). Die Grundregel weiter unten macht
     es richtig; hier stand `top: 0` gegen `margin-top: -18px`. */
  #seite .pmInhalt .pmKopf { position: sticky; top: -18px; z-index: 2;
    background: var(--panel); margin: -18px -20px 0; padding: 18px 20px 14px; }

  /* Verdunkelung hinter der Regal-Schublade — MUSS ausserhalb jeder
     Media-Query stehen (30.07.2026). Vorher lag die Regel nur im 700er-Block;
     oberhalb davon war das Element ein normales Grid-Kind in <main> und
     belegte eine eigene Spalte: bei 1280px schrumpfte der Chat dadurch von
     634 auf 262px. Ein unsichtbares Element darf niemals Platz beanspruchen. */
  #schubladeSchliesser {
    position: fixed; inset: 0; z-index: 59; background: rgba(0,0,0,.45);
    opacity: 0; pointer-events: none; transition: opacity .26s ease; }
  #schubladeSchliesser.offen { opacity: 1; pointer-events: auto; }
  #seite iframe { width: 100%; height: 100%; border: 0; display: block; background: var(--bg); }
  /* Der Text-Schreibtisch ist seit 11.08.2026 kein eigener Modus mehr, sondern
     die Alternative zur Szene: `data-tisch="liste"` (Profil-Einstellung) tauscht
     überall dort, wo sonst das Regal steht, den nüchternen Halter ein. Ein
     offener Rail-Bereich hat Vorrang vor beidem. */
  aside { padding: 18px; overflow-y: auto; display: none; }
  body[data-bereich] aside { display: none; }
  /* Der Text-Schreibtisch ist dieselbe Auskunft wie die Szene, nur nuechtern —
     deshalb traegt die Werkzeugleiste EINEN Knopf fuer beide. Wer die Liste
     gewaehlt hat, bekommt sie in derselben Spalte, in der sonst das Regal
     steht; der Szenen-Slot bleibt dann geparkt (16.08.2026). */
  body[data-tisch="liste"][data-bereich="bibliothek"] aside { display: block; }
  /* Die Einfahr-Animation traegt `animation-fill-mode: both` und haelt damit
     ihren Endzustand `translateX(0)` fest — sie schlug diese Park-Regel, und in
     der schlichten Darstellung lag die Szene trotzdem ueber dem Schreibtisch.
     Der Befund ist aelter als dieser Umbau (auch in v0.66 so); er faellt erst
     auf, seit die schlichte Darstellung wirklich benutzt wird (20.08.2026).
     `animation: none` nimmt der Fahrt ihren Nachhall — geparkt heisst geparkt. */
  body[data-tisch="liste"][data-bereich="bibliothek"] #seite,
  body[data-tisch="liste"][data-bereich="bibliothek"] #seite.faehrtRein,
  body[data-tisch="liste"][data-bereich="bibliothek"] #seite.wechselt {
    animation: none;
    position: absolute; width: var(--begleiterBreite, 44%);
    transform: translateX(112%); pointer-events: none; }
  aside h2 { font: 700 15px var(--schrift); color: var(--kopf); margin-bottom: 4px; }
  aside .hinweis { color: var(--dim); font-size: 13px; margin-bottom: 12px; }
  .karte { background: var(--panel); border: 1px solid var(--linie); border-radius: 10px; padding: 8px 10px; margin-bottom: 12px; }
  .karte .kzeile { display: flex; gap: 10px; align-items: center; padding: 8px 6px; font-size: 14px;
    border-bottom: 1px solid var(--zeile); min-height: 44px; border-radius: 7px; }
  .karte .kzeile:hover { background: color-mix(in srgb, var(--gold) 6%, transparent); }
  .karte .kzeile:last-child { border-bottom: 0; }
  .karte .kzeile .name { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .karte .kzeile .klasse { font-size: 11.5px; color: var(--dim); flex: none; }
  .karte .kzeile.pflicht .klasse { color: var(--goldText); }
  .karte .kzeile .wegKnopf { flex: none; background: transparent; border: 1px solid var(--linie); color: var(--dim);
    border-radius: 7px; padding: 6px 12px; font-size: 12.5px; cursor: pointer; font-family: inherit; min-height: 32px; }
  .karte .kzeile .wegKnopf:hover, .karte .kzeile .wegKnopf:focus-visible { border-color: var(--gold); color: var(--text); outline: none; }
  .karte .kzeile.wartend { opacity: .55; }
  .karte .kzeile .wartend-marke { font-size: 11px; color: var(--warn); flex: none; }
  .undoChip { display: none; align-items: center; gap: 8px; background: var(--leder); border: 1px solid var(--randStark);
    border-radius: 99px; padding: 6px 13px; font-size: 13px; cursor: pointer; margin-bottom: 12px; font-family: inherit; color: var(--text); }
  .undoChip.offen { display: inline-flex; }
  .undoChip:hover { border-color: var(--gold); }
  .ersparnis { font-size: 13.5px; color: var(--gruen); margin-bottom: 12px; cursor: help; }

  /* --- Admin-Bereich (29.07.2026) ---------------------------------------
     Aufbau nach Dringlichkeit: der Alarm-Kasten oben faellt auf, der Rest ist
     ruhig. Bewegung ausschliesslich ueber transform/opacity (ADR-077). */
  .adminBlock { margin-top: 18px; }
  .adminBlock h3 { font: 600 13px var(--schrift); color: var(--dim);
    text-transform: uppercase; letter-spacing: .06em; margin-bottom: 8px; }
  .adminZeile { display: flex; align-items: center; gap: 10px; padding: 8px 10px;
    border: 1px solid var(--linie); border-radius: 9px; margin-bottom: 6px;
    background: var(--panel); flex-wrap: wrap; }
  .adminZeile .kName { flex: 1 1 140px; }
  .adminZeile .kKosten { color: var(--dim); font-size: 12.5px; }
  /* 29 Pixel hoch waren sie bis zum Kontrollgang am 23.08.2026 — drei Pixel
     unter dem Haus-Mindestmass. Der Bild-Pruefer meldete sie an der laufenden
     Oberflaeche; von Hand faellt so etwas nie auf. */
  .adminZeile select, .fristFeld { min-height: 32px; background: var(--bg); color: var(--text);
    border: 1px solid var(--linie); border-radius: 7px; padding: 5px 8px;
    font: inherit; font-size: 13px; }
  .fristFeld { width: 74px; }
  .adminZeile .dim { color: var(--dim); font-size: 12.5px; }
  .notausAn { color: var(--warn); font-weight: 600; }
  .kettenOk { border-color: color-mix(in srgb, var(--gruen) 40%, var(--linie)); }
  .kettenBruch { border-color: var(--warn); color: var(--warn); }

  /* Der Alarm-Kasten erscheint nur, wenn es etwas zu melden gibt — deshalb
     darf er auffallen. Ein Dauer-Kasten mit "keine Vorkommnisse" wuerde nach
     drei Tagen ueberlesen, und dann faellt der echte Fall auch nicht mehr auf. */
  .alarmKasten { border: 1px solid var(--warn); border-radius: 10px; padding: 12px 14px;
    background: color-mix(in srgb, var(--warn) 8%, var(--panel)); }
  .alarmKasten h3 { font: 600 13.5px var(--schrift); color: var(--warn); margin-bottom: 8px; }
  .alarmZeile { display: flex; align-items: baseline; gap: 10px; padding: 4px 0;
    font-size: 13.5px; }
  .alarmZeile .alarmZahl { font-weight: 700; min-width: 34px; }
  .alarmZeile .alarmText { flex: 1; }
  .alarmZeile .alarmWer { color: var(--dim); font-size: 12.5px; }
  .alarmZeile.stufe-hoch .alarmZahl { color: var(--warn); }
  .alarmZeile.stufe-mittel .alarmZahl { color: var(--goldText); }
  .alarmZeile.stufe-niedrig { color: var(--dim); }

  /* Konto-Anlage + Zugangskarte: der Moment, in dem jemand aufgenommen wird.
     Die Karte darf auffallen — sie steht nur einmal da. */
  #adminNeuZeile input { flex: 1 1 130px; background: var(--bg); color: var(--text);
    border: 1px solid var(--linie); border-radius: 7px; padding: 7px 10px;
    font: inherit; font-size: 13.5px; }
  #adminNeuZeile input:focus { outline: none; border-color: var(--gold); }
  .zugangsKarte { margin: 10px 0 4px; padding: 14px 16px; border-radius: 11px;
    border: 1px solid var(--gold); background: color-mix(in srgb, var(--gold) 7%, var(--panel)); }
  .zugangsKarte .zkTitel { font-size: 13px; color: var(--dim); margin-bottom: 8px; }
  .zugangsKarte .zkZeile { font-size: 14.5px; margin-bottom: 2px; }
  .zugangsKarte .zkWort { font: 700 22px ui-monospace, "Consolas", monospace;
    color: var(--goldText); letter-spacing: .04em; margin: 6px 0 12px;
    user-select: all; word-break: break-all; }
  .zugangsKarte .zkHinweis { font-size: 12px; color: var(--dim); margin-top: 10px;
    line-height: 1.5; }

  /* Rechts-Einstellungen: eingeklappt, unauffaellig, bewusst am Ende. */
  .adminTief { margin-top: 22px; border-top: 1px solid var(--linie); padding-top: 12px; }
  .adminTief summary { cursor: pointer; color: var(--dim); font-size: 13px;
    transition: color .15s ease; }
  .adminTief summary:hover { color: var(--text); }
  .adminTief .hinweis { margin: 10px 0; }
  /* Stopp-Knopf an der wartenden Antwort (29.07.2026). Zurueckhaltend, aber
     immer sichtbar: er ist der Ausweg aus einer langen Wartezeit, kein
     Zierrat. Bewegung nur ueber opacity/transform (ADR-077). */
  /* 32 Pixel Mindestmaß (Haus-Regel 17 §6). Der Knopf stand auf 61 x 27 —
     gemessen am 25.08.2026, als die Warte-Uhr daneben kam und der Bild-Prüfer
     die Fläche zum ersten Mal überhaupt zu sehen bekam. Er ist ausgerechnet
     der Knopf, den man in einer langen Wartezeit trifft, oft auf dem Telefon.
     Nur die Fläche wächst, die Schrift bleibt. */
  .stoppKnopf { display: inline-flex; align-items: center; min-height: 32px;
    margin-top: 10px; padding: 5px 14px;
    font-size: 12.5px; font-family: inherit; color: var(--dim); cursor: pointer;
    background: transparent; border: 1px solid var(--linie); border-radius: 8px;
    opacity: .75; transition: opacity .15s ease, transform .15s ease; }
  @media (max-width: 768px) { .stoppKnopf { min-height: 36px; } }
  .stoppKnopf:hover, .stoppKnopf:focus-visible {
    opacity: 1; transform: translateY(-1px); color: var(--text);
    border-color: var(--randStark); outline: none; }
  .warnungen { font-size: 12.5px; color: var(--warn); margin-bottom: 12px; }
  /* Dazulegen-Picker: Auswahl echter Unterlagen statt Pfad-Raten */
  #dazuPicker { position: relative; }
  #dazuKnopf { width: 100%; display: flex; align-items: center; gap: 8px; background: var(--bg); border: 1px solid var(--linie);
    border-radius: 8px; color: var(--dim); padding: 10px 12px; font: inherit; font-size: 14px; cursor: pointer; min-height: 44px; }
  #dazuKnopf .ikon { width: 17px; height: 17px; }
  #dazuKnopf:hover, #dazuKnopf:focus-visible { border-color: var(--gold); color: var(--text); outline: none; }
  /* Hoehe an die Fensterhoehe koppeln: bei niedrigen Fenstern ragte die
     Liste nach oben aus dem Bild (gemessen 1280x420: Oberkante bei -81). */
  #dazuListe { display: none; position: absolute; left: 0; right: 0; bottom: calc(100% + 6px);
    max-height: min(300px, 40dvh);
    overflow-y: auto; background: var(--papier); border: 1px solid var(--gold); border-radius: 10px; z-index: 40;
    box-shadow: 0 -14px 40px rgba(0,0,0,.5); padding: 6px; }
  #dazuListe.offen { display: block; }
  #dazuSuche { width: calc(100% - 12px); margin: 4px 6px 8px; background: var(--bg); border: 1px solid var(--linie);
    border-radius: 7px; color: var(--text); padding: 8px 10px; font: inherit; font-size: 13.5px; }
  #dazuListe .dlEintrag { display: block; width: 100%; text-align: left; background: transparent; border: 0;
    color: var(--text); padding: 9px 10px; border-radius: 7px; cursor: pointer; font: inherit; font-size: 13.5px; min-height: 40px; }
  #dazuListe .dlEintrag:hover, #dazuListe .dlEintrag.fokus { background: color-mix(in srgb, var(--gold) 12%, transparent); }
  #dazuListe .dlEintrag .dlPfad { display: block; font-size: 11px; color: var(--dim); }
  /* Demo-Zugänge vergeben (Team-Einstellungen, 11.08.2026) */
  .demoForm { display: flex; gap: 8px; flex-wrap: wrap; margin: 12px 0; }
  .demoForm input { flex: 1; min-width: 170px; background: var(--panel);
    border: 1px solid var(--randStark); border-radius: var(--rundKlein);
    color: var(--text); padding: 10px 12px; font: inherit; font-size: 14px; }
  .demoForm input:focus { outline: none; border-color: var(--gold); }
  .demoMeldung:empty { display: none; }
  .demoMeldung { margin: 6px 0 14px; font-size: 13.5px; word-break: break-all; }
  .demoMeldung.gut { color: var(--gruenText); font-weight: 600; }
  .demoMeldung.schlecht { color: var(--warnText); }
  .demoZeile { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap;
    padding: 9px 0; border-top: 1px solid var(--linie); font-size: 13.5px; }
  .demoZeile .dzName { font-weight: 600; }
  .demoZeile .dzMail, .demoZeile .dzBis { color: var(--dim); }
  .demoZeile .dzStatus { margin-left: auto; font-size: 11.5px; border-radius: 99px;
    padding: 2px 9px; background: var(--zeile); color: var(--dim); }
  .demoZeile .dzStatus.aktiv { background: color-mix(in srgb, var(--gruen) 16%, transparent);
    color: var(--gruenText); }
  .demoZeile .dzStatus.werbung { background: color-mix(in srgb, var(--warn) 16%, transparent);
    color: var(--warnText); }

  /* Abgelaufener Demo-Zugang (11.08.2026): eine ruhige, ganzflächige Einladung.
     Sie liegt über allem, weil danach wirklich nichts mehr zu bedienen ist. */
  /* `margin: auto` statt `align-items: center` — und das ist kein Geschmack,
     sondern eine Reparatur (Kontrollgang 25.08.2026). Ein zentriertes Flex-Kind,
     das höher ist als sein Behälter, ragt oben HINAUS, und dieser Überstand ist
     durch Scrollen nicht erreichbar: `scrollTop` steht schon auf 0. Gemessen
     bei 1280 x 720 — die Karte war 1243 Pixel hoch, ihr Kopf stand bei -261,
     und die Überschrift „Dein Testzugang ist abgelaufen" war damit unlesbar.
     Automatische Ränder verteilen nur POSITIVEN Freiraum; ist er negativ,
     rechnen sie als null, und die Karte beginnt sauber oben. */
  .werbeSchicht { position: fixed; inset: 0; z-index: 200; display: flex;
    align-items: flex-start; justify-content: center; padding: 24px;
    background: var(--bg); overflow-y: auto; }
  .werbeKarte { max-width: 560px; margin: auto; background: var(--panel);
    border: 1px solid var(--linie);
    border-radius: var(--rund); box-shadow: var(--schatten); padding: 34px 32px; }
  .werbeKarte h1 { margin: 0 0 14px; font-size: 25px; color: var(--kopf); }
  .werbeKarte p { margin: 0 0 16px; color: var(--dim); line-height: 1.55; font-size: 15px; }
  .werbeKarte .werbeFrage { color: var(--text); font-weight: 600; margin-bottom: 12px; }
  /* Der Datenblock (24.08.2026): abgesetzt, nicht laut. Er ist die Grundlage
     der Entscheidung darunter, deshalb steht er in einem eigenen Kasten —
     aber ohne Warnfarbe: es ist kein Fehler, sondern das vereinbarte Ende. */
  /* Zwei Klassen, nicht eine: `.werbeKarte p` setzt Farbe und Größe und ist
     spezifischer als ein einzelner Klassen-Wähler. Ohne den Vorsatz sah die
     Überschrift aus wie Fließtext — gemessen am 25.08.2026, nachdem sie
     gebaut war und niemand hingeschaut hatte. */
  .werbeKarte .werbeDatenTitel { color: var(--text); font-weight: 600; font-size: 15px;
    margin: 0 0 6px; padding-top: 16px; border-top: 1px solid var(--linie); }
  .werbeKarte .werbeDatenText { font-size: 14px; margin-bottom: 18px; }
  .werbeZeile { display: flex; gap: 10px; flex-wrap: wrap; margin-bottom: 14px; }
  .werbeZeile input { flex: 1; min-width: 200px; background: var(--panel);
    border: 1px solid var(--randStark); border-radius: var(--rundKlein);
    color: var(--text); padding: 12px 14px; font: inherit; font-size: 15px; }
  .werbeZeile input:focus { outline: none; border-color: var(--gold); }
  .werbeKnopf { background: var(--gold); color: #fff; border: 0;
    border-radius: var(--rundKlein); padding: 12px 22px; font: inherit;
    font-size: 15px; font-weight: 600; cursor: pointer; min-height: 44px; }
  .werbeKnopf:disabled { opacity: .55; cursor: default; }
  .werbeRueckmeldung:empty { display: none; }

  /* --- Lebenszeichen während der Wartezeit (25.08.2026) -------------------- */
  /* Die Uhr steht ruhig neben „denkt nach …", nicht als Alarm: Sie soll sagen
     „es läuft", nicht „es dauert zu lange". Der Geduld-Satz darunter erscheint
     nur, wo ein Modell im eigenen Haus rechnet. */
  .warteUhr { margin-left: 8px; font-size: 12px; color: var(--dim);
    font-variant-numeric: tabular-nums; }
  .warteUhr:empty { display: none; }
  .warteGeduld { margin-top: 8px; font-size: 12.5px; line-height: 1.5;
    color: var(--dim); border-top: 1px solid var(--linie); padding-top: 8px; }
  .werbeRueckmeldung { color: var(--gruenText); font-weight: 600; }
  .werbeHinweis { font-size: 12.5px; }
  .werbeAbmelden { background: transparent; border: 1px solid var(--linie);
    border-radius: var(--rundKlein); color: var(--dim); padding: 9px 16px;
    font: inherit; font-size: 13px; cursor: pointer; min-height: 40px; }

  /* --- Rückmeldung auf der Werbeseite (25.08.2026) ------------------------- */
  /* Abgesetzt wie der Datenblock, aber mit Fläche statt nur einer Linie: Es ist
     das Einzige auf dieser Seite, das eine Handlung erbittet, die dem Betreiber
     etwas einbringt. Die drei Stufen tragen dieselben Farben wie der
     Rechte-Umschalter (--gut / --text-schwach / --warn) — wer die eine Fläche
     kennt, muss die andere nicht lernen. */
  .werbeRueck { margin: 4px 0 20px; padding: 16px 18px; background: var(--bg);
    border: 1px solid var(--linie); border-radius: var(--rundKlein); }
  .werbeKarte .werbeRueckTitel { margin: 0 0 4px; color: var(--text);
    font-weight: 600; font-size: 16px; }
  .werbeKarte .werbeRueckSatz { margin: 0 0 12px; font-size: 13.5px; }
  .werbeRueckWahl { display: flex; gap: 10px; margin-bottom: 12px; }
  /* 44 Pixel, nicht 32: Das ist der eine Klick, auf den es hier ankommt, und er
     wird meistens auf einem Telefon getroffen. Das Symbol darin bleibt klein. */
  .werbeRueckStufe { display: grid; place-items: center; width: 52px; height: 44px;
    border: 1px solid var(--linie); border-radius: var(--rundKlein);
    background: transparent; cursor: pointer; opacity: .62;
    transition: opacity .12s ease, background-color .12s ease; }
  .werbeRueckStufe .ikon { width: 20px; height: 20px; }
  /* Bewusst `--gruenText` / `--dim` / `--warnText` und NICHT die Werte aus
     `.uKnopf`: Dort stehen `var(--gut, #5aa469)` und `var(--text-schwach)` —
     zwei Namen, die es in keiner der beiden Paletten gibt, sodass immer der
     Notwert greift und der dunkle Entwurf leer ausgeht. Diese drei sind echte
     Marken mit einer hellen UND einer dunklen Fassung. */
  .werbeRueckStufe.gut { color: var(--gruenText); }
  .werbeRueckStufe.geht { color: var(--dim); }
  .werbeRueckStufe.schlecht { color: var(--warnText); }
  .werbeRueckStufe:hover { opacity: 1; }
  .werbeRueckStufe[aria-pressed="true"] { opacity: 1;
    box-shadow: inset 0 0 0 1px currentColor; }
  .werbeRueckStufe.gut[aria-pressed="true"] {
    background: color-mix(in srgb, var(--gruen) 26%, transparent); }
  .werbeRueckStufe.geht[aria-pressed="true"] {
    background: color-mix(in srgb, var(--linie) 70%, transparent); }
  .werbeRueckStufe.schlecht[aria-pressed="true"] {
    background: color-mix(in srgb, var(--warn) 26%, transparent); }
  .werbeRueckFeld { display: block; width: 100%; box-sizing: border-box;
    background: var(--panel); border: 1px solid var(--randStark);
    border-radius: var(--rundKlein); color: var(--text); padding: 10px 12px;
    font: inherit; font-size: 14px; resize: vertical; margin-bottom: 10px; }
  .werbeRueckFeld:focus { outline: none; border-color: var(--gold); }
  .werbeRueckSenden { background: var(--gold); color: #fff; border: 0;
    border-radius: var(--rundKlein); padding: 10px 20px; font: inherit;
    font-size: 14px; font-weight: 600; cursor: pointer; min-height: 40px; }
  .werbeRueckSenden:disabled { opacity: .45; cursor: default; }
  .werbeKarte .werbeRueckBleibt { margin: 10px 0 0; font-size: 12px; }
  .werbeKarte .werbeRueckMeldung { margin: 8px 0 0; color: var(--gruenText);
    font-weight: 600; font-size: 14px; }
  .werbeRueckMeldung:empty { display: none; }
  @media (max-width: 768px) {
    .werbeRueckStufe { height: 48px; }
    .werbeRueckSenden { width: 100%; }
  }

  /* --- Der Hinweis-Kasten beim ersten Anmelden (25.08.2026) ---------------- */
  /* Eine Zeile je Grenze, Symbol vorn. Kein Fließtext-Absatz: Wer vier Sätze
     hintereinander liest, liest den vierten nicht mehr — und der vierte ist
     hier der über das langsame Haus-Modell. */
  .dhListe { display: flex; flex-direction: column; gap: 10px; margin: 4px 0 20px; }
  .dhZeile { display: flex; align-items: flex-start; gap: 12px; background: var(--bg);
    border: 1px solid var(--linie); border-radius: var(--rundKlein); padding: 11px 13px; }
  .dhZeile .ikon { width: 18px; height: 18px; flex: none; margin-top: 2px;
    color: var(--goldText); }
  .dhSatzZeile { font-size: 14px; line-height: 1.5; color: var(--text); }

  /* Erwähnungen mit @ (11.08.2026). Die Marke im Verlauf ist bewusst ruhig —
     sie soll den Namen auffindbar machen, nicht den Satz zerreissen. */
  .blase .erwaehnung { color: var(--goldText); font-weight: 600;
    background: color-mix(in srgb, var(--gold) 10%, transparent);
    border-radius: 5px; padding: 0 3px; }
  .erwaehnPicker { position: fixed; z-index: 90; background: var(--panel);
    border: 1px solid var(--randStark); border-radius: var(--rundKlein);
    box-shadow: var(--schatten); padding: 5px; max-height: 260px; overflow-y: auto; }
  .erwaehnPicker .epEintrag { display: flex; align-items: baseline; gap: 8px; width: 100%;
    text-align: left; background: transparent; border: 0; color: var(--text);
    padding: 8px 10px; border-radius: 7px; cursor: pointer; font: inherit;
    font-size: 14px; min-height: 38px; }
  .erwaehnPicker .epEintrag:hover, .erwaehnPicker .epEintrag.aktiv {
    background: color-mix(in srgb, var(--gold) 12%, transparent); }
  .erwaehnPicker .epArt { margin-left: auto; font-size: 11px; color: var(--dim); }
  /* --- Eingabe-Karte (12.08.2026) -----------------------------------------
     EIN Rahmen statt fünf: Nur die Karte trägt einen Rand, alles darin ist
     randlos. EIN Farbfleck: Gold liegt auf dem Senden-Knopf und auf dem
     Fokus-Rand, sonst nirgends. Zwei Schriftgrößen: 16px Eingabe, 13px
     Bedienung. Und feste Anker — wachsen darf nur das Feld nach oben,
     Nachbarn bewegen sich nie (ADR-077 als Gestaltungsprinzip). */
  #eingabe { position: relative; padding: 10px 16px 16px; background: var(--bg); }
  #eingabeKarte { background: var(--panel); border: 1px solid var(--linie);
    border-radius: var(--rund); box-shadow: var(--schatten);
    transition: border-color .15s ease, box-shadow .15s ease; }
  #eingabeKarte:focus-within { border-color: var(--gold);
    box-shadow: var(--schatten), 0 0 0 3px color-mix(in srgb, var(--gold) 12%, transparent); }
  #frage { display: block; width: 100%; background: transparent; border: 0;
    color: var(--text); padding: 14px 16px 4px; font: inherit; font-size: 14px;
    line-height: 1.45; resize: none; max-height: 190px; overflow-y: auto; }
  #frage:focus { outline: none; }
  #frage::placeholder { color: var(--dim); }
  /* Beilagen: alles, was die nächste Frage mitnimmt, in einer Zeile. Ohne
     Inhalt fällt sie ganz aus dem Layout — kein reservierter Leerraum. */
  #beilagen { display: none; flex-wrap: wrap; gap: 6px; padding: 0 12px 4px; }
  #beilagen.hat-inhalt { display: flex; }
  #eingabeFuss { display: flex; align-items: center; gap: 8px; padding: 4px 8px 8px 12px;
    min-height: 48px; }
  #eingabeFuss .fussLuecke { flex: 1; }
  /* Besetzung: wer würde antworten? Die vorderste Münze ist die Antwortende.
     Zwei Handlungen an einem Ort, deshalb zwei Klickziele: der Name schreibt
     die Erwähnung ins Feld (das, was man ständig tut), das Chevron zeigt den
     Tisch (das, was man selten braucht). Optisch bleibt es ein Element. */
  #besetzungGruppe { display: inline-flex; align-items: center; border-radius: 99px; }
  #besetzungGruppe:hover, #besetzungGruppe:focus-within { background: var(--zeile); }
  #besetzung { display: inline-flex; align-items: center; gap: 9px; background: transparent;
    border: 0; border-radius: 99px; padding: 5px 8px 5px 6px; font: inherit;
    color: var(--text); cursor: pointer; min-height: 40px; }
  #besetzung:focus-visible { outline: 2px solid var(--gold); outline-offset: -2px; }
  /* 32 statt 28 Pixel Breite: Der Bild-Pruefer hat ihn am 20.08.2026 als
     einziges zu kleines Tippziel der Chat-Ansicht gemeldet. Das Symbol darin
     bleibt 14 Pixel — nur die Flaeche waechst. */
  #besetzungMehr { display: grid; place-items: center; width: 32px; height: 40px;
    background: transparent; border: 0; border-radius: 99px; cursor: pointer; color: var(--dim); }
  #besetzungMehr .ikon { width: 14px; height: 14px; }
  #besetzungMehr:hover { color: var(--text); }
  #besetzungMehr:focus-visible { outline: 2px solid var(--gold); outline-offset: -2px; }
  #besetzung .muenzen { display: inline-flex; }
  #besetzung .muenzen > * { margin-left: -8px; box-shadow: 0 0 0 2px var(--panel); }
  #besetzung .muenzen > *:first-child { margin-left: 0; }
  #besetzung .bText { font-size: 13px; white-space: nowrap; }
  #besetzung .bName { font-weight: 600; }
  #besetzung .bWort { color: var(--dim); }
  #besetzung .bMehr { display: grid; place-items: center; width: 24px; height: 24px;
    border-radius: 9px; background: var(--zeile); color: var(--dim); font-size: 11px;
    font-weight: 600; }
  #besetzung.antwortet .muenzen > *:first-child { animation: muenzePuls 1.6s ease-in-out infinite; }
  @keyframes muenzePuls { 0%, 100% { opacity: 1; } 50% { opacity: .55; } }
  /* Modell + Kosten sind EIN Element. Die Kostenbreite steht fest, damit ein
     neuer Wert nichts verschiebt — er blendet über. */
  #modellChip { display: inline-flex; align-items: baseline; gap: 7px; background: transparent;
    border: 0; border-radius: 99px; padding: 7px 12px; font: inherit; color: var(--text);
    font-size: 13px; cursor: pointer; min-height: 40px; }
  #modellChip:hover, #modellChip:focus-visible { background: var(--zeile); outline: none; }
  #modellSchaetzung { font-size: 12.5px; color: var(--dim); font-variant-numeric: tabular-nums;
    min-width: 72px; text-align: right; transition: opacity .15s ease; }
  #modellSchaetzung:not(:empty)::before { content: "·"; margin-right: 7px; opacity: .5; }
  #eingabeFuss #senden { width: 44px; height: 44px; padding: 0; justify-content: center;
    background: var(--gold); border-color: var(--gold); color: #fff;
    transition: opacity .15s ease; }
  #eingabeFuss #senden .ikon { width: 20px; height: 20px; }
  #eingabeFuss #senden:hover, #eingabeFuss #senden:focus-visible {
    background: var(--goldhell); border-color: var(--goldhell); }
  /* Leeres Feld oder laufende Antwort: der Knopf ist wirklich deaktiviert,
     nicht nur blass. Ein Knopf, der aussieht wie ein Knopf und nichts tut,
     ist für Tastatur und Vorlese-Programme eine Falle. */
  #eingabeFuss #senden:disabled { opacity: .4; cursor: default; }
  #eingabeFuss #senden:disabled:hover { background: var(--gold); border-color: var(--gold); }
  #besetzungPopover, #modellPopover { bottom: calc(100% + 6px); max-width: 340px; }
  #besetzungPopover { left: 0; }
  #modellPopover { right: 56px; min-width: 240px; }
  .popoverKopf { font-size: 11.5px; text-transform: uppercase; letter-spacing: .04em;
    color: var(--dim); margin-bottom: 8px; }
  .modellZeile { display: flex; align-items: center; gap: 12px; width: 100%; min-height: 40px;
    background: transparent; border: 0; border-radius: 7px; padding: 8px 10px; font: inherit;
    font-size: 13.5px; color: var(--text); cursor: pointer; text-align: left; }
  .modellZeile:hover, .modellZeile.aktiv { background: color-mix(in srgb, var(--gold) 12%, transparent); }
  .modellZeile .mzPreis { margin-left: auto; color: var(--dim); font-size: 12.5px;
    font-variant-numeric: tabular-nums; }
  /* Ein Schloss klebt an dem Abschnitt, den es zusperrt. Seit der Name des
     Meetings darüber steht (21.08.2026), braucht es sichtbaren Abstand nach
     oben — sonst las es sich als Sperre des Namensfeldes, das offen ist. */
  .besetzungSperre { display: flex; align-items: center; gap: 8px; padding: 8px 10px;
    margin-top: 14px; font-size: 12.5px; color: var(--dim); }
  .besetzungSperre .ikon { width: 14px; height: 14px; flex: none; }
  /* Die Zeilen im Tisch-Popover sind Knöpfe: ein Klick spricht die Agentin an. */
  .rosterZeile.ansprechbar { width: 100%; background: transparent; border: 0;
    font: inherit; text-align: left; cursor: pointer; border-radius: 7px; }
  .rosterZeile.ansprechbar:hover, .rosterZeile.ansprechbar:focus-visible {
    background: color-mix(in srgb, var(--gold) 12%, transparent); outline: none; }
  /* Erstbesuch: der Puls sitzt auf der KARTE, nicht mehr auf dem Textfeld —
     ein <textarea> trägt keine Pseudo-Elemente, deshalb lief die Animation
     dort direkt auf dem Element und malte dauernd neu. */
  body.erstbesuch #eingabeKarte { animation: eingabePuls 2.2s ease-in-out 8; }
  button.aktion { background: var(--leder); color: var(--text); border: 1px solid var(--randStark); border-radius: 9px;
    padding: 11px 18px; font: inherit; font-size: 15px; cursor: pointer; min-height: 44px; display: inline-flex; align-items: center; gap: 8px; }
  button.aktion .ikon { width: 17px; height: 17px; }
  button.aktion:hover, button.aktion:focus-visible { border-color: var(--gold); outline: none; }
  /* Bestätigungs-Kärtchen (Neu anfangen) — Szene-Sprache statt confirm() */
  #bestaetigung { position: absolute; right: 20px; bottom: calc(100% + 8px); background: var(--papier);
    border: 1px solid var(--gold); border-radius: 12px; padding: 14px 16px; max-width: 330px; display: none;
    box-shadow: 0 18px 50px rgba(0,0,0,.55); z-index: 45; }
  #bestaetigung.offen { display: block; }
  #bestaetigung p { font-size: 14.5px; margin-bottom: 10px; }
  #bestaetigung .knoepfe { display: flex; gap: 8px; }
  .chip { align-self: center; display: flex; align-items: center; gap: 7px;
    background: var(--zeile); border: 1px solid var(--randStark); border-radius: 99px;
    padding: 7px 13px 7px 11px; font: inherit; font-size: 13px; cursor: pointer; white-space: nowrap; }
  .chip:hover { border-color: var(--gold); }
  .chip b.plus { color: var(--gruen); font-weight: 700; }
  .chip b.minus { color: var(--warn); font-weight: 700; }
  /* Stapel-Icon aus der PixelFlow-Mini-Registry (file, Bibliotheks-Palette) */
  .stapelMini { position: relative; width: 20px; height: 20px; display: inline-block;
    background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7OHOkAAAEdSURBVDiNxVI9S8RAEJ3ZXS8LZ5FgkBQ2giJI4LCw8Xfcf7C0uEItbOwstLDzHwlXCRZJfwe5IHcp/GCzX1bCZi+JVwi+bt7MvnmzPAQHZfm6TSWPwAOljM3e3udpmtZ+jzUKy24sVZwgSpe3oE6SmE0B4MoXQLdYFvkTBoPLKNqvXL4qs7GRcIqECIFfd0ky+vjpEV+xDboWz8AwBGKOOfCLzhO6sLM3mgHAeVVmY21sw/VGDvqw5mBLDvlqkT+0DSOaKQCqXgEdiFpLuG8VMHj2qwMqgoGxn5NWAWL/yUG4S64RD0VVZtbPzoYODtYi3ClgjDJxfDTveuDjb3NAAJao5e1qkavWaYsJoHp0qcaHFMXLkDEe9m30z/sGF79snsF8XV0AAAAASUVORK5CYII="),
      url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7OHOkAAAEdSURBVDiNxVI9S8RAEJ3ZXS8LZ5FgkBQ2giJI4LCw8Xfcf7C0uEItbOwstLDzHwlXCRZJfwe5IHcp/GCzX1bCZi+JVwi+bt7MvnmzPAQHZfm6TSWPwAOljM3e3udpmtZ+jzUKy24sVZwgSpe3oE6SmE0B4MoXQLdYFvkTBoPLKNqvXL4qs7GRcIqECIFfd0ky+vjpEV+xDboWz8AwBGKOOfCLzhO6sLM3mgHAeVVmY21sw/VGDvqw5mBLDvlqkT+0DSOaKQCqXgEdiFpLuG8VMHj2qwMqgoGxn5NWAWL/yUG4S64RD0VVZtbPzoYODtYi3ClgjDJxfDTveuDjb3NAAJao5e1qkavWaYsJoHp0qcaHFMXLkDEe9m30z/sGF79snsF8XV0AAAAASUVORK5CYII=");
    background-repeat: no-repeat, no-repeat; background-position: 0 0, 4px 4px;
    image-rendering: pixelated; }
  #tokenLeiste { display: none; gap: 10px; align-items: center; flex-wrap: wrap;
    padding: 10px 18px; background: var(--zeile); border-bottom: 1px solid var(--randStark); font-size: 13.5px; }
  body.token-pflicht #tokenLeiste { display: flex; }
  #tokenLeiste input { flex: 1; min-width: 220px; background: var(--bg); border: 1px solid var(--linie);
    border-radius: 7px; color: var(--text); padding: 8px 11px; font: inherit; font-size: 13px; }
  #tokenLeiste .aktion { padding: 8px 14px; }

  /* --- Hamburger-Menü: Drawer auf allen Größen (Icon + Wort je Zeile) -------- */
  #seitenmenue { position: fixed; top: 0; left: 0; bottom: 0; width: min(280px, 85vw);
    background: var(--flaecheV); border-right: 1px solid var(--linie); z-index: 60;
    display: flex; flex-direction: column; align-items: stretch; padding: 16px 12px; overflow-y: auto; gap: 2px;
    transform: translateX(-105%); transition: transform .22s ease; box-shadow: 24px 0 60px rgba(0,0,0,.45); }
  body.menue-offen #seitenmenue { transform: none; }
  #schleier { position: fixed; inset: 0; background: rgba(8,6,3,.55); opacity: 0;
    pointer-events: none; transition: opacity .22s ease; z-index: 55; }
  body.menue-offen #schleier { opacity: 1; pointer-events: auto; }
  .railKnopf { display: flex; flex-direction: row; align-items: center; gap: 11px; width: 100%;
    background: transparent; border: 1px solid transparent; border-radius: 10px; padding: 7px 10px;
    color: var(--dim); font: inherit; font-size: 13.5px; cursor: pointer; min-height: 0; }
  .railKnopf .ikon { width: 18px; height: 18px; color: var(--dim); transition: color .14s ease; }
  .railKnopf:hover, .railKnopf:focus-visible { border-color: var(--linie); background: color-mix(in srgb, var(--gold) 7%, transparent); color: var(--text); outline: none; }
  .railKnopf:hover .ikon, .railKnopf:focus-visible .ikon { color: var(--text); }
  .railKnopf.aktiv { color: var(--goldText); border-color: color-mix(in srgb, var(--gold) 4%, transparent); }
  .railKnopf.aktiv .ikon { color: var(--goldText); }
  .railKnopf .rlabel { line-height: 1.15; text-align: left; }
  .railTrenner { border: 0; border-top: 1px solid var(--linie); margin: 6px 8px; }
  /* Aufklappbare Menü-Gruppen: Standard ZU — Erstblick zeigt nur das Tagesgeschäft */
  .mgruppe { display: flex; align-items: center; gap: 6px; width: 100%; background: transparent;
    border: 0; font-size: 10.5px; letter-spacing: .9px; text-transform: uppercase;
    color: var(--dim); margin: 10px 0 2px; padding: 6px 10px; cursor: pointer;
    border-radius: 8px; font-family: inherit; text-align: left; }
  .mgruppe::before { content: "\25B8"; font-size: 9px; transition: transform .15s ease; }
  .mgruppe.offen::before { transform: rotate(90deg); }
  .mgruppe:hover, .mgruppe:focus-visible { color: var(--text); background: color-mix(in srgb, var(--gold) 6%, transparent); outline: none; }
  .gruppeInhalt { display: none; }
  /* flex: none ist Pflicht — das Menü ist eine Flex-Spalte, und ohne die Sperre
     quetscht sie eine aufgeklappte Gruppe auf wenige Pixel zusammen, statt das
     Menü rollen zu lassen. Eine 36-px-Liste ist schlimmer als ein Rollbalken. */
  .gruppeInhalt.offen { display: block; padding-left: 8px; flex: 0 0 auto; }
  .navGruppe { flex: 0 0 auto; }
  /* Doppelte Klasse, damit sie das .gruppeInhalt.offen von oben schlaegt:
     sonst zieht eine einmal mobil aufgeklappte Gruppe auf den Desktop mit. */
  .nur-mobil.nur-mobil { display: none; }
  .mgruppe .gzahl { margin-left: auto; font-size: 10.5px; color: var(--dim);
    background: var(--zeile); border-radius: 99px; padding: 1px 7px; }
  /* Die Verlaufs-Liste ist die einzige Gruppe, die unbegrenzt wachsen kann —
     hundert Chats ergäben sonst ein Menü von mehreren tausend Pixeln. Sie
     rollt in sich selbst, damit die Navigation darüber stehen bleibt. */
  .gruppeInhalt[data-gruppe="chats"].offen { max-height: 50vh; min-height: 180px;
    overflow-y: auto; overscroll-behavior: contain; flex: 0 1 auto; }

  /* --- Konto-Feld am Nutzer-Chip (09.08.2026) ------------------------------
     Es SCHWEBT über dem Menü statt es zu verlängern — deshalb kostet es null
     Höhe und kann keinen Rollbalken auslösen. Der Chip war vorher ein zweiter
     Weg zur Konto-Gruppe; jetzt ist er der einzige. */
  .chipHalter { margin-top: auto; position: relative; padding-top: 8px; }
  .chipMenue { position: absolute; left: 0; right: 0; bottom: 100%; margin-bottom: 6px;
    padding: 6px; border: 1px solid var(--linie); border-radius: var(--rund);
    background: var(--panel); box-shadow: var(--schatten); z-index: 6;
    max-height: 68vh; overflow-y: auto; overscroll-behavior: contain; }
  .chipMenue[hidden] { display: none; }
  .cmTrenner { border: 0; border-top: 1px solid var(--linie); margin: 6px 4px; }
  .railFuss { margin-top: auto; text-align: center; font-size: 10.5px; color: var(--dim);
    border-top: 1px solid var(--linie); margin-top: 8px; padding-top: 8px; line-height: 1.5; }
  .railAnsicht { display: flex; flex-direction: column; gap: 4px; }
  .mkopf { display: flex; align-items: center; justify-content: space-between; margin-bottom: 10px; }
  .mkopf h2 { font: 700 17px var(--schrift); color: var(--kopf); }
  .mkopf button { background: transparent; border: 0; color: var(--dim); font-size: 20px; cursor: pointer; padding: 2px 8px; }
  .bereichKopf { font-size: 11.5px; color: var(--dim); border: 1px solid var(--linie);
    border-radius: 999px; padding: 2px 9px; white-space: nowrap; }
  .bereichKopf:empty { display: none; }

  /* --- Chatverläufe im Menü (v0.7): 4 Kategorien, aufklappbar + scrollbar ---- */
  .chatKat { display: flex; align-items: center; gap: 6px; width: 100%; background: transparent;
    border: 0; font-size: 12px; color: var(--dim); padding: 7px 10px 7px 18px; cursor: pointer;
    border-radius: 8px; font-family: inherit; text-align: left; }
  .chatKat::before { content: "\25B8"; font-size: 8px; transition: transform .15s ease; }
  .chatKat.offen::before { transform: rotate(90deg); }
  .chatKat:hover, .chatKat:focus-visible { color: var(--text); background: color-mix(in srgb, var(--gold) 6%, transparent); outline: none; }
  .chatKat .kzahl { margin-left: auto; font-size: 10.5px; color: var(--dim);
    background: var(--zeile); border-radius: 99px; padding: 1px 7px; }
  .chatKatListe { display: none; }
  .chatKatListe.offen { display: block; max-height: 235px; overflow-y: auto; padding-left: 12px; }
  .chatKatListe .hinweis { font-size: 11.5px; padding: 4px 10px; }
  /* Meeting-Liste (13.08.2026, E1): sie IST das Menue und waechst nach INNEN.
     Der Deckel plus eigener Rollbalken ist der Grund, warum der Erstblick auch
     bei 200 Meetings die gemessene Obergrenze haelt — vorher wuchs die Liste
     das Menue auf und erzeugte dessen Rollbalken. */
  /* Der Deckel ist GERECHNET, nicht geschaetzt: das Menue ohne Liste misst
     338 px (nachgemessen im Browser), die Abnahme-Grenze fuer den Erstblick
     liegt bei 563 px — bleiben 225 px. Wer den Rest des Menues aendert, muss
     ihn neu rechnen; im Browser nachmessen, nicht schaetzen. */
  .chatListe { max-height: 220px; overflow-y: auto; overscroll-behavior: contain;
    margin: 2px 0 6px; }
  .chatListe .hinweis { font-size: 11.5px; padding: 6px 10px; }
  .mNeu { display: flex; align-items: center; gap: 8px; width: 100%; background: transparent;
    border: 1px dashed var(--linie); border-radius: 8px; color: var(--dim);
    font: 500 12.5px var(--schrift); padding: 7px 10px; margin: 2px 0 4px; cursor: pointer;
    transition: color .15s ease, border-color .15s ease; }
  .mNeu:hover, .mNeu:focus-visible { color: var(--text); border-color: var(--gold); outline: none; }
  .mNeu .ikon { width: 13px; height: 13px; }
  /* Der Kontext des gewaehlten Meetings — eingerueckt, damit die Zugehoerigkeit
     ohne Linie sichtbar ist. */
  /* Ein- und Ausklappen bleibt ruhig: nur Deckkraft, kein Hoehen-Tween. Eine
     animierte Hoehe schoebe alle Nachbarn mit — genau das Zappeln, das ein
     Menue unruhig macht (ADR-077: Bewegung am Fokus, nie Reflow der Nachbarn). */
  .chatKontext { padding-left: 14px; margin: 2px 0 4px;
    border-left: 1px solid color-mix(in srgb, var(--gold) 22%, transparent);
    animation: zweigAuf .16s ease-out; }
  .navUnter.offen { animation: zweigAuf .16s ease-out; }
  @keyframes zweigAuf { from { opacity: 0 } to { opacity: 1 } }
  @media (prefers-reduced-motion: reduce) {
    .chatKontext, .navUnter.offen { animation: none; }
  }
  .chatKontext .railKnopf { font-size: 12px; padding: 5px 8px; }
  .chatArchiv { display: flex; align-items: center; gap: 6px; width: 100%;
    background: transparent; border: 0; color: var(--dim); font: 400 11.5px var(--schrift);
    padding: 6px 10px; cursor: pointer; text-align: left; }
  .chatArchiv::before { content: "B8"; font-size: 8px; transition: transform .15s ease; }
  .chatArchiv.offen::before { transform: rotate(90deg); }
  .chatArchiv:hover, .chatArchiv:focus-visible { color: var(--text); outline: none; }
  /* Der Zaehler ist die EINZIGE Zahl in der Liste — vorher stand dort die Anzahl
     der Chats, was niemanden interessiert. Er zeigt ungelesene Nachrichten. */
  .cungelesen { margin-left: auto; min-width: 18px; padding: 1px 6px; border-radius: 9px;
    background: var(--gold); color: #1a1408; font: 600 10.5px var(--schrift);
    text-align: center; line-height: 1.5; }
  .cpin { display: inline-block; width: 5px; height: 5px; border-radius: 50%;
    background: var(--dim); margin-right: 5px; vertical-align: 2px; }
  .cpin.global { background: var(--gold); }
  .pinKnopf { background: transparent; border: 0; color: var(--frei); cursor: pointer;
    padding: 2px; line-height: 0; opacity: 0; transition: opacity .15s ease, color .15s ease; }
  .chatZeile:hover .pinKnopf, .pinKnopf.an, .pinKnopf:focus-visible { opacity: 1; }
  .pinKnopf.an { color: var(--gold); }
  .pinKnopf .ikon { width: 12px; height: 12px; }
  /* Sub-Reiter des Bereichs: nur sichtbar, solange man drin ist. */
  .navUnter { display: none; padding-left: 26px; }
  .navUnter.offen { display: block; }
  .navUnterKnopf { display: block; width: 100%; text-align: left; background: transparent;
    border: 0; color: var(--dim); font: 400 12px var(--schrift); padding: 5px 8px;
    cursor: pointer; border-radius: 6px; }
  .navUnterKnopf:hover, .navUnterKnopf:focus-visible { color: var(--text);
    background: color-mix(in srgb, var(--gold) 6%, transparent); outline: none; }
  .navUnterKnopf.aktiv { color: var(--text); font-weight: 500; }
  .chatZeile { display: flex; align-items: center; gap: 6px; }
  .chatEintrag { flex: 1; min-width: 0; display: flex; flex-direction: row; align-items: center;
    gap: 8px; flex-wrap: wrap; background: transparent; border: 1px solid transparent; border-radius: 8px;
    padding: 6px 10px; cursor: pointer; font-family: inherit; text-align: left; }
  .chatEintrag:hover, .chatEintrag:focus-visible { border-color: var(--linie);
    background: color-mix(in srgb, var(--gold) 6%, transparent); outline: none; }
  .chatEintrag.chatAktiv { border-color: color-mix(in srgb, var(--gold) 45%, transparent); }
  .cbildHalter { position: relative; flex: none; width: 24px; height: 24px; display: grid;
    place-items: center; background: var(--zeile); border-radius: 7px; }
  /* Zwei Klassen, damit die Regel die 18-px-Basis aus huelle.css schlaegt. */
  .cbildHalter .cbild { width: 16px; height: 16px; color: var(--dim); }
  .chatEintrag.chatAktiv .cbild { color: var(--goldText); }
  .csiegel { position: absolute; right: -2px; bottom: -2px; width: 7px; height: 7px;
    border-radius: 50%; background: var(--gold); border: 1px solid var(--panel); }
  .chatEintrag .ctitel { flex: 1; min-width: 0; font-size: 13px; color: var(--text); overflow: hidden;
    text-overflow: ellipsis; white-space: nowrap; }
  .chatEintrag.chatAktiv .ctitel { color: var(--goldText); }
  .cmarke { flex: none; margin-left: auto; width: 4px; height: 20px; border-radius: 3px;
    background: var(--alter, var(--dim)); }
  html[data-design="tageslicht"] .cmarke { filter: brightness(.82) saturate(1.1); }
  .chatEintrag .cdetail { flex-basis: 100%; font-size: 10.5px; color: var(--dim); padding-left: 32px;
    overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  /* Aktions-Slot: feste Breite (auch leer) hält alle Bänder in einer Linie. */
  /* 13.08.2026: `width: auto` statt fester 26px — seit dem Archiv-Knopf stehen
     dort bis zu drei Schalter nebeneinander, nicht mehr genau einer. */
  .aktionSlot { flex: none; width: auto; gap: 2px; display: flex; align-items: center; justify-content: center; }
  /* Andock-Kasten fuer das Dazulegen an der Szene: Die Geometrie gehoert
     hierher, nicht als `style.cssText` ins JavaScript. */
  #szeneDazu { position: absolute; right: 14px; bottom: 14px; z-index: 6;
               width: min(340px, calc(100% - 28px)); }
  .teilenKnopf { width: 24px; height: 24px; padding: 0; border: 0; background: transparent; cursor: pointer;
    border-radius: 6px; opacity: .4; transition: opacity .15s ease, transform .15s ease; }
  .teilenKnopf { color: var(--dim); }
  .teilenKnopf .ikon { width: 16px; height: 16px; margin: auto; }
  .chatZeile:hover .teilenKnopf, .teilenKnopf:focus-visible { opacity: .85; outline: none; }
  .teilenKnopf.geteilt { opacity: 1; }
  .teilenKnopf:hover { opacity: 1; transform: scale(1.12); }
  /* „+" sichtbar neben dem Kategorie-Namen (nicht in der Zähler-Spalte, damit die
     Zähler rechts in einer Linie bleiben). Dezent, Gold beim Anfassen. */
  .katPlus { flex: none; width: 18px; height: 18px; line-height: 16px; text-align: center;
    border-radius: 5px; color: var(--dim); font-size: 15px; cursor: pointer;
    transition: color .12s ease, background .12s ease; }
  .katPlus:hover, .katPlus:focus-visible { color: var(--goldText);
    background: color-mix(in srgb, var(--gold) 14%, transparent); outline: none; }
  .teamNeuFeld { display: block; box-sizing: border-box; width: calc(100% - 20px); margin: 4px 10px 6px;
    background: var(--bg); border: 1px solid var(--gold); border-radius: 7px; color: var(--text);
    font: inherit; font-size: 12.5px; padding: 6px 9px; }
  .teamNeuFeld:focus { outline: none; }
  .teamNeuFeld.verborgen { display: none; }

  /* --- Setup-Formular: neuer Chat (Agent -> Arbeitsbereich) --- */
  .setupBody { padding: 4px 2px 14px; display: flex; flex-direction: column; gap: 14px; }
  .setupAbschnitt { font-size: 11px; letter-spacing: .4px; text-transform: uppercase; color: var(--dim); }
  .artChips { display: flex; gap: 8px; }
  .artChip { display: inline-flex; align-items: center; gap: 7px; background: var(--panel); border: 1px solid var(--linie);
    color: var(--dim); border-radius: 9px; padding: 6px 13px; font: inherit; font-size: 13px; cursor: pointer; }
  .artChip .ikon { width: 18px; height: 18px; }
  .artChip.aktiv { border-color: var(--gold); color: var(--goldText); background: var(--leder); }
  .artChip:disabled { opacity: .4; cursor: not-allowed; }
  .agentGalerie { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 10px; }
  .agentKarte { position: relative; display: flex; flex-direction: column; align-items: center; gap: 6px;
    background: var(--panel); border: 1.5px solid var(--linie); border-radius: 12px; padding: 14px 10px;
    cursor: pointer; font: inherit; transition: transform .15s ease, border-color .15s ease; }
  .agentKarte:hover, .agentKarte:focus-visible { transform: translateY(-2px); outline: none;
    border-color: color-mix(in srgb, var(--gold) 40%, var(--linie)); }
  .agentKarte.aktiv { border-color: var(--gold); box-shadow: inset 0 0 0 1px var(--gold); }
  .agentBild { width: 48px; height: 48px; image-rendering: pixelated; }
  .agentName { color: var(--text); font-size: 14px; font-weight: 600; }
  .regionSiegel { display: inline-flex; align-items: center; gap: 4px; font-size: 10.5px; color: var(--dim);
    background: var(--zeile); border-radius: 99px; padding: 2px 8px; }
  .regionSiegel img { width: 12px; height: 12px; image-rendering: pixelated; }
  .vorschauEcke { position: absolute; top: 8px; right: 8px; font-size: 9.5px; letter-spacing: .3px;
    text-transform: uppercase; color: var(--warn); background: color-mix(in srgb, var(--warn) 16%, transparent);
    border-radius: 6px; padding: 1px 6px; }
  .bereichRegal { display: flex; flex-direction: column; gap: 6px; }
  .bereichRegal:empty { display: none; }
  .agentSatz { color: var(--dim); font-size: 12.5px; font-style: italic; margin-bottom: 2px; }
  .bereichZeile { display: flex; align-items: center; gap: 10px; background: transparent; border: 1px solid var(--linie);
    border-radius: 9px; padding: 8px 11px; cursor: pointer; font: inherit; text-align: left; }
  .bereichZeile .ikon { width: 20px; height: 20px; color: var(--dim); }
  .bereichZeile:hover:not(.gesperrt), .bereichZeile:focus-visible { border-color: var(--gold); outline: none; }
  .bereichZeile.aktiv { border-color: var(--gold); background: color-mix(in srgb, var(--gold) 8%, transparent); }
  .bereichZeile.gesperrt { opacity: .45; cursor: not-allowed; }
  .bereichText { display: flex; flex-direction: column; min-width: 0; flex: 1; }
  .bereichName { color: var(--text); font-size: 13.5px; }
  .bereichInfo { color: var(--dim); font-size: 11.5px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .bstatus { margin-left: auto; font-size: 10px; letter-spacing: .3px; text-transform: uppercase; color: var(--warn); flex: none; }
  .regalHinweis { color: var(--dim); font-size: 12px; padding: 4px 2px; }
  .setupFuss { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-top: 4px; }
  #setupTitelFeld { flex: 1; min-width: 160px; background: var(--bg); border: 1px solid var(--gold); border-radius: 8px;
    color: var(--text); font: inherit; font-size: 13px; padding: 8px 11px; }
  #setupTitelFeld:focus { outline: none; }
  #setupTitelFeld.verborgen { display: none; }
  #setupStart { padding: 9px 18px; }
  #setupStart:disabled { opacity: .4; cursor: not-allowed; }
  .setupHinweis { flex-basis: 100%; color: var(--dim); font-size: 12px; }

  /* --- Notizzettel (v0.7): sichtbares Sitzungs-Gedächtnis -------------------- */
  #notizModal, #eingangModal, #mappeModal, #adminModal { display: none; }

  /* --- Vorgangsmappe (v0.7, 14.07.): Tisch aufräumen + Übergabe-Formular ----- */
  .mappeFeld { margin: 8px 0; }
  .mappeFeld label { display: block; font-size: 12px; color: var(--dim); margin-bottom: 3px; }
  .mappeFeld textarea { width: 100%; background: var(--bg); border: 1px solid var(--linie);
    border-left: 3px solid var(--gold); border-radius: 8px; color: var(--text);
    padding: 8px 11px; font: inherit; font-size: 13.5px; resize: vertical; }
  .mappeFeld textarea:focus { outline: none; border-color: var(--gold); }
  .mappeFeld textarea[readonly] { border-left-color: var(--linie); color: var(--dim); }
  #mappeStand { font-size: 12px; color: var(--dim); margin: 2px 0 6px; }
  #mappeZettel { display: flex; flex-direction: column; gap: 5px; margin: 6px 0; }
  .mappeZettelZeile { display: flex; align-items: baseline; gap: 8px; background: var(--bg);
    border: 1px solid var(--linie); border-radius: 8px; padding: 7px 10px; font-size: 13px; }
  #mappeBilanz { font-size: 12.5px; color: var(--dim); margin: 8px 0 4px; }
  #mappeModal .knoepfe { display: flex; gap: 8px; margin-top: 8px; }
  /* Die eigene Eingabe steht seit dem 16.08.2026 UNTEN, hinter der Liste: Die
     Notizen entstehen aus dem Gespraech, das Selbstschreiben ist der zweite
     Weg. Die Reihenfolge auf dem Schirm erzaehlt, welcher der erste ist. */
  /* `:not([hidden])`, weil die eigene Eingabe seit dem 23.08.2026 zugeklappt
     beginnt — eine nackte `display`-Regel wuerde das Attribut schlagen. */
  #notizNeu:not([hidden]) { display: flex; gap: 8px; margin: 14px 0 0; }
  #notizNeu input { flex: 1; background: var(--bg); border: 1px solid var(--linie);
    border-radius: 8px; color: var(--text); padding: 9px 12px; font: inherit; font-size: 14px; }
  #notizNeu input:focus { outline: none; border-color: var(--gold); }
  #notizNeu .aktion { flex: none; width: 40px; height: 40px; display: flex;
    align-items: center; justify-content: center; padding: 0; }
  .notizWerkzeuge { display: flex; align-items: center; gap: 8px; margin: 4px 0 10px; }
  .notizWerkzeuge .aktion { display: inline-flex; align-items: center; gap: 8px; }
  .notizWerkzeuge .aktion .ikon { width: 16px; height: 16px; }
  .notizStapel { display: inline-flex; gap: 6px; margin-left: auto; }
  .stapelKnopf { display: inline-flex; align-items: center; gap: 5px; min-height: 32px;
    padding: 0 10px; background: color-mix(in srgb, var(--gold) 14%, transparent);
    border: 1px solid var(--gold); border-radius: 8px; color: var(--goldText);
    font: inherit; font-size: 12.5px; cursor: pointer; font-variant-numeric: tabular-nums; }
  .stapelKnopf .ikon { width: 15px; height: 15px; }
  .stapelKnopf.weg { background: transparent; border-color: var(--linie); color: var(--dim); }
  .stapelKnopf:hover { filter: brightness(1.15); }
  .stapelKnopf.weg:hover { border-color: var(--gold); color: var(--text); }
  #notizListe { overflow-y: auto; display: flex; flex-direction: column; gap: 8px; }
  .notizZeile { display: flex; align-items: center; gap: 10px; background: var(--bg);
    border: 1px solid var(--linie); border-left: 3px solid var(--gold); border-radius: 8px;
    padding: 9px 12px; }
  /* Der Geist-Zustand: Ein Vorschlag steht sichtbar da, mit seinem vollen Text,
     aber gedaempft und gestrichelt umrandet. Das ist der Kern des Verfahrens —
     eine Freigabe-Frage OHNE den Inhalt („3 Eintraege uebernehmen?") laesst den
     Nutzer zustimmen, ohne gelesen zu haben, und ist damit keine Freigabe. */
  .notizZeile.vorschlag { border-style: dashed; border-left-style: dashed;
    background: color-mix(in srgb, var(--gold) 5%, var(--bg)); }
  .notizZeile.vorschlag .ntext { color: var(--dim); }
  .notizZeile .ntext { flex: 1; font-size: 14px; }
  .notizZeile .nmeta { flex: none; font-size: 11.5px; color: var(--dim); white-space: nowrap; }
  /* Die Art ist ein Umschalter, kein Auswahlfeld — ein Klick dreht weiter.
     Farbe UND Form unterscheiden die vier Arten; ohne Farbe bliebe nur das
     Symbol, ohne Form nur der Fleck. */
  .notizZeile .nart { flex: none; width: 32px; height: 32px; display: flex;
    align-items: center; justify-content: center; background: transparent;
    border: 1px solid var(--linie); border-radius: 8px; cursor: pointer;
    color: var(--dim); padding: 0; }
  .notizZeile .nart .ikon { width: 16px; height: 16px; }
  .notizZeile .nart:hover, .notizZeile .nart:focus-visible { border-color: var(--gold); outline: none; }
  .notizZeile .nart.art-entscheidung { color: var(--goldText); }
  .notizZeile .nart.art-aufgabe { color: var(--blau, #6f8cff); }
  .notizZeile .nart.art-frage { color: var(--warn, #d98a3a); }
  .nAktionen { flex: none; display: flex; gap: 6px; }
  .nAktion { width: 32px; height: 32px; display: flex; align-items: center;
    justify-content: center; background: transparent; border: 1px solid var(--linie);
    border-radius: 8px; color: var(--dim); cursor: pointer; padding: 0; }
  .nAktion .ikon { width: 15px; height: 15px; }
  .nAktion.ja:hover, .nAktion.ja:focus-visible { border-color: var(--gold); color: var(--goldText); outline: none; }
  .nAktion.weg:hover, .nAktion.weg:focus-visible { border-color: var(--randStark); color: var(--text); outline: none; }

  /* --- Unterlage aufs Pult (v0.7): Klammer, Chips, Eingangs-Quarantäne ------- */
  /* Randlos wie alle Werkzeuge in der Fußzeile: der Hover ist eine
     eingeblendete Fläche, kein erscheinender Rahmen (der würde 1px schieben). */
  #anhangKnopf { flex: none; width: 40px; height: 40px; display: grid; place-items: center;
    background: transparent; border: 0; border-radius: 99px; cursor: pointer; color: var(--dim); }
  #anhangKnopf .ikon { width: 18px; height: 18px; }
  #anhangKnopf:hover, #anhangKnopf:focus-visible { background: var(--zeile); outline: none; }
  #anhangKnopf:hover .ikon, #anhangKnopf:focus-visible .ikon { color: var(--text); }
  #anhangChips { display: flex; flex-wrap: wrap; gap: 6px; }
  .anhangChip { display: inline-flex; align-items: center; gap: 7px; padding: 3px 6px 3px 10px;
    border: 1px solid var(--linie); border-left: 3px solid var(--gold); border-radius: 99px;
    font-size: 12.5px; background: var(--bg); }
  .anhangChip button { border: 0; background: transparent; color: var(--dim); font-size: 14px;
    line-height: 1; cursor: pointer; padding: 2px 4px; }
  .anhangChip button:hover { color: var(--text); }
  #eingabe.zieht-datei { outline: 2px dashed var(--gold); outline-offset: -5px; }
  #eingangListe { overflow-y: auto; display: flex; flex-direction: column; gap: 8px; }
  .eingangZeile { display: flex; flex-direction: column; gap: 8px; background: var(--bg);
    border: 1px solid var(--linie); border-radius: 8px; padding: 10px 12px; }
  .eingangKopf { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; }
  .eingangName { font-size: 14px; font-weight: 600; overflow-wrap: anywhere; }
  /* Eingeschleuste Anweisung erkannt (13.08.2026): Die Zeile traegt den Befund
     sichtbar, damit niemand stempelt und uebernimmt, ohne ihn gelesen zu haben. */
  /* Filter-Chips im Ansichts-Kopf (13.08.2026). Bewusst flach: sie ersetzen
     drei Menue-Eintraege, sie sollen keine zweite Navigation aufmachen. */
  .ansichtChips { display: flex; gap: 6px; margin-top: 4px; flex-wrap: wrap; }
  /* 32 Pixel Mindest-Flaeche (Haus-Regel §4). Der Chip SIEHT weiter klein aus —
     nur seine Flaeche waechst, genau wie beim Statuspunkt daneben. Der
     Bild-Pruefer hat sie am 20.08.2026 mit 22 Pixel Hoehe gemeldet. */
  .ansichtChip { font-size: 12px; padding: 3px 10px; border-radius: 999px;
    min-height: 32px; display: inline-flex; align-items: center;
    border: 1px solid var(--linie); background: transparent; color: var(--text-schwach);
    cursor: pointer; }
  .ansichtChip.aktiv { color: var(--text); border-color: var(--akzent);
    background: color-mix(in srgb, var(--akzent) 12%, transparent); }
  /* Marke ueber dem Verlauf: sie beschreibt das Meeting, nicht eine Antwort. */
  /* Meeting-Rechte einer Person: erscheinen auf Klick unter ihrer Zeile.
     Eingerueckt, damit die Zugehoerigkeit ohne Rahmen lesbar ist. */
  /* Rechte-Umschalter (13.08.2026): drei Zustaende als Form und Farbe.
     Nur der aktive Zustand traegt Farbe — sonst leuchtet die Reihe wie ein
     Weihnachtsbaum und man sucht den gesetzten. Bewegung nur ueber `opacity`
     und `transform` am Element selbst (ADR-077, kein Layout-Reflow). */
  /* Leerzustaende: ein Symbol, ein Satz. Kein Absatz, der zwei Dinge
     gleichzeitig erklaert (13.08.2026, Regel "Symbole > Text"). */
  .leerZustand { display: flex; flex-direction: column; align-items: center;
    gap: 10px; padding: 28px 16px; color: var(--text-schwach); text-align: center; }
  .leerZustand .ikon { width: 30px; height: 30px; opacity: .4; }
  .leerSatz { font-size: 13px; margin: 0; max-width: 34ch; line-height: 1.5; }

  /* Der Entwickler-Absatz auf der Werbeseite (24.08.2026). Er steht zwischen
     Angebot und Kleingedrucktem und ist abgesetzt, damit er nicht wie eine
     weitere Fusszeile gelesen wird. Masse hier, nicht im JavaScript. */
  .werbeMacher { margin: 18px 0 4px; padding-top: 16px;
    border-top: 1px solid var(--linie); text-align: center; }
  .werbeMacherTitel { font: 600 15px/1.3 Georgia, serif; margin: 0 0 4px;
    color: var(--text); }
  .werbeMacherSatz { font-size: 13px; line-height: 1.5; margin: 0 auto 8px;
    max-width: 46ch; color: var(--text-schwach); }
  .werbeMacherLinks { margin: 0; font-size: 14px; }
  .werbeMacherLinks a { display: inline-block; min-height: 32px; padding: 6px 4px;
    color: var(--akzent); }
  @media (max-width: 767px) {
    .werbeMacherLinks a { min-height: 36px; }
  }

  /* Leerzustand des Gespraechs (24.08.2026). Er sitzt im Chat-Bereich und
     traegt Symbol, Ueberschrift, EINEN Satz und drei Vorschlaege — keine
     Textwand (Haus-Regel „Progressive Disclosure"). Alle Masse stehen hier
     und nicht im JavaScript, damit die Bildschirm-Regel unten greifen kann. */
  #chatLeer { display: flex; flex-direction: column; align-items: center;
    justify-content: center; gap: 12px; padding: 40px 20px; margin: auto;
    color: var(--text-schwach); text-align: center; }
  #chatLeer[hidden] { display: none; }
  #chatLeer .ikon { width: 34px; height: 34px; opacity: .35; }
  #chatLeer h2 { font: 600 17px/1.3 Georgia, serif; margin: 0; color: var(--text); }
  #chatLeer p { font-size: 13px; margin: 0; max-width: 42ch; line-height: 1.55; }
  .leerVorschlaege { display: flex; flex-wrap: wrap; gap: 8px;
    align-items: center; justify-content: center; margin-top: 4px; }
  .leerVorschlagKopf { font-size: 12px; opacity: .7; }
  .leerVorschlag { min-height: 32px; padding: 6px 12px; border-radius: 999px;
    border: 1px solid var(--linie); background: var(--bg);
    color: var(--text); font-size: 13px; cursor: pointer; }
  .leerVorschlag:hover { border-color: var(--akzent); }
  #leerZuMeetings { min-height: 32px; margin-top: 6px; }

  /* Die Ausgaenge des Abschluss-Dialogs: Symbol-Knoepfe mit Hover-Hinweis
     (Haus-Regel 17 §4). Gross genug, um ohne Beschriftung getroffen zu werden;
     der haeufige Weg traegt die Haupt-Farbe. */
  .abFuss { display: flex; gap: 12px; align-items: center; }
  .abGross { min-width: 52px; min-height: 44px; justify-content: center; padding: 0; }
  .abGross .ikon { width: 20px; height: 20px; }
  .abFrage { background: none; border: 0; padding: 4px; cursor: help;
    color: var(--dim); min-width: 32px; min-height: 32px; }
  .abFrage .ikon { width: 15px; height: 15px; }

  /* Kein Gespraech offen (24.08.2026, Flows Vorgabe): Der Chat verschwindet
     wirklich — Verlauf, Eingabefeld, Trenner und Schreibtisch gehen weg. Was
     bleibt, ist die Flaeche und die Leiste rechts.
     Der Grund fuer die Textur: Eine einfarbige schwarze Flaeche liest sich wie
     ein Fehler ("da fehlt was"), eine getoente wie ein Raum, in dem gerade
     nichts liegt. Drei Lagen Licht — KEINE Textur: Die Huelle bleibt
     texturfrei, Material gehoert in die Szene (Flows Entscheidung vom
     10.07.2026, im Testlauf als Zusicherung verankert). */
  body.keinGespraech #verlauf,
  body.keinGespraech #eingabe,
  body.keinGespraech #chatLeer,
  body.keinGespraech #trenner,
  body.keinGespraech aside { display: none; }
  body.keinGespraech #chat {
    background:
      radial-gradient(760px 420px at 26% 12%, rgba(99,102,241,.10), transparent 64%),
      radial-gradient(620px 520px at 82% 84%, rgba(217,164,65,.07), transparent 62%),
      radial-gradient(1px 1px at 40% 60%, rgba(255,255,255,.05), transparent 100%),
      linear-gradient(168deg, var(--bgHell, #16171b) 0%, var(--bg, #0e0f12) 72%);
    position: relative;
  }
  /* Die Marke als Wasserzeichen: zu erkennen, wenn man hinsieht, und
     uebersehbar, wenn nicht. Kein Text — die Flaeche soll nichts behaupten. */
  body.keinGespraech #chat::after {
    content: ""; position: absolute; inset: 0;
    background: url("/static/marke.svg") no-repeat center / 132px;
    opacity: .05; pointer-events: none;
  }
  @media (max-width: 767px) {
    .abGross { min-height: 44px; }
    .abFrage { min-height: 36px; min-width: 36px; }
  }
  @media (max-width: 767px) {
    .leerVorschlag, #leerZuMeetings { min-height: 36px; }
    #chatLeer { padding: 28px 14px; }
  }
  .uLeiste { display: inline-flex; gap: 2px; border: 1px solid var(--linie);
    border-radius: 8px; padding: 2px; background: var(--bg); }
  /* Die Farbe haengt am Symbol, nicht am aktiven Zustand (13.08.2026, nach
     dem ersten echten Blick in die Oberflaeche). Vorher trug nur der gewaehlte
     Knopf Farbe — und weil "erbt" der Normalfall jeder Zeile ist, war die
     ganze Matrix eine graue Wueste, in der kein Symbol seine Bedeutung
     verriet. Discord faerbt immer; gewaehlt wird zusaetzlich markiert. */
  .uKnopf { display: grid; place-items: center; width: 26px; height: 22px;
    border: 0; border-radius: 6px; background: transparent; cursor: pointer;
    opacity: .62;
    transition: opacity .12s ease, background-color .12s ease; }
  .uKnopf.uErlaubt { color: var(--gut, #5aa469); }
  .uKnopf.uVerboten { color: var(--warn); }
  .uKnopf.uErbt { color: var(--text-schwach); }
  .uKnopf:hover { opacity: 1; }
  .uKnopf .ikon { width: 15px; height: 15px; }
  .uKnopf[disabled] { cursor: default; opacity: .25; }
  /* Der gewaehlte Zustand traegt Flaeche UND vollen Kontrast — der Unterschied
     muss aus zwei Metern erkennbar sein, nicht aus zwanzig Zentimetern. */
  .uKnopf.uAn { opacity: 1; box-shadow: inset 0 0 0 1px currentColor; }
  .uKnopf.uAn.uErlaubt {
    background: color-mix(in srgb, var(--gut, #5aa469) 30%, transparent); }
  .uKnopf.uAn.uVerboten {
    background: color-mix(in srgb, var(--warn) 30%, transparent); }
  .uKnopf.uAn.uErbt { color: var(--text);
    background: color-mix(in srgb, var(--linie) 70%, transparent); }
  /* Zeilen-Aktionen als Symbol: das Wort steht im Hover, nicht in der Flaeche. */
  /* 32 Pixel sind das Mindestmaß für alles Antippbare (Haus-Regel §6). Diese
     Knöpfe standen bis 21.08.2026 auf 28 x 26 — der Bild-Prüfer hatte sie nie
     gemessen, weil das Einstellungs-Panel bei seinen Läufen nie offen war.
     Das Symbol darin bleibt klein; nur die Fläche wächst. */
  .zAktion { display: grid; place-items: center; width: 32px; height: 32px;
    border: 1px solid var(--linie); border-radius: 8px; background: transparent;
    color: var(--text-schwach); cursor: pointer; transition: color .12s ease, border-color .12s ease; }
  .zAktion:hover { color: var(--text); border-color: var(--akzent); }
  .zAktion .ikon { width: 15px; height: 15px; }
  /* Mitglieder-Suche statt Dauer-Hinweis: das Feld steht da, die Antwort
     kommt beim Hineinklicken. */
  /* Name des Meetings (21.08.2026): Feld und Symbol-Knopf in einer Zeile.
     Der Knopf trägt keinen Text — das Wort lebt im Hover (Haus-Regel §4). */
  .chatEinstNameZeile { display: flex; align-items: center; gap: 6px; margin-bottom: 4px; }
  .chatEinstNameFeld { flex: 1; min-width: 0; padding: 7px 10px; border-radius: 8px;
    border: 1px solid var(--linie); background: var(--bg); color: var(--text);
    font: inherit; font-size: 13px; min-height: 32px; }
  .chatEinstNameFeld:disabled { color: var(--dim); cursor: not-allowed; }
  .chatEinstSuche { position: relative; margin-top: 8px; }
  .chatEinstSuchFeld { width: 100%; padding: 7px 10px; border-radius: 8px;
    border: 1px solid var(--linie); background: var(--bg); color: var(--text);
    font: inherit; font-size: 13px; }
  .chatEinstTreffer { display: flex; flex-direction: column; gap: 2px; margin-top: 4px; }
  .chatEinstTrefferZeile { display: flex; align-items: center; gap: 8px; width: 100%;
    padding: 5px 8px; border: 0; border-radius: 8px; background: transparent;
    color: var(--text); font: inherit; font-size: 13px; cursor: pointer; text-align: left; }
  .chatEinstTrefferZeile:hover { background: var(--bgHell); }
  .chatEinstTrefferZeile .ikon { width: 14px; height: 14px; margin-left: auto; color: var(--text-schwach); }
  .chatEinstLeer { font-size: 12px; color: var(--text-schwach); padding: 6px 8px; }
  .meetingRechte { margin: 4px 0 8px 34px; display: flex; flex-direction: column; gap: 4px; }
  .meetingRechtZeile { display: flex; align-items: center; gap: 8px; font-size: 12px; }
  .mrName { flex: 1; }
  .mrHerkunft { color: var(--text-schwach); font-size: 11px; }
  .vSchalter { font-size: 12px; }
  .fensterStand { font-size: 12px; color: var(--text-schwach); padding: 6px 14px;
    border-bottom: 1px solid var(--linie); cursor: help; }
  .eingangVerdacht { border-color: var(--warn); }
  .eingangWarnung { font-size: 12px; line-height: 1.45; color: var(--warn);
    border-left: 2px solid var(--warn); padding-left: 8px; }
  .eingangMeta { flex: none; font-size: 11.5px; color: var(--dim); white-space: nowrap; }
  .eingangAktionen { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
  .eingangAktionen .aktion { padding: 5px 12px; font-size: 12.5px; }
  .eingangAktionen .aktion:disabled { opacity: .45; cursor: not-allowed; }
  .eingangAktionen .wegKnopf { margin-left: auto; background: transparent;
    border: 1px solid var(--linie); color: var(--dim); border-radius: 7px;
    padding: 4px 10px; font-size: 12px; cursor: pointer; }
  .eingangAktionen .wegKnopf:hover { border-color: var(--gold); color: var(--text); }

  /* --- Rückfrage + Aufgaben-Merker (P1.7) ------------------------------------ */
  .rueckfrageChips { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 12px; }
  .rueckfrageChip { font: inherit; font-size: 13px; color: var(--text); cursor: pointer;
    background: color-mix(in srgb, var(--gold) 10%, transparent);
    border: 1px solid var(--linie); border-radius: 99px; padding: 6px 14px; }
  .rueckfrageChip:hover, .rueckfrageChip:focus-visible { border-color: var(--gold); outline: none; }
  .aufgabenBlock { margin-top: 12px; padding: 9px 12px; background: var(--bg);
    border: 1px solid var(--linie); border-left: 3px solid var(--gold); border-radius: 8px; }
  .aufgabenBlock .atitel { font-size: 11.5px; color: var(--dim); margin-bottom: 5px; }
  .aufgabenBlock .azeile { font-size: 13.5px; padding: 2px 0; }

  /* --- Prozessbibliothek-Modal ---------------------------------------------- */
  #prozessModal { position: fixed; inset: 0; background: rgba(10,8,4,.72); display: none;
    align-items: center; justify-content: center; z-index: 70; padding: 22px; }
  #prozessModal.offen { display: flex; }
  .pmInhalt { background: var(--panel); border: 1px solid var(--linie); border-radius: 14px;
    /* Scrollbar und dvh (30.07.2026): bei 375x360 lag der Anmelde-Knopf
       ausserhalb des Bildes, und weil der Rumpf nicht scrollt, kam man
       nicht an ihn heran — der Zugang war schlicht zu. */
    width: min(860px, 100%); max-height: min(88dvh, 100%);
    overflow-y: auto; overscroll-behavior: contain;
    display: flex; flex-direction: column;
    padding: 18px 20px; box-shadow: 0 30px 80px rgba(0,0,0,.5); }
  /* Der Kopf bleibt stehen — in JEDEM Dialog, nicht nur in der Seitenansicht
     (13.08.2026). `.pmInhalt` scrollt seit dem 30.07., der Kopf war aber nur
     unter `#seite` fixiert: In den Overlays wanderte er beim Scrollen nach oben
     aus dem Bild, und mit ihm die Überschrift, der Einleitungssatz und der
     Schliessen-Knopf. Sichtbar in Flows Screenshots als "abgeschnittener"
     Dialog — es fehlte nichts, es war nur weggerollt. */
  /* Der Abstand nach unten ist PADDING, nicht margin. Ein klebender Kopf mit
     margin-bottom hat unter sich einen durchsichtigen Streifen — der Text,
     der darunter wegscrollt, bleibt darin sichtbar und sieht aus wie eine
     abgeschnittene Zeile. Genau das war Flows Befund vom 13.08.2026, und
     es war mein eigener Fehler vom selben Tag. Padding traegt den
     Hintergrund mit, margin nicht. */
  .pmKopf { display: flex; gap: 10px; align-items: center;
    position: sticky; top: -18px; z-index: 3; background: var(--panel);
    padding: 18px 0 12px; margin: -18px 0 0; }
  .pmKopf h2 { font: 700 18px var(--schrift); color: var(--kopf); flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  /* `min-height` statt Innenabstand: Der Schliessen-Knopf kam auf 30 Pixel und
     lag damit unter dem Mindest-Tippziel — gefunden vom Bild-Pruefer am
     16.08.2026, und ausgerechnet an dem Knopf, der der einzige sichtbare
     Ausweg aus einem offenen Panel ist. */
  .pmKopf button { background: transparent; border: 1px solid var(--linie); color: var(--dim);
    border-radius: 8px; padding: 4px 12px; min-height: 32px; font: inherit; font-size: 13px;
    cursor: pointer; }
  .pmKopf button:hover { border-color: var(--blau); color: var(--text); }
  #pmSuche { background: var(--bg); border: 1px solid var(--linie); border-radius: 8px;
    color: var(--text); padding: 8px 12px; margin-bottom: 12px; font: inherit; font-size: 13.5px; }
  #pmSuche:focus { outline: none; border-color: var(--blau); }
  /* --- Hilfe-Ebenen: Umschalter, Marke, Anlass, Leerzustand (18.08.2026) ----
     Drei Schwellen als Symbol-Knöpfe. Alle Maße stehen HIER und nicht im
     JavaScript — sonst käme die Regel unten für schmale Schirme nicht mehr
     dagegen an (Haus-Regel "Maße gehören ins Stylesheet"). */
  .pmEbenen { display: flex; gap: 6px; margin: 0 0 10px; }
  .pmEbenen[hidden] { display: none; }
  .pmEbene { position: relative; display: flex; align-items: center; justify-content: center;
    min-width: 44px; min-height: 32px; padding: 0 10px;
    background: var(--bg); border: 1px solid var(--linie); border-radius: 8px;
    color: var(--dim); cursor: pointer; font: inherit; }
  .pmEbene[hidden] { display: none; }
  .pmEbene .ikon { width: 18px; height: 18px; }
  .pmEbene:hover, .pmEbene:focus-visible { border-color: var(--blau); color: var(--text); }
  /* Der aktive Zustand unterscheidet sich in FARBE UND FORM: getönter Grund,
     stärkerer Rand — und ein Balken unter dem Symbol. Nur über Farbe wäre
     er für Farbenblinde unsichtbar, und ein Umschalter, dessen Stand man
     nicht sieht, ist keiner. */
  .pmEbene[aria-pressed="true"] { color: var(--goldText); border-color: var(--gold);
    border-radius: 8px 8px 3px 3px;
    background: color-mix(in srgb, var(--gold) 12%, var(--panel)); }
  .pmEbene[aria-pressed="true"]::after { content: ""; position: absolute;
    left: 22%; right: 22%; bottom: 2px; height: 3px; border-radius: 2px;
    background: currentColor; }
  /* Marke an einer Listenzeile: nur dort, wo die Stufe von der normalen Hilfe
     abweicht. Das Wort dazu steht im Hover-Hinweis. */
  .pmEbeneMarke { display: inline-flex; align-items: center; flex: none; color: var(--dim); }
  .pmEbeneMarke .ikon { width: 14px; height: 14px; }
  /* Anlass-Kasten ("wann brauche ich das?") — die beste Sucheingabe der
     Bibliothek, deshalb steht sie oben und nicht im Fließtext. */
  .pmWann { display: flex; gap: 9px; align-items: flex-start;
    background: var(--zeile); border-left: 3px solid var(--gold);
    border-radius: 0 8px 8px 0; padding: 9px 12px; margin: 2px 0 10px;
    font-size: 13px; color: var(--text); }
  .pmWann[hidden] { display: none; }
  .pmWann .ikon { width: 16px; height: 16px; margin-top: 2px; color: var(--goldText); }
  .pmWannListe { margin: 0; padding-left: 17px; }
  .pmWannListe li { margin: 1px 0; }
  /* Leerzustand: ein Symbol, ein Satz. Kein Absatz. */
  .pmLeer { display: flex; flex-direction: column; align-items: center; gap: 9px;
    color: var(--dim); font-size: 13px; line-height: 1.5; text-align: center;
    padding: 28px 14px; }
  .pmLeer .ikon { width: 28px; height: 28px; opacity: .5; }
  #pmListe { overflow-y: auto; display: flex; flex-direction: column; gap: 8px; padding-bottom: 4px; }
  .pmGruppe { font-size: 11px; color: var(--dim); text-transform: uppercase; letter-spacing: .9px; margin: 8px 0 0; }
  .pmEintrag { text-align: left; background: var(--bg); border: 1px solid var(--linie);
    border-radius: 10px; padding: 10px 14px; cursor: pointer; color: var(--text); font: inherit; }
  .pmEintrag:hover { border-color: var(--gold); }
  .pmEintrag .pname { display: flex; align-items: center; gap: 6px;
    font-weight: 600; font-size: 14px; }
  .pmEintrag .psummary { font-size: 12.5px; color: var(--dim); margin-top: 2px; }
  #pmDetail { overflow-y: auto; display: none; }
  /* Hilfe-Bibliothek: Gruppen-Accordion + Start/Ende-Zeile (Hub-Vorbild) */
  /* `min-height`: Der Gruppenkopf ist ein Knopf (er klappt die Gruppe zu) und
     kam mit 26 Pixeln unter das Mindest-Tippziel — gefunden vom Bild-Prüfer
     am 18.08.2026 beim Kontrollgang durch die Hilfe. Die Schriftgröße bleibt
     klein, nur die Fläche wächst. */
  .pmGruppe.klappbar { display: flex; align-items: center; gap: 6px; width: 100%;
    min-height: 32px;
    background: transparent; border: 0; cursor: pointer; font-family: inherit;
    text-align: left; padding: 6px 4px; border-radius: 7px; }
  .pmGruppe.klappbar::before { content: "\25B8"; font-size: 8px; transition: transform .15s ease; }
  .pmGruppe.klappbar.offen::before { transform: rotate(90deg); }
  .pmGruppe.klappbar:hover { color: var(--text); }
  .pmGruppe.klappbar .kzahl { margin-left: auto; font-size: 10px; color: var(--dim);
    background: var(--zeile); border-radius: 99px; padding: 1px 7px; text-transform: none; letter-spacing: 0; }
  .pgInhalt { display: none; }
  .pgInhalt.offen { display: flex; flex-direction: column; gap: 8px; }
  #pmStartEnde { font-size: 12.5px; color: var(--dim); margin: 2px 0 8px;
    border-left: 3px solid color-mix(in srgb, var(--gold) 45%, transparent); padding-left: 10px; }
  .abzeichen { display: inline-block; font-size: 11px; border: 1px solid var(--linie);
    border-radius: 99px; padding: 2px 10px; margin: 0 6px 8px 0; color: var(--dim); }
  /* Ebenen-Chip in der Detail-Ansicht: Symbol UND Wort, weil er hier allein
     steht und nicht in einer Reihe gleichartiger Knöpfe. */
  .abzeichen.ebene { display: inline-flex; align-items: center; gap: 5px; vertical-align: middle; }
  .abzeichen.ebene .ikon { width: 14px; height: 14px; }
  .abzeichen.ebene-admin { color: var(--goldText);
    border-color: color-mix(in srgb, var(--gold) 50%, transparent); }
  .abzeichen.ebene-dev { color: var(--blauText);
    border-color: color-mix(in srgb, var(--blau) 50%, transparent); }
  .abzeichen.status-live { color: var(--gruen); border-color: #2c5c40; }
  .abzeichen.status-draft, .abzeichen.status-planned { color: var(--warn); border-color: #6b4a26; }
  .diagramm { background: var(--bg); border: 1px solid var(--linie); border-radius: 10px;
    padding: 12px; margin: 10px 0; overflow: auto; }
  .diagramm svg { max-width: 100%; min-width: 0 !important; height: auto; }
  .diagramm .fehlschlag { color: var(--warn); font-size: 12.5px; }
  .prozessText { font-size: 14px; }
  .prozessText h1, .prozessText h2, .prozessText h3, .prozessText h4 { font-family: var(--schrift); margin: 14px 0 6px; color: var(--kopf); }
  .prozessText p { margin: 6px 0; }
  .prozessText ul, .prozessText ol { margin: 6px 0 6px 20px; }
  .prozessText pre { background: var(--bg); border: 1px solid var(--linie); border-radius: 8px; padding: 10px; overflow: auto; font-size: 12.5px; margin: 8px 0; }
  .prozessText code { background: var(--zeile); border-radius: 4px; padding: 1px 5px; font-size: 12.5px; }
  .prozessText pre code { background: transparent; padding: 0; }
  .prozessText table { border-collapse: collapse; margin: 8px 0; max-width: 100%; }
  .prozessText td, .prozessText th { border: 1px solid var(--linie); padding: 4px 9px; font-size: 13px; text-align: left; }
  .prozessText blockquote { border-left: 3px solid var(--gold); margin: 8px 0; padding: 4px 12px; color: var(--dim); }

  /* --- Prüfstand, Sprünge und Rückmeldung (18.08.2026, Etappe 4) -----------
     Alle Maße stehen HIER und nicht im JavaScript: Ein Inline-Maß nimmt sich
     der Regel für schmale Schirme aus der Hand, und die käme nur noch mit
     `!important` dagegen an (Haus-Regel „Maße gehören ins Stylesheet"). */

  /* Symbol-Knopf ohne Wort auf der Fläche — der Text steht im Hover-Hinweis.
     32 Pixel am Schreibtisch, 36 auf dem Telefon (Regel unten). */
  .pmSymbolKnopf { display: inline-flex; align-items: center; justify-content: center;
    min-width: 32px; min-height: 32px; flex: none; padding: 0 6px;
    background: var(--bg); border: 1px solid var(--linie); border-radius: 8px;
    color: var(--dim); cursor: pointer; font: inherit; }
  .pmSymbolKnopf:hover, .pmSymbolKnopf:focus-visible { border-color: var(--blau); color: var(--text); }
  .pmSymbolKnopf[hidden] { display: none; }
  .pmSymbolKnopf .ikon { width: 17px; height: 17px; }
  /* Titel und Fragezeichen in einer Zeile; der Titel darf kürzen, der Knopf nicht. */
  .kopfTitelZeile { display: flex; align-items: center; gap: 8px; min-width: 0; }
  .kopfTitelZeile h1 { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

  .pmWerkzeuge { display: flex; gap: 6px; margin: 0 0 10px; }
  .pmWerkzeuge:empty { display: none; }
  .pmMelden { display: flex; align-items: center; gap: 6px; flex-wrap: wrap;
    margin: 0 0 10px; }
  .pmMelden[hidden] { display: none; }
  #pmMeldenText { flex: 1 1 180px; min-width: 0; min-height: 32px;
    background: var(--bg); border: 1px solid var(--linie); border-radius: 8px;
    color: var(--text); padding: 6px 10px; font: inherit; font-size: 13px; }
  #pmMeldenText:focus { outline: none; border-color: var(--blau); }
  .pmMeldenStand { flex: 1 0 100%; font-size: 12px; color: var(--dim); }
  .pmMeldenStand:empty { display: none; }

  .pmPruefstand { margin-top: 16px; border-top: 1px solid var(--linie); padding-top: 12px; }
  .pmPruefstand[hidden] { display: none; }
  .pruefTitel { font-size: 11px; color: var(--dim); text-transform: uppercase;
    letter-spacing: .9px; margin-bottom: 8px; }
  .pruefBlock { margin-bottom: 12px; }
  .pruefKopf { display: flex; align-items: center; gap: 7px; font-size: 12.5px;
    font-weight: 600; color: var(--text); margin-bottom: 6px; }
  .pruefKopf .ikon { width: 15px; height: 15px; color: var(--goldText); }
  .pruefAnkerListe { margin: 0; padding-left: 18px; font-size: 12.5px; color: var(--dim); }
  .pruefAnkerListe li { margin: 2px 0; overflow-wrap: anywhere; }
  .pruefStand { font-size: 12px; color: var(--dim); margin-bottom: 6px; }
  .pruefHinweis { font-size: 11.5px; color: var(--dim); margin-top: 6px; font-style: italic; }
  .pruefLeer { font-size: 12.5px; color: var(--dim); line-height: 1.5; }

  /* Eine Prüfgruppe. Der Stand steht links als Marke — FARBE UND FORM, nie
     Farbe allein: grüner Haken, roter Balken mit Kreuz, graue Uhr für
     „veraltet", grauer Strich für „nie gemessen". */
  /* Rechter Freiraum für die schwebende Werkzeugleiste (Abnahme-Befund E4,
     18.08.2026): Der Kopier-Knopf lag auf beiden Breiten UNTER dem Griff der
     Leiste — ein Tipp öffnete das Regal statt zu kopieren. Die Maße stimmten,
     verdeckt ist nicht zu klein; genau deshalb meldete der Bild-Prüfer nichts.
     Er vergleicht Nachbarn und kennt schwebende Überlagerungen nicht. */
  .pruefZeile { position: relative; display: flex; align-items: flex-start; gap: 9px;
    background: var(--bg); border: 1px solid var(--linie); border-left-width: 3px;
    border-radius: 8px; padding: 7px 68px 7px 9px; margin: 5px 0; }
  .pruefMarke { display: inline-flex; align-items: center; justify-content: center;
    flex: none; width: 20px; height: 20px; color: var(--dim); }
  .pruefMarke .ikon { width: 16px; height: 16px; }
  .pruefText { flex: 1 1 auto; min-width: 0; }
  .pruefName { font-size: 12.5px; font-weight: 600; color: var(--text); overflow-wrap: anywhere; }
  .pruefZweck { font-size: 12px; color: var(--dim); margin-top: 1px; }
  .pruefZweck:empty { display: none; }
  .pruefKopiert { position: absolute; right: 8px; bottom: -7px; font-size: 11px;
    color: var(--gruen); background: var(--panel); padding: 0 4px; border-radius: 4px; }
  .pruefZeile.stand-bestanden { border-left-color: var(--gruen); }
  .pruefZeile.stand-bestanden .pruefMarke { color: var(--gruenText); }
  .pruefZeile.stand-gescheitert { border-left-color: var(--warn); }
  .pruefZeile.stand-gescheitert .pruefMarke { color: var(--warnText); }
  /* „Veraltet" ist der HÄUFIGSTE Fall, nicht der Ausnahmefall — deshalb weder
     rot noch grün, sondern neutral: gestrichelter Rand, graue Uhr. Er sagt
     „diese Messung beschreibt einen anderen Quelltext", nicht „kaputt". */
  .pruefZeile.stand-veraltet { border-left-style: dashed; border-left-color: var(--dim); }
  .pruefZeile.stand-nie, .pruefZeile.stand-uebersprungen {
    border-left-style: dotted; border-left-color: var(--randStark); }

  /* --- Team-Schicht: Anmeldung, 2FA, Team & Controlling, Sitzungen ----------- */
  .overlay { position: fixed; inset: 0; background: rgba(10,8,4,.72); display: none;
    align-items: center; justify-content: center; z-index: 70; padding: 22px; }
  .overlay.offen { display: flex; }
  .overlay .pmInhalt { width: min(560px, 100%); }
  /* Vollbild-Anmeldung: ein richtiger Login-Screen — nichts scheint durch */
  .overlay.vollbild { background:
    radial-gradient(1100px 600px at 50% -10%, var(--bgHell), var(--bg) 62%); }
  .overlay.vollbild .pmInhalt.anmeldeKarte { width: min(420px, 94vw);
    border-color: color-mix(in srgb, var(--gold) 55%, transparent); box-shadow: 0 40px 110px rgba(0,0,0,.75);
    background: linear-gradient(180deg, var(--papier), var(--panel)); }
  /* Erstkontakt (29.07.2026): ein Satz ueber dem Formular und ein Weg nach
     draussen darunter. Beides zurueckhaltend — der Schirm soll einladen, nicht
     verkaufen. */
  .anmeldeSatz { text-align: center; color: var(--dim); font-size: 13.5px;
    line-height: 1.5; margin: -4px 0 14px; }
  /* `:not([hidden])`, weil der Fuss-Satz im Passwort-Schritt weggelegt wird —
     eine nackte `display`-Regel wuerde das Attribut schlagen. */
  .anmeldeFuss:not([hidden]) { margin-top: 16px; padding-top: 12px; border-top: 1px solid var(--linie);
    color: var(--dim); font-size: 12.5px; line-height: 1.5; text-align: center; }
  .anmeldeMarke { font: 700 26px var(--schrift); color: var(--kopf); text-align: center;
    letter-spacing: .5px; margin: 4px 0 14px; text-shadow: 0 1px 0 rgba(0,0,0,.6); }
  #teamModal .pmInhalt { width: min(860px, 100%); }
  .formZeile { display: flex; flex-direction: column; gap: 4px; margin-bottom: 10px; }
  .formZeile label { font-size: 12px; color: var(--dim); }
  /* `textarea` gehört in dieselbe Aufzählung wie `input` und `select`. Fehlte
     sie, griff die Browser-Voreinstellung: Das Ziele-Feld im Einrichtungs-
     Dialog stand in Monospace neben einem Namensfeld in der Hausschrift —
     ausgerechnet im ersten Bild, das ein neuer Nutzer sieht (21.08.2026). */
  .formZeile input, .formZeile select, .formZeile textarea {
    background: var(--bg); border: 1px solid var(--linie);
    border-radius: 7px; color: var(--text); padding: 8px 11px; font: inherit; font-size: 13.5px; }
  .formZeile textarea { resize: vertical; line-height: 1.5; }
  .formZeile input:focus, .formZeile textarea:focus { outline: none; border-color: var(--blau); }
  /* Das Kaestchen war 13x13 und die Zeile 20 hoch — beides unter dem
     Mindestmass fuer alles Antippbare (Haus-Regel 17 §6), und das
     ausgerechnet im Anmelde-Dialog, dem ersten Bildschirm ueberhaupt.
     Gefunden vom Bild-Pruefer am 21.08.2026, nicht von einem Test. */
  .formHaken { display: flex; gap: 10px; align-items: center; font-size: 13px;
    margin-bottom: 10px; min-height: 32px; cursor: pointer; }
  .formHaken input { accent-color: var(--gold); width: 18px; height: 18px; flex: none; }
  .formFehler { color: var(--warn); font-size: 12.5px; min-height: 18px; margin-bottom: 6px; }
  .teamTabelle { border-collapse: collapse; width: 100%; margin: 6px 0 16px; font-size: 13px; }
  .teamTabelle th, .teamTabelle td { border: 1px solid var(--linie); padding: 5px 9px; text-align: left; }
  .teamTabelle th { color: var(--dim); font-weight: 600; font-size: 12px; }
  .teamTabelle select { background: var(--bg); color: var(--text); border: 1px solid var(--linie);
    border-radius: 6px; padding: 3px 6px; font: inherit; font-size: 12.5px; }
  .teamTabelle td.zahl { text-align: right; font-variant-numeric: tabular-nums; }
  .qrKasten { display: flex; gap: 14px; align-items: center; margin: 10px 0; flex-wrap: wrap; }
  .qrKasten img { border-radius: 8px; background: #fff; padding: 6px; width: 148px; height: 148px; }
  .geheimnis { font-family: ui-monospace, Consolas, monospace; font-size: 12px; color: var(--goldText);
    word-break: break-all; max-width: 280px; }
  .sitzEintrag { display: flex; gap: 8px; align-items: center; margin-bottom: 8px; }
  .sitzEintrag .pmEintrag { flex: 1; }
  .sitzEintrag .aktion { padding: 7px 11px; font-size: 12.5px; white-space: nowrap; }
  .auditListe { font-size: 12px; color: var(--dim); max-height: 200px; overflow-y: auto;
    border: 1px solid var(--linie); border-radius: 8px; padding: 8px 12px; margin-bottom: 8px; }
  .auditListe div { padding: 2px 0; border-bottom: 1px solid var(--zeile); }
  .auditListe div:last-child { border-bottom: 0; }
  .auditListe b { color: var(--text); font-weight: 600; }
  header .wer { font-size: 12.5px; color: var(--goldText); }

  /* --- Bewegung: dezent, non-blocking, abschaltbar --------------------------- */
  @keyframes blaseRein { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } }
  @keyframes karteRein { from { opacity: 0; transform: translateX(26px); } to { opacity: 1; transform: none; } }
  @keyframes zettelRein { from { opacity: 0; transform: scale(.96); } to { opacity: 1; transform: none; } }
  /* Dauer-Animationen laufen ueber opacity/transform — NIE ueber box-shadow,
     border-color oder Groessen (29.07.2026).
     Grund: box-shadow und border-color zwingen den Browser in jedem einzelnen
     Bild zum Neuzeichnen. Bei `infinite` heisst das: dauerhafte Last auf dem
     Haupt-Thread, solange die Seite offen ist — und zwei dieser Animationen
     liefen ausgerechnet im Erstzustand, also genau dann, wenn ein neuer Nutzer
     zum ersten Mal hereinschaut. opacity und transform laufen dagegen auf der
     Grafikebene und kosten den Haupt-Thread nichts.
     Haus-Regel ADR-077 (aufmerksamkeitsfokussierte Reaktivitaet). */
  @keyframes scheinPuls { 0%, 100% { opacity: .35; } 50% { opacity: 1; } }

  /* Der Schein wird EINMAL gezeichnet und liegt als eigene Ebene ueber dem
     Element; animiert wird nur seine Deckkraft. */
  .denkspur .lampe::after, #frage::after, #menue::after {
    content: ""; position: absolute; inset: -1px; border-radius: inherit;
    pointer-events: none; opacity: 0; }
  .denkspur .lampe { position: relative; }
  .denkspur.aktiv .lampe::after {
    box-shadow: 0 0 26px 9px rgba(255,233,173,.6);
    animation: scheinPuls 1.6s ease-in-out infinite; }
  @media (prefers-reduced-motion: reduce) {
    *, *::before, *::after { animation: none !important; transition: none !important; }
  }
  body.keine-animation *, body.keine-animation *::before, body.keine-animation *::after {
    animation: none !important; transition: none !important; }

  @media (max-width: 700px) {
    /* Am Daumen zählt die Grifffläche mehr als die Zeilenzahl. */
    .railKnopf, .navKnopf { min-height: 48px; font-size: 14px; padding: 9px 10px; }
  }
  /* Unterhalb von 768px gilt 36 Pixel als Mindestmaß fuer alles Antippbare
     (Haus-Regel „Maße gehoeren ins Stylesheet", Abschnitt Mindest-Tippziel).
     Der sichtbare Punkt bleibt klein — nur seine Flaeche waechst. */
  @media (max-width: 768px) {
    /* Vom Bild-Pruefer am 20.08.2026 auf 390 Pixel Breite gemeldet: das
       Schliessen-Kreuz des Menues (28x27) und der Besetzungs-Knopf (32x40).
       Beide sind Bestand, beide werden hier beruehrt — also mit. */
    #menueZuKnopf { min-width: 36px; min-height: 36px; }
    #besetzungMehr { width: 36px; }
    .statuspunkt { width: 36px; height: 36px; }
    .rosterStack { min-width: 36px; min-height: 36px; }
    .wlKnopf { width: 40px; height: 40px; }
    .notizZeile .nart, .nAktion { width: 36px; height: 36px; }
    .stapelKnopf { min-height: 36px; }
    #notizNeu .aktion { width: 40px; height: 40px; }
    /* Ebenen-Umschalter: das Symbol bleibt 18px, seine Fläche wächst. */
    .pmEbene { min-width: 48px; min-height: 36px; }
    .pmGruppe.klappbar { min-height: 36px; }
    /* Der Schließen-Knopf kam auf 34x32 und blieb damit unter dem
       Mindest-Tippziel für schmale Schirme — am 16.08.2026 wurde er von 30
       auf 32 gehoben, die Regel für Telefone fehlte aber. Er ist der einzige
       sichtbare Ausweg aus einem offenen Panel (Bild-Prüfer, 18.08.2026). */
    .pmKopf button { min-width: 36px; min-height: 36px; }
    /* Prüfstand und Sprünge: Symbol bleibt 17px, die Fläche wächst auf 36. */
    .pmSymbolKnopf { min-width: 36px; min-height: 36px; }
    #pmMeldenText { min-height: 36px; }
    /* Zeilen-Aktionen: am Schreibtisch 32, am Telefon 36. Gemeldet vom
       Bild-Prüfer am 21.08.2026 auf 375 Pixel Breite — auffällig geworden am
       neuen Knopf für die Unterlage, gilt aber für jede dieser Flächen. */
    .zAktion { width: 36px; height: 36px; }
  }
  @media (max-width: 900px) {
    /* Einspaltig: der Begleiter fuellt den Schirm, der Trenner entfaellt */
    body[data-bereich] main { grid-template-columns: minmax(0, 1fr); }
    aside { display: none !important; }
    /* Ausnahme: in der Schublade IST der Schreibtisch der Inhalt (30.07.2026).
       Vorher schaltete die Regel oben ihn auf schmalen Schirmen komplett ab —
       damit waren die Kontext-Prozentzahl, die Liste der gelesenen Unterlagen,
       der Rueckgaengig-Knopf UND "Dazulegen" mobil unerreichbar. Das ist die
       Kernbotschaft des Produkts; sie darf nicht an der Fensterbreite haengen. */
    #seite.schublade > aside { display: block !important;
      height: 100%; overflow-y: auto; overscroll-behavior: contain;
      padding: 22px 18px calc(18px + env(safe-area-inset-bottom, 0)); }
    #trenner { display: none !important; }
    /* Offener Begleiter füllt mobil den Schirm — nebeneinander ist auf einem
       Telefon keine Teilung, sondern zwei zu schmale Spalten. */
    body[data-bereich] #chat { display: none; }
    body[data-bereich] #seite { grid-column: 1 / -1; }
  }
  /* EINE Grenze fuer schmale Schirme: 900px (30.07.2026).
     Vorher lag die Schubladen-Darstellung im 700er-Block, das JavaScript
     schaltete aber ab 900px darauf um — zwischen 701 und 900px setzte es
     also die Klassen, ohne dass eine Regel griff: der Bibliotheks-Knopf tat
     sichtbar nichts. Zwei Grenzen fuer dieselbe Sache sind eine Grenze zu
     viel; die Zahl steht jetzt an beiden Stellen gleich (app.js: SCHMAL). */
  @media (max-width: 900px) {
    /* Der Ansicht-Umschalter ist am 16.08.2026 ganz entfallen (Renés R1) — die
       Werkzeugleiste am rechten Rand hat seine Aufgabe uebernommen und steht
       auf schmalen Schirmen dauerhaft offen. Der Grundsatz von damals gilt
       unveraendert: Kern-Funktionen gehoeren nicht in Menue-Tiefe.
       Die Kosten-Anzeige weicht mobil, damit die Kopfzeile nicht bricht — sie
       steht ohnehin auch an der Eingabekarte. */
    header .summe { display: none; }
    .kopfWerkzeuge { gap: 8px; }
    .mgruppe.nur-mobil, .gruppeInhalt.nur-mobil { display: none !important; }

    /* Regal mobil als Schublade von unten (30.07.2026).
       Warum nicht einfach umschalten: Chat und Regal sind NICHT unabhaengig —
       das Regal ist die sichtbare Begruendung der Antwort. Ein Tab-Wechsel
       zerreisst genau die Kernbotschaft ("schau, DAS hat die KI gelesen").
       Die Schublade laesst beides gleichzeitig bestehen: der Chat bleibt
       sichtbar, das Regal faehrt darueber und wieder weg.
       Bewegung ueber transform, nicht ueber Hoehe — sonst rechnet der Browser
       bei jedem Bild das Layout neu (ADR-077). */
    /* `width` und `pointer-events` muessen hier ausdruecklich zurueckgesetzt
       werden: Der geparkte Begleiter-Slot bringt beides mit (44 % Breite, nicht
       anklickbar), und eine Schublade, die nur 44 % breit und taub ist, waere
       genau die Art Fehler, die man erst auf dem Telefon sieht (16.08.2026). */
    #seite.schublade {
      display: block; position: fixed; left: 0; right: 0; bottom: 0;
      width: auto; pointer-events: auto;
      height: 72dvh; z-index: 60; border-top: 1px solid var(--randStark);
      border-radius: 14px 14px 0 0; background: var(--bg);
      box-shadow: 0 -14px 40px rgba(0,0,0,.5);
      transform: translateY(100%); transition: transform .26s ease;
      padding-bottom: env(safe-area-inset-bottom, 0); }
    #seite.schublade.offen { transform: translateY(0); }
    /* In der Schublade gilt dieselbe Wahl wie ueberall: anschaulich ODER
       schlicht. Bis zum 20.08.2026 lagen BEIDE darin — Szene und Schreibtisch
       verlangen je die volle Hoehe, zusammen die doppelte. Die Schublade ist
       72 dvh hoch und hat keinen Ueberlauf: Der Rest stand unter ihr und lag
       ueber der Eingabekarte. Der Bild-Pruefer meldet das NICHT, weil er
       Verdeckung durch schwebende Elemente nicht kennt — gefunden wurde es mit
       den Augen, auf 390 Pixel Breite. Bestandsfehler, hier mitbehoben.

       Geparkt statt ausgeblendet: Ein `display:none`-Rahmen misst sich zu 0x0
       und baut die Szene beim Wiederkommen leer auf — dieselbe Falle wie beim
       Begleiter am Schreibtisch. */
    #seite.schublade > iframe, #seite.schublade > aside {
      position: absolute; inset: 0; overflow-y: auto; }
    /* Ein Rahmen ist ein ERSETZTES Element: `height:auto` heisst dort nicht
       „streck dich", sondern „nimm deine Eigenhoehe" — 150 Pixel, seit es
       Rahmen gibt. Mit `top` und `bottom` zusammen ist die Angabe dann
       ueberbestimmt und `bottom` wird verworfen. Deshalb hier ausdruecklich
       volle Hoehe statt auto (20.08.2026, am Telefon gemessen). */
    #seite.schublade > iframe { width: 100%; height: 100%; }
    body[data-tisch="szene"] #seite.schublade > aside,
    body[data-tisch="liste"] #seite.schublade > iframe {
      transform: translateX(105%); pointer-events: none; }
    #seite.schublade::before {
      content: ""; position: absolute; top: 7px; left: 50%; width: 38px; height: 4px;
      transform: translateX(-50%); border-radius: 99px; background: var(--randStark); }
    /* Die Regeln des Schliessers stehen bewusst AUSSERHALB dieses Blocks —
       siehe Basis-Definition weiter oben. */

    /* Eingabe-Karte mobil (12.08.2026). Seit dem Karten-Umbau stapelt die
       Leiste ohnehin — die alten Umbruch-Reparaturen sind damit hinfällig.
       Was hier bleibt, ist eine einzige Kürzung: Auf schmalen Schirmen
       verschwindet der Kostenteil aus dem Modell-Chip. Er steht weiter im
       Auswahl-Popover je Stufe, also geht keine Kosten-Ehrlichkeit verloren
       — nur der Platz, den die Zahl im Ruhezustand einnimmt. */
    #eingabe { padding: 8px 10px 12px; }
    /* Die 16 Pixel sind hier kein Rest der alten Chat-Größe, sondern ein
       Riegel: Safari auf dem iPhone zoomt die ganze Seite hinein, sobald ein
       Eingabefeld kleiner als 16 Pixel Schrift trägt. Am Schreibtisch steht
       das Feld auf 14 wie die Blasen und das Menü. */
    #frage { font-size: 16px; padding: 12px 14px 4px; }
    #eingabeFuss { gap: 4px; padding: 4px 6px 6px 8px; }
    #modellChip #modellSchaetzung { display: none; }
    #besetzung .bWort { display: none; }
  }

  /* --- Farbwelten nach Renés Entwurf (09.08.2026): data-design auf <html>.
     Zwei Welten statt der bisherigen sieben — der Entwurf kennt hell und
     dunkel, mehr nicht. Die sieben alten Farbwelten sind entfallen; das steht
     als Punkt in der Lücken-Liste, damit es eine Entscheidung bleibt und
     kein Versehen. Die Bibliotheks-Szene (iframe) behält ihr warmes Holz —
     sie ist die Marke. ---------------------------------------------------- */
  html[data-design="dunkel"] {
    --bg: #05060d; --panel: #0f1020; --linie: #21223a; --text: #f3f3fa;
    --dim: #a0a0bb; --gold: #6366f1; --goldhell: #a78bfa; --gruen: #34d399;
    --blau: #60a5fa; --warn: #fb923c; --papier: #0f1020; --leder: #12132a;
    --bgHell: #090a14; --kopf: #f3f3fa; --randStark: #2e3050; --zeile: #14152a;
    --griffFarbe: #2e3050; --griffAktiv: #454770; --flaecheV: #090a14;
    --gruenText: #34d399; --warnText: #fb923c; --blauText: #60a5fa;
    --goldText: #a5b4fc;
    --schatten: 0 1px 2px rgba(0,0,0,.5), 0 10px 28px rgba(0,0,0,.45);
  }
  html[data-design="dunkel"] body {
    background: radial-gradient(900px 520px at 18% -10%, rgba(99,102,241,.13), transparent 62%),
                var(--bg); }
  /* Hell: dunkle Schlagschatten und Schein-Effekte abmildern */
  html[data-design="hell"] .blase { box-shadow: 0 1px 3px rgba(16,16,40,.06); }
  html[data-design="hell"] .popover,
  html[data-design="hell"] #bestaetigung,
  html[data-design="hell"] #dazuListe { box-shadow: var(--schatten); }
  html[data-design="hell"] #seitenmenue { box-shadow: none; }
  html[data-design="hell"] .pmInhalt { box-shadow: 0 16px 44px rgba(16,16,40,.14); }
  html[data-design="hell"] #trenner .griff { box-shadow: 0 0 0 1px rgba(16,16,40,.10); }
  html[data-design="hell"] #schleier { background: rgba(14,14,26,.34); }

  /* Design-Punkte im Einstellungen-Bereich (Vorbild: Hub theme-dots) */
  /* Einstellungs-Zeilen: EIN Muster — Label links, Steuerelement rechts */
  .einstellung { display: flex; align-items: center; gap: 10px; padding: 8px 10px; }
  .einstellung .dlabel { font-size: 12px; color: var(--dim); }
  .einstellung > :last-child { margin-left: auto; }
  #designPunkte { display: flex; gap: 7px; flex-wrap: wrap; justify-content: flex-end; }
  /* Boolean als Schiebeschalter */
  .schalterKnopf { position: relative; width: 36px; height: 20px; border-radius: 99px;
    border: 1px solid var(--linie); background: var(--zeile); cursor: pointer; padding: 0;
    transition: background .15s ease, border-color .15s ease; }
  .schalterKnopf .knubbel { position: absolute; top: 2px; left: 2px; width: 14px; height: 14px;
    border-radius: 50%; background: var(--dim); transition: transform .15s ease, background .15s ease; }
  .schalterKnopf.an { background: color-mix(in srgb, var(--gold) 30%, transparent);
    border-color: color-mix(in srgb, var(--gold) 55%, transparent); }
  .schalterKnopf.an .knubbel { transform: translateX(16px); background: var(--gold); }
  .schalterKnopf:hover, .schalterKnopf:focus-visible { border-color: var(--gold); outline: none; }
  /* Zwei-Werte-Wahl als Segment-Schalter */
  .segment { display: inline-flex; border: 1px solid var(--linie); border-radius: 99px; overflow: hidden; }
  .segTeil { border: 0; background: transparent; color: var(--dim); font: inherit;
    font-size: 11px; letter-spacing: .4px; padding: 4px 11px; cursor: pointer; }
  .segTeil.aktiv { background: color-mix(in srgb, var(--gold) 22%, transparent); color: var(--text); }
  .segTeil:hover, .segTeil:focus-visible { color: var(--text); outline: none; }
  .designPunkt { width: 22px; height: 22px; border-radius: 50%; border: 2px solid transparent;
    cursor: pointer; padding: 0; box-shadow: 0 0 0 1px var(--linie); }
  .designPunkt:hover, .designPunkt:focus-visible { box-shadow: 0 0 0 2px var(--dim); outline: none; }
  .designPunkt.aktiv { border-color: var(--bg); box-shadow: 0 0 0 2px var(--gold); }

  /* --- Permission-Matrix v2 (Rechte-Matrix im Team-Splitscreen) --------------- */
  .matrixReiter { display: flex; gap: 4px; flex-wrap: wrap; border-bottom: 1px solid var(--linie);
    margin-bottom: 14px; padding-bottom: 2px; }
  .mReiter { border: 0; background: transparent; color: var(--dim); font: inherit; font-size: 13px;
    padding: 8px 13px; border-radius: 8px 8px 0 0; cursor: pointer; border-bottom: 2px solid transparent; }
  .mReiter:hover, .mReiter:focus-visible { color: var(--text); outline: none; }
  .mReiter.aktiv { color: var(--text); border-bottom-color: var(--gold);
    background: color-mix(in srgb, var(--gold) 10%, transparent); }
  .matrixBody { min-height: 60px; }
  .matrixTitel { margin-bottom: 10px; }
  .matrixHinweis { color: var(--dim); font-size: 12.5px; margin: 2px 0 0; max-width: 62ch; }
  .matrixWerkzeug { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; margin-bottom: 12px; }
  .matrixForm { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; margin: 8px 0; }
  .mInput { background: var(--bg); border: 1px solid var(--linie); border-radius: 7px; color: var(--text);
    padding: 7px 10px; font: inherit; font-size: 13px; }
  .mInputMini { width: 78px; }
  .mFarbe { width: 38px; height: 34px; padding: 2px; background: var(--bg); border: 1px solid var(--linie);
    border-radius: 7px; cursor: pointer; }
  /* 25 Pixel hoch bis zum Kontrollgang am 23.08.2026 — zehn Stueck in der
     Team-Verwaltung, alle unter dem Haus-Mindestmass. Das Feld darf klein
     WIRKEN; seine Flaeche darf es nicht sein. */
  .mSelect { background: var(--bg); border: 1px solid var(--linie); border-radius: 7px; color: var(--text);
    padding: 6px 9px; font: inherit; font-size: 13px; cursor: pointer; min-height: 32px; }
  .mSelectMini { font-size: 12px; padding: 4px 7px; min-height: 32px; }
  .aktionSek { background: transparent; border: 1px solid var(--linie); color: var(--dim); border-radius: 9px;
    padding: 8px 14px; font: inherit; font-size: 13px; cursor: pointer; }
  .aktionSek:hover, .aktionSek:focus-visible { border-color: var(--gold); color: var(--text); outline: none; }
  .betreiberBadge { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; font-size: 12.5px;
    color: var(--dim); background: color-mix(in srgb, var(--gold) 8%, var(--panel)); border: 1px solid var(--linie);
    border-radius: 9px; padding: 8px 12px; margin-bottom: 12px; }
  .badgeMarke { font-size: 11px; letter-spacing: .4px; text-transform: uppercase; color: var(--text);
    background: color-mix(in srgb, var(--gold) 30%, transparent); border-radius: 99px; padding: 2px 9px; }

  /* Rollen-Gitter (2-State) */
  .gitterHalter { overflow-x: auto; }
  .rechteMatrix { border-collapse: collapse; width: 100%; font-size: 13px; }
  .rechteMatrix th, .rechteMatrix td { border-bottom: 1px solid var(--linie); padding: 7px 9px; text-align: left; }
  .eckZelle { position: sticky; left: 0; background: var(--bgHell); color: var(--dim); font-weight: 600;
    min-width: 180px; }
  .rolleKopf { text-align: center; vertical-align: bottom; min-width: 74px; }
  .rolleName { display: block; font-weight: 600; color: var(--text); font-size: 12px; }
  .rollePos { display: block; color: var(--dim); font-size: 10.5px; }
  .stdBadge { display: inline-block; font-size: 9.5px; letter-spacing: .3px; text-transform: uppercase;
    color: var(--dim); border: 1px solid var(--linie); border-radius: 99px; padding: 0 6px; margin-top: 2px; }
  .rollePunkt { display: inline-block; width: 10px; height: 10px; border-radius: 50%; margin-right: 5px;
    flex: none; vertical-align: middle; box-shadow: 0 0 0 1px var(--linie); }
  .katZeile .katKopf { position: sticky; left: 0; background: var(--zeile); color: var(--text); font-weight: 600;
    cursor: pointer; user-select: none; font-size: 12px; letter-spacing: .3px; }
  .katKopf::before { content: ""; display: inline-block; width: 0; height: 0; margin-right: 8px;
    border-left: 5px solid currentColor; border-top: 4px solid transparent; border-bottom: 4px solid transparent;
    vertical-align: middle; transition: transform .12s ease; }
  .katKopf.auf::before { transform: rotate(90deg); }
  .katGefahr .katKopf { background: color-mix(in srgb, #d0574e 16%, var(--zeile));
    box-shadow: inset 3px 0 0 #d0574e; }
  .gefahrZeile .rechtName { color: color-mix(in srgb, #d0574e 55%, var(--text)); }
  .rechtName { color: var(--text); position: sticky; left: 0; background: var(--bg); }
  .gefahrMarke { display: inline-block; width: 15px; height: 15px; line-height: 15px; text-align: center;
    margin-left: 6px; font-size: 11px; font-weight: 700; color: #fff; background: #d0574e; border-radius: 50%; }
  .zelleZentrum { text-align: center; }
  .rechtBox { width: 22px; height: 22px; border-radius: 6px; border: 1.5px solid var(--randStark);
    background: transparent; cursor: pointer; padding: 0; vertical-align: middle; position: relative; }
  .rechtBox.an { background: color-mix(in srgb, var(--gold) 78%, transparent); border-color: var(--gold); }
  .rechtBox.an::after { content: ""; position: absolute; inset: 5px; border-radius: 2px; background: var(--bg); }
  .rechtBox:not(.gesperrt):hover, .rechtBox:focus-visible { transform: scale(1.12); outline: none;
    box-shadow: 0 0 0 2px color-mix(in srgb, var(--gold) 40%, transparent); }
  .rechtBox.gesperrt { opacity: .3; cursor: not-allowed; }
  /* Fokus-Puls nach dem Umschalten (ADR-077: nur transform/box-shadow am Fokus-
     Element, kein Layout-Reflow der Nachbarn) — die ganze Matrix bleibt stehen. */
  @keyframes rechtBoxPuls {
    0%   { transform: scale(1);    box-shadow: 0 0 0 0 color-mix(in srgb, var(--gold) 55%, transparent); }
    45%  { transform: scale(1.18); box-shadow: 0 0 0 4px color-mix(in srgb, var(--gold) 30%, transparent); }
    100% { transform: scale(1);    box-shadow: 0 0 0 0 transparent; }
  }
  .rechtBox.puls { animation: rechtBoxPuls .32s ease; }

  /* Rollen-/Zusatzrollen-Chips */
  .mChips { display: flex; flex-wrap: wrap; gap: 5px; align-items: center; }
  .rolleChip { display: inline-flex; align-items: center; gap: 4px; font-size: 12px; color: var(--text);
    background: var(--panel); border: 1px solid var(--linie); border-radius: 99px; padding: 3px 4px 3px 9px; }
  .chipWeg { border: 0; background: transparent; color: var(--dim); cursor: pointer; font-size: 15px;
    line-height: 1; padding: 0 4px; border-radius: 50%; }
  .chipWeg:hover, .chipWeg:focus-visible { color: #d0574e; outline: none; }

  /* Bereich-Overrides (Subjekt links, Tri-State rechts) */
  .overrideLayout { display: flex; gap: 16px; flex-wrap: wrap; align-items: flex-start; }
  .subjektListe { display: flex; flex-direction: column; gap: 4px; min-width: 150px; flex: 0 0 auto; }
  .subjektKnopf { display: flex; align-items: center; gap: 7px; text-align: left; border: 1px solid transparent;
    background: transparent; color: var(--dim); font: inherit; font-size: 13px; padding: 7px 10px;
    border-radius: 8px; cursor: pointer; }
  .subjektKnopf:hover, .subjektKnopf:focus-visible { color: var(--text); background: var(--panel); outline: none; }
  .subjektKnopf.aktiv { color: var(--text); background: var(--panel); border-color: var(--gold); }
  .subjektErweitert { margin-top: 6px; }
  .subjektErweitert summary { color: var(--dim); font-size: 12px; cursor: pointer; padding: 6px 10px; }
  .subjektRechte { flex: 1 1 320px; min-width: 280px; }
  .subjektTitel { margin: 0 0 10px; color: var(--text); }
  .overrideKat { color: var(--dim); font-size: 11px; letter-spacing: .4px; text-transform: uppercase;
    margin: 14px 0 6px; border-bottom: 1px solid var(--linie); padding-bottom: 4px; }
  .overrideZeile { display: flex; align-items: center; justify-content: space-between; gap: 12px;
    padding: 5px 0; flex-wrap: wrap; }
  .overrideMeta { display: flex; flex-direction: column; }
  .overrideName { color: var(--text); font-size: 13px; }
  .erbtHinweis { color: var(--dim); font-size: 11px; }
  .triSeg { display: inline-flex; border: 1px solid var(--linie); border-radius: 8px; overflow: hidden; flex: none; }
  .triOpt { border: 0; background: transparent; color: var(--dim); font: inherit; font-size: 11.5px;
    padding: 6px 11px; cursor: pointer; border-right: 1px solid var(--linie); }
  .triOpt:last-child { border-right: 0; }
  .triOpt:hover, .triOpt:focus-visible { color: var(--text); outline: none; }
  .triOpt.gesperrt, .triOpt:disabled { opacity: .3; cursor: not-allowed; }
  .triOpt.triDeny.aktiv { background: color-mix(in srgb, #d0574e 32%, transparent); color: var(--text); }
  .triOpt.triAllow.aktiv { background: color-mix(in srgb, #5a9e6a 34%, transparent); color: var(--text); }
  .triOpt.triErbt.aktiv { background: var(--zeile); color: var(--text); }

  /* Vorschau (Effektiv-Rechte mit Herkunft) */
  .vorschauHalter { margin-top: 12px; display: flex; flex-direction: column; gap: 2px; }
  .vorschauZeile { display: grid; grid-template-columns: 92px 1fr auto; gap: 10px; align-items: center;
    padding: 6px 0; border-bottom: 1px solid var(--linie); font-size: 13px; }
  .vStatus { font-size: 11px; letter-spacing: .3px; text-transform: uppercase; text-align: center;
    border-radius: 99px; padding: 2px 0; }
  .vErlaubt { color: #cdeccc; background: color-mix(in srgb, #5a9e6a 30%, transparent); }
  .vVerboten { color: #f3d2ce; background: color-mix(in srgb, #d0574e 30%, transparent); }
  .vName { color: var(--text); }
  .vHerkunft { color: var(--dim); font-size: 12px; text-align: right; }

  /* --- Meeting-Abschluss (23.08.2026) -------------------------------------
     Drei Bloecke, drei Ausgaenge. Alle Maße stehen HIER und nicht im
     JavaScript — sonst kommt die Handy-Regel unten nur mit `!important` dagegen
     an (Haus-Regel 17 §6, am 15.08. dreimal an einem Tag verletzt). */
    flex: none; min-height: 32px; }
  #abschlussModal .pmInhalt { width: min(720px, 96vw); max-height: 90vh;
    display: flex; flex-direction: column; }
  .abLaeuft:not([hidden]) { color: var(--dim); font-size: 13px; padding: 24px 0; text-align: center; }
  /* `:not([hidden])` ist hier Pflicht, keine Zier: Eine eigene `display`-Regel
     schlaegt das `hidden`-Attribut, und dann steht ein Block da, den der Code
     ausdruecklich weggelegt hat. Am 20.08.2026 dreimal in einer Stunde
     passiert — deshalb steht es an JEDER Fläche, die hier `display` setzt. */
  #abKoerper:not([hidden]) { overflow-y: auto; display: flex; flex-direction: column;
    gap: 14px; padding-right: 4px; }
  .abBlock:not([hidden]) { display: flex; flex-direction: column; gap: 8px; }
  .abBlock h3 { display: flex; align-items: center; gap: 8px; margin: 0;
    font-size: 13px; font-weight: 600; color: var(--dim); letter-spacing: .3px;
    text-transform: uppercase; }
  .abBlock h3 .ikon { width: 15px; height: 15px; }
  .abZahl { color: var(--goldText); font-weight: 700; }
  .abBlock textarea, .abPfadZeile input { width: 100%; background: var(--bg);
    color: var(--text); border: 1px solid var(--linie); border-radius: 8px;
    padding: 9px 11px; font: inherit; font-size: 13.5px; resize: vertical; }
  .abBlock textarea:focus, .abPfadZeile input:focus { outline: none; border-color: var(--gold); }
  .abPfadZeile { display: flex; align-items: center; gap: 10px; font-size: 12px;
    color: var(--dim); }
  .abPfadZeile input { flex: 1; font-size: 12.5px; }
  .abLeer { color: var(--dim); font-size: 13px; padding: 6px 0; }
  /* Eine Aufgaben-Zeile: Haken, Titel, Zuständig, Ziel. Der Haken ist der
     Umschalter — Wort-Auswahlfelder für „ja/nein" wären drei Fremdwörter
     je Zeile. */
  .abAufgabe { display: flex; align-items: center; gap: 8px; background: var(--bg);
    border: 1px solid var(--linie); border-left: 3px solid var(--gold);
    border-radius: 8px; padding: 7px 10px; }
  .abAufgabe.aus { opacity: .45; border-left-color: var(--linie); }
  .abHaken { flex: none; width: 32px; height: 32px; display: flex; align-items: center;
    justify-content: center; background: transparent; border: 1px solid var(--linie);
    border-radius: 8px; color: transparent; cursor: pointer; padding: 0; }
  .abHaken.an { color: var(--goldText); border-color: var(--gold); }
  .abHaken .ikon { width: 16px; height: 16px; }
  .abAufgabeTitel { flex: 1; min-width: 120px; background: transparent; border: 0;
    color: var(--text); font: inherit; font-size: 13.5px; padding: 4px 2px; }
  .abAufgabeTitel:focus { outline: none; border-bottom: 1px solid var(--gold); }
  .abAufgabe select { flex: none; max-width: 150px; background: var(--zeile);
    color: var(--text); border: 1px solid var(--linie); border-radius: 8px;
    font: inherit; font-size: 12.5px; padding: 6px 8px; min-height: 32px; }
  .abWarnung { border: 1px solid var(--warn, #d98a3a); border-radius: 8px;
    background: color-mix(in srgb, var(--warn, #d98a3a) 12%, transparent);
    color: var(--text); font-size: 12.5px; padding: 8px 11px; margin-bottom: 10px; }
  .abFuss { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 14px;
    padding-top: 12px; border-top: 1px solid var(--linie); }
  .abFuss .aktion:not([hidden]) { display: inline-flex; align-items: center; gap: 7px; min-height: 36px; }
  .abFuss .aktion .ikon { width: 15px; height: 15px; }
  .abFuss .still { margin-left: auto; color: var(--dim); }

  @media (max-width: 768px) {
    /* Auf dem Telefon bricht die Aufgaben-Zeile um: drei Felder nebeneinander
       wären je 60 Pixel breit und damit unbedienbar. Und alles Antippbare
       waechst auf 36 Pixel (Haus-Regel 17 §6). */
    .abAufgabe { flex-wrap: wrap; }
    .abAufgabeTitel { flex: 1 0 100%; order: 1; }
    .abAufgabe select { flex: 1 1 auto; max-width: none; order: 2; min-height: 36px; }
    .abHaken { width: 36px; height: 36px; }
    .abFuss .aktion { flex: 1 1 auto; justify-content: center; }
    .abFuss .still { margin-left: 0; }
  }

  /* --- Notizzettel: Gruppen nach Art (23.08.2026) -------------------------- */
  /* Der Zettel beantwortet ab jetzt „was wurde entschieden, was ist zu tun,
     was blieb offen" — nicht mehr „welcher Satz kam wann". Die Gruppen tragen
     dieselben Symbole und Farben wie der Art-Umschalter in der Zeile: gleiche
     Sache, gleiches Zeichen. */
  .nGruppe { display: flex; align-items: center; gap: 8px; margin: 12px 0 2px;
    font-size: 11.5px; letter-spacing: .3px; text-transform: uppercase;
    color: var(--dim); }
  .nGruppe:first-child { margin-top: 2px; }
  .nGruppe .ikon { width: 14px; height: 14px; flex: none; }
  .nGruppeName { flex: 1; min-width: 0; }
  .nGruppeZahl { flex: none; color: var(--goldText); font-weight: 700; }
  .nGruppe.art-entscheidung .ikon { color: var(--goldText); }
  .nGruppe.art-aufgabe .ikon { color: var(--blau, #6f8cff); }
  .nGruppe.art-frage .ikon { color: var(--warn, #d98a3a); }
  /* Der Weg in die Planung. Nach dem Klick bleibt der Knopf stehen und wird
     ruhig — verschwinden würde heißen, dass man ihn ein zweites Mal sucht. */
  .nAktion.rein:hover, .nAktion.rein:focus-visible { border-color: var(--gold);
    color: var(--goldText); outline: none; }
  .nAktion.rein.fertig { color: var(--gruen, #16a34a); border-color: var(--gruen, #16a34a);
    opacity: .6; cursor: default; }
  /* Das Plus für die eigene Notiz: eine schmale Zeile, kein Formular. */
  .nSelbstAuf { display: flex; align-items: center; justify-content: center;
    width: 100%; min-height: 36px; margin-top: 12px; background: transparent;
    border: 1px dashed var(--linie); border-radius: 8px; color: var(--dim);
    cursor: pointer; padding: 0; }
  .nSelbstAuf:hover, .nSelbstAuf:focus-visible { border-color: var(--gold);
    color: var(--goldText); outline: none; }
  .nSelbstAuf[hidden] { display: none; }
  .nSelbstAuf .ikon { width: 16px; height: 16px; }

  /* --- Interessenten-Weg (23.08.2026) -------------------------------------- */
  /* Der Link steht immer da, auch wenn die Mail rausging: „ist angekommen?"
     kann am Messestand niemand sofort beantworten, und ein Link zum Vorlesen
     kostet nichts. */
  .demoNews { display: flex; align-items: center; gap: 8px; margin: 0 0 12px;
    font-size: 13px; color: var(--dim); cursor: pointer; min-height: 32px; }
  .demoNews input { width: 18px; height: 18px; accent-color: var(--gold); }
  .demoLink { display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
    margin-top: 8px; }
  .demoLink input { flex: 1 1 260px; min-width: 0; background: var(--bg);
    border: 1px solid var(--linie); border-radius: 8px; color: var(--text);
    font: inherit; font-size: 12.5px; padding: 8px 10px; min-height: 32px; }
  .demoLink .nAktion.fertig { color: var(--gruen, #16a34a);
    border-color: var(--gruen, #16a34a); }
  .demoMailStand { flex: 1 1 100%; font-size: 12px; color: var(--warn, #d98a3a);
    font-weight: 400; }
  .demoMailStand.gut { color: var(--gruenText, #16a34a); }
  .dzStatus.eingeladen { color: var(--warn, #d98a3a); }
  /* Der Ausgang steht leiser als das Angebot — er ist kein zweiter Knopf,
     sondern der Weg hinaus. */
  .werbeKontakt { margin: 18px 0 6px; font-size: 13px; color: var(--dim);
    display: flex; flex-wrap: wrap; align-items: center; gap: 4px 6px; }
  /* Ein Verweis ist ein Tippziel wie jeder Knopf. 18 Pixel hoch waren sie, bis
     der Bild-Prüfer sie auf 390 Pixel Breite meldete — drei Stück in einer
     Zeile, alle unter dem Mindestmaß. */
  .werbeKontakt a { color: inherit; display: inline-flex; align-items: center;
    min-height: 32px; padding: 0 2px; }
  .werbeAustragen { display: block; width: 100%; min-height: 36px; margin: 6px 0 0;
    background: transparent; border: 0; color: var(--dim); font: inherit;
    font-size: 12.5px; text-decoration: underline; cursor: pointer; }
  .werbeAustragen:hover:not(:disabled), .werbeAustragen:focus-visible {
    color: var(--text); outline: none; }
  .werbeAustragen:disabled { text-decoration: none; cursor: default; }

  @media (max-width: 768px) {
    .demoLink input { flex: 1 1 100%; min-height: 36px; }
    .demoLink .nAktion { width: 36px; height: 36px; }
    .demoNews { min-height: 36px; }
    .werbeKontakt a { min-height: 36px; }
  }

  /* --- Testzugänge im Admin-Bereich (23.08.2026) --------------------------- */
  /* Eine Zeile je Zugang. Zwei Balken statt einer Zahl: Züge und Geld greifen
     getrennt, und wer nur eines zeigt, verdeckt die Grenze, die zuerst
     zuschlägt. */
  .adminDemoZeile { border: 1px solid var(--linie); border-left: 3px solid var(--linie);
    border-radius: 8px; padding: 9px 12px; margin-bottom: 8px; display: flex;
    flex-direction: column; gap: 5px; }
  .adminDemoZeile.aktiv { border-left-color: var(--gruen, #16a34a); }
  .adminDemoZeile.eingeladen { border-left-color: var(--warn, #d98a3a); }
  .adminDemoZeile.werbung { border-left-color: var(--dim); }
  .adzKopf { display: flex; align-items: center; gap: 10px; }
  .adzMail { flex: 1; min-width: 0; font-size: 13.5px; color: var(--text);
    overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .adzStand { flex: none; font-size: 11px; letter-spacing: .3px;
    text-transform: uppercase; color: var(--dim); }
  .adzStand.aktiv { color: var(--gruenText, #16a34a); }
  .adzStand.eingeladen { color: var(--warn, #d98a3a); }
  .adzMeta { font-size: 11.5px; color: var(--dim); }
  .adzBalken { display: flex; gap: 14px; flex-wrap: wrap; margin-top: 2px; }
  .adzMass { display: flex; align-items: center; gap: 7px; flex: 1 1 160px; }
  .adzWort { font-size: 11px; color: var(--dim); min-width: 46px; }
  .adzBahn { flex: 1; height: 5px; border-radius: 99px; background: var(--zeile);
    overflow: hidden; }
  .adzBahn > span { display: block; height: 100%; border-radius: 99px;
    background: var(--gold); }
  .adzMass.voll .adzBahn > span { background: var(--warn, #d98a3a); }
  .adzZahl { font-size: 11px; color: var(--dim); white-space: nowrap; }

  /* --- Rückmeldungen im Betreiber-Bereich (25.08.2026) --------------------- */
  /* Dieselbe Zeilen-Form wie die Testzugänge darüber; der Rand links trägt die
     Bewertung als Farbe. Eine Zeile ohne Absender ist der Normalfall nach drei
     Tagen (das Konto ist dann gelöscht), nicht eine Panne. */
  .adminRmZeile { display: flex; align-items: flex-start; gap: 10px;
    border: 1px solid var(--linie); border-left: 3px solid var(--linie);
    border-radius: 8px; padding: 9px 12px; margin-bottom: 8px; }
  .adminRmZeile.gut { border-left-color: var(--gruen); }
  .adminRmZeile.geht { border-left-color: var(--linie); }
  .adminRmZeile.schlecht { border-left-color: var(--warn); }
  .adminRmSymbol { display: grid; place-items: center; width: 22px; height: 22px;
    flex: none; color: var(--dim); }
  .adminRmZeile.gut .adminRmSymbol { color: var(--gruenText); }
  .adminRmZeile.schlecht .adminRmSymbol { color: var(--warnText); }
  .adminRmZeichen { width: 16px; height: 16px; }
  .adminRmRumpf { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 4px; }
  .adminRmText { margin: 0; font-size: 13.5px; line-height: 1.5; color: var(--text);
    white-space: pre-wrap; overflow-wrap: anywhere; }
  .adminRmMeta { font-size: 11.5px; color: var(--dim); }

  @media (max-width: 768px) {
    .adzMass { flex: 1 1 100%; }
  }

  @media (max-width: 768px) {
    /* Unterhalb von 768 gilt 36 — auch fuer die Auswahlfelder im Admin-Bereich. */
    .adminZeile select, .fristFeld { min-height: 36px; }
  }

  @media (max-width: 768px) {
    .mSelect, .mSelectMini { min-height: 36px; }
  }
