:root{--bg:#e9f0f7;--surface:#fff;--surface-2:#eef4fa;--ink:#0d2236;--muted:#4d6175;--line:#cddbe9;--accent:#0161ac;--accent-ink:#fff;--good:#13804a;--bad:#c0392b;--bad-ink:#fff;--shadow:0 1px 2px #051e3c1a, 0 6px 18px #051e3c14;--radius:14px;--frame:#00487d;--grid:#6998ca;--cell:#0161ac;--edge:#000;--double:#f5c518;--double-ink:#3a2c00;--triple:#d4372c;--triple-ink:#fff;--replay:#f08a1c;--replay-ink:#2d1500;--mark-last:#fff;--mark-pending:#f8af00;--mark-valid:#34d27b;--mark-error:#ff4d3d;--tile-hi:#fbf1d9;--tile:#efdaa9;--tile-edge:#c39d5c;--tile-ink:#1f160a;--tile-count:#7a5a2a;--tile-star:#c0392b;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}@media (prefers-color-scheme:dark){:root{--bg:#071827;--surface:#0e2539;--surface-2:#143350;--ink:#e6f0fa;--muted:#9fb6cc;--line:#23435f;--accent:#4fa3e3;--accent-ink:#04121f;--good:#5ed39a;--bad:#ff7d6b;--bad-ink:#1a0603;--shadow:0 1px 2px #00000073, 0 6px 18px #0000004d;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}}*{box-sizing:border-box}html,body{background:var(--bg);color:var(--ink);-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent;margin:0;font-family:ui-rounded,SF Pro Rounded,system-ui,-apple-system,Segoe UI,Roboto,sans-serif}h1,h2,h3{margin:0;line-height:1.2}p{margin:0}.muted{color:var(--muted)}.small{font-size:.875rem}.lead{color:var(--muted);font-size:1.1rem}.good{color:var(--good);font-weight:600}.bad{color:var(--bad);font-weight:600}.notice{color:var(--bad);font-size:.925rem}.site-header{justify-content:space-between;align-items:center;gap:12px;max-width:1200px;margin:0 auto;padding:12px 16px;display:flex}.brand{color:inherit;align-items:center;gap:10px;font-size:1.25rem;font-weight:800;text-decoration:none;display:flex}.brand-tiles{gap:3px;display:flex}.brand-tiles span{width:24px;height:24px;color:var(--tile-ink);background:linear-gradient(145deg, var(--tile-hi), var(--tile) 55%, var(--tile-edge));border-radius:4px;place-items:center;font-size:.75rem;display:grid;box-shadow:0 1px 2px #00000040}.header-actions{gap:4px;display:flex}.page{max-width:1200px;margin:0 auto;padding:0 16px 40px}.btn{border:1px solid var(--line);background:var(--surface);min-height:44px;color:var(--ink);font:inherit;cursor:pointer;border-radius:999px;justify-content:center;align-items:center;gap:6px;padding:10px 18px;font-weight:650;text-decoration:none;transition:transform 80ms,background .15s;display:inline-flex}.btn:hover:not(:disabled){background:var(--surface-2)}.btn:active:not(:disabled){transform:scale(.97)}.btn:disabled{opacity:.45;cursor:not-allowed}.btn.primary{background:var(--accent);color:var(--accent-ink);border-color:#0000}.btn.primary:hover:not(:disabled){background:color-mix(in srgb, var(--accent) 88%, black)}.btn.ghost{background:0 0;border-color:#0000}.btn.lang{font-variant:small-caps;min-width:48px}:focus-visible{outline:3px solid var(--ink);outline-offset:2px}.cell:focus-visible{z-index:2;outline-offset:0}.field{flex-direction:column;gap:6px;display:flex}.field>span:first-child{color:var(--muted);font-size:.875rem;font-weight:600}input{font:inherit;border:1px solid var(--line);background:var(--surface);min-height:44px;color:var(--ink);border-radius:10px;width:100%;padding:10px 12px;font-size:16px}.inline{gap:8px;display:flex}.actions{flex-wrap:wrap;gap:8px;display:flex}.card,.panel{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow)}.card{padding:20px}.panel{padding:14px 16px}.loading{min-height:40vh}.centre-card{flex-direction:column;align-items:flex-start;gap:14px;max-width:520px;margin:24px auto;display:flex}.token{aspect-ratio:1;width:86%;color:var(--tile-ink);font-variant-numeric:tabular-nums;background:linear-gradient(145deg, var(--tile-hi), var(--tile) 55%, var(--tile-edge));-webkit-user-select:none;user-select:none;border-radius:12%;place-items:center;font-weight:800;line-height:1;display:grid;position:relative;box-shadow:inset 0 -2px #00000024,inset 0 1px #fff9,0 1px 2px #00000059}.token .count{color:var(--tile-count);font-size:.36em;font-weight:700;position:absolute;bottom:7%;right:9%}.token .blank-star{color:var(--tile-star);font-size:1.1em}.token .star{color:var(--tile-star);font-size:.38em;position:absolute;top:6%;left:9%}.token.pending{box-shadow:0 0 0 2px var(--edge), 0 0 0 4px var(--mark-pending)}.token.valid{box-shadow:0 0 0 2px var(--edge), 0 0 0 4px var(--mark-valid)}.board-frame{background:var(--frame);box-shadow:var(--shadow);border-radius:10px;padding:3%}.board{aspect-ratio:1;background:var(--grid);border:3px solid var(--edge);grid-template-columns:repeat(15,minmax(0,1fr));gap:1px;width:100%;display:grid;container-type:inline-size}.cell{aspect-ratio:1;background:var(--cell);color:#fff;min-width:0;font:inherit;cursor:pointer;border:0;border-radius:0;place-items:center;padding:0;font-size:3.6cqw;display:grid;position:relative}.cell[aria-disabled=true]{cursor:default}.cell .mark{font-size:2.5cqw;font-weight:800}@container (max-width:560px){.cell .token .count{display:none}}.sq-double{background:var(--double);color:var(--double-ink)}.sq-triple{background:var(--triple);color:var(--triple-ink)}.sq-replay{background:var(--replay);color:var(--replay-ink)}.sq-centre{background:var(--double);color:var(--double-ink)}.cell.sq-centre .mark{font-size:3.6cqw}.cell.last{box-shadow:inset 0 0 0 2px var(--mark-last)}.cell.error{box-shadow:inset 0 0 0 3px var(--mark-error);z-index:1}.cell[aria-disabled=false]:hover{filter:brightness(1.12)}.legend{color:var(--muted);flex-wrap:wrap;justify-content:center;gap:6px 16px;padding:0;font-size:.85rem;list-style:none;display:flex}.legend li{align-items:center;gap:6px;display:flex}.legend .key{border-radius:4px;place-items:center;width:22px;height:22px;font-size:.7rem;font-weight:700;display:grid}.table{grid-template-columns:minmax(0,1fr);grid-template-areas:"scores""board""controls""legend""log";gap:14px;display:grid}.area-scores{grid-area:scores}.area-legend{grid-area:legend;margin:0}.area-board{grid-area:board;justify-self:center;width:100%;max-width:max(320px,min(100%,100dvh - 150px))}.area-controls{flex-direction:column;grid-area:controls;gap:14px;display:flex}.area-log{grid-area:log}@media (min-width:900px){.table{grid-template:"board scores""board controls""board log"1fr"legend log"/minmax(0,1fr) 330px;align-items:start}}.scores{flex-direction:column;gap:4px;margin:0;padding:0;list-style:none;display:flex}.scores li{border-left:4px solid #0000;border-radius:10px;grid-template-columns:1fr auto 3.5ch;align-items:center;gap:10px;padding:6px 10px;display:grid}.scores li.current{background:var(--surface-2);border-left-color:var(--accent)}.scores .who{text-overflow:ellipsis;white-space:nowrap;font-weight:650;overflow:hidden}.scores .score{text-align:right;font-variant-numeric:tabular-nums;font-size:1.15rem;font-weight:800}.scores .dots{gap:3px;display:flex}.scores .dots span{background:var(--tile-edge);border-radius:2px;width:8px;height:8px}.bag{color:var(--muted);margin-top:8px;font-size:.9rem}@media (max-width:899px){.area-scores{padding:10px 12px}.scores{flex-flow:wrap;gap:6px}.scores li{flex:140px;grid-template-columns:minmax(0,1fr) auto;padding:4px 8px}.scores .dots{display:none}.bag{margin-top:6px}}.status{min-height:1.5em}.rack{gap:14px;display:flex}.rack-slot{cursor:pointer;background:0 0;border:0;border-radius:10px;place-items:center;width:64px;height:64px;padding:0;transition:transform .12s;display:grid}.rack-slot .token{width:100%;font-size:26px}.rack-slot.selected{transform:translateY(-6px)}.rack-slot.selected .token{box-shadow:0 0 0 3px var(--surface), 0 0 0 6px var(--accent), 0 6px 12px #00000040}.rack-slot:disabled{cursor:default}.rack-slot.empty{border:2px dashed var(--line)}.thinking:after{content:"";background:var(--accent);border-radius:50%;width:6px;height:6px;margin-left:8px;animation:1s ease-in-out infinite pulse;display:inline-block}@keyframes pulse{50%{opacity:.2}}.area-log h3{margin-bottom:8px;font-size:.95rem}.log{flex-direction:column;gap:4px;margin:0;padding:0;font-size:.925rem;list-style:none;display:flex}.tag{background:var(--double);color:var(--double-ink);border-radius:999px;margin-left:8px;padding:1px 8px;font-size:.75rem;font-weight:700}.game-over{flex-direction:column;gap:10px;display:flex}.game-over .winner{font-size:1.4rem;font-weight:800}.dialog-body{flex-direction:column;gap:14px;width:100%;max-width:560px;display:flex}.dialog{border-radius:var(--radius);background:var(--surface);width:min(640px,100% - 32px);max-height:calc(100dvh - 48px);color:var(--ink);box-shadow:var(--shadow);border:0;padding:0}.dialog::backdrop{background:#00000073}.dialog>.dialog-body{max-width:none;padding:24px}.dialog.wild{width:min(440px,100% - 32px)}.dialog.handoff::backdrop{background:#e9f0f7}@media (prefers-color-scheme:dark){.dialog.handoff::backdrop{background:#071827}}.dialog ol{flex-direction:column;gap:8px;margin:0;padding-left:1.3em;line-height:1.45;display:flex}.wild-grid{grid-template-columns:repeat(4,1fr);gap:8px;display:grid}.wild-value{font-variant-numeric:tabular-nums;font-size:1.1rem}.home{flex-direction:column;gap:28px;display:flex}.hero{text-align:center;flex-direction:column;align-items:center;gap:10px;padding-top:16px;display:flex}.hero h1{letter-spacing:-.02em;font-size:clamp(2.4rem,7vw,3.6rem)}.hero-tiles{gap:8px;display:flex}.hero-tiles .token{width:54px;font-size:24px}.setup{flex-direction:column;align-items:center;gap:20px;display:flex}.resume{align-self:center}.name-field{width:100%;max-width:360px}.modes{grid-template-columns:repeat(auto-fit,minmax(270px,1fr));gap:16px;width:100%;display:grid}.mode{flex-direction:column;gap:14px;display:flex}.mode>.btn.primary{align-self:flex-start}.segmented{border:0;min-width:0;margin:0;padding:0}.segmented legend{color:var(--muted);margin-bottom:6px;padding:0;font-size:.875rem;font-weight:600}.segmented>div{background:var(--surface-2);border-radius:999px;flex-wrap:wrap;gap:2px;padding:3px;display:inline-flex}.segmented button{font:inherit;color:var(--ink);cursor:pointer;background:0 0;border:0;border-radius:999px;min-height:38px;padding:8px 14px;font-weight:600}.segmented button.on{background:var(--surface);color:var(--accent);box-shadow:0 1px 3px #00000026}.names{grid-template-columns:1fr 1fr;gap:8px;display:grid}.join{border-top:1px solid var(--line);padding-top:14px}.history,.history-empty{border-top:1px solid var(--line);padding-top:12px}.history h3{margin-bottom:8px;font-size:.95rem}.history ul{flex-direction:column;gap:6px;margin:0;padding:0;list-style:none;display:flex}.history-row{border:1px solid var(--line);background:var(--surface-2);border-radius:10px;align-items:stretch;gap:4px;display:flex}.history-main{min-width:0;color:inherit;border-radius:10px;flex:1;grid-template-columns:auto minmax(0,1fr);grid-template-areas:"badge when""players players";align-items:center;gap:4px 8px;padding:8px 10px;text-decoration:none;display:grid}a.history-main:hover{background:color-mix(in srgb, var(--accent) 8%, transparent)}.history-main .badge{grid-area:badge}.history-when{white-space:nowrap;grid-area:when;justify-self:end}.history-players{flex-wrap:wrap;grid-area:players;gap:2px 12px;font-size:.9rem;display:flex}.history-players span{white-space:nowrap}.history-players strong{background:var(--surface);border:1px solid var(--line);text-align:center;font-variant-numeric:tabular-nums;border-radius:6px;min-width:1.8em;margin-left:4px;padding:0 6px;display:inline-block}.badge{white-space:nowrap;background:var(--line);color:var(--ink);border-radius:999px;padding:2px 8px;font-size:.75rem;font-weight:700;display:inline-block}.badge.turn{background:var(--accent);color:var(--accent-ink)}.badge.won{background:color-mix(in srgb, var(--good) 18%, var(--surface));color:var(--good)}.badge.lost{background:color-mix(in srgb, var(--bad) 14%, var(--surface));color:var(--bad)}.badge.off{color:var(--muted)}.history-remove{border:0;border-left:1px solid var(--line);width:40px;color:var(--muted);font:inherit;cursor:pointer;background:0 0;border-radius:0 10px 10px 0;flex:none;font-size:1.2rem}.history-remove:hover{color:var(--bad)}.history-confirm{flex-wrap:wrap;flex:1;align-items:center;gap:8px;padding:8px 10px;font-size:.9rem;display:flex}.btn.small-btn{min-height:34px;padding:4px 12px;font-size:.875rem}.btn.danger{background:var(--bad);color:var(--bad-ink);border-color:#0000}.link-btn{color:var(--accent);font:inherit;cursor:pointer;background:0 0;border:0;margin-top:8px;padding:4px 0;font-weight:650}.lobby .share{gap:8px;width:100%;display:flex}.lobby .code strong{letter-spacing:.08em;font-size:1.3rem}.seats{flex-direction:column;gap:4px;margin:0;padding-left:1.4em;font-weight:600;display:flex}.seats .empty{color:var(--muted);font-weight:400}
