:root{--bg:#123329;--panel:#1d4033;--panel-on:#2c583f;--text:#f2efe4;--muted:#9db89f;--border:#5a6b5a;--border-strong:#7fae8a;--input-bg:#123329;--table-bg:#1a4b39;--table-border:#37654e;--team-a:#274a76;--team-b:#6b3b3b;--team-a-win:#5b9fd4;--team-b-win:#e07055;--win:#f0c94d;--win-text:#222;--red:#e4573d;--card-white:#fff;--card-ink:#111;--card-ink-red:#c0392b;--opp-text:#ffa08c;--card-border:#b9b9b9;--cardback-bg:#153d59;--cardback-border:#2c6886;--cardback-text:#bcd7e4;--hint-bg:#41321a;--hint-text:#f2e2ad;--hint-border:#d4b66a;--restart-bg:#5a3320;--restart-border:#b06a4a;--shadow:#0006;--sun-shadow:#00000029;--sun-light:#ffffff0d}:root[data-theme=light]{--bg:#eef4ea;--panel:#f4f8f2;--panel-on:#dcead9;--text:#1d2a24;--muted:#5c7164;--border:#a9b8ac;--border-strong:#4f7a61;--input-bg:#fff;--table-bg:#2e6b4f;--table-border:#2e6b4f;--team-a:#d5e2f5;--team-b:#f2d3d3;--team-a-win:#2a6db5;--team-b-win:#c44a32;--win:#7a5c00;--win-text:#fff;--red:#b03a24;--card-white:#fff;--card-ink:#141414;--card-ink-red:#b0231b;--opp-text:#b03a24;--card-border:#c9c9c9;--cardback-bg:#3a6b8a;--cardback-border:#2a5470;--cardback-text:#e3eef4;--hint-bg:#f5ead2;--hint-text:#6b5414;--hint-border:#c9a94e;--restart-bg:#e8d2c2;--restart-border:#b06a4a;--shadow:#00000040;--sun-shadow:#283c2d1a;--sun-light:#ffffff4d}:root[data-table-theme=ivory]{--table-bg:#eaf0e0;--table-border:#b7c6a9;--sun-shadow:#283c2d14}:root[data-table-theme=rose]{--table-bg:#ecdcd2;--table-border:#caa496;--sun-shadow:#5a322817}:root[data-table-theme=gilded]{--table-bg:#efe4c4;--table-border:#d2bd85;--sun-shadow:#6e5a1e1a}:root[data-table-theme=dusk]{--table-bg:#252c48;--table-border:#3e4b75;--sun-shadow:#0000003d}:root[data-card-back=weave]{--back-pat:repeating-linear-gradient(45deg, #ffffff1a 0 4px, transparent 4px 8px), repeating-linear-gradient(-45deg, #ffffff14 0 4px, transparent 4px 8px)}:root[data-card-back=compass]{--cardback-bg:#123a5e;--cardback-border:#2f6ba4;--cardback-text:#cde6f8;--back-pat:radial-gradient(circle, #ffffffe6 0 1px, transparent 2.2px), repeating-conic-gradient(from 0deg, #ffffff40 0deg 5deg, transparent 5deg 30deg);--back-pat-size:6px 6px, auto}:root[data-card-back=crimson]{--cardback-bg:#6b1f22;--cardback-border:#a34a4e;--cardback-text:#f9d9da;--back-pat:radial-gradient(circle, #ffffff59 1.5px, transparent 2.6px);--back-pat-size:11px 11px}:root[data-card-back=celestial]{--cardback-bg:#101c3c;--cardback-border:#3f5cab;--cardback-text:#dfe8ff;--back-pat:radial-gradient(circle, #fffc 0 1px, transparent 2.4px);--back-pat-size:15px 15px}*{box-sizing:border-box}button{touch-action:manipulation;-webkit-tap-highlight-color:transparent}body{background:var(--bg);color:var(--text);margin:0;font-family:system-ui,sans-serif}.app{max-width:980px;margin:0 auto;padding:16px}.sr-only{clip:rect(0 0 0 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}:focus-visible{outline:2px solid var(--win);outline-offset:2px}.skip-link{background:var(--win);color:#222;z-index:100;border-radius:0 0 8px;padding:8px 14px;font-weight:600;position:absolute;top:0;left:-9999px}.skip-link:focus{top:0;left:0}.topbar{justify-content:space-between;align-items:center;gap:10px;display:flex}.topbar-actions{align-items:center;gap:8px;display:flex}.theme-toggle{cursor:pointer;border:1px solid var(--border);background:var(--panel);color:var(--text);border-radius:8px;padding:6px 10px;font-size:15px;line-height:1}h1{text-align:center;letter-spacing:1px;margin:6px 0 10px;font-size:24px}h1.masthead{background:0 0;justify-content:center;margin:4px auto 6px;padding:0;display:flex}.masthead-img{width:100%;max-width:520px;height:auto;display:block}h1.masthead-compact{margin:0 auto 4px}h1.masthead-compact .masthead-img{max-width:220px}.lobby-toggle-row{justify-content:center;margin:0 0 8px;display:flex}.lobby-toggle{cursor:pointer;border:1px solid var(--border);background:var(--panel);color:var(--muted);border-radius:8px;min-height:40px;padding:6px 12px;font-size:12px}.lobby-toggle:hover{color:var(--text);border-color:var(--border-strong)}.seats{flex-wrap:wrap;justify-content:center;gap:8px;margin-bottom:12px;display:flex}.tagline{text-align:center;color:var(--muted);margin:0 0 14px;font-style:italic}.hero{justify-content:center;margin-bottom:14px;display:flex}.hero-btn{cursor:pointer;border:1px solid var(--border-strong);background:linear-gradient(180deg, var(--panel-on), color-mix(in srgb, var(--panel-on) 82%, var(--bg)));width:100%;max-width:360px;color:var(--text);box-shadow:0 4px 14px var(--shadow);border-radius:14px;flex-direction:column;align-items:center;gap:2px;padding:14px 20px;display:flex}.hero-btn .hero-btn-title{letter-spacing:.5px;font-size:20px;font-weight:800}.hero-btn .hero-btn-sub{opacity:.85;font-size:13px}.resume-banner{border:1px dashed var(--border-strong);background:color-mix(in srgb, var(--win) 12%, transparent);text-align:center;border-radius:10px;flex-wrap:wrap;justify-content:center;align-items:center;gap:10px;max-width:560px;margin:0 auto 14px;padding:8px 12px;font-size:13px;display:flex}.resume-banner .resume-btn{cursor:pointer;border:1px solid var(--border-strong);background:var(--panel-on);color:var(--text);white-space:nowrap;border-radius:8px;padding:5px 12px;font-size:13px}.resume-banner .resume-btn.muted{border-color:var(--border);background:0 0}.first-run-hint{border:1px solid var(--border-strong);background:var(--panel);border-radius:12px;flex-wrap:wrap;justify-content:center;align-items:flex-start;gap:10px;max-width:560px;margin:0 auto 12px;padding:10px 12px;font-size:13px;display:flex}.first-run-hint .fr-text{color:var(--text);flex:1;min-width:220px}.first-run-hint .fr-actions{align-items:center;gap:8px;display:flex}.first-run-hint a{color:var(--win);font-weight:600;text-decoration:none}.first-run-hint .fr-dismiss{cursor:pointer;border:1px solid var(--border);color:var(--muted);background:0 0;border-radius:8px;min-height:40px;padding:6px 12px;font-size:12px}.first-run-hint .fr-cta{cursor:pointer;border:1px solid var(--win);background:var(--win);color:var(--win-text);white-space:nowrap;border-radius:8px;min-height:40px;padding:6px 14px;font-size:12px;font-weight:700}.mode-bar{flex-wrap:wrap;justify-content:center;align-items:center;gap:6px;margin-bottom:10px;display:flex}.mode-btn{cursor:pointer;border:1px solid var(--border);background:var(--panel);color:var(--text);border-radius:8px;padding:6px 12px;font-size:13px}.mode-btn.on{background:var(--panel-on);border-color:var(--border-strong);font-weight:600}.room-input{border:1px solid var(--border);background:var(--input-bg);color:var(--text);text-transform:uppercase;border-radius:8px;width:130px;padding:6px 10px;font-size:13px}.host-invite{flex-direction:column;align-items:center;gap:8px;margin-bottom:10px;display:flex}.host-invite-label{font-size:13px}.host-code-block{flex-direction:column;align-items:center;gap:8px;display:flex}.room-code-chip{letter-spacing:8px;border:2px solid var(--border-strong);background:var(--panel-on);color:var(--text);border-radius:12px;padding:6px 18px 6px 26px;font-family:ui-monospace,monospace;font-size:34px;font-weight:800}.room-code-inline{letter-spacing:2px;font-family:ui-monospace,monospace}.resume-btn:disabled{opacity:.5;cursor:default}.hint-text{opacity:.85;align-self:center;font-size:12px}.seat-btn{cursor:pointer;border:1px solid var(--border);background:var(--panel);color:var(--text);border-radius:8px;padding:6px 10px;font-size:13px}.seat-btn.human{background:var(--panel-on);border-color:var(--border-strong)}.seat-btn.team-chip.team-0{background:color-mix(in srgb, var(--team-a) 30%, transparent);border-color:color-mix(in srgb, var(--team-a) 60%, transparent)}.seat-btn.team-chip.team-1{background:color-mix(in srgb, var(--team-b) 30%, transparent);border-color:color-mix(in srgb, var(--team-b) 60%, transparent)}.seat-btn.restart{border-color:var(--restart-border);background:var(--restart-bg)}.lobby-row{flex-wrap:wrap;justify-content:center;align-items:center;gap:10px;width:100%;margin-top:6px;display:flex}.lobby-label{color:var(--muted);font-size:13px;font-weight:700}.seg{border:1px solid var(--border);border-radius:8px;display:inline-flex;overflow:hidden}.seg-btn{cursor:pointer;background:var(--panel);color:var(--text);border:none;padding:6px 12px;font-size:13px}.seg-btn+.seg-btn{border-left:1px solid var(--border)}.seg-btn.on{background:var(--panel-on);color:var(--accent);font-weight:800}.table{isolation:isolate;border:2px solid var(--table-border);background:var(--table-bg);border-radius:16px;min-height:480px;padding:12px;position:relative}.table:before{content:"";z-index:-1;border-radius:inherit;pointer-events:none;background:conic-gradient(from var(--sun-shadow-rot,90deg) at 50% 40%, transparent 0deg, transparent 168deg, var(--sun-shadow) 168deg, var(--sun-shadow) 192deg, transparent 192deg, transparent 360deg), conic-gradient(from calc(var(--sun-shadow-rot,90deg) + 180deg) at 50% 40%, transparent 0deg, transparent 174deg, var(--sun-light) 174deg, var(--sun-light) 186deg, transparent 186deg, transparent 360deg);position:absolute;inset:0}.table.empty{text-align:center;padding:40px 20px}.table-help{z-index:5;border:1px solid var(--border-strong);background:var(--panel);width:34px;height:34px;color:var(--win);cursor:pointer;box-shadow:0 2px 6px var(--shadow);border-radius:999px;justify-content:center;align-items:center;font-size:17px;font-weight:800;line-height:1;display:flex;position:absolute;top:10px;right:10px}.table-help:hover{background:var(--panel-on)}.table-help:focus-visible{outline:2px solid var(--win);outline-offset:2px}.scoreboard{background:var(--panel);border:1px solid var(--border);border-radius:12px;flex-direction:column;justify-content:center;align-items:center;gap:4px;padding:6px 10px;display:flex}.trick-track{justify-content:center;align-items:stretch;gap:10px;display:flex}.track-chip{border-radius:10px;flex-direction:column;align-items:center;min-width:86px;padding:5px 12px;display:flex}.track-won.team-0{background:color-mix(in srgb, var(--team-a-win) 24%, var(--panel));border:1px solid color-mix(in srgb, var(--team-a-win) 55%, transparent)}.track-won.team-0 .track-value{color:var(--team-a-win)}.track-won.team-1{background:color-mix(in srgb, var(--team-b-win) 24%, var(--panel));border:1px solid color-mix(in srgb, var(--team-b-win) 55%, transparent)}.track-won.team-1 .track-value{color:var(--team-b-win)}.track-lost.team-0{background:color-mix(in srgb, var(--team-a-win) 14%, var(--panel));border:1px solid color-mix(in srgb, var(--team-a-win) 35%, transparent)}.track-lost.team-0 .track-value{color:color-mix(in srgb, var(--team-a-win) 75%, var(--text))}.track-lost.team-1{background:color-mix(in srgb, var(--team-b-win) 14%, var(--panel));border:1px solid color-mix(in srgb, var(--team-b-win) 35%, transparent)}.track-lost.team-1 .track-value{color:color-mix(in srgb, var(--team-b-win) 75%, var(--text))}.track-pending{background:var(--panel);border:1px dashed var(--border)}.track-label{letter-spacing:1px;text-transform:uppercase;opacity:.8;font-size:11px}.track-value{font-size:26px;font-weight:800;line-height:1.1}.track-sub{opacity:.85;font-size:11px}.match-score{opacity:.85;white-space:nowrap;font-size:12px}.goal-caption{color:var(--muted);text-align:center;margin:2px 0 0;font-size:12px}.trick-progress-wrap{flex-direction:column;gap:6px;width:100%;max-width:340px;margin-top:4px;display:flex}.trick-progress{flex-direction:column;gap:3px;display:flex}.trick-progress .tp-header{justify-content:space-between;align-items:baseline;font-size:12px;display:flex}.trick-progress .tp-label{font-weight:600}.trick-progress .tp-count{opacity:.85;font-variant-numeric:tabular-nums}.trick-progress .tp-bar{background:color-mix(in srgb, var(--panel) 70%, transparent);border:1px solid var(--border);border-radius:999px;height:8px;overflow:hidden}.trick-progress .tp-fill{border-radius:999px;height:100%;transition:width .2s}.trick-progress.team-0 .tp-fill{background:var(--team-a-win)}.trick-progress.team-1 .tp-fill{background:var(--team-b-win)}.trump-ind{background:var(--card-white);border:1px solid var(--card-border);width:64px;height:64px;box-shadow:0 3px 8px var(--shadow);border-radius:999px;flex-direction:column;justify-content:center;align-items:center;display:flex}.trump-label{letter-spacing:1px;color:#222;opacity:.85;font-size:10px;font-weight:700;display:block}.big-suit{margin-top:1px;font-size:34px;line-height:1}.big-suit.red,.suit-sym.red{color:var(--red)}.big-suit.black{color:var(--card-ink)}.trump-none{opacity:.6;font-size:20px}.board{grid-template-rows:auto auto;grid-template-columns:1fr auto 1fr;align-items:center;gap:4px;display:grid}.board-north{grid-area:1/1/auto/-1}.board-west,.board-east{grid-row:2}.board-west{grid-column:1}.board-center{background:radial-gradient(circle at 50% 40%, color-mix(in srgb, var(--win) 34%, transparent), color-mix(in srgb, var(--win) 14%, transparent));border:2px dashed color-mix(in srgb, var(--win) 55%, transparent);border-radius:999px;flex-direction:column;grid-area:2/2;justify-content:center;align-items:center;min-width:148px;min-height:148px;padding:10px;display:flex;position:relative}.board-center:after{content:"";pointer-events:none;background:repeating-conic-gradient(from 0deg, color-mix(in srgb, var(--win) 30%, transparent) 0deg 2deg, transparent 2deg 30deg);opacity:.55;border-radius:999px;position:absolute;inset:7px;-webkit-mask:radial-gradient(circle,#0000 62%,#000 63% 76%,#0000 77%);mask:radial-gradient(circle,#0000 62%,#000 63% 76%,#0000 77%)}.board-south{grid-area:3/1/auto/-1}.board-seat{justify-content:center;display:flex}.trick-pile{grid-template-rows:auto auto auto;grid-template-columns:auto auto auto;place-items:center;min-width:150px;min-height:120px;display:grid;position:relative}.pile-empty{opacity:.45;font-size:13px}.trick-slot{justify-content:center;align-items:center;min-width:44px;min-height:48px;display:flex}.trick-pile.trick-lingering{animation:1.7s forwards trick-linger-fade}.trick-pile.trick-lingering .trick-entry{opacity:.9}@keyframes trick-linger-fade{0%{opacity:1}75%{opacity:1}to{opacity:.55}}.slot-north{grid-area:1/2}.slot-west{grid-area:2/1}.slot-center{grid-area:2/2}.slot-east{grid-area:2/3}.slot-south{grid-area:3/2}.trick-entry.winning .cardface{outline:3px solid var(--team-a-win);outline-offset:1px}.trick-entry.winning.team-1 .cardface{outline-color:var(--team-b-win)}.trick-animate{animation:.28s ease-out trick-in}@keyframes trick-in{0%{opacity:0;transform:translateY(16px)scale(.6)rotate(-3deg)}to{opacity:1;transform:translateY(0)scale(1)rotate(0)}}.trick-entry.winning{animation:1.6s ease-in-out infinite win-glow}@keyframes win-glow{0%,to{filter:drop-shadow(0 0 2px color-mix(in srgb, var(--team-a-win) 55%, transparent))}50%{filter:drop-shadow(0 0 7px color-mix(in srgb, var(--team-a-win) 90%, transparent))}}.trick-entry.winning.team-1{animation-name:win-glow-b}@keyframes win-glow-b{0%,to{filter:drop-shadow(0 0 2px color-mix(in srgb, var(--team-b-win) 55%, transparent))}50%{filter:drop-shadow(0 0 7px color-mix(in srgb, var(--team-b-win) 90%, transparent))}}.trick-entry.win-flash{animation:.5s ease-out win-flash-pop}@keyframes win-flash-pop{0%{filter:drop-shadow(0 0 10px color-mix(in srgb, var(--team-a-win) 95%, transparent)) brightness(1.2);transform:scale(1.12)}to{filter:drop-shadow(0 0 7px color-mix(in srgb, var(--team-a-win) 90%, transparent));transform:scale(1)}}.trick-entry.win-flash.team-1{animation-name:win-flash-pop-b}@keyframes win-flash-pop-b{0%{filter:drop-shadow(0 0 10px color-mix(in srgb, var(--team-b-win) 95%, transparent)) brightness(1.2);transform:scale(1.12)}to{filter:drop-shadow(0 0 7px color-mix(in srgb, var(--team-b-win) 90%, transparent));transform:scale(1)}}.trick-result-note{background:color-mix(in srgb, var(--win) 30%, transparent);color:var(--win);border:1px solid color-mix(in srgb, var(--win) 55%, transparent);white-space:nowrap;border-radius:999px;margin-top:6px;padding:3px 12px;font-size:12px;font-weight:700}.trick-result-note.team-0{color:var(--team-a-win);background:color-mix(in srgb, var(--team-a-win) 22%, transparent);border-color:color-mix(in srgb, var(--team-a-win) 50%, transparent)}.trick-result-note.team-1{color:var(--team-b-win);background:color-mix(in srgb, var(--team-b-win) 22%, transparent);border-color:color-mix(in srgb, var(--team-b-win) 50%, transparent)}.last-trick-btn{cursor:pointer;border:1px solid var(--border);background:var(--panel);color:var(--muted);white-space:nowrap;border-radius:999px;margin-top:6px;padding:4px 12px;font-size:12px}.last-trick-btn:hover{background:var(--panel-on);color:var(--text)}.cardface{background:var(--card-white);width:40px;height:57px;color:var(--card-ink);border:1px solid var(--card-border);border-radius:6px;flex-direction:column;justify-content:center;align-items:center;gap:0;font-size:15px;font-weight:700;line-height:1.05;display:inline-flex}.cardface.red{color:var(--card-ink-red)}.suit-sym{font-size:22px;line-height:1}.mini-card{cursor:pointer;font:inherit;background:0 0;border:none;padding:2px}.mini-card .cardface{transition:transform 60ms,box-shadow 60ms}.mini-card:not(:disabled):hover .cardface{box-shadow:0 4px 10px var(--shadow);transform:translateY(-6px)}.mini-card.playable .cardface{box-shadow:0 0 0 2px var(--win);transform:translateY(-3px)}.mini-card.illegal .cardface{opacity:.35}.edge.own-hand.my-turn .mini-card.illegal .cardface{opacity:.22;filter:grayscale(.7)}.mini-card:disabled{cursor:default}.edge.own-hand.my-turn .mini-card.playable .cardface{animation:1.6s ease-out legal-flash}@keyframes legal-flash{0%{box-shadow:0 0 0 2px var(--win), 0 0 16px 5px color-mix(in srgb, var(--win) 70%, transparent)}to{box-shadow:0 0 0 2px var(--win)}}.cardbacks{background-color:var(--cardback-bg);border:1px solid var(--cardback-border);width:40px;min-height:57px;color:var(--cardback-text);background-image:var(--back-pat,none);background-size:var(--back-pat-size,auto);border-radius:6px;justify-content:center;align-items:center;padding:2px 6px;font-size:14px;font-weight:700;display:inline-flex}.cardbacks.team-cb-0{background-color:var(--cardback-bg);border-color:var(--cardback-border);color:var(--cardback-text)}.cardbacks.team-cb-1{color:#f0d5d5;background-color:#5a2c2c;border-color:#a05a4a}.edge{border-radius:10px;flex-direction:column;align-items:center;gap:4px;padding:6px;display:flex}.edge.team-0{background:color-mix(in srgb, var(--team-a) 30%, var(--panel));outline:1px solid color-mix(in srgb, var(--team-a) 60%, transparent)}.edge.team-1{background:color-mix(in srgb, var(--team-b) 30%, var(--panel));outline:1px solid color-mix(in srgb, var(--team-b) 60%, transparent)}.edge .me-tag,.edge .partner-tag,.edge .opponent-tag{border-radius:999px;padding:1px 8px;font-size:11px;font-weight:700}.edge .opponent-tag{border:1px solid color-mix(in srgb, var(--team-b-win) 50%, transparent);color:var(--opp-text)}.edge .me-tag{background:var(--win);color:var(--win-text)}.edge .partner-tag{border:1px solid}.edge.my-turn{outline:2px solid var(--turn,var(--win));outline-offset:-2px;box-shadow:0 0 12px 2px color-mix(in srgb, var(--win) 55%, transparent);animation:1.6s ease-in-out infinite turn-pulse}@keyframes turn-pulse{0%,to{outline-color:var(--win);box-shadow:0 0 14px 3px color-mix(in srgb, var(--win) 65%, transparent)}50%{outline-color:color-mix(in srgb, var(--win) 45%, transparent);box-shadow:0 0 4px 0 color-mix(in srgb, var(--win) 25%, transparent)}}.board-north .edge,.board-south .edge{flex-direction:column}.board-west .edge,.board-east .edge{flex-direction:column-reverse}.board-north .cards,.board-south .cards{flex-wrap:wrap;justify-content:center;gap:4px;display:flex}.board-west .cards,.board-east .cards{flex-flow:column wrap;align-items:center;gap:4px;max-height:120px;display:flex}.seat-label{flex-wrap:wrap;justify-content:center;align-items:center;gap:6px;font-size:12px;display:flex}.seat-dir{text-align:center;border:1px solid var(--border-strong);background:color-mix(in srgb, var(--panel-on) 60%, transparent);width:18px;height:18px;color:var(--text);border-radius:999px;font-size:12px;font-weight:800;line-height:18px}.seat-dir-full{letter-spacing:1px;text-transform:uppercase;color:var(--muted);font-size:10px}.seat-name{font-weight:600}.turn-mark{color:var(--turn,var(--win));font-size:14px}.sort-bar{align-items:center;gap:3px;display:inline-flex}.sort-btn{cursor:pointer;border:1px solid var(--border);background:var(--panel);color:var(--muted);border-radius:6px;padding:1px 7px;font-size:11px;font-weight:800;line-height:1.4}.sort-btn:hover{background:var(--panel-on);color:var(--text)}.sort-btn.on{background:var(--win);border-color:var(--win);color:var(--win-text)}.muted{opacity:.5}.coach{background:var(--hint-bg);max-width:560px;color:var(--hint-text);border:1px solid var(--hint-border);text-align:center;border-radius:10px;flex-wrap:wrap;justify-content:center;align-items:center;gap:10px;margin:4px auto 6px;padding:8px 12px;font-size:14px;display:flex}.coach.celebrate{background:var(--panel-on);color:var(--text);border-color:var(--border-strong);font-weight:600}.coach-text{flex:1}.coach-invite{cursor:pointer;border:1px solid var(--border-strong);background:var(--panel);color:var(--text);white-space:nowrap;border-radius:8px;padding:3px 10px;font-size:12.5px;font-weight:600}.coach-invite:hover{background:var(--panel-on)}.coach-dismiss{cursor:pointer;color:inherit;opacity:.7;background:0 0;border:none;padding:2px 4px;font-size:16px;line-height:1}.coach-dismiss:hover{opacity:1}.actions{text-align:center;flex-direction:column;align-items:center;gap:6px;margin-top:6px;display:flex}.action-title{margin:0;font-size:14px}.action-title.action-your-turn{color:var(--win);background:color-mix(in srgb, var(--win) 12%, transparent);border:1px solid color-mix(in srgb, var(--win) 40%, transparent);border-radius:999px;padding:6px 16px;font-size:15px;font-weight:700;display:inline-block}.inline-hint{background:var(--hint-bg);color:var(--hint-text);border:1px solid var(--hint-border);border-radius:8px;margin:0;padding:6px 12px;font-size:13px}.suit-row{gap:10px;display:flex}.suit-btn{cursor:pointer;background:var(--card-white);border:1px solid #999;border-radius:8px;padding:4px 14px;font-size:24px}.hint{cursor:pointer;border:1px solid var(--hint-border);background:var(--hint-bg);color:var(--hint-text);border-radius:8px;padding:6px 12px;font-size:13px}.round-result{margin:4px 0;font-size:18px;font-weight:700}.round-summary{border:1px solid var(--border-strong);background:var(--panel);text-align:center;border-radius:12px;min-width:min(320px,92vw);padding:12px 18px}.round-summary-title{text-transform:uppercase;letter-spacing:1px;opacity:.7;margin:0 0 2px;font-size:12px}.match-summary{border-color:var(--win);box-shadow:0 0 26px color-mix(in srgb, var(--win) 38%, transparent);padding:18px 22px}.match-trophy{margin:0 0 4px;font-size:46px;line-height:1;animation:.7s match-win-pop;display:inline-block}@keyframes match-win-pop{0%{opacity:0;transform:scale(.3)}60%{transform:scale(1.18)}to{opacity:1;transform:scale(1)}}.round-result.round-win{color:var(--win)}.round-result.round-loss{color:var(--muted)}.round-scores{justify-content:center;gap:12px;margin-top:6px;display:flex}.round-score-chip{border-radius:8px;align-items:center;gap:6px;padding:4px 10px;font-size:14px;font-weight:600;display:inline-flex}.round-score-chip.team-0{background:color-mix(in srgb, var(--team-a) 35%, transparent)}.round-score-chip.team-1{background:color-mix(in srgb, var(--team-b) 35%, transparent)}.rs-dot{border-radius:999px;width:10px;height:10px;display:inline-block}.table.empty button{cursor:pointer;border:1px solid var(--border-strong);background:var(--panel-on);color:#fff;border-radius:8px;padding:8px 18px;font-size:15px}.consent-banner{z-index:50;border:1px solid var(--border-strong);background:var(--panel);max-width:480px;color:var(--text);box-shadow:0 6px 20px var(--shadow);border-radius:12px;flex-direction:column;align-items:flex-start;gap:8px;margin:0 auto;padding:14px;font-size:13px;transition:opacity .2s,transform .2s;display:flex;position:fixed;bottom:12px;left:12px;right:12px}.consent-banner.leaving{opacity:0;transform:translateY(8px)}.consent-banner p{margin:0}.consent-actions{flex-wrap:wrap;gap:8px;display:flex}.consent-btn{cursor:pointer;border:1px solid var(--border);background:var(--panel-on);color:var(--text);border-radius:8px;padding:6px 12px;font-size:13px}.app-footer{border-top:1px solid var(--border);flex-wrap:wrap;justify-content:center;gap:14px;margin-top:18px;padding-top:10px;font-size:12px;display:flex}.app-footer a{color:var(--muted);text-decoration:none}.app-footer a:hover{text-decoration:underline}.app-footer .copyright{color:var(--muted)}.legal{max-width:720px;margin:0 auto;padding:8px 4px 24px;font-size:14px;line-height:1.6}.legal h2{margin:20px 0 8px;font-size:18px}.legal a{color:var(--border-strong)}.legal-back{cursor:pointer;border:1px solid var(--border);background:var(--panel);color:var(--text);border-radius:8px;margin-bottom:12px;padding:6px 12px;font-size:13px;display:inline-block}.share-row{flex-wrap:wrap;justify-content:center;gap:8px;margin-top:10px;display:flex}.share-btn{cursor:pointer;border:1px solid var(--border);background:var(--panel);color:var(--text);border-radius:8px;padding:6px 12px;font-size:13px}.share-btn a{color:inherit;text-decoration:none;display:inline-block}@media (width<=640px){.app{padding:10px;padding-bottom:calc(10px + env(safe-area-inset-bottom,0px))}.app-game .masthead,.app-game .app-footer{display:none}h1{margin:4px 0 8px;font-size:20px}.tagline{margin-bottom:10px;font-size:13px}.hero-btn{border-radius:16px;max-width:none;min-height:64px;padding:12px 16px}.hero-btn .hero-btn-title{font-size:22px}.lobby-toggle{min-height:44px;padding:8px 14px;font-size:13px}.first-run-hint{padding:10px;font-size:13px}.first-run-hint .fr-dismiss{min-height:44px;padding:8px 14px;font-size:13px}.first-run-hint .fr-cta{min-height:44px;padding:8px 16px;font-size:13px}.mode-bar{gap:5px;margin-bottom:8px}.mode-btn,.seat-btn{min-height:44px;padding:8px 12px;font-size:14px}.room-input{width:108px;min-height:44px;font-size:14px}.seats{gap:6px;margin-bottom:8px}.table{border-radius:14px;min-height:0;padding:8px}.table-help{width:40px;height:40px;font-size:18px;top:8px;right:8px}.rules-overlay{padding:8px}.rules-modal{border-radius:14px;max-height:92vh}.rules-header{padding:10px 14px}.rules-close{min-width:44px;min-height:44px;font-size:22px}.rules-tab{text-align:center;flex:1;min-height:44px}.rules-body{padding:6px 16px 14px;font-size:14px}.table.empty button{width:100%;min-height:48px;font-size:16px}.scoreboard{gap:4px;padding:4px 6px}.trick-track{gap:6px}.track-chip{min-width:74px;padding:4px 8px}.track-value{font-size:22px}.match-score{font-size:11px}.trump-ind{margin:2px 0}.big-suit{font-size:28px}.trick-pile{min-width:120px;min-height:64px}.cardface{border-radius:8px;width:46px;height:66px;font-size:16px}.mini-card{padding:4px}.mini-card:not(:disabled):active .cardface{transform:scale(.92)}.cardbacks{width:42px;min-height:60px;font-size:13px}.suit-btn{border-radius:10px;min-width:56px;min-height:48px;font-size:22px}.hint{min-height:44px;padding:8px 16px;font-size:15px}.action-title{font-size:13px}.coach{margin:2px auto 4px;padding:8px 10px;font-size:13px}.round-result{font-size:15px}.consent-banner{bottom:8px;left:8px;right:8px}.sort-btn{border-radius:8px;min-width:34px;min-height:34px;font-size:13px}.last-trick-btn{min-height:40px;padding:6px 14px;font-size:13px}.trick-result-note{padding:5px 14px;font-size:13px}.edge{padding:3px}.board-north .cards,.board-south .cards,.board-west .cards,.board-east .cards{-webkit-overflow-scrolling:touch;flex-flow:row;justify-content:flex-start;gap:5px;width:100%;max-height:none;padding-bottom:4px;display:flex;overflow-x:auto}.own-hand .cards{flex-wrap:wrap;justify-content:center;gap:6px;padding-bottom:0;overflow-x:visible}.board-south .own-hand{z-index:2;position:sticky;bottom:0}}@media (orientation:landscape) and (height<=560px){.app{max-width:1280px;padding:6px 10px;padding-bottom:calc(6px + env(safe-area-inset-bottom,0px))}.app-game .masthead,.app-game .app-footer{display:none}.table{border-radius:12px;min-height:0;padding:6px}.scoreboard{gap:2px;padding:3px 6px}.trick-track{gap:4px}.track-chip{min-width:60px;padding:2px 6px}.track-value{font-size:18px}.goal-caption,.trick-progress-wrap,.match-score,.rank-chip{display:none}.board-center{min-width:116px;min-height:116px;padding:6px}.trump-ind{width:44px;height:44px}.big-suit{font-size:22px}.trump-ind .trump-label,.trump-none{display:none}.trick-pile{min-width:100px;min-height:56px}.trick-slot{min-width:38px;min-height:40px}.edge{gap:2px;padding:2px}.edge .seat-dir-full,.edge .sort-bar,.edge .partner-tag,.edge .opponent-tag{display:none}.seat-label{gap:4px;font-size:11px}.board-seat .cards,.own-hand .cards{gap:4px;max-height:none}.board-south .own-hand{z-index:2;position:sticky;bottom:0}.action-title{margin:0;font-size:12px}.actions{gap:2px;margin-top:2px}.hint,.undo-btn,.last-trick-btn,.sort-btn{min-height:34px}}.achievement-toasts{z-index:2000;pointer-events:none;flex-direction:column;gap:8px;max-width:min(340px,100vw - 32px);display:flex;position:fixed;top:16px;right:16px}.ach-toast{pointer-events:auto;background:var(--panel);border:1px solid var(--border-strong);box-shadow:0 4px 16px var(--shadow);border-radius:10px;align-items:center;gap:10px;padding:10px 12px;animation:.25s ease-out ach-toast-in;display:flex}.ach-toast-mastery{border-color:var(--win)}@keyframes ach-toast-in{0%{opacity:0;transform:translate(20px)}to{opacity:1;transform:translate(0)}}.ach-toast-icon{font-size:26px;line-height:1}.ach-toast-body{flex-direction:column;min-width:0;display:flex}.ach-toast-kind{text-transform:uppercase;letter-spacing:.04em;color:var(--muted);font-size:11px}.ach-toast-title{font-size:14px;font-weight:700}.ach-toast-sub{color:var(--muted);font-size:12px}.ach-toast-close{color:var(--muted);cursor:pointer;background:0 0;border:none;margin-left:auto;padding:4px;font-size:14px}.gallery-launcher{flex-wrap:wrap;align-items:center;gap:10px;margin-top:8px;display:flex}.active-title-chip{background:var(--panel-on);border:1px solid var(--border);border-radius:999px;align-items:center;gap:6px;padding:4px 10px;font-size:13px;display:inline-flex}.active-title-chip.big{font-size:15px}.ach-gallery{background:var(--panel);border:1px solid var(--border);border-radius:12px;margin-top:20px;padding:16px}.gallery-header{justify-content:space-between;align-items:center;margin-bottom:10px;display:flex}.gallery-title{font-size:16px;font-weight:700}.gallery-tabs{flex-wrap:wrap;gap:8px;margin-bottom:14px;display:flex}.badge-tier{margin-bottom:14px}.badge-tier-title{text-transform:uppercase;letter-spacing:.05em;color:var(--muted);margin:0 0 8px;font-size:13px}.badge-row{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:8px;display:grid}.gallery-badge{background:var(--panel-on);border:1px solid var(--border);border-radius:8px;flex-direction:column;gap:2px;padding:10px;display:flex}.gallery-badge.earned{border-color:var(--win)}.gallery-badge.locked{opacity:.7}.gb-icon{font-size:22px}.gb-name{font-size:13px;font-weight:700}.gb-desc{color:var(--muted);font-size:11px}.best-meters{border-top:1px solid var(--border);margin-top:16px;padding-top:12px}.meter-row{flex-wrap:wrap;gap:8px;display:flex}.meter-chip{background:var(--panel-on);border:1px solid var(--border);border-radius:8px;flex-direction:column;padding:8px 12px;display:flex}.meter-name{color:var(--muted);font-size:11px}.meter-value{font-size:18px;font-weight:700}.quest-panel{flex-direction:column;gap:8px;display:flex}.quest-item{background:var(--panel-on);border:1px solid var(--border);border-radius:8px;align-items:center;gap:10px;padding:10px;display:flex}.quest-item.done{border-color:var(--win)}.quest-icon{font-size:18px}.quest-name{font-weight:600}.quest-target{color:var(--muted);font-size:12px}.title-panel{flex-direction:column;gap:12px;display:flex}.title-current{flex-wrap:wrap;align-items:center;gap:12px;display:flex}.title-list{flex-direction:column;gap:6px;display:flex}.title-option{background:var(--panel-on);border:1px solid var(--border);color:var(--text);cursor:pointer;text-align:left;border-radius:8px;align-items:center;gap:10px;padding:8px 12px;display:flex}.title-option.locked{opacity:.6;cursor:not-allowed}.title-option.chosen{border-color:var(--win)}.title-opt-icon{font-size:18px}.title-opt-name{font-weight:600}.badge-progress{background:color-mix(in srgb, var(--bg) 60%, transparent);border:1px solid var(--border);border-radius:999px;height:12px;margin-top:6px;position:relative;overflow:hidden}.bp-fill{background:linear-gradient(90deg, color-mix(in srgb, var(--win) 60%, transparent), var(--win));opacity:.85;border-radius:999px;transition:width .2s;position:absolute;inset:0 auto 0 0}.bp-count{letter-spacing:.02em;color:var(--text);text-shadow:0 1px 2px color-mix(in srgb, var(--bg) 70%, transparent);justify-content:center;align-items:center;font-size:9px;font-weight:800;display:flex;position:absolute;inset:0}.quest-count{font-variant-numeric:tabular-nums;color:var(--muted);margin-left:auto;font-size:12px;font-weight:700}.quest-reward{border:1px solid color-mix(in srgb, var(--win) 40%, transparent);color:var(--win);white-space:nowrap;border-radius:999px;padding:2px 8px;font-size:11px;font-weight:700}.weekly-quest{border-top:1px dashed var(--border);margin-top:16px;padding-top:12px}.rank-panel{border:1px solid var(--border-strong);background:linear-gradient(180deg, var(--panel-on), color-mix(in srgb, var(--panel-on) 80%, var(--panel)));border-radius:12px;max-width:560px;margin:14px auto 0;padding:12px 14px}.rank-main{align-items:center;gap:12px;display:flex}.rank-icon{font-size:34px;line-height:1}.rank-txt{flex-direction:column;min-width:0;display:flex}.rank-name{letter-spacing:.5px;font-size:18px;font-weight:800}.rank-rating{color:var(--muted);font-variant-numeric:tabular-nums;font-size:12px}.rank-stats{gap:6px;margin-left:auto;display:flex}.rank-stat{background:color-mix(in srgb, var(--panel) 70%, transparent);border:1px solid var(--border);white-space:nowrap;border-radius:999px;padding:3px 8px;font-size:11px;font-weight:700}.rank-bar{background:color-mix(in srgb, var(--bg) 55%, transparent);border:1px solid var(--border);border-radius:999px;height:8px;margin-top:10px;overflow:hidden}.rank-fill{background:linear-gradient(90deg, var(--team-a-win), var(--win));border-radius:999px;height:100%;transition:width .3s}.rank-hint{color:var(--muted);margin:8px 0 0;font-size:12px}.rank-chip{letter-spacing:.02em;border:1px solid color-mix(in srgb, var(--win) 45%, transparent);background:color-mix(in srgb, var(--win) 12%, transparent);color:var(--win);border-radius:999px;margin-top:6px;padding:3px 10px;font-size:11px;font-weight:700}.style-panel{flex-direction:column;gap:12px;display:flex}.card-backs-title{margin-top:8px}.cosmetic-row{grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:8px;display:grid}.cosmetic-tile{border:1px solid var(--border);background:var(--panel-on);color:var(--text);cursor:pointer;border-radius:10px;flex-direction:column;align-items:center;gap:4px;padding:10px 8px;display:flex;position:relative}.cosmetic-tile.locked{opacity:.55;cursor:not-allowed}.cosmetic-tile.active{border-color:var(--win);box-shadow:0 0 0 1px var(--win) inset}.ct-swatch{border:1px solid var(--border-strong);border-radius:8px;width:52px;height:36px}.cosmetic-tile.theme-ivory .ct-swatch{background:#eaf0e0}.cosmetic-tile.theme-rose .ct-swatch{background:#ecdcd2}.cosmetic-tile.theme-gilded .ct-swatch{background:#efe4c4}.cosmetic-tile.theme-dusk .ct-swatch{background:#252c48}.ct-back{color:#cde6f8;border:1px solid var(--cardback-border);background-color:var(--cardback-bg);border-radius:6px;justify-content:center;align-items:center;width:36px;height:52px;font-size:15px;display:flex}.cosmetic-tile.back-weave .ct-back{--cardback-bg:#153d59;--cardback-border:#2c6886}.cosmetic-tile.back-compass .ct-back{--cardback-bg:#123a5e;--cardback-border:#2f6ba4}.cosmetic-tile.back-crimson .ct-back{--cardback-bg:#6b1f22;--cardback-border:#a34a4e}.cosmetic-tile.back-celestial .ct-back{--cardback-bg:#101c3c;--cardback-border:#3f5cab}.ct-name{text-align:center;font-size:12px;font-weight:700}.ct-active{color:var(--win);font-size:11px;font-weight:800;position:absolute;top:6px;right:6px}@media (prefers-reduced-motion:reduce){.bp-fill,.rank-fill{transition:none}.table:before,.board-center:after{opacity:.6}}.rules-overlay{z-index:3000;background:#00000073;justify-content:center;align-items:center;padding:16px;animation:.18s ease-out rules-fade-in;display:flex;position:fixed;inset:0}@keyframes rules-fade-in{0%{opacity:0}to{opacity:1}}.rules-modal{background:var(--panel);width:min(560px,100%);max-height:min(82vh,720px);color:var(--text);border:1px solid var(--border-strong);border-radius:16px;flex-direction:column;animation:.2s ease-out rules-modal-in;display:flex;overflow:hidden;box-shadow:0 12px 40px #00000073}@keyframes rules-modal-in{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}.rules-header{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:12px 16px;display:flex}.rules-header h2{margin:0;font-size:17px}.rules-close{cursor:pointer;color:var(--muted);background:0 0;border:none;border-radius:8px;padding:4px 8px;font-size:20px;line-height:1}.rules-close:hover{background:var(--panel-on);color:var(--text)}.rules-tabs{gap:8px;padding:10px 16px 0;display:flex}.rules-tab{cursor:pointer;border:1px solid var(--border);background:var(--panel);color:var(--text);border-radius:999px;padding:6px 14px;font-size:13px;font-weight:600}.rules-tab.on{background:var(--win);border-color:var(--win);color:var(--win-text)}.rules-body{padding:6px 20px 16px;font-size:14px;overflow-y:auto}.rules-body h3{text-transform:uppercase;letter-spacing:.05em;color:var(--muted);margin:18px 0 6px;font-size:14px}.rules-body ul,.rules-body ol{flex-direction:column;gap:4px;margin:4px 0;padding-left:20px;display:flex}.rules-intro{margin:12px 0 0}.rules-tip{background:var(--hint-bg);color:var(--hint-text);border:1px solid var(--hint-border);border-radius:10px;margin:4px 0 0;padding:8px 12px}.rules-footer{border-top:1px solid var(--border);text-align:center;padding:10px 16px 14px}.rules-footer a{color:var(--win);font-size:13px;font-weight:600;text-decoration:none}.rules-footer a:hover{text-decoration:underline}@media (prefers-reduced-motion:reduce){.mini-card .cardface{transition:none}.mini-card:not(:disabled):hover .cardface{box-shadow:none;transform:none}.mini-card.playable .cardface{transform:none}.edge.own-hand.my-turn .mini-card.playable .cardface,.edge.my-turn{animation:none}.trick-progress .tp-fill{transition:none}.trick-animate,.trick-entry.winning,.trick-entry.winning.team-1,.trick-entry.win-flash,.trick-entry.win-flash.team-1{animation:none}.trick-pile.trick-lingering{opacity:1;animation:none}.match-trophy,.ach-toast,.rules-overlay,.rules-modal{animation:none}}.kb-sel .cardface{outline:3px solid var(--win);outline-offset:1px;box-shadow:0 0 0 2px var(--card-white), 0 0 14px 4px color-mix(in srgb, var(--win) 60%, transparent);transform:translateY(-3px)}.kb-tip{color:var(--muted);margin:0;font-size:12px}.undo-btn{cursor:pointer;border:1px solid var(--border-strong);background:var(--panel-on);color:var(--text);border-radius:8px;padding:6px 12px;font-size:13px}html.hc:root[data-theme=dark]{--muted:#d7e4d8;--border:#9db89f}html.hc:root[data-theme=light]{--muted:#33473c;--border:#3f6b54}html.hc .cardface{border:2px solid var(--card-ink)}html.hc .cardbacks{border:2px solid var(--cardback-text)}html.hc .mini-card.illegal .cardface{opacity:.6}html.hc .edge.own-hand.my-turn .mini-card.illegal .cardface{opacity:.5}html.hc .track-sub,html.hc .goal-caption,html.hc .seat-dir-full,html.hc .tp-label,html.hc .tp-count,html.hc .round-summary-title,html.hc .match-score{opacity:1}html.hc :focus-visible{outline:3px solid var(--win);outline-offset:2px}html.cb .cardface{position:relative}html.cb .cardface:before{content:"";color:var(--card-ink);z-index:1;font-size:8px;font-weight:800;line-height:1;position:absolute;top:2px;left:3px}html.cb .cardface[data-suit=♠]:before{content:"S"}html.cb .cardface[data-suit=♥]:before{content:"H"}html.cb .cardface[data-suit=♦]:before{content:"D"}html.cb .cardface[data-suit=♣]:before{content:"C"}html.cb .trick-progress.team-0 .tp-fill{background-image:repeating-linear-gradient(135deg,#ffffff59 0 6px,#0000 6px 12px)}html.cb .trick-progress.team-1 .tp-fill{background-color:var(--team-b-win);background-image:radial-gradient(circle,#ffffff80 1px,#0000 1.8px);background-size:9px 9px}html.cb .track-chip.track-won,html.cb .round-score-chip.team-0{background-image:repeating-linear-gradient(135deg,#ffffff40 0 5px,#0000 5px 10px)}html.cb .track-chip.track-lost,html.cb .round-score-chip.team-1{background-image:radial-gradient(circle,#0000002e 1px,#0000 1.8px);background-size:9px 9px}html.cb .edge.team-0{outline-style:double}html.cb .edge.team-1{outline-style:dashed}html.cb .edge.my-turn{outline-width:2px;outline-style:solid}html.cb .cardbacks.team-cb-1{background-image:repeating-linear-gradient(45deg,#ffffff29 0 6px,#0000 6px 12px)}html.size-s .cardface{width:34px;height:49px;font-size:13px}html.size-s .suit-sym{font-size:18px}html.size-s .cardbacks{width:34px;min-height:49px;font-size:12px}html.size-l .cardface{width:56px;height:80px;font-size:19px}html.size-l .suit-sym{font-size:30px}html.size-l .cardbacks{width:56px;min-height:80px;font-size:16px}
