/* Five-region expedition: shared responsive UI and clear card roles. */
:root{--combat-scale:1;--sprite-fit:2.4}
body{overflow-x:hidden}.header{gap:12px}.header .stats{gap:clamp(8px,1.7vw,22px)}
.scene-bg{background:#0e2025}.scene-bg>img{object-fit:cover;object-position:center 42%;opacity:.46;image-rendering:pixelated}.scene-bg:after{background:linear-gradient(0deg,#07141be8,transparent 85%),linear-gradient(90deg,#08151a80,#08151a25)}.scene-bg .snow{display:none}.in-combat .scene-bg>img{opacity:.82}.in-combat .scene-bg:after{background:linear-gradient(0deg,#07141b 7%,#07141b15 85%)}
.hero h1{font-size:clamp(42px,5.5vw,82px)}.hero-art{min-width:0}.hero-art img.sprite-lohen{max-width:100%;width:min(404px,35vw);height:auto}.hero .intro{color:#d1e1df}.hero-label{background:#0b1c23b0;padding:12px 16px}
.stage-trail{display:flex;gap:8px;margin-bottom:26px;align-items:stretch}.stage-trail span{flex:1;min-width:0;padding:12px 9px;border:1px solid #a0d6d129;background:#0c2029e8;color:#8ca8ac;font-size:11px;line-height:1.6}.stage-trail b{display:block;font:18px Georgia;color:#799a9e;margin-bottom:3px}.stage-trail .active{border-color:#aee7df;background:#1c4548ec;color:#f0fffa}.stage-trail .active b{color:#d7fef5}.stage-trail .cleared{color:#b8cebd;border-color:#8baf8f55}
.route-panel{padding:22px;background:#0b202ae8;border:1px solid #91b4b54a}.route-heading{display:flex;justify-content:space-between;gap:15px;margin-bottom:19px;color:#d9e9e4}.route-heading span{font-size:12px;color:var(--ice)}.route-arrow{margin-left:auto;color:var(--gold)}.map-row{grid-template-columns:32px repeat(3,minmax(0,1fr))}.node{min-width:0}.node.current{background:#284c54;border-color:#afd9cc}.node.locked{opacity:.55}.node.boss{background:#49382fe8}.map-layout{grid-template-columns:minmax(190px,250px) minmax(0,1fr)}.panel{background:#10232cf2}.page-title p{color:#cee1df}.stage-clear{max-width:1080px;padding-top:44px}.stage-supplies{display:flex;gap:12px;justify-content:center;margin:30px 0;flex-wrap:wrap}.stage-supplies span{padding:14px 18px;border:1px solid #bfe0c74a;background:#173a35e0;color:#d6f1d8}
/* Only one small composited layer per actor breathes. Hidden tabs and reduced-motion pause it. */
.pose-viewport{animation:breathe 3.8s steps(8,end) infinite;transform-origin:50% 100%}.enemy:nth-child(2) .pose-viewport{animation-delay:-1.4s}.enemy:first-child .pose-viewport{animation-delay:-.8s}.pose-viewport.acting{animation:none;transform:none}.low-effects .pose-viewport{animation-timing-function:steps(4,end);animation-duration:4.8s}
@keyframes breathe{0%,100%{transform:scale(1,1)}50%{transform:scale(.997,1.015)}}
/* The complete desktop battle shrinks to available width AND height. */
.combat-fit{height:calc(800px*var(--combat-scale));position:relative;width:100%}.combat-board{position:absolute;left:50%;top:0;margin-left:calc(-640px*var(--combat-scale));width:1280px;height:800px;transform:scale(var(--combat-scale));transform-origin:top left}
.combat-board .combat-top{height:75px;padding:17px 4% 0;align-items:center}.combat-board .combat-top h2{font-size:22px;text-shadow:0 2px 4px #07151b}.combat-board .battlefield{height:355px;min-height:0;max-height:none;padding:25px 8% 8px;align-items:end}.combat-board .unit{width:215px}.combat-board .enemies{gap:35px}.combat-board .sprite-stage{--sprite-scale:2.2}.combat-board .stage-lohen,.combat-board .stage-varka{--sprite-scale:2.6}.combat-board .stage-ruinguard{--sprite-scale:2.4}.combat-board .intent{top:-34px;font-size:12px;max-width:220px}.combat-board .unit-name{font-size:12px}.combat-board .health-text{font-size:11px}.combat-board .combat-log{height:30px;background:#0b1b23d9;border:1px solid #a0d2ca3a}.combat-board .combat-bottom{height:340px;min-height:0;padding:12px 3% 8px}.combat-board .hand-controls{height:48px;flex-wrap:nowrap;padding:0}.combat-board .energy{width:45px;height:45px;font-size:25px}.combat-board .energy-label{font-size:11px}.combat-board .hand{gap:10px;min-height:0;height:216px;padding:20px 10px 8px;overflow-x:auto;overflow-y:hidden;justify-content:safe center;scrollbar-width:thin}.combat-board .hand .card{width:158px;min-width:135px;min-height:186px;height:186px;flex-shrink:0;padding:10px 10px 8px}.combat-board .card .sigil{height:38px;font-size:32px}.combat-board .card h3{margin:5px 0;font-size:13px}.combat-board .card p{font-size:11px;line-height:1.55}.combat-board .card .card-type{padding-top:4px}.combat-board .statuses{margin-top:4px}.combat-board .enemy .target{height:14px}.combat-board .unit.player{padding-bottom:12px}.combat-help{text-align:center;font-size:10px;color:#abc2c5;line-height:20px}.card-guide{font-size:11px;text-align:center;color:#d4eae3;height:22px;line-height:22px}
/* Color, icon, label, and secondary-effect text all convey card function. */
.card{--role:#bba5f1;border:2px solid var(--role);border-top-width:5px;isolation:isolate;transition:transform .14s,border-color .14s,box-shadow .14s}.card.role-attack{--role:#f29277;background:linear-gradient(145deg,#743e33,#30232b 75%)}.card.role-defense{--role:#7cbeef;background:linear-gradient(145deg,#285d83,#152b43 75%)}.card.role-buff{--role:#c2a0f4;background:linear-gradient(145deg,#664289,#30213f 75%)}.card.role-debuff{--role:#78d6cb;background:linear-gradient(145deg,#276a67,#18343a 75%)}.card.role-curse{--role:#9ba1aa;background:linear-gradient(145deg,#454953,#242731 75%)}
.card .role-badge{align-self:flex-end;font-size:11px;font-weight:800;color:var(--role);padding:2px 5px 7px;letter-spacing:1px}.card .cost{top:5px;left:6px;border-color:var(--role);background:#111d2a;color:#fff}.card .sigil,.card.attack .sigil,.card.power .sigil{color:var(--role);text-shadow:none}.card .card-type{color:var(--role);font-weight:700;letter-spacing:1px}.card p{color:#edf0ef}.card .rarity{display:none}.card:hover:not(:disabled){border-color:var(--role);background-color:transparent;transform:translateY(-7px);box-shadow:0 5px 14px #0006}.card.unplayable:hover{transform:none}.card.card-selected,.card.card-selected:hover:not(:disabled),.low-effects .card.card-selected{transform:translateY(-13px);outline:2px solid #fff3c8;outline-offset:3px;box-shadow:0 0 18px #ffeab645;z-index:5}.confirm-tag{position:absolute;bottom:-5px;left:8px;right:8px;padding:3px;background:#ffefb7;color:#24262a;font-size:10px;font-weight:800;border-radius:2px;white-space:nowrap}.card.card-selected .card-type{visibility:hidden}.card.unplayable{opacity:.5}.card:focus-visible{outline-color:#ffeeba}
@media(max-width:1000px){.header{padding:12px 16px;height:auto;min-height:68px}.brand{font-size:14px}.header-actions{gap:4px}.header-actions button{font-size:11px;padding:7px 9px}.stat{font-size:11px}.shell{padding:24px 18px}.map-layout{grid-template-columns:180px minmax(0,1fr);gap:18px}.portrait img.sprite-lohen{width:154px;height:auto}.route-panel{padding:16px}.stage-trail span{font-size:10px}.page-title h1{font-size:30px}}
@media(max-width:960px){
 .header{padding:9px 10px;gap:7px}.header .stats{margin:0;padding-top:6px;gap:22px}.header .stat b{font-size:12px}.brand{font-size:13px}.header-actions button{padding:6px;font-size:10px}.hero{padding:35px 22px}.hero-art img.sprite-lohen{width:280px;max-width:none}.hero-art{right:-105px;bottom:60px}.hero h1{font-size:clamp(38px,10vw,58px)}.hero-footer{gap:18px}.stage-trail{gap:4px;margin-bottom:18px}.stage-trail span{padding:8px 4px;font-size:9px;word-break:keep-all}.stage-trail b{font-size:15px}.map-layout{display:block}.route-panel{padding:12px 9px}.page-title h1{font-size:clamp(22px,6.5vw,30px)}.page-title p{font-size:12px}.map-row{gap:5px;grid-template-columns:20px repeat(3,minmax(0,1fr))}.node{padding:6px;height:62px}.node strong{font-size:10px}.node small{font-size:9px}.route-arrow{display:none}.route-heading{font-size:12px}.stage-clear{padding:25px 14px}.stage-supplies{gap:6px}.stage-supplies span{padding:10px;font-size:11px}
 .combat-fit{height:auto}.combat-board{position:relative;left:auto;margin:0;width:100%;height:auto;transform:none}.combat-board .combat-top{height:62px;padding:9px 12px 0;gap:8px}.combat-board .combat-top .eyebrow{font-size:9px;letter-spacing:1px}.combat-board .combat-top h2{font-size:15px}.combat-board .turn-tag{font-size:9px;padding:7px;white-space:nowrap}.combat-board .battlefield{height:clamp(210px,36svh,300px);padding:30px 3% 0;justify-content:space-between}.combat-board .unit,.combat-board .enemies:has(.enemy:nth-child(2)) .unit{width:clamp(82px,24vw,135px);padding:0 3px 8px}.combat-board .enemies{gap:3px}.combat-board .sprite-stage{--sprite-scale:var(--sprite-fit)}.combat-board .stage-lohen,.combat-board .stage-varka,.combat-board .stage-ruinguard{--sprite-scale:var(--sprite-fit)}.combat-board .intent{font-size:9px;top:-32px;padding:5px 6px;max-width:145px}.combat-board .unit-name{font-size:10px;letter-spacing:0}.combat-board .health-text{font-size:9px}.combat-board .status{font-size:9px;padding:3px}.combat-board .statuses{gap:3px}.combat-board .combat-log{font-size:10px;height:29px;margin:0 3%;padding:0 7px}.combat-board .combat-bottom{height:auto;padding:10px 8px 8px}.combat-board .hand-controls{height:auto;min-height:75px;flex-wrap:wrap;gap:7px}.combat-board .hand-controls>.energy-group{order:1}.combat-board .hand-controls>.end-turn{order:2;margin-left:auto}.combat-board .hand-controls>div:nth-child(2){order:3;width:100%;justify-content:center}.combat-board .energy-label{font-size:9px}.combat-board .energy{width:36px;height:36px;font-size:22px}.combat-board .end-turn{padding:10px 14px;font-size:11px}.combat-board .hand-controls .small{font-size:10px;padding:6px 9px}.card-guide{font-size:9px;height:auto;min-height:24px;line-height:1.5;padding:6px 0 1px}.combat-board .hand{height:203px;padding:18px 7px 8px;gap:8px;justify-content:flex-start}.combat-board .hand .card{width:clamp(110px,31vw,145px);min-width:110px;height:177px;min-height:177px;padding:8px}.combat-board .card h3{font-size:11px}.combat-board .card p{font-size:10px}.card .role-badge{font-size:10px}.combat-board .card .sigil{height:30px;font-size:27px}.combat-help{font-size:9px;line-height:1.6}.confirm-tag{font-size:9px;left:3px;right:3px}.reward-cards .card{width:clamp(125px,39vw,175px)}
}
@media(prefers-reduced-motion:reduce){.pose-viewport{animation:none!important}.card{transition:none}}
