:root{--bg:#12161f;--panel:#1a2030;--panel-2:#222a3d;--ink:#e9e7df;--ink-2:#b8bcc8;--muted:#7f869a;--rule:#2c3549;--accent:#d9536a;--accent-soft:#3a1f27;--gold:#c9a86a;--good:#2fb36a;--warn:#e0a531;--duke:#7b5cd6;--assassin:#3b4252;--captain:#2f7fd3;--ambassador:#2f9e6a;--contessa:#c9474e}*{box-sizing:border-box}html,body{background:var(--bg);color:var(--ink);-webkit-font-smoothing:antialiased;margin:0;font-family:"Source Sans 3",system-ui,-apple-system,Segoe UI,sans-serif;font-size:16px;line-height:1.45}button{font:inherit;cursor:pointer}a{color:var(--gold)}h1,h2,h3{letter-spacing:-.005em;text-wrap:balance;margin:0;font-family:Newsreader,Georgia,serif;font-weight:600}.wrap{max-width:64rem;margin:0 auto;padding:0 1rem}.home{text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:1.4rem;min-height:100dvh;padding:2rem 1rem;display:flex}.home h1{font-size:clamp(2.6rem,7vw,4.2rem);line-height:1}.home .sub{color:var(--ink-2);font-family:Newsreader,Georgia,serif;font-size:1.15rem;font-style:italic}.card{background:var(--panel);border:1px solid var(--rule);border-radius:10px;padding:1.1rem 1.2rem}.stack{flex-direction:column;gap:.7rem;display:flex}.row{flex-wrap:wrap;align-items:center;gap:.6rem;display:flex}input[type=text]{font:inherit;border:1px solid var(--rule);background:var(--panel-2);color:var(--ink);border-radius:8px;width:100%;min-width:0;padding:.65rem .8rem}input.code{letter-spacing:.35em;text-align:center;text-transform:none;font-family:ui-monospace,Menlo,monospace;font-size:1.3rem}.btn{border:1px solid var(--rule);background:var(--panel-2);color:var(--ink);border-radius:8px;padding:.7rem 1.1rem;font-weight:600;transition:transform 50ms,background .15s}.btn:hover{background:#2a3450}.btn:active{transform:translateY(1px)}.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn.primary:hover{background:#e2687c}.btn.ghost{background:0 0}.btn.danger{background:#5a2330;border-color:#7a2f40}.btn:disabled{opacity:.45;cursor:not-allowed}.btn.small{padding:.4rem .7rem;font-size:.9rem}.err{color:#ff8a96;font-size:.95rem}.muted{color:var(--muted)}.eyebrow{letter-spacing:.14em;text-transform:uppercase;color:var(--muted);font-size:.75rem;font-weight:700}.big-code{letter-spacing:.3em;color:var(--gold);font-family:ui-monospace,Menlo,monospace;font-size:2.6rem}.board{grid-template-columns:minmax(0,1fr) 20rem;gap:1rem;padding:1rem 0 3rem;display:grid}@media (max-width:860px){.board{grid-template-columns:1fr}}.topbar{border-bottom:1px solid var(--rule);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:1rem;padding:.7rem 0;display:flex}.topbar .code{letter-spacing:.2em;color:var(--gold);font-family:ui-monospace,Menlo,monospace}.players{grid-template-columns:repeat(auto-fill,minmax(13rem,1fr));gap:.7rem;display:grid}.player{background:var(--panel);border:1px solid var(--rule);border-radius:10px;padding:.8rem .9rem;position:relative}.player.turn{border-color:var(--gold);box-shadow:0 0 0 1px var(--gold) inset}.player.you{background:#1c2436}.player.dead{opacity:.55}.player .name{justify-content:space-between;align-items:center;gap:.5rem;font-weight:700;display:flex}.player .coins{font-variant-numeric:tabular-nums;color:var(--gold);font-weight:700}.cards{flex-wrap:wrap;gap:.4rem;margin-top:.5rem;display:flex}.cardc{letter-spacing:.02em;text-align:center;color:#fff;border:1px solid #ffffff26;border-radius:6px;justify-content:center;align-items:flex-end;width:3.2rem;height:4.6rem;padding:.3rem;font-size:.72rem;font-weight:700;line-height:1.1;display:flex}.cardc.back{color:#0000;background:repeating-linear-gradient(45deg,#2a3145 0 6px,#232a3c 6px 12px)}.cardc.r0{background:var(--duke)}.cardc.r1{background:var(--assassin)}.cardc.r2{background:var(--captain)}.cardc.r3{background:var(--ambassador)}.cardc.r4{background:var(--contessa)}.cardc.dead{opacity:.5;filter:grayscale(.6);text-decoration:line-through}.cardc.pick{cursor:pointer;outline:2px solid #0000;transition:transform 80ms}.cardc.pick:hover{transform:translateY(-3px)}.cardc.selected{outline:3px solid var(--gold)}.chips{flex-wrap:wrap;gap:.3rem;margin-top:.45rem;display:flex}.chip{background:var(--panel-2);border:1px solid var(--rule);color:var(--ink-2);border-radius:999px;padding:.1rem .45rem;font-size:.72rem}.chip.claim{border-color:var(--gold);color:var(--gold)}.panel{background:var(--panel);border:1px solid var(--rule);border-radius:10px;padding:1rem 1.1rem}.panel h3{margin-bottom:.5rem;font-size:1.15rem}.actions{grid-template-columns:repeat(auto-fill,minmax(9.5rem,1fr));gap:.55rem;display:grid}.action{border:1px solid var(--rule);background:var(--panel-2);color:var(--ink);text-align:left;border-radius:8px;padding:.7rem .8rem}.action b{display:block}.action small{color:var(--muted)}.action:hover:not(:disabled){background:#2a3450}.action:disabled{opacity:.4;cursor:not-allowed}.timer{font-variant-numeric:tabular-nums;color:var(--warn);font-weight:700}.log{background:var(--panel);border:1px solid var(--rule);border-radius:10px;max-height:70vh;padding:.8rem 1rem;font-size:.92rem;overflow:auto}.log .e{border-bottom:1px solid var(--rule);color:var(--ink-2);padding:.25rem 0}.log .e:last-child{color:var(--ink);border-bottom:0}.banner{background:var(--accent-soft);border:1px solid var(--accent);text-align:center;border-radius:10px;padding:1rem 1.2rem}.banner h2{font-size:1.8rem}.modal-bg{z-index:50;background:#0009;justify-content:center;align-items:center;padding:1rem;display:flex;position:fixed;inset:0}.modal{background:var(--panel);border:1px solid var(--rule);border-radius:12px;width:100%;max-width:44rem;max-height:85vh;padding:1.4rem 1.5rem;overflow:auto}.modal h2{margin-bottom:.6rem;font-size:1.6rem}.modal p,.modal li{color:var(--ink-2)}table.cheat{border-collapse:collapse;width:100%;font-size:.95rem}table.cheat td,table.cheat th{border-bottom:1px solid var(--rule);text-align:left;vertical-align:top;padding:.4rem .5rem}table.cheat th{color:var(--muted);letter-spacing:.1em;text-transform:uppercase;font-size:.75rem}.dot{vertical-align:-1px;border-radius:50%;width:.7rem;height:.7rem;margin-right:.35rem;display:inline-block}.pulse{animation:1.2s ease-in-out infinite pulse}@keyframes pulse{0%,to{opacity:1}50%{opacity:.45}}@media (prefers-reduced-motion:reduce){.pulse{animation:none}}.footer{color:var(--muted);margin-top:1rem;font-size:.85rem}
