@font-face{font-family:Caveat;src:url(/assets/caveat-D8_1Nw6V.woff2) format("woff2");font-weight:400 700;font-style:normal;font-display:swap}@font-face{font-family:Nunito;src:url(/assets/nunito-BzFMHfZw.woff2) format("woff2");font-weight:200 1000;font-style:normal;font-display:swap}:root{--paper: #fbfaf6;--surface: #ffffff;--ink: #1c2733;--ink-muted: #4a5d70;--ink-faint: #8496a8;--game: #33567f;--game-ink: #24405f;--game-line: #d7e1ec;--game-grid: #e6edf4;--game-soft: #eef3f8;--game-pale: #f6f9fc;--ok: #1f6b3f;--ok-soft: #e4f2e8;--warn: #8c6112;--danger: #b4291f;--danger-soft: #fdecea;--pen-red: #c8323f;--pen-yellow: #c8901f;--pen-green: #2f7c4a;--pen-blue: #394a8b;--radius-sm: 7px;--radius: 11px;--radius-lg: 15px;--tap: 44px;--gap: 12px;--page-pad: 15px;--drop: 3px 3px 0 rgba(28, 39, 51, .09);--drop-sm: 2px 2px 0 rgba(28, 39, 51, .13);--drop-game: 3px 3px 0 rgba(51, 86, 127, .28);--font: Nunito, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--font-hand: Caveat, "Segoe Script", "Bradley Hand", cursive;color-scheme:light}*,*:before,*:after{box-sizing:border-box}html,body{margin:0;padding:0;color:var(--ink);font-family:var(--font);font-size:16px;line-height:1.45;-webkit-text-size-adjust:100%;overflow-x:hidden}body{min-height:100dvh;padding-bottom:env(safe-area-inset-bottom);background:var(--paper)}#root{min-height:100dvh;display:flex;flex-direction:column;background-image:linear-gradient(var(--game-grid) 1px,transparent 1px),linear-gradient(90deg,var(--game-grid) 1px,transparent 1px);background-size:22px 22px;background-attachment:fixed}button,input,select,textarea{font:inherit;color:inherit}button{cursor:pointer}h1,h2,h3{margin:0;line-height:1.1}h1{font-family:var(--font-hand);font-size:2.1rem;font-weight:700;color:var(--game-ink)}h2{font-family:var(--font-hand);font-size:1.5rem;font-weight:700;color:var(--game-ink)}h3{font-size:.95rem;font-weight:800;color:var(--ink-muted)}p{margin:0}:focus-visible{outline:3px solid var(--game);outline-offset:2px;border-radius:3px}.app-header{position:sticky;top:0;z-index:20;display:flex;align-items:center;gap:10px;padding:calc(env(safe-area-inset-top) + 10px) var(--page-pad) 10px;background:var(--paper);border-bottom:2px solid var(--game)}.app-header .brand{display:flex;align-items:center;gap:9px;font-family:var(--font-hand);font-size:1.6rem;font-weight:700;color:var(--game-ink);text-decoration:none;min-height:var(--tap)}.app-header .brand img{width:28px;height:28px;border-radius:7px}.app-header .spacer{flex:1}main{flex:1;width:100%;max-width:760px;margin:0 auto;padding:16px var(--page-pad) 40px}.stack{display:flex;flex-direction:column;gap:var(--gap)}.stack-lg{display:flex;flex-direction:column;gap:18px}.row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.muted{color:var(--ink-muted);font-size:.92rem}.dim{color:var(--ink-faint);font-size:.84rem}.center{text-align:center}.card{background:var(--surface);color:var(--ink);border:2px solid var(--game-line);border-radius:var(--radius-lg);padding:15px 16px;box-shadow:var(--drop)}.card-title{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:11px}.divider{height:2px;background:var(--game-line);border:0;margin:4px 0;border-radius:2px}.tile-grid{display:grid;grid-template-columns:1fr;gap:14px}@media(min-width:560px){.tile-grid{grid-template-columns:1fr 1fr}}.tile{position:relative;display:flex;flex-direction:column;align-items:center;gap:6px;width:100%;min-height:150px;padding:22px 18px 16px;text-align:center;text-decoration:none;color:var(--ink);background:var(--surface);border:2px solid var(--tile-accent, var(--game-line));border-radius:var(--radius-lg);box-shadow:var(--tile-shadow, var(--drop));overflow:hidden;transition:transform .1s ease,box-shadow .1s ease}.tile:after{content:"";position:absolute;inset:0 0 auto;height:7px;background:var(--tile-accent, var(--game))}.tile:active{transform:translate(2px,2px);box-shadow:none}.tile[aria-disabled=true]{opacity:.55;cursor:not-allowed}.tile-logo{display:block;width:auto;max-width:min(100%,260px);height:auto;max-height:80px;object-fit:contain;margin:6px auto 2px}.tile-name{font-family:var(--font-hand);font-size:2rem;font-weight:700;color:var(--tile-accent, var(--game-ink))}.tile-tagline{color:var(--ink-muted);font-size:.94rem}.tile-meta{margin-top:auto;padding-top:10px;display:flex;gap:10px;flex-wrap:wrap;justify-content:center;font-size:.8rem;color:var(--ink-faint)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:var(--tap);padding:11px 18px;border:2px solid var(--game-line);border-radius:var(--radius);background:var(--surface);color:var(--ink);font-weight:800;font-size:.97rem;text-decoration:none;box-shadow:var(--drop-sm);transition:transform .08s ease,box-shadow .08s ease}.btn:active:not(:disabled){transform:translate(2px,2px);box-shadow:none}.btn:disabled{opacity:.45;cursor:not-allowed;box-shadow:none}.btn-primary{background:var(--game);border-color:var(--game);color:#fff;box-shadow:var(--drop-game)}.btn-secondary{background:var(--surface);border-color:var(--game);color:var(--game-ink)}.btn-ghost{background:transparent;border-color:var(--game-line);color:var(--ink-muted);box-shadow:none;font-weight:700}.btn-danger{background:var(--surface);border-color:#b4291f73;color:var(--danger);box-shadow:none}.btn-block{width:100%}.btn-lg{min-height:56px;font-size:1.05rem;border-radius:var(--radius-lg)}.btn-sm{min-height:38px;padding:6px 12px;font-size:.85rem;border-radius:8px}.field{display:flex;flex-direction:column;gap:6px}.field label{font-size:.84rem;font-weight:800;color:var(--ink-muted)}.field input[type=text],.field input[type=number],.field select{min-height:var(--tap);padding:10px 12px;background:var(--surface);color:var(--ink);border:2px solid var(--game-line);border-radius:var(--radius);font-size:16px}.field input:focus,.field select:focus{outline:none;border-color:var(--game)}.field input::placeholder{color:var(--ink-faint)}.field .hint{font-size:.79rem;color:var(--ink-faint)}.field .error{font-size:.83rem;color:var(--danger);font-weight:700}.choice-group{display:grid;gap:8px}.choice{display:flex;gap:11px;align-items:flex-start;min-height:var(--tap);padding:12px 14px;background:var(--game-pale);color:var(--ink);border:2px solid var(--game-line);border-radius:var(--radius);text-align:left;width:100%}.choice[aria-pressed=true]{border-color:var(--game);background:var(--game-soft)}.choice .choice-mark{flex:none;width:21px;height:21px;margin-top:2px;border-radius:50%;border:2px solid var(--game-line);display:grid;place-items:center;font-size:12px;color:#fff}.choice[aria-pressed=true] .choice-mark{border-color:var(--game);background:var(--game)}.choice-body strong{display:block;font-size:.97rem}.choice-body span{display:block;font-size:.84rem;color:var(--ink-muted)}.stepper{display:flex;align-items:center;gap:10px}.stepper button{width:var(--tap);height:var(--tap);border-radius:10px;border:2px solid var(--game);background:var(--surface);color:var(--game-ink);box-shadow:var(--drop-sm);font-size:1.35rem;line-height:1;font-weight:800}.stepper button:disabled{opacity:.35;box-shadow:none}.stepper output{min-width:56px;text-align:center;font-size:1.5rem;font-weight:900;font-variant-numeric:tabular-nums}.badge{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:999px;font-size:.76rem;font-weight:800;background:var(--game-soft);border:1px solid var(--game-line);color:var(--ink-muted);white-space:nowrap}.badge .dot{width:8px;height:8px;border-radius:50%;background:currentColor;flex:none}.badge.online{background:var(--ok-soft);border-color:#1f6b3f52;color:var(--ok)}.badge.offline .dot{opacity:.45}.badge.warn{background:#fdf3e0;border-color:#8c611257;color:var(--warn)}.badge.error{background:var(--danger-soft);border-color:#b4291f52;color:var(--danger)}.conn{position:sticky;top:0;z-index:30;padding:9px 14px;font-size:.87rem;font-weight:800;text-align:center;background:var(--danger-soft);color:#8c201a;border-bottom:2px solid var(--danger)}.conn.reconnecting{background:#fdf3e0;color:#6d4a0c;border-bottom-color:var(--warn)}.player-list{display:flex;flex-direction:column;gap:6px;list-style:none;margin:0;padding:0}.player-row{display:flex;align-items:center;gap:10px;padding:9px 12px;background:var(--game-pale);border:2px solid var(--game-line);border-radius:var(--radius);min-height:var(--tap)}.player-row .seat{flex:none;width:26px;height:26px;display:grid;place-items:center;border-radius:7px;background:var(--surface);border:1px solid var(--game-line);font-size:.8rem;font-weight:900;color:var(--ink-muted)}.player-row .name{flex:1;min-width:0;font-weight:800;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.player-row .tags{display:flex;gap:5px;flex-wrap:wrap;justify-content:flex-end}.player-row.is-you{border-color:var(--game);background:var(--game-soft)}.empty-slot{border-style:dashed;background:transparent;color:var(--ink-faint);justify-content:center;font-size:.89rem}.sheet-wrap{position:relative;width:100%;border-radius:var(--radius);overflow:hidden;background:#e3e3e3;border:2px solid var(--game-line);box-shadow:var(--drop-sm)}.sheet-bg{display:block;width:100%;height:auto}.sheet-layer{position:absolute;inset:0;width:100%;height:100%}.sheet-cell{outline:none}.sheet-cell.is-clickable{cursor:pointer}.sheet-cell:focus-visible>rect:first-of-type{stroke:#1d6fd0;stroke-width:10}.sheet-dead{fill:#737d8c;opacity:.34}.sheet-open{fill:none;stroke:#14171c;stroke-width:5;stroke-dasharray:13 10;opacity:.55}.sheet-cell.is-clickable:active .sheet-open{opacity:1;stroke-width:7}.sheet-cross{pointer-events:none}.sheet-lock.mine{fill:none;stroke-width:9;opacity:.95}.sheet-result{font-family:var(--font);font-size:62px;font-weight:900;fill:#14171c;font-variant-numeric:tabular-nums;pointer-events:none}.sheet-result.big{font-size:78px}.sheet-hint{display:none;align-items:center;gap:8px;padding:9px 12px;border-radius:var(--radius);background:var(--game-pale);border:2px solid var(--game-line);color:var(--ink-muted);font-size:.85rem}@media(orientation:portrait)and (max-width:720px){.sheet-hint{display:flex}}@media(max-width:560px){.sheet-wrap{margin-left:calc(-1 * (var(--page-pad) + 16px));margin-right:calc(-1 * (var(--page-pad) + 16px));width:calc(100% + 2 * (var(--page-pad) + 16px));border-radius:0;border-left:0;border-right:0}}.sheet-credit{font-size:.73rem;color:var(--ink-faint);line-height:1.4}.sheet-credit a{color:var(--ink-muted)}.penalties{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.penalty-box{width:var(--tap);height:var(--tap);border-radius:8px;border:2px dashed var(--game-line);background:var(--surface);color:var(--ink-faint);display:grid;place-items:center;font-size:1.1rem;font-weight:900}.penalty-box.used{border-style:solid;border-color:var(--pen-red);background:#fdecec;color:var(--pen-red)}.score-line{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:11px 13px;border-radius:var(--radius);background:var(--game-pale);border:2px solid var(--game-line)}.score-total{font-size:1.7rem;font-weight:900;font-variant-numeric:tabular-nums}.score-breakdown{display:flex;gap:6px;flex-wrap:wrap;font-size:.79rem;color:var(--ink-muted);font-variant-numeric:tabular-nums}.score-chip{padding:3px 8px;border-radius:5px;background:var(--surface);border:1px solid var(--game-line);border-left:3px solid var(--chip-color, var(--game-line))}.mini-list{display:flex;flex-direction:column;gap:6px}.mini{display:flex;align-items:center;gap:10px;padding:9px 12px;border-radius:var(--radius);background:var(--game-pale);border:2px solid var(--game-line)}.mini .mini-name{flex:1;min-width:0;font-weight:800;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mini .mini-rows{display:flex;gap:4px}.mini .mini-row{width:26px;height:22px;border-radius:4px;display:grid;place-items:center;font-size:.72rem;font-weight:900;color:#14171c;font-variant-numeric:tabular-nums}.mini .mini-total{min-width:42px;text-align:right;font-weight:900;font-variant-numeric:tabular-nums}.player-tabs{display:flex;gap:7px;overflow-x:auto;padding:2px 4px 6px;margin:0 -4px}.player-tab{flex:none;min-height:var(--tap);padding:8px 16px;border-radius:999px;border:2px solid var(--game-line);background:var(--surface);color:var(--ink);box-shadow:var(--drop-sm);font-weight:800;font-size:.9rem;white-space:nowrap}.player-tab[aria-selected=true]{background:var(--game);border-color:var(--game);color:#fff}.result-row{display:flex;align-items:center;gap:12px;padding:11px 13px;border-radius:var(--radius);background:var(--game-pale);border:2px solid var(--game-line)}.result-row.winner{border-color:var(--warn);background:#fdf3e0}.result-rank{flex:none;width:34px;height:34px;border-radius:8px;display:grid;place-items:center;font-weight:900;background:var(--surface);border:2px solid var(--game-line)}.result-row.winner .result-rank{background:var(--warn);border-color:var(--warn);color:#fff}.qr-wrap{display:flex;flex-direction:column;align-items:center;gap:12px}.qr-wrap img{width:min(232px,62vw);height:auto;border-radius:var(--radius-sm);background:#fff;padding:10px;border:2px solid var(--game-line)}.code-display{font-family:ui-monospace,SF Mono,Cascadia Mono,Menlo,monospace;font-size:1.2rem;font-weight:700;letter-spacing:.08em;padding:10px 14px;border-radius:var(--radius-sm);background:var(--game-pale);border:2px dashed var(--game-line);color:var(--ink);text-align:center;word-break:break-all}.modal-backdrop{position:fixed;inset:0;z-index:100;display:grid;place-items:end center;background:#1c273380;padding:16px;padding-bottom:calc(16px + env(safe-area-inset-bottom))}@media(min-width:560px){.modal-backdrop{place-items:center}}.modal{width:100%;max-width:420px;background:var(--surface);color:var(--ink);border:2px solid var(--game);border-radius:var(--radius-lg);padding:20px;box-shadow:5px 5px #1c27332e;display:flex;flex-direction:column;gap:14px}.modal-actions{display:flex;gap:10px}.modal-actions .btn{flex:1}.toast-stack{position:fixed;left:50%;transform:translate(-50%);bottom:calc(16px + env(safe-area-inset-bottom));z-index:200;display:flex;flex-direction:column;gap:8px;width:min(440px,calc(100vw - 24px));pointer-events:none}.toast{padding:11px 14px;border-radius:var(--radius);background:var(--surface);color:var(--ink);border:2px solid var(--game-line);box-shadow:3px 3px #1c273329;font-size:.91rem;font-weight:700;display:flex;gap:9px;align-items:flex-start}.toast.error{background:var(--danger-soft);border-color:var(--danger);color:#8c201a}.toast.success{background:var(--ok-soft);border-color:var(--ok);color:#17512f}.skeleton{border-radius:var(--radius);background:linear-gradient(90deg,var(--game-soft) 25%,var(--surface) 50%,var(--game-soft) 75%);background-size:200% 100%;animation:shimmer 1.3s infinite}@keyframes shimmer{to{background-position:-200% 0}}.state-msg{padding:28px 16px;text-align:center;color:var(--ink-muted);display:flex;flex-direction:column;gap:12px;align-items:center}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.trump-block{position:relative;display:flex;flex-direction:column;gap:1px;padding:13px 17px;border-radius:var(--radius-lg);background:var(--trump, var(--surface));color:#fff;box-shadow:3px 3px #1c273329}.trump-block.is-open{background:var(--surface);color:var(--ink);border:2px dashed var(--game-line);box-shadow:var(--drop-sm)}.trump-block.is-light{color:var(--ink)}.trump-block.is-light .trump-change{border-color:#00000059;background:#fff6;color:var(--ink)}.trump-block .trump-label{font-size:.7rem;font-weight:900;letter-spacing:.16em;text-transform:uppercase;opacity:.88}.trump-block .trump-value{font-family:var(--font-hand);font-size:2.1rem;font-weight:700;line-height:1;color:inherit}.trump-block.is-open .trump-value{font-family:var(--font);font-size:1.02rem;font-weight:700;color:var(--ink-muted)}.trump-block .trump-change{position:absolute;top:11px;right:12px;min-height:34px;padding:5px 13px;border-radius:999px;border:2px solid rgba(255,255,255,.55);background:#00000029;color:#fff;font-size:.8rem;font-weight:800}.trump-row{display:flex;flex-wrap:wrap;gap:8px}.trump-btn{min-height:var(--tap);padding:8px 15px;border-radius:999px;border:2px solid var(--game-line);background:var(--surface);color:var(--ink);box-shadow:var(--drop-sm);font-weight:800;font-size:.89rem}.trump-btn.is-active{background:var(--trump);border-color:var(--trump);color:#fff}.trump-btn.is-active.is-light{color:var(--ink)}.turn-block{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;padding:12px 16px;border-radius:var(--radius-lg);background:var(--surface);color:var(--ink);border:2px solid var(--game-line);box-shadow:var(--drop-sm)}.turn-block.is-you{border-color:var(--game);box-shadow:var(--drop-game)}.turn-block .turn-text{font-size:1.15rem;font-weight:900}.turn-block .turn-meta{display:flex;align-items:center;gap:8px}.dealer-chip{font-size:.79rem;color:var(--ink-faint);white-space:nowrap}.dealer-chip.is-you{color:var(--game-ink);font-weight:800;padding:3px 11px;border-radius:999px;border:1px solid var(--game-line);background:var(--game-soft)}.ask-line{font-family:var(--font-hand);font-size:1.75rem;font-weight:700;text-align:center;color:var(--game-ink)}.bid-order{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:5px;counter-reset:bidder}.bid-row{display:flex;align-items:center;gap:10px;min-height:var(--tap);padding:8px 12px;border-radius:var(--radius);background:var(--game-pale);border:2px solid var(--game-line)}.bid-row.is-current{border-color:var(--game);background:var(--game-soft)}.bid-row.is-waiting{opacity:.55}.bid-row:before{counter-increment:bidder;content:counter(bidder) ".";flex:none;width:19px;color:var(--ink-faint);font-size:.8rem;font-variant-numeric:tabular-nums}.bid-name{flex:1;min-width:0;font-weight:800;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bid-value{flex:none;font-variant-numeric:tabular-nums}.bid-value.done{min-width:34px;text-align:center;font-size:1.15rem;font-weight:900;padding:2px 9px;border-radius:6px;background:var(--surface);border:2px solid var(--game-line)}.bid-value.waiting{color:var(--game-ink);font-weight:900;font-size:.84rem}.bid-value.pending{color:var(--ink-faint);font-size:.84rem}.bid-buttons{display:flex;flex-wrap:wrap;gap:7px}.bid-btn{flex:1 1 auto;min-width:56px;min-height:60px;padding:0 10px;border-radius:var(--radius);border:2px solid var(--game);background:var(--surface);color:var(--ink);box-shadow:var(--drop-game);font-size:1.5rem;font-weight:900;font-variant-numeric:tabular-nums}.bid-btn:active:not(:disabled){background:var(--game);color:#fff;transform:translate(2px,2px);box-shadow:none}.bid-btn.is-blocked{opacity:.38;text-decoration:line-through;border-color:var(--game-line);box-shadow:none}.tricks-hero{display:flex;align-items:baseline;justify-content:center;gap:10px;padding:13px 16px;border-radius:var(--radius-lg);background:var(--surface);color:var(--ink);border:2px solid var(--game-line);box-shadow:var(--drop-sm)}.tricks-hero.is-done{background:var(--ok-soft);border-color:var(--ok)}.tricks-hero .tricks-count{font-size:2.7rem;font-weight:900;line-height:1;font-variant-numeric:tabular-nums;color:var(--game-ink)}.tricks-hero.is-done .tricks-count{display:none}.tricks-hero .tricks-label{color:var(--ink-muted);font-size:.96rem}.tricks-hero.is-done .tricks-label{color:var(--ok);font-weight:800}.win-trick{min-height:76px;font-size:1.25rem;font-weight:900;border-radius:var(--radius-lg);gap:10px}.win-trick.compact{min-height:60px;font-size:1.05rem}.win-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px}.trick-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}.trick-row{display:flex;align-items:center;gap:10px;min-height:54px;padding:8px 12px;border-radius:var(--radius);background:var(--game-pale);border:2px solid var(--game-line)}.trick-row.is-mine{border-color:var(--game);background:var(--game-soft)}.trick-name{flex:1;min-width:0;font-weight:800;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.trick-figures{display:flex;align-items:baseline;gap:6px;font-size:.9rem;font-variant-numeric:tabular-nums}.trick-count{font-size:1.3rem;font-weight:900;min-width:22px;text-align:center}.trick-count.on-target{color:var(--ok)}.trick-plus{flex:none;width:var(--tap);min-height:var(--tap);padding:0;font-size:1.5rem;line-height:1}.trick-badge{flex:none;min-width:46px;height:46px;display:grid;place-items:center;border-radius:10px;font-size:1.35rem;font-weight:900;font-variant-numeric:tabular-nums;background:var(--surface);border:2px solid var(--game-line);color:var(--ink)}.trick-badge.on-target{border-color:var(--ok);background:var(--ok-soft);color:var(--ok)}.trick-badge.over{border-color:var(--pen-red);background:#fdecec;color:var(--pen-red)}.round-score{flex:none;min-width:52px;text-align:right;font-size:1.2rem;font-weight:900;font-variant-numeric:tabular-nums}.round-score.plus{color:var(--ok)}.round-score.minus{color:var(--pen-red)}.board-scroll{overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;margin:0 -4px;padding:0 4px 2px}.board{display:flex;flex-direction:column;gap:8px}.scoreboard{border-collapse:collapse;width:100%;font-variant-numeric:tabular-nums;background:var(--surface)}.scoreboard th,.scoreboard td{border:1px solid var(--game-line);padding:4px 6px;text-align:center;font-size:.8rem;min-width:62px;color:var(--ink)}.scoreboard thead th{position:sticky;top:0;background:var(--game-soft);font-size:.8rem;font-weight:900;color:var(--game-ink);max-width:92px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.scoreboard .rnd{position:sticky;left:0;z-index:1;background:var(--game-soft);min-width:34px;width:34px;color:var(--ink-muted);font-weight:800}.scoreboard tbody tr.is-current .rnd,.scoreboard tbody tr.is-current td{background:var(--game-soft)}.scoreboard tbody tr.is-future td{background:transparent}.scoreboard td.is-you,.scoreboard th.is-you{box-shadow:inset 0 0 0 2px var(--game)}.scoreboard .cellbid{display:block;font-size:.72rem;line-height:1.25}.scoreboard .cellbid.hit{color:var(--ok)}.scoreboard .cellbid.miss{color:var(--pen-red)}.scoreboard .cellbid.open{color:var(--ink-faint)}.scoreboard .celltotal{display:block;font-size:.95rem;font-weight:900}.scoreboard .celltotal.muted-num{color:var(--ink-faint);font-weight:800}.scoreboard tfoot .celltotal.grand{font-size:1.06rem;font-weight:900}.scoreboard tfoot td,.scoreboard tfoot th{background:var(--game-soft)}.paper-seat{padding:10px 12px;border-radius:var(--radius);background:var(--game-pale);border:2px dashed var(--game-line)}.paper-locks{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px}.paper-seat h3{font-family:var(--font-hand);font-size:1.35rem;font-weight:700;color:var(--game-ink)}.score-input{flex:1;min-width:0;min-height:var(--tap);padding:10px 12px;background:var(--surface);color:var(--ink);border:2px solid var(--game-line);border-radius:var(--radius);font-size:16px;font-weight:800;font-variant-numeric:tabular-nums;text-align:center}.score-input:focus{outline:none;border-color:var(--game)}.score-input::placeholder{color:var(--ink-faint);font-weight:400}.entered-row{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:6px 12px;border-radius:var(--radius);background:var(--game-soft);border:2px solid var(--game-line)}.entered-value{font-size:1.9rem;font-weight:900;line-height:1.1;font-variant-numeric:tabular-nums;color:var(--game-ink)}.ender-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(132px,1fr));gap:8px}.trick-badge.waiting{border-style:dashed;color:var(--ink-faint)}.tally{gap:10px}.tally-head{display:flex;align-items:baseline;justify-content:space-between;gap:10px;padding:8px 14px;border-radius:var(--radius);background:var(--game-soft);border:2px solid var(--game-line)}.tally-sum{font-size:2.4rem;font-weight:900;line-height:1;font-variant-numeric:tabular-nums;color:var(--game-ink)}.tally-count{font-size:.88rem;color:var(--ink-muted)}.tally-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:6px}.tally-picked{display:flex;flex-wrap:wrap;align-content:flex-start;gap:5px;min-height:62px;padding:7px;border-radius:var(--radius);background:var(--game-pale);border:2px dashed var(--game-line)}.tally-picked .tally-hint{flex:1;align-self:center;margin:0}.picked-card{--tc: var(--game);--tc-fill: var(--surface);flex:none;width:38px;height:50px;display:grid;place-items:center;padding:0;border-radius:6px;border:2px solid var(--tc);background:var(--tc-fill);color:var(--ink);font-size:1rem;font-weight:900;font-variant-numeric:tabular-nums;box-shadow:var(--drop-sm)}.picked-card:active{transform:translate(2px,2px);box-shadow:none}.tally-card{--tc: var(--game);--tc-fill: var(--surface);min-height:52px;display:grid;place-items:center;padding:4px;border-radius:var(--radius-sm);border:2px solid var(--tc);background:var(--tc-fill);color:var(--ink);font-size:1.25rem;font-weight:900;font-variant-numeric:tabular-nums;box-shadow:var(--drop-sm)}.tally-card:active{transform:translate(2px,2px);box-shadow:none}.tally-card.tc-neg,.picked-card.tc-neg{--tc: #2b3f9e;--tc-fill: #e8eaf8}.tally-card.tc-zero,.picked-card.tc-zero{--tc: #1f7fb0;--tc-fill: #e4f1f9}.tally-card.tc-lo,.picked-card.tc-lo{--tc: #2a7d2f;--tc-fill: #e7f3e7}.tally-card.tc-mid,.picked-card.tc-mid{--tc: #a97a08;--tc-fill: #fbf1d9}.tally-card.tc-hi,.picked-card.tc-hi{--tc: #bf3535;--tc-fill: #fbe8e8}@media(min-width:420px){.tally-grid{grid-template-columns:repeat(8,1fr)}}.title-logo{margin:0}.title-logo img{display:block;margin:0 auto;width:auto;max-width:min(100%,300px);height:auto;max-height:104px;object-fit:contain}.setup-logo,.lobby-logo{display:block;margin:0 auto 2px;width:auto;max-width:min(100%,240px);height:auto;max-height:84px;object-fit:contain}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important}}:root[data-theme=dark]{--paper: #171a1f;--surface: #21252c;--ink: #e9edf2;--ink-muted: #a8b4c2;--ink-faint: #7c8998;--game: #6f93c0;--game-ink: #a9c4e2;--game-line: #333c48;--game-grid: #1f242c;--game-soft: #262d37;--game-pale: #1e232a;--ok: #63c88c;--ok-soft: #1b2f22;--warn: #d9a63c;--danger: #f08a80;--danger-soft: #33201e;--pen-red: #ea6472;--pen-yellow: #e0b04a;--pen-green: #62bd85;--pen-blue: #8b9ae0;--drop: 3px 3px 0 rgba(0, 0, 0, .45);--drop-sm: 2px 2px 0 rgba(0, 0, 0, .45);--drop-game: 3px 3px 0 rgba(111, 147, 192, .3);color-scheme:dark}:root[data-theme=dark] .btn-primary,:root[data-theme=dark] .player-tab[aria-selected=true],:root[data-theme=dark] .choice[aria-pressed=true] .choice-mark{color:#10141a}:root[data-theme=dark] .result-row.winner .result-rank,:root[data-theme=dark] .trump-btn.is-active{color:#10141a}:root[data-theme=dark] .result-row.winner{background:#2f2413}:root[data-theme=dark] .badge.warn{background:#2f2413}:root[data-theme=dark] .penalty-box.used,:root[data-theme=dark] .trick-badge.over{background:#33201e}:root[data-theme=dark] .conn{color:#f6c9c3}:root[data-theme=dark] .conn.reconnecting{background:#2f2413;color:#f0d79b}:root[data-theme=dark] .toast.error{color:#f6c9c3}:root[data-theme=dark] .toast.success{color:#b6e6c9}:root[data-theme=dark] .tally-card.tc-neg,:root[data-theme=dark] .picked-card.tc-neg{--tc: #7f8fdd;--tc-fill: #1e2233}:root[data-theme=dark] .tally-card.tc-zero,:root[data-theme=dark] .picked-card.tc-zero{--tc: #5ba9d4;--tc-fill: #172831}:root[data-theme=dark] .tally-card.tc-lo,:root[data-theme=dark] .picked-card.tc-lo{--tc: #5fb765;--tc-fill: #16271a}:root[data-theme=dark] .tally-card.tc-mid,:root[data-theme=dark] .picked-card.tc-mid{--tc: #d5a63e;--tc-fill: #2b2413}:root[data-theme=dark] .tally-card.tc-hi,:root[data-theme=dark] .picked-card.tc-hi{--tc: #e07070;--tc-fill: #2e1b1b}:root[data-theme=dark] .sheet-wrap{background:#23262b}:root[data-theme=dark] .sheet-dead{fill:#0b0d10;opacity:.55}:root[data-theme=dark] .sheet-open{stroke:#f0f4f8;opacity:.6}:root[data-theme=dark] .sheet-result{fill:#e8ecf1}:root[data-theme=dark] .sheet-cell:focus-visible>rect:first-of-type{stroke:#7fb2f0}:root:not([data-theme=dark]) .tile-logo,:root:not([data-theme=dark]) .title-logo img,:root:not([data-theme=dark]) .setup-logo,:root:not([data-theme=dark]) .lobby-logo{filter:drop-shadow(0 1px 2px rgba(28,39,51,.35))}.theme-toggle{flex:none;width:var(--tap);height:var(--tap);display:grid;place-items:center;border-radius:999px;border:2px solid var(--game-line);background:var(--surface);color:var(--game-ink);font-size:1.15rem;line-height:1;box-shadow:var(--drop-sm)}.theme-toggle:active{transform:translate(2px,2px);box-shadow:none}.modal.scanner{max-width:460px}.scanner-view{position:relative;width:100%;aspect-ratio:1 / 1;border-radius:var(--radius);overflow:hidden;background:#10141a}.scanner-view video{width:100%;height:100%;object-fit:cover;display:block}.scanner-frame{position:absolute;inset:14%;border:3px solid rgba(255,255,255,.9);border-radius:14px;box-shadow:0 0 0 100vmax #00000059}.scanner-hint{position:absolute;inset:auto 0 12px;text-align:center;color:#fff;font-size:.86rem;font-weight:700;text-shadow:0 1px 3px rgba(0,0,0,.6)}
