.dungeon-screen.dp-popup:not(.renewal-selection):not([hidden]){position:absolute!important;inset:0!important;margin:0!important;width:100%!important;height:100%!important;max-height:none!important;z-index:1500!important;display:block!important;background:#f1e9cf;--pu:var(--dungeon-popup-unit,.5px);overflow:hidden!important}
.dp-popup:not(.renewal-selection)>#battlefield{position:absolute!important;inset:0 0 auto!important;width:100%!important;height:46%!important;min-height:0!important;max-height:none!important;border:0!important;border-radius:0!important}
.dp-popup:not(.renewal-selection)>.dungeon-deployment-panel{position:absolute!important;top:42%!important;left:0!important;width:100%!important;height:15.4%!important;min-height:0!important;padding:0 calc(50 * var(--pu))!important;background:transparent!important;z-index:5!important;display:block!important}
.dp-popup .menu-concept-heading,.dp-popup .menu-concept-surface,.dp-popup .dungeon-inline-picker,.dp-popup .dungeon-entry-wallet,.dp-popup .dungeon-header-navigation{display:none!important}
.dp-popup .battle-menu-head{margin:0!important;height:calc(85 * var(--pu))!important}
.dp-popup #heroCards{margin:0!important;width:100%!important}
.dp-popup .dp-art{position:absolute;pointer-events:none;z-index:20;object-fit:contain}
.dp-popup .dp-top{top:0;left:0;width:100%}
.dp-popup .dp-left{bottom:0;left:0;width:25%}
.dp-popup .dp-right{bottom:0;right:0;width:25%}
.dp-popup .dp-details{position:absolute;top:57.4%;left:0;width:100%;height:32%;border-top:calc(8 * var(--pu)) solid #e6c779;background:#f1e9cf;color:#542e1c}
.dp-intro{height:calc(125 * var(--pu));margin:calc(35 * var(--pu)) 8%;border:calc(2 * var(--pu)) solid #d4aa55;border-radius:calc(80 * var(--pu));display:flex;align-items:center;gap:calc(25 * var(--pu));padding:0 calc(30 * var(--pu))}
.dp-intro>img{width:30%;height:calc(138 * var(--pu));object-fit:contain}.dp-intro p{font:calc(30 * var(--pu))/1.45 'Malgun Gothic',sans-serif;margin:0;white-space:nowrap}
.dp-reward-panel{position:relative;margin:0 2.4%;height:calc(416 * var(--pu));border-radius:calc(50 * var(--pu));overflow:hidden;background:#faf7e7;padding:calc(36 * var(--pu)) calc(100 * var(--pu));color:#173c62}
.dp-person{position:absolute;height:100%;right:0;top:0;opacity:.55;pointer-events:none;mask-image:linear-gradient(90deg,transparent,#000 30%)}
.dp-step{position:relative;width:calc(430 * var(--pu));height:calc(90 * var(--pu));border:calc(2 * var(--pu)) solid #ccaa66;border-radius:calc(50 * var(--pu));display:flex;align-items:center;justify-content:space-between;padding:calc(8 * var(--pu));font-size:calc(44 * var(--pu))}
.dp-step button{width:calc(72 * var(--pu));height:calc(72 * var(--pu));border:0;background:url('assets/ui/dp-arrow-1505.png') center/contain no-repeat}.dp-step button:last-child{transform:rotate(180deg)}.dp-step button:disabled{opacity:.4}
.dp-reward-panel h3{position:relative;font-size:calc(34 * var(--pu));margin:calc(26 * var(--pu)) 0 calc(20 * var(--pu));display:flex;gap:calc(16 * var(--pu));align-items:center}.dp-gift{width:calc(40 * var(--pu));height:calc(40 * var(--pu));background:#2a5481;mask:url('assets/ui/dp-gift-1505.png') center/contain no-repeat}
.dp-reward-panel ul{position:relative;display:flex;gap:calc(30 * var(--pu));padding:0;margin:0;list-style:none}.dp-reward-panel li{position:relative;width:calc(150 * var(--pu));height:calc(150 * var(--pu));background:#352319;border:calc(4 * var(--pu)) ridge #dba358;border-radius:calc(18 * var(--pu))}.dp-reward-panel li img{width:100%;height:100%;object-fit:contain}.dp-reward-panel li b{position:absolute;right:calc(6 * var(--pu));bottom:calc(5 * var(--pu));font-size:calc(26 * var(--pu));color:white;text-shadow:1px 2px 2px #000}
.dp-popup:not(.renewal-selection)>.dungeon-screen-actions{position:absolute!important;bottom:2.2%!important;left:27.5%!important;width:45%!important;height:6.5%!important;padding:0!important;min-height:0!important;display:block!important;background:none!important;z-index:25}
.dp-popup .dungeon-start-group{display:block!important;width:100%!important;height:100%!important}.dp-popup [data-dungeon-start]{width:100%!important;height:100%!important;border:0!important;background:url('assets/ui/dungeon-enter-1393.png') center/100% 100% no-repeat!important;color:white!important;font:700 calc(42 * var(--pu)) 'Malgun Gothic',sans-serif!important;padding:0!important;box-shadow:none!important}.dp-popup .dungeon-start-group:before,.dp-popup .dungeon-start-group:after{display:none!important}
.dp-exit{position:absolute;left:2.5%;bottom:1.5%;width:6.1%;aspect-ratio:1;border:0;background:url('assets/ui/dp-exit-1505.png') center/contain no-repeat;z-index:30}
.dp-popup.dp-running .dp-exit,.dp-popup.dp-running .dp-details{display:none}
.dp-popup.dp-running>.dungeon-screen-actions{left:auto!important;right:2.5%!important;bottom:1.5%!important;width:6.1%!important;height:auto!important;aspect-ratio:1}.dp-popup.dp-running [data-dungeon-start]{aspect-ratio:1;background:url('assets/ui/dp-stop-1505.png') center/contain no-repeat!important}
body:has(.dp-popup:not(.renewal-selection):not([hidden])) .bottom-nav{visibility:hidden!important}
.dungeon-stop-modal{z-index:1600!important}
#dungeonPopup#dungeonPopup .dungeon-start-action{background:url('assets/ui/dungeon-enter-1393.png') center/100% 100% no-repeat!important;border:0!important;color:white!important;border-radius:0!important}
#dungeonPopup#dungeonPopup .dungeon-start-action>span{visibility:visible!important;color:white!important;font:700 calc(42 * var(--pu)) 'Malgun Gothic',sans-serif!important}
#dungeonPopup#dungeonPopup.dp-running .dungeon-start-action{background:url('assets/ui/dp-stop-1505.png') center/contain no-repeat!important}
#dungeonPopup .dp-preview-boss{position:absolute;right:22%;bottom:22%;width:19%;height:30%;object-fit:contain;z-index:8;pointer-events:none}
#dungeonPopup:not(.renewal-selection) #heroCards .portrait{opacity:.9!important;filter:none!important} 
#dungeonPopup .dp-preview-boss{z-index:80;bottom:15%;height:37%;width:24%}
#dungeonPopup .dungeon-screen-actions:before,#dungeonPopup .dungeon-screen-actions:after{display:none!important}
/* Align the 66px exit icon to the supplied corner frame's (58,190) center. */
#dungeonPopup .dp-exit{left:calc(25 * var(--pu));bottom:calc(25 * var(--pu));width:calc(66 * var(--pu));height:calc(66 * var(--pu))}
#dungeonPopup #battlefield[data-dungeon="exp"]>.battle-foreground{display:block!important;inset:auto 0 0!important;height:auto!important;aspect-ratio:1080/354;background:url('assets/battlefields/library-foreground-1375.png') center bottom/100% auto no-repeat!important}
/* Reuse adventure battlefield dimensions and anchor the deck to its bottom. */
#dungeonPopup.dp-popup:not(.renewal-selection)>#battlefield{top:calc(100 * var(--hu))!important;height:var(--scene-height)!important;flex:0 0 var(--scene-height)!important}
#dungeonPopup.dp-popup:not(.renewal-selection)>.dungeon-deployment-panel{top:calc(100 * var(--hu) + var(--scene-height) - 138px)!important;height:138px!important;z-index:400!important;overflow:visible!important}
#dungeonPopup .battle-menu-head{height:34px!important}
#dungeonPopup #heroCards{position:absolute!important;left:26px!important;right:26px!important;top:40px!important;width:auto!important;height:84px!important;gap:6px!important}
#dungeonPopup #heroCards>.card{height:84px!important;min-height:0!important}
#dungeonPopup .dp-details{top:calc(100 * var(--hu) + var(--scene-height))!important}
/* Use the same scenery pair and crop as the corresponding adventure art preview. */
#dungeonPopup #battlefield[data-dungeon]{background-size:cover!important;background-position:center center!important;background-repeat:no-repeat!important}
#dungeonPopup #battlefield[data-dungeon="gold"]{background-image:url('assets/battlefields/gold-background-1365.png')!important}
#dungeonPopup #battlefield[data-dungeon="exp"]{background-image:url('assets/battlefields/library-background-1375.png')!important}
#dungeonPopup #battlefield[data-dungeon="stone"]{background-image:url('assets/battlefields/forge-background-1377.png')!important}
#dungeonPopup #battlefield[data-dungeon]:before{content:none!important;background:none!important}
#dungeonPopup #battlefield[data-dungeon="gold"]>.battle-foreground{display:block!important;inset:auto 0 0!important;height:auto!important;aspect-ratio:1080/392;background:url('assets/battlefields/gold-foreground-1373.png') center bottom/100% auto no-repeat!important}
#dungeonPopup #battlefield[data-dungeon="stone"]>.battle-foreground{display:block!important;inset:auto 0 0!important;height:auto!important;aspect-ratio:1080/436;background:url('assets/battlefields/forge-foreground-1380.png') center bottom/100% auto no-repeat!important}
/* Supplied ornamental line around the dungeon introduction. */
#dungeonPopup .dp-intro{border:0;border-radius:0;background:url('assets/ui/dp-line-1505.png') center/100% 100% no-repeat}
/* Nine-slice keeps the ornamental ends proportional; only the middle stretches. */
#dungeonPopup .dp-intro{background:none;border-style:solid;border-color:transparent;border-width:0 calc(64 * var(--pu));border-image-source:url('assets/ui/dp-line-1505.png');border-image-slice:0 64 fill;border-image-width:0 calc(64 * var(--pu));border-image-repeat:stretch;padding-left:0;padding-right:0}
/* Match the dungeon entry button dimensions, typography and optical centering. */
#dungeonPopup.dp-popup:not(.renewal-selection):not(.dp-running)>.dungeon-screen-actions{left:24.89%!important;width:50.22%!important;height:auto!important;aspect-ratio:565/122}
#dungeonPopup#dungeonPopup:not(.dp-running) .dungeon-start-action{display:flex!important;align-items:center!important;justify-content:center!important;padding:0!important;font:700 calc(37.26 * var(--hu))/1 "Malgun Gothic",system-ui,sans-serif!important;text-align:center!important}
#dungeonPopup#dungeonPopup:not(.dp-running) .dungeon-start-action>span{display:block!important;font:inherit!important;line-height:1!important;transform:translateY(calc(2 * var(--hu)));pointer-events:none}
#dungeonPopup#dungeonPopup .dungeon-start-action{box-shadow:none!important}
#dungeonPopup .dp-exit{bottom:calc(25 * var(--pu) - 1px)}
#dungeonPopup .dp-gift{width:calc(48 * var(--pu));height:calc(48 * var(--pu));flex-shrink:0}
#dungeonPopup .dp-reward-panel h3{gap:calc(8 * var(--pu))}
/* Extend the scene behind the top frame while keeping its lower edge anchored. */
#dungeonPopup.dp-popup:not(.renewal-selection)>#battlefield{top:0!important;height:calc(var(--scene-height) + 100 * var(--hu))!important;flex-basis:calc(var(--scene-height) + 100 * var(--hu))!important}
/* Keep the previous scene crop; only expose the area behind the header. */
#dungeonPopup #battlefield[data-dungeon]{background-size:var(--dp-back-width) var(--dp-back-height)!important;background-position:center var(--dp-back-y)!important}

/* Reuse the level-up material slots, including their rarity borders. */
#dungeonPopup .dp-reward-panel .hero-exp-materials{justify-content:flex-start;margin:0;padding:0;gap:calc(30 * var(--pu))}
#dungeonPopup .dp-reward-panel .hero-exp-materials .hero-exp-material{width:calc(150 * var(--pu));height:calc(150 * var(--pu));padding:0;border:2px solid #a99a79;border-radius:8px;background:#e6ddc7;box-shadow:inset 0 0 0 2px #f3ecd9;cursor:default}
#dungeonPopup .dp-reward-panel .hero-exp-material.rare{border-color:#4f8fc3}
#dungeonPopup .dp-reward-panel .hero-exp-material.epic{border-color:#8c54c7}
/* Center rewards beneath the stage selector, regardless of reward count. */
#dungeonPopup .dp-reward-panel h3{width:calc(430 * var(--pu));justify-content:center}
#dungeonPopup .dp-reward-panel .hero-exp-materials{width:calc(430 * var(--pu));justify-content:center;gap:calc(18 * var(--pu))}
#dungeonPopup .dp-reward-panel .hero-exp-materials .hero-exp-material{flex:0 1 calc(150 * var(--pu));min-width:0;height:auto;aspect-ratio:1}
/* Center action labels without the previous downward optical offset. */
.dr-enter>span{transform:none!important;translate:none!important;margin:0!important;padding:0!important;line-height:1!important}
#dungeonPopup#dungeonPopup:not(.dp-running) .dungeon-start-action>span{transform:none!important;translate:none!important;margin:0!important;padding:0!important;line-height:1!important}
.dr-enter,#dungeonPopup#dungeonPopup:not(.dp-running) .dungeon-start-action{display:flex!important;align-items:center!important;justify-content:center!important;text-indent:0!important}
/* Compact the reward panel with even spacing between its information rows. */
#dungeonPopup .dp-reward-panel{height:calc(390 * var(--pu));padding-top:calc(30 * var(--pu));padding-bottom:calc(30 * var(--pu))}
#dungeonPopup .dp-reward-panel h3{margin-top:calc(20 * var(--pu));margin-bottom:calc(20 * var(--pu))}
/* Match the adventure menu panel's side spacing and corner radius. */
#dungeonPopup .dp-reward-panel{margin-left:15px;margin-right:15px;border-radius:20px}
/* Shared subtle panel glow; wider intro ornament with fixed-size ends. */
#dungeonPopup .dp-reward-panel{box-shadow:0 -1px 7px #79643b1a}
#dungeonPopup .dp-intro{margin-left:4%;margin-right:4%}
/* Lift the introduction chest slightly and add a soft silhouette shadow. */
#dungeonPopup .dp-intro>img{transform:translateY(calc(-8 * var(--pu)));filter:drop-shadow(0 calc(3 * var(--pu)) calc(5 * var(--pu)) #49331e26)}
#dungeonPopup .dp-intro>img{transform:translateY(calc(-8 * var(--pu))) scale(.9)}
#dungeonPopup .dp-intro>img{transform:translateY(calc(-8 * var(--pu))) scale(.945)}
/* Reduce reward information uniformly around the stage selector's center. */
#dungeonPopup .dp-step,#dungeonPopup .dp-reward-panel h3,#dungeonPopup .dp-reward-panel .hero-exp-materials{transform:scale(.9);transform-origin:center center}
/* Bring the reward slots closer to their heading. */
#dungeonPopup .dp-reward-panel h3{margin-bottom:calc(4 * var(--pu))}
/* Center the reward information vertically, preserving its internal spacing. */
#dungeonPopup .dp-reward-panel{display:flex;flex-direction:column;justify-content:center}
#dungeonPopup .dp-step,#dungeonPopup .dp-reward-panel h3,#dungeonPopup .dp-reward-panel .hero-exp-materials{flex-shrink:0}
#dungeonPopup .dp-step button{background-image:url('assets/ui/dp-arrow-1532.png')}
#dungeonPopup .dp-step,#dungeonPopup .dp-reward-panel h3,#dungeonPopup .dp-reward-panel .hero-exp-materials{transform:translateX(-5px) scale(.9)}
/* Optical alignment for the Korean action labels. */
.dr-enter>span{transform:translateY(-2px)!important}
#dungeonPopup#dungeonPopup:not(.dp-running) .dungeon-start-action>span{transform:translateY(-2px)!important}
/* The reused adventure HUD is positioned relative to the entire game shell. */
#dungeonPopup.dp-popup:not(.renewal-selection)>.dungeon-deployment-panel{inset:0!important;top:0!important;height:100%!important;padding:0!important;pointer-events:none}
#dungeonPopup.dp-popup .dungeon-deployment-panel>.battle-menu-head{position:absolute!important;left:26px!important;right:26px!important;top:calc(60px + var(--scene-height) - 138px)!important;padding:0!important;height:34px!important}
#dungeonPopup.dp-popup .dungeon-deployment-panel>#heroCards{top:calc(60px + var(--scene-height) - 98px)!important;padding:0!important}
#dungeonPopup .dungeon-deployment-panel :is(button,.hero-cards,.battle-deck-heading,.deployment-wallet){pointer-events:auto}
#dungeonPopup.dp-popup #heroCards .card:not(:disabled)>.portrait{opacity:.9!important}
#dungeonPopup.dp-popup #heroCards .card:disabled>.portrait{opacity:var(--disabled-portrait-opacity,.45)!important}
#dungeonPopup.dp-popup:not(.renewal-selection)>.dungeon-deployment-panel{margin:0!important;transform:none!important;translate:none!important;border:0!important}
/* Reward count must not resize the material slots. */
#dungeonPopup .dp-reward-panel .hero-exp-materials .hero-exp-material{flex:0 0 calc(150 * var(--pu));width:calc(150 * var(--pu));height:calc(150 * var(--pu));min-width:calc(150 * var(--pu))}
#dungeonPopup .dp-reward-panel .hero-exp-materials{overflow:visible}
/* Restore the intro chest's original display scale and nudge it left. */
#dungeonPopup .dp-intro>img{transform:translate(-5px,calc(-8 * var(--pu))) scale(1)}
#dungeonPopup.dp-popup:not(.renewal-selection):not(.dp-running)>.dungeon-screen-actions{top:var(--dp-start-top,auto)!important;bottom:auto!important}
#dungeonPopup .dp-title{position:absolute;top:0;left:20%;width:60%;height:calc(106 * var(--pu));display:flex;align-items:center;justify-content:center;margin:0;padding:0 0 calc(3 * var(--pu));z-index:21;pointer-events:none;color:#ffe8ab;font:700 calc(48 * var(--pu))/1 "Malgun Gothic",system-ui,sans-serif;letter-spacing:calc(2 * var(--pu));text-shadow:0 calc(2 * var(--pu)) calc(2 * var(--pu)) #39200f40}
/* Enlarge around the face; the reward panel clips the lower illustration. */
#dungeonPopup .dp-person{transform:scale(1.2);transform-origin:65% 18%}
/* Compensate HUD positions for the extra scene area behind the top frame. */
#dungeonPopup #battlefield>.castle,#dungeonPopup #battlefield>.battle-auto-hud{translate:0 calc(100 * var(--hu))}
#dungeonPopup .dp-step,#dungeonPopup .dp-reward-panel h3,#dungeonPopup .dp-reward-panel .hero-exp-materials{transform:translateX(-10px) scale(.9)}
/* A soft backdrop behind the portrait, fading out toward the reward information. */
#dungeonPopup .dp-reward-panel:before{content:'';position:absolute;inset:0;pointer-events:none;background:var(--dp-portrait-backdrop) right center/cover no-repeat;opacity:.35;mask-image:linear-gradient(90deg,transparent 25%,#000 75%)}
#dungeonPopup .dp-details[data-dungeon="gold"]{--dp-portrait-backdrop:url('assets/ui/dungeon-gold-background-1435.png')}
#dungeonPopup .dp-details[data-dungeon="exp"]{--dp-portrait-backdrop:url('assets/ui/dungeon-archive-background-1501.png')}
#dungeonPopup .dp-details[data-dungeon="stone"]{--dp-portrait-backdrop:url('assets/ui/dungeon-mine-background-1502.png')}
/* Empty deployment slots retain the same appearance as adventure. */
#dungeonPopup #heroCards[inert] .card.deck-empty{opacity:1}
/* Keep the backdrop from showing through the character artwork. */
#dungeonPopup .dp-person{opacity:1}
/* Use shell-resolved scene height: the deployment panel has a different --hu. */
#dungeonPopup.dp-popup .dungeon-deployment-panel>.battle-menu-head{top:calc(60px + var(--dp-scene-height) - 138px)!important}
#dungeonPopup.dp-popup .dungeon-deployment-panel>#heroCards{top:calc(60px + var(--dp-scene-height) - 98px)!important}
#dungeonPopup.dp-popup:not(.renewal-selection)>#battlefield{border-bottom:6px solid #e6c779!important}
#dungeonPopup.dp-popup .dungeon-deployment-panel>.battle-menu-head{top:calc(44px + var(--dp-scene-height) - 138px)!important}
#dungeonPopup.dp-popup .dungeon-deployment-panel>#heroCards{top:calc(44px + var(--dp-scene-height) - 98px)!important}
/* Keep the real adventure battlefield and controls in their original DOM homes. */
main.game-shell.dp-shared-scene>.controls{display:flex!important}
main.game-shell.dp-shared-scene>#dungeonPopup{background:transparent!important;pointer-events:none}
main.game-shell.dp-shared-scene>#dungeonPopup>.dp-details{height:calc(100% - 100 * var(--hu) - var(--scene-height));pointer-events:auto}
main.game-shell.dp-shared-scene>#dungeonPopup>:is(.dungeon-screen-actions,.dp-exit){pointer-events:auto}
main.game-shell.dp-shared-scene>#battlefield{border-radius:0!important}
main.game-shell.dp-shared-scene>.controls .card.deck-empty{opacity:1}
main.game-shell.dp-shared-scene>#dungeonPopup>.dp-top{z-index:500}
main.game-shell.dp-shared-scene>#dungeonPopup>.dp-title{z-index:501}
main.game-shell.dp-shared-scene>header{visibility:hidden}
main.game-shell.dp-shared-scene>#dungeonPopup:before{content:'';position:absolute;inset:0 0 auto;height:calc(100 * var(--hu));background:var(--dp-frame-scene) center top/100% auto no-repeat;pointer-events:none}
/* The shared battlefield already draws the 6px divider. */
main.game-shell.dp-shared-scene>#dungeonPopup>.dp-details{border-top:0}
#dungeonPopup .dp-step,#dungeonPopup .dp-reward-panel h3,#dungeonPopup .dp-reward-panel .hero-exp-materials{transform:translateX(-20px) scale(.9)}
/* Idle rewards belong to adventure, not the dungeon battle surface. */
main.game-shell.dp-shared-scene>#battlefield>.idle-chest{display:none!important}
#dungeonPopup .dp-exit:after{content:'';position:absolute;inset:0;background:url('assets/ui/dp-exit-1505.png') center/contain no-repeat;filter:url('#dp-exit-gold');pointer-events:none}
/* Entrance only: keep the battlefield and decorative frame stationary. */
#dungeonPopup.dp-arriving>.dp-title{animation:dpInfoReveal .35s .05s both}
#dungeonPopup.dp-arriving .dp-intro{animation:dpInfoReveal .4s .12s both}
#dungeonPopup.dp-arriving .dp-reward-panel{animation:dpInfoReveal .4s .2s both}
#dungeonPopup.dp-arriving .dp-person{animation:dpPortraitReveal .55s .25s both}
#dungeonPopup.dp-arriving>.dungeon-screen-actions{animation:dpInfoReveal .35s .38s both}
#dungeonPopup.dp-arriving>.dp-exit{animation:dpInfoReveal .3s .38s both}
@keyframes dpInfoReveal{from{opacity:0;translate:0 8px}to{opacity:1;translate:0 0}}
@keyframes dpPortraitReveal{from{opacity:0;translate:20px 0}to{opacity:1;translate:0 0}}
@media(prefers-reduced-motion:reduce){#dungeonPopup.dp-arriving>.dp-title,#dungeonPopup.dp-arriving .dp-intro,#dungeonPopup.dp-arriving .dp-reward-panel,#dungeonPopup.dp-arriving .dp-person,#dungeonPopup.dp-arriving>.dungeon-screen-actions,#dungeonPopup.dp-arriving>.dp-exit{animation:none}}
/* Preserve measured vertical centering while revealing the lower panel. */
#dungeonPopup.dp-arriving .dp-reward-panel,#dungeonPopup.dp-arriving>.dungeon-screen-actions{animation-name:dpOpacityReveal}
@keyframes dpOpacityReveal{from{opacity:0}to{opacity:1}}
/* Bring the decorative frame in with the preparation screen. */
#dungeonPopup.dp-arriving>.dp-top{animation:dpFrameDown .5s cubic-bezier(.2,.7,.2,1) both}
#dungeonPopup.dp-arriving>.dp-left,#dungeonPopup.dp-arriving>.dp-right{animation:dpDecorUp .5s .12s cubic-bezier(.2,.7,.2,1) both}
@keyframes dpFrameDown{from{opacity:0;translate:0 -100%}to{opacity:1;translate:0 0}}
@keyframes dpDecorUp{from{opacity:0;translate:0 35%}to{opacity:1;translate:0 0}}
@media(prefers-reduced-motion:reduce){#dungeonPopup.dp-arriving>.dp-top,#dungeonPopup.dp-arriving>.dp-left,#dungeonPopup.dp-arriving>.dp-right{animation:none}}
#dungeonPopup .dp-person{opacity:.8}
@keyframes dpPortraitReveal{from{opacity:0;translate:20px 0}to{opacity:.8;translate:0 0}}
/* Move the title and frame together by the frame's full height. */
#dungeonPopup.dp-arriving>.dp-top,#dungeonPopup.dp-arriving>.dp-title{animation:dpHeaderTogether .5s cubic-bezier(.2,.7,.2,1) both}
@keyframes dpHeaderTogether{from{opacity:0;translate:0 calc(-117 * var(--pu))}to{opacity:1;translate:0 0}}
@media(prefers-reduced-motion:reduce){#dungeonPopup.dp-arriving>.dp-top,#dungeonPopup.dp-arriving>.dp-title{animation:none}}
.dp-size-comparison{position:absolute;inset:0;z-index:200;pointer-events:none}
.dp-size-comparison img{position:absolute;bottom:180px;object-fit:contain;object-position:center bottom;transform-origin:50% 100%;animation:dpCompareBreath 2.2s ease-in-out infinite;filter:drop-shadow(0 3px 2px #0003)}
.dp-compare-serina{left:20%;width:84px;height:84px}
.dp-compare-boss{right:16%;width:114px;height:114px}
@keyframes dpCompareBreath{0%,100%{transform:scale(1,1)}50%{transform:scale(1.012,1.025)}}
@media(prefers-reduced-motion:reduce){.dp-size-comparison img{animation:none}}
/* Use the live battle lane center and the established boss anchor. */
.dp-size-comparison img{bottom:var(--compare-floor)}
.dp-size-comparison .dp-compare-boss{right:auto;left:calc(68% - 50px)}
.dp-size-comparison .dp-compare-serina{left:calc(32% - 42px)}
/* Match Serina's live combat size and preserve her comparison position. */
.dp-size-comparison .dp-compare-serina{width:var(--master-unit-size,79.2px);height:var(--master-unit-size,79.2px);left:calc(32% - var(--master-unit-size,79.2px) / 2)}
/* Match the 79.2 / 84 reduction applied to the comparison hero. */
.dp-size-comparison .dp-compare-boss{width:107.485714px;height:107.485714px;left:calc(68% - 46.742857px)}
/* Same grounded ellipse and light sprite shadow as adventure combat. */
.dp-size-comparison:before,.dp-size-comparison:after{content:'';position:absolute;bottom:var(--compare-floor);background:#000;opacity:.24;border-radius:50%;transform:translate(-50%,50%) scaleY(.28);transform-origin:center;filter:none}
.dp-size-comparison:before{left:32%;width:calc(var(--master-unit-size,79.2px) * .46);height:calc(var(--master-unit-size,79.2px) * .46)}
.dp-size-comparison:after{left:calc(68% + 7px);width:49.443428px;height:49.443428px}
.dp-size-comparison img{z-index:1;filter:drop-shadow(0 1px 1px #0004)}
/* Widen the boss contact shadow to cover both feet. */
.dp-size-comparison:after{width:68px;height:60px}
#battlefield .enemy.ines-direct-trial{width:107.485714px!important;height:107.485714px!important}
#battlefield .enemy.ines-direct-trial>.enemy-sprite{width:107.485714px!important;height:107.485714px!important;object-fit:contain;left:0!important;bottom:0;transform:none;translate:none;animation:dpCompareBreath 2.2s ease-in-out infinite;transform-origin:50% 100%;filter:drop-shadow(0 1px 1px #0004)}
#battlefield .ines-direct-trial.ines-groggy>.enemy-sprite{animation:none}
#battlefield .ines-direct-trial.skill-protected:before,#battlefield .ines-direct-trial.skill-protected:after{content:'';display:block}
.ines-phase{position:absolute;left:50%;bottom:100%;transform:translateX(-50%);white-space:nowrap;font:700 10px/1.3 "Malgun Gothic",sans-serif;color:#ffe8ab;background:#292236cc;border-radius:5px;padding:3px 6px;z-index:8}
.ines-groggy .ines-phase{color:#fff0da;background:#853d2ddd}
.ines-projectile{filter:drop-shadow(0 0 4px #ffcf57)}
/* Keep dungeon briefing visible during combat instead of revealing adventure menus. */
#dungeonPopup.dp-popup.dp-running>.dp-details{display:block}
#dungeonPopup.dp-running .dp-step button{pointer-events:none;opacity:.4}
/* Keep both familiar controls visible during combat. */
#dungeonPopup.dp-popup.dp-running>.dp-exit{display:block}
#dungeonPopup.dp-popup.dp-running>.dungeon-screen-actions{left:24.89%!important;right:auto!important;width:50.22%!important;height:auto!important;aspect-ratio:565/122;top:var(--dp-start-top)!important;bottom:auto!important}
#dungeonPopup#dungeonPopup.dp-running .dungeon-start-action{background:url('assets/ui/dungeon-enter-1393.png') center/100% 100% no-repeat!important;aspect-ratio:auto;display:flex!important;align-items:center!important;justify-content:center!important;padding:0!important;font:700 calc(37.26 * var(--hu))/1 "Malgun Gothic",system-ui,sans-serif!important}
#dungeonPopup#dungeonPopup.dp-running .dungeon-start-action>span{display:block!important;visibility:visible!important;font:inherit!important;color:white!important;line-height:1!important;transform:translateY(-2px)!important;margin:0!important;padding:0!important}
#dungeonPopup .dp-stop{position:absolute;right:calc(25 * var(--pu));bottom:calc(25 * var(--pu));width:calc(66 * var(--pu));height:calc(66 * var(--pu));border:0;padding:0;background:url('assets/ui/dp-stop-1505.png') center/contain no-repeat;z-index:30;pointer-events:auto}
#dungeonPopup.dp-running .dungeon-start-action{cursor:default}
#dungeonPopup .dungeon-start-action.is-running:before{content:none;display:none;animation:none}
#battlefield .ines-phase{bottom:calc(100% - 8px);width:94px;padding:3px 4px 4px;background:#292236dd;border-radius:5px;text-align:center;line-height:1.2;pointer-events:none}
#battlefield .ines-phase[hidden]{display:none}
.ines-phase-label{display:block;margin-bottom:3px;font-size:9px;color:#ffe8ab}
.ines-phase-track{display:block;width:100%;height:6px;background:#191c28;border:1px solid #17131e;border-radius:4px;overflow:hidden}
.ines-phase-track>i{display:block;height:100%;background:linear-gradient(#fff2a4,#e2ac3f);border-radius:3px}
.ines-phase[data-phase="groggy"] .ines-phase-track>i{background:linear-gradient(#ffc7a0,#ed805d)}
/* Rounded capsule backing for the boss phase gauge. */
#battlefield .ines-phase{border-radius:999px;padding:4px 9px 5px}
main.game-shell #eliteBattleHud>.dungeon-boss-timer{position:absolute;top:calc(100% + 5px);left:50%;transform:translateX(-50%);min-width:62px;padding:4px 12px;border-radius:999px;background:#292236dd;color:#ffe8ab;font:700 12px/1.2 "Malgun Gothic",sans-serif;font-variant-numeric:tabular-nums;text-align:center;white-space:nowrap;text-shadow:none;pointer-events:none}
main.game-shell #eliteBattleHud>.dungeon-boss-timer[hidden]{display:none}
/* Anchor the timer to the actual HP strip, not the taller HUD container. */
main.game-shell #eliteBattleHud>.dungeon-boss-timer{top:calc(59.1 * var(--hu) + 2px);display:flex;align-items:center;justify-content:center;box-sizing:border-box;height:24px;min-width:62px;padding:0 12px;line-height:1;letter-spacing:0;text-indent:0}
main.game-shell #eliteBattleHud>.dungeon-boss-timer[hidden]{display:none}
#dungeonPopup#dungeonPopup.dp-running .dungeon-start-action{background-image:url('assets/ui/dungeon-running-1576.png')!important}
/* Match adventure defeat-copy placement in dungeon combat. */
main.game-shell.dp-shared-scene>#battlefield>.dungeon-failure-overlay>.dungeon-failure-copy{top:auto;bottom:207px}
/* Only the boss is present before battle begins. */
.dp-size-comparison:before{content:none}
/* Restore the descending boss HUD entrance in dungeon battles. */
main.game-shell.dp-shared-scene>#battlefield>.elite-battle-hud:not(.failed-hud){animation:dpBossHudDescend .5s cubic-bezier(.16,.72,.2,1)}
@keyframes dpBossHudDescend{from{opacity:0;translate:0 -18px}to{opacity:1;translate:0 0}}
@media(prefers-reduced-motion:reduce){main.game-shell.dp-shared-scene>#battlefield>.elite-battle-hud:not(.failed-hud){animation:none}}

/* Dungeon auto control keeps the shared toggle and replaces adventure progress. */
main.game-shell.dp-shared-scene #battlefield .battle-auto-hud>.battle-location,
main.game-shell.dp-shared-scene #battlefield .battle-auto-hud>.wave-panel{display:none}
main.game-shell.dp-shared-scene #battlefield>.battle-auto-hud:after{content:"AUTO";position:absolute;left:calc(76 * var(--hu));top:0;height:100%;display:flex;align-items:center;font:700 calc(24 * var(--hu))/1 "Malgun Gothic",sans-serif;letter-spacing:.04em;color:#fff;pointer-events:none}

/* Compact dungeon auto pill around its icon and outlined label. */
main.game-shell.dp-shared-scene #battlefield>.battle-auto-hud{width:calc(185 * var(--hu))}
main.game-shell.dp-shared-scene #battlefield>.battle-auto-hud:after{font-size:calc(30 * var(--hu));-webkit-text-stroke:calc(2 * var(--hu)) #172b40;paint-order:stroke fill;letter-spacing:0;text-shadow:0 calc(1 * var(--hu)) calc(2 * var(--hu)) #172b4066}

/* Darken the entrance battlefield behind Ines, keeping her sprite clear. */
.dp-size-comparison.dp-ines-ready:before{content:'';inset:0;width:auto;height:auto;transform:none;background:#000;opacity:.2;border-radius:0;z-index:0}

/* Let the entrance veil clear smoothly as combat starts. */
.dp-entrance-dim{position:absolute;inset:0;background:#000;pointer-events:none;z-index:199;animation:dpEntranceDimOut .6s ease-out forwards}
@keyframes dpEntranceDimOut{from{opacity:.2}to{opacity:0}}
@media(prefers-reduced-motion:reduce){.dp-entrance-dim{animation-duration:.01s}}

/* Restore the ready scene only after the defeat presentation clears. */
.dp-size-comparison.dp-await-defeat{visibility:hidden}
.dp-size-comparison.dp-ines-ready.dp-return-dim:before{animation:dpReturnDim .6s ease-out both}
@keyframes dpReturnDim{from{opacity:0}to{opacity:.2}}
@media(prefers-reduced-motion:reduce){.dp-size-comparison.dp-ines-ready.dp-return-dim:before{animation-duration:.01s}}

/* Match the heart HUD backing, including its opacity. */
main.game-shell #eliteBattleHud>.dungeon-boss-timer{background:#26313add}

.dp-size-comparison.dp-return-dim img{animation:dpReadyBossReturn .6s ease-out both,dpCompareBreath 2.2s ease-in-out .6s infinite}
@keyframes dpReadyBossReturn{from{opacity:0}to{opacity:1}}

/* A retained defeat HUD must not replay the base entrance animation. */
main.game-shell.dp-shared-scene>#battlefield>.elite-battle-hud.failed-hud{animation:none}

.ines-dialogue{position:absolute;inset:0;z-index:3;pointer-events:none}
.ines-dialogue .deployment-bubble{pointer-events:none;font-size:12px;line-height:1.5;padding:12px 16px;transform-origin:65% 100%}
.ines-dialogue .deployment-bubble p{margin:0;min-height:0;word-break:keep-all;overflow-wrap:break-word}
.ines-dialogue .deployment-bubble:after{content:'';position:absolute;left:var(--tail-x,65%);bottom:-9px;transform:translateX(-50%);border-left:9px solid transparent;border-right:9px solid transparent;border-top:10px solid #fffdf1}

/* Continue the same dimming over the upper scenery without moving HUD or copy. */
main.game-shell.dp-shared-scene>#dungeonPopup:after{content:'';position:absolute;inset:0 0 auto;height:calc(100 * var(--hu));pointer-events:none;z-index:1;background:linear-gradient(rgb(11 12 16 / calc(var(--dp-upper-failure,0) * .788235)),rgb(11 12 16 / calc(var(--dp-upper-failure,0) * .788235))),linear-gradient(rgb(0 0 0 / var(--dp-upper-ready,0)),rgb(0 0 0 / var(--dp-upper-ready,0)))}

/* Ines dialogue uses a rounded bubble without a tail. */
.ines-dialogue .deployment-bubble:after{content:none}

/* Ines crystal shield: preserve asset alpha, with one Serina-style arrival flash. */
#battlefield .ines-direct-trial.skill-protected:before{content:none;display:none}
#battlefield .ines-direct-trial.skill-protected:after{inset:-12px;background:url('assets/effects/ines-shield-1604.png') center/contain no-repeat;opacity:1;rotate:0deg;translate:0 0;filter:none;z-index:2;animation:inesCrystalShieldAppear .34s cubic-bezier(.16,1,.3,1) both}
#battlefield .ines-direct-trial.skill-protected>.shield-arrival-flash{inset:-12px;translate:0 0}
@keyframes inesCrystalShieldAppear{0%{opacity:0;transform:scale(0);filter:brightness(1)}60%{opacity:1;transform:scale(1.2);filter:brightness(1.55) drop-shadow(0 0 8px #fff0a8)}100%{opacity:1;transform:scale(1);filter:none}}
@media(prefers-reduced-motion:reduce){#battlefield .ines-direct-trial.skill-protected:after{animation:none;opacity:1}}

/* Keep the shield geometry independent of the inherited melee flash and body sway. */
#battlefield .ines-direct-trial.skill-protected:after{width:auto;height:auto;image-rendering:auto}
#battlefield .enemy.ines-direct-trial.attacking,#battlefield .enemy.ines-direct-trial.hit{animation:none}
#battlefield .ines-direct-trial.attacking:not(.skill-protected):after{content:none;display:none}
#battlefield .ines-direct-trial.ines-key-launch:not(.ines-groggy)>.enemy-sprite{animation:inesCastSway .32s ease-out}
#battlefield .ines-direct-trial.hit>.enemy-sprite{animation:inesSpriteHit .25s ease-out}
@keyframes inesCastSway{0%,100%{transform:translateX(0) rotate(0)}25%{transform:translateX(3px) rotate(8deg)}60%{transform:translateX(-6px) rotate(-10deg)}}
@keyframes inesSpriteHit{0%,100%{transform:translateX(0)}25%{transform:translateX(-3px)}50%{transform:translateX(3px)}75%{transform:translateX(-2px)}}
@media(prefers-reduced-motion:reduce){#battlefield .ines-direct-trial:is(.attacking,.hit)>.enemy-sprite{animation:none}}

/* Reuse Serina's expanding body and glow exit when the crystal breaks. */
#battlefield .ines-direct-trial>.ines-shield-break{position:absolute;inset:-12px;z-index:3;pointer-events:none;--shield-exit-body:1;--shield-exit-glow:.5}
.ines-shield-break:before,.ines-shield-break:after{content:'';position:absolute;inset:0;background:url('assets/effects/ines-shield-1604.png') center/contain no-repeat;transform-origin:center}
.ines-shield-break:after{animation:serinaShieldExit .6s ease-out forwards}
.ines-shield-break:before{filter:drop-shadow(0 0 3px #fff0a8) drop-shadow(0 0 8px #ffc83f) drop-shadow(0 0 14px #ffd34e);animation:serinaShieldGlowExit .6s ease-out forwards}
@media(prefers-reduced-motion:reduce){.ines-shield-break:before,.ines-shield-break:after{animation:shieldExitReduced .2s linear forwards}}

/* Shape the arrival flash with Ines's crystal asset instead of Serina's circle. */
#battlefield .ines-direct-trial.skill-protected>.shield-arrival-flash{border-radius:0;box-shadow:none;background:#fffbd5;mask:url('assets/effects/ines-shield-1604.png') center/contain no-repeat;-webkit-mask:url('assets/effects/ines-shield-1604.png') center/contain no-repeat}

/* A single outer glow follows the crystal silhouette at the flash peak. */
#battlefield .ines-direct-trial.skill-protected:after{animation:inesCrystalShieldAppearGlow .34s cubic-bezier(.16,1,.3,1) both}
@keyframes inesCrystalShieldAppearGlow{0%{opacity:0;transform:scale(0);filter:brightness(1)}60%{opacity:1;transform:scale(1.2);filter:brightness(1.55) drop-shadow(0 0 4px #fffbe5) drop-shadow(0 0 10px #ffe6a9) drop-shadow(0 0 19px #ffd16a99)}100%{opacity:1;transform:scale(1);filter:none}}
@media(prefers-reduced-motion:reduce){#battlefield .ines-direct-trial.skill-protected:after{animation:none;filter:none}}

/* Cool crystal glow and a gentle sustained opacity pulse. */
#battlefield .ines-direct-trial.skill-protected:after{animation:inesCrystalShieldAppearGlow .34s cubic-bezier(.16,1,.3,1) both,inesCrystalShieldPulse 1.6s ease-in-out .34s infinite}
#battlefield .ines-direct-trial.skill-protected>.shield-arrival-flash{background:#eef0ff}
@keyframes inesCrystalShieldAppearGlow{0%{opacity:0;transform:scale(0);filter:brightness(1)}60%{opacity:1;transform:scale(1.2);filter:brightness(1.55) drop-shadow(0 0 4px #f0f2ff) drop-shadow(0 0 10px #b8c7ff) drop-shadow(0 0 19px #9291ed99)}100%{opacity:1;transform:scale(1);filter:brightness(1.12) drop-shadow(0 0 4px #c8d4ffbb) drop-shadow(0 0 10px #929eec88)}}
@keyframes inesCrystalShieldPulse{0%,100%{opacity:1;filter:brightness(1.12) drop-shadow(0 0 4px #c8d4ffbb) drop-shadow(0 0 10px #929eec88)}50%{opacity:.78;filter:brightness(1) drop-shadow(0 0 3px #c8d4ff88) drop-shadow(0 0 7px #929eec55)}}
.ines-shield-break:before{filter:drop-shadow(0 0 3px #eef0ff) drop-shadow(0 0 8px #b8c7ff) drop-shadow(0 0 14px #9291ed)}
@media(prefers-reduced-motion:reduce){#battlefield .ines-direct-trial.skill-protected:after{animation:none;opacity:1;filter:drop-shadow(0 0 4px #c8d4ffbb) drop-shadow(0 0 8px #929eec77)}}

/* A fast crystal snap, followed by the established gentle idle pulse. */
#battlefield .ines-direct-trial.skill-protected:after{animation:inesShieldSnap .12s ease-out both,inesCrystalShieldPulse 1.6s ease-in-out .12s infinite}
#battlefield .ines-direct-trial.skill-protected>.shield-arrival-flash{animation:inesShieldSnapFlash .12s ease-out both}
@keyframes inesShieldSnap{0%{opacity:0;transform:scale(2);filter:brightness(1)}40%{opacity:.45;transform:scale(1.65);filter:brightness(1.4)}78%{opacity:1;transform:scale(1.3);filter:brightness(2) drop-shadow(0 0 8px #dce5ff)}100%{opacity:1;transform:scale(1);filter:brightness(1.12) drop-shadow(0 0 4px #c8d4ffbb) drop-shadow(0 0 10px #929eec88)}}
@keyframes inesShieldSnapFlash{0%{opacity:0;transform:scale(2.15)}80%{opacity:.35;transform:scale(1.35)}100%{opacity:1;transform:scale(1)}}
@media(prefers-reduced-motion:reduce){#battlefield .ines-direct-trial.skill-protected:after{animation:none}#battlefield .ines-direct-trial.skill-protected>.shield-arrival-flash{display:none}}

/* Lift the boss phase capsule and match the heart HUD backing. */
#battlefield .ines-phase{bottom:calc(100% - 2px);background:#26313add}

/* Slightly enlarge the crystal and its matching arrival/break layers. */
#battlefield .ines-direct-trial.skill-protected:after,
#battlefield .ines-direct-trial.skill-protected>.shield-arrival-flash,
#battlefield .ines-direct-trial>.ines-shield-break{inset:-16px}

/* A sharp crystal break: fast outward burst, then a short fading edge. */
.ines-shield-break:after{animation:inesCrystalBreak .26s ease-out forwards}
.ines-shield-break:before{animation:inesCrystalBreakGlow .3s ease-out forwards}
@keyframes inesCrystalBreak{0%{opacity:1;transform:scale(1);filter:brightness(1.15)}22%{opacity:1;transform:scale(1.22);filter:brightness(2) drop-shadow(0 0 8px #dce5ff)}60%{opacity:.45;transform:scale(1.44);filter:brightness(1.4)}100%{opacity:0;transform:scale(1.62);filter:brightness(1)}}
@keyframes inesCrystalBreakGlow{0%{opacity:.5;transform:scale(1)}20%{opacity:1;transform:scale(1.28)}100%{opacity:0;transform:scale(1.8)}}
@media(prefers-reduced-motion:reduce){.ines-shield-break:before,.ines-shield-break:after{animation:shieldExitReduced .2s linear forwards}}

/* Break with one stationary flash, without an expanding burst. */
@keyframes inesCrystalBreak{0%{opacity:1;transform:scale(1);filter:brightness(1)}25%{opacity:1;transform:scale(1);filter:brightness(2) drop-shadow(0 0 8px #dce5ff)}100%{opacity:0;transform:scale(1);filter:brightness(1)}}
@keyframes inesCrystalBreakGlow{0%{opacity:.3;transform:scale(1)}25%{opacity:1;transform:scale(1)}100%{opacity:0;transform:scale(1)}}

/* Hold the flash at full size, then expand quickly while fading. */
@keyframes inesCrystalBreak{0%{opacity:1;transform:scale(1);filter:brightness(1)}25%{opacity:1;transform:scale(1);filter:brightness(2) drop-shadow(0 0 8px #dce5ff)}35%{opacity:1;transform:scale(1);filter:brightness(1.7)}100%{opacity:0;transform:scale(1.55);filter:brightness(1)}}
@keyframes inesCrystalBreakGlow{0%{opacity:.3;transform:scale(1)}25%{opacity:1;transform:scale(1)}35%{opacity:.9;transform:scale(1)}100%{opacity:0;transform:scale(1.7)}}

/* Minimal shield/groggy meter above Ines. */
#battlefield .ines-phase{bottom:calc(100% + 6px);width:114px;padding:0;background:transparent;border-radius:0}
#battlefield .ines-phase-label{display:none}

/* Match the shield meter to the crystal palette and lift both phase meters. */
#battlefield .ines-phase{bottom:calc(100% + 12px)}
#battlefield .ines-phase[data-phase="shield"] .ines-phase-track>i{background:linear-gradient(#d8e3ff,#9295e5)}

/* Compact shared skill cut-in using the existing diagonal frame and portrait. */
.mini-skill-cutscene{position:absolute;right:0;top:26%;width:48%;height:100px;z-index:900;pointer-events:none;overflow:hidden}
.mini-skill-panel{position:absolute;inset:0;overflow:hidden;clip-path:polygon(20% 0,100% 0,100% 100%,0 100%);background:linear-gradient(110deg,#20243c,var(--mini-color));border-block:2px solid #dce4ff;animation:miniSkillSlide .65s cubic-bezier(.16,.72,.2,1) both}
.mini-skill-portrait{position:absolute;width:100%;height:310%;top:-22%;right:-8%;object-fit:cover;object-position:50% 10%}
.mini-skill-frame{position:absolute;left:0;top:0;width:24%;height:100%;object-fit:fill}
@keyframes miniSkillSlide{0%{opacity:0;transform:translateX(105%)}20%,68%{opacity:1;transform:translateX(0)}100%{opacity:0;transform:translateX(105%)}}
@media(prefers-reduced-motion:reduce){.mini-skill-panel{animation:none}.mini-skill-cutscene{opacity:.95}}

/* Enter for 180ms, hold visibly, then leave over the final 180ms. */
.mini-skill-panel{animation:miniSkillHold .9s ease-out both}
@keyframes miniSkillHold{0%{opacity:0;transform:translateX(105%)}20%,80%{opacity:1;transform:translateX(0)}100%{opacity:0;transform:translateX(105%)}}
@media(prefers-reduced-motion:reduce){.mini-skill-panel{animation:none}}

#battlefield>.ines-victory-dialogue{z-index:950}

/* SD face wedge growing diagonally from the caster, matching the reference. */
.mini-skill-cutscene{right:auto;top:auto;width:112px;height:112px;overflow:visible;transform-origin:0 100%}
.mini-skill-panel{clip-path:polygon(0 100%,60% 0,100% 42%);background:#fff6e9;border:0;transform-origin:0 100%;animation:miniFaceWedge .9s ease-out both}
.mini-skill-face-window{position:absolute;inset:2px;clip-path:polygon(0 100%,60% 0,100% 42%);background:#19151b;overflow:hidden}
.mini-skill-portrait{width:190%;height:190%;max-width:none;top:-8%;left:-28%;right:auto;object-fit:contain;object-position:center;transform:rotate(12deg)}
@keyframes miniFaceWedge{0%{opacity:0;transform:translate(-8px,12px) scale(.65)}20%,80%{opacity:1;transform:translate(0,0) scale(1)}100%{opacity:0;transform:translate(10px,-12px) scale(1.04)}}
@media(prefers-reduced-motion:reduce){.mini-skill-panel{animation:none}}

/* Fast cut-in impact, then a stable readable hold. */
.mini-skill-panel{animation:miniFaceImpact .9s linear both}
@keyframes miniFaceImpact{
0%{opacity:0;transform:translate(-6px,8px) scale(.8);filter:brightness(1);animation-timing-function:cubic-bezier(.12,.8,.2,1)}
7%{opacity:1;transform:translate(0,0) scale(1.28);filter:brightness(1.35);animation-timing-function:ease-out}
14%{opacity:1;transform:translate(0,0) scale(1);filter:brightness(1)}
80%{opacity:1;transform:translate(0,0) scale(1);filter:brightness(1);animation-timing-function:ease-in}
100%{opacity:0;transform:translate(10px,-12px) scale(1.04);filter:brightness(1)}}
@media(prefers-reduced-motion:reduce){.mini-skill-panel{animation:none}}

/* Use the supplied activation silhouette to crop only the character portrait. */
.mini-skill-panel{clip-path:none;background:none;border:0;mask:url('assets/effects/skill-trigger-mask-1634.png') center/100% 100% no-repeat;-webkit-mask:url('assets/effects/skill-trigger-mask-1634.png') center/100% 100% no-repeat}
.mini-skill-face-window{inset:0;clip-path:none;background:#19151b}

/* Reference alignment: lower tip at the staff/head, face filling the upper cut. */
.mini-skill-portrait{width:190%;height:190%;left:-18%;top:-22%;transform:none}
.mini-skill-face-window{background:transparent}

/* Gold backing shared with the ready skill icon. */
.mini-skill-face-window{background:#cda850}

/* Brighter gold and a larger, left-shifted face crop. */
.mini-skill-face-window{background:#fff1b2}
.mini-skill-portrait{width:247%;height:247%;left:-55%;top:-34%}

/* Lift the inner portrait by 20px without moving the cut frame. */
.mini-skill-portrait{top:calc(-34% - 20px)}

/* Brief skill focus dim; the HUD and face cut stay above it. */
.mini-skill-shade{position:absolute;inset:0;background:#071018;opacity:.6;z-index:800;pointer-events:none;animation:miniShadeIn .08s ease-out both}
.mini-skill-shade.leaving{animation:miniShadeOut .18s ease-out forwards}
#dungeonPopup>.mini-skill-shade-upper{bottom:auto;height:calc(100 * var(--hu));z-index:2}
#battlefield:has(>.mini-skill-shade)>:is(.castle,.elite-battle-hud,.battle-auto-hud){z-index:850}
@keyframes miniShadeIn{from{opacity:0}to{opacity:.6}}
@keyframes miniShadeOut{from{opacity:.6}to{opacity:0}}
@media(prefers-reduced-motion:reduce){.mini-skill-shade{animation:none}.mini-skill-shade.leaving{animation:none;opacity:0}}

/* Outline the masked cut silhouette, not its rectangular container. */
.mini-skill-cutscene{filter:drop-shadow(2px 0 0 #fff5d9) drop-shadow(-2px 0 0 #fff5d9) drop-shadow(0 2px 0 #fff5d9) drop-shadow(0 -2px 0 #fff5d9)}

/* Aligned supplied plates: outline below, portrait mask above. */
.mini-skill-cutscene{filter:none}
.mini-skill-panel{mask:none;-webkit-mask:none;overflow:visible;background:url('assets/effects/skill-trigger-outline-1648.png') center/100% 100% no-repeat}
.mini-skill-face-window{mask:url('assets/effects/skill-trigger-mask-1648.png') center/100% 100% no-repeat;-webkit-mask:url('assets/effects/skill-trigger-mask-1648.png') center/100% 100% no-repeat}

/* Drive the cut toward its lower-left point, then settle at the anchor. */
.mini-skill-panel{transform-origin:0 100%;animation:miniFaceStrike .9s linear both}
@keyframes miniFaceStrike{
0%{opacity:0;transform:translate(25px,-36px) scale(1.08);filter:brightness(1);animation-timing-function:cubic-bezier(.55,0,1,.45)}
10%{opacity:1;transform:translate(-3px,5px) scale(1);filter:brightness(1.35);animation-timing-function:ease-out}
17%{opacity:1;transform:translate(1px,-2px) scale(1);filter:brightness(1.08);animation-timing-function:ease-out}
23%,80%{opacity:1;transform:translate(0,0) scale(1);filter:brightness(1)}
100%{opacity:0;transform:translate(8px,-10px) scale(1);filter:brightness(1)}}
@media(prefers-reduced-motion:reduce){.mini-skill-panel{animation:none}}

/* Shared skill cue: strong scale pop with a small settling rebound. */
.mini-skill-panel{transform-origin:0 100%;animation:miniFacePopSettle .9s linear both}
@keyframes miniFacePopSettle{
0%{opacity:0;transform:scale(.8);filter:brightness(1);animation-timing-function:cubic-bezier(.12,.8,.2,1)}
7%{opacity:1;transform:scale(1.28);filter:brightness(1.35);animation-timing-function:ease-out}
15%{opacity:1;transform:scale(.97);filter:brightness(1);animation-timing-function:ease-out}
22%,80%{opacity:1;transform:scale(1);filter:brightness(1)}
100%{opacity:0;transform:translate(8px,-10px) scale(1.04);filter:brightness(1)}}
@media(prefers-reduced-motion:reduce){.mini-skill-panel{animation:none}}

.ines-key-projectile{position:absolute;width:42px;height:42px;object-fit:contain;pointer-events:none;z-index:20;transform-origin:center}

/* Larger key above the boss, rendered in front of character layers. */
.ines-key-projectile{width:64px;height:64px;z-index:700}

.ines-key-projectile{width:52px;height:52px}
@media(prefers-reduced-motion:reduce){#battlefield .ines-direct-trial.ines-key-launch>.enemy-sprite{animation:none}}

/* Keep the departing entrance dim behind live boss sprites. */
main.game-shell.dp-shared-scene #battlefield>.dp-entrance-dim{z-index:4}

/* Library formation preview: guardian in front, Elodie behind. */
.dp-size-comparison.dp-library-formation .dp-compare-boss{left:calc(84% - 86.742857px)}
.dp-size-comparison.dp-library-formation:after{left:calc(84% - 33px)}
.dp-library-guard{position:absolute;left:calc(50% - 53.742857px);bottom:var(--compare-floor);width:107.485714px;height:107.485714px;z-index:2;transform-origin:center bottom;animation:dpCompareBreath 2.2s ease-in-out infinite}
.dp-size-comparison .dp-library-guard img{inset:0;width:100%;height:100%;animation:none;transform:none;object-fit:contain}
.dp-size-comparison .dp-library-guard .library-guard-shield{left:-38px;top:0;z-index:2}
.dp-size-comparison .dp-library-guard .library-guard-spear{display:none}
.dp-library-guard:before{content:'';position:absolute;left:22%;bottom:-5px;width:60%;height:14px;border-radius:50%;background:#0004}
@media(prefers-reduced-motion:reduce){.dp-library-guard{animation:none}}

/* Only the guardian body breathes; the book shield stays still. */
.dp-library-guard{animation:none}
.dp-size-comparison .dp-library-guard .library-guard-body{animation:dpCompareBreath 2.2s ease-in-out infinite;transform-origin:50% 100%}
@media(prefers-reduced-motion:reduce){.dp-size-comparison .dp-library-guard .library-guard-body{animation:none}}

.dp-size-comparison .dp-library-guard .library-guard-spear{z-index:3;transform-origin:50% 50%}

.dp-size-comparison .dp-library-guard .library-spear-flare{z-index:4;pointer-events:none;transform-origin:50% 50%;mix-blend-mode:screen}
/* Library guardian equipment shares the approved preview geometry. */
.library-guard-parts{position:absolute;inset:0;transform-origin:50% 100%}
.library-guard-parts img{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;transform-origin:50% 100%}
.library-guard-parts .library-guard-shield{left:-38px;z-index:2}
.library-guard-parts .library-guard-spear{display:none;z-index:3;transform-origin:50% 50%}
.library-guard-parts .library-spear-flare{z-index:4;pointer-events:none;transform-origin:50% 50%;mix-blend-mode:screen}
.library-guardian:not(.ines-groggy) .library-guard-body{animation:dpCompareBreath 2.2s ease-in-out infinite}
.library-elodie{position:absolute;width:107.485714px;height:107.485714px;transform:translateX(-50%);pointer-events:none}
.library-elodie img{width:100%;height:100%;object-fit:contain;transform-origin:50% 100%;animation:dpCompareBreath 2.2s ease-in-out infinite}
.library-elodie:before{content:'';position:absolute;left:22%;bottom:-5px;width:60%;height:14px;background:#0004;border-radius:50%}
.library-magic-projectile{position:absolute;width:36px;height:36px;object-fit:contain;z-index:700;pointer-events:none;filter:none}
/* The book itself carries the shield energy, not an enclosing crystal. */
.library-book-protected .library-guard-shield{animation:libraryBookIgnite .2s ease-out both,libraryBookPulse 1.6s ease-in-out .2s infinite}
.library-guard-parts .library-book-flash{left:-38px;z-index:5;pointer-events:none;transform-origin:50% 65%;filter:brightness(0) invert(1) drop-shadow(0 0 4px #fff4c6) drop-shadow(0 0 10px #ffd877);animation:libraryBookFlash .24s ease-out both}
.library-guard-parts .library-book-flash.breaking{animation:libraryBookBreak .3s cubic-bezier(.16,1,.3,1) both}
@keyframes libraryBookIgnite{0%{filter:brightness(1)}25%{filter:brightness(2.8) drop-shadow(0 0 5px #fff4c6) drop-shadow(0 0 13px #ffd877)}100%{filter:brightness(1.12) drop-shadow(0 0 4px #ffd87788)}}
@keyframes libraryBookPulse{0%,100%{filter:brightness(1.12) drop-shadow(0 0 4px #ffd87788)}50%{filter:brightness(1) drop-shadow(0 0 2px #ffd87744)}}
@keyframes libraryBookFlash{0%{opacity:0;scale:.96}25%{opacity:.9;scale:1.06}100%{opacity:0;scale:1}}
@keyframes libraryBookBreak{0%{opacity:.9;scale:1}20%{opacity:1;scale:1.04}100%{opacity:0;scale:1.4}}
@media(prefers-reduced-motion:reduce){.library-book-protected .library-guard-shield{animation:none}.library-guard-parts .library-book-flash{animation-duration:.1s}}
/* Ground contact lands with the flash, followed by a short recoil. */
.library-book-impact{position:absolute;left:-13px;bottom:0;width:58px;height:12px;z-index:5;pointer-events:none;border:2px solid #fff2bb;border-radius:50%;background:#fff2ba66;box-shadow:0 0 7px #ffda79;animation:libraryBookGroundImpact .24s cubic-bezier(.16,1,.3,1) both}
@keyframes libraryBookGroundImpact{0%{opacity:1;transform:scale(.35)}22%{opacity:1;transform:scale(1)}100%{opacity:0;transform:scale(1.65,.65)}}
@media(prefers-reduced-motion:reduce){.library-book-impact{display:none}}
main.game-shell.dp-shared-scene>#dungeonPopup:before{translate:0 var(--library-impact-y,0px)}
main.game-shell.dp-shared-scene:has(>#dungeonPopup.dp-running)>.skill-slot-overlay{display:block!important}
/* Shared dungeon entrance: show the scenery without the ready-state dim. */
.dp-size-comparison.dp-ines-ready:before{content:none!important;display:none!important}
.dp-entrance-dim{display:none!important}
main.game-shell.dp-shared-scene>#dungeonPopup:after{background:linear-gradient(rgb(11 12 16 / calc(var(--dp-upper-failure,0) * .788235)),rgb(11 12 16 / calc(var(--dp-upper-failure,0) * .788235)))}

#dungeonPopup .dp-art-preview{position:absolute;z-index:5;right:calc(26 * var(--pu));top:calc(20 * var(--pu));width:calc(64 * var(--pu));height:calc(64 * var(--pu));padding:0;border:2px solid #d9b76b;border-radius:7px;background:#172631;box-shadow:0 2px 4px #0006;cursor:pointer}
#dungeonPopup .dp-art-preview:before{content:'';position:absolute;inset:20%;background:#ffe5a0;mask:url('assets/ui/hero-preview-magnifier.png') center/contain no-repeat;-webkit-mask:url('assets/ui/hero-preview-magnifier.png') center/contain no-repeat}
.dungeon-art-modal{position:fixed;inset:0;z-index:26000;display:grid;place-items:center;background:#000c;backdrop-filter:blur(var(--popup-backdrop-blur,6px));-webkit-backdrop-filter:blur(var(--popup-backdrop-blur,6px))}
.dungeon-art-modal>img{max-width:94vw;max-height:92dvh;object-fit:contain}
.dungeon-art-modal>button{position:absolute;right:20px;top:20px;width:40px;height:40px;border:1px solid #d9b76b;border-radius:50%;background:#172631;color:#ffe5a0;font-size:28px;cursor:pointer}

/* Subdued illustration control. */
#dungeonPopup .dp-art-preview{background:#343630b3;border:1px solid #8b8573;box-shadow:none;filter:none}
#dungeonPopup .dp-art-preview:before{background:#c5bea7;filter:none;box-shadow:none}

/* Match the stage selector palette at the portrait's lower-right corner. */
#dungeonPopup .dp-art-preview{top:auto;bottom:calc(20 * var(--pu));background:#faf7e7;border-color:#ccaa66;box-shadow:none}
#dungeonPopup .dp-art-preview:before{background:#2d4869}

#dungeonPopup .dp-art-preview{border:0;background:rgb(250 247 231 / 65%);box-shadow:none}

.dungeon-lore-modal{position:absolute;inset:0;z-index:26000;display:flex;justify-content:center;padding:64px 24px 32px;background:rgb(5 8 13 / 91%);backdrop-filter:blur(var(--popup-backdrop-blur,6px));-webkit-backdrop-filter:blur(var(--popup-backdrop-blur,6px));animation:popupBackdropIn .2s ease-out both;transition:opacity .2s ease}
.dungeon-lore-modal.closing{opacity:0;pointer-events:none}
.dungeon-lore-content{width:100%;max-width:620px;overflow-y:auto;overscroll-behavior:contain;padding:0 14px 28px;color:#d8d3c8;font:14px/1.95 'Malgun Gothic',sans-serif;word-break:keep-all;overflow-wrap:break-word;scrollbar-width:thin;scrollbar-color:#857044 transparent;animation:loreTextEnter .24s ease-out both}
.dungeon-lore-content>header{text-align:center;margin:0 0 28px}
.dungeon-lore-content header small{display:block;font-size:10px;letter-spacing:2px;color:#a99366;line-height:1.6}
.dungeon-lore-content h2{margin:7px 0 14px;color:#f5dfaa;font-size:30px;letter-spacing:3px}
.lore-ornament{display:flex;align-items:center;justify-content:center;gap:14px;color:#c5a15b;font-size:10px}
.lore-ornament:before,.lore-ornament:after{content:'';width:80px;height:1px;background:linear-gradient(90deg,transparent,#a98b50)}
.lore-ornament:after{transform:rotate(180deg)}
.dungeon-lore-content p{margin:0 0 18px;text-align:left}
.dungeon-lore-content strong{color:#e8c779;font-weight:700}
.dungeon-lore-content em{color:#b7cddd;font-style:normal}
.dungeon-lore-content section{margin-top:32px;padding-top:28px;border-top:1px solid #b59b5f44}
.dungeon-lore-content section header{margin-bottom:22px}
.dungeon-lore-content h3{margin:7px 0;color:#f2d49a;font-size:22px;line-height:1.5}
.dungeon-lore-content h3 span{font-size:15px;color:#c6baa2;font-weight:400}
.dungeon-lore-content .lore-aside{color:#c6afd0}
.dungeon-lore-content blockquote{margin:26px 0 0;padding:16px 0 16px 16px;border-left:2px solid #c9a66a;color:#d9b9bd;font-size:14px;line-height:2}
.dungeon-lore-content blockquote span{color:#f0d7a1}
.dungeon-lore-close{position:absolute;right:18px;top:16px;width:36px;height:36px;padding:0;border:0;background:transparent;color:#c9bea8;font-size:28px;cursor:pointer}
.lore-pending{text-align:center!important;color:#a99e88}
@keyframes loreTextEnter{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}
@media(prefers-reduced-motion:reduce){.dungeon-lore-modal,.dungeon-lore-content{animation:none;transition:none}}

.dungeon-lore-modal .dungeon-lore-content header{display:block;position:static;width:auto;height:auto;min-height:0;padding:0;background:none;border:0;box-shadow:none;transform:none;color:inherit}
.dungeon-lore-modal .dungeon-lore-content header:before,.dungeon-lore-modal .dungeon-lore-content header:after{display:none}
.dungeon-lore-modal .dungeon-lore-content header h2{display:block;width:auto;white-space:normal;line-height:1.5}

#dungeonPopup .dp-details[data-dungeon="boss"]{--dp-portrait-backdrop:url('assets/ui/weekly-lisette-banner-01-1890.png')}

/* Match the adventure header's soft outer shadow along the frame silhouette. */
#dungeonPopup.dp-popup>.dp-top{filter:drop-shadow(0 1px 2px #30251b55)}

/* One continuous background coordinate system across header and battlefield. */
main.game-shell.dp-shared-scene>#dungeonPopup:before{background-size:var(--dp-shared-bg-width) var(--dp-shared-bg-height);background-position:center var(--dp-shared-bg-top)}
main.game-shell.dp-shared-scene>#battlefield[data-art-preview]{background-size:var(--dp-shared-bg-width) var(--dp-shared-bg-height)!important;background-position:center var(--dp-shared-bg-field-top)!important}

#dungeonPopup.dp-lisette-frame>.dp-left,#dungeonPopup.dp-lisette-frame>.dp-right{width:calc(288 * var(--pu))}
#dungeonPopup.dp-lisette-frame>.dp-exit{left:calc(28 * var(--pu));bottom:calc(25 * var(--pu));width:calc(72 * var(--pu));height:calc(72 * var(--pu))}
#dungeonPopup.dp-lisette-frame>.dp-stop{right:calc(30 * var(--pu) - 1px);bottom:calc(25 * var(--pu));width:calc(72 * var(--pu));height:calc(72 * var(--pu))}

#dungeonPopup:not(.dp-lisette-frame)>.dp-stop{right:calc(26 * var(--pu))}

/* 512px source uses the same display canvas as the 400px resource bosses. Feet at source y=470; ignore the staff below them. */
.dp-size-comparison.dp-weekly-lisette .dp-compare-boss{margin-bottom:-8.82px;transform-origin:50% 91.8%}

/* Account for the larger transparent margins in the 512px Lisette artwork. */
.dp-size-comparison.dp-weekly-lisette .dp-compare-boss{width:133.28228536px;height:133.28228536px;left:calc(84% - 99.64114268px);margin-bottom:-10.937188px}
#battlefield .enemy.ines-direct-trial.weekly-lisette-boss{width:133.28228536px!important;height:133.28228536px!important}

#battlefield .enemy.ines-direct-trial.weekly-lisette-boss>.enemy-sprite{width:133.28228536px!important;height:133.28228536px!important}

#battlefield .weekly-lisette-seated>.enemy-sprite{bottom:-10.937188px;transform-origin:50% 91.8%}

main.game-shell>#battlefield[data-art-preview="weekly-lisette"]{background-image:url('assets/battlefields/weekly-lisette-background-1921.png')!important;background-repeat:no-repeat}
main.game-shell>#battlefield[data-art-preview="weekly-lisette"]>.battle-foreground{display:block;inset:auto 0 0;height:auto;aspect-ratio:1080/426;background:url('assets/battlefields/weekly-lisette-foreground-1917.png') center bottom/100% auto no-repeat}

.dp-size-comparison.dp-weekly-lisette:after{left:calc(84% - 33px)}
/* The supplied 400px canvases retain their transparent headroom. */
#battlefield .enemy:is(.enemy-weeklyLisetteSoldier,.enemy-weeklyLisetteMage) img.enemy-sprite{position:absolute;width:var(--master-unit-size)!important;height:var(--master-unit-size)!important;max-width:none;left:50%;bottom:0;translate:-50% 0;object-fit:contain;object-position:center bottom;transform-origin:50% 100%;scale:1!important}

#battlefield .enemy:is(.enemy-weeklyLisetteSoldier,.enemy-weeklyLisetteMage){width:var(--master-unit-size)!important;height:var(--master-unit-size)!important;scale:1}

/* Match the goblin soldier/shaman overhead bars. */
#battlefield .enemy:is(.enemy-weeklyLisetteSoldier,.enemy-weeklyLisetteMage)>.hp{left:50%;transform:translateX(-50%);width:50%!important}
#battlefield .enemy.enemy-weeklyLisetteSoldier>.hp{top:calc(52.75% - 7px)!important}
#battlefield .enemy.enemy-weeklyLisetteMage>.hp{top:calc(50% - 7px)!important}

#battlefield .enemy.weekly-doll{width:133.28px!important;height:133.28px!important;animation:none!important}
#battlefield .weekly-doll>.enemy-sprite{position:absolute;left:0;bottom:0;width:100%!important;height:100%!important;max-width:none;transform-origin:50% 96%;animation:none!important}
#battlefield .weekly-doll>.hp{top:calc(32% - 10px);left:50%;transform:translateX(-50%)}
.weekly-doll-scissors{position:absolute;left:50%;bottom:-35px;width:170px;height:170px;translate:-50% 0;opacity:0;pointer-events:none;z-index:4}
.weekly-doll-scissors img{position:absolute;inset:0;width:100%;height:100%;transform-origin:50% 50%}.weekly-doll-scissors .lower{z-index:1}.weekly-doll-scissors .upper{z-index:2}
.weekly-doll-flash{position:absolute;left:calc(50% - 120px);bottom:50px;width:180px;height:180px;max-width:none;translate:-50% 50%;filter:brightness(0) invert(1) drop-shadow(0 0 7px #fff);opacity:0;z-index:8;pointer-events:none}

#battlefield .weekly-doll>.enemy-sprite{z-index:2}

/* Doll motion is relative to its own canvas; no inherited sprite centering offset. */
#battlefield .weekly-doll>.enemy-sprite{transform:none;translate:none;object-fit:contain}


/* Keep pose transforms above the shared breathing and hit animation rules. */
#battlefield .enemy.ines-direct-trial.weekly-lisette-boss>.enemy-sprite{animation:none!important}
#battlefield .enemy.ines-direct-trial.weekly-lisette-boss.weekly-lisette-seated>.enemy-sprite{bottom:-10.937188px;transform-origin:50% 91.8%}

#battlefield .weekly-doll.weekly-doll-seated>.enemy-sprite{bottom:-4.937188px}

/* Weekly guardian uses Lisette's boss scale, without the regular enemy boost. */
main.game-shell>#battlefield .enemy.weekly-doll{scale:var(--combat-unit-scale,1)!important;width:133.28228536px!important;height:133.28228536px!important}

/* Shift only Brenna's mini cut-in portrait inside the existing mask. */
.mini-skill-portrait[src*="brenna-standing"]{left:calc(-55% - 10px)}

/* Lisette's 512px canvas uses the same source-pixel scale as 400px cut-in art. */
.mini-skill-portrait[src*="weekly-lisette-standing"]{width:316.16%;height:316.16%;left:-89.58%;top:calc(-68.58% - 55px)}

/* Offset the 512px canvas headroom against the daily boss meter baseline. */
#battlefield .weekly-lisette-boss>.ines-phase{bottom:calc(100% + 12px - 25.79657136px)}

#battlefield .ines-direct-trial.skill-protected>.ines-shield-impact-flash{animation:inesShieldImpactFlash .18s ease-out both}
@keyframes inesShieldImpactFlash{0%,20%{opacity:1;transform:scale(1);filter:drop-shadow(0 0 10px #fff)}100%{opacity:0;transform:scale(1.04);filter:none}}
