/* MINUIT — Poker entre potes (Texas Hold'em) : la table du club, sous le projecteur */
.g-holdem { position: relative; overflow: hidden; color: var(--text); font-family: var(--font-ui);
  --cw: clamp(38px, min(3.1vw, 7.2vh), 84px); --hw: clamp(56px, min(4.7vw, 10.8vh), 124px); --bw: clamp(56px, min(4.8vw, 11vh), 128px); --bgap: clamp(6px, .55vw, 14px);
  --av: clamp(44px, 3.4vw, 62px); --plate-w: clamp(148px, 11.4vw, 214px); --plate-h: clamp(46px, 3.3vw, 58px); --bar-h: 132px;
  background:
    radial-gradient(ellipse 55% 48% at 50% 38%, rgba(255,236,190,.10), transparent 70%),
    radial-gradient(ellipse 90% 70% at 50% -12%, rgba(26,32,64,.9), transparent 70%),
    repeating-conic-gradient(from 0deg at 50% 118%, rgba(222,184,92,.028) 0deg 4deg, transparent 4deg 11deg),
    var(--bg-0); }
.g-holdem .ph-wrap { display: flex; flex-direction: column; height: 100%; }
.g-holdem .ph-room { flex: 1; position: relative; min-height: 0; }
/* réglette des potes flottante (barre pleine) : la salle commence sous elle (la place du haut à droite passait dessous) ; l'ovale et les
   places, posés en % de la salle, suivent */
body:has(.so-dock.is-float) .g-holdem .ph-room { margin-top: var(--so-float-h, 58px); }

/* ---------- l'ovale : rail de noyer, filet de laiton, feutre émeraude ---------- */
.g-holdem .ph-rail { position: absolute; left: 4.2%; right: 4.2%; top: 5.5%; bottom: 7%; border-radius: 999px;
  background:
    radial-gradient(ellipse 50% 22% at 50% 0%, rgba(255,210,150,.20), transparent 70%),
    linear-gradient(180deg, #3a1c0e 0%, #26110a 42%, #170904 100%);
  box-shadow: inset 0 2px 0 rgba(255,220,160,.18), inset 0 -18px 40px rgba(0,0,0,.6), 0 34px 80px rgba(0,0,0,.72), 0 0 0 1px rgba(0,0,0,.6); }
.g-holdem .ph-rail::before { content: ""; position: absolute; inset: 6px; border-radius: inherit; border: 1px dashed rgba(222,184,92,.34); pointer-events: none; }
.g-holdem .ph-felt { position: absolute; inset: clamp(13px, 1.25vw, 22px); border-radius: 999px; overflow: hidden; border: 2px solid var(--gold);
  box-shadow: 0 0 0 3px #0e0602, 0 0 0 4px rgba(222,184,92,.34), inset 0 0 0 1px rgba(0,0,0,.45), inset 0 50px 140px rgba(0,0,0,.5), inset 0 -40px 110px rgba(0,0,0,.45);
  background:
    radial-gradient(ellipse 46% 40% at 50% 44%, rgba(255,250,220,.08), transparent 72%),
    repeating-radial-gradient(circle at 30% 20%, rgba(255,255,255,.017) 0 1px, transparent 1px 3px),
    radial-gradient(ellipse 82% 78% at 50% 42%, #178561, #0d5a42 55%, #052b1d 100%); }
.g-holdem .ph-felt::before { content: ""; position: absolute; inset: 7%; border-radius: 999px; border: 1px solid rgba(247,221,143,.16); pointer-events: none; }
.g-holdem .ph-felt::after { content: ""; position: absolute; inset: 0; pointer-events: none; opacity: 0; transition: opacity .5s;
  background: radial-gradient(ellipse 34% 40% at 50% 47%, transparent 45%, rgba(0,0,0,.55) 100%); }
.g-holdem .ph-room.is-tense .ph-felt::after { opacity: 1; }
.g-holdem .ph-emblem { position: absolute; left: 50%; top: 45%; transform: translate(-50%, -50%) scale(.92); display: flex; flex-direction: column; align-items: center;
  pointer-events: none; opacity: 0; transition: opacity .6s, transform .8s cubic-bezier(.2,.8,.2,1); }
.g-holdem .ph-room.is-wait .ph-emblem { opacity: .95; transform: translate(-50%, -50%); }
.g-holdem .ph-emb-t { font-family: var(--font-display); font-size: clamp(40px, 4.4vw, 84px); letter-spacing: .42em; padding-left: .42em; line-height: 1;
  background: linear-gradient(180deg, rgba(255,247,214,.34), rgba(222,184,92,.3) 50%, rgba(140,106,34,.26)); -webkit-background-clip: text; background-clip: text; color: transparent;
  filter: drop-shadow(0 2px 0 rgba(0,0,0,.25)); }
.g-holdem .ph-emb-s { margin-top: 8px; font-size: clamp(11px, .85vw, 15px); letter-spacing: .6em; padding-left: .6em; text-transform: uppercase; color: rgba(247,221,143,.3); }
.g-holdem .ph-room.is-wait .ph-board { opacity: 0; }
.g-holdem .ph-board { transition: opacity .5s; }
.g-holdem .ph-room.is-wait .ph-center { top: 62%; }
.g-holdem .ph-emb-s::before, .g-holdem .ph-emb-s::after { content: "◆"; margin: 0 .8em; font-size: .7em; vertical-align: middle; }

/* ---------- centre : pots, cartes communes, état ---------- */
.g-holdem .ph-center { position: absolute; left: 50%; top: 47%; transform: translate(-50%, -50%); display: flex; flex-direction: column; align-items: center;
  gap: clamp(6px, .7vw, 12px); z-index: 5; pointer-events: none; }
.g-holdem .ph-board { display: flex; gap: var(--bgap); --card-w: var(--bw); }
.g-holdem .ph-slot { position: relative; width: var(--bw); aspect-ratio: 5 / 7; border-radius: 5.4% / 3.857%; border: 1.5px dashed rgba(247,221,143,.2);
  background: rgba(0,0,0,.08); transition: transform .4s cubic-bezier(.2,.8,.2,1); }
.g-holdem .ph-slot > .pcard { position: absolute; inset: 0; width: 100%; box-shadow: -2px 4px 10px rgba(0,0,0,.4); }
.g-holdem .ph-slot.ph-stacked { transform: translateX(calc(var(--sx, 0) * (var(--bw) + var(--bgap)))); transition: none; }
/* les cartes brûlées : une petite pile face cachée à droite du tableau, une carte par rue (le moteur brûle avant flop, turn et river) */
.g-holdem .ph-boardrow { position: relative; }
.g-holdem .ph-burn { position: absolute; left: calc(100% + var(--bgap) * 2.4); top: 50%; width: calc(var(--bw) * .62); aspect-ratio: 5 / 7; margin-top: calc(var(--bw) * -.434);
  --card-w: calc(var(--bw) * .62); pointer-events: none; }
.g-holdem .ph-burn > .pcard { position: absolute; left: 0; top: 0; width: 100%; box-shadow: -1px 3px 7px rgba(0,0,0,.45);
  translate: calc(var(--k, 0) * 3px) calc(var(--k, 0) * -2px); rotate: calc(-9deg + var(--k, 0) * 6deg); }
.g-holdem .ph-status { min-height: 18px; font-family: var(--font-display); font-size: clamp(11px, .85vw, 15px); letter-spacing: .24em; text-transform: uppercase;
  color: rgba(247,221,143,.8); text-shadow: 0 2px 8px #000; white-space: nowrap; }
.g-holdem .ph-pots { display: flex; gap: 14px; justify-content: center; min-height: 40px; align-items: center; }
.g-holdem .ph-pot { display: flex; align-items: center; gap: 7px; padding: 4px 12px 4px 8px; border-radius: 99px; background: rgba(5,6,11,.6);
  border: 1px solid var(--line-strong); box-shadow: 0 6px 16px rgba(0,0,0,.35); transition: opacity .35s, transform .35s; animation: ph-pop .35s cubic-bezier(.2,.9,.3,1.3); }
.g-holdem .ph-pot.is-main { border-color: rgba(247,221,143,.6); }
.g-holdem .ph-pot.is-side { background: rgba(10,13,24,.72); }
.g-holdem .ph-pot.is-gone { opacity: 0; transform: scale(.8); }
.g-holdem .ph-pot-l { font-size: 10.5px; letter-spacing: .14em; text-transform: uppercase; color: var(--text-dim); }
.g-holdem .ph-pot-v { font-size: clamp(14px, 1.05vw, 19px); color: var(--gold-hi); }
.g-holdem .ph-pot-who { display: flex; gap: 2px; }
.g-holdem .ph-pot-who i { font-style: normal; width: 20px; height: 20px; border-radius: 50%; display: grid; place-items: center; font-size: 12px;
  background: color-mix(in srgb, var(--pc) 35%, #0a0d18); border: 1px solid var(--pc); }
.g-holdem .ph-stackc { position: relative; display: inline-block; width: 26px; height: 26px; flex: none; }
.g-holdem .ph-stackc .chip { --chip-size: 26px; position: absolute; left: 0; top: calc(var(--k, 0) * -3.5px); box-shadow: 0 2px 3px rgba(0,0,0,.45); }
.g-holdem .ph-pot .ph-stackc { width: 30px; height: 30px; }
.g-holdem .ph-pot .ph-stackc .chip { --chip-size: 30px; }

/* ---------- places ---------- */
.g-holdem .ph-seat { position: absolute; width: var(--plate-w); transform: translate(-50%, -50%); z-index: 10;
  transition: left .75s cubic-bezier(.4,.1,.2,1), top .75s cubic-bezier(.4,.1,.2,1); }
.g-holdem .ph-pod { position: relative; }
.g-holdem .ph-seat.is-empty .ph-pod { display: none; }
.g-holdem .ph-seat:not(.is-empty) .ph-sit { display: none; }
.g-holdem .ph-plate { position: relative; height: var(--plate-h); border-radius: 99px; display: flex; align-items: center;
  padding: 0 14px 0 calc(var(--av) - 2px); z-index: 2;
  background: linear-gradient(180deg, rgba(26,32,64,.96), rgba(8,10,20,.97)); border: 1px solid color-mix(in srgb, var(--pc) 55%, var(--gold-lo));
  box-shadow: 0 8px 20px rgba(0,0,0,.55), inset 0 1px 0 rgba(255,255,255,.08); transition: box-shadow .3s, opacity .3s, filter .3s; }
.g-holdem .ph-av { position: absolute; left: -10px; top: 50%; width: var(--av); height: var(--av); transform: translateY(-50%); border-radius: 50%;
  display: grid; place-items: center; font-size: calc(var(--av) * .52); line-height: 1;
  background: radial-gradient(circle at 35% 30%, color-mix(in srgb, var(--pc) 60%, #fff 12%), color-mix(in srgb, var(--pc) 42%, #0a0d18) 70%);
  border: 2px solid var(--pc); box-shadow: 0 0 0 2px rgba(5,6,11,.9), 0 6px 14px rgba(0,0,0,.5); }
.g-holdem .ph-emo { filter: drop-shadow(0 2px 2px rgba(0,0,0,.4)); }
.g-holdem .ph-id { display: flex; flex-direction: column; min-width: 0; line-height: 1.15; }
.g-holdem .ph-name { font-weight: 600; font-size: clamp(12.5px, .92vw, 16px); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; color: var(--text); }
.g-holdem .ph-stack { font-size: clamp(13px, 1vw, 18px); color: var(--gold-hi); transition: color .3s, text-shadow .3s; }
.g-holdem .ph-stack.is-bump { color: var(--win); text-shadow: 0 0 12px rgba(62,224,143,.7); }
.g-holdem .ph-tag { position: absolute; right: 8px; top: -9px; display: flex; gap: 3px; z-index: 3; pointer-events: none; }
.g-holdem .ph-t { font-size: 9.5px; font-weight: 700; letter-spacing: .12em; text-transform: uppercase; padding: 2px 6px; border-radius: 99px;
  background: #0a0d18; border: 1px solid var(--line-strong); color: var(--text-dim); }
.g-holdem .ph-t.is-allin { background: linear-gradient(180deg, #f7dd8f, #b8913b); color: #1a1204; border-color: #fff3c4; box-shadow: 0 0 12px rgba(247,221,143,.6); }
.g-holdem .ph-t.is-me { color: var(--pc); border-color: color-mix(in srgb, var(--pc) 60%, transparent); }
.g-holdem .ph-t.is-pause, .g-holdem .ph-t.is-off { color: var(--warn); border-color: rgba(255,181,71,.5); }
.g-holdem .ph-t.is-fold { color: var(--text-faint); }
.g-holdem .ph-cards { position: absolute; left: 50%; bottom: calc(100% - var(--plate-h) * .28); transform: translateX(-38%); display: flex; z-index: 1; --card-w: var(--cw);
  transition: opacity .35s; }
.g-holdem .ph-seat.is-top .ph-cards { bottom: auto; top: calc(100% - 3px); }
.g-holdem .ph-seat.is-mine .ph-cards { --card-w: var(--hw); transform: translateX(-42%); }
.g-holdem .ph-cw { flex: none; transform-origin: 50% 110%; }
.g-holdem .ph-cw > .pcard { box-shadow: -2px 4px 10px rgba(0,0,0,.45); transition: transform .3s, filter .3s, box-shadow .3s; }
.g-holdem .ph-cw:nth-child(1) { transform: rotate(-7deg); }
.g-holdem .ph-cw:nth-child(2) { transform: rotate(7deg); margin-left: calc(var(--card-w) * -.34); }
.g-holdem .ph-seat.is-top .ph-cw { transform-origin: 50% -10%; }
.g-holdem .ph-seat.is-top .ph-cw:nth-child(1) { transform: rotate(7deg); }
.g-holdem .ph-seat.is-top .ph-cw:nth-child(2) { transform: rotate(-7deg); }
.g-holdem .ph-seat.is-folded .ph-cards { opacity: 0; }
.g-holdem .ph-seat.is-folded .ph-plate, .g-holdem .ph-seat.is-out .ph-plate { opacity: .5; filter: grayscale(.65); }
.g-holdem .ph-seat.is-paused .ph-plate, .g-holdem .ph-seat.is-off .ph-plate { opacity: .6; filter: grayscale(.5); }
.g-holdem .ph-seat.is-mine .ph-plate { border-color: var(--pc); box-shadow: 0 8px 22px rgba(0,0,0,.55), 0 0 0 1px color-mix(in srgb, var(--pc) 45%, transparent), inset 0 1px 0 rgba(255,255,255,.1); }
.g-holdem .ph-seat.is-turn .ph-plate { box-shadow: 0 0 0 2px var(--gold-hi), 0 0 26px rgba(247,221,143,.45), 0 8px 20px rgba(0,0,0,.55); }
.g-holdem .ph-seat.is-turn.is-mine .ph-plate { animation: ph-you .8s ease-in-out infinite alternate; }
@keyframes ph-you { from { box-shadow: 0 0 0 2px var(--pc), 0 0 18px color-mix(in srgb, var(--pc) 50%, transparent); } to { box-shadow: 0 0 0 3px var(--pc), 0 0 38px color-mix(in srgb, var(--pc) 85%, transparent); } }
.g-holdem .ph-seat.is-turn::before { content: ""; position: absolute; left: 50%; top: 50%; width: calc(var(--plate-w) * 1.9); height: calc(var(--plate-w) * 1.3); transform: translate(-50%, -50%);
  z-index: -1; pointer-events: none; background: radial-gradient(ellipse at center, rgba(247,221,143,.16), transparent 65%); animation: ph-breathe 1.6s ease-in-out infinite; }
@keyframes ph-breathe { 50% { opacity: .5; } }
/* anneau de parole autour de l'avatar */
.g-holdem .ph-ring { --ring-c: var(--gold-hi); position: absolute; inset: -7px; pointer-events: none; opacity: 0; transition: opacity .25s; }
.g-holdem .ph-ring.is-on { opacity: 1; }
.g-holdem .ph-ring svg { width: 100%; height: 100%; transform: rotate(-90deg); overflow: visible; }
.g-holdem .ph-ring-bg { fill: none; stroke: rgba(255,255,255,.1); stroke-width: 6; }
.g-holdem .ph-ring-fg { fill: none; stroke: var(--ring-c); stroke-width: 6.5; stroke-linecap: round; stroke-dasharray: 100 100; filter: drop-shadow(0 0 5px var(--ring-c)); transition: stroke .3s; }
.g-holdem .ph-ring.is-warn { --ring-c: var(--warn); }
.g-holdem .ph-ring.is-hot { --ring-c: var(--lose); animation: ph-hot .45s ease-in-out infinite alternate; }
@keyframes ph-hot { to { transform: scale(1.06); } }
.g-holdem .ph-ring-n { position: absolute; right: -9px; bottom: -6px; min-width: 22px; height: 22px; padding: 0 4px; border-radius: 11px; display: grid; place-items: center;
  font-size: 11.5px; background: #0a0d18; border: 1.5px solid var(--ring-c); color: var(--ring-c); box-shadow: 0 2px 8px rgba(0,0,0,.6); }
.g-holdem .ph-ring-n:empty { display: none; }
.g-holdem .ph-seat.is-mine .ph-ring { inset: -9px; }
/* bulle d'action : elle couvre le nom un instant */
.g-holdem .ph-bubble { position: absolute; left: calc(var(--av) - 6px); right: 8px; top: 50%; z-index: 4; transform: translateY(-50%) scale(.7); opacity: 0;
  padding: 5px 8px; border-radius: 99px; text-align: center; font-weight: 700; font-size: clamp(12px, .9vw, 15px); white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
  pointer-events: none; background: #1a2040; color: var(--text); border: 1px solid var(--line-strong); transition: opacity .2s, transform .25s cubic-bezier(.2,.9,.3,1.4); }
.g-holdem .ph-bubble.is-on { opacity: 1; transform: translateY(-50%) scale(1); }
.g-holdem .ph-bubble.is-fold { background: #2a2b33; color: #b9b6ad; }
.g-holdem .ph-bubble.is-check { background: #16305a; color: #cfe3ff; border-color: rgba(120,170,255,.5); }
.g-holdem .ph-bubble.is-call { background: linear-gradient(180deg, #3b3016, #231b0a); color: var(--gold-hi); border-color: rgba(247,221,143,.6); }
.g-holdem .ph-bubble.is-raise { background: linear-gradient(180deg, #16804f, #0b4f31); color: #eafff4; border-color: rgba(62,224,143,.7); }
.g-holdem .ph-bubble.is-allin { background: linear-gradient(180deg, #f7dd8f, #c9962f); color: #1a1204; border-color: #fff3c4; box-shadow: 0 0 20px rgba(247,221,143,.7); letter-spacing: .08em; }
/* tapis : onde de choc */
.g-holdem .ph-seat.is-shock::after { content: ""; position: absolute; left: 50%; top: 50%; width: 60px; height: 60px; margin: -30px 0 0 -30px; border-radius: 50%;
  border: 3px solid var(--gold-hi); pointer-events: none; animation: ph-shock 1.1s ease-out forwards; z-index: 0; }
@keyframes ph-shock { from { transform: scale(.5); opacity: 1; box-shadow: 0 0 30px var(--gold-hi); } to { transform: scale(6); opacity: 0; } }
.g-holdem .ph-seat.is-allin .ph-plate { border-color: var(--gold-hi); }
/* abattage */
.g-holdem .ph-rank { position: absolute; left: 50%; top: calc(100% + 6px); transform: translateX(-50%) scale(.8); opacity: 0; z-index: 5; white-space: nowrap;
  padding: 3px 10px; border-radius: 99px; font-weight: 700; font-size: clamp(11.5px, .85vw, 14px); color: var(--text); background: rgba(5,6,11,.85);
  border: 1px solid var(--line-strong); transition: opacity .3s, transform .3s cubic-bezier(.2,.9,.3,1.4); pointer-events: none; }
.g-holdem .ph-rank.is-on { opacity: 1; transform: translateX(-50%) scale(1); }
.g-holdem .ph-seat.is-top .ph-rank { top: calc(100% + var(--cw) * 1.28); }
.g-holdem .ph-seat.is-winner .ph-rank { color: #1a1204; background: linear-gradient(180deg, #f7dd8f, #c9962f); border-color: #fff3c4; box-shadow: 0 0 18px rgba(247,221,143,.7); }
.g-holdem .ph-seat.is-winner .ph-plate { box-shadow: 0 0 0 2px var(--win), 0 0 34px rgba(62,224,143,.7), 0 8px 20px rgba(0,0,0,.55); }
.g-holdem .ph-seat.is-winner::after { content: ""; position: absolute; left: 50%; top: 50%; width: calc(var(--plate-w) * 1.6); height: calc(var(--plate-w) * 1.6); margin: calc(var(--plate-w) * -.8) 0 0 calc(var(--plate-w) * -.8);
  border-radius: 50%; z-index: -1; pointer-events: none; opacity: .75;
  background: repeating-conic-gradient(from 0deg, rgba(247,221,143,.22) 0deg 7deg, transparent 7deg 20deg);
  -webkit-mask: radial-gradient(circle, #000 18%, transparent 68%); mask: radial-gradient(circle, #000 18%, transparent 68%); animation: ph-rays 7s linear infinite; }
@keyframes ph-rays { to { transform: rotate(360deg); } }
.g-holdem .ph-seat.is-loser .ph-cards { filter: brightness(.6) saturate(.7); }
.g-holdem .ph-room .pcard.is-best { transform: translateY(-7px); box-shadow: 0 0 0 2px var(--gold-hi), 0 0 22px rgba(247,221,143,.85), -2px 6px 12px rgba(0,0,0,.45); }
.g-holdem .ph-room .pcard.is-dim { filter: brightness(.42) saturate(.55); }
/* équité des mains à tapis */
.g-holdem .ph-eq { position: absolute; left: -16px; top: -24px; z-index: 6; padding: 2px 8px; border-radius: 99px; font-size: 13px; font-weight: 700;
  background: #0a0d18; border: 1px solid var(--line-strong); color: var(--text-dim); opacity: 0; transform: scale(.7); transition: opacity .3s, transform .3s; pointer-events: none; }
.g-holdem .ph-eq.is-on { opacity: 1; transform: none; }
.g-holdem .ph-eq.is-fav { color: #0a2a18; background: var(--win); border-color: #b9ffd9; box-shadow: 0 0 14px rgba(62,224,143,.6); }
/* place libre */
.g-holdem .ph-sit { display: flex; flex-direction: column; align-items: center; gap: 6px; }
.g-holdem .ph-sitbtn { display: flex; align-items: center; gap: 8px; padding: 8px 16px 8px 8px; border-radius: 99px; cursor: pointer; font-family: var(--font-ui);
  font-weight: 600; font-size: 13.5px; color: var(--gold-hi); background: rgba(5,6,11,.55); border: 1.5px dashed rgba(247,221,143,.55); transition: background .2s, transform .2s, border-color .2s; }
.g-holdem .ph-sitbtn:hover { background: rgba(31,191,117,.18); border-color: var(--green); transform: scale(1.04); }
.g-holdem .ph-sit-plus { width: 28px; height: 28px; border-radius: 50%; display: grid; place-items: center; font-size: 19px; line-height: 1; color: #06120c; background: var(--green); box-shadow: 0 0 14px rgba(31,191,117,.55); }
.g-holdem .ph-sitfree { padding: 6px 14px; border-radius: 99px; font-size: 11px; letter-spacing: .16em; text-transform: uppercase; color: rgba(247,221,143,.4); border: 1px dashed rgba(247,221,143,.2); }
.g-holdem .ph-botbtn { padding: 3px 10px; border-radius: 99px; cursor: pointer; font-size: 11.5px; font-family: var(--font-ui); color: var(--text-dim); background: rgba(5,6,11,.5); border: 1px solid var(--line); }
.g-holdem .ph-botbtn:hover { color: var(--text); border-color: var(--line-strong); }

/* ---------- mises, bouton, blindes ---------- */
.g-holdem .ph-bet { position: absolute; transform: translate(-50%, -50%) scale(.6); opacity: 0; display: flex; align-items: center; gap: 6px; z-index: 8; pointer-events: none;
  transition: left .75s cubic-bezier(.4,.1,.2,1), top .75s cubic-bezier(.4,.1,.2,1), opacity .2s, transform .25s cubic-bezier(.2,.9,.3,1.4); }
.g-holdem .ph-bet.is-on { opacity: 1; transform: translate(-50%, -50%) scale(1); }
.g-holdem .ph-betamt { padding: 2px 8px; border-radius: 99px; font-size: clamp(12px, .9vw, 15px); background: rgba(5,6,11,.72); border: 1px solid var(--line-strong); color: var(--text); }
.g-holdem .ph-dbtn { position: absolute; width: clamp(22px, 1.7vw, 30px); height: clamp(22px, 1.7vw, 30px); border-radius: 50%; display: grid; place-items: center; z-index: 9;
  font-weight: 800; font-size: clamp(11px, .85vw, 15px); color: #15161c; background: radial-gradient(circle at 35% 30%, #ffffff, #e5dcc4 70%, #b9ab86);
  border: 1px solid #fff; box-shadow: 0 3px 8px rgba(0,0,0,.55), inset 0 -2px 0 rgba(0,0,0,.15); transform: translate(-50%, -50%) scale(0);
  transition: left .6s cubic-bezier(.4,.1,.2,1), top .6s cubic-bezier(.4,.1,.2,1), transform .3s cubic-bezier(.2,.9,.3,1.4); pointer-events: none; }
.g-holdem .ph-dbtn.is-on { transform: translate(-50%, -50%) scale(1); }
.g-holdem .ph-betbl { display: none; padding: 1px 6px; border-radius: 99px; font-size: 9.5px; font-weight: 800; letter-spacing: .08em; color: #fff; box-shadow: 0 2px 6px rgba(0,0,0,.5); }
.g-holdem .ph-betbl.is-pb { display: inline-block; background: #2462c4; }
.g-holdem .ph-betbl.is-gb { display: inline-block; background: #c52f3b; }

/* ---------- effets : vols, ramassage, tension ---------- */
.g-holdem .ph-fx { position: absolute; inset: 0; pointer-events: none; z-index: 40; overflow: visible; }
.g-holdem .ph-flychip { position: absolute; --chip-size: 30px; z-index: 40; pointer-events: none; box-shadow: 0 6px 10px rgba(0,0,0,.4); }
.g-holdem .ph-room .pcard.ph-sweep { transition: transform .34s ease-in, opacity .34s ease-in; transform: translateY(-18px) scale(.55) rotate(12deg); opacity: 0; }
.g-holdem .ph-squeeze { animation: ph-squeeze .22s ease-in-out infinite alternate; z-index: 3; }
@keyframes ph-squeeze { from { transform: translateY(-8px) rotate(-2.5deg) scale(1.08); filter: drop-shadow(0 0 12px rgba(247,221,143,.85)); }
  to { transform: translateY(-12px) rotate(2.5deg) scale(1.11); filter: drop-shadow(0 0 20px rgba(247,221,143,.95)); } }
@keyframes ph-pop { from { transform: scale(.5); opacity: 0; } to { transform: none; opacity: 1; } }

/* ---------- bannières ---------- */
.g-holdem .ph-banner { position: absolute; left: 50%; top: 45%; transform: translate(-50%, -50%) scale(.6); z-index: 30; text-align: center; white-space: nowrap; pointer-events: none; opacity: 0; }
.g-holdem .ph-banner.is-top { top: 24%; }
.g-holdem .ph-banner::before { content: ""; position: absolute; inset: -18px -70px; z-index: -1; border-radius: 50%;
  background: radial-gradient(ellipse at center, rgba(5,6,11,.72), rgba(5,6,11,.4) 55%, transparent 72%); }
.g-holdem .ph-banner.is-on { animation: ph-banner 2.3s cubic-bezier(.2,.9,.3,1.1) forwards; }
.g-holdem .ph-banner.is-you.is-on { animation-duration: 1.5s; }
.g-holdem .ph-banner-t { font-family: var(--font-display); font-size: clamp(40px, 4.6vw, 80px); line-height: 1; letter-spacing: .06em;
  background: linear-gradient(180deg, #fff7d6, #f7dd8f 38%, #b8913b 62%, #fbe7a7); -webkit-background-clip: text; background-clip: text; color: transparent;
  filter: drop-shadow(0 4px 0 rgba(40,26,4,.9)) drop-shadow(0 0 26px rgba(247,221,143,.55)); }
.g-holdem .ph-banner.is-mine .ph-banner-t { background: linear-gradient(180deg, #e6fff2, #3ee08f 45%, #0f6a3f 70%, #9ff5c9); -webkit-background-clip: text; background-clip: text;
  filter: drop-shadow(0 4px 0 rgba(3,30,16,.9)) drop-shadow(0 0 26px rgba(62,224,143,.6)); }
.g-holdem .ph-banner-s { margin-top: 8px; font-size: clamp(15px, 1.3vw, 22px); font-weight: 700; color: var(--text); text-shadow: 0 2px 12px #000, 0 0 18px rgba(0,0,0,.9); }
@keyframes ph-banner { 0% { opacity: 0; transform: translate(-50%, -50%) scale(.45); } 13% { opacity: 1; transform: translate(-50%, -50%) scale(1.1); }
  22% { transform: translate(-50%, -50%) scale(1); } 80% { opacity: 1; transform: translate(-50%, -50%) scale(1); } 100% { opacity: 0; transform: translate(-50%, calc(-50% - 24px)) scale(.98); } }

/* ---------- barre du bas ---------- */
.g-holdem .ph-bar { flex: none; height: var(--bar-h); display: grid; grid-template-columns: minmax(230px, 280px) minmax(0, 1fr) minmax(230px, 340px); gap: 14px;
  padding: 8px 18px 9px; overflow: hidden; position: relative; z-index: 20;
  background: linear-gradient(180deg, rgba(14,18,36,.94), rgba(5,6,11,.98)); border-top: 1px solid var(--line-strong); box-shadow: 0 -12px 30px rgba(0,0,0,.45); }
.g-holdem .ph-bar::before { content: ""; position: absolute; left: 18%; right: 18%; top: -1px; height: 1px; background: linear-gradient(90deg, transparent, var(--gold-hi), transparent); }
.g-holdem .ph-me { display: flex; flex-direction: column; gap: 5px; min-width: 0; min-height: 0; justify-content: center; overflow: hidden; }
.g-holdem .ph-mystack { display: flex; align-items: baseline; justify-content: flex-end; gap: 8px; padding-right: 4px; font-size: 11px; letter-spacing: .14em; text-transform: uppercase; color: var(--text-dim); }
.g-holdem .ph-mystack b { font-size: 20px; letter-spacing: 0; color: var(--gold-hi); }
.g-holdem .ph-mebtns { display: flex; gap: 6px; flex-wrap: wrap; }
.g-holdem .ph-mebtns .btn.is-on { border-color: var(--warn); color: var(--warn); }
.g-holdem .ph-hint { font-size: 12px; color: var(--text-dim); }
.g-holdem .ph-mid { display: flex; flex-direction: column; justify-content: center; gap: 6px; min-width: 0; min-height: 0; }
.g-holdem .ph-midtop { display: flex; align-items: baseline; justify-content: center; gap: 14px; min-height: 22px; }
.g-holdem .ph-msg { font-size: clamp(13px, 1vw, 16px); font-weight: 600; color: var(--text); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.g-holdem .ph-help { font-size: clamp(12.5px, .95vw, 15px); color: var(--text-dim); white-space: nowrap; opacity: 0; transition: opacity .3s; }
.g-holdem .ph-help.is-on { opacity: 1; }
.g-holdem .ph-help b { color: var(--win); font-weight: 700; }
.g-holdem .ph-acts { display: flex; gap: 10px; justify-content: center; min-height: 42px; }
.g-holdem .ph-acts:empty { min-height: 0; }
.g-holdem .ph-act { min-width: clamp(130px, 11vw, 190px); height: 42px; font-size: clamp(14px, 1.05vw, 17px); font-weight: 700; display: inline-flex; align-items: center; justify-content: center; gap: 8px; }
.g-holdem .ph-act .kbd { font-size: 10.5px; padding: 1px 5px; border-radius: 4px; background: rgba(0,0,0,.28); color: inherit; border: 1px solid rgba(0,0,0,.25); opacity: .85; }
.g-holdem .ph-act.ph-fold { background: linear-gradient(180deg, rgba(90,20,28,.55), rgba(40,8,14,.8)); color: #ffd3d7; border: 1px solid rgba(255,90,103,.55); border-radius: var(--radius-sm); cursor: pointer; font-family: var(--font-ui); }
.g-holdem .ph-act.ph-fold:hover:not([disabled]) { background: linear-gradient(180deg, rgba(130,26,38,.7), rgba(60,10,18,.9)); }
.g-holdem .ph-act[data-act="raise"], .g-holdem .ph-act[data-act="allin"] { background: linear-gradient(180deg, #2fe08f, #139a5b 60%, #0c6b3e); color: #04170d; border-color: #9ff5c9; box-shadow: 0 0 18px rgba(31,191,117,.35); }
.g-holdem .ph-raise { display: flex; align-items: center; gap: 10px; justify-content: center; min-height: 0; }
.g-holdem .ph-raise:empty { display: none; }
.g-holdem .ph-presets { display: flex; gap: 4px; }
.g-holdem .ph-pre { padding: 3px 9px; border-radius: 99px; cursor: pointer; font-family: var(--font-ui); font-size: 12px; font-weight: 600; color: var(--text-dim);
  background: rgba(5,6,11,.6); border: 1px solid var(--line); transition: color .15s, border-color .15s, background .15s; }
.g-holdem .ph-pre:hover { color: var(--text); border-color: var(--line-strong); }
.g-holdem .ph-pre.is-on { color: #04170d; background: var(--green); border-color: #9ff5c9; }
.g-holdem .ph-range { -webkit-appearance: none; appearance: none; width: clamp(140px, 16vw, 300px); height: 6px; border-radius: 99px; outline: none; cursor: pointer;
  background: linear-gradient(90deg, var(--green) 0 var(--f, 0%), rgba(255,255,255,.12) var(--f, 0%) 100%); }
.g-holdem .ph-range::-webkit-slider-thumb { -webkit-appearance: none; width: 20px; height: 20px; border-radius: 50%; background: radial-gradient(circle at 35% 30%, #fff7d6, var(--gold) 60%, var(--gold-lo));
  border: 2px solid #0a0d18; box-shadow: 0 0 0 1px var(--gold-hi), 0 2px 8px rgba(0,0,0,.6); }
.g-holdem .ph-range::-moz-range-thumb { width: 18px; height: 18px; border-radius: 50%; background: var(--gold); border: 2px solid #0a0d18; }
.g-holdem .ph-amt { width: 92px; height: 28px; text-align: center; font-size: 15px; padding: 0 6px; }
.g-holdem .ph-side { display: flex; flex-direction: column; gap: 5px; min-width: 0; min-height: 0; justify-content: space-between; overflow: hidden; }
.g-holdem .ph-feed { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 1px; overflow: hidden; flex: 1; min-height: 0;
  -webkit-mask: linear-gradient(180deg, #000 60%, transparent); mask: linear-gradient(180deg, #000 60%, transparent); }
.g-holdem .ph-feed li { flex: none; font-size: 12px; line-height: 1.35; color: var(--text-dim); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.g-holdem .ph-feed li.is-new { color: var(--text); animation: ph-feedin .35s ease-out; }
.g-holdem .ph-feed li.is-win { color: var(--win); }
.g-holdem .ph-feed li.is-auto { color: var(--warn); }
.g-holdem .ph-feed li.is-hot { color: var(--gold-hi); }
@keyframes ph-feedin { from { opacity: 0; transform: translateY(6px); } }
.g-holdem .ph-siderow { display: flex; align-items: center; justify-content: space-between; gap: 6px; min-width: 0; }
.g-holdem .ph-siderow .ph-hostbtn { flex: none; }
.g-holdem .ph-rulespill { min-width: 0; overflow: hidden; text-overflow: ellipsis; font-size: 11.5px; color: var(--text-dim); padding: 3px 10px; border-radius: 99px; border: 1px solid var(--line); background: rgba(5,6,11,.5); white-space: nowrap; }

/* ---------- fenêtres (cave, recave, hôte) ---------- */
.ph-modal { display: flex; flex-direction: column; gap: 12px; min-width: 0; width: 100%; }
.ph-modal p { margin: 0; }
.ph-modal .ph-mrow { display: flex; align-items: baseline; justify-content: space-between; font-size: 13px; letter-spacing: .12em; text-transform: uppercase; color: var(--text-dim); }
.ph-modal .ph-mval { font-size: 30px; letter-spacing: 0; color: var(--gold-hi); white-space: nowrap; }
.ph-modal .ph-range { -webkit-appearance: none; appearance: none; width: 100%; height: 8px; border-radius: 99px; outline: none; cursor: pointer;
  background: linear-gradient(90deg, #1fbf75 0 var(--f, 0%), rgba(255,255,255,.12) var(--f, 0%) 100%); }
.ph-modal .ph-range::-webkit-slider-thumb { -webkit-appearance: none; width: 22px; height: 22px; border-radius: 50%; background: radial-gradient(circle at 35% 30%, #fff7d6, #deb85c 60%, #8c6a22); border: 2px solid #0a0d18; }
.ph-modal .ph-mquick { display: flex; gap: 6px; flex-wrap: wrap; }
.ph-modal .ph-mnote { font-size: 12px; }
.ph-hostp .ph-hp-row { display: flex; align-items: center; gap: 10px; }
.ph-hostp .ph-hp-l { min-width: 70px; font-family: var(--font-display); font-weight: 400; color: var(--gold); }
.ph-hostp .ph-hp-list { display: flex; flex-direction: column; gap: 6px; max-height: 300px; overflow: auto; }

/* ---------- hors ligne (file://) ---------- */
.g-holdem .ph-off { height: 100%; display: grid; place-items: center; padding: 24px; }
.g-holdem .ph-off-box { position: relative; max-width: 620px; text-align: center; padding: 150px 40px 34px; border-radius: 28px; border: 1px solid var(--line-strong);
  background: radial-gradient(ellipse 80% 70% at 50% 20%, rgba(23,133,97,.55), rgba(5,43,29,.85) 60%, rgba(5,6,11,.95)); box-shadow: var(--shadow-2), inset 0 0 0 6px rgba(0,0,0,.25), inset 0 0 0 7px rgba(222,184,92,.3); }
.g-holdem .ph-off-fan { position: absolute; left: 50%; top: 22px; width: 0; height: 120px; --card-w: 70px; }
.g-holdem .ph-off-card { position: absolute; left: -35px; top: 8px; transform-origin: 50% 140%; transform: rotate(calc(var(--k) * 11deg)) translateY(calc(var(--k) * var(--k) * 2px));
  animation: ph-fanin .9s cubic-bezier(.2,.9,.3,1.2) backwards; animation-delay: calc((var(--k) + 2) * 70ms); }
.g-holdem .ph-off-card .pcard { box-shadow: -3px 6px 14px rgba(0,0,0,.5); }
@keyframes ph-fanin { from { transform: rotate(0deg) translateY(30px); opacity: 0; } }
.g-holdem .ph-off-kicker { font-size: 11px; letter-spacing: .3em; text-transform: uppercase; color: var(--gold); }
.g-holdem .ph-off-title { margin: 6px 0 10px; font-family: var(--font-display); font-weight: 400; font-size: clamp(30px, 3.2vw, 46px); color: var(--gold-hi); text-shadow: 0 2px 18px rgba(222,184,92,.35); }
.g-holdem .ph-off-sub { margin: 0 0 8px; font-size: 15px; line-height: 1.5; color: var(--text); }
.g-holdem .ph-off-sub.muted { color: var(--text-dim); font-size: 13.5px; margin-bottom: 18px; }

/* ---------- animations réduites ---------- */
html.reduce-motion .g-holdem .ph-seat, html.reduce-motion .g-holdem .ph-bet, html.reduce-motion .g-holdem .ph-dbtn { transition: none; }
html.reduce-motion .g-holdem .ph-seat.is-winner::after, html.reduce-motion .g-holdem .ph-seat.is-turn::before { animation: none; }

/* ---------- grands écrans ---------- */
@media (min-height: 1000px) { .g-holdem { --bar-h: 142px; } .g-holdem .ph-act { height: 50px; } .g-holdem .ph-acts { min-height: 50px; } }
.g-holdem .ph-ring.is-bot .ph-ring-fg { stroke: rgba(247,221,143,.85); animation: ph-botring 1s ease-in-out infinite alternate; }
@keyframes ph-botring { from { opacity: .2; } to { opacity: .95; } }
.g-holdem .ph-off-box { max-width: 720px; }
.g-holdem .ph-seat.is-mucked .ph-cards { filter: brightness(.55) saturate(.6); }
/* ---------- écrans étroits (1024-1200 px) : la barre se resserre, rien ne se chevauche ---------- */
.g-holdem .ph-pre { white-space: nowrap; }
@media (max-width: 1200px) {
  .g-holdem .ph-bar { grid-template-columns: minmax(170px, 200px) minmax(0, 1fr) minmax(150px, 200px); gap: 10px; padding: 8px 10px 9px; }
  .g-holdem .ph-act { min-width: 104px; font-size: 13.5px; padding: 0 10px; gap: 6px; }
  .g-holdem .ph-acts { gap: 7px; }
  .g-holdem .ph-pre { padding: 3px 7px; font-size: 11px; }
  .g-holdem .ph-raise { gap: 6px; }
  .g-holdem .ph-range { width: 90px; }
  .g-holdem .ph-amt { width: 70px; font-size: 14px; }
  .g-holdem .ph-mebtns .btn { padding: 4px 8px; font-size: 11.5px; }
  .g-holdem .ph-feed li { font-size: 11px; }
  .g-holdem .ph-midtop { gap: 8px; }
}
/* « À toi ! » s'affiche entre le board et mes cartes : le board reste lisible au moment de décider */
.g-holdem .ph-banner.is-you { top: 62%; }
.g-holdem .ph-banner.is-you .ph-banner-t { font-size: clamp(34px, 3.4vw, 62px); }

/* =====================================================================================================================
   LE TOURNOI DU SOIR — salon des deux tables, affiche d'inscription (art déco, bordeaux et or), horloge des blindes,
   joueurs restants, élimination sous le projecteur, podium du vainqueur
   ===================================================================================================================== */
.g-holdem { --tn: #b3122e; --tn-hi: #ff6479; --tn-deep: #2a040c; --tn-ink: #14020a; }

/* ---------- le salon : choisir sa table ---------- */
.g-holdem .pt-lobby { position: absolute; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: clamp(18px, 3vh, 34px);
  padding: 24px clamp(16px, 4vw, 64px); overflow: auto;
  background:
    radial-gradient(ellipse 60% 55% at 26% 60%, rgba(23,133,97,.20), transparent 70%),
    radial-gradient(ellipse 60% 55% at 74% 60%, rgba(179,18,46,.24), transparent 70%),
    repeating-conic-gradient(from 0deg at 50% 120%, rgba(222,184,92,.035) 0deg 3deg, transparent 3deg 9deg), var(--bg-0); }
.g-holdem .pt-lobby-head { text-align: center; max-width: 760px; animation: pt-rise .7s cubic-bezier(.2,.8,.2,1) both; }
.g-holdem .pt-kicker { font: 600 12px/1.4 var(--font-ui); letter-spacing: .42em; text-transform: uppercase; color: var(--gold); }
.g-holdem .pt-lobby-title { margin: 6px 0 8px; font: 400 clamp(34px, 4.2vw, 64px)/1 var(--font-display); letter-spacing: .08em;
  background: linear-gradient(180deg, #fff6d6, var(--gold-hi) 40%, var(--gold) 70%, #8c6a22); -webkit-background-clip: text; background-clip: text; color: transparent; }
.g-holdem .pt-lobby-sub { margin: 0; color: var(--text-dim, #b9b3a6); font-size: 15px; }
.g-holdem .pt-doors { display: grid; grid-template-columns: repeat(2, minmax(0, 420px)); gap: clamp(16px, 2.4vw, 40px); width: 100%; justify-content: center; }
.g-holdem .pt-door { position: relative; display: flex; flex-direction: column; align-items: flex-start; gap: 8px; min-height: 300px; padding: 26px 26px 22px; text-align: left;
  border-radius: 22px; border: 1px solid rgba(222,184,92,.4); color: var(--text); cursor: pointer; overflow: hidden; font: inherit;
  box-shadow: 0 24px 60px rgba(0,0,0,.55), inset 0 0 0 1px rgba(255,236,170,.08); transition: transform .35s cubic-bezier(.2,.8,.2,1), box-shadow .35s, border-color .35s;
  animation: pt-rise .8s cubic-bezier(.2,.8,.2,1) both; }
.g-holdem .pt-door-cash { background: radial-gradient(ellipse 90% 70% at 50% 0%, rgba(255,250,220,.10), transparent 60%), radial-gradient(ellipse 120% 100% at 50% 30%, #16805d, #0b4f3a 55%, #042318); }
.g-holdem .pt-door-tn { animation-delay: .08s;
  background: radial-gradient(ellipse 90% 70% at 50% 0%, rgba(255,210,170,.14), transparent 60%),
    repeating-conic-gradient(from -90deg at 50% 0%, rgba(247,221,143,.07) 0deg 5deg, transparent 5deg 12deg),
    radial-gradient(ellipse 120% 100% at 50% 30%, #8e1430, #560a1d 55%, #1d0309); }
.g-holdem .pt-door:hover, .g-holdem .pt-door:focus-visible { transform: translateY(-6px) scale(1.012); border-color: var(--gold-hi); box-shadow: 0 34px 80px rgba(0,0,0,.6), 0 0 0 1px rgba(247,221,143,.5), 0 0 60px rgba(222,184,92,.18); }
.g-holdem .pt-door.is-live { border-color: var(--gold-hi); }
.g-holdem .pt-door.is-live::after { content: ""; position: absolute; inset: -1px; border-radius: inherit; pointer-events: none; box-shadow: 0 0 0 2px rgba(247,221,143,.55); animation: pt-halo 2.2s ease-in-out infinite; }
.g-holdem .pt-door-art { position: absolute; right: 18px; top: 16px; width: 96px; height: 96px; pointer-events: none; }
.g-holdem .pt-door-art i { position: absolute; width: 58px; height: 58px; border-radius: 50%; border: 5px dashed rgba(255,255,255,.85); box-shadow: 0 6px 16px rgba(0,0,0,.45); }
.g-holdem .pt-chip-a { right: 0; top: 4px; background: #d2323f; }
.g-holdem .pt-chip-b { right: 26px; top: 22px; background: #1d63c9; }
.g-holdem .pt-chip-c { right: 8px; top: 40px; background: #1a1a22; }
.g-holdem .pt-door-art .pt-trophy { border: 0; background: none; box-shadow: none; width: auto; height: auto; right: 6px; top: 0; font-size: 70px; font-style: normal; filter: drop-shadow(0 8px 18px rgba(0,0,0,.5)); }
.g-holdem .pt-door-kick { font: 600 11px/1.4 var(--font-ui); letter-spacing: .3em; text-transform: uppercase; color: var(--gold-hi); opacity: .9; }
.g-holdem .pt-door-name { font: 400 clamp(28px, 2.6vw, 40px)/1.05 var(--font-display); letter-spacing: .04em; color: #fff6dc; text-shadow: 0 3px 0 rgba(0,0,0,.35); max-width: 78%; }
.g-holdem .pt-door-facts { font-size: 13.5px; color: rgba(255,246,220,.82); }
.g-holdem .pt-door-avs { display: flex; gap: 6px; flex-wrap: wrap; min-height: 34px; margin-top: 4px; }
.g-holdem .pt-door-avs i { display: grid; place-items: center; width: 34px; height: 34px; border-radius: 50%; font-style: normal; font-size: 18px; background: rgba(0,0,0,.35); box-shadow: 0 0 0 2px var(--pc, #deb85c); }
.g-holdem .pt-door-avs i.is-out { filter: grayscale(1); opacity: .4; }
.g-holdem .pt-door-status { margin-top: auto; font-weight: 600; color: rgba(255,246,220,.75); }
.g-holdem .pt-door-status.is-hot { color: var(--gold-hi); }
.g-holdem .pt-door-go { align-self: flex-end; font: 600 13px/1 var(--font-ui); letter-spacing: .22em; text-transform: uppercase; color: var(--gold-hi); }
.g-holdem .pt-swap { white-space: nowrap; }

/* ---------- la table du tournoi : feutre bordeaux ---------- */
.g-holdem .ph-wrap.is-tn .ph-felt { border-color: var(--gold-hi);
  background:
    radial-gradient(ellipse 46% 40% at 50% 44%, rgba(255,230,220,.08), transparent 72%),
    repeating-radial-gradient(circle at 30% 20%, rgba(255,255,255,.017) 0 1px, transparent 1px 3px),
    radial-gradient(ellipse 82% 78% at 50% 42%, #9a1733, #5e0b20 55%, #22030b 100%); }
.g-holdem .ph-wrap.is-tn .ph-emb-s { color: rgba(247,221,143,.42); }
.g-holdem .ph-seat.is-busted .ph-pod { filter: grayscale(.95) brightness(.55); transition: filter .8s; }

/* ---------- horloge des blindes (coin haut gauche) ---------- */
.g-holdem .pt-clock { position: absolute; left: clamp(8px, 1.2vw, 20px); top: clamp(8px, 1.4vh, 16px); z-index: 20; width: clamp(158px, 12.5vw, 220px); padding: 10px 14px 11px;
  border-radius: 14px; color: #fff3cf; display: none;
  background: linear-gradient(180deg, rgba(42,4,12,.94), rgba(20,2,10,.94)); border: 1px solid rgba(247,221,143,.55);
  box-shadow: 0 14px 34px rgba(0,0,0,.55), inset 0 0 0 3px rgba(20,2,10,.9), inset 0 0 0 4px rgba(222,184,92,.35); }
.g-holdem .ph-room.is-tn-run .pt-clock { display: block; animation: pt-rise .6s cubic-bezier(.2,.8,.2,1) both; }
.g-holdem .pt-clk-head { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; }
.g-holdem .pt-clk-row { display: flex; flex-direction: column; align-items: flex-start; gap: 0; }
.g-holdem .pt-clk-k { font: 600 10px/1.3 var(--font-ui); letter-spacing: .16em; text-transform: uppercase; color: rgba(247,221,143,.72); white-space: nowrap; }
.g-holdem .pt-clk-lv { font-size: 22px; color: var(--gold-hi); }
.g-holdem .pt-clk-bl { margin: 2px 0 6px; font-size: clamp(22px, 1.9vw, 32px); font-weight: 700; letter-spacing: .02em; color: #fff; text-shadow: 0 0 18px rgba(255,100,121,.35); }
.g-holdem .pt-clk-t { font-size: clamp(20px, 1.7vw, 28px); line-height: 1.15; color: #fff; }
.g-holdem .pt-clk-track { height: 5px; margin: 7px 0 6px; border-radius: 5px; background: rgba(255,255,255,.1); overflow: hidden; }
.g-holdem .pt-clk-bar { display: block; height: 100%; transform-origin: 0 50%; background: linear-gradient(90deg, var(--gold), var(--gold-hi)); border-radius: inherit; }
.g-holdem .pt-clk-nx { font-size: 12px; color: rgba(255,243,207,.7); }
.g-holdem .pt-clock.is-soon .pt-clk-t { color: var(--tn-hi); animation: pt-blink 1s steps(2) infinite; }
.g-holdem .pt-clock.is-soon .pt-clk-bar { background: linear-gradient(90deg, var(--tn), var(--tn-hi)); }
.g-holdem .pt-clock.is-up { animation: pt-up 1.1s cubic-bezier(.2,.8,.2,1); }

/* ---------- joueurs restants, rangs, dotation (coin haut droit) ---------- */
.g-holdem .pt-left { position: absolute; right: clamp(8px, 1.2vw, 20px); top: clamp(8px, 1.4vh, 16px); z-index: 20; width: clamp(158px, 12.5vw, 220px); padding: 10px 14px 11px;
  border-radius: 14px; display: none; color: #fff3cf; text-align: right;
  background: linear-gradient(180deg, rgba(42,4,12,.9), rgba(20,2,10,.9)); border: 1px solid rgba(247,221,143,.35); box-shadow: 0 14px 34px rgba(0,0,0,.5); }
.g-holdem .ph-room.is-tn-run .pt-left { display: block; }
.g-holdem .pt-left-top, .g-holdem .pt-left-pool { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; }
.g-holdem .pt-left-k { font: 600 10px/1.3 var(--font-ui); letter-spacing: .22em; text-transform: uppercase; color: rgba(247,221,143,.72); }
.g-holdem .pt-left-n { font-size: 22px; color: #fff; }
.g-holdem .pt-left-pool b { font-size: 18px; color: var(--gold-hi); }
.g-holdem .pt-left-pay { margin-top: 3px; font-size: 11.5px; color: rgba(255,243,207,.7); }
.g-holdem .pt-left-avs { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 5px; margin: 7px 0 8px; }
.g-holdem .pt-av { position: relative; display: grid; place-items: center; width: 28px; height: 28px; border-radius: 50%; background: rgba(0,0,0,.35); box-shadow: 0 0 0 2px var(--pc, #deb85c); }
.g-holdem .pt-av i { font-style: normal; font-size: 15px; }
.g-holdem .pt-av.is-me { box-shadow: 0 0 0 2px var(--pc, #deb85c), 0 0 0 4px rgba(247,221,143,.6); }
.g-holdem .pt-av.is-out { box-shadow: 0 0 0 1px rgba(255,255,255,.2); }
.g-holdem .pt-av.is-out i { filter: grayscale(1); opacity: .35; }
.g-holdem .pt-av b { position: absolute; bottom: -6px; right: -7px; padding: 0 3px; border-radius: 6px; font-size: 9.5px; line-height: 14px; background: #1b0508; color: rgba(255,243,207,.8); border: 1px solid rgba(247,221,143,.35); }
.g-holdem .pt-left-final { margin-top: 7px; padding: 3px 8px; border-radius: 999px; text-align: center; font: 600 11px/1.5 var(--font-ui); letter-spacing: .18em; text-transform: uppercase;
  color: #ffe1e5; background: linear-gradient(90deg, var(--tn), #6d0a1e); animation: pt-halo 1.8s ease-in-out infinite; }

/* ---------- l'affiche (inscriptions, attente, podium) ---------- */
.g-holdem .pt-stage { position: absolute; inset: 0; z-index: 40; display: none; padding: 14px; overflow: auto; overscroll-behavior: contain;
  background: radial-gradient(ellipse 70% 70% at 50% 45%, rgba(42,4,12,.72), rgba(8,3,6,.94)); backdrop-filter: blur(3px); }
.g-holdem .pt-stage.is-on { display: flex; }
.g-holdem .pt-poster { position: relative; width: min(880px, 100%); margin: auto; padding: clamp(18px, 2.6vh, 30px) clamp(18px, 3vw, 44px) clamp(16px, 2.2vh, 26px); text-align: center; border-radius: 6px;
  background:
    repeating-conic-gradient(from -90deg at 50% -6%, rgba(247,221,143,.075) 0deg 4deg, transparent 4deg 10deg),
    radial-gradient(ellipse 80% 60% at 50% 0%, rgba(255,180,150,.14), transparent 70%),
    linear-gradient(180deg, #5a0a1c, #2a040c 60%, #170208);
  border: 2px solid var(--gold); box-shadow: 0 0 0 6px #170208, 0 0 0 7px rgba(222,184,92,.55), 0 40px 90px rgba(0,0,0,.7);
  animation: pt-rise .6s cubic-bezier(.2,.8,.2,1) both; }
.g-holdem .pt-poster::before, .g-holdem .pt-poster::after { content: "◆ ◆ ◆"; position: absolute; left: 50%; transform: translateX(-50%); font-size: 9px; letter-spacing: 1.2em; padding-left: 1.2em; color: var(--gold); opacity: .8; }
.g-holdem .pt-poster::before { top: 7px; }
.g-holdem .pt-poster::after { bottom: 6px; }
.g-holdem .pt-head { margin-bottom: clamp(8px, 1.6vh, 16px); }
.g-holdem .pt-title { margin: 6px 0 4px; display: flex; flex-direction: column; align-items: center; line-height: .95; font-family: var(--font-display); font-weight: 400; }
.g-holdem .pt-title-a { font-size: clamp(34px, 4.4vw, 66px); letter-spacing: .06em;
  background: linear-gradient(180deg, #fffbe8, var(--gold-hi) 38%, var(--gold) 64%, #9a7428); -webkit-background-clip: text; background-clip: text; color: transparent; filter: drop-shadow(0 3px 0 rgba(0,0,0,.35)); }
.g-holdem .pt-title-b { font-size: clamp(18px, 2vw, 30px); letter-spacing: .5em; padding-left: .5em; color: var(--tn-hi); text-transform: uppercase; margin-top: 6px; }
.g-holdem .pt-rule { display: inline-flex; align-items: center; gap: 12px; margin-top: 8px; font: 600 11.5px/1.4 var(--font-ui); letter-spacing: .3em; text-transform: uppercase; color: rgba(247,221,143,.85); }
.g-holdem .pt-rule::before, .g-holdem .pt-rule::after { content: ""; width: 44px; height: 1px; background: linear-gradient(90deg, transparent, var(--gold)); }
.g-holdem .pt-rule::after { transform: scaleX(-1); }
.g-holdem .pt-facts { display: flex; flex-wrap: wrap; justify-content: center; gap: 8px; margin: 4px 0 12px; }
.g-holdem .pt-fact { display: flex; flex-direction: column; min-width: 92px; padding: 6px 12px; border-radius: 10px; background: rgba(0,0,0,.28); border: 1px solid rgba(222,184,92,.3); }
.g-holdem .pt-fact small { font: 600 9.5px/1.3 var(--font-ui); letter-spacing: .24em; text-transform: uppercase; color: rgba(247,221,143,.7); }
.g-holdem .pt-fact b { font-size: 17px; color: #fff; }
.g-holdem .pt-pool { display: flex; flex-direction: column; align-items: center; margin: 2px 0 12px; }
.g-holdem .pt-pool-k { font: 600 11px/1.3 var(--font-ui); letter-spacing: .5em; padding-left: .5em; text-transform: uppercase; color: var(--gold); }
.g-holdem .pt-pool-v { font-size: clamp(40px, 5vw, 72px); line-height: 1.05; color: #fff; text-shadow: 0 0 30px rgba(247,221,143,.45), 0 4px 0 rgba(0,0,0,.4); }
.g-holdem .pt-pool-v.is-bump { animation: pt-pop .9s cubic-bezier(.2,.8,.2,1); }
.g-holdem .pt-pool-split { font-size: 13px; color: rgba(255,243,207,.78); letter-spacing: .04em; }
.g-holdem .pt-entrants { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 8px; margin: 0 auto 14px; max-width: 760px; }
.g-holdem .pt-ent { display: flex; flex-direction: column; align-items: center; gap: 2px; padding: 9px 6px 8px; border-radius: 12px; min-width: 0;
  background: rgba(0,0,0,.3); border: 1px solid rgba(222,184,92,.22); animation: pt-rise .5s cubic-bezier(.2,.8,.2,1) both; animation-delay: calc(var(--k, 0) * 40ms); }
.g-holdem .pt-ent-av { display: grid; place-items: center; width: 42px; height: 42px; border-radius: 50%; font-size: 23px; background: rgba(0,0,0,.35); box-shadow: 0 0 0 2px var(--pc, #deb85c), 0 6px 14px rgba(0,0,0,.4); }
.g-holdem .pt-ent-n { max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 14px; color: #fff; }
.g-holdem .pt-ent small { font-size: 10.5px; color: rgba(255,243,207,.6); }
.g-holdem .pt-ent.is-me { border-color: var(--gold-hi); box-shadow: 0 0 0 1px var(--gold-hi), 0 0 22px rgba(247,221,143,.2); }
.g-holdem .pt-ent.is-off .pt-ent-av { opacity: .5; }
.g-holdem .pt-ent.is-free { border-style: dashed; background: transparent; opacity: .55; }
.g-holdem .pt-ent.is-free .pt-ent-av { box-shadow: 0 0 0 1px rgba(222,184,92,.4); color: var(--gold); font-size: 20px; background: transparent; }
.g-holdem .pt-ent.is-free .pt-ent-n { color: rgba(255,243,207,.55); font-weight: 500; }
.g-holdem .pt-acts { display: flex; flex-wrap: wrap; justify-content: center; gap: 10px; }
.g-holdem .pt-acts .btn-gold { min-width: 200px; }
.g-holdem .pt-note { margin: 12px auto 0; max-width: 620px; font-size: 12.5px; }
.g-holdem .pt-wait { max-width: 560px; margin: 8px auto 4px; }
.g-holdem .pt-wait p { margin: 6px 0; }
.g-holdem .pt-form { display: grid; gap: 10px; max-width: 620px; margin: 4px auto 0; text-align: left; }
.g-holdem .pt-field { display: grid; grid-template-columns: 150px 1fr; align-items: center; gap: 12px; }
.g-holdem .pt-field-k { font: 600 11px/1.3 var(--font-ui); letter-spacing: .2em; text-transform: uppercase; color: rgba(247,221,143,.8); }
.g-holdem .pt-seg { flex-wrap: wrap; }
.g-holdem .pt-form-go { display: flex; flex-direction: column; align-items: center; gap: 8px; margin-top: 6px; text-align: center; }

/* ---------- le podium ---------- */
.g-holdem .pt-title-win .pt-title-a { font-size: clamp(30px, 3.8vw, 58px); max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.g-holdem .pt-podium { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); align-items: end; gap: 10px; max-width: 640px; margin: 6px auto 12px; }
.g-holdem .pt-step { display: flex; flex-direction: column; align-items: center; min-width: 0; }
.g-holdem .pt-step-who { display: flex; flex-direction: column; align-items: center; gap: 2px; margin-bottom: 8px; min-width: 0; max-width: 100%; }
.g-holdem .pt-step-av { display: grid; place-items: center; width: 58px; height: 58px; border-radius: 50%; font-size: 32px; background: rgba(0,0,0,.35); box-shadow: 0 0 0 3px var(--pc, #deb85c), 0 10px 24px rgba(0,0,0,.5); }
.g-holdem .pt-step.is-p1 .pt-step-av { width: 76px; height: 76px; font-size: 42px; box-shadow: 0 0 0 3px var(--gold-hi), 0 0 0 7px rgba(247,221,143,.25), 0 0 44px rgba(247,221,143,.5); }
.g-holdem .pt-step-n { max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 15px; color: #fff; }
.g-holdem .pt-step-g { font-size: 17px; font-weight: 700; color: var(--gold-hi); }
.g-holdem .pt-step-block { width: 100%; display: grid; place-items: center; border-radius: 8px 8px 2px 2px; color: #241904; font-family: var(--font-display); font-size: 30px;
  border: 1px solid rgba(255,255,255,.4); box-shadow: inset 0 2px 0 rgba(255,255,255,.5), 0 18px 30px rgba(0,0,0,.45); transform-origin: 50% 100%; animation: pt-grow .9s cubic-bezier(.2,.8,.2,1) both; }
.g-holdem .pt-step-block sup { font-size: .45em; }
.g-holdem .pt-step.is-p1 .pt-step-block { height: 118px; background: linear-gradient(180deg, #fff0bd, var(--gold-hi) 30%, var(--gold) 70%, #a17a2c); animation-delay: .5s; }
.g-holdem .pt-step.is-p2 .pt-step-block { height: 84px; background: linear-gradient(180deg, #ffffff, #d9dde6 40%, #9aa1b0); animation-delay: .25s; }
.g-holdem .pt-step.is-p3 .pt-step-block { height: 62px; background: linear-gradient(180deg, #ffd6b0, #d08a52 45%, #8e5329); }
.g-holdem .pt-step.is-empty { visibility: hidden; }
.g-holdem .pt-step.is-me .pt-step-n { color: var(--gold-hi); }
.g-holdem .pt-rest { margin: 0 0 12px; font-size: 13px; color: rgba(255,243,207,.7); }
.g-holdem .pt-poster.is-celebrate { animation: pt-rise .6s cubic-bezier(.2,.8,.2,1) both, pt-glow 2.4s ease-in-out .6s 3; }
.g-holdem .pt-poster.is-celebrate .pt-step.is-p1 .pt-step-av { animation: pt-crown 1.2s cubic-bezier(.2,.8,.2,1) .9s both; }

/* ---------- élimination : la salle s'éteint, un projecteur, un rang ---------- */
.g-holdem .pt-elim { position: absolute; inset: 0; z-index: 45; display: grid; place-items: center; pointer-events: none; opacity: 0; transition: opacity .35s;
  background: radial-gradient(ellipse 34% 42% at 50% 46%, rgba(26,8,12,.86), rgba(4,1,3,.93) 72%); }
.g-holdem .pt-elim.is-on { opacity: 1; }
.g-holdem .pt-elim-card { position: relative; display: flex; flex-direction: column; align-items: center; text-align: center; padding: 10px 30px; }
.g-holdem .pt-elim-beam { position: absolute; left: 50%; top: -60vh; width: 300px; height: calc(60vh + 170px); transform: translateX(-50%); pointer-events: none;
  background: linear-gradient(180deg, rgba(255,246,214,0), rgba(255,246,214,.16) 70%, rgba(255,246,214,.28)); clip-path: polygon(44% 0, 56% 0, 100% 100%, 0 100%); filter: blur(2px); }
.g-holdem .pt-elim-av { display: grid; place-items: center; width: 96px; height: 96px; border-radius: 50%; font-size: 54px; background: rgba(0,0,0,.45); box-shadow: 0 0 0 3px var(--pc, #deb85c), 0 0 60px rgba(255,246,214,.25); }
.g-holdem .pt-elim.is-on .pt-elim-av { animation: pt-fall 2.1s cubic-bezier(.3,.7,.2,1) both; }
.g-holdem .pt-elim-name { margin-top: 12px; font: 400 clamp(30px, 3.4vw, 54px)/1 var(--font-display); letter-spacing: .05em; color: #fff6dc; text-shadow: 0 4px 0 rgba(0,0,0,.5); }
.g-holdem .pt-elim-rank { margin-top: 4px; font: 400 clamp(38px, 4.8vw, 76px)/1 var(--font-display); letter-spacing: .06em;
  background: linear-gradient(180deg, #fffbe8, var(--gold-hi) 40%, var(--gold) 70%, #8c6a22); -webkit-background-clip: text; background-clip: text; color: transparent; }
.g-holdem .pt-elim-rank sup { font-size: .45em; }
.g-holdem .pt-elim.is-on .pt-elim-rank { animation: pt-stamp .7s cubic-bezier(.2,.9,.3,1.3) .35s both; }
.g-holdem .pt-elim-sub { margin-top: 10px; font-size: 15px; letter-spacing: .06em; color: rgba(255,243,207,.82); }
.g-holdem .pt-elim-card.is-me .pt-elim-name { color: var(--tn-hi); }
.g-holdem .ph-room.is-elim .ph-rail { filter: brightness(.55) saturate(.7); transition: filter .4s; }
.g-holdem .ph-banner.is-level .ph-banner-t, .g-holdem .ph-banner.is-final .ph-banner-t { font-family: var(--font-display); letter-spacing: .08em; }
/* le niveau s'annonce au début de la main où ses blindes s'appliquent, sur le tableau encore vide : il apparaît sans jaillir */
.g-holdem .ph-banner.is-level.is-on { animation: ph-niveau 1.9s cubic-bezier(.23,1,.32,1) forwards; }
@keyframes ph-niveau { 0% { opacity: 0; transform: translate(-50%, -50%) scale(.96); } 14% { opacity: 1; transform: translate(-50%, -50%) scale(1); }
  84% { opacity: 1; transform: translate(-50%, -50%) scale(1); } 100% { opacity: 0; transform: translate(-50%, calc(-50% - 8px)) scale(1); } }
html.reduce-motion .g-holdem .ph-banner.is-level.is-on { animation: none; transition: none; opacity: 1; transform: translate(-50%, -50%); }

@keyframes pt-rise { from { opacity: 0; transform: translateY(16px); } to { opacity: 1; transform: none; } }
@keyframes pt-halo { 0%, 100% { opacity: .35; } 50% { opacity: 1; } }
@keyframes pt-blink { 50% { opacity: .35; } }
@keyframes pt-up { 0% { transform: scale(1); } 30% { transform: scale(1.08); box-shadow: 0 0 0 2px var(--gold-hi), 0 0 50px rgba(247,221,143,.55); } 100% { transform: scale(1); } }
@keyframes pt-pop { 0% { transform: scale(1); } 35% { transform: scale(1.14); color: var(--gold-hi); } 100% { transform: scale(1); } }
@keyframes pt-grow { from { transform: scaleY(0); } to { transform: scaleY(1); } }
@keyframes pt-glow { 0%, 100% { box-shadow: 0 0 0 6px #170208, 0 0 0 7px rgba(222,184,92,.55), 0 40px 90px rgba(0,0,0,.7); } 50% { box-shadow: 0 0 0 6px #170208, 0 0 0 7px var(--gold-hi), 0 0 90px rgba(247,221,143,.45); } }
@keyframes pt-crown { 0% { transform: scale(.4) rotate(-20deg); } 60% { transform: scale(1.18) rotate(6deg); } 100% { transform: none; } }
@keyframes pt-fall { 0% { transform: translateY(-30px) scale(1.1); } 55% { transform: none; filter: none; } 100% { transform: translateY(6px); filter: grayscale(.9) brightness(.7); } }
@keyframes pt-stamp { from { opacity: 0; transform: scale(2.2); } to { opacity: 1; transform: none; } }
html.reduce-motion .g-holdem .pt-door, html.reduce-motion .g-holdem .pt-poster, html.reduce-motion .g-holdem .pt-ent, html.reduce-motion .g-holdem .pt-step-block,
html.reduce-motion .g-holdem .pt-elim-av, html.reduce-motion .g-holdem .pt-elim-rank, html.reduce-motion .g-holdem .pt-door.is-live::after { animation: none !important; }

@media (max-width: 900px) {
  .g-holdem .pt-doors { grid-template-columns: minmax(0, 1fr); }
  .g-holdem .pt-door { min-height: 220px; }
  .g-holdem .pt-entrants { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .g-holdem .pt-field { grid-template-columns: 1fr; gap: 4px; }
  .g-holdem .pt-clock, .g-holdem .pt-left { width: 138px; padding: 7px 9px; }
  .g-holdem .pt-left-avs { display: none; }
}
@media (max-height: 800px) {
  .g-holdem .pt-stage { padding: 8px 14px; }
  .g-holdem .pt-poster { padding-top: 14px; padding-bottom: 12px; }
  .g-holdem .pt-head { margin-bottom: 6px; }
  .g-holdem .pt-title { margin: 2px 0 0; }
  .g-holdem .pt-title-a { font-size: clamp(28px, 3.2vw, 44px); }
  .g-holdem .pt-title-b { font-size: 15px; margin-top: 3px; }
  .g-holdem .pt-rule { margin-top: 4px; }
  .g-holdem .pt-facts { margin: 2px 0 6px; }
  .g-holdem .pt-fact { padding: 3px 10px; min-width: 80px; }
  .g-holdem .pt-fact b { font-size: 15px; }
  .g-holdem .pt-pool { margin: 0 0 6px; }
  .g-holdem .pt-pool-v { font-size: clamp(32px, 3.6vw, 46px); }
  .g-holdem .pt-entrants { gap: 6px; margin-bottom: 8px; }
  .g-holdem .pt-ent { flex-direction: row; justify-content: flex-start; gap: 8px; padding: 5px 8px; text-align: left; }
  .g-holdem .pt-ent small { display: none; }
  .g-holdem .pt-ent-av { width: 30px; height: 30px; font-size: 17px; flex: none; }
  .g-holdem .pt-note { display: none; }
  .g-holdem .pt-form { gap: 6px; }
  .g-holdem .pt-step.is-p1 .pt-step-block { height: 96px; }
  .g-holdem .pt-step.is-p2 .pt-step-block { height: 70px; }
  .g-holdem .pt-step.is-p3 .pt-step-block { height: 50px; }
}

/* hall : la pile de jetons de l'illustration passait sous le badge « multi » (translucide) ; badge opaque et au-dessus */
.gcard[data-game="holdem"] .gcard-multi { position: relative; z-index: 1; background: #1c0f26; }

/* ---------- TÉLÉPHONE EN PORTRAIT (N1b, 13/10 ; revue au téléphone, défaut n° 27) ----------
   Les places des bords de l'ovale (8,6 % et 91,4 % de la salle) portaient « + S'asseoir ici » sur 134 px : à 360 et 390 px, ce bouton
   débordait de l'écran d'un quart, à gauche comme à droite. Au téléphone en portrait, une place libre est un « + » rond de 44 px,
   centré sur la place ; son nom, « S'asseoir ici », reste lu par les lecteurs d'écran. Règle bornée au téléphone (portrait ≤ 480 px
   de large) : le PC ne change pas (s5-tel-jeux.mjs, D) ; couché, les places tenaient déjà. */
@media (orientation: portrait) and (max-width: 480px) {
  .g-holdem .ph-sitbtn { position: relative; justify-content: center; gap: 0; width: 44px; height: 44px; padding: 0; border-radius: 50%; }
  .g-holdem .ph-sit-t { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
}
/* COUCHÉ (844 × 390), réglette dans la barre du haut : la place du haut de l'ovale (8,5 % de la salle) portait son « S'asseoir ici »
   à 7 px au-dessus de la salle, rogné par le bord du jeu ; la salle laisse 12 px en haut (la réglette flottante, elle, en réserve 58,
   règle plus haut). Règle bornée au téléphone (paysage ≤ 560 px de haut). */
@media (orientation: landscape) and (max-height: 560px) {
  .g-holdem .ph-room { margin-top: 12px; }
}
/* TÉLÉPHONE — N1c (revue au téléphone du 13/10, n° 22) : au SALON du poker, les portes empilées dépassent l'écran ; centré, le salon
   rognait son haut (« Poker Club · MINUIT », « Choisis ta table » sous la barre) et la réglette flottante couvrait le reste du titre.
   Le salon commence en haut quand il déborde (safe center) et sous la voie de la réglette. Règle à part (la salle de N1b n'est pas
   touchée), bornée au téléphone : le PC ne change pas. */
@media (orientation: portrait) and (max-width: 480px), (orientation: landscape) and (max-height: 560px) {
  .g-holdem .pt-lobby { justify-content: safe center; }
  body:has(.so-dock.is-float) .g-holdem .pt-lobby { padding-top: calc(var(--so-float-h, 58px) + 2px); }
}
/* TÉLÉPHONE — N5 (annexe B remesurée sur d1cc705) : dans la cave, le curseur du montant (une piste de 8 px, le pion de 22 px : 22 px de
   zone) : 32 px de boîte par deux bords transparents de 12 px ; la piste peinte (le fond s'arrête au bord intérieur) et le pion ne
   changent pas. Bornée au téléphone. */
@media (orientation: portrait) and (max-width: 480px), (orientation: landscape) and (max-height: 560px) {
  .ph-modal .ph-range { box-sizing: content-box; height: 8px; border-top: 12px solid transparent; border-bottom: 12px solid transparent; background-clip: padding-box; }
}
/* TÉLÉPHONE — N11 (annexe A de la revue au téléphone, REMESURÉE sur 1bedc6a) : le kicker des portes (11 px), « En attente de joueurs » (11 px), « Blindes 5 / 10 » et « 🤖 bot » (11,5 px) : 12 px. Mêmes polices, même interlettrage,
   même couleur ; on agrandit le texte, on ne redessine pas. Bornée au téléphone : le PC ne change pas (dev/tests-client/s5-tel-textes.mjs, D et D2). */
@media (orientation: portrait) and (max-width: 480px), (orientation: landscape) and (max-height: 560px) {
  .g-holdem .pt-door-kick, .g-holdem .ph-status, .g-holdem .ph-rulespill, .g-holdem .ph-botbtn { font-size: 12px; }
  /* l'interlettrage baisse d'autant que le corps monte : la ligne garde sa longueur (« EN ATTENTE DE JOUEURS · IL FAUT ÊTRE DEUX » dépassait l'écran
     à 360 px ; le kicker de la porte passait sous les jetons du dessin) */
  .g-holdem .ph-status { letter-spacing: .12em; }
  .g-holdem .pt-door-kick { letter-spacing: .2em; }
}
/* TÉLÉPHONE — N17 (revue finale R2 du 17/10, défauts n° 1 et n° 2 ; dev/tests-client/s5-tel-holdem.mjs) : la barre du bas pendant ma
   parole. En portrait, la grille à trois colonnes des écrans étroits (:313) gardait 170 + 150 px aux côtés : à 360 et 390 px, la colonne
   des actions faisait 0 px ; « Relancer » passait sous « ⇄ Tournoi » (le toucher ouvrait le salon), les préréglages, la réglette et le
   montant sous le fil, « Se lever » sous un préréglage, « Recaver », « Pause » et le tapis étaient rognés. En portrait, la barre passe en
   six rangées de hauteur fixe (rien ne bouge quand la parole arrive) : le message ; les préréglages et le montant ; la réglette sur toute
   la largeur ; les actions (sans leur touche du clavier) ; « Recaver », « Pause », « Se lever » et le tapis ; « Blindes » et
   « ⇄ Tournoi », le coin bas-gauche laissé au micro du croupier (js/voix.js). Le fil se retire (les bulles des places disent chaque
   action), ma pastille aussi (mon solde est dans la barre du haut, mon tapis sur ma plaque et dans la barre). Couché, la barre tenait :
   seules ses cibles grandissent. Les cibles : 32 px au moins, 44 px pour les actions (règle du téléphone de N5) ; les textes touchés ici
   à 12 px au moins (N11). On réarrange, on ne redessine pas : mêmes polices, or, pastilles. Bornée au téléphone : le PC ne change pas
   (s5-tel-holdem.mjs, D et D2). */
@media (orientation: portrait) and (max-width: 480px) {
  .g-holdem { --bar-h: 236px; }
  .g-holdem .ph-bar { grid-template-columns: minmax(0, 1fr) auto; grid-template-rows: 20px 32px 32px 44px 32px 32px; gap: 6px 8px; padding: 6px 8px 8px; }
  .g-holdem .ph-me, .g-holdem .ph-mid, .g-holdem .ph-raise, .g-holdem .ph-side { display: contents; }
  /* 1 : le message et « Tu as : … » */
  .g-holdem .ph-midtop { grid-area: 1 / 1 / 2 / 3; min-width: 0; min-height: 0; gap: 8px; }
  .g-holdem .ph-msg { min-width: 0; }
  .g-holdem .ph-help { min-width: 0; overflow: hidden; text-overflow: ellipsis; }
  /* 2 : les cinq préréglages, le champ du montant à droite ; 3 : la réglette sur toute la largeur (32 px de zone par deux bords
     transparents : la piste peinte et le pion ne changent pas, comme la réglette de la cave, N5) */
  .g-holdem .ph-presets { grid-area: 2 / 1 / 3 / 2; min-width: 0; }
  .g-holdem .ph-pre { flex: 1 1 auto; min-height: 32px; padding: 0 6px; font-size: 12px; }
  .g-holdem .ph-amt { grid-area: 2 / 2 / 3 / 3; width: 66px; height: 32px; }
  .g-holdem .ph-range { grid-area: 3 / 1 / 4 / 3; width: 100%; box-sizing: content-box; height: 6px; border-top: 13px solid transparent; border-bottom: 13px solid transparent; background-clip: padding-box; }
  /* 4 : les actions, côte à côte sur toute la largeur ; un long montant passe à la ligne dans son bouton */
  .g-holdem .ph-acts { grid-area: 4 / 1 / 5 / 3; min-height: 0; gap: 6px; }
  .g-holdem .ph-act { flex: 1 1 auto; min-width: 0; height: 44px; padding: 0 8px; font-size: 13px; line-height: 1.15; white-space: normal; text-align: center; }
  .g-holdem .ph-act.btn-gold { letter-spacing: .05em; }
  .g-holdem .ph-act .kbd { display: none; }
  /* 5 : « Recaver », « Pause », « Se lever », et le tapis à droite */
  .g-holdem .ph-mebtns { grid-area: 5 / 1 / 6 / 2; flex-wrap: nowrap; align-items: center; min-width: 0; }
  .g-holdem .ph-mebtns .btn { font-size: 12px; }
  .g-holdem .ph-me > .ph-hint { grid-area: 5 / 1 / 6 / 3; align-self: center; }
  .g-holdem .ph-mystack { grid-area: 5 / 2 / 6 / 3; align-self: center; gap: 6px; padding-right: 2px; }
  .g-holdem .ph-mystack b { font-size: 18px; }
  .g-holdem .ph-me > .ptag, .g-holdem .ph-feed { display: none; }
  /* 6 : « Blindes », l'hôte, « ⇄ Tournoi », à droite ; le coin bas-gauche au micro */
  .g-holdem .ph-siderow { grid-area: 6 / 1 / 7 / 3; justify-content: flex-end; padding-left: 40px; }
}
@media (orientation: landscape) and (max-height: 560px) {
  .g-holdem .ph-pre { min-width: 32px; min-height: 32px; }
  .g-holdem .ph-range { box-sizing: content-box; height: 6px; border-top: 13px solid transparent; border-bottom: 13px solid transparent; background-clip: padding-box; }
  .g-holdem .ph-amt { height: 32px; }
  .g-holdem .ph-acts { min-height: 44px; }
  .g-holdem .ph-act { height: 44px; }
}
/* … portrait COURT (moins de 700 px de haut : 375 × 667, 360 × 640) : avec la barre de six rangées, la table n'avait plus que 280 à
   310 px et mes cartes passaient sur le bas du tableau (13 px à 375 × 667, 22 px à 360 × 640, mesuré le 18/10). La réglette se retire
   (le montant se choisit aux préréglages et au champ) et les rangées se resserrent : 184 px. */
@media (orientation: portrait) and (max-width: 480px) and (max-height: 700px) {
  .g-holdem { --bar-h: 184px; }
  .g-holdem .ph-bar { grid-template-rows: 18px 32px 44px 32px 32px; row-gap: 4px; padding: 4px 8px 6px; }
  .g-holdem .ph-range { display: none; }
  .g-holdem .ph-acts { grid-area: 3 / 1 / 4 / 3; }
  .g-holdem .ph-mebtns { grid-area: 4 / 1 / 5 / 2; }
  .g-holdem .ph-me > .ph-hint { grid-area: 4 / 1 / 5 / 3; }
  .g-holdem .ph-mystack { grid-area: 4 / 2 / 5 / 3; }
  .g-holdem .ph-siderow { grid-area: 5 / 1 / 6 / 3; }
}
/* TÉLÉPHONE EN PORTRAIT — N22 (revue finale R2, défaut n° 11 ; dev/tests-client/s5-tel-holdem-salle.mjs) : « Place libre » (une place
   vide, quand je suis assise) faisait 110 px de large sur une ligne espacée : aux places des bords (8,6 % et 91,4 % de la salle) il sortait
   de l'écran (x − 24 à 360 px). Deux lignes serrées à 12 px (la règle des textes du téléphone, N11), dans la même pastille pointillée :
   environ 50 px, entier dans l'écran. « Blindes 5 / 10 » (même défaut n° 11) : entier depuis la barre de N17, rien à faire. */
@media (orientation: portrait) and (max-width: 480px) {
  .g-holdem .ph-sitfree { width: min-content; padding: 4px 6px; border-radius: 12px; font-size: 12px; letter-spacing: .04em; line-height: 1.15; text-align: center; }
}
/* TÉLÉPHONE COUCHÉ — N22 (laissé n° 2 de N17 ; dev/tests-client/s5-tel-holdem-salle.mjs) : sous la barre de N17, la salle n'a que 150 à
   180 px de haut (844 × 390 : 182 px) ; mes cartes (56 px, au-dessus de ma plaque) passaient sur les cases du tableau, l'état de la main
   (« Avant le flop · en jeu 15 ») sous ma plaque, et à 740 × 360 ma plaque sous la barre. Couché :
   - le tableau monte en haut de la salle, sous le pot (réservé : rien ne saute quand il paraît), en cartes de 40 px au moins (au lieu de 56) ;
   - la place du bas, au centre (la mienne quand je suis assise), remonte de 10 px et ses cartes passent à droite de sa plaque (36 px au
     moins) : elles ne montent plus dans le tableau ; les cartes des autres places à 34 px au moins (au lieu de 38) ;
   - l'état de la main se retire pendant la main (le pot, les mises devant chacun et le tableau le disent, la barre dit à qui de parler ;
     il reste pour l'attente d'un joueur) ; « Place libre » aussi (rien à y toucher, et sa place, en haut, est celle du pot).
   Bornée au téléphone couché : le PC ne change pas (épreuve, section D ; s5-tel-holdem.mjs, D et D2). */
@media (orientation: landscape) and (max-height: 560px) {
  .g-holdem { --bw: clamp(40px, min(4.8vw, 11vh), 128px); --hw: clamp(36px, min(4.7vw, 10.8vh), 124px); --cw: clamp(34px, min(3.1vw, 7.2vh), 84px); }
  .g-holdem .ph-room:not(.is-wait) .ph-status, .g-holdem .ph-sitfree { display: none; }
  .g-holdem .ph-room:not(.is-wait) .ph-center { top: 0; transform: translateX(-50%); gap: 4px; }
  .g-holdem .ph-pots { min-height: 34px; }
  .g-holdem .ph-pot .ph-stackc { width: 26px; height: 26px; }
  .g-holdem .ph-pot .ph-stackc .chip { --chip-size: 26px; }
  .g-holdem .ph-seat.is-hero { translate: 0 -10px; }
  .g-holdem .ph-seat.is-hero .ph-cards { left: calc(100% + 4px); bottom: auto; top: 50%; transform: translateY(-50%); }
}
/* TÉLÉPHONE COUCHÉ — N24 (dev/tests-client/s5-tel-holdem-couche.mjs ; vu par N22 sur ses captures) : sous 844 px de large, la barre gardait
   la grille des écrans étroits (:313) et ses côtés de 200 px : la colonne du milieu ne faisait plus que 300 px à 740, 227 à 667, 200 à
   640 ; les actions et la rangée de la relance en débordaient, sous le fil et « Blindes » (le toucher sur « Relancer » tombait sur
   « Blindes » à 640 px, la touche « R » couvrait « Blindes » à 667) ; le champ « Montant » n'avait plus que 14 px. Dans la salle, ma mise et
   mon bouton tombaient sur le bas du tableau et sur mon étiquette, la mise et le bouton de la place du bas sur ses cartes, mon compte à
   rebours sous la barre.
   - LA BARRE : trois lignes indépendantes (une boîte souple à retour à la ligne ; les deux sauts sont les pseudo-éléments de .ph-mid,
     des boîtes de la barre puisque .ph-mid n'en a pas) : 1 le message et « Tu as : … » (sur deux lignes s'ils ne tiennent pas sur une),
     « Blindes », l'hôte, « ⇄ Tournoi » ; 2 les préréglages, la réglette et le montant, « Recaver », « Pause », « Se lever » à droite ;
     3 les actions (sans leur touche du clavier), la place du micro du croupier laissée à gauche (js/voix.js), le tapis à droite. Hauteurs
     fixes (une rangée de la relance vide garde sa place) : rien ne bouge quand la parole arrive ; 124 px en tout (la salle y gagne 8 px).
     Le fil et ma pastille se retirent, comme debout (N17 : les bulles des places disent chaque action, mon solde est en haut).
   - LA SALLE : le tableau monte au haut du feutre et le pot passe à sa gauche, à sa hauteur ; les mises n'affichent que leur montant (et
     la blinde) ; mon compte à rebours se range au bas de mon avatar, côté gauche ; les cartes des places du bas à gauche (1) et à droite (7)
     passent au-dessus du côté extérieur de leur plaque. Les places, les mises et les boutons sont posés par le jeu (games/holdem.js,
     COUCHE, d'après --ph-couche ci-dessous).
   On réarrange, on ne redessine pas. Bornée au téléphone couché : le PC ne change pas (épreuve, D et D2). */
@media (orientation: landscape) and (max-height: 560px) {
  .g-holdem { --bar-h: 124px; --ph-couche: 1; }
  .g-holdem .ph-bar { display: flex; flex-wrap: wrap; align-content: center; column-gap: 8px; row-gap: 1.5px; padding: 5px 8px; }
  .g-holdem .ph-me, .g-holdem .ph-mid, .g-holdem .ph-side { display: contents; }
  .g-holdem .ph-mid::before, .g-holdem .ph-mid::after { content: ""; flex: 0 0 100%; height: 0; }
  .g-holdem .ph-mid::before { order: 3; }
  .g-holdem .ph-mid::after { order: 6; }
  .g-holdem .ph-me > .ptag, .g-holdem .ph-feed { display: none; }
  /* 1 */
  .g-holdem .ph-midtop { order: 1; flex: 1 1 0; min-width: 0; height: 32px; flex-wrap: wrap; align-content: center; justify-content: center; column-gap: 8px; row-gap: 0; }
  .g-holdem .ph-msg, .g-holdem .ph-help { line-height: 15px; }
  .g-holdem .ph-msg { min-width: 0; }
  .g-holdem .ph-siderow { order: 2; flex: none; height: 32px; }
  /* 2 */
  .g-holdem .ph-raise, .g-holdem .ph-raise:empty { order: 4; display: flex; flex: 1 1 0; min-width: 0; height: 32px; gap: 6px; justify-content: flex-start; }
  .g-holdem .ph-presets { flex: none; }
  .g-holdem .ph-pre { padding: 0 7px; font-size: 12px; }
  .g-holdem .ph-range { flex: 1 1 auto; width: auto; min-width: 0; }
  .g-holdem .ph-amt { flex: none; width: 66px; }
  .g-holdem .ph-mebtns { order: 5; flex: none; flex-wrap: nowrap; align-items: center; height: 32px; margin-left: auto; }
  .g-holdem .ph-me > .ph-hint { order: 5; align-self: center; margin-left: auto; }
  /* 3 */
  .g-holdem .ph-acts { order: 7; flex: 1 1 0; min-width: 0; height: 44px; margin-left: 36px; gap: 6px; }
  .g-holdem .ph-act { flex: 1 1 0; min-width: 0; height: 44px; padding: 0 8px; font-size: 13px; line-height: 1.15; white-space: normal; text-align: center; }
  .g-holdem .ph-act .kbd { display: none; }
  .g-holdem .ph-mystack { order: 8; flex: none; align-self: center; gap: 6px; padding-right: 2px; }
  .g-holdem .ph-mystack b { font-size: 18px; }
  /* la salle */
  .g-holdem .ph-room:not(.is-wait) .ph-center { top: calc(5.5% + 15px); }
  .g-holdem .ph-room:not(.is-wait) .ph-pots { position: absolute; right: calc(100% + 10px); top: 0; min-height: 0; }
  .g-holdem .ph-betchips { display: none; }
  .g-holdem .ph-seat.is-hero .ph-ring-n { right: auto; left: -9px; bottom: 3px; }
  .g-holdem .ph-seat[data-place="1"] .ph-cards { left: 0; transform: none; }
  .g-holdem .ph-seat[data-place="7"] .ph-cards { left: auto; right: 0; transform: none; }
  /* la fenêtre de la cave (et de la recave) : 368 px de haut pour 318 de vue à 360 px de haut, « S'asseoir » aux trois quarts hors de
     l'écran ; serrée, elle tient entière : la réglette et les montants rapides sur une ligne, le montant à 22 px, 6 px entre les lignes */
  .ph-modal { flex-direction: row; flex-wrap: wrap; align-items: center; gap: 6px 8px; }
  .ph-modal > p, .ph-modal .ph-mrow { flex: 0 0 100%; }
  .ph-modal .ph-mval { font-size: 22px; }
  .ph-modal .ph-range { flex: 1 1 90px; width: auto; min-width: 0; }
  .ph-modal .ph-mquick { flex: none; flex-wrap: nowrap; }
}
/* TÉLÉPHONE COUCHÉ À PLUS DE DEUX — N26 (dev/tests-client/s5-tel-holdem-joueurs.mjs ; N24, écart n° 1) : à trois joueurs assis ou plus, à
   deux joueurs qui ne sont pas voisins, et pour un spectateur (les « + » des places libres), les places 2 à 6 gardaient la géométrie du PC :
   la place du haut sur le tableau, ses voisines l'une sur l'autre, celles des côtés hors de l'écran (la salle n'a que 640 × 160 px au plus
   petit). Dans la salle « serrée » (.is-serree, posée par games/holdem.js dans ces cas, sous cette borne seulement ; les positions sont
   dans COUCHE_SERREE) :
   - les autres places sont compactes : plaque de 112 × 34 px, avatar de 30 px, mêmes polices (le nom et le tapis gardent 12,5 et 13 px) ;
     leurs cartes (22 px, elles ne dépassent ni en haut ni en bas de la plaque) à cheval sur son bout, le texte s'arrête avant elles ; leurs
     étiquettes à gauche, serrées (interlettrage réduit, 82 px au plus) ; leur compte à rebours posé sur l'avatar (il ne déborde plus) ;
   - le tableau en cartes de 31 px, à 55 px du haut de la salle, sous la rangée du haut et les mises de ses places ; le pot à sa gauche, sur
     deux lignes (« Pot », le montant) et sans sa pile de jetons (comme les mises chez N24) : il tient entre la place 2 et le tableau ;
   - les mises sur une ligne de 18 px, le bouton du donneur de 20 px ;
   - le « + » d'une place libre (ce que voit un spectateur) rond, de 34 px, comme debout (N1b) ; son nom reste lu par les lecteurs d'écran.
   Ma place garde sa taille (mes cartes à droite, N22 ; mon compte à rebours à gauche, N24) ; ses cartes restent à 36 px (à 844 × 390, elles
   passaient à 40 et sortaient sous la barre). On réarrange, on ne redessine pas. Bornée au téléphone couché : le PC ne change pas (épreuve,
   D et D2). */
@media (orientation: landscape) and (max-height: 560px) {
  .g-holdem .ph-room.is-serree { --bw: 31px; }
  .g-holdem .ph-room.is-serree .ph-seat.is-hero { --hw: 36px; }
  .g-holdem .ph-room.is-serree .ph-seat:not(.is-hero) { --plate-w: 112px; --plate-h: 34px; --av: 30px; --cw: 22px; }
  .g-holdem .ph-room.is-serree .ph-seat:not(.is-hero) .ph-plate { padding: 0 26px 0 calc(var(--av) - 2px); }
  .g-holdem .ph-room.is-serree .ph-seat:not(.is-hero) .ph-av { left: -8px; }
  .g-holdem .ph-room.is-serree .ph-seat:not(.is-hero) .ph-ring-n { right: auto; left: 7px; bottom: 7px; }
  .g-holdem .ph-room.is-serree .ph-seat:not(.is-hero) .ph-cards { left: auto; right: -16px; bottom: auto; top: 50%; transform: translateY(-50%); z-index: 3; }
  .g-holdem .ph-room.is-serree .ph-seat:not(.is-hero) .ph-tag { right: auto; left: calc(var(--av) - 8px); max-width: 82px; overflow: hidden; }
  .g-holdem .ph-room.is-serree .ph-seat:not(.is-hero) .ph-t { flex: none; padding: 2px 5px; letter-spacing: .05em; }
  .g-holdem .ph-room.is-serree:not(.is-wait) .ph-center { top: 55px; }
  .g-holdem .ph-room.is-serree .ph-pot { flex-direction: column; gap: 0; padding: 2px 10px; }
  .g-holdem .ph-room.is-serree .ph-pot .ph-stackc { display: none; }
  .g-holdem .ph-room.is-serree .ph-pot-l, .g-holdem .ph-room.is-serree .ph-pot-v { line-height: 1.15; }
  .g-holdem .ph-room.is-serree .ph-betamt { padding: 1px 7px; line-height: 14px; }
  .g-holdem .ph-room.is-serree .ph-dbtn { width: 20px; height: 20px; }
  .g-holdem .ph-room.is-serree .ph-sitbtn { position: relative; justify-content: center; gap: 0; width: 34px; height: 34px; padding: 0; border-radius: 50%; }
  .g-holdem .ph-room.is-serree .ph-sit-plus { width: 26px; height: 26px; }
  .g-holdem .ph-room.is-serree .ph-sit-t { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
}
/* TÉLÉPHONE COUCHÉ, L'HÔTE — N28 (dev/tests-client/s5-tel-holdem-hote.mjs ; N26, question n° 2) :
   - chez l'hôte, chaque place vide portait son « 🤖 bot » (58 × 25 px) sous le « + » : dans la salle serrée, une place vide passait de 34 à
     65 px de haut et sortait de la salle (au-dessus pour les places du haut, sous la barre pour celles du bas) ; dans la disposition de N24
     (deux joueurs voisins), le « 🤖 bot » de la place du haut tombait sur le tableau. Couché, il se retire : le panneau de l'hôte
     (« ⚙ Table (hôte) », dans la barre du bas) assoit et retire un bot place par place (« Asseoir un bot », « Retirer ») ;
   - le compte à rebours des places du bas à gauche (1) et à droite (7) de la disposition de N24 gardait sa place du PC, sous l'anneau : dans
     une salle de 160 px, il passait sous la barre (1 px à 740 × 360, chez Momo quand Lea parle) ; il remonte de 9 px, sur le bas de l'avatar,
     comme le mien (N24). Dans la salle serrée, les places compactes gardent le leur (N26).
   - L'ATTENTE avant une main (.is-wait ; N26, limite n° 6) : l'état de la table (« En attente de joueurs · il faut être deux », « La main
     commence… ») reprenait sa place du PC, à 62 % de la salle, sous le tableau (invisible) et le pot (vide) : chez un spectateur, sur le
     « + » de la place du bas. Couché, pendant l'attente, le pot et le tableau ne prennent plus de place, l'emblème du club (décor) se
     retire, et l'état se pose dans la bande libre : à 45 % de la salle dans la disposition de N24, à 89 px du haut dans la salle serrée
     (sous les places des côtés, au-dessus de mon étiquette « toi » et du « + » du bas).
   La voie de la réglette flottante (:14) ne prend plus rien à l'hôte : sa réglette tient dans la barre du haut (css/base.css et
   css/social.css, N28). Bornée au téléphone couché : le PC ne change pas (épreuve, D et D2). */
@media (orientation: landscape) and (max-height: 560px) {
  .g-holdem .ph-botbtn { display: none; }
  .g-holdem .ph-seat:is([data-place="1"], [data-place="7"]) .ph-ring-n { bottom: 3px; }
  .g-holdem .ph-room.is-wait .ph-emblem, .g-holdem .ph-room.is-wait .ph-pots, .g-holdem .ph-room.is-wait .ph-boardrow { display: none; }
  .g-holdem .ph-room.is-wait .ph-center { top: 45%; }
  .g-holdem .ph-room.is-serree.is-wait .ph-center { top: 89px; }
}
/* TÉLÉPHONE COUCHÉ, LE TOURNOI — N28 (dev/tests-client/s5-tel-holdem-tournoi.mjs ; N26, question n° 4) : l'horloge des blindes (coin haut
   gauche) et les joueurs restants (coin haut droit), 138 × 140 à 160 px chacun, couvraient six places sur huit de la salle serrée (11 à 28
   chevauchements selon la taille). Couché, pendant le tournoi :
   - les deux panneaux quittent la salle ; le temps du niveau passe dans la pastille « Niv. » de la barre (« Niv. 1 · 10 / 20 · 04:32 »,
     en rouge les 30 dernières secondes, comme l'horloge : games/holdem.js, tickClock) ;
   - la pastille devient un bouton (32 px de haut, son liseré d'or plus vif) : un toucher ouvre la FICHE du tournoi, les deux panneaux côte
     à côte en haut de la salle (l'horloge sur quatre lignes : le niveau et ses blindes, « niveau suivant dans » et le temps, la jauge, les
     blindes suivantes ; les joueurs restants avec le classement, la rangée des avatars qui se retirait sous 900 px), leurs libellés à 12 px
     (la règle des textes du téléphone, N11) ; un second toucher, ou un toucher sur un panneau, la referme. Le classement final reste sur
     l'affiche (le podium).
   Les règles du tournoi ne changent pas. Bornée au téléphone couché : le PC ne change pas (épreuve, D et D2). */
@media (orientation: landscape) and (max-height: 560px) {
  .g-holdem .ph-room.is-tn-run:not(.is-tn-fiche) :is(.pt-clock, .pt-left) { display: none; }
  .g-holdem .ph-rulespill[role="button"] { cursor: pointer; line-height: 24px; color: var(--text); border-color: rgba(247,221,143,.55); }
  .g-holdem .ph-rulespill.is-soon { color: var(--tn-hi); }
  .g-holdem .ph-room.is-tn-fiche .pt-clock { display: grid; grid-template-columns: minmax(0, 1fr) auto; column-gap: 10px; align-items: baseline;
    left: calc(50% - 289px); top: 6px; width: 280px; padding: 7px 12px 8px; cursor: pointer; }
  .g-holdem .ph-room.is-tn-fiche .pt-clk-head { grid-area: 1 / 1 / 2 / 2; justify-content: flex-start; }
  .g-holdem .ph-room.is-tn-fiche .pt-clk-bl { grid-area: 1 / 2 / 2 / 3; margin: 0; white-space: nowrap; }
  .g-holdem .ph-room.is-tn-fiche .pt-clk-row { grid-area: 2 / 1 / 3 / 3; flex-direction: row; align-items: baseline; justify-content: space-between; gap: 8px; }
  .g-holdem .ph-room.is-tn-fiche .pt-clk-track { grid-area: 3 / 1 / 4 / 3; margin: 6px 0 4px; }
  .g-holdem .ph-room.is-tn-fiche .pt-clk-nx { grid-area: 4 / 1 / 5 / 3; }
  .g-holdem .ph-room.is-tn-fiche .pt-left { left: calc(50% - 1px); right: auto; top: 6px; width: 290px; padding: 7px 12px 8px; cursor: pointer; }
  .g-holdem .ph-room.is-tn-fiche .pt-left-avs { display: flex; justify-content: flex-start; }
  .g-holdem .ph-room.is-tn-fiche :is(.pt-clk-k, .pt-left-k, .pt-left-pay, .pt-left-final, .pt-av b) { font-size: 12px; letter-spacing: .06em; }
}
/* TÉLÉPHONE COUCHÉ, LES LIMITES DE LA SALLE SERRÉE — N28 (dev/tests-client/s5-tel-holdem-limites.mjs ; N26, limite n° 6), éprouvées en
   vraies mains (blindes 500 / 1 000, caves différentes, tapis au flop, abattage) :
   - les ÉTIQUETTES (« Couché », « Tapis », « attend la GB », « s’en va »…) couvraient le haut du nom des places compactes, et deux étiquettes
     ensemble étaient rognées (« s’en va » de 30 px) : elles font 15 px de haut au lieu de 18 ; dans une place compacte qui en porte, le
     nom et le tapis descendent sous elles ; elles partent du bord de la plaque (au-dessus de l'avatar) et deux tiennent (132 px) ;
   - les GROSSES MISES (« PB 1 000 », « GB 1 000 » : 84 px) touchaient l'avatar de leur place ou un bouton du donneur : la blinde et le montant
     se serrent (72 px, la marge de la salle serrée de N26) ;
   - l'ÉQUITÉ d'une course à tapis, au-dessus à gauche de la plaque, passait sous la barre du haut (places du haut), hors de l'écran (place
     2) ou sur le tableau (ma place) : elle se pose sur l'avatar (le compte à rebours, qui y est aussi, ne vient jamais en même temps) ;
   - le RANG des mains à l'abattage tombait sur les places voisines (places du haut) ou sous la barre : il se pose sur la ligne du tapis de
     sa place (le nom reste lisible ; le tapis revient à la main suivante ; les étiquettes s'effacent le temps du rang), vers l'intérieur
     de la table pour les places des côtés ; dans une place compacte, la catégorie de la main seulement (« Full », « Double paire »… :
     games/holdem.js, rangVu ; les cartes montrées en disent le détail, le nom entier reste en infobulle) ;
   - les POTS ANNEXES : à deux pots ou plus, le résumé « n pots » et leur total à la place du pot (games/holdem.js, potsResume), un toucher
     ouvre le détail (chaque pot, son montant, les avatars de qui peut le gagner) en haut de la salle, un second le referme.
   On serre, on ne redessine pas. Bornée au téléphone couché : le PC ne change pas. */
@media (orientation: landscape) and (max-height: 560px) {
  .g-holdem .ph-t, .g-holdem .ph-room.is-serree .ph-seat:not(.is-hero) .ph-t { padding: 1px 5px; line-height: 11px; }
  .g-holdem .ph-room.is-serree .ph-seat:not(.is-hero) .ph-tag { left: -6px; max-width: 132px; }
  .g-holdem .ph-room.is-serree .ph-seat:not(.is-hero):has(.ph-tag .ph-t):not(:has(.ph-rank.is-on)) .ph-plate { align-items: flex-start; padding-top: 8.5px; }
  .g-holdem .ph-room.is-serree .ph-seat:not(.is-hero):has(.ph-tag .ph-t):not(:has(.ph-rank.is-on)) :is(.ph-name, .ph-stack) { line-height: 1; }
  .g-holdem .ph-room.is-serree .ph-seat:has(.ph-rank.is-on) .ph-tag { visibility: hidden; }
  .g-holdem .ph-room.is-serree .ph-bet { gap: 2px; }
  .g-holdem .ph-room.is-serree .ph-betbl { padding: 1px 4px; letter-spacing: .04em; }
  .g-holdem .ph-room.is-serree .ph-betamt { padding: 1px 5px; }
  .g-holdem .ph-room.is-serree .ph-eq { left: -6px; top: 50%; translate: 0 -50%; padding: 1px 4px; font-size: 12px; }
  .g-holdem .ph-room.is-serree .ph-rank { top: auto; bottom: 0; padding: 0 8px; font-size: 12px; line-height: 13px; }
  .g-holdem .ph-room.is-serree .ph-seat.is-hero .ph-rank { bottom: 7px; }
  .g-holdem .ph-room.is-serree .ph-seat:is([data-place="1"], [data-place="2"]) .ph-rank { left: 22px; transform: none; }
  .g-holdem .ph-room.is-serree .ph-seat:is([data-place="6"], [data-place="7"]) .ph-rank { left: auto; right: 0; transform: none; }
  .g-holdem .ph-room.is-serree.has-pots-resume .ph-pots .ph-pot:not(.ph-pot-resume) { display: none; }
  .g-holdem .ph-room.is-serree .ph-pot-resume { pointer-events: auto; cursor: pointer; min-height: 34px; justify-content: center; }
  .g-holdem .ph-pots-detail:not([hidden]) { position: absolute; left: 50%; top: 6px; z-index: 21; transform: translateX(-50%); display: flex; flex-direction: column; align-items: stretch;
    gap: 4px; padding: 6px 8px; border-radius: 14px; background: rgba(5,6,11,.94); border: 1px solid var(--line-strong); box-shadow: 0 10px 26px rgba(0,0,0,.6); cursor: pointer; }
  .g-holdem .ph-room.is-serree .ph-pots-detail .ph-pot { flex-direction: row; justify-content: space-between; gap: 8px; padding: 2px 10px; animation: none; }
  .g-holdem .ph-room.is-serree .ph-pots-detail .ph-pot-l { font-size: 12px; letter-spacing: .06em; }
}
