/* =========================================== */
/* STAFFEL-DETAIL-SEITE                       */
/* =========================================== */

/* Breadcrumb */
.season-breadcrumb {
    margin-bottom: var(--spacing-4);
}

.season-breadcrumb a {
    color: var(--text-sub);
    text-decoration: none;
    font-size: var(--font-size-sm);
    display: inline-flex;
    align-items: center;
    gap: var(--spacing-4);
    transition: color 0.2s;
}

.season-breadcrumb a:hover {
    color: var(--text);
}

/* Durchschnittliche Episoden-Wertung Badge */
.episode-avg-badge {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    padding: 4px 12px;
    border-radius: var(--radius-full);
    font-size: 13px;
    font-weight: var(--fw-regular);
    line-height: 1;
    background: var(--sky-blue);
    color: var(--text-darker);
    white-space: nowrap;
}

.episode-avg-label {
    font-weight: var(--fw-regular);
    opacity: 0.85;
}

.episode-avg-value {
    font-weight: var(--fw-regular);
}

/* =========================================== */
/* SEASON UPPER: 2/3 + 1/3 Layout             */
/* =========================================== */

.season-upper {
    display: contents;
}

.season-upper-main {
    display: contents;
}

.season-upper-side {
    display: contents;
}

.season-episodes-full {
    display: contents;
}

/* =========================================== */
/* EPISODEN-LISTE                             */
/* =========================================== */

/* Episoden-Wertungszeile (zwischen Meta und Handlung) */
.episode-ratings-row {
    display: flex;
    align-items: center;
    gap: var(--spacing-8);
    margin-top: var(--spacing-4);
}

.episode-ratings-label {
    font-size: var(--font-size-xs);
    color: var(--text-sub);
    white-space: nowrap;
}

/* .episodes-section-header entfernt — genutzt wird jetzt die generische
   .section-head-Komponente aus main.css (docs/DESIGN_GUIDE.md §5.4). */

.episode-list {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: var(--spacing-12);
}

.episode-card {
    background: var(--background-light);
    border-radius: var(--spacing-8);
    overflow: hidden;
}

.episode-layout {
    display: flex;
    gap: var(--spacing-12);
    padding: var(--spacing-12);
}

/* Vorschaubild */
.episode-still {
    flex-shrink: 0;
    width: 120px;
    height: 68px;
    border-radius: var(--spacing-4);
    overflow: hidden;
    background: var(--background-light);
}

.episode-still img {
    width: 100%;
    height: 100%;
    object-fit: cover;
}

.episode-still-placeholder {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 100%;
    height: 100%;
    color: var(--text-sub);
    font-size: 1.5rem;
}

/* Info-Bereich.
   Achtung: main.css hat auch eine .episode-info-Regel fuer die Serien-
   Tracker-Card (flex-row mit wrap fuer "S02 E08" + Titel-Suffix).
   Wir spezifizieren hier mit .episode-card als Elternteil, damit die
   Season-Details-Version gewinnt egal in welcher Load-Reihenfolge die
   CSS-Files geladen werden. */
.episode-card .episode-info {
    flex: 1;
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: var(--spacing-4);
    /* Overrides gegen main.css .episode-info: */
    flex-wrap: nowrap;
    align-items: stretch;
    column-gap: 0;
    row-gap: 0;
}

.episode-card .episode-header-row {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    gap: var(--spacing-12);
    width: 100%;
}

.episode-title {
    margin: 0;
    font-size: var(--font-size-base);
    font-weight: var(--fw-regular);
    color: var(--text);
    line-height: 1.3;
    /* Titel darf sich schrumpfen aber nicht dehnen: flex:0 1 auto.
       So bleibt er bei kurzen Titeln kompakt links, die Buttons werden
       per margin-left:auto ganz nach rechts geschoben. Bei zu langem
       Titel sorgt min-width:0 dafuer dass flex ihn kleiner rechnen
       kann als seine intrinsische Breite. */
    flex: 0 1 auto;
    min-width: 0;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
    word-break: break-word;
}

.episode-number {
    color: var(--text-sub);
    font-weight: var(--fw-regular);
    margin-right: 2px;
}

/* Bewertungsbereich pro Folge */
.episode-ratings {
    display: flex;
    align-items: center;
    gap: var(--spacing-8);
    flex-shrink: 0;
}

/* Episode-Bewerten Button */
.episode-rate-btn {
    white-space: nowrap;
    border-color: var(--text);
}

.episode-rate-btn:hover {
    border-color: var(--text);
    background: var(--text);
    color: var(--background-dark);
}

.episode-rate-btn.active,
.episode-rate-btn.rated {
    border-color: var(--text);
    color: var(--text);
    background: transparent;
}

.episode-rate-btn.active > i,
.episode-rate-btn.rated > i {
    color: var(--sky-blue);
}

.episode-rate-btn.active:hover,
.episode-rate-btn.rated:hover {
    border-color: var(--text);
    background: var(--text);
    color: var(--black);
}

.rating-circle.small {
    width: 32px;
    height: 32px;
    font-size: 12px;
    position: unset;
}

/* Meta-Informationen */
.episode-meta {
    display: flex;
    align-items: center;
    gap: var(--spacing-4);
    color: var(--text-sub);
    font-size: var(--font-size-sm);
}

/* Handlung */
.episode-overview {
    margin: var(--spacing-4) 0 0;
    font-size: var(--font-size-sm);
    color: var(--text-sub);
    line-height: 1.5;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

.episode-overview-wrap.expanded .episode-overview,
.episode-overview-wrap.small-overflow .episode-overview,
.episode-overview-wrap.measuring-full .episode-overview {
    display: block;
    -webkit-line-clamp: unset;
}

/* Waehrend der Messung darf visueller Flicker minimiert werden.
   Kein visibility:hidden — die Groessen muessten sonst neu berechnet
   werden. Reines Marker-Klassen-Handling, kein CSS-Reset noetig. */

.episode-overview-toggle {
    background: none;
    border: none;
    padding: 0;
    margin-top: var(--spacing-4);
    color: var(--text-link);
    font-size: var(--font-size-sm);
    cursor: pointer;
}

/* Wenn JS laeuft (season-details.js setzt html[data-overview-clamp-js]),
   ist der Toggle standardmaessig versteckt und wird nur bei tatsaech-
   lichem Ueberlauf oder im expanded-Zustand angezeigt. Ohne JS bleibt
   der Toggle immer sichtbar (Fallback fuer alte Browser). */
html[data-overview-clamp-js] .episode-overview-toggle {
    display: none;
}
html[data-overview-clamp-js] .episode-overview-wrap.has-overflow .episode-overview-toggle,
html[data-overview-clamp-js] .episode-overview-wrap.expanded .episode-overview-toggle {
    display: inline;
}

.episode-overview-toggle:hover {
    color: var(--text-link-hover);
    opacity: 1;
}

.episode-overview-toggle .show-less {
    display: none;
}

.episode-overview-wrap.expanded .episode-overview-toggle .show-more {
    display: none;
}

.episode-overview-wrap.expanded .episode-overview-toggle .show-less {
    display: inline;
}

/* =========================================== */
/* DESKTOP: Season-Layout                     */
/* =========================================== */

@media (min-width: 769px) {
    /* movie-content im Column-Layout für Season-Details */
    .movie-content:has(.season-upper) {
        flex-direction: column;
    }

    .season-upper {
        display: flex;
        gap: var(--spacing-32);
        width: 100%;
    }

    .season-upper-main {
        display: flex;
        flex-direction: column;
        gap: var(--spacing-24);
        flex: 2 1 0;
        min-width: 0;
    }

    .season-upper-side {
        display: flex;
        flex-direction: column;
        gap: var(--spacing-24);
        flex: 1 0 0;
        align-self: flex-start;
        position: sticky;
        top: 94px;
    }

    .season-upper-main > section,
    .season-upper-side > section {
        margin-bottom: 0;
        border-radius: var(--radius-lg);
        border: var(--border-light);
    }

    /* Wenn kein Review: upper-main nimmt 100% ein */
    .season-upper:not(:has(.season-upper-side > *)) .season-upper-main {
        flex: 1 1 100%;
    }

    .season-upper:not(:has(.season-upper-side > *)) {
        gap: 0;
    }

    .season-episodes-full {
        display: block;
        width: 100%;
    }

    .season-episodes-full > .episodes-section {
        border-radius: var(--radius-lg);
        border: var(--border-light);
        padding: var(--spacing-24);
    }

    /* Handlung im oberen Bereich: bessere Typografie */
    .season-upper-main .overview p {
        font-size: 1.05rem;
        line-height: 1.75;
        color: var(--text);
    }
}

/* =========================================== */
/* RESPONSIVE                                 */
/* =========================================== */

@media screen and (max-width: 768px) {
    /* Mobile Reihenfolge: Freunde → Handlung → Review → Episoden */
    .movie-content:has(.season-upper) .friend-section { order: 1; }
    .movie-content:has(.season-upper) .overview { order: 2; }
    .movie-content:has(.season-upper) .own-review-section { order: 3; }
    .movie-content:has(.season-upper) .season-episodes-full { order: 4; }

    /* Episoden-Block als sichtbarer Container (nicht contents) */
    .season-episodes-full {
        display: block;
    }

    .episodes-section {
        border-radius: var(--radius-lg);
        border: var(--border-light);
    }

    .episode-list {
        grid-template-columns: 1fr;
        gap: var(--spacing-8);
    }

    .episode-layout {
        gap: var(--spacing-12);
        padding: var(--spacing-12);
    }

    .episode-still {
        width: 100px;
        height: 56px;
    }

    .episode-title {
        font-size: var(--font-size-sm);
    }

    .episode-rate-btn {
        font-size: var(--font-size-xs) !important;
        padding: 5px 10px !important;
    }
}

@media screen and (max-width: 480px) {
    .episode-layout {
        padding: var(--spacing-8);
        gap: var(--spacing-8);
    }

    .episode-still {
        width: 80px;
        height: 45px;
    }

    .rating-circle.tmdb.small {
        width: 28px;
        height: 28px;
        /* 11px bewusst unter 12px: Zahl in 28px-Kreis, geometrisch begrenzt.
           Siehe DESIGN_GUIDE.md R-9 Ausnahme. */
        font-size: 11px;
    }

    .episode-meta {
        font-size: var(--font-size-xs);
    }

    .episode-overview {
        font-size: var(--font-size-xs);
    }

    .episode-overview-toggle {
        font-size: var(--font-size-xs);
    }
}

/* Staffel-Review Sektion */
.season-review-section {
    margin: 0;
}

/* Episode Review-Indikator (eigener) — nutzt .review-indicator Klassen aus review-modal.css */

/* Context-Menu Wrapper */
.episode-context-menu-wrap {
    position: relative;
    flex-shrink: 0;
}

/* Episode-Context-Button: erbt .menu-toggle Styles aus components.css */
.episode-context-btn {
    width: 32px;
    height: 32px;
    font-size: 16px;
}

.episode-context-menu {
    display: none;
    position: absolute;
    top: 100%;
    right: 0;
    z-index: var(--z-dropdown, 100);
    min-width: 180px;
    max-width: 240px;
    width: max-content;
    background: var(--background-light);
    border: var(--border-light);
    border-radius: var(--spacing-8);
    padding: var(--spacing-4) 0;
    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
}

.episode-context-menu.open {
    display: block;
}

/* Portal-Zustand: Menu liegt im #menu-portal (position:fixed inline).
   z-index hoch damit es auch ueber Sticky-Elementen/Modals sichtbar bleibt.
   Explizite Breite (width:max-content ist Basis, hier greift die max-width
   von 240px), damit das Menu nicht die Body-Breite annimmt sobald der
   Portal-Container leer ist. */
.episode-context-menu.is-portaled {
    z-index: var(--z-toast, 1200);
    width: max-content;
    max-width: 240px;
}

.episode-context-item {
    display: flex;
    align-items: center;
    gap: var(--spacing-8);
    width: 100%;
    padding: var(--spacing-8) var(--spacing-12);
    border: none;
    background: transparent;
    color: var(--text);
    font-size: var(--font-size-sm);
    cursor: pointer;
    text-align: left;
    transition: background-color 0.15s;
}

.episode-context-item:hover {
    background: var(--background-hover);
}

.episode-context-item i {
    font-size: var(--font-size-base);
    width: 20px;
    text-align: center;
    flex-shrink: 0;
}

.episode-context-item.active {
    color: var(--text);
}

.episode-context-item.active > i {
    color: var(--sky-blue);
}

/* Freunde auf Episoden-Kacheln */
.episode-friends {
    display: flex;
    flex-wrap: wrap;
    gap: var(--spacing-4);
    margin-top: var(--spacing-8);
}

.episode-friends .friend-avatar {
    width: 48px;
    height: 48px;
}

.episode-friends .friend-info h4 {
    font-size: var(--font-size-sm);
    font-weight: var(--fw-regular);
    margin: 0;
}

a.episode-friend-chip,
button.episode-friend-chip {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    padding: 2px 8px 2px 2px;
    background: var(--background);
    border-radius: var(--radius-full);
    font-size: var(--font-size-xs);
    color: var(--text-sub);
    text-decoration: none;
    transition: background-color 0.15s;
    border: none;
    cursor: pointer;
    font-family: inherit;
}

.episode-friend-chip:hover {
    background: var(--background-hover);
}

.episode-friend-chip img {
    width: 20px;
    height: 20px;
    border-radius: 50%;
    object-fit: cover;
}

.episode-friend-name {
    color: var(--text-sub);
}

.episode-friend-chip.has-review-only i {
    font-size: var(--font-size-xs);
    color: var(--sky-blue);
}

/* Light-Theme: Episode-Cards bekommen Border + Shadow, damit sie sich
   vom Body-Hintergrund abheben (im Dark erzeugt --background-light bereits
   genug Tiefenunterschied). */
:root[data-theme="light"] .episode-card{
    border: var(--border-light);
    box-shadow: var(--shadow-sm);
}

:root[data-theme="light"] .season-review-section{
    background: var(--background-light);
    border: var(--border-light);
    border-radius: var(--radius-lg);
    box-shadow: var(--shadow-sm);
    padding: var(--spacing-24);
}

/* =========================================================
   Phase F Iteration 4 (2026-08-12): "Episode gesehen"-Toggle
   in der Header-Actions-Gruppe (Toggle + Kontextmenue rechts vom
   Titel). Toggle ist gross genug fuer Mobile (min 40x40 Tap-Target).
   ========================================================= */
.episode-header-actions {
    display: flex;
    align-items: center;
    gap: var(--spacing-8);
    flex-shrink: 0;
    /* Buttons immer ganz rechts, auch wenn der Titel viel kuerzer ist
       als der verfuegbare Platz. Ohne margin-left:auto wuerden sie
       direkt an einen kurzen Titel anschliessen. */
    margin-left: auto;
}

/* Owner-Feedback 2026-08-13: exakt gleiches Basis-Styling wie
   .episode-context-btn / generisches .menu-toggle. Der einzige
   Unterschied ist der .active-Zustand — dann wechselt der Toggle
   von Dunkel-Glass auf sky-blue-Fill. */
.episode-watched-indicator {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 32px;
    height: 32px;
    padding: 0;
    font-size: 16px;
    background: rgba(0, 0, 0, 0.35);
    -webkit-backdrop-filter: var(--backdrop-blur-md);
    backdrop-filter: var(--backdrop-blur-md);
    color: var(--white);
    border: none;
    border-radius: 50%;
    cursor: pointer;
    line-height: 1;
    transition: background 0.2s ease, color 0.2s ease;
}

.episode-watched-indicator:hover {
    background: rgba(0, 0, 0, 0.55);
}

.episode-watched-indicator.active {
    background: var(--sky-blue);
    color: var(--text-darker);
}

.episode-watched-indicator.active:hover {
    background: var(--sky-blue);
    color: var(--text-darker);
    filter: brightness(0.95);
}

.episode-watched-indicator i {
    font-size: 16px;
}
