/**
 * RF-Lab — Damier responsive des images ET des vidéos de page
 *
 * Emplacement prévu :
 *   /templates/rf-lab/css/rflab-archive.css
 *
 * Structure produite par rflab-archive.js :
 *
 * <div id="image_page" class="rflab-archive-grid">
 *     <div class="rflab-archive-cell">
 *         <img src="..." alt="...">
 *     </div>
 * </div>
 *
 * Structure produite par rflab-videos.js — mêmes classes, donc même damier
 * et mêmes effets de survol, réglés ici une seule fois :
 *
 * <div id="video_page" class="rflab-archive-grid rflab-video-grid">
 *     <div class="rflab-archive-cell rflab-video-cell">
 *         <img src="..." alt="...">          (poster, facultatif)
 *         <span class="rflab-video-play"></span>
 *     </div>
 * </div>
 */

#image_page.rflab-archive-grid,
#video_page.rflab-archive-grid {
    --rflab-archive-gap: 6px;
    --rflab-archive-case-min: 100px;
    --rflab-archive-fond: #111617;
    --rflab-archive-accent: #96362a;

    display: grid;

    /*
     * Le nombre de colonnes dépend directement de la largeur disponible :
     * environ trois colonnes dans la barre latérale et davantage lorsque
     * celle-ci occupe toute la largeur sur un écran plus petit.
     */
    grid-template-columns: repeat(
        auto-fill,
        minmax(
            min(var(--rflab-archive-case-min), 100%),
            1fr
        )
    );

    gap: var(--rflab-archive-gap);
    width: 100%;
    margin: 0;
    padding: 0;
}

.rflab-archive-cell {
    position: relative;
    isolation: isolate;

    min-width: 0;
    aspect-ratio: 1 / 1;
    overflow: hidden;

    background: var(--rflab-archive-fond, #111617);
    border: 1px solid rgba(36, 35, 33, 0.28);

    transition:
        border-color 220ms ease,
        box-shadow 220ms ease;
}

.rflab-archive-cell img {
    display: block;

    /* Priorité sur les éventuels styles génériques du CMS. */
    width: 100% !important;
    height: 100% !important;
    max-width: none !important;
    margin: 0 !important;
    padding: 0 !important;

    object-fit: cover;
    object-position: center;

    cursor: pointer;
    border: 0 !important;

filter:
    saturate(0.30)
    contrast(0.90)
    brightness(0.88);

transform: scale(1.02);

    transition:
        transform 380ms ease,
        filter 380ms ease;
}

/*
 * Fin cadre intérieur + scanlines CRT (effet repris du header de commlock).
 * Le quadrillage n'apparaît qu'au survol ; il défile en boucle.
 */
.rflab-archive-cell::before {
    content: "";

    position: absolute;
    z-index: 2;
    inset: 0;

    pointer-events: none;

    box-shadow:
        inset 0 0 0 1px
        rgba(255, 255, 255, 0.07);

    background: repeating-linear-gradient(
        to bottom,
        transparent 0px,
        transparent 2px,
        var(--rflab-archive-scanline, rgba(0, 0, 0, 0.15)) 2px,
        var(--rflab-archive-scanline, rgba(0, 0, 0, 0.15)) 4px
    );

    transition: background-color 380ms ease;
    animation: rflab-archive-scanlines 4s linear infinite;
}

.rflab-archive-cell:hover::before,
.rflab-archive-cell:focus-within::before {
    --rflab-archive-scanline: transparent;

    animation: none;
}

/*
 * Scanline portée par le div enveloppant.
 * pointer-events:none permet au clic d'atteindre l'image et donc
 * agrandissement("nom-image.jpg").
 */
.rflab-archive-cell::after {
    content: "";

    position: absolute;
    z-index: 3;

    top: -55%;
    left: -10%;

    width: 120%;
    height: 38%;

    pointer-events: none;
    opacity: 0;

    background: linear-gradient(
    to bottom,
    transparent 0%,
    rgba(175, 220, 224, 0.12) 32%,
    rgba(235, 255, 255, 0.65) 50%,
    rgba(175, 220, 224, 0.12) 68%,
    transparent 100%
    );

    transform:
        translateY(0)
        skewY(-4deg);
}

.rflab-archive-cell:hover,
.rflab-archive-cell:focus-within {
    z-index: 2;

    border-color:
        var(--rflab-archive-accent, #96362a);

box-shadow:
 0 0 14px rgba(210, 245, 248, 0.22),
    0 10px 24px rgba(26, 22, 20, 0.38);
}

.rflab-archive-cell:hover img,
.rflab-archive-cell:focus-within img {
filter:
    saturate(1.10)
    contrast(1.08)
    brightness(1.03);

transform: scale(1.13);
}

.rflab-archive-cell:hover::after,
.rflab-archive-cell:focus-within::after {
    animation:
        rflab-archive-scan
    720ms
    cubic-bezier(0.35, 0, 0.3, 1);
}

.rflab-archive-cell img:focus {
    outline: none;
}

/*
 * Classes facultatives de correction du cadrage. Elles peuvent être ajoutées
 * au div .rflab-archive-cell pour une image particulière.
 */
.rflab-archive-focus-top img {
    object-position: center 20%;
}

.rflab-archive-focus-bottom img {
    object-position: center 80%;
}

.rflab-archive-focus-left img {
    object-position: 20% center;
}

.rflab-archive-focus-right img {
    object-position: 80% center;
}

@keyframes rflab-archive-scan {
    0% {
        opacity: 0;
        transform:
            translateY(0)
            skewY(-4deg);
    }

    14% {
        opacity: 1;
    }

    82% {
        opacity: 0.75;
    }

    100% {
        opacity: 0;
        transform:
            translateY(410%)
            skewY(-4deg);
    }
}

/* Défilement du quadrillage CRT. */
@keyframes rflab-archive-scanlines {
    0%   { background-position: 0 0; }
    100% { background-position: 0 40px; }
}

/* Respect du réglage système limitant les animations. */
@media (prefers-reduced-motion: reduce) {
    .rflab-archive-cell,
    .rflab-archive-cell img {
        transition: none;
    }

    .rflab-archive-cell:hover::after,
    .rflab-archive-cell:focus-within::after,
    .rflab-archive-cell::before {
        animation: none;
    }
}

/* =========================================================================
 * GALERIE VIDÉO — spécifique
 *
 * Tout ce qui précède (grille, carré, cadre, scanlines, survol) est déjà
 * appliqué aux cases vidéo : ne sont définis ici que l'icône de lecture,
 * la case sans poster et la lightbox de lecture.
 * ===================================================================== */

.rflab-video-cell {
    display: block;
    cursor: pointer;
}

.rflab-video-cell:focus {
    outline: none;
}

/* Nom du fichier, affiché quand aucune image ne complète la vidéo. */
.rflab-video-etiquette {
    position: absolute;
    z-index: 1;
    inset: 0;

    display: flex;
    align-items: center;
    justify-content: center;

    padding: 8px 6px 26% 6px;

    color: rgba(214, 226, 226, 0.55);
    font-size: 11px;
    line-height: 1.3;
    text-align: center;
    text-transform: uppercase;
    letter-spacing: 0.08em;
    word-break: break-word;
}

/*
 * Pastille de lecture. z-index 4 : au-dessus du quadrillage (2) et du
 * balayage (3). pointer-events:none pour que le clic atteigne la case.
 */
.rflab-video-play {
    position: absolute;
    z-index: 4;

    top: 50%;
    left: 50%;

    width: 44px;
    height: 44px;
    margin: -22px 0 0 -22px;

    pointer-events: none;

    border: 1px solid rgba(235, 255, 255, 0.62);
    border-radius: 50%;
    background: rgba(17, 22, 23, 0.42);

    transition:
        transform 380ms ease,
        background-color 380ms ease,
        border-color 380ms ease;
}

/* Triangle de lecture, décalé pour paraître centré dans le disque. */
.rflab-video-play::before {
    content: "";

    position: absolute;
    top: 50%;
    left: 50%;

    width: 0;
    height: 0;
    margin: -8px 0 0 -5px;

    border-top: 8px solid transparent;
    border-bottom: 8px solid transparent;
    border-left: 13px solid rgba(235, 255, 255, 0.86);
}

.rflab-video-cell:hover .rflab-video-play,
.rflab-video-cell:focus .rflab-video-play {
    transform: scale(1.12);

    border-color: var(--rflab-archive-accent, #96362a);
    background: rgba(150, 54, 42, 0.38);
}

/* ------------------------- Lightbox de lecture ------------------------- */

/*
 * L'attribut hidden est écrasé par display:flex : il faut le rétablir
 * explicitement, sinon la lightbox reste visible en permanence.
 */
.rflab-video-lightbox[hidden] {
    display: none !important;
}

.rflab-video-lightbox {
    position: fixed;
    z-index: 100000;
    inset: 0;

    display: flex;
    align-items: center;
    justify-content: center;

    padding: 4vmin;

    background: rgba(9, 12, 13, 0.92);
}

/* La vidéo garde son cadrage d'origine : le carré ne concerne que la case. */
.rflab-video-lecteur {
    display: block;

    max-width: 100%;
    max-height: 92vh;

    background: #000;
    box-shadow: 0 18px 48px rgba(0, 0, 0, 0.55);
}

.rflab-video-fermer {
    position: absolute;
    top: 12px;
    right: 16px;

    width: 44px;
    height: 44px;
    padding: 0;

    cursor: pointer;

    color: rgba(235, 255, 255, 0.86);
    font-size: 32px;
    line-height: 1;

    border: 0;
    background: transparent;
}

.rflab-video-fermer:hover {
    color: var(--rflab-archive-accent, #96362a);
}

/* La page ne défile pas derrière la lightbox. */
body.rflab-video-ouverte {
    overflow: hidden;
}

@media (prefers-reduced-motion: reduce) {
    .rflab-video-play {
        transition: none;
    }
}

