:root{--bg: #15130f;--panel: #221f19;--border: #4a4232;--text: #e8dfc8;--muted: #9a8f78;--accent: #d9a441;--good: #7fbf5a;--bad: #d0604d;font-family:system-ui,sans-serif;color:var(--text);background:var(--bg)}*{box-sizing:border-box}body{margin:0;min-height:100vh}h1,h2{margin:0 0 8px;font-weight:600}h2{font-size:15px;color:var(--accent)}ul,ol{margin:0 0 16px;padding:0;list-style:none}ol{list-style:decimal inside}button,input{font:inherit;color:var(--text);background:#2e2a22;border:1px solid var(--border);border-radius:4px;padding:6px 10px}button{cursor:pointer}button:hover:not(:disabled){border-color:var(--accent)}button:disabled{opacity:.4;cursor:not-allowed}.hidden{display:none!important}.muted{color:var(--muted);font-weight:400}.error{color:var(--bad);min-height:1.2em}.gold{color:#f0c94a;font-weight:400}.login{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100vh;gap:12px}.login form{display:flex;gap:8px}.game{display:grid;gap:8px;padding:8px;height:100vh;grid-template-columns:210px 1fr 290px;grid-template-rows:1fr 120px;grid-template-areas:"skills actions inventory" "chat chat inventory"}.panel{background:var(--panel);border:1px solid var(--border);border-radius:6px;padding:12px;overflow:auto}.skills{grid-area:skills}.actions{grid-area:actions}.inventory{grid-area:inventory}.chat{grid-area:chat;display:flex;flex-direction:column}.skills li{display:flex;justify-content:space-between;padding:6px 8px;border-radius:4px;cursor:pointer}.skills li:hover,.skills li.selected{background:#322c22}.skills li.busy:after{content:"●";color:var(--good);margin-left:6px}.skills ol li{cursor:default;display:list-item;padding:2px 0}.xpbar{position:relative;height:18px;background:#12100c;border-radius:4px;margin-bottom:16px;overflow:hidden}.xpbar div{height:100%;background:#3f6b2f}.xpbar span{position:absolute;top:0;right:0;bottom:0;left:0;text-align:center;font-size:12px;line-height:18px}.action-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:8px}.action{border:1px solid var(--border);border-radius:6px;padding:10px;display:flex;flex-direction:column;gap:6px}.action.locked{opacity:.5}.action.active{border-color:var(--good)}.action .meta{font-size:12px;color:var(--muted)}.action .progress{height:6px;background:#12100c;border-radius:3px;overflow:hidden}.action .progress div{height:100%;width:0;background:var(--good)}.inventory li{display:flex;justify-content:space-between;align-items:center;gap:6px;padding:4px 0}.inventory li button{padding:2px 8px;font-size:12px}#chat-log{flex:1;overflow-y:auto;font-size:14px;margin-bottom:8px}#chat-log .from{color:var(--accent)}#chat-input{width:100%}#toasts{position:fixed;bottom:16px;right:16px;display:flex;flex-direction:column;gap:6px}.toast{background:#2e2a22;border:1px solid var(--border);padding:8px 12px;border-radius:4px;animation:fade 4s forwards}.toast.bad{border-color:var(--bad)}@keyframes fade{0%,80%{opacity:1}to{opacity:0}}@media(max-width:800px){.game{height:auto;grid-template-columns:1fr;grid-template-rows:auto;grid-template-areas:"actions" "skills" "inventory" "chat"}.chat{height:240px}}.skills h3{font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);margin:12px 8px 4px}.skills li .lvl{color:var(--muted)}.bar{position:relative;height:16px;background:#12100c;border-radius:4px;overflow:hidden;margin:4px 0 10px}.bar>div{height:100%;background:#3f6b2f;transition:width .2s}.bar.hp>div{background:#9b3a2e}.bar.monster>div{background:#6b3f8f}.bar.step>div{background:var(--accent);transition:none}.bar>span{position:absolute;top:0;right:0;bottom:0;left:0;text-align:center;font-size:11px;line-height:16px}.class-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:10px}.class-card{border:1px solid var(--border);border-radius:6px;padding:12px;display:flex;flex-direction:column;gap:6px}.class-card p{margin:0;font-size:13px;color:var(--muted)}.abilities{display:grid;grid-template-columns:repeat(6,1fr);gap:6px;margin:8px 0 14px}.ability{border:1px solid var(--border);border-radius:6px;text-align:center;padding:6px 0}.ability b{display:block;font-size:18px}.ability small{color:var(--muted);text-transform:uppercase;font-size:11px}.stats{display:flex;flex-wrap:wrap;gap:6px 18px;margin-bottom:12px}.stats span b{color:var(--accent)}.equip-row{display:flex;justify-content:space-between;align-items:center;padding:4px 0;border-bottom:1px solid #2e2a22}.feature{margin:4px 0;font-size:13px}.feature.locked{opacity:.45}.credit{margin-top:18px;font-size:11px;color:var(--muted)}.credit p{margin:4px 0}.slot-pips{letter-spacing:2px;color:#7aa7d9}.areas{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:8px;margin-bottom:14px}.area{border:1px solid var(--border);border-radius:6px;padding:10px;display:flex;flex-direction:column;gap:4px}.area.active{border-color:var(--good)}.area p{margin:0;font-size:12px;color:var(--muted)}.fight{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:8px}.log{font-size:13px;max-height:170px;overflow-y:auto;border-top:1px solid var(--border);padding-top:6px}.log div{padding:1px 0}.log .hit{color:#e8dfc8}.log .crit{color:#ffcf5a;font-weight:600}.log .miss{color:var(--muted)}.log .hurt{color:#e08870}.log .heal{color:#8fd18a}.log .loot{color:#f0c94a}.log .level{color:#7fc6ff;font-weight:600}.log .bad{color:var(--bad);font-weight:600}.inventory li{flex-wrap:wrap}.inventory li.bank-row{flex-wrap:nowrap;padding:3px 0;gap:6px}.inventory li.bank-row .item-name{flex:1 1 auto;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.inventory li.bank-row button{padding:1px 6px;font-size:11px;white-space:nowrap}.inventory li.bank-row .item-buttons{flex-shrink:0;gap:4px}.inventory .item-name{flex:1 1 100%}.gear-summary{display:flex;flex-wrap:wrap;gap:6px 14px;margin:4px 0 8px}.gear-chip{display:inline-flex;align-items:center;gap:2px;font-size:13px}.leaderboard-box summary{font-size:15px}.inventory .item-desc{flex:1 1 100%;font-size:11px;color:var(--muted)}.inventory .item-buttons{display:flex;gap:6px;margin-left:auto}.inventory .qty{color:var(--accent);font-weight:600}.inventory li.bank-filter{justify-content:space-between;font-size:12px;border-bottom:none;padding-bottom:0}.inventory li.bank-group{font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);border-bottom:1px solid var(--border);padding:10px 0 2px}.area.locked{opacity:.5;border-style:dashed}.area.cleared strong{color:var(--good)}.area .buttons{display:flex;gap:6px}.area .buttons button{flex:1}h3.chapter{font-size:13px;color:var(--text);margin:14px 0 6px}.goal{border:1px solid #5a4a7a;background:#241f30;border-radius:6px;padding:6px 10px;font-size:13px}.difficulty{font-size:11px;font-weight:600;padding:1px 6px;border-radius:3px;vertical-align:middle}.difficulty.easy{background:#2f4a25;color:#a8e08c}.difficulty.medium{background:#4a4225;color:#f0d27a}.difficulty.hard{background:#4a2525;color:#f09a8c}.class-card.sealed{opacity:.6;border-style:dashed;text-align:center;align-items:center}.class-card .emblem{font-size:36px;line-height:1.2}.bar.done>div{background:#b8902f}button.retire{border-color:var(--accent);color:#ffd98a;margin-bottom:8px}.login input{min-width:180px}.donate-row{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:12px}.donate-row input{width:160px}.shop-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:6px;padding:0;list-style:none}.shop-grid li{display:flex;flex-wrap:wrap;gap:4px;align-items:center;border:1px solid #2e2a22;border-radius:6px;padding:6px 8px}.shop-grid .item-name{flex:1 1 100%}.shop-grid .item-desc{flex:1 1 100%;font-size:11px;color:var(--muted)}.shop-grid button{padding:1px 8px;font-size:12px}.shop-grid li.locked{opacity:.45}.town-columns{display:grid;grid-template-columns:2fr 1fr;gap:16px;align-items:start}@media(max-width:900px){.town-columns{grid-template-columns:1fr}}.camp-line{font-size:12px;color:var(--muted);margin:6px 0}.camp-line b{color:#8fd18a}.locked-tag{font-size:11px;color:var(--accent)}#chat-log .system{color:#f0c94a;font-style:italic}.rarity-uncommon{color:#7fd17a}.rarity-rare{color:#6fa8ff}.rarity-very-rare{color:#c58bff}.rarity-legendary{color:#ffa94d;font-weight:600}.log .magic{color:#ffa94d;font-weight:700;text-shadow:0 0 6px rgba(255,169,77,.4)}.equip-row .item-desc{font-size:11px;color:var(--muted)}.icon{display:inline-flex;width:1.3em;height:1.3em;vertical-align:-.3em;margin-right:6px;flex-shrink:0;color:var(--text)}.icon:empty{display:none}.icon svg{width:100%;height:100%}.icon-md{width:28px;height:28px;margin-right:4px}.icon-lg{width:26px;height:26px;vertical-align:-.45em}.icon-xl{width:64px;height:64px;margin:4px auto}.icon.emblem{color:#6f6656}.icon.emblem-inline{color:var(--accent);margin:0 4px}.skills li .icon{color:var(--accent)}.combatant{display:flex;gap:10px;align-items:center}.combatant>div{flex:1}.icon.portrait{width:56px;height:56px;padding:6px;border:1px solid var(--border);border-radius:8px;background:#17140f;margin:0}.icon.portrait.boss{border-color:#ffa94d;box-shadow:0 0 10px #ffa94d59}.foe-icons{display:flex;flex-wrap:wrap;gap:4px;margin:2px 0}.foe-icons .icon{color:#d9c9a8}.action strong .icon{width:22px;height:22px}.scene{position:relative;overflow:hidden;background:#0d0b09}.scene-svg{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;display:block}.card-scene{height:64px;margin:-10px -10px 8px;border-radius:6px 6px 0 0}.area.locked .card-scene{filter:grayscale(1) brightness(.5)}.login{position:relative;overflow:hidden}.login{background:linear-gradient(#0a110d,#1f3328 70%);justify-content:flex-start!important;padding-top:12vh}.login-scene{position:absolute;left:0;right:0;bottom:0;height:55vh;z-index:0;-webkit-mask-image:linear-gradient(to bottom,transparent,#000 35%);mask-image:linear-gradient(to bottom,transparent,#000 35%)}.login>:not(.login-scene){position:relative;z-index:1}.login h1{font-size:46px;letter-spacing:.04em;color:#ffd98a;text-shadow:0 2px 0 #3a2410,0 0 24px rgba(255,160,60,.45);margin:0}.login .tagline{margin:0 0 10px;color:#e8cfa0;text-shadow:0 1px 2px #000}.login form{background:#140e08b8;padding:14px;border-radius:8px;border:1px solid var(--border);flex-wrap:wrap;justify-content:center}.particles{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none}.particles span{position:absolute;width:var(--size);height:var(--size);border-radius:50%;opacity:0;animation:rise linear infinite}.particles-embers span{background:#ffb347;box-shadow:0 0 6px #ff7a1c}.particles-sparks span{background:#ff6aa8;box-shadow:0 0 8px #ff2a6a}.particles-spores span{background:#b5e07a;box-shadow:0 0 6px #8fd14a;animation-name:drift}.particles-fireflies span{background:#f4f0a0;box-shadow:0 0 8px #e8e060;animation-name:wander}.particles-dust span{background:#d8c8a8;opacity:.3;animation-name:drift}.particles-bubbles span{background:transparent;border:1px solid #9fe6f0;animation-name:rise}.particles-snow span{background:#fff;animation-name:fall}@keyframes rise{0%{transform:translateY(30px);opacity:0}15%{opacity:.9}to{transform:translate(var(--drift),-160px);opacity:0}}@keyframes fall{0%{transform:translateY(-60px);opacity:0}10%{opacity:.9}to{transform:translate(var(--drift),220px);opacity:.2}}@keyframes drift{0%{transform:translate(-20px);opacity:0}30%{opacity:.6}to{transform:translate(calc(var(--drift) * 2 + 40px),-30px);opacity:0}}@keyframes wander{0%,to{transform:translate(0);opacity:0}25%{opacity:1}50%{transform:translate(var(--drift),-20px);opacity:.4}75%{opacity:1}}.stage{position:relative;height:210px;margin:-12px -12px 12px;border-bottom:1px solid var(--border);border-radius:6px 6px 0 0;overflow:hidden}.stage-scene{position:absolute;top:0;right:0;bottom:0;left:0}.actors{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;grid-template-columns:1fr auto 1fr;align-items:end;padding:0 6% 18px}.phase.camp{align-self:end;display:flex;flex-direction:column;align-items:center;gap:4px;letter-spacing:0;font-size:13px}.phase.camp .node-sprite{animation:flicker .9s ease-in-out infinite alternate}.phase{align-self:center;font-weight:700;color:#ffd98a;text-shadow:0 0 8px #000,0 1px 2px #000;letter-spacing:.1em}.actor{display:flex;flex-direction:column;align-items:center;gap:4px;justify-self:center;width:170px}.actor.empty{visibility:hidden}.actor-name{font-size:12px;font-weight:600;text-shadow:0 1px 3px #000,0 0 6px #000;white-space:nowrap}.actor .icon.portrait{width:82px;height:82px;padding:10px;border-radius:50%;border:2px solid #8a7a5a;background:radial-gradient(circle at 50% 35%,#3a3226,#15110c);box-shadow:0 6px 14px #0009;margin:0;color:#f0e2c0}.actor.foe .icon.portrait{border-color:#7a4a4a;color:#f0c8b8}.actor.foe .portrait{animation:bob 3.2s ease-in-out infinite}.actor.boss .icon.portrait{border-color:#ffa94d;animation:bob 3.2s ease-in-out infinite,boss-glow 2s ease-in-out infinite}.actor.boss .sprite{animation:bob 3.2s ease-in-out infinite,boss-aura 2s ease-in-out infinite}.actor.you.low .icon.portrait{border-color:var(--bad);animation:low-pulse 1s ease-in-out infinite}.actor.gone{animation:gone-fade .5s ease-in 1.8s forwards}@keyframes gone-fade{to{opacity:0;transform:translateY(20px)}}.actor.entering{animation:enter .6s ease-out}.hpbar{position:relative;width:150px;height:12px;background:#000000b3;border:1px solid rgba(255,255,255,.15);border-radius:6px;overflow:hidden}.hpbar .fill,.hpbar .ghost{position:absolute;left:0;top:0;bottom:0}.hpbar .ghost{background:#f0d080;transition:width .9s ease-in .25s}.hpbar .fill{background:linear-gradient(#c94a3a,#8a2a20);transition:width .25s ease-out}.hpbar.foe .fill{background:linear-gradient(#9a5ac9,#5a2a8a)}.hpbar span{position:absolute;top:0;right:0;bottom:0;left:0;font-size:9px;line-height:12px;text-align:center;text-shadow:0 1px 1px #000}@keyframes bob{0%,to{transform:translateY(0)}50%{transform:translateY(-4px)}}@keyframes boss-glow{0%,to{box-shadow:0 0 10px #ffa94d66,0 6px 14px #0009}50%{box-shadow:0 0 24px #ffa94dcc,0 6px 14px #0009}}@keyframes boss-aura{0%,to{filter:drop-shadow(0 0 4px rgba(255,169,77,.5)) drop-shadow(0 6px 4px rgba(0,0,0,.6))}50%{filter:drop-shadow(0 0 12px rgba(255,169,77,.9)) drop-shadow(0 6px 4px rgba(0,0,0,.6))}}@keyframes low-pulse{50%{box-shadow:0 0 16px #d0604de6}}@keyframes enter{0%{transform:translate(60px) scale(.8);opacity:0}to{transform:none;opacity:1}}.actor.hit .portrait{animation:hit .35s}.actor.hit-hard .portrait{animation:hit-hard .5s}.actor.dodge .portrait{animation:dodge .4s}.actor.lunge-right .portrait{animation:lunge-right .4s}.actor.lunge-left .portrait{animation:lunge-left .4s}.actor.cast .icon.portrait{animation:cast .5s}.actor.healed .icon.portrait{animation:healed .6s}.actor.burn .icon.portrait{animation:burn .7s}.actor.zap .icon.portrait{animation:zap .6s}.actor.dying,.actor.gone.dying{animation:dying 1.1s forwards}.actor.cast .sprite{animation:cast-sprite .5s}.actor.healed .sprite{animation:healed-sprite .6s}.actor.burn .sprite{animation:burn-sprite .7s}.actor.zap .sprite{animation:zap-sprite .6s}.actor.you.low .sprite{animation:low-sprite 1s ease-in-out infinite}@keyframes cast-sprite{40%{filter:drop-shadow(0 0 10px #9ad0ff) brightness(1.2)}}@keyframes healed-sprite{40%{filter:drop-shadow(0 0 10px #7fd17a) brightness(1.3)}}@keyframes burn-sprite{30%{filter:drop-shadow(0 0 12px #ff7a1c) brightness(1.5) sepia(.6)}}@keyframes zap-sprite{30%{filter:drop-shadow(0 0 10px #c58bff) brightness(1.6) hue-rotate(40deg)}}@keyframes low-sprite{50%{filter:drop-shadow(0 0 8px rgba(208,96,77,.9))}}@keyframes hit{30%{transform:translate(-6px);filter:brightness(1.8) saturate(.4)}60%{transform:translate(5px)}}@keyframes hit-hard{20%{transform:translate(-10px) rotate(-6deg);filter:brightness(2.2)}50%{transform:translate(8px) rotate(4deg)}}@keyframes dodge{50%{transform:translate(-14px) translateY(-6px);opacity:.6}}@keyframes lunge-right{40%{transform:translate(40px) scale(1.08)}}@keyframes lunge-left{40%{transform:translate(-40px) scale(1.08)}}@keyframes cast{40%{box-shadow:0 0 26px #9ad0ff,0 0 8px #fff;transform:scale(1.06)}}@keyframes healed{40%{box-shadow:0 0 26px #7fd17a;filter:brightness(1.3)}}@keyframes burn{30%{box-shadow:0 0 30px #ff7a1c,inset 0 0 20px #ff4a1c;filter:brightness(1.5) sepia(.6)}}@keyframes zap{30%{box-shadow:0 0 26px #c58bff;filter:brightness(1.6) hue-rotate(40deg)}}@keyframes dying{30%{transform:translateY(-6px) rotate(-8deg);filter:brightness(2)}to{transform:translateY(30px) rotate(20deg) scale(.6);opacity:0;filter:grayscale(1)}}.stage.shake{animation:shake .35s}.stage.defeat-flash:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:radial-gradient(transparent 30%,#a0000099);animation:flash .9s forwards}@keyframes shake{25%{transform:translate(4px,-2px)}50%{transform:translate(-4px,2px)}75%{transform:translate(2px,1px)}}@keyframes flash{0%{opacity:1}to{opacity:0}}.sprite{image-rendering:pixelated;flex-shrink:0}.hero-sprite{--cell: 192px;width:var(--cell);height:var(--cell);background-repeat:no-repeat;background-size:calc(var(--cols) * var(--cell)) calc(var(--rows) * var(--cell));margin:calc(var(--cell) * -.3) calc(var(--cell) * -.15) calc(var(--cell) * -.26);filter:drop-shadow(0 4px 3px rgba(0,0,0,.55))}.monster-sprite{height:auto;filter:drop-shadow(0 6px 4px rgba(0,0,0,.6))}.monster-sprite.small{width:72px}.monster-sprite.large{width:96px}.monster-sprite.huge{width:128px}.workbench{position:relative;height:160px;margin:0 0 12px;border:1px solid var(--border);border-radius:6px;overflow:hidden;display:flex;align-items:flex-end;justify-content:center}.workbench .scene{position:absolute;top:0;right:0;bottom:0;left:0}.bench-actors{position:absolute;bottom:0;left:50%;transform:translate(-70%);display:flex;justify-content:center}.workbench .hero-sprite{position:relative;z-index:1;--cell: 200px;margin-bottom:calc(var(--cell) * -.2)}.node{position:absolute;z-index:0;line-height:0}.node-sprite{image-rendering:pixelated;filter:drop-shadow(0 3px 2px rgba(0,0,0,.5))}.node.struck{animation:struck .18s}@keyframes struck{30%{transform:translate(2px,1px);filter:brightness(1.35)}70%{transform:translate(-1px)}}.node.lit .node-sprite{animation:flicker .9s ease-in-out infinite alternate}@keyframes flicker{0%{filter:drop-shadow(0 0 4px rgba(255,140,30,.5)) brightness(1)}to{filter:drop-shadow(0 0 10px rgba(255,160,40,.8)) brightness(1.12)}}.node .ripple{position:absolute;left:62%;top:30%;width:26px;height:8px;border:2px solid rgba(190,225,255,.7);border-radius:50%;opacity:0}.working .node .ripple{animation:ripple 1.6s ease-out infinite}@keyframes ripple{0%{transform:scale(.3);opacity:.9}to{transform:scale(1.6);opacity:0}}.debris{position:absolute;width:4px;height:4px;z-index:2;pointer-events:none;animation:debris .55s ease-out forwards}@keyframes debris{0%{transform:translate(0);opacity:1}60%{transform:translate(var(--dx),var(--dy));opacity:1}to{transform:translate(calc(var(--dx) * 1.3),calc(var(--dy) * -.2 + 20px));opacity:0}}.workbench .caption{position:absolute;left:10px;top:8px;font-size:13px;font-weight:600;text-shadow:0 1px 3px #000,0 0 6px #000}.fx-layer{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none}.float{position:absolute;transform:translate(-50%);font-weight:800;font-size:20px;white-space:nowrap;text-shadow:0 2px 0 #000,0 0 6px #000;animation:float-up 1.3s ease-out forwards}.float.dmg{color:#fff1d0}.float.hurt{color:#ff8a70}.float.crit{color:#ffd34a;font-size:26px}.float.heal{color:#8fe08a}.float.miss{color:#b8b0a0;font-size:15px;font-style:italic}@keyframes float-up{0%{opacity:0;transform:translate(-50%,10px) scale(.7)}15%{opacity:1;transform:translate(-50%) scale(1.15)}30%{transform:translate(-50%,-6px) scale(1)}to{opacity:0;transform:translate(-50%,-60px)}}.d20{position:absolute;width:34px;height:34px;display:grid;place-items:center;font-weight:800;font-size:14px;color:#1a1408;background:#e8dcc0;clip-path:polygon(50% 0,100% 25%,100% 75%,50% 100%,0 75%,0 25%);animation:roll 1.2s ease-out forwards}.d20.hit{background:#f0e2c0}.d20.miss{background:#8a8270}.d20.nat20{background:#ffd34a;box-shadow:0 0 12px #ffd34a}.d20.nat1{background:#d0604d;color:#fff}@keyframes roll{0%{transform:rotate(-200deg) scale(.3);opacity:0}30%{transform:rotate(15deg) scale(1.15);opacity:1}45%{transform:rotate(0) scale(1)}85%{opacity:1}to{opacity:0;transform:translateY(-10px)}}#fx-global{position:fixed;top:0;right:0;bottom:0;left:0;pointer-events:none;z-index:50;display:flex;flex-direction:column;align-items:center;padding-top:70px;gap:8px}.banner{--banner-color: #ffd98a;font-size:30px;font-weight:800;letter-spacing:.04em;color:var(--banner-color);padding:10px 28px;background:linear-gradient(90deg,transparent,rgba(20,14,8,.92) 20%,rgba(20,14,8,.92) 80%,transparent);text-shadow:0 0 18px var(--banner-color),0 2px 0 #000;animation:banner 2.6s ease-out forwards}.banner.skill{font-size:20px;--banner-color: #9fd0ff}.banner.magic{font-size:26px}.banner.scenario{--banner-color: #ffd34a}@keyframes banner{0%{opacity:0;transform:scale(.6)}12%{opacity:1;transform:scale(1.08)}20%{transform:scale(1)}80%{opacity:1}to{opacity:0;transform:translateY(-20px)}}.pop{position:fixed;transform:translate(-50%);display:flex;align-items:center;font-weight:800;color:#ffe9a8;text-shadow:0 1px 2px #000;animation:float-up 1.2s ease-out forwards}.pop .icon{width:22px;height:22px}.toast{animation:toast-in .25s ease-out,fade 4s forwards}@keyframes toast-in{0%{transform:translate(30px);opacity:0}}button{transition:border-color .15s,transform .1s}button:active:not(:disabled){transform:scale(.96)}.reduce-motion *,.reduce-motion *:before,.reduce-motion *:after{animation:none!important;transition:none!important}.reduce-motion .particles{display:none}@media(max-width:800px){.stage{height:180px}.actor{width:120px}.actor .icon.portrait{width:62px;height:62px}.hero-sprite{--cell: 150px}.monster-sprite.small{width:56px}.monster-sprite.large{width:76px}.monster-sprite.huge{width:100px}.hpbar{width:110px}}.guide{border:1px solid var(--accent);background:linear-gradient(135deg,#d9a44129,#d9a4410a);border-radius:8px;padding:10px 14px;margin-bottom:12px}.guide-head{display:flex;justify-content:space-between;align-items:baseline}.guide-head strong{color:#ffd98a}.guide p{margin:6px 0 8px}.guide-buttons{display:flex;gap:10px;align-items:center;flex-wrap:wrap}button.primary{background:#6b4a1a;border-color:var(--accent);color:#fff3d8;font-weight:600;padding:7px 14px}button.primary:hover{background:#7d5820}button.link{background:none;border:none;color:var(--muted);text-decoration:underline;padding:0;font-size:12px}details.section{border-top:1px solid #2e2a22;padding:6px 0}details.section>summary{cursor:pointer;color:var(--accent);font-weight:600;font-size:15px;padding:4px 0;list-style:none}details.section>summary:before{content:"▸ ";color:var(--muted)}details.section[open]>summary:before{content:"▾ "}.panel-head{display:flex;justify-content:space-between;align-items:center}.icon-btn{background:none;border:1px solid transparent;padding:0 4px;font-size:16px;line-height:1.2}.icon-btn:hover{border-color:var(--border)}.head-buttons{display:flex;flex-shrink:0;gap:2px}.icon-btn.off{opacity:.35;text-decoration:line-through}.skill-bonus{margin:-4px 0 12px;font-size:13px}.skill-bonus b{color:var(--accent)}.pop.bonus{color:#ffd34a;font-size:18px;text-shadow:0 0 8px rgba(255,211,74,.6),0 1px 2px #000}.settings-dialog{background:var(--panel, #1d1a15);color:inherit;border:1px solid var(--accent);border-radius:10px;padding:18px 22px;width:min(420px,calc(100vw - 32px))}.settings-dialog::backdrop{background:#0009}.settings-dialog h2{margin:0 0 6px}.settings-dialog h3{margin:14px 0 6px;font-size:13px;text-transform:uppercase;letter-spacing:.08em;color:var(--muted)}.setting{display:grid;grid-template-columns:110px 1fr 44px;align-items:center;gap:10px;margin:8px 0}.setting.check{grid-template-columns:auto 1fr}.setting.check small{grid-column:2}.setting select{grid-column:2 / span 2;background:#17140f;color:inherit;border:1px solid var(--border);border-radius:4px;padding:4px 6px}.setting input[type=range]{width:100%;accent-color:var(--accent)}.setting-value{text-align:right;font-variant-numeric:tabular-nums;color:var(--muted)}.settings-dialog .small{font-size:12px}.dialog-buttons{display:flex;justify-content:flex-end;margin-top:10px}.gear-link{margin:6px 0 4px}.gear-slot{margin-top:10px}.gear-slot h3{margin:0 0 4px;font-size:13px;text-transform:uppercase;letter-spacing:.08em;color:var(--muted)}.gear-row{display:grid;grid-template-columns:1fr auto auto auto;align-items:center;gap:10px;padding:6px 8px;border:1px solid #2e2a22;border-radius:6px;margin-bottom:4px}.gear-row.worn{background:#d9a44112;border-color:#4a3f2a;grid-template-columns:1fr auto}.gear-row.best{border-color:var(--good);box-shadow:0 0 0 1px #7fd17a40 inset}.gear-row.unusable{opacity:.55}.gear-row .item-desc{font-size:11px;color:var(--muted)}.delta{font-size:12px;font-weight:700;margin-right:6px;white-space:nowrap}.delta.up{color:var(--good)}.delta.down{color:var(--bad)}.best-tag{font-size:11px;font-weight:700;color:#0f1a0e;background:var(--good);border-radius:10px;padding:1px 8px}.small{font-size:12px}.bounties{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-bottom:6px}.bounty{display:flex;flex-direction:column;gap:6px;border:1px solid var(--border);border-radius:6px;padding:8px 10px;background:#00000026}.bounty.done{border-color:var(--good);box-shadow:0 0 0 1px #7fd17a40 inset}.bounty.claimed{opacity:.55}.bounty-actions{display:flex;gap:14px;align-items:center;margin-bottom:10px}@media(max-width:900px){.bounties{grid-template-columns:1fr}}.siege-card{border:1px solid #a8422a;border-radius:8px;padding:10px 12px;margin-bottom:12px;background:linear-gradient(135deg,#a8422a2e,#0000001a)}.siege-head{display:flex;gap:12px;align-items:center}.siege-head h2{margin:0 0 4px;color:#ffb38a}.siege-head p{margin:0 0 6px;font-size:13px}.siege-row{display:flex;justify-content:space-between;align-items:center;gap:10px;margin:6px 0}.siege-card ol{margin:4px 0 0;padding-left:0;list-style:none;display:flex;flex-wrap:wrap;gap:4px 16px;font-size:12px;color:var(--muted)}.siege-quiet{font-size:12px}.titles{margin:-4px 0 8px;color:#ffcf6e;font-size:13px;font-weight:600}.command-toggle{display:block;font-size:13px;margin:6px 0;cursor:pointer}.command-bar{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;margin:4px 0}.command-bar button{padding:8px 6px;font-weight:600}.command-bar button.queued{outline:2px solid var(--accent)}.command-bar button.urgent:not(.queued){border-color:#ff6a4a;animation:urgent .6s ease-in-out infinite alternate}@keyframes urgent{to{box-shadow:0 0 14px #ff6a4ab3}}.command-status{display:block;color:var(--muted)}.command-status.urgent{color:#ff8a6a;font-weight:700}.stage .telegraph{position:absolute;left:50%;top:10px;transform:translate(-50%);font-weight:800;font-size:18px;color:#ff8a6a;text-shadow:0 0 10px #000,0 2px 0 #000;animation:urgent-text .6s ease-in-out infinite alternate;pointer-events:none}@keyframes urgent-text{to{transform:translate(-50%) scale(1.12)}}
