/* ══════════════════════════════════════════════════════════════════════════
   tigrebois.fr — css/pages/accueil.css
   Feuille propre à la page d'accueil. Elle ne définit AUCUNE couleur en dur :
   tout vient de css/tokens.css. Elle ne redéfinit aucun composant partagé,
   elle les met en scène.
   Propriétaire du fichier : agent Accueil.
   Sommaire
     1. Hero
     2. Barre de saison collante
     3. La saison en chiffres · panneau d'annonce
     4. Blocs de classement · carte d'attente
     5. Récompenses
     6. Carrousel des tournois
     7. Porte d'entrée Hall of Fame
     8. Transitions de saison et mouvement réduit
   ══════════════════════════════════════════════════════════════════════════ */


/* ══ 1. HERO ══════════════════════════════════════════════════════════════
   Photo quasi carrée (1600×1629) : object-fit cover, cadrage centre-haut,
   hauteur bornée pour que le sujet reste bien placé du mobile au grand écran.
   ═══════════════════════════════════════════════════════════════════════ */

.tb-hero{
  display:flex;
  align-items:center;
  min-height:min(88svh, 780px);
  background-color:var(--tb-vert-profond);
  color:var(--tb-creme);
}

/* Couche photo — enfant direct de .tb-parallaxe, pilotée par js/motion.js. */
.tb-hero__photo img{
  object-position:50% 30%;
}

/* Voile vert dégradé : lisibilité du texte, jamais d'aplat opaque. */
.tb-hero__voile{
  position:absolute;
  inset:0;
  z-index:0;
  background-image:var(--tb-voile-vignette), var(--tb-voile-vert);
  pointer-events:none;
}

.tb-hero__contenu{
  width:100%;
}

.tb-hero__inner{
  display:flex;
  flex-direction:column;
  align-items:center;
  gap:var(--tb-e4);
  padding-block:calc(var(--tb-e10) + var(--tb-e6)) var(--tb-e11);
  text-align:center;
}

.tb-hero__logo{
  width:clamp(78px, 11vw, 124px);
  height:auto;
  filter:drop-shadow(0 10px 24px rgb(var(--tb-vert-profond-rvb) / .55));
}

.tb-hero__surtitre{
  margin:0;
  font-family:var(--tb-font-texte);
  font-size:var(--tb-t-micro);
  font-weight:600;
  letter-spacing:.22em;
  text-transform:uppercase;
  color:var(--tb-or-clair);
}

.tb-hero__titre{
  margin:0;
  font-size:var(--tb-t-display);
  line-height:.94;
  color:var(--tb-creme);
  text-shadow:0 6px 28px rgb(var(--tb-vert-profond-rvb) / .70);
}

/* Les mots découpés par [data-titre-cascade] ne doivent pas se coller. */
.tb-hero__titre .tb-mot{ padding-inline:.04em; }

.tb-hero__accroche{
  max-width:46ch;
  margin:0;
  font-size:clamp(var(--tb-t-corps), .98rem + .35vw, 1.25rem);
  line-height:1.55;
  color:var(--tb-creme-70);
}

/* Pastille de la saison en cours. */
.tb-hero__pastille{
  display:inline-flex;
  align-items:center;
  gap:var(--tb-e2);
  margin:var(--tb-e2) 0 0;
  padding:var(--tb-e2) var(--tb-e5);
  min-height:38px;
  border:1px solid rgb(var(--tb-or-rvb) / .55);
  border-radius:var(--tb-rond);
  background:rgb(var(--tb-vert-profond-rvb) / .48);
  font-size:var(--tb-t-petit);
  font-weight:600;
  letter-spacing:.02em;
  color:var(--tb-creme);
}
@supports ((-webkit-backdrop-filter:blur(2px)) or (backdrop-filter:blur(2px))){
  .tb-hero__pastille{
    -webkit-backdrop-filter:blur(10px);
    backdrop-filter:blur(10px);
  }
}
.tb-hero__pastille[data-etat='chargement']{ display:none; }

.tb-hero__point{
  width:8px;
  height:8px;
  border-radius:var(--tb-rond);
  background:var(--tb-or-clair);
  box-shadow:0 0 0 0 rgb(var(--tb-or-rvb) / .55);
}
.tb-hero__pastille[data-encours='oui'] .tb-hero__point{
  background:var(--tb-vert-clair);
  animation:tb-hero-pouls 2.4s var(--tb-ease) infinite;
}
@keyframes tb-hero-pouls{
  0%   { box-shadow:0 0 0 0   rgb(var(--tb-vert-clair-rvb) / .55); }
  70%  { box-shadow:0 0 0 9px rgb(var(--tb-vert-clair-rvb) / 0); }
  100% { box-shadow:0 0 0 0   rgb(var(--tb-vert-clair-rvb) / 0); }
}

.tb-hero__saison-sep{ color:var(--tb-creme-70); }
.tb-hero__saison-statut{ color:var(--tb-or-clair); }

.tb-hero__actions{
  display:flex;
  flex-wrap:wrap;
  justify-content:center;
  gap:var(--tb-e3);
  margin-top:var(--tb-e4);
}
.tb-hero__actions .tb-bouton{ text-decoration:none; }

/* Bouton fantôme posé sur la photo : il doit rester lisible. */
.tb-hero__lien-secondaire{
  color:var(--tb-creme);
  border-color:rgb(var(--tb-creme-rvb) / .40);
  background:rgb(var(--tb-vert-profond-rvb) / .34);
}
.tb-hero__lien-secondaire:hover{
  color:var(--tb-creme);
  background:rgb(var(--tb-vert-profond-rvb) / .60);
  border-color:var(--tb-or-clair);
}

/* Fondu du bas du hero vers l'ivoire de la barre de saison. */
.tb-hero__fondu{
  position:absolute;
  inset-inline:0;
  bottom:0;
  z-index:2;
  height:var(--tb-e9);
  background-image:linear-gradient(to top,
      rgb(var(--tb-ivoire-rvb) / 1) 0%,
      rgb(var(--tb-ivoire-rvb) / .72) 34%,
      rgb(var(--tb-ivoire-rvb) / .28) 66%,
      rgb(var(--tb-ivoire-rvb) / 0) 100%);
  pointer-events:none;
}


/* ══ 2. BARRE DE SAISON COLLANTE ══════════════════════════════════════════
   Elle se colle juste sous l'en-tête densifié et pilote les trois classements.
   ═══════════════════════════════════════════════════════════════════════ */

.tb-zone-saison{
  position:relative;
  background-color:var(--tb-ivoire);
}

.tb-barre-saison{
  position:sticky;
  top:var(--tb-header-h-dense);
  z-index:var(--tb-z-collant);
  border-bottom:1px solid var(--tb-ligne);
  background:var(--tb-verre-dense);
}
@supports ((-webkit-backdrop-filter:blur(2px)) or (backdrop-filter:blur(2px))){
  .tb-barre-saison{
    background:var(--tb-verre);
    -webkit-backdrop-filter:var(--tb-flou);
    backdrop-filter:var(--tb-flou);
  }
}

.tb-barre-saison__inner{
  display:flex;
  flex-wrap:wrap;
  align-items:center;
  justify-content:space-between;
  gap:var(--tb-e3) var(--tb-e7);
  padding-block:var(--tb-e3);
}

.tb-barre-saison__choix{
  display:flex;
  flex-wrap:wrap;
  align-items:center;
  gap:var(--tb-e3) var(--tb-e5);
  min-width:0;
  /* Hauteur réservée : la barre ne saute pas quand le sélecteur arrive. */
  min-height:50px;
}

.tb-barre-saison__aide{
  max-width:34ch;
  margin:0;
  font-size:var(--tb-t-micro);
  line-height:1.45;
  color:var(--tb-encre-45);
}

.tb-barre-saison__synchro{ min-width:0; }
.tb-barre-saison__synchro .tb-synchro{ font-size:var(--tb-t-micro); }

/* Sous 900 px, la barre se resserre : l'aide et le libellé du sélecteur
   disparaissent à l'œil (le libellé reste lu par les lecteurs d'écran, il sert
   d'aria-labelledby au groupe de boutons). Le sélecteur et le bandeau tiennent
   alors sur une seule ligne. */
@media (max-width:900px){
  .tb-barre-saison__aide{ display:none; }
  .tb-barre-saison__inner{ padding-block:var(--tb-e2); gap:var(--tb-e2) var(--tb-e5); }
  .tb-barre-saison__choix .tb-saisons__libelle{
    position:absolute;
    width:1px;
    height:1px;
    overflow:hidden;
    clip-path:inset(50%);
  }
}

/* Sous 768 px, la barre reste collante toute la page : elle doit donc coûter
   le moins de hauteur possible. Le bandeau perd son cadre et son libellé de
   bouton — l'icône reste une cible tactile pleine, et le pied de page conserve
   le bandeau complet. */
@media (max-width:767.98px){
  .tb-barre-saison__inner{ gap:var(--tb-e2); }
  .tb-barre-saison__choix{ flex:1 1 100%; }
  .tb-barre-saison__synchro{ flex:1 1 100%; }
  .tb-barre-saison__synchro .tb-synchro{
    flex-wrap:nowrap;
    padding:0;
    border:0;
    background:none;
    font-size:var(--tb-t-micro);
  }
  .tb-barre-saison__synchro .tb-synchro__texte{
    overflow:hidden;
    text-overflow:ellipsis;
    white-space:nowrap;
  }
  /* Le bouton redevient une pastille carrée de 44 px — cible tactile pleine,
     libellé réservé aux lecteurs d'écran. */
  .tb-barre-saison__synchro .tb-synchro__bouton{
    flex:0 0 44px;
    width:44px;
    min-width:44px;
    min-height:44px;
    margin-left:auto;
    padding:0;
    justify-content:center;
  }
  .tb-barre-saison__synchro .tb-synchro__bouton-texte{
    position:absolute;
    width:1px;
    height:1px;
    overflow:hidden;
    clip-path:inset(50%);
  }
}

/* La première section de la zone n'a pas besoin d'ombre d'entrée :
   la barre collante fait déjà la séparation. */
.tb-zone-saison > .tb-section:first-of-type::before{ display:none; }

/* La section qui suit la zone retrouve la transition douce du site. */
.tb-zone-saison + .tb-section::before{
  content:'';
  position:absolute;
  inset-inline:0;
  top:0;
  height:var(--tb-e10);
  background-image:var(--tb-ombre-entree-sombre);
  pointer-events:none;
  z-index:0;
}


/* ══ 3. LA SAISON EN CHIFFRES ═════════════════════════════════════════════ */

.tb-chiffres{
  display:grid;
  grid-template-columns:repeat(2,minmax(0,1fr));
  gap:var(--tb-e3);
}
@media (min-width:560px){
  .tb-chiffres{ gap:var(--tb-e5); }
}
@media (min-width:1024px){
  .tb-chiffres{ grid-template-columns:repeat(4,minmax(0,1fr)); gap:var(--tb-e6); }
}

.tb-chiffre{
  position:relative;
  display:flex;
  flex-direction:column;
  gap:var(--tb-e2);
  min-height:100%;
  padding:var(--tb-e5) var(--tb-e4);
  border:1px solid var(--tb-ligne);
  border-radius:var(--tb-r3);
  background:var(--tb-blanc);
  box-shadow:var(--tb-ombre1);
  overflow:hidden;
  transition:box-shadow var(--tb-d2) var(--tb-ease),
             transform var(--tb-d2) var(--tb-ease);
}
.tb-chiffre::before{
  content:'';
  position:absolute;
  inset-inline:0;
  top:0;
  height:3px;
  background:var(--tb-vert-clair);
  opacity:.55;
}
.tb-chiffre:hover{ box-shadow:var(--tb-ombre2); transform:translateY(-2px); }

.tb-chiffre--champion::before{ background:var(--tb-or); opacity:1; }
@media (min-width:560px){
  .tb-chiffre{ padding:var(--tb-e6); }
}

.tb-chiffre__libelle{
  margin:0;
  font-size:var(--tb-t-micro);
  font-weight:600;
  letter-spacing:.12em;
  text-transform:uppercase;
  color:var(--tb-encre-45);
}

.tb-chiffre__valeur{
  margin:0;
  font-family:var(--tb-font-titre);
  font-size:clamp(2.4rem, 1.6rem + 2.4vw, 3.4rem);
  font-variation-settings:'wght' 600;
  font-variant-numeric:tabular-nums;
  line-height:1;
  color:var(--tb-vert);
}

.tb-chiffre__precision{
  margin:0;
  font-size:var(--tb-t-petit);
  line-height:1.45;
  color:var(--tb-encre-70);
}

.tb-chiffre__joueur{
  display:flex;
  align-items:center;
  gap:var(--tb-e3);
  margin-top:var(--tb-e1);
}
.tb-chiffre__joueur-textes{ min-width:0; }
.tb-chiffre__avatar{ flex:0 0 auto; display:inline-flex; line-height:0; }
.tb-chiffre__avatar svg{ display:block; }

.tb-chiffre__nom{
  margin:0;
  font-family:var(--tb-font-titre);
  font-size:var(--tb-t-h3);
  font-variation-settings:'wght' 600;
  line-height:1.15;
  color:var(--tb-vert);
  overflow-wrap:anywhere;
}

.tb-chiffre__attente{
  display:flex;
  align-items:center;
  gap:var(--tb-e3);
  margin-top:var(--tb-e1);
}

/* En deux colonnes étroites, le médaillon passe au-dessus du nom : le nom
   garde toute la largeur de la tuile et ne se coupe jamais. */
@media (max-width:559.98px){
  .tb-chiffre__joueur,
  .tb-chiffre__attente{
    flex-direction:column;
    align-items:flex-start;
    gap:var(--tb-e2);
  }
  .tb-chiffre__avatar svg{ width:44px; height:44px; }
}
.tb-chiffre__couronne{ font-size:2rem; line-height:1; filter:grayscale(.4); opacity:.75; }

/* ── Panneau d'annonce : saison en cours encore vierge ─────────────────── */

.tb-annonce-zone:empty{ display:none; }
.tb-annonce-zone{ margin-bottom:var(--tb-e8); }

.tb-annonce{
  display:grid;
  grid-template-columns:auto 1fr;
  align-items:start;
  gap:var(--tb-e4) var(--tb-e5);
  padding:var(--tb-e6);
  border:1px solid rgb(var(--tb-or-rvb) / .30);
  border-radius:var(--tb-r4);
  background:
    radial-gradient(120% 140% at 0% 0%, rgb(var(--tb-or-rvb) / .10) 0%, rgb(var(--tb-or-rvb) / 0) 58%),
    var(--tb-blanc);
  box-shadow:var(--tb-ombre1);
}
@media (min-width:900px){
  .tb-annonce{
    grid-template-columns:auto minmax(0,1fr) auto;
    align-items:center;
    padding:var(--tb-e7) var(--tb-e8);
  }
}

.tb-annonce__embleme{
  font-size:2.2rem;
  line-height:1;
}

.tb-annonce__textes{ min-width:0; }

.tb-annonce__sur{
  margin:0 0 var(--tb-e1);
  font-size:var(--tb-t-micro);
  font-weight:600;
  letter-spacing:.12em;
  text-transform:uppercase;
  color:var(--tb-or);
}
.tb-annonce__titre{
  margin:0 0 var(--tb-e2);
  font-size:var(--tb-t-h3);
  color:var(--tb-vert);
}
.tb-annonce__texte{
  max-width:62ch;
  margin:0;
  font-size:var(--tb-t-petit);
  line-height:1.6;
  color:var(--tb-encre-70);
}

.tb-annonce__actions{
  grid-column:1 / -1;
  display:flex;
  flex-direction:column;
  align-items:flex-start;
  gap:var(--tb-e2);
}
@media (min-width:900px){
  .tb-annonce__actions{
    grid-column:auto;
    align-items:flex-end;
    text-align:right;
  }
}
.tb-annonce__aide{
  margin:0;
  font-size:var(--tb-t-micro);
  color:var(--tb-encre-45);
}


/* ══ 4. BLOCS DE CLASSEMENT ═══════════════════════════════════════════════ */

/* Une ancre ne doit pas atterrir sous l'en-tête ET sous la barre collante :
   on réserve la hauteur des deux. */
.tb-bloc-classement{
  scroll-margin-top:calc(var(--tb-header-h-dense) + var(--tb-e10));
}

/* La marge vit sur le tableau : quand il est masqué (saison sans classement),
   le bloc se referme proprement au lieu de laisser un trou. */
.tb-bloc-classement__table{ margin-top:var(--tb-e9); }
.tb-bloc-classement__table[hidden]{ display:none; }

/* Le cumulé porte le sceau du champion, juste sous son chapô. */
.tb-sceau-champion{
  display:inline-flex;
  align-items:center;
  gap:var(--tb-e2);
  margin:var(--tb-e5) auto 0;
  padding:var(--tb-e2) var(--tb-e5);
  border:1px solid rgb(var(--tb-or-rvb) / .38);
  border-radius:var(--tb-rond);
  background:rgb(var(--tb-or-rvb) / .10);
  font-size:var(--tb-t-petit);
  line-height:1.4;
  color:var(--tb-encre);
  text-align:left;
}
.tb-sceau-champion strong{ color:var(--tb-vert); }
.tb-sceau-champion__icone{ font-size:1.1rem; line-height:1; }

/* ── Carte d'attente : ce qu'on voit quand la saison est encore vierge ─── */

.tb-attente{
  display:flex;
  flex-direction:column;
  align-items:center;
  gap:var(--tb-e3);
  max-width:640px;
  margin-inline:auto;
  padding:var(--tb-e9) var(--tb-e6);
  border:1px dashed var(--tb-ligne-forte);
  border-radius:var(--tb-r4);
  background:
    radial-gradient(90% 120% at 50% 0%, rgb(var(--tb-vert-clair-rvb) / .07) 0%, rgb(var(--tb-vert-clair-rvb) / 0) 62%),
    var(--tb-blanc);
  text-align:center;
}

.tb-attente__icone{ font-size:2.4rem; line-height:1; opacity:.85; }

.tb-attente__titre{
  margin:0;
  font-family:var(--tb-font-titre);
  font-size:var(--tb-t-h3);
  font-variation-settings:'wght' 600;
  color:var(--tb-vert);
}

.tb-attente__texte{
  max-width:44ch;
  margin:0;
  font-size:var(--tb-t-petit);
  line-height:1.6;
  color:var(--tb-encre-70);
}

.tb-attente__bouton{ margin-top:var(--tb-e2); }

/* Variante sombre, posée sur la section verte du collectif. */
.tb-attente--sombre{
  border-color:var(--tb-ligne-claire);
  background:
    radial-gradient(90% 120% at 50% 0%, rgb(var(--tb-creme-rvb) / .08) 0%, rgb(var(--tb-creme-rvb) / 0) 62%),
    rgb(var(--tb-vert-profond-rvb) / .42);
}
.tb-attente--sombre .tb-attente__titre{ color:var(--tb-or-clair); }
.tb-attente--sombre .tb-attente__texte{ color:var(--tb-creme-70); }
.tb-attente--sombre .tb-bouton--fantome{
  color:var(--tb-creme);
  border-color:var(--tb-ligne-claire);
}
.tb-attente--sombre .tb-bouton--fantome:hover{
  background:rgb(var(--tb-creme-rvb) / .10);
  border-color:var(--tb-or-clair);
}


/* ══ 5. RÉCOMPENSES ═══════════════════════════════════════════════════════ */

.tb-recompenses{
  background-image:var(--tb-degrade-tapis);
}

.tb-recompenses__grille{
  display:grid;
  grid-template-columns:1fr;
  gap:var(--tb-e8);
}
@media (min-width:1024px){
  .tb-recompenses__grille{
    grid-template-columns:minmax(0,5fr) minmax(0,7fr);
    gap:var(--tb-e10);
    align-items:start;
  }
}

.tb-recompenses__photo{
  max-width:400px;
  margin:0 auto;
}
@media (min-width:1024px){
  .tb-recompenses__photo{
    position:sticky;
    top:calc(var(--tb-header-h-dense) + var(--tb-e6));
    margin:0;
  }
}
.tb-recompenses__photo img{
  display:block;
  width:100%;
  height:auto;
  border-radius:var(--tb-r4);
  border:1px solid rgb(var(--tb-or-rvb) / .34);
  box-shadow:var(--tb-ombre3);
}
.tb-recompenses__legende{
  margin-top:var(--tb-e3);
  font-size:var(--tb-t-petit);
  line-height:1.5;
  color:var(--tb-creme-70);
  text-align:center;
}
@media (min-width:1024px){
  .tb-recompenses__legende{ text-align:left; }
}

.tb-recompenses__contenu{
  display:flex;
  flex-direction:column;
  gap:var(--tb-e5);
  min-width:0;
}

.tb-recompenses__inter{
  margin:var(--tb-e3) 0 0;
  font-size:var(--tb-t-micro);
  font-weight:600;
  letter-spacing:.16em;
  text-transform:uppercase;
  color:var(--tb-or-clair);
}

.tb-recompenses__trio{
  display:grid;
  grid-template-columns:1fr;
  gap:var(--tb-e3);
}
@media (min-width:560px){
  .tb-recompenses__trio{ grid-template-columns:repeat(3,minmax(0,1fr)); }
}

.tb-recompenses__note{
  display:flex;
  align-items:flex-start;
  gap:var(--tb-e3);
  margin:var(--tb-e3) 0 0;
  padding-top:var(--tb-e5);
  border-top:1px solid var(--tb-ligne-claire);
  font-size:var(--tb-t-petit);
  line-height:1.6;
  color:var(--tb-creme-70);
}
.tb-recompenses__note-icone{ font-size:1.2rem; line-height:1.3; }

/* ── La carte de récompense, trois gabarits ───────────────────────────── */

.tb-recompense{
  position:relative;
  border:1px solid var(--tb-ligne-claire);
  border-radius:var(--tb-r3);
  background:rgb(var(--tb-creme-rvb) / .05);
  transition:border-color var(--tb-d2) var(--tb-ease),
             background-color var(--tb-d2) var(--tb-ease),
             transform var(--tb-d2) var(--tb-ease);
}
.tb-recompense:hover{
  border-color:color-mix(in srgb, var(--tb-recompense-teinte, var(--tb-or)) 55%, transparent);
  background:rgb(var(--tb-creme-rvb) / .08);
  transform:translateY(-2px);
}

.tb-recompense__titre{
  margin:0;
  font-family:var(--tb-font-titre);
  font-size:var(--tb-t-h3);
  font-variation-settings:'wght' 600;
  line-height:1.15;
  color:var(--tb-creme);
}
.tb-recompense__sous{
  margin:var(--tb-e1) 0 0;
  font-size:var(--tb-t-micro);
  font-weight:600;
  letter-spacing:.08em;
  text-transform:uppercase;
  color:color-mix(in srgb, var(--tb-recompense-teinte, var(--tb-or)) 60%, var(--tb-creme));
}
.tb-recompense__texte{
  margin:var(--tb-e3) 0 0;
  font-size:var(--tb-t-petit);
  line-height:1.65;
  color:var(--tb-creme-70);
}
.tb-recompense__icone{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  line-height:1;
}

/* Vedette — la casquette verte, pièce maîtresse du bloc. */
.tb-recompense--vedette{
  display:grid;
  grid-template-columns:auto minmax(0,1fr);
  gap:var(--tb-e5);
  align-items:center;
  padding:var(--tb-e7);
  border-color:rgb(var(--tb-or-rvb) / .45);
  border-radius:var(--tb-r4);
  background:
    radial-gradient(90% 130% at 8% 0%, rgb(var(--tb-or-rvb) / .18) 0%, rgb(var(--tb-or-rvb) / 0) 60%),
    rgb(var(--tb-creme-rvb) / .07);
  box-shadow:var(--tb-ombre2);
}
.tb-recompense--vedette .tb-recompense__icone{
  width:76px;
  height:76px;
  font-size:2.6rem;
  border-radius:var(--tb-rond);
  border:1px solid rgb(var(--tb-or-rvb) / .40);
  background:rgb(var(--tb-vert-profond-rvb) / .55);
}
.tb-recompense--vedette .tb-recompense__titre{
  font-size:var(--tb-t-h2);
  color:var(--tb-or-clair);
}
.tb-recompense__ruban{ margin-bottom:var(--tb-e2); }

@media (max-width:559px){
  .tb-recompense--vedette{
    grid-template-columns:1fr;
    padding:var(--tb-e6);
  }
}

/* Compact — le trio de médailles. */
.tb-recompense--compact{
  display:flex;
  flex-direction:column;
  align-items:center;
  gap:var(--tb-e2);
  padding:var(--tb-e5) var(--tb-e4);
  text-align:center;
}
.tb-recompense--compact .tb-recompense__icone{ font-size:2rem; }
.tb-recompense--compact .tb-recompense__titre{ font-size:var(--tb-t-corps); }
.tb-recompense--compact .tb-recompense__sous{
  font-size:var(--tb-t-micro);
  letter-spacing:.04em;
  text-transform:none;
}

/* Large — la coupe et le trophée du meilleur joueur. */
.tb-recompense--large{
  display:grid;
  grid-template-columns:auto minmax(0,1fr);
  gap:var(--tb-e4) var(--tb-e5);
  align-items:start;
  padding:var(--tb-e6);
}
.tb-recompense--large .tb-recompense__icone{
  width:58px;
  height:58px;
  font-size:1.9rem;
  border-radius:var(--tb-r2);
  border:1px solid var(--tb-ligne-claire);
  background:rgb(var(--tb-vert-profond-rvb) / .45);
}
@media (max-width:479.98px){
  .tb-recompense--large{ grid-template-columns:1fr; }
}


/* ══ 6. CARROUSEL DES TOURNOIS ════════════════════════════════════════════ */

.tb-tournois__tete{
  /* Cette tête porte un lien aligné à droite : elle occupe toute la largeur,
     alors que la tête de section standard s'arrête à 72ch. */
  max-width:none;
  display:flex;
  flex-wrap:wrap;
  align-items:flex-end;
  justify-content:space-between;
  gap:var(--tb-e5);
}
/* Le bloc de titre prend la place restante : le lien reste sur la même ligne
   tant qu'il y a de la largeur, et passe dessous seulement quand il le faut. */
.tb-tournois__tete > div{ flex:1 1 24rem; min-width:0; }
.tb-tournois__lien{ text-decoration:none; flex:0 0 auto; }

.tb-tournois__note{
  margin:var(--tb-e3) 0 0;
  padding:var(--tb-e2) var(--tb-e4);
  border-left:3px solid var(--tb-orange);
  border-radius:0 var(--tb-r1) var(--tb-r1) 0;
  background:var(--tb-orange-pale);
  font-size:var(--tb-t-petit);
  line-height:1.5;
  color:var(--tb-encre-70);
}

/* Les tournois sont peu nombreux et riches en information : la carte respire
   plus que la carte de carrousel par défaut. */
/* La variable est déclarée par le composant sur .tb-carrousel : c'est donc là
   qu'il faut la redéfinir, pas sur le point de montage. */
.tb-tournois #tb-carrousel-tournois .tb-carrousel{
  --tb-carrousel-carte:clamp(272px, 84vw, 360px);
}
@media (min-width:768px){
  .tb-tournois #tb-carrousel-tournois .tb-carrousel{
    --tb-carrousel-carte:clamp(340px, 44vw, 512px);
  }
}

.tb-carte-tournoi{
  display:flex;
  flex-direction:column;
  gap:var(--tb-e4);
  height:100%;
  padding:var(--tb-e6);
  border:1px solid var(--tb-ligne);
  border-radius:var(--tb-r3);
  background:var(--tb-blanc);
  box-shadow:var(--tb-ombre1);
  transition:box-shadow var(--tb-d2) var(--tb-ease),
             border-color var(--tb-d2) var(--tb-ease);
}
.tb-carte-tournoi:hover{
  box-shadow:var(--tb-ombre2);
  border-color:var(--tb-ligne-forte);
}

.tb-carte-tournoi__bandeau{
  display:flex;
  flex-wrap:wrap;
  align-items:center;
  justify-content:space-between;
  gap:var(--tb-e2);
}
.tb-carte-tournoi__date{
  margin:0;
  font-size:var(--tb-t-micro);
  font-weight:600;
  letter-spacing:.1em;
  text-transform:uppercase;
  color:var(--tb-encre-45);
}

.tb-carte-tournoi__titre{
  margin:0;
  font-size:var(--tb-t-h3);
  line-height:1.15;
  color:var(--tb-vert);
  overflow-wrap:anywhere;
}

.tb-carte-tournoi__faits{
  display:grid;
  grid-template-columns:auto minmax(0,1fr);
  gap:var(--tb-e1) var(--tb-e4);
  margin:0;
  font-size:var(--tb-t-petit);
}
.tb-carte-tournoi__faits dt{
  color:var(--tb-encre-45);
  font-size:var(--tb-t-micro);
  letter-spacing:.04em;
  text-transform:uppercase;
  align-self:center;
}
.tb-carte-tournoi__faits dd{
  margin:0;
  color:var(--tb-encre);
  font-weight:500;
  overflow-wrap:anywhere;
}

.tb-carte-tournoi__palmares{
  display:flex;
  flex-direction:column;
  gap:var(--tb-e3);
  margin-top:auto;
  padding-top:var(--tb-e4);
  border-top:1px solid var(--tb-ligne);
}

.tb-carte-tournoi__vainqueur{
  display:flex;
  align-items:center;
  gap:var(--tb-e3);
  min-width:0;
}
.tb-carte-tournoi__avatar{
  flex:0 0 auto;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  line-height:0;
}
.tb-carte-tournoi__avatar svg{ display:block; }
.tb-carte-tournoi__avatar--coupe{
  width:40px;
  height:40px;
  border-radius:var(--tb-rond);
  border:1px solid rgb(var(--tb-or-rvb) / .40);
  background:rgb(var(--tb-or-rvb) / .12);
  font-size:1.15rem;
  line-height:1;
}

.tb-carte-tournoi__libelle{
  margin:0;
  font-size:var(--tb-t-micro);
  font-weight:600;
  letter-spacing:.08em;
  text-transform:uppercase;
  color:var(--tb-encre-45);
}
.tb-carte-tournoi__nom{
  margin:0;
  font-family:var(--tb-font-titre);
  font-size:var(--tb-t-corps);
  font-variation-settings:'wght' 600;
  line-height:1.2;
  color:var(--tb-vert);
  overflow-wrap:anywhere;
}
.tb-carte-tournoi__compo{
  margin:var(--tb-e1) 0 0;
  font-size:var(--tb-t-micro);
  line-height:1.45;
  color:var(--tb-encre-70);
  overflow-wrap:anywhere;
}
.tb-carte-tournoi__attente{
  margin:0;
  font-size:var(--tb-t-petit);
  color:var(--tb-encre-45);
}

.tb-carte-tournoi__lien{
  align-self:flex-start;
  min-height:44px;
  display:inline-flex;
  align-items:center;
  font-size:var(--tb-t-petit);
  font-weight:600;
  color:var(--tb-vert);
}
.tb-carte-tournoi__lien::after{
  content:'→';
  margin-left:var(--tb-e2);
  transition:transform var(--tb-d1) var(--tb-ease);
}
.tb-carte-tournoi__lien:hover::after{ transform:translateX(3px); }


/* ══ 7. PORTE D'ENTRÉE HALL OF FAME ═══════════════════════════════════════ */

.tb-porte-hof__carte{
  display:grid;
  grid-template-columns:1fr;
  gap:var(--tb-e8);
  align-items:center;
  padding:var(--tb-e8) var(--tb-e6);
  border:1px solid var(--tb-ligne-claire);
  border-radius:var(--tb-r5);
  background:
    radial-gradient(100% 120% at 100% 0%, rgb(var(--tb-or-rvb) / .16) 0%, rgb(var(--tb-or-rvb) / 0) 60%),
    rgb(var(--tb-vert-profond-rvb) / .45);
  box-shadow:var(--tb-ombre3);
}
@media (min-width:900px){
  .tb-porte-hof__carte{
    grid-template-columns:minmax(0,1fr) auto;
    gap:var(--tb-e10);
    padding:var(--tb-e10);
  }
}

.tb-porte-hof__texte{ min-width:0; }
.tb-porte-hof__texte .tb-titre-section{ margin-top:var(--tb-e2); }
.tb-porte-hof__cta{
  margin-top:var(--tb-e6);
  text-decoration:none;
}
.tb-porte-hof__fleche{ transition:transform var(--tb-d1) var(--tb-ease); }
.tb-porte-hof__cta:hover .tb-porte-hof__fleche{ transform:translateX(3px); }

.tb-champion{
  position:relative;
  display:flex;
  flex-direction:column;
  align-items:center;
  gap:var(--tb-e2);
  min-width:min(100%, 260px);
  padding:var(--tb-e8) var(--tb-e6) var(--tb-e6);
  border:1px solid rgb(var(--tb-or-rvb) / .38);
  border-radius:var(--tb-r4);
  background:rgb(var(--tb-vert-profond-rvb) / .55);
  text-align:center;
}
.tb-champion::before{
  content:'';
  position:absolute;
  inset:0;
  border-radius:inherit;
  background-image:var(--tb-halo-or);
  pointer-events:none;
}
.tb-champion > *{ position:relative; }

.tb-champion__couronne{
  position:absolute;
  top:calc(var(--tb-e5) * -1);
  left:50%;
  transform:translateX(-50%);
  font-size:1.8rem;
  line-height:1;
  filter:drop-shadow(0 4px 10px rgb(var(--tb-vert-profond-rvb) / .8));
}

.tb-champion__avatar{ display:inline-flex; line-height:0; }
.tb-champion__avatar svg{ display:block; }

.tb-champion__libelle{
  margin:var(--tb-e3) 0 0;
  font-size:var(--tb-t-micro);
  font-weight:600;
  letter-spacing:.14em;
  text-transform:uppercase;
  color:var(--tb-or-clair);
}
.tb-champion__nom{
  margin:0;
  font-family:var(--tb-font-titre);
  font-size:var(--tb-t-h2);
  font-variation-settings:'wght' 600;
  line-height:1.1;
  color:var(--tb-creme);
  overflow-wrap:anywhere;
}
.tb-champion__saison{
  margin:0;
  font-size:var(--tb-t-petit);
  font-variant-numeric:tabular-nums;
  color:var(--tb-creme-70);
}
.tb-champion__points{
  display:flex;
  flex-wrap:wrap;
  align-items:baseline;
  justify-content:center;
  gap:var(--tb-e2);
  margin:var(--tb-e4) 0 0;
  padding-top:var(--tb-e4);
  border-top:1px solid var(--tb-ligne-claire);
  width:100%;
  font-family:var(--tb-font-titre);
  font-size:var(--tb-t-h3);
  font-variant-numeric:tabular-nums;
  color:var(--tb-or-clair);
}
.tb-champion__unite{
  font-family:var(--tb-font-texte);
  font-size:var(--tb-t-micro);
  font-weight:500;
  letter-spacing:.06em;
  text-transform:uppercase;
  color:var(--tb-creme-70);
}

.tb-champion--vide .tb-champion__nom{ color:var(--tb-creme-70); }


/* ══ 8. TRANSITION DE SAISON ══════════════════════════════════════════════
   Au changement de saison, les blocs re-rendus arrivent en fondu doux plutôt
   qu'en apparition brutale. Aucune bascule de mise en page.
   ═══════════════════════════════════════════════════════════════════════ */

@keyframes tb-fondu-saison{
  from{ opacity:0; transform:translate3d(0,10px,0); }
  to  { opacity:1; transform:none; }
}
.tb-fondu{
  animation:tb-fondu-saison var(--tb-d2) var(--tb-ease) both;
}

@media (prefers-reduced-motion: reduce){
  .tb-fondu{ animation:none; }
  .tb-hero__pastille[data-encours='oui'] .tb-hero__point{ animation:none; }
  .tb-chiffre:hover,
  .tb-recompense:hover{ transform:none; }
  .tb-carte-tournoi__lien:hover::after,
  .tb-porte-hof__cta:hover .tb-porte-hof__fleche{ transform:none; }
}
