/* === BfastAI — Barre d'avancement de lecture (voir assets/progress.js) ========
   Un filet de 3px collé en haut de la fenetre, qui se remplit de gauche a droite
   au fur et a mesure qu'on descend dans l'article.

   Le remplissage est pilote par une seule variable, --bf-progress (0 -> 1), posee
   sur <html> par le script. C'est volontaire : le runtime x-dc re-rend le DOM et
   reecrit les attributs des noeuds qu'il gere, donc on n'ecrit jamais dans le
   style du noeud lui-meme. <html> n'appartient pas au runtime, la valeur survit
   donc a un re-rendu, et le remplissage est correct des la premiere frame apres
   le rendu, sans avoir a re-declencher quoi que ce soit.

   scaleX plutot que width : c'est une transformation composee par le GPU, sans
   recalcul de mise en page a chaque pixel de defilement.

   Sans le script, la variable vaut 0 : la barre reste une hairline discrete en
   haut de page, jamais une barre pleine qui mentirait sur la position. */

.bf-progress {
  position: fixed;
  top: 0; left: 0; right: 0;
  height: 3px;
  z-index: 60;                      /* au-dessus de la nav sticky (z-index:50) */
  background: rgba(255, 252, 248, 0.06);
  pointer-events: none;             /* ne doit jamais intercepter un clic */
}

.bf-progress__bar {
  display: block;
  height: 100%;
  width: 100%;
  transform-origin: 0 50%;
  transform: scaleX(var(--bf-progress, 0));
  background: linear-gradient(90deg, #8B5CF6, #A37BFF);
  box-shadow: 0 0 10px rgba(163, 123, 255, 0.45);
  /* Court, et lineaire : la molette avance par paliers, la barre doit les lisser
     sans donner l'impression de trainer derriere le texte. */
  transition: transform 0.08s linear;
}

/* Le mouvement reduit ne supprime pas l'indicateur, il supprime le lissage :
   la barre saute directement a sa position. */
@media (prefers-reduced-motion: reduce) {
  .bf-progress__bar { transition: none; }
}
