/*
 * LA NÔTRE — ne fait pas partie de la référence.
 *
 * `css/flac.css`, `css/reset.css`, `img/` et `fnt/` sont des copies conformes
 * de ChadiZarkal/redorgreenorigin et doivent le rester à l'octet près, pour
 * qu'une version plus récente s'installe par simple écrasure. Tout ce que
 * l'application hôte casse se répare donc ici, ce qui garde la frontière
 * visible.
 *
 * Ordre de chargement : reset.css → flac.css → adapter.css
 */

/*
 * L'application hôte pose une classe de police sur <body>, et une classe
 * (0,1,0) l'emporte sur le `html body` de flac.css (0,0,2) : tout ce qui hérite
 * recevait la typographie du site au lieu d'Agdasima. La poser sur le conteneur
 * règle tout le sous-arbre par héritage — sans !important, sans course à la
 * spécificité.
 */
.main-container {
  font-family: 'Agdasima', sans-serif;
}

/*
 * L'application hôte fixe `html { height: 100% }` et un fond sombre sur <body>
 * via Tailwind ; la référence attend un <body> de la hauteur de l'écran, qu'elle
 * peint elle-même. Sans cette ligne le conteneur flotte sur le fond du site.
 */
body:has(.main-container) {
  background-color: var(--color-bg-desktop);
  min-height: 100svh;
}

/*
 * La référence écrit `.main-container { min-height: 100% }`, et comptait sur un
 * <main> enfant direct de <body>. Ici il est enveloppé par les fournisseurs de
 * l'application (bornage d'erreurs, analytique, préférences de mouvement), dont
 * les div n'ont pas de hauteur définie : un pourcentage n'a alors plus rien
 * contre quoi se résoudre et retombe sur `auto`. Sur une question courte, le
 * conteneur sombre s'arrêtait à 594 px et le fond brun du bureau occupait le
 * dernier quart de l'écran, mesureur compris.
 *
 * Les unités de fenêtre ne dépendent d'aucun parent : elles traversent les
 * enveloppes sans rien leur demander.
 */
.main-container {
  min-height: 100svh;
}

/*
 * COLLISION DE NOMS — la seule entre les deux feuilles, et elle est franche.
 *
 * `globals.css` de l'application et `flac.css` déclarent tous deux `.site-header`.
 * Côté application c'est la barre de navigation du site : hauteur fixe de 3rem,
 * fond opaque, flou d'arrière-plan, bordure basse. Côté référence c'est le bloc
 * logo + accroche, qui doit se dimensionner sur son contenu. Résultat sans cette
 * règle : l'en-tête est écrasé à 48 px, le logo de 96 px en déborde et recouvre
 * l'accroche, la barre de progression et le début de la question.
 *
 * Réparé plutôt que renommé : c'est `.site-header` que `flac.css` stylise, et
 * renommer la classe ferait perdre tout le reste de sa mise en forme. La règle
 * est portée à (0,2,0) par `.main-container`, qui n'existe que sur cette route.
 */
.main-container .site-header {
  height: auto;
  border-bottom: none;
  background: none;
  backdrop-filter: none;
  z-index: auto;
  padding-top: var(--spacing);
}

/* ---------------------------------------------------------------------------
 * Blocs auxquels la référence ne donne pas de classe, parce que son markup ne
 * les avait pas. Écrits dans son idiome plutôt qu'inventés.
 * ------------------------------------------------------------------------- */

/*
 * Le mesureur est en position absolue, calé en bas du `client-container`, et il
 * mesure 4.5rem. La référence ne réservait que `margin-bottom: spacing * 1.5`
 * sous les réponses — 24 px pour 72 px d'aiguille. Tant que les réponses
 * tiennent en un mot, personne ne s'en aperçoit ; dès qu'une réponse fait trois
 * lignes, la dernière passe sous la règle graduée.
 *
 * La réserve est posée sur le conteneur plutôt que sur les boutons, pour qu'elle
 * profite aussi au récap, dont le dernier bloc tombait au même endroit.
 */
.main-container .client-container {
  padding-bottom: calc(4.5rem + var(--spacing));
}

/* Deuxième ligne d'un énoncé, plus petite et grise. */
.prompt-helper {
  margin-top: calc(var(--spacing) * 0.35);
  color: var(--grey);
  font-size: var(--font-size-s);
}

/* Réponse déjà cliquée, le temps que la question quitte l'écran. */
.button-answer.is-picked {
  filter: brightness(1.35);
}

/*
 * Le bloc texte d'un highlight. `.stats-rare li` est un flex qui sépare le
 * texte de la pastille de pourcentage : sans `flex: 1`, le texte se serre à
 * droite et la pastille dérive au milieu de la ligne.
 */
.question-answer {
  flex: 1;
  text-align: left;
}

/*
 * La référence dessinait le radar avec Chart.js dans un <canvas> et lui donnait
 * `height: 100%`. Ici c'est un SVG, qui se dimensionne seul — il ne manque que
 * l'air autour.
 */
.spider-chart-container {
  padding: calc(var(--spacing) * 0.5);
  box-sizing: border-box;
}

@media (prefers-reduced-motion: reduce) {
  .redflag-o-meter .meter-cursor,
  .progress-bar .score-cursor {
    transition-duration: 1ms;
  }
}

/*
 * Une cohorte trop mince, déclarée plutôt que cachée. Un rang sur quatre
 * joueurs reste un rang ; le présenter comme un rang sur mille serait le seul
 * mensonge que cet écran ne peut pas se permettre.
 */
.low-sample-warning {
  color: var(--grey);
  font-style: italic;
  font-size: calc(var(--font-size-s) * 0.85);
}

/*
 * Le repli du radar sous trois axes : deux points ne forment pas un polygone.
 * Des barres disent la même chose sans prétendre à une forme.
 */
.subscore-bars {
  display: flex;
  flex-direction: column;
  gap: calc(var(--spacing) * 0.4);
  margin: 0;
  padding: 0;
  list-style: none;
}

.subscore-bars li {
  display: flex;
  align-items: center;
  gap: calc(var(--spacing) * 0.5);
}

.subscore-label {
  flex: 0 0 8rem;
  text-align: left;
  font-size: var(--font-size-s);
}

.subscore-track {
  flex: 1;
  height: 0.75rem;
  overflow: hidden;
  border-radius: 1000px;
  background-color: var(--blueish-grey);
}

.subscore-fill {
  display: block;
  height: 100%;
}

.subscore-value {
  flex: 0 0 3.5rem;
  text-align: right;
  font-size: var(--font-size-s);
}



/* La ligne sous les deux menus du préambule. */
.intro-note {
  margin: 0 var(--spacing);
  color: var(--grey);
  font-size: calc(var(--font-size-s) * 0.9);
  text-align: center;
}

/*
 * Un test sans question, une base injoignable : la référence n'avait pas prévu
 * l'écran, parce que son contenu était dans les fichiers.
 */
.error-message {
  margin: auto 0;
  padding: var(--spacing);
  text-align: center;
}

.error-message a {
  color: var(--white);
  text-decoration: underline;
}

.loading-message {
  margin: auto 0;
  text-align: center;
  font-size: var(--font-size-l);
}

/* ---------------------------------------------------------------------------
 * Le récap enrichi : archétype, réponse décisive, ressources, partage.
 *
 * Aucun de ces blocs n'existe dans la feuille de référence, dont le récap
 * s'arrêtait au score, aux drapeaux et aux highlights. Ils sont écrits dans son
 * idiome — coins à 5 px, palette de variables, majuscules condensées — plutôt
 * qu'inventés à côté.
 * ------------------------------------------------------------------------- */


/* Une seule réponse qui porte le cinquième du score. */
.stats-decisive {
  display: flex;
  flex-direction: column;
  gap: calc(var(--spacing) * 0.2);
  margin: var(--spacing) 0 0;
  padding: var(--spacing-text-y) var(--spacing);
  border-left: 3px solid var(--red);
  text-align: left;
  font-size: var(--font-size-s);
}

.stats-decisive-quote {
  color: var(--light-green);
  font-size: var(--font-size-m);
  font-weight: bold;
}

.stats-decisive-question {
  color: var(--grey);
  font-size: calc(var(--font-size-s) * 0.9);
}

/*
 * Le moment où le test cesse de faire de l'humour. Encadré d'orange et non de
 * rouge : le rouge est la couleur du score, et cette boîte ne doit pas se lire
 * comme une sanction de plus.
 */
.stats-ressource {
  margin: var(--spacing) 0 0;
  padding: var(--spacing);
  border: 1px solid var(--orange);
  border-radius: var(--border-radius);
  text-align: left;
  font-size: var(--font-size-s);
}

.stats-ressource-cat {
  margin: 0 0 calc(var(--spacing) * 0.25) 0;
  color: var(--orange);
  font-size: calc(var(--font-size-s) * 0.85);
  font-weight: bold;
  text-transform: uppercase;
}

.stats-ressource p {
  margin: 0;
}

.stats-ressource-lien {
  display: inline-block;
  margin-top: calc(var(--spacing) * 0.5);
  color: var(--white);
  font-weight: bold;
  text-decoration: underline;
}

/* ---------------------------------------------------------------------------
 * Partage
 * ------------------------------------------------------------------------- */

.partage {
  display: flex;
  flex-direction: column;
  align-items: center;
}

.partage-copier {
  margin-top: calc(var(--spacing) * 0.75);
  border: 1px solid var(--grey);
  border-radius: var(--border-radius);
  padding: var(--spacing-text-y) var(--spacing);
  background: none;
  color: var(--white);
  font-family: 'Agdasima', sans-serif;
  font-size: var(--font-size-s);
  text-transform: uppercase;
  text-decoration: none;
  cursor: pointer;
}

.partage-copier:hover {
  border-color: var(--white);
}

.partage-note {
  margin: calc(var(--spacing) * 0.5) 0 0;
  color: var(--grey);
  font-size: calc(var(--font-size-s) * 0.85);
  text-align: center;
}

/* ---------------------------------------------------------------------------
 * La devinette d'un résultat partagé
 * ------------------------------------------------------------------------- */

.guess-value {
  margin: 0;
  color: var(--red);
  font-size: var(--font-size-xxl);
  font-weight: bold;
  line-height: 1;
}

.guess-slider {
  width: 100%;
  max-width: 22rem;
  margin: var(--spacing) 0;
  accent-color: var(--red);
}

.guess-verdict {
  margin: 0 var(--spacing);
  padding: var(--spacing);
  border: 1px solid var(--yellow);
  border-radius: var(--border-radius);
  font-size: var(--font-size-m);
}

.guess-skip {
  margin-top: calc(var(--spacing) * 0.5);
  border: none;
  background: none;
  color: var(--grey);
  font-family: 'Agdasima', sans-serif;
  font-size: var(--font-size-s);
  text-decoration: underline;
  cursor: pointer;
}

.guess-skip:hover {
  color: var(--white);
}

/* ---------------------------------------------------------------------------
 * Progression
 * ------------------------------------------------------------------------- */

/*
 * Le compteur remplace ce que les cellules ne peuvent plus dire au-delà de
 * quinze questions. Il reste utile en deçà : « question 3 sur 5 » se lit plus
 * vite qu'on ne compte des cases.
 */
.progress-count {
  margin: 0;
  color: var(--grey);
  font-size: var(--font-size-s);
  text-align: center;
}

.progress-count strong {
  color: var(--white);
  font-weight: bold;
}

/* La barre pleine, quand les cellules deviendraient des rayures de 5 px. */
.progress-bar-fill {
  display: block;
  height: 100%;
  background-color: var(--red);
  transition: width 300ms cubic-bezier(0.86, 0, 0.07, 1);
}

/* Retour en arrière, et sortie discrète de l'écran de reprise. */
.button-back {
  margin-top: var(--spacing);
  border: none;
  background: none;
  color: var(--grey);
  font-family: 'Agdasima', sans-serif;
  font-size: var(--font-size-s);
  text-transform: uppercase;
  cursor: pointer;
}

.button-back:hover {
  color: var(--white);
}

/* ---------------------------------------------------------------------------
 * La page publique de statistiques
 * ------------------------------------------------------------------------- */

.stats-page {
  display: flex;
  flex-direction: column;
  gap: var(--spacing);
  text-align: left;
}

.stats-page-tri {
  display: flex;
  gap: calc(var(--spacing) * 0.5);
  justify-content: center;
}

.stats-page-tri button {
  border: 1px solid var(--blueish-grey);
  border-radius: var(--border-radius);
  padding: calc(var(--spacing-text-y) * 0.6) var(--spacing);
  background: none;
  color: var(--grey);
  font-family: 'Agdasima', sans-serif;
  font-size: var(--font-size-s);
  cursor: pointer;
}

.stats-page-tri .stats-tri-actif {
  border-color: var(--red);
  background-color: var(--red);
  color: #fff;
}

.stats-question {
  padding: var(--spacing);
  border: 1px solid var(--blueish-grey);
  border-radius: var(--border-radius);
}

.stats-question h3 {
  margin: 0;
  font-size: var(--font-size-m);
  font-weight: bold;
  line-height: 1.2;
}

.stats-question-base {
  margin: calc(var(--spacing) * 0.25) 0 var(--spacing) 0;
  color: var(--grey);
  font-size: calc(var(--font-size-s) * 0.85);
}

/* L'écart qui fait la valeur de la page : il se voit avant d'être lu. */
.stats-question-divise {
  color: var(--yellow);
  font-weight: bold;
}

.stats-barres {
  display: flex;
  flex-direction: column;
  gap: calc(var(--spacing) * 0.75);
  margin: 0;
  padding: 0;
  list-style: none;
}

.stats-barre-texte {
  margin: 0 0 calc(var(--spacing) * 0.2) 0;
  font-size: var(--font-size-s);
}

.stats-barre {
  position: relative;
  display: flex;
  align-items: center;
  height: 1.4rem;
  border-radius: calc(var(--border-radius) * 0.75);
  background-color: var(--blueish-grey);
  overflow: hidden;
}

.stats-barre-fond {
  position: absolute;
  inset: 0 auto 0 0;
  background-color: var(--red);
}

.stats-barre-valeur {
  position: relative;
  padding: 0 calc(var(--spacing) * 0.5);
  font-size: var(--font-size-s);
  font-weight: bold;
}

.stats-barre-sexes {
  display: flex;
  gap: var(--spacing);
  margin: calc(var(--spacing) * 0.25) 0 0 0;
  font-size: calc(var(--font-size-s) * 0.85);
}

/* Deux teintes distinctes, et jamais le rouge : il appartient au total. */
.stats-sexe-h { color: #7dd3fc; }
.stats-sexe-f { color: #f9a8d4; }

/* ===========================================================================
 * LA CARTE — le bloc conçu pour être capturé.
 *
 * LE PROBLÈME QU'ELLE RÉSOUT
 *   Le récap faisait 2 607 px de haut pour un écran de 812. Les six
 *   informations qui comptent — nom du profil, score, écart, point noir,
 *   classements — étaient réparties sur trois écrans, chacune dans son propre
 *   bloc avec sa propre marge. Une capture d'écran de téléphone n'attrapait
 *   qu'un morceau, et le morceau ne voulait rien dire : le verdict sans le
 *   score, ou le score sans le nom.
 *
 *   Pire, deux titres de trois centimètres se suivaient — le verdict à
 *   `font-size-xxl`, puis l'archétype à `font-size-xl` — ce qui mangeait un
 *   tiers du premier écran pour dire deux fois la même chose.
 *
 * CE QU'ELLE GARANTIT
 *   Tout tient dans un cadre unique d'environ 300 px, place en haut, juste sous
 *   la jauge. Une capture prise sans reflechir attrape le logo, la jauge et la
 *   carte entiere — soit le resultat complet, signe.
 *
 * LA SIGNATURE N'EST PAS UNE DECORATION
 *   Une capture d'ecran sans adresse est un rectangle anonyme : celui qui la
 *   recoit ne sait ni d'ou elle vient ni ou aller faire la meme chose. C'est la
 *   seule ligne de la carte dont la fonction est entierement tournee vers
 *   quelqu'un qui n'a pas joue.
 * ======================================================================== */

.carte {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: calc(var(--spacing) * 0.35);
  padding: var(--spacing);
  border: 1px solid var(--blueish-grey);
  border-radius: var(--border-radius);
  /* Un fond legerement distinct du conteneur : sur une capture, c'est lui qui
     dit ou la carte commence et ou elle finit. */
  background-color: rgba(43, 41, 48, 0.35);
  text-align: center;
}


.carte-verdict {
  margin: 0;
  color: var(--white);
  font-size: calc(var(--font-size-s) * 0.9);
  letter-spacing: 0.06em;
  text-transform: uppercase;
  opacity: 0.75;
}

.carte-nom {
  margin: 0;
}

/*
 * Le titre de la carte. `clamp` plutot qu'une taille fixe : « LE DONNEUR DE
 * LECONS » fait deux fois la longueur de « LE CROISE », et une taille unique
 * obligeait le plus long a passer sur trois lignes pendant que le plus court
 * flottait au milieu du vide.
 */
.client-container .game-wrapper .finish-block .carte-nom h3 {
  margin: 0;
  font-size: clamp(1.35rem, 7vw, 1.9rem);
  font-weight: bold;
  line-height: 1.05;
  text-transform: uppercase;
  /* Deux lignes de longueurs voisines plutot qu'une longue et un mot orphelin.
     Non supporte partout, et sans consequence la ou il ne l'est pas. */
  text-wrap: balance;
}

.carte-emoji {
  margin-right: 0.3em;
}

.carte-nom p {
  margin: calc(var(--spacing) * 0.25) 0 0;
  color: var(--grey);
  font-size: calc(var(--font-size-s) * 0.92);
  line-height: 1.25;
  text-wrap: balance;
}

/*
 * Le score, en ligne de base commune avec son unite : un nombre de trois
 * chiffres et un nombre d'un seul doivent poser leur « % red flag » au meme
 * endroit, sinon la carte danse d'un joueur a l'autre.
 */
.carte-score {
  display: flex;
  align-items: baseline;
  justify-content: center;
  gap: 0.3em;
  margin: calc(var(--spacing) * 0.15) 0 0;
  line-height: 1;
}

.carte-score strong {
  color: var(--light-red);
  font-size: var(--font-size-xxl);
  font-weight: bold;
  font-variant-numeric: tabular-nums;
}

.carte-score span {
  color: var(--grey);
  font-size: var(--font-size-m);
  text-transform: uppercase;
}

/* Les trois lignes de contexte : une information par ligne, jamais deux. */
.carte-lignes {
  display: flex;
  flex-direction: column;
  gap: calc(var(--spacing) * 0.15);
  width: 100%;
  margin-top: calc(var(--spacing) * 0.35);
  padding-top: calc(var(--spacing) * 0.5);
  border-top: 1px solid var(--blueish-grey);
}

.carte-lignes p {
  margin: 0;
  color: var(--white);
  font-size: calc(var(--font-size-s) * 0.92);
  line-height: 1.3;
  text-wrap: balance;
}

.carte-lignes strong {
  font-weight: bold;
  text-transform: uppercase;
}

.carte-valeur {
  color: var(--grey);
}

.carte-sep {
  color: var(--grey);
}

.carte-signature {
  margin: calc(var(--spacing) * 0.35) 0 0;
  color: var(--grey);
  font-size: calc(var(--font-size-s) * 0.78);
  letter-spacing: 0.12em;
  opacity: 0.8;
}

/* ---------------------------------------------------------------------------
 * Sous la carte : le detail.
 * ------------------------------------------------------------------------- */

.detail-titre {
  margin: calc(var(--spacing) * 1.25) 0 0;
  padding-top: var(--spacing);
  border-top: 2px solid var(--blueish-grey);
  color: var(--grey);
  font-size: calc(var(--font-size-s) * 0.85);
  letter-spacing: 0.2em;
  text-align: center;
  text-transform: uppercase;
}

/* ---------------------------------------------------------------------------
 * Resserrement general du recap.
 *
 * La feuille de reference espace chaque bloc de `--spacing` (16 a 20 px) et
 * ajoute ses propres marges par-dessus. Cumule sur huit blocs, cela faisait
 * plus de trois cents pixels de vide. Les ecarts sont divises par deux : la
 * page reste aeree, elle tient simplement sur un tiers de hauteur en moins.
 * ------------------------------------------------------------------------- */

.switch-quiz-end .client-container .game-wrapper .finish-block {
  gap: calc(var(--spacing) * 0.5);
}

/*
 * Le mesureur n'est visible que pendant la partie : la reserve de 4.5rem qu'on
 * lui garde en bas du conteneur n'a aucune raison d'exister sur le recap, ou
 * elle ajoutait 72 px de vide sous le dernier bouton.
 */
.switch-quiz-end .main-container .client-container {
  padding-bottom: var(--spacing);
}

/* Le radar n'a plus de titre au-dessus de lui : il n'a plus besoin de marge. */
.client-container .game-wrapper .finish-block .stats-subscores {
  margin-top: calc(var(--spacing) * 0.5);
}

/*
 * Uniquement les titres de section du detail. Ecrite en fourre-tout sur `h3`,
 * cette regle rattrapait aussi le titre de la carte et le ramenait de 26 a
 * 20 px — a specificite egale, la derniere feuille chargee l'emporte, et c'est
 * celle-ci.
 */
.switch-quiz-end .client-container .game-wrapper .finish-block .stats-rare-section h3 {
  margin-bottom: calc(var(--spacing) * 0.35);
  font-size: var(--font-size-m);
}

.switch-quiz-end .client-container .game-wrapper .finish-block .stats-rare-section .subtitle {
  margin-bottom: calc(var(--spacing) * 0.5);
  font-size: calc(var(--font-size-s) * 0.85);
}

/* La reponse decisive : un filet, pas un pave. */
.stats-decisive {
  margin-top: calc(var(--spacing) * 0.5);
  padding: calc(var(--spacing-text-y) * 0.75) var(--spacing);
  font-size: calc(var(--font-size-s) * 0.9);
}

.stats-decisive-quote {
  font-size: var(--font-size-s);
}

.stats-ressource {
  margin-top: calc(var(--spacing) * 0.75);
  padding: calc(var(--spacing) * 0.75);
  font-size: calc(var(--font-size-s) * 0.9);
}

.partage {
  margin-top: calc(var(--spacing) * 0.5);
}

/*
 * Le bouton de partage de la reference reserve deux fois `--spacing` au-dessus
 * de lui. Sous une carte deja delimitee, c'est un trou.
 */
.client-container .game-wrapper .finish-block .share-btn {
  margin-top: var(--spacing);
}

/* ===========================================================================
 * LA JAUGE DE LA CARTE : UNE ECHELLE, PAS UN REMPLISSAGE
 *
 * Elle vivait dans la barre de progression, qui restait ENTIEREMENT ROUGE au
 * recap — toutes les questions etant repondues, toutes les cellules etaient
 * actives. Une echelle uniformement rouge ne situe rien : le curseur pouvait
 * aussi bien marquer 4 que 96, l'oeil n'avait aucun repere.
 *
 * Le degrade rend la position lisible avant meme qu'on lise le nombre. Les
 * trois teintes sont celles de la palette de reference ; le jaune est pose au
 * milieu pour que le centre de l'echelle soit le centre de la barre.
 *
 * Elle est dans la carte et non au-dessus parce que la page d'un resultat
 * partage n'affiche pas la barre de progression du jeu : sans ce demenagement,
 * l'ecran que le plus de monde voit n'avait aucune jauge.
 * ======================================================================== */

.carte-jauge {
  position: relative;
  width: 100%;
  height: 1.2rem;
  margin-top: calc(var(--spacing) * 0.45);
  border-radius: 1000px;
  background: linear-gradient(
    90deg,
    var(--light-green) 0%,
    var(--yellow) 48%,
    var(--orange) 66%,
    var(--light-red) 100%
  );
}

/*
 * Le curseur de la reference, repris tel quel — meme image, meme duree. Il
 * deborde volontairement au-dessus de la piste : c'est ce qui le fait lire
 * comme un marqueur pose dessus et non comme une part remplie.
 */
.carte-jauge-curseur {
  position: absolute;
  top: -0.45rem;
  bottom: 0.3rem;
  width: 26px;
  background-image: url("./img/score-cursor.svg");
  background-repeat: no-repeat;
  background-size: 100% 100%;
  transform: translateX(-50%);
  transition: left 1500ms cubic-bezier(0.86, 0, 0.07, 1);
  filter: drop-shadow(0 0 0.3rem var(--dark-grey));
}

.carte-jauge-gauche,
.carte-jauge-droite {
  position: absolute;
  top: 100%;
  margin-top: 2px;
  color: var(--grey);
  font-size: calc(var(--font-size-s) * 0.72);
  opacity: 0.8;
}

.carte-jauge-gauche { left: 0; }
.carte-jauge-droite { right: 0; }

@media (prefers-reduced-motion: reduce) {
  .carte-jauge-curseur { transition-duration: 1ms; }
}

/* ---------------------------------------------------------------------------
 * LES TROIS DRAPEAUX, DANS LA CARTE
 *
 * Ils avaient ete remplaces par une ligne de texte pour gagner cent pixels.
 * C'etait une mauvaise affaire : « Top 77 % des hommes » se lit, mais ne se
 * VOIT pas, et une carte destinee a la capture doit se comprendre avant d'etre
 * lue. La couleur du drapeau donne la reponse au premier coup d'oeil.
 *
 * La reference les stylise sous `.finish-block .stats-flags`, ce que la carte
 * ne peut pas reutiliser : ses drapeaux sont plus petits, et son texte plus
 * serre. Les regles sont donc reecrites ici, dans le meme idiome.
 * ------------------------------------------------------------------------- */

.carte-flags {
  display: flex;
  justify-content: space-around;
  gap: calc(var(--spacing) * 0.4);
  width: 100%;
  /* Large en haut : les legendes de la jauge debordent sous sa piste. */
  margin: calc(var(--spacing) * 0.9) 0 0;
  padding: 0;
  list-style: none;
}

.carte-flags li {
  display: flex;
  flex: 1;
  flex-direction: column;
  align-items: center;
  text-align: center;
}

/*
 * 2.6rem et non 3.5 comme la reference : trois drapeaux a sa taille d'origine
 * font a eux seuls la moitie de la hauteur de la carte.
 */
.carte-flags .img-flag {
  width: 2.6rem;
  height: auto;
}

.carte-flags .flag-rang {
  margin: calc(var(--spacing) * 0.15) 0 0;
  font-size: calc(var(--font-size-s) * 0.95);
  line-height: 1.1;
}

.carte-flags .flag-rang strong {
  font-weight: bold;
}

/*
 * La legende tient sur UNE ligne, dans n'importe quelle police.
 *
 * La colonne fait quatre-vingts pixels sur un petit telephone. Avec les anciens
 * libelles — « de tout le monde », « des 27 ans et plus » — deux colonnes sur
 * trois passaient a deux lignes pendant que la troisieme restait a une, des que
 * la police condensee de la reference n'etait pas encore chargee. Elle arrive
 * en `font-display: swap` : le premier affichage se fait donc toujours avec le
 * repli du systeme, beaucoup plus large.
 *
 * Les libelles sont desormais courts — « femmes », « 19-22 ans » — et la taille
 * suit la largeur de l'ecran. Le contexte est donne par le drapeau et par le
 * « Top X % » juste au-dessus : il n'y a rien a repeter.
 */
.carte-flags .flag-legende {
  margin: 0;
  color: var(--grey);
  font-size: clamp(0.6rem, 2.6vw, 0.78rem);
  line-height: 1.15;
  text-transform: uppercase;
  white-space: nowrap;
}

.carte-flags .flag-rang {
  white-space: nowrap;
}

/* Le rang repose sur une cohorte mince : la note est sous la rangee. */
.flag-etoile {
  color: var(--yellow);
}

.carte-minces {
  margin: calc(var(--spacing) * 0.3) 0 0;
  color: var(--grey);
  font-size: calc(var(--font-size-s) * 0.72);
  font-style: italic;
  line-height: 1.2;
}
