/* ═══════════════════════════════════════════════════════════════════
   LA PAGE /team/ — le dirigeant du groupe et les deux conseils

   Chargée UNIQUEMENT sur /team/ (voir inc/team.php), comme les feuilles
   de fiche de société. Elle ne pèse sur aucune autre page.

   ⚠️ AUCUNE VALEUR CHROMATIQUE, AUCUN ESPACEMENT EN DUR. Tout passe par
   les variables --fi-*, injectées par le mu-plugin firalis-core depuis
   packages/tokens/tokens.json. La page est achromatique comme le reste
   du site groupe : la couleur appartient aux filiales, et aucune des
   onze personnes listées ici n'en représente une seule.

   Le vocabulaire est celui de /our-companies/ — filets, rangs, relevés
   en mono, .fi-eyebrow, .fi-lede, .fi-body, .fi-rv — parce qu'un
   visiteur qui vient de l'index des sociétés doit reconnaître le
   registre. Ce qui change, c'est la charpente, pas le lettrage.
   ═══════════════════════════════════════════════════════════════════ */

.fi-team {
	/* Deux valeurs de bande, comme les fiches de société et les fiches
	   d'étude. Les sections de personnes prennent la seconde : elles se
	   suivent, et le rythme large des fiches les aurait espacées comme
	   cinq pages différentes. */
	--fi-team-band: clamp(3rem, 5.5vw, 5.5rem);
	--fi-team-band-tight: clamp(2.25rem, 4vw, 3.75rem);
	/* La colonne du portrait. Réglée ici pour être réglée UNE fois : la
	   grille des rangs et celle de l'ouverture changent ensemble.

	   ⚠️ 10/10/2026 — les tailles sont BORNÉES PAR LES SOURCES, pas par
	   le goût (relevé de provenance : voir inc/team.php) :
	   — rang, 88 px (72 px sous 56em) : le plus petit fichier, Dan ATAR,
	     fait 160 px de large, soit 1,8× ; tous les autres dépassent 2× ;
	   — dirigeant, 144 px (104 px sous 56em) : la seule photo de
	     Hüseyin FIRAT fait 208 px utiles une fois recadrée en portrait,
	     soit 1,44×. L'ancien clamp(9rem, 22vw, 15rem) montait à 240 px à
	     1440 : le portrait y était AGRANDI (0,87×) et se lisait flou sur
	     tout écran récent. Ne pas l'élargir sans un fichier plus grand. */
	--fi-team-photo: 5.5rem;
	--fi-team-photo-lead: 9rem;
	/* Rapport d'un portrait : 4/5, celui du rôle R2 de docs/55-plan-images.md
	   et de la liste de prise de vue envoyée au client. Il valait 1:1.3
	   tant qu'on pensait reprendre les fichiers DÉJÀ recadrés de
	   firalis.com ; les portraits posés le 10/10 sont recadrés à 4/5 depuis
	   les ORIGINAUX, visage cadré au même endroit sur les onze. */
	--fi-team-photo-ar: 4 / 5;
	background: var(--fi-color-surface);
}

/* Les mêmes variables, réduites sous 56em : toute règle qui les lit suit
   d'elle-même, sans redéclarer une seule largeur. */
@media (max-width: 55.99em) {
	.fi-team {
		--fi-team-photo: 4.5rem;
		--fi-team-photo-lead: 6.5rem;
	}
}

/* WordPress pose une marge haute sur tout bloc frère : elle décale les bandes
   les unes par rapport aux autres et casse les filets de séparation. */
.fi-team > * {
	margin-block: 0;
}

/* ── L'ouverture ─────────────────────────────────────────────────────
   La bande qui reçoit le fond « wash » : c'est la première bande pleine
   largeur du contenu, et inc/wash.php y glisse le canvas. L'enveloppe
   .fi-team est exclue de l'injection pour cette raison — sans quoi le
   halo s'étirerait sur toute la hauteur de la page.

   Le slug « team » n'est PAS dans la table explicite de
   firalis_wash_figure() : il tombe sur le hachage, qui lui donne la
   figure 2 (le nuage). Vérifié le 07/09 — /about/ prend la 1 (ruban) et
   /what-we-offer/ la 4 (coins), ses deux voisines dans le menu. Aucune
   collision, donc rien à inscrire : la table sert à corriger un doublon
   gênant, pas à tout décider.
   ─────────────────────────────────────────────────────────────────── */

.fi-team__open {
	position: relative;
	padding-block: clamp(3rem, 6vw, 5.5rem) 0;
}

.fi-team__opengrid {
	display: grid;
	gap: clamp(1.5rem, 3vw, 3rem);
	align-items: start;
	padding-block-end: clamp(2rem, 4vw, 3.25rem);
}

@media (min-width: 56em) {
	.fi-team__opengrid {
		grid-template-columns: minmax(0, 1.25fr) minmax(0, 0.75fr);
		gap: clamp(2.5rem, 5vw, 4.5rem);
	}
}

.fi-team__opengrid > * {
	margin-block-start: 0;
}

.fi-team__opengrid > .fi-lede {
	margin-block: 0;
	max-inline-size: 52ch;
}

/* Même parade que .fi-cop__h1, .fi-study__h1 et .fi-hero__content :
   WordPress force « margin-left: auto !important » sur les enfants directs
   d'une mise en page « constrained », et tout enfant plus étroit que le
   conteneur s'y retrouve CENTRÉ. Le décalage vaut la DEMI-MARGE du
   conteneur, pas zéro — à zéro le titre se colle au bord de la bande. */
.fi-team__h1 {
	margin-block: 0 clamp(1.5rem, 2.5vw, 2.25rem);
	margin-inline-start: max(0px, calc((100% - var(--fi-container-max)) / 2)) !important;
	margin-inline-end: auto !important;
	max-inline-size: 20ch;
	font-size: clamp(2.4rem, 1rem + 4.4vw, 4.4rem);
	line-height: 1.01;
	letter-spacing: -0.045em;
	color: var(--fi-color-ink);
}

.fi-team__aside > * {
	margin-block-start: 0;
}

.fi-team__aside .fi-lede,
.fi-team__aside .fi-body {
	margin-block: 0;
	max-inline-size: 42ch;
}

/* ── Les sections ────────────────────────────────────────────────────
   Cinq déclarées, trois rendues au 07/09 : « Management team » et
   « Operational team » sont vides et ne produisent pas un octet. Rien
   ici ne doit donc supposer un nombre de sections — pas de
   :first-child, pas de :nth-child, pas de compteur.
   ─────────────────────────────────────────────────────────────────── */

.fi-team__band {
	padding-block: 0 var(--fi-team-band);
}

.fi-team__section {
	padding-block: var(--fi-team-band-tight);
	border-block-start: 1px solid var(--fi-color-line);
}

.fi-team__h2 {
	margin-block: 0 var(--fi-space-s);
	font-size: clamp(1.75rem, 1.1rem + 2.4vw, 2.9rem);
	line-height: 1.07;
	letter-spacing: -0.035em;
	color: var(--fi-color-ink);
	text-wrap: balance;
}

/* La précision de fonctionnement d'un conseil — « cinq membres, le maximum
   légal, réunis au moins une fois par trimestre ». Elle se lit comme une
   note de bas de titre, pas comme un chapô : c'est une règle de
   composition, pas un argument. */
.fi-team__note {
	margin-block: 0 clamp(1.5rem, 3vw, 2.5rem);
	max-inline-size: 52ch;
	font-size: var(--fi-size-step-0);
	line-height: 1.6;
	color: var(--fi-color-muted);
	text-wrap: pretty;
}

/* ── Le dirigeant ────────────────────────────────────────────────────
   Un gabarit à part et non un rang plus grand : un rang porte trois
   choses courtes qui se lisent en balayant, une biographie de soixante
   mots en ferait un article. Trois colonnes quand le portrait existe —
   l'état posé depuis le 10/10 —, deux sinon.
   ─────────────────────────────────────────────────────────────────── */

/* ⚠️ 14/09 — En colonne unique, l'écart entre le rôle et la biographie était
   COMPTÉ DEUX FOIS : la marge basse du rôle (1.5rem) plus l'écart de la grille
   (1rem à 1.2rem), 40px mesurés à 390 et 43 à 768, dix fois les 4px qui séparent
   le nom de son rôle. Un seul écart désormais, celui de la grille, à 1.5rem : la
   tête reste nettement détachée de la biographie, sans flotter au-dessus. Sur
   deux colonnes, rien ne change (écart de 2rem, voir plus bas). */
.fi-team__lead {
	display: grid;
	gap: var(--fi-space-m);
	align-items: start;
}

/* Les MÊMES proportions qu'un rang de conseil, et ce n'est pas une
   coquetterie : sans elles, le nom du dirigeant et les cinq noms du conseil
   qui le suit ne commencent pas à la même abscisse, et la première section se
   lit comme une exception avant que les deux autres n'installent un tableau.
   Mesuré à 1440 avant correction : la biographie mourait au milieu de la page
   et la moitié droite restait vide sur toute la hauteur de la section. */
/* Sous 56em, avec portrait : le portrait et la tête (nom, rôle) côte à
   côte, la biographie en dessous sur toute la largeur. Empilés, le
   portrait seul occupait le premier écran du téléphone. */
@media (max-width: 55.99em) {
	.fi-team__lead--photo {
		grid-template-columns: var(--fi-team-photo-lead) minmax(0, 1fr);
		column-gap: var(--fi-space-s);
	}

	.fi-team__lead--photo > .fi-team__leadhead {
		align-self: center;
	}

	.fi-team__lead--photo > .fi-team__leadbody {
		grid-column: 1 / -1;
	}
}

@media (min-width: 56em) {
	.fi-team__lead {
		grid-template-columns: minmax(0, 0.85fr) minmax(0, 1.15fr);
		gap: var(--fi-space-l);
	}

	/* ⚠️ La troisième colonne n'est pas une fraction : c'est la LARGEUR
	   EXACTE de la colonne rôle/affiliation d'un rang à portrait
	   (1.15 / 2 de ce qui reste après le portrait de rang et les deux
	   écarts). Le portrait du dirigeant est plus large que celui d'un rang
	   — 144 contre 88 px — et avec trois fractions la biographie aurait
	   commencé 28 px à gauche des rôles du conseil qui la suit. Ainsi les
	   portraits partagent le bord gauche, la biographie et les rôles le
	   même axe ; seul le nom du dirigeant se décale, et il est seul dans
	   sa section. Vrai tant que TOUS les rangs ont un portrait — c'est
	   l'état posé le 10/10, et la règle de cohérence de inc/team.php. */
	.fi-team__lead--photo {
		grid-template-columns:
			var(--fi-team-photo-lead)
			minmax(0, 1fr)
			calc((100% - var(--fi-team-photo) - 2 * var(--fi-space-l)) * 0.575);
	}
}

.fi-team__leadhead > *,
.fi-team__leadbody > * {
	margin-block-start: 0;
}

.fi-team__leadbody .fi-body {
	max-inline-size: 62ch;
}

.fi-team__leadbody .fi-body:last-child {
	margin-block-end: 0;
}

/* ── Les rangs ───────────────────────────────────────────────────────
   En rangs et non en colonnes, pour la même raison que l'index des
   sociétés : un rang a la place de porter, à côté du nom, le rôle et
   l'affiliation — les deux choses qui disent ce qu'une personne fait
   là. Sept membres en colonnes de 200 px n'auraient porté que le nom.
   ─────────────────────────────────────────────────────────────────── */

.fi-team__list {
	margin: 0;
	padding: 0;
	list-style: none;
	border-block-start: 1px solid var(--fi-color-line);
}

/* Le filet du DERNIER rang ferait doublon avec celui de la section suivante :
   deux traits séparés par la seule respiration de bande, à chaque couture. Le
   filet de section suffit, et c'est lui qui doit rester — il sépare des
   sections, pas des personnes. Le sélecteur ne suppose aucun NOMBRE de rangs :
   il vise le dernier, quel qu'il soit. */
.fi-team__list > :last-child {
	border-block-end: 0;
}

.fi-team__person {
	display: grid;
	gap: var(--fi-space-2xs) var(--fi-space-m);
	align-items: start;
	padding-block: clamp(1rem, 2vw, 1.5rem);
	border-block-end: 1px solid var(--fi-color-line);
}

/* Deux gabarits, et le second n'existe que si un portrait est là. La
   classe est posée par le PHP (voir firalis_team_person) et non déduite
   par une règle « :has() » : la grille change de gabarit selon un FICHIER
   sur le disque, et le CSS ne peut pas voir un fichier — il ne verrait
   que sa conséquence, ce qui rend la règle vraie par accident. */

/* Sous 56em : le portrait à gauche, le nom et les relevés à droite, calés
   en tête. Empilé au-dessus du nom, un portrait de 88 px allongeait la page
   de 40 % à 390 (mesuré le 10/10 : 5 868 px contre 4 188 sans photo) et
   faisait de chaque rang une carte. */
@media (max-width: 55.99em) {
	/* `auto 1fr` : le portrait couvre les deux lignes, et sa hauteur en trop
	   va à la SECONDE. Deux lignes `auto` se la partageraient, et le rôle
	   décrocherait du nom de la moitié de l'écart. */
	.fi-team__person--photo {
		grid-template-columns: var(--fi-team-photo) minmax(0, 1fr);
		grid-template-rows: auto 1fr;
		column-gap: var(--fi-space-s);
	}

	.fi-team__person--photo > .fi-team__photo {
		grid-row: 1 / span 2;
	}

	.fi-team__person--photo > :not(.fi-team__photo) {
		grid-column: 2;
	}
}

@media (min-width: 56em) {
	.fi-team__person {
		grid-template-columns: minmax(0, 0.85fr) minmax(0, 1.15fr);
		gap: var(--fi-space-l);
		align-items: baseline;
	}

	.fi-team__person--photo {
		grid-template-columns: var(--fi-team-photo) minmax(0, 0.85fr) minmax(0, 1.15fr);
		align-items: center;
	}
}

.fi-team__name {
	margin: 0;
	font-size: var(--fi-size-step-1);
	font-weight: 600;
	letter-spacing: -0.02em;
	line-height: 1.2;
	color: var(--fi-color-ink);
	text-wrap: pretty;
}

/* Le nom du dirigeant ouvre la page : il prend le rang d'un titre de
   section sans en être un — c'est un `<p>`, il n'introduit aucune
   sous-section. Voir l'en-tête de inc/team.php : treize noms en `h3`
   auraient fait treize faux titres dans le plan du document. */
.fi-team__name--lead {
	margin-block-end: var(--fi-space-3xs);
	font-size: var(--fi-size-step-2);
	letter-spacing: -0.025em;
}

.fi-team__meta {
	display: grid;
	gap: 0.3rem;
}

/* Le rôle en mono : c'est un intitulé de fonction, pas une phrase. Le même
   registre que les clés de relevé du site, mais en casse normale — sept
   « Professor of cardiology · Editor-in-Chief, European Heart Journal » en
   capitales feraient sept pavés illisibles. */
.fi-team__role {
	margin: 0;
	font-family: var(--fi-font-mono);
	/* 15px de PLANCHER, et il a été mesuré : à 0.875rem (14px) `./scripts/audit.sh`
	   remonte un MAJEUR « readable-font-size » aux quatre largeurs sur
	   « Professor of cardiology · Editor-in-Chief, European Heart Journal ».
	   C'est une valeur, pas un libellé — une clé de relevé descend à 0.625rem
	   parce qu'elle se devine, un intitulé de fonction se lit. Cinquième
	   occurrence de la même correction dans ce projet. */
	font-size: 0.9375rem;
	line-height: 1.45;
	color: var(--fi-color-text);
	text-wrap: pretty;
}

/* Sous le nom du dirigeant, le rôle ferme la colonne de gauche. Sa marge basse
   d'une colonne est retirée le 14/09 : elle s'ajoutait à l'écart de la grille
   `.fi-team__lead`, qui porte seul la réserve désormais. */

.fi-team__affil {
	margin: 0;
	max-inline-size: 52ch;
	font-size: var(--fi-size-step-0);
	line-height: 1.5;
	color: var(--fi-color-muted);
	text-wrap: pretty;
}

/* ── La bande sombre ─────────────────────────────────────────────────
   09/10/2026 — revue client du 08/10 (GP-Team) : « mettre le bloc
   Supervisory Board dans une autre couleur pour rendre la page plus
   attirante ». La section est désignée par le jeton `tone: "dark"` de
   team.json, pas par son nom.

   ⚠️ LE NAVY DU SITE, PAS UNE COULEUR. C'est la bande de Momentum et du
   manifeste de l'accueil : même fond, même filet d'accent en tête, mêmes
   tons de texte. La page reste achromatique au sens de l'en-tête de
   cette feuille : aucune des cinq couleurs de société n'y entre, elles
   désignent une filiale et ce conseil n'en représente aucune.

   Contrastes sur --fi-color-ink-2 : on-dark-strong pour le titre et les
   noms, accent-on-dark pour les rôles en mono (le registre des relevés
   de Momentum), on-dark-muted pour la note et les affiliations.

   La section sort des 1240px par `alignfull` (voir inc/team.php) ; son
   contenu y revient par .fi-team__sectionin.
   ─────────────────────────────────────────────────────────────────── */

.fi-team__section--dark {
	position: relative;
	padding-block: var(--fi-team-band);
	border-block-start: 0;
	background: var(--fi-color-ink-2);
	color: var(--fi-color-on-dark);
}

/* Le filet de .fi-momentum::before, repris tel quel : les bandes sombres
   du site se répondent. */
.fi-team__section--dark::before {
	content: "";
	position: absolute;
	inset-block-start: 0;
	inset-inline: 0;
	block-size: 2px;
	background: linear-gradient(
		to right,
		var(--fi-color-accent-on-dark),
		color-mix(in srgb, var(--fi-color-accent-on-dark) 12%, transparent)
	);
}

.fi-team__sectionin {
	max-inline-size: var(--fi-container-max);
	margin-inline: auto;
}

/* Le bord de la bande sépare déjà : le filet de la section suivante
   ferait un trait gris collé sous le navy. */
.fi-team__section--dark + .fi-team__section {
	border-block-start: 0;
}

.fi-team__section--dark .fi-team__h2,
.fi-team__section--dark .fi-team__name {
	color: var(--fi-color-on-dark-strong);
}

.fi-team__section--dark .fi-team__note,
.fi-team__section--dark .fi-team__affil {
	color: var(--fi-color-on-dark-muted);
}

.fi-team__section--dark .fi-team__role {
	color: var(--fi-color-accent-on-dark);
}

.fi-team__section--dark .fi-team__list,
.fi-team__section--dark .fi-team__person {
	border-color: var(--fi-color-line-dark);
}

/* ── Les portraits ───────────────────────────────────────────────────
   ⚠️ 10/10/2026 — LES ONZE SONT POSÉS (assets/team/, WebP 4/5). Livrée
   sans photographies le 07/09 (option C) : les fichiers de firalis.com
   relevés alors étaient les VIGNETTES recadrées par l'hébergeur. Leurs
   ORIGINAUX, retrouvés sur le même hébergement, suffisent pour dix
   personnes sur onze à la taille de rang ; le onzième, le Pr Dubois
   (77 × 98 à l'origine), vient de Sorbonne Université. Provenance et
   réserves : inc/team.php, firalis_team_photo().

   Tout ou rien : une grille où la moitié des rangs a un visage se lit
   comme une liste incomplète. Si un portrait doit être retiré, retirer
   les onze, ou en fournir un autre — pas un trou.
   ─────────────────────────────────────────────────────────────────── */

.fi-team__photo {
	margin: 0;
	/* ⚠️ Largeur EXPLICITE, et ce n'est pas une précaution de style. L'image
	   est en `loading="lazy"` : tant qu'elle n'est pas décodée, sa taille
	   intrinsèque est 0 × 0, et une figure qui se dimensionne sur son
	   contenu se dimensionne alors sur rien. Mesuré le 01/09 sur la fiche
	   BioCellvia : figure à 0px au chargement, puis saut à 432 × 243 à
	   l'arrivée de l'image. La balise ne porte ni `width` ni `height` —
	   une hauteur explicite l'emporterait sur `aspect-ratio`. */
	inline-size: 100%;
	max-inline-size: var(--fi-team-photo);
	overflow: clip;
	border-radius: var(--fi-radius-s);
	background: var(--fi-color-surface-alt);
}

.fi-team__lead .fi-team__photo {
	max-inline-size: var(--fi-team-photo-lead);
}

.fi-team__photo img {
	display: block;
	inline-size: 100%;
	/* `block-size: auto` AVANT le rapport : sans lui, une hauteur d'attribut
	   rendrait `aspect-ratio` inopérant. La balise n'en porte pas, mais la
	   règle protège le jour où quelqu'un en remettra une. */
	block-size: auto;
	aspect-ratio: var(--fi-team-photo-ar);
	object-fit: cover;
	/* Un portrait se cadre HAUT : centré, un recadrage en 1:1.3 coupe le
	   front et garde les épaules. */
	object-position: 50% 22%;

	/* ⚠️ LE NOIR ET BLANC — demande client, traitée par FILTRE et non par
	   désaturation des fichiers.

	   Le filtre laisse le fichier intact : le noir et blanc reste un choix
	   de charte, révisable d'une ligne, et non une transformation
	   irréversible d'un fichier fourni par le client. C'est déjà le
	   raisonnement de `.fi-statement__plate img`
	   (`brightness(0.88) saturate(0.85)`) sur la photo du manifeste.

	   Sa limite est connue et assumée : l'image TÉLÉCHARGÉE, elle, reste en
	   couleur — un lecteur qui l'ouvre dans un onglet la verra telle qu'elle
	   est. C'est le prix de la réversibilité.

	   Le relèvement de contraste n'est pas cosmétique. Douze photographies
	   de douze provenances, prises sur vingt ans, n'ont ni la même balance
	   des blancs ni le même arrière-plan : en couleur la grille se lit comme
	   un collage, en gris elle se tient — mais des gris tirés de sources
	   inégales sortent plats. 1.06 les redresse sans creuser les noirs.

	   ⚠️ PAS DE RETOUR À LA COULEUR AU SURVOL. Ce n'est pas demandé, et ça
	   ferait d'une grille informative un objet interactif — un geste que le
	   projet a écarté ailleurs. Il n'y a rien à survoler ici : aucun rang de
	   cette page n'est un lien. */
	filter: var(--fi-photo-tone-portrait);
}
