/* =========================================================================
   obs.krp.lu/aoe — interface « verre liquide »
   Données : API officielle Microsoft (api.ageofempires.com)
   ========================================================================= */
/* Polices Google : chargées depuis index.html (préconnexion + feuille dans <head>) et non plus par @import, qui les découvrait un aller-retour trop tard. */
/* Beaucoup de pseudos et de tags sont en chinois, japonais ou coréen : sans
   police CJK ils s'affichent en carrés vides. Noto Sans SC prend le relais. */

:root{
  /* fonds */
  --bg:#07060c; --bg-2:#0e0b17;
  /* verre */
  --glass:rgba(255,255,255,.045);
  --glass-2:rgba(255,255,255,.075);
  --glass-hi:rgba(255,255,255,.11);
  --stroke:rgba(255,255,255,.10);
  --stroke-2:rgba(255,255,255,.18);
  /* accents */
  /* Améthyste : le thème par défaut depuis le 17/09/2026 (app.js, THEME_DEFAUT).
     Les mêmes valeurs ici évitent un éclair orange avant que le script ne pose le thème. */
  --a1:#5b6cff;  /* bleu-violet « communauté » (thème par défaut, voir THEME_DEFAUT dans app.js) */
  --a2:#aab4ff;
  --a3:#8b5cf6;
  --a4:#3ddc97;
  --a5:#ff6b9d;
  --win:#31d08a; --loss:#ff5f6d;
  /* texte */
  --txt:#f7f4ef; --muted:#a49db3; --dim:#6f6980;
  /* rayons façon deck.krp.hk (20/09/2026) : panneaux 20, cartes 14, petits éléments 10, pilules 999 */
  --r:20px; --r-m:14px; --r-s:10px; --r-pill:999px;
  --mono:'Space Grotesk','Noto Sans SC',ui-monospace,monospace;
  --sh:0 24px 48px -28px rgba(0,0,0,.75);
  --sh-s:0 14px 30px -20px rgba(0,0,0,.7);
}
*{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth}
body{
  min-height:100vh; color:var(--txt);
  font-family:Inter,'Noto Sans SC',system-ui,-apple-system,'Noto Sans CJK SC','Microsoft YaHei',sans-serif; font-size:15px; line-height:1.55;
  -webkit-font-smoothing:antialiased;
  background:
    radial-gradient(1200px 700px at 8% -12%, color-mix(in srgb,var(--a1) 16%,transparent), transparent 60%),
    radial-gradient(1000px 640px at 92% -6%, color-mix(in srgb,var(--a3) 16%,transparent), transparent 58%),
    radial-gradient(900px 700px at 50% 108%, rgba(49,208,170,.09), transparent 62%),
    linear-gradient(180deg,var(--bg-2),var(--bg));
  background-attachment:fixed;
}
/* grain très léger : casse les dégradés plats */
body::before{
  content:'';position:fixed;inset:0;pointer-events:none;z-index:0;opacity:.35;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3'/%3E%3C/filter%3E%3Crect width='120' height='120' filter='url(%23n)' opacity='.30'/%3E%3C/svg%3E");
}
a{color:var(--a2);text-decoration:none;transition:color .16s}
a:hover{color:var(--a1)}
h1,h2,h3,h4{font-family:'Space Grotesk','Noto Sans SC',sans-serif;font-weight:600;letter-spacing:-.022em;line-height:1.18}

/* ---------------- structure ---------------- */
/* La page occupe la largeur disponible : mieux vaut un contenu large et
   lisible en entier qu'un contenu centré et tronqué par des « … ». */
.wrap{max-width:min(1720px, 95vw);margin:0 auto;padding:0 24px;position:relative;z-index:1}
header.top{
  position:sticky;top:0;z-index:60;
  background:rgba(10,8,14,.62);
  backdrop-filter:blur(26px) saturate(180%);
  -webkit-backdrop-filter:blur(26px) saturate(180%);
  border-bottom:1px solid var(--stroke);
}
.top .wrap{display:flex;align-items:center;gap:20px;min-height:68px;flex-wrap:wrap}
.brand{display:flex;align-items:center;gap:12px;font-family:'Space Grotesk';font-weight:700;font-size:18px;letter-spacing:-.03em;color:var(--txt)}
.brand .mark{
  width:36px;height:36px;border-radius:12px;display:grid;place-items:center;
  background:linear-gradient(145deg,var(--a1),var(--a2) 55%,var(--a3));
  color:#1a1008;font-size:14px;font-weight:800;
  box-shadow:0 6px 20px -4px color-mix(in srgb,var(--a1) 65%,transparent), inset 0 1px 0 rgba(255,255,255,.45);
}
.brand small{display:block;color:var(--dim);font-size:10.5px;font-weight:500;letter-spacing:.10em;text-transform:uppercase}
nav.main{display:flex;gap:3px;margin-left:auto;flex-wrap:wrap;
  background:var(--glass);border:1px solid var(--stroke);border-radius:14px;padding:4px;
  backdrop-filter:blur(12px)}
nav.main a{
  padding:7px 14px;border-radius:10px;color:var(--muted);font-size:13.5px;font-weight:500;
  transition:.18s cubic-bezier(.4,0,.2,1);white-space:nowrap;
}
nav.main a:hover{background:var(--glass-2);color:var(--txt)}
nav.main a.on{
  background:linear-gradient(140deg,color-mix(in srgb,var(--a1) 24%,transparent),color-mix(in srgb,var(--a3) 20%,transparent));
  color:#fff;box-shadow:inset 0 1px 0 rgba(255,255,255,.18),0 4px 14px -6px color-mix(in srgb,var(--a1) 70%,transparent);
}
main{padding:32px 0 80px;min-height:60vh}

/* ---------------- surfaces verre ---------------- */
.panel{
  background:var(--glass);
  border:1px solid var(--stroke);
  border-radius:var(--r);
  backdrop-filter:blur(24px) saturate(160%);
  -webkit-backdrop-filter:blur(24px) saturate(160%);
  box-shadow:var(--sh), inset 0 1px 0 rgba(255,255,255,.07);
  position:relative;overflow:hidden;
}
.panel::before{
  content:'';position:absolute;inset:0 0 auto 0;height:1px;
  background:linear-gradient(90deg,transparent,rgba(255,255,255,.30),transparent);
}
.pad{padding:22px 24px}
.head{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin-bottom:18px}
.head h2{font-size:20px}
.head .sub{color:var(--muted);font-size:12.5px}
.spacer{margin-left:auto}
.grid{display:grid;gap:16px}
.g2{grid-template-columns:repeat(auto-fit,minmax(340px,1fr))}
.g3{grid-template-columns:repeat(auto-fit,minmax(250px,1fr))}
.g4{grid-template-columns:repeat(auto-fit,minmax(200px,1fr))}

/* ---------------- tuiles ---------------- */
.tile{
  background:var(--glass);border:1px solid var(--stroke);border-radius:var(--r-m);
  padding:16px 18px;position:relative;overflow:hidden;
  backdrop-filter:blur(20px) saturate(160%);
  box-shadow:var(--sh-s), inset 0 1px 0 rgba(255,255,255,.07);
  transition:transform .22s cubic-bezier(.34,1.4,.5,1), border-color .22s;
}
.tile:hover{transform:translateY(-3px);border-color:var(--stroke-2)}
.tile::after{content:'';position:absolute;top:0;left:0;right:0;height:2px;
  background:linear-gradient(90deg,var(--a1),var(--a2),var(--a3))}
.tile .k{color:var(--dim);font-size:10.5px;text-transform:uppercase;letter-spacing:.11em;font-weight:700}
.tile .v{font-family:'Space Grotesk';font-size:30px;font-weight:600;letter-spacing:-.03em;margin-top:6px;
  font-variant-numeric:tabular-nums;
  background:linear-gradient(135deg,#fff,#cfc6e6);-webkit-background-clip:text;background-clip:text;color:transparent}
.tile .n{color:var(--muted);font-size:12px;margin-top:3px}

/* ---------------- contrôles ---------------- */
select,input,button{
  font:inherit;color:var(--txt);background:var(--glass-2);
  border:1px solid var(--stroke);border-radius:var(--r-s);padding:8px 12px;outline:none;
  transition:.18s cubic-bezier(.4,0,.2,1);backdrop-filter:blur(10px);
}
select{appearance:none;padding-right:30px;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='7'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%23a49db3' stroke-width='1.6' fill='none' stroke-linecap='round'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 11px center}
select:focus,input:focus{border-color:var(--stroke-2);box-shadow:0 0 0 3.5px color-mix(in srgb,var(--a3) 20%,transparent)}
button{cursor:pointer;font-weight:500}
button:hover{background:var(--glass-hi);border-color:var(--stroke-2)}
button:active{transform:scale(.97)}
button.primary{background:linear-gradient(140deg,var(--a1),#e0432a);border-color:transparent;color:#fff;font-weight:600;
  box-shadow:0 8px 22px -8px color-mix(in srgb,var(--a1) 80%,transparent)}
button:disabled{opacity:.35;cursor:not-allowed;transform:none}
.field{display:flex;flex-direction:column;gap:5px}
.field label{font-size:10.5px;color:var(--dim);text-transform:uppercase;letter-spacing:.09em;font-weight:700}
.search{position:relative;flex:1;min-width:190px;max-width:330px}
.search input{width:100%;padding-left:34px;border-radius:13px}
.search::before{content:'⌕';position:absolute;left:12px;top:50%;transform:translateY(-50%);color:var(--dim);font-size:17px;pointer-events:none}

/* ---------------- tableaux ---------------- */
.tbl-wrap{overflow-x:auto;border-radius:var(--r-m);border:1px solid var(--stroke);background:rgba(0,0,0,.16)}
table{width:100%;border-collapse:collapse;font-size:14px}
thead th{
  background:rgba(255,255,255,.045);color:var(--dim);font-size:10.5px;text-transform:uppercase;
  letter-spacing:.09em;font-weight:700;text-align:left;padding:12px 14px;white-space:nowrap;
  position:sticky;top:0;border-bottom:1px solid var(--stroke);backdrop-filter:blur(12px);z-index:2;
}
thead th.s{cursor:pointer;user-select:none;transition:color .15s}
thead th.s:hover{color:var(--a2)}
thead th .ar{opacity:.45;font-size:9px;margin-left:4px}
tbody td{padding:10px 14px;border-bottom:1px solid rgba(255,255,255,.05);vertical-align:middle}
tbody tr{transition:background .14s}
tbody tr:hover{background:rgba(255,255,255,.045)}
tbody tr:last-child td{border-bottom:none}
.num{font-family:var(--mono);font-variant-numeric:tabular-nums;text-align:right}
.rk{font-family:var(--mono);font-weight:600;color:var(--muted);font-variant-numeric:tabular-nums}
.rk.t1{color:#ffd782;text-shadow:0 0 16px color-mix(in srgb,var(--a2) 55%,transparent)}
.rk.t2{color:#e2e2ea}.rk.t3{color:#e0a06a}
.pl{display:flex;align-items:center;gap:10px;min-width:170px}
.av{width:28px;height:28px;border-radius:9px;object-fit:cover;background:var(--glass-2);flex:none;border:1px solid var(--stroke)}
.pl .nm{font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:230px}
.elo{font-family:var(--mono);font-weight:700;font-variant-numeric:tabular-nums;
  background:linear-gradient(135deg,var(--a2),var(--a1));-webkit-background-clip:text;background-clip:text;color:transparent}
.up{color:var(--win)}.down{color:var(--loss)}
.chip{display:inline-block;padding:3px 9px;border-radius:20px;font-size:11px;font-weight:600;letter-spacing:.02em;border:1px solid transparent}
.chip.w{background:rgba(49,208,138,.14);color:#5fe0aa;border-color:rgba(49,208,138,.28)}
.chip.l{background:rgba(255,95,109,.14);color:#ff8f98;border-color:rgba(255,95,109,.28)}
.chip.n{background:rgba(255,200,87,.13);color:var(--a2);border-color:rgba(255,200,87,.26)}
.rgn{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;color:var(--muted);white-space:nowrap}
.rgn b{font-size:13px;font-weight:400}

/* ---------------- barres ---------------- */
.bar{height:6px;border-radius:4px;background:rgba(255,255,255,.08);overflow:hidden;min-width:54px}
.bar i{display:block;height:100%;border-radius:4px;background:linear-gradient(90deg,var(--a1),var(--a2));
  box-shadow:0 0 12px -2px color-mix(in srgb,var(--a2) 60%,transparent)}
.bar.v i{background:linear-gradient(90deg,var(--a3),var(--a5))}
.wr{display:flex;align-items:center;gap:9px}
.wr .p{font-family:var(--mono);font-size:12.5px;min-width:46px;text-align:right}

/* ---------------- pagination ---------------- */
.pager{display:flex;align-items:center;gap:6px;justify-content:center;padding:18px 0 4px;flex-wrap:wrap}
.pager button{padding:7px 12px;min-width:38px;font-family:var(--mono);font-size:13px;border-radius:10px}
.pager button.on{background:linear-gradient(140deg,var(--a1),var(--a3));border-color:transparent;color:#fff;font-weight:700}
.pager .info{color:var(--dim);font-size:12.5px;margin:0 10px}

/* ---------------- graphiques ---------------- */
.ch{position:relative;width:100%}
.chart{width:100%;height:auto;display:block;overflow:visible}
.chart .gl{stroke:rgba(255,255,255,.075);stroke-width:1}
.chart .axl{stroke:rgba(255,255,255,.18);stroke-width:1}
.chart .ax{fill:var(--dim);font-size:11px;font-family:var(--mono);font-weight:500}
.chart .cross{stroke:var(--a2);stroke-width:1;stroke-dasharray:3 3;opacity:.75}
.chart .cdot{fill:var(--a2);stroke:var(--bg);stroke-width:2.5}
.chart .bar-r{transition:opacity .15s}
.chart .bar-r:hover{opacity:.75}
.tipbox{
  position:absolute;pointer-events:none;z-index:8;
  background:rgba(18,15,26,.94);border:1px solid var(--stroke-2);border-radius:11px;
  padding:7px 11px;backdrop-filter:blur(18px);box-shadow:var(--sh-s);white-space:nowrap;
}
.tipbox b{display:block;font-family:var(--mono);font-size:15px;color:var(--a2)}
.tipbox span{display:block;font-size:11px;color:var(--muted);margin-top:1px}
.one-pt{padding:36px 20px;text-align:center}
.one-pt b{display:block;font-family:var(--mono);font-size:32px;color:var(--a2)}
.one-pt span{display:block;color:var(--muted);font-size:13px;margin-top:4px}
.one-pt em{display:block;color:var(--dim);font-size:12px;margin-top:12px;font-style:normal}
.legend{display:flex;gap:16px;flex-wrap:wrap;font-size:12px;color:var(--muted);margin-top:10px}
.legend i{display:inline-block;width:11px;height:11px;border-radius:4px;margin-right:6px;vertical-align:-1px}

/* ---------------- divers ---------------- */
.empty{padding:46px 20px;text-align:center;color:var(--dim);font-size:13.5px}
.spin{width:26px;height:26px;border:2.5px solid rgba(255,255,255,.12);border-top-color:var(--a2);
  border-radius:50%;animation:sp .75s linear infinite;margin:44px auto}
@keyframes sp{to{transform:rotate(360deg)}}
.live{display:inline-flex;align-items:center;gap:7px;font-size:11.5px;color:var(--muted);font-family:var(--mono);
  background:rgba(49,208,138,.10);border:1px solid rgba(49,208,138,.26);padding:5px 11px;border-radius:20px}
.live .d{width:7px;height:7px;border-radius:50%;background:var(--win);animation:pu 2.2s infinite}
@keyframes pu{0%{box-shadow:0 0 0 0 rgba(49,208,138,.55)}70%{box-shadow:0 0 0 9px rgba(49,208,138,0)}100%{box-shadow:0 0 0 0 rgba(49,208,138,0)}}
.crumb{color:var(--dim);font-size:12.5px;margin-bottom:14px}
.crumb a{color:var(--muted)}
footer{border-top:1px solid var(--stroke);padding:24px 0;color:var(--dim);font-size:12.5px;margin-top:20px}
footer .wrap{display:flex;gap:16px;flex-wrap:wrap;align-items:center}
code{font-family:var(--mono);background:var(--glass-2);padding:2px 7px;border-radius:6px;font-size:12.5px;color:var(--a2)}
pre{background:rgba(0,0,0,.34);border:1px solid var(--stroke);border-radius:var(--r-s);padding:15px;overflow-x:auto;font-size:12.5px;line-height:1.65}
pre code{background:none;padding:0}
.hero{display:flex;align-items:center;gap:20px;flex-wrap:wrap}
.hero .avb{width:84px;height:84px;border-radius:22px;border:1px solid var(--stroke-2);object-fit:cover;
  background:var(--glass-2);box-shadow:var(--sh-s)}
.hero h1{font-size:30px}
.tabs{display:flex;gap:4px;margin-bottom:18px;overflow-x:auto;
  background:var(--glass);border:1px solid var(--stroke);border-radius:14px;padding:4px;width:fit-content;max-width:100%}
.tabs button{background:none;border:none;border-radius:10px;color:var(--muted);padding:8px 15px;white-space:nowrap;font-size:13.5px}
.tabs button.on{background:linear-gradient(140deg,color-mix(in srgb,var(--a1) 22%,transparent),color-mix(in srgb,var(--a3) 20%,transparent));color:#fff;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.16)}
.fade-in{animation:fi .35s cubic-bezier(.2,.7,.3,1)}
@keyframes fi{from{opacity:0;transform:translateY(7px)}to{opacity:1;transform:none}}
@media(max-width:780px){
  .top .wrap{padding:11px 20px}
  nav.main{margin-left:0;width:100%;justify-content:flex-start}
  .hero h1{font-size:24px}
  .pad{padding:18px 16px}
}

/* ---------------- badges de centile ---------------- */
.pctl{display:inline-block;padding:3px 9px;border-radius:20px;font-size:10.5px;font-weight:700;
  letter-spacing:.03em;white-space:nowrap;border:1px solid transparent}
.pctl.p0 {background:linear-gradient(135deg,rgba(255,200,87,.30),color-mix(in srgb,var(--a1) 26%,transparent));color:#ffd98a;
          border-color:color-mix(in srgb,var(--a2) 50%,transparent);box-shadow:0 0 16px -4px color-mix(in srgb,var(--a2) 60%,transparent)}
.pctl.p1 {background:rgba(255,200,87,.15);color:#ffd08a;border-color:rgba(255,200,87,.35)}
.pctl.p5 {background:color-mix(in srgb,var(--a3) 16%,transparent);color:#b7a4ff;border-color:color-mix(in srgb,var(--a3) 34%,transparent)}
.pctl.p10{background:rgba(74,168,255,.14);color:#8ec8ff;border-color:rgba(74,168,255,.30)}
.pctl.p25{background:rgba(49,208,170,.13);color:#7ee0c6;border-color:rgba(49,208,170,.28)}
.pctl.p50{background:rgba(255,255,255,.07);color:var(--muted);border-color:var(--stroke)}
.pctl.p99{background:rgba(255,255,255,.045);color:var(--dim);border-color:var(--stroke)}
td.spark{white-space:nowrap;min-width:120px}
td.spark .dlt{font-family:var(--mono);font-size:11.5px;margin-left:7px;font-weight:600}

/* ---------------- civilisations ---------------- */
.civ{display:inline-flex;align-items:center;gap:8px;white-space:nowrap}
.civ .crest{flex:none;filter:drop-shadow(0 2px 5px rgba(0,0,0,.55))}
.crest{vertical-align:middle}

/* ---------------- sélecteur de langue ---------------- */
.langsel{display:flex;gap:2px;background:var(--glass);border:1px solid var(--stroke);
  border-radius:12px;padding:3px;backdrop-filter:blur(12px)}
.langsel button{background:none;border:none;border-radius:9px;padding:5px 10px;font-size:12px;
  color:var(--muted);font-weight:600}
.langsel button.on{background:linear-gradient(140deg,color-mix(in srgb,var(--a1) 24%,transparent),color-mix(in srgb,var(--a3) 20%,transparent));color:#fff}

/* ---------------- bandeau de saison ---------------- */
.season-bar{display:flex;align-items:center;gap:14px;flex-wrap:wrap;
  background:linear-gradient(120deg,color-mix(in srgb,var(--a1) 14%,transparent),color-mix(in srgb,var(--a3) 12%,transparent));
  border:1px solid var(--stroke-2);border-radius:var(--r-m);padding:12px 18px;margin-bottom:18px;
  backdrop-filter:blur(18px)}
.season-bar .lbl{font-size:10.5px;text-transform:uppercase;letter-spacing:.11em;color:var(--dim);font-weight:700}
.season-bar .nm{font-family:'Space Grotesk';font-size:16px;font-weight:600}
.season-bar .rest{margin-left:auto;font-family:var(--mono);font-size:12.5px;color:var(--muted)}

/* ---------------- équipes dans les matchs ---------------- */
.teams{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.team{display:flex;flex-direction:column;gap:3px;min-width:0}
.team .row{display:flex;align-items:center;gap:6px;font-size:12.5px;white-space:nowrap}
.team .row a{color:var(--txt)}
.team .row a:hover{color:var(--a2)}
.vs{font-family:var(--mono);font-size:11px;color:var(--dim);font-weight:700;padding:0 4px}
.team.mine .row a{color:var(--a4)}

/* =========================================================================
   Dock inférieur (iOS) + recherche Spotlight + ajustements responsive
   ========================================================================= */
body{padding-bottom:104px}          /* place pour le dock */

.dock{
  position:fixed;left:50%;bottom:16px;transform:translateX(-50%);z-index:70;
  display:flex;gap:6px;padding:8px;max-width:calc(100vw - 24px);overflow-x:auto;
  background:rgba(20,16,28,.55);
  border:1px solid var(--stroke-2);border-radius:26px;
  backdrop-filter:blur(30px) saturate(200%);
  -webkit-backdrop-filter:blur(30px) saturate(200%);
  box-shadow:0 26px 60px -16px rgba(0,0,0,.9), inset 0 1px 0 rgba(255,255,255,.16);
  scrollbar-width:none;
}
.dock::-webkit-scrollbar{display:none}
.dock a{
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;
  width:66px;padding:8px 4px 7px;border-radius:19px;color:var(--muted);
  font-size:10.5px;font-weight:600;letter-spacing:-.01em;text-align:center;flex:none;
  transition:transform .28s cubic-bezier(.34,1.5,.5,1), background .2s, color .2s;
}
.dock a .ic{
  width:30px;height:30px;border-radius:10px;display:grid;place-items:center;
  background:var(--glass-2);border:1px solid var(--stroke);
  transition:background .22s, box-shadow .22s, transform .28s cubic-bezier(.34,1.5,.5,1);
}
.dock a .ic svg{width:17px;height:17px;stroke:currentColor;fill:none;stroke-width:1.7;
  stroke-linecap:round;stroke-linejoin:round}
/* Bouton « Moi » : la vignette Steam remplit la pastille du dock. */
.dock a .ic-moi{padding:0;overflow:hidden}
.dock a .ic-moi .av{width:100%;height:100%;border:0;border-radius:inherit;background:transparent}

.dock a:hover{color:var(--txt);transform:translateY(-5px)}
.dock a:hover .ic{background:var(--glass-hi)}
.dock a.on{color:#fff}
.dock a.on .ic{
  background:linear-gradient(145deg,var(--a1),var(--a3));
  border-color:transparent;transform:translateY(-2px) scale(1.06);
  box-shadow:0 10px 24px -8px color-mix(in srgb,var(--a1) 85%,transparent), inset 0 1px 0 rgba(255,255,255,.4);
}
.dock a.on::after{
  content:'';position:absolute;bottom:3px;width:4px;height:4px;border-radius:50%;
  background:#fff;opacity:.85;
}
.dock a{position:relative}

/* --- déclencheur de recherche dans la barre du haut --- */
.spot-trigger{
  display:flex;align-items:center;gap:9px;min-width:230px;
  background:var(--glass);border:1px solid var(--stroke);border-radius:13px;
  padding:8px 12px;color:var(--dim);font-size:13px;cursor:pointer;
  backdrop-filter:blur(12px);transition:.2s;
}
.spot-trigger:hover{background:var(--glass-2);border-color:var(--stroke-2);color:var(--muted)}
.spot-trigger .ph{flex:1;text-align:left}
kbd{font-family:var(--mono);font-size:10.5px;background:var(--glass-2);border:1px solid var(--stroke);
  border-radius:6px;padding:2px 6px;color:var(--dim)}

/* --- surcouche Spotlight --- */
.spot{position:fixed;inset:0;z-index:200;display:grid;place-items:start center;
  padding:12vh 20px 20px;background:rgba(5,4,8,.55);backdrop-filter:blur(10px);
  animation:fi .18s ease-out}
.spot[hidden]{display:none}
.spot-panel{
  width:min(640px,100%);
  background:rgba(22,18,30,.86);border:1px solid var(--stroke-2);border-radius:22px;
  backdrop-filter:blur(36px) saturate(200%);
  box-shadow:0 40px 90px -20px rgba(0,0,0,.92), inset 0 1px 0 rgba(255,255,255,.16);
  overflow:hidden;animation:pop .24s cubic-bezier(.2,1.2,.4,1);
}
@keyframes pop{from{opacity:0;transform:translateY(-14px) scale(.97)}to{opacity:1;transform:none}}
.spot-input{display:flex;align-items:center;gap:12px;padding:16px 18px;border-bottom:1px solid var(--stroke);
  color:var(--dim)}
.spot-input input{flex:1;background:none;border:none;padding:0;font-size:17px;color:var(--txt)}
.spot-input input:focus{box-shadow:none}
.spot-results{max-height:min(52vh,420px);overflow-y:auto}
.spot-results .r{display:flex;align-items:center;gap:12px;padding:11px 18px;cursor:pointer;
  border-bottom:1px solid rgba(255,255,255,.05);transition:background .12s}
.spot-results .r:last-child{border-bottom:none}
.spot-results .r:hover,.spot-results .r.sel{background:rgba(255,255,255,.07)}
.spot-results .r .nm{flex:1;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.spot-results .hint{padding:22px 18px;color:var(--dim);font-size:13px;text-align:center}

/* --- responsive --- */
@media(max-width:900px){
  .spot-trigger{min-width:0;flex:1}
  .spot-trigger .ph,.spot-trigger kbd{display:none}
  .spot-trigger{justify-content:center;padding:8px}
}
@media(max-width:640px){
  .wrap{padding:0 14px}
  .pad{padding:16px 14px}
  .top .wrap{min-height:56px;gap:10px}
  .brand small{display:none}
  .tile .v{font-size:24px}
  .hero{gap:14px}
  .hero .avb{width:64px;height:64px;border-radius:18px}
  .hero h1{font-size:21px}
  table{font-size:13px}
  thead th,tbody td{padding:8px 10px}
  .dock{bottom:10px;padding:6px;border-radius:22px;gap:2px}
  .dock a{width:58px;font-size:9.5px;padding:6px 2px 6px}
  .dock a .ic{width:27px;height:27px}
  body{padding-bottom:92px}
  .grid{gap:12px}
  .g2,.g3,.g4{grid-template-columns:1fr}
}
@supports(padding:max(0px)){
  .dock{bottom:max(16px,env(safe-area-inset-bottom))}
}

/* =========================================================================
   Barres de défilement : discrètes partout, jamais de barre horizontale
   visible sur les conteneurs qui défilent (dock, tableaux, onglets).
   ========================================================================= */
html{overflow-x:hidden}
body{overflow-x:hidden}

*{scrollbar-width:thin;scrollbar-color:rgba(255,255,255,.16) transparent}
*::-webkit-scrollbar{width:8px;height:8px}
*::-webkit-scrollbar-track{background:transparent}
*::-webkit-scrollbar-thumb{background:rgba(255,255,255,.14);border-radius:8px;
  border:2px solid transparent;background-clip:content-box}
*::-webkit-scrollbar-thumb:hover{background:rgba(255,255,255,.26);background-clip:content-box}
*::-webkit-scrollbar-corner{background:transparent}

/* conteneurs à défilement horizontal : barre masquée, geste conservé */
.dock,.tbl-wrap,.tabs,.spot-results{-ms-overflow-style:none}
.dock,.tabs{scrollbar-width:none}
.dock::-webkit-scrollbar,.tabs::-webkit-scrollbar{display:none;width:0;height:0}
.tbl-wrap{scrollbar-width:thin;overscroll-behavior-x:contain}
.tbl-wrap::-webkit-scrollbar{height:6px}
.tbl-wrap::-webkit-scrollbar-thumb{background:rgba(255,255,255,.12)}
.tbl-wrap:hover::-webkit-scrollbar-thumb{background:rgba(255,255,255,.22)}

/* le dock ne doit jamais provoquer de débordement de la page */
.dock{max-width:min(980px, calc(100vw - 24px));width:max-content}

/* ApexCharts : neutraliser les débordements du conteneur */
.ch{max-width:100%;overflow:hidden}
.apexcharts-canvas{max-width:100%!important}
.spark-ch{display:inline-block;vertical-align:middle;min-height:0!important;overflow:visible}
.spark-ch .apexcharts-canvas{overflow:visible}

/* =========================================================================
   Listes déroulantes : les <option> sont rendues par le système et
   héritaient d'un blanc sur gris illisible. On force un fond sombre opaque
   et un texte clair, sur tous les moteurs.
   ========================================================================= */
select{color-scheme:dark}
select option,
select optgroup{
  background-color:#16121e;
  color:#f7f4ef;
  padding:8px 10px;
}
select option:checked,
select option:hover{
  background:linear-gradient(0deg,color-mix(in srgb,var(--a1) 30%,transparent),color-mix(in srgb,var(--a1) 30%,transparent));
  color:#fff;
}
select option:disabled{color:#6f6980}
/* Firefox rend le fond de la liste via le select lui-même */
@-moz-document url-prefix(){
  select{background-color:#16121e}
}
input,textarea{color-scheme:dark}
input::placeholder{color:#6f6980;opacity:1}

/* =========================================================================
   Équipes : joueurs à gauche | VS | adversaires à droite, sur une grille
   pour rester lisible en 2v2, 3v3 et 4v4.
   ========================================================================= */
/* Une partie = UNE ligne. Les joueurs se posent côte à côte et non empilés :
   en colonne, un 4v4 faisait 300 px de haut et les pseudos passaient à la
   ligne, ce qui rendait le tableau illisible. */
.teams{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:10px;min-width:320px}
.team{display:flex;flex-direction:row;flex-wrap:nowrap;align-items:center;gap:10px;min-width:0;
  overflow:hidden}
.team.mine{justify-content:flex-end;text-align:right}
.team .row{display:flex;align-items:center;gap:5px;font-size:12.5px;min-width:0;
  white-space:nowrap;flex:0 1 auto}
.team .row a{color:var(--txt);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.team .row a:hover{color:var(--a2)}
.team.mine .row a{color:var(--a4)}
.vs{font-family:var(--mono);font-size:10.5px;color:var(--dim);font-weight:800;letter-spacing:.08em;
  background:var(--glass-2);border:1px solid var(--stroke);border-radius:8px;padding:3px 7px}

/* =========================================================================
   Emblèmes de rang, dérivés du centile réel (rang / total du ladder).
   ========================================================================= */
.tier{display:inline-flex;align-items:center;gap:7px;white-space:nowrap}
.tier svg{flex:none;filter:drop-shadow(0 2px 6px rgba(0,0,0,.6))}
.tier .tn{font-size:11.5px;font-weight:700;letter-spacing:.02em}

/* =========================================================================
   Aucune barre horizontale visible nulle part.
   Les tableaux larges restent défilables au geste/à la molette, avec un
   dégradé de bord qui signale qu'il reste du contenu à droite.
   ========================================================================= */
.tbl-wrap{
  scrollbar-width:none;-ms-overflow-style:none;
  position:relative;
  -webkit-overflow-scrolling:touch;
  overscroll-behavior-x:contain;
}
.tbl-wrap::-webkit-scrollbar{display:none;height:0;width:0}
/* indice visuel de défilement possible */
.tbl-wrap{
  background-image:linear-gradient(to left, rgba(10,8,14,.85), rgba(10,8,14,0) 28px);
  background-repeat:no-repeat;background-position:right center;background-size:28px 100%;
  background-attachment:local, scroll;
}
.spot-results{scrollbar-width:none}
.spot-results::-webkit-scrollbar{display:none}

/* la grille d'équipes ne doit pas forcer le tableau à déborder */
.teams{min-width:0;gap:8px}
.team .row a{max-width:11ch;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
@media(min-width:1100px){ .team .row a{max-width:14ch} }
@media(min-width:1500px){ .team .row a{max-width:18ch} }
/* Rien ne dépasse d'une ligne dans le tableau des matchs. */
table.compact tbody td{vertical-align:middle}
.dt,.dur,.srv,.mapc{white-space:nowrap}

/* garde-fous globaux contre tout débordement horizontal */
.panel,.tile,.ch,table{max-width:100%}
.apexcharts-canvas,.apexcharts-svg{max-width:100%!important}
img,svg{max-width:100%}

/* =========================================================================
   Tableaux réellement responsives : plutôt que de laisser défiler
   horizontalement, on retire les colonnes secondaires quand l'écran rétrécit.
   .hm = masquée sous 1100 px · .hs = masquée sous 760 px
   ========================================================================= */
@media(max-width:1100px){ th.hm, td.hm { display:none } }
@media(max-width:760px){  th.hs, td.hs { display:none } }
@media(max-width:760px){
  .tbl-wrap{background-image:none}      /* plus rien à faire défiler */
  .pl{min-width:0}
  .pl .nm{max-width:12ch}
  .teams{grid-template-columns:1fr auto 1fr}
  .team .row a{max-width:9ch}
}
@media(max-width:420px){
  .pl .nm{max-width:9ch}
  thead th,tbody td{padding:7px 8px;font-size:12.5px}
}

/* =========================================================================
   Listes déroulantes maison — aucun rendu système, donc aucun flash blanc.
   ========================================================================= */
.sel{position:relative;display:inline-block}
/* Le <select> natif reste dans le DOM (sa valeur et son événement « change »
   pilotent l'application) mais en display:none : en opacity:0 son texte était
   encore copié avec la page et lu par les lecteurs d'écran, ce qui donnait le
   libellé en double. */
.sel select{display:none}
.sel-btn{
  display:flex;align-items:center;gap:9px;width:100%;
  background:var(--glass-2);border:1px solid var(--stroke);border-radius:var(--r-s);
  padding:8px 12px;color:var(--txt);font:inherit;font-size:14px;cursor:pointer;
  backdrop-filter:blur(10px);transition:.18s;white-space:nowrap;
}
.sel-btn:hover{background:var(--glass-hi);border-color:var(--stroke-2)}
.sel-btn svg{opacity:.55;transition:transform .2s}
.sel.open .sel-btn{border-color:var(--stroke-2);box-shadow:0 0 0 3.5px color-mix(in srgb,var(--a3) 18%,transparent)}
.sel.open .sel-btn svg{transform:rotate(180deg)}
.sel-val{flex:1;text-align:left;overflow:hidden;text-overflow:ellipsis}

.sel-menu{
  position:absolute;z-index:120;top:calc(100% + 6px);left:0;min-width:100%;max-width:min(320px,90vw);
  max-height:min(46vh,320px);overflow-y:auto;padding:5px;
  background:rgba(22,18,30,.94);border:1px solid var(--stroke-2);border-radius:14px;
  backdrop-filter:blur(30px) saturate(180%);
  box-shadow:0 26px 60px -16px rgba(0,0,0,.9), inset 0 1px 0 rgba(255,255,255,.12);
  scrollbar-width:none;animation:pop .16s cubic-bezier(.2,1.2,.4,1);
}
.sel-menu::-webkit-scrollbar{display:none}
.sel-opt{
  display:flex;align-items:center;gap:8px;width:100%;text-align:left;
  background:none;border:none;border-radius:10px;padding:8px 11px;
  color:var(--muted);font:inherit;font-size:13.5px;cursor:pointer;transition:.13s;
}
.sel-opt span{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sel-opt:hover{background:rgba(255,255,255,.08);color:var(--txt)}
.sel-opt.on{background:linear-gradient(140deg,color-mix(in srgb,var(--a1) 24%,transparent),color-mix(in srgb,var(--a3) 20%,transparent));color:#fff;font-weight:600}
.sel-opt svg{opacity:.9;flex:none}

/* =========================================================================
   Cartes d'ELO par mode — chaque ladder a son propre ELO, on ne les mélange
   jamais (le 1v1 et le 3v3 ne sont pas comparables).
   ========================================================================= */
.elo-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:14px;margin-bottom:18px}
.elo-card{
  background:var(--glass);border:1px solid var(--stroke);border-radius:var(--r-m);
  padding:14px 16px;backdrop-filter:blur(20px) saturate(160%);
  box-shadow:var(--sh-s), inset 0 1px 0 rgba(255,255,255,.07);
  position:relative;overflow:hidden;transition:transform .22s cubic-bezier(.34,1.4,.5,1),border-color .2s;
}
.elo-card:hover{transform:translateY(-3px);border-color:var(--stroke-2)}
.elo-card::after{content:'';position:absolute;top:0;left:0;right:0;height:2px;
  background:linear-gradient(90deg,var(--a1),var(--a2),var(--a3))}
.elo-card .m{font-size:10.5px;text-transform:uppercase;letter-spacing:.10em;color:var(--dim);font-weight:700}
.elo-card .e{font-family:'Space Grotesk';font-size:32px;font-weight:600;letter-spacing:-.03em;
  line-height:1.1;margin:5px 0 6px;font-variant-numeric:tabular-nums;
  background:linear-gradient(135deg,var(--a2),var(--a1));-webkit-background-clip:text;background-clip:text;color:transparent}
.elo-card .r{display:flex;flex-direction:column;gap:2px;font-family:var(--mono);font-size:12px;color:var(--muted)}
.elo-card .r i{color:var(--dim);font-style:normal;font-size:11px}
.elo-card .r span{display:flex;align-items:center;gap:5px}
.elo-card .b{display:flex;align-items:center;gap:8px;margin-top:9px;flex-wrap:wrap}
.elo-card .pk{font-family:var(--mono);font-size:11px;color:var(--dim)}

/* =========================================================================
   Alignement des compositions de match.
   Problème corrigé : le blason et le nom de civilisation passaient à la ligne
   dans une cellule étroite, et le 1v1 laissait une colonne d'alliés vide.
   ========================================================================= */
td .civ,.civ{display:inline-flex;align-items:center;gap:8px;flex-wrap:nowrap;white-space:nowrap}
.civ > span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
th:nth-child(3),td:nth-child(3){white-space:nowrap}

.teams{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:10px;min-width:0}
.teams.solo{grid-template-columns:auto 1fr;justify-items:start}
.teams.solo .vs{justify-self:start}
.team{display:flex;flex-direction:column;gap:3px;min-width:0;width:100%}
.team.mine{align-items:flex-end}
.team.mine .row{flex-direction:row-reverse}
.team .row{display:flex;align-items:center;gap:6px;min-width:0;line-height:1.35;font-size:12.5px}
.team .row a{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:16ch}
.team .row .crest{flex:none}
.vs{align-self:center;font-family:var(--mono);font-size:10px;color:var(--dim);font-weight:800;
  letter-spacing:.06em;background:var(--glass-2);border:1px solid var(--stroke);
  border-radius:7px;padding:2px 6px;line-height:1.4}

/* =========================================================================
   Paliers officiels : icône Microsoft + libellé renvoyés par l'API Ranked.
   ========================================================================= */
.rank-badge{display:inline-flex;align-items:center;gap:7px;white-space:nowrap}
.rank-badge img{width:24px;height:24px;object-fit:contain;flex:none;
  filter:drop-shadow(0 2px 6px rgba(0,0,0,.6))}
.rank-badge .rl{font-size:11.5px;font-weight:700;letter-spacing:.01em}
.rl-bronze{color:#c98a4b}.rl-silver{color:#cfd4dc}.rl-gold{color:#ffcf5c}
.rl-platinum{color:#7ee8d0}.rl-diamond{color:#8ec8ff}.rl-conqueror{color:#ff8a6b}
.rl-unranked{color:var(--dim)}

/* =========================================================================
   Page joueur — colonne latérale compacte, saison en cours mise en avant.
   ========================================================================= */
.pl-layout{display:grid;grid-template-columns:340px 1fr;gap:16px;align-items:start}
.pl-side{display:flex;flex-direction:column;gap:14px;position:sticky;top:84px}
.pl-main{min-width:0}

.pl-id{text-align:center}
.pl-id .avb{width:76px;height:76px;border-radius:20px;margin:0 auto 10px;display:block}
.pl-id h1{font-size:22px;margin-bottom:8px;word-break:break-word}
.pl-meta{display:flex;justify-content:center;margin-bottom:5px}
.pl-sub{color:var(--dim);font-size:11.5px}
.pl-kpi{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:14px;
  padding-top:14px;border-top:1px solid var(--stroke)}
.pl-kpi div{display:flex;flex-direction:column;gap:2px}
.pl-kpi b{font-family:'Space Grotesk';font-size:16px;font-weight:600;font-variant-numeric:tabular-nums}
.pl-kpi span{font-size:10px;text-transform:uppercase;letter-spacing:.08em;color:var(--dim);font-weight:700}

/* --- carte de ladder classé --- */
.ladder{
  background:var(--glass);border:1px solid var(--stroke);border-radius:var(--r-m);
  backdrop-filter:blur(22px) saturate(160%);overflow:hidden;
  box-shadow:var(--sh-s), inset 0 1px 0 rgba(255,255,255,.07);
}
.ladder-head{display:flex;align-items:baseline;gap:8px;padding:12px 16px 0}
.lh-name{font-family:'Space Grotesk';font-size:14px;font-weight:600}
.lh-season{margin-left:auto;font-size:10.5px;text-transform:uppercase;letter-spacing:.08em;
  color:var(--dim);font-weight:700}
.ladder-main{display:flex;align-items:center;gap:12px;padding:12px 16px 10px}
.lm-icon{width:52px;height:52px;object-fit:contain;flex:none;
  filter:drop-shadow(0 3px 10px rgba(0,0,0,.7))}
.lm-tier{min-width:0}
.lm-tier .t{font-family:'Space Grotesk';font-size:15px;font-weight:600;line-height:1.2;
  background:linear-gradient(135deg,var(--a2),var(--a1));
  -webkit-background-clip:text;background-clip:text;color:transparent}
.lm-tier .r{font-family:var(--mono);font-size:12.5px;color:var(--muted);font-variant-numeric:tabular-nums}
.lm-tier .r i{color:var(--dim);font-style:normal;font-size:11px}
.lm-stats{margin-left:auto;display:flex;gap:14px;text-align:right}
.lm-stats div{display:flex;flex-direction:column}
.lm-stats b{font-family:'Space Grotesk';font-size:15px;font-weight:600;font-variant-numeric:tabular-nums}
.lm-stats span{font-size:9.5px;text-transform:uppercase;letter-spacing:.07em;color:var(--dim);font-weight:700}

.wl{position:relative;height:20px;margin:0 16px 12px;border-radius:6px;
  background:rgba(255,95,109,.22);overflow:hidden}
.wl i{display:block;height:100%;background:linear-gradient(90deg,rgba(49,208,138,.55),rgba(49,208,138,.35))}
.wl .w,.wl .l{position:absolute;top:0;line-height:20px;font-family:var(--mono);font-size:11px;font-weight:700}
.wl .w{left:8px;color:#7ee8b4}
.wl .l{right:8px;color:#ff9da6}

table.past{width:100%;border-collapse:collapse;font-size:12.5px}
table.past thead th{background:none;font-size:9.5px;padding:6px 16px;border-bottom:1px solid var(--stroke)}
table.past tbody td{padding:6px 16px;border-bottom:1px solid rgba(255,255,255,.045)}
table.past tbody tr:last-child td{border-bottom:none}

table.compact{font-size:13px}
table.compact thead th,table.compact tbody td{padding:7px 10px}
td.dt{color:var(--muted);font-size:12px;white-space:nowrap}

@media(max-width:1000px){
  .pl-layout{grid-template-columns:1fr}
  .pl-side{position:static}
}

/* =========================================================================
   Correctif : « Conqueror III » se coupait entre le mot et le chiffre.
   Cause : .lm-tier .t n'interdisait pas la césure, et la carte de ladder
   entassait icône + palier + 3 statistiques sur une seule ligne de 340 px.
   ========================================================================= */
.rank-badge,.rank-badge .rl{white-space:nowrap}
.rank-badge .rl{overflow:hidden;text-overflow:ellipsis}
td:has(.rank-badge){white-space:nowrap}

/* le palier ne se coupe jamais ; il rétrécit avec des points de suspension */
.lm-tier{min-width:0;flex:1}
.lm-tier .t{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.lm-tier .r{white-space:nowrap}

/* Solo et Équipe sont deux cartes côte à côte : leurs lignes doivent tomber à
   la même hauteur. Sans réserve, un palier absent (les ladders de saison n'en
   publient pas) ou un classement national manquant décalait toute la carte
   d'une ligne par rapport à sa voisine. On réserve donc la place, et les deux
   rangs — mondial et national — occupent chacun sa ligne, toujours. */
.lm-tier .t{min-height:1.2em}
.lm-tier .r{display:grid;grid-template-rows:repeat(2,auto);gap:1px;align-content:start;
  min-height:2.6em}
.lm-tier .r span{display:inline-flex;align-items:center;gap:4px}
.ladder-main{align-items:flex-start}
.lm-icon{margin-top:2px}
.lm-stats{align-self:center}

/* la ligne principale ne porte plus que l'icône et le palier */
.ladder-main{display:flex;align-items:center;gap:12px;padding:12px 16px 8px}

/* les statistiques occupent leur propre ligne, réparties en trois colonnes */
.lm-stats{
  display:grid;grid-template-columns:repeat(3,1fr);gap:8px;
  margin:0 16px 10px;padding-top:10px;border-top:1px solid var(--stroke);
  text-align:left;
}
.lm-stats div{display:flex;flex-direction:column;min-width:0}
.lm-stats b{font-family:'Space Grotesk';font-size:16px;font-weight:600;
  font-variant-numeric:tabular-nums;white-space:nowrap}
.lm-stats span{font-size:9.5px;text-transform:uppercase;letter-spacing:.07em;
  color:var(--dim);font-weight:700;white-space:nowrap}

/* =========================================================================
   Tableau des saisons passées : 4 colonnes au lieu de 5, victoires/défaites
   passées sous le winrate. Il tient désormais dans la colonne de 340 px.
   ========================================================================= */
table.past{width:100%;table-layout:fixed;border-collapse:collapse;font-size:12px}
table.past th,table.past td{padding:6px 8px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
table.past th:first-child,table.past td:first-child{padding-left:16px}
table.past th:last-child,table.past td:last-child{padding-right:16px}
table.past td.sn{color:var(--muted)}
table.past .wrp{display:block;font-family:var(--mono);font-variant-numeric:tabular-nums}
table.past .vd{display:block;font-size:10px;color:var(--dim);font-family:var(--mono)}
table.past col.c1{width:38%}

/* Tableau « Autres ladders » : libellés longs (« Quick Match 2v2 ») sur une ligne */
.pl-side table.past td:first-child{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:0;width:46%}
.pl-side table.past{table-layout:fixed}
.pl-side table.past td{white-space:nowrap}

/* En-têtes de tableau : le libellé et la flèche de tri restent solidaires */
thead th{white-space:nowrap}
thead th .ar{display:inline-block;white-space:nowrap}
/* Puce de région : jamais de césure entre l'emblème et le nom */
.rgn{white-space:nowrap;flex-wrap:nowrap}
.rgn b{line-height:1}
/* Nom de saison : jamais tronqué. Sur écran étroit il passe simplement à la
   ligne — un nom coupé par des points de suspension n'apprend rien. */
.season-bar .nm{white-space:normal;overflow:visible;text-overflow:clip;max-width:100%;
  line-height:1.25;overflow-wrap:anywhere}
.season-bar{flex-wrap:wrap}
.season-bar > div:first-child{min-width:0;flex:1 1 220px}
.season-bar .rest{white-space:normal;text-align:right}
@media(max-width:560px){
  .season-bar{gap:6px 12px}
  .season-bar .nm{font-size:14.5px}
  .season-bar .rest{margin-left:0;text-align:left;flex-basis:100%}
}

/* =========================================================================
   Correctif : « .panel { overflow:hidden } » découpait les menus déroulants
   qui s'ouvrent depuis l'en-tête d'un panneau — le menu semblait « mangé ».
   Les panneaux laissent désormais déborder ; seuls les blocs qui en ont
   réellement besoin conservent le rognage.
   ========================================================================= */
.panel{overflow:visible}
.panel::before{border-radius:var(--r) var(--r) 0 0}
.tile,.ladder,.elo-card,.spot-panel,.sel-menu{overflow:hidden}
.ladder{overflow:hidden}

/* Un panneau contenant un menu ouvert passe au-dessus de ses voisins */
.panel:has(.sel.open){position:relative;z-index:130}
.head{position:relative;z-index:1}
.sel.open{z-index:140}

/* Le menu ne doit jamais passer sous l'en-tête collant ni sous le dock */
.sel-menu{z-index:150}

/* Les en-têtes de tableau collants (z-index 2, avec backdrop-filter donc
   contexte d'empilement propre) recouvraient le menu déroulant : la barre de
   filtres doit donc passer au-dessus d'eux. */
.head{position:relative;z-index:20}
thead th{z-index:2}

/* =========================================================================
   Fond : « background-attachment: fixed » n'était peint que sur la hauteur
   d'une fenêtre — au-delà, les pages longues viraient au délavé. Le fond de
   base passe donc sur <html>, et le décor sur une couche fixe dédiée.
   ========================================================================= */
html{background:#070609}
body{background:#070609;background-attachment:scroll}
body::after{
  content:'';position:fixed;inset:0;z-index:-1;pointer-events:none;
  background:
    radial-gradient(1200px 700px at 8% -12%, color-mix(in srgb,var(--a1) 16%,transparent), transparent 60%),
    radial-gradient(1000px 640px at 92% -6%, color-mix(in srgb,var(--a3) 16%,transparent), transparent 58%),
    radial-gradient(900px 700px at 50% 108%, rgba(49,208,170,.09), transparent 62%),
    linear-gradient(180deg,#0d0b12,#070609);
}
body::before{z-index:-1}
td.mapc{font-size:12.5px;white-space:nowrap;max-width:16ch;overflow:hidden;text-overflow:ellipsis}
td.dur{font-family:var(--mono);font-size:12px;color:var(--muted);white-space:nowrap}
.clan-tag{font-family:var(--mono);font-weight:700;letter-spacing:.02em;
  background:linear-gradient(135deg,var(--a3),var(--a5));
  -webkit-background-clip:text;background-clip:text;color:transparent}
.clan-tag:hover{background:linear-gradient(135deg,var(--a1),var(--a2));
  -webkit-background-clip:text;background-clip:text}

/* Matrice d'affrontements civilisation contre civilisation */
table.matrix{font-size:12px}
table.matrix th,table.matrix td{padding:6px 7px;text-align:center}
table.matrix td.mh{text-align:left;white-space:nowrap;min-width:150px}
table.matrix td.diag{color:var(--dim);background:rgba(255,255,255,.03)}
table.matrix thead th{padding:8px 6px}

/* =========================================================================
   Suppression du défilement horizontal.
   Trois paliers de masquage progressif des colonnes secondaires :
     .hl  disparaît sous 1300 px   (colonnes de confort)
     .hm  disparaît sous 1100 px   (colonnes secondaires)
     .hs  disparaît sous  760 px   (tout sauf l'essentiel)
   Les panneaux en grille sont plus étroits que la fenêtre : les paliers sont
   volontairement larges pour en tenir compte.
   ========================================================================= */
@media(max-width:1300px){ th.hl, td.hl { display:none } }
@media(max-width:1100px){ th.hm, td.hm { display:none } }
@media(max-width:760px){  th.hs, td.hs { display:none } }

/* Les noms de joueur et de civilisation se tronquent plutôt que d'élargir */
.pl .nm{max-width:min(22ch, 34vw)}
.civ > span{max-width:min(18ch, 30vw)}
td.mapc,td .civ > span{overflow:hidden;text-overflow:ellipsis}

/* Tableaux compacts « records / top 5 » : largeurs fixes, aucun débordement */
table.rec{table-layout:fixed;width:100%}
table.rec td{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:8px 8px}
/* Les rangs vont jusqu'à 5 chiffres (« 53 141ᵉ ») : 38 px les tronquaient en
   « 1… » sur les régions peu peuplées. */
table.rec td.c-rk{width:68px;padding-left:12px;text-align:right}
table.rec td.c-elo{width:62px}
table.rec td.c-val{width:74px;font-weight:600;padding-right:12px}
table.rec td.c-pl{min-width:0}
table.rec .pl{min-width:0;gap:8px}
table.rec .pl .nm{max-width:100%;flex:1}
.rgn-mini{font-size:13px;line-height:1;flex:none;opacity:.85}

/* Les grilles de la page Records tiennent compte de la largeur réelle */
@media(min-width:1250px){ .g2{grid-template-columns:repeat(auto-fit,minmax(430px,1fr))} }

/* Matrices larges (civ × mode, affrontements) : elles restent défilables,
   mais on réduit fortement le nombre de colonnes visibles sur petit écran. */
@media(max-width:1100px){
  table.matrix th:nth-child(n+9), table.matrix td:nth-child(n+9){display:none}
}
@media(max-width:760px){
  table.matrix th:nth-child(n+6), table.matrix td:nth-child(n+6){display:none}
  table.matrix td.mh{min-width:0;max-width:110px}
}

/* Sous 900 px, la barre de winrate coûte ~60 px par colonne pour une
   information déjà donnée par le pourcentage : on ne garde que le chiffre. */
@media(max-width:900px){
  .wr .bar{display:none}
  .wr{gap:0}
  .wr .p{min-width:0;text-align:left}
}
/* Noms plus courts sur petit écran */
@media(max-width:900px){ .pl .nm{max-width:min(14ch,26vw)} .civ > span{max-width:min(12ch,24vw)} }
@media(max-width:520px){ .pl .nm{max-width:min(10ch,30vw)} .civ > span{max-width:min(9ch,26vw)} }

/* Matrices : on réduit plus tôt le nombre de colonnes visibles */
@media(max-width:1250px){ table.matrix th:nth-child(n+10), table.matrix td:nth-child(n+10){display:none} }
@media(max-width:1000px){ table.matrix th:nth-child(n+7),  table.matrix td:nth-child(n+7){display:none} }
@media(max-width:760px){  table.matrix th:nth-child(n+5),  table.matrix td:nth-child(n+5){display:none} }

/* Tableau croisé civ × mode : mêmes paliers */
@media(max-width:1250px){ .tbl-wrap table th:nth-child(n+8).num, .tbl-wrap table td:nth-child(n+8).num{} }

/* Le lien joueur était en display:flex : il occupait toute la largeur de la
   cellule et rejetait l'emblème de région à la ligne suivante. */
table.rec td.c-pl{white-space:nowrap}
table.rec td.c-pl .pl{display:inline-flex;vertical-align:middle;max-width:calc(100% - 22px)}
table.rec td.c-pl .rgn-mini{display:inline-flex;vertical-align:middle;margin-left:6px;flex:none}
.rgn{display:inline-flex;align-items:center;gap:6px;white-space:nowrap;flex-wrap:nowrap}
.rgn > span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rg{flex:none;vertical-align:middle}

/* Tableau croisé civilisation × mode : mêmes paliers que la matrice, mais il
   affiche des pourcentages, donc on peut en garder un peu plus. */
table.matrix.wide td,table.matrix.wide th{white-space:nowrap}
@media(max-width:1250px){ table.matrix.wide th:nth-child(n+8), table.matrix.wide td:nth-child(n+8){display:none} }
@media(max-width:1000px){ table.matrix.wide th:nth-child(n+6), table.matrix.wide td:nth-child(n+6){display:none} }
@media(max-width:760px){  table.matrix.wide th:nth-child(n+4), table.matrix.wide td:nth-child(n+4){display:none} }
/* dernier filet de sécurité : jamais plus large que le conteneur */
.tbl-wrap table{max-width:100%}

/* Top 10 de l'accueil : colonnes chiffrées serrées, le nom prend le reste */
table.rec.lb-mini td.c-rk{width:46px}
table.rec.lb-mini td:nth-child(3){width:58px}   /* ELO */
table.rec.lb-mini td:nth-child(4){width:56px}   /* parties */
table.rec.lb-mini td:last-child{width:64px;padding-right:12px}

/* « Ça bouge » : le nom du joueur doit rester lisible en entier */
table.rec td.c-pl .pl .nm{max-width:none}
table.rec td.c-pl{width:auto}
.panel table.rec{width:100%}
@media(min-width:761px){
  table.rec td.c-pl .pl{max-width:100%}
  table.rec td.c-pl .pl .nm{max-width:24ch}
}

/* ---------------- drapeaux de pays ---------------- */
.flag{width:16px;height:auto;border-radius:2.5px;flex:none;vertical-align:middle;
  box-shadow:0 0 0 1px rgba(255,255,255,.14), 0 1px 3px rgba(0,0,0,.5)}
.pl .flag{margin-right:1px}
.ctry{display:inline-flex;align-items:center;gap:7px;font-size:12.5px;color:var(--txt);white-space:nowrap}
.ctry .flag{width:20px}
.pl-meta{display:flex;justify-content:center;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:5px}
.lm-tier .r{display:flex;flex-direction:column;gap:2px}
.lm-tier .r span{display:inline-flex;align-items:center;gap:5px;white-space:nowrap}

/* =========================================================================
   Troncature : dernier recours seulement.
   Au-delà de 1100 px il y a la place, on affiche les noms en entier ; en
   dessous seulement, on tronque progressivement.
   ========================================================================= */
@media(min-width:1101px){
  .pl .nm{max-width:none}
  .civ > span{max-width:none}
  table.rec td{overflow:visible;text-overflow:clip}
  table.rec td.c-pl .pl{max-width:none}
  table.rec td.c-pl .pl .nm{max-width:none}
  .pl-side table.past td:first-child{max-width:none;width:auto}
  table.past th,table.past td{overflow:visible;text-overflow:clip}
  .team .row a{max-width:none}
  td.mapc{max-width:none}
}
/* La colonne latérale du profil s'élargit pour « Autres ladders » */
@media(min-width:1101px){ .pl-layout{grid-template-columns:380px 1fr} }
@media(min-width:1500px){ .pl-layout{grid-template-columns:420px 1fr} }

/* Les tableaux à largeur fixe laissent la colonne « nom » prendre le reste */
table.rec{table-layout:auto}
table.rec td.c-rk,table.rec td.c-elo,table.rec td.c-val{white-space:nowrap}
table.past{table-layout:auto}

/* =========================================================================
   Les cellules numériques ne doivent JAMAIS être tronquées : un ELO coupé
   (« 1 20… ») est pire qu'un tableau légèrement plus dense. Seuls les
   libellés textuels peuvent recevoir des points de suspension.
   ========================================================================= */
td.num, th.num,
table.past td.num, table.past th.num,
table.rec td.c-rk, table.rec td.c-elo, table.rec td.c-val,
.elo, .wr .p, .pctl, .rank-badge .rl, .lm-stats b, .pl-kpi b {
  overflow:visible !important;
  text-overflow:clip !important;
  white-space:nowrap;
}
/* Les colonnes chiffrées prennent la place qu'il leur faut, le texte cède */
table.past{table-layout:auto}
table.past td:first-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:14ch}
table.rec td.c-pl{overflow:hidden;text-overflow:ellipsis}
@media(max-width:760px){
  table.past td:first-child{max-width:10ch}
  table.past td,table.past th{padding:6px 6px;font-size:11.5px}
}

/* ---------------- compte Steam & réseaux sociaux ---------------- */
.userbox{display:flex;align-items:center}
.btn-steam{
  display:inline-flex;align-items:center;gap:8px;white-space:nowrap;
  background:linear-gradient(140deg,#1b2838,#2a475e);
  border:1px solid rgba(255,255,255,.16);border-radius:12px;
  padding:8px 13px;color:#e6eef7;font-size:13px;font-weight:600;
  box-shadow:0 6px 18px -8px rgba(0,0,0,.8);transition:.18s;
}
.btn-steam:hover{background:linear-gradient(140deg,#24384f,#356081);color:#fff;transform:translateY(-1px)}
.me{display:flex;align-items:center;gap:8px;background:var(--glass);border:1px solid var(--stroke);
  border-radius:12px;padding:4px 6px 4px 8px;backdrop-filter:blur(12px)}
.me-link{display:inline-flex;align-items:center;gap:8px;color:var(--txt);font-size:13px;font-weight:500;
  max-width:170px;overflow:hidden}
.me-link span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.me-out{padding:4px 8px;border-radius:8px;color:var(--muted);font-size:13px}
.me-out:hover{background:rgba(255,95,109,.16);color:#ff9da6}

.soc-links{display:flex;gap:8px;flex-wrap:wrap;justify-content:center;margin:10px 0 4px}
.soc-links a,.soc-flat{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:600;
  background:var(--glass-2);border:1px solid var(--stroke);border-radius:20px;padding:4px 10px;
  color:var(--txt);max-width:150px}
.soc-links a span,.soc-flat span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.soc-links a:hover{background:var(--glass-hi);border-color:var(--stroke-2)}
.soc-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:12px}
.soc-field{display:flex;flex-direction:column;gap:5px}
.soc-lab{display:inline-flex;align-items:center;gap:7px;font-size:11px;font-weight:700;
  text-transform:uppercase;letter-spacing:.07em;color:var(--dim)}
.soc-field input{width:100%}

/* =========================================================================
   Alignement des en-têtes : le titre et les listes déroulantes reposent
   désormais sur la même ligne de base ; « align-items:center » les décalait
   parce que les champs portent un intitulé au-dessus.
   ========================================================================= */
.head{align-items:flex-end;gap:16px;row-gap:10px}
.head h2{line-height:1.15;padding-bottom:1px}
.head .sub{padding-bottom:3px}
.head .field{gap:6px}
.head .field label{line-height:1}
.head .sel-btn,.head input,.head select{height:38px;line-height:1.2}
.head .live{align-self:center}
.spot-trigger{height:38px}
.langsel button,.btn-steam{height:34px}
.sel-btn{align-items:center}

/* ---------------- panneau « Vos réseaux » ---------------- */
.soc-panel{
  background:linear-gradient(140deg,color-mix(in srgb,var(--a1) 10%,transparent),color-mix(in srgb,var(--a3) 9%,transparent));
  border:1px solid var(--stroke-2);border-radius:var(--r-m);
  backdrop-filter:blur(20px) saturate(160%);overflow:hidden;
  box-shadow:var(--sh-s), inset 0 1px 0 rgba(255,255,255,.09);
}
.soc-head{display:flex;align-items:center;gap:10px;padding:12px 14px}
.soc-badge{font-size:9.5px;font-weight:800;letter-spacing:.10em;text-transform:uppercase;
  background:linear-gradient(140deg,var(--a1),var(--a3));color:#fff;
  padding:3px 8px;border-radius:20px;white-space:nowrap}
.soc-title{font-family:'Space Grotesk';font-size:14px;font-weight:600}
.soc-toggle{margin-left:auto;padding:5px 12px;font-size:12px;border-radius:9px}
.soc-body{padding:0 14px 14px}
.soc-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:10px}
.soc-field{display:flex;flex-direction:column;gap:5px;min-width:0}
.soc-lab{display:inline-flex;align-items:center;gap:6px;font-size:10.5px;font-weight:700;
  text-transform:uppercase;letter-spacing:.06em;color:var(--sc,var(--dim));white-space:nowrap}
.soc-field input{width:100%;font-size:13px;padding:7px 10px}
.soc-actions{display:flex;align-items:center;gap:12px;margin-top:12px}
.soc-actions #socMsg{color:var(--muted);font-size:12.5px}
/* La colonne « moi » garde une largeur stable pour que 1v1 et 4v4 s'alignent */
.teams{grid-template-columns:minmax(0,1fr) auto minmax(0,1fr)}
.teams.solo{grid-template-columns:minmax(0,1fr) auto minmax(0,1fr)}
.pl-side table.past td.sn{max-width:none;font-family:var(--mono);font-size:11.5px;color:var(--txt)}
.soc-dots{display:inline-flex;align-items:center;gap:4px;margin-left:7px;vertical-align:middle}
.soc-dots a,.soc-dots > span{display:inline-flex;opacity:.85;transition:opacity .15s,transform .15s}
.soc-dots a:hover{opacity:1;transform:translateY(-1px)}

/* Sur petit écran, la page prend toute la largeur : le « 95vw » du grand
   format y coûtait une trentaine de pixels, juste assez pour faire déborder. */
@media(max-width:820px){
  .wrap{max-width:100%;padding:0 14px}
}
@media(max-width:520px){
  .wrap{padding:0 10px}
  .pad{padding:14px 10px}
  thead th,tbody td{padding:7px 7px}
}
/* Classement sur mobile : on ne garde que rang, joueur, ELO, winrate */
@media(max-width:560px){
  .lb-full th:nth-child(n+6):not(:last-child),
  .lb-full td:nth-child(n+6):not(:last-child){display:none}
}
/* Derniers matchs de l'accueil : la date passe en dessous de 560px */
@media(max-width:560px){ .home-recent th:last-child, .home-recent td:last-child{display:none} }

/* =========================================================================
   Défilement chaîné : arrivé en butée dans un menu, la molette continuait
   sur la page derrière. `overscroll-behavior: contain` arrête la chaîne au
   conteneur, et le corps est verrouillé tant qu'une surcouche est ouverte.
   ========================================================================= */
.sel-menu,
.spot-results,
.tbl-wrap,
.tabs,
.dock{
  overscroll-behavior:contain;
  -webkit-overflow-scrolling:touch;
}
.spot{overscroll-behavior:contain}

/* Corps verrouillé quand la recherche Spotlight est ouverte */
body.no-scroll{overflow:hidden}

/* Le menu déroulant ne doit jamais dépasser la fenêtre : il bascule au-dessus
   du bouton quand il n'y a plus la place en dessous. */
.sel-menu{max-height:min(46vh,320px)}
.sel.up .sel-menu{top:auto;bottom:calc(100% + 6px)}

/* Menu déroulant déporté sur <body> : position fixe, au-dessus de tout. */
.sel-menu.sel-portal{
  position:fixed;
  z-index:400;
  max-width:min(340px,92vw);
  overscroll-behavior:contain;
}
.tz{font-size:9.5px;color:var(--dim);letter-spacing:.04em;margin-left:3px}

/* =========================================================================
   Bouton de chat, au centre du dock : plus grand, en relief, avec une
   pulsation discrète pour signaler quil sagit dun espace vivant.

/* =========================================================================
   Bouton de chat, au centre du dock : plus grand, en relief, avec une
   pulsation lente qui signale un espace vivant sans clignoter.
   ========================================================================= */
.dock-chat{width:76px !important;position:relative}
.dock-chat .ic{
  width:42px;height:42px;border-radius:15px;
  background:linear-gradient(145deg,var(--a1),var(--a2) 45%,var(--a3));
  border-color:transparent;color:#140d18;
  box-shadow:0 10px 26px -8px color-mix(in srgb,var(--a1) 90%,transparent), inset 0 1px 0 rgba(255,255,255,.5);
  transform:translateY(-8px);
}
.dock-chat .ic svg{width:21px;height:21px;stroke-width:1.9}
.dock-chat span:last-of-type{transform:translateY(-6px);font-weight:700;color:var(--txt)}
.dock-chat:hover .ic{transform:translateY(-12px) scale(1.06)}
.dock-chat.on .ic{background:linear-gradient(145deg,var(--a2),var(--a1) 55%,var(--a3))}

.dock-chat .pulse{
  position:absolute;top:-2px;left:50%;width:42px;height:42px;margin-left:-21px;
  border-radius:15px;pointer-events:none;
  box-shadow:0 0 0 0 color-mix(in srgb,var(--a1) 55%,transparent);
  animation:chatPulse 3.2s cubic-bezier(.4,0,.6,1) infinite;
}
@keyframes chatPulse{
  0%   {box-shadow:0 0 0 0 color-mix(in srgb,var(--a1) 50%,transparent)}
  60%  {box-shadow:0 0 0 14px color-mix(in srgb,var(--a1) 0%,transparent)}
  100% {box-shadow:0 0 0 0 color-mix(in srgb,var(--a1) 0%,transparent)}
}
@media(prefers-reduced-motion:reduce){ .dock-chat .pulse{animation:none} }
@media(max-width:640px){
  .dock-chat{width:64px !important}
  .dock-chat .ic{width:38px;height:38px;transform:translateY(-7px)}
}

/* La règle « .dock a .ic » l'emportait en spécificité : on qualifie davantage. */
.dock a.dock-chat .ic{
  background:linear-gradient(145deg,var(--a1),var(--a2) 45%,var(--a3));
  border-color:transparent;color:#140d18;
}
.dock a.dock-chat.on .ic{
  background:linear-gradient(145deg,var(--a2),var(--a1) 55%,var(--a3));
}
.dock a.dock-chat:hover .ic{
  background:linear-gradient(145deg,var(--a2),var(--a1) 40%,var(--a3));
}

/* =========================================================================
   Bouton de chat — reprise du traitement.
   Le pavé orange plein tranchait avec le verre du reste du dock. On garde
   la distinction (anneau dégradé, halo, légère élévation) mais dans la même
   matière : verre translucide, lueur douce, pas d'aplat saturé.
   ========================================================================= */
.dock a.dock-chat{width:78px !important;position:relative}

.dock a.dock-chat .ic{
  width:40px;height:40px;border-radius:14px;
  transform:translateY(-6px);
  background:
    linear-gradient(rgba(20,15,26,.86), rgba(20,15,26,.86)) padding-box,
    linear-gradient(145deg, var(--a1), var(--a2) 48%, var(--a3)) border-box;
  border:1.6px solid transparent;
  color:var(--a2);
  box-shadow:
    0 8px 22px -10px color-mix(in srgb,var(--a1) 75%,transparent),
    inset 0 1px 0 rgba(255,255,255,.14);
}
.dock a.dock-chat .ic svg{width:20px;height:20px;stroke-width:1.8}

.dock a.dock-chat span:last-of-type{
  transform:translateY(-4px);font-weight:600;color:var(--muted);
}
.dock a.dock-chat:hover{transform:none}
.dock a.dock-chat:hover .ic{
  transform:translateY(-9px) scale(1.04);
  color:#fff;
  box-shadow:0 12px 28px -10px color-mix(in srgb,var(--a1) 95%,transparent), inset 0 1px 0 rgba(255,255,255,.22);
}
.dock a.dock-chat:hover span:last-of-type{color:var(--txt)}

/* état actif : l'anneau se remplit doucement */
.dock a.dock-chat.on .ic{
  background:
    linear-gradient(145deg, color-mix(in srgb,var(--a1) 30%,transparent), color-mix(in srgb,var(--a3) 26%,transparent)) padding-box,
    linear-gradient(145deg, var(--a2), var(--a1) 55%, var(--a3)) border-box;
  color:#fff;
}
.dock a.dock-chat.on span:last-of-type{color:#fff}

/* halo lent : signale un espace vivant sans clignoter */
.dock a.dock-chat .pulse{
  position:absolute;top:4px;left:50%;width:40px;height:40px;margin-left:-20px;
  border-radius:14px;pointer-events:none;
  box-shadow:0 0 0 0 color-mix(in srgb,var(--a2) 42%,transparent);
  animation:chatPulse 3.6s cubic-bezier(.4,0,.6,1) infinite;
}
@keyframes chatPulse{
  0%   {box-shadow:0 0 0 0 color-mix(in srgb,var(--a2) 38%,transparent)}
  65%  {box-shadow:0 0 0 13px color-mix(in srgb,var(--a2) 0%,transparent)}
  100% {box-shadow:0 0 0 0 color-mix(in srgb,var(--a2) 0%,transparent)}
}
@media(prefers-reduced-motion:reduce){ .dock a.dock-chat .pulse{animation:none} }
@media(max-width:640px){
  .dock a.dock-chat{width:64px !important}
  .dock a.dock-chat .ic{width:36px;height:36px;transform:translateY(-5px)}
  .dock a.dock-chat .pulse{width:36px;height:36px;margin-left:-18px;top:5px}
}

/* Le point sous l'entrée active faisait doublon avec le fond mis en relief. */
.dock a.on::after{display:none}

/* Le bouton chat s'aligne sur les autres : plus d'élévation, même gabarit.
   Il reste distingué par son anneau dégradé et sa lueur, pas par sa taille. */
.dock a.dock-chat{width:66px !important}
.dock a.dock-chat .ic{width:30px;height:30px;border-radius:10px;transform:none}
.dock a.dock-chat .ic svg{width:17px;height:17px;stroke-width:1.7}
.dock a.dock-chat span:last-of-type{transform:none}
.dock a.dock-chat:hover{transform:translateY(-5px)}
.dock a.dock-chat:hover .ic{transform:none;box-shadow:0 8px 20px -10px color-mix(in srgb,var(--a1) 90%,transparent), inset 0 1px 0 rgba(255,255,255,.2)}
.dock a.dock-chat .pulse{top:8px;width:30px;height:30px;margin-left:-15px;border-radius:10px}
@media(max-width:640px){
  .dock a.dock-chat{width:58px !important}
  .dock a.dock-chat .ic{width:27px;height:27px}
  .dock a.dock-chat .pulse{top:6px;width:27px;height:27px;margin-left:-13.5px}
}

/* =========================================================================
   Chat — trois colonnes : salons, conversation, présents.
   Même matière que le reste du site : verre, mêmes accents, mêmes rayons.
   ========================================================================= */
.chat-wrap{display:grid;grid-template-columns:210px 1fr 230px;gap:14px;
  height:calc(100vh - 230px);min-height:460px}

.chat-rooms,.chat-users{
  background:var(--glass);border:1px solid var(--stroke);border-radius:var(--r-m);
  backdrop-filter:blur(20px) saturate(160%);padding:10px;overflow-y:auto;
  overscroll-behavior:contain;display:flex;flex-direction:column;gap:3px;
}
.cr-head{font-size:10px;text-transform:uppercase;letter-spacing:.11em;color:var(--dim);
  font-weight:800;padding:6px 8px 8px}

.cr-room{display:flex;align-items:center;gap:7px;width:100%;text-align:left;
  background:none;border:none;border-radius:10px;padding:7px 10px;color:var(--muted);
  font-size:13.5px;cursor:pointer;transition:.15s}
.cr-room:hover{background:var(--glass-2);color:var(--txt)}
.cr-room.on{background:linear-gradient(140deg,color-mix(in srgb,var(--a1) 22%,transparent),color-mix(in srgb,var(--a3) 18%,transparent));
  color:#fff;font-weight:600}
.cr-hash{color:var(--dim);font-family:var(--mono)}
.cr-room span:nth-child(2){flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cr-n{font-family:var(--mono);font-size:11px;color:var(--dim)}

.cr-me{margin-top:auto;padding:10px 8px 0;border-top:1px solid var(--stroke);
  display:flex;flex-direction:column;gap:6px}
/* Kripy (20/09/2026) : une barre de défilement apparaissait sur la colonne des salons pour 2 px de trop. */
.chat-rooms,.chat-users{scrollbar-width:thin;scrollbar-color:var(--stroke-2) transparent}
.cr-inv{line-height:1.25}
.cr-state{font-size:11px;font-family:var(--mono)}
.cr-state.ok{color:var(--win)} .cr-state.ko{color:var(--a2)}
.cr-inv{display:flex;align-items:center;gap:7px;font-size:12px;color:var(--muted);cursor:pointer}
.cr-hint{margin-top:auto;padding:10px 8px 2px;font-size:11px;color:var(--dim);line-height:1.4}

/* --- conversation --- */
.chat-main{display:flex;flex-direction:column;overflow:hidden;padding:0}
.chat-topic{display:flex;align-items:baseline;gap:12px;padding:12px 16px;
  border-bottom:1px solid var(--stroke);flex-wrap:wrap}
.chat-topic b{font-family:'Space Grotesk';font-size:15px}
.chat-topic span{font-size:12.5px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

.chat-log{flex:1;overflow-y:auto;overscroll-behavior:contain;padding:10px 14px;
  display:flex;flex-direction:column;gap:3px}
/* Grille à trois colonnes plutôt qu'une rangée flex : l'heure, le pseudo et le
   texte tombent ainsi toujours aux mêmes abscisses, et « align-items:start »
   avec une hauteur de ligne commune règle l'alignement vertical — en
   « baseline », les images du pseudo (badge de rôle, icône de palier)
   déplaçaient la ligne de base et le texte flottait plus bas que le pseudo. */
.cl-msg{display:grid;grid-template-columns:34px 170px 1fr;align-items:center;
  gap:8px;padding:3px 6px;border-radius:8px;line-height:1.5;font-size:14px}
.cl-msg > *{line-height:1.5;min-height:1.5em}
.cl-msg:hover{background:rgba(255,255,255,.035)}
.cl-time{font-family:var(--mono);font-size:10.5px;color:var(--dim);
  /* l'heure est plus petite : on la recale sur la ligne du texte */
  display:flex;align-items:center;justify-content:flex-start}
.cl-text{flex:1;word-break:break-word;min-width:0}
/* Colonne de pseudo de largeur fixe : sans elle, chaque pseudo ayant sa propre
   largeur (badge, palier, drapeau), le texte des messages démarrait à une
   abscisse différente à chaque ligne. Le pseudo est aligné à droite, contre le
   texte, pour que la colonne de lecture soit parfaitement verticale. */
.cl-msg .cr-nick{width:auto;max-width:100%;justify-content:flex-end;text-align:right;
  align-items:center;min-height:1.5em}
.cl-msg .cr-nick > *{flex:none}
/* les images ne doivent pas dicter la hauteur de la ligne */
.cl-msg .cr-badge,.cl-msg .cr-tier{align-self:center}
.cl-sys{font-size:12px;color:var(--dim);font-style:italic;padding:2px 6px}

/* --- pseudo enrichi : avatar, palier, drapeau, préfixe de rôle --- */
.cr-nick{display:inline-flex;align-items:center;gap:5px;flex:none;white-space:nowrap;
  font-weight:600;max-width:190px;overflow:hidden}
.cr-nick a{color:var(--a2)}
.cr-nick a:hover{color:var(--a1)}
.cr-av{width:18px;height:18px;border-radius:5px;object-fit:cover;flex:none;
  border:1px solid var(--stroke)}
.cr-tier{width:16px;height:16px;object-fit:contain;flex:none}
/* --- Podium du classement solo : les trois premiers se remarquent ---------
   Dégradé découpé dans le texte plus un filet de contour : ça reste NET à
   toutes les tailles, là où une ombre portée baverait sur un fond sombre. */
.cr-crown{flex:none}
.cr-crown.p1{color:#f5c542}
.cr-crown.p2{color:#cbd3dc}
.cr-crown.p3{color:#c98a52}
.cr-nick.podium a,.cr-nick.podium{font-weight:800;letter-spacing:.005em}
.cr-nick.podium a{
  background-clip:text;-webkit-background-clip:text;color:transparent;
  -webkit-text-stroke:.35px rgba(0,0,0,.45)}
.cr-nick.p1 a{background-image:linear-gradient(96deg,#fff0b8,#f5c542 45%,#b8862a)}
.cr-nick.p2 a{background-image:linear-gradient(96deg,#ffffff,#cbd3dc 45%,#8d97a3)}
.cr-nick.p3 a{background-image:linear-gradient(96deg,#f4cba6,#c98a52 45%,#8a5a30)}

.cm-note{font-size:11.5px;color:var(--dim);padding:6px 10px;font-style:italic}
.st-inv{font-size:10px;color:var(--dim);border:1px solid var(--stroke);
  border-radius:5px;padding:0 4px;margin-left:4px}

/* Niveau de compte : chiffre discret, jamais concurrent du pseudo. */
.cr-lvl{font-family:var(--mono);font-size:10px;font-weight:700;color:var(--dim);
  background:var(--glass-2);border:1px solid var(--stroke);border-radius:6px;
  padding:1px 4px;line-height:1.35;flex:none}
.cr-adm{color:var(--a1);font-family:var(--mono);font-weight:800}
.cr-mod{color:var(--a4);font-family:var(--mono);font-weight:800}

/* --- saisie --- */
.chat-input{display:flex;gap:10px;padding:12px 14px;border-top:1px solid var(--stroke)}
.chat-input input{flex:1;border-radius:12px;padding:10px 14px;font-size:14px}
.chat-input button{border-radius:12px;padding:10px 18px}

/* --- présents --- */
.cu{padding:5px 8px;border-radius:9px;cursor:context-menu;transition:background .13s}
.cu:hover{background:var(--glass-2)}

/* --- menu contextuel de modération --- */
.cmenu{position:fixed;z-index:500;min-width:200px;padding:6px;
  background:rgba(22,18,30,.96);border:1px solid var(--stroke-2);border-radius:13px;
  backdrop-filter:blur(28px);box-shadow:0 26px 60px -16px rgba(0,0,0,.92);
  display:flex;flex-direction:column;gap:2px;animation:pop .14s cubic-bezier(.2,1.2,.4,1)}
.cmenu[hidden]{display:none}
.cm-head{font-size:11px;font-weight:700;color:var(--dim);padding:6px 10px 8px;
  border-bottom:1px solid var(--stroke);margin-bottom:4px;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cmenu button,.cmenu a{background:none;border:none;border-radius:9px;text-align:left;
  padding:8px 11px;font-size:13px;color:var(--txt);cursor:pointer;transition:.12s}
.cmenu button:hover,.cmenu a:hover{background:var(--glass-hi)}
.cmenu button.danger{color:#ff9da6}
.cmenu button.danger:hover{background:rgba(255,95,109,.16)}

@media(max-width:1000px){
  .chat-wrap{grid-template-columns:1fr;height:auto}
  .chat-rooms{flex-direction:row;flex-wrap:wrap;overflow-x:auto;max-height:none}
  .chat-rooms .cr-head{width:100%}
  .cr-me{margin-top:0;border-top:none;border-left:1px solid var(--stroke);padding-left:12px}
  .chat-log{height:52vh}
  .chat-users{max-height:220px}
}

/* Le dock flotte en bas : la zone de saisie doit rester au-dessus de lui. */
.chat-wrap{height:calc(100vh - 300px);min-height:440px;margin-bottom:16px}
@media(min-height:900px){ .chat-wrap{height:calc(100vh - 320px)} }
@media(max-width:1000px){ .chat-wrap{height:auto;margin-bottom:8px} }

/* =========================================================================
   Page de chat : la fenêtre ne défile pas, seuls les panneaux internes le font.
   ========================================================================= */
body.chat-open{overflow:hidden}
body.chat-open main{padding-bottom:0}
body.chat-open #seasonBar{display:none}
body.chat-open footer{display:none}
body.chat-open .chat-wrap{height:calc(100vh - 190px);min-height:380px}
@media(max-width:1000px){
  /* la fenêtre ne défile pas non plus sur mobile : sinon les panneaux passent
     sous la barre du haut, qui est translucide et collante */
  body.chat-open{overflow:hidden}
}

/* Conversations privées : croix de fermeture */
.cr-x{margin-left:auto;color:var(--dim);font-size:15px;line-height:1;padding:0 3px;border-radius:5px}
.cr-x:hover{background:rgba(255,95,109,.2);color:#ff9da6}
.cr-room .cr-hash{min-width:9px;text-align:center}

/* Badge de palier plus lisible dans le chat */
.cr-tier{width:22px;height:22px}
.cr-nick{max-width:220px}
.cr-av{width:20px;height:20px}

/* Pastilles de rôle dans le chat : plus lisibles qu'un arobas, et sans
   ambiguïté avec un pseudo qui commencerait par un symbole. */
.cr-badge{
  font-family:var(--mono);font-size:8.5px;font-weight:800;letter-spacing:.09em;
  padding:2px 5px;border-radius:5px;line-height:1;flex:none;
  border:1px solid transparent;text-transform:uppercase;
}
.cr-badge.adm{background:color-mix(in srgb,var(--a1) 18%,transparent);color:#ffb08a;border-color:color-mix(in srgb,var(--a1) 42%,transparent)}
.cr-badge.mod{background:rgba(49,208,170,.16);color:#7ee0c6;border-color:rgba(49,208,170,.36)}
.cr-badge.bot{background:color-mix(in srgb,var(--a3) 16%,transparent);color:#b7a4ff;border-color:color-mix(in srgb,var(--a3) 36%,transparent)}

/* Bouton d'invisibilité, dans le panneau de droite */
.cr-ghost{
  display:flex;align-items:center;gap:7px;width:100%;margin-bottom:8px;
  background:var(--glass-2);border:1px solid var(--stroke);border-radius:10px;
  padding:7px 10px;color:var(--muted);font-size:12.5px;font-weight:600;cursor:pointer;
  transition:.16s;
}
.cr-ghost:hover{background:var(--glass-hi);color:var(--txt);border-color:var(--stroke-2)}
.cr-ghost.on{
  background:linear-gradient(140deg,color-mix(in srgb,var(--a3) 24%,transparent),color-mix(in srgb,var(--a1) 18%,transparent));
  color:#fff;border-color:var(--stroke-2);
}
.cr-ghost svg{flex:none}

/* Liste des présents à grande échelle : filtre et tranche affichée */
.cu-search{width:100%;margin:0 0 8px;padding:6px 10px;font-size:12.5px;border-radius:9px}
.cu-more{padding:8px;text-align:center;font-size:11.5px;color:var(--dim);font-style:italic}
.cr-nick{gap:6px}

/* ---- Navigateur de salons ---- */
.cr-browse{width:100%;margin-top:8px;padding:8px 10px;border-radius:10px;font-size:12.5px;
  font-weight:600;letter-spacing:.02em;cursor:pointer;color:var(--txt);
  background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.12)}
.cr-browse:hover{background:rgba(255,255,255,.12)}
.chat-browser{position:absolute;inset:0 0 0 0;z-index:6;display:flex;flex-direction:column;
  overflow:hidden}
.chat-wrap{position:relative}
.cb-head{display:flex;align-items:center;gap:10px;padding:12px 14px;
  border-bottom:1px solid rgba(255,255,255,.10)}
.cb-head b{font-size:14px;white-space:nowrap}
.cb-head input{flex:1;min-width:0;padding:7px 11px;font-size:13px;border-radius:9px}
.cb-close{width:30px;height:30px;border-radius:9px;font-size:18px;line-height:1;cursor:pointer;
  color:var(--dim);background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.12)}
.cb-close:hover{color:var(--txt);background:rgba(255,255,255,.14)}
.cb-list{flex:1;overflow-y:auto;overscroll-behavior:contain;padding:8px}
.cb-grp{display:flex;align-items:center;gap:8px;padding:12px 8px 6px;font-size:11px;
  text-transform:uppercase;letter-spacing:.09em;color:var(--dim)}
.cb-grp span{padding:1px 7px;border-radius:99px;background:rgba(255,255,255,.08);letter-spacing:0}
.cb-row{display:grid;grid-template-columns:22px 1fr auto auto;align-items:center;gap:10px;
  width:100%;padding:8px 10px;border-radius:10px;cursor:pointer;text-align:left;
  background:transparent;border:1px solid transparent;color:var(--txt)}
.cb-row:hover{background:rgba(255,255,255,.07);border-color:rgba(255,255,255,.10)}
.cb-row.in{background:rgba(255,255,255,.05)}
.cb-row.locked{opacity:.55;cursor:not-allowed}
.cb-ico{display:flex;align-items:center;justify-content:center;font-size:13px;color:var(--dim)}
.cb-ico img{border-radius:3px}
/* Salon de championnat : la coupe en vert, pour le distinguer d'un coup d'œil
   des salons de pays et de paliers, juste sous le général. */
.cb-ico.champ{color:#22c55e}
/* Une pastille par nature de salon dans la colonne de gauche : on repère le
   duel privé, le championnat ou le pays sans lire le nom. */
.cr-room .cr-hash{position:relative}
.cr-room.g-general .cr-hash{color:#94a3b8}
.cr-room.g-duel    .cr-hash{color:#f59e0b}
.cr-room.g-champ   .cr-hash{color:#22c55e}
.cr-room.g-staff   .cr-hash{color:#f472b6}
.cr-room.g-top     .cr-hash{color:#fbbf24}
.cr-room.g-tier    .cr-hash{color:#7c5cff}
.cr-room.g-pays    .cr-hash{color:#4aa8ff}
.cr-room.g-libre   .cr-hash{color:var(--dim)}
.cr-room.g-duel > span:nth-child(2){color:#fbd38d}
.cb-ico.champ svg{stroke:currentColor;fill:none}
.cb-name{display:flex;flex-direction:column;min-width:0;font-size:13.5px}
.cb-name em{font-style:normal;font-size:11px;color:var(--dim)}
.cb-n{font-variant-numeric:tabular-nums;font-size:12.5px;color:var(--dim);min-width:2.2em;text-align:right}
.cb-st{font-size:10.5px;text-transform:uppercase;letter-spacing:.07em;color:var(--dim);
  padding:2px 8px;border-radius:99px;background:rgba(255,255,255,.07)}
.cb-row.in .cb-st{color:#7ee2a8;background:rgba(126,226,168,.14)}
.cb-pip{width:11px;height:11px;border-radius:3px;display:inline-block}
.cb-pip.t-bronze{background:#b06a3b}.cb-pip.t-silver{background:#b9c3cc}
.cb-pip.t-gold{background:#e0b23c}.cb-pip.t-platinum{background:#7fd4c9}
.cb-pip.t-diamond{background:#7aa8ff}.cb-pip.t-conqueror{background:#e0574a}
@media(max-width:760px){.cb-head b{display:none}.cb-st{display:none}}

/* ---- Barre des conversations privées ---- */
/* Elle vit hors de la grille : « grid-column » n'y servait à rien, et elle doit
   passer AU-DESSUS des panneaux comme de tout le reste de la page. */
/* Une seule ligne qui défile horizontalement : en « wrap », dix conversations
   ouvertes empilaient autant de rangées et la barre mangeait la fenêtre. */
.dm-bar{position:relative;z-index:12;display:flex;align-items:center;gap:8px;
  flex-wrap:nowrap;overflow-x:auto;overscroll-behavior-x:contain;scrollbar-width:thin;
  padding:8px 10px;margin-top:10px;border-radius:14px;
  background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.10)}
.dm-bar > *{flex:none}
.dm-lab{font-size:10.5px;text-transform:uppercase;letter-spacing:.09em;color:var(--dim);padding:0 4px}
.dm-tab{display:flex;align-items:center;border-radius:11px;overflow:hidden;
  background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.12)}
.dm-tab.on{background:rgba(122,168,255,.16);border-color:rgba(122,168,255,.42)}
.dm-tab.new .dm-dot{background:#7ee2a8;box-shadow:0 0 0 3px rgba(126,226,168,.18)}
.dm-open{display:flex;align-items:center;gap:7px;padding:6px 10px;font-size:12.5px;
  cursor:pointer;color:var(--txt);background:transparent;border:0;max-width:190px}
.dm-nick{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dm-dot{width:7px;height:7px;border-radius:99px;background:rgba(255,255,255,.28);flex:none}
.dm-n{min-width:18px;padding:0 5px;border-radius:99px;font-size:10.5px;font-weight:700;
  background:#7ee2a8;color:#06210f}
.dm-block,.dm-close{width:24px;height:28px;font-size:13px;line-height:1;cursor:pointer;
  color:var(--dim);background:transparent;border:0;border-left:1px solid rgba(255,255,255,.10)}
.dm-block:hover{color:#ff8f7a;background:rgba(255,143,122,.12)}
.dm-close:hover{color:var(--txt);background:rgba(255,255,255,.12)}
@media(max-width:760px){.dm-lab{display:none}.dm-open{max-width:120px}}

/* ---- En-tête du salon : opérateurs et panneaux ---- */
.chat-topic{flex-wrap:wrap;gap:8px 12px}
.ct-ops{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-left:auto}
.ct-op{padding:3px 9px;border-radius:99px;font-size:11.5px;font-weight:600;cursor:pointer;
  border:1px solid transparent}
.ct-op.admin{color:#ffd48a;background:rgba(224,178,60,.16);border-color:rgba(224,178,60,.34)}
.ct-op.mod{color:#a9d6ff;background:rgba(122,168,255,.14);border-color:rgba(122,168,255,.30)}
.ct-op:hover{filter:brightness(1.18)}
.ct-none{font-size:11px;color:var(--dim);font-style:italic}
.ct-bans{padding:3px 10px;border-radius:99px;font-size:11.5px;cursor:pointer;color:var(--txt);
  background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.14)}
.ct-bans:hover{background:rgba(255,255,255,.15)}
.ct-panel{border-bottom:1px solid rgba(255,255,255,.10);background:rgba(0,0,0,.16);
  max-height:340px;overflow-y:auto;overscroll-behavior:contain}
.ctp-head{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;font-size:13px}
.ctp-head button{width:26px;height:26px;border-radius:8px;cursor:pointer;color:var(--dim);
  background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.12);font-size:16px;line-height:1}
.ctp-t{width:100%;border-collapse:collapse;font-size:12.5px}
.ctp-t th{text-align:left;font-size:10.5px;text-transform:uppercase;letter-spacing:.07em;
  color:var(--dim);padding:4px 14px;font-weight:600}
.ctp-t td{padding:6px 14px;border-top:1px solid rgba(255,255,255,.06);vertical-align:middle}
.ctp-r{max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ctp-k{padding:1px 8px;border-radius:99px;font-size:10.5px;text-transform:uppercase;letter-spacing:.05em}
.ctp-k.ban{color:#ff9c8a;background:rgba(255,120,100,.15)}
.ctp-k.mute{color:#ffd48a;background:rgba(224,178,60,.15)}
.ctp-lift{padding:3px 10px;border-radius:8px;font-size:11.5px;cursor:pointer;color:var(--txt);
  background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.14)}
.ctp-lift:hover{background:rgba(126,226,168,.20);border-color:rgba(126,226,168,.4)}
/* réglages anti-spam */
.sp-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:10px;padding:12px 14px}
.sp-f{display:flex;align-items:center;justify-content:space-between;gap:10px;font-size:12.5px}
.sp-f input{width:88px;padding:5px 8px;border-radius:8px;text-align:right}
.sp-sw{display:flex;align-items:center;gap:8px;font-size:12.5px}
.sp-act{display:flex;align-items:center;gap:12px;padding:0 14px 14px}
.sp-act button{padding:7px 16px;border-radius:10px;font-size:12.5px;font-weight:600;cursor:pointer;
  color:#06210f;background:#7ee2a8;border:0}
.sp-note{font-size:11.5px;color:var(--dim)}
/* boîte de sanction */
.sanc-back{position:fixed;inset:0;z-index:60;display:grid;place-items:center;
  background:rgba(6,10,16,.62);backdrop-filter:blur(6px)}
.sanc-box{width:min(420px,92vw);padding:20px;border-radius:18px;
  background:rgba(20,26,36,.96);border:1px solid rgba(255,255,255,.14);
  box-shadow:0 30px 70px rgba(0,0,0,.55)}
.sanc-box h3{margin:0 0 14px;font-size:16px}
.sanc-box label{display:block;font-size:11px;text-transform:uppercase;letter-spacing:.08em;
  color:var(--dim);margin:12px 0 6px}
.sanc-box input{width:100%;padding:9px 12px;border-radius:10px;font-size:13px}
.sanc-d{display:flex;flex-wrap:wrap;gap:6px}
.sanc-d button{padding:6px 12px;border-radius:9px;font-size:12px;cursor:pointer;color:var(--txt);
  background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.13)}
.sanc-d button.on{background:rgba(122,168,255,.22);border-color:rgba(122,168,255,.5);color:#cfe0ff}
.sanc-act{display:flex;justify-content:flex-end;gap:10px;margin-top:18px}
.sanc-act button{padding:9px 18px;border-radius:11px;font-size:13px;font-weight:600;cursor:pointer;border:0}
.sanc-act .ghost{color:var(--txt);background:rgba(255,255,255,.08)}
.sanc-act .danger{color:#2a0b06;background:#ff8f7a}

/* ---- Clans ---- */
.btn-primary,.btn-ghost{border-radius:11px;font-weight:600;cursor:pointer;
  border:1px solid transparent;padding:9px 16px;font-size:13px;line-height:1;display:inline-flex;
  align-items:center;gap:7px;white-space:nowrap}
.btn-primary{color:#06210f;background:linear-gradient(140deg,#8fe8b4,#63d497);
  box-shadow:0 6px 18px rgba(126,226,168,.20)}
.btn-primary:hover{filter:brightness(1.07)}
.btn-ghost{color:var(--txt);background:rgba(255,255,255,.07);border-color:rgba(255,255,255,.14)}
.btn-ghost:hover{background:rgba(255,255,255,.14)}
.btn-ghost.danger{color:#ff9c8a;border-color:rgba(255,140,120,.30)}
.btn-ghost.danger:hover{background:rgba(255,140,120,.16)}
.btn-primary.sm,.btn-ghost.sm,.btn-steam.sm{padding:7px 13px;font-size:12.5px}
.btn-primary.xs,.btn-ghost.xs{padding:4px 10px;font-size:11.5px;border-radius:8px}
.chk{display:inline-flex;align-items:center;gap:7px;font-size:12.5px;color:var(--dim);cursor:pointer}
.field.grow{flex:1;min-width:160px}
.inp{width:100%;padding:8px 12px;border-radius:10px;font-size:13px}
.spacer{margin-left:auto}

.clan-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(270px,1fr));gap:12px}
.clan-card{display:grid;grid-template-columns:auto 1fr;gap:12px 14px;padding:14px;border-radius:16px;
  background:rgba(255,255,255,.045);border:1px solid rgba(255,255,255,.10);
  text-decoration:none;color:var(--txt);transition:transform .16s,border-color .16s,background .16s}
.clan-card:hover{transform:translateY(-2px);background:rgba(255,255,255,.075);
  border-color:color-mix(in srgb,var(--clan) 45%,transparent)}
.cl-crest{border-radius:13px;object-fit:cover;border:1px solid rgba(255,255,255,.14);flex:none}
.cl-ini{display:grid;place-items:center;font-weight:800;letter-spacing:.03em;border:1px solid}
.cc-id{min-width:0;display:flex;flex-direction:column;gap:3px;justify-content:center}
.cc-top{display:flex;align-items:center;gap:7px;font-size:15px}
.cc-name{font-size:12.5px;color:var(--dim);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cc-v{color:#7ee2a8;font-size:12px}
.cc-rec{padding:1px 8px;border-radius:99px;font-size:10px;text-transform:uppercase;letter-spacing:.07em;
  color:#7ee2a8;background:rgba(126,226,168,.15)}
.cc-closed{padding:1px 8px;border-radius:99px;font-size:10px;text-transform:uppercase;
  letter-spacing:.07em;color:var(--dim);background:rgba(255,255,255,.07)}
.cc-stats{grid-column:1/-1;display:grid;grid-template-columns:repeat(3,1fr);gap:8px;
  padding-top:11px;border-top:1px solid rgba(255,255,255,.08)}
.cc-stats span{display:flex;flex-direction:column;gap:2px}
.cc-stats b{font-size:15px;font-variant-numeric:tabular-nums}
.cc-stats i{font-style:normal;font-size:10.5px;color:var(--dim);text-transform:uppercase;letter-spacing:.06em}

.clan-head{display:flex;gap:18px;align-items:flex-start;flex-wrap:wrap}
.ch-id{flex:1;min-width:240px}
.ch-id h2{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:0 0 6px}
.ch-tag{padding:2px 10px;border-radius:99px;font-size:12.5px;font-weight:700;
  color:var(--clan);background:color-mix(in srgb,var(--clan) 18%,transparent);
  border:1px solid color-mix(in srgb,var(--clan) 40%,transparent)}
.ch-bio{margin:8px 0 10px;font-size:13px;color:var(--dim);max-width:62ch;line-height:1.55}
.ch-links{display:flex;flex-wrap:wrap;gap:7px;align-items:center}
.cl-soc{display:inline-flex;align-items:center;gap:6px;padding:5px 11px;border-radius:99px;
  font-size:12px;text-decoration:none;color:var(--txt);
  background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.13)}
.cl-soc:hover{background:rgba(255,255,255,.15)}
.s-discord{color:#b3befc}.s-twitch{color:#d3b6ff}.s-youtube{color:#ff9c8a}
.ch-act{display:flex;flex-direction:column;gap:9px;align-items:flex-end;min-width:180px}
.cl-banner{display:flex;flex-wrap:wrap;gap:10px 16px;align-items:center;margin-bottom:14px;
  padding:10px 14px;border-radius:12px;font-size:13px;
  background:rgba(126,226,168,.10);border:1px solid rgba(126,226,168,.26)}
.cl-banner a{color:#7ee2a8}
.cl-role{padding:2px 9px;border-radius:99px;font-size:10.5px;text-transform:uppercase;letter-spacing:.06em}
.cl-role.r-leader{color:#ffd48a;background:rgba(224,178,60,.16)}
.cl-role.r-officer{color:#a9d6ff;background:rgba(122,168,255,.14)}
.cl-role.r-member{color:var(--dim);background:rgba(255,255,255,.07)}

.clan-box{width:min(560px,94vw)}
.cf-grid{display:grid;grid-template-columns:1fr 1fr;gap:11px}
.cf{display:flex;flex-direction:column;gap:5px}
.cf.wide{grid-column:1/-1}
.cf.sw{grid-column:1/-1;flex-direction:row;align-items:center;gap:9px}
.cf span{font-size:10.5px;text-transform:uppercase;letter-spacing:.08em;color:var(--dim)}
.cf input,.cf textarea{width:100%;padding:8px 11px;border-radius:10px;font-size:13px;
  font-family:inherit;resize:vertical}
.cf input[type=color]{padding:2px;height:36px}
.sanc-act .go{color:#06210f;background:linear-gradient(140deg,#8fe8b4,#63d497)}
@media(max-width:620px){.cf-grid{grid-template-columns:1fr}.ch-act{align-items:stretch;width:100%}}

/* ---- Confirmations éphémères ---- */
.toast-zone{position:fixed;left:50%;bottom:96px;transform:translateX(-50%);z-index:70;
  display:flex;flex-direction:column;gap:8px;align-items:center;pointer-events:none}
.toast{padding:10px 18px;border-radius:12px;font-size:13px;
  background:rgba(20,26,36,.96);border:1px solid rgba(255,255,255,.16);
  box-shadow:0 14px 40px rgba(0,0,0,.42);animation:tin .2s ease}
.toast.ko{border-color:rgba(255,140,120,.45);color:#ffb3a3}
.toast.out{opacity:0;transform:translateY(6px);transition:.3s}
@keyframes tin{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}

/* ---- Classement des clans ---- */
.seg{display:inline-flex;border-radius:10px;overflow:hidden;
  border:1px solid rgba(255,255,255,.13);background:rgba(255,255,255,.05)}
.seg button{padding:7px 14px;font-size:12.5px;cursor:pointer;color:var(--dim);
  background:transparent;border:0}
.seg button.on{color:var(--txt);background:rgba(255,255,255,.13)}
.cl-line{display:inline-flex;align-items:center;gap:9px;text-decoration:none;color:var(--txt);min-width:0}
.cl-line .cl-crest{border-radius:7px}
.cl-line b{white-space:nowrap}
.cl-sub{font-size:11.5px;color:var(--dim);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
  max-width:22ch}
.rk-top{color:#ffd48a;font-weight:700}

/* ---- Carte de visite d'un clan ---- */
.clan-vcard{display:block;text-decoration:none;color:var(--txt);
  border:1px solid color-mix(in srgb,var(--clan) 30%,rgba(255,255,255,.10));
  background:linear-gradient(150deg,color-mix(in srgb,var(--clan) 12%,transparent),rgba(255,255,255,.03));
  transition:transform .16s,border-color .16s}
.clan-vcard:hover{transform:translateY(-2px);border-color:color-mix(in srgb,var(--clan) 60%,transparent)}
.cv-top{display:flex;align-items:center;gap:11px}
.cv-id{min-width:0;display:flex;flex-direction:column;gap:2px;flex:1}
.cv-id b{font-size:14.5px;letter-spacing:.02em}
.cv-id span{font-size:11.5px;color:var(--dim);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cv-stats{display:flex;gap:16px;flex-wrap:wrap;margin-top:12px;padding-top:11px;
  border-top:1px solid rgba(255,255,255,.09)}
.cv-stats span{display:flex;flex-direction:column;gap:1px}
.cv-stats b{font-size:14px;font-variant-numeric:tabular-nums}
.cv-stats i{font-style:normal;font-size:10px;color:var(--dim);text-transform:uppercase;letter-spacing:.06em}
.cv-flag{flex-direction:row!important;align-items:center;gap:6px!important}
.cv-links{display:flex;flex-wrap:wrap;gap:6px;margin-top:11px}
.cv-go{display:block;margin-top:11px;font-size:11.5px;color:var(--clan)}

/* ---- Bannières de clan : hauteur fixe, image recadrée, jamais déformée ---- */
.cv-banner,.cc-banner,.ch-banner{position:relative;overflow:hidden;border-radius:12px;
  background:rgba(255,255,255,.05)}
.cv-banner{height:76px;margin:-4px 0 12px}
.cc-banner{grid-column:1/-1;height:84px;margin:-4px 0 4px}
.ch-banner{position:absolute;inset:0;height:auto;border-radius:inherit;opacity:.30;
  -webkit-mask-image:linear-gradient(100deg,#000 0%,transparent 78%);
  mask-image:linear-gradient(100deg,#000 0%,transparent 78%)}
.cv-banner img,.cc-banner img,.ch-banner img{width:100%;height:100%;object-fit:cover;display:block}
.clan-head{position:relative;overflow:hidden}
.clan-head.has-banner>*:not(.ch-banner){position:relative;z-index:1}
.ch-banner{z-index:0}
.cv-hit{display:block;margin-top:11px;font-size:11.5px;color:var(--clan);text-decoration:none}
.cv-hit::after{content:'';position:absolute;inset:0;border-radius:inherit}
.clan-vcard{position:relative}
.cv-links{position:relative;z-index:2}

/* ---- Streamers ---- */
.str-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:14px}
.str-card{border-radius:16px;overflow:hidden;background:rgba(255,255,255,.045);
  border:1px solid rgba(255,255,255,.10);transition:transform .16s,border-color .16s}
.str-card:hover{transform:translateY(-2px);border-color:color-mix(in srgb,var(--net) 55%,transparent)}
.str-th{position:relative;display:block;aspect-ratio:16/9;background:rgba(0,0,0,.35);overflow:hidden}
.str-th img{width:100%;height:100%;object-fit:cover;display:block}
.str-th.noimg{background:linear-gradient(140deg,color-mix(in srgb,var(--net) 22%,transparent),rgba(0,0,0,.4))}
.str-noimg{position:absolute;inset:0;
  background:linear-gradient(140deg,color-mix(in srgb,var(--net) 22%,transparent),rgba(0,0,0,.4))}
.str-net{position:absolute;left:10px;top:10px;display:inline-flex;align-items:center;gap:6px;
  padding:4px 10px;border-radius:99px;font-size:11px;font-weight:600;color:#0b0810;background:var(--net)}
.str-body{padding:12px 13px 13px}
.str-who{display:flex;align-items:center;gap:10px}
.str-av{width:34px;height:34px;border-radius:10px;object-fit:cover;flex:none;
  border:1px solid rgba(255,255,255,.14)}
.str-id{min-width:0;flex:1;display:flex;flex-direction:column;gap:2px}
.str-name{font-size:14px;text-decoration:none;color:var(--txt);overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.str-sub{display:flex;align-items:center;gap:6px;font-size:11.5px;color:var(--dim)}
.str-clan{padding:2px 9px;border-radius:99px;font-size:11px;font-weight:700;text-decoration:none;
  color:var(--clan);background:color-mix(in srgb,var(--clan) 16%,transparent);
  border:1px solid color-mix(in srgb,var(--clan) 38%,transparent)}
.str-go{display:inline-block;margin-top:10px;font-size:12px;color:var(--net);text-decoration:none;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}

/* ---- Direct en cours ---- */
.str-card.live{border-color:rgba(255,90,80,.5);box-shadow:0 0 0 1px rgba(255,90,80,.16)}
.str-live{position:absolute;right:10px;top:10px;padding:3px 9px;border-radius:99px;
  font-size:10.5px;font-weight:800;letter-spacing:.06em;color:#fff;background:#e0342a;
  animation:pulse 2.4s ease-in-out infinite}
.str-viewers{position:absolute;right:10px;bottom:10px;padding:3px 9px;border-radius:99px;
  font-size:10.5px;color:#fff;background:rgba(0,0,0,.62)}
.str-title{padding:9px 13px 0;font-size:12px;color:var(--dim);overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.str-title i{font-style:normal;color:var(--net)}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.62}}

/* ---- Bannière de profil ---- */
.pl-id{position:relative;overflow:hidden}
.pl-banner{position:absolute;inset:0 0 auto;height:112px;z-index:0;
  -webkit-mask-image:linear-gradient(180deg,#000 0%,transparent 96%);
  mask-image:linear-gradient(180deg,#000 0%,transparent 96%);opacity:.42}
.pl-banner img{width:100%;height:100%;object-fit:cover;display:block}
.pl-id.has-banner>*:not(.pl-banner){position:relative;z-index:1}
.pl-id.has-banner .avb{margin-top:18px}
.soc-field.soc-wide{grid-column:1/-1;margin-top:10px}

/* ---- Cartes de clan de hauteur égale ----
   Une grille de cartes qui « dansent » se lit mal : chaque vignette occupe la
   même hauteur, la devise étant tronquée proprement sur deux lignes plutôt que
   d'étirer sa carte. */
.clan-grid{grid-auto-rows:1fr}
.clan-card{grid-template-rows:auto auto 1fr auto;align-content:start}
.cc-motto{grid-column:1/-1;margin:2px 0 0;font-size:12.5px;line-height:1.45;color:var(--dim);
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;
  min-height:2.9em}
.clan-vcard .cc-motto{margin:12px 0 0;-webkit-line-clamp:3;min-height:0}

/* ---- Pastille de clan à côté d'un pseudo ---- */
.clan-chip{display:inline-flex;align-items:center;margin-left:7px;padding:1px 7px;border-radius:6px;
  font-size:10.5px;font-weight:700;letter-spacing:.03em;text-decoration:none;vertical-align:middle;
  color:var(--clan);background:color-mix(in srgb,var(--clan) 16%,transparent);
  border:1px solid color-mix(in srgb,var(--clan) 36%,transparent)}
.clan-chip:hover{background:color-mix(in srgb,var(--clan) 30%,transparent)}
.pl-clan{display:inline-flex;align-items:center;gap:7px;margin:6px 0 2px;padding:4px 10px 4px 5px;
  border-radius:99px;text-decoration:none;font-size:12px;
  color:var(--clan);background:color-mix(in srgb,var(--clan) 14%,transparent);
  border:1px solid color-mix(in srgb,var(--clan) 34%,transparent)}
.pl-clan .cl-crest{border-radius:5px}
.pl-clan span{color:var(--dim);font-size:10.5px;text-transform:uppercase;letter-spacing:.06em}

/* ---- Clés d'API ---- */
.code-block{padding:13px 15px;border-radius:12px;overflow-x:auto;font-size:12.5px;line-height:1.6;
  background:rgba(0,0,0,.32);border:1px solid rgba(255,255,255,.10)}
.code-block code{font-family:ui-monospace,'SF Mono',Menlo,Consolas,monospace;color:#d7e2f2;
  white-space:pre;word-break:normal}
.k-dead{opacity:.45}
.k-dead code{text-decoration:line-through}

/* ---- Accès « API » depuis le compte ---- */
.me-api{padding:4px 10px;border-radius:8px;font-size:11px;font-weight:700;letter-spacing:.06em;
  text-decoration:none;color:var(--dim);background:rgba(255,255,255,.06);
  border:1px solid rgba(255,255,255,.12)}
.me-api:hover{color:var(--txt);background:rgba(255,255,255,.14)}
.soc-api{margin-left:auto;font-size:12.5px;color:var(--acc,#7aa8ff);text-decoration:none}
.soc-actions{display:flex;align-items:center;gap:12px}
.me-adm{color:#ffd48a;border-color:rgba(224,178,60,.34);background:rgba(224,178,60,.14)}

/* ---- Sections de la page Streamers ---- */
.str-sec{display:flex;align-items:center;gap:10px;margin:4px 0 12px;font-size:14px}
.str-sec.sep{margin-top:26px;padding-top:18px;border-top:1px solid rgba(255,255,255,.09)}
.str-sec .sub{font-size:11.5px}
.str-dot{width:9px;height:9px;border-radius:99px;background:#e0342a;
  box-shadow:0 0 0 4px rgba(224,52,42,.20);animation:pulse 2.4s ease-in-out infinite}
.str-grid{grid-auto-rows:1fr}
.str-card{display:flex;flex-direction:column}
.str-body{display:flex;flex-direction:column;justify-content:space-between;flex:1}

/* ---- Tableau croisé carte × mode : intensité proportionnelle ---- */
.hm-cell{display:inline-block;padding:1px 8px;border-radius:7px;font-variant-numeric:tabular-nums;
  background:color-mix(in srgb,var(--a2,#7aa8ff) calc(var(--i) * 34%),transparent);
  color:color-mix(in srgb,#ffffff calc(55% + var(--i) * 45%),var(--dim))}
td.dur{font-variant-numeric:tabular-nums;white-space:nowrap}

/* ---- Croisement civilisation × régime ---- */
.th-sub{display:block;font-size:9.5px;font-weight:400;letter-spacing:.04em;color:var(--muted);
  text-transform:none;margin-top:1px}
.wr-cell{display:inline-block;padding:2px 9px;border-radius:7px;font-variant-numeric:tabular-nums;
  background:rgba(255,255,255,.05)}
.wr-cell.up{color:#7ee2a8;background:rgba(126,226,168,.14)}
.wr-cell.down{color:#ff9c8a;background:rgba(255,140,120,.13)}

/* Case à cocher : au doigt, 13 px est intouchable. On vise la taille minimale
   recommandée (24 px) sans grossir visuellement toute la barre de filtres. */
.chk{min-height:32px;padding:4px 2px}
.chk input[type=checkbox]{width:24px;height:24px;margin:0;accent-color:#7ee2a8;cursor:pointer}
.sp-sw input[type=checkbox],.cf.sw input[type=checkbox]{width:20px;height:20px;accent-color:#7ee2a8}

/* =========================================================================
   Aucun texte coupé par des points de suspension.
   Un pseudo ou un nom de civilisation tronqué n'apprend rien au lecteur et
   l'oblige à survoler pour savoir de qui on parle. Ces libellés passent donc
   à la ligne, y compris au milieu d'un mot très long, plutôt que d'être
   rognés. Les colonnes chiffrées, elles, restent sur une ligne.
   ========================================================================= */
.pl .nm, .civ > span, td .civ > span, .spot-results .r .nm,
.team .row a, td.mapc, table.rec td, table.past td:first-child,
.rgn > span, .lm-tier .t, .rank-badge .rl, .cc-name, .cl-sub, .str-name,
.cb-name, .sel-opt span {
  white-space:normal !important;
  overflow:visible !important;
  text-overflow:clip !important;
  overflow-wrap:anywhere;
  max-width:none;
}
/* Les cellules de tableau gardent une largeur raisonnable : le texte se
   répartit sur deux lignes au lieu d'étirer la colonne. */
.pl .nm{line-height:1.25}
td.mapc{max-width:18ch}
table.past td:first-child{max-width:16ch}
.team .row a{max-width:none}
/* Le sélecteur de mode reste sur une ligne : c'est une commande, pas du texte. */
.sel-val{white-space:nowrap}

/* =========================================================================
   Chat sur mobile — disposition repensée.
   Trois colonnes côte à côte ne tiennent pas sur un téléphone : la
   conversation prend tout l'écran, les salons et les présents deviennent des
   tiroirs glissants. La zone de saisie reste toujours atteignable, au-dessus
   du dock et du clavier virtuel (dvh + safe-area).
   ========================================================================= */
.ct-mob{display:none;gap:6px;margin-left:auto}
.ct-mb{display:inline-flex;align-items:center;gap:6px;min-height:36px;padding:6px 11px;
  border-radius:10px;font-size:12.5px;cursor:pointer;color:var(--txt);
  background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.13)}
.ct-mb:hover{background:rgba(255,255,255,.15)}
.ct-mb span{font-variant-numeric:tabular-nums;color:var(--dim)}
.chat-voile{display:none}

@media(max-width:1000px){
  .ct-mob{display:flex}
  .chat-topic{gap:8px}
  .ct-ops{width:100%;order:3}

  /* la conversation occupe l'écran, dock déduit */
  .chat-wrap{display:block;position:relative;height:calc(100dvh - 210px);min-height:420px;
    margin-bottom:8px}
  body.chat-open .chat-wrap{height:calc(100dvh - 150px)}
  .chat-main{height:100%;border-radius:var(--r-m)}
  .chat-log{height:auto;flex:1}

  /* tiroirs : hors écran par défaut, amenés par-dessus la conversation */
  .chat-rooms,.chat-users{position:absolute;top:0;bottom:0;z-index:8;width:min(78vw,300px);
    margin:0;border-radius:var(--r-m);max-height:none;
    box-shadow:0 24px 60px rgba(0,0,0,.55);transition:transform .22s ease}
  .chat-rooms{left:0;transform:translateX(calc(-100% - 20px))}
  .chat-users{right:0;transform:translateX(calc(100% + 20px))}
  .chat-wrap.show-rooms .chat-rooms{transform:none}
  .chat-wrap.show-users .chat-users{transform:none}
  .chat-voile{display:block;position:absolute;inset:0;z-index:7;
    background:rgba(4,6,10,.55);backdrop-filter:blur(2px)}
  .chat-wrap:not(.show-rooms):not(.show-users) .chat-voile{display:none}

  /* saisie : jamais coupée par le clavier ni par le dock */
  .chat-input{padding:10px 12px calc(10px + env(safe-area-inset-bottom))}
  .chat-input input{font-size:16px}      /* < 16px, iOS zoome sur le champ */
  .chat-input button{min-width:44px;min-height:44px}

  /* messages plus lisibles au pouce */
  .cl-msg{font-size:14.5px;padding:5px 6px;gap:7px;
    grid-template-columns:30px 104px 1fr}
  .cr-room{min-height:40px;font-size:14px}
  .cu{min-height:38px}
  .cb-row{min-height:44px}
  .dm-bar{position:relative;z-index:9;overflow-x:auto;flex-wrap:nowrap}
  .dm-tab{flex:none}
  .chat-browser{z-index:10}
}

@media(max-width:560px){
  .chat-wrap{height:calc(100dvh - 190px)}
  .chat-topic{padding:10px 12px}
  .chat-topic b{font-size:14px}
  .chat-topic > span{width:100%;order:4;font-size:11.5px}
  .ct-panel{max-height:60dvh}
}

/* Sur un petit écran, la page de chat renonce au bandeau de saison : ces
   90 pixels valent mieux dans la conversation que dans un rappel de calendrier
   disponible partout ailleurs. */
@media(max-width:1000px){
  body.route-chat #seasonBar{display:none}
  body.route-chat .crumb{display:none}
}

/* Sur un petit écran, la page de chat renonce au bandeau de saison : ces
   90 pixels valent mieux dans la conversation que dans un rappel de calendrier
   disponible partout ailleurs. */
@media(max-width:1000px){
  body.route-chat #seasonBar{display:none}
  body.route-chat .crumb{display:none}
}

/* La hauteur du chat est calculée en JavaScript à partir de la place réelle :
   une hauteur minimale en CSS ne peut que la contredire et repousser la barre
   de saisie sous le dock. On la neutralise sur les petits écrans. */
@media(max-width:1000px){
  .chat-wrap, body.chat-open .chat-wrap{min-height:0 !important}
}

/* « hidden » ne pèse rien face à un display explicite : il faut le dire. */
.chat-voile[hidden]{display:none !important}

/* Étendards de civilisation : image réelle, jamais déformée ni rognée. */
.crest-img{object-fit:contain;vertical-align:middle;border-radius:3px;
  image-rendering:auto;flex:none;
  /* Le texte alternatif ne doit jamais peser sur la mise en page : tant que
     l'image differee n'est pas chargee, Chrome l'affiche DANS la boite de 32 px
     et il s'y enroule sur cinq lignes, ce qui etirait chaque ligne du tableau
     des matchs. A taille de police nulle il reste lu par les lecteurs d'ecran
     mais n'occupe plus de place. */
  font-size:0;line-height:0;overflow:hidden}

/* ELO de fin de partie et écart : le nombre porte, l'écart colore. */
.elo-cell{white-space:nowrap}
.elo-d{font-family:var(--mono);font-size:11px;font-weight:700;color:var(--dim)}
.elo-d.up{color:var(--win)} .elo-d.dn{color:var(--loss)}
.srv{font-size:12px;color:var(--muted);white-space:nowrap}
.dimc{color:var(--dim)}

/* Services du serveur, en pied de la colonne des présents de #staff. */
.cu-srv{display:flex;flex-direction:column;gap:2px;cursor:pointer}
.cu-srv-q{font-size:10.5px;color:var(--dim);padding-left:2px}

/* =========================================================================
   Fiche d'une partie
   ========================================================================= */
.mh-grid{display:flex;flex-wrap:wrap;gap:10px;margin-top:6px}
.mh-k{display:flex;flex-direction:column;gap:3px;padding:9px 14px;border-radius:12px;
  background:var(--glass);border:1px solid var(--stroke);min-width:110px}
.mh-k span{font-size:10px;text-transform:uppercase;letter-spacing:.1em;color:var(--dim)}
.mh-k b{font-size:15px}
.eq-ok{color:var(--win)} .eq-moy{color:var(--a2)} .eq-ko{color:var(--loss)}

.mt-teams{display:flex;align-items:stretch;gap:14px;flex-wrap:wrap}
.mt-team{flex:1 1 320px;min-width:0;padding:12px;border-radius:14px;
  background:var(--glass);border:1px solid var(--stroke)}
.mt-team.win{border-color:color-mix(in srgb, var(--win) 45%, transparent)}
.mt-team.lose{border-color:color-mix(in srgb, var(--loss) 30%, transparent)}
.mt-hd{display:flex;align-items:center;gap:9px;margin-bottom:10px;flex-wrap:wrap}
.mt-avg{margin-left:auto;font-family:var(--mono);font-size:11.5px;color:var(--dim)}
.mt-vs{align-self:center;font-family:var(--mono);font-weight:800;font-size:12px;
  color:var(--dim);letter-spacing:.1em}

/* Une carte par joueur : étendard, identité, ELO. Rien n'est tronqué ici,
   c'est la page où l'on vient justement pour lire les noms en entier. */
.mp{display:flex;align-items:center;gap:11px;padding:9px 10px;border-radius:11px;
  margin-bottom:6px;background:var(--glass-2);border:1px solid transparent}
.mp.w{border-color:color-mix(in srgb, var(--win) 28%, transparent)}
.mp-id{min-width:0;flex:1}
.mp-n{display:block;font-weight:700;font-size:14.5px;color:var(--txt);
  white-space:normal;word-break:break-word}
.mp-n:hover{color:var(--a2)}
.mp-sub{display:flex;align-items:center;gap:6px;font-size:11.5px;color:var(--muted);
  margin-top:2px;flex-wrap:wrap}
.mp-elo{text-align:right;flex:none;font-family:var(--mono)}
.mp-elo b{font-size:16px}
.mp-elo small{display:block;font-size:10px;color:var(--dim);margin-top:1px}
.mt-note{margin-top:14px;font-size:12.5px;color:var(--dim);line-height:1.5}
@media(max-width:820px){ .mt-vs{display:none} }

/* --- Alignement définitif des étendards -----------------------------------
   Deux colonnes de largeur égale, chacune calée à GAUCHE, le « VS » au milieu :
   les étendards tombent ainsi tous à la même abscisse d'une ligne à l'autre,
   quel que soit le nombre de joueurs. Caler le camp de gauche contre le VS
   alignait les FINS de pseudos, donc rien de régulier à l'œil. */
/* Colonne du milieu de largeur FIXE : en « auto », elle changeait de largeur
   selon le contenu (« VS » contre « — »), ce qui décalait les deux camps d'une
   ligne à l'autre de quelques pixels — assez pour que les étendards ne forment
   plus une verticale. */
.match-t .teams{display:grid;grid-template-columns:1fr 30px 1fr;align-items:center;
  gap:8px;width:100%;min-width:0}
.match-t .teams .vs{width:30px;text-align:center;padding:2px 0}
.match-t .teams .team,
.match-t .teams .team.mine{justify-content:flex-start !important;
  align-items:center;text-align:left !important;min-width:0}
.match-t .teams.pile .team,
.match-t .teams.pile .team.mine{align-items:flex-start !important}
.match-t .teams .team .row{justify-content:flex-start}
.match-t .teams .vs{justify-self:center}

/* Le camp du joueur consulté était rendu en « row-reverse » (pseudo d'abord,
   étendard à la fin) pour se coller contre le VS. Résultat : les drapeaux de
   gauche ne tombaient pas au même endroit que ceux de droite. On force le même
   sens de lecture des deux côtés — étendard, puis pseudo. */
.match-t .team .row,
.match-t .team.mine .row{flex-direction:row !important;justify-content:flex-start !important}
.match-t .team .row .crest-img{order:0 !important}
.match-t .team .row a{order:1 !important}

/* Dernier verrou : chaque camp est une grille dont la PREMIÈRE colonne fait la
   largeur exacte d'un étendard. Le drapeau occupe donc toujours la même case,
   à la même abscisse, quelle que soit la ligne — plus rien ne peut le décaler. */
.match-t .teams .team{display:grid;grid-template-columns:1fr;gap:2px;padding:0;margin:0}
.match-t .teams .team .row{display:grid;grid-template-columns:32px minmax(0,1fr);
  align-items:center;gap:5px;padding:0;margin:0}
.match-t .teams .team .row .crest-img{justify-self:start}
.match-t td{padding-left:8px !important;padding-right:8px !important}

/* --- Étendards alignés PARTOUT ---------------------------------------------
   Tout libellé de civilisation (tableaux de civs, colonnes Civ, fiches, chat)
   place son étendard dans une case de largeur fixe : les drapeaux forment donc
   une verticale nette d'une ligne à l'autre, et les noms démarrent tous au même
   endroit. Sans ça, chaque drapeau se calait sur la largeur de son propre nom. */
.civ{display:grid !important;grid-template-columns:34px minmax(0,1fr);
  align-items:center;gap:7px}
.civ > .crest-img,.civ > .crest{justify-self:start;grid-column:1}
.civ > span{grid-column:2;min-width:0}
/* Étendard seul (en-tête de tableau, cellule sans nom) : on garde le centrage. */
th .crest-img,td > .crest-img{display:inline-block;vertical-align:middle}

/* --- Le VS se place ENTRE les deux camps ----------------------------------
   Jusqu'ici les deux camps occupaient deux colonnes de largeur égale et le VS
   le centre géométrique : correct au pixel, mais quand un pseudo est court il
   restait un grand vide avant le VS. Ici les camps se serrent autour de lui :
   le camp de gauche finit contre le VS, celui de droite démarre juste après.
   Contrepartie assumée : les étendards de gauche ne forment plus une verticale,
   puisque leur position suit désormais la longueur des pseudos. */
.match-t .teams{display:flex !important;grid-template-columns:none !important;
  justify-content:center;align-items:center;gap:10px;width:100%;min-width:0}
.match-t .teams .team{flex:0 1 auto;min-width:0}
.match-t .teams .team.mine{justify-content:flex-end !important}
.match-t .teams.pile .team.mine{align-items:flex-end !important}
.match-t .teams.pile .team.mine .row{grid-template-columns:minmax(0,1fr) 32px}
.match-t .teams.pile .team.mine .row .crest-img{grid-column:2;justify-self:end}
.match-t .teams.pile .team.mine .row a{grid-column:1;text-align:right}
.match-t .teams .team.mine .row{grid-template-columns:minmax(0,1fr) 32px}
.match-t .teams .team.mine .row .crest-img{grid-column:2;justify-self:end}
.match-t .teams .team.mine .row a{grid-column:1;text-align:right}
.match-t .teams .vs{flex:0 0 auto}

/* Respiration et centrage vertical du VS : serré entre les deux camps il
   touchait l'étendard de droite, et sur les lignes empilées il remontait en
   haut au lieu de rester à mi-hauteur. */
.match-t .teams{align-items:center !important;gap:0 !important}
.match-t .teams .vs{align-self:center !important;margin:0 14px !important;
  flex:0 0 auto}
.match-t .teams.pile{align-items:center !important}
.match-t .teams.pile .team{align-self:center}

/* --- Le VS occupe sa propre colonne de tableau -----------------------------
   Fini les acrobaties de centrage : trois colonnes distinctes (mon camp, le VS,
   les adversaires). Le VS tombe donc au même endroit sur toutes les lignes, et
   les étendards de chaque camp aussi, sans dépendre de la longueur des pseudos.
   Le tableau compte onze colonnes : les largeurs sont redéfinies ici. */
.match-t th:nth-child(1),.match-t td:nth-child(1){width:112px}   /* date        */
.match-t th:nth-child(2),.match-t td:nth-child(2){width:76px}    /* mode        */
.match-t th:nth-child(3),.match-t td:nth-child(3){width:150px}   /* civ         */
.match-t th:nth-child(4),.match-t td:nth-child(4){width:98px}    /* carte       */
.match-t th:nth-child(5),.match-t td:nth-child(5){width:70px}    /* durée       */
.match-t th:nth-child(6),.match-t td:nth-child(6){width:76px}    /* ELO         */
.match-t th:nth-child(7),.match-t td:nth-child(7){width:84px}    /* serveur     */
.match-t th:nth-child(8),.match-t td:nth-child(8){width:auto}    /* mon camp    */
.match-t th:nth-child(9),.match-t td:nth-child(9){width:34px}    /* VS          */
.match-t th:nth-child(10),.match-t td:nth-child(10){width:auto}  /* adversaires */
.match-t th:nth-child(11),.match-t td:nth-child(11){width:36px}  /* issue       */

.match-t td.lu{vertical-align:middle}
.match-t td.luvs{text-align:center;vertical-align:middle;padding:0 !important}
.match-t td.luvs .vs{display:inline-block;margin:0}
.match-t .lu .team{display:flex;flex-direction:row;flex-wrap:nowrap;align-items:center;
  gap:10px;min-width:0;justify-content:flex-start}
.match-t .lu .team.pile{flex-direction:column;align-items:flex-start;gap:2px}
.match-t .lu .team .row{display:grid;grid-template-columns:32px minmax(0,1fr);
  align-items:center;gap:5px;min-width:0;width:100%}
.match-t .lu .team .row .crest-img{grid-column:1;justify-self:start}
.match-t .lu .team .row a{grid-column:2}
/* Les colonnes secondaires s'effacent avant que les pseudos ne se serrent. */
/* Cette règle masque la colonne « serveur » du tableau du PROFIL sous 1500 px.
   Les tableaux de l'accueil n'ont pas les mêmes colonnes : la septième y est
   le camp de gauche, qui disparaissait donc entièrement. */
@media(max-width:1500px){
  .match-t:not(.fin-t):not(.live-t) th:nth-child(7),
  .match-t:not(.fin-t):not(.live-t) td:nth-child(7){display:none}
  .match-t.fin-t  th:nth-child(6),.match-t.fin-t  td:nth-child(6){display:none}
  .match-t.live-t th:nth-child(5),.match-t.live-t td:nth-child(5){display:none}
}
@media(max-width:1280px){
  .match-t:not(.fin-t):not(.live-t) th:nth-child(2),
  .match-t:not(.fin-t):not(.live-t) td:nth-child(2){display:none}
  .match-t.fin-t  th:nth-child(3),.match-t.fin-t  td:nth-child(3){display:none}
  .match-t.live-t th:nth-child(2),.match-t.live-t td:nth-child(2){display:none}
}
@media(max-width:1060px){
  .match-t:not(.fin-t):not(.live-t) th:nth-child(4),
  .match-t:not(.fin-t):not(.live-t) td:nth-child(4){display:none}
  .match-t.fin-t  th:nth-child(4),.match-t.fin-t  td:nth-child(4){display:none}
  .match-t.fin-t  th:nth-child(5),.match-t.fin-t  td:nth-child(5){display:none}
}

/* Même sens de lecture dans les deux colonnes : étendard puis pseudo, collés
   l'un à l'autre et calés à gauche. Une règle antérieure inversait le camp de
   gauche (pseudo d'abord, aligné à droite) pour le coller au VS — le pseudo se
   retrouvait alors loin de son propre drapeau. On garde « minmax(0,1fr) » et
   non « max-content » : dans un tableau à largeurs fixes, max-content fait
   déborder la colonne et écrase tout le reste. */
.match-t td.lu .team .row,
.match-t td.lu.mine .team .row{grid-template-columns:32px minmax(0,1fr) !important;
  gap:6px !important}
.match-t td.lu .team .row .crest-img,
.match-t td.lu.mine .team .row .crest-img{grid-column:1 !important;justify-self:start !important}
.match-t td.lu .team .row a,
.match-t td.lu.mine .team .row a{grid-column:2 !important;text-align:left !important;
  justify-self:start !important;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.match-t td.lu .team,
.match-t td.lu.mine .team{justify-content:flex-start !important}
.match-t td.lu .team.pile,
.match-t td.lu.mine .team.pile{align-items:flex-start !important}

/* Le tableau des matchs récupère de la largeur SANS casser la grille : la
   colonne latérale reste en place, on élargit simplement le panneau au-delà de
   sa colonne. Une tentative précédente passait « .pl-main » en display:contents
   pour remonter les panneaux dans la grille — ça déplaçait la colonne de droite
   et cassait la fiche. */
@media(min-width:1101px){
  .pl-large{margin-right:calc(-1 * (100% + 16px));
            width:calc(200% + 16px);
            position:relative;z-index:2}
}

/* Nom de civilisation : UNE ligne, tronquée au besoin, l infobulle donne le nom
   complet. Une regle globale plus haut force le retour a la ligne en !important
   sur .civ > span (utile ailleurs, pas ici) : il faut donc l annuler avec une
   specificite superieure, sur le seul tableau des matchs. */
table.match-t td.civc span.civ > span{
  white-space:nowrap !important;
  overflow:hidden !important;
  text-overflow:ellipsis !important;
  overflow-wrap:normal !important;
  word-break:normal !important;
  display:block !important;
  min-width:0 !important;
  max-width:100% !important;
}
table.match-t td.civc span.civ{grid-template-columns:34px minmax(0,1fr) !important}

/* Carte et pseudos : meme combat que le nom de civilisation — une ligne,
   troncature propre, nom complet dans l infobulle. */
table.match-t td.mapc,
table.match-t td.lu .team .row a{
  white-space:nowrap !important;
  overflow:hidden !important;
  text-overflow:ellipsis !important;
  overflow-wrap:normal !important;
  word-break:normal !important;
}
table.match-t td.mapc{max-width:none}

/* ---------------- statistiques de partie (fiche de match) ---------------- */
/* Tableau comparatif : une ligne par mesure, une colonne par joueur. La
   première colonne reste visible quand on fait défiler une partie 4v4. */
.ms-scroll{overflow-x:auto;margin:4px -6px 0;padding:0 6px 4px}
.ms-t{border-collapse:separate;border-spacing:0;width:100%;min-width:520px;font-size:13.5px}
.ms-t th,.ms-t td{padding:7px 9px;text-align:left;vertical-align:middle}
.ms-t thead th{border-bottom:1px solid var(--stroke-2);white-space:nowrap}
.ms-t tbody tr:nth-child(even){background:rgba(255,255,255,.022)}
.ms-t tbody tr:hover{background:var(--glass)}

.ms-lbl{
  position:sticky;left:0;z-index:2;
  background:linear-gradient(90deg,var(--bg-2) 78%,rgba(13,11,18,0));
  color:var(--muted);font-weight:500;white-space:nowrap;
  border-right:1px solid var(--stroke);
}
.ms-corner{color:var(--dim);font-size:11px;letter-spacing:.09em;text-transform:uppercase}
.ms-inv{color:var(--dim);font-size:11px;margin-left:5px;cursor:help}

.ms-p{min-width:104px}
.ms-p .ms-ph{display:flex;align-items:center;gap:7px;font-weight:600}
.ms-p .ms-ph a{color:var(--txt);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:104px}
.ms-p.w .ms-ph a{color:var(--win)}
.ms-p.l .ms-ph a{color:var(--loss)}
.ms-p .ms-pt{color:var(--dim);font-size:11px;margin-top:2px;white-space:nowrap;
  overflow:hidden;text-overflow:ellipsis;max-width:118px}

/* Chaque cellule porte sa propre barre : la comparaison se lit sans lire les
   chiffres, ce qu'un simple tableau de nombres ne permet pas. */
.ms-v{position:relative;font-family:var(--mono);font-variant-numeric:tabular-nums;overflow:hidden}
.ms-v .ms-bar{
  position:absolute;left:0;top:50%;transform:translateY(-50%);height:22px;border-radius:5px;
  background:linear-gradient(90deg,color-mix(in srgb,var(--a1) 26%,transparent),color-mix(in srgb,var(--a1) 6%,transparent));
  pointer-events:none;
}
.ms-v.best .ms-bar{background:linear-gradient(90deg,rgba(49,208,138,.32),rgba(49,208,138,.07))}
.ms-v .ms-n{position:relative;z-index:1}
.ms-v.best .ms-n{color:var(--win);font-weight:600}

/* ---------------- chat : réponses des services et son ---------------- */
/* NickServ, ChanServ, HostServ et les réponses de /whois passaient par le
   style « système » : gris pâle et italique, illisible sur le fond sombre,
   alors que ce sont justement les réponses aux commandes qu'on vient de
   taper. On leur donne leur propre carte, avec le nom du service en étiquette. */
.cl-svc{
  display:flex;align-items:flex-start;gap:9px;
  margin:3px 0;padding:7px 11px;border-radius:var(--r-s);
  background:rgba(74,168,255,.075);
  border:1px solid rgba(74,168,255,.22);
  border-left:3px solid var(--a5);
}
.cl-svc-tag{
  flex:none;font-family:var(--mono);font-size:10.5px;font-weight:700;
  letter-spacing:.06em;text-transform:uppercase;color:var(--a5);
  padding-top:2px;white-space:nowrap;
}
.cl-svc-t{color:var(--txt);font-size:13.5px;line-height:1.5;word-break:break-word}
.cl-svc.ko{background:rgba(255,95,109,.08);border-color:rgba(255,95,109,.28);border-left-color:var(--loss)}
.cl-svc.ko .cl-svc-tag{color:var(--loss)}

/* Les notes de salon (arrivées, départs) restent discrètes, mais lisibles :
   --dim sur ce fond passait sous le seuil de contraste. */
.cl-sys{color:var(--muted)}

/* Case à cocher du son : visible sur tous les écrans, pas seulement en mobile. */
.cr-son{
  display:flex;align-items:center;gap:8px;margin-top:10px;cursor:pointer;
  font-size:12.5px;color:var(--muted);user-select:none;
}
.cr-son:hover{color:var(--txt)}
.cr-son input{
  appearance:none;-webkit-appearance:none;flex:none;
  width:34px;height:19px;border-radius:999px;position:relative;cursor:pointer;
  background:rgba(255,255,255,.12);border:1px solid var(--stroke-2);
  transition:background .18s;
}
.cr-son input::after{
  content:'';position:absolute;top:1px;left:1px;width:15px;height:15px;border-radius:50%;
  background:var(--muted);transition:transform .18s, background .18s;
}
.cr-son input:checked{background:rgba(49,208,138,.3);border-color:rgba(49,208,138,.5)}
.cr-son input:checked::after{transform:translateX(15px);background:var(--win)}
.cr-son input:focus-visible{outline:2px solid var(--a5);outline-offset:2px}

/* ---------------- en direct : parties en cours et fraîchement finies ------ */
/* Même tableau que la liste de matchs du profil — trois colonnes pour les
   camps, le VS dans la sienne, donc aligné sur toutes les lignes. Seule la
   dernière colonne change : « en cours » au lieu du score. */
.direct-t td.dt{white-space:nowrap;font-family:var(--mono);font-variant-numeric:tabular-nums}
.direct-t td.dl-nom{
  max-width:190px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
  color:var(--txt);font-size:12.5px;
}
.dl-chrono,.df-chrono{
  font-family:var(--mono);font-variant-numeric:tabular-nums;
  font-size:12.5px;color:var(--a2);
}
.df-chrono{color:var(--muted)}

/* La pastille bat : c'est ce qui distingue « en cours » d'une capture figée.
   Elle s'arrête pour qui a demandé moins d'animations. */
.dl-pastille{
  display:inline-block;vertical-align:middle;margin-right:7px;
  width:8px;height:8px;border-radius:50%;background:var(--win);
  box-shadow:0 0 0 0 rgba(49,208,138,.55);
  animation:dl-battement 1.8s cubic-bezier(.4,0,.6,1) infinite;
}
@keyframes dl-battement{
  0%   {box-shadow:0 0 0 0    rgba(49,208,138,.55)}
  70%  {box-shadow:0 0 0 8px  rgba(49,208,138,0)}
  100% {box-shadow:0 0 0 0    rgba(49,208,138,0)}
}
@media (prefers-reduced-motion: reduce){ .dl-pastille{animation:none} }

/* L'étiquette « en cours » remplace le score : elle respire, sans clignoter. */
.chip.encours{
  color:var(--win);background:rgba(49,208,138,.12);
  border:1px solid rgba(49,208,138,.35);
  animation:dl-respire 2.4s ease-in-out infinite;
}
@keyframes dl-respire{
  0%,100%{background:rgba(49,208,138,.10)}
  50%    {background:rgba(49,208,138,.22)}
}
@media (prefers-reduced-motion: reduce){ .chip.encours{animation:none} }

/* Largeurs propres aux tableaux « En direct ». Elles doivent l'emporter sur
   celles de .match-t, taillées pour les onze colonnes de la fiche joueur :
   d'où le doublement de classe, qui suffit à passer devant en spécificité. */
.match-t.live-t th:nth-child(1),.match-t.live-t td:nth-child(1){width:104px}  /* depuis   */
.match-t.live-t th:nth-child(2),.match-t.live-t td:nth-child(2){width:190px}  /* partie   */
.match-t.live-t th:nth-child(3),.match-t.live-t td:nth-child(3){width:126px}  /* carte    */
.match-t.live-t th:nth-child(4),.match-t.live-t td:nth-child(4){width:72px}   /* joueurs  */
.match-t.live-t th:nth-child(5),.match-t.live-t td:nth-child(5){width:104px}  /* serveur  */
.match-t.live-t th:nth-child(6),.match-t.live-t td:nth-child(6){width:auto}   /* camp     */
.match-t.live-t th:nth-child(7),.match-t.live-t td:nth-child(7){width:34px}   /* VS       */
.match-t.live-t th:nth-child(8),.match-t.live-t td:nth-child(8){width:auto}   /* adverse  */
.match-t.live-t th:nth-child(9),.match-t.live-t td:nth-child(9){width:92px}   /* état     */

/* 10 colonnes depuis le 25/08 (colonne Format retirée) :
   1 quand · 2 mode · 3 carte · 4 durée · 5 ELO · 6 serveur · 7 camp · 8 VS
   · 9 camp adverse · 10 résultat. */
.match-t.fin-t th:nth-child(1),.match-t.fin-t td:nth-child(1){width:92px}
.match-t.fin-t th:nth-child(2),.match-t.fin-t td:nth-child(2){width:96px}
.match-t.fin-t th:nth-child(3),.match-t.fin-t td:nth-child(3){width:120px}
.match-t.fin-t th:nth-child(4),.match-t.fin-t td:nth-child(4){width:70px}
.match-t.fin-t th:nth-child(5),.match-t.fin-t td:nth-child(5){width:68px}
.match-t.fin-t th:nth-child(6),.match-t.fin-t td:nth-child(6){width:90px}
.match-t.fin-t th:nth-child(7),.match-t.fin-t td:nth-child(7){width:30%}
.match-t.fin-t th:nth-child(8),.match-t.fin-t td:nth-child(8){width:32px}
.match-t.fin-t th:nth-child(9),.match-t.fin-t td:nth-child(9){width:30%}
.match-t.fin-t th:nth-child(10),.match-t.fin-t td:nth-child(10){width:96px}
.match-t.fin-t td{padding-left:6px !important;padding-right:6px !important}
.match-t.fin-t td.mapc{max-width:none;font-size:12px}

/* Une puce d'état coupée en deux (« en / cours ») se lit mal : elle tient sur
   une ligne, quitte à réduire un peu la casse. */
.chip.encours{white-space:nowrap;display:inline-block}
.direct-t td:last-child{white-space:nowrap}

/* Un lobby de sept joueurs tous dans le camp 0 doit s'empiler, pas déborder
   sur la colonne voisine. */
.direct-t .team{flex-wrap:wrap}
.direct-t .team .row a{max-width:16ch}

/* Deux colonnes « auto » côte à côte, le navigateur en écrase une : la gauche
   tombait à zéro et les deux camps se retrouvaient empilés à droite. On leur
   donne donc une part explicite, égale, du tableau. */
.match-t.fin-t{table-layout:fixed;width:100%}
.match-t.fin-t td.lu{overflow:hidden}

/* ---------------- fiche de match : alignement des étendards ---------------- */
/* civCrest rend une image 104×56 quand elle existe, un blason SVG carré sinon.
   Deux largeurs différentes dans la même colonne, et le pseudo ne démarre plus
   au même endroit d'une ligne à l'autre. On impose donc la même boîte à tout
   le monde, l'image se contentant de s'y inscrire. */
.mp > .crest,
.mp > .crest-img{
  width:56px;height:32px;flex:none;
  object-fit:contain;object-position:center;
}

/* Le bloc d'identité et celui d'ELO gardent une largeur stable : sans cela,
   un ELO à quatre chiffres décalait le pseudo de la ligne voisine. */
.mp-elo{min-width:104px}
.mp-sub{min-height:17px}

/* À plus de deux camps la grille se remplit par rangées : chaque carte garde
   la même largeur, sinon la dernière rangée s'étire sur toute la page. */
/* Tous les cadres d'une même rangée font la même hauteur : « stretch » est le
   défaut de la grille, mais il ne sert à rien si la carte ne sait pas s'étirer
   — d'où la colonne flex à l'intérieur, dont la liste de joueurs pousse. */
.mt-teams{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));align-items:stretch}
.mt-team{display:flex;flex-direction:column;height:100%}
.mt-team > .mt-hd{flex:none}

/* Une ligne de joueur a toujours la même hauteur, quel que soit le nombre de
   pastilles qu'elle porte : sinon deux cartes voisines ne s'alignent pas. */
.mp{min-height:58px;box-sizing:border-box}
.mp + .mp{margin-top:8px}
.mt-teams .mt-vs{align-self:center;justify-self:center}

/* Un pseudo long faisait grandir sa carte et cassait l'alignement de la rangée :
   il se coupe, comme partout ailleurs sur le site. */
.mp-n{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

/* Deux camps : ils occupent tout, le VS tient la corde au milieu. Au-delà,
   la grille reprend son remplissage automatique. */
.mt-teams.duo{grid-template-columns:1fr auto 1fr}

/* Pastille d'aide : l'explication reste là pour qui la cherche, sans occuper
   six lignes de page pour tout le monde. */
.aide{
  display:inline-grid;place-items:center;width:17px;height:17px;margin-left:8px;
  border-radius:50%;font-family:var(--mono);font-size:11px;font-weight:700;
  color:var(--dim);background:var(--glass);border:1px solid var(--stroke);
  cursor:help;user-select:none;flex:none;
}
.aide:hover,.aide:focus-visible{color:var(--txt);border-color:var(--stroke-2)}

/* ---------------- prévision d'ELO et portrait de jeu ---------------- */
.pv-bloc{
  padding:14px 0;border-top:1px solid var(--stroke);
}
.pv-bloc:first-of-type{border-top:0;padding-top:4px}
.pv-hd{display:flex;align-items:baseline;gap:10px;margin-bottom:10px}
.pv-hd b{font-family:'Space Grotesk','Noto Sans SC',sans-serif;font-size:15px}
.pv-sur{color:var(--dim);font-size:12px}

.pv-chiffres{
  display:grid;gap:10px;margin-bottom:14px;
  grid-template-columns:repeat(auto-fit,minmax(132px,1fr));
}
.pv-k{
  padding:9px 12px;border-radius:var(--r-s);
  background:var(--glass);border:1px solid var(--stroke);
}
.pv-k span{display:block;color:var(--dim);font-size:10.5px;letter-spacing:.07em;
  text-transform:uppercase;margin-bottom:3px}
.pv-k b{font-family:var(--mono);font-size:19px;font-variant-numeric:tabular-nums}
.pv-k i{font-style:normal;font-size:11.5px;color:var(--muted);margin-left:6px}
.pv-k i.up{color:var(--win)} .pv-k i.dn{color:var(--loss)}

/* Le portrait : plusieurs axes courts côte à côte plutôt qu'une longue liste
   qu'on ne lit pas. */
/* Colonnes typographiques plutôt qu'une grille : les axes n'ont pas la même
   hauteur — une civilisation contre huit cartes — et une grille les aurait
   alignés sur le plus haut, en laissant des trous. Là, chaque bloc reste
   insécable et se range à la suite. */
/* Une grille, pas des colonnes typographiques : celles-ci équilibrent la
   HAUTEUR, pas la surface — avec quatre axes inégaux, le navigateur en
   entassait deux à gauche et laissait la moitié droite vide. Ici chaque axe
   occupe sa case, et l'espace se remplit dans l'ordre. */
.pv-portrait{
  display:grid;gap:16px 20px;align-items:start;
  grid-template-columns:repeat(auto-fit,minmax(230px,1fr));
}
.pv-axe{min-width:0}
.pv-axe h4{font-size:11px;letter-spacing:.08em;text-transform:uppercase;
  color:var(--dim);font-weight:600;margin-bottom:6px}
.pv-l{list-style:none}
.pv-l li{
  display:grid;grid-template-columns:minmax(0,1fr) 44px 34px;align-items:baseline;gap:6px;
  padding:4px 0;font-size:12.5px;border-bottom:1px solid rgba(255,255,255,.04);
}
/* Un libellé long se replie sur deux lignes plutôt que d'être tronqué :
   « contre bien plus f… » ne veut rien dire. */
.pv-c{min-width:0;color:var(--txt);line-height:1.35;overflow-wrap:anywhere}
.pv-t{font-family:var(--mono);text-align:right;color:var(--muted);font-variant-numeric:tabular-nums}
.pv-t.up{color:var(--win)} .pv-t.dn{color:var(--loss)}
.pv-n{font-family:var(--mono);text-align:right;color:var(--dim);font-size:11px}

.pv-style{
  display:flex;flex-wrap:wrap;gap:6px 18px;margin-top:12px;padding-top:10px;
  border-top:1px solid var(--stroke);font-size:12.5px;color:var(--muted);
}
.pv-style b{color:var(--txt);font-family:var(--mono)}
.pv-src{color:var(--dim);font-size:11.5px;margin-left:auto}

/* Le versant défavorable du portrait : même liste, titre en rouge sourd, pour
   qu'on ne confonde pas d'un coup d'œil ce qui marche et ce qui coûte. */
.pv-axe h4.pv-ko{margin-top:10px;color:var(--loss);opacity:.85}

/* Liste des salons : le nom prend la place, la croix reste discrète jusqu'au
   survol — on ne quitte pas un salon par accident. */
.cr-item{display:flex;align-items:center;gap:2px}
.cr-item .cr-room{flex:1;min-width:0}
.cr-quit{
  flex:none;width:22px;height:22px;border-radius:6px;border:0;cursor:pointer;
  background:transparent;color:var(--dim);font-size:15px;line-height:1;
  opacity:0;transition:opacity .15s, color .15s, background .15s;
}
.cr-item:hover .cr-quit,.cr-quit:focus-visible{opacity:1}
.cr-quit:hover{background:rgba(255,95,109,.15);color:var(--loss)}

/* ---------------- tickets : contact, retour, idée, bogue ---------------- */
.tk-form{display:flex;flex-direction:column;gap:10px}
.tk-form input[type=text],.tk-form input:not([type]),.tk-form textarea{
  width:100%;padding:10px 12px;border-radius:var(--r-s);
  background:var(--glass);border:1px solid var(--stroke);color:var(--txt);
  font:inherit;font-size:14px;resize:vertical;
}
.tk-form input:focus,.tk-form textarea:focus{outline:none;border-color:var(--a5)}

.tk-types{display:grid;gap:8px;grid-template-columns:repeat(auto-fit,minmax(168px,1fr))}
.tk-type{position:relative;cursor:pointer}
.tk-type input{position:absolute;opacity:0;pointer-events:none}
.tk-type span{
  display:block;padding:9px 12px;border-radius:var(--r-s);
  background:var(--glass);border:1px solid var(--stroke);transition:.15s;
}
.tk-type b{display:block;font-size:13.5px}
.tk-type i{display:block;font-style:normal;font-size:11.5px;color:var(--dim);margin-top:2px}
.tk-type input:checked + span{border-color:var(--a2);background:color-mix(in srgb,var(--a2) 10%,transparent)}
.tk-type input:focus-visible + span{outline:2px solid var(--a5);outline-offset:2px}

.tk-act{display:flex;align-items:center;gap:12px}
.tk-act .spacer{flex:1}
.tk-chk{display:flex;align-items:center;gap:7px;font-size:12.5px;color:var(--muted);cursor:pointer}

/* Une pastille d'état, lisible d'un coup d'œil dans une longue file. */
.tk-st{
  display:inline-block;padding:2px 9px;border-radius:999px;font-size:11.5px;
  border:1px solid var(--stroke-2);color:var(--muted);white-space:nowrap;
}
.tk-st.o{color:var(--a2);border-color:color-mix(in srgb,var(--a2) 40%,transparent);background:color-mix(in srgb,var(--a2) 10%,transparent)}
.tk-st.c{color:var(--a5);border-color:rgba(74,168,255,.4);background:rgba(74,168,255,.10)}
.tk-st.r{color:var(--win);border-color:rgba(49,208,138,.4);background:rgba(49,208,138,.10)}
.tk-st.f{color:var(--dim)}
.tk-p{font-size:11.5px;color:var(--muted)}
.tk-p.p-haute{color:var(--loss);font-weight:600}
.tk-p.p-basse{color:var(--dim)}
/* Un ticket que personne n'a encore ouvert doit sauter aux yeux. */
tr.tk-neuf td:first-child{box-shadow:inset 3px 0 0 var(--a1)}

.tk-outils{display:flex;flex-wrap:wrap;gap:14px;align-items:center;margin:10px 0 4px;
  padding:10px 12px;border-radius:var(--r-s);background:var(--glass);border:1px solid var(--stroke)}
.tk-outils label{display:flex;align-items:center;gap:7px;font-size:12.5px;color:var(--muted)}

.tk-fil{display:flex;flex-direction:column;gap:10px;margin:14px 0}
.tk-m{padding:11px 13px;border-radius:var(--r-m);border:1px solid var(--stroke);background:var(--glass)}
.tk-m.equipe{border-color:rgba(74,168,255,.28);background:rgba(74,168,255,.06)}
/* Une note interne ne doit jamais pouvoir être confondue avec une réponse. */
.tk-m.interne{border-color:color-mix(in srgb,var(--a1) 40%,transparent);background:color-mix(in srgb,var(--a1) 8%,transparent);border-style:dashed}
.tk-m-hd{display:flex;align-items:center;gap:8px;margin-bottom:6px;font-size:12.5px}
.tk-m-hd .spacer{flex:1}
.tk-m-hd time{color:var(--dim);font-size:11.5px}
.tk-role{font-size:10.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--a5)}
.tk-int{font-size:10.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--a1)}
.tk-m-t{font-size:13.5px;line-height:1.6;word-break:break-word}

/* Lien de contact au pied de page : discret, mais toujours atteignable. */
.foot-lien{color:var(--muted);font-size:12.5px;margin-right:18px}
.foot-lien:hover{color:var(--a2)}

/* Création de salon : le pied du navigateur, et les options d'accès. */
.cb-pied{display:flex;align-items:center;gap:12px;padding:12px 14px;
  border-top:1px solid var(--stroke);flex-wrap:wrap}
.cb-pied .dimc{font-size:11.5px}
.sanc-box input[type=text],.sanc-box input:not([type]),.sanc-box input[type=password]{
  width:100%;margin-top:8px;padding:9px 11px;border-radius:var(--r-s);
  background:var(--glass);border:1px solid var(--stroke);color:var(--txt);font:inherit;
}
.sanc-box input:disabled{opacity:.45}
.cl-acces{display:flex;flex-direction:column;gap:6px;margin-top:10px}
.cl-acces label{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--muted);cursor:pointer}
.cl-acces input:checked + span{color:var(--txt)}
.cl-err{min-height:16px;margin-top:8px;color:var(--loss)}

/* Liens et images dans le chat. Une image partagée ne doit jamais pousser le
   salon hors de l'écran : elle est bornée, et un clic ouvre l'original. */
.cl-lien{color:var(--a5);word-break:break-all}
.cl-lien:hover{color:var(--a2);text-decoration:underline}
.cl-medias{display:flex;flex-wrap:wrap;gap:8px;margin-top:6px}
.cl-medias img{
  max-width:min(320px,72vw);max-height:240px;border-radius:10px;
  border:1px solid var(--stroke);background:rgba(0,0,0,.25);display:block;
}
.cl-medias a:hover img{border-color:var(--stroke-2)}

/* Un bloc sans prévision n'a rien à dire : une ligne suffit. */
.pv-bloc.vide{padding:10px 0}
.pv-bloc.vide .pv-hd{margin-bottom:0}
.pv-k i{font-style:normal;font-size:11.5px;color:var(--dim)}

/* ---------------- championnat ---------------- */
.coupe{vertical-align:-3px;margin-right:8px;color:var(--a2)}
.ch-t td.ch-r{font-family:var(--mono);color:var(--muted);width:56px}
.ch-j{display:flex;align-items:center;gap:7px;min-width:0}
.ch-j a{color:var(--txt)}
.ch-j a:hover{color:var(--a2)}
/* Un joueur retiré du circuit reste consultable, mais ne doit pas se lire
   comme un joueur en activité. */
tr.ch-off{opacity:.55}
.ch-inact{font-size:10.5px;color:var(--dim);border:1px solid var(--stroke);
  border-radius:999px;padding:0 7px}
.ch-chk{display:flex;align-items:center;gap:7px;font-size:12.5px;color:var(--muted);
  cursor:pointer;white-space:nowrap;margin-left:12px}
.pager{display:flex;align-items:center;justify-content:center;gap:14px;margin-top:14px;
  color:var(--muted);font-size:13px}

/* ---------------- sélecteur de GIF ---------------- */
.chat-gif{
  flex:none;padding:0 12px;height:38px;border-radius:10px;cursor:pointer;
  background:var(--glass);border:1px solid var(--stroke);color:var(--muted);
  font-family:var(--mono);font-size:11.5px;font-weight:700;letter-spacing:.06em;
}
.chat-gif:hover{background:var(--glass-2);color:var(--txt)}
.gif-panneau{
  margin:0 10px 8px;border-radius:var(--r-m);overflow:hidden;
  background:rgba(10,8,14,.9);border:1px solid var(--stroke-2);
  backdrop-filter:blur(18px);
}
.gif-hd{display:flex;align-items:center;gap:8px;padding:8px 10px;border-bottom:1px solid var(--stroke)}
.gif-hd input{
  flex:1;padding:7px 10px;border-radius:var(--r-s);font:inherit;font-size:13px;
  background:var(--glass);border:1px solid var(--stroke);color:var(--txt);
}
/* Une grille dense : on choisit un GIF à l'œil, pas au titre. */
.gif-zone{
  display:grid;gap:6px;grid-template-columns:repeat(auto-fill,minmax(96px,1fr));
  max-height:240px;overflow-y:auto;padding:8px;
}
.gif-v{padding:0;border:1px solid var(--stroke);border-radius:8px;overflow:hidden;
  background:rgba(0,0,0,.3);cursor:pointer;aspect-ratio:1;}
.gif-v img{width:100%;height:100%;object-fit:cover;display:block}
.gif-v:hover{border-color:var(--a2)}
.ch-src{font-size:12px;color:var(--dim);margin-left:10px}
.ch-src:hover{color:var(--a2)}

/* Section en construction : sobre, centrée, sans faux contenu. */
.chantier{text-align:center;padding:56px 24px}
.chantier-ic{color:var(--a2);opacity:.55;margin-bottom:14px}
.chantier h2{font-size:20px;margin-bottom:6px}
.chantier p{color:var(--muted);font-size:14px}

/* Niveau d'un tournoi : quatre paliers, du plus prestigieux au plus modeste. */
.tier{display:inline-block;padding:1px 8px;border-radius:999px;font-size:11px;
  font-weight:600;border:1px solid var(--stroke-2);color:var(--muted)}
.tier.t-s{color:var(--a2);border-color:color-mix(in srgb,var(--a2) 50%,transparent);background:color-mix(in srgb,var(--a2) 12%,transparent)}
.tier.t-a{color:var(--a5);border-color:rgba(74,168,255,.45);background:rgba(74,168,255,.10)}
.tier.t-b{color:var(--a4);border-color:rgba(49,208,170,.4)}
.tier.t-c{color:var(--dim)}

/* Nomination d'un modérateur : recherche, résultats, action. */
.st-nom{padding:10px 14px 14px}
.st-nom input{
  width:100%;padding:9px 11px;border-radius:var(--r-s);font:inherit;font-size:13px;
  background:var(--glass);border:1px solid var(--stroke);color:var(--txt);
}
.st-nom .dimc{font-size:11.5px;margin-top:10px;display:block}
.st-res{margin-top:8px;max-height:230px;overflow-y:auto}
.st-nom-salon{display:flex;gap:8px;margin-top:10px}.st-nom-salon select{flex:0 0 auto;max-width:46%;background:rgba(255,255,255,.06);color:inherit;border:1px solid rgba(255,255,255,.14);border-radius:8px;padding:6px 8px;font:inherit}
.st-nom-salon input{flex:1 1 auto;min-width:0}.st-l code{font-size:11.5px;opacity:.85}
.st-l{display:flex;align-items:center;gap:10px;padding:7px 2px;
  border-bottom:1px solid rgba(255,255,255,.05);font-size:13px}
.st-n{flex:1;min-width:0;display:flex;align-items:center;gap:6px;overflow:hidden}
.st-ret{
  padding:3px 10px;border-radius:999px;cursor:pointer;font:inherit;font-size:11.5px;
  background:rgba(255,95,109,.12);border:1px solid rgba(255,95,109,.35);color:var(--loss);
}
.st-ret:hover{background:rgba(255,95,109,.22)}

/* Page figée le temps d'un choix dans une liste déroulante : le menu est en
   position fixe, le laisser flotter au-dessus d'une page qui défile donnait
   l'impression qu'il se décrochait. */
body.sel-ouvert{overflow:hidden}

/* Pastille des tickets en attente : discrète, mais impossible à manquer. */
.me-tk{position:relative}
.me-pastille{
  position:absolute;top:-6px;right:-7px;min-width:16px;height:16px;padding:0 4px;
  border-radius:999px;background:var(--a1);color:#1a1008;
  font-family:var(--mono);font-size:10px;font-weight:800;font-style:normal;
  display:grid;place-items:center;box-shadow:0 2px 8px -2px color-mix(in srgb,var(--a1) 80%,transparent);
}

/* ===================== championnats maison + bandeau live ================= */

.cm-wrap .panel { margin-bottom: 16px }
.cm-pitch { margin: 2px 0 14px; color: var(--muted); font-size: 13.5px; line-height: 1.55 }

/* Toutes les cartes font la même taille, bannière ou pas, description ou pas :
   une grille où chaque tuile a sa hauteur donne une liste en escalier, et on ne
   compare plus rien. La bannière absente devient une plage sourde avec la
   coupe ; la description occupe deux lignes même vide ; le pied est collé en
   bas. */
.cm-grille {
  display: grid; gap: 12px;
  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
  grid-auto-rows: 1fr;
}
.cm-cell { position: relative; display: flex }
.cm-carte { flex: 1 }
/* L'invitation Discord est un lien À CÔTÉ de la carte, pas dedans : un lien
   dans un lien n'est pas du HTML valide. */
.cm-dc {
  position: absolute; top: 8px; right: 8px; z-index: 2;
  width: 28px; height: 28px; border-radius: 9px; display: grid; place-items: center;
  color: #fff; background: rgba(88,101,242,.92);
  box-shadow: 0 2px 8px rgba(0,0,0,.35);
}
.cm-dc:hover { background: #5865f2; transform: translateY(-1px) }
.chip.discord { display: inline-flex; align-items: center; gap: 6px; color: #aab4ff }
.cm-carte {
  display: flex; flex-direction: column; overflow: hidden;
  border: 1px solid var(--line); border-radius: 14px; background: var(--panel2);
  text-decoration: none; color: inherit;
  transition: border-color .15s, transform .15s, box-shadow .15s;
}
.cm-carte:hover {
  border-color: var(--a1); transform: translateY(-2px);
  box-shadow: 0 8px 22px rgba(0, 0, 0, .28);
}
.cm-banniere {
  display: block; height: 96px; background-size: cover; background-position: center;
  border-bottom: 1px solid var(--line); flex: none;
}
.cm-banniere.vide {
  display: grid; place-items: center; color: var(--dim);
  background: linear-gradient(140deg, var(--panel), var(--panel2));
}
.cm-b-vide { opacity: .5 }
.cm-corps { flex: 1 }
.cm-desc { min-height: 2.6em }
.cm-pied { margin-top: auto }
.cm-banniere.grande { height: 150px; border-radius: 12px; margin-bottom: 14px; border: 1px solid var(--line) }
.cm-corps { display: flex; flex-direction: column; gap: 6px; padding: 12px 13px 13px }
.cm-hd { display: flex; align-items: center; gap: 8px; flex-wrap: wrap }
.cm-type { font-size: 11.5px; color: var(--dim); text-transform: uppercase; letter-spacing: .04em }
.cm-nom { font-size: 15.5px; line-height: 1.3 }
.cm-desc {
  color: var(--muted); font-size: 13px; line-height: 1.5;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
.cm-desc.grande { -webkit-line-clamp: 4; margin: 0 0 12px }
.cm-pied {
  display: flex; gap: 12px; flex-wrap: wrap; margin-top: 4px;
  font-size: 12px; color: var(--dim);
}
.cm-quand { color: var(--a2) }

.cm-tete .head { margin-bottom: 6px }
.cm-liens { display: flex; gap: 8px; flex-wrap: wrap; margin: 12px 0 0 }
.cm-liens .chip.live { border-color: var(--a1); color: var(--a1) }

.cm-etiq {
  display: flex; flex-direction: column; gap: 6px; margin-top: 14px;
  padding: 12px 14px; border: 1px dashed var(--a2);
  border-radius: 12px; background: color-mix(in srgb, var(--a2) 7%, transparent);
}
.cm-etiq b { font-size: 12.5px; color: var(--a2) }
.cm-etiq code {
  align-self: flex-start; font-size: 15px; letter-spacing: .06em;
  padding: 5px 11px; border-radius: 8px; background: var(--panel2);
  border: 1px solid var(--line); user-select: all;
}
.cm-etiq span { font-size: 12.5px; color: var(--muted); line-height: 1.5 }
.cm-etiq-l { display: flex; align-items: center; gap: 10px; flex-wrap: wrap }

/* Rattachement à la main : même boîte que l'étiquette, en sourdine — c'est le
   recours quand on a oublié l'étiquette, pas la marche à suivre habituelle. */
.cm-num {
  display: flex; flex-direction: column; gap: 6px; margin-top: 10px;
  padding: 12px 14px; border: 1px solid var(--stroke);
  border-radius: 12px; background: var(--panel2);
}
.cm-num b { font-size: 12.5px }
.cm-num span { font-size: 12.5px; color: var(--muted); line-height: 1.5 }
.cm-num-l { display: flex; gap: 8px; align-items: center; flex-wrap: wrap }
.cm-num-l input {
  flex: 1 1 180px; min-width: 0; font-size: 15px; letter-spacing: .04em;
  padding: 7px 11px; border-radius: 8px;
  border: 1px solid var(--stroke); background: var(--panel); color: var(--txt);
}

/* ------------------------------------------------------------- schémas ---
   Les dessins de format : tout au trait courant, l'accent pour ce qui gagne.
   Aucune couleur en dur, ils suivent donc le thème comme le reste. */
.cm-schema {
  display: block; width: 100%; max-width: 340px; height: auto; margin: 0 0 12px;
  color: var(--muted);
}
.cm-schema .s-b, .cm-schema .s-vide {
  fill: none; stroke: currentColor; stroke-width: 1.2; opacity: .55;
}
.cm-schema .s-win { fill: currentColor; opacity: .3 }
.cm-schema .s-c { fill: none; stroke: currentColor; stroke-width: 1.2; opacity: .5 }
.cm-schema .s-axe { stroke: currentColor; stroke-width: 1; opacity: .3 }
.cm-schema .s-p { fill: currentColor; opacity: .55 }
.cm-schema circle:not(.s-p) { fill: none; stroke: currentColor; stroke-width: 1.2; opacity: .55 }
.cm-schema .s-l { font-size: 8.5px; fill: currentColor; opacity: .75 }
.cm-schema .s-t { font-size: 7.5px; fill: currentColor; opacity: .8 }
.cm-schema .s-a { color: var(--a2); fill: var(--a2); stroke: var(--a2); opacity: .95 }
.cm-schema text.s-a { stroke: none }
.cm-mode .cm-schema { max-width: 100% }

/* --------------------------------------------------- parties en cours ----
   Un salon ouvert n'est pas une ligne de tableau : on veut voir d'un coup ce
   qui se joue, avec qui, et si le salon est bien monté. */
.ec-liste { display: grid; gap: 10px; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)) }
.ec {
  padding: 12px 14px; border-radius: 13px;
  background: var(--panel2); border: 1px solid var(--stroke);
}
.ec-hd { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-bottom: 6px }
.ec-hd b { font-size: 13.5px }
.ec-champ { display: inline-flex; align-items: center; gap: 5px; font-size: 11.5px; color: var(--a2) }
.ec-etat {
  margin-left: auto; font-size: 11px; padding: 1px 8px; border-radius: 99px;
  background: rgba(126,226,168,.14); color: #7ee2a8;
}
.ec-meta { display: flex; gap: 12px; flex-wrap: wrap; font-size: 12px; color: var(--muted) }
.ec-obs { color: #7ee2a8 }
.ec-verif { display: flex; gap: 6px; flex-wrap: wrap; margin: 8px 0 6px }
.ec-v { font-size: 11px; padding: 2px 8px; border-radius: 99px }
.ec-v.ok { background: rgba(126,226,168,.14); color: #7ee2a8 }
.ec-v.ko { background: rgba(255,120,110,.14); color: #ffb4ab }
.ec-joueurs { display: flex; gap: 6px; flex-wrap: wrap }
.ec-joueurs a {
  font-size: 12px; padding: 2px 8px; border-radius: 8px;
  background: var(--glass-2); color: var(--muted);
}
.ec-joueurs a.in { color: var(--txt); box-shadow: inset 0 0 0 1px var(--a2) }
.ec-joueurs a.faute { box-shadow: inset 0 0 0 1px #ffb4ab; color: #ffb4ab }
.ec-joueurs em { font-style: normal; opacity: .7; font-size: 11px }
.ec-etat.live { background: rgba(240,68,56,.15); color: #ff8a80 }
.ec-etat b { font-variant-numeric: tabular-nums }
/* Le titre exact du salon se copie d'un clic : c'est fait pour être recopié
   dans le jeu, pas pour être lu. */
.rh-titre {
  cursor: pointer; font-size: 11.5px; padding: 2px 7px; border-radius: 7px;
  background: var(--panel2); border: 1px solid var(--stroke); color: var(--muted);
  white-space: nowrap;
}
.rh-titre:hover { color: var(--txt); border-color: var(--a2) }
.df-l b code + .btn-mini { margin-left: 8px }
.dock-direct .dock-n {
  position: absolute; top: 2px; right: 6px; font-style: normal; font-size: 9.5px;
  min-width: 15px; height: 15px; padding: 0 4px; border-radius: 99px;
  display: grid; place-items: center; background: #f04438; color: #fff; font-weight: 700;
}
/* Une civilisation interdite dans un salon ouvert : c'est le seul moment où
   ça se rattrape encore, donc ça se voit. */
.ec-alerte { display: flex; flex-direction: column; gap: 3px; margin: 6px 0 }
/* Les étapes d'un salon : une coche verte par chose faite, une croix et le
   geste à faire pour le reste. On lit la colonne, on corrige, on lance. */
.ec-etapes { display: flex; flex-direction: column; gap: 3px; margin: 9px 0 7px }
.ee { display: flex; gap: 8px; align-items: baseline; font-size: 12px; line-height: 1.45 }
.ee-p { flex: none; width: 14px; text-align: center; font-weight: 700 }
.ee.ok { color: var(--muted) }
.ee.ok .ee-p { color: #4ade80 }
.ee.ko { color: #ffb4ab }
.ee.ko .ee-p { color: #ffb4ab }
.ee-fin {
  margin-top: 5px; font-size: 11.5px; padding: 3px 9px; border-radius: 8px;
  align-self: flex-start; background: rgba(126,226,168,.14); color: #7ee2a8;
}
/* Un tirage suivi depuis la salle : cliquable en entier. */
.ec.dr { cursor: pointer; transition: border-color .18s, transform .18s }
.ec.dr:hover { border-color: var(--a2); transform: translateY(-2px) }
.ec.dr:focus-visible { outline: 2px solid var(--a2); outline-offset: 2px }
.dr-l { display: flex; gap: 6px; align-items: baseline; flex-wrap: wrap; margin-top: 7px }
.dr-l > span {
  font-size: 11px; letter-spacing: .06em; text-transform: uppercase; color: var(--dim);
  min-width: 56px;
}
.dr-l em {
  font-style: normal; font-size: 11.5px; padding: 2px 8px; border-radius: 99px;
  background: var(--glass-2); color: var(--muted);
}
.dr-l em.ko { background: rgba(255,120,110,.14); color: #ffb4ab; text-decoration: line-through }
.dr-l em.ok { background: rgba(126,226,168,.14); color: #7ee2a8 }
.dr-voir { margin-top: 9px; font-size: 11.5px; color: var(--a2) }
.ec-alerte span {
  font-size: 11.5px; padding: 3px 9px; border-radius: 8px;
  background: rgba(255,120,110,.14); color: #ffb4ab;
}
.df-codes { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; margin-top: 10px }
.df-codes input {
  flex: 1 1 140px; min-width: 0; font-size: 13px; padding: 6px 10px; border-radius: 8px;
  border: 1px solid var(--stroke); background: var(--panel); color: var(--txt);
}
.df-pub { display: inline-flex; align-items: center; gap: 5px; font-size: 12px; color: var(--muted) }
.ec-dot {
  display: inline-block; width: 8px; height: 8px; border-radius: 50%; margin-right: 8px;
  background: #f04438; box-shadow: 0 0 0 3px rgba(240,68,56,.2);
  animation: ecPulse 1.8s ease-in-out infinite;
}
@keyframes ecPulse { 50% { opacity: .35 } }
@media (prefers-reduced-motion: reduce) { .ec-dot { animation: none } }

/* Choix des civilisations interdites : une grille de blasons qu'on éteint. */
.cm-civs { display: grid; gap: 6px; grid-template-columns: repeat(auto-fill, minmax(104px, 1fr)) }
.cm-civ {
  display: flex; align-items: center; gap: 7px; padding: 6px 8px; border-radius: 10px;
  background: var(--panel2); border: 1px solid var(--stroke); color: var(--muted);
  font-size: 11.5px; cursor: pointer; text-align: left; line-height: 1.2;
}
.cm-civ:hover { border-color: var(--a1) }
.cm-civ.on { color: #ffb4ab; border-color: rgba(255,120,110,.45); background: rgba(255,120,110,.10) }
.cm-civ.on span { text-decoration: line-through }
.cm-maps { display: grid; gap: 10px; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)) }
/* Un nombre et son unité : sans elle, « 3 » ne veut rien dire. */
/* Les règles se modifient après coup, mais repliées : la fiche n'est pas un
   formulaire, on l'ouvre quand on veut changer quelque chose. */
.cm-reglages {
  margin-top: 14px; padding: 12px 14px; border-radius: 12px;
  background: var(--panel2); border: 1px solid var(--stroke);
}
.cm-reglages > summary { cursor: pointer; font-size: 13px; font-weight: 600 }
.cm-reglages[open] > summary { margin-bottom: 12px }
.cm-reglages label { display: flex; flex-direction: column; gap: 4px; font-size: 12.5px; color: var(--muted) }
.cm-reglages input, .cm-reglages select {
  background: var(--panel); border: 1px solid var(--stroke); color: var(--txt);
  border-radius: 9px; padding: 7px 10px; font: inherit; font-size: 13.5px; width: 100%;
}
.cm-reglages .cm-duree select { width: auto }

.cm-duree { display: flex; gap: 8px }
.cm-duree input { flex: 1 1 auto; min-width: 0 }
.cm-duree select { flex: 0 0 auto; width: auto }
/* Raccourcis de date : trois boutons valent mieux qu'un calendrier. */
.cm-vite { display: flex; gap: 6px; flex-wrap: wrap; margin-top: 6px }
.cm-vite button {
  font: inherit; font-size: 11.5px; padding: 3px 9px; border-radius: 99px; cursor: pointer;
  background: var(--glass-2); border: 1px solid var(--stroke); color: var(--muted);
}
.cm-vite button:hover { color: var(--txt); border-color: var(--a1) }
.cm-dit { color: var(--a2); font-size: 12px; min-height: 1em }
.cm-aide { display: block; margin-top: 6px; font-size: 12px; color: var(--muted); line-height: 1.5 }
.cm-case { display: flex; gap: 10px; align-items: flex-start; margin: 12px 0; font-size: 13px }
.cm-case input { margin-top: 3px; flex: none }
.cm-case small { display: block; color: var(--muted); font-size: 12px; margin-top: 2px }

/* L'adversaire est là : on ne fait pas chercher le bouton. */
.cm-invite {
  display: flex; align-items: center; gap: 12px; flex-wrap: wrap;
  border-color: rgba(126,226,168,.35); background: rgba(126,226,168,.07);
}
.cm-invite b { font-size: 13.5px }

/* Le salon du championnat, embarqué sur sa fiche. Volontairement compact : il
   accompagne la page, il ne la remplace pas — « ouvrir en grand » mène au chat
   complet. */
/* Assez grand pour suivre une conversation, pas au point d'avaler la page :
   le fil et la liste des présents côte à côte, empilés sur téléphone. */
.ce-corps { display: grid; grid-template-columns: 1fr 168px; gap: 10px }
.ce-log {
  height: 380px; overflow-y: auto; padding: 9px 11px; border-radius: 11px;
  background: var(--panel2); border: 1px solid var(--stroke);
  display: flex; flex-direction: column; gap: 3px;
}
.ce-gens {
  height: 380px; overflow-y: auto; padding: 9px 10px; border-radius: 11px;
  background: var(--panel2); border: 1px solid var(--stroke);
}
.ce-gens-t {
  font-size: 10.5px; letter-spacing: .08em; text-transform: uppercase; color: var(--dim);
  margin-bottom: 7px; display: flex; justify-content: space-between; align-items: baseline;
}
.ce-gens-t b { color: var(--a2); font-size: 12px }
.ce-g { padding: 2px 0; font-size: 12.5px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis }
@media (max-width: 720px) {
  .ce-corps { grid-template-columns: 1fr }
  .ce-gens { height: auto; max-height: 150px }
  .ce-log { height: 300px }
}
.ce-form { display: flex; gap: 8px; margin-top: 9px }
.ce-form input {
  flex: 1; min-width: 0; font: inherit; font-size: 13.5px; padding: 8px 11px;
  border-radius: 9px; border: 1px solid var(--stroke); background: var(--panel2); color: var(--txt);
}
.ce-etat { font-size: 11.5px }
.ce-etat.ok { color: #7ee2a8 }
.ce-etat.ko { color: var(--dim) }
.ce-vide .sub { color: var(--muted); font-size: 13px }

.cm-poule { margin-bottom: 14px }
.cm-poule-t {
  font-size: 11.5px; letter-spacing: .08em; text-transform: uppercase;
  color: var(--a2); margin: 0 0 6px 2px;
}

.cm-actions { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin-top: 14px }

/* Supprimer n'est pas une action comme une autre : le bouton le dit. */
.cm-actions .ghost.danger { color: #ffb4ab; border-color: rgba(255,120,110,.35) }
.cm-actions .ghost.danger:hover { background: rgba(255,120,110,.12) }

/* Rencontres : l'heure proposée reste pâle tant qu'elle n'est pas confirmée. */
.cm-vs { color: var(--dim); font-size: 12px; margin: 0 6px }
.cm-gagne { color: #7ee2a8; font-weight: 600 }
.rh-saisie { display: inline-flex; gap: 6px; align-items: center; flex-wrap: wrap }
.rh-saisie input {
  font: inherit; font-size: 12.5px; padding: 4px 8px; border-radius: 8px;
  border: 1px solid var(--stroke); background: var(--panel2); color: var(--txt);
  color-scheme: dark light;
}
.cm-prop { color: var(--muted); font-style: italic }
.cm-ok { color: #7ee2a8 }
.cm-ecart {
  margin-left: 6px; padding: 1px 7px; border-radius: 99px; font-size: 11px;
  color: #ffb4ab; background: rgba(255,120,110,.14);
}
tr.jouee { opacity: .75 }

/* ------------------------------------------------------- bannissement ----
   Plein écran, sombre, et une grille de blasons : on doit voir d'un coup
   d'œil ce qui reste et ce qui est tombé, à trois mètres d'un écran de
   stream comme sur un téléphone. */
.draft {
  position: fixed; inset: 0; z-index: 90; display: grid; place-items: center;
  padding: 16px; background: rgba(6,6,9,.72); backdrop-filter: blur(7px);
}
.draft-panel {
  width: min(920px, 100%); max-height: 92vh; overflow: auto;
  background: var(--panel); border: 1px solid var(--stroke);
  border-radius: 18px; padding: 16px 18px 18px;
  box-shadow: 0 30px 80px rgba(0,0,0,.55);
}
.draft-hd { display: flex; align-items: center; gap: 14px; margin-bottom: 14px }
.draft-hd b { font-size: 15px; display: block }
.draft-hd span { font-size: 12px; color: var(--muted) }
.draft-tour {
  margin-left: auto; display: flex; align-items: center; gap: 10px;
  font-size: 13px; font-weight: 600; color: var(--muted);
}
.draft-tour.moi { color: #7ee2a8 }

/* Qui est là. Le point vert n'est pas décoratif : sans les deux, rien ne part
   et le compte à rebours ne tourne pas. */
.draft-duo { display: flex; gap: 14px; margin-top: 8px; flex-wrap: wrap }
.draft-pres { display: inline-flex; align-items: center; gap: 6px; font-size: 12px; color: var(--muted) }
.draft-pres i {
  width: 7px; height: 7px; border-radius: 50%; background: var(--dim);
  box-shadow: none; flex: none;
}
.draft-pres.on { color: var(--txt) }
.draft-pres.on i { background: #4ade80; box-shadow: 0 0 0 3px rgba(74,222,128,.18) }
.draft-pres em { font-style: normal; font-size: 11px; color: var(--dim) }
.draft-pres.on em { color: #4ade80 }
.draft-tour i {
  font-style: normal; font-variant-numeric: tabular-nums; font-size: 20px;
  min-width: 2.2ch; text-align: center; padding: 2px 8px; border-radius: 9px;
  background: var(--panel2); border: 1px solid var(--stroke); color: var(--txt);
}
.draft-grille {
  display: grid; gap: 8px;
  grid-template-columns: repeat(auto-fill, minmax(112px, 1fr));
}
.draft-civ {
  display: flex; flex-direction: column; align-items: center; gap: 5px;
  padding: 10px 6px; border-radius: 12px; cursor: pointer;
  background: var(--panel2); border: 1px solid var(--stroke); color: var(--txt);
  font-size: 12px; line-height: 1.25; text-align: center;
  transition: background .18s, border-color .18s, transform .18s;
}
.draft-civ:not([disabled]):hover {
  background: var(--glass-hi); border-color: var(--a1); transform: translateY(-2px);
}
.draft-civ[disabled] { cursor: default }
.draft-civ.bannie { opacity: .42 }
.draft-civ.bannie span { text-decoration: line-through }
.draft-civ.choisie { opacity: 1; border-color: #7ee2a8; background: rgba(126,226,168,.10) }
.draft-civ em.ok { color: #7ee2a8 }
.draft-civ em { font-style: normal; font-size: 10.5px; color: #ffb4ab }
.draft-pied { margin-top: 14px; font-size: 12.5px; color: var(--muted); line-height: 1.5 }
/* Rien ne part avant que les deux ne se soient déclarés prêts. */
.draft-pret {
  display: flex; align-items: center; gap: 14px; flex-wrap: wrap; margin-bottom: 14px;
  padding: 12px 14px; border-radius: 12px;
  background: var(--panel2); border: 1px dashed var(--stroke);
}
.draft-pret p { margin: 0; font-size: 12.5px; color: var(--muted); flex: 1 1 240px; line-height: 1.5 }
/* Les cartes n'ont pas de blason : on leur laisse la place du nom. */
.draft-grille.cartes { grid-template-columns: repeat(auto-fill, minmax(132px, 1fr)) }
.draft-grille.cartes .draft-civ { padding: 13px 8px; font-size: 12.5px }
/* La fiche de fin : ce qu'il faut recopier dans le jeu. */
.draft-fiche {
  margin-top: 14px; padding: 12px 14px; border-radius: 12px;
  background: var(--panel2); border: 1px solid var(--stroke);
}
.draft-fiche > b { display: block; font-size: 13px; margin-bottom: 8px }
.df-l { display: flex; gap: 12px; align-items: baseline; font-size: 12.5px; padding: 3px 0 }
.df-l span { color: var(--muted); min-width: 150px }
.df-l code { font-size: 13px; letter-spacing: .05em }
@media (max-width: 640px) {
  .draft-grille { grid-template-columns: repeat(auto-fill, minmax(92px, 1fr)) }
  .draft-hd { flex-wrap: wrap }
}

.cm-journal { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 9px }
.cm-journal li { display: flex; gap: 10px; align-items: baseline; font-size: 13px; line-height: 1.45 }
.cm-journal time { flex: 0 0 auto; font-size: 11.5px; color: var(--dim); font-variant-numeric: tabular-nums }

.cm-form label { display: flex; flex-direction: column; gap: 4px; margin-bottom: 10px; font-size: 12.5px; color: var(--muted) }
.cm-form input, .cm-form select, .cm-form textarea {
  background: var(--panel2); border: 1px solid var(--line); color: var(--text);
  border-radius: 9px; padding: 8px 10px; font: inherit; font-size: 13.5px; width: 100%;
}
.cm-form input:focus, .cm-form select:focus, .cm-form textarea:focus { outline: none; border-color: var(--a1) }
.cm-form textarea { resize: vertical }
.cm-deux { display: grid; grid-template-columns: 1fr 1fr; gap: 10px }
.cm-form .sanc-box, .sanc-box.cm-form { max-width: 560px; max-height: 88vh; overflow-y: auto }

/* --- le bandeau de l'en-tête : information de coin de l'œil, pas réclame --- */
.tick {
  flex: 1 1 auto; min-width: 0; display: flex; align-items: center;
  justify-content: center; padding: 0 14px; overflow: hidden;
}
.tick:empty { padding: 0 }
.tick-it {
  display: inline-flex; align-items: center; gap: 8px; max-width: 100%;
  padding: 5px 12px; border-radius: 999px; text-decoration: none;
  border: 1px solid var(--line); background: var(--panel2);
  font-size: 12.5px; color: var(--muted); white-space: nowrap;
  animation: tick-in .45s ease both;
}
.tick-it:hover { border-color: var(--a1); color: var(--text) }
.tick-x { overflow: hidden; text-overflow: ellipsis }
.tick-it b { color: var(--text); font-weight: 600 }
.tick-d { flex: 0 0 auto; width: 7px; height: 7px; border-radius: 50%; background: var(--dim) }
.tick-it.live .tick-d { background: #ff5f6d; animation: tick-puls 1.6s ease-in-out infinite }
.tick-it.live b { color: #ff5f6d }
.tick-it.soon .tick-d { background: var(--a2) }
.tick-it.soon b { color: var(--a2) }
.tick-it.up   .tick-d { background: #31d08a }
.tick-it.up   b { color: #31d08a }
.tick-it.dn   .tick-d { background: #ff8a5f }
.tick-it.dn   b { color: #ff8a5f }

@keyframes tick-in  { from { opacity: 0; transform: translateY(-5px) } to { opacity: 1; transform: none } }
@keyframes tick-puls { 0%, 100% { opacity: 1 } 50% { opacity: .35 } }
@media (prefers-reduced-motion: reduce) {
  .tick-it, .tick-it.live .tick-d { animation: none }
}

/* Sur téléphone, l'en-tête n'a plus la place : le bandeau passe sous la
   barre plutôt que d'écraser la recherche et le pseudo. */
@media (max-width: 900px) {
  header.top .wrap { flex-wrap: wrap }
  .tick { order: 9; flex-basis: 100%; justify-content: flex-start; padding: 0 0 8px }
  .cm-deux { grid-template-columns: 1fr }
}

.cm-modes { display: grid; gap: 12px; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)) }
.cm-mode {
  display: flex; flex-direction: column; gap: 7px; padding: 13px 14px;
  border: 1px solid var(--line); border-radius: 13px; background: var(--panel2);
}
.cm-mode-hd { display: flex; align-items: center; gap: 8px; flex-wrap: wrap }
.cm-mode-hd b { font-size: 14px }
.cm-mode p { margin: 0; font-size: 12.8px; line-height: 1.55; color: var(--muted) }
.cm-mode .cm-pour { color: var(--dim); font-style: italic }
.cm-mode-f { font-size: 11.5px; color: var(--dim); margin-top: 2px }
.cm-auto {
  font-size: 10.5px; letter-spacing: .04em; text-transform: uppercase;
  padding: 2px 7px; border-radius: 999px; border: 1px solid var(--line);
}
.cm-auto.oui { color: #31d08a; border-color: color-mix(in srgb, #31d08a 40%, transparent) }
.cm-auto.non { color: var(--a2);  border-color: color-mix(in srgb, var(--a2) 40%, transparent) }
.cm-aide { margin: -4px 0 12px; font-size: 12.3px; line-height: 1.5; color: var(--dim) }

/* --- fiches de mode : une colonne de lecture, pas un mur de texte -------- */
.cm-modes { grid-template-columns: repeat(auto-fit, minmax(330px, 1fr)) }
.cm-mode { gap: 0 }
.cm-mode-hd { margin-bottom: 9px }
.cm-mode-hd .cm-mode-f { margin: 0 }
.cm-mode-hd b { margin-right: 2px }
.cm-quoi { margin: 0 0 11px; font-size: 13.2px; line-height: 1.6; color: var(--text) }
.cm-l { display: flex; flex-direction: column; gap: 2px; padding: 7px 0; border-top: 1px solid var(--line) }
.cm-l > span {
  font-size: 10.5px; letter-spacing: .05em; text-transform: uppercase; color: var(--dim);
}
.cm-l p { margin: 0; font-size: 12.6px; line-height: 1.55; color: var(--muted) }
.cm-l.gare > span { color: var(--a2) }
.cm-ex {
  display: flex; gap: 7px; align-items: baseline; margin-top: 10px; padding-top: 9px;
  border-top: 1px dashed var(--line); font-size: 12.4px; line-height: 1.5; color: var(--dim);
}
.cm-ex > span {
  flex: 0 0 auto; font-size: 10.5px; letter-spacing: .05em; text-transform: uppercase;
  color: var(--a1);
}
.cm-aide b { color: var(--muted); font-weight: 600 }

/* Badge de modération : visible, mais sous le nom, pas à sa place. */
.pl-modo {
  display: inline-flex; align-items: center; gap: 5px; margin: 2px 0 4px;
  padding: 3px 9px; border-radius: 999px; font-size: 11.5px; letter-spacing: .02em;
  color: #4aa8ff; border: 1px solid color-mix(in srgb, #4aa8ff 40%, transparent);
  background: color-mix(in srgb, #4aa8ff 10%, transparent);
}

/* --- page de création : le formulaire à gauche, le résultat à droite ------ */
.cm-creer { display: grid; grid-template-columns: minmax(0, 1.55fr) minmax(0, 1fr); gap: 16px; align-items: start }
.cm-col { display: flex; flex-direction: column; gap: 16px; min-width: 0 }
.cm-apercu { position: sticky; top: 78px }

.cm-ch { display: flex; flex-direction: column; gap: 5px; margin-bottom: 13px; font-size: 12.8px; color: var(--muted) }
.cm-ch:last-child { margin-bottom: 0 }
.cm-ch small { font-size: 11.8px; line-height: 1.45; color: var(--dim) }
.cm-ch input, .cm-ch select, .cm-ch textarea {
  background: var(--panel2); border: 1px solid var(--line); color: var(--text);
  border-radius: 10px; padding: 9px 11px; font: inherit; font-size: 13.8px; width: 100%;
}
.cm-ch input:focus, .cm-ch select:focus, .cm-ch textarea:focus { outline: none; border-color: var(--a1) }
.cm-ch textarea { resize: vertical; line-height: 1.5 }
.cm-ch select:disabled, .cm-ch input:disabled { opacity: .45; cursor: not-allowed }
.cm-note { margin: 0 0 12px; font-size: 12.6px; line-height: 1.5; color: var(--dim) }

.cm-choix { display: flex; flex-direction: column; gap: 8px; margin-bottom: 14px }
.cm-opt {
  display: grid; grid-template-columns: auto 1fr auto; align-items: center; gap: 8px 10px;
  padding: 11px 13px; border: 1px solid var(--line); border-radius: 12px;
  background: var(--panel2); cursor: pointer; transition: border-color .15s, background .15s;
}
.cm-opt:hover { border-color: color-mix(in srgb, var(--a1) 55%, transparent) }
.cm-opt.on { border-color: var(--a1); background: color-mix(in srgb, var(--a1) 8%, transparent) }
.cm-opt input { accent-color: var(--a1); width: 15px; height: 15px; margin: 0 }
.cm-opt b { font-size: 13.8px; color: var(--text) }
.cm-opt em { grid-column: 2 / -1; font-style: normal; font-size: 12.2px; color: var(--dim); line-height: 1.45 }

.cm-fiche { padding: 12px 14px; border: 1px solid var(--line); border-radius: 12px; background: var(--panel2) }
.cm-fiche .cm-quoi { margin: 0 0 9px }
.cm-fiche .cm-l:first-of-type { border-top: 0; padding-top: 0 }

.cm-envoi { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; justify-content: flex-end }
.cm-envoi .cl-err { margin: 0 auto 0 0; color: #ff6b6b; font-size: 13px }
.cm-envoi .go, .cm-envoi .ghost { text-decoration: none }

.cm-rappel ol { margin: 0 0 10px; padding-left: 20px; display: flex; flex-direction: column; gap: 8px }
.cm-rappel li { font-size: 12.8px; line-height: 1.55; color: var(--muted) }
.cm-rappel code { padding: 1px 6px; border-radius: 6px; background: var(--panel2); border: 1px solid var(--line) }
.cm-rappel p { margin: 0; font-size: 12.8px; color: var(--a2) }
.cm-apercu .cm-carte { cursor: default }
.cm-apercu .cm-carte:hover { transform: none; border-color: var(--line); box-shadow: none }

@media (max-width: 1100px) {
  .cm-creer { grid-template-columns: 1fr }
  .cm-apercu { position: static; order: -1 }
}

/* --- onglets de la section championnat ---------------------------------- */
.cm-onglets {
  display: flex; gap: 6px; margin-bottom: 16px; padding: 4px;
  border: 1px solid var(--line); border-radius: 14px; background: var(--panel2);
  overflow-x: auto; scrollbar-width: none;
}
.cm-onglets::-webkit-scrollbar { display: none }
.cm-onglets a {
  flex: 0 0 auto; padding: 8px 16px; border-radius: 10px; text-decoration: none;
  font-size: 13.5px; color: var(--muted); white-space: nowrap;
  transition: background .15s, color .15s;
}
.cm-onglets a:hover { color: var(--text); background: color-mix(in srgb, var(--text) 6%, transparent) }
.cm-onglets a.on {
  color: var(--text); background: color-mix(in srgb, var(--a1) 16%, transparent);
  box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--a1) 45%, transparent);
}
.cm-pitch a { color: var(--a1); text-decoration: none; white-space: nowrap }
.cm-pitch a:hover { text-decoration: underline }

/* Un tableau ne défile qu'en largeur. `overflow-x:auto` seul forçait aussi
   `overflow-y:auto` : chaque tableau devenait un conteneur de défilement
   vertical, et la molette posée dessus s'adressait à lui — qui n'avait rien à
   faire défiler — au lieu de la page. Résultat : une page figée partout où il
   y a un tableau. On rend la verticale explicitement visible, et on laisse la
   chaîne de défilement remonter à la page. */
.tbl-wrap{overflow-y:visible;overscroll-behavior-y:auto}

/* Bandeau « en partie » de la fiche joueur : même tableau que les matchs,
   liseré animé pour dire que ça bouge. */
.pl-live{margin-bottom:16px;border-color:color-mix(in srgb,#31d08a 45%,var(--line))}
.pl-live .head h2{display:flex;align-items:center;gap:8px}
.pl-live .dl-chrono{font-variant-numeric:tabular-nums;color:#31d08a}

/* Ligne « en cours » dans un tableau de matchs : un liseré vert discret et
   une pastille qui bat, pour dire que ça bouge sans crier. */
tr.en-cours td{background:color-mix(in srgb,#31d08a 6%,transparent)}
tr.en-cours td:first-child{box-shadow:inset 3px 0 0 #31d08a}
tr.en-cours .dl-chrono{font-variant-numeric:tabular-nums;color:#31d08a;font-weight:600}
.chip.encours{border-color:color-mix(in srgb,#31d08a 55%,transparent);color:#31d08a}

/* Tableau des matchs : les camps dabord. La date et la carte saccaparaient
   la largeur et ne laissaient que 69 px aux pseudos, coupés à deux lettres.
   Les camps ont désormais une largeur plancher ; si le tableau déborde, il
   défile dans son cadre — un nom entier qui défile vaut mieux quun nom coupé. */

/* Tableau des matchs : les camps d'abord. La date et la carte s'accaparaient
   la largeur et ne laissaient que 69 px aux pseudos, coupés à deux lettres.
   Les camps ont désormais une largeur plancher ; si le tableau déborde, il
   défile dans son cadre — un nom entier qui défile vaut mieux qu'un nom coupé. */
.match-t td.lu{min-width:150px}
.match-t td.lu .row a{overflow:visible;text-overflow:clip;white-space:nowrap}
.match-t td.dt{white-space:normal;max-width:92px;line-height:1.25}
.match-t td.mapc{max-width:120px;white-space:normal;line-height:1.25}
@media(min-width:1500px){ .match-t td.lu{min-width:190px} }

/* Liste des présents : un pseudo trop long pour la colonne passe à la ligne
   dans sa propre case — on ne coupe rien, et la colonne ne déborde jamais
   horizontalement (c'est ce qui faisait apparaître une barre de défilement). */
.chat-users{overflow-x:hidden}
.chat-users .cu{max-width:100%;min-width:0}
.chat-users .cu .cr-nick{display:flex;flex-wrap:wrap;white-space:normal;max-width:100%;min-width:0}
.chat-users .cu .cr-nick a{min-width:0;overflow-wrap:anywhere;word-break:break-word;
  white-space:normal;line-height:1.25}
/* Même règle partout où un pseudo vit dans une case étroite : salons, DM. */
.cb-name,.dm-nick{min-width:0;overflow-wrap:anywhere;word-break:break-word;white-space:normal}
/* Dans le fil des messages, le pseudo garde sa ligne mais peut se replier au
   lieu de pousser le message hors du cadre. */
.cl-msg .cr-nick{white-space:normal;flex-wrap:wrap}
.cl-msg .cr-nick a{overflow-wrap:anywhere;word-break:break-word}
/* Le badge (ADMIN/MOD/BOT) reste collé au pseudo : seule la fin d un pseudo
   trop long se replie, pas le badge. */
.chat-users .cu .cr-nick .cr-badge{flex:none}
.chat-users .cu .cr-nick > img,.chat-users .cu .cr-nick > .cr-tier{flex:none}
.ct-op.salon{border-color:color-mix(in srgb,var(--a2) 50%,transparent);color:var(--a2)}
.cl-chk{display:flex;gap:8px;align-items:flex-start;font-size:12.5px;color:var(--muted);margin:6px 0}

/* Fenêtres du chat : les libellés des options sont des phrases, pas des
   en-têtes — la règle générique du `.sanc-box label` (majuscules espacées,
   bloc) les rendait illisibles et désalignées. */
.sanc-box .cl-acces label,.sanc-box .cl-chk{display:flex;align-items:flex-start;gap:10px;
  text-transform:none;letter-spacing:0;font-weight:500;font-size:13.5px;line-height:1.45;
  color:var(--muted);padding:9px 11px;border:1px solid var(--line);border-radius:10px;
  background:var(--panel2);cursor:pointer;margin:0}
.sanc-box .cl-acces label:has(input:checked){border-color:var(--a1);color:var(--text);
  background:color-mix(in srgb,var(--a1) 8%,transparent)}
.sanc-box .cl-acces input,.sanc-box .cl-chk input{margin:2px 0 0;accent-color:var(--a1);flex:none;width:15px;height:15px}
.sanc-box .cl-acces{gap:8px;margin:12px 0}
.sanc-box input[type=text],.sanc-box input[type=password],.sanc-box input:not([type]){margin-bottom:8px}

/* Aide Discord repliée : on la lit si on en a besoin, elle n'alourdit pas le formulaire. */
.cm-discord-aide{margin-top:10px;border:1px solid var(--line);border-radius:12px;background:var(--panel2);padding:0 14px}
.cm-discord-aide summary{cursor:pointer;padding:11px 0;font-size:13px;color:var(--a2);list-style:none}
.cm-discord-aide summary::before{content:'▸ ';color:var(--dim)}
.cm-discord-aide[open] summary::before{content:'▾ '}
.cm-discord-aide ol{margin:0 0 10px;padding-left:20px;display:flex;flex-direction:column;gap:6px}
.cm-discord-aide li,.cm-discord-aide p{font-size:12.8px;line-height:1.55;color:var(--muted)}
.cm-discord-aide p{margin:0 0 10px}
.cm-discord-aide code{padding:1px 6px;border-radius:6px;background:var(--panel);border:1px solid var(--line);font-size:12px}

/* Candidatures à valider : en tête de la liste des participants, bien visibles. */
.cm-candidats{display:flex;flex-direction:column;gap:8px;margin-bottom:14px;padding:12px 14px;border:1px dashed var(--a2);border-radius:12px;background:color-mix(in srgb,var(--a2) 7%,transparent)}
.cm-candidats > b{font-size:12.5px;color:var(--a2)}
.cm-cand{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.cm-cand .c-pl{flex:1 1 auto;min-width:0;display:flex;gap:8px;align-items:baseline}
.cm-cand .go,.cm-cand .ghost{padding:6px 12px;font-size:12.5px}
.cm-compte{font-variant-numeric:tabular-nums;color:var(--a2)}
.pv-k i{display:block;font-style:normal;font-size:11.5px;color:var(--dim);margin-top:3px}

/* Coche de salon officiel. */
.cr-verif{color:#4aa8ff;vertical-align:-2px;flex:none}
.cr-hash .cr-verif{display:inline-block}
.cl-msg.hist{opacity:.82}

/* Croix de suppression d'un message : discrète, visible au survol. */
.cl-msg{position:relative}
.cl-suppr{position:absolute;right:6px;top:4px;border:1px solid var(--line);background:var(--panel2);color:var(--dim);
  border-radius:7px;width:22px;height:22px;font-size:12px;line-height:1;cursor:pointer;opacity:0;transition:opacity .12s}
.cl-msg:hover .cl-suppr{opacity:1}
.cl-suppr:hover{color:#ff8a94;border-color:#ff8a94}
@media(hover:none){.cl-suppr{opacity:.6}}
.cb-top10{font-size:13px}

/* Partage du profil. */
.pl-partager{display:inline-flex;align-items:center;gap:7px;margin-top:10px;padding:7px 12px;border-radius:10px;
  border:1px solid var(--line);background:var(--panel2);color:var(--muted);font:inherit;font-size:12.5px;cursor:pointer}
.pl-partager:hover{color:var(--text);border-color:var(--a1)}
.sanc-box.partage{max-width:560px}
.partage-apercu{width:100%;border-radius:10px;border:1px solid var(--line);margin:8px 0 12px;aspect-ratio:1200/630;background:var(--panel2)}
.partage-lien{display:flex;gap:8px;margin-bottom:8px}
.partage-lien input{flex:1;min-width:0;background:var(--panel2);border:1px solid var(--line);color:var(--text);border-radius:9px;padding:8px 10px;font:inherit;font-size:13px}
.partage-reseaux{display:flex;flex-wrap:wrap;gap:8px;margin:12px 0 4px}
.partage-reseaux .ghost{text-decoration:none;font-size:13px;padding:7px 12px}

.partage-reseaux a.ghost,.partage-reseaux button.ghost{display:inline-flex;align-items:center;justify-content:center;
  padding:8px 14px;border:1px solid var(--line);border-radius:10px;background:var(--panel2);color:var(--text);
  font:inherit;font-size:13px;cursor:pointer}
.partage-reseaux a.ghost:hover,.partage-reseaux button.ghost:hover{border-color:var(--a1);color:var(--a1);text-decoration:none}

/* =========================================================================
   Téléphone et tablette : le chat occupe l'écran, lisible au pouce.
   Revue du 23/08 — en-tête compact sur la page du chat, saisie jamais
   coupée, messages sur deux lignes, images contenues, aucune police < 11 px.
   ========================================================================= */
@media (max-width: 640px) {
  /* Sur le chat, l'en-tête rend la place : pas de sélecteur de langue ni de
     bandeau (ils sont à un geste, sur toute autre page). */
  body.route-chat .langsel, body.route-chat #tickerBar { display: none }
  body.route-chat header.top .wrap { padding-top: 8px; padding-bottom: 8px }

  /* La saisie : le champ prend la place, les deux boutons gardent la leur. */
  .chat-input { gap: 8px; align-items: center }
  .chat-input input { flex: 1 1 auto; min-width: 0 }
  .chat-input .chat-gif { flex: none; min-width: 44px; padding: 0 10px }
  .chat-input button.primary { flex: none; width: 46px; min-width: 46px; padding: 0; font-size: 0; position: relative }
  .chat-input button.primary::before {
    content: ''; position: absolute; inset: 0; margin: auto; width: 20px; height: 20px;
    background: currentColor;
    -webkit-mask: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M3 11.5 20.5 3.8c.6-.3 1.2.3.9.9L13.7 22c-.3.6-1.2.5-1.3-.1L11 14 3.1 12.8c-.7-.1-.8-1-.1-1.3z'/></svg>") center/contain no-repeat;
            mask: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M3 11.5 20.5 3.8c.6-.3 1.2.3.9.9L13.7 22c-.3.6-1.2.5-1.3-.1L11 14 3.1 12.8c-.7-.1-.8-1-.1-1.3z'/></svg>") center/contain no-repeat;
  }

  /* Un message : heure et pseudo sur la première ligne, texte en dessous sur
     toute la largeur. Le pseudo ne pousse plus le texte dans le coin. */
  .cl-msg { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 2px 8px; align-items: baseline; font-size: 15px }
  .cl-msg .cl-time { grid-column: 1; font-size: 11.5px }
  .cl-msg .cr-nick { grid-column: 2; justify-content: flex-start; text-align: left; max-width: 100% }
  .cl-msg .cl-text { grid-column: 1 / -1; padding-left: 2px; line-height: 1.45 }
  .cl-msg .cl-suppr { top: 2px }
  .cl-text img, .cl-text video, .cl-img { max-width: 100% !important; height: auto; border-radius: 10px }
  .cl-svc, .cl-sys { font-size: 12.5px }

  /* Aucune police sous 11 px sur un téléphone. */
  .cr-badge, .cu-srv-q, .cr-n, .cb-n, .cb-st, .cm-note, .ct-none { font-size: 11.5px }
  .cb-name em { font-size: 12px }

  /* Les puces d'opérateurs et les boutons de la barre du salon se replient. */
  .ct-ops { flex-wrap: wrap; gap: 6px }
  .ct-op, .ct-bans { min-height: 34px }
}

/* Tablette : deux colonnes suffisent — la liste des présents passe en tiroir. */
@media (min-width: 641px) and (max-width: 1000px) {
  /* Même disposition de message que sur téléphone : heure et pseudo sur la
     première ligne, texte en dessous. Une colonne fixe coupait les pseudos. */
  .cl-msg { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 2px 10px; align-items: baseline }
  .cl-msg .cl-time { grid-column: 1 }
  .cl-msg .cr-nick { grid-column: 2; justify-content: flex-start; text-align: left; max-width: 100% }
  .cl-msg .cl-text { grid-column: 1 / -1; padding-left: 2px }
  .cl-text img, .cl-text video, .cl-img { max-width: min(100%, 420px) !important; height: auto; border-radius: 10px }
}
@media (max-width: 640px) {
  /* Sur le chat, seule la ligne de marque reste : la conversation a l'écran. */
  body.route-chat .userbox, body.route-chat .langsel, body.route-chat #tickerBar { display: none }
  body.route-chat .chat-wrap { height: calc(100dvh - 190px); min-height: 440px }
}
@media (max-width: 640px) {
  body.route-chat main > .wrap { padding-top: 10px }
}
@media (min-width: 641px) and (max-width: 1000px) {
  /* Tablette : mêmes planchers de police que le téléphone. */
  .cl-time { font-size: 11.5px }
  .cr-badge, .cu-srv-q, .cr-n, .cb-n, .cb-st, .cm-note, .ct-none, small { font-size: 11.5px }
}
/* Camps empilés : au-delà de six joueurs, la pile défile dans sa cellule
   plutôt que de faire une ligne de tableau haute comme l écran. */
/* Pas de conteneur de défilement dans une cellule : la molette posée dessus
   doit faire défiler la page. Les joueurs sont répartis sur deux colonnes. */
.match-t .team.pile{padding-right:4px}
.match-t .team.pile .row{line-height:1.35}

/* Alignement des messages (bureau) : le pseudo peut tenir sur deux lignes
   (badge + palier + drapeau + nom long) ; le texte s'aligne alors sur la
   PREMIÈRE ligne du pseudo, pas sur son milieu — sinon il flotte. La colonne
   du pseudo s'élargit un peu, et un nom trop long se replie sans déborder. */
@media (min-width: 1001px) {
  /* Comme sur IRC : l'heure, puis le pseudo collé à l'heure, puis le texte
     collé au pseudo. La colonne du pseudo prend exactement sa largeur (chaque
     message est sa propre grille), un nom très long se replie à 240 px. */
  .cl-msg { grid-template-columns: 34px auto minmax(0, 1fr); align-items: start; gap: 0 8px }
  .cl-msg > * { min-height: 0 }
  .cl-msg .cl-time, .cl-msg .cl-text { padding-top: 1px }
  .cl-msg .cr-nick { align-items: center; flex-wrap: wrap; justify-content: flex-start; text-align: left;
    min-width: 0; max-width: 240px; overflow-wrap: anywhere; word-break: break-word; white-space: normal; row-gap: 2px }
  .cl-msg .cr-nick a { min-width: 0; overflow-wrap: anywhere; text-align: left }
  .cl-msg .cl-text { line-height: 1.5 }
}

/* Message cité dans la fenêtre de suppression. */
.cl-cite{margin:10px 0 0;padding:10px 12px;border-left:3px solid #ff8f7a;border-radius:0 10px 10px 0;
  background:rgba(255,255,255,.05);font-size:13px;line-height:1.45;word-break:break-word;overflow-wrap:anywhere}
.cl-cite b{color:var(--accent);margin-right:6px}
.sanc-box .sub{font-size:13px;color:var(--dim);line-height:1.5;margin:0 0 8px}

/* Bloc « moi » collé en bas de la colonne des salons : la liste défile
   au-dessus, l'identité et les réglages restent visibles entiers. */
@media (min-width: 1001px) {
  .chat-rooms .cr-me { position: sticky; bottom: -10px; margin-bottom: -10px; padding-bottom: 12px;
    background: var(--bg); z-index: 1 }
  .chat-rooms .cr-me::before { content: ''; position: absolute; left: 0; right: 0; top: 0; bottom: 0;
    background: var(--glass); z-index: -1 }
}

/* Tableaux de parties (accueil, direct, profil) : seules les colonnes de
   joueurs ont le droit de passer sur plusieurs lignes — les autres données
   (date, format, carte, durée, ELO, serveur, résultat) restent sur une seule,
   sinon la ligne devient illisible. */
.match-t td.dt, .match-t td.dur, .match-t td.mapc, .match-t td.srv,
.match-t td.elo, .match-t td.num, .match-t td:last-child{white-space:nowrap}

/* (Bloc de largeurs unifié plus haut, 10 colonnes.) */

/* ---------------------------------------------------------- comptes liés -- */
.lies{display:flex;flex-direction:column;gap:6px}
.lie{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:12px;color:var(--txt);
  background:var(--glass-2);border:1px solid var(--stroke)}
.lie:hover{border-color:var(--stroke-2)}
.lie img,.lie .av{width:30px;height:30px;border-radius:9px;flex:none}
.lie-n{display:flex;flex-direction:column;min-width:0;flex:1}
.lie-n b{font-size:13.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.lie-n i{font-style:normal;font-size:11.5px;color:var(--muted)}
.lie-e{font-family:var(--mono);font-size:12.5px;color:var(--a2)}

/* -------------------------------------------------------- profils suivis -- */
.suivis{position:fixed;right:16px;bottom:16px;z-index:69;width:268px;max-width:calc(100vw - 32px);
  background:rgba(20,16,28,.72);border:1px solid var(--stroke-2);border-radius:18px;overflow:hidden;
  backdrop-filter:blur(30px) saturate(200%);-webkit-backdrop-filter:blur(30px) saturate(200%);
  box-shadow:0 26px 60px -16px rgba(0,0,0,.9), inset 0 1px 0 rgba(255,255,255,.12)}
.suivis[hidden]{display:none}
.sv-tete{display:flex;align-items:center;gap:9px;width:100%;padding:11px 14px;background:none;border:0;
  color:var(--txt);font:inherit;font-size:13px;cursor:pointer;text-align:left}
.sv-tete b{flex:1;font-weight:600}
.sv-c{font-family:var(--mono);font-size:11.5px;color:var(--muted)}
.sv-tete svg{width:14px;height:14px;color:var(--muted);transition:transform .2s}
.suivis.ouvert .sv-tete svg{transform:rotate(180deg)}
.sv-liste{display:none;flex-direction:column;max-height:min(46vh,340px);overflow-y:auto;
  border-top:1px solid var(--stroke);padding:6px}
.suivis.ouvert .sv-liste{display:flex}
.sv-l{display:flex;align-items:center;gap:10px;padding:7px 8px;border-radius:12px;color:var(--txt)}
.sv-l:hover{background:var(--glass-2)}
.sv-l.hors_ligne,.sv-l.inconnu{opacity:.55}
.sv-av{position:relative;flex:none;width:32px;height:32px}
.sv-av img,.sv-av .av{width:32px;height:32px;border-radius:10px}
.sv-av .sv-pt{position:absolute;right:-3px;bottom:-3px;box-shadow:0 0 0 2.5px #15111d}
.sv-pt{display:inline-block;width:9px;height:9px;border-radius:50%;background:#5b556b;flex:none}
.sv-pt.en_ligne{background:#4aa8ff}
.sv-pt.aoe4{background:#31d0aa;box-shadow:0 0 0 0 rgba(49,208,170,.6);animation:svPouls 2s infinite}
.sv-av .sv-pt.aoe4{box-shadow:0 0 0 2.5px #15111d}
@keyframes svPouls{0%{box-shadow:0 0 0 0 rgba(49,208,170,.55)}70%{box-shadow:0 0 0 7px rgba(49,208,170,0)}100%{box-shadow:0 0 0 0 rgba(49,208,170,0)}}
.sv-n{display:flex;flex-direction:column;min-width:0;flex:1}
.sv-n b{font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sv-n i{font-style:normal;font-size:11.5px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sv-l.aoe4 .sv-n i{color:#31d0aa}
.sv-e{font-family:var(--mono);font-size:12px;color:var(--muted)}
/* Sur téléphone le dock occupe le bas de l'écran : le panneau passe au-dessus. */
@media (max-width:760px){ .suivis{bottom:96px;right:12px;width:230px} }

.sv-cell{display:inline-flex;align-items:center;gap:9px;color:var(--txt)}
.sv-cell img,.sv-cell .av{width:26px;height:26px;border-radius:8px}
.sv-etat{display:inline-flex;align-items:center;gap:7px;font-size:12.5px;color:var(--muted)}
.sv-etat.aoe4{color:#31d0aa}.sv-etat.en_ligne{color:#7dc0ff}

/* ---------------------------------------------- parties personnalisées -- */
#ppOnglets button i{font-style:normal;font-family:var(--mono);font-size:11px;margin-left:6px;opacity:.7}
.pp-grille{display:grid;grid-template-columns:repeat(auto-fill,minmax(360px,1fr));gap:12px}
.pp-c{padding:14px 16px;border-radius:16px;background:var(--glass-2);border:1px solid var(--stroke);min-width:0}
.pp-c.en_cours{border-color:rgba(49,208,170,.28)}
.pp-h{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:10px}
.pp-nom{font-size:14px;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pp-map{font-size:12.5px;color:var(--muted)}
.pp-t{margin-left:auto;font-family:var(--mono);font-size:12px;color:var(--muted);display:inline-flex;align-items:center;gap:7px}
.pp-live b{color:#31d0aa;font-weight:600}
.pp-eqs{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
.pp-eq{display:flex;flex-wrap:wrap;align-items:center;gap:4px 10px;padding:6px 10px;border-radius:12px;
  background:rgba(255,255,255,.03);border:1px solid var(--stroke)}
.pp-eq.w{border-color:rgba(49,208,138,.35);background:rgba(49,208,138,.07)}
.pp-eq.l{opacity:.78}
.pp-j{display:inline-flex;align-items:center;gap:6px;color:var(--txt);font-size:13px}
.pp-j span{max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pp-vs{font-size:11px;color:var(--dim);text-transform:uppercase;letter-spacing:.08em}
.pp-lien{display:inline-block;margin-top:10px;font-size:12px;color:var(--muted)}
@media (max-width:760px){ .pp-grille{grid-template-columns:1fr} }

.lie-e{display:flex;flex-direction:column;align-items:flex-end;line-height:1.25}
.lie-e b{font-weight:600}.lie-e i{font-style:normal;font-size:11px;color:var(--muted)}

/* ------------------------------------ parties personnalisées, en lignes -- */
.pl-liste{display:flex;flex-direction:column;border:1px solid var(--stroke);border-radius:16px;overflow:hidden}
.pl-l{display:grid;grid-template-columns:96px minmax(150px,240px) 1fr;gap:4px 16px;align-items:center;
  padding:9px 16px;border-top:1px solid var(--stroke);min-width:0}
.pl-l:first-child{border-top:0}
.pl-l:nth-child(even){background:rgba(255,255,255,.018)}
.pl-l:hover{background:var(--glass-2)}
.pl-t{display:flex;flex-direction:column;font-family:var(--mono);font-size:12px;line-height:1.35;white-space:nowrap}
.pl-t b{font-weight:600;color:var(--txt);display:inline-flex;align-items:center;gap:7px}
.pl-t i{font-style:normal;color:var(--muted);font-size:11px}
.pl-t .pl-live{color:#31d0aa}
.pl-n{display:flex;flex-direction:column;min-width:0;color:var(--txt);line-height:1.35}
.pl-n b{font-size:13.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pl-n i{font-style:normal;font-size:11.5px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pl-n em{font-style:normal;color:var(--a2)}.pl-n em.ok{color:#5fe0aa}
a.pl-n:hover b{text-decoration:underline}
.pl-js{display:flex;flex-wrap:wrap;align-items:center;gap:4px 8px;min-width:0}
.pl-eq{display:inline-flex;flex-wrap:wrap;align-items:center;gap:2px 10px;padding:3px 9px;border-radius:9px;
  border:1px solid transparent}
.pl-eq.w{background:rgba(49,208,138,.09);border-color:rgba(49,208,138,.30)}
.pl-eq.w::before{content:'✓';color:#5fe0aa;font-size:11px;font-weight:700}
.pl-eq.l{opacity:.62}
.pl-j{display:inline-flex;align-items:center;gap:5px;color:var(--txt);font-size:12.5px}
.pl-j span{max-width:130px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pl-j:hover span{text-decoration:underline}
.pl-vs{font-style:normal;font-size:10px;color:var(--dim);text-transform:uppercase;letter-spacing:.08em}
@media (max-width:860px){
  .pl-l{grid-template-columns:78px 1fr}
  .pl-js{grid-column:1 / -1}
}
.pl-eq.l::before{content:'✗';color:#ff8f98;font-size:11px;font-weight:700}

.pl-join{margin-left:auto;padding:5px 13px;border-radius:10px;font-size:12px;font-weight:600;white-space:nowrap;
  color:#0b1510;background:linear-gradient(135deg,#31d0aa,#5fe0aa);border:1px solid rgba(255,255,255,.18)}
.pl-join:hover{filter:brightness(1.08)}

.pl-copie{padding:5px 11px;border-radius:10px;font:inherit;font-size:12px;font-weight:600;cursor:pointer;white-space:nowrap;
  color:var(--txt);background:var(--glass-2);border:1px solid var(--stroke-2)}
.pl-copie:hover{border-color:var(--a1)}
.pl-join + .pl-copie{margin-left:0}
.pl-js > .pl-copie:not(.pl-join + .pl-copie){margin-left:auto}
.pl-l.a-moi{box-shadow:inset 3px 0 0 var(--a1);background:color-mix(in srgb,var(--a1) 7%,transparent)}
.pl-join.grand{display:inline-block;margin:0;padding:12px 26px;font-size:15px;border-radius:14px}

/* colonne « joueurs 4/8 » */
.pl-l{grid-template-columns:96px minmax(150px,240px) 64px 1fr}
.pl-nb{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:center;font-family:var(--mono);line-height:1.2;
  padding:5px 0;border-radius:10px;background:rgba(255,255,255,.035);border:1px solid var(--stroke)}
.pl-nb b{font-size:15px;font-weight:700;color:var(--txt)}
.pl-nb i{font-style:normal;font-size:12px;color:var(--muted)}
.pl-nb span{flex-basis:100%;text-align:center;font-family:inherit;font-size:9.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--dim)}
.pl-l.salons .pl-nb b{color:#31d0aa}
.pl-l.salons .pl-nb.plein b{color:var(--a2)}
@media (max-width:860px){ .pl-l{grid-template-columns:78px 1fr 56px} .pl-js{grid-column:1 / -1} }

.pl-l{grid-template-columns:96px minmax(150px,240px) 64px 1fr auto}
.pl-act{display:flex;gap:8px;justify-content:flex-end;align-items:center}
.pl-act .pl-join,.pl-act .pl-copie{margin-left:0}
@media (max-width:860px){ .pl-l{grid-template-columns:78px 1fr 56px} .pl-js,.pl-act{grid-column:1 / -1} .pl-act:empty{display:none} }

/* ------------------------------------------------------------ invitations -- */
.suivis.ouvert .sv-inv,.sv-inv:has(.neuve){display:flex}
.sv-inv{display:none;flex-direction:column;gap:6px;padding:8px;border-top:1px solid var(--stroke)}
.inv{display:flex;gap:10px;padding:10px;border-radius:12px;background:var(--glass-2);border:1px solid var(--stroke)}
.inv.neuve{border-color:color-mix(in srgb,var(--a1) 60%,transparent);background:color-mix(in srgb,var(--a1) 10%,transparent)}
.inv img,.inv .av{width:30px;height:30px;border-radius:9px;flex:none}
.inv-t{min-width:0;flex:1}
.inv-t p{font-size:12.5px;line-height:1.45;color:var(--txt);margin:0}
.inv-a{display:flex;gap:6px;margin-top:8px;flex-wrap:wrap}
.inv-b{display:inline-block;padding:5px 12px;border-radius:9px;font:inherit;font-size:12px;font-weight:600;cursor:pointer;
  color:var(--txt);background:var(--glass-2);border:1px solid var(--stroke-2);white-space:nowrap}
.inv-b.ok{color:#0b1510;background:linear-gradient(135deg,#31d0aa,#5fe0aa);border-color:rgba(255,255,255,.18)}
.inv-b:hover{filter:brightness(1.08)}.inv-b:disabled{opacity:.5;cursor:default}
.inv-code{font-family:var(--mono);font-weight:700;letter-spacing:.12em;padding:1px 7px;border-radius:6px;
  color:var(--a2);background:rgba(255,200,87,.12);border:1px solid rgba(255,200,87,.28)}
.inv-fiche{width:100%;padding:10px 12px;font-size:13px;border-radius:14px}

/* ------------------------------------------------------------ mes parties -- */
.mp-form{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.mp-form input{flex:1 1 220px;min-width:0;padding:9px 13px;border-radius:11px;font:inherit;font-size:13.5px;color:var(--txt);
  background:var(--glass-2);border:1px solid var(--stroke-2)}
.mp-form input:focus{outline:none;border-color:var(--a1)}
.mp-form .inv-b{padding:9px 18px;font-size:13px;border-radius:11px}
.mp-c{padding:18px;border-radius:18px;background:var(--glass-2);border:1px solid var(--stroke);margin-bottom:12px}
.mp-h{display:flex;align-items:center;gap:12px;margin-bottom:14px}
.mp-h > img,.mp-h > .av{width:38px;height:38px;border-radius:12px;flex:none}
.mp-h > div:nth-child(2){display:flex;flex-direction:column;min-width:0;flex:1}
.mp-h b{font-size:16px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mp-h i{font-style:normal;font-size:12px;color:var(--muted)}
.mp-code{display:flex;flex-direction:column;align-items:flex-end;gap:3px}
.mp-code span:first-child{font-size:9.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--dim)}
.mp-code .inv-code{font-size:20px;padding:3px 12px;border-radius:9px}
.mp-etapes{list-style:none;margin:0 0 14px;padding:0;display:flex;flex-direction:column;gap:6px}
.mp-etapes li{display:flex;align-items:center;gap:10px;font-size:13px;color:var(--muted)}
.mp-etapes li i{font-style:normal;flex:none;width:20px;height:20px;border-radius:50%;display:grid;place-items:center;font-size:11px;font-weight:700;
  background:rgba(255,255,255,.06);border:1px solid var(--stroke-2)}
.mp-etapes li.ok{color:var(--txt)}.mp-etapes li.ok i{background:rgba(49,208,138,.16);border-color:rgba(49,208,138,.45);color:#5fe0aa}
.mp-etapes li.att{color:var(--a2)}.mp-etapes li.att i{background:rgba(255,200,87,.14);border-color:rgba(255,200,87,.4);color:var(--a2)}
.mp-go{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin:0 0 14px}
.mp-m{display:flex;flex-direction:column;border:1px solid var(--stroke);border-radius:13px;overflow:hidden}
.mp-m > .sub{padding:10px 14px;margin:0}
.mp-j{display:flex;align-items:center;gap:9px;padding:8px 14px;border-top:1px solid var(--stroke);font-size:13px}
.mp-j:first-child{border-top:0}
.mp-j img,.mp-j .av{width:24px;height:24px;border-radius:7px}
.mp-j a{color:var(--txt);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mp-j.refusee{opacity:.55}
.mp-s{margin-left:auto;font-size:11.5px;padding:2px 9px;border-radius:20px;border:1px solid var(--stroke-2);color:var(--muted);white-space:nowrap}
.mp-s + .mp-s{margin-left:0}
.mp-s.acceptee{color:#5fe0aa;border-color:rgba(49,208,138,.35);background:rgba(49,208,138,.10)}
.mp-s.refusee{color:#ff8f98;border-color:rgba(255,95,109,.3);background:rgba(255,95,109,.10)}
.mp-s.la{color:#0b1510;background:linear-gradient(135deg,#31d0aa,#5fe0aa);border-color:transparent;font-weight:600}
.mp-s.jeu{color:#7dc0ff;border-color:rgba(74,168,255,.35)}
.mp-inv{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-top:12px}
.mp-plus{display:inline-flex;align-items:center;gap:7px;padding:4px 10px 4px 4px;border-radius:20px;font:inherit;font-size:12.5px;cursor:pointer;
  color:var(--txt);background:var(--glass);border:1px solid var(--stroke-2)}
.mp-plus:hover{border-color:#31d0aa}
.mp-plus img,.mp-plus .av{width:22px;height:22px;border-radius:50%}
.mp-plus b{color:#31d0aa;font-size:15px;line-height:1}
.mp-fermer{margin-left:auto}
.dock a > span:last-of-type{white-space:nowrap}

.mp-occ{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px;margin:0 0 14px;padding:9px 13px;border-radius:12px;
  background:rgba(49,208,170,.06);border:1px solid rgba(49,208,170,.22);font-size:12.5px}
.mp-occ a{display:inline-flex;align-items:center;gap:5px;color:var(--txt)}
.mp-occ i{font-style:normal;color:var(--muted)}
.mp-occ b{color:#31d0aa}

.mp-res{margin:0 0 14px}.mp-res > .sub{display:block;margin-bottom:6px;font-size:11px;letter-spacing:.06em;text-transform:uppercase}

.mp-x{flex:none;width:24px;height:24px;border-radius:50%;font:inherit;font-size:15px;line-height:1;cursor:pointer;
  color:var(--muted);background:none;border:1px solid var(--stroke-2)}
.mp-x:hover{color:#ff8f98;border-color:rgba(255,95,109,.5);background:rgba(255,95,109,.10)}

.mp-cherche{margin-top:12px}
.mp-cherche input,.ce-filtre{width:100%;padding:8px 12px;border-radius:10px;font:inherit;font-size:13px;color:var(--txt);
  background:var(--glass-2);border:1px solid var(--stroke-2)}
.mp-cherche input:focus,.ce-filtre:focus{outline:none;border-color:var(--a1)}
#mpTrouves{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}
#mpTrouves:empty{display:none}
.mp-plus.deja{opacity:.55;cursor:default}
.ce-filtre{margin:6px 0 8px;font-size:12px;padding:6px 10px}

/* ---------------------------------------------------- bans de civilisations -- */
.mp-form select,.mb-regl select{padding:9px 12px;border-radius:11px;font:inherit;font-size:13px;color:var(--txt);
  background:var(--glass-2);border:1px solid var(--stroke-2)}
.mp-form select[hidden]{display:none}
.mb-regl{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:0 0 12px}
.mb-regl select{padding:6px 10px;font-size:12.5px}
.mb{margin:0 0 14px;padding:14px;border-radius:16px;border:1px solid var(--stroke-2);background:rgba(0,0,0,.18)}
.mb-tete{display:flex;align-items:center;gap:14px;margin-bottom:12px}
.mb-tete > div{display:flex;flex-direction:column;flex:1;min-width:0}
.mb-tete b{font-size:14px}.mb-tete i{font-style:normal;font-size:12.5px;color:var(--muted)}
.mb-tete.live.eq0 b{color:#7dc0ff}.mb-tete.live.eq1 b{color:#ff9d7a}
.mb-tete.fini b{color:#5fe0aa}
.mb-chrono{flex:none;min-width:54px;text-align:center;font-family:var(--mono);font-size:26px;font-weight:700;padding:4px 10px;
  border-radius:12px;color:var(--a2);background:rgba(255,200,87,.10);border:1px solid rgba(255,200,87,.3)}
.mb-grille{display:grid;grid-template-columns:repeat(auto-fill,minmax(148px,1fr));gap:6px;margin-bottom:12px}
.mb-civ{position:relative;display:flex;align-items:center;gap:8px;padding:7px 9px;border-radius:11px;font:inherit;font-size:12px;text-align:left;
  color:var(--txt);background:var(--glass-2);border:1px solid var(--stroke);cursor:default;min-width:0}
.mb-civ span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mb-grille.actif .mb-civ:not(:disabled){cursor:pointer}
.mb-grille.actif .mb-civ:not(:disabled):hover{border-color:#ff8f98;background:rgba(255,95,109,.10)}
.mb-grille:not(.actif) .mb-civ{opacity:.75}
.mb-civ.moi{border-color:#ff8f98;background:rgba(255,95,109,.16);opacity:1}
.mb-civ.ban{opacity:.3;filter:grayscale(1)}
.mb-civ em{position:absolute;right:8px;font-style:normal;color:#ff8f98;font-weight:700}
.mb-n{margin-left:auto;font-style:normal;font-family:var(--mono);font-size:11px;padding:0 6px;border-radius:20px;color:#0b1510;background:#ff8f98}
.mb-bilan{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:12px}
.mb-b{display:flex;align-items:center;gap:8px;padding:6px 12px 6px 8px;border-radius:12px;font-size:13px;
  background:rgba(255,95,109,.08);border:1px solid rgba(255,95,109,.28)}
.mb-b span{font-size:10px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}
.mb-b.eq0 span{color:#7dc0ff}.mb-b.eq1 span{color:#ff9d7a}
.mb-eqs{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.mb-eq{padding:10px;border-radius:13px;border:1px solid var(--stroke)}
.mb-eq.eq0{border-color:rgba(74,168,255,.3);background:rgba(74,168,255,.05)}
.mb-eq.eq1{border-color:rgba(255,122,69,.3);background:rgba(255,122,69,.05)}
.mb-eq-t{font-size:11px;letter-spacing:.08em;text-transform:uppercase;margin-bottom:6px;color:var(--muted)}
.mb-eq.eq0 .mb-eq-t{color:#7dc0ff}.mb-eq.eq1 .mb-eq-t{color:#ff9d7a}
.mb-p{display:flex;align-items:center;gap:8px;padding:4px 0;font-size:13px;min-width:0}
.mb-p img,.mb-p .av{width:22px;height:22px;border-radius:7px;flex:none}
.mb-p b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:600}
.mb-cap{font-size:10px;padding:1px 7px;border-radius:20px;color:var(--a2);border:1px solid rgba(255,200,87,.35)}
.mb-pret{margin-left:auto;font-size:11px;color:var(--muted)}.mb-pret.ok{color:#5fe0aa}
.mb-sw{flex:none;width:24px;height:24px;border-radius:8px;font:inherit;cursor:pointer;color:var(--muted);background:none;border:1px solid var(--stroke-2)}
.mb-sw:hover{color:var(--txt);border-color:var(--a1)}
.mb-pret + .mb-sw{margin-left:0}.mb-p > .mb-sw:not(.mb-pret + .mb-sw){margin-left:auto}
@media (max-width:620px){ .mb-eqs{grid-template-columns:1fr} }

.pl-j.viole span{color:#ff8f98}
.pl-viole{font-style:normal;font-size:10px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;padding:1px 7px;border-radius:20px;
  color:#fff;background:#d9364a;white-space:nowrap}
.mp-alerte{display:flex;flex-direction:column;gap:4px;margin:0 0 14px;padding:11px 14px;border-radius:13px;font-size:13px;
  background:rgba(255,95,109,.10);border:1px solid rgba(255,95,109,.45)}
.mp-alerte > b{color:#ff8f98;font-size:12px;letter-spacing:.06em;text-transform:uppercase}
.mp-alerte span{display:inline-flex;align-items:center;gap:6px;flex-wrap:wrap}
.mp-alerte a{color:var(--txt);font-weight:600}
.mp-alerte.ok{background:rgba(49,208,138,.08);border-color:rgba(49,208,138,.35)}
.mp-alerte.ok > b{color:#5fe0aa}
/* Listes déroulantes : sans ça le navigateur ouvre la liste sur fond blanc avec
   le texte clair du site — illisible. */
.mp-form select,.mb-regl select{color-scheme:dark;background-color:#1b1724}
.mp-form select option,.mb-regl select option{background:#1b1724;color:#f7f4ef}

.mp-nb{display:inline-flex;align-items:center;gap:8px;font-size:13px;color:var(--muted)}
.mp-nb input{width:64px;flex:none !important;padding:8px 10px;border-radius:11px;font:inherit;font-size:14px;font-weight:600;text-align:center;
  color:var(--txt);background:#1b1724;border:1px solid var(--stroke-2);color-scheme:dark}
.mb-regl .mp-nb input{padding:5px 8px;font-size:13px}

.mb-p.att{opacity:.5}
.mb-p .mb-sw + .mb-sw{margin-left:0}
.mp-eqc{display:inline-flex;border:1px solid var(--stroke-2);border-radius:10px;overflow:hidden}
.mp-eqc button{padding:5px 11px;font:inherit;font-size:12px;cursor:pointer;color:var(--muted);background:none;border:0}
.mp-eqc button.on.eq0{color:#0b1220;background:#7dc0ff;font-weight:600}
.mp-eqc button.on.eq1{color:#1a0e08;background:#ff9d7a;font-weight:600}

/* ------------------------------------------------ cote à côté du pseudo -- */
.cotes{display:inline-flex;flex-wrap:wrap;gap:4px;min-width:0}
.cote{display:inline-flex;align-items:baseline;gap:4px;padding:1px 7px;border-radius:20px;font-size:10.5px;white-space:nowrap;
  color:var(--muted);background:rgba(255,255,255,.05);border:1px solid var(--stroke)}
.cote i{font-style:normal;font-size:9px;letter-spacing:.06em;text-transform:uppercase;color:var(--dim)}
.cote b{color:var(--txt);font-family:var(--mono);font-weight:600}
.cote u{text-decoration:none;font-family:var(--mono);font-size:9.5px;color:var(--dim)}
.cote.rl-bronze{border-color:rgba(205,127,50,.4);color:#d99a5b}.cote.rl-silver{border-color:rgba(190,200,210,.4);color:#c9d3dc}
.cote.rl-gold{border-color:rgba(255,200,87,.45);color:#ffc857}.cote.rl-platinum{border-color:rgba(94,234,212,.4);color:#7ee7d6}
.cote.rl-diamond{border-color:rgba(125,192,255,.45);color:#8cc8ff}.cote.rl-conqueror{border-color:rgba(255,122,69,.5);color:#ff9d7a}
.mb-regl .mb-nom{flex:1 1 200px;min-width:0;padding:6px 10px;border-radius:11px;font:inherit;font-size:13px;color:var(--txt);
  background:#1b1724;border:1px solid var(--stroke-2)}
.mb-regl .mb-nom:focus{outline:none;border-color:var(--a1)}
.mp-s.demande{color:var(--a2);border-color:rgba(255,200,87,.4);background:rgba(255,200,87,.10)}
.mp-s[hidden]{display:none}
.mp-j{flex-wrap:wrap}

/* ------------------------------------------------- page des parties, réagencée -- */
.mp-creer-b{padding:9px 18px;font-size:13px;border-radius:12px}
.mp-form{display:grid;gap:10px;margin-top:14px;padding:16px;border-radius:16px;background:rgba(0,0,0,.2);border:1px solid var(--stroke-2)}
.mp-form[hidden]{display:none}
.mp-form-l{display:grid;grid-template-columns:190px 1fr;align-items:center;gap:10px}
.mp-form-l > label:first-child{font-size:12px;letter-spacing:.04em;color:var(--muted)}
.mp-form-l > :nth-child(2){justify-self:start}
.mp-form-l input:not([type=number]){width:100%;max-width:460px;justify-self:stretch}
.mp-form-l:nth-child(3){grid-template-columns:190px auto 1fr}
#mpOnglets button i{font-style:normal;font-family:var(--mono);font-size:11px;margin-left:6px;opacity:.7}
#mpPubliques[hidden],#mpVueMoi[hidden]{display:none}
@media (max-width:700px){ .mp-form-l,.mp-form-l:nth-child(3){grid-template-columns:1fr} }

/* --------------------------------------------- bannissement, façon sélection -- */
.dr{margin:0 0 14px;border-radius:18px;overflow:hidden;border:1px solid var(--stroke-2);
  background:linear-gradient(180deg,rgba(18,14,30,.9),rgba(8,7,12,.92))}
.dr.tour0{box-shadow:inset 0 0 0 1px rgba(74,168,255,.35), 0 0 40px -18px rgba(74,168,255,.8)}
.dr.tour1{box-shadow:inset 0 0 0 1px rgba(255,122,69,.35), 0 0 40px -18px rgba(255,122,69,.8)}
.dr-top{display:grid;grid-template-columns:1fr minmax(240px,1.1fr) 1fr;align-items:center;gap:12px;padding:14px 16px;
  background:linear-gradient(90deg,rgba(74,168,255,.12),transparent 38%,transparent 62%,rgba(255,122,69,.12));border-bottom:1px solid var(--stroke)}
.dr-bans{display:flex;flex-direction:column;gap:6px;min-width:0}
.dr-bans.b{align-items:flex-end}
.dr-bans > div{display:flex;flex-wrap:wrap;gap:6px}
.dr-bans.b > div{justify-content:flex-end}
.dr-lab{font-size:10px;letter-spacing:.1em;text-transform:uppercase}
.dr-bans.a .dr-lab{color:#7dc0ff}.dr-bans.b .dr-lab{color:#ff9d7a}
.dr-slot{position:relative;width:62px;height:40px;border-radius:9px;display:grid;place-items:center;overflow:hidden;
  background:rgba(255,255,255,.04);border:1px dashed var(--stroke-2);color:var(--dim);font-family:var(--mono)}
.dr-slot.pris{border-style:solid;border-color:rgba(255,95,109,.55)}
.dr-slot.pris img{width:100%;height:100%;object-fit:cover;filter:grayscale(.55) brightness(.75)}
.dr-slot.pris em{position:absolute;inset:0;background:linear-gradient(to top right,transparent 46%,#ff5f6d 47%,#ff5f6d 53%,transparent 54%)}
.dr-slot.passe{border-style:solid;opacity:.5}
.dr-slot.actif{border-color:var(--a2);color:var(--a2);animation:drPouls 1.2s infinite}
@keyframes drPouls{0%,100%{box-shadow:0 0 0 0 rgba(255,200,87,.5)}50%{box-shadow:0 0 0 6px rgba(255,200,87,0)}}
.dr-centre{display:flex;flex-direction:column;align-items:center;text-align:center;gap:3px;min-width:0}
.dr-centre > b{font-size:15px;font-family:'Space Grotesk',inherit}
.dr-centre > i{font-style:normal;font-size:12px;color:var(--muted)}
.dr.tour0 .dr-centre > b{color:#7dc0ff}.dr.tour1 .dr-centre > b{color:#ff9d7a}.dr.termine .dr-centre > b{color:#5fe0aa}
.dr.a-moi .dr-centre > i{color:var(--a2);font-weight:600}
.dr .mb-chrono{margin-top:6px;min-width:70px;font-size:34px;line-height:1.1;background:none;border:0;color:var(--txt)}
.dr .mb-chrono.urgent{color:#ff5f6d;animation:drBat .5s infinite alternate}
@keyframes drBat{to{transform:scale(1.12)}}
.dr-barre{width:100%;max-width:340px;height:5px;border-radius:5px;background:rgba(255,255,255,.08);overflow:hidden;margin-top:4px}
.dr-barre i{display:block;height:100%;border-radius:5px;background:linear-gradient(90deg,#ff5f6d,var(--a2));transition:width 1s linear}
.dr-pret{margin-top:8px;padding:10px 26px;border-radius:12px;font:inherit;font-size:14px;font-weight:700;cursor:pointer;
  color:#0b1510;background:linear-gradient(135deg,#31d0aa,#5fe0aa);border:1px solid rgba(255,255,255,.2)}
.dr-pret.ok{color:#5fe0aa;background:rgba(49,208,138,.12);border-color:rgba(49,208,138,.45)}
.dr-corps{display:grid;grid-template-columns:minmax(190px,1fr) minmax(0,2.6fr) minmax(190px,1fr);gap:12px;padding:14px 16px;align-items:start}
.dr-corps .mb-eq{height:100%}
.dr-corps .mb-grille{margin:0;grid-template-columns:repeat(auto-fill,minmax(132px,1fr))}
.dr-corps .mb-p{flex-wrap:wrap}
.dr-fin{display:grid;place-items:center;font-size:42px;color:#5fe0aa;opacity:.5}
.dr.attente .mb-grille{opacity:.45;filter:grayscale(.4)}
.mb-civ img{border-radius:5px}
@media (max-width:980px){
  .dr-corps{grid-template-columns:1fr 1fr}
  .dr-corps .mb-grille,.dr-fin{grid-column:1 / -1;order:3}
  .dr-top{grid-template-columns:1fr 1fr}.dr-centre{grid-column:1 / -1;order:-1}
}

/* grille des civilisations : des tuiles, étendard au-dessus du nom */
.dr-corps .mb-grille{grid-template-columns:repeat(auto-fill,minmax(96px,1fr));gap:7px}
.dr-corps .mb-civ{flex-direction:column;gap:5px;padding:8px 5px 7px;text-align:center}
.dr-corps .mb-civ img{width:64px;height:auto}
.dr-corps .mb-civ span{white-space:normal;line-height:1.2;font-size:11px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;min-height:2.4em}
.dr-corps .mb-civ .mb-n{position:absolute;top:5px;right:5px;margin:0}
.dr-corps .mb-civ em{top:4px;right:7px;font-size:15px}
.dr-corps .mb-grille.actif .mb-civ:not(:disabled):hover{transform:translateY(-2px);box-shadow:0 8px 18px -8px rgba(255,95,109,.7)}
.mb-civ{transition:transform .12s, box-shadow .12s, border-color .12s}

/* filtres de niveau : recherche d'invités et liste du chat */
.mp-filtres{display:flex;flex-wrap:wrap;gap:8px}
.mp-filtres #mpCherche{flex:1 1 260px;width:auto}
.mp-filtres select,.mp-filtres #mpFMin,.ce-filtres select,.ce-filtres input{padding:8px 10px;border-radius:10px;font:inherit;font-size:12.5px;
  color:var(--txt);background:#1b1724;border:1px solid var(--stroke-2);color-scheme:dark}
.mp-filtres select option,.ce-filtres select option{background:#1b1724;color:#f7f4ef}
.mp-filtres #mpFMin{width:120px}
.ce-filtres{display:grid;grid-template-columns:1fr 1fr;gap:5px;margin-bottom:8px}
.ce-filtres select,.ce-filtres input{padding:5px 7px;font-size:11.5px;min-width:0;width:100%}
.ce-filtres input{grid-column:1 / -1}
.ce-g{display:flex;flex-direction:column;align-items:flex-start;gap:2px}
.ce-g .cotes{margin:0 0 4px 2px}.ce-g .cote{font-size:9.5px;padding:0 6px}
.mp-plus .cotes{margin-left:2px}

/* =====================================================================
   PARTIES v3 — accueil (.ph) et salle (.sa). Un sujet par écran.
   ===================================================================== */
body.route-parties .suivis{display:none}          /* le panneau flottant recouvrait le chat et les boutons */
.bt{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:7px 14px;border-radius:10px;font:inherit;font-size:12.5px;font-weight:600;
  cursor:pointer;white-space:nowrap;color:var(--txt);background:rgba(255,255,255,.06);border:1px solid var(--stroke-2);text-decoration:none}
.bt:hover{background:rgba(255,255,255,.12)}
.bt.ok{color:#0b1510;background:linear-gradient(135deg,#31d0aa,#5fe0aa);border-color:rgba(255,255,255,.18)}
.bt.ok:hover{filter:brightness(1.08);background:linear-gradient(135deg,#31d0aa,#5fe0aa)}
.bt.danger{color:#ff9c8a;border-color:rgba(255,140,120,.3)}
.bt.grand{padding:10px 20px;font-size:13.5px;border-radius:12px}
.bt:disabled{opacity:.5;cursor:default}

/* cote : deux pastilles courtes, jamais plus */
.cts{display:inline-flex;gap:4px;flex:none}
.ct{font-family:var(--mono);font-size:10.5px;line-height:1;padding:2px 6px;border-radius:6px;white-space:nowrap;
  color:var(--muted);background:rgba(255,255,255,.05);border:1px solid var(--stroke)}
.ct.rl-bronze{color:#d99a5b;border-color:rgba(205,127,50,.35)}.ct.rl-silver{color:#c9d3dc;border-color:rgba(190,200,210,.35)}
.ct.rl-gold{color:#ffc857;border-color:rgba(255,200,87,.4)}.ct.rl-platinum{color:#7ee7d6;border-color:rgba(94,234,212,.35)}
.ct.rl-diamond{color:#8cc8ff;border-color:rgba(125,192,255,.4)}.ct.rl-conqueror{color:#ff9d7a;border-color:rgba(255,122,69,.45)}

/* ------------------------------------------------------------- accueil -- */
.ph{display:grid;grid-template-columns:minmax(0,1fr) 360px;gap:16px;align-items:start}
.ph-chat{position:sticky;top:84px}
.ph-t{display:flex;align-items:baseline;gap:8px;margin:22px 0 10px;font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);font-weight:600}
.ph-t:first-child{margin-top:4px}
.ph-t i{font-style:normal;font-family:var(--mono);color:var(--dim)}
.ph-vide{margin:0;padding:18px;border-radius:14px;border:1px dashed var(--stroke-2);color:var(--muted);font-size:13px;text-align:center}
.ph-liste{display:flex;flex-direction:column;border:1px solid var(--stroke);border-radius:14px;overflow:hidden}
.ph-l{display:flex;align-items:center;gap:12px;padding:10px 14px;border-top:1px solid var(--stroke);min-width:0}
.ph-l:first-child{border-top:0}
.ph-l:hover{background:rgba(255,255,255,.03)}
.ph-l.neuve{background:color-mix(in srgb,var(--a1) 9%,transparent);box-shadow:inset 3px 0 0 var(--a1)}
.ph-l > img,.ph-l > .av{width:34px;height:34px;border-radius:10px;flex:none}
.ph-n{display:flex;flex-direction:column;min-width:0;flex:1;line-height:1.35}
.ph-n b{font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ph-n i{font-style:normal;font-size:12px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ph-nb{flex:none;font-family:var(--mono);font-size:12px;color:var(--muted)}.ph-nb b{font-size:14px;color:var(--txt)}
.ph-etat{flex:none;font-size:11.5px;padding:3px 10px;border-radius:20px;border:1px solid var(--stroke-2);color:var(--muted);white-space:nowrap}
.ph-etat.bans{color:var(--a2);border-color:rgba(255,200,87,.4)}.ph-etat.salon{color:#5fe0aa;border-color:rgba(49,208,138,.4)}
.ph-act{display:flex;gap:6px;flex:none}
.ph-form{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px 16px;margin:4px 0 8px;padding:16px;border-radius:14px;
  background:rgba(0,0,0,.22);border:1px solid var(--stroke-2)}
.ph-form[hidden]{display:none}
.ph-form label,.sa-regl label{display:flex;flex-direction:column;gap:5px;min-width:0}
.ph-form label > span,.sa-regl label > span{font-size:11px;letter-spacing:.05em;text-transform:uppercase;color:var(--muted)}
.ph-form input,.ph-form select,.sa-regl input,.sa-regl select,.sa-modal input,.sa-modal select{width:100%;padding:9px 12px;border-radius:10px;font:inherit;font-size:13.5px;
  color:var(--txt);background:#1b1724;border:1px solid var(--stroke-2);color-scheme:dark;min-width:0}
.ph-form select option,.sa-regl select option,.sa-modal select option{background:#1b1724;color:#f7f4ef}
.ph-form input:focus,.ph-form select:focus,.sa-regl input:focus,.sa-regl select:focus,.sa-modal input:focus{outline:none;border-color:var(--a1)}
.ph-form-a{grid-column:1 / -1;display:flex;align-items:center;gap:12px}

/* chat compact */
.ce-compact{padding:14px;display:flex;flex-direction:column}
.ce-tete{display:flex;align-items:center;gap:10px;margin-bottom:10px}
.ce-tete b{font-size:14px;font-family:'Space Grotesk',inherit}
.ce-gens-b{font:inherit;font-size:11.5px;padding:4px 10px;border-radius:20px;cursor:pointer;color:var(--muted);background:none;border:1px solid var(--stroke-2)}
.ce-gens-b b{color:var(--a2)}
.ce-gens-b:hover{color:var(--txt)}
.ce-compact .ce-corps{display:block;position:relative}
.ce-compact .ce-log{height:min(52vh,430px)}
.sa .ce-compact .ce-log{height:220px}
.ce-compact .ce-gens{display:none;position:absolute;inset:0;overflow-y:auto;padding:10px;border-radius:12px;background:#15111d;border:1px solid var(--stroke-2);z-index:2}
.ce-compact.gens-ouverts .ce-gens{display:block}
.ce-compact .ce-g{flex-direction:row;align-items:center;gap:8px;flex-wrap:wrap;padding:4px 0}
.ce-compact .ce-g .cts{margin-left:auto}

/* --------------------------------------------------------------- salle -- */
.sa{display:block}
.sa-tete{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:12px}
.sa-tete h2{font-size:22px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:50vw}
.sa-retour{font-size:13px;color:var(--muted);padding:6px 10px;border-radius:9px;border:1px solid var(--stroke)}
.sa-retour:hover{color:var(--txt)}
.sa-badge{font-size:11.5px;padding:3px 10px;border-radius:20px;color:var(--muted);border:1px solid var(--stroke-2);display:inline-flex;gap:6px;align-items:center}
.sa-etapes{display:flex;align-items:center;gap:10px;margin-bottom:14px;padding:10px 16px;border-radius:14px;background:var(--glass);border:1px solid var(--stroke);overflow-x:auto}
.sa-etapes span{display:inline-flex;align-items:center;gap:8px;font-size:12.5px;color:var(--dim);white-space:nowrap}
.sa-etapes span i{font-style:normal;width:22px;height:22px;border-radius:50%;display:grid;place-items:center;font-size:11px;font-weight:700;
  background:rgba(255,255,255,.05);border:1px solid var(--stroke-2)}
.sa-etapes span.fait{color:var(--muted)}.sa-etapes span.fait i{color:#5fe0aa;border-color:rgba(49,208,138,.45);background:rgba(49,208,138,.12)}
.sa-etapes span.ici{color:var(--txt);font-weight:600}.sa-etapes span.ici i{color:#0b1510;background:var(--a2);border-color:transparent}
.sa-etapes > b{flex:1;min-width:18px;height:1px;background:var(--stroke-2)}
.sa-regl{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(0,1.2fr) minmax(0,1.2fr) 110px;gap:12px;margin-bottom:14px;padding:14px 16px;border-radius:14px;
  background:rgba(0,0,0,.2);border:1px solid var(--stroke)}
.sa-regl[hidden]{display:none}
.sa-dem{display:flex;align-items:center;gap:10px;margin-bottom:10px;padding:10px 14px;border-radius:12px;font-size:13px;
  background:rgba(255,200,87,.08);border:1px solid rgba(255,200,87,.35)}
.sa-dem img,.sa-dem .av{width:28px;height:28px;border-radius:9px}
.sa-dem > span{flex:1;min-width:0;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.sa-grille{display:grid;grid-template-columns:minmax(220px,1fr) minmax(0,2.4fr) minmax(220px,1fr);gap:14px;align-items:stretch;margin-bottom:14px}
.sa-eq{display:flex;flex-direction:column;gap:6px;padding:12px;border-radius:16px;border:1px solid var(--stroke);min-width:0}
.sa-eq.eq0{border-color:rgba(74,168,255,.3);background:linear-gradient(180deg,rgba(74,168,255,.08),transparent 60%)}
.sa-eq.eq1{border-color:rgba(255,122,69,.3);background:linear-gradient(180deg,rgba(255,122,69,.08),transparent 60%)}
.sa-eq-t{display:flex;align-items:baseline;gap:8px;font-size:11px;letter-spacing:.1em;text-transform:uppercase;margin-bottom:4px}
.sa-eq.eq0 .sa-eq-t{color:#7dc0ff}.sa-eq.eq1 .sa-eq-t{color:#ff9d7a}
.sa-eq-t i{font-style:normal;font-family:var(--mono);color:var(--dim)}
.sa-j,.sa-res{position:relative;display:flex;align-items:center;gap:10px;padding:7px 8px;border-radius:11px;min-width:0;background:rgba(255,255,255,.03)}
.sa-j.moi{background:rgba(255,255,255,.07)}
.sa-j.att{opacity:.5}
.sa-av{position:relative;flex:none;width:32px;height:32px}
.sa-av img,.sa-av .av{width:32px;height:32px;border-radius:10px}
.sa-av .sv-pt{position:absolute;right:-3px;bottom:-3px;box-shadow:0 0 0 2.5px #15111d}
.sa-n{display:flex;flex-direction:column;gap:3px;min-width:0;flex:1}
.sa-n > a,.sa-n > b{font-size:13.5px;font-weight:600;color:var(--txt);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:inline-flex;align-items:center;gap:6px}
.sa-r{font-style:normal;font-size:9.5px;font-weight:600;letter-spacing:.05em;text-transform:uppercase;padding:1px 6px;border-radius:20px;color:var(--muted);border:1px solid var(--stroke-2)}
.sa-r.chef{color:var(--a2);border-color:rgba(255,200,87,.4)}
.sa-l2{display:flex;align-items:center;gap:6px;min-width:0;overflow:hidden}
.sa-l2 u{text-decoration:none;font-size:11px;color:var(--muted);white-space:nowrap}.sa-l2 u.ok{color:#5fe0aa}
.sa-ctl{display:none;gap:3px;flex:none}
.sa-j:hover .sa-ctl,.sa-j:focus-within .sa-ctl{display:flex}
.sa-ctl button{width:24px;height:24px;border-radius:7px;font:inherit;font-size:13px;line-height:1;cursor:pointer;color:var(--muted);background:#1b1724;border:1px solid var(--stroke-2)}
.sa-ctl button:hover{color:var(--txt);border-color:var(--a1)}
.sa-ctl button.x:hover{color:#ff8f98;border-color:rgba(255,95,109,.5)}
@media (hover:none){ .sa-ctl{display:flex} }
.sa-plus{margin-top:auto;padding:9px;border-radius:11px;font:inherit;font-size:12.5px;cursor:pointer;color:var(--muted);background:none;border:1px dashed var(--stroke-2)}
.sa-plus:hover{color:var(--txt);border-color:#31d0aa;background:rgba(49,208,170,.06)}
.sa-scene{min-width:0;display:flex}
.sc{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:10px;min-height:300px;padding:26px 22px;border-radius:18px;
  border:1px solid var(--stroke-2);background:linear-gradient(180deg,rgba(18,14,30,.9),rgba(8,7,12,.92))}
.sc-t{font-family:'Space Grotesk',inherit;font-size:20px;font-weight:700}
.sc-s{margin:0;max-width:520px;font-size:13.5px;line-height:1.55;color:var(--muted)}
.sc-m{margin:0;font-size:12.5px;color:var(--a2)}
.sc-a{display:flex;gap:10px}
.sc-ok{width:54px;height:54px;border-radius:50%;display:grid;place-items:center;font-size:26px;color:#5fe0aa;background:rgba(49,208,138,.12);border:1px solid rgba(49,208,138,.45)}
.sc-pret,.sc-go{margin:6px 0;padding:14px 38px;border-radius:14px;font:inherit;font-size:16px;font-weight:700;cursor:pointer;text-decoration:none;
  color:#0b1510;background:linear-gradient(135deg,#31d0aa,#5fe0aa);border:1px solid rgba(255,255,255,.2);box-shadow:0 14px 34px -14px rgba(49,208,170,.9)}
.sc-pret:hover,.sc-go:hover{filter:brightness(1.08)}
.sc-pret.ok{color:#5fe0aa;background:rgba(49,208,138,.12);border-color:rgba(49,208,138,.45);box-shadow:none}
.sc-attente{display:flex;gap:7px}
.sc-attente i{width:9px;height:9px;border-radius:50%;background:var(--a2);animation:scPt 1.2s infinite ease-in-out}
.sc-attente i:nth-child(2){animation-delay:.2s}.sc-attente i:nth-child(3){animation-delay:.4s}
@keyframes scPt{0%,80%,100%{opacity:.25;transform:scale(.8)}40%{opacity:1;transform:scale(1.15)}}
.sc.bans{justify-content:flex-start;align-items:stretch;padding:0;overflow:hidden;gap:0}
.sc.bans.tour0{box-shadow:inset 0 0 0 1px rgba(74,168,255,.35), 0 0 40px -18px rgba(74,168,255,.8)}
.sc.bans.tour1{box-shadow:inset 0 0 0 1px rgba(255,122,69,.35), 0 0 40px -18px rgba(255,122,69,.8)}
.sc.bans .dr-top{grid-template-columns:1fr auto 1fr}
.sc.bans .dr-centre{min-width:200px}
.sc.bans .dr-centre > i{margin-top:4px}
.sc.bans.a-moi .dr-centre > i{color:var(--a2);font-weight:600}
.sc.bans.tour0 .dr-centre > b{color:#7dc0ff}.sc.bans.tour1 .dr-centre > b{color:#ff9d7a}
.sc.bans .mb-chrono{margin:2px 0;min-width:70px;font-size:34px;line-height:1.1;background:none;border:0;color:var(--txt);padding:0}
.sc.bans .mb-chrono.urgent{color:#ff5f6d;animation:drBat .5s infinite alternate}
.sc.bans .mb-grille{margin:0;padding:14px;grid-template-columns:repeat(auto-fill,minmax(92px,1fr));gap:7px}
.sc.bans .mb-civ{flex-direction:column;gap:5px;padding:8px 5px 7px;text-align:center}
.sc.bans .mb-civ img{width:60px;height:auto;border-radius:5px}
.sc.bans .mb-civ span{white-space:normal;line-height:1.2;font-size:11px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;min-height:2.4em}
.sc.bans .mb-civ .mb-n{position:absolute;top:5px;right:5px;margin:0}
.sc.bans .mb-civ em{top:4px;right:7px;font-size:15px}
.sc.bans .mb-grille.actif .mb-civ:not(:disabled):hover{transform:translateY(-2px);box-shadow:0 8px 18px -8px rgba(255,95,109,.7)}
.sc.res{justify-content:flex-start;align-items:stretch;text-align:left}
.sa-recap{display:flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:center;margin-bottom:6px}
.sa-recap span{font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin-right:4px}
.sa-recap i{position:relative;display:block;width:52px;height:30px;border-radius:6px;overflow:hidden;border:1px solid rgba(255,95,109,.5)}
.sa-recap i img{width:100%;height:100%;object-fit:cover;filter:grayscale(.5) brightness(.75)}
.sa-recap i em{position:absolute;inset:0;background:linear-gradient(to top right,transparent 46%,#ff5f6d 47%,#ff5f6d 53%,transparent 54%)}
.sa-recap i.eq0{box-shadow:0 2px 0 #7dc0ff}.sa-recap i.eq1{box-shadow:0 2px 0 #ff9d7a}
.sa-modal{position:fixed;inset:0;z-index:300;display:grid;place-items:start center;padding:12vh 16px 16px;background:rgba(5,4,8,.72);backdrop-filter:blur(6px)}
.sa-modal[hidden]{display:none}
.sa-modal-c{width:min(620px,100%);max-height:72vh;overflow-y:auto;padding:20px;border-radius:18px;background:#15111d;border:1px solid var(--stroke-2);box-shadow:0 40px 90px -20px #000}
.sa-modal .mp-filtres{display:grid;grid-template-columns:minmax(0,1.6fr) 100px minmax(0,1fr) 110px;gap:8px}
.sa-modal #mpTrouves{display:flex;flex-direction:column;gap:6px;margin-top:12px}
.sa-res.deja{opacity:.5}
@media (max-width:1080px){
  .ph{grid-template-columns:1fr}.ph-chat{position:static}
  .sa-grille{grid-template-columns:1fr 1fr}.sa-scene{grid-column:1 / -1;order:-1}
  .sa-regl{grid-template-columns:1fr 1fr}
}
@media (max-width:640px){
  .sa-grille{grid-template-columns:1fr}.ph-form{grid-template-columns:1fr}
  .ph-l{flex-wrap:wrap}.ph-act{width:100%;justify-content:flex-end}.ph-etat{order:5}
  .sa-modal .mp-filtres{grid-template-columns:1fr 1fr}
}
/* retouches v3 */
.ph,.sa{padding-bottom:96px}                       /* le dock ne recouvre plus la saisie du chat */
.sa-n1{display:flex;align-items:center;gap:6px;min-width:0}
.sa-n1 a{font-size:13.5px;font-weight:600;color:var(--txt);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.sa-n1 .sa-r{flex:none}
.sc.bans .dr-slot{width:50px;height:32px;border-radius:7px}
.sc.bans .dr-bans > div{max-width:230px}
.sa-modal .mp-filtres #mpCherche,.sa-modal .mp-filtres #mpFMin{width:100%;flex:none}
.sa-modal .mp-filtres{grid-template-columns:minmax(0,1.5fr) 92px minmax(0,1fr) 104px}
.ph-chat-o{display:flex;gap:4px;margin-bottom:8px;padding:4px;border-radius:12px;background:var(--glass);border:1px solid var(--stroke)}
.ph-chat-o button{flex:1;padding:7px 10px;border-radius:9px;font:inherit;font-size:12.5px;cursor:pointer;color:var(--muted);background:none;border:0}
.ph-chat-o button.on{color:#fff;background:linear-gradient(140deg,color-mix(in srgb,var(--a1) 30%,transparent),color-mix(in srgb,var(--a3) 24%,transparent))}
/* salle : le chat retient le salon de la partie, pas celui d'une autre partie */
#saChat .ph-chat-o{max-width:520px}
#saChat{margin-top:2px}

/* =================================================== amis et clan (panneau) == */
.suivis.amis{width:440px}
body.route-parties .suivis.amis{display:block}
body.route-parties .suivis.amis.ouvert{width:440px}
.am-n{position:static;margin-left:2px}
.am-deux{display:none;grid-template-columns:1fr 1fr;border-top:1px solid var(--stroke)}
.suivis.ouvert .am-deux{display:grid}
.am-col{min-width:0;padding:8px 6px 8px 8px}
.am-col + .am-col{border-left:1px solid var(--stroke)}
.am-t{display:flex;align-items:baseline;gap:6px;padding:2px 6px 6px;font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
.am-t i{font-style:normal;font-family:var(--mono);color:var(--dim)}
.am-t a{color:var(--a2)}
.am-liste{display:flex;flex-direction:column;max-height:min(44vh,320px);overflow-y:auto}
.am-vide{margin:0;padding:8px 6px;font-size:12px;line-height:1.45;color:var(--muted)}
.am-l{display:flex;align-items:center;gap:4px;border-radius:10px;min-width:0}
.am-l:hover{background:var(--glass-2)}
.am-l.hors_ligne{opacity:.5}
.am-qui{display:flex;align-items:center;gap:8px;min-width:0;flex:1;padding:5px 6px;color:var(--txt)}
.am-qui .sv-av,.am-qui .sv-av img,.am-qui .sv-av .av{width:26px;height:26px;border-radius:8px}
.am-qui .sv-n b{font-size:12.5px}.am-qui .sv-n b em{font-style:normal;font-size:9px;font-weight:600;letter-spacing:.05em;text-transform:uppercase;color:var(--a2)}
.am-qui .sv-n i{font-size:10.5px}
.am-l.aoe4 .sv-n i{color:#31d0aa}
.am-act{display:none;gap:2px;flex:none;padding-right:4px}
.am-l:hover .am-act,.am-l:focus-within .am-act{display:flex}
@media (hover:none){ .am-act{display:flex} }
.am-act button{width:24px;height:24px;border-radius:7px;font:inherit;font-size:12px;cursor:pointer;color:var(--muted);background:#1b1724;border:1px solid var(--stroke-2)}
.am-act button:hover{color:var(--txt);border-color:var(--a1)}
@media (max-width:760px){ .suivis.amis{width:min(440px,calc(100vw - 24px))} }

/* logo de clan : dans le chat, les menus, le panneau */
.clan-logo{display:inline-block;flex:none;border-radius:4px;object-fit:cover;vertical-align:-3px}
.clan-logo.txt{display:inline-grid;place-items:center;font-size:8px;font-weight:800;color:#0b0a10;letter-spacing:-.02em;text-transform:uppercase}
.cr-clan{display:inline-flex;margin-right:4px}
.inv > .clan-logo{width:30px;height:30px;border-radius:9px}
.inv > .clan-logo.txt{font-size:12px}
.cm-info{display:flex;flex-direction:column;gap:6px;padding:6px 10px 8px;margin-bottom:4px;border-bottom:1px solid var(--stroke)}
.cm-clan{display:flex !important;align-items:center;gap:7px;padding:0 !important;font-size:12.5px;color:var(--txt)}
.cm-clan em{font-style:normal;margin-left:auto;font-size:9.5px;letter-spacing:.05em;text-transform:uppercase;color:var(--a2)}
.cmenu button.danger{color:#ff9c8a}

/* fiche de clan : chat privé + invitations */
.clan-vie{display:grid;grid-template-columns:minmax(0,1.6fr) minmax(280px,1fr);gap:16px;margin:16px 0}
.clan-vie > .clan-chat:only-child{grid-column:1 / -1}
.clan-vie .ce-compact .ce-log{height:280px}
.clan-inv .inp{width:100%}
.clan-inv-r{display:flex;flex-direction:column;gap:6px;margin-top:10px}
.clan-inv-t{margin:14px 0 6px;font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
.sa-modal textarea{width:100%;padding:10px 12px;border-radius:10px;font:inherit;font-size:13.5px;line-height:1.5;color:var(--txt);
  background:#1b1724;border:1px solid var(--stroke-2);resize:vertical}
.sa-modal textarea:focus{outline:none;border-color:var(--a1)}
@media (max-width:900px){ .clan-vie{grid-template-columns:1fr} }
.cr-clan{align-items:center;gap:4px}
.cr-clan b{font-weight:700;font-size:.92em;letter-spacing:.01em}
/* espace du clan : pas de colonnes de classement dans la liste des membres */
table.clan-social .st{display:none}
#clanOnglets button i{font-style:normal;font-family:var(--mono);font-size:11px;margin-left:5px;opacity:.7}
#clanOnglets button i.alerte{opacity:1;color:#0b1510;background:var(--a2);padding:0 6px;border-radius:20px}
[data-co][hidden]{display:none !important}
.clan-vie{display:block}
.clan-vie > [data-co]{margin-bottom:16px}
.clan-vie .ce-compact .ce-log{height:min(52vh,440px)}
.clan-roles{margin:16px 0}
.clan-roles ul{margin:0;padding-left:18px;display:flex;flex-direction:column;gap:6px;font-size:13px;line-height:1.5;color:var(--muted)}
.clan-roles li b{color:var(--txt)}
.clan-porte{display:flex;align-items:center;gap:16px;flex-wrap:wrap;margin-top:14px;padding-top:14px;border-top:1px solid var(--stroke)}
.clan-porte > div:first-child{display:flex;flex-direction:column;gap:3px;flex:1;min-width:240px}
.clan-porte b{font-size:13.5px}
.cv-etat{margin-top:8px}
.cv-etat{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.cv-post{position:relative;z-index:2}
.sv-inviter .inv-b{padding:5px 10px}
@media (max-width:760px){ .sv-inviter .inv-b span{display:none} .sv-inviter{width:1%;white-space:nowrap} }
.maj-dispo{position:fixed;left:50%;top:14px;transform:translateX(-50%);z-index:900;padding:10px 20px;border-radius:30px;font:inherit;font-size:13px;font-weight:600;cursor:pointer;
  color:#0b1510;background:linear-gradient(135deg,#31d0aa,#5fe0aa);border:1px solid rgba(255,255,255,.25);box-shadow:0 14px 40px -12px rgba(49,208,170,.9)}


/* ===================================================== thème « Communauté » ==
   Défaut du site depuis le 17/09/2026. Les autres thèmes gardent le fond noir
   d'origine ; celui-ci adoucit tout : ardoise bleutée, panneaux plus clairs,
   actions en bleu-violet, vert pour le vivant. */
html[data-theme="communaute"]{--bg:#0f121b;--bg-2:#161a27;--glass:rgba(255,255,255,.06);--glass-2:rgba(255,255,255,.095);
  --stroke:rgba(190,200,255,.13);--stroke-2:rgba(190,200,255,.22);--muted:#aab0c6;--dim:#767d96}
html[data-theme="communaute"] body{background:radial-gradient(1100px 640px at 8% -12%,rgba(91,108,255,.20),transparent 60%),
  radial-gradient(900px 600px at 100% 0%,rgba(61,220,151,.10),transparent 55%),linear-gradient(180deg,#161a27,#0f121b);background-attachment:fixed}
html[data-theme="communaute"] :is(.bt.ok,.pl-join,.inv-b.ok,.sc-pret,.sc-go,.dr-pret,.btn-primary){color:#fff;
  background:linear-gradient(135deg,#5b6cff,#8b5cf6);border-color:rgba(255,255,255,.22);box-shadow:0 10px 26px -12px rgba(91,108,255,.95)}
html[data-theme="communaute"] :is(.bt.ok,.pl-join,.inv-b.ok,.sc-pret,.sc-go,.btn-primary):hover{filter:brightness(1.1);background:linear-gradient(135deg,#5b6cff,#8b5cf6)}
html[data-theme="communaute"] .sc-pret.ok{color:#3ddc97;background:rgba(61,220,151,.12);border-color:rgba(61,220,151,.45);box-shadow:none}
html[data-theme="communaute"] .sc{background:linear-gradient(180deg,rgba(30,35,58,.92),rgba(18,21,33,.95))}
html[data-theme="communaute"] .sa-etapes span.ici i{background:#5b6cff;color:#fff}
html[data-theme="communaute"] :is(.sa-modal-c,.ce-compact .ce-gens,.suivis){background-color:#171b29}
html[data-theme="communaute"] :is(.ph-form,.sa-regl,.mp-filtres,.ce-filtres,.sa-modal) :is(input,select,textarea),
html[data-theme="communaute"] :is(.mb-nom,.sa-ctl button,.am-act button){background-color:#1b2031}
html[data-theme="communaute"] select option{background:#1b2031;color:#f7f4ef}
html[data-theme="communaute"] .dock{background:rgba(22,26,40,.72)}

/* ============================== « Communauté » — verre dépoli, façon iOS ==
   Du vrai verre : des taches de couleur floues DERRIÈRE, des surfaces
   translucides qui les laissent passer (flou + saturation), un liseré clair en
   haut comme une tranche de verre éclairée, une ombre douce dessous. Rien
   d'uni : tout est dégradé. */
html[data-theme="communaute"] body::before{content:'';position:fixed;inset:-20vmax;z-index:-1;pointer-events:none;
  background:
    radial-gradient(38vmax 38vmax at 18% 22%,rgba(91,108,255,.42),transparent 62%),
    radial-gradient(34vmax 34vmax at 84% 14%,rgba(139,92,246,.34),transparent 60%),
    radial-gradient(40vmax 40vmax at 72% 86%,rgba(61,220,151,.20),transparent 62%),
    radial-gradient(30vmax 30vmax at 8% 88%,rgba(255,107,157,.18),transparent 60%);
  filter:blur(40px);animation:verreDerive 38s ease-in-out infinite alternate}
@keyframes verreDerive{to{transform:translate3d(4vmax,-3vmax,0) rotate(8deg) scale(1.06)}}
@media (prefers-reduced-motion:reduce){ html[data-theme="communaute"] body::before{animation:none} }

html[data-theme="communaute"]{--r:26px;--r-m:18px;
  --verre:linear-gradient(135deg,rgba(255,255,255,.115),rgba(255,255,255,.035) 55%,rgba(255,255,255,.06));
  --verre-bord:rgba(255,255,255,.17);
  --verre-ombre:inset 0 1px 0 rgba(255,255,255,.28),inset 0 -1px 0 rgba(255,255,255,.05),inset 1px 0 0 rgba(255,255,255,.06),0 26px 64px -28px rgba(3,6,20,.85)}
html[data-theme="communaute"] :is(.panel,.sa-etapes,.sa-regl,.sa-eq,.sc,.ph-liste,.pl-liste,.ph-form,.ph-chat-o,.mp-alerte,.sa-dem,.clan-vcard){
  background:radial-gradient(520px 180px at 0% 0%,rgba(255,255,255,.075),transparent 62%),var(--verre);
  border:1px solid var(--verre-bord);
  -webkit-backdrop-filter:blur(30px) saturate(190%);backdrop-filter:blur(30px) saturate(190%);
  box-shadow:var(--verre-ombre)}
html[data-theme="communaute"] .sa-eq.eq0{background:linear-gradient(160deg,rgba(91,160,255,.20),rgba(255,255,255,.04) 60%);border-color:rgba(125,192,255,.38)}
html[data-theme="communaute"] .sa-eq.eq1{background:linear-gradient(160deg,rgba(255,138,92,.20),rgba(255,255,255,.04) 60%);border-color:rgba(255,157,122,.38)}
html[data-theme="communaute"] .sc{background:radial-gradient(420px 220px at 50% 0%,rgba(91,108,255,.22),transparent 70%),var(--verre)}
html[data-theme="communaute"] .sc.bans{background:var(--verre)}
html[data-theme="communaute"] :is(.ph-l,.pl-l){border-top-color:rgba(255,255,255,.09)}
html[data-theme="communaute"] :is(.sa-j,.sa-res,.mb-civ,.dr-slot,.am-l:hover,.ph-l:hover){background:rgba(255,255,255,.06)}
html[data-theme="communaute"] .mb-civ{border-color:rgba(255,255,255,.13);box-shadow:inset 0 1px 0 rgba(255,255,255,.14)}

/* barres flottantes : dock, panneau des amis, en-tête — le verre le plus clair */
html[data-theme="communaute"] :is(.dock,.suivis,.cmenu,.sa-modal-c){
  background:linear-gradient(135deg,rgba(255,255,255,.16),rgba(255,255,255,.06));
  border:1px solid rgba(255,255,255,.22);
  -webkit-backdrop-filter:blur(40px) saturate(210%);backdrop-filter:blur(40px) saturate(210%);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.35),inset 0 -1px 0 rgba(255,255,255,.06),0 30px 70px -24px rgba(3,6,20,.9)}
html[data-theme="communaute"] .dock{border-radius:30px}
html[data-theme="communaute"] .dock a .ic{background:linear-gradient(145deg,rgba(255,255,255,.18),rgba(255,255,255,.05));border:1px solid rgba(255,255,255,.2);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.3)}
html[data-theme="communaute"] .dock a.on .ic{background:linear-gradient(135deg,#5b6cff,#8b5cf6);border-color:rgba(255,255,255,.4);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.5),0 10px 24px -8px rgba(91,108,255,.95)}
html[data-theme="communaute"] .sa-modal{background:rgba(8,10,20,.45);-webkit-backdrop-filter:blur(14px) saturate(140%);backdrop-filter:blur(14px) saturate(140%)}

/* boutons : secondaires en verre, principaux en dégradé lumineux avec reflet */
html[data-theme="communaute"] :is(.bt,.inv-b,.btn-ghost,.pl-copie,.sa-retour,.sa-badge,.ce-gens-b,.sa-plus){
  background:linear-gradient(145deg,rgba(255,255,255,.14),rgba(255,255,255,.04));border-color:rgba(255,255,255,.2);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.22);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px)}
html[data-theme="communaute"] :is(.bt,.inv-b,.btn-ghost,.pl-copie):hover{background:linear-gradient(145deg,rgba(255,255,255,.22),rgba(255,255,255,.08))}
html[data-theme="communaute"] :is(.bt.ok,.pl-join,.inv-b.ok,.sc-pret,.sc-go,.dr-pret,.btn-primary){
  background:linear-gradient(135deg,#6f7dff 0%,#5b6cff 40%,#8b5cf6 100%);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.45),inset 0 -8px 16px -10px rgba(40,20,120,.55),0 12px 30px -12px rgba(91,108,255,.95)}
html[data-theme="communaute"] .bt.danger{background:linear-gradient(145deg,rgba(255,120,110,.20),rgba(255,120,110,.05));border-color:rgba(255,150,135,.4)}

/* champs de saisie : du verre, pas un bloc opaque (les <option> gardent un fond plein pour rester lisibles) */
html[data-theme="communaute"] :is(.ph-form,.sa-regl,.mp-filtres,.ce-filtres,.sa-modal,.ce-form,.clan-inv) :is(input,select,textarea),
html[data-theme="communaute"] :is(.mb-nom,.inp){background-color:rgba(255,255,255,.07);border-color:rgba(255,255,255,.18);
  box-shadow:inset 0 1px 2px rgba(0,0,0,.35)}
html[data-theme="communaute"] .ce-log{background:rgba(8,10,22,.35);border-color:rgba(255,255,255,.12)}
html[data-theme="communaute"] :is(.tabs,.langsel,.sa-etapes){-webkit-backdrop-filter:blur(24px) saturate(180%);backdrop-filter:blur(24px) saturate(180%)}
html[data-theme="communaute"] :is(.tabs button.on,.langsel button.on,.ph-chat-o button.on){
  background:linear-gradient(135deg,rgba(111,125,255,.55),rgba(139,92,246,.45));box-shadow:inset 0 1px 0 rgba(255,255,255,.3)}
/* téléphones : un flou plus léger, le verre coûte cher à dessiner */
@media (max-width:760px){
  html[data-theme="communaute"] :is(.panel,.sa-etapes,.sa-regl,.sa-eq,.sc,.ph-liste,.pl-liste){-webkit-backdrop-filter:blur(16px) saturate(170%);backdrop-filter:blur(16px) saturate(170%)}
  html[data-theme="communaute"] body::before{animation:none;filter:blur(30px)}
}

/* notifications : cloche et réglages du panneau */
.am-cloche{margin-left:4px;padding:2px 6px;border-radius:8px;font-size:13px;cursor:pointer;line-height:1}
.am-cloche:hover{background:rgba(255,255,255,.12)}
.am-regl{display:flex;flex-direction:column;gap:6px;padding:10px 12px;border-top:1px solid var(--stroke)}
.am-regl button{display:flex;align-items:center;gap:10px;padding:4px 0;font:inherit;font-size:12.5px;text-align:left;color:var(--txt);background:none;border:0;cursor:pointer}
.am-regl button i{flex:none;position:relative;width:34px;height:20px;border-radius:20px;background:rgba(255,255,255,.14);border:1px solid var(--stroke-2);transition:background .15s}
.am-regl button i::after{content:'';position:absolute;top:2px;left:2px;width:14px;height:14px;border-radius:50%;background:#fff;transition:transform .15s}
.am-regl button.on i{background:#3ddc97;border-color:transparent}
.am-regl button.on i::after{transform:translateX(14px)}
.am-regl p{margin:2px 0 0;font-size:11.5px;line-height:1.45;color:var(--muted)}
/* pastille de mise à jour : discrète, en haut, jamais un rechargement forcé */
.maj-dispo{display:inline-flex;align-items:center;gap:8px;top:12px;padding:8px 16px;font-size:12.5px;color:#fff;
  background:linear-gradient(135deg,#5b6cff,#8b5cf6);box-shadow:0 14px 40px -12px rgba(91,108,255,.95)}
.maj-dispo i{width:8px;height:8px;border-radius:50%;background:#3ddc97;box-shadow:0 0 0 0 rgba(61,220,151,.7);animation:svPouls 2s infinite}
/* bandeau d'installation de l'application */
.app-bandeau{position:fixed;left:50%;top:12px;transform:translateX(-50%);z-index:850;display:flex;align-items:center;gap:12px;
  width:min(560px,calc(100vw - 24px));padding:10px 12px;border-radius:20px;color:var(--txt);
  background:linear-gradient(135deg,rgba(255,255,255,.18),rgba(255,255,255,.07));border:1px solid rgba(255,255,255,.24);
  -webkit-backdrop-filter:blur(36px) saturate(200%);backdrop-filter:blur(36px) saturate(200%);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.35),0 26px 60px -22px rgba(3,6,20,.9)}
.app-bandeau img{width:40px;height:40px;border-radius:11px;flex:none}
.app-bandeau div{display:flex;flex-direction:column;min-width:0;flex:1;line-height:1.35}
.app-bandeau b{font-size:13.5px}.app-bandeau span{font-size:11.5px;color:var(--muted)}
.app-bandeau button{flex:none;font:inherit;font-size:12.5px;font-weight:600;cursor:pointer;border-radius:11px;padding:8px 14px;color:var(--txt);
  background:rgba(255,255,255,.1);border:1px solid rgba(255,255,255,.2)}
.app-bandeau button.ok{color:#fff;background:linear-gradient(135deg,#5b6cff,#8b5cf6);border-color:rgba(255,255,255,.3)}
.app-bandeau button[data-x]{padding:6px 10px;font-size:15px;line-height:1}
/* la pastille de mise à jour va en haut à droite : elle ne croise jamais le bandeau d'installation (centré) */
.maj-dispo{left:auto;right:16px;top:74px;transform:none}
@media (max-width:760px){ .maj-dispo{top:auto;bottom:150px;right:12px} .app-bandeau{top:8px} }

/* ========================= « Communauté » — retouches du 17/09 au soir =====
   1. Moins de gris : le fond passe à un indigo profond et le verre se teinte de
      bleu-violet au lieu de blanc (le blanc sur ardoise donnait du gris).
   2. Plus de clignotement au défilement (iPad) : Safari scintille quand des
      surfaces floutées sont EMBOÎTÉES, quand un calque fixe est flouté et animé,
      et avec background-attachment:fixed. On retire les trois. */
html[data-theme="communaute"]{--bg:#0a0c22;--bg-2:#12143a;--muted:#b3b8de;--dim:#7d83b0;
  --stroke:rgba(150,160,255,.16);--stroke-2:rgba(160,170,255,.28);
  --glass:rgba(120,130,255,.09);--glass-2:rgba(130,140,255,.15);
  --verre:linear-gradient(135deg,rgba(125,135,255,.20),rgba(150,100,255,.07) 55%,rgba(90,110,255,.12));
  --verre-bord:rgba(165,175,255,.26)}
html[data-theme="communaute"] body{background:linear-gradient(180deg,#12143a 0%,#0c0e28 45%,#0a0c22 100%);background-attachment:scroll}
html[data-theme="communaute"] body::before{inset:0;filter:none;animation:none;transform:translateZ(0);
  background:
    radial-gradient(60vmax 60vmax at 12% 8%,rgba(91,108,255,.46),transparent 60%),
    radial-gradient(52vmax 52vmax at 92% 4%,rgba(168,85,247,.38),transparent 58%),
    radial-gradient(60vmax 60vmax at 80% 96%,rgba(34,197,180,.20),transparent 60%),
    radial-gradient(46vmax 46vmax at 4% 96%,rgba(255,95,160,.20),transparent 58%)}
/* surfaces POSÉES DANS un panneau : teintées, mais jamais floutées une seconde fois */
html[data-theme="communaute"] .panel :is(.ph-liste,.pl-liste,.ph-form,.mp-alerte,.sa-dem,.clan-vcard,.tabs,.ph-chat-o,.ce-log,.panel),
html[data-theme="communaute"] :is(.sa-eq,.sc) :is(.sa-j,.mb-civ,.dr-slot,.bt,.sa-plus,.sc-pret){-webkit-backdrop-filter:none;backdrop-filter:none}
html[data-theme="communaute"] .panel :is(.ph-liste,.pl-liste,.ph-form){background:rgba(10,12,40,.35);box-shadow:inset 0 1px 0 rgba(255,255,255,.08)}
html[data-theme="communaute"] :is(.bt,.inv-b,.btn-ghost,.pl-copie,.sa-retour,.sa-badge,.ce-gens-b,.sa-plus){-webkit-backdrop-filter:none;backdrop-filter:none;
  background:linear-gradient(145deg,rgba(150,160,255,.22),rgba(130,110,255,.08));border-color:rgba(170,180,255,.30)}
html[data-theme="communaute"] :is(.sa-j,.sa-res,.mb-civ,.dr-slot,.am-l:hover,.ph-l:hover){background:rgba(130,140,255,.10)}
html[data-theme="communaute"] :is(.dock,.suivis,.cmenu,.sa-modal-c){background:linear-gradient(135deg,rgba(140,150,255,.26),rgba(120,90,255,.12));border-color:rgba(180,190,255,.32)}

/* Écrans tactiles (iPad, téléphones) : le flou coûte cher et scintille en défilant.
   Seules les barres fixes (menu du bas, panneau des amis, fenêtres) gardent un flou léger ;
   le reste devient un verre teinté, plein, sans filtre. */
@media (hover:none),(pointer:coarse){
  html[data-theme="communaute"] :is(.panel,.sa-etapes,.sa-regl,.sa-eq,.sc,.ph-liste,.pl-liste,.tabs,.langsel){
    -webkit-backdrop-filter:none !important;backdrop-filter:none !important}
  html[data-theme="communaute"] :is(.panel,.sa-etapes,.sa-regl,.sc){
    background:linear-gradient(135deg,rgba(40,45,110,.86),rgba(26,24,74,.90))}
  html[data-theme="communaute"] .sa-eq.eq0{background:linear-gradient(160deg,rgba(40,80,150,.85),rgba(24,26,74,.9) 60%)}
  html[data-theme="communaute"] .sa-eq.eq1{background:linear-gradient(160deg,rgba(130,70,70,.80),rgba(30,24,70,.9) 60%)}
  html[data-theme="communaute"] :is(.dock,.suivis){-webkit-backdrop-filter:blur(18px) saturate(160%);backdrop-filter:blur(18px) saturate(160%);
    background:linear-gradient(135deg,rgba(48,52,130,.88),rgba(34,28,96,.90))}
  html[data-theme="communaute"] body::before{position:absolute;height:100vh}
  .fade-in{animation:none !important}
}
/* Tous thèmes, écrans tactiles : aucun flou sur ce qui défile. Des dizaines de surfaces
   floutées (tuiles, boutons, en-têtes de tableau collants) font scintiller Safari sur iPad. */
@media (hover:none),(pointer:coarse){
  *:not(.dock):not(.suivis):not(header.top):not(.sa-modal):not(.sa-modal-c):not(.cmenu):not(.app-bandeau){
    -webkit-backdrop-filter:none !important;backdrop-filter:none !important}
  header.top{-webkit-backdrop-filter:blur(14px) !important;backdrop-filter:blur(14px) !important}
}
/* fiche du clan : ses liens en grand, et les chaînes Twitch de ses membres */
.clan-liens{display:flex;flex-wrap:wrap;gap:12px;margin-top:16px;align-items:stretch}
.cl-gros{display:flex;flex-direction:column;gap:2px;min-width:230px;flex:1 1 230px;padding:14px 16px;border-radius:16px;color:#fff;text-decoration:none;
  border:1px solid rgba(255,255,255,.22);box-shadow:inset 0 1px 0 rgba(255,255,255,.3)}
.cl-gros.s-discord{background:linear-gradient(135deg,#5865f2,#7983f5)}
.cl-gros.s-twitch{background:linear-gradient(135deg,#9146ff,#b07cff)}
.cl-gros b{font-size:16px;font-family:'Space Grotesk',inherit}
.cl-gros span{font-size:12.5px;opacity:.92}.cl-gros i{font-style:normal;font-size:11.5px;opacity:.75;font-family:var(--mono)}
.cl-gros:hover{filter:brightness(1.08)}
.cl-chaines{flex:1 1 100%;display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.cl-chaines > .sub{flex-basis:100%;font-size:11px;letter-spacing:.08em;text-transform:uppercase}
.cl-chaines a{display:inline-flex;align-items:center;gap:8px;padding:5px 12px 5px 5px;border-radius:30px;color:var(--txt);
  background:rgba(145,70,255,.16);border:1px solid rgba(169,112,255,.4)}
.cl-chaines a img,.cl-chaines a .av{width:24px;height:24px;border-radius:50%}
.cl-chaines a b{font-size:12.5px}.cl-chaines a u{text-decoration:none;font-size:11.5px;color:#c9a8ff;font-family:var(--mono)}

/* =============================================================== mes jeux == */
.jeu-choix{display:inline-flex;align-items:center;gap:8px;flex:none;padding:4px 10px 4px 4px;border-radius:12px;font-size:12.5px;font-weight:600;color:var(--txt);
  background:linear-gradient(145deg,rgba(150,160,255,.20),rgba(130,110,255,.07));border:1px solid var(--stroke-2);white-space:nowrap}
.jeu-choix:hover{border-color:var(--a1)}
.jeu-choix img{height:26px;width:auto;border-radius:7px;display:block}
.jeu-choix svg{color:var(--muted)}
@media (max-width:900px){ .jeu-choix span{display:none} }
.jx-grille{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:12px}
.jx-c{position:relative;display:flex;flex-direction:column;gap:10px;padding:10px;border-radius:18px;border:1px solid var(--stroke);background:rgba(130,140,255,.07);min-width:0}
.jx-c.ok{border-color:rgba(61,220,151,.5);background:linear-gradient(160deg,rgba(61,220,151,.14),rgba(130,140,255,.06))}
.jx-c.demande{border-color:color-mix(in srgb,var(--a1) 60%,transparent)}
.jx-img{aspect-ratio:460/215;border-radius:12px;overflow:hidden;background:linear-gradient(135deg,rgba(91,108,255,.35),rgba(139,92,246,.25))}
.jx-img img{width:100%;height:100%;object-fit:cover;display:block}
.jx-t{display:flex;flex-direction:column;gap:2px;min-width:0;padding:0 4px}
.jx-t b{font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.jx-t i{font-style:normal;font-size:12px;color:var(--muted)}
.jx-c .bt{align-self:stretch}
.jx-n{position:absolute;top:16px;right:16px;padding:2px 9px;border-radius:20px;font-family:var(--mono);font-size:11.5px;font-weight:700;color:#fff;
  background:linear-gradient(135deg,#5b6cff,#8b5cf6);box-shadow:0 6px 16px -6px rgba(0,0,0,.8)}
@media (max-width:1500px){ .jeu-choix span{display:none} }
/* multi-jeux : monogramme de civilisation (jeux sans étendards), grille dense pour les 59 civs d'AoE2 */
.civ-mono{display:inline-grid;place-items:center;flex:none;border-radius:6px;font-size:10px;font-weight:800;letter-spacing:.04em;text-transform:uppercase;color:#fff;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.3)}
.dr-slot .civ-mono{width:100% !important;height:100% !important;border-radius:0;filter:grayscale(.4) brightness(.8)}
.sa-recap i .civ-mono{width:100% !important;height:100% !important;border-radius:0}
.sc.bans .mb-grille.dense{grid-template-columns:repeat(auto-fill,minmax(78px,1fr));gap:5px;max-height:52vh;overflow-y:auto}
.sc.bans .mb-grille.dense .mb-civ{padding:6px 3px 5px}
.sc.bans .mb-grille.dense .mb-civ span{font-size:10.5px;min-height:1.2em;-webkit-line-clamp:1}
/* multi-jeux : monogramme de civilisation (jeux sans étendards), grille dense pour les 59 civs d'AoE2 */
.civ-mono{display:inline-grid;place-items:center;flex:none;border-radius:6px;font-size:10px;font-weight:800;letter-spacing:.04em;text-transform:uppercase;color:#fff;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.3)}
.dr-slot .civ-mono,.sa-recap i .civ-mono{width:100% !important;height:100% !important;border-radius:0}
.sc.bans .mb-grille.dense{grid-template-columns:repeat(auto-fill,minmax(78px,1fr));gap:5px;max-height:52vh;overflow-y:auto}
.sc.bans .mb-grille.dense .mb-civ{padding:6px 3px 5px}
.sc.bans .mb-grille.dense .mb-civ span{font-size:10.5px;min-height:1.2em;-webkit-line-clamp:1}
.civ-mono{line-height:1;align-content:center}
.sc.bans .mb-civ .civ-mono{width:64px !important;height:38px !important;font-size:11px}
/* menu des jeux (en-tête), classement et fiche des jeux sans collecteur */
.jeu-menu{min-width:320px;padding:8px}
.jeu-menu button{display:flex !important;align-items:center;gap:10px;width:100%;padding:6px 8px !important}
.jeu-menu button img{height:30px;width:auto;border-radius:7px;flex:none}
.jeu-menu button span{flex:1;text-align:left;font-size:13px}
.jeu-menu button.on{background:linear-gradient(135deg,rgba(111,125,255,.4),rgba(139,92,246,.3))}
.jeu-menu button i{font-style:normal;color:#3ddc97}
.jeu-menu a{display:block;margin-top:6px;padding:8px;border-top:1px solid var(--stroke);font-size:12px;color:var(--muted)}
.jeu-choix{cursor:pointer}
.cj-pages{display:flex;align-items:center;justify-content:center;gap:14px;margin-top:16px}
.pj-tete{display:flex;align-items:center;gap:16px;flex-wrap:wrap}.pj-tete > div{flex:1;min-width:0}
.pl-nb b.g{color:#3ddc97}.pl-nb b.p{color:#ff8f98}
/* un seul bouton de connexion : celui de l'en-tête. Ailleurs, une simple indication. */
.cnx-indice{display:inline-block;font-size:12.5px;color:var(--muted);padding:6px 12px;border-radius:10px;border:1px dashed var(--stroke-2)}
/* le bandeau d'installation se pose EN BAS, au-dessus du menu : en haut il recouvrait « Connexion Steam » et bloquait le clic */
.app-bandeau{top:auto !important;bottom:112px}
@media (max-width:760px){ .app-bandeau{bottom:104px} }
/* accueil général du Hub */
.jeu-general{display:inline-grid;place-items:center;width:26px;height:26px;border-radius:8px;color:#fff;font-size:13px;background:linear-gradient(135deg,#5b6cff,#8b5cf6)}
.jeu-general.gros{width:30px;height:30px}
.hub-moi{display:flex;align-items:center;gap:16px;flex-wrap:wrap}
.hub-moi > img,.hub-moi > .av{width:64px;height:64px;border-radius:18px;flex:none}
.hub-moi > div{flex:1;min-width:200px;display:flex;flex-direction:column;gap:4px}
.hub-moi h2{font-size:24px}
.hub-jeux{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:14px}
.hub-jeu{position:relative;display:flex;flex-direction:column;gap:0;padding:0;overflow:hidden;border-radius:22px;text-align:left;font:inherit;cursor:pointer;color:var(--txt);
  background:var(--verre, var(--glass));border:1px solid var(--verre-bord, var(--stroke-2));box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 22px 50px -26px rgba(3,6,20,.9);transition:transform .15s}
.hub-jeu:hover{transform:translateY(-3px)}
.hub-jeu img{width:100%;aspect-ratio:460/215;object-fit:cover;display:block}
.hub-jeu span{display:flex;flex-direction:column;gap:3px;padding:14px 16px 6px}
.hub-jeu b{font-size:15.5px}.hub-jeu i{font-style:normal;font-size:12.5px;color:var(--muted)}
.hub-jeu em{font-style:normal;align-self:flex-end;margin:0 14px 14px;padding:7px 16px;border-radius:11px;font-size:12.5px;font-weight:700;color:#fff;background:linear-gradient(135deg,#5b6cff,#8b5cf6)}
.jeu-choix span.jeu-general{display:inline-grid !important}
.ch-jeux{display:flex;flex-wrap:wrap;gap:6px;margin:6px 0}
.ch-jeux span{display:inline-flex;align-items:center;gap:6px;padding:3px 10px 3px 3px;border-radius:20px;font-size:11.5px;color:var(--txt);background:rgba(130,140,255,.14);border:1px solid var(--stroke-2)}
.ch-jeux img{height:18px;width:auto;border-radius:20px}
.clan-jeux-choix{display:flex;flex-wrap:wrap;gap:8px}
.clan-jeux-choix label{display:inline-flex;align-items:center;gap:7px;padding:7px 12px;border-radius:11px;font-size:12.5px;cursor:pointer;background:rgba(130,140,255,.10);border:1px solid var(--stroke-2)}
.clan-jeux-choix input{accent-color:#5b6cff}
/* page Twitch par jeu */
.tw-grille{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:14px}
.tw-c{display:flex;flex-direction:column;gap:4px;color:var(--txt);min-width:0}
.tw-img{position:relative;display:block;aspect-ratio:16/9;border-radius:14px;overflow:hidden;background:rgba(130,140,255,.12);border:1px solid var(--stroke)}
.tw-img img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .2s}
.tw-c:hover .tw-img img{transform:scale(1.04)}
.tw-img i{position:absolute;left:8px;bottom:8px;font-style:normal;font-size:11.5px;font-weight:700;padding:2px 8px;border-radius:20px;color:#fff;background:rgba(220,40,60,.92)}
.tw-img u{position:absolute;right:8px;top:8px;text-decoration:none;font-size:10px;font-weight:700;padding:2px 6px;border-radius:6px;color:#fff;background:rgba(0,0,0,.6)}
.tw-c b{font-size:13.5px;margin-top:4px}
.tw-t{font-size:12px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.field[hidden]{display:none}
.pl-l.sv .pl-t i{font-family:var(--mono);font-size:10.5px}
.sa-regl label[hidden]{display:none}

/* ---- Serveurs (Counter-Strike) : ligne compacte, ping estimé ---- */
.srv-liste{border:1px solid var(--line);border-radius:14px;overflow:hidden}
.srv-l{display:grid;grid-template-columns:74px minmax(0,1fr) 62px auto;gap:4px 14px;align-items:center;padding:9px 14px;border-top:1px solid var(--line)}
.srv-l:first-child{border-top:0}
.srv-l:nth-child(even){background:rgba(255,255,255,.018)}
.srv-l:hover{background:var(--glass-2)}
.srv-p{display:flex;align-items:center;gap:7px;justify-content:space-between}
.srv-ping{font-family:var(--mono);font-size:12.5px;font-weight:700;white-space:nowrap}
.srv-ping i{font-style:normal;font-weight:500;font-size:10px;opacity:.7;margin-left:1px}
.srv-ping.bon{color:#3ddc97}.srv-ping.moyen{color:#f5c451}.srv-ping.loin{color:#ff8f98}.srv-ping.nul{color:var(--dim)}
.srv-n{display:flex;flex-direction:column;min-width:0;line-height:1.35}
.srv-n b{font-size:13.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.srv-n i{font-style:normal;font-size:11.5px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.srv-n s{text-decoration:none;font-family:var(--mono);font-size:10.5px;opacity:.8}
.srv-j{font-family:var(--mono);text-align:right;white-space:nowrap}
.srv-j b{font-size:15px;color:#31d0aa}.srv-j.plein b{color:var(--a2)}
.srv-j i{font-style:normal;font-size:12px;color:var(--muted)}
.srv-a{display:flex;gap:8px;align-items:center}
.srv-a .pl-join,.srv-a .pl-copie{margin-left:0}
select.sv-tri{max-width:190px}
select.sv-tri option{background:#1b1f3a;color:#fff}
@media (max-width:640px){
  .srv-l{grid-template-columns:52px minmax(0,1fr) auto;gap:2px 10px;padding:9px 10px}
  .srv-p{flex-direction:column;align-items:flex-start;gap:3px;grid-row:1 / span 2}
  .srv-n{grid-column:2;grid-row:1 / span 2}
  .srv-n s{display:none}
  .srv-j{grid-column:3;grid-row:1;font-size:12px}
  .srv-j b{font-size:13.5px}
  .srv-a{grid-column:3;grid-row:2;justify-content:flex-end}
  .srv-a .pl-copie{display:none}
  .srv-a .pl-join{padding:5px 11px}
}
/* salle Counter-Strike : choix du serveur par l'hôte */
.sc-srv{display:flex;gap:8px;justify-content:center;flex-wrap:wrap;margin-top:14px}
.sc-srv .inp{max-width:220px;font-family:var(--mono)}
.sc-s .mono{font-family:var(--mono);font-size:12px}
.sc-s em.ok{font-style:normal;color:#3ddc97}
/* badge KRP Hub : le « K » blanc sur le dégradé du thème, comme l'icône de l'application */
html[data-theme="communaute"] .brand .mark{background:linear-gradient(135deg,#6d7cff,#7c5cf6 55%,#a24ee0);color:#fff;font-size:18px;font-weight:800;letter-spacing:-.02em}

/* logo KRP Hub en SVG dans l'en-tête : le dégradé est dans le vecteur, plus de fond CSS */
html[data-theme="communaute"] .brand .mark{background:none;padding:0}
.brand .mark .mark-svg{width:36px;height:36px;display:block;filter:drop-shadow(0 4px 10px rgba(109,124,255,.35))}

/* glyphes vectoriels (à la place des émoticônes) */
.gl{width:1.05em;height:1.05em;vertical-align:-.18em;flex:none}
.cb-top10 .gl{color:#f5c451}
.am-cloche .gl{width:15px;height:15px;vertical-align:-3px}
.me-out .gl{width:15px;height:15px;vertical-align:-3px}
.jeu-general .gl{width:14px;height:14px;vertical-align:0}

/* ================= Communauté, révision « nuit » (18/09/2026) =================
   Demande : plus noir, plus de contraste, un peu de couleur, verre façon iOS 27.
   Le fond passe presque au noir (bleu nuit), le texte au blanc franc ; la couleur
   ne vient plus des surfaces mais de deux halos discrets derrière et des accents
   (indigo, violet, menthe). Le verre : surface très sombre et translucide, liseré
   clair fin en haut, reflet spéculaire dans l'angle, ombre nette dessous. */
html[data-theme="communaute"]{--bg:#05060c;--bg-2:#0a0c16;--txt:#f6f7ff;--muted:#b6bcd6;--dim:#7f86a3;
  --glass:rgba(255,255,255,.045);--glass-2:rgba(255,255,255,.08);--stroke:rgba(200,208,255,.12);--stroke-2:rgba(200,208,255,.22);
  --verre:linear-gradient(135deg,rgba(255,255,255,.075),rgba(255,255,255,.025) 50%,rgba(255,255,255,.045));
  --verre-bord:rgba(255,255,255,.14);
  --verre-ombre:inset 0 1px 0 rgba(255,255,255,.22),inset 0 -1px 0 rgba(255,255,255,.03),0 24px 60px -30px rgba(0,0,0,.95)}
html[data-theme="communaute"] body{color:var(--txt);background:linear-gradient(180deg,#0a0c16,#05060c);background-attachment:fixed}
html[data-theme="communaute"] body::before{
  background:
    radial-gradient(40vmax 40vmax at 14% 18%,rgba(91,108,255,.30),transparent 62%),
    radial-gradient(34vmax 34vmax at 86% 10%,rgba(139,92,246,.24),transparent 60%),
    radial-gradient(38vmax 38vmax at 74% 88%,rgba(61,220,151,.12),transparent 62%),
    radial-gradient(28vmax 28vmax at 6% 90%,rgba(255,107,157,.10),transparent 60%);
  filter:blur(46px)}
html[data-theme="communaute"] :is(.panel,.sa-etapes,.sa-regl,.sa-eq,.sc,.ph-liste,.pl-liste,.ph-form,.ph-chat-o,.mp-alerte,.sa-dem,.clan-vcard,.srv-liste){
  background:radial-gradient(420px 160px at 0% 0%,rgba(255,255,255,.06),transparent 62%),var(--verre);
  border:1px solid var(--verre-bord);box-shadow:var(--verre-ombre)}
html[data-theme="communaute"] :is(.dock,.suivis,.cmenu,.sa-modal-c){
  background:linear-gradient(135deg,rgba(28,30,52,.78),rgba(14,15,30,.84));
  border:1px solid rgba(255,255,255,.18);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.28),inset 0 -1px 0 rgba(255,255,255,.04),0 30px 70px -24px rgba(0,0,0,.95)}
html[data-theme="communaute"] header.top{background:linear-gradient(180deg,rgba(10,12,22,.82),rgba(10,12,22,.62));border-bottom:1px solid rgba(255,255,255,.08)}
html[data-theme="communaute"] .sc{background:radial-gradient(420px 220px at 50% 0%,rgba(91,108,255,.18),transparent 70%),var(--verre)}
html[data-theme="communaute"] :is(.sa-modal-c,.ce-compact .ce-gens,.suivis){background-color:#0d0f1c}
html[data-theme="communaute"] :is(.ph-form,.sa-regl,.mp-filtres,.ce-filtres,.sa-modal) :is(input,select,textarea),
html[data-theme="communaute"] :is(.mb-nom,.sa-ctl button,.am-act button),
html[data-theme="communaute"] .inp{background-color:#0e1020;border-color:rgba(255,255,255,.16);color:var(--txt)}
html[data-theme="communaute"] select option{background:#0e1020;color:#fff}
html[data-theme="communaute"] .sub{color:var(--muted)}
html[data-theme="communaute"] .sa-eq.eq0{background:linear-gradient(160deg,rgba(91,160,255,.16),rgba(255,255,255,.03) 60%);border-color:rgba(125,192,255,.34)}
html[data-theme="communaute"] .sa-eq.eq1{background:linear-gradient(160deg,rgba(255,138,92,.16),rgba(255,255,255,.03) 60%);border-color:rgba(255,157,122,.34)}
html[data-theme="communaute"] :is(.sa-j,.sa-res,.mb-civ,.dr-slot,.am-l:hover,.ph-l:hover,.srv-l:hover){background:rgba(255,255,255,.055)}
html[data-theme="communaute"] :is(.ph-l,.pl-l,.srv-l){border-top-color:rgba(255,255,255,.07)}
/* accents : les boutons d'action gardent le dégradé, avec un halo net */
html[data-theme="communaute"] :is(.bt.ok,.pl-join,.inv-b.ok,.sc-pret,.sc-go,.dr-pret,.btn-primary){box-shadow:0 8px 24px -10px rgba(109,124,255,.9),inset 0 1px 0 rgba(255,255,255,.35)}
html[data-theme="communaute"] .tabs button.on{background:linear-gradient(135deg,rgba(109,124,255,.9),rgba(139,92,246,.9));color:#fff;border-color:rgba(255,255,255,.25)}
html[data-theme="communaute"] .dock a.on .ic{background:linear-gradient(135deg,#6d7cff,#8b5cf6);color:#fff;box-shadow:0 8px 20px -8px rgba(109,124,255,.9)}
/* tactile : mêmes teintes, opaques (pas de flou sur ce qui défile) */
@media (hover:none),(pointer:coarse){
  html[data-theme="communaute"] :is(.panel,.sa-etapes,.sa-regl,.sc,.srv-liste,.pl-liste,.ph-liste){background:linear-gradient(135deg,#141733,#0c0e1f)}
  html[data-theme="communaute"] .sa-eq.eq0{background:linear-gradient(160deg,rgba(40,80,150,.55),#0c0e1f 60%)}
  html[data-theme="communaute"] .sa-eq.eq1{background:linear-gradient(160deg,rgba(130,70,70,.5),#0c0e1f 60%)}
  html[data-theme="communaute"] :is(.dock,.suivis){background:linear-gradient(135deg,rgba(30,33,68,.94),rgba(16,17,38,.96))}
}

/* ================= Communauté, aplats (18/09/2026) =================
   Demande : des couleurs UNIES — plus de dégradés qui tirent du noir au blanc.
   Chaque surface a une seule teinte, le relief vient des bords et de l'ombre. */
html[data-theme="communaute"]{--verre:#10121f;--verre-bord:rgba(255,255,255,.10);
  --verre-ombre:0 18px 40px -24px rgba(0,0,0,.9);--glass:#151830;--glass-2:#1a1e3a}
html[data-theme="communaute"] body{background:#07080f}
html[data-theme="communaute"] body::before{display:none}
html[data-theme="communaute"] :is(.panel,.sa-etapes,.sa-regl,.sa-eq,.sc,.ph-liste,.pl-liste,.ph-form,.ph-chat-o,.mp-alerte,.sa-dem,.clan-vcard,.srv-liste){
  background:#10121f;border:1px solid rgba(255,255,255,.10);box-shadow:0 18px 40px -24px rgba(0,0,0,.9);
  -webkit-backdrop-filter:none;backdrop-filter:none}
html[data-theme="communaute"] .sc,html[data-theme="communaute"] .sc.bans{background:#13162a}
html[data-theme="communaute"] :is(.dock,.suivis,.cmenu,.sa-modal-c){background:#161a33;border:1px solid rgba(255,255,255,.14);
  box-shadow:0 24px 50px -20px rgba(0,0,0,.95);-webkit-backdrop-filter:none;backdrop-filter:none}
html[data-theme="communaute"] header.top{background:#0b0d18;border-bottom:1px solid rgba(255,255,255,.08);-webkit-backdrop-filter:none !important;backdrop-filter:none !important}
html[data-theme="communaute"] .dock a .ic{background:#1f2445;border:1px solid rgba(255,255,255,.12);box-shadow:none}
html[data-theme="communaute"] .dock a.on .ic{background:#6d6cff;color:#fff;box-shadow:none}
html[data-theme="communaute"] :is(.bt.ok,.pl-join,.inv-b.ok,.sc-pret,.sc-go,.dr-pret,.btn-primary){background:#6d6cff;border-color:#8483ff;box-shadow:none;color:#fff}
html[data-theme="communaute"] :is(.bt.ok,.pl-join,.inv-b.ok,.sc-pret,.sc-go,.btn-primary):hover{background:#7c7bff;filter:none}
html[data-theme="communaute"] .sc-pret.ok{background:#164a38;border-color:#2b8a63;color:#7ff0bd}
html[data-theme="communaute"] .tabs button.on{background:#6d6cff;color:#fff;border-color:#8483ff}
html[data-theme="communaute"] :is(.bt,.inv-b,.btn-ghost,.pl-copie,.sa-retour,.sa-badge,.ce-gens-b,.sa-plus){background:#1c2040;border-color:rgba(255,255,255,.14);box-shadow:none;
  -webkit-backdrop-filter:none;backdrop-filter:none}
html[data-theme="communaute"] :is(.bt,.inv-b,.btn-ghost,.pl-copie):hover{background:#252a52}
html[data-theme="communaute"] .sa-eq.eq0{background:#12203a;border-color:#2c4f86}
html[data-theme="communaute"] .sa-eq.eq1{background:#2a1a1c;border-color:#7a3f3a}
html[data-theme="communaute"] :is(.sa-j,.sa-res,.mb-civ,.dr-slot,.am-l:hover,.ph-l:hover,.srv-l:hover){background:#181c36}
html[data-theme="communaute"] .mb-civ{border-color:rgba(255,255,255,.12);box-shadow:none}
html[data-theme="communaute"] :is(.ph-l,.pl-l,.srv-l){border-top-color:rgba(255,255,255,.07)}
html[data-theme="communaute"] :is(.srv-l,.pl-l,.ph-l):nth-child(even){background:#12152a}
html[data-theme="communaute"] :is(.sa-modal-c,.ce-compact .ce-gens,.suivis){background-color:#161a33}
html[data-theme="communaute"] :is(.ph-form,.sa-regl,.mp-filtres,.ce-filtres,.sa-modal) :is(input,select,textarea),
html[data-theme="communaute"] :is(.mb-nom,.sa-ctl button,.am-act button),html[data-theme="communaute"] .inp{background-color:#0b0d18;border-color:rgba(255,255,255,.16)}
html[data-theme="communaute"] select option{background:#0b0d18}
html[data-theme="communaute"] .brand .mark .mark-svg{filter:none}
html[data-theme="communaute"] .jeu-general{background:#6d6cff}
html[data-theme="communaute"] .hub-jeu,html[data-theme="communaute"] .tw-card,html[data-theme="communaute"] .jx-card{background:#10121f;border:1px solid rgba(255,255,255,.10);box-shadow:none}
@media (hover:none),(pointer:coarse){
  html[data-theme="communaute"] :is(.panel,.sa-etapes,.sa-regl,.sc,.srv-liste,.pl-liste,.ph-liste){background:#10121f}
  html[data-theme="communaute"] .sc{background:#13162a}
  html[data-theme="communaute"] .sa-eq.eq0{background:#12203a}html[data-theme="communaute"] .sa-eq.eq1{background:#2a1a1c}
  html[data-theme="communaute"] :is(.dock,.suivis){background:#161a33}
}

/* ===================== Chat, refonte du 18/09/2026 =====================
   Messages groupés par auteur (avatar, pseudo, heure), lignes qui glissent en
   arrivant, pastille « nouveaux messages », puces de salons sur téléphone,
   conversations privées dans la colonne des salons. */
.chat-log{gap:0;padding:12px 14px 16px}
.cl-g{display:grid;grid-template-columns:34px minmax(0,1fr);gap:0 10px;padding:6px 4px;border-radius:12px;animation:clG .22s ease-out}
.cl-g + .cl-g{margin-top:4px}
.cl-g:hover{background:rgba(255,255,255,.035)}
.cl-g.moi{background:rgba(109,108,255,.07)}
.cl-av{width:34px;height:34px;border-radius:11px;overflow:hidden;cursor:pointer;flex:none;margin-top:1px}
.cl-av-img,.cl-av-txt{width:34px;height:34px;display:grid;place-items:center;border-radius:11px;object-fit:cover}
.cl-av-txt{font-weight:800;font-size:15px;color:#fff;background:#6d6cff;font-family:'Space Grotesk',inherit}
.cl-b{min-width:0}
.cl-h{display:flex;align-items:center;gap:8px;min-height:20px;flex-wrap:wrap}
.cl-h .cr-nick{width:auto;max-width:100%}
.cl-h .cl-time{margin:0}
.cl-l{position:relative;display:flex;align-items:baseline;gap:8px;padding:2px 0;line-height:1.5;word-break:break-word}
.cl-l .cl-text{flex:1;min-width:0}
.cl-time-l{opacity:0;transition:opacity .15s}
.cl-l:hover .cl-time-l{opacity:1}
.cl-l .cl-suppr{position:static;opacity:0}
.cl-l:hover .cl-suppr{opacity:1}
.cl-l.neuf{animation:clIn .32s cubic-bezier(.2,.8,.2,1)}
@keyframes clIn{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
@keyframes clG{from{opacity:0}to{opacity:1}}
.chat-main{position:relative}
.ch-nouveau{position:absolute;left:50%;bottom:86px;transform:translateX(-50%);z-index:5;padding:8px 16px;border-radius:999px;border:1px solid rgba(255,255,255,.2);
  background:#6d6cff;color:#fff;font:inherit;font-size:12.5px;font-weight:700;cursor:pointer;box-shadow:0 12px 30px -10px rgba(0,0,0,.8);animation:clIn .25s ease-out}
.ch-nouveau[hidden]{display:none}
/* puces de salons (téléphone) */
.ch-chips{display:none;gap:6px;padding:8px 12px;overflow-x:auto;scrollbar-width:none;border-bottom:1px solid var(--stroke);-webkit-overflow-scrolling:touch}
.ch-chips::-webkit-scrollbar{display:none}
.ch-chip{flex:none;display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border-radius:999px;border:1px solid rgba(255,255,255,.14);background:#1c2040;color:var(--txt);
  font:inherit;font-size:13px;font-weight:600;cursor:pointer;transition:background .15s,transform .15s}
.ch-chip:active{transform:scale(.96)}
.ch-chip.on{background:#6d6cff;border-color:#8483ff;color:#fff}
.ch-chip.plus{padding:6px 11px;font-size:15px;line-height:1}
.ch-chip i{font-style:normal;font-size:10.5px;font-weight:800;min-width:18px;height:18px;padding:0 5px;border-radius:999px;background:#ff5f6d;color:#fff;display:grid;place-items:center;animation:popIn .3s cubic-bezier(.2,1.4,.4,1)}
.ch-chip-av .cl-av-img,.ch-chip-av .cl-av-txt{width:18px;height:18px;border-radius:6px;font-size:10px}
@keyframes popIn{from{transform:scale(.4);opacity:0}to{transform:none;opacity:1}}
@media(max-width:1000px){
  .ch-chips{display:flex}
  .chat-rooms{display:none}
  .chat-rooms.open{display:flex}
  .cl-g{grid-template-columns:30px minmax(0,1fr);gap:0 8px}
  .cl-av,.cl-av-img,.cl-av-txt{width:30px;height:30px;border-radius:9px}
  .ch-nouveau{bottom:74px}
}
/* privés dans la colonne des salons */
.cr-head-dm{margin-top:12px}
.cr-item.dm .cr-room{gap:8px}
.cr-av .cl-av-img,.cr-av .cl-av-txt{width:22px;height:22px;border-radius:7px;font-size:11px}
.cr-n.badge{font-family:inherit;font-size:10.5px;font-weight:800;color:#fff;background:#ff5f6d;border-radius:999px;min-width:18px;height:18px;padding:0 5px;display:grid;place-items:center;animation:popIn .3s}
.cr-item.new .cr-room span:nth-child(2){font-weight:700;color:#fff}
.ct-dm-act{display:inline-flex;gap:6px;margin-left:4px}
.ct-dm-act .ct-mb{display:inline-flex;min-height:30px;padding:4px 9px}
.dm-bar{display:none}
/* quelques mouvements : salons, dock, panneaux */
.cr-room{transition:background .15s,transform .15s}
.cr-room:active{transform:scale(.98)}
.chat-log{animation:clG .2s ease-out}
.dock a .ic{transition:transform .18s cubic-bezier(.2,.8,.2,1),background .18s}
.dock a:active .ic{transform:scale(.9)}
.dock a.on .ic{transform:translateY(-2px)}
.panel.fade-in{animation:panelIn .28s cubic-bezier(.2,.8,.2,1)}
@keyframes panelIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
.bt,.inv-b,.pl-join,.btn-primary,.tabs button{transition:background .15s,transform .12s,border-color .15s}
.bt:active,.inv-b:active,.pl-join:active,.btn-primary:active{transform:scale(.97)}
@media (prefers-reduced-motion:reduce){ .cl-l.neuf,.cl-g,.chat-log,.panel.fade-in,.ch-chip i,.cr-n.badge{animation:none} }
/* badges de rôle en SVG (admin or, modo bleu, modo de salon violet, habitué orange, bot gris) */
.cr-badge{display:inline-grid;place-items:center;width:18px;height:18px;padding:0;border-radius:6px}
.cr-badge svg{width:13px;height:13px}
.cr-badge.adm{background:rgba(245,196,81,.18);color:#ffd166;border-color:rgba(245,196,81,.45)}
.cr-badge.mod{background:rgba(96,165,250,.18);color:#8ec5ff;border-color:rgba(96,165,250,.45)}
.cr-badge.ops{background:rgba(139,92,246,.2);color:#c4b5fd;border-color:rgba(139,92,246,.5)}
.cr-badge.hab{background:rgba(255,138,92,.18);color:#ffb08a;border-color:rgba(255,138,92,.45)}
.cr-badge.bot{background:rgba(255,255,255,.08);color:#aeb4d9;border-color:rgba(255,255,255,.18)}
.cmenu button .cr-badge{margin-right:6px;vertical-align:-4px}

/* ===================== Épure (18/09/2026) =====================
   Même fonctions, moins de bruit : langue repliée, indices de connexion en texte
   simple, dock qui tient à sept sur un téléphone, barre des amis plus fine. */
.langsel{padding:2px}
.langsel:not(.ouvert) button[data-lang]:not(.on),.langsel:not(.ouvert) #themeBtn{display:none}
.langsel button.on{padding-right:22px;position:relative}
.langsel button.on::after{content:'';position:absolute;right:8px;top:50%;width:5px;height:5px;border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:translateY(-70%) rotate(45deg);opacity:.7}
.langsel.ouvert button.on::after{transform:translateY(-30%) rotate(225deg)}
.cnx-indice{border:0;padding:0;background:none;color:var(--muted)}
.brand small{display:none}
@media(max-width:480px){
  .dock{padding:5px;gap:0}
  .dock a{width:50px;font-size:9px;padding:5px 0 5px}
  .dock a .ic{width:25px;height:25px}
  .dock a .ic svg{width:15px;height:15px}
  .suivis .sv-tete{padding:8px 12px}
  .head h2{font-size:19px}
}
/* en-tête du clan : liens secondaires en ligne, pas en barres pleine largeur */
.ch-act{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.ch-act .btn-ghost.sm{width:auto;flex:0 0 auto}
.ch-act .cnx-indice{flex-basis:100%}

/* ===================== Épure 2 (18/09/2026) : dock à 5, onglets, panneau replié ===================== */
.snav{display:flex;gap:4px;margin:0 0 14px;padding:4px;border-radius:14px;background:#10121f;border:1px solid rgba(255,255,255,.08);overflow-x:auto;scrollbar-width:none}
.snav::-webkit-scrollbar{display:none}
.snav a{flex:1 0 auto;text-align:center;padding:8px 12px;border-radius:10px;font-size:13px;font-weight:600;color:var(--muted);text-decoration:none;white-space:nowrap;transition:background .15s,color .15s}
.snav a.on{background:#6d6cff;color:#fff}
.snav a:not(.on):hover{background:#1c2040;color:var(--txt)}
details.aide{margin-top:14px}
details.aide summary{cursor:pointer;font-size:12.5px;color:var(--muted);list-style:none;display:inline-flex;align-items:center;gap:6px}
details.aide summary::-webkit-details-marker{display:none}
details.aide summary::before{content:'i';display:inline-grid;place-items:center;width:16px;height:16px;border-radius:50%;border:1px solid currentColor;font-size:10px;font-weight:700;font-family:var(--mono)}
details.aide[open] summary{color:var(--txt)}
details.aide p{margin:8px 0 0}
details.opts{grid-column:1 / -1}
details.opts summary{cursor:pointer;font-size:13px;font-weight:600;color:var(--muted);list-style:none;padding:6px 0}
details.opts summary::-webkit-details-marker{display:none}
details.opts summary::before{content:'›';display:inline-block;margin-right:8px;transition:transform .15s}
details.opts[open] summary::before{transform:rotate(90deg)}
details.opts summary i{font-style:normal;font-weight:400;margin-left:6px}
details.opts[open]{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:10px 14px}
details.opts[open] summary{grid-column:1 / -1}
.ph-chat-b{margin-top:14px;width:100%}
.ph-chat[hidden]{display:none}
.hub-racc{display:flex;flex-wrap:wrap;gap:8px;margin-top:14px}
.hub-racc .bt{text-decoration:none}
/* panneau Amis replié = un rond avec le compteur ; ouvert = le panneau entier */
.suivis.amis:not(.ouvert){width:auto !important;border-radius:999px}
.suivis.amis:not(.ouvert) .sv-tete{padding:10px 14px;gap:8px}
.suivis.amis:not(.ouvert) .sv-tete b,.suivis.amis:not(.ouvert) .sv-c u,.suivis.amis:not(.ouvert) .sv-tete > svg,.suivis.amis:not(.ouvert) .am-cloche{display:none}
.suivis.amis:not(.ouvert) .sv-c{font-size:13px;font-weight:700;color:var(--txt);font-family:inherit}
.suivis.amis:not(.ouvert) .sv-tete::before{content:'';width:16px;height:16px;background:currentColor;-webkit-mask:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='none' stroke='black' stroke-width='1.8' stroke-linecap='round'><circle cx='7.5' cy='7' r='2.6'/><path d='M2.8 16c0-2.6 2.1-4.3 4.7-4.3S12.2 13.4 12.2 16'/><circle cx='14.2' cy='8' r='2.1'/><path d='M13 12.1c2.2-.3 4.2 1.1 4.2 3.4'/></svg>") center/contain no-repeat;mask:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='none' stroke='black' stroke-width='1.8' stroke-linecap='round'><circle cx='7.5' cy='7' r='2.6'/><path d='M2.8 16c0-2.6 2.1-4.3 4.7-4.3S12.2 13.4 12.2 16'/><circle cx='14.2' cy='8' r='2.1'/><path d='M13 12.1c2.2-.3 4.2 1.1 4.2 3.4'/></svg>") center/contain no-repeat}
.sv-c em{font-style:normal}

/* ===================== Noir profond (18/09/2026) ===================== */
html[data-theme="communaute"]{--bg:#000;--bg-2:#050507;--verre:#0b0b10;--glass:#0f0f16;--glass-2:#15151e;--stroke:rgba(255,255,255,.09);--stroke-2:rgba(255,255,255,.18)}
html[data-theme="communaute"] body{background:#000}
html[data-theme="communaute"] header.top{background:#050507}
html[data-theme="communaute"] :is(.panel,.sa-etapes,.sa-regl,.sa-eq,.sc,.ph-liste,.pl-liste,.ph-form,.ph-chat-o,.mp-alerte,.sa-dem,.clan-vcard,.srv-liste,.hub-jeu,.tw-card,.jx-card,.snav){background:#0b0b10;border-color:rgba(255,255,255,.09)}
html[data-theme="communaute"] .sc,html[data-theme="communaute"] .sc.bans{background:#0e0e15}
html[data-theme="communaute"] :is(.dock,.suivis,.cmenu,.sa-modal-c){background:#101017;border-color:rgba(255,255,255,.12)}
html[data-theme="communaute"] :is(.sa-modal-c,.ce-compact .ce-gens,.suivis){background-color:#101017}
html[data-theme="communaute"] .dock a .ic{background:#1a1a24}
html[data-theme="communaute"] :is(.bt,.inv-b,.btn-ghost,.pl-copie,.sa-retour,.sa-badge,.ce-gens-b,.sa-plus,.ch-chip){background:#16161f;border-color:rgba(255,255,255,.12)}
html[data-theme="communaute"] :is(.bt,.inv-b,.btn-ghost,.pl-copie):hover{background:#1f1f2b}
html[data-theme="communaute"] :is(.sa-j,.sa-res,.mb-civ,.dr-slot,.am-l:hover,.ph-l:hover,.srv-l:hover,.cl-g:hover){background:#12121a}
html[data-theme="communaute"] :is(.srv-l,.pl-l,.ph-l):nth-child(even){background:#0e0e14}
html[data-theme="communaute"] :is(.ph-form,.sa-regl,.mp-filtres,.ce-filtres,.sa-modal) :is(input,select,textarea),
html[data-theme="communaute"] :is(.mb-nom,.sa-ctl button,.am-act button),html[data-theme="communaute"] .inp{background-color:#050507}
html[data-theme="communaute"] select option{background:#050507}
html[data-theme="communaute"] .snav a:not(.on):hover{background:#16161f}
html[data-theme="communaute"] .sa-eq.eq0{background:#0c1424;border-color:#22406e}
html[data-theme="communaute"] .sa-eq.eq1{background:#1c1012;border-color:#5f302c}
html[data-theme="communaute"] .chat-main,html[data-theme="communaute"] .chat-rooms,html[data-theme="communaute"] .chat-users{background:#0b0b10}
@media (hover:none),(pointer:coarse){
  html[data-theme="communaute"] :is(.panel,.sa-etapes,.sa-regl,.srv-liste,.pl-liste,.ph-liste){background:#0b0b10}
  html[data-theme="communaute"] .sc{background:#0e0e15}
  html[data-theme="communaute"] .sa-eq.eq0{background:#0c1424}html[data-theme="communaute"] .sa-eq.eq1{background:#1c1012}
  html[data-theme="communaute"] :is(.dock,.suivis){background:#101017}
}
/* PC : le chat de « Jouer » replié ne laisse plus une colonne vide à droite */
.ph:has(> .ph-chat[hidden]){grid-template-columns:1fr}

/* ===================== Navigateur de serveurs / de parties (18/09/2026) ===================== */
.srv-puces{display:flex;gap:6px;overflow-x:auto;scrollbar-width:none;padding:2px 0;margin:4px 0 10px}
.srv-puces::-webkit-scrollbar{display:none}
.srv-puces button{flex:none;display:inline-flex;align-items:center;gap:6px;padding:7px 12px;border-radius:999px;border:1px solid rgba(255,255,255,.12);background:#16161f;color:var(--muted);font:inherit;font-size:12.5px;font-weight:600;cursor:pointer;transition:background .15s,color .15s}
.srv-puces button i{font-style:normal;font-family:var(--mono);font-size:10.5px;opacity:.7}
.srv-puces button.on{background:#6d6cff;border-color:#8483ff;color:#fff}
.srv-puces button.on i{opacity:.9}
.srv-puces.petit button{padding:5px 10px;font-size:12px}
.srv-puces button[hidden]{display:none}
.srv-outils{display:flex;flex-wrap:wrap;align-items:center;gap:8px 14px;margin-bottom:10px}
.srv-outils .srv-puces{margin:0}
.srv-defile{max-height:calc(100vh - 380px);min-height:320px;overflow-y:auto;border:1px solid rgba(255,255,255,.09);border-radius:14px;background:#08080c;overscroll-behavior:contain}
.srv-table{width:100%;border-collapse:separate;border-spacing:0;font-size:13px}
.srv-table thead th{position:sticky;top:0;z-index:2;background:#101017;color:var(--dim);font-size:10px;letter-spacing:.1em;text-transform:uppercase;text-align:left;padding:9px 10px;border-bottom:1px solid rgba(255,255,255,.1)}
.srv-table td{padding:8px 10px;border-top:1px solid rgba(255,255,255,.05);vertical-align:middle}
.srv-table tr:first-child td{border-top:0}
.srv-table tbody tr:hover td{background:#12121a}
.srv-table tbody tr:nth-child(even) td{background:#0b0b10}
.srv-table tbody tr:nth-child(even):hover td{background:#12121a}
.sb-fav{width:30px;padding-right:0 !important}
.sb-star{background:none;border:0;color:var(--dim);cursor:pointer;padding:4px;line-height:0;border-radius:6px}
.sb-star .gl{width:16px;height:16px}
.sb-star.on{color:#f5c451}.sb-star.on .gl path{fill:currentColor}
.sb-star:hover{color:#f5c451}
.srv-table .sb-p{width:70px;white-space:nowrap}
.srv-table .sb-n{min-width:0;max-width:0;width:100%}
.srv-table .sb-n b{display:block;font-size:13.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.srv-table .sb-n i{display:flex;align-items:center;gap:6px;font-style:normal;font-size:11.5px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.srv-table .sb-n s{text-decoration:none;font-family:var(--mono);font-size:10.5px;opacity:.8}
.srv-table .sb-j{width:96px;white-space:nowrap;font-family:var(--mono)}
.srv-table .sb-j b{font-size:14px;color:#31d0aa}.srv-table tr.plein .sb-j b{color:var(--a2)}
.srv-table .sb-j i{font-style:normal;font-size:11.5px;color:var(--muted)}
.sb-bar{display:block;height:3px;border-radius:2px;background:rgba(255,255,255,.1);margin-top:5px;overflow:hidden}
.sb-bar i{display:block;height:100%;background:#31d0aa}
tr.plein .sb-bar i{background:var(--a2)}
.srv-table .sb-a{width:1%;white-space:nowrap}
.srv-table .sb-a .pl-join,.srv-table .sb-a .pl-copie{margin:0 0 0 6px}
.srv-plus{display:flex;justify-content:center;padding:14px}
.srv-plus[hidden]{display:none}
.srv-plus .spin{width:18px;height:18px}
@media(max-width:640px){
  .srv-defile{max-height:calc(100vh - 330px)}
  .srv-table thead{display:none}
  .srv-table .sb-fav,.srv-table .sb-p{padding:8px 4px 8px 8px}
  .srv-table .sb-n s.adr,.srv-table .sb-a .pl-copie{display:none}
  .srv-table .sb-j{width:auto;padding-left:4px}
  .sb-bar{display:none}
  .srv-table .sb-a .pl-join{padding:5px 10px}
  .srv-table td{padding:8px 6px}
}
/* étoile des favoris bien visible ; tactile : cibles de 40 px, ligne dépliable */
.sb-star{width:32px;height:32px;display:grid;place-items:center;padding:0}
.sb-star .gl{width:18px;height:18px;stroke-width:2}
.sb-star:not(.on){color:#4a4d66}
@media (pointer:coarse){
  .srv-table td{padding:10px 8px}
  .srv-puces button{padding:9px 14px;font-size:13px;min-height:38px}
  .srv-table .sb-a .pl-join{min-height:38px;padding:8px 14px}
  .pl-copie{min-height:38px}
  .sb-star{width:40px;height:40px}
  .chk{min-height:38px}
  .snav a{padding:11px 12px}
  .tabs button{min-height:40px}
}
@media(max-width:640px){
  .srv-table tr.sb-l.ouvert .sb-n s.adr{display:inline}
  .srv-table tr.sb-l.ouvert .sb-a .pl-copie{display:inline-block;margin-top:6px}
  .srv-table tr.sb-l.ouvert td{background:#12121a}
}
/* parties AoE en tableau : état, partie, joueurs ; détail (équipes) déplié au toucher */
.pp-table .pp-t{width:84px}
.pp-t b{display:block;font-size:13px}.pp-t b.ok{color:#31d0aa}
.pp-t i{font-style:normal;font-size:11px;color:var(--muted);font-family:var(--mono)}
.pp-table .sb-n i{white-space:normal}
.pp-noms{color:var(--dim)}.pp-noms u{text-decoration:none;color:var(--muted)}
.pp-table .sb-n a{color:inherit;text-decoration:none}.pp-table .sb-n a:hover b{text-decoration:underline}
tr.pp-detail td{padding:0 10px 10px 94px;border-top:0 !important;background:#0e0e15}
tr.pp-detail.cache{display:none}
tr.pp-l.ouvert td{background:#12121a}
tr.pp-l.a-moi td:first-child{box-shadow:inset 3px 0 0 var(--a1)}
tr.pp-l{cursor:pointer}
@media(max-width:640px){ tr.pp-detail td{padding-left:10px} .pp-table .pp-t{width:64px} }
.pp-table .pp-t{width:96px}
.pp-t i{display:block;white-space:nowrap}
.pp-table .sb-n i{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}
@media(max-width:640px){ .pp-table .pp-t{width:72px;padding-right:0} .pp-t b,.pp-t i{font-size:11.5px} .pp-noms{display:none} }
.srv-table td.pp-t,.srv-table td.sb-p{display:table-cell !important}
/* appareils liés (compagnon) */
.ap-bloc{margin-top:14px}
.ap-liste{display:flex;flex-direction:column;gap:6px;margin-bottom:12px}
.ap-l{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:12px;background:#0e0e15;border:1px solid rgba(255,255,255,.07)}
.ap-n{display:flex;flex-direction:column;flex:1;min-width:0}.ap-n b{font-size:13.5px}.ap-n u{text-decoration:none;font-size:11.5px;color:var(--muted)}
.ap-lier{display:flex;gap:8px;align-items:center;flex-wrap:wrap}

/* ===================== En-tête sur une ligne, typographie (18/09/2026) ===================== */
.top .wrap{gap:10px;min-height:60px;flex-wrap:nowrap}
.brand{gap:10px;font-size:17px}
.brand .mark .mark-svg{width:32px;height:32px}
.me{background:none;border:0;padding:0}
.me-av{display:inline-flex;align-items:center;gap:8px;padding:3px 8px 3px 3px;border-radius:999px;background:#0e0e15;border:1px solid rgba(255,255,255,.12);color:var(--txt);font:inherit;font-size:13px;font-weight:500;cursor:pointer;position:relative}
.me-av .avb,.me-av img{width:30px;height:30px;border-radius:50%}
.me-av .me-nom{max-width:140px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.me-av .me-pastille{position:absolute;top:-4px;left:22px;min-width:16px;height:16px;padding:0 4px;border-radius:999px;background:#ff5f6d;color:#fff;font-size:10px;font-weight:800;display:grid;place-items:center;font-style:normal}
.me-menu{position:fixed;z-index:80;width:230px;padding:6px}
.me-menu a{display:block;padding:9px 11px;border-radius:9px;color:var(--txt);text-decoration:none;font-size:13px}
.me-menu a:hover{background:#16161f}.me-menu a.danger{color:#ff9da6}
.me-menu .dock-n{position:static;display:inline-grid;margin-left:6px}
.userbox{margin-left:auto}
.langsel{order:6}
@media(max-width:760px){
  .top .wrap{gap:8px;min-height:56px;padding-top:6px;padding-bottom:6px}
  .brand > span:not(.mark){display:none}
  .jeu-choix span{display:none}
  .spot-trigger{flex:0 0 auto;width:38px;height:38px;padding:0;justify-content:center}
  .spot-trigger .ph,.spot-trigger kbd{display:none}
  .me-av .me-nom{display:none}
  .btn-steam{padding:0 12px;font-size:13px}
  .btn-steam span::before{content:'Steam';}
  .btn-steam span{font-size:0}
  .btn-steam span::before{font-size:13px}
  .tick{display:none}
}
/* actions du clan : en ligne, à gauche, jamais empilées au centre */
.ch-act{flex-direction:row;flex-wrap:wrap;align-items:center;justify-content:flex-start;min-width:0}
@media(max-width:620px){.ch-act{align-items:center;width:100%}}
.ch-act .bt,.ch-act .btn-ghost,.ch-act .btn-primary{width:auto}
/* échelle typographique commune */
h1{font-size:24px;line-height:1.2;letter-spacing:-.02em}
h2,.head h2{font-size:20px;line-height:1.25;letter-spacing:-.02em}
h3{font-size:16px;line-height:1.3}
.ph-t,.cr-head,thead th,.srv-table thead th{font-size:10.5px;letter-spacing:.09em;text-transform:uppercase}
.sub{font-size:13px;line-height:1.45}
.panel.pad{padding:18px}
@media(max-width:640px){.panel.pad{padding:14px} h2,.head h2{font-size:19px} .head{gap:8px 12px}}
.head{display:flex;align-items:center;flex-wrap:wrap;gap:8px 14px;margin-bottom:12px}
.head .sub{margin:0}
/* inspection du 18/09 : blocs de code qui débordaient, onglets qui défilent, table du profil */
pre,code{white-space:pre-wrap;word-break:break-word;overflow-wrap:anywhere}
.tabs{overflow-x:auto;scrollbar-width:none;flex-wrap:nowrap}
.tabs::-webkit-scrollbar{display:none}
.tabs button{flex:none}
.tbl-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
#app table.compact{min-width:0}
/* page Paramètres */
.pr-l{display:flex;align-items:center;gap:14px;padding:12px 0;border-top:1px solid rgba(255,255,255,.07);flex-wrap:wrap}
.pr-l:first-of-type{border-top:0}
.pr-l > div:first-child{flex:1 1 240px;display:flex;flex-direction:column;gap:2px}
.pr-l b{font-size:14px}.pr-l .sub{font-size:12.5px}
.bt.danger{color:#ff9da6;border-color:rgba(255,95,109,.4)}
.srv-ping.nul{color:#4a4d66;font-weight:600}
/* fil d'activité */
.act-bloc{margin-top:14px}
.act-liste{display:flex;flex-direction:column;gap:2px}
.act-l{display:flex;align-items:center;gap:10px;padding:8px 6px;border-radius:10px}
.act-l:hover{background:#0e0e15}
.act-l .avb,.act-l img{width:28px;height:28px;border-radius:9px;flex:none}
.act-ic{width:28px;height:28px;border-radius:9px;display:grid;place-items:center;background:#16161f;color:#9aa3ff;flex:none}
.act-t{display:flex;flex-direction:column;min-width:0;font-size:13px}
.act-t span{overflow:hidden;text-overflow:ellipsis}
.act-t i{font-style:normal;font-size:11px;color:var(--dim)}
.act-t em{font-style:normal;color:#3ddc97;font-weight:700}
.act-t a{color:inherit}
.srv-ping.via{opacity:.85}
/* tournois */
.to-liste{display:flex;flex-direction:column;gap:10px;margin-top:6px}
.to-c{display:grid;grid-template-columns:120px minmax(0,1fr) auto;gap:14px;align-items:center;padding:12px;border-radius:14px;background:#0e0e15;border:1px solid rgba(255,255,255,.07)}
.to-c img{width:120px;aspect-ratio:460/215;object-fit:cover;border-radius:10px}
.to-t{display:flex;flex-direction:column;gap:3px;min-width:0}.to-t b{font-size:15px}.to-t p{margin:4px 0}
.to-etat{display:inline-block;font-size:10.5px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;padding:2px 8px;border-radius:999px;background:#1c2040;color:#c4b5fd}
.to-etat.inscriptions{background:rgba(61,220,151,.15);color:#3ddc97}.to-etat.en_cours{background:rgba(255,138,92,.18);color:#ffb08a}.to-etat.termine{background:#16161f;color:var(--dim)}
.to-a{display:flex;flex-direction:column;gap:8px;align-items:flex-end}
@media(max-width:640px){.to-c{grid-template-columns:1fr}.to-c img{width:100%}.to-a{flex-direction:row;align-items:center}}
.to-gestion{display:flex;flex-direction:column;gap:6px;margin-top:12px}
.to-g{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:8px 10px;border-radius:10px;background:#0e0e15}
.to-g b{flex:1 1 160px}.to-g select{background:#050507;color:var(--txt);border:1px solid rgba(255,255,255,.14);border-radius:8px;padding:6px 8px;font:inherit;font-size:13px}
/* sanction : lecture seule, appel */
.chat-sanction{display:flex;flex-direction:column;gap:8px;padding:12px 14px;border-top:1px solid rgba(255,95,109,.3);background:rgba(255,95,109,.08);font-size:13px}
.chat-sanction b{color:#ff9da6}.chat-sanction .sub{display:block;margin-top:2px}
.chat-appel{display:flex;gap:8px}.chat-appel input{flex:1;background:#050507;border:1px solid rgba(255,255,255,.14);border-radius:10px;padding:8px 10px;color:var(--txt);font:inherit;font-size:13px}
.chat-input[hidden]{display:none}
.ctp-sub{padding:8px 12px 12px;border-bottom:1px solid rgba(255,255,255,.08)}
.ctp-appel{display:flex;flex-wrap:wrap;gap:8px 14px;align-items:center;padding:8px 0;border-top:1px solid rgba(255,255,255,.06);font-size:12.5px}
.ctp-appel > div:first-child{flex:1 1 320px}.ctp-appel p{margin:4px 0 0;color:var(--muted)}
.ctp-appel-a{display:flex;gap:6px;align-items:center;flex-wrap:wrap}.ctp-appel-a input{background:#050507;border:1px solid rgba(255,255,255,.14);border-radius:8px;padding:6px 8px;color:var(--txt);font:inherit;font-size:12px;width:200px}
.ctp-lift.ko{color:#ff9da6}
/* élections de clan */
.el-c{margin-top:12px;padding:12px;border-radius:14px;background:#0e0e15;border:1px solid rgba(255,255,255,.07)}
.el-c.close{opacity:.85}
.el-t{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px}.el-t b{font-size:15px}
.el-cands{display:flex;flex-direction:column;gap:6px;margin-top:10px}
.el-cand{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:10px;background:#12121a;flex-wrap:wrap}
.el-cand.elu{box-shadow:inset 0 0 0 1px rgba(61,220,151,.5)}
.el-cand .avb,.el-cand img{width:30px;height:30px;border-radius:9px}
.el-cand-t{display:flex;flex-direction:column;flex:1;min-width:160px}.el-cand-t a{color:inherit;text-decoration:none}
.el-voix{color:#3ddc97}
.el-act{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-top:10px}
.el-cand-f{display:flex;gap:8px;flex:1 1 320px}.el-cand-f input{flex:1;background:#050507;border:1px solid rgba(255,255,255,.14);border-radius:10px;padding:8px 10px;color:var(--txt);font:inherit;font-size:13px}
/* chat compact : une ligne par message */
.cl-l{display:flex;align-items:baseline;gap:7px;padding:3px 6px;border-radius:8px;line-height:1.45;font-size:13.5px}
.cl-l:hover{background:rgba(255,255,255,.035)}
.cl-l.moi{background:rgba(109,108,255,.06)}
.cl-l .cl-av{width:20px;height:20px;border-radius:6px;overflow:hidden;flex:none;align-self:center;cursor:pointer}
.cl-l .cl-av-img,.cl-l .cl-av-txt{width:20px;height:20px;border-radius:6px;font-size:10px}
.cl-l .cr-nick{flex:none;max-width:40%;width:auto;font-weight:700}
.cl-l .cr-nick::after{content:'';margin-left:2px}
.cl-l .cl-text{flex:1;min-width:0;word-break:break-word}
.cl-l .cl-time{flex:none;font-family:var(--mono);font-size:10.5px;color:var(--dim);opacity:.7}
.cl-l .cl-suppr{position:static;opacity:0}
.cl-l:hover .cl-suppr{opacity:1}
.chat-log{gap:0;padding:8px 8px 12px}
@media(max-width:640px){ .cl-l .cr-nick{max-width:45%} .cl-l .cl-time{display:none} .cl-l:hover .cl-time{display:inline} }
.cr-badge.bot{background:none;border:0;padding:0}
.cr-badge.bot svg{width:18px;height:18px}
/* alignement vertical des lignes du chat : tout centré sur la même ligne */
.cl-l{align-items:center}
.cl-l .cr-nick{align-items:center}
.cl-l .cl-text{line-height:1.4}
.cl-l .cl-time{line-height:1;align-self:center}
.cl-l .cl-medias{display:block;width:100%}
/* pseudo compact dans le chat : badge · drapeau · [TAG] · nom */
.cr-nick{gap:4px}
.cr-nick .cr-clan b{font-size:11px;font-weight:700;letter-spacing:.02em}
.cr-nick .cr-tier{width:14px;height:14px}
.cl-l .cr-nick .cr-badge{width:16px;height:16px}.cl-l .cr-nick .cr-badge svg{width:12px;height:12px}
.cl-l .cr-nick .flag{width:14px}
/* le [TAG] collé au pseudo */
.cr-nick .cr-clan{margin-right:-2px}
.cr-nick .cr-clan + a,.cr-nick .cr-clan + .cr-tier{margin-left:0}
.cr-tn{display:inline-flex;align-items:center;gap:0;min-width:0}
.cr-tn .cr-clan{margin:0}.cr-tn a{margin-left:1px}
/* pseudos partout (journal, présents, listes) : tout sur une ligne, centré, tailles uniformes */
.cr-nick{display:inline-flex;align-items:center;gap:4px;line-height:1.2;vertical-align:middle;min-width:0}
.cr-nick > *{flex:none;display:inline-flex;align-items:center}
.cr-nick .cr-tn{display:inline-flex;align-items:center;min-width:0}
.cr-nick .cr-tn a,.cr-nick .cr-tn b{line-height:1.2}
.cr-nick .cr-badge{width:16px;height:16px;border-radius:5px}
.cr-nick .cr-badge svg{width:12px;height:12px}
.cr-nick .cr-badge.bot{width:16px;height:16px}.cr-nick .cr-badge.bot svg{width:16px;height:16px}
.cr-nick .flag{width:14px;height:auto;border-radius:2px;display:inline-block}
.cr-nick .cr-tier{width:14px;height:14px}
.chat-users .cu{display:flex;align-items:center;padding:5px 8px;border-radius:8px}
.chat-users .cu .cr-nick{max-width:100%}
.cl-l .cr-nick{max-width:40%}
/* colonne pseudo de largeur fixe : les messages commencent tous au même endroit */
.cl-l .cr-nick{width:210px;max-width:210px;justify-content:flex-end;overflow:hidden;font-size:13px}
.cl-l .cr-nick .cr-tn{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;min-width:0;text-align:right}
.cl-l .cr-nick .cr-tn a,.cl-l .cr-nick .cr-tn b{display:inline}
.cl-l .cl-text{font-size:13.5px}
.cl-l .cl-av{margin-right:2px}
@media(max-width:1000px){ .cl-l .cr-nick{width:150px;max-width:150px} }
@media(max-width:640px){ .cl-l .cr-nick{width:38%;max-width:38%} }
/* la colonne pseudo reste fixe (messages alignés) mais son contenu est collé à l'avatar, à gauche */
.cl-l .cr-nick{justify-content:flex-start}
.cl-l .cr-nick .cr-tn{text-align:left}
/* journal en grille : la colonne pseudo prend la largeur du plus long pseudo, les messages s'alignent juste après.
   Plus d'avatar dans les lignes (demande Kripy). */
.chat-log{display:grid;grid-template-columns:max-content minmax(0,1fr) auto;column-gap:10px;align-content:start}
.chat-log > *{grid-column:1 / -1}
.cl-l{display:grid;grid-template-columns:subgrid;grid-column:1 / -1;align-items:center;gap:0 10px;padding:3px 8px}
.cl-l .cr-nick{width:auto;max-width:260px;justify-content:flex-start}
.cl-l .cr-nick .cr-tn{text-align:left}
.cl-l .cl-text{min-width:0}
.cl-l .cl-suppr{grid-column:3;justify-self:end}
.cl-l .cl-time{justify-self:end}
.cl-sys,.cl-svc,.chat-log .empty{grid-column:1 / -1}
@supports not (grid-template-columns: subgrid){ .cl-l{display:flex} .cl-l .cr-nick{width:200px;max-width:200px} }
@media(max-width:640px){ .cl-l .cr-nick{max-width:44%} }
/* taunts dans le salon d'une partie */
.taunt{display:inline-flex;align-items:center;gap:6px;padding:2px 10px 2px 6px;border-radius:999px;background:rgba(245,196,81,.12);border:1px solid rgba(245,196,81,.35);color:#ffd166}
.taunt i{display:inline-grid;place-items:center;width:16px;height:16px}.taunt i .gl{width:14px;height:14px}
.taunt b{font-family:var(--mono)}.taunt em{font-style:italic;color:#f6f7ff;font-weight:400}
/* serveur CS du Hub */
.cs-hub{padding:18px;border-radius:16px;background:#0e0e15;border:1px solid rgba(255,255,255,.08);display:flex;flex-direction:column;gap:12px}
.cs-hub.on{border-color:rgba(61,220,151,.35)}
.cs-hub-t{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.cs-hub-t b{font-size:17px}.cs-hub-t .sub{flex-basis:100%;margin-left:20px}
.cs-hub-a{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.cs-hub-m{margin:0}
.cs-hub-i{display:flex;flex-wrap:wrap;gap:8px 18px}.cs-hub-i span{display:flex;flex-direction:column;gap:1px}.cs-hub-i u{text-decoration:none;font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--dim)}.cs-hub-i b{font-size:13.5px;font-family:var(--mono)}
.cs-hub-liste{max-height:none;min-height:0}
.cs-hub-l.on .sb-n b{color:#f6f7ff}.cs-hub-l .cs-carte{font-family:var(--mono);font-size:13px;width:110px}
.cs-hub-l .sb-n .sv-pt{display:inline-block;margin-right:2px}
#csHub .ph-chat{display:block}
.cs-hub-l .sb-n{max-width:none;width:auto;min-width:260px}.cs-hub-l .sb-a .cnx-indice{white-space:normal;max-width:260px;display:inline-block}
/* carte du serveur CS du Hub : présentation sobre */
.csc{border:1px solid rgba(255,255,255,.1);border-radius:16px;background:#0e0e15;overflow:hidden}
.csc.on{border-color:rgba(61,220,151,.35)}
.csc-h{display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding:14px 18px;border-bottom:1px solid rgba(255,255,255,.07);background:#101017}
.csc-h h3{margin:0;font-size:17px;flex:1;min-width:200px}
.csc-etat{display:inline-flex;align-items:center;gap:6px;font-size:10.5px;letter-spacing:.09em;text-transform:uppercase;font-weight:700;color:var(--dim);padding:4px 10px;border-radius:999px;background:#16161f}
.csc-etat i{width:7px;height:7px;border-radius:50%;background:#4a4d66}
.csc.on .csc-etat{color:#3ddc97;background:rgba(61,220,151,.12)}.csc.on .csc-etat i{background:#3ddc97;box-shadow:0 0 8px #3ddc97}
.csc-adr{font-family:var(--mono);font-size:12px;color:var(--muted)}
.csc-corps{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:14px 18px;padding:16px 18px}
.csc-corps > div{display:flex;flex-direction:column;gap:3px}
.csc-corps u{text-decoration:none;font-size:10.5px;letter-spacing:.09em;text-transform:uppercase;color:var(--dim)}
.csc-corps b{font-size:15px}.csc-carte b{font-family:var(--mono);text-transform:capitalize}
.csc-j b i{font-style:normal;color:var(--muted);font-size:12px}
.csc-a{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:14px 18px;border-top:1px solid rgba(255,255,255,.07)}
.csc-a .pl-join{margin:0}
.inv-amis{display:flex;flex-direction:column;gap:6px;max-height:50vh;overflow-y:auto;margin-top:10px}
.inv-amis .chk{display:flex;align-items:center;gap:8px}.inv-amis .avb,.inv-amis img{width:22px;height:22px;border-radius:7px;vertical-align:middle}
.sv-inv .gl{width:14px;height:14px}
tr.sb-l.hub .sb-n b{color:#f6f7ff}tr.sb-l.off .sb-j b{color:var(--dim)}
.mono{font-family:var(--mono)}
/* le chat des pages Jouer passe EN BAS, sur toute la largeur (à droite il était trop étroit) */
.ph{grid-template-columns:1fr}
.ph-chat{position:static;margin-top:4px}
.ph-chat .ph-chat-c,.ph-chat .chat-emb,.ph-chat .ce-log{min-height:320px}
/* serveur du Hub, ligne compacte */
.csl{display:flex;align-items:center;gap:14px;flex-wrap:wrap;padding:12px 16px;border-radius:14px;background:#0e0e15;border:1px solid rgba(255,255,255,.1)}
.csl.on{border-color:rgba(61,220,151,.35)}
.csl-n{font-size:15px;flex:1 1 220px;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.csl-e{display:inline-flex;align-items:center;gap:7px;font-size:12.5px;color:var(--muted);white-space:nowrap}
.csl-e i{width:8px;height:8px;border-radius:50%;background:#4a4d66;flex:none}
.csl.on .csl-e{color:#3ddc97}.csl.on .csl-e i{background:#3ddc97;box-shadow:0 0 8px #3ddc97}
.csl-p{min-width:60px;text-align:right}
.csl-a{display:flex;gap:8px;align-items:center;margin-left:auto}
@media(max-width:640px){.csl{gap:8px 12px}.csl-a{margin-left:0;width:100%}.csl-a .pl-join{flex:1;text-align:center}}
/* pages Jouer : tout tient à l'écran sans défiler — le chat prend la hauteur qui reste */
@media(min-width:900px){
  #csHub .ph-chat .ce-log,#mpRacine .ph-chat .ce-log{height:calc(100vh - 430px);min-height:200px;max-height:none}
  #csHub .ph-main,#mpRacine .ph-main{max-height:none}
  #csHub details.aide,#mpRacine details.aide{margin-top:8px}
  body:has(#csHub) main,body:has(#mpRacine) main{padding-bottom:0}
}
/* « Comment ça marche » : bloc pleine largeur (il se retrouvait en colonne étroite) */
details.aide{display:block;width:100%;flex-basis:100%}
details.aide p{display:block;max-width:none}
/* chats embarqués : la liste des présents est TOUJOURS visible à droite (façon IRC) sur écran large, et défile */
@media(min-width:900px){
  .ce-compact .ce-corps{display:grid;grid-template-columns:minmax(0,1fr) 200px;gap:10px;position:static}
  .ce-compact .ce-gens{display:flex;flex-direction:column;position:static;inset:auto;overflow-y:auto;max-height:100%;height:auto;background:#0b0b10;border:1px solid rgba(255,255,255,.08);z-index:auto}
  .ce-compact .ce-gens-b{display:none}
  .ce-compact .ce-corps .ce-gens{align-self:stretch}
  /* le pied de page n'a pas sa place sur les écrans qui doivent tenir sans défiler */
  body:has(#csHub) footer,body:has(#mpRacine) footer,body:has(.srv-nav) footer,body:has(#chatRoot) footer{display:none}
}
/* écran large : la page Jouer se resserre pour tenir sans défiler ; Mes parties et Parties ouvertes côte à côte */
@media(min-width:900px){
  #phCorps{display:grid;grid-template-columns:1fr 1fr;gap:0 16px;align-items:start}
  #phCorps > .ph-t{margin:12px 0 8px}
  #phCorps > .ph-t:nth-of-type(1){grid-column:1;grid-row:1}#phCorps > .ph-t:nth-of-type(2){grid-column:2;grid-row:1}
  #phCorps > .ph-t:nth-of-type(1) + *{grid-column:1;grid-row:2}#phCorps > .ph-t:nth-of-type(2) + *{grid-column:2;grid-row:2}
  #phCorps > .ph-t:only-of-type{grid-column:1 / -1}#phCorps > .ph-t:only-of-type + *{grid-column:1 / -1}
  .ph-vide{padding:12px}
  .ph-chat-b{display:none}
  .ph-chat[hidden]{display:block !important}
  #mpRacine .ph-main .head{margin-bottom:6px}
  .ph .panel.pad{padding:14px 18px}
}
body:has(#csHub),body:has(#mpRacine),body:has(.srv-nav){padding-bottom:0}
/* la colonne des présents fait toute la hauteur du journal : une vraie colonne, pas un cadre posé au milieu */
@media(min-width:900px){
  .ce-compact .ce-corps{align-items:stretch}
  .ce-compact .ce-gens{height:auto !important;max-height:none !important;min-height:0;border:0;border-left:1px solid rgba(255,255,255,.08);border-radius:0;background:transparent;padding:6px 0 6px 12px}
  .ce-compact .ce-log{border-radius:12px}
  .ce-gens .ce-filtre{margin-bottom:8px}
  .ce-g{padding:5px 6px;border-radius:8px}
}
/* séparateur de jour dans les journaux */
.cl-jour{display:flex;align-items:center;gap:10px;margin:8px 0 4px;grid-column:1 / -1}
.cl-jour::before,.cl-jour::after{content:'';flex:1;height:1px;background:rgba(255,255,255,.08)}
.cl-jour span{font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--dim);white-space:nowrap}
/* journal embarqué en grille comme le grand chat */
.ce-log{display:grid;grid-template-columns:max-content minmax(0,1fr) auto;column-gap:10px;align-content:start}
.ce-log > *{grid-column:1 / -1}
.ce-log .cl-l{display:grid;grid-template-columns:subgrid;grid-column:1 / -1;align-items:center;padding:2px 6px}
.ce-log .cl-l .cr-nick{width:auto;max-width:220px}
/* rien ne passe sous le dock : le panneau Amis et le pied de page restent au-dessus */
.suivis{bottom:100px}
@media (max-width:760px){ .suivis{bottom:96px} }
footer .wrap{padding-bottom:110px}
body:has(#csHub) footer,body:has(#mpRacine) footer,body:has(.srv-nav) footer,body:has(#chatRoot) footer{display:none}

/* ===================== Dock : en bas, plus fin (19/09/2026) ===================== */
.dock{padding:5px 6px;gap:2px;border-radius:20px;bottom:10px}
.dock a{width:58px;padding:5px 2px 4px;font-size:9.5px;gap:2px;border-radius:14px}
.dock a .ic{width:26px;height:26px;border-radius:9px}
.dock a .ic svg{width:15px;height:15px}
.dock a.on .ic{transform:none}
body{padding-bottom:72px}
.suivis{bottom:76px}
@media (max-width:760px){ .suivis{bottom:72px} .dock a{width:50px} }
footer .wrap{padding-bottom:90px}

/* ===================== Rail vertical à gauche, PARTOUT (19/09/2026, choix de Kripy) =====================
   La barre se colle à gauche sur tous les écrans et libère le bas. Sur téléphone elle est plus étroite (icônes seules). */
.dock{left:10px;top:50%;bottom:auto;transform:translateY(-50%);flex-direction:column;gap:3px;padding:6px 5px;width:auto;max-width:none;max-height:calc(100vh - 20px);overflow:visible;border-radius:20px}
.dock a{width:58px;padding:7px 2px 6px}
body{padding-left:84px;padding-bottom:0}
.wrap{max-width:min(1720px, calc(100vw - 84px - 24px))}
.suivis{bottom:16px}
footer .wrap{padding-bottom:24px}
.ch-nouveau{bottom:70px}
.install-bandeau,.app-bandeau{left:96px}
@media(max-width:640px){
  .dock{left:6px;padding:4px 3px;gap:2px;border-radius:16px}
  .dock a{width:44px;padding:6px 0 5px;font-size:0;gap:0}
  .dock a .ic{width:28px;height:28px}
  .dock a .ic svg{width:16px;height:16px}
  .dock a .dock-n{right:2px;top:2px}
  body{padding-left:58px}
  .wrap{max-width:none;padding:0 10px 0 6px}
  .suivis{right:8px;bottom:12px;width:min(320px, calc(100vw - 70px))}
  .install-bandeau,.app-bandeau{left:62px}
}
/* ===================== Cadre fixe : la PAGE ne défile jamais, seul le contenu central défile =====================
   En-tête et rail restent en place ; ce qui dépasse (fiche joueur, clan) défile dans la zone centrale, comme dans une application. */
html,body{height:100%;overflow:hidden}
header.top{position:sticky;top:0;z-index:60}
main{height:calc(100vh - 62px);overflow-y:auto;overscroll-behavior:contain;padding-top:16px;padding-bottom:16px}
main > .wrap{min-height:0}
footer{display:none}
@media(max-width:640px){ main{height:calc(100vh - 56px)} }
/* ===================== Chat et clan : pleine hauteur, compacts (19/09/2026) ===================== */
/* page Chat : le cadre prend toute la hauteur disponible, quel que soit l'écran */
.chat-wrap{height:calc(100vh - 62px - 32px) !important;min-height:0 !important;margin-bottom:0}
body.chat-open .chat-wrap{height:calc(100vh - 62px - 32px) !important}
@media(max-width:1000px){ .chat-wrap{height:auto !important} .chat-log{height:calc(100vh - 62px - 300px) !important} }
.chat-rooms{font-size:13px}
.chat-wrap{grid-template-columns:190px 1fr 210px;gap:12px}
.cr-room{padding:6px 8px}
.cr-me{padding-top:8px}
.cr-son{font-size:12px}
/* page du clan : en-tête plus bas, tout en ligne */
.clan-vcard .ch-logo,.cc-logo,.clan-vcard img.clan-logo{width:56px !important;height:56px !important}
.clan-vcard{padding:12px 16px}
.ch-links{margin-top:4px}
.clan-liens{padding:10px 16px !important}
.clan-liens .cl-chaines .sub{font-size:11px}
#clanOnglets{margin:10px 0 0 !important}
.clan-chat .ce-compact{padding:10px}
.clan-chat .ce-log{height:calc(100vh - 62px - 420px);min-height:180px}
.main-app .panel.pad{padding:14px 16px}
/* ===================== Chat compact PARTOUT (19/09/2026, retour tablette : « trop gros ») ===================== */
.chat-wrap{grid-template-columns:172px 1fr 196px;gap:10px}
.chat-rooms,.chat-users{padding:6px;gap:1px}
.cr-head{font-size:9.5px;padding:4px 6px 5px}
.cr-room,.chat-wrap .cr-room{min-height:0;padding:4px 7px;font-size:12.5px;border-radius:7px;gap:6px}
.cr-n{font-size:10px}
.cr-me{padding:6px 6px 2px;gap:4px}
.cr-me .cr-inv{font-size:11.5px;gap:6px}
.cr-me .cr-state{font-size:10.5px}
.cr-hint{font-size:10.5px;padding:6px 6px 0}
.chat-topic{padding:7px 12px;gap:8px}
.chat-topic b{font-size:13.5px}
.chat-topic span{font-size:11.5px}
.chat-topic .chip,.chat-topic button.chip,.ct-btn{font-size:10.5px;padding:2px 8px}
.chat-log{padding:6px 10px 8px}
.cl-l,.ce-log .cl-l,.chat-log .cl-l{font-size:12.5px;line-height:1.4;padding:1px 6px}
.cl-l .cl-time,.cl-l time,.cl-h{font-size:10px}
.cl-jour{font-size:9.5px;margin:6px 0 4px}
.cl-jour::before,.cl-jour::after{opacity:.5}
.cr-nick,.cr-tn{font-size:12.5px}
.cl-l img,.cr-nick img,.ce-g img{width:13px;height:13px}
.cl-l .cl-img,.cl-l img.gif,.cl-l .cl-media img{max-height:140px;max-width:260px}
.chat-input{padding:6px 10px}
.chat-input input,.chat-input textarea,.ce-form input{font-size:12.5px;padding:7px 11px;border-radius:9px;min-height:0}
.chat-input button,.ce-form button{min-height:32px;min-width:0;padding:6px 12px;font-size:12px}
.chat-users .cu,.ce-g,.ce-gens .ce-g{min-height:0;padding:2px 4px;font-size:12px}
.ce-gens-t{font-size:9.5px;margin-bottom:4px}
.ce-gens,.ce-log{padding:6px 8px}
.ce-compact{padding:8px 10px}
.ce-tete b{font-size:13px}
.ce-tete{margin-bottom:6px}
.chat-sanction{font-size:12px;padding:8px 10px}
.cbtn,.chat-log .btn{font-size:11.5px}
/* sous-navigation Jouer/Serveurs/… : à sa taille, à gauche, plus étalée sur toute la largeur */
.snav{display:inline-flex;width:auto;max-width:100%;gap:2px;margin:0 0 10px;padding:3px}
.snav a{flex:0 0 auto;padding:5px 12px;font-size:12.5px;border-radius:8px}
.cjb,.ce-bascule,.ph-chat .bascule,.chat-emb .bascule{display:inline-flex;width:auto;gap:2px}
.cjb a,.cjb button,.ce-bascule button{flex:0 0 auto;padding:4px 12px;font-size:12px}
.ph-chat .ph-tete b,.ph-chat h3{font-size:13px}
@media(pointer:coarse){
  .cr-room,.chat-wrap .cr-room{min-height:30px;font-size:12.5px}
  .chat-input input{font-size:16px;padding:6px 10px}   /* iOS zoome sous 16px : on garde 16 mais bas */
  .chat-input button{min-height:34px;min-width:34px}
  .cu,.ce-g{min-height:26px}
  .cl-l,.ce-log .cl-l{font-size:13px}
  .snav a{padding:6px 12px}
}
.ph-chat-o{display:inline-flex;width:auto;gap:2px;padding:3px;margin-bottom:8px}
.ph-chat-o button{flex:0 0 auto;padding:4px 12px;font-size:12px;border-radius:8px}
/* profil : la colonne de gauche (fiche) et celle de droite (parties) défilent chacune à leur rythme */
@media(min-width:1001px){
  .pl-layout{align-items:start;height:calc(100vh - 62px - 32px - 36px)}
  .pl-layout > .pl-side,.pl-layout > .pl-main{max-height:100%;overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin}
  main:has(.pl-layout){overflow:hidden}
}
/* Serveur du Hub : joueurs présents + mot de passe à saisir (Valheim) */
.csl-joueurs{display:flex;flex-wrap:wrap;gap:6px;margin:8px 0 0}
.csl-j{display:inline-flex;align-items:center;gap:6px;padding:3px 9px 3px 4px;border-radius:20px;background:var(--glass);border:1px solid var(--stroke);font-size:12px}
.csl-j .av,.csl-j img{width:18px;height:18px;border-radius:50%}
.csl-j a{color:inherit;text-decoration:none}
.csl-mdp{margin:8px 0 0;display:flex;flex-wrap:wrap;gap:6px 10px;align-items:center}
/* GIF et images du chat : un peu plus grands */
.cl-l .cl-img,.cl-l img.gif,.cl-l .cl-media img{max-height:220px;max-width:340px}
/* cartes de jeux de l'accueil : moins hautes pour tenir sans défiler */
.hub-jeux{grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:10px}
.hub-jeu{border-radius:14px}
.hub-jeu img{aspect-ratio:460/160}
.hub-jeux{grid-template-columns:repeat(auto-fit,minmax(168px,1fr))}
.hub-jeu img{aspect-ratio:460/150}
.hub-jeu .hj-t,.hub-jeu b{font-size:13px}
.hub-jeu .sub{font-size:11px}
/* Cartes de jeux : même hauteur, titre sur une ligne, bouton toujours au même endroit */
.hub-jeux{align-items:stretch}
.hub-jeu{height:100%;border-radius:14px}
.hub-jeu span{padding:10px 12px 4px;gap:2px;flex:1}
.hub-jeu b{font-size:13.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}
.hub-jeu i{font-size:11.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}
.hub-jeu em{margin:6px 10px 10px;padding:5px 12px;font-size:12px}
/* details.aide héritait de la pastille .aide (17 px de haut) : le texte débordait sur le chat */
details.aide{height:auto;margin-left:0;border:0;background:none;border-radius:0;cursor:default;font:inherit;color:inherit;user-select:auto;place-items:unset}
details.aide p .mono{padding:1px 6px;border-radius:6px;background:var(--glass);border:1px solid var(--stroke);user-select:all}
.cu .st-inv,.ce-g .st-inv{margin-left:6px;font-style:normal;font-size:10px;color:var(--dim);border:1px solid var(--stroke);border-radius:10px;padding:0 6px}
.cu-masque{opacity:.7}
.cr-ghost{width:auto;padding:3px 9px;font-size:11px;margin-bottom:6px;border-radius:8px;gap:5px}
.cr-ghost svg{width:12px;height:12px}
.chat-topic .ct-btn,.chat-topic button{font-size:11px;padding:2px 8px}
/* ===== Chat : noir uni, aucune teinte ; lignes alignées SANS dépendre de « subgrid » (iPad ancien : chaque
   message s'empilait sur trois lignes, d'où l'impression de « trop gros ») (19/09/2026) ===== */
html[data-theme="communaute"] :is(.ce-log,.ce-gens,.chat-log,.chat-main,.chat-rooms,.chat-users,.ce-compact .ce-gens,.chat-input,.chat-topic){background:#000 !important;background-image:none !important}
html[data-theme="communaute"] :is(.ce-log,.ce-gens,.chat-rooms,.chat-users,.chat-main){border-color:rgba(255,255,255,.09)}
.ce-log,.chat-log{display:flex !important;flex-direction:column;grid-template-columns:none}
.ce-log .cl-l,.chat-log .cl-l,.cl-l{display:grid !important;grid-template-columns:190px minmax(0,1fr) auto;grid-column:auto;align-items:center;gap:0 10px;padding:1px 6px}
.cl-l .cr-nick{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cl-l .cl-text{min-width:0}
.cl-l .cl-time,.cl-l time{text-align:right;white-space:nowrap}
.cl-jour{grid-column:auto;width:100%}
@media(max-width:900px){ .cl-l{grid-template-columns:150px minmax(0,1fr) auto} }
@media(max-width:560px){ .cl-l{grid-template-columns:minmax(0,1fr);gap:0} .cl-l .cl-time,.cl-l time{position:absolute;right:6px;top:2px} }
/* lignes du chat : rien que l'écriture — aucun fond par ligne, ni au survol, ni pour ses propres messages */
.cl-l,.cl-l:hover,.cl-l.moi,.cl-l.mention,.ce-log .cl-l,.chat-log .cl-l{background:none !important;box-shadow:none !important;border:0 !important;border-radius:0}
.cl-l.mention .cl-text{color:var(--a2)}
/* façon IRC : le pseudo est calé à DROITE de sa colonne, donc collé au texte, et les textes restent alignés */
.cl-l{grid-template-columns:minmax(0,150px) minmax(0,1fr) auto;gap:0 7px}
.cl-l .cr-nick{justify-self:end;text-align:right;display:inline-flex;align-items:center;gap:4px;max-width:100%}
@media(max-width:900px){ .cl-l{grid-template-columns:minmax(0,140px) minmax(0,1fr) auto} }
/* 4e colonne pour le bouton « supprimer » de l'équipe : sans elle, l'heure passait à la ligne (retour tablette) */
.cl-l{grid-template-columns:minmax(0,150px) minmax(0,1fr) auto auto}
.cl-l .cl-suppr{justify-self:end;font-size:10px;padding:0 4px;opacity:.5}
.cl-l:hover .cl-suppr{opacity:1}
@media(max-width:900px){ .cl-l{grid-template-columns:minmax(0,140px) minmax(0,1fr) auto auto} }
/* Pseudo collé à gauche, texte juste après (façon Twitch/IRC), heure puis ✕ (équipe) à droite — spécificité
   alignée sur la règle « .chat-log .cl-l » d'au-dessus, qui écrasait les colonnes (retour tablette 19/09) */
.ce-log .cl-l,.chat-log .cl-l,.cl-l{grid-template-columns:auto minmax(0,1fr) auto auto;gap:0 6px;padding:1px 6px}
.ce-log .cl-l .cr-nick,.chat-log .cl-l .cr-nick,.cl-l .cr-nick{justify-self:start;text-align:left;max-width:260px;width:auto}
.ce-log .cl-l .cl-suppr,.chat-log .cl-l .cl-suppr{grid-column:4;grid-row:1}
.ce-log .cl-l .cl-time,.chat-log .cl-l .cl-time{grid-column:3;grid-row:1}
.ce-log .cl-l .cl-text,.chat-log .cl-l .cl-text{grid-column:2;grid-row:1}
.ce-log .cl-l .cr-nick,.chat-log .cl-l .cr-nick{grid-column:1;grid-row:1}
@media(max-width:560px){ .ce-log .cl-l,.chat-log .cl-l,.cl-l{grid-template-columns:auto minmax(0,1fr) auto auto} .cl-l .cl-time,.cl-l time{position:static} }
.brand .mark{background:none !important;box-shadow:none !important;padding:0;border:0}
.brand .mark .mark-svg{width:34px;height:34px;border-radius:9px}
/* Bannière « Installer l'application » : en bas à droite, jamais sur le rail ni coupée (retour tablette 19/09) */
.app-bandeau{left:auto !important;right:16px !important;top:auto !important;bottom:16px !important;transform:none !important;max-width:min(520px,calc(100vw - 84px - 32px));width:auto;margin:0;padding:10px 12px;border-radius:14px;background:#0b0b10;border:1px solid rgba(255,255,255,.12)}
.app-bandeau div{font-size:12.5px}
.app-bandeau img{width:32px;height:32px;border-radius:9px}
.app-bandeau button.ok{padding:6px 14px;font-size:12.5px}
@media(max-width:640px){ .app-bandeau{left:8px !important;right:8px !important;bottom:8px !important;max-width:none} }
/* colonne de gauche du profil : elle défile, ses blocs ne se compriment jamais (la carte d'identité s'écrasait à 38 px) */
.pl-layout > .pl-side > *,.pl-layout > .pl-main > *{flex-shrink:0}
/* console des serveurs (équipe) */
.console-srv{margin-top:6px}
.cons-actions{display:flex;flex-wrap:wrap;gap:6px;margin:8px 0}
.cons-actions .bt.sm{padding:4px 10px;font-size:12px}
.cons-form{display:flex;gap:8px;margin:6px 0}
.cons-form input{flex:1;font-family:var(--mono);font-size:12.5px;padding:7px 10px;border-radius:9px;background:#000;border:1px solid var(--stroke);color:var(--txt)}
.cons-sortie{max-height:220px;overflow:auto;background:#000;border:1px solid var(--stroke);border-radius:9px;padding:8px 10px;font-size:11.5px;line-height:1.4;white-space:pre-wrap;color:var(--muted);margin:0}
.cons-sortie:empty{display:none}
/* tirage de carte (parties AoE) */
.sc.cartes .dr-centre{margin:0 auto 10px;text-align:center}
.mc-grille{display:grid;grid-template-columns:repeat(auto-fill,minmax(128px,1fr));gap:6px;max-height:min(46vh,420px);overflow-y:auto;padding:2px}
.mc-carte{position:relative;font:inherit;font-size:12.5px;padding:9px 8px;border-radius:9px;background:#000;border:1px solid var(--stroke);color:var(--muted);cursor:pointer;text-align:center;transition:.15s}
.mc-grille.actif .mc-carte:hover{color:var(--txt);border-color:var(--a1)}
.mc-carte.moi{color:#fff;border-color:var(--a1);background:color-mix(in srgb,var(--a1) 22%,#000)}
.mc-carte:disabled{cursor:default;opacity:.7}
.mc-carte em{position:absolute;top:4px;right:6px;font-style:normal;font-size:11px;color:var(--a1)}
.sa-recap.cartes{flex-wrap:wrap;gap:8px}
.mc-res{padding:3px 10px;border-radius:8px;background:color-mix(in srgb,var(--a1) 22%,#000);border:1px solid var(--a1);color:#fff;font-size:13px}
.mc-choix{display:flex;flex-wrap:wrap;gap:6px 12px;width:100%;font-style:normal;font-size:11.5px;color:var(--muted)}
.mc-choix .eq0{color:#7fb3ff}.mc-choix .eq1{color:#ff9b7f}
.mc-pool summary{cursor:pointer;font-size:12.5px;color:var(--muted)}
.mc-pool-l{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:2px 10px;margin-top:6px;max-height:180px;overflow-y:auto}
.mc-pool-l .chk{font-size:12px}
.mc-lier{display:inline-flex;gap:6px;vertical-align:middle}.mc-lier .inp{width:110px;font-family:var(--mono);text-transform:uppercase;padding:4px 8px}
/* ===== Profil Hub (#/u/<id>) ===== */
.pu{display:flex;flex-direction:column;gap:12px}
.pu-tete{display:flex;gap:16px;align-items:flex-start;padding:18px 20px;position:relative;overflow:hidden}
.pu-tete.ban::before{content:'';position:absolute;inset:0;background:var(--pu-ban) center/cover;opacity:.22;pointer-events:none}
.pu-tete > *{position:relative}
.pu-id{display:flex;gap:16px;align-items:flex-start;flex:1;min-width:0}
.pu-id > .av,.pu-id > img{width:72px;height:72px;border-radius:18px;flex:none}
.pu-id h2 img,.pu-id h2 .flag{width:22px;height:auto;border-radius:3px}
.pu-id h2{margin:0 0 4px;font-size:22px;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.pu-id h2 .tag{font-size:14px;color:var(--a2);text-decoration:none}
.pu-role{font-size:10px;letter-spacing:.08em;text-transform:uppercase;padding:2px 8px;border-radius:8px;border:1px solid}
.pu-role.admin{color:#ffd166;border-color:rgba(255,209,102,.5)}.pu-role.mod{color:#7fb3ff;border-color:rgba(127,179,255,.5)}.pu-role.salon{color:#9be7c4;border-color:rgba(155,231,196,.5);text-transform:none}
.pu-bio{margin:8px 0 0;font-size:13.5px;line-height:1.45;max-width:70ch;white-space:pre-wrap}
.pu-reseaux{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}
.pu-res{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:20px;font:inherit;font-size:12px;color:var(--txt);background:#000;border:1px solid var(--stroke);text-decoration:none;cursor:pointer}
.pu-res svg{color:var(--sc)}.pu-res:hover{border-color:var(--sc)}
.pu-actions{display:flex;flex-direction:column;gap:6px;flex:none}
.pu-actions .bt{white-space:nowrap}
.pu-jeux{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:10px}
.pu-jeu{display:flex;gap:12px;align-items:center;padding:10px 12px;border-radius:14px;background:#0b0b10;border:1px solid var(--stroke);text-decoration:none;color:var(--txt)}
.pu-jeu img{width:92px;height:36px;object-fit:cover;border-radius:8px;flex:none}
.pu-jeu b{display:block;font-size:13.5px}.pu-jeu .sub{font-size:12px;line-height:1.5}.pu-jeu .sub i{font-style:normal;color:var(--dim)}
.pu-jeu:hover{border-color:var(--a1)}
.pl-hub{display:block;margin:8px 0 2px;font-size:12.5px;color:var(--a2);text-decoration:none}
@media(max-width:700px){.pu-tete{flex-direction:column}.pu-actions{flex-direction:row;flex-wrap:wrap}}
.pr-bio textarea{width:100%;min-height:70px;resize:vertical;font:inherit;font-size:13px;padding:8px 10px;border-radius:9px;background:#000;border:1px solid var(--stroke);color:var(--txt)}
.pr-bio{align-items:flex-start}.pr-bio > div:first-child{flex:none;width:220px}
/* profil Hub : en-tête sur toute la largeur, actions calées à droite, cartes qui remplissent */
.pu-tete{display:flex !important;align-items:center}
.pu-id{flex:1 1 auto;min-width:0}
.pu-actions{margin-left:auto;display:grid;grid-template-columns:1fr;gap:6px;min-width:180px}
.pu-actions .bt{text-align:center}
.pu-jeux{grid-template-columns:repeat(auto-fit,minmax(320px,1fr))}
.pu-jeu{padding:14px 16px}
.pu-jeu img{width:120px;height:46px;border-radius:10px}
.pu-jeu .sub{font-size:12.5px}
@media(max-width:700px){.pu-actions{grid-template-columns:1fr 1fr;margin-left:0;width:100%}}
.qr-bloc{display:flex;flex-direction:column;align-items:center;gap:10px}
.qr{width:220px;height:220px;background:#fff;padding:8px;border-radius:12px}.qr svg{width:100%;height:100%;display:block}
.qr-actions{display:flex;gap:8px;flex-wrap:wrap;justify-content:center}
.pu-partage{display:flex;gap:16px;align-items:center}
.pu-partage .qr-petit{width:132px;height:132px;padding:6px;border-radius:10px;flex:none}
.pu-partage > div:last-child{display:flex;flex-direction:column;gap:6px;min-width:0}
.pu-partage .sub.mono{word-break:break-all;font-size:12px}
.pu-partage .qr-actions{justify-content:flex-start}
.mc-pos .csl-j b{color:var(--a2);font-weight:600}
/* La Tour en direct */
.mc-direct{display:grid;grid-template-columns:150px 1fr;gap:14px;margin:10px 0 4px;align-items:start}
.mc-tour{position:relative;height:340px;background:#000;border:1px solid var(--stroke);border-radius:12px;overflow:hidden}
.mc-tour svg{width:100%;height:100%;display:block}
.mc-marqueurs{position:absolute;inset:0;pointer-events:none}
.mc-marq{position:absolute;transform:translate(-50%,-50%);display:flex;align-items:center;gap:4px;transition:top 2.8s linear,left 2.8s linear;white-space:nowrap}
.mc-marq i{width:9px;height:9px;border-radius:50%;background:#3ddc97;box-shadow:0 0 8px #3ddc97;flex:none}
.mc-marq.moi i{background:#ffd166;box-shadow:0 0 8px #ffd166}
.mc-marq span{font-size:10px;color:#fff;background:rgba(0,0,0,.7);padding:1px 5px;border-radius:6px}
.mc-top ol{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:3px;max-height:310px;overflow-y:auto}
.mc-top li{display:flex;align-items:center;gap:8px;font-size:12.5px;padding:3px 6px;border-radius:8px;background:#0b0b10;border:1px solid var(--stroke)}
.mc-top li a{color:inherit;text-decoration:none}.mc-top li b{margin-left:auto;color:var(--a2)}.mc-top li em{font-style:normal;color:#ffd166;font-size:11px}
.mc-rang{width:18px;text-align:center;color:var(--dim);font-size:11px}
.mc-top .av,.mc-top img{width:18px;height:18px;border-radius:5px}
@media(max-width:640px){.mc-direct{grid-template-columns:110px 1fr}.mc-tour{height:260px}}
.mc-tour{height:230px}.mc-top ol{max-height:200px}
@media(min-height:1000px){.mc-tour{height:340px}.mc-top ol{max-height:310px}}
/* marqueur cubique : une petite tête de bonhomme (tête + corps) */
.mc-marq i{width:10px;height:10px;border-radius:1px;background:#e0ac69;box-shadow:0 0 0 1px #000,0 0 8px #3ddc97;position:relative}
.mc-marq i b{position:absolute;left:0;right:0;top:10px;height:8px;background:#3ddc97;border-radius:1px;box-shadow:0 0 0 1px #000}
.mc-marq.moi i{box-shadow:0 0 0 1px #000,0 0 8px #ffd166}.mc-marq.moi i b{background:#ffd166}
.mc-marq span{font-family:var(--mono);letter-spacing:.02em}
.mc-tour{background:#06070b}
/* page Minecraft : tout en angles droits, façon blocs */
#csHub[data-jeu="99001"] .csl,#csHub[data-jeu="99001"] .mc-tour,#csHub[data-jeu="99001"] .mc-top li,#csHub[data-jeu="99001"] .csl-j,#csHub[data-jeu="99001"] .ce-log,#csHub[data-jeu="99001"] .ce-gens,#csHub[data-jeu="99001"] .ce-compact,#csHub[data-jeu="99001"] .ph-main,#csHub[data-jeu="99001"] .chat-input input,#csHub[data-jeu="99001"] .pl-join,#csHub[data-jeu="99001"] .pl-copie,#csHub[data-jeu="99001"] .ph-chat-o,#csHub[data-jeu="99001"] .ph-chat-o button{border-radius:0 !important}
#csHub[data-jeu="99001"] .mc-tour,#csHub[data-jeu="99001"] .mc-top li,#csHub[data-jeu="99001"] .csl{border-width:2px;border-color:#2b2d38}
#csHub[data-jeu="99001"] .mc-marq span{border-radius:0}
.mc-top .mc-nom{display:flex;flex-direction:column;min-width:0;line-height:1.2}.mc-top .mc-nom u{text-decoration:none;font-size:10.5px;color:var(--dim)}
.mc-top li.en-ligne .mc-nom u{color:#3ddc97}.mc-top .pt{display:inline-block;width:6px;height:6px;border-radius:50%;background:#3ddc97;margin-right:4px}
/* ---- Minecraft « La Tour » : en ligne détaillé, chiffres, exploits, sessions, courbes (angles droits, comme le reste de la page) ---- */
.mc-bloc{background:#0b0b10;border:2px solid #2b2d38;padding:12px 14px;min-width:0}
.mc-enligne{margin-top:14px}
.mc-stats{margin-top:14px}
.mc-kpi{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:10px}
.mc-kpi .tile{border-radius:0;padding:12px 14px;border:2px solid #2b2d38;background:#0b0b10;backdrop-filter:none;box-shadow:none}
.mc-kpi .tile:hover{transform:none;border-color:#3a3d4a}
.mc-kpi .tile .v{font-size:24px;margin-top:4px}
.mc-kpi .tile .n{line-height:1.3}
.mc-moi{margin-top:12px}
.mc-moi-l{display:flex;flex-wrap:wrap;gap:6px 18px;font-size:12.5px;color:var(--muted)}
.mc-moi-l b{color:var(--a2);font-weight:600}
.mc-astuce{margin:10px 0 0}
.mc-stats-grille{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:14px;margin-top:12px}
.mc-stats-grille .mc-bloc .ce-gens-t{margin-bottom:8px}
.mc-liste{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:4px}
.mc-liste li{display:flex;align-items:center;gap:8px;font-size:12.5px;padding:5px 8px;background:#0e0e15;border:1px solid var(--stroke);min-width:0}
.mc-liste .av,.mc-liste img,.mc-tab .av,.mc-tab img{width:20px;height:20px;border-radius:0;flex:none}
.mc-av{display:grid;place-items:center;font-size:11px;color:var(--dim);background:#16161f}
.mc-liste .mc-q{display:flex;align-items:center;gap:8px;flex:1;min-width:0;flex-wrap:wrap}
.mc-liste .mc-q a,.mc-liste .mc-q > span{color:inherit;text-decoration:none;font-weight:600}
.mc-liste .mc-q u{text-decoration:none;font-size:11px;color:var(--dim);flex-basis:100%}
.mc-liste li > i{font-style:normal;font-size:11px;color:var(--dim);white-space:nowrap;margin-left:auto}
.mc-liste .mc-ic{width:20px;height:20px;display:grid;place-items:center;color:#ffd166;flex:none}
.mc-liste .mc-ic .gl{width:15px;height:15px}
.mc-vide{margin:0;padding:18px 6px;text-align:center;font-size:12.5px}
.mc-tab{width:100%;border-collapse:collapse;font-size:12.5px}
.mc-tab th{font-size:10px;text-transform:uppercase;letter-spacing:.08em;color:var(--dim);text-align:left;padding:4px 8px;font-weight:700;white-space:nowrap}
.mc-tab td{padding:6px 8px;border-top:1px solid var(--stroke);white-space:nowrap}
.mc-tab td:first-child{display:flex;align-items:center;gap:8px;white-space:normal}
.mc-tab td a{color:inherit;text-decoration:none;font-weight:600}
.mc-tab td b{color:var(--a2)}
.mc-tab tr.moi td{background:rgba(255,209,102,.06)}
.mc-tab tr.moi td b{color:#ffd166}
#csHub[data-jeu="99001"] .mc-bloc,#csHub[data-jeu="99001"] .mc-liste li,#csHub[data-jeu="99001"] .mc-kpi .tile,#csHub[data-jeu="99001"] .mc-av{border-radius:0 !important}
@media(max-width:900px){.mc-tab th:nth-child(5),.mc-tab td:nth-child(5),.mc-tab th:nth-child(7),.mc-tab td:nth-child(7){display:none}}
/* ---- Accueil du Hub : chiffres, annonces, prochains tournois ---- */
.hub-kpi{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:10px;margin-top:14px}
.hub-kpi .tile{padding:12px 16px}
.hub-kpi .tile .v{font-size:24px;margin-top:4px}
.hub-kpi .tile .n{line-height:1.3}
.hub-2col{display:grid;grid-template-columns:repeat(auto-fit,minmax(340px,1fr));gap:14px;margin-top:14px}
.hub-2col .panel{min-width:0}
.hub-2col .head{margin-bottom:12px}
.ann-liste{display:flex;flex-direction:column;gap:8px}
.ann-l{padding:10px 12px;border-radius:12px;background:#0e0e15;border:1px solid rgba(255,255,255,.07);display:flex;flex-direction:column;gap:4px;min-width:0}
.ann-l.epingle{border-color:rgba(168,85,247,.45)}
.ann-l b{font-size:14px;display:flex;align-items:center;gap:8px;min-width:0}
.ann-l b .gl{color:var(--a2);flex:none}
.ann-l p{margin:2px 0 0;font-size:13px;color:var(--muted);white-space:pre-line;overflow-wrap:anywhere}
.ann-m{font-size:11px;color:var(--dim);display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-top:2px}
.ann-m a{color:var(--a2)}
.ann-m .btn-ghost{font-size:11px;padding:2px 8px}
.ann-vide{padding:26px 12px}
.ann-vide p{margin:0}
.ann-form{margin-top:12px}
.hub-to{display:flex;flex-direction:column;gap:8px}
.hub-to a.to-c{grid-template-columns:84px minmax(0,1fr) auto;padding:8px 10px;text-decoration:none;color:inherit;transition:border-color .15s}
.hub-to a.to-c:hover{border-color:rgba(255,255,255,.18)}
.hub-to .to-c img{width:84px}
.hub-to .to-t b{font-size:14px;overflow-wrap:anywhere}
.ann-form label.chk{flex-direction:row;align-items:center;gap:8px}
.ann-form label.chk span{font-size:12.5px;text-transform:none;letter-spacing:0;color:var(--muted);font-weight:500}
@media(max-width:640px){.hub-2col{grid-template-columns:1fr}}
@media(max-width:1500px){.mc-stats-grille{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:700px){.mc-stats-grille{grid-template-columns:1fr}}

/* Page Jouer Minecraft (20/09/2026, demande de Kripy) : 3 rangées — infos serveur pleine largeur ; Tour + Top 10 à gauche et le chat à côté, même hauteur ; stats pleine largeur. Empilé sous 1080 px. */
#csHub[data-jeu="99001"]{display:grid;grid-template-columns:minmax(0,1fr) 520px;grid-template-areas:"info info" "live chat" "suite suite";gap:14px;align-items:stretch}
#csHub[data-jeu="99001"] > #mcHub{display:none}
#csHub[data-jeu="99001"] > .ph-main:not(.mc-suite){grid-area:info;max-height:none}
#csHub[data-jeu="99001"] > .mc-live{grid-area:live;margin:0}
#csHub[data-jeu="99001"] > .mc-suite{grid-area:suite;max-height:none}
#csHub[data-jeu="99001"] > .ph-chat{grid-area:chat;position:static;width:auto;display:flex;flex-direction:column;min-height:0}
#csHub[data-jeu="99001"] .ph-chat .ph-chat-c,#csHub[data-jeu="99001"] .ph-chat .chat-emb{flex:1;display:flex;flex-direction:column;min-height:0}
#csHub[data-jeu="99001"] .ph-chat .ce-log{height:440px!important;min-height:320px!important;max-height:none!important;flex:1}
#csHub[data-jeu="99001"] .mc-direct{margin:0}
#csHub[data-jeu="99001"] .mc-top{min-width:0}
#csHub[data-jeu="99001"] .mc-enligne{overflow-x:auto}
@media (max-width:1499px){
  #csHub[data-jeu="99001"]{display:flex;flex-direction:column;align-items:stretch}
  #csHub[data-jeu="99001"] .ph-chat .ce-log{height:380px!important;min-height:0!important;flex:none}
}
.mc-cl-t{margin-top:12px}
.mc-cl{width:100%;border-collapse:collapse;margin-top:6px;font-size:13px}
.mc-cl th{text-align:left;font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);padding:4px 8px;font-weight:600}
.mc-cl td{padding:6px 8px;border-top:1px solid var(--stroke)}
.mc-cl td:first-child{width:36px;color:var(--muted)}
.mc-cl tr.moi td{background:color-mix(in srgb,var(--a1) 18%,transparent);font-weight:600;color:#f6f7ff}

#csHub[data-jeu="99001"] .mc-top{display:flex;flex-direction:column;min-height:0}
/* Kripy (20/09) : la Tour prend toute la hauteur du bloc Top 10 + En ligne (grille étirée, SVG en preserveAspectRatio none, marqueurs en %) */
#csHub[data-jeu="99001"] .mc-direct{align-items:stretch}
#csHub[data-jeu="99001"] .mc-tour{height:auto;min-height:340px;align-self:stretch}
#csHub[data-jeu="99001"] .mc-top ol{max-height:none}
#csHub[data-jeu="99001"] .mc-top .mc-enligne{margin-top:12px}

/* Pub Kripy Deck en pied d'Accueil (18/09/2026) : discrète, refermable. */
.pub-deck{margin-top:14px;display:grid;grid-template-columns:1fr auto;gap:6px 18px;align-items:center;border-color:color-mix(in srgb,var(--a1) 35%,var(--stroke))}
.pub-deck .pub-deck-t{font-size:14px}.pub-deck .pub-deck-t b{background:linear-gradient(90deg,#b39dff,#22d3ee);-webkit-background-clip:text;background-clip:text;color:transparent}
.pub-deck p{margin:0;grid-column:1}.pub-deck .pub-deck-a{grid-column:2;grid-row:1/3;display:flex;gap:8px}
@media(max-width:640px){.pub-deck{grid-template-columns:1fr}.pub-deck .pub-deck-a{grid-column:1;grid-row:auto}}


/* ===================== Refonte « façon deck.krp.hk » (20/09/2026, demande de Kripy) =====================
   « Trop plat, trop carré, trop sombre, trop vide sur PC. » On reprend le thème visuel de deck.krp.hk : bleu nuit
   lumineux avec halos violet/cyan sur TOUTE la fenêtre, panneaux nettement plus clairs que le fond, bords arrondis
   PARTOUT (Minecraft compris — l'exception « cubes » est levée), boutons épais façon touches, anneau de focus violet,
   sur-titres cyan en petites capitales, contenu qui occupe les grands écrans. Structure et fonctions inchangées : ce
   bloc ne touche qu'aux couleurs, rayons, ombres et largeurs. Placé en fin de fichier, il l'emporte sur les passes
   « aplats » et « noir profond » du 18/09 (mêmes sélecteurs, plus tard dans la cascade). */
html:is([data-theme="communaute"],[data-theme="clair"]){
  /* 2e passe (Kripy : « moins sombre ») : fond bleu nuit lumineux, panneaux nettement plus clairs, texte remonté */
  /* Kripy (20/09, 3e retouche) : « le site tire trop sur le bleu » → anthracite à peine violacé, même clarté ; halos violet/cyan conservés. */
  --bg:#18171f;--bg-2:#1d1c25;--panel:#242331;--panel2:#2b2a39;--key:#343340;--key2:#403f4e;
  --carte:linear-gradient(180deg,#2c2b3a,#242331);
  --line:rgba(var(--neu-rgb),.18);--line2:rgba(var(--neu-rgb),.26);--line3:rgba(var(--neu-rgb),.40);
  --cyan:#22d3ee;--violet:var(--id);--primary:var(--id);--primary2:var(--id-lo);
  --txt:#ffffff;--muted:#e3e1ee;--dim:#b4b1c6;
  --glass:rgba(var(--neu-rgb),.10);--glass-2:rgba(var(--neu-rgb),.15);--glass-hi:rgba(var(--neu-rgb),.22);
  --stroke:var(--line);--stroke-2:var(--line2);
  --r:20px;--r-m:14px;--r-s:10px;
  --verre:linear-gradient(180deg,var(--panel2),var(--panel));--verre-bord:var(--line);
  --sh:0 24px 48px -28px rgba(0,0,0,.75);--sh-s:0 14px 30px -20px rgba(0,0,0,.7);
  --verre-ombre:inset 0 1px 0 rgba(255,255,255,.09),var(--sh);
  --creux:rgba(10,9,16,.30);
  --touche:inset 0 1px 0 rgba(255,255,255,.07),inset 0 -2px 0 rgba(0,0,0,.35);
  --touche-p:inset 0 1px 0 rgba(255,255,255,.5),inset 0 -2px 0 rgba(var(--id-deep-rgb),.45),0 10px 26px -10px rgba(var(--id-rgb),.6);
  --degrade-p:linear-gradient(180deg,var(--id-hi) 0%,var(--id) 35%,var(--id-lo) 100%);
  --degrade-p2:linear-gradient(180deg,var(--id-hi) 0%,var(--id-hi) 35%,var(--id-lo) 100%);
  --halo-1:rgba(var(--id-rgb),.26);--halo-2:rgba(34,211,238,.11);--grille:rgba(var(--neu-rgb),.04);
  --entete:rgba(24,23,31,.84);--flottant:linear-gradient(180deg,#2b2a39,#242331);--th:rgba(36,35,49,.94)}

/* fond : bleu nuit + halos violet/cyan/rose + grille discrète, sur toute la fenêtre (le corps est fixe, seul <main> défile) */
html:is([data-theme="communaute"],[data-theme="clair"]) body{color:var(--txt);background-color:var(--bg);
  background-image:
    radial-gradient(1500px 900px at 85% -10%,var(--halo-1),transparent 62%),
    radial-gradient(1300px 900px at -5% 105%,var(--halo-2),transparent 62%),
    linear-gradient(var(--grille) 1px,transparent 1px),
    linear-gradient(90deg,var(--grille) 1px,transparent 1px);
  background-size:auto,auto,44px 44px,44px 44px;background-attachment:scroll}
html:is([data-theme="communaute"],[data-theme="clair"]) body::before{display:none}
html:is([data-theme="communaute"],[data-theme="clair"]) ::selection{background:rgba(var(--id-rgb),.35)}
html:is([data-theme="communaute"],[data-theme="clair"]) header.top{background:var(--entete);border-bottom:1px solid var(--line);
  -webkit-backdrop-filter:blur(16px) saturate(150%) !important;backdrop-filter:blur(16px) saturate(150%) !important}

/* panneaux et cartes : dégradé bleu nuit, liseré clair en haut, ombre profonde */
html:is([data-theme="communaute"],[data-theme="clair"]) :is(.panel,.sa-etapes,.sa-regl,.sa-eq,.sc,.ph-liste,.pl-liste,.ph-form,.mp-alerte,.sa-dem,.clan-vcard,.srv-liste,.hub-jeu,.tw-card,.jx-card,.tile,.mc-bloc,.cs-hub,.csc){
  background:radial-gradient(520px 180px at 0% 0%,rgba(var(--neu-rgb),.07),transparent 62%),var(--verre);
  border:1px solid var(--line);box-shadow:var(--verre-ombre);-webkit-backdrop-filter:none;backdrop-filter:none}
html:is([data-theme="communaute"],[data-theme="clair"]) .sc.bans{background:var(--verre)}
html:is([data-theme="communaute"],[data-theme="clair"]) .panel::before{background:linear-gradient(90deg,transparent,rgba(255,255,255,.22),transparent)}
html:is([data-theme="communaute"],[data-theme="clair"]) .panel .panel{box-shadow:inset 0 1px 0 rgba(255,255,255,.05)}
html:is([data-theme="communaute"],[data-theme="clair"]) :is(.tile,.hub-jeu,.mc-bloc,.mc-kpi .tile,.tw-card,.jx-card){background:var(--carte)}
html:is([data-theme="communaute"],[data-theme="clair"]) :is(.hub-jeu,.mc-bloc,.clan-vcard){border-radius:16px}
html:is([data-theme="communaute"],[data-theme="clair"]) :is(.tile,.ph-liste,.pl-liste,.ph-form,.srv-liste,.ce-compact,.csl,.to-c,.ann-l,.pu-jeu,.mp-alerte,.sa-dem,.sa-regl){border-radius:14px}
html:is([data-theme="communaute"],[data-theme="clair"]) .tile::after{background:linear-gradient(90deg,var(--violet),var(--cyan));opacity:.9}
html:is([data-theme="communaute"],[data-theme="clair"]) .tile:hover{border-color:var(--line3)}
html:is([data-theme="communaute"],[data-theme="clair"]) .tile .v{background:linear-gradient(135deg,#fff,var(--id-pale));-webkit-background-clip:text;background-clip:text;color:transparent}
html:is([data-theme="communaute"],[data-theme="clair"]) .sa-eq.eq0{background:linear-gradient(160deg,rgba(74,140,255,.24),var(--panel) 62%);border-color:rgba(125,192,255,.42)}
html:is([data-theme="communaute"],[data-theme="clair"]) .sa-eq.eq1{background:linear-gradient(160deg,rgba(255,138,92,.22),var(--panel) 62%);border-color:rgba(255,157,122,.42)}
/* sous-cartes posées dans un panneau : un ton plus clair, jamais noires */
html:is([data-theme="communaute"],[data-theme="clair"]) :is(.ann-l,.to-c,.csl,.pu-jeu,.mc-top li,.mc-liste li,.csl-j,.pu-res,.el-c,.ap-l,.act-ic,.mc-av,.ct){background:var(--glass);border:1px solid var(--line);box-shadow:none}
html:is([data-theme="communaute"],[data-theme="clair"]) .ann-l.epingle{border-color:rgba(var(--id-rgb),.55)}
html:is([data-theme="communaute"],[data-theme="clair"]) .csl.on{border-color:rgba(61,220,151,.45)}
html:is([data-theme="communaute"],[data-theme="clair"]) :is(.hub-jeu,.to-c,.pu-jeu,.hub-to a.to-c):hover{border-color:var(--line3);box-shadow:inset 0 1px 0 rgba(255,255,255,.08),0 30px 60px -28px rgba(0,0,0,.85),0 0 0 1px rgba(var(--id-rgb),.18)}
html:is([data-theme="communaute"],[data-theme="clair"]) :is(.sa-j,.sa-res,.mb-civ,.dr-slot,.am-l:hover,.ph-l:hover,.srv-l:hover,.cl-g:hover,.act-l:hover,.me-menu a:hover,.cmenu button:hover,.cmenu a:hover,.snav a:not(.on):hover){background:var(--glass-2)}
html:is([data-theme="communaute"],[data-theme="clair"]) :is(.srv-l,.pl-l,.ph-l):nth-child(even){background:rgba(var(--neu-rgb),.035)}
html:is([data-theme="communaute"],[data-theme="clair"]) :is(.ph-l,.pl-l,.srv-l){border-top-color:var(--line)}
html:is([data-theme="communaute"],[data-theme="clair"]) :is(.srv-table tbody tr:nth-child(even) td,tr.pp-detail td){background:rgba(var(--neu-rgb),.035)}
html:is([data-theme="communaute"],[data-theme="clair"]) :is(.srv-table tbody tr:hover td,.srv-table tbody tr:nth-child(even):hover td,.srv-table tr.sb-l.ouvert td,tr.pp-l.ouvert td){background:var(--glass-2)}
html:is([data-theme="communaute"],[data-theme="clair"]) :is(thead th,.srv-table thead th){background:var(--th);color:var(--dim);border-bottom:1px solid var(--line);-webkit-backdrop-filter:none;backdrop-filter:none}
html:is([data-theme="communaute"],[data-theme="clair"]) :is(.srv-table td,.mc-tab td,.mc-cl td){border-top-color:var(--line)}
html:is([data-theme="communaute"],[data-theme="clair"]) :is(.cons-sortie,.mc-tour,.cons-form input,.pr-bio textarea){background:var(--bg-2);border-color:var(--line)}

/* chat : cadre en panneau, zone des messages en creux (un ton plus sombre), jamais noir uni */
/* (spécificité : la règle « chat noir uni » du 19/09 contient « .ce-compact .ce-gens » dans son :is(), qui vaut pour
   toute la liste ; on aligne la nôtre avec des sélecteurs composés pour passer devant) */
html:is([data-theme="communaute"],[data-theme="clair"]) :is(.chat-wrap .chat-main,.chat-wrap .chat-rooms,.chat-wrap .chat-users,.chat-main,.chat-rooms,.chat-users,.ce-compact,.ph-chat .ce-compact){
  background:radial-gradient(520px 180px at 0% 0%,rgba(var(--neu-rgb),.07),transparent 62%),var(--verre) !important;background-image:radial-gradient(520px 180px at 0% 0%,rgba(var(--neu-rgb),.07),transparent 62%),linear-gradient(180deg,var(--panel2),var(--panel)) !important;
  border:1px solid var(--line) !important;box-shadow:var(--verre-ombre)}
html:is([data-theme="communaute"],[data-theme="clair"]) :is(.chat-main,.chat-rooms,.chat-users){border-radius:16px}
html:is([data-theme="communaute"],[data-theme="clair"]) :is(.chat-main .chat-log,.chat-log,.ce-log,.ce-gens,.ce-compact .ce-gens,.ce-compact .ce-log){background:var(--creux) !important;background-image:none !important;border-color:var(--line) !important}
html:is([data-theme="communaute"],[data-theme="clair"]) :is(.ce-log,.ce-gens){border-radius:12px}
html:is([data-theme="communaute"],[data-theme="clair"]) :is(.chat-main .chat-topic,.chat-main .chat-input,.chat-topic,.chat-input){background:transparent !important;background-image:none !important;border-color:var(--line)}
html:is([data-theme="communaute"],[data-theme="clair"]) .chat-rooms .cr-me{background:var(--panel)}
html:is([data-theme="communaute"],[data-theme="clair"]) .chat-rooms .cr-me::before{background:transparent}
html:is([data-theme="communaute"],[data-theme="clair"]) .cl-g.moi{background:rgba(var(--id-rgb),.08)}

/* boutons façon touches : épaisseur en bas, remonte au survol, s'enfonce au clic */
html:is([data-theme="communaute"],[data-theme="clair"]) :is(.bt,.inv-b,.btn-ghost,.pl-copie,.sa-retour,.sa-badge,.ce-gens-b,.sa-plus,.ch-chip,.cr-ghost,.me-av,.jeu-choix,.app-bandeau button,.srv-puces button,.ct-btn,.chat-topic button.chip,.am-act button,.sa-ctl button,.qr-actions button,.chat-input button,.ce-form button){
  background:var(--key);border:1px solid var(--line2);color:var(--txt);box-shadow:var(--touche);
  -webkit-backdrop-filter:none;backdrop-filter:none;transition:transform .08s,background .15s,border-color .15s,box-shadow .15s}
html:is([data-theme="communaute"],[data-theme="clair"]) .spot-trigger{background:var(--key);border:1px solid var(--line2);box-shadow:var(--touche);-webkit-backdrop-filter:none;backdrop-filter:none}
html:is([data-theme="communaute"],[data-theme="clair"]) .spot-trigger:hover{background:var(--key2);border-color:var(--line3)}
html:is([data-theme="communaute"],[data-theme="clair"]) .mc-carte{background:var(--key);border:1px solid var(--line2);box-shadow:var(--touche);border-radius:10px}
html:is([data-theme="communaute"],[data-theme="clair"]) .mc-carte.moi{color:#fff;border-color:var(--a1);background:color-mix(in srgb,var(--a1) 30%,var(--key))}
html:is([data-theme="communaute"],[data-theme="clair"]) :is(.bt,.inv-b,.btn-ghost,.pl-copie,.sa-retour,.ce-gens-b,.sa-plus,.ch-chip,.cr-ghost,.me-av,.jeu-choix,.app-bandeau button,.srv-puces button,.pu-res,.chat-input button,.ce-form button):hover{background:var(--key2);border-color:var(--line3);filter:none}
html:is([data-theme="communaute"],[data-theme="clair"]) :is(.bt,.inv-b,.pl-join,.btn-primary,.btn-ghost,.ch-chip,.pl-copie,.sc-pret,.sc-go,.dr-pret,.chat-input button,.ce-form button):active{transform:translateY(1px);box-shadow:inset 0 1px 0 rgba(255,255,255,.04),inset 0 -1px 0 rgba(0,0,0,.35)}
html:is([data-theme="communaute"],[data-theme="clair"]) :is(.bt,.inv-b,.btn-ghost,.btn-primary,.pl-join,.pl-copie,.sa-retour,.ce-gens-b,.sa-plus,.app-bandeau button,.chat-input button,.ce-form button,.cons-actions .bt){border-radius:12px}
html:is([data-theme="communaute"],[data-theme="clair"]) :is(.bt.sm,.btn-ghost.sm,.btn-primary.sm,.cons-actions .bt.sm,.ct-btn,.chat-topic button.chip){border-radius:10px}
html:is([data-theme="communaute"],[data-theme="clair"]) .bt.grand{border-radius:14px}
/* bouton principal : dégradé violet, reflet en haut, épaisseur violette en bas, halo dessous */
html:is([data-theme="communaute"],[data-theme="clair"]) :is(.bt.ok,.pl-join,.inv-b.ok,.sc-pret,.sc-go,.dr-pret,.btn-primary,.tabs button.on,.snav a.on,.ch-chip.on,.langsel button.on,.ph-chat-o button.on,.cjb .on,.ce-bascule button.on,.hub-jeu em,.app-bandeau button.ok,.ch-nouveau,.maj-dispo,.jeu-general,.dock a.on .ic,.mc-res){
  color:#fff;background:var(--degrade-p);border-color:var(--id-soft);text-shadow:0 1px 0 rgba(0,0,0,.25);box-shadow:var(--touche-p);filter:none}
html:is([data-theme="communaute"],[data-theme="clair"]) :is(.bt.ok,.pl-join,.inv-b.ok,.sc-pret,.sc-go,.btn-primary,.hub-jeu em,.app-bandeau button.ok,.dock a.on .ic):hover{filter:none;background:var(--degrade-p2);border-color:var(--id-soft);box-shadow:inset 0 1px 0 rgba(255,255,255,.5),inset 0 -2px 0 rgba(var(--id-deep-rgb),.45),0 14px 30px -10px rgba(var(--id-rgb),.75)}
html:is([data-theme="communaute"],[data-theme="clair"]) :is(.cr-room.on,.cl-av-txt){color:#fff;background:var(--degrade-p);box-shadow:inset 0 1px 0 rgba(255,255,255,.3)}
html:is([data-theme="communaute"],[data-theme="clair"]) .sc-pret.ok{color:#7ff0bd;background:#164a38;border-color:#2b8a63;text-shadow:none;box-shadow:var(--touche)}
html:is([data-theme="communaute"],[data-theme="clair"]) :is(.bt.danger,.btn-ghost.danger){color:#ffb3ad;background:rgba(255,59,48,.12);border-color:rgba(255,59,48,.4);box-shadow:var(--touche)}
html:is([data-theme="communaute"],[data-theme="clair"]) :is(.bt.danger,.btn-ghost.danger):hover{background:rgba(255,59,48,.2)}
html:is([data-theme="communaute"],[data-theme="clair"]) .chip{border-radius:999px}

/* onglets, sélecteurs, sous-navigation : une réglette en creux, l'onglet actif en touche violette */
html:is([data-theme="communaute"],[data-theme="clair"]) :is(.tabs,.langsel,.snav,.ph-chat-o,.cjb,.ce-bascule){background:var(--bg-2);border:1px solid var(--line);border-radius:14px;box-shadow:inset 0 1px 3px rgba(0,0,0,.35);-webkit-backdrop-filter:none;backdrop-filter:none}
html:is([data-theme="communaute"],[data-theme="clair"]) :is(.tabs button,.snav a,.langsel button,.ph-chat-o button,.cjb a,.cjb button,.ce-bascule button){border-radius:10px;color:var(--muted)}
html:is([data-theme="communaute"],[data-theme="clair"]) :is(.tabs button,.snav a,.langsel button,.ph-chat-o button,.cjb a,.cjb button,.ce-bascule button):hover{color:var(--txt)}
html:is([data-theme="communaute"],[data-theme="clair"]) :is(.tabs button.on,.snav a.on,.langsel button.on,.ph-chat-o button.on,.cjb .on,.ce-bascule button.on){color:#fff}
html:is([data-theme="communaute"],[data-theme="clair"]) .srv-puces button{border-radius:999px}

/* champs : fond en creux, rayon 12, anneau de focus violet */
html:is([data-theme="communaute"],[data-theme="clair"]) :is(input:not([type=checkbox]):not([type=radio]):not([type=range]):not([type=color]),select,textarea,.inp,.mb-nom,.chat-input input,.ce-form input){
  background-color:var(--bg-2);border:1px solid var(--line2);color:var(--txt);border-radius:12px;box-shadow:inset 0 1px 2px rgba(0,0,0,.35);-webkit-backdrop-filter:none;backdrop-filter:none}
html:is([data-theme="communaute"],[data-theme="clair"]) :is(input,select,textarea,.inp,.mb-nom):focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px rgba(var(--id-rgb),.22),inset 0 1px 2px rgba(0,0,0,.35)}
html:is([data-theme="communaute"],[data-theme="clair"]) .spot-input input,html:is([data-theme="communaute"],[data-theme="clair"]) .spot-input input:focus{background:none;border:0;box-shadow:none}
html:is([data-theme="communaute"],[data-theme="clair"]) :is(input,textarea)::placeholder{color:var(--dim);opacity:1}
html:is([data-theme="communaute"],[data-theme="clair"]) select option{background:var(--panel);color:var(--txt)}
html:is([data-theme="communaute"],[data-theme="clair"]) .chk input[type=checkbox],html:is([data-theme="communaute"],[data-theme="clair"]) .sp-sw input[type=checkbox],html:is([data-theme="communaute"],[data-theme="clair"]) .cf.sw input[type=checkbox]{accent-color:var(--primary)}

/* sur-titres « eyebrow » : cyan, petites capitales espacées, point lumineux devant */
html:is([data-theme="communaute"],[data-theme="clair"]) :is(.ph-t,.ce-gens-t,.tile .k,.cr-head){color:var(--cyan);font-family:var(--mono);letter-spacing:.13em;text-transform:uppercase;font-weight:600}
html:is([data-theme="communaute"],[data-theme="clair"]) :is(.ph-t,.ce-gens-t,.tile .k)::before{content:'';flex:none;width:6px;height:6px;border-radius:50%;background:var(--cyan);box-shadow:0 0 8px var(--cyan)}
html:is([data-theme="communaute"],[data-theme="clair"]) .ph-t{align-items:center}
html:is([data-theme="communaute"],[data-theme="clair"]) .tile .k{display:inline-flex;align-items:center;gap:7px}
html:is([data-theme="communaute"],[data-theme="clair"]) .ce-gens-t{justify-content:flex-start;align-items:center;gap:7px}
html:is([data-theme="communaute"],[data-theme="clair"]) .ce-gens-t b{margin-left:auto;color:var(--txt);letter-spacing:.06em}
html:is([data-theme="communaute"],[data-theme="clair"]) .ph-t i{color:var(--dim);letter-spacing:0}
/* titre de l'accueil : dégradé violet → cyan, comme le titre du deck */
html:is([data-theme="communaute"],[data-theme="clair"]) .hub-tete .hub-moi h2{background:linear-gradient(90deg,var(--id-soft),var(--cyan));-webkit-background-clip:text;background-clip:text;color:transparent;font-weight:700}

/* rail de gauche, panneau des amis, menus, bandeaux : verre bleu nuit */
html:is([data-theme="communaute"],[data-theme="clair"]) .dock{background:linear-gradient(180deg,var(--panel2),var(--panel));border:1px solid var(--line2);border-radius:20px;box-shadow:inset 0 1px 0 rgba(255,255,255,.06),var(--sh);-webkit-backdrop-filter:none;backdrop-filter:none}
html:is([data-theme="communaute"],[data-theme="clair"]) .dock a{color:var(--muted)}
html:is([data-theme="communaute"],[data-theme="clair"]) .dock a .ic{background:var(--key);border:1px solid var(--line2);box-shadow:var(--touche);border-radius:9px}
html:is([data-theme="communaute"],[data-theme="clair"]) .dock a:hover .ic{background:var(--key2);border-color:var(--line3)}
html:is([data-theme="communaute"],[data-theme="clair"]) .dock a.on{color:var(--txt)}
html:is([data-theme="communaute"],[data-theme="clair"]) :is(.suivis,.cmenu,.sa-modal-c,.me-menu,.app-bandeau){background:var(--flottant);border:1px solid var(--line2);box-shadow:inset 0 1px 0 rgba(255,255,255,.06),0 30px 70px -24px rgba(0,0,0,.9);-webkit-backdrop-filter:none;backdrop-filter:none}
html:is([data-theme="communaute"],[data-theme="clair"]) :is(.suivis,.cmenu,.me-menu,.app-bandeau){border-radius:16px}
html:is([data-theme="communaute"],[data-theme="clair"]) .suivis.amis:not(.ouvert){border-radius:999px}
html:is([data-theme="communaute"],[data-theme="clair"]) .sa-modal{background:rgba(3,4,12,.55)}
html:is([data-theme="communaute"],[data-theme="clair"]) .csl-j{border-radius:999px}
html:is([data-theme="communaute"],[data-theme="clair"]) .me-av{border-radius:999px}

/* Minecraft : l'exception « angles droits façon cubes » est levée (Kripy, 20/09) — tout arrondi comme le reste */
#csHub[data-jeu="99001"] :is(.ph-main,.mc-bloc,.ce-compact){border-radius:16px !important}
#csHub[data-jeu="99001"] :is(.mc-kpi .tile,.csl,.ce-log,.ce-gens,.mc-tour,.ph-chat-o){border-radius:14px !important}
#csHub[data-jeu="99001"] :is(.mc-top li,.mc-liste li,.chat-input input,.pl-join,.pl-copie,.ph-chat-o button){border-radius:10px !important}
#csHub[data-jeu="99001"] :is(.csl-j){border-radius:999px !important}
#csHub[data-jeu="99001"] :is(.mc-av,.mc-marq span){border-radius:6px !important}
#csHub[data-jeu="99001"] :is(.mc-tour,.mc-top li,.csl){border-width:1px;border-color:var(--line)}
html:is([data-theme="communaute"],[data-theme="clair"]) :is(.mc-bloc,.mc-kpi .tile){border:1px solid var(--line)}
html:is([data-theme="communaute"],[data-theme="clair"]) :is(.mc-liste,.mc-tab) :is(.av,img){border-radius:6px}
html:is([data-theme="communaute"],[data-theme="clair"]) .mc-kpi .tile:hover{border-color:var(--line3)}
/* le bloc « en ligne maintenant » remplit la hauteur du Top 10 : plus de trou sous la liste */
#csHub[data-jeu="99001"] > .mc-live{display:flex;flex-direction:column}
#csHub[data-jeu="99001"] > .mc-live > .mc-direct{flex:1;min-height:0}
#csHub[data-jeu="99001"] .mc-top .mc-enligne{flex:1;display:flex;flex-direction:column}
#csHub[data-jeu="99001"] .mc-top .mc-enligne .mc-vide{flex:1;display:grid;place-items:center}

/* Grands écrans : le contenu occupe la fenêtre au lieu d'une colonne de 1720 px perdue au milieu du noir */
@media(min-width:1600px){
  .wrap{max-width:min(2000px, calc(100vw - 84px - 48px))}
  .hub-kpi{grid-template-columns:repeat(auto-fit,minmax(180px,1fr))}
  .hub-jeux{grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:14px}
  .hub-jeu img{aspect-ratio:460/200}
  .hub-2col{align-items:stretch}
  .mc-stats-grille{grid-template-columns:repeat(4,minmax(0,1fr))}
  #csHub[data-jeu="99001"]{grid-template-columns:minmax(0,1fr) minmax(520px,30%)}
}
@media(min-width:2200px){
  .wrap{max-width:min(2320px, calc(100vw - 84px - 64px))}
  .hub-jeux{grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:16px}
  .hub-kpi .tile .v{font-size:28px}
  .chat-wrap{grid-template-columns:210px 1fr 230px}
  #csHub[data-jeu="99001"]{grid-template-columns:minmax(0,1fr) minmax(560px,32%)}
}


/* ===================== Thème « Clair » (20/09/2026, demande de Kripy) =====================
   Mêmes formes et reliefs que le sombre (le bloc ci-dessus s'applique aux deux) ; seuls les tokens changent.
   Sélectionnable avec le bouton ◍ du sélecteur de langue (THEMES dans app.js), mémorisé comme les autres. */
html[data-theme="clair"]{
  --bg:#f3f5ff;--bg-2:#eaedfb;--panel:#f8f9ff;--panel2:#ffffff;--key:#eef1ff;--key2:#e2e7ff;
  --carte:linear-gradient(180deg,#ffffff,#f6f7ff);
  --line:rgba(20,26,58,.12);--line2:rgba(20,26,58,.18);--line3:rgba(20,26,58,.30);
  --cyan:#0e7c8f;--violet:var(--id);--primary:var(--id-lo);--primary2:var(--id-lo);
  --txt:#141a3a;--muted:#3d4670;--dim:#5a6390;
  --glass:rgba(20,26,58,.05);--glass-2:rgba(20,26,58,.09);--glass-hi:rgba(20,26,58,.14);
  --stroke:var(--line);--stroke-2:var(--line2);
  --win:#0f8a5c;--loss:#d3323f;
  --verre:linear-gradient(180deg,#ffffff,#f8f9ff);--verre-bord:var(--line);
  --sh:0 18px 40px -24px rgba(20,26,58,.28);--sh-s:0 10px 24px -16px rgba(20,26,58,.22);
  --verre-ombre:inset 0 1px 0 #fff,var(--sh);
  --creux:rgba(20,26,58,.035);
  --touche:inset 0 1px 0 #fff,inset 0 -2px 0 rgba(20,26,58,.12);
  --touche-p:inset 0 1px 0 rgba(255,255,255,.45),inset 0 -2px 0 rgba(var(--id-deep-rgb),.45),0 10px 24px -10px rgba(106,79,245,.45);
  --halo-1:rgba(var(--id-rgb),.20);--halo-2:rgba(34,211,238,.16);--grille:rgba(20,26,58,.05);
  --entete:rgba(243,245,255,.86);--flottant:linear-gradient(180deg,#ffffff,#f3f5ff);--th:rgba(243,245,255,.96)}
html[data-theme="clair"] body{color:var(--txt)}
html[data-theme="clair"] ::selection{background:rgba(106,79,245,.22)}
html[data-theme="clair"] :is(.panel,.chat-main,.chat-rooms,.chat-users,.tile,.hub-jeu,.mc-bloc,.ce-compact){background-image:radial-gradient(520px 180px at 0% 0%,rgba(var(--id-rgb),.06),transparent 62%),var(--verre)}
html[data-theme="clair"] .panel::before{background:none}
html[data-theme="clair"] .tile .v{background:none;-webkit-text-fill-color:var(--txt);color:var(--txt)}
html[data-theme="clair"] .hub-tete .hub-moi h2{background:linear-gradient(90deg,var(--id-lo),#0e7c8f);-webkit-background-clip:text;background-clip:text;color:transparent}
html[data-theme="clair"] :is(.tabs,.langsel,.snav,.ph-chat-o,.cjb,.ce-bascule){background:#e9ecfb;box-shadow:inset 0 1px 2px rgba(20,26,58,.10)}
html[data-theme="clair"] :is(input:not([type=checkbox]):not([type=radio]):not([type=range]):not([type=color]),select,textarea,.inp,.mb-nom,.chat-input input,.ce-form input){background-color:#fff;box-shadow:inset 0 1px 2px rgba(20,26,58,.08)}
html[data-theme="clair"] :is(input,select,textarea,.inp,.mb-nom):focus{box-shadow:0 0 0 3px rgba(106,79,245,.18),inset 0 1px 2px rgba(20,26,58,.08)}
html[data-theme="clair"] :is(.chat-log,.ce-log,.ce-gens,.ce-compact .ce-gens,.chat-main .chat-log,.ce-compact .ce-log){background:#f6f7fd !important}
html[data-theme="clair"] :is(.srv-l,.pl-l,.ph-l):nth-child(even){background:rgba(20,26,58,.03)}
html[data-theme="clair"] .sc-pret.ok{color:#0b6b46;background:rgba(15,138,92,.12);border-color:rgba(15,138,92,.35)}
html[data-theme="clair"] :is(.bt.danger,.btn-ghost.danger){color:#b1202f;background:rgba(211,50,63,.08);border-color:rgba(211,50,63,.35)}
html[data-theme="clair"] .cl-g.moi{background:rgba(106,79,245,.07)}
html[data-theme="clair"] .mc-tour{background:#e6e9f8}
html[data-theme="clair"] .mc-marq span{color:#fff;background:rgba(20,26,58,.75)}
/* couleurs sémantiques codées en dur (vert/or/rouge) : versions foncées pour rester lisibles sur blanc */
html[data-theme="clair"] :is(.chip.w,.csl.on .csl-e,.mc-top li.en-ligne .mc-nom u,.sub .ok,.win){color:#0b6b46}
html[data-theme="clair"] .chip.w{background:rgba(15,138,92,.12);border-color:rgba(15,138,92,.3)}
html[data-theme="clair"] :is(.chip.l,.loss){color:#b1202f}
html[data-theme="clair"] .chip.l{background:rgba(211,50,63,.10);border-color:rgba(211,50,63,.3)}
html[data-theme="clair"] .chip.n{color:#7a4f00;background:rgba(255,200,87,.22);border-color:rgba(200,150,40,.35)}
html[data-theme="clair"] :is(.mc-top li em,.mc-tab tr.moi td b,.mc-liste .mc-ic,.pu-role.admin,.cr-badge.adm,.mc-marq.moi i b){color:#8a5a00}
html[data-theme="clair"] .cr-badge.adm{background:rgba(245,196,81,.25);border-color:rgba(160,110,0,.4)}
html[data-theme="clair"] .cr-badge.mod{color:#1d5fb8;background:rgba(96,165,250,.2)}
html[data-theme="clair"] .cr-badge.ops{color:var(--id-lo);background:rgba(var(--id-rgb),.16)}
html[data-theme="clair"] .cr-badge.hab{color:#a24a12;background:rgba(255,138,92,.2)}
html[data-theme="clair"] .cr-badge.bot{color:#3d4670;background:rgba(20,26,58,.08);border-color:rgba(20,26,58,.2)}
html[data-theme="clair"] :is(.mc-cl tr.moi td,.mc-tab tr.moi td){color:var(--txt);background:rgba(106,79,245,.08)}
html[data-theme="clair"] :is(.mc-top li b,.ce-gens-t b,.ann-l b .gl){color:var(--txt)}
html[data-theme="clair"] :is(.pu-role.mod,.mc-choix .eq0){color:#1d5fb8}
html[data-theme="clair"] :is(.pu-role.salon){color:#0b6b46}
html[data-theme="clair"] .ph-l.neuve{background:rgba(106,79,245,.08)}
html[data-theme="clair"] .cl-l.mention .cl-text{color:var(--id-lo)}
html[data-theme="clair"] .me-menu a.danger,html[data-theme="clair"] .cmenu button.danger{color:#b1202f}
html[data-theme="clair"] .spot-trigger{color:var(--dim)}
html[data-theme="clair"] .brand{color:var(--txt)}
/* tableaux : plus de voile noir ni d'indice de défilement sombre ; badges de centile en teintes foncées */
html[data-theme="clair"] .tbl-wrap{background-color:rgba(20,26,58,.03);background-image:linear-gradient(to left, rgba(243,245,255,.95), rgba(243,245,255,0) 28px)}
html[data-theme="clair"] tbody td{border-bottom-color:rgba(20,26,58,.08)}
html[data-theme="clair"] tbody tr:hover{background:rgba(20,26,58,.05)}
html[data-theme="clair"] .pctl{color:var(--txt);box-shadow:none}
html[data-theme="clair"] .pctl.p0{color:#5a3a00;background:linear-gradient(135deg,rgba(255,200,87,.55),rgba(91,79,224,.16));border-color:rgba(140,100,0,.4)}
html[data-theme="clair"] .pctl.p1{color:#6b4600;background:rgba(255,200,87,.38);border-color:rgba(160,110,0,.4)}
html[data-theme="clair"] .pctl.p5{color:#4a2fc0;background:rgba(var(--id-rgb),.14);border-color:rgba(var(--id-rgb),.4)}
html[data-theme="clair"] .pctl.p10{color:#155ea8;background:rgba(74,168,255,.18);border-color:rgba(74,168,255,.45)}
html[data-theme="clair"] .pctl.p25{color:#0b6b5a;background:rgba(49,208,170,.2);border-color:rgba(49,208,170,.45)}
html[data-theme="clair"] .dock a.dock-chat.on span:last-of-type{color:var(--txt)}
html[data-theme="clair"] :is(.chat-topic button.chip,.chat-topic .chip,.cr-ghost){background:var(--key);border:1px solid var(--line2)}
/* Kripy (20/09/2026, « c'est mal fait ») — liste des parties personnalisées : plus de cadre noir à défilement interne
   (la page défile), fond et lignes du thème, lignes plus denses. */
html:is([data-theme="communaute"],[data-theme="clair"]) .srv-defile{max-height:none;min-height:0;overflow:visible;background:var(--creux);border:1px solid var(--line);border-radius:var(--r-m)}
html:is([data-theme="communaute"],[data-theme="clair"]) .srv-table thead th{background:var(--th);color:var(--dim);border-bottom:1px solid var(--line);top:0}
html:is([data-theme="communaute"],[data-theme="clair"]) .srv-table td{padding:6px 10px;border-top:1px solid var(--line);line-height:1.3}
html:is([data-theme="communaute"],[data-theme="clair"]) .srv-table tbody tr:nth-child(even) td{background:rgba(255,255,255,.025)}
html:is([data-theme="communaute"],[data-theme="clair"]) .srv-table tbody tr:hover td,html:is([data-theme="communaute"],[data-theme="clair"]) .srv-table tbody tr:nth-child(even):hover td{background:var(--glass)}
html[data-theme="clair"] .srv-table tbody tr:nth-child(even) td{background:rgba(20,26,58,.03)}
html:is([data-theme="communaute"],[data-theme="clair"]) .srv-table .sb-p{line-height:1.25;font-size:12px}
html:is([data-theme="communaute"],[data-theme="clair"]) .srv-table .sb-p .sub,html:is([data-theme="communaute"],[data-theme="clair"]) .srv-table .sb-p small{display:block;margin-top:1px}
/* Colonne « État » des parties sur UNE ligne (pastille · chrono · en jeu) : lignes deux fois moins hautes. */
html:is([data-theme="communaute"],[data-theme="clair"]) .pp-table .pp-t{width:150px;white-space:nowrap;vertical-align:middle}
html:is([data-theme="communaute"],[data-theme="clair"]) .pp-table .pp-t b{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;vertical-align:middle}
html:is([data-theme="communaute"],[data-theme="clair"]) .pp-table .pp-t b .sv-pt{position:static;margin:0}
html:is([data-theme="communaute"],[data-theme="clair"]) .pp-table .pp-t > i{display:inline;margin-left:6px;font-size:11px;vertical-align:middle}
html:is([data-theme="communaute"],[data-theme="clair"]) .pp-table .sb-n b{font-size:13px}

/* ===================== Ossature (20/09/2026, soir) : « la navigation n'est pas si pratique » =====================
   Téléphone : le dock revient EN BAS (le rail à gauche mangeait 60 px et recouvrait les cartes), chat au centre
   en bouton rond surélevé, en-tête sur une seule ligne. PC / tablette : rail collé à gauche sur toute la hauteur,
   fusionné avec l'en-tête (même fond, même trait), façon Discord ; « Moi » en bas du rail.
   Ce bloc est APRÈS le bloc du thème : il gagne à spécificité égale. */
@media (min-width:761px){
  .dock,html:is([data-theme="communaute"],[data-theme="clair"]) .dock{
    left:0;top:0;bottom:0;transform:none;height:100vh;height:100dvh;max-height:none;width:84px;
    border-radius:0;border:0;border-right:1px solid var(--line2,var(--stroke));box-shadow:none;
    justify-content:flex-start;align-items:center;padding:86px 0 14px;gap:4px;z-index:59;
    background:linear-gradient(180deg,var(--panel2,var(--panel,#1d2556)),var(--panel,#1d2556));overflow:visible}
  .dock::before{content:'';position:absolute;top:0;left:0;right:0;height:68px;border-bottom:1px solid var(--line2,var(--stroke));
    background:url(/assets/icons/favicon.svg) center/38px no-repeat}
  .dock a{width:66px;padding:8px 2px 7px;border-radius:14px;font-size:10px}
  .dock a .ic{width:30px;height:30px;border-radius:10px}
  .dock a .ic svg{width:17px;height:17px}
  .dock a.dock-moi{margin-top:auto}
  .dock a.dock-chat .ic{width:34px;height:34px;border-radius:11px}
  body{padding-left:84px;padding-bottom:0}
  header.top{z-index:60}
  .install-bandeau,.app-bandeau{left:96px}
}
@media (max-width:760px){
  .dock,html:is([data-theme="communaute"],[data-theme="clair"]) .dock{
    left:50%;right:auto;top:auto;bottom:max(8px,env(safe-area-inset-bottom));transform:translateX(-50%);
    flex-direction:row;align-items:flex-end;gap:0;padding:5px 6px;width:max-content;max-width:calc(100vw - 16px);
    max-height:none;height:auto;border-radius:22px;overflow:visible;z-index:70}
  .dock a{width:56px;padding:5px 0 4px;font-size:9.5px;gap:2px;border-radius:14px}
  .dock a .ic{width:28px;height:28px;border-radius:9px}
  .dock a .ic svg{width:16px;height:16px}
  .dock a.dock-chat{width:62px}
  .dock a.dock-chat .ic,html:is([data-theme="communaute"],[data-theme="clair"]) .dock a.dock-chat .ic{
    width:46px;height:46px;border-radius:50%;margin-top:-22px;color:#fff;border-color:transparent;
    background:linear-gradient(145deg,var(--a1),var(--a3));
    box-shadow:0 10px 24px -8px color-mix(in srgb,var(--a1) 85%,transparent),inset 0 1px 0 rgba(255,255,255,.4)}
  .dock a.dock-chat .ic svg{width:21px;height:21px}
  .dock a.dock-chat .pulse{top:-16px;width:46px;height:46px;margin-left:-23px}
  .dock a .dock-n{right:6px;top:-2px}
  .dock a.on::after{bottom:1px}
  body{padding-left:0;padding-bottom:calc(76px + env(safe-area-inset-bottom))}
  .wrap{max-width:none;padding:0 12px}
  .suivis{bottom:84px;right:8px;width:min(340px, calc(100vw - 16px))}
  .install-bandeau,.app-bandeau{left:8px}
  footer .wrap{padding-bottom:16px}
  .ch-nouveau{bottom:92px}
  /* en-tête : une seule ligne (logo · jeu · loupe · Steam/moi · langue) */
  .top .wrap{flex-wrap:nowrap;gap:6px;min-height:52px;padding:5px 10px}
  .jeu-choix{padding:3px 5px 3px 3px;gap:4px}
  .jeu-choix > svg{display:none}
  .jeu-choix img{height:24px}
  .spot-trigger{width:36px;height:36px}
  .userbox{margin-left:auto}
  .langsel{order:6;flex:none}
  .langsel button{padding:5px 7px;font-size:11.5px;height:32px}
  .btn-steam{padding:0 9px;height:32px}
}

/* --- Barre « partie en cours » (toutes pages, sauf dans la salle) : phase, chrono, un toucher pour y revenir --- */
.en-cours{position:fixed;z-index:68;display:flex;align-items:center;gap:10px;padding:8px 10px 8px 12px;
  color:var(--txt);background:linear-gradient(180deg,var(--panel2,var(--panel,#1d2556)),var(--panel,#1d2556));
  border:1px solid var(--line3,var(--stroke));border-radius:16px;box-shadow:var(--sh,0 20px 50px -20px rgba(0,0,0,.8));
  animation:fi .3s ease-out both;max-width:calc(100vw - 16px)}
.en-cours[hidden]{display:none}
.en-cours .ec-p{width:9px;height:9px;border-radius:50%;background:#31d08a;box-shadow:0 0 0 0 rgba(49,208,138,.55);animation:pu 1.6s infinite;flex:none}
.en-cours .ec-p.inv{background:var(--a1)}
.en-cours .ec-t{display:flex;flex-direction:column;min-width:0;line-height:1.2}
.en-cours .ec-t b{font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:46vw}
.en-cours .ec-t span{font-size:11px;color:var(--muted)}
.en-cours .ec-b{flex:none;padding:7px 12px;border-radius:11px;font-size:12px;font-weight:700;color:#fff;text-decoration:none;
  background:linear-gradient(145deg,var(--a1),var(--a3));box-shadow:0 8px 20px -8px color-mix(in srgb,var(--a1) 85%,transparent)}
.en-cours .ec-x{flex:none;background:none;border:0;color:var(--muted);font-size:16px;line-height:1;padding:4px;cursor:pointer}
@media (min-width:761px){ .en-cours{right:18px;bottom:18px} }
@media (max-width:760px){ .en-cours{left:8px;right:8px;bottom:calc(78px + env(safe-area-inset-bottom));max-width:none} .en-cours .ec-t b{max-width:none} }

/* --- Transitions de page (View Transitions) : fondu + léger glissement, en-tête, rail et barres immobiles --- */
@media (prefers-reduced-motion:no-preference){
  ::view-transition-old(root){animation:vtOut .16s ease-in both}
  ::view-transition-new(root){animation:vtIn .28s cubic-bezier(.2,.8,.2,1) both}
  @keyframes vtOut{to{opacity:0;transform:translateY(-6px)}}
  @keyframes vtIn{from{opacity:0;transform:translateY(10px)}}
  header.top{view-transition-name:krp-tete}
  .dock{view-transition-name:krp-dock}
  .en-cours{view-transition-name:krp-en-cours}
  .suivis{view-transition-name:krp-suivis}
}
/* PC : le rail porte déjà le logo, l'en-tête ne le répète pas. */
@media (min-width:761px){ .brand .mark{position:absolute;width:0;height:0;overflow:hidden;opacity:0;pointer-events:none;box-shadow:none} }
/* Accueil visiteur (20/09/2026) : un vrai écran d'accueil, pas un paragraphe. */
.hub-pitch{display:grid;gap:14px}
.hub-pitch :is(h1,h2){font-family:'Space Grotesk';font-size:clamp(26px,4vw,40px);letter-spacing:-.03em;line-height:1.05;margin:0}
.hub-pitch :is(h1,h2) em{font-style:normal;background:linear-gradient(90deg,var(--a1),var(--a3));-webkit-background-clip:text;background-clip:text;color:transparent}
.hub-pitch > p{margin:0;max-width:60ch;color:var(--muted);font-size:15px}
.hub-pitch .hp-cta{display:flex;align-items:center;gap:14px;flex-wrap:wrap}
.hub-pitch .hp-cta .bt.ok{font-size:15px;padding:12px 20px}
.hub-pitch .hp-cta .sub{font-size:12px}
.hp-feats{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:10px;margin-top:4px}
.hp-feat{display:flex;gap:12px;align-items:flex-start;padding:12px 14px;border-radius:var(--r-m,14px);background:var(--key,rgba(255,255,255,.04));border:1px solid var(--line2,var(--stroke))}
.hp-feat .ic{flex:none;width:36px;height:36px;border-radius:11px;display:grid;place-items:center;background:linear-gradient(145deg,var(--a1),var(--a3));color:#fff;box-shadow:0 8px 20px -8px color-mix(in srgb,var(--a1) 85%,transparent)}
.hp-feat .ic svg{width:18px;height:18px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.hp-feat b{display:block;font-size:13.5px}
.hp-feat span{font-size:12px;color:var(--muted);line-height:1.35}
/* Avatar du robot du chat : robot SVG en couleur sur fond sombre, à toutes les tailles de pastille. */
.cl-av-txt.cl-av-bot,html:is([data-theme="communaute"],[data-theme="clair"]) .cl-av-txt.cl-av-bot{background:var(--key,rgba(255,255,255,.06));border:1px solid var(--line2,var(--stroke));box-shadow:none;padding:0}
.cl-av-bot svg{width:100%;height:100%;display:block;padding:2px;box-sizing:border-box}
/* Pseudo du chat (Kripy, 20/09/2026) : le tag du clan et le drapeau étaient un poil trop hauts par rapport au pseudo.
   On aligne tout sur la ligne de base du pseudo, tag à la même taille. */
.cr-nick .cr-tn,.cr-tn{align-items:baseline}
.cr-nick .cr-clan{align-items:baseline;margin-right:1px}
.cr-nick .cr-clan b{font-size:1em;line-height:1.2;position:relative;top:0}
.cr-nick .flag{align-self:center;position:relative;top:.5px}
.cr-nick .cr-badge,.cr-nick .cr-tier{align-self:center}
/* Chat (Kripy, 20/09/2026) : la colonne des salons montrait une barre de défilement grise à gauche sur Windows.
   Les barres des colonnes du chat n'apparaissent qu'au survol, fines et discrètes ; le défilement reste possible. */
.chat-rooms,.chat-users{scrollbar-width:none;scrollbar-gutter:auto}
.chat-rooms:hover,.chat-users:hover{scrollbar-width:thin;scrollbar-color:var(--stroke-2) transparent}
.chat-rooms::-webkit-scrollbar,.chat-users::-webkit-scrollbar{width:0;height:0}
.chat-rooms:hover::-webkit-scrollbar,.chat-users:hover::-webkit-scrollbar{width:6px}
.chat-rooms::-webkit-scrollbar-thumb,.chat-users::-webkit-scrollbar-thumb{background:var(--stroke-2);border-radius:6px}
.chat-log{scrollbar-width:thin;scrollbar-color:var(--stroke-2) transparent}
.chat-log::-webkit-scrollbar{width:6px}.chat-log::-webkit-scrollbar-thumb{background:var(--stroke-2);border-radius:6px}

/* ===================== Bulles (20/09/2026, nuit) : « des traits moches qui découpent le site, fais en format plus bulle »
   Plus aucune ligne collée aux bords : l'en-tête et le rail deviennent des bulles de verre flottantes, détachées, arrondies,
   avec un reflet en haut ; le logo K reste dans l'en-tête à côté du nom. Façon iOS 27 / HyperOS 4. ===================== */
header.top,html:is([data-theme="communaute"],[data-theme="clair"]) header.top{
  position:sticky;top:10px;z-index:60;margin:10px 14px 4px;border-radius:24px;
  border:1px solid rgba(255,255,255,.09);
  background:color-mix(in srgb,var(--panel,#242331) 78%,transparent);
  -webkit-backdrop-filter:blur(22px) saturate(140%);backdrop-filter:blur(22px) saturate(140%);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.09),0 18px 40px -18px rgba(0,0,0,.75)}
header.top .wrap{padding-left:18px;padding-right:12px}
html[data-theme="clair"] header.top{background:linear-gradient(180deg,rgba(255,255,255,.75),rgba(255,255,255,.55));border-color:rgba(0,0,0,.08)}
@media (min-width:761px){
  .brand .mark{position:static;width:36px;height:36px;overflow:visible;opacity:1;pointer-events:auto}
  .dock,html:is([data-theme="communaute"],[data-theme="clair"]) .dock{
    left:14px;top:50%;bottom:auto;height:auto;max-height:calc(100vh - 28px);transform:translateY(-50%);width:auto;
    padding:12px 8px;gap:6px;border-radius:26px;justify-content:center;
    border:1px solid rgba(255,255,255,.09);
    background:color-mix(in srgb,var(--panel,#242331) 78%,transparent);
    -webkit-backdrop-filter:blur(22px) saturate(140%);backdrop-filter:blur(22px) saturate(140%);
    box-shadow:inset 0 1px 0 rgba(255,255,255,.09),0 22px 48px -20px rgba(0,0,0,.8)}
  .dock::before{display:none}
  .dock a.dock-moi{margin-top:8px}
  html[data-theme="clair"] .dock{background:linear-gradient(180deg,rgba(255,255,255,.75),rgba(255,255,255,.55));border-color:rgba(0,0,0,.08)}
  body{padding-left:104px}
  .wrap{max-width:min(1720px, calc(100vw - 104px - 28px))}
  .install-bandeau,.app-bandeau{left:110px}
}
@media (max-width:760px){
  header.top,html:is([data-theme="communaute"],[data-theme="clair"]) header.top{top:6px;margin:6px 8px 2px;border-radius:20px}
  header.top .wrap{padding-left:10px;padding-right:8px}
  .dock,html:is([data-theme="communaute"],[data-theme="clair"]) .dock{
    border:1px solid rgba(255,255,255,.09);
    background:color-mix(in srgb,var(--panel,#242331) 80%,transparent);
    -webkit-backdrop-filter:blur(22px) saturate(140%);backdrop-filter:blur(22px) saturate(140%);
    box-shadow:inset 0 1px 0 rgba(255,255,255,.09),0 18px 40px -16px rgba(0,0,0,.8)}
}
/* Panneaux et tuiles : plus ronds, reflet en haut, ombre douce ; boutons et onglets en pilules. */
html:is([data-theme="communaute"],[data-theme="clair"]) :is(.panel,.tile,.hub-jeu,.hp-feat,.en-cours){border-radius:24px;box-shadow:inset 0 1px 0 rgba(255,255,255,.05),0 16px 40px -24px rgba(0,0,0,.6)}
html:is([data-theme="communaute"],[data-theme="clair"]) :is(.tabs,.snav,.langsel,.spot-trigger,.jeu-choix,.ph-chat-o,.cjb){border-radius:999px}
html:is([data-theme="communaute"],[data-theme="clair"]) :is(.tabs button,.snav a,.bt,.btn-ghost,.btn-steam,.pl-join,.inv-b,.sc-pret,.ch-chip,.hub-racc .bt){border-radius:999px}
html:is([data-theme="communaute"],[data-theme="clair"]) :is(input:not([type=checkbox]):not([type=radio]),select,textarea){border-radius:16px}
html:is([data-theme="communaute"],[data-theme="clair"]) .en-cours{border-radius:22px}
/* Fond : deux halos de couleur très doux derrière le verre, pour que les bulles aient quelque chose à réfracter. */
html:is([data-theme="communaute"]) body{background-image:radial-gradient(900px 520px at 8% -10%,rgba(var(--id-rgb),.22),transparent 60%),radial-gradient(700px 480px at 96% 12%,rgba(var(--cy-rgb),.10),transparent 60%),radial-gradient(800px 600px at 60% 110%,rgba(var(--id2-rgb),.12),transparent 60%);background-attachment:fixed}

/* ===================== Assistant « Créer une partie » (20/09/2026, nuit) =====================
   Overlay plein écran en trois étapes (la partie · bans · carte) : bulle de verre mat centrée sur PC,
   plein écran sur téléphone. Cartes cliquables, pilules, stepper ; aucune ligne pleine largeur, pas de brillant
   (reflet ≤ .09, flou 22 px). Transitions glissées entre étapes (.entre-d/.entre-g, .sort-d/.sort-g). */
body.ca-ouvert{overflow:hidden}
.ca-voile{position:fixed;inset:0;z-index:340;display:grid;place-items:center;padding:24px;
  background:rgba(8,7,14,.58);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);animation:ca-voile .22s ease-out}
.ca-voile.sortie{animation:ca-voile-s .2s ease-in forwards}
@keyframes ca-voile{from{opacity:0}to{opacity:1}}
@keyframes ca-voile-s{to{opacity:0}}
.ca-bulle{display:flex;flex-direction:column;width:min(780px,100%);max-height:min(880px,calc(100vh - 48px));border-radius:28px;
  border:1px solid rgba(255,255,255,.09);color:var(--txt);
  background:color-mix(in srgb,var(--panel,#242331) 88%,transparent);
  -webkit-backdrop-filter:blur(22px) saturate(140%);backdrop-filter:blur(22px) saturate(140%);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.09),0 40px 90px -30px rgba(0,0,0,.85);overflow:hidden;
  animation:ca-bulle .34s cubic-bezier(.2,.9,.3,1.15)}
.ca-voile.sortie .ca-bulle{animation:ca-bulle-s .2s ease-in forwards}
@keyframes ca-bulle{from{opacity:0;transform:translateY(22px) scale(.96)}to{opacity:1;transform:none}}
@keyframes ca-bulle-s{to{opacity:0;transform:translateY(12px) scale(.98)}}
html[data-theme="clair"] .ca-bulle{background:linear-gradient(180deg,rgba(255,255,255,.9),rgba(255,255,255,.8));border-color:rgba(0,0,0,.08)}
.ca-tete{display:flex;align-items:flex-start;gap:12px;padding:22px 24px 0}
.ca-sur{display:block;font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--cyan,#22d3ee);font-style:normal;margin-bottom:3px}
.ca-tete h2{margin:0;font-size:22px;line-height:1.15}
.ca-fermer{margin-left:auto;flex:none;width:38px;height:38px;border-radius:999px;border:1px solid var(--stroke);background:var(--glass,rgba(255,255,255,.07));
  color:var(--txt);display:grid;place-items:center;cursor:pointer;transition:background .15s,transform .12s}
.ca-fermer:hover{background:var(--glass-2,rgba(255,255,255,.12))}
.ca-fermer:active{transform:scale(.94)}
.ca-fermer svg{width:16px;height:16px}
.ca-prog{padding:16px 24px 0}
.ca-prog-l{display:block;font-size:12.5px;color:var(--muted);margin-bottom:8px}
.ca-prog-b{display:flex;gap:6px}
.ca-prog-b b{flex:1;height:6px;border-radius:999px;background:var(--glass,rgba(255,255,255,.08));position:relative;overflow:hidden}
.ca-prog-b b::after{content:'';position:absolute;inset:0;border-radius:inherit;background:var(--degrade-p,linear-gradient(90deg,var(--a3),var(--a1)));
  transform:scaleX(0);transform-origin:left;transition:transform .4s cubic-bezier(.2,.8,.2,1)}
.ca-prog-b b.fait::after{transform:scaleX(1)}
.ca-prog-b b.ici::after{transform:scaleX(1);opacity:.62}
.ca-prog-n{display:flex;gap:6px;margin-top:6px}
.ca-prog-n span{flex:1;font-size:11.5px;color:var(--dim);letter-spacing:.02em;transition:color .2s}
.ca-prog-n span.fait{color:var(--muted)}
.ca-prog-n span.ici{color:var(--txt);font-weight:600}
.ca-corps{flex:1;min-height:0;overflow-y:auto;overflow-x:hidden;padding:18px 24px 10px;
  -webkit-mask-image:linear-gradient(180deg,#000 calc(100% - 22px),transparent);mask-image:linear-gradient(180deg,#000 calc(100% - 22px),transparent)}
.ca-etape{display:flex;flex-direction:column;gap:18px;padding-bottom:22px}
.ca-etape.entre-d{animation:ca-entre-d .28s cubic-bezier(.2,.8,.2,1)}
.ca-etape.entre-g{animation:ca-entre-g .28s cubic-bezier(.2,.8,.2,1)}
.ca-etape.sort-g{animation:ca-sort-g .16s ease-in forwards}
.ca-etape.sort-d{animation:ca-sort-d .16s ease-in forwards}
@keyframes ca-entre-d{from{opacity:0;transform:translateX(36px)}to{opacity:1;transform:none}}
@keyframes ca-entre-g{from{opacity:0;transform:translateX(-36px)}to{opacity:1;transform:none}}
@keyframes ca-sort-g{to{opacity:0;transform:translateX(-24px)}}
@keyframes ca-sort-d{to{opacity:0;transform:translateX(24px)}}
.ca-bloc,.ca-champ{display:flex;flex-direction:column;gap:9px;min-width:0}
.ca-lib{font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);font-weight:600}
.ca-aide{font-style:normal;font-size:12.5px;color:var(--dim);line-height:1.45}
.ca-champ input{width:100%;padding:12px 16px;border-radius:16px;font:inherit;font-size:15px;color:var(--txt);
  background:var(--creux,rgba(10,9,16,.3));border:1px solid var(--stroke);outline:none;transition:border-color .15s,box-shadow .15s}
.ca-champ input:focus{border-color:var(--a3);box-shadow:0 0 0 3px color-mix(in srgb,var(--a3) 25%,transparent)}
html[data-theme="clair"] .ca-champ input{background:#fff}
.ca-pilules{display:flex;flex-wrap:wrap;gap:8px}
.ca-pil{padding:9px 16px;border-radius:999px;border:1px solid var(--stroke);background:var(--glass,rgba(255,255,255,.07));color:var(--txt);
  font:inherit;font-size:13.5px;font-weight:600;cursor:pointer;line-height:1.2;transition:background .15s,border-color .15s,color .15s,transform .12s}
.ca-pil:hover{background:var(--glass-2,rgba(255,255,255,.12))}
.ca-pil:active{transform:scale(.96)}
.ca-pil.on{background:var(--degrade-p,var(--a3));border-color:var(--id-soft);color:#fff;box-shadow:inset 0 1px 0 rgba(255,255,255,.09),0 8px 20px -10px rgba(var(--id-rgb),.7)}
.ca-pil.petit{padding:6px 12px;font-size:12px}
.ca-cartes{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}
.ca-carte{position:relative;display:flex;flex-direction:column;align-items:flex-start;gap:8px;text-align:left;min-height:100%;padding:16px 38px 16px 16px;border-radius:20px;
  border:1px solid var(--stroke);background:var(--glass,rgba(255,255,255,.06));color:var(--txt);cursor:pointer;font:inherit;
  transition:background .15s,border-color .15s,transform .12s,box-shadow .15s}
.ca-carte:hover{background:var(--glass-2,rgba(255,255,255,.11))}
.ca-carte:active{transform:scale(.985)}
.ca-carte svg{width:26px;height:26px;color:var(--a3);flex:none}
.ca-carte b{font-size:14.5px;line-height:1.2}
.ca-carte i{font-style:normal;font-size:12.5px;color:var(--muted);line-height:1.4}
.ca-carte::after{content:'';position:absolute;top:14px;right:14px;width:18px;height:18px;border-radius:999px;border:1.5px solid var(--stroke-2,rgba(255,255,255,.2));transition:background .15s,border-color .15s}
.ca-carte::before{content:'';position:absolute;top:18px;right:20.5px;width:4.5px;height:8px;border:solid #fff;border-width:0 2px 2px 0;transform:rotate(45deg) scale(0);transition:transform .15s;z-index:1}
.ca-carte.on{border-color:var(--a3);background:color-mix(in srgb,var(--a3) 16%,var(--glass,rgba(255,255,255,.06)));box-shadow:0 12px 30px -20px rgba(var(--id-rgb),.8)}
.ca-carte.on::after{background:var(--a3);border-color:var(--a3)}
.ca-carte.on::before{transform:rotate(45deg) scale(1)}
.ca-stepper-l{display:flex;align-items:center;gap:14px;flex-wrap:wrap}
.ca-stepper{display:inline-flex;align-items:center;gap:4px;padding:5px;border-radius:999px;border:1px solid var(--stroke);background:var(--glass,rgba(255,255,255,.06))}
.ca-stepper button{width:40px;height:40px;border-radius:999px;border:0;background:var(--glass-2,rgba(255,255,255,.1));color:var(--txt);display:grid;place-items:center;cursor:pointer;transition:background .15s,transform .12s}
.ca-stepper button:hover{background:var(--degrade-p,var(--a3));color:#fff}
.ca-stepper button:active{transform:scale(.92)}
.ca-stepper button:disabled{opacity:.35;cursor:default;background:var(--glass-2,rgba(255,255,255,.1));color:var(--txt)}
.ca-stepper button svg{width:18px;height:18px}
.ca-stepper b{min-width:48px;text-align:center;font-size:22px;font-weight:700;font-variant-numeric:tabular-nums}
.ca-stepper-ap{font-size:13.5px;color:var(--muted)}
.ca-pool-t{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.ca-compte{font-size:12.5px;color:var(--txt);padding:3px 10px;border-radius:999px;background:var(--glass-2,rgba(255,255,255,.1));font-variant-numeric:tabular-nums}
.ca-pool{display:flex;flex-wrap:wrap;gap:6px;max-height:236px;overflow-y:auto;padding:2px 2px 6px}
.ca-pool .ca-pil{padding:7px 13px;font-size:12.5px;font-weight:500;color:var(--muted)}
.ca-pool .ca-pil.on{background:color-mix(in srgb,var(--a3) 26%,var(--glass,rgba(255,255,255,.06)));border-color:color-mix(in srgb,var(--a3) 70%,transparent);color:var(--txt);box-shadow:none}
.ca-recap{display:flex;gap:12px;align-items:center;padding:14px 16px;border-radius:18px;
  background:color-mix(in srgb,var(--a3) 12%,var(--glass,rgba(255,255,255,.06)));border:1px solid color-mix(in srgb,var(--a3) 45%,transparent)}
.ca-recap svg{width:22px;height:22px;flex:none;color:var(--a3)}
.ca-recap span{font-size:13.5px;line-height:1.45;color:var(--txt)}
.ca-recap span b{display:block;font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);margin-bottom:2px}
.ca-relance{display:flex;align-items:center;gap:12px;width:100%;padding:12px 16px;border-radius:18px;text-align:left;font:inherit;color:var(--txt);cursor:pointer;
  border:1px solid color-mix(in srgb,var(--cyan,#22d3ee) 40%,transparent);background:color-mix(in srgb,var(--cyan,#22d3ee) 9%,var(--glass,rgba(255,255,255,.06)));transition:background .15s,transform .12s}
.ca-relance:hover{background:color-mix(in srgb,var(--cyan,#22d3ee) 16%,var(--glass,rgba(255,255,255,.06)))}
.ca-relance:active{transform:scale(.99)}
.ca-relance svg{width:22px;height:22px;flex:none;color:var(--cyan,#22d3ee)}
.ca-relance span{display:flex;flex-direction:column;gap:2px;min-width:0}
.ca-relance b{font-size:14px}
.ca-relance i{font-style:normal;font-size:12.5px;color:var(--muted);line-height:1.35}
.ca-pied{display:flex;align-items:center;gap:10px;padding:8px 24px 22px}
.ca-err:empty{display:none}
.ca-pied .bt{padding:11px 22px;font-size:14px;border-radius:999px}
.ca-suite{min-width:150px}
.ca-err{font-size:12.5px;color:#ff8a8a;line-height:1.3}
@media (max-width:760px){
  .ca-voile{padding:0;place-items:stretch}
  .ca-bulle{width:100%;max-height:none;height:100%;border-radius:0;border:0;box-shadow:none;animation:ca-bulle-m .3s cubic-bezier(.2,.8,.2,1)}
  @keyframes ca-bulle-m{from{opacity:0;transform:translateY(40px)}to{opacity:1;transform:none}}
  .ca-tete{padding:calc(16px + env(safe-area-inset-top)) 16px 0}
  .ca-tete h2{font-size:20px}
  .ca-prog{padding:14px 16px 0}
  .ca-prog-n{display:none}
  .ca-corps{padding:16px 16px 8px}
  .ca-cartes,.ca-cartes.trois{grid-template-columns:1fr}
  .ca-carte{padding:14px 38px 14px 14px;min-height:0}
  .ca-pool{max-height:200px}
  .ca-pied{flex-wrap:wrap;padding:8px 16px calc(16px + env(safe-area-inset-bottom))}
  .ca-pied .bt{padding:12px 18px}
  .ca-suite{flex:1;min-width:0}
  .ca-err{flex-basis:100%;order:-1}
}
@media (min-width:761px) and (max-width:1000px){.ca-cartes.trois{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (prefers-reduced-motion:reduce){.ca-voile,.ca-bulle,.ca-etape{animation:none!important}}
/* Pub Compagnon : même bandeau que Kripy Deck, teinte cyan pour ne pas se confondre. */
.pub-comp{border-color:color-mix(in srgb,#22d3ee 30%,var(--stroke))}
.pub-comp .pub-deck-t b{background:linear-gradient(90deg,#7dd3fc,#b39dff);-webkit-background-clip:text;background-clip:text;color:transparent}

/* ===================== Comptes de jeu : Steam ET Xbox, sans rien mélanger (20/09/2026) =====================
   Une bulle mate par compte, jamais une ligne pleine largeur : logo de plateforme en SVG, pseudo, cote de CE
   compte, puce « Connexion » ou « Déclaré ». Sur une fiche, une rangée de pilules bascule d'un compte à l'autre.
   Reflet ≤ .09, flou 22 px, coins 24/20/999, aucun brillant, aucune emoji. */
.cj-note{margin:0 0 12px;font-size:12.5px;line-height:1.5;color:var(--muted);max-width:74ch}
.cj-liste{display:flex;flex-direction:column;gap:10px}
.cj-l,.cj-c{display:flex;align-items:center;gap:12px;padding:12px 14px;border-radius:20px;min-width:0;
  border:1px solid var(--stroke);background:color-mix(in srgb,var(--panel,#242331) 62%,transparent);
  -webkit-backdrop-filter:blur(22px) saturate(140%);backdrop-filter:blur(22px) saturate(140%);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.06)}
.cj-l.princ{border-color:color-mix(in srgb,var(--a3,var(--id)) 55%,transparent);
  background:color-mix(in srgb,var(--a3,var(--id)) 10%,color-mix(in srgb,var(--panel,#242331) 62%,transparent))}
html[data-theme="clair"] :is(.cj-l,.cj-c){background:rgba(255,255,255,.72);border-color:rgba(0,0,0,.08)}
.cj-logo{flex:none;width:40px;height:40px;border-radius:999px;display:grid;place-items:center;
  border:1px solid var(--stroke);background:var(--glass,rgba(255,255,255,.06))}
.cj-logo.steam{color:#a8bed0}
.cj-logo.xboxlive{color:#74dc82}
.cj-n{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}
.cj-n b{font-size:14.5px;line-height:1.2;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cj-n u{text-decoration:none;font-size:12px;color:var(--muted);line-height:1.35}
.cj-puces{display:flex;flex-wrap:wrap;gap:6px}
.cj-puce{font-style:normal;font-size:11px;letter-spacing:.04em;padding:4px 10px;border-radius:999px;color:var(--muted);
  border:1px solid var(--stroke);background:var(--glass,rgba(255,255,255,.06));white-space:nowrap}
.cj-puce.cnx{color:var(--cyan,#22d3ee);border-color:color-mix(in srgb,var(--cyan,#22d3ee) 40%,transparent)}
.cj-puce.princ{color:var(--id-pale);border-color:color-mix(in srgb,var(--a3,var(--id)) 55%,transparent)}
.cj-actes{display:flex;gap:8px;flex-wrap:wrap;margin-left:auto}
.cj-ajout{display:flex;flex-direction:column;gap:10px;margin-top:14px;padding:14px 16px;border-radius:22px;
  border:1px solid var(--stroke);background:var(--glass,rgba(255,255,255,.05))}
.cj-ajout-t{display:flex;flex-direction:column;gap:2px}
.cj-ajout-t b{font-size:14px}
.cj-ajout-t i{font-style:normal;font-size:12.5px;color:var(--muted)}
.cj-ajout-l{display:flex;gap:10px;flex-wrap:wrap;align-items:center}
.cj-ajout-l .inp{flex:1;min-width:180px;max-width:280px;border-radius:16px}
.cj-err{color:#ff8a8a;font-size:12.5px}
.cj-err:empty{display:none}
.cj-trouves{display:flex;flex-direction:column;gap:9px;margin-top:12px}
.cj-trouves-t{font-size:11.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);font-weight:600}
.cj-c .bt,.cj-c .cj-puce{margin-left:auto}
.cj-vide{margin:12px 0 0}
/* Bascule d'un compte à l'autre sur une fiche : un seul compte affiché à la fois, rien n'est additionné. */
.cj-bascule{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:0 0 12px}
.cj-pil{display:inline-flex;align-items:center;gap:8px;padding:8px 15px;border-radius:999px;font:inherit;font-size:13px;cursor:pointer;
  color:var(--txt);border:1px solid var(--stroke);background:color-mix(in srgb,var(--panel,#242331) 62%,transparent);
  -webkit-backdrop-filter:blur(22px) saturate(140%);backdrop-filter:blur(22px) saturate(140%);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.06);transition:background .15s,border-color .15s,transform .12s}
.cj-pil:hover{background:color-mix(in srgb,var(--panel,#242331) 80%,transparent)}
.cj-pil:active{transform:scale(.97)}
.cj-pil b{font-weight:600}
.cj-pil span{color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:18ch}
.cj-pil.on{border-color:color-mix(in srgb,var(--a3,var(--id)) 65%,transparent);background:color-mix(in srgb,var(--a3,var(--id)) 16%,transparent)}
.cj-pil.on span{color:var(--txt)}
.cj-bascule-n{font-style:normal;font-size:12px;color:var(--dim)}
.cj-annexe{margin:0 0 14px;border-radius:24px}
.cj-annexe .ph-t{display:flex;align-items:center;gap:8px}
.cj-annexe .grid{margin-top:12px}
@media (max-width:760px){
  .cj-l,.cj-c{flex-wrap:wrap;gap:10px}
  .cj-actes,.cj-puces{margin-left:0;width:100%}
  .cj-actes .bt{flex:1}
  .cj-ajout-l .inp{max-width:none}
  .cj-pil span{max-width:12ch}
}
.cj-svg{fill:currentColor;stroke:none;flex:none}

/* ===================== Chat sur téléphone (Kripy, 21/09/2026 ~04 h) : « sur mobile on peut pas parler » =====================
   La barre d'écriture passait sous le dock flottant, et la hauteur en 100vh ignore la barre de Safari sur iPhone.
   La hauteur est désormais MESURÉE en JS (chatAjusterHauteur, app.js) : la conversation s'arrête juste au-dessus du dock,
   et pendant qu'on écrit le dock s'efface vers le bas pour rendre l'écran au clavier. Ici, seulement l'habillage. */
@media (max-width:760px){
  body.route-chat .ch-nouveau{bottom:152px}
  body.chat-ecrit .dock{opacity:0;transform:translateX(-50%) translateY(130%);pointer-events:none}
  body.chat-ecrit .ch-nouveau{bottom:84px}
  .chat-input{padding-bottom:calc(10px + env(safe-area-inset-bottom))}
  body.route-chat .chat-log{min-height:0 !important}
}
.dock{transition:transform .24s cubic-bezier(.2,.8,.2,1), opacity .18s ease}
@media (prefers-reduced-motion:reduce){ .dock{transition:none} }

/* ===================== Identité visuelle « Volt » (21/09/2026) =====================
   Kripy : « le violet j'aime pas trop, sur un écran noir ça rend mal — cherche une identité visuelle unique, gamer ».
   Volt = vert-jaune électrique (#c6f500) + cyan (#00e5ff) sur carbone NEUTRE (plus aucune teinte violette dans les gris).
   Les boutons pleins portent un texte presque noir (le vert est trop clair pour du blanc). Toutes les teintes d'accent des
   blocs de fin passent par les jetons --id* : changer l'identité = changer ces lignes (plus THEMES.communaute dans app.js,
   le logo dans index.html + icons/favicon.svg). Ancienne version : /srv/aoe/sauvegardes-code/identite-20260921/. */
:root{--id-hi:#dcff5c;--id:#c6f500;--id-lo:#9fd000;--id-soft:#e4ff8a;--id-pale:#f2ffd0;
  --id-rgb:198,245,0;--id-deep-rgb:40,60,0;--neu-rgb:235,245,235;--id2-rgb:0,229,255;--cy-rgb:0,229,255;--id-ink:#0b0d00}
html[data-theme="communaute"]{--bg:#0c0d0e;--bg-2:#121314;--panel:#18191b;--panel2:#1f2022;--key:#28292c;--key2:#333438;
  --carte:linear-gradient(180deg,#1f2022,#18191b);--line:rgba(235,245,235,.12);--line2:rgba(235,245,235,.18);--line3:rgba(235,245,235,.30);
  --cyan:#00e5ff;--violet:#c6f500;--primary:#c6f500;--primary2:#9fd000;--txt:#ffffff;--muted:#e6e8e6;--dim:#a9ada9;
  --glass:rgba(235,245,235,.07);--glass-2:rgba(235,245,235,.11);--glass-hi:rgba(235,245,235,.17);--creux:rgba(0,0,0,.28);
  --degrade-p:linear-gradient(180deg,#dcff5c 0%,#c6f500 40%,#9fd000 100%);--degrade-p2:linear-gradient(180deg,#e4ff8a 0%,#dcff5c 40%,#c6f500 100%);
  --halo-1:rgba(198,245,0,.16);--halo-2:rgba(0,229,255,.07);--grille:rgba(235,245,235,.03);
  --entete:rgba(12,13,14,.84);--flottant:linear-gradient(180deg,#1f2022,#18191b);--th:#18191b}
/* Fond UNI (Kripy, 21/09 : « l'arrière-plan dégradé fait bizarre sur un écran PC, on dirait que ça bug ») : ni halo ni grille. */
html[data-theme="communaute"] body{background:#0c0d0e none !important;background-image:none !important}
html[data-theme="communaute"] body::before,html[data-theme="communaute"] body::after{display:none !important}
html[data-theme="communaute"] :is(.bt.ok,.pl-join,.inv-b.ok,.sc-pret,.sc-go,.dr-pret,.btn-primary,.tabs button.on,.snav a.on,.ch-chip.on,.langsel button.on,.ph-chat-o button.on,.cjb .on,.ce-bascule button.on,.hub-jeu em,.app-bandeau button.ok,.ch-nouveau,.maj-dispo,.jeu-general,.dock a.on .ic,.mc-res,.cr-room.on,.cl-av-txt,.ca-pil.on){color:var(--id-ink);text-shadow:none}
html[data-theme="communaute"] .hub-pitch :is(h1,h2) em{background:linear-gradient(90deg,#c6f500,#00e5ff);-webkit-background-clip:text;background-clip:text}
html[data-theme="communaute"] .tile .v{background:none;color:#fff}
html[data-theme="communaute"] .hub-tete .hub-moi h2{background:linear-gradient(90deg,#dcff5c,#00e5ff);-webkit-background-clip:text;background-clip:text}
/* Thème Clair : le vert électrique est illisible sur blanc → vert olive foncé */
html[data-theme="clair"]{--id-hi:#5f8f12;--id:#4d7c0f;--id-lo:#3f6212;--id-soft:#6b9a1e;--id-pale:#dff3b8;--id-rgb:77,124,15;--id-deep-rgb:30,50,0;--neu-rgb:20,30,20}
/* Volt : panneaux en aplat (le reflet radial en haut à gauche faisait « tache » sur un écran PC, comme le fond). */
html[data-theme="communaute"] :is(.panel,.sa-etapes,.sa-regl,.sa-eq,.sc,.ph-liste,.pl-liste,.ph-form,.mp-alerte,.sa-dem,.clan-vcard,.srv-liste,.hub-jeu,.tw-card,.jx-card,.mc-bloc,.cs-hub,.csc){background:var(--verre)}
html[data-theme="communaute"] :is(.chat-wrap .chat-main,.chat-wrap .chat-rooms,.chat-wrap .chat-users,.chat-main,.chat-rooms,.chat-users,.ce-compact,.ph-chat .ce-compact){background-image:linear-gradient(180deg,var(--panel2),var(--panel)) !important}
/* Parties personnalisées (Kripy, 21/09/2026 : « le statut passe sur deux lignes, le nom est super long, joueurs tout à droite
   et disproportionné ») : État sur une ligne alignée, nom et joueurs coupés proprement, colonne Joueurs lisible et centrée. */
.pp-table{table-layout:fixed;width:100%}
.pp-table th:nth-child(1),.pp-table td.pp-t{width:150px}
.pp-table th:nth-child(3),.pp-table td.sb-j{width:120px;text-align:center}
.pp-table th:nth-child(4),.pp-table td.sb-a{width:0;padding:0 !important}
html:is([data-theme="communaute"],[data-theme="clair"]) .pp-table .pp-t{white-space:nowrap;line-height:20px}
html:is([data-theme="communaute"],[data-theme="clair"]) .pp-table .pp-t b,html:is([data-theme="communaute"],[data-theme="clair"]) .pp-table .pp-t > i{display:inline-flex;align-items:center;height:20px;vertical-align:middle;line-height:20px}
.pp-table td.sb-n{overflow:hidden}
.pp-table td.sb-n > b,.pp-table td.sb-n > i{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pp-table td.sb-j b{font-size:14px}
.pp-table td.sb-j .sb-bar{display:block;width:72px;margin:4px auto 0}
@media (max-width:760px){
  .pp-table th:nth-child(1),.pp-table td.pp-t{width:92px}
  .pp-table td.pp-t > i{display:none !important}
  .pp-table th:nth-child(3),.pp-table td.sb-j{width:64px}
  .pp-table td.sb-j .sb-bar{width:44px}
}
/* Volt — contraste (Kripy, 21/09/2026 : « attention au blanc sur le vert fluo ») : tout ce qui est posé sur un aplat
   vert/cyan/menthe vif prend l'encre presque noire, jamais le blanc. Relevé par un audit de contraste automatique. */
html[data-theme="communaute"] :is(.pager button.on,.hp-feat .ic,.soc-badge,.dl-pastille,.maj-dispo,.jeu-general,.hub-jeu em){color:var(--id-ink) !important}
html[data-theme="communaute"] .hp-feat .ic svg{stroke:currentColor}
html:is([data-theme="communaute"],[data-theme="clair"]) .pp-table .pp-t b,html:is([data-theme="communaute"],[data-theme="clair"]) .pp-table .pp-t > i{vertical-align:top}
@media (max-width:760px){
  html:is([data-theme="communaute"],[data-theme="clair"]) .pp-table .pp-t,html:is([data-theme="communaute"],[data-theme="clair"]) .pp-table th:nth-child(1){width:84px}
  html:is([data-theme="communaute"],[data-theme="clair"]) .pp-table .pp-t > i{display:none !important}
}
