/* Stable creature pixels, forged ability seals, and impacts in the same world. */
.combat-head h1,.encounter-intro .combat-head h1,.boss-combat .combat-head h1{font:700 31px/1.15 'Knightle Herald',serif;letter-spacing:1px;transform:none;color:#f3e3c4}
.intro-name .combat-head{animation:foe-name .8s ease-out both}
.trait-emblem{width:70px;gap:3px;padding:0;border:0;background:none;box-shadow:none}
.trait-emblem .ability-sigil{width:48px;height:48px;display:block;margin:auto;filter:drop-shadow(0 2px 2px #050906)}
.trait-emblem .ability-status{display:block;min-height:10px;text-align:center;font:700 9px/1.1 'Knightle Quill';letter-spacing:1px;color:#e3cf94}
.trait-emblem small{font-size:6px;line-height:1.5;letter-spacing:.8px;color:#c8bb91;text-shadow:1px 2px #10170e}
.trait-trigger .ability-sigil{animation:seal-strike .9s ease-out both}
@keyframes seal-strike{0%{filter:drop-shadow(0 0 0 #f2ae55)}30%{filter:drop-shadow(0 0 7px #f2ae55);transform:scale(1.1)}100%{filter:drop-shadow(0 2px 2px #050906);transform:none}}
.impact-canvas{position:fixed;inset:0 0 var(--ad-space);width:100%;height:calc(100dvh - var(--ad-space));pointer-events:none;z-index:54;image-rendering:pixelated}
.injury-vignette{position:fixed;inset:0 0 var(--ad-space);z-index:57;pointer-events:none;opacity:0;background:radial-gradient(ellipse at center,transparent 42%,#b9211733 75%,#9f171b9c);mix-blend-mode:screen}
.injury-vignette.low-health{animation:danger-breath 2.4s ease-in-out infinite}
.injury-vignette.taking-hit{animation:wound-bloom 1.15s ease-out both;animation-delay:var(--impact-delay,250ms)}
.stage-combat:has(.enemyAttack){animation:wound-shake .45s ease-out both;animation-delay:250ms}
.stage-combat:has(.room-5.enemyAttack){animation-delay:460ms}
.stage-combat:has(.finisherImpact){animation:legend-quake .7s ease-out both;animation-delay:170ms}
.room-5.enemyAttack .last-attack .tile{animation:board-scorch 1.2s ease-out both;animation-delay:calc(460ms + var(--tile-index)*20ms)}
.room-5.enemyAttack .last-attack:after{content:'';position:absolute;inset:-12px -5px;pointer-events:none;background:radial-gradient(ellipse,#ffbc6566,transparent 72%);animation:board-fire 1s ease-out both;animation-delay:460ms;mix-blend-mode:screen}
.guess-row{position:relative}
@keyframes wound-shake{0%,100%{transform:none}12%{transform:translate(-4px,2px)}28%{transform:translate(4px,-2px)}46%{transform:translate(-3px,1px)}64%{transform:translate(2px,0)}82%{transform:translate(-1px,0)}}
@keyframes legend-quake{0%,100%{transform:none}10%{transform:translate(-6px,3px)}23%{transform:translate(5px,-3px)}38%{transform:translate(-4px,2px)}55%{transform:translate(3px,-1px)}74%{transform:translate(-1px,0)}}
@keyframes wound-bloom{0%{opacity:0}12%{opacity:.85}55%{opacity:.35}100%{opacity:0}}
@keyframes danger-breath{0%,100%{opacity:.15}50%{opacity:.4}}
@keyframes board-scorch{0%{filter:none}12%{filter:brightness(2.1) sepia(.5);box-shadow:inset 0 0 16px #ff8233,0 0 18px #fa6d2a;transform:translateY(2px)}35%{transform:translateY(-1px);filter:brightness(1.5)}100%{filter:none;transform:none;box-shadow:none}}
@keyframes board-fire{0%{opacity:0;transform:scale(.3)}15%{opacity:1;transform:scale(1.1)}100%{opacity:0;transform:scale(1.35)}}
.repeated-damage{min-width:56px;display:grid;place-items:center;position:absolute}
.repeated-damage .damage-before,.repeated-damage .damage-after{grid-area:1/1}
.repeated-damage .damage-before{animation:deduct-original .8s ease both}
.repeated-damage .damage-after{color:#e5c598;animation:deduct-final .8s ease both}
.repeated-damage em{display:block;white-space:nowrap;font:700 8px 'Knightle Quill';color:#f3b992;text-shadow:1px 1px #080e0b;animation:deduct-label .8s ease both}
@keyframes deduct-original{0%,38%{opacity:1;transform:none}65%,100%{opacity:0;transform:translateY(-12px) scale(.8)}}
@keyframes deduct-final{0%,45%{opacity:0;transform:translateY(10px)}75%,100%{opacity:1;transform:none}}
@keyframes deduct-label{0%,28%{opacity:0}48%,100%{opacity:1}}
.execution-bolt{display:none!important}
.execution-impact .execution-words h2{background:linear-gradient(105deg,#fff2b0,#baffe3,#9ae9fa,#d5b4ff,#ffc3e0,#ffe8a7);background-size:200% 100%;background-clip:text;-webkit-background-clip:text;color:transparent;text-shadow:0 3px 1px #14201c44;filter:drop-shadow(0 0 9px #ddc2ee66);animation:spectrum-title 2.4s ease-out both}
.execution-impact .execution-light{opacity:.7}.execution-impact .execution-sigil{opacity:.2}
.execution-impact .execution-power b{color:#fff5c4;filter:drop-shadow(0 0 8px #9ce5d477)}
.finisherImpact .battle-wrap{animation:none}
@keyframes spectrum-title{0%{background-position:100%;transform:scale(.8)}15%{transform:scale(1.08)}35%,100%{transform:none;background-position:0%}}
/* The same open chest physically pulls away before loot is revealed. */
.spoils-screen{justify-content:flex-start;padding-top:68px}
.spoils-screen .loot-stage{height:200px;margin:7px auto 0;flex:none}
.spoils-screen .loot-container{width:195px;height:195px}
.loot-pullback .loot-container{animation:chest-camera-back .85s cubic-bezier(.2,.7,.2,1) both}
.loot-revealed .loot-container{animation:none;transform:scale(.65)}
.loot-pullback .loot-stage,.loot-revealed .loot-stage{height:200px;animation:none;margin-top:7px}
.loot-pullback .rainbow-burst{animation:loot-light-recedes .85s ease both}
.loot-revealed .rainbow-burst{opacity:.12;transform:scale(.6)}
.spoils-screen h2,.loot-revealed h2{font-size:18px;margin:0 0 12px}
.loot-presentation{width:100%;min-height:235px}
.loot-presentation.awaiting{visibility:hidden;pointer-events:none}
.loot-revealed .loot-presentation{animation:spoils-arrive .6s ease both}
@keyframes chest-camera-back{from{transform:scale(1)}to{transform:scale(.65)}}
@keyframes loot-light-recedes{from{opacity:.6;transform:scale(1.45)}to{opacity:.12;transform:scale(.6)}}
@keyframes spoils-arrive{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}
.rank-echo{position:absolute;top:50%;left:50%;translate:-50% -65%;font:700 81px/1 'Knightle Herald';color:#d6c8ab;opacity:0;pointer-events:none}
.rank-up .rank-number{animation:rank-forged .95s cubic-bezier(.12,.8,.3,1) both;color:#fff3cc;text-shadow:3px 4px #35283d,0 0 18px #95f1dc,0 0 35px #d99cf088}
.rank-up .rank-echo{animation:rank-departs .65s ease-out both}
.rank-up .ascension-halo{background:conic-gradient(#e8c579,#a8e4af,#80d6ef,#b797ef,#f5a9c3,#e8c579);mask-image:radial-gradient(transparent 40%,#000 47%,transparent 68%);animation:rank-corona 1s ease-out both}
.rank-announcement{font:700 9px 'Knightle Quill';color:#dfd6b0;min-height:20px;text-align:center;letter-spacing:1px;margin:-15px 0 12px}
@keyframes rank-forged{0%{opacity:0;transform:scale(.5) translateY(20px)}30%{opacity:1;transform:scale(1.25) translateY(-5px)}55%{transform:scale(.95)}75%,100%{transform:none}}
@keyframes rank-departs{0%{opacity:.8;transform:none}100%{opacity:0;transform:translateY(-48px) scale(1.4)}}
@keyframes rank-corona{0%{opacity:0;transform:scale(.4) rotate(-40deg)}35%{opacity:1;transform:scale(1.5) rotate(10deg)}100%{opacity:.4;transform:scale(1) rotate(40deg)}}
@media(max-width:700px){.combat-head h1,.encounter-intro .combat-head h1,.boss-combat .combat-head h1{font-size:25px}.trait-emblem{width:58px}.trait-emblem .ability-sigil{width:39px;height:39px}.trait-emblem small{font-size:5px}.spoils-screen{padding-top:58px}.spoils-screen .loot-stage,.loot-pullback .loot-stage,.loot-revealed .loot-stage{height:166px}.spoils-screen .loot-container{width:176px;height:176px}.loot-presentation{min-height:220px}}
@media(max-width:700px) and (max-height:760px){.combat-head h1,.encounter-intro .combat-head h1,.boss-combat .combat-head h1{font-size:22px}.spoils-screen{padding-top:45px}.spoils-screen .loot-stage,.loot-pullback .loot-stage,.loot-revealed .loot-stage{height:142px}.spoils-screen .loot-container{width:160px;height:160px}.spoils-screen>.eyebrow{margin-bottom:8px}.spoils-screen h1{margin-bottom:8px}}
@media(prefers-reduced-motion:reduce){.stage-combat:has(.enemyAttack),.stage-combat:has(.finisherImpact),.injury-vignette,.room-5.enemyAttack .last-attack .tile,.room-5.enemyAttack .last-attack:after,.trait-trigger .ability-sigil,.execution-impact .execution-words h2,.rank-up .rank-number,.rank-up .rank-echo,.rank-up .ascension-halo,.loot-pullback .loot-container,.loot-revealed .loot-presentation{animation:none!important}.injury-vignette.low-health{opacity:.15}.injury-vignette.taking-hit{opacity:.25}.loot-pullback .loot-container{transform:scale(.65)}.repeated-damage .damage-before{display:none}.repeated-damage .damage-after,.repeated-damage em{animation:none}.rank-echo{display:none}}
.repeated-damage .damage-before,.repeated-damage .damage-after,.repeated-damage em{animation-delay:var(--impact-delay)}
