/* Oberfläche nach dem Vorbild von content-studio (Nutzerwunsch 2026-08-13:
   „unordentlich und unübersichtlich" → dort ist die Struktur klarer).
   Übernommen sind Farbtokens, Abstands-Skala, Nav-Leiste mit Untermenüs,
   Karten- und Reiter-Vokabular sowie die Textbreite.

   Alle Abstände kommen aus --space-1..5 (4/8/12/16/20px). Neue Regeln bitte
   daraus bedienen, statt Pixelwerte zu streuen.

   Nur EIN Farbschema (dunkel). Der frühere `prefers-color-scheme: light`-Block
   ist entfallen: er kippte nur --bg/--panel/--line/--fg, während Kacheln,
   Zitatstriche und Abzeichen auf dunklem Grund gerechnet waren — hell sah das
   ausgewaschen aus. Ein zweites Schema will gepflegt werden; solange es niemand
   braucht, ist eins richtig.

   Deploy-Hinweis: Vorlagen lädt Jinja neu, DIESE Datei nicht — Änderungen hier
   brauchen `systemctl restart newapp` bzw. einen harten Reload im Browser. */

:root {
  --bg: #101216;
  --panel: #1a1e26;
  --border: #2a3040;
  --text: #e8ebf2;
  --muted: #8b93a7;
  --accent: #5b8cff;
  --danger: #e05555;
  --ok: #43b97f;
  --warn: #f5a524;

  --space-1: 4px; --space-2: 8px; --space-3: 12px;
  --space-4: 16px; --space-5: 20px;

  /* Ebenen-Skala. Alle z-index-Werte der App stehen HIER und nirgends sonst —
     verstreute Zahlen waren die Ursache dafür, dass die Nav-Untermenüs von der
     Reiterzeile verdeckt wurden (beide lagen auf 50, bei Gleichstand gewinnt das
     spätere Element im Dokument).
     Zwischen den Stufen liegen 100er-Schritte, damit später etwas dazwischen
     passt, ohne die Skala neu zu nummerieren. Seiteninhalt bekommt GAR KEINEN
     z-index: was keinen hat, kann die Leiste nicht überholen. */
  --z-inhalt:     auto;   /* alles in <main> — bitte so lassen */
  --z-leiste:    1000;    /* die obere Navigationsleiste samt Untermenüs */
  --z-untermenu:   10;    /* innerhalb der Leiste; global zählt --z-leiste */
  --z-hintergrund: 1100;  /* abdunkelnder Grund der Handy-Schublade */
  --z-schublade:   1200;  /* die Schublade selbst, über allem */
}

/* Altnamen der ersten Fassung — Vorlagen und Formulare benutzen sie noch.
   Als Alias statt als Suchen-und-Ersetzen: so bleibt eine übersehene Stelle
   sichtbar korrekt, statt auf eine undefinierte Variable zu fallen. */
:root { --line: var(--border); --fg: var(--text); }

* { box-sizing: border-box; }

body {
  margin: 0;
  background: var(--bg);
  color: var(--text);
  font: 15px/1.5 system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
}
a { color: var(--accent); text-decoration: none; }
a:hover { text-decoration: underline; }
code { background: var(--panel); padding: 1px 5px; border-radius: 4px;
       font-size: .9em; color: var(--muted); }

/* ── Navigation ─────────────────────────────────────────────────────────────
   Flache Leiste mit Untermenüs beim Überfahren. Die Untermenüs führen direkt
   auf die Reiter der Zielseite (?tab=…), damit man nicht erst die Seite öffnen
   und dann noch einmal klicken muss.

   WICHTIG — die Leiste wird über die KLASSE .topbar angesprochen, nicht über den
   Elementselektor `nav`. Die Reiterzeilen auf Bewertungen, Jobs und Einrichtung
   sind ebenfalls <nav> (semantisch richtig: es ist Navigation) und erbten sonst
   `position: sticky`, `top: 0` und denselben z-index. Bei Gleichstand gewinnt
   das spätere Element im Dokument — die Reiterzeile legte sich damit über das
   aufgeklappte Untermenü. Befund 2026-08-14. */
.topbar {
  display: flex; gap: var(--space-4); align-items: center;
  padding: 10px 22px;
  background: var(--panel); border-bottom: 1px solid var(--border);
  position: sticky; top: 0; z-index: var(--z-leiste);
}
.topbar a { color: var(--muted); padding: var(--space-1) var(--space-2);
            border-radius: 6px; text-decoration: none; }
.topbar a:hover, .topbar a.active { color: var(--text); background: var(--bg);
                                    text-decoration: none; }
.topbar a.brand { font-weight: 700; color: var(--text); margin-right: var(--space-3); }
.topbar .spacer { flex: 1; }
.topbar .who { color: var(--muted); font-size: .9em; }

/* Die unsichtbare Hover-Brücke über die Lücke zur Leiste sitzt am .nav-item,
   nicht am Untermenü: an dessen eigener Box würde ein ::before weggeschnitten,
   sobald das Menü je scrollt — der Hover riss dann beim Rüberfahren ab. */
.nav-item { position: relative; }
.nav-submenu {
  display: none; position: absolute; top: calc(100% + 11px); left: 0;
  /* Zählt nur INNERHALB der Leiste: .topbar hat einen z-index und bildet damit
     einen eigenen Stapelkontext, in dem dieser Wert gilt. Gegenüber dem
     Seiteninhalt entscheidet allein --z-leiste. */
  z-index: var(--z-untermenu); min-width: max-content; padding: 6px;
  background: var(--panel); border: 1px solid var(--border);
  border-top: none; border-radius: 0 0 8px 8px;
  box-shadow: 0 10px 24px rgba(0, 0, 0, .45);
}
.nav-item:hover::after { content: ""; position: absolute; top: 100%; left: 0;
                         width: 100%; height: 13px; }
.nav-item:hover .nav-submenu { display: block; }
.nav-submenu a { display: block; white-space: nowrap; padding: 6px var(--space-3); }

main { max-width: calc(50% + 550px); margin: 0 auto; padding: 22px 22px 64px; }

h1 { font-size: 1.5em; margin: 0 0 var(--space-4); }
h2 { font-size: 1.15em; margin: 0 0 var(--space-3); }
h3 { font-size: .95em; margin: var(--space-5) 0 var(--space-2); color: var(--muted); }

/* ── Reiter ─────────────────────────────────────────────────────────────── */
/* Eigenständig gestaltet — die Reiterzeile bekommt NICHTS von .topbar (s. o.).
   Kein z-index, kein sticky: dann kann sie auch kein Untermenü verdecken. */
.tabs { display: flex; gap: var(--space-2); margin-bottom: 18px; flex-wrap: wrap;
        align-items: center; }
.tabs a { padding: 7px 14px; border-radius: 8px; background: var(--panel);
          color: var(--muted); border: 1px solid var(--border); text-decoration: none; }
.tabs a:hover { color: var(--text); border-color: var(--muted); text-decoration: none; }
/* `.on` ist der Name aus der ersten Fassung, `.active` der aus content-studio —
   beide gelten, damit keine Vorlage stillschweigend ihren aktiven Reiter verliert. */
.tabs a.on, .tabs a.active { color: var(--text); border-color: var(--accent); }

/* ── Karten und Textbausteine ───────────────────────────────────────────── */
.card { background: var(--panel); border: 1px solid var(--border);
        border-radius: 12px; padding: 18px; margin-bottom: 18px; }
.card--narrow { max-width: 380px; margin: 64px auto; }
.card > :last-child { margin-bottom: 0; }

.placeholder { padding: 40px; text-align: center; color: var(--muted);
               border: 1px dashed var(--border); border-radius: 12px; }
.muted, .hint { color: var(--muted); }
.hint { font-size: .9em; }
.error { color: var(--danger); }
.warn  { color: var(--warn); }
.ok    { color: var(--ok); }
.nowrap { white-space: nowrap; }
.msg { margin: 0 0 var(--space-4); padding: 9px var(--space-3); border-radius: 8px;
       background: rgba(91, 140, 255, .12); border: 1px solid var(--accent); }
/* Fehler als Banner oben im Formular bzw. direkt am betroffenen Feld. Rote
   Schrift allein reicht nicht — auf dunklem Grund geht sie zwischen den
   Beschriftungen unter. */
.form-error { margin: 0 0 var(--space-4); padding: 9px var(--space-3);
              border-radius: 8px; color: var(--danger);
              background: rgba(224, 85, 85, .12); border: 1px solid var(--danger); }
.field-error { margin: 6px 0 0; color: var(--danger); font-size: .88em; font-weight: 600; }

.quote { border-left: 3px solid var(--border); padding-left: var(--space-4);
         margin: 0 0 var(--space-3); white-space: pre-wrap; }
.badge { display: inline-block; margin-left: var(--space-1); padding: 1px 7px;
         font-size: .72em; border-radius: 999px; vertical-align: middle;
         background: rgba(91, 140, 255, .18); color: var(--accent); }
.badge--warn  { background: rgba(245, 165, 36, .18); color: var(--warn); }
.badge--ok    { background: rgba(67, 185, 127, .18); color: var(--ok); }
.badge--error { background: rgba(224, 85, 85, .18); color: var(--danger); }
.badge--muted { background: rgba(139, 147, 167, .18); color: var(--muted); }

.raw { max-height: 380px; overflow: auto; background: var(--bg);
       border: 1px solid var(--border); border-radius: 8px; padding: var(--space-3);
       font-size: .8em; line-height: 1.45; }

/* ── Formulare ──────────────────────────────────────────────────────────── */
label { display: block; margin: 0 0 var(--space-3); color: var(--muted);
        font-size: .9em; }
label.inline { display: inline-flex; align-items: center; gap: var(--space-1);
               margin: 0; }

input[type=text], input[type=password], input[type=number], input[type=url],
input[type=search], input:not([type]), textarea, select {
  width: 100%; margin-top: var(--space-1); padding: 9px var(--space-3);
  background: var(--bg); color: var(--text);
  border: 1px solid var(--border); border-radius: 8px; font: inherit;
}
textarea { resize: vertical; }
input:focus, textarea:focus, select:focus { outline: none; border-color: var(--accent); }
input::placeholder { color: var(--muted); }
input[type=checkbox], input[type=radio] { width: auto; margin-top: 0; }

button { padding: 9px var(--space-4); background: var(--accent); color: #fff;
         border: 0; border-radius: 8px; font: inherit; cursor: pointer;
         white-space: nowrap; }
button:hover { filter: brightness(1.12); }
button.danger { background: var(--danger); }
button.ghost { background: transparent; color: var(--muted);
               border: 1px solid var(--border); }
button.ghost:hover { color: var(--text); filter: none; }

/* Zeile aus Feldern/Schaltflächen. Der Trennstrich unten macht lange
   Einstellungslisten lesbar; in Kacheln und Stimmen wird er abgeschaltet. */
.row { display: flex; gap: var(--space-2); align-items: flex-end; flex-wrap: wrap;
       padding: var(--space-2) 0; border-bottom: 1px solid var(--border); }
.row:last-child { border-bottom: 0; }
.row__label { min-width: 190px; display: flex; flex-direction: column; }
.row__label .muted { font-size: .82em; }
.row input { flex: 1; min-width: 160px; }
/* Formulare in einer .row sollen die Zeile nicht umbrechen. */
.row form { display: inline-flex; gap: var(--space-2); align-items: center; }

/* ── Kennzahlen ─────────────────────────────────────────────────────────── */
.stats { display: flex; gap: var(--space-5); flex-wrap: wrap;
         margin-bottom: var(--space-4); }
.stats span { color: var(--muted); }
.stats strong { color: var(--text); font-size: 1.15em; }

/* Kachelreihe des Dashboards: Zahl groß, Bezeichnung klein darunter.
   auto-fit statt fester Spaltenzahl — auf dem Handy stapeln sie sich selbst. */
.kpis { display: grid; gap: var(--space-3);
        grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); }
.kpi { display: block; padding: var(--space-3) var(--space-4); background: var(--bg);
       border: 1px solid var(--border); border-radius: 10px; color: inherit;
       text-decoration: none; }
a.kpi:hover { border-color: var(--accent); text-decoration: none; }
.kpi b { display: block; font-size: 1.7em; line-height: 1.2; font-weight: 700; }
.kpi span { color: var(--muted); font-size: .85em; }
.kpi--call b { color: var(--warn); }      /* wartet auf mich */
.kpi--done b { color: var(--ok); }

/* Fortschrittsbalken des Durchlaufs. Bei „137 von 204" über mehrere Stunden
   sagt ein Balken auf einen Blick mehr als die Zahl. */
.fortschritt { height: 10px; border-radius: 999px; background: var(--bg);
               border: 1px solid var(--border); overflow: hidden;
               margin: var(--space-2) 0 var(--space-1); }
.fortschritt > span { display: block; height: 100%; background: var(--ok);
                      transition: width .4s ease; }

/* ── Bildkacheln ────────────────────────────────────────────────────────── */
.grid { display: grid; gap: var(--space-4); margin-top: var(--space-4);
        grid-template-columns: repeat(auto-fill, minmax(210px, 1fr)); }
.tile { border: 1px solid var(--border); border-radius: 10px;
        padding: var(--space-2); background: var(--bg); }
.tile img, .tile video { width: 100%; aspect-ratio: 9 / 16; object-fit: cover;
                         border-radius: 8px; display: block; background: var(--panel); }
.tile input { margin-top: var(--space-1); }
.tile .row { padding: var(--space-1) 0 0; border: 0; gap: var(--space-1);
             align-items: center; justify-content: space-between; }
/* Beschriftung über dem Video (Modellvergleich). Zwei Zeilen hoch fixiert, damit
   die Kacheln trotz unterschiedlich langer Namen auf einer Linie beginnen. */
.tile__titel { margin: 0 0 var(--space-2); font-size: .82em; font-weight: 600;
               line-height: 1.3; min-height: 2.6em; }
.tile--off { opacity: .45; }
.tile--on { border-color: var(--accent); box-shadow: 0 0 0 1px var(--accent); }
video.final { width: 100%; max-width: 340px; border-radius: 10px; display: block; }

/* ── Stimmenliste ───────────────────────────────────────────────────────── */
.voicelist { display: grid; gap: var(--space-3); margin: var(--space-4) 0;
             grid-template-columns: repeat(auto-fill, minmax(330px, 1fr)); }
.voice { border: 1px solid var(--border); border-radius: 10px;
         padding: var(--space-3); background: var(--bg); }
.voice__head { display: flex; justify-content: space-between; gap: var(--space-2);
               flex-wrap: wrap; }
.voice__head .muted { font-size: .82em; }
.voice__desc { font-size: .82em; margin: var(--space-1) 0; }
.voice audio { width: 100%; margin: var(--space-2) 0; height: 34px; }
.voice .row { padding: 0; border: 0; gap: var(--space-1); }
.voice select { flex: 1; min-width: 130px; }
audio { max-width: 100%; }

/* ── Tabellen ───────────────────────────────────────────────────────────── */
table { width: 100%; border-collapse: collapse; }
th, td { text-align: left; padding: 9px var(--space-2);
         border-bottom: 1px solid var(--border); vertical-align: top; }
th { color: var(--muted); font-weight: 500; font-size: .85em; }
tbody tr:last-child td { border-bottom: 0; }
td form { display: inline-flex; gap: var(--space-1); align-items: center; }
td.actions { white-space: nowrap; display: flex; gap: var(--space-1); }
.audit td { font-size: .88em; }
/* Breite Tabellen laufen auf dem Handy sonst über den Bildschirmrand hinaus. */
.scroll-x { overflow-x: auto; }

/* ── Klappbare Abschnitte ───────────────────────────────────────────────────
   Für Belege, die man selten braucht (Charakterspezifikation, Segmentliste,
   Kostenaufstellung). <details> statt JavaScript: der Browser merkt sich den
   Zustand nicht, aber es funktioniert ohne Skript und ohne Zustandsverwaltung. */
details { border-top: 1px solid var(--border); }
details:first-of-type { border-top: 0; }
details > summary { padding: var(--space-3) 0; cursor: pointer; color: var(--text);
                    list-style: none; display: flex; align-items: center;
                    gap: var(--space-2); }
details > summary::-webkit-details-marker { display: none; }
details > summary::before { content: "›"; color: var(--muted); font-size: 1.2em;
                            transition: transform .15s ease; }
details[open] > summary::before { transform: rotate(90deg); }
details > summary:hover { color: var(--accent); }
details > :last-child { margin-bottom: var(--space-4); }

/* ── Abstands-Utilities ─────────────────────────────────────────────────────
   Nur für den Einzelfall in einer Vorlage, in dem eine Regel zu schreiben
   übertrieben wäre. Aus der Skala bedient, damit auch Ausnahmen im Raster
   bleiben. Kein Ersatz für benannte Klassen. */
.mt { margin-top: var(--space-4); }
.mb { margin-bottom: var(--space-4); }
.mt0 { margin-top: 0; }
.mb0 { margin-bottom: 0; }

/* ── Handy ──────────────────────────────────────────────────────────────────
   Die Leiste wird zur Schublade. Der Burger und die Schublade selbst stehen
   im <head> der base.html — nicht hier: Vorlagen lädt Jinja sofort neu, dieses
   Stylesheet erst beim Neustart. Wäre beides getrennt, zeigte ein Neustart-
   vergessen eine Seite ohne Menü. Hier steht nur, was die DESKTOP-Leiste
   ausblendet, sobald die Schublade übernimmt. */
@media (max-width: 760px) {
  .topbar .nav-item, .topbar .spacer, .topbar .who,
  .topbar a:not(.brand) { display: none; }
  .topbar { gap: var(--space-3); }
  main { padding: var(--space-4) var(--space-3) 48px; }
  .row__label { min-width: 100%; }
}
