.sp{--card-w:56px;--trick-w:50px;--felt-a:#e7ecdc;--felt-b:#d3ddc2;--felt-c:#b9c8a6;--rail:#b3955b;--rail-hi:#d8bd85;--badge-bg:#fbf8ee;--badge-ink:#26332a;--badge-muted:#4f5b4f;--badge-line:#cfd6bf;--accent:#d79b1f;--weave:#fff;container-type:inline-size}.sp.sp-table-midnight{--felt-a:#2c4569;--felt-b:#1d3150;--felt-c:#13213a;--rail:#6e5a35;--rail-hi:#a88a52;--badge-bg:#0f1a2c;--badge-ink:#f2ecd9;--badge-muted:#c4cbd6;--badge-line:#34496a;--accent:#f2c14e;--weave:#9fb6d9}.sp.sp-table-clubhouse{--felt-a:#2f6a4c;--felt-b:#215239;--felt-c:#153827;--rail:#7a5a2c;--rail-hi:#b78f4e;--badge-bg:#10291d;--badge-ink:#f4eed5;--badge-muted:#c9d6c4;--badge-line:#2f5a43;--accent:#f0c552;--weave:#a9d1b5}.sp.sp-table-claret{--felt-a:#6c3043;--felt-b:#522232;--felt-c:#371522;--rail:#6a4a2a;--rail-hi:#b48c55;--badge-bg:#2a0f19;--badge-ink:#f7eadf;--badge-muted:#dcc6c9;--badge-line:#6d3646;--accent:#f0c15c;--weave:#e2a7b6}.sp.sp-table-walnut{--felt-a:#f6eedb;--felt-b:#ecdfc2;--felt-c:#dcc8a0;--rail:#6b4a2e;--rail-hi:#9a7350;--badge-bg:#fffaf0;--badge-ink:#33261a;--badge-muted:#5d4c3b;--badge-line:#d9c7a4;--accent:#b97a17;--weave:#8a6236}.sp-felt{isolation:isolate;border:5px solid var(--rail);background:radial-gradient(ellipse at 50% 42%, var(--felt-a), var(--felt-b) 58%, var(--felt-c));box-shadow:inset 0 0 0 1px var(--rail-hi), inset 0 0 70px #00000029, 0 12px 28px #2a200c29;color:var(--badge-ink);border-radius:24px;grid-template-columns:repeat(3,minmax(0,1fr));grid-template-areas:"west north east""center center center""you you you";gap:10px 8px;padding:12px 8px 10px;display:grid;position:relative}.sp-grain{z-index:-1;border-radius:inherit;opacity:.08;pointer-events:none;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 160 160' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.8' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Cpath filter='url(%23n)' d='M0 0h160v160H0z'/%3E%3C/svg%3E");position:absolute;inset:0}.sp-felt button{-webkit-tap-highlight-color:transparent}.sp-seat{border:1px solid var(--badge-line);background:var(--badge-bg);min-width:0;color:var(--badge-ink);--stat-bg:color-mix(in srgb, var(--badge-ink) 8%, var(--badge-bg));border-radius:16px;grid-template-columns:auto minmax(0,1fr);grid-template-areas:"avatar head""stats stats";align-self:start;align-items:center;gap:5px 7px;padding:6px 7px 7px;line-height:1.2;transition:border-color .2s,box-shadow .2s;display:grid;position:relative;box-shadow:0 2px 6px #0000001f}.sp-seat.is-turn{border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb, var(--accent) 45%, transparent), 0 2px 10px #0000002e}.sp-seat.is-winner{border-color:var(--accent);box-shadow:0 0 0 4px color-mix(in srgb, var(--accent) 60%, transparent), 0 0 24px color-mix(in srgb, var(--accent) 55%, transparent)}.sp-seat-west{grid-area:west}.sp-seat-north{grid-area:north}.sp-seat-east{grid-area:east}.sp-avatar{grid-area:avatar;width:32px;height:32px}.sp-avatar-disc{fill:#f3ead0;stroke:var(--rail-hi);stroke-width:1.2px}.sp-seat-head{grid-area:head;min-width:0;display:grid}.sp-seat-name{text-overflow:ellipsis;white-space:nowrap;font-size:.86rem;font-weight:700;overflow:hidden}.sp-seat-role{letter-spacing:.1em;text-transform:uppercase;color:var(--badge-muted);font-size:.6rem;font-weight:700}.sp-stats{grid-area:stats;grid-template-columns:1fr 1fr;gap:4px;display:grid}.sp-stat{background:var(--stat-bg);border:1px solid #0000;border-radius:8px;justify-content:space-between;align-items:baseline;gap:3px;min-width:0;padding:2px 5px;transition:background-color .25s,border-color .25s;display:flex}.sp-stat small{letter-spacing:.05em;text-transform:uppercase;color:var(--badge-muted);font-size:.58rem;font-weight:700}.sp-stat b{font-variant-numeric:tabular-nums;white-space:nowrap;font-size:.95rem;animation:.26s ease-out sp-pop}.sp-stat.is-nil b{font-size:.8rem}.sp-stat-won.is-made{border-color:var(--accent);background:color-mix(in srgb, var(--accent) 26%, var(--badge-bg))}.sp-stat-won.is-broken{background:color-mix(in srgb, #c2453c 22%, var(--badge-bg));border-color:#c2453c}@keyframes sp-pop{0%{color:var(--accent);scale:1.45}}.sp-callout{z-index:3;letter-spacing:.02em;white-space:nowrap;border:2px solid var(--badge-bg);pointer-events:none;border-radius:999px;width:max-content;height:max-content;margin:auto;padding:4px 12px;font-size:.88rem;font-weight:800;animation:1.8s ease-out both sp-callout;position:absolute;inset:0;rotate:-4deg;box-shadow:0 6px 16px #00000047}.sp-callout.is-good{background:var(--gold);color:var(--on-gold)}.sp-callout.is-bad{color:#fff8f0;background:#b5372f}@keyframes sp-callout{0%{opacity:0;scale:1.8}12%{opacity:1;scale:.94}20%{scale:1}85%{opacity:1;translate:0}to{opacity:0;translate:0 -8px}}.sp-dealer{box-shadow:0 0 0 2px var(--badge-bg);background:var(--badge-ink);width:18px;height:18px;color:var(--badge-bg);border-radius:50%;place-items:center;font-size:.62rem;font-weight:800;display:inline-grid;position:absolute;top:-7px;left:-7px}.sp-fan{display:none}.sp-fan-count{border:2px solid var(--badge-bg);background:var(--badge-ink);min-width:22px;height:22px;color:var(--badge-bg);border-radius:999px;place-items:center;padding:0 5px;font-size:.7rem;font-weight:800;display:grid;position:absolute;bottom:-6px;right:-10px}.sp-center{min-height:calc(var(--trick-w) * 1.43 * 2.3 + 16px);grid-area:center;place-items:center;padding:4px 0;display:grid;position:relative}.sp-trick{--spread:1.25;width:min(100%, calc(var(--trick-w) * (2 * var(--spread) + 1.2)));height:calc(var(--trick-w) * 1.43 * 2.3);position:relative}.sp-trick>.sp-played{--h:calc(var(--trick-w) * 1.43);width:var(--trick-w);height:var(--h);transition:translate .24s ease-in,opacity .24s ease-in,box-shadow .2s;animation:.2s ease-out both sp-in;position:absolute}.sp-played-south{left:calc(50% - var(--trick-w) / 2);--from:0 26px;bottom:0}.sp-played-north{left:calc(50% - var(--trick-w) / 2);--from:0 -26px;top:0}.sp-played-west{left:calc(50% - var(--trick-w) * (.5 + var(--spread)));top:calc(50% - var(--h) / 2);--from:-26px 0}.sp-played-east{left:calc(50% + var(--trick-w) * (var(--spread) - .5));top:calc(50% - var(--h) / 2);--from:26px 0}@keyframes sp-in{0%{translate:var(--from);opacity:0}}.sp-played.is-winning{box-shadow:0 0 0 3px var(--accent), 0 4px 10px #00000040}.sp-trick.is-sweeping .sp-played{opacity:0}.sp-trick.toward-south .sp-played{translate:0 90px}.sp-trick.toward-north .sp-played{translate:0 -90px}.sp-trick.toward-west .sp-played{translate:-110px}.sp-trick.toward-east .sp-played{translate:110px}.sp-trump{border:1px solid var(--line-strong);color:var(--muted);border-radius:999px;align-items:center;gap:4px;padding:1px 9px;font-size:.75rem;transition:border-color .3s,box-shadow .3s;display:inline-flex}.sp-trump>span{color:var(--ink);font-size:.95rem;line-height:1.2}.sp-trump.is-broken{border-color:var(--gold-line);color:var(--ink);animation:.3s ease-out sp-shimmer}@keyframes sp-shimmer{0%{box-shadow:0 0 0 6px color-mix(in srgb, var(--gold) 60%, transparent)}}.sp-panel,.sp-waiting{border:1px solid var(--badge-line);background:var(--badge-bg);width:min(100%,470px);color:var(--badge-ink);text-align:center;border-radius:18px;padding:14px 16px;box-shadow:0 6px 18px #00000029}.sp-waiting{width:auto;padding:10px 18px}.sp-panel h2{font-family:var(--font-accent);margin:0 0 4px;font-size:1.12rem;line-height:1.25}.sp-panel p,.sp-waiting p{color:var(--badge-ink);margin:0 0 10px;font-size:.86rem}.sp-waiting p{margin:0}.sp-waiting .sp-actions{margin-top:10px}.sp-actions{flex-wrap:wrap;justify-content:center;gap:8px;display:flex}.sp-bid-context{color:var(--badge-muted)}.sp-bid-grid{flex-wrap:wrap;justify-content:center;gap:6px;max-width:420px;margin:0 auto 10px;display:flex}.sp-bid-value{border:1px solid var(--badge-line);background:var(--badge-bg);min-width:44px;min-height:44px;color:var(--badge-ink);font:inherit;font-variant-numeric:tabular-nums;cursor:pointer;border-radius:12px;padding:0 6px;font-weight:700;transition:background-color .15s,border-color .15s,box-shadow .15s}.sp-bid-value.is-nil{min-width:58px}.sp-bid-value.is-chosen{border-color:var(--gold-line);background:var(--gold);color:var(--on-gold);box-shadow:0 2px 8px #0000002e}.sp-bid-value:focus-visible,.sp-card-button:focus-visible{outline:3px solid var(--focus);outline-offset:2px}@media (hover:hover) and (pointer:fine){.sp-bid-value:not(.is-chosen):hover{border-color:var(--accent)}}.sp-suggest{font-size:.82rem}.sp-bid-confirm{min-width:160px}.sp-card{width:var(--card-w);height:calc(var(--card-w) * 1.43);border-radius:clamp(5px, calc(var(--card-w) * .1), 9px);color:#263d37;user-select:none;background:#fffdf3;border:1px solid #ddd4b6;flex:none;padding:0;font-family:DM Sans,sans-serif;line-height:1;display:block;position:relative;box-shadow:0 2px 4px #101e1447,inset 0 1px #fffef9}.sp-played,.sp-card-small{--card-w:var(--trick-w)}.sp .suit-hearts,.sp .suit-diamonds,.sp .suit-joker-big{color:#b33c36}.sp.four-color .suit-diamonds{color:#22609b}.sp.four-color .suit-clubs{color:#35743f}.sp-card-back{background:#f6edcf;padding:3px}.sp-mini-back{background:#f6edcf;border-radius:4px;width:22px;height:31px;padding:1px;display:block;box-shadow:0 1px 2px #0000004d}.sp-mini-back .card-back-art{border-radius:3px}.sp-you{grid-area:you;justify-items:center;gap:8px;min-width:0;display:grid}.sp-you-row{justify-content:center;align-items:center;gap:10px;width:100%;display:flex}.sp-tool,.sp-tool-spacer{flex:none;min-width:44px}.sp-tool{border:1px solid var(--badge-line);background:var(--badge-bg);min-height:44px;color:var(--badge-ink);font:inherit;white-space:nowrap;cursor:pointer;border-radius:999px;justify-content:center;align-items:center;gap:6px;padding:0 11px;font-size:.82rem;font-weight:600;transition:border-color .15s,box-shadow .15s;display:inline-flex;box-shadow:0 2px 6px #0000001f}.sp-tool:disabled{color:var(--badge-muted);cursor:default;box-shadow:none}.sp-tool:focus-visible{outline:3px solid var(--focus);outline-offset:2px}@media (hover:hover) and (pointer:fine){.sp-tool:not(:disabled):hover{border-color:var(--accent)}}.sp-tool-label{display:none}.sp-hand{width:100%;min-height:calc(var(--card-w) * 1.43);flex-direction:column;align-items:center;padding-top:12px;display:flex;container-type:inline-size}.sp-hand.is-hidden{flex-direction:row;justify-content:center}.sp-hand.is-hidden .sp-card+.sp-card{margin-left:calc(var(--card-w) * -.72)}.sp-hand-row{justify-content:center;max-width:100%;display:flex}.sp-hand-row+.sp-hand-row{margin-top:calc(var(--card-w) * -.62)}.sp-hand-row>.sp-card+.sp-card{margin-left:min(calc(var(--card-w) * -.2), calc((100cqw - var(--card-w) * var(--n-row)) / max(1, var(--n-row) - 1)))}.sp-card-button{cursor:pointer;transition:box-shadow .15s,background-color .15s,border-color .15s}.sp-hand .sp-card-button.is-dim{color:#5d6a64;cursor:not-allowed;background:#ddd7c6;border-color:#c2b89c;box-shadow:0 1px 2px #101e1433}.sp .sp-hand .is-dim:is(.suit-hearts,.suit-diamonds,.suit-joker-big){color:#94605b}.sp-hand.is-turn .sp-card-button:not(.is-dim,.is-lifted){border-color:var(--accent);box-shadow:0 0 0 2px color-mix(in srgb, var(--accent) 70%, transparent), 0 3px 6px #101e1447}.sp-card-button.is-lifted{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent), 0 8px 14px #0000004d;top:-12px}@media (hover:hover) and (pointer:fine){.sp-card-button:not(.is-dim):hover{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent), 0 6px 12px #00000040}}.sp-card-button:focus-visible{z-index:1}.sp-message{min-height:1.6em;color:var(--ink);text-align:center;margin:10px 0 0;font-size:.92rem}.sp-scores{font-variant-numeric:tabular-nums;flex-wrap:wrap;align-items:baseline;gap:6px 14px;display:flex}.sp-score{align-items:baseline;gap:6px;display:inline-flex}.sp-score small{letter-spacing:.12em;text-transform:uppercase;color:var(--muted);font-size:.68rem;font-weight:700}.sp-score b{color:var(--ink);font-size:1.15rem}.sp-score i{color:var(--muted);font-size:.75rem;font-style:normal}.sp-score-target{color:var(--muted);font-size:.75rem}.sp-sheet{gap:14px;display:grid}.sp-sheet-table{border-collapse:collapse;font-variant-numeric:tabular-nums;width:100%;font-size:.88rem}.sp-sheet-table caption{text-align:left;color:var(--ink);margin-bottom:4px;font-weight:700}.sp-sheet-table th,.sp-sheet-table td{border-bottom:1px solid var(--line);text-align:left;color:var(--ink);padding:5px 8px}.sp-sheet-table td small{color:var(--muted)}.sp-sheet-table thead th{letter-spacing:.08em;text-transform:uppercase;color:var(--muted);font-size:.75rem}.sp-sheet-table .is-loss{color:var(--danger)}.sp-sheet-total th,.sp-sheet-total td{border-bottom:0;font-weight:700}.sp-last{gap:8px;margin:0;padding:0;list-style:none;display:grid}.sp-last li{color:var(--ink);border-radius:12px;align-items:center;gap:12px;padding:6px;display:flex}.sp-last li.is-winner{background:var(--olive);box-shadow:inset 0 0 0 2px var(--gold-line)}.sp-card-small{--trick-w:40px}.sp-choice{border:0;margin:0 0 14px;padding:0}.sp-choice legend{color:var(--ink);margin-bottom:6px;font-weight:700}.sp-choice-row{grid-template-columns:repeat(auto-fit,minmax(110px,1fr));gap:8px;display:grid}.sp-choice-row button{border:1px solid var(--line-strong);background:var(--white);min-height:44px;color:var(--ink);font:inherit;text-align:left;cursor:pointer;border-radius:12px;gap:2px;padding:8px 10px;display:grid}.sp-choice-row button span{color:var(--muted);font-size:.78rem}.sp-choice-row button[aria-pressed=true]{border-color:var(--gold-line);background:var(--gold);color:var(--on-gold)}.sp-choice-row button[aria-pressed=true] span{color:var(--on-gold)}.sp-rules{gap:4px;display:grid}.sp-rules label{min-height:44px;color:var(--ink);cursor:pointer;align-items:flex-start;gap:10px;padding:6px 4px;display:flex}.sp-rules input{width:20px;height:20px;accent-color:var(--leaf);margin-top:2px}.sp-rules span{display:grid}.sp-rules small{color:var(--muted);font-size:.8rem}.sp-rules label.is-off{cursor:not-allowed}.sp-swatch{border:3px solid var(--rail);background:radial-gradient(circle at 40% 35%, var(--felt-a), var(--felt-c));border-radius:9px;width:56px;height:32px;display:block}.sp-swatch.sp-table-parlor{--felt-a:#e7ecdc;--felt-c:#b9c8a6;--rail:#b3955b}.sp-swatch.sp-table-midnight{--felt-a:#2c4569;--felt-c:#13213a;--rail:#6e5a35}.sp-swatch.sp-table-clubhouse{--felt-a:#2f6a4c;--felt-c:#153827;--rail:#7a5a2c}.sp-swatch.sp-table-claret{--felt-a:#6c3043;--felt-c:#371522;--rail:#6a4a2a}.sp-swatch.sp-table-walnut{--felt-a:#f6eedb;--felt-c:#dcc8a0;--rail:#6b4a2e}.sp-back-preview{background:#fffdf2;border:1px solid #d9cfb3;border-radius:5px;width:42px;height:60px;padding:2px;display:block}@container (width<=359px){.sp-seat:not(.sp-seat-south){grid-template-columns:minmax(0,1fr);grid-template-areas:"head""stats"}.sp-stat{padding-inline:4px}.sp-seat:not(.sp-seat-south) .sp-avatar{display:none}}@container (width>=400px){.sp-felt{--card-w:60px;--trick-w:54px}.sp-avatar{width:36px;height:36px}}@container (width>=640px){.sp-felt{--card-w:78px;--trick-w:64px;grid-template-columns:minmax(150px,1fr) minmax(0,2.2fr) minmax(150px,1fr);grid-template-areas:".north.""west center east""you you you";gap:10px 14px;padding:18px 20px 14px}.sp-seat{grid-template-areas:"avatar head""avatar stats";gap:5px 10px;min-width:200px;padding:8px 12px 8px 8px}.sp-stat{padding:3px 8px}.sp-stat small{font-size:.62rem}.sp-stat b{font-size:1.05rem}.sp-callout{font-size:1rem}.sp-tool-label{display:inline}.sp-seat-west,.sp-seat-east{align-self:center}.sp-trick{--spread:1.7}.sp-seat-north{justify-self:center}.sp-seat-name{font-size:1rem}.sp-avatar{width:52px;height:52px}.sp-fan{pointer-events:none;justify-content:center;width:max-content;margin-inline:auto;display:flex;position:absolute;bottom:calc(100% + 8px);left:0;right:0}.sp-mini-back{width:32px;height:45px}.sp-mini-back+.sp-mini-back{margin-left:-23px}.sp-seat-north{margin-top:58px}.sp-seat-west .sp-fan,.sp-seat-east .sp-fan{top:calc(100% + 10px);bottom:auto}.sp-hand{flex-direction:row;justify-content:center}.sp-hand-row{display:contents}.sp-hand>.sp-hand-row>.sp-card+.sp-card,.sp-hand>.sp-hand-row+.sp-hand-row>.sp-card:first-child{margin-left:min(calc(var(--card-w) * -.3), calc((100cqw - var(--card-w) * var(--n-all)) / max(1, var(--n-all) - 1)))}.sp-hand-row+.sp-hand-row{margin-top:0}}@container (width>=880px){.sp-felt{--card-w:90px;--trick-w:72px}.sp-mini-back{width:36px;height:50px}.sp-mini-back+.sp-mini-back{margin-left:-26px}.sp-seat-north{margin-top:64px}}@container game (height>=640px) and (width<=639px){.sp-felt{--card-w:66px;--trick-w:60px;grid-template-rows:auto 1fr auto;min-height:calc(100cqh - 4.5rem)}}@container game (height<=639px) and (orientation:portrait){.sp-felt{gap:6px 8px;padding-top:8px}.sp-hand{padding-top:4px}.sp-panel{padding:8px}.sp-panel h2{font-size:1rem}.sp-bid-context{display:none}.sp-bid-grid{gap:3px;margin-bottom:6px}.sp-bid-value.is-nil{min-width:44px}.sp-suggest{margin-bottom:6px;font-size:.76rem}}@container game (height<=430px) and (orientation:landscape){.sp-felt{--card-w:50px;--trick-w:40px;border-width:4px;border-radius:18px;grid-template-columns:repeat(3,minmax(0,1fr));grid-template-areas:"west north east""center center center""you you you";gap:4px 10px;padding:6px 8px}.sp-fan,.sp-seat-role{display:none}.sp-seat{grid-template-columns:auto auto auto;grid-template-areas:"avatar head stats";gap:6px;min-width:0;padding:4px 6px 4px 5px}.sp-stats{grid-template-columns:auto auto}.sp-seat-north{margin-top:0}.sp-seat-west,.sp-seat-east,.sp-seat-north{place-self:start center}.sp-avatar{width:30px;height:30px}.sp-center{min-height:0;padding:0}.sp-trick{--spread:2.3;height:calc(var(--trick-w) * 1.43 * 1.75)}.sp-you{justify-content:center;align-items:flex-end;gap:8px;display:flex}.sp-you-row{gap:6px;width:auto}.sp-tool-label{display:none}.sp-hand{flex-direction:row;flex:1;justify-content:center;min-width:0;padding-top:6px}.sp-hand-row{display:contents}.sp-hand>.sp-hand-row>.sp-card+.sp-card,.sp-hand>.sp-hand-row+.sp-hand-row>.sp-card:first-child{margin-top:0;margin-left:min(calc(var(--card-w) * -.12), calc((100cqw - var(--card-w) * var(--n-all)) / max(1, var(--n-all) - 1)))}.sp-panel{width:min(100%,800px);padding:8px 12px}.sp-panel h2{font-size:1rem}.sp-panel p{margin-bottom:6px;font-size:.8rem}.sp-bid-context{display:none}.sp-bid{flex-wrap:wrap;justify-content:center;align-items:center;column-gap:10px;display:flex}.sp-bid h2{width:100%}.sp-bid-grid{gap:3px;max-width:none;margin:0}.sp-bid-value,.sp-bid-value.is-nil{min-width:44px;padding:0 4px}.sp-bid .sp-suggest{order:3;width:100%;margin:4px 0 0}.sp-bid-confirm{min-width:0}}@media (prefers-reduced-motion:reduce){.sp-callout,.sp-stat b,.sp-played,.sp-trump.is-broken{animation:none}.sp-played,.sp-seat,.sp-card-button,.sp-bid-value,.sp-trump{transition:none}.sp-trick.is-sweeping .sp-played{translate:none}}
