/* Styles injectés dans l’interface Emby par emby-addbutton.js.
   Chargé via <link> dans index.html par add_emby_button.sh, qui y ajoute à la
   suite les thèmes saisonniers de add_emby_button/themes/*.css. */

/* Ordre d'empilement des éléments ajoutés à Emby, du plus bas au plus haut.
   Les toasts restent sous les menus pour ne jamais masquer une bulle ouverte. */
:root {
    --tmdb-z-banner: 1095;
    --tmdb-z-toast: 1096;
    --tmdb-z-chat: 1099;
    --tmdb-z-panel: 1100;
    --tmdb-z-popover: 1101;
    --tmdb-z-modal: 1102;
}

/* ---------------------------------------------------------------------------
   Menus, bulles et fenêtres : alignés sur les menus natifs d'Emby
   (surface sans bordure colorée, coins de 14px, lignes de 48px, icônes 24px).
   --------------------------------------------------------------------------- */
.tmdb-menu-surface {
    border: 0;
    border-radius: 14px;
    background: var(--tmdb-emby-surface, #28282b);
    color: var(--tmdb-emby-text, #fff);
    box-shadow: 0 0 0 1px rgba(0, 0, 0, .2) inset, 0 8px 40px rgba(0, 0, 0, .55);
    font-family: inherit;
    font-size: 14px;
    line-height: 1.5;
    scrollbar-width: thin;
    scrollbar-color: var(--tmdb-emby-control-hover, rgba(255, 255, 255, .22)) transparent;
}
.tmdb-menu-surface * {
    scrollbar-width: thin;
    scrollbar-color: var(--tmdb-emby-control-hover, rgba(255, 255, 255, .22)) transparent;
}
/* Le conteneur ne reçoit le focus que pour y amener le clavier : pas d'anneau. */
.tmdb-menu-surface:focus { outline: none; }
/* À l'ouverture, la visibilité bascule sans délai (seule l'apparence s'anime) :
   sinon l'élément est encore « hidden » quand il doit recevoir le focus. */
.tmdb-menu-surface.is-open,
.tmdb-contact-modal.is-open,
.tmdb-other-projects-modal.is-open,
.tmdb-content-panel.is-open { transition-property: opacity, transform; }
.tmdb-menu-header {
    flex: 0 0 auto;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    box-sizing: border-box;
    min-height: 56px;
    padding: 8px 8px 4px 20px;
}
.tmdb-menu-title {
    margin: 0;
    color: inherit;
    font-size: 16px;
    font-weight: 600;
    line-height: 1.3;
}
.tmdb-close-button {
    flex: 0 0 auto;
    display: grid;
    place-items: center;
    width: 40px;
    height: 40px;
    padding: 0;
    border: 0;
    border-radius: 50%;
    background: transparent;
    color: inherit;
    cursor: pointer;
    transition: background-color .2s ease;
}
.tmdb-close-button:hover { background: var(--tmdb-emby-control, rgba(255, 255, 255, .13)); }
.tmdb-close-button:focus-visible { outline: 2px solid var(--tmdb-emby-accent, #52b54b); outline-offset: 0; }
.tmdb-menu-list {
    margin: 0;
    padding: 0 0 8px;
    list-style: none;
}
.tmdb-menu-item {
    display: flex;
    align-items: center;
    gap: 16px;
    box-sizing: border-box;
    width: 100%;
    min-height: 48px;
    padding: 8px 20px;
    border: 0;
    background: transparent;
    color: inherit;
    font: inherit;
    text-align: left;
    text-decoration: none;
    cursor: pointer;
    transition: background-color .2s ease;
}
.tmdb-menu-item:hover { background: var(--tmdb-emby-control, rgba(255, 255, 255, .13)); }
.tmdb-menu-item:focus-visible {
    outline: 2px solid var(--tmdb-emby-accent, #52b54b);
    outline-offset: -2px;
    background: var(--tmdb-emby-control, rgba(255, 255, 255, .13));
}
.tmdb-menu-item .tmdb-icon {
    width: 24px;
    height: 24px;
    color: var(--tmdb-emby-text-muted, rgba(255, 255, 255, .72));
}
.tmdb-menu-item__text {
    display: grid;
    flex: 1;
    min-width: 0;
}
.tmdb-menu-item small {
    color: var(--tmdb-emby-text-muted, rgba(255, 255, 255, .72));
    font-size: 13px;
}

/* Notifications */
.tmdb-notifications-popover__list {
    flex: 1;
    margin: 0;
    padding: 0 8px 8px;
    list-style: none;
    overflow-y: auto;
}
.tmdb-notifications-popover__item {
    display: flex;
    align-items: flex-start;
    gap: 10px;
    padding: 12px;
}
.tmdb-notifications-popover__item + .tmdb-notifications-popover__item {
    border-top: 1px solid var(--tmdb-emby-control, rgba(255, 255, 255, .13));
}
/* Pastille « non lue » : doublée d'un texte masqué lu par les lecteurs d'écran. */
.tmdb-notifications-popover__item::before {
    content: '';
    flex: 0 0 8px;
    height: 8px;
    margin-top: 7px;
    border-radius: 50%;
}
.tmdb-notifications-popover__item.is-unread::before { background: var(--tmdb-emby-accent, #52b54b); }
/* Icône dans le texte d'une notification : reproduit un bouton rond d'Emby (config.php) */
.tmdb-inline-icon {
    display: inline-block;
    width: 1.8em;
    height: 1.8em;
    margin: 0 .15em;
    border-radius: 50%;
    vertical-align: middle;
    background: var(--tmdb-emby-control-hover, rgba(255, 255, 255, .22)) center / 62% no-repeat;
}
/* Loupe de la fiche d'une série : pastille à la couleur du thème, comme .btnTmdbSeasonsCheck */
.tmdb-inline-icon--search {
    position: relative;
    background: var(--tmdb-emby-accent, #52b54b);
    color: var(--tmdb-emby-accent-text, #fff);
}
.tmdb-inline-icon--search::after {
    content: '';
    position: absolute;
    inset: 0;
    background: currentColor;
    -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M15.5 14h-.79l-.28-.27A6.471 6.471 0 0 0 16 9.5 6.5 6.5 0 1 0 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z'/%3E%3C/svg%3E") center / 62% no-repeat;
    mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M15.5 14h-.79l-.28-.27A6.471 6.471 0 0 0 16 9.5 6.5 6.5 0 1 0 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z'/%3E%3C/svg%3E") center / 62% no-repeat;
}
.tmdb-notification-cta {
    display: inline-flex;
    align-items: center;
    min-height: 36px;
    margin-top: 8px;
    padding: 0 16px;
    border: 0;
    border-radius: 999px;
    background: var(--tmdb-emby-accent, #52b54b);
    color: var(--tmdb-emby-accent-text, #fff) !important;
    font-size: 14px;
    font-weight: 700;
    text-decoration: none !important;
    transition: filter .2s ease;
}
.tmdb-notification-cta:hover { filter: brightness(1.1); }
.tmdb-notification-cta:focus-visible { outline: 2px solid var(--tmdb-emby-text, #fff); outline-offset: 2px; }

/* À propos : actions en liste, mentions en dessous */
.tmdb-about-popover__notice {
    padding: 12px 20px 16px;
    border-top: 1px solid var(--tmdb-emby-control, rgba(255, 255, 255, .13));
}
.tmdb-about-popover__notice p {
    margin: 0 0 6px;
    color: var(--tmdb-emby-text-muted, rgba(255, 255, 255, .72));
    font-size: 12px;
    line-height: 1.5;
}
.tmdb-about-popover__notice p:last-child { margin-bottom: 0; }

/* Sélecteur de thème (fenêtre du bouton « Thème » du bandeau) : la coche
   n'apparaît que sur le thème actif, sa place reste réservée sur les autres. */
.tmdb-theme-picker__option .tmdb-icon { visibility: hidden; }
.tmdb-theme-picker__option[aria-pressed='true'] { font-weight: 600; }
.tmdb-theme-picker__option[aria-pressed='true'] .tmdb-icon {
    visibility: visible;
    color: var(--tmdb-emby-accent, #52b54b);
}

/* Mes autres projets */
.tmdb-other-projects-modal__icon {
    display: grid;
    flex: 0 0 32px;
    width: 32px;
    height: 32px;
    place-items: center;
}
.tmdb-other-projects-modal__icon img { display: block; width: 32px; height: 32px; border-radius: 7px; object-fit: contain; }
.tmdb-other-projects-modal__link > .tmdb-icon { width: 18px; height: 18px; }

/* Panneau plein écran */
.tmdb-content-panel__toolbar .tmdb-menu-title { font-size: 15px; }
.tmdb-content-panel__toolbar .tmdb-close-button { width: 32px; height: 32px; }

.tmdb-notifications-popover {
    position: fixed;
    z-index: var(--tmdb-z-popover);
    display: flex;
    flex-direction: column;
    overflow: hidden;
    opacity: 0;
    visibility: hidden;
    transform: translateY(-8px) scale(.98);
    transform-origin: top left;
    transition: opacity .18s ease, transform .18s ease, visibility .18s;
}
.tmdb-notifications-popover.is-open { opacity: 1; visibility: visible; transform: none; }

.tmdb-notifications-popover__body { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 3px; }
.tmdb-notifications-popover__message { margin: 0; }
.tmdb-notifications-popover__date {
    font-size: 11px;
    color: var(--tmdb-emby-text-muted, rgba(255, 255, 255, .72));
}
.tmdb-notifications-popover__message a {
    color: var(--tmdb-emby-accent, #52b54b);
    text-decoration: underline;
}

.tmdb-notifications-popover__empty { margin: 0; padding: 18px 14px; color: var(--tmdb-emby-text-muted, rgba(255, 255, 255, .72)); text-align: center; }
.tmdb-notifications-popover__empty[hidden] { display: none; }

.tmdb-about-popover,
.tmdb-theme-popover {
    position: fixed;
    z-index: var(--tmdb-z-popover);
    display: flex;
    flex-direction: column;
    overflow-y: auto;
    opacity: 0;
    visibility: hidden;
    transform: translateY(-8px) scale(.98);
    transform-origin: top right;
    transition: opacity .18s ease, transform .18s ease, visibility .18s;
}
.tmdb-about-popover.is-open,
.tmdb-theme-popover.is-open { opacity: 1; visibility: visible; transform: none; }

.tmdb-homepage-info-notifications {
    position: fixed;
    right: 18px;
    bottom: 18px;
    z-index: var(--tmdb-z-toast);
    width: min(520px, calc(100vw - 36px));
}
/* Bande compacte : icône, début du message, « +N », Lire, fermer. */
.tmdb-homepage-info-notification {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 6px 6px 6px 14px;
    border-radius: 999px;
    background: var(--tmdb-emby-surface-elevated, #242424);
    color: var(--tmdb-emby-text, #fff);
    box-shadow: 0 0 0 1px var(--tmdb-emby-control, rgba(255, 255, 255, .13)) inset, 0 8px 30px rgba(0, 0, 0, .5);
    font-family: inherit;
    font-size: 14px;
    line-height: 1.4;
}
.tmdb-homepage-info-notification > .tmdb-icon { color: var(--tmdb-emby-accent, #52b54b); }
.tmdb-homepage-info-notification__text {
    flex: 1;
    min-width: 0;
    margin: 0;
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis;
}
.tmdb-homepage-info-notification__more {
    flex: 0 0 auto;
    padding: 1px 7px;
    border-radius: 999px;
    background: var(--tmdb-emby-control, rgba(255, 255, 255, .13));
    color: var(--tmdb-emby-text-muted, rgba(255, 255, 255, .72));
    font-size: 12px;
    font-weight: 700;
}
.tmdb-homepage-info-notification__read {
    flex: 0 0 auto;
    min-height: 34px;
    padding: 0 14px;
    border: 0;
    border-radius: 999px;
    background: var(--tmdb-emby-accent, #52b54b);
    color: var(--tmdb-emby-accent-text, #fff);
    font: inherit;
    font-weight: 700;
    cursor: pointer;
}
.tmdb-homepage-info-notification__read:hover { filter: brightness(1.08); }
.tmdb-homepage-info-notification__read:focus-visible { outline: 2px solid var(--tmdb-emby-text, #fff); outline-offset: 2px; }
.tmdb-homepage-info-notification .tmdb-close-button { width: 34px; height: 34px; }

.tmdb-server-load-alert {
    position: fixed;
    left: 50%;
    top: calc(env(safe-area-inset-top, 0px) + 50px);
    transform: translateX(-50%);
    z-index: var(--tmdb-z-toast);
    display: flex;
    align-items: center;
    gap: 14px;
    width: min(560px, calc(100vw - 24px));
    padding: 12px 16px;
    border: 1px solid rgba(245, 158, 11, .6);
    border-radius: 12px;
    background: #422006;
    color: #fef3c7;
    box-shadow: 0 12px 28px rgba(0, 0, 0, .4);
    font: 14px/1.4 system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
}
.tmdb-server-load-alert[hidden] { display: none; }
.tmdb-server-load-alert__content { min-width: 0; flex: 1; }
.tmdb-server-load-alert__content p { margin: 0; }
.tmdb-server-load-alert__toggle {
    flex: 0 0 auto;
    width: 28px;
    height: 28px;
    display: grid;
    place-items: center;
    padding: 0;
    border: 1px solid rgba(245, 158, 11, .5);
    border-radius: 50%;
    background: rgba(245, 158, 11, .18);
    color: inherit;
    font: inherit;
    font-size: 15px;
    line-height: 1;
    cursor: pointer;
}
.tmdb-server-load-alert__toggle:hover { background: rgba(245, 158, 11, .3); }
.tmdb-server-load-alert__toggle:focus-visible { outline: 2px solid #fbbf24; outline-offset: 2px; }

/* Réduite : simple pastille dans un coin libre, pour ne jamais masquer
   le contenu tout en restant visible tant que l'alerte est active. */
.tmdb-server-load-alert.is-minimized {
    left: 18px;
    top: auto;
    bottom: calc(env(safe-area-inset-bottom, 0px) + 18px);
    transform: none;
    width: auto;
    padding: 0;
    border: 0;
    background: transparent;
    box-shadow: none;
}
.tmdb-server-load-alert.is-minimized .tmdb-server-load-alert__content { display: none; }
.tmdb-server-load-alert.is-minimized .tmdb-server-load-alert__toggle {
    width: 44px;
    height: 44px;
    font-size: 20px;
    background: #422006;
    border: 1px solid rgba(245, 158, 11, .6);
    box-shadow: 0 12px 28px rgba(0, 0, 0, .4);
    position: relative;
}
.tmdb-server-load-alert.is-minimized .tmdb-server-load-alert__toggle::after {
    content: '';
    position: absolute;
    inset: 0;
    border-radius: 50%;
    border: 2px solid rgba(245, 158, 11, .9);
    animation: tmdb-server-load-alert-ping 1.6s cubic-bezier(0, 0, .2, 1) infinite;
    pointer-events: none;
}
@keyframes tmdb-server-load-alert-ping {
    0% { transform: scale(1); opacity: .8; }
    75%, 100% { transform: scale(1.7); opacity: 0; }
}

body.tmdb-cleanup-banner-docked {
    --tmdb-cleanup-banner-space: calc(var(--tmdb-cleanup-banner-height, 40px) + env(safe-area-inset-top, 0px));
}

.tmdb-cleanup-banner[hidden],
.tmdb-chat-launcher[hidden] {
    display: none !important;
}

body.tmdb-non-admin .headerCastButton {
    display: none !important;
}

[data-tmdb-hidden-for-non-admin="true"] {
    display: none !important;
}

body.tmdb-cleanup-banner-docked > .page,
body.tmdb-cleanup-banner-docked > [data-role='page'] {
    box-sizing: border-box !important;
    top: var(--tmdb-cleanup-banner-space) !important;
    bottom: 0 !important;
    height: auto !important;
    margin-top: 0 !important;
}

body.tmdb-cleanup-banner-docked .skinHeader {
    top: var(--tmdb-cleanup-banner-space) !important;
    transition: top .2s ease;
}

body.tmdb-cleanup-banner-docked .mainDrawer {
    top: var(--tmdb-cleanup-banner-space) !important;
    bottom: 0 !important;
    height: auto !important;
}

.tmdb-content-panel {
    position: fixed;
    inset: 0;
    z-index: var(--tmdb-z-panel);
    width: 100vw;
    height: 100vh;
    height: 100dvh;
    display: flex;
    flex-direction: column;
    overflow: hidden;
    border: 0;
    border-radius: 0;
    background: var(--tmdb-emby-surface, #181818);
    box-shadow: 0 28px 80px rgba(0, 0, 0, .58);
    opacity: 0;
    visibility: hidden;
    transform: translateY(-16px) scaleY(.98);
    transform-origin: top center;
    transition: opacity .24s ease, transform .28s ease, visibility .28s;
}

.tmdb-content-panel.is-open {
    opacity: 1;
    visibility: visible;
    transform: translateY(0) scaleY(1);
}

.tmdb-content-panel__toolbar {
    box-sizing: border-box;
    min-height: 40px;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    padding: 4px 10px 4px 12px;
    background: linear-gradient(135deg, var(--tmdb-emby-surface-elevated, #242424), var(--tmdb-emby-surface, #181818));
    color: var(--tmdb-emby-text, #fff);
    border-bottom: 1px solid var(--tmdb-emby-control, rgba(255, 255, 255, .13));
    cursor: pointer;
}

.tmdb-content-panel__toolbar:hover { filter: brightness(1.08); }

.tmdb-content-panel__actions { display: flex; align-items: center; gap: 8px; }

.tmdb-content-panel__loader {
    position: absolute;
    inset: 40px 0 0;
    z-index: 2;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-direction: column;
    gap: 14px;
    background: linear-gradient(145deg, var(--tmdb-emby-surface, #181818), var(--tmdb-emby-surface-elevated, #242424));
    color: var(--tmdb-emby-text, #fff);
}
.tmdb-content-panel__loader[hidden] { display: none; }
.tmdb-content-panel__spinner {
    width: 42px;
    height: 42px;
    box-sizing: border-box;
    border: 4px solid rgba(255, 255, 255, .18);
    border-top-color: var(--tmdb-emby-accent, #52b54b);
    border-radius: 50%;
    animation: tmdb-content-panel-spin .8s linear infinite;
}
@keyframes tmdb-content-panel-spin { to { transform: rotate(360deg); } }
.tmdb-content-panel__frame {
    flex: 1;
    width: 100%;
    min-height: 0;
    border: 0;
    /* Pages du panneau sombres : pas de flash blanc pendant le chargement. */
    background: var(--tmdb-emby-surface, #181818);
    transition: opacity .18s ease;
}
.tmdb-content-panel__frame.is-loading { opacity: 0; }

.tmdb-chat-launcher {
    position: relative !important;
    z-index: 1 !important;
    flex: 0 0 40px;
    width: 40px;
    height: 40px;
    display: grid;
    place-items: center;
    padding: 0;
    border: 1px solid var(--tmdb-emby-accent-border, rgba(82, 181, 75, .66));
    border-radius: 50%;
    background: var(--tmdb-emby-accent, #52b54b);
    color: var(--tmdb-emby-accent-text, #fff);
    box-shadow: 0 12px 32px var(--tmdb-emby-shadow, rgba(0, 0, 0, .38));
    font: 20px/1 sans-serif;
    cursor: pointer;
    pointer-events: auto !important;
    transition: transform .2s ease, filter .2s ease, box-shadow .2s ease;
}
.tmdb-chat-launcher:hover { transform: translateY(-2px) scale(1.04); filter: brightness(1.08); }
.tmdb-chat-launcher:focus-visible {
    outline: 3px solid var(--tmdb-emby-text, #fff);
    outline-offset: 3px;
}
.tmdb-chat-launcher[aria-expanded='true'] {
    box-shadow: 0 0 0 5px var(--tmdb-emby-accent-soft, rgba(82, 181, 75, .2)), 0 12px 32px var(--tmdb-emby-shadow, rgba(0, 0, 0, .38));
}
.tmdb-chat-launcher__badge {
    position: absolute;
    top: -2px;
    right: -2px;
    width: 13px;
    height: 13px;
    box-sizing: border-box;
    border: 2px solid var(--tmdb-emby-surface, #181818);
    border-radius: 50%;
    background: #ef4444;
    box-shadow: 0 0 0 0 rgba(239, 68, 68, .45);
}
.tmdb-chat-launcher__badge[hidden] { display: none; }
.tmdb-chat-launcher.has-unread {
    animation: tmdb-chat-unread-nudge 2.4s ease-in-out infinite;
}
.tmdb-chat-launcher.has-unread .tmdb-chat-launcher__badge {
    animation: tmdb-chat-unread-pulse 1.8s ease-out infinite;
}
@keyframes tmdb-chat-unread-nudge {
    0%, 72%, 100% { transform: translateX(0); }
    78% { transform: translateX(-2px) rotate(-2deg); }
    84% { transform: translateX(2px) rotate(2deg); }
    90% { transform: translateX(0); }
}
@keyframes tmdb-chat-unread-pulse {
    0% { box-shadow: 0 0 0 0 rgba(239, 68, 68, .5); }
    70%, 100% { box-shadow: 0 0 0 7px rgba(239, 68, 68, 0); }
}
.tmdb-chat-popover {
    position: fixed;
    z-index: var(--tmdb-z-chat);
    width: min(390px, calc(100vw - 20px));
    height: min(520px, calc(100dvh - 80px));
    min-height: 300px;
    display: flex;
    flex-direction: column;
    overflow: hidden;
    opacity: 0;
    visibility: hidden;
    transform: translateY(-12px) scale(.96);
    transform-origin: top right;
    transition: opacity .2s ease, transform .2s ease, visibility .2s;
}
.tmdb-chat-popover.is-open { opacity: 1; visibility: visible; transform: none; }

.tmdb-chat-popover__frame { flex: 1; width: 100%; min-height: 0; border: 0; background: var(--tmdb-emby-surface, #1c1c1f); }

.tmdb-contact-modal {
    position: fixed;
    inset: 0;
    z-index: var(--tmdb-z-modal);
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 16px;
    opacity: 0;
    visibility: hidden;
    transition: opacity .2s ease, visibility .2s;
}
.tmdb-contact-modal.is-open { opacity: 1; visibility: visible; }
.tmdb-contact-modal__backdrop { position: absolute; inset: 0; background: rgba(0, 0, 0, .6); }
.tmdb-contact-modal__box {
    position: relative;
    display: flex;
    flex-direction: column;
    width: min(480px, 100%);
    /* Seule la fenêtre défile, et seulement si l'écran est trop petit pour le formulaire. */
    max-height: calc(100dvh - 32px);
    overflow-y: auto;
    transform: scale(.96);
    transition: transform .2s ease;
}
.tmdb-contact-modal.is-open .tmdb-contact-modal__box { transform: none; }

/* Hauteur ajustée au formulaire par emby-addbutton.js (message tmdb-info-widget-resize). */
.tmdb-contact-modal__frame { flex: 0 0 auto; display: block; width: 100%; height: 440px; border: 0; background: var(--tmdb-emby-surface, #1c1c1f); }

.tmdb-other-projects-modal {
    position: fixed;
    inset: 0;
    z-index: var(--tmdb-z-modal);
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 16px;
    opacity: 0;
    visibility: hidden;
    transition: opacity .2s ease, visibility .2s;
}
.tmdb-other-projects-modal.is-open { opacity: 1; visibility: visible; }
.tmdb-other-projects-modal__backdrop { position: absolute; inset: 0; background: rgba(0, 0, 0, .6); }
.tmdb-other-projects-modal__box {
    position: relative;
    width: min(440px, 100%);
    transform: scale(.96);
    transition: transform .2s ease;
}
.tmdb-other-projects-modal.is-open .tmdb-other-projects-modal__box { transform: none; }

.tmdb-popover-loader {
    position: absolute;
    inset: 0;
    z-index: 2;
    display: grid;
    place-items: center;
    background: var(--tmdb-emby-surface, #111827);
    color: var(--tmdb-emby-accent, #52b54b);
}
.tmdb-popover-loader--chat { top: 56px; }
.tmdb-popover-loader[hidden] { display: none; }
.tmdb-popover-loader__spinner {
    width: 34px;
    height: 34px;
    box-sizing: border-box;
    border: 3px solid var(--tmdb-emby-control, rgba(255, 255, 255, .18));
    border-top-color: currentColor;
    border-radius: 50%;
    animation: tmdb-popover-loading-spin .72s linear infinite;
}
@keyframes tmdb-popover-loading-spin { to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: reduce) {
    .tmdb-popover-loader__spinner { animation-duration: 1.5s; }
}

.tmdb-sessions-popover {
    position: fixed;
    z-index: var(--tmdb-z-popover);
    display: flex;
    overflow: hidden;
    opacity: 0;
    visibility: hidden;
    transform: translateY(-8px) scale(.98);
    transform-origin: top left;
    transition: opacity .18s ease, transform .18s ease, visibility .18s;
}
.tmdb-sessions-popover.is-open { opacity: 1; visibility: visible; transform: none; }
.tmdb-sessions-popover__frame { flex: 1; width: 100%; min-height: 0; border: 0; border-radius: inherit; background: var(--tmdb-emby-surface, #181818); }

/* ---------------------------------------------------------------------------
   Barre d'outils au-dessus du header Emby
   Une seule ligne à toutes les tailles : l'état du serveur à gauche (défile
   horizontalement si la place manque), les actions à droite.
   --------------------------------------------------------------------------- */
.tmdb-visually-hidden {
    position: absolute !important;
    width: 1px !important;
    height: 1px !important;
    margin: -1px !important;
    padding: 0 !important;
    overflow: hidden !important;
    clip: rect(0 0 0 0) !important;
    white-space: nowrap !important;
    border: 0 !important;
}
.tmdb-visually-hidden[hidden] { display: none !important; }

.tmdb-cleanup-banner {
    position: fixed;
    top: env(safe-area-inset-top, 0px);
    left: 0;
    right: 0;
    z-index: var(--tmdb-z-banner);
    box-sizing: border-box;
    display: flex;
    align-items: center;
    gap: 12px;
    min-height: 44px;
    padding: 4px 12px;
    border-bottom: 1px solid var(--tmdb-emby-control, rgba(255, 255, 255, .13));
    background: var(--tmdb-emby-surface, #181818);
    color: var(--tmdb-emby-text, #fff);
    font-family: inherit;
    font-size: 13px;
    line-height: 1.2;
}
.tmdb-cleanup-banner__group {
    display: flex;
    align-items: center;
    gap: 4px;
    min-width: 0;
}
.tmdb-cleanup-banner__status {
    flex: 1 1 auto;
    /* Marge négative + padding : l'anneau de focus n'est pas rogné par le défilement. */
    margin: -3px;
    padding: 3px;
    overflow-x: auto;
    scrollbar-width: none;
}
.tmdb-cleanup-banner__status::-webkit-scrollbar { display: none; }
.tmdb-cleanup-banner__actions {
    flex: 0 0 auto;
    margin-left: auto;
}

.tmdb-icon {
    width: 20px;
    height: 20px;
    flex: 0 0 auto;
    fill: currentColor;
}
/* Les éléments SVG n'héritent pas de la règle [hidden] des éléments HTML. */
.tmdb-icon[hidden] { display: none; }

/* Boutons de la barre : discrets, comme les boutons du header Emby. */
.tmdb-banner-chip {
    position: relative;
    display: inline-flex;
    align-items: center;
    gap: 6px;
    flex: 0 0 auto;
    min-height: 34px;
    min-width: 34px;
    padding: 0 10px;
    border: 0;
    border-radius: 8px;
    background: transparent;
    color: var(--tmdb-emby-text, #fff);
    font: inherit;
    font-weight: 600;
    white-space: nowrap;
    cursor: pointer;
    transition: background-color .2s ease, color .2s ease;
}
.tmdb-banner-chip[hidden] { display: none; }
.tmdb-banner-chip:hover { background: var(--tmdb-emby-control, rgba(255, 255, 255, .13)); }
.tmdb-banner-chip[aria-expanded='true'] { background: var(--tmdb-emby-control-hover, rgba(255, 255, 255, .22)); }
.tmdb-banner-chip:focus-visible,
.tmdb-cleanup-banner__action:focus-visible {
    outline: 2px solid var(--tmdb-emby-accent, #52b54b);
    outline-offset: 1px;
}
.tmdb-cleanup-banner__status .tmdb-banner-chip { color: var(--tmdb-emby-text-muted, rgba(255, 255, 255, .72)); }
.tmdb-cleanup-banner__status .tmdb-banner-chip:hover,
.tmdb-cleanup-banner__status .tmdb-banner-chip[aria-expanded='true'] { color: var(--tmdb-emby-text, #fff); }
.tmdb-banner-chip.is-loading { opacity: .7; }

/* Bibliothèque : remplissage du disque sous le bouton. */
.tmdb-cleanup-banner__library-compact { display: none; }
.tmdb-cleanup-banner__library-disk-bar {
    position: absolute;
    left: 10px;
    right: 10px;
    bottom: 3px;
    height: 2px;
    overflow: hidden;
    border-radius: 2px;
    background: rgba(255, 255, 255, .15);
}
.tmdb-cleanup-banner__library-disk-bar > span {
    display: block;
    height: 100%;
    width: 0%;
    background: var(--tmdb-emby-accent, #52b54b);
    transition: width .5s ease, background-color .3s ease;
}
.tmdb-cleanup-banner__library-disk-bar.is-medium > span { background: #facc15; }
.tmdb-cleanup-banner__library-disk-bar.is-high > span { background: #f87171; }

/* Charge serveur : la couleur du point double la valeur affichée. */
.tmdb-cleanup-banner__server {
    --tmdb-server-state-color: #4ade80;
    --tmdb-server-state-glow: rgba(74, 222, 128, .2);
}
.tmdb-cleanup-banner__server.is-loading {
    --tmdb-server-state-color: #94a3b8;
    --tmdb-server-state-glow: rgba(148, 163, 184, .16);
}
.tmdb-cleanup-banner__server.is-medium {
    --tmdb-server-state-color: #facc15;
    --tmdb-server-state-glow: rgba(250, 204, 21, .22);
}
.tmdb-cleanup-banner__server.is-elevated {
    --tmdb-server-state-color: #fb923c;
    --tmdb-server-state-glow: rgba(251, 146, 60, .24);
}
.tmdb-cleanup-banner__server.is-high {
    --tmdb-server-state-color: #f87171;
    --tmdb-server-state-glow: rgba(248, 113, 113, .25);
}
.tmdb-cleanup-banner__server-dot {
    width: 8px;
    height: 8px;
    margin: 0 2px;
    border-radius: 50%;
    background: var(--tmdb-server-state-color);
    box-shadow: 0 0 0 3px var(--tmdb-server-state-glow);
    transition: background-color .25s ease, box-shadow .25s ease;
}
.tmdb-cleanup-banner__server-value,
.tmdb-cleanup-banner__sessions-count,
.tmdb-cleanup-banner__deletions-count { font-variant-numeric: tabular-nums; }

/* Pastilles de nouveauté (décoratives : le texte accessible est porté ailleurs). */
.tmdb-cleanup-banner__notifications-badge {
    position: absolute;
    top: 4px;
    right: 4px;
    width: 10px;
    height: 10px;
    box-sizing: border-box;
    border: 2px solid var(--tmdb-emby-surface, #181818);
    border-radius: 50%;
    background: #ef4444;
}
.tmdb-cleanup-banner__deletions-new-count {
    padding: 1px 5px;
    border-radius: 999px;
    background: #ef4444;
    color: #fff;
    font: 700 10px/1.3 system-ui, sans-serif;
}
.tmdb-cleanup-banner__deletions-new-count::before { content: '+'; }
.tmdb-cleanup-banner__notifications-badge[hidden],
.tmdb-cleanup-banner__deletions-new-count[hidden] { display: none; }

/* Action principale : seul élément coloré de la barre. */
.tmdb-cleanup-banner__action {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    flex: 0 0 auto;
    min-height: 34px;
    margin-left: 6px;
    padding: 0 12px 0 8px;
    border: 0;
    border-radius: 999px;
    background: var(--tmdb-emby-accent, #52b54b);
    color: var(--tmdb-emby-accent-text, #fff);
    font: inherit;
    font-weight: 700;
    white-space: nowrap;
    cursor: pointer;
    transition: filter .2s ease;
}
.tmdb-cleanup-banner__action:hover { filter: brightness(1.1); }
.tmdb-cleanup-banner__requests-count {
    min-width: 20px;
    box-sizing: border-box;
    padding: 2px 6px;
    border-radius: 999px;
    background: rgba(0, 0, 0, .25);
    font-size: 11px;
    text-align: center;
    font-variant-numeric: tabular-nums;
}
.tmdb-cleanup-banner__requests-count[hidden] { display: none; }

/* Écrans tactiles : cibles d'au moins 40px. */
@media (pointer: coarse) {
    .tmdb-banner-chip,
    .tmdb-cleanup-banner__action { min-height: 40px; }
    .tmdb-banner-chip { min-width: 40px; }
}

@media (max-width: 1400px) {
    .tmdb-cleanup-banner__library-full { display: none; }
    .tmdb-cleanup-banner__library-compact { display: inline; }
}

/* Largeur moyenne : actions secondaires en icônes seules (le libellé reste lu
   par les lecteurs d'écran et affiché en infobulle via title). */
@media (max-width: 1200px) {
    .tmdb-cleanup-banner__actions .tmdb-cleanup-banner__label,
    .tmdb-cleanup-banner__server .tmdb-cleanup-banner__label {
        position: absolute;
        width: 1px;
        height: 1px;
        margin: -1px;
        overflow: hidden;
        clip: rect(0 0 0 0);
        white-space: nowrap;
    }
    .tmdb-cleanup-banner__actions .tmdb-banner-chip { justify-content: center; padding: 0 7px; }
}

/* Mobile : barre compacte, l'état défile avec un fondu pour le signaler. */
@media (max-width: 760px) {
    .tmdb-cleanup-banner { gap: 6px; padding: 3px 6px; font-size: 12px; }
    .tmdb-cleanup-banner__status {
        -webkit-mask-image: linear-gradient(to right, #000 calc(100% - 18px), transparent);
        mask-image: linear-gradient(to right, #000 calc(100% - 18px), transparent);
        padding-right: 18px;
    }
    .tmdb-cleanup-banner__group { gap: 2px; }
    .tmdb-banner-chip { gap: 4px; padding: 0 6px; }
    .tmdb-cleanup-banner__sessions-label {
        position: absolute;
        width: 1px;
        height: 1px;
        margin: -1px;
        overflow: hidden;
        clip: rect(0 0 0 0);
        white-space: nowrap;
    }
    .tmdb-cleanup-banner__action { margin-left: 2px; padding: 0 10px 0 6px; }
}

@media (max-width: 420px) {
    .tmdb-cleanup-banner__action-label {
        position: absolute;
        width: 1px;
        height: 1px;
        margin: -1px;
        overflow: hidden;
        clip: rect(0 0 0 0);
        white-space: nowrap;
    }
    .tmdb-cleanup-banner__action { padding: 0 8px 0 6px; }
    .tmdb-banner-chip { padding: 0 4px; }
    .tmdb-cleanup-banner__status {
        -webkit-mask-image: linear-gradient(to right, #000 calc(100% - 10px), transparent);
        mask-image: linear-gradient(to right, #000 calc(100% - 10px), transparent);
        padding-right: 10px;
    }
}

@media (max-width: 760px) {
    .tmdb-notifications-popover__item { align-items: flex-start; flex-wrap: wrap; }
    .tmdb-homepage-info-notifications {
        right: 10px;
        bottom: 10px;
        width: calc(100vw - 20px);
    }
    .tmdb-homepage-info-notification { border-radius: 18px; }
    .tmdb-homepage-info-notification__text {
        display: -webkit-box;
        -webkit-box-orient: vertical;
        -webkit-line-clamp: 2;
        white-space: normal;
    }
    .tmdb-chat-popover {
        width: calc(100vw - 20px);
        height: min(500px, calc(100dvh - 80px));
        min-height: 260px;
    }
    .tmdb-content-panel { inset: 0; width: 100vw; height: 100vh; height: 100dvh; border-radius: 0; }
    .tmdb-content-panel__toolbar { min-height: 38px; padding: 3px 8px 3px 10px; }
    .tmdb-content-panel__toolbar .tmdb-menu-title { font-size: 14px; }
    .tmdb-content-panel__loader { inset: 38px 0 0; }
}

@media (prefers-reduced-motion: reduce) {
    .tmdb-chat-launcher.has-unread,
    .tmdb-chat-launcher.has-unread .tmdb-chat-launcher__badge { animation: none; }
}


/* ---------------------------------------------------------------------------
   Bouton « Coup de cœur » de la fiche et avis proposé juste après
   --------------------------------------------------------------------------- */
.btnTmdbFavorite,
.btnTmdbDirectPlayback,
.btnTmdbCopyStreamUrl { display: inline-flex; align-items: center; gap: 8px; }
.btnTmdbFavorite .tmdb-icon,
.btnTmdbDirectPlayback .tmdb-icon,
.btnTmdbCopyStreamUrl .tmdb-icon { width: 20px; height: 20px; }
.btnTmdbFavorite[aria-pressed='true'] .tmdb-icon { color: #f87171; }
.btnTmdbSeasonsCheck {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 40px;
    height: 40px;
    min-width: 0;
    padding: 0;
    border-radius: 50%;
}
/* Seul bouton d'action rond de la rangée à la couleur du thème : il se repère au premier coup d'œil */
.btnTmdbSeasonsCheck.emby-button {
    border: 1px solid var(--tmdb-emby-accent-border, rgba(82, 181, 75, .66));
    background: var(--tmdb-emby-accent, #52b54b);
    color: var(--tmdb-emby-accent-text, #fff);
    transition: transform .2s ease, filter .2s ease;
    animation: tmdb-seasons-check-halo 1.8s ease-out 1.2s 2;
}
.btnTmdbSeasonsCheck.emby-button:hover:not(:disabled) { transform: scale(1.08); filter: brightness(1.1); }
.btnTmdbSeasonsCheck.emby-button:focus-visible { outline: 2px solid var(--tmdb-emby-text, #fff); outline-offset: 2px; }
.btnTmdbSeasonsCheck.emby-button:disabled { opacity: .6; animation: none; }
/* Les thèmes (themes/*.css) habillent tous les .detailButton.raised avec !important : sans
   cette règle plus spécifique, la loupe y perdrait sa couleur d'accent. */
html body .btnTmdbSeasonsCheck.detailButton.raised:not(.detailButton-primary, :focus) {
    border: 1px solid var(--tmdb-emby-accent-border, rgba(82, 181, 75, .66)) !important;
    background: var(--tmdb-emby-accent, #52b54b) !important;
    color: var(--tmdb-emby-accent-text, #fff) !important;
    -webkit-backdrop-filter: none;
    backdrop-filter: none;
}
.btnTmdbSeasonsCheck .tmdb-icon { width: 22px; height: 22px; }
/* Halo discret à l'affichage de la fiche, deux fois seulement */
@keyframes tmdb-seasons-check-halo {
    from { box-shadow: 0 0 0 0 var(--tmdb-emby-accent-soft, rgba(82, 181, 75, .45)); }
    to { box-shadow: 0 0 0 14px transparent; }
}
@media (prefers-reduced-motion: reduce) {
    .btnTmdbSeasonsCheck.emby-button { animation: none; transition: none; }
    .btnTmdbSeasonsCheck.emby-button:hover:not(:disabled) { transform: none; }
}

/* Saisons disponibles mais absentes d'Emby : cartes fantômes sous la fiche d'une série */
.tmdb-seasons-panel { margin: 16px 0; padding: 0 3.3%; color: var(--tmdb-emby-text, #fff); }
.tmdb-seasons-panel__title { margin: 0 0 12px; font-size: 1.15em; font-weight: 500; }
/* Verdict de la recherche : un bandeau bien visible sous les boutons */
.tmdb-seasons-panel__message {
    display: flex;
    align-items: center;
    gap: 12px;
    width: fit-content;
    max-width: 100%;
    margin: 0;
    padding: 12px 18px;
    border-radius: 10px;
    background: var(--tmdb-emby-control, rgba(255, 255, 255, .08));
    color: var(--tmdb-emby-text, #fff);
    font-size: 1.1em;
}
.tmdb-seasons-panel__message .tmdb-icon { flex: none; width: 28px; height: 28px; }
.tmdb-seasons-panel__message.is-complete,
.tmdb-seasons-panel__message.is-uptodate {
    border: 1px solid rgba(74, 222, 128, .55);
    background: rgba(74, 222, 128, .16);
    font-weight: 600;
}
.tmdb-seasons-panel__message.is-complete .tmdb-icon,
.tmdb-seasons-panel__message.is-uptodate .tmdb-icon { color: #4ade80; }
.tmdb-seasons-panel__message.is-error { border: 1px solid rgba(248, 113, 113, .55); background: rgba(248, 113, 113, .14); }
/* Nouvelles saisons / épisodes : cadre aux couleurs d'accent du thème */
.tmdb-seasons-panel__frame {
    position: relative;
    width: fit-content;
    max-width: 100%;
    box-sizing: border-box;
    isolation: isolate;
    padding: 14px 18px 18px;
    border: 1px solid var(--tmdb-emby-accent-border, rgba(82, 181, 75, .66));
    border-left: 5px solid var(--tmdb-emby-accent, #52b54b);
    border-radius: 12px;
    box-shadow: 0 0 18px var(--tmdb-emby-accent-soft, rgba(82, 181, 75, .45));
}
/* Voile d'accent sous le contenu (pas de color-mix : la teinte vient de la couleur du thème) */
.tmdb-seasons-panel__frame::before {
    content: '';
    position: absolute;
    inset: 0;
    z-index: -1;
    border-radius: inherit;
    background: var(--tmdb-emby-accent, #52b54b);
    opacity: .14;
}
.tmdb-seasons-panel__frame .tmdb-seasons-panel__title { color: var(--tmdb-emby-accent, #52b54b); font-weight: 600; }
.tmdb-seasons-panel__list { display: flex; flex-wrap: wrap; gap: 16px; }
.tmdb-ghost-season { display: flex; flex-direction: column; gap: 6px; width: 150px; }
.tmdb-ghost-season__poster {
    aspect-ratio: 2 / 3;
    border: 2px dashed var(--tmdb-emby-accent-border, rgba(82, 181, 75, .66));
    border-radius: 8px;
    background: var(--tmdb-emby-control, rgba(255, 255, 255, .06));
    overflow: hidden;
}
/* Fantôme : affiche à peine désaturée et un peu transparente, comme un titre pas encore là (les couleurs restent visibles) */
.tmdb-ghost-season__poster img { display: block; width: 100%; height: 100%; object-fit: cover; filter: grayscale(.35); opacity: .75; }
.tmdb-ghost-season__title { font-weight: 500; }
.tmdb-ghost-season__details,
.tmdb-ghost-season__status,
.tmdb-ghost-season__download-text { font-size: .85em; color: var(--tmdb-emby-text-muted, rgba(255, 255, 255, .72)); }
.tmdb-ghost-season__status { min-height: 0; }
.tmdb-ghost-season__status:empty { display: none; }
.tmdb-ghost-season__status { color: #f87171; }
.tmdb-ghost-season__request { display: inline-flex; align-items: center; justify-content: center; gap: 6px; margin: 4px 0 0; }
.tmdb-ghost-season__request .tmdb-icon { width: 18px; height: 18px; }
/* Bouton d'accent comme la loupe ; sélecteur plus spécifique que les styles .raised d'Emby */
html body .tmdb-ghost-season__request.emby-button.raised {
    border: 1px solid var(--tmdb-emby-accent-border, rgba(82, 181, 75, .66));
    background: var(--tmdb-emby-accent, #52b54b);
    color: var(--tmdb-emby-accent-text, #fff);
    font-weight: 600;
}
html body .tmdb-ghost-season__request.emby-button.raised:hover:not(:disabled) { filter: brightness(1.1); }
.tmdb-ghost-season__request:disabled { opacity: .7; cursor: default; }
.tmdb-ghost-season__download { display: grid; gap: 4px; }
.tmdb-ghost-season__bar { height: 6px; border-radius: 3px; background: var(--tmdb-emby-control-hover, rgba(255, 255, 255, .22)); overflow: hidden; }
.tmdb-ghost-season__bar-fill { display: block; height: 100%; background: var(--tmdb-emby-accent, #52b54b); transition: width .4s ease; }
.tmdb-ghost-season__download[data-stage='stalled'] .tmdb-ghost-season__bar-fill { background: #fbbf24; }
.tmdb-ghost-season__download[data-stage='done'] .tmdb-ghost-season__bar-fill { background: #4ade80; }
@media (prefers-reduced-motion: reduce) {
    .tmdb-ghost-season__bar-fill { transition: none; }
}

/* <dialog> natif : focus, Échap et arrière-plan inerte gérés par le navigateur */
.tmdb-favorite-comment-dialog,
.tmdb-vlc-fallback-dialog {
    width: min(440px, calc(100vw - 24px));
    max-height: calc(100dvh - 24px);
    padding: 0;
    overflow: auto;
}
.tmdb-favorite-comment-dialog::backdrop,
.tmdb-vlc-fallback-dialog::backdrop { background: rgba(0, 0, 0, .6); }
.tmdb-favorite-comment-dialog__form { display: grid; gap: 14px; padding: 0 20px 20px; }
.tmdb-favorite-comment-dialog__intro { margin: 0; color: var(--tmdb-emby-text-muted, rgba(255, 255, 255, .72)); }
.tmdb-field { display: grid; gap: 6px; font-size: 14px; font-weight: 600; }
.tmdb-field input,
.tmdb-field textarea {
    box-sizing: border-box;
    width: 100%;
    min-height: 44px;
    padding: 10px 12px;
    border: 1px solid var(--tmdb-emby-control-hover, rgba(255, 255, 255, .22));
    border-radius: 10px;
    background: var(--tmdb-emby-surface-elevated, #242424);
    color: inherit;
    font: inherit;
    font-weight: 400;
}
.tmdb-field textarea { resize: vertical; }
.tmdb-field input:focus,
.tmdb-field textarea:focus {
    border-color: var(--tmdb-emby-accent, #52b54b);
    outline: none;
    box-shadow: 0 0 0 3px var(--tmdb-emby-accent-soft, rgba(82, 181, 75, .25));
}
.tmdb-season-request-dialog__summary { margin: 0; font-weight: 700; }
.tmdb-favorite-comment-dialog__status { margin: 0; font-weight: 600; }
.tmdb-favorite-comment-dialog__status:empty { display: none; }
.tmdb-favorite-comment-dialog__status.is-error { color: #fda4af; }
.tmdb-favorite-comment-dialog__actions,
.tmdb-vlc-fallback-dialog__actions { display: flex; justify-content: flex-end; gap: 10px; }
.tmdb-favorite-comment-dialog__actions button,
.tmdb-vlc-fallback-dialog__actions > * {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    min-height: 42px;
    padding: 0 18px;
    border: 0;
    border-radius: 999px;
    font: inherit;
    font-weight: 700;
    cursor: pointer;
}
.tmdb-favorite-comment-dialog__later,
.tmdb-vlc-fallback-dialog__store { background: var(--tmdb-emby-control, rgba(255, 255, 255, .13)); color: inherit; }
.tmdb-favorite-comment-dialog__submit,
.tmdb-vlc-fallback-dialog__copy { background: var(--tmdb-emby-accent, #52b54b); color: #0b1d0a; }
.tmdb-favorite-comment-dialog__actions button:focus-visible,
.tmdb-vlc-fallback-dialog__actions > :focus-visible { outline: 2px solid var(--tmdb-emby-text, #fff); outline-offset: 2px; }
.tmdb-favorite-comment-dialog__actions button:disabled { opacity: .6; cursor: wait; }
.tmdb-vlc-fallback-dialog__body { display: grid; gap: 14px; padding: 0 20px 20px; }
.tmdb-vlc-fallback-dialog__body p { margin: 0; color: var(--tmdb-emby-text-muted, rgba(255, 255, 255, .72)); }
.tmdb-vlc-fallback-dialog__actions { flex-wrap: wrap; }
.tmdb-vlc-fallback-dialog__store { text-decoration: none; }
.tmdb-vlc-fallback-dialog__copy .tmdb-icon { width: 20px; height: 20px; }

/* ---------------------------------------------------------------------------
   Rangée « Coups de cœur de la communauté » sur l'accueil (emby-addbutton.js)
   Titre avec les classes d'Emby ; cartes au format des affiches d'Emby.
   --------------------------------------------------------------------------- */
.tmdb-home-favorites { margin-bottom: 1.6em; }
.tmdb-home-favorites__title-link {
    display: inline-flex;
    align-items: center;
    gap: .15em;
    padding: 0;
    border: 0;
    background: none;
    color: inherit;
    font: inherit;
    letter-spacing: inherit;
    cursor: pointer;
}
.tmdb-home-favorites__title-link .tmdb-icon { width: 1.1em; height: 1.1em; transition: transform .2s ease; }
.tmdb-home-favorites__title-link:hover { color: var(--tmdb-emby-accent, #52b54b); }
.tmdb-home-favorites__title-link:hover .tmdb-icon { transform: translateX(3px); }
.tmdb-home-favorites__title-link:focus-visible { outline: 2px solid var(--tmdb-emby-accent, #52b54b); outline-offset: 3px; border-radius: 4px; }
.tmdb-home-favorites__list {
    display: flex;
    gap: 1em;
    margin: 0;
    padding-top: .4em;
    padding-bottom: .6em;
    overflow-x: auto;
    list-style: none;
    /* Pas d'aimantation : elle décalait le début de rangée et faussait les flèches. */
    /* Barre masquée : flèches à la souris, doigt sur écran tactile, molette et
       clavier (Tab fait défiler jusqu'à la carte) restent disponibles. */
    scrollbar-width: none;
}
.tmdb-home-favorites__list::-webkit-scrollbar { display: none; }
.tmdb-home-favorites__list > li { flex: 0 0 auto; }
.tmdb-home-favorites__scroller { position: relative; }
.tmdb-home-favorites__arrow {
    position: absolute;
    top: calc(.4em + 7.1em);
    z-index: 2;
    display: grid;
    place-items: center;
    width: 2.6em;
    height: 2.6em;
    padding: 0;
    border: 0;
    border-radius: 50%;
    background: hsla(var(--background-hue, 0), var(--background-saturation, 0%), calc(var(--background-lightness, 8%) + 8%), .92);
    color: var(--tmdb-emby-text, #fff);
    box-shadow: 0 4px 14px rgba(0, 0, 0, .5);
    cursor: pointer;
    transform: translateY(-50%);
    transition: background-color .2s ease, transform .2s ease;
}
.tmdb-home-favorites__arrow[hidden] { display: none; }
.tmdb-home-favorites__arrow--previous { left: .4em; }
.tmdb-home-favorites__arrow--next { right: .4em; }
.tmdb-home-favorites__arrow:hover { background: var(--tmdb-emby-accent, #52b54b); color: var(--tmdb-emby-accent-text, #fff); }
.tmdb-home-favorites__arrow:focus-visible { outline: 2px solid var(--tmdb-emby-text, #fff); outline-offset: 2px; }
.tmdb-home-favorites__arrow .tmdb-icon { width: 1.6em; height: 1.6em; }
/* Sur écran tactile, on fait défiler au doigt : pas de flèches. */
@media (hover: none) {
    .tmdb-home-favorites__arrow { display: none !important; }
}
.tmdb-home-favorites__card {
    display: grid;
    gap: .35em;
    width: 9.5em;
    color: inherit;
    text-decoration: none;
}
.tmdb-home-favorites__card img {
    display: block;
    width: 100%;
    aspect-ratio: 2 / 3;
    border-radius: .5em;
    object-fit: cover;
    background: hsla(var(--card-background-hue, 0), var(--card-background-saturation, 0%), var(--card-background-lightness, 20%), var(--card-background-alpha, .7));
    transition: transform .25s ease, box-shadow .25s ease;
}
.tmdb-home-favorites__card:hover img,
.tmdb-home-favorites__card:focus-visible img {
    transform: translateY(-3px);
    box-shadow: 0 0 0 3px var(--tmdb-emby-accent, #52b54b), 0 14px 30px rgba(0, 0, 0, .5);
}
.tmdb-home-favorites__card:focus-visible { outline: none; }
.tmdb-home-favorites__title {
    overflow: hidden;
    font-size: .95em;
    font-weight: 600;
    white-space: nowrap;
    text-overflow: ellipsis;
}
.tmdb-home-favorites__meta {
    display: inline-flex;
    align-items: center;
    gap: .3em;
    color: var(--tmdb-emby-text-muted, rgba(255, 255, 255, .72));
    font-size: .85em;
}
.tmdb-home-favorites__meta .tmdb-icon { width: 1.1em; height: 1.1em; color: #f87171; }

/* ---------------------------------------------------------------------------
   Logo Media Boogers à la place du logo Emby : écran de chargement, en-tête et
   menu latéral. Logo intégré (source : add_emby_button/media-boogers-logo.svg) pour
   ne pas dépendre du type MIME des .svg servis par Emby. Deux variantes :
   texte blanc (fonds sombres) et texte foncé (thème clair d'Emby).
   Cette feuille est chargée juste après le style intégré d'index.html :
   l'écran de chargement change dès le premier affichage.
   --------------------------------------------------------------------------- */
:root {
    --tmdb-logo-on-dark: url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 880 160%22 role=%22img%22 aria-label=%22Media Boogers%22%3E%3Cdefs%3E%3ClinearGradient id=%22m%22 x1=%220%22 y1=%220%22 x2=%221%22 y2=%221%22%3E%3Cstop offset=%220%22 stop-color=%22%23fcd34d%22/%3E%3Cstop offset=%22.5%22 stop-color=%22%23f59e0b%22/%3E%3Cstop offset=%221%22 stop-color=%22%23ea580c%22/%3E%3C/linearGradient%3E%3C/defs%3E%3Crect x=%224%22 y=%224%22 width=%22152%22 height=%22152%22 rx=%2240%22 fill=%22url(%23m)%22/%3E%3Cpath d=%22M34 70h92v44a10 10 0 0 1-10 10H44a10 10 0 0 1-10-10z%22 fill=%22%23fff%22/%3E%3Cpath d=%22M31 56l86-23 4 15-86 23z%22 fill=%22%23fff%22/%3E%3Cpath d=%22M52 51l12 15M77 44l12 15M102 37l12 15%22 stroke=%22%23ea580c%22 stroke-width=%229%22 stroke-linecap=%22round%22/%3E%3Cpath d=%22M70 86v26l22-13z%22 fill=%22%23ea580c%22/%3E%3Ctext x=%22186%22 y=%22114%22 fill=%22%23fff%22 font-family=%22Inter, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif%22 font-size=%22100%22 letter-spacing=%22-3%22%3E%3Ctspan font-weight=%22500%22 fill-opacity=%22.85%22%3EMedia %3C/tspan%3E%3Ctspan font-weight=%22800%22%3EBoogers%3C/tspan%3E%3C/text%3E%3C/svg%3E");
    --tmdb-logo-on-light: url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 880 160%22 role=%22img%22 aria-label=%22Media Boogers%22%3E%3Cdefs%3E%3ClinearGradient id=%22m%22 x1=%220%22 y1=%220%22 x2=%221%22 y2=%221%22%3E%3Cstop offset=%220%22 stop-color=%22%23fcd34d%22/%3E%3Cstop offset=%22.5%22 stop-color=%22%23f59e0b%22/%3E%3Cstop offset=%221%22 stop-color=%22%23ea580c%22/%3E%3C/linearGradient%3E%3C/defs%3E%3Crect x=%224%22 y=%224%22 width=%22152%22 height=%22152%22 rx=%2240%22 fill=%22url(%23m)%22/%3E%3Cpath d=%22M34 70h92v44a10 10 0 0 1-10 10H44a10 10 0 0 1-10-10z%22 fill=%22%23fff%22/%3E%3Cpath d=%22M31 56l86-23 4 15-86 23z%22 fill=%22%23fff%22/%3E%3Cpath d=%22M52 51l12 15M77 44l12 15M102 37l12 15%22 stroke=%22%23ea580c%22 stroke-width=%229%22 stroke-linecap=%22round%22/%3E%3Cpath d=%22M70 86v26l22-13z%22 fill=%22%23ea580c%22/%3E%3Ctext x=%22186%22 y=%22114%22 fill=%22%231c1917%22 font-family=%22Inter, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif%22 font-size=%22100%22 letter-spacing=%22-3%22%3E%3Ctspan font-weight=%22500%22 fill-opacity=%22.85%22%3EMedia %3C/tspan%3E%3Ctspan font-weight=%22800%22%3EBoogers%3C/tspan%3E%3C/text%3E%3C/svg%3E");
}
.app-splash {
    background-image: var(--tmdb-logo-on-dark);
    background-position: center;
}
/* Logo par défaut d'Emby (les logos propres à un film n'ont pas cette classe).
   :root et la double classe passent devant « .darkContentContainer … » d'Emby. */
:root .pageTitleWithDefaultLogo.pageTitleWithLogo {
    width: 7.2em;
    background-image: var(--tmdb-logo-on-dark);
}
:root.theme-light .pageTitleWithDefaultLogo.pageTitleWithLogo {
    background-image: var(--tmdb-logo-on-light);
}
:root.theme-light .darkContentContainer .pageTitleWithDefaultLogo.pageTitleWithLogo {
    background-image: var(--tmdb-logo-on-dark);
}

/* Thèmes du site dans Emby : texte posé sur la couleur principale.
   Emby écrit en blanc sur --theme-primary-color (bouton « valider », entrée de
   menu sélectionnée). Les couleurs principales des thèmes sont claires (ambre,
   cyan…) : le blanc y tombe sous 2,5:1. Texte foncé à la place (≥ 8:1).
   Un thème à couleur principale foncée redéfinit --tmdb-on-primary-color. */
html[class*="tmdb-theme-"] {
    --tmdb-on-primary-color: hsl(var(--theme-primary-color-hue), 60%, 7%);
}
html[class*="tmdb-theme-"] :is(.button-submit, .navMenuOption-selected .listItem-content, .navMenuOption-selected .navMenuOptionIcon) {
    color: var(--tmdb-on-primary-color);
}

/* ---------------------------------------------------------------------------
   Tri rapide des bibliothèques Films et Séries (« Les derniers ajouts »,
   « Les meilleures notes »), posé devant le bouton « Trier par » natif.
   --------------------------------------------------------------------------- */
.tmdb-quick-sort {
    display: inline-flex;
    gap: 8px;
    margin: 0 .6em;
    vertical-align: middle;
}
.tmdb-quick-sort__button {
    min-height: 36px;
    padding: 0 16px;
    border: 0;
    border-radius: 999px;
    background: var(--tmdb-emby-control, rgba(255, 255, 255, .13));
    color: var(--tmdb-emby-text, #fff);
    font: inherit;
    font-weight: 600;
    white-space: nowrap;
    cursor: pointer;
    transition: background-color .2s ease, color .2s ease;
}
.tmdb-quick-sort__button:hover { background: var(--tmdb-emby-control-hover, rgba(255, 255, 255, .22)); }
.tmdb-quick-sort__button[aria-pressed='true'] {
    background: var(--tmdb-emby-accent, #52b54b);
    color: var(--tmdb-emby-accent-text, #fff);
}
.tmdb-quick-sort__button:focus-visible { outline: 2px solid var(--tmdb-emby-accent, #52b54b); outline-offset: 2px; }
@media (prefers-reduced-motion: reduce) {
    .tmdb-quick-sort__button { transition: none; }
}
/* ============================================================================
   Thème saisonnier « automne » — interface Emby
   Activé par la classe html.tmdb-theme-autumn (posée par emby-addbutton.js,
   hors pages d'administration). Assemblé à la suite de emby-addbutton.css par
   add_emby_button.sh. Contrat d'un thème : assets/css/themes/README.md.
   ============================================================================ */

/* ---------------------------------------------------------------------------
   Thème saisonnier « automne » pour toute l'interface Emby
   Emby construit ses thèmes avec des variables HSL (fond, cartes, accent,
   texte) : il suffit de les redéfinir, quel que soit le thème choisi par
   l'utilisateur. La classe est posée par emby-addbutton.js, sauf sur les
   pages d'administration. « html:root » passe devant « .accent-emby:root ».
   --------------------------------------------------------------------------- */
html:root.tmdb-theme-autumn {
    /* Logo Media Boogers (syncBrandLogo) : tuile ambre → orange, bandes orange
       sur le clap blanc (3,6:1). Ce sont les couleurs d'origine du logo. */
    --tmdb-logo-from: #fcd34d;
    --tmdb-logo-via: #f59e0b;
    --tmdb-logo-to: #ea580c;
    --tmdb-logo-ink: #ea580c;

    /* Base #130a06, comme --ui-bg des pages du thème (assets/css/themes/autumn.css) */
    --background-hue: 21;
    --background-saturation: 52%;
    --background-lightness: 5%;
    --card-background-saturation: 30%;
    --input-background-saturation: 30%;
    --button-background-saturation: 30%;

    --theme-primary-color-hue: 36;
    --theme-primary-color-saturation: 92%;
    --theme-primary-color-lightness: 52%;

    --theme-text-color-hue: 32;
    --theme-text-color-saturation: 70%;
    --theme-text-color-lightness: 95%;
    --theme-text-color-alpha: 1;
    --theme-secondary-text-color-alpha: .66;

    --theme-accent-text-color-darkbg: #fbbf24;
    --theme-accent-text-color-lightbg: #fbbf24;
    --theme-accent-text-color: #fbbf24;
    --theme-accent-text-color-darkbg-alt: #fdba74;
    --theme-accent-text-color-alt: #fdba74;

    /* Élément focalisé (télécommande, clavier) : ambre, texte foncé */
    --focus-background-hue: 38;
    --focus-background-saturation: 92%;
    --focus-background-lightness: 58%;
    --focus-blur-background-lightness: 58%;
    --focus-text-color-lightness: 8%;

    --header-background: hsl(20, 38%, 8%);
    --header-blur-background: hsla(20, 40%, 8%, .78);
    --docked-drawer-background: hsla(20, 38%, 9%, .96);

    color-scheme: dark;
}

/* Même fond que les pages du thème (--ui-bg et --ui-bg-ambiance de themes/autumn.css).
   .backgroundContainer est le calque opaque sous toutes les vues d'Emby. */
html.tmdb-theme-autumn .backgroundContainer {
    background-color: #130a06;
    background-image:
        radial-gradient(70% 55% at 85% -5%, rgba(251, 146, 60, .22), transparent 70%),
        radial-gradient(60% 50% at -10% 105%, rgba(185, 28, 28, .2), transparent 70%),
        radial-gradient(40% 35% at 50% 110%, rgba(245, 158, 11, .12), transparent 75%);
}
/* Fiche avec image de fond : voile brun chaud au lieu du noir d'Emby. */
html.tmdb-theme-autumn .backgroundContainer.withBackdrop {
    background-color: rgba(19, 10, 6, .84);
}

/* Titres en serif, comme les pages du site */
html.tmdb-theme-autumn :is(.sectionTitle, .itemName-primary, .pageTitle) {
    font-family: "Iowan Old Style", "Palatino Linotype", Palatino, "Book Antiqua", Georgia, serif;
    letter-spacing: -.01em;
}

/* ---------------------------------------------------------------------------
   Feuilles qui tombent (thème automne), derrière les cartes : voir
   syncAutumnLeaves() dans emby-addbutton.js. Formes et mouvement identiques
   à assets/css/themes/autumn.css (pages du site) ; garder les deux alignés.
   --------------------------------------------------------------------------- */
.tmdb-autumn-leaves {
    position: fixed;
    inset: 0;
    overflow: hidden;
    pointer-events: none;
}
.tmdb-autumn-leaves[hidden] { display: none; }
.tmdb-autumn-leaf {
    position: absolute;
    top: 0;
    left: var(--leaf-left);
    width: var(--leaf-size);
    height: var(--leaf-size);
    opacity: var(--leaf-opacity);
    filter: blur(var(--leaf-blur, 0px)) drop-shadow(0 4px 6px rgba(0, 0, 0, .35));
    perspective: 300px;
    animation: tmdb-autumn-leaf-fall var(--leaf-duration) linear var(--leaf-delay) infinite;
    will-change: transform;
}
.tmdb-autumn-leaf__blade {
    position: absolute;
    inset: 0;
    background: linear-gradient(var(--leaf-angle), var(--leaf-light), var(--leaf-dark));
    -webkit-mask: var(--leaf-shape) center / contain no-repeat;
    mask: var(--leaf-shape) center / contain no-repeat;
    animation: tmdb-autumn-leaf-flutter var(--leaf-flutter) ease-in-out var(--leaf-delay) infinite alternate;
}
.tmdb-autumn-leaf--maple { --leaf-shape: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Cpath d='M50 2 58 22 72 14 68 34 90 30 78 46 96 56 72 60 76 76 58 68 53 98 47 98 42 68 24 76 28 60 4 56 22 46 10 30 32 34 28 14 42 22Z'/%3E%3C/svg%3E"); }
.tmdb-autumn-leaf--oak { --leaf-shape: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Cpath d='M50 2C60 6 58 16 66 18 76 20 72 32 80 36 90 40 82 52 88 58 94 66 80 70 76 76 72 84 62 82 56 90L52 98H48L44 90C38 82 28 84 24 76 20 70 6 66 12 58 18 52 10 40 20 36 28 32 24 20 34 18 42 16 40 6 50 2Z'/%3E%3C/svg%3E"); }
.tmdb-autumn-leaf--birch { --leaf-shape: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Cpath d='M50 2C80 24 82 62 52 98H48C18 62 20 24 50 2Z'/%3E%3C/svg%3E"); }
.tmdb-autumn-leaf--ginkgo { --leaf-shape: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Cpath d='M50 98 48 60C30 58 6 46 4 26 20 10 38 4 50 18 62 4 80 10 96 26 94 46 70 58 52 60Z'/%3E%3C/svg%3E"); }
.tmdb-autumn-leaves.is-paused .tmdb-autumn-leaf,
.tmdb-autumn-leaves.is-paused .tmdb-autumn-leaf__blade { animation-play-state: paused; }

@keyframes tmdb-autumn-leaf-fall {
    0% { transform: translate3d(var(--leaf-x-start), -14vh, 0) rotate(0deg); }
    25% { transform: translate3d(var(--leaf-x-first), 22vh, 0) rotate(calc(var(--leaf-spin) * .25)); }
    50% { transform: translate3d(var(--leaf-x-middle), 50vh, 0) rotate(calc(var(--leaf-spin) * .5)); }
    75% { transform: translate3d(var(--leaf-x-last), 80vh, 0) rotate(calc(var(--leaf-spin) * .75)); }
    100% { transform: translate3d(var(--leaf-x-end), 114vh, 0) rotate(var(--leaf-spin)); }
}
@keyframes tmdb-autumn-leaf-flutter {
    0% { transform: rotate3d(1, .4, 0, -55deg) rotate(-18deg); }
    50% { transform: rotate3d(.3, 1, 0, 40deg) rotate(6deg); }
    100% { transform: rotate3d(1, -.3, 0, 70deg) rotate(22deg); }
}
@media (prefers-reduced-motion: reduce) {
    .tmdb-autumn-leaves { display: none; }
}

/* Fond du thème dès que le script a appliqué le thème (mis en cache). */
html.tmdb-theme-autumn .app-splash-container {
    background-color: #130a06;
    background-image:
        radial-gradient(70% 55% at 85% -5%, rgba(251, 146, 60, .22), transparent 70%),
        radial-gradient(60% 50% at -10% 105%, rgba(185, 28, 28, .2), transparent 70%);
}
/* ============================================================================
   Thème « Hyperdrive » — interface Emby
   Activé par la classe html.tmdb-theme-hyperdrive (posée par emby-addbutton.js,
   hors pages d'administration). Assemblé à la suite de emby-addbutton.css par
   add_emby_button.sh. Contrat d'un thème : assets/css/themes/README.md.
   Contrastes : texte ≈ hsl(214 100% 95%) sur fond hsl(222 50% 4%) ≈ 17:1 ;
   accent cyan sur fond ≈ 11:1 ; texte foncé sur élément focalisé ≈ 10:1.
   Mouvement : aurore et grille en CSS ci-dessous, traînées lumineuses par
   syncHyperdriveStreaks() ; tout est en pause pendant la lecture
   (html.tmdb-motion-paused) et coupé avec « réduire les animations ».
   ============================================================================ */

html:root.tmdb-theme-hyperdrive {
    /* Base #05080f, comme --ui-bg des pages du thème (assets/css/themes/hyperdrive.css) */
    --background-hue: 222;
    --background-saturation: 50%;
    --background-lightness: 4%;
    --card-background-saturation: 40%;
    --input-background-saturation: 40%;
    --button-background-saturation: 40%;

    --theme-primary-color-hue: 188;
    --theme-primary-color-saturation: 86%;
    --theme-primary-color-lightness: 53%;

    --theme-text-color-hue: 214;
    --theme-text-color-saturation: 100%;
    --theme-text-color-lightness: 95%;
    --theme-text-color-alpha: 1;
    --theme-secondary-text-color-alpha: .7;

    --theme-accent-text-color-darkbg: #67e8f9;
    --theme-accent-text-color-lightbg: #67e8f9;
    --theme-accent-text-color: #67e8f9;
    --theme-accent-text-color-darkbg-alt: #c4b5fd;
    --theme-accent-text-color-alt: #c4b5fd;

    /* Élément focalisé (télécommande, clavier) : cyan, texte foncé */
    --focus-background-hue: 188;
    --focus-background-saturation: 86%;
    --focus-background-lightness: 60%;
    --focus-blur-background-lightness: 60%;
    --focus-text-color-lightness: 6%;

    /* Logo Media Boogers (syncBrandLogo) : tuile cyan → indigo → violet,
       bandes indigo sur le clap blanc (6,3:1). */
    --tmdb-logo-from: #22d3ee;
    --tmdb-logo-via: #6366f1;
    --tmdb-logo-to: #a855f7;
    --tmdb-logo-ink: #4f46e5;

    --header-background: hsl(222, 45%, 7%);
    --header-blur-background: hsla(222, 45%, 7%, .72);
    --docked-drawer-background: hsla(222, 45%, 7%, .94);

    color-scheme: dark;
}

/* ---- Fond : aurore qui dérive (::before) et grille qui défile (::after) ---- */
html.tmdb-theme-hyperdrive .backgroundContainer {
    background-color: #05080f;
    overflow: hidden;
}
html.tmdb-theme-hyperdrive .backgroundContainer::before,
html.tmdb-theme-hyperdrive .backgroundContainer::after {
    content: '';
    position: absolute;
    pointer-events: none;
}
html.tmdb-theme-hyperdrive .backgroundContainer::before {
    inset: -25%;
    background:
        radial-gradient(32% 28% at 72% 28%, rgba(34, 211, 238, .2), transparent 70%),
        radial-gradient(30% 26% at 26% 72%, rgba(168, 85, 247, .18), transparent 70%),
        radial-gradient(24% 20% at 52% 50%, rgba(129, 140, 248, .12), transparent 70%);
    animation: tmdb-hyperdrive-aurora 28s ease-in-out infinite alternate;
}
html.tmdb-theme-hyperdrive .backgroundContainer::after {
    left: -50%;
    right: -50%;
    bottom: 0;
    height: 58vh;
    background:
        linear-gradient(90deg, rgba(103, 232, 249, .2) 1px, transparent 1px) 50% 0 / 64px 64px,
        linear-gradient(0deg, rgba(103, 232, 249, .2) 1px, transparent 1px) 0 0 / 64px 64px;
    transform: perspective(420px) rotateX(62deg);
    transform-origin: 50% 100%;
    -webkit-mask: linear-gradient(to top, #000 0%, rgba(0, 0, 0, .5) 45%, transparent 90%);
    mask: linear-gradient(to top, #000 0%, rgba(0, 0, 0, .5) 45%, transparent 90%);
    opacity: .7;
    animation: tmdb-hyperdrive-grid 3s linear infinite;
}
/* Fiche avec image de fond : voile bleu nuit, décor masqué pour laisser l'image. */
html.tmdb-theme-hyperdrive .backgroundContainer.withBackdrop {
    background-color: rgba(5, 8, 15, .86);
}
html.tmdb-theme-hyperdrive .backgroundContainer.withBackdrop::after { display: none; }

@keyframes tmdb-hyperdrive-aurora {
    0% { transform: translate3d(-6%, -4%, 0) rotate(0deg) scale(1); }
    50% { transform: translate3d(5%, 3%, 0) rotate(10deg) scale(1.1); }
    100% { transform: translate3d(-3%, 6%, 0) rotate(-8deg) scale(1); }
}
@keyframes tmdb-hyperdrive-grid {
    to { background-position: 50% 64px, 0 64px; }
}

/* ---- Traînées lumineuses, derrière les cartes (voir syncHyperdriveStreaks) ---- */
.tmdb-hyperdrive-streaks {
    position: fixed;
    inset: 0;
    overflow: hidden;
    pointer-events: none;
}
.tmdb-hyperdrive-streaks[hidden] { display: none; }
.tmdb-hyperdrive-streak {
    position: absolute;
    top: var(--streak-top);
    left: 100%;
    width: var(--streak-length);
    height: var(--streak-height);
    border-radius: 999px;
    background: linear-gradient(90deg, #fff, var(--streak-color) 25%, transparent);
    box-shadow: 0 0 10px var(--streak-color);
    opacity: var(--streak-opacity);
    animation: tmdb-hyperdrive-streak var(--streak-duration) linear var(--streak-delay) infinite;
}
@keyframes tmdb-hyperdrive-streak {
    to { transform: translate3d(calc(-100vw - 100% - 40px), 0, 0); }
}

/* ============================================================================
   Effets « tout dehors » : cartes, boutons de la fiche, menu, en-tête.
   Contrastes : texte foncé #04121a sur les dégradés cyan/indigo/lilas (6,4 à
   10,4:1), texte clair sur le verre bleu nuit (≥ 7,5:1 même sur une image de
   fond blanche). Les styles de repos laissent :focus à Emby, dont l'indicateur
   de focus (cyan, texte foncé) reste intact.
   ============================================================================ */

@property --tmdb-hd-angle {
    syntax: '<angle>';
    initial-value: 0deg;
    inherits: false;
}
@keyframes tmdb-hd-spin { to { --tmdb-hd-angle: 360deg; } }
@keyframes tmdb-hd-flow { to { background-position: 300% 0; } }
/* Halo en filter : Emby impose box-shadow: none !important aux boutons de la fiche. */
@keyframes tmdb-hd-breathe {
    0%, 100% { filter: drop-shadow(0 0 6px rgba(34, 211, 238, .6)); }
    50% { filter: drop-shadow(0 0 14px rgba(168, 85, 247, .75)); }
}
@keyframes tmdb-hd-sheen {
    0%, 55% { transform: translateX(-120%) skewX(-20deg); }
    100% { transform: translateX(320%) skewX(-20deg); }
}

/* ---- Cartes de films : apparition, inclinaison 3D, anneau, reflet, balayage ---- */
html.tmdb-theme-hyperdrive .cardBox {
    animation: tmdb-hd-card-in .5s cubic-bezier(.16, 1, .3, 1);
}
@keyframes tmdb-hd-card-in {
    from { opacity: 0; transform: translateY(14px) scale(.97); }
}
/* Inclinaison pilotée par syncHyperdriveCardTilt() (variables --tmdb-tilt-*). */
html.tmdb-theme-hyperdrive .cardScalable {
    transform: perspective(800px) rotateX(var(--tmdb-tilt-x, 0deg)) rotateY(var(--tmdb-tilt-y, 0deg)) translateZ(0);
    transition: transform .2s ease-out;
}
html.tmdb-theme-hyperdrive .card:hover .cardScalable {
    transform: perspective(800px) rotateX(var(--tmdb-tilt-x, 0deg)) rotateY(var(--tmdb-tilt-y, 0deg)) translateY(-6px);
}
html.tmdb-theme-hyperdrive .card:is(:hover, :focus-within) .cardContent {
    animation: tmdb-hyperdrive-card-glow 1.8s ease-in-out infinite;
}
@keyframes tmdb-hyperdrive-card-glow {
    0%, 100% { box-shadow: 0 0 18px -4px rgba(34, 211, 238, .65), 0 14px 30px -12px rgba(0, 0, 0, .9); }
    50% { box-shadow: 0 0 34px -2px rgba(168, 85, 247, .65), 0 18px 34px -12px rgba(0, 0, 0, .9); }
}
/* Anneau néon qui tourne autour de l'affiche. */
html.tmdb-theme-hyperdrive .cardContent::after {
    content: '';
    position: absolute;
    inset: 0;
    z-index: 2;
    padding: 2px;
    border-radius: inherit;
    background: conic-gradient(from var(--tmdb-hd-angle), #22d3ee, #818cf8, #c084fc, #f0abfc, #22d3ee);
    -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
    -webkit-mask-composite: xor;
    mask: linear-gradient(#000 0 0) content-box exclude, linear-gradient(#000 0 0);
    opacity: 0;
    transition: opacity .25s ease;
    pointer-events: none;
}
html.tmdb-theme-hyperdrive .card:is(:hover, :focus-within) .cardContent::after {
    opacity: 1;
    animation: tmdb-hd-spin 2.4s linear infinite;
}
/* Reflet qui suit le pointeur et ligne de balayage holographique. */
html.tmdb-theme-hyperdrive .cardImageContainer::after {
    content: '';
    position: absolute;
    inset: 0;
    z-index: 1;
    background:
        radial-gradient(circle at var(--tmdb-glare-x, 50%) var(--tmdb-glare-y, 30%), rgba(255, 255, 255, .22), transparent 45%),
        linear-gradient(180deg, transparent 0%, rgba(103, 232, 249, .28) 48%, rgba(255, 255, 255, .45) 50%, rgba(103, 232, 249, .28) 52%, transparent 100%) 0 -100% / 100% 40% no-repeat,
        repeating-linear-gradient(180deg, rgba(103, 232, 249, .06) 0 1px, transparent 1px 3px);
    mix-blend-mode: screen;
    opacity: 0;
    transition: opacity .25s ease;
    pointer-events: none;
}
html.tmdb-theme-hyperdrive .card:is(:hover, :focus-within) .cardImageContainer::after {
    opacity: 1;
    animation: tmdb-hd-scan 1.8s cubic-bezier(.45, 0, .55, 1) infinite;
}
@keyframes tmdb-hd-scan {
    to { background-position: 0 0, 0 260%, 0 0; }
}
html.tmdb-theme-hyperdrive .card:is(:hover, :focus-within) .cardImageContainer {
    filter: saturate(1.15) contrast(1.05);
}
/* Titre de la carte : cyan lumineux (≈ 11:1 sur le fond). */
html.tmdb-theme-hyperdrive .card:hover .cardText-first {
    color: #67e8f9;
    text-shadow: 0 0 12px rgba(34, 211, 238, .55);
    transition: color .2s ease, text-shadow .2s ease;
}

/* ---- Boutons de la fiche du média ---- */
/* Bouton principal (Lecture / Reprendre) et boutons « valider » : dégradé qui
   s'écoule, halo qui respire, reflet qui passe. Texte foncé : 6,4 à 10,4:1. */
html.tmdb-theme-hyperdrive :is(.detailButton-primary, .button-submit):not(:focus) {
    background: linear-gradient(110deg, #22d3ee 0%, #818cf8 33%, #c084fc 50%, #818cf8 67%, #22d3ee 100%) 0 0 / 300% 100% !important;
    color: #04121a !important;
    animation: tmdb-hd-flow 6s linear infinite, tmdb-hd-breathe 2.6s ease-in-out infinite;
}
html.tmdb-theme-hyperdrive :is(.detailButton-primary, .button-submit) {
    overflow: hidden;
    font-weight: 700;
}
html.tmdb-theme-hyperdrive :is(.detailButton-primary, .button-submit)::after {
    content: '';
    position: absolute;
    top: 0;
    bottom: 0;
    left: 0;
    width: 35%;
    background: linear-gradient(90deg, transparent, rgba(255, 255, 255, .55), transparent);
    animation: tmdb-hd-sheen 3.2s ease-in-out infinite;
    pointer-events: none;
}
html.tmdb-theme-hyperdrive :is(.detailButton-primary, .button-submit):hover:not(:focus) {
    transform: translateY(-2px) scale(1.03);
    transition: transform .2s ease;
}

/* Autres boutons de la fiche : verre bleu nuit, bordure néon qui tourne au survol. */
html.tmdb-theme-hyperdrive .detailButton.raised:not(.detailButton-primary, :focus) {
    border: 1px solid transparent !important;
    background:
        linear-gradient(hsla(222, 45%, 10%, .8), hsla(222, 45%, 10%, .8)) padding-box,
        conic-gradient(from var(--tmdb-hd-angle), rgba(103, 232, 249, .75), rgba(129, 140, 248, .2), rgba(192, 132, 252, .75), rgba(129, 140, 248, .2), rgba(103, 232, 249, .75)) border-box !important;
    -webkit-backdrop-filter: blur(10px);
    backdrop-filter: blur(10px);
    color: #e6f1ff;
}
html.tmdb-theme-hyperdrive .detailButton.raised:not(.detailButton-primary, :focus):hover {
    animation: tmdb-hd-spin 2s linear infinite;
    box-shadow: 0 0 18px -2px rgba(34, 211, 238, .6) !important;
    color: #fff;
}
html.tmdb-theme-hyperdrive .detailButton :is(.md-icon, i) {
    transition: transform .3s cubic-bezier(.34, 1.56, .64, 1), filter .3s ease;
}
html.tmdb-theme-hyperdrive .detailButton:hover :is(.md-icon, i) {
    transform: scale(1.18) rotate(-8deg);
    filter: drop-shadow(0 0 6px rgba(103, 232, 249, .9));
}

/* ---- Menu latéral ---- */
html.tmdb-theme-hyperdrive .mainDrawer {
    background:
        linear-gradient(90deg, rgba(103, 232, 249, .05) 1px, transparent 1px) 0 0 / 28px 28px,
        linear-gradient(0deg, rgba(103, 232, 249, .05) 1px, transparent 1px) 0 0 / 28px 28px,
        linear-gradient(180deg, hsla(222, 45%, 9%, .97), hsla(240, 40%, 7%, .97));
    box-shadow: inset -1px 0 0 rgba(103, 232, 249, .25), 12px 0 40px -20px rgba(34, 211, 238, .45);
}
/* Ligne de balayage qui parcourt le menu. */
html.tmdb-theme-hyperdrive .mainDrawer::after {
    content: '';
    position: absolute;
    inset: 0;
    background: linear-gradient(180deg, transparent, rgba(34, 211, 238, .1) 50%, transparent) 0 -25% / 100% 20% no-repeat;
    animation: tmdb-hd-drawer-scan 5s linear infinite;
    pointer-events: none;
}
@keyframes tmdb-hd-drawer-scan {
    to { background-position: 0 125%; }
}
html.tmdb-theme-hyperdrive .navMenuOption .listItem-content {
    transition: transform .2s ease, color .2s ease;
}
html.tmdb-theme-hyperdrive .navMenuOption:not(.navMenuOption-selected):hover .listItem-content {
    transform: translateX(4px);
}
html.tmdb-theme-hyperdrive .navMenuOption:not(.navMenuOption-selected):hover .listItem-content::before {
    background: linear-gradient(90deg, rgba(34, 211, 238, .24), rgba(129, 140, 248, .06));
    box-shadow: inset 3px 0 0 #22d3ee, 0 0 16px -6px rgba(34, 211, 238, .7);
}
html.tmdb-theme-hyperdrive .navMenuOption:not(.navMenuOption-selected):hover .navMenuOptionIcon {
    color: #67e8f9;
    filter: drop-shadow(0 0 6px rgba(103, 232, 249, .8));
}
/* Entrée sélectionnée : dégradé vivant, texte foncé (≥ 6,4:1). */
html.tmdb-theme-hyperdrive .navMenuOption-selected .listItem-content::before,
html.tmdb-theme-hyperdrive .navMenuOption-selected .listItem-content-bg {
    background: linear-gradient(110deg, #22d3ee 0%, #818cf8 33%, #c084fc 50%, #818cf8 67%, #22d3ee 100%) 0 0 / 300% 100% !important;
    box-shadow: 0 0 18px -4px rgba(34, 211, 238, .7);
    animation: tmdb-hd-flow 6s linear infinite;
}

/* ---- En-tête, onglets, barres de progression ---- */
html.tmdb-theme-hyperdrive .skinHeader::after {
    content: '';
    position: absolute;
    left: 0;
    right: 0;
    bottom: 0;
    height: 1px;
    background: linear-gradient(90deg, transparent, #22d3ee, #c084fc, #818cf8, transparent) 0 0 / 50% 100% repeat-x;
    opacity: .8;
    animation: tmdb-hd-flow 4s linear infinite;
    pointer-events: none;
}
html.tmdb-theme-hyperdrive .headerButton:hover {
    color: #67e8f9;
    filter: drop-shadow(0 0 6px rgba(103, 232, 249, .8));
}
html.tmdb-theme-hyperdrive .emby-tabs-selected-background {
    box-shadow: 0 0 0 1px rgba(103, 232, 249, .5), 0 0 18px -4px rgba(34, 211, 238, .7);
}
html.tmdb-theme-hyperdrive .itemProgressBarForeground {
    background:
        repeating-linear-gradient(115deg, rgba(255, 255, 255, .22) 0 6px, transparent 6px 12px) 0 0 / 200% 100%,
        linear-gradient(90deg, #22d3ee, #818cf8, #c084fc);
    box-shadow: 0 0 10px rgba(34, 211, 238, .7);
    animation: tmdb-hd-flow 3s linear infinite;
}

html.tmdb-theme-hyperdrive ::selection { background: rgba(34, 211, 238, .45); color: #fff; }
html.tmdb-theme-hyperdrive { scrollbar-color: rgba(103, 232, 249, .45) transparent; }

html.tmdb-theme-hyperdrive :is(.sectionTitle, .itemName-primary, .pageTitle) {
    letter-spacing: .02em;
}

/* Fond de l'écran de chargement quand le thème est actif (mis en cache). */
html.tmdb-theme-hyperdrive .app-splash-container {
    background-color: #05080f;
    background-image:
        radial-gradient(60% 50% at 90% -10%, rgba(34, 211, 238, .16), transparent 70%),
        radial-gradient(55% 45% at -10% 110%, rgba(168, 85, 247, .16), transparent 70%);
}

/* ---- Pause (lecture, onglet caché) et accessibilité ---- */
html.tmdb-motion-paused.tmdb-theme-hyperdrive :is(.backgroundContainer, .mainDrawer, .skinHeader, .detailButton-primary, .button-submit)::before,
html.tmdb-motion-paused.tmdb-theme-hyperdrive :is(.backgroundContainer, .mainDrawer, .skinHeader, .detailButton-primary, .button-submit)::after,
html.tmdb-motion-paused.tmdb-theme-hyperdrive :is(.detailButton-primary, .button-submit, .itemProgressBarForeground, .navMenuOption-selected .listItem-content-bg),
html.tmdb-motion-paused.tmdb-theme-hyperdrive .navMenuOption-selected .listItem-content::before,
html.tmdb-motion-paused .tmdb-hyperdrive-streak {
    animation-play-state: paused;
}
@media (prefers-reduced-motion: reduce) {
    html.tmdb-theme-hyperdrive .backgroundContainer::before,
    html.tmdb-theme-hyperdrive .backgroundContainer::after,
    html.tmdb-theme-hyperdrive :is(.cardBox, .cardContent, .detailButton, .button-submit, .itemProgressBarForeground, .navMenuOption-selected .listItem-content-bg),
    html.tmdb-theme-hyperdrive :is(.cardContent, .cardImageContainer, .detailButton-primary, .button-submit, .mainDrawer, .skinHeader)::after,
    html.tmdb-theme-hyperdrive .navMenuOption-selected .listItem-content::before { animation: none !important; }
    html.tmdb-theme-hyperdrive .cardScalable { transform: none !important; }
    .tmdb-hyperdrive-streaks { display: none; }
}
/* ============================================================================
   Thème « Pirate » — interface Emby
   Activé par la classe html.tmdb-theme-pirate (posée par emby-addbutton.js,
   hors pages d'administration). Assemblé à la suite de emby-addbutton.css par
   add_emby_button.sh. Contrat d'un thème : assets/css/themes/README.md.
   Contrastes : texte parchemin hsl(39 66% 89%) sur fond hsl(198 60% 6%) ≈ 15:1 ;
   or #f6d77a sur fond ≈ 13:1 ; texte foncé #1a0f05 sur les doublons d'or ≥ 5,2:1 ;
   texte clair sur le bois sombre des boutons ≥ 11:1. Les styles de repos laissent
   :focus à Emby, dont l'indicateur (or clair, texte foncé) reste intact.
   Mouvement : vagues et étoiles en CSS, galion et brume par syncPirateSea() ;
   en pause pendant la lecture (html.tmdb-motion-paused), coupé avec
   « réduire les animations ».
   ============================================================================ */

html:root.tmdb-theme-pirate {
    /* Base #06141b, comme --ui-bg des pages du thème (assets/css/themes/pirate.css) */
    --background-hue: 198;
    --background-saturation: 60%;
    --background-lightness: 6%;
    --card-background-saturation: 35%;
    --input-background-saturation: 35%;
    --button-background-saturation: 35%;

    --theme-primary-color-hue: 42;
    --theme-primary-color-saturation: 79%;
    --theme-primary-color-lightness: 60%;

    --theme-text-color-hue: 39;
    --theme-text-color-saturation: 66%;
    --theme-text-color-lightness: 89%;
    --theme-text-color-alpha: 1;
    --theme-secondary-text-color-alpha: .72;

    --theme-accent-text-color-darkbg: #f6d77a;
    --theme-accent-text-color-lightbg: #f6d77a;
    --theme-accent-text-color: #f6d77a;
    --theme-accent-text-color-darkbg-alt: #fca5a5;
    --theme-accent-text-color-alt: #fca5a5;

    /* Élément focalisé (télécommande, clavier) : or clair, texte foncé */
    --focus-background-hue: 44;
    --focus-background-saturation: 86%;
    --focus-background-lightness: 68%;
    --focus-blur-background-lightness: 68%;
    --focus-text-color-lightness: 6%;

    /* Logo Media Boogers (syncBrandLogo) : doublon d'or vers acajou,
       bandes acajou sur le clap blanc (9,4:1). */
    --tmdb-logo-from: #f6d77a;
    --tmdb-logo-via: #e0a526;
    --tmdb-logo-to: #7c2d12;
    --tmdb-logo-ink: #7c2d12;

    --header-background: hsl(25, 40%, 8%);
    --header-blur-background: hsla(25, 40%, 8%, .8);
    --docked-drawer-background: hsla(25, 40%, 8%, .96);

    color-scheme: dark;
}

/* ---- Fond : nuit sous la lune, étoiles (::before) et vagues (::after) ---- */
html.tmdb-theme-pirate .backgroundContainer {
    background-color: #06141b;
    background-image:
        radial-gradient(circle at 84% 12%, rgba(255, 244, 214, .16) 0 46px, rgba(255, 236, 190, .08) 48px, transparent 220px),
        radial-gradient(70% 45% at 50% 108%, rgba(20, 110, 120, .3), transparent 70%),
        radial-gradient(60% 50% at -10% 0%, rgba(124, 45, 18, .2), transparent 70%),
        linear-gradient(180deg, #050b12 0%, #07161e 55%, #08202a 100%);
    overflow: hidden;
}
html.tmdb-theme-pirate .backgroundContainer::before,
html.tmdb-theme-pirate .backgroundContainer::after {
    content: '';
    position: absolute;
    pointer-events: none;
}
html.tmdb-theme-pirate .backgroundContainer::before {
    inset: 0 0 40% 0;
    background:
        radial-gradient(1px 1px at 20px 30px, rgba(255, 248, 225, .7), transparent),
        radial-gradient(1px 1px at 140px 80px, rgba(255, 248, 225, .5), transparent),
        radial-gradient(1.5px 1.5px at 90px 150px, rgba(255, 248, 225, .6), transparent),
        radial-gradient(1px 1px at 200px 200px, rgba(255, 248, 225, .45), transparent);
    background-size: 240px 240px;
    -webkit-mask: linear-gradient(180deg, #000, transparent);
    mask: linear-gradient(180deg, #000, transparent);
    animation: tmdb-pirate-twinkle 5s ease-in-out infinite alternate;
}
html.tmdb-theme-pirate .backgroundContainer::after {
    left: 0;
    right: 0;
    bottom: 0;
    height: 18vh;
    min-height: 90px;
    background:
        url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1200 120' preserveAspectRatio='none'%3E%3Cpath d='M0 70Q150 30 300 70T600 70T900 70T1200 70V120H0z' fill='%2309404a' fill-opacity='.55'/%3E%3C/svg%3E") 0 100% / 1200px 70% repeat-x,
        url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1200 120' preserveAspectRatio='none'%3E%3Cpath d='M0 60Q150 20 300 60T600 60T900 60T1200 60V120H0z' fill='%23062a33' fill-opacity='.85'/%3E%3Cpath d='M0 60Q150 20 300 60T600 60T900 60T1200 60' fill='none' stroke='%23e6f7f5' stroke-opacity='.18' stroke-width='2'/%3E%3C/svg%3E") 0 100% / 900px 55% repeat-x;
    animation: tmdb-pirate-waves 14s linear infinite;
}
/* Fiche avec image de fond : voile de nuit, mer masquée pour laisser l'image. */
html.tmdb-theme-pirate .backgroundContainer.withBackdrop {
    background: rgba(6, 20, 27, .86);
}
html.tmdb-theme-pirate .backgroundContainer.withBackdrop::after { display: none; }

@keyframes tmdb-pirate-twinkle {
    from { opacity: .45; }
    to { opacity: 1; }
}
@keyframes tmdb-pirate-waves {
    to { background-position: -1200px 100%, 900px 100%; }
}

/* ---- Galion et brume, derrière les cartes (voir syncPirateSea) ---- */
.tmdb-pirate-sea {
    position: fixed;
    inset: 0;
    overflow: hidden;
    pointer-events: none;
}
.tmdb-pirate-sea[hidden] { display: none; }
.tmdb-pirate-fog {
    position: absolute;
    left: -50%;
    width: 200%;
    bottom: 8vh;
    height: 22vh;
    background:
        radial-gradient(40% 50% at 20% 60%, rgba(200, 220, 225, .08), transparent 70%),
        radial-gradient(35% 45% at 60% 50%, rgba(200, 220, 225, .07), transparent 70%),
        radial-gradient(30% 40% at 85% 65%, rgba(200, 220, 225, .06), transparent 70%);
    animation: tmdb-pirate-fog 60s linear infinite alternate;
}
.tmdb-pirate-fog--slow {
    bottom: 14vh;
    animation-duration: 95s;
    animation-direction: alternate-reverse;
    opacity: .8;
}
@keyframes tmdb-pirate-fog {
    to { transform: translateX(25%); }
}
.tmdb-pirate-ship {
    position: absolute;
    left: 0;
    bottom: calc(max(90px, 18vh) * .42);
    width: clamp(110px, 14vw, 190px);
    animation: tmdb-pirate-sail 110s linear var(--ship-delay, -30s) infinite;
}
.tmdb-pirate-ship svg {
    display: block;
    width: 100%;
    height: auto;
    transform-origin: 50% 85%;
    animation: tmdb-pirate-bob 5.5s ease-in-out infinite alternate;
}
@keyframes tmdb-pirate-sail {
    from { transform: translateX(-220px); }
    to { transform: translateX(calc(100vw + 40px)); }
}
@keyframes tmdb-pirate-bob {
    0% { transform: translateY(0) rotate(-2.5deg); }
    100% { transform: translateY(5px) rotate(2.5deg); }
}

/* ============================================================================
   Effets « pavillon noir » : cartes, boutons de la fiche, menu, en-tête.
   ============================================================================ */

@keyframes tmdb-pirate-flow { to { background-position: 300% 0; } }
@keyframes tmdb-pirate-sheen {
    0%, 60% { transform: translateX(-120%) skewX(-20deg); }
    100% { transform: translateX(320%) skewX(-20deg); }
}
/* Halo de lanterne qui vacille (filter : Emby impose box-shadow: none aux boutons). */
@keyframes tmdb-pirate-lantern {
    0%, 100% { filter: drop-shadow(0 0 7px rgba(246, 190, 80, .55)); }
    20% { filter: drop-shadow(0 0 11px rgba(246, 190, 80, .7)); }
    45% { filter: drop-shadow(0 0 6px rgba(246, 190, 80, .45)); }
    70% { filter: drop-shadow(0 0 13px rgba(255, 170, 60, .75)); }
}

/* ---- Cartes de films : tangage, cadre doré, lueur de lanterne ---- */
html.tmdb-theme-pirate .card:is(:hover, :focus-within) .cardScalable {
    animation: tmdb-pirate-rock 2.6s ease-in-out infinite;
}
@keyframes tmdb-pirate-rock {
    0%, 100% { transform: rotate(-1.2deg) translateY(-3px); }
    50% { transform: rotate(1.2deg) translateY(-7px); }
}
html.tmdb-theme-pirate .card:is(:hover, :focus-within) .cardContent {
    animation: tmdb-pirate-card-glow 1.6s ease-in-out infinite;
}
@keyframes tmdb-pirate-card-glow {
    0%, 100% { box-shadow: 0 0 20px -4px rgba(246, 190, 80, .55), 0 16px 30px -12px rgba(0, 0, 0, .9); }
    35% { box-shadow: 0 0 30px -2px rgba(255, 170, 60, .7), 0 16px 30px -12px rgba(0, 0, 0, .9); }
    70% { box-shadow: 0 0 16px -4px rgba(246, 190, 80, .45), 0 16px 30px -12px rgba(0, 0, 0, .9); }
}
/* Double filet d'or autour de l'affiche. */
html.tmdb-theme-pirate .cardContent::after {
    content: '';
    position: absolute;
    inset: 0;
    z-index: 2;
    border-radius: inherit;
    border: 2px solid rgba(246, 215, 122, .9);
    box-shadow: inset 0 0 0 3px rgba(26, 15, 5, .55), inset 0 0 0 4px rgba(246, 215, 122, .55), inset 0 0 28px rgba(26, 15, 5, .65);
    opacity: 0;
    transition: opacity .25s ease;
    pointer-events: none;
}
html.tmdb-theme-pirate .card:is(:hover, :focus-within) .cardContent::after { opacity: 1; }
html.tmdb-theme-pirate .card:is(:hover, :focus-within) .cardImageContainer {
    filter: sepia(.22) saturate(1.15) contrast(1.05);
}
html.tmdb-theme-pirate .card:hover .cardText-first {
    color: #f6d77a;
    text-shadow: 0 0 12px rgba(233, 185, 73, .55);
    transition: color .2s ease, text-shadow .2s ease;
}

/* ---- Boutons de la fiche du média ---- */
/* Bouton principal (Lecture / Reprendre) et boutons « valider » : doublon d'or
   qui miroite, lueur de lanterne, reflet qui passe. Texte foncé ≥ 5,2:1. */
html.tmdb-theme-pirate :is(.detailButton-primary, .button-submit):not(:focus) {
    background: linear-gradient(110deg, #f6d77a 0%, #e9b949 25%, #c9922a 50%, #e9b949 75%, #f6d77a 100%) 0 0 / 300% 100% !important;
    color: #1a0f05 !important;
    text-shadow: 0 1px 0 rgba(255, 243, 196, .5);
    animation: tmdb-pirate-flow 7s linear infinite, tmdb-pirate-lantern 2.4s ease-in-out infinite;
}
html.tmdb-theme-pirate :is(.detailButton-primary, .button-submit) {
    overflow: hidden;
    font-weight: 700;
}
html.tmdb-theme-pirate :is(.detailButton-primary, .button-submit)::after {
    content: '';
    position: absolute;
    top: 0;
    bottom: 0;
    left: 0;
    width: 35%;
    background: linear-gradient(90deg, transparent, rgba(255, 255, 255, .6), transparent);
    animation: tmdb-pirate-sheen 3.6s ease-in-out infinite;
    pointer-events: none;
}
html.tmdb-theme-pirate :is(.detailButton-primary, .button-submit):hover:not(:focus) {
    transform: translateY(-2px) scale(1.03);
    transition: transform .2s ease;
}

/* Autres boutons de la fiche : bois sombre veiné, filet d'or. */
html.tmdb-theme-pirate .detailButton.raised:not(.detailButton-primary, :focus) {
    border: 1px solid rgba(233, 185, 73, .55) !important;
    background:
        repeating-linear-gradient(92deg, rgba(255, 220, 160, .04) 0 2px, transparent 2px 9px),
        linear-gradient(180deg, hsla(25, 40%, 16%, .88), hsla(25, 42%, 9%, .9)) !important;
    -webkit-backdrop-filter: blur(8px);
    backdrop-filter: blur(8px);
    color: #f6ead2;
}
html.tmdb-theme-pirate .detailButton.raised:not(.detailButton-primary, :focus):hover {
    border-color: #f6d77a !important;
    box-shadow: 0 0 18px -2px rgba(233, 185, 73, .6) !important;
    color: #fff8e6;
}
html.tmdb-theme-pirate .detailButton :is(.md-icon, i) {
    transition: transform .4s cubic-bezier(.34, 1.56, .64, 1), filter .3s ease, color .3s ease;
}
html.tmdb-theme-pirate .detailButton:not(.detailButton-primary, :focus):hover :is(.md-icon, i) {
    color: #f6d77a;
    transform: rotate(-14deg) scale(1.15);
    filter: drop-shadow(0 0 6px rgba(233, 185, 73, .8));
}

/* ---- Menu latéral : bois de pont, filets d'or ---- */
html.tmdb-theme-pirate .mainDrawer {
    background:
        repeating-linear-gradient(0deg, rgba(0, 0, 0, .18) 0 1px, transparent 1px 46px),
        repeating-linear-gradient(92deg, rgba(255, 220, 160, .03) 0 2px, transparent 2px 10px),
        linear-gradient(180deg, hsla(25, 40%, 11%, .97), hsla(22, 42%, 7%, .97));
    box-shadow: inset -1px 0 0 rgba(233, 185, 73, .35), inset -4px 0 0 rgba(26, 15, 5, .5), 12px 0 40px -20px rgba(0, 0, 0, .8);
}
html.tmdb-theme-pirate .navMenuOption .listItem-content {
    transition: transform .2s ease, color .2s ease;
}
html.tmdb-theme-pirate .navMenuOption:not(.navMenuOption-selected):hover .listItem-content {
    transform: translateX(4px);
}
html.tmdb-theme-pirate .navMenuOption:not(.navMenuOption-selected):hover .listItem-content::before {
    background: linear-gradient(90deg, rgba(233, 185, 73, .22), rgba(233, 185, 73, .04));
    box-shadow: inset 3px 0 0 #e9b949;
}
html.tmdb-theme-pirate .navMenuOption:not(.navMenuOption-selected):hover .navMenuOptionIcon {
    color: #f6d77a;
    filter: drop-shadow(0 0 6px rgba(233, 185, 73, .7));
}
/* Entrée sélectionnée : or qui miroite, texte foncé (règle commune de emby-addbutton.css). */
html.tmdb-theme-pirate .navMenuOption-selected .listItem-content::before,
html.tmdb-theme-pirate .navMenuOption-selected .listItem-content-bg {
    background: linear-gradient(110deg, #f6d77a 0%, #e9b949 25%, #c9922a 50%, #e9b949 75%, #f6d77a 100%) 0 0 / 300% 100% !important;
    box-shadow: inset 0 1px 0 rgba(255, 255, 255, .45), 0 0 16px -4px rgba(233, 185, 73, .6);
    animation: tmdb-pirate-flow 7s linear infinite;
}

/* ---- En-tête (cordage), onglets, barres de progression ---- */
html.tmdb-theme-pirate .skinHeader::after {
    content: '';
    position: absolute;
    left: 0;
    right: 0;
    bottom: 0;
    height: 4px;
    background: repeating-linear-gradient(-45deg, #6b4423 0 3px, #c9a26b 3px 6px, #8b5a2b 6px 9px);
    box-shadow: 0 2px 6px rgba(0, 0, 0, .6);
    opacity: .85;
    pointer-events: none;
}
html.tmdb-theme-pirate .headerButton:hover {
    color: #f6d77a;
    filter: drop-shadow(0 0 6px rgba(233, 185, 73, .7));
}
html.tmdb-theme-pirate .emby-tabs-selected-background {
    box-shadow: 0 0 0 1px rgba(246, 215, 122, .55), 0 0 16px -4px rgba(233, 185, 73, .6);
}
html.tmdb-theme-pirate .itemProgressBarForeground {
    background: linear-gradient(90deg, #c9922a, #e9b949, #f6d77a);
    box-shadow: 0 0 8px rgba(233, 185, 73, .6);
}

html.tmdb-theme-pirate :is(.sectionTitle, .itemName-primary, .pageTitle) {
    font-family: Georgia, "Times New Roman", serif;
    font-variant: small-caps;
    letter-spacing: .02em;
}
html.tmdb-theme-pirate ::selection { background: rgba(233, 185, 73, .5); color: #1a0f05; }
html.tmdb-theme-pirate { scrollbar-color: rgba(201, 146, 42, .6) transparent; }

/* Fond de l'écran de chargement quand le thème est actif (mis en cache). */
html.tmdb-theme-pirate .app-splash-container {
    background-color: #06141b;
    background-image:
        radial-gradient(circle at 84% 12%, rgba(255, 244, 214, .16) 0 46px, transparent 220px),
        radial-gradient(70% 45% at 50% 108%, rgba(20, 110, 120, .3), transparent 70%);
}

/* ---- Pause (lecture, onglet caché) et accessibilité ---- */
html.tmdb-motion-paused.tmdb-theme-pirate :is(.backgroundContainer, .detailButton-primary, .button-submit)::before,
html.tmdb-motion-paused.tmdb-theme-pirate :is(.backgroundContainer, .detailButton-primary, .button-submit)::after,
html.tmdb-motion-paused.tmdb-theme-pirate :is(.detailButton-primary, .button-submit, .navMenuOption-selected .listItem-content-bg),
html.tmdb-motion-paused.tmdb-theme-pirate .navMenuOption-selected .listItem-content::before,
html.tmdb-motion-paused .tmdb-pirate-sea * {
    animation-play-state: paused;
}
@media (prefers-reduced-motion: reduce) {
    html.tmdb-theme-pirate :is(.cardScalable, .cardContent, .detailButton, .button-submit, .navMenuOption-selected .listItem-content-bg),
    html.tmdb-theme-pirate :is(.backgroundContainer, .detailButton-primary, .button-submit)::before,
    html.tmdb-theme-pirate :is(.backgroundContainer, .detailButton-primary, .button-submit)::after,
    html.tmdb-theme-pirate .navMenuOption-selected .listItem-content::before { animation: none !important; }
    .tmdb-pirate-sea { display: none; }
}
