:root{--bg: #1c1917;--panel: #262220;--panel-2: #2f2a27;--ink: #ece5d8;--ink-dim: #a9a093;--accent: #c8892f;--accent-2: #6fae5e;--danger: #b4432e;--border: #3a332f}*{box-sizing:border-box}body{margin:0;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;background:var(--bg);color:var(--ink)}.app{max-width:1400px;margin:0 auto;padding:12px 16px 24px}.topbar{display:flex;align-items:center;gap:16px;flex-wrap:wrap;padding-bottom:12px;border-bottom:1px solid var(--border)}.topbar h1{font-size:20px;margin:0;letter-spacing:.5px;color:var(--accent)}.status{display:flex;gap:10px;align-items:center}.round{font-weight:600}.phase{font-size:12px;text-transform:uppercase;letter-spacing:1px;padding:2px 8px;border-radius:999px;background:var(--panel-2);color:var(--ink-dim)}.phase-won{background:var(--accent-2);color:#12210d}.phase-lost{background:var(--danger);color:#fff}.controls{margin-left:auto;display:flex;gap:8px}button{font:inherit;cursor:pointer;background:var(--panel-2);color:var(--ink);border:1px solid var(--border);border-radius:6px;padding:7px 12px}button:hover:not(:disabled){border-color:var(--accent)}button:disabled{opacity:.45;cursor:not-allowed}button.primary{background:var(--accent);color:#221701;border-color:var(--accent);font-weight:600}button.active{outline:2px solid var(--accent)}.result-banner{margin:12px 0;padding:12px 16px;border-radius:8px;font-size:18px;font-weight:700;text-align:center}.result-banner.won{background:var(--accent-2);color:#12210d}.result-banner.lost{background:var(--danger);color:#fff}.layout{display:grid;grid-template-columns:1fr 380px;gap:16px;margin-top:14px}@media(max-width:960px){.layout{grid-template-columns:1fr}}.board-wrap{background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:12px}.board{width:100%;height:auto;display:block}.board-note{color:var(--ink-dim);font-size:12px;margin:8px 4px 2px}.hex-coord{fill:#8c7f6f;font-size:8px;opacity:.55}.actor-initial{fill:#fff;font-size:20px;font-weight:700}.actor-hp{fill:#fff;font-size:11px;font-weight:600;paint-order:stroke;stroke:#1b1712;stroke-width:2px}.sidebar{display:flex;flex-direction:column;gap:14px}.sidebar h2{font-size:13px;text-transform:uppercase;letter-spacing:1px;color:var(--ink-dim);margin:0 0 8px}.monsters,.heroes{background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:12px}.monsters ul{list-style:none;margin:0;padding:0}.monsters li{display:flex;justify-content:space-between;gap:8px;font-size:13px;padding:4px 0}.monsters li.dead{opacity:.4;text-decoration:line-through}.hero-panel{background:var(--panel-2);border:1px solid var(--border);border-radius:8px;padding:10px;margin-bottom:12px}.hero-panel:last-child{margin-bottom:0}.hero-head{display:flex;justify-content:space-between;align-items:baseline}.hero-name{font-weight:700}.hero-stats{font-size:13px;color:var(--ink-dim)}.shield{color:#7fb0e0}.retaliate{color:#e0873f}.conds{color:#b98cd0;text-transform:capitalize}.cond-dot{stroke:#1b1712;stroke-width:1.5}.cond-poison{fill:#6fae5e}.cond-wound{fill:#b4432e}.cond-stun{fill:#d8c341}.cond-immobilize{fill:#7f8a9a}.cond-disarm{fill:#8a6d3b}.cond-muddle{fill:#b98cd0}.cond-strengthen{fill:#e0a54a}.cond-curse{fill:#4a2f5a}.cond-bless{fill:khaki}.cond-letter{fill:#1b1712;font-size:11px;font-weight:700}.stunned-note{color:var(--ink-dim);font-style:italic;font-size:13px}.door-mark{fill:#5a2f10;stroke:#e0a060;stroke-width:2}.turn-head{display:flex;align-items:center;justify-content:space-between;gap:8px}.turn-head h2{margin:0}button.undo{font-size:12px;padding:3px 10px}.loot-coin{fill:#e6c34a;stroke:#8a6d1f;stroke-width:2}.loot-chest{fill:#b8862d;stroke:#5a2f10;stroke-width:2}.hero-stats .coins{color:#e6c34a}.objective{font-size:13px;color:var(--accent)}.objective-pick{background:#2f2a27;color:inherit;border:1px solid #4a423c;border-radius:6px;padding:5px 8px;font-size:13px}.obj-flag{font-size:20px;fill:#d4a017;paint-order:stroke;stroke:#1b1712;stroke-width:2}.elite-ring{fill:none;stroke:#d4a017;stroke-width:2.5;stroke-dasharray:4 3}.elite-tag{margin-left:6px;color:#d4a017;font-size:11px;font-weight:700;letter-spacing:.04em}.monster-card{margin-left:6px;color:var(--accent);font-style:italic;font-size:12px}.trap-mark polygon{fill:#c0392b;stroke:#7c1f14;stroke-width:1.5;opacity:.9}.trap-bang{fill:#fff;font-size:11px;font-weight:700}.hint-banner{margin:12px 0;padding:10px 14px;border-radius:8px;background:#2f2a27;border:1px solid var(--accent);color:var(--accent);font-size:14px;text-align:center}.hp-bar{height:6px;background:#402c28;border-radius:3px;overflow:hidden;margin:6px 0 10px}.hp-fill{height:100%;background:var(--accent-2);transition:width .2s}.exhausted-note{font-size:13px;color:var(--danger);font-style:italic}.mode-toggle{display:flex;gap:6px;margin-bottom:8px}.mode-toggle button{flex:1;padding:5px;font-size:13px}.card-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}.card{width:100%;text-align:left;display:grid;grid-template-columns:1fr auto;gap:2px 8px;padding:7px 9px}.card.selected{outline:2px solid var(--accent);background:#37302b}.card-name{font-weight:600;font-size:13px}.role-badge{margin-left:6px;font-size:10px;background:var(--accent);color:#221701;padding:1px 5px;border-radius:4px;vertical-align:middle}.card-init{font-size:11px;color:var(--ink-dim);text-align:right}.card-actions{grid-column:1 / -1;display:flex;gap:12px;font-size:12px;color:var(--ink-dim)}.resolved{margin-top:10px;padding-top:8px;border-top:1px dashed var(--border);font-size:12px}.resolved-line{margin-bottom:6px}.resolved-controls{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.resolved-controls select{font:inherit;margin-left:4px;background:var(--panel);color:var(--ink);border:1px solid var(--border);border-radius:4px;padding:2px 4px}.rest-hint{font-size:12px;color:var(--ink-dim);margin-bottom:6px}.log-panel{background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:12px}.log-title{font-size:13px;text-transform:uppercase;letter-spacing:1px;color:var(--ink-dim);margin-bottom:8px}.log-body{max-height:320px;overflow-y:auto;font-family:ui-monospace,Cascadia Code,Menlo,monospace;font-size:12px;line-height:1.5}.log-line{white-space:pre-wrap;color:var(--ink-dim)}.log-line.round{color:var(--accent);font-weight:700;margin-top:4px}.log-line.banner{color:var(--ink);font-weight:700}.log-line.muted{opacity:.6}.hl{cursor:pointer;transition:fill-opacity .1s}.hl-move{fill:#6fae5e;fill-opacity:.32;stroke:#8fd07a;stroke-width:3}.hl-jump{fill:#4f9fd0;fill-opacity:.32;stroke:#7cc4ea;stroke-width:3;stroke-dasharray:7 5}.hl-attack{fill:#e0603f;fill-opacity:.3;stroke:#ff8a63;stroke-width:3}.hl:hover{fill-opacity:.6}.element-strip{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:8px}.element{font-size:12px;padding:3px 8px;border-radius:999px;border:1px solid var(--border);background:var(--panel-2);text-transform:capitalize}.el-fire{color:#e0603f}.el-ice{color:#7fd0e0}.el-air{color:#cfd8dc}.el-earth{color:#9ab05f}.el-light{color:khaki}.el-dark{color:#a98cd8}.el-state-strong{border-color:currentColor;font-weight:700}.el-state-waning{opacity:.65}.el-state-inert{opacity:.3}.init-strip{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:10px}.init-chip{font-size:12px;padding:3px 8px;border-radius:999px;border:1px solid var(--border);background:var(--panel-2);color:var(--ink-dim)}.init-chip.hero{border-color:#2e6db4}.init-chip.monster{border-color:#b4432e}.init-chip.current{outline:2px solid var(--accent);color:var(--ink);font-weight:700}.init-chip.past{opacity:.45;text-decoration:line-through}.turn-panel{background:var(--panel);border:1px solid var(--accent);border-radius:10px;padding:12px}.turn-panel h2{color:var(--accent);margin-bottom:6px}.action-list{list-style:none;margin:10px 0 0;padding:0;display:flex;flex-direction:column;gap:8px}.action{background:var(--panel-2);border:1px solid var(--border);border-radius:8px;padding:8px 10px}.action.active{outline:2px solid var(--accent)}.action.done{opacity:.55}.action-head{display:flex;justify-content:space-between;align-items:center;font-weight:600;font-size:14px}.action-head .check{color:var(--accent-2)}.action-controls{display:flex;gap:8px;margin-top:8px}.action-controls button{flex:1;padding:5px;font-size:13px}.action-controls button.ghost{flex:0 0 auto;color:var(--ink-dim)}.turn-hint{margin:10px 2px 0;font-size:13px;color:var(--accent)}
