/* ============================================================
   KIM - zentrale Stildatei (Single Source of Truth)
   Projekt: KIM (Landesberufsschule Dornbirn 2, lbsdo2-kim.at)
   Datei:   ~/www/css/kim.css
   Zweck:   Design-Tokens und Komponenten-Regeln fuer alle
            HTML-Provisorien (Phase 1) sowie spaeter fuer das
            React-Frontend (Phase 5). Eingebunden via
            <link rel="stylesheet" href="/css/kim.css"> in
            jeder HTML-Seite.
   Pflicht: Komponenten-Regeln referenzieren ausschliesslich
            die hier definierten Custom Properties ueber
            var(--...) - keine hardcodierten Hex-Werte.
   Referenz: KIM_Architekturplan.md, Abschnitt 3.6
            (Frontend-Architektur Provisorien Phase 1).
   Stand:   Mai 2026, Schema-Version 1.0.0
   ============================================================ */

/* Responsive-Breakpoint: 768 px. Wird in den Komponenten-Regeln
   als @media-Literal verwendet (Media Queries lassen sich
   nicht ueber Custom Properties parametrisieren). */

:root {
    /* --- Schriftfamilie ---------------------------------- */
    --schrift-familie: Helvetica, Inter, Arial, sans-serif;

    /* --- Farben (Nordic Clarity, Architekturplan 3.6) ---- */
    --farbe-seitenbg:         #F5F7FA;
    --farbe-text:             #1A2535;
    --farbe-h1-h3:            #1E3A5F;
    --farbe-h4:               #4B5A68;
    --farbe-box-bg:           #FFFFFF;
    --farbe-rahmen:           #C8D5E4;
    --farbe-akzent:           #1E3A5F;
    --farbe-button-hover:     #152D4A;
    --farbe-button-sekundaer: #DDE5EF;
    --farbe-button-abgabe:    #5B9BD5;
    --farbe-link:             #2F6E8A;
    --farbe-gold:             #E8A838;
    --farbe-status-gruen:     #C8E0D0;
    --farbe-status-gelb:      #F4E8B0;
    --farbe-status-rot:       #E8C8C4;

    /* --- Schriftgroessen (rem, Browser-Default 16 px) ---- */
    --fs-h1:    1.5rem;
    --fs-h2:    1.25rem;
    --fs-h3:    1.1rem;
    --fs-h4:    1.0rem;
    --fs-text:  1.0rem;
    --fs-klein: 0.85rem;

    /* --- Zeilenhoehen ------------------------------------ */
    --zeile-text:     1.5;
    --zeile-headline: 1.25;

    /* --- Abstaende (platzsparende Vertikale) ------------- */
    --abstand-xs: 0.25rem;
    --abstand-s:  0.5rem;
    --abstand-m:  1rem;
    --abstand-l:  1.5rem;
    --abstand-xl: 2.5rem;

    /* --- Radien (px - sollen mit Text nicht skalieren) --- */
    --radius-s: 4px;
    --radius-m: 8px;

    /* --- Schatten ---------------------------------------- */
    --schatten-box: 0 1px 2px rgba(0, 0, 0, 0.04);
}


/* ============================================================
   Komponenten-Regeln
   Alle Werte ueber var(--...) aus dem :root-Block oben.
   Reihenfolge: Reset, Body, Typo, Links, Listen, Container,
   Meta, Media-Query (mobile).
   ============================================================ */

*, *::before, *::after {
    box-sizing: border-box;
}

body {
    margin: 0 auto;
    max-width: 960px;
    padding: var(--abstand-l) var(--abstand-m);
    background-color: var(--farbe-seitenbg);
    color: var(--farbe-text);
    font-family: var(--schrift-familie);
    font-size: var(--fs-text);
    line-height: var(--zeile-text);
}

/* B89-1 (Session 89): Breiteres Lehrer-Dashboard. Der globale body-Cap
   (960px) ist fuer die schueler-/login-seitigen Lese-Layouts richtig, fuer
   das tabellenlastige Lehrer-Dashboard (Klassen-/Cluster-/Session-Tabellen,
   auto-fit-Kachelgrid) aber zu eng. Die Klasse wird per JS in
   kim_lehrer_eingeloggt_anzeigen() erst NACH erfolgreichem Login an <body>
   gesetzt — die Lehrer-Login-Ansicht bleibt damit schmal, nur das Dashboard
   wird breit. Logout laedt die Seite neu (Klasse damit automatisch weg).
   Greift nur, solange der Viewport breiter ist; auf Mobil bleibt der
   768px-Breakpoint unberuehrt. */
body.kim-lehrer-breit {
    max-width: 1200px;
}

h1 {
    margin-top: 0;
    margin-bottom: var(--abstand-m);
    color: var(--farbe-h1-h3);
    font-size: var(--fs-h1);
    line-height: var(--zeile-headline);
}

h2 {
    margin-top: var(--abstand-l);
    margin-bottom: var(--abstand-s);
    color: var(--farbe-h1-h3);
    font-size: var(--fs-h2);
    line-height: var(--zeile-headline);
}

h3 {
    margin-top: var(--abstand-m);
    margin-bottom: var(--abstand-xs);
    color: var(--farbe-h1-h3);
    font-size: var(--fs-h3);
    line-height: var(--zeile-headline);
}

h4 {
    margin-top: var(--abstand-m);
    margin-bottom: var(--abstand-xs);
    color: var(--farbe-h4);
    font-size: var(--fs-h4);
    line-height: var(--zeile-headline);
}

p {
    margin-top: 0;
    margin-bottom: var(--abstand-s);
}

a {
    color: var(--farbe-link);
    text-decoration: none;
}

a:hover {
    color: var(--farbe-akzent);
}

a:focus-visible {
    outline: 2px solid var(--farbe-akzent);
    outline-offset: 2px;
}

ul,
ol {
    margin-top: 0;
    margin-bottom: var(--abstand-s);
    padding-left: var(--abstand-l);
}

li {
    margin-bottom: var(--abstand-xs);
}

.kim-container {
    background-color: var(--farbe-box-bg);
    border: 1px solid var(--farbe-rahmen);
    border-radius: var(--radius-m);
    padding: var(--abstand-l);
    box-shadow: var(--schatten-box);
}

.kim-meta {
    color: var(--farbe-h4);
    font-size: var(--fs-klein);
}

/* --- Header-Block (Titel links, Schul-Logo rechts) ------ */

.kim-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--abstand-m);
    margin-bottom: var(--abstand-m);
}

.kim-header-text h1 {
    margin-bottom: var(--abstand-xs);
}

.kim-header-text .kim-meta {
    margin: 0;
}

.kim-logo {
    display: block;
    max-height: 56px;
    width: auto;
    flex-shrink: 0;
}

/* --- Kopf-Titelzeile: "Dashboard · Name" nebeneinander (B94-1, Session 94) ---
   Name gleich gross wie der Titel, gemeinsam in einer Zeile (spart Vertikale).
   Trenner und Name werden erst nach Login per JS eingeblendet. */
.kim-kopf-titelzeile {
    display: flex;
    align-items: baseline;
    flex-wrap: wrap;
    gap: var(--abstand-s);
}
.kim-kopf-titelzeile h1 {
    margin-bottom: 0;
}
.kim-kopf-trenner {
    color: var(--farbe-rahmen);
    font-size: var(--fs-h1);
}
.kim-kopf-name {
    font-size: var(--fs-h1);
    font-weight: 600;
    color: var(--farbe-text);
}

/* --- Lehrer-Aktionsleiste (B94-1): Buttons unten in einer Reihe --- */
.kim-lehrer-aktionen {
    display: flex;
    flex-wrap: wrap;
    gap: var(--abstand-s);
    align-items: center;
    margin-top: var(--abstand-m);
}

/* --- Schueler-Kacheln (B94-2, Session 94) --------------------------
   Ersetzt die Schueler-Tabelle: eine <button>-Kachel je Schueler:in,
   Klick oeffnet das Detail-Sheet. Token-only, keine Verlaeufe. Groessere
   Schrift als zuvor (Wunsch Herbert: Schueler-Uebersicht gut lesbar). */
.kim-lehrer-schueler-kacheln {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(270px, 1fr));
    gap: var(--abstand-s);
}
.kim-lehrer-schueler-kacheln[hidden] {
    display: none;
}
.kim-lehrer-schueler-kachel {
    display: flex;
    flex-direction: column;
    gap: var(--abstand-s);
    text-align: left;
    background-color: var(--farbe-box-bg);
    border: 1px solid var(--farbe-rahmen);
    border-radius: var(--radius-m);
    padding: var(--abstand-s) var(--abstand-m);
    cursor: pointer;
    font-family: inherit;
    color: var(--farbe-text);
    transition: border-color 0.12s ease, box-shadow 0.12s ease;
}
.kim-lehrer-schueler-kachel:hover,
.kim-lehrer-schueler-kachel:focus-visible {
    border-color: var(--farbe-akzent);
    box-shadow: 0 3px 12px rgba(0, 0, 0, 0.08);
    outline: none;
}
.kim-kachel-kopf {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    gap: var(--abstand-s);
}
.kim-kachel-name {
    font-weight: 600;
    font-size: var(--fs-h3);
    line-height: 1.2;
}
.kim-kachel-zeile {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: var(--abstand-s);
    font-size: var(--fs-text);
}
.kim-kachel-k { color: var(--farbe-h4); }
.kim-kachel-v { font-weight: 600; }
.kim-status-pille {
    display: inline-block;
    border-radius: 999px;
    padding: 0.1em 0.7em;
    font-size: var(--fs-klein);
    font-weight: 700;
    border: 1px solid var(--farbe-rahmen);
    white-space: nowrap;
}
.kim-status-pille--aktiv {
    background-color: var(--farbe-status-gruen);
    color: var(--farbe-text);
}
.kim-status-pille--reset {
    background-color: var(--farbe-status-gelb);
    color: var(--farbe-text);
}


/* ============================================================
   Komponenten (Einheit 9 - Schueler-Frontend-Provisorium)
   Buttons, Form-Elemente, Dialog, Tabs, Fehler-Boxen,
   Tonfall-Karten, Passwort-Checkliste.
   Alle Werte ueber var(--...) aus dem :root-Block oben.
   ============================================================ */

/* --- Buttons (.kim-btn-primaer / -sekundaer / -abgabe) --- */

.kim-btn-primaer,
.kim-btn-sekundaer,
.kim-btn-abgabe {
    display: inline-block;
    min-height: 2.5rem;
    padding: var(--abstand-s) var(--abstand-l);
    border: 1px solid transparent;
    border-radius: var(--radius-s);
    font-family: inherit;
    font-size: var(--fs-text);
    line-height: 1.25;
    cursor: pointer;
    transition: background-color 0.15s ease,
                border-color 0.15s ease,
                color 0.15s ease,
                box-shadow 0.15s ease;
}

.kim-btn-primaer {
    background-color: var(--farbe-akzent);
    color: var(--farbe-box-bg);
    border-color: var(--farbe-akzent);
}

.kim-btn-primaer:hover {
    background-color: var(--farbe-button-hover);
    color: var(--farbe-button-abgabe);
    border-color: var(--farbe-button-hover);
    box-shadow: 0 2px 6px rgba(0, 0, 0, 0.22);
}

.kim-btn-sekundaer {
    background-color: var(--farbe-button-sekundaer);
    color: var(--farbe-text);
    border-color: var(--farbe-rahmen);
}

.kim-btn-sekundaer:hover {
    background-color: var(--farbe-akzent);
    color: var(--farbe-box-bg);
    border-color: var(--farbe-akzent);
    box-shadow: 0 2px 6px rgba(0, 0, 0, 0.18);
}

.kim-btn-abgabe {
    background-color: var(--farbe-button-abgabe);
    color: var(--farbe-box-bg);
    border-color: var(--farbe-button-abgabe);
    font-weight: 600;
}

.kim-btn-abgabe:hover {
    background-color: var(--farbe-akzent);
    border-color: var(--farbe-akzent);
    box-shadow: 0 2px 6px rgba(0, 0, 0, 0.22);
}

.kim-btn-primaer:focus-visible,
.kim-btn-sekundaer:focus-visible,
.kim-btn-abgabe:focus-visible {
    outline: 2px solid var(--farbe-akzent);
    outline-offset: 2px;
}

.kim-btn-primaer:disabled,
.kim-btn-sekundaer:disabled,
.kim-btn-abgabe:disabled {
    opacity: 0.5;
    cursor: not-allowed;
    box-shadow: none;
}

.kim-btn-primaer:disabled:hover,
.kim-btn-sekundaer:disabled:hover,
.kim-btn-abgabe:disabled:hover {
    box-shadow: none;
}


/* --- Form-Elemente -------------------------------------- */

label {
    display: block;
    margin-bottom: var(--abstand-xs);
    font-weight: 500;
    color: var(--farbe-text);
}

input[type="text"],
input[type="password"],
input[type="email"],
input[type="number"],
select,
textarea {
    display: block;
    width: 100%;
    min-height: 2.5rem;
    padding: var(--abstand-s);
    background-color: var(--farbe-box-bg);
    color: var(--farbe-text);
    border: 1px solid var(--farbe-rahmen);
    border-radius: var(--radius-s);
    font-family: inherit;
    font-size: var(--fs-text);
    line-height: var(--zeile-text);
}

textarea {
    min-height: 6rem;
    resize: vertical;
}

input:focus-visible,
select:focus-visible,
textarea:focus-visible {
    outline: 2px solid var(--farbe-akzent);
    outline-offset: 1px;
    border-color: var(--farbe-akzent);
}

fieldset {
    margin: 0 0 var(--abstand-m);
    padding: 0;
    border: none;
}

legend {
    padding: 0;
    margin-bottom: var(--abstand-xs);
    font-weight: 500;
    color: var(--farbe-text);
}

.kim-feld {
    margin-bottom: var(--abstand-m);
}

/* --- Passwort-Eingabe mit Einblenden-Schalter --- */
.kim-pw-eingabe {
    display: flex;
    align-items: stretch;
    gap: var(--abstand-xs);
}
.kim-pw-eingabe input {
    flex: 1 1 auto;
    min-width: 0;
}
.kim-pw-anzeigen-btn {
    flex: 0 0 auto;
    min-height: 2.5rem;
    padding: 0 var(--abstand-s);
    border: 1px solid var(--farbe-rahmen);
    border-radius: var(--radius-s);
    background-color: var(--farbe-button-sekundaer);
    color: var(--farbe-text);
    font-size: var(--fs-klein);
    cursor: pointer;
}
.kim-pw-anzeigen-btn:hover {
    border-color: var(--farbe-link);
}
.kim-pw-anzeigen-btn:focus-visible {
    outline: 2px solid var(--farbe-link);
    outline-offset: 2px;
}

.kim-checkbox-zeile {
    display: flex;
    align-items: flex-start;
    gap: var(--abstand-s);
}

.kim-checkbox-zeile input[type="checkbox"] {
    width: 1.1rem;
    height: 1.1rem;
    margin: 0.32rem 0 0 0;
    flex-shrink: 0;
}

.kim-checkbox-zeile label {
    margin-bottom: 0;
    font-weight: 400;
}


/* --- Dialog (nativ + Fallback) -------------------------- */

dialog {
    max-width: 480px;
    width: calc(100% - var(--abstand-l));
    margin: auto;
    padding: var(--abstand-l);
    background-color: var(--farbe-box-bg);
    color: var(--farbe-text);
    border: 1px solid var(--farbe-rahmen);
    border-radius: var(--radius-m);
    box-shadow: var(--schatten-box);
}

dialog::backdrop {
    /* rgba ohne Token: bewusste Ausnahme - kein Backdrop-Token in :root */
    background-color: rgba(26, 37, 53, 0.4);
}

.kim-dialog-fallback {
    position: fixed;
    inset: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    background-color: rgba(26, 37, 53, 0.4);
    padding: var(--abstand-m);
    z-index: 1000;
}

.kim-dialog-fallback > .kim-dialog-inner {
    max-width: 480px;
    width: 100%;
    background-color: var(--farbe-box-bg);
    color: var(--farbe-text);
    border: 1px solid var(--farbe-rahmen);
    border-radius: var(--radius-m);
    padding: var(--abstand-l);
    box-shadow: var(--schatten-box);
}


/* --- Tabs ----------------------------------------------- */

.kim-tabs {
    display: flex;
    gap: var(--abstand-xs);
    border-bottom: 1px solid var(--farbe-rahmen);
    margin-bottom: var(--abstand-m);
}

.kim-tab {
    padding: var(--abstand-s) var(--abstand-m);
    background: none;
    color: var(--farbe-text);
    border: none;
    border-bottom: 2px solid transparent;
    font-family: inherit;
    font-size: var(--fs-text);
    cursor: pointer;
    margin-bottom: -1px;
}

.kim-tab:hover {
    background-color: var(--farbe-button-sekundaer);
}

.kim-tab-aktiv {
    color: var(--farbe-akzent);
    border-bottom-color: var(--farbe-akzent);
    font-weight: 500;
}

.kim-tab:focus-visible {
    outline: 2px solid var(--farbe-akzent);
    outline-offset: 2px;
}

.kim-tab-panel[hidden] {
    display: none;
}

.kim-tabs[hidden] {
    display: none;
}

/* Override fuer den Lehrer-Kachel-Container: .kim-lehrer-kacheln
   hat display: grid, was den UA-Default [hidden] { display: none }
   bei gleicher Spezifitaet (0,1,0) als Author-Stylesheet schlaegt.
   Daher explizit hier auf display: none zurueck (Fix-Sub-Baustein
   10.7-Fix-2, Pattern aus 10.2 fuer .kim-tabs[hidden]
   weitergefuehrt). Gilt fuer JS-Aufrufe von setAttribute('hidden')
   am Container in kim_lehrer_eingeloggt_anzeigen. */
.kim-lehrer-kacheln[hidden] {
    display: none;
}


/* --- Fehler-Boxen --------------------------------------- */

.kim-feld-fehler {
    margin-top: var(--abstand-xs);
    padding: var(--abstand-xs) var(--abstand-s);
    background-color: var(--farbe-status-rot);
    color: var(--farbe-text);
    border-radius: var(--radius-s);
    font-size: var(--fs-klein);
}

.kim-banner-fehler {
    margin-bottom: var(--abstand-m);
    padding: var(--abstand-s) var(--abstand-m);
    background-color: var(--farbe-status-rot);
    color: var(--farbe-text);
    border-radius: var(--radius-s);
    font-size: var(--fs-text);
}

/* 13.7.fix-1: Erfolg-Banner. Gleicher Layout-Stack wie .kim-banner-fehler,
   nur die Hintergrundfarbe wechselt auf den gruenen Status-Token. Wird
   ueber kim_schueler_chat_banner_setzen(text, 'erfolg') aktiviert. */
.kim-banner-erfolg {
    margin-bottom: var(--abstand-m);
    padding: var(--abstand-s) var(--abstand-m);
    background-color: var(--farbe-status-gruen);
    color: var(--farbe-text);
    border-radius: var(--radius-s);
    font-size: var(--fs-text);
}


/* --- Tonfall-Radio-Karten ------------------------------- */

.kim-tonfall-gruppe {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: var(--abstand-s);
    align-items: stretch;
}

/* Grid-Item-Wrapper-<div> ohne eigene Klasse: streckt das innere Label
   auf volle Hoehe, damit alle drei Tonfall-Karten gleich gross sind
   (unabhaengig von der Laenge des Beispiel-Textes). */
.kim-tonfall-gruppe > div {
    display: flex;
    flex-direction: column;
}

.kim-tonfall-radio {
    position: absolute;
    opacity: 0;
    pointer-events: none;
}

.kim-tonfall-karte {
    display: flex;
    flex-direction: column;
    flex: 1;
    padding: var(--abstand-m);
    background-color: var(--farbe-box-bg);
    color: var(--farbe-text);
    border: 1px solid var(--farbe-rahmen);
    border-radius: var(--radius-m);
    cursor: pointer;
    margin-bottom: 0;
    box-sizing: border-box;
}

.kim-tonfall-karte:hover {
    border-color: var(--farbe-akzent);
}

.kim-tonfall-radio:checked + .kim-tonfall-karte {
    border-color: var(--farbe-akzent);
    background-color: var(--farbe-button-sekundaer);
    box-shadow: inset 0 0 0 1px var(--farbe-akzent);
}

.kim-tonfall-radio:focus-visible + .kim-tonfall-karte {
    outline: 2px solid var(--farbe-akzent);
    outline-offset: 2px;
}

.kim-tonfall-titel {
    font-weight: 500;
    margin: 0 0 var(--abstand-xs);
}

.kim-tonfall-beispiel {
    margin: 0;
    color: var(--farbe-h4);
    font-size: var(--fs-klein);
    line-height: var(--zeile-text);
}


/* --- Passwort-Checkliste -------------------------------- */

.kim-pw-checkliste {
    list-style: none;
    padding-left: 0;
    margin: var(--abstand-xs) 0 0;
    font-size: var(--fs-klein);
}

.kim-pw-checkliste li {
    margin-bottom: 0;
}

.kim-pw-erfuellt::before {
    content: "\2713\00a0";
    color: var(--farbe-akzent);
    font-weight: 600;
}

.kim-pw-offen::before {
    content: "\25CF\00a0";
    color: var(--farbe-h4);
}


/* --- Klassencode-Eingabe (2 x 4 Zeichen) ----------------- */

.kim-code-eingabe {
    display: flex;
    align-items: center;
    gap: var(--abstand-s);
}

.kim-code-eingabe input[type="text"] {
    flex: 0 0 auto;
    width: 6.5rem;
    text-align: center;
    letter-spacing: 0.2rem;
    font-family: monospace;
    text-transform: uppercase;
}

.kim-code-trenner {
    color: var(--farbe-h4);
    font-size: var(--fs-text);
    user-select: none;
}


/* --- Lehrer-Frontend: Kacheln + Auswahl ----------------- */

.kim-lehrer-kacheln {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
    gap: var(--abstand-m);
    margin: 0 0 var(--abstand-m);
}

.kim-lehrer-kachel {
    display: block;
    padding: var(--abstand-l) var(--abstand-m);
    background-color: var(--farbe-box-bg);
    color: var(--farbe-text);
    border: 1px solid var(--farbe-rahmen);
    border-radius: var(--radius-m);
    font-family: inherit;
    font-size: var(--fs-text);
    text-align: center;
    cursor: pointer;
}

.kim-lehrer-kachel:hover {
    border-color: var(--farbe-akzent);
    background-color: var(--farbe-button-sekundaer);
}

.kim-lehrer-kachel:focus-visible {
    outline: 2px solid var(--farbe-akzent);
    outline-offset: 2px;
}

/* Aktiv-Klasse: dunkle Hervorhebung der gewaehlten Kachel
   (Fix-Sub-Baustein 10.7-Fix-1). Die zweite Regel patcht die
   Spezifitaet gegen .kim-lehrer-kachel:hover (gleiches Gewicht,
   spaetere Definition gewinnt), damit der dunkle Stil auch bei
   Mauszeiger ueber der aktiven Kachel erhalten bleibt. */
.kim-lehrer-kachel-aktiv,
.kim-lehrer-kachel-aktiv:hover {
    background-color: var(--farbe-akzent);
    color: var(--farbe-box-bg);
    border-color: var(--farbe-akzent);
}

/* Locked-Modus: nach Kachel-Auswahl wird der Container per JS
   mit .kim-lehrer-kacheln-locked markiert. Alle Kacheln (auch
   die aktive) sind dann nicht mehr klickbar; Wechsel nur ueber
   "Zurueck zur Auswahl" (Fix-Sub-Baustein 10.7-Fix-1). */
.kim-lehrer-kacheln-locked .kim-lehrer-kachel {
    pointer-events: none;
    cursor: default;
}


/* --- Lehrer-Frontend: Zurueck-Link + Rollen-Badge ------- */

.kim-lehrer-zurueck {
    display: inline-block;
    margin-top: var(--abstand-s);
    padding: 0;
    background: none;
    border: none;
    color: var(--farbe-link);
    font-family: inherit;
    font-size: var(--fs-klein);
    text-decoration: underline;
    cursor: pointer;
}

.kim-rolle-badge {
    display: inline-block;
    padding: var(--abstand-xs) var(--abstand-s);
    background-color: var(--farbe-button-sekundaer);
    color: var(--farbe-akzent);
    border-radius: var(--radius-s);
    font-size: var(--fs-klein);
    font-weight: 500;
}


/* --- Admin-Konfigurations-Oberflaeche (Baustein 12.13.c) --- */
/* Komponenten fuer ~/www/admin/kim-konfiguration.html: vier
   Fieldset-Gruppen mit Settings-Zeilen (Label/Control + Meta),
   read-only-Tabelle fuer Bausteine, Cache-Beschreibungsliste
   und Cache-Knoepfe. Alle Werte ueber Token-Vars, keine
   Verlaeufe, [hidden]-Overrides fuer Container mit explizitem
   display-Wert (Konvention 10.7-Fix-2/3). */

.kim-admin-fieldset {
    margin: var(--abstand-m) 0;
    padding: var(--abstand-m);
    border: 1px solid var(--farbe-rahmen);
    border-radius: var(--radius-m);
    background-color: var(--farbe-box-bg);
}

.kim-admin-fieldset legend {
    padding: 0 var(--abstand-s);
    color: var(--farbe-h1-h3);
    font-weight: 500;
    font-size: var(--fs-h4);
}

.kim-admin-settings-liste {
    margin: 0;
}

/* Settings-Zeile: 2-Spalten-Grid (Label / Control). Bemerkung
   und Meta-Info gefliesen unter dem Control auf grid-column 2.
   Border-bottom trennt Zeilen platzsparend; letzte Zeile ohne
   Trennlinie. */
.kim-admin-settings-zeile {
    display: grid;
    grid-template-columns: 14rem 1fr;
    column-gap: var(--abstand-m);
    row-gap: var(--abstand-xs);
    align-items: start;
    padding: var(--abstand-s) 0;
    border-bottom: 1px solid var(--farbe-rahmen);
}

.kim-admin-settings-zeile:last-child {
    border-bottom: none;
}

.kim-admin-settings-zeile[hidden] {
    display: none;
}

.kim-admin-settings-zeile > .kim-admin-label-zeile {
    grid-column: 1;
    grid-row: 1;
    display: flex;
    align-items: baseline;
    gap: var(--abstand-xs);
    flex-wrap: wrap;
    padding-top: var(--abstand-xs);
}

.kim-admin-label-zeile > label {
    font-weight: 500;
    word-break: break-word;
}

/* Info-Schalter: kleiner runder „?"-Knopf neben dem Label, klappt
   die Bemerkung ein/aus. Farben ausschliesslich ueber Tokens. */
.kim-admin-info-toggle {
    flex: 0 0 auto;
    width: 1.4rem;
    height: 1.4rem;
    padding: 0;
    border: 1px solid var(--farbe-rahmen);
    border-radius: 50%;
    background-color: var(--farbe-box-bg);
    color: var(--farbe-h4);
    font-size: var(--fs-klein);
    font-weight: 600;
    line-height: 1;
    cursor: pointer;
}

.kim-admin-info-toggle[aria-expanded="true"] {
    background-color: var(--farbe-akzent);
    border-color: var(--farbe-akzent);
    color: var(--farbe-box-bg);
}

.kim-admin-info-toggle:focus-visible {
    outline: 2px solid var(--farbe-akzent);
    outline-offset: 1px;
}

.kim-admin-settings-zeile > .kim-admin-control {
    grid-column: 2;
    grid-row: 1;
}

.kim-admin-settings-zeile > .kim-admin-meta-bemerkung,
.kim-admin-settings-zeile > .kim-admin-stand,
.kim-admin-settings-zeile > .kim-feld-fehler {
    grid-column: 2;
    margin: 0;
}

/* Einheitliche Form-Controls. Checkbox-Spezialfall ueberschreibt
   die 100%-Breite. textarea-Variante nutzt Monospace fuer JSON-
   Lesbarkeit. */
.kim-admin-control {
    font-family: inherit;
    font-size: var(--fs-text);
    line-height: var(--zeile-text);
    padding: var(--abstand-xs) var(--abstand-s);
    border: 1px solid var(--farbe-rahmen);
    border-radius: var(--radius-s);
    background-color: var(--farbe-box-bg);
    color: var(--farbe-text);
    width: 100%;
    max-width: 30rem;
}

textarea.kim-admin-control {
    max-width: 40rem;
    font-family: monospace;
    font-size: var(--fs-klein);
    resize: vertical;
}

input[type="checkbox"].kim-admin-control {
    width: auto;
    max-width: none;
    margin: var(--abstand-xs) 0;
}

.kim-admin-control:focus-visible {
    outline: 2px solid var(--farbe-akzent);
    outline-offset: 2px;
}

/* --- E8: Modell-Dropdown (R-S65) --- */
/* Wrap fuer <select> + Freitext belegt dieselbe Grid-Zelle wie
   ein normales Control (Spalte 2, Zeile 1); beide Felder stapeln
   vertikal mit kleinem Abstand. */
.kim-admin-settings-zeile > .kim-admin-modell-wrap {
    grid-column: 2;
    grid-row: 1;
    display: flex;
    flex-direction: column;
    gap: var(--abstand-xs);
    max-width: 30rem;
}

/* [hidden]-Override-Pflicht (Konv. §1 CSS): der Freitext-Input
   erbt sonst input[type="text"] { display: block } und bliebe
   trotz [hidden] sichtbar. Klasse + Attribut (0,2,0) schlaegt
   den Typ-Selektor. */
.kim-admin-modell-frei[hidden] {
    display: none;
}

.kim-admin-meta-bemerkung {
    color: var(--farbe-h4);
    font-size: var(--fs-klein);
}

/* Standard eingeklappt; Info-Schalter blendet ein. [hidden]-Override
   defensiv (Konv. §1 CSS), falls spaeter eine display-Regel hinzukommt. */
.kim-admin-meta-bemerkung[hidden] {
    display: none;
}

.kim-admin-stand {
    color: var(--farbe-h4);
    font-size: var(--fs-klein);
}

.kim-admin-aktionen {
    margin-top: var(--abstand-m);
}

/* Read-only-Bausteine-Tabelle (Tab 2). [hidden]-Override
   greift erst, wenn die Mobile-Anpassung die Tabelle auf
   display: block setzt. */
.kim-admin-tabelle {
    width: 100%;
    border-collapse: collapse;
    margin-top: var(--abstand-m);
}

.kim-admin-tabelle th,
.kim-admin-tabelle td {
    text-align: left;
    padding: var(--abstand-s);
    border-bottom: 1px solid var(--farbe-rahmen);
    font-size: var(--fs-text);
}

.kim-admin-tabelle th {
    background-color: var(--farbe-button-sekundaer);
    color: var(--farbe-h1-h3);
    font-weight: 500;
}

.kim-admin-tabelle[hidden] {
    display: none;
}

/* Cache-Beschreibung (definition list) + Cache-Knoepfe. */
.kim-admin-cache-beschreibung {
    margin: var(--abstand-m) 0;
}

.kim-admin-cache-beschreibung dt {
    font-weight: 500;
    color: var(--farbe-h1-h3);
    margin-top: var(--abstand-s);
}

.kim-admin-cache-beschreibung dd {
    margin: var(--abstand-xs) 0 var(--abstand-s) var(--abstand-m);
}

.kim-admin-cache-beschreibung code {
    background-color: var(--farbe-button-sekundaer);
    padding: 0 var(--abstand-xs);
    border-radius: var(--radius-s);
    font-size: var(--fs-klein);
}

.kim-admin-cache-knoepfe {
    display: flex;
    gap: var(--abstand-s);
    flex-wrap: wrap;
    margin: var(--abstand-m) 0;
}

.kim-admin-cache-knoepfe[hidden] {
    display: none;
}


/* --- Promptbibliothek-Editor (Strang Promptbibliothek E7, S92) --- */
/* Liste mit Status + Editor fuer den gewaehlten Baustein. Alle Werte
   ueber Token-Vars, keine Verlaeufe, vertikal sparsam. */

/* [hidden]-Override fuer Buttons: die .kim-btn-*-Klassen setzen
   display: inline-block (Spezifitaet 0,1,0) und schlagen damit den
   UA-Default [hidden] { display: none } bei gleicher Spezifitaet.
   Daher explizit zuruecksetzen, sonst bleibt ein per setAttribute
   ('hidden') ausgeblendeter Knopf sichtbar (Konvention 10.7-Fix-2). */
.kim-btn-primaer[hidden],
.kim-btn-sekundaer[hidden],
.kim-btn-abgabe[hidden] {
    display: none;
}

.kim-admin-bausteine-kopf {
    margin: var(--abstand-m) 0 0;
}

/* Kompakter Zeilen-Knopf in den Tabellen (Bearbeiten / Restore). */
.kim-admin-baustein-bearbeiten {
    min-height: auto;
    padding: var(--abstand-xs) var(--abstand-s);
    font-size: var(--fs-klein);
}

.kim-admin-baustein-id-titel {
    display: block;
    color: var(--farbe-h4);
    font-size: var(--fs-klein);
}

.kim-admin-baustein-zeile-inaktiv {
    opacity: 0.6;
}

.kim-admin-baustein-editor {
    margin-top: var(--abstand-l);
    padding: var(--abstand-m);
    border: 1px solid var(--farbe-rahmen);
    border-radius: var(--radius-m);
    background-color: var(--farbe-box-bg);
}

.kim-admin-baustein-editor-kopf {
    margin-bottom: var(--abstand-s);
}

.kim-admin-baustein-titel {
    margin: 0;
    font-size: var(--fs-h3);
    color: var(--farbe-h1-h3);
    word-break: break-word;
}

.kim-admin-baustein-freigegeben {
    margin: var(--abstand-s) 0;
}

.kim-admin-baustein-freigegeben summary {
    cursor: pointer;
    color: var(--farbe-link);
    font-size: var(--fs-klein);
}

.kim-admin-baustein-label {
    display: block;
    font-weight: 500;
    margin: var(--abstand-s) 0 var(--abstand-xs);
}

/* Editor-Textareas voll ausnutzen (Basis-.kim-admin-control begrenzt
   auf 40rem; im Editor ist die volle Breite gewuenscht). */
.kim-admin-baustein-editor textarea.kim-admin-control {
    max-width: 100%;
    font-family: monospace;
    font-size: var(--fs-klein);
    resize: vertical;
}

.kim-admin-baustein-aktionen {
    display: flex;
    flex-wrap: wrap;
    gap: var(--abstand-s);
    margin: var(--abstand-m) 0;
}

.kim-admin-baustein-aktionen[hidden] {
    display: none;
}

.kim-admin-baustein-versionen-titel {
    margin: var(--abstand-m) 0 var(--abstand-xs);
    font-size: var(--fs-h4);
    color: var(--farbe-h1-h3);
}

.kim-admin-baustein-version-aktiv {
    background-color: var(--farbe-status-gruen);
}

/* Diff-Ansicht (Entwurf gegen freigegebenen Inhalt), zeilenweise. */
.kim-admin-diff {
    margin: var(--abstand-s) 0 var(--abstand-m);
    padding: var(--abstand-s);
    border: 1px solid var(--farbe-rahmen);
    border-radius: var(--radius-s);
    overflow-x: auto;
}

.kim-admin-diff-zeile {
    font-family: monospace;
    font-size: var(--fs-klein);
    white-space: pre-wrap;
    padding: 0 var(--abstand-xs);
}

.kim-admin-diff-plus {
    background-color: var(--farbe-status-gruen);
}

.kim-admin-diff-minus {
    background-color: var(--farbe-status-rot);
}

.kim-admin-diff-gleich {
    color: var(--farbe-h4);
}

/* „Neuer Baustein"-Dialog: Label ueber Control, vertikal sparsam. */
.kim-admin-baustein-neu-zeile {
    margin-bottom: var(--abstand-s);
}

.kim-admin-baustein-neu-zeile label {
    display: block;
    font-weight: 500;
    margin-bottom: var(--abstand-xs);
}


/* --- Lehrkräfte-Verwaltung (Strang Lehrer-Verwaltung, Session 97) --- */
/* Eigener Tab in der Admin-Konfiguration. Nutzt .kim-admin-tabelle und die
   bestehenden Knopf-/Dialog-Klassen weiter; neu sind nur die Kopf-Zeile, die
   kompakten Zeilen-Aktionen und das Label-Layout im Anlege-Dialog. Das
   Ergebnis-PW nutzt das bestehende .kim-pwreset-pw / .kim-pwreset-anzeige.
   Token-basiert, keine Verläufe, vertikal sparsam. */
.kim-admin-lehrer-kopf {
    margin: var(--abstand-m) 0 var(--abstand-s);
}

/* Aktions-Knöpfe je Zeile: kompakt, brechen auf schmaler Zelle um. */
.kim-admin-lehrer-aktionen {
    display: flex;
    flex-wrap: wrap;
    gap: var(--abstand-xs);
}

.kim-admin-lehrer-aktionen .kim-btn-sekundaer {
    min-height: auto;
    padding: var(--abstand-xs) var(--abstand-s);
    font-size: var(--fs-klein);
}

/* Anlege-Dialog: Label über Control, vertikal sparsam
   (Spiegel zu .kim-admin-baustein-neu-zeile). */
.kim-admin-lehrer-neu-zeile {
    margin-bottom: var(--abstand-s);
}

.kim-admin-lehrer-neu-zeile label {
    display: block;
    font-weight: 500;
    margin-bottom: var(--abstand-xs);
}


/* --- Lehrer-Dashboard: PW-Reset-Werkzeug (Session 38, Strecke A) --- */
/* Klassen-Auswahl + Schueler-Tabelle + Reset-Knopf je Zeile. Stile
   bewusst platzsparend (Konvention: vertikal sparsam). Tabelle nutzt
   normale HTML-Semantik (table/thead/tbody/tr/th/td); zwei Banner-
   Container je Zustand (rot fuer Fehler, gruen fuer Erfolg). */

.kim-lehrer-pwreset {
    margin: var(--abstand-l) 0 var(--abstand-m);
    padding: var(--abstand-m);
    background-color: var(--farbe-box-bg);
    border: 1px solid var(--farbe-rahmen);
    border-radius: var(--radius-m);
}

.kim-lehrer-pwreset h3 {
    margin: 0 0 var(--abstand-s) 0;
    color: var(--farbe-h1-h3);
    font-size: var(--fs-h3);
}

.kim-lehrer-tabelle {
    width: 100%;
    border-collapse: collapse;
    font-size: var(--fs-text);
}

.kim-lehrer-tabelle thead th {
    text-align: left;
    padding: var(--abstand-xs) var(--abstand-s);
    border-bottom: 1px solid var(--farbe-rahmen);
    color: var(--farbe-h4);
    font-weight: 500;
    font-size: var(--fs-klein);
}

.kim-lehrer-tabelle tbody td {
    padding: var(--abstand-xs) var(--abstand-s);
    border-bottom: 1px solid var(--farbe-rahmen);
    vertical-align: middle;
}

.kim-lehrer-tabelle tbody tr:last-child td {
    border-bottom: none;
}

.kim-lehrer-tabelle tbody tr:hover {
    background-color: var(--farbe-button-sekundaer);
}

.kim-pwreset-flag {
    display: inline-block;
    padding: 0 var(--abstand-s);
    background-color: var(--farbe-status-gelb);
    color: var(--farbe-text);
    border-radius: var(--radius-s);
    font-size: var(--fs-klein);
}

/* B86-1: Lehrbetrieb klein und gedaempft unter dem Schuelernamen in der
   Klassen-Schueler-Liste; „Gastschüler" bei fehlendem Betrieb. */
.kim-lehrer-betrieb-zeile {
    display: block;
    margin-top: var(--abstand-xs);
    font-size: var(--fs-klein);
    color: var(--farbe-h4);
}

/* Interaktions-Counter in der Lehrer-Schueler-Tabelle (B85-1).
   Zwei kompakte Zeilen (Lerncoach/Training), je abgeschlossen/abgebrochen.
   Token-basiert, platzsparend in der Vertikalen, keine Symbole. */
.kim-ia {
    display: flex;
    flex-direction: column;
    gap: var(--abstand-xs);
    font-size: var(--fs-klein);
    line-height: 1.2;
}

.kim-ia-zeile {
    display: flex;
    justify-content: space-between;
    gap: var(--abstand-s);
    white-space: nowrap;
}

.kim-ia-modus {
    color: var(--farbe-h4);
}

.kim-ia-werte {
    display: inline-flex;
    align-items: baseline;
    gap: var(--abstand-s);
    font-variant-numeric: tabular-nums;
}

.kim-ia-ab {
    color: var(--farbe-text);
    font-weight: 600;
}

.kim-ia-br {
    color: var(--farbe-h4);
}

.kim-sr-only {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
}


/* --- Lehrer-Dashboard: PW-Reset-Modale (Session 38, Strecke A) --- */
/* Bestaetigungs-Modal: Schuelername hervorgehoben. Ergebnis-Modal:
   Klartext-PW in monospace-Box mit Kopieren-Knopf in einer Zeile. */

.kim-pwreset-zielname {
    margin: var(--abstand-s) 0;
    padding: var(--abstand-s) var(--abstand-m);
    background-color: var(--farbe-button-sekundaer);
    border-radius: var(--radius-s);
    text-align: center;
    font-size: var(--fs-h3);
}

.kim-pwreset-anzeige {
    display: flex;
    align-items: center;
    gap: var(--abstand-s);
    margin: var(--abstand-s) 0;
    padding: var(--abstand-s);
    background-color: var(--farbe-button-sekundaer);
    border: 1px solid var(--farbe-rahmen);
    border-radius: var(--radius-s);
}

.kim-pwreset-pw {
    flex: 1 1 auto;
    font-family: monospace;
    font-size: 1.25rem;
    font-weight: 600;
    letter-spacing: 0.05em;
    color: var(--farbe-h1-h3);
    word-break: break-all;
}

.kim-pwreset-kopieren {
    flex: 0 0 auto;
}

.kim-pwreset-hinweis {
    margin: var(--abstand-s) 0 0;
    color: var(--farbe-h4);
}


/* --- Lehrer-Dashboard: Lehrbetriebe-Verwaltung (B85-2.b, Session 86) --- */
/* Admin-only Sektion. Die Liste nutzt .kim-lehrer-tabelle weiter (inkl. der
   bestehenden Mobile-Regel); neu sind nur der Box-Rahmen, die Aktions-Zeile
   je Tabellenzeile und die Hervorhebungen in den Bestaetigungs-Dialogen.
   Token-basiert, keine Verlaeufe, keine Symbole, vertikal platzsparend. */
.kim-lehrer-betriebe {
    margin: var(--abstand-l) 0 var(--abstand-m);
    padding: var(--abstand-m);
    background-color: var(--farbe-box-bg);
    border: 1px solid var(--farbe-rahmen);
    border-radius: var(--radius-m);
}

.kim-lehrer-betriebe h3 {
    margin: 0 0 var(--abstand-s) 0;
    color: var(--farbe-h1-h3);
    font-size: var(--fs-h3);
}

.kim-betriebe-anzahl {
    font-variant-numeric: tabular-nums;
}

/* Aktions-Knoepfe je Zeile: kompakt, brechen auf schmaler Zelle um. */
.kim-betriebe-aktionen {
    display: flex;
    flex-wrap: wrap;
    gap: var(--abstand-xs);
}

.kim-betriebe-aktionen .kim-btn-sekundaer {
    padding: var(--abstand-xs) var(--abstand-s);
    font-size: var(--fs-klein);
}

/* Hervorgehobener Betriebsname in den Bestaetigungs-Dialogen. */
.kim-betriebe-name-hervor {
    margin: var(--abstand-s) 0;
    padding: var(--abstand-s) var(--abstand-m);
    background-color: var(--farbe-button-sekundaer);
    border-radius: var(--radius-s);
    text-align: center;
    font-size: var(--fs-h3);
}

/* Warn-Box mit der irreversiblen Folge (betroffene Schueler-Anzahl). */
.kim-betriebe-warnung {
    margin: var(--abstand-s) 0;
    padding: var(--abstand-s) var(--abstand-m);
    background-color: var(--farbe-status-gelb);
    color: var(--farbe-text);
    border-radius: var(--radius-s);
    font-size: var(--fs-text);
}


/* --- Copy-Paste-Sperre (Session 38, Sub-Baustein 13.9) --- */
/* Default-Deny fuer Text-Selektion auf dem ganzen Body. Ausnahmen
   (mit user-select: text) fuer alle Formular-Eingaben — damit
   Passwort-Felder, Login, Registrierung und Composer normal mit
   Tastatur und Maus bedient werden koennen — und fuer explizit
   markierte „kopierbare" Bereiche:
     .kim-kopierbar      → auf der DSGVO-Seite am body gesetzt,
                           ggf. spaeter weitere Stellen
     .kim-pwreset-pw     → Klartext-Reset-Passwort im Lehrer-Modal
                           muss selektierbar und kopierbar bleiben
   Die zusaetzliche JS-Sperre (kim_copy_paste_init) faengt
   Tastatur-Shortcuts und Rechtsklick-Menue ab; dieser CSS-Block
   sorgt zusaetzlich dafuer, dass Maus-Selektion auf nicht
   freigegebenen Bereichen ueberhaupt nicht erst entsteht. */

body {
    user-select: none;
    -webkit-user-select: none;
}

input,
textarea,
select,
.kim-kopierbar,
.kim-kopierbar *,
.kim-pwreset-pw {
    user-select: text;
    -webkit-user-select: text;
}


/* --- Mobile-Anpassung (bis 768 px) ---------------------- */

@media (max-width: 768px) {
    :root {
        --fs-h1: 1.35rem;
        --fs-h2: 1.15rem;
        --fs-h3: 1.05rem;
    }

    body {
        padding: var(--abstand-m) var(--abstand-s);
    }

    .kim-container {
        padding: var(--abstand-m);
    }

    .kim-header {
        flex-direction: column;
        align-items: flex-start;
        gap: var(--abstand-s);
    }

    .kim-logo {
        max-height: 36px;
        align-self: flex-start;
    }

    .kim-tonfall-gruppe {
        grid-template-columns: 1fr;
    }

    .kim-tabs {
        flex-wrap: wrap;
    }

    .kim-lehrer-kacheln {
        grid-template-columns: 1fr;
    }

    /* Settings-Zeile auf eine Spalte stapeln, Label oben. */
    .kim-admin-settings-zeile {
        grid-template-columns: 1fr;
    }

    .kim-admin-settings-zeile > .kim-admin-label-zeile,
    .kim-admin-settings-zeile > .kim-admin-control,
    .kim-admin-settings-zeile > .kim-admin-modell-wrap,
    .kim-admin-settings-zeile > .kim-admin-meta-bemerkung,
    .kim-admin-settings-zeile > .kim-admin-stand,
    .kim-admin-settings-zeile > .kim-feld-fehler {
        grid-column: 1;
        grid-row: auto;
    }

    /* Bausteine-Tabelle horizontal scrollbar bei schmalen Viewports. */
    .kim-admin-tabelle {
        display: block;
        overflow-x: auto;
    }

    /* --- Schueler-SPA Header (Einheit 13) ------------------ */
    /* Block-1-Regel .kim-header { flex-direction: column } gilt
       auch fuer den SPA-Header; Titel rutscht per order ans Ende
       der Spalte und linksbuendig. flex-basis: 100% bleibt
       defensiv fuer den Fall einer spaeteren row-Variante. */
    .kim-header-titel {
        order: 3;
        flex-basis: 100%;
        text-align: left;
    }

    /* --- Schueler-SPA HomeScreen + TopicSelect (Einheit 13) - */
    .kim-home-cards {
        grid-template-columns: 1fr;
    }

    /* Phase 3.4 Plan-Item 1: Modus-Tabs vertikal auf Mobile. */
    .kim-modus-tabs {
        grid-template-columns: 1fr;
    }

    /* Plan-Item (a) Session 54: Recent-Listen vertikal auf Mobile. */
    .kim-home-recent-gruppe {
        grid-template-columns: 1fr;
    }

    .kim-topic-grid {
        column-count: 1;
    }

    .kim-topic-kopf {
        flex-direction: column;
        align-items: stretch;
    }

    .kim-topic-suche {
        flex-basis: auto;
        width: 100%;
    }

    /* --- Schueler-SPA Chat-View (13.5) --------------------- */
    .kim-chat-verlauf {
        max-height: 50vh;
    }

    .kim-bubble {
        max-width: 90%;
    }

    /* B123-1: Warte-Bubble darf die volle Breite nutzen — Chip und
       Abbrechen-Knopf brechen sonst auf schmalen Viewports ungünstig um. */
    .kim-bubble-warten {
        max-width: 100%;
    }

    .kim-chat-composer {
        flex-direction: column;
        align-items: stretch;
    }

    /* --- Schueler-SPA Ueben-View (Phase 3.4 Plan-Item 2) --- */
    .kim-uebung-fortschritt {
        overflow-x: auto;
        flex-wrap: nowrap;
    }

    .kim-uebung-textarea-wrap {
        flex-direction: column;
        align-items: stretch;
    }

    /* --- Lehrer-Dashboard PW-Reset (Session 38) --- */
    /* Tabelle horizontal scrollbar bei schmalen Viewports;
       Klartext-PW-Anzeige stapelt PW + Kopieren-Knopf vertikal. */
    .kim-lehrer-tabelle {
        display: block;
        overflow-x: auto;
        white-space: nowrap;
    }

    .kim-pwreset-anzeige {
        flex-direction: column;
        align-items: stretch;
    }

    .kim-pwreset-pw {
        text-align: center;
        font-size: 1.1rem;
    }
}


/* ============================================================
   Schueler-SPA (Einheit 13)
   Minimal-additive Regeln fuer die in 13.2-13.4 eingefuehrten
   Klassen. Konsolidierung erfolgt in Baustein 13.6.
   ============================================================ */

/* --- View-Layer ------------------------------------------- */

.kim-main {
    max-width: 980px;
    margin: 0 auto;
    padding: var(--abstand-m);
}

.kim-view {
    display: block;
}

.kim-view[hidden] {
    display: none;
}

.kim-footer {
    max-width: 980px;
    margin: var(--abstand-l) auto var(--abstand-m);
    padding: 0 var(--abstand-m);
    font-size: var(--fs-klein);
}

/* --- Header (Baustein 13.3) ------------------------------- */
/* .kim-header selbst ist oben als Flex-Container definiert.
   Die SPA fuegt drei Bereiche ein: Logo links, Titel mittig,
   UserBox rechts. */

.kim-header {
    padding: var(--abstand-s) var(--abstand-m);
    border-bottom: 1px solid var(--farbe-rahmen);
    background-color: var(--farbe-box-bg);
    margin-bottom: var(--abstand-m);
}

.kim-header[hidden] {
    display: none;
}

.kim-header-logo {
    display: inline-block;
    flex-shrink: 0;
}

.kim-header-logo img {
    display: block;
    height: 44px;
    width: auto;
}

.kim-header-titel {
    flex: 1 1 auto;
    text-align: center;
    color: var(--farbe-h1-h3);
    font-weight: 600;
    font-size: var(--fs-h3);
}

.kim-userbox {
    display: inline-flex;
    align-items: center;
    gap: var(--abstand-s);
    padding: var(--abstand-xs) var(--abstand-s);
    border: 1px solid var(--farbe-rahmen);
    border-radius: 999px;
    background-color: var(--farbe-button-sekundaer);
    color: var(--farbe-text);
    cursor: pointer;
    font-family: var(--schrift-familie);
    font-size: var(--fs-klein);
}

.kim-userbox:hover {
    background-color: var(--farbe-rahmen);
}

.kim-userbox-avatar {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 32px;
    height: 32px;
    border-radius: 50%;
    background-color: var(--farbe-akzent);
    color: var(--farbe-box-bg);
    font-weight: 600;
}

.kim-userbox-text {
    display: inline-flex;
    flex-direction: column;
    align-items: flex-start;
    line-height: 1.15;
}

.kim-userbox-name {
    font-weight: 600;
}

.kim-userbox-klasse {
    color: var(--farbe-h4);
    font-size: 0.8rem;
}

.kim-modal-aktionen {
    display: flex;
    gap: var(--abstand-s);
    justify-content: flex-end;
    margin: var(--abstand-s) 0 0 0;
}

/* Wrap-Modifier fuer Aktionen-Reihen mit vier oder mehr Buttons.
   Allgemeiner Helfer (BEM-Modifier), aktuell ungenutzt — bleibt fuer
   spaetere Modal-Variationen. */
.kim-modal-aktionen-wrap {
    flex-wrap: wrap;
}

/* Sub-Item (f) Session 55: Schwierigkeits-Wahl im Trainings-Vorbereitungs-
   Dialog. Drei gleich breite Buttons in einer Grid-Reihe, damit die
   Wahl optisch geordnet wirkt; Abbrechen liegt separat in der
   .kim-modal-aktionen-Standardreihe darunter. Auf sehr schmalem
   Viewport stapeln sich die Buttons untereinander. */
.kim-uebung-schwierigkeit-wahl {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: var(--abstand-s);
    margin: var(--abstand-m) 0 0 0;
}

/* --- HomeScreen (Baustein 13.4) --------------------------- */

.kim-home-gruss {
    color: var(--farbe-h1-h3);
    margin: 0 0 var(--abstand-m) 0;
}

.kim-home-cards {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: var(--abstand-m);
    margin-bottom: var(--abstand-l);
}

.kim-home-card {
    display: flex;
    flex-direction: column;
    gap: var(--abstand-xs);
    padding: var(--abstand-m);
    border: 1px solid var(--farbe-rahmen);
    border-radius: var(--radius-m);
    background-color: var(--farbe-box-bg);
    color: var(--farbe-text);
    text-decoration: none;
    text-align: left;
    cursor: pointer;
    font-family: var(--schrift-familie);
    font-size: var(--fs-text);
}

.kim-home-card:hover {
    border-color: var(--farbe-akzent);
}

.kim-home-card-disabled {
    opacity: 0.55;
    cursor: help;
}

.kim-home-card-disabled:hover {
    border-color: var(--farbe-rahmen);
}

.kim-home-card-titel {
    color: var(--farbe-h1-h3);
    font-size: var(--fs-h3);
    font-weight: 600;
}

.kim-home-card-text {
    color: var(--farbe-h4);
    font-size: var(--fs-klein);
}

/* --- Modus-Tabs (Phase 3.4 Plan-Item 1) -------------------- */
/* HomeScreen-Tab-Kacheln „Lerncoach"/„Training". Visuell wie
   die Module-Cards (gleiche Tokens), semantisch Modus-Eintritts-
   Buttons. Aktiv-State per [aria-current="true"] (Navigation-
   Item-Pattern, kein klassisches WAI-ARIA-Tab-Pattern, weil der
   Klick zur Themen-Liste navigiert und keine Inline-View wechselt
   — K1 Phase 1). [hidden]-Override-Pflicht (Konv. §1 CSS) wegen
   explizitem display: grid. */

.kim-modus-tabs {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: var(--abstand-m);
    margin-bottom: var(--abstand-l);
}

.kim-modus-tabs[hidden] {
    display: none;
}

.kim-modus-tab {
    /* Plan-Item (a) Session 54 K5: prominentere Karten-Optik —
       groesseres Padding, stabile min-height, weicher Hover-/Aktiv-
       Uebergang. Keine Verlaeufe (Konv. §1 CSS), keine Emojis. */
    display: flex;
    flex-direction: column;
    justify-content: center;
    gap: var(--abstand-s);
    padding: var(--abstand-l);
    min-height: 6rem;
    border: 2px solid var(--farbe-rahmen);
    border-radius: var(--radius-m);
    background-color: var(--farbe-box-bg);
    color: var(--farbe-text);
    text-decoration: none;
    text-align: left;
    cursor: pointer;
    font-family: var(--schrift-familie);
    font-size: var(--fs-text);
    transition: border-color 120ms ease-out, background-color 120ms ease-out;
}

.kim-modus-tab:hover {
    border-color: var(--farbe-akzent);
    background-color: var(--farbe-button-sekundaer);
}

.kim-modus-tab[aria-current="true"] {
    border-color: var(--farbe-akzent);
    background-color: var(--farbe-button-sekundaer);
}

.kim-modus-tab-titel {
    color: var(--farbe-h1-h3);
    font-size: var(--fs-h2);
    font-weight: 600;
}

.kim-modus-tab-text {
    color: var(--farbe-h4);
    font-size: var(--fs-klein);
}

/* Wrapper: zwei modus-gefilterte Recent-Listen nebeneinander (Desktop)
   bzw. gestapelt (Mobile, siehe Mobile-Block am Datei-Ende).
   Plan-Item (a) Session 54 K3+K7. */
.kim-home-recent-gruppe {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: var(--abstand-m);
    margin-top: var(--abstand-m);
}

.kim-home-recent {
    /* Positionierung im Wrapper .kim-home-recent-gruppe; keine
       eigenen Layout-Regeln. Hidden-Override unten. */
}

.kim-home-recent[hidden] {
    display: none;
}

.kim-home-recent-titel {
    color: var(--farbe-h1-h3);
    font-size: var(--fs-h4);
    font-weight: 600;
    margin: 0 0 var(--abstand-s) 0;
}

.kim-home-recent-chips {
    display: flex;
    flex-wrap: wrap;
    gap: var(--abstand-s);
}

.kim-chip {
    display: inline-flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 2px;
    padding: var(--abstand-xs) var(--abstand-s);
    border: 1px solid var(--farbe-rahmen);
    border-radius: 6px;
    background-color: var(--farbe-box-bg);
    color: var(--farbe-text);
    cursor: pointer;
    font-family: var(--schrift-familie);
    font-size: var(--fs-klein);
    text-align: left;
}

.kim-chip:hover {
    border-color: var(--farbe-akzent);
}

.kim-chip-titel {
    font-weight: 600;
    color: var(--farbe-text);
}

.kim-chip-meta {
    color: var(--farbe-h4);
    font-size: 0.78rem;
}

/* --- TopicSelect (Baustein 13.4) -------------------------- */

.kim-topic-kopf {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: var(--abstand-s);
    margin-bottom: var(--abstand-m);
}

.kim-topic-tabs {
    display: flex;
    gap: var(--abstand-xs);
    flex-wrap: wrap;
}

.kim-topic-tabs[hidden] {
    display: none;
}

.kim-tab-badge {
    margin-left: var(--abstand-xs);
    padding: 0 var(--abstand-xs);
    border-radius: var(--radius-s);
    background-color: var(--farbe-gold);
    color: var(--farbe-h1-h3);
    font-size: 0.72rem;
    font-weight: 600;
    line-height: 1.4;
}

.kim-topic-suche {
    flex: 0 1 280px;
    padding: var(--abstand-xs) var(--abstand-s);
    border: 1px solid var(--farbe-rahmen);
    border-radius: var(--radius-s);
    background-color: var(--farbe-box-bg);
    color: var(--farbe-text);
    font-family: var(--schrift-familie);
    font-size: var(--fs-text);
}

.kim-topic-suche:focus {
    outline: 2px solid var(--farbe-akzent);
    outline-offset: 1px;
}

/* Masonry via CSS columns: jede Lernfeld-Karte behaelt ihre natuerliche
   Hoehe, eine aufgeklappte Karte streckt nicht die Nachbar-Karte mit.
   break-inside: avoid auf der Karte verhindert Spalten-Wrap. */
.kim-topic-grid {
    column-count: 2;
    column-gap: var(--abstand-m);
}

.kim-topic-grid[hidden] {
    column-count: 0;
    display: none;
}

/* --- Fach-Uebersicht (Drill-Down-Modus 'uebersicht') ----- */

.kim-topic-faecher[hidden] {
    display: none;
}

.kim-faecher-jahr[hidden] {
    display: none;
}

.kim-fach-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));
    gap: var(--abstand-m);
}

.kim-fach-card {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: var(--abstand-xs);
    padding: var(--abstand-l) var(--abstand-m);
    border: 1px solid var(--farbe-rahmen);
    border-radius: var(--radius-m);
    background-color: var(--farbe-box-bg);
    color: var(--farbe-text);
    cursor: pointer;
    font-family: var(--schrift-familie);
    text-align: center;
}

.kim-fach-card:hover {
    border-color: var(--farbe-akzent);
}

.kim-fach-kuerzel {
    color: var(--farbe-h1-h3);
    font-size: 1.75rem;
    font-weight: 700;
    letter-spacing: 0.04em;
}

.kim-fach-meta {
    color: var(--farbe-h4);
    font-size: var(--fs-klein);
}

/* --- Breadcrumb (Drill-Up-Knopf + Modus-Text) ------------ */

.kim-topic-breadcrumb {
    display: flex;
    align-items: center;
    gap: var(--abstand-s);
    margin-bottom: var(--abstand-s);
}

.kim-topic-breadcrumb[hidden] {
    display: none;
}

.kim-btn-zurueck {
    padding: var(--abstand-xs) var(--abstand-s);
    border: 1px solid var(--farbe-rahmen);
    border-radius: var(--radius-s);
    background-color: var(--farbe-button-sekundaer);
    color: var(--farbe-text);
    cursor: pointer;
    font-family: var(--schrift-familie);
    font-size: var(--fs-klein);
}

.kim-btn-zurueck:hover {
    background-color: var(--farbe-rahmen);
}

.kim-breadcrumb-text {
    color: var(--farbe-h1-h3);
    font-weight: 600;
    font-size: var(--fs-text);
}

.kim-lernfeld-karte {
    display: block;
    padding: var(--abstand-s) var(--abstand-m);
    border: 1px solid var(--farbe-rahmen);
    border-radius: var(--radius-m);
    background-color: var(--farbe-box-bg);
    /* Masonry-Disziplin: Karte nicht ueber Spaltenrand brechen lassen,
       Abstand zwischen Karten ueber margin (column-gap deckt nur
       horizontale Spaltenluecken ab). */
    break-inside: avoid;
    margin-bottom: var(--abstand-m);
}

.kim-lernfeld-karte[hidden] {
    display: none;
}

.kim-lernfeld-kopf {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: var(--abstand-s);
    border-bottom: 1px solid var(--farbe-rahmen);
    padding-bottom: var(--abstand-xs);
    cursor: pointer;
    list-style-position: outside;
}

.kim-lernfeld-kopf:hover .kim-lernfeld-name {
    color: var(--farbe-akzent);
}

details[open] > .kim-lernfeld-kopf {
    margin-bottom: var(--abstand-xs);
}

.kim-lernfeld-name {
    color: var(--farbe-h1-h3);
    font-weight: 600;
    font-size: var(--fs-h4);
}

.kim-lernfeld-fach {
    color: var(--farbe-h4);
    font-size: 0.78rem;
    letter-spacing: 0.05em;
    text-transform: uppercase;
}

.kim-thema-liste {
    display: flex;
    flex-direction: column;
    gap: var(--abstand-xs);
}

.kim-thema-btn {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--abstand-s);
    padding: var(--abstand-xs) var(--abstand-s);
    border: 1px solid var(--farbe-rahmen);
    border-radius: var(--radius-s);
    background-color: var(--farbe-seitenbg);
    color: var(--farbe-text);
    cursor: pointer;
    font-family: var(--schrift-familie);
    font-size: var(--fs-text);
    text-align: left;
}

.kim-thema-btn[hidden] {
    display: none;
}

.kim-thema-btn:hover {
    border-color: var(--farbe-akzent);
}

.kim-thema-titel {
    flex: 1 1 auto;
}

.kim-mastery-pill {
    display: inline-block;
    padding: 0 var(--abstand-s);
    border-radius: 999px;
    font-size: 0.72rem;
    font-weight: 600;
    line-height: 1.6;
    flex-shrink: 0;
}

.kim-mastery-pill-neu {
    background-color: var(--farbe-button-sekundaer);
    color: var(--farbe-h4);
}

.kim-mastery-pill-unsicher {
    background-color: var(--farbe-status-rot);
    color: var(--farbe-h1-h3);
}

.kim-mastery-pill-solide {
    background-color: var(--farbe-status-gelb);
    color: var(--farbe-h1-h3);
}

.kim-mastery-pill-stark {
    background-color: var(--farbe-status-gruen);
    color: var(--farbe-h1-h3);
}

/* Aktive Session — visuelle Markierung auf dem laufenden Themen-Tile (13.5.5). */
.kim-thema-btn-aktiv {
    border-color: var(--farbe-akzent);
    box-shadow: 0 0 0 2px var(--farbe-akzent) inset;
}

.kim-thema-badge-laeuft {
    background-color: var(--farbe-status-gruen);
    color: var(--farbe-h1-h3);
    padding: 0 var(--abstand-s);
    border-radius: var(--radius-s);
    font-size: 0.85em;
    margin-left: var(--abstand-xs);
}

/* =========================================================
   Schueler-SPA — Chat-View (13.5)
   --------------------------------------------------------- */

.kim-view-chat {
    display: flex;
    flex-direction: column;
    gap: var(--abstand-m);
}
.kim-view-chat[hidden] { display: none; }

.kim-chat-kopf {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--abstand-m);
    padding-bottom: var(--abstand-s);
    border-bottom: 1px solid var(--farbe-rahmen);
}

.kim-chat-thema {
    margin: 0;
    font-size: 1.15rem;
    color: var(--farbe-h1-h3);
}

.kim-chat-banner {
    margin: 0;
}

.kim-chat-verlauf {
    display: flex;
    flex-direction: column;
    gap: var(--abstand-s);
    padding: var(--abstand-s);
    min-height: 12rem;
    max-height: 55vh;
    overflow-y: auto;
    background-color: var(--farbe-seitenbg);
    border: 1px solid var(--farbe-rahmen);
    border-radius: var(--radius-m);
}
.kim-chat-verlauf[hidden] { display: none; }

.kim-bubble {
    padding: var(--abstand-s) var(--abstand-m);
    border-radius: var(--radius-m);
    max-width: 75%;
    word-wrap: break-word;
    line-height: 1.45;
}
.kim-bubble p { margin: 0 0 var(--abstand-xs); }
.kim-bubble p:last-child { margin-bottom: 0; }
.kim-bubble ul,
.kim-bubble ol {
    margin: var(--abstand-xs) 0 var(--abstand-xs) var(--abstand-m);
    padding-left: var(--abstand-m);
}
.kim-bubble code {
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    background-color: var(--farbe-button-sekundaer);
    padding: 0 var(--abstand-xs);
    border-radius: var(--radius-s);
    font-size: 0.95em;
}
.kim-bubble pre {
    background-color: var(--farbe-button-sekundaer);
    padding: var(--abstand-s);
    border-radius: var(--radius-s);
    overflow-x: auto;
    margin: var(--abstand-xs) 0;
}
.kim-bubble pre code {
    background-color: transparent;
    padding: 0;
}

.kim-bubble-schueler {
    align-self: flex-end;
    background-color: var(--farbe-akzent);
    color: var(--farbe-box-bg);
}
.kim-bubble-schueler code,
.kim-bubble-schueler pre {
    background-color: var(--farbe-button-hover);
    color: var(--farbe-box-bg);
}

.kim-bubble-kim {
    align-self: flex-start;
    background-color: var(--farbe-box-bg);
    color: var(--farbe-text);
    border: 1px solid var(--farbe-rahmen);
}

/* B123-1 (Session 123): Die Bestands-Regeln .kim-chat-spinner und
   .kim-chat-spinner-text (grauer, kursiver Text ueber dem Verlauf) sind
   entfallen. Sie wurden durch .kim-warte-kopfzeile + .kim-warte-chip
   weiter unten in dieser Datei ersetzt — Begruendung dort. Die
   Punkte-Regeln und die Keyframes bleiben unveraendert und werden von
   beiden Anzeigen genutzt. */

.kim-chat-punkte {
    display: inline-flex;
    gap: 0.2rem;
}
.kim-chat-punkt {
    width: 0.45rem;
    height: 0.45rem;
    border-radius: 50%;
    background-color: var(--farbe-h4);
    animation: kim-chat-bounce 1.2s infinite ease-in-out both;
}
.kim-chat-punkt:nth-child(2) { animation-delay: 0.15s; }
.kim-chat-punkt:nth-child(3) { animation-delay: 0.30s; }

@keyframes kim-chat-bounce {
    0%, 80%, 100% { transform: scale(0.6); opacity: 0.4; }
    40%           { transform: scale(1);   opacity: 1; }
}

.kim-chat-abbrechen {
    margin-left: auto;
}


/* --- Wartezustand (B123-1, Session 123) --------------------------- *
   Befund aus S122 (Herbert): „KIM denkt …" wird uebersehen. Die Ursache
   ist primaer die POSITION, nicht die Farbe — der Bestands-Indikator
   stand ueber dem scrollbaren #kim-chat-verlauf, waehrend der Blick nach
   dem Absenden unten bei der eigenen frischen Bubble und beim Composer
   liegt. Zwei Massnahmen:
     1. mitwandernde Warte-Bubble am ENDE des Verlaufs (Messenger-Muster),
        die ins Blickfeld gescrollt wird und den Abbrechen-Knopf traegt;
     2. kontrastreicher Chip statt grau-kursivem Text — der obere Anker
        bleibt zusaetzlich erhalten (Entscheidung Herbert S123), weil die
        Bubble beim Hochscrollen im Verlauf aus dem Sichtfeld wandert.
   Keine neuen Farbwerte: Akzent auf Box-Hintergrund, beide aus :root.   */

.kim-warte-chip {
    display: inline-flex;
    align-items: center;
    gap: var(--abstand-s);
    padding: var(--abstand-xs) var(--abstand-s);
    border-radius: var(--radius-s);
    background-color: var(--farbe-akzent);
    color: var(--farbe-box-bg);
    font-size: var(--fs-klein);
    font-weight: 600;
    line-height: 1.3;
}

/* Punkte im Chip in Box-Farbe. Der Bestands-Wert --farbe-h4 waere auf
   dem Akzent-Hintergrund praktisch unsichtbar. */
.kim-warte-chip .kim-chat-punkt,
.kim-warte-chip .kim-uebung-punkt {
    background-color: var(--farbe-box-bg);
}

/* Oberer Anker ueber dem Verlauf. Traegt bewusst KEINEN Abbrechen-Knopf
   mehr — der sitzt seit B123-1 in der Warte-Bubble, damit Zustand und
   Ausweg beieinanderstehen. [hidden]-Override-Pflicht (Konv. §1 CSS). */
.kim-warte-kopfzeile {
    display: flex;
    align-items: center;
    gap: var(--abstand-s);
    padding: 0 0 var(--abstand-xs);
}
.kim-warte-kopfzeile[hidden] { display: none; }

/* Mitwandernde Warte-Bubble. Rein transientes DOM — kim_schueler.js baut
   und entfernt sie, sie geht nie in den Verlaufs-State (Konv. §1 JS
   „State-DOM-Konsistenz nach Reload"). Daher kein [hidden]-Zustand.
   max-width ueberschreibt .kim-bubble (75 %), weil Chip und Knopf
   nebeneinander mehr Breite brauchen; gestrichelter Rahmen unterscheidet
   sie von einer echten Antwort. */
.kim-bubble-warten {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--abstand-s);
    max-width: 90%;
    border-style: dashed;
}
.kim-bubble-warten .kim-chat-abbrechen { margin-left: auto; }

/* Verzoegerter Zusatztext ab 8 s (Entscheidung Herbert S122: beruhigender
   Hinweis statt mitzaehlendem Sekundenzaehler). Bricht als eigene Zeile
   um, damit die Chip-Zeile ihre Hoehe behaelt. */
.kim-warte-zusatz {
    flex-basis: 100%;
    font-size: var(--fs-klein);
    color: var(--farbe-h4);
}
.kim-warte-zusatz[hidden] { display: none; }


.kim-chat-composer {
    display: flex;
    gap: var(--abstand-s);
    align-items: flex-end;
    padding-top: var(--abstand-s);
    border-top: 1px solid var(--farbe-rahmen);
}
.kim-chat-composer[hidden] { display: none; }

.kim-chat-text {
    flex: 1;
    min-height: 2.6rem;
    padding: var(--abstand-s) var(--abstand-m);
    border: 1px solid var(--farbe-rahmen);
    border-radius: var(--radius-s);
    background-color: var(--farbe-box-bg);
    color: var(--farbe-text);
    font-family: inherit;
    font-size: inherit;
    resize: vertical;
}
.kim-chat-text:focus {
    outline: 2px solid var(--farbe-akzent);
    outline-offset: 1px;
}
.kim-chat-text:disabled,
.kim-chat-composer button:disabled {
    background-color: var(--farbe-button-sekundaer);
    color: var(--farbe-h4);
    cursor: not-allowed;
    opacity: 0.7;
}


/* --- Ueben-View (Phase 3.4 Plan-Item 2) -------------------------- */
/* Statische Huelse fuer den Training-Modus. Layout analog zur
   Chat-View (gleiche Kopf-Struktur), aber kein Verlauf — pro Aufgabe
   wird Frage + Antwort + Bewertung neu gerendert. Cluster-Indikator-
   Tokens nutzen die Nordic-Clarity-Status-Farben (gruen/gelb/rot) plus
   Akzent fuer den aktiven Cluster. [hidden]-Override-Pflicht fuer alle
   Container mit explizitem display-Wert (Konv. §1 CSS). */

.kim-view-uebung {
    max-width: 980px;
    margin: 0 auto;
    padding: 0 var(--abstand-m);
}

.kim-view-uebung[hidden] { display: none; }

.kim-uebung-kopf {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--abstand-s);
    margin-bottom: var(--abstand-s);
}

.kim-uebung-thema {
    color: var(--farbe-h1-h3);
    font-size: var(--fs-h3);
    font-weight: 600;
    margin: 0;
}

.kim-uebung-banner {
    margin-bottom: var(--abstand-s);
}

/* Fortschritts-Zaehler: Reihe von nummerierten Pillen (K1).
   Cluster-States via [data-status]. */
.kim-uebung-fortschritt {
    display: flex;
    flex-wrap: wrap;
    gap: var(--abstand-xs);
    padding: var(--abstand-s) 0;
    margin-bottom: var(--abstand-s);
    border-bottom: 1px solid var(--farbe-rahmen);
}

.kim-uebung-fortschritt[hidden] { display: none; }

/* Cluster-Pillen (Session 62 Redesign, S116/U5 dreistufig): EINE Pille
   pro Cluster mit sieben data-status-Zustaenden. Mapping aus
   cluster_state.status + aufgaben.original + aufgaben.retry erfolgt im
   JS-Renderer (kim_schueler_uebung_fortschritt_rendern,
   _pille_status_ermitteln).
   Domain: default / aktiv / erstversuch-richtig / retry-laeuft /
   retry-richtig / teilweise-gemeistert / zweimal-falsch. */
.kim-uebung-pille {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 32px;
    height: 32px;
    padding: 0 var(--abstand-xs);
    border: 1px solid var(--farbe-rahmen);
    border-radius: 999px;
    background-color: var(--farbe-box-bg);
    color: var(--farbe-text);
    font-size: var(--fs-klein);
    font-weight: 600;
}

/* Default: nur Nummer, neutral (Cluster noch nicht bearbeitet). */
.kim-uebung-pille[data-status="default"] {
    color: var(--farbe-h4);
}

/* Aktiv: stark umrandet im Akzent-Ton. */
.kim-uebung-pille[data-status="aktiv"] {
    border-color: var(--farbe-akzent);
    border-width: 2px;
}

/* Erst-Versuch richtig: gruen ausgefuellt. */
.kim-uebung-pille[data-status="erstversuch-richtig"] {
    background-color: var(--farbe-status-gruen);
}

/* Original falsch, Retry laeuft: rot+gelb umrandet (Zwei-Farb-Border
   via Box-Shadow-Stack — innerer 2-px-Ring rot, aeusserer 2-px-Ring
   gelb). Box-Shadow nimmt keinen Platz im Box-Model, Pille bleibt
   rund (border-radius:999px). Border-image scheidet aus, weil Safari
   border-radius bei border-image ignoriert. */
.kim-uebung-pille[data-status="retry-laeuft"] {
    border-color: transparent;
    box-shadow:
        0 0 0 2px var(--farbe-status-rot),
        0 0 0 4px var(--farbe-status-gelb);
}

/* Sonderfall: Original falsch, Retry richtig — gelb ausgefuellt
   (semantische Differenzierung zu Erst-Versuch-richtig). */
.kim-uebung-pille[data-status="retry-richtig"] {
    background-color: var(--farbe-status-gelb);
}

/* S116/U5 (Plan S115 §3.4/§3.6): Cluster teilrichtig gemeistert —
   beste Bewertung 'teilweise', zaehlt anteilig G. Gelb ausgefuellt wie
   retry-richtig, aber mit gestricheltem Rahmen als sichtbare
   Halb-Erfolg-Differenzierung (nur Bestands-Tokens, keine neuen Farben). */
.kim-uebung-pille[data-status="teilweise-gemeistert"] {
    background-color: var(--farbe-status-gelb);
    border: 1px dashed var(--farbe-h4);
}

/* Zweimal falsch: rot ausgefuellt. */
.kim-uebung-pille[data-status="zweimal-falsch"] {
    background-color: var(--farbe-status-rot);
}

/* Pulse-Indikator (Session 54 b+e): „KIM denkt …" + drei animierte Punkte.
   Wiederverwendung der @keyframes kim-chat-bounce (analoges Pattern aus
   der Chat-View, kein Duplikat). Initial hidden via [hidden]-Override.   */
/* B123-2: Container ohne eigene Textfarbe und ohne Kursivsatz — der Text
   sitzt jetzt in .kim-warte-chip (kontrastreich). Die Regel
   .kim-uebung-pulse-text ist damit entfallen. */
.kim-uebung-pulse {
    display: flex;
    align-items: center;
    gap: var(--abstand-s);
    margin-bottom: var(--abstand-s);
}
.kim-uebung-pulse[hidden] { display: none; }

.kim-uebung-punkte { display: inline-flex; gap: 0.2rem; }
.kim-uebung-punkt {
    width: 0.45rem;
    height: 0.45rem;
    border-radius: 50%;
    background-color: var(--farbe-h4);
    animation: kim-chat-bounce 1.2s infinite ease-in-out both;
}
.kim-uebung-punkt:nth-child(2) { animation-delay: 0.15s; }
.kim-uebung-punkt:nth-child(3) { animation-delay: 0.30s; }

/* Aufgaben-Block. */
.kim-uebung-aufgabe {
    padding: var(--abstand-m);
    border: 1px solid var(--farbe-rahmen);
    border-radius: var(--radius-m);
    background-color: var(--farbe-box-bg);
    margin-bottom: var(--abstand-s);
}

.kim-uebung-aufgabe-meta {
    color: var(--farbe-h4);
    font-size: var(--fs-klein);
    margin-bottom: var(--abstand-xs);
}

.kim-uebung-aufgabe-frage {
    color: var(--farbe-text);
    font-size: var(--fs-text);
    line-height: 1.5;
}

/* Antwort-Bereich: drei parallele Slots (K2). */
.kim-uebung-antwort {
    margin-bottom: var(--abstand-s);
}

.kim-uebung-optionen[hidden],
.kim-uebung-lueckentext[hidden],
.kim-uebung-textarea-wrap[hidden] { display: none; }

.kim-uebung-optionen {
    display: flex;
    flex-direction: column;
    gap: var(--abstand-xs);
}

.kim-uebung-lueckentext {
    display: flex;
    flex-wrap: wrap;
    gap: var(--abstand-xs);
    align-items: center;
}

.kim-uebung-textarea-wrap {
    display: flex;
    align-items: flex-start;
    gap: var(--abstand-s);
}

.kim-uebung-textarea {
    flex: 1 1 auto;
    min-height: 80px;
    padding: var(--abstand-s);
    border: 1px solid var(--farbe-rahmen);
    border-radius: var(--radius-m);
    background-color: var(--farbe-box-bg);
    font-family: var(--schrift-familie);
    font-size: var(--fs-text);
    resize: vertical;
}

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

/* B123-2: gesperrter Zustand waehrend der LLM-Bewertung. Werte identisch
   zu .kim-chat-text:disabled, damit beide Modi dieselbe Sprache sprechen. */
.kim-uebung-textarea:disabled {
    background-color: var(--farbe-button-sekundaer);
    color: var(--farbe-h4);
    cursor: not-allowed;
    opacity: 0.7;
}

/* Phase 3.5 Plan-Item 3 — Antwort-Aktion-Container (Session 53 K3).
   Senden-Knopf-Halterung ausserhalb der drei Antwort-Slots, damit er
   bei allen Aufgabentypen sichtbar bleibt. Rechts-buendig fuer
   Lese-Richtung „Antwort eingeben -> Senden-Knopf druecken".
   B123-2: von text-align auf Flex umgestellt, weil die Zeile jetzt zwei
   Kinder hat — links die Warte-Anzeige, rechts den Knopf. Ohne sichtbare
   Warte-Anzeige bleibt der Knopf durch justify-content rechts stehen, die
   Optik des Bestands aendert sich also nicht. */
.kim-uebung-aktion {
    margin-top: var(--abstand-s);
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: flex-end;
    gap: var(--abstand-s);
}

/* Warte-Anzeige des Bewertungs-Pfads. flex:1 schiebt den Knopf nach rechts,
   solange sie sichtbar ist. [hidden]-Override-Pflicht (Konv. §1 CSS). */
.kim-uebung-warte {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--abstand-s);
    flex: 1 1 auto;
    text-align: left;
}
.kim-uebung-warte[hidden] { display: none; }

/* Phase 3.5 Plan-Item 2 — MC-Radio-Option-Wrapper (Label).
   <label class="kim-uebung-option"> umschliesst <input type="radio"> und
   Beschriftungs-Span. Native Label-Klick-Toggle, kein for=/id=-Aufwand. */
.kim-uebung-option {
    display: flex;
    align-items: flex-start;
    gap: var(--abstand-s);
    padding: var(--abstand-xs) var(--abstand-s);
    border: 1px solid var(--farbe-rahmen);
    border-radius: var(--radius-s);
    background-color: var(--farbe-box-bg);
    cursor: pointer;
}

.kim-uebung-option:hover {
    background-color: var(--farbe-button-sekundaer);
}

.kim-uebung-option input[type="radio"] {
    margin-top: 2px;
    flex-shrink: 0;
}

/* Phase 3.5 Plan-Item 2 — Lueckentext-Inline-Input. Wird im
   Frage-Container an die Stellen der ___-Marker eingesetzt. */
.kim-uebung-luecke-input {
    display: inline-block;
    min-width: 80px;
    padding: 2px 6px;
    margin: 0 2px;
    border: 1px solid var(--farbe-rahmen);
    border-radius: var(--radius-s);
    background-color: var(--farbe-box-bg);
    font-family: inherit;
    font-size: inherit;
}

.kim-uebung-luecke-input:focus {
    outline: 2px solid var(--farbe-akzent);
    outline-offset: 1px;
}

/* Bewertungs-Slot inline (K3). [data-status] steuert Hintergrundfarbe. */
.kim-uebung-bewertung {
    padding: var(--abstand-s) var(--abstand-m);
    border: 1px solid var(--farbe-rahmen);
    border-radius: var(--radius-m);
    margin-bottom: var(--abstand-s);
}

.kim-uebung-bewertung[hidden] { display: none; }

.kim-uebung-bewertung[data-status="korrekt"] {
    background-color: var(--farbe-status-gruen);
}

.kim-uebung-bewertung[data-status="falsch"] {
    background-color: var(--farbe-status-rot);
}

/* S116/U5 (Plan S115 §3.6): dritter Zustand 'teilweise richtig' —
   Token --farbe-status-gelb (#F4E8B0) aus :root. */
.kim-uebung-bewertung[data-status="teilweise"] {
    background-color: var(--farbe-status-gelb);
}

.kim-uebung-bewertung-status {
    font-weight: 600;
    color: var(--farbe-h1-h3);
    margin-bottom: var(--abstand-xs);
}

.kim-uebung-bewertung-text {
    color: var(--farbe-text);
    font-size: var(--fs-text);
}

.kim-uebung-bewertung-tipp {
    margin-top: var(--abstand-xs);
    color: var(--farbe-h4);
    font-size: var(--fs-klein);
}

.kim-uebung-bewertung-tipp[hidden] { display: none; }

/* Plan-Item 3 Session 53 Variante B — Weiter-Knopf statt Auto-Pause.
   Bewertungs-Block bleibt sichtbar bis Schueler:in selbst weiterklickt. */
.kim-uebung-bewertung-aktion {
    margin-top: var(--abstand-s);
    text-align: right;
}


/* Mobile-Anpassungen aller SPA-Komponenten (Header, HomeScreen,
   TopicSelect, Chat-View) sind in den konsolidierten @media-Block
   weiter oben (Sub-Baustein 13.6.c) eingearbeitet. */


/* ============================================================
   Lehrer-Dashboard — Schueler-Detail-Sheet (Phase 4 · 2.2)
   ============================================================
   Right-Drawer-Sheet mit Backdrop. Eintritt: Klick auf
   Namen-Spalte in #kim-lehrer-schueler-tbody. Bauteil B65-2.a
   (Strukturschicht); Daten- und Rest-Sektionen folgen in
   B65-2.b/c. Keine Verlauefe (User-Praeferenz), platzsparend
   in der Vertikalen.
   ============================================================ */

/* Klickbarer Schueler-Name in der Reset-Tabelle. Button-Element
   mit Link-Optik (Unterstreichung, Cursor pointer). Keine
   eigene Spalte — Konv. „platzsparende Gestaltung horizontal".
*/
.kim-lehrer-namen-link {
    background: none;
    border: none;
    padding: 0;
    margin: 0;
    font-family: inherit;
    font-size: inherit;
    color: var(--farbe-link);
    text-decoration: underline;
    cursor: pointer;
    text-align: left;
}

.kim-lehrer-namen-link:hover,
.kim-lehrer-namen-link:focus-visible {
    color: var(--farbe-akzent);
    outline: none;
}

.kim-lehrer-namen-link:focus-visible {
    outline: 2px solid var(--farbe-akzent);
    outline-offset: 2px;
}

/* Backdrop: voller Viewport, dunkelt Hintergrund ab.
   Klick schliesst das Sheet (Listener im JS). */
.kim-lehrer-sheet-backdrop {
    position: fixed;
    inset: 0;
    background-color: rgba(26, 37, 53, 0.4);
    z-index: 1000;
}

.kim-lehrer-sheet-backdrop[hidden] {
    display: none;
}

/* Sheet: Drawer von rechts, halbe Viewport-Breite (max 560px),
   volle Hoehe, Scroll innerhalb. Slide-in per transform.
   z-index ueber Backdrop. */
.kim-lehrer-sheet {
    position: fixed;
    top: 0;
    right: 0;
    bottom: 0;
    width: min(560px, 92vw);
    background-color: var(--farbe-box-bg);
    border-left: 1px solid var(--farbe-rahmen);
    box-shadow: -2px 0 8px rgba(0, 0, 0, 0.08);
    z-index: 1001;
    display: flex;
    flex-direction: column;
    transform: translateX(0);
    transition: transform 0.2s ease-out;
}

.kim-lehrer-sheet[hidden] {
    /* hidden-Attribut schaltet das Sheet vollstaendig aus.
       transform/transition spielen erst bei Open/Close-Animation. */
    display: none;
}

/* Header-Sektion des Sheets: Title (Schueler-Name) + Sub
   (Lehrbetrieb) + Schliessen-Knopf rechts. */
.kim-lehrer-sheet-head {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: var(--abstand-s);
    padding: var(--abstand-m) var(--abstand-m) var(--abstand-s) var(--abstand-m);
    border-bottom: 1px solid var(--farbe-rahmen);
}

/* B94-3 (Session 94): Titelblock waechst, PW-Reset + Schliessen rechts. */
.kim-lehrer-sheet-titelblock {
    flex: 1;
    min-width: 0;
}

/* B104-1 (Session 104, Variante B): Aktionsgruppe haelt die beiden Buttons +
   Schliessen in einer Reihe. align-items:stretch laesst den einzeiligen
   Bericht-Button auf die Hoehe des zweizeiligen PW-Reset-Buttons mitwachsen,
   sodass beide gleich hoch sind. Kompaktes horizontales Padding spart Breite. */
.kim-lehrer-sheet-aktionen {
    display: flex;
    align-items: stretch;
    gap: var(--abstand-s);
    flex-shrink: 0;
}
.kim-lehrer-sheet-aktionen .kim-btn-sekundaer {
    padding-left: var(--abstand-m);
    padding-right: var(--abstand-m);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    text-align: center;
}
.kim-lehrer-sheet-bericht {
    white-space: nowrap;
}
/* "Passwort zuruecksetzen" bewusst zweizeilig: schmaler -> mehr Platz fuer
   den Titel (Variante B, Wunsch Herbert S104). */
.kim-lehrer-sheet-pwreset {
    white-space: normal;
    line-height: 1.15;
    max-width: 7.5rem;
}
.kim-lehrer-sheet-aktionen .kim-lehrer-sheet-close {
    align-self: flex-start;
}

/* Schmale Viewports: Kopf darf umbrechen, Aktionsgruppe rutscht unter den
   Titel und teilt die Breite gleichmaessig. */
@media (max-width: 768px) {
    .kim-lehrer-sheet-aktionen {
        flex-wrap: wrap;
        width: 100%;
        margin-top: var(--abstand-s);
    }
    .kim-lehrer-sheet-aktionen .kim-btn-sekundaer {
        flex: 1;
    }
    .kim-lehrer-sheet-pwreset {
        max-width: none;
    }
}

.kim-lehrer-sheet-title {
    margin: 0;
    font-size: var(--fs-h2);
    color: var(--farbe-h1-h3);
    line-height: var(--zeile-headline);
}

.kim-lehrer-sheet-sub {
    margin: var(--abstand-xs) 0 0 0;
    color: var(--farbe-h4);
    font-size: var(--fs-klein);
}

.kim-lehrer-sheet-close {
    background: none;
    border: none;
    padding: 0;
    margin: 0;
    font-size: 1.5rem;
    line-height: 1;
    color: var(--farbe-h4);
    cursor: pointer;
}

.kim-lehrer-sheet-close:hover,
.kim-lehrer-sheet-close:focus-visible {
    color: var(--farbe-akzent);
    outline: none;
}

.kim-lehrer-sheet-close:focus-visible {
    outline: 2px solid var(--farbe-akzent);
    outline-offset: 2px;
}

/* Body-Sektion: scrollt eigenstaendig, vertikal kompakte
   Abstaende. Inhalt wird in B65-2.b/c gefuellt. */
.kim-lehrer-sheet-body {
    flex: 1 1 auto;
    overflow-y: auto;
    padding: var(--abstand-m);
}

.kim-lehrer-sheet-platzhalter {
    color: var(--farbe-h4);
    font-size: var(--fs-klein);
}

.kim-lehrer-sheet-leer {
    color: var(--farbe-h4);
    font-size: var(--fs-klein);
    margin: var(--abstand-xs) 0 0 0;
}

/* B122-2 (S122): Gesamt-Niveau-Zeile im Sheet-Kopf. Eine flache Zeile
   ueber den Stammdaten-Kacheln — Pille (wiederverwendete .kim-mastery-pill-
   Klassen, damit Lehrer- und Schueler-Ansicht dieselbe Farbsprache
   sprechen) plus Zusatz mit Ø Punkte und Themenzahl. */
.kim-lehrer-sheet-gesamt {
    display: flex;
    align-items: center;
    gap: var(--abstand-s);
    margin-bottom: var(--abstand-s);
}

.kim-lehrer-sheet-gesamt-zusatz {
    font-size: var(--fs-klein);
    color: var(--farbe-h4);
}

/* kv-Grid im Sheet-Body (Stammdaten-Kacheln). Zwei Spalten, kompakt. */
.kim-lehrer-sheet-kv-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: var(--abstand-s);
    margin-bottom: var(--abstand-m);
}

.kim-lehrer-sheet-kv {
    padding: var(--abstand-s);
    border: 1px solid var(--farbe-rahmen);
    border-radius: var(--radius-s);
    background-color: var(--farbe-seitenbg);
}

.kim-lehrer-sheet-kv-label {
    font-size: var(--fs-klein);
    color: var(--farbe-h4);
    margin-bottom: var(--abstand-xs);
}

.kim-lehrer-sheet-kv-wert {
    font-size: var(--fs-text);
    color: var(--farbe-text);
}

/* Sektion (h4 + Inhalt). Wird fuer Kompetenz / Sessions / Notizen
   wiederverwendet. Section-Head ist eine Flex-Zeile mit h4 links und
   optionalem Meta-Label rechts (z. B. „err. %" als Spalten-Hinweis). */
.kim-lehrer-sheet-section {
    margin-top: var(--abstand-m);
}

.kim-lehrer-sheet-section-head {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: var(--abstand-s);
    margin: 0 0 var(--abstand-s) 0;
}

.kim-lehrer-sheet-section-head > h4 {
    margin: 0;
    font-size: var(--fs-h4);
    color: var(--farbe-h4);
}

.kim-lehrer-sheet-section-meta {
    font-size: var(--fs-klein);
    color: var(--farbe-h4);
}

/* Kompetenz-Sektion: Fach-Bloecke als native <details>-Akkordeons.
   Initial alle zu (kein open-Attribut beim Render); Re-Open des
   Sheets baut die Sektion neu → wieder alle zu. */
.kim-lehrer-sheet-fach-block {
    margin-bottom: var(--abstand-xs);
    border-bottom: 1px solid var(--farbe-rahmen);
}

.kim-lehrer-sheet-fach-block:last-child {
    border-bottom: none;
}

.kim-lehrer-sheet-fach-block > summary {
    /* Native Browser-Marker (Triangle) ausblenden, eigenen Pfeil setzen */
    list-style: none;
    cursor: pointer;
    padding: var(--abstand-xs) 0;
    font-size: var(--fs-klein);
    color: var(--farbe-h1-h3);
    font-weight: 600;
}

.kim-lehrer-sheet-fach-block > summary::-webkit-details-marker {
    display: none;
}

.kim-lehrer-sheet-fach-block > summary::before {
    content: "\25B8";  /* ▸ */
    display: inline-block;
    width: 1em;
    color: var(--farbe-h4);
    transition: transform 0.15s ease;
}

.kim-lehrer-sheet-fach-block[open] > summary::before {
    content: "\25BE";  /* ▾ */
}

.kim-lehrer-sheet-fach-block > summary:hover,
.kim-lehrer-sheet-fach-block > summary:focus-visible {
    color: var(--farbe-akzent);
    outline: none;
}

.kim-lehrer-sheet-fach-block > summary:focus-visible {
    outline: 2px solid var(--farbe-akzent);
    outline-offset: 2px;
    border-radius: var(--radius-s);
}

.kim-lehrer-sheet-thema-zeile {
    display: flex;
    align-items: center;
    gap: var(--abstand-s);
    padding: var(--abstand-xs) 0;
    font-size: var(--fs-klein);
}

.kim-lehrer-sheet-thema-name {
    flex: 1 1 auto;
    color: var(--farbe-text);
    /* lange Thema-Namen muessen umbrechen statt den Balken zu verdraengen */
    min-width: 0;
    overflow-wrap: anywhere;
}

.kim-lehrer-sheet-balken-aussen {
    flex: 0 0 110px;
    height: 8px;
    background-color: var(--farbe-button-sekundaer);
    border-radius: 4px;
    overflow: hidden;
}

.kim-lehrer-sheet-balken-innen {
    height: 100%;
    border-radius: 4px;
}

.kim-lehrer-sheet-balken-innen.gruen {
    background-color: var(--farbe-status-gruen);
}

.kim-lehrer-sheet-balken-innen.gelb {
    background-color: var(--farbe-status-gelb);
}

.kim-lehrer-sheet-balken-innen.rot {
    background-color: var(--farbe-status-rot);
}

.kim-lehrer-sheet-balken-zahl {
    flex: 0 0 auto;
    width: 2.5em;
    text-align: right;
    color: var(--farbe-h4);
    font-variant-numeric: tabular-nums;
}

/* Sessions-Sektion (B65-2.c): Akkordeon innerhalb der Sektion;
   wenn aufgeklappt zeigt es eine kompakte Tabelle mit den letzten
   50 Sessions. Default geschlossen, damit der Sheet-Scroll bei
   vielen Sessions nicht ausufert. */
.kim-lehrer-sheet-sessions-akkordeon {
    margin-top: var(--abstand-xs);
}

.kim-lehrer-sheet-sessions-akkordeon > summary {
    list-style: none;
    cursor: pointer;
    padding: var(--abstand-xs) 0;
    font-size: var(--fs-klein);
    color: var(--farbe-link);
}

.kim-lehrer-sheet-sessions-akkordeon > summary::-webkit-details-marker {
    display: none;
}

.kim-lehrer-sheet-sessions-akkordeon > summary::before {
    content: "\25B8";  /* ▸ */
    display: inline-block;
    width: 1em;
    color: var(--farbe-h4);
}

.kim-lehrer-sheet-sessions-akkordeon[open] > summary::before {
    content: "\25BE";  /* ▾ */
}

.kim-lehrer-sheet-sessions-tabelle {
    width: 100%;
    border-collapse: collapse;
    font-size: var(--fs-klein);
    margin-top: var(--abstand-xs);
}

.kim-lehrer-sheet-sessions-tabelle th,
.kim-lehrer-sheet-sessions-tabelle td {
    padding: var(--abstand-xs) var(--abstand-s) var(--abstand-xs) 0;
    border-bottom: 1px solid var(--farbe-rahmen);
    vertical-align: top;
    text-align: left;
}

.kim-lehrer-sheet-sessions-tabelle th {
    color: var(--farbe-h4);
    font-weight: 600;
}

.kim-lehrer-sheet-sessions-tabelle tr:last-child td {
    border-bottom: none;
}

.kim-lehrer-sheet-sessions-tabelle td {
    color: var(--farbe-text);
}

/* Status-Badge fuer Sessions: drei Zustaende mit Status-Farben. */
.kim-lehrer-sheet-status-badge {
    display: inline-block;
    padding: 0 var(--abstand-xs);
    border-radius: var(--radius-s);
    font-size: var(--fs-klein);
    line-height: 1.5;
}

.kim-lehrer-sheet-status-badge.aktiv {
    background-color: var(--farbe-status-gelb);
    color: var(--farbe-text);
}

.kim-lehrer-sheet-status-badge.beendet {
    background-color: var(--farbe-status-gruen);
    color: var(--farbe-text);
}

.kim-lehrer-sheet-status-badge.timeout {
    background-color: var(--farbe-status-rot);
    color: var(--farbe-text);
}

/* Notizen-Sektion (B65-2.c): Karten-Liste, read-only.
   Editor folgt in Bauteil 2.3. */
.kim-lehrer-sheet-notiz-liste {
    display: flex;
    flex-direction: column;
    gap: var(--abstand-s);
}

.kim-lehrer-sheet-notiz-karte {
    padding: var(--abstand-s);
    border: 1px solid var(--farbe-rahmen);
    border-radius: var(--radius-s);
    background-color: var(--farbe-seitenbg);
}

.kim-lehrer-sheet-notiz-head {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: var(--abstand-s);
    margin-bottom: var(--abstand-xs);
}

.kim-lehrer-sheet-notiz-badge {
    display: inline-block;
    padding: 0 var(--abstand-xs);
    background-color: var(--farbe-button-sekundaer);
    color: var(--farbe-text);
    border-radius: var(--radius-s);
    font-size: var(--fs-klein);
    line-height: 1.5;
}

.kim-lehrer-sheet-notiz-datum {
    font-size: var(--fs-klein);
    color: var(--farbe-h4);
    font-variant-numeric: tabular-nums;
}

.kim-lehrer-sheet-notiz-inhalt {
    color: var(--farbe-text);
    font-size: var(--fs-text);
    /* Zeilenumbrueche aus dem Notiz-Text bewahren */
    white-space: pre-wrap;
    overflow-wrap: anywhere;
}

.kim-lehrer-sheet-notiz-fuss {
    margin-top: var(--abstand-xs);
    font-size: var(--fs-klein);
    color: var(--farbe-h4);
}

/* Notizen-Editor (B66-1.a): Anlege-Aktion + Inline-Form.
   Kompakt gebaut nach Konv. „platzsparende Gestaltung in der Vertikalen". */
.kim-lehrer-sheet-notiz-aktionen {
    display: flex;
    justify-content: flex-end;
    margin-bottom: var(--abstand-s);
}

.kim-lehrer-sheet-notiz-form {
    margin-bottom: var(--abstand-s);
    padding: var(--abstand-s);
    border: 1px solid var(--farbe-rahmen);
    border-radius: var(--radius-s);
    background-color: var(--farbe-seitenbg);
    display: flex;
    flex-direction: column;
    gap: var(--abstand-xs);
}

.kim-lehrer-sheet-notiz-form[hidden] {
    display: none;
}

.kim-lehrer-sheet-notiz-form .kim-feld {
    margin: 0;
}

.kim-lehrer-sheet-notiz-form textarea {
    width: 100%;
    min-height: 5em;
    resize: vertical;
    font-family: inherit;
    font-size: var(--fs-text);
}

.kim-lehrer-sheet-notiz-form select {
    font-family: inherit;
    font-size: var(--fs-text);
}

.kim-lehrer-sheet-notiz-form .kim-feld-checkbox {
    display: flex;
    flex-direction: column;
    gap: 0;
}

.kim-lehrer-sheet-notiz-form .kim-feld-checkbox label {
    display: inline-flex;
    align-items: center;
    gap: var(--abstand-xs);
    font-weight: normal;
}

.kim-lehrer-sheet-notiz-sichtbar-hinweis {
    margin: 0 0 0 1.6em;
    font-size: var(--fs-klein);
    color: var(--farbe-h4);
}

.kim-lehrer-sheet-notiz-form-aktionen {
    display: flex;
    justify-content: flex-end;
    gap: var(--abstand-s);
    margin-top: var(--abstand-xs);
}

/* Notizen-Editor Bearbeiten (B66-1.b): Karten-internes Toggle.
   Rechts im Karten-Kopf gruppiert Datum + Bearbeiten-Knopf. */
.kim-lehrer-sheet-notiz-head-rechts {
    display: inline-flex;
    align-items: baseline;
    gap: var(--abstand-xs);
}

.kim-lehrer-sheet-notiz-karte-edit-btn,
.kim-lehrer-sheet-notiz-karte-loesch-btn {
    font-size: var(--fs-klein);
    padding: 0 var(--abstand-xs);
    line-height: 1.5;
}

/* Notiz-Loesch-Dialog (B66-1.c): Kontext-Anzeige + Inhalts-Auszug. */
.kim-modal-notiz-loesch-kontext {
    font-size: var(--fs-klein);
    color: var(--farbe-h4);
    margin: var(--abstand-xs) 0 0 0;
}

.kim-modal-notiz-loesch-inhalt {
    margin: var(--abstand-xs) 0;
    padding: var(--abstand-xs);
    background-color: var(--farbe-seitenbg);
    border: 1px solid var(--farbe-rahmen);
    border-radius: var(--radius-s);
    font-size: var(--fs-text);
    white-space: pre-wrap;
    overflow-wrap: anywhere;
}

/* LMS-Aufträge-Sektion (B66-2.a): Karten-Liste + Status-Badges.
   Strukturell parallel zur Notiz-Karten-Familie; eigene Klassen, damit
   die zwei Sektionen unabhängig weiterentwickelbar bleiben. */
.kim-lehrer-sheet-lms-liste {
    display: flex;
    flex-direction: column;
    gap: var(--abstand-s);
}

.kim-lehrer-sheet-lms-karte {
    padding: var(--abstand-s);
    border: 1px solid var(--farbe-rahmen);
    border-radius: var(--radius-s);
    background-color: var(--farbe-seitenbg);
}

.kim-lehrer-sheet-lms-head {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: var(--abstand-s);
    margin-bottom: var(--abstand-xs);
}

.kim-lehrer-sheet-lms-titel {
    font-weight: 600;
    color: var(--farbe-text);
    overflow-wrap: anywhere;
}

.kim-lehrer-sheet-lms-status-badge {
    display: inline-block;
    padding: 0 var(--abstand-xs);
    border-radius: var(--radius-s);
    font-size: var(--fs-klein);
    line-height: 1.5;
    flex-shrink: 0;
}

.kim-lehrer-sheet-lms-status-badge.offen {
    background-color: var(--farbe-status-gelb);
    color: var(--farbe-text);
}

.kim-lehrer-sheet-lms-status-badge.erledigt {
    background-color: var(--farbe-status-gruen);
    color: var(--farbe-text);
}

.kim-lehrer-sheet-lms-meta {
    display: flex;
    flex-wrap: wrap;
    gap: var(--abstand-xs) var(--abstand-s);
    font-size: var(--fs-klein);
    color: var(--farbe-h4);
    font-variant-numeric: tabular-nums;
}

.kim-lehrer-sheet-lms-meta-feld {
    white-space: nowrap;
}

/* Anlege-Aktion + Inline-Form für neuen LMS-Auftrag (B66-2.a).
   Pattern wie Notiz-Anlege-Form; Felder Titel (Pflicht) + Fälligkeit (optional). */
.kim-lehrer-sheet-lms-aktionen {
    display: flex;
    justify-content: flex-end;
    margin-bottom: var(--abstand-s);
}

.kim-lehrer-sheet-lms-form {
    margin-bottom: var(--abstand-s);
    padding: var(--abstand-s);
    border: 1px solid var(--farbe-rahmen);
    border-radius: var(--radius-s);
    background-color: var(--farbe-seitenbg);
}

.kim-lehrer-sheet-lms-form[hidden] {
    display: none;
}

.kim-lehrer-sheet-lms-form .kim-feld {
    margin-bottom: var(--abstand-s);
}

.kim-lehrer-sheet-lms-form input[type="text"],
.kim-lehrer-sheet-lms-form input[type="date"] {
    width: 100%;
    box-sizing: border-box;
}

.kim-lehrer-sheet-lms-form-aktionen {
    display: flex;
    justify-content: flex-end;
    gap: var(--abstand-s);
    margin-top: var(--abstand-xs);
}


/* ============================================================
   Lehrer-Sheet · Session-Detail-Sub-View (Phase 4 · B70-1.c)
   ============================================================
   Drill-Down-Ansicht innerhalb des Schueler-Sheets. Eintritt
   per Klick auf eine Sessions-Tabellen-Zeile (Sektion „KIM-
   Sessions"). Sub-View ersetzt den Body-Inhalt voll; Zurueck-
   Knopf rendert die Uebersicht neu (kein Caching).

   Drei farb-codierte Sub-Bloecke:
     - Lerncoach: Chat-Bubbles + Auswertungs-DL
     - Training:  Cluster-Akkordeons + Aufgaben-Karten + Ergebnis-Grid
     - aktive Session: Banner statt Auswertung/Ergebnis

   Cluster-State-Farben aus Konv. §3.6 Status-Tokens
   (--farbe-status-gruen/gelb/rot). Vierte Farbe „offen" nutzt
   den dezenten --farbe-button-sekundaer.

   Keine Hintergrundverlaeufe (User-Praeferenz). Platzsparend
   in der Vertikalen, alle Werte ueber Tokens.
   ============================================================ */

/* Klickbare Sessions-Tabellen-Zeile (Drill-Down-Trigger). */
.kim-lehrer-sheet-sessions-zeile-klickbar {
    cursor: pointer;
}

.kim-lehrer-sheet-sessions-zeile-klickbar:hover {
    background-color: var(--farbe-button-sekundaer);
}

.kim-lehrer-sheet-sessions-zeile-klickbar:focus-visible {
    outline: 2px solid var(--farbe-akzent);
    outline-offset: -2px;
}

/* --- Zurueck-Leiste oberhalb der Sub-View --------------------- */
.kim-lehrer-sheet-session-detail-leiste {
    display: flex;
    justify-content: flex-start;
    margin-bottom: var(--abstand-s);
}

.kim-lehrer-sheet-session-detail-zurueck-btn {
    font-size: var(--fs-klein);
}

/* --- Gemeinsamer Sub-View-Kopf (Thema + Meta-Kacheln) -------- */
.kim-lehrer-sheet-session-detail-kopf h4 {
    margin: 0 0 var(--abstand-xs) 0;
    color: var(--farbe-h4);
    font-size: var(--fs-h4);
}

/* Aktive-Session-Banner zwischen Kopf und modus-spez. Block. */
.kim-lehrer-sheet-session-detail-banner {
    padding: var(--abstand-xs) var(--abstand-s);
    margin: 0 0 var(--abstand-s) 0;
    border-left: 3px solid var(--farbe-gold);
    background-color: var(--farbe-status-gelb);
    color: var(--farbe-text);
    font-size: var(--fs-klein);
}

/* Config-Meta-Zeile (Schwierigkeit / Nachrichten / Fokus). */
.kim-lehrer-sheet-session-detail-meta {
    margin: 0;
    color: var(--farbe-h4);
    font-size: var(--fs-klein);
}

/* --- Lerncoach-Verlauf (Chat-Bubbles) ------------------------ */
.kim-lehrer-sheet-session-detail-verlauf {
    display: flex;
    flex-direction: column;
    gap: var(--abstand-xs);
}

.kim-lehrer-sheet-session-detail-bubble {
    display: flex;
    flex-direction: column;
    padding: var(--abstand-xs) var(--abstand-s);
    border: 1px solid var(--farbe-rahmen);
    border-radius: var(--radius-s);
    background-color: var(--farbe-box-bg);
}

.kim-lehrer-sheet-session-detail-bubble--kim {
    border-left: 3px solid var(--farbe-akzent);
}

.kim-lehrer-sheet-session-detail-bubble--schueler {
    border-left: 3px solid var(--farbe-button-abgabe);
    background-color: var(--farbe-seitenbg);
}

.kim-lehrer-sheet-session-detail-bubble--system {
    border-left: 3px solid var(--farbe-h4);
    background-color: var(--farbe-button-sekundaer);
}

.kim-lehrer-sheet-session-detail-bubble-meta {
    color: var(--farbe-h4);
    font-size: var(--fs-klein);
    margin-bottom: var(--abstand-xs);
}

.kim-lehrer-sheet-session-detail-bubble-text {
    color: var(--farbe-text);
    font-size: var(--fs-text);
    line-height: var(--zeile-text);
    white-space: pre-wrap;
    word-wrap: break-word;
}

/* --- Auswertung (Definitionsliste, zwei Spalten) ------------- */
.kim-lehrer-sheet-session-detail-auswertung {
    display: grid;
    grid-template-columns: minmax(8rem, 14rem) 1fr;
    gap: var(--abstand-xs) var(--abstand-s);
    margin: 0;
}

.kim-lehrer-sheet-session-detail-auswertung dt {
    color: var(--farbe-h4);
    font-size: var(--fs-klein);
    font-weight: 600;
}

.kim-lehrer-sheet-session-detail-auswertung dd {
    margin: 0;
    color: var(--farbe-text);
    font-size: var(--fs-klein);
    white-space: pre-wrap;
    word-wrap: break-word;
}

/* --- Training-Cluster (Akkordeon mit Aggregat-Badge) --------- */
.kim-lehrer-sheet-session-detail-cluster {
    margin-bottom: var(--abstand-xs);
    border: 1px solid var(--farbe-rahmen);
    border-radius: var(--radius-s);
    background-color: var(--farbe-box-bg);
}

.kim-lehrer-sheet-session-detail-cluster-summary {
    display: flex;
    align-items: center;
    gap: var(--abstand-s);
    padding: var(--abstand-xs) var(--abstand-s);
    cursor: pointer;
    list-style: none;
    user-select: none;
}

.kim-lehrer-sheet-session-detail-cluster-summary::-webkit-details-marker {
    display: none;
}

.kim-lehrer-sheet-session-detail-cluster-titel {
    color: var(--farbe-text);
    font-size: var(--fs-text);
    font-weight: 600;
}

/* Aggregat-Badge — fuenf Zustaende (S117/U7: + teilweise). */
.kim-lehrer-sheet-session-detail-cluster-badge {
    display: inline-block;
    padding: 0 var(--abstand-xs);
    border-radius: var(--radius-s);
    font-size: var(--fs-klein);
    line-height: 1.5;
    color: var(--farbe-text);
    min-width: 5rem;
    text-align: center;
}

.kim-lehrer-sheet-session-detail-cluster-badge--gruen {
    background-color: var(--farbe-status-gruen);
}

.kim-lehrer-sheet-session-detail-cluster-badge--gelb {
    background-color: var(--farbe-status-gelb);
}

.kim-lehrer-sheet-session-detail-cluster-badge--rot {
    background-color: var(--farbe-status-rot);
}

/* Teilweise gemeistert (S117/U7, Plan S115 §3.4): gelb mit gestricheltem
   Rahmen — selbe Halb-Erfolg-Sprache wie die Schueler-Pille
   [data-status="teilweise-gemeistert"], nur Bestands-Tokens. */
.kim-lehrer-sheet-session-detail-cluster-badge--teilweise {
    background-color: var(--farbe-status-gelb);
    border: 1px dashed var(--farbe-h4);
}

.kim-lehrer-sheet-session-detail-cluster-badge--offen {
    background-color: var(--farbe-button-sekundaer);
}

/* --- Aufgaben-Karte innerhalb eines Cluster-Akkordeons ------- */
.kim-lehrer-sheet-session-detail-aufgabe {
    padding: var(--abstand-s);
    border-top: 1px solid var(--farbe-rahmen);
    background-color: var(--farbe-box-bg);
}

.kim-lehrer-sheet-session-detail-aufgabe-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--abstand-s);
    margin-bottom: var(--abstand-xs);
}

.kim-lehrer-sheet-session-detail-aufgabe-titel {
    color: var(--farbe-h4);
    font-size: var(--fs-klein);
    font-weight: 600;
}

.kim-lehrer-sheet-session-detail-aufgabe-badge {
    display: inline-block;
    padding: 0 var(--abstand-xs);
    border-radius: var(--radius-s);
    font-size: var(--fs-klein);
    line-height: 1.5;
    color: var(--farbe-text);
    min-width: 4rem;
    text-align: center;
}

.kim-lehrer-sheet-session-detail-aufgabe-badge--gruen {
    background-color: var(--farbe-status-gruen);
}

/* Teilweise richtig (S117/U7): gelber Aufgaben-Badge. */
.kim-lehrer-sheet-session-detail-aufgabe-badge--gelb {
    background-color: var(--farbe-status-gelb);
}

.kim-lehrer-sheet-session-detail-aufgabe-badge--rot {
    background-color: var(--farbe-status-rot);
}

.kim-lehrer-sheet-session-detail-aufgabe-badge--offen {
    background-color: var(--farbe-button-sekundaer);
}

/* Aufgaben-Felder (Frage, Optionen, Antworten) als DL. */
.kim-lehrer-sheet-session-detail-aufgabe-felder {
    display: grid;
    grid-template-columns: minmax(7rem, 11rem) 1fr;
    gap: var(--abstand-xs) var(--abstand-s);
    margin: 0;
}

.kim-lehrer-sheet-session-detail-aufgabe-felder dt {
    color: var(--farbe-h4);
    font-size: var(--fs-klein);
    font-weight: 600;
}

.kim-lehrer-sheet-session-detail-aufgabe-felder dd {
    margin: 0;
    color: var(--farbe-text);
    font-size: var(--fs-klein);
    white-space: pre-wrap;
    word-wrap: break-word;
}


/* ===================================================================
   Lehrer-Dashboard: Cluster-Audit (Phase 4 · Bauteil 2.6, Session 75)
   ===================================================================
   Tab-Leiste zwischen Schueler-Liste und Cluster-Audit innerhalb der
   Klassen-Sektion #kim-lehrer-pwreset. Plus Zeitraum-Umschalter und
   drei Aggregat-Tabellen mit Status-Tokens (gruen/gelb/rot/offen).
   Konv. §1: keine Verlaeufe, keine Hex-Werte ausserhalb :root, keine
   Emojis. [hidden]-Override-Pflicht fuer flex-Container. */

.kim-lehrer-klasse-tabs {
    display: flex;
    flex-wrap: wrap;
    gap: var(--abstand-xs);
    margin: var(--abstand-m) 0 var(--abstand-s) 0;
    border-bottom: 1px solid var(--farbe-rahmen);
}

.kim-lehrer-klasse-tabs[hidden] {
    display: none;
}

.kim-lehrer-klasse-tab {
    appearance: none;
    background-color: transparent;
    border: 1px solid transparent;
    border-bottom: none;
    border-radius: var(--radius-s) var(--radius-s) 0 0;
    color: var(--farbe-link);
    cursor: pointer;
    font-family: inherit;
    font-size: var(--fs-text);
    padding: var(--abstand-s) var(--abstand-m);
    margin-bottom: -1px;
}

.kim-lehrer-klasse-tab:hover,
.kim-lehrer-klasse-tab:focus-visible {
    background-color: var(--farbe-button-sekundaer);
    outline: none;
}

.kim-lehrer-klasse-tab--aktiv {
    background-color: var(--farbe-box-bg);
    border-color: var(--farbe-rahmen);
    color: var(--farbe-h1-h3);
    font-weight: 600;
}

.kim-lehrer-cluster-audit {
    display: block;
    margin-top: var(--abstand-s);
}

.kim-lehrer-cluster-audit[hidden] {
    display: none;
}

.kim-lehrer-cluster-audit-zeitraum {
    display: flex;
    flex-wrap: wrap;
    gap: var(--abstand-xs);
    margin-bottom: var(--abstand-s);
}

.kim-lehrer-cluster-audit-zeitraum[hidden] {
    display: none;
}

.kim-lehrer-cluster-audit-zeitraum-btn {
    appearance: none;
    background-color: var(--farbe-button-sekundaer);
    border: 1px solid var(--farbe-rahmen);
    border-radius: var(--radius-s);
    color: var(--farbe-text);
    cursor: pointer;
    font-family: inherit;
    font-size: var(--fs-klein);
    padding: var(--abstand-xs) var(--abstand-s);
}

.kim-lehrer-cluster-audit-zeitraum-btn:hover,
.kim-lehrer-cluster-audit-zeitraum-btn:focus-visible {
    background-color: var(--farbe-box-bg);
    outline: 1px solid var(--farbe-link);
}

.kim-lehrer-cluster-audit-zeitraum-btn--aktiv {
    background-color: var(--farbe-akzent);
    border-color: var(--farbe-akzent);
    color: var(--farbe-box-bg);
    font-weight: 600;
}

.kim-lehrer-cluster-audit-zeitraum-btn--aktiv:hover,
.kim-lehrer-cluster-audit-zeitraum-btn--aktiv:focus-visible {
    background-color: var(--farbe-button-hover);
    border-color: var(--farbe-button-hover);
    color: var(--farbe-box-bg);
}

/* Themen-Filter (S75-N2) */
.kim-lehrer-cluster-audit-thema {
    align-items: center;
    display: flex;
    flex-wrap: wrap;
    gap: var(--abstand-xs);
    margin-bottom: var(--abstand-s);
}

.kim-lehrer-cluster-audit-thema label {
    color: var(--farbe-text);
    font-size: var(--fs-klein);
}

.kim-lehrer-cluster-audit-thema-select {
    appearance: auto;
    background-color: var(--farbe-button-sekundaer);
    border: 1px solid var(--farbe-rahmen);
    border-radius: var(--radius-s);
    color: var(--farbe-text);
    cursor: pointer;
    font-family: inherit;
    font-size: var(--fs-klein);
    max-width: 100%;
    padding: var(--abstand-xs) var(--abstand-s);
}

.kim-lehrer-cluster-audit-thema-select:focus-visible {
    outline: 1px solid var(--farbe-link);
}

.kim-lehrer-cluster-audit-block {
    margin-top: var(--abstand-m);
    /* Schmale Viewports: horizontaler Scroll fuer breite Tabellen. */
    overflow-x: auto;
}

.kim-lehrer-cluster-audit-block h4 {
    color: var(--farbe-h4);
    font-size: var(--fs-h4);
    margin: 0 0 var(--abstand-xs) 0;
}

.kim-lehrer-cluster-audit-tabelle {
    width: 100%;
    border-collapse: collapse;
    font-size: var(--fs-klein);
}

.kim-lehrer-cluster-audit-tabelle th,
.kim-lehrer-cluster-audit-tabelle td {
    border: 1px solid var(--farbe-rahmen);
    padding: var(--abstand-xs) var(--abstand-s);
    text-align: left;
    vertical-align: middle;
}

.kim-lehrer-cluster-audit-tabelle th {
    background-color: var(--farbe-button-sekundaer);
    color: var(--farbe-h4);
    font-weight: 600;
}

/* Status-Zellen mit Token-Hintergrund. Vier-Werte-Spiegel zur
   Backend-Status-Logik (gruen/gelb/rot/offen). */
.kim-lehrer-cluster-audit-status {
    text-align: center;
    font-variant-numeric: tabular-nums;
}

.kim-lehrer-cluster-audit-status--gruen {
    background-color: var(--farbe-status-gruen);
}

.kim-lehrer-cluster-audit-status--gelb {
    background-color: var(--farbe-status-gelb);
}

.kim-lehrer-cluster-audit-status--rot {
    background-color: var(--farbe-status-rot);
}

.kim-lehrer-cluster-audit-status--offen {
    background-color: var(--farbe-button-sekundaer);
}


/* ============================================================
   Klassen-/Schuelerverwaltung — lehrer/klassen.html (Session 102)
   ============================================================
   Eigenstaendige Verwaltungsseite (Muster lehrer/betriebe.html).
   Reine additive Frontend-Schicht; Backend unveraendert. Token-
   basiert, keine Verlaeufe, keine Symbole, vertikal platzsparend.
   Die Liste nutzt .kim-lehrer-tabelle weiter (inkl. der Mobile-
   Scroll-Regel im konsolidierten @media-Block). Aktions-Knoepfe je
   Zeile, Code-Zelle mit Restlaufzeit-Countdown, Status-Pillen,
   Roster-Dialog (Schueler je Klasse). Wiederverwendet werden
   .kim-betriebe-aktionen / .kim-betriebe-anzahl / .kim-betriebe-
   warnung / .kim-betriebe-name-hervor / .kim-status-pille.
   ============================================================ */

/* Sektions-Box analog .kim-lehrer-betriebe (eigener Name fuer
   semantische Klarheit; gleiche Token-Werte). */
.kim-lehrer-klassen {
    margin: var(--abstand-l) 0 var(--abstand-m);
    padding: var(--abstand-m);
    background-color: var(--farbe-box-bg);
    border: 1px solid var(--farbe-rahmen);
    border-radius: var(--radius-m);
}

.kim-lehrer-klassen h3 {
    margin: 0 0 var(--abstand-s) 0;
    color: var(--farbe-h1-h3);
    font-size: var(--fs-h3);
}

/* Kopfzeile der Sektion: Titel links, Anlegen-Knopf rechts. */
.kim-klassen-kopf {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: var(--abstand-s);
    margin-bottom: var(--abstand-s);
}

.kim-klassen-kopf h3 {
    margin: 0;
}

/* Status-Pille fuer archivierte Klassen (neutral-grau, kein Rot —
   archiviert ist kein Fehlerzustand). Aktiv nutzt --aktiv (gruen). */
.kim-status-pille--archiv {
    background-color: var(--farbe-button-sekundaer);
    color: var(--farbe-h4);
}

/* Klassencode: dicktengleiche Schrift, gut ablesbar. */
.kim-klassen-code {
    font-family: "Courier New", Courier, monospace;
    font-weight: 700;
    letter-spacing: 0.04em;
}

/* Code-Zelle stapelt Code, Restlaufzeit und Code-Knopf kompakt. */
.kim-klassen-codezelle {
    display: flex;
    flex-direction: column;
    gap: var(--abstand-xs);
    align-items: flex-start;
}

.kim-klassen-restlaufzeit {
    font-size: var(--fs-klein);
    color: var(--farbe-h4);
    font-variant-numeric: tabular-nums;
}

.kim-klassen-restlaufzeit--abgelaufen {
    color: var(--farbe-text);
    font-weight: 700;
}

/* Die beiden Code-Knoepfe (Oeffnen/Schliessen + Vollbild) nebeneinander,
   bei wenig Platz umbrechend. */
.kim-klassen-code-knoepfe {
    display: flex;
    flex-wrap: wrap;
    gap: var(--abstand-xs);
}

/* --- Klassencode-Vollbild-Anzeige (Vorlesen bei der Registrierung) ---
   Natives <dialog> (Konv. §1: Modale nur ueber <dialog>), auf bildschirm-
   fuellend + reinweissen Hintergrund umgestellt. Klick irgendwo schliesst
   (Handler in kim.js), Esc nativ. */
.kim-klassencode-vollbild {
    max-width: none;
    width: 100vw;
    height: 100vh;
    max-height: 100vh;
    margin: 0;
    padding: 0;
    border: 0;
    border-radius: 0;
    background-color: #FFFFFF;   /* explizit reinweiss, unabhaengig vom Box-BG */
    box-shadow: none;
    cursor: pointer;             /* signalisiert: Klick schliesst */
}
.kim-klassencode-vollbild::backdrop {
    background-color: #FFFFFF;
}
.kim-klassencode-vollbild-inner {
    width: 100%;
    height: 100%;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: var(--abstand-l);
    padding: var(--abstand-l);
}
.kim-klassencode-vollbild-klasse {
    font-size: var(--fs-h3);
    color: var(--farbe-h4);
    text-align: center;
    margin: 0;
}
.kim-klassencode-vollbild-code {
    font-family: "Courier New", Courier, monospace;
    font-weight: 700;
    color: var(--farbe-text);    /* dunkel auf weiss, hoher Kontrast zum Vorlesen */
    font-size: clamp(3rem, 17vw, 13rem);
    letter-spacing: 0.1em;
    line-height: 1.05;
    text-align: center;
    word-break: break-word;
    margin: 0;
}
.kim-klassencode-vollbild-hinweis {
    font-size: var(--fs-text);
    color: var(--farbe-h4);
    text-align: center;
    margin: 0;
}

/* Schuelerzahlen dicktengleich (Wiederverwendung von .kim-betriebe-anzahl
   im Markup; eigener Modifier hier nur fuer die kombinierte Zelle). */
.kim-klassen-zahlen {
    font-variant-numeric: tabular-nums;
    white-space: nowrap;
}

/* --- Roster-Dialog: Schueler einer Klasse --- */
.kim-klassen-roster {
    list-style: none;
    margin: var(--abstand-s) 0;
    padding: 0;
    max-height: 50vh;
    overflow-y: auto;
}

.kim-klassen-roster-zeile {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: var(--abstand-s);
    padding: var(--abstand-s) 0;
    border-bottom: 1px solid var(--farbe-rahmen);
}

.kim-klassen-roster-zeile:last-child {
    border-bottom: none;
}

.kim-klassen-roster-info {
    display: flex;
    flex-direction: column;
    min-width: 0;
}

.kim-klassen-roster-name {
    font-weight: 600;
}

.kim-klassen-roster-betrieb {
    font-size: var(--fs-klein);
    color: var(--farbe-h4);
}

.kim-klassen-roster-ops {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--abstand-xs);
}

.kim-klassen-roster-ops select {
    font-size: var(--fs-klein);
    padding: var(--abstand-xs) var(--abstand-s);
}

.kim-klassen-roster-ops .kim-btn-sekundaer,
.kim-klassen-roster-ops .kim-btn-primaer {
    padding: var(--abstand-xs) var(--abstand-s);
    font-size: var(--fs-klein);
}
