/* Schriften selbst gehostet (fonts/, aus @fontsource 5.3.0, Lizenz SIL OFL 1.1 – siehe fonts/LIZENZEN.txt):
   keine Aufrufe zu Google (Datenschutz, CSP font-src nur self). Zeichensatz „latin“ deckt Umlaute, ß und € ab. */
@font-face { font-family: 'Inter'; font-style: normal; font-weight: 300; font-display: swap; src: url('fonts/inter-latin-300-normal.woff2') format('woff2'); }
@font-face { font-family: 'Inter'; font-style: normal; font-weight: 400; font-display: swap; src: url('fonts/inter-latin-400-normal.woff2') format('woff2'); }
@font-face { font-family: 'Inter'; font-style: normal; font-weight: 500; font-display: swap; src: url('fonts/inter-latin-500-normal.woff2') format('woff2'); }
@font-face { font-family: 'Inter'; font-style: normal; font-weight: 600; font-display: swap; src: url('fonts/inter-latin-600-normal.woff2') format('woff2'); }
@font-face { font-family: 'Playfair Display'; font-style: normal; font-weight: 400; font-display: swap; src: url('fonts/playfair-display-latin-400-normal.woff2') format('woff2'); }
@font-face { font-family: 'Playfair Display'; font-style: normal; font-weight: 600; font-display: swap; src: url('fonts/playfair-display-latin-600-normal.woff2') format('woff2'); }
@font-face { font-family: 'Playfair Display'; font-style: normal; font-weight: 700; font-display: swap; src: url('fonts/playfair-display-latin-700-normal.woff2') format('woff2'); }

/* ============================================================
   KLUGE BEAUTY – Design Tokens
   Farbwelt: Sonnenuntergang – warm, leuchtkräftig, atmosphärisch
   Bedienelemente: #009acd · #7ac5cd · #a2cd5a
   Atmosphäre:     #ff8247 · #ff5fa2 · #ffd84d · #fff9f0
   ============================================================ */
:root {
    /* Hintergrund & Oberflächen */
    --kb-bg:              #fff9f0;
    --kb-bg-accent:       #fff0de;
    --kb-surface:         rgba(255, 252, 245, 0.94);
    --kb-surface-soft:    #fff4e8;
    --kb-surface-strong:  #fffaf4;

    /* Text */
    --kb-text-primary:    #2b150a;
    --kb-text-secondary:  #8c5c3a;

    /* Akzent – Sonnenuntergang Orange/Pink */
    --kb-accent:          #ff8247;
    --kb-accent-hover:    #e0662e;
    --kb-accent-light:    #ffeede;
    --kb-accent-strong:   #c44a1a;
    --kb-highlight:       #ff5fa2;
    --kb-warm:            #ffd84d;

    /* Bedienelemente */
    --kb-ctrl-primary:    #009acd;
    --kb-ctrl-primary-hover: #007ba8;
    --kb-ctrl-secondary:  #7ac5cd;
    --kb-ctrl-success:    #a2cd5a;

    /* Rahmen & Sidebar */
    --kb-border-soft:     #f5d8b8;
    --kb-border-grey:     #9ca3af;
    --kb-sidebar-bg:      linear-gradient(180deg, #fff9f0 0%, #ffe8cc 100%);
    --kb-sidebar-border:  #f0c090;
    --kb-sidebar-text:    #3d1808;

    /* Status */
    --kb-success:         #a2cd5a;
    --kb-warning:         #ffd84d;
    --kb-danger:          #ff5fa2;

    /* Radien */
    --kb-radius-card:     18px;
    --kb-radius-button:   999px;
    --kb-radius-input:    14px;

    /* Schatten */
    --kb-shadow-card:     0 4px 18px rgba(180, 80, 20, 0.08);
    --kb-shadow-card-hover: 0 10px 28px rgba(180, 80, 20, 0.15);

    /* Abstände */
    --kb-spacing-section: 2.75rem;
    --kb-spacing-card:    1.5rem;

    /* Typografie */
    --kb-font-display:    'Playfair Display', Georgia, serif;
    --kb-font-body:       'Inter', 'Helvetica Neue', Helvetica, Arial, sans-serif;

    /* Nur für .kb-admin-shell (Verwaltungsoberfläche, s. u.) – bewusst nicht global,
       damit das bereits abgenommene Dashboard/die Community-Oberfläche unangetastet
       bleiben. Begrenzte, großzügige Lesebreite statt auf 27"/34"-Monitoren randlos
       auseinandergezogener Inhalte (unlesbar lange Zeilen, ausgedünnte Formularraster). */
    --kb-content-max-width: 1600px;
}

.kb-list-thumbnail-column {
    width: 60px;
}

.kb-avatar-column {
    width: 56px;
}

.glow-coming-soon-title {
    font-size: 0.98rem;
    margin: 0.55rem 0 0.25rem;
}

.kb-preview-panel {
    position: relative;
}

.content-hub-grid--preview {
    grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
}

/* ============================================================
   Basis
   ============================================================ */
html, body {
    font-family: var(--kb-font-body);
    background: var(--kb-bg);
    color: var(--kb-text-primary);
    font-size: 0.95rem;
    line-height: 1.6;
    -webkit-font-smoothing: antialiased;
}

body {
    min-height: 100vh;
    background-image:
        radial-gradient(ellipse at top,    rgba(255, 212,  77, 0.18) 0%,   transparent 55%),
        radial-gradient(ellipse at center, rgba(255, 130,  71, 0.13) 0%,   transparent 60%),
        radial-gradient(ellipse at bottom, rgba(255,  95, 162, 0.10) 0%,   transparent 55%);
    background-attachment: fixed;
}

/* ============================================================
   Typografie
   ============================================================ */
h1, h2, h3 {
    font-family: var(--kb-font-display);
    font-weight: 700;
    color: var(--kb-text-primary);
    letter-spacing: -0.02em;
}

h1 { font-size: 2.1rem; margin-bottom: 0.35rem; }
h2 { font-size: 1.55rem; }
h3 { font-size: 1.2rem; }
h4, h5, h6 { font-weight: 600; color: var(--kb-text-primary); }

.text-muted {
    color: var(--kb-text-secondary) !important;
}

/* Uppercase Kicker / Labels */
.kb-label {
    font-size: 0.7rem;
    font-weight: 600;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--kb-text-secondary);
}

/* ============================================================
   Links
   ============================================================ */
a, .btn-link {
    color: var(--kb-ctrl-primary);
    text-decoration: none;
    transition: color 0.18s ease;
}
a:hover, .btn-link:hover {
    color: var(--kb-ctrl-primary-hover);
}

/* ============================================================
   Buttons
   ============================================================ */
/* Zentraler Verlauf-Button-Stil: alle "gefüllten" Verlauf-Buttons (Hinzufügen,
   Zurück/Schließen-Navigation, Bearbeiten-Altstil) teilen sich Form/Schatten/
   Hover-Mechanik aus EINER Stelle statt sie mehrfach nahezu textgleich zu
   wiederholen. Nur die Verlauf-/Schattenfarbe unterscheidet sich je Button-
   Rolle, über die --kb-btn-grad-*-Variablen im zweiten Regelblock darunter.
   Neuer Verlauf-Button: Klasse hier in den Selektor aufnehmen + eigenen
   --kb-btn-grad-*-Block definieren, statt die Formregeln zu kopieren. Der
   Rahmen ist bewusst weiß statt grau – hebt sich klarer vom Verlauf ab als
   ein neutraler Grauton, einheitlich über alle Button-Rollen hinweg, statt
   je Verlauf einen eigenen dunkleren Farbton zu führen.
   Speichern/Abbrechen NICHT hier: die gelten als "Arbeitsknöpfe" (interne
   Formular-Aktionen) und nutzen stattdessen den zurückhaltenderen
   .kb-action-btn-Stil weiter unten, siehe KbSaveButton.razor. */
.btn-primary,
.btn-secondary,
.btn-outline-primary,
.kb-action-btn--add {
    background: linear-gradient(135deg, var(--kb-btn-grad-from) 0%, var(--kb-btn-grad-to) 100%);
    border: 1px solid #fff;
    color: #fff;
    border-radius: var(--kb-radius-button);
    font-weight: 600;
    letter-spacing: 0.02em;
    padding: 0.55rem 1.35rem;
    box-shadow: 0 10px 20px var(--kb-btn-grad-shadow);
    transition: transform 0.18s ease, box-shadow 0.18s ease, filter 0.18s ease;
}
.btn-primary:hover, .btn-primary:focus,
.btn-secondary:hover, .btn-secondary:focus,
.btn-outline-primary:hover, .btn-outline-primary:focus,
.kb-action-btn--add:hover, .kb-action-btn--add:focus {
    filter: brightness(1.06);
    transform: translateY(-1px);
    box-shadow: 0 14px 28px var(--kb-btn-grad-shadow-hover);
    color: #fff;
}
.btn-primary:active,
.btn-secondary:active,
.btn-outline-primary:active,
.kb-action-btn--add:active {
    transform: translateY(0);
}
.btn-primary:disabled,
.btn-secondary:disabled,
.btn-outline-primary:disabled,
.kb-action-btn--add:disabled {
    background: var(--kb-border-soft);
    border-color: var(--kb-border-soft);
    color: var(--kb-text-secondary);
    box-shadow: none;
    filter: none;
    transform: none;
}

/* Farbrolle je Button-Typ – einzige Stelle, die für einen neuen Verlauf-Button
   angepasst werden muss (Form/Rahmen/Hover/Disabled kommen aus dem Block oben). */
.btn-primary,
.btn-secondary,
.btn-outline-primary,
.kb-action-btn--add {
    --kb-btn-grad-from: var(--kb-warm);
    --kb-btn-grad-to: var(--kb-accent);
    --kb-btn-grad-shadow: rgba(255, 130, 71, 0.28);
    --kb-btn-grad-shadow-hover: rgba(255, 130, 71, 0.36);
}

.btn-outline-danger {
    border-radius: var(--kb-radius-button);
    font-weight: 500;
}

.btn-sm { font-size: 0.8rem; padding: 0.3rem 0.85rem; }

/* ============================================================
   Aktions-Buttons für editierbare Listen (Vorschlag, zunächst nur auf
   Kategorien) – zentraler, konsistenter Stil für Hinzufügen/Bearbeiten/
   Aktivieren/Deaktivieren/CSV-Import/-Export: pro Aktionstyp eine feste
   Icon+Text-Kombination und eine eigene, klar unterscheidbare Farbe.
   Bewusst als NEUE, additive Klassen statt die bestehenden .btn-outline-*-
   Overrides zu ändern – so bleibt der Vorschlag auf dieser einen Seite
   isoliert testbar, ohne alle anderen Listen sofort mitzuändern.

   Begründung (CLAUDE.md §5 – research-basiert):
   - Icon + Text statt Icon-only: "Icon Usability" (Nielsen Norman Group) –
     reine Icon-Buttons sind für seltene/uneindeutige Aktionen schwer
     erkennbar, Text eliminiert die Mehrdeutigkeit vollständig.
   - Eine Farbe pro Aktionstyp, konsistent über alle Zeilen/Seiten hinweg:
     Fitts's Law (vorhersagbare Zielposition/-erscheinung beschleunigt
     wiederholte Interaktion) plus Material Design's Rollenfarben-Prinzip
     (destruktiv/warnend/bestätigend/neutral werden nie verwechselt).
   - "Bearbeiten" bewusst NICHT wie "Hinzufügen" eingefärbt (aktuell beide
     .btn-outline-primary → identisch zum Primary-Verlauf, siehe oben):
     pro Ansicht soll nur die primäre CTA (Hinzufügen) as such hervorstechen,
     alle Zeilen-Aktionen bleiben zurückhaltender (Material Design:
     "emphasis hierarchy" – nicht jede Aktion kann gleich betont sein).
   ============================================================ */
/* Keine eckigen Knöpfe (verbindliche Regel, CLAUDE.md §4): Jeder Bootstrap-Knopf in jeder Größe bekommt den
   Pill-Radius – auch Varianten ohne eigene Regel (btn-outline-secondary, btn-danger, btn-link …). Eigene Knopf-Stile
   nutzen ebenfalls var(--kb-radius-button); runde Symbolknöpfe (gleiche Breite und Höhe) ergeben so einen Kreis.
   ButtonShapeTests prüft beides. */
.btn, .btn-sm, .btn-lg {
    --bs-btn-border-radius: var(--kb-radius-button);
    border-radius: var(--kb-radius-button);
}

.kb-action-btn {
    display: inline-flex;
    align-items: center;
    gap: 0.35rem;
    border-radius: var(--kb-radius-button);
    font-weight: 600;
    white-space: nowrap;
}
.kb-action-btn .bi { font-size: 0.95em; }

/* .kb-action-btn--add: Farbe/Verlauf/Rahmen/Schatten kommen jetzt aus dem
   zentralen Verlauf-Button-Stil weiter oben (siehe "Zentraler Verlauf-Button-
   Stil"); hier nur noch Layout-Klasse .kb-action-btn (s.o.) plus diese
   Farbrolle nötig – kein eigener Regelblock mehr. */

/* Arbeitsknöpfe (Bearbeiten/Aktivieren/Deaktivieren/Speichern/Abbrechen):
   Hintergrund im Ruhezustand ist bewusst ein ganz sanfter Ton der jeweiligen
   Schriftfarbe (nicht mehr komplett transparent) – macht die Fläche des
   Buttons schon vor dem Hover sichtbar/greifbar, bleibt aber deutlich
   zurückhaltender als die knalligen Funktionsknöpfe. Hover vertieft denselben
   Farbton weiter, statt auf eine andere Nuance zu wechseln. */
/* --import und --export teilen sich den Regelblock mit --edit (identisches
   "Arbeitsknopf"-Layout, blau): CSV-Import/Vorlagen-Download sind wie Bearbeiten/Speichern
   eine interne Formular-/Listen-Aktion, die etwas öffnet/ausführt - keine Funktionsknopf-Farbe
   (Orange) nötig, dieselbe blaue Rolle wie jede andere "öffnet/führt aus"-Aktion. */
.kb-action-btn--edit,
.kb-action-btn--import,
.kb-action-btn--export {
    background: rgba(0, 154, 205, 0.08);
    border: 1px solid rgba(0, 154, 205, 0.35);
    color: var(--kb-ctrl-primary);
}
.kb-action-btn--edit:hover,
.kb-action-btn--import:hover,
.kb-action-btn--export:hover {
    background: rgba(0, 154, 205, 0.18);
    border-color: var(--kb-ctrl-primary);
    color: var(--kb-ctrl-primary-hover);
}

/* --save teilt sich den Regelblock mit --activate (identisches "Arbeitsknopf"-
   Layout wie Bearbeiten, nur grün statt blau): Speichern ist inhaltlich eine
   bestätigende Aktion wie Aktivieren, daher dieselbe Farbe/Form statt eines
   eigenen Grün-Tons. */
.kb-action-btn--activate,
.kb-action-btn--save {
    background: rgba(74, 122, 26, 0.08);
    border: 1px solid rgba(162, 205, 90, 0.45);
    color: #4a7a1a; /* gleicher lesbarer Grünton wie .kb-status-pill--success */
}
.kb-action-btn--activate:hover,
.kb-action-btn--save:hover {
    background: rgba(74, 122, 26, 0.2);
    border-color: #4a7a1a;
}

/* --cancel teilt sich den Regelblock mit --deactivate (identisches
   "Arbeitsknopf"-Layout wie Deaktivieren): Abbrechen ist wie Deaktivieren eine
   zurückhaltende "Nicht fortfahren"-Aktion. */
.kb-action-btn--deactivate,
.kb-action-btn--cancel {
    background: rgba(128, 95, 0, 0.08);
    border: 1px solid rgba(255, 216, 77, 0.5);
    color: #805f00; /* gleicher lesbarer Gelbton wie .kb-status-pill--warning */
}
.kb-action-btn--deactivate:hover,
.kb-action-btn--cancel:hover {
    background: rgba(128, 95, 0, 0.2);
    border-color: #805f00;
}

/* --remove: eigene "Entfernen"-Rolle für unwiderrufliches Löschen (z. B. eine Set-Position), getrennt von
   --deactivate/amber (reversibel). Bewusst gedämpft statt rot: In einer Tabelle stünde sonst in jeder Zeile ein
   roter Knopf und zöge den Blick von den Daten ab. Erkennbar bleibt die Rolle am Mülleimer-Symbol und am Text;
   Rot erscheint erst im Bestätigungsdialog, wo die Entscheidung fällt (KbConfirmDialog, btn-danger) – so warnt
   die Farbe genau einmal an der richtigen Stelle (Refactoring UI „Destructive actions“; NN/g „Confirmation
   Dialogs“). */
.kb-action-btn--remove {
    background: transparent;
    border: 1px solid var(--kb-border-grey);
    color: var(--kb-text-secondary);
}
.kb-action-btn--remove:hover {
    background: rgba(140, 92, 58, 0.10);
    border-color: var(--kb-text-secondary);
}

/* Deaktiviert überschreibt bewusst die Farbrolle (--save/--import/...) komplett auf ein
   neutrales Grau statt sie nur per opacity abzudunkeln: eine grün/blau/amber-Fläche bei 50%
   Deckkraft sieht noch immer nach ihrer Farbe aus und wirkt eher "blass aktiv" als eindeutig
   "gerade nicht bedienbar". Reihenfolge in der Datei sorgt für den Vorrang (gleiche
   Selektor-Spezifität, diese Regel steht nach den Farbrollen-Regeln oben). */
.kb-action-btn:disabled,
.kb-action-btn:disabled:hover {
    background: rgba(156, 163, 175, 0.15);
    border-color: rgba(156, 163, 175, 0.4);
    color: var(--kb-border-grey);
    opacity: 1;
    filter: none;
    transform: none;
    cursor: not-allowed;
}

/* Icon-only-Variante für die beiden Seiten-Aktionen (Hinzufügen/CSV-Import) im Listen-Header -
   Zeilen-Aktionen (Bearbeiten/Aktivieren/Deaktivieren) bleiben Icon+Text, siehe app.css-Kommentar
   oben. Tooltip (title) + aria-label sind hier Pflicht, nicht optional, um den Verzicht auf
   sichtbaren Text auszugleichen (NN/g "Icon Usability"). */
.kb-action-btn--icon-only {
    width: 2.5rem;
    height: 2.5rem;
    padding: 0;
    justify-content: center;
}
.kb-action-btn--icon-only .bi { font-size: 1.1em; }

/* Symbolknöpfe ohne Text in Tabellenzeilen (KbRowActionButton: Bearbeiten, Aktivieren,
   Deaktivieren, Löschen): feste, gleiche Größe als Kreis (Radius 999px bei gleicher Breite/Höhe),
   unabhängig von der Symbolgröße – alle Knöpfe einer Zeile sind gleich groß und gleichmäßig rund. */
.kb-action-btn--row-icon {
    width: 2rem;
    height: 2rem;
    padding: 0;
    justify-content: center;
}
.kb-action-btn--row-icon .bi { font-size: 1.15em; line-height: 1; }
/* Das Pause-Symbol (Deaktivieren) wirkt bei gleicher Schriftgröße kleiner als Stift/Häkchen/
   Mülleimer – daher etwas größer; die feste Knopfgröße oben bleibt davon unberührt. */
.kb-action-btn--row-icon .bi-pause-circle { font-size: 1.35em; }
/* Rand in der Symbolfarbe wie bei Bearbeiten/Löschen (~35 % Deckkraft der Symbolfarbe) – statt
   des hellgelben bzw. hellgrünen Rands von --deactivate/--activate, der als Symbolknopf farblich
   abwich. Nur für die runden Zeilenknöpfe; Speichern/Abbrechen in Dialogen bleiben unverändert. */
.kb-action-btn--row-icon.kb-action-btn--deactivate { border-color: rgba(128, 95, 0, 0.35); }
.kb-action-btn--row-icon.kb-action-btn--deactivate:hover { border-color: #805f00; }
.kb-action-btn--row-icon.kb-action-btn--activate { border-color: rgba(74, 122, 26, 0.35); }
.kb-action-btn--row-icon.kb-action-btn--activate:hover { border-color: #4a7a1a; }

/* Einladen: runder, gefüllter orangefarbener Symbolknopf – die Aktion, die im Zugang als Nächstes ansteht, soll
   herausstechen (Material Design „emphasis hierarchy“). Dunkleres Orange, damit das weiße Symbol mindestens
   3:1 Kontrast hat (WCAG 1.4.11 Nicht-Text-Kontrast). */
.kb-action-btn--invite {
    background: var(--kb-accent-hover);
    border: 1px solid var(--kb-accent-hover);
    color: #fff;
}
.kb-action-btn--invite:hover,
.kb-action-btn--invite:focus-visible {
    background: var(--kb-accent-strong);
    border-color: var(--kb-accent-strong);
    color: #fff;
}

/* Horizontales/oberes Padding kommt bewusst NICHT mehr von hier, sondern vom
   Karten-Padding des umgebenden KbSectionCard-Bodys (der gesamte Karteninhalt -
   Titel, Listen-Header, Tabelle - soll gleichmäßig eingerückt sein statt nur die
   Tabelle) - nur der Abstand zur Tabelle darunter bleibt hier zentral geregelt. */
.kb-list-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    padding: 0 0 1rem;
    border-bottom: 1px solid var(--kb-border-soft);
}
/* Trägt eine KbSectionCard zusätzlich Titel+Icon (z. B. Farben/Düfte), reicht der
   Titel-eigene margin-bottom (.kb-journey-title, 0.65rem) allein nicht als Abstand zur
   Suchmaske - hier zentral über den Geschwister-Selektor ergänzt statt an jeder
   Verwendungsstelle einzeln nachzujustieren. Betrifft automatisch jede künftige Liste mit
   Titel+Icon, nicht die (häufigeren) Listen ohne Titel wie Categories/Collections. */
.kb-card-heading + .kb-list-header {
    margin-top: 0.75rem;
}
.kb-list-header-title {
    font-weight: 600;
    color: var(--kb-text-primary);
}
.kb-list-header-actions {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    margin-left: auto;
}
/* KbSearchBar bringt für den Normalfall (freistehend über einer Tabelle) ein
   mb-3 mit; im Listen-Header sitzt sie in derselben Flex-Zeile wie die
   Icon-Buttons – der Abstand nach unten würde ihre Margin-Box höher als die
   Buttons machen und sie dadurch trotz align-items:center optisch nach oben
   verschieben. Hier gezielt aufgehoben, ohne die anderen KbSearchBar-Stellen
   (Products/Sellers/Customers, freistehend) zu beeinflussen. */
.kb-list-header .kb-search-bar {
    margin-bottom: 0;
}

/* Zentraler Button-Style für kleine CTA-Links in Dashboard-Kacheln (z.B. "Alle Rankings ansehen").
   Einzige Quelle für den Orange-Verlauf-Look dieser Kachel-CTAs – neue Kacheln binden ihn per
   class="kb-cta-btn" ein, statt die Optik erneut zu deklarieren. Rahmen weiß statt grau, analog
   zum großen Verlauf-Button-Stil weiter oben (.btn-primary etc.) – hebt sich klarer vom Verlauf ab. */
.kb-cta-btn {
    display: inline-block;
    background: linear-gradient(135deg, var(--kb-warm) 0%, var(--kb-accent) 100%);
    border: 1px solid #fff;
    color: #fff;
    font-size: 0.82rem;
    font-weight: 700;
    text-decoration: none;
    padding: 0.4rem 0.95rem;
    border-radius: var(--kb-radius-button);
    box-shadow: 0 6px 14px rgba(0, 0, 0, 0.22);
    transition: transform 0.18s ease, box-shadow 0.18s ease, filter 0.18s ease;
}
.kb-cta-btn:hover {
    filter: brightness(1.06);
    transform: translateY(-1px);
    box-shadow: 0 10px 20px rgba(0, 0, 0, 0.28);
    color: #fff;
}

.kb-card-heading {
    display: flex;
    align-items: center;
    gap: 0.75rem;
}

.kb-card-heading .kb-card-icon {
    margin-bottom: 0;
}

.kb-quick-access-card .kb-card-body {
    position: relative;
    min-height: 3.25rem;
    padding: 0.7rem 6.75rem 0.7rem 4rem;
}

.kb-quick-access-card .kb-card-heading {
    display: block;
}

.kb-quick-access-card .kb-journey-title {
    margin-bottom: 0;
}

.kb-quick-access-card .kb-card-icon {
    position: absolute;
    top: 50%;
    left: 1.15rem;
    transform: translateY(-50%);
}

.kb-quick-access-card .kb-card-description {
    margin: 0.35rem 0 0;
    font-size: 0.82rem;
    line-height: 1.35;
}

.kb-quick-access-button {
    position: absolute;
    top: 50%;
    right: 1.15rem;
    transform: translateY(-50%);
}

.kb-dashboard-card-column > .glow-hero {
    flex: 1;
    width: 100%;
    height: auto;
    margin-bottom: 0;
}

.kb-dashboard-card-column > .kb-journey-card {
    width: 100%;
}

.kb-event-countdown-card .kb-card-body {
    position: relative;
}

.kb-event-countdown-toggle {
    position: absolute;
    right: 1.15rem;
    bottom: 1rem;
}

.kb-today-focus .kb-card-body {
    position: relative;
}

.kb-daily-impulse-customers-button {
    position: absolute;
    top: 1rem;
    right: 1rem;
}


.kb-dashboard-focus-heading {
    display: flex;
    align-items: baseline;
    flex-wrap: wrap;
    gap: 0.5rem 1rem;
    margin-bottom: 0.5rem;
}

.kb-dashboard-focus-heading h1,
.kb-dashboard-focus-heading h2 {
    margin: 0;
}

.kb-dashboard-focus-heading h1 {
    font-size: 1.6rem;
}

.kb-dashboard-focus-heading h2 {
    font-size: 1.2rem;
}

.btn:focus, .btn:active:focus, .btn-link.nav-link:focus,
.form-control:focus, .form-check-input:focus {
    box-shadow: 0 0 0 0.15rem rgba(0, 154, 205, 0.28);
    outline: none;
}

/* ============================================================
   Karten
   ============================================================ */
.kb-card {
    background: var(--kb-surface-strong);
    border: 1px solid var(--kb-border-soft);
    border-radius: var(--kb-radius-card);
    box-shadow: var(--kb-shadow-card);
}

.kb-card-body {
    padding: var(--kb-spacing-card);
}

.kb-journey-card {
    height: 100%;
    transition: transform 0.18s ease, box-shadow 0.18s ease;
}

.kb-journey-card:hover {
    transform: translateY(-2px);
    box-shadow: var(--kb-shadow-card-hover);
}

.kb-journey-card--active {
    border-color: rgba(255, 130, 71, 0.34);
    background: rgba(255, 130, 71, 0.05);
}

.kb-journey-card--done {
    border-color: rgba(162, 205, 90, 0.42);
    background: rgba(162, 205, 90, 0.06);
}

.kb-journey-card--planned {
    background: var(--kb-surface-strong);
}

.kb-journey-card--preview {
    background: rgba(255, 252, 245, 0.82);
    border-color: rgba(255, 130, 71, 0.24);
}

/* Heute im Fokus – bewusst einzige Karte mit diesem Look auf der Heute-Seite (Von-Restorff-Effekt).
   Kein Verlauf (das ist die Optik des Hero direkt darüber) – stattdessen flache Fläche + kräftiger
   Akzentstreifen, damit die Karte sich von Hero UND allen anderen Karten abhebt. */
.kb-focus-card {
    border: 1px solid var(--kb-border-soft);
    border-left: 6px solid var(--kb-accent);
    background: var(--kb-accent-light);
    box-shadow: 0 8px 26px rgba(180, 80, 20, 0.12);
}

.kb-focus-card .kb-card-icon {
    font-size: 2.1rem;
}

.kb-journey-status {
    margin-bottom: 0.5rem;
    font-size: 0.68rem;
    font-weight: 700;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--kb-text-secondary);
}

.kb-journey-title {
    margin: 0 0 0.65rem;
    font-size: 1.1rem;
}

.kb-card-icon {
    margin-bottom: 0.8rem;
    font-size: 1.75rem;
    line-height: 1;
}

.kb-card-description {
    margin: 0 0 1rem;
    color: var(--kb-text-secondary);
    font-size: 0.9rem;
    line-height: 1.55;
}

.card {
    background-color: var(--kb-surface);
    border: 1px solid var(--kb-border-soft);
    border-radius: var(--kb-radius-card);
    box-shadow: var(--kb-shadow-card);
    transition: box-shadow 0.18s ease, transform 0.18s ease, border-color 0.18s ease;
}
.card:hover {
    box-shadow: var(--kb-shadow-card-hover);
    transform: translateY(-2px);
    border-color: rgba(255, 130, 71, 0.28);
}
.card-header {
    background: linear-gradient(180deg, rgba(255, 255, 255, 0.92) 0%, var(--kb-surface-soft) 100%);
    border-bottom: 1px solid var(--kb-border-soft);
    border-radius: var(--kb-radius-card) var(--kb-radius-card) 0 0 !important;
    font-weight: 600;
    color: var(--kb-text-primary);
    padding: 0.9rem var(--kb-spacing-card);
}
.card-body {
    padding: var(--kb-spacing-card);
}
.card-subtitle {
    font-size: 0.75rem;
    font-weight: 600;
    letter-spacing: 0.07em;
    text-transform: uppercase;
    color: var(--kb-text-secondary) !important;
}

/* ============================================================
   Tabellen
   ============================================================ */
.table {
    color: var(--kb-text-primary);
    border-color: var(--kb-border-soft);
}
.table thead th {
    font-size: 0.72rem;
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--kb-text-secondary);
    border-bottom: 2px solid var(--kb-border-soft);
    padding: 0.85rem 0.75rem;
    background-color: var(--kb-surface);
}
.table tbody td {
    padding: 0.85rem 0.75rem;
    vertical-align: middle;
    border-color: var(--kb-border-soft);
}
.table-hover > tbody > tr:hover > * {
    background-color: #fff3e0;
    color: var(--kb-text-primary);
}
.table-light {
    --bs-table-bg: var(--kb-surface-soft);
    --bs-table-border-color: var(--kb-border-soft);
}

/* ============================================================
   Badges / Status
   ============================================================ */
.badge {
    border-radius: 6px;
    font-weight: 500;
    font-size: 0.7rem;
    letter-spacing: 0.04em;
    padding: 0.3em 0.7em;
}
.bg-success { background-color: var(--kb-success) !important; }
.bg-warning  { background-color: var(--kb-warning) !important; color: #fff !important; }
.bg-danger   { background-color: var(--kb-danger) !important; }
.bg-info     { background-color: var(--kb-surface-soft) !important; color: var(--kb-text-primary) !important; border: 1px solid var(--kb-border-soft); }
.bg-secondary { background-color: var(--kb-border-soft) !important; color: var(--kb-text-secondary) !important; }
.text-dark { color: var(--kb-text-primary) !important; }

/* ============================================================
   Formulare
   ============================================================ */
.form-label {
    font-size: 0.8rem;
    font-weight: 600;
    letter-spacing: 0.03em;
    color: var(--kb-text-primary);
    margin-bottom: 0.3rem;
}
.form-control, .form-select {
    background-color: rgba(255, 255, 255, 0.9);
    border: 1px solid var(--kb-border-soft);
    border-radius: var(--kb-radius-input);
    color: var(--kb-text-primary);
    padding: 0.55rem 0.9rem;
    font-size: 0.9rem;
    transition: border-color 0.15s ease, box-shadow 0.15s ease;
}
.form-control:focus, .form-select:focus {
    border-color: var(--kb-ctrl-primary);
    box-shadow: 0 0 0 0.15rem rgba(0, 154, 205, 0.20);
    background-color: var(--kb-surface);
}
.form-control::placeholder {
    color: var(--kb-text-secondary);
    opacity: 0.7;
}
.form-check-input:checked {
    background-color: var(--kb-ctrl-primary);
    border-color: var(--kb-ctrl-primary);
}

/* ============================================================
   Alerts
   ============================================================ */
.alert-danger {
    background-color: #fdf2f2;
    border-color: #f5d0cc;
    color: var(--kb-danger);
    border-radius: var(--kb-radius-card);
}
.alert-success {
    background-color: #f2faf5;
    border-color: #c8e6d0;
    color: var(--kb-success);
    border-radius: var(--kb-radius-card);
}

/* Fehlerzusammenfassung eines Formulars (KbErrorSummary): gleiche Fehlerfarben wie .alert-danger, links eine kräftige
   Kante als Blickfang (GOV.UK „Error summary“); Links zum jeweiligen Feld. */
.kb-error-summary {
    background-color: #fdf2f2;
    border: 1px solid #f5d0cc;
    border-left: 4px solid var(--kb-danger);
    border-radius: var(--kb-radius-card);
    padding: 0.75rem 1rem;
    margin-bottom: 1rem;
}
.kb-error-summary:focus { outline: 2px solid var(--kb-danger); outline-offset: 2px; }
.kb-error-summary-title { font-size: 1rem; font-weight: 600; color: var(--kb-text-primary); margin: 0 0 0.35rem; }
.kb-error-summary-list { margin: 0; padding-left: 1.1rem; }
.kb-error-summary-list a { color: var(--kb-danger); text-decoration: underline; }

/* ============================================================
   Validierung
   ============================================================ */
.valid.modified:not([type=checkbox]) {
    outline: 2px solid var(--kb-success);
    outline-offset: 1px;
}
.invalid {
    outline: 2px solid var(--kb-danger);
    outline-offset: 1px;
}
.validation-message {
    color: var(--kb-danger);
    font-size: 0.8rem;
    margin-top: 0.25rem;
}

/* ============================================================
   Inhalt
   ============================================================ */
.content {
    padding-top: 1.75rem;
}

.kb-page-intro {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-start;
    justify-content: space-between;
    gap: 1.25rem;
    margin-bottom: 2.5rem;
}

.kb-page-intro-copy {
    max-width: 48rem;
}

.kb-page-intro-copy p {
    margin-bottom: 0;
    color: var(--kb-text-secondary);
    font-size: 0.98rem;
    line-height: 1.65;
}

.kb-eyebrow {
    display: inline-flex;
    align-items: center;
    gap: 0.45rem;
    padding: 0.35rem 0.75rem;
    margin-bottom: 0.9rem;
    border-radius: 999px;
    background: rgba(255, 130, 71, 0.10);
    color: var(--kb-accent-strong);
    font-size: 0.72rem;
    font-weight: 700;
    letter-spacing: 0.1em;
    text-transform: uppercase;
}

.kb-eyebrow::before {
    content: "";
    width: 0.5rem;
    height: 0.5rem;
    border-radius: 50%;
    background: linear-gradient(135deg, var(--kb-warm) 0%, var(--kb-accent) 50%, var(--kb-highlight) 100%);
    box-shadow: 0 0 0 4px rgba(255, 130, 71, 0.14);
}

.kb-section-card {
    background: linear-gradient(160deg, rgba(255, 252, 245, 0.96) 0%, rgba(255, 238, 210, 0.92) 100%);
    border: 1px solid rgba(255, 130, 71, 0.12);
}

.kb-stat-value {
    font-size: 2rem;
    font-weight: 700;
    line-height: 1;
    color: var(--kb-text-primary);
}

.kb-stat-caption {
    margin-top: 0.5rem;
    color: var(--kb-text-secondary);
    font-size: 0.85rem;
}

.kb-page-shell {
    display: flex;
    flex-direction: column;
    gap: 1.5rem;
}

/* Opt-in für die Verwaltungsoberfläche (Produkte/Discovery/Übersetzungen/Abonnements/…,
   siehe kb-admin-shell weiter unten) – bewusst NICHT auf .kb-page-shell selbst, damit das
   bereits von der Kundin abgenommene Dashboard ("Heute"-Startseite) und die übrige
   Community-/Coaching-Oberfläche unverändert bleiben, die dieselbe Klasse nutzen. */
.kb-admin-shell {
    width: 100%;
    max-width: var(--kb-content-max-width);
    margin-inline: auto;
}

/* Tabellenzeilen bleiben auch bei viel Weißraum auf großen Bildschirmen scannbar –
   nur innerhalb .kb-admin-shell, betrifft also nur die Verwaltungsoberfläche. */
.kb-admin-shell .table > tbody > tr:hover > * {
    background-color: var(--kb-surface-soft);
}

/* Lange Listen bekommen einen begrenzten, eigenen Scroll-Bereich mit fixiertem
   Tabellenkopf, statt die ganze Seite endlos nach unten zu ziehen – Filter/Aktionen
   oberhalb bleiben sichtbar, ohne dass Admin selbst hochscrollen muss. Sowohl
   .kb-table-wrap (älterer Seiten-Konvention) als auch Bootstraps .table-responsive
   (neuere Seiten) werden abgedeckt – beide sind bereits auf jeder Listen-Tabelle im
   Einsatz, hier also ohne Markup-Änderung je Seite. Kurze Tabellen bleiben unverändert:
   max-height greift nur, wenn der Inhalt sie tatsächlich überschreitet. */
.kb-admin-shell .kb-table-wrap,
.kb-admin-shell .table-responsive {
    max-height: min(65vh, 760px);
    overflow-y: auto;
}

.kb-admin-shell .kb-table-wrap thead th,
.kb-admin-shell .table-responsive thead th {
    position: sticky;
    top: 0;
    z-index: 1;
    background-color: var(--kb-surface-strong);
    box-shadow: 0 1px 0 var(--kb-border-soft);
}

/* Zwei gleichwertige, unabhängige Abschnitte (z. B. Export/Import, Plan-Verwaltung/
   Neuanlage) nebeneinander statt gestapelt, sobald genug Breite vorhanden ist – nutzt
   den auf großen Bildschirmen zusätzlich verfügbaren Platz aktiv statt ihn ungenutzt
   zu lassen. Fällt unterhalb von ~900px automatisch auf eine Spalte zurück. */
.kb-admin-grid-2 {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(420px, 1fr));
    gap: 1.5rem;
    align-items: start;
}

/* Mehrzeiliger Freitext in einer Tabellenzelle (z. B. Beschreibung aus einem Textfeld):
   Zeilenumbrüche der Eingabe bleiben erhalten, lange Zeilen brechen um; die Mindestbreite
   verhindert, dass die Spalte neben kurzen Nachbarspalten zu einem schmalen Streifen wird. */
.kb-cell-multiline {
    white-space: pre-line;
    min-width: 14rem;
}

/* Reihenfolge per Ziehen (Griff) oder ▲/▼ in Tabellenzeilen (z. B. Varianten eines Produkts).
   Die Linie zeigt beim Ziehen, wo die Zeile landet (NN/g "Drag-and-Drop": Vorschau der Zielposition). */
.kb-drag-handle {
    cursor: grab;
    color: var(--kb-text-secondary);
    padding: 0 0.25rem;
}

.kb-drag-handle:active {
    cursor: grabbing;
}

.kb-order-btn {
    padding: 0 0.3rem;
    line-height: 1.2;
    color: var(--kb-text-secondary);
}

.kb-order-btn:disabled {
    visibility: hidden;
}

tr.kb-drop-before > td {
    box-shadow: inset 0 3px 0 var(--kb-accent);
}

tr.kb-drop-after > td {
    box-shadow: inset 0 -3px 0 var(--kb-accent);
}

/* Einrückung je Ebene in Baumtabellen (KbTreeTable setzt --kb-tree-depth an jeder Zeile). Alles, was
   zu einer Zeile gehört – Knöpfe, Bild, Farbpunkt und Name – rückt gemeinsam ein, damit die Ebene auch
   in den Spalten vor dem Namen sichtbar ist (NN/g „Tree Views“: Einrückung zeigt die Hierarchie). */
.kb-tree-indent {
    padding-left: calc(var(--kb-tree-depth, 0) * 1.5rem);
}

.kb-page-actions {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.75rem;
}

.kb-page-intro-progress {
    min-width: min(100%, 18rem);
}

.kb-section-heading {
    display: flex;
    align-items: end;
    justify-content: space-between;
    gap: 1rem;
    margin: 2.5rem 0 1rem;
}

.kb-section-heading h2 {
    margin: 0.2rem 0 0;
    font-size: 1.35rem;
}

.kb-surface-panel {
    padding: 1.25rem;
    border-radius: 1.25rem;
    background: #fff8f0;
    border: 1px solid rgba(255, 130, 71, 0.10);
    box-shadow: 0 4px 16px rgba(180, 80, 20, 0.05);
}

.kb-today-focus {
    background: linear-gradient(140deg, rgba(255, 252, 245, 0.98) 0%, rgba(255, 238, 210, 0.92) 100%);
}

.kb-today-focus h2 {
    font-size: clamp(1.6rem, 3vw, 2rem);
}

.kb-today-focus p {
    max-width: 38rem;
    font-size: 1rem;
    line-height: 1.65;
}

.kb-surface-panel-muted {
    background: rgba(255, 255, 255, 0.62);
}

.kb-filter-row {
    display: flex;
    flex-wrap: wrap;
    align-items: end;
    gap: 1rem;
}

.kb-filter-field {
    min-width: 220px;
}

.kb-data-card {
    overflow: hidden;
}

.kb-table-wrap {
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
}

.kb-table-wrap .table {
    margin-bottom: 0;
}

/* Opt-in (zusätzlich zu .table-sm) für Listen mit besonders vielen Zeilen auf wenig Raum, z. B.
   die Variantenliste im Produkt-Bearbeiten-Dialog - kleinere Schrift und engere Zeilenhöhe als
   .table-sm allein (0.25rem Zellpadding) bietet. */
.kb-table-dense {
    font-size: 0.8125rem;
}
.kb-table-dense > :not(caption) > * > * {
    padding: 0.15rem 0.4rem;
}

.kb-empty-state {
    display: flex;
    align-items: flex-start;
    gap: 0.85rem;
    padding: 1.35rem 1.5rem;
    border-radius: 1.1rem;
    background: rgba(255, 252, 245, 0.80);
    border: 1px dashed rgba(255, 130, 71, 0.22);
    color: var(--kb-text-secondary);
}

.kb-empty-state-icon {
    font-size: 1.5rem;
    line-height: 1;
}

.kb-empty-state-title {
    margin: 0 0 0.3rem;
    font-size: 1rem;
    color: var(--kb-text-primary);
}

/* Knopf für den nächsten Schritt im Leerzustand (KbEmptyState/KbNoResults). */
.kb-empty-state-action { margin-top: 0.75rem; }
.kb-empty-state-action .bi { margin-right: 0.35rem; }

.kb-empty-state-description {
    margin: 0;
}

.kb-detail-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
    gap: 1rem;
}

.kb-detail-item {
    padding: 1rem;
    border-radius: 1rem;
    background: rgba(255, 252, 245, 0.78);
    border: 1px solid rgba(255, 130, 71, 0.10);
}

.kb-detail-item strong {
    display: block;
    margin-bottom: 0.3rem;
}

.kb-status-pill {
    display: inline-flex;
    align-items: center;
    padding: 0.25rem 0.65rem;
    border: 1px solid transparent;
    border-radius: 999px;
    font-size: 0.72rem;
    font-weight: 700;
    line-height: 1.2;
}

.kb-status-pill--success { background: rgba(162, 205, 90, 0.16); border-color: rgba(162, 205, 90, 0.32); color: #4a7a1a; }
.kb-status-pill--warning { background: rgba(255, 216, 77, 0.18); border-color: rgba(255, 216, 77, 0.35); color: #805f00; }
.kb-status-pill--error { background: rgba(255, 95, 162, 0.12); border-color: rgba(255, 95, 162, 0.24); color: var(--kb-danger); }
.kb-status-pill--info { background: rgba(0, 154, 205, 0.10); border-color: rgba(0, 154, 205, 0.22); color: var(--kb-ctrl-primary); }
.kb-status-pill--neutral { background: rgba(180, 80, 20, 0.07); border-color: var(--kb-border-soft); color: var(--kb-text-secondary); }

.kb-clickable-row {
    cursor: pointer;
}

.kb-clickable-row:hover > * {
    background-color: #fff3e0 !important;
}

.kb-clickable-row {
    cursor: pointer;
}

.kb-list-thumbnail {
    width: 48px;
    height: 48px;
    border-radius: 0.4rem;
    object-fit: cover;
}

.kb-list-thumbnail-placeholder {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 48px;
    height: 48px;
    border-radius: 0.4rem;
    background: var(--kb-surface-soft);
    color: var(--kb-text-secondary);
    font-size: 0.7rem;
}

.kb-avatar {
    width: 40px;
    height: 40px;
    border-radius: 50%;
    object-fit: cover;
}

.kb-avatar-placeholder {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 40px;
    height: 40px;
    border-radius: 50%;
    background: var(--kb-text-secondary);
    color: #fff;
    font-size: 0.85rem;
    font-weight: 600;
}

.kb-detail-scroll {
    max-height: 70vh;
    overflow: auto;
}

.kb-detail-image {
    width: 100%;
    max-height: 220px;
    object-fit: cover;
}

h1:focus {
    outline: none;
}

/* ============================================================
   Code-Elemente
   ============================================================ */
code {
    font-size: 0.8rem;
    color: var(--kb-accent-strong);
    background-color: var(--kb-accent-light);
    padding: 0.1em 0.45em;
    border-radius: 4px;
}

/* ============================================================
   Blazor Error Boundary
   ============================================================ */
.blazor-error-boundary {
    background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2LjYwNiA1Mi4yNjU4TDI2Ny4wNTIgNTIuNzk4NyAyNjcuNTM5IDUzLjYyODMgMjkwLjE4NSA5Mi4xODMxIDI5MC41NDUgOTIuNzk1IDI5MC42NTYgOTIuOTk2QzI5MC44NzcgOTMuNTEzIDI5MSA5NC4wODE1IDI5MSA5NC42NzgyIDI5MSA5Ny4wNjUxIDI4OS4wMzggOTkgMjg2LjYxNyA5OUwyNDAuMzgzIDk5QzIzNy45NjMgOTkgMjM2IDk3LjA2NTEgMjM2IDk0LjY3ODIgMjM2IDk0LjM3OTkgMjM2LjAzMSA5NC4wODg2IDIzNi4wODkgOTMuODA3MkwyMzYuMzM4IDkzLjAxNjIgMjM2Ljg1OCA5Mi4xMzE0IDI1OS40NzMgNTMuNjI5NCAyNTkuOTYxIDUyLjc5ODUgMjYwLjQwNyA1Mi4yNjU4QzI2MS4yIDUxLjQ4MzcgMjYyLjI5NiA1MSAyNjMuNTA2IDUxWk0yNjMuNTg2IDY2LjAxODNDMjYwLjczNyA2Ni4wMTgzIDI1OS4zMTMgNjcuMTI0NSAyNTkuMzEzIDY5LjMzNyAyNTkuMzEzIDY5LjYxMDIgMjU5LjMzMiA2OS44NjA4IDI1OS4zNzEgNzAuMDg4N0wyNjEuNzk1IDg0LjAxNjEgMjY1LjM4IDg0LjAxNjEgMjY3LjgyMSA2OS43NDc1QzI2Ny44NiA2OS43MzA5IDI2Ny44NzkgNjkuNTg3NyAyNjcuODc5IDY5LjMxNzkgMjY3Ljg3OSA2Ny4xMTgyIDI2Ni40NDggNjYuMDE4MyAyNjMuNTg2IDY2LjAxODNaTTI2My41NzYgODYuMDU0N0MyNjEuMDQ5IDg2LjA1NDcgMjU5Ljc4NiA4Ny4zMDA1IDI1OS43ODYgODkuNzkyMSAyNTkuNzg2IDkyLjI4MzcgMjYxLjA0OSA5My41Mjk1IDI2My41NzYgOTMuNTI5NSAyNjYuMTE2IDkzLjUyOTUgMjY3LjM4NyA5Mi4yODM3IDI2Ny4zODcgODkuNzkyMSAyNjcuMzg3IDg3LjMwMDUgMjY2LjExNiA4Ni4wNTQ3IDI2My41NzYgODYuMDU0N1oiIGZpbGw9IiNGRkU1MDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=) no-repeat 1rem/1.8rem, #b32121;
    padding: 1rem 1rem 1rem 3.7rem;
    color: white;
}
.blazor-error-boundary::after {
    content: "Ein Fehler ist aufgetreten.";
}

/* ============================================================
   Sonstiges
   ============================================================ */
.darker-border-checkbox.form-check-input {
    border-color: var(--kb-border-soft);
}
.form-floating > .form-control-plaintext::placeholder,
.form-floating > .form-control::placeholder {
    color: var(--kb-text-secondary);
    text-align: end;
}
.form-floating > .form-control-plaintext:focus::placeholder,
.form-floating > .form-control:focus::placeholder {
    text-align: start;
}

/* ============================================================
   Responsive – keine horizontalen Scrollprobleme
   ============================================================ */
@media (max-width: 640.98px) {
    .table-responsive-always {
        overflow-x: auto;
        -webkit-overflow-scrolling: touch;
    }
    h1 { font-size: 1.65rem; }
    .card-body { padding: 1rem; }
    .kb-page-intro {
        margin-bottom: 1.5rem;
    }

    .kb-page-actions,
    .kb-filter-row {
        align-items: stretch;
    }

    .kb-filter-field {
        min-width: 100%;
    }
}

/* ============================================================
   KbAlert – einheitliche Feedback-Meldungen
   ============================================================ */
.kb-alert {
    display: flex;
    align-items: flex-start;
    gap: 0.65rem;
    padding: 0.75rem 1rem;
    border-radius: var(--kb-radius);
    margin-bottom: 1rem;
    font-size: 0.9rem;
    line-height: 1.45;
    border-left: 4px solid transparent;
}

.kb-alert-error {
    background: #fff0f3;
    border-color: #e05c7a;
    color: #7a1530;
}

.kb-alert-success {
    background: #f0faf3;
    border-color: #3aaa6e;
    color: #1a5c38;
}

.kb-alert-warning {
    background: #fffbeb;
    border-color: #f0b429;
    color: #7a4c00;
}

.kb-alert-info {
    background: #f0f6ff;
    border-color: #4a90d9;
    color: #1a3d6b;
}

.kb-alert-icon {
    font-size: 1rem;
    flex-shrink: 0;
    margin-top: 0.05rem;
}

.kb-alert-text {
    flex: 1;
}

.kb-alert-close {
    background: none;
    border: none;
    cursor: pointer;
    padding: 0;
    font-size: 0.85rem;
    color: inherit;
    opacity: 0.6;
    line-height: 1;
    flex-shrink: 0;
}

.kb-alert-close:hover {
    opacity: 1;
}

/* ============================================================
   KbErrorBoundary – Fehler-Fallback im Inhaltsbereich
   ============================================================ */
.kb-error-boundary {
    display: flex;
    gap: 1rem;
    align-items: flex-start;
    padding: 1.5rem 1.75rem;
    background: #fff0f3;
    border: 1px solid #f5c6d0;
    border-left: 4px solid #e05c7a;
    border-radius: var(--kb-radius);
    margin: 1.5rem 0;
}

.kb-error-boundary-icon {
    font-size: 1.5rem;
    flex-shrink: 0;
}

.kb-error-boundary-body strong {
    display: block;
    color: #7a1530;
    font-size: 1rem;
    margin-bottom: 0.35rem;
}

.kb-error-boundary-body p {
    color: #7a1530;
    font-size: 0.88rem;
    margin-bottom: 0.75rem;
}
/* ============================================================
   GLOW HUB � Neue Komponentenstyles
   ============================================================ */

/* GlowHero – kein Card-Look, kein Abstand zur Topbar: bricht per negativem Margin aus dem
   Padding von .content-shell/.content aus, damit sie randlos direkt unter der Suchleiste
   liegt und von der linken bis zur rechten Kante des Inhaltsbereichs reicht. Platzhalter-
   Hintergrundbild (Sonnenuntergang-Verlauf statt echtem Foto, siehe Absprache): heller
   Überzug links sorgt für lesbaren Text, die Farbe wird zum rechten Rand hin kräftiger. */
.glow-hero {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-start;
    justify-content: space-between;
    gap: 1.25rem;
    /* Negativer Margin hebt exakt das Padding von .content-shell + .content auf (siehe
       MainLayout.razor.css), damit die Hero bis an die Kanten des Inhaltsbereichs reicht
       und ohne Lücke direkt unter der Topbar beginnt. */
    margin: -1.5rem -2.25rem 1.5rem;
    padding: 2.25rem;
    border-radius: 0;
    min-height: 15rem;
    overflow: hidden;
    position: relative;
    background-image:
        linear-gradient(90deg, rgba(255,249,240,0.94) 0%, rgba(255,249,240,0.72) 28%, rgba(255,249,240,0.20) 55%, rgba(255,249,240,0) 72%),
        radial-gradient(circle at 82% 28%, rgba(255,224,140,0.9) 0%, rgba(255,224,140,0) 24%),
        linear-gradient(180deg, #ffe9c7 0%, #ffc48c 30%, #ff9a5c 55%, #ff8247 75%, #c44a1a 100%);
    background-size: cover;
    background-position: center;
    background-repeat: no-repeat;
}

@media (min-width: 641px) {
    .glow-hero {
        margin: -1.75rem -3rem 1.5rem -3.5rem;
        padding: 2.25rem 3rem 2.25rem 3.5rem;
    }
}

.glow-hero-content {
    display: flex;
    flex-direction: column;
    gap: 0.9rem;
    max-width: 46rem;
    position: relative;
}

.glow-hero-greeting {
    display: flex;
    align-items: flex-start;
    gap: 1rem;
}

.glow-hero-sparkle {
    font-size: 2.2rem;
    line-height: 1;
    filter: drop-shadow(0 2px 8px rgba(255,216,77,0.45));
}

.glow-hero-title {
    font-family: var(--kb-font-display);
    font-size: 2rem;
    font-weight: 700;
    color: var(--kb-text-primary);
    margin: 0;
    letter-spacing: -0.02em;
}

.glow-hero-subtitle {
    margin: 0.3rem 0 0;
    color: var(--kb-text-secondary);
    font-size: 1.02rem;
    line-height: 1.6;
}

.glow-hero-quote {
    font-family: var(--kb-font-display);
    font-style: italic;
    color: #000;
    font-size: 1rem;
    padding-left: 1rem;
    border-left: 3px solid var(--kb-accent);
    margin-top: 0.5rem;
}

.glow-hero-quote-mark {
    font-size: 1.4rem;
    color: var(--kb-accent);
    margin-right: 0.25rem;
    vertical-align: middle;
}

.glow-hero-actions {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    position: relative;
}

/* KpiCard – bewusst quadratisch (aspect-ratio), unabhängig von der Höhe benachbarter
   Kacheln in derselben Zeile, damit sie nicht in die Höhe gezogen wird. */
.kpi-card {
    display: flex;
    flex-direction: column;
    justify-content: space-between;
    aspect-ratio: 1 / 1;
    /* min-height:auto würde sonst per Flex-Item-Defaultverhalten den Inhalt vor das
       aspect-ratio stellen und die Karte in die Höhe ziehen - deshalb explizit 0. */
    min-height: 0;
    overflow: hidden;
    padding: 1.1rem;
    background: var(--kb-surface);
    border: 1px solid var(--kb-border-soft);
    border-radius: var(--kb-radius-card);
    box-shadow: var(--kb-shadow-card);
    transition: box-shadow 0.18s ease, transform 0.18s ease;
}

.kpi-card:hover {
    box-shadow: var(--kb-shadow-card-hover);
    transform: translateY(-2px);
}

.kpi-card--highlighted {
    background: linear-gradient(135deg, rgba(255,216,77,0.10) 0%, rgba(255,130,71,0.12) 100%);
    border-color: rgba(255,130,71,0.25);
}

/* Heute-Seite: 2x2-Raster statt einspaltigem Stapel – 2 KPI-Karten pro Zeile, 2 Zeilen
   insgesamt. Jede Karte bekommt dadurch die doppelte Höhe (und Breite) gegenüber dem
   vorherigen 4er-Stapel, genug Platz für Inhalt + Padding. min-height (statt height) an der
   Leaderboard-Höhe orientiert: reicht der Platz trotzdem nicht, wächst das Raster höher als
   Leaderboard, statt Karten zusammenzuquetschen und den Inhalt per overflow:hidden
   abzuschneiden (das hat vorher jedes Padding unsichtbar gemacht). Die "1fr"-Zeilen respektieren
   dabei automatisch die Mindesthöhe des Karteninhalts (kein min-height:0-Override mehr nötig). */
.kb-kpi-stack {
    display: grid;
    grid-template-columns: 1fr 1fr;
    grid-template-rows: 1fr 1fr;
    min-height: 100%;
    gap: 1rem;
}

.kb-kpi-stack > .kpi-card {
    aspect-ratio: auto;
    position: relative;
    box-sizing: border-box;
    display: flex;
    flex-direction: row;
    align-items: center;
    gap: 1.25rem;
    padding-top: 2.25rem;
    padding-bottom: 2.25rem;
}

.kb-kpi-stack > .kpi-card > .kpi-card-text {
    display: flex;
    flex-direction: column;
    gap: 0.5rem;
    flex: 1 1 0;
    min-width: 0;
    padding-right: 2.6rem;
}

/* Label, Wert und Caption schwarz; Trend (inkl. "ggü. gestern") komplett grau. */
.kb-kpi-stack > .kpi-card .kpi-card-label,
.kb-kpi-stack > .kpi-card .kpi-card-value,
.kb-kpi-stack > .kpi-card .kpi-card-caption {
    color: #000;
}

.kb-kpi-stack > .kpi-card .kpi-card-trend,
.kb-kpi-stack > .kpi-card .kpi-card-trend-suffix {
    color: var(--kb-text-secondary);
}

/* Das Icon wird aus dem Header herausgelöst (position:absolute) und oben rechts über der
   gesamten Karte verankert – deshalb braucht .kpi-card position:relative weiter oben. */
.kb-kpi-stack > .kpi-card .kpi-card-icon-badge {
    position: absolute;
    top: 1.5rem;
    right: 1.4rem;
    background: linear-gradient(135deg, var(--kb-warm) 0%, var(--kb-accent) 100%);
    color: #fff;
}

/* Sparkline behält ihr flaches Original-Seitenverhältnis (100:32) bei, statt verzerrt zu
   werden, und erscheint einfach zentriert in der rechten Kartenhälfte. */
.kb-kpi-stack > .kpi-card > .kpi-card-sparkline-wrap {
    display: flex;
    align-items: center;
    justify-content: center;
    flex: 1 1 0;
    min-width: 0;
    height: 100%;
    margin: 0;
}

.kb-kpi-stack > .kpi-card > .kpi-card-sparkline-wrap > .kpi-card-sparkline {
    width: 100%;
    height: auto;
    aspect-ratio: 100 / 32;
}

/* Immer der orange Grundton statt trendabhängig Grün/Rot/Grau, nur im Stapel-Kontext. Größere
   Punkte + dickere Linie, damit die "Zeitverlauf"-Grafik klar erkennbar bleibt. */
.kb-kpi-stack .kpi-card-sparkline polyline {
    stroke: var(--kb-accent-strong);
    fill: none;
}

.kb-kpi-stack .kpi-card-sparkline circle {
    stroke: var(--kb-accent-strong);
    fill: var(--kb-accent-strong);
}

.kb-kpi-stack .kpi-card-sparkline polyline {
    stroke-width: 2.5;
}

.kb-kpi-stack .kpi-card-sparkline circle {
    r: 2.4;
}

/* Leichter Verlauf unter der Linie: oben schwach orange, nach unten hin transparent auslaufend. */
.kb-kpi-stack .kpi-card-sparkline-stop-start {
    stop-opacity: 0.22;
}

.kb-kpi-stack .kpi-card-sparkline-stop-end {
    stop-opacity: 0;
}

/* Das Schließen der Fläche erzeugt links (und rechts) eine senkrechte Kante zur Grundlinie –
   sähe sonst wie eine Y-Achse aus. Per Masken-Verlauf an den seitlichen Rändern ausblenden. */
.kb-kpi-stack .kpi-card-sparkline-area {
    -webkit-mask-image: linear-gradient(to right, transparent 0%, black 10%, black 90%, transparent 100%);
    mask-image: linear-gradient(to right, transparent 0%, black 10%, black 90%, transparent 100%);
}

/* Standard-Kontext (Grid auf anderen Seiten): Wrapper unsichtbar, Kinder verhalten sich wie
   direkte Kinder von .kpi-card (display:flex; flex-direction:column). */
.kpi-card-text {
    display: contents;
}

.kpi-card-header {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 0.5rem;
    margin-bottom: 0.6rem;
}

.kpi-card-label {
    font-size: 0.78rem;
    font-weight: 600;
    color: var(--kb-text-primary);
    line-height: 1.25;
}

.kpi-card-icon-badge {
    flex-shrink: 0;
    width: 1.9rem;
    height: 1.9rem;
    border-radius: 999px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 0.95rem;
}

.kpi-card-icon-badge--warm, .kpi-card-icon-badge--rose { background: var(--kb-accent-light); color: var(--kb-accent-strong); }

.kpi-card-value {
    font-family: var(--kb-font-display);
    font-size: 1.5rem;
    font-weight: 700;
    color: var(--kb-text-primary);
    line-height: 1.1;
}

.kpi-card-caption {
    margin-top: 0.35rem;
    font-size: 0.78rem;
    color: var(--kb-text-secondary);
}

.kpi-card-trend {
    margin-top: 0.3rem;
    font-size: 0.78rem;
    font-weight: 600;
}

.kpi-card-trend--up    { color: #4a7a1a; }
.kpi-card-trend--down  { color: var(--kb-danger); }
.kpi-card-trend--neutral { color: var(--kb-text-secondary); }

.kpi-card-trend-suffix { color: var(--kb-text-secondary); font-weight: 500; }

/* "Mein Lernpfad" + Founder-Message + Countdown – ersetzt die Bootstrap-Grid-Spalten durch
   feste Prozentbreiten, damit Lernpfad (28%) + Founder (42%) = 70% der Zeilenbreite ergeben.
   Countdown füllt den Rest und wird per align-items:stretch auf dieselbe Höhe wie Founder
   gestreckt (siehe .kb-countdown-card height:100%). Unter 992px stapeln die Karten. */
.kb-lernpfad-founder-row {
    display: flex;
    flex-direction: column;
    gap: 1rem;
}

.kb-lernpfad-founder-row > .kb-col-fill {
    flex: 1 1 auto;
    min-width: 0;
}

@media (min-width: 992px) {
    .kb-lernpfad-founder-row {
        flex-direction: row;
        align-items: stretch;
    }

    .kb-lernpfad-founder-row > .kb-col-lernpfad {
        flex: 0 0 28%;
        width: 28%;
    }

    .kb-lernpfad-founder-row > .kb-col-founder {
        flex: 0 0 42%;
        width: 42%;
    }
}

/* ProgressCard */
.progress-card {
    display: flex;
    flex-direction: column;
    height: 100%;
    padding: 1rem 1.1rem;
    background: var(--kb-surface);
    border: 1px solid var(--kb-border-soft);
    border-radius: var(--kb-radius-card);
    box-shadow: var(--kb-shadow-card);
}

/* "Mein Lernpfad" auf der Heute-Seite – Seitenverhältnis 1,5:1. Bei 28% Zeilenbreite (siehe
   .kb-lernpfad-founder-row) ergibt das exakt dieselbe Höhe wie die Founder-Karte (2,25:1 bei
   42% Zeilenbreite): 28/1,5 = 42/2,25. */
.progress-card--photo {
    height: auto;
    aspect-ratio: 1.5;
    background-size: contain;
    background-position: center;
    background-repeat: no-repeat;
}

.progress-card-cta {
    margin-top: auto;
    align-self: flex-start;
}

.progress-card-header {
    display: flex;
    align-items: flex-start;
    gap: 0.65rem;
    margin-bottom: 0.85rem;
}

.progress-card-icon {
    font-size: 1.3rem;
    line-height: 1;
    flex-shrink: 0;
}

.progress-card-label {
    font-weight: 600;
    font-size: 0.92rem;
    color: var(--kb-text-primary);
}

.progress-card-subtitle {
    font-size: 0.78rem;
    color: var(--kb-text-secondary);
    margin-top: 0.15rem;
}

.progress-card-percent {
    margin-left: auto;
    font-family: var(--kb-font-display);
    font-size: 1.2rem;
    font-weight: 700;
    color: var(--kb-accent-strong);
    white-space: nowrap;
}

.progress-card-bar-wrap {
    height: 6px;
    border-radius: 999px;
    background: rgba(180,80,20,0.10);
    overflow: hidden;
    margin-bottom: 0.6rem;
}

.progress-card-bar {
    height: 100%;
    border-radius: 999px;
    background: linear-gradient(90deg, var(--kb-warm) 0%, var(--kb-accent) 50%, var(--kb-highlight) 100%);
    transition: width 0.6s ease;
}

.progress-card-caption {
    font-size: 0.78rem;
    color: var(--kb-text-secondary);
}

/* IncentiveCard */
.incentive-card {
    border-radius: var(--kb-radius-card);
    overflow: hidden;
    background: var(--kb-surface);
    border: 1px solid var(--kb-border-soft);
    box-shadow: var(--kb-shadow-card);
    transition: box-shadow 0.2s ease, transform 0.2s ease;
}

.incentive-card:hover {
    box-shadow: var(--kb-shadow-card-hover);
    transform: translateY(-3px);
}

.incentive-card-visual {
    position: relative;
    height: 120px;
    background: linear-gradient(135deg, rgba(255,216,77,0.25) 0%, rgba(255,130,71,0.30) 50%, rgba(255,95,162,0.20) 100%);
    display: flex;
    align-items: center;
    justify-content: center;
    overflow: hidden;
}

.incentive-card-emoji {
    font-size: 3.5rem;
    filter: drop-shadow(0 4px 12px rgba(0,0,0,0.15));
}

.incentive-card-overlay {
    position: absolute;
    bottom: 0.6rem;
    right: 0.75rem;
    background: rgba(255,255,255,0.85);
    backdrop-filter: blur(8px);
    padding: 0.2rem 0.65rem;
    border-radius: 999px;
    font-size: 0.72rem;
    font-weight: 700;
    color: var(--kb-accent-strong);
    letter-spacing: 0.05em;
}

.incentive-card-body {
    padding: var(--kb-spacing-card);
}

.incentive-card-title {
    font-family: var(--kb-font-display);
    font-size: 1.35rem;
    font-weight: 700;
    color: var(--kb-text-primary);
    margin: 0.4rem 0 0.5rem;
}

.incentive-card-missing {
    font-size: 0.95rem;
    color: var(--kb-text-secondary);
    margin-bottom: 0.75rem;
}

.incentive-card-missing strong {
    color: var(--kb-accent-strong);
    font-weight: 700;
}

.incentive-card-progress-wrap {
    height: 8px;
    border-radius: 999px;
    background: rgba(180,80,20,0.10);
    overflow: hidden;
    margin-bottom: 0.5rem;
}

.incentive-card-progress-bar {
    height: 100%;
    border-radius: 999px;
    background: linear-gradient(90deg, var(--kb-warm) 0%, var(--kb-accent) 60%, var(--kb-highlight) 100%);
    transition: width 0.7s ease;
}

.incentive-card-meta {
    display: flex;
    justify-content: space-between;
    font-size: 0.78rem;
    color: var(--kb-text-secondary);
    margin-bottom: 0.5rem;
}

.incentive-card-deadline {
    font-weight: 600;
    color: var(--kb-accent-strong);
}

/* GlowComingSoon */
.glow-coming-soon {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    text-align: center;
    padding: 2rem 1.5rem;
    gap: 0.6rem;
}

.glow-coming-soon-icon {
    font-size: 2.5rem;
    opacity: 0.7;
}

.glow-coming-soon-title {
    font-family: var(--kb-font-display);
    font-size: 1.1rem;
    font-weight: 700;
    color: var(--kb-text-primary);
    margin: 0;
}

.glow-coming-soon-text {
    color: var(--kb-text-secondary);
    font-size: 0.88rem;
    margin: 0;
}

.glow-coming-soon-badge {
    display: inline-block;
    padding: 0.25rem 0.85rem;
    border-radius: 999px;
    background: rgba(255,130,71,0.10);
    color: var(--kb-accent-strong);
    font-size: 0.7rem;
    font-weight: 700;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    border: 1px solid rgba(255,130,71,0.18);
}

/* Glow Quick Access Cards */
.glow-quick-card {
    display: flex;
    align-items: center;
    gap: 0.85rem;
    min-height: 6.25rem;
    padding: 1rem 1.1rem;
    border-radius: var(--kb-radius-card);
    background: var(--kb-surface-soft);
    border: 1px solid var(--kb-border-soft);
    transition: background-color 0.15s ease, transform 0.15s ease, box-shadow 0.15s ease;
}

.glow-quick-card:hover {
    background: rgba(255,248,235,1);
    transform: translateY(-1px);
    box-shadow: 0 6px 18px rgba(180,80,20,0.09);
}

.glow-quick-icon {
    font-size: 1.6rem;
    line-height: 1;
    flex-shrink: 0;
}

.glow-quick-title {
    font-weight: 600;
    font-size: 0.95rem;
    color: var(--kb-text-primary);
}

.glow-quick-desc {
    font-size: 0.82rem;
    color: var(--kb-text-secondary);
    margin-top: 0.2rem;
    line-height: 1.45;
}

/* Glow Wall / Community Wins */
.glow-wall {
    display: flex;
    flex-direction: column;
    gap: 0.75rem;
}

.glow-win-item {
    padding: 1rem 0;
    border-bottom: 1px solid var(--kb-border-soft);
}

.glow-win-item:first-child {
    padding-top: 0;
}

.glow-win-item:last-child {
    padding-bottom: 0;
    border-bottom: none;
}

.glow-win-item--highlight {
    padding-left: 0.85rem;
    border-left: 3px solid var(--kb-accent);
}

.glow-win-item--sm {
    display: flex;
    align-items: center;
    gap: 0.75rem;
}

.glow-win-badge {
    font-size: 0.78rem;
    font-weight: 700;
    color: var(--kb-accent-strong);
    background: rgba(255,130,71,0.08);
    padding: 0.2rem 0.6rem;
    border-radius: 999px;
    white-space: nowrap;
}

.glow-win-author {
    font-size: 0.72rem;
    font-weight: 600;
    letter-spacing: 0.04em;
    color: var(--kb-text-secondary);
    margin: 0.35rem 0 0.5rem;
    text-transform: uppercase;
}

.glow-win-text {
    font-size: 0.88rem;
    color: var(--kb-text-primary);
    margin: 0;
}

/* Glow Start Days */
.glow-start-days {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
    gap: 1.25rem;
}

.glow-day-card {
    display: none;
}

.glow-day-card:hover { transform: translateY(-2px); }

.glow-day-card--done {
    border-color: rgba(162,205,90,0.35);
    background: rgba(162,205,90,0.05);
}

.glow-day-card--active {
    border-color: rgba(255,130,71,0.30);
    background: rgba(255,130,71,0.05);
}

.glow-day-card--locked {
    opacity: 0.6;
}

.glow-day-number {
    font-size: 0.68rem;
    font-weight: 700;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--kb-text-secondary);
    margin-bottom: 0.4rem;
}

.glow-day-title {
    font-family: var(--kb-font-display);
    font-size: 1.1rem;
    font-weight: 700;
    color: var(--kb-text-primary);
    margin-bottom: 0.85rem;
}

.glow-day-checklist {
    list-style: none;
    padding: 0;
    margin: 0 0 1rem;
    display: flex;
    flex-direction: column;
    gap: 0.4rem;
}

.glow-day-checklist li {
    font-size: 0.88rem;
    color: var(--kb-text-secondary);
    padding-left: 0.25rem;
}

.glow-day-checklist li.done {
    color: #4a7a1a;
    font-weight: 600;
}

/* Academy Category Cards */
.academy-category-content {
    height: 100%;
}

.academy-category-content::before {
    content: "";
    display: block;
    width: 2.5rem;
    height: 0.25rem;
    margin-bottom: 1rem;
    border-radius: 999px;
    background: var(--cat-color, var(--kb-accent));
}

.academy-cat-icon {
    font-size: 2rem;
    margin-bottom: 0.75rem;
}

.academy-category-content h3 {
    font-size: 1.1rem;
    margin-bottom: 0.5rem;
}

.academy-category-content p {
    font-size: 0.85rem;
    color: var(--kb-text-secondary);
    margin-bottom: 0.75rem;
}

.academy-cat-count {
    font-size: 0.7rem;
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--kb-text-secondary);
    display: block;
    margin-bottom: 1rem;
}

/* Content Hub Grid */
.content-hub-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
    gap: 1rem;
}

.content-asset-card {
    min-height: 15rem;
    padding: 1.35rem;
    border-radius: var(--kb-radius-card);
    background: var(--kb-surface);
    border: 1px solid var(--kb-border-soft);
    box-shadow: var(--kb-shadow-card);
    display: flex;
    flex-direction: column;
    gap: 0.85rem;
    transition: transform 0.18s ease, box-shadow 0.18s ease;
}

.content-asset-card:hover {
    transform: translateY(-2px);
    box-shadow: var(--kb-shadow-card-hover);
}

.content-asset-card--coming-soon {
    opacity: 0.72;
}

.content-asset-preview {
    font-size: 2.5rem;
    text-align: center;
    padding: 0.75rem;
    background: var(--kb-surface-soft);
    border-radius: 12px;
    line-height: 1;
}

.content-asset-info {
    flex: 1;
}

.content-asset-title {
    font-weight: 600;
    font-size: 0.92rem;
    color: var(--kb-text-primary);
    margin-top: 0.2rem;
}

/* Community Pills */
.glow-community-pill {
    display: flex;
    align-items: center;
    padding: 0.6rem 1rem;
    border-radius: 12px;
    background: var(--kb-surface-soft);
    border: 1px solid var(--kb-border-soft);
    font-weight: 600;
    font-size: 0.88rem;
    color: var(--kb-text-primary);
    cursor: pointer;
    transition: background-color 0.15s ease, transform 0.15s ease;
    gap: 0.5rem;
}

.glow-community-pill:hover {
    background: rgba(255,248,235,1);
    transform: translateX(2px);
}

.coming-soon-pill {
    opacity: 0.6;
    cursor: default;
}

.coming-soon-pill:hover {
    transform: none;
}

/* ============================================================
   Neue Seiten � gemeinsame Komponenten-Styles
   ============================================================ */

.kb-section-title {
    font-family: var(--kb-font-display);
    font-size: 1.25rem;
    color: var(--kb-text-primary);
    margin-top: var(--kb-spacing-section);
    margin-bottom: 1rem;
    padding-bottom: 0.4rem;
    border-bottom: 2px solid var(--kb-border-soft);
}

/* Module Card (SkinCareCode, Academy-�hnlich) */
.kb-module-card {
    border-radius: var(--kb-radius-card) !important;
    box-shadow: var(--kb-shadow-card);
    background: var(--kb-surface);
    transition: box-shadow 0.2s, transform 0.2s;
}
.kb-module-card:hover {
    box-shadow: var(--kb-shadow-card-hover);
    transform: translateY(-2px);
}
.kb-module-icon {
    font-size: 2rem;
    margin-bottom: 0.5rem;
}

/* Tool Card (BeautyCoachTools) */
.kb-tool-card {
    border-radius: var(--kb-radius-card) !important;
    box-shadow: var(--kb-shadow-card);
    background: var(--kb-surface);
    transition: box-shadow 0.2s, transform 0.2s;
}
.kb-tool-card:hover {
    box-shadow: var(--kb-shadow-card-hover);
    transform: translateY(-2px);
}
.kb-tool-icon {
    font-size: 2rem;
    margin-bottom: 0.5rem;
}

/* Event Card */
.kb-event-card {
    border-radius: var(--kb-radius-card) !important;
    box-shadow: var(--kb-shadow-card);
    background: var(--kb-surface);
    transition: box-shadow 0.2s, transform 0.2s;
}
.kb-event-card:hover {
    box-shadow: var(--kb-shadow-card-hover);
    transform: translateY(-2px);
}
.kb-event-badge {
    display: inline-block;
    background: var(--kb-accent);
    color: #fff;
    font-size: 0.7rem;
    font-weight: 700;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    padding: 0.18rem 0.7rem;
    border-radius: 999px;
}
.kb-event-badge--online {
    background: var(--kb-ctrl-primary);
}
.kb-event-badge--retreat {
    background: var(--kb-highlight);
}
.kb-event-countdown {
    font-size: 0.85rem;
    color: var(--kb-text-secondary);
    margin-top: 0.5rem;
}

/* Automation Flow */
.kb-automation-flow {
    display: flex;
    flex-direction: column;
    gap: 0;
    margin-top: 1rem;
}
.kb-automation-step {
    display: flex;
    align-items: flex-start;
    gap: 1rem;
    background: var(--kb-surface-soft);
    border-radius: var(--kb-radius-card);
    padding: 1rem 1.25rem;
    border-left: 4px solid var(--kb-border-soft);
}
.kb-automation-step--planned {
    border-left-color: var(--kb-warm);
    opacity: 0.85;
}
.kb-automation-step-icon {
    font-size: 1.5rem;
    flex-shrink: 0;
}
.kb-automation-connector {
    text-align: center;
    color: var(--kb-text-secondary);
    font-size: 1.1rem;
    padding: 0.2rem 0;
    margin-left: 1.5rem;
}

/* Page Intro mit Fortschritt nebeneinander */
.kb-page-intro {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-end;
    gap: 1.5rem;
    margin-bottom: var(--kb-spacing-section);
}
.kb-page-intro-copy {
    flex: 1 1 300px;
}
.kb-page-intro-progress {
    flex: 0 1 280px;
}
.kb-page-actions {
    flex: 0 1 auto;
    display: flex;
    gap: .5rem;
    align-items: center;
    flex-wrap: wrap;
}
.kb-eyebrow {
    display: inline-block;
    font-size: .75rem;
    font-weight: 700;
    letter-spacing: .1em;
    text-transform: uppercase;
    color: var(--kb-accent);
    margin-bottom: .4rem;
}

/* ?? GlowWinCard ??????????????????????????????????????? */
.glow-win-card {
    background: var(--kb-card-bg, #fff);
    border-radius: var(--kb-radius);
    padding: 1.1rem 1.2rem;
    box-shadow: 0 2px 8px rgba(0,0,0,.06);
    display: flex;
    flex-direction: column;
    gap: .45rem;
}
.glow-win-card--highlight {
    border-left: 4px solid var(--kb-accent);
}
.glow-win-card--sm {
    padding: .7rem .9rem;
    font-size: .9rem;
}
.glow-win-badge {
    font-size: 1.4rem;
}
.glow-win-author {
    font-weight: 700;
    font-size: .9rem;
    color: var(--kb-ctrl-primary);
}
.glow-win-text {
    margin: 0;
    font-size: .92rem;
    color: var(--kb-text-secondary, #555);
}

/* ?? CommunityGroupPill ???????????????????????????????? */
.glow-community-pill {
    display: flex;
    align-items: center;
    gap: .45rem;
    padding: .45rem .75rem;
    border-radius: var(--kb-radius);
    cursor: pointer;
    transition: background .15s;
    font-size: .9rem;
}
.glow-community-pill:hover {
    background: rgba(var(--kb-accent-rgb, 224,82,82), .07);
}
.glow-community-pill--active {
    background: rgba(var(--kb-accent-rgb, 224,82,82), .13);
    font-weight: 600;
}
.glow-pill-icon { font-size: 1rem; }
.glow-pill-name { flex: 1; }
.glow-pill-count {
    font-size: .75rem;
    background: var(--kb-accent);
    color: #fff;
    border-radius: 999px;
    padding: 0 .45rem;
}

/* ?? ContentAssetCard ?????????????????????????????????? */
.content-asset-card {
    background: var(--kb-card-bg, #fff);
    border-radius: var(--kb-radius);
    padding: 1rem 1rem 1.2rem;
    box-shadow: 0 2px 8px rgba(0,0,0,.06);
    display: flex;
    flex-direction: column;
    gap: .55rem;
}
.content-asset-preview {
    font-size: 2.2rem;
    text-align: center;
    padding: .6rem 0;
    background: var(--kb-surface-subtle, #fdf6f0);
    border-radius: calc(var(--kb-radius) - 2px);
}
.content-asset-info { flex: 1; }
.content-asset-title {
    font-weight: 600;
    font-size: .92rem;
    margin-top: .2rem;
}
.kb-label {
    font-size: .72rem;
    font-weight: 700;
    letter-spacing: .07em;
    text-transform: uppercase;
    color: var(--kb-accent);
}

/* ?? AcademyCategoryCard ??????????????????????????????? */
.academy-category-card {
    background: var(--kb-card-bg, #fff);
    border-radius: var(--kb-radius);
    padding: 1.5rem 1.4rem;
    box-shadow: 0 2px 8px rgba(0,0,0,.06);
    border-top: 4px solid var(--cat-color, var(--kb-accent));
    display: flex;
    flex-direction: column;
    gap: .6rem;
}
.academy-cat-icon { font-size: 2rem; }
.academy-category-card h3 {
    font-size: 1.1rem;
    font-weight: 700;
    margin: 0;
    color: var(--cat-color, var(--kb-accent));
}
.academy-category-card p {
    margin: 0;
    font-size: .9rem;
    color: var(--kb-text-secondary, #555);
}
.academy-cat-count {
    font-size: .78rem;
    background: rgba(0,0,0,.07);
    border-radius: 999px;
    padding: .2rem .65rem;
    align-self: flex-start;
}

/* ?? KbFilterBar ??????????????????????????????????????? */
.kb-filter-bar {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: .6rem;
    margin-bottom: 1.5rem;
}
.kb-filter-search {
    flex: 1 1 220px;
    max-width: 340px;
}
.kb-filter-buttons {
    display: flex;
    flex-wrap: wrap;
    gap: .4rem;
}

/* Nicht gewählte Option (KbChoiceGroup): dieselbe Pillenform und Größe wie die gewählte
   (.btn-primary oben), nur grau – so liest sich die Gruppe als ein Umschalter statt als
   gemischte Knopfarten. */
.kb-filter-buttons .btn-outline-secondary {
    border-radius: var(--kb-radius-button);
    padding: 0.55rem 1.35rem;
    font-weight: 600;
    letter-spacing: 0.02em;
    background: #f1efed;
    border: 1px solid #d9d5d1;
    color: #6b6560;
    box-shadow: none;
}
.kb-filter-buttons .btn-outline-secondary:hover,
.kb-filter-buttons .btn-outline-secondary:focus {
    background: #e6e2de;
    border-color: #cbc6c1;
    color: #4a4540;
}

/* ============================================================
   KbSearchBar – Suchfeld mit Lupe-Icon, Löschen-Knopf und Trefferzahl-Badge.
   Lupe-Icon links im selben Look wie das (nicht-funktionale) Suchfeld in der
   TopBar (.kb-topbar-search-icon: 🔍, 0.6 Opazität, vertikal zentriert) –
   dieselbe Suchfeld-Optik soll app-weit wiedererkennbar sein, nicht zwei
   verschiedene Varianten. Löschen-Knopf sitzt IM Eingabefeld (rechts, per
   padding-right auf .form-control Platz geschaffen); die Trefferzahl ist
   bewusst KEIN Fließtext mehr ("X Treffer"), sondern eine kompakte graue
   Badge am oberen rechten Rand des Suchfelds – reduziert visuelles
   Rauschen, Zahl bleibt aber über aria-label weiterhin als "X Treffer" hörbar.
   ============================================================ */
.kb-search-bar {
    position: relative;
    display: inline-block;
    width: 100%;
    max-width: 320px;
    margin-bottom: 1rem;
}
.kb-search-icon {
    position: absolute;
    top: 50%;
    left: 0.9rem;
    transform: translateY(-50%);
    opacity: 0.6;
    font-size: 0.9rem;
    pointer-events: none;
}
.kb-search-bar .form-control {
    padding-left: 2.2rem;
    padding-right: 2.25rem;
}
.kb-search-clear {
    position: absolute;
    top: 50%;
    right: 0.5rem;
    transform: translateY(-50%);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 1.5rem;
    height: 1.5rem;
    padding: 0;
    background: transparent;
    border: none;
    border-radius: 999px;
    color: var(--kb-text-secondary);
    line-height: 1;
}
.kb-search-clear .bi { font-size: 0.85rem; }
.kb-search-clear:hover {
    background: var(--kb-surface-soft);
    color: var(--kb-text-primary);
}
.kb-search-badge {
    position: absolute;
    top: -0.5rem;
    right: -0.5rem;
    min-width: 1.35rem;
    padding: 0.15rem 0.4rem;
    border-radius: 999px;
    background: var(--kb-border-grey);
    color: #fff;
    font-size: 0.7rem;
    font-weight: 700;
    line-height: 1;
    text-align: center;
    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25);
}

/* ============================================================
   KbColorSwatch – runder Farbmuster-Kreis für einen Hex-Code (Farben-Liste,
   Live-Vorschau in Farben-Bearbeiten). Größe kommt als Inline-Style von der
   Komponente (variiert je Verwendungsstelle), Form/Rahmen/Platzhalter sind
   hier zentral.
   ============================================================ */
.kb-color-swatch {
    display: inline-block;
    border-radius: 50%;
    border: 1px solid #ccc;
}
.kb-color-swatch--empty {
    border-style: dashed;
}

/* ============================================================
   KbImageThumbnail / KbImageUpload – Vorschaubild in Listen (nur Anzeige) und klickbarer
   Bild-Upload im Bearbeiten-Formular (Farben/Düfte). Größe kommt als Inline-Style von der
   Komponente (variiert je Verwendungsstelle - kleine Liste vs. größere Upload-Vorschau).
   ============================================================ */
.kb-image-thumbnail {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    border-radius: var(--kb-radius-input);
    border: 1px solid var(--kb-border-soft);
    background: var(--kb-surface-soft);
    overflow: hidden;
    flex-shrink: 0;
}
.kb-image-thumbnail img {
    width: 100%;
    height: 100%;
    object-fit: cover;
}
.kb-image-thumbnail-placeholder {
    color: var(--kb-border-grey);
    font-size: 1.1rem;
}

/* Natives <label>+verstecktes <input type=file> statt selbstgebautem Klick-Handler/JS - ein
   Klick irgendwo im Label (auch auf das Vorschaubild) öffnet den Datei-Dialog browser-nativ. */
.kb-image-upload {
    position: relative;
    display: inline-block;
    cursor: pointer;
}
.kb-image-upload:hover .kb-image-thumbnail {
    border-color: var(--kb-ctrl-primary);
}
.kb-image-upload--busy {
    cursor: wait;
}
.kb-image-upload-input {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
}
.kb-image-upload-busy-overlay {
    position: absolute;
    inset: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    background: rgba(255, 255, 255, 0.6);
    border-radius: var(--kb-radius-input);
}

/* Farbwähler-Icon im Input-Group neben einem Hex-Textfeld (Farben-Bearbeiten): explizit auf
   volle Höhe des Geschwister-.form-control gestreckt statt sich auf Flexbox-Standardverhalten
   zu verlassen, engeres Innen-Padding als Bootstraps Standard-form-control-color, damit das
   Farbfeld sichtbar bündig zur Höhe des Textfelds ausfüllt statt kleiner mit Rand zu wirken. */
.kb-color-picker-input.form-control-color {
    width: 3rem;
    padding: 0.25rem;
    align-self: stretch;
}

/* Vorschau in KbPasteListModal: lange eingefügte Listen scrollen innerhalb der Tabelle, der
   Dialogkopf mit "Anlegen" bleibt dadurch sichtbar. */
.kb-paste-preview {
    max-height: 18rem;
    overflow-y: auto;
}

/* ============================================================
   KbPager – Seiten-Navigation für serverseitig gepagte Listen.
   ============================================================ */
.kb-pager {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    margin-top: 1rem;
}
.kb-pager-status {
    color: var(--kb-text-secondary);
    font-size: 0.85rem;
}

/* ============================================================
   KbSortableHeader – klickbare Tabellenkopf-Zelle mit Richtungs-Icon.
   Ganze Zelle klickbar (nicht nur der Text) - größere Trefferfläche
   (Fitts's Law), der Button selbst ist unstyled und übernimmt die
   Optik der umgebenden <th>.
   ============================================================ */
.kb-sortable-header {
    cursor: pointer;
    user-select: none;
    white-space: nowrap;
}
.kb-sortable-header-btn {
    display: inline-flex;
    align-items: center;
    gap: 0.3rem;
    background: none;
    border: none;
    padding: 0;
    margin: 0;
    font: inherit;
    color: inherit;
    cursor: pointer;
}
.kb-sortable-header-btn .bi { font-size: 0.7em; opacity: 0.7; }

/* --- KbLoadingSpinner ------------------------------------------------ */
.kb-loading-spinner {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: .75rem;
    padding: 2.5rem 1rem;
}
.kb-loading-spinner--overlay {
    position: absolute;
    inset: 0;
    background: rgba(255,255,255,.65);
    backdrop-filter: blur(2px);
    z-index: 20;
    border-radius: inherit;
}
/* Produkte-Formular: Akkordeon-Abschnitte (natives <details>/<summary>, s. Products.razor).
   Miller's Gesetz (Kurzzeitgedächtnis ≈ 7±2 Chunks) spricht bei einem derart langen Formular
   (Stammdaten → Variante → Beauty-Compass-Content → Merkmale → Inhaltsstoffe → Beziehungen →
   Collections → FAQ → Qualität → Veröffentlichung, 10 Abschnitte) für klare Chunking-Grenzen.
   Bewusst alle Abschnitte standardmäßig "open": nichts soll unsichtbar sein, ohne dass die
   Admin es aktiv einklappt – u. a. weil Pflichtfelder (Beauty-Compass-Merkmale) sonst nach
   einem fehlgeschlagenen Validierungsversuch unsichtbar verschwinden könnten. Natives <details>
   statt eigenem JS-Zustand: bleibt beim Zuklappen im DOM (kein Verlust von @bind-Value-Bindungen),
   ist per Tastatur (Enter/Leertaste auf <summary>) ohne Zusatzaufwand bedienbar. */
.kb-form-section {
    border: 1px solid var(--kb-border-soft);
    border-radius: 1rem;
    margin: 0 0 1rem;
    background: rgba(255, 252, 245, 0.55);
}

.kb-form-section-summary {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    padding: 0.75rem 1rem;
    font-size: 0.72rem;
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--kb-text-secondary);
    cursor: pointer;
    user-select: none;
}

.kb-form-section-summary::-webkit-details-marker {
    display: none;
}

.kb-form-section-summary::marker {
    content: "";
}

.kb-form-section-summary::before {
    content: "▸";
    display: inline-block;
    color: var(--kb-accent);
    transition: transform 0.15s ease;
}

.kb-form-section[open] > .kb-form-section-summary::before {
    transform: rotate(90deg);
}

.kb-form-section-summary:hover {
    color: var(--kb-text-primary);
}

.kb-form-section-body {
    padding: 0 1.1rem 1.1rem;
}

/* Bestellungen: Master-Detail-Splitscreen statt Liste-dann-Detail-darunter. Sobald eine
   Bestellung ausgewählt ist UND genug Breite vorhanden ist, stehen Liste und Detail
   nebeneinander (Muster aus Linear/Gmail/Stripe Dashboard) – kein Scroll-Sprung mehr beim
   Wechsel zwischen Bestellungen. Ohne Auswahl bzw. auf schmalen Bildschirmen bleibt es beim
   bisherigen gestapelten Verhalten (kb-order-split ohne --active-Modifier = einfache Spalte). */
.kb-order-split {
    display: flex;
    flex-direction: column;
    gap: 1.5rem;
    align-items: start;
}

.kb-order-split-list,
.kb-order-split-detail {
    min-width: 0;
    width: 100%;
}

@media (min-width: 1200px) {
    .kb-order-split--active {
        flex-direction: row;
    }

    .kb-order-split--active .kb-order-split-list {
        flex: 0 0 440px;
        max-width: 440px;
        position: sticky;
        top: 1rem;
    }

    .kb-order-split--active .kb-order-split-detail {
        flex: 1 1 auto;
    }
}

/* --- KbSaveButton / modale Aktionszeilen (Speichern+Abbrechen, Importieren+Schließen) ---
   Bewusst eine eigene Klasse statt Bootstraps mt-3/gap-2-Utilities: die sind mit !important
   generiert und ließen sich von spezifischeren Regeln nicht mehr übersteuern (siehe
   KbSearchBar-Fix weiter oben) - hier von Anfang an vermieden. Größerer Abstand nach oben,
   damit die Aktionszeile im Modal klar vom Inhalt getrennt wirkt statt daran zu kleben. */
.kb-save-bar {
    display: flex;
    align-items: center;
    justify-content: flex-end;
    flex-wrap: wrap;
    gap: 1rem;
    margin-top: 1.75rem;
}

/* --- KbSaveButton InModalHeader="true" (s. KbSaveButton.razor/KbModal.razor
   HeaderActions) - kompakte Darstellung in der fixen Modal-Titelzeile statt am
   Formularende: kein Top-Margin, kein Umbruch (Titelzeile ist einzeilig). */
.kb-save-bar--in-modal-header {
    margin-top: 0;
    flex-wrap: nowrap;
    gap: 0.5rem;
}

/* --- KbSaveButton Sticky="true" (opt-in, s. KbSaveButton.razor) ------------------- */
.kb-save-bar--sticky {
    position: sticky;
    bottom: 0;
    z-index: 5;
    margin: 1.5rem calc(-1 * var(--kb-spacing-card)) calc(-1 * var(--kb-spacing-card));
    padding: 1rem var(--kb-spacing-card);
    background: var(--kb-surface-strong);
    border-top: 1px solid var(--kb-border-soft);
    border-radius: 0 0 var(--kb-radius-card) var(--kb-radius-card);
    box-shadow: 0 -6px 16px rgba(180, 80, 20, 0.08);
}

/* --- KbSkeletonLoader (nur Verwaltungsoberfläche, s. KbSkeletonLoader.razor) ------- */
.kb-skeleton {
    display: flex;
    flex-direction: column;
    gap: 1rem;
}

.kb-skeleton-card {
    background: var(--kb-surface-strong);
    border: 1px solid var(--kb-border-soft);
    border-radius: var(--kb-radius-card);
    box-shadow: var(--kb-shadow-card);
    padding: var(--kb-spacing-card);
    display: flex;
    flex-direction: column;
    gap: 0.9rem;
}

.kb-skeleton-row {
    display: flex;
    gap: 1rem;
    align-items: center;
}

.kb-skeleton-bar {
    height: 0.9rem;
    border-radius: 999px;
    background: linear-gradient(90deg, var(--kb-surface-soft) 25%, var(--kb-border-soft) 50%, var(--kb-surface-soft) 75%);
    background-size: 200% 100%;
    animation: kb-skeleton-shimmer 1.4s ease-in-out infinite;
}

.kb-skeleton-bar--title { width: min(340px, 60%); height: 1.5rem; }
.kb-skeleton-bar--sm { width: 15%; }
.kb-skeleton-bar--md { width: 25%; }
.kb-skeleton-bar--lg { flex: 1 1 auto; }

@keyframes kb-skeleton-shimmer {
    0% { background-position: 200% 0; }
    100% { background-position: -200% 0; }
}

/* Bewegungsreduktion respektieren (WCAG 2.2 / prefers-reduced-motion) statt die
   Animation allen aufzuzwingen. */
@media (prefers-reduced-motion: reduce) {
    .kb-skeleton-bar {
        animation: none;
    }
}

.kb-loading-message {
    font-size: .9rem;
    color: var(--kb-text-muted, #888);
    margin: 0;
}

/* Pers�nliche Entwicklung */
.kb-development-value {
    margin: 0 0 0.5rem;
    font-family: var(--kb-font-display);
    font-size: 1.2rem;
    font-weight: 700;
    color: var(--kb-text-primary);
}

.kb-development-quote {
    margin: 0 0 1rem;
    font-family: var(--kb-font-display);
    font-size: 1.18rem;
    line-height: 1.55;
    color: var(--kb-text-primary);
}

.kb-development-preview {
    display: inline-block;
    color: var(--kb-text-secondary);
    font-size: 0.82rem;
    font-weight: 600;
}

.kb-development-toolbar {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.75rem 1rem;
    padding: 1rem 1.25rem;
    background: var(--kb-surface-soft);
    border: 1px solid var(--kb-border-soft);
    border-radius: var(--kb-radius-card);
}

.kb-development-details {
    display: grid;
    gap: 0.7rem;
    margin: 0 0 1rem;
}

.kb-development-details div {
    display: grid;
    gap: 0.1rem;
}

.kb-development-details dt,
.kb-development-detail-item span {
    color: var(--kb-text-secondary);
    font-size: 0.78rem;
    font-weight: 600;
}

.kb-development-details dd {
    margin: 0;
    color: var(--kb-text-primary);
    font-size: 0.88rem;
}

.kb-development-detail-item {
    display: grid;
    gap: 0.2rem;
    height: 100%;
    padding: 0.9rem 1rem;
    background: var(--kb-surface-soft);
    border-radius: var(--kb-radius-input);
}

.kb-development-detail-item strong {
    font-size: 0.95rem;
    font-weight: 600;
}

.kb-development-path-preview {
    padding: 1rem 1.1rem;
    background: rgba(255, 216, 77, 0.13);
    border-left: 3px solid var(--kb-warm);
    border-radius: 0 var(--kb-radius-input) var(--kb-radius-input) 0;
}

.kb-development-path-preview p {
    color: var(--kb-text-secondary);
}

@media (max-width: 640.98px) {
    .kb-development-toolbar {
        align-items: flex-start;
        flex-direction: column;
    }

    .kb-development-toolbar .kb-filter-buttons {
        width: 100%;
    }
}

/* ?? Development: Karten, Statistiken, Aktionszeilen ??????????????????????? */

.kb-development-card {
    background: var(--kb-surface);
    border: 1px solid var(--kb-border-soft);
    border-radius: var(--kb-radius-card);
    padding: 1.5rem;
}

.kb-stat-card {
    background: var(--kb-surface);
    border: 1px solid var(--kb-border-soft);
    border-radius: var(--kb-radius-card);
    padding: 1.25rem 1rem;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 0.25rem;
    text-align: center;
}

.kb-stat-value {
    font-size: 2rem;
    font-weight: 700;
    color: var(--kb-text-primary);
    line-height: 1;
}

.kb-stat-label {
    font-size: 0.8125rem;
    color: var(--kb-text-secondary);
}

.kb-development-action-row {
    display: flex;
    flex-wrap: wrap;
    gap: 0.75rem;
    align-items: center;
}

@media (max-width: 575.98px) {
    .kb-development-action-row {
        flex-direction: column;
        align-items: stretch;
    }

    .kb-stat-card {
        flex-direction: row;
        justify-content: space-between;
        text-align: left;
    }
}

/* ── Kluge-Momente ─────────────────────────────────────────────────────── */

.kb-moment-card {
    background: var(--kb-surface);
    border: 1px solid var(--kb-border-soft);
    border-radius: var(--kb-radius-card);
    padding: 1.5rem;
    height: 100%;
    display: flex;
    flex-direction: column;
    gap: 0.5rem;
}

.kb-moment-card--hidden {
    opacity: 0.55;
}

.kb-moment-header {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    gap: 0.5rem;
    flex-wrap: wrap;
}

.kb-moment-area {
    display: inline-block;
    font-size: 0.78rem;
    font-weight: 600;
    color: var(--kb-ctrl-primary);
    text-transform: uppercase;
    letter-spacing: 0.04em;
    margin-right: 0.75rem;
}

.kb-moment-date {
    font-size: 0.78rem;
    color: var(--kb-text-secondary);
}

.kb-moment-title {
    font-family: var(--kb-font-display);
    font-size: 1.15rem;
    font-weight: 700;
    color: var(--kb-text-primary);
    margin: 0.25rem 0;
    line-height: 1.35;
}

.kb-moment-reason {
    color: var(--kb-text-secondary);
    font-size: 0.9rem;
    line-height: 1.55;
    margin: 0;
    flex-grow: 1;
}

.kb-moment-note-form {
    margin-top: 0.75rem;
}

/* ── Persönliche Nachrichten ───────────────────────────────────────────── */

.kb-messages-unread-banner {
    display: flex;
    align-items: center;
    gap: 1rem;
    padding: 0.75rem 1.25rem;
    background: var(--kb-accent-light);
    border: 1px solid var(--kb-border-soft);
    border-radius: var(--kb-radius-card);
    font-size: 0.9rem;
    color: var(--kb-text-primary);
}

.kb-messages-list {
    display: flex;
    flex-direction: column;
    gap: 0.75rem;
}

.kb-message-item {
    background: var(--kb-surface);
    border: 1px solid var(--kb-border-soft);
    border-radius: var(--kb-radius-card);
    overflow: hidden;
    transition: box-shadow 0.15s ease;
}

.kb-message-item--unread {
    border-left: 3px solid var(--kb-ctrl-primary);
}

.kb-message-item:hover,
.kb-message-item:focus-within {
    box-shadow: var(--kb-shadow-card-hover);
}

.kb-message-header {
    padding: 1rem 1.25rem;
    cursor: pointer;
    user-select: none;
}

.kb-message-header:focus {
    outline: 2px solid var(--kb-ctrl-primary);
    outline-offset: -2px;
    border-radius: var(--kb-radius-card);
}

.kb-message-meta {
    display: flex;
    flex-wrap: wrap;
    gap: 0.4rem 0.75rem;
    margin-bottom: 0.4rem;
    align-items: center;
}

.kb-message-type {
    font-size: 0.75rem;
    font-weight: 600;
    color: var(--kb-text-secondary);
    text-transform: uppercase;
    letter-spacing: 0.04em;
}

.kb-message-sender {
    font-size: 0.78rem;
    color: var(--kb-text-secondary);
}

.kb-message-sender-badge {
    display: inline-block;
    font-size: 0.72rem;
    font-weight: 700;
    padding: 0.1em 0.5em;
    background: var(--kb-ctrl-primary);
    color: #fff;
    border-radius: 999px;
}

.kb-message-date {
    font-size: 0.75rem;
    color: var(--kb-text-secondary);
    margin-left: auto;
}

.kb-message-title {
    font-family: var(--kb-font-display);
    font-size: 1rem;
    font-weight: 600;
    color: var(--kb-text-primary);
    flex-grow: 1;
}

.kb-message-unread-dot {
    display: inline-block;
    width: 8px;
    height: 8px;
    border-radius: 50%;
    background: var(--kb-ctrl-primary);
    flex-shrink: 0;
}

.kb-message-chevron {
    display: inline-block;
    font-size: 1.1rem;
    color: var(--kb-text-secondary);
    transition: transform 0.2s ease;
    line-height: 1;
}

.kb-message-chevron.open {
    transform: rotate(90deg);
}

.kb-message-body {
    padding: 0 1.25rem 1.25rem;
    border-top: 1px solid var(--kb-border-soft);
}

/* ── Fortschrittsdimensionen-Hinweis ──────────────────────────────────── */

.kb-progress-hint {
    padding: 1rem 1.25rem;
    background: var(--kb-surface-soft);
    border: 1px solid var(--kb-border-soft);
    border-radius: var(--kb-radius-card);
}

/* ── Responsive Anpassungen ───────────────────────────────────────────── */

@media (max-width: 575.98px) {
    .kb-moment-card {
        padding: 1.1rem;
    }

    .kb-message-header {
        padding: 0.9rem 1rem;
    }

    .kb-message-body {
        padding: 0 1rem 1rem;
    }

    .kb-messages-unread-banner {
        flex-direction: column;
        align-items: flex-start;
    }
}

/* ============================================================
   Heute-Dashboard – neue Kachel-Komponenten
   ============================================================ */

/* GlowHero – Aside-Slot (Monatsziel-Karte) */
.glow-hero-aside {
    position: relative;
    flex-shrink: 0;
}

/* KpiCard – Sparkline */
.kpi-card-sparkline-wrap {
    display: block;
    width: 100%;
    margin-top: 0.4rem;
    flex-shrink: 0;
}

.kpi-card-sparkline {
    display: block;
    width: 100%;
    height: 26px;
}

.kpi-card-sparkline polyline {
    fill: none;
    stroke-width: 2;
}

/* Fläche unter der Linie – standardmäßig unsichtbar (stop-opacity:0), damit andere Seiten mit
   KpiCard unverändert bleiben. Kein stroke, damit keine (Achsen-artige) Kante entsteht. */
.kpi-card-sparkline-area {
    stroke: none;
}

.kpi-card-sparkline-stop-start,
.kpi-card-sparkline-stop-end {
    stop-color: var(--kb-accent);
    stop-opacity: 0;
}

.kpi-card-sparkline--up polyline, .kpi-card-sparkline--up circle { stroke: #4a7a1a; fill: #4a7a1a; }
.kpi-card-sparkline--down polyline, .kpi-card-sparkline--down circle { stroke: var(--kb-danger); fill: var(--kb-danger); }
.kpi-card-sparkline--neutral polyline, .kpi-card-sparkline--neutral circle { stroke: var(--kb-text-secondary); fill: var(--kb-text-secondary); }

/* GoalSummaryCard */
.kb-goal-summary-card {
    background: var(--kb-surface-strong);
    border-radius: var(--kb-radius-card);
    box-shadow: var(--kb-shadow-card);
    padding: 1.5rem;
    min-width: 15rem;
}

.kb-goal-summary-label {
    font-size: 0.7rem;
    font-weight: 700;
    letter-spacing: 0.09em;
    text-transform: uppercase;
    color: var(--kb-text-secondary);
    margin-bottom: 0.5rem;
}

.kb-goal-summary-row {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 0.5rem;
}

.kb-goal-summary-value {
    font-family: var(--kb-font-display);
    font-size: 1.7rem;
    font-weight: 700;
    color: var(--kb-text-primary);
}

.kb-goal-summary-percent {
    font-weight: 700;
    color: var(--kb-accent-strong);
}

.kb-goal-summary-bar-wrap {
    height: 6px;
    border-radius: 999px;
    background: rgba(180,80,20,0.10);
    overflow: hidden;
    margin: 0.75rem 0;
}

.kb-goal-summary-bar {
    height: 100%;
    border-radius: 999px;
    background: linear-gradient(90deg, var(--kb-warm) 0%, var(--kb-accent) 50%, var(--kb-highlight) 100%);
}

.kb-goal-summary-caption {
    font-size: 0.82rem;
    color: var(--kb-text-secondary);
    margin-bottom: 0.5rem;
}

/* ChecklistCard – Tagesfokus */
.kb-checklist-list {
    list-style: none;
    margin: 0 0 0.5rem;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 0.75rem;
}

.kb-checklist-item {
    display: flex;
    align-items: flex-start;
    gap: 0.65rem;
}

.kb-checklist-icon {
    flex-shrink: 0;
    width: 1.35rem;
    height: 1.35rem;
    border-radius: 999px;
    border: 2px solid var(--kb-border-soft);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 0.75rem;
    color: #fff;
    margin-top: 0.1rem;
}

.kb-checklist-item--done .kb-checklist-icon {
    background: var(--kb-accent);
    border-color: var(--kb-accent);
}

.kb-checklist-text {
    display: flex;
    flex-direction: column;
    font-size: 0.9rem;
}

.kb-checklist-text small {
    color: var(--kb-text-secondary);
    font-size: 0.78rem;
}

/* CountdownCard */
.kb-countdown-card {
    height: 100%;
    border-radius: var(--kb-radius-card);
    overflow: hidden;
    background-size: cover;
    background-position: center;
    background-repeat: no-repeat;
    color: #fff;
    box-shadow: var(--kb-shadow-card);
}

.kb-countdown-body {
    padding: var(--kb-spacing-card);
    text-shadow: 0 1px 6px rgba(0,0,0,0.45);
}

.kb-countdown-eyebrow {
    color: rgba(255,255,255,0.85) !important;
}

.kb-countdown-headline {
    font-family: var(--kb-font-display);
    font-size: 1.4rem;
    font-weight: 700;
    margin: 0.3rem 0 0.9rem;
}

.kb-countdown-digits {
    display: flex;
    gap: 1.25rem;
    margin-bottom: 1rem;
}

.kb-countdown-digit {
    display: flex;
    flex-direction: column;
}

.kb-countdown-digit span {
    font-family: var(--kb-font-display);
    font-size: 1.6rem;
    font-weight: 700;
    line-height: 1;
}

.kb-countdown-digit small {
    font-size: 0.62rem;
    letter-spacing: 0.08em;
    opacity: 0.85;
    margin-top: 0.2rem;
}

.kb-countdown-pill {
    display: inline-block;
    background: rgba(0,0,0,0.32);
    backdrop-filter: blur(6px);
    padding: 0.4rem 0.85rem;
    border-radius: 999px;
    font-size: 0.82rem;
    font-weight: 600;
    margin-bottom: 0.75rem;
}

/* FounderMessageCard – Seitenverhältnis 2,25:1 bei 42% Zeilenbreite (siehe
   .kb-lernpfad-founder-row) ergibt exakt dieselbe Höhe wie "Mein Lernpfad" (1,5:1 bei 28%
   Zeilenbreite): 42/2,25 = 28/1,5. background-size:contain verhindert trotzdem jede
   Beschneidung des Fotos. */
.kb-founder-card {
    position: relative;
    overflow: hidden;
    height: auto;
    aspect-ratio: 2.25;
    border: 1px solid var(--kb-border-soft);
    border-radius: var(--kb-radius-card);
    box-shadow: var(--kb-shadow-card);
    padding: var(--kb-spacing-card);
    background-size: contain;
    background-position: center;
    background-repeat: no-repeat;
}

.kb-founder-body {
    position: relative;
    max-width: 50%;
}

.kb-founder-eyebrow {
    color: var(--kb-accent-strong) !important;
}

.kb-founder-title {
    font-family: var(--kb-font-display);
    font-size: 1.3rem;
    font-weight: 700;
    margin: 0.3rem 0 0.5rem;
    color: var(--kb-text-primary);
}

.kb-founder-text {
    margin: 0;
    color: var(--kb-text-primary);
    font-size: 0.9rem;
    line-height: 1.55;
}

.kb-founder-cta {
    position: absolute;
    left: var(--kb-spacing-card);
    bottom: var(--kb-spacing-card);
}

.kb-founder-signature {
    position: absolute;
    bottom: var(--kb-spacing-card);
    right: var(--kb-spacing-card);
    font-family: var(--kb-font-display);
    font-style: italic;
    color: var(--kb-text-primary);
}

/* LeaderboardCard */
.kb-leaderboard-eyebrow {
    color: var(--kb-accent-strong) !important;
}

.kb-leaderboard-avatars {
    display: flex;
    align-items: center;
    margin: 0.5rem 0 1rem;
}

.kb-leaderboard-avatar {
    width: 2.6rem;
    height: 2.6rem;
    border-radius: 999px;
    object-fit: cover;
    border: 2px solid var(--kb-surface-strong);
    margin-left: -0.6rem;
    box-shadow: 0 4px 10px rgba(180,80,20,0.12);
}

.kb-leaderboard-avatars .kb-leaderboard-avatar:first-child {
    margin-left: 0;
}

.kb-leaderboard-avatar-extra {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    background: var(--kb-surface-soft);
    color: var(--kb-text-secondary);
    font-size: 0.75rem;
    font-weight: 700;
}

.kb-leaderboard-period {
    color: var(--kb-text-secondary) !important;
    margin-bottom: 0.5rem;
}

.kb-leaderboard-list {
    list-style: none;
    margin: 0 0 0.75rem;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 0.4rem;
}

.kb-leaderboard-row {
    display: flex;
    align-items: center;
    gap: 0.65rem;
    padding: 0.4rem 0.6rem;
    border-radius: 0.75rem;
    font-size: 0.88rem;
}

.kb-leaderboard-row--me {
    background: linear-gradient(135deg, rgba(255,130,71,0.14) 0%, rgba(255,95,162,0.14) 100%);
    font-weight: 700;
}

.kb-leaderboard-rank {
    width: 1.5rem;
    text-align: center;
    color: var(--kb-text-secondary);
}

.kb-leaderboard-name {
    flex: 1;
}

.kb-leaderboard-amount {
    font-weight: 700;
    color: var(--kb-text-primary);
}

.kb-leaderboard-card {
    height: 100%;
}


/* EventsTimeline – horizontale Variante von .kb-automation-flow */
.kb-timeline-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 1rem;
}

.kb-timeline-flow {
    display: flex;
    align-items: center;
    gap: 0;
    overflow-x: auto;
    padding-bottom: 0.25rem;
}

.kb-timeline-step {
    display: flex;
    align-items: center;
    gap: 0.6rem;
    text-decoration: none;
    color: inherit;
    flex-shrink: 0;
    padding-right: 1rem;
}

.kb-timeline-icon {
    width: 2.5rem;
    height: 2.5rem;
    border-radius: 999px;
    background: var(--kb-accent-light);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 1.1rem;
    flex-shrink: 0;
}

.kb-timeline-text {
    display: flex;
    flex-direction: column;
    font-size: 0.85rem;
    white-space: nowrap;
}

.kb-timeline-text small {
    color: var(--kb-text-secondary);
    font-size: 0.75rem;
}

.kb-timeline-connector {
    width: 2.5rem;
    height: 1px;
    background: var(--kb-border-soft);
    flex-shrink: 0;
}

/* Produkt / Challenge / Zitat – kleine Tile-Karten-Reihe */
.kb-tile-card {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    background: var(--kb-surface);
    border: 1px solid var(--kb-border-soft);
    border-radius: var(--kb-radius-card);
    box-shadow: var(--kb-shadow-card);
    padding: var(--kb-spacing-card);
    height: 100%;
}

.kb-tile-card-body {
    flex: 1;
    min-width: 0;
}

.kb-tile-card-title {
    font-family: var(--kb-font-display);
    font-size: 1.1rem;
    font-weight: 700;
    margin: 0.3rem 0 0.4rem;
    color: var(--kb-text-primary);
}

.kb-tile-card--product {
    background-size: cover;
    background-position: center;
    background-repeat: no-repeat;
}

.kb-tile-card-day-badge {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 0.2rem;
    width: 4.5rem;
    height: 4.5rem;
    border-radius: 999px;
    background: var(--kb-accent-light);
    flex-shrink: 0;
    font-size: 0.85rem;
    text-align: center;
}

.kb-tile-card--quote {
    position: relative;
    overflow: hidden;
}

.kb-tile-card-quote {
    font-family: var(--kb-font-display);
    font-style: italic;
    font-size: 1.05rem;
    color: var(--kb-text-primary);
    margin: 0.4rem 0;
}

.kb-tile-card-quote-author {
    color: var(--kb-text-secondary);
    font-size: 0.85rem;
    margin: 0;
}

.kb-tile-card-quote-deco {
    position: absolute;
    right: -2rem;
    top: -2rem;
    width: 8rem;
    height: 8rem;
    border-radius: 999px;
    background: radial-gradient(circle, rgba(255,130,71,0.35) 0%, rgba(255,95,162,0.15) 70%, transparent 100%);
    flex-shrink: 0;
}

@media (max-width: 640.98px) {
    .kb-tile-card {
        flex-direction: column;
        align-items: flex-start;
    }

    .kb-countdown-digits {
        gap: 0.75rem;
    }
}

/* ============================================================
   Sidebar-Navigation – Icons
   Global (nicht CSS-isoliert), da sowohl von NavMenu.razor als
   auch vom Kind-Komponenten NavItem.razor gerendert. Bewusst auf
   .nav-link/.nav-section-label eingegrenzt statt auf die bloße
   .bi-Klasse: seit Einbindung der echten Bootstrap-Icons-Schriftart
   (siehe App.razor) tragen auch Font-Icons anderer Komponenten die
   Klasse "bi" – ein ungescopter Selektor hier (margin-right, feste
   width/height für das alte Background-Image-Icon-System) würde
   deren Zentrierung/Größe an jeder anderen Stelle der App verzerren. */
.nav-link .bi,
.nav-section-label .bi {
    display: inline-block;
    position: relative;
    width: 1.1rem;
    height: 1.1rem;
    margin-right: 0.65rem;
    top: -1px;
    background-size: cover;
    opacity: 0.7;
}

.bi-house-door-fill-nav-menu {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='%234a3028' class='bi bi-house-door-fill' viewBox='0 0 16 16'%3E%3Cpath d='M6.5 14.5v-3.505c0-.245.25-.495.5-.495h2c.25 0 .5.25.5.5v3.5a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5v-7a.5.5 0 0 0-.146-.354L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293L8.354 1.146a.5.5 0 0 0-.708 0l-6 6A.5.5 0 0 0 1.5 7.5v7a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5Z'/%3E%3C/svg%3E");
}

.bi-plus-square-fill-nav-menu {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='%234a3028' class='bi bi-plus-square-fill' viewBox='0 0 16 16'%3E%3Cpath d='M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2zm6.5 4.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3a.5.5 0 0 1 1 0z'/%3E%3C/svg%3E");
}

.bi-person-badge-fill-nav-menu {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='%234a3028' viewBox='0 0 16 16'%3E%3Cpath d='M6.5 2a.5.5 0 0 0 0 1h3a.5.5 0 0 0 0-1h-3zM11 8a3 3 0 1 1-6 0 3 3 0 0 1 6 0z'/%3E%3Cpath d='M4.5 0A2.5 2.5 0 0 0 2 2.5V14a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V2.5A2.5 2.5 0 0 0 11.5 0h-7zM3 2.5A1.5 1.5 0 0 1 4.5 1h7A1.5 1.5 0 0 1 13 2.5v10.795a4.2 4.2 0 0 0-.776-.492C11.392 12.387 10.063 12 8 12s-3.392.387-4.224.803a4.2 4.2 0 0 0-.776.492V2.5z'/%3E%3C/svg%3E");
}

.bi-people-fill-nav-menu {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='%234a3028' viewBox='0 0 16 16'%3E%3Cpath d='M7 14s-1 0-1-1 1-4 5-4 5 3 5 4-1 1-1 1H7zm4-6a3 3 0 1 0 0-6 3 3 0 0 0 0 6z'/%3E%3Cpath fill-rule='evenodd' d='M5.216 14A2.238 2.238 0 0 1 5 13c0-1.355.68-2.75 1.936-3.72A6.325 6.325 0 0 0 5 9c-4 0-5 3-5 4s1 1 1 1h4.216z'/%3E%3Cpath d='M4.5 8a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5z'/%3E%3C/svg%3E");
}

.bi-box-seam-nav-menu {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='%234a3028' viewBox='0 0 16 16'%3E%3Cpath d='M8.186 1.113a.5.5 0 0 0-.372 0L1.846 3.5l2.404.961L10.404 2l-2.218-.887zm3.564 1.426L5.596 5 8 5.961 14.154 3.5l-2.404-.961zm3.25 1.7-6.5 2.6v7.922l6.5-2.6V4.24zM7.5 14.762V6.838L1 4.239v7.923l6.5 2.6zM7.443.184a1.5 1.5 0 0 1 1.114 0l7.129 2.852A.5.5 0 0 1 16 3.5v8.662a1 1 0 0 1-.629.928l-7.185 2.874a.5.5 0 0 1-.372 0L.63 13.09a1 1 0 0 1-.63-.928V3.5a.5.5 0 0 1 .314-.464L7.443.184z'/%3E%3C/svg%3E");
}

.bi-link-45deg-nav-menu {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='%234a3028' viewBox='0 0 16 16'%3E%3Cpath d='M4.715 6.542 3.343 7.914a3 3 0 1 0 4.243 4.243l1.828-1.829A3 3 0 0 0 8.586 5.5L8 6.086a1.002 1.002 0 0 0-.154.199 2 2 0 0 1 .861 3.337L6.88 11.45a2 2 0 1 1-2.83-2.83l.793-.792a4.018 4.018 0 0 1-.128-1.287z'/%3E%3Cpath d='M6.586 4.672A3 3 0 0 0 7.414 9.5l.775-.776a2 2 0 0 1-.896-3.346L9.12 3.55a2 2 0 1 1 2.83 2.83l-.793.792c.112.42.155.855.128 1.287l1.372-1.372a3 3 0 1 0-4.243-4.243L6.586 4.672z'/%3E%3C/svg%3E");
}

.bi-tag-fill-nav-menu {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='%234a3028' viewBox='0 0 16 16'%3E%3Cpath d='M2 1a1 1 0 0 0-1 1v4.586a1 1 0 0 0 .293.707l7 7a1 1 0 0 0 1.414 0l4.586-4.586a1 1 0 0 0 0-1.414l-7-7A1 1 0 0 0 6.586 1H2zm4 3.5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0z'/%3E%3C/svg%3E");
}

.bi-cart-fill-nav-menu {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='%234a3028' viewBox='0 0 16 16'%3E%3Cpath d='M0 1.5A.5.5 0 0 1 .5 1H2a.5.5 0 0 1 .485.379L2.89 3H14.5a.5.5 0 0 1 .491.592l-1.5 8A.5.5 0 0 1 13 12H4a.5.5 0 0 1-.491-.408L2.01 3.607 1.61 2H.5a.5.5 0 0 1-.5-.5zM5 12a2 2 0 1 0 0 4 2 2 0 0 0 0-4zm7 0a2 2 0 1 0 0 4 2 2 0 0 0 0-4zm-7 1a1 1 0 1 1 0 2 1 1 0 0 1 0-2zm7 0a1 1 0 1 1 0 2 1 1 0 0 1 0-2z'/%3E%3C/svg%3E");
}

.bi-plug-fill-nav-menu {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='%234a3028' viewBox='0 0 16 16'%3E%3Cpath d='M6 0a.5.5 0 0 1 .5.5V3h3V.5a.5.5 0 0 1 1 0V3h1a.5.5 0 0 1 .5.5v3A3.5 3.5 0 0 1 8.5 10c-.002.434-.01.845-.04 1.22-.041.514-.126 1.003-.317 1.424a2.083 2.083 0 0 1-.97 1.028C6.725 13.9 6.169 14 5.5 14c-.998 0-1.61.33-1.99.68-.269.242-.414.525-.416.82a.5.5 0 0 1-1-.02c.003-.678.279-1.338.817-1.822.54-.487 1.371-.658 2.589-.658.566 0 .898-.074 1.097-.168a1.077 1.077 0 0 0 .52-.568c.134-.31.203-.7.233-1.235.025-.347.033-.747.035-1.237A3.5 3.5 0 0 1 4 6.5v-3a.5.5 0 0 1 .5-.5h1V.5A.5.5 0 0 1 6 0z'/%3E%3C/svg%3E");
}

.bi-journal-text-nav-menu {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='%234a3028' viewBox='0 0 16 16'%3E%3Cpath d='M5 10.5a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 0 1h-2a.5.5 0 0 1-.5-.5zm0-2a.5.5 0 0 1 .5-.5h5a.5.5 0 0 1 0 1h-5a.5.5 0 0 1-.5-.5zm0-2a.5.5 0 0 1 .5-.5h5a.5.5 0 0 1 0 1h-5a.5.5 0 0 1-.5-.5zm0-2a.5.5 0 0 1 .5-.5h5a.5.5 0 0 1 0 1h-5a.5.5 0 0 1-.5-.5z'/%3E%3Cpath d='M3 0h10a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2v-1h1v1a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1H3a1 1 0 0 0-1 1v1H1V2a2 2 0 0 1 2-2z'/%3E%3Cpath d='M1 5v-.5a.5.5 0 0 1 1 0V5h.5a.5.5 0 0 1 0 1h-2a.5.5 0 0 1 0-1H1zm0 3v-.5a.5.5 0 0 1 1 0V8h.5a.5.5 0 0 1 0 1h-2a.5.5 0 0 1 0-1H1zm0 3v-.5a.5.5 0 0 1 1 0v.5h.5a.5.5 0 0 1 0 1h-2a.5.5 0 0 1 0-1H1z'/%3E%3C/svg%3E");
}

.bi-rocket-nav-menu {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='%234a3028' viewBox='0 0 16 16'%3E%3Cpath d='M8 2.5a5.487 5.487 0 0 0-4.131 1.869l-1.96 2.308A5.476 5.476 0 0 0 2 10.5C2 13.538 4.462 16 7.5 16s5.5-2.462 5.5-5.5c0-1.33-.462-2.576-1.305-3.571L9.5 4.6A5.487 5.487 0 0 0 8 2.5zm5.066 6.957a6.476 6.476 0 0 1 .434 2.043 2.5 2.5 0 1 0-2.5 0 6.476 6.476 0 0 1 .434-2.043A3.5 3.5 0 0 1 13.066 9.457z'/%3E%3C/svg%3E");
}

.bi-star-nav-menu {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='%234a3028' viewBox='0 0 16 16'%3E%3Cpath d='M3.612 15.443c-.386.198-.824-.149-.746-.592l.83-4.73L.173 6.765c-.329-.314-.158-.888.283-.95l4.898-.696L7.538.792c.197-.39.73-.39.927 0l2.184 4.327 4.898.696c.441.062.612.636.282.95l-3.522 3.356.83 4.73c.078.443-.36.79-.746.592L8 13.187l-4.389 2.256z'/%3E%3C/svg%3E");
}

.bi-cash-nav-menu {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='%234a3028' viewBox='0 0 16 16'%3E%3Cpath d='M8 10a2 2 0 1 0 0-4 2 2 0 0 0 0 4z'/%3E%3Cpath d='M0 4a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v8a1 1 0 0 1-1 1H1a1 1 0 0 1-1-1V4zm3 0a2 2 0 0 1-2 2v4a2 2 0 0 1 2 2h10a2 2 0 0 1 2-2V6a2 2 0 0 1-2-2H3z'/%3E%3C/svg%3E");
}

.bi-book-nav-menu {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='%234a3028' viewBox='0 0 16 16'%3E%3Cpath d='M1 2.828c.885-.37 2.154-.769 3.388-.893 1.33-.134 2.458.063 3.112.752v9.746c-.935-.53-2.12-.603-3.213-.493-1.18.12-2.37.461-3.287.811V2.828zm7.5-.141c.654-.689 1.782-.886 3.112-.752 1.234.124 2.503.523 3.388.893v9.923c-.918-.35-2.107-.692-3.287-.81-1.094-.111-2.278-.039-3.213.492V2.687zM8 1.783C7.015.936 5.587.81 4.287.94c-1.514.153-3.042.672-3.994 1.105A.5.5 0 0 0 0 2.5v11a.5.5 0 0 0 .707.455c.882-.4 2.303-.881 3.68-1.02 1.409-.142 2.59.087 3.223.877a.5.5 0 0 0 .78 0c.633-.79 1.814-1.019 3.222-.877 1.378.139 2.8.62 3.681 1.02A.5.5 0 0 0 16 13.5v-11a.5.5 0 0 0-.293-.455c-.952-.433-2.48-.952-3.994-1.105C10.413.809 8.985.936 8 1.783z'/%3E%3C/svg%3E");
}

.bi-collection-nav-menu {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='%234a3028' viewBox='0 0 16 16'%3E%3Cpath d='M2.5 3.5a.5.5 0 0 1 0-1h11a.5.5 0 0 1 0 1h-11zm2-2a.5.5 0 0 1 0-1h7a.5.5 0 0 1 0 1h-7zM0 13a1.5 1.5 0 0 0 1.5 1.5h13A1.5 1.5 0 0 0 16 13V6a1.5 1.5 0 0 0-1.5-1.5h-13A1.5 1.5 0 0 0 0 6v7zm1.5.5A.5.5 0 0 1 1 13V6a.5.5 0 0 1 .5-.5h13a.5.5 0 0 1 .5.5v7a.5.5 0 0 1-.5.5h-13z'/%3E%3C/svg%3E");
}

.bi-flower1-nav-menu {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='%234a3028' viewBox='0 0 16 16'%3E%3Cpath d='M8 16a4 4 0 0 0 4-4 4 4 0 0 0 0-8 4 4 0 0 0-8 0 4 4 0 1 0 4 12zm3-12a3 3 0 1 1-6 0 3 3 0 0 1 6 0zm-3 8a3 3 0 1 1 0-6 3 3 0 0 1 0 6zm5-5a3 3 0 1 1 0 6 3 3 0 0 1 0-6zM2 9a3 3 0 1 1 6 0A3 3 0 0 1 2 9zm5.5-1a1.5 1.5 0 1 0 1 2.6A1.5 1.5 0 0 0 7.5 8z'/%3E%3C/svg%3E");
}

.bi-stars-nav-menu {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='%234a3028' viewBox='0 0 16 16'%3E%3Cpath d='M7.657 6.247c.11-.33.576-.33.686 0l.645 1.937a2.89 2.89 0 0 0 1.829 1.828l1.936.645c.33.11.33.576 0 .686l-1.937.645a2.89 2.89 0 0 0-1.828 1.829l-.645 1.936a.361.361 0 0 1-.686 0l-.645-1.937a2.89 2.89 0 0 0-1.828-1.828l-1.937-.645a.361.361 0 0 1 0-.686l1.937-.645a2.89 2.89 0 0 0 1.828-1.828l.645-1.937zM3.794 1.148a.217.217 0 0 1 .412 0l.387 1.162c.173.518.579.924 1.097 1.097l1.162.387a.217.217 0 0 1 0 .412l-1.162.387A1.734 1.734 0 0 0 4.593 5.69l-.387 1.162a.217.217 0 0 1-.412 0L3.407 5.69A1.734 1.734 0 0 0 2.31 4.593l-1.162-.387a.217.217 0 0 1 0-.412l1.162-.387A1.734 1.734 0 0 0 3.407 2.31l.387-1.162zM10.863.099a.145.145 0 0 1 .274 0l.258.774c.115.346.386.617.732.732l.774.258a.145.145 0 0 1 0 .274l-.774.258a1.156 1.156 0 0 0-.732.732l-.258.774a.145.145 0 0 1-.274 0l-.258-.774a1.156 1.156 0 0 0-.732-.732L9.1 2.137a.145.145 0 0 1 0-.274l.774-.258c.346-.115.617-.386.732-.732L10.863.1z'/%3E%3C/svg%3E");
}

.bi-robot-nav-menu {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='%234a3028' viewBox='0 0 16 16'%3E%3Cpath d='M6 12.5a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 0 1h-3a.5.5 0 0 1-.5-.5ZM3 8.062C3 6.76 4.235 5.765 5.53 5.886a26.58 26.58 0 0 0 4.94 0C11.765 5.765 13 6.76 13 8.062v1.157a.933.933 0 0 1-.765.935c-.845.147-2.34.346-4.235.346-1.895 0-3.39-.2-4.235-.346A.933.933 0 0 1 3 9.219V8.062Zm4.542-.827a.25.25 0 0 0-.217.068l-.92.9a24.767 24.767 0 0 1-1.871-.183.25.25 0 0 0-.068.495c.55.076 1.232.149 2.02.193a.25.25 0 0 0 .189-.071l.754-.736.847 1.71a.25.25 0 0 0 .404.062l.932-.97a25.286 25.286 0 0 0 1.922-.188.25.25 0 0 0-.068-.495c-.538.074-1.207.145-1.98.189a.25.25 0 0 0-.166.076l-.754.785-.842-1.7a.25.25 0 0 0-.182-.134Z'/%3E%3Cpath d='M8.5 1.866a1 1 0 1 0-1 0V3h-2A4.5 4.5 0 0 0 1 7.5V8a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1v1a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2v-1a1 1 0 0 0 1-1V9a1 1 0 0 0-1-1v-.5A4.5 4.5 0 0 0 10.5 3h-2V1.866ZM14 7.5V13a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V7.5A3.5 3.5 0 0 1 5.5 4h5A3.5 3.5 0 0 1 14 7.5Z'/%3E%3C/svg%3E");
}

.bi-bag-fill-nav-menu {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='%234a3028' viewBox='0 0 16 16'%3E%3Cpath d='M8 1a2.5 2.5 0 0 1 2.5 2.5V4h-5v-.5A2.5 2.5 0 0 1 8 1zm3.5 3v-.5a3.5 3.5 0 1 0-7 0V4H1v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V4h-3.5z'/%3E%3C/svg%3E");
}

.bi-calendar-event-fill-nav-menu {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='%234a3028' viewBox='0 0 16 16'%3E%3Cpath d='M4 .5a.5.5 0 0 0-1 0V1H2a2 2 0 0 0-2 2v1h16V3a2 2 0 0 0-2-2h-1V.5a.5.5 0 0 0-1 0V1H4V.5zM16 14V5H0v9a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2zm-3.5-7h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5z'/%3E%3C/svg%3E");
}

.bi-bar-chart-fill-nav-menu {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='%234a3028' viewBox='0 0 16 16'%3E%3Cpath d='M1 11a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v3a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1v-3zm5-4a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v7a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1V7zm5-5a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1V2z'/%3E%3C/svg%3E");
}

.bi-award-fill-nav-menu {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='%234a3028' viewBox='0 0 16 16'%3E%3Cpath d='m8 0 1.669.864 1.858.282.842 1.68 1.337 1.32L13.4 6l.306 1.854-1.337 1.32-.842 1.68-1.858.282L8 12l-1.669-.864-1.858-.282-.842-1.68-1.337-1.32L2.6 6l-.306-1.854 1.337-1.32.842-1.68L6.331.864 8 0z'/%3E%3Cpath d='M4 11.794V16l4-1 4 1v-4.206l-2.018.306L8 13.126 6.018 12.1 4 11.794z'/%3E%3C/svg%3E");
}

.bi-tools-nav-menu {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='%234a3028' viewBox='0 0 16 16'%3E%3Cpath d='M1 0 0 1l2.2 3.081a1 1 0 0 0 .815.419h.07a1 1 0 0 1 .708.293l2.675 2.675-2.617 2.654A3.003 3.003 0 0 0 0 13a3 3 0 1 0 5.878-.851l2.654-2.617.968.968-.305.914a1 1 0 0 0 .242 1.023l3.27 3.27a.997.997 0 0 0 1.414 0l1.586-1.586a.997.997 0 0 0 0-1.414l-3.27-3.27a1 1 0 0 0-1.023-.242L10.5 9.5l-.96-.96 2.68-2.643A3.005 3.005 0 0 0 16 3c0-.269-.035-.53-.102-.777l-2.14 2.141-2.121-2.12 2.14-2.141A3 3 0 0 0 13 0a3.005 3.005 0 0 0-2.986 2.68L7.314 5.359l-2.675-2.675a1 1 0 0 1-.293-.708v-.07a1 1 0 0 0-.419-.814L1 0zm-.008 13a2 2 0 1 1 3.993.001A2 2 0 0 1 .992 13z'/%3E%3C/svg%3E");
}

.bi-gear-fill-nav-menu {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='%234a3028' viewBox='0 0 16 16'%3E%3Cpath d='M9.405 1.05c-.413-1.4-2.397-1.4-2.81 0l-.1.34a1.464 1.464 0 0 1-2.105.872l-.31-.17c-1.283-.698-2.686.705-1.987 1.987l.169.311c.446.82.023 1.841-.872 2.105l-.34.1c-1.4.413-1.4 2.397 0 2.81l.34.1a1.464 1.464 0 0 1 .872 2.105l-.17.31c-.698 1.283.705 2.686 1.987 1.987l.311-.169a1.464 1.464 0 0 1 2.105.872l.1.34c.413 1.4 2.397 1.4 2.81 0l.1-.34a1.464 1.464 0 0 1 2.105-.872l.31.17c1.283.698 2.686-.705 1.987-1.987l-.169-.311a1.464 1.464 0 0 1 .872-2.105l.34-.1c1.4-.413 1.4-2.397 0-2.81l-.34-.1a1.464 1.464 0 0 1-.872-2.105l.17-.31c.698-1.283-.705-2.686-1.987-1.987l-.311.169a1.464 1.464 0 0 1-2.105-.872l-.1-.34zM8 10.93a2.929 2.929 0 1 1 0-5.86 2.929 2.929 0 0 1 0 5.858z'/%3E%3C/svg%3E");
}

.bi-phone-fill-nav-menu {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='%234a3028' viewBox='0 0 16 16'%3E%3Cpath d='M3 2a2 2 0 0 1 2-2h6a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V2zm6 11a1 1 0 1 0-2 0 1 1 0 0 0 2 0z'/%3E%3C/svg%3E");
}

/* ============================================================
   Konto-Seiten (Anmelden, Kein Zugriff) – Layout siehe AccountLayout.razor
   ============================================================ */
.kb-account-title {
    font-family: var(--kb-font-display);
    font-size: 1.4rem;
    margin-bottom: 1rem;
}

.kb-account-hint {
    margin: 1rem 0 0;
    font-size: 0.85rem;
    color: var(--kb-text-secondary);
}

/* Passwortfeld mit „Anzeigen“-Schalter (NN/g „Stop Password Masking“: Tippfehler sichtbar machen
   statt blind wiederholen lassen). Umschalten in kb-input.js (data-kb-password-toggle). */
.kb-password-field {
    position: relative;
}

.kb-password-field .form-control {
    padding-right: 5.5rem;
}

.kb-password-toggle {
    position: absolute;
    top: 50%;
    right: 0.5rem;
    transform: translateY(-50%);
    border: none;
    background: none;
    padding: 0.25rem 0.5rem;
    font-size: 0.85rem;
    font-weight: 600;
    color: var(--kb-ctrl-primary);
    cursor: pointer;
}

.kb-password-toggle:hover {
    color: var(--kb-ctrl-primary-hover);
    text-decoration: underline;
}

.kb-account-denied h1 {
    font-family: var(--kb-font-display);
    font-size: 1.4rem;
}

/* Zweiter Anmeldeschritt: Code-Feld, Einrichtung der Authenticator-App, Wiederherstellungscodes. */
.kb-code-input {
    font-size: 1.4rem;
    letter-spacing: 0.3em;
    text-align: center;
}

.kb-setup-steps li {
    margin-bottom: 0.75rem;
}

.kb-setup-qr {
    display: block;
    margin: 0.75rem auto;
    image-rendering: pixelated;
}

.kb-setup-key,
.kb-recovery-codes code {
    font-size: 1rem;
    color: var(--kb-text-primary);
    user-select: all;
}

.kb-recovery-codes {
    columns: 2;
    margin: 1rem 0 1.5rem;
}

/* Abmelden-Knopf (LogoutForm) – Verwaltung und Partnerinnen-Seiten */
.kb-logout-form {
    margin: 0;
}

.kb-logout-btn {
    border: 1px solid var(--kb-border-soft);
    background: var(--kb-surface-strong);
    color: var(--kb-text-primary);
    font-size: 0.85rem;
    font-weight: 500;
    padding: 0.3rem 0.85rem;
    border-radius: var(--kb-radius-button);
    cursor: pointer;
}

.kb-logout-btn:hover {
    background: var(--kb-accent-light);
}
