/* 행동 하나를 준비 → 이동/타격 → 피해·상태 적용 순서로 보여준다. */
.combat-unit.acting::before,.hero-unit.acting::before{display:none}
.combat-unit.swinging{z-index:7}.hero-unit.swinging{z-index:7}
.hero-unit.swinging .hero-sprite{animation:hero-attack .35s ease-in-out both}
.combat-unit.swinging .unit-figure{animation:enemy-attack .35s ease-in-out both}
.hero-unit.striking .hero-sprite{animation:hero-recover .5s ease-out both}
.combat-unit.striking .unit-figure{animation:enemy-recover .5s ease-out both}
.hero-unit.casting .hero-sprite,.combat-unit.casting .unit-figure{animation:combat-cast .65s ease-in-out both}
.combat-unit.receiving .unit-figure{animation:enemy-impact .55s ease-out both}
.hero-unit.receiving .hero-sprite{animation:hero-impact .55s ease-out both}
.combat-projectile{position:absolute;z-index:8;left:var(--sx);top:var(--sy);width:32px;height:11px;border-radius:90% 12% 90% 12%;background:linear-gradient(90deg,transparent,#fff4bd 35%,#fff 75%,transparent);box-shadow:0 0 8px #fff3ac,0 0 16px #e0a161;transform:translate(-50%,-50%) rotate(-25deg);animation:combat-flight .35s cubic-bezier(.17,.58,.66,1) both;pointer-events:none}
.combat-projectile::after{content:"";position:absolute;right:90%;top:3px;width:37px;height:3px;background:linear-gradient(90deg,transparent,#ffe6ac);filter:blur(1px)}
.combat-projectile.hurt,.combat-projectile.guard,.combat-projectile.miss{background:linear-gradient(90deg,transparent,#ec9289,#fff,transparent);box-shadow:0 0 8px #f68b80,0 0 16px #c65356}
.combat-projectile.status{background:linear-gradient(90deg,transparent,#b8a5f4,#fff,transparent);box-shadow:0 0 11px #ad88ee}
.combat-projectile.reflect{background:linear-gradient(90deg,transparent,#bdedef,#fff,transparent);box-shadow:0 0 11px #81ced9}
.combat-link{position:absolute;z-index:8;inset:0;width:100%;height:100%;overflow:visible;pointer-events:none;animation:combat-link-fade .62s ease-out both}
.combat-link line{stroke:#ffebb9;stroke-width:4px;stroke-linecap:round;filter:drop-shadow(0 0 4px #ffcd6b)}
.combat-link.link-hurt line,.combat-link.link-guard line,.combat-link.link-miss line{stroke:#ffad9e;filter:drop-shadow(0 0 5px #e87069)}
.combat-link.link-status line{stroke:#c2aff5;filter:drop-shadow(0 0 5px #a384e7)}
.combat-link.link-reflect line{stroke:#abeced;filter:drop-shadow(0 0 5px #80c9d0)}
.combat-impact-fx{position:absolute;z-index:9;transform:translate(-50%,-50%);pointer-events:none;width:1px;height:1px}
.combat-impact-fx i{position:absolute;left:-28px;top:-28px;width:56px;height:56px;border:4px solid #ffe6b0;border-radius:50%;background:radial-gradient(circle,#fff9df 0%,#ffdd944f 26%,transparent 65%);box-shadow:0 0 18px #ffd27d;animation:combat-burst .54s ease-out both}
.combat-impact-fx.fx-hit i,.combat-impact-fx.fx-hurt i,.combat-impact-fx.fx-reflect i{border:0;border-radius:0;background:linear-gradient(126deg,transparent 39%,#fff2ca 44% 50%,transparent 55%),linear-gradient(40deg,transparent 43%,#fff 47% 52%,transparent 56%);box-shadow:none;filter:drop-shadow(0 0 7px #ffda83);animation:combat-slash .58s ease-out both}
.combat-impact-fx.fx-hurt i{filter:drop-shadow(0 0 7px #f98480)}
.combat-impact-fx b{position:absolute;left:50%;top:-43px;transform:translateX(-50%);min-width:34px;padding:2px 5px;border:1px solid #ffc1a4;border-radius:4px;background:#521e27e9;color:#fff6df;text-align:center;font-size:12px;font-weight:900;white-space:nowrap;text-shadow:0 1px #000;box-shadow:0 2px 10px #0009;animation:combat-number .62s ease-out both}
.combat-impact-fx.fx-miss i{border-color:#a2dff0;background:radial-gradient(circle,#a8edff99,transparent 65%);box-shadow:0 0 16px #8de6ff}.combat-impact-fx.fx-miss b{border-color:#a2dff0;background:#224353}
.combat-impact-fx.fx-guard i{border-color:#a7c9ee;background:radial-gradient(circle,#b7dcff99,transparent 65%);box-shadow:0 0 18px #8abaf2}.combat-impact-fx.fx-guard b{border-color:#a7c9ee;background:#283c57}
.combat-impact-fx.fx-status i,.combat-impact-fx.fx-heal i,.combat-impact-fx.fx-skill i{border-color:#b5dfae;background:radial-gradient(circle,#b7efacaa,transparent 65%);box-shadow:0 0 18px #92d889}.combat-impact-fx.fx-status b,.combat-impact-fx.fx-heal b,.combat-impact-fx.fx-skill b{border-color:#b5dfae;background:#315039}
.combat-impact-fx.poison i{border-color:#b490e9;background:radial-gradient(circle,#ad7adbaa,transparent 65%);box-shadow:0 0 18px #a76ed3}.combat-impact-fx.poison b{border-color:#c6a4ef;background:#513267}
.combat-impact-fx.bleed-status i{border-color:#f19a9d;background:radial-gradient(circle,#e7747aaa,transparent 65%);box-shadow:0 0 18px #df6673}.combat-impact-fx.bleed-status b{border-color:#f19a9d;background:#673039}
.combat-impact-fx.faith i{border-color:#e8d79d;background:radial-gradient(circle,#f4d88faa,transparent 65%);box-shadow:0 0 18px #e4ca73}.combat-impact-fx.faith b{border-color:#e8d79d;background:#64542b}
.combat-impact-fx.fx-bleed i{border-color:#ef8585;background:radial-gradient(circle,#e4556688,transparent 65%);box-shadow:0 0 19px #d94b62}
.combat-impact-fx.fx-wait i{border-color:#edcb8c;background:radial-gradient(circle,#e4ba7188,transparent 65%);box-shadow:0 0 17px #d7a851}.combat-impact-fx.fx-wait b{border-color:#edcb8c;background:#574328}
.combat-impact-fx.fx-reflect i{border-color:#b5e5ec;background:radial-gradient(circle,#a4e7ee88,transparent 65%);box-shadow:0 0 18px #7ccbd8}
@keyframes hero-attack{0%{transform:translate(0,0) rotate(0);filter:brightness(1)}40%{transform:translate(-26px,-16px) rotate(-14deg);filter:brightness(1.65)}75%{transform:translate(-38px,-22px) rotate(-6deg);filter:brightness(1.2)}100%{transform:translate(0,0) rotate(0);filter:brightness(1)}}
@keyframes enemy-attack{0%{transform:translate(0,0) rotate(0)}45%{transform:translate(23px,11px) rotate(13deg);filter:brightness(1.5)}80%{transform:translate(30px,15px) rotate(5deg)}100%{transform:translate(0,0) rotate(0)}}
@keyframes hero-recover{0%{transform:translate(-38px,-22px) rotate(-6deg);filter:brightness(1.8)}50%{transform:translate(-24px,-14px);filter:brightness(1.35)}100%{transform:translate(0,0);filter:none}}
@keyframes enemy-recover{0%{transform:translate(30px,15px) rotate(5deg);filter:brightness(1.7)}50%{transform:translate(18px,8px);filter:brightness(1.2)}100%{transform:translate(0,0);filter:none}}
@keyframes combat-cast{0%{filter:brightness(1)}45%{filter:brightness(2) drop-shadow(0 0 11px #cce7ad);scale:1.08}100%{filter:brightness(1);scale:1}}
@keyframes enemy-impact{0%{transform:translate(0,0);filter:brightness(2.8) saturate(.3)}25%{transform:translate(-8px,-3px);filter:brightness(2.2)}55%{transform:translate(5px,2px)}100%{transform:translate(0,0);filter:none}}
@keyframes hero-impact{0%{transform:translate(0,0);filter:brightness(2.5)}25%{transform:translate(10px,5px);filter:brightness(1.8)}55%{transform:translate(-4px,-2px)}100%{transform:translate(0,0);filter:none}}
@keyframes combat-flight{0%{left:var(--sx);top:var(--sy);opacity:0;scale:.5}18%{opacity:1}100%{left:var(--tx);top:var(--ty);opacity:1;scale:1.15}}
@keyframes combat-link-fade{0%{opacity:0}18%{opacity:1}60%{opacity:.8}100%{opacity:0}}
@keyframes combat-slash{0%{opacity:0;scale:.5;rotate:-25deg}20%{opacity:1;scale:1.2;rotate:0deg}65%{opacity:1;scale:1}100%{opacity:0;scale:1.5}}
@keyframes combat-burst{0%{opacity:0;scale:.35}20%{opacity:1;scale:1}100%{opacity:0;scale:1.5}}
@keyframes combat-number{0%{opacity:0;translate:0 10px}22%{opacity:1}85%{opacity:1}100%{opacity:0;translate:0 -20px}}
@media(prefers-reduced-motion:reduce){.hero-unit.swinging .hero-sprite,.combat-unit.swinging .unit-figure,.hero-unit.striking .hero-sprite,.combat-unit.striking .unit-figure,.hero-unit.casting .hero-sprite,.combat-unit.casting .unit-figure,.combat-unit.receiving .unit-figure,.hero-unit.receiving .hero-sprite,.combat-projectile,.combat-link,.combat-impact-fx i,.combat-impact-fx b{animation:none}.combat-projectile{display:none}.combat-impact-fx b{opacity:1}}
