/* Der animierte Verlauf liegt hinter dem Inhalt: Body transparent halten,
   damit er nicht überdeckt wird. html traegt die Rueckfallfarbe. */
html {
    background-color: #f8f9fa;
}
body {
    background-color: transparent;
}

/* Form State Styling */
.form-control-required-empty,
.form-control-required-filled,
.form-control-optional-empty,
.form-control-optional-filled {
    transition: border-color 0.2s ease-in-out, background-color 0.2s ease-in-out,
        box-shadow 0.2s ease-in-out;
}

.form-control-required-empty {
    border-color: var(--bs-danger) !important;
    background-color: var(--bs-body-bg);
    box-shadow: 0 0 0 0.125rem rgba(var(--bs-danger-rgb), 0.15);
}

.form-control-required-filled {
    border-color: var(--bs-success) !important;
    background-color: rgba(var(--bs-success-rgb), 0.12);
    box-shadow: 0 0 0 0.125rem rgba(var(--bs-success-rgb), 0.25);
}

.form-control-optional-empty {
    border-color: var(--bs-secondary) !important;
    background-color: var(--bs-body-bg);
    box-shadow: 0 0 0 0.125rem rgba(var(--bs-secondary-rgb), 0.1);
}

.form-control-optional-filled {
    border-color: var(--bs-success) !important;
    background-color: rgba(var(--bs-success-rgb), 0.12);
    box-shadow: 0 0 0 0.125rem rgba(var(--bs-success-rgb), 0.2);
}

/* Avatar Cropper */
.user-avatar {
    background-color: #f8f9fa;
    color: #4f5d75;
    font-size: 0.75rem;
}

.user-avatar img {
    object-fit: cover;
}

.user-avatar__initials {
    line-height: 1;
}

.avatar-crop-stage {
    position: relative;
    background-color: #f8f9fa;
    border: 1px dashed rgba(0, 0, 0, 0.15);
    border-radius: 1rem;
    overflow: hidden;
    min-height: 240px;
}

.avatar-crop-stage img {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
}

.avatar-crop-stage .cropper-container,
.avatar-crop-stage .cropper-wrap-box,
.avatar-crop-stage .cropper-crop-box {
    width: 100% !important;
    height: 100% !important;
}

.avatar-crop-stage .cropper-view-box,
.avatar-crop-stage .cropper-face {
    border-radius: 50%;
}

.avatar-crop-placeholder {
    position: absolute;
    inset: 0;
}

/* Responsive Darstellung für Übersichten */
.tenants-table .badge,
.users-table .badge {
    display: inline-flex;
    align-items: center;
    gap: 0.25rem;
}

@media (max-width: 767.98px) {
    .tenants-table table,
    .users-table table {
        border: 0;
    }

    .tenants-table thead,
    .users-table thead {
        display: none;
    }

    .tenants-table tbody tr,
    .users-table tbody tr {
        display: block;
        margin-bottom: 1rem;
        border: 1px solid rgba(0, 0, 0, 0.075);
        border-radius: 0.75rem;
        padding: 1rem;
        background-color: #fff;
        box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.05);
    }

    .tenants-table tbody tr td,
    .users-table tbody tr td {
        display: flex;
        justify-content: space-between;
        align-items: flex-start;
        padding: 0.35rem 0;
        border-top: none;
        font-size: 0.95rem;
    }

    .tenants-table tbody tr td::before,
    .users-table tbody tr td::before {
        content: attr(data-label);
        flex: 0 0 45%;
        font-weight: 600;
        color: #6c757d;
        padding-right: 0.5rem;
    }

    .tenants-table tbody tr td.table-actions,
    .users-table tbody tr td.table-actions {
        flex-direction: column;
    }

    .tenants-table tbody tr td.table-actions::before,
    .users-table tbody tr td.table-actions::before {
        margin-bottom: 0.5rem;
    }

    .tenants-table tbody tr td.table-actions .btn-group,
    .users-table tbody tr td.table-actions .btn-group {
        width: 100%;
        display: flex;
        flex-wrap: wrap;
        gap: 0.5rem;
    }

    .tenants-table tbody tr td.table-actions .btn-group .btn,
    .users-table tbody tr td.table-actions .btn-group .btn {
        flex: 1 1 auto;
    }
}

/* Buchungskalender: Mobile Toolbar in 3 zentrierten Zeilen */
@media (max-width: 991.98px) {
    .roomSimple-fullcalendar.fc .fc-toolbar.fc-header-toolbar {
        margin-bottom: 0.6rem !important;
    }

    .roomSimple-fullcalendar.fc .fc-toolbar-title {
        font-size: 1rem !important;
        line-height: 1.2 !important;
        margin: 0 !important;
        text-align: center !important;
    }

    .roomSimple-fullcalendar.fc .fc-button-group {
        margin-right: 0.35rem !important;
        flex-wrap: wrap !important;
        justify-content: center !important;
    }

    .roomSimple-fullcalendar.fc .fc-toolbar-chunk .fc-button {
        padding: 0.3rem 0.5rem !important;
        font-size: 0.8rem !important;
    }
}

/* Kalender-Events: Zeiger signalisiert Klickbarkeit */
.roomSimple-fullcalendar .fc-event {
    cursor: pointer;
}

/* Zeitraster kompakt halten, damit die Kernzeit (ca. 7:45-18:15 Uhr)
   komplett im sichtbaren Ausschnitt liegt; Randzeiten per Scrollen erreichbar */
.roomSimple-fullcalendar:not(.rs-fullday) .fc-timegrid-slot {
    height: 1.05em;
}

/* Genehmigungs-Workflow: offene Buchungsanfragen im Kalender kenntlich machen */
.roomSimple-fullcalendar .roomsimple-event-pending {
    opacity: 0.65;
    border-style: dashed !important;
    border-width: 2px !important;
}

/* Generisches Stacked-Table-Muster für Smartphones (Buchungen, Elemente):
   gleiche Darstellung wie users-/tenants-table, per Klasse wiederverwendbar */
.stacked-table .badge {
    display: inline-flex;
    align-items: center;
    gap: 0.25rem;
}

@media (max-width: 767.98px) {
    .stacked-table table {
        border: 0;
    }

    .stacked-table thead {
        display: none;
    }

    .stacked-table tbody tr {
        display: block;
        margin-bottom: 1rem;
        border: 1px solid rgba(0, 0, 0, 0.075);
        border-radius: 0.75rem;
        padding: 1rem;
        background-color: #fff;
        box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.05);
    }

    /* Eingeklappte Serien-Termine bleiben ausgeblendet */
    .stacked-table tbody tr.collapse:not(.show) {
        display: none;
    }

    .stacked-table tbody tr td {
        display: flex;
        justify-content: space-between;
        align-items: flex-start;
        padding: 0.35rem 0;
        border-top: none;
        font-size: 0.95rem;
    }

    .stacked-table tbody tr td::before {
        content: attr(data-label);
        flex: 0 0 45%;
        font-weight: 600;
        color: #6c757d;
        padding-right: 0.5rem;
    }

    .stacked-table tbody tr td.table-actions {
        flex-direction: column;
    }

    .stacked-table tbody tr td.table-actions::before {
        margin-bottom: 0.5rem;
    }

    .stacked-table tbody tr td.table-actions .btn-group {
        width: 100%;
        display: flex;
        flex-wrap: wrap;
        gap: 0.5rem;
    }

    .stacked-table tbody tr td.table-actions .btn-group .btn {
        flex: 1 1 auto;
    }

    /* Einrückung der Serien-Termine auf dem Smartphone zurücknehmen */
    .stacked-table tbody tr td .ps-4 {
        padding-left: 0 !important;
    }
}

/* Serientermine: Verbindungslinie vom Serienkopf zu den Terminen */
@media (min-width: 768px) {
    .stacked-table tbody tr.series-head > td:first-child,
    .stacked-table tbody tr.series-occurrence > td:first-child {
        border-left: 3px solid var(--bs-primary);
    }
}

@media (max-width: 767.98px) {
    .stacked-table tbody tr.series-head {
        border-left: 3px solid var(--bs-primary);
        margin-bottom: 0.5rem;
    }

    /* Ausgerollte Serientermine: eingerückt und über die Linie
       sichtbar mit dem Serienkopf verbunden */
    .stacked-table tbody tr.series-occurrence {
        margin-left: 1.25rem;
        margin-bottom: 0.5rem;
        border-left: 3px solid var(--bs-primary);
        border-top-left-radius: 0.25rem;
        border-bottom-left-radius: 0.25rem;
    }
}

/* Honeypot-Feld: außerhalb des Viewports statt display:none,
   damit einfache Bots es weiterhin "sehen" und ausfüllen */
.rs-extra {
    position: absolute !important;
    left: -9999px !important;
    top: -9999px !important;
    height: 1px;
    width: 1px;
    overflow: hidden;
}

/* Raumansicht: Plan-Karten und Plan-Container */
.rs-plan-card {
    transition: transform 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
}
.rs-plan-card:hover {
    transform: translateY(-2px);
    box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;
}
.rs-plan-wrap {
    user-select: none;
}
.rs-plan-wrap img {
    pointer-events: none;
}

/* Mini-Monatskalender der Raumansicht */
.rs-mini-cal {
    display: grid;
    grid-template-columns: repeat(7, 1fr);
    gap: 2px;
    text-align: center;
}
.rs-cal-head {
    font-size: 0.7rem;
    font-weight: 600;
    color: #6c757d;
    padding-bottom: 2px;
}
.rs-day {
    position: relative;
    aspect-ratio: 1;
    border: none;
    border-radius: 50%;
    background: transparent;
    font-size: 1.05rem;
    line-height: 1;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 0;
}
.rs-day:hover {
    /* Hover als Ring wie beim ausgewählten Tag, nur transparent */
    box-shadow: inset 0 0 0 12px rgba(48, 175, 107, 0.2);
}
/* Heutiger und ausgewählter Tag als Ring: der inset-Schatten liegt über
   der Fläche, die Belegungs-Einfärbung bleibt dahinter sichtbar. */
.rs-day.today {
    box-shadow:
        inset 0 0 0 12px #30af9a,
        4px 4px 10px rgba(0, 0, 0, 0.2);
    font-weight: 600;
}
.rs-day.selected {
    box-shadow:
        inset 0 0 0 12px #30af6b,
        4px 4px 10px rgba(0, 0, 0, 0.2);
    font-weight: 600;
}
.rs-day-dot {
    display: none;
    position: absolute;
    bottom: 3px;
    left: 50%;
    transform: translateX(-50%);
    width: 5px;
    height: 5px;
    border-radius: 50%;
    background: var(--bs-primary);
}
.rs-day.has-bookings .rs-day-dot {
    display: block;
}
.form-text .rs-day-dot {
    display: inline-block;
    transform: none;
    width: 6px;
    height: 6px;
}

/* Doppel-Schieberegler für die Uhrzeit in der Raumansicht */
.rs-range {
    position: relative;
    height: 2rem;
}
.rs-range-track {
    position: absolute;
    top: 50%;
    left: 0;
    right: 0;
    height: 6px;
    transform: translateY(-50%);
    border-radius: 3px;
    background: #dee2e6;
}
.rs-range input[type="range"] {
    position: absolute;
    top: 50%;
    left: 0;
    width: 100%;
    height: 0;
    transform: translateY(-50%);
    margin: 0;
    -webkit-appearance: none;
    appearance: none;
    background: transparent;
    pointer-events: none;
    outline: none;
}
.rs-range input[type="range"]::-webkit-slider-thumb {
    -webkit-appearance: none;
    appearance: none;
    width: 20px;
    height: 20px;
    border-radius: 50%;
    background: var(--bs-primary);
    border: 3px solid #fff;
    box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.2);
    cursor: pointer;
    pointer-events: auto;
}
.rs-range input[type="range"]::-moz-range-thumb {
    width: 14px;
    height: 14px;
    border-radius: 50%;
    background: var(--bs-primary);
    border: 3px solid #fff;
    box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.2);
    cursor: pointer;
    pointer-events: auto;
}
.rs-range input[type="range"]::-moz-range-track {
    background: transparent;
}

/* Skala unter dem Uhrzeit-Schieberegler */
.rs-range-ticks {
    position: relative;
    height: 10px;
    margin-top: -2px;
}
.rs-tick {
    position: absolute;
    top: 0;
    width: 1px;
    height: 9px;
    background: #adb5bd;
    transform: translateX(-50%);
}
.rs-tick-dot {
    position: absolute;
    top: 3px;
    width: 3px;
    height: 3px;
    border-radius: 50%;
    background: #ced4da;
    transform: translateX(-50%);
}
.rs-range-nums {
    font-size: 0.95rem;
    font-weight: 600;
}

/* Aktive Zeitspanne ist greifbar und komplett verschiebbar */
.rs-range-track {
    cursor: grab;
}
.rs-range {
    touch-action: none;
}

/* Mitwanderndes Zeit-Label über dem Schieberegler */
.rs-range-float-wrap {
    position: relative;
    padding-top: 1.7rem;
}
.rs-range-float {
    position: absolute;
    top: 0;
    left: 50%;
    transform: translateX(-50%);
    white-space: nowrap;
    background: rgba(var(--bs-primary-rgb), 1);
    color: #fff;
    font-size: 0.85rem;
    font-weight: 600;
    line-height: 1.4;
    padding: 0 0.45rem;
    border-radius: 0.5rem;
    pointer-events: none;
}

/* Komplettansicht-Button: eigene Zeile unter der Kalender-Toolbar */
.rs-fullday-row {
    margin: -0.25rem 0 0.5rem;
}

/* Buchungs-Modal der Raumansicht: großzügiger Innenabstand */
.rs-modal-body {
    padding: 2rem;
}

/* Verschiebbares Anmelde-Modal: Plan dahinter bleibt sicht- und bedienbar */
.rs-login-modal {
    pointer-events: none;
}
.rs-login-modal .modal-dialog {
    pointer-events: auto;
}
.rs-login-modal .modal-header {
    cursor: move;
    touch-action: none;
    user-select: none;
}

/* Animierter Farbverlauf als Seitenhintergrund (Canvas-Mesh).
   Liegt hinter allen Inhalten; der Schleier hält Text lesbar. */
.rs-gradient-bg {
    position: fixed;
    inset: 0;
    z-index: -1;
    overflow: hidden;
    pointer-events: none;
    background: #0d2b28;
}
.rs-gradient-bg canvas {
    width: 100%;
    height: 100%;
    display: block;
    filter: blur(30px) saturate(1.1);
    transform: scale(1.1);
}
/* Arbeitsbereich: Schleier haelt Text lesbar, laesst die Farben aber
   deutlich durch. Kleinerer Wert = kraeftigerer Verlauf. */
.rs-gradient-bg::after {
    content: "";
    position: absolute;
    inset: 0;
    background: rgba(248, 249, 250, 0.32);
}
/* Öffentliche Startseite: Verlauf in voller Kraft */
.rs-gradient-bg--strong::after {
    background: linear-gradient(180deg, rgba(0, 0, 0, 0.25), rgba(0, 0, 0, 0.05) 45%, rgba(0, 0, 0, 0.3));
}

/* Header und Footer durchscheinend (80 % Deckkraft): der animierte
   Verlauf bleibt dahinter sichtbar. Der leichte Weichzeichner haelt
   die Schrift ueber dem bewegten Hintergrund ruhig lesbar. */
.rs-translucent {
    backdrop-filter: blur(10px);
    -webkit-backdrop-filter: blur(10px);
}
/* Bei der geringen Deckkraft haelt ein feiner Schattenriss die Schrift
   ueber dem bewegten Verlauf lesbar */
.rs-translucent,
.rs-translucent .nav-link,
.rs-translucent .navbar-brand {
    text-shadow: 0 1px 2px rgba(0, 0, 0, 0.35);
}
/* backdrop-filter erzeugt einen eigenen Stapelkontext - ohne z-index
   liegen die Dropdowns der Navigation hinter dem Seiteninhalt. 1030
   haelt sie ueber dem Inhalt, aber unter Modalen (1055). */
.navbar.rs-translucent {
    position: relative;
    z-index: 1030;
}
.navbar.rs-translucent.bg-primary {
    background-color: rgba(var(--bs-primary-rgb), 0.55) !important;
}
footer.rs-translucent.bg-dark {
    background-color: rgba(33, 37, 41, 0.55) !important;
}

/* CMS-Seiten (Impressum, Datenschutz, Anleitung): Inhalt als ruhige
   Flaeche ueber dem Farbverlauf, mit Innenabstand. Der Ton entspricht
   den inline gesetzten Hintergruenden der importierten Rechtstexte,
   damit die Flaeche einheitlich wirkt. */
.cms-content {
    background: #f8f9fa;
    padding: 2rem;
    border-radius: 0.75rem;
    box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.05);
}
