/* GOC Spades / Hearts table chrome (t9133u). Adapted from the Von'Voltz Pinochle
   layout (tfPN9): desktop ≥1024 full-screen, phone portrait dock, phone landscape side column,
   selected-card gold glow, last-trick, end-of-hand bid reminder, contrast. Pinochle files untouched. */
/* Pinochle page layer (Nov 11 2026): bigger, closer robot faces and bigger trick cards than the poker table; readable contrast
   everywhere (no faded text); title screen invite UI. Loaded after kit/table.css + kit/ct-extras.css. */
.sh .felt{--tw:clamp(64px,19vw,112px)}
.sh .seat{width:116px}
.sh .seat .avw{width:84px;height:84px}
.sh .seat .av{width:84px;height:84px;border-width:3px}
@media (min-width:700px) and (min-height:640px){.sh .seat{width:150px}.sh .seat .avw,.sh .seat .av{width:112px;height:112px}.sh .felt{--tw:clamp(90px,10vw,130px)}}
.sh .seat .nm{color:#fff8e6;font-weight:800;font-size:17px;text-shadow:0 1px 3px #000,0 0 6px #000;line-height:1.1;text-align:center}
.sh .seat .chip{color:#ffe58a;background:rgba(6,4,16,.9)}
.sh .seat .chip:empty{display:none}
.sh .seat.turn .av{border-color:#ffe58a;box-shadow:0 0 0 4px rgba(255,229,138,.55),0 0 22px rgba(255,214,96,.9)}
.sh .sh-tk{display:block;margin-top:2px;padding:0 8px;border-radius:999px;background:rgba(6,4,16,.88);color:#fff;font-size:15px;font-weight:700}
.sh .mebar .sh-tk{display:inline-block;margin:0}
.sh .mebar .av{width:44px;height:44px;border-radius:50%;object-fit:cover;border:2px solid #c9a24a;background:#2a1545}
.sh .msg{color:#fff8e6;text-shadow:0 1px 3px #000;font-weight:700}
.sh .infob,.sh .trumpb{color:#fff8e6}
.sh .act{background:rgba(14,8,30,.96);border:1.5px solid rgba(255,229,138,.55)}
.sh .act h3{color:#ffe58a}
.sh .act .note{color:#f2e6c9}
.sh .sh-bid .stepper{margin-top:8px;flex-wrap:wrap}
.sh .sh-bid .stepper .gk-btn.gold{flex:0 1 auto;min-width:96px}
.sh .suits{display:flex;gap:8px;justify-content:center}
.sh .suitb{flex-direction:column;gap:2px;color:#2a1545;font-size:16px;font-weight:800;min-height:84px;max-width:96px;background:#fff6dc}
.sh .gk-btn[disabled]{opacity:1;filter:none;background:#3a2b55;color:#f4ecff;border-color:#8f7bb5}
.sh .hc.no{filter:brightness(.62)}
.sh #hand .hc.no .card{opacity:1}
/* meld + result sheets */
.sh .meldl .mr.us{border-color:rgba(159,231,184,.55)}
.sh .meldl .mr .hd span{color:#fff8e6}
.sh .meldl .mr .hd img.cut{width:40px;height:40px}
.sh .meldl .mr .its{color:#f2e6c9}
.sh .meldl .mr .its b{color:#ffe58a}
.sh .meldl .mr .cs .card{width:40px}
.sh .sh-sum{text-align:center;font-size:18px;color:#fff8e6}
.sh .hs th{color:#f2e6c9}
.sh .hs td{color:#fff8e6}
.sh .sh-wait{text-align:center;color:#f2e6c9;font-size:17px;margin:8px 0 0}
.sh .sh-how td{padding:3px 6px;color:#fff8e6;font-size:16px}
.sh .sh-how td:nth-child(even){color:#ffe58a;font-weight:800;text-align:right}
.sh .sh-mt{width:100%;border-collapse:collapse}
.sh .sh-mt tr{border-bottom:1px solid rgba(255,229,138,.15)}
/* title */
.sh .sh-hero{position:relative;height:112px;width:260px;margin:0 auto}
.sh .sh-hero img{position:absolute;top:8px;width:96px;height:96px;border-radius:50%;object-fit:cover;border:3px solid #c9a24a;background:#2a1545}
.sh .sh-hero .h1{left:0}.sh .sh-hero .h2{right:0}
.sh .sh-hero .fan{position:absolute;left:50%;top:6px;width:0;height:100px}
.sh .sh-hero .fan .pc{position:absolute;left:0;top:0;width:62px;transform-origin:50% 120%}
.sh .sh-hero .fan .card{width:62px;height:auto;filter:drop-shadow(0 4px 8px rgba(0,0,0,.5))}
.sh .sh-panel .lbl{color:#fff8e6}
.sh .sh-panel .lbl small{color:#f2e6c9;font-weight:600}
.sh .sh-mode button{display:flex;align-items:center;justify-content:center;gap:6px;min-height:52px}
.sh .sh-in{width:100%;min-height:48px;padding:8px 12px;margin:4px 0 10px;border-radius:12px;border:1.5px solid rgba(255,229,138,.5);background:#120a24;color:#fff;font-size:18px}
.sh .sh-in::placeholder{color:#c9bce0}
.sh .sh-in.code{text-transform:uppercase;letter-spacing:.12em;margin:0}
.sh .sh-join{display:flex;gap:8px;align-items:center}
.sh .sh-join .gk-btn{min-height:48px}
.sh .sh-or{text-align:center;color:#f2e6c9;margin:12px 0 6px;font-size:17px}
.sh .sh-err{margin:10px 0 0;padding:8px 10px;border-radius:10px;background:#5a1420;color:#fff;font-size:17px}
.sh .sh-err.ok{background:#14503a}
.sh #btnCreate{width:100%}
.sh .onl-st{color:#fff8e6;font-size:18px;text-align:center}
.sh .onl-code{display:flex;align-items:center;justify-content:center;gap:10px;color:#f2e6c9;margin:8px 0}
.sh .onl-code b{font-size:30px;letter-spacing:.14em;color:#ffe58a}
.sh .sh-acts{display:flex;gap:8px;justify-content:center;margin-bottom:8px}
.sh .seatlist{list-style:none;margin:8px 0;padding:0;display:flex;flex-direction:column;gap:6px}
.sh .seatlist li{display:flex;align-items:center;gap:10px;padding:6px 10px;border-radius:12px;background:rgba(0,0,0,.35);color:#fff8e6;font-weight:700}
.sh .seatlist .sav{width:40px;height:40px;border-radius:50%;object-fit:cover;display:inline-flex;align-items:center;justify-content:center;background:#2a1545;border:2px solid #c9a24a;color:#ffe58a}
.sh .seatlist small{color:#f2e6c9;font-weight:600}
.sh .seatlist .dot{margin-left:auto;width:12px;height:12px;border-radius:50%;background:#8a8a8a}
.sh .seatlist .dot.on{background:#3ee07a}
.sh #btnCont small{display:block;font-size:14px;color:inherit}
.sh .rec,.sh .sh-wait{color:#f2e6c9}
.sh #btnLeaveRoom{width:100%;margin-top:8px}
/* the kit's 3D-era override hides the felt (expects a .tbl layer we do not use) - restore the green table */
.ct.sh .felt{border:10px solid transparent!important;border-radius:30px;overflow:hidden;
  background:radial-gradient(120% 90% at 50% 45%,#23845b 0,#12603f 52%,#0a4129 100%) padding-box,url(../../img/table/wood.webp) center/320px border-box!important;
  box-shadow:0 16px 40px rgba(0,0,0,.65),inset 0 0 0 2px rgba(255,229,138,.18),inset 0 0 60px rgba(0,0,0,.45)!important}
.ct.sh .seat .av{border-radius:50%}
.ct.sh .act:empty{display:none!important}
/* bigger, closer faces: beat the kit's per-breakpoint sizes */
.ct.sh .seat .avw{width:96px!important;height:96px!important;padding:4px!important;border-radius:50%}
.ct.sh .seat .av{width:88px!important;height:88px!important;border-radius:50%!important;object-fit:cover}
@media (min-width:700px) and (min-height:640px){.ct.sh .seat .avw{width:124px!important;height:124px!important;padding:5px!important}.ct.sh .seat .av{width:114px!important;height:114px!important}}
@media (orientation:landscape) and (max-height:520px){.ct.sh .seat .avw{width:64px!important;height:64px!important;padding:3px!important}.ct.sh .seat .av{width:58px!important;height:58px!important}}
.ct.sh .mebar .av,.ct.sh .seatlist img.sav{border-radius:50%}
/* 3-hand (t9052u): three seats (you, left, right), no partner across */
.sh #sGame.sh3 #seat2,.sh #sGame.sh3 .slot.p2{display:none!important}
.sh .sh-widow{position:absolute;left:50%;top:44%;transform:translate(-50%,-50%);z-index:6;padding:8px 10px;border-radius:14px;background:rgba(10,6,24,.92);border:1.5px solid rgba(255,229,138,.6);text-align:center;pointer-events:none;animation:pnW .3s ease-out}
.sh .sh-widow b{display:block;color:#ffe58a;font-size:17px;margin-bottom:4px}
.sh .sh-widow div{display:flex;gap:4px}
.sh .sh-widow .card{width:var(--tw);height:auto}
@keyframes pnW{from{opacity:0;transform:translate(-50%,-40%)}to{opacity:1;transform:translate(-50%,-50%)}}
.sh .sh-hint{margin:2px 0 8px;color:#f2e6c9;font-size:16px;line-height:1.3}
.sh .sh-widow{top:80%}
.sh .sh-widow .card{width:calc(var(--tw) * .78)}
.sh #sGame.sh3 #sb{display:grid!important;grid-template-columns:1fr 1fr 1fr auto;gap:4px}
.sh #sGame.sh3 #sb .tm{min-width:0;padding:3px 6px;flex-direction:column;align-items:flex-start}
.sh #sGame.sh3 #sb .tm .nm{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sh .seatlist .sh-seatlbl{color:#ffe58a;margin-right:4px}
.sh .seatlist .nm{flex:1;min-width:0}
.sh .sh-seatsel{flex:none;max-width:44%;font:700 16px/1.2 system-ui,sans-serif;padding:8px 6px;border-radius:10px;background:#f4f1ea;color:#1a1424;border:2px solid #c9a24a;min-height:44px}
.sh .sh-sit{flex:none;min-height:44px}
.sh .seatlist li.you{outline:2px solid #8fe3ad}
.sh .sh-tgt{margin:6px 0 4px}
.sh .sh-tgt .sh-in{margin:0;max-width:120px}
.sh .sh-tgtl{color:#fff8e6;font-weight:700;font-size:17px;white-space:nowrap}
/* ===================== Von'Voltz Pinochle (owner t9056u, Lobby Pro spec, Repair Two findings) =====================
   Gold + silver on deep charcoal-navy; purple only as a light accent. Portrait phones: players sit AROUND the table
   (avatars straddle the rail, never under a control), the action sheet + status + Next live in a dock above the hand. */
body.sh{--deep:#0E1420;--plum:#1A1F2B;--plum2:#2A313F;--line:rgba(192,198,204,.5);--gold:#D4AF37;--gold2:#F1D77A;--vv-silver:#C0C6CC;--vv-silver2:#8E979F;--vv-panel:#1A1F2B;--vv-accent:#B9A7E8}
body.sh,.sh .gk-screen{background:radial-gradient(120% 70% at 50% 0,#1b2433 0,#0E1420 60%) fixed,#0E1420}
.sh .gk-btn{background:linear-gradient(180deg,#323a48,#1A1F2B);border-color:rgba(192,198,204,.55);color:#F4F6F8}
.sh .gk-btn.gold{background:linear-gradient(180deg,#F1D77A,#D4AF37 55%,#B8932A);color:#1A1A1A;border-color:#F6E6A8;box-shadow:0 3px 0 #7a5f14}
.sh .gk-btn.icon{color:#C0C6CC}
.sh .gk-btn[disabled]{background:#2A313F;color:#E6E9EC;border-color:#8E979F}
.sh .gk-bar h1,.sh .gk-bar h2,.sh .gk-logo{color:#F1D77A}
.sh .gk-seg button[aria-pressed="true"]{background:linear-gradient(180deg,#F1D77A,#D4AF37);color:#1A1A1A;border-color:#F6E6A8}
.sh .sb .tm{background:rgba(26,31,43,.92);border-color:rgba(192,198,204,.45)}
.sh .sb .tm.us{border-color:#D4AF37}
.sh .sb .tm .nm{color:#E6E9EC}
.sh .sb .tm .sc{color:#F1D77A}
.sh .act{background:rgba(26,31,43,.97);border-color:rgba(212,175,55,.6)}
.sh .seatlist .sav,.sh .mebar .av,.sh .sh-hero img{background:#1A1F2B;border-color:#D4AF37}
.sh .sh-in{background:#141A26;border-color:rgba(192,198,204,.6)}
.sh .sh-in::placeholder{color:#AEB5BD}
.sh .seat .chip{color:#F1D77A;background:rgba(14,20,32,.92)}
.sh .seat.turn .av{border-color:#D4AF37;box-shadow:0 0 0 4px rgba(212,175,55,.55),0 0 22px rgba(241,215,122,.85)}
/* t9122u: gold selection (see also the block at the end) */
.sh .hc.sel .card{box-shadow:0 0 0 3px #ffd45a,0 0 18px 4px rgba(255,214,96,.95),0 10px 18px rgba(0,0,0,.45)}
.sh .gk-sheet .gk-card,.sh .gk-card{background:#141A26;border-color:rgba(192,198,204,.4)}
/* score strip: team names wrap to two lines instead of "You & Pinky …" (Repair P2); trump + bid live in the target cell */
.sh #sb .tm .nm{white-space:normal!important;overflow:visible!important;text-overflow:clip!important;font-size:16px;line-height:1.1}
.sh #sb .tgt{display:flex;flex-direction:column;align-items:center;line-height:1.05;color:#E6E9EC;font-size:15px}
.sh #sb .tgt b{color:#F1D77A;font-size:18px}
.sh #sb .sh-tr{display:block;margin-top:2px;color:#F4F6F8;font-size:14px;font-weight:700;white-space:nowrap}
.sh #sb .sh-tr .sy svg{vertical-align:-3px}
/* bid log on the felt during the auction */
.sh .sh-log{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);z-index:4;max-width:min(64%,250px);display:flex;flex-wrap:wrap;justify-content:center;gap:4px;padding:6px 8px;border-radius:12px;background:rgba(14,20,32,.88);border:1.5px solid rgba(212,175,55,.5);pointer-events:none}
.sh .sh-log[hidden]{display:none}
.sh .sh-log b{width:100%;text-align:center;color:#F1D77A;font-size:15px}
.sh .sh-log span{padding:1px 7px;border-radius:999px;font-size:15px;font-weight:700;color:#1A1A1A;background:#F1D77A}
.sh .sh-log span.p{background:#C0C6CC}
/* dock above the hand: status line, the action sheet, and Next */
.sh .sh-dock{display:flex;flex-direction:column;gap:6px;padding:0 6px;position:relative;z-index:12}
.sh .sh-dock:empty{display:none}
.sh .sh-next{min-height:48px;font-size:19px;width:100%}
.sh .sh-next[hidden]{display:none}
.ct.sh #sGame.sh-docked .sh-dock #msg{position:static!important;display:block;margin:0;min-height:26px;padding:3px 8px;border-radius:10px;background:rgba(14,20,32,.85);color:#F4F6F8;font-size:17px;text-align:center;visibility:visible!important;transform:none!important;left:auto;right:auto;top:auto;bottom:auto;width:auto}
.ct.sh #sGame.sh-docked .sh-dock #act{position:static!important;inset:auto!important;transform:none!important;max-height:none!important;max-width:none!important;width:auto!important;margin:0!important;overflow:visible!important;display:block!important;padding:8px 10px!important;border-radius:16px}
.ct.sh #sGame.sh-docked .sh-dock #act:empty{display:none!important}
.ct.sh #sGame.sh-docked .sh-dock:has(#act:not(:empty)) #msg{display:none}
.ct.sh #sGame.sh-docked .sh-dock #act h3{display:block!important;margin:0 0 6px;font-size:17px}
.ct.sh #sGame.sh-docked .sh-dock #act .note{display:none!important}
.ct.sh #sGame.sh-docked .sh-dock #act .row{flex-wrap:nowrap}
.ct.sh #sGame.sh-docked .sh-dock #act .row .gk-btn{flex:1 1 0;min-height:46px;padding:0 8px}
.ct.sh #sGame.sh-docked .sh-bid .stepper{display:flex;gap:6px;align-items:center;justify-content:center;margin-top:6px;flex-wrap:nowrap}
.ct.sh #sGame.sh-docked .sh-bid .stepper b{min-width:40px;text-align:center;font-size:22px;color:#F1D77A}
.ct.sh #sGame.sh-docked .sh-bid .stepper .gk-btn.gold{flex:1 1 auto}
.ct.sh #sGame.sh-docked .suitb{min-height:64px}
.ct.sh #sGame.sh-docked #hudstrip,.ct.sh #sGame.sh-docked #tgDock{display:none!important}
/* the table: players sit around it, the felt only holds cards */
.ct.sh #sGame.sh-docked #felt{--tw:52px;flex:1 1 0!important;min-height:150px!important;height:auto!important;margin:44px 44px 6px!important;overflow:visible!important;position:relative;border-radius:34px}
@media (min-height:780px){.ct.sh #sGame.sh-docked #felt{--tw:60px;margin-top:52px!important}}
.ct.sh #sGame.sh-docked #felt .seat{position:absolute!important;width:96px!important;gap:0!important;z-index:6}
.ct.sh #sGame.sh-docked #felt .seat .avw{width:76px!important;height:76px!important;padding:3px!important}
.ct.sh #sGame.sh-docked #felt .seat .av{width:70px!important;height:70px!important}
@media (min-height:780px){.ct.sh #sGame.sh-docked #felt .seat .avw{width:86px!important;height:86px!important}.ct.sh #sGame.sh-docked #felt .seat .av{width:80px!important;height:80px!important}}
.ct.sh #sGame.sh-docked #felt .seat .nm{font-size:15px!important;padding:1px 6px;border-radius:8px;background:rgba(14,20,32,.92);max-width:96px;white-space:normal;line-height:1.1}
.ct.sh #sGame.sh-docked #felt .seat .mini{display:none!important}
.ct.sh #sGame.sh-docked #felt .seat.s2{left:50%!important;right:auto!important;top:-42px!important;transform:translateX(-50%)!important}
.ct.sh #sGame.sh-docked #felt .seat.s1{left:-48px!important;right:auto!important;top:50%!important;transform:translateY(-58%)!important}
.ct.sh #sGame.sh-docked #felt .seat.s3{right:-48px!important;left:auto!important;top:50%!important;transform:translateY(-58%)!important}
@media (min-height:780px){.ct.sh #sGame.sh-docked #felt .seat.s2{top:-48px!important}}
/* trick: a tight plus in the open centre of the felt (Repair P1: cards never reach a seat or the rail) */
.ct.sh #sGame.sh-docked #felt .trick .slot.p0{left:50%!important;top:calc(50% + var(--tw) * .62)!important}
.ct.sh #sGame.sh-docked #felt .trick .slot.p2{left:50%!important;top:calc(50% - var(--tw) * .62)!important}
.ct.sh #sGame.sh-docked #felt .trick .slot.p1{left:calc(50% - var(--tw) * .78)!important;top:50%!important}
.ct.sh #sGame.sh-docked #felt .trick .slot.p3{left:calc(50% + var(--tw) * .78)!important;top:50%!important}
.ct.sh #sGame.sh-docked .sh-widow{top:50%}
/* you sit on the near rail like everyone else */
.ct.sh #sGame.sh-docked .me{margin-top:-30px!important;z-index:9;pointer-events:auto}
.ct.sh #sGame.sh-docked .mebar{min-height:44px;justify-content:center!important;padding:0!important;pointer-events:none}
.ct.sh #sGame.sh-docked .mebar>*{pointer-events:auto}
.ct.sh #sGame.sh-docked .mebar .av{width:48px;height:48px}
/* compact strip + sheet so a 390x660 Safari view fits with nothing clipped */
.ct.sh #sGame.sh-docked #sb .tm{flex-direction:row!important;flex-wrap:nowrap!important;align-items:center;justify-content:space-between;padding:4px 8px;min-height:36px}
.ct.sh #sGame.sh-docked #sb .tm .nm{width:auto!important;flex:1 1 auto;font-size:16px}
.ct.sh #sGame.sh-docked #sb .tm .sc{flex:none;font-size:20px}
.ct.sh #sGame.sh-docked .sh-dock #act .sh-bid h3{display:none!important}
.ct.sh #sGame.sh-docked .sh-dock #act{padding:6px 8px!important}
body.sh:has(#sGame.sh-docked:not([hidden])) .gk-notices{font-size:14px;padding-top:4px;padding-bottom:calc(var(--sab) + 4px)}
.ct.sh #sGame.sh-docked .gk-bar{min-height:44px}
.ct.sh #sGame.sh-docked .gk-bar .gk-btn.icon{width:42px;min-width:42px;min-height:42px}
.ct.sh #sGame.sh-docked .gk-bar h2{font-size:18px}
.sh .sh-log{top:auto;bottom:10px;transform:translateX(-50%);max-width:calc(100% - 92px);padding:4px 6px;gap:3px}
.sh .sh-log b{display:none}
.sh .sh-log span{white-space:nowrap;font-size:14px;padding:1px 6px}
.sh .mebar .chip,.sh .mebar{color:#F4F6F8}
.ct.sh .mebar{background:rgba(26,31,43,.95);border:1.5px solid rgba(212,175,55,.65);border-radius:999px;padding:2px 12px 2px 2px!important}
.ct.sh #sb .tgt{background:rgba(26,31,43,.92)!important;border:1.5px solid rgba(192,198,204,.45)!important;border-radius:10px;padding:2px 8px}
.sh #sb .sh-tr .sy{display:inline-flex;background:#F4F6F8;border-radius:5px;padding:1px 2px}
.ct.sh #sGame.sh-docked .trumpb{display:none}
.sh.tg .seat.turn .av{box-shadow:none!important}
.ct.sh #sGame.sh-docked .sh-dock #msg{display:block!important}
.ct.sh #sGame.sh-docked .sh-dock #msg:empty{display:none!important}
.ct.sh #sGame.sh-docked .sh-dock:has(#act:not(:empty)) #msg{display:none!important}
.ct.sh #sGame.sh-gate .sh-dock #msg{border:1.5px solid rgba(212,175,55,.7);font-weight:800}
.ct.sh #sGame.sh-docked .sh-dock #msg{white-space:normal!important;overflow:visible!important;text-overflow:clip!important;height:auto!important;max-height:none!important;line-height:1.25}
.ct.sh #sGame.sh-docked.pn3 #felt .seat.s1,.ct.sh #sGame.sh-docked.pn3 #felt .seat.s3{top:34%!important}
/* ===== owner t9092u: landscape phones (e.g. 844x390, 915x412). Felt fills the height, hand along the bottom (never over a seat),
   side panel on the right holds the score, status, Next and the bid/trump/pass sheet. ===== */
.sh-side[hidden]{display:none!important}
.ct.sh #sGame.sh-land{display:grid!important;grid-template-columns:minmax(0,1fr) clamp(190px,25vw,240px);grid-template-rows:auto minmax(0,1fr) auto;grid-template-areas:"felt side" "felt side" "me side";gap:2px 8px!important;min-height:0;width:100%!important}
.ct.sh #sGame.sh-land>.gk-bar{grid-area:bar;min-height:0!important;height:38px;padding:2px 0!important}
.ct.sh #sGame.sh-land>.gk-bar h2{visibility:visible!important;font-size:16px!important;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ct.sh #sGame.sh-land>.gk-bar .gk-btn.icon{width:36px!important;min-width:36px!important;min-height:36px!important;height:36px}
.ct.sh #sGame.sh-land #tgDock{display:none!important}
.ct.sh #sGame.sh-land #felt{grid-area:felt;--tw:clamp(40px,calc((100dvh - 190px) * .3),56px);min-height:0!important;height:auto!important;margin:0!important;border-width:5px!important;overflow:visible!important;position:relative}
.ct.sh #sGame.sh-land .me{grid-area:me;margin:0!important;z-index:9;pointer-events:auto;position:relative;display:block}
.ct.sh #sGame.sh-land .me .hand{margin:0 4px 0}
/* my seat: a small pill on the near rail of the felt (bottom-left corner), above the hand */
.ct.sh #sGame.sh-land .mebar{position:absolute!important;left:6px;bottom:calc(100% + 4px);min-height:0!important;padding:2px 10px 2px 2px!important;justify-content:flex-start!important;gap:6px;border-radius:999px;background:rgba(14,20,32,.9);border:1px solid #D4AF37;z-index:8;max-width:44%}
.ct.sh #sGame.sh-land .mebar .av,.ct.sh #sGame.sh-land .mebar .avw{width:30px!important;height:30px!important}
.ct.sh #sGame.sh-land .mebar .nm{font-size:15px!important}
.ct.sh #sGame.sh-land .mebar .chip,.ct.sh #sGame.sh-land .mebar .tag{font-size:13px!important}
/* seats sit on the felt edges, compact */
.ct.sh #sGame.sh-land #felt .seat{position:absolute!important;width:auto!important;max-width:150px;display:flex!important;flex-direction:row!important;align-items:center;gap:5px!important;z-index:6;padding:2px 8px 2px 2px;border-radius:999px;background:rgba(14,20,32,.82)}
.ct.sh #sGame.sh-land #felt .seat .avw{width:46px!important;height:46px!important;padding:2px!important;flex:none}
.ct.sh #sGame.sh-land #felt .seat .av{width:42px!important;height:42px!important}
.ct.sh #sGame.sh-land #felt .seat .nm{font-size:14px!important;line-height:1.1;white-space:nowrap;max-width:90px;overflow:hidden;text-overflow:ellipsis;order:2}
.ct.sh #sGame.sh-land #felt .seat .chip{font-size:13px!important;order:3;min-height:0!important}
.ct.sh #sGame.sh-land #felt .seat .mini,.ct.sh #sGame.sh-land #felt .seat .dots{display:none!important}
.ct.sh #sGame.sh-land #felt .seat.s2{left:50%!important;right:auto!important;top:4px!important;transform:translateX(-50%)!important}
.ct.sh #sGame.sh-land #felt .seat.s1{left:6px!important;right:auto!important;top:42%!important;transform:translateY(-50%)!important}
.ct.sh #sGame.sh-land #felt .seat.s3{right:6px!important;left:auto!important;top:42%!important;transform:translateY(-50%)!important}
.ct.sh #sGame.sh-land #felt .seat .bubble{display:none!important}
.ct.sh #sGame.sh-land #felt .trick .slot.p0{left:50%!important;top:calc(54% + var(--tw) * .55)!important}
.ct.sh #sGame.sh-land #felt .trick .slot.p2{left:50%!important;top:calc(54% - var(--tw) * .55)!important}
.ct.sh #sGame.sh-land #felt .trick .slot.p1{left:calc(50% - var(--tw) * .95)!important;top:54%!important}
.ct.sh #sGame.sh-land #felt .trick .slot.p3{left:calc(50% + var(--tw) * .95)!important;top:54%!important}
.ct.sh #sGame.sh-land .sh-widow{top:54%}
.ct.sh #sGame.sh-land #felt .sh-log{bottom:4px;font-size:13px;max-width:62%;right:8px;left:auto;transform:none}
.ct.sh #sGame.sh-land #felt>#msg,.ct.sh #sGame.sh-land #felt>#act{display:none!important}
.ct.sh #sGame.sh-land .trumpb{display:none}
/* side panel */
.ct.sh #sGame.sh-land .sh-side{grid-area:side;display:flex;flex-direction:column;gap:5px;min-height:0;overflow-y:auto;overscroll-behavior:contain;padding:4px 0 6px;-webkit-overflow-scrolling:touch}
.ct.sh #sGame.sh-land .sh-side #sb{position:static!important;inset:auto!important;transform:none!important;width:auto!important;display:flex!important;flex-wrap:wrap!important;gap:4px!important;margin:0!important}
.ct.sh #sGame.sh-land .sh-side #sb .tm{flex:1 1 100%!important;max-width:none!important;flex-direction:row!important;align-items:center;justify-content:space-between;padding:3px 8px!important;min-height:0}
.ct.sh #sGame.sh-land .sh-side #sb .tm .nm{font-size:14px!important;white-space:normal!important;overflow:visible!important;width:auto!important;line-height:1.15}
.ct.sh #sGame.sh-land .sh-side #sb .tm .sc{font-size:18px!important;flex:none}
.ct.sh #sGame.sh-land .sh-side #sb .tgt{flex:1 1 100%!important;font-size:14px!important;padding:2px 8px!important;display:flex;gap:6px;align-items:center;justify-content:center;flex-wrap:wrap}
.ct.sh #sGame.sh-land .sh-side #hudstrip{min-height:0!important;padding:0!important;flex-wrap:wrap;font-size:14px}
.ct.sh #sGame.sh-land .sh-side #hudstrip .infob{font-size:14px!important;padding:3px 8px!important}
.ct.sh #sGame.sh-land .sh-side .sh-dock{display:flex;flex-direction:column;gap:5px;margin:0;padding:0}
.ct.sh #sGame.sh-land .sh-side .sh-next{width:100%;min-height:48px;font-size:18px}
.ct.sh #sGame.sh-land .sh-side #msg{position:static!important;display:block!important;margin:0;padding:4px 8px;border-radius:10px;background:rgba(14,20,32,.88);color:#F4F6F8;font-size:15px;line-height:1.25;white-space:normal!important;overflow:visible!important;text-overflow:clip!important;max-width:none!important;height:auto!important;visibility:visible!important;text-align:left}
.ct.sh #sGame.sh-land .sh-side #msg:empty{display:none!important}
.ct.sh #sGame.sh-land .sh-side .sh-dock:has(#act:not(:empty)) #msg{display:none!important}
.ct.sh #sGame.sh-land .sh-side #act{position:static!important;inset:auto!important;transform:none!important;max-height:none!important;max-width:none!important;width:auto!important;margin:0!important;padding:6px!important;overflow:visible!important;display:block}
.ct.sh #sGame.sh-land .sh-side #act:empty{display:none!important}
.ct.sh #sGame.sh-land .sh-side #act h3{display:block!important;margin:0 0 5px;font-size:15px!important;line-height:1.2}
.ct.sh #sGame.sh-land .sh-side #act .note{display:none!important}
.ct.sh #sGame.sh-land .sh-side #act .row{display:flex;flex-wrap:nowrap;gap:6px}
.ct.sh #sGame.sh-land .sh-side #act .row .gk-btn{flex:1 1 0;min-height:46px;padding:0 6px;font-size:16px}
.ct.sh #sGame.sh-land .sh-side .sh-bid .stepper{display:flex;gap:5px;align-items:center;justify-content:center;margin-top:6px;flex-wrap:nowrap}
.ct.sh #sGame.sh-land .sh-side .sh-bid .stepper .gk-btn.icon{width:44px;min-width:44px;min-height:44px}
.ct.sh #sGame.sh-land .sh-side .sh-bid .stepper b{min-width:30px;text-align:center;font-size:20px;color:#F1D77A}
.ct.sh #sGame.sh-land .sh-side .sh-bid .stepper .gk-btn.gold{flex:1 1 auto;min-height:44px;padding:0 6px}
.ct.sh #sGame.sh-land .sh-side .suits{display:grid!important;grid-template-columns:1fr 1fr;gap:5px}
.ct.sh #sGame.sh-land .sh-side .suitb{min-height:56px!important;padding:3px!important;font-size:13px}
body.sh:has(#sGame.sh-land:not([hidden])) .gk-notices{font-size:12px!important;padding:2px 8px calc(var(--sab) + 2px)!important;line-height:1.2}
.ct.sh #sGame.sh-land #felt .seat .chip{position:static!important;transform:none!important;margin:0!important;white-space:nowrap}
.ct.sh #sGame.sh-land #felt .seat .chip:empty{display:none!important}
.ct.sh #sGame.sh-land .sh-side #sb .tgt{flex-direction:row!important;min-height:0!important}
.ct.sh #sGame.sh-land .sh-side #sb .tgt b{font-size:16px!important}
.ct.sh #sGame.sh-land .sh-side #hudstrip .infob,.ct.sh #sGame.sh-land .sh-side #hudstrip .trumpb{position:static!important;width:100%;max-width:none!important;white-space:normal!important;overflow:visible!important;text-overflow:clip!important;text-align:left;border-radius:10px!important;margin:0!important;transform:none!important}
/* t9093u: seats AROUND the table in landscape — side robots outside the felt, partner straddles the top rail, my pill outside the bottom-left corner */
.ct.sh #sGame.sh-land>.gk-bar h2{visibility:hidden!important}
.ct.sh #sGame.sh-land #felt{margin:26px 94px 0!important}
.ct.sh #sGame.sh-land #felt .seat.s1,.ct.sh #sGame.sh-land #felt .seat.s3{flex-direction:column!important;width:90px!important;max-width:90px;padding:2px!important;gap:1px!important;background:none!important;top:46%!important}
.ct.sh #sGame.sh-land #felt .seat.s1{left:-97px!important}
.ct.sh #sGame.sh-land #felt .seat.s3{right:-97px!important}
.ct.sh #sGame.sh-land #felt .seat.s1 .nm,.ct.sh #sGame.sh-land #felt .seat.s3 .nm{max-width:90px;padding:1px 5px;border-radius:8px;background:rgba(14,20,32,.92)}
.ct.sh #sGame.sh-land #felt .seat.s1 .avw,.ct.sh #sGame.sh-land #felt .seat.s3 .avw{width:52px!important;height:52px!important}
.ct.sh #sGame.sh-land #felt .seat.s1 .av,.ct.sh #sGame.sh-land #felt .seat.s3 .av{width:48px!important;height:48px!important}
.ct.sh #sGame.sh-land #felt .seat.s2{top:-30px!important;max-width:none}
.ct.sh #sGame.sh-land .mebar{left:0;bottom:calc(100% + 2px);flex-wrap:wrap;max-width:90px!important;width:90px;padding:3px!important;border-radius:12px!important;justify-content:center!important;gap:2px 4px}
.ct.sh #sGame.sh-land #felt .sh-log{max-width:80%;left:50%;right:auto;transform:translateX(-50%);bottom:4px}
/* t9093u: the top bar (back, mute, help, settings) lives at the top of the side panel in landscape, so the felt gets the height */
.ct.sh #sGame.sh-land .sh-side>.gk-bar{height:auto;min-height:0!important;padding:0!important;margin:0!important;display:flex;justify-content:space-between;gap:4px;flex:none}
.ct.sh #sGame.sh-land .sh-side>.gk-bar h2{display:none!important}
.ct.sh #sGame.sh-land .sh-side>.gk-bar .gk-btn.icon{width:44px!important;min-width:44px!important;height:40px;min-height:40px!important}
.ct.sh #sGame.sh-land #felt{margin:32px 94px 4px!important}
.ct.sh #sGame.sh-land #felt .seat.s1,.ct.sh #sGame.sh-land #felt .seat.s3{top:38%!important}
.ct.sh #sGame.sh-land .sh-side #act .sh-bid h3{display:none!important}
.ct.sh #sGame.sh-land #felt .seat.s1,.ct.sh #sGame.sh-land #felt .seat.s3{top:-4px!important;transform:none!important}
.ct.sh #sGame.sh-land .sh-side:has(#act:not(:empty)) #hudstrip{display:none!important}
.ct.sh #sGame.sh-land .sh-side #sb .tm{padding:2px 8px!important}
/* very short landscape (Safari with bars): my pill moves into the hand row on the left so it never touches a side seat */
@media (orientation:landscape) and (max-height:370px){
  .ct.sh #sGame.sh-land .me{padding-left:94px}
  .ct.sh #sGame.sh-land .mebar{bottom:auto!important;top:6px;left:0}
}
.ct.sh #sGame.sh-land .me{padding-left:94px}
.ct.sh #sGame.sh-land .mebar{bottom:auto!important;top:6px;left:0}
/* t9092u/t9093u: landscape phones — title screen is brand on the left, options on the right (scrolls), Deal always on screen */
@media (orientation:landscape) and (max-height:560px){
  body.sh #sTitle{min-height:0}
  body.sh .gk-title.sh-title{display:grid!important;grid-template-columns:minmax(0,30%) minmax(0,1fr)!important;gap:12px!important;align-items:stretch!important;justify-content:stretch!important;flex:1 1 0!important;min-height:0!important;overflow:hidden!important;padding:0!important;margin:0!important}
  body.sh .sh-title .gk-brand{position:static!important;display:flex!important;flex-direction:column;align-items:center;justify-content:center;min-width:0!important;max-width:none!important;width:auto!important;transform:none!important;flex:none!important;overflow:hidden}
  body.sh .sh-title .sh-hero{width:190px;height:84px;transform:none}
  body.sh .sh-title .sh-hero img{width:70px;height:70px}
  body.sh .sh-title .sh-hero .fan .pc,body.sh .sh-title .sh-hero .fan .card{width:46px}
  body.sh .sh-title .gk-logo{font-size:clamp(22px,4.2vh,34px)!important;line-height:1.05;text-align:center;margin:4px 0 2px!important}
  body.sh .sh-title .gk-host{font-size:14px!important;text-align:center;margin:0!important}
  body.sh .sh-title .sh-panel{min-height:0!important;max-height:100%!important;overflow-y:auto!important;overscroll-behavior:contain;max-width:none!important;width:auto!important;margin:0!important;padding-bottom:0!important;flex:none!important}
  body.sh .sh-title .sh-panel .ct-acts{position:sticky;bottom:0;z-index:3;margin:6px -4px 0;padding:6px 4px;background:linear-gradient(rgba(26,31,43,0),#1A1F2B 30%)}
}
@media (orientation:landscape) and (max-height:560px){
  body.sh .sh-title .gk-brand{justify-content:center!important;gap:4px}
  body.sh .sh-title #tTtl{position:static!important;inset:auto!important;width:auto!important;transform:none!important;display:block!important}
  body.sh .sh-title .gk-host{display:block!important}
}
/* ===== owner t9094u: one slim score bar under the header + the action panel in that top area (portrait, landscape, home-screen) ===== */
.sh-top{position:relative;display:flex;flex-direction:column;gap:5px;flex:none;z-index:20}
.sh-score{display:flex;align-items:center;gap:8px;width:100%;min-height:38px;padding:4px 12px;border-radius:999px;border:1px solid #D4AF37;background:linear-gradient(#1F2533,#141A26);color:#F4F6F8;font:600 15px/1.2 inherit;font-family:inherit;text-align:left;cursor:pointer}
.sh-score .sh-sl{flex:1 1 auto;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sh-score b{color:#F1D77A;font-size:17px}
.sh-score i{font-style:normal;color:#C0C6CC;padding:0 1px}
.sh-score .sh-str{flex:none;display:inline-flex;align-items:center;gap:3px;padding:1px 8px;border-radius:999px;background:rgba(212,175,55,.16);color:#F1D77A;font-weight:700}
.sh-score .sh-car{flex:none;color:#D4AF37;font-size:14px}
.sh-score[aria-expanded="true"] .sh-car{transform:rotate(180deg)}
.sh-score:focus-visible{outline:3px solid #F1D77A;outline-offset:2px}
.sh-drop{position:absolute;left:0;right:0;top:44px;z-index:40;max-height:min(70vh,520px);overflow-y:auto;padding:10px 12px;border-radius:14px;border:1px solid #D4AF37;background:#121826;color:#F4F6F8;box-shadow:0 14px 30px rgba(0,0,0,.6);font-size:15px}
.sh-drop[hidden]{display:none!important}
.sh-drop .sh-drow{display:flex;justify-content:space-between;gap:10px;padding:5px 2px;border-bottom:1px solid rgba(192,198,204,.18)}
.sh-drop .sh-drow.us span{color:#F1D77A;font-weight:700}
.sh-drop .sh-drow b{color:#F1D77A;font-size:17px}
.sh-drop .sh-drow.tg{border-bottom:0;color:#C0C6CC}
.sh-drop .sh-dh{margin:10px 0 4px;color:#C0C6CC;font-size:13px;font-weight:800;letter-spacing:.06em;text-transform:uppercase}
.sh-drop .sh-dbids{display:flex;flex-wrap:wrap;gap:4px;margin:0}
.sh-drop .sh-dbids span{padding:2px 8px;border-radius:999px;background:#F1D77A;color:#1A1A1A;font-weight:700;font-size:14px}
.sh-drop .sh-dbids span.p{background:#C0C6CC}
.sh-drop .sh-dcur{margin:8px 0 0}
.sh-drop .sh-dnone{margin:0;color:#C0C6CC}
.sh-drop .sh-dhist{margin:0;padding:0;list-style:none}
.sh-drop .sh-dhist li{display:flex;justify-content:space-between;gap:8px;padding:4px 0;border-bottom:1px solid rgba(192,198,204,.14)}
.sh-drop em{font-style:normal;font-weight:800}.sh-drop em.ok{color:#3EE07A}.sh-drop em.set{color:#FF7A7A}
.ct.sh #sGame.sh-docked #sb,.ct.sh #sGame.sh-land #sb,.ct.sh #sGame.sh-docked #hudstrip,.ct.sh #sGame.sh-land #hudstrip{display:none!important}
.ct.sh #sGame.sh-docked .sh-top .sh-dock{margin:0!important;padding:0!important}
.ct.sh #sGame.sh-land .sh-top .sh-score{font-size:14px;padding:4px 10px}
.ct.sh #sGame.sh-land .sh-top .sh-drop{max-height:calc(100dvh - 110px)}
.ct.sh #sGame.sh-land .sh-top .sh-score{border-radius:14px;align-items:center}
.ct.sh #sGame.sh-land .sh-top .sh-score .sh-sl{white-space:normal;overflow:visible}
.ct.sh #sGame.sh-land .sh-side .sh-bid .stepper{gap:4px}
.ct.sh #sGame.sh-land .sh-side .sh-bid .stepper .gk-btn.icon{width:40px;min-width:40px;flex:none}
.ct.sh #sGame.sh-land .sh-side .sh-bid .stepper .gk-btn.gold{min-width:0;flex:1 1 0}
.ct.sh #sGame.sh-land .sh-side #act{overflow:hidden!important}
/* t9092u: landscape phones — meld / hand-over / game-over sheets use the full height, two columns, and the button is always on screen */
@media (orientation:landscape) and (max-height:560px){
  body.sh #shMeld,body.sh #shHand,body.sh #shEnd{padding:calc(var(--sat) + 6px) calc(var(--sar) + 10px) calc(var(--sab) + 6px) calc(var(--sal) + 10px)!important}
  body.sh #shMeld .gk-card,body.sh #shHand .gk-card,body.sh #shEnd .gk-card{width:min(820px,100%)!important;max-width:none!important;max-height:100%!important;display:flex!important;flex-direction:column;overflow:hidden!important;padding:10px 14px!important}
  body.sh #shMeld h2,body.sh #shHand h2,body.sh #shEnd h2{margin:0 0 6px!important;font-size:20px!important;flex:none}
  body.sh #mdBody,body.sh #hrBody{flex:1 1 auto;min-height:0;overflow-y:auto;display:grid;grid-template-columns:1fr 1fr;gap:8px;align-content:start}
  body.sh #mdBody>*,body.sh #hrBody>*{margin:0!important}
  body.sh #shMeld .row,body.sh #shHand .row,body.sh #shEnd .row{flex:none;margin-top:8px!important}
}
@media (orientation:landscape) and (max-height:560px){
  body.sh #mdBody{display:block!important}
  body.sh #mdBody .meldl{display:grid!important;grid-template-columns:1fr 1fr;gap:8px}
  body.sh #mdBody .sh-sum,body.sh #mdBody .big-res{margin:0 0 6px!important}
  body.sh #hrBody{display:block!important}
}
.ct.sh #sGame.sh-land #felt .seat .tag{position:static!important;order:4;font-size:13px!important;padding:1px 6px!important;margin:0!important;white-space:nowrap}
.ct.sh #sGame.sh-land #felt .seat .tag{position:absolute!important;top:-6px!important;left:-10px!important;right:auto!important;z-index:3;font-size:12px!important;line-height:1.2}
.ct.sh #sGame.sh-land #felt .seat.s2 .tag{top:auto!important;bottom:-8px!important;left:-14px!important}
/* ===== tfPN3 (Repair Two P1a/P2): Deal always on screen, compact lobby, seat rows, settings Done, 3-hand score bar ===== */
body.sh .sh-title .sh-panel .ct-acts{position:sticky;bottom:0;z-index:4;margin-top:8px;padding:8px 0 6px;background:linear-gradient(rgba(26,31,43,0),#1A1F2B 26%)}
body.sh .sh-title #btnLeaveRoom{position:relative;z-index:4}
@media (orientation:portrait) and (max-height:900px){
  body.sh .sh-title .sh-hero{height:86px;width:220px}
  body.sh .sh-title .sh-hero img{width:76px;height:76px;top:4px}
  body.sh .sh-title .sh-hero .fan .pc,body.sh .sh-title .sh-hero .fan .card{width:50px}
  body.sh .sh-title .gk-logo{margin-top:0!important;margin-bottom:4px!important}
  body.sh .sh-title .sh-panel .lbl{margin-top:6px!important;margin-bottom:4px!important}
  body.sh .sh-title .sh-panel .gk-seg button{min-height:44px}
}
@media (max-width:440px){body.sh .gk-notices{font-size:13px!important;line-height:1.25!important;padding-top:4px!important;padding-bottom:calc(var(--sab) + 4px)!important}}
.sh .seatlist li{padding:5px 8px;gap:8px}
.sh .seatlist .nm{display:flex;flex-direction:column;gap:1px;line-height:1.2}
.sh .seatlist .sh-seatlbl small{color:#C0C6CC;font-weight:600;font-size:13px}
.sh .seatlist .sh-who{font-size:15px}
.sh .seatlist .sh-who small{display:block;font-size:13px}
.sh .seatlist .sav{width:34px;height:34px;flex:none}
.sh .seatlist .sh-seatsel{max-width:46%;min-height:44px;font-size:15px}
/* settings sheet: content scrolls, Done stays on screen inside the safe area */
body.sh #shSet .gk-card{max-height:100%;overflow-y:auto;overscroll-behavior:contain}
body.sh #shSet .gk-card>.row:last-child{position:sticky;bottom:-1px;z-index:3;margin:8px 0 0;padding:8px 0 calc(var(--sab) + 4px);background:linear-gradient(rgba(18,24,38,0),#121826 30%)}
body.sh #shSet{padding-bottom:calc(var(--sab) + 10px)!important}
/* 3-hand: three names + target wrap to two lines instead of cutting "to 150" */
.ct.sh #sGame.sh3 .sh-score{border-radius:14px}
.ct.sh #sGame.sh3 .sh-score .sh-sl{white-space:normal;overflow:visible;text-overflow:clip}
body.sh .sh-title .gk-logo{position:relative;z-index:2;margin-top:6px!important}
/* ===== tfPN4 (TestMu real iPhone/Galaxy + owner t9104u/t9105u) ===== */
/* iOS 26 Safari's floating toolbar sits over the bottom of a fixed full-height app: size the app to the SMALL viewport so nothing hides under it */
@supports (height:100svh){body.sh .gk-app{bottom:auto!important;height:100svh!important}}
/* bid history never sits on the felt or over a seat (owner item 6): seats show each bid, the score-bar dropdown lists them all */
.sh .sh-log{display:none!important}
/* portrait header: title never touches the sound button */
@media (orientation:portrait){.ct.sh #sGame .gk-bar h2{font-size:16px!important;padding:0 6px;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1 1 auto}}
/* meld / hand-over / end sheets: the list scrolls, the button is always on screen (all orientations) */
body.sh #shMeld,body.sh #shHand,body.sh #shEnd{padding-top:calc(var(--sat) + 10px)!important;padding-bottom:calc(var(--sab) + 10px)!important}
body.sh #shMeld .gk-card,body.sh #shHand .gk-card,body.sh #shEnd .gk-card{max-height:100%!important;display:flex!important;flex-direction:column;overflow:hidden!important}
body.sh #mdBody,body.sh #hrBody,body.sh #eBody{flex:1 1 auto;min-height:0;overflow-y:auto;overscroll-behavior:contain}
body.sh #shMeld .gk-card>.row,body.sh #shHand .gk-card>.row,body.sh #shEnd .gk-card>.row{flex:none}
/* phone landscape: meld players side by side in ONE row so nothing hides behind the button */
@media (orientation:landscape) and (max-height:560px){
  body.sh #mdBody .meldl{grid-template-columns:repeat(4,minmax(0,1fr))!important;gap:6px!important}
  body.sh #mdBody .meldl>*{padding:6px!important;font-size:13px}
  body.sh #mdBody .meldl .card,body.sh #mdBody .meldl svg{max-width:26px}
  body.sh #shMeld h2,body.sh #shHand h2{font-size:17px!important;margin-bottom:4px!important}
}
/* phone landscape side column: a bit wider, slim one-line score bar, dropdown floats over the table (never clipped) */
.ct.sh #sGame.sh-land:not(.sh-desk){grid-template-columns:minmax(0,1fr) clamp(206px,29vw,250px)}
.ct.sh #sGame.sh-land:not(.sh-desk) .sh-top .sh-score{font-size:13px;padding:3px 8px;min-height:34px;gap:5px}
.ct.sh #sGame.sh-land:not(.sh-desk) .sh-top .sh-score .sh-sl{white-space:nowrap!important;overflow:hidden!important}
.ct.sh #sGame.sh-land:not(.sh-desk) .sh-top .sh-score b{font-size:15px}
.ct.sh #sGame.sh-land:not(.sh-desk) .sh-top .sh-score .sh-str{padding:1px 5px}
.ct.sh #sGame.sh-land .sh-score .sh-to{color:#C0C6CC;font-size:12px}
.ct.sh #sGame.sh-land .sh-top .sh-drop{position:fixed!important;top:calc(var(--sat) + 8px)!important;right:calc(var(--sar) + 8px)!important;left:auto!important;width:min(340px,70vw);max-height:calc(100svh - var(--sat) - var(--sab) - 16px)!important;z-index:60}
/* phone landscape trump: all four suits in one row */
.ct.sh #sGame.sh-land .sh-side .suits{grid-template-columns:repeat(4,minmax(0,1fr))!important;gap:4px!important}
.ct.sh #sGame.sh-land .sh-side .suitb{min-height:52px!important;max-width:none!important;padding:2px!important;font-size:11px!important;line-height:1.1}
.ct.sh #sGame.sh-land .sh-side .suitb svg{width:20px;height:20px}
/* phone landscape "You" box: compact, never over the first card */
.ct.sh #sGame.sh-land:not(.sh-desk) .me{padding-left:92px!important}
.ct.sh #sGame.sh-land:not(.sh-desk) .mebar{width:86px!important;max-width:86px!important;top:2px!important;gap:1px 3px!important;padding:2px!important}
.ct.sh #sGame.sh-land:not(.sh-desk) .mebar .av,.ct.sh #sGame.sh-land:not(.sh-desk) .mebar .avw{width:24px!important;height:24px!important}
.ct.sh #sGame.sh-land:not(.sh-desk) .mebar .nm{font-size:13px!important}
.ct.sh #sGame.sh-land:not(.sh-desk) .mebar .chip,.ct.sh #sGame.sh-land:not(.sh-desk) .mebar .tag,.ct.sh #sGame.sh-land:not(.sh-desk) .mebar .sh-tk{font-size:11px!important;min-height:0!important;padding:0 5px!important;line-height:1.3}
/* very short phone landscape (Safari with toolbar, ~300 tall) */
@media (orientation:landscape) and (max-height:340px){
  .ct.sh #sGame.sh-land #felt{margin:28px 88px 2px!important;--tw:38px}
  .ct.sh #sGame.sh-land #felt .seat.s1,.ct.sh #sGame.sh-land #felt .seat.s3{width:84px!important}
  .ct.sh #sGame.sh-land #felt .seat.s1{left:-90px!important}.ct.sh #sGame.sh-land #felt .seat.s3{right:-90px!important}
  .ct.sh #sGame.sh-land #felt .seat .avw{width:40px!important;height:40px!important}
  .ct.sh #sGame.sh-land #felt .seat .av{width:36px!important;height:36px!important}
  .ct.sh #sGame.sh-land #felt .seat .nm{font-size:12px!important}
  .ct.sh #sGame.sh-land .sh-side>.gk-bar .gk-btn.icon{height:34px;min-height:34px!important;width:40px!important;min-width:40px!important}
  .ct.sh #sGame.sh-land .sh-side #act .row .gk-btn,.ct.sh #sGame.sh-land .sh-side .sh-bid .stepper .gk-btn{min-height:40px!important}
  .ct.sh #sGame.sh-land .sh-side .sh-next{min-height:42px}
  body.sh .gk-notices{font-size:11px!important;padding-top:1px!important;padding-bottom:calc(var(--sab) + 1px)!important}
}
/* ===== desktop / laptop (owner t9105u): full-width wide layout, big felt, big cards, roomy side panel ===== */
.ct.sh #sGame.sh-desk{width:100%!important;max-width:none!important;margin:0!important;grid-template-columns:minmax(0,1fr) clamp(300px,24vw,380px)!important;gap:6px 18px!important}
.ct.sh #sGame.sh-desk #felt{margin:64px 170px 10px!important;--tw:clamp(72px,calc((100svh - 330px) * .26),120px);border-width:10px!important}
.ct.sh #sGame.sh-desk #felt .seat .avw{width:96px!important;height:96px!important}
.ct.sh #sGame.sh-desk #felt .seat .av{width:90px!important;height:90px!important}
.ct.sh #sGame.sh-desk #felt .seat .nm{font-size:18px!important;max-width:160px}
.ct.sh #sGame.sh-desk #felt .seat .chip{font-size:16px!important}
.ct.sh #sGame.sh-desk #felt .seat.s1,.ct.sh #sGame.sh-desk #felt .seat.s3{width:160px!important;max-width:160px;top:12%!important}
.ct.sh #sGame.sh-desk #felt .seat.s1{left:-168px!important}.ct.sh #sGame.sh-desk #felt .seat.s3{right:-168px!important}
.ct.sh #sGame.sh-desk #felt .seat.s1 .nm,.ct.sh #sGame.sh-desk #felt .seat.s3 .nm{max-width:160px}
.ct.sh #sGame.sh-desk #felt .seat.s2{top:-58px!important;padding:3px 14px 3px 3px}
.ct.sh #sGame.sh-desk #felt .seat.s2 .avw{width:84px!important;height:84px!important}.ct.sh #sGame.sh-desk #felt .seat.s2 .av{width:78px!important;height:78px!important}
.ct.sh #sGame.sh-desk #felt .seat .tag{font-size:15px!important}
.ct.sh #sGame.sh-desk .me{padding-left:180px!important}
.ct.sh #sGame.sh-desk .mebar{width:168px!important;max-width:168px!important;top:10px!important;padding:6px!important;gap:4px 6px!important}
.ct.sh #sGame.sh-desk .mebar .av,.ct.sh #sGame.sh-desk .mebar .avw{width:56px!important;height:56px!important}
.ct.sh #sGame.sh-desk .mebar .nm{font-size:18px!important}
.ct.sh #sGame.sh-desk .mebar .chip,.ct.sh #sGame.sh-desk .mebar .tag{font-size:15px!important}
.ct.sh #sGame.sh-desk .sh-side{gap:10px;padding-top:8px}
.ct.sh #sGame.sh-desk .sh-side>.gk-bar .gk-btn.icon{width:52px!important;min-width:52px!important;height:48px;min-height:48px!important}
.ct.sh #sGame.sh-desk .sh-top .sh-score{font-size:17px;min-height:48px;padding:6px 14px;border-radius:14px}
.ct.sh #sGame.sh-desk .sh-top .sh-score b{font-size:20px}
.ct.sh #sGame.sh-desk .sh-side #msg{font-size:18px!important;padding:8px 12px}
.ct.sh #sGame.sh-desk .sh-side .sh-next{min-height:60px;font-size:22px}
.ct.sh #sGame.sh-desk .sh-side #act{padding:10px!important}
.ct.sh #sGame.sh-desk .sh-side #act h3{font-size:18px!important}
.ct.sh #sGame.sh-desk .sh-side #act .row .gk-btn,.ct.sh #sGame.sh-desk .sh-side .sh-bid .stepper .gk-btn{min-height:56px!important;font-size:19px}
.ct.sh #sGame.sh-desk .sh-side .sh-bid .stepper .gk-btn.icon{width:56px!important;min-width:56px!important}
.ct.sh #sGame.sh-desk .sh-side .sh-bid .stepper b{font-size:26px}
.ct.sh #sGame.sh-desk .sh-side .suits{grid-template-columns:repeat(2,minmax(0,1fr))!important;gap:8px!important}
.ct.sh #sGame.sh-desk .sh-side .suitb{min-height:84px!important;font-size:15px!important}
.ct.sh #sGame.sh-desk .sh-side .suitb svg{width:30px;height:30px}
.ct.sh #sGame.sh-desk .sh-top .sh-drop{width:380px;font-size:16px}
body.sh.sh-deskb .gk-app{padding-left:calc(var(--sal) + 18px)!important;padding-right:calc(var(--sar) + 18px)!important}
.ct.sh #sGame.sh-land #hand:not(.two) .hc{bottom:12px}
.ct.sh #sGame.sh-desk #felt .seat.s1 .avw,.ct.sh #sGame.sh-desk #felt .seat.s3 .avw{width:104px!important;height:104px!important}
.ct.sh #sGame.sh-desk #felt .seat.s1 .av,.ct.sh #sGame.sh-desk #felt .seat.s3 .av{width:98px!important;height:98px!important}
.ct.sh #sGame.sh-desk #felt .seat.s1 .nm,.ct.sh #sGame.sh-desk #felt .seat.s3 .nm{font-size:18px!important}
.ct.sh #sGame.sh-land:not(.sh-desk) .mebar .bubble{display:none!important}
/* tfPN5: score dropdown is viewport-fixed (JS placeDrop), fully inside the safe area; clear close X */
.sh-drop{position:fixed;z-index:80;max-width:calc(100vw - var(--sal) - var(--sar) - 16px);box-sizing:border-box;overflow-y:auto;-webkit-overflow-scrolling:touch}
.sh-drop .sh-dhd{display:flex;align-items:center;justify-content:space-between;gap:8px;margin:-4px -4px 8px 0;font-weight:800;color:#F1D77A;font-size:15px;letter-spacing:.04em;text-transform:uppercase}
.sh-drop .sh-dx{flex:none;width:44px;height:44px;margin:-6px -8px -6px 0;border:0;border-radius:10px;background:transparent;color:#F1D77A;font-size:28px;line-height:1;cursor:pointer;padding:0}
.sh-drop .sh-dx:focus-visible{outline:3px solid #F1D77A;outline-offset:2px}
.ct.sh #sGame.sh-land .sh-top .sh-drop{position:fixed!important;left:auto;right:auto;width:auto;max-width:calc(100vw - var(--sal) - var(--sar) - 16px)!important;max-height:none}

/* tfPN7: after Leave, the table must not paint over the lobby (fixed descendants, leftover flies). */
.ct.sh #sGame[hidden], .sh #sGame[hidden]{display:none!important;visibility:hidden!important;pointer-events:none!important}
.ct.sh #sGame[hidden] *, .sh #sGame[hidden] *{visibility:hidden!important;pointer-events:none!important}

/* ===== tfPN9 / owner t9118u: true full-screen desktop & laptop (≥1024 wide, landscape, height ≥560).
   Phone portrait and phone landscape are untouched — every rule in this block is gated on the media
   query and/or #sGame.sh-desk (which JS only sets when deskWide() is true). ===== */

/* --- Setup / title: wide two-column panel, Deal on screen with no scrolling at 1366×768 and 1440×900 --- */
@media (min-width:1024px) and (min-height:560px) and (orientation:landscape){
  body.sh{overflow:hidden}
  body.sh .gk-app{overflow:hidden;padding-left:calc(var(--sal) + 20px)!important;padding-right:calc(var(--sar) + 20px)!important}
  body.sh #sTitle{min-height:0;overflow:hidden;display:flex;flex-direction:column}
  body.sh .gk-title.sh-title{
    display:flex!important;flex-direction:column!important;flex-wrap:nowrap!important;
    align-items:stretch!important;justify-content:flex-start!important;align-content:stretch!important;
    width:100%!important;max-width:1520px;margin:0 auto!important;
    flex:1 1 0!important;min-height:0!important;overflow:hidden!important;
    padding:4px 8px 8px!important;gap:10px!important;
  }
  body.sh .sh-title>:first-child,body.sh .sh-title>:last-child{margin-top:0!important;margin-bottom:0!important}
  /* compact brand: hero + title on one horizontal row, so the panel gets the height */
  body.sh .sh-title .gk-brand{
    flex:none!important;display:flex!important;flex-direction:row!important;flex-wrap:nowrap;
    align-items:center;justify-content:center;gap:18px;min-width:0!important;max-width:none!important;
    width:auto!important;transform:none!important;overflow:visible;margin:0 auto;
  }
  body.sh .sh-title .sh-hero{width:200px;height:88px;margin:0;flex:none;transform:none}
  body.sh .sh-title .sh-hero img{width:76px;height:76px;top:6px}
  body.sh .sh-title .sh-hero .fan{height:80px;top:4px}
  body.sh .sh-title .sh-hero .fan .pc,body.sh .sh-title .sh-hero .fan .card{width:50px}
  body.sh .sh-title .gk-logo,body.sh .sh-title #tTtl{
    position:static!important;inset:auto!important;width:auto!important;transform:none!important;display:block!important;
    font-size:clamp(32px,3.2vw,52px)!important;line-height:1.05;margin:0!important;text-align:left;
  }
  body.sh .sh-title .gk-host{display:block!important;font-size:clamp(15px,1.3vw,20px)!important;margin:4px 0 0!important;text-align:left;color:#f2e6c9}
  body.sh .sh-title .gk-brand{flex-wrap:wrap}
  /* the panel uses the full width — no 440px phone column */
  body.sh .sh-title .sh-panel,body.sh .gk-title .gk-panel{
    width:100%!important;max-width:none!important;flex:1 1 auto!important;min-height:0!important;
    max-height:none!important;overflow:hidden!important;margin:0!important;
    padding:18px 24px 16px!important;
    display:grid!important;
    grid-template-columns:minmax(0,1.05fr) minmax(0,1fr);
    grid-auto-rows:auto;
    column-gap:36px;row-gap:8px;
    align-content:start;
    box-sizing:border-box;
  }
  /* cfgBox children join the same grid so Partner is left, Skill/Play-to/Deal are right */
  body.sh .sh-title #cfgBox{display:contents}
  body.sh .sh-title #pickBox{grid-column:1;grid-row:1}
  body.sh .sh-title #plyBlock{grid-column:1;grid-row:2}
  body.sh .sh-title #ptBlock{grid-column:1;grid-row:3}
  body.sh .sh-title #lvBox{grid-column:2;grid-row:1}
  body.sh .sh-title #tgtBlock{grid-column:2;grid-row:2}
  body.sh .sh-title #passBlock{display:none} /* pass is mandatory; the option is already hidden */
  body.sh .sh-title .ct-acts{grid-column:2;grid-row:3;align-self:end;margin-top:8px!important;position:static!important;background:none!important;padding:0!important}
  body.sh .sh-title #recLine{grid-column:1/-1;grid-row:4;margin:4px 0 0;text-align:left;font-size:16px}
  body.sh .sh-title #waitNote,body.sh .sh-title #btnLeaveRoom{grid-column:1/-1}
  /* invite: name/Players/Create fill the left column under Play with; Players stays above Create (tfPN8) */
  body.sh .sh-title #onlineBox:not([hidden]){grid-column:1;grid-row:2/span 3;display:flex;flex-direction:column;gap:2px;min-height:0;overflow:hidden}
  body.sh .sh-title:has(#onlineBox:not([hidden])) #ptBlock{grid-column:2;grid-row:3}
  body.sh .sh-title:has(#onlineBox:not([hidden])) .ct-acts{grid-column:2;grid-row:4;align-self:start}
  body.sh .sh-title:has(#onlineBox:not([hidden])) #recLine{grid-row:5}
  body.sh .sh-title #roomBox:not([hidden]){grid-column:1;grid-row:1/span 4;min-height:0;overflow:auto}
  body.sh .sh-title:has(#roomBox:not([hidden])) #pickBox{display:none}
  body.sh .sh-title:has(#roomBox:not([hidden])) #ptBlock{grid-column:2;grid-row:3}
  body.sh .sh-title:has(#roomBox:not([hidden])) .ct-acts{grid-column:2;grid-row:4}
  body.sh .sh-title .sh-panel .lbl{margin:4px 0 6px!important;font-size:15px!important;letter-spacing:.08em;color:#fff8e6}
  body.sh .sh-title .sh-panel .gk-seg button{min-height:52px;font-size:17px}
  body.sh .sh-title .sh-panel .ptr button{min-height:96px;font-size:16px;padding:8px 6px}
  body.sh .sh-title .sh-panel .ptr button img{width:64px;height:64px}
  body.sh .sh-title .sh-panel .sh-hint,.sh .sh-title #oppsLine{font-size:15px;color:#f2e6c9;margin:4px 0 0}
  body.sh .sh-title .sh-panel .lvw{font-size:15px}
  body.sh .sh-title .sh-panel .lvn,.body.sh .sh-title .lvrow .gk-btn.icon{min-height:48px;font-size:18px}
  body.sh .sh-title .sh-panel .sh-in{font-size:18px;min-height:50px}
  body.sh .sh-title .ct-acts .gk-btn{min-height:60px;font-size:22px}
  body.sh .sh-title #btnDeal{min-height:64px;font-size:24px;font-weight:800}
  body.sh .sh-title #btnCreate{min-height:56px;font-size:20px}
  body.sh .gk-notices{flex:none}
}
/* short laptops (1024×600, 1024×640, 1280×720): tighten brand and gaps so everything still fits */
@media (min-width:1024px) and (min-height:560px) and (max-height:740px) and (orientation:landscape){
  body.sh .sh-title .sh-hero{width:150px;height:64px}
  body.sh .sh-title .sh-hero img{width:56px;height:56px;top:4px}
  body.sh .sh-title .gk-logo,body.sh .sh-title #tTtl{font-size:clamp(26px,2.8vw,36px)!important}
  body.sh .sh-title .gk-host{font-size:14px!important;margin:2px 0 0!important}
  body.sh .sh-title .sh-panel{padding:12px 16px 10px!important;column-gap:22px;row-gap:4px}
  body.sh .sh-title .sh-panel .ptr button{min-height:76px;font-size:14px;padding:4px}
  body.sh .sh-title .sh-panel .ptr button img{width:48px;height:48px}
  body.sh .sh-title .sh-panel .gk-seg button{min-height:44px;font-size:15px}
  body.sh .sh-title .ct-acts .gk-btn,body.sh .sh-title #btnDeal{min-height:52px;font-size:20px}
  body.sh .sh-title .gk-brand{gap:12px}
  body.sh .gk-title.sh-title{padding:2px 4px 4px!important;gap:6px!important}
}
@media (min-width:1600px) and (min-height:900px) and (orientation:landscape){
  body.sh .sh-title .sh-panel{padding:24px 32px 20px!important;column-gap:48px}
  body.sh .sh-title .sh-panel .ptr button{min-height:112px}
  body.sh .sh-title .sh-panel .ptr button img{width:80px;height:80px}
  body.sh .sh-title #btnDeal{min-height:72px;font-size:26px}
}

/* --- Table: felt fills the viewport; slim top chrome (no fat empty right column); big cards and avatars --- */
.ct.sh #sGame.sh-desk{
  display:grid!important;
  grid-template-columns:minmax(0,1fr)!important;
  grid-template-rows:auto minmax(0,1fr) auto!important;
  grid-template-areas:"chrome" "felt" "me"!important;
  gap:6px 0!important;
  width:100%!important;max-width:none!important;margin:0!important;
  min-height:0;height:100%;overflow:hidden!important;
  box-sizing:border-box;
}
.ct.sh #sGame.sh-desk #shChrome{
  grid-area:chrome;display:flex;flex-direction:row;align-items:center;gap:10px;
  min-height:48px;flex:none;z-index:20;min-width:0;
}
.ct.sh #sGame.sh-desk #shChrome>.gk-bar{
  flex:none;display:flex;align-items:center;gap:6px;min-height:0!important;height:auto;padding:0!important;
  background:none;border:0;margin:0;width:auto;
}
.ct.sh #sGame.sh-desk #shChrome>.gk-bar h2{display:none!important}
.ct.sh #sGame.sh-desk #shChrome>.gk-bar .gk-btn.icon,
.ct.sh #sGame.sh-desk #shChrome>.gk-bar #gBack{
  width:48px!important;min-width:48px!important;height:44px;min-height:44px!important;
}
.ct.sh #sGame.sh-desk #shChrome #shTop{
  flex:1 1 auto;min-width:0;display:flex;flex-direction:row;align-items:center;gap:10px;
  position:relative;
}
.ct.sh #sGame.sh-desk #shChrome #shTop .sh-score{
  flex:0 1 460px;min-width:200px;min-height:46px;font-size:17px;padding:6px 14px;border-radius:14px;
}
.ct.sh #sGame.sh-desk #shChrome #shTop .sh-score b{font-size:20px}
.ct.sh #sGame.sh-desk #shChrome #shTop .sh-dock{
  flex:1 1 auto;min-width:0;display:flex;flex-direction:row;align-items:center;gap:10px;margin:0;padding:0;
}
.ct.sh #sGame.sh-desk #shChrome #msg{
  position:static!important;display:block!important;flex:1 1 auto;min-width:0;
  margin:0;padding:6px 12px;border-radius:12px;
  background:rgba(14,20,32,.88);color:#F4F6F8;font-size:17px;line-height:1.25;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:none!important;height:auto!important;
  visibility:visible!important;text-align:left;inset:auto!important;transform:none!important;
}
.ct.sh #sGame.sh-desk #shChrome #msg:empty{display:none!important}
.ct.sh #sGame.sh-desk #shChrome .sh-next{
  flex:none;min-width:148px;min-height:48px;font-size:20px;width:auto;
}
.ct.sh #sGame.sh-desk #shChrome #act{display:none!important} /* bid/trump/pass are on the felt */
.ct.sh #sGame.sh-desk #sb,.ct.sh #sGame.sh-desk #hudstrip,.ct.sh #sGame.sh-desk #tgDock{display:none!important}
.ct.sh #sGame.sh-desk #shSide{display:none!important}

/* felt fills everything between the slim chrome and the hand */
.ct.sh #sGame.sh-desk #felt{
  grid-area:felt;
  margin:4px 8px 0!important;
  min-height:0!important;height:auto!important;width:auto!important;
  border-width:12px!important;overflow:hidden!important;position:relative;
  --tw:clamp(100px,min(13vw,calc((100svh - 280px) * .3)),200px);
}
.ct.sh #sGame.sh-desk #felt .seat{
  position:absolute!important;z-index:6;display:flex!important;flex-direction:column!important;
  align-items:center;gap:3px!important;padding:4px 8px;width:auto!important;max-width:200px;
  background:rgba(14,20,32,.55);border-radius:18px;
}
.ct.sh #sGame.sh-desk #felt .seat .avw{
  width:clamp(100px,9.2vw,168px)!important;height:clamp(100px,9.2vw,168px)!important;padding:4px!important;flex:none;
}
.ct.sh #sGame.sh-desk #felt .seat .av{
  width:clamp(92px,8.6vw,160px)!important;height:clamp(92px,8.6vw,160px)!important;
}
.ct.sh #sGame.sh-desk #felt .seat .nm{font-size:clamp(15px,1.2vw,20px)!important;max-width:180px;order:2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ct.sh #sGame.sh-desk #felt .seat .chip{font-size:clamp(14px,1.1vw,18px)!important;order:3;position:static!important;transform:none!important;margin:0!important}
.ct.sh #sGame.sh-desk #felt .seat .chip:empty{display:none!important}
.ct.sh #sGame.sh-desk #felt .seat .tag{position:static!important;order:4;font-size:14px!important;padding:1px 8px!important;margin:0!important}
.ct.sh #sGame.sh-desk #felt .seat .mini,.ct.sh #sGame.sh-desk #felt .seat .dots{display:none!important}
.ct.sh #sGame.sh-desk #felt .seat.s2{left:50%!important;right:auto!important;top:8px!important;transform:translateX(-50%)!important;flex-direction:row!important;max-width:none;padding:4px 14px 4px 4px;border-radius:999px}
.ct.sh #sGame.sh-desk #felt .seat.s1{left:10px!important;right:auto!important;top:42%!important;transform:translateY(-50%)!important}
.ct.sh #sGame.sh-desk #felt .seat.s3{right:10px!important;left:auto!important;top:42%!important;transform:translateY(-50%)!important}
/* turn breathing glow stays (beats any earlier override) */
.ct.sh #sGame.sh-desk #felt .seat.turn .av{border-color:#ffe58a;box-shadow:0 0 0 5px rgba(255,229,138,.55),0 0 28px rgba(255,214,96,.95)}
/* large trick in the center, clear of the side seats */
.ct.sh #sGame.sh-desk #felt .trick .slot.p0{left:50%!important;top:calc(56% + var(--tw) * .58)!important}
.ct.sh #sGame.sh-desk #felt .trick .slot.p2{left:50%!important;top:calc(56% - var(--tw) * .58)!important}
.ct.sh #sGame.sh-desk #felt .trick .slot.p1{left:calc(50% - var(--tw) * 1.02)!important;top:56%!important}
.ct.sh #sGame.sh-desk #felt .trick .slot.p3{left:calc(50% + var(--tw) * 1.02)!important;top:56%!important}
.ct.sh #sGame.sh-desk .sh-widow{top:56%}
.ct.sh #sGame.sh-desk #felt>#msg{display:none!important} /* message lives in the chrome */
.ct.sh #sGame.sh-desk .trumpb{display:none}

/* bid, trump, pass: centered over the felt, sized for a desktop */
.ct.sh #sGame.sh-desk #felt #act, .ct.sh #sGame.sh-desk #act{
  position:absolute!important;left:50%!important;right:auto!important;bottom:auto!important;top:50%!important;
  transform:translate(-50%,-50%)!important;
  width:min(680px,78%)!important;max-width:720px!important;max-height:78%!important;
  margin:0!important;padding:16px 18px!important;overflow:auto!important;
  z-index:16;display:block;box-sizing:border-box;
  background:rgba(14,8,30,.96)!important;border:2px solid rgba(255,229,138,.6);
  border-radius:20px;box-shadow:0 18px 50px rgba(0,0,0,.65);
}
.ct.sh #sGame.sh-desk #act:empty{display:none!important}
.ct.sh #sGame.sh-desk #act h3{display:block!important;margin:0 0 10px;font-size:20px!important;line-height:1.25;color:#ffe58a;text-align:center}
.ct.sh #sGame.sh-desk #act .note{color:#f2e6c9;font-size:16px;text-align:center}
.ct.sh #sGame.sh-desk #act .row{display:flex;flex-wrap:wrap;gap:10px;justify-content:center}
.ct.sh #sGame.sh-desk #act .row .gk-btn{flex:1 1 160px;min-height:56px;padding:0 14px;font-size:20px}
.ct.sh #sGame.sh-desk #act .sh-bid .stepper{display:flex;gap:10px;align-items:center;justify-content:center;margin-top:12px;flex-wrap:wrap}
.ct.sh #sGame.sh-desk #act .sh-bid .stepper .gk-btn.icon{width:56px;min-width:56px;min-height:56px}
.ct.sh #sGame.sh-desk #act .sh-bid .stepper b{min-width:48px;text-align:center;font-size:32px;color:#F1D77A}
.ct.sh #sGame.sh-desk #act .sh-bid .stepper .gk-btn.gold{flex:0 1 auto;min-width:140px;min-height:56px;font-size:20px}
.ct.sh #sGame.sh-desk #act .suits{display:grid!important;grid-template-columns:repeat(4,minmax(0,1fr))!important;gap:10px!important;justify-items:center}
.ct.sh #sGame.sh-desk #act .suitb{min-height:96px!important;max-width:140px!important;width:100%;padding:8px!important;font-size:16px!important}
.ct.sh #sGame.sh-desk #act .suitb svg{width:36px;height:36px}

/* hand: full width, large cards fanned across the bottom; You sits to the left */
.ct.sh #sGame.sh-desk .me{
  grid-area:me;margin:0!important;z-index:9;pointer-events:auto;position:relative;
  display:grid!important;grid-template-columns:auto minmax(0,1fr);align-items:end;gap:10px;
  padding:0 10px 4px!important;min-width:0;
}
.ct.sh #sGame.sh-desk .mebar{
  position:static!important;inset:auto!important;transform:none!important;
  width:auto!important;max-width:140px!important;min-width:0;
  display:flex;flex-direction:column;align-items:center;justify-content:center;
  padding:6px 8px!important;gap:3px!important;border-radius:16px!important;
  background:rgba(14,20,32,.9);border:1px solid #D4AF37;z-index:8;
}
.ct.sh #sGame.sh-desk .mebar .av,.ct.sh #sGame.sh-desk .mebar .avw{
  width:clamp(56px,5.5vw,88px)!important;height:clamp(56px,5.5vw,88px)!important;
}
.ct.sh #sGame.sh-desk .mebar .nm{font-size:17px!important}
.ct.sh #sGame.sh-desk .mebar .chip,.ct.sh #sGame.sh-desk .mebar .tag,.ct.sh #sGame.sh-desk .mebar .sh-tk{font-size:14px!important}
.ct.sh #sGame.sh-desk .me .hand{margin:0;min-width:0;width:auto}
.ct.sh #sGame.sh-desk #hand:not(.two) .hc{bottom:8px}

/* score dropdown: wide, readable, still viewport-fixed with a close X */
.ct.sh #sGame.sh-desk .sh-drop,
.ct.sh #sGame.sh-desk #shDrop{
  position:fixed!important;z-index:80;width:min(520px,70vw);font-size:17px;
  max-height:min(70vh,640px)!important;
  max-width:calc(100vw - var(--sal) - var(--sar) - 16px)!important;
}
body.sh.sh-deskb .gk-notices{font-size:13px!important;padding:3px 10px calc(var(--sab) + 3px)!important;line-height:1.2}

/* meld / hand-over / end: centered, wide, desktop type — button always on screen */
@media (min-width:1024px) and (min-height:560px) and (orientation:landscape){
  body.sh #shMeld,body.sh #shHand,body.sh #shEnd{padding:calc(var(--sat) + 24px) 24px calc(var(--sab) + 24px)!important}
  body.sh #shMeld .gk-card,body.sh #shHand .gk-card,body.sh #shEnd .gk-card{
    width:min(960px,88vw)!important;max-width:none!important;max-height:100%!important;
    padding:22px 26px 18px!important;
  }
  body.sh #shMeld h2,body.sh #shHand h2,body.sh #shEnd h2{font-size:28px!important}
  body.sh #mdBody .meldl{display:grid!important;grid-template-columns:1fr 1fr;gap:14px}
  body.sh #mdBody .meldl .mr .cs .card{width:48px}
  body.sh #shMeld .row .gk-btn,body.sh #shHand .row .gk-btn,body.sh #shEnd .row .gk-btn{min-height:56px;font-size:20px;flex:1 1 200px}
}

/* short desktop heights: slightly smaller chrome and seats so the felt and hand still fit with no scroll */
@media (min-width:1024px) and (max-height:700px) and (orientation:landscape){
  .ct.sh #sGame.sh-desk #shChrome{min-height:42px;gap:8px}
  .ct.sh #sGame.sh-desk #shChrome #shTop .sh-score{min-height:40px;font-size:15px}
  .ct.sh #sGame.sh-desk #shChrome .sh-next{min-height:42px;font-size:17px;min-width:120px}
  .ct.sh #sGame.sh-desk #felt{--tw:clamp(84px,11vw,130px);border-width:8px!important;margin:2px 6px 0!important}
  .ct.sh #sGame.sh-desk #felt .seat .avw{width:clamp(72px,7vw,110px)!important;height:clamp(72px,7vw,110px)!important}
  .ct.sh #sGame.sh-desk #felt .seat .av{width:clamp(66px,6.5vw,104px)!important;height:clamp(66px,6.5vw,104px)!important}
  .ct.sh #sGame.sh-desk #act .suitb{min-height:72px!important}
}

/* t9119u / tfPN9: Pick up widow + Bury 3 panels */
.sh-widow-pick h3, .sh-bury h3{margin:0 0 10px;text-align:center;font-size:1.15em}
.sh-widow-faces{display:flex;justify-content:center;gap:8px;margin:8px 0 14px}
.sh-widow-faces .card{width:var(--hcw,72px)}

/* t9122u: selected cards are obvious on phone and desktop (pass AND 3-hand bury).
   Lift 18–24px, scale 1.12–1.18, bright glowing gold outline. Two-row hands and
   desk/land layout must not cancel the transform (an earlier rule used transform:none !important). */
.sh #hand, .sh .me, .sh .me .hand, .ct.sh #sGame.sh-desk .me, .ct.sh #sGame.sh-desk .me .hand,
.ct.sh #sGame.sh-land .me, .ct.sh #sGame.sh-docked .me{overflow:visible!important}
.sh #hand .hc.sel,
.sh .hand .hc.sel,
.sh .hand.two .hc.sel,
.ct.sh #sGame.sh-desk #hand .hc.sel,
.ct.sh #sGame.sh-desk #hand:not(.two) .hc.sel,
.ct.sh #sGame.sh-land #hand .hc.sel,
.ct.sh #sGame.sh-docked #hand .hc.sel{
  transform:translateY(-22px) scale(1.15) rotate(var(--rot,0deg))!important;
  z-index:40!important;
  transform-origin:50% 100%;
  bottom:auto;
}
.sh #hand .hc.sel .card,
.sh .hand .hc.sel .card{
  filter:drop-shadow(0 0 14px rgba(255,214,96,1));
  box-shadow:0 0 0 3px #ffd45a,0 0 20px 5px rgba(255,214,96,.95),0 12px 20px rgba(0,0,0,.5);
  outline:2px solid #ffe58a;
  outline-offset:1px;
}
.sh-pickn{
  margin:0 0 8px;text-align:center;font-size:1.15em;font-weight:800;
  color:#ffe58a;text-shadow:0 0 10px rgba(255,214,96,.8);
  letter-spacing:.02em;
}
.sh-pickn.go{color:#fff6c8}



/* t9126u: after the pass swap, the 3 cards you RECEIVED — large glowing faces,
   labeled "From <partner>", shown only to you. Fits inside the felt band so the
   title and OK are on-screen at 1366x768 and 1920x1080. Same gold glow on those
   cards in the hand. */
.sh-got{position:absolute;left:50%;top:38%;transform:translate(-50%,-50%);z-index:80;padding:12px 20px 14px;border-radius:18px;background:rgba(10,6,24,.96);border:2px solid #ffd45a;box-shadow:0 0 32px 8px rgba(255,212,90,.5),0 16px 40px rgba(0,0,0,.6);text-align:center;pointer-events:auto;animation:pnGotIn .32s ease-out;max-width:min(94%,720px);max-height:58%;display:flex;flex-direction:column;align-items:center;gap:8px}
@keyframes pnGotIn{from{opacity:0;transform:translate(-50%,-46%) scale(.94)}to{opacity:1;transform:translate(-50%,-50%) scale(1)}}
.sh-got .sh-got-from{display:block;color:#ffd45a;font-size:clamp(1.05em,2.4vh,1.4em);font-weight:800;margin:0;text-shadow:0 0 14px rgba(255,212,90,.85);letter-spacing:.02em;flex:none}
.sh-got-cards{display:flex;justify-content:center;align-items:flex-end;gap:clamp(8px,1.4vw,16px);margin:0;flex:none}
.sh-got-c{filter:drop-shadow(0 0 14px rgba(255,214,96,1))}
.sh-got-c .card{width:clamp(92px, min(16vw, 22vh), 168px);box-shadow:0 0 0 3px #ffd45a,0 0 22px 6px rgba(255,214,96,.95),0 12px 18px rgba(0,0,0,.5);outline:2px solid #ffe58a;outline-offset:2px;border-radius:10px;animation:pnGotPulse 1.2s ease-in-out infinite}
@keyframes pnGotPulse{0%,100%{filter:brightness(1)}50%{filter:brightness(1.12)}}
.sh-got .row{justify-content:center;margin:4px 0 0;flex:none}
.sh-got #shGotOk{min-width:108px;min-height:44px;font-size:1.08em}
/* short laptop: keep the whole panel (From + cards + OK) above the hand */
@media (max-height:820px){
  .sh-got{top:36%;padding:8px 14px 10px;gap:6px;max-height:52%}
  .sh-got-c .card{width:clamp(84px, min(14vw, 18vh), 132px)}
  .sh-got #shGotOk{min-height:40px;min-width:96px}
}
.ct.sh #sGame.sh-desk .sh-got{top:40%;z-index:80}
.ct.sh #sGame.sh-desk .sh-got-c .card{width:clamp(100px, min(12vw, 20vh), 168px)}
@media (max-height:820px){
  .ct.sh #sGame.sh-desk .sh-got{top:38%}
  .ct.sh #sGame.sh-desk .sh-got-c .card{width:clamp(88px, min(11vw, 17vh), 128px)}
}
.ct.sh #sGame.sh-docked .sh-got{top:42%;padding:10px 12px 12px;z-index:80}
.ct.sh #sGame.sh-docked .sh-got-c .card{width:clamp(72px, 22vw, 110px)}

/* received cards stay highlighted in the hand (~3s) with the same gold lift as a selection */
.sh #hand .hc.got,
.sh .hand .hc.got,
.sh .hand.two .hc.got,
.ct.sh #sGame.sh-desk #hand .hc.got,
.ct.sh #sGame.sh-desk #hand:not(.two) .hc.got,
.ct.sh #sGame.sh-land #hand .hc.got,
.ct.sh #sGame.sh-docked #hand .hc.got{
  transform:translateY(-22px) scale(1.15) rotate(var(--rot,0deg))!important;
  z-index:40!important;
  transform-origin:50% 100%;
  bottom:auto;
}
.sh #hand .hc.got .card,
.sh .hand .hc.got .card{
  filter:drop-shadow(0 0 14px rgba(255,214,96,1));
  box-shadow:0 0 0 3px #ffd45a,0 0 20px 5px rgba(255,214,96,.95),0 12px 20px rgba(0,0,0,.5);
  outline:2px solid #ffe58a;
  outline-offset:1px;
}


/* t9128u: live trick-points — running totals in a slim line under/beside the score,
   and a '+N' pop at the seat that just took the trick. */
.sh-prog{display:flex;flex-wrap:wrap;align-items:center;gap:4px 14px;min-width:0;flex:1 1 auto;padding:2px 4px 0;font:600 14px/1.25 inherit;color:#F4F6F8;letter-spacing:.01em}
.sh-prog[hidden]{display:none!important}
.sh-prog .sh-prog-tr{min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sh-prog .sh-prog-tr b{color:#F1D77A;font-size:1.08em}
.sh-prog .sh-prog-tr i{font-style:normal;color:#C0C6CC;padding:0 1px}
.sh-prog .sh-prog-bid{flex:none;color:#F1D77A;font-weight:800;white-space:nowrap;padding:2px 8px;border-radius:999px;background:rgba(212,175,55,.16);border:1px solid rgba(212,175,55,.35)}
.ct.sh #sGame.sh-desk #shChrome #shTop{flex-wrap:wrap}
.ct.sh #sGame.sh-desk #shChrome #shTop .sh-prog{flex:1 1 100%;font-size:16px;padding:0 2px 2px;order:5}
.ct.sh #sGame.sh-desk #shChrome #shTop .sh-prog .sh-prog-bid{font-size:15px}
@media (max-height:820px){
  .ct.sh #sGame.sh-desk #shChrome #shTop .sh-prog{font-size:14px}
  .ct.sh #sGame.sh-desk #shChrome #shTop .sh-prog .sh-prog-bid{font-size:13px;padding:1px 7px}
}
.ct.sh #sGame.sh-docked #shTop .sh-prog{flex:1 1 100%;font-size:13px;padding:0 2px 2px}
.ct.sh #sGame.sh-land:not(.sh-desk) #shTop .sh-prog{flex:1 1 100%;font-size:12px}
.ct.sh #sGame.sh3 .sh-prog .sh-prog-tr{white-space:normal}

.sh-ptspop{position:absolute;left:50%;top:-6px;z-index:25;transform:translate(-50%,-12px);padding:2px 10px;border-radius:999px;background:rgba(10,6,24,.94);border:2px solid #ffd45a;color:#ffd45a;font-weight:800;font-size:clamp(18px,2.2vh,26px);line-height:1.2;pointer-events:none;white-space:nowrap;text-shadow:0 0 10px rgba(255,212,90,.85);box-shadow:0 0 16px 4px rgba(255,212,90,.45);animation:pnPtsPop 1.25s ease-out forwards}
.ct .mebar{position:relative}
@keyframes pnPtsPop{
  0%{opacity:0;transform:translate(-50%,8px) scale(.8)}
  12%{opacity:1;transform:translate(-50%,-14px) scale(1.18)}
  65%{opacity:1;transform:translate(-50%,-24px) scale(1)}
  100%{opacity:0;transform:translate(-50%,-40px) scale(.94)}
}
.ct.sh #sGame.sh-desk .seat .sh-ptspop{font-size:28px;top:0}
.ct.sh #sGame.sh-desk .mebar .sh-ptspop{font-size:28px;top:-8px;left:70%}
.sh .mebar .sh-ptspop{left:70%;top:-4px}


/* t9129u: one Last-trick button (dock, phone and desktop) and a small overlay of only the latest trick. */
.sh .sh-last{flex:none;align-self:flex-start;min-height:36px;height:auto;padding:0 12px;font-size:15px;font-weight:700;white-space:nowrap;width:auto;background:rgba(14,20,32,.88);color:#F4F6F8;border:1px solid rgba(212,175,55,.4)}
.sh .sh-last[hidden]{display:none!important}
.sh .sh-last:disabled,.sh .sh-last[aria-disabled="true"]{opacity:.42;cursor:default}
.ct.sh #sGame.sh-docked .sh-dock .sh-last{min-height:38px;font-size:15px;margin:0}
.ct.sh #sGame.sh-desk #shChrome #shTop .sh-last{min-height:40px;font-size:15px;border-radius:12px}
.ct.sh #sGame.sh-land:not(.sh-desk) .sh-last{min-height:34px;font-size:13px;padding:0 10px}
.sh-lastov{position:fixed;inset:0;z-index:85;display:flex;align-items:center;justify-content:center;padding:16px;background:rgba(0,0,0,.4);pointer-events:auto}
.sh-lastov[hidden]{display:none!important}
.sh-lastov .sh-ltbox{min-width:0;max-width:min(560px,94vw);width:max-content;padding:14px 16px 16px;border-radius:18px;background:rgba(10,8,22,.96);border:2px solid rgba(241,215,122,.55);box-shadow:0 12px 40px rgba(0,0,0,.55);color:#F4F6F8;text-align:center}
.sh-lastov h3{margin:0 0 4px;font-size:clamp(18px,2.4vh,22px);color:#F1D77A;font-weight:800}
.sh-lastov .sh-ltsub{margin:0 0 10px;font-size:clamp(14px,1.9vh,17px);font-weight:700;color:#F4F6F8}
.sh-lastov .sh-ltsub small{font-weight:600;color:#C0C6CC}
.sh-ltcards{display:flex;flex-wrap:wrap;justify-content:center;gap:10px 14px;margin:0 0 12px}
.sh-ltfig{margin:0;padding:6px 6px 4px;border-radius:12px;background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.1);min-width:0;display:flex;flex-direction:column;align-items:center;gap:4px}
.sh-ltfig.won{border-color:#ffd45a;background:rgba(255,212,90,.12);box-shadow:0 0 14px 2px rgba(255,212,90,.35)}
.sh-ltfig figcaption{font-size:13px;font-weight:700;color:#F4F6F8;max-width:110px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sh-ltfig.won figcaption b{color:#ffd45a;font-weight:800}
.sh-ltcd .card,.sh-ltcd svg.card{width:clamp(64px,16vw,110px);height:auto;display:block;filter:drop-shadow(0 4px 8px rgba(0,0,0,.45))}
.sh-ltpts{font-size:14px;font-weight:800;color:#F1D77A}
.sh-lastov .row{margin:0;justify-content:center}
.sh-lastov .row .gk-btn{min-width:96px;min-height:42px}
@media (max-height:820px){
  .sh-lastov .sh-ltbox{padding:10px 12px 12px}
  .sh-ltcd .card,.sh-ltcd svg.card{width:clamp(56px,14vw,90px)}
}
.ct.sh #sGame.sh-desk .sh-ltcd .card,.ct.sh #sGame.sh-desk .sh-ltcd svg.card{width:clamp(88px,10vw,128px)}


/* t9130u visual polish: trick clear of seats, bid badge never over a name,
   unmistakable selected-card gold + 1/2/3 badges, toast clear of seats. */

/* ---- (1) Trick well is inset from every seat plate. Cards are laid out
   inside that well, so they cannot sit under a nameplate. Desktop, phone, land. ---- */
.ct.sh #sGame.sh-desk #felt{
  --seat-top: clamp(124px, calc(9.2vw + 28px), 196px);
  --seat-side: clamp(128px, 15vw, 230px);
  --seat-bot: 10px;
  --tw: clamp(80px, min(10.5vw, calc((100svh - 340px) * .22)), 148px);
}
.ct.sh #sGame.sh-desk #felt .trick{
  inset: var(--seat-top) var(--seat-side) var(--seat-bot) var(--seat-side) !important;
  z-index: 4;
  pointer-events: none;
}
.ct.sh #sGame.sh-desk #felt .trick .slot.p0{left:50%!important;top:calc(100% - 0.72 * var(--tw) - 8px)!important}
.ct.sh #sGame.sh-desk #felt .trick .slot.p2{left:50%!important;top:calc(0.72 * var(--tw) + 8px)!important}
.ct.sh #sGame.sh-desk #felt .trick .slot.p1{left:calc(0.55 * var(--tw) + 8px)!important;top:50%!important}
.ct.sh #sGame.sh-desk #felt .trick .slot.p3{left:calc(100% - 0.55 * var(--tw) - 8px)!important;top:50%!important}

/* phone portrait: top seat sits in the felt margin; still inset the well */
.ct.sh #sGame.sh-docked #felt{
  --seat-top: 72px;
  --seat-side: 92px;
  --seat-bot: 6px;
}
.ct.sh #sGame.sh-docked #felt .trick{
  inset: var(--seat-top) var(--seat-side) var(--seat-bot) var(--seat-side)!important;
  z-index: 4;
}
.ct.sh #sGame.sh-docked #felt .trick .slot.p0{left:50%!important;top:calc(100% - 0.72 * var(--tw) - 6px)!important}
.ct.sh #sGame.sh-docked #felt .trick .slot.p2{left:50%!important;top:calc(0.72 * var(--tw) + 6px)!important}
.ct.sh #sGame.sh-docked #felt .trick .slot.p1{left:calc(0.55 * var(--tw) + 6px)!important;top:50%!important}
.ct.sh #sGame.sh-docked #felt .trick .slot.p3{left:calc(100% - 0.55 * var(--tw) - 6px)!important;top:50%!important}

/* landscape phones (not full desktop) */
.ct.sh #sGame.sh-land:not(.sh-desk) #felt{
  --seat-top: 56px;
  --seat-side: 86px;
  --seat-bot: 6px;
}
.ct.sh #sGame.sh-land:not(.sh-desk) #felt .trick{
  inset: var(--seat-top) var(--seat-side) var(--seat-bot) var(--seat-side)!important;
  z-index: 4;
}
.ct.sh #sGame.sh-land:not(.sh-desk) #felt .trick .slot.p0{left:50%!important;top:calc(100% - 0.72 * var(--tw) - 4px)!important}
.ct.sh #sGame.sh-land:not(.sh-desk) #felt .trick .slot.p2{left:50%!important;top:calc(0.72 * var(--tw) + 4px)!important}
.ct.sh #sGame.sh-land:not(.sh-desk) #felt .trick .slot.p1{left:calc(0.55 * var(--tw) + 4px)!important;top:50%!important}
.ct.sh #sGame.sh-land:not(.sh-desk) #felt .trick .slot.p3{left:calc(100% - 0.55 * var(--tw) - 4px)!important;top:50%!important}

/* short desktops (1366x768 etc.): keep the top seat compact enough that --seat-top clears it */
@media (min-width:1024px) and (max-height:820px) and (orientation:landscape){
  .ct.sh #sGame.sh-desk #felt{--seat-top: clamp(112px, 16vh, 148px); --seat-side: clamp(118px, 14vw, 190px)}
  .ct.sh #sGame.sh-desk #felt .seat.s2 .avw{width:clamp(72px,7vw,100px)!important;height:clamp(72px,7vw,100px)!important}
  .ct.sh #sGame.sh-desk #felt .seat.s2 .av{width:clamp(66px,6.5vw,94px)!important;height:clamp(66px,6.5vw,94px)!important}
}

/* ---- (1b) "Follow suit" toast: never over a seat. Desktop: under the chrome,
   in the open felt to the LEFT of the top seat. Phone: above the hand, centered. ---- */
body.sh .gk-toast{
  top: calc(var(--sat) + 58px)!important;
  left: max(12px, calc(var(--sal) + 12px))!important;
  right: auto!important;
  bottom: auto!important;
  transform: none!important;
  max-width: min(340px, 32vw);
  z-index: 90;
}
body.sh .gk-toast.on{opacity:1;transform:none!important}
body.sh:has(#sGame.sh-docked:not([hidden])) .gk-toast,
body.sh:has(#sGame.sh-land:not(.sh-desk):not([hidden])) .gk-toast,
body.sh:has(#sGame:not(.sh-desk):not(.sh-land):not(.sh-docked):not([hidden])) .gk-toast{
  top: auto!important;
  left: 50%!important;
  right: auto!important;
  bottom: calc(var(--sab) + 30vh)!important;
  transform: translateX(-50%)!important;
  max-width: min(92vw, 420px);
}
body.sh:has(#sGame.sh-docked:not([hidden])) .gk-toast.on,
body.sh:has(#sGame.sh-land:not(.sh-desk):not([hidden])) .gk-toast.on,
body.sh:has(#sGame:not(.sh-desk):not(.sh-land):not(.sh-docked):not([hidden])) .gk-toast.on{
  transform: translateX(-50%)!important;
}

/* ---- (2) Bid / Dealer badge: in the flex flow, never over the name.
   Beside the name on a row seat (partner), above the name on a column seat. ---- */
.ct .seat .avw,.ct.sh #sGame.sh-desk #felt .seat .avw{order:1}
.ct .seat .tag,
.ct.sh #sGame #felt .seat .tag,
.ct.sh #sGame.sh-desk #felt .seat .tag,
.ct.sh #sGame.sh-desk #felt .seat.s2 .tag,
.ct.sh #sGame.sh-docked #felt .seat .tag,
.ct.sh #sGame.sh-land #felt .seat .tag,
.ct.sh #sGame.sh-land #felt .seat.s2 .tag,
.ct.sh #sGame.sh-land #felt .seat .tag{
  position:static!important;
  inset:auto!important;
  top:auto!important;
  right:auto!important;
  left:auto!important;
  bottom:auto!important;
  transform:none!important;
  margin:2px 0 0!important;
  flex:none;
  align-self:center;
  z-index:2;
  white-space:nowrap;
  max-width:100%;
  order:2;
}
.ct .seat .nm,
.ct.sh #sGame.sh-desk #felt .seat .nm{position:relative;z-index:2;order:3;overflow:hidden;text-overflow:ellipsis}
.ct .seat .chip,.ct.sh #sGame.sh-desk #felt .seat .chip{order:4}
.ct .seat .mini{order:5}
.ct .seat .sh-tk{order:6}
/* row partner seat: badge sits beside the name, after it */
.ct .seat.s2 .tag,
.ct.sh #sGame.sh-desk #felt .seat.s2 .tag,
.ct.sh #sGame.sh-docked #felt .seat.s2 .tag,
.ct.sh #sGame.sh-land #felt .seat.s2 .tag{order:3;margin:0 0 0 6px!important}
.ct .seat.s2 .nm,
.ct.sh #sGame.sh-desk #felt .seat.s2 .nm{order:2}

/* ---- (3) Selected cards: unmistakable gold. Thick bright ring with a gap
   from the card's own gold edge, strong outer glow, brightness, 1/2/3 badge. ---- */
.sh #hand .hc.sel,
.sh .hand .hc.sel,
.sh .hand.two .hc.sel,
.ct.sh #sGame.sh-desk #hand .hc.sel,
.ct.sh #sGame.sh-desk #hand:not(.two) .hc.sel,
.ct.sh #sGame.sh-land #hand .hc.sel,
.ct.sh #sGame.sh-docked #hand .hc.sel{
  overflow:visible!important;
  filter:brightness(1.14);
  outline:4px solid #ffe566;
  outline-offset:3px;
  border-radius:12px;
  box-shadow:0 0 0 2px #fff8c0, 0 0 18px 6px rgba(255,212,90,1), 0 0 32px 10px rgba(255,200,50,.75);
  z-index:40!important;
  transform:translateY(-22px) scale(1.15) rotate(var(--rot,0deg))!important;
  transform-origin:50% 100%;
}
.sh .hand.two .hc.sel,
.ct.sh #sGame.sh-desk #hand.two .hc.sel{
  transform:translateY(-22px) scale(1.15)!important;
}
.sh #hand .hc.sel .card,
.sh .hand .hc.sel .card,
.sh .hand.two .hc.sel .card{
  filter:brightness(1.08) drop-shadow(0 0 10px rgba(255,214,96,1));
  box-shadow:none;
  outline:none;
}
.sh-seln{
  position:absolute;top:-8px;right:-8px;z-index:6;
  width:1.55em;height:1.55em;border-radius:50%;
  background:linear-gradient(180deg,#ffe566,#f0b429);
  color:#1a1000;font-weight:900;
  font-size:clamp(14px,1.9vh,22px);line-height:1.55em;text-align:center;
  border:2px solid #fffef0;
  box-shadow:0 0 10px 2px rgba(255,212,90,.95),0 2px 6px rgba(0,0,0,.5);
  pointer-events:none;
  font-variant-numeric:tabular-nums;
}


/* t9131u: end-of-hand score — bid reminder at the top, big and high-contrast,
   then this-hand points and running game totals, plus the play-to target. */
.sh-bidres{
  font-size:clamp(18px,2.8vh,28px)!important;font-weight:800;line-height:1.35;
  text-align:center;color:#FFF8E6;margin:0 0 14px!important;
  padding:12px 16px;border-radius:16px;
  background:rgba(10,8,22,.92);border:2px solid rgba(241,215,122,.65);
  letter-spacing:.01em;text-wrap:balance;
}
.sh-bidres.good{border-color:#6ee7a0;background:rgba(12,36,24,.94)}
.sh-bidres.bad{border-color:#ff8a8a;background:rgba(40,12,16,.94)}
.sh-bidres .sh-made{color:#7dff9a;font-weight:900}
.sh-bidres .sh-set{color:#ff9a9a;font-weight:900}
.sh .hs{width:100%;border-collapse:separate;border-spacing:0;font-size:clamp(16px,2.3vh,22px);font-weight:700;margin:0 0 12px}
.sh .hs th{color:#F1D77A;font-weight:800;text-align:left;padding:8px 10px;border-bottom:2px solid rgba(241,215,122,.45);background:rgba(20,14,36,.7)}
.sh .hs td{color:#FFF8E6;padding:10px;border-bottom:1px solid rgba(255,255,255,.1);font-variant-numeric:tabular-nums}
.sh .hs tr.bid-row td{background:rgba(241,215,122,.12)}
.sh .hs td.pos{color:#7dff9a;font-weight:900}
.sh .hs td.neg{color:#ff9a9a;font-weight:900}
.sh .sh-bidtag{display:inline-block;margin-left:6px;padding:1px 8px;border-radius:999px;background:linear-gradient(180deg,#ffe58a,#f5c542);color:#2a1a00;font-size:.78em;font-weight:800;vertical-align:middle}
.sh .sh-buryhint{color:#F1D77A;font-weight:700;font-size:.85em}
.sh .sh-target{text-align:center;font-size:clamp(17px,2.3vh,22px)!important;font-weight:800;color:#FFF8E6;margin:4px 0 0!important;padding:8px 10px;border-radius:12px;background:rgba(14,20,32,.75);border:1px solid rgba(241,215,122,.35)}
.sh .sh-target b{color:#F1D77A;font-size:1.15em}
@media (max-width:520px){
  .sh-bidres{font-size:clamp(16px,4.4vw,20px)!important;padding:10px 12px;margin:0 0 10px!important}
  .sh .hs{font-size:15px}
  .sh .hs th,.sh .hs td{padding:7px 6px}
  .sh .sh-target{font-size:16px!important}
}
@media (min-width:1024px) and (min-height:560px) and (orientation:landscape){
  body.sh #shHand .sh-bidres{font-size:26px!important;padding:16px 20px}
  body.sh #shHand .hs{font-size:22px}
  body.sh #shHand .hs th,body.sh #shHand .hs td{padding:12px 14px}
  body.sh #shHand .sh-target{font-size:22px!important}
}


/* t9132u: prominent TRUMP + BID badge on the felt for the whole hand.
   Large suit (48–64px desk, ≥36px phone) in suit color, the word Trump,
   and "Bid 27 · Tommy Bot & You" — high contrast, clear of seats and trick cards. */
.sh-trbid{
  position:absolute;z-index:7;left:10px;top:10px;
  display:flex;align-items:center;gap:10px;
  padding:8px 14px 8px 8px;border-radius:18px;
  background:rgba(8,6,18,.94);border:2px solid rgba(241,215,122,.75);
  box-shadow:0 8px 22px rgba(0,0,0,.5);color:#FFF8E6;
  pointer-events:none;max-width:min(44%,440px);
  font-weight:800;letter-spacing:.01em;
}
.sh-trbid[hidden]{display:none!important}
.sh-trbid-suit{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;flex:none}
.sh-trbid-sy{
  display:flex;align-items:center;justify-content:center;
  width:56px;height:56px;border-radius:14px;
  background:#FFF8E6;box-shadow:0 0 0 2px rgba(20,10,0,.2),0 2px 6px rgba(0,0,0,.35);
}
.sh-trbid-sy svg{width:48px!important;height:48px!important;display:block}
.sh-trbid-lbl{font-size:11px;font-weight:900;letter-spacing:.08em;text-transform:uppercase;color:#F1D77A;line-height:1.1}
.sh-trbid-bid{display:flex;flex-wrap:wrap;align-items:baseline;gap:2px 0;min-width:0;line-height:1.2;font-size:clamp(17px,2.2vh,26px)}
.sh-trbid-bid b{color:#FFE58A;font-size:1.12em;font-weight:900;margin-right:2px}
.sh-trbid-bid i{font-style:normal;color:#C0C6CC;padding:0 7px;font-weight:700}
.sh-trbid-bid span{color:#FFF8E6;font-weight:800}

/* desktop: 56–64px suit, large bid text, top-left of the felt (open corner, not under Tommy or Pinky) */
.ct.sh #sGame.sh-desk #felt .sh-trbid{
  left:12px;top:12px;padding:10px 18px 10px 10px;gap:12px;border-radius:20px;
  max-width:min(40%,480px);
}
.ct.sh #sGame.sh-desk #felt .sh-trbid-sy{width:64px;height:64px;border-radius:16px}
.ct.sh #sGame.sh-desk #felt .sh-trbid-sy svg{width:56px!important;height:56px!important}
.ct.sh #sGame.sh-desk #felt .sh-trbid-lbl{font-size:13px}
.ct.sh #sGame.sh-desk #felt .sh-trbid-bid{font-size:clamp(20px,2.4vh,28px)}

@media (min-width:1024px) and (max-height:820px) and (orientation:landscape){
  /* 1366x768 and other short laptops: still ≥48px suit, slightly tighter padding */
  .ct.sh #sGame.sh-desk #felt .sh-trbid{top:8px;left:8px;padding:8px 14px 8px 8px;gap:10px}
  .ct.sh #sGame.sh-desk #felt .sh-trbid-sy{width:56px;height:56px}
  .ct.sh #sGame.sh-desk #felt .sh-trbid-sy svg{width:48px!important;height:48px!important}
  .ct.sh #sGame.sh-desk #felt .sh-trbid-bid{font-size:22px}
}

/* phone portrait: ≥36px suit, compact but readable, top-left of the felt under the top seat */
.ct.sh #sGame.sh-docked #felt .sh-trbid{
  left:6px;top:6px;padding:6px 10px 6px 6px;gap:8px;border-radius:14px;
  max-width:54%;
}
.ct.sh #sGame.sh-docked #felt .sh-trbid-sy{width:40px;height:40px;border-radius:10px}
.ct.sh #sGame.sh-docked #felt .sh-trbid-sy svg{width:36px!important;height:36px!important}
.ct.sh #sGame.sh-docked #felt .sh-trbid-lbl{font-size:10px}
.ct.sh #sGame.sh-docked #felt .sh-trbid-bid{font-size:16px}

.ct.sh #sGame.sh-land:not(.sh-desk) #felt .sh-trbid{
  left:6px;top:4px;padding:5px 10px 5px 5px;gap:7px;max-width:48%;
}
.ct.sh #sGame.sh-land:not(.sh-desk) #felt .sh-trbid-sy{width:40px;height:40px}
.ct.sh #sGame.sh-land:not(.sh-desk) #felt .sh-trbid-sy svg{width:36px!important;height:36px!important}
.ct.sh #sGame.sh-land:not(.sh-desk) #felt .sh-trbid-bid{font-size:15px}

/* ---- Spades / Hearts extras (t9133u) ---- */
.sh-bidgrid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:6px;margin:8px 0}
.sh-bidgrid button{min-height:48px;min-width:0;padding:0 4px;font-size:18px;font-weight:800}
.sh-bidgrid button[aria-pressed="true"]{outline:3px solid #ffd45a;box-shadow:0 0 14px rgba(255,212,90,.9);transform:translateY(-2px)}
.sh-bidgrid .nil{grid-column:1/-1;min-height:54px;font-size:20px;letter-spacing:.06em}
.sh-bidgo{min-height:52px;font-size:20px;min-width:160px}
.ct.sh #sGame.sh-desk #act .sh-bidgrid button{min-height:56px;font-size:22px}
.ct.sh #sGame.sh-desk #act .sh-bidgrid .nil{min-height:60px;font-size:24px}
.ct.sh #sGame.sh-docked .sh-bidgrid{gap:4px}
.ct.sh #sGame.sh-docked .sh-bidgrid button{min-height:42px;font-size:16px}
.ct.sh #sGame.sh-land:not(.sh-desk) .sh-bidgrid{grid-template-columns:repeat(7,minmax(0,1fr));gap:3px}
.ct.sh #sGame.sh-land:not(.sh-desk) .sh-bidgrid button{min-height:38px;font-size:15px}

.sh-trbid.sh-hearts{gap:10px}
.sh-trbid-brk{font-weight:900;letter-spacing:.04em;text-transform:uppercase;font-size:clamp(13px,1.6vh,18px);padding:3px 10px;border-radius:999px;border:1px solid rgba(255,229,138,.45)}
.sh-trbid-brk.on{background:rgba(200,16,46,.28);color:#ffd0d6;border-color:#ff8a8a}
.sh-trbid-brk.off{background:rgba(20,40,24,.5);color:#cdeebd;border-color:rgba(110,200,130,.4)}
.sh-passdir{font-size:clamp(16px,2vh,22px);font-weight:800;color:#FFE58A;text-align:center;margin:0 0 8px}

/* selected-card badges (kit class sh-seln) already in this file from the pinochle rename */

.sh-passwait{color:#f2e6c9;font-size:15px;text-align:center;margin:6px 0 0}
.sh-ready{color:#7dff9a;font-weight:800}

/* lobby-adjacent: 18+ footer stays readable */
body.sh .gk-notices{color:#e8dcc0}

/* Hearts running tally emphasis */
.sh-prog .sh-moon{color:#FFE58A;font-weight:900;letter-spacing:.04em}

/* ===== t9147u always-visible live score panel; t9148u Last trick with it ===== */
.sh-live{
  display:flex;align-items:stretch;gap:10px;
  width:100%;box-sizing:border-box;
  padding:8px 10px;border-radius:16px;
  background:linear-gradient(#1a2230,#121820);
  border:2px solid rgba(241,215,122,.7);
  color:#F4F6F8;box-shadow:0 6px 16px rgba(0,0,0,.35);
}
.sh-live-trump{
  flex:none;display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:2px;min-width:72px;padding:4px 8px 4px 4px;
  border-right:1px solid rgba(241,215,122,.28);
}
.sh-live-trump.empty{display:none}
.sh-live-sy{
  display:flex;align-items:center;justify-content:center;
  width:60px;height:60px;border-radius:14px;
  background:#FFF8E6;box-shadow:0 0 0 2px rgba(20,10,0,.2),0 2px 6px rgba(0,0,0,.35);
}
.sh-live-sy svg{width:52px!important;height:52px!important;display:block}
.sh-live-tlbl{font-size:11px;font-weight:900;letter-spacing:.08em;text-transform:uppercase;color:#F1D77A}
.sh-live-up{display:block;width:52px}
.sh-live-up .card{width:52px;height:auto;filter:drop-shadow(0 2px 6px rgba(0,0,0,.45))}
.sh-live-body{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:3px;justify-content:center}
.sh-live-row{display:flex;flex-wrap:wrap;align-items:baseline;gap:2px 14px;padding:2px 0;line-height:1.25;font-size:16px;font-weight:600}
.sh-live-row.us{color:#FFF8E6}
.sh-live-row.us .sh-lnm{color:#F1D77A;font-weight:800}
.sh-lnm{flex:1 1 140px;min-width:0;font-weight:800;font-size:16px}
.sh-lbid,.sh-ltr,.sh-lsc,.sh-lbg,.sh-lmk{flex:none;white-space:nowrap}
.sh-live-row b{color:#F1D77A;font-size:1.12em;font-weight:900;padding:0 1px}
.sh-live-row small{color:#C0C6CC;font-weight:700;padding-left:4px}
.sh-lmk{color:#FFE58A;font-weight:800;font-size:13px;letter-spacing:.03em;text-transform:uppercase}
.sh-live-row.maker{box-shadow:inset 3px 0 0 #F1D77A}
.sh-live-foot{font-size:14px;font-weight:700;color:#E8E0CC;padding-top:2px}
.sh-live-foot b{color:#F1D77A;font-weight:900}
.sh-live-foot i{font-style:normal;color:#C0C6CC;padding:0 4px}
.sh-live-tools{flex:none;display:flex;flex-direction:column;justify-content:center;gap:6px;align-items:stretch}
.sh-live-ht{display:grid;grid-template-columns:1fr 1fr;gap:2px 16px}
.sh-hands{
  appearance:none;border:1px solid rgba(212,175,55,.55);background:rgba(14,20,32,.7);
  color:#F1D77A;font:700 13px/1 inherit;padding:6px 10px;border-radius:10px;cursor:pointer;min-height:32px;
}
.sh-hands:focus-visible{outline:3px solid #F1D77A;outline-offset:2px}
/* Last trick: gold, high contrast, never a grey ghost when it's available */
.sh .sh-last, .sh-live-tools .sh-last{
  min-height:42px!important;padding:0 14px!important;font-size:16px!important;font-weight:800!important;
  background:linear-gradient(#f0d56a,#c9a227)!important;color:#1a1408!important;
  border:0!important;border-radius:12px!important;width:auto!important;white-space:nowrap;
  box-shadow:0 2px 0 #8a7014,0 4px 10px rgba(0,0,0,.3);
}
.sh .sh-last[hidden]{display:none!important}
.sh .sh-last:disabled{display:none!important}

/* desktop: generous panel in the top chrome, 64px trump */
.ct.sh #sGame.sh-desk #shChrome #shTop .sh-live{padding:10px 14px;gap:14px;border-radius:18px}
.ct.sh #sGame.sh-desk #shChrome #shTop .sh-live-sy{width:68px;height:68px;border-radius:16px}
.ct.sh #sGame.sh-desk #shChrome #shTop .sh-live-sy svg{width:60px!important;height:60px!important}
.ct.sh #sGame.sh-desk #shChrome #shTop .sh-live-tlbl{font-size:13px}
.ct.sh #sGame.sh-desk #shChrome #shTop .sh-live-row{font-size:18px;gap:4px 18px}
.ct.sh #sGame.sh-desk #shChrome #shTop .sh-lnm{font-size:18px}
.ct.sh #sGame.sh-desk #shChrome #shTop .sh-live-row b{font-size:22px}
.ct.sh #sGame.sh-desk #shChrome #shTop .sh-live-foot{font-size:16px}
.ct.sh #sGame.sh-desk #shChrome #shTop .sh-last{min-height:48px!important;font-size:17px!important}
.ct.sh #sGame.sh-desk #shChrome #shTop{flex-direction:column}

/* phone portrait: compact but complete — every bid, trick, score, bag stays on screen */
.ct.sh #sGame.sh-docked #shTop .sh-live{padding:6px 8px;gap:8px;border-radius:14px;border-width:1.5px}
.ct.sh #sGame.sh-docked #shTop .sh-live-sy{width:44px;height:44px;border-radius:10px}
.ct.sh #sGame.sh-docked #shTop .sh-live-sy svg{width:38px!important;height:38px!important}
.ct.sh #sGame.sh-docked #shTop .sh-live-tlbl{font-size:9px}
.ct.sh #sGame.sh-docked #shTop .sh-live-up .card{width:40px}
.ct.sh #sGame.sh-docked #shTop .sh-live-row{font-size:13px;gap:1px 8px;padding:1px 0}
.ct.sh #sGame.sh-docked #shTop .sh-lnm{font-size:13px;flex-basis:90px}
.ct.sh #sGame.sh-docked #shTop .sh-live-row b{font-size:16px}
.ct.sh #sGame.sh-docked #shTop .sh-live-foot{font-size:12px}
.ct.sh #sGame.sh-docked #shTop .sh-last{min-height:38px!important;font-size:14px!important;padding:0 10px!important}
.ct.sh #sGame.sh-docked #shTop .sh-live-ht{grid-template-columns:1fr 1fr;gap:0 8px}
.ct.sh #sGame.sh-docked #shTop .sh-live-trump{min-width:52px;padding:2px 6px 2px 2px}

/* hide the retired felt badge and slim bar so they can't cover seats */
#shTrumpBid[hidden],#shScore[hidden],#shProg[hidden]{display:none!important}

/* end-of-hand totals: clear spacing, no jammed "Bot-60" */
#shHand .sh-dt, #shEnd .sh-dt{display:flex;flex-direction:column;gap:6px;margin:8px 0 4px;text-align:left}
#shHand .sh-drow, #shEnd .sh-drow{
  display:flex;justify-content:space-between;align-items:baseline;gap:12px;
  padding:6px 4px;border-bottom:1px solid rgba(192,198,204,.18);
  font-size:17px;font-weight:600;color:#F4F6F8;
}
#shHand .sh-drow.us, #shEnd .sh-drow.us{color:#FFF8E6}
#shHand .sh-drow.us span, #shEnd .sh-drow.us span{color:#F1D77A;font-weight:800}
#shHand .sh-dpts, #shEnd .sh-dpts{white-space:nowrap;text-align:right}
#shHand .sh-drow b, #shEnd .sh-drow b{color:#F1D77A;font-size:20px;font-weight:900;padding:0 3px}
#shHand .sh-drow.tg, #shEnd .sh-drow.tg{border-bottom:0;color:#C0C6CC;font-size:16px}
.sh-got{
  position:fixed!important;left:50%!important;top:50%!important;right:auto!important;bottom:auto!important;
  transform:translate(-50%,-50%)!important;z-index:90!important;
  max-width:min(92vw,720px)!important;max-height:80vh!important;
}
#felt > #act{z-index:8}

/* Euchre calling */
.sh-call{text-align:center}
.sh-callup{font-size:clamp(16px,2.2vh,22px);font-weight:800;color:#FFE58A;margin:0 0 8px;display:flex;align-items:center;justify-content:center;gap:10px;flex-wrap:wrap}
.sh-upcd .card{width:64px;filter:drop-shadow(0 2px 8px rgba(0,0,0,.45))}
.sh-callrow{justify-content:center;flex-wrap:wrap;gap:8px}
.sh-callrow .gk-btn{min-height:48px;min-width:140px;font-size:17px;font-weight:800}
.sh-suits{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:8px 0}
.sh-suits .suitb{min-height:64px;font-size:16px;font-weight:800;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px}
.sh-suits .suitb[aria-pressed="true"]{outline:3px solid #ffd45a;box-shadow:0 0 14px rgba(255,212,90,.9)}
.ct.sh #sGame.sh-desk #act .sh-callrow .gk-btn{min-height:56px;font-size:19px}
.ct.sh #sGame.sh-desk #act .sh-suits .suitb{min-height:84px;font-size:18px}
.ct.sh #sGame.sh-docked .sh-callrow .gk-btn{min-height:44px;min-width:0;flex:1 1 30%;font-size:15px}
.ct.sh #sGame.sh-docked .sh-upcd .card{width:52px}

/* Stick-the-dealer switch on the title */
#stickBox{margin:10px 0}

/* ============================================================
   tfSHE2 table (t9158u, t9155u–t9156u, t9154u)
   The table fills the screen: a wide perspective oval of felt
   in the approved room, large seated players, a compact corner
   score board (Bid | Tricks | Need | Bags | Score), a fanned
   hand that does not cover the trick, and a 0(Nil)–13 bid grid
   with a suggested-bid hint. Legal cards lift; "What should I
   play?" gold-lifts the suggestion.
   ============================================================ */

/* Room behind the table — approved room-wide art, already on .gk-bg;
   keep it full-bleed and visible at the corners around the oval. */
.ct.sh .gk-bg,
.ct.sh #sGame .gk-bg{
  background-image:url(../../img/table/room-wide.webp)!important;
  background-size:cover!important;
  background-position:center top!important;
  background-color:#120c08!important;
}
body.sh.sh-deskb, body.sh{background-color:#120c08}

/* ---- Compact aligned score board (t9155u) ---- */
.sh-live.sh-board{
  display:flex;flex-direction:column;gap:6px;
  padding:8px 10px 8px;
  background:rgba(10,14,20,.88);
  backdrop-filter:blur(10px);
  -webkit-backdrop-filter:blur(10px);
  border:1.5px solid rgba(241,215,122,.42);
  border-radius:14px;
  box-shadow:0 8px 28px rgba(0,0,0,.45);
  color:#F4F6F8;
  min-width:0;
}
.sh-board-top{
  display:flex;align-items:center;gap:8px;justify-content:space-between;
  flex-wrap:wrap;
}
.sh-live.sh-board .sh-live-trump{
  display:flex;align-items:center;gap:6px;
  min-width:0;padding:2px 8px 2px 2px;
  background:rgba(18,72,42,.45);
  border:1px solid rgba(241,215,122,.35);
  border-radius:10px;
}
.sh-live.sh-board .sh-live-trump[data-s="0"]{background:rgba(18,72,42,.5)}
.sh-live.sh-board .sh-live-trump[data-s="1"]{background:rgba(112,22,42,.5)}
.sh-live.sh-board .sh-live-trump[data-s="2"]{background:rgba(40,50,120,.5)}
.sh-live.sh-board .sh-live-trump[data-s="3"]{background:rgba(22,80,42,.5)}
.sh-live.sh-board .sh-live-trump.empty{background:transparent;border-color:transparent;padding:0}
.sh-live.sh-board .sh-live-sy{width:32px;height:32px;display:flex;align-items:center;justify-content:center;border-radius:8px}
.sh-live.sh-board .sh-live-sy svg{width:28px!important;height:28px!important}
.sh-live.sh-board .sh-live-tlbl{font-size:11px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;color:#F1D77A}
.sh-live.sh-board .sh-live-up .card{width:28px}
.sh-live-meta{font-size:12px;font-weight:650;color:#C0C6CC;line-height:1.2;text-align:right;flex:1 1 auto}
.sh-live-body{min-width:0}
table.sh-bt{
  width:100%;border-collapse:collapse;table-layout:fixed;
  font-size:13px;font-weight:650;color:#F4F6F8;
}
table.sh-bt th, table.sh-bt td{
  padding:4px 6px;text-align:center;vertical-align:middle;
  font-size:13px;font-weight:700;line-height:1.2;
  border-bottom:1px solid rgba(192,198,204,.16);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
table.sh-bt thead th{
  font-size:10px;font-weight:800;letter-spacing:.07em;text-transform:uppercase;
  color:#C0C6CC;padding:2px 6px 5px;border-bottom:1.5px solid rgba(241,215,122,.35);
  text-align:center;
}
table.sh-bt th.nm, table.sh-bt thead th:first-child,
table.sh-bt tbody th{
  text-align:left;font-weight:800;color:#F4F6F8;
  width:32%;padding-left:2px;
}
table.sh-bt td.sc{font-weight:900;color:#F1D77A;font-size:15px}
table.sh-bt tr.us th, table.sh-bt tr.us td{color:#FFF8E6}
table.sh-bt tr.us{background:rgba(241,215,122,.08)}
table.sh-bt tbody tr:last-child th, table.sh-bt tbody tr:last-child td{border-bottom:0}
table.sh-bt td.need{white-space:nowrap}
table.sh-bt td.need span{
  display:inline-block;padding:1px 7px;border-radius:999px;
  font-size:11px;font-weight:800;letter-spacing:.01em;
  background:rgba(192,198,204,.14);color:#E8ECF0;
}
table.sh-bt td.need.need span{background:rgba(241,215,122,.18);color:#F1D77A}
table.sh-bt td.need.made span{background:rgba(46,180,96,.28);color:#B6F5C8}
table.sh-bt td.need.over span{background:rgba(232,168,70,.22);color:#FFD79A}
table.sh-bt td.need.na span{background:transparent;color:#8B929A;padding:0;font-weight:650}
table.sh-bt-ht th:first-child, table.sh-bt-ht tbody th{width:36%}
table.sh-bt-ht td small{display:block;font-size:10px;font-weight:650;color:#C0C6CC;white-space:nowrap}
.sh-live-tools{display:flex;gap:6px;align-items:center;justify-content:flex-end;flex-wrap:wrap;margin-top:2px}
.sh-live-tools .sh-hands,
.sh-live-tools .sh-last{
  min-height:34px!important;padding:0 12px!important;font-size:13px!important;
  border-radius:10px!important;font-weight:800!important;
}
.sh-live-tools .sh-hands{
  background:rgba(255,255,255,.08);color:#F4F6F8;border:1px solid rgba(192,198,204,.3);
}
.visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}

/* ---- Desktop: table fills the screen, score floats in a top corner ---- */
.ct.sh #sGame.sh-desk{
  position:relative!important;
  display:flex!important;flex-direction:column!important;
  height:100%!important;min-height:100dvh!important;
  width:100%!important;max-width:none!important;margin:0!important;
  padding:0!important;
}
.ct.sh #sGame.sh-desk #shChrome{
  flex:0 0 48px!important;min-height:48px!important;max-height:52px!important;
  background:linear-gradient(180deg,rgba(10,12,16,.72),rgba(10,12,16,0))!important;
  border:0!important;box-shadow:none!important;
  padding:4px 10px 0!important;gap:8px!important;
  position:relative;z-index:20;
  align-items:center;
}
.ct.sh #sGame.sh-desk #shChrome .gk-bar{
  background:transparent!important;box-shadow:none!important;
  min-height:44px;flex:0 0 auto;
}
.ct.sh #sGame.sh-desk #shChrome #shTop{
  position:absolute!important;
  top:8px!important;right:12px!important;left:auto!important;
  width:min(448px, 42vw)!important;
  max-width:calc(100vw - 220px)!important;
  flex-direction:column!important;
  z-index:30!important;
  pointer-events:auto;
  margin:0!important;padding:0!important;
  background:transparent!important;
}
.ct.sh #sGame.sh-desk #shChrome #shTop .sh-live,
.ct.sh #sGame.sh-desk #shChrome #shTop .sh-live.sh-board{
  padding:8px 10px!important;gap:6px!important;border-radius:14px!important;
}
.ct.sh #sGame.sh-desk #shChrome #shTop table.sh-bt,
.ct.sh #sGame.sh-desk #shChrome #shTop table.sh-bt th,
.ct.sh #sGame.sh-desk #shChrome #shTop table.sh-bt td{font-size:13px!important}
.ct.sh #sGame.sh-desk #shChrome #shTop table.sh-bt thead th{font-size:10px!important}
.ct.sh #sGame.sh-desk #shChrome #shTop table.sh-bt td.sc{font-size:16px!important}
.ct.sh #sGame.sh-desk #shChrome #shTop .sh-live-meta{font-size:12px!important}
.ct.sh #sGame.sh-desk #shChrome #shTop .sh-live-sy{width:32px!important;height:32px!important}
.ct.sh #sGame.sh-desk #shChrome #shTop .sh-live-sy svg{width:28px!important;height:28px!important}
.ct.sh #sGame.sh-desk #shChrome #shTop .sh-live-tlbl{font-size:11px!important}
.ct.sh #sGame.sh-desk #shChrome #shTop .sh-last,
.ct.sh #sGame.sh-desk #shChrome #shTop .sh-hands{min-height:34px!important;font-size:13px!important}

/* Wide perspective oval felt — fills the play area, room shows at the corners */
.ct.sh #sGame.sh-desk #felt{
  flex:1 1 auto!important;
  width:90%!important;
  max-width:1600px!important;
  min-height:0!important;
  height:auto!important;
  margin:4px auto 0!important;
  border-radius:50% 50% 48% 48% / 40% 40% 46% 46%!important;
  border-width:18px 22px 22px 22px!important;
  overflow:visible!important;
  box-shadow:
    0 18px 50px rgba(0,0,0,.55),
    inset 0 1px 0 rgba(255,229,138,.18),
    0 0 0 1px rgba(40,20,8,.4)!important;
  --tw: clamp(112px, min(13vw, calc((100dvh - 220px) * .26)), 176px);
  --seat-top: clamp(128px, 17vh, 180px);
  --seat-side: clamp(130px, 13vw, 210px);
  --seat-bot: 16px;
  position:relative;
}
.ct.sh #sGame.sh-desk #felt::before{
  border-radius:inherit!important;
}
/* Large seated players on the rail (approved Flip Bots faces) */
.ct.sh #sGame.sh-desk #felt .seat{
  width:auto!important;max-width:180px!important;z-index:6!important;
}
.ct.sh #sGame.sh-desk #felt .seat .avw,
.ct.sh #sGame.sh-desk #felt .seat .av{
  width:128px!important;height:128px!important;
}
.ct.sh #sGame.sh-desk #felt .seat .nm{
  font-size:16px!important;font-weight:800!important;
  background:rgba(10,14,20,.9)!important;
  padding:2px 8px!important;border-radius:8px!important;
  max-width:160px;white-space:nowrap;
}
.ct.sh #sGame.sh-desk #felt .seat.s2{top:-56px!important}
.ct.sh #sGame.sh-desk #felt .seat.s1{left:-36px!important}
.ct.sh #sGame.sh-desk #felt .seat.s3{right:-36px!important}
.ct.sh #sGame.sh-desk #felt .seat.s2 .avw,
.ct.sh #sGame.sh-desk #felt .seat.s2 .av{
  width:136px!important;height:136px!important;
}

/* Big centered trick, inset from the large seats */
.ct.sh #sGame.sh-desk #felt .trick{
  inset: var(--seat-top) var(--seat-side) var(--seat-bot) var(--seat-side)!important;
  z-index:4;
}
.ct.sh #sGame.sh-desk #felt .trick .slot.p0{left:50%!important;top:calc(50% + var(--tw) * .48)!important}
.ct.sh #sGame.sh-desk #felt .trick .slot.p2{left:50%!important;top:calc(50% - var(--tw) * .48)!important}
.ct.sh #sGame.sh-desk #felt .trick .slot.p1{left:calc(50% - var(--tw) * .72)!important;top:50%!important}
.ct.sh #sGame.sh-desk #felt .trick .slot.p3{left:calc(50% + var(--tw) * .72)!important;top:50%!important}

/* Hand neatly fanned at the bottom, not covering the table / near trick */
.ct.sh #sGame.sh-desk .me{
  margin-top:8px!important;margin-bottom:4px!important;
  z-index:9;flex:0 0 auto;
}
.ct.sh #sGame.sh-desk .mebar{
  min-height:40px!important;justify-content:center!important;
}
.ct.sh #sGame.sh-desk .mebar .av,
.ct.sh #sGame.sh-desk .mebar .avw{width:56px!important;height:56px!important}
.ct.sh #sGame.sh-desk #hand{padding:0 8px 6px}
.ct.sh #sGame.sh-desk #hand .hc{bottom:4px}
/* gentle fan: cards rotate from the center of the hand */
.ct.sh #sGame.sh-desk #hand{--fan: 1}
.ct.sh #sGame.sh-desk #shDock{
  position:relative;z-index:10;
  display:flex;flex-direction:column;align-items:center;
  gap:4px;margin:0 auto 2px;max-width:720px;
}
.ct.sh #sGame.sh-desk #shDock #msg{
  position:static!important;display:block;margin:0;min-height:22px;
  padding:4px 12px;border-radius:10px;
  background:rgba(14,20,32,.85);color:#F4F6F8;
  font-size:16px;text-align:center;visibility:visible!important;
  transform:none!important;width:auto;
}
.ct.sh #sGame.sh-desk #shDock #msg:empty{display:none}

/* Hint bar sits at the near edge of the felt, not over the trick */
.ct.sh #sGame.sh-desk #felt > #act:has(.sh-hintbar),
.ct.sh #sGame.sh-desk #felt > #act:has(.sh-bid){
  top:auto!important;bottom:10px!important;left:50%!important;right:auto!important;
  transform:translateX(-50%)!important;
  max-width:min(640px, 86%)!important;
  background:rgba(10,14,20,.78);
  border:1.5px solid rgba(241,215,122,.35);
  border-radius:16px;
  padding:10px 14px!important;
  z-index:8;
}
.ct.sh #sGame.sh-desk #felt > #act:has(.sh-hintbar){
  background:transparent;border:0;padding:0!important;bottom:6px!important;
}

/* Short desktops (1366x768): keep the oval LARGE, avatars large, score compact */
@media (min-width:1024px) and (max-height:820px) and (orientation:landscape){
  .ct.sh #sGame.sh-desk #shChrome{flex-basis:44px!important;min-height:44px!important;max-height:46px!important}
  .ct.sh #sGame.sh-desk #felt{
    width:92%!important;
    margin:2px auto 0!important;
    border-width:14px 18px 18px 18px!important;
    --tw: clamp(108px, 12.5vw, 150px);
    --seat-top: clamp(118px, 16vh, 150px);
    --seat-side: clamp(120px, 12vw, 180px);
  }
  .ct.sh #sGame.sh-desk #felt .seat .avw,
  .ct.sh #sGame.sh-desk #felt .seat .av{width:112px!important;height:112px!important}
  .ct.sh #sGame.sh-desk #felt .seat.s2 .avw,
  .ct.sh #sGame.sh-desk #felt .seat.s2 .av{width:120px!important;height:120px!important}
  .ct.sh #sGame.sh-desk #felt .seat.s2{top:-50px!important}
  .ct.sh #sGame.sh-desk #shChrome #shTop{width:min(420px, 44vw)!important;top:6px!important;right:8px!important}
  .ct.sh #sGame.sh-desk .me{margin-top:4px!important}
}

@media (min-width:1440px) and (min-height:860px){
  .ct.sh #sGame.sh-desk #felt .seat .avw,
  .ct.sh #sGame.sh-desk #felt .seat .av{width:148px!important;height:148px!important}
  .ct.sh #sGame.sh-desk #felt .seat.s2 .avw,
  .ct.sh #sGame.sh-desk #felt .seat.s2 .av{width:156px!important;height:156px!important}
  .ct.sh #sGame.sh-desk #felt{--tw: clamp(130px, 12vw, 180px)}
}

/* ---- Phone portrait: compact corner-style board at top, You rail clear of the trick ---- */
.ct.sh #sGame.sh-docked #shTop{
  flex-direction:column;gap:4px;padding:4px 8px 0;z-index:20;
}
.ct.sh #sGame.sh-docked #shTop .sh-live,
.ct.sh #sGame.sh-docked #shTop .sh-live.sh-board{
  padding:6px 8px!important;gap:4px!important;border-radius:12px!important;
}
.ct.sh #sGame.sh-docked #shTop table.sh-bt,
.ct.sh #sGame.sh-docked #shTop table.sh-bt th,
.ct.sh #sGame.sh-docked #shTop table.sh-bt td{font-size:12px!important;padding:3px 4px}
.ct.sh #sGame.sh-docked #shTop table.sh-bt thead th{font-size:9px!important;padding:1px 4px 3px}
.ct.sh #sGame.sh-docked #shTop table.sh-bt td.sc{font-size:14px!important}
.ct.sh #sGame.sh-docked #shTop table.sh-bt td.need span{font-size:10px;padding:0 5px}
.ct.sh #sGame.sh-docked #shTop .sh-live-sy{width:26px!important;height:26px!important}
.ct.sh #sGame.sh-docked #shTop .sh-live-sy svg{width:22px!important;height:22px!important}
.ct.sh #sGame.sh-docked #shTop .sh-live-tlbl{font-size:9px!important}
.ct.sh #sGame.sh-docked #shTop .sh-live-meta{font-size:11px!important;text-align:left}
.ct.sh #sGame.sh-docked #shTop .sh-last,
.ct.sh #sGame.sh-docked #shTop .sh-hands{min-height:32px!important;font-size:12px!important;padding:0 10px!important}

/* Felt fills the middle; You rail no longer pulls the near trick down */
.ct.sh #sGame.sh-docked #felt{
  flex:1 1 0!important;min-height:180px!important;
  margin:52px 28px 8px!important;
  border-radius:50% 50% 48% 48% / 38% 38% 46% 46%!important;
  border-width:10px!important;
  overflow:visible!important;
  --tw:56px;
  --seat-top: 78px;
  --seat-side: 78px;
  --seat-bot: 18px;
}
@media (min-height:780px){
  .ct.sh #sGame.sh-docked #felt{--tw:64px;margin-top:56px!important}
}
.ct.sh #sGame.sh-docked #felt .seat .avw{width:80px!important;height:80px!important;padding:3px!important}
.ct.sh #sGame.sh-docked #felt .seat .av{width:74px!important;height:74px!important}
@media (min-height:780px){
  .ct.sh #sGame.sh-docked #felt .seat .avw{width:92px!important;height:92px!important}
  .ct.sh #sGame.sh-docked #felt .seat .av{width:86px!important;height:86px!important}
}
.ct.sh #sGame.sh-docked #felt .seat.s2{top:-46px!important}
.ct.sh #sGame.sh-docked #felt .seat.s1{left:-40px!important}
.ct.sh #sGame.sh-docked #felt .seat.s3{right:-40px!important}

/* Near trick sits higher so the You rail cannot cover it (t9154u) */
.ct.sh #sGame.sh-docked .me{margin-top:6px!important;z-index:9}
.ct.sh #sGame.sh-docked .mebar{min-height:40px;padding:0!important}
.ct.sh #sGame.sh-docked .mebar .av{width:44px;height:44px}
.ct.sh #sGame.sh-docked #felt .trick{
  inset: var(--seat-top) var(--seat-side) var(--seat-bot) var(--seat-side)!important;
}
.ct.sh #sGame.sh-docked #felt .trick .slot.p0{left:50%!important;top:calc(50% + var(--tw) * .38)!important}
.ct.sh #sGame.sh-docked #felt .trick .slot.p2{left:50%!important;top:calc(50% - var(--tw) * .48)!important}
.ct.sh #sGame.sh-docked #felt .trick .slot.p1{left:calc(50% - var(--tw) * .72)!important;top:48%!important}
.ct.sh #sGame.sh-docked #felt .trick .slot.p3{left:calc(50% + var(--tw) * .72)!important;top:48%!important}

/* ---- Landscape phone: compact board in the side chrome ---- */
.ct.sh #sGame.sh-land:not(.sh-desk) #shTop .sh-live.sh-board{padding:4px 8px;gap:3px}
.ct.sh #sGame.sh-land:not(.sh-desk) table.sh-bt,
.ct.sh #sGame.sh-land:not(.sh-desk) table.sh-bt th,
.ct.sh #sGame.sh-land:not(.sh-desk) table.sh-bt td{font-size:11px;padding:2px 4px}
.ct.sh #sGame.sh-land:not(.sh-desk) table.sh-bt thead th{font-size:8px}
.ct.sh #sGame.sh-land:not(.sh-desk) #felt{
  border-radius:50% 50% 48% 48% / 40% 40% 46% 46%!important;
  overflow:visible!important;
}

/* ---- Bid UI: 0 (Nil)–13 + suggested highlight ---- */
.sh-bid{text-align:center}
.sh-bid h3{margin:0 0 6px;font-size:18px;color:#F1D77A}
.sh-sug{margin:0 0 8px;font-size:15px;font-weight:700;color:#F4F6F8;line-height:1.3}
.sh-sug b{color:#F1D77A;font-size:17px}
.sh-sug small{display:block;font-weight:550;color:#C0C6CC;font-size:12px;margin-top:2px}
.sh-bidgrid{
  display:grid;grid-template-columns:repeat(7,minmax(0,1fr));
  gap:6px;margin:0 0 10px;
}
.sh-bidgrid button{
  min-height:48px;font-size:18px;font-weight:800;padding:0 4px;
  position:relative;
}
.sh-bidgrid .nil{grid-column:1 / 2;font-size:14px;line-height:1.05;display:flex;flex-direction:column;align-items:center;justify-content:center}
.sh-bidgrid .nil small{font-size:10px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;opacity:.9}
.sh-bidgrid button.sug{
  outline:3px solid #ffd45a;box-shadow:0 0 14px rgba(255,212,90,.85);
}
.sh-bidgrid button.sug::after{
  content:"Suggested";position:absolute;top:-9px;left:50%;transform:translateX(-50%);
  font-size:8px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;
  background:#F1D77A;color:#1A1A1A;padding:0 5px;border-radius:6px;line-height:14px;white-space:nowrap;
}
.sh-bidgrid button[aria-pressed="true"]{outline:3px solid #fff3b0;background:linear-gradient(180deg,#F1D77A,#D4AF37);color:#1A1A1A}
.ct.sh #sGame.sh-desk #act .sh-bidgrid{gap:8px}
.ct.sh #sGame.sh-desk #act .sh-bidgrid button{min-height:56px;font-size:22px}
.ct.sh #sGame.sh-desk #act .sh-bidgrid .nil{min-height:56px;font-size:16px}
.ct.sh #sGame.sh-docked .sh-bidgrid{grid-template-columns:repeat(7,minmax(0,1fr));gap:4px}
.ct.sh #sGame.sh-docked .sh-bidgrid button{min-height:42px;font-size:16px}
.ct.sh #sGame.sh-docked .sh-sug{font-size:13px}
.ct.sh #sGame.sh-docked .sh-sug b{font-size:15px}
.ct.sh #sGame.sh-docked .sh-bid h3{display:none!important}

/* ---- What should I play? + hint lift ---- */
.sh-hintbar{display:flex;justify-content:center;margin:0}
.sh-whyg{
  min-height:40px!important;padding:0 16px!important;
  font-size:15px!important;font-weight:800!important;
  background:rgba(14,20,32,.88)!important;color:#F1D77A!important;
  border:1.5px solid rgba(241,215,122,.55)!important;border-radius:999px!important;
}
.sh-whyg:focus-visible{outline:2px solid #F1D77A;outline-offset:2px}
#hand .hc.sh-hint,
#hand:not(.two) .hc.sh-hint{
  transform:translateY(-18px) scale(1.12)!important;
  z-index:8!important;filter:drop-shadow(0 0 14px rgba(255,212,90,.95))!important;
}
#hand .hc.sh-hint::after{
  content:"Play this?";position:absolute;top:-16px;left:50%;transform:translateX(-50%);
  font-size:9px;font-weight:800;letter-spacing:.04em;text-transform:uppercase;
  background:#F1D77A;color:#1A1A1A;padding:1px 6px;border-radius:6px;white-space:nowrap;
  pointer-events:none;
}
.ct.sh #sGame.sh-docked .sh-whyg{min-height:36px!important;font-size:13px!important;padding:0 12px!important}
.ct.sh #sGame.sh-desk .sh-whyg{min-height:44px!important;font-size:16px!important}

/* Legal cards already get .ok from the kit; keep that lift obvious */
.ct.sh #hand .hc.ok{filter:brightness(1.05)}
.ct.sh #hand .hc.no{opacity:.45}

/* Received overlay stays viewport-centered (t9154u reshoot) */
.sh-got{
  position:fixed!important;left:50%!important;top:50%!important;right:auto!important;bottom:auto!important;
  transform:translate(-50%,-50%)!important;z-index:90!important;
  max-width:min(92vw,720px)!important;max-height:80vh!important;
}
.ct.sh #sGame.sh-desk .sh-got{top:50%!important}

/* ---- tfSHE2 layout lock: compact You+fan at the bottom, felt takes the rest ---- */
.ct.sh #sGame.sh-desk .me{
  display:flex!important;
  flex-direction:row!important;
  flex-wrap:wrap!important;
  align-items:flex-end!important;
  justify-content:center!important;
  gap:8px 10px!important;
  grid-template-columns:none!important;
  grid-template-rows:none!important;
  grid-area:auto!important;
  height:auto!important;
  max-height:190px!important;
  min-height:0!important;
  width:100%!important;
  padding:0 16px 8px!important;
  margin:0!important;
  overflow:visible!important;
}
.ct.sh #sGame.sh-desk #shDock{
  flex:0 0 100%!important;
  width:100%!important;
  max-width:none!important;
  order:-1!important;
  display:flex!important;
  flex-direction:column!important;
  align-items:center!important;
  margin:0 auto 2px!important;
  max-height:40px!important;
}
.ct.sh #sGame.sh-desk .mebar{
  position:static!important;
  inset:auto!important;
  transform:none!important;
  flex:0 0 auto!important;
  width:auto!important;
  max-width:110px!important;
  top:auto!important;
  left:auto!important;
  padding:4px 8px!important;
  order:0!important;
}
.ct.sh #sGame.sh-desk #hand,
.ct.sh #sGame.sh-desk .me #hand,
.ct.sh #sGame.sh-desk .me .hand{
  flex:1 1 auto!important;
  width:auto!important;
  min-width:0!important;
  max-width:none!important;
  max-height:170px!important;
  height:calc(var(--hcw, 96px) * 1.45 + 18px)!important;
  position:relative!important;
  margin:0!important;
  order:1!important;
  grid-column:auto!important;
  grid-row:auto!important;
  overflow:visible!important;
}
.ct.sh #sGame.sh-desk #felt{
  flex:1 1 0%!important;
  height:0!important;           /* let flex assign the used height */
  min-height:320px!important;
  width:90%!important;
  margin:2px auto 0!important;
}

/* Score board: no truncated headers, Need fully visible, names wrap */
.ct.sh #sGame.sh-desk #shChrome #shTop{
  width:min(500px, 46vw)!important;
}
table.sh-bt{table-layout:auto}
table.sh-bt th, table.sh-bt td{overflow:visible;text-overflow:clip}
table.sh-bt thead th{letter-spacing:.04em;font-size:9px;padding:2px 4px 4px}
table.sh-bt tbody th{white-space:normal;line-height:1.15;width:auto;min-width:7.5em}
table.sh-bt td.need{white-space:nowrap;overflow:visible}
table.sh-bt td.need span{white-space:nowrap}

/* Warm the approved room art a little — the file is a very dark navy */
.ct.sh .gk-bg{
  filter:brightness(1.55) saturate(1.25) contrast(1.06);
}
.ct.sh .gk-bg::after{
  content:"";position:absolute;inset:0;pointer-events:none;
  background:
    radial-gradient(ellipse 70% 55% at 50% 40%, rgba(200,150,70,.14), transparent 70%),
    radial-gradient(ellipse 90% 80% at 50% 50%, transparent 50%, rgba(8,6,4,.4) 100%);
}

/* Phone: keep You+hand compact so the felt stays tall */
.ct.sh #sGame.sh-docked .me{
  display:flex!important;
  flex-direction:row!important;
  flex-wrap:wrap!important;
  align-items:flex-end!important;
  margin-top:4px!important;
  max-height:200px!important;
  padding:0 6px 6px!important;
}
.ct.sh #sGame.sh-docked #hand,
.ct.sh #sGame.sh-docked .me .hand{
  flex:1 1 auto!important;
  min-width:0!important;
  max-height:160px!important;
  width:auto!important;
}
/* Keep the message and hint in the gap above the (now shorter) hand, not on the cards */
.ct.sh #sGame.sh-desk #shDock #msg{
  margin-bottom:4px!important;
  max-width:720px;
  z-index:12;
}
.ct.sh #sGame.sh-desk #felt > #act:has(.sh-hintbar){
  bottom:auto!important;
  top:auto!important;
  /* sit just inside the near edge of the felt */
  bottom:12px!important;
}
.ct.sh #sGame.sh-desk #hand .hc{max-height:150px}

/* =====================================================================
   tfSHE3 layout lock — seated robots, full large hand, readable scores.
   These rules must win over earlier size caps. Do not shrink the hand
   back under the viewport, and never show circular portrait badges.
   ===================================================================== */

/* ---- Seated figures: behind the felt edge, no badges, no pedestals ---- */
#shBodies{
  position:absolute;inset:0;z-index:2;pointer-events:none;overflow:visible;
}
#felt #shBodies{z-index:2}
.sh-body-across{z-index:3}
.sh-body-left,.sh-body-right{z-index:3}
.ct.sh #sGame{position:relative}
.ct.sh #sGame #felt{z-index:3;overflow:visible!important}
.ct.sh #sGame #felt .trick, .ct.sh #sGame #felt .slot{z-index:6}
.ct.sh #sGame #felt .seat{z-index:7}
.ct.sh #sGame #shChrome, .ct.sh #sGame #shTop{z-index:8}
.sh-body{
  position:absolute;
  display:block;
  object-fit:contain;
  object-position:bottom center;
  pointer-events:none;
  border:0;border-radius:0;background:none;padding:0;
  filter:drop-shadow(0 10px 18px rgba(0,0,0,.55));
  /* no circular clip, no gold ring frame, no pedestal */
}
.sh-body.sh-flip{transform:scaleX(-1)}
.sh-body.sh-turn{
  filter:
    drop-shadow(0 0 4px #ffe58a)
    drop-shadow(0 0 16px rgba(255,214,96,.95))
    drop-shadow(0 10px 18px rgba(0,0,0,.55));
}
/* Hide every circular portrait badge at the table. Name + bid chip stay. */
.ct.sh #sGame #felt .seat .avw,
.ct.sh #sGame.sh-desk #felt .seat .avw,
.ct.sh #sGame.sh-docked #felt .seat .avw,
.ct.sh #sGame.sh-land #felt .seat .avw,
.ct.sh #sGame #felt .seat .av,
.ct.sh #sGame.sh-desk #felt .seat .av,
.ct.sh #sGame.sh-docked #felt .seat .av,
.ct.sh #sGame.sh-land #felt .seat .av{
  display:none!important;
  width:0!important;height:0!important;
  padding:0!important;border:0!important;
  overflow:hidden!important;
}
.ct.sh #sGame #felt .seat,
.ct.sh #sGame.sh-desk #felt .seat,
.ct.sh #sGame.sh-docked #felt .seat{
  width:auto!important;
  max-width:160px!important;
  background:transparent!important;
  box-shadow:none!important;
  border:0!important;
  padding:0!important;
  gap:4px!important;
  align-items:center!important;
}
/* Name plate is a flat label on the felt — not a raised pedestal. */
.ct.sh #sGame #felt .seat .nm{
  background:rgba(8,12,20,.88)!important;
  color:#F7F9FB!important;
  border:1px solid rgba(241,215,122,.5)!important;
  border-radius:8px!important;
  padding:3px 11px!important;
  font-size:15px!important;
  font-weight:800!important;
  line-height:1.2!important;
  text-shadow:0 1px 2px rgba(0,0,0,.65);
  max-width:160px!important;
  overflow:visible!important;
  white-space:nowrap!important;
}
.ct.sh #sGame.sh-docked #felt .seat .nm{font-size:13px!important;padding:2px 8px!important}
.ct.sh #sGame #felt .seat.turn .nm{
  border-color:#ffe58a!important;
  box-shadow:0 0 0 2px rgba(255,229,138,.55),0 0 16px rgba(255,214,96,.75);
  color:#FFF8D8!important;
}
.ct.sh #sGame #felt .seat .chip{
  background:rgba(8,12,20,.88)!important;
  color:#F1D77A!important;
  border:1px solid rgba(241,215,122,.4)!important;
  font-weight:800;
}

/* ---- Hand: fully visible, larger, neatly fanned, clear legal lift ---- */
.ct.sh #sGame.sh-desk .me,
.ct.sh #sGame.sh-desk .me.me{
  display:flex!important;
  flex-direction:row!important;
  flex-wrap:wrap!important; /* #shDock is 100% width on its own row; You + hand on the next */
  align-items:flex-end!important;
  justify-content:flex-start!important;
  height:auto!important;
  max-height:none!important;
  min-height:0!important;
  width:100%!important;
  padding:0 16px 14px!important;
  margin:0!important;
  overflow:visible!important;
  flex:0 0 auto!important;
  z-index:9;
}
.ct.sh #sGame.sh-desk #hand,
.ct.sh #sGame.sh-desk .me #hand,
.ct.sh #sGame.sh-desk .me .hand{
  flex:1 1 auto!important;
  width:auto!important;
  min-width:0!important;
  max-width:none!important;
  max-height:none!important;
  height:calc(var(--hcw, 128px) * 1.42 + var(--lift, 36px) + 18px)!important;
  position:relative!important;
  margin:0!important;
  overflow:visible!important;
  padding:0 4px!important;
}
.ct.sh #sGame.sh-desk #hand .hc,
.ct.sh #sGame.sh-desk .me #hand .hc{
  max-height:none!important;
  width:var(--hcw, 128px)!important;
  height:calc(var(--hcw, 128px) * 1.42)!important;
  bottom:10px!important;
  overflow:visible!important;
}
/* Legal cards lift clearly and keep a gold ring. Transform comes from fanHand. */
.ct.sh #hand .hc.ok,
.ct.sh #hand.playing .hc.ok,
.ct.sh #hand.playing .hc.ok:not(.arm),
.ct.sh #sGame.sh-desk #hand .hc.ok,
.ct.sh #sGame.sh-desk #hand.playing .hc.ok:not(.arm){
  filter:brightness(1.06)!important;
  box-shadow:0 0 0 3px #F1D77A, 0 0 14px rgba(241,215,122,.75), 0 10px 16px rgba(0,0,0,.45)!important;
  z-index:30!important;
  transform:translateY(var(--lift, -36px)) rotate(var(--rot, 0deg))!important;
}
.ct.sh #hand .hc.sh-hint,
.ct.sh #hand:not(.two) .hc.sh-hint,
.ct.sh #sGame.sh-desk #hand .hc.sh-hint{
  box-shadow:0 0 0 3px #F1D77A, 0 0 18px rgba(241,215,122,.95), 0 10px 16px rgba(0,0,0,.45)!important;
  z-index:40!important;
}
/* Illegal cards are dimmed but still fully readable (WCAG-minded contrast). */
.ct.sh #hand .hc.no,
.ct.sh #sGame.sh-desk #hand .hc.no,
.ct.sh #sGame.sh-docked #hand .hc.no{
  opacity:1!important;
  filter:saturate(.78) brightness(.88)!important;
}

/* Phone: whole hand on screen, larger than tfSHE2, You rail clear of the trick. */
.ct.sh #sGame.sh-docked .me{
  display:flex!important;
  flex-direction:row!important;
  flex-wrap:wrap!important;
  align-items:flex-end!important;
  max-height:none!important;
  min-height:0!important;
  padding:0 6px 12px!important;
  margin-top:4px!important;
  overflow:visible!important;
  flex:0 0 auto!important;
  z-index:9;
}
.ct.sh #sGame.sh-docked #hand,
.ct.sh #sGame.sh-docked .me #hand,
.ct.sh #sGame.sh-docked .me .hand{
  flex:1 1 auto!important;
  min-width:0!important;
  max-height:none!important;
  width:auto!important;
  height:calc(var(--hcw, 84px) * 1.42 + var(--lift, 28px) + 16px)!important;
  overflow:visible!important;
}
.ct.sh #sGame.sh-docked #hand .hc{
  max-height:none!important;
  width:var(--hcw, 84px)!important;
  height:calc(var(--hcw, 84px) * 1.42)!important;
  bottom:8px!important;
}

/* Felt still fills the remaining space (wide oval kept). */
.ct.sh #sGame.sh-desk #felt{
  flex:1 1 0%!important;
  height:0!important;
  min-height:280px!important;
  width:90%!important;
  margin:2px auto 0!important;
}

/* ---- Score board: WCAG AA+, a little larger, same columns ---- */
.ct.sh #sGame.sh-desk #shChrome #shTop,
.ct.sh #sGame.sh-desk #shChrome #shTop.sh-top{
  width:min(560px, 52vw)!important;
  min-width:min(420px, 48vw);
}
.ct.sh #sGame.sh-desk #shChrome #shTop .sh-live.sh-board{
  padding:12px 16px 10px!important;
  background:rgba(8,12,20,.92)!important;
  border:1.5px solid rgba(241,215,122,.55)!important;
}
table.sh-bt,
.ct.sh #sGame.sh-desk #shChrome #shTop table.sh-bt{
  font-size:16px!important;
  color:#FFFFFF!important;
  table-layout:auto!important;
}
table.sh-bt thead th,
.ct.sh #sGame.sh-desk #shChrome #shTop table.sh-bt thead th,
.ct.sh #sGame.sh-docked #shTop table.sh-bt thead th{
  font-size:13px!important;
  font-weight:800!important;
  letter-spacing:.06em!important;
  text-transform:uppercase!important;
  color:#F5F7FA!important; /* ≈ 14:1 on #0A0E14 — AAA */
  padding:4px 8px 7px!important;
  border-bottom:1.5px solid rgba(241,215,122,.5)!important;
}
table.sh-bt th, table.sh-bt td,
table.sh-bt tbody th, table.sh-bt tbody td,
.ct.sh #sGame.sh-desk #shChrome #shTop table.sh-bt th,
.ct.sh #sGame.sh-desk #shChrome #shTop table.sh-bt td{
  font-size:16px!important;
  font-weight:750!important;
  color:#FFFFFF!important;
  padding:6px 8px!important;
  overflow:visible!important;
}
table.sh-bt tbody th,
.ct.sh #sGame.sh-desk #shChrome #shTop table.sh-bt tbody th{
  color:#FFF8E6!important;
  font-weight:800!important;
  font-size:15px!important;
  text-align:left!important;
}
table.sh-bt td.sc,
.ct.sh #sGame.sh-desk #shChrome #shTop table.sh-bt td.sc{
  font-size:19px!important;
  font-weight:900!important;
  color:#FFE89A!important;
}
table.sh-bt td.need span,
.ct.sh #sGame.sh-desk #shChrome #shTop table.sh-bt td.need span{
  font-size:13px!important;
  font-weight:800!important;
  padding:2px 9px!important;
  color:#1A1400!important;
  background:#F1D77A!important; /* gold pill, dark text — AA+ */
}
table.sh-bt td.need.need span{background:#F1D77A!important;color:#1A1400!important}
table.sh-bt td.need.made span{background:#2EB860!important;color:#06210E!important}
table.sh-bt td.need.over span{background:#FFD79A!important;color:#1A1400!important}
table.sh-bt td.need.na span{background:transparent!important;color:#F5F7FA!important}
.sh-live-meta,
.ct.sh #sGame.sh-desk #shChrome #shTop .sh-live-meta{
  font-size:13px!important;
  font-weight:700!important;
  color:#F0F2F4!important;
}
.ct.sh #sGame.sh-docked #shTop{
  width:calc(100% - 12px)!important;
  max-width:calc(100vw - 12px)!important;
  box-sizing:border-box!important;
  left:6px!important;right:6px!important;
}
.ct.sh #sGame.sh-docked #shTop .sh-live.sh-board{padding:8px 10px!important}
.ct.sh #sGame.sh-docked #shTop table.sh-bt,
.ct.sh #sGame.sh-docked #shTop table.sh-bt th,
.ct.sh #sGame.sh-docked #shTop table.sh-bt td{font-size:14px!important;color:#FFFFFF!important;padding:5px 6px!important}
.ct.sh #sGame.sh-docked #shTop table.sh-bt thead th{font-size:12px!important;color:#F5F7FA!important;padding:3px 6px 5px!important}
.ct.sh #sGame.sh-docked #shTop table.sh-bt td.sc{font-size:17px!important;color:#FFE89A!important}
.ct.sh #sGame.sh-docked #shTop table.sh-bt td.need span{font-size:12px!important;color:#1A1400!important;background:#F1D77A!important}

/* Hint bar stays on the near felt, not over the hand. */
.ct.sh #sGame.sh-desk #shDock{max-height:none!important;flex:0 0 auto!important}

/* tfSHE3-overflow-lock */
.ct.sh #sGame, body.sh, .ct.sh .gk-app{overflow-x:hidden!important}
.ct.sh #sGame.sh-desk .me #shDock, .ct.sh #sGame.sh-desk #shDock{flex:0 0 100%!important;width:100%!important;max-width:100%!important}
.ct.sh #sGame.sh-desk .mebar{flex:0 0 auto!important}
.ct.sh #sGame.sh-desk #hand{flex:1 1 0%!important;min-width:200px!important;width:auto!important}

.ct.sh #sGame.sh-docked #shTop .sh-live.sh-board{max-width:100%!important;box-sizing:border-box!important;overflow:visible!important}
.ct.sh #sGame.sh-docked #shTop table.sh-bt{width:100%!important;table-layout:auto!important}
.ct.sh #sGame.sh-docked #shTop table.sh-bt thead th,
.ct.sh #sGame.sh-docked #shTop table.sh-bt th,
.ct.sh #sGame.sh-docked #shTop table.sh-bt td{
  padding:4px 3px!important;font-size:12px!important;white-space:nowrap!important;
}
.ct.sh #sGame.sh-docked #shTop table.sh-bt thead th{font-size:11px!important;color:#F5F7FA!important}
.ct.sh #sGame.sh-docked #shTop table.sh-bt td.sc{font-size:15px!important}
.ct.sh #sGame.sh-docked #shTop table.sh-bt td.need span{font-size:11px!important;padding:1px 6px!important}

/* tfSHE3 name plates: above partner, beside left/right, never on the trick. */
.ct.sh #sGame #felt .seat.s2,
.ct.sh #sGame.sh-desk #felt .seat.s2,
.ct.sh #sGame.sh-docked #felt .seat.s2{
  top:-36px!important;
  left:50%!important;
  right:auto!important;
  bottom:auto!important;
  transform:translate(-50%,0)!important;
  flex-direction:column!important;
}
.ct.sh #sGame.sh-desk #felt .seat.s1{left:8px!important;top:38%!important;right:auto!important;transform:none!important}
.ct.sh #sGame.sh-desk #felt .seat.s3{right:8px!important;top:auto!important;bottom:18%!important;left:auto!important;transform:none!important}
.ct.sh #sGame.sh-docked #felt .seat.s1{left:2px!important;top:42%!important;right:auto!important;transform:none!important}
.ct.sh #sGame.sh-docked #felt .seat.s3{right:2px!important;top:48%!important;left:auto!important;transform:none!important}


/* =====================================================================
   tfSHE4 polish — Pinky clear of the trick, phone robots around the rail,
   phone hand with a readable rank/suit on every card.
   ===================================================================== */

/* Desktop: slightly smaller trick, shifted down so Pinky's face and name sit fully above it.
   Still a big centered trick; hint bar drops just under the near card. */
.ct.sh #sGame.sh-desk #felt{
  --tw: clamp(114px, 10.3vw, 148px) !important;
}
@media (min-width: 1280px) and (min-height: 700px){
  .ct.sh #sGame.sh-desk #felt{ --tw: clamp(118px, 10.4vw, 148px) !important; }
}
.ct.sh #sGame.sh-desk #felt .trick .slot.p0{left:50%!important;top:calc(63% + var(--tw) * .34)!important}
.ct.sh #sGame.sh-desk #felt .trick .slot.p2{left:50%!important;top:calc(63% - var(--tw) * .32)!important}
.ct.sh #sGame.sh-desk #felt .trick .slot.p1{left:calc(50% - var(--tw) * .66)!important;top:62%!important}
.ct.sh #sGame.sh-desk #felt .trick .slot.p3{left:calc(50% + var(--tw) * .66)!important;top:62%!important}

/* Hint bar sits in the gap between the felt and the hand, never on a trick card. */
.ct.sh #sGame.sh-desk #felt > #act:has(.sh-hintbar){
  bottom: -48px !important;
  top: auto !important;
  z-index: 12;
}
.ct.sh #sGame.sh-desk #shDock #msg,
.ct.sh #sGame.sh-desk .me #shDock #msg{
  margin-top: 36px !important;
}

/* Phone: hand uses the full row so 13 indices can peek; You badge sits in the corner
   over the lower half of the first cards (ranks live at the top). */
.ct.sh #sGame.sh-docked .me{
  position: relative !important;
  flex-wrap: wrap !important;
  flex-direction: row !important;
}
.ct.sh #sGame.sh-docked .me #hand,
.ct.sh #sGame.sh-docked #hand,
.ct.sh #sGame.sh-docked .me .hand{
  flex: 1 1 100% !important;
  width: 100% !important;
  min-width: 100% !important;
  max-width: 100% !important;
  order: 1;
}
.ct.sh #sGame.sh-docked .mebar,
.ct.sh #sGame.sh-docked .me .mebar{
  position: absolute !important;
  left: 2px !important;
  bottom: 2px !important;
  z-index: 14;
  margin: 0 !important;
  pointer-events: auto;
}
.ct.sh #sGame.sh-docked #shDock{
  flex: 0 0 100% !important;
  width: 100% !important;
  order: 0;
}

/* Phone trick stays centered with a little more inset so side robots have a rail. */
.ct.sh #sGame.sh-docked #felt{
  --tw: 54px !important;
  --seat-top: 64px;
  --seat-side: 86px;
  --seat-bot: 16px;
}
@media (min-height: 780px){
  .ct.sh #sGame.sh-docked #felt{ --tw: 58px !important; }
}
.ct.sh #sGame.sh-docked #felt .trick .slot.p0{left:50%!important;top:calc(56% + var(--tw) * .34)!important}
.ct.sh #sGame.sh-docked #felt .trick .slot.p2{left:50%!important;top:calc(56% - var(--tw) * .36)!important}
.ct.sh #sGame.sh-docked #felt .trick .slot.p1{left:calc(50% - var(--tw) * .68)!important;top:54%!important}
.ct.sh #sGame.sh-docked #felt .trick .slot.p3{left:calc(50% + var(--tw) * .68)!important;top:54%!important}

/* Name plates stay off faces and off the trick. */
.ct.sh #sGame.sh-desk #felt .seat.s2{
  top: -32px !important;
}


/* tfPN9i: hand-above-footer on short visual viewports (Chrome URL bar).
   Shrink the felt first, never the hand. Same idea as Pinochle tfPN9h5. */
.ct.sh #sGame.sh-docked.sh-play-tight #felt{
  min-height:72px!important;
  margin:28px 32px 4px!important;
  --tw:46px;
}
.ct.sh #sGame.sh-docked.sh-play-tighter #felt{
  min-height:48px!important;
  margin:22px 28px 2px!important;
  --tw:40px;
}
body.sh:has(#sGame.sh-docked:not([hidden])) .gk-notices{z-index:4}

/* Rejected-tap hint + shake (one-tap path). */
.sh-play-hint{
  flex:none;
  margin:0 8px 4px;
  padding:4px 10px;
  border-radius:10px;
  background:rgba(14,20,32,.94);
  border:1.5px solid #ffd45a;
  color:#fff4dc;
  font-weight:700;
  font-size:15px;
  text-align:center;
  z-index:12;
}
@keyframes sh-rej-shake{
  0%,100%{transform:translateX(0)}
  20%{transform:translateX(-6px)}
  40%{transform:translateX(6px)}
  60%{transform:translateX(-4px)}
  80%{transform:translateX(4px)}
}
#hand .hc .card.sh-rej,
#hand .hc.sh-rej{animation:sh-rej-shake .45s ease}
@media (prefers-reduced-motion:reduce){
  #hand .hc .card.sh-rej,
  #hand .hc.sh-rej{animation:none}
}

/* t9336u: iPhone Safari — You under the hand, app height is the visual viewport (dvh) */
html:has(body.sh),
body.sh{
  height:100dvh !important;
  max-height:100dvh !important;
  min-height:0 !important;
  overflow:hidden !important;
  overscroll-behavior:none;
}
body.sh .gk-app{
  top:0 !important;
  bottom:auto !important;
  height:100dvh !important;
  max-height:100dvh !important;
  box-sizing:border-box;
  overflow:hidden !important;
}
@supports (height:100dvh){
  body.sh .gk-app{height:100dvh !important;max-height:100dvh !important;bottom:auto !important}
}
/* Beat the earlier "You sits over the lower half of the first cards" rule. */
.ct.sh #sGame.sh-docked .me{
  position:relative !important;
  display:flex !important;
  flex-direction:column !important;
  flex-wrap:nowrap !important;
  align-items:center !important;
  margin-top:4px !important;
}
.ct.sh #sGame.sh-docked .me #hand,
.ct.sh #sGame.sh-docked #hand,
.ct.sh #sGame.sh-docked .me .hand{
  flex:0 0 auto !important;
  width:100% !important;
  min-width:100% !important;
  max-width:100% !important;
  order:1 !important;
  position:relative !important;
}
.ct.sh #sGame.sh-docked .mebar,
.ct.sh #sGame.sh-docked .me .mebar{
  position:relative !important;
  left:auto !important;
  right:auto !important;
  top:auto !important;
  bottom:auto !important;
  order:2 !important;
  align-self:center !important;
  margin:6px auto 8px !important;
  z-index:9;
  max-width:none !important;
  width:auto !important;
}
.ct.sh #sGame.sh-docked #shDock{
  flex:0 0 auto !important;
  width:100% !important;
  order:0 !important;
}
body.sh:has(#sGame.sh-docked:not([hidden])) .gk-notices{
  flex:none;
  z-index:8;
  padding-bottom:max(8px, calc(var(--sab) + 6px));
}
