/* ============================================================
   50 : rails Netflix (slots lazy, boucle infinie, flèches recalées, progression)
   Chargée APRÈS 20-maquette : même spécificité, l'ordre tranche.
   Pas de préfixe body, pas de !important.
   ============================================================ */

/* Largeur de carte de rail : une seule source de vérité, consommée par la
   carte (99-overrides), le slot et le calcul de position des flèches. */
.pxd-disc-track-wrap{--pxd-rail-card-w:clamp(272px,24vw,320px)}

/* Slot : skeleton de la taille exacte d'une carte (image 16/9 + 150px de corps),
   remplacé par la vraie carte à l'approche (IntersectionObserver root=track). */
.pxd-disc-slot{min-height:calc(var(--pxd-rail-card-w) * 9 / 16 + 150px);cursor:default;pointer-events:none}
.pxd-disc-slot .pxd-disc-cbody{padding:13px 15px 15px}

/* Saut de boucle : ni snap ni lissage le temps du repositionnement (1 frame). */
.pxd-disc-track.is-jumping{scroll-snap-type:none;scroll-behavior:auto}

/* Flèches centrées sur l'IMAGE (padding-top 6px de la piste + moitié de la
   hauteur 16/9), jamais sur le titre ; jamais désactivées (la boucle a toujours
   une carte avant et une carte après). */
.pxd-disc-arrow{top:calc(6px + (var(--pxd-rail-card-w) * 9 / 16) / 2);transform:translateY(-50%)}
.pxd-disc-arrow.l{left:6px}
.pxd-disc-arrow.r{right:6px}
.pxd-disc-arrow:hover{transform:translateY(-50%) scale(1.08)}
.pxd-disc-arrow:active{transform:translateY(-50%) scale(0.94)}
.pxd-disc-arrow:focus-visible{opacity:1}

/* Clones de boucle : jamais focusables (tabindex -1 en JS), pas de halo de
   comparaison ni de lift au clavier. */
.pxd-disc-track .pxd-disc-card[data-clone]{scroll-snap-align:start}

@media (max-width:640px){
    .pxd-disc-track-wrap{--pxd-rail-card-w:min(80vw,288px)}
}
