/* OUTIL PUBLIC — le bloc « Identité fédérale » de la fiche (LOT D, 11/08/2026).
   ⛔ CHARGÉ SUR LA SEULE FICHE DE L'OUTIL : le gabarit public sert aussi l'accueil, la bibliothèque
   et les séances, qui n'en ont pas besoin.
   ⭐ AUCUNE COULEUR EN DUR pour le fond, le texte et les bordures : tout passe par les variables du
   produit (`--card`, `--text`, `--muted`, `--border`, `--danger`), donc le mode sombre est correct
   sans une seule règle de plus — c'est la règle « un défaut visuel sur un thème est du CSS ».
   ⏩ 11/08/2026 — LES DEUX RÈGLES `.ptffn-avert` SONT PARTIES avec le bandeau « identité non
   vérifiée » (décision de Simon). Elles portaient les seules couleurs en dur du fichier ; il n'en
   reste aucune. ⛔ Un style que plus rien n'appelle fait croire au lecteur suivant que le bloc
   existe encore : on retire la règle avec ce qu'elle habillait. */
/* ⏩⏩ 11/08/2026 — LE BANDEAU DE L'OUTIL, EN NOTE (demande de Simon : « trop gros »).
   Le repere donne est LE PETIT LIEN du bandeau (`.bn-primary`, 12,5 px) : on s'y aligne.
   ⛔ CE QUI LE FAISAIT CRIER N'ETAIT PAS SA TAILLE, C'ETAIT SON HABILLAGE — majuscules forcees,
   graisse 800 et interlettrage large en font un TITRE. « Ton profil · temporaire, non sauvegardé »
   est une note de bas de bandeau, pas un titre : on retire les trois, on garde la lisibilite.
   ⭐ CE FICHIER N'EST CHARGE QUE SUR LA FICHE DE L'OUTIL : la regle ne peut pas atteindre la fiche
   du coach ni celle de la demonstration, meme par accident.
   ⛔⛔ LA DOUBLE CLASSE N'EST PAS UNE COQUETTERIE — piege mesure a l'ecran le 11/08 : la regle
   `.sp .sp-eyebrow` vit dans le `<style>` de la fiche, RENDU APRES ce fichier. A specificite egale,
   c'est le dernier qui gagne : ecrite `.sp .sp-eyebrow-note`, la note restait en majuscules grasses.
   On monte donc d'un cran (`.sp-eyebrow.sp-eyebrow-note`), et l'ordre cesse de decider. */
.sp .sp-eyebrow.sp-eyebrow-note {
  font-size: 12.5px; text-transform: none; letter-spacing: 0; font-weight: 500; opacity: .82;
}

/* ⏩⏩ 11/08/2026, SECONDE PASSE — SEPT RÈGLES SONT PARTIES AVEC LA CARTE « Identité fédérale »
   (`.ptffn-badge`, `.ptffn-champs` et ses quatre déclinaisons, `.ptffn-na`, `.ptffn-pied`,
   `.ptffn-actions`, `.ptffn-danger`). L'identité vit désormais dans le bandeau, en deux valeurs :
   le numéro et le lien fédéral. ⛔ Un style que plus rien n'appelle fait croire au lecteur suivant
   que le bloc existe encore : on retire la règle avec ce qu'elle habillait. */
.ptffn { }
.ptffn-h { margin: 0 0 8px; display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.ptffn-intro { margin: 6px 0; }

/* ⭐ LE LIEN FÉDÉRAL, DANS LE BANDEAU BLEU. Il hérite du texte clair du bandeau : une couleur de
   lien du thème y serait illisible sur fond marine. Souligné en pointillé pour rester un lien
   sans crier — la ligne d'identité est une note, pas une barre de navigation. */
.sp .sp-sub .sp-ffn-lien {
  color: inherit; text-decoration: underline; text-decoration-style: dotted; text-underline-offset: 2px;
}
.sp .sp-sub .sp-ffn-lien:hover { text-decoration-style: solid; }

/* ⭐ LE SUIVI DE LA RÉCUPÉRATION — il n'a NI cadre NI titre, et c'est voulu : il ne vit qu'une
   minute par visite. Quand il n'a rien à dire, son message est `hidden` et le bloc n'occupe
   aucune place. ⛔ Surtout pas une carte permanente pour un état passager. */
.ptffn-suivi { margin: -4px 0 14px; }

/* Le message : gris pour un fait (« récupération en cours »), rouge pour un vrai refus.
   ⛔ Un accroc de suivi n'est jamais peint en rouge — le travail vit en base, pas dans la page. */
.ptffn-msg { margin-top: 12px; padding: 9px 12px; border-radius: 12px; background: rgba(148, 163, 184, .14); color: var(--muted); font-size: 13px; }
.ptffn-msg.err { background: rgba(220, 38, 38, .1); color: var(--danger); }

/* La fenêtre de recherche réutilise le chrome des modales maison (`.rm-scope`). Rien à redéfinir :
   on lui donne seulement une largeur adaptée à trois champs et à une courte liste. */
.ptffn-scope .q4-modal { width: min(520px, 100%); }
.ptffn-scope .rm-addgrid { grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); }
.ptffn-scope .rm-row { align-items: center; gap: 10px; }

/* ═══════════════════════════════════════════════════════════════════════════════════════════════
   ⭐⭐ LOT G (11/08/2026) — LA BARRE D'AVANCEMENT, LE MÊME DESSIN DES DEUX CÔTÉS.
   ═══════════════════════════════════════════════════════════════════════════════════════════════
   Le comportement vit dans `public-tool-progress.js` ; ici, uniquement le dessin. Les deux écrans
   qui la montrent — l'entrée (`public_tool/start.php`) et la fiche (`public-tool-ffn.js`) —
   chargent CE fichier, donc la barre y est identique au pixel près.

   ⛔ AUCUNE COULEUR EN DUR, comme le reste de la feuille : la piste et la jauge se dérivent des
   variables du produit (`--text` pour le creux, `--ok` pour le vert). Le mode sombre est correct
   sans une règle de plus.
   ⚠️ On NE réemploie PAS `.progress` d'`app.css` : ses deux couleurs sont écrites en dur (#e5e7eb,
   #0ea5e9), elle serait fausse en thème sombre — et elle n'est appelée par aucune vue (vérifié le
   11/08). Réutiliser une règle morte ET fausse aurait coûté une correction dans la feuille PARTAGÉE
   du programme, pour un besoin qui n'appartient qu'à l'outil.

   ⛔⛔ L'ÉTAT « indéterminé » NE PROGRESSE PAS, ET C'EST TOUT LE POINT : il fait un va-et-vient sur
   place. Une animation qui avance de gauche à droite raconterait un avancement que personne n'a
   compté — exactement ce que la règle du LOT D interdit. Il ne dure que le tout premier instant,
   avant que le serveur ait dit combien il y a à faire.

   ⏩⏩ 12/08/2026 — PLUS ÉPAISSE, EN VERT, ET EN RELIEF (demande de Simon : « ça reste trop
   discret »). Trois changements, et aucun ne touche à ce que la barre SIGNIFIE :
     ① l'épaisseur passe de 8 à 14 px — c'est le seul élément d'attente de l'écran, il ne se cache
       plus au milieu du texte ;
     ② la couleur passe du bleu du produit au VERT `--ok`, celui que le produit emploie déjà pour
       « ça va bien ». ⛔ TOUJOURS AUCUNE COULEUR INVENTÉE : on part de la variable et on l'assombrit
       avec `color-mix`, plutôt que d'écrire un vert à la main qui dériverait de la palette ;
     ③ le relief : un creux sur la piste, un dégradé + une arête claire sur la jauge, et des rayures
       en diagonale pendant le travail.
   ⛔⛔ LES RAYURES NE DISENT RIEN DE L'AVANCEMENT, ET C'EST À TENIR : elles glissent SUR PLACE, à
   l'intérieur d'une largeur qui, elle, vaut exactement `fait / à faire`. Ce sont deux choses
   séparées — la largeur informe, la texture dit seulement « ça tourne ». Le jour où quelqu'un
   voudra faire avancer la texture avec le temps, c'est la règle du LOT D qu'il enfreindra. */
.ptbar { margin: 12px 0 0; }
.ptbar-piste {
  display: block; height: 14px; border-radius: 999px; overflow: hidden;
  background: color-mix(in srgb, var(--text) 12%, transparent);
  /* le creux : c'est lui qui donne l'impression d'une gouttière, pas un simple trait */
  box-shadow: inset 0 2px 4px rgba(15, 23, 42, .30), inset 0 -1px 0 rgba(255, 255, 255, .10);
}
.ptbar-jauge {
  display: block; position: relative; height: 100%; width: 0; border-radius: 999px;
  /* ⭐ Le vert du produit, assombri d'un bout à l'autre : c'est ce dégradé qui fait le volume. */
  background: linear-gradient(180deg,
                color-mix(in srgb, var(--ok) 88%, white) 0%,
                var(--ok) 45%,
                color-mix(in srgb, var(--ok) 72%, black) 100%);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .45), 0 1px 3px rgba(0, 0, 0, .28);
  transition: width .35s ease;
}
/* Les rayures — une couche à part, pour ne pas toucher au dégradé du dessous. */
.ptbar-jauge::after {
  content: ""; position: absolute; inset: 0; border-radius: inherit;
  background: repeating-linear-gradient(135deg,
                rgba(255, 255, 255, .22) 0 10px, rgba(255, 255, 255, 0) 10px 20px);
  background-size: 28.28px 28.28px;   /* le pas de la diagonale, pour un défilement sans saccade */
  animation: ptbar-rayures 1.1s linear infinite;
}
@keyframes ptbar-rayures {
  from { background-position: 0 0; }
  to   { background-position: 28.28px 0; }
}
/* Le va-et-vient : la jauge occupe un tiers de la piste et la balaie SANS jamais se remplir. */
.ptbar[data-etat="indetermine"] .ptbar-jauge {
  width: 35%;
  transition: none;
  animation: ptbar-va-et-vient 1.4s ease-in-out infinite;
}
@keyframes ptbar-va-et-vient {
  0%   { transform: translateX(-100%); }
  100% { transform: translateX(286%); }
}
/* ⚠️ Mouvement réduit demandé par le système : on ne supprime pas l'information, on retire le
   mouvement. La piste reste visiblement « en travail », sans rien animer. */
@media (prefers-reduced-motion: reduce) {
  .ptbar[data-etat="indetermine"] .ptbar-jauge { animation: none; width: 100%; opacity: .45; }
  .ptbar-jauge::after { animation: none; }
}
