/* Attribute-specific skill effects: flowing light and organic particles, never a rotating frame. */
.moonwood-combat-fx{position:fixed;inset:0;z-index:21;overflow:hidden;pointer-events:none;contain:strict}
.combat-fx-action{position:absolute;inset:0;pointer-events:none;--fx-color:#dbc690;--fx-light:#fff0c8}
.combat-fx-beam{position:absolute;inset:0;width:100%;height:100%;overflow:visible;fill:none;pointer-events:none}
.combat-fx-beam path{stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:1;filter:drop-shadow(0 0 4px var(--fx-color));animation:combat-beam .5s ease-out both}
.combat-fx-beam path.combat-fx-beam-secondary{stroke-width:2.5;opacity:.85}
.combat-fx-electric .combat-fx-beam path{stroke-width:2.5;filter:drop-shadow(0 0 3px var(--fx-color))}
.combat-fx-water .combat-fx-beam path{stroke-width:7;opacity:.68}
.combat-fx-grass .combat-fx-beam path{stroke-width:3}
.combat-fx-orb{position:absolute;width:15px;height:15px;border-radius:50%;background:radial-gradient(circle at 35% 35%,var(--fx-light),var(--orb-color) 42%,transparent 75%);filter:drop-shadow(0 0 6px var(--orb-color));animation:combat-orb .32s cubic-bezier(.28,.36,.38,1) both}
.combat-fx-orb-fire{width:24px;height:24px;background:radial-gradient(ellipse at 50% 65%,#ffe3a5,var(--orb-color) 38%,transparent 73%)}
.combat-fx-orb-water,.combat-fx-orb-ice{width:21px;height:21px}
.combat-fx-orb-grass{width:19px;height:11px;border-radius:90% 8% 80% 8%;background:linear-gradient(30deg,var(--orb-color),var(--fx-light))}
.combat-fx-bloom{position:absolute;width:90px;height:90px;border-radius:50%;background:radial-gradient(circle,var(--fx-light) 0 3%,color-mix(in srgb,var(--fx-color) 65%,transparent) 13%,color-mix(in srgb,var(--fx-color) 22%,transparent) 38%,transparent 69%);transform:translate(-50%,-50%);animation:combat-bloom .55s ease-out both}
.combat-fx-combo .combat-fx-bloom{width:122px;height:122px}
.combat-fx-particle{position:absolute;width:var(--particle-size);height:var(--particle-size);border-radius:50%;background:var(--fx-color);box-shadow:0 0 5px color-mix(in srgb,var(--fx-color) 60%,transparent);transform:translate(-50%,-50%);animation:combat-particle .62s cubic-bezier(.16,.64,.3,1) both}
.combat-fx-particle-fire{height:calc(var(--particle-size)*1.65);border-radius:80% 15% 65% 45%;background:linear-gradient(0deg,#ffc16d,#ef885c)}
.combat-fx-particle-electric{width:calc(var(--particle-size)*1.65);height:calc(var(--particle-size)*2);border-radius:0;clip-path:polygon(52% 0,100% 0,60% 38%,89% 38%,8% 100%,31% 55%,0 55%);background:#ecd66e;box-shadow:none}
.combat-fx-particle-water{border-radius:75% 25% 65% 65%;background:linear-gradient(135deg,#d4f6f1,#6fbfcf)}
.combat-fx-particle-grass{width:calc(var(--particle-size)*1.5);border-radius:80% 0 75% 0;background:linear-gradient(35deg,#8fc078,#d7e8a3)}
.combat-fx-particle-ice{border-radius:1px;clip-path:polygon(50% 0,100% 50%,50% 100%,0 50%);background:#caeef0}
.combat-fx-amount{position:absolute;color:#fff0cc;font:800 27px/1 var(--ui);text-shadow:0 2px 3px #251408,0 0 8px #342512;white-space:nowrap;animation:combat-amount .88s ease-out both}
.combat-fx-amount-combo{font-size:33px;color:#fff0b5}
.combat-fx-caption{position:absolute;max-width:210px;padding:5px 10px;border:1px solid color-mix(in srgb,var(--fx-color) 52%,transparent);border-radius:16px;background:#172119ed;color:var(--fx-light);font:600 12px/1.45 var(--cn);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;box-shadow:0 4px 12px #0004;animation:combat-caption .92s ease-out both}
.combat-fx-combo-word{position:absolute;transform:translate(-50%,-50%);color:#eed597;font:600 12px/1.4 var(--cn);letter-spacing:2px;white-space:nowrap;text-shadow:0 2px 5px #172010;animation:combat-caption .92s ease-out both}
@keyframes combat-beam{0%{stroke-dashoffset:1;opacity:0}12%{opacity:.8}58%{stroke-dashoffset:0;opacity:.85}100%{stroke-dashoffset:-.18;opacity:0}}
@keyframes combat-orb{0%{opacity:0;transform:translate(-50%,-50%) scale(.55)}15%{opacity:.9}85%{opacity:.85}100%{opacity:0;transform:translate(-50%,-50%) translate(var(--travel-x),var(--travel-y)) scale(.75)}}
@keyframes combat-bloom{0%{opacity:0;transform:translate(-50%,-50%) scale(.4)}20%{opacity:.78}100%{opacity:0;transform:translate(-50%,-50%) scale(1.28)}}
@keyframes combat-particle{0%{opacity:0;transform:translate(-50%,-50%) rotate(var(--particle-angle)) scale(.45)}18%{opacity:.9}100%{opacity:0;transform:translate(-50%,-50%) translate(var(--particle-x),var(--particle-y)) rotate(var(--particle-angle)) scale(.2)}}
@keyframes combat-amount{0%{opacity:0;transform:translate(-50%,-30%) scale(.75)}16%{opacity:1;transform:translate(-50%,-60%) scale(1.06)}66%{opacity:1}100%{opacity:0;transform:translate(-50%,-150%) scale(.98)}}
@keyframes combat-caption{0%{opacity:0;transform:translate(-50%,-35%)}17%,70%{opacity:1}100%{opacity:0;transform:translate(-50%,-72%)}}
/* Target cues remain visible and keyboard focus stays intact. */
.hero-target-ring{animation:none!important;transform:none!important;border:1px solid #d9c7836b;border-radius:12px;box-shadow:0 0 12px #d0bb6630}
.unit.valid-target{animation:none;border-color:#e7cc82;box-shadow:0 0 13px #e1c57763}
.unit.ready:before{animation:none;transform:none}
@keyframes fx-shot-flight{0%{opacity:0;transform:translate(-50%,-50%) scale(.4)}15%{opacity:1}74%{opacity:1;transform:translate(-50%,-50%) translate3d(var(--fx-dx),var(--fx-dy),0) scale(1.16)}100%{opacity:0;transform:translate(-50%,-50%) translate3d(var(--fx-dx),var(--fx-dy),0) scale(.45)}}
@media(max-width:640px){.combat-fx-amount{font-size:24px}.combat-fx-amount-combo{font-size:29px}.combat-fx-caption{font-size:11px;max-width:200px}.combat-fx-bloom{width:74px;height:74px}.combat-fx-combo .combat-fx-bloom{width:98px;height:98px}}
@media(prefers-reduced-motion:reduce){.combat-fx-beam,.combat-fx-orb{display:none}.combat-fx-bloom,.combat-fx-particle,.combat-fx-amount,.combat-fx-caption,.combat-fx-combo-word{animation-name:combat-reduced;animation-duration:.7s;transform:translate(-50%,-50%)}.combat-fx-bloom{opacity:.45}.combat-fx-particle{display:none}@keyframes combat-reduced{0%,100%{opacity:0}15%,70%{opacity:.9}}}
