@charset "UTF-8";
/* ══════════════════════════════════════════════════════════════════════════
   CARAVELLI — OLYMPE · LUT EN DIRECT — feuille compagnon  (priorité 2)
   Compagnon de JS/olympe-lut-v9235.js.

   Cette feuille ne fait que deux choses, et n'en fait aucune tant que le
   script n'a rien pris en charge :
     1. poser la toile étalonnée exactement sur la boîte du film ;
     2. rendre le film d'origine invisible SANS l'arrêter.

   Le second point est le seul qui demande de l'attention. Le `<video>` reste
   en place, il continue de jouer, de décoder, d'être compté par le moteur —
   la règle « un seul film à la fois » d'olympe-engine.js et le chien de
   garde éco continuent de le voir. On ne fait que le rendre transparent :
   ce que l'œil voit, c'est la toile ; ce que le site pilote, c'est toujours
   le film. `visibility` ou `display` casseraient l'un ou l'autre.

   AUCUNE PROPRIÉTÉ TYPOGRAPHIQUE ici.
   ══════════════════════════════════════════════════════════════════════════ */

/* Le conteneur devient le repère de la toile. Il porte déjà `position` dans
   la plupart des cas ; on ne l'impose que s'il ne l'a pas — écraser un
   `position:absolute` existant décrocherait le film de son cadre. */
.lut9235__hote{ position:relative; }

.lut9235__toile{
  position:absolute;
  inset:0;
  display:block;
  width:100%;
  height:100%;
  /* Le film d'origine est étiré par `object-fit:cover` ; la toile est
     rendue à la boîte exacte du film, donc elle se superpose au pixel. */
  object-fit:cover;
  pointer-events:none;
  opacity:0;
  transition:opacity 420ms cubic-bezier(.22,.61,.36,1);
  z-index:1;
}
/* L'opacite d'origine du film, relevee par le script et reportee ici : le
   heros garde exactement la densite qu'il avait avant l'etalonnage. */
.lut9235__toile.lut9235--on{ opacity:var(--lut9235-opacite, 1); }

/* Le film pris en charge devient invisible mais reste vivant. */
.lut9235--pris{
  opacity:0 !important;
  /* `!important` est ici obligatoire, et pas par confort : olympe-system.css
     pose le grade du heros en `!important`, ce qu'un `style="filter:none"`
     en ligne ne peut pas battre — mesure faite, le calcul rendait toujours
     brightness(.945) contrast(1.035)…

     Ce que ce retrait corrige exactement : PAS un double etalonnage. Un
     filtre CSS ne traverse jamais `texImage2D(video)` — le shader
     echantillonne l'image decodee, pas le rendu style. La LUT n'a donc
     jamais pu s'appliquer par-dessus le grade. Le retrait sert au seul
     instant ou les deux se voient : les 420 ms de fondu de la toile, ou le
     film reparait un souffle s'il faut rendre la main. Sans lui, on verrait
     la couleur sauter. */
  filter:none !important;
}

/* Mouvement réduit : le script peint une seule image, on retire le fondu —
   une apparition est un mouvement. */
@media (prefers-reduced-motion:reduce){
  .lut9235__toile{ transition:none; }
}

/* À l'impression, on rend la main au film et à son étalonnage d'origine. */
@media print{
  .lut9235__toile{ display:none; }
  .lut9235--pris{ opacity:1 !important; }
}
