:root {
  --farbe-bg: #f2f0e9;
  --farbe-flaeche: #ffffff;
  --farbe-primaer: #123a4d;
  --farbe-primaer-hell: #1c5872;
  --farbe-akzent: #2f8f8f;
  --farbe-rot: #c0392b;
  --farbe-gelb: #e0a52c;
  --farbe-gruen: #2f9e6f;
  --farbe-grau-inaktiv: #c7c4b8;
  --farbe-text: #22252a;
  --farbe-text-mute: #6c6f74;
  --schatten-sm: 0 1px 2px rgba(18, 58, 77, 0.08);
  --schatten-md: 0 6px 18px rgba(18, 58, 77, 0.10);
  --radius-lg: 18px;
  --radius-md: 14px;
}

/* ============ Dark Mode ============
   Wird per data-Attribut auf <html> umgeschaltet (siehe dunkelmodusAnwenden() in app.js),
   Präferenz landet in localStorage und gilt pro Gerät/Browser. Die meisten Flächen im Rest der
   Datei nutzen ohnehin schon die Variablen oben, werden also automatisch mit umgeschaltet - hier
   zusätzlich die wenigen Stellen, die bewusst einen fest codierten Pastellton nutzen (z.B.
   Benachrichtigungs-Overlays, Prioritäts-Bubbles), da diese sonst auf dunklem Grund zu hell/grell
   wirken würden. */
[data-theme="dunkel"] {
  --farbe-bg: #14181c;
  --farbe-flaeche: #1e2429;
  --farbe-primaer: #4a9fc7;
  --farbe-primaer-hell: #6bb8db;
  --farbe-akzent: #4fb3b3;
  --farbe-rot: #e5766a;
  --farbe-gelb: #e0a52c;
  --farbe-gruen: #4fc994;
  --farbe-grau-inaktiv: #4a5058;
  --farbe-text: #e8e6e0;
  --farbe-text-mute: #9a9da3;
  --schatten-sm: 0 1px 2px rgba(0, 0, 0, 0.3);
  --schatten-md: 0 6px 18px rgba(0, 0, 0, 0.4);
}
[data-theme="dunkel"] .neue-nachrichten-overlay:not([hidden]) { background: #1a2e38; border-color: #2b4a58; }
[data-theme="dunkel"] .neue-nachrichten-titel { border-color: #2b4a58; }
[data-theme="dunkel"] .neue-nachrichten-eintrag:hover, [data-theme="dunkel"] .neue-nachrichten-eintrag:active { background: #23404d; }
[data-theme="dunkel"] .unbestaetigt-overlay:not([hidden]) { background: #3a3218; border-color: #574a20; }
[data-theme="dunkel"] .unbestaetigt-titel { color: #e0c060; border-color: #574a20; }
[data-theme="dunkel"] .unbestaetigt-eintrag:hover, [data-theme="dunkel"] .unbestaetigt-eintrag:active { background: #4a3f1f; }
[data-theme="dunkel"] .sprechwunsch-overlay:not([hidden]) { background: #2a1a18; }
[data-theme="dunkel"] .sprechwunsch-eintrag:hover, [data-theme="dunkel"] .sprechwunsch-eintrag:active { background: #3d2420; }
[data-theme="dunkel"] .status-feed-eintrag:hover, [data-theme="dunkel"] .status-feed-eintrag:active { background: #262c32; }
[data-theme="dunkel"] .nachricht-eintrag.prio-2 .nachricht-bubble { background: #3d2420; }
[data-theme="dunkel"] .nachricht-eintrag.gesendet .nachricht-bubble { background: #1d3830; }
[data-theme="dunkel"] .btn-abmelden { background: #3d2420; }
[data-theme="dunkel"] .btn-einsatzinfo-loeschen { background: #3d2420; }
[data-theme="dunkel"] .btn-befehlstelle-loesen { background: #3d2420; }
[data-theme="dunkel"] .karten-basis-auswahl,
[data-theme="dunkel"] .sprechwunsch-overlay:not([hidden]),
[data-theme="dunkel"] .karte-oben-rechts .neue-nachrichten-overlay:not([hidden]) { background: rgba(30, 36, 41, 0.97); }
[data-theme="dunkel"] .uebersicht-karte { background: #2a2e33; }
[data-theme="dunkel"] .uebersicht-status-punkt.leer { background: #4a5058; }

* { box-sizing: border-box; -webkit-tap-highlight-color: transparent; }

html, body { height: 100%; }

body {
  margin: 0;
  font-family: -apple-system, "Segoe UI", Roboto, system-ui, sans-serif;
  background: var(--farbe-bg);
  color: var(--farbe-text);
  -webkit-font-smoothing: antialiased;
  overscroll-behavior-y: contain; /* kein Pull-to-Refresh-Konflikt in der installierten PWA */
}

button {
  touch-action: manipulation;      /* kein 300ms-Tap-Delay, kein Doppeltipp-Zoom */
  -webkit-touch-callout: none;     /* kein Kontextmenü bei langem Antippen */
  -webkit-user-select: none;
  user-select: none;
}

/* ============ Topbar ============ */
.topbar {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 14px 16px;
  padding-top: calc(14px + env(safe-area-inset-top));
  background: var(--farbe-primaer);
  color: #fff;
  position: sticky;
  top: 0;
  z-index: 10;
  box-shadow: var(--schatten-md);
}

.topbar-info { display: flex; align-items: center; gap: 12px; min-width: 0; }
.benutzer-anzeige-block { display: flex; flex-direction: column; min-width: 0; line-height: 1.15; }
.benutzer-anzeige { font-weight: 600; font-size: 16px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.benutzer-leitstelle-anzeige:not([hidden]) { font-size: 13px; color: #fff; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.app-version-anzeige { font-size: 13px; font-weight: 700; color: #fff; white-space: nowrap; margin-right: 4px; }

.verbindung {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 12px;
  padding: 4px 10px 4px 8px;
  border-radius: 999px;
  background: rgba(255,255,255,0.12);
  white-space: nowrap;
}
.verbindung-punkt { width: 7px; height: 7px; border-radius: 50%; background: currentColor; }
.verbindung.online { color: #bdeeda; }
.verbindung.offline { color: #f2c4bd; }
.benutzer-funktion-anzeige:not([hidden]) { font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.03em; color: rgba(255,255,255,0.75); white-space: nowrap; }

.btn-icon:not([hidden]) {
  background: rgba(255,255,255,0.12);
  border: none;
  color: #fff;
  width: 44px;
  height: 44px;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  flex-shrink: 0;
  transition: background 0.15s ease;
}
.btn-icon:hover { background: rgba(255,255,255,0.22); }
.btn-icon:active { transform: scale(0.94); }

/* ============ Login ============ */
.login-bereich:not([hidden]) {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 20px;
  min-height: 100vh;
  min-height: 100dvh;
  padding: 24px 20px calc(24px + env(safe-area-inset-bottom));
}
.login-karte {
  width: 100%;
  max-width: 420px;
  background: var(--farbe-flaeche);
  border-radius: var(--radius-lg);
  box-shadow: var(--schatten-md);
  padding: 32px 28px;
  text-align: center;
}
.login-fussnote {
  width: 100%;
  max-width: 420px;
  text-align: center;
  color: var(--farbe-text-mute);
  font-size: 11.5px;
  line-height: 1.5;
}
.login-fussnote p { margin: 0; }
.login-karte h1 { margin: 0 0 4px; font-size: 22px; font-weight: 600; }
.login-untertitel { margin: 0 0 24px; color: var(--farbe-text-mute); font-size: 14px; }

.btn-icon-inline { vertical-align: -4px; margin-right: 8px; }

.btn-primary, .btn-secondary, .btn-abmelden {
  font-size: 16px;
  font-weight: 600;
  padding: 14px 20px;
  border-radius: var(--radius-md);
  border: none;
  cursor: pointer;
  width: 100%;
  transition: transform 0.08s ease, background 0.15s ease, box-shadow 0.15s ease;
}
.btn-primary { background: var(--farbe-primaer); color: #fff; box-shadow: var(--schatten-sm); }
.btn-primary:active, .btn-secondary:active { transform: scale(0.98); }
.btn-secondary { background: var(--farbe-bg); color: var(--farbe-primaer); }
.btn-benutzerhandbuch {
  display: block;
  box-sizing: border-box;
  text-align: center;
  text-decoration: none;
  margin: 10px 0;
}

.trenner { display: flex; align-items: center; gap: 12px; margin: 20px 0; color: var(--farbe-text-mute); font-size: 13px; }
.trenner::before, .trenner::after { content: ""; flex: 1; height: 1px; background: #e4e1d6; }

.qr-scan-bereich { display: flex; flex-direction: column; gap: 10px; margin-top: 10px; }
.qr-video {
  width: 100%;
  border-radius: var(--radius-md);
  background: #000;
  aspect-ratio: 4 / 3;
  object-fit: cover;
}

.manuelle-form { display: flex; flex-direction: column; gap: 10px; }
.manuelle-form input {
  font-size: 16px;
  padding: 13px 14px;
  border-radius: var(--radius-md);
  border: 1px solid #ddd9cb;
  background: var(--farbe-bg);
}
.manuelle-form input:focus { outline: 2px solid var(--farbe-akzent); outline-offset: 1px; }
.manuelle-form input:disabled { opacity: 0.6; }

.fehler { color: var(--farbe-rot); font-size: 14px; min-height: 20px; margin: 14px 0 0; }

/* ============ Hauptansicht ============ */
.haupt-bereich { max-width: 720px; margin: 0 auto; padding: 20px 16px calc(40px + env(safe-area-inset-bottom)); }
/* Zentrale nutzt bewusst die volle Bildschirmbreite (PC/Tablet-Oberfläche) statt der schmalen,
   für Handy-Statustasten gedachten Spalte - nur ein moderates seitliches Padding bleibt. */
.haupt-bereich.zentrale-modus { max-width: none; padding-left: 24px; padding-right: 24px; }

.niemand-online-banner:not([hidden]) {
  background: #fff3cd;
  color: #6b5400;
  border: 1px solid #f0d878;
  border-radius: var(--radius-md);
  padding: 10px 14px;
  margin-bottom: 16px;
  font-size: 13.5px;
  font-weight: 600;
  text-align: center;
}
[data-theme="dunkel"] .niemand-online-banner:not([hidden]) { background: #3a3218; color: #e0c060; border-color: #574a20; }
.niemand-online-banner-zusatz {
  display: block;
  margin-top: 4px;
  font-size: 12px;
  font-weight: 400;
}

.upi-alarm-bereich:not([hidden]) { margin-bottom: 16px; }
.upi-alarm-liste { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 10px; }
.upi-alarm-eintrag {
  background: #fdecea;
  border: 2px solid var(--farbe-rot);
  border-radius: var(--radius-md);
  padding: 12px 14px;
  animation: upiAlarmPuls 1.2s ease-in-out infinite;
}
@keyframes upiAlarmPuls {
  0%, 100% { box-shadow: 0 0 0 0 rgba(192,57,43,0.35); }
  50% { box-shadow: 0 0 0 6px rgba(192,57,43,0); }
}
.upi-alarm-kopf { display: flex; justify-content: space-between; align-items: baseline; gap: 10px; flex-wrap: wrap; }
.upi-alarm-stichwort { font-weight: 800; font-size: 15px; color: var(--farbe-rot); text-transform: uppercase; letter-spacing: 0.02em; }
.upi-alarm-zeit { font-size: 12px; color: var(--farbe-text-mute); white-space: nowrap; }
.upi-alarm-text { font-size: 13.5px; color: var(--farbe-text); margin: 6px 0; white-space: pre-wrap; }
.upi-alarm-adresse { font-size: 12.5px; color: var(--farbe-text-mute); margin: 0 0 8px; }
.btn-upi-alarm-quittieren {
  background: var(--farbe-rot);
  color: #fff;
  border: none;
  border-radius: var(--radius-md);
  padding: 8px 16px;
  font-size: 13px;
  font-weight: 700;
  cursor: pointer;
}
.btn-upi-alarm-quittieren:hover { background: #a33327; }
[data-theme="dunkel"] .upi-alarm-eintrag { background: #3a1f1c; }

.app-download-banner:not([hidden]) {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 10px;
  background: #eaf1f5; /* dezentes Blau statt Gelb - bewusst kein Alarm-/Warncharakter wie beim "Niemand online"-Banner, rein informativ */
  color: #123a4d;
  border: 1px solid #cfe0e8;
  border-radius: var(--radius-md);
  padding: 10px 14px;
  margin-bottom: 16px;
  font-size: 13px;
  line-height: 1.4;
}
.app-download-banner a {
  flex-shrink: 0;
  background: var(--farbe-primaer);
  color: #fff;
  font-weight: 700;
  font-size: 13px;
  text-decoration: none;
  padding: 8px 14px;
  border-radius: 999px;
  white-space: nowrap;
}
[data-theme="dunkel"] .app-download-banner:not([hidden]) { background: #1c2a33; color: #cfe0e8; border-color: #2a3f4c; }

.einsatzinfo-anzeige:not([hidden]) {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  background: var(--farbe-flaeche);
  border: 1px solid #ddd9cb;
  border-left: 4px solid var(--farbe-primaer);
  border-radius: var(--radius-md);
  padding: 13px 14px; /* ca. 30% mehr als vorher (10px), Platz für den SOS-Button */
  margin-bottom: 16px;
}
.einsatzinfo-anzeige-inhalt { flex: 1 1 auto; min-width: 0; }
.einsatzinfo-anzeige-label {
  display: block;
  font-size: 11px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: var(--farbe-text-mute);
  margin-bottom: 3px;
}
.einsatzinfo-anzeige-text {
  display: block;
  font-size: 14px;
  color: var(--farbe-text);
  white-space: pre-wrap;
  word-break: break-word;
}
[data-theme="dunkel"] .einsatzinfo-anzeige:not([hidden]) { border-left-color: var(--farbe-primaer-hell); }

.btn-sos {
  flex-shrink: 0;
  width: 56px;
  height: 56px;
  border-radius: 50%;
  border: none;
  background: #e67e22; /* orange, wie gefordert - bewusst deutlich von den roten Statustasten/Warnfarben abgesetzt */
  color: #fff;
  font-weight: 800;
  font-size: 15px;
  letter-spacing: 0.02em;
  cursor: pointer;
  box-shadow: 0 2px 6px rgba(0,0,0,0.25);
  user-select: none;
  -webkit-user-select: none;
  touch-action: none; /* verhindert Scroll-/Zoom-Gesten während des Haltens auf Touch-Geräten */
}
.btn-sos:active, .btn-sos.sos-aktiv { background: #d35400; }
/* Dezenter Puls während der 3-Sekunden-Haltephase - rein visuell, bewusst kein Ton (siehe app.js) */
.btn-sos.sos-haltend { animation: sosPuls 0.6s ease-in-out infinite; }
@keyframes sosPuls {
  0%, 100% { transform: scale(1); }
  50% { transform: scale(1.08); }
}
/* Wechselt während der laufenden Audioaufnahme zwischen Orange und Rot - vertrautes Muster aus
   dem Digitalfunk (Notruftaste), löst .sos-aktiv (einfarbig dunkelorange) für die Dauer der
   Aufnahme ab. Rein visuell, weiterhin bewusst kein Ton. */
.btn-sos.sos-aufnahme { animation: sosFarbwechsel 1s step-start infinite; }
@keyframes sosFarbwechsel {
  0%, 49% { background: #e67e22; }
  50%, 100% { background: #c0392b; }
}

.status-grid:not([hidden]) {
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  gap: 8px;
  margin-bottom: 24px;
  max-width: 420px;
}

.status-bezeichnung-anzeige {
  min-height: 20px;
  margin: -14px 0 20px;
  font-size: 13.5px;
  font-weight: 600;
  color: var(--farbe-primaer);
  text-align: center;
}

.status-taste {
  aspect-ratio: 1 / 1;
  border: none;
  border-radius: var(--radius-md);
  font-size: 18px;
  font-weight: 600;
  background: var(--farbe-flaeche);
  color: var(--farbe-text);
  cursor: pointer;
  box-shadow: var(--schatten-sm);
  transition: background 0.15s ease, color 0.15s ease, transform 0.08s ease, opacity 0.15s ease;
  display: flex;
  align-items: center;
  justify-content: center;
  position: relative;
  overflow: hidden;
}
.status-taste:active { transform: scale(0.95); }
.status-taste.inaktiv { background: var(--farbe-grau-inaktiv); color: #4a4a44; opacity: 0.55; box-shadow: none; }
[data-theme="dunkel"] .status-taste.inaktiv { color: #e8e6e0; }
.status-taste.aktiv-gelb { background: var(--farbe-gelb); color: #3d2600; }
.status-taste.aktiv-gruen { background: var(--farbe-gruen); color: #fff; }
[data-theme="dunkel"] .status-taste.aktiv-gruen { color: #0d2018; }

/* Füllanzeige während der 3-Sekunden-Haltegeste: wächst von unten nach oben; wird die Klasse
   entfernt (Loslassen vor Ablauf), springt sie dank "transition: none" in der Grundregel sofort
   auf 0 zurück, statt sichtbar rückwärts zu laufen. Dunkle, kräftige Farbe statt hellem
   Halbtransparent, damit sie auf JEDER Tastenfarbe (weiß/grau/gelb/grün) gut sichtbar ist. */
.status-taste::after {
  content: "";
  position: absolute;
  left: 0;
  bottom: 0;
  width: 100%;
  height: 0%;
  background: rgba(18, 58, 77, 0.65);
  transition: none;
}
/* WICHTIGER FIX, auf Wunsch: Diese Animationsdauer muss EXAKT mit STATUS_HALTEZEIT_MS in app.js
   übereinstimmen (beide aktuell 1 Sekunde) - vorher stand hier fälschlich "2s", während die
   JS-Logik bereits nach 1 Sekunde auslöst. Ergebnis: Der Füllbalken lief eine für den Nutzer
   nicht nachvollziehbare 2-Sekunden-Animation, wurde aber exakt nach der Hälfte (1 Sekunde,
   wenn STATUS_HALTEZEIT_MS abläuft) abrupt entfernt und sprang dank "transition: none" in der
   Grundregel sofort auf 0 zurück - sah wie ein Abbruch/Fehlschlag aus ("Balken bricht bei der
   Hälfte ab"), obwohl der Status zu diesem Zeitpunkt bereits erfolgreich gesendet wurde. Rein
   kosmetischer Fehler, keine tatsächliche Fehlfunktion beim Senden selbst - aber irreführend
   genug, um einen Sendefehler zu vermuten, wo keiner war. */
.status-taste.wird-gehalten::after {
  height: 100%;
  transition: height 1s linear;
}

/* Karteireiter über dem Nachrichten-/E-Mail-Bereich, auf Wunsch ergänzt - bewusst OHNE feste
   Höhe am Seiten-Container (.karteireiter-seite): die Größe ergibt sich weiterhin allein aus dem
   jeweiligen Seiteninhalt, genau wie vor der Umstellung. Nicht aktive Seiten werden komplett aus
   dem Layout genommen (hidden-Attribut, kein display:none nötig), nehmen also auch keinen Platz
   ein. */
/* WICHTIGER FIX: ":not([hidden])" ergänzt - vorher setzte diese Regel bedingungslos
   "display: flex", was das hidden-Attribut (setzt browserseitig "display: none") komplett
   überschrieb, da beide Regeln dieselbe Spezifität haben und diese hier im Stylesheet später
   kommt. Dadurch blieb die Leiste beim Client trotz el.karteireiterLeiste.hidden = true weiterhin
   sichtbar - dasselbe Bug-Muster wie bereits einmal bei .nachrichten-splitter/.email-panel an
   anderer Stelle in dieser Datei behoben. */
.karteireiter-leiste:not([hidden]) {
  display: flex;
  gap: 4px;
  margin: 10px 0 0;
  border-bottom: 2px solid #ddd9cb;
}
.karteireiter-btn {
  padding: 8px 16px;
  border: none;
  background: none;
  font-size: 13.5px;
  font-weight: 600;
  color: var(--farbe-text-mute);
  cursor: pointer;
  border-bottom: 3px solid transparent;
  margin-bottom: -2px; /* gleicht die 2px Rahmenlinie der Leiste aus, Unterstrich sitzt exakt auf ihr */
}
.karteireiter-btn:hover { color: var(--farbe-primaer); }
.karteireiter-btn.karteireiter-aktiv { color: var(--farbe-primaer); border-bottom-color: var(--farbe-primaer); }
.karteireiter-seite { padding-top: 14px; }

.nachrichten-split-bereich {
  display: flex;
  align-items: stretch;
  flex-wrap: wrap; /* auf schmalen Bildschirmen fällt es automatisch untereinander */
  gap: 0;
}
.nachrichten-linke-spalte {
  flex: 1 1 280px;
  min-width: 260px;
}
.nachrichten-splitter:not([hidden]) {
  width: 6px;
  flex: 0 0 6px;
  cursor: col-resize;
  background: #ddd9cb;
  border-radius: 3px;
  margin: 0 10px;
  align-self: stretch;
}
.nachrichten-splitter:hover, .nachrichten-splitter.aktiv { background: var(--farbe-primaer); }
.nachrichten-rechte-spalte:not([hidden]) {
  flex: 2 1 320px;
  min-width: 260px;
  background: var(--farbe-flaeche);
  border-radius: var(--radius-md);
  box-shadow: var(--schatten-sm);
}
/* Auf schmalen Bildschirmen macht ein Spalten-Trenner keinen Sinn (untereinander gestapelt) */
@media (max-width: 720px) {
  .nachrichten-splitter { display: none !important; }
  .nachrichten-rechte-spalte { display: none !important; }
  .nachrichten-linke-spalte { flex-basis: 100% !important; }
}

.email-panel:not([hidden]) {
  display: flex;
  flex-direction: column;
  gap: 10px;
  padding: 12px;
  height: 100%;
  overflow-y: auto;
}
.email-kopf { display: flex; align-items: center; justify-content: space-between; }
.email-titel { font-weight: 700; font-size: 14px; }
.email-kopf-aktionen { display: flex; gap: 4px; }
.btn-icon-klein {
  border: none;
  background: var(--farbe-bg);
  border-radius: 50%;
  width: 28px;
  height: 28px;
  font-size: 13px;
  cursor: pointer;
}
.kartenlesezeichen-leiste {
  display: flex;
  align-items: center;
  gap: 4px;
}
.kartenlesezeichen-leiste .karten-basis-auswahl {
  max-width: 160px;
}

.email-konto-form:not([hidden]) { display: flex; flex-direction: column; gap: 8px; }
.email-konto-hinweis { font-size: 12px; color: var(--farbe-text-mute); margin: 0; }

.email-ordner-reiter { display: flex; gap: 4px; margin: 8px 0; border-bottom: 1px solid #ddd9cb; }
.email-ordner-reiter-btn {
  flex: 1;
  padding: 6px 8px;
  border: none;
  background: none;
  font-size: 12.5px;
  font-weight: 600;
  color: var(--farbe-text-mute);
  cursor: pointer;
  border-bottom: 2px solid transparent;
}
.email-ordner-reiter-btn.email-ordner-reiter-aktiv { color: var(--farbe-primaer); border-bottom-color: var(--farbe-primaer); }
.email-konto-zeile { display: flex; gap: 6px; }
.email-konto-zeile input[type="text"] { flex: 2 1 auto; min-width: 0; }
.email-konto-zeile input[type="number"] { flex: 0 0 70px; }
.email-konto-zeile label { display: flex; align-items: center; gap: 4px; font-size: 12.5px; white-space: nowrap; }
.email-konto-form input, .email-konto-form select,
.email-senden-form input, .email-senden-form textarea {
  width: 100%;
  padding: 8px 10px;
  border-radius: 8px;
  border: 1px solid #ddd9cb;
  background: var(--farbe-flaeche);
  color: var(--farbe-text);
  font-size: 13px;
  box-sizing: border-box;
}
.email-senden-form textarea { resize: vertical; font-family: inherit; }
.email-konto-aktionen { display: flex; gap: 8px; }
.email-konto-aktionen .btn-primary, .email-konto-aktionen .btn-secondary { width: auto; flex: 1 1 0; padding: 9px 14px; font-size: 13.5px; }

.email-liste { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 2px; overflow-y: auto; }
.email-eintrag {
  display: flex;
  flex-direction: column;
  gap: 2px;
  padding: 7px 8px;
  border-radius: 8px;
  cursor: pointer;
  border-bottom: 1px solid #f2f0e6;
}
.email-eintrag:hover { background: var(--farbe-bg); }
.email-eintrag-kopf { display: flex; justify-content: space-between; gap: 6px; font-size: 12.5px; color: var(--farbe-text-mute); }
.email-eintrag-von { font-weight: 600; color: var(--farbe-text); }
.email-eintrag-betreff { font-size: 13px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

.email-zurueck { width: auto !important; padding: 5px 12px !important; font-size: 12.5px !important; margin-bottom: 4px; align-self: flex-start; }
.email-lesen-bereich:not([hidden]), .email-senden-form:not([hidden]) { display: flex; flex-direction: column; gap: 8px; }
.email-lesen-zeile { margin: 0; font-size: 13px; }
.email-lesen-koerper {
  white-space: pre-wrap;
  font-size: 13.5px;
  line-height: 1.5;
  padding: 8px;
  background: var(--farbe-bg);
  border-radius: 8px;
  max-height: 220px;
  overflow-y: auto;
}
.email-lesen-anhaenge { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 4px; }
.email-lesen-anhaenge li a { font-size: 12.5px; }

.email-lesen-aktionen { display: flex; gap: 8px; margin-top: 10px; flex-wrap: wrap; }
.btn-email-loeschen {
  margin-left: auto;
  background: none;
  border: 1px solid var(--farbe-rot);
  color: var(--farbe-rot);
  border-radius: var(--radius-md);
  padding: 8px 12px;
  font-size: 13px;
  font-weight: 600;
  cursor: pointer;
}
.btn-email-loeschen:hover { background: var(--farbe-rot); color: #fff; }

.email-senden-anhaenge-liste { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 4px; }
.email-senden-anhaenge-liste li {
  display: flex;
  justify-content: space-between;
  align-items: center;
  font-size: 12px;
  background: var(--farbe-bg);
  border-radius: 6px;
  padding: 4px 8px;
}
.email-senden-anhaenge-liste button { border: none; background: none; cursor: pointer; color: var(--farbe-rot); font-size: 13px; }

.nachrichten-filter-bar:not([hidden]) {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  flex-wrap: wrap;
  background: #eaf1f5;
  border: 1px solid #cfe0e8;
  border-radius: var(--radius-md);
  padding: 8px 12px;
  margin-bottom: 10px;
  font-size: 13px;
}
.nachrichten-filter-bar span { font-weight: 600; color: var(--farbe-primaer); }
.nachrichten-filter-bar-aktionen { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.btn-nachrichtenverlauf-loeschen {
  padding: 5px 12px;
  font-size: 12.5px;
  font-weight: 600;
  border-radius: 999px;
  margin-top: 0;
}

/* ============ Zentrale-Layout: Karte + Übersichtstabelle statt Statustasten ============ */
.zentrale-bereich { margin-bottom: 24px; }

.karten-und-feed-bereich {
  display: flex;
  align-items: stretch;
  flex-wrap: wrap; /* auf schmalen Bildschirmen fällt es automatisch untereinander */
  gap: 0;
  height: 280px; /* Startwert, per karten-hoehen-splitter verschiebbar (siehe app.js) */
  min-height: 160px;
}
.karten-spalte {
  flex: 2 1 320px;
  min-width: 280px;
  height: 100%;
}
.karten-splitter {
  width: 6px;
  flex: 0 0 6px;
  cursor: col-resize;
  background: #ddd9cb;
  border-radius: 3px;
  margin: 0 6px;
  align-self: stretch;
}
.karten-splitter:hover, .karten-splitter.aktiv { background: var(--farbe-primaer); }
.karten-hoehen-splitter {
  height: 6px;
  cursor: row-resize;
  background: #ddd9cb;
  border-radius: 3px;
  margin: 8px 0;
}
.karten-hoehen-splitter:hover, .karten-hoehen-splitter.aktiv { background: var(--farbe-primaer); }
/* Auf schmalen Bildschirmen macht ein Spalten-Trenner keinen Sinn (untereinander gestapelt) */
@media (max-width: 720px) {
  .karten-splitter { display: none; }
  .karten-spalte { flex-basis: 100% !important; }
  .karten-hoehen-splitter { display: none; }
  .karten-und-feed-bereich { height: auto !important; }
}
.status-feed-spalte {
  position: relative;
  flex: 1 1 220px;
  min-width: 200px;
  height: 100%;
  background: var(--farbe-flaeche);
  border-radius: var(--radius-md);
  box-shadow: var(--schatten-sm);
  padding: 10px 12px;
  overflow-y: auto;
}

.neue-nachrichten-overlay:not([hidden]) {
  position: sticky;
  top: 0;
  z-index: 5;
  background: #eaf1f5;
  border: 1px solid #cfe0e8;
  border-radius: var(--radius-md);
  box-shadow: var(--schatten-md);
  padding: 8px 0;
  margin: -10px -12px 10px;
}
.neue-nachrichten-titel {
  font-size: 12.5px;
  font-weight: 700;
  color: var(--farbe-primaer);
  padding: 0 12px 6px;
  border-bottom: 1px solid #cfe0e8;
  margin-bottom: 4px;
}
.neue-nachrichten-liste { list-style: none; margin: 0; padding: 0; }
.neue-nachrichten-eintrag {
  display: flex;
  flex-direction: column;
  gap: 2px;
  padding: 7px 12px;
  cursor: pointer;
  font-size: 13px;
}
.neue-nachrichten-eintrag:hover, .neue-nachrichten-eintrag:active { background: #d9e6ee; }
.neue-nachrichten-kopf { display: flex; align-items: center; gap: 8px; }
.neue-nachrichten-eintrag .neue-nachrichten-name { font-weight: 600; flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.neue-nachrichten-eintrag .neue-nachrichten-anzahl {
  background: var(--farbe-primaer);
  color: #fff;
  border-radius: 999px;
  font-size: 11px;
  font-weight: 700;
  padding: 1px 7px;
  flex-shrink: 0;
}
.neue-nachrichten-vorschau {
  font-size: 12px;
  color: var(--farbe-text-mute);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.unbestaetigt-overlay:not([hidden]) {
  position: sticky;
  top: 0;
  z-index: 5;
  background: #fff8e1;
  border: 1px solid #f0e0a8;
  border-radius: var(--radius-md);
  box-shadow: var(--schatten-md);
  padding: 8px 0;
  margin: -10px -12px 10px;
}
.unbestaetigt-titel {
  font-size: 12.5px;
  font-weight: 700;
  color: #8a6d00;
  padding: 0 12px 6px;
  border-bottom: 1px solid #f0e0a8;
  margin-bottom: 4px;
}
.unbestaetigt-liste { list-style: none; margin: 0; padding: 0; }
.unbestaetigt-eintrag {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 7px 12px;
  font-size: 13px;
  cursor: pointer;
}
.unbestaetigt-eintrag:hover, .unbestaetigt-eintrag:active { background: #f5ecc7; }
.unbestaetigt-eintrag .unbestaetigt-name { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.btn-unbestaetigt-bestaetigen {
  border: none;
  border-radius: 999px;
  padding: 4px 12px;
  font-size: 11.5px;
  font-weight: 700;
  background: var(--farbe-gruen);
  color: #fff;
  cursor: pointer;
  flex-shrink: 0;
}
.btn-unbestaetigt-bestaetigen:disabled { opacity: 0.6; cursor: default; }
.status-feed-kopf {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  margin-bottom: 6px;
  padding-bottom: 6px;
  border-bottom: 1px solid #eeece2;
}
.status-feed-kopf-rechts { display: flex; align-items: center; gap: 8px; }
.verlauf-typ-dropdown { position: relative; }
.verlauf-typ-dropdown .gis-layer-dropdown-knopf { padding: 4px 10px; font-size: 11.5px; border-radius: 999px; }
.verlauf-stumm-label:not([hidden]) {
  display: flex;
  align-items: center;
  gap: 4px;
  font-size: 11.5px;
  color: var(--farbe-text-mute);
  cursor: pointer;
  flex-shrink: 0;
  white-space: nowrap;
}
.btn-verlauf-manuell {
  border: none;
  border-radius: 999px;
  padding: 4px 10px;
  font-size: 11.5px;
  font-weight: 600;
  cursor: pointer;
  background: var(--farbe-bg);
  color: var(--farbe-primaer);
  flex-shrink: 0;
}
.verlauf-manuell-form:not([hidden]) {
  display: flex;
  gap: 6px;
  margin-bottom: 8px;
}
.verlauf-manuell-form input {
  flex: 1;
  min-width: 0;
  padding: 6px 10px;
  border-radius: 8px;
  border: 1px solid #ddd9cb;
  background: var(--farbe-flaeche);
  color: var(--farbe-text);
  font-size: 13px;
}
.verlauf-manuell-form button {
  border: none;
  border-radius: 8px;
  padding: 6px 12px;
  font-size: 12.5px;
  font-weight: 600;
  background: var(--farbe-primaer);
  color: #fff;
  cursor: pointer;
  flex-shrink: 0;
}
.status-feed-titel {
  font-size: 12.5px;
  font-weight: 700;
  color: var(--farbe-text-mute);
  text-transform: uppercase;
  letter-spacing: 0.03em;
}
.status-feed-liste { list-style: none; margin: 0; padding: 0; }

.btn-ptt {
  border: none;
  cursor: pointer;
  user-select: none;
  -webkit-user-select: none;
  touch-action: none; /* verhindert Scrollen/Zoomen während des Gedrückthaltens auf Touch-Geräten */
  background: var(--farbe-primaer);
  color: #fff;
  transition: background-color 0.1s ease, transform 0.1s ease;
}
.btn-ptt.aktiv { background: var(--farbe-rot); transform: scale(0.97); }

/* Wrapper nötig, damit das Aufnahme-Badge absolut relativ zur Taste positioniert werden kann,
   ohne selbst Platz im umgebenden Flex-Layout zu beanspruchen - vorher war die Anzeige ein
   normales Geschwisterelement, das beim Einblenden Platz beanspruchte und dadurch die PTT-Taste
   sichtbar zur Seite schob. */
.btn-ptt-wrapper { position: relative; display: inline-flex; }
.ptt-aufnahme-indikator {
  position: absolute;
  top: -4px;
  right: -4px;
  font-size: 13px;
  line-height: 1;
  pointer-events: none; /* Badge darf keine Klicks abfangen, die eigentlich der Taste darunter gelten */
}
.ptt-aufnahme-indikator:not([hidden]) {
  animation: ptt-sprecher-blinken 1.8s ease-in-out infinite;
}
.btn-ptt.gesperrt {
  background: var(--farbe-grau-inaktiv);
  color: var(--farbe-text);
  cursor: not-allowed;
  animation: ptt-sprecher-blinken 1.4s ease-in-out infinite;
}

.btn-ptt-client:not([hidden]) {
  display: block;
  width: 100%;
  margin-top: 10px;
  margin-bottom: 20px;
  padding: 16px;
  border-radius: var(--radius-md);
  font-size: 15px;
  font-weight: 700;
  box-shadow: var(--schatten-sm);
}

.btn-ptt-zentrale:not([hidden]) {
  flex: 0 0 auto;
  padding: 8px 14px;
  border-radius: var(--radius-md);
  font-size: 13.5px;
  font-weight: 700;
  box-shadow: var(--schatten-sm);
  white-space: nowrap;
}

.ptt-teilnehmer-liste:not([hidden]) {
  display: flex;
  flex-direction: column;
  gap: 4px;
  margin-top: 8px;
  background: var(--farbe-flaeche);
  border-radius: var(--radius-md);
  padding: 6px 8px;
  box-shadow: var(--schatten-sm);
}
.ptt-teilnehmer-eintrag {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 13px;
  padding: 3px 0;
}
.ptt-teilnehmer-name { flex: 1; }
.ptt-teilnehmer-zeit { font-size: 11px; color: var(--farbe-text-mute); font-family: "SFMono-Regular", Consolas, monospace; }

@keyframes ptt-sprecher-blinken {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.55; }
}

.status-feed-eintrag {
  display: flex;
  align-items: baseline;
  gap: 6px;
  padding: 6px 2px;
  border-bottom: 1px solid #f2f0e6;
  cursor: pointer;
  font-size: 12.5px;
}
/* Ohne diese Regel bleibt eine per Anzeige-Filter (Verlauf-Typ-Checkboxen) ausgeblendete Zeile
   trotz gesetztem hidden-Attribut sichtbar - die Klassen-Regel oben (display: flex) hat eine
   höhere CSS-Spezifität als das browsereigene [hidden] { display: none }, das damit
   stillschweigend überschrieben wird. [hidden] als zusätzlicher Attribut-Selektor erhöht die
   Spezifität gerade so weit, dass diese Regel gewinnt, ganz ohne !important. */
.status-feed-eintrag[hidden] { display: none; }
.status-feed-eintrag { border-left: 3px solid transparent; padding-left: 6px; }
.status-feed-eintrag:last-child { border-bottom: none; }

.btn-verlauf-abspielen {
  flex-shrink: 0;
  border: none;
  border-radius: 50%;
  width: 20px;
  height: 20px;
  font-size: 10px;
  line-height: 1;
  background: var(--farbe-primaer);
  color: #fff;
  cursor: pointer;
}
.btn-verlauf-abspielen:hover { background: var(--farbe-primaer-hell); }
.verlauf-abspiel-player {
  padding: 6px 2px 8px 6px;
  border-bottom: 1px solid #f2f0e6;
  font-size: 12px;
  color: var(--farbe-text-mute);
}
.status-feed-eintrag:hover, .status-feed-eintrag:active { background: #f6f4ea; }
.status-feed-eintrag .status-feed-text { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--farbe-text); }
.status-feed-eintrag .status-feed-zeit { flex-shrink: 0; color: var(--farbe-text-mute); font-size: 11px; font-family: "SFMono-Regular", Consolas, monospace; }
.verlauf-eintrag-Status { border-left-color: #4a90d9; }
.verlauf-eintrag-StatusBestaetigung { border-left-color: var(--farbe-gruen); }
.verlauf-eintrag-Nachricht { border-left-color: #b07fd1; }
.verlauf-eintrag-Gespraech { border-left-color: var(--farbe-rot); }
.verlauf-eintrag-PttVerbindung { border-left-color: #8a8a8a; }
.verlauf-eintrag-Manuell { border-left-color: var(--farbe-text-mute); }
.verlauf-eintrag-EmailEingang { border-left-color: #d9a13a; }
.verlauf-eintrag-EmailAusgang { border-left-color: #3ab0a1; }
.verlauf-eintrag-EmailGeloescht { border-left-color: var(--farbe-rot); }
.verlauf-eintrag-NachrichtGeloescht { border-left-color: #c0392b; }
.verlauf-eintrag-Annektiert { border-left-color: #6a4fb5; }
.verlauf-eintrag-AnnektierungGeloest { border-left-color: #9c7fd6; }

.uebersicht-karte-wrapper { position: relative; height: 100%; }

.uebersicht-karte {
  height: 100%;
  border-radius: var(--radius-md);
  box-shadow: var(--schatten-sm);
  background: #e0ded2; /* sichtbarer Platzhalter, solange Leaflet noch lädt */
}

.karte-oben-rechts {
  position: absolute;
  top: 10px;
  right: 10px;
  left: 10px;
  max-width: 280px;
  margin-left: auto;
  display: flex;
  flex-direction: column;
  gap: 8px;
  z-index: 650; /* über Leaflets Marker-Pane (600), unter Modals (1100) */
  pointer-events: none; /* Container blockt keine Kartenklicks - Kinder aktivieren es gezielt wieder */
}
.karten-basis-auswahl {
  pointer-events: auto;
  padding: 7px 10px;
  border-radius: var(--radius-md);
  border: 1px solid #ddd9cb;
  background: rgba(255, 255, 255, 0.97);
  box-shadow: var(--schatten-sm);
  font-size: 12.5px;
  color: var(--farbe-text);
}

.maus-koordinaten-anzeige:not([hidden]) {
  position: absolute;
  bottom: 6px;
  left: 6px;
  z-index: 650;
  background: rgba(255, 255, 255, 0.85);
  color: #444;
  font-size: 10.5px;
  font-family: "SFMono-Regular", Consolas, monospace;
  padding: 2px 7px;
  border-radius: 4px;
  pointer-events: none;
  white-space: nowrap;
  max-width: calc(100% - 12px);
  overflow: hidden;
  text-overflow: ellipsis;
}
.einsatzgebiet-hover-anzeige:not([hidden]) { bottom: 26px; } /* eine Zeile über der Koordinatenanzeige */
[data-theme="dunkel"] .maus-koordinaten-anzeige:not([hidden]) { background: rgba(30, 36, 41, 0.85); color: #c8c5ba; }

.sprechwunsch-overlay:not([hidden]) {
  background: rgba(255, 255, 255, 0.97);
  border-radius: var(--radius-md);
  box-shadow: var(--schatten-md);
  padding: 8px 0;
  max-height: 260px;
  overflow-y: auto;
}
.gis-layer-dropdown { position: relative; }

.ptt-geraete-popup:not([hidden]) {
  position: fixed; /* wird per JS positioniert, siehe pttGeraeteAuswahlOeffnen() - gleiches Muster wie das Tabellen-Aktion-Popup */
  z-index: 900;
  background: var(--farbe-flaeche);
  border: 1px solid #ddd9cb;
  border-radius: var(--radius-md);
  box-shadow: var(--schatten-md);
  padding: 12px;
  min-width: 240px;
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.ptt-geraete-zeile {
  display: flex;
  flex-direction: column;
  gap: 4px;
  font-size: 12.5px;
  color: var(--farbe-text-mute);
}
.ptt-geraete-zeile select {
  padding: 6px;
  border-radius: 8px;
  border: 1px solid #ddd9cb;
  background: var(--farbe-flaeche);
  color: var(--farbe-text);
  font-size: 13px;
}
.ptt-geraete-hinweis { font-size: 11.5px; color: var(--farbe-text-mute); margin: 0; }
.gis-layer-dropdown-knopf {
  padding: 6px 10px;
  border-radius: 8px;
  border: 1px solid #ddd9cb;
  background: var(--farbe-bg);
  color: var(--farbe-text);
  font-size: 13px;
  cursor: pointer;
}
/* Auf Wunsch ergänzt: dezent roter Hinweis am Art-Filter-Knopf, sobald mindestens eine Art
   abgehakt wurde - macht sichtbar, dass hier gerade tatsächlich gefiltert wird, statt dass ein
   aktiver Filter unbemerkt bleibt. "Dezent" bewusst als Grundton + dünnem farbigen Rand statt
   kräftigem Rot - reine Karten-Filterung ist kein Fehler-/Warnzustand, nur ein Hinweis. */
#btnArtFilterDropdown.aktiv-gefiltert {
  background: #fdecea;
  border-color: #e7a8a0;
  color: #8a3226;
}
[data-theme="dunkel"] #btnArtFilterDropdown.aktiv-gefiltert { background: #3a2422; border-color: #6b3a32; color: #e0a396; }
.einsatzgebiete-auswahl:not([hidden]) {
  position: absolute;
  top: calc(100% + 4px);
  /* WICHTIGER FIX, auf Wunsch: von "right: 0" auf "left: 0" umgestellt - seit es zwei
     nebeneinander liegende Dropdowns dieser Art gibt (GIS-Layer UND WFS-Layer, auf Wunsch
     getrennt), bezog sich "right: 0" jeweils auf den eigenen, schmalen Button-Wrapper - ein
     Panel, das breiter als sein eigener Wrapper ist (praktisch immer der Fall), blutete dadurch
     nach LINKS über den Wrapper hinaus und konnte exakt auf dem PANEL des benachbarten Dropdowns
     landen, wenn beide gleichzeitig geöffnet waren. "left: 0" lässt jedes Panel stattdessen nach
     RECHTS ausdehnen, vom eigenen Button aus - keine Überlappung zwischen den beiden Panels
     mehr, selbst wenn beide gleichzeitig offen sind. */
  left: 0;
  z-index: 900; /* deutlich über normalem Seiteninhalt (Karte/Statusfeed), unter Modals (1100) */
  pointer-events: auto;
  background: var(--farbe-flaeche); /* blickdicht statt halbtransparent - klare Abgrenzung zum Inhalt darunter */
  border: 1px solid #ddd9cb;
  border-radius: var(--radius-md);
  box-shadow: var(--schatten-md);
  padding: 8px 12px;
  display: flex;
  flex-direction: column;
  gap: 5px;
  font-size: 12.5px;
  min-width: 170px;
  max-height: 220px;
  overflow-y: auto;
  white-space: nowrap;
}
.einsatzgebiete-auswahl label { display: flex; align-items: center; gap: 6px; cursor: pointer; }
.einsatzgebiete-zoom-hinweis { margin: 0 0 6px; font-size: 11px; color: var(--farbe-text-mute); font-style: italic; }
/* Auf Wunsch ergänzt: zeigt an, dass eine Kategorie bei der aktuellen Zoomstufe gerade nicht auf
   der Karte sichtbar ist - rein visuell, ändert nichts am Ankreuz-/Suchverhalten selbst. */
.kategorie-ausserhalb-zoom { color: var(--farbe-text-mute); opacity: 0.55; }
/* Auf Wunsch ergänzt: Verwaltungsliste für Punktfarbe/Sichtbarkeitsbereich. */
.ebenen-kategorie-system-titel { margin: 16px 0 6px; font-size: 14px; color: var(--farbe-text-mute); }
.ebenen-kategorie-system-titel:first-child { margin-top: 0; }
.ebenen-kategorie-zeile { display: flex; align-items: center; gap: 8px; padding: 6px 0; border-bottom: 1px solid var(--farbe-grau-inaktiv); }
.ebenen-kategorie-name { flex: 1 1 auto; }
.ebenen-kategorie-zoom-eingabe { width: 48px; }
.ebenen-kategorie-emoji-eingabe { width: 64px; text-align: center; }
.ebenen-kategorie-emoji-aktiv-label { display: inline-flex; align-items: center; gap: 4px; font-size: 13px; white-space: nowrap; }
/* Auf Wunsch ergänzt: Funktionsübersicht-Tabelle je Kategorie. */
.funktionsuebersicht-tabelle { width: 100%; border-collapse: collapse; margin-bottom: 12px; font-size: 13px; }
.funktionsuebersicht-tabelle tr { border-bottom: 1px solid var(--farbe-grau-inaktiv); }
.funktionsuebersicht-tabelle td { padding: 5px 8px 5px 0; vertical-align: top; }
.funktionsuebersicht-code { font-family: monospace; font-size: 11px; color: var(--farbe-text-mute); white-space: nowrap; }
/* Auf Wunsch ergänzt: Dateiablage-Reiter (QNAP/WebDAV). */
.dateiablage-bereich { padding: 12px; }
.dateiablage-reiter-leiste { display: flex; gap: 8px; margin-bottom: 10px; }
.dateiablage-reiter-btn { background: none; border: none; border-bottom: 2px solid transparent; padding: 6px 4px; cursor: pointer; color: var(--farbe-text-mute); font-size: 14px; }
.dateiablage-reiter-btn.dateiablage-reiter-aktiv { color: var(--farbe-primaer); border-bottom-color: var(--farbe-primaer); font-weight: 600; }
.dateiablage-werkzeugleiste { display: flex; gap: 8px; margin-bottom: 10px; }
.dateiablage-zeile { display: flex; align-items: center; gap: 10px; padding: 6px 0; border-bottom: 1px solid var(--farbe-grau-inaktiv); }
.dateiablage-name { flex: 1 1 auto; overflow-wrap: anywhere; }
.dateiablage-meta { color: var(--farbe-text-mute); font-size: 12px; flex-shrink: 0; }
/* Auf Wunsch ergänzt: Szenarien (vordefinierte Sammel-Annektierung). */
.szenario-bereich { padding: 12px; }
.szenario-werkzeugleiste { display: flex; gap: 8px; margin-bottom: 10px; }
.szenario-zeile { border: 1px solid var(--farbe-grau-inaktiv); border-radius: 8px; padding: 10px; margin-bottom: 10px; }
.szenario-zeile-kopf { display: flex; align-items: center; gap: 8px; }
.szenario-text { flex: 1 1 auto; font-weight: 600; }
.szenario-meta { color: var(--farbe-text-mute); font-size: 12px; margin: 6px 0; }
.szenario-aktionen { display: flex; gap: 8px; margin-top: 8px; }
.szenario-rufnamen-liste { max-height: 180px; overflow-y: auto; margin-bottom: 10px; }
.szenario-rufname-zeile { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 4px 0; border-bottom: 1px solid var(--farbe-grau-inaktiv); }
.szenario-rufname-zeile span { flex: 1 1 auto; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* Auf Wunsch ergänzt: Zielbefehlstelle-Suchbereich (ersetzt die frühere reine Freitext-
   Eingabe) - derselbe position:relative-Rahmen wie zuvor bei .szenario-rufname-hinzufuegen,
   nur unter neuem, treffenderem Namen. */
.szenario-zielbefehlstelle-bereich { position: relative; }
#szenarioAmtsbereichAuswahl {
  width: 100%; padding: 9px 12px; border-radius: var(--radius-md); border: 1px solid #ddd9cb;
  background: var(--farbe-flaeche); color: var(--farbe-text); font-size: 13px; margin-top: 4px;
}
/* Auf Wunsch ergänzt: Beschreibung deutlich breiter/höher als die übrigen Formularfelder - das
   Modal selbst ist inzwischen ebenfalls verbreitert (siehe #szenarioBearbeitenModal weiter
   unten), die Beschreibung soll diesen Platz auch tatsächlich nutzen. */
.szenario-beschreibung-eingabe { width: 100%; min-height: 80px; font: inherit; resize: vertical; margin-bottom: 8px; }
/* Auf Wunsch ergänzt: Amtsbereich-Checkbox-Liste statt Freitextsuche für die Rufnamen-Zuordnung -
   scrollbar bei vielen Einträgen, jede Zeile eine anklickbare Checkbox+Label-Kombination. */
.szenario-amtsbereich-liste { max-height: 220px; overflow-y: auto; margin-top: 8px; border: 1px solid var(--farbe-grau-inaktiv); border-radius: 8px; padding: 6px 10px; }
.szenario-amtsbereich-zeile { display: flex; align-items: center; gap: 8px; padding: 5px 0; cursor: pointer; }
.szenario-amtsbereich-zeile:not(:last-child) { border-bottom: 1px solid var(--farbe-grau-inaktiv); }
.szenario-rufname-treffer { position: absolute; z-index: 10; background: var(--farbe-flaeche); border: 1px solid var(--farbe-grau-inaktiv); border-radius: 6px; max-height: 200px; overflow-y: auto; width: 100%; box-shadow: var(--schatten-sm); }
.szenario-rufname-treffer-eintrag { display: block; width: 100%; text-align: left; padding: 8px 10px; background: none; border: none; cursor: pointer; }
.szenario-rufname-treffer-eintrag:hover { background: var(--farbe-bg); }
/* Auf Wunsch ergänzt (Anlass: Formular-Zeile mit Textarea/Eingabe/Button nebeneinander war
   unübersichtlich in einem schmalen Modal) - erzwingt eine klare vertikale Anordnung, jedes
   Element volle Breite, statt der generischen nebeneinander-Anordnung von .kartenbasis-neu-form
   (die für andere, breitere Formulare im Projekt sinnvoll bleibt und deshalb nicht global
   geändert wird). */
.szenario-bearbeiten-form { display: flex; flex-direction: column; gap: 8px; margin-bottom: 6px; }
.szenario-bearbeiten-form input {
  width: 100%; padding: 9px 12px; border-radius: var(--radius-md); border: 1px solid #ddd9cb;
  background: var(--farbe-flaeche); color: var(--farbe-text); font-size: 13px;
}
.szenario-bearbeiten-form button {
  align-self: flex-start; border: none; border-radius: 999px; padding: 9px 16px;
  font-size: 13px; font-weight: 600; background: var(--farbe-primaer); color: #fff; cursor: pointer;
}

/* WICHTIGER FIX, auf Wunsch (Anlass: der "✕"-Button zum Entfernen eines Rufnamens füllte die
   ganze Zeile als breite, leere Box aus) - .btn-secondary setzt global width:100% (gedacht für
   breite Aktions-Buttons), das ist für einen kleinen Icon-Button in einer Liste ungeeignet.
   Eigene, kompakte Klasse statt der Wiederverwendung von .btn-secondary. */
.szenario-rufname-entfernen-btn {
  width: auto; flex: 0 0 auto; padding: 4px 10px; font-size: 15px; font-weight: 600;
  border-radius: var(--radius-md); border: none; cursor: pointer;
  background: var(--farbe-bg); color: var(--farbe-primaer);
}
.szenario-rufname-entfernen-btn:active { transform: scale(0.92); }
/* Auf Wunsch ergänzt: Emoji-Marker als Alternative zum einfarbigen Punkt (siehe
   ebenenMarkerErstellen() in app.js). Kein Hintergrund/Rahmen - das Emoji selbst trägt die
   Bildwirkung, ein zusätzlicher Kreis/Schatten würde nur ablenken. */
.ebenen-emoji-marker-wrapper { background: none; border: none; }
.ebenen-emoji-marker { font-size: 22px; line-height: 28px; text-align: center; filter: drop-shadow(0 1px 2px rgba(0,0,0,0.5)); }

/* Auf Wunsch ergänzt: Kennung im Kreis + außen anliegende Richtungspfeilspitze (RTH/Flugzeuge/
   Schiffe, siehe ebenenMarkerErstellen()/richtungspfeilMarkerErstellen() in app.js). Die
   Pfeilspitze rotiert per transform:rotate() um das Zentrum der 34px-Box (transform-origin
   exakt auf die Boxmitte gesetzt, siehe Rechnung im JS-Kommentar) - der Kreis mit der Kennung
   bleibt selbst unrotiert und immer aufrecht lesbar. */
.ebenen-pfeil-marker-wrapper { background: none; border: none; }
.ebenen-pfeil-marker { position: relative; }
.ebenen-pfeil-kreis {
  position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);
  border-radius: 50%; display: flex; align-items: center; justify-content: center;
  color: #fff; font-size: 8px; font-weight: 700; line-height: 1;
  border: 2px solid #fff; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.45);
  overflow: hidden; white-space: nowrap; padding: 0 1px;
}
.ebenen-pfeil-spitze {
  position: absolute; top: 0; left: 50%;
  width: 0; height: 0;
  border-left: 6px solid transparent; border-right: 6px solid transparent;
  border-bottom: 9px solid; /* Farbe kommt inline per border-bottom-color, siehe app.js */
  /* transform-origin kommt inline (siehe app.js) - hängt von der jeweiligen Icon-Gesamtgröße ab
     (Ebenen-Kategorien 34px, Fahrzeuge 36px), deshalb hier bewusst nicht fest kodiert. */
  filter: drop-shadow(0 1px 1px rgba(0, 0, 0, 0.35));
}
/* Auf Wunsch ergänzt: zentriert das bestehende, unverändert 28px große Ruftyp-Badge innerhalb
   der größeren 36px-Box für Fahrzeuge (siehe uebersichtKarteMarkerSetzen()) - dieselbe
   Zentrierungstechnik wie bei .ebenen-pfeil-kreis oben. */
.uebersicht-badge-zentriert { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); }
.einsatzgebiete-auswahl .einsatzgebiete-farbpunkt {
  display: inline-block;
  width: 9px;
  height: 9px;
  border-radius: 50%;
  flex-shrink: 0;
}
.sprechwunsch-titel {
  pointer-events: none;
  font-size: 12.5px;
  font-weight: 700;
  color: var(--farbe-rot);
  padding: 0 12px 6px;
  border-bottom: 1px solid #eeece2;
  margin-bottom: 4px;
}
.sprechwunsch-liste { list-style: none; margin: 0; padding: 0; }
.sprechwunsch-eintrag {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 7px 12px;
  cursor: pointer;
  font-size: 13px;
  pointer-events: auto; /* Container hat pointer-events:none - hier gezielt wieder aktivieren */
}
.sprechwunsch-eintrag:hover, .sprechwunsch-eintrag:active { background: #fdecea; }
.sprechwunsch-eintrag .sprechwunsch-name { font-weight: 600; flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.sprechwunsch-eintrag .sprechwunsch-zeit { font-size: 11px; color: var(--farbe-text-mute); flex-shrink: 0; }

.karten-filter-leiste {
  display: flex;
  align-items: center;
  gap: 14px;
  margin-bottom: 8px;
  padding: 8px 12px;
  background: var(--farbe-flaeche);
  border-radius: var(--radius-md);
  box-shadow: var(--schatten-sm);
  font-size: 13.5px;
  flex-wrap: wrap;
}
.karten-filter-leiste label { display: flex; align-items: center; gap: 5px; cursor: pointer; }
.karten-filter-leiste input[type="checkbox"] { width: 16px; height: 16px; cursor: pointer; }
.karten-filter-leiste select {
  padding: 6px 8px;
  border-radius: 8px;
  border: 1px solid #ddd9cb;
  background: var(--farbe-bg);
  color: var(--farbe-text);
  font-size: 13px;
  flex-shrink: 0;
}

.uebersicht-filter-leiste {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-bottom: 10px;
}
.uebersicht-filter-leiste select {
  flex: 1 1 160px;
  min-width: 140px;
  padding: 8px 10px;
  border-radius: var(--radius-md);
  border: 1px solid #ddd9cb;
  background: var(--farbe-flaeche);
  color: var(--farbe-text);
  font-size: 13.5px;
}
/* Dezente rote Hintergrundfarbe, sobald eine Filter-Combobox nicht mehr auf ihrem Standardwert
   steht (Standard = Optionstext beginnt mit "Alle") - gilt unabhängig vom umgebenden Container,
   da die Filter-Comboboxen an mehreren Stellen der Oberfläche liegen (Leitstelle/Befehlstelle
   oben, Amtsbereich/Ruftyp/Online in der Filterleiste). */
select.filter-nicht-standard {
  background: #fdecea;
  border-color: #e8b4ac;
}
[data-theme="dunkel"] select.filter-nicht-standard { background: #3a1f1c; border-color: #5a2e28; }

.filter-freitext {
  flex: 1 1 200px;
  min-width: 160px;
  padding: 8px 10px;
  border-radius: var(--radius-md);
  border: 1px solid #ddd9cb;
  background: var(--farbe-flaeche);
  color: var(--farbe-text);
  font-size: 13.5px;
}

.uebersicht-tabelle-wrapper {
  overflow-x: auto;
  border-radius: var(--radius-md);
  box-shadow: var(--schatten-sm);
}

.uebersicht-tabelle {
  width: 100%;
  min-width: 900px; /* erzwingt horizontales Scrollen im Wrapper statt Spalten zu quetschen (11 Spalten) */
  border-collapse: collapse;
  background: var(--farbe-flaeche);
  border-radius: var(--radius-md);
  overflow: hidden;
  font-size: 14px;
}
.uebersicht-tabelle th, .uebersicht-tabelle td {
  padding: 10px 12px;
  text-align: left;
  border-bottom: 1px solid #eeece2;
  white-space: nowrap;
}
.uebersicht-tabelle th {
  background: var(--farbe-bg);
  font-size: 12px;
  text-transform: uppercase;
  letter-spacing: 0.03em;
  color: var(--farbe-text-mute);
  cursor: pointer;
  user-select: none;
  white-space: nowrap;
}
.uebersicht-tabelle th:hover { color: var(--farbe-primaer); }
.uebersicht-tabelle th:not([data-sort]) { cursor: default; }
.uebersicht-tabelle th:not([data-sort]):hover { color: var(--farbe-text-mute); }

/* Spaltenbreiten: Wache/Amtsbereich/Verbindung (3./4./8. Spalte) hatten zuvor keine feste Breite
   (rein automatische Größe nach Inhalt) - als Ausgangsbasis wurde je Spalte eine sinnvolle
   Breite angenommen (Wache/Amtsbereich als Textspalten ähnlich Leitstelle/Befehlstelle,
   Verbindung nach ihrem tatsächlichen Inhalt "Online"/"Offline" + Punkt-Symbol), darauf die
   gewünschte relative Änderung angewendet: Wache +50%, Amtsbereich +30%, Verbindung -30%. */
.uebersicht-tabelle th:nth-child(3), .uebersicht-tabelle td:nth-child(3) { width: 135px; } /* Wache: 90px Basis +50% */
.uebersicht-tabelle th:nth-child(4), .uebersicht-tabelle td:nth-child(4) { width: 145px; } /* Amtsbereich: 110px Basis +30% */
.uebersicht-tabelle th:nth-child(8), .uebersicht-tabelle td:nth-child(8) {
  width: 65px; /* Verbindung: 95px Basis -30% */
  white-space: normal; /* Umbruch erlauben, sonst würde der nowrap-Inhalt "Offline" die Verkleinerung wieder aufheben */
}
.uebersicht-zeile-klickbar { cursor: pointer; transition: background 0.1s ease; }
.uebersicht-zeile-klickbar:hover { background: var(--farbe-bg); }
.uebersicht-zeile-klickbar:active { background: #e4e1d3; }
.uebersicht-zeile-gesperrt { opacity: 0.5; }
.uebersicht-zeile-gesperrt .uebersicht-name-zelle::after { content: " (gesperrt)"; font-style: italic; color: var(--farbe-rot); font-weight: 400; }

.uebersicht-zeile-hervorgehoben { animation: zeile-hervorheben 1.5s ease-out; }
@keyframes zeile-hervorheben {
  0% { background: #fff3c4; }
  100% { background: transparent; }
}
.uebersicht-tabelle tbody tr:last-child td { border-bottom: none; }

.uebersicht-einsatzinfo-zelle {
  max-width: 160px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  color: var(--farbe-text-mute);
}

.uebersicht-name-zelle {
  max-width: 99px; /* +10% gegenüber 90px */
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.uebersicht-wache-zelle {
  max-width: 90px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.uebersicht-amtsbereich-zelle {
  max-width: 112px; /* -30% gegenüber einer 160px-Baseline (wie bei Info) */
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.uebersicht-paginierung:not([hidden]) {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 14px;
  margin: 10px 0 16px;
}
.btn-seite {
  border: 1px solid #ddd9cb;
  background: var(--farbe-flaeche);
  color: var(--farbe-text);
  border-radius: 999px;
  padding: 6px 14px;
  font-size: 13px;
  cursor: pointer;
}
.btn-seite:disabled { opacity: 0.4; cursor: default; }
.uebersicht-seite-text { font-size: 13px; color: var(--farbe-text-mute); }

.einsatzinfo-bearbeiten-bereich:not([hidden]) {
  display: block;
  background: var(--farbe-flaeche);
  border-radius: var(--radius-md);
  box-shadow: var(--schatten-sm);
  padding: 14px 16px;
  margin-bottom: 20px;
}
.einsatzinfo-bearbeiten-bereich label {
  display: block;
  font-size: 13px;
  color: var(--farbe-text-mute);
  margin-bottom: 8px;
}
.einsatzinfo-bearbeiten-bereich label strong { color: var(--farbe-primaer); }
.einsatzinfo-bearbeiten-bereich textarea {
  width: 100%;
  min-height: 70px;
  resize: vertical;
  border-radius: var(--radius-md);
  border: 1px solid #ddd9cb;
  background: var(--farbe-bg);
  color: var(--farbe-text);
  font: inherit;
  font-size: 14px;
  padding: 10px 12px;
}
.info-bearbeiten-aktionen {
  display: flex;
  align-items: center;
  gap: 10px;
  margin-top: 10px;
}
.einsatzinfo-zeichen-zaehler { font-size: 12px; color: var(--farbe-text-mute); margin-right: auto; }
.btn-einsatzinfo-loeschen, .btn-einsatzinfo-speichern {
  border: none;
  border-radius: 999px;
  padding: 7px 16px;
  font-size: 13px;
  font-weight: 600;
  cursor: pointer;
}
.btn-einsatzinfo-loeschen { background: #fdecea; color: var(--farbe-rot); }
.btn-einsatzinfo-speichern { background: var(--farbe-primaer); color: #fff; }
.btn-einsatzinfo-loeschen:active, .btn-einsatzinfo-speichern:active { transform: scale(0.96); }
.btn-einsatzinfo-loeschen:disabled, .btn-einsatzinfo-speichern:disabled { opacity: 0.6; cursor: default; }
.einsatzinfo-speichern-hinweis { font-size: 12.5px; color: var(--farbe-gruen); min-height: 16px; margin: 8px 0 0; }

.befehlstelle-aktion-bereich:not([hidden]) {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-top: 10px;
  padding-top: 10px;
  border-top: 1px solid #eeece2;
}
.befehlstelle-aktion-titel { font-size: 12.5px; color: var(--farbe-text-mute); margin-right: auto; }
.btn-befehlstelle-annektieren, .btn-befehlstelle-loesen {
  border: none;
  border-radius: 999px;
  padding: 6px 14px;
  font-size: 12.5px;
  font-weight: 600;
  cursor: pointer;
}
.btn-befehlstelle-annektieren { background: var(--farbe-primaer); color: #fff; }
.btn-befehlstelle-loesen { background: #fdecea; color: var(--farbe-rot); }

.uebersicht-status-punkt {
  display: inline-block;
  width: 10px;
  height: 10px;
  border-radius: 50%;
  margin-right: 6px;
  vertical-align: middle;
  flex-shrink: 0;
}
.uebersicht-status-punkt.gelb { background: var(--farbe-gelb); }
.uebersicht-status-punkt.gruen { background: var(--farbe-gruen); }
.uebersicht-status-punkt.leer { background: var(--farbe-grau-inaktiv); }

.uebersicht-verbindung {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 13px;
}
.uebersicht-verbindung-punkt {
  width: 9px;
  height: 9px;
  border-radius: 50%;
  flex-shrink: 0;
}
.uebersicht-verbindung-punkt.online { background: var(--farbe-gruen); }
.uebersicht-verbindung-punkt.offline { background: var(--farbe-grau-inaktiv); }

.btn-status-bestaetigen {
  border: none;
  border-radius: 999px;
  padding: 6px 14px;
  font-size: 12.5px;
  font-weight: 600;
  background: var(--farbe-gelb);
  color: #3d2600;
  cursor: pointer;
  white-space: nowrap;
}
.btn-status-bestaetigen:hover { filter: brightness(0.95); }
.btn-status-bestaetigen:active { transform: scale(0.96); }
.btn-status-bestaetigen:disabled { opacity: 0.6; cursor: default; }

.uebersicht-aktion-zelle {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 6px;
}

/* Kompakter "Aktion"-Button je Tabellenzeile + ein einziges, wiederverwendbares Popup-Menü
   (Status setzen / Annektieren / Annektion lösen) statt der vorherigen, immer sichtbaren
   Kombination aus Statusauswahl-Combobox + "Setzen"-Taste direkt in der Zeile. */
.btn-tabellen-aktion {
  border: none;
  border-radius: 999px;
  padding: 6px 14px;
  font-size: 12.5px;
  font-weight: 600;
  background: var(--farbe-bg);
  color: var(--farbe-text);
  cursor: pointer;
}
.btn-tabellen-aktion:hover { filter: brightness(0.97); }
.tabellen-aktion-popup:not([hidden]) {
  position: fixed; /* wird per JS mit exakten Koordinaten positioniert, siehe tabellenAktionOeffnen() */
  z-index: 900; /* über normalem Seiteninhalt, unter Modals (1100) - gleiche Ebene wie das GIS-Layer-Dropdown */
  background: var(--farbe-flaeche);
  border: 1px solid #ddd9cb;
  border-radius: var(--radius-md);
  box-shadow: var(--schatten-md);
  padding: 6px;
  min-width: 170px;
}
.tabellen-aktion-menu { display: flex; flex-direction: column; gap: 2px; }
.tabellen-aktion-eintrag {
  border: none;
  background: none;
  text-align: left;
  padding: 8px 10px;
  border-radius: 6px;
  font-size: 13px;
  color: var(--farbe-text);
  cursor: pointer;
}
.tabellen-aktion-eintrag:hover { background: var(--farbe-bg); }
.tabellen-aktion-eintrag:disabled { opacity: 0.4; cursor: default; }
.tabellen-aktion-eintrag:disabled:hover { background: none; }
.tabellen-aktion-status-auswahl {
  display: flex;
  align-items: center;
  gap: 6px;
}
.tabellen-aktion-zurueck {
  border: none;
  background: var(--farbe-bg);
  border-radius: 50%;
  width: 26px;
  height: 26px;
  flex-shrink: 0;
  font-size: 13px;
  cursor: pointer;
}
#tabellenAktionStatusSelect {
  flex: 1;
  min-width: 150px;
  padding: 6px;
  border-radius: 8px;
  border: 1px solid #ddd9cb;
  background: var(--farbe-flaeche);
  color: var(--farbe-text);
  font-size: 12.5px;
}
.tabellen-aktion-bestaetigen {
  border: none;
  border-radius: 999px;
  padding: 6px 12px;
  font-size: 12.5px;
  font-weight: 600;
  background: var(--farbe-primaer);
  color: #fff;
  cursor: pointer;
  flex-shrink: 0;
}

/* Ruftyp-Symbole: RTW/NEF/KTW/DL - eigene, einfache Piktogramme (keine Marken-/Organisationslogos) */
.ruftyp-badge {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 28px;
  height: 28px;
  border-radius: 50%;
  color: #fff;
  flex-shrink: 0;
}
.ruftyp-badge svg { width: 16px; height: 16px; }
.ruftyp-badge-generisch {
  background: var(--farbe-grau-inaktiv);
  color: #3a3a34;
  font-size: 9px;
  font-weight: 700;
}

/* ============ Nachrichten: Chat-Bubbles (inkl. Status-Verlauf, dezent integriert) ============ */
.nachrichten-liste {
  list-style: none;
  padding: 10px;
  margin: 0 0 10px;
  display: flex;
  flex-direction: column;
  gap: 10px;
  max-height: 460px;
  overflow-y: auto;
  background: #e9e6da;
  border-radius: var(--radius-md);
  box-shadow: inset 0 1px 4px rgba(0,0,0,0.06);
}
/* Etwas mehr Platz am rechten Rand beim Client - erleichtert das Hochscrollen zu älteren
   Nachrichten per Wischgeste, ohne dabei versehentlich eine Nachricht ganz am Rand anzutippen.
   Bewusst nur beim Client (nicht im Zentrale-/Befehlstelle-Modus, dort hat die Liste eine andere
   Spaltenbreite/Nutzung). */
.haupt-bereich:not(.zentrale-modus) .nachrichten-liste { padding-right: 22px; }

/* Statusereignisse: bewusst unauffällig und neutral, damit sie sich klar von echten
   Nachrichten abheben - zentriert, grau, ohne Sprechblasenform (wie Systemhinweise in Chats). */
.status-notiz {
  align-self: center;
  background: rgba(0,0,0,0.07);
  color: var(--farbe-text-mute);
  font-size: 11.5px;
  padding: 5px 12px;
  border-radius: 999px;
  max-width: 90%;
  text-align: center;
}

.nachricht-eintrag:not([hidden]) {
  display: flex;
  align-items: flex-end;
  gap: 8px;
  max-width: 85%;
  align-self: flex-start;
}
.nachricht-eintrag.gesendet {
  align-self: flex-end;
  flex-direction: row-reverse;
}
.nachricht-antwortbar { cursor: pointer; }
.nachricht-antwortbar:active .nachricht-bubble { opacity: 0.75; }

.nachricht-avatar {
  flex-shrink: 0;
  width: 32px;
  height: 32px;
  border-radius: 50%;
  background: var(--farbe-primaer);
  color: #fff;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 13px;
  font-weight: 600;
}

.nachricht-bubble {
  background: var(--farbe-flaeche);
  border-radius: 4px 14px 14px 14px;
  padding: 8px 12px 6px;
  box-shadow: var(--schatten-sm);
  min-width: 0;
}
.nachricht-eintrag.prio-2 .nachricht-bubble { background: #fdecea; }
.nachricht-eintrag.gesendet .nachricht-bubble {
  background: #dbeee7;
  border-radius: 14px 4px 14px 14px;
}

.nachricht-absender {
  font-size: 12.5px;
  font-weight: 700;
  color: var(--farbe-primaer);
  margin-bottom: 2px;
}
.nachricht-eintrag.prio-2 .nachricht-absender { color: var(--farbe-rot); }
.nachricht-eintrag.gesendet .nachricht-absender { color: var(--farbe-akzent); }

.nachricht-text { font-size: 14px; line-height: 1.35; overflow-wrap: anywhere; }

.nachricht-zeit {
  font-size: 10.5px;
  color: var(--farbe-text-mute);
  text-align: right;
  margin-top: 3px;
}

.nachricht-haken {
  margin-left: 4px;
  font-size: 11px;
  letter-spacing: -1px;
  color: var(--farbe-text-mute);
}
.nachricht-haken.gelesen {
  color: var(--farbe-primaer);
  font-weight: 700;
  font-size: 12px;
}

.leer-hinweis {
  color: var(--farbe-text-mute);
  font-size: 13px;
  background: transparent !important;
  box-shadow: none !important;
  border-left: none !important;
  padding: 4px 2px !important;
  max-width: 100% !important;
}

.schnelltext-leiste:not([hidden]) {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  padding-bottom: 6px;
  margin-bottom: 6px;
  margin-top: 6px;
}
.btn-schnelltext {
  flex: 0 0 calc(25% - 4.5px); /* genau 4 pro Zeile (3 Lücken à 6px), danach automatischer Umbruch */
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  border: 1px solid #ddd9cb;
  background: var(--farbe-flaeche);
  color: var(--farbe-text);
  border-radius: 999px;
  padding: 6px 14px;
  font-size: 12.5px;
  cursor: pointer;
}
.btn-schnelltext:hover, .btn-schnelltext:active { background: var(--farbe-bg); }

.nachricht-senden-form {
  display: flex;
  flex-direction: column;
  gap: 8px;
  margin-bottom: 4px;
}
.nachricht-empfaenger-zeile {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px;
}
.nachricht-empfaenger-zeile select {
  flex: 1 1 auto;
  min-width: 0;
  max-width: none;
  border-radius: var(--radius-md);
  border: 1px solid #ddd9cb;
  padding: 0 10px;
  font-size: 14px;
  background: var(--farbe-flaeche);
  color: var(--farbe-text);
}
#tonAuswahl { flex: 0 0 auto; max-width: 170px; }
.nachricht-empfaenger-zeile select { height: 44px; }

/* WICHTIGER FIX, auf Wunsch: Empfänger-Suchfeld bei Zentrale/Befehlstelle hatte bisher keine
   eigene CSS-Regel und fiel auf die kleine Browser-Standardgröße zurück - deutlich kleiner als
   das gleich hohe <select> daneben (Client-Ansicht) bzw. als der Rest der Zeile. Jetzt auf
   dieselbe Höhe (44px) UND eine etwas größere Schrift (15px statt der 14px des Dropdowns, da
   Freitext-Eingabe tendenziell mehr visuellen Kontrast von der Umgebung profitiert) gebracht.
   Zusätzlich: sichtbarer X-Button zum sofortigen Löschen der Eingabe, statt manuellem
   Markieren+Löschen - erscheint nur, wenn tatsächlich Text im Feld steht (siehe app.js). */
.empfaenger-suche-wrapper {
  position: relative;
  flex: 1 1 auto;
  min-width: 0;
}
.empfaenger-suche-wrapper input {
  width: 100%;
  height: 44px;
  border-radius: var(--radius-md);
  border: 1px solid #ddd9cb;
  padding: 0 40px 0 12px; /* rechts Platz für den X-Button */
  font-size: 15px;
  background: var(--farbe-flaeche);
  color: var(--farbe-text);
}
.btn-empfaenger-suche-loeschen {
  position: absolute;
  right: 4px;
  top: 50%;
  transform: translateY(-50%);
  width: 32px;
  height: 32px;
  border: none;
  border-radius: 50%;
  background: var(--farbe-bg);
  color: var(--farbe-text-mute);
  font-size: 14px;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
}
.btn-empfaenger-suche-loeschen:active { background: var(--farbe-grau-inaktiv); }

.nachricht-text-zeile {
  display: flex;
  align-items: center;
  gap: 8px;
}
.nachricht-text-zeile input[type="text"] {
  flex: 1;
  min-width: 0;
  border-radius: var(--radius-md);
  border: 1px solid #ddd9cb;
  padding: 0 12px;
  height: 44px;
  font-size: 16px; /* verhindert Auto-Zoom beim Fokussieren auf iOS */
  background: var(--farbe-flaeche);
}

.btn-senden {
  flex-shrink: 0;
  width: 44px;
  height: 44px;
  border-radius: 50%;
  border: none;
  background: var(--farbe-primaer);
  color: #fff;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
}
.btn-senden:active { transform: scale(0.94); }

.btn-icon-hell {
  flex-shrink: 0;
  width: 44px;
  height: 44px;
  border-radius: 50%;
  border: 1px solid #ddd9cb;
  background: var(--farbe-flaeche);
  color: var(--farbe-primaer);
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
}
.btn-icon-hell:active { transform: scale(0.94); }
#btnAudioAufnehmen {
  touch-action: none; /* verhindert Scrollen/Zoomen beim Gedrückthalten auf Touch-Geräten (Client) */
  user-select: none;
  -webkit-user-select: none;
}

.foto-vorschau-bereich:not([hidden]) {
  position: relative;
  display: inline-block;
  margin-bottom: 8px;
}
.foto-vorschau-bereich img {
  max-height: 110px;
  max-width: 160px;
  border-radius: var(--radius-md);
  box-shadow: var(--schatten-sm);
  display: block;
}
.btn-foto-entfernen {
  position: absolute;
  top: -8px;
  right: -8px;
  width: 24px;
  height: 24px;
  border-radius: 50%;
  border: none;
  background: var(--farbe-rot);
  color: #fff;
  font-size: 13px;
  line-height: 1;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
}

/* Aufnahme läuft gerade - roter Punkt pulsiert, Live-Zeitanzeige, Stopp-Button */
.audio-aufnahme-anzeige:not([hidden]) {
  display: flex;
  align-items: center;
  gap: 8px;
  background: #fdecea;
  border-radius: var(--radius-md);
  padding: 8px 12px;
  margin-bottom: 8px;
  font-size: 13px;
  font-variant-numeric: tabular-nums;
}
.audio-aufnahme-punkt {
  width: 10px;
  height: 10px;
  border-radius: 50%;
  background: var(--farbe-rot);
  animation: audio-aufnahme-pulsieren 1s ease-in-out infinite;
}
@keyframes audio-aufnahme-pulsieren {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.3; }
}
.btn-audio-stop {
  margin-left: auto;
  border: none;
  border-radius: 999px;
  padding: 5px 12px;
  font-size: 12.5px;
  font-weight: 600;
  background: var(--farbe-rot);
  color: #fff;
  cursor: pointer;
}

/* Vorschau der fertigen Aufnahme vor dem Senden */
.audio-vorschau-bereich:not([hidden]) {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-bottom: 8px;
}
.audio-vorschau-bereich audio { height: 36px; max-width: 220px; }

/* Foto-Anhang innerhalb einer Chat-Bubble (ein-/ausgehend) */
.nachricht-foto {
  display: block;
  max-width: 220px;
  max-height: 220px;
  border-radius: 10px;
  margin-top: 4px;
  cursor: pointer;
}

.nachricht-audio { display: block; margin-top: 4px; height: 36px; max-width: 220px; }
.nachricht-standort-link {
  display: inline-block;
  margin-top: 6px;
  font-size: 12.5px;
  font-weight: 600;
  color: var(--farbe-primaer);
  text-decoration: underline;
}

/* Vollbild-Vorschau bei Klick auf ein Foto im Chat */
.foto-lightbox {
  position: fixed;
  inset: 0;
  background: rgba(0,0,0,0.85);
  display: flex;
  align-items: center;
  justify-content: center;
  z-index: 1000;
  padding: 20px;
  cursor: zoom-out;
}
.foto-lightbox img {
  max-width: 100%;
  max-height: 100%;
  border-radius: 8px;
}

/* ============ Einstellungen (2. Seite) ============ */
.einstellungen-bereich { max-width: 480px; margin: 0 auto; padding: 20px 18px calc(40px + env(safe-area-inset-bottom)); }

/* Auf Wunsch ergänzt (Anlass: Einstellungen-Bildschirm war eine lange, unsortierte Liste
   gleich aussehender Buttons) - gruppierte, tabellenartige Darstellung. Jede Gruppe ein
   umrandeter Block mit Überschrift, die Einträge darin als kompakte Zeilen mit dünner
   Trennlinie statt als große, abgerundete Einzel-Buttons - deutlich leichter überblickbar bei
   über 30 Einträgen. Bewusst auf ".einstellungen-gruppe" beschränkt (nicht global an
   .btn-secondary geändert), damit dieselbe Klasse in anderen Modalen unverändert bleibt. */
.einstellungen-gruppe-titel {
  font-size: 13px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.03em;
  color: var(--farbe-text-mute); margin: 22px 4px 6px;
}
.einstellungen-gruppe {
  background: var(--farbe-flaeche); border: 1px solid var(--farbe-grau-inaktiv);
  border-radius: var(--radius-lg); overflow: hidden;
}
.einstellungen-gruppe > .btn-secondary,
.einstellungen-gruppe > .btn-abmelden,
.einstellungen-gruppe > .btn-benutzerhandbuch {
  width: 100%; text-align: left; background: none; border: none; border-radius: 0;
  padding: 13px 16px; font-size: 15px; font-weight: 500; box-shadow: none;
}
.einstellungen-gruppe > .btn-secondary:not(:last-child):not([hidden]),
.einstellungen-gruppe > .btn-abmelden:not(:last-child):not([hidden]),
.einstellungen-gruppe > .btn-benutzerhandbuch:not(:last-child):not([hidden]) {
  border-bottom: 1px solid var(--farbe-grau-inaktiv);
}
.einstellungen-gruppe > .btn-abmelden { color: var(--farbe-rot); }
/* Statuszeilen/Hinweise/Datei-Import-Bereiche innerhalb einer Gruppe etwas eingerückt statt
   randlos, damit klar bleibt, zu welchem Button darüber sie gehören. */
.einstellungen-gruppe .aktualisieren-hinweis,
.einstellungen-gruppe .einsatzortadressen-bereich,
.einstellungen-gruppe .benutzer-import-bereich,
.einstellungen-gruppe .verlauf-stumm-label {
  padding: 0 16px 10px;
}
.einstellungen-gruppe .einsatzortadressen-bereich .btn-secondary,
.einstellungen-gruppe .benutzer-import-bereich .btn-secondary { padding: 13px 0; }

.btn-zurueck {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  background: none;
  border: none;
  color: var(--farbe-primaer);
  font-size: 15px;
  font-weight: 600;
  cursor: pointer;
  padding: 12px 4px;
  margin: -8px 0 12px -4px;
  min-height: 44px;
}

.einstellungen-bereich h1 { font-size: 20px; font-weight: 600; margin: 0 0 20px; }

.konto-karte {
  background: var(--farbe-flaeche);
  border-radius: var(--radius-md);
  box-shadow: var(--schatten-sm);
  padding: 6px 16px;
  margin-bottom: 28px;
}
.konto-zeile:not([hidden]) {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 12px;
  padding: 14px 0;
  border-bottom: 1px solid #eeece2;
  font-size: 14px;
}
.konto-zeile:last-child { border-bottom: none; }
.konto-zeile span { color: var(--farbe-text-mute); }
.konto-zeile strong { font-weight: 600; text-align: right; overflow: hidden; text-overflow: ellipsis; }

.dunkelmodus-zeile {
  background: var(--farbe-flaeche);
  border-radius: var(--radius-md);
  box-shadow: var(--schatten-sm);
  padding: 12px 16px;
  margin-bottom: 20px;
  border-bottom: none;
}
.dunkelmodus-schalter { position: relative; display: inline-block; width: 44px; height: 26px; flex-shrink: 0; }
.dunkelmodus-schalter input { opacity: 0; width: 0; height: 0; }
.dunkelmodus-schieber {
  position: absolute; inset: 0; cursor: pointer;
  background: var(--farbe-grau-inaktiv);
  border-radius: 999px;
  transition: background 0.2s;
}
.dunkelmodus-schieber::before {
  content: "";
  position: absolute;
  height: 20px; width: 20px;
  left: 3px; bottom: 3px;
  background: #fff;
  border-radius: 50%;
  transition: transform 0.2s;
}
.dunkelmodus-schalter input:checked + .dunkelmodus-schieber { background: var(--farbe-primaer); }
.dunkelmodus-schalter input:checked + .dunkelmodus-schieber::before { transform: translateX(18px); }

.aktualisieren-hinweis {
  text-align: center;
  font-size: 13px;
  color: var(--farbe-gruen);
  min-height: 18px;
  margin: 8px 0 20px;
}

.benutzer-import-bereich:not([hidden]) {
  display: flex;
  gap: 8px;
  margin-top: 8px;
  flex-wrap: wrap;
}
.benutzer-import-bereich input[type="file"] {
  flex: 1 1 180px;
  min-width: 0;
  font-size: 12.5px;
  padding: 8px 0;
}

.btn-abmelden { background: #fdecea; color: var(--farbe-rot); margin-top: 8px; }

/* ============ Modal: Fehlversuche (nur Zentrale) ============ */
.modal-overlay:not([hidden]) {
  position: fixed;
  inset: 0;
  background: rgba(0,0,0,0.5);
  display: flex;
  align-items: center;
  justify-content: center;
  z-index: 1100;
  padding: 20px;
}
.modal-panel {
  background: var(--farbe-flaeche);
  border-radius: var(--radius-lg);
  box-shadow: var(--schatten-md);
  width: 100%;
  /* Auf Wunsch ergänzt: deutlich breiter als vorher (560px) - Formulare mit mehreren
     nebeneinander liegenden Feldern (z.B. WFS-/Kartenbasis-Verwaltung) wirkten bei 560px
     gestaucht, Felder rutschten unnötig früh in die nächste Zeile. Generell "breiter als hoch"
     gewünscht - max-height bleibt unverändert bei 85vh, nur die Breite wächst. */
  max-width: 720px;
  max-height: 85vh;
  display: flex;
  flex-direction: column;
  padding: 20px;
  /* Auf Wunsch ergänzt: Fenster per Ziehen am unteren rechten Rand in der Größe veränderbar
     (native Browser-Funktion, kein JS nötig) - vorher fest auf max-width/max-height begrenzt,
     was besonders bei den WFS-/Kartenbasis-Verwaltungslisten mit mehreren Einträgen unnötig
     Bildlaufleisten erzwang, statt das Fenster einfach größer zu ziehen. min-width/-height
     verhindert ein versehentliches Zusammenziehen auf unbrauchbare Größe. */
  resize: both;
  overflow: auto;
  min-width: 320px;
  min-height: 220px;
}
.modal-kopf {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 4px;
  /* Auf Wunsch ergänzt: der Kopfbereich dient jetzt als Ziehgriff, um das ganze Fenster frei auf
     dem Bildschirm zu verschieben (siehe modalVerschiebbarMachen() in app.js) - der Mauszeiger
     zeigt das mit dem "move"-Cursor an. */
  cursor: move;
  user-select: none;
}
.modal-kopf h2 { font-size: 17px; margin: 0; }
.btn-modal-schliessen {
  border: none;
  background: none;
  font-size: 16px;
  color: var(--farbe-text-mute);
  cursor: pointer;
  width: 32px;
  height: 32px;
  border-radius: 50%;
}
.btn-modal-schliessen:hover { background: var(--farbe-bg); }
.modal-hinweis { font-size: 12.5px; color: var(--farbe-text-mute); margin: 0 0 12px; }

.gis-suche-ergebnisliste {
  list-style: none;
  margin: 12px 0 0;
  padding: 0;
  max-height: 320px;
  overflow-y: auto;
}
.gis-suche-eintrag {
  padding: 8px 10px;
  border-radius: 8px;
  cursor: pointer;
  border: 1px solid transparent;
}
.gis-suche-eintrag:hover { background: #f0eee4; border-color: #ddd9cb; }
.gis-suche-eintrag-layer { font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.03em; color: var(--farbe-text-mute); }
.gis-suche-eintrag-text { font-size: 13.5px; color: var(--farbe-text); }
.gis-suche-gruppenkopf {
  font-size: 11px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.03em;
  color: var(--farbe-primaer);
  padding: 10px 10px 4px;
  border-bottom: 1px solid #ddd9cb;
  margin-bottom: 2px;
}
.gis-suche-gruppenkopf:first-child { padding-top: 2px; }
.qr-erzeugen-bild {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 8px;
  margin-top: 16px;
  min-height: 20px;
}
.qr-erzeugen-beschriftung { font-family: monospace; font-size: 13px; color: var(--farbe-text-mute); margin: 0; word-break: break-all; }

/* ============ Labels drucken (nur ZENTRALE, Einstellungen) ============
   Im normalen Bildschirmbetrieb komplett unsichtbar (display: none) - existiert nur als
   Druckvorlage, die per JS befüllt und dann per window.print() ausgegeben wird.

   Drei Dichtestufen über CSS-Variablen, per data-dichte-Attribut ausgewählt (siehe
   labelsDichteAuswahl im JS) - jede Stufe wurde mit wkhtmltopdf tatsächlich als PDF gerendert
   und die Label-Anzahl pro Seite ausgezählt, nicht nur geschätzt:
   - "8": großzügig, 8 Labels/Seite, beste Lesbarkeit
   - "12": mittel, 12 Labels/Seite (Standard)
   - "16": kompakt, 16 Labels/Seite, weiterhin lesbar, aber deutlich kleiner
   QR-Code sitzt bewusst NEBEN (nicht über) dem Text - das nutzt die eher breite als hohe Form
   eines Labels deutlich platzsparender aus als eine vertikale Stapelung. */
.labels-druckbereich {
  display: none;
  --label-qr-size: 82px;
  --label-taktisch-font: 10px;
  --label-rufname-font: 15px;
  --label-padding: 5px;
  --label-anweisung-font: 12px;
  --label-anweisung-titel-font: 13px;
  --label-rufname-margin: 2px;
  --label-gap: 5mm;
  --label-border: 2.5px;
}
.labels-druckbereich[data-dichte="8"] {
  --label-qr-size: 120px;
  --label-taktisch-font: 14px;
  --label-rufname-font: 22px;
  --label-padding: 9px;
  --label-anweisung-font: 17px;
  --label-anweisung-titel-font: 20px;
  --label-rufname-margin: 3px;
  --label-gap: 7mm;
  --label-border: 3.5px;
}
.labels-druckbereich[data-dichte="16"] {
  --label-qr-size: 63px;
  --label-taktisch-font: 9px;
  --label-rufname-font: 13px;
  --label-padding: 3px;
  --label-anweisung-font: 10px;
  --label-anweisung-titel-font: 12px;
  --label-rufname-margin: 1.5px;
  --label-gap: 3.35mm;
  --label-border: 2px;
}

.label-zeile {
  display: flex;
  page-break-inside: avoid; /* ein einzelnes Label darf beim Drucken nie über eine Seitengrenze hinweg zerrissen werden */
  margin-bottom: var(--label-gap);
}
.label-zelle {
  flex: 1 1 50%;
  box-sizing: border-box;
  border: var(--label-border) solid #c00000; /* dicker roter Rahmen als Schneidehilfe fürs Laminieren */
  padding: var(--label-padding);
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
}
.label-text-block { text-align: center; }
.label-text-block p { margin: 0 0 1px; }
.label-taktisch { font-weight: 700; font-size: var(--label-taktisch-font); line-height: 1.1; }
.label-rufname { font-weight: 700; font-size: var(--label-rufname-font); margin: var(--label-rufname-margin) 0 !important; }
.label-zelle img { width: var(--label-qr-size); height: var(--label-qr-size); flex-shrink: 0; }
.label-anweisung-titel { font-weight: 700; font-size: var(--label-anweisung-titel-font); margin-bottom: 2px !important; }
.label-anweisung-text { font-size: var(--label-anweisung-font); line-height: 1.2; }
.label-anweisung-text a { color: #1155cc; font-weight: 700; }

@media print {
  /* Beim Drucken: ausschließlich der Label-Bereich sichtbar, die komplette restliche App
     (Kopfzeile, Tabelle, Karte, Einstellungen selbst) wird ausgeblendet. Bewusst mit einer
     eigenen Modus-Klasse gescopt (labels-drucken-modus) - ohne diese Einschränkung würde diese
     Regel JEDEN Druckvorgang in der App betreffen, nicht nur das Label-Drucken, und dabei jeden
     anderen Druck-Bereich (z.B. den E-Mail-Druck) fälschlich mit ausblenden, da er außerhalb von
     #einstellungenBereich liegt - genau das war die Ursache eines leeren E-Mail-Ausdrucks. */
  body.labels-drucken-modus > *:not(#einstellungenBereich) { display: none !important; }
  body.labels-drucken-modus #einstellungenBereich > *:not(#labelsDruckbereich) { display: none !important; }
  .labels-druckbereich { display: none; }
  body.labels-drucken-modus .labels-druckbereich { display: block !important; }
  .label-zeile { break-inside: avoid; }

  /* 3 cm rechter Seitenrand, bewusst zusätzlich zum eigentlichen Zellen-Inhalt: Die Labels
     werden nach dem Ausschneiden in der Mitte (zwischen den beiden .label-zelle) gefaltet, dann
     laminiert und am rechten Rand mit einer Metallöse gestanzt - dieser Rand bleibt dafür
     absichtlich frei von Text/QR-Code, damit die Lochung nirgends Inhalt trifft. */
  @page { margin: 1cm 3cm 1cm 1cm; }
}

/* E-Mail drucken: Zweiter Anlauf nach einem gescheiterten Versuch, Sichtbarkeit innerhalb der
   bestehenden, tief verschachtelten Struktur umzuschalten (dieser Ansatz funktionierte trotz
   korrekt gescopter Klasse aus unklarem Grund nicht zuverlässig - vermutlich eine Wechselwirkung
   mit Responsive-/Flex-Layout-Regeln bei den vom Druckvorgang abweichenden "Viewport"-Maßen).
   Jetzt stattdessen ein eigenständiger, isolierter Druckbereich (#emailDruckBereich) als
   direktes body-Kind, außerhalb jeder bestehenden Verschachtelung - wird beim Klick auf
   "Drucken" per JS mit dem E-Mail-Inhalt befüllt (emailDruckenAusfuehren() in app.js), exakt
   nach demselben Muster wie beim Label-Druck (body > *:not(#ziel) ausblenden), nur mit einem
   flachen, garantiert unkomplizierten Ziel-Element. */
@media print {
  body.email-drucken-modus > *:not(#emailDruckBereich) { display: none !important; }
  .email-druck-bereich { display: none; }
  body.email-drucken-modus .email-druck-bereich { display: block !important; }
}

.email-druck-bereich {
  padding: 20px;
  font-family: Calibri, Arial, sans-serif;
  color: #000;
}
.email-druck-bereich .email-druck-zeile { margin: 0 0 6px; font-size: 13px; }
.email-druck-bereich .email-druck-betreff { font-size: 16px; font-weight: 700; margin: 14px 0; }
.email-druck-bereich .email-druck-koerper { white-space: pre-wrap; font-size: 13px; line-height: 1.5; margin-top: 14px; border-top: 1px solid #ccc; padding-top: 14px; }
.email-druck-bereich .email-druck-anhaenge { font-size: 12px; color: #555; margin-top: 14px; }

.fehlversuche-liste { overflow-y: auto; display: flex; flex-direction: column; gap: 8px; }

.client-fehler-aktionen { display: flex; gap: 8px; margin-bottom: 10px; }
.client-fehler-liste { overflow-y: auto; display: flex; flex-direction: column; gap: 8px; max-height: 60vh; }
.client-fehler-eintrag {
  background: var(--farbe-bg);
  border-radius: var(--radius-md);
  padding: 10px 12px;
  font-size: 12.5px;
}
.client-fehler-kopf { display: flex; align-items: center; gap: 8px; }
.client-fehler-kopf strong { font-size: 14px; }
.client-fehler-status { font-size: 11.5px; font-weight: 700; color: #b3261e; }
.client-fehler-meta { font-size: 11.5px; color: var(--farbe-text-mute); margin-top: 2px; }
.client-fehler-nachricht { margin-top: 6px; color: var(--farbe-text); }
.client-fehler-useragent { margin-top: 4px; font-size: 10.5px; color: var(--farbe-text-mute); word-break: break-all; }
.ptt-aufnahmen-zeitfilter {
  display: flex;
  flex-direction: column;
  gap: 4px;
  margin-bottom: 12px;
  padding: 10px 12px;
  background: var(--farbe-bg);
  border-radius: var(--radius-md);
}
.ptt-aufnahmen-zeitfilter label { font-size: 13px; font-weight: 600; color: var(--farbe-text); }
.ptt-aufnahmen-zeitfilter input[type="range"] { width: 100%; accent-color: var(--farbe-primaer); }

.audit-liste { overflow-y: auto; display: flex; flex-direction: column; gap: 6px; max-height: 60vh; }
.audit-eintrag {
  background: var(--farbe-bg);
  border-radius: var(--radius-md);
  padding: 8px 10px;
  font-size: 12.5px;
}
.audit-eintrag .audit-kopf { display: flex; justify-content: space-between; gap: 8px; font-weight: 600; }
.audit-eintrag .audit-zeit { color: var(--farbe-text-mute); font-weight: 400; flex-shrink: 0; }
.audit-eintrag .audit-details { color: var(--farbe-text-mute); margin-top: 2px; }
/* Auf Wunsch ergänzt: aufklappbarer Stacktrace-Bereich bei den Server-Fehlerprotokollen -
   summary nutzt bewusst dieselbe .audit-zeit-Optik (klein, gedämpft) wie der Zeitstempel, damit
   es sich unauffällig ins bestehende Erscheinungsbild einfügt. */
.serverfehler-ausnahme {
  margin: 6px 0 0;
  padding: 8px;
  background: var(--farbe-bg);
  border-radius: var(--radius-md);
  font-size: 11px;
  white-space: pre-wrap;
  word-break: break-word;
  max-height: 300px;
  overflow-y: auto;
}
/* Auf Wunsch ergänzt: anklickbare Bildvorschau im Kamera-Popup der Verkehrslage-Ebene. */
.verkehr-kamera-bild { max-width: 220px; max-height: 160px; border-radius: var(--radius-md); margin-top: 4px; display: block; }
.fehlversuch-eintrag {
  background: var(--farbe-bg);
  border-radius: var(--radius-md);
  padding: 10px 12px;
}
.fehlversuch-kopf { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; }
.fehlversuch-kopf strong { font-size: 14px; }
.fehlversuch-meta { font-size: 11.5px; color: var(--farbe-text-mute); margin-right: auto; }
/* Auf Wunsch ergänzt: kräftigere, besser lesbare Variante für die WFS-Verwaltungslisten (Quelle/
   Layer-URLs, TypeNames) - die normale .fehlversuch-meta-Kombination (kleine Schrift + gedämpfte
   Farbe) war für längere technische Texte wie URLs zu kontrastarm. Bewusst eine EIGENE Klasse
   statt .fehlversuch-meta selbst zu verändern, damit die bestehende Fehlversuche-Liste
   unangetastet bleibt. */
.wfs-meta { font-size: 12.5px; color: var(--farbe-text); margin-right: auto; word-break: break-all; }

/* Auf Wunsch ergänzt: anklickbare "Chips" für die vom WFS-Dienst tatsächlich gelieferten
   Attributnamen (siehe WfsController.Felder) - erspart das manuelle Herausfinden/Abtippen der
   Feldnamen für "Anzeige-/Suchfelder". Ein Klick fügt/entfernt den Feldnamen aus der
   kommagetrennten Liste im eigentlichen Textfeld. */
.wfs-felder-auswahl {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  margin: -4px 0 10px;
}
.wfs-feld-chip {
  border: 1px solid #ddd9cb;
  border-radius: 999px;
  padding: 4px 12px;
  font-size: 12px;
  font-family: monospace;
  background: var(--farbe-bg);
  color: var(--farbe-text);
  cursor: pointer;
}
.wfs-feld-chip.aktiv { background: var(--farbe-primaer); color: #fff; border-color: var(--farbe-primaer); }

/* Zusatzrechte-Verwaltung, auf Wunsch ergänzt - eine Checkbox-Zeile je Recht mit Code + lesbarer
   Beschreibung darunter, damit auch technische Codes (STATUSFARBEN_VERWALTEN) nachvollziehbar
   bleiben, ohne die Beschreibung ganz wegzulassen. */
/* Auf Wunsch ergänzt: WFS-Fenster nochmal breiter als der neue Standard (720px) - hat mit
   Abstand die meisten nebeneinander liegenden Formularfelder (Quelle UND Layer-Formular). */
#wfsModal .modal-panel { max-width: 880px; }
#szenarioBearbeitenModal .modal-panel { max-width: 880px; }

.zusatzrecht-checkboxen {
  display: flex;
  flex-direction: column;
  gap: 4px;
  margin: 12px 0;
  overflow-y: auto;
}
.zusatzrecht-zeile {
  display: flex;
  align-items: flex-start;
  gap: 8px;
  padding: 6px 8px;
  border-radius: var(--radius-md);
}
.zusatzrecht-zeile:hover { background: var(--farbe-bg); }
.zusatzrecht-zeile input[type="checkbox"] { margin-top: 3px; flex-shrink: 0; }
.zusatzrecht-zeile-text { display: flex; flex-direction: column; cursor: pointer; }
.zusatzrecht-code { font-size: 12.5px; font-weight: 600; font-family: monospace; }
.zusatzrecht-beschreibung { font-size: 11.5px; color: var(--farbe-text-mute); }
.fehlversuch-standort-link { font-size: 11.5px; font-weight: 600; color: var(--farbe-primaer); text-decoration: underline; }
.btn-fehlversuch-uebernehmen {
  border: none;
  border-radius: 999px;
  padding: 6px 14px;
  font-size: 12.5px;
  font-weight: 600;
  background: var(--farbe-primaer);
  color: #fff;
  cursor: pointer;
}
.fehlversuch-formular:not([hidden]) {
  display: flex;
  flex-direction: column;
  gap: 6px;
  margin-top: 10px;
}
.fehlversuch-formular input, .fehlversuch-formular select {
  padding: 8px 10px;
  border-radius: 8px;
  border: 1px solid #ddd9cb;
  background: var(--farbe-flaeche);
  font-size: 13.5px;
}
.fehlversuch-formular button[type="submit"] {
  border: none;
  border-radius: 999px;
  padding: 8px;
  font-size: 13px;
  font-weight: 600;
  background: var(--farbe-gruen);
  color: #fff;
  cursor: pointer;
}
.fehlversuch-formular button[type="submit"]:disabled { opacity: 0.6; cursor: default; }
.fehlversuch-hinweis { font-size: 12px; color: var(--farbe-rot); margin: 0; min-height: 14px; }

.ruftyp-neu-form {
  display: flex;
  gap: 6px;
  margin-bottom: 10px;
  flex-wrap: wrap;
}
.ruftyp-neu-form input[type="text"] {
  flex: 1 1 100px;
  padding: 8px 10px;
  border-radius: 8px;
  border: 1px solid #ddd9cb;
  background: var(--farbe-flaeche);
  font-size: 13.5px;
}
.ruftyp-neu-form input[type="text"]:read-only {
  background: var(--farbe-bg);
  color: var(--farbe-text-mute);
  cursor: not-allowed;
}
.ruftyp-neu-form input[type="color"] { width: 40px; height: 36px; border: none; border-radius: 8px; padding: 0; }
.ruftyp-neu-form button {
  border: none;
  border-radius: 999px;
  padding: 8px 14px;
  font-size: 13px;
  font-weight: 600;
  background: var(--farbe-primaer);
  color: #fff;
  cursor: pointer;
}
.ruftyp-eintrag {
  display: flex;
  align-items: center;
  gap: 8px;
  background: var(--farbe-bg);
  border-radius: var(--radius-md);
  padding: 8px 10px;
}
.ruftyp-eintrag strong { min-width: 50px; font-size: 13.5px; }
.ruftyp-eintrag input[type="text"] {
  width: 60px;
  padding: 6px 8px;
  border-radius: 8px;
  border: 1px solid #ddd9cb;
  background: var(--farbe-flaeche);
  font-size: 13px;
}
.ruftyp-eintrag input[type="color"] { width: 32px; height: 32px; border: none; border-radius: 6px; padding: 0; }
.ruftyp-eintrag .btn-ruftyp-speichern, .ruftyp-eintrag .btn-ruftyp-loeschen {
  border: none;
  border-radius: 999px;
  padding: 6px 12px;
  font-size: 12px;
  font-weight: 600;
  cursor: pointer;
}
.ruftyp-eintrag .btn-ruftyp-speichern { background: var(--farbe-gruen); color: #fff; }
.ruftyp-eintrag .btn-ruftyp-loeschen { background: #fdecea; color: var(--farbe-rot); margin-left: auto; }

.kurztext-eintrag {
  display: flex;
  align-items: center;
  gap: 8px;
  background: var(--farbe-bg);
  border-radius: var(--radius-md);
  padding: 8px 10px;
}
.kurztext-eintrag input[type="text"] {
  flex: 1 1 auto;
  min-width: 0;
  padding: 6px 8px;
  border-radius: 8px;
  border: 1px solid #ddd9cb;
  background: var(--farbe-flaeche);
  color: var(--farbe-text);
  font-size: 13px;
}
.kurztext-eintrag button {
  border: none;
  border-radius: 999px;
  padding: 6px 12px;
  font-size: 12px;
  font-weight: 600;
  cursor: pointer;
  flex-shrink: 0;
}
.btn-kurztext-speichern { background: var(--farbe-gruen); color: #fff; }
.btn-kurztext-loeschen { background: #fdecea; color: var(--farbe-rot); }

.turnserver-eintrag {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px;
  background: var(--farbe-bg);
  border-radius: var(--radius-md);
  padding: 10px;
}
.turnserver-eintrag.inaktiv { opacity: 0.55; }
.turnserver-eintrag input[type="text"] {
  flex: 1 1 140px;
  min-width: 0;
  padding: 6px 8px;
  border-radius: 8px;
  border: 1px solid #ddd9cb;
  background: var(--farbe-flaeche);
  color: var(--farbe-text);
  font-size: 13px;
}
.turnserver-eintrag label {
  display: flex;
  align-items: center;
  gap: 4px;
  font-size: 12px;
  color: var(--farbe-text-mute);
  flex-shrink: 0;
}
.turnserver-eintrag button {
  border: none;
  border-radius: 999px;
  padding: 6px 12px;
  font-size: 12px;
  font-weight: 600;
  cursor: pointer;
  flex-shrink: 0;
}
.btn-turnserver-speichern { background: var(--farbe-gruen); color: #fff; }
.btn-turnserver-loeschen { background: #fdecea; color: var(--farbe-rot); }

.kartenbasis-neu-form {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-bottom: 6px;
}
.kartenbasis-neu-form input,
.kartenbasis-neu-form select {
  flex: 1 1 140px;
  padding: 9px 12px;
  border-radius: var(--radius-md);
  border: 1px solid #ddd9cb;
  background: var(--farbe-flaeche);
  color: var(--farbe-text);
  font-size: 13px;
}
.kartenbasis-neu-form input#kartenbasisNeuMaxZoom { flex: 0 1 90px; }
/* Auf Wunsch ergänzt: Reihenfolge-Zahlenfelder (WFS Quelle/Layer) bewusst schmal wie
   MaxZoom oben - eine kleine Ordnungszahl braucht keine 140px Breite. */
.kartenbasis-neu-form input[id$="NeuReihenfolge"] { flex: 0 1 90px; }
.kartenbasis-neu-form input[type="color"] { flex: 0 1 60px; padding: 4px; }
.kartenbasis-overlay-checkbox { display: flex; align-items: center; gap: 6px; flex: 0 1 auto; font-size: 13px; white-space: nowrap; }
.kartenbasis-neu-form button {
  border: none;
  border-radius: 999px;
  padding: 9px 16px;
  font-size: 13px;
  font-weight: 600;
  background: var(--farbe-primaer);
  color: #fff;
  cursor: pointer;
}
#btnKartenbasisTesten { background: var(--farbe-bg); color: var(--farbe-primaer); }

.kartenbasis-test-bereich:not([hidden]) { margin-bottom: 12px; }
.kartenbasis-test-karte {
  width: 100%;
  height: 220px;
  border-radius: var(--radius-md);
  overflow: hidden;
}
.kartenbasis-test-hinweis { font-size: 12px; color: var(--farbe-text-mute); margin: 6px 0 0; }

.einsatzgebiet-umriss-label {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: 13px;
  color: var(--farbe-text);
  flex: 1 1 100%;
}
.einsatzgebiet-zoom-label {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: 13px;
  color: var(--farbe-text);
  flex: 0 0 auto;
}
.einsatzgebiet-zoom-label input[type="number"] {
  width: 55px;
  padding: 6px 8px;
  border-radius: 8px;
  border: 1px solid #ddd9cb;
  background: var(--farbe-flaeche);
  color: var(--farbe-text);
  font-size: 13px;
}
.einsatzgebiet-punkt-icon { background: transparent; border: none; }
.einsatzgebiet-punkt-symbol {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 26px;
  height: 26px;
  border-radius: 50%;
  font-size: 15px;
  box-shadow: var(--schatten-sm);
  border: 2px solid #fff;
}
.einsatzgebiet-felder-bereich:not([hidden]) {
  background: var(--farbe-bg);
  border-radius: var(--radius-md);
  padding: 10px;
  margin-bottom: 6px;
}
.einsatzgebiet-felder-hinweis { font-size: 12px; color: var(--farbe-text-mute); margin: 0 0 6px; }
.einsatzgebiet-felder-liste { display: flex; flex-wrap: wrap; gap: 4px 14px; }
.einsatzgebiet-felder-liste label { display: flex; align-items: center; gap: 5px; font-size: 13px; cursor: pointer; }
.einsatzgebiet-felder-matrix {
  width: 100%;
  border-collapse: collapse;
  font-size: 12.5px;
  margin-bottom: 6px;
}
.einsatzgebiet-felder-matrix th {
  text-align: left;
  font-weight: 600;
  color: var(--farbe-text-mute);
  padding: 4px 6px;
  border-bottom: 1px solid #e4e1d6;
}
.einsatzgebiet-felder-matrix td { padding: 4px 6px; border-bottom: 1px solid #eeece2; }
.einsatzgebiet-felder-matrix td:first-child { width: 24px; }
.einsatzgebiet-felder-beispiel { color: var(--farbe-text-mute); font-style: italic; }
.einsatzgebiet-felder-reihenfolge {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  margin-bottom: 6px;
}
.einsatzgebiet-felder-reihenfolge-eintrag {
  display: inline-flex;
  align-items: center;
  gap: 3px;
  background: var(--farbe-bg);
  border-radius: 999px;
  padding: 3px 4px 3px 10px;
  font-size: 12px;
}
.einsatzgebiet-felder-reihenfolge-eintrag button {
  border: none;
  background: var(--farbe-flaeche);
  border-radius: 50%;
  width: 18px;
  height: 18px;
  font-size: 9px;
  line-height: 1;
  cursor: pointer;
  color: var(--farbe-text);
}
.einsatzgebiet-felder-reihenfolge-eintrag button:disabled { opacity: 0.3; cursor: default; }
.einsatzgebiet-felder-vorschau { font-size: 13px; font-weight: 600; color: var(--farbe-primaer); margin: 0; }

.kartenbasis-eintrag {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px;
  background: var(--farbe-bg);
  border-radius: var(--radius-md);
  padding: 10px;
}
.kartenbasis-eintrag.inaktiv { opacity: 0.55; }
.kartenbasis-eintrag input[type="text"],
.kartenbasis-eintrag input[type="number"] {
  flex: 1 1 120px;
  min-width: 0;
  padding: 6px 8px;
  border-radius: 8px;
  border: 1px solid #ddd9cb;
  background: var(--farbe-flaeche);
  color: var(--farbe-text);
  font-size: 13px;
}
.kartenbasis-eintrag input[type="number"] { flex: 0 1 70px; }
.kartenbasis-eintrag label {
  display: flex;
  align-items: center;
  gap: 4px;
  font-size: 12px;
  color: var(--farbe-text-mute);
  flex-shrink: 0;
}
.kartenbasis-eintrag button {
  border: none;
  border-radius: 999px;
  padding: 6px 12px;
  font-size: 12px;
  font-weight: 600;
  cursor: pointer;
  flex-shrink: 0;
}
.btn-kartenbasis-speichern { background: var(--farbe-gruen); color: #fff; }
.btn-kartenbasis-loeschen { background: #fdecea; color: var(--farbe-rot); }

.kartenbasis-verschieben { display: flex; gap: 2px; flex-shrink: 0; }
.kartenbasis-eintrag .kartenbasis-verschieben button {
  padding: 0;
  border-radius: 50%;
  width: 24px;
  height: 24px;
  background: var(--farbe-flaeche);
  font-size: 11px;
}
.kartenbasis-eintrag .btn-kartenbasis-standard {
  background: var(--farbe-flaeche);
  color: var(--farbe-text-mute);
  border: 1px solid #ddd9cb;
}
.kartenbasis-eintrag .btn-kartenbasis-standard.aktiv {
  background: #fff6d9;
  color: #8a6d00;
  border-color: #e8d58a;
}

.statusfarbe-eintrag {
  display: flex;
  align-items: center;
  gap: 10px;
  background: var(--farbe-bg);
  border-radius: var(--radius-md);
  padding: 8px 10px;
}
.statusfarbe-eintrag .statusfarbe-label {
  flex: 1 1 auto;
  min-width: 0;
  font-size: 13.5px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.statusfarbe-eintrag input[type="color"] { width: 32px; height: 32px; border: none; border-radius: 6px; padding: 0; flex-shrink: 0; }
.statusfarbe-eintrag button {
  border: none;
  border-radius: 999px;
  padding: 6px 12px;
  font-size: 12px;
  font-weight: 600;
  cursor: pointer;
  background: var(--farbe-gruen);
  color: #fff;
  flex-shrink: 0;
}

.btn-zum-anfang {
  position: fixed;
  right: 18px;
  bottom: calc(18px + env(safe-area-inset-bottom));
  width: 44px;
  height: 44px;
  border-radius: 50%;
  border: none;
  background: var(--farbe-primaer);
  color: #fff;
  font-size: 20px;
  font-weight: 700;
  cursor: pointer;
  box-shadow: 0 2px 8px rgba(0,0,0,0.3);
  z-index: 500;
}
.btn-zum-anfang:hover { background: var(--farbe-primaer-hell); }

