/*
 * Yeshe — Oberfläche.
 *
 * Gestaltungsgrundsätze, abgeleitet aus dem Konzept:
 *
 * 1. RUHIG. Die Zielgruppe liest das oft in einem Moment geringer Kapazität.
 *    Keine Signalfarben, keine Fortschrittsbalken, keine Abzeichen.
 * 2. KEINE SERIEN. Es gibt hier bewusst nichts, was einen Streak anzeigen
 *    könnte — ein gebrochener Streak trifft exakt Shantidevas dritte Faulheit
 *    (Selbstverachtung) und verstärkt sie. Gezählt wird kumulativ.
 * 3. KEINE SCHULD. Keine roten Warnfarben für Ausgelassenes, keine Mahnungen.
 *
 * Kein Build-Schritt. Wer etwas ändern will, ändert diese Datei.
 */

:root {
    /* Warmes Elfenbein statt neutralem Weiß -- Papier, keine Bildschirmfläche,
       leicht in Richtung Safran gezogen. */
    --papier: #faf6ef;
    --tinte: #23211e;
    --leise: #6b665f;
    --linie: #e6ddd0;
    --coach: #f5f0e7;
    /* Maroon und Safran: die zwei Farben der Mönchsrobe. Maroon führt als
       Hauptakzent (Knöpfe, Fokus, aktive Links), Safran bleibt sparsam --
       Kennzeichnung des Coach-Zugs in der Gesprächsbox. Beide gedämpft
       statt kräftig: Grundsatz 1 verbietet Signalfarben. */
    --akzent: #7a3b34;
    --safran: #c9903e;
    /* Eigener, dunklerer Ton nur für Knopf-Flächen -- --akzent bleibt
       unverändert, weil er auch für Links, Fokusringe und Randakzente steht;
       dort macht ein dunklerer Ton den Kontrast zum Fließtext nicht besser. */
    --knopf: #5f2e28;
    --breite: 46rem;
}

* { box-sizing: border-box; }

/*
 * Um 15% vergrößerte Schrift: eine einzelne Zeile statt Dutzender einzelner
 * font-size-Angaben, weil praktisch jede Größe im Stylesheet in rem steht --
 * sie skaliert mit der Wurzel-Schriftgröße mit, Abstände und Rundungen
 * eingeschlossen. Das hält das Verhältnis von Text zu Weißraum, wie es war,
 * statt nur die Buchstaben zu vergrößern und alles andere gleich zu lassen.
 */
html { font-size: 115%; }

body {
    margin: 0;
    background: var(--papier);
    color: var(--tinte);
    font: 1rem/1.6 ui-serif, Georgia, "Times New Roman", serif;
    -webkit-text-size-adjust: 100%;
}

/* Ungestylte Links im Fließtext (z. B. "Hier entlang" auf der Anmeldemaske)
   fallen sonst auf Browser-Blau zurück -- Grundsatz 1 verbietet Signalfarben,
   und ein grelles Blau neben gedämpftem Maroon und Safran wäre genau das. */
a { color: var(--akzent); }

/* ---------- Kopf ---------- */

.kopf {
    display: flex;
    /* Vorher baseline -- die Marke saß dadurch an der Textgrundlinie der
       Navigationslinks daneben, nicht in der Mitte der Kopfzeile. Mit dem
       größeren Schnörkel-Y (siehe .marke) fiel das noch mehr auf. */
    align-items: center;
    gap: 1.5rem;
    max-width: var(--breite);
    margin: 0 auto;
    padding: 1.5rem 1.25rem 1rem;
    border-bottom: 1px solid var(--linie);
}

/*
 * "Sacramento", SIL Open Font License -- Datei liegt lokal in public/fonts,
 * nicht als <link> zu fonts.googleapis.com. Ein Nachladen von dort schickt
 * bei jedem Seitenaufruf die IP jedes Nutzers an Google; für eine Anwendung,
 * die sorgsam mit Gesundheitsdaten umgeht, ein unnötiges Leck für einen
 * Schriftzug. Selbst gehostet entsteht dieselbe Anfrage nur noch an den
 * eigenen Server. Lizenztext liegt neben der Schriftdatei (Pflicht der OFL).
 */
@font-face {
    font-family: 'Alex Brush';
    src: url('../fonts/AlexBrush-Regular.ttf') format('truetype');
    font-weight: 400;
    font-style: normal;
    font-display: swap;
}

.marke-block { display: flex; flex-direction: column; }

.marke {
    font-family: 'Alex Brush', cursive;
    /* Kalligraphie-Schriften wirken erst in der Größe -- klein wie zuvor
       (1.15rem) wäre sie kaum als Schriftzug, nur als unklare Linie zu lesen. */
    font-size: 2.6rem;
    line-height: 1;
    color: var(--akzent);
    text-decoration: none;
}

/* Dieselbe leise, sachliche Schrift wie die Navigation daneben -- der
   Untertitel soll erklären, nicht selbst auffallen. */
.untertitel {
    margin: 0.15rem 0 0;
    font: 0.8rem/1.4 ui-sans-serif, system-ui, sans-serif;
    color: var(--leise);
}

/*
 * align-items: baseline, nicht das ererbte stretch -- sonst richtet sich der
 * <a>-Text nach der Höhe des <form>/<button> daneben aus (ein Formularelement
 * hat andere Schriftmetriken als ein Link) und "Abmelden" sitzt sichtbar
 * versetzt zu den Links davor.
 */
.kopf nav { display: flex; gap: 1rem; margin-left: auto; align-items: baseline; }

.kopf nav a {
    font: 0.85rem/1 ui-sans-serif, system-ui, sans-serif;
    text-decoration: none;
    color: var(--leise);
    padding-bottom: 0.2rem;
}

.kopf nav a.aktiv { color: var(--tinte); border-bottom: 1px solid var(--akzent); }

/*
 * Unten genau so viel Luft, wie die feste Eingabeleiste hoch ist.
 *
 * Die Höhe ist nicht konstant: Das Textfeld wächst beim Tippen bis 12rem mit.
 * Deshalb misst das Skript die Leiste und setzt --eingabe-hoehe. Der Vorgabewert
 * hier greift nur, bis das geschehen ist. Ohne das liegt die neueste Antwort
 * hinter der Leiste -- und es sieht aus, als hätte der Coach nicht geantwortet.
 */
main {
    max-width: var(--breite);
    margin: 0 auto;
    padding: 1.5rem 1.25rem calc(var(--eingabe-hoehe, 7rem) + 1.5rem);
}

.meldung {
    max-width: var(--breite);
    margin: 1rem auto 0;
    padding: 0.7rem 1rem;
    background: var(--coach);
    border-left: 2px solid var(--akzent);
    font: 0.9rem/1.5 ui-sans-serif, system-ui, sans-serif;
}

/* ---------- Gespräch: nur der Verlauf scrollt ---------- */

/*
 * Auf jeder anderen Seite (Landkarte, Anmeldung) scrollt weiterhin die ganze
 * Seite -- dort gibt es keinen Grund, etwas zu ändern. Im Gespräch dagegen
 * sollen Kopf und Statuszeile beim Lesen eines langen Verlaufs nicht aus dem
 * Blick geraten. Deshalb bekommt nur body.gespraech-seite (siehe rahmen.blade.php)
 * eine feste Höhe, main wird zur nicht scrollenden Flexspalte, und allein
 * .verlauf trägt den Überlauf. 100dvh statt 100vh, weil vh auf dem Handy die
 * Höhe der Adressleiste mitrechnet -- die feste Eingabeleiste läge sonst ein
 * Stück unter der sichtbaren Kante.
 */
body.gespraech-seite {
    height: 100vh;
    height: 100dvh;
    overflow: hidden;
    display: flex;
    flex-direction: column;
}

body.gespraech-seite .kopf,
body.gespraech-seite .status { flex: 0 0 auto; }

body.gespraech-seite main {
    flex: 1 1 auto;
    min-height: 0;
    display: flex;
    flex-direction: column;
    padding-bottom: 0;
    overflow: hidden;
}

body.gespraech-seite .verlauf {
    flex: 1 1 auto;
    min-height: 0;
    overflow-y: auto;
    /* Dieselbe Reserve, die main vorher am Seitenende hatte -- sonst
       verschwinden die letzten Zeilen hinter der fest stehenden Eingabeleiste. */
    padding-bottom: calc(var(--eingabe-hoehe, 7rem) + 1.5rem);
}

/* ---------- Gespräch ---------- */

.verlauf { display: flex; flex-direction: column; gap: 1.25rem; }

/*
 * scroll-margin gilt beim Heranscrollen: unten dieselbe Luft wie die
 * Eingabeleiste hoch ist, oben etwas Abstand, damit eine lange Antwort nicht
 * bündig an der Oberkante klebt.
 */
.zug {
    max-width: 90%;
    scroll-margin: 1.5rem 0 calc(var(--eingabe-hoehe, 7rem) + 1rem);
}

/* Versuchsweise links wie der Coach, statt rechts -- siehe Rückmeldung. */
.zug.nutzer { align-self: flex-start; }

.zug .text { white-space: pre-wrap; word-wrap: break-word; }

/*
 * Klein und unauffällig -- die Uhrzeit soll sich einordnen, nicht auffallen.
 * Rechtsbündig über der Sprechblase statt links darunter: liegt vor dem Text
 * im Markup, damit sie am eigentlichen Anfang des Zugs steht, nicht danach.
 */
.zug .zeit {
    display: block;
    text-align: right;
    margin-bottom: 0.2rem;
    padding-right: 0.2rem;
    font-size: 0.7rem;
    color: var(--leise);
    opacity: 0.7;
}

/*
 * Randakzent statt Sprechblasen-Ecke: vorher trug die eine spitze Ecke
 * (2px Radius) die Unterscheidung Coach/Nutzer -- eine Form, die an
 * Messenger-Apps erinnert, nicht an das ruhige Zwiegespräch, das dieses
 * Konzept will. Jetzt tragen beide dieselbe gleichmäßige Rundung, und die
 * Kennzeichnung liegt allein auf einer Randfarbe: Safran für den Coach,
 * Maroon für den Nutzer -- dieselbe Zuordnung wie in der Statuszeile und
 * bei "Boxen-Stil" festgelegt.
 */
.zug.coach .text {
    background: var(--coach);
    padding: 0.9rem 1.1rem;
    border-radius: 12px;
    border-left: 3px solid var(--safran);
}

.zug.nutzer .text {
    padding: 0.9rem 1.1rem 0.9rem 1rem;
    border: 1px solid var(--linie);
    border-right: 3px solid var(--akzent);
    border-radius: 12px;
    color: var(--leise);
}

/*
 * Bewusst unauffällig, wie die Uhrzeit -- ein Bericht ist eine einzige
 * Aussage ("das war falsch/unpassend"), keine Bewertung mit Sternen, und
 * soll nicht wie ein weiterer Aufruf zum Handeln neben der Antwort wirken.
 */
.zug .melden {
    display: block;
    margin: 0.35rem 0 0 auto;
    background: none;
    border: none;
    padding: 0;
    font-size: 0.68rem;
    color: var(--leise);
    opacity: 0.55;
    cursor: pointer;
}

.zug .melden:hover { opacity: 1; text-decoration: underline; }
.zug .melden:disabled { opacity: 0.35; cursor: default; text-decoration: none; }

.leer {
    color: var(--leise);
    font-style: italic;
    text-align: center;
    padding: 3rem 1rem;
}

/* ---------- Eingabe ---------- */

.eingabe {
    position: fixed;
    inset: auto 0 0 0;
    background: var(--papier);
    border-top: 1px solid var(--linie);
    padding: 0.75rem 1.25rem 1rem;
}

.eingabe form {
    display: flex;
    gap: 0.6rem;
    align-items: flex-end;
    max-width: var(--breite);
    margin: 0 auto;
}

.eingabe textarea {
    flex: 1;
    resize: none;
    min-height: 2.75rem;
    max-height: 12rem;
    padding: 0.7rem 0.9rem;
    border: 1px solid var(--linie);
    border-radius: 10px;
    background: var(--papier);
    color: var(--tinte);
    font: 1rem/1.5 inherit;
}

.eingabe textarea:focus { outline: 2px solid var(--akzent); outline-offset: -1px; }

button {
    padding: 0.7rem 1.1rem;
    border: 0;
    border-radius: 10px;
    background: var(--knopf);
    color: var(--papier);
    font: 0.9rem/1 ui-sans-serif, system-ui, sans-serif;
    cursor: pointer;
}

button:disabled { opacity: 0.45; cursor: default; }

.befehle {
    display: flex;
    gap: 0.5rem;
    flex-wrap: wrap;
    max-width: var(--breite);
    margin: 0 auto 0.6rem;
}

.befehle button {
    background: none;
    color: var(--leise);
    border: 1px solid var(--linie);
    padding: 0.3rem 0.7rem;
    font-size: 0.78rem;
}

/* ---------- Statuszeile ---------- */

.status {
    display: flex;
    gap: 1rem;
    flex-wrap: wrap;
    font: 0.75rem/1.4 ui-sans-serif, system-ui, sans-serif;
    color: var(--leise);
    padding: 0.5rem 0 1.25rem;
    border-bottom: 1px solid var(--linie);
    margin-bottom: 1.5rem;
}

.status b { font-weight: 600; color: var(--tinte); }

/* ---------- Landkarte (Profil) ---------- */

.hinweis {
    color: var(--leise);
    font-size: 0.9rem;
    border-left: 2px solid var(--linie);
    padding-left: 1rem;
    margin-bottom: 2rem;
}

/*
 * Schritt-für-Schritt-Anleitung (Telegram-Kopplung).
 *
 * Gleiche Farbe und Größe wie .hinweis, aber ohne dessen Randstrich: Die
 * Ziffern führen hier schon, ein zweiter senkrechter Strich daneben wäre
 * doppelt.
 */
.anleitung {
    color: var(--leise);
    font-size: 0.9rem;
    margin: 0 0 1.25rem;
    padding-left: 2.2rem;
}

.anleitung li { margin-bottom: 0.6rem; }

/*
 * Der Kopplungscode mit seinem Kopieren-Knopf.
 *
 * Weite Sperrung und Schreibmaschinenschrift, weil der Code abgetippt oder
 * vorgelesen wird und der Zeichenvorrat schon gegen Verwechslungen gewählt
 * ist (Kopplung::ZEICHEN). `align-items: center` statt baseline: Der Knopf
 * ist deutlich kleiner als die Ziffern, an der Grundlinie hinge er schief.
 */
.koppel-code {
    display: flex;
    align-items: center;
    gap: 0.8rem;
    flex-wrap: wrap;
    margin: 0.5rem 0;
}

.koppel-code strong {
    font: 600 1.5rem/1 ui-monospace, SFMono-Regular, Menlo, monospace;
    letter-spacing: 0.15em;
    /* Ein Doppelklick soll den ganzen Code fassen, nicht ein Wortstück --
       der Rückfallweg, wenn die Zwischenablage nicht freigegeben ist. */
    user-select: all;
}

.koppel-code button,
.telegram .leise {
    background: none;
    color: var(--leise);
    border: 1px solid var(--linie);
    padding: 0.4rem 0.8rem;
    font-size: 0.8rem;
}

.feld { padding: 1.1rem 0; border-bottom: 1px solid var(--linie); }

.feld .kopfzeile {
    display: flex;
    align-items: baseline;
    gap: 0.6rem;
    margin-bottom: 0.35rem;
}

.feld .name {
    font: 600 0.9rem/1.3 ui-sans-serif, system-ui, sans-serif;
}

.feld .quelle {
    font: 0.7rem/1 ui-sans-serif, system-ui, sans-serif;
    color: var(--leise);
    border: 1px solid var(--linie);
    border-radius: 999px;
    padding: 0.15rem 0.5rem;
}

.feld .quelle.nutzer { border-color: var(--akzent); color: var(--akzent); }

.feld .was { color: var(--leise); font-size: 0.85rem; margin: 0 0 0.6rem; }

.feld form { display: flex; gap: 0.5rem; align-items: flex-start; }

.feld input[type=text] {
    flex: 1;
    padding: 0.5rem 0.7rem;
    border: 1px solid var(--linie);
    border-radius: 8px;
    background: var(--papier);
    color: var(--tinte);
    /*
       "inherit" ist im font-Kurzschreibweise-Wert kein gültiger Wert für die
       Schriftfamilie (nur als alleiniger Wert der ganzen Eigenschaft erlaubt)
       -- "font: 1rem/1.4 inherit" war deshalb eine ungültige Deklaration und
       wurde von Chrome verworfen. Ergebnis: das Eingabefeld fiel auf die
       UA-Vorgabe zurück (13.3px Arial) statt auf 1rem in der Fließtextschrift
       -- sichtbar kleiner als der Chat. Getrennt geschrieben gilt beides.
    */
    font-family: inherit;
    font-size: 1rem;
    line-height: 1.4;
}

.feld button { padding: 0.5rem 0.8rem; font-size: 0.8rem; }
.feld .loeschen { background: none; color: var(--leise); border: 1px solid var(--linie); }

/* ---------- Kleinkram ---------- */

.tippt { color: var(--leise); font-style: italic; }
.fehler { color: #a4443a; }

@media (max-width: 34rem) {
    :root { --breite: 100%; }
    .zug { max-width: 100%; }
}

/* ---------- Offene Verabredungen ---------- */
/*
 * Bewusst so leise wie der Rest: keine Signalfarbe für Überfälliges, kein
 * Ausrufezeichen, kein Rot. Eine Verabredung, die nicht stattgefunden hat,
 * ist eine Information — keine Anklage. „Nicht passiert" sieht deshalb genau
 * so aus wie „erledigt".
 */
.verabredungen {
    display: flex;
    flex-direction: column;
    gap: 0.4rem;
    max-width: var(--breite);
    margin: 0 auto 0.6rem;
}

.verabredung {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    flex-wrap: wrap;
    font-size: 0.82rem;
    color: var(--leise);
    border: 1px solid var(--linie);
    border-radius: 0.4rem;
    padding: 0.45rem 0.6rem;
}

.verabredung .was { color: var(--tinte); flex: 1 1 12rem; }
.verabredung .wann { font-variant-numeric: tabular-nums; }

/* Eigene Zeile statt neben Titel/Kategorie gequetscht -- flex-basis 100%
   erzwingt den Umbruch innerhalb desselben umrandeten Kastens. */
.verabredung .notiz { flex-basis: 100%; font-size: 0.78rem; opacity: 0.85; }

.verabredung button {
    background: none;
    color: var(--leise);
    border: 1px solid var(--linie);
    padding: 0.2rem 0.55rem;
    font-size: 0.72rem;
}

/* ---------- Härte-Vertrag und Löschen ---------- */

.vertrag,
.alles-loeschen {
    margin-top: 2.5rem;
    padding-top: 1.25rem;
    border-top: 1px solid var(--linie);
}

.vertrag h2,
.alles-loeschen h2 {
    font-size: 1rem;
    font-weight: 600;
    margin: 0 0 0.6rem;
}

.vertrag blockquote {
    margin: 0 0 1rem;
    padding: 0.7rem 0.9rem;
    background: var(--coach);
    border-radius: 0.4rem;
    font-size: 0.9rem;
}

.vertrag label {
    display: block;
    margin-bottom: 0.75rem;
    font-size: 0.82rem;
    color: var(--leise);
}

.vertrag label input {
    display: block;
    width: 100%;
    margin-top: 0.3rem;
    padding: 0.55rem 0.7rem;
    font: inherit;
    font-size: 0.9rem;
    color: var(--tinte);
    background: var(--papier);
    border: 1px solid var(--linie);
    border-radius: 0.4rem;
}

.vertrag .loeschen,
.alles-loeschen .loeschen {
    background: none;
    color: var(--leise);
    border: 1px solid var(--linie);
    padding: 0.5rem 0.8rem;
    font-size: 0.8rem;
}

/* ---------- Projekte ---------- */

.projekte-kategorie { margin-top: 2rem; }
.projekte-kategorie:first-of-type { margin-top: 0; }

.projekte-kategorie h2 {
    font-size: 0.95rem;
    font-weight: 600;
    color: var(--leise);
    text-transform: uppercase;
    letter-spacing: 0.03em;
    margin: 0 0 0.4rem;
}

.feld.erledigt { opacity: 0.5; }

/*
 * Pfeile, Eingabefelder und Löschen in einer Reihe statt gestapelt --
 * mehrere <form> nebeneinander, weil jede Aktion einen eigenen POST braucht.
 * Als Flex-Container werden ihre Kinder trotz eigenem `display` nebeneinander
 * gelegt, kein `display:inline` an jedem einzelnen Formular nötig.
 */
.projekt-zeile {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    flex-wrap: wrap;
}

.projekt-zeile form { margin: 0; }

/*
   Die Eingaben-Form wächst mit der Zeile; Titel bekommt davon den Löwenanteil
   (Grundsatz: der Titel ist der Inhalt, die Kategorie nur eine Einordnung),
   Kategorie bleibt schmal. Eigene Spalte statt Reihe (überschreibt die Reihe
   aus ".feld form"), damit die Notiz darunter Platz auf voller Breite hat statt
   sich Titel und Kategorie ein drittes Mal in dieselbe Zeile zu quetschen.
*/
.projekt-eingaben { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 0.4rem; }

.projekt-titel-zeile { display: flex; gap: 0.5rem; }

.projekt-titel { flex: 3 1 auto; min-width: 9rem; }

.projekt-kategorie { flex: 1 1 auto; min-width: 5rem; max-width: 8rem; }

/* Klein und blass -- eine Notiz ist ein Nebenbefund, kein zweiter Titel. */
.projekt-notiz {
    font-size: 0.8rem;
    color: var(--leise);
    border-color: transparent;
    padding: 0.3rem 0.5rem;
}

.projekt-notiz:focus,
.projekt-notiz:not(:placeholder-shown) { border-color: var(--linie); }

/* "Ändern" hängt per form="…" an der Eingaben-Form, steht aber optisch bei
   "Löschen" -- beide zusammen rechtsbündig, damit links mehr Platz für die
   Eingaben bleibt statt gleichmäßig auf alle Elemente verteilt zu werden. */
.projekt-aktionen {
    display: flex;
    gap: 0.5rem;
    margin-left: auto;
    flex-shrink: 0;
}

form[action*="/projekte"] label {
    display: block;
    margin-bottom: 0.75rem;
    font-size: 1rem;
    color: var(--leise);
}

form[action*="/projekte"] label input {
    display: block;
    width: 100%;
    margin-top: 0.3rem;
    padding: 0.55rem 0.7rem;
    font: inherit;
    font-size: 1rem;
    color: var(--tinte);
    background: var(--papier);
    border: 1px solid var(--linie);
    border-radius: 0.4rem;
}

/* ---------- Anmelden und Registrieren ---------- */

/*
 * Dieselbe Ruhe wie überall: keine Kästen, keine Schatten, keine Signalfarben.
 * Wer sich hier anmeldet, tut das oft nicht in einem starken Moment — eine
 * Maske, die wie ein Formular einer Behörde aussieht, ist die falsche
 * Begrüßung.
 */

.zugang { max-width: 24rem; }

.zugang h1 {
    font-size: 1.3rem;
    font-weight: 600;
    margin: 0 0 0.75rem;
}

.zugang form { margin: 1.5rem 0; }

.zugang label {
    display: block;
    margin-bottom: 0.3rem;
    font: 0.82rem/1.4 ui-sans-serif, system-ui, sans-serif;
    color: var(--leise);
}

.zugang input {
    display: block;
    width: 100%;
    margin-bottom: 1rem;
    padding: 0.6rem 0.75rem;
    font: inherit;
    font-size: 0.95rem;
    color: var(--tinte);
    background: var(--papier);
    border: 1px solid var(--linie);
    border-radius: 0.4rem;
}

.zugang input:focus { outline: 2px solid var(--akzent); outline-offset: -1px; }

/* Der Hinweis unter einem Feld gehört zu ihm — deshalb rückt er an das Feld
   heran, das ohne ihn 1rem Abstand nach unten hätte. */
.zugang input + .was { margin: -0.75rem 0 1rem; }

.zugang .was {
    font: 0.78rem/1.5 ui-sans-serif, system-ui, sans-serif;
    color: var(--leise);
}

.zugang .fehler {
    margin: -0.75rem 0 1rem;
    font: 0.82rem/1.5 ui-sans-serif, system-ui, sans-serif;
}

.zugang button { width: 100%; }

.zugang .hinweis { margin-top: 1.25rem; }
.zugang .hinweis.leise { font-size: 0.78rem; }

.zugang code {
    font-size: 0.85em;
    padding: 0.1rem 0.3rem;
    background: var(--coach);
    border-radius: 0.25rem;
}

/* Abmelden ist ein POST-Formular, soll im Kopf aber aussehen wie die Links
   daneben — sonst sitzt mitten in der Navigation ein Knopf. */
.kopf nav .abmelden { margin: 0; }

.kopf nav .abmelden button {
    appearance: none;
    background: none;
    border: none;
    padding: 0 0 0.2rem;
    font: 0.85rem/1 ui-sans-serif, system-ui, sans-serif;
    color: var(--leise);
    cursor: pointer;
}

/* Firefox reserviert ohne das hier ein paar Pixel Innenabstand für den
   gepunkteten Fokusring des <button> -- unsichtbar, aber genug, um die
   Grundlinie gegenüber den <a>-Geschwistern zu verschieben. */
.kopf nav .abmelden button::-moz-focus-inner { border: 0; padding: 0; }

.kopf nav .abmelden button:hover { color: var(--tinte); }

/* ---------- Glücksverheißende Symbole ---------- */

/*
 * Liegen fest in den Rändern links und rechts vom Gespräch -- dort, wo
 * ohnehin kein Inhalt steht. Erst ab 69rem Breite eingeblendet: darunter
 * reicht der Rand nicht, um die Symbole zu zeigen, ohne an den Text
 * heranzurücken, und unter 34rem (siehe Medienabfrage oben) nimmt der Chat
 * ohnehin die volle Breite ein. Sehr geringe Deckkraft und dieselbe
 * Maroon-Linie wie der übrige Akzent -- diskret, nicht als zweiter
 * Blickfang neben dem Gespräch.
 */
.symbole {
    display: none;
    position: fixed;
    top: 0;
    bottom: 0;
    width: 10rem;
    flex-direction: column;
    justify-content: space-evenly;
    align-items: center;
    padding: 1.5rem 0;
    color: var(--akzent);
    /* Zweimal heruntergesetzt, 0.16 -> 0.128 -> 0.096. Größer und zugleich
       blasser ist kein Widerspruch, sondern der Grund, warum beides zusammen
       gewandert ist: Die Form wird lesbar, weil sie mehr Fläche hat -- und
       muss dafür weniger Farbe tragen, sonst steht sie als zweiter Blickfang
       neben dem Gespräch. */
    opacity: 0.096;
    pointer-events: none;
    z-index: -1;
}

/* Die Größe ist mehrfach gewandert, und der Grund dafür ist inzwischen ein
   anderer: 5rem passte auf breite Monitore, aber damals standen alle acht
   Symbole in JEDER Spalte -- á 5rem allein 40rem Höhe, und das achte (das
   Rad) fiel unten heraus, weil die Spalte fixiert ist und nicht scrollt.
   Daher 3.5rem, dann 2.625rem. Seit die Symbole 4/4 auf die Seiten verteilt
   sind (siehe rahmen.blade.php), braucht eine Spalte nur noch vier
   Plätze, und der Höhendruck ist weg: vier á 5.75rem sind 23rem. Deshalb
   dreimal um 30% hoch, von 2.625 über 3.4 und 4.42 auf 5.75rem -- 2.625rem
   war zum Erkennen zu klein.

   Ab hier bindet nicht mehr die Höhe, sondern die BREITE: Bei genau 60rem
   Fenster (wo die Spalten überhaupt erst erscheinen) bleiben neben den 46rem
   Inhalt 7rem Rand, das Symbol reicht bis 7.875rem von der Kante -- und der
   Text beginnt erst bei 8.25rem. Das sind 0.375rem Luft. Wer weiter
   vergrößert, schiebt die Symbole unter den Text und muss dann auch die
   Medienabfrage unten anheben. */
.symbole svg { width: 5.75rem; height: 5.75rem; }

/*
 * Trennlinien, damit die Binnenzeichnung lesbar wird.
 *
 * Sieben der acht Vorlagen sind mehrfarbige Illustrationen, die hier auf eine
 * einzige Füllfarbe reduziert sind (siehe symbole-definitionen.blade.php). Was
 * im Original die Farbe unterschied -- die Windungen der Muschel, der Behang
 * der Vase, die Speichen des Rades, die Kreuzungen des Knotens --, lief damit
 * zu einer Fläche zusammen; in dieser Größe sieht man, dass da eine Zeichnung
 * *sein müsste*, aber nicht mehr, welche.
 *
 * Der Strich liegt deshalb in Papierfarbe, nicht in der Akzentfarbe: Er soll
 * nichts hinzufügen, sondern die Flächen voneinander wegschneiden. Weil die
 * Deckkraft am <svg> hängt, deckt er sich mit dem Untergrund und wirkt als
 * Lücke. Eine dunkle Kontur hätte stattdessen die Umrisse verdoppelt und die
 * Symbole zum zweiten Blickfang neben dem Gespräch gemacht.
 *
 * `non-scaling-stroke` ist hier nicht Kosmetik, sondern Bedingung: Die acht
 * Vorlagen haben viewBoxes von 5.9 bis 716 Einheiten Breite. Eine feste
 * stroke-width wäre beim Rad hauchdünn und bei der Vase fingerdick; so zählt
 * die Breite in Bildschirmpixeln und ist über alle acht dieselbe.
 *
 * Die Breite ist der Regler dieser Zeichnung, und sie ist teuer in beide
 * Richtungen: Bei 1px trennen sich Muschel und Rad noch nicht, ab 3px frisst
 * der Strich die feingliedrigen Symbole von innen auf -- Lotus und Fische
 * verlieren zuerst, weil ihre Blätter und Flossen schmaler sind als der
 * Strich breit ist. 2.5px ist gemessen die letzte Stufe davor.
 */
.symbole svg path {
    stroke: var(--papier);
    stroke-width: 2.5px;
    vector-effect: non-scaling-stroke;
}

.symbole.links { left: 0; }
.symbole.rechts { right: 0; }

/*
 * Die Schwelle ist gerechnet, nicht geschätzt -- und die Rechnung hat eine
 * Falle: In einer MEDIENABFRAGE zählt rem immer 16px, in einer Regel dagegen
 * die Wurzelschrift, hier `html { font-size: 115% }`, also 18.4px. Dieselbe
 * Zahl bedeutet an den zwei Stellen nicht dasselbe.
 *
 * Damit ein Symbol nicht unter den Text rutscht, muss der freie Rand breiter
 * sein als das halbe Symbol plus die halbe Spalte: Inhalt 46rem = 846px, bei
 * 1104px Fenster bleiben 129px Rand, der Text beginnt bei 152px, das Symbol
 * reicht bis 145px. 1104px sind in der Medienabfrage 69rem. Bei den alten
 * 60rem (= 960px) blieben nur 57px Rand -- das Symbol lag ab 4.42rem sichtbar
 * unter der ersten Textzeile. Wer die Symbolgröße ändert, rechnet das hier
 * nach.
 */
@media (min-width: 69rem) {
    .symbole { display: flex; }
}

/*
 * Auf der Gesprächsseite deckt die fest stehende Eingabeleiste (.eingabe,
 * randlos über die volle Breite) sonst das unterste Symbol beidseitig ab --
 * space-evenly rechnet mit der vollen Spaltenhöhe, nicht mit dem, was davon
 * sichtbar bleibt. Dieselbe Variable, mit der auch .verlauf ihr unteres
 * Polster bemisst.
 */
body.gespraech-seite .symbole {
    bottom: var(--eingabe-hoehe, 7rem);
}

/*
 * Admin-Dashboard. Eigene, kleine Klassen statt der Gesprächs-Oberfläche
 * wiederzuverwenden -- Tabellen und ein Log-Ausschnitt sind etwas anderes als
 * Züge und Landkarten-Felder.
 */
.admin { max-width: 64rem; }

.admin h1 { font-size: 1.3rem; font-weight: 600; margin: 0 0 1.25rem; }
.admin h2 { font-size: 1.05rem; font-weight: 600; margin: 2rem 0 0.5rem; }

.admin-kennzahlen { display: flex; gap: 2rem; margin-bottom: 1.5rem; }
.admin-kennzahlen div { display: flex; flex-direction: column; }
.admin-kennzahlen b { font-size: 1.6rem; color: var(--tinte); }
.admin-kennzahlen span { font-size: 0.8rem; color: var(--leise); }

.admin-tabelle {
    width: 100%;
    border-collapse: collapse;
    font-size: 0.85rem;
}

.admin-tabelle th,
.admin-tabelle td {
    text-align: left;
    padding: 0.4rem 0.6rem;
    border-bottom: 1px solid var(--linie);
}

.admin-tabelle th { color: var(--leise); font-weight: 600; }

.admin-status-ok { color: var(--akzent); font-weight: 600; }
.admin-status-fehlt { color: #a4443a; }

.admin-schluessel-form { display: flex; gap: 0.5rem; }
.admin-schluessel-form input { flex: 1; min-width: 12rem; }

.admin-log {
    max-height: 24rem;
    overflow-y: auto;
    padding: 0.75rem;
    font-size: 0.78rem;
    line-height: 1.5;
    white-space: pre-wrap;
    word-wrap: break-word;
    background: var(--coach);
    border: 1px solid var(--linie);
    border-radius: 0.4rem;
}
