/* ===========================================================================
   TC Plonéour — « Néo-sport clair », aux COULEURS DU CLUB
   Logo : jaune doré + cyan + charbon. Fond clair froid, cartes blanc pur,
   accent jaune (action) + cyan (Plonéour). Typo MESURÉE, raffinée.
   Habillage « ambiance tennis » : filigrane de court en fond + balle dans le
   hero + lignes de court en touches discrètes. (SVG inline, aucun asset.)
   =========================================================================== */
@font-face{font-family:'Inter';font-style:normal;font-weight:100 900;
  font-display:swap;src:url('/static/inter.woff2') format('woff2')}

:root{
  /* Surfaces — blanc pur ; bordures/appuis légèrement teintés cyan (club) */
  --paper:#ffffff; --paper-2:#eef4f8; --surface:#ffffff;
  /* Encre = charbon du logo */
  --ink:#23242a; --ink-2:#3c3e46; --muted:#6b6e75; --faint:#767a82;
  --line:#dce7ef; --line-soft:#eef4f8;
  --line-hover:#bfdcec;
  --edge:#1c1f26;   /* bordure de carte NOIRE (délimitation franche) */
  /* Couleurs CLUB */
  --yellow:#ffd200; --yellow-d:#f1c200; --yellow-ink:#8a6800; --yellow-soft:#fff4c2;
  --cyan:#22b0e6; --cyan-d:#1192c6; --cyan-ink:#0f6e96; --cyan-soft:#dcf4fc;
  --charcoal:#58595b;
  --live:#ff2d55; --live-d:#e11d48; --live-soft:#ffe1e8;
  /* Ambiance TENNIS — vert court & jaune balle (touches, jamais dominantes) */
  --court:#3fa37a; --court-ink:#1f7a55; --ball:#d6e84f; --ball-d:#bcd234;
  /* Filigrane de court (lignes claires teintées cyan) en fond de page */
  --court-img:url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2078%2036'%20fill='none'%20stroke='%23a9c8df'%20stroke-width='0.5'%3E%3Crect%20x='0.6'%20y='0.6'%20width='76.8'%20height='34.8'/%3E%3Cline%20x1='0.6'%20y1='4.6'%20x2='77.4'%20y2='4.6'/%3E%3Cline%20x1='0.6'%20y1='31.4'%20x2='77.4'%20y2='31.4'/%3E%3Cline%20x1='21'%20y1='4.6'%20x2='21'%20y2='31.4'/%3E%3Cline%20x1='57'%20y1='4.6'%20x2='57'%20y2='31.4'/%3E%3Cline%20x1='21'%20y1='18'%20x2='57'%20y2='18'/%3E%3Cline%20x1='39'%20y1='0.6'%20x2='39'%20y2='35.4'%20stroke-width='0.9'/%3E%3C/svg%3E");
  /* Balle de tennis (dégradé optique + couture blanche) pour le hero */
  --ball-img:url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20100%20100'%3E%3Cdefs%3E%3CradialGradient%20id='g'%20cx='38%25'%20cy='32%25'%20r='78%25'%3E%3Cstop%20offset='0'%20stop-color='%23eef79a'/%3E%3Cstop%20offset='1'%20stop-color='%23c2d63f'/%3E%3C/radialGradient%3E%3C/defs%3E%3Ccircle%20cx='50'%20cy='50'%20r='47'%20fill='url(%23g)'/%3E%3Cpath%20d='M16%2016%20Q45%2050%2016%2084'%20fill='none'%20stroke='%23fff'%20stroke-width='4'%20stroke-linecap='round'/%3E%3Cpath%20d='M84%2016%20Q55%2050%2084%2084'%20fill='none'%20stroke='%23fff'%20stroke-width='4'%20stroke-linecap='round'/%3E%3C/svg%3E");
  /* Forme */
  --r:15px; --r-lg:20px; --r-sm:11px; --pill:999px;
  /* Ombres légèrement teintées cyan (sobre, basse opacité) */
  --sh-sm:0 1px 2px rgba(18,110,150,.10),0 4px 12px rgba(18,110,150,.12);
  --sh:0 5px 14px rgba(18,110,150,.10),0 18px 40px rgba(18,110,150,.13);
  --sh-pop:0 6px 16px rgba(255,200,0,.30);
  --sh-cyan:0 6px 16px rgba(34,176,230,.26);
  /* Ombres NOIRES des cartes (détachent les cartes sur fond blanc) */
  --sh-card:0 1px 2px rgba(0,0,0,.12),0 14px 34px -8px rgba(0,0,0,.40),0 6px 14px -6px rgba(0,0,0,.22);
  --sh-card-h:0 2px 5px rgba(0,0,0,.14),0 30px 62px -10px rgba(0,0,0,.52),0 12px 26px -8px rgba(0,0,0,.30);
  /* Dégradés de marque — pour donner du PEPS (héros, en-têtes, titres) */
  --grad:linear-gradient(100deg,var(--yellow),var(--cyan));
  --grad-soft:linear-gradient(120deg,#fff6cf 0%,#ffffff 46%,#dcf2fc 100%);
  --head:linear-gradient(102deg,#ffffff 0%,#e6f6fd 48%,#c2eafa 100%);  /* en-tête clair blanc→cyan */
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}
::selection{background:var(--yellow);color:var(--ink)}
body{
  margin:0;color:var(--ink);
  /* Fond BLANC : les cartes ressortent par leurs ombres noires + liserés. */
  background:#ffffff;
  font-family:'Inter',-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;
  font-size:15px;line-height:1.55;font-weight:430;letter-spacing:-.004em;
  -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;
  min-height:100vh;display:flex;flex-direction:column;
}
a{color:var(--cyan-ink);text-decoration:none;font-weight:600}
a:hover{color:var(--cyan-d)}
img{max-width:100%;display:block}
h1{margin:0;font-size:clamp(1.45rem,3vw,2rem);font-weight:750;
  letter-spacing:-.022em;line-height:1.08}
h2{margin:0;font-size:1rem;font-weight:720;letter-spacing:-.012em}
h3{margin:0 0 .7rem;font-size:.9rem;font-weight:700;letter-spacing:-.008em}
.kicker{margin:0 0 .45rem;text-transform:uppercase;letter-spacing:.13em;
  font-size:.69rem;font-weight:750;color:var(--cyan-ink)}
code{background:var(--paper-2);padding:1px 6px;border-radius:6px;font-size:.85em;
  font-weight:600}

/* ---- Lien d'évitement clavier (a11y) ------------------------------------ */
.skip{position:fixed;left:8px;top:-60px;z-index:100;background:var(--ink);color:#fff;
  padding:.55rem .9rem;border-radius:var(--r-sm);font-weight:700;transition:top .15s}
.skip:focus{top:8px}

/* ---- Header ------------------------------------------------------------- */
.topbar{position:sticky;top:0;z-index:30;display:flex;align-items:center;
  justify-content:space-between;gap:1rem;padding:.65rem clamp(1rem,4vw,2rem);
  background:rgba(18,21,26,.93);-webkit-backdrop-filter:saturate(170%) blur(16px);
  backdrop-filter:saturate(170%) blur(16px);border-bottom:1px solid rgba(34,176,230,.35)}
.topbar::before{content:"";position:absolute;left:0;right:0;top:0;height:3px;
  background:linear-gradient(90deg,var(--yellow),var(--cyan))}
.brand{display:inline-flex;align-items:center;background:#fff;padding:.3rem .55rem;
  border-radius:12px;box-shadow:0 2px 10px rgba(0,0,0,.32);transition:transform .2s,box-shadow .2s}
.brand img{height:26px;width:auto;display:block}
.brand:hover{transform:translateY(-1px);box-shadow:0 5px 16px rgba(0,0,0,.4)}
.nav{display:flex;flex-wrap:wrap;align-items:center;gap:.2rem}
.nav a{color:rgba(255,255,255,.82);padding:.42rem .74rem;border-radius:var(--pill);
  font-size:.86rem;font-weight:650;transition:.15s;letter-spacing:-.008em}
.nav a:hover{color:#fff;background:rgba(255,255,255,.13)}
.nav a.active{color:#fff;background:rgba(34,176,230,.30);box-shadow:0 0 0 1px rgba(34,176,230,.45) inset}
/* Bouton secondaire distinct (Bénévoles / Déconnexion / Portail) : pastille
   contournée, détachée de la nav par une marge — au lieu d'un lien collé au bord. */
.nav a.ghost,.nav button.ghost{margin-left:.6rem;color:rgba(255,255,255,.82);
  border:1px solid rgba(255,255,255,.22);background:rgba(255,255,255,.05)}
.nav a.ghost:hover,.nav button.ghost:hover{color:#fff;background:rgba(34,176,230,.20);
  border-color:rgba(34,176,230,.55)}
/* « En direct » = accès mis en avant vers le mur des 2 terrains (score temps réel). */
.nav a.live{color:#fff;background:rgba(255,59,95,.16);
  box-shadow:0 0 0 1px rgba(255,59,95,.55) inset;font-weight:800;
  display:inline-flex;align-items:center;gap:.4rem}
.nav a.live:hover{background:rgba(255,59,95,.28)}
.nav a.live::before{content:"";width:.5rem;height:.5rem;border-radius:50%;
  background:#ff3b5f;box-shadow:0 0 0 3px rgba(255,59,95,.25);animation:navlive 1.3s infinite}
.nav a.live.active{background:rgba(255,59,95,.30)}
@keyframes navlive{0%,100%{opacity:.35}50%{opacity:1}}
@media (prefers-reduced-motion:reduce){.nav a.live::before{animation:none}}
/* Déconnexion = formulaire POST : le bouton reprend le rendu exact du lien. */
.nav .nav-form{display:contents}
.nav button.ghost{padding:.42rem .74rem;border-radius:var(--pill);font-size:.86rem;
  font-weight:650;transition:.15s;letter-spacing:-.008em;box-shadow:none}

.wrap{flex:1;width:100%;max-width:1000px;margin:clamp(1.2rem,3.5vw,2.2rem) auto;
  padding:0 clamp(1rem,4vw,1.6rem)}
.foot{padding:2rem clamp(1rem,4vw,2.4rem) 1.4rem;border-top:1px solid var(--line);
  margin-top:2.4rem;background:linear-gradient(180deg,transparent,rgba(34,176,230,.035))}
.foot-cols{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));
  gap:1.4rem 1.2rem;max-width:1000px;margin:0 auto 1.5rem}
.foot-col{display:flex;flex-direction:column;gap:.42rem}
.foot-h{font-size:.7rem;font-weight:780;text-transform:uppercase;letter-spacing:.1em;
  color:var(--cyan-ink);margin-bottom:.25rem}
.foot-col a{color:var(--ink-2);font-weight:600;font-size:.88rem;width:fit-content;
  transition:color .15s}
.foot-col a:hover{color:var(--cyan-ink)}
.foot-bottom{display:flex;justify-content:space-between;gap:.6rem;flex-wrap:wrap;
  align-items:center;max-width:1000px;margin:0 auto;padding-top:1.1rem;
  border-top:1px solid var(--line-soft);color:var(--faint);font-size:.8rem;font-weight:550}
.foot-bottom span:last-child{color:var(--cyan-ink);text-transform:uppercase;
  letter-spacing:.1em;font-size:.7rem;font-weight:700}
.foot .ver{margin-left:.45rem;color:var(--faint);font-weight:600;opacity:.7;
  text-transform:none;letter-spacing:0;font-size:.72rem}

/* ---- Bottom tab bar (portail public) ------------------------------------ */
body.with-tab{padding-bottom:calc(62px + env(safe-area-inset-bottom))}
.tabbar{position:fixed;left:0;right:0;bottom:0;z-index:40;display:flex;
  justify-content:center;background:rgba(18,21,26,.93);
  -webkit-backdrop-filter:saturate(170%) blur(16px);backdrop-filter:saturate(170%) blur(16px);
  border-top:1px solid rgba(34,176,230,.35);box-shadow:0 -6px 22px rgba(0,0,0,.28);
  padding:.32rem .4rem calc(.32rem + env(safe-area-inset-bottom))}
.tabbar::before{content:"";position:absolute;left:0;right:0;top:0;height:2px;
  background:linear-gradient(90deg,var(--yellow),var(--cyan))}
.tabbar-in{display:flex;width:100%;max-width:520px}
.tab{flex:1;display:flex;flex-direction:column;align-items:center;gap:.14rem;
  padding:.42rem .2rem;color:rgba(255,255,255,.6);font-size:.72rem;font-weight:640;
  text-decoration:none;letter-spacing:.005em;transition:color .15s}
.tab .ic{display:grid;place-items:center;width:50px;height:28px;border-radius:var(--pill);
  color:rgba(255,255,255,.72);transition:background .18s,color .18s}
.tab svg{width:21px;height:21px;display:block}
.tab:hover{color:#fff}
.tab:hover .ic{background:rgba(255,255,255,.12);color:#fff}
.tab.active{color:#5cc8f0}
.tab.active .ic{background:rgba(34,176,230,.26);color:#8fdcf7;
  box-shadow:0 0 0 1px rgba(34,176,230,.4) inset}
@media(min-width:640px){
  body.with-tab{padding-bottom:94px}
  .tabbar{left:50%;right:auto;width:auto;transform:translateX(-50%);bottom:18px;
    border:1px solid rgba(255,255,255,.12);border-radius:var(--pill);
    box-shadow:0 10px 30px -6px rgba(0,0,0,.5),0 2px 6px rgba(0,0,0,.3);
    padding:.32rem .55rem}
  .tabbar::before{display:none}
  .tabbar-in{width:auto;max-width:none;gap:.1rem}
  .tab{padding:.3rem .7rem}
}

/* ---- Hero (carte de titre, sobre) --------------------------------------- */
.hero{position:relative;margin:.2rem 0 1.5rem;overflow:hidden;
  padding:clamp(1.1rem,2.8vw,1.7rem) clamp(1.1rem,3vw,1.7rem);
  padding-right:clamp(5.5rem,16vw,8rem);
  border-radius:var(--r-lg);border:1px solid var(--line);box-shadow:var(--sh);
  background:
    radial-gradient(60% 90% at 88% 12%,rgba(34,176,230,.16),transparent 70%),
    radial-gradient(50% 80% at 6% 0%,rgba(255,210,0,.18),transparent 72%),
    linear-gradient(118deg,#fff7d6 0%,#ffffff 52%,#e6f4fd 100%)}
.hero::before{content:"";position:absolute;left:0;top:0;bottom:0;width:6px;
  background:linear-gradient(var(--yellow),var(--cyan))}
/* Balle de tennis : couture blanche, ombre douce portée sur le hero. */
.hero::after{content:"";position:absolute;right:clamp(.9rem,3vw,1.8rem);
  top:clamp(.9rem,3vw,1.6rem);width:clamp(58px,10vw,86px);aspect-ratio:1;
  border-radius:50%;pointer-events:none;background:var(--ball-img) center/contain no-repeat;
  filter:drop-shadow(0 8px 14px rgba(120,150,40,.30));animation:ball-bob 4.5s ease-in-out infinite}
@keyframes ball-bob{0%,100%{transform:translateY(0) rotate(-7deg)}
  50%{transform:translateY(-7px) rotate(5deg)}}
.hero .kicker{position:relative;display:inline-block;color:var(--cyan-ink);
  background:var(--cyan-soft);padding:.2rem .6rem;border-radius:var(--pill)}
.hero h1{position:relative;font-size:clamp(1.65rem,3.7vw,2.25rem);
  background:linear-gradient(96deg,var(--ink) 0%,var(--cyan-ink) 96%);
  -webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;
  color:transparent}
.hero-sub{position:relative;margin:.5rem 0 0;max-width:46ch;color:var(--ink-2);
  font-size:.95rem;font-weight:460;text-wrap:balance}
.hero-cta{position:relative;display:flex;flex-wrap:wrap;gap:.55rem;margin-top:1.1rem}
.cta-primary{background:linear-gradient(120deg,#ffe14d,var(--yellow) 55%,var(--yellow-d));
  color:var(--ink);border-color:var(--yellow-d);box-shadow:var(--sh-pop);font-weight:740}
.cta-primary:hover{background:var(--yellow-d);border-color:var(--yellow-d);
  transform:translateY(-1px);box-shadow:0 8px 20px rgba(255,200,0,.40)}
.hero-cta .btn:not(.cta-primary):hover{background:var(--paper-2);border-color:var(--line-hover)}

/* ---- Cartes & boutons --------------------------------------------------- */
.card{background:var(--surface);border:0;border-bottom:3.5px solid var(--cyan);border-radius:var(--r);
  box-shadow:var(--sh-sm);padding:clamp(1rem,2.4vw,1.5rem)}
.narrow{max-width:400px;margin:clamp(2.4rem,8vw,5rem) auto}
/* Bord supérieur : NOIR au repos, le dégradé jaune→cyan se révèle au survol
   (la couche noire — au-dessus — se rétracte de gauche à droite). */
.board,.card,.info-card,.cat-card,.sponsor,.match-card,.fx{position:relative;overflow:hidden}
.board::before,.card::before,.info-card::before,.cat-card::before,.sponsor::before,
.match-card::before,.fx::before{
  content:"";position:absolute;left:0;right:0;top:0;height:4px;z-index:2;
  background:linear-gradient(#14171c,#14171c),var(--grad);
  background-repeat:no-repeat;background-size:100% 100%,100% 100%;
  background-position:right top,left top;
  transition:background-size .45s cubic-bezier(.2,.8,.2,1)}
.board:hover::before,.card:hover::before,.info-card:hover::before,.cat-card:hover::before,
.sponsor:hover::before,.match-card:hover::before,.fx:hover::before{background-size:0% 100%,100% 100%}

button,.btn{cursor:pointer;font:inherit;font-weight:680;border:1.5px solid var(--line);
  background:#fff;color:var(--ink);padding:.55rem .95rem;border-radius:var(--pill);
  transition:.15s;line-height:1.2;letter-spacing:-.008em}
button:hover{background:var(--paper-2);border-color:var(--line-hover)}
button:active{transform:translateY(1px)}
button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,
textarea:focus-visible,summary:focus-visible,[tabindex]:focus-visible{
  outline:2.5px solid var(--cyan-ink);outline-offset:2px}
/* sur fond cyan-ink (bandeaux), un liseré blanc reste visible */
.mc-head :focus-visible,.fx-top :focus-visible{outline-color:var(--cyan-ink)}
button.small{padding:.42rem .8rem;font-size:.83rem;min-height:38px}
button[type=submit]{background:linear-gradient(120deg,#ffe14d,var(--yellow) 55%,var(--yellow-d));
  color:var(--ink);border-color:var(--yellow-d);box-shadow:var(--sh-pop);font-weight:740}
button[type=submit]:hover{background:var(--yellow-d);border-color:var(--yellow-d);
  transform:translateY(-1px)}
button.danger{background:#fff;color:var(--live);border-color:#ffd0d9}
button.danger:hover{background:var(--live-soft);border-color:#ffb3c2}
.err{color:var(--live);font-weight:650}
label{display:block;margin:.5rem 0;font-size:.84rem;font-weight:550;color:var(--muted)}
input,select{font:inherit}
input[type=text],input:not([type]),input[type=password],input[type=date],input[type=datetime-local],input[type=search],
select{padding:.55rem .75rem;border:1.5px solid var(--line);border-radius:var(--r-sm);
  width:100%;background:#fff;color:var(--ink);font-weight:500;transition:.15s}
input:focus,select:focus{border-color:var(--cyan);box-shadow:0 0 0 3px var(--cyan-soft)}
input::placeholder{color:#71757d}

/* ---- Grilles ------------------------------------------------------------ */
.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,300px),1fr));
  gap:1rem}
.cardlist{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,280px),1fr));
  gap:.85rem}

/* ---- Carte-score LIVE (accueil / dashboard) ----------------------------- */
.match-card{position:relative;display:flex;flex-direction:column;gap:.5rem;
  background:var(--surface);border:0;border-bottom:3.5px solid var(--cyan);border-radius:var(--r);
  padding:1.1rem 1.2rem;box-shadow:var(--sh-sm);overflow:hidden;
  transition:transform .18s cubic-bezier(.2,.8,.2,1),border-color .18s,box-shadow .18s;
  animation:rise .4s ease both}
.match-card:hover{transform:translateY(-3px);border-bottom-color:var(--cyan-d);box-shadow:var(--sh)}
.match-card.empty{background:repeating-linear-gradient(135deg,#fafbfe,#fafbfe 12px,#f0f3f9 12px,#f0f3f9 24px);
  border:1.5px dashed var(--line-hover);box-shadow:none}
.match-card.empty:hover{transform:none;border-color:var(--line)}
.match-card.empty::before{display:none}
.mc-empty{margin:.4rem 0;color:var(--faint);font-size:.9rem;font-weight:600}
.mc-head{display:flex;align-items:center;justify-content:space-between;
  margin:-1.1rem -1.2rem .7rem;padding:.55rem 1.2rem;background:var(--head);
  border:1px solid var(--line);border-bottom:2.5px solid var(--cyan)}
.mc-head .label{text-transform:uppercase;letter-spacing:.09em;font-size:.7rem;
  font-weight:780;color:var(--cyan-ink)}
.mc-head .cta{font-size:.78rem;font-weight:700;color:var(--cyan-ink)}
.mc-row{display:flex;align-items:center;gap:.7rem}
.mc-row::before{content:"";width:8px;height:20px;border-radius:4px;background:var(--acc);
  flex:none}
.mc-name{flex:1;min-width:0;font-size:1.02rem;font-weight:650;color:var(--ink);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;letter-spacing:-.015em}
.mc-cells{display:flex;gap:.4rem}
.mc-cells span{min-width:1.65rem;height:1.8rem;display:grid;place-items:center;
  font-variant-numeric:tabular-nums;font-size:1.1rem;font-weight:720;color:var(--ink-2);
  background:var(--paper-2);border-radius:8px}
.mc-cells .set{color:#fff;background:var(--ink)}
.match-card .cta{margin-top:.15rem;font-size:.8rem;font-weight:700;color:var(--cyan-ink)}

/* ---- Carte « fixture » (à venir / résultats / programme) ---------------- */
.fx{position:relative;display:flex;flex-direction:column;gap:.7rem;background:var(--surface);
  border:0;border-bottom:3.5px solid var(--cyan);border-radius:var(--r);padding:1rem 1.15rem;
  box-shadow:var(--sh-sm);overflow:hidden;
  transition:transform .18s cubic-bezier(.2,.8,.2,1),border-color .18s,box-shadow .18s;
  animation:rise .4s ease both}
.fx:hover{transform:translateY(-3px);border-bottom-color:var(--cyan-d);box-shadow:var(--sh)}
.fx-top{display:flex;align-items:center;justify-content:space-between;gap:.5rem;
  margin:-1rem -1.15rem 0;padding:.5rem 1.15rem;background:var(--head);
  border:1px solid var(--line);border-bottom:2.5px solid var(--cyan)}
/* catégorie en évidence dans le bandeau (texte blanc, tronquée si trop longue) */
.fx-cat{flex:1;min-width:0;color:var(--ink);font-weight:760;font-size:.9rem;letter-spacing:-.01em;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* badges lisibles sur le bandeau cyan (le « live » rouge reste) */
.fx-top .badge.scheduled{background:var(--cyan);color:#fff}
.fx-top .badge.finished{background:var(--charcoal);color:#fff}
.fx-meta{display:flex;align-items:center;gap:.4rem;flex-wrap:wrap;color:var(--muted);
  font-size:.8rem;font-weight:600}
/* « Terrain N » en pastille claire (plus léger que le chip sombre par défaut) */
.fx-meta .t-chip{background:var(--paper-2);color:var(--ink-2);font-weight:700;min-width:0}
.fx-when{color:var(--ink-2);font-weight:700}
.fx-meta .dot{color:var(--faint)}
.fx-teams{display:flex;flex-direction:column;gap:.5rem;border-top:1px solid var(--line-soft);
  padding-top:.8rem}
.fx-team{display:flex;align-items:center;gap:.6rem}
.fx-team::before{content:"";width:8px;height:20px;border-radius:4px;background:var(--acc);
  flex:none}
.fx-who{flex:1;min-width:0;display:flex;flex-direction:column;gap:.12rem}
.fx-name{min-width:0;font-weight:650;font-size:.98rem;letter-spacing:-.015em;
  color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fx-sub{display:flex;gap:.4rem;align-items:baseline;flex-wrap:wrap;line-height:1.1}
.fx-rank{color:var(--muted);font-size:.8rem;font-weight:680;font-variant-numeric:tabular-nums}
.fx-club{color:var(--muted);font-size:.76rem;font-weight:600;min-width:0;max-width:22ch;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fx-sub .fx-rank + .fx-club::before{content:"·";margin-right:.4rem;color:var(--line-soft,#ccc)}
.fx-score{display:flex;gap:.35rem}
/* Code couleur repris de l'overlay TV : set gagné visiteur=jaune / club=cyan,
   set neutre (en cours / perdu) = crème. */
.fx-score span{min-width:1.55rem;height:1.75rem;display:grid;place-items:center;
  font-weight:750;font-variant-numeric:tabular-nums;font-size:1rem;border-radius:9px;
  color:#343639;background:linear-gradient(#f6f2ec,#e7e1d9);border:1px solid #d0c8be}
.fx-score span.fx-set-v{background:linear-gradient(#f9d24a,#f7c300);color:#2c2c2c;border-color:#d9ab00}
.fx-score span.fx-set-c{background:linear-gradient(#5cc3e0,#2eb0d6);color:#fcfcfc;border-color:#1f93b6}
/* WO / ab / ST : libellé, pas une case de score */
.fx-score span.fx-x{min-width:auto;padding:0 .5rem;font-size:.72rem;font-weight:800;
  letter-spacing:.03em;color:var(--muted);background:transparent;border:1px solid var(--line)}
/* placeholder invisible (même largeur que le marqueur) → aligne les sets des 2 côtés */
.fx-score span.fx-x-ghost{visibility:hidden}
/* carte cliquable → page détail du match : lien-overlay couvrant ; les noms de
   joueurs (liens vers leur fiche) restent cliquables au-dessus. */
.fx-link{position:absolute;inset:0;z-index:1}
.fx-name,.fx-ics,.fx-cat-link{position:relative;z-index:2}
/* catégorie cliquable → tableau (au-dessus du lien-overlay de la carte) */
a.fx-cat-link{text-decoration:none;color:var(--ink)}
a.fx-cat-link:hover{color:var(--cyan-ink);text-decoration:underline}

/* ---- Page détail d'un match (score, stats, momentum, moments, vidéo) ----- */
.match-head{margin:.2rem 0 1.2rem}
.match-title{display:flex;align-items:center;gap:.7rem;flex-wrap:wrap;margin:0 0 .7rem;
  font-size:clamp(1.3rem,3.4vw,2rem);line-height:1.15}
.mt-side{font-weight:800;border-left:5px solid var(--acc);padding-left:.55rem}
.mt-side.win{color:color-mix(in srgb,var(--acc) 62%,#181818)}   /* accent lisible en texte (jaune vif -> or foncé) */
a.mt-side{color:var(--ink);text-decoration:none}
a.mt-side:hover{text-decoration:underline;text-decoration-color:var(--acc)}
.mt-vs{font-size:.6em;font-weight:700;color:var(--muted);letter-spacing:.04em}
.match-meta{display:flex;align-items:center;gap:.55rem;flex-wrap:wrap;color:var(--muted);
  font-weight:650;font-size:.9rem}
.match-meta .mm{color:var(--ink-2)}
.match-meta .sec-link{margin-left:auto}
.fx-team.win .fx-name{color:var(--yellow-ink)}
.fx-trophy{margin-left:.15rem}

/* ---- Programme : frise agenda verticale --------------------------------- */
.agenda{position:relative;display:flex;flex-direction:column;margin-top:1.2rem;--rail:1.8rem}
.slot{position:relative;padding:0 0 1.8rem var(--rail);border-left:2px solid var(--line)}
.slot:last-child{padding-bottom:.3rem}
.slot-time{display:flex;align-items:baseline;gap:.55rem;flex-wrap:wrap;
  margin-bottom:.9rem;position:relative}
.slot-time::before{content:"";position:absolute;left:calc(-1 * var(--rail) + 1px);top:.5rem;
  transform:translate(-50%,-50%);width:13px;height:13px;border-radius:50%;
  background:#fff;border:3px solid var(--cyan);box-shadow:0 0 0 4px var(--cyan-soft);z-index:1}
.st-h{font-size:1.2rem;font-weight:740;letter-spacing:-.02em;line-height:1;color:var(--ink)}
.st-h.label{font-size:1rem}
.st-d{font-size:.78rem;font-weight:680;color:var(--muted);text-transform:uppercase;
  letter-spacing:.06em}
.slot.is-live .slot-time::before{border-color:var(--live);box-shadow:0 0 0 4px var(--live-soft);
  animation:pulse 1.3s infinite}
.slot.is-live .st-h{color:var(--live)}
.slot-cards{display:grid;gap:.85rem;grid-template-columns:repeat(var(--cols,1),minmax(0,1fr))}
.slot-cards:has(.fx:only-child){max-width:420px}
.slot.is-past .slot-time::before{border-color:var(--faint);background:#fff;
  box-shadow:0 0 0 4px var(--line-soft)}
.slot.is-past .st-h{color:var(--muted)}

/* ---- Programme : barre de dates ----------------------------------------- */
.datebar{display:flex;align-items:center;justify-content:space-between;gap:1rem;
  padding:.7rem .9rem;margin-bottom:1rem}
.daynav{display:inline-grid;place-items:center;width:44px;height:44px;border-radius:50%;
  border:1.5px solid var(--line);background:#fff;font-size:1.2rem;font-weight:700;
  color:var(--ink);flex:none;text-decoration:none;transition:.15s;line-height:1}
.daynav:hover{background:var(--cyan-soft);border-color:var(--cyan);color:var(--cyan-ink);
  transform:translateY(-1px)}
.daynav.disabled{opacity:.3;pointer-events:none}
.daybar-center{display:flex;flex-direction:column;align-items:center;gap:.45rem;
  text-align:center;min-width:0}
.day-big{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap;justify-content:center;
  font-size:1.1rem;font-weight:740;letter-spacing:-.015em}
.day-today{font-size:.62rem;font-weight:780;text-transform:uppercase;letter-spacing:.07em;
  background:var(--yellow);color:var(--ink);padding:.14rem .45rem;border-radius:var(--pill)}
.daybar-tools{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap;justify-content:center}
.dateform{margin:0}
.dateform input[type=date]{width:auto;padding:.3rem .65rem;border-radius:var(--pill);
  border:1.5px solid var(--line);background:#fff;color:var(--ink-2);font-weight:600;
  font-size:.84rem;cursor:pointer}
.dateform input[type=date]:focus{border-color:var(--cyan);box-shadow:0 0 0 3px var(--cyan-soft)}

/* ---- Programme : pastilles de dates ------------------------------------- */
.datechips{display:flex;gap:.45rem;overflow-x:auto;padding:.1rem .1rem .6rem;
  margin-bottom:1.1rem;scrollbar-width:thin}
.datechips .chip{flex:none;display:inline-flex;align-items:center;gap:.4rem;
  padding:.38rem .78rem;border-radius:var(--pill);border:1.5px solid var(--line);background:#fff;
  font-weight:680;font-size:.83rem;color:var(--ink-2);white-space:nowrap;text-decoration:none;
  transition:.15s;text-transform:capitalize}
.datechips .chip:hover{border-color:var(--cyan);background:var(--cyan-soft);color:var(--cyan-ink);
  transform:translateY(-1px)}
.datechips .chip.active{background:var(--ink);color:#fff;border-color:var(--ink)}
.datechips .chip.past:not(.active){color:var(--muted);background:var(--paper)}
.datechips .chip .n{display:inline-grid;place-items:center;min-width:1.3em;height:1.3em;
  font-size:.68rem;font-weight:740;border-radius:var(--pill);background:var(--paper-2);
  color:var(--muted);font-variant-numeric:tabular-nums}
.datechips .chip.active .n{background:rgba(255,255,255,.22);color:#fff}
/* Barre de filtres (résultats) : s'enroule, libellés non capitalisés */
.datechips.filterbar{flex-wrap:wrap;overflow:visible;padding-bottom:.2rem}
.datechips.filterbar .chip{text-transform:none}
/* Filtre par statut (page fusionnée Programme & résultats) */
.prog-status{display:flex;flex-wrap:wrap;gap:.45rem;margin:.2rem 0 1rem}
.pchip{border:1px solid var(--line);background:var(--surface);color:var(--ink-2);
  border-radius:var(--pill);padding:.42rem .85rem;font-weight:700;font-size:.86rem;cursor:pointer;
  display:inline-flex;align-items:center;gap:.4rem;transition:.15s}
.pchip:hover{border-color:var(--cyan);color:var(--cyan-ink)}
.pchip.active{background:var(--cyan);color:#fff;border-color:var(--cyan)}
.pchip .n{display:inline-grid;place-items:center;min-width:1.3em;height:1.3em;border-radius:.7em;
  background:var(--paper-2);color:var(--ink-2);font-size:.76rem}
.pchip.active .n{background:rgba(255,255,255,.24);color:#fff}
.prog-empty{margin-top:1rem}
.day-h{margin:1.5rem 0 .85rem;font-size:1.1rem;font-weight:740;letter-spacing:-.02em;
  color:var(--ink);display:flex;align-items:center;gap:.6rem}
.day-h::after{content:"";flex:1;height:2px;border-radius:2px;
  background:linear-gradient(90deg,var(--line),transparent)}

/* ---- Sélecteur de catégorie (boutons : un tableau par page) ------------- */
.tab-switch{display:flex;flex-wrap:wrap;gap:.5rem;margin:.2rem 0 1.3rem}
.tsw{display:inline-flex;align-items:center;padding:.5rem .95rem;border-radius:var(--pill);
  font-weight:720;font-size:.88rem;color:var(--ink-2);background:#fff;border:1.5px solid var(--line);
  box-shadow:var(--sh-card);text-decoration:none;transition:transform .15s,box-shadow .15s,border-color .15s,color .15s}
.tsw:hover{border-color:var(--cyan);color:var(--cyan-ink);transform:translateY(-1px)}
.tsw.active{background:var(--cyan);color:#fff;border-color:var(--cyan);box-shadow:var(--sh-cyan)}
/* onglet d'une catégorie où joue le joueur cherché : bordure jaune en évidence */
.tsw.has-player{border-color:var(--yellow-d);box-shadow:0 0 0 2px var(--yellow-soft)}
.tsw.active.has-player{box-shadow:var(--sh-cyan),0 0 0 2px var(--yellow-d)}
/* recherche de joueur sur la page Tableaux */
/* Chercheur de joueur : SOUS les toggles, centré et mis en évidence. */
.tab-search{display:flex;gap:.55rem;align-items:center;justify-content:center;
  flex-wrap:wrap;margin:1.05rem 0 1.4rem}
.tab-search select{flex:0 1 440px;min-width:260px;max-width:min(92vw,460px);
  padding:.62rem 1rem;font-size:.98rem;font-weight:640;
  border-radius:var(--pill);border:1.5px solid var(--cyan-d);
  background:var(--cyan-soft);color:var(--cyan-ink);box-shadow:var(--sh-card);
  text-align:center;text-align-last:center;cursor:pointer}
.tab-search select:hover{border-color:var(--cyan)}
.tab-search select:focus{outline:none;border-color:var(--cyan);box-shadow:0 0 0 3px var(--cyan-soft)}
.tab-search-clear{font-size:.85rem;font-weight:700;color:var(--muted);text-decoration:none;white-space:nowrap}
.tab-search-clear:hover{color:var(--live-d)}
.tab-search-none{text-align:center}
/* parcours du joueur surligné dans le bracket */
.bk-node.is-hl{z-index:4}
.bk-node.is-hl .bk-lab{outline:2.5px solid var(--yellow-d);outline-offset:2px;border-radius:7px;
  background:var(--yellow-soft)}
.bk-node.is-hl .bk-nm{color:var(--ink)}
/* Parcours du joueur : matchs terminés colorés — vert (gagné) / rouge (perdu).
   Les matchs à venir gardent le surlignage jaune neutre. */
.bk-node.is-hl.hl-win .bk-lab{outline-color:#16a34a;background:rgba(22,163,74,.16)}
.bk-node.is-hl.hl-loss .bk-lab{outline-color:#dc2626;background:rgba(220,38,38,.14)}

/* ---- Poule (round-robin : tableau croisé + classement) ----------------- */
.tsw-badge{font-size:.6rem;font-weight:800;text-transform:uppercase;letter-spacing:.04em;background:var(--yellow);color:#4a3b00;padding:.05rem .32rem;border-radius:5px;margin-right:.15rem}
.poule{margin-top:.2rem}
.pl-head{display:flex;justify-content:space-between;align-items:baseline;gap:1rem;flex-wrap:wrap}
.pl-prog{font-size:.85rem;font-weight:730;color:var(--cyan-ink)}
.pl-key{font-weight:750;padding:.02rem .32rem;border-radius:5px}
.pl-key.win{background:#dcf3e6;color:#1a7a44}
.pl-key.loss{background:#fbe1e4;color:#b52a38}
.pl-scroll{overflow-x:auto;margin:.6rem 0 .2rem;-webkit-overflow-scrolling:touch}
.pl-grid{border-collapse:separate;border-spacing:0;width:100%;min-width:min(620px,100%);font-size:.9rem;background:var(--surface);table-layout:fixed}
.pl-grid th,.pl-grid td{padding:.5rem .4rem;text-align:center;border-bottom:1px solid var(--line);white-space:nowrap;overflow:hidden}
.pl-c-stat,.pl-v,.pl-num{border-left:1px solid var(--line)}   /* délimite les colonnes stats V | Sets | Jeux */
.pl-grid thead th{font-size:.72rem;font-weight:800;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;border-bottom:2px solid var(--line)}
.pl-c-rank{width:2.6rem}
.pl-c-name{text-align:left;width:13.5rem}
.pl-c-vs{color:var(--cyan-ink);width:4.6rem}
.pl-c-stat{width:3.4rem}
.pg-rank{font-weight:820;color:var(--cyan-ink);font-variant-numeric:tabular-nums}
.pg-name{text-align:left}
.pg-name a{font-weight:730;color:var(--ink)}
.pg-name a:hover{color:var(--cyan-ink)}
.pl-rk{margin-left:.3rem;font-size:.72rem;font-weight:700;color:var(--cyan-ink);background:var(--cyan-soft);padding:.03rem .34rem;border-radius:5px}
.pl-club{display:block;font-size:.7rem;color:var(--muted);font-weight:600;white-space:normal}
.pl-cell{font-variant-numeric:tabular-nums;font-weight:680;white-space:normal;font-size:.82rem;line-height:1.16}
.pl-cell.is-self{background:repeating-linear-gradient(45deg,#eef3f6,#eef3f6 4px,#e4ecf1 4px,#e4ecf1 8px)}
.pl-cell.is-win{background:#e7f6ee}
.pl-cell.is-win .pl-sc{color:#17773f;font-weight:820}
.pl-cell.is-loss{background:#fdeef0}
.pl-cell.is-loss .pl-sc{color:#b52a38;font-weight:700}
.pl-cell.is-sched{color:var(--faint)}
.pl-cell.is-live{background:#fff0f2}
.pl-livedot{color:#e5343f;font-size:.8rem;animation:navlive 1.3s infinite}
.pl-sc{white-space:nowrap;text-decoration:none}
.pl-none{color:var(--faint);opacity:.5}
.pl-grid thead .pl-c-stat{background:var(--paper-2)}   /* bloc stats distinct */
.pl-v{font-weight:850;color:var(--ink);font-variant-numeric:tabular-nums;background:var(--paper-2)}
.pl-num{font-variant-numeric:tabular-nums;color:var(--ink-2);font-weight:640}
.pl-sep{color:var(--faint);margin:0 1px}
.pl-grid tbody tr:last-child td{border-bottom:0}
.pl-grid tbody tr.pl-hl{background:#fffbe6}
.pl-grid tbody tr.pl-qual .pg-rank::after{content:" ▲";font-size:.58rem;color:#1a9a52;vertical-align:middle}
.pl-final{margin-top:1.5rem;border-top:1px solid var(--line);padding-top:1rem}
.pl-final h3{margin:0 0 .3rem}
.bracket-wrap.plain{overflow:auto;height:auto;position:relative;padding:.4rem 0}
/* ---- Tableau « fiche FFT » (positions calculées, traits absolus) -------- */
.bracket-wrap{overflow:auto;padding:.5rem 0 1rem;--bk-line:#9aa3ad}
.bracket{position:relative;font-size:.76rem;min-width:100%}
/* Bouton + scène « plein écran » (grand écran / télé du club) */
.bk-tools{display:flex;justify-content:flex-end;margin:.1rem 0 .3rem}
.bk-fsbtn{font:inherit;font-size:.85rem;font-weight:750;cursor:pointer;color:var(--ink);
  background:var(--paper-2);border:1px solid var(--line);border-radius:var(--pill);
  padding:.34rem .8rem;transition:background .15s,box-shadow .15s}
.bk-fsbtn:hover{background:var(--cyan-soft);box-shadow:var(--sh-cyan)}
.bk-fs-head{display:none}
.bk-fs-zoom,.bk-fs-hint{display:none}
/* En plein écran : la scène remplit la dalle. Titre + recherche en tête ; le
   tableau devient une TOILE qu'on déplace/zoome (transform JS sur .bracket). */
.bk-stage.is-fs{background:var(--paper);display:flex;flex-direction:column;
  padding:1.4vh 1.6vw;box-sizing:border-box}
.bk-stage.is-fs .bk-fs-head{display:flex;justify-content:space-between;align-items:center;
  gap:1rem;flex:none;margin-bottom:1vh;border-bottom:2px solid var(--line);padding-bottom:.8vh}
.bk-fs-cat{font-weight:850;font-size:clamp(1.2rem,2.6vw,2.1rem);color:var(--ink);letter-spacing:-.01em}
.bk-fs-tools{display:flex;align-items:center;gap:1rem}
.bk-fs-sel{font:inherit;font-size:clamp(.85rem,1.2vw,1.05rem);font-weight:650;color:var(--ink);
  background:var(--paper-2);border:1px solid var(--line);border-radius:var(--pill);
  padding:.4rem .8rem;max-width:min(42vw,320px)}
.bk-fs-brand{font-weight:800;font-size:clamp(.72rem,1.1vw,.95rem);color:var(--muted);
  text-transform:uppercase;letter-spacing:.05em;white-space:nowrap}
.bk-stage.is-fs .bracket-wrap{flex:1;position:relative;overflow:hidden;padding:0;
  cursor:grab;touch-action:none}
.bk-stage.is-fs .bracket-wrap.dragging{cursor:grabbing}
.bk-stage.is-fs .bracket{position:absolute;top:0;left:0;min-width:0;
  transform-origin:0 0;will-change:transform}
/* Barre de zoom (bas-droite) + astuce de navigation (bas-gauche), en plein écran */
.bk-stage.is-fs .bk-fs-zoom{display:flex;position:absolute;right:2vw;bottom:2.4vh;gap:.4rem;
  background:var(--paper);border:1px solid var(--line);border-radius:var(--pill);
  padding:.35rem;box-shadow:0 4px 16px rgba(0,0,0,.16);z-index:5}
.bk-fs-zoom button{font:inherit;font-size:1.25rem;font-weight:800;line-height:1;cursor:pointer;
  width:2.2rem;height:2.2rem;border:none;border-radius:50%;color:var(--ink);
  background:var(--paper-2);display:flex;align-items:center;justify-content:center}
.bk-fs-zoom button:hover{background:var(--cyan-soft);color:var(--cyan-ink)}
.bk-stage.is-fs .bk-fs-hint{display:block;position:absolute;left:2vw;bottom:2.8vh;
  font-size:.85rem;font-weight:650;color:var(--muted);background:var(--paper);
  border:1px solid var(--line);border-radius:var(--pill);padding:.3rem .7rem;z-index:5;
  pointer-events:none;opacity:.9}
.bk-h{position:absolute;height:0;border-top:1.5px solid var(--bk-line)}
.bk-v{position:absolute;width:0;border-left:1.5px solid var(--bk-line)}
.bk-node{position:absolute;transform:translateY(-100%)}
.bk-lab{display:inline-block;white-space:nowrap;line-height:1.16;padding:0 .4rem .12rem .4rem}
.bk-nm{font-weight:650;color:var(--ink-2);letter-spacing:-.005em}
.bk-rk{color:var(--muted);font-size:.92em;font-variant-numeric:tabular-nums}
.bk-club{display:block;font-size:.82em;color:var(--faint);text-transform:uppercase;
  letter-spacing:.02em;font-weight:600;line-height:1.1;margin-top:.02rem}
.bk-lab.win .bk-nm{color:var(--ink);font-weight:760}
/* REPÊCHAGE : le vainqueur déclare forfait pour la suite → le perdant continue.
   Le score joué reste barré discrètement, la spécification nomme le qualifié. */
.bk-lab.win.is-rep .bk-nm,.bk-lab.win.is-rep .bk-sc{color:var(--muted);text-decoration:line-through;
  text-decoration-thickness:1px;font-weight:650}
.bk-spec{display:block;white-space:nowrap;margin-top:.05rem;font-size:.8em;font-weight:750;
  color:#8a6d00;background:var(--gold,#ffd200);border-radius:5px;padding:0 .34rem;
  letter-spacing:.005em;text-decoration:none}
/* nœud du match EN DIRECT : pastille rouge + halo, pour qu'on le repère d'emblée */
.bk-lab.live{display:inline-flex;align-items:center;gap:.4rem;text-decoration:none;
  background:#fff;border:1.5px solid var(--live);border-radius:var(--pill);
  padding:.12rem .6rem;box-shadow:0 2px 9px rgba(225,29,72,.28)}
.bk-lab.live .bk-nm{color:var(--live-d);font-weight:800;text-transform:uppercase;
  letter-spacing:.05em;font-size:.78em}
.bk-lab.live .bk-sc{color:var(--ink);font-weight:760}
.bk-live-dot{width:.5em;height:.5em;border-radius:50%;background:var(--live);flex:none;
  box-shadow:0 0 0 3px var(--live-soft);animation:pulse 1.3s infinite}
.bk-node.is-live{z-index:2}
.bk-sc{font-weight:750;color:var(--ink);font-variant-numeric:tabular-nums}
/* nœud « à venir » du tableau : cliquable pour pronostiquer */
.bk-lab.sched{text-decoration:none;border:1px dashed var(--line);border-radius:var(--pill);
  padding:.05rem .55rem;background:var(--paper)}
.bk-lab.sched .bk-nm{color:var(--muted);font-weight:700;font-size:.82em;font-style:italic}
.bk-lab.sched .bk-sc{color:var(--muted);font-weight:600;font-size:.82em}
.bk-lab.sched:hover{border-color:var(--cyan);border-style:solid}
/* nœud résultat (match terminé) : cliquable → détail du match */
.bk-lab.win{text-decoration:none;color:inherit;border-radius:6px;transition:background .12s}
.bk-lab.win:hover{background:var(--cyan-soft)}
/* feuille (entrant) cliquable → fiche joueur */
.bk-lab.leaf-link{text-decoration:none;color:inherit;border-radius:6px;transition:background .12s}
.bk-lab.leaf-link:hover{background:var(--cyan-soft)}
.bk-seed{display:inline-grid;place-items:center;width:14px;height:14px;
  border:1.3px solid var(--ink-2);border-radius:50%;font-size:.62em;font-weight:800;
  color:var(--ink-2);margin-right:.1rem;vertical-align:.08em}

@media(max-width:760px){
  .agenda{--rail:1.4rem}
  .st-h{font-size:1.08rem}
  .slot-cards{grid-template-columns:1fr}
  .day-big{font-size:1rem}
  .daynav{width:44px;height:44px}
}

/* ---- Sections ----------------------------------------------------------- */
h2.sec{display:flex;align-items:center;gap:.7rem;margin:2.6rem 0 1.1rem;font-size:.82rem;
  text-transform:uppercase;letter-spacing:.13em;color:var(--ink);font-weight:800;
  padding-top:1.4rem;border-top:2.5px solid var(--charcoal)}
h2.sec::before{content:"";width:26px;height:7px;border-radius:5px;flex:none;
  background:var(--grad);box-shadow:var(--sh-cyan)}
.sec.sec-live::before{width:11px;height:11px;border-radius:50%;background:var(--live);
  box-shadow:0 0 0 4px var(--live-soft);animation:pulse 1.3s infinite}
.sec-head{display:flex;align-items:center;justify-content:space-between;gap:1rem;
  margin:2.6rem 0 1.1rem;padding-top:1.4rem;border-top:2.5px solid var(--charcoal)}
.sec-head .sec{margin:0;padding:0;border:0}
.sec-head.no-sep,h2.sec.no-sep{border-top:0;padding-top:0;margin-top:.4rem}
.sec-link{font-size:.76rem;font-weight:700;color:var(--cyan-ink);white-space:nowrap;flex:none}
.sec-link:hover{color:var(--cyan-d)}
.muted{color:var(--muted)}
.vs{color:var(--faint);margin:0 .3rem;font-weight:650}

/* ---- Tableaux (admin : gestion) ----------------------------------------- */
.list{width:100%;border-collapse:collapse}
.list.slim td{padding:.72rem .25rem;border-bottom:1px solid var(--line-soft);
  vertical-align:middle}
.list.slim tr:last-child td{border-bottom:0}
.list.slim tr{transition:background .15s}
.list.slim tbody tr:hover,.list.slim tr:hover{background:var(--cyan-soft)}
.t-chip,.list.slim .t{color:#fff;background:var(--ink);font-weight:760;font-size:.72rem;
  border-radius:7px;padding:.14rem .45rem;display:inline-block;min-width:2.1em;
  text-align:center;letter-spacing:.02em}
/* phase de tableau (Finale, 1/4…) : pastille dorée, écho du badge overlay */
.t-chip.t-tour{background:linear-gradient(180deg,#ffdd55,#f5c400);color:#3a2e00;text-transform:uppercase}
/* terrain pas encore attribué (matchs à venir) : pastille atténuée, jamais un n° */
.t-chip.t-tbd{background:transparent;color:var(--muted);font-weight:650;font-style:italic;
  border:1px dashed var(--line);letter-spacing:0}
.fx-meta .t-chip.t-tbd{background:transparent}
.list.slim .when{color:var(--muted);font-size:.85rem;font-weight:550;white-space:nowrap}
.list.slim .win{color:var(--yellow-ink);font-weight:720}
.list.slim .score-sm{font-weight:760;font-variant-numeric:tabular-nums;
  letter-spacing:.03em;white-space:nowrap}

.list:not(.slim){border:1.5px solid var(--line);border-radius:var(--r);overflow:hidden;
  background:#fff;box-shadow:var(--sh-sm)}
.list:not(.slim) th{background:var(--paper);text-align:left;font-size:.7rem;
  color:var(--muted);text-transform:uppercase;letter-spacing:.08em;padding:.8rem 1.1rem;
  font-weight:740;border-bottom:1.5px solid var(--line)}
.list:not(.slim) td{padding:.95rem 1.1rem;border-top:1px solid var(--line-soft);
  vertical-align:middle;font-weight:500}
.list:not(.slim) tbody tr:first-child td{border-top:0}
.list:not(.slim) tbody tr{transition:background .15s}
.list:not(.slim) tbody tr:hover{background:var(--paper)}
/* Tri des tables (sortable.js) : entêtes cliquables + indicateur ▲▼ */
th.th-sort{cursor:pointer;user-select:none;white-space:nowrap}
th.th-sort::after{content:"⇅";opacity:.3;margin-left:.4em;font-weight:700}
th.th-sort:hover{color:var(--ink)}
th.sort-asc::after,th.sort-desc::after{opacity:.9}
th.sort-asc::after{content:"▲"}
th.sort-desc::after{content:"▼"}
.list tr.st-live{background:var(--live-soft)}
.list tr.st-live:hover{background:#ffd6df}
.list .act{display:flex;gap:.45rem;flex-wrap:wrap;justify-content:flex-end;align-items:center;
  min-width:300px}
.list .act form{display:inline-flex;gap:.35rem;margin:0;align-items:center}
/* tous les contrôles d'action à la MÊME hauteur → l'amas s'aligne proprement,
   même quand il passe sur deux lignes (au lieu de boutons en escalier). */
.list .act .edit,.list .act button,.list .act select{min-height:38px}
.act a.edit{display:inline-flex;align-items:center;padding:.42rem .8rem;font-size:.83rem;
  font-weight:680;line-height:1.2;border:1.5px solid var(--line);border-radius:var(--pill);
  background:#fff;color:var(--cyan-ink);text-decoration:none;transition:.15s}
.act a.edit:hover{background:var(--cyan-soft);border-color:var(--line-hover)}
.act .finish select{max-width:138px}
/* suppression = bouton-icône rond et détaché (cohérent avec la table des directs) */
.act button.danger{width:38px;height:38px;padding:0;border-radius:50%;font-size:.95rem;
  display:inline-grid;place-items:center;flex:none}

/* ---- Connexion bénévoles : carte centrée, bouton pleine largeur ---------- */
.login-card{max-width:380px}
.login-sub{margin:.15rem 0 1.3rem;color:var(--muted);font-weight:500;font-size:.92rem}
.login-form label{margin:0 0 .2rem}
.login-form button[type=submit]{width:100%;margin-top:1.1rem;padding:.72rem;font-size:1rem}

/* ---- Programme admin : barre d'actions + filtres + sections par jour ----- */
.adm-toolbar{display:flex;gap:.6rem;flex-wrap:wrap;align-items:center;margin:.3rem 0 1.3rem}
.adm-toolbar .btn{font-size:.88rem}
.adm-tb-form{margin:0;display:inline-flex}

.adm-filters{display:flex;gap:.7rem 1.3rem;align-items:center;flex-wrap:wrap;margin:1.5rem 0 .6rem}
.filter-row{display:flex;gap:.45rem;flex-wrap:wrap;align-items:center}
/* filtre catégorie compact (menu déroulant au lieu de 14 pastilles) */
.filter-cat{display:inline-flex;align-items:center;gap:.5rem;margin:0;font-size:.72rem;
  font-weight:740;text-transform:uppercase;letter-spacing:.05em;color:var(--muted)}
.filter-cat select{width:auto;min-width:170px;padding:.42rem .8rem;font-size:.84rem;font-weight:600;
  text-transform:none;letter-spacing:0;color:var(--ink);border-radius:var(--pill)}
.chip2{display:inline-flex;align-items:center;gap:.4rem;padding:.4rem .82rem;border-radius:var(--pill);
  border:1.5px solid var(--line);background:#fff;font-weight:680;font-size:.83rem;color:var(--ink-2);
  cursor:pointer;transition:.15s;white-space:nowrap;line-height:1.1}
.chip2:hover{border-color:var(--cyan);background:var(--cyan-soft);color:var(--cyan-ink)}
.chip2.active{background:var(--ink);color:#fff;border-color:var(--ink)}
.chip2 .n{display:inline-grid;place-items:center;min-width:1.35em;height:1.35em;font-size:.68rem;
  font-weight:740;border-radius:var(--pill);background:var(--paper-2);color:var(--muted);
  font-variant-numeric:tabular-nums}
.chip2.active .n{background:rgba(255,255,255,.22);color:#fff}

.adm-day{margin-top:1.5rem}
.adm-day:first-of-type{margin-top:.8rem}
/* en-tête de journée = <summary> repliable (chevron qui pivote à l'ouverture) */
summary.adm-day-h{cursor:pointer;list-style:none;display:flex;align-items:center;gap:.6rem;
  margin:0 0 .85rem;padding:.5rem .8rem;border:1.5px solid var(--line);border-radius:var(--r-sm);
  background:var(--surface);box-shadow:var(--sh-sm);font-size:1.02rem;font-weight:740;
  letter-spacing:-.02em;color:var(--ink);transition:.15s}
summary.adm-day-h::-webkit-details-marker{display:none}
summary.adm-day-h:hover{border-color:var(--cyan);background:var(--cyan-soft)}
.adm-day:not([open])>summary.adm-day-h{margin-bottom:0}
/* chevron dans une pastille = bouton de pliage évident (pivote à l'ouverture) */
summary.adm-day-h::before{content:"▸";flex:none;display:inline-grid;place-items:center;
  width:1.6em;height:1.6em;border-radius:50%;background:var(--cyan-soft);color:var(--cyan-ink);
  font-size:.78em;font-weight:800;transition:transform .15s}
.adm-day[open]>summary.adm-day-h::before{transform:rotate(90deg)}
/* libellé d'action à droite : déplier / replier */
summary.adm-day-h::after{content:"déplier";margin-left:auto;font-size:.7rem;font-weight:760;
  text-transform:uppercase;letter-spacing:.05em;color:var(--cyan-ink);white-space:nowrap}
.adm-day[open]>summary.adm-day-h::after{content:"replier"}
.adm-day-n{display:inline-grid;place-items:center;min-width:1.5em;height:1.5em;font-size:.72rem;
  font-weight:740;border-radius:var(--pill);background:var(--paper-2);color:var(--muted);
  font-variant-numeric:tabular-nums}
.adm-day-past{font-size:.64rem;font-weight:760;text-transform:uppercase;letter-spacing:.05em;
  color:var(--muted);background:var(--paper-2);border-radius:var(--pill);padding:.12rem .55rem}
.adm-empty-filter{color:var(--muted);background:var(--paper-2);border:1px dashed var(--line);
  border-radius:var(--r);padding:1rem 1.15rem;font-weight:550;margin:1rem 0}

/* ---- Programme admin : liste de cartes (remplace le tableau dense) ------- */
/* ---- Actions groupées (changer la date / supprimer plusieurs matchs) ---- */
.adm-bulk{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;margin:.2rem 0 1rem;
  padding:.55rem .8rem;border:1px dashed var(--line);border-radius:var(--r-md,12px);
  background:var(--surface)}
.adm-bulk-count{font-weight:700;color:var(--ink);font-size:.9rem}
.adm-bulk-date{max-width:170px}
.adm-bulk .btn[disabled]{opacity:.45;cursor:not-allowed}
.adm-bulk .btn.danger{border-color:rgba(224,29,46,.5);color:#c01120}
.adm-pick{width:1.15rem;height:1.15rem;flex:none;cursor:pointer;accent-color:var(--cyan)}
.adm-list{display:flex;flex-direction:column;gap:.7rem;margin-top:.4rem}
.adm-card{display:flex;align-items:center;gap:1rem;flex-wrap:wrap;
  background:var(--surface);border:1px solid var(--line);border-left:4px solid var(--cyan);
  border-radius:var(--r);box-shadow:var(--sh-card);padding:.85rem 1.15rem;
  transition:box-shadow .15s,border-color .15s}
.adm-card:hover{box-shadow:var(--sh-card-h)}
.adm-card.st-live{border-left-color:var(--live);
  background:linear-gradient(90deg,var(--live-soft),transparent 55%)}
.adm-card.st-finished{border-left-color:var(--charcoal)}
.adm-info{flex:1 1 260px;min-width:0;display:flex;flex-direction:column;gap:.4rem}
.adm-meta{display:flex;align-items:center;gap:.45rem;flex-wrap:wrap;
  font-size:.8rem;color:var(--muted);font-weight:600}
.adm-when{color:var(--ink-2);font-weight:700;font-variant-numeric:tabular-nums}
.adm-cat{color:var(--ink-2);font-weight:700}
.adm-dot{color:var(--faint)}
.adm-won{color:var(--yellow-ink);font-weight:760}
.adm-match{display:flex;align-items:baseline;gap:.7rem;flex-wrap:wrap}
.adm-players{font-size:1.05rem;font-weight:680;color:var(--ink);letter-spacing:-.015em}
.adm-players .vs{color:var(--faint);font-weight:600;margin:0 .15rem}
.adm-score{font-weight:760;font-variant-numeric:tabular-nums;color:var(--ink-2);
  background:var(--paper-2);border-radius:7px;padding:.08rem .5rem;font-size:.92rem}
.adm-actions{display:flex;gap:.45rem;align-items:center;flex-wrap:wrap;
  justify-content:flex-end;margin-left:auto}
.adm-actions form{display:inline-flex;gap:.35rem;margin:0;align-items:center}
.adm-actions .edit,.adm-actions button,.adm-actions select{min-height:38px}
.adm-actions .edit{display:inline-flex;align-items:center;padding:.42rem .8rem;font-size:.83rem;
  font-weight:680;border:1.5px solid var(--line);border-radius:var(--pill);background:#fff;
  color:var(--cyan-ink);text-decoration:none;transition:.15s}
.adm-actions .edit:hover{background:var(--cyan-soft);border-color:var(--line-hover)}
.adm-actions .finish select{max-width:138px}
.adm-actions button.primary{background:var(--cyan);border-color:var(--cyan);color:#fff}
.adm-actions button.primary:hover{background:var(--cyan-d);border-color:var(--cyan-d)}
.adm-actions button.danger{width:38px;height:38px;padding:0;border-radius:50%;font-size:.95rem;
  display:inline-grid;place-items:center;flex:none}
/* mobile/tablette : la barre d'actions passe sous l'info, pleine largeur */
@media(max-width:680px){
  .adm-card{align-items:stretch}
  .adm-actions{width:100%;justify-content:flex-start;margin:.2rem 0 0;padding-top:.7rem;
    border-top:1px solid var(--line-soft)}
  .adm-actions .finish{flex:1}
  .adm-actions .finish select{max-width:none;flex:1}
}

.row-form{display:flex;gap:.55rem;flex-wrap:wrap;align-items:center;margin-bottom:1.2rem}
.row-form input{flex:1;min-width:140px}.row-form .rank{max-width:160px}
/* vraie liste déroulante des classements (≠ autocomplétion) */
.rank-sel{min-width:96px;cursor:pointer}
/* liste déroulante extensible (clubs, catégories) : le select + le champ « Autre… »
   révélé juste en dessous quand on saisit une nouvelle valeur */
.picklist{display:flex;flex-direction:column;gap:.3rem;min-width:0}
.picklist .picklist-sel,.picklist .picklist-input{width:100%;min-width:0;flex:none}
.row-form .picklist{flex:1;min-width:140px}

/* ---- Roster joueurs (admin) -------------------------------------------- */
.pl-tools{display:flex;align-items:center;gap:.9rem;flex-wrap:wrap;margin:1.3rem 0 .7rem}
.pl-search{flex:1;min-width:200px;max-width:400px}
.pl-count{font-size:.8rem;font-weight:680;color:var(--muted);font-variant-numeric:tabular-nums;
  white-space:nowrap}
.pl-name{color:var(--ink);font-weight:680;text-decoration:none;display:inline-flex;
  align-items:baseline;gap:.25rem}
.pl-name:hover{color:var(--cyan-ink)}
.pl-ext{font-size:.72em;color:var(--faint)}
.pl-name:hover .pl-ext{color:var(--cyan-ink)}
.pl-rank{display:inline-block;font-weight:740;font-size:.8rem;color:var(--cyan-ink);
  background:var(--cyan-soft);border-radius:var(--pill);padding:.12rem .55rem;
  font-variant-numeric:tabular-nums}
.pl-n{display:inline-grid;place-items:center;min-width:1.7em;height:1.7em;font-size:.74rem;
  font-weight:740;border-radius:var(--pill);background:var(--paper-2);color:var(--ink-2);
  font-variant-numeric:tabular-nums}
.pl-empty{color:var(--muted);background:var(--paper-2);border:1px dashed var(--line);
  border-radius:var(--r);padding:1rem 1.15rem;font-weight:550;margin:.6rem 0}
/* Doublons de joueurs (fusion) */
.btn-dupes{margin-left:auto;font-size:.82rem;font-weight:680;color:#8a5b00;
  background:#ffefc2;border:1px solid #f0d488;border-radius:var(--pill);
  padding:.32rem .8rem;text-decoration:none;white-space:nowrap}
.btn-dupes:hover{background:#ffe7a0}
.dupe-list{display:flex;flex-direction:column;gap:1rem}
.dupe-group{padding:.4rem .4rem .7rem}
.dupe-table{width:100%;border-collapse:collapse;font-size:.9rem}
.dupe-table th{text-align:left;font-size:.72rem;font-weight:680;color:var(--muted);
  text-transform:uppercase;letter-spacing:.03em;padding:.4rem .6rem}
.dupe-table td{padding:.4rem .6rem;border-top:1px solid var(--line)}
.dupe-table td.dt-c{text-align:center;width:1px;white-space:nowrap}
.dupe-table td.dt-name{font-weight:640}
.dupe-act{display:flex;justify-content:flex-end;padding:.6rem .6rem 0}
/* ---- Statistiques (admin + portail public) ---- */
.stat-filters{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center;margin:1rem 0 .5rem}
.stat-filters select{width:auto;min-width:0;max-width:15rem;padding:.42rem .6rem;font-size:.85rem;
  font-weight:640;border:1.5px solid var(--line);border-radius:var(--pill);background:#fff;color:var(--ink)}
.stat-filters select:hover{border-color:var(--line-hover)}
.stat-filters .reset{font-size:.83rem;font-weight:700;color:var(--cyan-ink);white-space:nowrap}
.stat-filters .btn-sm{padding:.42rem .8rem;font-size:.85rem}
.fbadge{margin:.1rem 0 1rem;font-size:.85rem;font-weight:600;color:var(--ink-2);
  background:var(--cyan-soft);border-radius:var(--r-sm);padding:.5rem .8rem}
/* Tuiles KPI : flex qui S'ÉTIRE pour remplir chaque rangée — pas de « trou » quand
   le nombre de tuiles ne tombe pas juste sur le nombre de colonnes. */
.stat-kpis{display:flex;flex-wrap:wrap;gap:1rem;margin:1.2rem 0}
.kpi{flex:1 1 140px;background:var(--surface);border:1px solid var(--line);
  border-radius:var(--r);padding:1rem 1.1rem;box-shadow:var(--sh-sm)}
.kpi-n{font-size:2.7rem;font-weight:820;line-height:1;color:var(--ink);font-variant-numeric:tabular-nums}
.kpi-l{margin-top:.35rem;font-weight:730;color:var(--ink-2)}
.kpi-sub{margin-top:.55rem;display:flex;flex-wrap:wrap;gap:.35rem;font-size:.8rem;align-items:center}
.kpi-sub .muted{color:var(--muted);font-weight:600}
.kpi .chip{font-weight:750;border-radius:var(--pill);padding:.14rem .55rem;font-size:.73rem}
.kpi .chip.sched{background:var(--paper-2);color:var(--ink-2)}
.kpi .chip.live{background:#ffe1e1;color:#c01f2e}
.kpi .chip.done{background:var(--cyan-soft);color:var(--cyan-ink)}
.kpi-yt{border-left:4px solid #e5343f}
/* Cartes en MASONRY (colonnes) : elles se calent les unes sous les autres sans
   laisser de blanc, quelles que soient leurs hauteurs. La carte de synthèse
   « Compétitivité » (1re) s'étend sur toute la largeur en tête. */
.stat-cols{column-count:2;column-gap:1rem;margin-bottom:1rem}
.stat-cols > .stat-block{break-inside:avoid;margin:0 0 1rem}
.stat-cols > .stat-block:first-child{column-span:all}
@media(max-width:760px){.stat-cols{column-count:1}}
.stat-block{padding:1rem 1.15rem}
.barlist{display:flex;flex-direction:column;gap:.5rem;margin-top:.7rem}
.barrow{display:grid;grid-template-columns:minmax(96px,40%) 1fr auto;align-items:center;gap:.6rem}
.bl-label{font-weight:680;font-size:.9rem;color:var(--ink-2);
  white-space:normal;overflow-wrap:break-word;line-height:1.2}
.bl-track{height:.72rem;background:var(--paper-2);border-radius:var(--pill);overflow:hidden}
.bl-fill{display:block;height:100%;background:var(--yellow);border-radius:var(--pill);min-width:3px}
.bl-fill.cyan{background:var(--cyan)}
.bl-val{font-weight:790;font-variant-numeric:tabular-nums;min-width:2ch;text-align:right;color:var(--ink)}
.bl-val small{color:var(--muted);font-weight:600}
.kpi-bar{margin-top:.55rem;height:.55rem;background:var(--paper-2);border-radius:var(--pill);overflow:hidden}
.kpi-bar span{display:block;height:100%;background:var(--cyan);border-radius:var(--pill)}
.mini{display:flex;flex-direction:column;gap:.45rem;margin-top:.7rem}
.mini-row{display:flex;justify-content:space-between;align-items:baseline;gap:.7rem;
  border-bottom:1px dashed var(--line);padding-bottom:.42rem}
.mini-row:last-child{border-bottom:0;padding-bottom:0}
.mini-row .k{color:var(--ink-2);font-weight:640;font-size:.9rem}
.mini-row .v{font-weight:820;font-variant-numeric:tabular-nums;text-align:right}
.mini-row .v small{color:var(--muted);font-weight:600}
.mini-row .v.tar{font-weight:700;font-size:.88rem}
/* ---- Carte des clubs (page Stats) ---- */
.statmap{padding:1rem 1.15rem;margin-bottom:1.1rem}
.sm-head{display:flex;justify-content:space-between;align-items:flex-start;gap:1rem;flex-wrap:wrap}
.sm-sub{margin:.15rem 0 0;color:var(--muted);font-weight:600;font-size:.9rem}
.sm-sub b{color:var(--cyan-ink)}
.sm-toggle{display:inline-flex;gap:.2rem;background:var(--paper-2);border-radius:var(--pill);padding:.22rem}
.sm-toggle button{border:0;background:none;padding:.4rem .95rem;border-radius:var(--pill);font:inherit;font-weight:680;color:var(--muted);cursor:pointer;transition:.15s}
.sm-toggle button.on{background:#fff;color:var(--ink);box-shadow:0 1px 4px rgba(0,0,0,.12)}
#smMap{position:relative;overflow:hidden;max-width:600px;margin:.7rem auto 0;background:linear-gradient(180deg,#e4eef5,#d5e4ee);border:1px solid #c7d9e5;border-radius:var(--r);padding:.35rem;touch-action:none}
#smSvg{width:100%;height:auto;display:block;cursor:grab}
#smSvg.sm-drag{cursor:grabbing}
.sm-deps path{stroke:#8ba7bb;stroke-width:.7;vector-effect:non-scaling-stroke;transition:fill .2s;cursor:pointer}
.sm-deps path:hover{stroke:var(--ink);stroke-width:1.6}
.sm-labels text{font-size:11px;font-weight:800;fill:#0d5a7a;text-anchor:middle;dominant-baseline:central;paint-order:stroke;stroke:#fff;stroke-width:2.4px;pointer-events:none}
.sm-points circle{fill:var(--yellow);fill-opacity:.72;stroke:#8a6d00;stroke-width:1.2;vector-effect:non-scaling-stroke;cursor:pointer}
.sm-points circle:hover{fill-opacity:.95;stroke:var(--ink);stroke-width:2.6}
#smMap.mode-dep .sm-points{display:none}
#smMap.mode-clubs .sm-deps path{fill:#eaf0f4 !important}
#smMap.mode-clubs .sm-labels{display:none}
.sm-tip{position:absolute;z-index:6;pointer-events:none;left:0;top:0;transform:translate(-50%,calc(-100% - 12px)) scale(.96);transform-origin:bottom center;opacity:0;transition:opacity .12s,transform .12s;background:#1b1f27;color:#fff;padding:.5rem .7rem;border-radius:11px;font-size:.83rem;font-weight:640;white-space:nowrap;line-height:1.28;box-shadow:0 10px 26px rgba(15,25,35,.32)}
.sm-tip.on{opacity:1;transform:translate(-50%,calc(-100% - 12px)) scale(1)}
.sm-tip::after{content:"";position:absolute;left:50%;bottom:-5px;width:11px;height:11px;background:#1b1f27;transform:translateX(-50%) rotate(45deg);border-radius:2px}
.sm-tip b{font-weight:820;font-size:.9rem}
.sm-tip .sm-code{font-size:.7rem;font-weight:700;color:#9fb6c6;background:rgba(255,255,255,.1);padding:.02rem .32rem;border-radius:5px;vertical-align:middle;margin-left:.15rem}
.sm-tip .sm-line{display:block;margin-top:.14rem;color:#dfe6ec;font-weight:500}
.sm-tip .sm-big{font-weight:850;font-size:1.05rem;color:var(--yellow)}
.sm-tip .sm-tsub{display:block;margin-top:.1rem;font-weight:500;font-size:.73rem;color:#9fb6c6}
.sm-zoom{position:absolute;top:.55rem;right:.55rem;z-index:6;display:flex;flex-direction:column;gap:.28rem}
.sm-zoom button{width:33px;height:33px;border:1px solid #c7d9e5;background:rgba(255,255,255,.94);border-radius:9px;font-size:1.15rem;font-weight:700;color:var(--ink);cursor:pointer;display:grid;place-items:center;line-height:1;padding:0;box-shadow:0 2px 6px rgba(0,0,0,.12)}
.sm-zoom button:hover{background:#fff;border-color:var(--cyan)}
.sm-hint{position:absolute;left:.55rem;bottom:.5rem;z-index:5;font-size:.66rem;color:#5a7183;background:rgba(255,255,255,.74);padding:.14rem .45rem;border-radius:6px;pointer-events:none}
.sm-legend{display:flex;flex-wrap:wrap;gap:1rem;margin:.7rem auto 0;max-width:600px;font-size:.82rem;color:var(--muted);align-items:center}
.sm-legend i{display:inline-block;width:15px;height:11px;border-radius:3px;vertical-align:middle;margin-right:1px;border:.5px solid rgba(0,0,0,.08)}
.sm-lg-clubs b{color:#b98f00}
#smMap.mode-dep ~ .sm-legend .sm-lg-clubs{display:none}
#smMap.mode-clubs ~ .sm-legend .sm-lg-dep{display:none}
.match-form{margin-bottom:1.4rem}
.match-form .fields{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));
  gap:.8rem}
.match-form label{margin:0;font-size:.78rem;font-weight:650;color:var(--muted)}
.match-form label.wide{grid-column:1/-1}
.match-form .finish select{max-width:160px}

/* ---- Formulaire de match organisé (création + édition) ----------------- */
.mform{margin-bottom:1.4rem}
.mform label{display:flex;flex-direction:column;gap:.32rem;margin:0;
  font-size:.74rem;font-weight:680;letter-spacing:.012em;text-transform:uppercase;
  color:var(--muted)}
.mform input,.mform select{font-weight:500;color:var(--ink);text-transform:none}
.mf-grid{display:grid;grid-template-columns:.8fr 1.5fr 1fr;gap:.7rem;
  align-items:end;margin-bottom:.9rem}
.mf-player{display:flex;flex-direction:column;gap:.6rem;
  background:var(--surface);border:1px solid var(--line);border-left:4px solid var(--acc);
  border-radius:var(--r);padding:.7rem .85rem .8rem;margin-bottom:.8rem}
.mf-role{font-size:.95rem;font-weight:720;color:var(--ink);
  text-transform:none;letter-spacing:0}
.mf-newcard{display:grid;grid-template-columns:2.4fr 110px 1.6fr;gap:.7rem;align-items:end}
.mf-newcard[hidden]{display:none}
.mf-stream{margin-bottom:1rem}
/* ---- Résultat (saisie manuelle) dans l'édition de match ----------------- */
.mf-result{margin:.4rem 0 1.1rem;border:1px solid var(--line);border-radius:var(--r-md,12px);
  padding:.9rem 1rem}
.mf-result legend{font-weight:800;color:var(--ink);padding:0 .4rem;font-size:.95rem}
.mf-result .hint{margin:.1rem 0 .7rem}
.mf-score{border-collapse:collapse;width:100%;max-width:460px}
.mf-score th,.mf-score td{padding:.3rem .5rem;text-align:center}
.mf-score thead th{font-weight:700;color:var(--ink);font-size:.9rem}
.mf-score tbody th{text-align:left;font-weight:700;color:var(--ink);white-space:nowrap}
.mf-score input{width:3rem;text-align:center;font-weight:700}
.mf-swaprow{margin-top:.6rem}
.mf-swap{font-size:.85rem;font-weight:700;padding:.3rem .7rem;border-radius:var(--pill);
  border:1px solid var(--line);background:var(--surface,#fff);color:var(--ink);cursor:pointer}
.mf-swap:hover{background:rgba(34,176,230,.12);border-color:rgba(34,176,230,.5)}
.mf-winner{display:flex;flex-wrap:wrap;align-items:center;gap:.4rem 1rem;margin-top:.8rem}
.mf-winner-l{font-weight:700;color:var(--ink)}
.mf-winner label{display:inline-flex;align-items:center;gap:.35rem;font-weight:500}
@media(max-width:600px){
  .mf-grid{grid-template-columns:1fr 1fr}
  .mf-grid .mf-cat{grid-column:1/-1}
  .mf-newcard{grid-template-columns:1fr 1fr}
  .mf-newcard .mf-name{grid-column:1/-1}
  .mform button[type=submit]{width:100%}
}

/* ---- Flash (confirmation après action) ---------------------------------- */
.flash{margin:0 0 1.1rem;padding:.7rem 1rem;border-radius:var(--r-sm);font-weight:650;
  font-size:.9rem;border:1px solid;animation:rise .3s ease both}
.flash-ok{background:var(--cyan-soft);border-color:var(--line-hover);color:var(--cyan-ink)}
.flash-warn{background:var(--yellow-soft);border-color:var(--yellow-d);color:var(--yellow-ink)}
.flash-err{background:var(--live-soft);border-color:#ffb3c2;color:var(--live-d)}

/* ---- Formulaire repliable + états vides --------------------------------- */
.mform-wrap{margin-bottom:1.4rem}
.mform-wrap>summary{cursor:pointer;display:inline-flex;align-items:center;gap:.4rem;
  font-weight:720;font-size:.95rem;color:var(--cyan-ink);padding:.5rem .2rem;
  list-style:none;min-height:40px}
.mform-wrap>summary::-webkit-details-marker{display:none}
.mform-wrap[open]>summary{margin-bottom:.6rem}
.mform-wrap .mform{margin-bottom:0}
.empty-note{color:var(--muted);background:var(--paper-2);border:1px dashed var(--line);
  border-radius:var(--r);padding:1rem 1.15rem;font-weight:550;margin:.4rem 0 1.4rem}

/* ---- En-tête de page stylé (admin) ------------------------------------- */
.page-head{position:relative;display:flex;align-items:center;gap:1rem;margin:.2rem 0 1.8rem;
  padding:1.05rem 1.3rem;background:var(--surface);border:1.5px solid var(--line);
  border-radius:var(--r);box-shadow:var(--sh-sm);overflow:hidden}
.page-head::before{content:"";position:absolute;inset:0 0 auto 0;height:4px;
  background:linear-gradient(90deg,#ffd200,#22b0e6)}
.page-head-ic{flex:none;width:54px;height:54px;display:grid;place-items:center;border-radius:15px;
  background:var(--cyan-soft);color:var(--cyan-ink)}
.page-head-ic svg{width:28px;height:28px}
.page-head-txt{min-width:0}
.page-head h1{margin:0;display:flex;align-items:center;gap:.65rem;flex-wrap:wrap;line-height:1.12}
.page-head-count{font-size:.74rem;font-weight:740;color:var(--cyan-ink);background:var(--cyan-soft);
  border-radius:var(--pill);padding:.22rem .7rem;letter-spacing:.01em;white-space:nowrap}
.page-head-txt p{margin:.35rem 0 0;color:var(--muted);font-weight:550;font-size:.92rem}
@media(max-width:560px){.page-head{padding:.9rem 1rem;gap:.8rem}.page-head-ic{width:46px;height:46px}}

/* ---- Page Directs (admin) ---------------------------------------------- */
/* inputs en deux colonnes centrées + bouton centré */
.dir-grid{display:grid;grid-template-columns:1fr 1fr;gap:.9rem 1.1rem;max-width:680px;margin:0 auto 1.2rem}
@media(max-width:560px){.dir-grid{grid-template-columns:1fr}}
.dir-grid>label,.dir-grid .seg-field{min-width:0;margin:0}
/* tous les champs du formulaire exactement à la même hauteur (date = toggle = inputs) */
.dir-form input,.dir-form select{height:46px;box-sizing:border-box}
.dir-submit{display:flex;justify-content:center}
.dir-edit-actions{display:flex;gap:.6rem;align-items:center;justify-content:center;flex-wrap:wrap}
/* Header du panel d'ajout */
.dir-form-h{display:flex;align-items:center;justify-content:center;gap:.5rem;font-size:1.1rem;
  font-weight:780;color:var(--ink);margin-bottom:1.3rem;padding-bottom:.9rem;
  border-bottom:1px solid var(--line-soft)}
.dir-form-ic{display:grid;place-items:center;width:30px;height:30px;border-radius:9px;
  background:var(--cyan-soft);color:var(--cyan-ink);font-weight:800;font-size:1.25rem;line-height:1}
/* Coche « visible sur le portail public » */
.dir-form .dir-check{display:flex;flex-direction:row;align-items:center;justify-content:center;
  gap:.55rem;max-width:680px;margin:.1rem auto 1.3rem;font-weight:640;color:var(--ink-2);
  cursor:pointer;user-select:none}
.dir-form .dir-check input{width:18px;height:18px;accent-color:var(--cyan);cursor:pointer;margin:0;flex:none}
/* Diffusion masquée du public */
.dir-card-meta{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}
.dir-card.is-hidden{background:var(--paper-2);border-style:dashed}
.dir-card.is-hidden .dir-prev img{filter:grayscale(.35) brightness(.96);opacity:.8}
/* bascule inline « visible sur le portail public » dans chaque carte */
.dir-vis{display:inline-flex;align-items:center;gap:.32rem;cursor:pointer;font-size:.74rem;
  font-weight:740;color:var(--cyan-ink);user-select:none}
.dir-vis input{width:15px;height:15px;accent-color:var(--cyan);cursor:pointer;margin:0}
.dir-vis.off{color:var(--muted)}
/* Champ date relooké : icône calendrier cyan, clic = ouverture du sélecteur */
.dir-date-input{color-scheme:light;cursor:pointer;font-variant-numeric:tabular-nums}
.dir-date-input::-webkit-calendar-picker-indicator{width:19px;height:19px;cursor:pointer;
  opacity:.9;margin-left:.3rem;transition:transform .15s,opacity .15s;
  background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2322b0e6' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='5' width='18' height='16' rx='2.5'/%3E%3Cpath d='M3 10h18M8 2.5v4M16 2.5v4'/%3E%3C/svg%3E") center/contain no-repeat}
.dir-date-input::-webkit-calendar-picker-indicator:hover{opacity:1;transform:scale(1.12)}

/* Terrain en switch segmenté (2 terrains) */
.seg-field{display:flex;flex-direction:column;gap:.32rem}
.seg-label{font-size:.74rem;font-weight:680;letter-spacing:.012em;text-transform:uppercase;color:var(--muted)}
.seg-toggle{display:flex;height:46px;border:1.5px solid var(--line);border-radius:var(--r-sm);
  overflow:hidden;background:#fff}
.seg-toggle input{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}
.seg-toggle label{flex:1;display:flex;align-items:center;justify-content:center;padding:0 .8rem;
  cursor:pointer;font-weight:720;color:var(--muted);white-space:nowrap;transition:.15s;user-select:none}
.seg-toggle label:not(:last-of-type){border-right:1.5px solid var(--line)}
.seg-toggle input:checked+label{background:var(--seg,var(--ink));color:#0a0a0a}
.seg-toggle input:focus-visible+label{outline:2px solid var(--cyan);outline-offset:-2px}

/* Sections collapsables par jour */
.dir-days{display:flex;flex-direction:column;gap:.6rem;margin-top:.2rem}
.dir-day{border:1.5px solid var(--line);border-radius:var(--r);background:#fff;overflow:hidden}
.dir-day-h{display:flex;align-items:center;gap:.6rem;padding:.72rem .9rem;cursor:pointer;
  list-style:none;font-weight:740;user-select:none}
.dir-day-h::-webkit-details-marker{display:none}
.dir-day-h:hover{background:var(--paper)}
.dir-chev{width:.48rem;height:.48rem;border-right:2.5px solid var(--muted);
  border-bottom:2.5px solid var(--muted);transform:rotate(-45deg);transition:transform .2s;
  flex:none;margin:0 .15rem}
.dir-day[open] .dir-chev{transform:rotate(45deg)}
.dir-day-date{font-size:1rem;font-variant-numeric:tabular-nums}
.dir-day-n{margin-left:auto;font-size:.8rem;font-weight:680;color:var(--muted);white-space:nowrap}
.dir-day-body{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 1.2rem;
  padding:0 .9rem 1rem;border-top:1px solid var(--line-soft)}
@media(max-width:640px){.dir-day-body{grid-template-columns:1fr}}
.dir-day-col{min-width:0;display:flex;flex-direction:column;gap:.5rem;padding-top:.8rem}
.dir-col-h{display:flex;align-items:center;gap:.45rem;font-size:.82rem;font-weight:720;
  color:var(--muted);text-transform:uppercase;letter-spacing:.03em}
.dir-none{color:var(--faint);font-style:italic;font-size:.88rem;margin:.1rem 0 .2rem}

/* Carte diffusion (vignette + titre + actions, marges confortables) */
.dir-card{display:flex;align-items:center;gap:.7rem;padding:.5rem .65rem;border:1px solid var(--line);
  border-radius:var(--r-sm);background:var(--surface)}
.dir-card-body{flex:1;min-width:0;display:flex;flex-direction:column;gap:.1rem}
.dir-card-title{font-weight:650;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dir-card-act{display:flex;align-items:center;gap:.35rem;flex:none}
.dir-card-act form{margin:0}
.dir-card-act .edit,.dir-card-act button{padding:.32rem .46rem;min-height:32px;font-size:.82rem}
.dir-today{display:inline-block;font-size:.58rem;font-weight:820;text-transform:uppercase;
  letter-spacing:.04em;color:var(--live-d);background:var(--live-soft);border:1px solid #ffb3c2;
  border-radius:var(--pill);padding:.12rem .45rem}
.dir-prev{position:relative;display:block;line-height:0;border-radius:8px;overflow:hidden;
  border:1px solid var(--line);box-shadow:var(--sh-sm);flex:none}
.dir-prev img{width:104px;aspect-ratio:16/9;object-fit:cover;display:block;
  transition:transform .25s,filter .25s}
.dir-prev:hover img{transform:scale(1.06);filter:brightness(.62)}
.dir-prev-empty{width:104px;aspect-ratio:16/9;display:grid;place-items:center;background:var(--ink);
  color:#fff;font-size:1.1rem;text-decoration:none;border-radius:8px}
.dir-play{position:absolute;inset:0;display:grid;place-items:center;color:#fff;
  font-size:1.3rem;opacity:0;transition:opacity .2s;text-shadow:0 1px 8px #000b}
.dir-prev:hover .dir-play{opacity:1}
.dir-link{color:var(--cyan-ink);font-weight:650;text-decoration:none;font-size:.84rem}
.dir-link:hover{text-decoration:underline}

/* ---- Live public : indicateur SSE + flash de score ---------------------- */
.sm-score{font-weight:720;color:var(--cyan-ink);white-space:nowrap}
.sse-state{font-size:.46em;font-weight:700;letter-spacing:.02em;vertical-align:middle;
  padding:.15rem .5rem;border-radius:var(--pill);white-space:nowrap}
.sse-state.on{color:#137a43;background:#e7f6ee}
.sse-state.off{color:var(--muted);background:var(--paper-2)}
@keyframes cellflash{from{background:var(--yellow);border-radius:8px}to{background:transparent}}
.livescore .c.flash-cell{animation:cellflash .9s ease-out}

/* ---- Badges (couleurs club) --------------------------------------------- */
.badge{display:inline-flex;align-items:center;gap:.3rem;padding:.18rem .58rem;
  border-radius:var(--pill);font-size:.69rem;font-weight:760;letter-spacing:.03em;
  text-transform:uppercase;background:var(--paper-2);color:var(--muted)}
.badge.finished{background:var(--paper-2);color:var(--charcoal)}
.badge.scheduled{background:var(--cyan-soft);color:var(--cyan-ink)}
.badge.live{background:var(--live-d);color:#fff;box-shadow:0 3px 10px rgba(225,29,72,.30)}
.badge.live::before{content:"●";animation:pulse 1.3s infinite}
.badge.ab,.fx-top .badge.ab{background:var(--gold,#ffd200);color:#3a2e00}

/* ---- Panneau LIVE ------------------------------------------------------- */
.live-layout{display:grid;grid-template-columns:1fr minmax(290px,360px);gap:1.4rem;
  align-items:start}
.panel>*+*{margin-top:.9rem}

/* SCOREBOARD aligné : accent · nom(1fr) · service · classement(fixe) · 2 steppers(fixes).
   Le nom absorbe l'écart → les colonnes de droite s'alignent entre les 2 lignes. */
.sb{display:flex;flex-direction:column;gap:.45rem}
/* En-tête ET lignes partagent EXACTEMENT la même grille → S1/S2/Pts pile au-dessus
   des colonnes (maillot 18px · nom 1fr · service · classement · S1 · S2 · Pts). */
.sb-row,.sb-head{display:grid;
  grid-template-columns:14px minmax(0,1fr) 1.2em 3.3em 44px 44px 44px;
  align-items:center;gap:.4rem}
.sb-row{padding:.45rem .6rem;border:1.5px solid var(--line);border-radius:11px;
  background:#fff;transition:.15s}
.sb-row.serving{border-color:color-mix(in srgb,var(--acc) 55%,var(--line));
  background:color-mix(in srgb,var(--acc) 7%,#fff)}
.sb-acc{width:6px;height:26px;border-radius:3px;background:var(--acc)}
.sb-name{min-width:0;font-weight:680;font-size:.96rem;letter-spacing:-.015em;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sb-serve{text-align:center}
.sb-rank{text-align:right;color:var(--muted);font-size:.8rem;font-weight:680;
  font-variant-numeric:tabular-nums}
/* ---- Édition inline dans le scoreboard (maillot · nom · classement) -------- */
/* maillot = pastille couleur cliquable (occupe la colonne accent) */
.sb-jersey{width:14px;height:28px;padding:0;border:0;border-radius:4px;cursor:pointer;
  background:var(--acc);box-shadow:inset 0 0 0 1px #0002;transition:transform .12s}
.sb-jersey:hover{transform:scaleX(1.25)}
.sb-jersey::-webkit-color-swatch-wrapper{padding:0}
.sb-jersey::-webkit-color-swatch{border:0;border-radius:4px}
.sb-jersey::-moz-color-swatch{border:0;border-radius:4px}
/* nom = champ texte qui ressemble à du texte, éditable au clic (priorité sur le style input de base) */
.sb-row .sb-name-input{min-width:0;width:100%;border:1.5px solid transparent;background:transparent;
  font:inherit;font-weight:680;font-size:.95rem;letter-spacing:-.015em;color:var(--ink);
  padding:.18rem .4rem;border-radius:7px;transition:.12s}
.sb-row .sb-name-input::placeholder{color:var(--faint);font-weight:600}
.sb-row .sb-name-input:hover{background:var(--paper)}
.sb-row .sb-name-input:focus{background:#fff;border-color:var(--cyan);outline:none;box-shadow:0 0 0 3px var(--cyan-soft)}
/* classement = liste compacte sans flèche (ressemble au chip, clic = menu) */
.sb-row .rank-sel{appearance:none;-webkit-appearance:none;min-width:0;width:100%;height:auto;
  border:1.5px solid transparent;background:transparent;font:inherit;font-size:.8rem;font-weight:680;
  color:var(--muted);text-align:right;text-align-last:right;cursor:pointer;padding:.16rem .25rem;
  border-radius:7px;font-variant-numeric:tabular-nums;transition:.12s}
.sb-row .rank-sel:hover{background:var(--paper);color:var(--cyan-ink)}
.sb-row .rank-sel:focus{background:#fff;border-color:var(--cyan);outline:none;box-shadow:0 0 0 3px var(--cyan-soft);color:var(--ink)}
.sb-cell{display:flex;flex-direction:column;align-items:center;gap:.12rem}
.sb-step{width:44px;height:28px;padding:0;border-radius:8px;font-size:1.1rem;line-height:1;
  font-weight:700;color:var(--muted);border:1.5px solid var(--line);background:#fff;cursor:pointer;
  transition:.12s}
.sb-step:hover{color:var(--cyan-ink);background:var(--cyan-soft);border-color:var(--cyan)}
.sb-cell .val{font-size:1.3rem;font-weight:780;min-width:1.3em;text-align:center;
  font-variant-numeric:tabular-nums;letter-spacing:-.02em}
.sb-head{padding:0 .6rem .1rem;font-size:.62rem;font-weight:740;text-transform:uppercase;
  letter-spacing:.04em;color:var(--muted)}
.sb-head>span{text-align:center;min-width:0}
/* libellé de phase (Set / Tie-break / Super tie-break) à GAUCHE, au niveau de S1/S2/Pts */
.sb-head .sb-phase-tag{grid-column:1 / 5;justify-self:start;text-align:left;
  text-transform:none;font-size:.72rem;color:var(--cyan-ink)}
/* colonne POINTS : séparée des jeux, en cyan */
.sb-cell.sb-pts{position:relative}
.sb-cell.sb-pts::before{content:"";position:absolute;left:-.3rem;top:3px;bottom:3px;
  width:1.5px;background:var(--line-soft)}
.sb-cell .val.pts{color:var(--cyan-ink);font-size:1.05rem;font-weight:820}
/* set 2 verrouillé tant que le set 1 n'est pas terminé : boutons GRISÉS au repos,
   ROUGE + tremblement seulement au clic (transitoire, pas d'encadré permanent). */
.sb-step.lk,.sb-step.lk:hover{color:var(--muted);background:#f5f6f7;
  border-color:var(--line);opacity:.55;cursor:not-allowed}
.sb-cell.shake .sb-step.lk{color:var(--danger,#e5484d);border-color:var(--danger,#e5484d);
  background:#fff5f5;opacity:1}
.sb-cell.shake{animation:sb-shake .4s}
@keyframes sb-shake{10%,90%{transform:translateX(-2px)}20%,80%{transform:translateX(3px)}
  30%,50%,70%{transform:translateX(-5px)}40%,60%{transform:translateX(5px)}}
/* phase courante (Set / Tie-break / Super tie-break) + note caméra */
.sb-phase{display:flex;align-items:center;gap:.55rem;flex-wrap:wrap;margin:.25rem 0 0}
.sb-phase-tag{font-size:.72rem;font-weight:740;color:var(--cyan-ink);background:var(--cyan-soft);
  border-radius:var(--pill);padding:.18rem .6rem;white-space:nowrap}
.sb-phase .cam-note{margin:0}

.cam-note{margin:0;font-size:.76rem;color:var(--faint);font-weight:550;line-height:1.35}

/* SERVICE segmenté : 2 noms en 1fr (ellipsis) + « aucun » → jamais de retour à la
   ligne, donc les deux panneaux conservent la même hauteur de section. */
.serve-seg{display:grid;grid-template-columns:1fr 1fr auto;gap:.35rem}
.ss-btn{display:inline-flex;align-items:center;justify-content:center;gap:.25rem;min-width:0;
  padding:.42rem .55rem;border-radius:var(--pill);border:1.5px solid var(--line);background:#fff;
  font-weight:650;font-size:.82rem;color:var(--ink-2);cursor:pointer;transition:.15s}
.ss-btn .ss-lbl{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ss-btn:hover{border-color:var(--cyan);color:var(--cyan-ink)}
.ss-btn.active{background:var(--cyan-ink);color:#fff;border-color:var(--cyan-ink);box-shadow:var(--sh-cyan)}

/* OPTIONS repliables : noms / classements / maillots (réglés une fois) */
.panel-opts>summary{cursor:pointer;list-style:none;font-size:.84rem;font-weight:720;
  color:var(--cyan-ink);padding:.35rem 0;min-height:34px;display:flex;align-items:center;gap:.3rem}
.panel-opts>summary::-webkit-details-marker{display:none}
.panel-opts[open]>summary{margin-bottom:.5rem}
.panel-opts .names{margin-bottom:.7rem}
.names .rowname{display:flex;gap:.45rem;margin-bottom:.4rem;padding-left:.6rem;
  border-left:4px solid var(--acc);border-radius:2px}
.names .rank{max-width:96px}
.jerseys{display:flex;gap:1rem;flex-wrap:wrap;align-items:flex-end}
.jerseys label{display:flex;flex-direction:column;gap:.35rem;margin:0;font-weight:650;
  color:var(--muted);font-size:.76rem}
.jerseys input[type=color]{width:46px;height:32px;padding:0;border:1.5px solid var(--line);
  border-radius:9px;cursor:pointer;background:#fff}
.saved-hint{color:var(--muted);font-size:.72rem;font-weight:600}
.panel-foot{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap;margin-top:.3rem;
  padding-top:.85rem;border-top:1px solid var(--line-soft)}
.panel-foot form{display:inline-flex;gap:.4rem;margin:0;align-items:center}
.panel-foot select{max-width:150px}
.panel-foot .fin-open{margin-left:auto;font-weight:700}

/* Haut du panneau : options repliables (gauche) + lien Éditer (droite) */
.panel-top{display:flex;flex-direction:column;gap:.45rem;
  padding-bottom:.7rem;border-bottom:1px solid var(--line-soft)}
.link-row{display:flex;align-items:center;justify-content:space-between;gap:.6rem}
.link-badge{display:inline-flex;align-items:center;gap:.3rem;font-size:.76rem;font-weight:780;
  border-radius:var(--pill);padding:.2rem .65rem;cursor:help;white-space:nowrap}
.link-badge.ok{color:#147a52;background:#e3f7ee;border:1px solid #b3e6cf}
.link-badge.warn{color:var(--yellow-ink);background:var(--yellow-soft);border:1px solid var(--yellow-d)}
.panel-top .edit{flex:none;font-size:.82rem;font-weight:700;color:var(--cyan-ink);white-space:nowrap}
.link-form{margin:0}
.link-form select{width:100%;font-size:.8rem;font-weight:600;padding:.42rem .55rem;cursor:pointer}

/* Pop-up de fin de match */
.fin-overlay{position:fixed;inset:0;z-index:60;display:flex;align-items:center;justify-content:center;
  padding:1rem;background:rgba(15,40,55,.45);-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}
.fin-overlay[hidden]{display:none}
.fin-modal{position:relative;background:var(--surface);border:1px solid var(--line);
  border-radius:var(--r-lg);box-shadow:var(--sh);padding:1.5rem 1.6rem 1.3rem;max-width:380px;
  width:100%;animation:imp-fade .18s ease}
.fin-x{position:absolute;top:.7rem;right:.8rem;width:30px;height:30px;border-radius:50%;border:0;
  background:var(--paper-2);color:var(--muted);cursor:pointer;font-size:.85rem}
.fin-modal h3{margin:0 0 .25rem;font-size:1.1rem}
.fin-q{margin:0 0 1rem;color:var(--muted);font-weight:600;font-size:.9rem;
  display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}
.fin-auto{color:var(--yellow-ink);background:var(--yellow-soft);border-radius:var(--pill);
  padding:.12rem .55rem;font-size:.74rem;font-weight:760}
.fin-choices{display:flex;flex-direction:column;gap:.6rem}
/* .fin-modal préfixe → bat le style global jaune de button[type=submit] */
.fin-modal .fin-choice{display:flex;align-items:center;justify-content:space-between;gap:.7rem;
  padding:.8rem 1rem;border:2px solid var(--line);border-left:6px solid var(--acc);
  border-radius:var(--r);background:#fff;color:var(--ink);box-shadow:none;cursor:pointer;
  text-align:left;transition:.15s;font:inherit;font-weight:680}
.fin-modal .fin-choice:hover{border-color:var(--acc);box-shadow:var(--sh-sm);transform:translateY(-1px)}
.fin-modal .fin-choice.reco{border-color:var(--yellow-d);background:var(--yellow-soft);
  box-shadow:var(--sh-pop)}
.fin-choice .fin-name{font-weight:740;font-size:1.02rem;color:var(--ink)}
.fin-choice .fin-sets{font-weight:700;color:var(--muted);font-variant-numeric:tabular-nums;
  font-size:.85rem;white-space:nowrap}
.fin-choice.reco .fin-sets{color:var(--yellow-ink)}
.fin-foot{display:flex;align-items:center;justify-content:space-between;gap:.6rem;margin-top:1.1rem}
.fin-modal .link-btn{background:none;border:0;box-shadow:none;color:var(--muted);font-weight:650;
  cursor:pointer;font-size:.83rem;padding:.4rem .2rem;font-family:inherit;transform:none}
.fin-modal .link-btn:hover{color:var(--ink);background:none}
.fin-none{color:var(--faint)}
.preview{position:sticky;top:80px}
.preview h3{color:var(--muted);text-transform:uppercase;letter-spacing:.1em;font-size:.72rem}
.preview img{width:100%;border:1.5px solid var(--line);border-radius:13px;
  background:repeating-conic-gradient(#eef1f7 0% 25%,#e2e6f0 0% 50%) 50%/18px 18px}
.hint{color:var(--faint);font-size:.82rem;font-weight:550;margin:.5rem 0 0}

/* ---- Pilotage : les DEUX terrains sur une page (un panneau par colonne) -- */
.pilot-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:1.6rem;align-items:start;
  margin-top:.5rem}
.pilot-col{display:flex;flex-direction:column;gap:.85rem;min-width:0}
.pilot-head{display:flex;align-items:center;justify-content:space-between;gap:.6rem;flex-wrap:wrap}
.pilot-t{margin:0;font-size:1.2rem;font-weight:780;letter-spacing:-.02em;
  display:flex;align-items:center;gap:.5rem}
.pilot-t::before{content:"";width:15px;height:15px;border-radius:50%;flex:none;
  background:var(--ball-img) center/contain no-repeat;box-shadow:0 1px 3px rgba(0,0,0,.3)}
.pilot-links{display:flex;gap:.8rem;font-size:.82rem;font-weight:700}
.pilot-links a{color:var(--cyan-ink);white-space:nowrap}
.pilot-preview{width:100%;max-height:128px;object-fit:contain;border:1.5px solid var(--line);
  border-radius:13px;display:block;
  background:repeating-conic-gradient(#eef1f7 0% 25%,#e2e6f0 0% 50%) 50%/18px 18px}
@media(max-width:900px){.pilot-grid{grid-template-columns:1fr;gap:2rem}}

/* Supervision (battements de la box) sous les terrains */
.supervision{margin-top:2.2rem}
.superv-list{display:flex;flex-direction:column;gap:.5rem;margin-top:.6rem}
.superv-row{display:flex;align-items:center;gap:.7rem;padding:.6rem .9rem;
  border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface);
  box-shadow:var(--sh-sm);font-size:.9rem}
.superv-dot{width:.7rem;height:.7rem;border-radius:50%;flex:none}
.superv-dot.on{background:#1db954;box-shadow:0 0 0 3px #1db95433}
.superv-dot.off{background:#e0473e;box-shadow:0 0 0 3px #e0473e33}
.superv-row strong{min-width:7.5rem}
.superv-detail{color:var(--ink-2)}
.superv-age{margin-left:auto;color:var(--faint);font-variant-numeric:tabular-nums;font-size:.82rem}
.alert-cfg{display:flex;align-items:center;gap:.7rem;margin-top:.6rem;padding:.6rem .9rem;
  border:1px dashed var(--line);border-radius:var(--r-sm);font-size:.9rem}
.alert-cfg strong{min-width:7.5rem}
.alert-cfg .alert-test{margin-left:auto}

/* ---- Accueil : plateaux « direct » (2 lecteurs + score) ----------------- */
.live-boards{display:grid;grid-template-columns:repeat(2,1fr);gap:1.1rem;margin:.2rem 0 1.8rem}
.board{background:var(--surface);border:0;border-bottom:3.5px solid var(--cyan);border-radius:var(--r);
  overflow:hidden;box-shadow:var(--sh-sm)}
.board-head{display:flex;align-items:center;justify-content:space-between;gap:.5rem;
  padding:.55rem .95rem;background:var(--head);border:1px solid var(--line);border-bottom:2.5px solid var(--cyan)}
.bh-t{display:inline-flex;align-items:center;gap:.45rem;color:var(--ink);font-weight:760;
  font-size:.86rem;letter-spacing:.01em}
.bh-t::before{content:"";width:15px;height:15px;flex:none;border-radius:50%;
  background:var(--ball-img) center/contain no-repeat;
  box-shadow:0 1px 3px rgba(0,0,0,.35)}
.board .player{margin:0;border-radius:0;box-shadow:none}
.board-empty,.player-empty{display:grid;place-items:center;aspect-ratio:16/9;
  background:var(--paper-2);color:var(--muted);font-weight:600;font-size:.86rem;
  text-align:center;padding:1rem}
.board-score{display:flex;flex-direction:column;gap:.5rem;padding:.85rem .95rem;text-decoration:none}
.board-info{padding:.85rem .95rem;color:var(--muted);font-weight:600;margin:0}
.bs-row{display:flex;align-items:center;gap:.6rem}
.bs-row::before{content:"";width:8px;height:20px;border-radius:4px;background:var(--acc);flex:none}
.bs-name{flex:1;min-width:0;font-weight:650;color:var(--ink);font-size:1.02rem;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;letter-spacing:-.015em}
.bs-cells{display:flex;gap:.4rem}
/* même code couleur que l'overlay / les cartes : set gagné visiteur=jaune,
   club=cyan, en cours = crème (recoloré en live par le JS SSE). */
.bs-cells span{min-width:1.65rem;height:1.8rem;display:grid;place-items:center;
  font-variant-numeric:tabular-nums;font-size:1.1rem;font-weight:750;border-radius:9px;
  color:#343639;background:linear-gradient(#f6f2ec,#e7e1d9);border:1px solid #d0c8be}
.bs-cells span.won-v{background:linear-gradient(#f9d24a,#f7c300);color:#2c2c2c;border-color:#d9ab00}
.bs-cells span.won-c{background:linear-gradient(#5cc3e0,#2eb0d6);color:#fcfcfc;border-color:#1f93b6}
.bs-cells span.flash-cell{animation:cellflash .9s ease-out}
@media(max-width:760px){.live-boards{grid-template-columns:1fr}}

/* ---- Direct public ------------------------------------------------------ */
.zone{margin-top:1.8rem}
.zone:first-of-type{margin-top:.8rem}
.zone-head{display:flex;align-items:center;gap:.55rem;font-size:1.1rem;font-weight:740;
  letter-spacing:-.02em;margin-bottom:.9rem}
.zone-dot{width:11px;height:11px;border-radius:50%;background:var(--cyan);flex:none}
.zone-dot.live{background:var(--live);box-shadow:0 0 0 4px var(--live-soft);
  animation:pulse 1.3s infinite}
.zone-replay{border-top:1px solid var(--line);padding-top:1.5rem}
.player{position:relative;padding-top:56.25%;margin:1rem 0;border-radius:var(--r-lg);
  overflow:hidden;background:#000;box-shadow:var(--sh)}
.zone-live .player{box-shadow:0 0 0 3px var(--live-soft),var(--sh)}
.player iframe{position:absolute;inset:0;width:100%;height:100%;border:0}
.streambar{display:flex;align-items:center;justify-content:space-between;gap:.8rem;
  flex-wrap:wrap;margin:.2rem 0 .4rem}
.stream-meta{display:flex;align-items:center;gap:.6rem;flex-wrap:wrap}
.stream-meta .sm-title{font-weight:700;font-size:.98rem;letter-spacing:-.015em}
.stream-meta .sm-date{color:var(--muted);font-weight:650;font-size:.86rem}

/* Sélecteur de terrain (segmented) */
.terr-toggle{display:inline-flex;gap:.25rem;background:var(--paper-2);padding:.22rem;
  border-radius:var(--pill)}
.terr{display:inline-flex;align-items:center;gap:.42rem;padding:.38rem .85rem;
  border-radius:var(--pill);font-weight:680;font-size:.86rem;color:var(--ink-2);
  text-decoration:none;transition:.15s}
.terr:hover{color:var(--cyan-ink)}
.terr.active{background:#fff;color:var(--ink);box-shadow:var(--sh-sm)}
.terr .ld{width:7px;height:7px;border-radius:50%;background:var(--live);
  animation:pulse 1.3s infinite}

/* Galerie rediffusions — 2 colonnes (une par terrain), façon playlist */
.year-h{margin:1.4rem 0 .8rem;font-size:1.15rem;font-weight:740;letter-spacing:-.02em;
  color:var(--ink);display:flex;align-items:center;gap:.6rem}
.year-h::after{content:"";flex:1;height:2px;border-radius:2px;
  background:linear-gradient(90deg,var(--line),transparent)}
.year-cols{display:grid;grid-template-columns:1fr 1fr;gap:1.2rem;margin-bottom:.4rem}
.terr-col{min-width:0}
.tc-head{display:flex;align-items:center;gap:.45rem;font-weight:760;font-size:.76rem;
  text-transform:uppercase;letter-spacing:.05em;color:var(--ink-2);
  padding:0 .2rem .5rem;margin-bottom:.65rem;border-bottom:2px solid var(--tc)}
.tc-dot{width:10px;height:10px;border-radius:50%;background:var(--tc);flex:none}
.tc-list{display:flex;flex-direction:column;gap:.45rem}
.tc-item{display:flex;align-items:center;gap:.75rem;padding:.38rem;border:1.5px solid var(--line);
  border-radius:11px;background:var(--surface);box-shadow:var(--sh-sm);text-decoration:none;
  color:inherit;transition:transform .15s,box-shadow .15s,border-color .15s}
.tc-item:hover{transform:translateX(3px);box-shadow:var(--sh);
  border-color:color-mix(in srgb,var(--tc) 55%,var(--line))}
.tc-item.active{border-color:var(--tc);
  box-shadow:0 0 0 2px color-mix(in srgb,var(--tc) 35%,transparent),var(--sh-sm)}
.tc-thumb{position:relative;width:112px;flex:none;aspect-ratio:16/9;border-radius:8px;
  overflow:hidden;background:#000}
.tc-thumb img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .25s}
.tc-item:hover .tc-thumb img{transform:scale(1.08)}
.tc-play{position:absolute;inset:0;margin:auto;width:30px;height:30px;display:grid;
  place-items:center;border-radius:50%;background:rgba(11,15,21,.55);color:#fff;font-size:.68rem;
  opacity:0;transition:.15s}
.tc-item:hover .tc-play{opacity:1}
.tc-live{position:absolute;top:.35rem;left:.35rem;padding:.12rem .42rem;font-size:.58rem;
  font-weight:800;letter-spacing:.03em;text-transform:uppercase;color:#fff;
  background:var(--live-d,#e11d48);border-radius:var(--pill);
  box-shadow:0 2px 8px rgba(225,29,72,.4)}
.tc-n{margin-left:auto;font-weight:700;font-size:.9em;color:var(--muted);text-transform:none;letter-spacing:0}
.tc-meta{display:flex;flex-direction:column;gap:.1rem;min-width:0}
.tc-date{font-weight:720;font-size:.92rem;font-variant-numeric:tabular-nums;letter-spacing:-.01em}
.tc-time{font-weight:640;font-size:.8rem;color:var(--ink-2);font-variant-numeric:tabular-nums}
.tc-title{color:var(--muted);font-size:.8rem;font-weight:550;min-width:0;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
@media(max-width:760px){.year-cols{grid-template-columns:1fr;gap:.9rem}}
/* Lecteur vidéo en fenêtre modale (page Rediffusions) */
.vmodal{position:fixed;inset:0;z-index:60;display:flex;align-items:center;justify-content:center;padding:4vw}
.vmodal[hidden]{display:none}
.vmodal-back{position:absolute;inset:0;background:rgba(6,10,16,.72);backdrop-filter:blur(3px)}
.vmodal-box{position:relative;width:min(960px,100%);background:var(--surface,#fff);
  border-radius:16px;box-shadow:0 24px 70px rgba(0,0,0,.5);padding:.9rem;overflow:hidden}
.vmodal-x{position:absolute;top:.5rem;right:.5rem;z-index:2;width:2rem;height:2rem;border-radius:50%;
  border:none;background:var(--paper-2);color:var(--ink);font-size:1rem;font-weight:800;cursor:pointer;line-height:1}
.vmodal-x:hover{background:var(--live-d,#e11d48);color:#fff}
.vmodal-title{font-weight:750;color:var(--ink);padding:.1rem 2.4rem .55rem .3rem;letter-spacing:-.01em}
.vmodal-frame{position:relative;aspect-ratio:16/9;border-radius:10px;overflow:hidden;background:#000}
.vmodal-frame iframe{position:absolute;inset:0;width:100%;height:100%;border:0}
.vmodal .video-note{margin:.5rem .2rem 0;font-size:.8rem;color:var(--muted)}
/* Encart « Partager » (réseaux sociaux) */
.share-card{margin:1.4rem 0;padding:1.1rem 1.2rem;border:1.5px solid var(--line);border-radius:16px;
  background:var(--surface);box-shadow:var(--sh-sm)}
.share-top{display:flex;align-items:center;gap:.7rem;margin-bottom:.85rem}
.share-ic{font-size:1.5rem;flex:none}
.share-txt{display:flex;flex-direction:column;line-height:1.28;min-width:0}
.share-txt b{color:var(--ink);font-size:1.02rem;letter-spacing:-.01em}
.share-txt span{color:var(--muted);font-size:.85rem}
.sh-native{margin-left:auto;flex:none;border:none;cursor:pointer;font-weight:750;font-size:.9rem;
  color:var(--ink);background:var(--yellow);border-radius:var(--pill);padding:.5rem .95rem}
.sh-native:hover{box-shadow:var(--sh-pop)}
.share-btns{display:flex;flex-wrap:wrap;gap:.5rem}
.sh-btn{display:inline-flex;align-items:center;gap:.45rem;padding:.5rem .82rem;border-radius:var(--pill);
  border:1.5px solid var(--line);background:var(--surface);color:var(--ink);font-weight:700;font-size:.88rem;
  text-decoration:none;cursor:pointer;transition:transform .14s,border-color .14s,background .14s}
.sh-btn svg{width:18px;height:18px;flex:none;color:var(--b,var(--ink))}
.sh-btn:hover{transform:translateY(-1px);border-color:var(--b,var(--line));
  background:color-mix(in srgb,var(--b,var(--ink)) 12%,var(--surface))}
.sh-fb{--b:#1877f2}
.sh-wa{--b:#25d366}
.sh-x{--b:var(--ink)}
.sh-ml{--b:#e07b39}
.sh-copy{--b:var(--cyan-ink,#22b0e6)}
/* Bouton « Story » : dégradé Instagram, plein (met en avant le partage story) */
.sh-story{border:none;color:#fff;background:linear-gradient(45deg,#f09433,#e6683c 25%,#dc2743 50%,#cc2366 75%,#bc1888)}
.sh-story svg{color:#fff}
.sh-story:hover{transform:translateY(-1px);filter:brightness(1.06);box-shadow:0 6px 16px rgba(220,39,67,.4);background:linear-gradient(45deg,#f09433,#e6683c 25%,#dc2743 50%,#cc2366 75%,#bc1888)}
@media(max-width:520px){.share-top{flex-wrap:wrap}.sh-native{margin-left:0;width:100%;order:3}.sh-btn{font-size:.84rem;padding:.48rem .7rem}}
/* Petit toast de confirmation (partage story / copie) */
.sh-toast{position:fixed;left:50%;bottom:5.5rem;transform:translate(-50%,14px);z-index:80;
  background:var(--ink);color:#fff;font-weight:700;font-size:.9rem;padding:.6rem 1rem;border-radius:var(--pill);
  box-shadow:0 8px 24px rgba(0,0,0,.35);opacity:0;transition:opacity .3s,transform .3s;pointer-events:none;
  max-width:90vw;text-align:center}
.sh-toast.show{opacity:1;transform:translate(-50%,0)}

/* ---- Stats de match (page live + fiche joueur) -------------------------- */
.match-stats{list-style:none;display:flex;flex-wrap:wrap;gap:.7rem;margin:1rem 0 0;padding:0}
.match-stats li{flex:1 1 auto;min-width:96px;display:flex;flex-direction:column;gap:.15rem;
  background:var(--surface);border:0;border-radius:var(--r-sm);
  box-shadow:var(--sh-card);padding:.7rem .9rem}
.match-stats .ms-v{font-size:1.35rem;font-weight:780;letter-spacing:-.02em;color:var(--ink);
  font-variant-numeric:tabular-nums}
.match-stats .ms-v small{font-size:.55em;font-weight:700;color:var(--muted);margin-left:.15em}
.match-stats .ms-k{font-size:.72rem;font-weight:680;color:var(--muted);text-transform:uppercase;
  letter-spacing:.05em}

/* lien « 📅 Rappel » dans une carte fixture */
.fx-ics{margin-left:auto;font-size:.78rem;font-weight:700;color:var(--cyan-ink);white-space:nowrap}
.fx-ics:hover{color:var(--cyan-d)}
/* nom de joueur cliquable (carte fixture) : garde l'allure d'un titre */
a.fx-name{color:var(--ink);text-decoration:none}
a.fx-name:hover{color:var(--cyan-ink)}
.fx-team.win a.fx-name{color:var(--yellow-ink)}

/* ---- Fiche joueur : branche dans le tableau (« bout de tableau ») -------- */
.run-champ{font-size:.7rem;font-weight:800;color:var(--yellow-ink);background:var(--yellow-soft);
  padding:.1rem .5rem;border-radius:var(--pill);text-transform:none;letter-spacing:0;margin-left:.4rem}
.run{list-style:none;display:flex;gap:.55rem;margin:.2rem 0 1.4rem;padding:.2rem .1rem .6rem;
  overflow-x:auto;scrollbar-width:thin;counter-reset:none}
.run-step{flex:0 0 auto;position:relative;display:flex;flex-direction:column;gap:.2rem;
  min-width:148px;background:var(--surface);border:1.5px solid var(--line);
  border-top:4px solid var(--charcoal);border-radius:var(--r-sm);box-shadow:var(--sh-sm);
  padding:.55rem .7rem}
.run-step+.run-step{margin-left:.7rem}
.run-step+.run-step::before{content:"›";position:absolute;left:-.95rem;top:50%;
  transform:translateY(-50%);color:var(--faint);font-weight:800;font-size:1.1rem}
.run-step.win{border-top-color:var(--yellow)}
.run-step.loss{border-top-color:var(--charcoal);opacity:.85}
.rs-round{font-size:.68rem;font-weight:780;text-transform:uppercase;letter-spacing:.06em;
  color:var(--cyan-ink)}
.run-step.win .rs-round{color:var(--yellow-ink)}
.rs-opp{font-weight:650;font-size:.92rem;color:var(--ink);letter-spacing:-.01em}
.rs-opp a{color:inherit}.rs-opp a:hover{color:var(--cyan-ink)}
.rs-opp small{color:var(--muted);font-weight:680}
.rs-score{font-weight:760;font-variant-numeric:tabular-nums;color:var(--ink-2);font-size:.9rem}
.rs-pending{color:var(--muted);font-weight:600;font-style:italic}
.run-step.live{border-top-color:var(--live)}
.run-step.live .rs-round,.run-step.live .rs-round a{color:var(--live-d)}
.run-step.live .rs-score small{color:var(--live-d);font-weight:700}

/* ---- Bandeau événement (accueil) ---------------------------------------- */
.event-banner{display:flex;align-items:center;gap:.7rem;flex-wrap:wrap;text-decoration:none;
  margin:.2rem 0 1.4rem;padding:.7rem 1rem;border-radius:var(--r);color:#fff;
  background:linear-gradient(100deg,#16191e 0%,#1f6f97 100%);box-shadow:var(--sh-sm);
  position:relative;overflow:hidden}
.event-banner::after{content:"";position:absolute;left:0;right:0;top:0;height:3px;
  background:var(--grad)}
.eb-tag{font-weight:780;font-size:.74rem;text-transform:uppercase;letter-spacing:.04em;
  background:var(--yellow);color:var(--ink);padding:.18rem .55rem;border-radius:var(--pill)}
.eb-name{font-weight:760;letter-spacing:-.01em}
.eb-when{color:#cfe6f2;font-weight:600;font-size:.88rem}
.eb-go{margin-left:auto;font-weight:740;color:#fff;white-space:nowrap}
.event-banner:hover .eb-go{text-decoration:underline}

/* ---- Page Infos : cartes pratiques + catégories ------------------------- */
.info-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:1rem;margin:.4rem 0 .6rem}
@media(max-width:720px){.info-grid{grid-template-columns:repeat(2,1fr)}}
@media(max-width:460px){.info-grid{grid-template-columns:1fr}}
.info-card{background:var(--surface);border:0;border-bottom:3.5px solid var(--cyan);border-radius:var(--r);
  box-shadow:var(--sh-sm);padding:1.1rem 1.2rem}
.info-card .ic-ico{font-size:1.5rem;line-height:1}
.info-card h3{margin:.5rem 0 .35rem;font-size:.95rem}
.info-card p{margin:0;color:var(--ink-2);font-weight:500}
.info-card b{color:var(--ink);font-weight:740}
.ic-link{display:inline-block;margin-top:.5rem;font-size:.82rem;font-weight:700;color:var(--cyan-ink)}
.cat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,260px),1fr));gap:1rem}
.cat-card{background:var(--surface);border:0;border-bottom:3.5px solid var(--cyan);border-radius:var(--r);
  box-shadow:var(--sh-sm);padding:1.1rem 1.2rem}
.cat-card h3{margin:0 0 .7rem}
.cat-chips{display:flex;flex-wrap:wrap;gap:.45rem}
.cat-chip{background:var(--cyan-soft);color:var(--cyan-ink);font-weight:720;font-size:.85rem;
  padding:.3rem .7rem;border-radius:var(--pill)}

/* ---- Partenaires -------------------------------------------------------- */
.partner-strip{display:flex;flex-wrap:wrap;gap:.55rem;margin:.2rem 0 1rem}
.partner-pill{background:var(--paper-2);border:1.5px solid var(--line);border-radius:var(--pill);
  padding:.32rem .8rem;font-weight:700;font-size:.85rem;color:var(--ink-2)}
.sponsor-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,165px),1fr));
  gap:.85rem;margin:.4rem 0 1rem}
.sponsor{display:grid;place-items:center;min-height:84px;padding:.55rem;text-align:center;
  background:var(--surface);border:0;border-bottom:3.5px solid var(--cyan);border-radius:var(--r);
  box-shadow:var(--sh-sm);text-decoration:none;transition:transform .15s,box-shadow .15s,border-color .15s}
.sponsor:hover{transform:translateY(-2px);box-shadow:var(--sh);border-bottom-color:var(--cyan-d)}
/* visuels des partenaires : tous au même format (plus de distinction « officiels ») */
.sponsor img{width:100%;height:auto;max-height:150px;object-fit:contain;border-radius:8px;display:block}
.sp-name{font-weight:740;color:var(--ink);letter-spacing:-.01em;padding:.6rem .3rem}
/* bandeau récapitulatif de tous les partenaires (image composite fournie) */
.sponsor-banner{margin:1.6rem 0 .4rem}
.sponsor-banner img{width:100%;height:auto;border-radius:var(--r);box-shadow:var(--sh-card);display:block}
/* Aide « Sources OBS » (pilotage) */
.obs-help{margin:1.8rem 0 .5rem}
.obs-list{list-style:none;margin:.6rem 0 0;padding:0;display:flex;flex-direction:column;gap:.5rem}
.obs-list li{display:flex;align-items:center;gap:.6rem .9rem;flex-wrap:wrap;
  background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:.6rem .85rem}
.obs-name{font-weight:740;color:var(--ink);flex:1 1 13rem}
.obs-name small{font-weight:600;color:var(--muted)}
.obs-url{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.85rem;
  color:var(--cyan-ink);background:var(--paper-2);border-radius:6px;padding:.22rem .5rem;text-decoration:none}
a.obs-url:hover{text-decoration:underline}

/* ---- Bouton notifications push (accueil) -------------------------------- */
.push-cta{display:flex;align-items:center;gap:.7rem;flex-wrap:wrap;margin:.2rem 0 1.6rem}
.push-msg{color:var(--muted);font-weight:600;font-size:.85rem}

/* ---- Pronostic live (« qui gagne ? ») ----------------------------------- */
.vote{margin:1.4rem 0 0}
.vote-q{margin:0 0 .55rem;font-size:.85rem;font-weight:740;color:var(--ink)}
.vote-bar{display:flex;height:30px;border-radius:var(--pill);overflow:hidden;
  border:1.5px solid var(--line);background:var(--paper-2)}
.vote-bar .seg{display:flex;align-items:center;justify-content:center;color:#fff;
  font-weight:760;font-size:.8rem;transition:width .4s cubic-bezier(.2,.8,.2,1);min-width:0}
.vote-bar .seg.v{background:var(--charcoal)}
.vote-bar .seg.c{background:var(--cyan)}
.vote-actions{display:flex;gap:.6rem;margin:.7rem 0 .35rem}
.vote-btn{flex:1;font-weight:700}
.vote-btn.v.on{background:var(--charcoal);color:#fff;border-color:var(--charcoal)}
.vote-btn.c.on{background:var(--cyan);color:#fff;border-color:var(--cyan)}
.vote-meta{margin:.1rem 0 0;color:var(--faint);font-size:.78rem;font-weight:600}

/* ---- Moments clés ------------------------------------------------------- */
.moments{list-style:none;margin:.4rem 0 0;padding:0;display:flex;flex-direction:column;gap:.5rem}
.moment{display:flex;align-items:center;gap:.7rem;padding:.6rem .85rem;background:var(--surface);
  border:1.5px solid var(--line);border-left:5px solid var(--acc,var(--cyan));
  border-radius:var(--r-sm);box-shadow:var(--sh-sm)}
.moment.visiteur{--acc:var(--charcoal)}.moment.club{--acc:var(--cyan)}
.mo-time{font-variant-numeric:tabular-nums;font-weight:740;color:var(--muted);font-size:.85rem}
.mo-label{font-weight:720;color:var(--ink)}
.mo-who{flex:1;min-width:0;color:var(--ink-2);font-weight:650;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.mo-replay{font-size:.78rem;font-weight:700;color:var(--cyan-ink);white-space:nowrap}

/* ---- Affiche QR (print) ------------------------------------------------- */
.affiche-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,320px),1fr));
  gap:1.2rem;margin-top:.5rem}
.affiche{display:flex;flex-direction:column;align-items:center;gap:.6rem;text-align:center;
  background:#fff;border:1.5px solid var(--line);border-radius:var(--r-lg);
  box-shadow:var(--sh-sm);padding:1.5rem 1.2rem;break-inside:avoid}
.af-head{font-weight:800;font-size:1.4rem;letter-spacing:-.02em;color:var(--ink)}
.af-qr{width:min(74vw,260px);aspect-ratio:1;display:grid;place-items:center}
.af-qr svg{width:100%;height:100%}
.af-noqr{color:var(--muted);font-weight:600}
.af-url{margin:0;font-weight:760;color:var(--cyan-ink);word-break:break-all;font-size:.95rem}
.af-sub{margin:0;color:var(--faint);font-size:.78rem;font-weight:600;word-break:break-all}
/* Carte « mur » (les 2 terrains) : mise en avant au-dessus des cartes par terrain. */
.affiche-wall{border:2px solid var(--cyan);box-shadow:0 8px 28px rgba(34,176,230,.18);
  margin-bottom:1.2rem}
.affiche-wall .af-head{color:var(--cyan-ink)}
.recap-card p{margin:.2rem 0 .7rem;color:var(--ink-2)}
@media print{
  .affiche{box-shadow:none;border:2px solid #000;page-break-inside:avoid}
  .affiche-wall{border-color:#000}
  .af-url{color:#000}
}

/* ---- Carte « droit à l'image / RGPD » ----------------------------------- */
.rgpd{display:flex;gap:1rem;align-items:flex-start}
.rgpd-ic{flex:none;display:grid;place-items:center;width:46px;height:46px;border-radius:12px;
  background:var(--cyan-soft);font-size:1.4rem}
.rgpd-body h3{margin:.1rem 0 .4rem}
.rgpd-body p{margin:0 0 .5rem;color:var(--ink-2);font-weight:500}
.rgpd-contact{font-weight:700}
.rgpd-contact a{color:var(--cyan-ink)}
.rgpd-contact .dot{color:var(--faint);margin:0 .35rem}
@media(max-width:520px){.rgpd{flex-direction:column;gap:.7rem}}

/* ---- Mention « diffusion non publique » sous les lecteurs --------------- */
.video-note{display:inline-flex;align-items:center;gap:.4rem;margin:.55rem 0 .2rem;
  font-size:.8rem;font-weight:680;color:var(--ink-2);background:var(--paper-2);
  border:1px solid var(--line);border-radius:var(--pill);padding:.28rem .7rem}
.board .video-note{margin:.65rem .95rem 0}     /* aligné dans le plateau d'accueil */
.tc-lock{position:absolute;top:.35rem;right:.35rem;display:grid;place-items:center;
  width:20px;height:20px;border-radius:50%;background:rgba(11,15,21,.62);font-size:.62rem}

/* ---- Direct par terrain (page /live/{t}) -------------------------------- */
.livescore{width:100%;border-collapse:collapse;margin-top:1rem;
  border:1.5px solid var(--line);border-radius:var(--r-lg);overflow:hidden;background:#fff;
  box-shadow:var(--sh-sm)}
.livescore td{padding:1rem 1.1rem;border-top:1px solid var(--line-soft)}
.livescore tr:first-child td{border-top:0}
.livescore td:first-child{border-left:5px solid var(--acc)}
.livescore .nm{font-weight:700;font-size:clamp(1.05rem,2.4vw,1.25rem);letter-spacing:-.015em}
.livescore .nm a.nm-a{color:inherit;text-decoration:none}
.livescore .nm a.nm-a:hover{text-decoration:underline;text-decoration-color:var(--acc)}
.livescore .vr{color:var(--muted);font-size:.78em;font-weight:550}
.livescore .c{font-weight:760;text-align:center;width:2.4em;
  font-size:clamp(1.2rem,3vw,1.6rem);font-variant-numeric:tabular-nums;letter-spacing:-.025em}
.livescore .c.pts{color:var(--cyan-ink);font-weight:840}
.ls-phase{margin:.6rem 0 0;font-size:.78rem;font-weight:740;color:var(--cyan-ink)}
.live-meta{display:flex;align-items:center;gap:.5rem 1.1rem;flex-wrap:wrap;margin:.7rem 0 1.2rem}
.live-meta .mm{color:var(--muted);font-weight:700;font-size:.85rem}

/* ---- Animations --------------------------------------------------------- */
@keyframes pulse{0%,100%{opacity:.35}50%{opacity:1}}
@keyframes rise{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
.match-card:nth-child(2),.fx:nth-child(2){animation-delay:.05s}
.match-card:nth-child(3),.fx:nth-child(3){animation-delay:.1s}
.match-card:nth-child(4),.fx:nth-child(4){animation-delay:.15s}
.fx:nth-child(5){animation-delay:.2s}.fx:nth-child(6){animation-delay:.25s}
@media(prefers-reduced-motion:reduce){
  *{animation:none!important;transition:none!important}
  html{scroll-behavior:auto!important}
}

/* ---- Responsive --------------------------------------------------------- */
@media(max-width:860px){
  .live-layout{grid-template-columns:1fr}
  .preview{position:static}   /* panneau de score d'abord, aperçu en dessous (mobile) */
}
@media(max-width:560px){
  /* topbar : logo fixe + nav sur UNE ligne défilable (fini l'enroulement moche) */
  .topbar{gap:.5rem;padding-left:.7rem;padding-right:.4rem}
  .brand{flex:none}
  .nav{flex:1;min-width:0;flex-wrap:nowrap;overflow-x:auto;justify-content:flex-start;
    gap:.15rem;scrollbar-width:none;-webkit-overflow-scrolling:touch;
    -webkit-mask-image:linear-gradient(90deg,#000 88%,transparent);
    mask-image:linear-gradient(90deg,#000 88%,transparent)}
  .nav::-webkit-scrollbar{display:none}
  .nav a{padding:.4rem .58rem;font-size:.84rem;white-space:nowrap;flex:none}
  .list:not(.slim){display:block;overflow-x:auto;white-space:nowrap}
  .sb-cell{width:48px}
  .sb-step{width:48px;height:34px;font-size:1.2rem}
  .sb-cell .val{font-size:1.45rem}
  .row-form button,.match-form>button{width:100%}
}

/* ---- Import feuille de pointage : aperçu en cartes ---------------------- */
.imp-list{display:flex;flex-direction:column;gap:.7rem;margin:1rem 0 1.3rem}
.imp-card{position:relative;background:var(--surface);border:1px solid var(--line);
  border-radius:var(--r);box-shadow:var(--sh-sm);padding:.75rem .85rem;
  transition:opacity .15s,border-color .15s}
.imp-card:hover{border-color:var(--line-hover)}
.imp-card:has(.imp-keep:not(:checked)){opacity:.4}
.imp-top{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap;
  padding-bottom:.55rem;margin-bottom:.6rem;border-bottom:1px solid var(--line-soft)}
.imp-keep{width:20px;height:20px;flex:0 0 auto;accent-color:var(--cyan);cursor:pointer}
.imp-top input,.imp-top select{padding:.36rem .5rem}
.imp-time{flex:0 0 auto;max-width:118px}
.imp-court{flex:0 0 auto;max-width:108px}
.imp-cat{flex:1;min-width:130px;font-weight:600}
.imp-pl{display:flex;align-items:center;gap:.55rem}
.imp-pl + .imp-pl{margin-top:.45rem}
.imp-pl::before{content:"";flex:0 0 auto;width:7px;height:34px;border-radius:4px;background:var(--acc)}
.imp-name{flex:3;min-width:140px;font-weight:600}
.imp-rank{flex:0 0 70px;width:70px;text-align:center}
.imp-club{flex:2;min-width:104px}
@media(max-width:520px){
  .imp-pl{flex-wrap:wrap}
  .imp-pl::before{height:24px}
  .imp-name{flex:1 1 100%;min-width:0}
  .imp-rank{flex:1 1 30%}
  .imp-club{flex:1 1 55%;min-width:0}
}

/* ---- Import : pop-up de progression pendant la lecture du PDF ----------- */
.imp-overlay{position:fixed;inset:0;z-index:60;display:none;align-items:center;
  justify-content:center;padding:1rem;background:rgba(15,40,55,.42);
  -webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}
.imp-overlay.show{display:flex;animation:imp-fade .2s ease}
@keyframes imp-fade{from{opacity:0}to{opacity:1}}
.imp-modal{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);
  box-shadow:var(--sh);padding:1.7rem 1.9rem;text-align:center;max-width:320px}
.imp-spinner{width:44px;height:44px;margin:0 auto 1rem;border-radius:50%;
  border:4px solid var(--line);border-top-color:var(--cyan);animation:imp-spin .8s linear infinite}
@keyframes imp-spin{to{transform:rotate(360deg)}}
.imp-msg{font-weight:680;color:var(--ink);margin:.1rem 0 .35rem;font-size:1.02rem}

/* ---- Impression (programme / résultats / tableau au club) --------------- */
@media print{
  .topbar,.tabbar,.foot,.skip,.flash,.act,.mform-wrap,
  .hero::after,.bh-t::before{display:none!important}
  body{background:#fff;color:#000}
  /* le titre dégradé (texte transparent) redevient noir lisible sur papier */
  .hero h1{-webkit-text-fill-color:#000!important;color:#000!important;background:none!important}
  .fx-top,.board-head{background:#fff!important}
  .wrap{margin:0;max-width:none;padding:0}
  .card,.fx,.match-card,.imp-card{box-shadow:none;border:1px solid #999;break-inside:avoid}
  /* bandeaux : pas d'aplat encreur à l'impression */
  .mc-head,.fx-top{background:#fff!important;border-bottom:2px solid #000;margin:0;padding:.3rem .4rem}
  .mc-head .label,.mc-head .cta,.fx-top .badge,.t-chip{color:#000!important;background:#fff!important;box-shadow:none}
  a{color:#000;text-decoration:none}
  .bracket-wrap{overflow:visible}
}

/* ---- Ombres noires des cartes (override final, fond blanc) --------------- */
.card,.match-card,.fx,.board,.info-card,.cat-card,.sponsor{box-shadow:var(--sh-card)}
.match-card:hover,.fx:hover,.sponsor:hover{box-shadow:var(--sh-card-h)}
.match-card.empty{box-shadow:none}


/* ── Communications admin : textes prêts à coller ───────────────────────────── */
.comm{margin:1rem 0}
.comm-head{display:flex;align-items:center;gap:.6rem;flex-wrap:wrap}
.comm-head .sec{margin:0}
.comm-head .btn{margin-left:auto}
.comm-txt{width:100%;margin-top:.6rem;padding:.7rem .8rem;border:1px solid var(--line);
  border-radius:8px;background:var(--paper-2);color:var(--ink);resize:vertical;
  font-family:ui-monospace,"SF Mono",Menlo,monospace;font-size:.82rem;line-height:1.5;
  white-space:pre;overflow-x:auto}
.comm-txt:focus{outline:2px solid var(--cyan);outline-offset:1px}

/* ── Palmarès (page des vainqueurs) ─────────────────────────────────────── */
.palm-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(258px,1fr));
  gap:1rem;margin:.9rem 0 1.6rem}
.palm-card{position:relative;background:var(--surface);border-radius:var(--r);
  border-bottom:3.5px solid #f5c400;box-shadow:var(--sh-card);
  padding:1rem 1.15rem 1.15rem;overflow:hidden}
.palm-card::before{content:"";position:absolute;inset:0 0 auto 0;height:4px;
  background:linear-gradient(90deg,#ffdd55,#f5c400)}
.palm-top{display:flex;align-items:center;justify-content:space-between;gap:.6rem;
  margin-bottom:.55rem}
.palm-trophy{font-size:1.35rem;line-height:1;filter:drop-shadow(0 1px 1px rgba(0,0,0,.15))}
.palm-champ{display:block;font-weight:820;font-size:1.28rem;line-height:1.12;
  color:var(--ink);letter-spacing:-.01em;text-decoration:none}
.palm-champ:hover{color:var(--cyan-d)}
.palm-sub{margin:.25rem 0 0;color:var(--muted);font-size:.82rem;font-weight:560}
.palm-rank{display:inline-block;margin-left:.35rem;padding:.02rem .4rem;
  background:var(--paper-2);border-radius:var(--pill);color:var(--ink-2);
  font-weight:720;font-size:.74rem}
.palm-final{margin-top:.7rem;padding-top:.6rem;border-top:1px solid var(--line-soft);
  display:flex;align-items:baseline;flex-wrap:wrap;gap:.3rem .5rem;font-size:.86rem}
.palm-beat{color:var(--faint);font-weight:600}
.palm-final a{color:var(--ink-2);font-weight:650;text-decoration:none}
.palm-final a:hover{color:var(--cyan-d);text-decoration:underline}
.palm-score{margin-left:auto;font-weight:760;color:var(--ink);
  font-variant-numeric:tabular-nums;letter-spacing:.01em}
/* Champion de Plonéour : la couleur du club (cyan), comme l'overlay TV */
.palm-card.ploneour{border-bottom-color:var(--cyan)}
.palm-card.ploneour::before{background:linear-gradient(90deg,var(--cyan),var(--cyan-d))}
.palm-card.ploneour .palm-trophy{filter:none}
/* Titres encore en jeu */
.palm-pending{display:flex;flex-wrap:wrap;gap:.5rem;margin:.7rem 0 1.4rem}
.palm-chip{padding:.4rem .8rem;background:var(--surface);border:1px solid var(--line);
  border-radius:var(--pill);color:var(--cyan-ink);font-weight:700;font-size:.82rem;
  text-decoration:none;box-shadow:var(--sh-card)}
.palm-chip:hover{border-color:var(--cyan);color:var(--cyan-d)}

/* Filtre « À valider » (matchs joués sans vainqueur) + bouton de validation */
.chip2.chip-warn{border-color:var(--yellow-d);color:var(--yellow-ink);background:var(--yellow-soft)}
.chip2.chip-warn:hover{border-color:var(--yellow-d);background:var(--yellow-soft);color:var(--yellow-ink);filter:brightness(.97)}
.chip2.chip-warn.active{background:var(--yellow-d);color:#3a2e00;border-color:var(--yellow-d)}
.chip2.chip-warn.active .n{background:rgba(0,0,0,.16);color:#3a2e00}
button.small.warn{background:var(--yellow-soft);border:1px solid var(--yellow-d);color:var(--yellow-ink);font-weight:720}
button.small.warn:hover{filter:brightness(.97)}

/* Suggestion « vainqueur évident » dans le formulaire d'édition d'un match */
.mf-suggest{display:inline-flex;align-items:center;gap:.3rem;margin-left:.5rem;
  padding:.15rem .55rem;border-radius:var(--pill);font-size:.76rem;font-weight:700;
  color:#186a3b;background:#e6f6ec;border:1px solid #b8e6c6}

/* Listes « voir plus / voir moins » (stats) */
.barlist.bl-capped .bl-extra{display:none}
.barlist.bl-open .bl-extra{display:grid}
.bl-more{margin-top:.6rem;padding:.32rem .7rem;font-size:.8rem;font-weight:700;
  color:var(--cyan-ink);background:var(--cyan-soft);border:1px solid var(--cyan-d);
  border-radius:var(--pill);cursor:pointer}
.bl-more:hover{background:var(--cyan);color:#fff}

/* Petite coupe sur les catégories TERMINÉES (sélecteur des tableaux) */
.tsw-cup{font-size:.92em;line-height:1}
.tsw-done{border-color:var(--yellow-d)}
.tsw-done.active{border-color:var(--ink)}

/* Admin — pilotage des scènes « Prochain match » */
.scene{margin:1rem 0}
.scene-modes{display:flex;flex-wrap:wrap;gap:.6rem;margin:.4rem 0 .3rem}
.scene-mode{flex:1 1 200px;display:flex;flex-direction:column;gap:.15rem;
  padding:.6rem .8rem;border:1.5px solid var(--line);border-radius:var(--r-sm);cursor:pointer}
.scene-mode:has(input:checked){border-color:var(--cyan);background:var(--cyan-soft)}
.scene-mode b{font-weight:750}.scene-mode small{color:var(--muted)}
.scene-mode input{margin-right:.4rem}
.scene-cands{display:flex;flex-direction:column;gap:.35rem;margin:.6rem 0}
.scene-cand{display:flex;align-items:center;gap:.6rem;padding:.4rem .6rem;
  border:1px solid var(--line-soft);border-radius:var(--r-sm);font-size:.9rem}
.scene-cand:has(input:checked){border-color:var(--cyan);background:var(--cyan-soft)}
.scene-cand .sc-h{font-weight:800;font-variant-numeric:tabular-nums;min-width:3.2em}
.scene-cand .sc-t{font-weight:800;color:#fff;background:var(--ink);border-radius:5px;
  padding:.05rem .35rem;font-size:.72rem}
.scene-cand .sc-d{font-weight:650;flex:1}.scene-cand .sc-vs{color:var(--muted);font-weight:600}
.scene-cand .sc-c{color:var(--muted);font-size:.82rem}
.scene-foot{display:flex;align-items:center;gap:.8rem;flex-wrap:wrap;margin-top:.5rem}
.scene-url{font-size:.8rem;color:var(--muted);background:var(--paper-2);padding:.25rem .5rem;border-radius:6px}

/* Accueil admin — bouton vers le pilotage des scènes « Prochain match » */
.obs-cta{margin-top:.9rem;display:flex;align-items:center;gap:.9rem;flex-wrap:wrap}
.obs-cta .hint{margin:0}

/* Comms — stories des finales */
.comm-finales .fin-comm{border-top:1px solid var(--line);padding-top:.9rem;margin-top:.9rem}
.comm-finales .fin-comm:first-of-type{border-top:0;margin-top:.3rem}
.fin-comm-actions{display:flex;gap:.5rem;flex-wrap:wrap}

/* Panneau — bascule mode score AUTO/MANUEL du court */
.mode-btn{cursor:pointer;font:inherit}
.mode-btn.on{background:var(--yellow-soft);border:1px solid var(--yellow-d);color:var(--yellow-ink);font-weight:800;border-radius:7px}
