/* Boîte à jeux — hub de jeux entre amis (ex-Platine).
   Le shell (accueil, salon) est neutre et chaud. Chaque jeu repeint ensuite l'interface
   via [data-game] : Décennies = prune / tangerine / vinyle arrondi.
                     Éclair   = nuit bleue / lime électrique / angles vifs. */

/* ============================ jetons : shell ============================ */
:root{
  --bg:        oklch(0.17 0.018 62);
  --surface:   oklch(0.225 0.020 62);
  --surface-2: oklch(0.27 0.022 62);
  --line:      oklch(0.32 0.024 62);
  --ink:       oklch(0.95 0.014 80);
  --ink-2:     oklch(0.78 0.020 74);
  --mute:      oklch(0.63 0.022 70);
  --acc:       oklch(0.78 0.155 68);
  --acc-soft:  oklch(0.86 0.110 72);
  --on-acc:    oklch(0.20 0.040 62);
  --pos:       oklch(0.83 0.135 165);
  --neg:       oklch(0.70 0.185 18);
  --gold:      oklch(0.85 0.140 92);
  --glow:      0.16;

  --r:   16px;
  --r-s: 11px;
  --r-pill: 999px;
  --font-d: "Bricolage Grotesque", Georgia, serif;
  --font:   "Instrument Sans", system-ui, -apple-system, sans-serif;
  --track:  -0.02em;
  --ease:   cubic-bezier(0.16, 1, 0.3, 1);
  --bar-h:  52px;
}
/* thèmes supplémentaires : ils n'habillent que l'accueil, le salon et les règles (pas de data-game) */
[data-skin="nuit"]:not([data-game]){
  --bg:        oklch(0.170 0.035 255);
  --surface:   oklch(0.215 0.040 255);
  --surface-2: oklch(0.262 0.045 255);
  --line:      oklch(0.320 0.050 255);
  --ink:       oklch(0.950 0.012 240);
  --ink-2:     oklch(0.790 0.030 240);
  --mute:      oklch(0.640 0.040 245);
  --acc:       oklch(0.820 0.130 175);
  --acc-soft:  oklch(0.880 0.090 175);
  --on-acc:    oklch(0.200 0.040 200);
  --pos:       oklch(0.830 0.130 160);
  --neg:       oklch(0.700 0.180 18);
  --gold:      oklch(0.860 0.130 90);
  --glow:      0.16;
}
[data-skin="lavande"]:not([data-game]){
  --bg:        oklch(0.955 0.022 300);
  --surface:   oklch(0.990 0.010 300);
  --surface-2: oklch(0.930 0.028 300);
  --line:      oklch(0.870 0.035 300);
  --ink:       oklch(0.250 0.050 295);
  --ink-2:     oklch(0.430 0.050 295);
  --mute:      oklch(0.570 0.045 295);
  --acc:       oklch(0.560 0.190 320);
  --acc-soft:  oklch(0.500 0.170 320);
  --on-acc:    oklch(0.990 0.010 300);
  --pos:       oklch(0.550 0.130 160);
  --neg:       oklch(0.550 0.180 20);
  --gold:      oklch(0.600 0.120 85);
  --glow:      0.10;
}
[data-theme="light"]{
  --bg:        oklch(0.96 0.014 78);
  --surface:   oklch(0.99 0.008 78);
  --surface-2: oklch(0.94 0.014 76);
  --line:      oklch(0.88 0.018 76);
  --ink:       oklch(0.23 0.028 62);
  --ink-2:     oklch(0.44 0.028 64);
  --mute:      oklch(0.58 0.024 66);
  --acc:       oklch(0.62 0.170 52);
  --acc-soft:  oklch(0.52 0.150 50);
  --on-acc:    oklch(0.99 0.010 78);
  --pos:       oklch(0.55 0.130 160);
  --neg:       oklch(0.55 0.180 20);
  --gold:      oklch(0.60 0.120 85);
  --glow:      0.10;
}

/* ============================ jeu : Décennies ============================ */
[data-game="decennies"]{
  --bg:        oklch(0.165 0.040 305);
  --surface:   oklch(0.235 0.048 303);
  --surface-2: oklch(0.29 0.052 303);
  --line:      oklch(0.33 0.055 303);
  --ink:       oklch(0.94 0.028 88);
  --ink-2:     oklch(0.77 0.030 80);
  --mute:      oklch(0.62 0.040 300);
  --acc:       oklch(0.705 0.190 44);
  --acc-soft:  oklch(0.83 0.145 70);
  --on-acc:    oklch(0.19 0.060 40);
  --pos:       oklch(0.84 0.140 166);
  --neg:       oklch(0.70 0.190 14);
  --r: 18px; --r-s: 13px;
  --font-d: "Bricolage Grotesque", Georgia, serif;
  --track: -0.03em;
}
[data-theme="light"][data-game="decennies"]{
  --bg:        oklch(0.955 0.022 70);
  --surface:   oklch(0.995 0.010 75);
  --surface-2: oklch(0.935 0.022 68);
  --line:      oklch(0.875 0.028 66);
  --ink:       oklch(0.21 0.055 300);
  --ink-2:     oklch(0.43 0.040 300);
  --mute:      oklch(0.58 0.032 300);
  --acc:       oklch(0.615 0.185 42);
  --acc-soft:  oklch(0.52 0.150 46);
  --on-acc:    oklch(0.99 0.010 75);
  --pos:       oklch(0.55 0.130 162);
  --neg:       oklch(0.54 0.185 18);
}

/* ============================ jeu : Éclair ============================ */
[data-game="eclair"]{
  --bg:        oklch(0.155 0.035 258);
  --surface:   oklch(0.205 0.040 256);
  --surface-2: oklch(0.255 0.045 256);
  --line:      oklch(0.31 0.050 254);
  --ink:       oklch(0.97 0.012 250);
  --ink-2:     oklch(0.78 0.030 240);
  --mute:      oklch(0.61 0.040 250);
  --acc:       oklch(0.905 0.190 118);
  --acc-soft:  oklch(0.82 0.130 200);
  --on-acc:    oklch(0.19 0.060 140);
  --pos:       oklch(0.90 0.185 120);
  --neg:       oklch(0.68 0.200 6);
  --gold:      oklch(0.86 0.160 95);
  --glow: 0.26;
  --r: 7px; --r-s: 5px; --r-pill: 6px;
  --font-d: "Syne", "Bricolage Grotesque", sans-serif;
  --track: -0.01em;
}
[data-theme="light"][data-game="eclair"]{
  --bg:        oklch(0.965 0.020 240);
  --surface:   oklch(0.995 0.008 240);
  --surface-2: oklch(0.935 0.020 240);
  --line:      oklch(0.86 0.030 244);
  --ink:       oklch(0.19 0.050 256);
  --ink-2:     oklch(0.41 0.040 252);
  --mute:      oklch(0.57 0.035 250);
  --acc:       oklch(0.68 0.175 132);
  --acc-soft:  oklch(0.55 0.130 220);
  --on-acc:    oklch(0.99 0.010 240);
  --pos:       oklch(0.58 0.150 140);
  --neg:       oklch(0.53 0.190 20);
  --glow: 0.12;
}

/* ============================ jeu : Sprint ============================ */
[data-game="sprint"]{
  --bg:        oklch(0.145 0.030 348);
  --surface:   oklch(0.200 0.038 346);
  --surface-2: oklch(0.250 0.045 346);
  --line:      oklch(0.310 0.050 346);
  --ink:       oklch(0.965 0.014 340);
  --ink-2:     oklch(0.780 0.030 340);
  --mute:      oklch(0.610 0.040 342);
  --acc:       oklch(0.690 0.245 356);
  --acc-soft:  oklch(0.820 0.150 350);
  --on-acc:    oklch(0.99 0.010 340);
  --pos:       oklch(0.840 0.150 165);
  --neg:       oklch(0.690 0.200 20);
  --gold:      oklch(0.860 0.150 88);
  --glow: 0.22;
  --r: 11px; --r-s: 9px; --r-pill: 999px;
  --font-d: "Archivo", "Bricolage Grotesque", sans-serif;
  --track: -0.015em;
}
[data-theme="light"][data-game="sprint"]{
  --bg:        oklch(0.965 0.018 348);
  --surface:   oklch(0.995 0.008 348);
  --surface-2: oklch(0.935 0.020 348);
  --line:      oklch(0.875 0.028 348);
  --ink:       oklch(0.200 0.048 348);
  --ink-2:     oklch(0.420 0.040 346);
  --mute:      oklch(0.575 0.035 344);
  --acc:       oklch(0.560 0.230 0);
  --acc-soft:  oklch(0.470 0.180 355);
  --on-acc:    oklch(0.99 0.010 340);
  --pos:       oklch(0.550 0.135 162);
  --neg:       oklch(0.540 0.190 22);
  --glow: 0.11;
}
[data-game="sprint"] h1,[data-game="sprint"] .banner,[data-game="sprint"] .crumb{text-transform:uppercase;letter-spacing:.01em}
[data-game="sprint"] .banner small,[data-game="sprint"] .note{text-transform:none;letter-spacing:0}

/* ============================ socle ============================ */
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html{background:var(--bg);overflow-x:hidden;-webkit-text-size-adjust:100%}
body{
  margin:0;min-height:100dvh;background:var(--bg);color:var(--ink);
  font:16px/1.45 var(--font);-webkit-font-smoothing:antialiased;
  transition:background .35s var(--ease),color .35s var(--ease);
}
body::before{
  content:"";position:fixed;inset:0;z-index:0;pointer-events:none;
  background:radial-gradient(115% 70% at 50% -12%, color-mix(in oklab, var(--acc) 22%, transparent), transparent 62%);
  opacity:var(--glow);transition:opacity .35s var(--ease);
}
.grain{position:fixed;inset:0;pointer-events:none;z-index:1;opacity:.055;mix-blend-mode:overlay;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E")}
[data-theme="light"] .grain{opacity:.1;mix-blend-mode:multiply}
[hidden]{display:none!important}

.screen{
  position:relative;z-index:2;min-height:100dvh;
  padding:calc(var(--bar-h) + env(safe-area-inset-top) + 10px) 20px max(26px,env(safe-area-inset-bottom));
  display:flex;flex-direction:column;gap:20px;max-width:540px;margin:0 auto;
  animation:screen-in .42s var(--ease);
}
.screen.play{gap:15px}
@keyframes screen-in{from{opacity:0;transform:translateY(10px)}}

/* ============================ barre haute ============================ */
.topbar{
  position:fixed;top:0;left:0;right:0;z-index:20;height:calc(var(--bar-h) + env(safe-area-inset-top));
  padding:env(safe-area-inset-top) 10px 0;display:flex;align-items:center;gap:6px;
  /* fond UNI, sans transparence ni flou : depuis iOS 26, une appli installée sur l'écran d'accueil
     recouvre la zone de la barre d'état d'un flou « Liquid Glass » dès que le bord haut de la page
     n'a pas de couleur unie à prélever, et ce flou déborde sur le titre et les boutons */
  background:var(--bg);
  border-bottom:1px solid color-mix(in oklab, var(--line) 60%, transparent);
}
/* même chose en bas : une bande unie sous la barre d'accueil de l'iPhone (hauteur 0 ailleurs),
   un vrai élément car iOS ignore les pseudo-éléments pour prélever la couleur */
.safe-bottom{position:fixed;left:0;right:0;bottom:0;height:env(safe-area-inset-bottom);background:var(--bg);z-index:19;pointer-events:none;transition:background .35s var(--ease)}
.ic{
  flex:0 0 auto;width:38px;height:38px;border-radius:var(--r-s);border:1px solid var(--line);
  background:var(--surface);color:var(--ink);font:600 17px/1 var(--font);
  display:grid;place-items:center;cursor:pointer;transition:transform .12s var(--ease),background .2s;
}
.ic:active{transform:scale(.9)}
#btn-back{font-size:26px;padding-bottom:4px}
.crumb{
  flex:1;min-width:0;font-family:var(--font-d);font-weight:800;font-size:17px;letter-spacing:var(--track);
  padding-left:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
[data-game="eclair"] .crumb{text-transform:uppercase;letter-spacing:.08em;font-size:15px}
.net{font-size:11px;color:var(--mute);display:flex;align-items:center;gap:5px;padding-right:2px;white-space:nowrap}
.net::before{content:"";width:7px;height:7px;border-radius:50%;background:var(--mute)}
.net.on::before{background:var(--pos)}
.net.off::before{background:var(--neg)}
@media (max-width:380px){.net{font-size:0;gap:0}}

.vol-pop{
  position:fixed;z-index:21;top:calc(var(--bar-h) + env(safe-area-inset-top) + 6px);right:10px;
  display:flex;align-items:center;gap:10px;padding:10px 14px;border-radius:var(--r);
  background:var(--surface);border:1px solid var(--line);box-shadow:0 16px 40px -18px oklch(0 0 0 / .7);
  animation:pop .2s var(--ease);
}
.vol-pop input[type=range]{width:150px;appearance:none;height:4px;border-radius:2px;background:var(--line);padding:0;min-height:0;border:0;cursor:pointer}
.vol-pop input[type=range]::-webkit-slider-thumb{appearance:none;width:20px;height:20px;border-radius:50%;background:var(--acc);border:2px solid var(--surface)}
.vol-pop input[type=range]::-moz-range-thumb{width:20px;height:20px;border-radius:50%;background:var(--acc);border:2px solid var(--surface)}

/* ============================ typographie ============================ */
h1{font-family:var(--font-d);font-weight:800;font-size:clamp(42px,12.5vw,64px);line-height:.94;letter-spacing:var(--track);margin:0}
[data-game="eclair"] h1{text-transform:uppercase;letter-spacing:-.005em}
.section-title{font-family:var(--font-d);font-weight:800;font-size:19px;letter-spacing:var(--track);margin:0 0 10px}
.lede{color:var(--ink-2);font-size:17px;margin:0;max-width:34ch}
.eyebrow{font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--mute);font-weight:600}
.fine{color:var(--mute);font-size:13px;margin:0;line-height:1.4}
.err{color:var(--neg);font-size:14px;min-height:20px;margin:0}

/* ============================ accueil ============================ */
.hub-hero{padding:14px 0 4px;display:flex;flex-direction:column;gap:14px}
/* la boîte de jeu de société : corps, couvercle entrouvert qui respire, dé et pion qui dépassent */
.gamebox{width:118px;height:98px;filter:drop-shadow(0 18px 24px oklch(0 0 0/.35))}
.gamebox svg{display:block;overflow:visible}
.gb-shadow{fill:oklch(0 0 0/.28)}
.gb-top{fill:oklch(0.36 0.026 62)} .gb-side{fill:oklch(0.24 0.02 62)} .gb-front{fill:oklch(0.30 0.022 62)}
.gb-band{fill:var(--acc)} .gb-band2{fill:var(--acc-soft)}
.gb-lid{transform-origin:14px 44px;animation:lid 5s var(--ease) infinite}
.gb-lid-top{fill:var(--acc)} .gb-lid-edge{fill:oklch(0.52 0.15 60)} .gb-lid-edge2{fill:oklch(0.62 0.15 64)}
.gb-lid-mark{fill:oklch(0.99 0.01 80/.85)}
.gb-die{animation:hop 5s var(--ease) infinite}
.die-top{fill:oklch(0.99 0.01 80)} .die-left{fill:oklch(0.86 0.015 80)} .die-right{fill:oklch(0.93 0.012 80)}
.die-pip{fill:oklch(0.22 0.03 62)}
.gb-meeple{fill:var(--pos);animation:hop 5s .25s var(--ease) infinite}
@keyframes lid{0%,55%,100%{transform:rotate(0)}70%,85%{transform:rotate(-7deg)}}
@keyframes hop{0%,55%,100%{transform:translateY(0)}70%,85%{transform:translateY(-6px)}}
[data-theme="light"] .gb-top{fill:oklch(0.62 0.05 62)} [data-theme="light"] .gb-side{fill:oklch(0.46 0.05 62)} [data-theme="light"] .gb-front{fill:oklch(0.54 0.05 62)}
[data-theme="light"] .gamebox{filter:drop-shadow(0 14px 20px oklch(0 0 0/.18))}
[data-theme="light"] .gb-shadow{fill:oklch(0 0 0/.14)}
@keyframes spin{to{transform:rotate(360deg)}}
.hub-foot{margin-top:auto;display:flex;flex-direction:column;gap:10px;align-items:center;text-align:center}

/* ============================ formulaires ============================ */
.stack{display:flex;flex-direction:column;gap:12px}
.field{display:flex;flex-direction:column;gap:6px}
.field>span{font-size:13px;color:var(--ink-2);font-weight:500}
.field.row{flex-direction:row;align-items:center;justify-content:space-between;gap:12px;background:var(--surface);padding:11px 14px;border-radius:var(--r-s);border:1px solid var(--line)}
.field.row>span{font-size:14px}
input,select{
  font:inherit;color:var(--ink);background:var(--surface);border:1px solid var(--line);
  border-radius:var(--r-s);padding:13px 14px;min-height:50px;outline:none;
  transition:border-color .15s,box-shadow .15s;
}
input:focus,select:focus{border-color:var(--acc);box-shadow:0 0 0 3px color-mix(in oklab, var(--acc) 30%, transparent)}
input::placeholder{color:var(--mute)}
select{appearance:none;padding-right:30px;min-height:44px;
  background-image:linear-gradient(45deg,transparent 50%,var(--ink-2) 50%),linear-gradient(135deg,var(--ink-2) 50%,transparent 50%);
  background-position:calc(100% - 16px) 50%,calc(100% - 11px) 50%;background-size:5px 5px;background-repeat:no-repeat}
#in-code{font-family:var(--font-d);font-weight:800;font-size:24px;letter-spacing:.34em;text-transform:uppercase;text-align:center;flex:1;min-width:0;padding-left:.34em}
.join-row{display:flex;gap:10px}
.or{display:flex;align-items:center;gap:12px;color:var(--mute);font-size:12px;text-transform:uppercase;letter-spacing:.1em}
.or::before,.or::after{content:"";flex:1;height:1px;background:var(--line)}

.btn{
  font:600 16px/1 var(--font);color:var(--ink);background:var(--surface);
  border:1px solid var(--line);border-radius:var(--r-s);padding:14px 20px;min-height:50px;
  cursor:pointer;transition:transform .12s var(--ease),background .18s,opacity .18s;
  display:inline-flex;align-items:center;justify-content:center;gap:8px;white-space:nowrap;
}
.btn:active{transform:scale(.975)}
.btn.lg{min-height:56px;font-size:17px}
.btn.primary{background:var(--acc);border-color:var(--acc);color:var(--on-acc);font-weight:700}
.btn.pos{background:var(--pos);border-color:var(--pos);color:var(--on-acc)}
.btn.ghost{background:transparent;border-color:transparent;color:var(--ink-2)}
.btn.small{padding:8px 12px;min-height:36px;font-size:14px}
.btn:disabled{opacity:.38;pointer-events:none}
.btn .cost{font-size:12px;font-weight:700;background:color-mix(in oklab, var(--on-acc) 18%, transparent);padding:3px 8px;border-radius:var(--r-pill)}
.btn:not(.primary) .cost{background:color-mix(in oklab, var(--ink) 12%, transparent)}
[data-game="eclair"] .btn{text-transform:uppercase;letter-spacing:.04em;font-size:15px}
.row{display:flex;gap:10px;flex-wrap:wrap}
.row.center{justify-content:center}

/* ============================ salon ============================ */
.code-strip{display:flex;align-items:center;justify-content:space-between;gap:16px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:14px 18px}
.code{font-family:var(--font-d);font-weight:800;font-size:42px;letter-spacing:.16em;line-height:1.05;color:var(--acc);padding-left:.16em}
.players{display:flex;flex-wrap:wrap;gap:7px}
.chip{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-pill);padding:6px 13px 6px 6px;display:flex;align-items:center;gap:8px;font-size:14px;font-weight:500;animation:pop .35s var(--ease)}
.chip .dot{width:25px;height:25px;border-radius:50%;background:var(--acc);display:grid;place-items:center;font-family:var(--font-d);font-weight:800;font-size:12px;color:var(--on-acc)}
.chip.host .dot{background:var(--gold)}
.chip.off{opacity:.4}
@keyframes pop{from{transform:scale(.72);opacity:0}}

.games{display:flex;flex-direction:column;gap:10px}
.gcard{
  position:relative;overflow:hidden;text-align:left;font:inherit;color:var(--ink);cursor:pointer;
  display:grid;grid-template-columns:auto 1fr;grid-template-rows:auto auto auto;gap:2px 15px;
  padding:16px 18px;border-radius:var(--r);border:1px solid var(--line);background:var(--surface);
  transition:transform .14s var(--ease),border-color .2s,background .2s;
}
.gcard:active{transform:scale(.985)}
.gcard[aria-pressed="true"]{border-color:var(--acc);background:color-mix(in oklab, var(--acc) 12%, var(--surface))}
.gcard .gart{grid-row:1/4;align-self:center;width:54px;height:54px;display:grid;place-items:center}
.gcard .gname{font-family:var(--font-d);font-weight:800;font-size:24px;letter-spacing:-.03em}
.gcard .gdesc{color:var(--ink-2);font-size:13.5px;line-height:1.35}
/* les cartes portent data-game : sans ceci, elles prendraient la palette SOMBRE de leur jeu même en thème clair */
.gcard[data-game]{--bg:inherit;--surface:inherit;--surface-2:inherit;--line:inherit;--ink:inherit;--ink-2:inherit;--mute:inherit;--acc:inherit;--acc-soft:inherit;--on-acc:inherit;--pos:inherit;--neg:inherit;--gold:inherit}
.gcard .gmeta{color:var(--mute);font-size:11.5px;margin-top:5px;letter-spacing:.04em}
.g-decennies .gname{color:oklch(0.78 0.17 48)}
.g-eclair .gname{font-family:"Syne",sans-serif;text-transform:uppercase;letter-spacing:-.01em;color:oklch(0.88 0.19 120)}
[data-theme="light"] .g-decennies .gname{color:oklch(0.58 0.18 42)}
[data-theme="light"] .g-eclair .gname{color:oklch(0.62 0.17 132)}
.disc{width:50px;height:50px;border-radius:50%;background:repeating-radial-gradient(circle, oklch(0.12 0.02 300) 0 1.4px, oklch(0.22 0.03 300) 1.4px 3.2px);box-shadow:inset 0 0 0 1px oklch(0 0 0/.4)}
.disc::after{content:"";display:block;margin:38% auto;width:24%;height:24%;border-radius:50%;background:oklch(0.78 0.17 48)}
.gcard[aria-pressed="true"] .disc{animation:spin 3.5s linear infinite}
.bolt{width:0;height:0;display:block;
  border-left:16px solid transparent;border-right:16px solid transparent;border-bottom:26px solid oklch(0.88 0.19 120);
  clip-path:polygon(58% 0, 0 58%, 40% 58%, 30% 100%, 100% 40%, 55% 40%);
  width:34px;height:46px;border:0;background:oklch(0.88 0.19 120)}
[data-theme="light"] .bolt{background:oklch(0.62 0.17 132)}
.g-sprint .gname{font-family:"Archivo",sans-serif;text-transform:uppercase;letter-spacing:.005em;color:oklch(0.76 0.22 356)}
[data-theme="light"] .g-sprint .gname{color:oklch(0.56 0.23 0)}
.g-sprint{background:oklch(0.200 0.042 346);border-color:oklch(0.30 0.048 346)}
.g-sprint[aria-pressed="true"]{border-color:oklch(0.69 0.245 356);background:oklch(0.245 0.060 348)}
[data-theme="light"] .g-sprint{background:oklch(0.965 0.020 350);border-color:oklch(0.875 0.030 350)}
[data-theme="light"] .g-sprint[aria-pressed="true"]{border-color:oklch(0.56 0.23 0);background:oklch(0.945 0.040 352)}
.chrono{width:46px;height:46px;border-radius:50%;display:block;border:4px solid oklch(0.76 0.22 356);position:relative;box-shadow:inset 0 0 0 3px oklch(0 0 0/.25)}
.chrono::after{content:"";position:absolute;left:50%;top:18%;width:3px;height:34%;border-radius:2px;background:oklch(0.76 0.22 356);transform-origin:bottom center;transform:translateX(-50%) rotate(48deg)}
[data-theme="light"] .chrono{border-color:oklch(0.56 0.23 0)}
[data-theme="light"] .chrono::after{background:oklch(0.56 0.23 0)}
.gcard[aria-pressed="true"] .chrono::after{animation:sweep 2s linear infinite}
@keyframes sweep{to{transform:translateX(-50%) rotate(408deg)}}

/* --- scène Sprint : le chrono remplace la pochette --- */
.chrono-stage{position:relative;width:124px;height:124px;display:grid;place-items:center;border-radius:50%;overflow:hidden;background:var(--surface-2);box-shadow:inset 0 0 0 2px var(--line)}
.chrono-stage img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;opacity:0;transition:opacity .45s var(--ease)}
.chrono-stage.revealed img{opacity:1}
.chrono-stage .num{position:relative;z-index:2;font-family:var(--font-d);font-weight:800;font-size:46px;line-height:1;color:var(--acc);font-variant-numeric:tabular-nums;transition:opacity .3s}
.chrono-stage.revealed .num{opacity:0}
.chrono-stage.hot .num{animation:tick 1s steps(2) infinite;color:var(--neg)}
@keyframes tick{50%{opacity:.45}}

/* --- classement de manche --- */
.podium{display:flex;flex-direction:column;gap:6px}
.podium div{display:flex;align-items:center;gap:11px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-s);padding:10px 14px;font-size:14px}
.podium .pos{font-family:var(--font-d);font-weight:800;font-size:17px;color:var(--mute);min-width:22px}
.podium .who{flex:1;font-weight:600}
.podium.first .pos{color:var(--gold)}
.podium div:first-child{border-color:var(--gold)}
.podium div:first-child .pos{color:var(--gold)}
.podium .gain{font-family:var(--font-d);font-weight:800;color:var(--acc-soft)}
.podium .miss{color:var(--neg);font-size:13px}


.gsoon{border:1px dashed var(--line);border-radius:var(--r-s);padding:12px 16px;color:var(--mute);font-size:13px;text-align:center}

.opts{display:flex;flex-direction:column;gap:10px;margin-bottom:12px;animation:screen-in .3s var(--ease)}
.chips{border:0;padding:0;margin:0;display:flex;flex-wrap:wrap;gap:7px}
.chips legend{padding:0;margin-bottom:8px}
.chips label{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-pill);padding:9px 15px;font-size:14px;cursor:pointer;user-select:none;transition:background .15s,border-color .15s}
.chips label:has(:checked){background:color-mix(in oklab, var(--acc) 18%, var(--surface));border-color:var(--acc);color:var(--acc-soft)}
.chips input{display:none}

/* ============================ jeu : commun ============================ */
.scoreboard{display:flex;gap:6px;overflow-x:auto;scrollbar-width:none;margin:0 -20px;padding:2px 20px}
.scoreboard::-webkit-scrollbar{display:none}
.sb{flex:0 0 auto;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-s);padding:8px 12px;display:flex;flex-direction:column;gap:2px;min-width:86px;transition:border-color .2s,background .2s}
.sb.active{border-color:var(--acc);background:color-mix(in oklab, var(--acc) 14%, var(--surface))}
.sb.me .name::after{content:" (toi)";color:var(--mute);font-weight:400}
.sb .name{font-size:13px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:112px}
.sb .stats{display:flex;gap:9px;font-size:12px;color:var(--ink-2);font-variant-numeric:tabular-nums}
.sb .stats b{color:var(--ink);font-family:var(--font-d);font-size:15px}
.sb .stats .tok{color:var(--gold)}

.banner{font-family:var(--font-d);font-weight:800;font-size:23px;letter-spacing:var(--track);line-height:1.12;min-height:26px}
.banner small{display:block;font:500 14px/1.4 var(--font);color:var(--ink-2);margin-top:5px;letter-spacing:0}
.banner .timer{color:var(--acc);font-variant-numeric:tabular-nums}
[data-game="eclair"] .banner{text-transform:uppercase;font-size:20px;letter-spacing:.01em}

.stage{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:18px;display:flex;flex-direction:column;align-items:center;gap:13px;position:relative;overflow:hidden}
.track-info{text-align:center;min-height:20px;font-weight:600}
.track-info small{display:block;color:var(--ink-2);font-weight:400;font-size:13px}
.track-info .big{font-family:var(--font-d);font-size:38px;font-weight:800;line-height:1.05;color:var(--acc-soft);letter-spacing:var(--track)}
.track-info .big.ok{color:var(--pos)} .track-info .big.ko{color:var(--neg)}
.progress{width:100%;height:4px;border-radius:2px;background:var(--line);overflow:hidden}
.progress i{display:block;height:100%;width:0;background:var(--acc);transition:width .25s linear}

/* --- vinyle (Décennies) --- */
.vinyl{position:relative;width:112px;height:112px;border-radius:50%;flex:0 0 auto;
  background:repeating-radial-gradient(circle, oklch(0.10 0.02 300) 0 1.5px, oklch(0.19 0.03 300) 1.5px 3.5px);
  box-shadow:0 0 0 8px var(--surface-2), 0 20px 40px -18px oklch(0 0 0/.85)}
.vinyl i{position:absolute;inset:38%;border-radius:50%;background:var(--acc);box-shadow:0 0 0 3px oklch(0.10 0.02 300)}
.vinyl img,.bolt-stage img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;opacity:0;transition:opacity .45s var(--ease);z-index:1}
.vinyl img{border-radius:50%}
.vinyl.revealed img,.bolt-stage.revealed img{opacity:1}
.vinyl.spin{animation:spin 1.9s linear infinite}

/* --- éclair (Éclair) --- */
.bolt-stage{position:relative;width:118px;height:118px;display:grid;place-items:center;border-radius:var(--r-s);overflow:hidden;background:var(--surface-2);box-shadow:inset 0 0 0 1px var(--line)}
.bolt-stage .bolt{width:46px;height:62px;z-index:2;transition:opacity .3s}
.bolt-stage.revealed .bolt{opacity:0}
.bolt-stage.pulse .bolt{animation:zap .5s steps(2) infinite}
@keyframes zap{50%{opacity:.25;transform:scale(1.08)}}

.segbar{display:flex;gap:4px;width:100%;height:11px;margin-bottom:15px}
.segbar i{flex:var(--w);border-radius:var(--r-s);background:var(--line);position:relative;overflow:hidden;transition:background .2s}
.segbar i.open{background:color-mix(in oklab, var(--acc) 32%, var(--line))}
.segbar i b{position:absolute;inset:0;width:0;background:var(--acc);display:block}
.segbar i.open::after{content:attr(data-s);position:absolute;top:14px;left:0;font-size:10px;color:var(--mute);font-weight:600;font-variant-numeric:tabular-nums}

/* --- frise --- */
.timeline-wrap{display:flex;flex-direction:column;gap:6px}
.timeline-owner{font-size:13px;color:var(--ink-2);font-weight:500}
.timeline{display:flex;align-items:stretch;gap:6px;overflow-x:auto;padding:6px 20px 12px;margin:0 -20px;scrollbar-width:none;scroll-snap-type:x proximity}
.timeline::-webkit-scrollbar{display:none}
.tcard{flex:0 0 114px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-s);padding:8px;display:flex;flex-direction:column;gap:5px;scroll-snap-align:center}
.tcard img{width:100%;aspect-ratio:1;border-radius:calc(var(--r-s) - 4px);object-fit:cover;background:var(--surface-2)}
.tcard b{font-family:var(--font-d);font-size:22px;font-weight:800;line-height:1;color:var(--acc-soft);font-variant-numeric:tabular-nums}
.tcard small{color:var(--mute);font-size:11px;line-height:1.25;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.tcard.new{animation:pop .45s var(--ease);border-color:var(--pos)}
.tcard.new b{color:var(--pos)}
.tcard.lost{border-color:var(--neg);opacity:.5;border-style:dashed}
.slot{flex:0 0 42px;border-radius:var(--r-s);border:2px dashed var(--line);display:grid;place-items:center;color:var(--mute);font-size:24px;font-weight:300;position:relative;transition:border-color .15s,background .15s,transform .1s;cursor:pointer;min-height:96px}
.slot:active{transform:scale(.94)}
.slot.pick{border-style:solid;border-color:var(--acc);background:color-mix(in oklab, var(--acc) 20%, transparent);color:var(--acc-soft)}
.slot.pick::before{content:attr(data-who);position:absolute;top:-9px;left:50%;transform:translateX(-50%);font-size:10px;font-weight:700;background:var(--acc);color:var(--on-acc);padding:2px 6px;border-radius:var(--r-pill);white-space:nowrap}
.slot.bet{border-color:var(--gold);color:var(--gold)}
.slot.bet::after{content:attr(data-bet);position:absolute;bottom:-9px;left:50%;transform:translateX(-50%);font-size:10px;font-weight:700;background:var(--gold);color:var(--on-acc);padding:2px 6px;border-radius:var(--r-pill);white-space:nowrap}
.slot.arm{border-color:var(--gold);background:color-mix(in oklab, var(--gold) 14%, transparent);animation:breathe 1.6s ease-in-out infinite}
@keyframes breathe{50%{background:color-mix(in oklab, var(--gold) 26%, transparent)}}
.slot.disabled{pointer-events:none;opacity:.45}
.slot.right{border-color:var(--pos);background:color-mix(in oklab, var(--pos) 16%, transparent);border-style:solid}
.slot.wrong{border-color:var(--neg);background:color-mix(in oklab, var(--neg) 14%, transparent);border-style:solid}

/* --- actions --- */
.actions{display:flex;flex-direction:column;gap:10px}
.actions .row{justify-content:center}
.guess{display:flex;gap:8px}
.guess input{flex:1;min-width:0;min-height:46px}
.note{font-size:13px;color:var(--mute);text-align:center;line-height:1.4}
.note b{color:var(--ink-2)}
.tokline{display:flex;align-items:center;justify-content:center;gap:7px;font-size:13px;color:var(--ink-2)}
.pip{width:13px;height:13px;border-radius:50%;background:var(--gold);box-shadow:0 0 0 1px color-mix(in oklab, var(--gold) 50%, transparent)}
.pip.off{background:transparent;box-shadow:inset 0 0 0 1.5px var(--line)}

.guess-box{position:relative}
.guess-box input{width:100%}
.suggest{position:absolute;left:0;right:0;top:calc(100% + 4px);background:var(--surface);border:1px solid var(--line);border-radius:var(--r-s);overflow:hidden;z-index:5;max-height:220px;overflow-y:auto;box-shadow:0 16px 36px -14px oklch(0 0 0/.65)}
.suggest div{padding:11px 14px;font-size:15px;cursor:pointer;border-top:1px solid var(--line)}
.suggest div:first-child{border-top:0}
.suggest div:hover,.suggest div.hl{background:color-mix(in oklab, var(--acc) 16%, transparent)}
.suggest small{color:var(--mute)}
.others{display:flex;flex-wrap:wrap;gap:6px}
.others span{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-pill);padding:6px 12px;font-size:13px;color:var(--ink-2)}
.others span.done{border-color:var(--pos);color:var(--pos)}
.others span.out{border-color:var(--neg);color:var(--neg)}
.pts{font-family:var(--font-d);font-weight:800;color:var(--gold)}
.round-res{display:flex;flex-direction:column;gap:6px}
.round-res div{display:flex;justify-content:space-between;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-s);padding:10px 14px;font-size:14px}

/* ============================ fin ============================ */
.endhero{text-align:center;display:flex;flex-direction:column;gap:8px;align-items:center;padding:20px 0 4px}
.endhero .lede{max-width:26ch}
.ranking{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px;counter-reset:r}
.ranking li{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-s);padding:13px 16px;display:flex;align-items:center;gap:13px;counter-increment:r;animation:pop .4s var(--ease) both}
.ranking li::before{content:counter(r);font-family:var(--font-d);font-weight:800;font-size:19px;color:var(--mute);width:22px}
.ranking li:first-child{border-color:var(--gold)}
.ranking li:first-child::before{color:var(--gold)}
.ranking li span{flex:1;font-weight:600}
.ranking li b{font-family:var(--font-d);font-size:18px;color:var(--acc-soft)}
.ranking li:nth-child(2){animation-delay:.07s}.ranking li:nth-child(3){animation-delay:.14s}
.ranking li:nth-child(4){animation-delay:.21s}.ranking li:nth-child(5){animation-delay:.28s}

/* ============================ feuilles & toast ============================ */
.modal{position:fixed;inset:0;background:oklch(0.12 0.02 60/.6);z-index:30;display:flex;align-items:flex-end;justify-content:center;animation:screen-in .2s var(--ease)}
.sheet{background:var(--surface);color:var(--ink);border-radius:var(--r) var(--r) 0 0;padding:18px 20px max(26px,env(safe-area-inset-bottom));width:100%;max-width:540px;max-height:86dvh;overflow-y:auto;animation:sheet-in .32s var(--ease);font-size:15px;line-height:1.5;border:1px solid var(--line);border-bottom:0}
@keyframes sheet-in{from{transform:translateY(44px);opacity:0}}
.sheet-top{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}
.sheet h3{font-family:var(--font-d);font-size:21px;margin:16px 0 6px;color:var(--acc-soft);letter-spacing:var(--track)}
.sheet h3:first-of-type{margin-top:8px}
.sheet p{margin:6px 0}
.sheet ul{margin:6px 0;padding-left:19px}
.sheet li{margin:5px 0}
.toast{position:fixed;left:50%;bottom:max(22px,env(safe-area-inset-bottom));transform:translate(-50%,18px);background:var(--ink);color:var(--bg);padding:11px 17px;border-radius:var(--r-pill);font-weight:600;font-size:14px;opacity:0;pointer-events:none;transition:opacity .24s var(--ease),transform .24s var(--ease);z-index:40;max-width:90vw;text-align:center}
.toast.show{opacity:1;transform:translate(-50%,0)}

@media (prefers-reduced-motion:reduce){*{animation-duration:.01ms!important;transition-duration:.01ms!important}}

/* --- chaque carte de jeu porte un aperçu de la palette de son jeu --- */
.g-decennies{background:oklch(0.215 0.045 303);border-color:oklch(0.30 0.050 303)}
.g-eclair{background:oklch(0.195 0.040 256);border-color:oklch(0.29 0.045 254)}
.g-decennies[aria-pressed="true"]{border-color:oklch(0.70 0.19 44);background:oklch(0.26 0.060 300)}
.g-eclair[aria-pressed="true"]{border-color:oklch(0.88 0.19 120);background:oklch(0.24 0.055 254)}
[data-theme="light"] .g-decennies{background:oklch(0.965 0.022 68);border-color:oklch(0.88 0.030 64)}
[data-theme="light"] .g-eclair{background:oklch(0.965 0.020 232);border-color:oklch(0.87 0.030 238)}
[data-theme="light"] .g-decennies[aria-pressed="true"]{border-color:oklch(0.62 0.185 42);background:oklch(0.94 0.045 62)}
[data-theme="light"] .g-eclair[aria-pressed="true"]{border-color:oklch(0.68 0.175 132);background:oklch(0.94 0.045 150)}

/* le bandeau Éclair crie sur son titre, pas sur sa phrase d'explication */
[data-game="eclair"] .banner small,[data-game="eclair"] .note,[data-game="eclair"] .gdesc{text-transform:none}
[data-game="eclair"] .btn.ghost{letter-spacing:.02em}

/* ============================ jeu : Sablier ============================ */
[data-game="sablier"]{
  --bg:        oklch(0.185 0.020 40);
  --surface:   oklch(0.245 0.024 42);
  --surface-2: oklch(0.300 0.028 44);
  --line:      oklch(0.360 0.030 44);
  --ink:       oklch(0.960 0.020 80);
  --ink-2:     oklch(0.800 0.030 75);
  --mute:      oklch(0.640 0.030 65);
  --acc:       oklch(0.840 0.130 82);
  --acc-soft:  oklch(0.890 0.095 85);
  --on-acc:    oklch(0.22 0.040 50);
  --pos:       oklch(0.820 0.140 160);
  --neg:       oklch(0.700 0.180 22);
  --gold:      oklch(0.860 0.140 90);
  --glow: 0.14;
  --r: 14px; --r-s: 10px; --r-pill: 999px;
  --font-d: "Fraunces", "Bricolage Grotesque", Georgia, serif;
  --track: -0.015em;
}
[data-theme="light"][data-game="sablier"]{
  --bg:        oklch(0.955 0.020 80);
  --surface:   oklch(0.990 0.012 85);
  --surface-2: oklch(0.925 0.024 80);
  --line:      oklch(0.860 0.030 78);
  --ink:       oklch(0.230 0.030 45);
  --ink-2:     oklch(0.440 0.030 48);
  --mute:      oklch(0.580 0.030 55);
  --acc:       oklch(0.640 0.140 70);
  --acc-soft:  oklch(0.520 0.120 65);
  --on-acc:    oklch(0.99 0.010 80);
  --pos:       oklch(0.540 0.130 160);
  --neg:       oklch(0.540 0.180 24);
  --gold:      oklch(0.620 0.120 85);
  --glow: 0.10;
}
[data-game="sablier"] h1,[data-game="sablier"] .banner,[data-game="sablier"] .turn-who{font-family:var(--font-d);font-weight:700;font-variation-settings:"opsz" 72,"SOFT" 40}
.g-sablier .gname{font-family:"Fraunces",Georgia,serif;font-weight:700;color:oklch(0.86 0.13 82)}
[data-theme="light"] .g-sablier .gname{color:oklch(0.60 0.14 68)}
.g-sablier{background:oklch(0.245 0.026 42);border-color:oklch(0.35 0.03 44)}
.g-sablier[aria-pressed="true"]{border-color:oklch(0.84 0.13 82);background:oklch(0.29 0.035 46)}
[data-theme="light"] .g-sablier{background:oklch(0.965 0.022 80);border-color:oklch(0.87 0.03 78)}
[data-theme="light"] .g-sablier[aria-pressed="true"]{border-color:oklch(0.64 0.14 70);background:oklch(0.94 0.045 82)}
.hourglass{width:34px;height:48px;display:block;position:relative}
.hourglass::before,.hourglass::after{content:"";position:absolute;left:0;width:34px;height:22px;background:oklch(0.86 0.13 82)}
.hourglass::before{top:0;clip-path:polygon(0 0,100% 0,52% 100%,48% 100%)}
.hourglass::after{bottom:0;clip-path:polygon(48% 0,52% 0,100% 100%,0 100%)}
[data-theme="light"] .hourglass::before,[data-theme="light"] .hourglass::after{background:oklch(0.62 0.14 70)}
.gcard[aria-pressed="true"] .hourglass{animation:flip 3s ease-in-out infinite}
@keyframes flip{0%,70%{transform:rotate(0)}85%,100%{transform:rotate(180deg)}}

/* --- options salon --- */
.opt-rounds{display:flex;gap:7px;flex-wrap:wrap}
.opt-rounds label{flex:1;min-width:110px}
.field.row .num{width:84px;text-align:center;min-height:40px;padding:8px}

/* --- fil des étapes --- */
.steps{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--mute);font-weight:600;text-align:center}
.steps span{padding-top:8px;border-top:2px solid var(--line)}
.steps[data-step="1"] span:nth-child(1),.steps[data-step="2"] span:nth-child(-n+2),.steps[data-step="3"] span{border-top-color:var(--acc);color:var(--ink)}

/* --- panneaux --- */
.panel{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:16px;display:flex;flex-direction:column;gap:12px;box-shadow:0 12px 30px -22px oklch(0 0 0/.7)}
.panel h2,.selection-head h2{font-family:var(--font-d);font-weight:700;font-size:18px;margin:0;letter-spacing:var(--track)}
.panel-head{display:flex;align-items:center;justify-content:space-between;gap:10px}
.counter{font-size:13px;font-weight:700;font-variant-numeric:tabular-nums;background:color-mix(in oklab, var(--acc) 18%, var(--surface));color:var(--acc);border-radius:var(--r-pill);padding:3px 10px}
.counter.big{font-size:17px;padding:5px 14px}
.hint{font-size:13.5px;color:var(--ink-2);line-height:1.45;margin:0}
.hint.center{text-align:center}
.error{color:var(--neg);font-size:14px;margin:0;text-align:center}
.sticky-actions{display:flex;flex-direction:column;gap:8px}
.sticky-actions .btn{width:100%}
.row.split{display:grid;grid-template-columns:1fr 1.4fr;gap:10px}
.hero{text-align:center;padding:10px 0 0}
.hero-mark{font-size:44px;line-height:1;margin-bottom:8px}
.hero h1{font-family:var(--font-d);font-weight:700;font-size:26px;margin:0;letter-spacing:var(--track)}
.hero-sub{color:var(--ink-2);font-size:14.5px;margin-top:6px;line-height:1.45}

/* --- équipes --- */
.mode-switch{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.mode{font:inherit;color:var(--ink);text-align:left;background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-s);padding:11px 12px;cursor:pointer;display:flex;flex-direction:column;gap:3px}
.mode strong{font-size:15px}
.mode small{font-size:12px;color:var(--ink-2);line-height:1.35}
.mode.on{border-color:var(--acc);background:color-mix(in oklab, var(--acc) 16%, var(--surface))}
.teams{display:flex;flex-direction:column;gap:10px}
.team{font:inherit;color:var(--ink);text-align:left;width:100%;background:var(--surface-2);border:1px solid var(--line);border-left:4px solid var(--tc);border-radius:var(--r-s);padding:12px 14px;cursor:pointer;transition:transform .12s var(--ease),background .15s}
.team:active{transform:scale(.985)}
.team:disabled{cursor:default;opacity:1}
.team.mine{border-color:var(--tc);background:color-mix(in oklab, var(--tc) 14%, var(--surface))}
.team-head{display:flex;align-items:baseline;justify-content:space-between;gap:8px}
.team-name{font-family:var(--font-d);font-weight:700;font-size:18px;color:var(--tc)}
.team-count{font-size:12.5px;color:var(--mute)}
.team-players{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.team-empty{font-size:13px;color:var(--mute);margin:8px 0 0;font-style:italic}
.pill{font-size:13px;padding:4px 10px;border-radius:var(--r-pill);background:color-mix(in oklab, var(--ink) 8%, transparent);border:1px solid var(--line);color:var(--ink)}
.pill.off{opacity:.45;text-decoration:line-through}
.pill.host::after{content:" ★";color:var(--gold)}
.pill.me{border-color:var(--acc)}

/* --- bandeau des équipes (défausse et tour en cours) --- */
.team-strip{display:flex;flex-direction:column;gap:8px}
.team-strip-row{display:flex;align-items:baseline;flex-wrap:wrap;gap:6px;padding:9px 12px;border-radius:var(--r-s);background:var(--surface);border:1px solid var(--line);border-left:3px solid var(--tc);font-size:13px}
.ts-name{font-weight:700;color:var(--tc);margin-right:4px}
.ts-p{padding:2px 8px;border-radius:var(--r-pill);background:color-mix(in oklab, var(--ink) 8%, transparent)}
.ts-p.off{opacity:.45}
.ts-p.me{border:1px solid var(--acc)}
.ts-p.speaks{background:var(--gold);color:oklch(0.22 0.04 60);font-weight:700}
.ts-p.ready::after{content:" ✓";color:var(--pos)}
.ts-p.empty{color:var(--mute);background:transparent;font-style:italic}

/* --- cartes en main --- */
.selection-head{display:flex;flex-direction:column;gap:8px;text-align:center}
.selection-head h2{font-size:24px}
.sel-progress{display:flex;align-items:center;justify-content:center;gap:12px;flex-wrap:wrap}
.hand{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}
@media (min-width:480px){.hand{grid-template-columns:repeat(3,1fr)}}
.hand-card{position:relative;font:inherit;text-align:left;display:flex;flex-direction:column;gap:6px;justify-content:center;min-height:108px;padding:14px 12px;background:linear-gradient(165deg, oklch(0.985 0.015 85), oklch(0.93 0.025 80));border:1px solid oklch(0.82 0.04 80);border-radius:14px;cursor:pointer;transition:transform .1s var(--ease),opacity .15s;box-shadow:0 8px 20px -14px oklch(0 0 0/.6)}
.hand-card:active{transform:scale(.97)}
.hand-card:disabled{cursor:default}
.hc-cat,.game-card-cat{font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;color:oklch(0.50 0.10 55);font-weight:700}
.hc-name{font-family:var(--font-d);font-weight:700;font-size:16.5px;line-height:1.18;color:oklch(0.20 0.03 50)}
.dots{font-size:10px;letter-spacing:2px;color:oklch(0.60 0.10 60)}
.hand-card.discarded{border-color:var(--neg);background:color-mix(in oklab, var(--neg) 12%, oklch(0.93 0.02 80));opacity:.6}
.hand-card.discarded .hc-name{text-decoration:line-through}
.hand-card.discarded::after{content:"écartée";position:absolute;top:8px;right:8px;font-size:9.5px;text-transform:uppercase;letter-spacing:.08em;color:var(--neg);font-weight:700}
.hand.locked .hand-card:active{transform:none}

/* --- entre deux tours --- */
.round-banner{display:flex;align-items:center;justify-content:center;gap:10px;flex-wrap:wrap;font-size:12px;color:var(--mute);text-transform:uppercase;letter-spacing:.09em;font-weight:600}
.round-banner .dot{width:4px;height:4px;border-radius:50%;background:var(--line)}
.spotlight{align-items:center;text-align:center}
.spotlight .btn,.spotlight .rule-box{width:100%}
.up-next-label{font-size:11.5px;color:var(--mute);text-transform:uppercase;letter-spacing:.12em;font-weight:600;margin:0}
.up-next-name{font-family:var(--font-d);font-size:36px;font-weight:700;letter-spacing:var(--track);line-height:1.05;margin:0;font-variation-settings:"opsz" 72,"SOFT" 40}
.up-next-team{font-size:14px;font-weight:600;margin:-4px 0 0}
.rule-box{background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-s);padding:12px 14px;text-align:left}
.rule-box strong{display:block;font-size:15px;margin-bottom:4px}
.rule-box p{font-size:13.5px;color:var(--ink-2);line-height:1.45;margin:0}
.recap{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:14px 16px}
.recap h3{margin:0 0 8px;font-size:12px;color:var(--mute);text-transform:uppercase;letter-spacing:.08em;font-weight:600}
.recap-list{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:6px}
.recap-list li,.found-list li{font-size:13.5px;padding:4px 10px;border-radius:var(--r-pill);background:color-mix(in oklab, var(--pos) 16%, var(--surface));border:1px solid color-mix(in oklab, var(--pos) 40%, transparent)}
.recap-list li.none{background:none;border-color:var(--line);color:var(--mute);font-style:italic}
.recap-passed{margin:10px 0 0;font-size:13.5px;color:var(--gold)}
.gong{border-color:var(--gold);background:color-mix(in oklab, var(--gold) 14%, var(--surface))}

/* --- scores --- */
.scores{display:flex;flex-direction:column;gap:8px}
.score-row{display:grid;grid-template-columns:1fr auto auto;align-items:center;gap:6px 12px;background:var(--surface);border:1px solid var(--line);border-left:4px solid var(--tc);border-radius:var(--r-s);padding:11px 14px}
.score-row.leader{background:color-mix(in oklab, var(--acc) 12%, var(--surface))}
.score-name{font-weight:700;color:var(--tc);font-size:15px}
.score-row.active .score-name::after{content:" ●";color:var(--gold)}
.score-detail{font-size:12.5px;color:var(--mute);font-variant-numeric:tabular-nums}
.score-total{font-family:var(--font-d);font-size:24px;font-weight:700;font-variant-numeric:tabular-nums;min-width:2ch;text-align:right}
.score-players{grid-column:1/-1;display:flex;flex-wrap:wrap;gap:5px;font-size:12.5px}
.amend{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-s);padding:10px 14px;font-size:14px}
.amend summary{cursor:pointer;color:var(--ink-2)}
.amend-list{display:flex;flex-direction:column;gap:6px;margin:10px 0}
.amend-list label{display:flex;align-items:center;gap:10px}
.amend-list input[type=checkbox]{appearance:auto;width:18px;height:18px;min-height:0;padding:0}
.amend-list small{color:var(--mute);margin-left:auto}

/* --- tour en cours --- */
.timer-wrap{display:flex;flex-direction:column;align-items:center;gap:8px;margin-top:4px}
.timer{font-family:var(--font-d);font-size:56px;font-weight:700;font-variant-numeric:tabular-nums;line-height:1;letter-spacing:-.03em;color:var(--ink)}
.timer.pre{color:var(--mute)}
.timer.warn{color:var(--gold)}
.timer.crit{color:var(--neg);animation:pump .5s ease-in-out infinite}
@keyframes pump{50%{transform:scale(1.09)}}
.timer-bar{width:100%;height:6px;background:var(--surface-2);border-radius:var(--r-pill);overflow:hidden}
.timer-bar-fill{height:100%;width:100%;background:var(--acc);transition:width .25s linear,background .3s}
.timer-bar-fill.pre{background:var(--line)}
.timer-bar-fill.warn{background:var(--gold)}
.timer-bar-fill.crit{background:var(--neg)}
.game-card{min-height:210px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;padding:26px 20px;background:linear-gradient(165deg, oklch(0.985 0.015 85), oklch(0.93 0.025 80));border:1px solid oklch(0.82 0.04 80);border-radius:22px;box-shadow:0 18px 40px -24px oklch(0 0 0/.8);text-align:center}
.game-card.flash{animation:cardflash .28s ease}
@keyframes cardflash{from{transform:scale(.96);opacity:.4}}
.game-card-name{font-family:var(--font-d);font-size:clamp(28px,8vw,42px);font-weight:700;line-height:1.1;letter-spacing:-.02em;color:oklch(0.20 0.03 50);font-variation-settings:"opsz" 72,"SOFT" 40}
.game-card-diff{font-size:12px;color:oklch(0.55 0.08 60)}
.game-card.mini{min-height:0;padding:12px 16px;gap:2px;border-radius:14px}
.game-card.mini .game-card-name{font-size:clamp(19px,5.5vw,27px)}
.game-card.mini .game-card-diff{display:none}
.play-actions{display:grid;grid-template-columns:1fr 1.6fr;gap:10px}
.btn.pass{background:var(--surface-2);color:var(--ink);padding:20px 12px;min-height:64px;font-size:16px}
.btn.guess{background:var(--pos);border-color:var(--pos);color:oklch(0.20 0.05 160);padding:20px 12px;min-height:64px;font-size:18px;font-weight:700}
.listen-card{min-height:200px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;background:var(--surface);border:1px solid var(--line);border-radius:22px;padding:26px 20px;text-align:center;box-shadow:0 12px 30px -22px oklch(0 0 0/.7)}
.listen-who{font-size:16px;margin:0}
.listen-who strong{font-family:var(--font-d);font-size:26px;display:block;margin-bottom:2px;letter-spacing:var(--track)}
.listen-team{font-size:14px;font-weight:600;margin:0}
.listen-rule{font-size:13.5px;color:var(--ink-2);max-width:30ch;line-height:1.5;margin:0}
.pulse{width:54px;height:54px;border-radius:50%;background:color-mix(in oklab, var(--acc) 30%, transparent);animation:pulse 1.6s ease-in-out infinite}
@keyframes pulse{0%,100%{transform:scale(.85);opacity:.5}50%{transform:scale(1.12);opacity:1}}
.listen-card.mini{min-height:0;padding:12px 16px;gap:2px;border-radius:14px}
.listen-card.mini .pulse,.listen-card.mini .listen-rule{display:none}
.listen-card.mini .listen-who strong{font-size:19px;display:inline}
.audience-foot{display:flex;flex-direction:column;gap:10px}
.found-strip{display:flex;align-items:center;gap:16px;justify-content:center;color:var(--mute);font-size:13px;flex-wrap:wrap}
.tally{display:flex;align-items:baseline;gap:6px}
.tally strong{font-family:var(--font-d);font-size:24px;font-weight:700;font-variant-numeric:tabular-nums;color:var(--ink)}
.tally.ok strong{color:var(--pos)}
.tally.pass strong{color:var(--gold)}
.tally.pass.bump{animation:bump .45s ease}
@keyframes bump{35%{transform:scale(1.22)}}
.found-list{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:6px;justify-content:center}
.found-list li{animation:pop .25s var(--ease)}

/* --- dessin --- */
.sab-draw{display:flex;flex-direction:column;gap:8px}
#sab-canvas{width:100%;aspect-ratio:4/3;background:#fdfdfb;border-radius:14px;border:1px solid var(--line);touch-action:none;display:block;cursor:crosshair;box-shadow:0 12px 30px -22px oklch(0 0 0/.7)}
.sab-draw.readonly #sab-canvas{cursor:default}
.swatches{display:flex;flex-wrap:wrap;gap:5px;align-items:center;justify-content:center}
.swatches .sw{width:28px;height:28px;border-radius:50%;border:2px solid transparent;padding:0;cursor:pointer;box-shadow:inset 0 0 0 1px oklch(0 0 0/.25)}
.swatches .sw.on{border-color:var(--ink);transform:scale(1.15)}
.swatches input[type=color]{width:30px;height:30px;padding:0;border:0;background:none;min-height:0;cursor:pointer}
.tools{justify-content:center}
.tools .btn.on{background:var(--acc);color:var(--on-acc);border-color:var(--acc)}
.gallery-wrap h3{font-size:12px;color:var(--mute);margin:4px 0 0;font-weight:600;text-transform:uppercase;letter-spacing:.08em}
.gallery{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:8px}
.gallery figure{margin:0;background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-s);overflow:hidden}
.gallery canvas{width:100%;display:block;background:#fff}
.gallery figcaption{padding:6px 8px;font-size:13px;font-weight:600}
.gallery figcaption small{display:block;color:var(--mute);font-weight:400}
.gallery.missed figure{border-color:var(--neg)}

/* --- réactions et gribouillages latéraux --- */
.sab-react{position:fixed;left:0;right:0;bottom:max(10px,env(safe-area-inset-bottom));z-index:25;display:flex;justify-content:center;gap:4px;padding:6px 10px;pointer-events:none;flex-wrap:wrap}
.react-btn{pointer-events:auto;font:inherit;font-size:22px;width:40px;height:40px;border-radius:50%;border:1px solid var(--line);background:color-mix(in oklab, var(--surface) 90%, transparent);cursor:pointer;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}
.react-btn.pencil{font-size:18px}
.react-btn.pencil.on{background:var(--acc);border-color:var(--acc);box-shadow:0 0 0 3px color-mix(in oklab, var(--acc) 35%, transparent)}
.react-layer{position:fixed;inset:0;pointer-events:none;z-index:24;overflow:hidden}
.react-float{position:absolute;bottom:12vh;font-size:40px;line-height:1;will-change:transform,opacity}
.react-float .who{position:absolute;right:-6px;bottom:-4px;font-size:11px;font-weight:700;background:var(--ink);color:var(--bg);padding:2px 6px;border-radius:var(--r-pill)}
.doodle-canvas{position:fixed;inset:0;width:100vw;height:100vh;z-index:23;pointer-events:none;clip-path:polygon(0 0,25% 0,25% 100%,75% 100%,75% 0,100% 0,100% 100%,0 100%)}
body.doodling .doodle-canvas{pointer-events:auto;cursor:crosshair;touch-action:none;background:linear-gradient(90deg, color-mix(in oklab, var(--acc) 14%, transparent) 0 25%, transparent 25% 75%, color-mix(in oklab, var(--acc) 14%, transparent) 75%)}
.screen.play.sab{padding-bottom:118px}

.chips label.chip-jv:has(:checked){background:color-mix(in oklab, oklch(0.85 0.2 142) 22%, var(--surface));border-color:oklch(0.85 0.2 142);color:oklch(0.9 0.14 130)}
[data-theme="light"] .chips label.chip-jv:has(:checked){border-color:oklch(0.51 0.155 148);color:oklch(0.44 0.13 145);background:oklch(0.94 0.045 150)}

/* ============================ jeu : Undercover ============================
   Dossier confidentiel : encre bleu-noir, papier kraft, tampon rouge, machine à écrire. */
[data-game="undercover"]{
  --bg:        oklch(0.170 0.018 255);
  --surface:   oklch(0.225 0.022 255);
  --surface-2: oklch(0.275 0.026 255);
  --line:      oklch(0.335 0.028 255);
  --ink:       oklch(0.955 0.012 85);
  --ink-2:     oklch(0.790 0.020 80);
  --mute:      oklch(0.620 0.025 250);
  --acc:       oklch(0.640 0.205 27);
  --acc-soft:  oklch(0.780 0.130 35);
  --on-acc:    oklch(0.985 0.010 80);
  --pos:       oklch(0.820 0.130 160);
  --neg:       oklch(0.680 0.200 27);
  --gold:      oklch(0.840 0.110 80);
  --glow: 0.12;
  --r: 6px; --r-s: 5px; --r-pill: 999px;
  --font-d: "Special Elite", "Courier New", monospace;
  --track: 0;
  --kraft: oklch(0.830 0.060 78);
  --kraft-2: oklch(0.760 0.070 72);
  --kraft-ink: oklch(0.250 0.030 60);
}
[data-theme="light"][data-game="undercover"]{
  --bg:        oklch(0.950 0.012 85);
  --surface:   oklch(0.990 0.006 85);
  --surface-2: oklch(0.925 0.016 82);
  --line:      oklch(0.850 0.020 80);
  --ink:       oklch(0.220 0.025 255);
  --ink-2:     oklch(0.420 0.025 255);
  --mute:      oklch(0.560 0.025 250);
  --acc:       oklch(0.540 0.200 27);
  --acc-soft:  oklch(0.470 0.170 27);
  --on-acc:    oklch(0.99 0.010 80);
  --pos:       oklch(0.520 0.120 160);
  --neg:       oklch(0.520 0.190 27);
  --gold:      oklch(0.600 0.110 80);
  --glow: 0.08;
}
[data-game="undercover"] .banner,[data-game="undercover"] h1{font-family:var(--font-d);font-weight:400}

/* carte du salon */
.g-undercover .gname{font-family:"Special Elite","Courier New",monospace;font-weight:400;letter-spacing:.02em;color:oklch(0.72 0.19 27)}
[data-theme="light"] .g-undercover .gname{color:oklch(0.52 0.20 27)}
.g-undercover{background:oklch(0.215 0.022 255);border-color:oklch(0.32 0.03 255)}
.g-undercover[aria-pressed="true"]{border-color:oklch(0.64 0.2 27);background:oklch(0.26 0.03 255)}
[data-theme="light"] .g-undercover{background:oklch(0.97 0.012 85);border-color:oklch(0.87 0.02 80)}
[data-theme="light"] .g-undercover[aria-pressed="true"]{border-color:oklch(0.54 0.2 27);background:oklch(0.94 0.03 60)}
.dossier{position:relative;width:48px;height:36px;border-radius:3px;background:oklch(0.80 0.065 78);display:block;margin-top:6px;box-shadow:0 6px 12px -6px oklch(0 0 0/.6)}
.dossier::before{content:"";position:absolute;left:4px;top:-6px;width:18px;height:8px;border-radius:3px 3px 0 0;background:oklch(0.74 0.07 72)}
.dossier::after{content:"TOP";position:absolute;left:50%;top:50%;transform:translate(-50%,-50%) rotate(-14deg);font:10px/1 "Special Elite","Courier New",monospace;letter-spacing:.08em;color:oklch(0.55 0.2 27);border:1.5px solid oklch(0.55 0.2 27);padding:2px 4px;border-radius:2px}
.gcard[aria-pressed="true"] .dossier{animation:stamp 2.8s var(--ease) infinite}
@keyframes stamp{0%,70%,100%{transform:rotate(0)}78%{transform:rotate(-4deg) translateY(-2px)}86%{transform:rotate(2deg)}}
.field.row input.tick{appearance:auto;width:22px;height:22px;min-height:0;padding:0;accent-color:var(--acc)}

/* partie */
.uc-head{display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap}
.uc-title{font-family:var(--font-d);font-weight:400;font-size:26px;line-height:1.15;margin:4px 0 0}
.uc-label{font:600 11px/1 var(--font);letter-spacing:.16em;text-transform:uppercase;color:inherit;opacity:.7;margin:0}
.uc-big{font-family:var(--font-d);font-size:34px;line-height:1.1;margin:0;word-break:break-word}
.uc-file{position:relative;font:inherit;text-align:left;width:100%;background:var(--kraft);color:var(--kraft-ink);border:0;border-radius:4px 10px 10px 10px;padding:26px 20px 20px;display:flex;flex-direction:column;gap:10px;box-shadow:0 18px 36px -22px oklch(0 0 0/.8), inset 0 0 0 1px oklch(0 0 0/.08)}
.uc-file::before{content:"";position:absolute;left:0;top:-12px;width:96px;height:14px;border-radius:6px 6px 0 0;background:var(--kraft-2)}
.uc-file .fine{color:oklch(0.38 0.035 60)}
.uc-secret{cursor:pointer;min-height:170px;justify-content:center;transition:transform .15s var(--ease)}
.uc-secret:active{transform:scale(.985)}
.uc-secret.open{background:oklch(0.93 0.035 85)}
.uc-secret.small{min-height:0;padding:18px 16px 14px}
.uc-secret.small .uc-big{font-size:24px}
.uc-stamp{display:inline-block;align-self:flex-start;font:15px/1 "Special Elite","Courier New",monospace;letter-spacing:.06em;text-transform:uppercase;padding:5px 9px;border:2px solid currentColor;border-radius:3px;transform:rotate(-4deg)}
.uc-stamp.uc-civil{color:oklch(0.52 0.11 160)}
.uc-stamp.uc-undercover{color:oklch(0.56 0.21 27)}
.uc-stamp.uc-white{color:oklch(0.50 0.03 255)}
.uc-elim .uc-stamp{font-size:20px;margin-top:4px;animation:pop .45s var(--ease)}
.uc-roster{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}
.uc-roster li{display:flex;justify-content:space-between;align-items:center;gap:10px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-s);padding:10px 14px;font-size:15px}
.uc-roster li>span:last-child{color:var(--mute);font-variant-numeric:tabular-nums}
.uc-roster li.out{opacity:.6}
.uc-roster li.out .uc-who{color:var(--mute)}
.uc-roster li.off{opacity:.45}
.uc-roster .uc-who{display:flex;align-items:center;gap:10px;flex-wrap:wrap;color:var(--ink)}
.uc-roster .uc-stamp{font-size:11px;padding:3px 6px;transform:none}
.uc-order{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:6px;counter-reset:uc}
.uc-order li{counter-increment:uc;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-pill);padding:6px 12px 6px 8px;font-size:14px;color:var(--ink-2)}
.uc-order li::before{content:counter(uc);display:inline-grid;place-items:center;width:20px;height:20px;border-radius:50%;background:var(--surface-2);font-size:11px;margin-right:6px}
.uc-order li.done{opacity:.45}
.uc-order li.now{border-color:var(--acc);color:var(--ink);background:color-mix(in oklab, var(--acc) 16%, var(--surface))}
.uc-order li.now::before{background:var(--acc);color:var(--on-acc)}
.uc-vote{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.uc-target{font:inherit;color:var(--ink);background:var(--surface);border:1px solid var(--line);border-radius:var(--r-s);padding:16px 12px;min-height:70px;display:flex;flex-direction:column;align-items:flex-start;gap:4px;cursor:pointer;text-align:left;transition:transform .12s var(--ease)}
.uc-target b{font-size:17px}
.uc-target small{color:var(--mute);font-size:12px;min-height:14px}
.uc-target:active{transform:scale(.97)}
.uc-target.on{border-color:var(--acc);background:color-mix(in oklab, var(--acc) 20%, var(--surface));box-shadow:inset 0 0 0 1px var(--acc)}
.uc-target:disabled{opacity:.3;cursor:default}
.uc-guess{display:flex;gap:8px}
.uc-guess input{flex:1;min-width:0}
.uc-verdict{background:var(--surface);border:1px solid var(--line);border-top:4px solid var(--acc);border-radius:var(--r);padding:18px;display:flex;flex-direction:column;gap:8px;text-align:center;align-items:center}
.uc-verdict.civils{border-top-color:var(--pos)}
.uc-words{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.uc-words>div{background:var(--kraft);color:var(--kraft-ink);border-radius:var(--r-s);padding:12px 14px;display:flex;flex-direction:column;gap:6px}
.uc-words b{font-family:var(--font-d);font-weight:400;font-size:22px;line-height:1.1}
.uc-scores{display:flex;flex-wrap:wrap;gap:6px 14px;align-items:baseline;font-size:14px;color:var(--ink-2);border-top:1px dashed var(--line);padding-top:12px}
.uc-scores .uc-label{width:100%;color:var(--mute)}
.uc-scores b{color:var(--ink);font-variant-numeric:tabular-nums}

/* ============================ jeu : Boussole ============================
   Cartographie : bleu profond, turquoise de carte marine, repères orange. */
[data-game="geo"]{
  --bg:        oklch(0.180 0.030 225);
  --surface:   oklch(0.235 0.036 225);
  --surface-2: oklch(0.290 0.040 225);
  --line:      oklch(0.350 0.042 225);
  --ink:       oklch(0.960 0.012 200);
  --ink-2:     oklch(0.800 0.030 205);
  --mute:      oklch(0.630 0.035 215);
  --acc:       oklch(0.800 0.135 190);
  --acc-soft:  oklch(0.880 0.090 190);
  --on-acc:    oklch(0.200 0.045 225);
  --pos:       oklch(0.830 0.140 150);
  --neg:       oklch(0.700 0.190 25);
  --gold:      oklch(0.860 0.140 85);
  --glow: 0.14;
  --r: 14px; --r-s: 10px; --r-pill: 999px;
  --font-d: "Space Grotesk", "Instrument Sans", sans-serif;
  --track: -0.02em;
}
[data-theme="light"][data-game="geo"]{
  --bg:        oklch(0.965 0.012 210);
  --surface:   oklch(0.995 0.005 210);
  --surface-2: oklch(0.930 0.020 210);
  --line:      oklch(0.870 0.025 210);
  --ink:       oklch(0.220 0.040 225);
  --ink-2:     oklch(0.420 0.035 220);
  --mute:      oklch(0.560 0.030 215);
  --acc:       oklch(0.550 0.110 200);
  --acc-soft:  oklch(0.450 0.100 205);
  --on-acc:    oklch(0.990 0.010 210);
  --pos:       oklch(0.520 0.120 155);
  --neg:       oklch(0.540 0.190 25);
  --gold:      oklch(0.620 0.120 80);
  --glow: 0.08;
}
[data-game="geo"] h1,[data-game="geo"] .banner{font-family:var(--font-d);font-weight:700}

/* carte du salon */
.g-geo .gname{font-family:"Space Grotesk","Instrument Sans",sans-serif;font-weight:700;letter-spacing:-.03em;color:oklch(0.80 0.135 190)}
[data-theme="light"] .g-geo .gname{color:oklch(0.50 0.11 200)}
.g-geo{background:oklch(0.215 0.034 225);border-color:oklch(0.32 0.04 225)}
.g-geo[aria-pressed="true"]{border-color:oklch(0.80 0.135 190);background:oklch(0.26 0.045 222)}
[data-theme="light"] .g-geo{background:oklch(0.97 0.012 210);border-color:oklch(0.87 0.025 210)}
[data-theme="light"] .g-geo[aria-pressed="true"]{border-color:oklch(0.55 0.11 200);background:oklch(0.94 0.03 200)}
.compass{position:relative;display:block;width:46px;height:46px;border-radius:50%;border:3px solid oklch(0.80 0.135 190);box-shadow:inset 0 0 0 3px oklch(0 0 0/.18)}
.compass::before{content:"";position:absolute;left:50%;top:50%;width:10px;height:32px;transform:translate(-50%,-50%) rotate(35deg);clip-path:polygon(50% 0,100% 50%,50% 100%,0 50%);background:linear-gradient(oklch(0.72 0.19 35) 0 50%, oklch(0.92 0.02 210) 50% 100%)}
.compass::after{content:"";position:absolute;left:50%;top:50%;width:6px;height:6px;border-radius:50%;transform:translate(-50%,-50%);background:oklch(0.20 0.04 225)}
[data-theme="light"] .compass{border-color:oklch(0.55 0.11 200)}
.gcard[aria-pressed="true"] .compass::before{animation:needle 3.2s var(--ease) infinite}
@keyframes needle{0%,100%{transform:translate(-50%,-50%) rotate(35deg)}40%{transform:translate(-50%,-50%) rotate(-25deg)}70%{transform:translate(-50%,-50%) rotate(12deg)}}

/* partie */
.screen.play.geo{gap:10px}
.geo-hud{display:flex;flex-direction:column;gap:2px}
.geo-hud-row{display:flex;justify-content:space-between;align-items:baseline;gap:10px}
.geo-total{font-family:var(--font-d);font-weight:700;font-size:15px;font-variant-numeric:tabular-nums;color:var(--acc)}
.geo-timer{font-family:var(--font-d);font-weight:700;font-size:30px;line-height:1;font-variant-numeric:tabular-nums}
.geo-timer.hot{color:var(--neg);animation:tick 1s steps(2) infinite}
.geo-stage{position:relative;display:flex;flex-direction:column;gap:8px;margin:0 -20px}
#geo-pano{position:relative;height:calc(100dvh - 350px);min-height:240px;background:oklch(0.12 0.02 225);overflow:hidden}
#geo-pano .geo-missing{padding:40px 20px}
#geo-map{position:relative;height:200px;background:var(--surface-2);z-index:1;overflow:hidden;isolation:isolate;transition:height .25s var(--ease)}
.geo-bigmap #geo-pano{height:30dvh;min-height:160px}
.geo-bigmap #geo-map{height:calc(100dvh - 30dvh - 290px);min-height:240px}
.revealing #geo-map{height:calc(100dvh - 360px);min-height:300px}
.geo-actions{display:grid;grid-template-columns:1fr 1.4fr;gap:10px}
.geo-actions .geo-toggle{font-size:14px}
.geo-icon{background:none;border:0}
.geo-me{display:block;width:26px;height:26px;border-radius:50% 50% 50% 0;transform:rotate(-45deg);background:var(--acc);border:3px solid #fff;box-shadow:0 4px 10px oklch(0 0 0/.45)}
.geo-truth{display:block;width:26px;height:26px;border-radius:50%;background:#fff;border:6px solid oklch(0.20 0.04 225);box-shadow:0 0 0 4px oklch(1 0 0/.55),0 4px 12px oklch(0 0 0/.5);animation:pulse-truth 1.6s ease-in-out infinite}
@keyframes pulse-truth{50%{box-shadow:0 0 0 11px oklch(1 0 0/.2),0 4px 12px oklch(0 0 0/.5)}}
.leaflet-tooltip.geo-tip{background:oklch(0.20 0.04 225);color:#fff;border:0;border-radius:6px;padding:2px 7px;font:600 12px/1.3 "Instrument Sans",system-ui,sans-serif;box-shadow:0 2px 8px oklch(0 0 0/.35)}
.leaflet-tooltip.geo-tip::before{border-top-color:oklch(0.20 0.04 225)}
.geo-results{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px;counter-reset:geo}
.geo-results li{counter-increment:geo;display:grid;grid-template-columns:22px 12px 1fr auto auto;align-items:center;gap:10px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-s);padding:10px 14px;font-size:15px}
.geo-results li::before{content:counter(geo);font-family:var(--font-d);font-weight:700;color:var(--mute);font-size:14px}
.geo-results li i{width:12px;height:12px;border-radius:50%;box-shadow:0 0 0 2px #fff}
.geo-results li span{color:var(--ink-2);font-variant-numeric:tabular-nums;font-size:14px}
.geo-results li em{font-style:normal;font-family:var(--font-d);font-weight:700;color:var(--acc);font-variant-numeric:tabular-nums;min-width:56px;text-align:right}
.geo-results li.none{opacity:.55}
.geo-scores{display:flex;flex-wrap:wrap;gap:6px 14px;align-items:baseline;font-size:14px;color:var(--ink-2);border-top:1px dashed var(--line);padding-top:12px}
.geo-scores .eyebrow{width:100%}
.geo-scores b{color:var(--ink);font-variant-numeric:tabular-nums}
#geo-bar{display:flex;flex-direction:column;gap:10px}
#geo-bar a{color:var(--acc)}

/* sur ordinateur : image plein écran, carte en bas à droite qui grandit au survol, comme GeoGuessr */
@media (min-width: 900px){
  #s-geo{max-width:1240px}
  .geo-stage{margin:0}
  #geo-pano{height:calc(100dvh - 210px);border-radius:var(--r)}
  #geo-map{position:absolute;left:14px;bottom:14px;width:340px;height:230px;border-radius:var(--r-s);box-shadow:0 12px 30px oklch(0 0 0/.45);transition:width .25s var(--ease),height .25s var(--ease)}
  #geo-map:hover,.geo-bigmap #geo-map{width:600px;height:440px}
  .geo-bigmap #geo-pano{height:calc(100dvh - 210px)}
  .revealing #geo-map,.revealing #geo-map:hover{position:relative;left:auto;right:auto;bottom:auto;width:100%;height:calc(100dvh - 330px);box-shadow:none;border-radius:var(--r)}
  #geo-bar{max-width:540px;margin:0 auto;width:100%}
}

/* Décennies : sur ordinateur, la frise entière tient sur plusieurs lignes, plus rien à faire défiler */
@media (hover: hover) and (pointer: fine){
  .timeline{flex-wrap:wrap;overflow:visible;margin:0;padding:10px 0 12px;row-gap:16px;scroll-snap-type:none}
  .slot:not(.disabled):hover{border-color:var(--acc);color:var(--acc-soft);background:color-mix(in oklab, var(--acc) 10%, transparent)}
}

/* Sprint : case Animés */
.chips label.chip-anime:has(:checked){background:color-mix(in oklab, oklch(0.78 0.16 350) 22%, var(--surface));border-color:oklch(0.78 0.16 350);color:oklch(0.88 0.1 350)}
[data-theme="light"] .chips label.chip-anime:has(:checked){border-color:oklch(0.58 0.19 355);color:oklch(0.48 0.17 355);background:oklch(0.95 0.035 350)}

/* Undercover : indices écrits */
.uc-clue-form{display:flex;gap:8px}
.uc-clue-form input{flex:1;min-width:0}
.uc-said{display:block;font-family:var(--font-d);font-size:14px;color:var(--ink-2);line-height:1.3;word-break:break-word}
.uc-recap{display:flex;flex-direction:column;gap:6px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:12px 14px}
.uc-recap .uc-label{color:var(--mute);margin-bottom:2px}
.uc-recap-row{display:grid;grid-template-columns:minmax(72px,auto) 1fr;gap:12px;align-items:baseline;font-size:14px}
.uc-recap-row span{font-family:var(--font-d);color:var(--ink);word-break:break-word}
.uc-recap-row.out{opacity:.55}

/* ============================ jeu : Chromo ============================
   Tapis de jeu vert profond, cartes bien vives, jaune d'accent, police ronde Lilita One. */
[data-game="chromo"]{
  --bg:        oklch(0.215 0.045 162);
  --surface:   oklch(0.265 0.050 162);
  --surface-2: oklch(0.315 0.055 162);
  --line:      oklch(0.380 0.055 162);
  --ink:       oklch(0.970 0.012 110);
  --ink-2:     oklch(0.830 0.030 140);
  --mute:      oklch(0.680 0.040 150);
  --acc:       oklch(0.860 0.170 92);
  --acc-soft:  oklch(0.920 0.100 95);
  --on-acc:    oklch(0.230 0.050 80);
  --pos:       oklch(0.830 0.140 150);
  --neg:       oklch(0.660 0.210 27);
  --gold:      oklch(0.860 0.170 92);
  --glow: 0.14;
  --r: 16px; --r-s: 12px; --r-pill: 999px;
  --font-d: "Lilita One", "Bricolage Grotesque", sans-serif;
  --track: 0;
}
[data-theme="light"][data-game="chromo"]{
  --bg:        oklch(0.955 0.025 150);
  --surface:   oklch(0.990 0.010 150);
  --surface-2: oklch(0.925 0.030 150);
  --line:      oklch(0.860 0.035 150);
  --ink:       oklch(0.240 0.040 160);
  --ink-2:     oklch(0.420 0.040 160);
  --mute:      oklch(0.560 0.035 160);
  --acc:       oklch(0.600 0.140 75);
  --acc-soft:  oklch(0.500 0.120 70);
  --on-acc:    oklch(0.990 0.010 90);
  --neg:       oklch(0.550 0.200 27);
  --glow: 0.08;
}
[data-game="chromo"] h1,[data-game="chromo"] .banner{font-family:var(--font-d);font-weight:400}

/* carte du salon */
.g-chromo .gname{font-family:"Lilita One","Bricolage Grotesque",sans-serif;font-weight:400;letter-spacing:.01em;color:oklch(0.86 0.17 92)}
[data-theme="light"] .g-chromo .gname{color:oklch(0.58 0.14 70)}
.g-chromo{background:oklch(0.235 0.05 162);border-color:oklch(0.34 0.055 162)}
.g-chromo[aria-pressed="true"]{border-color:oklch(0.86 0.17 92);background:oklch(0.28 0.06 160)}
[data-theme="light"] .g-chromo{background:oklch(0.97 0.02 150);border-color:oklch(0.87 0.03 150)}
[data-theme="light"] .g-chromo[aria-pressed="true"]{border-color:oklch(0.6 0.14 75);background:oklch(0.94 0.04 120)}
.fan{position:relative;display:block;width:54px;height:50px}
.fan i{position:absolute;left:14px;top:4px;width:26px;height:38px;border-radius:5px;border:2px solid #fff;box-shadow:0 2px 6px oklch(0 0 0/.4);transition:transform .4s var(--ease)}
.fan i:nth-child(1){background:oklch(0.56 0.16 255);transform:rotate(-22deg) translateX(-9px)}
.fan i:nth-child(2){background:oklch(0.84 0.17 90)}
.fan i:nth-child(3){background:oklch(0.60 0.22 27);transform:rotate(22deg) translateX(9px)}
.gcard[aria-pressed="true"] .fan i:nth-child(1){transform:rotate(-32deg) translateX(-13px)}
.gcard[aria-pressed="true"] .fan i:nth-child(3){transform:rotate(32deg) translateX(13px)}

/* les cartes */
.col-r{--cc:oklch(0.60 0.22 27)} .col-y{--cc:oklch(0.82 0.17 88)} .col-g{--cc:oklch(0.63 0.17 150)} .col-b{--cc:oklch(0.55 0.16 258)} .col-w{--cc:oklch(0.20 0.012 260)}
.ch-card{position:relative;width:60px;aspect-ratio:5/7.4;border-radius:9px;background:var(--cc);border:3px solid #fff;box-shadow:0 5px 12px oklch(0 0 0/.35);display:block;color:#fff;font-family:"Lilita One","Bricolage Grotesque",sans-serif;padding:0;cursor:pointer;overflow:hidden;transition:transform .16s var(--ease),opacity .2s,filter .2s,box-shadow .2s;flex:0 0 auto}
.ch-oval{position:absolute;inset:15% 9%;border-radius:50%;background:#fff;transform:rotate(-28deg);display:grid;place-items:center}
.ch-oval b{transform:rotate(28deg);color:var(--cc);font-size:25px;line-height:1;font-weight:400;position:relative;z-index:1;text-shadow:1px 1px 0 oklch(0 0 0/.18)}
.col-w .ch-oval b{color:oklch(0.2 0.01 260)}
.ch-corner{position:absolute;top:3px;left:5px;font-size:12px;line-height:1;color:#fff;text-shadow:0 1px 0 oklch(0 0 0/.35)}
.ch-corner.bottom{top:auto;left:auto;bottom:3px;right:5px;transform:rotate(180deg)}
.ch-wheel{width:72%;aspect-ratio:1;border-radius:50%;transform:rotate(28deg);background:conic-gradient(oklch(0.60 0.22 27) 0 25%, oklch(0.82 0.17 88) 0 50%, oklch(0.63 0.17 150) 0 75%, oklch(0.55 0.16 258) 0)}
.ch-wheel.small{position:absolute;width:50%;opacity:.95}
.ch-card.big{width:92px;border-width:4px;border-radius:12px}
.ch-card.big .ch-oval b{font-size:38px}
.ch-card.big .ch-corner{font-size:16px;top:5px;left:7px}
.ch-card.big .ch-corner.bottom{top:auto;left:auto;bottom:5px;right:7px}
.ch-back{--cc:oklch(0.19 0.015 260)}
.ch-back .ch-oval{background:oklch(0.60 0.22 27)}
.ch-back .ch-oval b{transform:none;color:oklch(0.86 0.17 92);font-size:19px;text-shadow:2px 2px 0 oklch(0.2 0.02 260)}
.ch-back.can{box-shadow:0 0 0 3px var(--acc),0 5px 12px oklch(0 0 0/.35);animation:ch-breathe 1.6s ease-in-out infinite}
@keyframes ch-breathe{50%{transform:translateY(-3px)}}
.ch-card.pop{animation:ch-pop .38s var(--ease)}
@keyframes ch-pop{from{transform:translateY(-34px) rotate(-14deg) scale(.82);opacity:0}}

/* table et joueurs */
.ch-head{display:flex;justify-content:space-between;align-items:center}
.ch-dir{font-size:22px;color:var(--acc);line-height:1}
.ch-players{display:flex;gap:6px;overflow-x:auto;margin:0 -20px;padding:10px 20px 4px;scrollbar-width:none}
.ch-players::-webkit-scrollbar{display:none}
.ch-seat{position:relative;flex:0 0 auto;min-width:86px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-s);padding:7px 11px;display:flex;flex-direction:column;gap:2px;transition:border-color .2s,box-shadow .2s}
.ch-seat.now{border-color:var(--acc);box-shadow:0 0 0 2px var(--acc)}
.ch-seat.me .ch-seat-name::after{content:" (toi)";color:var(--mute);font-weight:400}
.ch-seat.off{opacity:.45}
.ch-seat-name{font-size:13px;font-weight:600;white-space:nowrap}
.ch-seat-name small{color:var(--mute);font-weight:400}
.ch-seat-count{font-size:12.5px;color:var(--ink-2);font-variant-numeric:tabular-nums}
.ch-mini{display:inline-block;width:9px;height:13px;border-radius:2px;background:oklch(0.60 0.22 27);border:1.5px solid #fff;margin-right:5px;vertical-align:-2px}
.ch-flag{position:absolute;top:-9px;right:-4px;background:var(--acc);color:var(--on-acc);font:12px/1 "Lilita One",sans-serif;padding:3px 7px;border-radius:999px}
.ch-flag.warn{background:var(--neg);color:#fff}
.ch-table{--cc:var(--line);position:relative;display:flex;align-items:center;justify-content:center;gap:26px;padding:22px 18px 34px;border-radius:var(--r);border:1px solid var(--line);background:radial-gradient(ellipse at 50% 45%, color-mix(in oklab, var(--cc) 34%, var(--surface)), var(--surface) 72%);transition:background .3s}
.ch-color{position:absolute;left:0;right:0;bottom:9px;text-align:center;font:15px/1 "Lilita One",sans-serif;color:var(--ink);display:flex;align-items:center;justify-content:center;gap:7px}
.ch-dot{display:inline-block;width:13px;height:13px;border-radius:50%;background:var(--cc);box-shadow:0 0 0 2px #fff}
.ch-pending{background:var(--neg);color:#fff;border-radius:999px;padding:3px 9px;font-weight:400;animation:pop .35s var(--ease)}
.ch-status{text-align:center;font:20px/1.2 "Lilita One",sans-serif;margin:0;color:var(--ink-2)}
.ch-status.mine{color:var(--acc)}
.ch-actions{display:flex;flex-wrap:wrap;gap:8px;justify-content:center}
.ch-actions .btn{font-family:"Lilita One",sans-serif;font-weight:400;font-size:17px}
.btn.danger{background:var(--neg);border-color:var(--neg);color:#fff;animation:ch-breathe 1s ease-in-out infinite}
.ch-hand-title{text-align:center}
.ch-hand{display:flex;flex-wrap:wrap;gap:7px;justify-content:center;padding:6px 0 4px}
.ch-hand .ch-card.ok{transform:translateY(-7px);box-shadow:0 0 0 3px var(--acc),0 8px 16px oklch(0 0 0/.4)}
.ch-hand .ch-card.ok:active{transform:translateY(-2px) scale(.96)}
.ch-hand .ch-card.no{opacity:.42;filter:saturate(.55)}
.ch-hand .ch-card.drawn{outline:3px dashed var(--acc);outline-offset:2px}
.ch-hand.mini{justify-content:flex-start;gap:4px;padding:0}
.ch-hand.mini .ch-card{width:30px;border-width:2px;border-radius:5px;cursor:default;box-shadow:none}
.ch-hand.mini .ch-oval b{font-size:12px}
.ch-hand.mini .ch-corner{display:none}
.ch-log{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:3px;font-size:13px;color:var(--mute);text-align:center}
.ch-log li:first-child{color:var(--ink);font-size:14px}
.ch-picker{position:fixed;left:0;right:0;bottom:0;z-index:30;background:var(--surface);border-top:1px solid var(--line);padding:16px 20px calc(18px + env(safe-area-inset-bottom));box-shadow:0 -14px 34px oklch(0 0 0/.4);display:flex;flex-direction:column;gap:10px;align-items:center;animation:sheet-in .3s var(--ease)}
.ch-picker-title{font:20px/1 "Lilita One",sans-serif;margin:0}
.ch-picker-row{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;width:100%;max-width:500px}
.ch-swatch{min-height:68px;border-radius:14px;border:3px solid #fff;background:var(--cc);color:#fff;font:17px/1 "Lilita One",sans-serif;text-shadow:0 1px 3px oklch(0 0 0/.45);cursor:pointer;transition:transform .12s var(--ease)}
.ch-swatch:active{transform:scale(.94)}

/* fin de manche */
.ch-verdict{text-align:center;background:var(--surface);border:1px solid var(--line);border-top:4px solid var(--acc);border-radius:var(--r);padding:16px}
.ch-big{font:34px/1.1 "Lilita One",sans-serif;margin:6px 0 2px;color:var(--acc)}
.ch-hands{display:flex;flex-direction:column;gap:8px}
.ch-hand-row{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-s);padding:10px 12px;display:flex;flex-direction:column;gap:8px}
.ch-hand-row-head{display:flex;justify-content:space-between;align-items:baseline;font-size:15px}
.ch-hand-row-head span{color:var(--ink-2);font-variant-numeric:tabular-nums}
.ch-scores{display:flex;flex-wrap:wrap;gap:6px 14px;align-items:baseline;font-size:15px;color:var(--ink-2);border-top:1px dashed var(--line);padding-top:12px}
.ch-scores .eyebrow{width:100%}
.ch-scores b{color:var(--ink);font-variant-numeric:tabular-nums}
.ch-scores .lead{color:var(--acc)}
.ch-scores .lead b{color:var(--acc)}
.screen.play.chromo{padding-bottom:40px}
@media (min-width: 700px){ .ch-card{width:70px} .ch-card.big{width:110px} .ch-card.big .ch-oval b{font-size:46px} }

/* Chromo : retouches */
.ch-back .ch-oval b{font-size:13px;letter-spacing:.02em}
.ch-card.big.ch-back .ch-oval b{font-size:17px}
@media (min-width: 700px){ .ch-card.big.ch-back .ch-oval b{font-size:20px} }
.ch-oval.u b,.ch-corner.u{text-decoration:underline;text-decoration-thickness:2px;text-underline-offset:2px}

/* diagnostic réseau */
.diag-line{font-size:14px;line-height:1.5;margin:4px 0;word-break:break-word}
#btn-diag{margin-top:8px;align-self:flex-start}


/* ============================================================ Kems : tapis bordeaux, cartes ivoire, or */
[data-game="kems"]{
  --bg:        oklch(0.215 0.060 20);
  --surface:   oklch(0.270 0.065 20);
  --surface-2: oklch(0.320 0.068 20);
  --line:      oklch(0.390 0.070 22);
  --ink:       oklch(0.970 0.012 80);
  --ink-2:     oklch(0.840 0.030 60);
  --mute:      oklch(0.700 0.040 45);
  --acc:       oklch(0.850 0.150 85);
  --acc-soft:  oklch(0.910 0.100 88);
  --on-acc:    oklch(0.250 0.060 60);
  --pos:       oklch(0.830 0.140 150);
  --neg:       oklch(0.720 0.190 25);
  --gold:      oklch(0.850 0.150 85);
  --glow: 0.14;
  --r: 14px; --r-s: 10px; --r-pill: 999px;
  --font-d: "Alfa Slab One", "Bricolage Grotesque", serif;
  --track: 0;
  --t0: oklch(0.800 0.150 20);   /* Cœurs */
  --t1: oklch(0.840 0.070 240);  /* Piques */
}
[data-theme="light"][data-game="kems"]{
  --bg:        oklch(0.960 0.020 60);
  --surface:   oklch(0.990 0.008 80);
  --surface-2: oklch(0.930 0.025 60);
  --line:      oklch(0.870 0.035 50);
  --ink:       oklch(0.250 0.060 25);
  --ink-2:     oklch(0.430 0.060 25);
  --mute:      oklch(0.570 0.050 30);
  --acc:       oklch(0.600 0.140 70);
  --acc-soft:  oklch(0.500 0.120 65);
  --on-acc:    oklch(0.990 0.010 90);
  --neg:       oklch(0.560 0.200 25);
  --glow: 0.08;
  --t0: oklch(0.560 0.200 22);
  --t1: oklch(0.480 0.090 245);
}
[data-game="kems"] h1,[data-game="kems"] .banner{font-family:var(--font-d);font-weight:400}
.g-kems .gname{font-family:"Alfa Slab One","Bricolage Grotesque",serif;font-weight:400;letter-spacing:0;color:oklch(0.86 0.14 85)}
[data-theme="light"] .g-kems .gname{color:oklch(0.56 0.15 45)}
.g-kems{background:oklch(0.245 0.06 20);border-color:oklch(0.35 0.065 22)}
.g-kems[aria-pressed="true"]{border-color:oklch(0.86 0.14 85);background:oklch(0.29 0.065 20)}
[data-theme="light"] .g-kems{background:oklch(0.975 0.015 50);border-color:oklch(0.88 0.03 40)}
[data-theme="light"] .g-kems[aria-pressed="true"]{border-color:oklch(0.6 0.14 70);background:oklch(0.95 0.03 60)}
.quad{position:relative;display:block;width:54px;height:52px}
.quad i{position:absolute;left:15px;top:6px;width:24px;height:34px;border-radius:4px;background:oklch(0.97 0.012 90);color:oklch(0.60 0.22 25);font:900 15px/34px "Alfa Slab One",serif;text-align:center;font-style:normal;box-shadow:0 2px 6px oklch(0 0 0/.45);transition:transform .45s var(--ease)}
.quad i:nth-child(1){transform:rotate(-30deg) translate(-13px,4px);color:oklch(0.2 0.02 260)}
.quad i:nth-child(2){transform:rotate(-10deg) translate(-4px,-1px)}
.quad i:nth-child(3){transform:rotate(10deg) translate(4px,-1px);color:oklch(0.2 0.02 260)}
.quad i:nth-child(4){transform:rotate(30deg) translate(13px,4px)}
.gcard[aria-pressed="true"] .quad i:nth-child(1){transform:rotate(-42deg) translate(-18px,6px)}
.gcard[aria-pressed="true"] .quad i:nth-child(2){transform:rotate(-14deg) translate(-6px,-3px)}
.gcard[aria-pressed="true"] .quad i:nth-child(3){transform:rotate(14deg) translate(6px,-3px)}
.gcard[aria-pressed="true"] .quad i:nth-child(4){transform:rotate(42deg) translate(18px,6px)}

/* choix des équipes dans le salon */
.km-pick{border:0;padding:0;margin:0;display:flex;flex-direction:column;gap:8px}
.km-pickrow{display:flex;align-items:center;justify-content:space-between;gap:10px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-s);padding:7px 8px 7px 12px}
.km-pickname{font-weight:600;font-size:15px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.km-seg{display:flex;gap:4px;flex:0 0 auto}
.km-segbtn{font:600 13px/1 var(--font);padding:9px 10px;border-radius:999px;border:1px solid var(--line);background:transparent;color:var(--mute);cursor:pointer;transition:background .15s,color .15s,border-color .15s}
.km-segbtn.t0.on{background:var(--t0,oklch(0.75 0.16 20));border-color:transparent;color:oklch(0.15 0.03 20)}
.km-segbtn.t1.on{background:var(--t1,oklch(0.8 0.07 240));border-color:transparent;color:oklch(0.15 0.03 240)}
.km-pickline{margin:0}
.km-pickline b{font-weight:700}
.km-pickline .t0{color:var(--t0,oklch(0.75 0.16 20))}
.km-pickline .t1{color:var(--t1,oklch(0.8 0.07 240))}

/* cartes */
.km-card{position:relative;width:72px;aspect-ratio:5/7.2;border-radius:8px;background:oklch(0.975 0.012 90);border:1px solid oklch(0.82 0.02 80);box-shadow:0 4px 12px oklch(0 0 0/.35);display:block;color:oklch(0.17 0.02 260);font-family:"Alfa Slab One","Bricolage Grotesque",serif;padding:0;cursor:pointer;overflow:hidden;transition:transform .16s var(--ease),box-shadow .2s,opacity .2s;flex:0 0 auto}
.km-corner{position:absolute;top:5px;left:6px;display:flex;flex-direction:column;align-items:center;line-height:1}
.km-corner b{font-size:15px;font-weight:400}
.km-corner i{font-style:normal;font-size:12px;margin-top:1px}
.km-corner.bottom{top:auto;left:auto;bottom:5px;right:6px;transform:rotate(180deg)}
.km-pip{position:absolute;inset:0;display:grid;place-items:center;font-size:34px;line-height:1;padding-top:4px;font-family:"Instrument Sans",system-ui,sans-serif}
.km-card .red{color:oklch(0.55 0.21 25)}
.km-card.sel{transform:translateY(-8px);box-shadow:0 0 0 3px var(--acc),0 10px 18px oklch(0 0 0/.4)}
.km-card.can:not(.sel){box-shadow:0 0 0 2px color-mix(in oklab, var(--acc) 55%, transparent),0 4px 12px oklch(0 0 0/.35)}
.km-card:active{transform:scale(.95)}
.km-card.pop{animation:km-pop .35s var(--ease)}
@keyframes km-pop{from{transform:translateY(-10px) scale(.92);opacity:.4}to{transform:none;opacity:1}}

/* tableau des scores */
.km-score{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:8px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:10px 12px}
.km-score-team{display:grid;grid-template-columns:1fr auto;gap:0 8px;align-items:center;min-width:0}
.km-score-team.t1{direction:rtl;text-align:right}
.km-score-team.t1>*{direction:ltr}
.km-score-name{font:15px/1.1 var(--font-d);white-space:nowrap}
.km-score-team.t0 .km-score-name{color:var(--t0)}
.km-score-team.t1 .km-score-name{color:var(--t1)}
.km-score-pts{grid-row:1/3;font:32px/1 var(--font-d);color:var(--ink);font-variant-numeric:tabular-nums}
.km-score-who{font-size:12px;color:var(--mute);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.km-score-team.mine .km-score-who{color:var(--ink-2)}
.km-score-mid{font:15px/1 var(--font-d);color:var(--mute);display:flex;flex-direction:column;align-items:center;gap:2px;padding:0 6px;border-left:1px dashed var(--line);border-right:1px dashed var(--line)}
.km-score-mid small{font:11px/1 var(--font);letter-spacing:.06em;text-transform:uppercase}

/* la table */
.km-seats{display:grid;grid-template-columns:1fr 1fr;gap:6px}
.km-seat{position:relative;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-s);padding:7px 8px;display:flex;flex-direction:column;gap:2px;min-width:0;border-top-width:3px;transition:opacity .2s}
.km-seat.t0{border-top-color:var(--t0)}
.km-seat.t1{border-top-color:var(--t1)}
.km-seat.off{opacity:.45}
.km-seat.pass{background:color-mix(in oklab, var(--surface) 70%, var(--bg))}
.km-seat-name{font-size:13px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.km-seat-name small{color:var(--mute);font-weight:400}
.km-seat-sub{font-size:11.5px;color:var(--mute);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.km-seat.me .km-seat-sub,.km-seat.mate .km-seat-sub{color:var(--acc)}
.km-seat-pass{position:absolute;top:-9px;right:-3px;background:var(--surface-2);border:1px solid var(--line);color:var(--ink-2);font:600 10.5px/1 var(--font);padding:3px 6px;border-radius:999px;letter-spacing:.04em}
.km-table{display:flex;justify-content:center;gap:8px;padding:18px 10px;border-radius:var(--r);border:1px solid var(--line);background:radial-gradient(ellipse at 50% 40%, color-mix(in oklab, var(--acc) 12%, var(--surface)), var(--surface) 75%)}
.km-status{text-align:center;margin:0;font-size:15px;color:var(--ink-2);min-height:1.4em}
.km-hand{display:flex;justify-content:center;gap:8px;padding:6px 0 2px;border-radius:var(--r)}
.km-hand.carre .km-card{box-shadow:0 0 0 2px var(--acc),0 0 18px color-mix(in oklab, var(--acc) 55%, transparent)}
.km-signal{text-align:center;margin:0 auto;font:16px/1.2 var(--font-d);color:var(--on-acc);background:var(--acc);padding:9px 16px;border-radius:999px;animation:pop .35s var(--ease);box-shadow:0 0 0 4px color-mix(in oklab, var(--acc) 30%, transparent)}
.km-calls{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.km-calls .btn{font-family:var(--font-d);font-weight:400;font-size:18px;letter-spacing:.01em;min-height:56px;padding-left:8px;padding-right:8px;white-space:normal;line-height:1.15}
.km-calls .btn.armed{animation:km-arm .5s var(--ease);font-size:14px;font-family:var(--font)}
@keyframes km-arm{from{transform:scale(.96)}to{transform:none}}
.km-actions{display:flex;flex-wrap:wrap;gap:8px;justify-content:center}
.km-actions .btn.on{background:var(--acc);color:var(--on-acc);border-color:transparent}
.km-log{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:3px;font-size:13px;color:var(--mute);text-align:center}
.km-log li:first-child{color:var(--ink-2);font-size:14px}

/* fin de donne */
.km-verdict{text-align:center;background:var(--surface);border:1px solid var(--line);border-top:4px solid var(--acc);border-radius:var(--r);padding:16px}
.km-verdict.t0{border-top-color:var(--t0)}
.km-verdict.t1{border-top-color:var(--t1)}
.km-big{font:34px/1.1 var(--font-d);margin:6px 0 4px;color:var(--acc)}
.km-verdict-text{margin:0;color:var(--ink-2);font-size:15px}
.km-verdict-pts{margin:8px 0 0;font-size:15px}
.km-team.t0{color:var(--t0)}
.km-team.t1{color:var(--t1)}
.km-reveal{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.km-reveal-row{background:var(--surface);border:1px solid var(--line);border-left:4px solid var(--line);border-radius:var(--r-s);padding:9px 10px;display:flex;flex-direction:column;gap:7px;min-width:0}
.km-reveal-row.t0{border-left-color:var(--t0)}
.km-reveal-row.t1{border-left-color:var(--t1)}
.km-reveal-row.carre{box-shadow:0 0 0 2px var(--acc)}
.km-reveal-head{display:flex;flex-direction:column;font-size:13.5px;gap:1px}
.km-reveal-head span{color:var(--mute);font-size:12px}
.km-reveal-row.carre .km-reveal-head span{color:var(--acc)}
.km-hand.mini{justify-content:flex-start;gap:3px;padding:0}
.km-hand.mini .km-card{width:32px;border-radius:4px;cursor:default;box-shadow:none}
.km-hand.mini .km-corner{top:2px;left:3px}
.km-hand.mini .km-corner b{font-size:10px}
.km-hand.mini .km-corner i{font-size:8px}
.km-hand.mini .km-corner.bottom{display:none}
.km-hand.mini .km-pip{font-size:15px;padding-top:8px}
.km-final{text-align:center;padding:8px 0 0}
.km-final .km-big{color:var(--acc)}
.screen.play.kems{padding-bottom:40px}
@media (min-width: 700px){ .km-card{width:92px} .km-corner b{font-size:19px} .km-corner i{font-size:15px} .km-pip{font-size:46px} .km-table{gap:14px;padding:24px} .km-hand{gap:14px} .km-reveal{grid-template-columns:repeat(4,1fr)} }


/* ============================================================ Camembert : plateau crème, six couleurs, Fredoka */
[data-game="camembert"]{
  --bg:        oklch(0.215 0.030 100);
  --surface:   oklch(0.270 0.032 100);
  --surface-2: oklch(0.320 0.034 100);
  --line:      oklch(0.390 0.036 100);
  --ink:       oklch(0.970 0.012 95);
  --ink-2:     oklch(0.840 0.030 95);
  --mute:      oklch(0.700 0.035 95);
  --acc:       oklch(0.800 0.160 60);
  --acc-soft:  oklch(0.880 0.110 65);
  --on-acc:    oklch(0.230 0.050 60);
  --pos:       oklch(0.830 0.140 150);
  --neg:       oklch(0.700 0.190 25);
  --gold:      oklch(0.850 0.150 90);
  --glow: 0.12;
  --r: 18px; --r-s: 12px; --r-pill: 999px;
  --font-d: "Fredoka", "Bricolage Grotesque", sans-serif;
  --track: 0;
  --c-geo: oklch(0.62 0.16 250); --c-fun: oklch(0.72 0.18 350); --c-hist: oklch(0.85 0.17 95);
  --c-art: oklch(0.60 0.15 305); --c-sci: oklch(0.70 0.17 145); --c-sport: oklch(0.72 0.18 45);
  --board: oklch(0.955 0.020 90); --board-ink: oklch(0.30 0.04 70);
}
[data-theme="light"][data-game="camembert"]{
  --bg:        oklch(0.960 0.022 95);
  --surface:   oklch(0.990 0.010 95);
  --surface-2: oklch(0.930 0.028 95);
  --line:      oklch(0.870 0.035 90);
  --ink:       oklch(0.250 0.040 80);
  --ink-2:     oklch(0.430 0.040 80);
  --mute:      oklch(0.570 0.040 80);
  --acc:       oklch(0.620 0.160 50);
  --acc-soft:  oklch(0.520 0.140 50);
  --on-acc:    oklch(0.990 0.010 90);
  --neg:       oklch(0.560 0.200 25);
  --glow: 0.07;
  --board: oklch(0.985 0.012 90);
}
[data-game="camembert"] h1,[data-game="camembert"] .banner{font-family:var(--font-d);font-weight:700}
.g-camembert .gname{font-family:"Fredoka","Bricolage Grotesque",sans-serif;font-weight:700;letter-spacing:0;color:oklch(0.82 0.16 60)}
[data-theme="light"] .g-camembert .gname{color:oklch(0.58 0.16 45)}
.g-camembert{background:oklch(0.25 0.03 100);border-color:oklch(0.35 0.035 100)}
.g-camembert[aria-pressed="true"]{border-color:oklch(0.82 0.16 60);background:oklch(0.29 0.035 100)}
[data-theme="light"] .g-camembert{background:oklch(0.975 0.018 95);border-color:oklch(0.88 0.03 90)}
[data-theme="light"] .g-camembert[aria-pressed="true"]{border-color:oklch(0.62 0.16 50);background:oklch(0.95 0.035 85)}
.cheese{position:relative;display:block;width:50px;height:50px;border-radius:50%;overflow:hidden;box-shadow:0 2px 6px oklch(0 0 0/.4);background:oklch(0.96 0.02 90)}
.cheese i{position:absolute;left:50%;top:50%;width:50%;height:50%;transform-origin:0 0;transition:transform .45s var(--ease)}
.cheese i:nth-child(1){background:oklch(0.62 0.16 250);transform:rotate(-90deg) skewX(-30deg)}
.cheese i:nth-child(2){background:oklch(0.72 0.18 350);transform:rotate(-30deg) skewX(-30deg)}
.cheese i:nth-child(3){background:oklch(0.85 0.17 95);transform:rotate(30deg) skewX(-30deg)}
.cheese i:nth-child(4){background:oklch(0.60 0.15 305);transform:rotate(90deg) skewX(-30deg)}
.cheese i:nth-child(5){background:oklch(0.70 0.17 145);transform:rotate(150deg) skewX(-30deg)}
.cheese i:nth-child(6){background:oklch(0.72 0.18 45);transform:rotate(210deg) skewX(-30deg)}
.gcard[aria-pressed="true"] .cheese{animation:spin 6s linear infinite}

/* joueurs */
.cm-players{display:flex;gap:6px;overflow-x:auto;margin:0 -20px;padding:6px 20px 4px;scrollbar-width:none}
.cm-players::-webkit-scrollbar{display:none}
.cm-player{flex:0 0 auto;display:flex;flex-direction:column;align-items:center;gap:3px;min-width:74px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-s);padding:8px 8px 6px;transition:border-color .2s,box-shadow .2s}
.cm-player.active{border-color:var(--acc);box-shadow:0 0 0 2px var(--acc)}
.cm-player.off{opacity:.45}
.cm-player-name{font-size:12.5px;font-weight:600;max-width:90px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cm-player.me .cm-player-name::after{content:" (toi)";color:var(--mute);font-weight:400}
.cm-player-count{font-size:11px;color:var(--mute);font-variant-numeric:tabular-nums}
.cm-cheese{display:block;filter:drop-shadow(0 1px 2px oklch(0 0 0/.3))}
.cm-cheese path{stroke:var(--board);stroke-width:1}
.cm-cheese .off{fill:var(--surface-2)}
.cm-cheese .on.c-geo{fill:var(--c-geo)} .cm-cheese .on.c-fun{fill:var(--c-fun)} .cm-cheese .on.c-hist{fill:var(--c-hist)}
.cm-cheese .on.c-art{fill:var(--c-art)} .cm-cheese .on.c-sci{fill:var(--c-sci)} .cm-cheese .on.c-sport{fill:var(--c-sport)}

/* plateau */
.cm-board-wrap{display:flex;justify-content:center}
.cm-board{width:100%;max-width:360px;height:auto;display:block}
.cm-ring{fill:var(--board);stroke:var(--line);stroke-width:26;opacity:.98}
.cm-sp circle{stroke:#fff;stroke-width:1.5}
.cm-sp.c-geo circle{fill:var(--c-geo)} .cm-sp.c-fun circle{fill:var(--c-fun)} .cm-sp.c-hist circle{fill:var(--c-hist)}
.cm-sp.c-art circle{fill:var(--c-art)} .cm-sp.c-sci circle{fill:var(--c-sci)} .cm-sp.c-sport circle{fill:var(--c-sport)}
.cm-sp.again circle{fill:oklch(0.55 0.02 90)}
.cm-sp.again text{fill:#fff;font:700 11px "Fredoka",sans-serif}
.cm-sp.hq .cm-sp-in{fill:#fff;opacity:.85}
.cm-halo{fill:none;stroke:var(--acc);stroke-width:4;animation:cm-halo 1s ease-in-out infinite}
@keyframes cm-halo{0%,100%{opacity:.45}50%{opacity:1}}
.cm-sp.target>circle:first-child{r:12;stroke-width:3}
.cm-sp.target.hq>circle:first-child{r:17}
.cm-token circle{fill:var(--tok);stroke:#fff;stroke-width:2;filter:drop-shadow(0 2px 2px oklch(0 0 0/.4))}
.cm-token text{fill:#fff;font:700 11px "Fredoka",sans-serif;pointer-events:none}
.cm-token.active circle{stroke:var(--acc);stroke-width:3}
.cm-token.off{opacity:.4}
.cm-token.p0,.cm-player.p0{--tok:oklch(0.55 0.19 25)} .cm-token.p1,.cm-player.p1{--tok:oklch(0.50 0.16 260)} .cm-token.p2,.cm-player.p2{--tok:oklch(0.55 0.15 150)}
.cm-token.p3,.cm-player.p3{--tok:oklch(0.60 0.16 320)} .cm-token.p4,.cm-player.p4{--tok:oklch(0.55 0.14 200)} .cm-token.p5,.cm-player.p5{--tok:oklch(0.60 0.17 60)}
.cm-token.p6,.cm-player.p6{--tok:oklch(0.45 0.10 300)} .cm-token.p7,.cm-player.p7{--tok:oklch(0.40 0.05 100)}
.cm-player{border-top:3px solid var(--tok)}
.cm-center{fill:var(--board-ink);font:700 26px "Fredoka",sans-serif}
.cm-center-sub{fill:var(--board-ink);opacity:.7;font:500 13px "Instrument Sans",sans-serif}
.cm-die{fill:#fff;stroke:var(--board-ink);stroke-width:2;filter:drop-shadow(0 3px 4px oklch(0 0 0/.35))}
.cm-die-n{fill:var(--board-ink);font:700 42px "Fredoka",sans-serif}
.cm-die-g{animation:cm-die .5s var(--ease)}
@keyframes cm-die{0%{transform:rotate(-25deg) scale(.6);transform-origin:50% 50%;opacity:0}100%{transform:none;opacity:1}}

/* zone d'action */
.cm-zone{display:flex;flex-direction:column;gap:10px}
.cm-wait{text-align:center;margin:0;color:var(--ink-2);font-size:15px}
.cm-roll{font-family:var(--font-d);font-weight:700;font-size:22px;min-height:60px}
.cm-dirs{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.cm-dir{min-height:60px;font-family:var(--font-d);font-weight:700;font-size:16px;color:#fff;border-color:transparent;text-shadow:0 1px 2px oklch(0 0 0/.35);white-space:normal;line-height:1.2}
.cm-dir.hq{box-shadow:inset 0 0 0 3px #fff,0 0 0 2px var(--acc)}
.cm-dir.again{background:oklch(0.55 0.02 90)}
.btn.c-geo,.cm-vote.c-geo{background:var(--c-geo)} .btn.c-fun,.cm-vote.c-fun{background:var(--c-fun)} .btn.c-hist,.cm-vote.c-hist{background:var(--c-hist);color:oklch(0.25 0.05 80);text-shadow:none}
.btn.c-art,.cm-vote.c-art{background:var(--c-art)} .btn.c-sci,.cm-vote.c-sci{background:var(--c-sci)} .btn.c-sport,.cm-vote.c-sport{background:var(--c-sport)}
.cm-vote.c-final{background:oklch(0.45 0.03 90)} .cm-q.c-final{--qc:var(--gold)}
.cm-votes .c-final{grid-column:1/-1}
.cm-votes{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.cm-vote{min-height:52px;color:#fff;border-color:transparent;font-weight:700;text-shadow:0 1px 2px oklch(0 0 0/.35);opacity:.85}
.cm-vote.on{opacity:1;box-shadow:0 0 0 3px var(--ink)}
.cm-timer{height:6px;border-radius:3px;background:var(--surface-2);overflow:hidden}
.cm-timer i{display:block;height:100%;background:var(--acc);border-radius:3px;transition:width .2s linear}
.cm-timer.low i{background:var(--neg)}

/* question */
.cm-q{--qc:var(--acc);background:var(--surface);border:1px solid var(--line);border-top:6px solid var(--qc);border-radius:var(--r);padding:14px 16px 16px}
.cm-q.c-geo{--qc:var(--c-geo)} .cm-q.c-fun{--qc:var(--c-fun)} .cm-q.c-hist{--qc:var(--c-hist)} .cm-q.c-art{--qc:var(--c-art)} .cm-q.c-sci{--qc:var(--c-sci)} .cm-q.c-sport{--qc:var(--c-sport)}
.cm-q-head{display:flex;justify-content:space-between;align-items:baseline;gap:8px;flex-wrap:wrap;margin-bottom:8px}
.cm-q-cat{font:700 15px var(--font-d);color:var(--qc)}
.cm-q-meta{font-size:12px;color:var(--mute)}
.cm-q-text{margin:0;font-size:19px;line-height:1.35;font-weight:600}
.cm-who{text-align:center;margin:0;font-size:14px;color:var(--mute);min-height:1.2em}
.cm-choices{display:flex;flex-direction:column;gap:8px}
.cm-choice{display:flex;align-items:center;gap:12px;text-align:left;justify-content:flex-start;min-height:52px;padding:10px 14px;font-size:16px;line-height:1.25;white-space:normal;background:var(--surface);border:1px solid var(--line);color:var(--ink);transition:transform .12s var(--ease),background .2s,border-color .2s,opacity .2s}
.cm-choice:active{transform:scale(.985)}
.cm-choice:disabled{cursor:default;transform:none;opacity:1;filter:none}
.cm-choice:disabled:not(.mine):not(.good):not(.bad):not(.dim){opacity:.7}
.cm-letter{flex:0 0 auto;width:28px;height:28px;border-radius:50%;background:var(--surface-2);display:grid;place-items:center;font:700 14px var(--font-d);color:var(--ink-2)}
.cm-choice.mine{border-color:var(--acc);box-shadow:0 0 0 2px var(--acc)}
.cm-choice.good{background:color-mix(in oklab, var(--pos) 30%, var(--surface));border-color:var(--pos);opacity:1}
.cm-choice.good .cm-letter{background:var(--pos);color:oklch(0.2 0.05 150)}
.cm-choice.bad{background:color-mix(in oklab, var(--neg) 28%, var(--surface));border-color:var(--neg);opacity:1}
.cm-choice.bad .cm-letter{background:var(--neg);color:#fff}
.cm-choice.dim{opacity:.45}
.cm-verdict{text-align:center;padding:12px 14px;border-radius:var(--r-s);background:var(--surface);border:1px solid var(--line)}
.cm-verdict.ok{border-color:var(--pos)} .cm-verdict.ko{border-color:var(--neg)}
.cm-verdict-big{margin:0;font:700 22px/1.2 var(--font-d)}
.cm-verdict.ok .cm-verdict-big{color:var(--pos)} .cm-verdict.ko .cm-verdict-big{color:var(--neg)}
.cm-verdict-sub{margin:4px 0 0;color:var(--ink-2);font-size:14.5px}
.cm-verdict-guess{margin:6px 0 0;color:var(--mute);font-size:13px}
.cm-actions{display:flex;flex-wrap:wrap;gap:8px;justify-content:center}
.cm-log{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:3px;font-size:13px;color:var(--mute);text-align:center}
.cm-log li:first-child{color:var(--ink-2);font-size:14px}
.cm-final{text-align:center;display:flex;flex-direction:column;align-items:center;gap:8px;padding:12px 0 4px}
.cm-final-name{margin:0;font:700 30px/1.1 var(--font-d);color:var(--acc)}
.cm-stats{display:flex;flex-wrap:wrap;justify-content:center;gap:6px 16px;font-size:14px;color:var(--ink-2)}
.cm-stats b{color:var(--ink);font-variant-numeric:tabular-nums}
.screen.play.camembert{padding-bottom:40px}
@media (min-width: 700px){ .cm-board{max-width:420px} .cm-choices{display:grid;grid-template-columns:1fr 1fr} .cm-votes{grid-template-columns:repeat(3,1fr)} }


/* ============================================================ Mirage : nuit bleu-vert, or pâle, Cormorant */
[data-game="mirage"]{
  --bg:        oklch(0.200 0.045 200);
  --surface:   oklch(0.255 0.048 200);
  --surface-2: oklch(0.305 0.050 200);
  --line:      oklch(0.380 0.050 200);
  --ink:       oklch(0.965 0.012 90);
  --ink-2:     oklch(0.830 0.030 95);
  --mute:      oklch(0.690 0.035 120);
  --acc:       oklch(0.880 0.110 90);
  --acc-soft:  oklch(0.930 0.080 90);
  --on-acc:    oklch(0.250 0.050 90);
  --pos:       oklch(0.830 0.140 150);
  --neg:       oklch(0.720 0.180 25);
  --gold:      oklch(0.880 0.110 90);
  --glow: 0.14;
  --r: 14px; --r-s: 10px; --r-pill: 999px;
  --font-d: "Cormorant Garamond", Georgia, serif;
  --track: 0;
}
[data-theme="light"][data-game="mirage"]{
  --bg:        oklch(0.950 0.018 110);
  --surface:   oklch(0.985 0.010 100);
  --surface-2: oklch(0.915 0.025 110);
  --line:      oklch(0.850 0.030 120);
  --ink:       oklch(0.230 0.040 200);
  --ink-2:     oklch(0.400 0.040 200);
  --mute:      oklch(0.540 0.035 200);
  --acc:       oklch(0.520 0.110 200);
  --acc-soft:  oklch(0.450 0.100 200);
  --on-acc:    oklch(0.985 0.010 90);
  --neg:       oklch(0.560 0.190 25);
  --glow: 0.07;
}
[data-game="mirage"] h1,[data-game="mirage"] .banner{font-family:var(--font-d);font-weight:600;font-style:italic}
.g-mirage .gname{font-family:"Cormorant Garamond",Georgia,serif;font-weight:600;font-style:italic;font-size:28px;letter-spacing:0;color:oklch(0.88 0.11 90)}
[data-theme="light"] .g-mirage .gname{color:oklch(0.50 0.11 200)}
.g-mirage{background:oklch(0.235 0.045 200);border-color:oklch(0.34 0.05 200)}
.g-mirage[aria-pressed="true"]{border-color:oklch(0.88 0.11 90);background:oklch(0.28 0.05 200)}
[data-theme="light"] .g-mirage{background:oklch(0.97 0.015 110);border-color:oklch(0.87 0.03 120)}
[data-theme="light"] .g-mirage[aria-pressed="true"]{border-color:oklch(0.52 0.11 200);background:oklch(0.93 0.03 120)}
.dream{position:relative;display:block;width:54px;height:52px}
.dream i{position:absolute;left:13px;top:4px;width:28px;height:40px;border-radius:5px;border:2px solid oklch(0.93 0.03 90);box-shadow:0 3px 8px oklch(0 0 0/.45);transition:transform .45s var(--ease)}
.dream i:nth-child(1){background:radial-gradient(circle at 30% 30%, oklch(0.85 0.12 90), oklch(0.45 0.12 300) 70%);transform:rotate(-16deg) translateX(-9px)}
.dream i:nth-child(2){background:radial-gradient(circle at 60% 70%, oklch(0.75 0.13 200), oklch(0.30 0.08 250) 75%)}
.dream i:nth-child(3){background:radial-gradient(circle at 50% 20%, oklch(0.85 0.14 60), oklch(0.40 0.14 20) 70%);transform:rotate(16deg) translateX(9px)}
.gcard[aria-pressed="true"] .dream i:nth-child(1){transform:rotate(-26deg) translateX(-14px)}
.gcard[aria-pressed="true"] .dream i:nth-child(3){transform:rotate(26deg) translateX(14px)}

.mi-head{text-align:center;display:flex;flex-direction:column;gap:4px}
.mi-teller{margin:0;font:600 22px/1.2 var(--font-d);font-style:italic}
.mi-clue{margin:2px 0 0;font:500 26px/1.2 var(--font-d);font-style:italic;color:var(--acc)}
.mi-clue i{font-size:17px;color:var(--mute)}
.mi-players{display:flex;gap:6px;overflow-x:auto;margin:0 -20px;padding:6px 20px 2px;scrollbar-width:none}
.mi-players::-webkit-scrollbar{display:none}
.mi-player{position:relative;flex:0 0 auto;min-width:78px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-s);padding:7px 10px;display:flex;flex-direction:column;gap:1px}
.mi-player.teller{border-color:var(--acc)}
.mi-player.done{border-color:var(--pos)}
.mi-player.off{opacity:.45}
.mi-player-name{font-size:13px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:110px}
.mi-player.me .mi-player-name::after{content:" (toi)";color:var(--mute);font-weight:400}
.mi-player-score{font-size:15px;font-variant-numeric:tabular-nums;color:var(--ink-2)}
.mi-player-score b{color:var(--pos)}
.mi-badge{position:absolute;top:-8px;right:-3px;background:var(--acc);color:var(--on-acc);font:600 10px/1 var(--font);padding:3px 6px;border-radius:999px;letter-spacing:.04em}
.mi-badge.ok{background:var(--pos);color:oklch(0.2 0.05 150)}
.mi-zone{display:flex;flex-direction:column;gap:10px}
.mi-hint{text-align:center;margin:0;color:var(--ink-2);font-size:15px}
.mi-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.mi-slot{position:relative;padding:0;border:0;background:none;cursor:pointer;border-radius:10px;transition:transform .14s var(--ease)}
.mi-slot:active{transform:scale(.97)}
.mi-card{margin:0;position:relative;aspect-ratio:3/4;border-radius:10px;overflow:hidden;background:var(--surface-2);border:2px solid oklch(0.93 0.03 90 / .55);box-shadow:0 6px 16px oklch(0 0 0/.4)}
.mi-card img{width:100%;height:100%;object-fit:cover;display:block}
.mi-card figcaption{position:absolute;left:0;right:0;bottom:0;padding:14px 6px 4px;font-size:10px;color:#fff;text-align:left;background:linear-gradient(transparent, oklch(0 0 0/.65));white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mi-slot.chosen .mi-card{border-color:var(--acc);box-shadow:0 0 0 3px var(--acc),0 6px 16px oklch(0 0 0/.4)}
.mi-slot.mine .mi-card{opacity:.7}
.mi-slot.teller .mi-card{border-color:var(--acc);box-shadow:0 0 0 3px var(--acc),0 0 22px color-mix(in oklab, var(--acc) 50%, transparent)}
.mi-tag,.mi-owner{position:absolute;top:6px;left:6px;background:oklch(0 0 0/.6);color:#fff;font:600 11px/1 var(--font);padding:4px 7px;border-radius:999px}
.mi-slot.teller .mi-owner{background:var(--acc);color:var(--on-acc)}
.mi-votes{position:absolute;right:6px;top:6px;max-width:60%;text-align:right;background:oklch(0 0 0/.6);color:#fff;font:500 11px/1.3 var(--font);padding:4px 7px;border-radius:10px}
.mi-votes::before{content:"votes : ";color:oklch(0.8 0.02 90)}
.mi-clue-form{display:flex;flex-direction:column;gap:8px}
.mi-clue-in{font:500 20px var(--font-d);font-style:italic;padding:12px 14px;border-radius:var(--r-s);border:1px solid var(--line);background:var(--surface);color:var(--ink);width:100%}
.mi-clue-in:focus{outline:2px solid var(--acc);outline-offset:1px}
.mi-verdict{text-align:center;background:var(--surface);border:1px solid var(--pos);border-radius:var(--r);padding:12px 14px}
.mi-verdict.flat{border-color:var(--line)}
.mi-verdict-big{margin:0;font:600 24px/1.2 var(--font-d);font-style:italic;color:var(--pos)}
.mi-verdict.flat .mi-verdict-big{color:var(--ink-2)}
.mi-verdict-sub{margin:4px 0 0;font-size:14px;color:var(--ink-2)}
.mi-final{text-align:center;display:flex;flex-direction:column;align-items:center;gap:8px}
.mi-final-name{margin:0;font:600 34px/1.1 var(--font-d);font-style:italic;color:var(--acc)}
.mi-ranking{list-style:none;margin:0;padding:0;width:100%;max-width:340px;display:flex;flex-direction:column;gap:4px;counter-reset:r}
.mi-ranking li{display:flex;justify-content:space-between;padding:8px 12px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-s);font-size:15px}
.mi-ranking li::before{counter-increment:r;content:counter(r) ".";color:var(--mute);margin-right:8px}
.mi-ranking li span{flex:1;text-align:left}
.mi-ranking li.me{border-color:var(--acc)}
.mi-ranking b{font-variant-numeric:tabular-nums}
.mi-log{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:3px;font-size:13px;color:var(--mute);text-align:center}
.mi-log li:first-child{color:var(--ink-2);font-size:14px}
.mi-light{position:fixed;inset:0;z-index:60;background:oklch(0.08 0.02 200/.92);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;padding:16px;animation:fade .2s}
.mi-light[hidden]{display:none}
.mi-light img{max-width:100%;max-height:66vh;border-radius:8px;box-shadow:0 12px 40px oklch(0 0 0/.6);border:2px solid oklch(0.93 0.03 90/.6)}
.mi-light-cap{margin:0;color:#fff;text-align:center;font:500 16px/1.3 var(--font-d);font-style:italic}
.mi-light-cap small{font:400 11.5px/1.4 var(--font);color:oklch(0.75 0.02 90);font-style:normal}
.mi-light-row{display:flex;gap:8px;flex-wrap:wrap;justify-content:center}
@keyframes fade{from{opacity:0}to{opacity:1}}
.screen.play.mirage{padding-bottom:40px}
@media (min-width: 700px){ .mi-grid{grid-template-columns:repeat(3,1fr)} .mi-grid.table{grid-template-columns:repeat(4,1fr)} .mi-light img{max-height:74vh} }


/* ============================================================ Douze : ardoise neutre, cartes de couleur, Rubik */
[data-game="douze"]{
  --bg:        oklch(0.205 0.012 250);
  --surface:   oklch(0.260 0.014 250);
  --surface-2: oklch(0.310 0.016 250);
  --line:      oklch(0.380 0.018 250);
  --ink:       oklch(0.965 0.008 250);
  --ink-2:     oklch(0.830 0.015 250);
  --mute:      oklch(0.680 0.020 250);
  --acc:       oklch(0.850 0.120 210);
  --acc-soft:  oklch(0.900 0.080 210);
  --on-acc:    oklch(0.220 0.040 220);
  --pos:       oklch(0.830 0.140 150);
  --neg:       oklch(0.700 0.190 25);
  --gold:      oklch(0.860 0.140 90);
  --glow: 0.12;
  --r: 14px; --r-s: 10px; --r-pill: 999px;
  --font-d: "Rubik", "Bricolage Grotesque", sans-serif;
  --track: -0.01em;
  --c-n: oklch(0.45 0.16 265); --c-z: oklch(0.72 0.12 225); --c-g: oklch(0.66 0.17 150); --c-y: oklch(0.85 0.17 95); --c-r: oklch(0.60 0.21 27);
}
[data-theme="light"][data-game="douze"]{
  --bg:        oklch(0.955 0.008 250);
  --surface:   oklch(0.990 0.004 250);
  --surface-2: oklch(0.925 0.010 250);
  --line:      oklch(0.860 0.012 250);
  --ink:       oklch(0.240 0.020 250);
  --ink-2:     oklch(0.420 0.020 250);
  --mute:      oklch(0.560 0.020 250);
  --acc:       oklch(0.550 0.120 220);
  --acc-soft:  oklch(0.480 0.110 220);
  --on-acc:    oklch(0.990 0.005 220);
  --neg:       oklch(0.560 0.200 25);
  --glow: 0.07;
}
[data-game="douze"] h1,[data-game="douze"] .banner{font-family:var(--font-d);font-weight:800}
.g-douze .gname{font-family:"Rubik","Bricolage Grotesque",sans-serif;font-weight:800;letter-spacing:-.01em;color:oklch(0.85 0.12 210)}
[data-theme="light"] .g-douze .gname{color:oklch(0.52 0.12 220)}
.g-douze{background:oklch(0.24 0.014 250);border-color:oklch(0.34 0.018 250)}
.g-douze[aria-pressed="true"]{border-color:oklch(0.85 0.12 210);background:oklch(0.28 0.02 240)}
[data-theme="light"] .g-douze{background:oklch(0.975 0.006 250);border-color:oklch(0.87 0.012 250)}
[data-theme="light"] .g-douze[aria-pressed="true"]{border-color:oklch(0.55 0.12 220);background:oklch(0.94 0.02 220)}
.dzgrid{display:grid;grid-template-columns:repeat(3,15px);gap:3px;width:51px}
.dzgrid i{height:20px;border-radius:3px;font:800 10px/20px "Rubik",sans-serif;text-align:center;color:#fff;font-style:normal;background:oklch(0.35 0.03 250);box-shadow:0 1px 3px oklch(0 0 0/.4);transition:transform .35s var(--ease)}
.dzgrid i:nth-child(1){background:oklch(0.45 0.16 265)} .dzgrid i:nth-child(3){background:oklch(0.85 0.17 95);color:oklch(0.25 0.05 90)} .dzgrid i:nth-child(5){background:oklch(0.60 0.21 27)}
.gcard[aria-pressed="true"] .dzgrid i:nth-child(2n){transform:rotateY(180deg)}

/* cartes */
.dz-card{position:relative;display:grid;place-items:center;width:100%;aspect-ratio:5/7;border-radius:8px;font-family:"Rubik",sans-serif;font-weight:800;box-shadow:0 3px 8px oklch(0 0 0/.35)}
.dz-card b{font-size:26px;line-height:1;color:#fff;text-shadow:0 1px 2px oklch(0 0 0/.3)}
.dz-card.t-n{background:var(--c-n)} .dz-card.t-z{background:var(--c-z)} .dz-card.t-g{background:var(--c-g)} .dz-card.t-y{background:var(--c-y)} .dz-card.t-r{background:var(--c-r)}
.dz-card.t-y b{color:oklch(0.25 0.05 90);text-shadow:none}
.dz-card.back{background:repeating-linear-gradient(135deg, oklch(0.40 0.04 240) 0 6px, oklch(0.33 0.035 240) 6px 12px);border:2px solid oklch(0.55 0.04 240)}
.dz-card.back i{width:46%;aspect-ratio:1;border-radius:50%;border:3px solid oklch(0.85 0.12 210/.8)}
.dz-card.gone{background:transparent;box-shadow:none;border:2px dashed var(--line)}
.dz-card.slot{background:transparent;box-shadow:none;border:2px dashed var(--line)}
.dz-card.big{width:52px}
.dz-card.mini{width:100%;border-radius:3px;box-shadow:none}
.dz-card.mini b{font-size:11px}
.dz-card.mini.back{border-width:1px} .dz-card.mini.back i{border-width:1.5px;width:40%}
.dz-card.mini.gone{border-width:1px}
.dz-card.pop{animation:dz-pop .3s var(--ease)}
@keyframes dz-pop{from{transform:translateY(-8px) scale(.85);opacity:0}to{transform:none;opacity:1}}

.dz-head{display:flex;flex-direction:column;gap:4px;align-items:center;text-align:center}
.dz-last{font:700 14px var(--font-d);color:var(--gold)}
.dz-players{display:flex;gap:8px;overflow-x:auto;margin:0 -20px;padding:6px 20px 4px;scrollbar-width:none}
.dz-players::-webkit-scrollbar{display:none}
.dz-seat{flex:0 0 auto;width:104px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-s);padding:7px 8px;display:flex;flex-direction:column;gap:5px;transition:border-color .2s,box-shadow .2s}
.dz-seat.now{border-color:var(--acc);box-shadow:0 0 0 2px var(--acc)}
.dz-seat.off{opacity:.45}
.dz-seat-name{font-size:12.5px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dz-seat.me .dz-seat-name::after{content:" (toi)";color:var(--mute);font-weight:400}
.dz-seat-name small{color:var(--mute);font-weight:400}
.dz-mini-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:2px}
.dz-seat-sum{font-size:11.5px;color:var(--mute);font-variant-numeric:tabular-nums;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dz-table{display:grid;grid-template-columns:1fr 1fr 1fr;gap:10px;align-items:start;padding:10px 12px 8px;border-radius:var(--r);border:1px solid var(--line);background:radial-gradient(ellipse at 50% 30%, color-mix(in oklab, var(--acc) 10%, var(--surface)), var(--surface) 75%)}
.dz-pile,.dz-taken{display:flex;flex-direction:column;align-items:center;gap:6px;background:none;border:0;padding:0;color:inherit;font:inherit;cursor:default}
.dz-pile.can{cursor:pointer}
.dz-pile.can .dz-card{box-shadow:0 0 0 3px var(--acc),0 3px 8px oklch(0 0 0/.35);animation:ch-breathe 1.6s ease-in-out infinite}
.dz-pile-label{font-size:12px;color:var(--mute);white-space:nowrap}
.dz-taken.has .dz-pile-label{color:var(--acc);font-weight:600}
.dz-status{text-align:center;margin:0;font:700 18px/1.2 var(--font-d);color:var(--ink-2)}
.dz-status.mine{color:var(--acc)}
.dz-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;max-width:300px;margin:0 auto;width:100%}
.dz-cell{padding:0;border:0;background:none;cursor:pointer;border-radius:8px;transition:transform .12s var(--ease)}
.dz-cell:active{transform:scale(.95)}
.dz-cell.ok .dz-card{box-shadow:0 0 0 3px var(--acc),0 3px 8px oklch(0 0 0/.35)}
.dz-cell.ok .dz-card.gone{box-shadow:none}
.dz-sum{text-align:center;margin:0}
.dz-actions{display:flex;justify-content:center;gap:8px;flex-wrap:wrap}
.dz-log{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:3px;font-size:13px;color:var(--mute);text-align:center}
.dz-log li:first-child{color:var(--ink-2);font-size:14px}
.dz-verdict{background:var(--surface);border:1px solid var(--line);border-top:4px solid var(--acc);border-radius:var(--r);padding:14px;display:flex;flex-direction:column;gap:10px}
.dz-verdict-sub{margin:0;color:var(--ink-2);font-size:14.5px}
.dz-rows{display:flex;flex-direction:column;gap:8px}
.dz-row{background:var(--surface-2);border-radius:var(--r-s);padding:8px 10px;display:flex;align-items:center;justify-content:space-between;gap:10px}
.dz-row.doubled{box-shadow:inset 0 0 0 1px var(--neg)}
.dz-row-head{display:flex;flex-direction:column;gap:2px;font-size:15px;min-width:0}
.dz-row-head span{color:var(--ink-2);font-variant-numeric:tabular-nums}
.dz-row-head strong{color:var(--ink);font-size:18px}
.dz-row.doubled .dz-row-head strong{color:var(--neg)}
.dz-row .dz-mini-grid{width:112px;flex:0 0 auto}
.dz-scores{display:flex;flex-wrap:wrap;gap:6px 14px;align-items:baseline;font-size:15px;color:var(--ink-2);border-top:1px dashed var(--line);padding-top:12px}
.dz-scores .eyebrow{width:100%}
.dz-scores b{color:var(--ink);font-variant-numeric:tabular-nums}
.dz-scores .lead,.dz-scores .lead b{color:var(--acc)}
.screen.play.douze{padding-bottom:40px}
@media (min-width: 700px){ .dz-grid{max-width:400px;gap:10px} .dz-card.big{width:72px} .dz-card b{font-size:30px} .dz-seat{width:130px} .dz-row .dz-mini-grid{width:140px} }


/* ============================================================ règles des jeux */
.rules-entry{display:flex;align-items:center;gap:14px;width:100%;margin-top:18px;padding:14px 16px;text-align:left;font:inherit;color:var(--ink);background:var(--surface);border:1px solid var(--line);border-radius:var(--r);cursor:pointer;transition:transform .14s var(--ease),border-color .2s}
.rules-entry:hover{border-color:var(--acc)}
.rules-entry:active{transform:scale(.985)}
.rules-entry-icon{flex:0 0 auto;width:42px;height:42px;border-radius:var(--r-s);display:grid;place-items:center;background:color-mix(in oklab, var(--acc) 16%, var(--surface));color:var(--acc)}
.rules-entry-text{flex:1;display:flex;flex-direction:column;gap:2px;min-width:0}
.rules-entry-text b{font:800 17px var(--font-d);letter-spacing:var(--track)}
.rules-entry-text small{font-size:13px;color:var(--ink-2)}
.rules-entry-go{font-size:26px;line-height:1;color:var(--mute)}

.rules-intro{display:flex;flex-direction:column;gap:6px;margin-bottom:14px}
.rules-intro h1{margin:0}
.rules-toc{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;margin-bottom:26px}
.rules-chip{display:flex;align-items:center;gap:10px;padding:9px 12px;border-radius:var(--r-s);border:1px solid var(--line);background:var(--surface);color:var(--ink);text-decoration:none;min-width:0;transition:transform .14s var(--ease),border-color .2s}
.rules-chip:active{transform:scale(.97)}
.rules-chip .gart{flex:0 0 auto;width:34px;height:34px;display:grid;place-items:center;transform:scale(.62);transform-origin:center}
.rules-chip .gname{font-family:var(--font-d);font-weight:800;font-size:16px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rules-list{display:flex;flex-direction:column;gap:34px}
.rules-game{scroll-margin-top:calc(var(--bar-h) + env(safe-area-inset-top) + 12px);display:flex;flex-direction:column;gap:14px}
.rules-head{cursor:default}
.rules-head:active{transform:none}
.rules-part{padding:0 4px}
.rules-part h3{margin:0 0 6px;font:800 13px/1.2 var(--font);letter-spacing:.08em;text-transform:uppercase;color:var(--acc)}
.rules-part p,.rules-part li{font-size:15.5px;line-height:1.55;color:var(--ink-2)}
.rules-part p{margin:0}
.rules-part p+p{margin-top:8px}
.rules-part ul{margin:0;padding-left:20px;display:flex;flex-direction:column;gap:6px}
.rules-part b{color:var(--ink)}
.rules-top{align-self:flex-start;background:none;border:0;padding:6px 4px;font:600 13.5px var(--font);color:var(--mute);cursor:pointer}
.rules-top:hover{color:var(--acc)}
@media (min-width: 700px){ .rules-toc{grid-template-columns:repeat(3,1fr)} .rules-part p,.rules-part li{font-size:16px} }


/* ============================================================ Petit Bac : cahier d'écolier, encre bleue, marge rouge */
[data-game="petitbac"]{
  --bg:        oklch(0.205 0.030 255);
  --surface:   oklch(0.255 0.034 255);
  --surface-2: oklch(0.305 0.036 255);
  --line:      oklch(0.380 0.040 255);
  --ink:       oklch(0.965 0.010 90);
  --ink-2:     oklch(0.830 0.020 250);
  --mute:      oklch(0.680 0.030 250);
  --acc:       oklch(0.800 0.130 240);
  --acc-soft:  oklch(0.880 0.090 240);
  --on-acc:    oklch(0.220 0.050 255);
  --pos:       oklch(0.820 0.140 150);
  --neg:       oklch(0.700 0.190 25);
  --gold:      oklch(0.860 0.140 90);
  --glow: 0.12;
  --r: 12px; --r-s: 9px; --r-pill: 999px;
  --font-d: "Patrick Hand", "Bricolage Grotesque", sans-serif;
  --track: 0;
  --paper: oklch(0.975 0.012 95); --paper-ink: oklch(0.34 0.12 262); --paper-line: oklch(0.80 0.06 245 / .55); --margin: oklch(0.62 0.19 25 / .7);
}
[data-theme="light"][data-game="petitbac"]{
  --bg:        oklch(0.955 0.012 95);
  --surface:   oklch(0.990 0.006 95);
  --surface-2: oklch(0.925 0.016 95);
  --line:      oklch(0.860 0.020 250);
  --ink:       oklch(0.240 0.040 262);
  --ink-2:     oklch(0.420 0.050 262);
  --mute:      oklch(0.560 0.040 262);
  --acc:       oklch(0.500 0.150 262);
  --acc-soft:  oklch(0.440 0.140 262);
  --on-acc:    oklch(0.990 0.005 95);
  --neg:       oklch(0.560 0.200 25);
  --glow: 0.07;
}
[data-game="petitbac"] h1,[data-game="petitbac"] .banner{font-family:var(--font-d);font-weight:400}
.g-petitbac .gname{font-family:"Patrick Hand","Bricolage Grotesque",sans-serif;font-weight:400;font-size:28px;letter-spacing:0;color:oklch(0.82 0.12 240)}
[data-theme="light"] .g-petitbac .gname{color:oklch(0.48 0.15 262)}
.g-petitbac{background:oklch(0.24 0.032 255);border-color:oklch(0.34 0.04 255)}
.g-petitbac[aria-pressed="true"]{border-color:oklch(0.82 0.12 240);background:oklch(0.28 0.04 255)}
[data-theme="light"] .g-petitbac{background:oklch(0.975 0.01 95);border-color:oklch(0.87 0.02 250)}
[data-theme="light"] .g-petitbac[aria-pressed="true"]{border-color:oklch(0.5 0.15 262);background:oklch(0.94 0.025 250)}
.bac{position:relative;display:block;width:44px;height:52px;border-radius:4px;background:oklch(0.975 0.012 95);box-shadow:0 2px 6px oklch(0 0 0/.4),inset 7px 0 0 -5px oklch(0.62 0.19 25/.8);overflow:hidden;transition:transform .4s var(--ease)}
.bac b{position:absolute;right:5px;top:3px;font:400 22px/1 "Patrick Hand",sans-serif;color:oklch(0.34 0.12 262)}
.bac i{position:absolute;left:9px;right:5px;height:2px;border-radius:1px;background:oklch(0.55 0.1 255/.55)}
.bac i:nth-of-type(1){top:28px;right:14px} .bac i:nth-of-type(2){top:36px} .bac i:nth-of-type(3){top:44px;right:20px}
.gcard[aria-pressed="true"] .bac{transform:rotate(-6deg)}
.pb-custom{display:flex;gap:8px}
.pb-custom input{flex:1;min-width:0}

.pb-head{display:flex;flex-direction:column;align-items:center;gap:6px}
.pb-letter{width:92px;height:92px;border-radius:50%;display:grid;place-items:center;background:var(--paper);color:var(--paper-ink);font:400 64px/1 var(--font-d);box-shadow:0 0 0 4px var(--acc),0 8px 20px oklch(0 0 0/.35);animation:pb-stamp .45s var(--ease)}
@keyframes pb-stamp{from{transform:scale(1.6) rotate(-12deg);opacity:0}to{transform:none;opacity:1}}
.pb-timer{position:relative;height:26px;border-radius:13px;background:var(--surface-2);overflow:hidden}
.pb-timer i{position:absolute;inset:0 auto 0 0;background:var(--acc);border-radius:13px;transition:width .25s linear}
.pb-timer span{position:relative;display:block;text-align:center;font:600 13px/26px var(--font);color:var(--ink);font-variant-numeric:tabular-nums;mix-blend-mode:normal}
.pb-timer.low i{background:var(--neg)}
.pb-stop{text-align:center;margin:0;font:400 24px/1.2 var(--font-d);color:var(--neg);animation:pop .35s var(--ease)}
.pb-form{background:var(--paper);border-radius:var(--r);padding:6px 14px 10px 30px;box-shadow:0 8px 22px oklch(0 0 0/.3),inset 22px 0 0 -20px var(--margin);display:flex;flex-direction:column}
.pb-row{display:flex;flex-direction:column;gap:0;padding:8px 0 4px;border-bottom:1.5px solid var(--paper-line)}
.pb-cat{font:600 12px/1.2 var(--font);letter-spacing:.06em;text-transform:uppercase;color:oklch(0.5 0.05 255)}
.pb-in{border:0;background:transparent;padding:4px 0 2px;font:400 23px/1.2 var(--font-d);color:var(--paper-ink);width:100%;outline:none;min-height:0;border-radius:0}
.pb-in::placeholder{color:oklch(0.7 0.04 255)}
.pb-in:focus{background:oklch(0.93 0.04 240/.5)}
.pb-in:disabled{opacity:1;-webkit-text-fill-color:var(--paper-ink)}
.pb-row.bad .pb-in{color:oklch(0.55 0.2 25);-webkit-text-fill-color:oklch(0.55 0.2 25);text-decoration:underline wavy oklch(0.6 0.2 25) 1.5px;text-underline-offset:4px}
.pb-stopbtn{font:400 26px var(--font-d);min-height:60px;animation:none}
.pb-stopbtn:disabled{background:var(--surface-2);border-color:var(--line);color:var(--mute);opacity:1}
.pb-hint{text-align:center;margin:0}
.pb-hint-top{text-align:center;margin:0;color:var(--ink-2);font-size:14.5px}
.pb-board{display:flex;flex-direction:column;gap:14px}
.pb-block{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:10px 10px 8px}
.pb-block-cat{margin:0 0 6px 4px;font:600 12px/1.2 var(--font);letter-spacing:.07em;text-transform:uppercase;color:var(--acc)}
.pb-line{display:flex;gap:6px;align-items:stretch}
.pb-line+.pb-line{margin-top:5px}
.pb-ans{flex:1;min-width:0;display:grid;grid-template-columns:auto 1fr auto;grid-template-rows:auto auto;column-gap:10px;align-items:center;text-align:left;padding:7px 10px;border-radius:var(--r-s);border:1px solid transparent;background:var(--surface-2);color:var(--ink);font:inherit}
button.pb-ans{cursor:pointer;transition:transform .12s var(--ease)}
button.pb-ans:active{transform:scale(.985)}
.pb-who{grid-row:1/3;font-size:12.5px;color:var(--mute);max-width:78px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pb-word{font:400 20px/1.15 var(--font-d);overflow-wrap:anywhere}
.pb-pts{grid-row:1/3;grid-column:3;font:700 15px var(--font);font-variant-numeric:tabular-nums;min-width:26px;text-align:right}
.pb-why{grid-column:2;font-size:11.5px;color:var(--mute)}
.pb-ans.ok .pb-pts{color:var(--pos)}
.pb-ans.dup .pb-pts{color:var(--gold)}
.pb-ans.ko{background:color-mix(in oklab, var(--neg) 14%, var(--surface-2))}
.pb-ans.ko .pb-word{text-decoration:line-through;text-decoration-color:var(--neg);color:var(--ink-2)}
.pb-ans.ko .pb-pts{color:var(--neg)}
.pb-ans.empty .pb-word{color:var(--mute)}
.pb-ans.contested{border-color:var(--neg)}
.pb-ans.me{box-shadow:inset 3px 0 0 var(--acc)}
.pb-force{flex:0 0 40px;border-radius:var(--r-s);border:1px solid var(--line);background:var(--surface);color:var(--ink-2);font-size:17px;cursor:pointer}
.pb-totals,.pb-scores{display:flex;flex-wrap:wrap;gap:6px 14px;align-items:baseline;font-size:15px;color:var(--ink-2);border-top:1px dashed var(--line);padding-top:12px}
.pb-totals .eyebrow,.pb-scores .eyebrow{width:100%}
.pb-totals b,.pb-scores b{color:var(--ink);font-variant-numeric:tabular-nums}
.pb-totals .me,.pb-scores .me{color:var(--acc)}
.pb-scores .lead,.pb-scores .lead b{color:var(--gold)}
.pb-actions{display:flex;flex-wrap:wrap;gap:8px;justify-content:center}
.pb-actions .btn.on{background:var(--pos);border-color:var(--pos);color:oklch(0.2 0.05 150)}
.pb-winner{text-align:center;margin:0;font:400 34px/1.1 var(--font-d);color:var(--gold)}
.pb-log{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:3px;font-size:13px;color:var(--mute);text-align:center}
.screen.play.petitbac{padding-bottom:40px}
@media (min-width: 700px){ .pb-board{display:grid;grid-template-columns:1fr 1fr;align-items:start} .pb-form{max-width:560px;width:100%;margin:0 auto} }

.pb-ans.empty .pb-word{text-decoration:none}


/* ============================================================ Loup-Garou : nuit d'encre, lune pâle, rouge sang */
[data-game="loupgarou"]{
  --bg:        oklch(0.165 0.030 275);
  --surface:   oklch(0.220 0.034 275);
  --surface-2: oklch(0.270 0.036 275);
  --line:      oklch(0.340 0.040 275);
  --ink:       oklch(0.950 0.015 90);
  --ink-2:     oklch(0.810 0.020 270);
  --mute:      oklch(0.650 0.030 270);
  --acc:       oklch(0.880 0.070 90);
  --acc-soft:  oklch(0.930 0.050 90);
  --on-acc:    oklch(0.200 0.040 275);
  --pos:       oklch(0.820 0.130 150);
  --neg:       oklch(0.620 0.200 25);
  --gold:      oklch(0.870 0.110 85);
  --glow: 0.12;
  --r: 14px; --r-s: 10px; --r-pill: 999px;
  --font-d: "Grenze Gotisch", Georgia, serif;
  --track: 0;
  --blood: oklch(0.56 0.20 25);
}
[data-theme="light"][data-game="loupgarou"]{
  --bg:        oklch(0.950 0.015 80);
  --surface:   oklch(0.985 0.008 80);
  --surface-2: oklch(0.915 0.018 80);
  --line:      oklch(0.850 0.022 80);
  --ink:       oklch(0.220 0.040 275);
  --ink-2:     oklch(0.400 0.040 275);
  --mute:      oklch(0.540 0.030 275);
  --acc:       oklch(0.450 0.120 275);
  --acc-soft:  oklch(0.400 0.110 275);
  --on-acc:    oklch(0.985 0.008 80);
  --neg:       oklch(0.520 0.200 25);
  --glow: 0.07;
}
[data-game="loupgarou"] h1,[data-game="loupgarou"] .banner{font-family:var(--font-d);font-weight:700}
.g-loupgarou .gname{font-family:"Grenze Gotisch",Georgia,serif;font-weight:700;font-size:28px;letter-spacing:0;color:oklch(0.88 0.07 90)}
[data-theme="light"] .g-loupgarou .gname{color:oklch(0.45 0.12 275)}
.g-loupgarou{background:oklch(0.2 0.034 275);border-color:oklch(0.31 0.04 275)}
.g-loupgarou[aria-pressed="true"]{border-color:oklch(0.88 0.07 90);background:oklch(0.24 0.04 275)}
[data-theme="light"] .g-loupgarou{background:oklch(0.965 0.012 80);border-color:oklch(0.86 0.02 275)}
[data-theme="light"] .g-loupgarou[aria-pressed="true"]{border-color:oklch(0.45 0.12 275);background:oklch(0.93 0.025 275)}
.lwart{position:relative;display:block;width:52px;height:52px;border-radius:50%;background:radial-gradient(circle at 50% 110%, oklch(0.3 0.06 275), oklch(0.16 0.03 275));overflow:hidden;box-shadow:0 2px 6px oklch(0 0 0/.4)}
.lwart-moon{position:absolute;right:9px;top:8px;width:15px;height:15px;border-radius:50%;background:oklch(0.93 0.06 90);box-shadow:0 0 10px oklch(0.93 0.06 90/.6);transition:transform .5s var(--ease)}
.lwart svg{position:absolute;left:4px;bottom:-2px;width:40px;height:40px;color:oklch(0.08 0.02 275)}
.gcard[aria-pressed="true"] .lwart-moon{transform:translate(-4px,2px) scale(1.15)}

.lw{--scene:var(--surface)}
.lw-head{display:flex;align-items:center;justify-content:center;gap:10px}
.lw-title{margin:0;font:700 30px/1 var(--font-d)}
.lw-moon{width:22px;height:22px;border-radius:50%;background:oklch(0.93 0.06 90);box-shadow:0 0 14px oklch(0.93 0.06 90/.55),inset -6px -2px 0 oklch(0.8 0.05 90)}
.lw-moon.sun{background:oklch(0.86 0.15 80);box-shadow:0 0 16px oklch(0.86 0.15 80/.6)}
.lw-ico{width:26px;height:26px;flex:0 0 auto}
.lw-ico.big{width:64px;height:64px}
.lw-ico.q{display:grid;place-items:center;font:700 16px var(--font-d);color:var(--mute);border:1.5px dashed var(--line);border-radius:50%;width:26px;height:26px}
.lw-face{display:none}
.lw-peek .lw-face.back,.lw-card .lw-face.back{display:contents}
.lw-peek.open .lw-face.back,.lw-card.open .lw-face.back{display:none}
.lw-peek.open .lw-face.front,.lw-card.open .lw-face.front{display:contents}
.lw-peek{display:flex;align-items:center;justify-content:center;gap:12px;min-height:58px;padding:10px 14px;border-radius:var(--r);border:1px dashed var(--line);background:var(--surface);color:var(--mute);font:inherit;font-size:14px;cursor:pointer;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none;touch-action:none}
.lw-peek.open{border-style:solid;border-color:var(--acc);color:var(--ink)}
.lw-peek.open b{font:700 20px var(--font-d);display:block}
.lw-peek small{display:block;font-size:12.5px;color:var(--ink-2)}
.lw-peek .lw-face.front>span{display:flex;flex-direction:column;align-items:flex-start;text-align:left}
.lw-card{display:flex;flex-direction:column;align-items:center;gap:12px;text-align:center;padding:30px 22px;min-height:340px;justify-content:center;border-radius:20px;border:2px solid oklch(0.88 0.07 90/.5);background:radial-gradient(ellipse at 50% 0%, oklch(0.32 0.06 275), oklch(0.17 0.03 275) 75%);color:oklch(0.95 0.015 90);font:inherit;cursor:pointer;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none;touch-action:none;box-shadow:0 18px 40px oklch(0 0 0/.45)}
.lw-card.open{border-color:var(--gold)}
.lw-card-back{opacity:.35}
.lw-card-name{font:700 36px/1.05 var(--font-d);color:oklch(0.93 0.06 90)}
.lw-card-text{font-size:15.5px;line-height:1.5;max-width:320px;color:oklch(0.85 0.02 270)}
.lw-card-pack{font-size:14px;color:oklch(0.8 0.14 25)}
.lw-card.open .lw-ico{color:oklch(0.93 0.06 90)}
.lw-ghost{text-align:center;margin:0;font-size:13.5px;color:var(--mute);font-style:italic}
.lw-step{text-align:center;margin:0;font:500 20px/1.25 var(--font-d);color:var(--acc)}
.lw-sleep{display:flex;flex-direction:column;align-items:center;gap:10px;padding:40px 16px;border-radius:var(--r);background:radial-gradient(ellipse at 50% 30%, oklch(0.24 0.04 275), oklch(0.14 0.025 275));color:oklch(0.78 0.03 270);text-align:center}
.lw-zz{font:700 44px var(--font-d);color:oklch(0.9 0.05 90/.7);letter-spacing:.04em}
.lw-act{text-align:center;margin:0;font-size:16px;color:var(--ink)}
.lw-act.small{font-size:14px;color:var(--ink-2)}
.lw-wait{text-align:center;margin:0;font-size:14.5px;color:var(--ink-2)}
.lw-warn{text-align:center;margin:0;color:var(--neg);font-weight:600}
.lw-pick{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.lw-opt{min-height:52px;font-size:16px;font-weight:600;background:var(--surface);border-color:var(--line);color:var(--ink);white-space:normal}
.lw-opt.on{background:var(--blood);border-color:var(--blood);color:#fff}
.lw-opt.blocked{opacity:.4;text-decoration:line-through}
.lw-pack{display:flex;flex-direction:column;gap:6px;padding:10px 12px;border-radius:var(--r-s);background:color-mix(in oklab, var(--blood) 14%, var(--surface));border:1px solid color-mix(in oklab, var(--blood) 40%, var(--line))}
.lw-pack span{display:flex;align-items:center;gap:8px;font-size:14.5px;color:var(--ink-2)}
.lw-pack span.me{color:var(--ink)}
.lw-pack .lw-ico{width:20px;height:20px;color:var(--blood)}
.lw-reveal-card{display:flex;flex-direction:column;align-items:center;gap:8px;text-align:center;padding:22px 16px;border-radius:var(--r);background:var(--surface);border:1px solid var(--acc)}
.lw-reveal-card b{font:700 26px/1.1 var(--font-d)}
.lw-reveal-card span{font-size:14.5px;color:var(--ink-2);max-width:340px}
.lw-reveal-card.love{border-color:oklch(0.7 0.17 0)}
.lw-reveal-card.love .lw-ico{color:oklch(0.72 0.17 0)}
.lw-potions{display:flex;flex-direction:column;gap:8px}
.lw-potion.life{min-height:54px;background:color-mix(in oklab, var(--pos) 20%, var(--surface));border-color:var(--pos);color:var(--ink);white-space:normal}
.lw-potion.life.on{background:var(--pos);color:oklch(0.2 0.05 150)}
.lw-announce{display:flex;flex-direction:column;gap:12px;align-items:center;padding:18px 14px;border-radius:var(--r);background:var(--surface);border:1px solid var(--line);text-align:center}
.lw-announce-title{margin:0;font:700 26px/1.15 var(--font-d);color:var(--acc)}
.lw-announce-empty{margin:0;font-size:16px;color:var(--ink-2)}
.lw-dead{display:flex;flex-direction:column;align-items:center;gap:4px;padding:12px 18px;border-radius:var(--r-s);background:color-mix(in oklab, var(--blood) 16%, var(--surface-2));width:100%;animation:pop .4s var(--ease)}
.lw-dead .lw-ico{color:var(--blood)}
.lw-dead b{font:700 26px var(--font-d)}
.lw-dead span{font-size:14.5px;color:var(--ink-2)}
.lw-votes{margin:0;font-size:13px;color:var(--mute);text-align:center;line-height:1.6}
.lw-timer{height:4px;border-radius:2px;background:var(--surface-2);overflow:hidden}
.lw-timer i{display:block;height:100%;background:var(--acc);transition:width .2s linear}
.lw-over{display:flex;flex-direction:column;align-items:center;gap:8px;padding:20px;border-radius:var(--r);background:var(--surface);border:2px solid var(--gold);text-align:center}
.lw-over p{margin:0;font:700 34px/1.1 var(--font-d);color:var(--gold)}
.lw-over.wolves{border-color:var(--blood)} .lw-over.wolves p,.lw-over.wolves .lw-ico{color:var(--blood)}
.lw-actions{display:flex;flex-wrap:wrap;gap:8px;justify-content:center}
.lw-village{display:grid;grid-template-columns:repeat(auto-fill,minmax(104px,1fr));gap:6px;margin-top:6px}
.lw-p{display:flex;flex-direction:column;align-items:center;gap:3px;padding:9px 6px;border-radius:var(--r-s);background:var(--surface);border:1px solid var(--line);text-align:center;min-width:0}
.lw-p .lw-ico{color:var(--ink-2)}
.lw-p.me{border-color:var(--acc)}
.lw-p.dead{opacity:.5}
.lw-p.dead .lw-p-name{text-decoration:line-through}
.lw-p.win{border-color:var(--gold);box-shadow:0 0 0 1px var(--gold)}
.lw-p.off{border-style:dashed}
.lw-p-name{font-size:13.5px;font-weight:600;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lw-p-role{font-size:11.5px;color:var(--mute);min-height:1em}
.lw-heart{color:oklch(0.7 0.18 0);font-style:normal}
.lw-log{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:3px;font-size:12.5px;color:var(--mute);text-align:center}
.lw-log-seer{text-align:center;margin:0}
:root:not([data-theme="light"]) .lw-night .lw-p{background:oklch(0.19 0.03 275)}
.screen.play.loupgarou{padding-bottom:40px}
@media (min-width: 700px){ .lw-pick{grid-template-columns:repeat(3,1fr)} .lw-card{max-width:420px;margin:0 auto;width:100%} }


/* ============ PC : moins de défilement, plus de place utilisée ============ */
/* salon : l'ordre du téléphone reste code, joueurs, jeux, réglages */
.lobby-side{display:contents}
#s-lobby .code-strip{order:1} #s-lobby .players{order:2} #s-lobby .picker{order:3} #lobby-opts{order:4} #lobby-wait{order:5}

@media (min-width: 760px){
  #s-lobby{max-width:900px}
  .games{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
  .gcard{align-content:start}
  .gsoon{grid-column:1/-1}
  #s-rules{max-width:900px}
}

@media (min-width: 1100px){
  /* salon en deux colonnes : les jeux à gauche, tout le reste à droite, toujours visible */
  #s-lobby{max-width:1320px;display:grid;grid-template-columns:minmax(0,1fr) 380px;column-gap:32px;align-items:start;padding-left:32px;padding-right:32px}
  #s-lobby .picker{grid-column:1;grid-row:1}
  .lobby-side{display:flex;flex-direction:column;gap:16px;grid-column:2;grid-row:1;position:sticky;top:calc(var(--bar-h) + env(safe-area-inset-top) + 12px);max-height:calc(100dvh - var(--bar-h) - 30px);overflow-y:auto;overscroll-behavior:contain;padding:2px 4px 16px 2px;scrollbar-width:thin}
  .lobby-side .code-strip{flex-direction:column;align-items:flex-start;gap:8px}
  .lobby-side .code-strip br{display:none}
  .lobby-side #lobby-opts{margin-top:4px}
  /* le bouton reste collé en bas ; son ombre couleur de fond estompe ce qui défile derrière lui, et la marge
     au-dessus garantit qu'elle ne mange pas le texte qui le précède quand rien ne défile */
  .lobby-side #btn-start{position:sticky;bottom:0;z-index:1;width:100%;margin-top:26px;box-shadow:0 12px 0 10px var(--bg),0 -16px 12px 2px var(--bg)}

  /* accueil en deux colonnes : la boîte à gauche, l'entrée à droite */
  #s-home{max-width:1080px;display:grid;grid-template-columns:minmax(0,1fr) 420px;grid-template-rows:auto auto auto;column-gap:80px;row-gap:18px;align-content:center;padding-left:40px;padding-right:40px}
  #s-home .hub-hero{grid-column:1;grid-row:1/4;align-self:center;text-align:left;align-items:flex-start}
  #s-home .hub-hero h1{font-size:64px;line-height:1}
  #s-home .hub-hero .lede{font-size:20px;max-width:28ch}
  #s-home .gamebox{transform:scale(1.35);transform-origin:left center;margin-bottom:22px}
  #s-home #f-home{grid-column:2;grid-row:1;align-self:end}
  #s-home .rules-entry{grid-column:2;grid-row:2;margin-top:0}
  #s-home .hub-foot{grid-column:2;grid-row:3;margin-top:0;align-self:start}

  /* règles : sommaire fixe à gauche, texte à droite */
  #s-rules{max-width:1180px;padding-left:32px;padding-right:32px}
  #rules-main{display:grid;grid-template-columns:250px minmax(0,1fr);gap:40px;align-items:start}
  .rules-toc .rules-chip{padding:5px 10px;gap:8px}
  .rules-toc .gart{width:28px;height:28px;transform:scale(.5)}
  .rules-toc .gname{font-size:15px}
  .rules-toc{grid-template-columns:1fr;position:sticky;top:calc(var(--bar-h) + env(safe-area-inset-top) + 12px);margin:0;max-height:calc(100dvh - var(--bar-h) - 30px);overflow-y:auto;gap:6px}
  .rules-list{max-width:760px}
  .rules-intro{max-width:760px;margin-left:290px}

  /* écrans de jeu : conçus pour le téléphone, on les agrandit plutôt que de les étirer */
  .screen.play:not(#s-geo){max-width:640px}
  .screen.play:not(#s-geo):has(.desk-split){max-width:1120px;padding-left:28px;padding-right:28px}
  #s-end{max-width:640px}

  /* deux colonnes dans les jeux : le cœur à gauche, joueurs et journal à droite (desk.js) */
  .desk-split{display:grid;grid-template-columns:minmax(0,1fr) 340px;column-gap:28px;align-items:start}
  .desk-main,.desk-side{display:flex;flex-direction:column;gap:15px;min-width:0}
  .desk-side{position:sticky;top:calc(var(--bar-h) + env(safe-area-inset-top) + 12px)}
  .desk-side .ch-players,.desk-side .cm-players,.desk-side .mi-players,.desk-side .dz-players{flex-wrap:wrap;overflow:visible;margin:0;padding:0}
  .desk-side .km-seats{grid-template-columns:1fr 1fr}
  .desk-side .lw-village{grid-template-columns:repeat(2,minmax(0,1fr));margin-top:0}
  .desk-side .ch-log,.desk-side .km-log,.desk-side .cm-log,.desk-side .mi-log,.desk-side .dz-log,.desk-side .lw-log,.desk-side .pb-log{text-align:left}
  .desk-side .dz-seat{width:calc(50% - 4px)}
  #cm-main.desk-split{grid-template-columns:minmax(0,1fr) 380px}
  #cm-main.desk-split .cm-board{max-width:520px}
  #pb-main.desk-split .pb-board{grid-template-columns:1fr 1fr}
}
/* écrans de jeu : un zoom léger, seulement si la hauteur le permet */
/* min-height est lui aussi agrandi par le zoom : on le divise d'autant pour ne pas forcer le défilement */
.screen.play:not(#s-geo),#s-end{min-height:calc(100dvh / var(--z, 1))}
@media (min-width: 1100px) and (min-height: 760px){ .screen.play:not(#s-geo),#s-end{--z:1.08;zoom:var(--z)} }
@media (min-width: 1400px) and (min-height: 880px){
  .screen.play:not(#s-geo),#s-end{--z:1.18}
  .games{grid-template-columns:repeat(3,minmax(0,1fr))}
}
@media (min-width: 1800px) and (min-height: 1040px){ .screen.play:not(#s-geo),#s-end{--z:1.28} }

/* Petit Brevet sans stop */
.pb-done{text-align:center;margin:-4px 0 0;font:400 20px/1.2 var(--font-d);color:var(--ink-2)}
.pb-donebtn{font:400 24px var(--font-d);min-height:58px}

/* réglages de l'hôte vus par les invités */
#lobby-guest-opts{order:6}
.guest-opts{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:14px 16px;display:flex;flex-direction:column;gap:8px;animation:screen-in .3s var(--ease)}
.guest-opts .eyebrow{margin:0}
.guest-opts dl{margin:0;display:flex;flex-direction:column}
.guest-opts dl>div{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.1fr);gap:12px;padding:8px 0;border-top:1px solid var(--line);align-items:baseline}
.guest-opts dl>div:first-child{border-top:0}
.guest-opts dt{font-size:14px;color:var(--ink-2)}
.guest-opts dd{margin:0;font-size:14.5px;font-weight:600;color:var(--ink);text-align:right;overflow-wrap:anywhere}
.guest-opts .fine{margin:0}

/* Mirage : jokers */
.mi-jokers{display:flex;align-items:center;justify-content:center;gap:10px;margin:0;font-size:13.5px;color:var(--ink-2)}
.mi-joker-dots{display:inline-flex;gap:4px}
.mi-joker-dots i{width:12px;height:16px;border-radius:3px;border:1.5px solid var(--line);background:transparent}
.mi-joker-dots i.on{background:var(--acc);border-color:var(--acc)}
.mi-offer{display:flex;flex-direction:column;gap:10px;padding:14px;border-radius:var(--r);background:color-mix(in oklab, var(--acc) 10%, var(--surface));border:1px solid var(--acc);animation:screen-in .3s var(--ease)}
.mi-offer-title{margin:0;text-align:center;font:600 20px/1.2 var(--font-d);font-style:italic}
.mi-grid.offer{grid-template-columns:repeat(3,1fr)}
.mi-offer .btn{align-self:center}
.mi-joker-btn{background:transparent;border:1px solid oklch(0.88 0.11 90 / .6);color:oklch(0.93 0.06 90)}
@media (min-width: 700px){ .mi-grid.offer{grid-template-columns:repeat(5,1fr)} }
.mi-offer-head{display:flex;align-items:center;gap:12px;justify-content:center}
.mi-offer-out{margin:0;width:44px;aspect-ratio:3/4;border-radius:6px;overflow:hidden;border:2px solid var(--acc);flex:0 0 auto;opacity:.85}
.mi-offer-out img{width:100%;height:100%;object-fit:cover;display:block}
.mi-offer-head .mi-offer-title{text-align:left;font-size:18px}


/* ============================================================ Naufragés : lagon, sable, feu de camp */
[data-game="naufrages"]{
  --bg:        oklch(0.215 0.045 205);
  --surface:   oklch(0.265 0.050 205);
  --surface-2: oklch(0.315 0.052 205);
  --line:      oklch(0.385 0.050 205);
  --ink:       oklch(0.970 0.015 95);
  --ink-2:     oklch(0.840 0.030 110);
  --mute:      oklch(0.690 0.035 180);
  --acc:       oklch(0.830 0.140 75);
  --acc-soft:  oklch(0.900 0.090 80);
  --on-acc:    oklch(0.250 0.060 60);
  --pos:       oklch(0.820 0.140 150);
  --neg:       oklch(0.680 0.190 30);
  --gold:      oklch(0.850 0.140 85);
  --glow: 0.13;
  --r: 16px; --r-s: 12px; --r-pill: 999px;
  --font-d: "Chewy", "Bricolage Grotesque", sans-serif;
  --track: 0;
}
[data-theme="light"][data-game="naufrages"]{
  --bg:        oklch(0.955 0.030 85);
  --surface:   oklch(0.990 0.012 85);
  --surface-2: oklch(0.925 0.035 85);
  --line:      oklch(0.850 0.040 85);
  --ink:       oklch(0.260 0.050 210);
  --ink-2:     oklch(0.420 0.050 210);
  --mute:      oklch(0.560 0.040 200);
  --acc:       oklch(0.600 0.150 55);
  --acc-soft:  oklch(0.520 0.140 55);
  --on-acc:    oklch(0.990 0.010 85);
  --neg:       oklch(0.560 0.200 30);
  --glow: 0.07;
}
[data-game="naufrages"] h1,[data-game="naufrages"] .banner{font-family:var(--font-d);font-weight:400}
.g-naufrages .gname{font-family:"Chewy","Bricolage Grotesque",sans-serif;font-weight:400;font-size:27px;letter-spacing:.01em;color:oklch(0.84 0.14 75)}
[data-theme="light"] .g-naufrages .gname{color:oklch(0.55 0.15 55)}
.g-naufrages{background:oklch(0.245 0.048 205);border-color:oklch(0.35 0.05 205)}
.g-naufrages[aria-pressed="true"]{border-color:oklch(0.84 0.14 75);background:oklch(0.285 0.052 205)}
[data-theme="light"] .g-naufrages{background:oklch(0.975 0.02 85);border-color:oklch(0.87 0.035 85)}
[data-theme="light"] .g-naufrages[aria-pressed="true"]{border-color:oklch(0.6 0.15 55);background:oklch(0.94 0.04 85)}
.island{position:relative;display:block;width:54px;height:52px;border-radius:50%;background:linear-gradient(oklch(0.72 0.1 220) 0 58%, oklch(0.55 0.1 215) 58%);overflow:hidden;box-shadow:0 2px 6px oklch(0 0 0/.35)}
.island-sun{position:absolute;right:8px;top:7px;width:12px;height:12px;border-radius:50%;background:oklch(0.9 0.15 90)}
.island::after{content:"";position:absolute;left:8px;right:14px;bottom:15px;height:10px;border-radius:50%;background:oklch(0.86 0.08 85)}
.island-palm{position:absolute;left:12px;bottom:17px;font-style:normal;font-size:20px;line-height:1;z-index:1}
.island-raft{position:absolute;right:6px;bottom:9px;width:16px;height:5px;border-radius:2px;background:oklch(0.55 0.08 60);transition:transform .8s var(--ease)}
.gcard[aria-pressed="true"] .island-raft{transform:translateX(6px)}

.nf-camp{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:12px 14px;display:flex;flex-direction:column;gap:8px}
.nf-day{display:flex;justify-content:space-between;align-items:baseline;gap:10px;flex-wrap:wrap}
.nf-weather{font:400 18px var(--font-d);color:var(--acc)}
.nf-stock{display:grid;grid-template-columns:repeat(4,1fr);gap:6px}
.nf-stock span{display:flex;flex-direction:column;align-items:center;gap:2px;padding:8px 4px;border-radius:var(--r-s);background:var(--surface-2);font-size:18px}
.nf-stock b{font:400 26px/1 var(--font-d);color:var(--ink);font-variant-numeric:tabular-nums}
.nf-stock .nf-raft{font-size:12px;color:var(--ink-2)}
.nf-need{font-size:12.5px;color:var(--mute);text-align:center}
.nf-hint{text-align:center;margin:0;color:var(--ink-2);font-size:15px}
.nf-ghost{text-align:center;margin:0;font-style:italic;color:var(--mute)}
.nf-actions{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.nf-action{display:flex;flex-direction:column;align-items:flex-start;gap:3px;text-align:left;padding:12px;border-radius:var(--r);border:1px solid var(--line);background:var(--surface);color:var(--ink);font:inherit;cursor:pointer;transition:transform .12s var(--ease),border-color .2s,background .2s}
.nf-action:active{transform:scale(.97)}
.nf-action b{font:400 19px var(--font-d)}
.nf-action small{font-size:12.5px;color:var(--ink-2);line-height:1.35}
.nf-action-icon{font-size:26px;line-height:1}
.nf-action.on{border-color:var(--acc);background:color-mix(in oklab, var(--acc) 16%, var(--surface));box-shadow:0 0 0 2px var(--acc)}
.nf-risk{display:flex;flex-wrap:wrap;gap:6px;align-items:center;justify-content:center;font-size:13.5px;color:var(--ink-2)}
.nf-risk .btn.on{background:var(--acc);border-color:var(--acc);color:var(--on-acc)}
.nf-risk-note{width:100%;text-align:center;color:var(--mute)}
.nf-wait{text-align:center;margin:0}
.nf-report{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:12px 14px;display:flex;flex-direction:column;gap:5px}
.nf-report-title{margin:0 0 4px;font:400 20px var(--font-d);color:var(--acc)}
.nf-line{margin:0;font-size:15px;color:var(--ink-2)}
.nf-line b{color:var(--ink)}
.nf-secret{color:var(--acc)}
.nf-alarm{display:flex;flex-direction:column;gap:4px;text-align:center;padding:14px;border-radius:var(--r);background:color-mix(in oklab, var(--neg) 18%, var(--surface));border:1px solid var(--neg)}
.nf-alarm b{font:400 22px var(--font-d);color:var(--neg)}
.nf-alarm span{font-size:14.5px;color:var(--ink-2)}
.nf-flash{text-align:center;padding:10px 14px;border-radius:var(--r-s);background:var(--surface-2);animation:pop .35s var(--ease)}
.nf-flash p{margin:0;font:400 19px var(--font-d)}
.nf-flash small{color:var(--mute)}
.nf-pick{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.nf-pick.small{margin-top:6px}
.nf-opt{min-height:50px;font-weight:600;background:var(--surface);border-color:var(--line);color:var(--ink);white-space:normal}
.nf-opt.on{background:var(--neg);border-color:var(--neg);color:#fff}
.nf-opt.safe{opacity:.45}
.nf-timer{height:5px;border-radius:3px;background:var(--surface-2);overflow:hidden}
.nf-timer i{display:block;height:100%;background:var(--neg);transition:width .25s linear}
.nf-ready,.nf-over{display:flex;flex-direction:column;gap:6px;text-align:center;padding:16px;border-radius:var(--r);background:var(--surface);border:2px solid var(--acc)}
.nf-ready b,.nf-over-big{margin:0;font:400 28px/1.1 var(--font-d);color:var(--acc)}
.nf-over p{margin:0;color:var(--ink-2)}
.nf-over.won{border-color:var(--pos)} .nf-over.won .nf-over-big{color:var(--pos)}
.nf-row{display:flex;flex-wrap:wrap;gap:8px;justify-content:center}
.nf-items{display:flex;flex-direction:column;gap:6px;padding:12px;border-radius:var(--r);border:1px dashed var(--acc);background:color-mix(in oklab, var(--acc) 7%, var(--surface))}
.nf-items .eyebrow{margin:0}
.nf-item{display:flex;flex-direction:column;gap:4px;padding:8px 10px;border-radius:var(--r-s);background:var(--surface)}
.nf-item b{font:400 17px var(--font-d)}
.nf-item span{font-size:13px;color:var(--ink-2)}
.nf-item .btn{align-self:flex-start}
.nf-peek{margin:0;text-align:center;font-size:15px}
.nf-people{display:grid;grid-template-columns:repeat(auto-fill,minmax(104px,1fr));gap:6px}
.nf-p{display:flex;flex-direction:column;gap:2px;padding:8px 10px;border-radius:var(--r-s);background:var(--surface);border:1px solid var(--line);min-width:0}
.nf-p.me{border-color:var(--acc)} .nf-p.dead{opacity:.45} .nf-p.win{border-color:var(--pos)} .nf-p.off{border-style:dashed}
.nf-p-name{font-weight:600;font-size:13.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.nf-p-sub{font-size:11.5px;color:var(--mute)}
.nf-log{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:3px;font-size:12.5px;color:var(--mute);text-align:center}
.nf-log li:first-child{color:var(--ink-2);font-size:13.5px}
.screen.play.naufrages{padding-bottom:40px}
.desk-side .nf-people{grid-template-columns:repeat(2,minmax(0,1fr))}
.desk-side .nf-log{text-align:left}

/* ============================================================ Mème pas vrai : noir, jaune fluo, Anton */
[data-game="memes"]{
  --bg:        oklch(0.180 0.010 290);
  --surface:   oklch(0.235 0.012 290);
  --surface-2: oklch(0.285 0.014 290);
  --line:      oklch(0.355 0.016 290);
  --ink:       oklch(0.975 0.005 100);
  --ink-2:     oklch(0.830 0.012 290);
  --mute:      oklch(0.660 0.015 290);
  --acc:       oklch(0.910 0.190 110);
  --acc-soft:  oklch(0.950 0.120 110);
  --on-acc:    oklch(0.220 0.040 120);
  --pos:       oklch(0.830 0.150 150);
  --neg:       oklch(0.680 0.200 20);
  --gold:      oklch(0.910 0.190 110);
  --glow: 0.14;
  --r: 12px; --r-s: 9px; --r-pill: 999px;
  --font-d: "Anton", Impact, "Bricolage Grotesque", sans-serif;
  --track: .01em;
}
[data-theme="light"][data-game="memes"]{
  --bg:        oklch(0.965 0.006 100);
  --surface:   oklch(0.995 0.003 100);
  --surface-2: oklch(0.925 0.008 100);
  --line:      oklch(0.860 0.010 100);
  --ink:       oklch(0.200 0.010 290);
  --ink-2:     oklch(0.400 0.012 290);
  --mute:      oklch(0.550 0.012 290);
  --acc:       oklch(0.600 0.170 300);
  --acc-soft:  oklch(0.520 0.160 300);
  --on-acc:    oklch(0.990 0.005 300);
  --glow: 0.07;
}
[data-game="memes"] h1,[data-game="memes"] .banner{font-family:var(--font-d);font-weight:400;text-transform:uppercase}
.g-memes .gname{font-family:"Anton",Impact,sans-serif;font-weight:400;font-size:26px;letter-spacing:.02em;text-transform:uppercase;color:oklch(0.91 0.19 110)}
[data-theme="light"] .g-memes .gname{color:oklch(0.52 0.16 300)}
.g-memes{background:oklch(0.21 0.012 290);border-color:oklch(0.32 0.016 290)}
.g-memes[aria-pressed="true"]{border-color:oklch(0.91 0.19 110);background:oklch(0.25 0.02 290)}
[data-theme="light"] .g-memes{background:oklch(0.98 0.004 100);border-color:oklch(0.88 0.01 100)}
[data-theme="light"] .g-memes[aria-pressed="true"]{border-color:oklch(0.6 0.17 300);background:oklch(0.95 0.02 300)}
.memeart{position:relative;display:grid;place-items:center;width:52px;height:52px;border-radius:8px;background:oklch(0.3 0.02 290);box-shadow:0 2px 6px oklch(0 0 0/.4);overflow:hidden}
.memeart b{position:absolute;top:3px;left:0;right:0;text-align:center;font:400 10px/1 "Anton",Impact,sans-serif;color:#fff;-webkit-text-stroke:.6px #000;letter-spacing:.04em}
.memeart i{font-style:normal;font-size:24px;margin-top:10px;transition:transform .35s var(--ease)}
.gcard[aria-pressed="true"] .memeart i{transform:rotate(-12deg) scale(1.15)}

.mm-head{text-align:center;display:flex;flex-direction:column;gap:8px}
.mm-prompt{margin:0;font:400 28px/1.15 var(--font-d);text-transform:uppercase;letter-spacing:.01em;color:var(--ink);padding:14px 16px;border-radius:var(--r);background:var(--surface);border:2px solid var(--acc)}
.mm-players{display:flex;gap:6px;overflow-x:auto;margin:0 -20px;padding:8px 20px 2px;scrollbar-width:none}
.mm-players::-webkit-scrollbar{display:none}
.mm-player{position:relative;flex:0 0 auto;min-width:76px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-s);padding:7px 10px;display:flex;flex-direction:column;gap:1px}
.mm-player.judge{border-color:var(--acc)} .mm-player.done{border-color:var(--pos)} .mm-player.off{opacity:.45}
.mm-player-name{font-size:13px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:110px}
.mm-player.me .mm-player-name::after{content:" (toi)";color:var(--mute);font-weight:400}
.mm-player-score{font-size:15px;color:var(--ink-2);font-variant-numeric:tabular-nums}
.mm-player-score b{color:var(--pos)}
.mm-badge{position:absolute;top:-8px;right:-3px;background:var(--acc);color:var(--on-acc);font:600 10px/1 var(--font);padding:3px 6px;border-radius:999px}
.mm-badge.ok{background:var(--pos);color:oklch(0.2 0.05 150)}
.mm-zone{display:flex;flex-direction:column;gap:10px}
.mm-hint{text-align:center;margin:0;color:var(--ink-2);font-size:15px}
.mm-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:8px}
.mm-slot{position:relative;padding:0;border:0;background:none;cursor:pointer;border-radius:10px;transition:transform .14s var(--ease)}
.mm-slot:active{transform:scale(.97)}
.mm-card{margin:0;position:relative;aspect-ratio:1;border-radius:10px;overflow:hidden;background:oklch(0.12 0.01 290);border:2px solid var(--line)}
.mm-card img,.mm-card video{width:100%;height:100%;object-fit:contain;display:block;background:oklch(0.12 0.01 290)}
.mm-gif{position:absolute;right:6px;bottom:6px;background:oklch(0 0 0/.65);color:#fff;font:700 10px/1 var(--font);padding:3px 5px;border-radius:4px;letter-spacing:.06em}
.mm-slot.chosen .mm-card{border-color:var(--acc);box-shadow:0 0 0 3px var(--acc)}
.mm-slot.mine .mm-card{opacity:.65}
.mm-slot.win .mm-card{border-color:var(--pos);box-shadow:0 0 0 3px var(--pos),0 0 22px color-mix(in oklab, var(--pos) 50%, transparent)}
.mm-tag{position:absolute;top:6px;left:6px;background:oklch(0 0 0/.7);color:#fff;font:600 11.5px/1 var(--font);padding:4px 7px;border-radius:999px}
.mm-slot.win .mm-tag{background:var(--pos);color:oklch(0.2 0.05 150)}
.mm-verdict{text-align:center}
.mm-verdict-big{margin:0;font:400 30px/1.1 var(--font-d);text-transform:uppercase;color:var(--acc)}
.mm-final{text-align:center;display:flex;flex-direction:column;align-items:center;gap:8px}
.mm-ranking{list-style:none;margin:0;padding:0;width:100%;max-width:340px;display:flex;flex-direction:column;gap:4px;counter-reset:r}
.mm-ranking li{display:flex;justify-content:space-between;padding:8px 12px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-s)}
.mm-ranking li::before{counter-increment:r;content:counter(r) ".";color:var(--mute);margin-right:8px}
.mm-ranking li span{flex:1;text-align:left}
.mm-ranking li.me{border-color:var(--acc)}
.mm-log{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:3px;font-size:13px;color:var(--mute);text-align:center}
.mm-light{position:fixed;inset:0;z-index:60;background:oklch(0.06 0.01 290/.94);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;padding:16px}
.mm-light[hidden]{display:none}
.mm-light-prompt{margin:0;max-width:640px;text-align:center;font:400 24px/1.15 "Anton",Impact,sans-serif;text-transform:uppercase;color:#fff}
.mm-light-media{max-width:100%;display:flex;justify-content:center}
.mm-light-media img,.mm-light-media video{max-width:min(100%,640px);max-height:58vh;border-radius:10px;display:block}
.mm-light-cap{margin:0;color:oklch(0.75 0.01 290);font-size:12.5px}
.mm-light-row{display:flex;gap:8px;flex-wrap:wrap;justify-content:center}
.screen.play.memes{padding-bottom:40px}
@media (min-width: 700px){ .mm-grid{grid-template-columns:repeat(3,1fr)} .mm-grid.table{grid-template-columns:repeat(3,1fr)} .mm-prompt{font-size:34px} }
@media (min-width: 1100px){ .mm-grid.hand{grid-template-columns:repeat(4,1fr)} }

/* Chromo : la table ronde */
.ch-ring{position:relative;width:100%;aspect-ratio:1/1.02;max-width:560px;margin:4px auto 0}
.ch-felt{position:absolute;inset:18% 13%;border-radius:50%;background:radial-gradient(ellipse at 50% 40%, oklch(0.42 0.09 158), oklch(0.27 0.06 160) 72%);box-shadow:inset 0 0 0 6px oklch(0.5 0.06 60),inset 0 0 0 9px oklch(0.34 0.05 60),0 14px 30px oklch(0 0 0/.45);display:grid;place-items:center}
[data-theme="light"] .ch-felt{background:radial-gradient(ellipse at 50% 40%, oklch(0.62 0.1 155), oklch(0.46 0.09 158) 72%)}
.ch-felt .ch-table{background:none;border:0;padding:0 0 22px;gap:12px}
.ch-felt .ch-color{bottom:0;color:#fff;text-shadow:0 1px 2px oklch(0 0 0/.5)}
.ch-felt .ch-card.big{width:66px;border-width:3px}
.ch-felt .ch-card.big .ch-oval b{font-size:28px}
.ch-felt .ch-card.big.ch-back .ch-oval b{font-size:12px}
.ch-felt-dir{position:absolute;top:10%;left:50%;transform:translateX(-50%);font-size:26px;line-height:1;color:oklch(0.9 0.15 92/.9);text-shadow:0 1px 3px oklch(0 0 0/.5);animation:ch-spin 6s linear infinite}
.ch-felt-dir.rev{animation-direction:reverse}
@keyframes ch-spin{to{transform:translateX(-50%) rotate(360deg)}}
.ch-seat.ring{position:absolute;transform:translate(-50%,-50%);min-width:0;max-width:31%;padding:5px 9px;z-index:2;box-shadow:0 4px 12px oklch(0 0 0/.35);text-align:center;align-items:center}
.ch-seat.ring .ch-seat-name{font-size:12px;max-width:100%;overflow:hidden;text-overflow:ellipsis}
.ch-seat.ring .ch-seat-count{font-size:11.5px}
.ch-seat.ring.now{box-shadow:0 0 0 2px var(--acc),0 0 18px color-mix(in oklab, var(--acc) 55%, transparent)}
.ch-seat.ring.me{background:color-mix(in oklab, var(--acc) 14%, var(--surface))}
.ch-ring.n7 .ch-seat.ring,.ch-ring.n8 .ch-seat.ring,.ch-ring.n9 .ch-seat.ring,.ch-ring.n10 .ch-seat.ring{padding:4px 7px}
.ch-ring.n9 .ch-seat-count,.ch-ring.n10 .ch-seat-count{font-size:10.5px}
@media (min-width: 700px){ .ch-felt .ch-card.big{width:86px} .ch-felt .ch-card.big .ch-oval b{font-size:36px} .ch-seat.ring .ch-seat-name{font-size:13.5px} .ch-seat.ring{padding:7px 12px} }
@media (prefers-reduced-motion:reduce){ .ch-felt-dir{animation:none} }
@media (min-width: 1100px){ .ch-ring{aspect-ratio:1.5/1;max-width:640px} .ch-felt{inset:16% 16%} }

/* Mirage en mode mèmes */
.mi-card.meme{background:oklch(0.12 0.01 290)}
.mi-card.meme img,.mi-card.meme video{object-fit:contain;width:100%;height:100%;display:block}
.mi-light-media{display:flex;justify-content:center;max-width:100%}
.mi-light-media img,.mi-light-media video{max-width:100%;max-height:66vh;border-radius:8px;box-shadow:0 12px 40px oklch(0 0 0/.6);border:2px solid oklch(0.93 0.03 90/.6);display:block}
.mi-offer-out video{width:100%;height:100%;object-fit:cover;display:block}
@media (min-width: 700px){ .mi-light-media img,.mi-light-media video{max-height:74vh} }

/* Naufragés : l'île, le calendrier, les cartes des naufragés */
.nf-daynum{font:400 22px var(--font-d);color:var(--ink)}
.nf-daynum b{font-weight:400;color:var(--acc);font-size:28px}
.nf-scene{display:block;width:100%;height:auto;border-radius:var(--r-s);overflow:hidden;background:#127a9a}
.nf-scene .nf-more{font:700 10px var(--font);fill:#6b4520}
.nf-raft-label{font:400 12px "Chewy",sans-serif;fill:#ffffff;paint-order:stroke;stroke:#0d4d63;stroke-width:3px}
.nf-wave{animation:nf-wave 4s ease-in-out infinite alternate}
@keyframes nf-wave{to{transform:translateX(-20px)}}
.nf-fire{transform-origin:0 10px;animation:nf-fire .9s ease-in-out infinite alternate}
@keyframes nf-fire{to{transform:scaleY(1.18) scaleX(.9)}}
.nf-sail{transform-origin:left center;animation:nf-sail 2.5s ease-in-out infinite alternate}
@keyframes nf-sail{to{transform:scaleX(1.12)}}
.nf-log-new{animation:nf-log .6s var(--ease)}
@keyframes nf-log{from{transform:translateY(-10px);opacity:0}}
.nf-scene.storm .nf-clouds{animation:nf-wave 2s ease-in-out infinite alternate}
.nf-rain{animation:nf-rain .7s linear infinite}
@keyframes nf-rain{to{transform:translateY(6px)}}
.nf-cal{display:flex;gap:4px;overflow-x:auto;scrollbar-width:none;padding-bottom:2px}
.nf-cal::-webkit-scrollbar{display:none}
.nf-cal-day{flex:0 0 auto;display:flex;flex-direction:column;align-items:center;gap:1px;min-width:34px;padding:4px 2px;border-radius:8px;background:var(--surface-2);font-size:16px;line-height:1.1}
.nf-cal-day small{font-size:9.5px;color:var(--mute);font-weight:600;letter-spacing:.03em}
.nf-cal-day.today{background:color-mix(in oklab, var(--acc) 30%, var(--surface-2));box-shadow:0 0 0 1.5px var(--acc)}
.nf-cal-day.storm{background:color-mix(in oklab, var(--neg) 35%, var(--surface-2))}
.nf-cal-day.future{opacity:.5;font:400 15px var(--font-d);color:var(--mute)}
.nf-people{display:grid;grid-template-columns:repeat(auto-fill,minmax(112px,1fr));gap:8px}
.nf-card{position:relative;display:flex;flex-direction:column;align-items:center;gap:4px;padding:12px 8px 10px;border-radius:14px;text-align:center;min-width:0;
  background:linear-gradient(170deg, oklch(0.95 0.04 85), oklch(0.86 0.06 80));color:oklch(0.28 0.05 60);box-shadow:0 4px 12px oklch(0 0 0/.3);border:2px solid oklch(0.78 0.07 70)}
.nf-card.me{border-color:var(--acc);box-shadow:0 0 0 2px var(--acc),0 4px 12px oklch(0 0 0/.3)}
.nf-card.dead{filter:grayscale(1);opacity:.55}
.nf-card.dead .nf-card-name{text-decoration:line-through}
.nf-card.sick{background:linear-gradient(170deg, oklch(0.92 0.06 130), oklch(0.8 0.08 125))}
.nf-card.win{border-color:oklch(0.7 0.15 150);background:linear-gradient(170deg, oklch(0.94 0.06 160), oklch(0.84 0.08 170))}
.nf-card.off{border-style:dashed}
.nf-avatar{width:40px;height:40px;border-radius:50%;display:grid;place-items:center;font:400 22px "Chewy",sans-serif;color:#fff;background:oklch(0.62 0.14 var(--h));box-shadow:inset 0 -3px 0 oklch(0 0 0/.15),0 2px 4px oklch(0 0 0/.25)}
.nf-card-name{font:400 16px/1.1 "Chewy",sans-serif;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.nf-card-name small{font:500 10.5px var(--font);opacity:.7}
.nf-card-state{font-size:11.5px;font-weight:600;opacity:.8}
.nf-card-items{display:flex;align-items:center;gap:2px;min-height:14px}
.nf-card-items i{width:9px;height:13px;border-radius:2px;background:repeating-linear-gradient(45deg, #b5552c 0 2px, #d97b48 2px 4px);border:1px solid #6b4520}
.nf-card-items small{font-size:10.5px;margin-left:4px;opacity:.75}
.desk-side .nf-people{grid-template-columns:repeat(2,minmax(0,1fr))}
@media (prefers-reduced-motion:reduce){ .nf-wave,.nf-fire,.nf-sail,.nf-rain,.nf-log-new,.nf-scene.storm .nf-clouds{animation:none} }


/* ============================================================ Hors Limite : noir et blanc, rouge interdit */
[data-game="limite"]{
  --bg:        oklch(0.160 0.004 20);
  --surface:   oklch(0.215 0.006 20);
  --surface-2: oklch(0.265 0.008 20);
  --line:      oklch(0.340 0.010 20);
  --ink:       oklch(0.975 0.003 90);
  --ink-2:     oklch(0.820 0.006 20);
  --mute:      oklch(0.640 0.010 20);
  --acc:       oklch(0.640 0.230 25);
  --acc-soft:  oklch(0.740 0.170 25);
  --on-acc:    oklch(0.985 0.003 90);
  --pos:       oklch(0.820 0.140 150);
  --neg:       oklch(0.640 0.230 25);
  --gold:      oklch(0.880 0.130 90);
  --glow: 0.12;
  --r: 12px; --r-s: 9px; --r-pill: 999px;
  --font-d: "Archivo Black", "Bricolage Grotesque", sans-serif;
  --track: -.01em;
}
[data-theme="light"][data-game="limite"]{
  --bg:        oklch(0.960 0.003 20);
  --surface:   oklch(0.995 0.002 20);
  --surface-2: oklch(0.920 0.004 20);
  --line:      oklch(0.850 0.006 20);
  --ink:       oklch(0.180 0.006 20);
  --ink-2:     oklch(0.380 0.008 20);
  --mute:      oklch(0.540 0.010 20);
  --acc:       oklch(0.560 0.220 25);
  --on-acc:    oklch(0.990 0.003 90);
  --glow: 0.07;
}
[data-game="limite"] h1,[data-game="limite"] .banner{font-family:var(--font-d);font-weight:400}
.g-limite .gname{font-family:"Archivo Black",sans-serif;font-weight:400;font-size:24px;letter-spacing:-.01em;color:oklch(0.97 0.003 90)}
.g-limite .gname::after{content:" 🔞";font-size:15px}
[data-theme="light"] .g-limite .gname{color:oklch(0.18 0.006 20)}
.g-limite{background:oklch(0.19 0.005 20);border-color:oklch(0.3 0.01 20)}
.g-limite[aria-pressed="true"]{border-color:oklch(0.64 0.23 25);background:oklch(0.23 0.03 25)}
[data-theme="light"] .g-limite{background:oklch(0.975 0.003 20);border-color:oklch(0.86 0.006 20)}
[data-theme="light"] .g-limite[aria-pressed="true"]{border-color:oklch(0.56 0.22 25);background:oklch(0.95 0.03 25)}
.hlart{position:relative;display:block;width:54px;height:52px}
.hlart i{position:absolute;width:26px;height:36px;border-radius:4px;font-style:normal;box-shadow:0 2px 6px oklch(0 0 0/.45);transition:transform .4s var(--ease)}
.hlart .b{left:4px;top:4px;background:oklch(0.14 0.004 20);border:1.5px solid oklch(0.5 0.01 20);color:#fff;font:700 8px/34px var(--font);text-align:center;transform:rotate(-10deg);z-index:1}
.hlart .w{left:24px;top:10px;background:#faf8f3;border:1px solid oklch(0.8 0.005 20)}
.hlart .w+.w{left:20px;top:14px;transform:rotate(8deg)}
.gcard[aria-pressed="true"] .hlart .b{transform:rotate(-18deg) translateX(-4px)}
.gcard[aria-pressed="true"] .hlart .w+.w{transform:rotate(16deg) translateX(4px)}

.hl-head{text-align:center}
.hl-black{position:relative;background:oklch(0.12 0.004 20);color:#fff;border-radius:14px;padding:20px 20px 36px;box-shadow:0 10px 26px oklch(0 0 0/.45);border:1px solid oklch(0.32 0.01 20)}
.hl-black p{margin:0;font:400 23px/1.3 "Archivo Black",sans-serif;letter-spacing:-.01em}
.hl-blank{display:inline-block;width:3.2em;border-bottom:3px solid #fff;margin:0 .15em;vertical-align:-.1em}
.hl-pick{position:absolute;right:14px;bottom:10px;font:700 12px var(--font);color:oklch(0.8 0.15 25);letter-spacing:.04em;text-transform:uppercase}
.hl-brand{position:absolute;left:18px;bottom:11px;font:400 11px "Archivo Black",sans-serif;color:oklch(0.6 0.01 20);letter-spacing:.03em}
.hl-players{display:flex;gap:6px;overflow-x:auto;margin:0 -20px;padding:8px 20px 2px;scrollbar-width:none}
.hl-players::-webkit-scrollbar{display:none}
.hl-player{position:relative;flex:0 0 auto;min-width:76px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-s);padding:7px 10px;display:flex;flex-direction:column;gap:1px}
.hl-player.judge{border-color:var(--acc)} .hl-player.done{border-color:var(--pos)} .hl-player.off{opacity:.45}
.hl-player-name{font-size:13px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:110px}
.hl-player.me .hl-player-name::after{content:" (toi)";color:var(--mute);font-weight:400}
.hl-player-score{font-size:15px;color:var(--ink-2);font-variant-numeric:tabular-nums}
.hl-player-score b{color:var(--pos)}
.hl-badge{position:absolute;top:-8px;right:-3px;background:var(--acc);color:var(--on-acc);font:600 10px/1 var(--font);padding:3px 6px;border-radius:999px}
.hl-badge.ok{background:var(--pos);color:oklch(0.2 0.05 150)}
.hl-zone{display:flex;flex-direction:column;gap:10px}
.hl-hint{text-align:center;margin:0;color:var(--ink-2);font-size:15px}
.hl-preview{padding:12px 14px;border-radius:var(--r-s);background:var(--surface);border:1px dashed var(--line);font-size:16px;line-height:1.4;color:var(--ink-2)}
.hl-fill{color:var(--acc-soft);font-weight:800}
.hl-hand{display:grid;grid-template-columns:repeat(2,1fr);gap:8px}
.hl-white{position:relative;text-align:left;min-height:86px;padding:12px 12px 22px;border-radius:12px;border:1px solid oklch(0.82 0.005 20);background:#faf8f3;color:oklch(0.18 0.006 20);font:800 15px/1.25 var(--font);cursor:pointer;box-shadow:0 3px 8px oklch(0 0 0/.3);transition:transform .12s var(--ease),box-shadow .2s}
.hl-white::after{content:"Hors Limite";position:absolute;left:12px;bottom:6px;font:400 9px "Archivo Black",sans-serif;color:oklch(0.6 0.005 20)}
.hl-white.spicy::after{content:"Hors Limite · 🌶"}
.hl-white:active{transform:scale(.97)}
.hl-white.on{box-shadow:0 0 0 3px var(--acc),0 6px 14px oklch(0 0 0/.35);transform:translateY(-3px)}
.hl-white:disabled{cursor:default;opacity:.55}
.hl-white.on:disabled{opacity:1}
.hl-num{position:absolute;top:-8px;right:-6px;width:24px;height:24px;border-radius:50%;background:var(--acc);color:#fff;font:700 13px/24px var(--font);text-align:center}
.hl-answers{display:flex;flex-direction:column;gap:8px}
.hl-answer{position:relative;text-align:left;padding:14px 14px 26px;border-radius:12px;background:var(--surface);border:1px solid var(--line);color:var(--ink);font:inherit;cursor:default}
button.hl-answer{cursor:pointer;transition:transform .12s var(--ease),border-color .2s}
button.hl-answer:active{transform:scale(.985)}
.hl-answer p{margin:0;font-size:17px;line-height:1.4}
.hl-answer.mine{opacity:.6}
.hl-answer.on{border-color:var(--acc);box-shadow:0 0 0 2px var(--acc)}
.hl-answer.win{border-color:var(--pos);box-shadow:0 0 0 2px var(--pos)}
.hl-owner{position:absolute;right:12px;bottom:7px;font-size:12px;color:var(--mute);font-weight:600}
.hl-answer.win .hl-owner{color:var(--pos)}
.hl-verdict{margin:0;text-align:center;font:400 26px/1.15 "Archivo Black",sans-serif;color:var(--acc)}
.hl-final{text-align:center;display:flex;flex-direction:column;align-items:center;gap:8px}
.hl-ranking{list-style:none;margin:0;padding:0;width:100%;max-width:340px;display:flex;flex-direction:column;gap:4px;counter-reset:r}
.hl-ranking li{display:flex;justify-content:space-between;padding:8px 12px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-s)}
.hl-ranking li::before{counter-increment:r;content:counter(r) ".";color:var(--mute);margin-right:8px}
.hl-ranking li span{flex:1;text-align:left}
.hl-ranking li.me{border-color:var(--acc)}
.hl-log{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:3px;font-size:13px;color:var(--mute);text-align:center}
.screen.play.limite{padding-bottom:40px}
@media (min-width: 700px){ .hl-hand{grid-template-columns:repeat(3,1fr)} .hl-black p{font-size:28px} }
@media (min-width: 1100px){ .hl-hand{grid-template-columns:repeat(5,1fr)} }

/* podiums des parties du salon */
#s-lobby .lobby-history{order:2}
.lobby-history{display:flex;flex-direction:column;gap:10px}
.hist-head{display:flex;align-items:baseline;justify-content:space-between;gap:10px}
.hist-head .section-title{margin:0}
.hist-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:8px}
.hist-card{display:flex;flex-direction:column;gap:8px;padding:12px 12px 10px;border-radius:var(--r);border:1px solid var(--line);background:var(--surface)}
.hist-top{display:flex;align-items:baseline;justify-content:space-between;gap:8px}
.hist-top .gname{font-size:18px}
.hist-top small{color:var(--mute);font-size:11.5px;white-space:nowrap}
.podium{display:grid;grid-template-columns:repeat(3,1fr);align-items:end;gap:4px}
.pod{display:flex;flex-direction:column;align-items:center;gap:2px;min-width:0}
.pod-name{font-size:12.5px;font-weight:600;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pod-score{font-size:11px;color:var(--mute);font-variant-numeric:tabular-nums}
.pod-step{width:100%;display:grid;place-items:center;border-radius:6px 6px 0 0;font-size:18px;background:var(--surface-2)}
.pod1 .pod-step{height:46px;background:color-mix(in oklab, oklch(0.85 0.14 90) 45%, var(--surface-2))}
.pod2 .pod-step{height:32px;background:color-mix(in oklab, oklch(0.82 0.02 250) 40%, var(--surface-2))}
.pod3 .pod-step{height:22px;background:color-mix(in oklab, oklch(0.62 0.1 55) 40%, var(--surface-2))}
.hist-note{margin:0;font-size:12.5px;color:var(--ink-2)}
.hist-winners{margin:0;font-size:13.5px;font-weight:600}
@media (min-width: 1100px){ .lobby-side .hist-list{grid-template-columns:1fr} }

/* ============================================================ Solitaire : tapis bleu canard, cartes à l'ancienne */
[data-game="solitaire"]{
  --bg:        oklch(0.235 0.045 215);
  --surface:   oklch(0.285 0.050 215);
  --surface-2: oklch(0.335 0.055 215);
  --line:      oklch(0.400 0.055 215);
  --ink:       oklch(0.970 0.012 95);
  --ink-2:     oklch(0.840 0.025 200);
  --mute:      oklch(0.680 0.035 205);
  --acc:       oklch(0.850 0.120 85);
  --acc-soft:  oklch(0.910 0.080 88);
  --on-acc:    oklch(0.240 0.040 70);
  --pos:       oklch(0.830 0.140 150);
  --neg:       oklch(0.660 0.200 27);
  --gold:      oklch(0.850 0.120 85);
  --glow: 0.12;
  --r: 14px; --r-s: 10px; --r-pill: 999px;
  --font-d: "Fraunces", "Bricolage Grotesque", serif;
  --track: -.01em;
}
[data-theme="light"][data-game="solitaire"]{
  --bg:        oklch(0.950 0.020 205);
  --surface:   oklch(0.990 0.008 200);
  --surface-2: oklch(0.920 0.025 205);
  --line:      oklch(0.850 0.030 205);
  --ink:       oklch(0.240 0.040 220);
  --ink-2:     oklch(0.420 0.040 215);
  --mute:      oklch(0.560 0.035 215);
  --acc:       oklch(0.560 0.120 65);
  --acc-soft:  oklch(0.480 0.110 60);
  --on-acc:    oklch(0.990 0.010 90);
  --glow: 0.07;
}
[data-game="solitaire"] h1,[data-game="solitaire"] .banner{font-family:var(--font-d)}
.g-solitaire .gname{font-family:"Fraunces",serif;font-weight:700;font-size:23px;color:oklch(0.94 0.04 90)}
[data-theme="light"] .g-solitaire .gname{color:oklch(0.3 0.06 220)}
.g-solitaire{background:oklch(0.25 0.045 215);border-color:oklch(0.36 0.05 215)}
.g-solitaire[aria-pressed="true"]{border-color:oklch(0.85 0.12 85);background:oklch(0.29 0.055 215)}
[data-theme="light"] .g-solitaire{background:oklch(0.965 0.018 205);border-color:oklch(0.86 0.03 205)}
[data-theme="light"] .g-solitaire[aria-pressed="true"]{border-color:oklch(0.56 0.12 65);background:oklch(0.94 0.035 205)}
.soart{position:relative;display:block;width:54px;height:52px}
.soart i{position:absolute;top:8px;width:24px;height:34px;border-radius:4px;background:#faf8f3;border:1px solid oklch(0.8 0.01 90);box-shadow:0 2px 6px oklch(0 0 0/.4);font:700 11px/1 "Alfa Slab One",serif;font-style:normal;color:oklch(0.2 0.02 260);padding:3px 0 0 4px;transition:transform .4s var(--ease)}
.soart i:nth-child(1){left:2px;transform:rotate(-12deg)}
.soart i:nth-child(2){left:15px;top:5px;color:oklch(0.55 0.21 25)}
.soart i:nth-child(3){left:28px;transform:rotate(12deg)}
.gcard[aria-pressed="true"] .soart i:nth-child(1){transform:rotate(-20deg) translateX(-3px)}
.gcard[aria-pressed="true"] .soart i:nth-child(3){transform:rotate(20deg) translateX(3px)}

.so-race{display:grid;gap:5px}
.so-runner{display:grid;grid-template-columns:18px minmax(0,1fr) 34% auto;align-items:center;gap:8px;font-size:13px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-s);padding:6px 10px}
.so-runner.me{border-color:var(--acc);background:color-mix(in oklab, var(--acc) 10%, var(--surface))}
.so-runner.done .so-count{color:var(--pos);font-weight:700}
.so-runner.off{opacity:.45}
.so-rank{color:var(--mute);font-variant-numeric:tabular-nums;text-align:center}
.so-name{font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.so-bar{height:8px;border-radius:99px;background:var(--surface-2);overflow:hidden}
.so-bar i{display:block;height:100%;border-radius:inherit;background:var(--acc);transition:width .45s var(--ease)}
.so-count{font-variant-numeric:tabular-nums;color:var(--ink-2);font-size:12.5px;white-space:nowrap}
.so-clock{margin:2px 0 0;text-align:center;font-variant-numeric:tabular-nums;color:var(--ink-2);font-size:14px}

.so-board{width:100%;max-width:640px;margin:0 auto;user-select:none;-webkit-user-select:none;touch-action:manipulation}
.so-board.frozen{opacity:.55;pointer-events:none}
.so-top,.so-tab{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:4px}
.so-tab{margin-top:12px;align-items:start}
.so-gap{display:none}
.so-slot{position:relative;aspect-ratio:5/7.2;border-radius:6px;border:1.5px dashed color-mix(in oklab, var(--ink) 22%, transparent);background:color-mix(in oklab, var(--ink) 4%, transparent);display:grid;place-items:center;padding:0;min-height:0;transition:box-shadow .2s}
.so-stock{cursor:pointer;color:inherit;font:inherit}
.so-stock .so-card{position:absolute;inset:0}
.so-left{position:absolute;right:-3px;bottom:-5px;z-index:2;min-width:20px;padding:1px 5px;border-radius:99px;background:var(--acc);color:var(--on-acc);font-size:10.5px;font-weight:700;font-variant-numeric:tabular-nums}
.so-recycle{font-size:24px;color:var(--mute)}
.so-waste{grid-column:span 2;aspect-ratio:auto;align-self:stretch;border:0;background:none;place-items:stretch}
.so-waste .so-card,.so-waste .so-card.km-card{position:absolute;top:0;width:calc(50% - 2px)}
.so-waste .fan0{left:0}.so-waste .fan1{left:22%}.so-waste .fan2{left:44%}
.so-found.hot,.so-col.hot{box-shadow:0 0 0 2px var(--acc),0 0 16px color-mix(in oklab, var(--acc) 50%, transparent)}
.so-suit{font-size:22px;color:color-mix(in oklab, var(--ink) 30%, transparent)}
.so-found .so-card{position:absolute;inset:0}
.so-col{position:relative;display:flex;flex-direction:column;border-radius:6px;min-height:40px;padding-bottom:2px}
.so-empty{display:grid;place-items:center;aspect-ratio:5/7.2;border-radius:6px;border:1.5px dashed color-mix(in oklab, var(--ink) 22%, transparent);color:color-mix(in oklab, var(--ink) 30%, transparent);font:400 16px "Alfa Slab One",serif}
.so-card.km-card{width:100%;border-radius:5px;box-shadow:0 1px 3px oklch(0 0 0/.35);cursor:pointer}
.so-card .km-corner{top:3px;left:4px}
.so-card .km-corner b{font-size:12px}
.so-card .km-corner i{font-size:10px}
.so-card .km-pip{font-size:22px;padding-top:10px}
.so-card .km-corner.bottom{display:none}
.so-card.back{width:100%;aspect-ratio:5/7.2;border-radius:5px;border:2px solid oklch(0.97 0.01 90);background:repeating-linear-gradient(45deg, oklch(0.5 0.14 25) 0 4px, oklch(0.42 0.13 25) 4px 8px);box-shadow:0 1px 3px oklch(0 0 0/.35)}
.so-col .so-card+.so-card{margin-top:-104%}
.so-col .so-card.down+.so-card{margin-top:-126%}
.so-card.sel{box-shadow:0 0 0 2px var(--acc),0 6px 14px oklch(0 0 0/.4);z-index:1}
.so-card.km-card:active{transform:none}
.so-card.km-card{touch-action:none}
.so-card.dragging{z-index:50;pointer-events:none;transition:none;box-shadow:0 14px 28px oklch(0 0 0/.45),0 0 0 2px var(--acc)}
.so-col .so-card.dragging{position:relative}
.so-tools{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:8px;margin-top:10px}
.so-moves{color:var(--mute);font-size:13px;font-variant-numeric:tabular-nums}
.so-hint{margin:0;text-align:center;color:var(--acc-soft);font-size:13px}
.so-win{display:flex;flex-direction:column;align-items:center;gap:2px;padding:14px;border-radius:var(--r);background:color-mix(in oklab, var(--acc) 14%, var(--surface));border:1px solid color-mix(in oklab, var(--acc) 45%, var(--line));text-align:center}
.so-win b{font-family:var(--font-d);font-size:22px}
.so-win span{color:var(--ink-2);font-size:14px}
.so-end{align-self:center}
@media (min-width: 700px){ .so-top,.so-tab{gap:8px} .so-card .km-corner b{font-size:16px} .so-card .km-corner i{font-size:13px} .so-card .km-pip{font-size:32px} .so-col .so-card+.so-card{margin-top:-108%} .so-col .so-card.down+.so-card{margin-top:-130%} }

/* ============================================================ Poker : salle de jeu, noir, or et tapis vert */
[data-game="poker"]{
  --bg:        oklch(0.180 0.012 150);
  --surface:   oklch(0.230 0.016 150);
  --surface-2: oklch(0.280 0.020 150);
  --line:      oklch(0.350 0.022 150);
  --ink:       oklch(0.965 0.015 90);
  --ink-2:     oklch(0.830 0.020 100);
  --mute:      oklch(0.660 0.025 120);
  --acc:       oklch(0.820 0.130 82);
  --acc-soft:  oklch(0.890 0.090 85);
  --on-acc:    oklch(0.220 0.030 70);
  --pos:       oklch(0.820 0.150 150);
  --neg:       oklch(0.640 0.210 25);
  --gold:      oklch(0.820 0.130 82);
  --glow: 0.13;
  --r: 14px; --r-s: 10px; --r-pill: 999px;
  --font-d: "Anton", "Bricolage Grotesque", sans-serif;
  --track: .01em;
}
[data-theme="light"][data-game="poker"]{
  --bg:        oklch(0.955 0.012 110);
  --surface:   oklch(0.992 0.006 100);
  --surface-2: oklch(0.925 0.014 120);
  --line:      oklch(0.850 0.018 120);
  --ink:       oklch(0.220 0.020 150);
  --ink-2:     oklch(0.400 0.022 150);
  --mute:      oklch(0.550 0.022 140);
  --acc:       oklch(0.580 0.120 70);
  --acc-soft:  oklch(0.500 0.110 65);
  --on-acc:    oklch(0.990 0.010 90);
  --glow: 0.07;
}
[data-game="poker"] h1,[data-game="poker"] .banner{font-family:var(--font-d);font-weight:400}
.g-poker .gname{font-family:"Anton",sans-serif;font-weight:400;font-size:25px;letter-spacing:.02em;color:oklch(0.86 0.12 82)}
[data-theme="light"] .g-poker .gname{color:oklch(0.45 0.1 65)}
.g-poker{background:oklch(0.2 0.014 150);border-color:oklch(0.32 0.03 150)}
.g-poker[aria-pressed="true"]{border-color:oklch(0.82 0.13 82);background:oklch(0.24 0.03 150)}
[data-theme="light"] .g-poker{background:oklch(0.97 0.01 110);border-color:oklch(0.86 0.02 120)}
[data-theme="light"] .g-poker[aria-pressed="true"]{border-color:oklch(0.58 0.12 70);background:oklch(0.94 0.03 100)}
.pkart{position:relative;display:block;width:54px;height:52px}
.pkart i{position:absolute;left:11px;width:32px;height:10px;border-radius:50%;border:2px dashed oklch(0.97 0.01 90/.8);box-shadow:0 2px 0 oklch(0 0 0/.35);transition:transform .4s var(--ease)}
.pkart i:nth-child(1){top:32px;background:oklch(0.55 0.2 25)}
.pkart i:nth-child(2){top:23px;background:oklch(0.25 0.02 260)}
.pkart i:nth-child(3){top:14px;background:oklch(0.62 0.15 150)}
.gcard[aria-pressed="true"] .pkart i:nth-child(3){transform:translate(6px,-6px) rotate(-8deg)}

.pk-head{display:flex;justify-content:space-between;align-items:baseline;gap:10px;flex-wrap:wrap}
.pk-street{font-family:var(--font-d);font-size:18px;letter-spacing:.03em;color:var(--acc)}
.pk-ring{position:relative;width:100%;aspect-ratio:1/1.18;max-width:560px;margin:2px auto 0}
.pk-felt{position:absolute;inset:24% 9%;border-radius:50%;background:radial-gradient(ellipse at 50% 40%, oklch(0.45 0.1 155), oklch(0.28 0.07 158) 74%);box-shadow:inset 0 0 0 6px oklch(0.42 0.07 50),inset 0 0 0 9px oklch(0.3 0.05 50),0 14px 30px oklch(0 0 0/.45);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px}
[data-theme="light"] .pk-felt{background:radial-gradient(ellipse at 50% 40%, oklch(0.6 0.11 155), oklch(0.45 0.09 158) 74%)}
.pk-board{display:flex;align-items:flex-start;gap:4px;position:relative;z-index:3}
.pk-board>.pk-card{box-sizing:border-box;flex:0 0 auto;height:auto;min-height:0;padding:0;margin:0}
.pk-pot{position:absolute;left:50%;bottom:17%;transform:translateX(-50%);white-space:nowrap;color:#fff;font-size:13px;text-shadow:0 1px 2px oklch(0 0 0/.5);background:oklch(0 0 0/.28);padding:2px 12px;border-radius:99px;font-variant-numeric:tabular-nums}
.pk-pot b{font-size:15px}
.pk-card.km-card{width:36px;border-radius:5px;cursor:default}
.pk-card .km-corner{top:3px;left:4px}
.pk-card .km-corner b{font-size:12px}
.pk-card .km-corner i{font-size:10px}
.pk-card .km-pip{font-size:20px;padding-top:10px}
.pk-card .km-corner.bottom{display:none}
.pk-card.back{width:36px;aspect-ratio:5/7.2;border-radius:5px;border:2px solid oklch(0.97 0.01 90);background:repeating-linear-gradient(45deg, oklch(0.45 0.15 260) 0 4px, oklch(0.36 0.13 260) 4px 8px);flex:0 0 auto}
.pk-card.pk-empty{width:36px;aspect-ratio:5/7.2;border-radius:5px;border:1.5px dashed oklch(1 0 0/.3)}
.pk-card.mini,.pk-card.back.mini{width:17px;border-radius:3px;border-width:1px}
.pk-card.mini .km-corner{top:1px;left:2px}
.pk-card.mini .km-corner b{font-size:9px}
.pk-card.mini .km-corner i{font-size:7px}
.pk-card.mini .km-pip{display:none}
.pk-card.big.km-card{width:64px}
.pk-card.big .km-corner b{font-size:17px}
.pk-card.big .km-corner i{font-size:13px}
.pk-card.big .km-pip{font-size:30px}
.pk-card.big .km-corner.bottom{display:flex}
.pk-seat{position:absolute;transform:translate(-50%,-50%);z-index:2;max-width:29%;display:flex;flex-direction:column;align-items:center;gap:1px;padding:5px 9px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-s);box-shadow:0 4px 12px oklch(0 0 0/.35);text-align:center;transition:box-shadow .2s,opacity .2s}
.pk-seat.turn{border-color:var(--acc);box-shadow:0 0 0 2px var(--acc),0 0 18px color-mix(in oklab, var(--acc) 55%, transparent)}
.pk-seat.me{background:color-mix(in oklab, var(--acc) 13%, var(--surface))}
.pk-seat.me .pk-name::after{content:" (toi)";color:var(--mute);font-weight:400}
.pk-seat.folded{opacity:.55}
.pk-seat.out{opacity:.35}
.pk-seat.off .pk-name{text-decoration:line-through}
.pk-seat.won{box-shadow:0 0 0 2px var(--pos),0 0 18px color-mix(in oklab, var(--pos) 50%, transparent)}
.pk-name{font-size:12px;font-weight:600;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pk-stack{font-size:11.5px;color:var(--ink-2);font-variant-numeric:tabular-nums}
.pk-hole{display:flex;gap:2px;margin-top:2px}
.pk-bet{font-size:11px;font-weight:700;color:var(--on-acc);background:var(--acc);border-radius:99px;padding:0 7px;margin-top:2px;font-variant-numeric:tabular-nums}
.pk-bet::before{content:"● ";opacity:.6}
.pk-btn{position:absolute;top:-7px;right:-7px;width:19px;height:19px;border-radius:50%;background:#fff;color:#111;font:700 10px/19px var(--font);box-shadow:0 1px 3px oklch(0 0 0/.5)}
.pk-tag{font-size:10.5px;color:var(--mute);text-transform:uppercase;letter-spacing:.05em}
.pk-tag.win{color:var(--pos);font-weight:700;font-size:12px}
.pk-mine{display:flex;align-items:center;justify-content:center;gap:14px;margin-top:4px}
.pk-mine.folded .pk-myhole{opacity:.45;filter:grayscale(.6)}
.pk-myhole{display:flex;gap:6px}
.pk-myinfo{display:flex;flex-direction:column;gap:2px;font-variant-numeric:tabular-nums}
.pk-myinfo b{font-size:18px}
.pk-myinfo span{color:var(--acc-soft);font-size:13.5px}
.pk-actions{display:grid;grid-template-columns:repeat(auto-fit,minmax(90px,1fr));gap:8px}
.pk-actions .btn{min-height:50px}
.pk-size{display:flex;flex-direction:column;gap:8px}
.pk-size input[type=range]{width:100%;appearance:none;height:6px;border-radius:3px;background:var(--line);padding:0;min-height:0;border:0;cursor:pointer}
.pk-size input[type=range]::-webkit-slider-thumb{appearance:none;width:24px;height:24px;border-radius:50%;background:var(--acc);border:3px solid var(--surface)}
.pk-size input[type=range]::-moz-range-thumb{width:24px;height:24px;border-radius:50%;background:var(--acc);border:3px solid var(--surface)}
.pk-quick{display:grid;grid-template-columns:repeat(4,1fr);gap:6px}
.pk-quick .btn{border-color:var(--line)}
.pk-hint{margin:0;text-align:center;color:var(--ink-2);font-size:13.5px}
.pk-result{padding:12px 14px;border-radius:var(--r);background:var(--surface);border:1px solid var(--line);display:flex;flex-direction:column;gap:8px}
.pk-result-big{margin:0;font-family:var(--font-d);font-size:22px;letter-spacing:.02em;text-align:center}
.pk-show{display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"n c" "h c";column-gap:10px;align-items:center;padding:6px 8px;border-radius:var(--r-s);background:var(--surface-2)}
.pk-show.win{background:color-mix(in oklab, var(--pos) 16%, var(--surface-2))}
.pk-show-name{grid-area:n;font-weight:600;font-size:14px}
.pk-show-hand{grid-area:h;font-size:12.5px;color:var(--ink-2)}
.pk-show-cards{grid-area:c;display:flex;gap:3px}
.pk-show .pk-card.mini{width:28px}
.pk-show .pk-card.mini .km-corner b{font-size:11px}
.pk-ranking{margin:0;padding-left:22px;display:grid;gap:4px}
.pk-ranking li{display:flex;justify-content:space-between;gap:10px;font-variant-numeric:tabular-nums}
.pk-log{list-style:none;margin:0;padding:0;display:grid;gap:3px;font-size:12.5px;color:var(--mute)}
.pk-log li:first-child{color:var(--ink-2)}
@media (min-width: 700px){ .pk-card.km-card,.pk-card.back,.pk-card.pk-empty{width:54px} .pk-card .km-corner b{font-size:16px} .pk-card .km-pip{font-size:28px} .pk-card.mini,.pk-card.back.mini{width:24px} .pk-card.big.km-card{width:80px} .pk-name{font-size:13.5px} .pk-seat{padding:7px 12px} .pk-board{gap:6px} }
@media (min-width: 1100px){ .pk-ring{aspect-ratio:1.45/1;max-width:680px} .pk-felt{inset:18% 15%} }
.pk-ring.many .pk-seat{max-width:23%;padding:3px 7px}
.pk-ring.many .pk-name{font-size:11px}
.pk-ring.many .pk-stack{font-size:10.5px}
.pk-ring.many .pk-card.mini,.pk-ring.many .pk-card.back.mini{width:13px}
.pk-ring.many .pk-tag{font-size:9.5px}
@media (min-width: 700px){ .pk-ring.many .pk-seat{max-width:21%;padding:5px 9px} .pk-ring.many .pk-name{font-size:12.5px} .pk-ring.many .pk-card.mini,.pk-ring.many .pk-card.back.mini{width:18px} }

/* ============================================================ familles de jeux */
.gfilters{display:flex;gap:7px;overflow-x:auto;scrollbar-width:none;margin:0 -20px 12px;padding:2px 20px 4px;scroll-padding-inline:20px;scroll-snap-type:x proximity}
.gfilters::-webkit-scrollbar{display:none}
.gfilter{flex:0 0 auto;scroll-snap-align:start;font:inherit;font-size:13.5px;font-weight:600;color:var(--ink-2);background:var(--surface);border:1px solid var(--line);border-radius:var(--r-pill);padding:8px 14px;min-height:38px;cursor:pointer;white-space:nowrap;transition:background .15s,border-color .15s,color .15s}
.gfilter small{font-weight:500;color:var(--mute);margin-left:3px;font-variant-numeric:tabular-nums}
.gfilter[aria-pressed="true"]{background:color-mix(in oklab, var(--acc) 18%, var(--surface));border-color:var(--acc);color:var(--ink)}
.gfilter:active{transform:scale(.97)}
.gfam{display:flex;flex-direction:column;gap:1px;padding:14px 2px 2px}
.games > .gfam:first-child,.games > [hidden] + .gfam:not([hidden]){padding-top:2px}
.gfam-name{font-family:var(--font-d);font-weight:800;font-size:17px;letter-spacing:var(--track)}
.gfam-desc{color:var(--mute);font-size:13px}
@media (min-width: 760px){ .gfam{grid-column:1/-1} .gfilters{flex-wrap:wrap;overflow:visible;margin:0 0 14px;padding:0} }

/* ============================================================ choix du thème */
.theme-pop{position:fixed;z-index:22;top:calc(var(--bar-h) + env(safe-area-inset-top) + 6px);right:10px;width:min(270px,calc(100vw - 20px));display:flex;flex-direction:column;gap:4px;padding:10px;border-radius:var(--r);background:var(--surface);border:1px solid var(--line);box-shadow:0 16px 40px -18px oklch(0 0 0 / .7);animation:pop .2s var(--ease)}
.theme-pop-title{margin:2px 6px 4px;font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--mute)}
.theme-opt{display:flex;align-items:center;gap:12px;text-align:left;font:inherit;color:var(--ink);background:none;border:1px solid transparent;border-radius:var(--r-s);padding:8px 10px;min-height:48px;cursor:pointer}
.theme-opt:hover{background:var(--surface-2)}
.theme-opt[aria-pressed="true"]{border-color:var(--acc);background:color-mix(in oklab, var(--acc) 12%, var(--surface))}
.theme-opt b{display:block;font-size:14.5px}
.theme-opt small{display:block;color:var(--mute);font-size:12.5px}
.theme-sw{flex:0 0 auto;width:30px;height:30px;border-radius:50%;box-shadow:inset 0 0 0 1px oklch(0.5 0 0/.35);display:grid;place-items:center}
.theme-sw i{width:12px;height:12px;border-radius:50%}

/* ============================================================ Diapason : bleu nuit, cadran crème, cible jaune-orange-bleu */
[data-game="diapason"]{
  --bg:        oklch(0.205 0.045 255);
  --surface:   oklch(0.255 0.050 255);
  --surface-2: oklch(0.305 0.055 255);
  --line:      oklch(0.370 0.055 255);
  --ink:       oklch(0.965 0.018 85);
  --ink-2:     oklch(0.830 0.030 230);
  --mute:      oklch(0.670 0.040 240);
  --acc:       oklch(0.740 0.160 45);
  --acc-soft:  oklch(0.830 0.120 60);
  --on-acc:    oklch(0.220 0.050 40);
  --pos:       oklch(0.820 0.140 160);
  --neg:       oklch(0.660 0.210 27);
  --gold:      oklch(0.850 0.140 85);
  --glow: 0.14;
  --r: 18px; --r-s: 12px; --r-pill: 999px;
  --font-d: "Fredoka", "Bricolage Grotesque", sans-serif;
  --track: 0;
  --dp-face: oklch(0.935 0.035 85);
  --dp-rim:  oklch(0.300 0.060 255);
  --dp-l:    oklch(0.620 0.110 200);
  --dp-r:    oklch(0.680 0.170 35);
}
[data-theme="light"][data-game="diapason"]{
  --bg:        oklch(0.950 0.022 85);
  --surface:   oklch(0.990 0.010 85);
  --surface-2: oklch(0.920 0.028 85);
  --line:      oklch(0.860 0.035 85);
  --ink:       oklch(0.240 0.050 255);
  --ink-2:     oklch(0.420 0.050 255);
  --mute:      oklch(0.560 0.040 250);
  --acc:       oklch(0.620 0.170 40);
  --acc-soft:  oklch(0.540 0.150 40);
  --on-acc:    oklch(0.990 0.010 85);
  --glow: 0.08;
  --dp-face: oklch(0.975 0.020 85);
  --dp-rim:  oklch(0.290 0.060 255);
}
[data-game="diapason"] h1,[data-game="diapason"] .banner{font-family:var(--font-d);font-weight:700}
.g-diapason .gname{font-family:"Fredoka",sans-serif;font-weight:700;font-size:25px;letter-spacing:0;color:oklch(0.8 0.15 50)}
[data-theme="light"] .g-diapason .gname{color:oklch(0.52 0.17 40)}
.g-diapason{background:oklch(0.22 0.045 255);border-color:oklch(0.33 0.05 255)}
.g-diapason[aria-pressed="true"]{border-color:oklch(0.74 0.16 45);background:oklch(0.26 0.055 255)}
[data-theme="light"] .g-diapason{background:oklch(0.97 0.018 85);border-color:oklch(0.87 0.03 85)}
[data-theme="light"] .g-diapason[aria-pressed="true"]{border-color:oklch(0.62 0.17 40);background:oklch(0.95 0.035 70)}
.dpart{width:54px;height:31px;overflow:visible}
.dpart-needle{transform-origin:30px 32px;transition:transform .6s var(--ease)}
.gcard[aria-pressed="true"] .dpart-needle{transform:rotate(58deg)}

.dp-head{display:flex;justify-content:space-between;align-items:baseline;gap:10px;flex-wrap:wrap}
.dp-psy{font-size:13.5px;color:var(--ink-2)}
.dp-psy b{color:var(--acc-soft)}
.dp-teams{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.dp-team{display:grid;grid-template-columns:1fr auto;align-items:center;gap:0 8px;padding:9px 12px;border-radius:var(--r-s);background:var(--surface);border:1px solid var(--line);transition:border-color .2s,box-shadow .2s}
.dp-team b{font-family:var(--font-d);font-size:26px;line-height:1;font-variant-numeric:tabular-nums}
.dp-team small{grid-column:1/-1;color:var(--mute);font-size:11.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dp-team-name{font-weight:700;font-size:14px}
.dp-team.t0 .dp-team-name{color:var(--dp-r)}
.dp-team.t1 .dp-team-name{color:var(--dp-l)}
.dp-team.on{border-color:var(--acc);box-shadow:0 0 0 2px var(--acc)}
.dp-players{display:flex;flex-wrap:wrap;gap:6px}
.dp-player{display:flex;align-items:center;gap:6px;padding:5px 11px;border-radius:var(--r-pill);background:var(--surface);border:1px solid var(--line);font-size:13px}
.dp-player b{font-variant-numeric:tabular-nums}
.dp-player i{font-style:normal;font-size:11px;color:var(--mute)}
.dp-player.psy{border-color:var(--acc)}
.dp-player.psy i{color:var(--acc-soft)}
.dp-player.done i{color:var(--pos)}
.dp-player.me{background:color-mix(in oklab, var(--acc) 12%, var(--surface))}
.dp-player.off{opacity:.45}

.dp-card{display:grid;grid-template-columns:1fr 1fr;border-radius:var(--r-s);overflow:hidden;box-shadow:0 6px 18px oklch(0 0 0/.25);font-family:var(--font-d);font-weight:600;font-size:17px;line-height:1.15}
.dp-card span{padding:12px 14px;color:#fff;text-shadow:0 1px 2px oklch(0 0 0/.25);display:flex;align-items:center}
.dp-l{background:var(--dp-l)}
.dp-r{background:var(--dp-r);justify-content:flex-end;text-align:right}
.dp-clue-show{margin:2px 0 0;text-align:center;font-family:var(--font-d);font-weight:600;font-size:clamp(22px,6.5vw,34px);line-height:1.15;color:var(--ink)}
.dp-clue-show.wait{font-family:var(--font);font-weight:500;font-size:15px;color:var(--ink-2)}

.dp-dial-wrap{position:relative;width:100%;max-width:560px;margin:0 auto;padding-bottom:22px}
.dp-dial{display:block;width:100%;height:auto;overflow:visible;user-select:none;-webkit-user-select:none}
.dp-dial-wrap.live .dp-dial{touch-action:none;cursor:grab}
.dp-dial-wrap.live .dp-dial:active{cursor:grabbing}
.dp-rim{fill:var(--dp-rim)}
.dp-face{fill:var(--dp-face)}
.dp-b2{fill:oklch(0.86 0.14 88)}
.dp-b3{fill:oklch(0.74 0.17 50)}
.dp-b4{fill:oklch(0.55 0.13 245)}
.dp-bn{font:700 7.5px var(--font);fill:oklch(0.2 0.03 255/.75);text-anchor:middle;dominant-baseline:middle}
.dp-target.pop{transform-origin:100px 100px;transform-box:view-box;animation:dp-open .7s var(--ease)}
@keyframes dp-open{from{transform:scale(.2);opacity:0}}
.dp-tick{stroke:oklch(0.3 0.04 255/.35);stroke-width:.7}
.dp-needle{transform-origin:100px 100px;transform-box:view-box;transition:transform .12s linear}
.dp-needle line{stroke:oklch(0.56 0.22 27);stroke-width:3.2;stroke-linecap:round}
.dp-needle circle{fill:oklch(0.56 0.22 27)}
.dp-hub{fill:var(--dp-rim);stroke:oklch(0.56 0.22 27);stroke-width:2}
.dp-mark circle{fill:oklch(0.3 0.05 255);stroke:#fff;stroke-width:1}
.dp-mark.me circle{fill:oklch(0.56 0.22 27)}
.dp-mark text{font:700 7px var(--font);fill:#fff;text-anchor:middle}
.dp-end{position:absolute;bottom:0;font-size:12px;font-weight:600;color:var(--mute);max-width:45%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dp-end.l{left:2%}.dp-end.r{right:2%;text-align:right}
@media (prefers-reduced-motion:reduce){ .dp-target.pop{animation:none} .dp-needle{transition:none} }

.dp-nudge{display:flex;align-items:center;justify-content:center;gap:10px}
.dp-nudge .btn{min-width:48px;border-color:var(--line)}
.dp-nudge-hint{font-size:13px;color:var(--mute)}
.dp-zone{display:flex;flex-direction:column;gap:10px}
.dp-hint{margin:0;text-align:center;color:var(--ink-2);font-size:14.5px}
.dp-zone input[type=text]{width:100%;font:inherit;font-size:18px;padding:13px 15px;border-radius:var(--r-s);border:1px solid var(--line);background:var(--surface);color:var(--ink)}
.dp-zone input[type=text]:focus{outline:2px solid var(--acc);outline-offset:1px}
.dp-row{display:flex;gap:8px;flex-wrap:wrap}
.dp-row .btn.primary{flex:1 1 200px}
.dp-row.two .btn{flex:1 1 0}
.dp-verdict{margin:0;text-align:center;font-family:var(--font-d);font-weight:700;font-size:22px}
.dp-psygain{margin:-4px 0 0;text-align:center;color:var(--ink-2);font-size:14px}
.dp-again{margin:0;text-align:center;color:var(--gold);font-weight:600}
.dp-results{list-style:none;margin:0;padding:0;display:grid;gap:5px}
.dp-results li{display:flex;justify-content:space-between;padding:8px 12px;border-radius:var(--r-s);background:var(--surface);border:1px solid var(--line)}
.dp-results li.p4{border-color:oklch(0.55 0.13 245);background:color-mix(in oklab, oklch(0.55 0.13 245) 22%, var(--surface))}
.dp-results li.p3{border-color:oklch(0.74 0.17 50)}
.dp-results li.p2{border-color:oklch(0.86 0.14 88)}
.dp-final{display:flex;flex-direction:column;align-items:center;gap:6px;padding:14px;border-radius:var(--r);background:var(--surface);border:1px solid var(--line)}
.dp-ranking{margin:0;padding-left:22px;width:100%;display:grid;gap:4px}
.dp-ranking li{display:flex;justify-content:space-between;gap:10px;font-variant-numeric:tabular-nums}
.dp-ranking li.me{color:var(--acc-soft);font-weight:600}
.dp-log{list-style:none;margin:0;padding:0;display:grid;gap:3px;font-size:12.5px;color:var(--mute);text-align:center}
@media (min-width: 700px){ .dp-card{font-size:20px} .dp-card span{padding:14px 18px} }

/* ============================================================ Duel des Cités : bronze, or et parchemin */
[data-game="duel"]{
  --bg:        oklch(0.190 0.025 62);
  --surface:   oklch(0.240 0.028 62);
  --surface-2: oklch(0.290 0.032 62);
  --line:      oklch(0.360 0.035 62);
  --ink:       oklch(0.955 0.025 85);
  --ink-2:     oklch(0.820 0.035 80);
  --mute:      oklch(0.660 0.040 72);
  --acc:       oklch(0.800 0.130 82);
  --acc-soft:  oklch(0.870 0.090 85);
  --on-acc:    oklch(0.220 0.040 60);
  --pos:       oklch(0.820 0.140 150);
  --neg:       oklch(0.660 0.200 27);
  --gold:      oklch(0.820 0.140 85);
  --glow: 0.13;
  --r: 12px; --r-s: 8px; --r-pill: 999px;
  --font-d: "Cormorant Garamond", Georgia, serif;
  --track: 0;
}
[data-theme="light"][data-game="duel"]{
  --bg:        oklch(0.950 0.028 85);
  --surface:   oklch(0.985 0.015 85);
  --surface-2: oklch(0.920 0.032 85);
  --line:      oklch(0.850 0.040 80);
  --ink:       oklch(0.250 0.040 60);
  --ink-2:     oklch(0.420 0.045 60);
  --mute:      oklch(0.560 0.045 65);
  --acc:       oklch(0.560 0.120 70);
  --acc-soft:  oklch(0.480 0.110 65);
  --on-acc:    oklch(0.990 0.010 85);
  --glow: 0.07;
}
[data-game="duel"] h1,[data-game="duel"] .banner{font-family:var(--font-d);font-weight:600}
.g-duel .gname{font-family:"Cormorant Garamond",Georgia,serif;font-weight:600;font-size:27px;letter-spacing:.01em;color:oklch(0.84 0.12 82)}
[data-theme="light"] .g-duel .gname{color:oklch(0.48 0.11 65)}
.g-duel{background:oklch(0.21 0.026 62);border-color:oklch(0.33 0.035 62)}
.g-duel[aria-pressed="true"]{border-color:oklch(0.8 0.13 82);background:oklch(0.25 0.035 62)}
[data-theme="light"] .g-duel{background:oklch(0.97 0.02 85);border-color:oklch(0.86 0.035 80)}
[data-theme="light"] .g-duel[aria-pressed="true"]{border-color:oklch(0.56 0.12 70);background:oklch(0.94 0.04 80)}
.duart{position:relative;display:block;width:54px;height:48px}
.duart i{position:absolute;width:15px;height:20px;border-radius:2.5px;box-shadow:0 1.5px 3px oklch(0 0 0/.4);transition:transform .4s var(--ease)}
.duart i:nth-child(1){left:19.5px;top:2px;background:oklch(0.55 0.14 255)}
.duart i:nth-child(2){left:11px;top:14px;background:oklch(0.58 0.14 150)}
.duart i:nth-child(3){left:28px;top:14px;background:oklch(0.56 0.19 27)}
.duart i:nth-child(4){left:2.5px;top:26px;background:oklch(0.52 0.09 55)}
.duart i:nth-child(5){left:19.5px;top:26px;background:oklch(0.82 0.15 88)}
.duart i:nth-child(6){left:36.5px;top:26px;background:oklch(0.5 0.16 310)}
.gcard[aria-pressed="true"] .duart i:nth-child(1){transform:translateY(-4px)}

/* couleurs des cartes */
.t-brun{--c:oklch(0.52 0.09 55);--ci:#fff}
.t-gris{--c:oklch(0.64 0.015 250);--ci:#fff}
.t-bleu{--c:oklch(0.55 0.14 255);--ci:#fff}
.t-vert{--c:oklch(0.56 0.14 150);--ci:#fff}
.t-rouge{--c:oklch(0.56 0.19 27);--ci:#fff}
.t-jaune{--c:oklch(0.83 0.15 88);--ci:oklch(0.25 0.05 70)}
.t-violet{--c:oklch(0.5 0.16 310);--ci:#fff}
.du-sq{display:inline-block;width:.8em;height:.8em;border-radius:2px;background:var(--c);vertical-align:-.05em}
.du-coin{display:inline-grid;place-items:center;min-width:1.45em;height:1.45em;padding:0 .2em;border-radius:99px;background:oklch(0.82 0.15 85);color:oklch(0.25 0.05 70);font-weight:800;font-size:.82em;line-height:1;font-variant-numeric:tabular-nums;box-shadow:inset 0 -1px 0 oklch(0.6 0.13 70)}
.du-vp{display:inline-grid;place-items:center;min-width:1.45em;height:1.45em;border-radius:3px;background:oklch(0.55 0.14 255);color:#fff;font-weight:800;font-size:.82em;line-height:1}
.t-bleu .du-vp{background:#fff;color:oklch(0.45 0.14 255)}
.du-free{font-size:.85em;color:var(--mute)}

.du-head{display:flex;justify-content:space-between;align-items:baseline;gap:10px;flex-wrap:wrap}
.du-watch{font-size:13px;color:var(--mute)}

/* cités */
.du-city{display:flex;flex-direction:column;gap:7px;padding:10px 12px;border-radius:var(--r);background:var(--surface);border:1px solid var(--line);transition:border-color .2s,box-shadow .2s}
.du-city.turn{border-color:var(--acc);box-shadow:0 0 0 1px var(--acc)}
.du-city-head{display:flex;align-items:center;gap:10px}
.du-city-name{flex:1;font-family:var(--font-d);font-weight:700;font-size:19px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.du-city-name small{font-family:var(--font);font-weight:400;font-size:12px;color:var(--mute)}
.du-coins{font-size:17px}
.du-score{font-weight:700;font-variant-numeric:tabular-nums;color:var(--acc-soft)}
.du-prodrow,.du-scirow{display:flex;flex-wrap:wrap;gap:4px}
.du-res{display:inline-flex;align-items:center;gap:2px;padding:2px 7px;border-radius:99px;background:var(--surface-2);font-size:13px}
.du-res b{font-variant-numeric:tabular-nums;font-size:12.5px}
.du-res.zero{opacity:.4}
.du-res.ch{background:color-mix(in oklab, oklch(0.83 0.15 88) 22%, var(--surface-2))}
.du-res.tr{background:color-mix(in oklab, oklch(0.83 0.15 88) 22%, var(--surface-2));font-size:12px}
.du-sci{display:inline-flex;align-items:center;padding:2px 7px;border-radius:99px;background:color-mix(in oklab, oklch(0.56 0.14 150) 25%, var(--surface-2));font-size:13px}
.du-wonders{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:5px}
.du-w{display:flex;flex-direction:column;align-items:flex-start;gap:1px;padding:5px 8px;border-radius:var(--r-s);border:1px dashed var(--line);background:none;color:var(--ink);font:inherit;text-align:left;cursor:pointer;min-width:0}
.du-w b{font-size:12.5px;font-weight:700;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.du-w span{font-size:12px}
.du-w.built{border-style:solid;border-color:var(--acc);background:color-mix(in oklab, var(--acc) 16%, var(--surface))}
.du-w.built span{color:var(--acc-soft);font-weight:600}
.du-w.lost{opacity:.4;text-decoration:line-through}
.du-pills{display:flex;flex-wrap:wrap;gap:3px}
.du-pill{font:inherit;font-size:11px;font-weight:600;padding:2px 7px;border-radius:4px;border:0;background:var(--c);color:var(--ci);cursor:pointer;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* piste militaire */
.du-track{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:6px}
.du-cap{font-size:11.5px;font-weight:600;color:var(--ink-2);max-width:78px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.du-cells{display:grid;grid-template-columns:repeat(19,minmax(0,1fr));height:26px;border-radius:6px;overflow:hidden;background:var(--surface-2)}
.du-cell{position:relative;display:grid;place-items:center;border-right:1px solid color-mix(in oklab, var(--bg) 60%, transparent)}
.du-cell.z0{background:color-mix(in oklab, var(--acc) 30%, var(--surface-2))}
.du-cell.z2{background:color-mix(in oklab, oklch(0.56 0.19 27) 14%, var(--surface-2))}
.du-cell.z3{background:color-mix(in oklab, oklch(0.56 0.19 27) 28%, var(--surface-2))}
.du-pawn{font-size:14px;line-height:1;z-index:1}
.du-cell.pawn{background:oklch(0.56 0.19 27)}
.du-loot{position:absolute;inset:auto 0 0;font-style:normal;font-size:8.5px;font-weight:800;text-align:center;color:oklch(0.7 0.14 80);line-height:1}
.du-cell.pawn .du-loot{display:none}

/* jetons progrès */
.du-tokens{display:flex;gap:6px;justify-content:center;flex-wrap:wrap}
.du-tok{display:flex;flex-direction:column;align-items:center;gap:1px;width:58px;padding:5px 2px;border-radius:14px;border:1px solid color-mix(in oklab, oklch(0.56 0.14 150) 55%, var(--line));background:color-mix(in oklab, oklch(0.56 0.14 150) 16%, var(--surface));color:var(--ink);font:inherit;font-size:19px;cursor:pointer}
.du-tok small{font-size:9.5px;font-weight:600;color:var(--ink-2);max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.du-tok.small{width:auto;flex-direction:row;padding:1px 7px;font-size:14px;border-radius:99px}

/* la pyramide */
.du-pyr-wrap{display:flex;justify-content:center;padding-top:4px}
.du-pyr{position:relative}
.du-card{position:absolute;width:var(--w);height:var(--h);padding:0;border-radius:calc(var(--w) * .1);border:1px solid oklch(0 0 0/.25);background:var(--c);color:var(--ci);font:inherit;cursor:pointer;box-shadow:0 3px 8px oklch(0 0 0/.35);overflow:hidden;transition:transform .15s var(--ease),filter .2s,box-shadow .2s}
.du-card.cov{filter:brightness(.72) saturate(.75);cursor:help}
.du-card.acc{box-shadow:0 0 0 1.5px oklch(1 0 0/.7),0 4px 12px oklch(0 0 0/.4)}
.du-card.sel{transform:translateY(-5px);box-shadow:0 0 0 2.5px var(--acc),0 10px 20px oklch(0 0 0/.45);z-index:30!important}
.du-card:not(.back):active{transform:scale(.97)}
.du-card.back{cursor:default;background:repeating-linear-gradient(135deg, oklch(0.42 0.07 60) 0 5px, oklch(0.36 0.06 60) 5px 10px);border-color:oklch(0.7 0.08 80/.6)}
.du-card.back.age2{background:repeating-linear-gradient(135deg, oklch(0.4 0.07 240) 0 5px, oklch(0.34 0.06 240) 5px 10px)}
.du-card.back.age3{background:repeating-linear-gradient(135deg, oklch(0.4 0.08 20) 0 5px, oklch(0.34 0.07 20) 5px 10px)}
.du-card.back.ageG{background:repeating-linear-gradient(135deg, oklch(0.4 0.12 310) 0 5px, oklch(0.33 0.1 310) 5px 10px)}
.du-back{position:absolute;inset:0;display:grid;place-items:center;font-family:var(--font-d);font-weight:700;font-size:calc(var(--w) * .34);color:oklch(0.9 0.08 85/.9)}
.du-cc{position:absolute;left:3px;top:2px;right:14px;text-align:left;font-size:calc(var(--w) * .15);line-height:1.1;letter-spacing:-.05em;background:none}
.du-cc .du-coin{font-size:1em}
.du-eff{position:absolute;inset:32% 2px auto;text-align:center;font-size:calc(var(--w) * .2);line-height:1.15;word-break:break-all}
.du-nm{position:absolute;left:2px;right:2px;bottom:3px;font-size:calc(var(--w) * .12);line-height:1.05;font-weight:700;text-align:center;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.du-ct{position:absolute;right:2px;top:2px;font-size:calc(var(--w) * .15);line-height:1}
.du-tag{position:absolute;right:2px;bottom:2px;min-width:1.5em;height:1.5em;padding:0 .25em;border-radius:99px;display:grid;place-items:center;font-size:calc(var(--w) * .15);font-weight:800;background:oklch(0.82 0.15 85);color:oklch(0.25 0.05 70);box-shadow:0 1px 3px oklch(0 0 0/.4)}
.du-tag.no{background:oklch(0.4 0.02 60);color:oklch(0.85 0.02 60)}
.du-tag.ok{background:oklch(0.82 0.14 150)}
.du-discard{margin:-4px 0 0;text-align:center;font-size:12.5px;color:var(--mute)}

/* panneau d'action */
.du-sheet{display:flex;flex-direction:column;gap:10px}
.du-hint{margin:0;text-align:center;color:var(--ink-2);font-size:14.5px}
.du-hint.strong{font-weight:700;color:var(--ink);font-size:16px}
.du-detail{padding:11px 13px;border-radius:var(--r);background:var(--surface);border:1px solid var(--line);display:flex;flex-direction:column;gap:5px}
.du-detail p{margin:0;font-size:14px;color:var(--ink-2);line-height:1.4}
.du-dhead{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}
.du-dhead b{font-family:var(--font-d);font-size:21px;font-weight:700}
.du-dhead small{color:var(--mute);font-size:12.5px}
.du-dcost{font-size:14px}
.du-actions{display:flex;flex-direction:column;gap:7px}
.du-actions .btn{justify-content:center}
.du-actions .wbtn{border-color:var(--line)}
.du-row{display:flex;gap:8px;flex-wrap:wrap}
.du-row .btn{flex:1 1 150px}
.du-wlist,.du-choices{display:grid;gap:8px}
.du-wcard,.du-choice{display:flex;flex-direction:column;align-items:flex-start;gap:3px;text-align:left;padding:11px 13px;border-radius:var(--r);border:1px solid var(--line);background:var(--surface);color:var(--ink);font:inherit}
button.du-wcard,.du-choice{cursor:pointer}
button.du-wcard:hover,.du-choice:hover{border-color:var(--acc)}
.du-wcard b,.du-choice b{font-family:var(--font-d);font-size:19px;font-weight:700}
.du-wcost{font-size:14px}
.du-wtxt,.du-choice span{font-size:13.5px;color:var(--ink-2)}
.du-final{display:flex;flex-direction:column;align-items:center;gap:8px;padding:14px;border-radius:var(--r);background:var(--surface);border:1px solid var(--line)}
.du-verdict{margin:0;font-family:var(--font-d);font-weight:700;font-size:26px;text-align:center}
.du-table{width:100%;border-collapse:collapse;font-size:14px;font-variant-numeric:tabular-nums}
.du-table th,.du-table td{padding:5px 8px;border-bottom:1px solid var(--line);text-align:right}
.du-table th:first-child,.du-table td:first-child{text-align:left;color:var(--ink-2)}
.du-table tr.tot td{font-weight:800;font-size:16px;color:var(--ink);border-bottom:0}
.du-log{list-style:none;margin:0;padding:0;display:grid;gap:3px;font-size:12.5px;color:var(--mute);text-align:center}
.desk-side .du-log{text-align:left}
@media (min-width: 700px){ .du-cap{max-width:120px;font-size:12.5px} .du-cells{height:30px} .du-pawn{font-size:17px} .du-loot{font-size:9.5px} }

/* ====================================================================================================
   CHARTE 2026 : ossature épurée, voix du meneur (voir PRODUCT.md et DESIGN.md)
   Une seule famille, celle du système ; hiérarchie par la taille et le gras ; listes groupées plutôt
   que cartes ; aucune étiquette en capitales espacées. Les jeux gardent leur couleur et leur dessin.
   ==================================================================================================== */
:root{--font:-apple-system,BlinkMacSystemFont,"Segoe UI",system-ui,Roboto,"Helvetica Neue",sans-serif}
body{font-size:16px;line-height:1.45}
.eyebrow{font-size:13px;letter-spacing:0;text-transform:none;font-weight:600;color:var(--mute)}
.fine{font-size:13.5px}

/* barre haute */
.crumb,[data-game="eclair"] .crumb{font-family:var(--font);font-weight:600;font-size:16px;letter-spacing:0;text-transform:none}
.ic{border-radius:10px;font-family:var(--font)}

/* titres du shell */
#s-home h1,#s-rules h1{font-family:var(--font);font-weight:700;font-size:clamp(36px,10vw,46px);letter-spacing:-.025em;line-height:1.02}
.section-title{font-family:var(--font);font-weight:700;font-size:21px;letter-spacing:-.01em}
.lede{font-size:17px;line-height:1.4;max-width:34ch}

/* boutons et champs */
.btn{font-family:var(--font);border-radius:13px;font-weight:600;letter-spacing:0}
.btn.primary{font-weight:650}
input,select{font-family:var(--font);border-radius:12px}

/* ------------------------------------------------------------ accueil */
.hub-hero{gap:12px}
.gamebox{width:96px;height:80px}
.gamebox svg{width:96px;height:80px}
#in-code{letter-spacing:.3em;font-weight:700}
.join-label{margin:8px 0 -4px;font-size:14px;font-weight:500;color:var(--ink-2)}
.rules-entry{margin-top:4px;padding:14px 16px;border-radius:14px;gap:12px}
.rules-entry-icon{display:none}
.rules-entry-text b{font:600 16px var(--font);letter-spacing:0}
.rules-entry-text small{font-size:13.5px}

/* ------------------------------------------------------------ salon : la liste des jeux */
#s-lobby .picker .section-title{font-size:26px;letter-spacing:-.02em;margin:0 0 12px}
.gfilters{display:flex;width:fit-content;max-width:100%;gap:2px;padding:3px;margin:0 0 6px;background:var(--surface-2);border-radius:11px;overflow-x:auto;scrollbar-width:none}
.gfilter{min-height:34px;padding:6px 12px;border:0;border-radius:8px;background:transparent;color:var(--ink-2);font:600 14px var(--font);white-space:nowrap;cursor:pointer}
.gfilter small{display:none}
.gfilter[aria-pressed="true"]{background:var(--surface);color:var(--ink);border:0;box-shadow:0 1px 3px oklch(0 0 0/.22)}
#games{display:block}
.gfam{margin:0;padding:18px 4px 7px;font:600 13px/1.2 var(--font);letter-spacing:0;color:var(--mute)}
.glist{display:grid;grid-template-columns:minmax(0,1fr);background:var(--surface);border:1px solid var(--line);border-radius:14px;overflow:hidden}
#games .gcard{display:grid;grid-template-columns:52px minmax(0,1fr) auto;grid-template-rows:auto auto;column-gap:12px;row-gap:2px;align-items:center;
  min-height:74px;padding:10px 14px 10px 10px;margin:0;border:0;border-top:1px solid var(--line);border-radius:0;background:transparent;box-shadow:none;color:var(--ink);text-align:left;transition:background .15s}
#games .glist .gcard:first-child{border-top:0}
#games .gcard:active{transform:none;background:var(--surface-2)}
#games .gcard[aria-pressed="true"]{background:color-mix(in oklab, var(--acc) 13%, var(--surface));box-shadow:inset 0 0 0 2px var(--acc)}
#games .gcard .gart{grid-row:1/3;grid-column:1;width:52px;height:52px;transform:scale(.8)}
#games .gcard .gname{grid-column:2;grid-row:1;align-self:end;font:600 16px/1.2 var(--font);letter-spacing:0;text-transform:none;color:var(--ink)}
#games .gcard .gname::after{content:none}
#games .g-limite .gname::after{content:"18+";display:inline-block;margin-left:7px;padding:1px 5px;border-radius:5px;border:1px solid currentColor;font-size:10.5px;font-weight:700;color:var(--mute);vertical-align:2px}
#games .gcard .gdesc{grid-column:2;grid-row:2;align-self:start;font-size:13.5px;line-height:1.35;color:var(--ink-2);text-transform:none;letter-spacing:0}
#games .gcard .gmeta{grid-column:3;grid-row:1/3;margin:0;display:flex;flex-direction:column;align-items:flex-end;gap:1px;font-size:12.5px;line-height:1.3;letter-spacing:0;color:var(--mute);white-space:nowrap}
#games .gcard .gmeta b{font-weight:600;color:var(--ink-2)}
#games .gcard .gmeta i{font-style:normal}
#games .gcard:disabled{cursor:default}
.gsoon{margin:14px 4px 0;padding:0;border:0;text-align:left;font-size:13.5px;color:var(--mute)}
@media (min-width: 760px){
  .glist{grid-template-columns:repeat(2,minmax(0,1fr))}
  #games .glist .gcard:nth-child(2){border-top:0}
  #games .glist .gcard:nth-child(odd){border-right:1px solid var(--line)}
  #games .glist .gcard:nth-child(odd):last-child{border-right:0}
}

/* ------------------------------------------------------------ salon : code, joueurs, réglages */
.code-strip{flex-direction:column;align-items:flex-start;gap:6px;padding:0;background:none;border:0;border-radius:0}
.code-strip .code{font-family:var(--font);font-weight:700;font-size:46px;letter-spacing:.08em;padding:0;line-height:1}
.code-strip .fine{font-size:14px;color:var(--ink-2);max-width:40ch}
.code-strip br{display:none}
.players{align-items:center}
.players-title{flex-basis:100%;margin-bottom:2px}
.chip{animation:none;padding:6px 12px;gap:6px;font-size:14.5px}
.chip .dot{display:none}
.chip i{font-style:normal;font-size:12.5px;color:var(--mute)}
.opts{gap:10px}
.opts .fine{margin-top:-2px}
.field.row{background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:5px 8px 5px 14px;min-height:52px}
.field.row>span{font-size:15px;color:var(--ink)}
.field.row+.field.row{margin-top:-11px;border-top-left-radius:0;border-top-right-radius:0}
.field.row:has(+ .field.row){border-bottom-left-radius:0;border-bottom-right-radius:0}
.field.row select,.field.row input:not([type=checkbox]){min-height:40px;padding:6px 6px;border:0;background:transparent;color:var(--ink-2);text-align:right;text-align-last:right;box-shadow:none;max-width:62%}
.field.row select:focus,.field.row input:not([type=checkbox]):focus{box-shadow:none;color:var(--ink)}
.field.row select option{color:initial}
.chips legend{font:600 13px var(--font);letter-spacing:0;text-transform:none;color:var(--mute)}
.chips label{border-radius:99px;padding:8px 14px;font-size:14.5px}
#lobby-wait{font-size:14.5px;color:var(--ink-2)}
@media (min-width: 1100px){
  .lobby-side{background:var(--surface-2);border-radius:16px;padding:22px 22px 18px}
  .lobby-side #btn-start{box-shadow:0 12px 0 10px var(--surface-2),0 -16px 12px 2px var(--surface-2)}
  .players{flex-direction:column;align-items:stretch;gap:0}
  .players .chip{background:none;border:0;border-top:1px solid var(--line);border-radius:0;padding:9px 2px;justify-content:space-between}
  .players-title+.chip{border-top:0}
  .players .chip .pname{flex:1}
}

/* ------------------------------------------------------------ Hors Limite */
.hl-meta{margin:0;font-size:14px;color:var(--mute)}
.hl-black{border-radius:16px;padding:24px 22px 40px}
.hl-black p{font:700 25px/1.2 var(--font);letter-spacing:-.015em}
.hl-brand{font:600 12px var(--font);letter-spacing:0;color:oklch(0.62 0.01 20)}
.hl-pick{font:600 12.5px var(--font);letter-spacing:0;text-transform:none}
.hl-status h3{margin:4px 0 0;font:700 27px/1.12 var(--font);letter-spacing:-.02em}
.hl-say{margin:4px 0 0;font-size:17px;line-height:1.4;color:var(--ink-2);max-width:48ch}
.hl-prog{display:flex;align-items:center;gap:6px;margin-top:14px;font-size:13.5px;color:var(--mute);font-variant-numeric:tabular-nums}
.hl-prog i{width:28px;height:5px;border-radius:3px;background:var(--line)}
.hl-prog i.f{background:var(--acc)}
.hl-prog span{margin-left:6px}
.hl-preview{border-style:solid;border-radius:12px}
.hl-white{font:700 15px/1.28 var(--font);border-radius:12px}
.hl-white::after{font:600 9.5px var(--font);letter-spacing:0}
.hl-answer p{font-size:17px}
.hl-ranking li{border-radius:10px}
.hl-players{flex-wrap:wrap;overflow:visible;margin:0;padding:0;gap:4px 14px;align-items:baseline}
.hl-side-title{flex-basis:100%;margin:0 0 2px}
.hl-player{flex-direction:row;align-items:baseline;gap:6px;min-width:0;padding:0;background:none;border:0;border-radius:0}
.hl-player .hl-player-name{font-size:14.5px;max-width:none}
.hl-player .hl-player-score{font-size:14.5px;font-weight:600;color:var(--ink)}
.hl-player i{font-style:normal;font-size:12.5px;color:var(--mute)}
.hl-player i.ok{color:var(--pos)}
.hl-player.judge .hl-player-name{color:var(--acc)}
.hl-log{text-align:left;font-size:13.5px;gap:4px}
.hl-log li.hl-side-title{margin-bottom:0}
.desk-side .hl-players{flex-direction:column;flex-wrap:nowrap;align-items:stretch;gap:0}
.desk-side .hl-player{justify-content:space-between;padding:9px 0;border-top:1px solid var(--line)}
.desk-side .hl-side-title+.hl-player{border-top:0}
.desk-side .hl-player .hl-player-name{flex:1}
@media (min-width: 700px){ .hl-black p{font-size:30px} .hl-status h3{font-size:32px} }

/* charte, retouches du lot 1 */
#btn-start{width:100%}
#in-code:placeholder-shown{letter-spacing:0;font-weight:500}
.hl-fill{font-family:var(--font);font-weight:700}
/* interrupteur à la place de la case à cocher dans les réglages */
.field.row input[type=checkbox]{appearance:none;-webkit-appearance:none;flex:0 0 auto;width:48px;height:30px;min-height:0;margin:0 6px 0 0;padding:0;border:0;border-radius:99px;cursor:pointer;background:radial-gradient(circle at 15px 50%, var(--surface) 0 11px, transparent 12px), var(--line);transition:background-color .2s}
.field.row input[type=checkbox]:checked{background:radial-gradient(circle at 33px 50%, var(--on-acc) 0 11px, transparent 12px), var(--acc)}
.field.row input[type=checkbox]:focus-visible{outline:2px solid var(--acc);outline-offset:2px}

/* ------------------------------------------------------------ composants communs du meneur (tous les jeux)
   .mj-meta   : la ligne d'info discrète en haut (« Manche 2 · premier à 7 »)
   .mj-status : ce qui se passe, dit par le meneur : <h3 class="mj-title"> + <p class="mj-say">
   .mj-prog   : l'attente, une barre par joueur attendu (<i class="f"> pour ceux qui ont joué) + <span>2 sur 5</span>
   .mj-side-title : intitulé discret d'un bloc de la colonne de droite (Scores, Ce qui s'est passé)
   .mj-list   : liste groupée (lignes jointives dans un conteneur arrondi), .mj-row pour une ligne */
.mj-meta{margin:0;font-size:14px;color:var(--mute)}
.mj-status{display:flex;flex-direction:column;gap:0}
.mj-title{margin:4px 0 0;font:700 27px/1.12 var(--font);letter-spacing:-.02em;color:var(--ink)}
.mj-say{margin:4px 0 0;font-size:17px;line-height:1.4;color:var(--ink-2);max-width:48ch}
.mj-prog{display:flex;align-items:center;flex-wrap:wrap;gap:6px;margin-top:14px;font-size:13.5px;color:var(--mute);font-variant-numeric:tabular-nums}
.mj-prog i{width:28px;height:5px;border-radius:3px;background:var(--line)}
.mj-prog i.f{background:var(--acc)}
.mj-prog span{margin-left:6px}
.mj-side-title{display:block;margin:0 0 4px;font-size:13px;font-weight:600;letter-spacing:0;text-transform:none;color:var(--mute)}
.mj-list{background:var(--surface);border:1px solid var(--line);border-radius:14px;overflow:hidden}
.mj-row{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:11px 14px;border-top:1px solid var(--line);font-size:15px}
.mj-row:first-child{border-top:0}
@media (min-width: 700px){ .mj-title{font-size:32px} }

/* ------------------------------------------------------------ page Règles (charte) */
.rules-toc{display:block;margin-bottom:30px}
.rules-fam{margin:0;padding:16px 4px 7px;font:600 13px/1.2 var(--font);letter-spacing:0;color:var(--mute)}
.rules-fam:first-child{padding-top:0}
.rules-toc-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));background:var(--surface);border:1px solid var(--line);border-radius:14px;overflow:hidden}
.rules-chip{display:flex;align-items:center;gap:8px;min-width:0;padding:8px 10px;border:0;border-radius:0;border-top:1px solid var(--line);background:transparent;color:var(--ink);text-decoration:none}
.rules-chip:nth-child(-n+2){border-top:0}
.rules-chip:nth-child(odd){border-right:1px solid var(--line)}
.rules-chip:nth-child(odd):last-child{border-right:0}
.rules-chip:active{transform:none;background:var(--surface-2)}
.rules-chip:hover{background:var(--surface-2)}
.rules-chip .gart{flex:0 0 auto;width:34px;height:34px;transform:scale(.6)}
.rules-chip .gname{font:600 15px var(--font);letter-spacing:0;text-transform:none;color:var(--ink)}
.rules-chip .gname::after{content:none}
.rules-list{gap:44px}
.rules-head{display:grid;grid-template-columns:56px minmax(0,1fr);gap:14px;align-items:center;padding:0 0 4px;background:none;border:0;cursor:default}
.rules-head .gart{width:56px;height:56px}
.rules-head h2{margin:0;font:700 26px/1.1 var(--font);letter-spacing:-.02em;color:var(--ink)}
.rules-hook{margin:3px 0 0;font-size:15px;color:var(--ink-2)}
.rules-meta{margin:2px 0 0;font-size:13px;color:var(--mute)}
.rules-part{padding:0}
.rules-part h3{margin:0 0 6px;font:600 16.5px/1.25 var(--font);letter-spacing:0;text-transform:none;color:var(--ink)}
.rules-top{padding:6px 0;font:500 14px var(--font);color:var(--mute)}
@media (min-width: 1100px){
  .rules-toc{position:sticky;top:calc(var(--bar-h) + env(safe-area-inset-top) + 12px);max-height:calc(100dvh - var(--bar-h) - 30px);overflow-y:auto;margin:0;padding-right:4px;scrollbar-width:thin}
  .rules-toc-list{grid-template-columns:1fr}
  .rules-chip{padding:6px 10px}
  .rules-chip:nth-child(2){border-top:1px solid var(--line)}
  .rules-chip:nth-child(odd){border-right:0}
  .rules-chip .gart{width:30px;height:30px;transform:scale(.52)}
  .rules-chip .gname{font-size:14.5px}
}

/* podiums du salon, en liste (charte) */
.hist-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:6px}
.hist-head .btn.small{min-height:32px;padding:4px 10px}
.hist-row{padding:10px 14px;border-top:1px solid var(--line)}
.hist-row:first-child{border-top:0}
.hist-row .hist-top{display:flex;align-items:baseline;justify-content:space-between;gap:8px}
.hist-row .hist-top b{font-size:15px;font-weight:600}
.hist-row .hist-top small{font-size:12.5px;color:var(--mute);white-space:nowrap}
.hist-who{margin:3px 0 0;display:flex;flex-wrap:wrap;gap:2px 12px;font-size:13.5px;color:var(--ink-2)}
.hist-p i{font-style:normal;color:var(--mute);font-variant-numeric:tabular-nums}
.hist-p.first{color:var(--ink);font-weight:600}
.hist-low{color:var(--mute)}
/* Éclair en thème clair : texte foncé sur le bouton vert citron, lisible */
[data-theme="light"][data-game="eclair"]{--on-acc:oklch(0.22 0.05 140)}

/* ------------------------------------------------------------ charte, groupe musique */
/* Charte 2026, lot 2 : groupe musique. Fusionné dans style.css à la fin du lot.
   Décennies (#s-game), Éclair (#s-eclair), Sprint (#s-sprint) et l'écran de fin (#s-end).
   Le bandeau devient la voix du meneur (.mj-*), les scores passent en liste groupée,
   et sur PC ils partent dans la colonne de droite (muDesk dans app.js, même mécanique que desk.js).
   Les objets de jeu gardent leur dessin : vinyle, éclair et paliers, chrono, cartes de la frise. */

/* ------------------------------------------------ le bandeau : voix du meneur */
#turn-banner,#e-banner,#sp-banner{font:inherit;min-height:0;letter-spacing:0;text-transform:none;line-height:1.45}
.mu-timer{display:inline-block;margin-left:2px;padding:2px 10px;border-radius:99px;background:color-mix(in oklab, var(--acc) 18%, transparent);color:var(--acc-soft);font-size:.6em;font-weight:700;line-height:1.3;vertical-align:.2em;font-variant-numeric:tabular-nums;letter-spacing:0}

/* ------------------------------------------------ scores : une liste groupée, en bas sur téléphone */
#scoreboard,#e-scoreboard,#sp-scoreboard{display:block;margin:0;padding:0;overflow:visible;order:10}
.mu-row{min-height:54px;padding:8px 14px}
.mu-row.on{background:color-mix(in oklab, var(--acc) 11%, var(--surface))}
.mu-row.off{opacity:.5}
.mu-who{display:flex;flex-direction:column;gap:1px;min-width:0}
.mu-who b{font-size:15px;font-weight:600;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mu-who b i,#ranking li span i{font-style:normal;font-weight:500;font-size:13px;color:var(--mute)}
.mu-who small{font-size:13px;line-height:1.3;color:var(--ink-2)}
.mu-score{flex:0 0 auto;font-size:17px;font-weight:700;color:var(--ink);font-variant-numeric:tabular-nums;white-space:nowrap}
.mu-score small{font-size:13px;font-weight:500;color:var(--mute)}

/* sur PC la colonne de droite est rangée par muDesk ; revenu sur un petit écran, les deux blocs s'empilent */
:is(#s-game,#s-eclair,#s-sprint)>:is(.desk-main,.desk-side){display:flex;flex-direction:column;gap:15px;min-width:0}
@media (min-width: 1100px){
  .screen.play:is(#s-game,#s-eclair,#s-sprint).desk-split{max-width:1120px;padding-left:28px;padding-right:28px}
  :is(#s-game,#s-eclair,#s-sprint) .desk-side{background:var(--surface-2);border-radius:16px;padding:18px 18px 16px}
  :is(#s-game,#s-eclair,#s-sprint) .desk-side .mj-list{background:var(--surface)}
}

/* ------------------------------------------------ scène et objets */
:is(#s-game,#s-eclair,#s-sprint) .track-info{font-weight:600;font-size:15px}
:is(#s-game,#s-eclair,#s-sprint) .track-info small{font-size:13.5px}
:is(#s-game,#s-eclair,#s-sprint) .track-info .big{font-family:var(--font);font-weight:800;letter-spacing:-.02em;font-variant-numeric:tabular-nums}
#e-info .big,#sp-info .big{font-size:28px;line-height:1.12;margin-bottom:2px}
#e-info small{color:var(--ink-2)}
#tl-owner{font-size:13px;font-weight:600;color:var(--mute)}
#timeline .tcard b{font-family:var(--font);font-weight:800;letter-spacing:-.02em}
.segbar i.open::after{font-size:11px}

/* Éclair et Sprint criaient en capitales : on garde la couleur et les angles, pas les majuscules */
#s-eclair .btn,#s-end .btn{text-transform:none;letter-spacing:0;font-size:16px}
#s-eclair .btn.lg,#s-end .btn.lg{font-size:17px}
#s-eclair .btn.small{font-size:14px}
[data-game="sprint"] .crumb{text-transform:none;letter-spacing:0}

/* actions */
:is(#s-game,#s-eclair,#s-sprint) .note{font-size:13.5px}
.tokline{font-size:13.5px}

/* ------------------------------------------------ écran de fin : classement */
#s-end .endhero{text-align:left;align-items:flex-start;gap:0;padding:8px 0 0}
#s-end .endhero .mj-meta,#s-end .endhero .eyebrow{margin:0;font-size:14px;font-weight:400;color:var(--mute)}
#end-winner{margin:4px 0 0;font:700 32px/1.12 var(--font);letter-spacing:-.02em;text-transform:none;color:var(--ink)}
#end-sub{margin:4px 0 0;max-width:40ch;font-size:17px;line-height:1.4;color:var(--ink-2)}
#ranking{gap:0;background:var(--surface);border:1px solid var(--line);border-radius:14px;overflow:hidden}
#ranking li{min-height:52px;padding:11px 16px;gap:12px;background:none;border:0;border-top:1px solid var(--line);border-radius:0;animation:none;font-size:15px}
#ranking li:first-child{border-top:0;background:color-mix(in oklab, var(--acc) 11%, var(--surface))}
#ranking li::before{width:20px;font:700 15px var(--font);color:var(--mute);font-variant-numeric:tabular-nums}
#ranking li:first-child::before{color:var(--acc-soft)}
#ranking li b{font:700 16px var(--font);color:var(--ink);font-variant-numeric:tabular-nums;white-space:nowrap}
@media (min-width: 700px){ #end-winner{font-size:38px} }

/* ------------------------------------------------------------ charte, groupe cartes-a */
/* Charte 2026, lot 2 : groupe cartes-a. Fusionné dans style.css à la fin du lot. */
/* Chromo, Kems, Douze : bloc d'état du meneur (.mj-*), listes groupées, police du système partout
   sauf sur les objets du jeu (cartes, tapis). Chargé après style.css : à spécificité égale, ces règles gagnent. */

/* ------------------------------------------------------------ commun aux trois jeux */
/* --ca-ok : le vert « c'est fait » des listes, assez foncé pour rester lisible sur les thèmes clairs */
/* --ca-hi : l'accent pour les petits textes (tags, meneur de classement), foncé d'un cran sur les thèmes clairs */
#ch-main,#km-main,#dz-main{--ca-ok:var(--pos);--ca-hi:var(--acc)}
[data-theme="light"] #ch-main,[data-theme="light"] #km-main,[data-theme="light"] #dz-main{--ca-ok:oklch(0.50 0.13 150);--ca-hi:color-mix(in oklab, var(--acc) 68%, var(--ink))}
#ch-main .btn,#km-main .btn,#dz-main .btn{white-space:normal;line-height:1.2;text-align:center}
#ch-main .btn.small,#km-main .btn.small,#dz-main .btn.small{min-height:44px;padding:10px 14px}
#ch-main .mj-status.ch-hot .mj-title,#km-main .mj-status.km-hot .mj-title,#dz-main .mj-status.dz-hot .mj-title{color:var(--acc)}
#ch-main .note,#km-main .note,#dz-main .note{font-size:14px;color:var(--ink-2)}
@media (prefers-reduced-motion:reduce){
  #ch-main .btn.danger,#ch-main .ch-back.can,#dz-main .dz-pile.can .dz-card{animation:none}
}

/* ------------------------------------------------------------ Chromo */
/* la table ronde reste l'objet du jeu ; on la tasse un peu sur téléphone pour que la main tienne à l'écran */
.ch-ring{aspect-ratio:1/.92;margin:0 auto}
.ch-flag{font:600 11.5px/1 var(--font);padding:3px 7px}
.ch-color{font:600 15px/1 var(--font)}
.ch-pending{font-weight:700}
.ch-actions{gap:8px}
.ch-actions .btn{font:600 16px/1.2 var(--font);min-width:132px}
.ch-actions .btn.primary{font-weight:700}
.ch-hand-title{margin:4px 0 -4px;text-align:center}
.ch-picker-title{font:700 21px/1.2 var(--font)}
.ch-swatch{font:600 16px/1 var(--font)}
.ch-swatch.col-y{color:oklch(0.26 0.05 80);text-shadow:none}

/* scores et joueurs : une liste groupée ; pendant la manche, sur téléphone, la table suffit */
.ch-players{display:block;margin:0;padding:0;overflow:visible}
.ch-players.in-play{display:none}
.desk-side .ch-players.in-play{display:block}
.ch-row{padding:10px 14px;min-height:46px}
.ch-row-name{flex:1;min-width:0;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ch-row-name small{font-size:12.5px;font-weight:500;color:var(--mute)}
.ch-row-name i{margin-left:7px;font-style:normal;font-size:12.5px;font-weight:600;color:var(--mute)}
.ch-row-name i.now{color:var(--ca-hi)}
.ch-row-name i.ok{color:var(--ca-ok)}
.ch-row-name i.warn{color:var(--neg)}
.ch-row-sub{font-size:13.5px;color:var(--mute);font-variant-numeric:tabular-nums;white-space:nowrap}
.ch-row-score{min-width:2.4em;text-align:right;font-weight:650;font-variant-numeric:tabular-nums;color:var(--ink)}
.ch-row-score em{font-style:normal;font-weight:600;font-size:13.5px;color:var(--ca-ok)}
.ch-row.now{background:color-mix(in oklab, var(--acc) 10%, var(--surface))}
.ch-row.off{opacity:.5}
.ch-row.lead .ch-row-name,.ch-row.lead .ch-row-score{color:var(--ca-hi)}

/* ce qui restait en main à la fin de la manche */
.ch-hands{display:flex;flex-direction:column}
.ch-hand-row{flex-direction:column;align-items:stretch;gap:8px;background:none;border:0;border-top:1px solid var(--line);border-radius:0;padding:11px 14px 13px}
.ch-hand-row:first-child{border-top:0}
.ch-hand-row-head{font-size:15px}
.ch-hand-row-head span{font-size:14px}
.ch-hands .ch-hand.mini{padding:0}

/* le fil de la partie */
.ch-log{text-align:left;font-size:13.5px;gap:4px;color:var(--mute)}
.ch-log li:first-child{font-size:13px;color:var(--mute)}
.ch-log li:nth-child(2){color:var(--ink-2);font-size:14px}
.ch-log li.mj-side-title{margin:0}

@media (min-width: 700px){
  .ch-ring{aspect-ratio:1/.88}
}
@media (min-width: 1100px){
  .ch-ring{aspect-ratio:1.5/1}
}

/* ------------------------------------------------------------ Kems */
.km-zone-title{margin:2px 0 -6px;text-align:center}
.km-table{padding:16px 10px}
.km-calls .btn{font:700 18px/1.15 var(--font);letter-spacing:0}
.km-calls .btn.armed{font:600 15px/1.2 var(--font)}
.km-calls .btn.danger{animation:none}                     /* le bouton reste à l'écran toute la donne : il ne clignote pas */
.km-actions .btn{min-width:150px}

/* la table : une liste groupée en deux colonnes, partenaires en diagonale */
.km-seats{display:block}
.km-seat-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));background:var(--surface);border:1px solid var(--line);border-radius:14px;overflow:hidden}
.km-seat{background:none;border:0;border-radius:0;padding:10px 14px;min-height:58px;justify-content:center;gap:1px}
.km-seat:nth-child(odd){border-right:1px solid var(--line)}
.km-seat:nth-child(n+3){border-top:1px solid var(--line)}
.km-seat.pass{background:none}
.km-seat.me{background:color-mix(in oklab, var(--acc) 9%, var(--surface))}
.km-seat-name{font-size:15px;font-weight:600}
.km-seat-sub{font-size:13px;color:var(--mute)}
.km-seat.me .km-seat-sub,.km-seat.mate .km-seat-sub{color:var(--ink-2)}
.km-seat-sub i{font-style:normal;font-weight:600;color:var(--ca-ok)}

/* scores : une ligne par équipe */
.km-score{display:block;background:none;border:0;border-radius:0;padding:0}
.km-score.in-play{display:none}
.desk-side .km-score.in-play{display:block}
.km-score-row{padding:10px 14px}
.km-score-row.mine{background:color-mix(in oklab, var(--acc) 9%, var(--surface))}
.km-score-name{display:flex;flex-direction:column;gap:1px;min-width:0;font:inherit;white-space:normal}
.km-score-name b{font-weight:600;font-size:15px;color:var(--ink)}
.km-score-name small{font-size:13px;color:var(--mute);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.km-score-pts{font:700 21px/1 var(--font);font-variant-numeric:tabular-nums;color:var(--ink);white-space:nowrap}
.km-score-pts em{font-style:normal;font-size:14px;font-weight:600;color:var(--ca-ok)}

/* les mains révélées */
.km-reveal{display:block}
.km-reveal-row{background:none;border:0;border-top:1px solid var(--line);border-radius:0;padding:10px 14px;flex-direction:row;align-items:center;gap:12px}
.km-reveal-row:first-child{border-top:0}
.km-reveal-row.carre{box-shadow:none;background:color-mix(in oklab, var(--acc) 9%, var(--surface))}
.km-reveal-head{flex:1;min-width:0;font-size:15px;gap:2px}
.km-reveal-head b{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.km-reveal-head span{font-size:13px;color:var(--mute)}
.km-reveal-row.carre .km-reveal-head span{color:var(--ca-hi);font-weight:600}
.km-reveal .km-hand.mini{flex:0 0 auto}

/* le fil de la partie */
.km-log{text-align:left;font-size:13.5px;gap:4px}
.km-log li:first-child{font-size:13px;color:var(--mute)}
.km-log li:nth-child(2){color:var(--ink-2);font-size:14px}
.km-log li.mj-side-title{margin:0}

/* salon : le choix des équipes en liste groupée */
.km-picklist{background:var(--surface);border:1px solid var(--line);border-radius:12px;overflow:hidden}
.km-pickrow{background:none;border:0;border-top:1px solid var(--line);border-radius:0;padding:6px 8px 6px 14px;min-height:56px}
.km-pickrow:first-child{border-top:0}
.km-segbtn{min-height:44px;padding:8px 12px;font-size:13.5px}
.km-pickline{margin:2px 0 0;line-height:1.55}

/* ------------------------------------------------------------ Douze */
.dz-pile-label{font-size:13px}
.dz-sum{margin:0;text-align:center;font-size:14px;color:var(--ink-2);font-variant-numeric:tabular-nums}

/* les grilles de la table et le résultat de la manche : une liste groupée, la mini-grille à droite */
.dz-players,.dz-verdict,.dz-scores{display:block;margin:0;padding:0;overflow:visible;background:none;border:0;border-radius:0}
.dz-rows{display:block}
.dz-row{background:none;border-radius:0;padding:10px 14px;gap:12px;align-items:center}
.dz-row.doubled{box-shadow:none}
.dz-row.now{background:color-mix(in oklab, var(--acc) 10%, var(--surface))}
.dz-row.off{opacity:.5}
.dz-row-head{flex:1;min-width:0;font-size:15px;gap:2px}
.dz-row-head b{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dz-row-head b small{font-size:12.5px;font-weight:500;color:var(--mute)}
.dz-row-head b i{margin-left:7px;font-style:normal;font-size:12.5px;font-weight:600;color:var(--mute)}
.dz-row-head b i.now{color:var(--ca-hi)}
.dz-row-head span{font-size:13px;color:var(--mute);font-variant-numeric:tabular-nums}
.dz-row-head span.neg{color:var(--neg);font-weight:600}
.dz-row-pts{font-size:19px;font-weight:700;font-variant-numeric:tabular-nums;color:var(--ink);min-width:2ch;text-align:right}
.dz-row.doubled .dz-row-pts{color:var(--neg)}
.dz-row .dz-mini-grid{width:76px;flex:0 0 auto}
.dz-verdict .dz-row .dz-mini-grid{width:96px}

/* les totaux */
.dz-score-row{padding:10px 14px}
.dz-score-name{flex:1;min-width:0;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dz-score-name small{font-size:12.5px;font-weight:500;color:var(--mute)}
.dz-score-last{font-size:13.5px;color:var(--mute);font-variant-numeric:tabular-nums}
.dz-score-total{min-width:2.6em;text-align:right;font-weight:650;font-variant-numeric:tabular-nums;color:var(--ink)}
.dz-score-row.lead .dz-score-name,.dz-score-row.lead .dz-score-total{color:var(--ca-hi)}

/* le fil de la partie */
.dz-log{text-align:left;font-size:13.5px;gap:4px}
.dz-log li:first-child{font-size:13px;color:var(--mute)}
.dz-log li:nth-child(2){color:var(--ink-2);font-size:14px}
.dz-log li.mj-side-title{margin:0}
@media (min-width: 700px){ .dz-row .dz-mini-grid{width:88px} .dz-verdict .dz-row .dz-mini-grid{width:112px} }

/* ------------------------------------------------------------ charte, groupe cartes-b */
/* Charte 2026, lot 2 : groupe cartes-b. Fusionné dans style.css à la fin du lot.
   Poker, Solitaire, Duel des Cités : la table ovale, le plateau et la pyramide gardent leur dessin ;
   autour, l'ossature du meneur (.mj-meta, .mj-status, .mj-list, .mj-side-title). */

/* ------------------------------------------------------------ communs aux trois jeux */
.pk-log,.du-log{list-style:none;margin:0;padding:0;display:grid;gap:4px;font-size:13.5px;line-height:1.4;color:var(--mute);text-align:left}
.pk-log li.mj-side-title,.du-log li.mj-side-title{margin:0;color:var(--mute)}
.pk-log li.mj-side-title+li,.du-log li.mj-side-title+li{color:var(--ink-2)}
.pk-log li:first-child:not(.mj-side-title){color:var(--mute)}
.desk-side .pk-log,.desk-side .du-log{margin-top:6px}

/* ------------------------------------------------------------ Poker */
.pk-status{margin-bottom:2px}
.pk-ring{margin-top:34px}                 /* le siège du haut déborde de la table : place pour lui sous le meneur */
@media (min-width: 700px){ .pk-ring{margin-top:46px} }
.pk-seat{font-family:var(--font)}
.pk-name{font-weight:600}
.pk-tag{font-size:11.5px;text-transform:none;letter-spacing:0;color:var(--mute)}
.pk-tag.win{font-size:12.5px}
.pk-bet::before{content:none}
.pk-pot{font-family:var(--font)}
.pk-myinfo{gap:3px}
.pk-myinfo b{font:700 19px/1.15 var(--font)}
.pk-myinfo span{font-size:14.5px;font-weight:600;color:var(--acc-soft)}
.pk-actions .btn{min-height:52px;font-size:16px}
.pk-quick .btn{font-size:14px}
.pk-result{display:flex;flex-direction:column;gap:0;padding:0;background:none;border:0;border-radius:0}
.pk-show{display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"n c" "h c";column-gap:12px;row-gap:1px;align-items:center;padding:10px 14px;border-radius:0;background:none}
.pk-show.win{background:color-mix(in oklab, var(--pos) 12%, transparent)}
.pk-show-name{grid-area:n;font-size:15px;font-weight:600;color:var(--ink);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pk-show-hand{grid-area:h;font-size:13.5px;color:var(--ink-2);font-variant-numeric:tabular-nums}
.pk-show.win .pk-show-hand{color:var(--pos);font-weight:600}
.pk-show-cards{grid-area:c;display:flex;gap:3px}
[data-theme="light"] .pk-show.win .pk-show-hand,[data-theme="light"] .pk-tag.win{color:color-mix(in oklab, var(--pos) 45%, var(--ink))}
.pk-rank{font-variant-numeric:tabular-nums}
.pk-rank-n{flex:0 0 18px;color:var(--mute);font-size:13.5px}
.pk-rank-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pk-rank.me .pk-rank-name{font-weight:600}
.pk-rank b{font-weight:600}
@media (max-width: 699px){
  .pk-status .mj-title{font-size:24px}
  .pk-status .mj-say{font-size:16px}
}

/* ------------------------------------------------------------ Solitaire */
.so-meta{font-variant-numeric:tabular-nums}
.so-status{margin-bottom:2px}
.so-race{display:flex;flex-direction:column;gap:0}
.so-runner{display:grid;grid-template-columns:16px minmax(0,1fr) 30% auto;align-items:center;gap:10px;padding:10px 14px;margin:0;border:0;border-top:1px solid var(--line);border-radius:0;background:none;font-size:15px}
.so-runner:first-child{border-top:0}
.so-runner.me{border-color:var(--line);background:color-mix(in oklab, var(--acc) 9%, transparent)}
.so-runner.me:not(:first-child){border-top:1px solid var(--line)}
.so-runner.me .so-name{font-weight:700}
.so-rank{font-size:13.5px}
.so-name{font-weight:600}
.so-bar{background:var(--line)}
.so-count{font-size:13.5px}
.so-runner.done .so-count{color:var(--pos);font-weight:600}
[data-theme="light"] .so-runner.done .so-count{color:color-mix(in oklab, var(--pos) 45%, var(--ink))}
.so-tools{margin-top:2px}
.so-tools .btn.small{min-height:44px}
.so-moves{font-size:13.5px}
.so-again .btn{flex:1 1 150px;min-height:52px}
.so-end{align-self:center}
.btn.so-end{min-height:44px}

/* ------------------------------------------------------------ Duel des Cités */
.du-status{margin-bottom:2px}
/* les cités : une liste groupée, une ligne par rubrique */
.du-city{display:flex;flex-direction:column;gap:0;padding:0;border-radius:14px;overflow:hidden;background:var(--surface);border:1px solid var(--line);box-shadow:none}
.du-city.turn{border-color:var(--line);box-shadow:none}
.du-city-head{display:flex;align-items:center;gap:10px;padding:10px 14px}
.du-city-name{flex:1;min-width:0;font:600 16px/1.25 var(--font);letter-spacing:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.du-city-name small{font:500 13px var(--font);color:var(--mute)}
.du-city-turn{flex:0 0 auto;font-size:13px;font-weight:600;color:var(--on-acc);background:var(--acc);padding:2px 9px;border-radius:99px}
.du-coins{font-size:16px}
.du-score{font:600 14.5px var(--font);color:var(--ink);font-variant-numeric:tabular-nums;white-space:nowrap}
.du-city-row{display:grid;grid-template-columns:minmax(0,1fr);gap:5px;padding:9px 14px 10px;border-top:1px solid var(--line)}
.du-lbl{font-size:13px;font-weight:600;color:var(--mute)}
.du-wonders{display:flex;flex-direction:column;gap:0}
.du-w{display:flex;flex-direction:row;align-items:baseline;justify-content:space-between;gap:10px;width:100%;min-height:32px;padding:5px 0;border:0;border-radius:0;background:none;color:var(--ink);font:inherit;text-align:left;cursor:pointer}
.du-w+.du-w{border-top:1px dashed color-mix(in oklab, var(--line) 80%, transparent)}
.du-w b{font-size:14.5px;font-weight:500;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.du-w span{flex:0 0 auto;font-size:13.5px;color:var(--ink-2)}
.du-w.built{border-color:color-mix(in oklab, var(--line) 80%, transparent);background:none}
.du-w.built b{font-weight:700}
.du-w.built span{color:var(--acc-soft);font-weight:600}
.du-w.lost{opacity:.5}
.du-pills{gap:4px}
.du-pill{font-size:12.5px;padding:3px 8px;border-radius:5px}
.du-res,.du-sci{font-size:13.5px}
.du-tok.small{font-size:14px}
@media (min-width: 1100px){
  .desk-side .du-city+.du-city{margin-top:12px}
  .desk-side .du-w{min-height:28px;padding:3px 0}
}
/* la piste et les jetons gardent leur dessin, l'écriture passe à la police du système */
.du-cap{font-family:var(--font)}
.du-tok small{font-family:var(--font);font-size:10.5px}
/* le panneau d'action */
.du-sheet{gap:10px}
.du-detail{border-radius:14px;padding:13px 15px;gap:6px}
.du-dhead b{font:700 19px/1.2 var(--font);letter-spacing:-.01em}
.du-dhead small{font-size:13px}
.du-detail p{font-size:15px;line-height:1.45}
.du-detail .du-dcost{font-size:15px;color:var(--ink)}
.du-actions .btn{min-height:50px;font-size:15.5px}
.du-actions .wbtn{border:1px solid var(--line)}
.du-wlist,.du-choices{display:flex;flex-direction:column;gap:0}
.du-wcard,.du-choice{display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-start;gap:3px;width:100%;padding:12px 14px;margin:0;border:0;border-top:1px solid var(--line);border-radius:0;background:none;color:var(--ink);font:inherit;text-align:left}
.du-wcard:first-child,.du-choice:first-child{border-top:0}
button.du-wcard:hover,.du-choice:hover{border-color:var(--line);background:color-mix(in oklab, var(--acc) 9%, transparent)}
button.du-wcard:hover:first-child,.du-choice:hover:first-child{border-top:0}
.du-wcard b,.du-choice b{font:600 16px/1.25 var(--font);letter-spacing:0}
.du-wcost{font-size:14px}
.du-wtxt,.du-choice span{font-size:14px;color:var(--ink-2);line-height:1.4}
/* le décompte */
.du-final{display:flex;flex-direction:column;align-items:stretch;gap:0;padding:0;background:none;border:0;border-radius:0}
.du-table{font-size:15px}
.du-table th,.du-table td{padding:8px 14px}
.du-table th{font-size:13px;font-weight:600;color:var(--mute)}
.du-table tr.tot td{font-size:16px;font-weight:700}

/* ------------------------------------------------------------ charte, groupe humour */
/* Charte 2026, lot 2 : groupe humour. Fusionné dans style.css à la fin du lot.
   Mirage, Mème pas vrai, Diapason, Petit Brevet. Chargé après style.css : à spécificité égale, ces règles gagnent.
   Composants partagés du groupe (préfixe hm-) :
   .hm-players / .hm-player : scores en ligne sur téléphone, liste à filets dans la colonne de droite sur PC
   .hm-log : le fil de la partie ; .hm-rank : classement final dans une .mj-list */

/* ------------------------------------------------------------ joueurs, fil, classement (les quatre jeux) */
.hm-players{display:flex;flex-wrap:wrap;overflow:visible;margin:0;padding:0;gap:4px 14px;align-items:baseline}
.hm-players>.mj-side-title{flex-basis:100%;margin:0 0 2px}
.hm-player{display:flex;align-items:baseline;gap:6px;min-width:0}
.hm-name{font-size:14.5px;font-weight:600;color:var(--ink);overflow-wrap:anywhere}
.hm-player.me .hm-name::after{content:" (toi)";color:var(--mute);font-weight:400}
.hm-player.lead .hm-name{color:var(--acc)}
.hm-player.off{opacity:.5}
.hm-player i{font-style:normal;font-size:12.5px;color:var(--mute)}
.hm-player i.ok{color:var(--pos)}
.hm-player small{font-size:12.5px;color:var(--mute)}
.hm-score{font-size:14.5px;font-weight:600;color:var(--ink);font-variant-numeric:tabular-nums;white-space:nowrap}
.hm-score b{color:var(--pos);font-weight:700}
.hm-log{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:4px;font-size:13.5px;line-height:1.4;color:var(--mute);text-align:left}
.hm-log>.mj-side-title{margin:0}
.hm-rank{list-style:none;margin:0;padding:0;width:100%}
.hm-rank .mj-row span{display:flex;align-items:baseline;gap:10px;min-width:0;overflow-wrap:anywhere}
.hm-rank .mj-row i{font-style:normal;min-width:1.1em;color:var(--mute);font-variant-numeric:tabular-nums}
.hm-rank .mj-row b{font-weight:700;font-variant-numeric:tabular-nums}
.hm-rank .mj-row.me span{font-weight:600;color:var(--acc)}
.hm-rank .mj-row:first-child{background:color-mix(in oklab, var(--acc) 10%, var(--surface))}
@media (min-width: 1100px){
  .desk-side .hm-players{flex-direction:column;flex-wrap:nowrap;align-items:stretch;gap:0}
  .desk-side .hm-player{justify-content:space-between;padding:9px 0;border-top:1px solid var(--line)}
  .desk-side .hm-players>.mj-side-title+.hm-player{border-top:0}
  .desk-side .hm-name{flex:1}
}

/* ------------------------------------------------------------ Mème pas vrai */
/* la situation : une légende de mème, en gras, dans le cadre jaune du jeu */
.mm-prompt{margin:0;padding:18px 20px 20px;border-radius:16px;background:var(--surface);border:2px solid var(--acc);font:700 24px/1.22 var(--font);letter-spacing:-.015em;text-transform:none;text-align:left;color:var(--ink);text-wrap:pretty}
.mm-zone{gap:12px}
.mm-gif{letter-spacing:0;font:700 10.5px/1 var(--font)}
.mm-tag{font:600 12px/1 var(--font);padding:5px 8px}
.mm-light-prompt{font:700 22px/1.25 var(--font);text-transform:none;letter-spacing:-.01em;text-wrap:pretty}
.mm-light-cap{font-size:13px}
@media (min-width: 700px){ .mm-prompt{font-size:29px;padding:22px 24px 24px} .mm-light-prompt{font-size:26px} }

/* ------------------------------------------------------------ Mirage */
/* l'indice du conteur : un cartouche sous les tableaux, en or pâle */
.mi-clue{margin:0;padding:16px 20px 18px;border-radius:16px;background:var(--surface);border:1px solid var(--line);font:700 26px/1.2 var(--font);font-style:normal;letter-spacing:-.015em;color:var(--acc);text-wrap:pretty}
.mi-clue.spoken{font-size:17px;font-weight:500;letter-spacing:0;color:var(--ink-2)}
.mi-zone{gap:12px}
.mi-clue-form{gap:10px}
.mi-clue-in{font:500 18px var(--font);font-style:normal;min-height:52px;border-radius:12px}
.mi-jokers{justify-content:flex-start;text-align:left;font-size:14px;line-height:1.4;color:var(--ink-2)}
.mi-joker-dots{flex:0 0 auto}
.mi-offer{border-radius:16px}
.mi-offer-title,.mi-offer-head .mi-offer-title{font:600 17px/1.3 var(--font);font-style:normal}
.mi-joker-btn{font-weight:600}
.mi-owner,.mi-tag{font:600 12px/1 var(--font);padding:5px 8px}
.mi-votes{font:500 12px/1.3 var(--font)}
.mi-votes::before{content:"votes\00a0: "}
.mi-light-cap{font:600 16px/1.35 var(--font);font-style:normal}
.mi-light-cap small{font-size:12.5px}
@media (min-width: 700px){ .mi-clue{font-size:30px;padding:20px 24px 22px} }
.mi-card figcaption{font-family:var(--font)}
/* à la révélation : à qui est la carte en haut, qui a voté pour elle en bas, sans chevauchement */
.mi-owner{max-width:calc(100% - 12px);line-height:1.2;border-radius:8px}
.mi-votes{top:auto;bottom:24px;left:6px;right:6px;max-width:none;text-align:left;border-radius:8px}

/* ------------------------------------------------------------ Diapason */
/* la carte aux deux extrêmes et le cadran gardent leur dessin ; le texte passe à la police du système */
.dp-card{font:700 17px/1.2 var(--font);letter-spacing:-.005em}
.dp-clue-show{margin:0;padding:14px 18px 16px;border-radius:16px;background:var(--surface);border:1px solid var(--line);text-align:left;font:700 clamp(22px,6.2vw,28px)/1.18 var(--font);letter-spacing:-.015em;color:var(--ink);text-wrap:pretty}
.dp-clue-show.spoken{font-size:17px;font-weight:500;letter-spacing:0;color:var(--ink-2)}
.dp-nudge .btn{min-width:48px;min-height:44px}
.dp-nudge-hint{font-size:13.5px}
.dp-zone{gap:12px}
.dp-zone input[type=text]{font:500 18px var(--font);min-height:52px;border-radius:12px}
.dp-row .btn.ghost{border-color:var(--line)}
/* résultats de la manche : liste groupée, une pastille de la couleur de la zone touchée */
.dp-results{display:block;gap:0}
.dp-results li{padding:11px 14px;border:0;border-top:1px solid var(--line);border-radius:0;background:transparent}
.dp-results li:first-child{border-top:0}
.dp-results li.p4,.dp-results li.p3,.dp-results li.p2{border-color:var(--line);background:transparent}
.dp-results li b{display:inline-flex;align-items:center;gap:8px;font-variant-numeric:tabular-nums}
.dp-results li.hit b::before{content:"";width:10px;height:10px;border-radius:3px}
.dp-results li.p4 b::before{background:oklch(0.55 0.13 245)}
.dp-results li.p3 b::before{background:oklch(0.74 0.17 50)}
.dp-results li.p2 b::before{background:oklch(0.86 0.14 88)}
/* scores des équipes : nom, score, puis les membres sur une deuxième ligne */
.dp-scores .hm-player.dp-tm{flex-basis:100%;flex-wrap:wrap;column-gap:6px}
.dp-scores .hm-player.dp-tm .hm-name{display:inline-flex;align-items:center;gap:7px;color:var(--ink)}
.dp-scores .hm-player.dp-tm .hm-name::before{content:"";width:10px;height:10px;border-radius:3px;background:var(--dp-r)}
.dp-scores .hm-player.dp-tm.t1 .hm-name::before{background:var(--dp-l)}
.dp-scores .hm-members{flex-basis:100%;font-size:12.5px;color:var(--mute)}
.hm-rank .mj-row small{font-size:12.5px;font-weight:400;color:var(--mute)}
@media (min-width: 700px){ .dp-card{font-size:20px} }

/* ------------------------------------------------------------ Petit Brevet */
/* la lettre tamponnée et la feuille d'écolier restent des objets du jeu ; tout le reste passe à l'ossature */
.pb-head{flex-direction:row;align-items:center;gap:16px;text-align:left}
.pb-head .mj-status{flex:1;min-width:0}
.pb-head .pb-letter{flex:0 0 auto;width:76px;height:76px;font-size:52px}
.pb-halt .mj-title{color:var(--neg)}
.mj-prog.pb-done{margin:14px 0 0;font:inherit;font-size:13.5px;color:var(--mute);text-align:left}
.pb-cat{font:600 13px/1.2 var(--font);letter-spacing:0;text-transform:none;color:oklch(0.48 0.05 255)}
.pb-stopbtn,.pb-donebtn{font:700 19px var(--font);letter-spacing:0;min-height:56px}
#pb-main .btn.danger.pb-stopbtn{animation:none}
.pb-hint{text-align:left}
/* la vérification : une liste groupée par catégorie, une ligne par joueur */
.pb-board{gap:18px}
.pb-block{padding:0;background:none;border:0;border-radius:0}
.pb-block-cat{margin:0 0 6px 2px;font:600 13px/1.2 var(--font);letter-spacing:0;text-transform:none;color:var(--mute)}
.pb-lines{background:var(--surface);border:1px solid var(--line);border-radius:14px;overflow:hidden}
.pb-line+.pb-line{margin-top:0;border-top:1px solid var(--line)}
.pb-ans{min-height:50px;padding:9px 14px;border:0;border-radius:0;background:transparent}
button.pb-ans:active{transform:none;background:var(--surface-2)}
.pb-who{font-size:13px}
.pb-word{font:600 17px/1.2 var(--font)}
.pb-why{font-size:12.5px}
.pb-ans.ko{background:color-mix(in oklab, var(--neg) 12%, var(--surface))}
.pb-ans.contested{background:color-mix(in oklab, var(--neg) 20%, var(--surface))}
.pb-ans.contested .pb-why{color:var(--ink-2)}
.pb-ans.empty .pb-word{font-weight:400;color:var(--mute)}
.pb-ans.me{box-shadow:none}
.pb-ans.me .pb-who{color:var(--acc);font-weight:600}
.pb-force{flex:0 0 48px;min-height:50px;border:0;border-left:1px solid var(--line);border-radius:0;background:transparent;font-size:18px}
.pb-totals.hm-players,.pb-scores.hm-players{border-top:0;padding-top:0;font-size:inherit;color:inherit}
.pb-totals .me,.pb-scores .me{color:inherit}
.pb-actions{flex-direction:column;align-items:stretch;gap:8px}
.pb-actions .fine{margin:0;text-align:left}
.pb-force{font-family:var(--font)}

/* ------------------------------------------------------------ thèmes clairs : les verts et ors des palettes sombres manquent de contraste sur fond clair */
[data-theme="light"] .hm-score b,[data-theme="light"] .hm-player i.ok{color:oklch(0.50 0.13 150)}
[data-theme="light"] .pb-ans.ok .pb-pts{color:oklch(0.50 0.13 150)}
[data-theme="light"] .pb-ans.dup .pb-pts{color:oklch(0.52 0.12 70)}

/* ------------------------------------------------------------ charte, groupe roles */
/* Charte 2026, lot 2 : groupe roles (Undercover, Loup-Garou, Naufragés). Fusionné dans style.css à la fin du lot.
   Chargé après style.css : à spécificité égale, ces règles gagnent. Les objets de jeu gardent leur style
   (dossier secret d'Undercover, carte de rôle et écran de nuit du Loup-Garou, île, calendrier et cartes des
   Naufragés) ; l'interface autour suit l'ossature commune (.mj-*). */

/* ------------------------------------------------------------ pièces communes aux trois jeux
   .rl-block   : un intitulé discret (.mj-side-title) puis une liste groupée (.mj-list > .mj-row)
                 à plat dans la colonne de droite sur PC, comme les scores de Hors Limite
   .rl-choices : une liste de boutons (voter, désigner, choisir une action), une ligne par choix */
.rl-block{display:flex;flex-direction:column;gap:0;margin:0}
.rl-block>.mj-list{margin:0;padding:0;list-style:none}
.rl-block .mj-row{min-height:44px;padding:9px 14px}
.rl-name{flex:1;min-width:0;font-weight:500;color:var(--ink);overflow-wrap:anywhere}
.rl-name small{font-size:13px;font-weight:400;color:var(--mute)}
.rl-tag{flex:0 0 auto;font-size:13px;font-style:normal;color:var(--mute);text-align:right}
.rl-tag.ok{color:var(--pos)}
.rl-tag.bad{color:var(--neg)}
.rl-score{flex:0 0 auto;min-width:2ch;text-align:right;font-weight:650;font-variant-numeric:tabular-nums;color:var(--ink)}
.rl-num{flex:0 0 auto;min-width:1.2em;font-size:13px;color:var(--mute);font-variant-numeric:tabular-nums}
.mj-row.off{opacity:.5}
.mj-row.out .rl-name{color:var(--mute)}
.desk-side .rl-block>.mj-list{background:none;border:0;border-radius:0;overflow:visible}
.desk-side .rl-block .mj-row{padding:9px 0}

.rl-choices{display:grid;grid-template-columns:minmax(0,1fr)}
.rl-opt{display:flex;align-items:center;justify-content:space-between;gap:10px;width:100%;min-height:52px;margin:0;padding:10px 14px;border:0;border-top:1px solid var(--line);border-radius:0;
  background:transparent;box-shadow:none;color:var(--ink);font:inherit;font-size:16px;line-height:1.3;text-align:left;cursor:pointer;transition:background-color .15s;-webkit-tap-highlight-color:transparent}
.rl-choices>.rl-opt:first-child{border-top:0}
.rl-opt:active{background:var(--surface-2);transform:none}
.rl-opt.on{border-color:var(--line);background:color-mix(in oklab, var(--acc) 15%, var(--surface));box-shadow:inset 0 0 0 2px var(--acc);color:var(--ink)}
.rl-opt.on .rl-tag{color:var(--ink);font-weight:600}
.rl-opt:disabled{opacity:.42;cursor:default}
.rl-opt:focus-visible{outline:2px solid var(--acc);outline-offset:-3px}
@media (hover:hover){ .rl-opt:not(:disabled):not(.on):hover{background:color-mix(in oklab, var(--ink) 5%, var(--surface))} }
.rl-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.rl-main b{font-size:16px;font-weight:600;color:var(--ink)}
.rl-main small,.rl-main>span{font-size:13.5px;line-height:1.35;color:var(--ink-2);overflow-wrap:anywhere}
@media (min-width: 700px){
  .rl-choices.cols{grid-template-columns:repeat(2,minmax(0,1fr))}
  .rl-choices.cols>.rl-opt:nth-child(2){border-top:0}
  .rl-choices.cols>.rl-opt:nth-child(odd){border-right:1px solid var(--line)}
  .rl-choices.cols>.rl-opt:nth-child(odd):last-child{border-right:0}
}
@media (prefers-reduced-motion:reduce){ .rl-opt{transition:none} }

/* ------------------------------------------------------------ Undercover
   Le dossier (mot secret, éliminé, mots de la manche) garde le papier kraft, la machine à écrire et les tampons. */
#uc-main .uc-label{font:14px/1.2 "Special Elite","Courier New",monospace;letter-spacing:0;text-transform:none;opacity:.78}
#uc-main .uc-file .fine{font-size:14px}
#uc-main .uc-secret{min-height:150px}
#uc-main .uc-elim .uc-stamp{font-size:19px}
#uc-main .uc-words>div{gap:4px}
#uc-main .uc-said,#uc-main .uc-recap .mj-row span{font-family:var(--font);letter-spacing:0}
#uc-main .uc-said i{font-style:normal;color:var(--mute)}

/* les listes : à table, ordre de parole, indices, scores */
#uc-main .uc-roster,#uc-main .uc-scores,#uc-main .uc-recap,#uc-main .uc-order{display:flex;flex-direction:column;flex-wrap:nowrap;align-items:stretch;gap:0;padding:0;margin:0;border:0;background:none;font-size:15px;color:var(--ink)}
#uc-main .uc-roster .mj-row{justify-content:flex-start}
#uc-main .uc-roster .uc-role{flex:0 0 auto;font-size:13.5px;font-weight:600}
#uc-main .uc-roster .uc-civil .uc-role{color:var(--pos)}
#uc-main .uc-roster .uc-undercover .uc-role{color:var(--neg)}
#uc-main .uc-roster .uc-white .uc-role{color:var(--ink-2)}
#uc-main .uc-scores .me .rl-name{font-weight:650}
#uc-main .uc-recap .mj-row{display:grid;grid-template-columns:minmax(84px,38%) minmax(0,1fr);align-items:baseline;font-size:14.5px}
#uc-main .uc-recap .uc-said{color:var(--ink);overflow-wrap:anywhere}
#uc-main .uc-recap .out{opacity:.6}

/* l'ordre de parole : en ligne sur téléphone, en liste sur PC */
#uc-main .uc-order .mj-list{display:flex;flex-wrap:wrap;gap:6px 16px;background:none;border:0;border-radius:0;overflow:visible;counter-reset:none}
#uc-main .uc-order .mj-list .mj-row{min-height:0;padding:0;border:0;border-radius:0;background:none;gap:5px;font-size:15px;color:var(--ink-2);counter-increment:none}
#uc-main .uc-order .mj-list .mj-row::before{content:none}
#uc-main .uc-order .mj-row .rl-name{flex:0 1 auto;font-weight:500;color:inherit}
#uc-main .uc-order .mj-row .rl-tag{display:none}
#uc-main .uc-order .mj-list .mj-row.done{opacity:.5}
#uc-main .uc-order .mj-list .mj-row.now{opacity:1;color:var(--ink)}
#uc-main .uc-order .mj-row.now .rl-name{font-weight:700}
#uc-main .uc-order .mj-row.now .rl-num{color:var(--acc);font-weight:700}
#uc-main .desk-side .uc-order .mj-list{display:block}
#uc-main .desk-side .uc-order .mj-list .mj-row{display:flex;justify-content:flex-start;padding:9px 0;border-top:1px solid var(--line)}
#uc-main .desk-side .uc-order .mj-list .mj-row:first-child{border-top:0}
#uc-main .desk-side .uc-order .mj-row .rl-name{flex:1}
#uc-main .desk-side .uc-order .mj-row .rl-tag{display:inline}

/* le vote : une ligne par suspect, ses indices dessous */
#uc-main .uc-vote{display:grid;gap:0}
#uc-main .uc-target{flex-direction:row;align-items:center;min-height:60px;padding:10px 14px;border:0;border-top:1px solid var(--line);border-radius:0;background:transparent;box-shadow:none}
#uc-main .uc-vote>.uc-target:first-child{border-top:0}
#uc-main .uc-target:active{transform:none;background:var(--surface-2)}
#uc-main .uc-target.on{background:color-mix(in oklab, var(--acc) 15%, var(--surface));box-shadow:inset 0 0 0 2px var(--acc)}
#uc-main .uc-target b{font-size:16px}
#uc-main .uc-clue-form input,#uc-main .uc-guess input{min-height:50px}
#uc-main .uc-file{margin-top:14px}
#uc-main .uc-words{margin-top:2px}

/* ------------------------------------------------------------ Loup-Garou
   La carte de rôle, le rôle qu'on maintient appuyé et l'écran de nuit gardent la gothique et la nuit bleue. */
#lw-main .lw-meta{display:flex;align-items:center;gap:8px}
#lw-main .lw-meta .lw-moon{flex:0 0 auto;width:13px;height:13px;box-shadow:0 0 8px oklch(0.93 0.06 90/.5),inset -3px -1px 0 oklch(0.8 0.05 90)}
#lw-main .lw-meta .lw-moon.sun{box-shadow:0 0 8px oklch(0.86 0.15 80/.55)}
#lw-main .lw-sleep{flex-direction:column;gap:14px;padding:38px 16px 42px}
#lw-main .lw-sleep .lw-moon{width:34px;height:34px}
#lw-main .lw-zz{letter-spacing:.02em}
#lw-main .lw-peek{min-height:56px;border-radius:14px}
#lw-main .lw-peek .lw-face.back{font-size:14.5px}

/* les choix : une ligne par joueur, deux colonnes sur grand écran */
#lw-main .lw-pick{display:grid;grid-template-columns:minmax(0,1fr);gap:0}
#lw-main .lw-opt{font-weight:600}
#lw-main .lw-opt:disabled .rl-tag{color:var(--mute)}
@media (min-width: 700px){ #lw-main .lw-pick.cols{grid-template-columns:repeat(2,minmax(0,1fr))} }
#lw-main .lw-act{margin:0 0 8px;text-align:left;font-size:14.5px;color:var(--ink-2)}
#lw-main .lw-potion{min-height:54px;white-space:normal}
#lw-main .lw-meute .rl-tag{color:var(--ink-2)}
#lw-main .lw-meute .me .rl-name{font-weight:650}
#lw-main .lw-reveal-card{gap:6px;padding:22px 16px;border-radius:16px}
#lw-main .lw-reveal-card b{font:700 26px/1.15 var(--font);letter-spacing:-.01em}
#lw-main .lw-reveal-card span{font-size:15.5px}
#lw-main .lw-actions{flex-direction:column;align-items:stretch}

/* les morts de l'annonce */
#lw-main .lw-deaths .mj-row{justify-content:flex-start;gap:12px;padding:12px 14px;animation:pop .4s var(--ease)}
#lw-main .lw-deaths .lw-ico{width:30px;height:30px;color:var(--blood)}
#lw-main .lw-deaths .rl-name{display:flex;flex-direction:column;gap:1px}
#lw-main .lw-deaths .rl-name b{font-size:17px;font-weight:650}
#lw-main .lw-deaths .rl-name small{font-size:13.5px;color:var(--mute)}
#lw-main .lw-death-role{font-size:14px;font-weight:600;color:var(--ink-2)}
#lw-main .lw-votes{margin:0;line-height:1.6}

/* le village : une ligne par joueur, son rôle quand on le connaît */
#lw-main .lw-village{display:flex;flex-direction:column;gap:0;margin:0}
#lw-main .lw-village .lw-p{display:flex;flex-direction:row;align-items:center;justify-content:flex-start;gap:10px;min-width:0;padding:8px 14px;border:0;border-top:1px solid var(--line);border-radius:0;background:transparent;box-shadow:none;text-align:left}
#lw-main .lw-village .lw-p:first-child{border-top:0}
#lw-main .lw-village .lw-ico{width:22px;height:22px;color:var(--ink-2)}
#lw-main .lw-village .lw-ico.q{width:22px;height:22px;font:600 12px var(--font);border-width:1.5px}
#lw-main .lw-village .lw-p.me .rl-name{font-weight:650}
#lw-main .lw-village .lw-p.dead{opacity:.55}
#lw-main .lw-village .lw-p.dead .rl-name{text-decoration:line-through}
#lw-main .lw-village .lw-p.win .rl-name{font-weight:700}
#lw-main .lw-village .lw-p.win .rl-tag{color:var(--pos)}
#lw-main .lw-village .lw-p.off .rl-name::after{content:" (absent)";font-weight:400;color:var(--mute)}
#lw-main .desk-side .lw-village .lw-p{padding:8px 0}

/* le journal, commun à Loup-Garou et Naufragés */
.rl-log{display:block;margin:0;text-align:left}
.rl-log ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:4px;font-size:13.5px;line-height:1.4;color:var(--mute)}
.rl-log li:first-child{color:var(--ink-2)}
#lw-main .lw-log{display:block;text-align:left;font-size:13.5px}

/* ------------------------------------------------------------ Naufragés
   L'île (scène SVG), le calendrier et les cartes des naufragés gardent leur dessin ; tout le reste suit l'ossature. */
#nf-main .nf-island{display:flex;flex-direction:column;gap:8px}
#nf-main .nf-scene{border-radius:14px}
#nf-main .nf-weather{margin:0;font:600 15px/1.35 var(--font);letter-spacing:0;color:var(--ink)}
#nf-main .desk-main .nf-scene{max-width:560px}
#nf-main .nf-flash{padding:11px 14px;border-radius:12px;background:var(--surface-2);text-align:left}
#nf-main .nf-flash p{margin:0;font:650 16px/1.35 var(--font);letter-spacing:0;color:var(--ink)}
#nf-main .nf-flash small{display:block;margin-top:3px;font-size:13px;color:var(--mute)}

/* le choix du jour, et le pari sur le bois (contrôle segmenté) */
#nf-main .nf-do{min-height:60px}
#nf-main .nf-gamble{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px}
#nf-main .nf-gamble-label{font-size:15px;color:var(--ink-2)}
#nf-main .nf-seg{display:flex;gap:2px;padding:3px;background:var(--surface-2);border-radius:11px;max-width:100%;overflow-x:auto;scrollbar-width:none}
#nf-main .nf-seg-opt{min-width:42px;min-height:40px;padding:6px 10px;border:0;border-radius:8px;background:transparent;color:var(--ink-2);font:600 14px var(--font);font-variant-numeric:tabular-nums;cursor:pointer}
#nf-main .nf-seg-opt[aria-pressed="true"]{background:var(--surface);color:var(--ink);box-shadow:0 1px 3px oklch(0 0 0/.22)}
#nf-main .nf-seg-opt:focus-visible{outline:2px solid var(--acc);outline-offset:1px}
#nf-main .nf-gamble-note{flex-basis:100%;margin:0;font-size:13.5px;line-height:1.4;color:var(--mute)}

/* le compte rendu du soir, les réserves, les objets */
#nf-main .nf-report,#nf-main .nf-camp,#nf-main .nf-items{display:flex;flex-direction:column;gap:0;padding:0;border:0;border-radius:0;background:none}
#nf-main .nf-report .mj-row{align-items:baseline}
#nf-main .nf-report .rl-name{font-weight:400;color:var(--ink-2)}
#nf-main .nf-report .rl-name b{font-weight:600;color:var(--ink)}
#nf-main .nf-secret{color:var(--ink);font-weight:600}
#nf-main .nf-camp .rl-tag{text-align:right}
#nf-main .nf-thing{flex-wrap:wrap;align-items:center}
#nf-main .nf-thing .btn{flex:0 0 auto}
#nf-main .nf-thing .nf-target{flex-basis:100%}
#nf-main .nf-peek{margin:0;text-align:left;font-size:14.5px;color:var(--ink-2)}
#nf-main .nf-row{flex-direction:column;align-items:stretch}

/* les cartes des naufragés : une grille d'objets du jeu, sous un intitulé */
#nf-main .nf-people{display:block}
#nf-main .nf-people .mj-side-title{margin-bottom:8px}
#nf-main .nf-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(112px,1fr));gap:8px}
#nf-main .desk-side .nf-cards{grid-template-columns:repeat(2,minmax(0,1fr))}
#nf-main .nf-log{display:block;text-align:left}

/* ------------------------------------------------------------ charte, groupe sablier-geo */
/* Charte 2026, lot 2 : groupe sablier-geo. Fusionné dans style.css à la fin du lot.
   Sablier et Boussole : police du système, voix du meneur (.mj-*), listes groupées plutôt que
   cartes. Les objets de jeu gardent leur dessin : la carte de papier du Sablier, sa toile, la
   photo et la carte de Boussole. */

/* ============================================================ Sablier */
/* ossature : colonne du jeu + colonne des équipes (grille .desk-split de style.css sur PC) */
.sab-body,.sab-col,.sab-side{display:flex;flex-direction:column;gap:15px;min-width:0}
.sab-side .mj-side-title{margin:4px 0 -9px}
.sab-side>.mj-side-title:first-child{margin-top:0}

/* fil d'étapes : sobre, et seulement pendant la préparation */
#s-sablier .steps{gap:6px;font:600 13px var(--font);letter-spacing:0;text-transform:none;color:var(--mute)}
#s-sablier .steps span{padding-top:7px;border-top-width:3px;border-radius:0}
#s-sablier .steps[data-step="3"]{display:none}

/* textes et boutons */
#s-sablier .btn.small{min-height:44px}
#s-sablier .note{margin:0}
#s-sablier .error{font-size:14.5px;line-height:1.4}
.sab-rule{margin:0;padding:12px 14px;border-radius:12px;background:var(--surface);font-size:15px;line-height:1.45;color:var(--ink-2)}
.sab-rule b{color:var(--ink);font-weight:650}
.sab-tools-row{display:flex;flex-wrap:wrap;gap:8px}
.sab-tools-row .btn{flex:1 1 auto}

/* choix du mode d'équipes : contrôle segmenté */
.sab-seg{display:flex;width:fit-content;max-width:100%;gap:2px;padding:3px;background:var(--surface-2);border-radius:11px}
.sab-seg button{min-height:40px;padding:6px 16px;border:0;border-radius:8px;background:transparent;color:var(--ink-2);font:600 15px var(--font);cursor:pointer}
.sab-seg button[aria-pressed="true"]{background:var(--surface);color:var(--ink);box-shadow:0 1px 3px oklch(0 0 0/.22)}

/* listes d'équipes (composition, scores) */
.sab-dot{flex:0 0 auto;display:inline-block;width:10px;height:10px;border-radius:50%;background:var(--tc);box-shadow:0 0 0 2px color-mix(in oklab, var(--tc) 25%, transparent)}
.sab-team{width:100%;margin:0;border-left:0;border-right:0;border-bottom:0;border-radius:0;background:transparent;color:var(--ink);font:inherit;text-align:left;align-items:center;min-height:58px}
.sab-team:first-child{border-top:0}
button.sab-team{cursor:pointer;transition:background .15s}
button.sab-team:active{background:var(--surface-2)}
.sab-team.mine,.sab-team.active{background:color-mix(in oklab, var(--acc) 11%, var(--surface))}
.sab-team-main{display:flex;flex-direction:column;gap:3px;min-width:0}
.sab-team-name{display:flex;align-items:center;gap:8px;font-weight:650;font-size:16px}
.sab-team-name em{font-style:normal;font-weight:600;font-size:12.5px;color:var(--acc)}
.sab-team-players{display:block;font-size:14px;line-height:1.4;color:var(--ink-2);padding-left:18px}
.sab-orphans .sab-team-players{padding-left:0}
.sab-p+.sab-p::before{content:", ";color:var(--mute)}
.sab-p.me{color:var(--ink);font-weight:600}
.sab-p.off{opacity:.5;text-decoration:line-through}
.sab-p.speaks{color:var(--acc);font-weight:700}
.sab-p.none{color:var(--mute)}
.sab-p small{font-size:12px;color:var(--mute)}
.sab-team-detail{padding-left:18px;font-size:12.5px;color:var(--mute);font-variant-numeric:tabular-nums}
.sab-team-count{font-size:13px;color:var(--mute);white-space:nowrap}
.sab-team-total{font-size:24px;font-weight:700;font-variant-numeric:tabular-nums;min-width:2ch;text-align:right}

/* qui a fini de trier, récap du tour d'avant */
.sab-roster .mj-row,.sab-recap .mj-row{min-height:46px}
.sab-roster .mj-row.me{font-weight:600}
.sab-roster .mj-row.off{opacity:.5}
.sab-rname{display:flex;align-items:center;gap:8px;min-width:0}
.sab-tag{font-style:normal;font-size:13px;color:var(--mute);white-space:nowrap}
.sab-tag.ok{color:var(--pos);font-weight:600}
.sab-recap{display:flex;flex-direction:column;gap:13px}
.sab-none{color:var(--mute)}

/* question du gong, pour l'hôte */
.sab-ask{display:flex;flex-direction:column;gap:10px;padding:16px;border-radius:14px;background:color-mix(in oklab, var(--gold) 13%, var(--surface));border:1px solid color-mix(in oklab, var(--gold) 45%, var(--line))}
.sab-ask h3{margin:0;font:700 21px/1.2 var(--font);letter-spacing:-.01em}
.sab-ask p{margin:0;font-size:15px;line-height:1.45;color:var(--ink-2)}
.sab-ask .row.split{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.sab-ask .btn{min-width:0;white-space:normal;padding-left:10px;padding-right:10px}

/* les cartes en main : le papier reste, la typo passe au système */
.hand-card{min-height:104px;border-radius:13px}
.hc-cat,.game-card-cat{font:600 12.5px var(--font);letter-spacing:0;text-transform:none;color:oklch(0.47 0.09 55)}
.hc-name{font:700 16.5px/1.2 var(--font);letter-spacing:-.01em}
.hand-card.discarded::after{content:"écartée";top:auto;bottom:9px;right:10px;font:600 12.5px var(--font);letter-spacing:0;text-transform:none}
.dots{letter-spacing:1px}

/* le chrono et la carte du tour */
#s-sablier .timer-wrap{margin-top:0;gap:8px}
#s-sablier .timer{font:700 56px/1 var(--font);letter-spacing:-.03em;font-variant-numeric:tabular-nums}
.game-card{border-radius:20px}
.game-card-name{font:800 clamp(28px,8vw,40px)/1.1 var(--font);letter-spacing:-.025em;font-variation-settings:normal}
.game-card.mini .game-card-name{font-size:clamp(20px,5.5vw,26px)}
.game-card-diff{font-size:12px}
.play-actions .btn{font-family:var(--font)}
.btn.guess{font-size:18px;font-weight:700}
.sab-tally{display:flex;justify-content:center;flex-wrap:wrap;gap:6px 18px;margin:0;font-size:14px;color:var(--mute)}
.sab-tally b{font-size:21px;font-weight:700;font-variant-numeric:tabular-nums;color:var(--ink);margin-right:3px}
.sab-tally .ok b{color:var(--pos)}
.sab-tally .pass b{color:var(--gold)}
.sab-tally .pass.bump{display:inline-block;animation:bump .45s ease}
.sab-found{display:flex;flex-wrap:wrap;justify-content:center;gap:4px 12px;margin:0;font-size:15px;color:var(--ink-2)}
.sab-found .mj-side-title{flex-basis:100%;text-align:center;margin:0}
.sab-found span:not(.mj-side-title){animation:pop .25s var(--ease)}

/* la toile et ses outils */
#sab-tools{display:flex;flex-direction:column;gap:8px}
#sab-tools .tools{display:flex;flex-wrap:wrap;gap:6px}
#sab-tools .tools .btn{min-height:40px;padding:6px 11px;font-size:14px}
.swatches .sw{width:30px;height:30px}

/* galerie des dessins et correction */
.gallery-wrap{display:flex;flex-direction:column;gap:10px}
.gallery-wrap .mj-side-title{margin:4px 0 -2px}
.gallery figure{border-radius:12px}
.gallery figcaption{font:600 14px/1.3 var(--font)}
.gallery figcaption small{font-size:12.5px;margin-top:1px}
.gallery.missed figure{border-color:color-mix(in oklab, var(--neg) 60%, var(--line))}
.amend{border-radius:14px;padding:12px 14px;font-size:15px}
.amend summary{min-height:24px;font-weight:600}
.amend-list label{min-height:40px}
.amend-list small{font-size:13px}

/* réactions : les emojis restent, le bouton suit la grille de 44 px */
.react-btn{width:44px;height:44px}

@media (min-width: 700px){ .sab-ask h3{font-size:24px} }
@media (min-width: 1100px){
  #s-sablier:has(.sab-body.desk-split){max-width:1120px;padding-left:28px;padding-right:28px}
  .sab-body.desk-split{display:grid;grid-template-columns:minmax(0,1fr) 340px;column-gap:28px;align-items:start}
  /* la toile à gauche, ses outils en colonne à droite : tout tient sans défiler */
  .sab-draw{flex-direction:row;align-items:flex-start;justify-content:center;gap:12px}
  #sab-canvas{flex:1 1 auto;min-width:0;width:auto}
  .sab-draw.readonly #sab-canvas{flex:0 1 500px}
  #sab-tools:not([hidden]){flex:0 0 172px}
  #sab-tools .swatches{justify-content:flex-start}
  #sab-tools .tools{display:grid;grid-template-columns:1fr 1fr}
  #sab-tools .tools .btn{width:100%}
  .sab-side.desk-side{background:var(--surface-2);border-radius:16px;padding:18px 18px 20px;gap:15px}
  .sab-side .mj-list{background:var(--surface)}
  .sab-side .sab-team-total{font-size:21px}
}

/* ============================================================ Boussole */
.geo-hud{gap:6px}
.geo-hud-top{display:flex;justify-content:space-between;align-items:center;gap:12px}
.geo-hud .mj-status{min-width:0}
.geo-hud .mj-title{font-size:23px}
.geo-hud .mj-say{font-size:15.5px}
.geo-hud .mj-prog{margin-top:8px}
.geo-timer{font:700 28px/1 var(--font);letter-spacing:-.02em;font-variant-numeric:tabular-nums;color:var(--ink)}
.geo-timer.hot{color:var(--neg)}
@media (max-width: 899px){
  #geo-pano{height:calc(100dvh - 435px);min-height:220px}
  .geo-bigmap #geo-map{height:calc(70dvh - 245px)}
  .revealing #geo-map{height:calc(100dvh - 420px);min-height:260px}
}
@media (min-width: 900px){
  #geo-pano,.geo-bigmap #geo-pano{height:calc(100dvh - 262px);min-height:300px}
  #s-geo:not(.revealing) #geo-bar{flex-direction:row;flex-wrap:wrap;justify-content:center;align-items:center;max-width:none}
  #s-geo:not(.revealing) .geo-actions{width:540px;max-width:100%}
}
.leaflet-tooltip.geo-tip{font:600 12.5px/1.3 var(--font)}
#geo-bar .note{margin:0}
.geo-actions .btn{font-family:var(--font)}
.geo-actions .geo-toggle{font-size:15px}

/* résultats de la manche et classement */
.geo-results{display:block;counter-reset:none}
.geo-results .mj-row{display:grid;grid-template-columns:18px 12px minmax(0,1fr) auto auto;gap:10px;min-height:48px;padding:10px 14px;background:none;border-radius:0}
.geo-results .mj-row::before{content:none}
.geo-rk{font-size:14px;font-weight:600;color:var(--mute);font-variant-numeric:tabular-nums}
.geo-results .mj-row i{width:12px;height:12px;border-radius:50%;box-shadow:0 0 0 2px oklch(0.98 0.005 210)}
.geo-results .mj-row b{font-weight:600;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.geo-results .mj-row span{font-size:14px;color:var(--ink-2);font-variant-numeric:tabular-nums;white-space:nowrap}
.geo-results .mj-row em{font-style:normal;font-weight:700;color:var(--acc);font-variant-numeric:tabular-nums;min-width:52px;text-align:right}
.geo-results .mj-row.none{opacity:.6}
.geo-results .mj-row.me b{color:var(--ink)}
.geo-scores{display:block;border:0;padding:0}
.geo-scores .mj-row{min-height:46px}
.geo-scores .mj-row b{font-variant-numeric:tabular-nums}
.geo-scores .mj-row.me span{font-weight:600}
.geo-block{display:flex;flex-direction:column;gap:6px}
.geo-link{margin:0;text-align:center;font-size:14px}

/* sur PC, à la révélation : la carte à gauche, résultats et classement à droite */
@media (min-width: 1100px){
  #s-geo.revealing{display:grid;grid-template-columns:minmax(0,1fr) 360px;grid-template-rows:auto 1fr;column-gap:24px;row-gap:14px;align-items:start}
  #s-geo.revealing .geo-hud{grid-column:1 / -1}
  #s-geo.revealing .geo-stage{grid-column:1;grid-row:2}
  #s-geo.revealing #geo-bar{grid-column:2;grid-row:2;max-width:none;margin:0;background:var(--surface-2);border-radius:16px;padding:18px;gap:14px}
  #s-geo.revealing #geo-bar .mj-list{background:var(--surface)}
  #s-geo.revealing #geo-map,#s-geo.revealing #geo-map:hover{height:calc(100dvh - 250px)}
  .geo-hud .mj-title{font-size:27px}
}

/* ------------------------------------------------------------ charte, retouches globales du lot 2 */
[data-game] h1,[data-game] .banner{font-family:var(--font);font-weight:700;text-transform:none;letter-spacing:-.02em}
/* Crème : un orange un peu plus profond, pour un bouton principal lisible (contraste AA) */
[data-theme="light"]{--acc:oklch(0.575 0.165 50);--acc-soft:oklch(0.5 0.15 48)}
/* plus de police d'affichage pour l'ossature : --font-d retombe sur la police du système hors des jeux */
:root{--font-d:var(--font)}
.km-pip{font-family:var(--font)}

/* ============================================================ outils de dessin communs (toile.js) : Sablier et Téléphone dessiné */
.toile-bar{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
.toile-seg{display:inline-flex;gap:2px;padding:3px;border-radius:11px;background:var(--surface-2)}
.toile-seg button{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:38px;min-width:40px;padding:6px 11px;border:0;border-radius:8px;background:transparent;color:var(--ink-2);font:600 14px var(--font);cursor:pointer}
.toile-seg button svg{width:18px;height:18px}
.toile-seg button[aria-checked="true"]{background:var(--surface);color:var(--ink);box-shadow:0 1px 3px oklch(0 0 0/.22)}
.toile-seg.sizes button i{display:block;border-radius:50%;background:currentColor}
.toile-colors{display:flex;flex-wrap:wrap;gap:6px}
.toile-sw{position:relative;width:30px;height:30px;padding:0;border-radius:50%;border:2px solid color-mix(in oklab, var(--ink) 18%, transparent);background:var(--c);cursor:pointer}
.toile-sw[aria-pressed="true"],.toile-more.on{box-shadow:0 0 0 2px var(--bg),0 0 0 4px var(--acc)}
.toile-more{display:grid;place-items:center;background:conic-gradient(#e5484d,#fbbf24,#2fa96b,#38bdf8,#8e4ec6,#e5484d);overflow:hidden}
.toile-more.on{background:var(--c)}
.toile-more input{position:absolute;inset:0;opacity:0;cursor:pointer;width:100%;height:100%;padding:0;border:0;min-height:0}
.toile-act{display:flex;gap:6px;margin-left:auto}
.toile-act .btn{min-height:38px}
.toile-act .btn.armed{color:var(--neg);border-color:var(--neg)}
.toile-cv,#sab-canvas{cursor:crosshair}
.toile-cv[data-tool="fill"],#sab-canvas[data-tool="fill"]{cursor:cell}
#sab-tools.toile-bar{flex-direction:row}
@media (min-width: 1100px){
  #sab-tools.toile-bar{flex-direction:column;align-items:stretch}
  #sab-tools .toile-seg{display:flex}
  #sab-tools .toile-seg button{flex:1;padding:6px 4px}
  #sab-tools .toile-seg.tools button span{display:none}
  #sab-tools .toile-act{margin-left:0;flex-direction:column}
}

/* ============================================================ Téléphone dessiné : encre indigo, papier et crayon jaune */
[data-game="teldes"]{
  --bg:        oklch(0.215 0.045 270);
  --surface:   oklch(0.265 0.050 270);
  --surface-2: oklch(0.315 0.055 270);
  --line:      oklch(0.385 0.055 270);
  --ink:       oklch(0.965 0.012 95);
  --ink-2:     oklch(0.830 0.030 260);
  --mute:      oklch(0.680 0.040 265);
  --acc:       oklch(0.860 0.150 95);
  --acc-soft:  oklch(0.900 0.110 95);
  --on-acc:    oklch(0.250 0.050 270);
  --pos:       oklch(0.820 0.140 155);
  --neg:       oklch(0.680 0.200 25);
  --gold:      oklch(0.860 0.150 95);
  --glow: 0.12;
}
[data-theme="light"][data-game="teldes"]{
  --bg:        oklch(0.965 0.018 90);
  --surface:   oklch(0.995 0.008 90);
  --surface-2: oklch(0.930 0.022 90);
  --line:      oklch(0.865 0.030 90);
  --ink:       oklch(0.250 0.060 270);
  --ink-2:     oklch(0.420 0.060 270);
  --mute:      oklch(0.550 0.050 270);
  --acc:       oklch(0.450 0.160 275);
  --acc-soft:  oklch(0.400 0.150 275);
  --on-acc:    oklch(0.985 0.010 90);
  --pos:       oklch(0.520 0.130 155);
  --neg:       oklch(0.540 0.200 25);
  --glow: 0.07;
}
.g-teldes .gname{color:inherit}
.tdart{width:56px;height:48px;overflow:visible}
.gcard[aria-pressed="true"] .tdart{transform:rotate(-4deg);transition:transform .4s var(--ease)}
.td-zone{display:flex;flex-direction:column;gap:12px}
.td-prompt{margin:0;padding:14px 16px;border-radius:14px;background:var(--surface);border:1px solid var(--line);font:700 22px/1.25 var(--font);letter-spacing:-.01em;text-align:center}
.td-prompt i{font-style:normal;color:var(--mute);font-weight:600}
.td-imgbox{border-radius:14px;overflow:hidden;background:#fff;border:1px solid var(--line);max-width:640px;width:100%;margin:0 auto;aspect-ratio:4/3;display:grid;place-items:center}
.td-imgbox img{width:100%;height:100%;object-fit:contain;display:block}
.td-imgbox p{color:oklch(0.5 0.02 270);font-weight:600;margin:0}
.td-input{width:100%;font-size:19px;padding:15px 16px}
.td-row{display:flex;flex-wrap:wrap;gap:8px}
.td-row .btn{flex:1 1 150px}
.toile-pad{display:flex;flex-direction:column;gap:10px;max-width:680px;width:100%;margin:0 auto}
.toile-cv{display:block;width:100%;aspect-ratio:4/3;height:auto;background:#fff;border-radius:14px;border:1px solid var(--line);touch-action:none;box-shadow:0 10px 24px -16px oklch(0 0 0/.5)}
.td-book{display:flex;flex-direction:column;gap:10px}
.td-page{position:relative;display:flex;flex-direction:column;gap:6px;padding:12px 14px 12px;border-radius:14px;background:var(--surface);border:1px solid var(--line);animation:screen-in .35s var(--ease)}
.td-who{font-size:13px;font-weight:600;color:var(--mute)}
.td-text{margin:0;font:700 21px/1.25 var(--font);letter-spacing:-.01em;padding-right:64px}
.td-text i{font-style:normal;color:var(--mute)}
.td-page img{display:block;width:100%;max-width:560px;aspect-ratio:4/3;object-fit:contain;background:#fff;border-radius:10px}
.td-blank{margin:0;color:var(--mute);font-weight:600}
.td-heart{position:absolute;right:10px;top:8px;display:inline-flex;align-items:center;gap:5px;min-height:34px;padding:4px 11px;border-radius:99px;border:1px solid var(--line);background:var(--surface-2);color:var(--ink-2);font:600 14px var(--font);font-variant-numeric:tabular-nums}
button.td-heart{cursor:pointer}
.td-heart.on{background:color-mix(in oklab, oklch(0.62 0.21 15) 22%, var(--surface));border-color:oklch(0.62 0.21 15);color:oklch(0.72 0.2 15)}
[data-theme="light"] .td-heart.on{color:oklch(0.52 0.21 15)}
.td-page.img .td-heart{top:auto;bottom:18px;right:18px;background:color-mix(in oklab, var(--surface) 88%, transparent)}
.td-rank{padding:0;margin:0;list-style:none}
.td-rank b{font-variant-numeric:tabular-nums}
.td-players{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 14px}
.td-players .mj-side-title{flex-basis:100%}
.td-player{display:flex;gap:6px;align-items:baseline;font-size:14.5px}
.td-player i{font-style:normal;font-size:12.5px;color:var(--pos)}
.td-player.me span::after{content:" (toi)";color:var(--mute)}
.td-player.off{opacity:.45}
.td-log{list-style:none;margin:0;padding:0;display:grid;gap:3px;font-size:13.5px;color:var(--mute)}
.desk-side .td-players{flex-direction:column;flex-wrap:nowrap;align-items:stretch;gap:0}
.desk-side .td-player{justify-content:space-between;padding:9px 0;border-top:1px solid var(--line)}
.desk-side .td-players .mj-side-title+.td-player{border-top:0}
.desk-side .td-player i{color:var(--mute)}

/* ============================================================ Nom de code : ardoise, papier kraft, rouge et bleu */
[data-game="nomcode"]{
  --bg:        oklch(0.200 0.014 250);
  --surface:   oklch(0.250 0.016 250);
  --surface-2: oklch(0.300 0.018 250);
  --line:      oklch(0.370 0.020 250);
  --ink:       oklch(0.960 0.010 85);
  --ink-2:     oklch(0.810 0.015 250);
  --mute:      oklch(0.650 0.020 250);
  --acc:       oklch(0.820 0.120 85);
  --acc-soft:  oklch(0.880 0.090 85);
  --on-acc:    oklch(0.230 0.030 250);
  --pos:       oklch(0.800 0.140 155);
  --neg:       oklch(0.660 0.200 25);
  --gold:      oklch(0.820 0.120 85);
  --glow: 0.10;
  --nc-r:      oklch(0.600 0.190 27);
  --nc-b:      oklch(0.580 0.140 250);
  --nc-paper:  oklch(0.925 0.030 85);
  --nc-ink:    oklch(0.240 0.020 60);
  --nc-mid:    oklch(0.800 0.045 80);
  --nc-x:      oklch(0.180 0.010 250);
}
[data-theme="light"][data-game="nomcode"]{
  --bg:        oklch(0.950 0.008 250);
  --surface:   oklch(0.990 0.004 250);
  --surface-2: oklch(0.915 0.010 250);
  --line:      oklch(0.850 0.014 250);
  --ink:       oklch(0.220 0.020 250);
  --ink-2:     oklch(0.400 0.020 250);
  --mute:      oklch(0.540 0.020 250);
  --acc:       oklch(0.520 0.120 70);
  --acc-soft:  oklch(0.450 0.110 70);
  --on-acc:    oklch(0.990 0.005 85);
  --glow: 0.06;
  --nc-paper:  oklch(0.955 0.030 85);
}
.g-nomcode .gname{color:inherit}
.ncart{display:grid;grid-template-columns:repeat(3,14px);gap:3px;width:48px}
.ncart i{height:11px;border-radius:2px;background:oklch(0.85 0.04 80)}
.ncart .c0{background:oklch(0.6 0.19 27)} .ncart .c1{background:oklch(0.58 0.14 250)} .ncart .c3{background:oklch(0.22 0.01 250)}
.gcard[aria-pressed="true"] .ncart .c2{background:oklch(0.6 0.19 27);transition:background .4s}
.nc-status.t0 .mj-title{color:var(--ink)}
.nc-clue{display:flex;flex-wrap:wrap;gap:8px}
.nc-clue input{flex:1 1 200px;font-size:18px}
.nc-clue select{flex:0 0 auto;min-width:92px}
.nc-clue .btn{flex:1 1 160px}
.nc-grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:6px;width:100%;max-width:760px;margin:0 auto}
.nc-card{position:relative;display:grid;place-items:center;min-height:58px;padding:8px 3px 14px;border-radius:9px;border:0;background:var(--nc-paper);color:var(--nc-ink);font:700 clamp(10px,2.75vw,15.5px)/1.1 var(--font);letter-spacing:.01em;text-transform:uppercase;text-align:center;overflow-wrap:anywhere;hyphens:auto;box-shadow:0 2px 0 oklch(0 0 0/.25);transition:transform .15s var(--ease),box-shadow .2s,background .25s}
button.nc-card{cursor:pointer}
button.nc-card:active{transform:scale(.96)}
.nc-card .nc-w{display:block;max-width:100%}
.nc-pts{position:absolute;left:3px;right:3px;bottom:2px;font:600 9.5px/1.1 var(--font);text-transform:none;letter-spacing:0;color:oklch(0.35 0.03 60);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.nc-card.pointed{box-shadow:0 0 0 3px var(--acc),0 4px 10px oklch(0 0 0/.3)}
.nc-card.has-points:not(.pointed){box-shadow:0 0 0 2px color-mix(in oklab, var(--acc) 60%, transparent)}
/* ce que voit l'espion (et tout le monde à la fin) : la couleur, en teinte */
.nc-card.k0:not(.rev){background:color-mix(in oklab, var(--nc-r) 32%, var(--nc-paper));box-shadow:inset 0 0 0 2px var(--nc-r)}
.nc-card.k1:not(.rev){background:color-mix(in oklab, var(--nc-b) 32%, var(--nc-paper));box-shadow:inset 0 0 0 2px var(--nc-b)}
.nc-card.k3:not(.rev){background:var(--nc-x);color:oklch(0.9 0.01 85)}
.nc-card.k3:not(.rev) .nc-pts{color:oklch(0.8 0.01 85)}
/* les mots retournés : l'agent couvre la carte */
.nc-card.rev{box-shadow:none}
.nc-card.rev.k0{background:var(--nc-r);color:oklch(0.98 0.01 25)}
.nc-card.rev.k1{background:var(--nc-b);color:oklch(0.98 0.01 250)}
.nc-card.rev.k2{background:var(--nc-mid);color:oklch(0.35 0.03 60)}
.nc-card.rev.k3{background:var(--nc-x);color:oklch(0.85 0.01 85)}
.nc-card.rev .nc-w{opacity:.7;text-decoration:line-through;text-decoration-thickness:2px}
.nc-card.rev.k0 .nc-w,.nc-card.rev.k1 .nc-w{text-decoration:none;opacity:.85}
.nc-row{display:flex;flex-wrap:wrap;gap:8px}
.nc-row .btn{flex:1 1 180px}
.nc-setup{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
.nc-team{display:flex;flex-direction:column;gap:8px;min-width:0}
.nc-team h4{margin:0;display:flex;justify-content:space-between;align-items:baseline;font:700 16px var(--font)}
.nc-team.t0 h4{color:color-mix(in oklab, var(--nc-r) 70%, var(--ink))}
.nc-team.t1 h4{color:color-mix(in oklab, var(--nc-b) 60%, var(--ink))}
.nc-team h4 b{font-variant-numeric:tabular-nums}
.nc-team .mj-row{padding:9px 12px;font-size:14.5px}
.nc-team .mj-row i{font-style:normal;font-size:12.5px;color:var(--mute)}
.nc-team .mj-row.me span::after{content:" (toi)";color:var(--mute)}
.nc-team .mj-row.off{opacity:.45}
.nc-team.on .mj-list{box-shadow:0 0 0 2px var(--acc)}
.nc-side{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
.nc-log{list-style:none;margin:0;padding:0;display:grid;gap:3px;font-size:13.5px;color:var(--mute)}
.nc-log li:nth-child(2){color:var(--ink-2)}
.desk-side .nc-side{grid-template-columns:1fr}
@media (min-width: 700px){ .nc-card{min-height:74px;border-radius:11px} .nc-grid{gap:8px} }
ul.mj-list,ol.mj-list{list-style:none;margin:0;padding:0}

/* ====================== BATAILLE ====================== */
[data-game="bataille"]{
  --bg:        oklch(0.205 0.030 18);
  --surface:   oklch(0.255 0.036 18);
  --surface-2: oklch(0.305 0.040 18);
  --line:      oklch(0.380 0.045 18);
  --ink:       oklch(0.960 0.012 80);
  --ink-2:     oklch(0.820 0.020 40);
  --mute:      oklch(0.660 0.030 30);
  --acc:       oklch(0.840 0.110 82);
  --acc-soft:  oklch(0.900 0.080 82);
  --on-acc:    oklch(0.250 0.040 20);
  --pos:       oklch(0.800 0.140 155);
  --neg:       oklch(0.680 0.190 25);
  --gold:      oklch(0.840 0.110 82);
  --glow: 0.10;
  --bt-felt:   oklch(0.300 0.070 18);
  --bt-back-a: oklch(0.520 0.170 25);
  --bt-back-b: oklch(0.430 0.150 25);
}
[data-theme="light"][data-game="bataille"]{
  --bg:        oklch(0.960 0.012 60);
  --surface:   oklch(0.992 0.005 60);
  --surface-2: oklch(0.920 0.020 40);
  --line:      oklch(0.860 0.025 30);
  --ink:       oklch(0.230 0.030 20);
  --ink-2:     oklch(0.400 0.035 20);
  --mute:      oklch(0.540 0.030 20);
  --acc:       oklch(0.520 0.170 25);
  --acc-soft:  oklch(0.450 0.150 25);
  --on-acc:    oklch(0.990 0.005 80);
  --glow: 0.06;
  --bt-felt:   oklch(0.900 0.040 30);
}
.g-bataille .gname{font-family:"Alfa Slab One",Georgia,serif;font-weight:400;font-size:24px;letter-spacing:.01em;color:oklch(0.84 0.11 82)}
[data-theme="light"] .g-bataille .gname{color:oklch(0.5 0.17 25)}
.btart{position:relative;display:block;width:54px;height:52px}
.btart i{position:absolute;top:6px;width:28px;height:40px;border-radius:4px;background:oklch(0.975 0.012 90);border:1px solid oklch(0.82 0.02 80);box-shadow:0 3px 8px oklch(0 0 0/.35);font:400 12px/1 "Alfa Slab One",serif;font-style:normal;color:oklch(0.2 0.02 260);padding:4px 0 0 4px;box-sizing:border-box;transition:transform .4s var(--ease)}
.btart i b{position:absolute;inset:14px 0 0;display:grid;place-items:center;font:400 16px/1 system-ui,sans-serif}
.btart .l{left:4px;transform:rotate(-12deg)}
.btart .r{left:22px;transform:rotate(10deg);color:oklch(0.55 0.21 25)}
.gcard[aria-pressed="true"] .btart .l{transform:rotate(-18deg) translate(-3px,-2px)}
.gcard[aria-pressed="true"] .btart .r{transform:rotate(16deg) translate(3px,-2px)}

.bt-status.war .mj-title{color:var(--acc)}
.bt-table{display:grid;grid-template-columns:1fr;gap:8px;padding:10px;border-radius:16px;background:var(--bt-felt);margin-top:4px}
.bt-table.n3,.bt-table.n4,.bt-table.n5,.bt-table.n6{grid-template-columns:1fr 1fr}
.bt-table.n3 .bt-seat.me,.bt-table.n5 .bt-seat.me{grid-column:1/-1}
.bt-seat{position:relative;display:grid;gap:6px;padding:9px 10px 10px;border-radius:12px;background:color-mix(in oklab, var(--bg) 55%, transparent);border:1.5px solid transparent;transition:border-color .2s,background .2s,opacity .3s;min-width:0}
.bt-seat.me{background:color-mix(in oklab, var(--bg) 35%, transparent)}
.bt-seat.need{border-color:color-mix(in oklab, var(--acc) 45%, transparent)}
.bt-seat.fight{border-color:var(--acc);box-shadow:0 0 0 3px color-mix(in oklab, var(--acc) 22%, transparent)}
.bt-seat.win{border-color:var(--pos);background:color-mix(in oklab, var(--pos) 16%, var(--bg))}
.bt-seat.out{opacity:.45}
.bt-seat.tap{cursor:pointer}
.bt-name{display:flex;justify-content:space-between;align-items:baseline;gap:8px;font-size:14.5px;font-weight:600;min-width:0}
.bt-name span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.bt-name em{font-style:normal;font-weight:400;color:var(--mute)}
.bt-name i{font-style:normal;font-weight:400;font-size:13px;color:var(--mute);white-space:nowrap}
.bt-cards{display:flex;align-items:center;gap:12px;min-height:74px}
.bt-pile{position:relative;flex:0 0 auto}
.bt-pile b{position:absolute;left:50%;bottom:-6px;transform:translateX(-50%);min-width:24px;padding:1px 6px;border-radius:99px;background:var(--surface);color:var(--ink);font:600 12.5px/1.35 var(--font);text-align:center;font-variant-numeric:tabular-nums;box-shadow:0 1px 3px oklch(0 0 0/.3)}
.bt-pile.mid .bt-card{box-shadow:2px 2px 0 -1px oklch(0.97 0.01 90),2px 2px 0 0 var(--bt-back-b),0 3px 8px oklch(0 0 0/.35)}
.bt-pile.thick .bt-card{box-shadow:2px 2px 0 -1px oklch(0.97 0.01 90),2px 2px 0 0 var(--bt-back-b),4px 4px 0 -1px oklch(0.97 0.01 90),4px 4px 0 0 var(--bt-back-b),0 4px 10px oklch(0 0 0/.35)}
.bt-pile.empty{width:48px;aspect-ratio:5/7.2;border-radius:6px;border:1.5px dashed color-mix(in oklab, var(--ink) 30%, transparent)}
.bt-card.km-card{width:48px;border-radius:6px;cursor:inherit}
.bt-card.back{width:48px;aspect-ratio:5/7.2;border-radius:6px;border:2px solid oklch(0.97 0.01 90);background:repeating-linear-gradient(45deg, var(--bt-back-a,oklch(0.52 0.17 25)) 0 4px, var(--bt-back-b,oklch(0.43 0.15 25)) 4px 8px);box-shadow:0 3px 8px oklch(0 0 0/.35);flex:0 0 auto;box-sizing:border-box}
.bt-card .km-corner{top:3px;left:4px}
.bt-card .km-corner b{font-size:13px}
.bt-card .km-corner i{font-size:10px}
.bt-card .km-pip{font-size:24px;padding-top:10px}
.bt-card .km-corner.bottom{display:none}
.bt-played{display:flex;align-items:center;min-width:0}
.bt-played .bt-card+.bt-card{margin-left:-30px}
.bt-played .bt-card.new{animation:bt-flip .32s var(--ease) both}
.bt-played.none span{font-size:13px;color:var(--mute)}
.bt-seat.tap .bt-pile{animation:bt-nudge 1.6s var(--ease) infinite}
@keyframes bt-flip{from{transform:rotateY(80deg) translateX(-10px);opacity:.3}to{transform:none;opacity:1}}
@keyframes bt-nudge{0%,70%,100%{transform:none}80%{transform:translateY(-4px)}90%{transform:translateY(0)}}
@media (prefers-reduced-motion: reduce){ .bt-played .bt-card.new,.bt-seat.tap .bt-pile{animation:none} }
.bt-row{display:flex;flex-wrap:wrap;align-items:center;gap:10px 16px;margin-top:4px}
.bt-row .bt-flip{flex:1 1 220px}
.bt-row select{flex:0 1 auto}
.bt-auto{display:inline-flex;align-items:center;gap:8px;font-size:14.5px;color:var(--ink-2);cursor:pointer;min-height:40px}
.bt-auto input{width:18px;height:18px;accent-color:var(--acc)}
.bt-side .mj-row.out{opacity:.55}
.bt-log .mj-row{font-size:13.5px;color:var(--mute)}
.bt-log .mj-row:first-child{color:var(--ink-2)}
@media (min-width: 700px){
  .bt-table{gap:10px;padding:14px}
  .bt-table.n2{grid-template-columns:1fr 1fr}
  .bt-table.n2 .bt-seat.me{grid-column:auto}
  .bt-cards{min-height:100px;gap:16px}
  .bt-card.km-card,.bt-card.back,.bt-pile.empty{width:66px}
  .bt-card .km-corner b{font-size:16px} .bt-card .km-corner i{font-size:12px} .bt-card .km-pip{font-size:32px}
  .bt-played .bt-card+.bt-card{margin-left:-42px}
}

/* ------------------------------------------------------------ Salon : emoji, joueurs, invitation */
.name-row{display:flex;gap:10px;align-items:stretch}
.name-row input{flex:1;min-width:0}
.emo-btn{flex:0 0 auto;width:56px;min-height:50px;border-radius:var(--r-s);border:1px solid var(--line);background:var(--surface);font-size:28px;line-height:1;cursor:pointer;display:grid;place-items:center;transition:transform .12s var(--ease),border-color .15s}
.emo-btn:hover{border-color:var(--acc)}
.emo-btn:active{transform:scale(.94)}
.emo-btn:focus-visible,.emo:focus-visible,.chip.me:focus-visible{outline:2px solid var(--acc);outline-offset:2px}
.emo-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(50px,1fr));gap:6px;margin:12px 0 10px}
.emo{min-height:50px;border-radius:12px;border:1px solid transparent;background:var(--surface-2);font-size:27px;line-height:1;cursor:pointer;display:grid;place-items:center;transition:transform .12s var(--ease),background .15s}
@media (hover:hover){.emo:not(:disabled):hover{background:color-mix(in oklab,var(--acc) 14%,var(--surface-2))}}
.emo:active{transform:scale(.92)}
.emo.on{border-color:var(--acc);background:color-mix(in oklab,var(--acc) 24%,var(--surface))}
.emo:disabled{opacity:.22;cursor:not-allowed}
.chip .pemo{font-size:18px;line-height:1;flex:0 0 auto}
.chip.me{cursor:pointer}
@media (hover:hover){.chip.me:hover .pname{text-decoration:underline;text-decoration-color:var(--mute);text-underline-offset:3px}}
.chip-x{position:relative;flex:0 0 auto;width:26px;height:26px;margin:-4px -6px -4px 0;border-radius:50%;border:0;background:transparent;color:var(--mute);font:500 19px/1 var(--font);cursor:pointer;display:grid;place-items:center;transition:background .15s,color .15s}
.chip-x::before{content:"";position:absolute;inset:-7px}
@media (hover:hover){.chip-x:hover{background:color-mix(in oklab,var(--neg) 18%,transparent);color:var(--neg)}}
.players .chip .chip-x{order:9}

#btn-players{position:relative;color:var(--ink-2)}
#btn-players.alert::after{content:"";position:absolute;top:5px;right:5px;width:8px;height:8px;border-radius:50%;background:var(--neg);box-shadow:0 0 0 2px var(--surface)}
.pl-list{display:flex;flex-direction:column;margin:10px 0 12px;border:1px solid var(--line);border-radius:12px;overflow:hidden}
.pl-row{display:flex;align-items:center;gap:12px;padding:10px 12px;min-height:58px}
.pl-row+.pl-row{border-top:1px solid var(--line)}
.pl-row .pemo{font-size:25px;width:32px;text-align:center;flex:0 0 auto}
.pl-name{flex:1;display:flex;flex-direction:column;min-width:0;line-height:1.3}
.pl-name b{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pl-name small{color:var(--mute);font-size:13px;font-variant-numeric:tabular-nums}
.pl-row.off .pemo{opacity:.5}
.pl-row.off small{color:var(--neg)}

#btn-invite{margin-top:4px}
.invite-img{display:block;width:100%;height:auto;aspect-ratio:1200/630;border-radius:12px;outline:1px solid var(--line);outline-offset:-1px;margin:12px 0 8px;background:var(--surface-2)}
.invite-url{font-size:13px;color:var(--mute);word-break:break-all;margin:0 0 14px}
.invite-acts{display:flex;flex-direction:column;gap:8px;margin-bottom:12px}
.invite-row{display:flex;gap:8px}
.invite-row .btn{flex:1}
.invite-row .btn[hidden]{display:none}
.invite-banner{margin:0 0 6px;padding:13px 15px;border-radius:var(--r-s);font-size:17px;line-height:1.35;background:color-mix(in oklab,var(--acc) 15%,var(--surface));border:1px solid color-mix(in oklab,var(--acc) 40%,var(--line))}
.invite-banner b{font-weight:700}
.invite-banner span{display:block;margin-top:3px;font-size:14px;color:var(--ink-2)}
#f-home.invited [data-act=create],#f-home.invited .join-label,#f-home.invited #in-code{display:none}
#f-home.invited .join-row .btn{flex:1}
