:root{--paper:#f6f4ed;--ink:#203b32;--muted:#6e786f;--green:#174e42;--green-light:#e8eee5;--line:#dddeda;--gold:#e6bd70;--red:#a7403f;--radius:18px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;color:var(--ink);background:var(--paper);font-synthesis:none}
*{box-sizing:border-box}body{margin:0}button,input{font:inherit}button,a,input{-webkit-tap-highlight-color:transparent}button{cursor:pointer}button:disabled{cursor:default;opacity:.45}a{color:inherit}button:focus-visible,a:focus-visible,input:focus-visible,summary:focus-visible{outline:3px solid #bc8e37;outline-offset:4px}button{touch-action:manipulation}button,a{ -webkit-user-select:none}img{max-width:100%;display:block}.site-header,.site-footer{max-width:1160px;margin:auto;display:flex;align-items:center;justify-content:space-between;padding:24px 32px}.site-header{border-bottom:1px solid var(--line)}.brand{display:flex;align-items:center;gap:11px;text-decoration:none;font-size:21px;letter-spacing:-.6px}.brand strong{font-weight:750}.brand-mark{display:grid;place-items:center;background:var(--green);color:var(--paper);border-radius:11px;width:37px;height:39px;font-size:31px}.text-button{border:0;background:none;color:var(--green);font-size:13px;font-weight:650;min-height:44px;padding:8px}.text-button span{margin-left:8px}main{max-width:1096px;margin:0 auto;padding:38px 0 56px;min-height:calc(100dvh - 175px)}.site-footer{border-top:1px solid var(--line);font-size:11px;color:var(--muted);gap:16px;padding-top:22px;padding-bottom:22px}.site-footer span:last-child{display:flex;gap:12px}.eyebrow{font-size:11px;font-weight:750;letter-spacing:2px;text-transform:uppercase;color:var(--muted);margin:0 0 16px}.hero{display:grid;grid-template-columns:1fr 1fr;gap:56px;align-items:center;padding:30px 0 50px}h1,h2,h3,p{margin-top:0}h1,h2{font-family:Georgia,"Times New Roman",serif;font-weight:400;letter-spacing:-1.8px}h1{font-size:66px;line-height:1.04;margin-bottom:22px}.accent{color:var(--green);font-style:italic}.intro{font-size:16px;line-height:1.7;color:var(--muted);max-width:370px}.hero-art{height:410px;background:var(--green);border-radius:140px 140px 24px 24px;position:relative;display:flex;align-items:center;justify-content:center;overflow:hidden}.hero-art:before{content:"";position:absolute;inset:16px;border:1px solid #ffffff20;border-radius:inherit}.hero-art:after{content:"YOUR TABLE IS WAITING";position:absolute;bottom:26px;font-size:10px;letter-spacing:3px;color:#d7e4ce}.fan-card{width:155px;position:absolute;filter:drop-shadow(0 12px 12px #062a3460);border-radius:12px}.fan-card.one{transform:translate(-95px,12px) rotate(-19deg)}.fan-card.two{transform:translate(-34px,-8px) rotate(-6deg)}.fan-card.three{transform:translate(37px,-4px) rotate(8deg)}.fan-card.four{transform:translate(104px,20px) rotate(22deg)}.create-form{margin-top:26px;max-width:365px}label{display:block;font-size:12px;font-weight:650;margin-bottom:8px}input{width:100%;border:1px solid #cbd0c7;background:#fffef9;border-radius:10px;padding:14px 15px;min-height:49px;color:var(--ink);font-size:16px}.button{display:inline-flex;align-items:center;justify-content:center;gap:12px;padding:14px 22px;min-height:49px;border:1px solid transparent;border-radius:10px;font-weight:650;font-size:14px;background:var(--green);color:white;text-decoration:none}.button.primary:hover{background:#103b31}.button.secondary{color:var(--green);background:#fdfcf8;border-color:var(--line)}.button.danger{color:var(--red);background:#fff4f1;border-color:#efd9d4}.button.full{width:100%}.create-form .button{margin-top:11px}.micro{font-size:11px;line-height:1.6;color:var(--muted);margin:12px 0 0}.features{display:grid;grid-template-columns:repeat(3,1fr);gap:28px;border-top:1px solid var(--line);padding-top:25px}.feature{display:flex;gap:14px}.feature-icon{font-size:23px;line-height:1.4;color:var(--green)}.feature h3{font-size:13px;margin-bottom:6px}.feature p{font-size:12px;line-height:1.6;color:var(--muted);margin:0}.section-title{display:flex;align-items:center;justify-content:space-between;gap:16px;margin:32px 0 16px}.section-title h2{font-size:26px;margin:0;letter-spacing:-.6px}.recent-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.recent-game{background:#fffdf8;padding:18px;border:1px solid var(--line);border-radius:12px;text-decoration:none;display:grid;gap:8px}.recent-game strong{font-size:14px}.recent-game span{font-size:12px;color:var(--muted)}.panel{padding:26px;background:#fffdf8;border:1px solid var(--line);border-radius:var(--radius)}.page-title{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:22px}.page-title h1{font-size:40px;margin:0;letter-spacing:-1px}.page-title .eyebrow{margin-bottom:8px}.badge{display:inline-flex;align-items:center;gap:6px;font-size:11px;font-weight:600;border-radius:30px;padding:8px 11px;background:var(--green-light);white-space:nowrap}.badge:before{content:"";width:6px;height:6px;border-radius:50%;background:#618960}.badge.gold{background:#f6ebd4;color:#836128}.lobby-layout{display:grid;grid-template-columns:1fr 340px;gap:22px}.team-list{display:grid;grid-template-columns:1fr 1fr;gap:20px}.team-heading{font-size:11px;text-transform:uppercase;letter-spacing:1.6px;color:var(--muted);margin-bottom:16px}.seat{padding:17px 0;display:flex;gap:12px;align-items:center;border-top:1px solid var(--line)}.avatar{flex-shrink:0;display:grid;place-items:center;width:36px;height:36px;border-radius:50%;background:var(--green-light);font-size:13px;font-weight:700;color:var(--green)}.avatar.empty{background:#eeeee9;color:#92988d}.seat strong{font-size:14px}.seat small{display:block;font-size:11px;color:var(--muted);margin-top:5px}.invite-row{padding-top:17px;margin-top:16px;border-top:1px solid var(--line)}.invite-row strong{display:block;font-size:12px;margin-bottom:9px}.invite-buttons{display:flex;gap:5px;align-items:center}.invite-buttons .button{padding:10px 14px;min-height:44px;font-size:12px}.invite-buttons .text-button{font-size:11px}.aside-title{font-size:11px;line-height:1.5;font-family:inherit;font-weight:750;letter-spacing:2px;text-transform:uppercase;color:var(--muted);margin-bottom:12px}.aside-copy{font-size:13px;color:var(--muted);line-height:1.7}.lobby-start{margin-top:25px;border-top:1px solid var(--line);padding-top:20px}.lobby-start .button{width:100%}.join-panel{max-width:440px;margin:40px auto}.join-panel h1{font-size:38px}.join-panel .button{margin-top:12px}.game-layout{display:grid;grid-template-columns:minmax(0,1fr) 290px;gap:24px;align-items:start}.scoreboard{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:18px}.team-score{background:#fffdf8;border:1px solid var(--line);border-radius:13px;padding:15px 18px;display:grid;grid-template-columns:1fr auto;align-items:center;gap:8px}.team-score.own{border-color:#9daF9b}.team-score .team-heading{margin:0;font-size:9px;letter-spacing:1px}.team-names{font-size:12px;margin-top:6px;line-height:1.4;overflow-wrap:anywhere}.score-number{font-size:29px;font-family:Georgia,serif;grid-column:2;grid-row:1 / 3;letter-spacing:-1px}.score-meta{font-size:10px;color:var(--muted);grid-column:1 / 3}.table{height:340px;border-radius:100px;background:var(--green);position:relative;color:#f7f5e9;border:7px solid #d9d7c9;box-shadow:inset 0 0 0 1px #ffffff25,0 5px 16px #1b3d2910;overflow:hidden}.table:before{content:"♠";position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);font-size:95px;color:#ffffff09}.table-player{position:absolute;display:flex;align-items:center;gap:7px;max-width:160px;font-size:12px;z-index:2;padding:5px 9px;border-radius:25px}.table-player.active{background:#e6bd70;color:#254337;border-radius:8px}.table-player .avatar{width:24px;height:24px;font-size:9px;background:#ffffff20;color:inherit}.player-label{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;max-width:110px}.table-player small{font-size:9px;opacity:.7;display:block;margin-top:2px}.table-player.north{top:12px;left:50%;transform:translateX(-50%)}.table-player.south{bottom:12px;left:50%;transform:translateX(-50%)}.table-player.west{left:10px;top:48%;transform:translateY(-50%);max-width:110px}.table-player.east{right:10px;top:48%;transform:translateY(-50%);max-width:110px}.table-player.west .avatar,.table-player.east .avatar{display:none}.trick-card{position:absolute;width:64px;height:auto;filter:drop-shadow(1px 4px 3px #001c2340);border-radius:5px}.trick-card.north{top:60px;left:calc(50% - 32px)}.trick-card.south{bottom:55px;left:calc(50% - 32px)}.trick-card.west{top:calc(50% - 45px);left:calc(50% - 90px);transform:rotate(-8deg)}.trick-card.east{top:calc(50% - 45px);right:calc(50% - 90px);transform:rotate(8deg)}.table-caption{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);text-align:center;font-family:Georgia,serif;font-size:20px;color:#ffffffb0;width:170px;line-height:1.4}.table-caption small{display:block;font:10px -apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;letter-spacing:1px;text-transform:uppercase;margin-top:8px;color:#cbd8ca}.table-bar{display:flex;justify-content:space-between;gap:8px;align-items:center;margin:4px 4px 0;font-size:10px;color:var(--muted)}.table-bar .text-button{font-size:11px;min-height:24px;padding:4px 8px}.turn-banner{margin:0;padding:6px 12px;border-radius:11px;display:flex;align-items:center;gap:11px;background:#e8ece3;line-height:1.35}.turn-banner.your-turn{background:#efe3c8}.turn-banner .turn-symbol{font-size:23px}.turn-banner strong{font-size:13px;display:block}.turn-banner small{font-size:11px;color:#677260;display:block}.hand-panel{padding:12px 0 0;min-width:0}.hand-heading{display:flex;justify-content:space-between;align-items:center;font-size:12px;font-weight:650;padding:0 3px}.hand-heading span{font-weight:400;color:var(--muted);font-size:10px}.hand-scroll{display:flex;overflow-x:auto;overflow-y:hidden;padding:12px 8px 6px;scrollbar-width:thin;scrollbar-color:#bcc5b8 transparent;overscroll-behavior-x:contain;min-height:142px;isolation:isolate}.hand-card{flex:0 0 84px;width:84px;padding:0;border:0;border-radius:8px;background:transparent;position:relative;margin-left:-48px;transition:transform .16s;align-self:flex-start}.hand-card:first-child{margin-left:auto}.hand-card:last-child{margin-right:auto}.hand-card img{width:84px;pointer-events:none;border-radius:8px;box-shadow:0 2px 5px #192e2525}.hand-card.selected{transform:translateY(-7px);z-index:1;outline:3px solid #bc8e37;outline-offset:2px}.hand-card.illegal img{filter:brightness(.77) saturate(.5)}.hand-card:disabled{opacity:1}.action-bar{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:59px;padding:7px 0}.selection-label{font-size:12px;line-height:1.5;color:var(--muted);padding-left:3px}.selection-label strong{display:block;color:var(--ink);font-size:13px}.action-bar .button{min-width:145px}.game-aside{display:grid;gap:17px}.game-aside .panel{padding:21px}.bid-table{width:100%;border-collapse:collapse;font-size:12px}.bid-table th{text-align:right;font-size:9px;font-weight:500;color:var(--muted);padding-bottom:10px}.bid-table th:first-child{text-align:left}.bid-table td{border-top:1px solid var(--line);padding:12px 0;text-align:right}.bid-table td:first-child{text-align:left;max-width:120px;overflow-wrap:anywhere}.you-label{font-size:9px;color:var(--muted);margin-left:3px}.activity{padding:0;margin:0;list-style:none;max-height:230px;overflow:auto}.activity li{font-size:11px;line-height:1.6;padding:11px 0;border-top:1px solid var(--line);overflow-wrap:anywhere}.activity time{display:block;color:var(--muted);font-size:9px;margin-top:3px}.bid-panel{margin-top:18px;padding:20px;background:#fffdf8;border:1px solid #cebf9b;border-radius:14px}.bid-panel h2{font-size:25px;margin-bottom:7px;letter-spacing:-.6px}.bid-panel p{font-size:12px;color:var(--muted);line-height:1.6;margin-bottom:14px}.bid-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:7px;margin-bottom:15px}.bid-option{min-height:43px;border:1px solid var(--line);background:var(--paper);border-radius:8px;color:var(--ink);font-weight:600}.bid-option[aria-pressed=true]{background:var(--green);color:white;border-color:var(--green)}.bid-actions{display:flex;align-items:center;justify-content:space-between;gap:10px}.bid-actions small{font-size:10px;color:var(--muted)}.summary{margin-top:18px}.summary h2{font-size:29px;margin-bottom:10px}.summary>p{font-size:13px;color:var(--muted);line-height:1.6}.summary-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin:18px 0}.summary-team{background:var(--paper);padding:14px;border-radius:9px;font-size:11px;line-height:1.8}.summary-team strong{font-size:22px;display:block;font-family:Georgia,serif;font-weight:400}.summary-actions{display:flex;gap:10px;flex-wrap:wrap}.summary details{font-size:12px;margin-bottom:18px}.summary summary{cursor:pointer;min-height:30px}.notice{position:fixed;bottom:max(24px,env(safe-area-inset-bottom));left:50%;transform:translateX(-50%);max-width:calc(100vw - 32px);width:max-content;padding:14px 20px;border-radius:12px;background:#213e34;color:white;box-shadow:0 5px 30px #0002;font-size:13px;z-index:20;line-height:1.5}.notice.error{background:#853e37}.loading{text-align:center;padding:100px 0;color:var(--muted)}.loading-spade{font-size:50px;color:var(--green)}.loading p{margin-top:20px;font-size:13px}.error-panel{text-align:center;max-width:500px;margin:50px auto}.error-panel h1{font-size:35px}.error-panel p{line-height:1.7;color:var(--muted);font-size:14px}dialog{border:1px solid var(--line);border-radius:20px;max-width:520px;width:calc(100% - 32px);padding:27px;background:#fffdf8;color:var(--ink);max-height:85dvh}dialog::backdrop{background:#10271f80;backdrop-filter:blur(3px)}dialog h2{font-size:32px;letter-spacing:-.7px}dialog p,dialog li{font-size:13px;line-height:1.8}dialog ul{padding-left:20px}.modal-close{width:100%;margin-top:17px}.copy-field{user-select:all;overflow-wrap:anywhere;padding:14px;background:var(--paper);font-size:12px;border-radius:8px}.last-trick{display:flex;justify-content:center;gap:10px;margin:20px 0}.last-trick figure{margin:0;width:85px;text-align:center}.last-trick img{width:85px}.last-trick figcaption{font-size:10px;line-height:1.4;margin-top:8px;overflow-wrap:anywhere}.mobile-details{display:block}.room-actions{display:flex;justify-content:space-between;gap:12px;margin-top:18px}.room-actions .text-button{font-size:11px}.muted{color:var(--muted)}[hidden]{display:none!important}
@media(min-width:1100px){.hand-card{flex-basis:88px;width:88px;margin-left:-52px}.hand-card img{width:88px}}
@media(max-width:1159px){main{padding-left:28px;padding-right:28px}.hero{gap:35px}h1{font-size:56px}.hero-art{height:375px}.fan-card{width:140px}.fan-card.one{transform:translate(-82px,12px) rotate(-19deg)}.fan-card.four{transform:translate(88px,20px) rotate(22deg)}}
@media(max-width:850px){.game-layout{grid-template-columns:1fr}.game-aside{grid-template-columns:1fr 1fr}.table{height:320px}.lobby-layout{grid-template-columns:1fr}.hero{gap:30px}.hero-art{height:335px}.fan-card{width:123px}.fan-card.one{transform:translate(-70px,12px) rotate(-19deg)}.fan-card.four{transform:translate(70px,20px) rotate(22deg)}h1{font-size:49px}.hand-card{flex-basis:88px;width:88px;margin-left:-52px}.hand-card img{width:88px}}
@media(max-width:600px){.site-header{padding:15px 19px}.brand{font-size:18px}.brand-mark{width:32px;height:34px;font-size:27px}.site-header .text-button{font-size:11px}.site-footer{padding:20px;font-size:10px}.site-footer span:last-child{display:none}main{padding:25px 18px 30px;min-height:calc(100dvh - 132px)}.hero{display:flex;flex-direction:column;gap:30px;padding:12px 0 32px;align-items:stretch}.hero-copy{position:relative}.eyebrow{font-size:9px;letter-spacing:1.8px;margin-bottom:14px}h1{font-size:49px;max-width:340px}.intro{font-size:14px;max-width:330px;margin-bottom:18px}.create-form{max-width:none;margin-top:22px}.hero-art{height:245px;border-radius:100px 100px 18px 18px}.fan-card{width:108px}.fan-card.one{transform:translate(-82px,0) rotate(-19deg)}.fan-card.two{transform:translate(-30px,-15px) rotate(-6deg)}.fan-card.three{transform:translate(30px,-11px) rotate(8deg)}.fan-card.four{transform:translate(84px,5px) rotate(22deg)}.hero-art:after{bottom:17px;font-size:8px}.features{gap:18px;grid-template-columns:1fr}.feature{gap:15px}.feature-icon{width:24px;text-align:center}.feature p{font-size:12px}.feature h3{margin-bottom:3px}.recent-grid{grid-template-columns:1fr}.page-title{margin-bottom:17px}.page-title h1{font-size:31px}.page-title .eyebrow{font-size:9px}.badge{font-size:9px;padding:7px 9px}.panel{padding:19px}.team-list{gap:14px}.seat{gap:8px}.seat .avatar{width:28px;height:28px;font-size:10px}.seat strong{font-size:12px;overflow-wrap:anywhere}.seat small{font-size:10px}.team-heading{font-size:9px}.lobby-layout{gap:15px}.lobby-start{margin-top:17px}.scoreboard{gap:8px;margin-bottom:13px}.team-score{padding:11px 12px;gap:5px}.team-names{font-size:10px;margin-top:3px}.score-number{font-size:27px}.score-meta{font-size:9px}.table{height:265px;border-radius:65px;border-width:5px}.table-player{font-size:10px;gap:4px;padding:5px 7px;max-width:130px}.table-player .avatar{width:20px;height:20px;font-size:8px}.table-player small{font-size:8px}.table-player.north{top:8px}.table-player.south{bottom:8px}.table-player.west{left:2px;max-width:83px;top:47%}.table-player.east{right:2px;max-width:83px;top:47%}.table-player.west .player-label,.table-player.east .player-label{max-width:65px}.trick-card{width:48px;border-radius:4px}.trick-card.north{top:48px;left:calc(50% - 24px)}.trick-card.south{bottom:45px;left:calc(50% - 24px)}.trick-card.west{top:calc(50% - 34px);left:calc(50% - 65px)}.trick-card.east{top:calc(50% - 34px);right:calc(50% - 65px)}.table-caption{font-size:17px;width:145px}.table-caption small{font-size:8px}.turn-banner{margin-top:0;padding:4px 10px}.turn-banner strong{font-size:12px}.turn-banner small{font-size:10px}.turn-banner .turn-symbol{font-size:20px}.hand-panel{padding-top:10px}.hand-scroll{margin-left:-6px;margin-right:-6px;padding:12px 8px 6px;min-height:122px}.hand-card{flex-basis:72px;width:72px;margin-left:-48px}.hand-card img{width:72px}.action-bar{position:sticky;bottom:0;background:var(--paper);z-index:4;padding:9px 0 calc(9px + env(safe-area-inset-bottom));box-shadow:0 -7px 14px var(--paper);min-height:65px}.action-bar .button{min-width:139px}.game-aside{grid-template-columns:1fr;gap:13px;margin-top:10px}.game-aside .panel{padding:18px}.game-aside .activity{max-height:155px}.game-aside .aside-title{font-size:9px;letter-spacing:1.8px}.bid-panel{padding:16px;margin-top:13px}.bid-panel h2{font-size:23px}.bid-grid{gap:5px}.bid-option{min-height:42px;font-size:13px}.bid-actions small{max-width:140px;line-height:1.6}.summary-grid{gap:8px}.summary-team{padding:11px;font-size:10px}.room-actions{margin-top:10px}.join-panel{margin:15px auto}.join-panel h1{font-size:34px}.section-title h2{font-size:24px}}
@media(prefers-reduced-motion:reduce){*{transition:none!important;scroll-behavior:auto!important}}

.game-main,.game-aside,.team-score{min-width:0}.scoreboard{grid-template-columns:repeat(2,minmax(0,1fr))}.game-layout{min-width:0}
@media(max-width:850px){.game-layout{grid-template-columns:minmax(0,1fr)}}
@media(max-width:600px){.bid-grid{grid-template-columns:repeat(5,minmax(0,1fr))}.bid-option{min-height:46px}}
.trick-result{margin-top:13px;padding:17px 20px;background:#fffaf0;border:1px solid #d9c28d;border-radius:14px}.result-heading{display:flex;justify-content:space-between;align-items:center;gap:12px}.result-heading .eyebrow{font-size:9px;margin-bottom:5px;letter-spacing:1.3px}.result-heading h2{font-size:23px;letter-spacing:-.5px;margin:0;overflow-wrap:anywhere}.result-symbol{color:#936c23;font-size:28px}.result-explanation{font-size:12px;line-height:1.6;color:#6a634f;margin:8px 0 14px}.result-cards{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;max-width:420px;margin:0 auto}.result-card{margin:0;min-width:0;padding:6px;border-radius:10px;border:2px solid transparent;text-align:center}.result-card img{width:100%;max-width:65px;margin:0 auto;border-radius:5px;box-shadow:0 2px 4px #1a30201a}.result-card.winning-card{background:#f0e0b9;border-color:#b58b3a}.result-card figcaption{font-size:10px;line-height:1.4;margin-top:8px;overflow-wrap:anywhere}.result-card figcaption strong{display:block;font-weight:600}.result-card figcaption span{display:block;color:var(--muted);font-size:9px;margin-top:3px}.winning-card figcaption span{font-weight:750;color:#785614}.trick-result + .turn-banner{margin-top:0}
@media(max-width:600px){.trick-result{padding:14px 12px}.result-heading h2{font-size:21px}.result-explanation{font-size:11px}.result-cards{gap:4px}.result-card{padding:4px}.result-card figcaption{font-size:9px}}
.trick-card.trick-winner{outline:3px solid var(--gold);outline-offset:3px;filter:drop-shadow(0 0 8px #e6bd7070)}
/* Reliable connection controls and compact gameplay details. */
.page-title>div{min-width:0;flex:1}.page-title h1{max-width:100%;overflow-wrap:anywhere}.seat>div{min-width:0;overflow-wrap:anywhere}.connection-strip{display:flex;align-items:center;flex-wrap:wrap;gap:6px 12px;font-size:11px;color:var(--muted);margin:-9px 0 6px;min-height:25px}.connection-strip small{font-size:10px;margin-left:auto}.connection-strip .text-button{font-size:11px}.connection-strip [data-sync-text]{overflow-wrap:anywhere}.contract-progress{grid-column:1 / 3;border-top:1px solid var(--line);padding-top:8px;font-size:11px;line-height:1.5;overflow-wrap:anywhere}.nil-status{display:block;font-size:10px;line-height:1.5;color:#876a30;overflow-wrap:anywhere}.result-heading>div{min-width:0;flex:1}.result-heading>.text-button{flex-shrink:0;font-size:11px}.trick-result{margin-bottom:16px}.result-explanation{margin-bottom:9px}.recovery-actions{display:flex;gap:10px;justify-content:center;flex-wrap:wrap}#restore-form .button{margin-top:12px}
@media(max-width:600px){.contract-progress{font-size:10px;padding-top:6px}.nil-status{font-size:9px}.connection-strip{font-size:10px;margin-bottom:6px}.connection-strip small{font-size:9px}.result-heading h2{font-size:20px}}
@media(max-width:600px){.action-bar.waiting{position:static;box-shadow:none;min-height:0;padding:5px 0 12px}.action-bar.waiting .button{display:none}}
.bot-label{display:inline-block;vertical-align:middle;font:700 8px -apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;letter-spacing:.5px;padding:3px 5px;border-radius:4px;background:#e4ecdf;color:#42633f;margin-left:3px;white-space:nowrap}.move-panel{padding:17px 20px;margin:16px 0}.move-panel .aside-title{margin-bottom:8px}.move-list{list-style:none;margin:0;padding:0}.move-list li{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.2fr) auto;gap:8px;align-items:center;border-top:1px solid var(--line);padding:9px 0;font-size:11px;line-height:1.5;overflow-wrap:anywhere}.move-list strong{font-weight:600}.move-list small{font-size:9px;color:var(--muted)}.new-move{animation:move-arrive .25s both}.move-step-1{animation-delay:.1s}.move-step-2{animation-delay:.2s}.move-step-3{animation-delay:.3s}.move-step-4{animation-delay:.4s}.move-step-5{animation-delay:.5s}.move-step-6{animation-delay:.6s}.move-step-7{animation-delay:.7s}.review-trick{padding:18px 0;border-top:1px solid var(--line)}.review-trick h3{font-size:15px}.review-trick p{margin-bottom:14px}@keyframes move-arrive{from{opacity:0;transform:translateY(5px)}to{opacity:1;transform:translateY(0)}}
@media(max-width:600px){.move-panel{padding:15px 13px}.move-list li{font-size:10px;gap:6px}.move-list .bot-label{font-size:7px;padding:2px 4px}}
@media(prefers-reduced-motion:reduce){.new-move{animation:none}}
/* Names remain readable at every seat, including narrow phones. */
.table-player{font-size:16px;max-width:190px}.player-label{max-width:145px}.table-player small{font-size:11px}.table-player.west,.table-player.east{max-width:130px}.table-player .avatar{width:26px;height:26px;font-size:11px}
@media(max-width:600px){.table-player{font-size:14px;max-width:160px;gap:5px}.player-label{max-width:125px}.table-player small{font-size:10px}.table-player.west,.table-player.east{max-width:99px}.table-player.west .player-label,.table-player.east .player-label{max-width:85px}.table-player .avatar{width:22px;height:22px;font-size:10px}.table-player.north{top:5px}.table-player.south{bottom:5px}}
@media(max-width:360px){.table-caption{font-size:15px;width:120px}.trick-card{width:42px}.trick-card.north,.trick-card.south{left:calc(50% - 21px)}.trick-card.west{left:calc(50% - 48px);top:calc(50% - 30px)}.trick-card.east{right:calc(50% - 48px);top:calc(50% - 30px)}}

/* The local player's centered label can use the available table width. */
.table-player.south{max-width:calc(100% - 16px)}
.table-player.south .player-label{max-width:none;min-width:0}

/* Legal links stay visible on phones; policy text uses the shared accessible dialog. */
.site-footer{flex-wrap:wrap}.footer-copyright{margin:0;font-size:11px;line-height:1.6}.footer-legal{display:flex;flex-wrap:wrap;gap:4px 18px}.footer-legal button{border:0;background:none;color:var(--green);font-size:12px;padding:10px 0;min-height:44px;text-decoration:underline;text-underline-offset:3px}.inline-legal{border:0;background:none;padding:0;color:var(--green);font:inherit;text-decoration:underline;text-underline-offset:2px}.legal-copy h3{font-size:16px;line-height:1.4;margin:24px 0 8px}.legal-copy h2{margin-bottom:8px}.legal-copy .legal-date{font-size:12px;color:var(--muted);margin-bottom:20px}.legal-copy a{color:var(--green);overflow-wrap:anywhere}.legal-copy h2:focus{outline:none}.legal-notice{max-width:390px}
@media(max-width:600px){.site-footer{align-items:flex-start;flex-direction:column;gap:4px}.footer-legal{gap:18px}.legal-copy h3{font-size:15px}dialog{padding:22px}}

/* Keep Close reachable while long policy text scrolls independently. */
dialog{overflow:hidden}#modal-body{max-height:calc(85dvh - 130px);overflow:auto;overscroll-behavior:contain;padding:0 3px}

.analytics-choice{position:fixed;bottom:max(16px,env(safe-area-inset-bottom));left:50%;transform:translateX(-50%);width:min(720px,calc(100% - 32px));z-index:10;background:#fffdf8;border:1px solid var(--line);border-radius:14px;box-shadow:0 8px 35px #183c3026;padding:20px;display:flex;align-items:center;gap:22px}.analytics-choice strong{font-size:14px}.analytics-choice p{font-size:12px;line-height:1.6;margin:6px 0 0}.analytics-choice small{font-size:11px;color:var(--muted)}.analytics-buttons{display:flex;gap:8px;flex-shrink:0}.analytics-buttons .button{padding:12px 16px;font-size:12px}.analytics-choice-visible{padding-bottom:170px}
@media(max-width:600px){.analytics-choice{padding:16px;display:block}.analytics-buttons{margin-top:12px}.analytics-buttons .button{flex:1}.analytics-choice-visible{padding-bottom:235px}.footer-legal{column-gap:16px}}

/* Passive game updates must not re-anchor the page or change card geometry. */
#app{overflow-anchor:none}.hand-card img,.fan-card,.result-card img,.last-trick img{height:auto;aspect-ratio:508 / 708}.turn-banner>div{min-width:0;flex:1}.turn-banner strong{min-height:1.35em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.turn-banner small{min-height:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.new-move{animation:move-highlight .25s both}@keyframes move-highlight{from{opacity:.45}to{opacity:1}}
@media(max-width:600px){.action-bar.waiting{min-height:65px;padding:9px 0 calc(9px + env(safe-area-inset-bottom))}.action-bar.waiting .button{display:inline-flex;visibility:hidden}}
@media(prefers-reduced-motion:reduce){.new-move{animation:none}}
/* Give played cards more room while keeping side names clear on phones. */
.table{height:460px}.trick-card{width:106px}.trick-card.north{top:63px;left:calc(50% - 53px)}.trick-card.south{bottom:63px;left:calc(50% - 53px)}.trick-card.west{top:calc(50% - 74px);left:calc(50% - 142px)}.trick-card.east{top:calc(50% - 74px);right:calc(50% - 142px)}.table-player.west,.table-player.east{top:50%;transform:translateY(-50%)}
@media(max-width:600px){.table{height:420px}.trick-card{width:86px}.trick-card.north{top:59px;left:calc(50% - 43px)}.trick-card.south{bottom:57px;left:calc(50% - 43px)}.trick-card.west{top:calc(50% - 60px);left:calc(50% - 80px)}.trick-card.east{top:calc(50% - 60px);right:calc(50% - 80px)}}
@media(max-width:360px){.trick-card{width:80px}.trick-card.north,.trick-card.south{left:calc(50% - 40px)}.trick-card.west{top:calc(50% - 56px);left:calc(50% - 75px)}.trick-card.east{top:calc(50% - 56px);right:calc(50% - 75px)}}

.team-score.match-winner{border-color:#b58b3a;box-shadow:0 0 0 2px #e6bd7040}


/* New plays settle from the player's side without affecting layout or turn timing. */
.trick-card{--arrival-x:0px;--arrival-y:0px;--arrival-tilt-x:0deg;--arrival-tilt-y:0deg;--rest-angle:0deg}.trick-card.north{--arrival-y:-16px;--arrival-tilt-x:42deg}.trick-card.south{--arrival-y:16px;--arrival-tilt-x:-42deg}.trick-card.west{--arrival-x:-18px;--arrival-tilt-y:-42deg;--rest-angle:-8deg}.trick-card.east{--arrival-x:18px;--arrival-tilt-y:42deg;--rest-angle:8deg}.trick-card.card-arrive{animation:card-arrive .25s ease-out both}
@keyframes card-arrive{from{opacity:.5;transform:perspective(600px) translate3d(var(--arrival-x),var(--arrival-y),0) rotate(var(--rest-angle)) rotateX(var(--arrival-tilt-x)) rotateY(var(--arrival-tilt-y)) scale(.98)}to{opacity:1;transform:perspective(600px) translate3d(0,0,0) rotate(var(--rest-angle)) rotateX(0deg) rotateY(0deg) scale(1)}}
@media(prefers-reduced-motion:reduce){.trick-card.card-arrive{animation:none}}

@media(max-width:600px){.table-bar .text-button{min-height:28px}}

/* Saved tables: actionable status and teams, with past games collapsed. */
.saved-heading .micro{margin:4px 0 0}.saved-heading .text-button{flex-shrink:0}.recent-game{align-content:start;gap:10px;overflow-wrap:anywhere}.recent-game:hover{border-color:#9daf9b}.recent-game.needs-turn{border-color:#9daf9b;box-shadow:inset 3px 0 var(--green)}.recent-game .saved-status{display:flex;justify-content:space-between;gap:10px;color:var(--green);line-height:1.5}.recent-game .saved-status span{color:inherit;flex-shrink:0}.saved-team{line-height:1.6}.saved-team b{display:block;font-size:10px;text-transform:uppercase;letter-spacing:.7px;color:var(--ink)}.recent-game .saved-score{padding-top:10px;border-top:1px solid var(--line);color:var(--ink)}.recent-game .saved-meta{display:flex;justify-content:space-between;gap:8px;flex-wrap:wrap;font-size:11px;line-height:1.5}.saved-meta span,.saved-meta time{font-size:inherit}.past-tables{margin-top:20px}.past-tables summary{cursor:pointer;padding:12px 0;font-size:13px;color:var(--muted);min-height:44px}.past-tables .recent-grid{margin-top:8px}

/* Flip the inner card so selection lifts and the compact hand stay in place. */
.hand-card{perspective:700px}.hand-card-flip{display:block;position:relative;transform-style:preserve-3d}.hand-card-front,.hand-card-back{backface-visibility:hidden;-webkit-backface-visibility:hidden}.hand-card .hand-card-back{position:absolute;inset:0;transform:rotateY(180deg)}
@media(prefers-reduced-motion:reduce){.hand-card-flip{transform:none!important}.hand-card .hand-card-back{display:none}}

/* Completed-match highlights. */
.match-highlights{margin-top:18px}.match-highlights h2{font-size:27px;margin-bottom:8px;letter-spacing:-.6px}.match-totals{font-size:12px;color:var(--muted);margin-bottom:18px}.highlight-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.highlight-grid article{background:var(--paper);border:1px solid var(--line);border-radius:10px;padding:15px;min-width:0}.highlight-grid h3{font-size:11px;font-weight:600;color:var(--muted);margin:0 0 9px}.highlight-grid strong{display:block;font-size:17px;line-height:1.4;overflow-wrap:anywhere;color:var(--green)}.highlight-grid p{font-size:11px;line-height:1.6;margin:6px 0 0;color:var(--muted)}.match-player-scroll{overflow-x:auto;margin-top:20px}.match-player-stats{width:100%;border-collapse:collapse;font-size:11px;text-align:left}.match-player-stats th,.match-player-stats td{padding:10px 8px;border-bottom:1px solid var(--line);vertical-align:top}.match-player-stats thead th{font-size:10px;color:var(--muted);white-space:nowrap}.match-player-stats tbody th{min-width:100px;max-width:180px;overflow-wrap:anywhere;font-weight:600}.match-player-stats td{white-space:nowrap}.match-player-stats tbody th span{font-weight:400}
@media(max-width:600px){.match-highlights{padding:18px}.highlight-grid{gap:8px}.highlight-grid article{padding:12px}.highlight-grid strong{font-size:15px}.match-player-stats th,.match-player-stats td{padding:9px 7px}}

.match-stats-swipe{display:none}@media(max-width:600px){.match-stats-swipe{display:block;margin:18px 0 0}.match-stats-swipe+.match-player-scroll{margin-top:6px}}
/* Keep the trick recap close to the hand details when the sidebar stacks below it. */
@media(max-width:600px){.game-layout{row-gap:12px}.game-aside{margin-top:0}.game-main>.trick-result:last-child{margin-bottom:0}}

/* Static dialog headings receive reading focus without a selection-like outline. */
#modal-title:focus{outline:none}

/* Make match timing explicit instead of burying elapsed time in the totals. */
.match-time{padding:14px;background:var(--paper);border:1px solid var(--line);border-radius:10px;margin:0 0 14px}.match-time h3{font-size:12px;margin:0 0 12px;color:var(--green)}.match-timing{display:grid;grid-template-columns:.7fr 1.3fr 1.3fr;gap:12px;margin:0}.match-timing dt{font-size:10px;color:var(--muted);margin-bottom:5px}.match-timing dd{font-size:12px;font-weight:600;line-height:1.5;margin:0;overflow-wrap:anywhere}.match-time .micro{margin:10px 0 0}.match-time dd .muted{font-weight:400}
@media(max-width:600px){.match-timing{grid-template-columns:1fr;gap:8px}.match-timing>div{display:flex;align-items:baseline;justify-content:space-between;gap:14px}.match-timing dt{margin:0}.match-timing dd{text-align:right}}

.summary-team .summary-total{display:block;font-size:12px;color:var(--ink);margin:2px 0 7px}.summary-total b{font-size:16px;font-weight:650}


/* Table creation: three clear modes, with details only for a mixed table. */
.play-choices{border:0;padding:0;margin:20px 0 0;min-width:0}.play-choices legend{font-size:12px;font-weight:650;padding:0;margin-bottom:9px}.play-mode{display:grid;grid-template-columns:18px minmax(0,1fr);align-items:start;gap:10px;margin:0 0 7px;padding:10px 12px;border:1px solid var(--line);border-radius:10px;background:#fffdf8;cursor:pointer;min-height:52px}.play-mode.is-selected{border-color:#9daf9b;background:#edf2e8}.play-mode input{width:18px;height:18px;min-height:0;padding:0;margin:2px 0 0;accent-color:var(--green)}.play-mode strong{display:block;font-size:13px;font-weight:650;line-height:1.4}.play-mode>span>span{display:block;font-size:12px;font-weight:400;line-height:1.45;color:var(--muted);margin-top:2px}.mixed-bots{display:grid;grid-template-columns:.8fr 1.2fr;gap:12px;min-width:0;margin:10px 0 4px;padding:0;border:0}.mixed-bots label{min-width:0;margin:0;font-size:11px}.mixed-bots select{display:block;width:100%;min-height:44px;padding:10px 8px;margin-top:6px;font:inherit;font-size:14px;border:1px solid #cbd0c7;border-radius:9px;background:#fffef9;color:var(--ink)}.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
@media(max-width:600px){.play-mode{padding:9px 11px}.mixed-bots select{font-size:16px}}

/* Optional seat backup stays secondary to inviting friends or dealing. */
.seat-link-notice{display:flex;align-items:center;justify-content:space-between;gap:18px;border-top:1px solid var(--line);margin-top:18px;padding-top:14px}.seat-link-notice strong{font-size:12px;font-weight:600}.seat-link-notice p{font-size:11px;line-height:1.6;color:var(--muted);margin:4px 0 0;max-width:620px}.seat-link-notice .text-button{flex-shrink:0;white-space:nowrap;font-size:12px}.room-actions.lobby-actions{justify-content:flex-end;margin-top:8px}
@media(max-width:600px){.seat-link-notice{display:block}.seat-link-notice .text-button{margin-top:4px;padding-left:0}}

/* Laptop polish: preserve the hero composition while bringing creation above the fold. */
@media(min-width:851px){
.hero{margin-top:-24px;padding:0 0 32px}.hero h1{font-size:44px;line-height:1.12;margin-bottom:12px}.hero .intro{max-width:none;line-height:1.55;margin-bottom:0}.hero .create-form{margin-top:14px}.hero .create-form>label{margin-bottom:6px}.hero .create-form>input{min-height:44px;padding:11px 15px}.hero .play-choices{margin-top:12px}.hero .play-choices legend{margin-bottom:6px}.hero .play-mode{min-height:44px;padding:6px 10px;margin-bottom:6px;align-items:center}.hero .play-mode input{margin:0}.hero .play-mode strong{display:inline;line-height:1.4;margin-right:4px}.hero .play-mode>span>span{display:inline;line-height:1.4;margin-top:0}.hero .play-mode>span>span:before{content:'— '}.hero .mixed-bots{margin:8px 0 0}.hero .mixed-bots select{margin-top:4px}.hero .create-form>.button{margin-top:9px}.hero .create-form>.micro{margin-top:8px;line-height:1.5}
.hero-art{width:88%;height:360px;justify-self:center}.hero-art .fan-card{width:136px}.hero-art .fan-card.one{transform:translate(-84px,11px) rotate(-19deg)}.hero-art .fan-card.two{transform:translate(-30px,-7px) rotate(-6deg)}.hero-art .fan-card.three{transform:translate(33px,-4px) rotate(8deg)}.hero-art .fan-card.four{transform:translate(92px,18px) rotate(22deg)}
}
@media(min-width:851px) and (max-width:1159px){.hero h1{font-size:40px}.hero-art{height:330px}.hero-art .fan-card{width:123px}.hero-art .fan-card.one{transform:translate(-72px,11px) rotate(-19deg)}.hero-art .fan-card.four{transform:translate(77px,18px) rotate(22deg)}}
/* Keep the same form usable in shorter laptop browser windows. */
@media(min-width:851px) and (max-height:740px){.hero{margin-top:-32px}.hero h1{line-height:1.08;margin-bottom:8px}.hero .intro{line-height:1.45}.hero .create-form{margin-top:10px}.hero .create-form>label{margin-bottom:4px}.hero .play-choices{margin-top:8px}.hero .play-choices legend{margin-bottom:4px}.hero .mixed-bots{margin-top:4px}.hero .mixed-bots select{margin-top:2px}.hero .create-form>.button{margin-top:6px}}
@media(min-width:1160px) and (max-height:740px){.hero h1{font-size:42px}}

/* One direct, compact welcome replaces the eyebrow and stacked slogan. */
.hero h1{letter-spacing:-1.2px;max-width:510px}
@media(max-width:850px){.hero h1{font-size:40px;line-height:1.12;margin-bottom:14px}}
@media(max-width:600px){.hero h1{font-size:34px;line-height:1.15;letter-spacing:-.9px;max-width:none;margin-bottom:14px}}

.hero h1 .accent{white-space:nowrap}
@media(max-width:360px){.hero h1{font-size:30px}}

/* Contract updates share the original score footer instead of adding rows. */
.team-score .score-meta{display:flex;align-items:center;gap:6px;min-width:0;line-height:15px;height:15px;white-space:nowrap}
.score-rules{flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis}
.team-score .contract-progress{flex:1;min-width:0;border:0;border-left:1px solid var(--line);padding:0 0 0 6px;font-size:inherit;line-height:inherit;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* Silent, short victory bursts: no hit targets, backdrop, or layout footprint. */
.victory-fireworks{position:fixed;inset:0;width:100%;height:100%;pointer-events:none;z-index:30}
@media(prefers-reduced-motion:reduce){.victory-fireworks{display:none}}

.contract-check{color:var(--green);font-weight:750}

/* Keep both bags and the useful contract numbers visible on narrow phones. */
.score-rules.progress-bags{flex-shrink:0}
@media(max-width:600px){.score-meta .bag-limit{display:none}.team-score .score-meta{gap:4px}.team-score .contract-progress{padding-left:4px}}

/* Anchor the illustration independently of the expanding mixed-seat controls. */
@media(min-width:601px){.hero-art{align-self:start;margin-top:80px}}

/* Public seat avatars: curated gradients and crisp, cream geometric marks. */
.avatar:not(.empty){border-radius:10px;color:#fff5db;border:1px solid #ffffff38;box-shadow:inset 0 1px 0 #ffffff25,0 2px 4px #102b2520}
.avatar svg{width:65%;height:65%;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;display:block}
.avatar.empty{border-radius:10px}
.avatar.avatar-p0{background:linear-gradient(145deg,#478275,#173f43)}
.avatar.avatar-p1{background:linear-gradient(145deg,#b57a38,#774529)}
.avatar.avatar-p2{background:linear-gradient(145deg,#7386a9,#38476f)}
.avatar.avatar-p3{background:linear-gradient(145deg,#a96976,#6f3e61)}
.avatar.avatar-p4{background:linear-gradient(145deg,#78905e,#3c573e)}
.avatar.avatar-p5{background:linear-gradient(145deg,#9376ad,#544173)}
.avatar.avatar-p6{background:linear-gradient(145deg,#bc775b,#7c403b)}
.avatar.avatar-p7{background:linear-gradient(145deg,#538ca0,#2b536e)}
.avatar.avatar-p8{background:linear-gradient(145deg,#a08a42,#635421)}
.avatar.avatar-p9{background:linear-gradient(145deg,#6a9b88,#345b50)}
.avatar.avatar-p10{background:linear-gradient(145deg,#b36a92,#733d6a)}
.avatar.avatar-p11{background:linear-gradient(145deg,#688497,#354e60)}
.avatar.avatar-p12{background:linear-gradient(145deg,#a08c78,#665145)}
.avatar.avatar-p13{background:linear-gradient(145deg,#7a86bb,#45497f)}
.avatar.avatar-p14{background:linear-gradient(145deg,#a18456,#675735)}
.avatar.avatar-p15{background:linear-gradient(145deg,#4e9294,#28565e)}
.table-player .avatar:not(.empty){border-radius:7px}
/* Float side avatars above the label so name widths and vertical centers stay intact. */
.table-player.west .avatar,.table-player.east .avatar{display:grid;position:absolute;bottom:calc(100% + 4px);left:9px}
.table-player.east .avatar{left:auto;right:9px}
@media(max-width:600px){.table-player .avatar:not(.empty){border-radius:6px}.table-player.west .avatar{left:7px}.table-player.east .avatar{right:7px}}

/* Matching compact match actions stay in a single row, even on narrow phones. */
.summary-actions.match-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;max-width:360px}
.summary-actions.match-actions>.button{width:100%;min-width:0;height:44px;min-height:44px;padding:6px 8px;font-size:12px;line-height:1.2;text-align:center;white-space:normal}
.summary-actions.match-actions>.micro{grid-column:1 / -1;margin:0}

/* One compact recap replaces the duplicate move log and expanding card result. */
.table-recap .aside-title{margin-bottom:10px}
.recap-copy{min-width:0;min-height:44px}
.recap-copy strong,.recap-copy p{display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.recap-copy strong{font-size:13px;line-height:1.5}
.recap-copy p{font-size:11px;line-height:1.5;color:var(--muted);margin:3px 0 0}
.recap-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:4px;margin:4px 0}
.recap-actions .text-button{min-width:0;font-size:11px;padding:6px 2px;min-height:44px}
.table-recap details{border-top:1px solid var(--line)}
.table-recap summary,.review-bids summary{min-height:44px;padding:13px 0;font-size:12px;font-weight:650;cursor:pointer}
.table-recap .activity{max-height:230px}
.review-explanation{font-size:12px;line-height:1.6;color:var(--muted)}
.review-navigation{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:center;gap:6px;margin-top:16px}
.review-navigation .button{min-width:0;min-height:44px;font-size:11px;padding:8px}
.review-navigation .text-button{font-size:11px;padding:6px}
.review-index{list-style:none;margin:16px 0;padding:0;display:grid;gap:8px}
.review-choice{width:100%;display:flex;flex-direction:column;align-items:flex-start;gap:5px;min-height:60px;padding:12px;border:1px solid var(--line);border-radius:9px;background:var(--paper);color:var(--ink);text-align:left}
.review-choice strong{font-size:12px}.review-choice span{font-size:11px;line-height:1.5;overflow-wrap:anywhere;color:var(--muted)}
.review-empty{font-size:12px;line-height:1.6;color:var(--muted)}
.review-bids{border-top:1px solid var(--line)}
.review-snapshot{margin-top:18px}
@media(max-width:850px){.game-aside .table-recap{order:-1;grid-column:1 / -1}}

.score-rules.bags-warning,.hand-overview .tricks-behind{font-weight:700}
.score-rules.bags-warning,.hand-overview .tricks-behind,.summary-team strong.points-negative{color:#8a302e}
/* Native share and copy remain compact, adjacent actions for each private seat. */
.invite-buttons.has-share{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr) auto;gap:6px}
.invite-buttons.has-share .button{min-width:0;padding:8px 6px;min-height:44px;font-size:11px;line-height:1.3}
.invite-buttons.has-share .text-button{padding:6px 2px;min-height:44px;white-space:nowrap}

/* Match the feature divider within the existing space above saved tables. */
.saved-heading{border-top:1px solid var(--line);margin-top:16px;padding-top:15px}

/* Public, server-rendered product facts. Kept below the existing home interface. */
.home-guide{max-width:1096px;margin:0 auto;padding:0 0 36px;color:var(--muted);font-size:13px;line-height:1.65}
.home-guide h2{border-top:1px solid var(--line);padding-top:24px;font-size:28px;letter-spacing:-.6px;color:var(--ink);margin-bottom:12px}
.home-guide>p{max-width:780px;margin-bottom:22px}
.home-guide h3{font-size:14px;color:var(--ink);margin-bottom:8px}
.home-guide details{border-bottom:1px solid var(--line)}
.home-guide summary{min-height:44px;padding:12px 0;cursor:pointer;font-weight:600;color:var(--green)}
.home-guide details p{max-width:780px;margin:0 0 14px}
@media(max-width:1160px){.home-guide{margin-left:32px;margin-right:32px}}
@media(max-width:600px){.home-guide{margin-left:20px;margin-right:20px;font-size:14px}.home-guide h2{font-size:26px}}

/* Match each player to their table avatar, with compact names and bid progress. */
.hand-player{display:flex;align-items:center;gap:7px;min-width:0}
.hand-player-name{min-width:0;overflow-wrap:anywhere}
.hand-overview .avatar:not(.empty){width:22px;height:22px;border-radius:6px}

/* One sticky score surface spans both game columns and stays within this match. */
.game-session{position:relative;min-width:0}
.score-dock{position:sticky;top:0;z-index:25;padding:env(safe-area-inset-top,0px) 0 8px;margin-bottom:10px;background:var(--paper);box-shadow:0 7px 12px -10px #193b3240}
.score-dock .scoreboard{margin-bottom:0}
.score-dock .team-heading{font-size:11px;line-height:1.5;font-family:inherit;font-weight:750;letter-spacing:2px;text-transform:uppercase;color:var(--muted);white-space:nowrap}
.score-dock .team-names{font-size:14px;min-height:1.4em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;overflow-wrap:normal}
.score-dock .score-number{font-size:32px}
.score-dock .score-meta{font-size:12px}
.game-session .table{scroll-margin-top:var(--score-scroll-offset,0px)}
.game-session .summary{scroll-margin-top:var(--score-scroll-offset,0px)}
@media(max-width:600px){
  .score-dock{padding-bottom:6px;margin-bottom:7px}
  .score-dock .team-score{padding:9px 10px;gap:4px}
  .score-dock .team-heading{font-size:9px;letter-spacing:1.8px}
  .score-dock .team-names{font-size:12px}
  .score-dock .score-number{font-size:27px}
  .score-dock .score-meta{font-size:11px}
}
@media(max-width:360px){
  .score-dock .team-score{padding-left:6px;padding-right:6px}
  .score-dock .score-meta{gap:3px}
  .score-dock .contract-progress{padding-left:3px}
}

/* Emphasize the winning summary without changing the box dimensions. */
.summary-team.summary-winner{box-shadow:inset 0 0 0 3px var(--green)}

.recap-actions .text-button{display:inline-flex;align-items:center;gap:6px;font-weight:650}
.recap-action-icon{width:16px;height:16px;flex-shrink:0;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
