:root{color-scheme:dark;--ink:#e8edf0;--muted:#91a4b1;--bg:#101e29;--gold:#dfbd7c;--line:#30414d;--panel:#182a37;--felt:#257b91;--blue:#81c2da}*{box-sizing:border-box}body{margin:0;background:radial-gradient(ellipse at 60% -25%,#28495e 0,transparent 65%),var(--bg);color:var(--ink);font:14px/1.5 'Avenir Next',Avenir,'Segoe UI',sans-serif}button,input,select{font:inherit}button,select{cursor:pointer}button{color:var(--ink);background:transparent;border:1px solid var(--line);border-radius:7px;padding:10px 14px;transition:background .16s,border-color .16s}button:hover{border-color:#81929b;background:#ffffff09}button:disabled{opacity:.38;cursor:not-allowed}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,canvas:focus-visible{outline:2px solid var(--blue);outline-offset:3px}[hidden]{display:none!important}main{max-width:1600px;margin:auto;padding:26px 38px}header{display:flex;align-items:center;justify-content:space-between;gap:22px;padding-bottom:25px;border-bottom:1px solid var(--line)}.brand{display:flex;align-items:center;gap:12px;color:var(--ink);text-decoration:none;font-size:17px;font-weight:700;letter-spacing:2px}.brand small{display:block;font-size:8px;font-weight:500;letter-spacing:2px;color:var(--muted);margin-top:3px}.brand-ball{background:radial-gradient(circle at 35% 25%,#f7e4b9,#ceac6c 65%,#806442);border:3px solid #e6cfa0;color:#2a3438;box-shadow:0 4px 10px #0006;border-radius:50%;height:43px;width:43px;display:grid;place-items:center;font:24px Georgia}nav{display:flex;gap:5px;background:#0c1a244f;padding:4px;border:1px solid #ffffff0a;border-radius:9px}nav button{border-color:transparent;color:var(--muted);font-size:12px;padding:9px 15px}nav .selected{background:#304553;color:#f4e7ce;box-shadow:0 2px 4px #0002}.header-actions{display:flex;gap:9px}.header-actions button{border:0;font-size:12px;color:var(--muted)}.heading{display:flex;align-items:center;justify-content:space-between;padding:28px 0 26px}.eyebrow{font-size:9px;font-weight:700;letter-spacing:2.2px;color:var(--gold);margin:0 0 8px}h1{font:400 clamp(26px,3vw,42px)/1.2 Georgia,serif;letter-spacing:-1px;margin:0}h2{font:400 26px/1.2 Georgia,serif;margin:0 0 20px}.connection{display:flex;align-items:center;gap:9px;font-size:11px;color:var(--muted)}.connection i{width:6px;height:6px;background:#8a9ca7;border-radius:50%}.connection.online i{background:#8cc6ad;box-shadow:0 0 10px #8cc6ad70}.connection.offline i{background:#dcaa77}.layout{display:grid;grid-template-columns:265px minmax(0,1fr);gap:26px;align-items:start}.club-panel{background:linear-gradient(145deg,#213542,var(--panel));border:1px solid #3b505e;border-radius:12px;padding:21px 20px;box-shadow:0 10px 30px #0002}.panel-heading{display:flex;align-items:center;justify-content:space-between;margin-bottom:20px}.panel-heading h2{font-size:24px;margin:0}.panel-heading button{font-size:20px;line-height:1;padding:4px 9px;border:0;color:var(--muted)}.field{display:block;font-size:9px;letter-spacing:1.2px;font-weight:600;color:var(--muted);margin-bottom:17px}input:not([type=range]):not([type=checkbox]),select{display:block;width:100%;min-width:0;border:1px solid #415360;border-radius:6px;background:#122430;color:var(--ink);padding:10px 11px;font-size:13px;letter-spacing:0;margin-top:7px}input::placeholder{color:#718692}.server-meta{font-size:10px;color:#9ab4c4;margin:-9px 0 20px}.lobby-tabs{display:flex;border-bottom:1px solid #43535e;margin-bottom:20px;gap:16px}.lobby-tabs button{padding:0 0 10px;font-size:12px;border:0;border-radius:0;color:var(--muted)}.lobby-tabs .selected{border-bottom:2px solid var(--gold);color:var(--gold)}.inline{display:flex;align-items:end;gap:6px}.inline input{width:0!important;flex:1;text-transform:uppercase}.gold{background:linear-gradient(#ead099,#d6b174);color:#1d2b33;border:1px solid #e7c991;font-weight:650;box-shadow:inset 0 1px #fff4,0 3px 8px #0002}.gold:hover{background:linear-gradient(#f4ddb0,#e4c18a);border-color:#f2dfba}.wide{width:100%}.checkbox{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--muted);margin:5px 0 20px}.checkbox input{accent-color:var(--gold)}.section-label{font-size:9px;letter-spacing:1.4px;color:var(--muted);margin:22px 0 10px;display:flex;justify-content:space-between}.empty{font-size:12px;color:var(--muted);line-height:1.7;padding:15px 0}.room-list{display:grid;gap:8px}.room-card{padding:11px;border:1px solid #405663;border-radius:7px;display:flex;justify-content:space-between;gap:8px;align-items:center}.room-card strong{font-size:12px;font-weight:500;overflow-wrap:anywhere}.room-card small{display:block;color:var(--muted);font-size:10px;margin-top:4px}.room-card button{padding:6px 10px;font-size:11px}.house-note{border-top:1px solid #3c4e59;margin-top:25px;padding-top:18px;display:flex;gap:11px;align-items:center}.house-note p{font:italic 13px/1.5 Georgia;color:#afbdc3;margin:0}.tiny-ball{height:29px;width:29px;border:1px solid #b49d72;border-radius:50%;display:grid;place-items:center;color:var(--gold);font-family:Georgia}#notice{font-size:12px;color:#f0c896;line-height:1.5;overflow-wrap:anywhere}#notice:not(:empty){padding-top:15px}.server-link{color:var(--gold);font-size:12px;display:block;margin-top:10px}.invite{width:100%;border-style:dashed;text-align:left;padding:13px;margin:0 0 5px}.invite span,.invite small{display:block;font-size:9px;letter-spacing:1px;color:var(--muted)}.invite strong{display:block;font:22px/1.5 'Courier New',monospace;letter-spacing:2px;color:var(--gold)}.invite small{letter-spacing:0}.player{display:flex;align-items:center;gap:10px;padding:12px 0;border-bottom:1px solid #ffffff0b}.avatar{width:30px;height:30px;display:grid;place-items:center;background:#334e60;color:#c3dce7;border-radius:50%;font-size:11px}.player.current .avatar{background:var(--gold);color:#233744}.player .player-details{flex:1;min-width:0}.player strong{display:block;font-size:12px;overflow-wrap:anywhere}.player small{font-size:10px;color:var(--muted)}.player .indicator{width:6px;height:6px;background:#739582;border-radius:50%}.player .indicator.away{background:#b08866}.room-buttons{display:grid;gap:9px;margin-top:22px}.subtle{color:var(--muted);font-size:12px}.muted{color:var(--muted);font-size:13px;line-height:1.7}#local-players{margin-top:20px}.matchbar{display:flex;align-items:center;gap:20px;padding:2px 5px 18px;min-height:66px}.turn-info{display:flex;align-items:center;gap:12px;flex:1}.turn-avatar{width:38px;height:38px;border:1px solid #657e8d;border-radius:50%;display:grid;place-items:center;color:var(--gold);font:20px Georgia}.turn-info small{display:block;font-size:8px;letter-spacing:1.8px;color:var(--muted);margin-bottom:3px}.turn-info strong{font-size:17px;font-weight:500}.secret-button{font-size:11px;color:var(--gold);border-color:#5d594c;padding:10px 13px}.secret-button span{font-size:16px;margin-right:7px}.clock{font:22px 'Courier New',monospace;color:#cbd9de;text-align:center;min-width:68px}.clock small{display:block;font:7px 'Avenir Next',sans-serif;letter-spacing:1.3px;color:var(--muted);margin-top:2px}.clock.urgent{color:#eca488}.table-stage{position:relative;isolation:isolate;background:radial-gradient(ellipse,#29424b,#0c1a23 70%);padding:20px 12px 26px;border-radius:13px;box-shadow:inset 0 0 30px #0003,0 20px 30px #0002}canvas{display:block;width:100%;touch-action:none;filter:drop-shadow(0 12px 7px #0009);border-radius:25px}.table-badge{position:absolute;bottom:7px;left:0;right:0;text-align:center;letter-spacing:3px;font-size:7px;color:#718592;pointer-events:none}#fullscreen{position:absolute;right:10px;bottom:5px;padding:0 5px;border:0;color:#8195a1;font-size:19px}.table-stage:fullscreen{display:flex;align-items:center;background:#0e1a22;padding:30px}.table-stage:fullscreen canvas{max-height:95vh;object-fit:contain}.shot-desk{display:flex;gap:30px;align-items:center;padding:25px 16px 20px}.next-ball{display:flex;align-items:center;gap:10px;min-width:130px}.number-ball{background:radial-gradient(circle at 30% 20%,#fffff4,#d8d9cb 75%,#8e9897);border:4px solid #cba041;box-shadow:0 3px 6px #0004;border-radius:50%;width:38px;height:38px;display:grid;place-items:center;font:bold 17px Georgia;color:#243745}.next-ball small{display:block;font-size:8px;letter-spacing:1.5px;color:var(--muted)}.next-ball strong{font-size:12px;font-weight:500}.power-control{flex:1;max-width:320px;margin:auto}.power-control label{display:flex;justify-content:space-between;font-size:8px;letter-spacing:1.5px;color:var(--muted)}output{font:11px 'Courier New',monospace;color:var(--gold)}input[type=range]{width:100%;accent-color:var(--gold);height:18px;cursor:pointer;margin:8px 0 0}.power-ticks{display:flex;justify-content:space-between;font-size:7px;color:#6f8491;letter-spacing:1px}.shot-button{min-width:175px;text-align:left;padding:15px 20px}.shot-button span{float:right;margin-left:22px}.table-status{display:flex;align-items:center;gap:8px;padding:12px 16px;background:#1d3241;border:1px solid #314958;border-radius:7px}.table-status p{margin:0;font-size:12px;color:#b5c8d3;flex:1}.table-status>span:last-child{font-size:8px;letter-spacing:1px;color:var(--muted);white-space:nowrap}.status-dot{width:5px;height:5px;border-radius:50%;background:var(--blue)}.tray{display:flex;align-items:center;gap:18px;padding:16px;min-height:62px;font-size:8px;letter-spacing:1.5px;color:var(--muted)}#potted{display:flex;align-items:center;gap:6px;flex:1;flex-wrap:wrap}.mini{width:23px;height:23px;display:grid;place-items:center;border:3px solid var(--ball-color,#d3ba78);background:#eae8dd;color:#21303a;border-radius:50%;font:bold 10px Arial;letter-spacing:0;box-shadow:0 2px 4px #0004}.table-footer{display:flex;justify-content:space-between;gap:10px;padding:0 16px;color:#657e8d;font-size:8px;letter-spacing:.6px}kbd{font:7px Arial;border:1px solid #3b5362;border-radius:3px;padding:2px 4px;margin:0 5px 0 10px}footer{display:flex;justify-content:space-between;gap:20px;border-top:1px solid var(--line);margin-top:35px;padding:20px 0 0;color:#78909e;font-size:9px;letter-spacing:1px}footer i{font:italic 11px Georgia;margin-left:12px;letter-spacing:0}#handoff{position:absolute;inset:0;border-radius:12px;background:#10232ef5;backdrop-filter:blur(7px);display:flex;align-items:center;justify-content:center;flex-direction:column;text-align:center;padding:20px;z-index:5}#handoff h2{font-size:36px;margin:8px 0 12px}#handoff p:not(.eyebrow){color:var(--muted);font-size:13px;max-width:360px}#secret-number{border:12px solid var(--gold);border-radius:50%;width:100px;height:100px;display:grid;place-items:center;background:radial-gradient(circle at 30% 20%,#fffbed,#bcbcb0);color:#253440;font:bold 42px Georgia;box-shadow:0 10px 20px #0004;margin:10px 0}dialog{background:#1c303e;color:var(--ink);border:1px solid #596976;border-radius:12px;max-width:540px;padding:32px}dialog::backdrop{background:#040c14c9;backdrop-filter:blur(5px)}dialog #close{float:right;border:0}dialog h2{font-size:36px}dialog li{margin:15px 0;color:#c5d0d7;font-size:13px}dialog>p:last-child{font-size:12px;color:var(--muted)}@media(min-width:1700px){main{padding-top:35px}.heading{padding:38px 0}.table-stage{padding:25px 18px 30px}}@media(max-width:1100px){main{padding:22px}.layout{grid-template-columns:235px minmax(0,1fr);gap:18px}.club-panel{padding:18px 15px}.shot-desk{padding:20px 4px;gap:18px}.shot-button{min-width:140px}.next-ball{min-width:110px}.header-actions #sound{display:none}.brand{font-size:14px}.secret-button{font-size:10px}.matchbar{gap:12px}.turn-info strong{font-size:15px}.table-footer>span:last-child{display:none}}@media(max-width:800px){main{padding:18px 14px}header{flex-wrap:wrap;gap:15px;padding-bottom:18px}.brand{flex:1}.header-actions{order:1}nav{order:2;width:100%;justify-content:center}nav button{flex:1;padding:8px 7px}.heading{padding:22px 0;gap:15px}.heading h1{font-size:29px}.heading .eyebrow{font-size:8px}.connection{font-size:9px;max-width:120px}.layout{display:flex;flex-direction:column;gap:22px}.club-panel{width:100%;order:2}.game-area{width:100%;order:1}.club-panel:has(#room-panel:not([hidden])){order:2}.club-panel:has(#lobby:not([hidden])){order:0}#lobby{display:grid;grid-template-columns:1fr 1fr;gap:0 14px}.panel-heading,.lobby-tabs,#browse-panel,#create-panel{grid-column:1/-1}.server-meta{grid-column:1/-1;margin-top:-8px}.house-note{display:none}.room-list{grid-template-columns:repeat(2,minmax(0,1fr))}.room-list .empty{grid-column:1/-1;padding:0}.panel-heading{margin-bottom:15px}#browse-panel .section-label{margin-top:16px}#join-form .field{margin-bottom:0}.matchbar{padding-bottom:14px}.clock{min-width:42px;font-size:20px}.clock small{font-size:6px}.turn-info small{font-size:7px;letter-spacing:.7px}.turn-avatar{width:30px;height:30px;font-size:15px}.secret-button{padding:8px}.secret-button span{display:none}.table-stage{padding:9px 2px 20px}.table-badge{font-size:6px;letter-spacing:1.5px}.shot-desk{gap:14px;padding:17px 0}.shot-button{min-width:120px;font-size:12px;padding:13px}.next-ball{min-width:92px;gap:7px}.next-ball small{font-size:6px;letter-spacing:.7px}.next-ball strong{font-size:11px}.number-ball{width:30px;height:30px;font-size:14px;border-width:3px}.table-status{padding:10px}.table-status>span:last-child{display:none}.table-status p{font-size:11px}.tray{padding:14px 5px;gap:10px}.table-footer{font-size:7px;padding:0}.room-buttons{grid-template-columns:1fr 1fr}#handoff h2{font-size:25px;margin:5px 0}#handoff p:not(.eyebrow){margin:6px 0 10px}#secret-number{height:65px;width:65px;font-size:29px;border-width:8px;margin:5px 0}.table-stage #handoff .eyebrow{font-size:7px}footer{margin-top:25px;font-size:7px}footer i{display:none}}@media(max-width:380px){.shot-desk{gap:9px}.shot-button{min-width:102px;padding:12px 10px}.shot-button span{margin-left:8px}.next-ball{min-width:80px}.turn-info{gap:7px}.turn-info strong{font-size:13px}.clock{display:none}.room-list{grid-template-columns:1fr}.heading h1{font-size:26px}.connection{max-width:95px}}@media(prefers-reduced-motion:reduce){button{transition:none}}
/* A shared waiting room, with one physical number per player. */
.waiting-room{border:1px solid #536373;background:#102533;border-radius:8px;padding:15px;margin:18px 0}.waiting-room>div:first-child{display:flex;justify-content:space-between;align-items:center;gap:8px}.waiting-room strong{font:26px Georgia;color:var(--gold)}.waiting-room span{font-size:8px;letter-spacing:1px;color:var(--muted)}.waiting-room p{margin:8px 0 12px;font-size:12px}.waiting-room small{display:block;color:var(--muted);font-size:10px;margin-top:10px}.seat-track{display:flex;gap:4px;flex-wrap:wrap}.seat-track i{height:8px;flex:1;min-width:7px;max-width:30px;border:1px solid #496170;border-radius:2px}.seat-track i.filled{background:#8fb2c1;border-color:#8fb2c1}.seat-track i.ready{background:var(--gold);border-color:var(--gold)}.player.eliminated{opacity:.6}.player.eliminated .avatar{background:#3e3a42;color:#aa9ba2}.player.eliminated strong{text-decoration:line-through}.out-tag{font-size:8px;color:#f0ad94;border:1px solid #705548;padding:2px 5px;border-radius:3px}.room-buttons #draw-online{grid-column:1/-1}#local-draw{margin-bottom:10px}#bag-dialog{width:min(480px,calc(100vw - 24px));max-height:94dvh;padding:26px 30px;text-align:center;overflow:auto;background:radial-gradient(ellipse at 50% 40%,#345265,#182d3c 75%);border-color:#74818b}#bag-dialog h2{font-size:30px;margin:8px 0 10px}.bag-close{position:absolute;right:9px;top:8px;border:0;color:var(--muted)}#bag-instruction{font-size:12px;color:#a9becb;margin:0 auto;max-width:320px;min-height:36px}.bag-scene{width:100%;margin:0 auto;touch-action:manipulation}.bag-scene svg{display:block;width:100%;filter:drop-shadow(0 10px 15px #0002)}.draw-hand{transform-origin:300px 65px;transform:translate(20px,-70px) rotate(12deg);opacity:.9;transition:transform .7s cubic-bezier(.3,.05,.2,1)}.hand-pill{opacity:0;transition:opacity .1s}.bag-scene.reaching .draw-hand{transform:translate(-12px,78px) rotate(-9deg)}.bag-scene.withdrawing .draw-hand,.bag-scene.revealed .draw-hand{transform:translate(5px,-45px) rotate(8deg)}.bag-scene.withdrawing .hand-pill,.bag-scene.revealed .hand-pill{opacity:1}.bag-remaining{font-size:10px;letter-spacing:1px;color:#a4b7c2;margin:0 0 15px}#draw-result>span{display:block;font-size:9px;letter-spacing:2px;color:var(--gold)}#draw-result>strong{font:46px Georgia;color:#f1d5a2;line-height:1.2}#draw-result>p{font-size:11px;color:#a7becb;margin:4px 0 15px}#bag-error{font-size:12px;color:#e9b68d;margin:8px 0 0}#bag-dialog:has(.revealed) .bag-scene{max-width:280px;margin:8px auto 8px}#bag-dialog:has(.revealed) #bag-instruction{display:none}@media(max-width:800px){.header-actions #sound{display:inline-block;font-size:0;padding:6px}.header-actions #sound::before{content:'♫';font-size:18px}.header-actions #sound[aria-label='Enable sound']{opacity:.45}#bag-dialog{padding:24px 22px}#bag-dialog h2{font-size:26px}.waiting-room{max-width:100%}.seat-track i{max-width:none}}@media(prefers-reduced-motion:reduce){.draw-hand{transition:none}}
.house-fields{display:grid;grid-template-columns:1fr 1fr;gap:0 12px}

.spin-control{display:flex;align-items:center;gap:10px}
.spin-control small,.fine-aim small{display:block;font-size:8px;letter-spacing:1.5px;color:var(--muted)}
.spin-control strong{font-size:12px;font-weight:500;white-space:nowrap;display:block;min-width:74px}
.spin-ball{position:relative;width:52px;height:52px;border-radius:50%;padding:0;border:1px solid #fff3;background:radial-gradient(circle at 36% 30%,#fff 0,#f1eee2 38%,#b9b6aa 100%);box-shadow:inset -4px -6px 10px #0003,0 3px 8px #0005;cursor:crosshair;touch-action:none;flex:none}
.spin-ball::before,.spin-ball::after{content:'';position:absolute;background:#1f2f3a33;left:50%;top:8px;bottom:8px;width:1px}
.spin-ball::after{top:50%;left:8px;right:8px;width:auto;height:1px;bottom:auto}
.spin-ball i{position:absolute;width:12px;height:12px;margin:-6px 0 0 -6px;left:50%;top:50%;border-radius:50%;background:#c43d3d;box-shadow:0 0 0 2px #fff8,0 1px 3px #0008;pointer-events:none}
.spin-ball:disabled{opacity:.45;cursor:default}
.fine-aim{display:flex;align-items:center;gap:6px;text-align:center}
.fine-aim button{width:34px;height:34px;border-radius:50%;padding:0;font-size:20px;line-height:1;touch-action:manipulation}
@media(max-width:800px){.shot-desk{flex-wrap:wrap;row-gap:14px}.power-control{flex:1 1 100%;max-width:none;order:-1}.next-ball{display:none}.spin-control{flex:1}.spin-control strong{min-width:0}}

/* Full-screen play: the table takes the viewport, the shot controls become a rail, and the site chrome moves into a drawer. */
.play-only{display:none}
.icon-button{width:38px;height:38px;padding:0;border-radius:50%;font-size:17px;line-height:1;flex:none}
#drawer{position:fixed;inset:0 auto 0 0;width:min(340px,92vw);box-sizing:border-box;overflow:auto;background:var(--bg);border-right:1px solid var(--line);z-index:30;padding:max(14px,env(safe-area-inset-top)) 16px 20px max(16px,env(safe-area-inset-left));box-shadow:20px 0 40px #0007}
#drawer header{flex-wrap:wrap;gap:12px;padding:0 44px 16px 0;margin-bottom:16px}#drawer nav{order:2;width:100%}#drawer nav button{flex:1;padding:8px 6px}
#drawer .club-panel{display:block;width:auto}#drawer #lobby{display:block}
#drawer-close{position:absolute;top:max(12px,env(safe-area-inset-top));right:12px;z-index:1}
#drawer-backdrop{position:fixed;inset:0;background:#0008;z-index:29}
@media(max-height:600px){#bag-dialog{padding:14px 22px;max-height:96dvh}#bag-dialog h2{font-size:22px;margin:2px 0}#bag-dialog .eyebrow{margin-bottom:2px}#bag-instruction{display:none}.bag-scene svg{width:auto;max-width:100%;height:42dvh;margin:auto}#bag-dialog:has(.revealed) .bag-scene svg{height:30dvh}}
@media(max-height:600px){#bag-dialog:has(.revealed) .eyebrow,#bag-dialog:has(.revealed) #bag-remaining{display:none}#bag-dialog:has(.revealed) .bag-scene svg{height:24dvh}#drawn-number{font-size:40px;line-height:1.1}#draw-result p{margin:2px 0}}

/* The Club */
.coin-chip{display:flex;align-items:center;gap:6px;padding:7px 12px;border-radius:20px;border:1px solid #6b5a35;background:#2a2a20;color:var(--ink);position:relative;white-space:nowrap}
.coin-chip b{font-weight:600}.coin-chip small{font-size:8px;letter-spacing:1px;color:var(--gold)}
.coin-chip.alert::after{content:'';position:absolute;top:2px;right:2px;width:9px;height:9px;border-radius:50%;background:#e8604c;box-shadow:0 0 0 2px var(--bg)}
.coin{color:var(--gold);font-size:15px;line-height:1}
#club{width:min(820px,calc(100vw - 20px));max-width:none;max-height:92dvh;overflow:auto;padding:24px 26px}
#club h2{font-size:30px;margin:0 0 4px}#club h3{font-size:12px;letter-spacing:1.5px;text-transform:uppercase;color:var(--muted);margin:22px 0 10px}#club h3 small{text-transform:none;letter-spacing:0}
#club-close{position:absolute;top:14px;right:14px}
.club-tabs{display:flex;gap:6px;flex-wrap:wrap;margin:14px 0}.club-tabs button{flex:1;min-width:90px}.club-tabs button.selected{background:#2c4352;border-color:var(--gold);color:var(--ink)}
#club-message{background:#2c3f2c;border:1px solid #4f7a4f;border-radius:7px;padding:8px 12px;font-size:13px}
.bar{height:7px;border-radius:4px;background:#0c1a23;overflow:hidden;margin:5px 0}.bar i{display:block;height:100%;background:linear-gradient(90deg,#b8892d,#f0d28a);border-radius:4px}
.pass-head{display:grid;grid-template-columns:auto 1fr auto;gap:16px;align-items:center}.pass-head small{display:block;color:var(--muted);font-size:11px}
.pass-upsell{display:flex;align-items:center;justify-content:space-between;gap:14px;margin:14px 0;padding:12px 14px;border:1px solid #6b5a35;border-radius:9px;background:linear-gradient(90deg,#2d2716,#1c303e)}.pass-upsell small{display:block;color:var(--muted)}.pass-note{color:var(--gold);font-size:12px}
.track-labels{display:flex;flex-direction:column;gap:0;font-size:8px;letter-spacing:1.5px;color:var(--muted);float:left;margin:28px 8px 0 0}.track-labels span{height:70px;display:flex;align-items:center;writing-mode:vertical-rl;transform:rotate(180deg)}
.tiers{display:flex;gap:6px;overflow-x:auto;padding-bottom:8px;scroll-snap-type:x proximity}
.tier{flex:none;width:78px;display:flex;flex-direction:column;gap:6px;scroll-snap-align:start}.tier>b{text-align:center;font-size:11px;color:var(--muted)}.tier.open>b{color:var(--gold)}
.reward{height:64px;border-radius:8px;border:1px solid var(--line);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;font-size:10px;text-align:center;padding:4px;background:#14242f}
.reward.premium{background:#231f14;border-color:#4d4128}.reward.item{border-color:var(--gold)}.reward.locked{opacity:.45}.reward.claimed{opacity:.35;text-decoration:line-through}.reward.ready{box-shadow:0 0 0 1px var(--gold) inset}
.reward small{line-height:1.1}
.quest{display:grid;grid-template-columns:1fr auto auto;gap:12px;align-items:center;padding:10px 12px;border:1px solid var(--line);border-radius:8px;margin-bottom:8px}.quest small{color:var(--muted);font-size:11px}.quest.done{opacity:.6}.quest-reward{color:var(--gold);font-size:12px}
.login{display:grid;grid-template-columns:1fr auto;gap:10px 16px;align-items:center;padding:14px;border:1px solid #6b5a35;border-radius:9px;background:#221f16}.login small{display:block;color:var(--muted)}.login-days{display:flex;gap:4px;grid-column:1/-1}.login-days span{flex:1;text-align:center;font-size:11px;padding:6px 0;border-radius:5px;background:#14242f;color:var(--muted)}.login-days .got{background:#5b4a25;color:var(--ink)}.login-days .next{outline:1px solid var(--gold);color:var(--ink)}.login button{grid-row:1;grid-column:2}
.shop-grid,.packs{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:10px}
.shop-item,.pack{display:flex;flex-direction:column;align-items:center;gap:8px;padding:14px;border:1px solid var(--line);border-radius:9px;text-align:center;background:#16283a}.pack .coin{font-size:30px}.pack small{color:var(--muted)}
.cue-swatch{display:block;width:120px;height:9px;border-radius:5px;background:linear-gradient(90deg,#fff8e6 0 6%,var(--shaft) 6% 52%,var(--butt) 52% 66%,var(--wrap) 66% 90%,var(--butt) 90%);box-shadow:0 2px 4px #0006;margin:6px auto}
.reward .cue-swatch{width:58px;height:6px}
.cloth-swatch{display:block;width:42px;height:28px;border-radius:5px;border:3px solid #6e4a2c;margin:auto}.reward .cloth-swatch{width:32px;height:22px}
.stats{display:flex;gap:10px;justify-content:center}.stats small{display:block;font-size:7px;letter-spacing:1px;color:var(--muted)}.pips{display:flex;gap:2px}.pips i{width:7px;height:7px;border-radius:2px;background:#30414d}.pips i.on{background:var(--gold)}
.locker{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:8px}
.locker-item{display:grid;grid-template-columns:130px 1fr auto;gap:10px;align-items:center;padding:10px;border:1px solid var(--line);border-radius:8px}.locker-item .stats{justify-content:flex-start;margin:4px 0}.locker-item small{color:var(--muted);font-size:11px}.locker-item.on{border-color:var(--gold)}.locker-item.missing{opacity:.55}
.ladder-head{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;padding:14px;border:1px solid var(--line);border-radius:9px}.ladder-head small{display:block;font-size:8px;letter-spacing:1.5px;color:var(--muted)}.ladder-head strong{font-size:18px}
.ladder .rank{display:grid;grid-template-columns:40px 1fr auto 60px;gap:10px;align-items:center;padding:7px 10px;border-bottom:1px solid #22343f}.ladder .rank.you{background:#2c3f2c;border-radius:6px}.ladder .rank strong{text-align:right}.ladder .gap{text-align:center;color:var(--muted)}
.league{font-size:10px;letter-spacing:1px}.league.bronze{color:#c98b5a}.league.silver{color:#c4cdd3}.league.gold{color:#e9c46a}.league.platinum{color:#8fe0d6}.league.diamond{color:#a9c7ff}
#rewards{margin:4px 0 12px}#rewards-line{color:var(--gold);font-weight:600;margin:0}#rewards-quests{list-style:none;padding:0;margin:4px 0 0;font-size:12px;color:#b5c8d3}#rewards-quests li::before{content:'✓ ';color:#7fd08a}
@media(max-width:800px){.coin-chip small{display:none}.locker-item{grid-template-columns:90px 1fr auto}.locker-item .cue-swatch{width:84px}.ladder-head{grid-template-columns:repeat(2,1fr)}.pass-head{grid-template-columns:1fr}}
#club-message.error{background:#3d2626;border-color:#8a4a4a}

.ad-button{border-color:#6b5a35;color:var(--gold)}#reward-double{margin-top:10px}
.shop-head{display:flex;align-items:center;justify-content:space-between;gap:10px}.shop-head h3{margin-bottom:10px}
.pack.offer{border-color:var(--gold);background:linear-gradient(160deg,#2d2716,#16283a)}.pack.offer .coin{font-size:24px}
.restore{text-align:center;margin-top:16px}

/* Full-screen play: the table owns the screen; controls float in the margins it leaves, and the turn and status ride on the rails. */
html.play,html.play body{height:100%;overflow:hidden;overscroll-behavior:none}
html.play main{max-width:none;padding:0;height:100dvh}
html.play .play-only{display:inline-flex;align-items:center;justify-content:center}
html.play.app #play-exit{display:none}
html.play .heading,html.play footer,html.play .tray,html.play .table-footer,html.play .table-badge,html.play #fullscreen,html.play .next-ball,html.play .matchbar,html.play .shot-desk,html.play .table-status-slot{display:none}
html.play .layout{display:block;height:100%}html.play .game-area{height:100%}
html.play .table-stage{position:fixed;inset:0;padding:0;border-radius:0;background:radial-gradient(ellipse at 50% 45%,#22404d,#0b161e 75%);box-shadow:none;z-index:10}
html.play.r3d canvas{position:absolute;inset:0;width:100%;height:100%;aspect-ratio:auto;filter:none;border-radius:0}
html.play:not(.r3d) .table-stage{display:flex;align-items:center;justify-content:center}
html.play:not(.r3d) canvas{width:min(calc(100vw - 2 * var(--gutter)),calc(100dvh * 1000 / 560));height:auto}
.play-gutter,.play-hud{display:none}
html.play{--gutter:clamp(92px,11vw,150px)}
html.play .play-gutter{display:flex;flex-direction:column;justify-content:space-between;align-items:center;position:absolute;top:0;bottom:0;width:var(--gutter);padding:max(10px,env(safe-area-inset-top)) 8px max(10px,env(safe-area-inset-bottom));gap:10px;z-index:2;box-sizing:border-box}
html.play #play-left{left:0;padding-left:max(8px,env(safe-area-inset-left))}html.play #play-right{right:0;padding-right:max(8px,env(safe-area-inset-right))}
.gutter-group{display:flex;flex-direction:column;align-items:center;gap:8px;width:100%}
html.play .play-hud{display:flex;justify-content:center;position:absolute;left:var(--gutter);right:var(--gutter);z-index:2;pointer-events:none}
html.play #play-top{top:max(6px,env(safe-area-inset-top))}html.play #play-bottom{bottom:max(6px,env(safe-area-inset-bottom))}
html.play .play-hud>*{pointer-events:none;background:#0b161ecc;backdrop-filter:blur(6px);border:1px solid #ffffff14;border-radius:20px;padding:4px 12px;gap:8px;min-height:0}
html.play .turn-info{flex:none}html.play .turn-info small{display:none}html.play .turn-info strong{font-size:13px}html.play .turn-avatar{width:24px;height:24px;font-size:11px}
html.play #clock{font-size:14px;min-width:0;margin-left:6px}html.play #clock small{display:none}
html.play .table-status{max-width:min(560px,100%);padding:4px 12px}html.play .table-status p{font-size:11px}html.play .table-status #shot{display:none}
html.play .play-gutter .coin-chip{padding:5px 9px;font-size:12px}html.play .play-gutter .coin-chip small{display:none}
html.play .play-gutter #secret{padding:6px 8px;font-size:0}html.play .play-gutter #secret span{font-size:16px;display:inline}
html.play #left-mid{flex:1;justify-content:center}
html.play .play-gutter .power-control{position:relative;width:100%;flex:none;height:min(64dvh,340px);display:flex;flex-direction:column;align-items:center;justify-content:space-between;margin:0}
html.play .play-gutter .power-control label{flex-direction:column;align-items:center;gap:2px;text-align:center}
html.play .play-gutter .power-control label{font-size:8px;letter-spacing:1px}html.play .play-gutter .power-control output{font-size:13px}
html.play .play-gutter .power-control input{position:absolute;top:calc(50% + 14px);left:50%;width:calc(min(64dvh,340px) - 60px);transform:translate(-50%,-50%) rotate(-90deg);margin:0}
html.play .play-gutter .power-ticks{display:none}
html.play .play-gutter .spin-control{flex-direction:column;gap:2px;text-align:center}html.play .play-gutter .spin-control small{display:none}html.play .play-gutter .spin-control strong{font-size:10px;min-width:0}
html.play .play-gutter .fine-aim small{display:none}html.play .play-gutter .fine-aim button{width:32px;height:32px}
html.play .play-gutter #shoot{min-width:0;width:100%;padding:12px 6px;font-size:12px;text-align:center;white-space:normal;line-height:1.15}html.play .play-gutter #shoot span{display:none}
.view-button{font-size:10px;font-weight:700;letter-spacing:1px}
@media(orientation:portrait){
 html.play .play-gutter{flex-direction:row;width:auto;left:0;right:0;top:auto;bottom:auto;height:auto;padding:8px max(10px,env(safe-area-inset-left))}
 html.play #play-left{top:0;padding-top:max(8px,env(safe-area-inset-top))}html.play #play-right{bottom:0;padding-bottom:max(10px,env(safe-area-inset-bottom))}
 .gutter-group{flex-direction:row;width:auto}html.play #play-left .gutter-group:last-child{flex:1}
 html.play .play-gutter .power-control{flex:1;max-height:none;height:auto;flex-direction:row;gap:8px}html.play .play-gutter .power-control label{flex-direction:row}
 html.play .play-gutter .power-control input{position:static;transform:none;width:auto;flex:1}
 html.play .play-hud{left:10px;right:10px}html.play #play-top{top:calc(max(8px,env(safe-area-inset-top)) + 54px)}html.play #play-bottom{bottom:calc(max(10px,env(safe-area-inset-bottom)) + 70px)}
 html.play #left-mid{flex:1}html.play .play-gutter .power-control{height:auto;width:100%}
 html.play #play-right{flex-wrap:wrap;justify-content:center;row-gap:8px}html.play #play-right .gutter-group{flex:1 1 100%;justify-content:center}
 html.play .play-gutter #shoot{width:auto;padding:12px 16px}html.play #play-bottom{bottom:calc(max(10px,env(safe-area-inset-bottom)) + 120px)}}
html.r3d:not(.play) #table{aspect-ratio:1000/560;height:auto}
html.play .gutter-group{align-self:stretch}html.play #play-right .play-gutter #shoot,html.play #right-bottom #shoot{width:calc(var(--gutter) - 16px);flex:none}@media(orientation:portrait){html.play #right-bottom #shoot{width:auto}}
