/* MINUIT — Blackjack */
.g-blackjack { position: relative; overflow: hidden; color: var(--text); font-family: var(--font-ui);
  background: radial-gradient(ellipse 80% 60% at 50% -10%, var(--bg-3), transparent 70%), var(--bg-0); }
/* ---- Réglages ---- */
.g-blackjack .bj-setup { height: 100%; overflow: auto; padding: 18px 4% 24px; display: grid; grid-template-columns: 1.25fr 1fr; gap: 18px; align-content: start;
  background: repeating-conic-gradient(from 0deg at 50% -20%, rgba(222,184,92,.05) 0deg 4deg, transparent 4deg 12deg); }
.g-blackjack .bj-setup-head { grid-column: 1 / -1; text-align: center; }
.g-blackjack .bj-kicker { font-size: 11px; letter-spacing: .3em; text-transform: uppercase; color: var(--gold); }
.g-blackjack .bj-title { margin: 2px 0; font-family: var(--font-display); font-weight: 400; font-size: 42px; color: var(--gold-hi); text-shadow: 0 2px 18px rgba(222,184,92,.35); }
.g-blackjack .bj-setup-head p { margin: 0; }
.g-blackjack .bj-col { display: flex; flex-direction: column; gap: 12px; }
.g-blackjack .bj-presets { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; }
.g-blackjack .bj-preset { text-align: left; padding: 8px 10px; border-radius: var(--radius-sm); border: 1px solid var(--line); background: rgba(10,13,24,.6);
  color: var(--text); cursor: pointer; display: flex; flex-direction: column; gap: 2px; font-family: var(--font-ui); transition: border-color .15s, background .15s; }
.g-blackjack .bj-preset b { font-family: var(--font-display); font-weight: 400; font-size: 15px; color: var(--gold-hi); }
.g-blackjack .bj-preset small { font-size: 11px; color: var(--text-dim); line-height: 1.25; }
.g-blackjack .bj-preset:hover { border-color: var(--line-strong); }
.g-blackjack .bj-preset.is-on { border-color: var(--gold); background: linear-gradient(160deg, rgba(222,184,92,.18), rgba(15,90,68,.35)); box-shadow: inset 0 0 0 1px var(--gold-lo); }
.g-blackjack .bj-rules { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px 14px; }
.g-blackjack .bj-rule { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.g-blackjack .bj-rule-l { font-size: 10.5px; letter-spacing: .12em; text-transform: uppercase; color: var(--text-dim); }
.g-blackjack .bj-rule .seg { flex-wrap: wrap; }
.g-blackjack .bj-num { width: 110px; }
.g-blackjack .bj-seatcfg { display: flex; flex-direction: column; gap: 8px; }
.g-blackjack .bj-seatrow { display: grid; grid-template-columns: 64px auto minmax(0, 1fr); align-items: center; gap: 10px; padding: 6px 8px; border-radius: var(--radius-sm);
  border: 1px solid var(--line); background: rgba(15,90,68,.18); }
.g-blackjack .bj-seatrow.is-empty { background: transparent; opacity: .8; }
.g-blackjack .bj-seatno { font-family: var(--font-display); color: var(--gold); font-size: 14px; }
.g-blackjack .bj-seatrow .select, .g-blackjack .bj-seatrow .input { min-width: 0; width: 100%; }
.g-blackjack .bj-botcfg { display: grid; grid-template-columns: minmax(0, 1.4fr) minmax(0, 1fr); gap: 6px; }
.g-blackjack .bj-sumrules { font-size: 12px; text-align: center; }
.g-blackjack .bj-sit { align-self: center; min-width: 240px; font-family: var(--font-display); font-size: 20px; letter-spacing: .06em; }
/* ---- Table ---- */
.g-blackjack .bj-wrap { display: flex; flex-direction: column; height: 100%; }
.g-blackjack .bj-room { flex: 1; position: relative; min-height: 0; }
.g-blackjack .bj-felt { position: absolute; inset: 6px 2% 4px; border-radius: 26px 26px 50% 50% / 26px 26px 58% 58%;
  border: 3px solid var(--gold);
  box-shadow: inset 0 0 0 6px rgba(0,0,0,.28), inset 0 0 0 8px var(--gold-lo), inset 0 40px 140px rgba(0,0,0,.5), var(--shadow-2);
  background:
    repeating-radial-gradient(circle at 30% 20%, rgba(255,255,255,.018) 0 1px, transparent 1px 3px),
    radial-gradient(ellipse 70% 60% at 50% 35%, var(--felt-hi), var(--felt) 55%, var(--felt-lo) 100%);
  overflow: hidden; }
.g-blackjack .bj-arc { position: absolute; left: 50%; top: 21%; width: min(64%, 900px); transform: translateX(-50%); pointer-events: none; }
.g-blackjack .bj-arc svg { width: 100%; height: auto; display: block; overflow: visible; }
.g-blackjack .bj-arc1 { font-family: var(--font-display); font-size: 38px; letter-spacing: 6px; fill: rgba(247,221,143,.78); }
.g-blackjack .bj-arc2 { font-family: var(--font-ui); font-size: 19px; letter-spacing: 5px; fill: rgba(244,236,216,.55); }
.g-blackjack .bj-arcline { fill: none; stroke: rgba(222,184,92,.5); stroke-width: 1.5; stroke-dasharray: 2 7; }
.g-blackjack .bj-dealer { position: absolute; top: 2.5%; left: 50%; transform: translateX(-50%); display: flex; flex-direction: column; align-items: center; gap: 4px; --card-w: 64px; z-index: 2; }
.g-blackjack .bj-dlabel { font-family: var(--font-display); font-size: 13px; letter-spacing: .3em; text-transform: uppercase; color: rgba(247,221,143,.7); }
.g-blackjack .bj-cards { display: flex; justify-content: center; min-height: calc(var(--card-w) * 1.4); }
.g-blackjack .bj-cards > .pcard { box-shadow: 0 1px 2px rgba(0,0,0,.45), -2px 3px 7px rgba(0,0,0,.3); flex: none; }
.g-blackjack .bj-cards > .pcard + .pcard { margin-left: calc(var(--card-w) * -0.58); }
.g-blackjack .bj-total { min-width: 36px; padding: 1px 9px; border-radius: 99px; text-align: center; font-size: 13px; font-family: var(--font-num);
  background: rgba(5,6,11,.62); border: 1px solid var(--line-strong); color: var(--gold-hi); }
.g-blackjack .bj-total:empty { visibility: hidden; }
.g-blackjack .bj-total.is-bust { color: var(--lose); border-color: var(--lose); }
.g-blackjack .bj-total.is-bj { color: var(--bg-0); background: var(--gold); }
/* sabot + défausse */
.g-blackjack .bj-shoe { position: absolute; top: 5%; right: 7%; display: flex; flex-direction: column; align-items: center; gap: 5px; z-index: 2; }
.g-blackjack .bj-shoe-box { width: 76px; height: 50px; border-radius: 6px 6px 10px 22px; background: linear-gradient(160deg, #2a2f4a, #0a0d18); border: 1px solid var(--line-strong);
  box-shadow: var(--shadow-1); position: relative; overflow: hidden; transform: perspective(200px) rotateX(18deg); }
/* la première carte du sabot : le dos du jeu, couché (une vraie carte, plus des hachures) */
.g-blackjack .bj-shoe-card { position: absolute; left: 50%; top: 50%; --card-w: 34px; width: 34px; height: 47.6px; transform: translate(-50%, -50%) rotate(90deg);
  border-radius: 5.4% / 3.857%; box-shadow: 0 1px 3px rgba(0,0,0,.55); }
.g-blackjack .bj-shoe-card > .pcard { box-shadow: none; }
.g-blackjack .bj-gauge { position: relative; width: 92px; height: 6px; border-radius: 3px; background: rgba(0,0,0,.45); overflow: visible; }
.g-blackjack .bj-gauge-fill { position: absolute; left: 0; top: 0; bottom: 0; border-radius: 3px; background: linear-gradient(90deg, var(--gold-lo), var(--gold-hi)); transition: width .3s; }
.g-blackjack .bj-cut { position: absolute; left: 25%; top: -3px; width: 2px; height: 12px; background: var(--red); }
.g-blackjack .bj-small { font-size: 11px; color: var(--text-dim); }
.g-blackjack .bj-discard { position: absolute; top: 5%; left: 7%; display: flex; flex-direction: column; align-items: center; gap: 5px; z-index: 2; }
.g-blackjack .bj-discard-stack { --card-w: 44px; width: 44px; height: 61.6px; border-radius: 5.4% / 3.857%; box-shadow: 2px 2px 0 #cfc6b0, 4px 4px 0 #a79f8b, var(--shadow-1); transform: rotate(-8deg); }
.g-blackjack .bj-discard-stack > .pcard { box-shadow: none; }
/* places */
.g-blackjack .bj-seat { position: absolute; transform: translateX(-50%); width: 220px; display: flex; flex-direction: column; align-items: center; gap: 8px; --card-w: 54px; z-index: 3; }
/* miroir (G3 §1.3, B3D) : la place 1, « first base », est à DROITE de l'écran, contre le sabot : on distribue et on joue de droite à
   gauche, on règle de gauche à droite */
.g-blackjack .bj-seat.s0 { left: 88%; top: 25%; }
.g-blackjack .bj-seat.s1 { left: 69.5%; top: 39%; }
.g-blackjack .bj-seat.s2 { left: 50%; top: 46%; }
.g-blackjack .bj-seat.s3 { left: 30.5%; top: 39%; }
.g-blackjack .bj-seat.s4 { left: 12%; top: 25%; }
.g-blackjack .bj-emptyseat { margin-top: 110px; width: 70px; height: 70px; padding: 0 9px; box-sizing: border-box; border-radius: 50%; border: 1px dashed rgba(247,221,143,.3); display: grid; place-items: center;
  font-size: 10px; letter-spacing: .12em; text-transform: uppercase; color: rgba(247,221,143,.35); text-align: center; }
.g-blackjack .bj-hands { display: flex; gap: 8px; justify-content: center; align-items: flex-end; min-height: 106px; }
.g-blackjack .bj-hands.is-split { --card-w: 40px; }
.g-blackjack .bj-hand { display: flex; flex-direction: column; align-items: center; gap: 3px; padding: 3px 4px; border-radius: 10px; transition: box-shadow .2s, background .2s; }
.g-blackjack .bj-hand.is-active { background: rgba(247,221,143,.08); box-shadow: 0 0 0 2px var(--gold-hi), 0 0 26px rgba(247,221,143,.45); }
.g-blackjack .bj-badge { font-family: var(--font-display); font-size: 13px; padding: 1px 8px; border-radius: 6px; white-space: nowrap; animation: bj-pop .35s ease-out both; }
.g-blackjack .bj-badge:empty { display: none; }
.g-blackjack .bj-badge.is-win, .g-blackjack .bj-badge.is-charlie, .g-blackjack .bj-badge.is-even { background: var(--win); color: #04130c; }
.g-blackjack .bj-badge.is-bj { background: linear-gradient(90deg, var(--gold-hi), var(--gold)); color: #1a1204; box-shadow: 0 0 16px rgba(247,221,143,.6); }
.g-blackjack .bj-badge.is-lose, .g-blackjack .bj-badge.is-bust { background: var(--lose); color: #fff; }
.g-blackjack .bj-badge.is-push, .g-blackjack .bj-badge.is-surrender { background: var(--text-dim); color: #111; }
.g-blackjack .bj-bets { display: flex; align-items: center; gap: 10px; }
.g-blackjack .bj-spot { position: relative; width: 38px; height: 38px; border-radius: 50%; border: 1.5px solid rgba(247,221,143,.5); display: grid; place-items: center;
  background: rgba(0,0,0,.16); transition: box-shadow .2s, border-color .2s, transform .15s; }
.g-blackjack .bj-spot.bj-main { width: 60px; height: 60px; border-width: 2px; }
.g-blackjack .bj-spot.is-open { cursor: pointer; }
.g-blackjack .bj-spot.is-open:hover { border-color: var(--gold-hi); box-shadow: 0 0 14px rgba(247,221,143,.4); transform: scale(1.05); }
.g-blackjack .bj-spot.is-win { border-color: var(--win); box-shadow: 0 0 16px rgba(62,224,143,.55); }
.g-blackjack .bj-spot.is-lose { opacity: .45; }
.g-blackjack .bj-spot-l { font-size: 9px; letter-spacing: .12em; text-transform: uppercase; color: rgba(247,221,143,.7); }
.g-blackjack .bj-spot.has-bet .bj-spot-l { visibility: hidden; }
.g-blackjack .bj-chipstack { position: absolute; inset: 0; display: grid; place-items: center; pointer-events: none; }
.g-blackjack .bj-chipstack .chip { --chip-size: 30px; }
.g-blackjack .bj-main .bj-chipstack .chip { --chip-size: 46px; }
.g-blackjack .bj-amt { position: absolute; bottom: -15px; left: 50%; transform: translateX(-50%); font-size: 11px; color: var(--gold-hi); white-space: nowrap; font-family: var(--font-num); }
.g-blackjack .bj-who { margin-top: 8px; }
.g-blackjack .bj-seat.is-turn .bj-who { filter: drop-shadow(0 0 8px rgba(247,221,143,.7)); }
.g-blackjack .bj-bottag { display: flex; align-items: center; gap: 6px; padding: 3px 10px 3px 4px; border-radius: 99px; background: rgba(5,6,11,.55); border: 1px solid var(--line); }
.g-blackjack .bj-botemo { font-size: 18px; width: 26px; height: 26px; display: grid; place-items: center; border-radius: 50%; background: var(--bg-3); }
.g-blackjack .bj-botname { display: flex; flex-direction: column; line-height: 1.05; }
.g-blackjack .bj-botname b { font-size: 12.5px; font-weight: 600; }
.g-blackjack .bj-botname small { font-size: 10px; color: var(--text-dim); }
/* barre */
.g-blackjack .bj-bar { flex: none; display: grid; grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr); align-items: center; gap: 16px; padding: 8px 20px 12px;
  border-top: 1px solid var(--line); background: linear-gradient(180deg, rgba(10,13,24,.5), var(--bg-1)); min-height: 92px; }
.g-blackjack .bj-bar-l { min-width: 0; }
.g-blackjack .bj-bar-c { display: flex; flex-direction: column; align-items: center; gap: 7px; }
.g-blackjack .bj-msg { font-family: var(--font-display); font-size: 19px; color: var(--gold-hi); letter-spacing: .03em; text-align: center; max-width: 620px; }
.g-blackjack .bj-btns { display: flex; gap: 8px; flex-wrap: wrap; justify-content: center; }
.g-blackjack .bj-btns .kbd { margin-left: 4px; }
.g-blackjack .bj-info { justify-self: end; display: flex; flex-direction: column; align-items: flex-end; gap: 5px; font-size: 11.5px; color: var(--text-dim); text-align: right; }
.g-blackjack .bj-rulespill { max-width: 330px; white-space: normal; }
.g-blackjack .bj-count:empty { display: none; }
.g-blackjack .bj-count { color: var(--neon-cyan); }
/* animations */
.g-blackjack .bj-fly { animation-name: bj-fly; animation-timing-function: cubic-bezier(.2,.7,.2,1); animation-fill-mode: backwards; }
@keyframes bj-fly { from { transform: translate(var(--fx, 0), var(--fy, 0)) rotate(-24deg) scale(.7); opacity: .3; } to { transform: none; opacity: 1; } }
@keyframes bj-pop { from { transform: scale(.4); opacity: 0; } to { transform: scale(1); opacity: 1; } }
@media (max-width: 1200px) {
  .g-blackjack .bj-seat { width: 190px; --card-w: 46px; }
  .g-blackjack .bj-setup { grid-template-columns: 1fr; }
  .g-blackjack .bj-bar { grid-template-columns: 1fr; justify-items: center; }
  .g-blackjack .bj-info { justify-self: center; align-items: center; }
}
.g-blackjack .bj-hbet { font-size: 10.5px; color: var(--text-dim); letter-spacing: .04em; white-space: nowrap; }
.g-blackjack .bj-hbet:empty { display: none; }
/* réglages compacts : tout tient dans ~700 px utiles, sinon la racine défile */
.g-blackjack .bj-setup { padding-top: 10px; gap: 12px; }
.g-blackjack .bj-title { font-size: 34px; }
.g-blackjack .bj-rules { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 6px 12px; }
.g-blackjack .bj-col { gap: 9px; }
.g-blackjack .bj-seatrow { padding: 4px 8px; }
/* vérif réelle 29/09 : texte courbe trop grand (tronqué, chevauchait la place centrale) et places trop hautes */
.g-blackjack .bj-arc { top: 16%; width: min(56%, 800px); }
.g-blackjack .bj-arc1 { font-size: 30px; letter-spacing: 4px; }
.g-blackjack .bj-arc2 { font-size: 15px; letter-spacing: 3px; }
.g-blackjack .bj-seat.s0, .g-blackjack .bj-seat.s4 { top: 28%; }
.g-blackjack .bj-seat.s1, .g-blackjack .bj-seat.s3 { top: 43%; }
.g-blackjack .bj-seat.s2 { top: 51%; }
/* =====================================================================
   EN LIGNE — la table partagée : rail de cuir, feutre sous projecteur, banque, anneau du tour, bannières.
   ===================================================================== */
.g-blackjack .bj-online .bj-room { overflow: visible; }
.g-blackjack .bj-online .bj-rail { position: absolute; inset: 2px 0.8% 0; border-radius: 40px 40px 50% 50% / 40px 40px 60% 60%;
  background: radial-gradient(ellipse 50% 30% at 50% 0%, rgba(255,200,140,.16), transparent 70%), linear-gradient(180deg, #33190d 0%, #1d0d06 45%, #120703 100%);
  box-shadow: inset 0 2px 0 rgba(255,220,160,.16), inset 0 -22px 50px rgba(0,0,0,.65), 0 30px 70px rgba(0,0,0,.65); }
.g-blackjack .bj-online .bj-rail::after { content: ""; position: absolute; inset: 7px; border-radius: inherit; border: 1px dashed rgba(222,184,92,.38); pointer-events: none; }
.g-blackjack .bj-online .bj-felt { inset: 15px 2.4% 13px; border: 2px solid var(--gold);
  box-shadow: 0 0 0 3px #0e0602, 0 0 0 4px rgba(222,184,92,.35), inset 0 0 0 1px rgba(0,0,0,.45), inset 0 60px 170px rgba(0,0,0,.55), inset 0 -40px 110px rgba(0,0,0,.4);
  background:
    radial-gradient(ellipse 42% 36% at 50% 40%, rgba(255,250,220,.075), transparent 72%),
    repeating-conic-gradient(from 0deg at 50% 118%, rgba(222,184,92,.035) 0deg 3deg, transparent 3deg 9deg),
    repeating-radial-gradient(circle at 30% 20%, rgba(255,255,255,.018) 0 1px, transparent 1px 3px),
    radial-gradient(ellipse 80% 72% at 50% 32%, #1b8a68, var(--felt) 55%, #052a1c 100%); }
/* banque du croupier */
.g-blackjack .bj-tray { position: absolute; top: 3.2%; left: calc(50% - 300px); z-index: 2; display: flex; gap: 3px; padding: 5px 7px 6px;
  border-radius: 9px; background: linear-gradient(180deg, #07090f, #161b2e); border: 1px solid var(--line-strong);
  box-shadow: inset 0 4px 9px rgba(0,0,0,.75), 0 1px 0 rgba(255,255,255,.06), 0 6px 14px rgba(0,0,0,.35); }
.g-blackjack .bj-tray-col { display: block; width: 15px; height: 34px; border-radius: 4px;
  background: repeating-linear-gradient(180deg, var(--c1) 0 3px, var(--c2) 3px 4px, var(--c1) 4px 6px, rgba(0,0,0,.4) 6px 7px);
  box-shadow: inset -3px 0 5px rgba(0,0,0,.5), inset 3px 0 4px rgba(255,255,255,.25); }
/* centre : compte à rebours + bannières */
.g-blackjack .bj-center { position: absolute; left: 50%; top: 39%; transform: translate(-50%, -50%); z-index: 8; pointer-events: none; display: grid; place-items: center; }
.g-blackjack .bj-cd { grid-area: 1 / 1; position: relative; width: 96px; height: 96px; display: grid; place-items: center; opacity: 0; transform: scale(.7); transition: opacity .25s, transform .3s cubic-bezier(.2,.9,.3,1.3); }
.g-blackjack .bj-cd.is-on { opacity: 1; transform: none; }
.g-blackjack .bj-cd-svg { position: absolute; inset: 0; }
.g-blackjack .bj-cd-svg svg { width: 100%; height: 100%; transform: rotate(-90deg); overflow: visible; }
.g-blackjack .bj-cd-bg { fill: rgba(5,6,11,.62); stroke: rgba(222,184,92,.2); stroke-width: 5; }
.g-blackjack .bj-cd-fg { fill: none; stroke: var(--gold-hi); stroke-width: 5.5; stroke-linecap: round; stroke-dasharray: 100 100; filter: drop-shadow(0 0 6px rgba(247,221,143,.75)); transition: stroke .3s; }
.g-blackjack .bj-cd.is-hot .bj-cd-fg { stroke: var(--lose); filter: drop-shadow(0 0 8px rgba(255,90,103,.9)); }
.g-blackjack .bj-cd.is-hot .bj-cd-n { color: #fff; animation: bj-throb .5s ease-in-out infinite alternate; }
.g-blackjack .bj-cd-n { position: relative; font-size: 32px; font-weight: 700; color: var(--gold-hi); }
.g-blackjack .bj-cd-l { position: absolute; top: calc(100% + 7px); left: 50%; transform: translateX(-50%); white-space: nowrap; font-family: var(--font-display);
  letter-spacing: .16em; text-transform: uppercase; font-size: 12.5px; color: rgba(247,221,143,.9); text-shadow: 0 2px 10px #000; }
.g-blackjack .bj-banner { grid-area: 1 / 1; text-align: center; white-space: nowrap; opacity: 0; transform: scale(.6); }
.g-blackjack .bj-banner.is-on { animation: bj-banner 2.1s cubic-bezier(.2,.9,.3,1.1) forwards; }
.g-blackjack .bj-banner.is-you.is-on { animation-duration: 1.6s; }
.g-blackjack .bj-banner-t { font-family: var(--font-display); font-size: clamp(38px, 4.6vw, 74px); line-height: 1; letter-spacing: .07em;
  background: linear-gradient(180deg, #fffbe8 0%, #f7dd8f 38%, #a87a22 58%, #f7dd8f 80%, #fff3c4 100%); -webkit-background-clip: text; background-clip: text; color: transparent;
  filter: drop-shadow(0 4px 0 rgba(50,32,4,.85)) drop-shadow(0 0 26px rgba(247,221,143,.6)); }
.g-blackjack .bj-banner-s { margin-top: 6px; font-size: 20px; font-weight: 700; color: var(--text); text-shadow: 0 2px 12px #000, 0 0 18px currentColor; }
.g-blackjack .bj-banner.is-dealer .bj-banner-t { background: linear-gradient(180deg, #ffe1e4, #ff5a67 45%, #8a1520 70%, #ff8a93); -webkit-background-clip: text; background-clip: text; filter: drop-shadow(0 4px 0 rgba(40,4,8,.85)) drop-shadow(0 0 24px rgba(255,90,103,.6)); }
.g-blackjack .bj-banner.is-bust .bj-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,.85)) drop-shadow(0 0 24px rgba(62,224,143,.6)); }
@keyframes bj-banner { 0% { opacity: 0; transform: scale(.45); } 14% { opacity: 1; transform: scale(1.1); } 24% { transform: scale(1); } 78% { opacity: 1; transform: scale(1); } 100% { opacity: 0; transform: translateY(-26px) scale(.98); } }
@keyframes bj-throb { from { transform: scale(1); } to { transform: scale(1.14); } }
/* places en ligne */
.g-blackjack .bj-online .bj-seat { width: 210px; }
.g-blackjack .bj-online .bj-seat.is-empty .bj-bets, .g-blackjack .bj-online .bj-seat.is-empty .bj-hands { visibility: hidden; }
.g-blackjack .bj-online .bj-who { position: relative; display: flex; flex-direction: column; align-items: center; gap: 3px; margin-top: 10px; min-height: 34px; }
.g-blackjack .bj-online .bj-seat.is-human .bj-spot.bj-main { border-color: color-mix(in srgb, var(--pc) 75%, #fff 10%); box-shadow: 0 0 0 1px rgba(0,0,0,.35), inset 0 0 14px color-mix(in srgb, var(--pc) 30%, transparent); }
.g-blackjack .bj-online .bj-seat.is-mine .bj-spot.is-open { border-style: solid; animation: bj-invite 1.6s ease-in-out infinite; }
.g-blackjack .bj-online .bj-seat.is-mine .bj-spot.is-open.has-bet { animation: none; }
@keyframes bj-invite { 50% { box-shadow: 0 0 0 2px color-mix(in srgb, var(--pc) 60%, transparent), 0 0 22px color-mix(in srgb, var(--pc) 45%, transparent); } }
.g-blackjack .bj-online .bj-seat.is-turn::before { content: ""; position: absolute; left: 50%; top: -34px; width: 280px; height: 340px; transform: translateX(-50%); z-index: -1; pointer-events: none;
  background: radial-gradient(ellipse 50% 50% at 50% 42%, color-mix(in srgb, var(--pc) 26%, transparent), transparent 70%); animation: bj-breathe 1.6s ease-in-out infinite; }
@keyframes bj-breathe { 50% { opacity: .55; } }
.g-blackjack .bj-online .bj-seat.is-turn.is-mine .bj-who .ptag { animation: bj-you .8s ease-in-out infinite alternate; }
@keyframes bj-you { to { box-shadow: 0 0 0 2px var(--pc), 0 0 26px color-mix(in srgb, var(--pc) 70%, transparent); } }
.g-blackjack .bj-online .bj-seat.is-off .bj-who { opacity: .55; filter: grayscale(.7); }
.g-blackjack .bj-online .bj-seat.is-ready .bj-who .ptag { box-shadow: 0 0 0 2px var(--win), 0 0 16px rgba(62,224,143,.45); }
.g-blackjack .bj-online .bj-seat.is-win .bj-who .ptag { box-shadow: 0 0 0 2px var(--win), 0 0 24px rgba(62,224,143,.6); }
.g-blackjack .bj-online .bj-seat.is-lose .bj-hands { opacity: .78; }
.g-blackjack .bj-online .bj-seat.is-bj .bj-hand { box-shadow: 0 0 0 2px var(--gold-hi), 0 0 34px rgba(247,221,143,.75); background: rgba(247,221,143,.1); }
.g-blackjack .bj-online .bj-seat.is-bj::after { content: ""; position: absolute; left: 50%; top: 20px; width: 240px; height: 240px; transform: translateX(-50%); z-index: -1; pointer-events: none;
  background: repeating-conic-gradient(from 0deg, rgba(247,221,143,.16) 0deg 6deg, transparent 6deg 18deg); -webkit-mask: radial-gradient(circle, #000 20%, transparent 68%); mask: radial-gradient(circle, #000 20%, transparent 68%);
  animation: bj-rays 6s linear infinite; }
@keyframes bj-rays { to { transform: translateX(-50%) rotate(360deg); } }
.g-blackjack .bj-tagline { font-size: 11px; color: var(--text-dim); text-align: center; letter-spacing: .03em; }
.g-blackjack .bj-seat.is-ready .bj-tagline { color: var(--win); }
.g-blackjack .bj-sitbtn { display: flex; flex-direction: column; align-items: center; gap: 7px; margin-top: 4px; background: none; border: 0; cursor: pointer; color: rgba(247,221,143,.85); font-family: var(--font-ui); padding: 4px 10px; }
.g-blackjack .bj-sit-plus { width: 64px; height: 64px; border-radius: 50%; border: 1.5px dashed rgba(247,221,143,.6); display: grid; place-items: center; font-size: 30px; font-weight: 300; line-height: 1;
  background: radial-gradient(circle, rgba(247,221,143,.1), transparent 70%); transition: transform .2s, box-shadow .2s, border-color .2s; }
.g-blackjack .bj-sitbtn:hover:not([disabled]) .bj-sit-plus { border-style: solid; border-color: var(--gold-hi); box-shadow: 0 0 24px rgba(247,221,143,.55); transform: scale(1.07); }
.g-blackjack .bj-sitbtn[disabled] { cursor: default; opacity: .4; }
.g-blackjack .bj-sit-t { font-size: 11.5px; letter-spacing: .16em; text-transform: uppercase; }
.g-blackjack .bj-online .bj-seat.is-empty .bj-who { margin-top: -64px; }
.g-blackjack .bj-claim { margin-top: 2px; font: 600 11px var(--font-ui); letter-spacing: .06em; color: var(--gold-hi); background: rgba(5,6,11,.55); border: 1px solid var(--line-strong); border-radius: 99px; padding: 3px 10px; cursor: pointer; }
.g-blackjack .bj-claim:hover { border-color: var(--gold-hi); }
.g-blackjack .bj-standup { position: absolute; right: -8px; top: -9px; width: 22px; height: 22px; border-radius: 50%; border: 1px solid var(--line-strong); background: #0a0d18; color: var(--text-dim);
  font-size: 14px; line-height: 1; cursor: pointer; display: grid; place-items: center; opacity: .75; }
.g-blackjack .bj-standup:hover { opacity: 1; color: var(--lose); border-color: var(--lose); }
/* piles de jetons */
.g-blackjack .bj-online .bj-chipstack .chip { --chip-size: 30px; }
.g-blackjack .bj-online .bj-main .bj-chipstack .chip { --chip-size: 40px; }
.g-blackjack .bj-stack { position: relative; display: block; width: 30px; height: 30px; }
.g-blackjack .bj-online .bj-main .bj-stack { width: 40px; height: 40px; }
.g-blackjack .bj-stack .chip { position: absolute; left: 0; top: 0; transform: translateY(calc(var(--k, 0) * -3.5px)); }
.g-blackjack .bj-flychip { position: fixed; z-index: 90; pointer-events: none; margin: 0; filter: drop-shadow(0 8px 8px rgba(0,0,0,.45)); }
.g-blackjack .bj-spot.is-win { animation: bj-winspot 1s ease-in-out 2; }
@keyframes bj-winspot { 50% { box-shadow: 0 0 0 3px var(--win), 0 0 30px rgba(62,224,143,.8); } }
/* anneau de minuteur autour de la main active */
.g-blackjack .bj-hand { position: relative; }
.g-blackjack .bj-ring { --p: 1; --ring-c: var(--gold-hi); position: absolute; inset: -8px; pointer-events: none; z-index: 4; }
.g-blackjack .bj-ring-b { position: absolute; inset: 0; border-radius: 15px; padding: 3px;
  background: conic-gradient(from 0deg, var(--ring-c) calc(var(--p) * 360deg), rgba(255,255,255,.08) 0);
  -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0); -webkit-mask-composite: xor;
  mask: linear-gradient(#000 0 0) content-box exclude, linear-gradient(#000 0 0); }
.g-blackjack .bj-ring::after { content: ""; position: absolute; inset: -2px; border-radius: 17px; box-shadow: 0 0 22px color-mix(in srgb, var(--ring-c) 55%, transparent); }
.g-blackjack .bj-ring.is-warn { --ring-c: var(--warn); }
.g-blackjack .bj-ring.is-hot { --ring-c: var(--lose); animation: bj-hot .45s ease-in-out infinite alternate; }
.g-blackjack .bj-ring.is-bot .bj-ring-b { animation: bj-botring 1s ease-in-out infinite alternate; }
@keyframes bj-hot { to { transform: scale(1.03); } }
@keyframes bj-botring { from { opacity: .25; } to { opacity: .9; } }
.g-blackjack .bj-ring-n { position: absolute; right: -13px; top: -13px; width: 27px; height: 27px; border-radius: 50%; display: grid; place-items: center; font-size: 12.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-blackjack .bj-online .bj-hand.is-active { background: rgba(247,221,143,.07); box-shadow: none; }
/* cartes : vol depuis le sabot, tension de la carte cachée, coup d'œil, ramassage */
.g-blackjack .bj-online .bj-fly { animation-name: bj-fly-o; animation-timing-function: cubic-bezier(.22,.7,.2,1); animation-fill-mode: backwards; }
@keyframes bj-fly-o { 0% { transform: translate(var(--fx, 0), var(--fy, 0)) rotate(-40deg) scale(.55); opacity: 0; filter: drop-shadow(0 18px 14px rgba(0,0,0,.5)); }
  12% { opacity: 1; } 62% { transform: translate(calc(var(--fx, 0) * .22), calc(var(--fy, 0) * .22 - 16px)) rotate(-7deg) scale(1.06); filter: drop-shadow(0 16px 12px rgba(0,0,0,.45)); }
  100% { transform: none; opacity: 1; filter: none; } }
.g-blackjack .bj-tension { animation: bj-tension .21s ease-in-out infinite alternate; z-index: 3; }
@keyframes bj-tension { from { transform: translateY(-6px) rotate(-2deg) scale(1.06); filter: drop-shadow(0 0 10px rgba(247,221,143,.75)); }
  to { transform: translateY(-10px) rotate(2deg) scale(1.1); filter: drop-shadow(0 0 22px rgba(247,221,143,1)); } }
.g-blackjack .bj-peek { animation: bj-peek .62s ease-in-out; }
@keyframes bj-peek { 30%, 65% { transform: translateY(-5px) rotate(-3deg); filter: drop-shadow(0 0 10px rgba(247,221,143,.6)); } }
.g-blackjack .bj-sweep { transition: transform .42s cubic-bezier(.5,0,.8,.4), opacity .42s; transform: translate(-38vw, -32vh) rotate(-50deg) scale(.4) !important; opacity: 0; }
.g-blackjack .bj-shoe.is-shuffling .bj-shoe-box { animation: bj-shake .12s linear infinite alternate; }
@keyframes bj-shake { from { transform: perspective(200px) rotateX(18deg) translateX(-3px) rotate(-3deg); } to { transform: perspective(200px) rotateX(18deg) translateX(3px) rotate(3deg); } }
/* autour de la table */
.g-blackjack .bj-watch { position: absolute; left: 1.6%; bottom: 8px; z-index: 6; display: flex; flex-wrap: wrap; align-items: center; gap: 6px; max-width: 30%; }
.g-blackjack .bj-watch-l { font-size: 10px; letter-spacing: .2em; text-transform: uppercase; color: var(--text-faint); }
.g-blackjack .bj-watch-p { display: inline-flex; align-items: center; gap: 5px; padding: 2px 9px 2px 3px; border-radius: 99px; font-size: 14px;
  background: color-mix(in srgb, var(--pc) 14%, rgba(5,6,11,.75)); border: 1px solid color-mix(in srgb, var(--pc) 50%, transparent); }
.g-blackjack .bj-watch-p small { font-size: 11px; color: var(--text); }
.g-blackjack .bj-watch-p.is-off { opacity: .5; }
/* barre du bas en ligne */
.g-blackjack .bj-online .bj-bar { min-height: 104px; padding: 8px 18px 10px; }
.g-blackjack .bj-online .bj-bar-l { display: flex; flex-direction: column; gap: 6px; }
.g-blackjack .bj-mine { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.g-blackjack .bj-hint { font-size: 11px; color: var(--text-faint); }
/* écran bas (1366 × 768) : l'aide passait sous le bord de l'écran ; le message central dit déjà quoi faire (aide gardée au survol) */
@media (max-height: 820px) { .g-blackjack .bj-hint { display: none; } }
.g-blackjack .bj-online .bj-act { min-width: 108px; }
.g-blackjack .bj-online .bj-info { gap: 4px; }
.g-blackjack .bj-feed { list-style: none; margin: 0; padding: 0; max-height: 50px; overflow: hidden; font-size: 12px; line-height: 1.3; text-align: right; }
.g-blackjack .bj-feed li { color: var(--text-faint); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 440px; }
.g-blackjack .bj-feed li.is-new { color: var(--text); animation: bj-feedin .35s ease-out; }
.g-blackjack .bj-feed li.bj-f-auto { color: var(--warn); }
.g-blackjack .bj-feed li.bj-f-bj, .g-blackjack .bj-feed li.bj-f-win { color: var(--gold-hi); }
@keyframes bj-feedin { from { opacity: 0; transform: translateY(6px); } }
.g-blackjack .bj-hist { display: flex; gap: 4px; align-items: center; justify-content: flex-end; font-size: 11px; }
.g-blackjack .bj-hist-l { font-size: 10px; letter-spacing: .18em; text-transform: uppercase; color: var(--text-faint); margin-right: 3px; }
.g-blackjack .bj-hpill { min-width: 24px; padding: 1px 6px; border-radius: 99px; background: rgba(5,6,11,.6); border: 1px solid var(--line); color: var(--text); text-align: center; }
.g-blackjack .bj-hpill.is-bust { color: var(--win); border-color: rgba(62,224,143,.55); }
.g-blackjack .bj-hpill.is-bj { color: #1a1204; background: var(--gold); border-color: var(--gold); }
/* retouches après captures (00:40) : compte à rebours sans collision avec le texte courbe, jetons du râtelier, grand écran */
.g-blackjack .bj-online .bj-center { top: 41%; }
.g-blackjack .bj-online .bj-arc { transition: opacity .4s; }
.g-blackjack .bj-online .bj-room.is-cd .bj-arc { opacity: .16; }
.g-blackjack .bj-online .bj-seat.is-mine .bj-tagline { color: var(--pc); font-weight: 600; letter-spacing: .08em; }
.g-blackjack .bj-online .bj-bar .chip-rack { flex-wrap: nowrap; gap: 3px; }
.g-blackjack .bj-online .bj-bar .chip-rack .chip { --chip-size: 38px; }
@media (min-width: 1600px) and (min-height: 900px) {
  .g-blackjack .bj-online .bj-seat { width: 260px; --card-w: 72px; gap: 10px; }
  .g-blackjack .bj-online .bj-hands { height: 172px; min-height: 0; }
  .g-blackjack .bj-online .bj-hands.is-split { --card-w: 54px; }
  .g-blackjack .bj-online .bj-dealer { --card-w: 84px; }
  .g-blackjack .bj-online .bj-spot { width: 46px; height: 46px; }
  .g-blackjack .bj-online .bj-spot.bj-main { width: 76px; height: 76px; }
  .g-blackjack .bj-online .bj-main .bj-chipstack .chip { --chip-size: 52px; }
  .g-blackjack .bj-online .bj-main .bj-stack { width: 52px; height: 52px; }
  .g-blackjack .bj-online .bj-chipstack .chip { --chip-size: 36px; }
  .g-blackjack .bj-online .bj-stack { width: 36px; height: 36px; }
  .g-blackjack .bj-online .bj-total { font-size: 15px; }
  .g-blackjack .bj-online .bj-cd { width: 118px; height: 118px; }
  .g-blackjack .bj-online .bj-cd-n { font-size: 40px; }
  .g-blackjack .bj-online .bj-tray { left: calc(50% - 380px); transform: scale(1.2); transform-origin: left top; }
  .g-blackjack .bj-online .bj-arc { top: 17%; }
  .g-blackjack .bj-online .bj-seat.s0, .g-blackjack .bj-online .bj-seat.s4 { top: 24%; }
  .g-blackjack .bj-online .bj-seat.s1, .g-blackjack .bj-online .bj-seat.s3 { top: 37%; }
  .g-blackjack .bj-online .bj-seat.s2 { top: 45%; }
  .g-blackjack .bj-online .bj-seat.s0 { left: 87%; } .g-blackjack .bj-online .bj-seat.s4 { left: 13%; }
  .g-blackjack .bj-online .bj-bar .chip-rack .chip { --chip-size: 46px; }
  .g-blackjack .bj-online .bj-msg { font-size: 22px; }
}
/* série de victoires */
.g-blackjack .bj-streak { position: absolute; left: -14px; top: -10px; z-index: 2; padding: 1px 7px 1px 5px; border-radius: 99px; font-size: 11px; font-weight: 700; color: #fff;
  background: linear-gradient(180deg, #ffb347, #e8452c); box-shadow: 0 0 12px rgba(255,120,40,.75); animation: bj-flame .9s ease-in-out infinite alternate; }
@keyframes bj-flame { from { transform: rotate(-4deg) scale(1); } to { transform: rotate(4deg) scale(1.08); box-shadow: 0 0 20px rgba(255,150,40,.95); } }
/* stabilité (01:10) : la zone des cartes a une hauteur FIXE, les cercles de mise ne bougent plus sous le curseur quand les
   cartes de la manche précédente sont ramassées (clics perdus mesurés : rangée des mises à y = 469, 445 puis 465) */
.g-blackjack .bj-online .bj-hands { height: 138px; min-height: 0; align-items: flex-end; }
.g-blackjack .bj-online .bj-seat.s0, .g-blackjack .bj-online .bj-seat.s4 { top: 23%; }
.g-blackjack .bj-online .bj-seat.s1, .g-blackjack .bj-online .bj-seat.s3 { top: 36%; }
.g-blackjack .bj-online .bj-seat.s2 { top: 44%; }
@media (min-width: 1600px) and (min-height: 900px) {
  .g-blackjack .bj-online .bj-seat { width: 260px; --card-w: 72px; gap: 10px; }
  .g-blackjack .bj-online .bj-hands { height: 172px; min-height: 0; }
  .g-blackjack .bj-online .bj-hands.is-split { --card-w: 54px; }
  .g-blackjack .bj-online .bj-dealer { --card-w: 84px; }
  .g-blackjack .bj-online .bj-spot { width: 46px; height: 46px; }
  .g-blackjack .bj-online .bj-spot.bj-main { width: 76px; height: 76px; }
  .g-blackjack .bj-online .bj-main .bj-chipstack .chip { --chip-size: 52px; }
  .g-blackjack .bj-online .bj-main .bj-stack { width: 52px; height: 52px; }
  .g-blackjack .bj-online .bj-chipstack .chip { --chip-size: 36px; }
  .g-blackjack .bj-online .bj-stack { width: 36px; height: 36px; }
  .g-blackjack .bj-online .bj-total { font-size: 15px; }
  .g-blackjack .bj-online .bj-cd { width: 118px; height: 118px; }
  .g-blackjack .bj-online .bj-cd-n { font-size: 40px; }
  .g-blackjack .bj-online .bj-tray { left: calc(50% - 380px); transform: scale(1.2); transform-origin: left top; }
  .g-blackjack .bj-online .bj-arc { top: 17%; }
  .g-blackjack .bj-online .bj-seat.s0, .g-blackjack .bj-online .bj-seat.s4 { top: 24%; }
  .g-blackjack .bj-online .bj-seat.s1, .g-blackjack .bj-online .bj-seat.s3 { top: 37%; }
  .g-blackjack .bj-online .bj-seat.s2 { top: 45%; }
  .g-blackjack .bj-online .bj-seat.s0 { left: 87%; } .g-blackjack .bj-online .bj-seat.s4 { left: 13%; }
  .g-blackjack .bj-online .bj-bar .chip-rack .chip { --chip-size: 46px; }
  .g-blackjack .bj-online .bj-msg { font-size: 22px; }
}
/* barre du bas à hauteur FIXE en ligne : le fil et l'historique qui se remplissent ne réduisent plus le tapis (décalage de 24 px mesuré) */
.g-blackjack .bj-online .bj-bar { height: 116px; min-height: 0; overflow: hidden; }
.g-blackjack .bj-online .bj-info { max-height: 104px; overflow: hidden; justify-content: flex-end; }
.g-blackjack .bj-online .bj-feed { max-height: 48px; }
.g-blackjack .bj-inforow { display: flex; align-items: center; justify-content: flex-end; gap: 8px; min-height: 24px; }
.g-blackjack .bj-online .bj-rulespill { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 460px; font-size: 10.5px; }
.g-blackjack .bj-hostbtn { padding: 2px 10px; min-height: 0; font-size: 11.5px; }
@media (min-width: 1600px) and (min-height: 900px) { .g-blackjack .bj-online .bj-bar { height: 124px; } }

/* qualité allégée (html.perf-low : PC sans accélération graphique ou lent, voir Casino.perf) : les cartes volent, tremblent et se
   soulèvent de la même façon, sans l'ombre portée animée (un flou recalculé à chaque image). */
html.perf-low .g-blackjack .bj-online .bj-fly { animation-name: bj-fly-o-low; }
@keyframes bj-fly-o-low { 0% { transform: translate(var(--fx, 0), var(--fy, 0)) rotate(-40deg) scale(.55); opacity: 0; }
  12% { opacity: 1; } 62% { transform: translate(calc(var(--fx, 0) * .22), calc(var(--fy, 0) * .22 - 16px)) rotate(-7deg) scale(1.06); }
  100% { transform: none; opacity: 1; } }
html.perf-low .g-blackjack .bj-tension { animation-name: bj-tension-low; }
@keyframes bj-tension-low { from { transform: translateY(-6px) rotate(-2deg) scale(1.06); } to { transform: translateY(-10px) rotate(2deg) scale(1.1); } }
html.perf-low .g-blackjack .bj-peek { animation-name: bj-peek-low; }
@keyframes bj-peek-low { 30%, 65% { transform: translateY(-5px) rotate(-3deg); } }

/* ===================== BLACKJACK-PLUS : deux tables (Émeraude, Rubis), choix de table, pari derrière ===================== */
.g-blackjack .bj-online { position: relative; --gem1: #5ff0b4; --gem2: #13925f; --gem3: #03301d; --gemglow: rgba(64,230,160,.5); }
.g-blackjack .bj-online.bj-t-rubis { --gem1: #ff7f9b; --gem2: #c0183f; --gem3: #3a0312; --gemglow: rgba(255,84,124,.5); --felt: #6e0f25; --felt-hi: #93203b; --felt-lo: #2a030c; }
.g-blackjack .bj-online.bj-t-rubis .bj-felt { background:
    radial-gradient(ellipse 42% 36% at 50% 40%, rgba(255,236,220,.075), transparent 72%),
    repeating-conic-gradient(from 0deg at 50% 118%, rgba(222,184,92,.04) 0deg 3deg, transparent 3deg 9deg),
    repeating-radial-gradient(circle at 30% 20%, rgba(255,255,255,.018) 0 1px, transparent 1px 3px),
    radial-gradient(ellipse 80% 72% at 50% 32%, #a3243f, #6e0f25 55%, #28030b 100%); }
.g-blackjack .bj-online.bj-t-rubis .bj-rail { background: radial-gradient(ellipse 50% 30% at 50% 0%, rgba(255,170,170,.14), transparent 70%), linear-gradient(180deg, #2c0f12 0%, #180607 45%, #0e0304 100%); }

/* pierre taillée (CSS pur) */
.g-blackjack .bj-gem { position: relative; display: inline-block; flex: none; width: 22px; height: 22px; overflow: hidden;
  clip-path: polygon(50% 0, 100% 36%, 80% 100%, 20% 100%, 0 36%);
  background: conic-gradient(from 210deg at 50% 42%, var(--gem1), var(--gem2) 18%, var(--gem1) 36%, var(--gem3) 52%, var(--gem2) 68%, #fff 76%, var(--gem1) 84%, var(--gem2)); }
.g-blackjack .bj-gem::after { content: ""; position: absolute; inset: -40%; background: linear-gradient(115deg, transparent 40%, rgba(255,255,255,.75) 50%, transparent 60%);
  transform: translateX(-70%); animation: bj-gem-glint 4.2s ease-in-out infinite; }
@keyframes bj-gem-glint { 0%, 62% { transform: translateX(-70%); } 80%, 100% { transform: translateX(70%); } }

/* plaque de table (coin bas-droit) : la table où l'on est, et l'accès à l'autre */
.g-blackjack .bj-plaque { position: absolute; right: 1.4%; bottom: 8px; z-index: 7; display: flex; align-items: center; gap: 10px; padding: 7px 12px 7px 11px;
  border-radius: 12px; cursor: pointer; font: inherit; color: var(--gold-hi); text-align: left;
  background: linear-gradient(180deg, #2b1d0c, #120a04); border: 1px solid rgba(222,184,92,.55);
  box-shadow: inset 0 1px 0 rgba(255,236,170,.22), inset 0 -8px 16px rgba(0,0,0,.35), 0 10px 22px rgba(0,0,0,.5); transition: border-color .2s, box-shadow .2s, transform .2s; }
.g-blackjack .bj-plaque:hover { border-color: var(--gold-hi); transform: translateY(-2px); box-shadow: inset 0 1px 0 rgba(255,236,170,.3), 0 12px 26px rgba(0,0,0,.55), 0 0 22px var(--gemglow); }
.g-blackjack .bj-plaque.is-emeraude { --gem1: #5ff0b4; --gem2: #13925f; --gem3: #03301d; --gemglow: rgba(64,230,160,.5); }
.g-blackjack .bj-plaque.is-rubis { --gem1: #ff7f9b; --gem2: #c0183f; --gem3: #3a0312; --gemglow: rgba(255,84,124,.5); }
.g-blackjack .bj-plaque-gem { width: 24px; height: 24px; }
.g-blackjack .bj-plaque-t { display: flex; flex-direction: column; line-height: 1.15; }
.g-blackjack .bj-plaque-name { font-family: var(--font-display); font-weight: 400; font-size: 15px; letter-spacing: .06em; }
.g-blackjack .bj-plaque-sub { font-size: 11px; color: var(--text-dim); letter-spacing: .02em; }
.g-blackjack .bj-plaque-sw { font-size: 17px; color: var(--gold); margin-left: 2px; }

/* ---------- le salon : choix de table ---------- */
.g-blackjack .bj-lobby { position: absolute; inset: 0; z-index: 40; display: none; overflow: auto; padding: 18px 16px;
  background:
    radial-gradient(ellipse 46% 60% at 24% 38%, rgba(19,146,95,.2), transparent 70%),
    radial-gradient(ellipse 46% 60% at 76% 38%, rgba(192,24,63,.2), transparent 70%),
    radial-gradient(ellipse 70% 40% at 50% 112%, rgba(222,184,92,.14), transparent 70%),
    repeating-linear-gradient(90deg, rgba(222,184,92,.025) 0 1px, transparent 1px 64px),
    #07060b; }
.g-blackjack .bj-lobby.is-on { display: grid; place-items: center; }
.g-blackjack .bj-lobby-in { width: 100%; max-width: 1180px; display: flex; flex-direction: column; align-items: center; gap: 16px; }
.g-blackjack .bj-lobby-head { text-align: center; }
.g-blackjack .bj-lobby-kick { font-size: 11px; letter-spacing: .38em; text-transform: uppercase; color: var(--gold); }
.g-blackjack .bj-lobby-head h2 { margin: 4px 0 4px; font-family: var(--font-display); font-weight: 400; font-size: clamp(30px, 3.4vw, 50px); letter-spacing: .04em; line-height: 1.05;
  background: linear-gradient(180deg, #fffbe8 0%, #f7dd8f 40%, #b3862b 62%, #f7dd8f 86%); -webkit-background-clip: text; background-clip: text; color: transparent;
  filter: drop-shadow(0 3px 0 rgba(40,26,3,.9)) drop-shadow(0 0 22px rgba(247,221,143,.35)); }
.g-blackjack .bj-lobby-head p { margin: 0; color: var(--text-dim); font-size: 14px; }
.g-blackjack .bj-lobby-row { width: 100%; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 26px; }
.g-blackjack .bj-lobby-foot { min-height: 38px; }
.g-blackjack .bj-lt { position: relative; display: flex; flex-direction: column; gap: 9px; padding: 16px 20px 18px; border-radius: 22px; cursor: pointer;
  background: radial-gradient(ellipse 90% 55% at 50% 0%, color-mix(in srgb, var(--gem2) 30%, transparent), transparent 72%), linear-gradient(180deg, #14111b, #0a080e);
  border: 1px solid color-mix(in srgb, var(--gem1) 30%, rgba(222,184,92,.45));
  box-shadow: 0 22px 54px rgba(0,0,0,.6), inset 0 1px 0 rgba(255,255,255,.07); transition: transform .28s cubic-bezier(.2,.9,.3,1.2), box-shadow .28s, border-color .28s; }
.g-blackjack .bj-lt:hover { transform: translateY(-6px); border-color: var(--gem1); box-shadow: 0 30px 70px rgba(0,0,0,.65), 0 0 0 1px var(--gem1), 0 0 48px var(--gemglow); }
.g-blackjack .bj-lt.is-emeraude { --gem1: #5ff0b4; --gem2: #13925f; --gem3: #03301d; --gemglow: rgba(64,230,160,.45); }
.g-blackjack .bj-lt.is-rubis { --gem1: #ff7f9b; --gem2: #c0183f; --gem3: #3a0312; --gemglow: rgba(255,84,124,.45); }
.g-blackjack .bj-lt.is-current { border-color: var(--gold-hi); }
.g-blackjack .bj-lobby.is-anim .bj-lt { animation: bj-lt-in .7s cubic-bezier(.2,.9,.3,1.15) both; animation-delay: calc(var(--k) * 120ms + 90ms); }
.g-blackjack .bj-lobby.is-anim .bj-lobby-head { animation: bj-lt-head .55s ease-out both; }
@keyframes bj-lt-in { from { opacity: 0; transform: translateY(34px) scale(.96); } to { opacity: 1; transform: none; } }
@keyframes bj-lt-head { from { opacity: 0; transform: translateY(-12px); letter-spacing: .3em; } to { opacity: 1; transform: none; } }
.g-blackjack .bj-lt-head { display: flex; align-items: center; gap: 14px; }
.g-blackjack .bj-lt-head .bj-gem { width: 46px; height: 46px; filter: none; }
.g-blackjack .bj-lt-title { display: flex; flex-direction: column; line-height: 1; }
.g-blackjack .bj-lt-title small { font-size: 11px; letter-spacing: .4em; text-transform: uppercase; color: var(--text-dim); }
.g-blackjack .bj-lt-title b { font-family: var(--font-display); font-weight: 400; font-size: clamp(30px, 3vw, 44px); letter-spacing: .04em;
  background: linear-gradient(180deg, #fff 0%, var(--gem1) 45%, var(--gem2) 100%); -webkit-background-clip: text; background-clip: text; color: transparent;
  filter: drop-shadow(0 2px 0 rgba(0,0,0,.7)) drop-shadow(0 0 16px var(--gemglow)); }
.g-blackjack .bj-lt-here { margin-left: auto; display: none; padding: 3px 10px; border-radius: 99px; font-size: 10px; letter-spacing: .2em; text-transform: uppercase;
  color: #241904; background: linear-gradient(180deg, var(--gold-hi), var(--gold)); }
.g-blackjack .bj-lt.is-current .bj-lt-here { display: inline-block; }
.g-blackjack .bj-lt-rules { font-size: 12.5px; color: var(--text-dim); letter-spacing: .03em; }
/* la table en miniature : 5 places en arc, les avatars et les mises en direct */
.g-blackjack .bj-lt-felt { position: relative; height: clamp(150px, 24vh, 210px); margin: 4px 2px 10px; border-radius: 22px 22px 50% 50% / 22px 22px 72% 72%;
  background: radial-gradient(ellipse 46% 40% at 50% 36%, rgba(255,250,230,.08), transparent 72%), radial-gradient(ellipse 85% 85% at 50% 18%, var(--gem2), color-mix(in srgb, var(--gem2) 45%, var(--gem3)) 55%, var(--gem3) 100%);
  border: 2px solid rgba(222,184,92,.75); box-shadow: 0 0 0 6px #1a0c05, 0 0 0 7px rgba(222,184,92,.28), inset 0 24px 60px rgba(0,0,0,.45); }
.g-blackjack .bj-lt-arc { position: absolute; left: 14%; right: 14%; top: -62%; height: 126%; border-radius: 50%; border-bottom: 1px dashed rgba(247,221,143,.4); pointer-events: none; }
.g-blackjack .bj-lt-dealer { position: absolute; left: 50%; top: 9px; transform: translateX(-50%); display: flex; gap: 3px; padding: 4px 6px; border-radius: 7px; background: rgba(0,0,0,.35); border: 1px solid rgba(222,184,92,.35); }
.g-blackjack .bj-lt-dealer i { display: block; width: 15px; height: 21px; border-radius: 3px; background: repeating-linear-gradient(45deg, #1a2350 0 3px, #0a1027 3px 6px); border: 1px solid var(--gold); }
.g-blackjack .bj-lt-seat { position: absolute; transform: translate(-50%, -50%); display: flex; flex-direction: column; align-items: center; gap: 2px; width: 92px; text-align: center; }
.g-blackjack .bj-lt-seat.p0 { left: 90%; top: 36%; } .g-blackjack .bj-lt-seat.p1 { left: 70.5%; top: 62%; } .g-blackjack .bj-lt-seat.p2 { left: 50%; top: 73%; }
.g-blackjack .bj-lt-seat.p3 { left: 29.5%; top: 62%; } .g-blackjack .bj-lt-seat.p4 { left: 10%; top: 36%; }
.g-blackjack .bj-lt-av { display: grid; place-items: center; width: 40px; height: 40px; border-radius: 50%; font-size: 21px; line-height: 1;
  background: radial-gradient(circle at 35% 30%, rgba(255,255,255,.14), rgba(0,0,0,.55)); border: 2px solid var(--pc, var(--gold)); box-shadow: 0 4px 12px rgba(0,0,0,.5), 0 0 12px color-mix(in srgb, var(--pc, #deb85c) 45%, transparent); }
.g-blackjack .bj-lt-seat.is-empty .bj-lt-av { font-size: 18px; color: rgba(247,221,143,.5); border: 1.5px dashed rgba(247,221,143,.45); background: rgba(0,0,0,.18); box-shadow: none; }
.g-blackjack .bj-lt-seat.is-bot .bj-lt-av { filter: saturate(.6); }
.g-blackjack .bj-lt-seat.is-me .bj-lt-av { box-shadow: 0 0 0 3px var(--gold-hi), 0 0 18px rgba(247,221,143,.7); }
.g-blackjack .bj-lt-seat.is-off { opacity: .5; }
.g-blackjack .bj-lt-nm { max-width: 92px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 11.5px; font-weight: 600; color: var(--text); text-shadow: 0 1px 4px #000; }
.g-blackjack .bj-lt-bet { padding: 0 7px; border-radius: 99px; font-size: 11px; font-weight: 700; color: #241904; background: linear-gradient(180deg, var(--gold-hi), var(--gold)); box-shadow: 0 2px 6px rgba(0,0,0,.5); }
.g-blackjack .bj-lt-bh { font-size: 10px; color: var(--gold-hi); text-shadow: 0 1px 3px #000; }
.g-blackjack .bj-lt-status { display: flex; align-items: center; gap: 8px; font-size: 14px; font-weight: 600; color: var(--text); }
.g-blackjack .bj-lt-dot { width: 9px; height: 9px; border-radius: 50%; background: var(--text-faint); flex: none; }
.g-blackjack .bj-lt-status.is-open .bj-lt-dot { background: var(--win); box-shadow: 0 0 10px var(--win); animation: bj-lt-pulse 1.4s ease-in-out infinite; }
.g-blackjack .bj-lt-status.is-live .bj-lt-dot { background: var(--warn); box-shadow: 0 0 10px var(--warn); animation: bj-lt-pulse .9s ease-in-out infinite; }
.g-blackjack .bj-lt-status.is-free .bj-lt-dot { background: var(--gold); }
@keyframes bj-lt-pulse { 50% { transform: scale(1.5); opacity: .6; } }
.g-blackjack .bj-lt-meta { display: flex; flex-wrap: wrap; gap: 6px 14px; font-size: 12.5px; color: var(--text-dim); min-height: 18px; }
.g-blackjack .bj-lt-watch { letter-spacing: .08em; }
.g-blackjack .bj-lt-go { margin-top: 4px; width: 100%; }
@media (max-width: 900px) { .g-blackjack .bj-lobby-row { grid-template-columns: 1fr; } }
@media (max-height: 820px) { .g-blackjack .bj-lobby-head p { display: none; } .g-blackjack .bj-lt { gap: 7px; padding: 13px 18px 15px; } }

/* ---------- pari derrière : cercle sous la place, jetons et avatars des parieurs ---------- */
.g-blackjack .bj-online .bj-behind { position: absolute; left: 50%; top: calc(100% + 1px); transform: translateX(-50%); z-index: 4; display: none; align-items: center; gap: 7px; white-space: nowrap; }
.g-blackjack .bj-online .bj-behind.is-on { display: flex; }
.g-blackjack .bj-bh-ring { position: relative; flex: none; width: 36px; height: 36px; border-radius: 50%; display: grid; place-items: center;
  border: 1.5px dashed rgba(247,221,143,.45); background: rgba(0,0,0,.2); transition: transform .15s, box-shadow .2s, border-color .2s; }
.g-blackjack .bj-bh-ring .bj-chipstack .chip { --chip-size: 26px; }
.g-blackjack .bj-bh-ring .bj-stack { width: 26px; height: 26px; }
.g-blackjack .bj-bh-amt { position: absolute; top: calc(100% + 1px); left: 50%; transform: translateX(-50%); font-size: 10.5px; color: var(--gold-hi); white-space: nowrap; font-family: var(--font-num); text-shadow: 0 1px 3px #000; }
.g-blackjack .bj-behind.can .bj-bh-ring { cursor: pointer; border-color: color-mix(in srgb, var(--pc, #deb85c) 70%, #fff 15%); animation: bj-bh-invite 2.2s ease-in-out infinite; }
.g-blackjack .bj-behind.can .bj-bh-ring:hover { transform: scale(1.1); box-shadow: 0 0 16px rgba(247,221,143,.5); }
.g-blackjack .bj-behind.can:not(.has-chips) .bj-bh-ring::before { content: "+"; font-size: 20px; line-height: 1; color: rgba(247,221,143,.85); }
.g-blackjack .bj-behind.is-full .bj-bh-ring { animation: none; cursor: not-allowed; }
.g-blackjack .bj-behind.has-mine .bj-bh-ring { border-style: solid; border-color: var(--gold-hi); box-shadow: 0 0 12px rgba(247,221,143,.55); animation: none; }
.g-blackjack .bj-behind.is-win .bj-bh-ring { border-style: solid; border-color: var(--win); box-shadow: 0 0 16px rgba(62,224,143,.6); }
.g-blackjack .bj-behind.is-lose .bj-bh-ring { opacity: .45; }
@keyframes bj-bh-invite { 50% { box-shadow: 0 0 0 4px rgba(247,221,143,.12), 0 0 14px rgba(247,221,143,.3); } }
.g-blackjack .bj-bh-side { display: flex; flex-direction: column; align-items: flex-start; gap: 2px; }
.g-blackjack .bj-bh-l { font-size: 9.5px; letter-spacing: .14em; text-transform: uppercase; color: rgba(247,221,143,.78); text-shadow: 0 1px 3px #000; }
.g-blackjack .bj-behind.has-mine .bj-bh-l { color: var(--gold-hi); font-weight: 700; letter-spacing: .08em; }
.g-blackjack .bj-bh-who { display: flex; padding-left: 5px; min-height: 0; }
.g-blackjack .bj-bh-who:empty { display: none; }
.g-blackjack .bj-bh-av { display: grid; place-items: center; width: 21px; height: 21px; margin-left: -5px; border-radius: 50%; font-size: 12px; line-height: 1;
  background: #0d0b12; border: 1.5px solid var(--pc, var(--gold)); box-shadow: 0 2px 5px rgba(0,0,0,.55); }
.g-blackjack .bj-bh-av.is-me { border-color: var(--gold-hi); box-shadow: 0 0 0 1.5px var(--gold-hi), 0 0 10px rgba(247,221,143,.6); z-index: 1; }
.g-blackjack .bj-bh-av.is-win { box-shadow: 0 0 0 1.5px var(--win), 0 0 10px rgba(62,224,143,.7); }
.g-blackjack .bj-bh-av.is-lose { filter: grayscale(.8); opacity: .7; }
.g-blackjack .bj-bh-more { font-size: 10px; color: var(--text-dim); margin-left: 3px; align-self: center; }
@media (min-width: 1600px) and (min-height: 900px) {
  .g-blackjack .bj-bh-ring { width: 44px; height: 44px; }
  .g-blackjack .bj-bh-ring .bj-chipstack .chip { --chip-size: 32px; }
  .g-blackjack .bj-bh-ring .bj-stack { width: 32px; height: 32px; }
  .g-blackjack .bj-bh-av { width: 25px; height: 25px; font-size: 14px; }
  .g-blackjack .bj-plaque-name { font-size: 17px; }
}
html.perf-low .g-blackjack .bj-gem::after, html.perf-low .g-blackjack .bj-behind.can .bj-bh-ring, html.perf-low .g-blackjack .bj-lt-dot { animation: none; }

/* =====================================================================
   VUES (B3D) : le tapis est dessiné par VueBlackjack2D ou VueBlackjack3D dans .bj-vues (games/blackjack-2d.js, -3d.js) ;
   le contrôleur garde la barre, le salon et l'interface de chaque place.
   ===================================================================== */
.g-blackjack .bj-vues { position: absolute; inset: 0; }
.g-blackjack .bj-vues > .trois-cadre { overflow: visible; }
.g-blackjack .bj-vuebtn:empty { display: none; }
/* carte cachée glissée SOUS la visible, décalée de 30 % (G3 §1.3) ; elle en sort au retournement */
.g-blackjack .bj-dcards > .pcard.bj-hole, .g-blackjack .bj-dcards > .pcard.bj-sous { z-index: -1; }
.g-blackjack .bj-dcards > .pcard.bj-hole { margin-left: calc(var(--card-w) * -0.70); }
/* main crevée : ramassée sur-le-champ (les cartes partent à la défausse), le total rouge reste */
.g-blackjack .bj-hand.is-ramassee .bj-cards { visibility: hidden; }
/* règlement : la pile du gain posée à côté de la mise */
.g-blackjack .bj-chipstack > .bj-stack.bj-gain { position: absolute; left: 62%; top: 16%; }
/* La table 2D grandit avec l'écran (passe CARTES, 04/10) : au-delà du tapis pour lequel elle est dessinée, les places, le croupier,
   le sabot, la défausse et la banque sont agrandis d'un même facteur (--bj-z, posé par VueBlackjack2D._echelle : 1 à 2). À 2560 px
   de large, une carte passe de 54 à 101 px. Les positions, en %, ne bougent pas ; les textes en arc suivent. */
.g-blackjack .bj-felt > .bj-seat, .g-blackjack .bj-felt > .bj-dealer, .g-blackjack .bj-felt > .bj-shoe, .g-blackjack .bj-felt > .bj-discard, .g-blackjack .bj-felt > .bj-tray { zoom: var(--bj-z, 1); }
.g-blackjack .bj-felt > .bj-arc { width: min(56%, calc(800px * var(--bj-z, 1))); }

/* vue 3D : l'interface de chaque place reste en DOM, chaque élément tenu au-dessus de son point 3D (AncreDOM, .trois-ancre) ;
   la place n'est plus une colonne : une couche transparente, les cercles de mise transparents au-dessus de ceux du tapis */
.g-blackjack .bj-vue3d { position: absolute; inset: 0; pointer-events: none; z-index: 3; }
.g-blackjack .bj-vue3d .bj-seat { position: absolute; inset: 0; left: 0 !important; top: 0 !important; width: auto !important; height: auto; transform: none;
  display: block; pointer-events: none; }
.g-blackjack .bj-vue3d .bj-seat::before, .g-blackjack .bj-vue3d .bj-seat::after { display: none !important; }
.g-blackjack .bj-vue3d .bj-bets { display: none; }
.g-blackjack .bj-vue3d .bj-hands { position: absolute; inset: 0; height: auto !important; min-height: 0; display: block; pointer-events: none; }
.g-blackjack .bj-vue3d .bj-hand { gap: 2px; padding: 2px 5px; pointer-events: none; }
.g-blackjack .bj-vue3d .bj-hand .bj-cards { display: none; }
.g-blackjack .bj-vue3d .bj-hand.is-active { background: rgba(5,6,11,.35); }
.g-blackjack .bj-vue3d .bj-hand.is-ramassee .bj-total { border-style: dashed; }   /* ramassée : le cadre le dit, le texte reste net */
.g-blackjack .bj-vue3d .bj-total { box-shadow: 0 2px 8px rgba(0,0,0,.55); }
.g-blackjack .bj-vue3d .trois-ancre { pointer-events: auto; }
.g-blackjack .bj-vue3d .bj-hand.trois-ancre { pointer-events: none; }
.g-blackjack .bj-vue3d .bj-spot { background: transparent; border-color: transparent; box-shadow: none; width: 34px; height: 34px; }
.g-blackjack .bj-vue3d .bj-spot.bj-main { width: 54px; height: 54px; border-width: 2px; }
.g-blackjack .bj-vue3d .bj-spot .bj-spot-l, .g-blackjack .bj-vue3d .bj-spot .bj-chipstack { display: none; }
.g-blackjack .bj-vue3d .bj-spot .bj-amt { bottom: -17px; text-shadow: 0 1px 3px #000, 0 0 8px #000; }
.g-blackjack .bj-vue3d .bj-spot.is-open { border-color: rgba(247,221,143,.28); border-style: dashed; }
.g-blackjack .bj-vue3d .bj-spot.is-win { border-color: var(--win); border-style: solid; }
.g-blackjack .bj-vue3d .bj-spot.is-lose { opacity: .55; }
.g-blackjack .bj-vue3d .bj-spot.is-lose .bj-amt { visibility: hidden; }  /* ses jetons sont partis à la banque */
@media (hover: hover) and (pointer: fine) {
  .g-blackjack .bj-vue3d .bj-spot.is-open:hover { border-color: var(--gold-hi); border-style: solid; box-shadow: 0 0 14px rgba(247,221,143,.45); }
}
.g-blackjack .bj-vue3d .bj-seat.is-empty .bj-spot { visibility: hidden; }
.g-blackjack .bj-online .bj-vue3d .bj-who { margin-top: 0 !important; min-height: 0; }
.g-blackjack .bj-online .bj-vue3d .bj-behind { left: 0; top: 0; }
.g-blackjack .bj-vue3d .bj-3d-centre { display: grid; place-items: center; z-index: 8; pointer-events: none; }
.g-blackjack .bj-vue3d .bj-3d-centre.trois-ancre { pointer-events: none; }
.g-blackjack .bj-vue3d .bj-3d-dtotal:empty { visibility: hidden; }
.g-blackjack .bj-vue3d .bj-3d-lbl { font-size: 11px; color: rgba(244,236,216,.72); text-shadow: 0 1px 3px #000; white-space: nowrap; pointer-events: none; }
.g-blackjack .bj-vue3d .bj-banner-t { font-size: clamp(34px, 4vw, 64px); }
/* un élément tenu par AncreDOM est placé par sa transformation, depuis le coin de la couche : jamais dans le flux (le CSS d'avant met
   les mains, les cercles et les noms en position relative) */
.g-blackjack .bj-vue3d .trois-ancre { position: absolute !important; left: 0 !important; top: 0 !important; margin: 0 !important; }
.g-blackjack .bj-vue3d .bj-emptyseat { margin: 0; width: 58px; height: 58px; font-size: 9px; }
/* les pavés des mains (total, mise, badge) et le total du croupier : posés à l'écran par la vue (blackjack-3d.js, _poserPaves), jamais
   sur une carte ; chaque texte lisible sur son fond (≥ 4,5:1, le feutre clair compris) ; compacts dans une scène étroite (téléphone) */
.g-blackjack .bj-vue3d .bj-total:not(.is-bj) { background: rgba(5,6,11,.88); }   /* le rouge d'une main crevée tient 5:1 même sur un filet d'or */
.g-blackjack .bj-vue3d .bj-hbet { padding: 0 6px; border-radius: 99px; background: rgba(5,6,11,.72); color: var(--text); }
.g-blackjack .bj-vue3d .bj-badge.is-lose, .g-blackjack .bj-vue3d .bj-badge.is-bust { background: var(--red); }
.g-blackjack .bj-online .bj-vue3d .bj-seat.is-lose .bj-hands { opacity: 1; }   /* en ligne, la place perdante n'est plus délavée : son badge le dit */
.g-blackjack .bj-vue3d .bj-hand.is-active { box-shadow: 0 0 0 1.5px var(--gold-hi); }
.g-blackjack .bj-online .bj-vue3d .bj-hand.is-active { box-shadow: none; }
.g-blackjack .bj-vue3d .bj-ring::after { box-shadow: 0 0 6px color-mix(in srgb, var(--ring-c) 55%, transparent); }
.g-blackjack .bj-vue3d.est-etroite .bj-hand { gap: 1px; padding: 1px 3px; }
.g-blackjack .bj-vue3d.est-etroite .bj-total { min-width: 26px; padding: 0 6px; font-size: 12px; line-height: 16px; }
.g-blackjack .bj-vue3d.est-etroite .bj-hbet { padding: 0 5px; font-size: 9.5px; }
.g-blackjack .bj-vue3d.est-etroite .bj-badge { padding: 0 6px; font-size: 11px; }
.g-blackjack .bj-vue3d.est-etroite .bj-hand:has(.bj-badge:not(:empty)) .bj-hbet { display: none; }   /* au résultat, le badge dit la somme */
.g-blackjack .bj-vue3d.est-etroite .bj-ring { inset: -5px; }
.g-blackjack .bj-vue3d.est-etroite .bj-ring-n { right: -10px; top: -10px; width: 21px; height: 21px; font-size: 10.5px; }
/* BJ3D (05/10) — les pavés de la 3D suivent la scène : --bj3d vaut 1 jusqu'à 1 500 px de large, 1,28 à 1 920 px, 1,45 à 2 560 px
   (posé par la vue, games/blackjack-3d.js). À 2 560 px : total 22 px (15 avant), gain et perte 19 px (13), mise, libellés et montant
   16 px (10,5 et 11) ; ces trois-là ne descendent jamais sous 12 px (max()), et la borne du titre de l'annonce suit la scène (58 px à
   2 560 px). Le gain et la perte se lisent en Chakra Petch : en Limelight de 13 px, « Gagné +100 » se lisait « Cagné ·100 ».
   Le lint d'échelle ne voit pas ce que le JS pose : --bj3d y est DÉCLARÉE (echelle-css.reference.json, variablesPosees) et vérifiée
   contre la formule de la vue ; changer cette formule, c'est changer cette déclaration. */
.g-blackjack .bj-vue3d .bj-hand { gap: calc(2px * var(--bj3d, 1)); padding: calc(2px * var(--bj3d, 1)) calc(5px * var(--bj3d, 1)); }
.g-blackjack .bj-vue3d .bj-total { min-width: calc(36px * var(--bj3d, 1)); padding: 1px calc(9px * var(--bj3d, 1)); font-size: calc(15px * var(--bj3d, 1)); font-weight: 600; line-height: 1.35; }
.g-blackjack .bj-vue3d .bj-hbet { padding: 1px calc(7px * var(--bj3d, 1)); font-size: max(12px, calc(11.1px * var(--bj3d, 1)));
  line-height: 1.4; }
.g-blackjack .bj-vue3d .bj-badge { padding: 1px calc(9px * var(--bj3d, 1)); border-radius: calc(6px * var(--bj3d, 1)); font-family: var(--font-num); font-weight: 600; font-size: calc(13px * var(--bj3d, 1));
  line-height: 1.4; letter-spacing: .01em; font-variant-numeric: tabular-nums; }
.g-blackjack .bj-vue3d .bj-3d-lbl { font-size: max(12px, calc(11.1px * var(--bj3d, 1))); }
.g-blackjack .bj-vue3d .bj-spot .bj-amt { font-size: max(12px, calc(11.1px * var(--bj3d, 1))); bottom: calc(-17px * var(--bj3d, 1)); }
/* le compte à rebours du tour : il se collait au total (« 16 » contre « 20 » : deux totaux). Il se pose à droite du pavé, détaché, dans
   la couleur de l'anneau, avec son unité : « 16 s » */
.g-blackjack .bj-vue3d:not(.est-etroite) .bj-ring-n { right: auto; left: calc(100% + 10px * var(--bj3d, 1)); top: 50%; transform: translateY(-50%); width: auto; height: auto;
  display: inline-flex; align-items: baseline; gap: .22em; padding: 2px calc(9px * var(--bj3d, 1)); border-radius: 99px; font-size: calc(12.5px * var(--bj3d, 1)); line-height: 1.3; white-space: nowrap; }
.g-blackjack .bj-vue3d:not(.est-etroite) .bj-ring-n::after { content: "s"; font-family: var(--font-ui); font-size: .78em; font-weight: 600; opacity: .85; }
.g-blackjack .bj-vue3d .bj-ring.is-bot .bj-ring-n::after { content: none; }
/* les annonces (« À toi ! », « Blackjack ! », « Le croupier saute ! ») : sur une plaque de laque sombre à double filet d'or, elles ne
   se mêlent plus aux inscriptions du tapis ; le croupier qui saute s'annonce en ivoire (le vert se perdait sur le feutre vert) */
.g-blackjack .bj-vue3d .bj-banner { padding: calc(12px * var(--bj3d, 1)) calc(34px * var(--bj3d, 1)) calc(11px * var(--bj3d, 1)); border-radius: 14px;
  background: linear-gradient(180deg, rgba(13,16,30,.94), rgba(5,6,11,.92)); border: 1px solid rgba(222,184,92,.72);
  box-shadow: 0 14px 44px rgba(0,0,0,.6), inset 0 0 0 4px rgba(5,6,11,.9), inset 0 0 0 5px rgba(222,184,92,.34); }
.g-blackjack .bj-vue3d .bj-banner-t { font-size: clamp(30px, 2.2vw + 6px, calc(40px * var(--bj3d, 1)));
  filter: drop-shadow(0 3px 0 rgba(50,32,4,.85)); }
.g-blackjack .bj-vue3d .bj-banner-s { margin-top: calc(5px * var(--bj3d, 1)); font-size: calc(15px * var(--bj3d, 1)); font-weight: 600; letter-spacing: .04em; text-shadow: 0 1px 6px #000; }
.g-blackjack .bj-vue3d .bj-banner.is-dealer .bj-banner-t { filter: drop-shadow(0 3px 0 rgba(40,4,8,.85)); }
.g-blackjack .bj-vue3d .bj-banner.is-bust .bj-banner-t { background: linear-gradient(180deg, #fffdf4 0%, #f4ecd8 42%, #b9a676 62%, #f4ecd8 82%, #fffaf0 100%); -webkit-background-clip: text; background-clip: text;
  filter: drop-shadow(0 3px 0 rgba(30,24,10,.85)); }
.g-blackjack .bj-vue3d .bj-banner.is-bust .bj-banner-s { color: var(--gold-hi); }
.g-blackjack .bj-vue3d.est-etroite .bj-banner { padding: 8px 14px 7px; border-radius: 10px; }
.g-blackjack .bj-vue3d.est-etroite .bj-banner-t { font-size: 24px; }
/* le plan du jeu pousse hors de la scène ce qui ne sert qu'aux mises (« parier derrière », la plaque de ma place) : rien ne déborde
   sur les barres du casino */
.g-blackjack .bj-vue3d { overflow: hidden; overflow: clip; }

/* ---------- sprint 2 (dev/audit/decisions/TABLES.md §1 et §2) : sabot continu, grilles des paris annexes, aide de la table ---------- */
/* plaque des paris annexes (coin bas-gauche, en miroir de la plaque de table) : la grille de SA table et son retour, sur laiton */
.g-blackjack .bj-gains { position: absolute; left: 1.4%; bottom: 8px; z-index: 7; display: flex; flex-direction: column;
  align-items: stretch; gap: 1px; max-width: 300px; padding: 8px 13px 9px; border-radius: 12px; cursor: pointer; font: inherit;
  color: var(--text); text-align: left; background: linear-gradient(180deg, #2b1d0c, #120a04); border: 1px solid rgba(222,184,92,.55);
  box-shadow: inset 0 1px 0 rgba(255,236,170,.22), inset 0 -8px 16px rgba(0,0,0,.35), 0 10px 22px rgba(0,0,0,.5);
  transition: border-color .2s, box-shadow .2s, transform .2s; }
.g-blackjack .bj-gains:hover, .g-blackjack .bj-gains:focus-visible { border-color: var(--gold-hi); transform: translateY(-2px);
  box-shadow: inset 0 1px 0 rgba(255,236,170,.3), 0 12px 26px rgba(0,0,0,.55), 0 0 18px rgba(222,184,92,.28); }
.g-blackjack .bj-gains-t { font-family: var(--font-display); font-size: calc(12px * var(--echelle-ecran, 1) / var(--echelle, 1));
  letter-spacing: .16em; text-transform: uppercase;
  color: var(--gold-hi); padding-bottom: 4px; margin-bottom: 3px; border-bottom: 1px solid rgba(222,184,92,.28); }
.g-blackjack .bj-gains-t i { font-style: normal; font-family: var(--font-ui); letter-spacing: .04em; text-transform: none;
  color: var(--gold); }
.g-blackjack .bj-gains-n { display: flex; align-items: baseline; justify-content: space-between; gap: 14px; margin-top: 3px; }
.g-blackjack .bj-gains-n b { font-family: var(--font-display); font-weight: 400;
  font-size: calc(13px * var(--echelle-ecran, 1) / var(--echelle, 1)); letter-spacing: .08em;
  color: var(--gold-hi); }
.g-blackjack .bj-gains-n em { font-style: normal; font-size: calc(12px * var(--echelle-ecran, 1) / var(--echelle, 1)); color: var(--gold);
  letter-spacing: .02em; }
.g-blackjack .bj-gains-l { font-size: calc(12px * var(--echelle-ecran, 1) / var(--echelle, 1)); line-height: 1.35;
  color: rgba(244,236,216,.82); white-space: nowrap; }
.g-blackjack .bj-gains-f { font-size: calc(12px * var(--echelle-ecran, 1) / var(--echelle, 1)); color: var(--text-dim); font-style: italic;
  }
.g-blackjack .bj-gains.is-ferme { opacity: .78; }
@media (min-width: 1600px) and (min-height: 900px) {
  .g-blackjack .bj-gains { max-width: calc(360px * var(--echelle-ecran, 1) / var(--echelle, 1)); padding: 10px 16px 11px; }
  .g-blackjack .bj-gains-t { font-size: calc(13.5px * var(--echelle-ecran, 1) / var(--echelle, 1)); }
  .g-blackjack .bj-gains-n b { font-size: calc(15px * var(--echelle-ecran, 1) / var(--echelle, 1)); }
  .g-blackjack .bj-gains-n em, .g-blackjack .bj-gains-l { font-size: calc(12.5px * var(--echelle-ecran, 1) / var(--echelle, 1)); }
}
/* petit écran : la plaque se retire, l'infobulle des cercles et l'aide restent */
@media (max-width: 900px), (max-height: 560px) { .g-blackjack .bj-gains { display: none; } }
/* en ligne, le coin bas-gauche est une colonne : la plaque AU-DESSUS de la liste « Autour de la table » (elle ne la couvre jamais) */
.g-blackjack .bj-coin { position: absolute; left: 1.4%; bottom: 8px; z-index: 7; display: flex; flex-direction: column;
  align-items: flex-start; gap: 8px; max-width: 32%; pointer-events: none; }
.g-blackjack .bj-coin > * { pointer-events: auto; }
.g-blackjack .bj-coin > .bj-gains, .g-blackjack .bj-coin > .bj-watch { position: static; }
.g-blackjack .bj-coin > .bj-watch { max-width: none; }
.g-blackjack .bj-coin > .bj-watch:empty { display: none; }
/* la ligne des règles ouvre l'aide */
.g-blackjack .bj-rulespill.is-aide { cursor: pointer; transition: border-color .15s, color .15s; }
.g-blackjack .bj-rulespill.is-aide:hover, .g-blackjack .bj-rulespill.is-aide:focus-visible { border-color: var(--gold-hi);
  color: var(--gold-hi); outline: none; }
/* sabot continu : toujours plein, sans carte de coupe ; la jauge ondule doucement (le mélangeur tourne) */
.g-blackjack .bj-shoe.is-continu .bj-cut { display: none; }
.g-blackjack .bj-shoe.is-continu .bj-gauge-fill { background: linear-gradient(90deg, var(--gold-lo), var(--gold-hi), var(--gold-lo));
  background-size: 200% 100%; animation: bj-continu 3.2s linear infinite; }
@keyframes bj-continu { from { background-position: 0 0; } to { background-position: -200% 0; } }
.g-blackjack .bj-shoe.is-continu .bj-small, .g-blackjack .bj-3d-lbl.is-continu { display: flex; flex-direction: column;
  align-items: center; gap: 1px; text-align: center; line-height: 1.2; }
/* tailles relatives : l'étiquette suit sa vue (11 px en 2D, l'échelle --bj3d en 3D) */
/* FINITIONS (S4.8b) : « N jeux, remélangés à chaque donne » ne descend plus sous 12 px (9,9 px en 2D, 10,8 px en 3D au téléphone) ; « Sabot
   continu », son titre, reste au-dessus d'elle (13 px au moins) */
.g-blackjack .bj-shoe-c { font-family: var(--font-display); font-weight: 400; font-size: max(13px, 1.05em); letter-spacing: .1em;
  color: var(--gold-hi); }
.g-blackjack .bj-shoe-s { font-size: max(12px, .9em); color: var(--text-dim); }
.g-blackjack .bj-shoe .bj-shoe-s { max-width: 130px; white-space: normal; }
/* la défausse retourne dans le mélangeur à la fin de chaque manche */
.g-blackjack .bj-discard.is-melangee .bj-discard-stack { animation: bj-melangeur .52s ease-in-out both; }
@keyframes bj-melangeur {
  0% { opacity: 1; }
  55% { opacity: 0; transform: rotate(-8deg) translateY(-6px) scale(.92); }
  100% { opacity: 1; transform: rotate(-8deg); }
}
@media (prefers-reduced-motion: reduce) {
  .g-blackjack .bj-shoe.is-continu .bj-gauge-fill, .g-blackjack .bj-discard.is-melangee .bj-discard-stack { animation: none; }
}
/* … et de même en qualité allégée (html.perf-low) et en « Animations réduites » du casino (html.reduce-motion) */
html.perf-low .g-blackjack .bj-shoe.is-continu .bj-gauge-fill, html.reduce-motion .g-blackjack .bj-shoe.is-continu .bj-gauge-fill,
html.perf-low .g-blackjack .bj-discard.is-melangee .bj-discard-stack,
html.reduce-motion .g-blackjack .bj-discard.is-melangee .bj-discard-stack { animation: none; }
/* paris annexes fermés à 1 jeu (mode local) : grisés, barrés, ils refusent la mise */
.g-blackjack .bj-spot.is-ferme { opacity: .42; border-style: dashed; cursor: not-allowed; }
.g-blackjack .bj-spot.is-ferme::after { content: ""; position: absolute; left: 16%; right: 16%; top: 50%; height: 1.5px;
  background: rgba(247,221,143,.6); transform: rotate(-38deg); pointer-events: none; }
.g-blackjack .bj-vue3d .bj-spot.is-ferme { border-color: rgba(247,221,143,.4); border-style: dashed; background: rgba(5,6,11,.42);
  opacity: .8; }
.g-blackjack .bj-rule.is-ferme .bj-rule-l { opacity: .6; }
.g-blackjack .bj-rule-f { font-size: calc(12px * var(--echelle-ecran, 1) / var(--echelle, 1)); font-style: italic; color: var(--text-dim);
  padding: 6px 2px; }
/* l'aide de la table (fenêtre du casino, hors de .g-blackjack) */
.modal .bj-aide { display: flex; flex-direction: column; gap: 14px; }
.modal .bj-aide section { display: flex; flex-direction: column; gap: 6px; }
.modal .bj-aide h3 { margin: 0; font-family: var(--font-display); font-weight: 400; font-size: 16px; letter-spacing: .08em;
  color: var(--gold-hi); }
.modal .bj-aide p { margin: 0; line-height: 1.5; text-wrap: pretty; }
.modal .bj-aide .bj-aide-g { font-family: var(--font-num); font-size: calc(13px * var(--echelle-ecran, 1) / var(--echelle, 1));
  color: var(--text); padding: 6px 10px; border-radius: 8px;
  background: rgba(222,184,92,.07); border: 1px solid rgba(222,184,92,.2); }
.modal .bj-aide-av { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
  gap: 6px; }
.modal .bj-aide-av li { display: flex; flex-wrap: wrap; align-items: baseline; gap: 8px; padding: 5px 9px; border-radius: 8px;
  border: 1px solid rgba(255,255,255,.07); }
.modal .bj-aide-av li b { font-family: var(--font-num); font-weight: 600; color: var(--gold-hi); margin-left: auto; }
.modal .bj-aide-av li i { flex-basis: 100%; font-style: normal; font-size: calc(12px * var(--echelle-ecran, 1) / var(--echelle, 1));
  letter-spacing: .06em; text-transform: uppercase;
  color: var(--gold); }
.modal .bj-aide-av li.is-ici { border-color: rgba(222,184,92,.6); background: rgba(222,184,92,.09); }

/* ---------- FINITIONS (S4.8b) : la table 2D au téléphone, vue à la recette du 12/10 ----------
   PORTRAIT (le feutre étroit et haut) : règles à part ; les positions des places ne bougent pas (b3d-geometrie.test.js les fige).
   - la réglette des potes flotte sous la barre du haut (js/social.js : body.so-dock-flotte, --so-dock-h) et couvrait « Croupier » :
     sa voie (--bj-voie, la réglette moins le haut du feutre, plus 6 px) est laissée libre ; le croupier se pose dessous, le sabot sous
     « Croupier » (sa boîte le mordait à 360 px), et le sélecteur 2D | 3D, poussé sous la réglette, reste à côté de la boîte du sabot ;
   - l'inscription du tapis, à 16 % de la hauteur, passait sous « N jeux, remélangés à chaque donne » : elle se pose sous le sabot et son
     étiquette (117 px sous le haut du sabot), au-dessus des cartes des places ;
   - « S'asseoir ici » des places du bord dépassait du feutre, que sa courbe basse (58 % de la hauteur) rétrécit à leur hauteur : la
     courbe ne prend plus que 42 % en portrait (le rebord de cuir la suit), et le libellé passe sur deux lignes, un peu moins espacé. */
@media (orientation: portrait) and (max-width: 700px) {
  .g-blackjack .bj-felt { --bj-voie: 0px; border-radius: 26px 26px 50% 50% / 26px 26px 42% 42%; }
  body.so-dock-flotte .g-blackjack .bj-felt { --bj-voie: calc(var(--so-dock-h, 42px) + 1px); }
  .g-blackjack .bj-online .bj-rail { border-radius: 40px 40px 50% 50% / 40px 40px 44% 44%; }
  .g-blackjack .bj-felt > .bj-dealer { top: max(2.5%, var(--bj-voie)); }
  .g-blackjack .bj-felt > .bj-shoe { top: max(5%, calc(var(--bj-voie) + 20px)); }
  .g-blackjack .bj-felt > .bj-arc { top: calc(max(5%, calc(var(--bj-voie) + 20px)) + 117px); }
  .g-blackjack .bj-felt .bj-sit-t { width: min-content; line-height: 1.25; letter-spacing: .08em; }
}
/* PAYSAGE BAS (téléphone couché) : le sélecteur 2D | 3D, poussé sous la réglette flottante, tombait sur « Sabot continu » : compact, en
   colonne, le long du bord droit, comme sur une scène étroite (css/trois.css, @container trois-coin (max-width: 800px)) */
@media (orientation: landscape) and (max-height: 520px) {
  .g-blackjack .trois-coin-boite { right: 4px; }
  .g-blackjack .trois-cadre .trois-coin .trois-vue { flex-direction: column; border-radius: 16px; }
  .g-blackjack .trois-vue-choix { min-width: 30px; height: 30px; padding: 0 4px; }
}

/* ---------- N1a (nuit du 13/10) : la table en ligne JOUÉE AU DOIGT, au téléphone (revue du 13/10, défauts 1 à 5, 14 à 17 ; S4.9) ----------
   Bornes : PORTRAIT jusqu'à 480 px de large, COUCHÉ jusqu'à 560 px de haut ; le PC ne lit aucune de ces règles (s5-tel-blackjack.mjs,
   section A : styles calculés et rectangles égaux au code d'avant). Les positions 2D du PC (b3d-geometrie) ne bougent pas : celles du
   téléphone s'écrivent « .bj-felt > .bj-seat ». On réarrange, on ne redessine pas : mêmes polices, or, feutre, cercles et plaques.
   - la barre sur une colonne (message, commandes, râtelier, règles) : ce qui passait sous l'écran (« Prêt », « Effacer », « Rejouer »,
     « ×2 », le message) y tient ; le solde est dans la barre du haut, le fil et l'historique se retirent ; « Entrée », « E »… (le clavier)
     aussi ; en paysage, la barre devient une colonne à droite et le tapis garde sa forme ;
   - une place ne prend plus le doigt de sa voisine : sa boîte laisse passer le toucher, seules ses commandes le prennent ; les places du
     téléphone sont étroites (64 px en portrait), leurs cercles en triangle (MISE dessus, PP et 21+3 dessous), libellés à 12 px ;
   - sur MA place, l'avatar (« vous » dit le reste) et « Se lever » côte à côte, dans la place et dans le feutre ;
   - « parier derrière » : le cercle à côté de l'avatar du joueur suivi, sans libellé (son prénom passe dessous : N8) ;
   - « Autour de la table » et la plaque de table dans une bande sous le feutre (plus sur son rebord) ; la banque dans le feutre ;
   - en paysage, la réglette flottante passe au-dessus de la colonne de droite, plus sur la boîte du sabot. */
@media (orientation: portrait) and (max-width: 480px), (orientation: landscape) and (max-height: 560px) {
  .g-blackjack .bj-online .bj-bar { display: flex; flex-direction: column; align-items: stretch; justify-content: flex-start; gap: 6px; padding: 7px 8px 8px; overflow: hidden; }
  .g-blackjack .bj-online .bj-bar-c { order: 1; gap: 6px; min-width: 0; }
  .g-blackjack .bj-online .bj-bar-l { order: 2; display: flex; justify-content: center; min-width: 0; }
  .g-blackjack .bj-online .bj-info { order: 3; flex-direction: row; justify-content: center; align-items: center; gap: 6px; max-height: none; overflow: visible; }
  .g-blackjack .bj-online .bj-mine, .g-blackjack .bj-online .bj-feed, .g-blackjack .bj-online .bj-hist { display: none; }
  .g-blackjack .bj-online .bj-inforow { display: contents; }
  .g-blackjack .bj-online .bj-msg { font-size: 15px; line-height: 1.2; min-height: 36px; max-width: none; display: flex; align-items: center; justify-content: center; text-wrap: pretty; }
  .g-blackjack .bj-online .bj-btns { gap: 6px; }
  .g-blackjack .bj-online .bj-btns .btn { height: 38px; padding: 0 13px; }
  .g-blackjack .bj-online .bj-btns .btn-gold { letter-spacing: .07em; }
  .g-blackjack .bj-online .bj-btns .kbd { display: none; }
  .g-blackjack .bj-online .bj-act { min-width: 0; }
  .g-blackjack .bj-online .bj-bar .chip-rack { gap: 4px; justify-content: center; }
  .g-blackjack .bj-online .bj-bar .chip-rack .chip { --chip-size: 34px; }
  .g-blackjack .bj-online .bj-rulespill { max-width: 100%; white-space: normal; text-align: center; line-height: 1.45; font-size: 12px; letter-spacing: .03em; padding: 2px 10px; }
  /* la salle : le tapis, puis la bande de « Autour de la table » et de la plaque, hors du feutre */
  .g-blackjack .bj-online .bj-rail { bottom: 40px; }
  .g-blackjack .bj-coin { left: 2%; bottom: 5px; max-width: 46%; gap: 4px; }
  .g-blackjack .bj-watch { gap: 4px; flex-wrap: wrap; }
  .g-blackjack .bj-watch-l { font-size: 12px; line-height: 1.15; letter-spacing: .08em; width: min-content; min-width: 76px; }
  .g-blackjack .bj-watch-p { font-size: 14px; padding: 2px; }
  .g-blackjack .bj-watch-p small { display: none; }
  .g-blackjack .bj-plaque { right: 2%; bottom: 3px; gap: 7px; padding: 4px 9px 4px 8px; }
  .g-blackjack .bj-plaque-gem { width: 20px; height: 20px; }
  .g-blackjack .bj-plaque-name { font-size: 14px; }
  .g-blackjack .bj-plaque-sub { font-size: 12px; }
  /* croupier, défausse, banque : compacts ; la banque dans le feutre (le sabot : en portrait celui de FINITIONS, réglé à côté du
     sélecteur 2D | 3D ; compact en paysage, plus bas) */
  .g-blackjack .bj-online .bj-felt > .bj-dealer { gap: 2px; }
  .g-blackjack .bj-discard-stack { --card-w: 32px; width: 32px; height: 44.8px; }
  .g-blackjack .bj-online .bj-felt > .bj-tray { transform: scale(.72); transform-origin: left top; }
  /* compte à rebours et annonces : petits, posés là où le croupier tirera ses cartes (vide pendant les mises) */
  .g-blackjack .bj-online .bj-cd { width: 60px; height: 60px; }
  .g-blackjack .bj-online .bj-cd-n { font-size: 22px; }
  .g-blackjack .bj-online .bj-cd-l { font-size: 12px; top: calc(100% + 4px); }
  .g-blackjack .bj-online .bj-banner-t { font-size: 28px; }
  .g-blackjack .bj-online .bj-banner-s { font-size: 14px; }
  /* les places : la boîte laisse passer le doigt, ses commandes le prennent */
  .g-blackjack .bj-online .bj-felt > .bj-seat { gap: 3px; --card-w: 28px; pointer-events: none; }
  .g-blackjack .bj-online .bj-felt > .bj-seat :is(.bj-spot, .bj-sitbtn, .bj-standup, .bj-claim, .bj-bh-ring) { pointer-events: auto; }
  .g-blackjack .bj-online .bj-felt > .bj-seat .bj-hands { height: 60px; gap: 3px; }
  .g-blackjack .bj-online .bj-felt > .bj-seat .bj-hands.is-split { --card-w: 21px; }
  .g-blackjack .bj-online .bj-felt > .bj-seat .bj-hand { gap: 2px; padding: 2px 2px 1px; }
  .g-blackjack .bj-online .bj-felt > .bj-seat .bj-total { min-width: 28px; padding: 0 6px; font-size: 12px; line-height: 16px; }
  .g-blackjack .bj-online .bj-felt > .bj-seat .bj-hbet { display: none; }
  .g-blackjack .bj-online .bj-felt > .bj-seat .bj-hand:has(.bj-badge:not(:empty)) .bj-total { display: none; }
  .g-blackjack .bj-online .bj-felt > .bj-seat .bj-badge { font-size: 12px; padding: 0 5px; line-height: 16px; }
  .g-blackjack .bj-online .bj-felt > .bj-seat .bj-ring { inset: -5px; }
  .g-blackjack .bj-online .bj-felt > .bj-seat .bj-ring-n { right: -10px; top: -10px; width: 22px; height: 22px; font-size: 12px; }
  .g-blackjack .bj-online .bj-felt > .bj-seat:is(.s0, .s1) .bj-ring-n { right: auto; left: -10px; }   /* loin du sabot, à droite */
  .g-blackjack .bj-online .bj-felt > .bj-seat .bj-spot { width: 30px; height: 30px; }
  .g-blackjack .bj-online .bj-felt > .bj-seat .bj-spot-l { font-size: 12px; letter-spacing: .02em; }
  .g-blackjack .bj-online .bj-felt > .bj-seat .bj-chipstack .chip { --chip-size: 24px; }
  .g-blackjack .bj-online .bj-felt > .bj-seat .bj-stack { width: 24px; height: 24px; }
  .g-blackjack .bj-online .bj-felt > .bj-seat .bj-main .bj-chipstack .chip { --chip-size: 32px; }
  .g-blackjack .bj-online .bj-felt > .bj-seat .bj-main .bj-stack { width: 32px; height: 32px; }
  .g-blackjack .bj-online .bj-felt > .bj-seat .bj-amt { bottom: -3px; padding: 0 4px; border-radius: 99px; font-size: 12px; line-height: 14px; background: rgba(5,6,11,.82); z-index: 1; }
  .g-blackjack .bj-online .bj-felt > .bj-seat .bj-who { margin-top: 1px; min-height: 0; gap: 1px; }
  .g-blackjack .bj-online .bj-felt > .bj-seat .ptag { gap: 4px; padding: 2px 7px 2px 2px; }
  .g-blackjack .bj-online .bj-felt > .bj-seat .ptag-emoji { width: 20px; height: 20px; font-size: 12px; }
  .g-blackjack .bj-online .bj-felt > .bj-seat .ptag-name { font-size: 12px; overflow: hidden; text-overflow: ellipsis; min-width: 0; }
  .g-blackjack .bj-online .bj-felt > .bj-seat .ptag-bal { display: none; }
  .g-blackjack .bj-online .bj-felt > .bj-seat .bj-tagline { font-size: 12px; line-height: 1.15; }
  /* MA place : l'avatar et « Se lever » côte à côte (« vous » dessous) */
  .g-blackjack .bj-online .bj-felt > .bj-seat.is-mine .bj-who { display: grid; grid-template-columns: auto auto; justify-content: center; align-items: center; column-gap: 5px; row-gap: 1px; }
  .g-blackjack .bj-online .bj-felt > .bj-seat.is-mine .bj-who > .ptag { grid-row: 1; grid-column: 1; padding-right: 2px; }
  .g-blackjack .bj-online .bj-felt > .bj-seat.is-mine .ptag-name { display: none; }
  .g-blackjack .bj-online .bj-felt > .bj-seat.is-mine .bj-tagline { grid-row: 2; grid-column: 1 / -1; }
  .g-blackjack .bj-online .bj-felt > .bj-seat .bj-standup { position: static; grid-row: 1; grid-column: 2; width: 30px; height: 30px; font-size: 17px; opacity: .9; }
  .g-blackjack .bj-online .bj-felt > .bj-seat .bj-streak { left: -8px; right: auto; top: -14px; font-size: 12px; pointer-events: none; }
  .g-blackjack .bj-online .bj-felt > .bj-seat .bj-sitbtn { gap: 3px; margin-top: 0; padding: 2px 0; }
  .g-blackjack .bj-online .bj-felt > .bj-seat .bj-sit-plus { width: 44px; height: 44px; font-size: 24px; }
  .g-blackjack .bj-felt .bj-sit-t { font-size: 12px; letter-spacing: .03em; }
  .g-blackjack .bj-online .bj-felt > .bj-seat .bj-claim { font-size: 12px; padding: 3px 8px; }
  .g-blackjack .bj-online .bj-felt > .bj-seat .bj-bottag { padding: 2px 7px 2px 2px; gap: 4px; }
  .g-blackjack .bj-online .bj-felt > .bj-seat .bj-botname b { font-size: 12px; overflow: hidden; text-overflow: ellipsis; }
  .g-blackjack .bj-online .bj-felt > .bj-seat .bj-botname small { display: none; }
  /* parier derrière : le cercle à côté de l'avatar du joueur suivi, sans libellé (son prénom ne se retire plus : il passe sous
     l'avatar, bloc N8 plus bas) */
  .g-blackjack .bj-online .bj-felt > .bj-seat:has(.bj-behind.is-on) .ptag { padding-right: 2px; transform: translateX(-18px); }
  .g-blackjack .bj-online .bj-felt > .bj-seat .bj-behind { top: auto; bottom: 0; left: calc(50% + 2px); transform: none; }
  .g-blackjack .bj-online .bj-felt > .bj-seat:has(.bj-tagline) .bj-behind { bottom: 15px; }
  .g-blackjack .bj-online .bj-felt > .bj-seat .bj-bh-ring { width: 30px; height: 30px; }
  .g-blackjack .bj-online .bj-felt > .bj-seat .bj-bh-side { display: none; }
  .g-blackjack .bj-online .bj-felt > .bj-seat .bj-bh-amt { font-size: 12px; }
  .g-blackjack .bj-online .bj-felt > .bj-seat.is-turn::before { width: 120px; height: 220px; top: -20px; }
  .g-blackjack .bj-online .bj-felt > .bj-seat.is-bj::after { width: 140px; height: 140px; }
}
/* … en PORTRAIT : la barre haute (deux rangées de commandes), le feutre en U sur la bande, les places en arc doux sous le sabot */
@media (orientation: portrait) and (max-width: 480px) {
  .g-blackjack .bj-online .bj-bar { height: 226px; }
  .g-blackjack .bj-online .bj-info { padding: 0 40px; }   /* le coin bas-gauche reste au bouton de la voix (js/voix.js) */
  .g-blackjack .bj-online .bj-msg { font-size: 14px; }
  .g-blackjack .bj-online .bj-rail { border-radius: 34px 34px 50% 50% / 34px 34px 18% 18%; }
  .g-blackjack .bj-online .bj-felt { inset: 11px 2.4% 51px; border-radius: 24px 24px 50% 50% / 24px 24px 16% 16%; }
  .g-blackjack .bj-online .bj-felt > .bj-dealer { --card-w: 40px; }
  .g-blackjack .bj-felt > .bj-discard { left: 4%; top: 2.5%; }
  .g-blackjack .bj-online .bj-felt > .bj-tray { left: 4%; top: calc(2.5% + 76px); }
  .g-blackjack .bj-felt > .bj-arc { width: 74%; }
  .g-blackjack .bj-online .bj-center { top: calc(var(--bj-voie) + 62px); left: 41%; }   /* à gauche du sabot et de son étiquette */
  .g-blackjack .bj-online .bj-cd-l { white-space: normal; width: 88px; text-align: center; letter-spacing: .1em; line-height: 1.2; }
  .g-blackjack .bj-online .bj-felt > .bj-seat { width: 64px; }
  .g-blackjack .bj-online .bj-felt > .bj-seat.s0 { left: 84%; top: max(41%, 174px); }
  .g-blackjack .bj-online .bj-felt > .bj-seat.s1 { left: 67%; top: calc(max(41%, 174px) + 14px); }
  .g-blackjack .bj-online .bj-felt > .bj-seat.s2 { left: 50%; top: calc(max(41%, 174px) + 26px); }
  .g-blackjack .bj-online .bj-felt > .bj-seat.s3 { left: 33%; top: calc(max(41%, 174px) + 14px); }
  .g-blackjack .bj-online .bj-felt > .bj-seat.s4 { left: 16%; top: max(41%, 174px); }
  .g-blackjack .bj-online .bj-felt > .bj-seat .bj-bets { display: grid; grid-template-columns: 30px 30px; grid-template-rows: 42px 30px; column-gap: 4px; row-gap: 0; justify-items: center; }
  .g-blackjack .bj-online .bj-felt > .bj-seat .bj-spot.bj-main { grid-area: 1 / 1 / 2 / 3; width: 42px; height: 42px; }
  .g-blackjack .bj-online .bj-felt > .bj-seat .bj-spot.bj-pp { grid-area: 2 / 1; margin-top: -6px; }
  .g-blackjack .bj-online .bj-felt > .bj-seat .bj-spot.bj-t213 { grid-area: 2 / 2; margin-top: -6px; }
  .g-blackjack .bj-online .bj-felt > .bj-seat .bj-who, .g-blackjack .bj-online .bj-felt > .bj-seat .ptag,
  .g-blackjack .bj-online .bj-felt > .bj-seat .bj-bottag { max-width: 70px; }
  .g-blackjack .bj-online .bj-felt > .bj-seat.is-empty .bj-who { margin-top: -74px; }
  .g-blackjack { --trois-auto: 0; }   /* Q2 (N6) : la 2D par défaut, la 3D au sélecteur (js/3d/socle.js, eligible) : la caméra n'y montre qu'une place */
}
/* … COUCHÉ : la barre en colonne à droite (sous la réglette quand elle flotte), le sabot à gauche du sélecteur 2D | 3D */
@media (orientation: landscape) and (max-height: 560px) {
  .g-blackjack .bj-online { flex-direction: row; }
  .g-blackjack .bj-online .bj-room { flex: 1 1 auto; min-width: 0; }
  .g-blackjack .bj-online .bj-bar { flex: 0 0 236px; width: 236px; height: auto; justify-content: center; border-top: 0; border-left: 1px solid var(--line);
    background: linear-gradient(90deg, rgba(10,13,24,.5), var(--bg-1)); }
  body.so-dock-flotte .g-blackjack .bj-online .bj-bar { padding-top: calc(var(--so-dock-h, 42px) + 14px); }
  .g-blackjack .bj-online .bj-msg { font-size: 14px; min-height: 0; }
  .g-blackjack .bj-online .bj-btns .btn { height: 36px; padding: 0 11px; }
  .g-blackjack .bj-online .bj-bar:has(.bj-act) .bj-bar-l { display: none; }
  .g-blackjack .bj-online .bj-bar .chip-rack { flex-wrap: wrap; max-width: 140px; }
  .g-blackjack .trois-coin-boite { right: 16px; }
  .g-blackjack .bj-online .bj-rail { inset: 2px 0 40px 1%; border-radius: 30px 30px 34% 34% / 30px 30px 24% 24%; }
  .g-blackjack .bj-online .bj-felt { inset: 9px 1.6% 49px 2.6%; border-radius: 22px 22px 34% 34% / 22px 22px 22% 22%; }
  .g-blackjack .bj-online .bj-felt > .bj-dealer { --card-w: 36px; top: 2%; }
  .g-blackjack .bj-felt > .bj-shoe { right: 56px; top: 3%; gap: 3px; flex-direction: row-reverse; align-items: center; }
  .g-blackjack .bj-shoe-box { width: 56px; height: 36px; }
  .g-blackjack .bj-shoe-card { --card-w: 26px; width: 26px; height: 36.4px; }
  .g-blackjack .bj-shoe .bj-shoe-s { max-width: 112px; }
  .g-blackjack .bj-felt > .bj-shoe .bj-gauge { position: absolute; right: 0; top: calc(36px + 3px); width: 56px; }
  .g-blackjack .bj-felt > .bj-shoe .bj-small { align-items: flex-end; text-align: right; }
  .g-blackjack .bj-felt > .bj-discard { left: 3%; top: 3%; }
  .g-blackjack .bj-online .bj-felt > .bj-tray { left: calc(3% + 70px); top: 4%; }
  .g-blackjack .bj-felt > .bj-arc { width: 44%; top: 33%; }
  .g-blackjack .bj-online .bj-center { top: 21%; }
  .g-blackjack .bj-online .bj-felt > .bj-seat { width: 104px; }
  .g-blackjack .bj-online .bj-felt > .bj-seat.s0 { left: 85%; top: 26%; }
  .g-blackjack .bj-online .bj-felt > .bj-seat.s1 { left: 67.5%; top: 30%; }
  .g-blackjack .bj-online .bj-felt > .bj-seat.s2 { left: 50%; top: 40%; }
  .g-blackjack .bj-online .bj-felt > .bj-seat.s3 { left: 32.5%; top: 30%; }
  .g-blackjack .bj-online .bj-felt > .bj-seat.s4 { left: 15%; top: 26%; }
  .g-blackjack .bj-online .bj-felt > .bj-seat .bj-bets { gap: 2px; }
  .g-blackjack .bj-online .bj-felt > .bj-seat .bj-spot.bj-main { width: 40px; height: 40px; }
  .g-blackjack .bj-online .bj-felt > .bj-seat .ptag, .g-blackjack .bj-online .bj-felt > .bj-seat .bj-bottag { max-width: 100px; }
  .g-blackjack .bj-online .bj-felt > .bj-seat.is-empty .bj-who { margin-top: -44px; }
}
/* TÉLÉPHONE — N1c (revue au téléphone du 13/10, n° 22) : au SALON du blackjack, la réglette des potes flottante couvrait « Blackjack ·
   salon de minuit » et « Choisissez votre table » ; le salon commence sous sa voie. Règle à part (la table de N1a 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) {
  body:has(.so-dock.is-float) .g-blackjack .bj-lobby { padding-top: calc(var(--so-float-h, 58px) + 2px); }
}
/* TÉLÉPHONE — N5 (annexe B remesurée sur d1cc705 ; règle de l'orchestrateur : les actions principales ont 44 px au moins) : « Prêt »,
   « Tirer », « Rester » (38 px en portrait, 36 couchées) : 44 px de zone de toucher par un cadre transparent de 3 px (4 couchées) au-
   dessus et au-dessous, dans les 6 px qui séparent les rangées (aucune commande n'est couverte) ; les pastilles dessinées et la barre
   de N1a (226 px) ne changent pas — la grandir, elle, raccourcissait le feutre et sortait à 360 le bloc de l'avatar de la place 1 de sa
   courbe (s5-tel-blackjack, 13/10 18:19). « Se lever » (30 px en 2D, 22 en 3D) : 32 px de zone de toucher par un cadre transparent,
   le rond dessiné et sa place ne changent pas. Bornée au téléphone. */
@media (orientation: portrait) and (max-width: 480px), (orientation: landscape) and (max-height: 560px) {
  .g-blackjack .bj-online .bj-btns .btn-gold { position: relative; }
  .g-blackjack .bj-online .bj-btns .btn-gold::after { content: ""; position: absolute; inset: -4px -1px; border-radius: 999px; }
  .g-blackjack .bj-online .bj-felt > .bj-seat .bj-standup { position: relative; }
  .g-blackjack .bj-standup::after { content: ""; position: absolute; inset: -2px; border-radius: 50%; }
  .g-blackjack .bj-vue3d .bj-seat .bj-standup::after { inset: -6px; }
}
@media (orientation: landscape) and (max-height: 560px) {
  .g-blackjack .bj-online .bj-btns .btn-gold::after { inset: -5px -1px; }
}

/* TÉLÉPHONE — N8 (Q1-NOMS de D5, dev/audit/DECISIONS-TEL-1310.md) : le prénom de chaque joueur assis, en permanence (il disparaissait
   pendant les mises dès que le cercle « derrière » paraissait sur sa place, puis revenait : la même place changeait d'aspect selon la
   phase). Pour toute place d'un joueur qui n'est pas la mienne : rangée 1 = l'avatar dans sa pastille (et, s'il paraît, l'anneau
   « derrière » à sa droite) ; rangée 2 = le prénom, Jost 600, 12 px, une ligne, tronqué « … » à la largeur de la place (64 px en
   portrait, 100 px couché) : le schéma de MA place avec « vous ». Le prénom sort de sa pastille par une position absolue juste sous elle
   (la pastille garde son liseré et ses halos « prêt » et « gagné ») ; la pastille réserve sa rangée (marge basse) ; l'anneau remonte
   d'autant, comme pour ma place, et son montant se pose sur son bord bas (comme les montants des cercles de mise) : la rangée du prénom
   reste libre. Les bots gardent leur pastille nommée (leur nom ne s'y cachait pas) : la passer en deux rangées pousserait « Prendre la
   place », déjà au bord du feutre à 360 × 740, sous le feutre (dev/audit/nuit/N8-JOURNAL.md). Bornée au téléphone : le PC ne lit rien
   de ceci (s5-tel-noms.mjs, D et D2). */
@media (orientation: portrait) and (max-width: 480px), (orientation: landscape) and (max-height: 560px) {
  .g-blackjack .bj-online .bj-felt > .bj-seat:not(.is-mine) .bj-who > .ptag { position: relative; padding-right: 2px; margin-bottom: 14.8px; }
  .g-blackjack .bj-online .bj-felt > .bj-seat:not(.is-mine) .bj-who > .ptag > .ptag-name {
    position: absolute; top: calc(100% + 2px); left: 50%; transform: translateX(-50%); display: block; max-width: 64px;
    font-size: 12px; font-weight: 600; line-height: 1.15; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; text-align: center;
    text-shadow: 0 1px 3px #000; }
  /* l'anneau paru : la pastille glisse à gauche (règle de N1a), le prénom reste centré sur la place */
  .g-blackjack .bj-online .bj-felt > .bj-seat:not(.is-mine):has(.bj-behind.is-on) .bj-who > .ptag > .ptag-name { transform: translateX(calc(-50% + 18px)); }
  .g-blackjack .bj-online .bj-felt > .bj-seat:not(.is-mine):has(.bj-who > .ptag) .bj-behind { bottom: 15px; }
  .g-blackjack .bj-online .bj-felt > .bj-seat:not(.is-mine):has(.bj-who > .ptag):has(.bj-who > .bj-tagline) .bj-behind { bottom: 30px; }
  .g-blackjack .bj-online .bj-felt > .bj-seat:not(.is-mine):has(.bj-who > .ptag) .bj-bh-amt { top: auto; bottom: -1px; padding: 0 4px; border-radius: 99px; line-height: 14px;
    background: rgba(5,6,11,.82); z-index: 1; }
  .g-blackjack .bj-online .bj-felt > .bj-seat:not(.is-mine):has(.bj-who > .ptag) .bj-bh-amt:empty { display: none; }
}
@media (orientation: landscape) and (max-height: 560px) {
  .g-blackjack .bj-online .bj-felt > .bj-seat:not(.is-mine) .bj-who > .ptag > .ptag-name { max-width: 100px; }
}
/* TÉLÉPHONE EN PORTRAIT — N8 (décision de l'orchestrateur, 13/10 23:0x ; défaut d'avant N8) : à 360 × 740, « Prendre la place »
   (la commande d'une place de bot, sous sa pastille) passait le bord bas du feutre en U : son centre tombait sous le rebord
   (elementFromPoint : div.bj-rail), le doigt ne l'atteignait pas en son centre. Remède de la spécification Q1-NOMS de D5 : les places
   remontent de 16 px au plus dans le bloc portrait — le plancher de 174 px sous le sabot passe à 158 px ; seules les tables courtes, où
   ce plancher l'emporte sur 41 % de la hauteur du feutre, bougent (à 360 × 740 : 16 px ; à 390 × 844 : rien). */
@media (orientation: portrait) and (max-width: 480px) {
  .g-blackjack .bj-online .bj-felt > .bj-seat.s0 { top: max(41%, 158px); }
  .g-blackjack .bj-online .bj-felt > .bj-seat.s1 { top: calc(max(41%, 158px) + 14px); }
  .g-blackjack .bj-online .bj-felt > .bj-seat.s2 { top: calc(max(41%, 158px) + 26px); }
  .g-blackjack .bj-online .bj-felt > .bj-seat.s3 { top: calc(max(41%, 158px) + 14px); }
  .g-blackjack .bj-online .bj-felt > .bj-seat.s4 { top: max(41%, 158px); }
}

/* TÉLÉPHONE — N14 (écart 1 de N9, dev/audit/nuit/N14-JOURNAL.md) : la table SEULE (« Salon privé », .bj-wrap sans .bj-online) jouée au
   doigt. Elle n'avait reçu aucune des règles du téléphone de N1a (toutes écrites pour .bj-online) : sa barre du bas, en grille d'une
   colonne sous 1200 px (râtelier, message, commandes, règles, bilan, « Réglages »), haute de 293 à 397 px, ne laissait au tapis
   couché qu'une bande de 3 à 33 px (les cercles tombaient sous la barre) ; debout, ses places de 190 px se couvraient l'une l'autre et
   les dernières passaient sous la barre (s5-tel-bj-seul.mjs, sorties ROUGES de N14). Remède, le même que celui de la table en ligne,
   sans rien redessiner (mêmes cercles, cartes, pastilles, feutre et or) :
   - la barre en colonne compacte (message, commandes, râtelier, règles et « Réglages » sur une ligne ; le bilan « Mains … net … » se
     retire, comme le fil et l'historique en ligne) ; couchée, une colonne à droite et le tapis garde sa forme ;
   - les places étroites (66 px debout, 104 px couchées), leur boîte laisse passer le doigt, seules leurs commandes le prennent ; les
     cercles en triangle (MISE dessus, PP et 21+3 dessous), 32 px au moins (la zone de toucher de la règle de N5), libellés à 12 px ;
   - debout, les cinq places un peu plus écartées que la table en ligne (12 % à 88 %) : cinq joueurs sur un téléphone ne se couvrent
     pas ; le feutre en U de la table en ligne au téléphone (sa courbe basse ne rogne plus les places du bord).
   Bornée au téléphone (portrait jusqu'à 480 px de large, couché jusqu'à 560 px de haut) : le PC ne lit rien de ceci (s5-tel-bj-seul.mjs,
   section A : rectangles et styles calculés égaux au code d'avant). Les positions du PC (b3d-geometrie.test.js) ne bougent pas.
   Couchée, la table seule s'ouvre en 2D (--trois-auto: 0, la règle de Q2 de N6 pour le portrait) : en 3D, l'ancre de la MISE couvre
   celle du PP de la même place (la caméra du téléphone, hors de ce bloc) ; la 3D reste au sélecteur 2D | 3D. */
@media (orientation: portrait) and (max-width: 480px), (orientation: landscape) and (max-height: 560px) {
  .g-blackjack .bj-wrap:not(.bj-online) .bj-bar { display: flex; flex-direction: column; align-items: stretch; justify-content: flex-start; gap: 6px; min-height: 0;
    padding: 7px 8px 8px; overflow: hidden auto; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-bar-c { order: 1; gap: 6px; min-width: 0; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-bar-l { order: 2; display: flex; justify-content: center; min-width: 0; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-info { order: 3; justify-self: auto; flex-direction: row; flex-wrap: nowrap; justify-content: center; align-items: center; gap: 6px; min-width: 0; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-stats { display: none; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-inforow { display: contents; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-rulespill { flex: 0 1 auto; min-width: 0; max-width: 100%; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
    font-size: 12px; letter-spacing: .03em; padding: 2px 10px; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-info .btn { flex: none; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-msg { font-size: 15px; line-height: 1.2; min-height: 36px; max-width: none; display: flex; align-items: center; justify-content: center; text-wrap: pretty; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-btns { gap: 6px; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-btns .btn { height: 38px; padding: 0 13px; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-btns .btn-gold { letter-spacing: .07em; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-btns .kbd { display: none; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-bar .chip-rack { flex-wrap: nowrap; gap: 4px; justify-content: center; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-bar .chip-rack .chip { --chip-size: 34px; }
  /* le croupier et la défausse compacts */
  .g-blackjack .bj-wrap:not(.bj-online) .bj-felt > .bj-dealer { gap: 2px; }
  /* les places : la boîte laisse passer le doigt, ses cercles le prennent */
  .g-blackjack .bj-wrap:not(.bj-online) .bj-felt > .bj-seat { gap: 3px; --card-w: 28px; pointer-events: none; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-felt > .bj-seat .bj-spot { pointer-events: auto; width: 32px; height: 32px; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-felt > .bj-seat .bj-hands { min-height: 0; height: 60px; gap: 3px; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-felt > .bj-seat .bj-hands.is-split { --card-w: 21px; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-felt > .bj-seat .bj-hand { gap: 2px; padding: 2px 2px 1px; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-felt > .bj-seat .bj-total { min-width: 28px; padding: 0 6px; font-size: 12px; line-height: 16px; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-felt > .bj-seat .bj-hbet { display: none; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-felt > .bj-seat .bj-hand:has(.bj-badge:not(:empty)) .bj-total { display: none; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-felt > .bj-seat .bj-badge { font-size: 12px; padding: 0 5px; line-height: 16px; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-felt > .bj-seat .bj-ring { inset: -5px; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-felt > .bj-seat .bj-ring-n { right: -10px; top: -10px; width: 22px; height: 22px; font-size: 12px; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-felt > .bj-seat .bj-spot-l { font-size: 12px; letter-spacing: .02em; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-felt > .bj-seat .bj-chipstack .chip { --chip-size: 24px; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-felt > .bj-seat .bj-stack { width: 24px; height: 24px; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-felt > .bj-seat .bj-main .bj-chipstack .chip { --chip-size: 32px; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-felt > .bj-seat .bj-main .bj-stack { width: 32px; height: 32px; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-felt > .bj-seat .bj-amt { bottom: -3px; padding: 0 4px; border-radius: 99px; font-size: 12px; line-height: 14px; background: rgba(5,6,11,.82); z-index: 1; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-felt > .bj-seat .bj-who { margin-top: 1px; max-width: 100%; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-felt > .bj-seat .ptag { gap: 4px; padding: 2px 7px 2px 2px; max-width: 100%; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-felt > .bj-seat .ptag-emoji { width: 20px; height: 20px; font-size: 12px; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-felt > .bj-seat .ptag-name { font-size: 12px; overflow: hidden; text-overflow: ellipsis; min-width: 0; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-felt > .bj-seat .ptag-bal { display: none; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-felt > .bj-seat .bj-bottag { padding: 2px 7px 2px 2px; gap: 4px; max-width: 100%; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-felt > .bj-seat .bj-botemo { width: 20px; height: 20px; font-size: 13px; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-felt > .bj-seat .bj-botname { min-width: 0; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-felt > .bj-seat .bj-botname b { font-size: 12px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-felt > .bj-seat .bj-botname small { display: none; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-felt > .bj-seat .bj-streak { left: -8px; top: -14px; font-size: 12px; pointer-events: none; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-felt > .bj-seat .bj-emptyseat { margin-top: 60px; width: 52px; height: 52px; padding: 0 3px; font-size: 12px; letter-spacing: .02em; line-height: 1.15; }
}
/* … DEBOUT : le feutre en U, les cercles en triangle, les cinq places en arc doux sous le sabot */
@media (orientation: portrait) and (max-width: 480px) {
  .g-blackjack .bj-wrap:not(.bj-online) .bj-felt { border-radius: 24px 24px 50% 50% / 24px 24px 16% 16%; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-felt > .bj-dealer { --card-w: 40px; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-felt > .bj-seat { width: 66px; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-felt > .bj-seat.s0 { left: 88%; top: max(36%, 134px); }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-felt > .bj-seat.s1 { left: 69%; top: calc(max(36%, 134px) + 14px); }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-felt > .bj-seat.s2 { left: 50%; top: calc(max(36%, 134px) + 26px); }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-felt > .bj-seat.s3 { left: 31%; top: calc(max(36%, 134px) + 14px); }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-felt > .bj-seat.s4 { left: 12%; top: max(36%, 134px); }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-felt > .bj-seat .bj-bets { display: grid; grid-template-columns: 32px 32px; grid-template-rows: 42px 32px; column-gap: 2px; row-gap: 0; justify-items: center; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-felt > .bj-seat .bj-spot.bj-main { grid-area: 1 / 1 / 2 / 3; width: 42px; height: 42px; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-felt > .bj-seat .bj-spot.bj-pp { grid-area: 2 / 1; margin-top: -4px; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-felt > .bj-seat .bj-spot.bj-t213 { grid-area: 2 / 2; margin-top: -4px; }
}
/* … COUCHÉ : la barre en colonne à droite, le tapis à gauche ; les cercles en triangle, les places en arc */
@media (orientation: landscape) and (max-height: 560px) {
  .g-blackjack .bj-wrap:not(.bj-online) { flex-direction: row; --trois-auto: 0; }   /* la 2D par défaut (js/3d/socle.js, eligible), la 3D au sélecteur */
  .g-blackjack .bj-wrap:not(.bj-online) .bj-room { flex: 1 1 auto; min-width: 0; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-bar { flex: 0 0 236px; width: 236px; height: auto; justify-content: center; border-top: 0; border-left: 1px solid var(--line);
    background: linear-gradient(90deg, rgba(10,13,24,.5), var(--bg-1)); }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-msg { font-size: 14px; min-height: 0; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-btns .btn { height: 36px; padding: 0 11px; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-bar .chip-rack { flex-wrap: wrap; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-bar .chip-rack .chip { --chip-size: 32px; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-felt { inset: 6px 1.6% 4px 2.6%; border-radius: 22px 22px 34% 34% / 22px 22px 22% 22%; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-felt > .bj-dealer { --card-w: 36px; top: 2%; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-felt > .bj-seat { width: 104px; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-felt > .bj-seat.s0 { left: 85%; top: 18%; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-felt > .bj-seat.s1 { left: 67.5%; top: 24%; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-felt > .bj-seat.s2 { left: 50%; top: 28%; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-felt > .bj-seat.s3 { left: 32.5%; top: 24%; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-felt > .bj-seat.s4 { left: 15%; top: 18%; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-felt > .bj-seat .bj-bets { display: grid; grid-template-columns: 32px 32px; grid-template-rows: 40px 32px; column-gap: 4px; row-gap: 0; justify-items: center; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-felt > .bj-seat .bj-spot.bj-main { grid-area: 1 / 1 / 2 / 3; width: 40px; height: 40px; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-felt > .bj-seat .bj-spot.bj-pp { grid-area: 2 / 1; margin-top: -2px; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-felt > .bj-seat .bj-spot.bj-t213 { grid-area: 2 / 2; margin-top: -2px; }
}

/* ---------- N22 (revue finale R2 du 17/10, défauts n° 17, 18, 23 ; dev/tests-client/s5-bj-finitions.mjs) ----------
   PC (n° 17, le seul changement permis au PC, et sur ces éléments seulement ; la structure de la table au PC reste égale à 3143779 :
   section D de l'épreuve) :
   - le fil de la table en ligne montrait une quatrième ligne rognée sous les pastilles de l'historique (une ligne avec un emoji
     grandissait jusqu'à 18 px : la troisième débordait elle aussi) : trois lignes de 16 px, entières, les plus récentes ;
   - le bloc d'infos (fil, historique, règles) est plus large que sa colonne à 1366 px (la ligne des règles tient sur une ligne) : sa boîte
     transparente prenait le pointeur au-dessus d'« Abandonner » et de sa touche « R ». Le bloc et ses lignes laissent passer le pointeur,
     ses commandes (les règles, la vue 2D | 3D, l'hôte) le prennent ;
   - la légende du sabot (« 6 jeux, remélangés à chaque donne ») passait sous la boîte, vide en haut, de la place 1 (s0) : le sabot au-
     dessus des places (z-index 4 contre 3 ; ses voisines ne le croisent que par le haut vide de la place). */
.g-blackjack .bj-online .bj-feed li { height: 16px; line-height: 16px; }
.g-blackjack .bj-online .bj-feed li:nth-child(n+4) { display: none; }
.g-blackjack .bj-online .bj-info { pointer-events: none; }
.g-blackjack .bj-online .bj-info :is(button, [role="button"], a, [tabindex]) { pointer-events: auto; }
.g-blackjack .bj-felt > .bj-shoe { z-index: 4; }
/* TÉLÉPHONE EN PORTRAIT (n° 18 et n° 23) :
   - en 3D, debout : le libellé « S'asseoir ici » d'une place libre du bas passait sous la plaque de la table (360 × 740). Le « + » à 48 px
     (44 au moins pour une action, règle de N5), son libellé contre lui et à 12 px (règle des textes de N11) : l'ancre est centrée sur son
     point, le libellé remonte de 10 px. Aucun point de la caméra ne change ;
   - en 2D, les annonces (« Le croupier saute ! », « Blackjack du croupier ») passaient le bord du feutre : leur centre est à 41 % de la
     largeur (à côté du sabot). Deux lignes au besoin, dans 72 % de la largeur de l'écran (la table seule n'a pas d'annonces en 2D :
     games/blackjack-2d.js ne les pose qu'en ligne). */
@media (orientation: portrait) and (max-width: 480px) {
  .g-blackjack .bj-vue3d .bj-sitbtn { gap: 3px; }
  .g-blackjack .bj-vue3d .bj-sit-plus { width: 48px; height: 48px; font-size: 24px; }
  .g-blackjack .bj-vue3d .bj-sit-t { font-size: 12px; letter-spacing: .12em; }
  .g-blackjack .bj-felt .bj-banner { white-space: normal; max-width: 72vw; }
  .g-blackjack .bj-felt .bj-banner-t { text-wrap: balance; }
}
/* TÉLÉPHONE COUCHÉ (n° 18) : en 3D, « N jeux, remélangés à chaque donne » sur une ligne débordait de la scène de 8 px : deux lignes,
   130 px, comme la légende du sabot en 2D. */
@media (orientation: landscape) and (max-height: 560px) {
  .g-blackjack .bj-vue3d .bj-3d-lbl .bj-shoe-s { white-space: normal; max-width: 130px; }
}

/* ---------- N27 (revue finale R2 rejouée sur 66bd6a8, défauts N2, N4, N1, N3 ; dev/tests-client/s5-r2-finitions.mjs) ----------
   TÉLÉPHONE, LA TABLE SEULE (N2) : N14 (b793b99) avait mis le bandeau des règles sur une ligne, coupée par « … », à côté de « Réglages » :
   le résumé (« 6 jeux · S17 · BJ 3:2 · double libre · DAS · abandon · carte cachée », 458 px ; 571 px pour le plus long que les réglages
   permettent) n'avait que 217 à 247 px debout et 90 px couché. Il passe à la ligne, centré comme celui de la table en ligne. Debout, à
   côté de « Réglages », en deux lignes de 13 px : la pastille garde la hauteur de « Réglages » (32 px), la barre ne grandit pas, ni la
   scène 3D qu'elle borde (sa caméra au repos reste celle de 3143779 : s5-camera-glisse, A ; avec un interligne de 1,3, la barre prenait
   5 px à 390 de large et 19 px à 360, et la caméra changeait). Jusqu'à 380 px de large, sans espacement des lettres et avec 6 px de marge
   intérieure, pour que le résumé d'usine tienne en deux lignes. Le plus long en prend trois (13 px de plus) ; aux téléphones debout courts
   (700 px de haut au plus), la barre resserre ses écarts (15 px, toujours) : le feutre y garde la place de la plaque de la place du
   milieu. Couché, sur toute la largeur de la colonne (trois lignes), « Réglages » dessous. Même police, même pastille. */
@media (orientation: portrait) and (max-width: 480px), (orientation: landscape) and (max-height: 560px) {
  .g-blackjack .bj-wrap:not(.bj-online) .bj-rulespill { white-space: normal; text-overflow: clip; text-align: center; line-height: 13px; }
}
@media (orientation: portrait) and (max-width: 380px) {
  .g-blackjack .bj-wrap:not(.bj-online) .bj-rulespill { letter-spacing: 0; padding: 2px 6px; }
}
@media (orientation: landscape) and (max-height: 560px) {
  .g-blackjack .bj-wrap:not(.bj-online) .bj-info { flex-wrap: wrap; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-rulespill { flex: 1 1 100%; }
}
@media (orientation: portrait) and (max-width: 480px) and (max-height: 700px) {
  .g-blackjack .bj-wrap:not(.bj-online) .bj-bar { gap: 3px; padding-top: 4px; padding-bottom: 5px; }
}
/* TÉLÉPHONE DEBOUT, LA TABLE SEULE EN 2D (N4) : aux deux places du bord (s0 à droite, s4 à gauche), une annonce longue (« Blackjack !
   +37,50 » : 123 px sur une ligne, pour une place de 66 px) débordait de l'écran et du feutre, qui la rognait (12 px à 390 de large, 16 px
   à 360). Elle passe à la ligne, 86 px au plus (76 px de texte : « Blackjack ! », le plus long des libellés, en prend 71 et reste sur une
   ligne, la somme dessous), et se décale de 5 px vers la table : texte et pastille entiers dans le feutre à 360 et à 390 de large. Les
   annonces courtes (« Perdu −25 », « Égalité ±0 ») restent sur une ligne ; les autres places et la table couchée ne changent pas. */
@media (orientation: portrait) and (max-width: 480px) {
  .g-blackjack .bj-wrap:not(.bj-online) .bj-felt > .bj-seat:is(.s0, .s4) .bj-badge { position: relative; width: max-content; max-width: 86px; white-space: normal; text-align: center; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-felt > .bj-seat.s0 .bj-badge { left: -5px; }
  .g-blackjack .bj-wrap:not(.bj-online) .bj-felt > .bj-seat.s4 .bj-badge { left: 5px; }
}
/* TÉLÉPHONE, LA 3D (N1, N3) : avec la caméra « depuis sa place » de N18, la légende du sabot (ou de la défausse) et les montants des mises des
   places du bord tombaient à moitié hors de la scène, coupés par elle. La vue (games/blackjack-3d.js, _bordsTelephone) pose est-hors sur une
   légende qui ne tient pas entière dans la scène : elle s'efface (opacité 0 : le kit, qui tient sa visibilité, n'est pas contredit) ; un
   montant dont le cercle est dans la scène y est ramené entier, sinon il se retire. */
@media (orientation: portrait) and (max-width: 480px), (orientation: landscape) and (max-height: 560px) {
  .g-blackjack .bj-vue3d .bj-3d-lbl.est-hors { opacity: 0; }
}

/* ---------- N31 (point 1 ; mesuré d'abord sur 673679d, dev/tests-client/s5-tel-bj-couche.mjs) : LA TABLE EN LIGNE AU TÉLÉPHONE COUCHÉ ----------
   Sous 844 px de large, la rangée du haut du feutre (défausse, banque, « Croupier » et ses cartes, légende et boîte du sabot, sélecteur
   2D | 3D) ne tenait plus : « Croupier » s'écrivait sur « Sabot continu » (812, 740, 667, 640), la banque passait sous « Croupier » et
   sous la légende (667, 640), les « S'asseoir ici » de places voisines se chevauchaient (667, 640), le sélecteur 2D | 3D était à moins de
   10 px de la boîte du sabot (son ombre la touchait). Ce qui change, sous 844 px seulement :
   - la légende du sabot garde son titre, « Sabot continu », sur deux lignes contre la boîte ; « N jeux, remélangés à chaque donne » se
     retire (la ligne des règles de la barre dit « N jeux · sabot continu », l'aide de la table l'explique) ; sous 740 px, le titre se
     retire aussi (la 3D le retire déjà à 667 et 640 : il n'y tient pas) ;
   - le sélecteur 2D | 3D à 10 px du bord droit (comme la roulette couchée, N1b) au lieu de 16 ;
   - sous 740 px : « Croupier » moins espacé, la banque plus petite (0,44 au lieu de 0,72), « S'asseoir ici » sur deux lignes (à 720,
     la banque passait déjà sous « Croupier », de 5,2 px).
   En 3D, à toutes les largeurs couchées : les « S'asseoir ici » compacts (le « + » à 48 px, comme debout, N22 ; le libellé sur deux lignes)
   pour que les cinq tiennent côte à côte, posés par la vue (games/blackjack-3d.js, _poserPaves) ; sous 844 px, la légende du sabot sans sa
   seconde ligne. Le PC et le portrait : rien ne change (épreuve, D). */
@media (orientation: landscape) and (max-height: 560px) {
  .g-blackjack .bj-vue3d .bj-sitbtn { gap: 3px; padding: 2px 0; }
  .g-blackjack .bj-vue3d .bj-sit-plus { width: 48px; height: 48px; font-size: 24px; }
  .g-blackjack .bj-vue3d .bj-sit-t { width: min-content; font-size: 12px; line-height: 1.15; letter-spacing: .06em; text-align: center; }
}
@media (orientation: landscape) and (max-height: 560px) and (max-width: 843px) {
  .g-blackjack .bj-online .bj-felt > .bj-shoe.is-continu .bj-shoe-s, .g-blackjack .bj-vue3d .bj-3d-lbl.is-continu .bj-shoe-s { display: none; }
  .g-blackjack .bj-online .bj-felt > .bj-shoe.is-continu .bj-shoe-c { width: min-content; line-height: 1.15; text-align: right; }
  .g-blackjack .trois-coin-boite { right: 10px; }
}
@media (orientation: landscape) and (max-height: 560px) and (max-width: 739px) {
  .g-blackjack .bj-online .bj-felt > .bj-shoe.is-continu .bj-small { display: none; }
  .g-blackjack .bj-online .bj-felt > .bj-dealer .bj-dlabel { letter-spacing: .06em; }
  .g-blackjack .bj-online .bj-felt > .bj-tray { transform: scale(.44); }
  .g-blackjack .bj-online .bj-felt > .bj-seat .bj-sitbtn { gap: 1px; }
  .g-blackjack .bj-online .bj-felt > .bj-seat .bj-sit-t { width: min-content; line-height: 1.1; text-align: center; }
}

/* ---------- N34 (question n° 2 de N31, jugée ; mesuré d'abord sur 0bbeab4, dev/tests-client/s5-tel-bj-couche.mjs, d, d', a'', f) ----------
   EN 3D, AU TÉLÉPHONE COUCHÉ, LE SÉLECTEUR 2D | 3D QUITTE LA SCÈNE. Au coin haut-droit de la scène (le coin du kit, css/trois.css), il
   était posé sur le sabot du kit, le modèle 3D, à toutes les largeurs couchées, 844 comprise (au pixel de la toile : 31 à 40 % de sa
   surface sur le sabot dessiné, table libre au repos ; jusqu'à 100 % assis en s1), et ailleurs sur le bras du croupier (assis en s0). La
   caméra du téléphone pose le matériel du croupier (défausse, rail du bras, banque, sabot) tout le long du haut de la scène et les places en
   bas : aucun coin de la scène n'est libre dans tous ses cadrages, et la caméra ne bouge pas (s5-tel-bj3d.mjs, A ; s5-camera-glisse.mjs).
   En 3D seulement, le sélecteur se pose donc au coin haut-droit de la colonne de droite (la barre), hors de la scène, en rangée (« 2D » et
   « 3D » côte à côte, 32 px chacun : la règle de N5 ; l'arrondi de 16 px du sélecteur couché) ; la barre lui laisse ce coin : son contenu
   part du haut, et le message de la table s'écrit à côté de lui (un flottant vide de 80 × 46 px, réservé dans le coin haut-droit du
   message) puis passe dessous. Le message y prend une ligne de plus (assis, pendant les mises : 272 px de contenu) : la barre ne la
   contient qu'à 352 px de haut et plus ; plus bas (568 × 320, un navigateur qui mange la hauteur), le sélecteur garde le coin de la scène,
   comme avant (une commande de la barre coupée serait pire) ; la barre défilerait plutôt que de rogner, par sûreté. Quand la réglette des
   potes flotte, le kit descend le sélecteur sous elle (--trois-coin-pousse), comme la barre son contenu. En 2D, rien ne change (le coin de
   N31, dans la salle) ; le PC et le portrait non plus. */
@media (orientation: landscape) and (max-height: 560px) and (min-height: 352px) {
  .g-blackjack .bj-online .trois-cadre[data-vue="3d"] .trois-coin-boite { top: calc(7px + var(--trois-coin-pousse, 0px)); right: calc(8px - 236px); }
  .g-blackjack .bj-online .trois-cadre[data-vue="3d"] .trois-coin .trois-vue { flex-direction: row; }
  .g-blackjack .bj-online:has(.trois-cadre[data-vue="3d"]) .bj-bar { justify-content: flex-start; overflow: hidden auto; }
  .g-blackjack .bj-online:has(.trois-cadre[data-vue="3d"]) .bj-msg { display: flow-root; }
  .g-blackjack .bj-online:has(.trois-cadre[data-vue="3d"]) .bj-msg::before { content: ""; float: right; width: 80px; height: 46px; }
}
