:root{--felt: #1e3a5f;--rail: #5a3921;--trump-color: #7c3aed;--bg: #f4f1ea;--panel: #ffffff;--panel-2: #f0ece3;--text: #1c1917;--text-dim: #6b6560;--border: #d8d2c6;--accent: #b45309;--legal: #16a34a;--danger: #b91c1c;--tile-face: #faf7f0;--tile-ink: #1c1917;color-scheme:light}:root[data-theme=dark]{--bg: #14110d;--panel: #211d17;--panel-2: #2b261f;--text: #f2ede3;--text-dim: #a9a196;--border: #3a342b;--accent: #f59e0b;--legal: #22c55e;--danger: #f87171;--tile-face: #efe9dd;--tile-ink: #14110d;color-scheme:dark}*{box-sizing:border-box}body{margin:0;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;background:var(--bg);color:var(--text);line-height:1.4}#app{min-height:100vh;display:flex;flex-direction:column}#app>.account-bar{flex:0 0 auto}#game-root{flex:1 1 auto;min-height:0;display:flex;flex-direction:column}#solo-wrap{flex:1 1 auto}#online-wrap,#net-game-root{flex:1 1 auto;min-height:0;display:flex;flex-direction:column}button{font:inherit;cursor:pointer}button:focus-visible,.tile:focus-visible,select:focus-visible,input:focus-visible{outline:3px solid var(--accent);outline-offset:2px}.btn{border:1px solid var(--border);background:var(--panel);color:var(--text);border-radius:10px;padding:.55rem .9rem;min-height:44px;transition:transform .06s ease,background .15s ease}.btn:hover{background:var(--panel-2)}.btn:active{transform:translateY(1px)}.btn--primary{background:var(--accent);color:#fff;border-color:transparent;font-weight:600}.btn--big{width:100%;font-size:1.1rem;padding:.8rem;margin-top:.5rem}.btn--ghost{background:transparent}.btn--off{opacity:.38;cursor:not-allowed}.btn[disabled]{cursor:not-allowed;opacity:.38}.setup{max-width:560px;margin:0 auto;padding:2rem 1rem}.setup-head h1{margin:0 0 .2rem;font-size:1.6rem}.subtitle{color:var(--text-dim);margin:0 0 1rem}.card{background:var(--panel);border:1px solid var(--border);border-radius:16px;padding:1.25rem;display:flex;flex-direction:column;gap:1rem}.field{display:flex;flex-direction:column;gap:.35rem}.field--inline{flex-direction:row;align-items:center;gap:.5rem}.field-label{font-weight:600;font-size:.9rem;color:var(--text-dim)}.input,.select{padding:.5rem .6rem;border:1px solid var(--border);border-radius:8px;background:var(--bg);color:var(--text);min-height:44px}.ai-seats{display:flex;flex-direction:column;gap:.75rem}.ai-seats h3{margin:0;font-size:1rem}.segmented{display:inline-flex;gap:.3rem;flex-wrap:wrap}.seg{border:1px solid var(--border);background:var(--panel);color:var(--text);border-radius:999px;padding:.4rem .85rem;min-height:40px}.seg--active{background:var(--accent);color:#fff;border-color:transparent}.theme-controls{display:flex;gap:.75rem;align-items:center;flex-wrap:wrap}.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}.stats-card{margin-top:1rem}.stats-card h3{margin:0 0 .5rem}.stats-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:.6rem;margin-bottom:.75rem}.stat{background:var(--panel-2);border-radius:10px;padding:.6rem .75rem;display:flex;flex-direction:column}.stat-value{font-size:1.3rem;font-weight:700}.stat-label{color:var(--text-dim);font-size:.8rem}.game{max-width:960px;margin:0 auto;padding:1rem;display:flex;flex-direction:column;gap:1rem}.scoreboard{background:var(--panel);border:1px solid var(--border);border-radius:14px;padding:.75rem 1rem;display:flex;flex-direction:column;gap:.5rem}.scores{display:flex;gap:1rem}.score{flex:1;display:flex;justify-content:space-between;align-items:baseline;background:var(--panel-2);border-radius:10px;padding:.5rem .75rem}.score--mine{outline:2px solid var(--accent)}.score-label{color:var(--text-dim);font-size:.85rem}.score-value{font-size:1.6rem;font-weight:700}.meta{display:flex;gap:.4rem;flex-wrap:wrap}.chip{background:var(--panel-2);border:1px solid var(--border);color:var(--text-dim);border-radius:999px;padding:.15rem .6rem;font-size:.8rem;white-space:nowrap}.turn-status{font-weight:600}.table{background:radial-gradient(ellipse at center,color-mix(in srgb,var(--felt) 88%,#fff 12%),var(--felt));border:10px solid var(--rail);border-radius:20px;padding:1rem;display:grid;grid-template-columns:1fr 1.4fr 1fr;grid-template-rows:auto auto auto;grid-template-areas:".    north .   " "west center east" ".    south .   ";gap:.75rem;min-height:360px}.seat--north{grid-area:north}.seat--west{grid-area:west}.seat--east{grid-area:east}.seat--south{grid-area:south}.center{grid-area:center}.seat{background:#0000002e;border-radius:12px;padding:.5rem;display:flex;flex-direction:column;gap:.4rem;color:#fff}.seat--turn{outline:3px solid #fde047;box-shadow:0 0 16px #fde04780}.seat--south{align-items:center}.seat-head{display:flex;gap:.35rem;align-items:center;flex-wrap:wrap}.seat-name{font-weight:700}.seat .chip{background:#ffffff26;color:#fff;border-color:transparent}.seat-bid{font-weight:700;color:#fde047}.hand{display:flex;gap:.3rem;flex-wrap:wrap}.hand--mine{gap:.4rem;justify-content:center}.seat--west .hand,.seat--east .hand{max-width:120px}.tile{--tile-suit: #888;border:none;background:transparent;padding:0;width:44px;border-radius:8px;display:inline-flex;animation:deal-in .25s ease both}.tile--small{width:34px}.tile-face{width:100%;height:auto;display:block;border-radius:8px}.tile-bg{fill:var(--tile-face);stroke:var(--tile-suit);stroke-width:4}.tile-divider{stroke:var(--tile-suit);stroke-width:3;opacity:.7}.tile-pip{fill:var(--tile-ink)}.tile-back-bg{fill:var(--rail);stroke:#000;stroke-width:3;opacity:.85}.tile--legal{box-shadow:0 0 0 3px var(--legal);border-radius:9px}.tile--legal:hover{transform:translateY(-4px)}.tile--disabled{opacity:.55}.hand--mine .tile{width:52px}.center{display:flex;align-items:center;justify-content:center}.trick{display:flex;gap:.6rem;flex-wrap:wrap;justify-content:center}.trick-slot{display:flex;flex-direction:column;align-items:center;gap:.2rem}.trick-seat{color:#fff;font-size:.75rem;opacity:.85}.trick-slot--winner .tile{box-shadow:0 0 0 3px #fde047;border-radius:9px}.trick--reveal{animation:pulse .4s ease}.banner{color:#fff;font-size:1.2rem;font-weight:700;text-align:center;padding:1rem;background:#00000059;border-radius:12px}.action-bar{background:var(--panel);border:1px solid var(--border);border-radius:14px;padding:.75rem 1rem;display:flex;gap:.5rem;align-items:center;flex-wrap:wrap;min-height:60px}.action-bar--wait,.action-bar--prompt{color:var(--text-dim);font-weight:600}.action-label{font-weight:600;margin-right:.25rem}.btn--bid,.btn--trump{min-width:56px}.game-controls{display:flex;justify-content:space-between;gap:1rem;flex-wrap:wrap}.history{background:var(--panel);border:1px solid var(--border);border-radius:14px;padding:.5rem 1rem}.history summary{cursor:pointer;font-weight:600}.history ul{margin:.5rem 0 .25rem;padding-left:1.1rem}.history li{font-size:.9rem;margin:.15rem 0}.tricks{background:var(--panel);border:1px solid var(--border);border-radius:14px;padding:.5rem 1rem}.tricks summary{cursor:pointer;font-weight:600}.tr-body{display:flex;flex-direction:column;gap:.9rem;margin-top:.6rem}.tr-hand{display:flex;flex-direction:column;gap:.4rem}.tr-hand-head{margin:0;font-size:.9rem;color:var(--text-dim)}.tr-row{display:flex;align-items:center;gap:.6rem;flex-wrap:wrap;padding:.35rem .5rem;background:var(--panel-2);border-radius:10px}.tr-idx{font-weight:700;color:var(--text-dim);font-size:.8rem;min-width:1.6rem}.tr-lead,.tr-won{font-size:.85rem;color:var(--text-dim);white-space:nowrap}.tr-won{margin-left:auto;font-weight:600;color:var(--text)}.tr-tiles{display:flex;gap:.5rem;flex-wrap:wrap}.tr-tile{display:flex;flex-direction:column;align-items:center;gap:.15rem}.tr-tile .tile{width:30px}.tr-tile--won .tile{box-shadow:0 0 0 2px var(--accent);border-radius:8px}.tr-seat{font-size:.7rem;color:var(--text-dim)}.tr-empty{color:var(--text-dim);font-size:.9rem;margin:.5rem 0 .25rem}.game--net{flex:1 1 auto;max-width:1024px;width:100%;height:auto;margin:0 auto;padding:.6rem;gap:.5rem;min-height:0;overflow:hidden}.game--net>.scoreboard,.game--net>.pause-banner,.game--net>.action-bar,.game--net>.net-error,.game--net>.tricks,.game--net>.game-controls{flex:0 0 auto}.game--net>.table{flex:1 1 auto;min-height:0;overflow:auto}.game--net .tile{width:clamp(30px,4vh,44px)}.game--net .hand--mine .tile{width:clamp(34px,5vh,52px)}.game--net .tile--small{width:clamp(24px,3.2vh,34px)}.game--net .banner{font-size:1rem;padding:.6rem}.game--net>.tricks{max-height:42vh;overflow:auto}.hand--facedown{justify-content:flex-start}@media (max-height: 520px),(max-width: 380px){.game--net{overflow:auto}.game--net>.table{overflow:visible}}.speed-control{display:inline-flex;align-items:center;gap:.4rem;color:var(--text-dim);font-size:.85rem}.input--sm{padding:.3rem .5rem;font-size:.85rem;min-height:34px}.lobby-rejoin-row{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.4rem 0}.lobby-rejoin-meta{display:flex;flex-direction:column;gap:.1rem}.lobby-rejoin-name{font-weight:600;color:var(--text)}.lobby-rejoin-format{font-size:.82rem}@keyframes deal-in{0%{opacity:0;transform:translateY(-8px) scale(.9)}to{opacity:1;transform:none}}@keyframes pulse{0%{transform:scale(1)}50%{transform:scale(1.04)}to{transform:scale(1)}}@media (prefers-reduced-motion: reduce){*{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}}@media (max-width: 560px){.table{grid-template-columns:1fr 1.2fr 1fr;padding:.6rem}.hand--mine .tile{width:44px}}.auth{max-width:460px;margin:0 auto;padding:2rem 1rem;display:flex;flex-direction:column;gap:1rem}.auth-head h1{margin:0 0 .2rem;font-size:1.5rem}.auth-card{gap:.85rem}.auth-form{display:flex;flex-direction:column;gap:.85rem}.auth-msg{margin:0;min-height:1.2rem;font-size:.9rem}.auth-msg--error{color:var(--danger)}.auth-msg--info{color:var(--text-dim)}.auth-recovery{display:flex;flex-direction:column;gap:.4rem;border-top:1px solid var(--border);padding-top:.6rem}.auth-disclosure summary{cursor:pointer;font-weight:600;font-size:.9rem;padding:.25rem 0}.auth-recovery-body{display:flex;flex-direction:column;gap:.6rem;padding:.4rem 0 .6rem}.auth-offline{align-items:stretch;text-align:center}.auth-offline .subtitle{margin:0 0 .5rem}.account-bar{max-width:960px;margin:0 auto;padding:.5rem 1rem;display:flex;align-items:center;justify-content:space-between;gap:1rem;color:var(--text-dim);font-size:.9rem}.account-who strong{color:var(--text)}.account-bar-actions{display:flex;gap:.5rem}.btn--sm{min-height:34px;padding:.3rem .7rem;font-size:.85rem}.btn--danger{border-color:var(--danger);color:var(--danger)}.btn--danger:hover{background:color-mix(in srgb,var(--danger) 12%,transparent)}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000080;display:flex;align-items:flex-start;justify-content:center;padding:2rem 1rem;overflow-y:auto;z-index:50}.modal{background:var(--panel);border:1px solid var(--border);border-radius:16px;padding:1.25rem;width:100%;max-width:640px;display:flex;flex-direction:column;gap:1rem}.modal-head{display:flex;align-items:center;justify-content:space-between}.modal-head h2{margin:0;font-size:1.3rem}.members-msg{margin:0;min-height:1.1rem;font-size:.9rem}.members-msg--error{color:var(--danger)}.members-msg--info{color:var(--text-dim)}.members-invite{display:flex;flex-direction:column;gap:.4rem;border-bottom:1px solid var(--border);padding-bottom:.85rem}.members-invite-row{display:flex;gap:.5rem;flex-wrap:wrap}.members-invite-row .input{flex:1 1 12rem}.members-list{display:flex;flex-direction:column;gap:.5rem}.member-row{display:flex;align-items:center;gap:.75rem;flex-wrap:wrap;padding:.6rem .75rem;background:var(--panel-2);border-radius:10px}.member-id{display:flex;flex-direction:column;min-width:10rem;flex:1 1 12rem}.member-name{font-weight:600}.member-sub{color:var(--text-dim);font-size:.8rem;word-break:break-word}.member-badges{display:flex;gap:.35rem;flex-wrap:wrap}.member-actions{display:flex;gap:.35rem;flex-wrap:wrap;margin-left:auto}.member-pill{border-radius:999px;padding:.1rem .55rem;font-size:.75rem;font-weight:600;border:1px solid var(--border);color:var(--text-dim)}.member-pill--role-admin{border-color:var(--accent);color:var(--accent)}.member-pill--role-moderator{border-color:var(--trump-color);color:var(--trump-color)}.member-pill--pending{border-color:var(--text-dim)}.member-pill--suspended{border-color:var(--danger);color:var(--danger)}.members-approval{display:flex;align-items:center;gap:.5rem;font-size:.9rem;color:var(--text-dim)}.avatar{display:inline-flex;flex:none;border-radius:50%;overflow:hidden;vertical-align:middle}.avatar-svg{display:block;border-radius:50%}.avatar-img{display:block;width:100%;height:100%;object-fit:cover;border-radius:50%}.account-who{display:inline-flex;align-items:center;gap:.5rem}.profile-top{display:flex;gap:1rem;align-items:center;flex-wrap:wrap}.profile-current{display:flex;flex-direction:column;align-items:center;gap:.25rem}.profile-status{font-size:.7rem;color:var(--text-dim)}.profile-name{flex:1 1 14rem;display:flex;flex-direction:column;gap:.35rem}.profile-h{margin:.25rem 0 0;font-size:1rem}.profile-builder{display:flex;gap:1rem;align-items:flex-start;flex-wrap:wrap}.profile-builder-preview{flex:none}.profile-pickers{display:flex;flex-direction:column;gap:.6rem;flex:1 1 14rem}.profile-upload{display:flex;gap:.75rem;align-items:center;flex-wrap:wrap}.picker{display:flex;flex-direction:column;gap:.3rem}.swatches{display:flex;gap:.4rem;flex-wrap:wrap}.swatch{width:32px;height:32px;border-radius:50%;border:2px solid var(--border);padding:0;cursor:pointer;overflow:hidden;display:inline-flex;background:var(--panel-2)}.swatch--face{background:var(--panel-2)}.swatch--on{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent)}.lb-controls{display:flex;gap:1rem;align-items:center;flex-wrap:wrap}.lb-rank{font-weight:700;color:var(--text-dim);min-width:2.2rem}.lb-rating{font-size:1.3rem;font-weight:700;margin-left:auto}.lobby .card{display:flex;flex-direction:column;gap:1rem}.lobby-config{display:flex;flex-direction:column;gap:.9rem;padding-top:.4rem;border-top:1px solid var(--line, rgba(128,128,128,.25))}.lobby-rejoin-list{display:flex;flex-direction:column;gap:.5rem}.lobby-rejoin-row{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.5rem .75rem;border:1px solid var(--line, rgba(128,128,128,.25));border-radius:8px}.muted{color:var(--text-dim)}.net-status{padding:1.5rem;text-align:center;color:var(--text-dim)}.net-error{margin:.75rem auto;max-width:40rem;padding:.6rem .9rem;border-radius:8px;background:var(--danger-bg, rgba(200,60,60,.15));color:var(--danger, #d64545);text-align:center;font-weight:600}.pause-banner{display:flex;align-items:center;gap:1rem;flex-wrap:wrap;margin:.75rem auto;max-width:40rem;padding:.7rem 1rem;border-radius:10px;background:var(--warn-bg, rgba(220,160,40,.18));border:1px solid var(--warn, rgba(220,160,40,.6))}.pause-headline{font-weight:600}.pause-timer{font-variant-numeric:tabular-nums;font-weight:700;font-size:1.2rem;margin-left:auto}.table--paused{opacity:.55;filter:grayscale(.4)}@media (prefers-reduced-motion: reduce){.table--paused{filter:none}}.modal--wide{max-width:760px}.btn--icon{padding:.15rem .45rem;min-width:1.9rem;line-height:1.1}.tourney-list{display:flex;flex-direction:column;gap:.4rem}.tourney-row{display:flex;justify-content:space-between;align-items:center;gap:.75rem;width:100%;text-align:left;padding:.65rem .85rem;background:var(--panel);border:1px solid var(--border);border-radius:10px;cursor:pointer}.tourney-row:hover{border-color:var(--accent, #6a9)}.tourney-row-name{font-weight:600}.tourney-create-row{display:flex;gap:.5rem;flex-wrap:wrap;align-items:center}.tourney-create-row .input{flex:1 1 10rem}.tourney-back{align-self:flex-start}.tourney-detail-head{display:flex;justify-content:space-between;align-items:flex-start;gap:1rem}.tourney-detail-head h3{margin:0 0 .15rem}.tourney-champ{font-weight:600}.tourney-teams{display:flex;flex-direction:column;gap:.3rem;margin-bottom:.6rem}.tourney-team-row{display:flex;align-items:center;gap:.6rem}.tourney-seed{display:inline-flex;align-items:center;justify-content:center;width:1.6rem;height:1.6rem;border-radius:50%;background:var(--panel-2, rgba(127,127,127,.15));font-size:.8rem;font-weight:600}.tourney-team-name{flex:1}.tourney-team-actions{display:flex;gap:.2rem}.tourney-addteam{display:flex;gap:.5rem;flex-wrap:wrap;align-items:center;margin:.4rem 0}.tourney-addteam .input{flex:1 1 8rem}.tourney-start-row{display:flex;justify-content:space-between;align-items:center;gap:1rem;flex-wrap:wrap;margin-top:.5rem}.tourney-standings{display:flex;flex-direction:column;gap:.15rem}.tourney-standings-row{display:grid;grid-template-columns:2rem 1fr 3.5rem 3rem;gap:.5rem;align-items:center;padding:.3rem .4rem;border-radius:6px}.tourney-standings-head{font-size:.8rem;color:var(--text-dim);font-weight:600}.tourney-standings-row:nth-child(odd of:not(.tourney-standings-head)){background:#7f7f7f0f}.tourney-standings-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tourney-bracket-group{margin-bottom:.9rem}.tourney-bracket-group h5{margin:.4rem 0 .35rem;font-size:.9rem;color:var(--text-dim)}.tourney-match{display:flex;justify-content:space-between;align-items:center;gap:.75rem;padding:.5rem .65rem;border:1px solid var(--border);border-radius:8px;margin-bottom:.3rem}.tourney-match--done{opacity:.75}.tourney-match-teams{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}.tourney-vs{color:var(--text-dim);font-size:.8rem}.tourney-team--won{font-weight:700}.tourney-match-win{font-size:.85rem}.tourney-match-action{flex-shrink:0}.tourney-rsvp-buttons{display:flex;gap:.5rem;flex-wrap:wrap}.tourney-myrsvp p{margin:.3rem 0}.tourney-rsvp-badge{font-size:.75rem;font-weight:600;padding:.1rem .5rem;border-radius:999px;background:#7f7f7f26}.tourney-rsvp-badge--accepted{background:#22a0502e;color:#1a7f43}.tourney-rsvp-badge--declined{background:#c83c3c29;color:#b23b3b}.tourney-rsvp-badge--invited{color:var(--text-dim)}@media (prefers-color-scheme: dark){.tourney-rsvp-badge--accepted{color:#5bd98a}.tourney-rsvp-badge--declined{color:#f08a8a}}
