:root{--bg: #0e1013;--bg-elevated: #171a1f;--bg-elevated-2: #1e222a;--surface-border: #2a2f39;--text: #eef1f5;--text-muted: #a3adbb;--text-dim: #6f7a89;--accent: #e4572e;--accent-soft: rgba(228, 87, 46, .16);--ok: #3fa86a;--warn: #e8b22a;--danger: #e05252;--info: #3a86d6;--qwixx-red: #e4572e;--qwixx-yellow: #e8b22a;--qwixx-green: #3fa86a;--qwixx-blue: #3a86d6;--radius-sm: 8px;--radius: 14px;--radius-lg: 20px;--tap: 44px;--gap: 12px;--page-pad: 14px;--shadow: 0 8px 24px rgba(0, 0, 0, .35);--font: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;color-scheme:dark}*,*:before,*:after{box-sizing:border-box}html,body{margin:0;padding:0;background:var(--bg);color:var(--text);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)}#root{min-height:100dvh;display:flex;flex-direction:column}button,input,select,textarea{font:inherit;color:inherit}button{cursor:pointer}h1,h2,h3{margin:0;line-height:1.2;letter-spacing:-.015em}h1{font-size:1.6rem;font-weight:700}h2{font-size:1.15rem;font-weight:650}h3{font-size:.95rem;font-weight:600}p{margin:0}:focus-visible{outline:3px solid var(--info);outline-offset:2px;border-radius:4px}.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:#0e1013eb;backdrop-filter:blur(8px);border-bottom:1px solid var(--surface-border)}.app-header .brand{display:flex;align-items:center;gap:9px;font-weight:650;letter-spacing:-.01em;color:var(--text);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:20px}.row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.muted{color:var(--text-muted);font-size:.9rem}.dim{color:var(--text-dim);font-size:.82rem}.center{text-align:center}.card{background:var(--bg-elevated);border:1px solid var(--surface-border);border-radius:var(--radius-lg);padding:16px}.card-title{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:12px}.tile-grid{display:grid;grid-template-columns:1fr;gap:var(--gap)}@media(min-width:560px){.tile-grid{grid-template-columns:1fr 1fr}}.tile{position:relative;display:flex;flex-direction:column;gap:6px;width:100%;min-height:132px;padding:18px;text-align:left;text-decoration:none;color:var(--text);background:var(--bg-elevated);border:1px solid var(--surface-border);border-radius:var(--radius-lg);overflow:hidden;transition:transform .12s ease,border-color .12s ease}.tile:after{content:"";position:absolute;inset:0 0 auto;height:5px;background:var(--tile-accent, var(--accent))}.tile:active{transform:scale(.985)}.tile[aria-disabled=true]{opacity:.55;cursor:not-allowed}.tile-name{font-size:1.35rem;font-weight:700;letter-spacing:-.02em}.tile-tagline{color:var(--text-muted);font-size:.92rem}.tile-meta{margin-top:auto;display:flex;gap:8px;flex-wrap:wrap;font-size:.8rem;color:var(--text-dim)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:var(--tap);padding:11px 18px;border:1px solid transparent;border-radius:var(--radius);background:var(--bg-elevated-2);color:var(--text);font-weight:600;font-size:.97rem;text-decoration:none;transition:filter .12s ease,transform .08s ease}.btn:active:not(:disabled){transform:scale(.98)}.btn:disabled{opacity:.45;cursor:not-allowed}.btn-primary{background:var(--accent);color:#fff}.btn-secondary{background:var(--bg-elevated-2);border-color:var(--surface-border)}.btn-ghost{background:transparent;border-color:var(--surface-border);color:var(--text-muted)}.btn-danger{background:transparent;border-color:#e0525280;color:#f0a0a0}.btn-block{width:100%}.btn-lg{min-height:56px;font-size:1.05rem;border-radius:var(--radius-lg)}.btn-sm{min-height:38px;padding:7px 12px;font-size:.85rem;border-radius:10px}.field{display:flex;flex-direction:column;gap:6px}.field label{font-size:.85rem;font-weight:600;color:var(--text-muted)}.field input[type=text],.field input[type=number],.field select{min-height:var(--tap);padding:10px 12px;background:var(--bg);border:1px solid var(--surface-border);border-radius:var(--radius);font-size:16px}.field .hint{font-size:.78rem;color:var(--text-dim)}.field .error{font-size:.82rem;color:#f0a0a0}.choice-group{display:grid;gap:8px}.choice{display:flex;gap:11px;align-items:flex-start;min-height:var(--tap);padding:12px 14px;background:var(--bg);border:1px solid var(--surface-border);border-radius:var(--radius);text-align:left;width:100%}.choice[aria-pressed=true]{border-color:var(--accent);background:var(--accent-soft)}.choice .choice-mark{flex:none;width:20px;height:20px;margin-top:2px;border-radius:50%;border:2px solid var(--surface-border);display:grid;place-items:center;font-size:12px;color:#fff}.choice[aria-pressed=true] .choice-mark{border-color:var(--accent);background:var(--accent)}.choice-body strong{display:block;font-size:.97rem}.choice-body span{display:block;font-size:.83rem;color:var(--text-muted)}.stepper{display:flex;align-items:center;gap:10px}.stepper button{width:var(--tap);height:var(--tap);border-radius:12px;border:1px solid var(--surface-border);background:var(--bg-elevated-2);font-size:1.3rem;line-height:1}.stepper output{min-width:56px;text-align:center;font-size:1.4rem;font-weight:700;font-variant-numeric:tabular-nums}.badge{display:inline-flex;align-items:center;gap:6px;padding:4px 9px;border-radius:999px;font-size:.76rem;font-weight:600;background:var(--bg-elevated-2);border:1px solid var(--surface-border);color:var(--text-muted);white-space:nowrap}.badge .dot{width:8px;height:8px;border-radius:50%;background:var(--text-dim);flex:none}.badge.online .dot{background:var(--ok)}.badge.offline .dot{background:var(--text-dim)}.badge.warn{color:#f3d38a;border-color:#e8b22a66}.badge.warn .dot{background:var(--warn)}.badge.error{color:#f0a0a0;border-color:#e0525273}.badge.error .dot{background:var(--danger)}.conn{position:sticky;top:0;z-index:30;padding:9px 14px;font-size:.86rem;font-weight:600;text-align:center;background:#e0525229;color:#f4b4b4;border-bottom:1px solid rgba(224,82,82,.35)}.conn.reconnecting{background:#e8b22a24;color:#f3d38a;border-bottom-color:#e8b22a59}.player-list{display:flex;flex-direction:column;gap:8px;list-style:none;margin:0;padding:0}.player-row{display:flex;align-items:center;gap:10px;padding:10px 12px;background:var(--bg);border:1px solid var(--surface-border);border-radius:var(--radius);min-height:var(--tap)}.player-row .seat{flex:none;width:26px;height:26px;display:grid;place-items:center;border-radius:8px;background:var(--bg-elevated-2);font-size:.8rem;font-weight:700;color:var(--text-muted)}.player-row .name{flex:1;min-width:0;font-weight:600;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:#e4572e80;background:var(--accent-soft)}.empty-slot{border-style:dashed;color:var(--text-dim);justify-content:center;font-size:.88rem}.board{display:flex;flex-direction:column;gap:8px}.board-scroll{overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;margin:0 -4px;padding:0 4px 2px}.board-rows{display:flex;flex-direction:column;gap:6px;min-width:292px}.board-row{display:flex;align-items:stretch;gap:3px}.board-row .cells{display:grid;grid-template-columns:repeat(11,minmax(0,1fr));gap:2px;flex:1;min-width:0}.cell{position:relative;min-width:0;height:46px;display:grid;place-items:center;border-radius:7px;border:1.5px solid transparent;background:var(--cell-bg);color:#14171c;font-weight:700;font-size:.86rem;font-variant-numeric:tabular-nums;padding:0;transition:transform .08s ease}.cell:active:not(:disabled){transform:scale(.94)}.cell.marked{background:var(--cell-strong);color:#fff;border-color:#ffffffa6}.cell.marked:after{content:"✕";position:absolute;font-size:1.35rem;font-weight:800;color:#fff;text-shadow:0 1px 2px rgba(0,0,0,.4)}.cell.marked .num{opacity:.35}.cell.locked-out{background:var(--bg-elevated-2);color:var(--text-dim);border-color:var(--surface-border);opacity:.75}.cell.locked-out:after{content:"";position:absolute;left:12%;right:12%;height:2px;background:var(--text-dim);transform:rotate(-18deg);border-radius:2px}.cell.playable{box-shadow:inset 0 0 0 2px #ffffffbf}.cell:disabled{cursor:default}.cell.lock-cell{font-size:1.05rem}.board-row .row-lock{flex:none;width:34px;height:46px;display:grid;place-items:center;border-radius:7px;background:var(--cell-bg);color:#14171c;font-size:1rem}.board-row .row-lock.closed{background:var(--cell-strong);color:#fff}.board-row .row-lock.mine{box-shadow:inset 0 0 0 2px #fff}.penalties{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.penalty-box{width:var(--tap);height:var(--tap);border-radius:10px;border:2px dashed var(--surface-border);background:var(--bg);color:var(--text-dim);display:grid;place-items:center;font-size:1.1rem;font-weight:700}.penalty-box.used{border-style:solid;border-color:var(--danger);background:#e0525229;color:#f4b4b4}.score-line{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:12px 14px;border-radius:var(--radius);background:var(--bg);border:1px solid var(--surface-border)}.score-total{font-size:1.6rem;font-weight:800;font-variant-numeric:tabular-nums}.score-breakdown{display:flex;gap:6px;flex-wrap:wrap;font-size:.78rem;color:var(--text-muted);font-variant-numeric:tabular-nums}.score-chip{padding:3px 7px;border-radius:6px;background:var(--bg-elevated-2);border-left:3px solid var(--chip-color, var(--surface-border))}.mini-list{display:flex;flex-direction:column;gap:8px}.mini{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:var(--radius);background:var(--bg);border:1px solid var(--surface-border)}.mini .mini-name{flex:1;min-width:0;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mini .mini-rows{display:flex;gap:4px}.mini .mini-row{width:26px;height:22px;border-radius:5px;display:grid;place-items:center;font-size:.72rem;font-weight:700;color:#14171c;font-variant-numeric:tabular-nums}.mini .mini-total{min-width:42px;text-align:right;font-weight:800;font-variant-numeric:tabular-nums}.player-tabs{display:flex;gap:6px;overflow-x:auto;padding-bottom:4px;margin:0 -4px;padding-left:4px;padding-right:4px}.player-tab{flex:none;min-height:var(--tap);padding:8px 14px;border-radius:999px;border:1px solid var(--surface-border);background:var(--bg-elevated);font-weight:600;font-size:.9rem;white-space:nowrap}.player-tab[aria-selected=true]{background:var(--accent);border-color:var(--accent);color:#fff}.result-row{display:flex;align-items:center;gap:12px;padding:12px 14px;border-radius:var(--radius);background:var(--bg);border:1px solid var(--surface-border)}.result-row.winner{border-color:#e8b22a8c;background:#e8b22a1a}.result-rank{flex:none;width:34px;height:34px;border-radius:10px;display:grid;place-items:center;font-weight:800;background:var(--bg-elevated-2)}.result-row.winner .result-rank{background:var(--warn);color:#22190a}.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);background:#fff;padding:10px}.code-display{font-family:ui-monospace,SF Mono,Cascadia Mono,Menlo,monospace;font-size:1.25rem;font-weight:700;letter-spacing:.08em;padding:10px 14px;border-radius:var(--radius);background:var(--bg);border:1px dashed var(--surface-border);text-align:center;word-break:break-all}.modal-backdrop{position:fixed;inset:0;z-index:100;display:grid;place-items:end center;background:#0009;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(--bg-elevated);border:1px solid var(--surface-border);border-radius:var(--radius-lg);padding:20px;box-shadow:var(--shadow);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(--bg-elevated-2);border:1px solid var(--surface-border);box-shadow:var(--shadow);font-size:.9rem;font-weight:550;display:flex;gap:9px;align-items:flex-start}.toast.error{border-color:#e052528c;background:#2a1a1c;color:#f6c6c6}.toast.success{border-color:#3fa86a80;background:#14251c;color:#b6e6c9}.skeleton{border-radius:var(--radius);background:linear-gradient(90deg,#171a1f 25%,#1e222a,#171a1f 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(--text-muted);display:flex;flex-direction:column;gap:12px;align-items:center}.divider{height:1px;background:var(--surface-border);border:0;margin:4px 0}.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}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important}}.sheet-wrap{position:relative;width:100%;border-radius:12px;overflow:hidden;background:#e3e3e3;box-shadow:0 2px 10px #00000059}.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:800;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(--bg-elevated-2);border:1px solid var(--surface-border);color:var(--text-muted);font-size:.84rem}@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}}.sheet-credit{font-size:.72rem;color:var(--text-dim);line-height:1.4}.sheet-credit a{color:var(--text-muted)}
