:root{--table: #13323b;--table-deep: #0c2229;--table-line: #24505b;--card: #fffdf7;--ink: #1c2430;--ink-red: #c2283f;--muted: #a7c0c6;--text: #eef5f6;--gold: #f2c14e;--team-0: #3b6ef0;--team-1: #1fa36b;--team-2: #e3485c;--radius-card: 4px;--radius-panel: 14px;--font: "Bricolage Grotesque", "Segoe UI", system-ui, sans-serif;color-scheme:dark;box-sizing:border-box;padding-top:env(safe-area-inset-top,0px);padding-bottom:env(safe-area-inset-bottom,0px)}*,*:before,*:after{box-sizing:inherit}html,body{margin:0;min-height:100%}html{background:var(--table-deep)}body{font-family:var(--font);font-size:16px;line-height:1.45;color:var(--text);background:radial-gradient(120% 80% at 50% 0%,var(--table) 0%,var(--table-deep) 100%) fixed;-webkit-font-smoothing:antialiased}button,input,select{font:inherit;color:inherit}button{cursor:pointer}button:disabled{cursor:default}:focus-visible{outline:3px solid var(--gold);outline-offset:2px}h1,h2{margin:0;line-height:1.1}.muted{color:var(--muted);margin:0}.team-0{--team: var(--team-0)}.team-1{--team: var(--team-1)}.team-2{--team: var(--team-2)}.panel{background:#ffffff0a;border:1px solid var(--table-line);border-radius:var(--radius-panel);padding:20px}.btn-primary{width:100%;min-height:48px;padding:12px 18px;border:0;border-radius:999px;background:var(--gold);color:var(--ink);font-weight:800;font-size:1.05rem}.btn-primary:disabled{background:var(--table-line);color:var(--muted)}.btn-ghost{min-height:44px;padding:10px 16px;border:1px solid var(--table-line);border-radius:999px;background:transparent;font-weight:600}.btn-ghost:hover{border-color:var(--muted)}.tag{margin-left:8px;padding:1px 8px;border-radius:999px;background:#ffffff14;color:var(--muted);font-size:.78rem;font-weight:600;white-space:nowrap}.dot{display:inline-block;width:12px;height:12px;border-radius:50%;background:var(--team);flex:none}.chip{display:block;border-radius:50%;background:radial-gradient(circle at 35% 30%,rgba(255,255,255,.45),transparent 45%),var(--team);box-shadow:inset 0 0 0 3px #ffffff47,inset 0 -3px #00000040,0 2px 4px #00000059}.chip-lg{width:64px;height:64px;margin:0 auto 16px}.banner{position:sticky;top:env(safe-area-inset-top,0px);z-index:20;padding:10px 16px;background:var(--gold);color:var(--ink);font-weight:600;text-align:center}.toast-region{position:fixed;left:0;right:0;bottom:calc(16px + env(safe-area-inset-bottom,0px));display:flex;justify-content:center;pointer-events:none;z-index:30;padding:0 16px}.toast{max-width:420px;padding:12px 18px;border-radius:12px;background:var(--card);color:var(--ink);font-weight:600;box-shadow:0 8px 24px #00000059;animation:toast-in .18s ease-out}@keyframes toast-in{0%{transform:translateY(8px);opacity:0}}.loading{display:grid;place-items:center;min-height:60vh;color:var(--muted)}.home{max-width:440px;margin:0 auto;padding:40px 20px 64px}.home-hero{margin-bottom:28px}.hero-line{display:flex;gap:8px;margin-bottom:20px}.hero-line .chip{width:34px;height:34px;animation:chip-drop .42s cubic-bezier(.3,1.4,.5,1) both}.home h1{font-size:clamp(2.6rem,11vw,3.6rem);font-weight:800;letter-spacing:-.03em}.home-lead{margin:12px 0 0;max-width:34ch;color:var(--muted);font-size:1.05rem}.home form{display:grid;gap:16px}.segmented{display:grid;grid-template-columns:1fr 1fr;padding:4px;border-radius:999px;background:var(--table-deep)}.segmented button{min-height:40px;border:0;border-radius:999px;background:transparent;color:var(--muted);font-weight:600}.segmented .is-on{background:var(--card);color:var(--ink)}.field{display:grid;gap:6px;min-width:0}.field>span{font-size:.9rem;font-weight:600;color:var(--muted)}.field input,.field select{width:100%;min-height:46px;padding:10px 12px;border:1px solid var(--table-line);border-radius:10px;background:var(--table-deep)}.field select:disabled{opacity:.7}.field-row{display:grid;grid-template-columns:1fr 1fr;gap:12px}.code-input{font-size:1.4rem!important;font-weight:800;letter-spacing:.2em;text-align:center}.hint{margin:-4px 0 0;color:var(--muted);font-size:.9rem}.lobby{max-width:720px;margin:0 auto;padding:32px 20px 96px;display:grid;gap:16px}.lobby-code{display:grid;gap:10px}.code-row{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap}.room-code{font-size:clamp(2.4rem,12vw,3.4rem);font-weight:800;letter-spacing:.12em;font-variant-numeric:tabular-nums}.teams{display:grid;gap:16px;grid-template-columns:repeat(auto-fit,minmax(200px,1fr))}.team-col h2{display:flex;align-items:center;gap:10px;font-size:1.15rem;margin-bottom:12px}.team-col ul{list-style:none;margin:0;padding:0;display:grid;gap:8px}.team-col li{padding:10px 12px;border-radius:10px;background:var(--table-deep);font-weight:600}.team-col li.is-empty{background:transparent;border:1px dashed var(--table-line);color:var(--muted);font-weight:400}.player-me{color:var(--muted);font-weight:400}.lobby-actions{display:grid;gap:12px;justify-items:center;text-align:center}.game{display:grid;gap:16px;max-width:1240px;margin:0 auto;padding:12px 12px 88px}.game-side{display:grid;gap:14px;align-content:start}@media (min-width: 960px){.game{grid-template-columns:minmax(0,1fr) 360px;align-items:start;padding:24px 24px 48px}.game-side{position:sticky;top:24px}}.board-wrap{container-type:inline-size;width:min(100%,calc(100vh - 48px));margin:0 auto}.board{display:grid;grid-template-columns:repeat(10,1fr);gap:.6cqi;padding:1.2cqi;aspect-ratio:1;border-radius:10px;background:var(--table-deep);box-shadow:inset 0 0 0 1px var(--table-line)}.cell{position:relative;display:grid;place-items:center;padding:0;border:0;border-radius:var(--radius-card);background:var(--card);color:var(--ink);overflow:visible}.cell:disabled{opacity:1}.board.is-place .cell:not(.is-target),.board.is-remove .cell:not(.is-target){filter:brightness(.55) saturate(.6)}.cell.is-target{box-shadow:0 0 0 .5cqi var(--gold);z-index:1}.board.is-place .cell.is-target{animation:target-pulse 1.2s ease-in-out infinite}.board.is-remove .cell.is-target .chip{box-shadow:0 0 0 .5cqi var(--gold),0 2px 4px #00000059}@keyframes target-pulse{50%{box-shadow:0 0 0 .9cqi var(--gold)}}.cell-face{display:grid;justify-items:center;line-height:1;font-weight:800}.cell-face.is-red{color:var(--ink-red)}.cell-rank{font-size:2.5cqi;letter-spacing:-.04em}.cell-suit{font-size:2.3cqi}.cell.is-free{background:var(--gold)}.cell-free{font-size:4cqi;color:var(--ink)}.cell.is-free[class*=seq-team-]{box-shadow:inset 0 0 0 .6cqi var(--seq)}.cell.seq-team-0{--seq: var(--team-0)}.cell.seq-team-1{--seq: var(--team-1)}.cell.seq-team-2{--seq: var(--team-2)}.cell .chip{position:absolute;top:10%;right:10%;bottom:10%;left:10%;animation:chip-drop .32s cubic-bezier(.3,1.4,.5,1)}.cell .chip.in-seq{box-shadow:inset 0 0 0 .45cqi var(--gold),inset 0 -3px #00000040,0 2px 4px #00000059}.cell.is-last{box-shadow:0 0 0 .4cqi var(--text);z-index:1}.cell.is-removed:after{content:"";position:absolute;top:18%;right:18%;bottom:18%;left:18%;border:.4cqi dashed var(--ink);border-radius:50%;opacity:.5}@keyframes chip-drop{0%{transform:translateY(-40%) scale(1.25);opacity:0}}.players{list-style:none;margin:0;padding:0;display:grid;gap:6px}.player{display:grid;grid-template-columns:auto 1fr auto auto;align-items:center;column-gap:10px;padding:10px 12px;border-radius:10px;background:#ffffff08}.player-name{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.player.is-offline .player-name{color:var(--muted)}.player.is-active{background:#f2c14e1f;box-shadow:inset 3px 0 0 var(--gold)}.timer{font-weight:800;font-variant-numeric:tabular-nums}.timer.is-urgent{color:var(--gold)}.timer-track{grid-column:1 / -1;height:3px;margin-top:8px;border-radius:2px;background:var(--table-line);overflow:hidden}.timer-fill{display:block;height:100%;background:var(--gold);transform-origin:left;transition:transform .25s linear}.score{display:flex;gap:8px}.score-team{flex:1;display:flex;align-items:center;justify-content:space-between;gap:8px;padding:10px 12px;border-radius:10px;border:1px solid var(--table-line)}.score-team.is-mine{border-color:var(--muted)}.score-name{font-weight:600}.pips{display:flex;gap:4px}.pip{width:14px;height:14px;border-radius:50%;border:2px solid var(--team)}.pip.is-filled{background:var(--team)}.game-hint{margin:0;min-height:1.45em;font-weight:600}.game.is-my-turn .game-hint{color:var(--gold)}.hand{display:flex;gap:8px;padding:12px 6px 6px;overflow-x:auto;scrollbar-width:thin}@media (min-width: 960px){.hand{flex-wrap:wrap;overflow:visible}}.hand-card{position:relative;flex:none;width:62px;height:88px;padding:0;border:0;border-radius:8px;background:var(--card);color:var(--ink);box-shadow:0 3px 8px #0000004d;transition:transform .14s ease-out,box-shadow .14s ease-out}.hand-card:disabled{filter:brightness(.8)}.hand-card.is-selected{transform:translateY(-8px);box-shadow:0 0 0 3px var(--gold),0 8px 16px #00000059}.hand-card.is-dead .pcard{opacity:.45}.dead-badge{position:absolute;left:50%;bottom:6px;transform:translate(-50%);padding:1px 6px;border-radius:999px;background:var(--ink);color:var(--card);font-size:.68rem;font-weight:600}.pcard{display:grid;height:100%;grid-template-rows:auto 1fr auto;justify-items:center;padding:6px 4px;font-weight:800;line-height:1}.pcard.is-red{color:var(--ink-red)}.pcard-rank{justify-self:start;font-size:1.1rem}.pcard-suit{align-self:center;font-size:1.9rem}.pcard-role{font-size:.68rem;font-weight:600;color:var(--ink)}.deck-info{font-size:.85rem}.overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:40;display:grid;place-items:center;padding:20px;background:#061216b8}.overlay-card{width:min(100%,380px);display:grid;gap:12px;text-align:center;background:var(--table)}.overlay-card h2{font-size:1.8rem;font-weight:800}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation:none!important;transition:none!important}}.tally{display:flex;justify-content:center;gap:8px;margin:4px 0}.tally-team{display:flex;align-items:center;gap:8px;padding:8px 14px;border-radius:10px;border:1px solid var(--table-line)}.tally-team strong{font-size:1.2rem;font-variant-numeric:tabular-nums}.tally-team.is-winner{border-color:var(--gold)}.btn-link{min-height:44px;border:0;background:transparent;color:var(--muted);font-weight:600;text-decoration:underline;text-underline-offset:3px}.peek-bar{position:fixed;left:12px;right:12px;bottom:calc(12px + env(safe-area-inset-bottom,0px));z-index:40;display:flex;align-items:center;justify-content:space-between;gap:12px;max-width:520px;margin:0 auto;padding:10px 10px 10px 18px;border-radius:999px;background:var(--table);border:1px solid var(--gold);box-shadow:0 8px 24px #0006;font-weight:800}.segmented{grid-template-columns:none;grid-auto-flow:column;grid-auto-columns:1fr}.segmented button{padding:0 6px;line-height:1.15}.segmented-sm button{min-height:36px}.team-col li{display:flex;align-items:center;flex-wrap:wrap;gap:6px}.team-col li .tag{margin-left:0}.seat-name{margin-right:auto}.btn-inline{min-height:32px;padding:4px 12px;border:1px solid var(--table-line);border-radius:999px;background:transparent;color:var(--text);font-size:.85rem;font-weight:600}.team-col li.is-empty .btn-inline{border-color:var(--gold);color:var(--gold)}.bot-picker{padding:16px 20px}.check{display:grid;grid-template-columns:auto 1fr;gap:10px;align-items:start;font-size:.92rem;color:var(--muted);cursor:pointer}.check input{width:20px;height:20px;margin:1px 0 0;accent-color:var(--gold)}.bot-picker .hint{margin:10px 0 0}.market{display:grid;gap:6px;padding:12px;border-radius:12px;border:1px dashed var(--table-line)}.market-title{margin:0;font-size:.9rem;font-weight:600;color:var(--muted)}.game.is-my-turn .market{border-color:var(--gold)}.market-row{display:flex;gap:8px;padding-top:8px}.market-card,.deck-card{width:54px;height:76px}.market-card .pcard-suit{font-size:1.6rem}.deck-card{position:relative;flex:none;padding:0;border:0;border-radius:8px;background:var(--table-deep);box-shadow:inset 0 0 0 1px var(--table-line);transition:transform .14s ease-out,box-shadow .14s ease-out}.deck-back{position:absolute;top:6px;right:6px;bottom:6px;left:6px;border-radius:5px;background:repeating-linear-gradient(45deg,var(--table-line) 0 4px,transparent 4px 8px)}.deck-label{position:absolute;left:50%;bottom:6px;transform:translate(-50%);padding:1px 6px;border-radius:999px;background:var(--table-deep);font-size:.7rem;font-weight:600}.deck-card.is-selected{transform:translateY(-6px);box-shadow:0 0 0 3px var(--gold)}.market-card:disabled,.deck-card:disabled{filter:none;cursor:default}.last-move{margin:10px 0 0;color:var(--muted);font-size:.92rem;text-align:center}.mode-hint{margin:4px 0 0}.rule-toggles{display:flex;flex-wrap:wrap;gap:8px}.rule-toggle{min-height:40px;padding:8px 16px;border:1px solid var(--table-line);border-radius:999px;background:transparent;color:var(--muted);font-weight:600}.rule-toggle.is-on{border-color:var(--gold);background:#f2c14e24;color:var(--text)}.rule-toggle.is-on:before{content:"✓ ";color:var(--gold)}ul.mode-hint{margin:6px 0 0;padding-left:18px}.board.is-shield .cell:not(.is-target){filter:brightness(.55) saturate(.6)}.cell.has-power{background:linear-gradient(160deg,var(--card) 55%,#fbe7b0);box-shadow:inset 0 0 0 .35cqi var(--gold)}.power-badge{position:absolute;top:2%;right:4%;font-size:2.6cqi;line-height:1}.shield-badge{position:absolute;right:-6%;bottom:-6%;z-index:2;font-size:3cqi;line-height:1;filter:drop-shadow(0 1px 1px rgba(0,0,0,.5))}.powers{display:grid;gap:8px;padding:12px;border-radius:12px;border:1px solid var(--table-line)}.power-row{display:flex;flex-wrap:wrap;gap:8px}.power-chip{min-height:40px;padding:6px 14px;border:1px solid var(--gold);border-radius:999px;background:#f2c14e1a;font-weight:600}.power-chip:disabled{border-color:var(--table-line);background:transparent;color:var(--muted)}.power-chip.is-selected{background:var(--gold);color:var(--ink)}.power-detail p{margin:0 0 6px}.power-actions{display:flex;flex-wrap:wrap;gap:8px}.power-actions .btn-primary{width:auto}.power-banner{margin:0;padding:8px 12px;border-radius:10px;background:#f2c14e24;color:var(--gold);font-weight:600}.spy-result p{margin:0 0 6px;font-weight:600}.spy-cards{display:flex;gap:8px}.spy-card{display:block;width:48px;height:68px}.spy-card .pcard-suit{font-size:1.4rem}.powers-empty{margin:0;font-size:.9rem}.player-powers{display:inline-flex;gap:2px;font-size:.95rem}.power-legend{margin:0;font-size:.85rem;line-height:1.7}.legend-item{display:inline-block;margin-right:10px;white-space:nowrap}.mission{display:grid;gap:8px;padding:12px;border-radius:12px;border:1px solid var(--table-line);background:#ffffff08}.mission.is-done{border-color:var(--gold)}.mission-head{display:grid;grid-template-columns:auto 1fr;gap:12px;align-items:start}.mission-head p{margin:0}.mission-title{font-weight:800}.mission-text{margin-top:4px!important;font-size:.92rem}.mission-reward{margin-top:4px!important;color:var(--gold);font-size:.88rem;font-weight:600}.mission-pattern{display:grid;gap:3px;width:44px;margin-top:2px}.mission-pattern span{aspect-ratio:1;border-radius:50%;border:1px solid var(--table-line)}.mission-pattern span.is-on{border:0;background:var(--gold)}.mission-other{display:flex;align-items:center;gap:6px;font-size:.88rem}.score-mission{color:var(--gold)}.last-move.is-mission{color:var(--gold);font-weight:600}.mission-summary{list-style:none;margin:0;padding:0;display:grid;gap:4px;font-size:.92rem;text-align:left}.mission-summary li{display:flex;align-items:center;gap:6px}.mission-icon{display:grid;place-items:center;width:44px;height:44px;border-radius:10px;background:var(--table-deep);font-size:1.4rem}.visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.reaction-layer{position:fixed;left:0;right:0;bottom:calc(80px + env(safe-area-inset-bottom,0px));height:0;pointer-events:none;z-index:35}.reaction-bubble{position:absolute;bottom:0;display:grid;justify-items:center;transform:translate(-50%);animation:reaction-rise 2.6s ease-out forwards}.reaction-emoji{font-size:2.4rem;line-height:1;filter:drop-shadow(0 3px 6px rgba(0,0,0,.35))}.reaction-name{margin-top:2px;padding:1px 8px;border-radius:999px;background:#0c2229d9;font-size:.75rem;font-weight:600;white-space:nowrap}@keyframes reaction-rise{0%{transform:translate(-50%,20px) scale(.6);opacity:0}12%{transform:translate(-50%) scale(1.1);opacity:1}75%{opacity:1}to{transform:translate(-50%,-220px) scale(1);opacity:0}}@media (prefers-reduced-motion: reduce){.reaction-bubble{animation:reaction-fade 2.6s linear forwards!important}@keyframes reaction-fade{0%,85%{opacity:1}to{opacity:0}}}.reaction-bar{position:fixed;right:12px;bottom:calc(12px + env(safe-area-inset-bottom,0px));z-index:36;display:grid;justify-items:end;gap:8px}.reaction-toggle{background:var(--table);box-shadow:0 6px 18px #00000059}.reaction-tray{order:-1;display:grid;grid-template-columns:repeat(4,44px);gap:6px;padding:10px;border-radius:14px;border:1px solid var(--table-line);background:var(--table);box-shadow:0 10px 28px #0006}.reaction-button{width:44px;height:44px;border:0;border-radius:10px;background:var(--table-deep);font-size:1.4rem}.reaction-button:disabled{opacity:.45}.reaction-mute{grid-column:1 / -1;min-height:32px;font-size:.82rem}.reaction-toggle:disabled{opacity:.7}.cell .chip:after{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;color:#ffffffe6;font-size:2.6cqi;font-weight:800;line-height:1}.cell .chip.team-1:after{content:"▲"}.cell .chip.team-2:after{content:"✕"}.team-symbol{color:var(--team);font-size:.85em}@media (max-width: 959px){.players.is-compact{grid-template-columns:1fr 1fr}.players.is-compact .player{padding:8px 10px;column-gap:6px;grid-template-columns:auto 1fr auto}.players.is-compact .tag{grid-column:2 / -1;justify-self:start;margin:2px 0 0;font-size:.7rem}.players.is-compact .player-powers{display:none}}
