/* public/css/app.css */

:root {
    --plan-cell-min-width: 120px;
}

/* ── Allgemein ─────────────────────────────────────────── */
body { font-size: .925rem; min-width: 1024px; }
/* Tabellen in Cards: card-radius nicht von Tabellenecken überlappen lassen.
   Dropdowns in Cards: app.js initialisiert diese mit Popper strategy:fixed,
   damit sie trotz overflow:hidden korrekt angezeigt werden. */
.card { overflow: hidden; }

.table th { font-size: .82rem; text-transform: uppercase; letter-spacing: .04em; color: #6c757d; white-space: nowrap; }
.btn-xs { padding: .15rem .4rem; font-size: .75rem; line-height: 1.4; border-radius: .2rem; }

/* Standort-Multi-Filter: versteckte Spalten */
.standort-hidden { display: none !important; }

/* Drag & Drop Plan-Matrix */
td.plan-zelle[data-darf-bearbeiten] { cursor: default; }
.plan-einheit[draggable="true"] { cursor: grab; }
.plan-einheit[draggable="true"]:active { cursor: grabbing; }
.drag-quelle { opacity: .4; }
/* Drag & Drop: Zielzellen-Hervorhebung
   .drag-aktiv im Selektor → Spezifität (0,4,2) schlägt heute/plan-pin-aktiv (0,3,3) */
.plan-table.drag-aktiv tbody td.plan-zelle.drag-ziel-gueltig {
    background-color: #fdf6dc !important;
    --bs-table-bg: #fdf6dc;
    --bs-table-bg-state: #fdf6dc;
}
.plan-table.drag-aktiv tbody td.plan-zelle.drag-hover {
    background-color: #f5e38a !important;
    --bs-table-bg: #f5e38a;
    --bs-table-bg-state: #f5e38a;
    box-shadow: inset 0 0 0 2px #d09b3e;
}

/* ── PLAN-Matrix ────────────────────────────────────────── */
.plan-wrapper {
    overflow-x: auto;
    overflow-y: auto;
    width: 100%;
    max-height: calc(100vh - 220px);
    -webkit-overflow-scrolling: touch;
    border: 1px solid #dee2e6;
    border-radius: 0 0 4px 4px;
}

.plan-scroll-top {
    overflow-x: scroll;
    overflow-y: hidden;
    width: 100%;
    height: 16px;
    border: 1px solid #dee2e6;
    border-bottom: none;
    border-radius: 4px 4px 0 0;
    background: #f8f9fa;
}

.plan-scroll-top-inner {
    height: 1px;
}

.plan-table {
    border-collapse: separate;
    border-spacing: 0;
    min-width: max-content;
    font-size: .82rem;
}

.plan-table thead th {
    position: sticky;
    top: 0;
    z-index: 10;
    background: #495057;
    color: #fff;
    padding: 6px 8px;
    white-space: nowrap;
    border-right: 1px solid #dee2e6;
    text-transform: none;
    letter-spacing: 0;
}

.plan-table thead th.col-datum {
    position: sticky;
    left: 0;
    z-index: 20;
    min-width: 110px;
    background: #495057 !important;
}

.plan-table tbody td {
    padding: 4px 6px;
    border-right: 1px solid #dee2e6;
    border-bottom: 1px solid #dee2e6;
    vertical-align: top;
    min-width: var(--plan-cell-min-width);
}

.plan-table tbody td.td-datum {
    position: sticky;
    left: 0;
    background: #f8f9fa;
    z-index: 5;
    min-width: 110px;
    white-space: nowrap;
    font-weight: 600;
}
/* Datumszellen sind klickbar (Tag fixieren/lösen) – nur im PLAN, nicht in MEET */
#planTabelle tbody tr:not([data-datum="monat"]) > td.td-datum {
    cursor: pointer;
}

/* ── table-striped: gerade Zeilen färben, ungerade bleiben weiß ─────────── */
.table-striped > tbody > tr:nth-of-type(odd) > * {
    --bs-table-color-type: initial;
    --bs-table-bg-type: initial;
}
.table-striped > tbody > tr:nth-of-type(even) > * {
    --bs-table-color-type: var(--bs-table-striped-color);
    --bs-table-bg-type: var(--bs-table-striped-bg);
}

/* ── Globale Hover-Farbe für alle Tabellen (überschreibt Bootstrap table-hover) ── */
.table-hover > tbody > tr:hover > * {
    --bs-table-accent-bg: #ececec;
    --bs-table-hover-bg: #ececec;
    background-color: #ececec !important;
}
.plan-table tbody tr:hover td,
.terminplan-table tbody tr:hover td {
    background-color: #ececec !important;
}
/* Während Drag: Zeilen-Hover deaktivieren damit Drag-Farben sichtbar sind */
.plan-table.drag-aktiv tbody tr:hover td {
    background-color: unset !important;
    --bs-table-accent-bg: unset;
    --bs-table-hover-bg: unset;
}

.plan-table tbody tr.wochenende td         { background-color: #f0f4ff; }
.plan-table tbody tr.wochenende td.td-datum{ background-color: #e8eeff; }
.plan-table tbody tr.heute td.td-datum     { background: #d09b3e !important; color: #fff; }
/* Wochentag-Kürzel (text-muted) im Heute-Tag ebenfalls weiß – gilt für alle Tabellen */
tr.heute td.td-datum .text-muted           { color: rgba(255,255,255,.85) !important; }
/* Aktiv gepinnter Tag: permanenter Hover-Effekt auf allen Zellen außer Datumszelle
   (die Datumszelle behält die Senfgelb-Hervorhebung über tr.heute td.td-datum) */
.plan-table tbody tr.plan-pin-aktiv > td:not(.td-datum) { background-color: #ececec !important; }
/* MEET: heute-Zeile grau hervorheben (plan-zelle = Kursspalten in plan-table) */
.plan-table tbody tr.heute td.plan-zelle               { background-color: #ececec !important; }

/* Dubletten: nur die betroffene Einheit markieren, nie die ganze Zeile */
.plan-einheit.ist-dublette,
.plan-einheit.ist-dublette-zugelassen {
    background: #fff3f3 !important;
}
.dublette-status-icon {
    position: absolute;
    top: 2px;
    right: 3px;
    font-size: .6rem;
    line-height: 1;
}


/* Termin-Einheit in PLAN-Zelle */
.plan-einheit {
    position: relative;
    background: #fff;
    border-left: 3px solid #013e55;
    padding: 2px 5px;
    margin-bottom: 2px;
    border-radius: 2px;
    line-height: 1.3;
    cursor: pointer;
}
.plan-einheit:hover  { background: #ddeaf0; }
.plan-einheit .fach  { font-weight: 600; }
.plan-einheit .dozent{ color: #495057; font-size: .78rem; }

/* Leere Zelle - klickbar */
.plan-cell-leer {
    display: block;
    min-height: 28px;
    cursor: pointer;
    border-radius: 2px;
}
.plan-cell-leer:hover { background: #fff; }

/* ── Terminplan ─────────────────────────────────────────── */
.terminplan-kopf {
    background: #f8f9fa;
    border: 1px solid #dee2e6;
    border-radius: 6px;
    padding: 1rem 1.25rem;
    margin-bottom: 1.5rem;
}

.terminplan-table td, .terminplan-table th {
    padding: 5px 8px;
    vertical-align: middle;
}

.terminplan-table tr.klausur td  { background: #fff8dc; font-weight: 600; }

.einheit-block {
    display: flex;
    flex-wrap: wrap;
    gap: 4px;
    align-items: center;
    margin-bottom: 4px;
    line-height: 1.3;
}

/* ── Konflikt-Badge ─────────────────────────────────────── */
.konflikt-badge {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    background: #c61b36;
    color: white;
    padding: 1px 7px;
    border-radius: 10px;
    font-size: .75rem;
    font-weight: 600;
}

.konflikt-flag {
    padding: 1px 6px 1px 6px !important;
}

/* ── Druckansicht ───────────────────────────────────────── */
@media print {
    .navbar, .btn, .no-print, footer { display: none !important; }
    .terminplan-table { font-size: 9pt; }
    body { background: white; }
}

/* ── Terminplan: Datumszelle (spiegelt plan-table td-datum) ──── */
.terminplan-table tbody td.td-datum {
    background: #f8f9fa;
    min-width: 110px;
    white-space: nowrap;
    font-weight: 600;
    font-size: .82rem;
}
.terminplan-table tbody tr.wochenende td           { background-color: #f0f4ff; }
.terminplan-table tbody tr.wochenende td.td-datum  { background-color: #e8eeff; }
/* Bootstrap 5.3 nutzt box-shadow: inset 0 0 0 9999px var(--bs-table-bg-state) als Overlay –
   box-shadow: none deaktiviert das für hover UND non-hover vollständig */
.terminplan-table tbody tr.heute td.td-datum {
    background:  #d09b3e !important;
    color:       #fff;
    box-shadow:  none !important;
}
.terminplan-table tbody tr.heute td:not(.td-datum) { background-color: #ececec; }
.plan-kurs-th {
    border-bottom: 2px solid rgba(0,0,0,.2);
}

/* ── PLAN: Datums-Gruppen-Header ────────────────────────── */
.plan-datum-gruppe {
    background: #e9ecef;
    font-size: .75rem;
    font-weight: 700;
}

/* ── PLAN: Kurstyp-Filter-Button ────────────────────────── */
.plan-filter-btn {
    background: none;
    border: none;
    font-size: .8rem;
}

/* ── BANNAS Brand Colors ─────────────────────────────────
   Dunkelblau  #013e55  → Buttons, UI-Elemente, Badges
   Logo-Blau   #1084b0  → Links, Text-Akzente
   Signalrot   #c61b36  → Danger
   Senfgelb    #d09b3e  → Warning (weißer Text per Styleguide)
   Anthrazit   #353535  → Fließtext

   Bootstrap 5.3 setzt Button-Farben über lokale CSS-Variablen mit
   gleicher Spezifität – Browser-Cache oder CDN-Timing kann dazu führen,
   dass Bootstrap gewinnt. Daher ZUSÄTZLICH explizite background-color /
   border-color / color für alle Button-Zustände gesetzt.
   ──────────────────────────────────────────────────────── */
:root {
    --bs-primary:              #013e55;
    --bs-primary-rgb:          1, 62, 85;
    --bs-danger:               #c61b36;
    --bs-danger-rgb:           198, 27, 54;
    --bs-warning:              #d09b3e;
    --bs-warning-rgb:          208, 155, 62;
    --bs-info:                 #1084b0;
    --bs-info-rgb:             16, 132, 176;
    --bs-link-color:           #1084b0;
    --bs-link-hover-color:     #0c6b8e;
    --bs-body-color:           #353535;
    --bs-body-color-rgb:       53, 53, 53;
    --bs-code-color:           #c61b36;
}

/* Links */
a { color: #1084b0; }
a:hover { color: #0c6b8e; }

/* text-primary → Logo-Blau (Akzente, Icons) */
.text-primary { color: #1084b0 !important; }

/* ── bg-Utilities (Navbar, Modal-Header etc.) ── */
.bg-primary { background-color: #013e55 !important; }
.bg-danger  { background-color: #c61b36 !important; }
.bg-warning { background-color: #d09b3e !important; }
.bg-info    { background-color: #1084b0 !important; }

/* ── Buttons: Primary ── */
.btn-primary {
    --bs-btn-bg:                  #013e55;
    --bs-btn-border-color:        #013e55;
    --bs-btn-color:               #fff;
    --bs-btn-hover-bg:            #012e40;
    --bs-btn-hover-border-color:  #012e40;
    --bs-btn-hover-color:         #fff;
    --bs-btn-active-bg:           #012030;
    --bs-btn-active-border-color: #012030;
    --bs-btn-active-color:        #fff;
    --bs-btn-focus-shadow-rgb:    1, 62, 85;
    background-color: #013e55 !important;
    border-color:     #013e55 !important;
    color:            #fff    !important;
}
.btn-primary:hover,
.btn-primary:focus-visible { background-color: #012e40 !important; border-color: #012e40 !important; }
.btn-primary:active,
.btn-primary.active,
.show > .btn-primary       { background-color: #012030 !important; border-color: #012030 !important; }

.btn-outline-primary {
    --bs-btn-color:               #013e55;
    --bs-btn-border-color:        #013e55;
    --bs-btn-hover-bg:            #013e55;
    --bs-btn-hover-border-color:  #013e55;
    --bs-btn-hover-color:         #fff;
    --bs-btn-active-bg:           #013e55;
    --bs-btn-active-border-color: #013e55;
    --bs-btn-active-color:        #fff;
    --bs-btn-focus-shadow-rgb:    1, 62, 85;
    border-color: #013e55 !important;
    color:        #013e55 !important;
}
.btn-outline-primary:hover,
.btn-outline-primary:focus-visible,
.btn-outline-primary:active,
.btn-outline-primary.active,
.show > .btn-outline-primary {
    background-color: #013e55 !important;
    border-color:     #013e55 !important;
    color:            #fff    !important;
}

/* ── Buttons: Danger ── */
.btn-danger {
    --bs-btn-bg:                  #c61b36;
    --bs-btn-border-color:        #c61b36;
    --bs-btn-color:               #fff;
    --bs-btn-hover-bg:            #a51730;
    --bs-btn-hover-border-color:  #a51730;
    --bs-btn-hover-color:         #fff;
    --bs-btn-active-bg:           #8e1428;
    --bs-btn-active-border-color: #8e1428;
    --bs-btn-active-color:        #fff;
    --bs-btn-focus-shadow-rgb:    198, 27, 54;
    background-color: #c61b36 !important;
    border-color:     #c61b36 !important;
    color:            #fff    !important;
}
.btn-danger:hover,
.btn-danger:focus-visible  { background-color: #a51730 !important; border-color: #a51730 !important; }
.btn-danger:active,
.btn-danger.active,
.show > .btn-danger        { background-color: #8e1428 !important; border-color: #8e1428 !important; }

.btn-outline-danger {
    --bs-btn-color:               #c61b36;
    --bs-btn-border-color:        #c61b36;
    --bs-btn-hover-bg:            #c61b36;
    --bs-btn-hover-border-color:  #c61b36;
    --bs-btn-hover-color:         #fff;
    --bs-btn-active-bg:           #c61b36;
    --bs-btn-active-border-color: #c61b36;
    --bs-btn-active-color:        #fff;
    --bs-btn-focus-shadow-rgb:    198, 27, 54;
    border-color: #c61b36 !important;
    color:        #c61b36 !important;
}
.btn-outline-danger:hover,
.btn-outline-danger:focus-visible,
.btn-outline-danger:active,
.btn-outline-danger.active,
.show > .btn-outline-danger {
    background-color: #c61b36 !important;
    border-color:     #c61b36 !important;
    color:            #fff    !important;
}

/* ── Buttons: Warning (weißer Text per Styleguide) ── */
.btn-warning {
    --bs-btn-bg:                  #d09b3e;
    --bs-btn-border-color:        #d09b3e;
    --bs-btn-color:               #fff;
    --bs-btn-hover-bg:            #b8882f;
    --bs-btn-hover-border-color:  #b8882f;
    --bs-btn-hover-color:         #fff;
    --bs-btn-active-bg:           #a07828;
    --bs-btn-active-border-color: #a07828;
    --bs-btn-active-color:        #fff;
    --bs-btn-focus-shadow-rgb:    208, 155, 62;
    background-color: #d09b3e !important;
    border-color:     #d09b3e !important;
    color:            #fff    !important;
}
.btn-warning:hover,
.btn-warning:focus-visible { background-color: #b8882f !important; border-color: #b8882f !important; color: #fff !important; }
.btn-warning:active,
.btn-warning.active,
.show > .btn-warning       { background-color: #a07828 !important; border-color: #a07828 !important; color: #fff !important; }

.btn-outline-warning {
    --bs-btn-color:               #d09b3e;
    --bs-btn-border-color:        #d09b3e;
    --bs-btn-hover-bg:            #d09b3e;
    --bs-btn-hover-border-color:  #d09b3e;
    --bs-btn-hover-color:         #fff;
    --bs-btn-active-bg:           #d09b3e;
    --bs-btn-active-border-color: #d09b3e;
    --bs-btn-active-color:        #fff;
    --bs-btn-focus-shadow-rgb:    208, 155, 62;
    border-color: #d09b3e !important;
    color:        #d09b3e !important;
}
.btn-outline-warning:hover,
.btn-outline-warning:focus-visible,
.btn-outline-warning:active,
.btn-outline-warning.active,
.show > .btn-outline-warning {
    background-color: #d09b3e !important;
    border-color:     #d09b3e !important;
    color:            #fff    !important;
}

/* ── Badges ── */
.badge.bg-primary,   .badge.text-bg-primary { background-color: #013e55 !important; color: #fff !important; }
.badge.bg-danger,    .badge.text-bg-danger  { background-color: #c61b36 !important; color: #fff !important; }
.badge.bg-warning,   .badge.text-bg-warning { background-color: #d09b3e !important; color: #fff !important; }
.fs-inherit { font-size: 0.8em !important; }

/* ── Formular-Fokus (form-control, form-select, form-check-input identisch) ── */
.form-control:focus,
.form-select:focus,
.form-check-input:focus {
    border-color: #013e55 !important;
    box-shadow: 0 0 0 .25rem rgba(1, 62, 85, .25) !important;
}

/* ── Placeholder-Farbe: hell genug um klar als Vorgabe erkennbar zu sein ── */
::placeholder { color: #a9b0b8 !important; opacity: 1; }

/* ── Alerts ── */
.alert-primary {
    --bs-alert-color:         #013e55;
    --bs-alert-bg:            #e0edf3;
    --bs-alert-border-color:  #b3cdd7;
}
.alert-danger {
    --bs-alert-color:         #7b1122;
    --bs-alert-bg:            #faeaed;
    --bs-alert-border-color:  #f0b8c1;
}
.alert-warning {
    --bs-alert-color:         #7a5b24;
    --bs-alert-bg:            #f9f0e0;
    --bs-alert-border-color:  #edd8a5;
}
.alert-info {
    --bs-alert-color:         #0a5070;
    --bs-alert-bg:            #dceef6;
    --bs-alert-border-color:  #a8d4e8;
}

/* ── Info-Farbe → Logo-Blau #1084b0 ── */
.text-info   { color: #1084b0 !important; }
.border-info { border-color: #1084b0 !important; }

.btn-info {
    --bs-btn-bg:                  #1084b0;
    --bs-btn-border-color:        #1084b0;
    --bs-btn-color:               #fff;
    --bs-btn-hover-bg:            #0c6b8e;
    --bs-btn-hover-border-color:  #0c6b8e;
    --bs-btn-hover-color:         #fff;
    --bs-btn-focus-shadow-rgb:    16, 132, 176;
    background-color: #1084b0 !important;
    border-color:     #1084b0 !important;
    color:            #fff    !important;
}
.btn-info:hover,
.btn-info:focus-visible { background-color: #0c6b8e !important; border-color: #0c6b8e !important; }

.btn-outline-info {
    --bs-btn-color:               #1084b0;
    --bs-btn-border-color:        #1084b0;
    --bs-btn-hover-bg:            #1084b0;
    --bs-btn-hover-border-color:  #1084b0;
    --bs-btn-hover-color:         #fff;
    --bs-btn-active-bg:           #1084b0;
    --bs-btn-active-border-color: #1084b0;
    --bs-btn-active-color:        #fff;
    --bs-btn-focus-shadow-rgb:    16, 132, 176;
    border-color: #1084b0 !important;
    color:        #1084b0 !important;
}
.btn-outline-info:hover,
.btn-outline-info:focus-visible,
.btn-outline-info:active,
.btn-outline-info.active,
.show > .btn-outline-info {
    background-color: #1084b0 !important;
    border-color:     #1084b0 !important;
    color:            #fff    !important;
}

/* ── Checkboxen / Radios (form-check-input) → Dunkelblau #013e55 ── */
.form-check-input:checked {
    background-color: #013e55 !important;
    border-color:     #013e55 !important;
}

/* ── text-danger explizit (Bootstrap kompiliert dies ggf. hardcoded) ── */
.text-danger { color: #c61b36 !important; }

/* ── <code>-Farbe → Signalrot #c61b36 (ersetzt Bootstrap-Pink #d63384) ── */
code { color: #c61b36; }

/* ── Dubletten-Spaltenfilter ─────────────────────────────────────────────── */
.kurs-col-hidden    { display: none !important; }
.meine-kurse-hidden { display: none !important; }

.dublette-icon { cursor: pointer; }
.dublette-icon.filter-aktiv i { color: #495057 !important; }

/* ── Admin-Suchfeld X-Button ─────────────────────────────────────────────── */
.btn-admin-suche-clear {
    border-color: #dee2e6;
    color: #6c757d;
}
.btn-admin-suche-clear:hover,
.btn-admin-suche-clear:active {
    background: #6c757d;
    border-color: #6c757d;
    color: #fff;
}

/* ── Benutzer-Tabellen: Name fix, kleine Spalten fix, Rest variabel ─────── */
.benutzer-tabelle              { table-layout: fixed; width: 100%; min-width: 900px; }
.benutzer-tabelle .col-bname   { width: 300px; }
.benutzer-tabelle .col-bemail  { /* auto */ }
.benutzer-tabelle .col-blogin  { width: 130px; }
.benutzer-tabelle .col-bstatus { width:  75px; }
.benutzer-tabelle .col-bpw     { /* auto */ }
.benutzer-tabelle .col-bakt    { width:  90px; }

/* ── Admin-Tabellen: Spaltenbreiten ──────────────────────────────────────── */

/* Status-Spalte 80px (shared) */
.kursvarianten-tabelle .col-kvstatus,
.faecher-tabelle       .col-fstatus,
.kursarten-tabelle     .col-kastatus,
.orte-tabelle          .col-ostatus,
.standorte-tabelle     .col-sstatus,
.kurse-tabelle         .col-kstatus,
.dozenten-tabelle      .col-dstatus  { width: 80px; }

/* Aktionen-Spalte 90px (shared: kleine Listen) */
.kursvarianten-tabelle .col-kvakt,
.faecher-tabelle       .col-fakt,
.kursarten-tabelle     .col-kaakt,
.orte-tabelle          .col-oakt     { width: 90px; }

/* Individuelle Breiten */
.col-kuerzel                         { width: 160px; }
.orte-tabelle          .col-okuerzel { width: 160px; }
.standorte-tabelle     .col-sakt     { width: 130px; }
.dozenten-tabelle      .col-dkurstyp { width: 110px; }
.dozenten-tabelle      .col-dakt     { width: 130px; }
.kurse-tabelle         .col-kort     { width:  60px; }
.kurse-tabelle         .col-kakt     { width: 170px; }
.planungsjahre-tabelle .col-pjstatus { width: 200px; }
.planungsjahre-tabelle .col-pjakt    { width: 150px; }
.pdf-liste-tabelle     .col-pdfakt   { width: 317px; }

/* ── PDF-Filterleiste responsiv (< 1300px = 2 Zeilen, ≥ 1300px = 1 Zeile) ── */
.pdf-filterbar                 { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
.pdf-fb-actions                { order: 1; flex-basis: 100%; justify-content: flex-end; margin-bottom: 8px; }
.pdf-fb-filters                { order: 2; }
.pdf-fb-search                 { order: 3; margin-left: auto; }
.pdf-fb-filters .form-select   { width: auto; min-width: 130px; }
@media (min-width: 1300px) {
    .pdf-fb-actions            { order: 3; flex-basis: auto; justify-content: flex-start; margin-bottom: 0; margin-left: 0; }
    .pdf-fb-filters            { order: 1; }
    .pdf-fb-search             { order: 2; margin-left: auto; }
}

/* ── Comboboxen (Plan-Modal: Dozent + Fach) ──────────────────────────────── */
.dozent-dropdown .dozent-option,
.fach-dropdown .fach-option               { cursor: pointer; border-top: 1px solid #f0f0f0; }
.dozent-dropdown .dozent-option:first-child,
.fach-dropdown .fach-option:first-child   { border-top: none; }
.dozent-dropdown .dozent-option:hover,
.fach-dropdown .fach-option:hover         { background: #f0f6fa; }
.dozent-dropdown .dozent-option-leer:hover,
.fach-dropdown .fach-option-leer:hover    { background: #f8f9fa; }
