/* Ashen Vespers — extension layer (v0.6.x). Loaded after the inline styles. */

/* ---- Use more of the screen: keep only half of the landscape side safe-area (Dynamic Island / corners). ---- */
#safe-probe{padding:var(--sa-t,env(safe-area-inset-top,0px)) calc(var(--sa-r,env(safe-area-inset-right,0px))*.5) calc(var(--sa-b,0px)*.35) calc(var(--sa-l,env(safe-area-inset-left,0px))*.5)!important}
/* v0.12.2 full-bleed: the frame fills the screen, the 960-wide game sits in the reduced safe area, backgrounds bleed out */
#frame{border-radius:0!important;box-shadow:none!important;background:#07060a!important}
#frame>#app,#frame>#effects{position:absolute!important;right:auto!important;bottom:auto!important;left:var(--app-x,0px)!important;top:var(--app-y,0px)!important;width:var(--app-w,100%)!important;height:var(--app-h,100%)!important}
#frame>#effects{overflow:visible!important}
#app>section{overflow:visible!important}
#app .scene-bg{left:calc(-1*var(--bleed-l,0px))!important;right:calc(-1*var(--bleed-r,0px))!important;top:calc(-1*var(--bleed-t,0px))!important;bottom:calc(-1*var(--bleed-b,0px))!important}
#app .topbar:before,#app .battle-dock:before,#app .bottom-bar:before{content:"";position:absolute;z-index:-1;pointer-events:none;background:inherit;border:inherit;box-shadow:none}
#app .topbar:before{left:calc(-1*var(--bleed-l,0px));right:calc(-1*var(--bleed-r,0px));top:calc(-1*var(--bleed-t,0px));bottom:-1px}
#app .battle-dock:before,#app .bottom-bar:before{left:calc(-1*var(--bleed-l,0px));right:calc(-1*var(--bleed-r,0px));top:-1px;bottom:calc(-1*var(--bleed-b,0px))}

/* ---- Battle dock −20%, arena gets the space; characters drawn larger ---- */
.battle-dock{height:132px!important;padding:6px 12px 3px!important;gap:3px!important}
.battle .arena{bottom:132px!important}
.action-row{height:56px!important;gap:10px!important;grid-template-columns:150px 1fr 124px!important}
.actor-face{width:52px!important;height:54px!important}
.actor-panel h3{font-size:18px!important;margin:0 0 1px!important}
.actor-panel .small,.actor-panel p{font-size:13px!important;line-height:1.25!important}
.skill-btn{min-height:54px!important;font-size:15.5px!important;gap:2px!important}
.skill-btn .skill-paint{width:30px!important;height:27px!important}
.confirm-skill{min-height:54px!important;font-size:17px!important;padding:5px 8px!important}
.confirm-skill small{font-size:12.5px!important}
.battle-cmds{margin:2px 0 1px!important;gap:5px!important}
.battle-cmds .btn{min-height:28px!important;font-size:13px!important;padding:2px 6px!important}
.battle .action-hint{height:24px!important;line-height:22px!important;font-size:15.5px!important;flex:0 0 24px!important}
.unit .sprite.painted-sprite{scale:1.14;transform-origin:50% 100%}
.unit.enemy.boss .sprite.painted-sprite{scale:1.2}

/* ---- Town / map bottom bars −20% ---- */
.town .bottom-bar,.map .bottom-bar,.result .bottom-bar{min-height:62px!important;padding:5px 20px!important}
.town .bottom-bar .btn,.map .bottom-bar .btn,.result .bottom-bar .btn{min-height:50px!important;font-size:18px!important;min-width:128px!important}
.town .bottom-bar .copy,.map .bottom-bar .copy{font-size:17px!important}
.town .bottom-bar .copy .small,.map .bottom-bar .copy .small{font-size:13.5px!important}
.map-board{bottom:62px!important}
.town>.roster{margin-bottom:80px!important}

/* ---- Map: 5-row layers ---- */
.map-node.tiny{height:52px!important}
.map-node.tiny .node-mark{width:40px!important;height:38px!important}
.map-node.tiny .node-mark .ico{width:19px!important;height:19px!important}
.map-node.tiny .node-name{font-size:11.5px!important}

/* ---- Tactics: guard link + formation buttons ---- */
.unit .fx-guard-badge{position:absolute;left:50%;bottom:58px;transform:translateX(-50%);z-index:7;display:flex;align-items:center;gap:3px;padding:1px 6px;font-size:12.5px;white-space:nowrap;background:#16233acc;border:1px solid #7fb2e0aa;color:#cfe6ff;border-radius:2px;pointer-events:none}
.unit.fx-protector .unit-foot{box-shadow:inset 0 0 0 2px #6fa8dc,0 0 12px #6fa8dc66!important}
.fx-guard-flash{position:absolute;width:120px;height:120px;margin:-60px;border-radius:50%;border:3px solid #9fd0ff;box-shadow:0 0 24px #7fc0ff,inset 0 0 18px #7fc0ff88;animation:fxGuard .5s ease-out forwards;pointer-events:none}
@keyframes fxGuard{0%{transform:scale(.4);opacity:1}100%{transform:scale(1.4);opacity:0}}
.fx-move-row{display:flex;gap:8px;margin:0 0 10px}
.fx-move-row .btn{flex:1;min-height:48px;font-size:17px}
.fx-ally-pick{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.fx-ally-pick .btn{min-height:52px;font-size:17px;flex-direction:column;gap:0}
.fx-ally-pick .btn small{font-size:12px;opacity:.75}

/* ---- Story: dialogue box / cutscene / trap ---- */
.fx-dlg{position:absolute;inset:0;z-index:90;animation:fxFade2 .25s ease-out}
.fx-dlg.out{animation:fxOut2 .25s ease-in forwards}
@keyframes fxFade2{from{opacity:0}}@keyframes fxOut2{to{opacity:0}}
.fx-dlg.talk{background:linear-gradient(0deg,#000a,transparent 45%)}
.fx-dlg-bg{position:absolute;inset:0;background:#07050a center/cover no-repeat;filter:brightness(.72)}
.fx-dlg.cut .fx-dlg-bg:after{content:"";position:absolute;inset:0;background:linear-gradient(0deg,#050308f2,transparent 55%,#05030888)}
.fx-dlg-box{position:absolute;left:28px;right:28px;bottom:18px;min-height:96px;display:flex;align-items:center;gap:16px;padding:14px 46px 14px 18px;background:linear-gradient(#18101cf2,#0c080ff7);border:1px solid #c89a5e;box-shadow:0 0 0 3px #07050999,0 8px 30px #000c}
.fx-dlg.cut .fx-dlg-box{bottom:40px;background:linear-gradient(#120c15e6,#09060ce6)}
.fx-dlg-face{width:78px;height:78px;object-fit:cover;object-position:50% 12%;border:1px solid #b88f5a;flex:0 0 auto;background:#1a1218}
.fx-dlg-copy b{display:block;color:#ffd38a;font-size:17px;letter-spacing:2px;margin-bottom:4px}
.fx-dlg-copy p{margin:0;color:#f1e3cb;font-size:20px;line-height:1.55;font-family:'Noto Serif CJK TC','Songti TC',serif}
.fx-dlg-next{position:absolute;right:16px;bottom:10px;color:#e3b872;font-size:14px;animation:fxBob 1s infinite}
@keyframes fxBob{50%{transform:translateY(4px)}}
.fx-dlg-skip{position:absolute;right:16px;top:12px;min-height:40px;padding:0 16px;background:#140c10cc;border:1px solid #8a6c4a;color:#e8d4b2;font-size:15px}
.fx-trap{position:absolute;inset:0;z-index:88;display:flex;align-items:center;justify-content:center}
.fx-trap-panel{position:relative;max-width:640px;padding:18px 22px;background:#0f0a10ee;border:1px solid #c8574a;box-shadow:0 0 30px #b8261c55}
.fx-trap-panel h2{margin:4px 0 6px;color:#ff9d8a;font-size:32px;letter-spacing:6px}
.fx-trap-panel p{margin:0 0 12px;color:#f0dcc4;font-size:18px}
.fx-trap-actions{display:flex;gap:8px}
.fx-trap-actions .btn{flex:1;min-width:0!important;min-height:58px;flex-direction:column;gap:2px;font-size:17px}
.fx-trap-actions .btn small{font-size:12px;opacity:.8;font-weight:400}
.fx-event-art{height:110px;margin:-6px 0 10px;background:center/cover;border:1px solid #6b553d;filter:brightness(.85)}

/* ---- Town hub ---- */
.fx-hub{position:absolute;left:0;right:0;top:92px;bottom:62px;overflow:hidden}
.fx-hub-bg{position:absolute;inset:0;background:center 58%/cover no-repeat;filter:brightness(.92) saturate(.95)}
.fx-hub:after{content:"";position:absolute;inset:0;background:linear-gradient(0deg,#0d0a10cc,transparent 34%),linear-gradient(180deg,#0d0a1088,transparent 20%);pointer-events:none}
.fx-spot{position:absolute;z-index:3;transform:translate(-50%,-50%);background:none;border:0;padding:0;display:flex;flex-direction:column;align-items:center;gap:3px;min-width:64px;min-height:44px}
.fx-spot-pin{width:16px;height:16px;border-radius:50%;background:radial-gradient(circle,#ffe2a8 0 30%,#e3963f 45%,transparent 70%);box-shadow:0 0 12px #ffb35c;animation:nodePulse 1.8s infinite}
.fx-spot-name{padding:3px 9px;background:#120c12e6;border:1px solid #c89a5e;color:#f3dfbd;font-size:15px;white-space:nowrap;letter-spacing:1px;box-shadow:0 2px 8px #000a}
.fx-spot-name i{font-style:normal;color:#e3b872;font-size:11px;margin-left:5px}
.fx-spot:active .fx-spot-name{background:#5a2c26}
.fx-party-strip{position:absolute;left:14px;bottom:8px;z-index:4;display:flex;gap:6px}
.fx-pmem{position:relative;width:84px;height:82px;padding:0;border:1px solid #a88256;background:#140e14e6;overflow:hidden;display:block}
.fx-pmem img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:50% 15%}
.fx-pmem b{position:absolute;left:3px;top:2px;width:20px;height:20px;border-radius:50%;background:#130e14ee;border:1px solid #ba9768;color:#ffd38a;font-size:12px;display:grid;place-items:center}
.fx-pmem span{position:absolute;left:0;right:0;bottom:0;padding:2px 4px;background:linear-gradient(0deg,#0d0a10f2,transparent);color:#f3e1c4;font-size:13px;text-align:left}
.fx-pmem span small{float:right;color:#e3b872;font-size:10px;margin-top:2px}
.fx-pedit{display:grid;place-items:center;color:#ffd38a;font-size:14px;line-height:1.3;border-style:dashed}
.fx-wallet{display:flex;align-items:center;gap:4px}
.fx-icon{width:44px;height:44px;object-fit:cover;border:1px solid #6b553d;background:#130d12;flex:0 0 auto}
.fx-icon.mini{width:18px;height:18px;border:0;background:none;border-radius:3px}
.fx-fac-head{position:relative;display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:80px;margin:-6px 0 8px;padding:8px 12px;background:center/cover;border:1px solid #6b553d}
.fx-fac-head:before{content:"";position:absolute;inset:0;background:linear-gradient(90deg,#0c080ff2 35%,#0c080f55)}
.fx-fac-head>*{position:relative}
.fx-fac-head h3{margin:0 0 2px;color:#ffd9a0;font-size:19px}
.fx-fac-head h3 small{font-size:13px;color:#e3b872}
.fx-fac-head p{margin:0;font-size:13.5px;line-height:1.4;color:#e8d8bf}
.fx-fac-head .btn{min-height:52px;flex-direction:column;gap:0;font-size:16px;min-width:130px}
.fx-fac-head .btn small{font-size:11.5px;opacity:.8}
.fx-item-row{display:flex;align-items:center;gap:10px;padding:6px 0;border-top:1px solid #6b553d44}
.fx-item-row .item-copy{flex:1;display:flex;flex-direction:column;font-size:16px}
.fx-item-row .btn{min-height:42px;font-size:14px;min-width:110px}
.fx-recruit{display:flex;align-items:center;gap:12px;padding:8px 0;border-top:1px solid #6b553d44}
.fx-recruit img{width:74px;height:96px;object-fit:cover;object-position:50% 10%;border:1px solid #a88256}
.fx-recruit h4{margin:0 0 2px;color:#ffd9a0;font-size:18px}.fx-recruit h4 small{color:#c9b18f;font-size:12.5px}
.fx-recruit p{margin:2px 0}
.fx-recruit>div{flex:1}
.fx-recruit .btn{min-width:120px;min-height:52px;flex-direction:column;gap:0;font-size:16px}
.fx-recruit .btn small{font-size:11px;opacity:.85}
.fx-party-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.fx-pcard{display:flex;gap:8px;align-items:center;padding:6px;border:1px solid #6b553d66;background:#140e14cc}
.fx-pcard.on{border-color:#e3b872;background:linear-gradient(#3a2320cc,#160f14cc)}
.fx-pcard.focus{box-shadow:0 0 0 2px #ffd38a55}
.fx-pface{position:relative;width:64px;height:76px;padding:0;border:1px solid #a88256;overflow:hidden;background:#111;flex:0 0 auto}
.fx-pface img{width:100%;height:100%;object-fit:cover;object-position:50% 12%}
.fx-pface b{position:absolute;left:2px;top:2px;width:22px;height:22px;border-radius:50%;background:#130e14ee;border:1px solid #ba9768;color:#ffd38a;font-size:13px;display:grid;place-items:center}
.fx-pinfo{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.fx-pinfo strong{font-size:16px;color:#f3e1c4}.fx-pinfo strong small{color:#c9b18f;font-size:11.5px;font-weight:400}
.fx-pinfo .small{font-size:12px!important}
.fx-slots{display:flex;gap:4px;margin-top:2px}
.fx-slot{width:44px;height:44px;padding:0;border:1px solid #7b6446;background:#0f0a0e;display:grid;place-items:center}
.fx-slot .fx-icon{width:42px;height:42px;border:0}
.fx-slot-empty{font-size:11px;color:#8d7a62}
.fx-order{display:flex;flex-direction:column;gap:4px}
.fx-order button{width:34px;height:34px;padding:0;border:1px solid #7b6446;background:#1d1419;color:#ffd38a}
.fx-order button:disabled{opacity:.3}
.reward-chip .fx-icon{width:24px;height:24px;border:0;background:none}

/* ---- Battle v0.6.1: full-screen arena + floating dock + formation rows ---- */
.battle.fx-float .arena{top:0!important;bottom:0!important}
.battle.fx-float .scene-bg{inset:0!important;background-position:center 40%!important}
.battle.fx-float .battle-dock{background:linear-gradient(0deg,#0b080ef2,#120c12d9 70%,#120c1299)!important;border-top:1px solid #c59a5e88!important;transform:translateY(calc(100% + 4px));transition:transform .22s cubic-bezier(.2,.8,.3,1);z-index:40!important}
.battle.fx-float.fx-dock-open .battle-dock{transform:none}
.fx-dock-handle{position:absolute;left:50%;bottom:4px;transform:translateX(-50%);z-index:41;min-width:84px;min-height:40px;padding:0 10px;border:1px solid #8a6c4a;background:#140c12e6;color:#e8d4b2;font-size:15px;letter-spacing:1px;border-radius:3px;transition:bottom .22s cubic-bezier(.2,.8,.3,1)}
.battle.fx-float.fx-dock-open .fx-dock-handle{bottom:136px;min-height:28px;font-size:12.5px;min-width:70px;opacity:.9}
.fx-dock-handle.attn{border-color:#e3b872;color:#ffe2ad;animation:nodePulse 1.6s infinite}
.fx-dock-handle:disabled{opacity:.55}
.battle.fx-float .fx-controls{top:52px!important}
.battle.fx-float .fx-tut{top:52px!important}
.battle.fx-float .resonance{top:60px!important}
.battle.fx-float .unit{transition:none}
.battle.fx-float .unit.fx-far .sprite.painted-sprite{scale:1.08!important}
.battle.fx-float .unit.fx-near .sprite.painted-sprite{scale:1.22!important}
.battle.fx-float .unit.enemy.boss.fx-near .sprite.painted-sprite{scale:1.32!important}
/* v0.13.1: painted atlases extend past unit box; allow right bleed within scaled frame */
section.battle.fx-float .arena{overflow:visible!important}
.battle.fx-float .unit.fx-far .unit-foot{opacity:.92;transform:scale(.9);transform-origin:50% 100%}
.battle.fx-float .unit.fx-far .stage-shadow{opacity:.6}

/* ---- VFX sprites & cut-ins ---- */
.fx-vfx{position:absolute;pointer-events:none;background:center/contain no-repeat;mix-blend-mode:normal;z-index:3;animation:fxVfx .48s ease-out forwards;transform:rotate(var(--rot,0deg))}
@keyframes fxVfx{0%{opacity:0;transform:rotate(var(--rot,0deg)) scale(.55)}18%{opacity:1}100%{opacity:0;transform:rotate(var(--rot,0deg)) scale(1.18)}}
.fx-vfx.fx-linger{animation-name:fxLinger}
@keyframes fxLinger{0%{opacity:0;transform:scale(.6)}20%{opacity:.95}70%{opacity:.8}100%{opacity:0;transform:scale(1.35) translateY(-14px)}}
.fx-tracer{position:absolute;height:26px;margin-top:-13px;transform-origin:0 50%;background:center/100% 100% no-repeat;mix-blend-mode:normal;pointer-events:none;z-index:3;animation:fxTracer .26s ease-out forwards}
@keyframes fxTracer{0%{clip-path:inset(0 100% 0 0);opacity:1}45%{clip-path:inset(0 0 0 0);opacity:1}100%{clip-path:inset(0 0 0 80%);opacity:0}}
.fx-screenflash{position:absolute;inset:0;background:#fff3d6;mix-blend-mode:screen;pointer-events:none;animation:fxSF .26s ease-out forwards;z-index:2}
@keyframes fxSF{0%{opacity:.55}100%{opacity:0}}
.fx-cutin{position:absolute;inset:0;z-index:85;pointer-events:none;background:#0006;animation:fxFade2 .15s}
.fx-cutin.small{background:none}
.fx-cutin.out{animation:fxOut2 .22s forwards}
.fx-cut-band{position:absolute;left:-40px;right:-40px;top:50%;height:150px;margin-top:-75px;transform:skewY(-7deg);background:linear-gradient(90deg,#1a0508f0,#3a0c10f2 45%,#120508f0);border-top:2px solid #e3b872;border-bottom:2px solid #e3b872;overflow:hidden;box-shadow:0 0 40px #b8261c88;animation:fxBand .9s ease-out}
.fx-cutin.small .fx-cut-band{height:96px;margin-top:-48px;top:32%;animation-duration:.6s}
.fx-cut-lines{position:absolute;inset:-20px;background:center/cover;mix-blend-mode:normal;opacity:.85;animation:fxLines .9s linear}
@keyframes fxLines{from{transform:translateX(-60px)}to{transform:translateX(60px)}}
@keyframes fxBand{0%{clip-path:inset(0 100% 0 0)}20%{clip-path:inset(0 0 0 0)}}
.fx-cut-face{position:absolute;left:60px;top:-30px;height:240px;transform:skewY(7deg);filter:drop-shadow(0 0 12px #000);animation:fxFace .9s cubic-bezier(.2,.9,.3,1)}
.fx-cutin.small .fx-cut-face{height:150px;top:-18px;left:70px}
@keyframes fxFace{0%{transform:skewY(7deg) translateX(-160px);opacity:0}25%{transform:skewY(7deg) translateX(0);opacity:1}100%{transform:skewY(7deg) translateX(24px)}}
.fx-cut-copy{position:absolute;left:260px;right:40px;top:50%;transform:translateY(-50%) skewY(7deg);display:flex;flex-direction:column;gap:6px;animation:fxCopy .9s ease-out}
.fx-cutin.small .fx-cut-copy{left:210px}
.fx-cut-copy b{font-family:'Noto Serif CJK TC','Songti TC',serif;font-size:40px;font-weight:900;letter-spacing:6px;color:#ffe2ad;text-shadow:0 0 16px #ff7a2e,0 3px 0 #2a0a08}
.fx-cutin.small .fx-cut-copy b{font-size:26px}
.fx-cut-copy span{font-size:22px;color:#fff;text-shadow:0 2px 6px #000}
.fx-cutin.small .fx-cut-copy span{font-size:17px}
@keyframes fxCopy{0%{opacity:0;transform:translateY(-50%) skewY(7deg) translateX(80px)}30%{opacity:1;transform:translateY(-50%) skewY(7deg) translateX(0)}}
.unit.fx-tut-focus{position:absolute!important}
.fx-vfx.fx-dim{opacity:.7;filter:hue-rotate(20deg)}
.fx-labels{position:absolute;inset:0;z-index:9;pointer-events:none}
.unit.fx-flabel{position:absolute;width:104px;height:194px;pointer-events:none;background:transparent;border:0;z-index:9!important}
.fx-flabel>*{pointer-events:auto;cursor:pointer}
.fx-flabel.fx-lfar .unit-foot{transform:scale(.9);transform-origin:50% 100%}
.fx-flabel.fx-l-target .unit-foot{border-color:#e9af81!important;box-shadow:inset 0 0 0 1px #b04428,0 0 14px #d0663444!important}
.fx-flabel.fx-l-fx-targeted .unit-foot{box-shadow:inset 0 0 0 2px #d8433a,0 0 12px #d8433a88!important}
.fx-flabel.fx-l-active .unit-foot{border-color:#f2d0a1!important}
.fx-flabel.fx-l-spent .unit-foot{opacity:.7}
/* focus mode */
.battle .arena>.unit{transition:opacity .18s ease,filter .18s ease}
.battle.fx-focus .arena>.unit.fx-dimmed{opacity:.14;filter:grayscale(.6) brightness(.6)}
.battle.fx-focus .arena>.unit.fx-soft{opacity:.55}
.fx-flabel.fx-l-fx-dimmed{opacity:.2}
.fx-flabel.fx-l-fx-soft{opacity:.6}

/* ---- Expedition corridor (v0.7.0) ---- */
.fx-corridor{position:absolute;inset:0;overflow:hidden;background:#07050a}
.fx-cor-view{position:absolute;left:0;right:0;top:0;bottom:0;overflow:hidden;touch-action:none}
.fx-cor-world{position:absolute;left:0;top:0;bottom:0;will-change:transform}
.fx-cor-bg{position:absolute;top:0;bottom:0;background:center 40%/cover no-repeat;filter:brightness(.78) saturate(.9)}
.fx-cor-bg.flip{transform:scaleX(-1)}
.fx-cor-ground{position:absolute;left:0;right:0;bottom:0;height:46%;background:linear-gradient(0deg,#07050af0 12%,#0a070d99 45%,transparent);pointer-events:none}
.fx-cor-party{position:absolute;bottom:78px;width:0;height:0;z-index:6;transition:none}
.fx-cor-hero{position:absolute;bottom:0;width:190px;height:190px;left:calc(-95px - var(--i) * 70px);pointer-events:none;filter:drop-shadow(0 6px 4px #000a)}
.fx-cor-party.left .fx-cor-hero{transform:scaleX(-1)}
.fx-cor-hero.down{opacity:.35;filter:grayscale(1)}
.fx-curio{position:absolute;bottom:84px;width:var(--w,150px);margin-left:calc(var(--w,150px) / -2);padding:0;background:none;border:0;z-index:4;display:flex;flex-direction:column;align-items:center}
.fx-curio img{width:100%;height:auto;filter:drop-shadow(0 6px 5px #000c)}
.fx-curio span{margin-top:-6px;padding:2px 8px;background:#120c12e6;border:1px solid #c89a5e;color:#f3dfbd;font-size:13px;white-space:nowrap}
.fx-curio.obstacle img{filter:drop-shadow(0 0 10px #e3963f88) drop-shadow(0 6px 5px #000c)}
.fx-curio.trap span{border-color:#d8433a;color:#ffb0a0}
.fx-curio:not(.spent) img{animation:fxCurio 2.4s ease-in-out infinite}
@keyframes fxCurio{50%{filter:drop-shadow(0 0 12px #ffc86b99) drop-shadow(0 6px 5px #000c)}}
.fx-curio.spent{opacity:.45;filter:grayscale(.8);pointer-events:none}
.fx-cor-ambush{position:absolute;bottom:180px;transform:translateX(-50%);padding:3px 10px;background:#3a0c10e6;border:1px solid #ff6b5a;color:#ffd0c8;font-size:14px;z-index:5;animation:nodePulse 1.4s infinite}
.fx-cor-exit{position:absolute;bottom:80px;width:170px;margin-left:-40px;z-index:3;display:flex;flex-direction:column;align-items:center}
.fx-cor-exit img{width:100%;filter:drop-shadow(0 6px 5px #000c)}
.fx-cor-exit span{padding:3px 10px;background:#140c12e6;border:1px solid #e3b872;color:#ffe2ad;font-size:14px;white-space:nowrap}
.fx-cor-entry{position:absolute;left:0;bottom:90px;width:120px;height:180px;background:linear-gradient(90deg,#000c,transparent);display:flex;align-items:flex-end}
.fx-cor-entry span{writing-mode:vertical-rl;color:#c9b18f;font-size:13px;padding:6px}
.fx-cor-bar{position:absolute;left:0;right:0;bottom:0;height:70px;z-index:20;display:flex;align-items:center;gap:8px;padding:6px 12px;background:linear-gradient(0deg,#0b080ef5,#0b080ecc 70%,transparent)}
.fx-walk{width:92px;height:58px;flex:0 0 auto;border:1px solid #c89a5e;background:linear-gradient(#3a2320,#140c10);color:#ffe2ad;font-size:26px;border-radius:4px;touch-action:none;user-select:none;-webkit-user-select:none}
.fx-walk:active{background:linear-gradient(#6b3427,#2e1618)}
.fx-cor-mid{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px}
.fx-cor-sup{display:flex;gap:6px;flex-wrap:nowrap;overflow:hidden}
.fx-sup{display:flex;align-items:center;gap:1px;color:#f3e1c4;font-size:13px}
.fx-sup .fx-icon.mini{width:22px;height:22px}
.fx-sup.zero{opacity:.35}
.fx-cor-hint{color:#e8d4b2;font-size:13.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.fx-cor-btn{min-height:46px!important;min-width:0!important;padding:4px 10px!important;font-size:15px!important}
.fx-prov{display:grid;grid-template-columns:1fr 1fr;column-gap:14px}
.fx-prov-row{display:flex;align-items:center;gap:10px;padding:5px 0;border-top:1px solid #6b553d44}
.fx-prov-row .item-copy{flex:1;display:flex;flex-direction:column;font-size:15px}
.fx-prov-row .item-copy strong small{color:#e3b872;font-weight:400;font-size:12px;margin-left:6px}
.fx-prov-row .fx-icon{width:40px;height:40px}
.fx-step{display:flex;align-items:center;gap:6px}
.fx-step button{width:40px;height:40px;border:1px solid #8a6c4a;background:#1d1419;color:#ffd38a;font-size:20px}
.fx-step button:disabled{opacity:.3}
.fx-step b{min-width:22px;text-align:center;color:#fff;font-size:17px}
.fx-prov-foot{position:sticky;bottom:-22px;display:flex;align-items:center;gap:8px;padding:10px 0 4px;background:#120c12;border-top:1px solid #8a6c4a}
.fx-prov-foot span{flex:1;text-align:right;font-size:16px}
.fx-prov-foot .btn{min-height:48px;min-width:0;font-size:16px}
.fx-curio-res{display:flex;align-items:center;gap:14px;margin-bottom:8px}
.fx-curio-res img{width:120px;height:auto;flex:0 0 auto;filter:drop-shadow(0 4px 6px #000)}
.fx-curio-res>.fx-icon{width:72px;height:72px}
.fx-curio-res p{margin:4px 0;font-size:17px}
.fx-curio-acts{display:flex;flex-wrap:wrap;gap:8px}
.fx-curio-acts .btn{flex:1 1 30%;min-width:0;min-height:58px;font-size:16px;gap:6px}
.fx-curio-acts .btn small{display:block;font-size:12px;opacity:.8;font-weight:400}
.fx-curio-acts .fx-icon.mini{width:26px;height:26px}
.fx-loot{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}
.fx-loot span{display:flex;align-items:center;gap:4px;padding:3px 8px;background:#281c25;border:1px solid #a1804e78;font-size:14px}
.fx-loot .fx-icon.mini{width:20px;height:20px}
p.red{color:#ff9d8a}p.green{color:#bde4ba}
/* v0.7.1: town tutorial card sits under the header instead of over the party strip / CTAs */
.town .tutorial-card{top:92px!important;bottom:auto!important;left:auto!important;right:14px!important;width:min(560px,60%)!important;z-index:30!important}
.tutorial-card .btn{pointer-events:auto;touch-action:manipulation}
.result .result-panel{bottom:74px!important}
/* v0.7.2: corridor tap zones (left third = back, right third = forward) */
.fx-cor-zone{position:absolute;top:44px;bottom:70px;width:33.33%;z-index:8;pointer-events:none;display:flex;align-items:center;color:#ffe2ad;font-size:34px;opacity:.28;text-shadow:0 0 12px #000}
.fx-cor-zone.l{left:0;justify-content:flex-start;padding-left:14px;background:linear-gradient(90deg,#0006,transparent)}
.fx-cor-zone.r{right:0;justify-content:flex-end;padding-right:14px;background:linear-gradient(270deg,#0006,transparent)}
.fx-cor-view{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}
/* v0.7.3: corridor zone teaching hint (until the player has walked once) */
.fx-cor-zone small{font-size:14px;letter-spacing:2px;margin:0 8px;display:none}
.fx-cor-zone.teach{opacity:.85;animation:fxZone 1.4s ease-in-out infinite}
.fx-cor-zone.teach small{display:inline}
.fx-cor-zone.r.teach{background:linear-gradient(270deg,#e3963f44,transparent)}
.fx-cor-zone.l.teach{background:linear-gradient(90deg,#e3963f22,transparent)}
@keyframes fxZone{50%{opacity:.45}}

/* v0.7.4: all plates in overlay; they rise above the dock when it opens */
.unit.fx-flabel{transition:bottom .22s cubic-bezier(.2,.8,.3,1)}
.battle.fx-float .arena>.unit>.unit-foot{display:none}
/* v0.8.0 classes / AP / reach */
.skill-btn{position:relative}
.skill-btn .fx-apc{position:absolute;top:2px;right:3px;font-size:11px;line-height:13px;padding:0 4px;border-radius:7px;background:#1d2a3acc;color:#9fd2ff;border:1px solid #6fa8dc88;font-weight:700;pointer-events:none}
.skill-btn .fx-apc.lack{color:#ff9a8a;border-color:#d8433a99;background:#3a1d1dcc}
.skill-btn .fx-chg{position:absolute;top:2px;left:3px;font-size:10.5px;line-height:13px;padding:0 4px;border-radius:7px;background:#4a3310cc;color:#ffd27a;border:1px solid #e2a84988;pointer-events:none}
.fx-apc{display:inline-block;font-size:11px;padding:0 4px;border-radius:7px;background:#1d2a3a;color:#9fd2ff;border:1px solid #6fa8dc88;font-weight:700}
.fx-apline{color:#9fd2ff;font-weight:700}
.fx-spd{color:#cbb892}
.actor-panel .fx-chg,.fx-guild-hero .fx-chg{color:#ffd27a}
.fx-ap-pips{display:flex;gap:2px;margin-top:2px;align-items:center;height:6px}
.fx-ap-pips i{flex:1;height:5px;border-radius:2px;background:#26303a;box-shadow:inset 0 0 0 1px #4d6a86}
.fx-ap-pips i.on{background:linear-gradient(#bfe4ff,#4f9fe0);box-shadow:0 0 4px #6fb8ff99}
.fx-ap-pips .fx-chg{font-size:9px;line-height:9px;color:#ffd27a;margin-left:2px;font-style:normal}
.unit.fx-charging .sprite{filter:drop-shadow(0 0 10px #ffc862) drop-shadow(0 0 22px #ff9a2a88)}
.ailment.poison svg{fill:#8fd66a}
.ailment.charge svg{fill:#ffd27a}
.fx-guild-tabs{display:flex;flex-wrap:wrap;gap:6px;margin:8px 0}
.fx-guild-tabs .btn{min-height:40px;font-size:13px}
.fx-guild-tabs .btn small{display:block;font-size:10.5px;opacity:.8}
.fx-guild-hero{display:flex;gap:10px;align-items:center;margin:6px 0}
.fx-guild-hero img{width:64px;height:64px;object-fit:cover;border-radius:8px;border:1px solid #b89a6a66}
.fx-guild-hero h3{margin:0;font-size:17px}
.fx-job-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
.fx-job{border:1px solid #6b5a4466;border-radius:10px;padding:8px;background:#15121099}
.fx-job.adv{border-color:#b8894a88}
.fx-job.cur{box-shadow:inset 0 0 0 2px #e2c48a,0 0 14px #e2c48a44}
.fx-job-head{display:flex;justify-content:space-between;align-items:center;gap:6px}
.fx-job-head strong{font-size:15px}
.fx-job-head .btn{min-height:36px;padding:4px 10px;font-size:13px}
.fx-job-head .btn small{display:block;font-size:10px}
.fx-job p{margin:4px 0}
.fx-job-skills{list-style:none;margin:0;padding:0;display:grid;gap:4px}
.fx-job-skills li{font-size:13px;line-height:1.3;border-top:1px solid #ffffff12;padding-top:3px}
@media (max-width:700px){.fx-job-grid{grid-template-columns:1fr}}
.skill-btn .cooldown{top:auto!important;bottom:2px!important;right:3px!important;font-size:10.5px!important;line-height:12px}
@media (max-height:540px){
 .modal-guild .fx-fac-head{padding:6px 10px!important;min-height:0!important}
 .modal-guild .fx-fac-head p{display:none}
 .modal-guild .fx-fac-head h3{margin:0!important}
 .modal-guild .fx-guild-tabs{margin:4px 0}
 .modal-guild .fx-guild-tabs .btn{min-height:34px;padding:3px 8px}
 .modal-guild .fx-guild-hero img{width:42px;height:42px}
 .modal-guild .fx-job-grid{grid-template-columns:repeat(3,minmax(0,1fr))}
}
/* v0.9.0 Darkest-Dungeon style dungeon map */
.fx-dmap .scene-bg{filter:brightness(.32) saturate(.5) blur(1px)!important}
.fx-dmap-board{position:absolute;left:0;right:0;top:46px;bottom:62px;z-index:2}
.fx-dmap-scroll{position:absolute;inset:0;overflow:auto;display:flex;-webkit-overflow-scrolling:touch;scrollbar-width:none;touch-action:pan-x pan-y}
.fx-dmap-scroll::-webkit-scrollbar{display:none}
.fx-dmap-canvas{position:relative;margin:auto;flex:none}
.fx-dmap-parch{position:absolute;inset:0;border-radius:18px;background:radial-gradient(ellipse at 50% 50%,#3a2f26cc,#1b1612ee 70%,#0d0b0af5),url('../assets/scenes/route-map.webp') center/cover;box-shadow:inset 0 0 60px #000,0 0 0 1px #6e5a3c55;opacity:.95}
.fx-dmap-svg{position:absolute;left:0;top:0;pointer-events:none;overflow:visible}
.fx-dmap-svg .fx-cloud{animation:fxFogDrift 18s ease-in-out infinite alternate}
.fx-dmap-svg .fx-cloud.c1{animation-duration:24s;animation-delay:-6s}
.fx-dmap-svg .fx-cloud.c2{animation-duration:31s;animation-delay:-12s}
@keyframes fxFogDrift{from{transform:translateX(-40px)}to{transform:translateX(50px)}}
.fx-dh{fill:#2a231c;stroke:#8a7552;stroke-width:1.2;opacity:.75}
.fx-dh.known{fill:#1c1814;stroke:#6d5c43;stroke-dasharray:2 2;opacity:.6}
.fx-dh.explored{fill:#c89a55;stroke:#f1d49a;opacity:.95}
.fx-dh.path{fill:#e8b766;stroke:#fff1c9;opacity:1;filter:drop-shadow(0 0 4px #ffc86a)}
.fx-dh.walking{fill:#3a2f22;stroke:#e8b766;opacity:1;stroke-dasharray:none}
.fx-dh.walking.done{fill:#f0c070}
.fx-droom{position:absolute;width:46px;height:46px;margin:-23px 0 0 -23px;border-radius:6px;display:grid;place-items:center;padding:0;z-index:3;
  border:1.5px solid #8f7a55;background:linear-gradient(145deg,#3b2f27,#1b1512);color:#e7d3ad;box-shadow:0 3px 10px #000a,inset 0 0 0 1px #0008;cursor:pointer;transition:transform .15s}
.fx-droom .ico{width:24px;height:24px;fill:currentColor}
.fx-droom>b{font:700 22px/1 serif;color:#b8a990}
.fx-droom .fx-dr-name{position:absolute;top:47px;left:50%;transform:translateX(-50%);white-space:nowrap;font-size:11.5px;line-height:14px;padding:0 4px;border-radius:4px;background:#0d0b0acc;color:#d9c7a4;pointer-events:none}
.fx-droom.known{border-style:dashed;border-color:#6d6153;background:linear-gradient(145deg,#24201d,#121010);color:#9e9282;opacity:.9}
.fx-droom.known .fx-dr-name{color:#9e9282}
.fx-droom.visited.cleared{color:#a99a7f}
.fx-droom.visited.cleared::after{content:'';position:absolute;inset:3px;border-radius:4px;background:linear-gradient(135deg,transparent 46%,#8f7a5566 48%,#8f7a5566 52%,transparent 54%)}
.fx-droom.battle:not(.cleared),.fx-droom.dungeon:not(.cleared){color:#e6a07c;border-color:#a25d44}
.fx-droom.elite:not(.cleared){color:#ff8a70;border-color:#c24a36;box-shadow:0 0 12px #c24a3666,0 3px 10px #000a}
.fx-droom.boss{width:58px;height:58px;margin:-29px 0 0 -29px;color:#ff6b5a;border-color:#d0402f;background:radial-gradient(circle,#4a1512,#1a0807);box-shadow:0 0 18px #d0402f88,0 3px 12px #000}
.fx-droom.boss .fx-dr-name{top:59px;color:#ff9c8c}
.fx-droom.camp{color:#ffcf7a;border-color:#c9953f}
.fx-droom.treasure{color:#f1d27b;border-color:#b99545}
.fx-droom.merchant{color:#9fd2c0;border-color:#5b9a86}
.fx-droom.event{color:#b9a6ec;border-color:#7c66b8}
.fx-droom.entry{color:#ffe0a0;border-color:#c9a45c}
.fx-droom.cur{border-color:#ffe3a3;box-shadow:0 0 0 3px #ffcf6a55,0 0 22px #ffc25a99,0 3px 10px #000;animation:fxCurPulse 1.8s ease-in-out infinite}
@keyframes fxCurPulse{50%{box-shadow:0 0 0 5px #ffcf6a33,0 0 30px #ffc25acc,0 3px 10px #000}}
.fx-droom.sel{transform:scale(1.14);border-color:#fff1c9;box-shadow:0 0 0 2px #fff1c9aa,0 0 18px #ffe3a3aa}
.fx-dr-lead{position:absolute;width:28px;height:28px;border-radius:50%;object-fit:cover;top:-20px;right:-16px;border:2px solid #ffe3a3;box-shadow:0 0 8px #ffc25a}
.fx-dmap-legend{position:absolute;right:14px;top:6px;display:flex;gap:10px;font-size:12px;color:#cdbb98;background:#0d0b0ab3;padding:3px 8px;border-radius:8px;pointer-events:none;z-index:4}
.fx-dmap-legend .lg{display:inline-block;width:10px;height:10px;margin-right:3px;vertical-align:-1px;border-radius:2px;border:1px solid #8f7a55;background:#3b2f27}
.fx-dmap-legend .lg.known{border-style:dashed;background:#1c1814}
.fx-dmap-legend .lg.hall{background:#c89a55;border-color:#f1d49a}
.fx-dmap .bottom-bar .btn.danger{background:linear-gradient(#8b2a22,#4d1411)!important;border-color:#e06a55!important}
.fx-dmini{position:absolute;right:10px;top:54px;width:200px;height:118px;overflow:hidden;border-radius:10px;border:1px solid #8f7a5599;background:#0b0908e6;box-shadow:0 4px 14px #000a;z-index:20;pointer-events:none}
.fx-dmini-in{position:absolute;transform-origin:0 0}
.fx-dmini .fx-droom{cursor:default;animation:none}
/* v0.10 foes */
.unit.fx-elite .sprite{filter:drop-shadow(0 0 6px #ff6a4a) drop-shadow(0 0 16px #c2302088)}
.unit.fx-phase2 .sprite{filter:drop-shadow(0 0 10px #ff3020) drop-shadow(0 0 28px #ff5a2aaa) saturate(1.3);animation:fxPhase2 1.6s ease-in-out infinite}
@keyframes fxPhase2{50%{filter:drop-shadow(0 0 16px #ff3020) drop-shadow(0 0 40px #ff7a2acc) saturate(1.5)}}
.fx-boss-phase .fx-cut-band{background:linear-gradient(90deg,#3a0806f2,#8a1a10e6 45%,#1a0404f0)!important}
.fx-boss-phase .fx-cut-face{object-fit:contain!important;background:#1a0606}
/* v0.10 resolve / quirks */
.fx-qchips{display:flex;flex-wrap:wrap;gap:3px;margin-top:3px}
.fx-qchip{font-size:11px;line-height:15px;padding:0 5px;border-radius:7px;font-weight:600;border:1px solid}
.fx-qchip.good{color:#9fe0a8;border-color:#4f9a5a88;background:#12301a99}
.fx-qchip.bad{color:#f0a18f;border-color:#b0503c88;background:#35140f99}
.fx-qchip.disease{color:#d8b4ff;border-color:#8a5ab888;background:#26143699}
.fx-qchip.affliction{color:#ff8a78;border-color:#e0442e;background:#4a100acc}
.fx-qchip.virtue{color:#ffe09a;border-color:#e0b04a;background:#4a3508cc}
.fx-res{display:inline-block;margin-top:2px;font-size:10.5px;line-height:13px;padding:0 5px;border-radius:6px;font-weight:700}
.fx-res.affliction{color:#fff;background:#b0281c;box-shadow:0 0 8px #ff3a2a88}
.fx-res.virtue{color:#2a1a00;background:#f2c75a;box-shadow:0 0 8px #ffd27a88}
.fx-cure-btns{display:flex;flex-wrap:wrap;gap:4px;justify-content:flex-end}
.fx-cure-btns .btn{min-height:36px;font-size:12.5px;padding:3px 8px}
.fx-cure-btns .btn small{display:block;font-size:10px}
/* v0.10 light & camp */
.fx-lchip-wrap{position:absolute;left:12px;top:6px;z-index:6}
.fx-lchip-wrap.cor{top:52px;left:12px;z-index:21}
.fx-lchip{display:flex;align-items:center;gap:5px;font-size:12.5px;line-height:18px;padding:3px 10px;border-radius:12px;border:1px solid #8f7a5599;background:#0d0b0ad9;color:#e8d3aa;cursor:pointer}
.fx-ldot{display:inline-block;width:10px;height:10px;border-radius:50%;background:#ffd27a;box-shadow:0 0 8px #ffc25a}
.fx-lchip.dim .fx-ldot,.fx-ltier.dim .fx-ldot{background:#e0a24a;box-shadow:0 0 6px #e0a24a88}
.fx-lchip.shadow .fx-ldot,.fx-ltier.shadow .fx-ldot{background:#9a5a2a;box-shadow:0 0 4px #9a5a2a88}
.fx-lchip.dark .fx-ldot,.fx-ltier.dark .fx-ldot{background:#3a1a12;box-shadow:inset 0 0 0 1px #9a5a2a}
.fx-ltier.cur{box-shadow:inset 0 0 0 2px #e2c48a;border-radius:8px}
.fx-camp-head{margin:0 0 6px}
.fx-camp-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px}
.fx-camp-row{display:flex;align-items:center;gap:8px;padding:6px;border:1px solid #6b5a4466;border-radius:8px;background:#15121099}
.fx-camp-row.used{opacity:.5}
.fx-camp-row .item-copy{flex:1;min-width:0}
.fx-camp-row .item-copy strong{font-size:14px}.fx-camp-row .item-copy .small{font-size:12px;line-height:1.3}
.fx-camp-face{width:36px;height:36px;border-radius:50%;object-fit:cover;flex:none;border:1px solid #b89a6a88;display:grid;place-items:center}
.fx-camp-face.all .ico{width:20px;height:20px;fill:#e2c48a}
.fx-camp-row .btn{min-height:38px;padding:3px 10px;font-size:13px;flex:none}
.fx-camp-pick{display:flex;flex-wrap:wrap;gap:3px;max-width:190px}
.fx-camp-pick .btn{min-height:32px;font-size:11.5px;padding:2px 6px}
.fx-camp-pick .btn small{display:block;font-size:9.5px}
@media (max-width:700px){.fx-camp-list{grid-template-columns:1fr}}
.fx-skico{width:22px;height:22px;border-radius:4px;vertical-align:-6px;margin-right:4px}
/* v0.10 chapter themes */
.fx-dmap .fx-dh.explored{fill:var(--fx-tile,#c89a55);stroke:var(--fx-edge,#f1d49a)}
.fx-dmap .fx-dh.path{fill:var(--fx-edge,#e8b766)}
.fx-dmap .fx-droom.cur{border-color:var(--fx-edge,#ffe3a3)}
.fx-dmap[data-theme] .fx-dmap-parch{background:radial-gradient(ellipse at 50% 50%,color-mix(in srgb,var(--fx-tile) 22%,#2a2320) ,#15110ef0 70%,#0a0908f8),url('../assets/scenes/route-map.webp') center/cover}
.fx-cor-fx{position:absolute;left:0;right:0;top:44px;bottom:0;pointer-events:none;z-index:3;mix-blend-mode:screen;opacity:.7}
.fx-cor-fx.water{top:auto;height:34%;background:repeating-linear-gradient(0deg,#9ad4f000 0 7px,#9ad4f018 8px 9px);animation:fxWater 3.5s linear infinite;mix-blend-mode:overlay}
@keyframes fxWater{from{background-position:0 0}to{background-position:0 36px}}
.fx-cor-fx.ember,.fx-cor-fx.ash{background-image:radial-gradient(2px 2px at 20% 30%,#ff9a5acc,transparent),radial-gradient(1.5px 1.5px at 60% 70%,#ffb070aa,transparent),radial-gradient(2px 2px at 80% 20%,#ff7a3acc,transparent),radial-gradient(1.5px 1.5px at 40% 55%,#ffc080aa,transparent);background-size:340px 300px;animation:fxEmber 9s linear infinite}
.fx-cor-fx.ash{background-image:radial-gradient(2px 2px at 20% 30%,#d8d0c8aa,transparent),radial-gradient(1.5px 1.5px at 60% 70%,#bdb4aaaa,transparent),radial-gradient(2px 2px at 80% 20%,#e0d8d0aa,transparent),radial-gradient(1.5px 1.5px at 40% 55%,#a8a09888,transparent);animation-direction:reverse;opacity:.5}
@keyframes fxEmber{from{background-position:0 300px}to{background-position:120px 0}}
.fx-cor-fx.dust{background:linear-gradient(100deg,transparent 30%,#e0e0ff10 45%,transparent 60%);animation:fxShaft 7s ease-in-out infinite alternate}
@keyframes fxShaft{from{transform:translateX(-10%)}to{transform:translateX(10%)}}
.fx-cor-fx.shimmer{background:linear-gradient(115deg,transparent 40%,#d0a8ff18 50%,transparent 60%);background-size:300% 100%;animation:fxShimmer 5s linear infinite}
@keyframes fxShimmer{from{background-position:100% 0}to{background-position:-100% 0}}
/* v0.10 summary */
section.result.fx-has-summary .result-panel{overflow-y:auto;align-items:flex-start}
.fx-summary{margin-top:8px;display:grid;gap:6px}
.fx-sum-stats{display:flex;flex-wrap:wrap;gap:6px}
.fx-sum-stats span{display:flex;flex-direction:column;align-items:center;min-width:64px;padding:3px 8px;border:1px solid #8f7a5566;border-radius:8px;background:#120f0dcc;font-size:11.5px;color:#cdbb98}
.fx-sum-stats b{font-size:18px;color:#f2d8a8;line-height:1.1}
.fx-sum-heroes{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:5px}
.fx-sum-hero{display:flex;gap:7px;align-items:center;padding:4px 6px;border-radius:8px;background:#15121099;border:1px solid #6b5a4455}
.fx-sum-hero img{width:34px;height:34px;border-radius:50%;object-fit:cover}
.fx-sum-hero b{font-size:13.5px;display:block}.fx-sum-hero span{font-size:11.5px;color:#bfae8f}
.fx-sum-hero.mvp{border-color:#e2c48a;box-shadow:0 0 12px #e2c48a55}
.fx-sum-hero i{font-style:normal;font-size:10.5px;padding:0 5px;border-radius:6px;background:#e2c48a;color:#2a1a00;margin-left:4px}
.fx-sum-news{margin:0;padding-left:18px;font-size:12.5px;color:#d9c7a4}
section.result.fx-has-summary .result-panel{overflow-y:auto!important;-webkit-overflow-scrolling:touch}
section.result.fx-has-summary .result-art{display:none!important}
section.result.fx-has-summary .result-copy{max-width:none!important;width:100%}
section.result.fx-has-summary .result-copy h1{font-size:26px!important;margin:2px 0 4px!important}
section.result.fx-has-summary .result-copy p{font-size:14px!important;margin:0 0 6px!important}
section.result.fx-has-summary .reward-row{margin:0!important}
.fx-sum-heroes{grid-template-columns:repeat(4,minmax(0,1fr))!important}
.fx-sum-hero{flex-direction:column;text-align:center;gap:2px}
.fx-sum-hero span{font-size:10.5px!important;line-height:1.25}
.fx-sum-hero{padding:2px 4px!important}
.fx-sum-hero img{width:26px!important;height:26px!important}
.fx-sum-hero b{font-size:12.5px!important}
.fx-sum-stats span{padding:1px 6px!important}.fx-sum-stats b{font-size:16px!important}
section.result.fx-has-summary .result-panel{padding-top:8px!important;padding-bottom:8px!important}
/* v0.11 tips / mortal / hamlet / sets / trial / settings */
.fx-tip{position:absolute;left:50%;top:50px;transform:translateX(-50%);z-index:95;width:min(560px,86%);pointer-events:auto;animation:fxTipIn .25s ease-out}
@keyframes fxTipIn{from{opacity:0;transform:translate(-50%,-10px)}to{opacity:1;transform:translate(-50%,0)}}
.fx-tip-in{background:linear-gradient(135deg,#221a14f5,#120e0cf5);border:1px solid #c9a45c;border-radius:12px;padding:10px 14px;box-shadow:0 8px 30px #000c,0 0 0 1px #000}
.fx-tip-in b{color:#f2d8a8;font-size:16px}.fx-tip-in p{margin:4px 0 8px;font-size:14px;line-height:1.45;color:#e6d6b8}
.fx-tip-acts{display:flex;justify-content:flex-end;gap:8px}.fx-tip-acts .btn{min-height:36px;padding:3px 12px;font-size:13.5px}
.unit.fx-deathsdoor .sprite{filter:drop-shadow(0 0 8px #ff2a2a) saturate(.6) brightness(.85);animation:fxDoor 1.2s ease-in-out infinite}
@keyframes fxDoor{50%{filter:drop-shadow(0 0 16px #ff2a2a) saturate(.4) brightness(.7)}}
.fx-res.fx-door{color:#fff;background:#6a0a0a;box-shadow:0 0 8px #ff2a2aaa}
.fx-grey{filter:grayscale(1) brightness(.6)}
.fx-stones{margin:0;padding-left:18px;display:grid;gap:3px;font-size:13.5px}
.fx-trial{margin-left:8px;font-size:12px;padding:1px 8px;border-radius:8px;background:#5a1a10;color:#ffd0a0;border:1px solid #e0704a88;white-space:nowrap}
.fx-board{margin:0;padding-left:20px;display:grid;gap:3px;font-size:13.5px}
.fx-trial-card,.fx-rumor{border-color:#c9703a88!important}
.fx-qchip.set{color:#ffe09a;border-color:#e0b04a;background:#3a2a08aa}
.fx-set-list{display:grid;gap:6px}
.fx-set-row{display:flex;align-items:center;gap:10px;padding:5px 8px;border:1px solid #6b5a4455;border-radius:8px;background:#15121099}
.fx-set-row .item-copy{flex:1;min-width:0}.fx-set-row strong{font-size:14.5px}.fx-set-row .small{font-size:12px}
.fx-seg{display:flex;gap:4px}.fx-seg .btn,.fx-set-ctl .btn{min-height:36px;padding:3px 12px;font-size:13px}
html.fx-text-large .small,html.fx-text-large .fx-tip-in p,html.fx-text-large .item-copy .small{font-size:115%!important}
html.fx-text-large .skill-btn span,html.fx-text-large .action-hint,html.fx-text-large .modal-body p{font-size:108%!important}
.unit.fx-bossactor .sprite{transform:scale(1.35);transform-origin:50% 92%}
/* v0.11 English layout guards */
.fx-guild-tabs .btn{display:flex;flex-direction:column;align-items:flex-start;justify-content:center;flex:1 1 118px;min-width:0;max-width:190px;overflow:hidden;white-space:nowrap;text-align:left}
.fx-guild-tabs .btn small{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
html.fx-lang-en .skill-btn span{font-size:13px!important;line-height:1.1;white-space:normal;text-align:center;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
html.fx-lang-en .battle-cmds .btn{font-size:13.5px!important;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
html.fx-lang-en .action-hint span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
html.fx-lang-en .fx-spot-name{font-size:12.5px}
html.fx-lang-en .unit-name{font-size:12px!important}
/* v0.12 quests / npcs / codex */
.fx-qmark{position:absolute;top:-9px;left:-9px;width:20px;height:20px;border-radius:50%;display:grid;place-items:center;font-style:normal;font-size:12px;background:#2a1c06;border:1.5px solid #ffd27a;color:#ffd27a;box-shadow:0 0 10px #ffc25a;animation:fxQm 1.6s ease-in-out infinite;pointer-events:none}
.fx-qmark.relic{border-color:#9fd2ff;color:#9fd2ff;box-shadow:0 0 10px #6fb8ff}
@keyframes fxQm{50%{transform:scale(1.18)}}
.fx-droom.fx-sealed::before{content:'🔒';position:absolute;bottom:-8px;right:-8px;font-size:14px;filter:drop-shadow(0 0 3px #000)}
.fx-qtrack{position:absolute;left:12px;top:36px;z-index:6;font-size:12px;padding:3px 10px;border-radius:10px;border:1px solid #c9a45c88;background:#0d0b0ae0;color:#ead6ae;cursor:pointer;max-width:60%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.fx-qtrack b{color:#ffd27a;margin-right:4px}
.fx-dot{display:inline-grid;place-items:center;min-width:16px;height:16px;margin-left:4px;border-radius:8px;background:#c0392b;color:#fff;font-size:10px;font-style:normal}
.fx-qtabs{display:flex;gap:6px;flex-wrap:wrap;margin:4px 0 8px}.fx-qtabs .btn{min-height:36px;padding:3px 14px;font-size:13.5px}
.fx-qlist,.fx-codex{display:grid;gap:6px}
.fx-quest{padding:7px 10px;border:1px solid #6b5a4466;border-radius:9px;background:#15121099;display:grid;gap:3px}
.fx-quest.cur{border-color:#e2c48a;box-shadow:inset 0 0 0 1px #e2c48a55}.fx-quest.done{opacity:.72}.fx-quest.locked{opacity:.45}
.fx-quest strong{font-size:14.5px}
.fx-steps{margin:2px 0 0;padding-left:20px;font-size:13px;display:grid;gap:2px}.fx-steps li.ok{color:#9fe0a8}
.fx-qbar{position:relative;display:block;height:14px;border-radius:7px;background:#26303a;overflow:hidden;margin-top:2px}
.fx-qbar i{position:absolute;left:0;top:0;bottom:0;background:linear-gradient(90deg,#b8894a,#ffd27a)}
.fx-qbar b{position:relative;display:block;text-align:center;font-size:10.5px;line-height:14px;color:#1a1208;font-weight:700}
.fx-qhero{display:flex;gap:8px;align-items:center}.fx-qhero img{width:40px;height:40px;border-radius:50%;object-fit:cover}.fx-qhero>div{flex:1;display:grid;gap:2px}
.fx-lore-text{font-size:15px;line-height:1.6;font-style:italic;color:#ecdcbc;border-left:3px solid #c9a45c;padding-left:10px}
.fx-npc{display:flex;align-items:center;gap:10px;padding:6px 8px;margin-bottom:6px;border:1px solid #c9a45c55;border-radius:10px;background:linear-gradient(90deg,#1e1712ee,#120e0cdd)}
.fx-npc img{width:54px;height:54px;border-radius:8px;object-fit:cover;border:1px solid #c9a45c88;flex:none}
.fx-npc.big img{width:96px;height:96px}
.fx-npc-copy{flex:1;min-width:0}.fx-npc-copy b{font-size:14.5px;color:#f2d8a8}.fx-npc-copy b small{color:#bfae8f;font-weight:400;margin-left:4px}
.fx-npc-copy p{margin:2px 0;font-size:13px;color:#e0d0b0}
.fx-hearts i{font-style:normal;color:#4a3a3a;font-size:12px}.fx-hearts i.on{color:#e0605a}
.fx-npc .btn{min-height:36px;padding:3px 12px;font-size:13px;flex:none}
.fx-qchip.bond{color:#ffc0d0;border-color:#c06080aa;background:#3a1428aa}
.fx-page{padding:6px 10px;border-left:3px solid #c9a45c;background:#15121099;border-radius:6px}.fx-page b{font-size:14px;color:#f2d8a8}.fx-page p{margin:3px 0 0;font-size:13px;line-height:1.5}
.fx-page.locked{opacity:.45;border-left-color:#555}
.fx-beasts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px}
.fx-beast{display:flex;gap:8px;align-items:center;padding:5px 8px;border:1px solid #6b5a4466;border-radius:8px;background:#15121099}
.fx-beast img{width:56px;height:56px;object-fit:contain;flex:none}.fx-beast.locked img{filter:brightness(0) opacity(.5)}.fx-beast.boss{border-color:#c2463688}
.fx-beast b{font-size:14px}.fx-beast p{margin:2px 0 0}
.fx-achv{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:5px}
.fx-ach{padding:5px 8px;border-radius:8px;border:1px solid #4a404066;background:#121010aa;opacity:.55;display:grid}.fx-ach.on{opacity:1;border-color:#e2c48a88;background:#2a2010aa}.fx-ach b{font-size:13px}
.fx-credits{text-align:center;padding:10px}.fx-credits h2{font-size:30px;letter-spacing:6px;margin:4px 0 10px}
@media (max-width:700px){.fx-beasts,.fx-achv{grid-template-columns:1fr}}

/* v0.12.1 — name plates float above the character's head instead of covering the body */
.battle .unit > .unit-foot, .fx-labels .fx-flabel > .unit-foot{bottom:238px!important;top:auto!important}
.battle .unit > .intent, .fx-labels .fx-flabel > .intent{bottom:288px!important;top:auto!important}
.battle .unit > .ailments, .fx-labels .fx-flabel > .ailments{top:auto!important;bottom:196px!important;right:-6px}
.fx-flabel{height:300px!important}
.battle .unit-foot{padding:3px 6px 3px!important;background:linear-gradient(0deg,#0d0a12f2,#1b1420e0)!important;border-radius:6px!important;box-shadow:0 3px 10px #000a!important}
.battle .unit-label{font-size:16px!important;margin-bottom:3px!important}
.battle.fx-float .unit.fx-far .unit-foot{transform:scale(.88)!important;transform-origin:50% 0!important}
.fx-flabel.fx-lfar .unit-foot{transform:scale(.88)!important;transform-origin:50% 0!important}
/* v0.12.1 — map bottom bar must not grow into the board when the frame is tall (or the text is English) */
.fx-dmap .bottom-bar{height:64px!important;min-height:64px!important;align-items:center}
.fx-dmap .bottom-bar .copy{flex:1;min-width:0;max-width:46%;overflow:hidden}
.fx-dmap .bottom-bar .copy .small{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;line-height:1.25}
.fx-dmap .bottom-actions{flex:0 0 auto;gap:6px}
.fx-dmap .bottom-actions .btn{min-width:104px!important;padding:4px 10px!important}
.fx-dmap-board{bottom:66px!important}

/* ================= v0.12.2 battle HUD: name-plate strip, controls, compact skill dock ================= */
.battle .arena .fx-labels.fx-lstrip{position:absolute!important;inset:auto!important;left:6px!important;right:6px!important;top:var(--fx-strip-top,50px)!important;height:auto!important;display:flex;justify-content:space-between;align-items:flex-start;gap:14px;z-index:24!important;pointer-events:none}
.fx-lstrip .fx-lside{display:flex;gap:4px;min-width:0;flex:1 1 0}
.fx-lstrip .fx-lside.foe{justify-content:flex-end}
.battle .fx-lstrip .unit.fx-flabel{position:relative!important;left:auto!important;bottom:auto!important;top:auto!important;width:auto!important;height:auto!important;flex:1 1 0;min-width:0;max-width:130px;display:flex;flex-direction:column;gap:2px;transform:none!important;transition:none!important;margin:0!important}
.battle .fx-lstrip .fx-flabel>.unit-foot{order:0}.battle .fx-lstrip .fx-flabel>.intent{order:1}.battle .fx-lstrip .fx-flabel>.fx-guard-badge{order:2}
.battle .fx-lstrip .fx-flabel>.unit-foot{position:relative!important;inset:auto!important;bottom:auto!important;top:auto!important;left:auto!important;width:100%!important;min-width:0!important;height:auto!important;padding:3px 6px 4px!important;transform:none!important;opacity:1}
.battle .fx-lstrip .fx-flabel.fx-lfar>.unit-foot{transform:none!important}
.battle .fx-lstrip .fx-flabel .unit-label{font-size:14px!important;line-height:18px!important;margin-bottom:2px!important;display:flex;justify-content:space-between;gap:4px;white-space:nowrap}
.battle .fx-lstrip .fx-flabel .unit-name{overflow:hidden;text-overflow:ellipsis;min-width:0}
.battle .fx-lstrip .fx-flabel>.intent{position:relative!important;inset:auto!important;bottom:auto!important;top:auto!important;left:auto!important;transform:none!important;margin:0!important;max-width:100%!important;font-size:12px!important;line-height:16px!important;padding:1px 4px!important;align-self:stretch;display:flex;align-items:center;gap:3px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.battle .fx-lstrip .fx-flabel>.intent .ico{width:13px!important;height:13px!important;flex:none}
.battle .fx-lstrip .fx-flabel>.ailments{position:absolute!important;inset:auto!important;top:-6px!important;right:-4px!important;bottom:auto!important;left:auto!important;transform:scale(.8);transform-origin:100% 0}
.battle .fx-lstrip .fx-flabel>.fx-guard-badge{position:relative!important;left:auto!important;bottom:auto!important;transform:none!important;align-self:center;font-size:11px}
.battle .fx-lstrip .fx-flabel.fx-l-fx-dimmed{opacity:.45}
/* speed / auto: under the plate strip, right side */
.battle .arena .fx-controls,.battle.fx-float .arena .fx-controls{left:auto!important;right:8px!important;top:calc(var(--fx-strip-top,50px) + 72px)!important}
.battle .arena .resonance,.battle.fx-float .arena .resonance{top:calc(var(--fx-strip-top,50px) + 72px)!important}
/* compact skill dock: fixed-height buttons that never cover the command row, bigger icons, name only when selected */
.battle .action-row{height:58px!important;align-items:stretch}
.battle .skill-list{height:58px;align-items:stretch}
.battle .skill-btn{min-height:0!important;height:58px!important;padding:0!important;justify-content:center!important;gap:0!important}
.battle .skill-btn .skill-paint{width:50px!important;height:50px!important;object-fit:cover}
.battle .skill-btn>span{display:none;position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);max-width:94%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:14px!important;line-height:18px;padding:1px 6px;border-radius:4px;background:#0b0810d9;border:1px solid #ffcf8d88;color:#ffe9c4;pointer-events:none;z-index:2}
.battle .skill-btn.selected>span{display:block}
.battle .confirm-skill{min-height:0!important;height:58px!important}
.battle .battle-cmds{position:relative;z-index:1}
.battle:not(.fx-float) .arena{--fx-strip-top:6px}
.battle .fx-lstrip .fx-flabel .unit-name{font-size:15px!important;overflow:hidden!important;text-overflow:ellipsis!important;white-space:nowrap}
.battle .fx-lstrip .fx-flabel .hp-num{font-size:14px!important;flex:none}
/* v0.12.2 rounded screen corners: keep top-bar icons and the town hint clear of the arcs */
#app .topbar{padding-left:22px!important;padding-right:20px!important}
.town .bottom-bar .copy .small{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* v0.12.2 corridor fills the screen width too (clip only top/bottom) */
#app .fx-corridor,#app .fx-cor-view{overflow:visible!important;clip-path:inset(0 calc(-1*var(--bleed-r,0px)) 0 calc(-1*var(--bleed-l,0px)))}
#app .fx-corridor{background:transparent!important}
#app .fx-corridor:before{content:"";position:absolute;top:0;bottom:0;left:calc(-1*var(--bleed-l,0px));right:calc(-1*var(--bleed-r,0px));background:#07050a;z-index:-1}
#app .fx-cor-flip>.fx-cor-bg:first-of-type{margin-left:calc(-1*(var(--bleed-l,0px) + var(--bleed-r,0px)));padding-left:calc(var(--bleed-l,0px) + var(--bleed-r,0px));box-sizing:content-box}
#app .fx-cor-flip>.fx-cor-bg:nth-last-child(1 of .fx-cor-bg){padding-right:calc(var(--bleed-l,0px) + var(--bleed-r,0px));box-sizing:content-box}
/* v0.12.3 mirrored corridor (travelling right → left on the map): flip the world, keep labels readable */
.fx-cor-flip{position:absolute;left:0;top:0;bottom:0}
.fx-cor-flip.on{transform:scaleX(-1)}
.fx-cor-flip.on .fx-curio span,.fx-cor-flip.on .fx-cor-exit span{display:inline-block;transform:scaleX(-1)}
.fx-cor-flip.on .fx-cor-entry span{transform:scaleX(-1)}
.fx-cor-flip.on .fx-cor-ambush{transform:translateX(-50%) scaleX(-1)}
/* v0.12.6 dock actor panel: name + HP on one row, stress/AP and speed on their own rows, nothing clipped */
.battle .actor-panel{overflow:visible;min-width:0}
.battle .actor-panel>div{display:grid;grid-template-columns:auto 1fr;column-gap:6px;align-items:baseline;min-width:0;line-height:1}
.battle .actor-panel>div>h3{grid-column:1;margin:0!important;font-size:17px!important;line-height:19px!important;white-space:nowrap}
.battle .actor-panel>div>.small:nth-of-type(1){grid-column:2;font-size:13px!important;line-height:19px!important;white-space:nowrap;opacity:.9}
.battle .actor-panel>div>.small:nth-of-type(2){grid-column:1 / span 2;font-size:12.5px!important;line-height:15px!important;white-space:nowrap}
.battle .actor-panel .fx-spd{display:block;font-size:12px;line-height:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* v0.12.7 item rarity */
.fx-icon.rar-common{border-color:#6f6a62!important}
.fx-icon.rar-fine{border-color:#86d07c!important;box-shadow:0 0 6px #86d07c55}
.fx-icon.rar-rare{border-color:#6fb0ff!important;box-shadow:0 0 7px #6fb0ff66}
.fx-icon.rar-epic{border-color:#c58bff!important;box-shadow:0 0 8px #c58bff77}
.fx-icon.rar-legendary{border:2px solid #ffae42!important;box-shadow:0 0 12px #ffae42aa;animation:fxLegend 2.4s ease-in-out infinite}
.fx-icon.rar-unique{border-color:#f3d27a!important;box-shadow:0 0 8px #f3d27a77}
@keyframes fxLegend{50%{box-shadow:0 0 18px #ffae42dd}}
.fx-item-row.rar-fine strong{color:#a7e39e}.fx-item-row.rar-rare strong{color:#9cc9ff}.fx-item-row.rar-epic strong{color:#d8b2ff}.fx-item-row.rar-legendary strong{color:#ffc46e}.fx-item-row.rar-unique strong{color:#f3d27a}
.fx-rar-tag{display:inline-block;font-size:11px;line-height:15px;padding:0 5px;margin-right:6px;border-radius:3px;border:1px solid currentColor;vertical-align:1px;opacity:.9}
.fx-slot .fx-icon.rar-legendary{border-width:2px!important}
.fx-forge{border-color:#ffae4288!important}
.fx-forge select{flex:1;min-width:0;min-height:44px;background:#140e14;color:#f0e2cc;border:1px solid #6b553d;font-size:15px;padding:0 8px}
/* v0.13.0 rewarded ad buttons */
.fx-adbtn{border-color:#e3b872aa!important;color:#ffe2ad!important;gap:6px}
.fx-adbtn small{font-size:11px;opacity:.75;font-weight:400}
/* v0.13.0 CJK target languages */
html.fx-lang-ja body{font-family:"Hiragino Sans","Hiragino Kaku Gothic ProN","Noto Sans CJK JP","PingFang TC",sans-serif}
html.fx-lang-hans body{font-family:"PingFang SC","Noto Sans CJK SC","Microsoft YaHei","PingFang TC",sans-serif}
.fx-set-row .fx-seg .btn{padding-left:12px;padding-right:12px}

/* v0.13.0 (Grok QA F2/F8): the town bar must always fit its primary CTA; settings rows wrap on small screens */
.town .bottom-bar{gap:8px}
.town .bottom-bar .copy{flex:0 1 190px!important;min-width:0}
.town .bottom-bar .bottom-actions{flex:1 1 auto;min-width:0;display:flex;justify-content:flex-end;gap:6px!important;flex-wrap:nowrap}
.town .bottom-bar .bottom-actions .btn{min-width:0!important;flex:0 1 auto;padding:6px 10px!important;font-size:16px!important;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.town .bottom-bar .bottom-actions .btn .ico{width:22px;height:22px}
.town .bottom-bar .bottom-actions .btn.primary{flex:0 0 auto;font-size:17px!important}
html.fx-lang-en .town .bottom-bar .bottom-actions .btn:not(.primary),html.fx-lang-ja .town .bottom-bar .bottom-actions .btn:not(.primary){font-size:14px!important;padding:6px 8px!important}
.fx-set-row{flex-wrap:wrap}
.fx-set-row .fx-set-ctl{flex:0 1 auto;max-width:100%}
.fx-set-row .fx-seg{flex-wrap:wrap;justify-content:flex-end}

/* settings: long control groups (language) drop under the label instead of overflowing small phones */
.fx-set-row .item-copy{flex:1 1 160px}
.fx-set-row .fx-set-ctl{min-width:0}

/* Hyakki parallax (web) v20260921j — obvious motion, no flat still under stack */
.px-scene{position:absolute;inset:0;overflow:hidden;pointer-events:none;z-index:0;background:#0a1218}
section.town:has(.px-scene) .scene-bg,
section.battle:has(.px-scene) .scene-bg,
section.map:has(.px-scene) .scene-bg{display:none!important;background:none!important}
.px-layer{position:absolute;inset:0;overflow:visible}
.px-img{position:absolute;width:118%;height:118%;left:-9%;top:-8%;object-fit:cover;object-position:center 42%;will-change:transform,opacity,filter;pointer-events:none}
.px-back-a{z-index:1;filter:saturate(.95) brightness(.88)}
.px-back-b{z-index:2;mix-blend-mode:screen;filter:blur(1px) brightness(1.05)}
.px-mid{z-index:3}
.px-mid .px-img{animation:pxMidPulse 1.1s ease-in-out infinite;mix-blend-mode:screen;filter:brightness(1.35) saturate(1.4)}
.px-front{z-index:4}
.px-front .px-img{animation:none;filter:brightness(1.05) contrast(1.05)}
.px-torches{position:absolute;inset:0;z-index:5;pointer-events:none}
.px-flame{position:absolute;width:72px;height:72px;margin:-36px 0 0 -36px;border-radius:50%;background:radial-gradient(circle,#ffe9a8 0%,#ff8a2a 35%,#ff3a00 55%,transparent 72%);mix-blend-mode:screen;animation:pxTorchFlicker .45s steps(2,end) infinite;filter:blur(.5px)}
.px-vignette{position:absolute;inset:0;z-index:6;pointer-events:none;background:radial-gradient(ellipse at 50% 40%,transparent 35%,#06081088 100%)}
@keyframes pxMidPulse{0%,100%{opacity:.55;filter:brightness(1.1) saturate(1.2)}50%{opacity:1;filter:brightness(2.2) saturate(1.8)}}
@keyframes pxTorchFlicker{0%{opacity:.35;transform:scale(.75)}50%{opacity:1;transform:scale(1.15)}100%{opacity:.5;transform:scale(.9)}}
section.battle .px-flame{width:84px;height:84px;margin:-42px 0 0 -42px}
section.map .px-back-a{filter:sepia(.35) brightness(.9)}
section.map .px-mid .px-img{animation-duration:1.4s}
