:root{color-scheme:light;--ink:#29263b;--muted:#716c81;--purple:#6c45cf;--purple-dark:#5031a8;--lavender:#eee8fc;--paper:#faf9fe;--line:#e8e4f0;--green:#1d795f;--cell-size:62px;--red:#dc4254;--orange:#ce570b;--yellow:#e3bd13;--blue:#287aca;--tile-green:#168565;--tile-purple:#8150cf;font-family:"Avenir Next",Avenir,"Trebuchet MS",system-ui,sans-serif;font-synthesis:none}*{box-sizing:border-box}body{margin:0;background:var(--paper);color:var(--ink);font-size:16px;line-height:1.5}button,input{font:inherit}button{cursor:pointer;touch-action:manipulation}button:disabled{cursor:default;opacity:.43}button:not(:disabled){transition:background .15s,transform .15s,box-shadow .15s}button:not(:disabled):active{transform:translateY(2px)}button:focus-visible,a:focus-visible,input:focus-visible,[tabindex]:focus-visible{outline:3px solid #9d6ef2;outline-offset:4px}[hidden]{display:none!important}h1,h2,h3,p{margin:0}h1,h2,h3{line-height:1.15}h1{font-weight:850;letter-spacing:-.045em}h2{font-size:20px;font-weight:800;letter-spacing:-.025em}h3{font-size:18px}p{color:var(--muted)}.topbar{height:88px;max-width:1536px;margin:auto;padding:0 48px;display:flex;align-items:center;justify-content:space-between;gap:16px}.brand{display:flex;align-items:center;color:var(--ink);text-decoration:none;font-size:35px;font-weight:900;letter-spacing:-2px}.brand>span:not(.brand-mark):not(.brand-dot){color:var(--purple)}.brand-dot{color:#f19743}.brand-mark{display:grid;place-items:center;width:37px;height:37px;background:var(--purple);border-radius:12px;margin-right:10px;color:#fff;font-size:29px;transform:rotate(-10deg)}nav{display:flex;align-items:center;gap:22px}.connection{font-size:13px;color:var(--muted);display:flex;align-items:center;gap:7px}.connection:before{content:"";width:7px;height:7px;border-radius:50%;background:#b3abba}.connection.connected:before{background:#229f76}.connection.offline:before{background:#de634d}.quiet,.text-button{border:0;background:none;color:var(--muted);font-weight:650;padding:10px 12px;border-radius:10px}.quiet:not(:disabled):hover{background:var(--lavender);color:var(--purple)}.text-button{color:var(--purple);padding:8px 0}.text-button:not(:disabled):hover{text-decoration:underline}.primary{border:0;border-radius:14px;padding:14px 22px;background:var(--purple);color:#fff;font-weight:800;box-shadow:0 4px 0 var(--purple-dark);display:flex;align-items:center;justify-content:center;gap:24px;white-space:nowrap;min-height:48px}.primary:not(:disabled):hover{background:#7950dd;box-shadow:0 6px 0 var(--purple-dark);transform:translateY(-2px)}.primary span{font-size:22px}.large{padding:16px 24px;min-height:58px}.eyebrow{font-size:12px;font-weight:800;letter-spacing:.13em;color:var(--purple)}.subtle{font-size:13px;color:var(--muted)}main{max-width:1440px;margin:0 auto;padding:12px 48px 44px}.welcome{min-height:calc(100svh - 145px);display:grid;grid-template-columns:minmax(0,.9fr) minmax(0,1.1fr);align-items:center;gap:56px}.welcome-copy{padding:18px 0}.welcome h1{font-size:clamp(46px,4.8vw,72px);margin:20px 0 24px;line-height:1.04}.welcome h1>span{color:var(--purple)}.intro{font-size:18px;max-width:420px;line-height:1.6}.join-form{display:grid;max-width:374px;gap:12px;margin:28px 0}.join-form label{font-size:14px;font-weight:750}.join-form input{width:100%;min-width:0;border:1.5px solid #d7d0e7;border-radius:13px;padding:15px 17px;background:white;color:var(--ink)}.join-form input::placeholder{color:#9b94aa}.join-form .text-button{font-size:14px;text-align:center}.form-error{font-size:14px;color:#b62e44}.welcome-facts{display:flex;gap:26px;font-size:13px;color:var(--muted)}.welcome-facts b{display:block;font-size:17px;color:var(--ink);margin-bottom:2px}.welcome-art{position:relative;min-width:0;background:#e8defb;border-radius:42px;transform:rotate(2deg);overflow:hidden;box-shadow:0 20px 60px #59439412;aspect-ratio:.95}.welcome-art img{width:100%;height:100%;object-fit:cover}.art-caption{position:absolute;bottom:28px;left:26px;right:26px;background:#ffffffed;border:1px solid #ffffffab;box-shadow:0 8px 32px #5137740c;border-radius:20px;padding:18px;display:flex;gap:16px;align-items:center;transform:rotate(-2deg);font-size:15px;font-weight:800}.art-caption small{display:block;font-size:12px;color:var(--muted);font-weight:500;margin-top:3px}.caption-star{font-size:32px;color:#eea52c}.lobby{margin:20px auto;max-width:1050px}.lobby-hero{position:relative;min-height:240px;overflow:hidden;border-radius:28px;background:#ebe2fc;display:flex;align-items:center}.lobby-hero>div{position:relative;max-width:56%;padding:40px;z-index:1;background:linear-gradient(90deg,#ebe2fc 80%,transparent)}.lobby-hero h1{font-size:46px;margin:12px 0}.lobby-hero img{position:absolute;right:0;width:60%;height:100%;object-fit:cover;object-position:center}.lobby-body{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,.9fr);gap:48px;padding:36px 12px}.lobby-players{display:grid;gap:12px;margin-top:20px}.lobby-player{display:flex;align-items:center;gap:14px;background:#fff;border:1px solid var(--line);border-radius:18px;padding:16px}.lobby-player small{display:block;color:var(--muted);font-size:13px}.lobby-player .pill{margin-left:auto;font-size:12px}.lobby-player.empty{border-style:dashed;background:transparent;color:var(--muted)}.lobby-ready{padding:24px;text-align:center;display:flex;align-items:center;flex-direction:column;gap:16px}.lobby-ready p{max-width:270px}.ready-spark{display:block;color:var(--purple);font-size:56px;line-height:1}.game-top{display:flex;justify-content:space-between;align-items:center;gap:16px;margin:8px 0 22px}.game-top h1{font-size:34px;margin-top:6px}.game-badges{display:flex;align-items:center;gap:12px}.pill{display:inline-flex;align-items:center;gap:6px;font-size:13px;border-radius:24px;padding:7px 12px;background:var(--lavender);color:var(--purple);font-weight:650;white-space:nowrap}.bag-count{background:white;color:var(--muted);border:1px solid var(--line)}.timer{background:#fff0dc;color:#936209;border-radius:14px;min-width:83px;text-align:center;padding:10px;font-size:21px;font-weight:800;font-variant-numeric:tabular-nums}.timer.urgent{background:#ffdfdf;color:#b32642}.game-layout{display:grid;grid-template-columns:minmax(0,1fr) 270px;gap:26px;align-items:start}.play-column{min-width:0}.table-surface{border:1px solid #c4ded4;border-radius:24px;background:#e1efe8;overflow:hidden;box-shadow:0 6px 0 #d1e2d9}.table-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:13px 18px;font-size:14px;color:#456657;border-bottom:1px solid #cce0d5}.zoom-controls{display:flex;flex-shrink:0;align-items:center;background:#ffffffb0;border:1px solid #c3dcd0;border-radius:10px;padding:2px}.zoom-controls button{background:none;border:0;color:#416452;font-size:18px;width:34px;min-height:32px;border-radius:7px}.zoom-controls button:nth-child(2){font-size:12px;font-weight:800}.zoom-controls button:hover{background:#d5e9dd}.board-viewport{position:relative;overflow:auto;overscroll-behavior:contain;height:clamp(308px,calc(43svh + 28px),558px);scrollbar-width:thin;scrollbar-color:#aac7b8 transparent;background-image:radial-gradient(#adcbbb 1px,transparent 1px);background-size:24px 24px;background-attachment:local;padding:26px;touch-action:pan-x pan-y}.board{display:grid;gap:5px;width:max-content;min-width:1px;margin:auto;position:relative;z-index:1}.cell{width:var(--cell-size);height:var(--cell-size);display:grid;place-items:center;border:0;background:none;border-radius:11px;padding:0;color:#6ba68c;position:relative;outline-offset:1px!important}.cell:not(.occupied){visibility:hidden;pointer-events:none}.cell.legal{visibility:visible;pointer-events:auto;border:2px dashed #80b9a0;background:#ffffff45}.cell.legal:after{content:"";position:absolute;top:50%;left:50%;width:16px;height:16px;transform:translate(-50%,-50%);background:linear-gradient(currentColor,currentColor) center/2px 100% no-repeat,linear-gradient(currentColor,currentColor) center/100% 2px no-repeat;color:#408564;pointer-events:none}.cell.legal:hover,.cell.drop-target{background:#fff9;border-color:#4d9775;transform:scale(1.04)}.cell.legal:hover:after{color:#286c4c}.cell.occupied{cursor:default}.tile{--tile-color:var(--tile-purple);color:var(--tile-color);width:100%;height:100%;position:relative;display:flex;align-items:center;justify-content:center;background:linear-gradient(145deg,#fff,#f4f1e9);border:1px solid #fff;border-radius:11px;box-shadow:0 3px 0 #c5c6b9,0 4px 7px #41664c24,inset 0 -2px 0 #e7e4da}.tile svg{width:60%;height:60%;overflow:visible;filter:drop-shadow(0 1px 0 #0001)}.tile.Red{--tile-color:var(--red)}.tile.Orange{--tile-color:var(--orange)}.tile.Yellow{--tile-color:var(--yellow)}.tile.Green{--tile-color:var(--tile-green)}.tile.Blue{--tile-color:var(--blue)}.tile.Purple{--tile-color:var(--tile-purple)}.tile.draft{outline:3px solid var(--purple);outline-offset:1px}.tile.draft:after{content:"✓";position:absolute;top:-7px;right:-7px;border-radius:50%;background:var(--purple);color:white;font-size:11px;width:18px;height:18px;display:grid;place-items:center}.tile.new{animation:place-tile .26s ease-out}.cell.hinted{outline:3px solid #b18afa;outline-offset:2px}.board-empty{pointer-events:none;position:absolute;top:18px;left:0;right:0;text-align:center;z-index:0;color:#537663}.board-empty>span{font-size:28px;color:#71a38c}.board-empty h2{font-size:23px;margin-top:8px}.board-empty p{font-size:13px;color:#678775;margin-top:8px}.table-bottom{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 18px;background:#d8e9df;font-size:13px;color:#496b59;min-height:44px}.board-legend{display:flex;align-items:center;gap:7px;white-space:nowrap;font-size:12px}.board-legend i{width:12px;height:12px;border:1.5px dashed #609b7d;border-radius:4px}.rack-panel{margin-top:28px;background:#fff;border:1px solid var(--line);border-radius:22px;padding:22px}.section-heading{display:flex;align-items:center;justify-content:space-between;gap:10px}.section-heading p{font-size:13px;margin-top:5px}.small{font-size:12px;padding:8px;white-space:nowrap}.rack{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:10px;padding:20px 0}.rack-tile{min-width:0;position:relative;border:2px solid transparent;border-radius:14px;background:#f7f6fb;padding:9px 9px 8px;display:flex;flex-direction:column;align-items:center;gap:9px;text-align:center;color:var(--ink)}.rack-tile>.tile{width:100%;max-width:66px;aspect-ratio:1;height:auto;border-radius:10px}.rack-tile .tile svg{width:65%;height:65%}.rack-tile.selected{border-color:var(--purple);background:#f2edff;box-shadow:0 3px 0 #e7def9;transform:translateY(-4px)}.rack-tile:not(:disabled):hover{background:#eee8fa;transform:translateY(-4px)}.rack-tile.is-drafted{opacity:.56}.rack-tile.selected:after{content:"✓";position:absolute;top:-9px;right:-6px;background:var(--purple);color:#fff;border:2px solid white;border-radius:50%;height:23px;width:23px;font-size:12px;display:grid;place-items:center}.tile-name{font-size:12px;line-height:1.3;font-weight:700}.tile-name span{display:block;font-size:11px;color:var(--muted);font-weight:500;margin-top:1px}.rack-number{font-size:10px;position:absolute;top:6px;left:6px;z-index:2;color:#8e879c;background:#ffffffc0;padding:0 3px;border-radius:4px}.move-actions{border-top:1px solid #eeeaf5;padding-top:16px;display:flex;align-items:center;justify-content:space-between;gap:8px}.secondary-actions{display:flex;gap:0;flex-wrap:wrap}.secondary-actions button{font-size:13px;padding:10px}.move-actions .primary{font-size:14px;padding:11px 16px;gap:12px}.game-sidebar{display:grid;gap:22px;min-width:0}.score-panel,.activity-panel{padding:6px 0}.game-sidebar h2{font-size:17px}.score-panel .section-heading{padding-bottom:16px}.score-panel .subtle{font-size:10px;letter-spacing:.12em}.players{display:grid;gap:10px}.player{display:flex;align-items:center;gap:11px;border:1px solid transparent;padding:12px;border-radius:15px;background:white}.player.current{border-color:#c9b2f5;background:#f2ecfd}.avatar{width:40px;height:40px;display:grid;place-items:center;border-radius:14px;font-size:19px;font-weight:800;background:#ece2ff;color:#7952bf;flex-shrink:0}.avatar[data-seat="1"]{background:#ffe8c6;color:#a97524}.avatar[data-seat="2"]{background:#d8efe7;color:#3d9070}.avatar[data-seat="3"]{background:#dde9ff;color:#557bb4}.player-name{min-width:0;flex:1;font-weight:750;font-size:14px;overflow-wrap:anywhere}.player-name small{display:block;font-size:11px;color:var(--muted);font-weight:500;margin-top:3px}.player.current .player-name small{color:var(--purple)}.score{font-size:23px;font-weight:850;font-variant-numeric:tabular-nums}.score.bump{animation:score-pop .5s ease-out}.rule-card{border:1px solid #e7def8;border-radius:20px;background:#eee6fa;padding:22px}.rule-card .eyebrow{font-size:10px}.rule-card h2{font-size:22px;margin-top:8px}.rule-tiles{display:flex;gap:7px;margin:16px 0}.rule-tiles .tile{width:43px;height:43px;border-radius:8px}.rule-card p{font-size:13px;line-height:1.7;color:#75678b}.rule-card .text-button{font-size:12px;margin-top:10px}.activity-panel h2{margin-bottom:15px}.activity-panel ol{list-style:none;padding:0;margin:0;display:grid;gap:14px}.activity-panel li{font-size:12px;line-height:1.6;color:var(--muted);padding-left:13px;border-left:2px solid #dfd7ee}.spectator-note{padding:26px;text-align:center;font-size:15px;color:var(--muted)}.toast{position:fixed;left:50%;bottom:24px;transform:translateX(-50%);z-index:20;background:#302541;color:white;border-radius:15px;padding:15px 22px;box-shadow:0 10px 40px #31234133;max-width:min(90vw,520px);font-size:14px}.toast.error{background:#a52c48}.results{text-align:center;max-width:520px;margin:32px auto;padding:38px;background:white;border:1px solid var(--line);border-radius:28px}.result-star{display:block;font-size:80px;line-height:1.2;color:#eaaa25}.results h1{font-size:40px;margin:14px 0}.results p{margin-bottom:24px}.results .primary{width:100%;margin-top:26px}#result-scores{display:grid;gap:9px;text-align:left}.results .text-button{margin-top:12px}dialog{width:min(560px,calc(100% - 28px));max-height:90svh;border:0;border-radius:24px;padding:34px;background:#fff;color:var(--ink);box-shadow:0 30px 100px #28184144}dialog::backdrop{background:#24173566;backdrop-filter:blur(5px)}.dialog-close{position:absolute;right:16px;top:12px;border:0;background:#f3eff9;border-radius:50%;width:34px;height:34px;font-size:24px;color:var(--muted)}dialog h2{font-size:34px;margin:15px 0 26px}.rule-steps{display:grid;gap:24px}.rule-steps>div{display:flex;gap:15px}.rule-steps>div>b{flex-shrink:0;width:29px;height:29px;background:var(--lavender);color:var(--purple);border-radius:9px;display:grid;place-items:center}.rule-steps p{font-size:14px;line-height:1.65;margin-top:7px}.keyboard-tip{font-size:12px;background:#f5f2fa;padding:15px;border-radius:12px;margin:22px 0}.rule-steps h3{font-size:17px}@keyframes place-tile{from{transform:scale(.6) translateY(-12px);opacity:.3}to{transform:none;opacity:1}}@keyframes score-pop{50%{transform:scale(1.35);color:var(--purple)}}
@media(min-width:1500px){.welcome h1{font-size:74px}.welcome-art{max-height:680px}.board-viewport{height:calc(48svh + 28px)}}@media(max-width:1150px){.topbar{padding:0 28px}main{padding:8px 28px 32px}.game-layout{grid-template-columns:minmax(0,1fr) 225px;gap:20px}.game-sidebar h2{font-size:15px}.rack-panel{padding:18px}.rack{gap:6px}.rack-tile{padding:8px 5px}.secondary-actions button{padding:9px 7px}.move-actions{flex-wrap:wrap}.move-actions .primary{margin-left:auto}.welcome{gap:30px}.welcome h1{font-size:53px}.welcome-art{aspect-ratio:.8}.art-caption{left:15px;right:15px;padding:13px}.art-caption small{font-size:11px}}
@media(max-width:850px){.game-layout{grid-template-columns:minmax(0,1fr)}.game-sidebar{grid-template-columns:repeat(2,minmax(0,1fr));gap:20px}.score-panel{grid-column:1/-1}.players{grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}.player{padding:10px;gap:7px;flex-wrap:wrap}.player .avatar{width:30px;height:30px;font-size:15px;border-radius:10px}.player-name{font-size:12px}.player .score{font-size:20px;margin-left:auto}.player-name small{font-size:10px}.game-top h1{font-size:30px}.welcome{grid-template-columns:minmax(0,1fr) minmax(0,.85fr);gap:22px}.welcome h1{font-size:43px}.welcome-art{aspect-ratio:.68}.welcome-copy .eyebrow{font-size:10px}.intro{font-size:16px}.art-caption{display:none}.welcome-facts{gap:17px}.lobby-body{gap:24px}.lobby-hero h1{font-size:36px}.lobby-hero>div{padding:28px;max-width:65%}}
@media(max-width:600px){.topbar{height:72px;padding:0 18px}.brand{font-size:29px}.brand-mark{width:30px;height:30px;font-size:24px}nav{gap:6px}.connection{font-size:0}.connection:before{width:8px;height:8px}.topbar .quiet{font-size:12px;padding:8px}main{padding:8px 14px 28px}.welcome{display:flex;flex-direction:column;gap:20px;min-height:0}.welcome-copy{width:100%;padding:10px 10px 0}.welcome h1{font-size:49px;margin:15px 0 18px}.intro{max-width:340px;font-size:16px}.welcome-art{width:100%;max-height:240px;aspect-ratio:1.6;transform:none;border-radius:24px;order:-1;display:none}.join-form{max-width:none;margin:23px 0}.welcome-copy:before{content:"";display:block;height:135px;border-radius:20px;background:#e8defb url('/assets/table-world.png') center 50%/cover;margin-bottom:24px}.welcome-facts{justify-content:space-between;margin-top:24px}.lobby{margin:6px auto}.lobby-hero{min-height:220px}.lobby-hero>div{max-width:100%;padding:25px;background:#eee5fcdd}.lobby-hero h1{font-size:36px}.lobby-hero img{width:100%}.lobby-hero p{font-size:14px;max-width:240px}.lobby-body{grid-template-columns:minmax(0,1fr);padding:22px 0;gap:12px}.lobby-ready{padding:15px}.lobby-ready .ready-spark{display:none}.lobby-player{padding:12px}.game-top{margin:8px 3px 17px}.game-top .eyebrow{font-size:9px}.game-top h1{font-size:27px}.game-badges{gap:7px}.bag-count{font-size:11px;padding:6px 9px;gap:4px}.timer{font-size:17px;min-width:58px;padding:8px}.game-layout{gap:18px}.table-surface{border-radius:19px}.table-toolbar{padding:10px 12px;gap:8px}.table-toolbar>span{font-size:12px;line-height:1.4}.zoom-controls button{width:29px}.board-viewport{height:calc(36svh + 28px);min-height:278px;padding:20px}.table-bottom{padding:10px 12px;font-size:12px;min-height:42px}.board-legend{display:none}.board-empty h2{font-size:20px}.board-empty p{font-size:12px}.rack-panel{padding:16px 12px;margin-top:22px;border-radius:18px}.rack-panel h2{font-size:17px}.section-heading p{font-size:12px}.small{font-size:10px}.rack{gap:5px;padding:18px 0 16px}.rack-tile{padding:5px 3px 8px;border-radius:10px;gap:8px}.tile-name{font-size:10px}.tile-name span{font-size:9px}.rack-number{font-size:8px;top:3px;left:3px}.rack-tile>.tile{border-radius:7px}.rack-tile .tile svg{width:64%;height:64%}.move-actions{gap:12px}.secondary-actions{width:100%;justify-content:space-between}.secondary-actions button{font-size:12px;padding:7px}.move-actions .primary{width:100%;min-height:46px}.game-sidebar{gap:15px}.players{grid-template-columns:repeat(2,minmax(0,1fr))}.player{flex-wrap:nowrap;padding:11px}.player-name{font-size:13px}.player-name small{font-size:11px}.score-panel .section-heading{padding-bottom:12px}.rule-card{padding:18px}.rule-card h2{font-size:20px}.rule-card p{font-size:12px}.rule-card .text-button{font-size:11px}.activity-panel li{font-size:11px}.rule-tiles{gap:5px}.rule-tiles .tile{width:35px;height:35px}.results{margin:12px auto;padding:28px 20px}.results h1{font-size:34px}dialog{padding:30px 22px}.toast{bottom:16px}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}

.board-viewport.is-empty .board{position:absolute;left:50%;top:76%;transform:translate(-50%,-50%);margin:0}.board-viewport.is-empty{min-height:285px}.rack-number{font-size:12px}.tile-name{font-size:14px}.tile-name span{font-size:12px}.player-name small,.rule-card p,.activity-panel li{font-size:13px}.score-panel .subtle,.rule-card .eyebrow{font-size:12px}.rule-card .text-button{font-size:13px}@media(max-width:600px){.rack{grid-template-columns:repeat(6,minmax(56px,1fr));overflow-x:auto;padding-top:24px}.tile-name{font-size:12px}.tile-name span{font-size:12px}.rack-number{font-size:10px}.rack-tile{padding-left:2px;padding-right:2px}.small{font-size:12px}.activity-panel li,.rule-card p,.rule-card .text-button{font-size:12px}.board-empty h2{font-size:20px}.board-empty p{font-size:13px}.game-top .eyebrow{font-size:11px}.player-name small{font-size:12px}}

.rack-tile{touch-action:none;user-select:none;-webkit-user-select:none}.drag-ghost{position:fixed!important;z-index:30;width:58px;height:58px;pointer-events:none;transform:rotate(-6deg);box-shadow:0 12px 26px #2e244744}.cell.drop-target{outline:3px solid var(--purple);background:#fff}
@media(max-width:600px){.rack{grid-template-columns:repeat(3,minmax(0,1fr));gap:9px;overflow:visible}.rack-tile{display:grid;grid-template-columns:34px minmax(0,1fr);padding:12px 6px;gap:6px;text-align:left}.rack-tile>.tile{width:34px;height:34px;max-width:none}.tile-name{font-size:12px;overflow-wrap:normal}.rack-number{font-size:9px}.rack-tile.selected:after{width:20px;height:20px;right:-5px}.rack-tile .tile svg{width:65%;height:65%}}

/* Keep the regular table compact; the expanded view reserves its remaining height for play. */
.game-top{margin:0 0 12px}
.game-top h1{margin-top:0}
#expand-board{width:auto;padding:0 10px;font-size:12px;font-weight:800;white-space:nowrap;border-left:1px solid #c3dcd0;border-radius:0 7px 7px 0}
body.board-expanded{overflow:hidden}
.board-expanded #game-screen{position:fixed;inset:0;z-index:20;background:var(--paper);padding:12px max(12px,env(safe-area-inset-right)) max(12px,env(safe-area-inset-bottom)) max(12px,env(safe-area-inset-left));height:100dvh;display:flex;flex-direction:column;overflow:auto}
.board-expanded .game-top{flex:none;margin:0 0 8px}
.board-expanded .game-top h1{font-size:24px}
.board-expanded .game-layout{display:flex;flex:1;min-height:0;align-items:stretch}
.board-expanded .game-sidebar{display:none}
.board-expanded .play-column{display:flex;flex-direction:column;gap:12px;width:100%;min-height:0}
.board-expanded .table-surface{display:flex;flex-direction:column;flex:1;min-height:180px;border-radius:18px}
.board-expanded .table-toolbar,.board-expanded .table-bottom{flex:none}
.board-expanded .board-viewport{flex:1;height:auto;min-height:0}
.board-expanded .table-bottom{min-height:32px;padding:6px 14px}
.board-expanded .rack-panel{flex:none;margin:0;padding:10px 16px;border-radius:16px}
.board-expanded .rack-panel h2{font-size:15px}
.board-expanded .rack-panel .section-heading p{font-size:12px}
.board-expanded .rack{max-width:960px;margin:auto;padding:12px 0 8px;gap:10px}
.board-expanded .rack-tile{display:grid;grid-template-columns:40px minmax(0,1fr);gap:8px;padding:8px;text-align:left}
.board-expanded .rack-tile>.tile{width:40px;height:40px;max-width:none}
.board-expanded .tile-name{font-size:13px}
.board-expanded .tile-name span{font-size:12px}
.board-expanded .rack-number{font-size:9px;top:1px;left:1px}
.board-expanded .move-actions{padding-top:8px;gap:8px}
.board-expanded .spectator-note{margin:0;padding:6px}
@media(max-width:600px){
  .table-toolbar{flex-wrap:wrap}
  .table-toolbar>span{flex:1 1 130px}
  .zoom-controls{margin-left:auto}
  .board-expanded #game-screen{padding:8px 8px max(8px,env(safe-area-inset-bottom))}
  .board-expanded .game-top h1{font-size:21px}
  .board-expanded .play-column{gap:8px}
  .board-expanded .table-toolbar{padding:8px}
  .board-expanded .table-bottom{font-size:11px}
  .board-expanded .rack-panel{padding:8px}
  .board-expanded .rack-panel h2{display:none}
  .board-expanded .rack-panel .section-heading{gap:6px}
  .board-expanded .rack-panel .section-heading p{font-size:11px;margin:0}
  .board-expanded .rack{gap:7px;padding:10px 0 6px}
  .board-expanded .rack-tile{grid-template-columns:28px minmax(0,1fr);padding:7px 4px;gap:4px}
  .board-expanded .rack-tile>.tile{width:28px;height:28px}
  .board-expanded .tile-name,.board-expanded .tile-name span{font-size:11px}
  .board-expanded .move-actions{padding-top:5px;gap:4px}
  .board-expanded .secondary-actions button{padding:5px 7px}
  .board-expanded .move-actions .primary{min-height:38px;padding:7px 12px}
}
@media(min-width:1000px){
  .board-expanded .rack-panel{display:grid;grid-template-columns:minmax(0,1fr) 260px;gap:4px 20px}
  .board-expanded .rack-panel .section-heading{grid-column:1/-1}
  .board-expanded .rack-panel h2{display:none}
  .board-expanded .rack-panel .section-heading p{margin:0}
  .board-expanded .rack{width:100%;max-width:none;margin:0}
  .board-expanded .move-actions{border:0;padding:0;flex-direction:column;justify-content:center;gap:4px}
  .board-expanded .secondary-actions{width:100%;justify-content:space-between}
  .board-expanded .secondary-actions button{font-size:12px;padding:5px}
  .board-expanded .move-actions .primary{width:100%;padding:8px 12px}
}

/* Laptop layouts share the available window height instead of stacking fixed-height sections. */
@media(min-width:900px) and (min-height:560px){
  .topbar{height:64px;padding:0 28px}
  main{padding:8px 28px 16px}
  .welcome{min-height:calc(100dvh - 88px);gap:36px}
  .welcome-copy{padding:0}
  .welcome h1{font-size:clamp(40px,4.4vw,60px);margin:12px 0 16px}
  .welcome .intro{font-size:16px;line-height:1.5}
  .join-form{margin:18px 0;gap:8px}
  .join-form input{padding:11px 15px}
  .join-form .primary{padding:10px 18px}
  .welcome-art{height:min(560px,calc(100dvh - 128px));max-height:none;aspect-ratio:auto;align-self:center}
  .art-caption{bottom:18px;padding:12px}
  .welcome-facts{font-size:12px}
  .welcome-facts b{font-size:15px}
  .lobby{margin:0 auto}
  .lobby-hero{min-height:0;height:clamp(120px,22dvh,190px);border-radius:22px}
  .lobby-hero>div{padding:20px 28px;max-width:62%}
  .lobby-hero h1{font-size:34px;margin:8px 0}
  .lobby-hero p{font-size:14px;line-height:1.4}
  .lobby-body{padding:16px 0 0;gap:28px;align-items:center}
  .lobby-players{gap:8px;margin-top:12px}
  .lobby-player{padding:10px 12px;gap:10px;border-radius:14px}
  .lobby-player .avatar{width:34px;height:34px;font-size:17px}
  .lobby-ready{padding:12px;gap:12px}
  .ready-spark{font-size:34px}
  body:not(.board-expanded) #game-screen{height:calc(100dvh - 88px);display:flex;flex-direction:column}
  body:not(.board-expanded) .game-top{flex:none;margin:0 0 8px}
  body:not(.board-expanded) .game-top h1{font-size:28px}
  body:not(.board-expanded) .game-badges .timer{font-size:18px;padding:7px 10px;min-width:70px}
  body:not(.board-expanded) .game-layout{flex:1;min-height:0;align-items:stretch;gap:20px}
  body:not(.board-expanded) .play-column{display:flex;flex-direction:column;min-height:0;gap:12px}
  body:not(.board-expanded) .table-surface{display:flex;flex-direction:column;flex:1;min-height:180px;border-radius:18px}
  body:not(.board-expanded) .table-toolbar{flex:none;padding:8px 12px;font-size:13px}
  body:not(.board-expanded) .board-viewport{flex:1;height:auto;min-height:0;padding:20px}
  body:not(.board-expanded) .board-empty{top:12px}
  body:not(.board-expanded) .board-empty>span{display:none}
  body:not(.board-expanded) .board-empty h2{font-size:18px;margin:0}
  body:not(.board-expanded) .board-empty p{font-size:12px;margin-top:5px}
  body:not(.board-expanded) .table-bottom{flex:none;min-height:32px;padding:6px 12px;font-size:12px}
  body:not(.board-expanded) .rack-panel{flex:none;margin:0;padding:10px 12px;border-radius:16px}
  body:not(.board-expanded) .rack-panel h2{font-size:16px}
  body:not(.board-expanded) .rack-panel .section-heading p{font-size:12px;margin-top:3px}
  body:not(.board-expanded) .rack{padding:12px 0 8px;gap:8px}
  body:not(.board-expanded) .rack-tile{display:grid;grid-template-columns:34px minmax(0,1fr);padding:8px 5px;gap:5px;text-align:left}
  body:not(.board-expanded) .rack-tile>.tile{width:34px;height:34px;max-width:none}
  body:not(.board-expanded) .tile-name,body:not(.board-expanded) .tile-name span{font-size:12px}
  body:not(.board-expanded) .rack-number{font-size:9px;top:1px;left:1px}
  body:not(.board-expanded) .move-actions{padding-top:8px;gap:6px}
  body:not(.board-expanded) .secondary-actions button{padding:7px;font-size:12px}
  body:not(.board-expanded) .move-actions .primary{min-height:40px;padding:7px 12px}
  body:not(.board-expanded) .game-sidebar{overflow:auto;min-height:0;align-content:start;gap:16px;padding:0 5px 6px 0;scrollbar-width:thin;scrollbar-color:#d5cbe9 transparent}
  body:not(.board-expanded) .players{gap:8px}
  body:not(.board-expanded) .player{padding:9px;gap:8px}
  body:not(.board-expanded) .player .avatar{width:34px;height:34px;font-size:17px}
  body:not(.board-expanded) .score-panel .section-heading{padding-bottom:10px}
  body:not(.board-expanded) .spectator-note{margin:0;padding:6px}
}
@media(min-width:900px) and (max-width:1100px) and (min-height:560px){
  body:not(.board-expanded) .rack-tile{grid-template-columns:28px minmax(0,1fr);gap:4px;padding:8px 3px}
  body:not(.board-expanded) .rack-tile>.tile{width:28px;height:28px}
  body:not(.board-expanded) .tile-name,body:not(.board-expanded) .tile-name span{font-size:11px}
}
@media(min-width:900px) and (min-height:560px) and (max-height:650px){
  .welcome h1{font-size:clamp(36px,4vw,50px);margin:10px 0 12px}
  .join-form{margin:12px 0}
  .lobby-ready .ready-spark{display:none}
}

/* Turn ownership stays visible in both table layouts without adding a status row. */
.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}
#game-screen .game-top{padding:4px 10px;border:1px solid #d9dce6;border-radius:14px;background:#eeeff4}
.turn-heading{display:flex;align-items:center;gap:10px;min-width:0}
#turn-title{overflow-wrap:anywhere}
#turn-icon{display:grid;place-items:center;flex:none;width:30px;height:30px;border-radius:50%;background:#dfe2eb;color:#596279;font-size:19px}
#game-screen[data-turn="you"] .game-top{background:#dff3e9;border-color:#88c7aa;color:#17563d}
#game-screen[data-turn="you"] #turn-icon{background:#20724f;color:#fff;font-size:14px}
#game-screen[data-turn="you"] .rack-panel{border-color:#8cbaa5;box-shadow:0 0 0 1px #8cbaa530}
#game-screen[data-turn="waiting"] .table-toolbar,#game-screen[data-turn="watching"] .table-toolbar{background:#e9ecf3;color:#46536c}
#game-screen[data-turn="waiting"] .rack-panel{background:#f5f5f9;border-color:#d9dce6}
#game-screen[data-turn="waiting"] #confirm,#game-screen[data-turn="offline"] #confirm{background:#e3e5ed;color:#525d73;box-shadow:none;opacity:1;white-space:normal}
#game-screen[data-turn="waiting"] .timer,#game-screen[data-turn="watching"] .timer{background:#dfe3ed;color:#505c73}
#game-screen[data-turn="you"] .player.current{background:#e3f3eb;border-color:#8cbaa5}
#game-screen[data-turn="you"] .player.current .player-name small{color:#17563d}
.table-surface{position:relative}
.turn-notice{position:absolute;top:64px;left:50%;transform:translateX(-50%);z-index:5;pointer-events:none;width:max-content;max-width:calc(100% - 24px);padding:12px 22px;border:2px solid #75b994;border-radius:16px;background:#f4fff8;box-shadow:0 8px 26px #15442b20;text-align:center;color:#17563d;animation:turn-arrival .3s ease-out}
.turn-notice strong{display:block;font-size:24px;line-height:1.2}
.turn-notice span{display:block;font-size:13px;margin-top:3px}
@keyframes turn-arrival{from{opacity:0;transform:translate(-50%,-8px)}to{opacity:1;transform:translate(-50%,0)}}
@media(max-width:600px){#game-screen .game-top{padding:4px 6px;gap:6px}.turn-heading{gap:6px}#turn-icon{width:24px;height:24px;font-size:16px}#game-screen .game-top h1{font-size:21px}.game-badges{flex-shrink:0}.turn-notice{top:76px;padding:10px 18px}.turn-notice strong{font-size:21px}}

/* Committed-move feedback lives on the board, including its expanded view. */
.move-recap{position:absolute;z-index:6;left:12px;bottom:42px;max-width:calc(100% - 24px);display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:10px 12px;background:#fffefa;border:1px solid #b9a4dd;border-left:5px solid #8862bf;border-radius:13px;box-shadow:0 5px 20px #35234b22;pointer-events:none}
.move-recap-copy strong,.move-recap-copy span{display:block}
.move-recap-copy strong{font-size:14px;line-height:1.25;color:#46315e}
.move-recap-copy span{font-size:12px;margin-top:2px;color:#6e617e}
.move-recap-tiles{display:flex;gap:3px}
.move-recap-tiles .tile{width:24px;height:24px;border-radius:5px}
.move-recap button{pointer-events:auto;border:1px solid #d5c5e6;background:#f3edfc;color:#563d76;border-radius:8px;font-size:12px;font-weight:750;padding:6px 8px;white-space:nowrap}
.move-recap-turn{font-size:11px;font-weight:800;color:#17563d;background:#e3f3eb;border-radius:6px;padding:4px 6px}
.move-recap.is-six{background:#fff8df;border-color:#d2a847;border-left-color:#b47d0b}
.move-recap.is-six .move-recap-copy strong{font-size:20px;color:#805610}
.move-recap.is-six .move-recap-copy span{color:#775f2d}
.cell.recent-play{outline:3px solid #9670d0!important;outline-offset:1px!important;z-index:2}
.cell.recent-play>.tile{animation:move-emphasis .7s ease-out}
.cell.six-highlight{outline:3px solid #dca72a!important;outline-offset:1px!important;z-index:3}
.cell.six-highlight>.tile{animation:six-wave .85s ease-in-out 2;animation-delay:calc(var(--celebration-order) * 65ms);box-shadow:0 0 12px #e5b84288}
@keyframes move-emphasis{0%{transform:scale(.85);filter:brightness(1.2)}55%{transform:scale(1.13)}100%{transform:scale(1)}}
@keyframes six-wave{0%,100%{transform:scale(1)}45%{transform:translateY(-5px) scale(1.1);filter:brightness(1.15)}}
.celebration-burst{position:fixed;inset:0;z-index:35;overflow:hidden;pointer-events:none}
.celebration-burst i{position:absolute;left:var(--x);top:12%;width:8px;height:13px;border-radius:2px;opacity:0;animation:confetti-fall 2.2s ease-out var(--delay) forwards}
@keyframes confetti-fall{0%{opacity:0;transform:translateY(-30px) rotate(0)}15%{opacity:1}100%{opacity:0;transform:translate(var(--drift),65vh) rotate(550deg)}}
.results .move-recap{position:relative;left:auto;bottom:auto;max-width:none;margin-top:20px;justify-content:center;text-align:center}
@media(max-width:600px){.move-recap{left:8px;bottom:42px;max-width:calc(100% - 16px);gap:6px;padding:8px}.move-recap-copy strong{font-size:12px}.move-recap-copy span{font-size:11px}.move-recap.is-six .move-recap-copy strong{font-size:17px}.move-recap-tiles .tile{width:20px;height:20px}}
@media(prefers-reduced-motion:reduce){.celebration-burst{display:none}.cell.six-highlight>.tile,.cell.recent-play>.tile{animation:none!important}}

/* Give the welcome copy some breathing room from the window edge. */
@media(min-width:900px){.welcome-copy{padding-left:clamp(16px,2.4vw,36px)}}

/* Terminal play is a secondary option in the existing welcome row. */
.welcome-facts{flex-wrap:wrap;align-items:center}
.ssh-link{display:inline-flex;align-items:center;gap:7px;border:1px solid #ddd1f1;border-radius:10px;padding:9px 11px;color:var(--purple);background:#f1ebfc;font-size:12px;font-weight:750;white-space:nowrap}
.ssh-link span{font-family:monospace;font-size:16px}
.ssh-link:hover{background:#e8ddfa}
.ssh-help-link{display:block;margin:14px auto 0}
#ssh-dialog{width:min(630px,calc(100% - 28px))}
#ssh-dialog h2{margin-bottom:16px}
#ssh-description{color:var(--muted);line-height:1.5;margin-bottom:24px}
#ssh-dialog label{display:block;font-size:14px;font-weight:750;margin-bottom:9px}
.ssh-command-row{display:flex;gap:8px;align-items:stretch}
#ssh-command{min-width:0;flex:1;width:100%;padding:12px;border:1px solid #d8cbed;border-radius:10px;background:#f7f3fc;font:13px ui-monospace,SFMono-Regular,Consolas,monospace;color:var(--ink)}
#ssh-copy{font-size:13px;padding:10px 14px;white-space:nowrap}
.ssh-note{font-size:13px;color:var(--muted);line-height:1.5;margin:14px 0 0}
.ssh-copy-status{min-height:20px;font-size:13px;color:#17563d;margin-bottom:0}
@media(max-width:600px){.welcome-facts{justify-content:flex-start;gap:14px 20px}.ssh-command-row{flex-direction:column}#ssh-copy{align-self:flex-start}#ssh-dialog h2{font-size:28px}}

#lobby-role{font-size:13px;padding:4px 8px}
#game-watch{color:var(--purple)}
#watch-dialog h2{margin-bottom:16px}
#watch-description{color:var(--muted);line-height:1.5}
.watch-dialog-actions{display:flex;justify-content:flex-end;gap:12px;flex-wrap:wrap;margin-top:24px}

/* Keep the mobile welcome focused on joining, with a compact two-line title. */
@media(max-width:600px){
  .topbar{height:64px}
  .welcome{gap:0}
  .welcome-copy{padding:0 6px}
  .welcome-copy:before{height:clamp(72px,14svh,112px);margin-bottom:16px;border-radius:16px}
  .welcome-copy .eyebrow{font-size:9px;letter-spacing:.09em}
  .welcome h1{font-size:clamp(28px,8.8vw,42px);line-height:1.08;margin:12px 0 14px}
  .welcome .intro{font-size:15px;line-height:1.5;max-width:none}
  .join-form{margin:18px 0 14px;gap:8px}
  .join-form input{font-size:16px;padding:11px 13px;min-height:48px}
  .join-form .primary{min-height:48px;padding:10px 18px}
  .join-form .text-button{min-height:40px;padding:8px 0}
  .welcome-facts{margin-top:8px;gap:12px 20px;font-size:12px}
  .welcome-facts b{font-size:15px}
}

.no-move-help{grid-column:1/-1;background:#fff4d8;color:#634913;border-radius:10px;padding:10px 12px;margin:10px 0;font-size:13px;line-height:1.4}
.board-expanded .no-move-help{margin:4px 0;padding:6px 10px;font-size:12px}

/* Put the next action before the seat list on phones. */
@media(max-width:600px){
  .lobby{margin:0 auto}
  .lobby-hero{min-height:0;border-radius:18px}
  .lobby-hero>div{width:100%;padding:16px 18px;background:#eee5fcf2}
  .lobby-hero .eyebrow{font-size:9px;letter-spacing:.09em}
  .lobby-hero h1{font-size:28px;line-height:1.1;margin:8px 0}
  .lobby-hero p{font-size:13px;line-height:1.4;max-width:none}
  .lobby-body{padding:12px 0 0;gap:20px}
  .lobby-ready{order:-1;padding:14px;gap:8px;background:#fff;border:1px solid var(--line);border-radius:18px}
  .lobby-ready h2{font-size:20px}
  .lobby-ready p{font-size:13px;line-height:1.4;max-width:280px}
  .lobby-ready #start{width:100%;min-height:48px;padding:10px 18px;margin-top:4px}
  .lobby-ready #lobby-role{min-height:44px;padding:10px 8px}
  .lobby-ready #watch-count{font-size:11px}
  .lobby-body .section-heading h2{font-size:20px}
  .lobby-body .section-heading .pill{font-size:12px;padding:7px 10px}
  .lobby-players{gap:8px;margin-top:12px}
  .lobby-player{padding:10px;gap:10px;border-radius:14px}
  .lobby-player .avatar{width:32px;height:32px;flex-shrink:0;font-size:16px}
  .lobby-player>div{min-width:0;overflow-wrap:anywhere}
  .lobby-player strong{font-size:14px}
  .lobby-player small{font-size:11px}
  .lobby-player .pill{font-size:10px;padding:6px 8px;flex-shrink:0}
}
