/* ==========================================================================
   Écran du tournoi : chiffres géants, contraste maximal, lisible à 10 mètres.
   Ambiances : Feutre (vert sombre), Nuit (noir), Clair (salle éclairée), et les styles du site
   (Classique, Moderne, Casino, Néon, Tournoi TV, Sportif, Épuré, Vegas rétro), choisies dans Réglages > Écran du tournoi (Domain\Ecran).
   Les tailles suivent la largeur de l'écran (vw) pour remplir n'importe quel vidéoprojecteur.
   ========================================================================== */
@font-face { font-family: Inter; font-weight: 500; font-display: swap; src: url(../fonts/inter-latin-500-normal.woff2) format("woff2"); }
@font-face { font-family: Inter; font-weight: 700; font-display: swap; src: url(../fonts/inter-latin-700-normal.woff2) format("woff2"); }

.ambiance-feutre { --fond: #0B2A1F; --fond-2: #0F3427; --texte: #F4F1E8; --doux: #9DB8AA; --ligne: rgba(244, 241, 232, .14); --vif: #F2C14E; }
.ambiance-nuit   { --fond: #07090C; --fond-2: #10141A; --texte: #FFFFFF; --doux: #8C96A3; --ligne: rgba(255, 255, 255, .12); --vif: #F2C14E; }
.ambiance-clair  { --fond: #FFFFFF; --fond-2: #F3F1EA; --texte: #000000; --doux: #2B3440; --ligne: rgba(0, 0, 0, .45); --vif: #8A4A00; }

/* Styles du site repris sur l'écran : mêmes polices et décors (polices chargées seulement si l'ambiance est utilisée) */
@font-face { font-family: Archivo; font-weight: 100 900; font-stretch: 62% 125%; font-display: swap; src: url(../fonts/archivo-latin-var.woff2) format("woff2"); }
@font-face { font-family: Cinzel; font-weight: 400 900; font-display: swap; src: url(../fonts/cinzel-latin-var.woff2) format("woff2"); }
@font-face { font-family: "Tilt Neon"; font-weight: 400; font-display: swap; src: url(../fonts/tiltneon-latin.woff2) format("woff2"); }
.ambiance-moderne { --fond: #0A1430; --fond-2: #0E1B3D; --texte: #FFFFFF; --doux: #A9B4D0; --ligne: rgba(226, 232, 248, .13); --vif: color-mix(in srgb, var(--accent) 65%, white); }
/* Gros chiffres : police d'affiche commune (Barlow Condensed) ; Archivo large pour le nom du vainqueur */
.ambiance-moderne .tv-fin strong { font-family: Archivo, Inter, sans-serif; font-stretch: 112%; font-weight: 800; }
.ambiance-moderne .tv-nom { text-transform: uppercase; letter-spacing: .04em; }
/* Classique : les couleurs du site de la V1 (nuit bleutée, couleur du club), titres Cinzel, chiffres Rajdhani */
@font-face { font-family: Rajdhani; font-weight: 700; font-display: swap; src: url(../fonts/rajdhani-latin-700.woff2) format("woff2"); }
.ambiance-classique { --fond: #070A0F; --fond-2: #111820; --texte: #F0F2F8; --doux: #93ACC1; --ligne: #1E2D3D; --vif: color-mix(in srgb, var(--accent) 82%, white); }
.ambiance-classique.tv { background: #070A0F radial-gradient(ellipse 120% 90% at 50% 0%, #0F1C2E 0%, #0A111B 50%, #070A0F 100%); }
.ambiance-classique .tv-nom, .ambiance-classique .tv-niveau, .ambiance-classique .tv-fin strong { font-family: Cinzel, Georgia, serif; letter-spacing: .04em; }
/* Les chiffres gardent la police d'affiche (Barlow Condensed) du chrono de la V1 ; Rajdhani pour les petites valeurs */
.ambiance-classique .tv-info b, .ambiance-classique .tv-heure { font-family: Rajdhani, Inter, sans-serif; font-variant-numeric: tabular-nums; }
.ambiance-casino { --fond: #0C3324; --fond-2: #0A2C20; --texte: #F4ECD6; --doux: #C9BE9E; --ligne: rgba(214, 178, 94, .3); --vif: #D6B25E; }
.ambiance-casino.tv { background: #0C3324 radial-gradient(ellipse 120% 90% at 50% 40%, #1D6247 0%, #0F3D2C 55%, #0A2A1E 100%); }
.ambiance-casino .tv-nom, .ambiance-casino .tv-niveau, .ambiance-casino .tv-fin strong, .ambiance-casino .tv-info > span { font-family: Cinzel, Georgia, serif; letter-spacing: .06em; }
.ambiance-casino .tv-panneau { background: rgba(6, 26, 18, .55); }
.ambiance-casino .tv-barre span { background: #D6B25E; }
.ambiance-neon { --fond: #0B0912; --fond-2: #14101F; --texte: #F3EFFB; --doux: #A69EBB; --ligne: rgba(255, 255, 255, .1); --vif: color-mix(in srgb, var(--accent) 80%, white); }
.ambiance-neon.tv { background: #0B0912 radial-gradient(ellipse at 75% 20%, color-mix(in srgb, var(--accent) 22%, transparent), transparent 55%); }
.ambiance-neon .tv-temps, .ambiance-neon .tv-nom, .ambiance-neon .tv-fin strong { font-family: "Tilt Neon", Inter, sans-serif; font-weight: 400; }
/* Lueur d'enseigne fixe (aucun clignotement) */
.ambiance-neon .tv-temps { text-shadow: 0 0 .06em color-mix(in srgb, var(--accent) 80%, transparent), 0 0 .2em color-mix(in srgb, var(--accent) 45%, transparent); }
.ambiance-neon .tv-barre span { box-shadow: 0 0 12px var(--accent); }

/* ==========================================================================
   Plan des tables (seat draw) ou liste des inscrits, à la place du chrono (screen.js, plan()).
   Occupe toute la largeur sous l'en-tête ; défile doucement s'il dépasse l'écran.
   ========================================================================== */
.vue-plan .tv-main > :not(.tv-plan) { display: none; }
.vue-plan .tv-progression { visibility: hidden; }
.tv-plan { grid-column: 1 / -1; display: flex; flex-direction: column; min-height: 0; padding: 1.6vh 2vw 1vh; }
.tv-plan h2 { margin: 0 0 1.6vh; text-align: center; font-family: var(--affiche); font-weight: 900; font-size: clamp(20px, 2.4vw, 56px); letter-spacing: .25em; text-indent: .25em; text-transform: uppercase; color: var(--vif);
  padding-bottom: 1vh; border-bottom: 1px solid color-mix(in srgb, var(--vif) 30%, transparent); }
.tv-plan-cadre { flex: 1; min-height: 0; overflow-y: auto; scrollbar-width: none; -webkit-overflow-scrolling: touch; cursor: grab; }   /* défile au doigt, à la molette ou à la souris */
.tv-plan-cadre.saisi { cursor: grabbing; user-select: none; }
.tv-plan-grille.tables { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(30vw, max(15vw, 90vw / var(--plan-n, 4))), 1fr)); gap: 1.4vw; align-items: start; }
.tv-plan-table { border: 1px solid var(--ligne); border-radius: .5vw; background: color-mix(in srgb, var(--fond-2) 85%, transparent); overflow: hidden; }
.tv-plan-table h3 { margin: 0; padding: .7vh 1vw; font-family: var(--affiche); font-weight: 900; letter-spacing: .14em; text-transform: uppercase; font-size: clamp(16px, 1.5vw, 38px);
  color: var(--fond); background: var(--vif); }
.tv-plan-table ol { list-style: none; margin: 0; padding: .4vh 0; }
.tv-plan-table li { display: flex; align-items: center; gap: .9vw; padding: .45vh 1vw; font-size: clamp(14px, 1.35vw, 34px); font-weight: 600; border-bottom: 1px solid color-mix(in srgb, var(--ligne) 60%, transparent); }
.tv-plan-table li:last-child { border-bottom: 0; }
.tv-plan-table .siege { flex: none; width: 1.8em; height: 1.8em; border-radius: 50%; display: grid; place-items: center; font-family: var(--affiche); font-weight: 800; font-size: .8em;
  border: 1px solid color-mix(in srgb, var(--vif) 55%, transparent); color: var(--vif); }
.tv-plan-table .nom { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* Placé mais pas encore arrivé : grisé, comme « absent » sur le seat draw de la V1 */
.tv-plan-table li.vide { color: var(--doux); opacity: .35; font-style: italic; }
.tv-plan-table li.vide .siege { background: transparent; border: 1px dashed currentColor; }
.tv-plan-table li.absent { color: var(--doux); opacity: .55; }
/* Ma place (écran ouvert depuis le site public) : ma table est cerclée, mon nom est surligné aux couleurs vives */
.tv-plan-table.ma-table { border-color: var(--vif); box-shadow: 0 0 0 2px var(--vif); }
.tv-plan-table li.moi { background: var(--vif); color: var(--fond); opacity: 1; font-weight: 800; }
.tv-plan-table li.moi .siege { background: var(--fond); color: var(--vif); }
.tv-plan-grille.inscrits ol { list-style: none; margin: 0; padding: 0; columns: 4 16vw; column-gap: 2.4vw; }
.tv-plan-grille.inscrits li { break-inside: avoid; padding: .6vh 1vw; font-size: clamp(16px, 1.6vw, 40px); font-weight: 600; border-bottom: 1px solid var(--ligne); }
@media (orientation: portrait) {
  .tv-plan-grille.tables { grid-template-columns: repeat(auto-fit, minmax(42vw, 1fr)); gap: 3vw; }
  .tv-plan-table h3 { font-size: 4vw; } .tv-plan-table li { font-size: 3.6vw; }
  .tv-plan-grille.inscrits ol { columns: 2; } .tv-plan-grille.inscrits li { font-size: 4vw; }
}

/* L'attribut hidden l'emporte toujours sur un display défini par une classe */
[hidden] { display: none !important; }

* { box-sizing: border-box; }
html, body { height: 100%; margin: 0; }
/* ==========================================================================
   Disposition (reprise de la V1) : en-tête, filet d'avancement, trois colonnes
   (structure | chrono et informations | joueurs), pied de page.
   Polices : Barlow Condensed pour les chiffres et titres, comme le chrono de la V1.
   ========================================================================== */
@font-face { font-family: "Barlow Condensed"; font-weight: 700; font-display: swap; src: url(../fonts/barlow-condensed-latin-700.woff2) format("woff2"); }
@font-face { font-family: "Barlow Condensed"; font-weight: 900; font-display: swap; src: url(../fonts/barlow-condensed-latin-900.woff2) format("woff2"); }
body.tv {
  --affiche: "Barlow Condensed", "Arial Narrow", Inter, sans-serif;
  background: var(--fond) radial-gradient(ellipse 90% 70% at 50% 35%, color-mix(in srgb, var(--fond-2) 80%, var(--vif) 6%), var(--fond) 75%);
  color: var(--texte); font-family: Inter, system-ui, sans-serif; overflow: hidden;
  display: grid; grid-template-rows: auto auto 1fr auto; font-variant-numeric: tabular-nums; cursor: default;
}
.tv-head { display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; gap: 2vw; padding: .9vw 1.6vw; font-size: clamp(14px, 1.3vw, 28px);
  background: linear-gradient(color-mix(in srgb, var(--fond-2) 85%, transparent), transparent); }
.tv-club { display: flex; align-items: center; gap: .8vw; color: var(--doux); font-weight: 500; }
.tv-club img { height: 3vw; min-height: 28px; width: auto; border-radius: 6px; }
.tv-titre { text-align: center; }
.tv-nom { font-family: var(--affiche); font-weight: 900; font-size: 1.5em; letter-spacing: .08em; text-transform: uppercase; color: var(--texte); line-height: 1.1; }
.tv-nom::first-letter { color: var(--vif); }
.tv-date { color: var(--doux); font-size: .78em; }
.tv-heure { text-align: right; color: var(--vif); font-family: var(--affiche); font-weight: 700; font-size: 1.35em; letter-spacing: .05em; }

/* Filet d'avancement du niveau, avec un point lumineux au bout (couleur du club) */
.tv-progression { height: 3px; background: var(--ligne); position: relative; z-index: 5; }   /* au-dessus des colonnes Structure et Joueurs : le point lumineux reste visible */
.tv-progression span { display: block; height: 100%; width: 0; background: var(--vif); box-shadow: 0 0 10px var(--vif); position: relative; transition: width .3s linear; }
.tv-progression span::after { content: ""; position: absolute; right: -5px; top: -4px; width: 11px; height: 11px; border-radius: 50%; background: var(--vif); box-shadow: 0 0 12px 3px var(--vif); }

.tv-main { display: grid; grid-template-columns: var(--col-g, 17vw) 1fr var(--col-d, 15vw); min-height: 0; }   /* --col-* : 0 quand la colonne est masquée */
.tv-panneau { display: flex; flex-direction: column; min-height: 0; background: color-mix(in srgb, var(--fond-2) 70%, transparent); }
.tv-structure { border-right: 1px solid var(--ligne); }
.tv-joueurs { border-left: 1px solid var(--ligne); }
.tv-panneau h2 { margin: 0; padding: .8vw 1vw .6vw; font: 900 clamp(12px, .95vw, 22px) var(--affiche); letter-spacing: .2em; text-transform: uppercase; color: var(--texte); border-bottom: 1px solid var(--ligne); }
.tv-panneau h2::before { content: "♠ "; color: var(--vif); }
.tv-joueurs h2::before { content: "♥ "; }

/* Structure : niveaux, pauses en bandeau, niveau en cours surligné de la couleur du club */
.tv-structure-liste { overflow-y: auto; scrollbar-width: none; flex: 1; scroll-behavior: smooth; }   /* défile à la main, sans barre visible */
.tv-structure-liste::-webkit-scrollbar { display: none; }
.tv-structure-liste.saisi { cursor: grabbing; user-select: none; scroll-behavior: auto; }
.tv-structure table { width: 100%; border-collapse: collapse; font-family: var(--affiche); font-weight: 700; font-size: clamp(12px, 1.05vw, 26px); }
.tv-structure th { position: sticky; top: 0; z-index: 2; background: linear-gradient(var(--fond-2), var(--fond-2)), var(--fond);   /* en-tête opaque : les lignes qui défilent ne passent plus dessous en transparence */ color: var(--doux); font-size: .72em; letter-spacing: .08em; text-transform: uppercase; padding: .4vw .3vw; text-align: center; }
.tv-structure td { text-align: center; padding: .35vw .3vw; border-bottom: 1px solid color-mix(in srgb, var(--ligne) 60%, transparent); }
.tv-structure td:first-child { color: var(--doux); }
.tv-structure tr.passe { opacity: .4; }
.tv-structure tr.actuel td { background: var(--vif); color: var(--fond); }
.tv-structure tr.pause td { text-align: left; padding-left: .8vw; font-size: .74em; letter-spacing: .1em; text-transform: uppercase; color: color-mix(in srgb, var(--vif) 60%, var(--doux)); background: color-mix(in srgb, var(--vif) 6%, transparent); }
.tv-structure tr.pause.actuel td { background: var(--vif); color: var(--fond); }

/* Joueurs : en jeu (point vert) puis éliminés avec leur place */
.tv-joueurs-liste { list-style: none; margin: 0; padding: .4vw .6vw; overflow-y: auto; scrollbar-width: none; flex: 1; font-size: clamp(12px, 1.05vw, 26px); }
.tv-joueurs-liste li { display: flex; align-items: center; gap: .6vw; padding: .32vw .2vw; border-bottom: 1px solid color-mix(in srgb, var(--ligne) 50%, transparent); font-weight: 600; white-space: nowrap; overflow: hidden; }
.tv-j-nom { overflow: hidden; text-overflow: ellipsis; }
.tv-j-place { flex: none; width: 1.7em; height: 1.7em; display: grid; place-items: center; border-radius: 50%; font: 700 .8em var(--affiche); }
.en-jeu .tv-j-place { background: radial-gradient(circle, #3DDC84 30%, color-mix(in srgb, #3DDC84 22%, transparent) 32%); }
.sorti { color: var(--doux); opacity: .65; }
.sorti .tv-j-place { border: 1px solid var(--ligne); }

/* Centre : grand chrono, état, quatre informations, boîte du niveau, niveau suivant */
.tv-centre { display: flex; flex-direction: column; align-items: center; justify-content: center; text-align: center; padding: 1vh 2vw; gap: 1.4vh; min-width: 0; }
.tv-niveau { display: none; font-family: var(--affiche); font-weight: 700; font-size: clamp(18px, 2vw, 48px); color: var(--doux); letter-spacing: .2em; text-transform: uppercase; }
.tv-temps { font-family: var(--affiche); font-weight: 900; font-size: min(30vh, 17vw); line-height: .86; letter-spacing: -.01em; --ch: .52em; --sep: .24em; text-shadow: 0 0 80px color-mix(in srgb, var(--texte) 12%, transparent); }
.tv-temps.pause, .tv-temps.urgent { color: var(--vif); }
.tv-statut { display: grid; gap: .5vh; font-family: var(--affiche); font-weight: 700; text-transform: uppercase; letter-spacing: .32em; color: var(--doux); font-size: clamp(18px, 2vw, 48px); }
.tv-statut [data-statut]::before { content: "● "; color: #3DDC84; }
body[data-chrono="pause"] .tv-statut [data-statut]::before, body[data-chrono="attente"] .tv-statut [data-statut]::before { color: var(--vif); }
.tv-infos { display: flex; justify-content: center; gap: 3.4vw; flex-wrap: wrap; }
.tv-info { display: grid; justify-items: center; }
.tv-info > span { font-family: var(--affiche); font-weight: 700; color: var(--doux); font-size: clamp(12px, 1.2vw, 28px); letter-spacing: .12em; text-transform: uppercase; }
.tv-info b { --ch: .6em; --sep: .3em; min-height: 1.05em; min-width: 8ch; text-align: center; font-variant-numeric: tabular-nums; font-feature-settings: "tnum" 1; font-family: var(--affiche); font-weight: 700; font-size: clamp(22px, 2.5vw, 60px); line-height: 1.05; white-space: nowrap; }
.tv-niveau-boite { width: min(46vw, 100%); padding: 1.2vh 2vw 1.4vh; border: 1px solid color-mix(in srgb, var(--vif) 55%, transparent); border-radius: .4vw;
  background: color-mix(in srgb, var(--vif) 7%, transparent); box-shadow: inset 0 0 40px color-mix(in srgb, var(--vif) 6%, transparent); }
.tv-niveau-titre { font-family: var(--affiche); font-weight: 900; letter-spacing: .3em; text-indent: .3em; text-transform: uppercase; color: var(--vif); font-size: clamp(16px, 1.9vw, 46px); }
.tv-blindes { font-family: var(--affiche); font-weight: 900; color: var(--vif); font-size: min(10vh, 5.6vw); line-height: 1.02; --ch: .52em; --sep: .26em; }
.tv-ante { font-family: var(--affiche); font-weight: 700; color: color-mix(in srgb, var(--texte) 72%, transparent); font-size: clamp(16px, 2vw, 48px); min-height: 1.1em; letter-spacing: .04em; }
.tv-suivant-boite { width: min(46vw, 100%); padding: .8vh 2vw 1vh; border: 1px solid var(--ligne); border-radius: .4vw; background: color-mix(in srgb, var(--fond-2) 60%, transparent); display: grid; }
.tv-suivant-boite span { font-family: var(--affiche); font-weight: 700; color: var(--doux); letter-spacing: .3em; text-transform: uppercase; font-size: clamp(11px, 1vw, 24px); }
.tv-suivant-boite b { font-family: var(--affiche); font-weight: 700; color: color-mix(in srgb, var(--texte) 55%, transparent); font-size: clamp(18px, 2.1vw, 52px); }
.tv-barre { display: none; width: 60%; height: .5vw; min-height: 5px; background: var(--ligne); border-radius: 99px; overflow: hidden; }
.tv-barre span { display: block; height: 100%; width: 0; background: var(--accent); border-radius: 99px; }
.tv-cartes { display: none; }
.tv-pied { padding: .3vw 1.6vw; font-size: clamp(10px, .7vw, 16px); color: var(--doux); border-top: 1px solid var(--ligne); background: color-mix(in srgb, var(--fond-2) 80%, transparent); letter-spacing: .06em; }

/* Message du directeur : carte centrée sur un fond estompé (la même famille que les fenêtres de l'écran) */
.tv-annonce { position: fixed; inset: 0; z-index: 40; display: flex; align-items: center; justify-content: center; background: rgba(0, 0, 0, .62); padding: 3vw; animation: tv-annonce-fond .4s ease-out; --c: var(--vif); }
.tv-annonce[hidden] { display: none; }
.tv-annonce.sort { animation: tv-annonce-sort .5s ease-in forwards; }
.tv-annonce-carte { position: relative; overflow: hidden; display: flex; align-items: center; gap: 3vw; max-width: 90vw; min-width: 50vw; padding: 3.4vw 4.4vw; border-radius: 1.6vw;
  background: color-mix(in srgb, var(--fond-2) 94%, var(--c)); color: var(--texte); border: .22vw solid var(--c);
  box-shadow: 0 3vw 9vw rgba(0, 0, 0, .55), 0 0 0 .7vw color-mix(in srgb, var(--c) 20%, transparent);
  animation: tv-annonce-entre .6s cubic-bezier(.2, .9, .2, 1.08); }
.tv-annonce-icone { flex: none; display: grid; place-items: center; width: 9vw; height: 9vw; min-width: 64px; min-height: 64px; border-radius: 50%; background: var(--c); color: var(--fond); font-size: clamp(36px, 5vw, 120px); line-height: 1; font-variant-emoji: text; }
.tv-annonce-icone.avec-logo { background: none; }
.tv-annonce-icone.avec-logo.pastille { background: #fff; padding: .6vw; }
.tv-annonce-icone img { width: 100%; height: 100%; object-fit: contain; }
.tv-annonce-corps { min-width: 0; }
.tv-annonce-corps small { display: block; margin-bottom: 1.2vw; color: var(--c); font: 800 clamp(14px, 1.6vw, 38px) var(--affiche); letter-spacing: .28em; text-transform: uppercase; }
.tv-annonce-corps strong { display: block; font-weight: 800; line-height: 1.12; letter-spacing: -.01em; text-wrap: balance; overflow-wrap: anywhere; }
.tv-annonce[data-taille="xl"] strong { font-size: clamp(44px, 8vw, 200px); }
.tv-annonce[data-taille="l"]  strong { font-size: clamp(38px, 6vw, 150px); }
.tv-annonce[data-taille="m"]  strong { font-size: clamp(30px, 4.4vw, 110px); }
.tv-annonce[data-taille="s"]  strong { font-size: clamp(24px, 3.2vw, 80px); font-weight: 700; }
/* Barre du bas : le temps d'affichage qui reste */
.tv-annonce-delai { position: absolute; left: 0; bottom: 0; height: .5vw; min-height: 5px; width: 100%; background: var(--c); transform-origin: left; }
@keyframes tv-annonce-fond { from { opacity: 0; } }
@keyframes tv-annonce-entre { from { opacity: 0; transform: translateY(5vh) scale(.94); } }
@keyframes tv-annonce-sort { to { opacity: 0; } }
@keyframes tv-annonce-delai { to { transform: scaleX(0); } }
@media (max-aspect-ratio: 1/1) { .tv-annonce-carte { flex-direction: column; text-align: center; gap: 4vw; padding: 6vw; } .tv-annonce-icone { width: 18vw; height: 18vw; } }
@media (prefers-reduced-motion: reduce) { .tv-annonce, .tv-annonce-carte { animation: none; } }
.tv-fin { position: fixed; inset: 0; z-index: 60; background: var(--fond); /* opaque et au-dessus de tout : on ne voit plus le chrono derrière */ display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 1.6vw; text-align: center; }
.tv-fin span { color: var(--doux); font-size: clamp(24px, 3vw, 72px); text-transform: uppercase; letter-spacing: .1em; }
.tv-fin strong { font-size: clamp(56px, 10vw, 240px); line-height: 1; letter-spacing: -.03em; }
.tv-fin em { font-style: normal; color: var(--doux); font-size: clamp(20px, 2.4vw, 56px); }
.tv-hors-ligne { position: fixed; top: 0; left: 0; right: 0; background: #B42318; color: #fff; text-align: center; padding: 8px; font-size: 16px; }

/* Outils de l'écran : une petite pastille d'icônes en bas à droite, translucide, qui n'apparaît qu'en bougeant la souris */
.tv-outils { position: fixed; right: 14px; bottom: 14px; z-index: 20; display: flex; align-items: center; gap: 2px; padding: 4px;
  border-radius: 999px; background: color-mix(in srgb, var(--fond-2) 72%, transparent); border: 1px solid var(--ligne);
  backdrop-filter: blur(10px); box-shadow: 0 10px 30px rgba(0, 0, 0, .35);
  opacity: 0; transform: translateY(8px); pointer-events: none; transition: opacity .3s, transform .3s; }
.tv-outils.visible { opacity: 1; transform: none; pointer-events: auto; }
.tv-outil { width: 38px; height: 38px; display: grid; place-items: center; border: 0; border-radius: 50%; background: transparent; color: var(--doux); cursor: pointer; transition: background .2s, color .2s; }
.tv-outil:hover, .tv-outil:focus-visible, .tv-outil[aria-expanded="true"] { background: color-mix(in srgb, var(--texte) 12%, transparent); color: var(--texte); outline: none; }
/* Son : ondes quand il est actif, croix quand il est coupé */
.tv-outil[data-son] .barre { display: inline; } .tv-outil[data-son] .ondes { display: none; }
.tv-outil[data-son][aria-pressed="true"] .barre { display: none; } .tv-outil[data-son][aria-pressed="true"] .ondes { display: inline; }
.tv-outil[data-son][aria-pressed="true"] { color: var(--vif); }
.vue-plan .tv-outil[data-bascule] { color: var(--vif); }
/* Panneau des réglages de cet écran, au-dessus de la pastille */
.tv-reglages { position: absolute; right: 0; bottom: calc(100% + 10px); width: 260px; display: grid; gap: 10px; padding: 14px;
  border-radius: 14px; background: color-mix(in srgb, var(--fond-2) 92%, transparent); border: 1px solid var(--ligne);
  backdrop-filter: blur(12px); box-shadow: 0 18px 40px rgba(0, 0, 0, .45); font: 500 13px Inter, sans-serif; color: var(--doux); }
.tv-reglages[hidden] { display: none; }
.tv-reglages label { display: grid; gap: 4px; }
.tv-reglages select { width: 100%; background: var(--fond); color: var(--texte); border: 1px solid var(--ligne); border-radius: 8px; padding: 7px 8px; font: 500 14px Inter, sans-serif; }
.tv-reglages fieldset { border: 0; margin: 0; padding: 0; display: grid; gap: 6px; }
.tv-reglages legend { margin-bottom: 4px; }
.tv-reglages .tv-case { display: flex; align-items: center; gap: 8px; color: var(--texte); cursor: pointer; }
.tv-reglages .tv-case input { accent-color: var(--vif); width: 16px; height: 16px; }

/* Lots du tournoi, sous les joueurs */
/* Quand les joueurs et le classement sont affichés : environ 72 % de la colonne pour eux, 28 % pour les lots (le nombre de lots
   par page s'ajuste à cette place, screen.js). Sans joueurs ni classement : les lots prennent toute la colonne (règle plus bas). */
.tv-lots { border-top: 1px solid var(--ligne); flex: 0 0 28%; display: flex; flex-direction: column; min-height: 0; }
.tv-lots h2::before { content: "♦ "; }
.tv-lots-liste { transition: opacity .9s ease, transform .9s ease; }
.tv-lots-liste.fondu { opacity: 0; transform: translateY(-.6vw); }
/* Plusieurs séries de lots : le bas de la liste s'estompe en dégradé pour annoncer la suite */
.tv-lots-liste.pagine { -webkit-mask-image: linear-gradient(to bottom, #000 70%, transparent); mask-image: linear-gradient(to bottom, #000 70%, transparent); padding-bottom: 1.6vw; }
@media (prefers-reduced-motion: reduce) { .tv-lots-liste { transition: opacity .9s ease; } .tv-lots-liste.fondu { transform: none; } }
.tv-lots-liste { flex: 1 1 0; min-height: 0; list-style: none; margin: 0; padding: .4vw .6vw; overflow-y: auto; scrollbar-width: none; font-size: clamp(11px, .95vw, 24px); }
.tv-lots-liste li { display: flex; gap: .6vw; padding: .3vw .2vw; border-bottom: 1px solid color-mix(in srgb, var(--ligne) 50%, transparent); }
.tv-lot-place { flex: none; min-width: 2.6em; color: var(--vif); font: 700 1em var(--affiche); }
.tv-lot-desc { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* Colonnes masquées (Réglages > Écran, ou réglages de l'écran) : le chrono prend la place libérée */
.sans-structure .tv-structure { display: none; }
.sans-classement .tv-joueurs > h2, .sans-classement .tv-joueurs-liste { display: none; }
.sans-classement .tv-lots { border-top: 0; max-height: none; flex: 1; }
.sans-lots .tv-lots { display: none; }
/* Plus rien à droite : la colonne disparaît (sans joueurs, et sans lots à montrer ou lots masqués) */
.sans-classement.sans-lots .tv-joueurs, .sans-classement:not(.avec-lots) .tv-joueurs { display: none; }
.sans-structure .tv-main, .sans-structure .tv-image { --col-g: 0; }
.sans-classement.sans-lots .tv-main, .sans-classement:not(.avec-lots) .tv-main, .sans-classement.sans-lots .tv-image, .sans-classement:not(.avec-lots) .tv-image { --col-d: 0; }
/* Chaque bloc garde sa colonne, même quand un voisin est masqué (sinon le chrono glisserait dans une colonne vide) */
@media (orientation: landscape) {
  .tv .tv-structure { grid-column: 1; }
  .tv .tv-centre { grid-column: 2; }
  .tv .tv-joueurs { grid-column: 3; }
  .tv .tv-plan { grid-column: 1 / -1; }
}

@media (prefers-reduced-motion: reduce) { .tv-outils { transition: none; } }

/* Logo prévu pour fond clair sur l'écran noir : pastille blanche ; largeur bornée pour les logos en bannière */
.tv-club img { max-width: 12vw; object-fit: contain; }
.tv-club-large img { height: 4.4vw; min-height: 36px; max-width: 28vw; }   /* logo avec le nom sur le côté */
.tv-club img.logo-pastille { background: #fff; padding: .25vw .4vw; }

/* ==========================================================================
   Chiffres à place fixe : chaque caractère du temps est dans une case de largeur fixe (screen.js, cellules()).
   --ch = largeur d'un chiffre, --sep = largeur des deux-points et espaces ; réglées par modèle si la police l'exige.
   ========================================================================== */
.tv-temps, .tv-blindes { white-space: nowrap; }
.ch { display: inline-block; width: var(--ch); text-align: center; }
.ch.sep { width: var(--sep); }

/* Ambiance Tournoi TV : anthracite et Oswald, bandes de couleur du club, comme le style du site */
@font-face { font-family: Oswald; font-weight: 200 700; font-display: swap; src: url(../fonts/oswald-latin-var.woff2) format("woff2"); }
.ambiance-tele { --fond: #0E1015; --fond-2: #171A21; --texte: #F2F4F7; --doux: #9BA3B2; --ligne: rgba(255, 255, 255, .1); --vif: color-mix(in srgb, var(--accent) 78%, white); }
.ambiance-tele .tv-temps, .ambiance-tele .tv-blindes, .ambiance-tele .tv-nom, .ambiance-tele .tv-fin strong, .ambiance-tele .tv-fil-carte strong { font-family: Oswald, "Arial Narrow", sans-serif; font-weight: 600; text-transform: uppercase; }
.ambiance-tele .tv-temps, .ambiance-tele .tv-blindes { --ch: .5em; --sep: .24em; }
.ambiance-tele .tv-head { border-bottom: 4px solid var(--accent); background: #0A0B0F; }

/* Ambiance Sportif : nuit d'ardoise, bandes de maillot de la couleur du club, titres penchés */
.ambiance-sportif { --fond: #151A21; --fond-2: #1C222B; --texte: #FFFFFF; --doux: #A3ACB9; --ligne: rgba(255, 255, 255, .1); --vif: color-mix(in srgb, var(--accent) 80%, white); }
.ambiance-sportif.tv { background: #151A21 linear-gradient(115deg, transparent 0 74%, color-mix(in srgb, var(--accent) 30%, transparent) 74% 78%, transparent 78% 81%, color-mix(in srgb, var(--accent) 30%, transparent) 81% 83%, transparent 83%) fixed; }
.ambiance-sportif .tv-head { border-bottom: 5px solid var(--accent); background: #111418; }
.ambiance-sportif .tv-nom, .ambiance-sportif .tv-niveau, .ambiance-sportif .tv-fin strong, .ambiance-sportif .tv-fil-carte strong { font-family: "Barlow Condensed", "Arial Narrow", sans-serif; font-weight: 900; font-style: italic; text-transform: uppercase; }
.ambiance-sportif .tv-panneau { border-radius: 2px; border-top: 4px solid var(--accent); }
/* Ambiance Épuré : ivoire teinté de la couleur du club, chiffres foncés, repères de couleur */
@font-face { font-family: Outfit; font-weight: 100 900; font-display: swap; src: url(../fonts/outfit-latin-var.woff2) format("woff2"); }
.ambiance-epure { --fond: color-mix(in srgb, var(--accent) 12%, #F7F4EE); --fond-2: #FFFFFF; --texte: #1C1C1E; --doux: #5F5C56; --ligne: rgba(28, 28, 30, .12); --vif: color-mix(in srgb, var(--accent) 85%, black); }
.ambiance-epure.tv { background: color-mix(in srgb, var(--accent) 12%, #F7F4EE) radial-gradient(circle at 92% 8%, color-mix(in srgb, var(--accent) 26%, transparent) 0 22vw, transparent 22vw) no-repeat; }
.ambiance-epure .tv-nom, .ambiance-epure .tv-niveau, .ambiance-epure .tv-fin strong, .ambiance-epure .tv-fil-carte strong { font-family: Outfit, Inter, sans-serif; font-weight: 400; }
.ambiance-epure .tv-panneau { box-shadow: 0 20px 40px color-mix(in srgb, var(--accent) 14%, transparent); }
/* Ambiance Vegas rétro : rouge profond, panneaux crème à double liseré, titres très larges, touches turquoise */
@font-face { font-family: Raleway; font-weight: 100 900; font-display: swap; src: url(../fonts/raleway-latin-var.woff2) format("woff2"); }
.ambiance-vegas { --fond: #7E141B; --fond-2: #2B1A12; --texte: #FFF4DF; --doux: #E9CFA8; --ligne: rgba(255, 244, 223, .2); --vif: #FFD27A; }
.ambiance-vegas.tv { background: #7E141B radial-gradient(ellipse 120% 90% at 50% 30%, #A3202A 0%, #8A161E 55%, #6A1016 100%); }
.ambiance-vegas .tv-head { background: #2B1A12; border-bottom: 6px solid #1E8C86; box-shadow: 0 4px 0 #C9A24A; }
.ambiance-vegas .tv-nom, .ambiance-vegas .tv-niveau, .ambiance-vegas .tv-fin strong, .ambiance-vegas .tv-fil-carte strong { font-family: Archivo, Inter, sans-serif; font-stretch: 125%; font-weight: 800; }
.ambiance-vegas .tv-panneau { background: rgba(43, 26, 18, .55); border: 2px solid #C9A24A; border-radius: 18px; }
.ambiance-vegas .tv-barre span { background: #FFD27A; }

/* Animations douces (jamais de clignotement) : la dernière minute « respire », le nouveau niveau glisse en place */
.tv-temps.urgent { animation: tv-respire 2.4s ease-in-out infinite; }
@keyframes tv-respire { 50% { opacity: .72; transform: scale(.985); } }
.tv-centre.nouveau .tv-blindes, .tv-centre.nouveau .tv-niveau { animation: tv-arrive .9s cubic-bezier(.2, .8, .2, 1); }
@keyframes tv-arrive { from { opacity: 0; transform: translateY(.4em); } }
.tv-barre span { transition: width .3s linear; }
/* Changement de niveau : une bande de lumière douce traverse l'écran une fois (screen.js, balayer) */
.tv-balayage { position: fixed; inset: 0; pointer-events: none; z-index: 5; opacity: 0;
  background: linear-gradient(100deg, transparent 35%, color-mix(in srgb, var(--accent) 22%, transparent) 50%, transparent 65%); }
.tv-balayage.passe { animation: tv-balaye 1.6s cubic-bezier(.4, 0, .2, 1); }
@keyframes tv-balaye { from { opacity: 1; transform: translateX(-100%); } to { opacity: 1; transform: translateX(100%); } }
/* Bascule chrono / tables : la vue qui apparaît arrive en fondu ; les tables entrent l'une après l'autre */
.tv-plan:not([hidden]) { animation: tv-arrive .6s cubic-bezier(.2, .8, .2, 1); }
body:not(.vue-plan) .tv-centre { animation: tv-arrive .6s cubic-bezier(.2, .8, .2, 1); }
.tv-plan-grille.entree .tv-plan-table, .tv-plan-grille.entree.inscrits li { animation: tv-arrive .7s cubic-bezier(.2, .8, .2, 1) both; animation-delay: calc(var(--i, 0) * 70ms); }
@media (prefers-reduced-motion: reduce) { .tv-temps.urgent, .tv-centre.nouveau *, .tv-balayage, .tv-plan, .tv-centre, .tv-plan-table, .tv-plan-grille li { animation: none !important; } }

/* ==========================================================================
   MODÈLES (disposition du centre), inspirés des styles du chrono de la V1. Classique = la disposition ci-dessus.
   ========================================================================== */

/* ---------- Cadran : graduations qui s'allument pendant le niveau, informations et blindes à droite ---------- */
.modele-cadran .tv-centre { display: grid; grid-template-columns: auto minmax(0, 1fr); grid-template-areas: "cadran infos" "cadran niveau" "cadran suivant"; align-content: center; justify-items: start; text-align: left; column-gap: 4vw; row-gap: 2vh; }
/* Le cadran : 120 graduations (masque conique) allumées jusqu'à l'avancement du niveau (--p, screen.js) */
.modele-cadran .tv-centre::before { content: ""; grid-area: cadran; width: min(62vh, 36vw); aspect-ratio: 1; border-radius: 50%; align-self: center;
  background: conic-gradient(var(--vif) calc(var(--p, 0) * 1%), color-mix(in srgb, var(--texte) 14%, transparent) 0);
  -webkit-mask: repeating-conic-gradient(#000 0 .9deg, transparent .9deg 3deg), radial-gradient(farthest-side, transparent calc(100% - 3.4vh), #000 calc(100% - 3.4vh + 1px));
  -webkit-mask-composite: source-in; mask: repeating-conic-gradient(#000 0 .9deg, transparent .9deg 3deg) intersect, radial-gradient(farthest-side, transparent calc(100% - 3.4vh), #000 calc(100% - 3.4vh + 1px)); }
.modele-cadran .tv-temps, .modele-cadran .tv-statut { grid-area: cadran; justify-self: center; }
.modele-cadran .tv-temps { font-size: min(15vh, 9vw); align-self: center; margin-top: -6vh; }
.modele-cadran .tv-statut { align-self: center; margin-top: 16vh; text-align: center; font-size: clamp(11px, 1vw, 24px); }
.modele-cadran .tv-infos { grid-area: infos; display: grid; grid-template-columns: repeat(2, auto); justify-content: start; gap: 2vh 3vw; }
.modele-cadran .tv-info { justify-items: start; border-left: 2px solid var(--vif); padding-left: .8vw; }
.modele-cadran .tv-infos { min-width: 0; }
.modele-cadran .tv-info { min-width: 0; }
.modele-cadran .tv-info b { min-width: 0; font-size: clamp(16px, 1.7vw, 42px); }   /* « 25k (250 BB) » ne déborde plus sous la colonne Joueurs */
.modele-cadran .tv-info > span { color: var(--vif); }
.modele-cadran .tv-niveau-boite, .modele-cadran .tv-suivant-boite { width: auto; border: 0; background: none; box-shadow: none; padding: 0; text-align: left; }
.modele-cadran .tv-niveau-boite { grid-area: niveau; } .modele-cadran .tv-suivant-boite { grid-area: suivant; }
.modele-cadran .tv-niveau-titre { text-indent: 0; }
.modele-cadran .tv-blindes { font-size: min(11vh, 5.4vw); }

/* ---------- Tapis : le chrono sur une table de poker, blindes sur des cartes à jouer ---------- */
.modele-tapis.tv { --table: color-mix(in srgb, var(--accent) 72%, #08140E); }   /* le tapis prend la couleur du club, assombrie pour que le temps reste lisible */
.modele-tapis .tv-centre { display: grid; grid-template-areas: "temps" "statut" "cartes" "infos" "suivant"; justify-items: center; align-content: center; row-gap: 1.4vh; }
.modele-tapis .tv-centre::before { content: ""; grid-area: 1 / 1 / 3 / 2; align-self: stretch; justify-self: center; width: min(60vw, 100vh); margin: -1vh 0 -1.5vh; border-radius: 999px;
  background: radial-gradient(ellipse at 50% 40%, color-mix(in srgb, var(--table) 85%, white), var(--table) 55%, color-mix(in srgb, var(--table) 70%, black));
  border: 1.6vh solid #5A3A22; box-shadow: 0 0 0 .5vh #2E1C10, inset 0 0 0 .5vh rgba(255, 255, 255, .1), inset 0 0 5vh rgba(0, 0, 0, .45), 0 2vh 5vh rgba(0, 0, 0, .5); }
.modele-tapis .tv-temps { grid-area: temps; position: relative; color: #F7F3E8; font-size: min(17vh, 12vw); margin-top: 4vh; }
.modele-tapis .tv-statut { grid-area: statut; position: relative; color: rgba(247, 243, 232, .7); margin-bottom: 2vh; }
.modele-tapis .tv-niveau { display: block; grid-area: temps; align-self: start; position: relative; margin-top: -1.4vh; background: #F7F3E8; color: #1B1B1B; border-radius: 99px; padding: .2vh 1.2vw; font-size: clamp(14px, 1.3vw, 30px); letter-spacing: .06em; text-transform: none; }
.modele-tapis .tv-niveau-boite { grid-area: cartes; width: auto; border: 0; background: none; box-shadow: none; padding: 0; }
.modele-tapis .tv-niveau-titre, .modele-tapis .tv-blindes, .modele-tapis .tv-ante { display: none; }
/* Cartes à jouer : coin haut gauche et bas droit (enseigne), libellé, montant en gros, grande enseigne en filigrane */
.modele-tapis .tv-cartes { display: flex; gap: 1.8vw; justify-content: center; }
.modele-tapis .tv-carte { position: relative; overflow: hidden; width: min(18vh, 11vw); aspect-ratio: 5 / 7; background: linear-gradient(160deg, #FFFFFF, #F3EEE2); color: #1B1B1B;
  border-radius: .7vw; border: .25vw solid #FFFFFF; outline: 1px solid rgba(0, 0, 0, .18); outline-offset: -.6vw;
  display: grid; place-content: center; justify-items: center; gap: .4vh; box-shadow: 0 1vh 2.4vh rgba(0, 0, 0, .5); }
.modele-tapis .tv-carte:nth-child(1) { transform: rotate(-4deg); }
.modele-tapis .tv-carte:nth-child(2) { transform: translateY(-1.2vh); }
.modele-tapis .tv-carte:nth-child(3) { transform: rotate(4deg); }
.modele-tapis .tv-carte small { position: relative; font: 900 clamp(20px, 2.1vw, 54px) var(--affiche); letter-spacing: .1em; text-transform: uppercase; color: #3B3B3B; }   /* SB, BB, ANTE : on comprend ce que désigne le chiffre */
.modele-tapis .tv-carte b { position: relative; font: 900 clamp(26px, 3.4vw, 92px) var(--affiche); line-height: 1; font-variant-numeric: tabular-nums; }
/* Enseignes : rouge pour cœur et carreau */
.modele-tapis .tv-carte i { position: absolute; font-style: normal; line-height: 1; text-align: center; font-size: clamp(34px, 4.4vw, 110px); }   /* enseignes dans les coins : bien lisibles, comme une vraie carte */
.modele-tapis .tv-carte .coin { left: .5vw; top: .1vw; }
.modele-tapis .tv-carte .coin-bas { right: .5vw; bottom: .1vw; left: auto; top: auto; transform: rotate(180deg); }
.modele-tapis .tv-carte .filigrane { inset: 0; display: grid; place-items: center; font-size: min(22vh, 12vw); opacity: .14; }
.modele-tapis .tv-carte.rouge i, .modele-tapis .tv-carte.rouge b { color: #C0222D; }
.modele-tapis .tv-infos { grid-area: infos; border-top: 1px solid var(--ligne); padding-top: 1vh; }
.modele-tapis .tv-info > span::before { content: "♦ "; color: var(--vif); }
.modele-tapis .tv-suivant-boite { grid-area: suivant; border: 0; background: none; }
.modele-tapis .tv-suivant-boite b { color: var(--texte); }

/* ---------- Tableau : plaquettes façon tableau d'aéroport ---------- */
.modele-tableau { --plaque: #16181C; --plaque-texte: #FFFFFF; }
.modele-tableau .tv-temps, .modele-tableau .tv-blindes { --ch: .7em; --sep: .32em; }
.modele-tableau .tv-temps { font-size: min(26vh, 14vw); }
.modele-tableau .tv-temps .ch:not(.sep) { margin: 0 .04em; background: linear-gradient(var(--plaque) 49%, #000 49% 51%, var(--plaque) 51%); color: var(--plaque-texte); border-radius: .06em;
  box-shadow: inset 0 .03em 0 rgba(255, 255, 255, .08), 0 .05em .08em rgba(0, 0, 0, .55); }
.modele-tableau .tv-blindes .ch:not(.sep) { margin: 0 .03em; background: linear-gradient(#0B0C0F 49%, #000 49% 51%, #0B0C0F 51%); border-radius: .06em; color: var(--texte); }
.modele-tableau .tv-niveau-boite { background: #0B0C0F; border-color: var(--ligne); }
/* Une plaquette qui change bascule (une fois, brièvement) */
.modele-tableau .ch.tourne { animation: tv-plaque .35s ease-out; transform-origin: 50% 50%; }
@keyframes tv-plaque { from { transform: rotateX(80deg); filter: brightness(.6); } }
/* Effet de la V1 : quand le volet se referme, un reflet brillant balaie la plaquette (fond qui glisse, il reste dans la case) */
.modele-tableau .tv-temps .ch.tourne:not(.sep), .modele-tableau .tv-blindes .ch.tourne:not(.sep) { position: relative; }
.modele-tableau .tv-temps .ch.tourne:not(.sep)::after, .modele-tableau .tv-blindes .ch.tourne:not(.sep)::after {
  content: ""; position: absolute; inset: 0; border-radius: inherit; pointer-events: none;
  background: linear-gradient(105deg, transparent 30%, rgba(255, 255, 255, .55) 48%, rgba(255, 255, 255, .15) 56%, transparent 70%) 160% 0 / 250% 100% no-repeat;
  animation: tv-reflet .8s ease-out .2s both; }
@keyframes tv-reflet { from { background-position: 160% 0; } to { background-position: -60% 0; } }
@media (prefers-reduced-motion: reduce) { .modele-tableau .ch.tourne { animation: none !important; } }
.modele-tableau .tv-temps.urgent, .modele-tableau .tv-temps.pause { animation: none; }
.modele-tableau .tv-temps.urgent .ch:not(.sep), .modele-tableau .tv-temps.pause .ch:not(.sep) { color: var(--vif); }
.modele-tableau .tv-info b { letter-spacing: .14em; }
/* Avancement en petites cases, comme les voyants d'un tableau d'affichage */
.modele-tableau .tv-progression { height: 6px; background: repeating-linear-gradient(90deg, var(--ligne) 0 1.4vw, transparent 1.4vw 1.7vw); }
.modele-tableau .tv-progression span { background: repeating-linear-gradient(90deg, var(--vif) 0 1.4vw, transparent 1.4vw 1.7vw); box-shadow: none; }
.modele-tableau .tv-progression span::after { display: none; }

/* ---------- WSOP : fond uni d'une seule couleur (celle du club), texte blanc, panneaux encadrés, comme les chronos des World Series of Poker ---------- */
.modele-wsop.tv { --ligne: color-mix(in srgb, var(--texte) 55%, transparent); --affiche: Arial, "Helvetica Neue", Helvetica, sans-serif; background: var(--fond); font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; }   /* couleurs de l'ambiance choisie : seule la disposition est WSOP */
.modele-wsop .tv-head { background: none; border: 2px solid var(--ligne); margin: .8vh .8vw 0; padding: .6vw 1.4vw; }
.modele-wsop .tv-nom { font-weight: 700; letter-spacing: .02em; text-transform: none; font-size: 1.7em; }
.modele-wsop .tv-nom::first-letter { color: inherit; }
.modele-wsop .tv-club span { display: none; }
.modele-wsop .tv-progression { margin: .6vh .8vw 0; height: 4px; }
.modele-wsop .tv-progression span { box-shadow: none; } .modele-wsop .tv-progression span::after { display: none; }
.modele-wsop .tv-main { gap: .8vw; padding: .8vh .8vw .8vh; }
.modele-wsop .tv-panneau, .modele-wsop .tv-centre { background: none; border: 2px solid var(--ligne); }
.modele-wsop .tv-structure, .modele-wsop .tv-joueurs { border: 2px solid var(--ligne); }
.modele-wsop .tv-panneau h2 { text-align: center; font: 700 clamp(12px, 1.1vw, 26px) "Courier New", monospace; letter-spacing: .06em; text-transform: none; border-bottom: 0; padding-bottom: .2vw; }
.modele-wsop .tv-panneau h2::before { content: ""; }
.modele-wsop .tv-structure h2::after { content: " : niveaux"; } .modele-wsop .tv-joueurs h2::after { content: " restants"; }
.modele-wsop .tv-structure th { background: none; } .modele-wsop .tv-structure tr.actuel td { background: var(--texte); color: var(--fond); }
.modele-wsop .tv-lots h2::before { content: ""; }
/* Centre : « Niveau N » et le temps en très grand, puis blindes à gauche et informations à droite, cases en bas */
.modele-wsop .tv-centre { display: grid; grid-template-columns: 1fr 1fr; grid-template-areas: "niveau niveau" "temps temps" "statut statut" "lignes infos" "bas infos" "barre barre"; align-content: stretch; padding: 0; gap: 0; text-align: center; }
.modele-wsop .tv-niveau { display: block; grid-area: niveau; font: 700 clamp(18px, 2.6vw, 64px) Arial, sans-serif; padding: .6vh 0; border-bottom: 2px solid var(--ligne); text-transform: none; }
.modele-wsop .tv-temps { grid-area: temps; font: 700 min(26vh, 15vw) Arial, sans-serif; color: var(--texte); text-shadow: none; padding: 1vh 0; border-bottom: 2px solid var(--ligne); }
.modele-wsop .tv-temps .ch { font-family: Arial, sans-serif; }
.modele-wsop .tv-statut { grid-area: statut; align-content: center; justify-items: center; line-height: 1.1; border-bottom: 2px solid var(--ligne); padding: .4vh 0 .4vh .32em; font-size: clamp(12px, 1.2vw, 28px); }
.modele-wsop .tv-niveau-boite { grid-area: lignes; display: block; width: auto; border: 0; border-right: 2px solid var(--ligne); background: none; box-shadow: none; padding: 1vh 1vw; text-align: center; }
.modele-wsop .tv-niveau-titre, .modele-wsop .tv-blindes, .modele-wsop .tv-ante, .modele-wsop .tv-cartes { display: none; }
.modele-wsop .tv-wsop-lignes { display: grid; gap: .4vh; font: 700 clamp(18px, 2.6vw, 66px) Arial, sans-serif; text-align: center; }
.modele-wsop .tv-wsop-lignes[hidden] { display: none !important; }
.modele-wsop .tv-infos { grid-area: infos; display: grid; grid-template-columns: 1fr; gap: .4vh; align-content: start; padding: 1vh 1vw; text-align: left; }
.modele-wsop .tv-info { display: flex; justify-content: center; gap: .8vw; align-items: baseline; }
.modele-wsop .tv-info.tv-info-joueurs { display: none; }   /* « Joueurs 21 / 21 » masqué : les joueurs restants sont dans la case du bas */
.modele-wsop .tv-info > span { font: 700 clamp(12px, 1.5vw, 38px) Arial, sans-serif; letter-spacing: 0; text-transform: none; color: var(--texte); }
.modele-wsop .tv-info > span::after { content: " :"; }
.modele-wsop .tv-info b { min-width: 0; font: 700 clamp(12px, 1.5vw, 38px) Arial, sans-serif; text-align: left; }
.modele-wsop .tv-wsop-bas { grid-area: bas; display: grid; grid-template-columns: 1fr 1fr auto; align-items: center; border-top: 2px solid var(--ligne); border-right: 2px solid var(--ligne); }
.modele-wsop .tv-wsop-bas > div { display: grid; justify-items: center; padding: .6vh 0; }
.modele-wsop .tv-wsop-bas > div + div { border-left: 2px solid var(--ligne); }
.modele-wsop .tv-wsop-bas span { font: 700 clamp(12px, 1.5vw, 38px) Arial, sans-serif; } .modele-wsop .tv-wsop-bas b { font: 700 clamp(20px, 3vw, 80px) Arial, sans-serif; }
.modele-wsop .tv-suivant-boite { display: none; }   /* les niveaux suivants sont dans la case des informations */
.modele-wsop .tv-suivant-boite b { color: var(--texte); }
.modele-wsop .tv-barre { grid-area: barre; }
.tv-wsop-lignes, .tv-wsop-bas { display: none; }
.modele-wsop .tv-wsop-bas { display: grid; } .modele-wsop .tv-wsop-lignes { display: grid; }

/* Outils de l'écran : listes de choix comme les boutons */
.tv-outils select { background: var(--fond-2); color: var(--texte); border: 1px solid var(--ligne); border-radius: 8px; padding: 8px; font: 500 14px Inter, sans-serif; }

/* Écran en portrait (téléphone tenu droit, tablette) : une colonne, sans les panneaux */
@media (orientation: portrait) {
  .tv-main, .modele-wsop .tv-main { grid-template-columns: 1fr; }
  .tv-panneau { display: none; }
  .tv-head { font-size: 3.6vw; grid-template-columns: 1fr; } .tv-heure, .tv-club { display: none; }
  .tv-temps, .modele-wsop .tv-temps, .modele-tableau .tv-temps { font-size: 26vw; }
  .tv-blindes { font-size: 11vw; } .tv-niveau-boite, .tv-suivant-boite { width: 92vw; }
  .tv-info > span { font-size: 3vw; } .tv-info b { font-size: 5.6vw; } .tv-statut { font-size: 3vw; }
  .tv-niveau-titre { font-size: 3.6vw; } .tv-suivant-boite span { font-size: 2.6vw; } .tv-suivant-boite b { font-size: 6vw; }
  .modele-cadran .tv-centre { grid-template-columns: 1fr; grid-template-areas: "cadran" "infos" "niveau" "suivant"; justify-items: center; text-align: center; }
  .modele-cadran .tv-centre::before { width: 80vw; }
  .modele-cadran .tv-temps { font-size: 16vw; }
  .modele-cadran .tv-statut { font-size: 3vw; } .modele-cadran .tv-blindes { font-size: 11vw; }
  /* Téléphone : les informations (temps de jeu, pause dans, joueurs, tapis moyen), le niveau et le suivant sont centrés, pas alignés à gauche */
  .modele-cadran .tv-infos { justify-content: center; justify-items: center; width: 92vw; gap: 3vw 6vw; }
  .modele-cadran .tv-info { justify-items: center; text-align: center; border-left: 0; padding-left: 0; }
  .modele-cadran .tv-niveau-boite, .modele-cadran .tv-suivant-boite { text-align: center; }
  .modele-tapis .tv-centre::before { width: 90vw; }
  .modele-tapis .tv-carte { width: 24vw; } .modele-tapis .tv-carte b { font-size: 7vw; }
}

/* ==========================================================================
   Messages du jour J (screen.js, montrerFil) : une carte au centre bas de l'écran, couleur selon le type.
   Entrée en glissant, sortie en fondu ; jamais de clignotement.
   ========================================================================== */
.tv-fil { position: fixed; left: 0; right: 0; bottom: 5vh; display: flex; justify-content: center; pointer-events: none; z-index: 20; --c: var(--vif); }
.tv-fil-carte { display: flex; gap: 2vw; align-items: center; max-width: 88vw; min-width: 40vw; padding: 1.6vw 2.6vw 1.6vw 1.8vw; border-radius: 1.2vw;
  background: color-mix(in srgb, var(--fond-2) 92%, var(--c)); color: var(--texte); border: 2px solid var(--c);
  box-shadow: 0 2vw 6vw rgba(0, 0, 0, .45), 0 0 0 .5vw color-mix(in srgb, var(--c) 18%, transparent);
  animation: tv-fil-entre .6s cubic-bezier(.2, .9, .2, 1.1); }
.tv-fil.sort .tv-fil-carte { animation: tv-fil-sort .5s ease-in forwards; }
@keyframes tv-fil-entre { from { opacity: 0; transform: translateY(4vh) scale(.96); } }
@keyframes tv-fil-sort { to { opacity: 0; transform: translateY(2vh); } }
.tv-fil-icone { flex: none; display: grid; place-items: center; width: 5.4vw; height: 5.4vw; min-width: 54px; min-height: 54px; border-radius: 50%;
  background: var(--c); color: var(--fond); font-size: clamp(28px, 3vw, 72px); line-height: 1; font-variant-emoji: text; }
.tv-fil strong { display: block; font-size: clamp(26px, 3.4vw, 84px); line-height: 1.1; letter-spacing: -.01em; }
.tv-fil ul { list-style: none; margin: .5vw 0 0; padding: 0; display: grid; grid-template-columns: repeat(auto-fill, minmax(26vw, 1fr)); gap: .2vw 2.4vw;
  font-size: clamp(22px, 2.8vw, 68px); font-weight: 600; line-height: 1.25; color: var(--texte); font-variant-numeric: tabular-nums; }
/* Plusieurs lignes (table cassée, plusieurs déplacements) : colonnes plus larges pour que les noms restent grands */
.tv-fil-casser ul, .tv-fil-deplacement ul { grid-template-columns: repeat(auto-fill, minmax(38vw, 1fr)); }
.tv-fil-elimination { --c: #E5484D; }
.tv-fil-prime { --c: #F2C14E; }
.tv-fil-deplacement { --c: #4EA8F2; }
.tv-fil-casser { --c: #F28C4E; }
/* Grands moments : carte plus grande, au milieu de l'écran */
.tv-fil-table_finale, .tv-fil-heads_up { --c: #F2C14E; top: 0; bottom: 0; align-items: center; background: rgba(0, 0, 0, .6); }
.tv-fil-table_finale .tv-fil-carte, .tv-fil-heads_up .tv-fil-carte { max-width: 94vw; }
.tv-fil-table_finale .tv-fil-carte, .tv-fil-heads_up .tv-fil-carte { flex-direction: column; text-align: center; padding: 3vw 5vw; gap: 1.2vw; }
.tv-fil-table_finale strong, .tv-fil-heads_up strong { font-size: clamp(48px, 7vw, 180px); text-transform: uppercase; letter-spacing: .04em; }
.tv-fil-heads_up ul { grid-template-columns: 1fr; font-size: clamp(36px, 5.6vw, 140px); }
.tv-fil-table_finale ul { grid-template-columns: repeat(auto-fill, minmax(28vw, 1fr)); text-align: left; font-size: clamp(26px, 3.2vw, 80px); gap: .6vw 3vw; }
/* Déplacements et table cassée : une ligne par joueur, table et siège dans de grosses pastilles lisibles de loin */
.tv-fil ul.tv-fil-places { grid-template-columns: repeat(auto-fit, minmax(min(40vw, 100%), 1fr)); gap: .8vw 2.4vw; margin-top: 1vw; }
.tv-fil-places li { display: grid; grid-template-columns: 1fr auto auto; align-items: center; gap: 1vw; padding: .5vw .8vw .5vw 1.2vw;
  border-radius: .8vw; background: color-mix(in srgb, var(--fond) 70%, transparent); border-left: .4vw solid var(--c); }
.tv-fp-nom { font-size: clamp(22px, 2.6vw, 64px); font-weight: 700; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tv-fp-case { display: grid; justify-items: center; min-width: 5.4vw; padding: .2vw .6vw; border-radius: .6vw; background: var(--c); color: var(--fond);
  font-size: clamp(24px, 3vw, 76px); font-weight: 800; line-height: 1; font-variant-numeric: tabular-nums; }
.tv-fp-case small { font-size: max(11px, .32em); font-weight: 700; text-transform: uppercase; letter-spacing: .08em; margin-bottom: .15em; opacity: .85; }
/* Table finale : rappel de la pause sous les sièges, sur toute la largeur */
.tv-fil-places li.tv-fp-note { display: block; grid-column: 1 / -1; background: none; border: 0; text-align: center; font-size: clamp(18px, 2vw, 48px); opacity: .85; }
.tv-fil ul.tv-fil-places.nombreux { grid-template-columns: 1fr 1fr; width: 88vw; }
.tv-fil-places.nombreux .tv-fp-nom { font-size: clamp(20px, 2.2vw, 56px); }
.tv-fil-places.nombreux .tv-fp-case { font-size: clamp(20px, 2.4vw, 60px); min-width: 4.6vw; }
/* Table cassée : carte au centre de l'écran sur fond assombri, comme les grands moments */
.tv-fil-casser { top: 0; bottom: 0; align-items: center; background: rgba(0, 0, 0, .55); }
.tv-fil-casser .tv-fil-carte { flex-direction: column; align-items: stretch; text-align: left; padding: 2.4vw 3vw; max-width: 94vw; min-width: 60vw; }
.tv-fil-casser .tv-fil-carte > .tv-fil-icone { align-self: center; }
.tv-fil-casser strong { font-size: clamp(40px, 5.4vw, 140px); text-transform: uppercase; letter-spacing: .03em; text-align: center; }
@media (prefers-reduced-motion: reduce) { .tv-fil-carte, .tv-fil.sort .tv-fil-carte { animation: none; } }

/* Rappel « cliquez pour activer le son » (son demandé, pas encore autorisé par le navigateur) */
.tv-son-attente { position: fixed; left: 50%; top: 1.4vh; transform: translateX(-50%); z-index: 30; background: var(--fond-2); color: var(--texte);
  border: 1px solid var(--vif); border-radius: 99px; padding: 8px 18px; font: 500 15px Inter, sans-serif; cursor: pointer; }

/* Chiffres de même largeur partout sur l'écran : rien ne « danse » quand une valeur change (temps de jeu, joueurs, tapis moyen, blindes...) */
.tv { font-variant-numeric: lining-nums tabular-nums; }
.tv-joueurs-liste.saisi, .tv-lots-liste.saisi { cursor: grabbing; user-select: none; }
.tv-joueurs-liste, .tv-lots-liste { cursor: grab; }

/* ---------- Fenêtres de l'écran : logo du club, photos, primes, table finale, heads-up, victoire ---------- */
/* Logo du club à la place du symbole (élimination, déplacement...) */
.tv-fil-icone.avec-logo { background: transparent; width: 8vw; height: 8vw; min-width: 72px; min-height: 72px; border-radius: 0; }
.tv-fil-icone.avec-logo img { max-width: 100%; max-height: 100%; object-fit: contain; }
.tv-fil-icone.avec-logo.pastille { background: #fff; border-radius: 1vw; padding: .5vw; }
/* Primes : texte centré et plus grand, sous le titre */
.tv-fil-prime .tv-fil-carte { flex-direction: column; text-align: center; padding: 2.4vw 4vw; gap: 1vw; }
.tv-fil-prime .tv-fil-carte > div { width: 100%; }
.tv-fil ul.tv-fil-texte { grid-template-columns: 1fr; justify-items: center; text-align: center; font-size: clamp(26px, 3.2vw, 80px); font-weight: 700; line-height: 1.2; margin-top: .8vw; }
/* Photos de joueurs */
.tv-avatar { display: inline-grid; place-items: center; flex: none; width: 4.4vw; height: 4.4vw; min-width: 44px; min-height: 44px; border-radius: 50%; overflow: hidden;
  background: var(--c, var(--vif)); color: var(--fond); font: 800 1.6vw var(--affiche); border: .25vw solid var(--c, var(--vif)); }
.tv-avatar img { width: 100%; height: 100%; object-fit: cover; }
.tv-avatar.grand { width: 14vw; height: 14vw; font-size: 4.4vw; }
.tv-avatar.geant { width: 22vw; height: 22vw; font-size: 7vw; border-width: .5vw; box-shadow: 0 0 6vw color-mix(in srgb, var(--vif) 60%, transparent); }
/* Table finale : siège, photo, nom (le classement de la table) */
.tv-fil-places.tv-fil-finale li.avec-photo { grid-template-columns: auto auto 1fr; }
/* Heads-up : les deux joueurs face à face */
.tv-fil ul.tv-fil-duel { display: flex; align-items: center; justify-content: center; gap: 4vw; margin-top: 1.4vw; font-size: clamp(26px, 3.6vw, 90px); font-weight: 800; }
.tv-fil-duel li { display: grid; justify-items: center; gap: 1vw; text-align: center; }
.tv-fil-duel li.contre { font-size: .6em; font-weight: 600; text-transform: uppercase; letter-spacing: .2em; color: var(--doux); }
/* Victoire : photo géante, confettis qui tombent, titre qui pulse */
.tv-fin { overflow: hidden; background: radial-gradient(circle at 50% 38%, color-mix(in srgb, var(--vif) 30%, var(--fond)) 0, var(--fond) 62%); }
.tv-fin > * { position: relative; z-index: 1; }
.tv-fin strong { text-shadow: 0 0 .3em color-mix(in srgb, var(--vif) 70%, transparent); animation: tv-victoire 2.4s ease-in-out infinite; }
.tv-fin-photo { display: grid; place-items: center; }
.tv-fin span { color: var(--vif); font-size: clamp(32px, 4vw, 96px); letter-spacing: .3em; }
@keyframes tv-victoire { 50% { transform: scale(1.05); } }
.tv-confettis { position: absolute !important; inset: 0; z-index: 0 !important; pointer-events: none; }
.tv-confettis i { position: absolute; top: -4vh; width: .9vw; height: 1.6vw; background: var(--teinte); opacity: .95; animation: tv-confetti linear infinite; }
@keyframes tv-confetti { to { transform: translateY(112vh) rotate(var(--tourne)); } }
@media (prefers-reduced-motion: reduce) { .tv-confettis { display: none; } .tv-fin strong { animation: none; } }

/* Ma place : table et siège du joueur connecté, en haut à gauche de l'écran */
.tv-maplace { position: fixed; left: 50%; transform: translateX(-50%); top: 10.5vh; z-index: 15; display: flex; align-items: center; justify-content: center; gap: .9vw; padding: .5vh 1.2vw; border-radius: 999px; background: var(--vif); color: var(--fond); box-shadow: 0 .6vw 2vw rgba(0, 0, 0, .4); text-align: center; }
.tv-maplace[hidden] { display: none; }
.tv-maplace span { font: 700 clamp(10px, .8vw, 20px)/1 var(--affiche); letter-spacing: .14em; text-transform: uppercase; opacity: .8; }
.tv-maplace b { font: 900 clamp(16px, 1.5vw, 40px)/1 var(--affiche); white-space: nowrap; }
/* Quand « Ma place » est affichée (ordinateur), le chrono descend un peu pour ne pas être recouvert */
@media (orientation: landscape) { body.avec-maplace .tv-centre { padding-top: 6vh; } }
/* Téléphone : les infos du chrono sur deux lignes, et classement / lots plein écran à la demande (icône des tables) */
@media (orientation: portrait) {
  .tv-infos { display: grid; grid-template-columns: 1fr 1fr; gap: 2.4vw 4vw; width: 92vw; margin-inline: auto; }
  .tv-maplace { left: 3vw; right: 3vw; transform: none; top: 8vh; bottom: auto; gap: 2.4vw; border-radius: 99px; padding: 1.6vw 3vw; }
  .tv-maplace b { font-size: 4.6vw; } .tv-maplace span { font-size: 2.6vw; }
  /* Le bandeau « Ma place » ne doit rien recouvrir : le chrono, le classement et les lots descendent d'autant */
  body.avec-maplace .tv-centre { padding-top: 12vw; }
  body.avec-maplace.vue-classement .tv-joueurs, body.avec-maplace.vue-lots .tv-joueurs { padding-top: 13vw; }
  body.vue-classement .tv-centre, body.vue-lots .tv-centre { display: none; }
  body.vue-classement .tv-joueurs, body.vue-lots .tv-joueurs { display: flex; grid-column: 1; border: 0; min-height: 0; }
  body.vue-classement .tv-lots { display: none; }
  body.vue-lots .tv-joueurs > h2, body.vue-lots .tv-joueurs-liste { display: none; }
  body.vue-lots .tv-lots { display: flex; border-top: 0; max-height: none; flex: 1; }
  body.vue-classement .tv-joueurs-liste { font-size: 4.4vw; }
  body.vue-lots .tv-lots-liste { font-size: 4.2vw; }
  body.vue-lots .tv-lot-desc { white-space: normal; overflow: visible; }   /* page Lots : le texte complet de chaque lot */
  body.vue-classement .tv-panneau h2, body.vue-lots .tv-panneau h2 { font-size: 4vw; }
}

/* Téléphone : les noms de la table cassée et de la table finale sont les uns sous les autres (en deux colonnes, les pseudos étaient coupés) */
@media (orientation: portrait) {
  .tv-fil ul.tv-fil-places, .tv-fil ul.tv-fil-places.nombreux { grid-template-columns: 1fr; width: 92vw; max-height: 68vh; overflow-y: auto; gap: 1.2vw; }
  .tv-fil-places .tv-fp-nom, .tv-fil-places.nombreux .tv-fp-nom { font-size: 5vw; white-space: normal; overflow: visible; }
  .tv-fil-casser .tv-fil-carte, .tv-fil-table_finale .tv-fil-carte { max-height: 90vh; }
}

/* Image du club en filigrane au centre de l'écran (Réglages > Écran) : taille et opacité en variables */
.tv-image { position: fixed; inset: 0; padding: 0 var(--col-d, 15vw) 0 var(--col-g, 17vw); display: flex; align-items: center; justify-content: center; pointer-events: none; z-index: 0; }
.tv-image img { max-height: var(--img-h, 40vh); max-width: 100%; opacity: var(--img-o, .2); object-fit: contain; }
.tv-main { position: relative; z-index: 1; }

/* Mode Classique : les informations ne sont plus alignées en ligne droite mais posées sur un arc (les extrémités plus basses) */
.modele-classique .tv-infos { align-items: start; padding-bottom: 2.4vh; }
.modele-classique .tv-info:nth-child(2), .modele-classique .tv-info:nth-child(3) { transform: translateY(2.2vh); }   /* arrondi : temps de jeu et tapis moyen en haut, pause dans et joueurs plus bas */
.modele-classique .tv-info:nth-child(1), .modele-classique .tv-info:nth-child(4) { transform: translateY(0); }
.modele-classique .tv-info:nth-child(5) { transform: translateY(1.1vh); }
@media (orientation: portrait) { .modele-classique .tv-info:nth-child(n) { transform: none; } }

/* Modèle WSOP : jetons en jeu, niveaux suivants (dans la case des informations) et heure en cadran (partie basse) */
.tv-info-jetons, .tv-wsop-suivants, .tv-horloge { display: none; }
.modele-wsop .tv-info.tv-info-jetons { display: flex; }
.modele-wsop .tv-wsop-suivants { display: grid; gap: .3vh; margin-top: 1.2vh; padding-top: 1vh; border-top: 2px solid var(--ligne); text-align: center; font: 700 clamp(12px, 1.5vw, 38px) Arial, sans-serif; }
.modele-wsop .tv-wsop-suivants small { font: 700 clamp(11px, 1.1vw, 28px) Arial, sans-serif; opacity: .7; }
.modele-wsop .tv-horloge { display: block; height: min(13vh, 8vw); aspect-ratio: 1; margin: .5vh 1vw; border-left: 0; }
.tv-horloge circle { fill: none; stroke: var(--texte); stroke-width: 3; }
.tv-horloge .graduations line { stroke: var(--texte); stroke-width: 2; }
.tv-horloge .aiguille { stroke: var(--texte); stroke-linecap: round; }
.tv-horloge .h { stroke-width: 5; } .tv-horloge .m { stroke-width: 3; }
.modele-wsop .tv-heure { visibility: hidden; }   /* l'heure est dans le cadran du bas */

/* Modèle WSOP : le pied de page reste dans l'écran (la rangée centrale peut rétrécir) */
.modele-wsop.tv { grid-template-rows: auto auto minmax(0, 1fr) auto; overflow: hidden; }
.modele-wsop .tv-main, .modele-wsop .tv-centre { min-height: 0; overflow: hidden; }
.modele-wsop .tv-temps { font-size: min(24vh, 15vw); }
.modele-wsop .tv-pied { margin: 0 .8vw .5vh; padding: .2vh 1vw; border: 0; background: none; }

/* Modèle WSOP sur téléphone (portrait) : une seule colonne, lignes l'une sous l'autre, tout à la largeur de l'écran */
@media (orientation: portrait) {
  .modele-wsop .tv-head { margin: .6vh 1.6vw 0; padding: .6vh 3vw; }
  .modele-wsop .tv-main { padding: .6vh 1.6vw; }
  .modele-wsop .tv-centre { grid-template-columns: 1fr; grid-template-areas: "niveau" "temps" "statut" "lignes" "infos" "bas" "barre"; align-content: start; overflow-y: auto; }
  .modele-wsop .tv-niveau { font-size: 6vw; }
  .modele-wsop .tv-temps { font-size: 25vw; }
  .modele-wsop .tv-statut { font-size: 3vw; }
  .modele-wsop .tv-niveau-boite { border-right: 0; border-bottom: 2px solid var(--ligne); padding: 1vh 3vw; }
  .modele-wsop .tv-wsop-lignes { font-size: 7vw; }
  .modele-wsop .tv-infos { width: auto; grid-template-columns: 1fr; padding: 1vh 3vw; }
  .modele-wsop .tv-info > span, .modele-wsop .tv-info b { font-size: 4.6vw; }
  .modele-wsop .tv-wsop-suivants { font-size: 4.6vw; } .modele-wsop .tv-wsop-suivants small { font-size: 3.4vw; }
  .modele-wsop .tv-wsop-bas { border-right: 0; grid-template-columns: 1fr 1fr auto; }
  .modele-wsop .tv-wsop-bas span { font-size: 3.6vw; } .modele-wsop .tv-wsop-bas b { font-size: 8vw; }
  .modele-wsop .tv-horloge { height: 18vw; margin: 1vh 3vw; }
}


/* Ambiance Clair pensée pour vidéoprojecteur en salle lumineuse : fond blanc, noir pur, aucun gris clair,
   traits francs, textes secondaires plus gros et plus gras. */
.ambiance-clair .tv-panneau { background: #FFFFFF; border: .2vw solid var(--ligne); }
.ambiance-clair .tv-panneau h2 { font-size: clamp(15px, 1.25vw, 30px); border-bottom: .2vw solid var(--ligne); }
.ambiance-clair .tv-club, .ambiance-clair .tv-date { font-weight: 700; }
.ambiance-clair .tv-date { font-size: .9em; }
.ambiance-clair .tv-info > span { font-size: clamp(15px, 1.55vw, 36px); font-weight: 800; }
.ambiance-clair .tv-niveau, .ambiance-clair .tv-statut { font-weight: 800; font-size: max(1em, clamp(22px, 2.4vw, 58px)); }
.ambiance-clair .tv-suivant-boite span { font-size: clamp(14px, 1.3vw, 30px); font-weight: 800; }
.ambiance-clair .tv-structure th { font-size: .85em; font-weight: 800; color: var(--texte); }
.ambiance-clair .tv-structure td { font-weight: 700; }
.ambiance-clair .tv-structure td:first-child { color: var(--texte); }
.ambiance-clair .tv-pied { font-size: clamp(13px, 1vw, 22px); font-weight: 700; color: var(--texte); border-top: .2vw solid var(--ligne); }
.ambiance-clair .sorti { opacity: 1; text-decoration: line-through; }
.ambiance-clair .tv-plan-table li.vide, .ambiance-clair .tv-plan-table li.absent { opacity: .8; }

/* Logo Winamax à droite d'un lot en ticket Winamax */
.tv-lots-liste li { align-items: center; }
.tv-lot-winamax { height: 2.2vw; width: 2.2vw; margin-left: auto; border-radius: .4vw; object-fit: contain; }

/* Cadran : le texte d'une pause (« Pause - Chip race 500 ») restait sur une ligne et passait derrière la liste des joueurs.
   Les boîtes du niveau ont une largeur limitée à leur colonne et le texte revient à la ligne ; la taille s'adapte à un texte long. */
.modele-cadran .tv-niveau-boite, .modele-cadran .tv-suivant-boite { min-width: 0; max-width: 100%; }
.modele-cadran .tv-niveau-titre { letter-spacing: .18em; overflow-wrap: anywhere; }
.modele-cadran .tv-blindes { white-space: normal; overflow-wrap: anywhere; max-width: 100%; font-size: min(9vh, 4.4vw); line-height: 1.08; }
