@font-face{font-family:RoseSerif;src:url('./display.woff2') format('woff2');font-display:swap;font-weight:500 700}
:root{color-scheme:dark;--table:#191c1b;--raised:#252a27;--paper:#eee5d3;--ink:#242823;--muted:#b6bcaf;--gold:#d8c79e;--red:#a23e39;--line:#41483f;--display:RoseSerif,'Noto Serif SC',serif;--body:-apple-system,BlinkMacSystemFont,'PingFang SC','Microsoft YaHei',sans-serif}
*{box-sizing:border-box}body{margin:0;background:var(--table);color:var(--paper);font:15px/1.6 var(--body);padding-bottom:env(safe-area-inset-bottom);-webkit-tap-highlight-color:transparent}button,input,select{font:inherit}button,a,input{touch-action:manipulation}button{cursor:pointer}button:disabled{cursor:default;opacity:.45}button,a{transition:background .18s,color .18s}a{color:var(--gold);text-underline-offset:4px}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible{outline:3px solid var(--gold);outline-offset:4px}::selection{background:var(--gold);color:var(--ink)}input{caret-color:var(--gold)}::-webkit-scrollbar{width:6px}::-webkit-scrollbar-thumb{background:var(--line);border-radius:6px}h1,h2,h3,p{margin:0}h1,h2,h3{font-family:var(--display);font-weight:600;text-wrap:balance}h1{font-size:38px;line-height:1.3}h2{font-size:24px;line-height:1.4}h3{font-size:18px;line-height:1.5}small,.muted{color:var(--muted)}button{min-height:48px;border:0;border-radius:12px;padding:11px 18px;background:var(--raised);color:var(--paper)}button:hover:not(:disabled){background:#353d33}.primary{background:var(--paper);color:var(--ink);font-weight:650}.primary:hover:not(:disabled){background:#dcd0b9}.danger{background:var(--red);color:#fff4e7}.danger:hover:not(:disabled){background:#bb4a43}.outline{background:none;border:1px solid var(--line)}.text-button{background:none;padding:8px 10px;color:var(--gold);min-height:44px}.icon-button{width:48px;min-width:48px;padding:4px;font-size:24px;line-height:1}.row{display:flex;align-items:center;gap:10px}.between{justify-content:space-between}.stack{display:grid;gap:12px}.topbar{max-width:1000px;margin:auto;display:flex;align-items:center;justify-content:space-between;padding:12px 22px;padding-top:max(12px,env(safe-area-inset-top));border-bottom:1px solid var(--line)}.brand{display:flex;gap:9px;align-items:center;text-decoration:none;color:var(--paper);font-size:14px;font-weight:600}#app{max-width:960px;margin:auto;padding:22px}.home{max-width:440px;margin:0 auto}.home-title{text-align:center;margin:10px 0 8px}.home-title h1 span{display:block}.home-title p{color:var(--muted);margin-top:14px;font-size:14px}.fan{height:206px;margin:20px 12px 30px;display:flex;justify-content:center;align-items:center;isolation:isolate}.fan .playing-card{height:182px;width:112px;min-width:112px;pointer-events:none;box-shadow:0 14px 28px #0008}.fan .playing-card:nth-child(1){transform:rotate(-13deg) translate(14px,8px)}.fan .playing-card:nth-child(2){transform:translateY(-8px);z-index:2}.fan .playing-card:nth-child(3){transform:rotate(13deg) translate(-14px,8px)}.home-actions{display:grid;grid-template-columns:1fr 1fr;gap:12px}.home-actions button{min-height:56px}.practice-link{display:block;margin:14px auto 0}.home-foot{margin:20px 0;text-align:center;color:var(--muted);font-size:12px}.home-foot a{color:inherit}.resume{margin:20px 0 0;border-top:1px solid var(--line);padding-top:15px;display:flex;justify-content:space-between;align-items:center;gap:10px}.playing-card{position:relative;overflow:hidden;display:flex;flex-direction:column;background:var(--paper);color:var(--ink);border-radius:12px;padding:9px;min-width:0;isolation:isolate}.playing-card .art{flex:1;min-height:55px;width:100%;background-image:url('./card-art.webp');background-size:300% 100%;background-position:left center;border-radius:6px;position:relative}.playing-card.blade .art{background-position:center center}.playing-card.ghost .art{background-position:right center}.playing-card .card-top{display:flex;justify-content:space-between;font-size:11px;font-weight:650;margin-bottom:7px}.playing-card.blade .card-top{color:#8b312b}.card-title{font-family:var(--display);font-size:18px;font-weight:600;text-align:center;margin-top:6px}.card-en{text-align:center;font:8px/1.4 var(--body);letter-spacing:.12em;color:#565e52}.playing-card .symbol{width:16px;height:16px}.symbol{width:22px;height:22px;display:inline-block;vertical-align:middle;flex-shrink:0}.form-label{display:block;font-size:14px;margin:14px 0 7px}.field{width:100%;min-height:52px;padding:12px 14px;border:1px solid var(--line);border-radius:12px;background:#1e2320;color:var(--paper);font-size:16px}.field::placeholder{color:#a0a997}.room-code{letter-spacing:.13em;text-transform:uppercase;font-variant-numeric:tabular-nums}.sheet-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:16px}dialog{width:min(calc(100vw - 24px),500px);max-height:85dvh;margin:auto;border:1px solid var(--line);border-radius:16px;background:var(--table);color:var(--paper);padding:22px;box-shadow:0 24px 80px #0009}dialog::backdrop{background:#0009}dialog p{margin:12px 0}dialog h3{margin-top:24px;margin-bottom:8px}dialog .primary{width:100%;margin-top:20px}.rule-list{padding-left:20px;color:var(--muted)}.rule-list li{margin:12px 0}.spells{display:grid;gap:0}.spell-row{padding:12px 0;border-bottom:1px solid var(--line)}.spell-row strong{color:var(--gold)}.spell-row p{margin:4px 0 0;color:var(--muted);font-size:14px}#notice{position:fixed;bottom:max(22px,env(safe-area-inset-bottom));left:50%;transform:translateX(-50%);width:max-content;max-width:calc(100vw - 32px);padding:12px 18px;background:var(--paper);color:var(--ink);box-shadow:0 8px 30px #0007;border-radius:12px;z-index:10;font-size:14px}.room-head{margin-bottom:20px;display:flex;justify-content:space-between;align-items:center;gap:8px}.room-head h1{font-size:26px}.room-head .sub{color:var(--muted);font-size:12px;margin-top:5px}.code-button{padding:7px 12px;min-height:44px;letter-spacing:.12em;font-variant-numeric:tabular-nums;color:var(--gold);border:1px solid var(--line);background:none}.lobby{max-width:460px;margin:0 auto}.lobby .intro{margin:20px 0 24px}.seat-list{border-top:1px solid var(--line)}.seat-row{display:flex;align-items:center;gap:12px;min-height:72px;border-bottom:1px solid var(--line);padding:10px 0}.seat-number{font-variant-numeric:tabular-nums;font-family:var(--display);font-size:22px;color:var(--gold);width:24px}.seat-info{flex:1;min-width:0}.seat-info strong{font-size:15px;font-weight:600;overflow-wrap:anywhere}.seat-info small{display:block;font-size:12px}.seat-ready{font-size:12px;color:var(--muted)}.seat-ready.yes{color:var(--gold)}.lobby-actions{margin-top:24px}.lobby-note{font-size:13px;color:var(--muted);margin:14px 0}.game{max-width:470px;margin:0 auto}.scores{display:grid;grid-template-columns:1fr 1fr;border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding:14px 0;gap:20px;margin-bottom:18px}.score label{display:flex;align-items:center;gap:6px;color:var(--muted);font-size:12px}.score strong{font-family:var(--display);font-size:25px;line-height:1.5;font-variant-numeric:tabular-nums}.score small{font-size:12px;margin-left:5px}.score.blade{color:#e18c7e}.track{display:flex;gap:4px;margin-top:5px}.track i{display:block;flex:1;height:3px;background:#41483f}.track i.filled{background:var(--gold)}.score.blade .track i.filled{background:#d5786b}.seats{display:flex;flex-wrap:wrap;gap:8px;margin:12px 0 22px}.seat-chip{width:calc((100% - 32px)/5);text-align:center;position:relative;padding:6px 0;color:var(--muted);font-size:11px;overflow-wrap:anywhere}.avatar{width:34px;height:34px;display:grid;place-items:center;margin:0 auto 3px;border-radius:50%;background:var(--raised);font-size:13px;color:var(--paper);border:1px solid transparent}.seat-chip.active .avatar{border-color:var(--gold);color:var(--gold)}.seat-chip.mine .avatar{background:#3b4436}.seat-chip .coin{position:absolute;top:0;right:calc(50% - 26px);color:var(--gold);width:14px;height:14px}.seat-state{display:block;font-size:10px;color:var(--gold);height:15px}.stage{margin:0 0 22px}.stage h2{font-size:24px}.stage .explain{margin-top:7px;color:var(--muted);font-size:14px}.magic-banner{padding:14px 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line);margin-bottom:18px}.magic-banner strong{font-size:14px;color:var(--gold)}.magic-banner p{font-size:12px;color:var(--muted);margin-top:4px}.identity-toggle{display:flex;align-items:center;justify-content:space-between;width:100%;padding:12px 14px;background:var(--raised);text-align:left}.identity-toggle strong{font-size:14px}.identity-toggle small{font-size:12px}.private-info{padding:14px 0 4px}.private-info h3{font-size:21px}.private-info p{color:var(--muted);font-size:13px;margin:7px 0}.private-info .knowledge{color:var(--gold);padding-top:8px;border-top:1px solid var(--line);margin-top:12px}.hand-title{display:flex;justify-content:space-between;align-items:center;margin:24px 0 12px}.hand-title h3{font-family:var(--body);font-size:14px;font-weight:600}.hand-title small{font-size:11px}.hand{display:flex;gap:9px;justify-content:center;align-items:flex-start;padding:8px 0 4px}.hand button.playing-card{width:calc((100% - 18px)/3);height:176px;padding:8px;transition:transform .2s cubic-bezier(.16,1,.3,1);box-shadow:0 9px 18px #0005}.hand button.playing-card:hover:not(:disabled){background:var(--paper)}.hand button.playing-card.selected{transform:translateY(-9px);outline:2px solid var(--gold);outline-offset:3px}.hand .playing-card:disabled{opacity:.68;cursor:default}.hand .playing-card .card-title{font-size:19px}.hand .playing-card .card-en{font-size:8px}.hand.large{flex-wrap:wrap}.hand.large button.playing-card{width:calc((100% - 27px)/4);height:160px}.action-bar{display:flex;gap:10px;margin-top:20px}.action-bar .primary,.action-bar .danger{flex:1;min-width:0}.action-bar .outline{min-width:82px}.card-note{font-size:12px;color:var(--muted);margin-top:12px;min-height:38px}.empty-hand{padding:30px 0;color:var(--muted);text-align:center}.targets{display:grid;grid-template-columns:1fr 1fr;gap:9px;margin-top:15px}.target{border:1px solid var(--line);text-align:left;background:none;min-height:55px}.target.selected{background:var(--paper);color:var(--ink);border-color:var(--paper)}.target small{color:inherit;opacity:.75}.target:last-child:nth-child(odd){grid-column:1/-1}.wait-line{font-size:13px;color:var(--muted);margin:18px 0}.table-foot{border-top:1px solid var(--line);margin-top:26px;padding-top:12px;display:flex;justify-content:space-between;align-items:center}.table-foot button{font-size:12px;min-height:44px}.network{font-size:11px;color:var(--muted);display:flex;align-items:center;gap:5px}.network::before{content:'';width:5px;height:5px;background:var(--gold);border-radius:50%}.network.error{color:#e6a095}.network.error::before{background:#e6a095}.results{display:flex;gap:7px;flex-wrap:wrap;margin:18px 0}.result-card{background:var(--paper);color:var(--ink);min-width:55px;flex:1;text-align:center;padding:10px 7px;border-radius:8px;font-size:12px}.result-card.blade{background:#7c302d;color:#fff0df}.result-card.ghost{background:var(--raised);color:var(--muted)}.result-card small{display:block;color:inherit;font-size:10px;opacity:.8}.history-entry{padding:16px 0;border-bottom:1px solid var(--line)}.history-entry h3{font-size:16px}.history-entry p{font-size:13px;color:var(--muted);margin:6px 0}.end-title{text-align:center;padding:20px 0}.end-title .symbol{width:55px;height:55px;margin-bottom:14px;color:var(--gold)}.end-title h2{font-size:30px}.end-title p{font-size:14px;margin-top:12px;color:var(--muted)}.reveal-row{display:flex;justify-content:space-between;padding:11px 0;border-bottom:1px solid var(--line)}.reveal-row .blade{color:#e79b8e}.loading{padding:60px 0;text-align:center}.loading p{margin-top:14px;color:var(--muted)}.rules-table{width:100%;border-collapse:collapse;font-size:13px;margin:16px 0}.rules-table th,.rules-table td{border-bottom:1px solid var(--line);padding:8px;text-align:center}.smallprint{font-size:11px;color:var(--muted);margin-top:18px}.copy-row{display:flex;gap:8px}.copy-row input{min-width:0;font-size:13px}.all-ready{color:var(--gold)}
@media(min-width:760px){.topbar{padding:16px 26px}#app{padding:36px 22px}.home{margin-top:6px}.home-title h1{font-size:43px}.fan{height:230px}.fan .playing-card{width:130px;min-width:130px;height:210px}.game,.lobby{max-width:470px}.hand button.playing-card{height:194px}.room-head h1{font-size:30px}}
@media(max-width:360px){#app{padding:18px 16px}.topbar{padding-left:16px;padding-right:16px}h1{font-size:32px}.fan{margin-left:0;margin-right:0;height:185px}.fan .playing-card{min-width:99px;width:99px;height:167px}.hand button.playing-card{height:155px}.card-title{font-size:17px}.action-bar button{padding-left:12px;padding-right:12px}dialog{padding:18px}.seat-chip{font-size:10px}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{transition:none!important;animation:none!important}}

/* The phone table keeps card selection close to the current action. */
.game .room-head{margin-bottom:12px}.game .room-head h1{font-size:24px}.game .scores{padding:10px 0;margin-bottom:12px}.game .score strong{font-size:23px}.game .seats{margin:8px 0 12px}.game .seat-chip{padding:2px 0}.game .magic-banner{padding:9px 0;margin-bottom:13px}.game .stage{margin-bottom:15px}.game .stage h2{font-size:22px}.game .stage .explain{margin-top:4px;font-size:13px}.game .hand-title{margin:14px 0 5px}.game .action-bar{margin-top:14px}.game .table-foot{margin-top:18px}.private-controls{display:flex;align-items:center;gap:8px}.private-controls .identity-toggle{flex:1;min-width:0;white-space:nowrap;padding:10px 12px}.private-controls .identity-toggle strong{font-size:13px}.private-controls .text-button{font-size:12px;white-space:nowrap;padding:8px 4px}.private-controls .symbol{width:18px;height:18px}.private-info h3{margin-top:12px}.private-info p{font-size:14px}

.text-button,.code-button,.table-foot button{min-height:48px}

dialog{border:0}
button.target.selected:hover:not(:disabled){background:var(--paper);color:var(--ink)}

/* Roles in the same faction have distinct illustrations, with one shared paper frame. */
.playing-card[data-card-type="rose"] .art{background-image:url('./rose-v3.webp');background-size:cover;background-position:center}
.playing-card[data-card-type="bishop"] .art{background-image:url('./bishop-v2.webp');background-size:cover;background-position:center top}
.playing-card[data-card-type="believer"] .art{background-image:url('./believer-v2.webp');background-size:cover;background-position:center}
.topbar-actions{display:flex;align-items:center;gap:4px}.topbar-actions a{display:inline-flex;align-items:center;text-decoration:none;font-size:13px}
