:root{--bg:#f5f6f8;--surf:#fff;--surf-bot:#fbfcfd;--line:#e7eaef;--line-soft:#eef1f5;--ink:#161a21;--muted:#69727e;--faint:#9aa2ad;--amber:#e08205;--amber-soft:#f6a723;--amber-wash:#fdf3e2;--amber-line:#f3e2c4;--good:#1f9d57;--good-wash:#e8f6ee;--good-line:#cdead9;--cool:#0e93a8;--cool-wash:#e2f4f6;--cool-line:#c8e8ec;--danger:#c23b34;--track:#edeff3;--radius:16px;--shadow:0 1px 2px #1418210a, 0 12px 24px -18px #14182138;--shadow-lg:0 1px 2px #1418210d, 0 24px 48px -28px #14182159}.tc-red{--tc:#c0392f}.tc-blue{--tc:#2563b0}.tc-green{--tc:#1e8e4d}.tc-gold{--tc:#b8860b}.tc-purple{--tc:#7d3fc9}.tc-teal{--tc:#0e93a8}.tc-orange{--tc:#d95f12}.tc-pink{--tc:#d23a76}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{background:var(--bg);color:var(--ink);-webkit-font-smoothing:antialiased;margin:0;font-family:Avenir Next,Helvetica Neue,system-ui,-apple-system,Segoe UI,sans-serif;line-height:1.45}a{color:inherit;text-decoration:none}.shell{max-width:940px;margin:0 auto;padding:22px 22px 64px}.topbar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px;padding:12px 0 18px;display:flex}.brand{align-items:baseline;gap:12px;display:flex}.logo{letter-spacing:.04em;font-size:20px;font-weight:800}.logo span{color:var(--amber)}.tag{letter-spacing:.06em;color:var(--muted);border-left:1px solid var(--line);padding-left:12px;font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:11px}.phead{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:16px;margin:8px 0 18px;display:flex}.phead h1{letter-spacing:-.01em;margin:0;font-size:26px;font-weight:800}.phead p{color:var(--muted);margin:4px 0 0;font-size:13.5px}.card{background:linear-gradient(180deg, var(--surf), var(--surf-bot));border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow)}.card.pad{padding:18px}.mt{margin-top:14px}.two{grid-template-columns:1fr 1fr;gap:14px;display:grid}.panel-h{justify-content:space-between;align-items:center;gap:12px;margin-bottom:4px;display:flex}.panel-h h4{margin:0;font-size:13.5px;font-weight:800}.empty{text-align:center;color:var(--muted);padding:26px;font-size:14px}.spacer{flex:1}.foot{text-align:center;color:var(--faint);letter-spacing:.02em;margin-top:26px;font-size:11.5px}.pill{letter-spacing:.02em;border:1px solid var(--good-line);background:var(--good-wash);color:var(--good);white-space:nowrap;border-radius:999px;padding:3px 10px;font-size:11px;font-weight:800}.chips{flex-wrap:wrap;gap:8px;margin-top:12px;display:flex}.chip{background:var(--line-soft);border:1px solid var(--line);border-radius:999px;align-items:center;gap:6px;padding:4px 10px;font-size:12px;font-weight:600;display:inline-flex}.chip button{color:var(--faint);cursor:pointer;background:0 0;border:0;border-radius:6px;padding:0 2px;font-size:14px;line-height:1}.chip button:hover{color:var(--danger)}.btn{font:inherit;cursor:pointer;border:1px solid var(--line);background:var(--surf);color:var(--ink);border-radius:10px;padding:9px 14px;font-size:13px;font-weight:700;transition:border-color .15s,background .15s}.btn:hover{border-color:var(--amber)}.btn.primary{background:var(--amber);border-color:var(--amber);color:#fff}.btn.primary:hover{background:#c9760a;border-color:#c9760a}.btn.primary:disabled{background:var(--line-soft);border-color:var(--line);color:var(--faint);cursor:default}.btn.ghost{color:var(--muted);background:0 0;border-color:#0000;padding:6px 8px}.btn.ghost:hover{color:var(--ink);background:var(--line-soft)}.btn.sm{padding:6px 10px;font-size:12px}.btn:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible{outline:2px solid var(--amber);outline-offset:2px}.field{flex-direction:column;gap:5px;display:flex}.field label{letter-spacing:.04em;text-transform:uppercase;color:var(--faint);font-size:11px;font-weight:800}.field input,.field select{font:inherit;color:var(--ink);background:var(--surf);border:1px solid var(--line);border-radius:10px;padding:9px 11px;font-size:14px}.cn{flex-direction:column;gap:14px;display:flex}.cn-note{color:var(--muted);font-size:13px;display:block}.cn-join{gap:8px;display:flex}.cn-code-input{min-width:0;font:inherit;letter-spacing:.28em;text-align:center;text-transform:uppercase;border:1px solid var(--line);background:var(--surf);color:var(--ink);border-radius:10px;flex:1;padding:10px 6px 10px 12px;font-size:20px;font-weight:800}.cn-rules{color:var(--muted);flex-direction:column;gap:9px;margin:8px 0 0;padding-left:20px;font-size:13.5px;display:flex}.cn-rules strong{color:var(--ink)}.cn{position:relative}.cn-banner{z-index:120;letter-spacing:.06em;text-transform:uppercase;text-align:center;color:#fff;background:var(--tc,var(--ink));width:fit-content;max-width:90vw;box-shadow:var(--shadow-lg);opacity:0;pointer-events:none;white-space:nowrap;border-radius:999px;margin:0 auto;padding:14px 34px;font-size:22px;font-weight:800;position:fixed;top:38%;left:0;right:0}.cn-timer{font-variant-numeric:tabular-nums;background:var(--line-soft);color:var(--ink);border-radius:999px;margin-top:6px;padding:2px 14px;font-size:15px;font-weight:800;display:inline-block}.cn-timer.urgent{background:color-mix(in srgb, var(--danger) 12%, white);color:var(--danger);animation:1s infinite cn-pulse}@keyframes cn-pulse{50%{opacity:.5}}.cn-config-row{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.cn-setup-label{letter-spacing:.04em;text-transform:uppercase;color:var(--faint);align-items:baseline;gap:8px;margin-top:14px;font-size:11px;font-weight:800;display:flex}.cn-setup-label .cn-note{text-transform:none;letter-spacing:0;font-size:11.5px;font-weight:600;display:inline}.cn-cats{flex-wrap:wrap;gap:8px;margin-top:10px;display:flex}button.chip.cn-cat{font:inherit;cursor:pointer;background:var(--surf);font-size:12px;font-weight:700}button.chip.cn-cat:hover{border-color:var(--amber)}button.chip.cn-cat.on{background:var(--amber-wash);border-color:var(--amber-line);color:var(--amber)}button.chip.cn-teamchip .cn-dot{background:var(--tc);border-radius:50%;width:10px;height:10px;display:inline-block}button.chip.cn-teamchip.on{background:color-mix(in srgb, var(--tc) 12%, white);border-color:color-mix(in srgb, var(--tc) 40%, white);color:var(--tc)}.chip.cn-cw{background:var(--surf)}.cn-score{flex-direction:column;gap:8px;padding:12px 14px;display:flex}.cn-tallies{flex-wrap:wrap;justify-content:center;gap:10px;display:flex}.cn-tally{min-width:56px;color:var(--tc,var(--muted));border:1px solid #0000;border-radius:12px;flex-direction:column;align-items:center;gap:3px;padding:6px 10px;display:flex}.cn-tally .n{font-variant-numeric:tabular-nums;font-size:26px;font-weight:800;line-height:1}.cn-tally .l{letter-spacing:.12em;text-transform:uppercase;font-size:10px;font-weight:800}.cn-tally.active{background:color-mix(in srgb, var(--tc) 10%, white);border-color:color-mix(in srgb, var(--tc) 35%, white)}.cn-tally.down{opacity:.4}.cn-tally.down .l{text-decoration:line-through}.cn-wins{text-align:center;letter-spacing:.06em;text-transform:uppercase;color:var(--faint);font-size:11px;font-weight:800}.cn-mid{text-align:center;min-width:0}.cn-turn{color:var(--tc,var(--ink));font-size:13.5px;font-weight:800}.cn-clue{color:var(--muted);overflow-wrap:anywhere;margin-top:3px;font-size:12.5px}.cn-clue strong{color:var(--ink);font-size:14.5px}.cn-guesses{background:var(--line-soft);color:var(--muted);border-radius:999px;margin-left:8px;padding:1px 8px;font-size:11px;font-weight:800;display:inline-block}.cn-board{grid-template-columns:repeat(5,1fr);gap:6px;display:grid;container-type:inline-size}.cn-card{aspect-ratio:1/.62;border:1px solid var(--line);background:var(--surf);color:var(--ink);font:inherit;letter-spacing:.01em;text-transform:uppercase;text-align:center;overflow-wrap:break-word;-webkit-hyphens:auto;hyphens:auto;opacity:1;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;border-radius:10px;justify-content:center;align-items:center;padding:5px 3px;font-weight:800;line-height:1.12;transition:transform 80ms;display:flex;position:relative;overflow:hidden;box-shadow:0 1px 1px #1418210a}.cn-card.tappable{cursor:pointer}.cn-card.tappable:active{transform:scale(.96)}.cn-board .cn-card{font-size:max(6px, min(16px, calc((95cqw / var(--cols,5)) / var(--n,8)), calc((50cqw / var(--cols,5)) / var(--w,1))))}.cn-word{min-width:0}.cn-card.key-team{background:color-mix(in srgb, var(--tc) 10%, white);border-color:color-mix(in srgb, var(--tc) 30%, white);color:var(--tc)}.cn-card.key-neutral{color:#7c6a4d;background:#f6f1e7;border-color:#e6dbc7}.cn-card.key-assassin{color:#fff;background:#191d25;border-color:#191d25}.cn-card.revealed{box-shadow:none}.cn-card.is-team{background:var(--tc);border-color:var(--tc);color:#fff}.cn-card.is-neutral{color:#4b4030;background:#c9b899;border-color:#c9b899}.cn-card.is-assassin{color:#fff;background:#191d25;border-color:#191d25}.cn-card.pending{outline:3px solid var(--amber);outline-offset:-3px}.cn-card.marked{outline:2px solid var(--amber-soft);outline-offset:-2px}.cn-card.pending,.cn-card.marked{padding-bottom:12px}.cn-confirm,.cn-mark{letter-spacing:.04em;text-transform:none;color:var(--amber);white-space:nowrap;text-overflow:ellipsis;padding:0 3px;font-size:8px;font-weight:800;position:absolute;bottom:3px;left:0;right:0;overflow:hidden}.cn-mark{color:#b07d17}.cn-controls{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.cn-controls .cn-note{flex:1;min-width:120px;font-size:12.5px}.cn-clue-input,.cn-count{font:inherit;color:var(--ink);background:var(--surf);border:1px solid var(--line);border-radius:10px;padding:10px 12px;font-size:16px}.cn-clue-input{flex:1;min-width:130px}.cn-cluebox{flex-direction:column;gap:10px;display:flex}.cn-nums{-webkit-overflow-scrolling:touch;gap:6px;padding:2px 0;display:flex;overflow-x:auto}.cn-num{border:1px solid var(--line);background:var(--surf);min-width:42px;height:42px;color:var(--ink);font:inherit;cursor:pointer;font-variant-numeric:tabular-nums;border-radius:10px;flex:none;font-size:15px;font-weight:800}.cn-num:hover{border-color:var(--amber)}.cn-num.on{background:var(--amber);border-color:var(--amber);color:#fff}.cn-seats{grid-template-columns:1fr 1fr;gap:10px;display:grid}.cn-seatcol{border:1px solid var(--line);background:color-mix(in srgb, var(--tc,#888) 10%, white);border-color:color-mix(in srgb, var(--tc,#888) 30%, white);border-radius:12px;flex-direction:column;gap:8px;padding:12px;display:flex}.cn-seatlab{letter-spacing:.12em;text-transform:uppercase;color:var(--tc,var(--ink));font-size:11px;font-weight:800}.cn-seatcol .btn{background:var(--surf)}.cn-you{align-items:center;gap:10px;padding:12px 14px;display:flex}.pill.cn-pill{background:color-mix(in srgb, var(--tc,#888) 12%, white);color:var(--tc,var(--ink));border-color:color-mix(in srgb, var(--tc,#888) 35%, white)}.cn-roster{flex-wrap:wrap;gap:8px;display:flex}.cn-who:not(.none){background:color-mix(in srgb, var(--tc,#888) 12%, white);border-color:color-mix(in srgb, var(--tc,#888) 35%, white);color:var(--tc,var(--ink))}.cn-who.off{opacity:.45}.cn-log{flex-direction:column;gap:7px;max-height:260px;padding-right:4px;display:flex;overflow-y:auto}.cn-logline{color:var(--muted);border-left:3px solid var(--tc,var(--line));flex:none;padding-left:10px;font-size:12.5px}.cn-logline.clue{background:color-mix(in srgb, var(--tc,#888) 10%, white);color:var(--tc,var(--ink));border-left-width:4px;border-radius:0 10px 10px 0;align-items:baseline;gap:8px;padding:7px 12px;display:flex}.cn-logline.clue strong{letter-spacing:.01em;font-size:14px}.cn-log-team{letter-spacing:.12em;text-transform:uppercase;opacity:.75;font-size:10px;font-weight:800}.cn-log-count{font-variant-numeric:tabular-nums;background:var(--surf);border-radius:999px;margin-left:auto;padding:1px 9px;font-size:12px;font-weight:800}.tv{z-index:200;color:#eef1f6;background:#0c0f14;flex-direction:column;gap:1.4vmin;padding:1.8vmin 2vmin;transition:background .4s;display:flex;position:fixed;inset:0;overflow:hidden}.tv-over{background:#12151c}.tv-head{flex-direction:column;align-items:center;gap:.8vmin;display:flex}.tv-tallies{flex-wrap:wrap;justify-content:center;gap:1.6vmin;display:flex}.tv-tally{color:color-mix(in srgb, var(--tc,#fff) 70%, white);border:.3vmin solid #0000;border-radius:1.4vmin;align-items:baseline;gap:1vmin;padding:.6vmin 2vmin;display:flex}.tv-tally .n{font-variant-numeric:tabular-nums;font-size:5vmin;font-weight:800;line-height:1}.tv-tally .l{letter-spacing:.2em;text-transform:uppercase;font-size:1.7vmin;font-weight:800}.tv-tally.on{background:color-mix(in srgb, var(--tc,#fff) 16%, transparent);border-color:color-mix(in srgb, var(--tc,#fff) 55%, transparent)}.tv-tally.down{opacity:.35}.tv-tally.down .l{text-decoration:line-through}.tv-mid{text-align:center;min-width:0}.tv-turn{letter-spacing:.14em;text-transform:uppercase;color:color-mix(in srgb, var(--tc,#fff) 75%, white);font-size:2.2vmin;font-weight:800}.tv-clue{color:#c4cddb;justify-content:center;align-items:center;gap:1.6vmin;min-width:0;margin-top:.6vmin;font-size:2.6vmin;display:flex}.tv-clue strong{letter-spacing:-.01em;text-transform:uppercase;color:#fff;overflow-wrap:anywhere;font-size:5.4vmin;font-weight:800}.tv-num{color:#fff;background:#ffffff1f;border-radius:1vmin;padding:.1vmin 1.6vmin;font-size:3.6vmin;font-weight:800}.tv-left{letter-spacing:.1em;text-transform:uppercase;color:#8d99ac;font-size:1.8vmin;font-weight:700}.tv-wait{color:#6f7c90;font-size:2.6vmin}.tv-timer{font-variant-numeric:tabular-nums;color:#dfe5ee;margin-top:.5vmin;font-size:3.4vmin;font-weight:800}.tv-timer.urgent{color:#ff6b5e;animation:1s infinite cn-pulse}.tv-banner{z-index:240;letter-spacing:.08em;text-transform:uppercase;text-align:center;color:#fff;background:var(--tc,#262c38);opacity:0;pointer-events:none;white-space:nowrap;border-radius:999px;width:fit-content;max-width:90vw;margin:0 auto;padding:2.4vmin 6vmin;font-size:5.5vmin;font-weight:800;position:fixed;top:42%;left:0;right:0;box-shadow:0 2vmin 6vmin #0000008c}.tv-board{flex:1;grid-template-rows:repeat(5,1fr);grid-template-columns:repeat(5,1fr);gap:1vmin;min-height:0;display:grid;container-type:size}.tv-card{text-align:center;color:#11151c;text-transform:uppercase;overflow-wrap:break-word;-webkit-hyphens:auto;hyphens:auto;font-weight:800;line-height:1.1;font-size:min(calc((105cqw / var(--cols,5)) / var(--n,8)), calc(40cqh / var(--cols,5)), calc((70cqh / var(--cols,5)) / var(--w,1)));background:#f4f6f9;border-radius:1.4vmin;justify-content:center;align-items:center;padding:1vmin .8vmin;transition:background .25s,color .25s;display:flex;position:relative;overflow:hidden}.tv-card>span:first-child{min-width:0}.tv-card.is-team{background:var(--tc);color:#fff}.tv-card.is-neutral{color:#3a3123;background:#c9b899}.tv-card.is-assassin{color:#ff6b5e;background:#05070a;box-shadow:inset 0 0 0 .4vmin #ff6b5e}.tv-card.end-team{background:color-mix(in srgb, var(--tc) 45%, black);color:color-mix(in srgb, var(--tc) 30%, white)}.tv-card.end-neutral{color:#efe7d8;background:#7d7259}.tv-card.end-assassin{color:#ff6b5e;background:#05070a}.tv-card.marked{padding-bottom:3.4vmin;box-shadow:0 0 0 .6vmin #e8a33d}.tv-mark{text-transform:none;color:#8a6b25;white-space:nowrap;text-overflow:ellipsis;padding:0 .8vmin;font-size:1.7vmin;font-weight:800;position:absolute;bottom:.8vmin;left:0;right:0;overflow:hidden}.tv-foot{color:#717e92;letter-spacing:.03em;justify-content:space-between;align-items:baseline;gap:2vmin;padding:0 .4vmin;font-size:2vmin;display:flex}.tv-foot strong{color:#dfe5ee}.tv-wins{color:#aeb9c9;letter-spacing:.06em;text-transform:uppercase;font-size:2vmin;font-weight:800}.tv-who{align-items:center;gap:1.4vmin;display:flex}.tv-qr{border-radius:1vmin;width:9vmin;height:9vmin}.tv-code-inline{letter-spacing:.2em;color:#fff;font-size:3.2vmin;font-weight:800}.tv-msg{text-align:center;justify-content:center;align-items:center}.tv-code{letter-spacing:.18em;font-size:12vmin;font-weight:800}.tv-msg p{color:#717e92;margin:1vmin 0 0;font-size:3vmin}@media (max-width:760px){.two{grid-template-columns:1fr}.cn-actionbar{z-index:110;box-shadow:var(--shadow-lg);padding-bottom:calc(14px + env(safe-area-inset-bottom));position:fixed;bottom:8px;left:8px;right:8px}.cn.docked{padding-bottom:170px}.cn-board{gap:5px;margin-inline:-10px}.cn-card{aspect-ratio:1/.92;border-radius:9px}.cn-board .cn-card{font-size:max(6px, min(13px, calc((95cqw / var(--cols,5)) / var(--n,8)), calc((50cqw / var(--cols,5)) / var(--w,1))))}.cn-score{gap:6px;padding:10px}.cn-tally{min-width:46px;padding:5px 7px}.cn-tally .n{font-size:22px}.cn-controls .cn-note{flex-basis:100%}.cn-controls .btn,.cn-controls .btn.primary{padding:11px 16px}.cn-seats{grid-template-columns:1fr 1fr!important}}@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}
