/* App styles on top of Pico. No inline styles anywhere: the CSP forbids them (design §5). */

/* htmx indicator rules (htmx's own injected <style> is disabled via includeIndicatorStyles: false) */
.htmx-indicator {
    opacity: 0;
    visibility: hidden;
}

.htmx-request .htmx-indicator,
.htmx-request.htmx-indicator {
    opacity: 1;
    visibility: visible;
    transition: opacity 200ms ease-in;
}

/* Logout button inside the nav */
.nav-form {
    margin: 0;
}

.nav-form button {
    margin: 0;
    padding: 0.25rem 0.75rem;
}

/* Flash messages */
.flash {
    padding: 0.75rem 1rem;
    border-radius: var(--pico-border-radius);
    border-left: 0.25rem solid;
}

.flash-success {
    background: color-mix(in srgb, var(--pico-ins-color) 15%, transparent);
    border-color: var(--pico-ins-color);
}

.flash-error {
    background: color-mix(in srgb, var(--pico-del-color) 15%, transparent);
    border-color: var(--pico-del-color);
}

/* Login */
.login {
    max-width: 28rem;
    margin-inline: auto;
}

/* Error pages */
.error-page {
    padding-block: 4rem;
    text-align: center;
}

/* Forms */
.field-error {
    color: var(--pico-del-color);
}

.inline-form {
    margin: 0;
}

.inline-form button {
    width: auto;
}

button.small,
[role="button"].small {
    margin: 0;
    padding: 0.2rem 0.6rem;
    font-size: 0.875rem;
}

/* Semester switcher in the nav */
.semester-switch select {
    margin: 0;
    padding-block: 0.25rem;
    width: auto;
}

/* Timetable grid */
.timetable-grid select {
    margin: 0;
    min-width: 6rem;
    padding: 0.25rem 2rem 0.25rem 0.5rem;
}

/* Status colours per type (F-23); the text label is always shown too, for print and colour blindness */
:root {
    --state-ferien: #1f6391;
    --state-anlass: #965a00;
    --state-lp_abwesend: #a23b72;
    --state-ausfall: #6b6b6b;
}

.badge {
    display: inline-block;
    padding: 0.05rem 0.45rem;
    border-radius: var(--pico-border-radius);
    color: #fff;
    font-size: 0.8rem;
    white-space: nowrap;
}

.badge.state-ferien { background: var(--state-ferien); }
.badge.state-anlass { background: var(--state-anlass); }
.badge.state-lp_abwesend { background: var(--state-lp_abwesend); }
.badge.state-ausfall { background: var(--state-ausfall); }

td.actions,
.nowrap {
    white-space: nowrap;
}

td.actions > * {
    display: inline-block;
}

/* List view (F-21, F-23) */
.list-toolbar {
    display: flex;
    flex-wrap: wrap;
    gap: 1rem;
    align-items: center;
    margin-bottom: 1rem;
}

.list-toolbar fieldset {
    margin: 0;
}

.lesson-list td {
    padding-block: 0.3rem;
}

.lesson-list .week-header th {
    background: var(--pico-muted-border-color);
    font-weight: 600;
    padding-block: 0.35rem;
}

.milestone {
    margin-left: 1rem;
    color: var(--pico-del-color);
}

.lesson-list tr.state-ferien > td { background: color-mix(in srgb, var(--state-ferien) 12%, transparent); }
.lesson-list tr.state-anlass > td { background: color-mix(in srgb, var(--state-anlass) 12%, transparent); }
.lesson-list tr.state-lp_abwesend > td { background: color-mix(in srgb, var(--state-lp_abwesend) 12%, transparent); }
.lesson-list tr.state-ausfall > td { background: color-mix(in srgb, var(--state-ausfall) 12%, transparent); }

.lesson-list tr.is-half .class-cell {
    font-style: italic;
    padding-left: 1.25rem;
}

.lesson-list tr.is-exam .topic-cell input {
    font-weight: 700;
    border-color: var(--pico-del-color);
}

.status-ok {
    color: var(--pico-muted-color);
}

.topic-cell {
    min-width: 16rem;
}

.topic-form {
    display: inline-block;
    margin: 0;
    width: calc(100% - 6rem);
    min-width: 12rem;
}

.topic-form input {
    margin: 0;
    padding: 0.2rem 0.5rem;
    height: auto;
}

.badge.replan {
    background: #b42318;
}

/* Brief confirmation after an htmx save */
@keyframes saved-flash {
    from { box-shadow: inset 0 0 0 100vmax color-mix(in srgb, var(--pico-ins-color) 30%, transparent); }
    to { box-shadow: none; }
}

.lesson-list tr.just-saved > td {
    animation: saved-flash 1.2s ease-out;
}

/* Phones (N-03, AC-7): the nav wraps, and each lesson row becomes a two-line card */
@media (max-width: 600px) {
    header nav,
    header nav ul {
        flex-wrap: wrap;
    }

    .lesson-list,
    .lesson-list tbody,
    .lesson-list tr,
    .lesson-list th {
        display: block;
    }

    .lesson-list thead {
        display: none;
    }

    .lesson-list tr:not(.week-header) {
        display: flex;
        flex-wrap: wrap;
        align-items: baseline;
        gap: 0.25rem 0.75rem;
        padding: 0.5rem;
        border-bottom: 1px solid var(--pico-muted-border-color);
    }

    .lesson-list tr:not(.week-header) > td {
        padding: 0;
        border: 0;
        background: none;
    }

    .lesson-list tr.is-half .class-cell {
        padding-left: 0;
    }

    .lesson-list td.topic-cell {
        flex-basis: 100%;
        min-width: 0;
    }

    .lesson-list tr.state-ferien { background: color-mix(in srgb, var(--state-ferien) 12%, transparent); }
    .lesson-list tr.state-anlass { background: color-mix(in srgb, var(--state-anlass) 12%, transparent); }
    .lesson-list tr.state-lp_abwesend { background: color-mix(in srgb, var(--state-lp_abwesend) 12%, transparent); }
    .lesson-list tr.state-ausfall { background: color-mix(in srgb, var(--state-ausfall) 12%, transparent); }
}

/* Flash message as a toast when the page kept its scroll position (app.js) */
.flash-toast {
    position: fixed;
    top: 1rem;
    left: 50%;
    transform: translateX(-50%);
    z-index: 10;
    width: min(40rem, calc(100% - 2rem));
    box-shadow: var(--pico-card-box-shadow);
    background: var(--pico-card-background-color);
    transition: opacity 0.6s ease;
}

.flash-toast-hide {
    opacity: 0;
    pointer-events: none;
}
