:root{--bg:#1a1530;--bg-raised:#251d42;--bg-sunken:#120e24;--text:#efecf8;--text-dim:#a99fd4;--accent:#8b6cf0;--accent-strong:#a98bff;--ok:#4ade80;--warn:#fbbf24;--err:#f87171;--border:#3a2f63;--radius:12px;--shadow:0 4px 16px #00000059;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*{box-sizing:border-box}html,body{touch-action:manipulation;overscroll-behavior-y:none;margin:0;padding:0}body{background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased;min-height:100dvh;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;line-height:1.5}#root{flex-direction:column;min-height:100dvh;display:flex}h1,h2,h3{margin:0;line-height:1.2}button{font:inherit;color:inherit;background:var(--bg-raised);border:1px solid var(--border);border-radius:var(--radius);cursor:pointer;touch-action:manipulation;padding:.65rem 1.1rem}button.primary{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:600}button:disabled{opacity:.45;cursor:not-allowed}input,select{font:inherit;color:var(--text);background:var(--bg-sunken);border:1px solid var(--border);border-radius:var(--radius);padding:.6rem .8rem}input:focus-visible,select:focus-visible,button:focus-visible{outline:2px solid var(--accent-strong);outline-offset:1px}.app-shell{width:100%;max-width:560px;padding:0 1rem max(1rem, env(safe-area-inset-bottom));flex-direction:column;flex:1;margin:0 auto;display:flex}.app-header{z-index:40;background:var(--bg);padding:max(1rem, env(safe-area-inset-top)) 1rem 1rem;align-items:center;gap:.6rem;margin:0 -1rem;display:flex;position:sticky;top:0}.app-header .logo{font-size:1.6rem}.app-header h1{flex:1;font-size:1.25rem}.conn-badge{color:var(--text-dim);align-items:center;gap:.35rem;font-size:.75rem;display:inline-flex}.conn-badge .dot{background:var(--err);border-radius:50%;width:8px;height:8px}.conn-badge.online .dot{background:var(--ok)}.conn-badge.connecting .dot{background:var(--warn);animation:1.2s ease-in-out infinite pulse}@keyframes pulse{50%{opacity:.3}}.card{background:var(--bg-raised);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);padding:1.25rem}.reconnect-banner{background:var(--warn);color:#1a1530;text-align:center;border-radius:var(--radius);margin-bottom:1rem;padding:.4rem 1rem;font-size:.85rem;font-weight:600}.error-banner{background:var(--err);color:#1a1530;text-align:center;border-radius:var(--radius);margin-bottom:1rem;padding:.5rem 1rem;font-size:.9rem;font-weight:600}.stack{flex-direction:column;gap:.9rem;display:flex}.app-main{flex-direction:column;flex:1;display:flex}.app-main>.stack,.app-main>.card{width:100%}button.big{width:100%;padding:.9rem 1.2rem;font-size:1.05rem}button.danger{border-color:var(--err);color:var(--err)}.center{text-align:center}.link-btn{color:var(--text-dim);cursor:pointer;background:0 0;border:none;align-self:center;margin-top:.25rem;padding:.5rem;text-decoration:underline}.link-btn:hover{color:var(--text)}.dim{color:var(--text-dim)}.small{font-size:.8rem}.field{flex-direction:column;gap:.35rem;display:flex}.field>span{color:var(--text-dim);font-size:.85rem}.option-group{border:1px solid var(--border);border-radius:var(--radius);flex-direction:column;gap:.5rem;margin:0;padding:.75rem;display:flex}.option-group legend{color:var(--text-dim);padding:0 .35rem;font-size:.85rem}.option{border:1px solid var(--border);border-radius:var(--radius);cursor:pointer;align-items:flex-start;gap:.6rem;padding:.6rem;display:flex}.option.selected{border-color:var(--accent);background:color-mix(in srgb, var(--accent) 12%, transparent)}.option.disabled{opacity:.45;cursor:not-allowed}.option input{margin-top:.3rem}.option span{flex-direction:column;display:flex}.option small{color:var(--text-dim)}.room-code{letter-spacing:.35em;font-variant-numeric:tabular-nums;margin-left:.35em;font-size:2.6rem}.room-code-input{text-transform:uppercase;letter-spacing:.3em;text-align:center;font-size:1.3rem}.qr{border-radius:var(--radius);width:60vw;max-width:240px;margin-top:.5rem}.player-list{flex-direction:column;gap:.4rem;margin:.5rem 0 0;padding:0;list-style:none;display:flex}.player-list li{background:var(--bg-sunken);border-radius:var(--radius);align-items:center;gap:.6rem;padding:.5rem .6rem;display:flex}.presence{background:var(--border);border-radius:50%;flex:none;width:9px;height:9px}.presence.online{background:var(--ok)}.player-name{text-overflow:ellipsis;white-space:nowrap;flex:1;align-items:center;gap:.45rem;min-width:0;display:flex;overflow:hidden}.badge{text-transform:uppercase;letter-spacing:.05em;background:var(--border);color:var(--text-dim);border-radius:999px;padding:.1rem .5rem;font-size:.65rem}.badge.you{background:var(--accent);color:#fff}.reorder{gap:.3rem;display:flex}.reorder button{padding:.25rem .55rem;font-size:.8rem}.reorder .kick{border-color:var(--err);color:var(--err)}.game-topbar{background:var(--bg-raised);border:1px solid var(--border);border-radius:var(--radius);justify-content:space-between;align-items:baseline;gap:.75rem;padding:.5rem .9rem;font-size:.95rem;display:flex}.neg{color:var(--err)}.pos{color:var(--ok)}.number-pad{grid-template-columns:repeat(auto-fill,minmax(52px,1fr));gap:.45rem;display:grid}.number-pad .num{font-variant-numeric:tabular-nums;padding:.8rem 0;font-size:1.15rem}.number-pad .num.selected{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:700}.chip-row{flex-wrap:wrap;gap:.4rem;margin:0;padding:0;list-style:none;display:flex}.chip-row.center-row{justify-content:center}.chip{background:var(--bg-sunken);border:1px solid var(--border);border-radius:999px;padding:.25rem .7rem;font-size:.85rem}.chip.done{border-color:var(--ok)}.chip.turn{border-color:var(--accent-strong);background:color-mix(in srgb, var(--accent) 18%, transparent);font-weight:600}.chip.offline{opacity:.55}.live-hint{color:var(--text-dim)}.host-fallback summary{cursor:pointer;color:var(--text-dim);font-size:.85rem}.host-fallback[open] summary{margin-bottom:.6rem}.small-btn{margin-bottom:.4rem;padding:.35rem .8rem;font-size:.85rem}.reveal-list{flex-direction:column;gap:.4rem;margin:0;padding:0;list-style:none;display:flex}.reveal-list li{background:var(--bg-sunken);border-radius:var(--radius);justify-content:space-between;padding:.5rem .9rem;font-size:1.05rem;display:flex}.reveal-sum{color:var(--warn);font-weight:600}.reveal-sum.even{color:var(--ok)}.own-bid{margin:.2rem 0 .6rem;font-size:4rem;font-weight:800;line-height:1.1}.live-counter{justify-content:center;align-items:center;gap:1.2rem;display:flex}.live-counter button{border-radius:50%;width:64px;height:64px;font-size:1.8rem}.live-value{text-align:center;font-variant-numeric:tabular-nums;min-width:2ch;font-size:2.2rem;font-weight:700}.trump-note{background:var(--bg-sunken);border:1px solid var(--border);border-radius:var(--radius);min-height:1.5rem;padding:.6rem .8rem}.entry-list{flex-direction:column;gap:.4rem;margin:0;padding:0;list-style:none;display:flex}.entry-list li{background:var(--bg-sunken);border-radius:var(--radius);align-items:center;gap:.6rem;padding:.45rem .7rem;display:flex}.entry-list li.missing{border:1px dashed var(--warn)}.stepper{align-items:center;gap:.55rem;display:flex}.stepper button{border-radius:50%;width:38px;height:38px;padding:0;font-size:1.1rem}.stepper strong{text-align:center;min-width:1.6ch}.sum-ok{color:var(--ok);font-weight:600}.sum-warn{color:var(--warn);font-weight:600}.score-table,.edit-table{border-collapse:collapse;font-variant-numeric:tabular-nums;width:100%}.score-table th,.score-table td,.edit-table th,.edit-table td{text-align:right;border-bottom:1px solid var(--border);padding:.45rem .5rem}.score-table th:first-child,.score-table td:first-child,.edit-table th:first-child,.edit-table td:first-child{text-align:left}.score-table tr.me td{background:color-mix(in srgb, var(--accent) 10%, transparent)}.edit-table input{text-align:right;width:4.5rem}.standings{text-align:left;flex-direction:column;gap:.5rem;margin:.5rem 0 0;padding:0;list-style:none;display:flex}.standings li{background:var(--bg-sunken);border-radius:var(--radius);align-items:center;gap:.75rem;padding:.65rem .9rem;font-size:1.1rem;display:flex}.standings li.winner{border:1px solid var(--warn);background:color-mix(in srgb, var(--warn) 12%, transparent)}.standings .rank{min-width:2rem;font-size:1.3rem}.standings strong{margin-left:auto}.scribe-player-row{gap:.45rem;display:flex}.scribe-player-row input{flex:1}.scribe-player-row button{padding:.4rem .75rem}.handover-icon{font-size:3.5rem;line-height:1}.handover h2 strong{color:var(--accent-strong)}.claim-card{border-color:var(--warn);margin-bottom:1rem}.end-actions{margin-top:.5rem}.end-actions summary{cursor:pointer;color:var(--text-dim);text-align:center;padding:.5rem;font-size:.9rem}.end-actions[open] summary{margin-bottom:.6rem}.sheet-btn{padding:.25rem .55rem;font-size:1rem;line-height:1}.sheet-backdrop{z-index:40;background:#0000008c;justify-content:center;align-items:flex-end;display:flex;position:fixed;inset:0}.sheet{border-radius:var(--radius) var(--radius) 0 0;flex-direction:column;width:min(680px,100%);max-height:85dvh;margin:0;display:flex}.sheet-head{justify-content:space-between;align-items:center;margin-bottom:.25rem;display:flex}.sheet-scroll{margin-top:.5rem;overflow:auto}.sheet-table{border-collapse:collapse;font-variant-numeric:tabular-nums;min-width:100%;font-size:.85rem}.sheet-table th,.sheet-table td{border-bottom:1px solid var(--border);text-align:right;white-space:nowrap;padding:.35rem .55rem}.sheet-table th:first-child,.sheet-table td:first-child{text-align:left}.sheet-table .sticky-col{background:var(--bg-raised);position:sticky;left:0}.sheet-table thead th{background:var(--bg-raised);z-index:1;position:sticky;top:0}.totals-row td{border-top:2px solid var(--border);font-size:.95rem}.chip-dot{vertical-align:baseline;border-radius:50%;width:9px;height:9px;display:inline-block}.chart-wrap{position:relative}.chart-wrap svg{touch-action:pan-y;width:100%;height:auto;display:block}.grid-line{stroke:var(--border);stroke-width:1px}.zero-line{stroke:var(--text-dim);stroke-width:1px;stroke-dasharray:3 3}.crosshair{stroke:var(--text-dim);stroke-width:1px}.hover-dot{stroke:var(--bg-raised);stroke-width:2px}.tick-label,.end-label{fill:var(--text-dim);font-size:11px}.end-label{fill:var(--text)}.chart-tooltip{background:var(--bg-sunken);border:1px solid var(--border);border-radius:var(--radius);pointer-events:none;font-variant-numeric:tabular-nums;flex-direction:column;gap:.1rem;padding:.4rem .6rem;font-size:.78rem;display:flex;position:absolute;top:.25rem;left:.25rem}.stats-head{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.75rem;display:flex}.range-toggle{border:1px solid var(--border);border-radius:999px;gap:0;display:flex;overflow:hidden}.range-toggle button{background:0 0;border:none;border-radius:0;padding:.4rem .9rem;font-size:.85rem}.range-toggle button.active{background:var(--accent);color:#fff;font-weight:600}.stats-table td,.stats-table th{font-size:.85rem}.record-row{grid-template-columns:1fr 1fr;gap:.9rem;display:grid}.record-tile{text-align:center;flex-direction:column;gap:.15rem;display:flex}.record-value{font-variant-numeric:tabular-nums;font-size:1.9rem}.recent-games{flex-direction:column;gap:.5rem;margin:.5rem 0 0;padding:0;list-style:none;display:flex}.recent-games li{background:var(--bg-sunken);border-radius:var(--radius);flex-direction:column;gap:.15rem;padding:.5rem .75rem;font-size:.9rem;display:flex}.suit-row{align-items:center;gap:.4rem;display:flex}.suit-dot{background:var(--suit,var(--text-dim));border-radius:3px;flex:none;width:12px;height:12px}.rank-grid{flex:1;grid-template-columns:repeat(13,minmax(0,1fr));gap:3px;display:grid}.rank-grid button{font-variant-numeric:tabular-nums;border-radius:6px;min-width:0;padding:.45rem 0;font-size:.8rem}.rank-grid button.selected{border-color:var(--suit);background:color-mix(in srgb, var(--suit) 28%, transparent);font-weight:700}.special-row{justify-content:space-between;align-items:center;display:flex}.trump-row{flex-wrap:wrap;gap:.4rem;display:flex}.trump-row button{align-items:center;gap:.4rem;padding:.5rem .85rem;display:inline-flex}.trump-row button.selected{border-color:var(--accent);background:color-mix(in srgb, var(--accent) 15%, transparent);font-weight:600}.progress-track{background:var(--bg-sunken);border:1px solid var(--border);border-radius:999px;height:10px;overflow:hidden}.progress-fill{background:var(--accent);height:100%;transition:width .15s linear}.bid-table tr.selectable{cursor:pointer}.bid-table .badge{margin-left:.45rem}.hist{align-items:stretch;gap:2px;height:150px;display:flex}.hist-col{background:0 0;border:none;border-radius:0;flex-direction:column;flex:1;justify-content:flex-end;align-items:center;gap:2px;min-width:0;padding:0;display:flex}.hist-bar{background:color-mix(in srgb, var(--accent) 45%, var(--bg-sunken));border-radius:4px 4px 0 0;width:100%;min-height:2px}.hist-col.target .hist-bar{background:var(--accent)}.hist-val{color:var(--text-dim);white-space:nowrap;font-size:.62rem}.hist-col.target .hist-val{color:var(--text);font-weight:600}.hist-x{color:var(--text-dim);font-variant-numeric:tabular-nums;font-size:.7rem}.hist-hint{min-height:1.2em;margin:.35rem 0 0}.play-card{border:2px solid var(--suit,var(--border));background:var(--bg-sunken);min-width:34px;height:46px;color:var(--suit,var(--text));font-variant-numeric:tabular-nums;border-radius:8px;justify-content:center;align-items:center;padding:0 .3rem;font-size:1.05rem;font-weight:700;display:inline-flex}.play-card.special{border-color:var(--warn);color:var(--warn)}.play-card.special.jester{border-color:var(--text-dim);color:var(--text-dim)}.play-card.back{border-style:dashed;border-color:var(--accent-strong);color:var(--accent-strong)}.hand-row{flex-wrap:wrap;gap:.4rem;display:flex}.hand-card{background:var(--bg-raised);border-radius:10px;padding:.25rem;transition:transform .12s,box-shadow .12s}.hand-card:not(:disabled){border-color:var(--accent);cursor:pointer}.hand-card:not(:disabled):hover{transform:translateY(-6px);box-shadow:0 6px 14px #0000004d}.hand-card:not(:disabled):active{transform:translateY(-2px)}.hand-card:disabled{opacity:.5}.trick-area{padding:.85rem 1rem}.trick-cards{flex-wrap:wrap;gap:.7rem;display:flex}.trick-cards:not(.dimmed) .trick-play{animation:.28s both trick-card-in}@keyframes trick-card-in{0%{opacity:0;transform:translateY(-10px)scale(.92)}to{opacity:1;transform:none}}.trick-cards.dimmed .trick-play{opacity:.5}.trick-cards.dimmed .trick-play.winner{opacity:1}.trick-play.winner .play-card{box-shadow:0 0 0 2px var(--ok), 0 0 12px color-mix(in srgb, var(--ok) 55%, transparent);animation:.4s winner-pop}@keyframes winner-pop{0%{transform:scale(1)}45%{transform:scale(1.14)}to{transform:scale(1)}}.trick-play{flex-direction:column;align-items:center;gap:.15rem;display:flex}.solo-players .chip{white-space:nowrap;align-items:center;gap:.35rem;display:inline-flex}.trump-info{align-items:center;gap:.4rem;display:inline-flex}.trump-info .play-card{min-width:26px;height:34px;font-size:.85rem}.confetti{pointer-events:none;z-index:50;position:fixed;inset:0;overflow:hidden}.confetti span{border-radius:2px;animation:linear forwards confetti-fall;position:absolute;top:-20px}@keyframes confetti-fall{0%{opacity:1;transform:translateY(-20px)rotate(0)}85%{opacity:1}to{opacity:0;transform:translateY(105vh)rotate(540deg)}}
