/* Farben an einer Stelle — dieselbe Umstellung wie in styles.css.
   Im hellen Modus behaelt jede Farbe GENAU ihren Wert; nachgemessen mit
   npm run optik, null abweichende Pixel. */

/* LotseDesign – Schritt 1 des Umzugs: Hülle, Navigation, Arbeitsübersicht.
 *
 * Bewusst als eigene Ebene über styles.css gelegt, nicht hineingeschrieben:
 * so bleibt der alte Stand unverändert und jeder Schritt ist einzeln rückgängig
 * zu machen. Die Bildschirme, die noch nicht umgezogen sind, sehen weiterhin aus
 * wie bisher – sie brechen nicht.
 *
 * Schritt 1: Seitenleiste, Kopfzeile, Arbeitsübersicht, Karten und Knöpfe.
 * Schritt 2: die beiden Listenbildschirme „Zu entscheiden“ und „Meine Arbeit“.
 * Noch nicht umgezogen: Kalender, Dialoge, Kindermitarbeit, Finanzen, Inventar,
 * Sicherheit, Editor.
 */

:root{
  /* Farben */
  /* ── Ein Name, eine Rolle ────────────────────────────────────────────
     --lotse-ink trug bis zum 18.08.2026 ZWEI Rollen: die Schriftfarbe der
     Ueberschriften (18 Stellen) und zugleich die dunkle Markenflaeche der
     Seitenleiste und zweier Kennzeichen (3 Stellen).
     Im hellen Modus faellt das nicht auf — dunkle Schrift und dunkle Flaeche
     sind derselbe Wert. Im Dunkelmodus zerfaellt es: die Schrift muss hell
     werden, die Markenflaeche dunkel bleiben. Der erste Versuch, nur den
     Wert zu heben, machte prompt die Seitenleiste weiss und die Menuepunkte
     unlesbar — gesehen im Bild, nicht in einer Pruefung.
     Deshalb jetzt zwei Namen.

     21.08.2026 · Der zweite Schritt derselben Trennung. Die Ueberschrift
     zeigte weiter auf --k-a01, den tiefen Markenton (#123b46, Saettigung
     0,60). Damit war JEDE Ueberschrift auf JEDER Flaeche petrolfarben —
     nicht als Akzent gesetzt, sondern weil der Zeiger noch aus der Zeit
     stammte, in der Schrift und Markenflaeche EIN Wert waren.
     Gemessen ueber sechs Flaechen: 38-90 % aller farbigen Bildpunkte lagen
     im Bereich 140-210 Grad. Die Ueberschrift zeigt jetzt auf die
     Schriftfarbe. --lotse-marke behaelt den Markenton; Seitenleiste,
     Kennzeichen und Akzent sind unberuehrt. */
  --lotse-ink:var(--k-t01); --lotse-marke:var(--k-a01); --lotse-teal:var(--k-a02); --lotse-teal-2:var(--k-a03); --lotse-gold:var(--k-a04);
  --lotse-text:var(--k-t01); --lotse-text-2:var(--k-t02); --lotse-text-3:var(--k-t03);
  --lotse-flaeche:var(--k-f01); --lotse-flaeche-2:var(--k-f02); --lotse-flaeche-3:var(--k-f03);
  --lotse-linie:var(--k-l01); --lotse-linie-2:var(--k-l02);
  --lotse-akzent-weich:var(--k-a05); --lotse-akzent-text:var(--k-a06);
  /* Radien: eigene Skala */
  --r1:12px; --r2:18px; --r3:26px; --r4:34px;
  /* eine einzige Bewegungskurve */
  --lotse-ease:cubic-bezier(.3,.7,.2,1);
  /* Schatten: Ebenen, keine Rahmen */
  /* 21.08.2026 · Die drei Schatten waren rgba(18,59,70) — das ist #123b46,
     der tiefe Markenton. Jede Karte auf jeder Flaeche warf damit einen
     gruenen Schatten. Ein Schatten ist Abwesenheit von Licht und traegt
     keine Marke. Jetzt neutral, Deckkraft unveraendert. */
  --sh-1:0 1px 2px rgba(23,32,38,.05);
  --sh-2:0 6px 20px rgba(23,32,38,.07);
  --sh-3:0 16px 44px rgba(23,32,38,.11);
}

body{ background:linear-gradient(150deg,var(--k-f04) 0%,var(--k-f05) 48%,var(--k-f06) 100%); color:var(--lotse-text); }
/* Eine Regel mit `display` schlaegt das hidden-Attribut. Genau daran sind
   drei Stellen unbemerkt sichtbar geblieben, die verborgen sein sollten:
   die Serienfrage am Einzeltermin, die Blaetter-Leiste in der Listenansicht
   und die Terminliste in der Monatsansicht. Aufgefallen ist das im Bildbeleg,
   nicht im Test – die Pruefungen sahen nur das Attribut, nicht die
   Sichtbarkeit. Beides ist jetzt nachgezogen. */
[hidden]{ display:none !important; }

/* ─── Seitenleiste ────────────────────────────────────────────────────────
 *
 * 21.08.2026 · PO-Klarstellung zum Designrest.
 *
 * Gemessen am Stand 1b2aeae: die Leiste war 16,8 % des Bildes und davon
 * 95,6 % dunkler als 35 % Helligkeit — die Inhaltsflaeche daneben zu 99,2 %
 * hell. Der Eindruck „im Hellmodus insgesamt zu dunkel" sass praktisch
 * vollstaendig hier.
 *
 * Sie wird deshalb im Hellmodus eine HELLE Flaeche. Ein Mittelton war die
 * naheliegende Zwischenloesung und ist verworfen: eine Leiste muss sich fuer
 * eine Seite entscheiden, sonst reicht der Kontrast weder fuer helle noch
 * fuer dunkle Schrift. Die Marke bleibt — sie sitzt jetzt dort, wo sie
 * gelesen wird: im Wortzeichen und im aktiven Menuepunkt, statt in einer
 * ganzflaechigen Tapete.
 *
 * ALLE Werte kommen aus bestehenden Tokens. Weil die Tokens mit dem
 * Farbmodus umschlagen, waere die Leiste im Dunkelmodus sonst mit-
 * umgeschlagen; damit dort NICHTS kippt, sind die Dunkelwerte im NACHTRAG
 * von werkzeuge/farbe/dunkelsatz.mjs festgehalten — dem vorgesehenen Ort
 * (FM-09: eine von Hand ins Stilblatt geschriebene Farbe verliert man beim
 * naechsten Werkzeuglauf).
 *
 * `.sidebar` traegt in styles.css `color:white`. Ohne die Zeile unten waere
 * auf der hellen Leiste weisse Schrift auf weissem Grund gestanden —
 * genau das, was eine Aufhellung „nur am Hintergrund" kaputt macht. */
.sidebar{
  background:var(--k-f07);
  border-right:1px solid var(--k-l05);
  color:var(--lotse-ink);
  padding:20px 14px; gap:18px;
}
.brand-block strong{ font-family:Georgia,"Times New Roman",serif; font-size:20px; letter-spacing:-.01em;
  color:var(--lotse-teal-2); }
.brand-block span{ color:var(--k-t25); }
.brand-logo-frame{ border-radius:15px; background:var(--k-f08);
  box-shadow:inset 0 0 0 1px var(--lotse-linie); }
.nav-group-title{ color:var(--k-t25); }
.nav-list{ gap:4px; }
.nav-item{
  border-radius:var(--r1); padding:10px 12px; gap:12px; font-size:14px; font-weight:600;
  color:var(--lotse-ink); transition:background .18s var(--lotse-ease),color .18s var(--lotse-ease);
}
.nav-item:hover{ background:var(--lotse-flaeche); color:var(--lotse-ink); }
/* Der aktive Punkt traegt die Marke: weiche Akzentflaeche, Akzentschrift.
   Er unterscheidet sich damit nicht nur in der Helligkeit vom Hover,
   sondern in der Farbe — auf eine Stufe Helligkeit allein waere kein
   Verlass. Fettung bleibt als zweites, farbunabhaengiges Merkmal. */
.nav-item.active{ background:var(--lotse-akzent-weich); color:var(--lotse-akzent-text); font-weight:700; }
.nav-glyph{
  width:26px; height:26px; border-radius:9px; background:var(--lotse-linie-2);
  color:var(--lotse-text-2);
  font-size:10px; font-weight:800; letter-spacing:.02em;
}
.nav-item.active .nav-glyph{ background:var(--lotse-gold); color:var(--k-t06); }
.sidebar-fuss{ color:var(--k-t25); }

/* Arbeitsbereich gehört in die Seitenleiste, nicht in den Arbeitsbildschirm */
.bereichswahl{
  background:var(--k-f01); border:1px solid var(--lotse-linie);
  border-radius:var(--r1); padding:10px 12px;
}
.bereichswahl > label{ display:block; font-size:10px; letter-spacing:.1em; text-transform:uppercase;
  color:var(--lotse-text-3); font-weight:800; margin-bottom:5px; }
.bereichswahl select{
  width:100%; border:0; background:transparent; color:var(--lotse-ink); font-size:14px; font-weight:650;
  padding:2px 0; cursor:pointer;
}
.bereichswahl select option{ color:var(--k-t01); }
.bereichswahl .nurfeld{ display:block; gap:0; }
.bereichswahl-knopf{ color:var(--lotse-ink); border-color:var(--k-l05); }
.bereichswahl-knopf:hover{ background:var(--lotse-flaeche-2); color:var(--lotse-ink); }
.sidebar-note{ border-radius:var(--r2); background:var(--k-f01); border-color:var(--lotse-linie); }
.sidebar-note p{ color:var(--lotse-text-2); }

/* ─── Kopfzeile ─── */
.topbar{ gap:14px; margin-bottom:18px; }
.eyebrow{ color:var(--lotse-text-3); letter-spacing:.1em; }
.context-path{ font-size:14.5px; font-weight:700; color:var(--lotse-ink); }
.primary-button,.secondary-button,.ghost-button,.danger-button{
  border-radius:999px; padding:10px 17px; font-weight:650; font-size:14px;
  transition:transform .15s var(--lotse-ease), box-shadow .15s var(--lotse-ease);
}
.primary-button{ background:var(--lotse-teal); box-shadow:0 6px 16px rgba(13,119,107,.24); }
.primary-button:active,.secondary-button:active,.ghost-button:active{ transform:scale(.96); }
.secondary-button{ background:var(--lotse-akzent-weich); color:var(--lotse-akzent-text); border-color:transparent; }
.ghost-button{ border:1px solid var(--lotse-linie); color:var(--lotse-text-2); background:transparent; }
.angemeldet{ background:var(--lotse-akzent-weich); border-color:transparent; color:var(--lotse-akzent-text); }

/* ─── Flächen ─── */
.panel,.context-panel,.metric,.dashboard-card,.diagnostics-panel{
  border-radius:var(--r3); border:0; box-shadow:var(--sh-2); background:var(--lotse-flaeche);
}
.context-panel{ padding:22px 26px; margin-bottom:18px; }
.context-panel h1{ font-family:Georgia,"Times New Roman",serif; font-size:30px; color:var(--lotse-ink); letter-spacing:-.3px; }
.context-panel p{ color:var(--lotse-text-2); font-size:14.5px; max-width:760px; }
.panel h2{ font-family:Georgia,"Times New Roman",serif; font-size:22px; color:var(--lotse-ink); }

/* Die Leitkarte trägt die Frage, um die es geht */
.dashboard-hero{ position:relative; overflow:hidden; box-shadow:var(--sh-3); border-radius:var(--r4); }
.dashboard-hero::before{
  content:""; position:absolute; left:0; top:0; bottom:0; width:5px;
  background:linear-gradient(180deg,var(--lotse-teal),var(--lotse-gold));
}
.dashboard-hero h2{ font-size:25px; }
.dashboard-card{
  background:var(--lotse-flaeche-2); border:1px solid var(--lotse-linie-2); border-radius:var(--r2);
  transition:transform .16s var(--lotse-ease), box-shadow .16s var(--lotse-ease);
}
.dashboard-card:hover{ transform:translateY(-2px); box-shadow:var(--sh-2); }
.dashboard-kicker{
  font-size:10.5px; font-weight:800; letter-spacing:.09em; text-transform:uppercase; color:var(--lotse-text-3);
}
.metric{ border-radius:var(--r3); border:0; box-shadow:var(--sh-1); }
.metric strong{ font-family:Georgia,"Times New Roman",serif; color:var(--lotse-teal-2); }

/* Zustände über Farbe *und* Form, nie über Farbe allein */
.status-chip{ border-radius:999px; font-weight:800; font-size:11px; }
.status-chip.allow{ background:var(--k-f09); color:var(--k-t08); }
.status-chip.deny{ background:var(--k-f10); color:var(--k-t09); }
.class-chip{ border-radius:999px; }

/* ═══════════════════════════════════════════════════════════════════
   Schritt 2 des Umzugs: die beiden Listenbildschirme
   „Zu entscheiden“ (.ac-shell) und „Meine Arbeit“ (#myWorkSurface).

   Leitgedanke: eine Liste ist kein Formular. Jede Zeile beantwortet in
   dieser Reihenfolge drei Fragen – Was ist es? Worum geht es? Was tue
   ich jetzt? Der Zustand steht nie nur in der Farbe, sondern immer
   zusätzlich in einer Form: Randbalken links, Wortmarke im Chip.
   ═══════════════════════════════════════════════════════════════════ */

/* ─── Gemeinsame Zeilengestalt ─── */
.action-card,.work-item{
  position:relative; border:0; border-radius:var(--r2);
  background:var(--lotse-flaeche); box-shadow:var(--sh-1);
  padding:14px 16px 14px 20px;
  transition:box-shadow .18s var(--lotse-ease), transform .18s var(--lotse-ease);
}
.action-card:hover,.work-item:hover{ box-shadow:var(--sh-2); }
/* Der Balken ist die Form, die den Zustand trägt. Ohne Zustand: ruhig. */
.action-card::before,.work-item::before{
  content:""; position:absolute; left:0; top:12px; bottom:12px; width:4px;
  border-radius:0 4px 4px 0; background:var(--lotse-linie);
}
.action-card-list,.task-rail-list,.work-list{ gap:9px; }

/* ─── Zustände: Farbe *und* Balkenhöhe *und* Wort ─── */
.action-card[data-need="OVERDUE"]::before,.work-item.overdue::before{
  background:var(--k-f11); top:0; bottom:0;                /* voller Balken = dringend */
}
.action-card[data-need="DECISION_REQUIRED"]::before{ background:var(--lotse-gold); top:6px; bottom:6px; }
.action-card[data-need="WORK_REQUIRED"]::before{ background:var(--lotse-teal); }
.action-card[data-need="UPCOMING"]::before{ background:var(--lotse-linie); top:20px; bottom:20px; }

.action-need{
  border-radius:999px; font-size:11px; font-weight:800; letter-spacing:.01em;
  padding:6px 11px; background:var(--lotse-flaeche-3); color:var(--lotse-text-2);
}
.action-card[data-need="OVERDUE"] .action-need{ background:var(--k-f10); color:var(--k-t09); }
.action-card[data-need="DECISION_REQUIRED"] .action-need{ background:var(--k-f12); color:var(--k-t10); }
.action-card[data-need="WORK_REQUIRED"] .action-need{ background:var(--lotse-akzent-weich); color:var(--lotse-akzent-text); }

/* ─── Textspalte ─── */
.action-main strong,.work-main strong{
  font-size:15px; font-weight:700; color:var(--lotse-ink); line-height:1.35;
}
.action-main span,.work-main span{ font-size:12.5px; color:var(--lotse-text-2); }

/* ─── Typmarke in „Meine Arbeit“ ─── */
.work-item{ padding-left:18px; }
.work-type{
  width:38px; height:38px; border-radius:var(--r1); border:0;
  background:var(--lotse-akzent-weich); color:var(--lotse-akzent-text);
  font-size:11px; font-weight:850; box-shadow:none;
}
.work-item.overdue{ background:var(--k-f13); }
.work-item.overdue .work-type{ background:var(--k-f10); color:var(--k-t09); }

/* ─── Knöpfe in der Zeile ─── */
.quick-actions{ display:flex; gap:8px; flex-wrap:wrap; }
.quick-action{
  border:0; border-radius:999px; padding:9px 14px; cursor:pointer;
  background:var(--lotse-akzent-weich); color:var(--lotse-akzent-text);
  font-size:12.5px; font-weight:750;
  transition:background .15s var(--lotse-ease), transform .15s var(--lotse-ease);
}
.quick-action:hover{ background:var(--k-f14); }
.quick-action:active{ transform:scale(.96); }

/* ─── „Zu entscheiden“: Hauptliste und Prioritätsspalte ─── */
.ac-shell{ gap:18px; }
.compact-filter{ color:var(--lotse-text-3); }
.compact-filter select{ border-radius:999px; padding:8px 14px; background:var(--lotse-flaeche-2); }
.projection-note{ color:var(--lotse-text-2); font-size:13px; margin:-2px 0 16px; max-width:70ch; }
.task-rail{ background:var(--lotse-flaeche-2); box-shadow:none; }
.task-rail .action-card{ background:var(--lotse-flaeche); box-shadow:var(--sh-1); }

/* ─── „Meine Arbeit“: Gruppen ─── */
.my-work-groups{ gap:22px; }
.my-work-group h3{
  font-family:Georgia,"Times New Roman",serif; font-size:15px; font-weight:400;
  color:var(--lotse-teal-2); margin:0 0 10px; padding-bottom:8px;
  border-bottom:1px solid var(--lotse-linie-2);
}
.my-work-resume{ margin-bottom:18px; }
.dialog-note{
  border-radius:var(--r2); border:0; background:var(--lotse-flaeche-2);
  color:var(--lotse-text-2); padding:14px 16px; font-size:13px;
}

/* ─── Kleine Bildschirme: die Zeile bricht um, sie schrumpft nicht ─── */
@media(max-width:720px){
  .action-card,.work-item{ padding:14px 14px 14px 18px; gap:10px; }
  .action-card .action-need{ justify-self:start; }
  .work-item .secondary-button,.quick-action{ min-height:44px; }   /* Daumenziel */
  .quick-actions{ width:100%; }
  .quick-action{ flex:1 1 auto; text-align:center; }
  .my-work-group h3{ font-size:14px; }
}

/* ═══════════════════════════════════════════════════════════════════
   Schritt 3 des Umzugs: der Kalender.

   Ein Kalender wird über das Datum gelesen. Deshalb trägt jede Zeile
   links eine Datumsmarke – Wochentag, Tag, Monat – und erst danach
   den Titel. Vergangene Termine treten zurück, ohne zu verschwinden.
   ═══════════════════════════════════════════════════════════════════ */

.calendar-surface .panel-head{ margin-bottom:16px; }
.calendar-list{ gap:9px; }

.calendar-item{
  display:grid; grid-template-columns:auto minmax(0,1fr) auto;
  align-items:center; gap:16px;
  border:0; border-radius:var(--r2); background:var(--lotse-flaeche);
  box-shadow:var(--sh-1); padding:12px 16px 12px 12px;
  transition:box-shadow .18s var(--lotse-ease);
}
.calendar-item:hover{ box-shadow:var(--sh-2); }

.kal-datum{
  display:grid; justify-items:center; align-content:center; gap:0;
  width:58px; min-height:58px; padding:7px 6px;
  border-radius:var(--r1); background:var(--lotse-akzent-weich);
  color:var(--lotse-akzent-text); line-height:1.1;
}
.kal-wochentag{ font-size:10px; font-weight:800; letter-spacing:.06em; text-transform:uppercase; opacity:.8; }
.kal-tag{ font-family:Georgia,"Times New Roman",serif; font-size:23px; font-weight:400; }
.kal-monat{ font-size:10.5px; font-weight:750; letter-spacing:.04em; }

/* ─── K-1: Tagesgruppen ───
   Die Zwischenüberschrift ist ein Datum, kein Titel: leise gesetzt, aber
   klar abgegrenzt. Beim Scrollen bleibt sie stehen, damit man nie raten
   muss, welchen Tag man gerade liest. */
.kal-tagesgruppe{
  position:sticky; top:0; z-index:2;
  margin:20px 0 9px; padding:7px 2px 7px 0;
  font-family:Georgia,"Times New Roman",serif; font-size:14.5px; font-weight:400;
  color:var(--lotse-teal-2); letter-spacing:.01em;
  background:linear-gradient(var(--lotse-flaeche) 78%, rgba(255,255,255,0));
}
.kal-tagesgruppe:first-child{ margin-top:0; }

/* ─── K-1: Überschneidung ───
   Warnung, kein Verbot. Sie steht in Farbe, in Form (Randbalken) und im
   Wort – wer Farben nicht unterscheidet, verliert nichts. */
.calendar-item[data-ueberschneidung]{
  padding-left:16px; box-shadow:var(--sh-1), inset 4px 0 0 var(--k-a07);
}
.kal-warnung{
  display:block; margin-top:5px; font-size:12px; font-weight:650; color:var(--k-t10);
}
.status-chip.warnung{ background:var(--k-f12); color:var(--k-t10); }
.calendar-item[data-vergangen][data-ueberschneidung]{ box-shadow:inset 4px 0 0 var(--k-a08); }
.calendar-item[data-vergangen] .kal-warnung{ color:var(--lotse-text-2); font-weight:600; }

/* ═══ K-5: Woche und Monat ═══
   Dieselben Termine, andere Leserichtung. Auf dem Desktop steht in jeder
   Zelle, was los ist; auf dem Telefon nur die Anzahl – ein Monatsraster mit
   Titeln wäre dort die „Mega-Tabelle", die es nicht geben soll. */
.kal-ansicht{ display:inline-flex; padding:3px; gap:2px; border-radius:999px;
              background:var(--lotse-flaeche-3); }
.kal-ansicht-knopf{
  border:0; background:transparent; cursor:pointer; border-radius:999px;
  padding:8px 15px; font-size:13px; font-weight:700; color:var(--lotse-text-2);
  min-height:40px; transition:background .15s var(--lotse-ease), color .15s var(--lotse-ease);
}
.kal-ansicht-knopf.active{ background:var(--lotse-flaeche); color:var(--lotse-akzent-text);
                           box-shadow:var(--sh-1); }
.kal-steuerung{ display:flex; align-items:center; gap:10px; margin:0 0 14px; }
.kal-steuerung strong{ font-family:Georgia,"Times New Roman",serif; font-size:18px;
                       font-weight:400; color:var(--lotse-ink); min-width:190px; }
.kal-steuerung .ghost-button{ min-width:44px; min-height:44px; font-size:20px; line-height:1;
                              padding:0 12px; }

.kal-raster{ border-radius:var(--r2); overflow:hidden; background:var(--lotse-flaeche); box-shadow:var(--sh-1); }
.kal-kopfzeile,.kal-felder{ display:grid; grid-template-columns:repeat(7,minmax(0,1fr)); }
.kal-kopf{ padding:10px 8px; font-size:11px; font-weight:800; letter-spacing:.06em;
           text-transform:uppercase; color:var(--lotse-text-3); text-align:center;
           background:var(--lotse-flaeche-2); }
.kal-zelle{
  position:relative; min-height:112px; padding:8px 8px 10px; cursor:pointer;
  border-top:1px solid var(--lotse-linie-2); border-right:1px solid var(--lotse-linie-2);
  transition:background .15s var(--lotse-ease);
}
.kal-zelle:nth-child(7n){ border-right:0; }
.kal-zelle:hover{ background:var(--lotse-flaeche-2); }
.kal-zelle.fremd{ background:var(--lotse-flaeche-2); }
.kal-zelle.fremd .kal-zelle-tag{ color:var(--lotse-text-3); }
.kal-zelle-tag{ font-family:Georgia,"Times New Roman",serif; font-size:15px; color:var(--lotse-ink); }
.kal-zelle[data-heute] .kal-zelle-tag{
  display:inline-grid; place-items:center; width:26px; height:26px; border-radius:50%;
  background:var(--lotse-teal); color:var(--k-t05); font-size:13px;
}
.kal-zelle-zahl{ display:none; }
.kal-zelle-liste{ display:grid; gap:3px; margin-top:6px; }
.kal-zelle-termin{
  /* 19.08.2026 · war --lotse-text-2 und traf auf der weichen Akzentflaeche
     nur 4,46:1. Die Foundationwerte selbst bleiben unangetastet; hier steht
     die kraeftigere Textrolle, weil der Eintrag im Kalender gelesen werden
     muss und keine Nebenbemerkung ist. */
  display:block; font-size:11.5px; line-height:1.35; color:var(--lotse-text);
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
  padding:3px 6px; border-radius:7px; background:var(--lotse-akzent-weich);
}
.kal-zelle-termin b{ color:var(--lotse-akzent-text); font-weight:800; }
.kal-zelle-termin.entfaellt{ background:var(--lotse-flaeche-3); color:var(--lotse-text-3);
                             text-decoration:line-through; }
.kal-zelle-mehr{ font-size:11px; font-weight:750; color:var(--lotse-text-3); padding-left:6px; }

@media(max-width:900px){
  .kal-zelle{ min-height:92px; }
  .kal-zelle-termin{ font-size:11px; }
}
@media(max-width:720px){
  /* Mobil: nur Tag und Anzahl. Antippen führt in die Liste des Tages. */
  .kal-zelle{ min-height:60px; padding:7px 4px; text-align:center; }
  .kal-zelle-liste{ display:none; }
  .kal-zelle-zahl{
    display:inline-grid; place-items:center; min-width:20px; height:20px; margin-top:5px;
    border-radius:999px; background:var(--lotse-akzent-weich); color:var(--lotse-akzent-text);
    font-size:11px; font-weight:800; padding:0 6px;
  }
  .kal-zelle-zahl:empty{ display:none; }
  .kal-steuerung{ flex-wrap:wrap; }
  .kal-steuerung strong{ order:-1; flex:1 1 100%; min-width:0; font-size:17px; }
  .kal-ansicht{ width:100%; }
  .kal-ansicht-knopf{ flex:1; }
  .panel-actions{ width:100%; }
}

/* ─── K-2/K-3: Serien im Kalender ───
   Ein Serientermin sagt, dass er zu einer Serie gehört, und in welchem
   Rhythmus. Ein abgesagter Termin verschwindet nicht – er wird
   durchgestrichen und nennt den Grund. Sonst ruft am Sonntag jemand an. */
.kal-serie{
  display:inline-block; justify-self:start; margin-top:2px; font-size:11.5px; font-weight:750; padding:3px 9px;
  border-radius:999px; background:var(--lotse-flaeche-3); color:var(--lotse-text-2);
}
.kal-entfaellt{
  display:block; margin-top:5px; font-size:12px; font-weight:700; color:var(--k-t09);
}
.calendar-item[data-entfaellt] .kal-text strong{
  text-decoration:line-through; text-decoration-thickness:1.5px; color:var(--lotse-text-2);
}
.calendar-item[data-entfaellt]{ background:var(--lotse-flaeche-2); box-shadow:none; }
.calendar-item[data-entfaellt] .kal-datum{ background:var(--lotse-flaeche-3); color:var(--lotse-text-3); }
.kal-serienknopf{ white-space:nowrap; border-radius:999px; padding:9px 14px; min-height:40px; }

/* Das Serienfenster: eine Liste zum Ankreuzen, darunter drei klare Wege. */
.serien-panel{
  margin-top:18px; padding:20px; border-radius:var(--r3);
  background:var(--lotse-flaeche-2); box-shadow:var(--sh-1);
}
.serien-panel h3{ font-family:Georgia,"Times New Roman",serif; font-size:19px;
                  color:var(--lotse-ink); margin:0; font-weight:400; }
.serien-liste{ display:grid; gap:2px; margin:12px 0 16px; max-height:340px; overflow:auto; }
.serien-zeile{
  display:flex; align-items:center; gap:11px; padding:10px 12px; min-height:44px;
  border-radius:var(--r1); background:var(--lotse-flaeche); font-size:14px;
  font-weight:500; color:var(--lotse-text); cursor:pointer;
}
.serien-zeile:hover{ background:var(--k-t05); box-shadow:var(--sh-1); }
.serien-zeile input{ width:19px; height:19px; flex:0 0 19px; accent-color:var(--lotse-teal); }
.serien-zeile.entfaellt{ color:var(--lotse-text-3); text-decoration:line-through; }
.serien-grund{ display:block; margin-bottom:14px; }
.serien-grund span{ display:block; margin-bottom:6px; }
.serien-aktionen{ display:flex; gap:10px; flex-wrap:wrap; }
.serien-aktionen button{ min-height:44px; }
@media(max-width:720px){
  .serien-aktionen{ display:grid; }
  .serien-aktionen button{ width:100%; }
  .kal-serienknopf{ grid-column:2; justify-self:start; }
}

/* Vergangenes tritt zurück, ohne zu verschwinden: gedämpfte Marke,
   ruhigerer Titel – aber weiterhin voll lesbar und anklickbar. */
.calendar-item[data-vergangen]{ background:var(--lotse-flaeche-2); box-shadow:none; }
.calendar-item[data-vergangen] .kal-datum{ background:var(--lotse-flaeche-3); color:var(--lotse-text-2); }
.calendar-item[data-vergangen] .kal-text strong{ color:var(--lotse-text-2); font-weight:600; }

.kal-text{ min-width:0; display:grid; gap:3px; }
.kal-text strong{ font-size:15px; font-weight:700; color:var(--lotse-ink); }
.kal-text span{ font-size:12.5px; color:var(--lotse-text-2); }

/* Kleine Bildschirme: die Datumsmarke bleibt, der Rest bricht darunter um. */
@media(max-width:720px){
  .calendar-item{ grid-template-columns:auto minmax(0,1fr); gap:6px 13px;
                  align-items:start; padding:12px; }
  .kal-datum{ grid-row:1 / span 2; }            /* Marke trägt beide Zeilen */
  .calendar-item .status-chip{ grid-column:2; justify-self:start; }
  .kal-datum{ width:52px; min-height:52px; }
  .kal-tag{ font-size:21px; }
  .calendar-surface .panel-head{ flex-wrap:wrap; }
  .calendar-surface .panel-head button{ width:100%; min-height:44px; }
}

/* Felder */
select,input,textarea{
  border-radius:var(--r1); border:1px solid var(--lotse-linie); background:var(--lotse-flaeche-2);
  transition:border-color .15s var(--lotse-ease), box-shadow .15s var(--lotse-ease);
}
select:focus,input:focus,textarea:focus{ border-color:var(--lotse-teal); box-shadow:0 0 0 4px rgba(13,119,107,.14); }
label{ color:var(--lotse-text-2); }
:focus-visible{ outline:3px solid rgba(13,119,107,.45); outline-offset:2px; }

/* Bewegung nur, wo sie hilft – und gar nicht, wenn sie stört */
@media (prefers-reduced-motion:reduce){ *{ transition-duration:.01ms !important; animation-duration:.01ms !important; } }

/* ─── Kleine Bildschirme: echte Anpassung, keine Verkleinerung ─── */
@media(max-width:900px){
  .bereichswahl{ order:-1; }
}
@media(max-width:720px){
  /* Dieselbe Aufhellung auf dem Telefon: die untere Leiste ist dieselbe
     Navigation, nur gedreht. Sie bekommt die Flaeche der Foundation und
     eine Kante nach oben statt eines dunklen Balkens. */
  .sidebar{ background:var(--k-f07); backdrop-filter:blur(18px);
            border-right:0; border-top:1px solid var(--k-l05);
            height:auto; padding:9px 10px 10px; }
  /* Korrektur zu Schritt 1: der Arbeitsbereich war auf dem Smartphone
     ausgeblendet – und damit gar nicht mehr wählbar. Er steht jetzt als
     erste Zeile über der unteren Leiste, in Daumenreichweite. */
  .bereichswahl{ display:block; margin:0 0 8px; padding:0; border:0; background:transparent; }
  .bereichswahl > label{ display:none; }
  .bereichswahl select{ min-height:42px; font-size:14px; }
  .main-content{ padding-bottom:170px; }

  /* Die untere Leiste ist eine Spalte: Bereich oben, dann die Wege.
     Neun Wege passen nicht nebeneinander auf ein Telefon – also stehen sie
     in einer wischbaren Zeile statt in einem Raster, in dem die Wörter
     mittendrin umbrechen. */
  .sidebar{ display:flex; flex-direction:column; gap:0; }
  .bereichswahl{ order:-1; }
  .nav-list{ display:flex; gap:6px; overflow-x:auto; scrollbar-width:none;
             padding:2px 0 4px; scroll-snap-type:x proximity; }
  .nav-list::-webkit-scrollbar{ display:none; }
  .nav-item,.nav-item.active{
    flex:0 0 auto; display:flex; flex-direction:row; align-items:center; gap:0;
    white-space:nowrap; padding:10px 14px; min-height:44px; font-size:12.5px;
    border-radius:999px; justify-items:start; scroll-snap-align:start;
  }
  .nav-glyph{ display:none; }   /* die laufende Nummer hilft mobil nicht */

  /* E-11 · die Gruppen aus der Seitenleiste haben in der wischbaren Zeile
     keinen Platz. `display:contents` laesst die Knoepfe wieder direkte Kinder
     der Zeile werden, damit sie sich verhalten wie vorher — die Reihenfolge
     bleibt dieselbe, nur die Ueberschriften fallen weg.
     `[hidden]` ausdruecklich: `display:contents` schlaegt sonst das
     Ausblenden des Browsers, und eine ausgeblendete Gruppe stuende hier
     weiter da. */
  .nav-group{ display:contents; }
  .nav-group[hidden]{ display:none; }
  .nav-group-title{ display:none; }

  /* BEFUND vom 20.08.2026 (V-6, PO-Frage 6 D): die untere Leiste war rechts
     abgeschnitten. Nachgezaehlt ist es schlimmer als es aussah: SECHZEHN
     Navigationspunkte in einem Raster mit sechs Spalten ergeben drei Zeilen —
     und die Leiste ist 70 px hoch. Sichtbar war die erste Zeile. ZEHN Ziele
     waren auf dem Telefon nicht erreichbar, nicht nur unschoen beschnitten.

     Statt Ziele zu verstecken oder die Leiste wachsen zu lassen: eine Zeile,
     die man schiebt. Alles bleibt erreichbar, die Hoehe bleibt, und die
     Beschriftung wird nicht mehr mitten im Wort abgeschnitten. */
  .nav-list{ display:flex; grid-template-columns:none; overflow-x:auto;
             overflow-y:hidden; scroll-snap-type:x proximity;
             -webkit-overflow-scrolling:touch; scrollbar-width:none; }
  .nav-list::-webkit-scrollbar{ display:none; }
  .nav-item, .nav-item.active{ flex:0 0 auto; min-width:76px;
                               scroll-snap-align:start; white-space:nowrap; }

  /* Kopfzeile: der Pfad bleibt einzeilig, die Knöpfe rutschen darunter,
     statt sich zu überlagern. */
  .topbar{ display:grid; grid-template-columns:minmax(0,1fr); gap:10px; margin-bottom:14px; }
  .topbar-context{ min-width:0; }
  .context-path{ font-size:13px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
  .topbar-actions{ display:flex; flex-wrap:wrap; gap:8px; align-items:center; }
  .topbar-actions .angemeldet{ order:-1; flex:1 1 100%; font-size:12px; }
  .topbar-actions button{ flex:1 1 auto; min-height:44px; padding:10px 12px; font-size:13px; }

  .context-panel{ padding:18px; }
  .context-panel h1{ font-size:24px; }
}

/* ─── Quellen (U-1) ───────────────────────────────────────────────────────
   Die Reihenfolge im Bild ist die Reihenfolge im Kopf: erst die Datei,
   dann was die Anwendung vermutet, dann die Entscheidung des Menschen.
   Der Zustand steht als Wort da, nicht nur als Farbe. */
.quellen-ablage{
  display:grid; grid-template-columns:minmax(0,1.2fr) minmax(0,1fr) auto;
  gap:12px; align-items:end; margin-bottom:18px;
}
.quellen-ablage .subtle-status{ grid-column:1/-1; margin:0; }
.quellen-feld{ display:block; min-width:0; }
.quellen-feld span{ display:block; margin-bottom:6px; }
.quellen-ablage button{ min-height:44px; }

.quellen-datei{ display:flex; align-items:center; gap:12px; flex-wrap:wrap; cursor:pointer; }
/* Das echte Feld bleibt bedienbar, es sieht nur nicht mehr englisch aus. */
.quellen-datei input[type=file]{ position:absolute; width:1px; height:1px; opacity:0;
  overflow:hidden; clip:rect(0 0 0 0); }
.quellen-datei-knopf{
  display:inline-flex; align-items:center; min-height:44px; padding:10px 16px;
  border-radius:var(--r1); background:var(--lotse-akzent-weich);
  color:var(--lotse-akzent-text); font-size:13.5px; font-weight:700; white-space:nowrap;
}
.quellen-datei input[type=file]:focus-visible + .quellen-datei-knopf{
  outline:2px solid var(--lotse-teal); outline-offset:2px;
}
.quellen-datei-name{ font-size:13px; font-weight:500; color:var(--lotse-text-2);
  min-width:0; overflow:hidden; text-overflow:ellipsis; }

.quellen-liste{ display:grid; gap:8px; }
.quellen-zeile{
  display:grid; grid-template-columns:minmax(0,1fr) auto; gap:14px; align-items:center;
  padding:14px 16px; border-radius:var(--r2); background:var(--lotse-flaeche);
  box-shadow:var(--sh-1);
}
/* Zustand über Form UND Wort, nicht über Farbe allein. */
.quellen-zeile.offen{ border-left:4px solid var(--k-t10); }        /* wie .status-chip.warnung */
.quellen-zeile.frei{ border-left:4px solid var(--lotse-teal); }
.quellen-zeile.gesperrt{ border-left:4px solid var(--k-t09); background:var(--lotse-flaeche-2); }  /* wie .status-chip.deny */
.quellen-haupt{ min-width:0; }
.quellen-haupt strong{ display:block; font-size:15px; color:var(--lotse-ink);
  overflow:hidden; text-overflow:ellipsis; }
.quellen-haupt span{ display:block; font-size:12.5px; color:var(--lotse-text-2); margin-top:3px; }
.quellen-recht{ font-weight:600; }
.quellen-zustand{ display:flex; align-items:center; gap:12px; flex-wrap:wrap; justify-content:flex-end; }
.quellen-zustand .zustand-wort{ font-size:12.5px; font-weight:650; color:var(--lotse-text-2); }
.quellen-zustand button{ min-height:44px; }

.quellen-freigabe{
  margin-top:18px; padding:20px; border-radius:var(--r3);
  background:var(--lotse-flaeche-2); box-shadow:var(--sh-1);
}
.quellen-freigabe h3{ font-family:Georgia,"Times New Roman",serif; font-size:19px;
  color:var(--lotse-ink); margin:0; font-weight:400; }
.quellen-formular{ display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:12px; margin:14px 0 16px; }
.quellen-aktionen{ display:flex; align-items:center; gap:14px; flex-wrap:wrap; }
.quellen-aktionen button{ min-height:44px; }

/* Tablet: die Ablage darf nicht dreispaltig zerbrechen. */
@media(max-width:1050px){
  .quellen-ablage{ grid-template-columns:minmax(0,1fr) minmax(0,1fr); }
  .quellen-ablage button{ grid-column:1/-1; }
}
/* Telefon: alles untereinander, Knöpfe in Daumenbreite. */
@media(max-width:720px){
  .quellen-ablage{ grid-template-columns:1fr; }
  .quellen-ablage button{ width:100%; }
  .quellen-formular{ grid-template-columns:1fr; }
  .quellen-zeile{ grid-template-columns:1fr; }
  .quellen-zustand{ justify-content:flex-start; }
  .quellen-zustand button{ width:100%; }
  .quellen-aktionen{ display:grid; }
  .quellen-aktionen button{ width:100%; }
}
@media(max-width:430px){
  .quellen-freigabe{ padding:16px; }
  .quellen-freigabe .panel-head{ display:grid; grid-template-columns:1fr; }
  .quellen-freigabe .panel-head button{ width:100%; }
}

/* ─── Räume am Termin (K-4) ────────────────────────────────────────────────
   Der Raum steht als Wort in der Terminzeile, die Doppelbelegung ebenfalls.
   Farbe allein trägt hier nichts – wer sie nicht unterscheidet, muss die
   Warnung trotzdem lesen können. */
.kal-raum{ display:block; font-size:12.5px; color:var(--lotse-text-2); margin-top:3px; }
.kal-raum-konflikt{ font-weight:700; color:var(--k-t10); }
.calendar-item[data-raumkonflikt] .kal-datum{ box-shadow:inset 0 0 0 2px var(--k-t10); }
.kal-knoepfe{ display:flex; align-items:center; gap:8px; flex-wrap:wrap; justify-content:flex-end; }
.kal-knoepfe button{ min-height:44px; }

.raum-panel{
  margin-top:18px; padding:20px; border-radius:var(--r3);
  background:var(--lotse-flaeche-2); box-shadow:var(--sh-1);
}
.raum-panel h3{ font-family:Georgia,"Times New Roman",serif; font-size:19px;
  color:var(--lotse-ink); margin:0; font-weight:400; }
.raum-feld{ display:block; margin:14px 0; }
.raum-feld span{ display:block; margin-bottom:6px; }
.raum-umfang{ border:0; margin:0 0 14px; padding:0; display:grid; gap:8px; }
.raum-umfang legend{ padding:0; margin-bottom:6px; font-size:12px; font-weight:750;
  color:var(--lotse-text-2); }
.raum-umfang label{ display:flex; align-items:center; gap:10px; min-height:44px;
  padding:0 12px; border-radius:var(--r1); background:var(--lotse-flaeche);
  font-size:14px; font-weight:500; cursor:pointer; }
.raum-umfang input{ width:19px; height:19px; flex:0 0 19px; accent-color:var(--lotse-teal); }
.raum-aktionen{ display:flex; gap:10px; flex-wrap:wrap; }
.raum-aktionen button{ min-height:44px; }

@media(max-width:1050px){
  .kal-knoepfe{ justify-content:flex-start; }
}
@media(max-width:720px){
  /* Nebeneinander statt untereinander: die Terminzeile darf durch die
     Knöpfe nicht in die Höhe wachsen. Mit Raum UND Veröffentlichung sind es
     drei Bedienstellen – die brechen sonst auf drei Zeilen um. Deshalb eine
     einzige, wischbare Reihe. */
  .kal-knoepfe{ grid-column:2; justify-content:flex-start; gap:6px;
                flex-wrap:nowrap; overflow-x:auto; scrollbar-width:none;
                -webkit-overflow-scrolling:touch; max-width:100%; }
  .kal-knoepfe::-webkit-scrollbar{ display:none; }
  .kal-knoepfe>*{ flex:0 0 auto; }
  .kal-knoepfe button{ padding:8px 12px; font-size:12.5px; min-height:40px; white-space:nowrap; }
  .raum-aktionen{ display:grid; }
  .raum-aktionen button{ width:100%; }
}
@media(max-width:430px){
  .raum-panel{ padding:16px; }
  .raum-panel .panel-head{ display:grid; grid-template-columns:1fr; }
  .raum-panel .panel-head button{ width:100%; }
}

/* ─── Änderungsverlauf (R-12 / A-43) ───────────────────────────────────────
   Arbeit und Sicherheit sind zwei verschiedene Dinge – das steht als Wort
   daneben, nicht nur als Farbe. */
.verlauf-titel{ font-family:Georgia,"Times New Roman",serif; font-size:18px;
  color:var(--lotse-ink); font-weight:400; margin:20px 0 6px; }
.verlauf-liste{ display:grid; gap:6px; margin:12px 0 16px; }
.verlauf-zeile{
  display:grid; grid-template-columns:minmax(0,1fr) auto; gap:12px; align-items:center;
  padding:11px 14px; border-radius:var(--r1); background:var(--lotse-flaeche); box-shadow:var(--sh-1);
}
.verlauf-zeile.sicherheit{ border-left:3px solid var(--lotse-marke); }
.verlauf-zeile.arbeit{ border-left:3px solid var(--lotse-teal); }
.verlauf-haupt{ min-width:0; }
.verlauf-haupt strong{ display:block; font-size:14px; color:var(--lotse-ink); }
.verlauf-haupt span{ display:block; font-size:12.5px; color:var(--lotse-text-2); margin-top:2px; }
.verlauf-ohne-namen{ font-style:italic; }
.verlauf-art{ font-size:11px; font-weight:750; letter-spacing:.04em; color:var(--lotse-text-3);
  white-space:nowrap; }
@media(max-width:720px){
  .verlauf-zeile{ grid-template-columns:1fr; }
  .verlauf-art{ justify-self:start; }
}
@media(max-width:430px){ .verlauf-zeile{ padding:10px 12px; } }

/* ─── Wiederholung im Dialog (A-33) ────────────────────────────────────────
   Was gleich entsteht, steht vorher im Klartext da. */
.wiederholung{ border:0; margin:0 0 12px; padding:14px; border-radius:var(--r2);
  background:var(--lotse-flaeche-2); display:grid; gap:10px; }
.wiederholung[hidden]{ display:none; }
.wiederholung legend{ padding:0 0 4px; font-size:12px; font-weight:750; color:var(--lotse-text-2); }
.wiederholung .dialog-note{ margin:0; }
@media(max-width:430px){ .wiederholung{ padding:12px; } .wiederholung .form-grid{ grid-template-columns:1fr; } }

/* ─── Veröffentlichung (R-8) ───────────────────────────────────────────────
   Was nach außen ginge, steht vorher da – nicht erst danach. */
.veroeff-panel{ margin-top:18px; padding:20px; border-radius:var(--r3);
  background:var(--lotse-flaeche-2); box-shadow:var(--sh-1); }
.veroeff-panel h3{ font-family:Georgia,"Times New Roman",serif; font-size:19px;
  color:var(--lotse-ink); margin:0; font-weight:400; }
.veroeff-zustand{ margin:12px 0 14px; padding:12px 14px; border-radius:var(--r1);
  background:var(--lotse-flaeche); font-size:14px; font-weight:600; color:var(--lotse-ink); }
.veroeff-aktionen{ display:flex; gap:10px; flex-wrap:wrap; }
.veroeff-aktionen button{ min-height:44px; }
@media(max-width:720px){ .veroeff-aktionen{ display:grid; } .veroeff-aktionen button{ width:100%; } }
@media(max-width:430px){ .veroeff-panel{ padding:16px; }
  .veroeff-panel .panel-head{ display:grid; grid-template-columns:1fr; }
  .veroeff-panel .panel-head button{ width:100%; } }

/* ─── Befehlszeile (A-30) ──────────────────────────────────────────────────
   Erst zeigen, dann tun. Der Ausführen-Knopf sieht aus wie das, was er ist. */
.befehl-zeile{ display:grid; gap:10px; padding:16px; margin:0 0 16px;
  border-radius:var(--r2); background:var(--lotse-flaeche-2); }
.befehl-feld{ display:block; }
.befehl-feld span{ display:block; margin-bottom:6px; font-size:12px; font-weight:750;
  color:var(--lotse-text-2); }
.befehl-zeile .dialog-note{ margin:0; }
.befehl-zeile button{ min-height:44px; justify-self:start; }
.befehl-ergebnis{ padding:14px; border-radius:var(--r1); background:var(--lotse-flaeche);
  box-shadow:var(--sh-1); display:grid; gap:12px; }
.befehl-ergebnis[hidden]{ display:none; }
.befehl-ergebnis p{ margin:0; font-size:14.5px; font-weight:600; color:var(--lotse-ink); }
.befehl-aktionen{ display:flex; gap:10px; flex-wrap:wrap; }
.befehl-aktionen button{ min-height:44px; }
@media(max-width:720px){
  .befehl-zeile button{ width:100%; justify-self:stretch; }
  .befehl-aktionen{ display:grid; }
}

/* Der Dialog „Neu erstellen" schloss sich auch dann, wenn der Server abgelehnt
   hatte – die Ablehnung kam mit HTTP 200 im Rumpf und ging unter. Deshalb eine
   eigene, deutlich sichtbare Zeile im Dialog selbst. */
.create-fehler{
  margin:0 0 var(--s3);padding:var(--s3) var(--s4);
  border-radius:var(--r2);
  background:var(--warn-weich,var(--k-f15));
  border-left:4px solid var(--warn,var(--k-l03));
  color:var(--warn-text,var(--k-t11));
  font-size:.94rem;line-height:1.45;
}

/* ── A-44 Etappe 6 · Teilnehmende am Termin ──────────────────────────────
   Die Liste haengt am Fachobjekt, nicht in einem eigenen Menuepunkt. Sie nutzt
   dieselbe Panel-Form wie Raum und Veroeffentlichung, damit am Termin nicht
   drei verschiedene Formensprachen stehen. */
.teiln-liste{ display:grid; gap:12px; margin:14px 0; }
.teiln-eintrag{
  padding:14px 16px; border-radius:var(--r2);
  background:var(--lotse-flaeche); box-shadow:var(--sh-1);
  display:grid; gap:8px;
}
.teiln-kopf{ display:flex; align-items:baseline; gap:10px; flex-wrap:wrap; }
.teiln-kopf strong{ font-size:15.5px; }
.teiln-kopf span{ font-size:13px; color:var(--lotse-text-2); }
.teiln-notfall{ font-size:13px; color:var(--lotse-text-2); }
.teiln-marken{ display:flex; gap:8px; flex-wrap:wrap; }
.teiln-knoepfe{ display:flex; gap:8px; flex-wrap:wrap; }
.teiln-knoepfe button{ min-height:44px; }

/* Gesundheitsangaben sind auch optisch nicht dasselbe wie ein Name.
   Der Rand ist keine Dekoration: er ist die dritte Kennzeichnung neben
   Farbe und Wort, damit der Unterschied nicht allein an der Farbe haengt. */
.teiln-gesundheit{
  margin:0; padding:10px 14px 10px 30px; border-radius:var(--r1);
  border-left:4px solid var(--warn,var(--k-l03));
  background:var(--warn-weich,var(--k-f15));
  display:grid; gap:6px; font-size:14px; line-height:1.45;
}
.teiln-klasse{ font-size:11.5px; font-weight:750; color:var(--lotse-text-2);
  letter-spacing:.04em; }
.teiln-gesundheit-schalter{ display:grid; gap:8px; margin:14px 0; }
.teiln-gesundheit-schalter button{ min-height:44px; justify-self:start; }
.teiln-neu{ border:0; margin:14px 0 0; padding:0; display:grid; gap:10px; }
.teiln-neu[hidden]{ display:none; }
.teiln-neu legend{ padding:0; margin-bottom:4px; font-size:12px; font-weight:750;
  color:var(--lotse-text-2); }
.teiln-neu label{ display:block; }
.teiln-neu label span{ display:block; margin-bottom:6px; font-size:13px; }
.teiln-neu input[type=text]{ width:100%; min-height:44px; }
.teiln-einwilligung{ display:flex !important; align-items:center; gap:10px;
  min-height:44px; padding:0 12px; border-radius:var(--r1);
  background:var(--lotse-flaeche); font-size:14px; cursor:pointer; }
.teiln-einwilligung input{ width:19px; height:19px; flex:0 0 19px; accent-color:var(--lotse-teal); }
.teiln-neu .primary-button{ min-height:44px; justify-self:start; }

@media(max-width:720px){
  .teiln-knoepfe{ display:grid; }
  .teiln-knoepfe button{ width:100%; }
  .teiln-neu .primary-button{ width:100%; justify-self:stretch; }
}

/* ── A-44 Etappe 5 · Einwilligungsblatt ──────────────────────────────────
   C-3: Druckansicht, die PDF erzeugt der Browser. Auf dem Bildschirm liegt
   das Blatt ausserhalb des Sichtfelds, damit beim Drucken nichts aufblitzt;
   im Druck ist es das einzige, was uebrig bleibt. */
#druckEinwilligung{ position:absolute; left:-10000px; top:0; width:180mm;
  color:var(--k-t12); background:var(--k-t05); font-size:11pt; line-height:1.5; }
#druckEinwilligung[hidden]{ display:none; }
.druck-blatt h1{ font-family:Georgia,"Times New Roman",serif; font-size:17pt;
  font-weight:400; margin:0 0 4mm; }
.druck-gemeinde{ margin:0 0 8mm; font-weight:700; }
.druck-daten{ display:grid; grid-template-columns:55mm 1fr; gap:2mm 4mm; margin:0 0 8mm; }
.druck-daten dt{ font-weight:700; }
.druck-daten dd{ margin:0; }
.druck-blatt ul{ margin:0 0 6mm; padding-left:6mm; }
.druck-unterschrift{ margin-top:18mm; display:grid; grid-template-columns:1fr 1fr; gap:10mm; }
.druck-unterschrift p{ margin:0; padding-top:2mm; border-top:1px solid var(--k-t12); font-size:9.5pt; }

@media print{
  body.drucken > *:not(#druckEinwilligung){ display:none !important; }
  body.drucken #druckEinwilligung{ position:static; left:0; width:auto; display:block; }
  @page{ margin:20mm; }
}
.teiln-ges-neu{ display:flex; gap:8px; flex-wrap:wrap; align-items:center; margin-top:4px; }
.teiln-ges-neu select,.teiln-ges-neu input{ min-height:44px; }
.teiln-ges-neu input{ flex:1 1 180px; }
@media(max-width:720px){ .teiln-ges-neu{ display:grid; } .teiln-ges-neu button{ width:100%; } }

/* ═══════════════════════════════════════════════════════════════════════════
 * WS01 · Die Vorgangsleiste
 *
 * Sie liegt unten und über allem, weil sie zu keiner Ansicht gehört, sondern
 * zur Person. Auf dem Telefon ist sie eine wischbare Zeile — nicht eine
 * verkleinerte Zeile, sondern eine, die auch mit dem Daumen zu treffen ist:
 * jede Fläche mindestens 44px hoch.
 *
 * Der Zustand steht nie nur in der Farbe. Angeheftet trägt zusätzlich ein
 * Zeichen und ein Wort im Titel; ein maskierter Vorgang trägt das Wort
 * „Geschützter Vorgang" — kein graues Feld, das man deuten müsste.
 *
 * Der Inhalt bekommt unten Platz, damit die Leiste nichts verdeckt. Das
 * greift nur, wenn sie wirklich da ist.
 * ═══════════════════════════════════════════════════════════════════════════ */
.vorgangsleiste{
  position:fixed; left:0; right:0; bottom:0; z-index:40;
  background:rgba(255,255,255,.93); backdrop-filter:blur(10px);
  border-top:1px solid var(--lotse-linie); box-shadow:var(--sh-3);
  padding:8px max(10px,env(safe-area-inset-left)) calc(8px + env(safe-area-inset-bottom)) max(10px,env(safe-area-inset-right));
}
.vorgangsleiste[hidden]{ display:none !important; }
/* Die Leiste traegt seit dem 20.08.2026 bis zu zwei Zeilen je Chip und eine
   Zeile „Zuletzt geschlossen" darunter. Der Platz darunter waechst mit —
   zu wenig Platz waere eine Ueberlagerung, zu viel nur Luft. */
body.hat-vorgangsleiste .main-content{ padding-bottom:124px; }
/* ── BEFUND vom 20.08.2026, gefunden im Browserlauf ───────────────────────
 *
 * Der Inhalt bekam Platz, die SEITENLEISTE nicht. Sobald ein Arbeitstisch
 * offen war, lag die Vorgangsleiste ueber ihrem unteren Ende — und damit
 * ueber „Arbeitsbereiche verwalten". Der Knopf war sichtbar, nicht verdeckt
 * grau, nicht ausgeblendet: er nahm nur keinen Klick mehr an.
 *
 * Gemessen: `elementFromPoint` in der Mitte des Knopfes lieferte
 * `NAV#vorgangsleiste`. Das ist derselbe Fehlertyp wie die zwei
 * uebereinanderliegenden Programmpunkte — und ein Mensch haette hier
 * dreimal getippt und dann aufgehoert.
 */
/* Die Seitenleiste ist auf dem Schreibtisch selbst eine Spalte mit eigenem
   Rollbereich (`height:calc(100vh - 22px); overflow-y:auto`). Ein Polster
   unten half deshalb NICHT: es machte den Rollbereich laenger, aber das, was
   gerade sichtbar war, blieb an derselben Stelle — unter der Leiste. Gemessen
   im Browserlauf, nachdem genau dieser erste Versuch fehlschlug.
   Richtig ist, die SICHTBARE Hoehe zu kuerzen: dann endet die Seitenleiste
   ueber der Leiste, und ihr Rollbereich reicht bis dorthin. Die Hoehe der
   Leiste wird gemessen (`app.js`) und nicht geschrieben — sie traegt mal eine
   Zeile, mal zwei, mal eine Hinweiszeile dazu. */
@media(min-width:721px){
  body.hat-vorgangsleiste .sidebar{
    height:calc(100vh - 22px - var(--vorgangsleiste-hoehe, 124px));
    padding-bottom:16px;
  }
}
.vorgangsleiste-rolle{
  display:flex; gap:8px; align-items:stretch;
  overflow-x:auto; overflow-y:hidden; scroll-snap-type:x proximity;
  -webkit-overflow-scrolling:touch; scrollbar-width:thin;
}
.vorgang-chip{
  display:inline-flex; align-items:center; gap:8px; flex:0 0 auto;
  min-height:44px; padding:0 6px 0 12px; border-radius:var(--r3);
  background:var(--lotse-flaeche-2); border:1px solid var(--lotse-linie);
  scroll-snap-align:start; transition:background .18s var(--lotse-ease),border-color .18s var(--lotse-ease);
}
.vorgang-chip:hover{ background:var(--lotse-akzent-weich); border-color:var(--k-l04); }
.vorgang-chip.aktiv{ background:var(--lotse-akzent-weich); border-color:var(--lotse-teal); }
.vorgang-chip.fest{ background:var(--lotse-marke); border-color:var(--lotse-marke); }
.vorgang-chip.fest .vorgang-name{ color:var(--k-t13); }
.vorgang-chip.maskiert{ border-style:dashed; }
.vorgang-name{
  display:inline-flex; align-items:center; gap:7px; min-height:44px;
  padding:0 2px; border:0; background:none; cursor:pointer;
  font:inherit; font-size:13.5px; font-weight:650; color:var(--lotse-text);
  max-width:46vw; white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
}
.vorgang-zeichen{ font-size:12px; line-height:1; opacity:.85; }
/* §15 · „Gruppe + Arbeitsobjekt verstaendlich im Titel" und „sichtbarer
   letzter Arbeitsstand". Zwei Zeilen im Chip: oben Bereich und Name, darunter
   klein der Stand. Auf dem Telefon entfaellt die zweite Zeile — dort ist die
   Leiste eine Bedienzeile und kein Bericht; die Angabe bleibt im Titel des
   Knopfes und damit fuer Vorlesewerkzeuge erhalten. */
.vorgang-text{ display:inline-flex; flex-direction:column; align-items:flex-start;
  gap:1px; min-width:0; max-width:100%; }
.vorgang-zeile{ display:block; max-width:100%;
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.vorgang-bereich{ font-weight:600; color:var(--lotse-text-3); }
.vorgang-stand{ display:block; max-width:100%; font-size:11px; font-weight:500;
  line-height:1.15; color:var(--lotse-text-3);
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
/* Zuletzt geschlossen · der Einstieg zu „wieder oeffnen" (§15). */
.vorgangsleiste-archiv{ display:flex; gap:6px; align-items:center; flex-wrap:nowrap;
  overflow-x:auto; margin-top:6px; }
.vorgangsleiste-archiv[hidden]{ display:none !important; }
.vorgang-archiv-marke{ flex:0 0 auto; font-size:11px; font-weight:650;
  color:var(--lotse-text-3); text-transform:uppercase; letter-spacing:.04em; }
.vorgang-wieder{ flex:0 0 auto; min-height:32px; padding:0 10px; border-radius:var(--r1);
  border:1px dashed var(--lotse-linie); background:none; cursor:pointer;
  font:inherit; font-size:12px; font-weight:600; color:var(--lotse-text-2);
  max-width:40vw; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.vorgang-wieder:hover{ background:var(--lotse-akzent-weich); border-style:solid; }
.vorgang-weg{
  display:inline-flex; align-items:center; justify-content:center;
  width:32px; min-height:44px; border:0; background:none; cursor:pointer;
  font-size:16px; line-height:1; color:var(--lotse-text-2); border-radius:var(--r1);
}
.vorgang-weg:hover{ color:var(--k-t14); background:rgba(163,52,43,.08); }
.vorgangsleiste-hinweis{
  flex:0 0 auto; align-self:center; padding:0 10px;
  font-size:12px; font-weight:600; color:var(--lotse-text-3);
}
/* Auf dem Telefon wird die Seitenleiste selbst zur festen Leiste am unteren
   Rand (styles.css, 70px; lotse.css setzt 78px). Im Browserlauf am
   13.08.2026 lag die Vorgangsleiste darueber und verdeckte die Wege — man
   kam aus einem Vorgang nicht mehr heraus. Sie steht deshalb UEBER der
   Navigation, nicht auf ihr: die Wege bleiben immer erreichbar.
   Das ist keine Verkleinerung, sondern eine andere Anordnung. */
@media(max-width:720px){
  /* BEFUND vom 20.08.2026 (Browserlauf „Arbeitstisch"): die 78px waren eine
     GESCHRIEBENE Zahl, die untere Wegeleiste ist auf einem 390px-Geraet
     tatsaechlich 126px hoch. Die Leiste lag damit 48px zu tief und ueber den
     Wegen. Genau derselbe Fehler wie am 20.08.2026 bei RP-5: eine gezaehlte
     Zahl war nie die Regel. `--untere-leiste` wird in `app.js` aus der
     wirklichen Hoehe gesetzt. */
  .vorgangsleiste{ bottom:var(--untere-leiste, 78px); box-shadow:var(--sh-2);
    padding-bottom:8px; padding-top:8px; }
  body.hat-vorgangsleiste .main-content{ padding-bottom:196px; }
  /* Auf dem Telefon bekommt die Seitenleiste ausdruecklich KEINEN Platz nach
     unten: sie IST hier die untere Leiste. Jeder Abstand zieht sie in die
     Hoehe, und die Vorgangsleiste steht ueber ihr — sie waere damit selbst
     nach oben gewandert, bis sie wieder etwas verdeckt. Gemessen im
     Browserlauf, unmittelbar nachdem die Regel fuer den Schreibtisch
     entstand: die Regel gilt nur ab 721px (siehe oben). */
  .vorgang-name{ max-width:52vw; }
  .vorgang-stand{ display:none; }
  .vorgang-wieder{ max-width:55vw; }
}
@media(max-width:430px){
  .vorgang-name{ max-width:58vw; font-size:13px; }
  .vorgangsleiste{ padding-left:8px; padding-right:8px; }
}
@media print{ .vorgangsleiste{ display:none !important; } }

/* ═══════════════════════════════════════════════════════════════════════════
 * WS02 · Übersicht anpassen (Paket §6)
 *
 * Zwei Dinge, die hier bewusst so aussehen:
 *
 *   Ein Pflichtabschnitt bekommt kein ausgegrautes Kästchen ohne Erklärung.
 *   Er trägt ein Wort („immer sichtbar") und den Grund darunter. Ein
 *   gesperrter Schalter ohne Begründung wirkt wie ein Fehler und man klickt
 *   dagegen.
 *
 *   Der Zustand steht nie nur in der Farbe: ausgeblendet heißt blasser UND
 *   der Schalter ist aus UND es steht „ausgeblendet" dabei.
 * ═══════════════════════════════════════════════════════════════════════════ */
.abschnitte-panel{
  margin-top:14px; border-radius:var(--r2); border:1px solid var(--lotse-linie);
  background:var(--lotse-flaeche); box-shadow:var(--sh-1); padding:0;
}
.abschnitte-panel > summary{
  cursor:pointer; list-style:none; min-height:44px; display:flex; align-items:center;
  padding:0 18px; font-size:13.5px; font-weight:750; color:var(--lotse-text-2);
  border-radius:var(--r2);
}
.abschnitte-panel > summary::-webkit-details-marker{ display:none; }
.abschnitte-panel > summary::before{ content:'⚙'; margin-right:9px; opacity:.7; }
.abschnitte-panel[open] > summary{ border-bottom:1px solid var(--lotse-linie-2); border-radius:var(--r2) var(--r2) 0 0; }
.abschnitte-panel > *:not(summary){ margin:0 18px; }
.abschnitte-panel > .projection-note{ margin-top:14px; }
.abschnitte-liste{ display:grid; gap:8px; margin-top:12px; }
.abschnitt-zeile{
  display:grid; grid-template-columns:minmax(0,1fr) auto auto; align-items:center; gap:10px;
  min-height:44px; padding:9px 12px; border-radius:var(--r1);
  background:var(--lotse-flaeche-2); border:1px solid var(--lotse-linie-2);
}
.abschnitt-zeile.aus{ opacity:.62; border-style:dashed; }
.abschnitt-kopf{ min-width:0; }
.abschnitt-kopf strong{ display:block; font-size:13.5px; font-weight:700; }
.abschnitt-kopf span{ display:block; font-size:11.5px; color:var(--lotse-text-3); line-height:1.45; margin-top:2px; }
.abschnitt-marke{
  flex:0 0 auto; font-size:10.5px; font-weight:800; letter-spacing:.04em;
  border-radius:999px; padding:5px 9px; background:var(--lotse-akzent-weich); color:var(--lotse-akzent-text);
}
.abschnitt-marke.aus{ background:var(--k-f16); color:var(--k-t15); }
.abschnitt-schalter{
  display:inline-flex; align-items:center; gap:8px; min-height:44px;
  padding:0 10px; border:1px solid var(--lotse-linie); border-radius:var(--r1);
  background:var(--lotse-flaeche); cursor:pointer; font-size:12.5px; font-weight:700;
}
.abschnitt-schalter[aria-disabled="true"]{ cursor:not-allowed; opacity:.75; background:var(--lotse-flaeche-3); }
.abschnitt-ordnen{ display:inline-flex; gap:4px; }
.abschnitt-ordnen button{
  width:38px; min-height:44px; border:1px solid var(--lotse-linie); border-radius:var(--r1);
  background:var(--lotse-flaeche); cursor:pointer; font-size:14px; color:var(--lotse-text-2);
}
.abschnitt-ordnen button:disabled{ opacity:.35; cursor:not-allowed; }
.abschnitte-fuss{
  display:flex; justify-content:space-between; align-items:center; gap:12px;
  flex-wrap:wrap; margin:14px 18px 16px;
}
.abschnitte-fuss .ghost-button{ min-height:44px; }
@media(max-width:720px){
  .abschnitt-zeile{ grid-template-columns:minmax(0,1fr); }
  .abschnitt-schalter,.abschnitt-ordnen{ width:100%; justify-content:center; }
  .abschnitt-ordnen button{ flex:1 1 auto; width:auto; }
  .abschnitte-fuss{ display:grid; }
  .abschnitte-fuss .ghost-button{ width:100%; }
}
@media print{ .abschnitte-panel{ display:none !important; } }

/* ═══════════════════════════════════════════════════════════════════════════
 * Kalender · Zeitraster für Tag und Woche, Jahresansicht
 *
 * Aufbau nach der Vorlage des Product Owners vom 13.08.2026. Die Farben
 * bleiben LotseDesign: der Balken trägt Petrol, nicht das Rot einer fremden
 * Anwendung. Ein abgesagter Termin ist nicht nur blasser, er ist auch
 * durchgestrichen — Zustand nie allein über die Farbe.
 *
 * Auf dem Telefon wird die Woche waagerecht gewischt statt gequetscht:
 * sieben Stundenspalten auf 390px trifft niemand mit dem Daumen. Der
 * Tageskopf führt in den Tag, und dort ist alles wieder lesbar.
 * ═══════════════════════════════════════════════════════════════════════════ */
.kal-steuerung{
  display:flex; align-items:center; justify-content:space-between; gap:14px;
  flex-wrap:wrap; margin:4px 0 14px;
}
.kal-periode{
  font-family:Georgia,"Times New Roman",serif; font-weight:400;
  font-size:29px; line-height:1.15; margin:0; color:var(--lotse-ink);
  letter-spacing:-.015em;
}
.kal-blaettern{ display:inline-flex; align-items:center; gap:6px; }
.kal-blaettern button{ min-height:44px; }
.kal-blaettern .ghost-button{ width:44px; padding:0; font-size:19px; line-height:1; }

.kal-zeitraster{ border:1px solid var(--lotse-linie); border-radius:var(--r2); overflow:hidden;
  background:var(--lotse-flaeche); }
.kal-zeitkopf{ display:grid; grid-template-columns:58px minmax(0,1fr);
  border-bottom:1px solid var(--lotse-linie); background:var(--lotse-flaeche-2); }
.kal-eckfeld{ border-right:1px solid var(--lotse-linie-2); }
.kal-tagkoepfe{ display:grid; grid-auto-flow:column; grid-auto-columns:minmax(0,1fr); }
.kal-tagkopf{
  display:grid; justify-items:center; gap:2px; padding:9px 4px; min-height:44px;
  border-left:1px solid var(--lotse-linie-2); cursor:pointer; background:none; }
.kal-tagkopf-wt{ font-size:11px; font-weight:750; color:var(--lotse-text-3);
  text-transform:uppercase; letter-spacing:.05em; }
.kal-tagkopf-zahl{ font-family:Georgia,serif; font-size:19px; color:var(--lotse-text); }
.kal-tagkopf.heute .kal-tagkopf-zahl{
  background:var(--lotse-teal); color:var(--k-t05); border-radius:999px;
  min-width:30px; height:30px; display:grid; place-items:center; font-size:16px; }

.kal-ganztag{ display:grid; grid-template-columns:58px minmax(0,1fr);
  border-bottom:1px solid var(--lotse-linie); background:var(--lotse-flaeche-2); }
.kal-ganztag-marke-links{ font-size:10.5px; font-weight:750; color:var(--lotse-text-3);
  padding:8px 6px; text-align:right; border-right:1px solid var(--lotse-linie-2); }
.kal-ganztag-zellen{ display:grid; grid-auto-flow:column; grid-auto-columns:minmax(0,1fr); }
.kal-ganztag-zelle{ display:grid; gap:3px; padding:5px 4px; align-content:start;
  border-left:1px solid var(--lotse-linie-2); min-height:34px; }
.kal-ganztag-marke{
  border:0; border-radius:7px; background:var(--lotse-akzent-weich); color:var(--lotse-akzent-text);
  font-size:11.5px; font-weight:700; text-align:left; padding:5px 7px; cursor:pointer;
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.kal-ganztag-marke.entfaellt{ text-decoration:line-through; opacity:.6; }

.kal-zeitkoerper{ display:grid; grid-template-columns:58px minmax(0,1fr);
  max-height:min(62vh,640px); overflow-y:auto; overflow-x:hidden; }
.kal-stundenleiste{ border-right:1px solid var(--lotse-linie-2); background:var(--lotse-flaeche-2); }
.kal-stunde{ position:relative; }
/* Die Uhrzeit steht UNTER ihrer Linie, nicht auf ihr. Im ersten Bildbeleg
   war die oberste Beschriftung halb abgeschnitten, weil sie über den Rand
   des Scrollbereichs ragte. Unter der Linie heißt außerdem das Richtige:
   „hier beginnt diese Stunde". */
.kal-stunde span{ position:absolute; top:3px; right:7px; font-size:10.5px;
  font-weight:700; color:var(--lotse-text-3); }
.kal-spalten{ display:grid; grid-auto-flow:column; grid-auto-columns:minmax(0,1fr); }
.kal-spalte{ position:relative; border-left:1px solid var(--lotse-linie-2); }
.kal-stundenlinie{ position:absolute; left:0; right:0; height:1px; background:var(--lotse-linie-2); }
.kal-balken{
  position:absolute; border:0; border-left:3px solid var(--lotse-teal);
  border-radius:6px; background:var(--lotse-akzent-weich); color:var(--lotse-akzent-text);
  padding:4px 6px; text-align:left; cursor:pointer; overflow:hidden;
  display:grid; align-content:start; gap:1px; min-height:26px;
  transition:box-shadow .18s var(--lotse-ease); }
.kal-balken:hover{ box-shadow:var(--sh-2); }
.kal-balken-titel{ font-size:12px; font-weight:750; line-height:1.25;
  overflow:hidden; text-overflow:ellipsis; }
.kal-balken-zeit{ font-size:10.5px; font-weight:650; opacity:.8; }
.kal-balken.entfaellt{ background:var(--k-f17); color:var(--k-t15); border-left-color:var(--k-l05); }
.kal-balken.entfaellt .kal-balken-titel{ text-decoration:line-through; }

/* Jahresansicht: zwölf kleine Monate, ohne Titel. Auf zwölf Monaten wäre
   jeder Titel unlesbar – und ein unlesbarer Titel eines geschützten Termins
   ist trotzdem einer. Sie zeigt, WO etwas ist, nicht WAS. */
.kal-jahr{ display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:14px; }
.kal-jahr-monat{
  border:1px solid var(--lotse-linie); border-radius:var(--r2); background:var(--lotse-flaeche);
  padding:11px 10px 12px; cursor:pointer; text-align:left; display:grid; gap:7px;
  transition:box-shadow .18s var(--lotse-ease); }
.kal-jahr-monat:hover{ box-shadow:var(--sh-2); }
.kal-jahr-monat strong{ font-family:Georgia,serif; font-weight:400; font-size:15px; color:var(--lotse-ink); }
.kal-jahr-raster{ display:grid; grid-template-columns:repeat(7,1fr); gap:2px; }
.kal-jahr-tag{ font-size:10px; text-align:center; padding:2px 0; border-radius:5px;
  color:var(--lotse-text-2); }
.kal-jahr-tag.fremd{ color:var(--k-t16); }
.kal-jahr-tag.belegt{ background:var(--lotse-akzent-weich); color:var(--lotse-akzent-text); font-weight:800; }
.kal-jahr-tag.heute{ background:var(--lotse-teal); color:var(--k-t05); font-weight:800; }

@media(max-width:1050px){ .kal-jahr{ grid-template-columns:repeat(3,minmax(0,1fr)); } }
@media(max-width:720px){
  .kal-periode{ font-size:24px; }
  .kal-steuerung{ gap:10px; }
  .kal-blaettern{ width:100%; justify-content:space-between; }
  .kal-jahr{ grid-template-columns:repeat(2,minmax(0,1fr)); gap:10px; }
  /* Die Woche wird gewischt, nicht gequetscht: jede Spalte behält eine
     Breite, die man treffen kann. Der Tag bleibt einspaltig.

     GEWISCHT WIRD DAS GANZE RASTER, nicht jede Zeile für sich. Im ersten
     Bildbeleg auf 390px scrollten Tagesköpfe und Raster unabhängig
     voneinander — man konnte zu Donnerstag wischen und las darüber
     „Montag". Deshalb liegt der waagerechte Lauf jetzt auf dem Raster
     selbst, und die Stundenleiste bleibt mit `sticky` an ihrem Platz. */
  .kal-zeitkopf,.kal-ganztag,.kal-zeitkoerper{ grid-template-columns:46px minmax(0,1fr); }
  .kal-zeitraster[data-spalten="7"]{ overflow-x:auto; -webkit-overflow-scrolling:touch; }
  .kal-zeitraster[data-spalten="7"] .kal-zeitkopf,
  .kal-zeitraster[data-spalten="7"] .kal-ganztag,
  .kal-zeitraster[data-spalten="7"] .kal-zeitkoerper{ min-width:calc(46px + 7 * 96px); }
  .kal-zeitraster[data-spalten="7"] .kal-tagkoepfe,
  .kal-zeitraster[data-spalten="7"] .kal-ganztag-zellen,
  .kal-zeitraster[data-spalten="7"] .kal-spalten{ grid-auto-columns:minmax(96px,1fr); }
  /* Damit die Stundenleiste beim Wischen stehen bleibt, muss der waagerechte
     Lauf ihr NAECHSTER Scrollbereich sein. Solange der Zeitkoerper selbst
     senkrecht scrollt, ist er es — und `sticky` bleibt wirkungslos. Auf dem
     Telefon scrollt deshalb die Seite senkrecht, das Raster waagerecht.
     Gemessen im Bildbeleg: vorher lief die Leiste auf -265px hinaus. */
  .kal-zeitkoerper{ max-height:none; overflow:visible; }
  .kal-zeitraster[data-spalten="7"] .kal-eckfeld,
  .kal-zeitraster[data-spalten="7"] .kal-ganztag-marke-links,
  .kal-zeitraster[data-spalten="7"] .kal-stundenleiste{
    position:sticky; left:0; z-index:2; background:var(--lotse-flaeche-2); }
  .kal-ganztag-marke-links{ font-size:9.5px; }
}
@media(max-width:430px){
  .kal-periode{ font-size:21px; }
  .kal-jahr{ grid-template-columns:repeat(2,minmax(0,1fr)); }
}
@media print{ .kal-zeitkoerper{ max-height:none; overflow:visible; } }

/* Der Knopf für die frühen Stunden. Er sitzt zwischen Ganztagszeile und
   Raster – dort, wo die fehlende Zeit tatsächlich fehlt. Steht statt seiner
   ein Grund, ist das kein Knopf, sondern ein Satz: dann ist das Raster von
   selbst aufgeklappt, weil dort etwas liegt. */
.kal-nachtzeile{
  display:flex; align-items:center; justify-content:flex-start;
  border-bottom:1px solid var(--lotse-linie-2); background:var(--lotse-flaeche-2);
  padding:0 0 0 4px; min-height:34px;
}
.kal-nacht{
  min-height:34px; padding:0 12px; border:0; background:none; cursor:pointer;
  font-size:11.5px; font-weight:750; color:var(--lotse-akzent-text);
  border-radius:var(--r1);
}
.kal-nacht:hover{ background:var(--lotse-akzent-weich); }
.kal-nacht-grund{ padding:8px 12px; font-size:11px; font-weight:650; color:var(--lotse-text-3); }
@media(max-width:720px){
  .kal-zeitraster[data-spalten="7"] .kal-nachtzeile{ min-width:calc(46px + 7 * 96px); }
  .kal-nacht{ position:sticky; left:0; background:var(--lotse-flaeche-2); }
}

/* ── Predigtdienst · Zustand über Farbe UND Form UND Wort ────────────────
 *
 * Die Farbe allein trägt hier nichts: an einem Dienstplan hängt eine
 * Verabredung, und wer rot und grün nicht unterscheidet, muss trotzdem
 * sehen, ob er zugesagt hat. Deshalb steht das Wort immer daneben, und die
 * FORM (Rahmenstärke, Linienart) unterscheidet zusätzlich.
 */
.dienst-zustand{display:inline-flex;align-items:center;gap:.4em;
  padding:.15em .6em;border-radius:999px;font-size:.85em;
  border:1px solid var(--lotse-linie,var(--k-l06));width:fit-content}
.dienst-zustand[data-zustand="CONFIRMED"]{border-width:2px;border-style:solid;
  border-color:var(--k-l07);color:var(--k-t17)}
.dienst-zustand[data-zustand="PROPOSED"]{border-style:dashed;color:var(--k-t18)}
.dienst-zustand[data-zustand="RECONFIRMATION_REQUIRED"]{border-width:2px;
  border-style:double;color:var(--k-t19)}
.dienst-zustand[data-zustand="SWAP_PENDING"]{border-style:dotted;color:var(--k-t20)}
.dienst-zustand[data-zustand="UNBESETZT"]{border-style:solid;color:var(--k-t21)}
.dienst-warnung:not([hidden]){display:block;margin-top:.4em;font-size:.85em;
  color:var(--k-t19)}
@media (prefers-reduced-motion: reduce){.dienst-zustand{transition:none}}

/* Der Ausschnitt einer Quelle in der Werkbank. Er steht eingerückt und in
   anderer Schrift, damit auf einen Blick klar ist: das ist fremder Text,
   nicht der eigene. */
.werkbank-inhalt{display:block;margin:.5em 0;padding:.5em .8em;
  border-left:3px solid var(--lotse-linie,var(--k-l06));
  font-family:Georgia,serif;line-height:1.5;color:var(--k-t22)}

/* G-3/G-6: der Satz zur Erwartung. Kleiner als der Inhalt, aber nicht versteckt. */
.gruppe-hinweis{margin:10px 0 0;font-size:12px;line-height:1.5;color:var(--k-t23);border-left:2px solid var(--k-l08);padding-left:10px}

/* B-2: der Knopf und der Zeitpunkt daneben. Der Zeitpunkt ist der eigentliche Inhalt. */
/* BEFUND vom 20.08.2026 (V-1, PO-Frage 6 C): „Meine Arbeit" hatte eine grosse
   leere linke Spalte, und der Inhalt stand in einer 290 px schmalen rechten —
   so schmal, dass Eintraege ZEICHENWEISE untereinander umbrachen.

   Gemessen im Browser bei 900 px: `#myWorkSurface` ist ein zweispaltiges
   Raster, und diese Leiste wird per JS als ERSTES Kind eingehaengt. Damit war
   sie kein Streifen ueber der Arbeit, sondern eine eigene 342 px breite
   Spalte — und schob die eigentliche Arbeit in die schmale daneben.

   Die Leiste gehoert ueber die Arbeit, nicht neben sie. `grid-column:1/-1`
   sagt genau das und gilt fuer JEDES Raster, in das sie kuenftig eingehaengt
   wird — auch fuer das naechste, an das heute niemand denkt. Ausserhalb eines
   Rasters ist die Zeile wirkungslos. */
.neuladen-leiste{display:flex;align-items:center;gap:10px;margin:0 0 12px;flex-wrap:wrap;grid-column:1/-1}
.neuladen-stand{font-size:12px;color:var(--k-t24)}

/* Gemessen am 17.08.2026, Tablet (820 px): „Meine Arbeit" ließ sich um 14 px
   seitlich schieben. Ursache ist keine Entscheidung, sondern ein fehlendes
   `min-width:0` — ein Rasterfeld ist von Haus aus mindestens so breit wie sein
   breitester unteilbarer Inhalt und wächst dann über seinen Anteil hinaus.
   Das ist ein Fehler, keine Gestaltungsfrage, und wird deshalb unabhängig von
   E-4 behoben. */
.my-work-groups, .my-work-group, .my-work-group .work-list { min-width: 0; }
.my-work-group .work-item { min-width: 0; }
.my-work-group .work-main { min-width: 0; overflow-wrap: anywhere; }

/* E-4, zweiter Teil: Stellen, die eine eigene Höhe setzen.
 *
 * Eine Klassenregel schlägt eine Elementregel, unabhängig von der Reihenfolge.
 * Diese vier setzen ausdrücklich 40 bis 42 px und blieben deshalb beim ersten
 * Durchgang flach — gemessen, nicht vermutet. */
@media (pointer: coarse) {
  .kal-ansicht-knopf,
  .kal-serienknopf,
  .kal-knoepfe button,
  .bereichswahl select { min-height: 44px; }
}

/* Und eine Grenze, die ausdrücklich gezogen wird, damit sie niemand später
 * für ein Versehen hält: die MARKEN IM KALENDERRASTER bleiben klein.
 * `.kal-ganztag-marke`, `.kal-nacht` und die Zellen sind keine Bedienleiste,
 * sondern dichte Darstellung von Inhalt — ein Termin unter vielen in einer
 * Wochenansicht. Auf 44 px gezwungen, würde die Woche nicht mehr auf den
 * Bildschirm passen, und aus einer besseren Bedienbarkeit würde eine
 * schlechtere Übersicht. Wer einen Termin genauer treffen will, zoomt oder
 * wechselt in die Tagesansicht; das ist der vorgesehene Weg. */

/* ── Aus dem <style>-Block von index.html hierher geholt ────────────────
   Grund: Die Content-Security-Policy braucht `style-src 'unsafe-inline'`
   nicht nur wegen style="…"-Attributen, sondern AUCH wegen <style>-Bloecken
   im Markup. Am 17.08.2026 nachgemessen: drei Bloecke mit 108 Zeilen in
   index.html, anmeldung.html und betreiber.html. Meine erste Messung hatte
   nur die Attribute gezaehlt und index.html deshalb faelschlich als "sauber"
   gemeldet.
   Hier ist nichts geaendert worden — dieselben Regeln, anderer Ort. */
.angemeldet{display:inline-flex;align-items:center;gap:7px;font-size:12px;font-weight:750;color:var(--k-t25);
background:var(--k-f18);border:1px solid var(--k-l08);border-radius:999px;padding:7px 12px}
.angemeldet[hidden]{display:none}
.feldhinweis{display:block;font-size:11px;font-weight:600;color:var(--k-t15);margin-top:5px;line-height:1.45}
.feldhinweis[hidden]{display:none}
select:disabled{background:var(--k-f19);color:var(--k-t26);cursor:not-allowed}

/* ── Rückmeldung · Bedienebene, nicht Inhaltsebene ───────────────────────
   Der Knopf gehört keiner Ansicht, sondern jeder. Er hebt sich als
   schwebende Bedienebene ab, konkurriert aber nicht mit dem Inhalt um
   Aufmerksamkeit: gedämpfte Fläche, keine Signalfarbe, kein Dauerreiz. */
.melde-knopf {
  position: fixed; right: 20px; bottom: 20px; z-index: 40;
  display: inline-flex; align-items: center; gap: .5rem;
  min-height: 44px; padding: 0 1rem 0 .85rem;
  border-radius: 999px; border: 1px solid rgba(18,38,44,.12);
  background: rgba(255,255,255,.92);
  -webkit-backdrop-filter: saturate(180%) blur(12px);
  backdrop-filter: saturate(180%) blur(12px);
  box-shadow: 0 2px 10px rgba(18,38,44,.10), 0 8px 28px rgba(18,38,44,.08);
  color: var(--text, #12262c); font: inherit; font-size: 14px; cursor: pointer;
  transition: transform .12s ease, box-shadow .16s ease;
}
/* Ohne Blur-Unterstützung eine saubere opake Fläche — nicht eine halb
   durchsichtige, unter der der Text durchscheint. */
@supports not (backdrop-filter: blur(1px)) { .melde-knopf { background: #ffffff; } }
.melde-knopf:hover { transform: translateY(-1px); box-shadow: 0 3px 14px rgba(18,38,44,.14), 0 10px 32px rgba(18,38,44,.10); }
.melde-knopf:active { transform: scale(.98); }
.melde-knopf:focus-visible { outline: 2px solid var(--brand, #0d776b); outline-offset: 3px; }

.melde-knopf > span:first-child {
  display: inline-grid; place-items: center; width: 22px; height: 22px;
  border-radius: 999px; background: var(--accent-soft, #e2f0ec);
  color: var(--accent-text, #0b5b52); font-weight: 700; font-size: 13px;
}
/* Offener Wochenfragebogen: ein Punkt, KEINE reine Farbcodierung — der
   Titeltext sagt es zusätzlich. */
.melde-knopf.offen > span:first-child { background: var(--brand-alt, #d49a1e); color: #1a1206; }
.melde-knopf.offen::after {
  content: ''; position: absolute; top: 6px; right: 8px;
  width: 8px; height: 8px; border-radius: 999px; background: var(--brand-alt, #d49a1e);
}
@media (max-width: 640px) {
  .melde-knopf { right: 14px; bottom: 14px; padding: 0; width: 48px; justify-content: center; }
  .melde-knopf-text { display: none; }
}

.melde-dialog { border: none; border-radius: 18px; padding: 0; max-width: 34rem; width: calc(100vw - 32px); }
.melde-dialog::backdrop { background: rgba(18,38,44,.36); }
.melde-form { display: grid; gap: .55rem; padding: 1.4rem 1.5rem 1.2rem; }
.melde-form h2 { margin: 0; font-size: 1.35rem; }
.melde-form label { font-size: .9rem; font-weight: 600; margin-top: .35rem; }
.melde-form textarea, .melde-form select { width: 100%; font: inherit; padding: .5rem .6rem; border-radius: 10px; }
.melde-spur { margin: .5rem 0 0; padding-left: 1.1rem; font-size: .82rem; line-height: 1.5; }
.melde-spur code { font-size: .8rem; opacity: .8; }
.melde-knoepfe { display: flex; gap: .6rem; justify-content: flex-end; margin-top: .9rem; }
.melde-knoepfe button { min-height: 44px; padding: 0 1.1rem; }
.melde-antwort { margin: .5rem 0 0; font-size: .88rem; min-height: 1.2em; }
@media (prefers-reduced-motion: reduce) { .melde-knopf { transition: none; } }

/* ═══════════════════════════════════════════════════════════════════════════
 * Kartenanpassung der Übersicht · Größe und Klappzustand
 *
 * Befund vom 19.08.2026: `app.js` schrieb `data-groesse` und
 * `data-zugeklappt` an die Karte, und es gab dazu keine einzige Regel.
 * Der Zustand wurde gespeichert, übertragen, ins DOM geschrieben — und war
 * unsichtbar. Genau die Falle „eine Zeile, die beim Lesen beruhigt und
 * nichts tut".
 *
 * Die benannte Größe wird HIER in Spalten aufgelöst, nicht im Server: nur
 * das Stilblatt weiß, wo umgebrochen wird. Der Server nennt die Spaltenzahl
 * für das Desktopraster (uebersicht.mjs · RASTERSPALTEN); dass beide Seiten
 * dieselbe Zahl tragen, hält `tests/uebersicht-oberflaeche.test.mjs` fest.
 *
 * Gespeichert wird nie eine Breite. KOMPAKT bleibt auch auf dem Handy
 * KOMPAKT — es belegt dort nur genauso eine Spalte wie GROSS, weil es keine
 * zweite gibt. Eine Desktop-Breite darf das Handy nicht in ein Querlayout
 * zwingen (Auftrag §10).
 * ══════════════════════════════════════════════════════════════════════════ */

.dashboard-grid > [data-groesse="BREIT"] { grid-column: span 2; }
.dashboard-grid > [data-groesse="GROSS"] { grid-column: span 3; }
.dashboard-grid > [data-groesse="KOMPAKT"] { padding: 12px; }
.dashboard-grid > [data-groesse="KOMPAKT"] > .dashboard-kicker { margin-bottom: 5px; }

/* Ab hier bricht das Raster auf zwei Spalten um (styles.css). Eine Karte,
   die drei Spalten möchte, bekommt dann zwei — nicht drei von zweien. */
@media (max-width: 1050px) {
  .dashboard-grid > [data-groesse="GROSS"] { grid-column: span 2; }
}
/* Einspaltig: jede Größe belegt genau die eine Spalte. Ohne diese Zeile
   entstünde `span 2` in einem einspaltigen Raster — der Browser legt dann
   eine zweite Spalte an, und aus der Anpassung würde ein Querlauf. */
@media (max-width: 720px) {
  .dashboard-grid > [data-groesse="BREIT"],
  .dashboard-grid > [data-groesse="GROSS"] { grid-column: auto; }
}

/* ── Die Tafel: Breite folgt der Groesse, nicht der Position ──────────────
   Bis zum 19.08.2026 war `.ac-shell` ein Raster mit zwei fest benannten
   Spuren. Damit hing die Breite eines Abschnitts daran, an welcher STELLE er
   stand — Umsortieren haette die Breiten mitvertauscht, und deshalb war das
   Sortieren fuer diese beiden Abschnitte kurzzeitig gesperrt.
   Der Product Owner hat entschieden, dass jeder Nutzer die Reihenfolge selbst
   bestimmt. Also wurde nicht die Wahl gesperrt, sondern die Ursache beseitigt:
   `.ac-shell` ist ein fliessender Bereich nach Foundation §7, und die Breite
   haengt jetzt ausschliesslich an `data-groesse` des Abschnitts. Wer die
   beiden vertauscht, behaelt seine Breiten. */
.ac-shell > [data-groesse="KOMPAKT"] { flex: 1 1 260px; }
.ac-shell > [data-groesse="NORMAL"]  { flex: 1 1 320px; }
.ac-shell > [data-groesse="BREIT"]   { flex: 1.5 1 380px; }
.ac-shell > [data-groesse="GROSS"]   { flex: 2.4 1 440px; }

/* Zugeklappt: Überschrift und Klapppfeil bleiben, der Inhalt geht.
   Bewusst nicht `display:none` auf der Karte selbst — eine verschwundene
   Karte könnte man nicht wieder aufklappen. */
[data-zugeklappt] > *:not(.karte-klapp):not(.dashboard-kicker):not(.panel-head) {
  display: none;
}
[data-zugeklappt] { padding-bottom: 12px; }
[data-zugeklappt] > .panel-head { margin-bottom: 0; }

/* Der Klapppfeil. Er lag bisher ohne jede Regel im Markup und sah aus wie
   ein verirrtes Zeichen. */
.dashboard-card, .ac-main, .task-rail { position: relative; }
.karte-klapp {
  position: absolute; top: 10px; right: 10px;
  width: 30px; height: 30px; padding: 0;
  display: inline-flex; align-items: center; justify-content: center;
  border: 1px solid var(--k-l02, rgba(18,59,70,.16));
  border-radius: 999px;
  background: transparent; color: var(--text-2, #5b7176);
  font-size: 13px; line-height: 1; cursor: pointer;
}
.karte-klapp:hover { background: var(--accent-soft, #e3f2ee); color: var(--brand, #0d776b); }
.dashboard-card > .karte-klapp + .dashboard-kicker,
[data-zugeklappt] > .karte-klapp + .dashboard-kicker { padding-right: 40px; }
.ac-main > .karte-klapp, .task-rail > .karte-klapp { top: 14px; right: 14px; }
/* Platz freihalten. Befund der unabhaengigen Durchsicht vom 19.08.2026: der
   Pfeil lag vollstaendig ueber dem Zaehler der Prioritaetsleiste und ueber
   dem rechten Ende der Filterbeschriftung — beide waren verdeckt und nicht
   mehr bedienbar. Ein neues Bedienelement, das ein vorhandenes zudeckt, ist
   keine Verbesserung. */
.ac-main > .karte-klapp ~ .panel-head,
.task-rail > .karte-klapp ~ .panel-head { padding-right: 44px; }

/* Anheften. Den Weg dafür gibt es serverseitig seit WS02; ein Bedienelement
   dazu gab es nicht. */
.abschnitt-anheften[aria-pressed="true"] { color: var(--brand, #0d776b); font-weight: 700; }
.vorgang-anheften { border: 0; background: transparent; cursor: pointer; padding: 0 4px; font-size: 12px; }
.vorgang-anheften[aria-pressed="true"] { color: var(--brand-alt, #d49a1e); }

@media (pointer: coarse) {
  /* Die drei Selektoren einzeln aufgefuehrt, weil `.ac-main > .karte-klapp`
     (0,2,0) eine reine Klassenregel (0,1,0) schlaegt — die Touch-Korrektur
     griff dort sonst gar nicht, und ausgerechnet auf dem Handy war die
     Ueberdeckung am groessten. */
  .karte-klapp,
  .ac-main > .karte-klapp,
  .task-rail > .karte-klapp { width: 44px; height: 44px; top: 6px; right: 6px; }
  .dashboard-card > .karte-klapp + .dashboard-kicker,
  [data-zugeklappt] > .karte-klapp + .dashboard-kicker { padding-right: 54px; }
  .ac-main > .karte-klapp ~ .panel-head,
  .task-rail > .karte-klapp ~ .panel-head { padding-right: 54px; }
  .vorgang-anheften { min-width: 44px; min-height: 44px; }
}
@media (prefers-reduced-motion: reduce) { .karte-klapp { transition: none; } }

/* Sprunglink. Vierzehn Navigationspunkte vor dem Inhalt sind mit der
   Tastatur ein langer Weg (WCAG 2.4.1). */
.sprunglink {
  position: absolute; left: -9999px; top: 0; z-index: 100;
  background: var(--brand, #0d776b); color: #fff;
  padding: 10px 16px; border-radius: 0 0 12px 0; font-weight: 700;
}
.sprunglink:focus { left: 0; }

/* ═══════════════════════════════════════════════════════════════════════════
 * Referenzscreen 1 · Übersicht · Ruhe herstellen
 *
 * Befunde vom 19.08.2026, am Bild gemessen (1440 / 1024 / 402 px, hell und
 * dunkel):
 *
 *   · Die Seite trug ZWEI gleich große Überschriften übereinander — eine
 *     Karte, die nur „Übersicht" und einen Erklärsatz enthielt, und direkt
 *     darunter „Was steht als Nächstes an?". §8 will eine Antwort pro Seite.
 *   · Der Rückmeldeknopf schwebt fest über der unteren rechten Ecke und lag
 *     im Bild auf der Prioritätsleiste.
 *   · Auf dem Handy belegte der Kopfbereich 45 % der ersten Bildschirmhöhe,
 *     bevor der erste Inhalt kam.
 *
 * Was hier NICHT passiert: keine neue Komponentenfamilie, keine neuen
 * Farbwerte, keine neuen Radien. Es wird nur Kartenoptik weggenommen, wo
 * nichts drin ist, und Platz freigehalten, wo etwas überdeckt wurde.
 * ══════════════════════════════════════════════════════════════════════════ */

/* Die Seitenüberschrift ist eine Überschrift, keine Karte. Ohne Fläche,
   ohne Rand, ohne Schatten — sie trägt nichts als den Titel. */
.context-panel {
  background: transparent;
  border: 0;
  box-shadow: none;
  padding: 10px 2px 0;
  margin-bottom: 16px;
}
.context-panel h1 { font-size: 26px; line-height: 1.15; }
/* Der Zustandsvermerk („Arbeitsbereich gespeichert.") gehoert zur
   Ueberschrift, klebte im ersten Nachher-Bild aber daran. */
.context-panel .subtle-status { display: inline-block; margin-top: 4px; }
/* Der Erklärsatz sagt dasselbe wie die Überschrift darunter („Weiterarbeiten,
   offene Vorbereitung und wichtige Termine"). Er bleibt im Markup — für
   Screenreader und für den Fall, dass die Übersicht leer ist — nimmt aber
   keine Bildfläche mehr ein. */
.context-panel > div > p[data-i18n="shell.workspace_note"] { display: none; }

/* Platz für den schwebenden Rückmeldeknopf. 44 px Knopf + 20 px Abstand +
   Luft, damit die letzte Zeile nicht darunter verschwindet. */
.main-content { padding-bottom: 96px; }

/* Das Markenzeichen füllt seinen Rahmen auch als <picture>. */
.brand-logo-frame picture { display: block; width: 100%; height: 100%; }

/* Handy: der Kopf verdichtet sich. Gemessen belegten Banner, Marke,
   Arbeitsbereich, „Angemeldet" und zwei Knöpfe zusammen fast die halbe erste
   Bildschirmhöhe. Der Anmeldevermerk steht auch im Zugangsmenü — auf dem
   kleinen Schirm ist er verzichtbar, der Abmeldeknopf bleibt. */
@media (max-width: 720px) {
  .topbar .angemeldet { display: none; }
  .context-panel { padding-top: 0; margin-bottom: 8px; }
  .context-panel h1 { font-size: 22px; }
}

/* ═══════════════════════════════════════════════════════════════════════════
 * Fließende Bereiche statt starrer Spalten · Foundation §7
 *
 * Befund vom 19.08.2026, vom Product Owner im laufenden Betrieb gesehen und
 * anschließend über dreizehn Fensterbreiten nachgemessen: In „Inventar &
 * Liegenschaften" brach „Aktualisieren" senkrecht in einzelne Buchstaben um,
 * und die beiden Umschalter brachen mitten im Wort.
 *
 * Gemessen (längstes Wort gegen verfügbare Innenbreite):
 *   #refreshF12  „Aktualisieren"        braucht 88 px, hatte 77 px   ab 1440 px
 *   .f12-tab     „Vermögensgegenstände" braucht 185 px, hatte 146 px ab 1440 px
 *   .f12-tab     „Liegenschaften"       braucht 117 px, hatte 105 px ab 1200 px
 *   #newF12Record „anlegen"             braucht 53 px, hatte 49 px   ab 960 px
 *
 * Die Ursache ist ein starres Raster:
 *   .f12-layout{grid-template-columns:minmax(300px,.78fr) minmax(0,1.45fr)}
 * das erst bei 1050 px umbricht. Dazwischen steht die linke Spalte auf ihren
 * 300 px, und alles darin wird gequetscht.
 *
 * Die Foundation schreibt dafür ein Muster vor (§7):
 *   „Karten-Raster ohne feste Spalten: display:flex;flex-wrap:wrap;gap:18px
 *    und pro Karte flex:1 1 320px. Dann fließen sie beim Verkleinern von
 *    selbst um — besser als starre Grid-Spalten."
 * Genau das wird hier umgesetzt. Der Umbruch hängt damit an der Breite, die
 * der Inhalt tatsächlich braucht, und nicht an einer geratenen Bandbreite.
 * ══════════════════════════════════════════════════════════════════════════ */

.f12-layout {
  display: flex;
  flex-wrap: wrap;
  gap: 18px;
  grid-template-columns: none;   /* die Rasterangabe aus styles.css abschalten */
}
.f12-list-panel   { flex: 1 1 400px; min-width: 0; }
.f12-detail-panel { flex: 2 1 460px; min-width: 0; }

/* Die beiden Umschalter fließen ebenso: nebeneinander, solange „Vermögens-
   gegenstände" nebeneinander passt, sonst untereinander. Keine Bandbreite,
   die man raten müsste. */
.f12-tabs {
  display: flex;
  flex-wrap: wrap;
  grid-template-columns: none;
}
.f12-tab {
  flex: 1 1 190px;
  overflow-wrap: normal;   /* nicht mehr „anywhere" — ein Wort bricht nicht mehr mittendrin */
}

/* Ein Knopf in einer Abschnittsüberschrift gibt nicht nach. Er ist das
   kürzeste Element der Zeile; wenn es eng wird, muss die Überschrift
   umbrechen, nicht die Beschriftung des Knopfes. */
.panel-head > button,
.panel-head > .primary-button,
.panel-head > .ghost-button,
.panel-head > .secondary-button {
  flex: 0 0 auto;
  white-space: nowrap;
}
/* Und wenn beides zusammen nicht mehr passt, bricht die Zeile um. */
.panel-head { flex-wrap: wrap; }

/* ── Farbmodus-Wahl ───────────────────────────────────────────────────────
   Drei Knoepfe, keine Auswahlliste: die Wahl hat genau drei Werte, und eine
   Liste verbirgt zwei davon hinter einem Klick. `role=radio` statt eines
   echten <input>, weil die Knoepfe sofort wirken und nicht erst beim
   Absenden — ein Formular waere hier eine Zusage, die es nicht gibt. */
.farbmodus-wahl { border: 0; margin: 0; padding: 0; }
.farbmodus-wahl legend {
  padding: 0; font-size: 12px; font-weight: 750; color: var(--text-2);
  letter-spacing: .02em;
}
.farbmodus-knoepfe { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 10px; }
.farbmodus-knopf {
  flex: 0 1 auto; min-height: 44px; padding: 0 16px;
  border: 1px solid var(--lotse-linie); border-radius: 999px;
  background: var(--surface); color: var(--text); font: inherit; font-weight: 650;
  cursor: pointer; transition: background .12s ease, border-color .12s ease;
}
.farbmodus-knopf:hover { border-color: var(--accent); }
.farbmodus-knopf:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
/* Der gewaehlte Zustand haengt NICHT nur an der Farbe: er traegt zusaetzlich
   ein Zeichen und aria-checked. Farbe allein waere hier die einzige
   Unterscheidung — und genau das verbietet die Zugaenglichkeit. */
.farbmodus-knopf[aria-checked="true"] {
  background: var(--accent-soft); border-color: var(--accent); color: var(--accent-text);
  font-weight: 800;
}
.farbmodus-knopf[aria-checked="true"]::before { content: '✓ '; }

/* ANFANG ERZEUGTER DUNKELSATZ — nicht von Hand aendern */
/* ═══════════════════════════════════════════════════════════════════════════
   * Dunkelsatz · erzeugt von werkzeuge/farbe/dunkelsatz.mjs
   * ═══════════════════════════════════════════════════════════════════════════
   * NICHT VON HAND AENDERN. Wer eine Farbe anders haben will, aendert die
   * Regel im Werkzeug oder traegt sie dort als Anker ein und laesst neu
   * erzeugen. Von Hand geaenderte Werte gehen beim naechsten Lauf verloren
   * und — schlimmer — sie stehen dann nur in EINEM der beiden Bloecke.
   *
   * Die Ankerwerte stammen aus der Foundation:
   *   Grund #0a1315 · Flaeche #131f22 · Akzent #39b9a3 · Schrift #eaf3f1
   * ═══════════════════════════════════════════════════════════════════════════ */
@media (prefers-color-scheme: dark){
  .sidebar{background:linear-gradient(180deg,#0e2228,#0d2b35);border-right:0;color:#cfe2de}
  .brand-block strong{color:#eaf3f1}
  .brand-block span{color:rgba(207,226,222,.66)}
  .brand-logo-frame{background:#16262a;box-shadow:inset 0 0 0 1px rgba(255,255,255,.10)}
  .nav-group-title{color:rgba(207,226,222,.46)}
  .nav-item{color:#cfe2de}
  .nav-item:hover{background:rgba(255,255,255,.10);color:#ffffff}
  .nav-item.active{background:rgba(255,255,255,.15);color:#ffffff}
  .nav-glyph{background:rgba(255,255,255,.10);color:#cfe2de}
  .sidebar-fuss{color:rgba(207,226,222,.38)}
  .bereichswahl{background:rgba(255,255,255,.07);border-color:rgba(255,255,255,.12)}
  .bereichswahl > label{color:#bcd8d4}
  .bereichswahl select{color:#ffffff}
  .bereichswahl-knopf{color:#cfe2de;border-color:rgba(255,255,255,.3)}
  .sidebar-note{background:rgba(255,255,255,.05);border-color:rgba(255,255,255,.11)}
  .sidebar-note p{color:#cfe2de}
  .vorgangsleiste{background:rgba(19,31,34,.94)}
  .melde-knopf{background:rgba(19,31,34,.94);border-color:rgba(234,243,241,.14);color:#eaf3f1}
  .melde-knopf.offen > span:first-child{background:#e0a54a;color:#1a1206}
  .nav-item.active .nav-glyph{color:#1a1206}
  .kal-zelle[data-heute] .kal-zelle-tag,.kal-tagkopf.heute .kal-tagkopf-zahl{color:#08171a}
  #druckEinwilligung{background:#131f22;color:#eaf3f1}
  .kal-jahr-tag.heute,.sprunglink{color:#08171a}
}
:root[data-theme="dunkel"] .sidebar{background:linear-gradient(180deg,#0e2228,#0d2b35);border-right:0;color:#cfe2de}
:root[data-theme="dunkel"] .brand-block strong{color:#eaf3f1}
:root[data-theme="dunkel"] .brand-block span{color:rgba(207,226,222,.66)}
:root[data-theme="dunkel"] .brand-logo-frame{background:#16262a;box-shadow:inset 0 0 0 1px rgba(255,255,255,.10)}
:root[data-theme="dunkel"] .nav-group-title{color:rgba(207,226,222,.46)}
:root[data-theme="dunkel"] .nav-item{color:#cfe2de}
:root[data-theme="dunkel"] .nav-item:hover{background:rgba(255,255,255,.10);color:#ffffff}
:root[data-theme="dunkel"] .nav-item.active{background:rgba(255,255,255,.15);color:#ffffff}
:root[data-theme="dunkel"] .nav-glyph{background:rgba(255,255,255,.10);color:#cfe2de}
:root[data-theme="dunkel"] .sidebar-fuss{color:rgba(207,226,222,.38)}
:root[data-theme="dunkel"] .bereichswahl{background:rgba(255,255,255,.07);border-color:rgba(255,255,255,.12)}
:root[data-theme="dunkel"] .bereichswahl > label{color:#bcd8d4}
:root[data-theme="dunkel"] .bereichswahl select{color:#ffffff}
:root[data-theme="dunkel"] .bereichswahl-knopf{color:#cfe2de;border-color:rgba(255,255,255,.3)}
:root[data-theme="dunkel"] .sidebar-note{background:rgba(255,255,255,.05);border-color:rgba(255,255,255,.11)}
:root[data-theme="dunkel"] .sidebar-note p{color:#cfe2de}
:root[data-theme="dunkel"] .vorgangsleiste{background:rgba(19,31,34,.94)}
:root[data-theme="dunkel"] .melde-knopf{background:rgba(19,31,34,.94);border-color:rgba(234,243,241,.14);color:#eaf3f1}
:root[data-theme="dunkel"] .melde-knopf.offen > span:first-child{background:#e0a54a;color:#1a1206}
:root[data-theme="dunkel"] .nav-item.active .nav-glyph{color:#1a1206}
:root[data-theme="dunkel"] .kal-zelle[data-heute] .kal-zelle-tag,:root[data-theme="dunkel"] .kal-tagkopf.heute .kal-tagkopf-zahl{color:#08171a}
:root[data-theme="dunkel"] #druckEinwilligung{background:#131f22;color:#eaf3f1}
:root[data-theme="dunkel"] .kal-jahr-tag.heute,:root[data-theme="dunkel"] .sprunglink{color:#08171a}
/* ENDE ERZEUGTER DUNKELSATZ */

/* Die Marke des Arbeitstisches. Sie steht in der Leiste und nicht im Menue:
   der Arbeitstisch ist eine Bedienebene, keine Navigationsgruppe. Auf
   schmalen Anzeigen verschwindet der Text und die Leiste behaelt ihren Platz
   fuer das, worum es geht — die offenen Arbeitskontexte. */
.arbeitstisch-marke {
  margin: 0 10px 0 2px; align-self: center; flex: 0 0 auto;
  font-size: 10px; font-weight: 800; letter-spacing: .1em; text-transform: uppercase;
  color: var(--text-2);
}
/* Die Leiste ist eine Zeile — bis auf „Zuletzt geschlossen", das eine eigene
   bekommt. Ohne den Umbruch draengt sich das Archiv als drittes Flexkind in
   dieselbe Zeile, `.vorgangsleiste-rolle` nimmt mit `flex:1 1 auto` den Platz,
   und die Knoepfe werden auf null Breite gequetscht: sichtbar, aber nicht
   anklickbar. Gefunden vom Browserlauf, der den Klick nicht durchbrachte. */
.vorgangsleiste { display: flex; align-items: center; gap: 4px; flex-wrap: wrap; }
.vorgangsleiste .vorgangsleiste-archiv { flex: 1 0 100%; }
.vorgangsleiste-rolle { flex: 1 1 auto; min-width: 0; }
@media (max-width: 720px) { .arbeitstisch-marke { display: none; } }

/* ── Schwarzes Brett ──────────────────────────────────────────────────────
   Aushänge sind Text, kein Datensatz. Sie bekommen deshalb Zeilenlänge und
   nicht die volle Breite: über 75 Zeichen verliert das Auge die Zeile.
   Fließende Spalten nach Foundation §7, keine starre Rasterbreite. */
.brett-liste { display: flex; flex-wrap: wrap; gap: 14px; margin-top: 16px; }
.brett-karte {
  flex: 1 1 380px; max-width: 68ch; min-width: 0;
  background: var(--surface); border: 1px solid var(--lotse-linie);
  border-radius: var(--r2, 18px); padding: 16px 18px;
}
/* Angeheftet: Farbe UND Form. Ein farbiger Rand allein wäre die einzige
   Unterscheidung, und das reicht nicht. */
.brett-karte.angeheftet { border-left: 4px solid var(--accent); }
.brett-kopf { display: flex; flex-wrap: wrap; align-items: baseline; gap: 10px; }
.brett-kopf h3 { margin: 0; font-family: Georgia, serif; font-weight: 400; font-size: 17px; }
.brett-text { margin: 8px 0 0; line-height: 1.55; white-space: pre-wrap; overflow-wrap: anywhere; }
.brett-fuss { margin: 10px 0 0; display: flex; flex-wrap: wrap; gap: 12px;
  font-size: 12px; color: var(--text-2); }
.brett-aktionen { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 12px; }
.brett-aktionen:empty { display: none; }
.brett-marke {
  font-size: 11px; font-weight: 800; letter-spacing: .04em;
  padding: 3px 9px; border-radius: 999px;
  background: var(--warn-soft); color: var(--warn-text);
}
.brett-marke.erledigt { background: var(--ok-soft); color: var(--ok-text); }
.brett-zielgruppe { font-weight: 700; }
.brett-leer { max-width: 68ch; color: var(--text-2); line-height: 1.6; margin: 18px 0 0; }
.brett-schalter { display: flex; gap: 6px; flex-wrap: wrap; }
.brett-schalter [aria-pressed="true"] {
  background: var(--accent-soft); color: var(--accent-text); font-weight: 800;
}
.brett-form {
  display: grid; gap: 12px; margin: 16px 0 4px; padding: 16px;
  border: 1px solid var(--lotse-linie); border-radius: var(--r2, 18px);
  background: var(--surface-2);
}
.brett-form-zeile { display: flex; flex-wrap: wrap; gap: 12px; }
.brett-form-zeile > label { flex: 1 1 200px; min-width: 0; }
.ankreuz-zeile { display: flex; align-items: center; gap: 8px; flex: 1 1 220px; }
.ankreuz-zeile input { width: 24px; height: 24px; flex: 0 0 24px; }

/* ── Kommunikation ────────────────────────────────────────────────────────
   Ein Bereich, mehrere Unterbereiche, ein Reiterband. Die Reiter entstehen
   aus der Serverantwort; hier steht nur, wie sie aussehen. Bei genau einem
   Unterbereich verschwindet das Band (im Programm), damit keine Wahl
   angeboten wird, die keine ist.

   Aufbau nach Auftrag §20: Desktop und Tablet nebeneinander, Smartphone
   einspaltig. Das erledigt flex-wrap mit einer Grundbreite — es gibt bewusst
   KEINEN eigenen Breakpoint fuer die Kommunikation, sondern nur die
   Grundbreite, ab der der Umbruch von selbst passiert. */
.komm-reiter { display: flex; flex-wrap: wrap; gap: 6px; margin: 4px 0 18px; }
.komm-reiter[hidden] { display: none; }
.komm-reiter-knopf {
  min-height: 44px; padding: 0 16px; border-radius: 999px;
  border: 1px solid var(--lotse-linie); background: transparent;
  color: var(--text); font: inherit; font-weight: 650; cursor: pointer;
}
.komm-reiter-knopf:hover { border-color: var(--accent); }
.komm-reiter-knopf:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
/* Gewaehlt: Farbe UND Gewicht UND aria-selected. Farbe allein reicht nicht. */
.komm-reiter-knopf[aria-selected="true"] {
  background: var(--accent-soft); color: var(--accent-text);
  border-color: var(--accent); font-weight: 800;
}
.komm-flaeche { display: flex; flex-wrap: wrap; gap: 18px; }
.komm-bereich { flex: 1 1 100%; min-width: 0; }
.komm-bereich[hidden] { display: none; }
.komm-bereich > h3 { margin: 0 0 6px; font-family: Georgia, serif; font-weight: 400; font-size: 19px; }

/* Eine Zeile in „Fuer mich". Bewusst eine ZEILE und keine Karte: es sind
   Hinweise auf Fachobjekte, keine Objekte. Eine Karte je Rueckfrage waere die
   Kachelwand, die der Auftrag verbietet. */
.komm-liste { display: flex; flex-direction: column; gap: 8px; margin-top: 12px; max-width: 78ch; }
.komm-zeile {
  display: flex; flex-wrap: wrap; align-items: center; gap: 12px;
  padding: 11px 14px; border: 1px solid var(--lotse-linie);
  border-radius: var(--r1, 12px); background: var(--surface);
}
.komm-zeile-kopf { display: flex; flex-wrap: wrap; align-items: center; gap: 10px;
  flex: 1 1 260px; min-width: 0; }
.komm-zeile-kopf strong { font-weight: 650; overflow-wrap: anywhere; }

/* Die Kopfzeile des Schwarzen Bretts traegt nur noch den Umschalter — der
   Name steht im Reiter darueber. Ohne diese Zeile klebte die Schaltergruppe
   am rechten Rand einer leeren Zeile. */
.brett-kopfzeile { justify-content: flex-start; margin-bottom: 6px; }

/* ── Chats und Kanäle ─────────────────────────────────────────────────────
   Liste und Unterhaltung fließen nebeneinander, solange Platz ist, und
   stapeln sich sonst. Es gibt bewusst KEINEN eigenen Breakpoint dafür —
   nur eine Grundbreite, ab der der Umbruch von selbst passiert.

   Auf dem Telefon tritt die Liste zurück, sobald eine Unterhaltung offen
   ist (`data-mobil="verlauf"`). Das ist der einspaltige Ablauf aus §20 und
   kein zusammengedrücktes Dreispaltenlayout. */
.chat-flaeche { display: flex; flex-wrap: wrap; gap: 16px; align-items: stretch; }
.chat-liste-spalte { flex: 1 1 300px; min-width: 0; display: flex; flex-direction: column; gap: 10px; }
.chat-verlauf-spalte { flex: 2 1 420px; min-width: 0; display: flex; flex-direction: column;
  border: 1px solid var(--lotse-linie); border-radius: var(--r2, 18px);
  background: var(--surface); overflow: hidden; }
.chat-liste-kopf { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
.chat-suche { flex: 1 1 160px; min-width: 0; }
.chat-suche input { width: 100%; }
.chat-liste { display: flex; flex-direction: column; gap: 4px; }
.chat-zeile {
  display: flex; align-items: center; gap: 10px; width: 100%;
  min-height: 44px; padding: 8px 12px; text-align: left;
  border: 1px solid transparent; border-radius: var(--r1, 12px);
  background: transparent; color: var(--text); font: inherit; cursor: pointer;
}
.chat-zeile:hover { background: var(--surface-2); }
.chat-zeile:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
/* Gewählt: Fläche UND Rand UND Gewicht. Farbe allein reicht nicht. */
.chat-zeile.aktiv { background: var(--accent-soft); border-color: var(--accent); font-weight: 700; }
.chat-zeile-name { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis;
  white-space: nowrap; }
.chat-treffer { flex: 0 1 auto; color: var(--text-2); font-size: 12px;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* Anwesenheit: ein Punkt, und daneben steht für Hilfsmittel das Wort.
   Ein Punkt allein wäre eine reine Farbcodierung. */
.chat-punkt { width: 9px; height: 9px; flex: 0 0 9px; border-radius: 50%;
  border: 1px solid var(--lotse-linie); }
.chat-punkt.an { background: var(--ok); border-color: var(--ok); }
.chat-punkt.aus { background: transparent; }
.chat-zaehler { flex: 0 0 auto; min-width: 22px; padding: 1px 7px; border-radius: 999px;
  background: var(--accent); color: var(--accent-ink); font-size: 11px; font-weight: 800;
  text-align: center; }
.chat-stumm { flex: 0 0 auto; font-size: 12px; }

.chat-verlauf-kopf { display: flex; flex-wrap: wrap; align-items: center; gap: 10px;
  padding: 10px 14px; border-bottom: 1px solid var(--lotse-linie); background: var(--surface-2); }
.chat-verlauf-kopf strong { flex: 1 1 auto; min-width: 0; }
.chat-mitglieder { color: var(--text-2); font-size: 12px; }
.chat-zurueck { display: none; }
.chat-verlauf { flex: 1 1 auto; min-height: 240px; max-height: 52vh; overflow-y: auto;
  padding: 14px; display: flex; flex-direction: column; gap: 10px; }
.chat-nachricht { max-width: 44rem; padding: 9px 12px; border-radius: var(--r1, 12px);
  background: var(--surface-2); border: 1px solid var(--lotse-linie); }
/* Eigene Nachrichten rücken ein und tragen die Akzentfläche — Position UND
   Farbe, damit die Unterscheidung nicht allein an der Farbe hängt. */
.chat-nachricht.eigen { align-self: flex-end; background: var(--accent-soft);
  border-color: var(--accent); }
.chat-nachricht.zurueckgezogen { opacity: .7; font-style: italic; }
.chat-kopf { display: flex; gap: 10px; align-items: baseline; margin: 0 0 4px;
  font-size: 12px; color: var(--text-2); }
.chat-kopf strong { color: var(--text); font-size: 12.5px; }
.chat-text { margin: 0; line-height: 1.5; white-space: pre-wrap; overflow-wrap: anywhere; }
.chat-zitat { display: block; margin-bottom: 6px; padding-left: 8px;
  border-left: 3px solid var(--accent); color: var(--text-2); font-size: 12px; }
.chat-bezuege, .chat-nachricht-aktionen { display: flex; flex-wrap: wrap; gap: 6px; margin: 8px 0 0; }
.chat-bezug { min-height: 32px; padding: 0 10px; border-radius: 999px;
  border: 1px solid var(--accent); background: transparent; color: var(--accent-text);
  font: inherit; font-size: 12px; cursor: pointer; }
.chat-nachricht-aktionen .ghost-button { min-height: 32px; padding: 0 10px; font-size: 12px; }
.chat-rollen { color: var(--text-2); font-size: 12px; }
.chat-composer { display: flex; gap: 8px; align-items: flex-end;
  padding: 10px 14px; border-top: 1px solid var(--lotse-linie); background: var(--surface-2); }
.chat-composer textarea { flex: 1 1 auto; min-width: 0; resize: vertical; }
.chat-composer[hidden] { display: none; }
.komm-ausschnitt { color: var(--text-2); font-size: 12px; }

@media (max-width: 720px) {
  /* Einspaltig: entweder Liste oder Unterhaltung, nie beides nebeneinander. */
  .chat-flaeche[data-mobil="liste"] .chat-verlauf-spalte { display: none; }
  .chat-flaeche[data-mobil="verlauf"] .chat-liste-spalte { display: none; }
  .chat-zurueck { display: inline-flex; }
  .chat-verlauf { max-height: none; }
  .chat-nachricht { max-width: 100%; }
}

/* ══════════════════════════════════════════════════════════════════════════
 * E-Mail
 * ══════════════════════════════════════════════════════════════════════════
 *
 * Bewusst NUR das Nötige: die Zweispaltigkeit, die Kopfzeilen und der
 * Zustandsstreifen. Alles andere teilt sich Mail mit dem Chat
 * (`.chat-flaeche`, `.chat-liste-spalte`, `.chat-zeile`) — es ist dieselbe
 * Aufgabe, also darf es nicht anders aussehen. Ein eigener Satz Klassen für
 * Mail wäre eine zweite Grammatik für dasselbe.
 */
.mail-kopfschalter { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
.mail-kopfschalter select { min-height: 40px; max-width: 100%; }

/* Der Zustandsstreifen. Er steht ÜBER dem Postfach, nicht darunter: wer
   gegen eine synthetische Gegenstelle arbeitet, soll es lesen, bevor er
   schreibt. */
.mail-zustand { margin: 0 0 12px; padding: 10px 14px; border-radius: var(--radius-m, 18px);
  border: 1px solid var(--lotse-linie); background: var(--surface-2);
  color: var(--text-2); font-size: 13px; }
.mail-zustand[data-zustand="TEST_ONLY"] { border-color: var(--accent);
  color: var(--accent-text); }
.mail-zustand[data-zustand="ACTIVE"] { border-color: var(--lotse-linie); }

.mail-lesen { flex: 1 1 auto; min-height: 0; overflow: auto; padding: 14px; }
.mail-kopfzeilen { display: grid; gap: 4px; padding-bottom: 10px;
  border-bottom: 1px solid var(--lotse-linie); font-size: 13px; }
.mail-kopfzeilen .schwach { color: var(--text-2); }
/* Nur Text, und zwar umbrechend. `pre` steht hier, weil eine Mail ihre
   Zeilenumbrüche selbst mitbringt — sie zu schlucken änderte den Inhalt. */
.mail-koerper { margin: 12px 0 0; white-space: pre-wrap; word-break: break-word;
  font: inherit; color: var(--text); }
.mail-anhaenge { margin: 12px 0 0; padding: 0; list-style: none; display: grid; gap: 6px;
  font-size: 13px; }
.mail-art { border: 1px solid var(--lotse-linie); border-radius: var(--radius-m, 18px);
  padding: 10px 14px; }
.mail-art legend { padding: 0 6px; font-size: 13px; color: var(--text-2); }
.mail-art label { display: flex; gap: 8px; align-items: center; min-height: 40px; }
.chat-zeile.ungelesen strong { font-weight: 700; }
.chat-zeile-text.schwach { color: var(--text-2); }

/* ══════════════════════════════════════════════════════════════════════════
 * Die gemeinsame Kartengrammatik
 * ══════════════════════════════════════════════════════════════════════════
 *
 * Korrekturauftrag vom 19.08.2026: eine gemeinsame Kartengrammatik mit sechs
 * benannten Flächen — und ausdrücklich: „Kartensuppe vermeiden".
 *
 * ── Was Kartensuppe ist, an einem gemessenen Beispiel ──────────────────
 *
 * Im Bild `bilder/design/before/01-arbeitstisch-kindermitarbeit-desktop-
 * light.png` stehen unter „Was steht als Nächstes an?" VIER gleich laute
 * Kästen nebeneinander: Weiterarbeiten, Als Nächstes, Zuletzt bearbeitet,
 * Schnell starten. Drei davon berichten nur, dass nichts da ist. Jeder hat
 * denselben Rahmen, denselben Schatten, dieselbe Hebung beim Überfahren und
 * einen eigenen Klapppfeil.
 *
 * Das Ergebnis ist nicht „viel Inhalt", sondern viel Rahmen. Das Auge findet
 * keinen Anfang, weil alles gleich laut ist. Und es sind Karten IN einer
 * Karte — die Tafel selbst ist schon eine.
 *
 * ── Die Regel dagegen ──────────────────────────────────────────────────
 *
 *   Eine Fläche ist so laut, wie ihr Inhalt wiegt.
 *
 * Das ist keine Geschmacksfrage, sondern eine Rangfolge: was jemand tun
 * muss, ist lauter als was ihn nur informiert. Deshalb sechs Flächen mit
 * verschiedenen Stimmen und nicht eine Karte für alles:
 *
 *   LEAD         Die tragende Fläche einer Ansicht. Sie darf Rahmen und
 *                Fläche haben; es gibt höchstens eine je Bereich.
 *   AKTION       Kompakt, aber betont: hier startet jemand etwas.
 *   STATUS       Kompakt und LEISE. Sie berichtet nur. Kein eigener Rahmen,
 *                kein Schatten, keine Hebung — sie sitzt auf der Tafel, statt
 *                sich davon abzuheben.
 *   FORTSCHRITT  Eine Liste mit Rangfolge (die vorrangigen Karten).
 *   ERFASSUNG    Schnelles Eintragen. Fläche wie AKTION, aber ohne Rahmen:
 *                ein Eingabefeld ist schon ein Rahmen.
 *   STREIFEN     Eine schmale Leiste am Rand des Bildschirms (Arbeitstisch).
 *
 * ── Der Teil, der wirklich Ruhe bringt ─────────────────────────────────
 *
 * Eine LEERE Statusfläche wird zu EINER ZEILE. Kein Kasten, keine Höhe, kein
 * Klapppfeil für nichts. Aus drei leeren Kästen wird eine ruhige Zeile.
 * Sobald etwas darin steht, ist die Fläche wieder da — ohne dass jemand
 * etwas umschaltet.
 *
 * Umgesetzt über `:has()`: die Fläche fragt ihren eigenen Inhalt. Ein
 * Schalter in JavaScript wäre eine zweite Wahrheit über denselben Zustand.
 */

/* Der gemeinsame Rumpf. Was ALLE Flächen teilen, steht hier genau einmal —
   die Varianten darunter ändern nur, was sich wirklich unterscheidet. */
[data-flaeche] { position: relative; min-width: 0; }

/* BEFUND vom 20.08.2026, gefunden vom neuen Browserlauf „Arbeitstisch":
 *
 * Diese eine Zeile hat die Leiste des Arbeitstisches vom unteren Rand
 * geloest. `.vorgangsleiste` setzt `position:fixed` (oben in dieser Datei),
 * `[data-flaeche]` hat dieselbe Gewichtung und steht WEITER UNTEN — also
 * gewinnt es. Die Leiste stand damit im normalen Fluss ganz am Ende der
 * Seite: gemessen endete sie auf dem Telefon bei 1773px in einem 844px hohen
 * Fenster. Man musste bis ans Seitenende scrollen, um seine offenen
 * Arbeitstische zu sehen.
 *
 * Sichtbar war das nie, weil die Leiste sich ausblendet, solange nur die
 * Uebersicht offen ist — und kein Browserlauf hat je einen Arbeitstisch
 * geoeffnet. Im Quelltext sah beides richtig aus.
 *
 * Die Wiederherstellung steht hier und nicht oben: eine Regel VOR der
 * Grunddefinition waere wirkungslos, und genau dieser Fehler ist am
 * 20.08.2026 schon zweimal passiert. Mit dem Merkmal zusammen ist sie
 * ausserdem spezifischer und damit von der Reihenfolge unabhaengig. */
.vorgangsleiste[data-flaeche] { position: fixed; }

/* ── LEAD ─────────────────────────────────────────────────────────────── */
[data-flaeche="LEAD"] { padding: 22px 24px; }
[data-flaeche="LEAD"] > .panel-head { margin-bottom: 6px; }

/* ── AKTION ───────────────────────────────────────────────────────────── */
[data-flaeche="AKTION"] {
  border: 1px solid var(--lotse-linie-2, #dbe7e4);
  background: var(--lotse-flaeche-2, #f6fbfa);
}

/* ── STATUS · die leise Fläche ────────────────────────────────────────── */
[data-flaeche="STATUS"] {
  border: 0;
  box-shadow: none;
  background: transparent;
  padding-inline: 0;
}
/* Keine Hebung beim Überfahren: eine Fläche, die nur berichtet, reagiert
   nicht wie ein Knopf. Das ist auch eine ehrliche Auskunft — sie ist keiner. */
[data-flaeche="STATUS"]:hover { transform: none; box-shadow: none; }
/* Statt eines Rahmens eine Haarlinie zwischen den Flächen. Sie trennt, ohne
   jede Fläche einzeln einzurahmen. */
.dashboard-grid > [data-flaeche="STATUS"] + [data-flaeche="STATUS"] {
  border-left: 1px solid var(--lotse-linie-2, #e4eeec);
  padding-left: 16px;
}
@media (max-width: 900px) {
  .dashboard-grid > [data-flaeche="STATUS"] + [data-flaeche="STATUS"] {
    border-left: 0; border-top: 1px solid var(--lotse-linie-2, #e4eeec);
    padding-left: 0; padding-top: 12px;
  }
}

/* Die leere Statusfläche · leise statt weg.
 *
 * Erster Versuch am 19.08.2026 war, sie mit `display:inline` auf EINE Zeile
 * zu legen. Das Bild danach
 * (`bilder/design/after/` im ersten Lauf) hat es widerlegt: die Rasterzelle
 * bleibt stehen, der Leersatz behält seine Kastenform, und Beschriftung und
 * Text schoben sich ineinander. Ein Umbau, der im Kopf funktioniert und im
 * Bild nicht, ist keiner — deshalb steht hier jetzt die einfachere Fassung,
 * und der Irrweg steht daneben.
 *
 * Was bleibt, ist die Absicht: eine Fläche ohne Inhalt soll nicht so
 * aussehen wie eine mit. Sie behält ihren Platz im Raster — sonst springt
 * das Layout, sobald etwas hineinkommt — und verliert ihre Lautstärke:
 * der Leersatz ist ein Satz und kein zweiter Kasten in der Karte. */
[data-flaeche="STATUS"] > div > .dialog-note:only-child {
  background: transparent;
  border: 0;
  padding: 0;
  color: var(--lotse-text-3, #6c8480);
}
/* Und kein Klapppfeil für eine leere Fläche: was nichts zeigt, muss man
   nicht zuklappen können. */
[data-flaeche="STATUS"]:has(> div > .dialog-note:only-child) > .karte-klapp {
  display: none;
}

/* ── FORTSCHRITT ──────────────────────────────────────────────────────── */
[data-flaeche="FORTSCHRITT"] { padding: 20px 22px; }
[data-flaeche="FORTSCHRITT"] .task-rail-list { display: grid; gap: 10px; }

/* ── ERFASSUNG ────────────────────────────────────────────────────────── */
[data-flaeche="ERFASSUNG"] {
  border: 0; box-shadow: none;
  background: var(--lotse-flaeche-2, #f6fbfa);
  padding: 14px 16px;
}

/* ── STREIFEN ─────────────────────────────────────────────────────────── */
[data-flaeche="STREIFEN"] { box-shadow: var(--sh-2); }

/* Eine Tafel, die Statusflächen trägt, braucht innen keine zweite Fläche:
   die Karten sitzen direkt auf ihr. Das ist der Unterschied zwischen einer
   Tafel mit vier Zetteln und vier Zetteln mit je eigenem Rahmen. */
.dashboard-hero:has([data-flaeche="STATUS"]) .dashboard-grid { gap: 0 18px; }

/* Die Aktionsfläche der Tafel nimmt die ganze Zeile.
   Grund im Bild: bei drei Rasterspalten und vier Flächen rutscht sie allein
   in die zweite Zeile und lässt zwei Drittel der Breite leer stehen — ein
   Knopfblock, der wie ein vergessener Rest aussieht. Über die volle Breite
   legen sich die Startknöpfe nebeneinander, und die Zeile ist gefüllt statt
   halb leer. */
.dashboard-grid > [data-flaeche="AKTION"] { grid-column: 1 / -1; }
.dashboard-grid > [data-flaeche="AKTION"] .dashboard-quick-actions {
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
}
@media (max-width: 720px) {
  .dashboard-grid > [data-flaeche="AKTION"] .dashboard-quick-actions {
    grid-template-columns: 1fr;
  }
}

/* ═══════════════════════════════════════════════════════════════════════════
 * Bibel & Recherchen · Designvorgabe 08 „Ruhe"
 * ═══════════════════════════════════════════════════════════════════════════
 *
 * Übernommen wird die RUHE, nicht die Menge. Die Vorgabe nennt drei Dinge,
 * die hier gebaut sind und nicht bloß beabsichtigt:
 *
 *   · „Lesebreite, Typografie, Line Height und Fokus wichtiger als
 *     Tool-Dichte." Der Lesetext bekommt deshalb eine echte Lesebreite
 *     (66 Zeichen), eine Serifenschrift und eine großzügige Zeilenhöhe —
 *     dieselben Werte, die auch ein Buch benutzt.
 *
 *   · „Positionen klar getrennt, nicht als bunte Badge-Wand." Die
 *     Suchschritte stehen untereinander mit einer Haarlinie, ohne Farbe und
 *     ohne Rahmen. Eine Farbe wäre hier eine Wertung.
 *
 *   · „Mobile ist kein geschrumpfter Desktop." Aus der Leseleiste wird am
 *     Telefon ein Stapel, und die Blätterknöpfe werden groß genug für einen
 *     Daumen. Der Lesetext behält seine Zeilenhöhe — er ist das, wofür man
 *     die Ansicht überhaupt öffnet.
 *
 * Alle Farben kommen aus der Foundation. Es steht hier kein Farbwert.
 */

/* ── Weiterarbeiten · die eine dominante Fläche ───────────────────────── */
.weiterarbeiten-liste { display: grid; gap: 10px; margin-top: 6px; }
.weiterarbeiten-knopf {
  display: grid; gap: 4px; width: 100%; text-align: left; cursor: pointer;
  border: 1px solid var(--lotse-linie-2, #dbe7e4);
  border-radius: 15px; padding: 13px 15px;
  background: var(--lotse-flaeche-2, #f6fbfa); color: inherit;
}
.weiterarbeiten-knopf strong { font-size: 15px; }
.weiterarbeiten-knopf span { font-size: 12px; color: var(--lotse-text-3, #6c8480); }
.weiterarbeiten-knopf:focus-visible { outline: 2px solid currentColor; outline-offset: 2px; }

/* Die drei Einstiege. Sie stehen NEBEN der Leitfläche und nicht als drei
   gleich große Karten darüber — sonst wären es drei Aufmacher statt einem. */
.einstieg-titel { margin: 18px 0 8px; font-size: 13px; font-weight: 750; }
.einstiege { display: flex; flex-wrap: wrap; gap: 8px; }
.einstieg {
  border: 1px solid currentColor; border-radius: 999px;
  padding: 9px 14px; background: transparent; color: inherit;
  font-weight: 700; font-size: 13px; cursor: pointer; opacity: .9;
}
.einstieg:hover { opacity: 1; }
.einstieg:focus-visible { outline: 2px solid currentColor; outline-offset: 2px; }

/* ── Der Lesetext ────────────────────────────────────────────────────── */
.leser-leiste { display: grid; grid-template-columns: minmax(0,1fr) minmax(0,1fr) auto;
  gap: 10px; align-items: end; }
.lesetext {
  /* Die Lesebreite. 66 Zeichen ist die Spanne, in der ein Auge die naechste
     Zeile ohne Suchen findet — enger wird es hektisch, breiter verliert man
     den Anschluss. */
  max-width: 66ch; margin: 14px 0 0;
  font-family: Georgia, 'Iowan Old Style', serif;
  font-size: 18px; line-height: 1.75;
}
.lesevers { margin: 0 0 .55em; }
.versnummer {
  font-family: system-ui, sans-serif; font-size: 11px; font-weight: 800;
  color: var(--lotse-text-3, #6c8480); vertical-align: super; margin-right: .3em;
}
.leser-blaettern { display: flex; gap: 8px; margin-top: 16px; }

/* Buch und Kapitel. Zwei Felder, kein Knopf — die Auswahl schlaegt selbst
   auf. Deshalb eine eigene Spaltenaufteilung statt der dreispaltigen
   Leiste mit Abschluss-Knopf. */
.leser-buchwahl { grid-template-columns: minmax(0,2fr) minmax(0,1fr); margin-top: 10px; }

/* Die Stelle ueber dem Text und die Zuschreibung darunter. Beide gehoeren
   zum Text und nicht zum Werkzeug: die Stelle sagt, was man liest, die
   Zuschreibung, wessen Uebersetzung man liest. Letztere ist Pflicht —
   `bibelleser.mjs` sagt dazu: „Ein Bibeltext ohne Zuschreibung auf dem
   Bildschirm ist ein Lizenzverstoss, der wie ein Layoutdetail aussieht." */
.lese-stelle { margin: 0 0 10px; font-family: system-ui, sans-serif;
  font-size: 12px; font-weight: 800; text-transform: uppercase;
  letter-spacing: .07em; color: var(--lotse-text-3, #6c8480); }
.lese-zuschreibung { margin: 18px 0 0; font-family: system-ui, sans-serif;
  font-size: 12px; line-height: 1.5; color: var(--lotse-text-3, #6c8480); }

/* Eine gesperrte Handlung ist kein Knopf. Sie steht als Satz da und sagt,
   was fehlt — ein Knopf, der beim Druecken absagt, waere die groessere
   Zumutung. */
.handlung-gesperrt { font-size: 12px; line-height: 1.5;
  color: var(--lotse-text-3, #6c8480); align-self: center; }

/* Ein Suchtreffer traegt seine Stelle und seinen Wortlaut. */
.quellen-zeile-text { font-size: 13px; line-height: 1.6; color: var(--lotse-text-2, #40605b); }

/* Der Fokus. Werkzeuge treten zurueck — der Hinweisbereich NICHT: er traegt
   Rechte-, Fehler- und Ungespeichert-Zustaende, und die duerfen ein
   Darstellungszustand nicht verschlucken. */
[data-fokus="an"] .leser-leiste,
[data-fokus="an"] .leser-blaettern { opacity: .35; }
[data-fokus="an"] .leser-leiste:focus-within,
[data-fokus="an"] .leser-blaettern:focus-within { opacity: 1; }
[data-fokus="an"] .lesetext { font-size: 19px; line-height: 1.85; }

/* ── Recherche ──────────────────────────────────────────────────────── */
.recherche-leiste { display: grid; grid-template-columns: minmax(0,2fr) minmax(0,1fr) auto;
  gap: 10px; align-items: end; }
.recherche-leiste .breit { grid-column: span 1; }
.plan-titel { margin: 14px 0 4px; font-size: 12px; font-weight: 800;
  text-transform: uppercase; letter-spacing: .07em; color: var(--lotse-text-3, #6c8480); }
.plan-liste { margin: 0; padding-left: 1.2em; font-size: 13px; line-height: 1.6; }
.recherche-treffer { display: grid; gap: 0; margin-top: 16px; }
/* Keine Farbe, kein Rahmen, keine Kachel: eine Haarlinie trennt die
   Schritte. Farbige Plaketten waeren eine Wertung, und bewertet wird hier
   nichts. */
.recherche-schritt { padding: 12px 0; border-top: 1px solid var(--lotse-linie-2, #e4eeec); }
.recherche-schritt:first-child { border-top: 0; }
.recherche-schritt h4 { margin: 0 0 6px; font-size: 13px; font-weight: 750; }
.treffer-liste { margin: 0; padding-left: 1.2em; font-size: 13px; line-height: 1.65; }

/* ── Notizheft und die beiden anderen Begleitflaechen ────────────────── */
/* PO-Entscheidung vom 20.08.2026 (V-5, Frage 6 D): „Notiz-Eingabefeld und
   ‚Neue Notiz' optisch logisch zusammenfuehren; keine unnoetige grosse
   Leerstelle dazwischen."

   Das Raster war schon `1fr auto` — die Luecke entstand nicht ZWISCHEN
   beiden, sondern dadurch, dass das Feld die ganze Flaechenbreite nahm und
   den Knopf an den aeusseren Rand schob. Eine Ueberschrift braucht keine
   1200 px. Das Feld bekommt deshalb ein Mass, und beide stehen zusammen. */
.notiz-leiste { display: grid; grid-template-columns: minmax(0,34rem) auto; gap: 10px;
  align-items: end; justify-content: start; }

/* ── Die Arbeitsflaeche des Notizhefts (§29) ─────────────────────────────
   Liste und Editor sind getrennt — auch sichtbar, nicht nur im Markup. */
.notiz-arbeitsflaeche { margin-top: 16px; padding-top: 14px;
  border-top: 2px solid var(--lotse-linie-2, #e4eeec); display: grid; gap: 10px; }
.notiz-editor-kopf { display: flex; justify-content: space-between;
  align-items: flex-start; gap: 12px; }
.notiz-editor-kopf h3 { margin: 0; font-family: Georgia, serif; font-size: 18px;
  color: var(--lotse-text-1, #12262c); }
/* Der Titel ist ein Feld und sieht doch wie eine Ueberschrift aus: er WIRD
   bearbeitet (PO-Antwort 5), aber er ist im Ruhezustand die Ueberschrift der
   Notiz und soll nicht wie ein Formular daneben stehen. Der Rahmen kommt,
   wenn man hingeht. */
/* Die Beschriftung rueckt um dieselbe Strecke ein wie das Feld darunter —
   sonst stehen „NOTIZ" und der Titel um acht Pixel versetzt, und das sieht
   man auf dem Bild sofort. */
.notiz-titelfeld { flex: 1 1 auto; min-width: 0; }
.notiz-titelfeld > span { padding-left: 9px; }
.notiz-titelfeld input { font-family: Georgia, serif; font-size: 18px;
  color: var(--lotse-text-1, #12262c); background: transparent;
  border: 1px solid transparent; border-radius: 8px; padding: 4px 8px;
  width: 100%; }
.notiz-titelfeld input:hover { border-color: var(--lotse-linie-2, #e4eeec); }
.notiz-titelfeld input:focus { background: var(--lotse-flaeche-1, #fff);
  border-color: var(--lotse-akzent, #2f6f68); outline: none; }
.notiz-arbeitsflaeche textarea { min-height: 220px; line-height: 1.6;
  font-size: 15px; resize: vertical; }
/* ── Eine Notiz in der Dokumentliste der Schreibwerkstatt ────────────────
   PO-Entscheidung 20.08.2026, Variante C: sie bleibt auffindbar, muss aber
   als Notiz erkennbar sein. Erkennbar heisst hier: das Wort „Notiz" steht in
   der Zeile (das macht die Oberflaeche) UND die Zeile sieht anders aus — ein
   ruhiger Streifen an der Seite. Farbe allein waere keine Kennzeichnung; wer
   sie nicht unterscheiden kann, liest weiterhin das Wort. */
.editor-document-card.ist-notiz { border-left: 3px solid var(--lotse-akzent, #2f6f68); }

/* Die Rich-Text-Flaeche des Notizhefts. Sie ist leer, solange keine Notiz
   offen ist — und dann darf sie auch keinen Platz einnehmen. */
.notiz-reichflaeche:empty { display: none; }
.notiz-reichflaeche { display: grid; gap: 8px; }
.notiz-reichflaeche .gfi-editor-frame { min-height: 220px; }
/* Die Listenzeile ist ein Weg in die Notiz, also auch ein Knopf — und sieht
   nicht aus wie einer, damit die Liste eine Liste bleibt. */
.notiz-oeffnen { display: flex; justify-content: space-between; gap: 12px;
  width: 100%; text-align: left; background: none; border: 0; padding: 0;
  font: inherit; color: inherit; cursor: pointer; }
.notiz-oeffnen:hover strong { text-decoration: underline; }
.notiz-oeffnen:focus-visible { outline: 2px solid var(--brand, #0d776b);
  outline-offset: 3px; border-radius: 6px; }
.notiz-liste { display: grid; gap: 8px; margin-top: 12px; }
.notiz-zeile { display: flex; justify-content: space-between; gap: 12px;
  padding: 9px 0; border-top: 1px solid var(--lotse-linie-2, #e4eeec); font-size: 13px; }
.notiz-zeile span { color: var(--lotse-text-3, #6c8480); font-size: 12px; }

/* ── Tablet ─────────────────────────────────────────────────────────── */
@media (max-width: 1050px) {
  .leser-leiste, .recherche-leiste { grid-template-columns: minmax(0,1fr) minmax(0,1fr); }
  .leser-leiste button, .recherche-leiste button { grid-column: 1 / -1; }
  .lesetext { max-width: 60ch; }
}

/* ── Telefon · kein geschrumpfter Desktop ───────────────────────────── */
@media (max-width: 720px) {
  /* Aus der Leiste wird ein Stapel. Zwei Felder nebeneinander sind auf
     einem Telefon zwei halbe Felder. */
  .leser-leiste, .recherche-leiste, .notiz-leiste { grid-template-columns: 1fr; }
  .leser-leiste button, .recherche-leiste button, .notiz-leiste button { width: 100%; }
  /* Der Text behaelt seine Zeilenhoehe. Er ist das, wofuer man die Ansicht
     ueberhaupt oeffnet — er wird nicht zusammengedrueckt, um Werkzeuge
     unterzubringen. */
  .lesetext { max-width: none; font-size: 17px; line-height: 1.8; }
  /* Blaettern mit dem Daumen: volle Breite, echte Trefferflaeche. */
  .leser-blaettern { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
  .leser-blaettern button { width: 100%; padding: 13px 10px; }
  .einstiege { display: grid; grid-template-columns: 1fr; }
  .einstieg { text-align: center; }
}

/* ── Kleines Telefon ────────────────────────────────────────────────── */
@media (max-width: 430px) {
  .lesetext { font-size: 16px; }
  .leser-blaettern { grid-template-columns: 1fr; }
  .weiterarbeiten-knopf { padding: 12px 13px; }
}

/* ═══════════════════════════════════════════════════════════════════════════
 * PHASE C · Die fünf Arbeitswege und die Zeilenaktionen
 * Korrekturdelta 04 · visuelle Review 10
 * ═══════════════════════════════════════════════════════════════════════════
 *
 * Die Review nannte drei Dinge beim Namen, und alle drei sind hier
 * beantwortet:
 *
 *   „Alles-auf-einer-Seite" → ein lokaler Wegwechsler, immer nur einer offen
 *   „Recherche wirkt formular-/planlastig" → der Plan klappt auf
 *   „Bibel lesen ist visuell nicht dominant genug" → der Lesetext wird größer
 *
 * Die Wegleiste benutzt die VORHANDENE Reitermechanik (`work-object-tabs`).
 * Hier stehen nur die Abweichungen, die dieser Bereich wirklich braucht.
 */

.bibel-wege { margin: 0 0 16px; }

/* ── Der Lesetext wird die Hauptsache ─────────────────────────────────
   Review 10 §2: „Fachlich ist der Bibeltext der Ausgangspunkt. Der
   eigentliche Text-/Lesebereich muss im Nutzungskontext die Hauptfläche
   werden." Also bekommt er mehr Raum und mehr Ruhe als das Formular
   darüber — und das Formular wird leiser, sobald Text da steht. */
#bibelLeserSurface .lesetext { font-size: 19px; line-height: 1.8; margin-top: 20px; }
#bibelLeserSurface .lesetext:not(:empty) ~ .leser-blaettern { margin-top: 22px; }
#bibelLeserSurface:has(.lesetext:not(:empty)) .leser-leiste { opacity: .72; }
#bibelLeserSurface:has(.lesetext:not(:empty)) .leser-leiste:focus-within { opacity: 1; }

/* ── Aufklappbares ───────────────────────────────────────────────────
   Der Suchplan, das freie Studium und die Quellenvorlieben. Alle drei sind
   erklärbar und keines ist der Hauptweg. */
.aufklappen { margin-top: 16px; border-top: 1px solid var(--lotse-linie-2, #e4eeec); padding-top: 12px; }
.aufklappen > summary {
  cursor: pointer; font-size: 13px; font-weight: 750; list-style: none;
  padding: 6px 0; color: var(--lotse-text-3, #6c8480);
}
.aufklappen > summary::-webkit-details-marker { display: none; }
.aufklappen > summary::before { content: '▸ '; display: inline-block; width: 1em; }
.aufklappen[open] > summary::before { content: '▾ '; }
.aufklappen > summary:focus-visible { outline: 2px solid currentColor; outline-offset: 2px; }

/* ── Zeilenaktionen ──────────────────────────────────────────────────
   „Progressive Disclosure statt Buttonwand." Die Handlungen stehen an der
   Zeile, zu der sie gehören, und sie sind leise: sie treten hervor, wenn
   man auf die Zeile zeigt oder mit der Tastatur hineingeht — nicht vorher.
   Auf Zeigegeräten ohne Überfahren (Telefon) sind sie IMMER sichtbar; eine
   Handlung, die man nur mit der Maus findet, gibt es dort nicht. */
.zeilenaktionen { display: flex; gap: 6px; flex-wrap: wrap; align-items: center; }
.ghost-button.klein { padding: 5px 9px; font-size: 12px; border-radius: 9px; }
.treffer-liste li { display: flex; justify-content: space-between; gap: 12px; align-items: baseline; }
.trefferzeile { min-width: 0; }

@media (hover: hover) {
  .treffer-liste .zeilenaktionen,
  .work-item .zeilenaktionen { opacity: 0; transition: opacity .12s ease; }
  .treffer-liste li:hover .zeilenaktionen,
  .treffer-liste li:focus-within .zeilenaktionen,
  .work-item:hover .zeilenaktionen,
  .work-item:focus-within .zeilenaktionen { opacity: 1; }
}

/* ── Ein Maschinenvorschlag sieht aus wie einer ──────────────────────
   Er trägt keine Farbe, die ihn bewertet — nur eine Kursive, die sagt: das
   hat niemand entschieden. */
.vorschlagsmarke { font-style: italic; font-size: 12px; color: var(--lotse-text-3, #6c8480); }

/* ── Die Vorbereitung ────────────────────────────────────────────────
   Jeder Bestandteil mit seiner Anzahl. Eine Sicht auf Vorhandenes soll
   aussehen wie eine Sicht und nicht wie ein neuer Bestand. */
.vorbereitung-inhalt { margin-top: 16px; display: grid; gap: 4px; }
.vorbereitung-teil { padding: 10px 0; border-top: 1px solid var(--lotse-linie-2, #e4eeec); }
.vorbereitung-teil h4 { margin: 0 0 6px; font-size: 13px; font-weight: 750; }
.vorbereitung-teil .anzahl {
  font-weight: 800; font-size: 11px; color: var(--lotse-text-3, #6c8480); margin-left: .4em;
}
.position { padding: 8px 0; }
.position > strong { font-size: 13px; }

/* ── Telefon ─────────────────────────────────────────────────────────
   Die Wegleiste wird eine wischbare Zeile statt fünf gequetschter Reiter.
   Review 10 §6: „keine unlesbaren Zwei-Spalten-Splits auf Smartphone." */
@media (max-width: 720px) {
  .bibel-wege {
    display: flex; overflow-x: auto; gap: 6px;
    scroll-snap-type: x proximity; -webkit-overflow-scrolling: touch;
  }
  .bibel-wege .work-object-tab { flex: 0 0 auto; scroll-snap-align: center; }
  .treffer-liste li { display: grid; gap: 6px; }
  .zeilenaktionen { justify-content: flex-start; }
  .work-item .zeilenaktionen { grid-column: 1 / -1; }
}

/* ═══════════════════════════════════════════════════════════════════════════
 * PHASE D · Parallelquellen, Auswahlaktionen, Arbeitsübersetzung
 * Erweiterungsdelta 05
 * ═══════════════════════════════════════════════════════════════════════════ */

/* ── Zwei Quellen nebeneinander ──────────────────────────────────────
   Delta 05 §E: „Desktop: Side-by-side. Tablet: Split oder umschaltbare
   Pane-Struktur. Smartphone: keine zwei unlesbaren Minispalten; stattdessen
   Switcher/Stack/Sheet."

   Die Regel ist nicht die Spaltenzahl, sondern die LESBARKEIT: sobald eine
   Spalte unter etwa 34 Zeichen fällt, liest sie sich schlechter als
   nacheinander. Deshalb wird nicht nach Geräteklassen umgeschaltet,
   sondern nach dem Platz, den eine Spalte wirklich bekommt. */
.lesetisch { display: grid; gap: 24px; }
.lesetisch:has(.lesetext-zwei:not([hidden])) { grid-template-columns: 1fr 1fr; }
.lesetext-zwei { border-left: 1px solid var(--lotse-linie-2, #e4eeec); padding-left: 24px; }

@media (max-width: 900px) {
  /* Aus dem Nebeneinander wird ein Untereinander. Der Trennstrich wandert
     mit — er trennt weiterhin, nur in der anderen Richtung. */
  .lesetisch:has(.lesetext-zwei:not([hidden])) { grid-template-columns: 1fr; }
  .lesetext-zwei {
    border-left: 0; padding-left: 0;
    border-top: 1px solid var(--lotse-linie-2, #e4eeec); padding-top: 20px;
  }
}

/* ── Die Auswahlleiste ───────────────────────────────────────────────
   Sie erscheint bei Auswahl und sonst nicht. Sie klebt am unteren Rand des
   Lesebereichs statt am Mauszeiger: eine Leiste, die dem Zeiger folgt,
   verdeckt genau den Text, den man gerade gewählt hat. */
.auswahlleiste {
  position: sticky; bottom: 12px; z-index: 2;
  display: flex; flex-wrap: wrap; gap: 6px;
  margin-top: 14px; padding: 8px 10px; border-radius: 12px;
  border: 1px solid var(--lotse-linie-2, #dbe7e4);
  background: var(--lotse-flaeche-1, #ffffff);
  box-shadow: 0 6px 18px var(--schleier-1, rgba(18, 38, 44, .05));
}

/* ── Die Arbeitsübersetzung sagt, was sie ist ───────────────────────
   Delta 05 §F: „sichtbar als Arbeitsuebersetzung/Derived Aid; nicht als
   kanonische Bibelausgabe."

   Keine Farbe — eine Farbe wäre eine Wertung. Eine Kursive mit einer Linie
   davor: sie liest sich als Beiwerk und nicht als Text. */
.derived-marke {
  font-style: italic; font-size: 12px; margin: 0 0 10px;
  padding-left: 10px; border-left: 3px solid var(--lotse-linie-2, #dbe7e4);
  color: var(--lotse-text-3, #6c8480);
}

@media (max-width: 720px) {
  .auswahlleiste { bottom: 84px; }   /* über der Wegeleiste am unteren Rand */
}

/* ═══════════════════════════════════════════════════════════════════════════
 * V-4 · Der Rueckmeldeknopf ueber der unteren Leiste
 * ═══════════════════════════════════════════════════════════════════════════
 *
 * BEFUND vom 20.08.2026 (PO-Frage 6 D): auf dem Telefon lag der Knopf ueber
 * der unteren Navigationsleiste und verdeckte ein Ziel.
 *
 * ZWEI EIGENE FEHLVERSUCHE, beide im Bildschirmfoto sichtbar geblieben:
 *
 *   1. Die Regel stand in einem Medienblock VOR `.melde-knopf{bottom:20px}`.
 *      Bei gleicher Spezifitaet gewinnt die spaetere — wirkungslos.
 *   2. Danach stand sie zwar dahinter, aber weiter unten folgt noch
 *      `@media (max-width:640px){ .melde-knopf{ bottom:14px } }`. Auf einem
 *      390 px breiten Telefon gewann wieder die spaetere Regel.
 *
 * Deshalb steht diese Regel als LETZTE der Datei. Wer nach ihr noch eine
 * schreibt, tut es bewusst.
 *
 * UND: die Hoehe wird nicht mehr geschaetzt. Gemessen waren es 126 px und
 * nicht die angenommenen 70 — die Leiste traegt auf dem Telefon zwei Zeilen.
 * `--untere-leiste` wird in `app.js` aus der tatsaechlichen Hoehe gesetzt und
 * bei jeder Aenderung nachgefuehrt; der Rueckfallwert gilt nur, solange noch
 * nichts gemessen wurde.
 * ═══════════════════════════════════════════════════════════════════════════ */
@media (max-width: 720px) {
  .melde-knopf {
    bottom: calc(var(--untere-leiste, 70px) + 12px + env(safe-area-inset-bottom, 0px));
  }
}

/* ── Der Quellenleser ─────────────────────────────────────────────────
   Review-Vorgabe: „Der eigentliche Inhalt ist die Hauptfläche.
   Metadaten/Rights/Provenance dürfen den Inhalt nicht verdrängen." Also
   eine Zeile Herkunft, dann der Text — und keine Kartenwand daneben. */
.quellen-leser { margin-top: 20px; border-top: 1px solid var(--lotse-linie-2, #e4eeec);
  padding-top: 14px; }
.quellen-herkunft { margin: 0 0 12px; font-family: system-ui, sans-serif; font-size: 12px;
  line-height: 1.5; color: var(--lotse-text-3, #6c8480); }
.quellen-inhalt { margin-top: 8px; }
.quellen-text {
  max-width: 74ch; margin: 0; padding: 16px 18px;
  background: var(--lotse-flaeche-2, #f6faf9);
  border-radius: 14px;
  font-family: Georgia, 'Iowan Old Style', serif; font-size: 15px; line-height: 1.7;
  white-space: pre-wrap; word-break: break-word;
  max-height: 60vh; overflow: auto;
}
.quellen-rahmen { width: 100%; height: 70vh; border: 1px solid var(--lotse-linie-2, #e4eeec);
  border-radius: 14px; background: var(--lotse-flaeche, #ffffff); }
.quellen-fundstelle { margin-top: 16px; grid-template-columns: minmax(0,1fr) minmax(0,1fr) auto; }
@media (max-width: 760px) {
  .quellen-text { font-size: 14px; max-height: 50vh; }
  .quellen-rahmen { height: 56vh; }
}

/* Der geöffnete Bibliothekseintrag. Kein eigenes Panel: er hängt unter der
   Trefferliste, weil er zu dem Treffer gehört, den man angeklickt hat. */
.werk-block { margin-top: 16px; padding-top: 12px;
  border-top: 1px solid var(--lotse-linie-2, #e4eeec); }
.werk-block h4 { margin: 0 0 4px; font-size: 15px; }

/* ═══════════════════════════════════════════════════════════════════════════
 * N2 · Der Gottesdienstplan als ruhiger Ablauf
 * PO-Auftrag 21.08.2026, Abschnitt 18.1
 * ═══════════════════════════════════════════════════════════════════════════
 *
 * Kein Redesign. Was hier steht, ordnet vorhandene Bausteine — ein Termin,
 * darunter seine Beiträge in Reihenfolge. Die Ruhe entsteht durch WENIGER:
 * die Uhrzeit steht einmal oben und nicht an jedem Beitrag.
 *
 * Farben kommen ausschliesslich aus den Marken der Foundation. Kein zweiter
 * Farbort — genau der Befund, der am 21.08.2026 am Quellenrahmen stand.
 */
.ablauf { margin: 0 0 18px; border-radius: var(--r2, 12px);
  background: var(--lotse-flaeche-2, #f4f8f7);
  border: 1px solid var(--lotse-linie-2, #e4eeec); overflow: hidden; }
.ablauf-kopf { display: flex; align-items: baseline; justify-content: space-between;
  gap: 12px; padding: 12px 16px;
  border-bottom: 1px solid var(--lotse-linie-2, #e4eeec); }
.ablauf-kopf strong { font-size: 15px; }
.ablauf-zahl { font-size: 12.5px; color: var(--lotse-text-3, #6b7f7c);
  white-space: nowrap; }
/* Eine geordnete Liste, weil der Ablauf eine ist. Die Zahl steht vorne und
   ist nicht bloss Zierde: sie ist die Reihenfolge, in der es geschieht. */
.ablauf-liste { list-style: decimal; margin: 0; padding: 6px 10px 10px 38px; }
.ablauf-liste > li { margin: 0; padding: 0; }
.ablauf-liste > li::marker { color: var(--lotse-text-3, #6b7f7c);
  font-size: 12.5px; font-weight: 700; }
.ablauf-liste .work-item { background: var(--lotse-flaeche, #ffffff);
  margin: 6px 0; border-radius: var(--r2, 12px); }

/* ─── Schnell erfassen ─── */
.dienst-erfassen, .dienst-funktionen { margin: 0 0 18px; }
.dienst-erfassen textarea { width: 100%; min-height: 118px; resize: vertical;
  font: inherit; line-height: 1.55;
  border-radius: var(--r2, 12px); border: 1px solid var(--lotse-linie-2, #e4eeec);
  background: var(--lotse-flaeche, #ffffff); color: inherit; padding: 10px 12px; }
.nurfeld-breit { grid-column: 1 / -1; }
.dienst-erfassen-knoepfe { display: flex; gap: 10px; flex-wrap: wrap;
  align-items: center; margin-top: 10px; }

/* ─── Der Vorschlag ─── */
.dienst-vorschlag { margin-top: 14px; padding: 12px 14px;
  border-radius: var(--r2, 12px);
  border: 1px dashed var(--lotse-linie-2, #e4eeec);
  background: var(--lotse-flaeche-2, #f4f8f7); }
.vorschlag-liste { list-style: decimal; margin: 10px 0 0; padding-left: 26px; }
.vorschlag-zeile { display: grid; gap: 8px 14px; margin: 0 0 10px;
  grid-template-columns: minmax(0, 2fr) minmax(0, 1fr); align-items: end; }
.vorschlag-zeile .dialog-note,
.vorschlag-gelesen { grid-column: 1 / -1; font-size: 12.5px;
  color: var(--lotse-text-3, #6b7f7c); }
.vorschlag-zeile input, .vorschlag-zeile select { width: 100%; }

/* ─── 18.7 · Leerzustand ───────────────────────────────────────────────
 *
 * BEFUND vom 21.08.2026: `.leerzustand` wurde an mehreren Stellen im
 * Programmtext gesetzt und hatte in KEINER Stilvorlage eine Regel. Ein
 * Leerzustand sah deshalb aus wie ein vergessener Absatz.
 *
 * Er sagt jetzt zweierlei: dass nichts da ist, und was zu tun waere.
 */
.leerzustand { padding: 18px 16px; border-radius: var(--r2, 12px);
  background: var(--lotse-flaeche-2, #f4f8f7);
  border: 1px dashed var(--lotse-linie-2, #e4eeec);
  color: var(--lotse-text-2, #43514f); }
.leerzustand strong { display: block; margin-bottom: 4px; color: var(--lotse-ink, #12211f); }
.leerzustand p { margin: 0; font-size: 13.5px; color: var(--lotse-text-3, #6b7f7c); }

/* ─── 18.5 · Schmale Anzeigen ──────────────────────────────────────────
 *
 * „Responsive bedeutet echte Anpassung, nicht blosse Verkleinerung."
 * Auf 390px steht die Auswahl UNTER dem Namen statt daneben — zwei Spalten
 * auf dieser Breite ergaeben zwei zu enge Spalten und keine Uebersicht.
 * Die Knoepfe werden voll breit: ein Ziel, das man mit dem Daumen trifft.
 */
@media(max-width:720px){
  .vorschlag-zeile { grid-template-columns: 1fr; align-items: stretch; }
  .ablauf-liste { padding-left: 30px; }
}
@media(max-width:430px){
  .ablauf-kopf { flex-direction: column; gap: 2px; }
  .dienst-erfassen-knoepfe { display: grid; }
  .dienst-erfassen-knoepfe button { width: 100%; min-height: 44px; }
  .ablauf-liste { padding: 6px 8px 8px 26px; }
  .leerzustand { padding: 14px 12px; }
}

/* ─── R-7 · Sammlungen ─────────────────────────────────────────────────
 *
 * Eine Leiste ueber der Liste: welche Sammlung gerade gilt, und daneben der
 * Weg zu einer neuen. Bewusst KEIN eigenes Panel — die Sammlung gehoert zu
 * den Fundstuecken darunter und nicht neben sie.
 */
.sammlung-leiste { display: flex; gap: 16px; flex-wrap: wrap; align-items: end;
  margin: 0 0 14px; padding: 12px 14px; border-radius: var(--r2, 12px);
  background: var(--lotse-flaeche-2, #f4f8f7);
  border: 1px solid var(--lotse-linie-2, #e4eeec); }
.sammlung-leiste .nurfeld { min-width: 180px; }
.sammlung-neu { display: flex; gap: 10px; align-items: end; flex-wrap: wrap; }
@media(max-width:430px){
  .sammlung-leiste { flex-direction: column; align-items: stretch; }
  .sammlung-neu { flex-direction: column; align-items: stretch; }
  .sammlung-neu button { width: 100%; min-height: 44px; }
}

/* ─── R-5 · Der Beleg an der Behauptung ────────────────────────────────
 *
 * Er steht EINGERUECKT unter der Behauptung, zu der er gehoert — nicht
 * daneben. Die Beziehung steht als WORT und nicht als Farbe: „stuetzt" und
 * „widerspricht" sind das Gegenteil voneinander, und das darf nicht an
 * einem Farbton haengen.
 */
.beleg-zeile { display: flex; gap: 8px; flex-wrap: wrap; align-items: baseline;
  margin: 4px 0 0 0; padding-left: 14px;
  border-left: 2px solid var(--lotse-linie-2, #e4eeec);
  font-size: 13px; color: var(--lotse-text-2, #43514f); }
.beleg-art { font-weight: 700; font-size: 11.5px; letter-spacing: .04em;
  text-transform: uppercase; color: var(--lotse-text-3, #6b7f7c); }
.beleg-zeile .dialog-note { margin: 0; }
@media(max-width:430px){ .beleg-zeile { flex-direction: column; gap: 2px; } }

/* Der noch unbesetzte Beitrag im Ablauf. Er sagt es EINMAL und leise: die
   Zeile gehoert dem Beitrag, nicht der Abwesenheit einer Person. */
.dienst-offen { font-size: 13px; color: var(--lotse-text-3, #6b7f7c);
  font-style: italic; }
/* Und wo im Ablauf doch eine Marke steht, traegt sie den Ton der Zeile und
   nicht den einer Ueberschrift. */
.ablauf-liste .dienst-zustand { font-size: 12.5px; }
.ablauf-liste .work-item { padding-left: 14px; }

/* ═══════════════════════════════════════════════════════════════════════════
 * Bibliothek · die Reihenfolge, in der man sie betritt
 * PO-Auftrag 21.08.2026, Abschnitt 10
 * ═══════════════════════════════════════════════════════════════════════════
 *
 * Kein Redesign, keine neue Flaeche: drei Abschnitte unter derselben
 * Ueberschrift, durch Weissraum getrennt statt durch Rahmen. Eine
 * Bibliothek ist ruhig, weil wenig darin laut ist.
 */
.bib-abschnitt { margin-top: 26px; }
.bib-abschnitt > h3 { margin: 0 0 10px; font-size: 13px; font-weight: 700;
  letter-spacing: .08em; text-transform: uppercase;
  color: var(--lotse-text-3, #6b7f7c); }

/* Der Werkeintrag. Der TITEL fuehrt; die Rechteangabe steht darunter und
   traegt den Ton einer Fussnote — sichtbar, erreichbar, nicht lauter als
   das Werk selbst. */
.werk-zeile { padding-left: 18px; }
.werk-recht { font-size: 12.5px; color: var(--lotse-text-3, #6b7f7c); }
/* Erlaubt/nicht erlaubt haengt NICHT an der Farbe allein: der Satz steht
   ausgeschrieben daneben. Der Punkt davor ist eine Zugabe, keine Aussage. */
.werk-recht::before { content: "· "; }
.werk-recht[data-erlaubt="nein"] { font-style: italic; }

/* Abschnitt 7 · die fuenf Auskuenfte. Unterschieden wird ueber das WORT;
   die Farbe ist eine Zugabe und traegt die Aussage nicht allein. */
.werk-recht[data-zustand="LESBAR"] { color: var(--lotse-text-2, #43514f); font-style: normal; }
.werk-recht[data-zustand="NUR_KATALOG"] { font-style: italic; }
.werk-recht[data-zustand="RECHTE_FEHLEN"],
.werk-recht[data-zustand="NICHT_VERFUEGBAR"] { font-style: italic; }

/* ═══════════════════════════════════════════════════════════════════════════
 * Sichtabnahme 21.08.2026 · vier Befunde aus dem Gesamtbild
 * ═══════════════════════════════════════════════════════════════════════════
 *
 * Kein Redesign, keine zweite Foundation. Vier Regeln, die auf mehreren
 * Flaechen gleichzeitig wirken, weil sie an gemeinsamen Bausteinen haengen.
 */

/* ── 2 · Der Rueckmeldeknopf ueberlagerte Inhalt ────────────────────────
 *
 * Bekannter Befund, am 21.08.2026 nachgeprueft: er BESTEHT. Auf dem Telefon
 * lag der runde Knopf mitten auf der ersten Werkzeile der Bibliothek, auf
 * breiten Anzeigen auf dem rechten Rand der ersten Auswahlzeile.
 *
 * Der Rueckmeldebereich wird NICHT neu entwickelt. Was fehlte, war der
 * Platz, den eine schwebende Bedienebene unter sich frei halten muss: die
 * Flaechen bekommen am unteren Rand so viel Luft, wie der Knopf hoch ist.
 * `--melde-freiraum` steht an einer Stelle; wer den Knopf spaeter aendert,
 * aendert den Freiraum mit.
 */
:root { --melde-freiraum: 76px; }
.panel.surface { padding-bottom: calc(18px + var(--melde-freiraum)); }
@media(max-width:720px){ :root { --melde-freiraum: 84px; } }

/* ── 3 · Karte in Karte in Karte ────────────────────────────────────────
 *
 * Auf der Uebersicht steckte eine Karte in einer Karte in einer Karte:
 * „Was steht als Naechstes an?" enthielt „Schnell starten", und das enthielt
 * drei weitere Karten. Drei Rahmen, drei Schatten, drei Flaechen fuer eine
 * Sache.
 *
 * Eine Karte gruppiert oder traegt Interaktion. Die INNERE hat weder das
 * eine noch das andere getan — sie hat nur wiederholt, was die aeussere
 * schon sagte. Also verliert die zweite Ebene ihren Rahmen und behaelt
 * ihren Abstand: die Gruppierung bleibt, der Kasten geht.
 */
.panel .panel:not(.surface),
.panel .action-card .action-card,
.panel .work-item .work-item {
  box-shadow: none; border: 0; background: transparent; padding-left: 0; padding-right: 0;
}
/* Die Uebersicht im Einzelnen: die drei Startkarten stecken in einer Karte,
   die selbst in der Hero-Karte steckt. Die INNERSTE traegt die Interaktion
   und behaelt deshalb ihre Flaeche; die MITTLERE hat nur wiederholt, was die
   aeussere schon sagte — sie verliert Rahmen und Schatten und behaelt ihren
   Abstand. Die Gruppierung bleibt, der Kasten geht. */
.dashboard-grid > .dashboard-card[data-abschnitt="SCHNELL_STARTEN"] {
  background: transparent; border: 0; box-shadow: none; padding-left: 0; padding-right: 0;
}
.dashboard-grid > .dashboard-card[data-abschnitt="SCHNELL_STARTEN"]:hover {
  transform: none; box-shadow: none;
}

/* ── 4 · Mehrere gleich laute Ueberschriften ────────────────────────────
 *
 * Auf der Uebersicht standen „Uebersicht", „Was braucht deine
 * Aufmerksamkeit?", „Fuer dich jetzt" und „Was steht als Naechstes an?"
 * nebeneinander — vier Fragen in derselben Stimme. Wenn alles gleich laut
 * ruft, fuehrt nichts.
 *
 * Der SEITENTITEL fuehrt. Bereichstitel innerhalb einer Flaeche treten eine
 * Stufe zurueck — kleiner, ruhiger, aber unveraendert lesbar. Das ist eine
 * Groessenordnung, keine neue Typoskala.
 */
.panel .panel-head h2 { font-size: 19px; line-height: 1.3; }
@media(max-width:430px){ .panel .panel-head h2 { font-size: 18px; } }

/* ── 5 · Eine Abwesenheit ist keine Angabe ──────────────────────────────
 *
 * In der Bibliothek stand unter 180 Werken 180 Mal „Urheber nicht
 * angegeben" — in derselben Staerke, in der ein echter Urheber stuende. Die
 * Zeile behauptete damit optisch eine Auskunft, die sie gerade verneint.
 *
 * Eine fehlende Angabe steht leiser als eine vorhandene. Der Satz bleibt
 * stehen: ihn wegzulassen hiesse, den Unterschied zwischen „kein Urheber
 * bekannt" und „Urheber nicht eingetragen" zu verwischen.
 */
.werk-zeile .work-main span.ohne-angabe {
  color: var(--lotse-text-3, #6b7f7c); font-style: italic;
}
