/* Google Fonts, served locally so a long session needs no font service. */
@font-face{font-family:'Optimus Princeps';font-style:normal;font-weight:100 500;font-display:swap;src:url('assets/fonts/optimus-princeps-pt.woff2') format('woff2')}
@font-face{font-family:'Optimus Princeps';font-style:normal;font-weight:600 900;font-display:swap;src:url('assets/fonts/optimus-princeps-semibold-pt.woff2') format('woff2')}
:root{--font-title:'Optimus Princeps',serif;--font-ui:'Optimus Princeps',serif;--serif:var(--font-title);--ui:var(--font-ui);--hud-title-font:var(--font-title);--battle-sprite-scale:.7}
body,body *{font-family:var(--font-ui)!important;font-variant-numeric:lining-nums tabular-nums!important}
body :is(#appFrame,#authScreen,#hudBackdrop,#dialogBackdrop,#toastStack) *{font-family:var(--font-ui)!important}
body :is(.brand-name,.souls-area-announcement strong,.souls-boss-heading strong,.boss-intro-banner strong){font-family:var(--font-title)!important}

/* A single flow layout centers the complete indicator below the resource rail. */
.battle-panel .expedition-indicator{position:absolute;z-index:40;top:.75rem;left:50%;transform:translateX(-50%);width:min(28rem,40vw);display:flex;flex-direction:column;align-items:center;gap:.25rem;pointer-events:none}
.battle-panel .expedition-indicator :is(.battle-top,.stage-strip){position:relative!important;inset:auto!important;transform:none!important;max-width:none!important;min-height:0;width:100%;margin:0}
.battle-panel .expedition-indicator .battle-top{padding:.4rem 1.8rem}
.battle-panel .expedition-indicator .stage-strip{width:90%;gap:.3rem .6rem}
.battle-panel .expedition-indicator h1{font-size:clamp(1.3rem,2.1vw,2rem);font-weight:600;line-height:1.12;letter-spacing:.025em;margin:.2rem 0}
.battle-panel .expedition-indicator .eyebrow{font-size:.55rem;letter-spacing:.13em;line-height:1.2}
.battle-panel .expedition-indicator .stage-caption :is(strong,span),.battle-panel .stage-pips span{font-size:.55rem;line-height:1.3;letter-spacing:.02em}
.battle-view{position:absolute;inset:0;pointer-events:none}
.battle-view>.scene-characters{z-index:4}
.battle-view>.scene-effects{z-index:20}
.battle-view .attack-target{pointer-events:auto}

/* Resize the existing layout boxes, keeping each original center and floor. */
#battlefield{--hero-w:26%;--hero-x:22%;--hero-h:48%;--hero-limit:1;--hero-max:15.625rem;--enemy-w:34%;--enemy-x:76%;--enemy-h:var(--monster-stature,48%);--enemy-max:27.5rem}
#battlefield[data-monster-size=small]{--enemy-w:29%;--enemy-x:78.5%;--enemy-max:11.875rem}
#battlefield[data-monster-size=large]{--enemy-w:41%;--enemy-x:74.5%;--enemy-max:22.8125rem}
#battlefield[data-monster-size=giant]{--enemy-w:54%;--enemy-x:71%;--enemy-max:28.75rem;--hero-w:25%;--hero-x:18.5%;--hero-h:36%;--hero-limit:.7;--hero-max:12.8125rem}
#battlefield[data-monster-size=colossal]{--enemy-w:67%;--enemy-x:65.5%;--enemy-h:100%;--enemy-max:39.375rem;--hero-w:23%;--hero-x:15.5%;--hero-h:30%;--hero-limit:.42;--hero-max:10.625rem}
@media(min-width:100rem){#battlefield{--hero-max:18.125rem;--enemy-max:31.25rem}#battlefield[data-monster-size=small]{--enemy-max:13.75rem}#battlefield[data-monster-size=giant]{--enemy-max:35rem}#battlefield[data-monster-size=colossal]{--enemy-max:43.75rem;--hero-max:11.875rem}}
#battlefield.miniboss-fight{--enemy-w:53%;--enemy-x:71.5%;--enemy-h:74%;--enemy-max:1000rem}
#battlefield.boss-fight{--enemy-w:82%;--enemy-x:59%;--enemy-h:100%;--enemy-max:1000rem;--hero-w:25%;--hero-x:15.5%;--hero-h:28%;--hero-limit:.48;--hero-max:11.25rem}
#battlefield.final-boss-fight{--enemy-w:78%;--enemy-x:61%;--hero-w:23%;--hero-x:14.5%;--hero-h:22%;--hero-limit:.28;--hero-max:9.6875rem}
@media(orientation:landscape) and (max-height:37.5rem){
 #battlefield{--hero-w:25%;--hero-x:19.5%;--hero-max:10rem;--enemy-max:13.75rem}
 #battlefield[data-monster-size=small]{--enemy-w:30%;--enemy-x:78%;--enemy-max:6.5625rem}
 #battlefield[data-monster-size=large]{--enemy-x:76.5%}
 #battlefield[data-monster-size=giant]{--enemy-w:53%;--enemy-x:72.5%;--enemy-max:17.5rem;--hero-w:24%;--hero-x:17%;--hero-max:7.5rem}
 #battlefield[data-monster-size=colossal]{--enemy-w:65%;--enemy-x:66.5%;--enemy-max:1000rem;--hero-x:14.5%;--hero-max:6.25rem}
 #battlefield.miniboss-fight{--enemy-w:58%;--enemy-x:69%;--enemy-max:1000rem}
 #battlefield.boss-fight{--enemy-w:76%;--enemy-x:62%;--enemy-max:1000rem;--hero-w:24%;--hero-x:16%;--hero-h:34%;--hero-max:7.5rem}
 #battlefield.final-boss-fight{--enemy-w:76%;--enemy-x:62%;--hero-w:22%;--hero-x:15%;--hero-h:24%;--hero-max:5.625rem}
}
#battlefield .combat-hero{left:calc(var(--hero-x) - var(--hero-w) * var(--battle-sprite-scale) / 2)!important;width:calc(var(--hero-w) * var(--battle-sprite-scale))!important;height:min(calc(var(--hero-h) * var(--battle-sprite-scale)),calc((100% - var(--headroom) - var(--floor)) * var(--hero-limit) * var(--battle-sprite-scale)))!important;max-height:calc(var(--hero-max) * var(--battle-sprite-scale))!important}
#battlefield .attack-target{left:calc(var(--enemy-x) - var(--enemy-w) * var(--battle-sprite-scale) / 2)!important;right:auto!important;width:calc(var(--enemy-w) * var(--battle-sprite-scale))!important;height:min(calc(var(--enemy-h) * var(--battle-sprite-scale)),calc((100% - var(--headroom) - var(--floor)) * var(--battle-sprite-scale)))!important;max-height:calc(var(--enemy-max) * var(--battle-sprite-scale))!important;container-type:inline-size}
#battlefield :is(.actor-idle>img,.idle-motion,.idle-feet){image-rendering:pixelated!important}

/* Head position is measured on image load/resize, never on an attack frame. */
#battlefield .attack-target .mob-info{position:absolute!important;left:50%!important;right:auto!important;top:auto!important;bottom:calc(100% - var(--monster-head-y,0%) + .55em)!important;transform:translateX(-50%);width:max-content!important;max-width:100cqw!important;min-height:0!important;padding:0!important;border:0!important;border-image:none!important;background:none!important;box-shadow:none!important;display:flex;flex-direction:column;align-items:center;gap:.22em;pointer-events:none;text-align:center;overflow:visible;font-size:clamp(.75rem,4cqw,1rem)}
#battlefield .mob-info::before,#battlefield .mob-info::after{display:none!important}
#battlefield .mob-name-row{position:relative;isolation:isolate;display:flex;flex-direction:column;gap:.1em;min-height:0;background:none!important;white-space:normal;width:max-content;max-width:100%;padding:0}
#battlefield .mob-name-row::before{content:'';position:absolute;inset:-.35em -.8em;z-index:-1;background:radial-gradient(ellipse,rgb(0 0 0/.35),transparent 72%);pointer-events:none}
#battlefield .mob-name-row strong{font-size:1em;font-weight:600;line-height:1.12;letter-spacing:.025em;color:#ffe3b9;white-space:normal;overflow:visible;text-overflow:clip;overflow-wrap:anywhere;text-shadow:0 .08em .15em #000,0 0 .3em #000}
#battlefield .mob-rank{border:0;background:none;padding:0;font-size:clamp(.6875rem,.7em,.8rem);line-height:1.05;letter-spacing:.03em;text-shadow:0 .1em .2em #000}
#battlefield .mob-info .hp-track{width:min(70cqw,15em);height:.4375rem;min-height:0;border:.0625rem solid #10090c!important;border-radius:0;background:#170c12!important;margin:.1em 0 0;overflow:hidden;box-shadow:none;flex:none}
#battlefield .mob-info .hp-numbers{position:static;display:block;font-size:clamp(.75rem,.72em,.9rem);font-variant-numeric:lining-nums tabular-nums;line-height:1;color:#fff2de;text-shadow:0 .1em .2em #000;white-space:nowrap}
#battlefield.boss-fight .mob-info{font-size:clamp(.9rem,2.7cqw,1.45rem)}
#battlefield.boss-fight .mob-name-row strong{color:#e8bd78}
#battlefield.boss-fight .mob-info .hp-track{width:min(65cqw,17em);height:.5rem}

.toast-stack{position:fixed!important;z-index:120;top:calc(var(--resource-rail-bottom,3.125rem) + .75rem)!important;right:.75rem!important;bottom:auto!important;left:auto!important;display:flex;flex-direction:column;gap:.4rem;width:min(17.5rem,calc(100vw - 1.5rem))!important;pointer-events:none!important}
.toast-stack .toast{flex:none;margin:0;padding:.4rem .6rem;font-size:.625rem;line-height:1.3;letter-spacing:.015em;border:.0625rem solid #755438;border-left:.15rem solid #b58c55;background:rgb(23 15 19/.78);box-shadow:none;pointer-events:none!important;animation:none!important;max-height:2.5rem;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.boss-intro-banner{position:absolute;z-index:45;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.5rem;padding:2rem;pointer-events:none;background:radial-gradient(ellipse,rgb(8 5 9/.45),transparent 65%);text-align:center;text-shadow:0 .1rem .35rem #000,0 0 .75rem #000}
.boss-intro-banner small{font-size:.75rem;letter-spacing:.18em;color:#d5b98e}
.boss-intro-banner strong{font-size:clamp(2rem,4vw,4rem);font-weight:600;line-height:1.15;color:#f3d29d}
.battle-panel:has(.boss-presentation) .expedition-indicator,#battlefield.boss-presentation :is(.mob-info,.target-hint,.event-overlay){visibility:hidden!important}
#battlefield.boss-presentation .attack-target{opacity:1}
@media(max-width:47.5rem){.battle-panel .expedition-indicator{width:85vw;top:.5rem}#battlefield{--hero-w:34%;--hero-x:19%;--enemy-w:51%;--enemy-x:73.5%}.toast-stack{width:min(14rem,calc(100vw - 1.5rem))!important}}
@media(prefers-reduced-motion:reduce){#battleView{transform:none!important}.boss-intro-banner{opacity:1!important;translate:none!important}}

#battlefield .attack-target[data-head-ready=false] .mob-info{visibility:hidden}

@media(orientation:landscape) and (max-height:37.5rem){
 .battle-panel .expedition-indicator{top:.25rem;gap:.2rem}
 .battle-panel .expedition-indicator .battle-top{padding:.2rem 1.8rem}
 .battle-panel .expedition-indicator h1{font-size:1.15rem}
 .battle-panel .expedition-indicator .battle-top::before{border-image-width:1rem}
}
