/* =============================================================================
   DRIMBOT, Composants média (photos & vidéo générées)
   Chargé globalement après app.css. Aucun token redéfini ici.
   ============================================================================= */

/* ---------------------------------------------------------------------------
   HERO CINÉMATIQUE, vidéo pilotée par le scroll (accueil)
--------------------------------------------------------------------------- */
.hero-cine {
  position: relative;
  height: 100vh;
  height: 100svh;
  overflow: hidden;
  display: grid;
  align-items: end;
  border-bottom: 1px solid var(--line);
}

.hero-cine__media,
.hero-cine__media video,
.hero-cine__media img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: 72% 38%;
}
.hero-cine__media { z-index: 0; }
.hero-cine__media::after {
  /* Voile de lisibilité : papier dense à gauche, transparent à droite,
     plus un léger assombrissement bas pour ancrer les puces. */
  content: '';
  position: absolute;
  inset: 0;
  background:
    linear-gradient(102deg,
      color-mix(in srgb, var(--paper) 96%, transparent) 0%,
      color-mix(in srgb, var(--paper) 82%, transparent) 30%,
      color-mix(in srgb, var(--paper) 30%, transparent) 55%,
      transparent 78%),
    linear-gradient(to top,
      color-mix(in srgb, var(--paper) 88%, transparent) 0%,
      transparent 28%);
}

.hero-cine__inner {
  position: relative;
  z-index: 1;
  width: 100%;
  padding-block: clamp(5rem, 12vh, 8.5rem) clamp(3.5rem, 9vh, 6rem);
}
.hero-cine__content { max-width: 620px; }

/* Chorégraphie liée au défilement : --scroll-progress est posée par le
   contrôleur scrollvideo (0 → 1 pendant l'épinglage). */
.hero-cine__content {
  opacity: calc(1.06 - var(--scroll-progress, 0) * 1.5);
  translate: 0 calc(var(--scroll-progress, 0) * -42px);
}
.hero-cine__act2 {
  position: absolute;
  inset: 0;
  z-index: 1;
  display: grid;
  place-items: center;
  text-align: center;
  padding-inline: 1.5rem;
  pointer-events: none;
  opacity: calc((var(--scroll-progress, 0) - 0.62) * 3.4);
  translate: 0 calc((1 - min(1, calc(var(--scroll-progress, 0) * 1.18))) * 36px);
}
.hero-cine__act2 .display-lg { max-width: 17em; margin-inline: auto; text-wrap: balance; }

.hero-cine__scrollcue {
  position: absolute;
  z-index: 1;
  left: 50%;
  bottom: 1.4rem;
  translate: -50% 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: .45rem;
  font-family: var(--font-mono);
  font-size: .66rem;
  letter-spacing: .16em;
  text-transform: uppercase;
  color: var(--ink-3);
  opacity: calc(1 - var(--scroll-progress, 0) * 2.6);
}
.hero-cine__scrollcue i {
  width: 1px;
  height: 34px;
  background: var(--ink-3);
  overflow: hidden;
  position: relative;
}
.hero-cine__scrollcue i::after {
  content: '';
  position: absolute;
  inset: 0;
  background: var(--accent);
  animation: cue-drop 1.8s cubic-bezier(.6, 0, .4, 1) infinite;
}
@keyframes cue-drop {
  0% { transform: translateY(-100%); }
  55%, 100% { transform: translateY(100%); }
}

/* Mobile : la vidéo scrollée reste active, même effet épinglé que sur desktop.
   Le texte passe en pleine largeur, donc on recadre sur le robot et on renforce
   le voile bas pour garder une lecture nette. */
@media (max-width: 860px) {
  .hero-cine__media video,
  .hero-cine__media img { object-position: 70% 28%; }

  /* Voile vertical : papier dense en bas (sous le texte), clair en haut (tête du
     robot + lustre visibles). Remplace le voile diagonal pensé pour le desktop. */
  .hero-cine__media::after {
    background: linear-gradient(to top,
      color-mix(in srgb, var(--paper) 95%, transparent) 0%,
      color-mix(in srgb, var(--paper) 80%, transparent) 32%,
      color-mix(in srgb, var(--paper) 22%, transparent) 60%,
      transparent 82%);
  }

  /* Resserre le bloc de contenu pour qu'il tienne dans 100svh sans rognage. */
  .hero-cine__inner { padding-block: clamp(4.25rem, 13vh, 6rem) clamp(2.75rem, 7vh, 4rem); }
  .hero-cine__act2 .display-lg { font-size: clamp(1.9rem, 7.4vw, 2.6rem); }

  /* L'indice « faites défiler » chevaucherait le texte plein largeur : le déroulé
     de la vidéo et le fondu du contenu suffisent à signaler le scroll. */
  .hero-cine__scrollcue { display: none; }
}

/* Reduced-motion : pas d'épinglage, pas de vidéo, poster statique. */
@media (prefers-reduced-motion: reduce) {
  .hero-cine { height: auto; min-height: 86svh; }
  .hero-cine__media video { display: none; }
  .hero-cine__act2 { display: none; }
  .hero-cine__content { opacity: 1; translate: none; }
  .hero-cine__scrollcue { display: none; }
  .hero-cine__scrollcue i::after { animation: none; }
}

/* Image de secours : affichée uniquement en reduced-motion (la <video> y est
   masquée). Ailleurs (desktop ET mobile), l'attribut poster de la <video> assure
   le rendu avant le chargement, donc pas besoin de la doubler. */
.hero-cine__fallback { display: none; }
@media (prefers-reduced-motion: reduce) {
  .hero-cine__fallback { display: block; }
}

/* ---------------------------------------------------------------------------
   FIGURES ÉDITORIALES
--------------------------------------------------------------------------- */
.figure-media {
  position: relative;
  margin: 0;
  border-radius: var(--r-lg);
  overflow: hidden;
  box-shadow: var(--shadow-card);
  background: var(--paper-deep);
}
.figure-media img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.figure-media figcaption {
  position: absolute;
  left: 1rem;
  bottom: 1rem;
  display: inline-flex;
  align-items: center;
  gap: .55rem;
  padding: .5rem .85rem;
  border-radius: 999px;
  background: color-mix(in srgb, var(--surface) 86%, transparent);
  backdrop-filter: blur(10px);
  border: 1px solid var(--line);
  font-family: var(--font-mono);
  font-size: .68rem;
  letter-spacing: .08em;
  text-transform: uppercase;
  color: var(--ink);
}
.figure-media figcaption .pulse-dot { flex: none; }

/* Bande média pleine largeur sous les heros de pages intérieures */
.media-band { padding-block: 0 clamp(2.5rem, 6vw, 4.5rem); }
.media-band .figure-media { aspect-ratio: 21 / 9; }
@media (max-width: 760px) {
  .media-band .figure-media { aspect-ratio: 4 / 3; }
}

/* Révélation éditoriale : rideau + zoom doux (animé via GSAP, data-media-reveal) */
[data-media-reveal] { will-change: clip-path; }
[data-media-reveal] img { will-change: transform; }

/* ---------------------------------------------------------------------------
   CARTES SECTEUR AVEC VISUEL (accueil)
--------------------------------------------------------------------------- */
.card--media { padding: 0; overflow: hidden; display: flex; flex-direction: column; }
.card--media .card-media {
  position: relative;
  aspect-ratio: 16 / 10;
  overflow: hidden;
  border-bottom: 1px solid var(--line);
}
.card--media .card-media img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform .9s cubic-bezier(.16, 1, .3, 1);
}
.card--media:hover .card-media img { transform: scale(1.05); }
@media (prefers-reduced-motion: reduce) {
  .card--media .card-media img,
  .card--media:hover .card-media img { transition: none; transform: none; }
}
.card--media .card-body { padding: 1.5rem 1.6rem 1.6rem; display: flex; flex-direction: column; gap: .5rem; flex: 1; }

/* ---------------------------------------------------------------------------
   GALERIE ROBOT (page /le-robot)
--------------------------------------------------------------------------- */
.rb-gallery {
  display: grid;
  grid-template-columns: 1.15fr .85fr;
  grid-template-rows: auto auto;
  gap: clamp(1rem, 2.5vw, 1.6rem);
}
.rb-gallery .figure-media:first-child { grid-row: 1 / 3; min-height: 100%; }
.rb-gallery .figure-media:nth-child(2),
.rb-gallery .figure-media:nth-child(3) { aspect-ratio: 16 / 10; }
@media (max-width: 860px) {
  .rb-gallery { grid-template-columns: 1fr; grid-template-rows: none; }
  .rb-gallery .figure-media:first-child { grid-row: auto; aspect-ratio: 4 / 5; }
}

/* ---------------------------------------------------------------------------
   GALERIE VIDÉO « RÉSEAUX SOCIAUX », rail de Reels, lecture au survol
   Composant réutilisable : partials/_video_gallery.html.twig
   --vg-bg : couleur de fond de la section (pour les fondus de bord). À régler
   sur les sections sombres : style="--vg-bg:#14181F".
--------------------------------------------------------------------------- */
.vg-section { --vg-bg: var(--paper); overflow: clip; }
.vg-section--dark { color: #fff; }
.vg-section--dark .kicker { color: var(--accent); }
.vg-section--dark .lead { color: #C7CCD6; }

.vg-rail-wrap { position: relative; margin-top: clamp(2rem, 4vw, 3rem); }

/* Fondus de bord : signalent que le rail continue hors-champ. */
.vg-rail-wrap::before,
.vg-rail-wrap::after {
  content: '';
  position: absolute;
  top: 0;
  bottom: 0;
  width: clamp(1.5rem, 6vw, 5rem);
  z-index: 2;
  pointer-events: none;
}
.vg-rail-wrap::before { left: 0; background: linear-gradient(to right, var(--vg-bg), transparent); }
.vg-rail-wrap::after { right: 0; background: linear-gradient(to left, var(--vg-bg), transparent); }

.vg-rail {
  display: flex;
  gap: clamp(.85rem, 1.6vw, 1.25rem);
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  scroll-padding-inline: var(--gutter);
  padding-block: .5rem 1.25rem;      /* place pour l'ombre + l'anneau au survol */
  padding-inline: 2px;
  -webkit-overflow-scrolling: touch;
  scrollbar-width: none;
}
.vg-rail::-webkit-scrollbar { display: none; }

.vg-card {
  position: relative;
  flex: 0 0 auto;
  width: clamp(200px, 44vw, 248px);
  aspect-ratio: 9 / 16;
  border-radius: var(--r-md);
  overflow: hidden;
  background: #0E1116;
  scroll-snap-align: start;
  cursor: pointer;
  border: 0;
  padding: 0;
  text-align: left;
  color: #fff;
  box-shadow: var(--shadow-card);
  transition: transform var(--t-fast), box-shadow var(--t-fast);
}
.vg-card:hover,
.vg-card:focus-visible { transform: translateY(-4px); box-shadow: var(--shadow-pop); outline: none; }
.vg-card:focus-visible { box-shadow: var(--shadow-pop), 0 0 0 3px var(--accent); }

.vg-card video,
.vg-card__poster {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.vg-card__poster { z-index: 1; }
.vg-card video { z-index: 0; background: #0E1116; }
/* Pendant la lecture, la vidéo passe au-dessus du poster. */
.vg-card.is-playing video { z-index: 2; }
/* Léger zoom du média au survol, comme les cartes secteur. */
.vg-card video,
.vg-card__poster { transition: transform .9s cubic-bezier(.16, 1, .3, 1); }
.vg-card:hover video,
.vg-card:hover .vg-card__poster { transform: scale(1.04); }

/* Voile de lisibilité (haut : tag, bas : titre). */
.vg-card__veil {
  position: absolute;
  inset: 0;
  z-index: 3;
  background:
    linear-gradient(to top, rgb(8 10 14 / .82) 0%, rgb(8 10 14 / .12) 38%, transparent 60%),
    linear-gradient(to bottom, rgb(8 10 14 / .55) 0%, transparent 30%);
  pointer-events: none;
}

.vg-card__tag {
  position: absolute;
  top: .7rem;
  left: .7rem;
  z-index: 4;
  display: inline-flex;
  align-items: center;
  gap: .4em;
  padding: .3em .7em;
  border-radius: var(--r-pill);
  background: rgb(255 255 255 / .14);
  backdrop-filter: blur(8px);
  border: 1px solid rgb(255 255 255 / .2);
  font-family: var(--font-mono);
  font-size: .62rem;
  letter-spacing: .1em;
  text-transform: uppercase;
}

.vg-card__title {
  position: absolute;
  left: .85rem;
  right: .85rem;
  bottom: .85rem;
  z-index: 4;
  margin: 0;
  font-family: var(--font-display);
  font-weight: 600;
  font-size: .95rem;
  line-height: 1.2;
  letter-spacing: -.01em;
  text-shadow: 0 1px 12px rgb(0 0 0 / .4);
}

/* Pastille « lecture » au centre, masquée pendant la lecture. */
.vg-card__play {
  position: absolute;
  inset: 0;
  z-index: 4;
  display: grid;
  place-items: center;
  pointer-events: none;
  transition: opacity var(--t-fast);
}
.vg-card__play span {
  display: grid;
  place-items: center;
  width: 52px;
  height: 52px;
  border-radius: 50%;
  background: rgb(255 255 255 / .16);
  backdrop-filter: blur(8px);
  border: 1px solid rgb(255 255 255 / .35);
}
.vg-card__play svg { width: 20px; height: 20px; margin-left: 3px; fill: #fff; }
.vg-card.is-playing .vg-card__play { opacity: 0; }
.vg-card.is-playing .vg-card__veil { opacity: .65; }

/* Flèches de défilement (desktop avec survol uniquement). */
.vg-arrow {
  position: absolute;
  top: calc(50% - 1rem);
  z-index: 3;
  display: none;
  place-items: center;
  width: 44px;
  height: 44px;
  border-radius: 50%;
  background: var(--surface);
  border: 1px solid var(--line);
  box-shadow: var(--shadow-card);
  color: var(--ink);
  cursor: pointer;
  transition: transform var(--t-fast), background var(--t-fast);
}
.vg-arrow:hover { transform: scale(1.08); background: var(--paper-deep); }
.vg-arrow svg { width: 20px; height: 20px; }
.vg-arrow--prev { left: -8px; }
.vg-arrow--next { right: -8px; }
@media (hover: hover) and (pointer: fine) {
  .vg-arrow { display: grid; }
}

.vg-hint {
  margin-top: 1rem;
  font-family: var(--font-mono);
  font-size: .68rem;
  letter-spacing: .08em;
  text-transform: uppercase;
  color: var(--ink-3);
}
.vg-section--dark .vg-hint { color: #7B8290; }

@media (prefers-reduced-motion: reduce) {
  .vg-card,
  .vg-card video,
  .vg-card__poster { transition: none; }
  .vg-card:hover video,
  .vg-card:hover .vg-card__poster { transform: none; }
}
