/* Public attack cues use a handful of flat angular shapes; no extra artwork. */
.attack-feedback-layer{position:fixed;inset:0;z-index:94;pointer-events:none;overflow:hidden;contain:strict}
.attack-flight{position:absolute;height:10px;margin-top:-5px;rotate:var(--flight-angle);transform-origin:0 50%;background:linear-gradient(90deg,transparent,var(--attack-color) 78%);clip-path:polygon(0 37%,78% 37%,78% 0,100% 50%,78% 100%,78% 63%,0 63%);filter:drop-shadow(0 0 3px #07141bb3)}
.attack-flight.is-ranged{height:6px;margin-top:-3px;clip-path:polygon(0 20%,80% 20%,80% 0,100% 50%,80% 100%,80% 80%,0 80%);background:linear-gradient(90deg,transparent 25%,var(--attack-color) 70%,#f1f8e8)}
.attack-impact{position:absolute;translate:-50% -50%;margin:0;color:var(--attack-color);pointer-events:none;filter:drop-shadow(0 2px 3px #07121bbb)}
.attack-impact:before,.attack-impact:after,.attack-mark,.attack-ward-facet{content:'';position:absolute;pointer-events:none}
.attack-impact.is-hit:before{inset:12%;background:var(--attack-color);clip-path:polygon(46% 0,56% 34%,84% 12%,66% 42%,100% 48%,65% 57%,90% 85%,58% 67%,48% 100%,40% 65%,12% 84%,33% 55%,0 47%,35% 39%,16% 10%,43% 32%)}
.attack-impact.is-hit:after{inset:28%;background:#fff4d4;clip-path:polygon(48% 0,62% 38%,100% 48%,61% 60%,49% 100%,39% 61%,0 49%,38% 38%)}
.attack-mark{left:48%;top:4%;width:5%;height:17%;background:currentColor;transform-origin:50% 265%;rotate:calc(var(--mark)*90deg + 18deg);clip-path:polygon(50% 0,100% 100%,0 80%)}
.attack-impact:is(.is-ward,.is-block):before{inset:9%;border:3px solid currentColor;background:#9edbed12;clip-path:polygon(50% 0,94% 20%,85% 68%,50% 100%,15% 68%,6% 20%)}
.attack-impact:is(.is-ward,.is-block):after{inset:24%;background:currentColor;clip-path:polygon(50% 0,100% 23%,82% 70%,50% 100%,18% 70%,0 23%,11% 28%,29% 65%,50% 81%,71% 65%,89% 28%,50% 12%,11% 28%)}
.attack-impact.has-armour .attack-mark{background:#cddae5}
.attack-ward-facet{width:29%;height:49%;left:-1%;top:17%;background:#b6e9f9;opacity:.9;rotate:-23deg;clip-path:polygon(0 20%,60% 0,100% 57%,34% 100%,20% 52%)}
.attack-impact.is-freeze:before{inset:4%;background:currentColor;clip-path:polygon(48% 0,57% 31%,79% 16%,67% 40%,100% 48%,68% 57%,85% 82%,59% 69%,49% 100%,40% 67%,16% 82%,31% 58%,0 49%,32% 41%,17% 17%,42% 30%)}
.attack-impact.is-freeze:after{inset:24%;background:#16303b;clip-path:polygon(50% 0,100% 50%,50% 100%,0 50%)}
.attack-impact.is-miss:before{inset:17%;border:2px dashed currentColor;border-radius:50%;rotate:-25deg}
.attack-impact.is-miss:after{left:18%;top:42%;width:65%;height:12%;background:currentColor;rotate:-25deg;clip-path:polygon(0 25%,75% 25%,75% 0,100% 50%,75% 100%,75% 75%,0 75%)}
.attack-impact.is-redirect:before,.attack-impact.is-redirect:after{left:14%;top:21%;width:36%;height:58%;background:currentColor;clip-path:polygon(0 0,35% 0,100% 50%,35% 100%,0 100%,65% 50%)}
.attack-impact.is-redirect:after{left:50%}
.attack-impact.is-reflex:before{inset:12%;background:currentColor;clip-path:polygon(50% 0,100% 50%,50% 100%,0 50%,12% 50%,50% 86%,86% 50%,50% 14%,12% 50%,0 50%)}
.attack-impact.is-reflex:after{inset:30%;background:#eef4ff;clip-path:polygon(50% 0,100% 50%,50% 100%,0 50%)}
.attack-impact.is-none:before{inset:44% 24%;background:currentColor;clip-path:polygon(7% 0,100% 0,93% 100%,0 100%)}
.attack-impact:is(.is-miss,.is-redirect,.is-reflex,.is-none) .attack-mark{display:none}
.attack-impact.is-lethal:after{background:#fff1cb}
.game-battle .is-attack-source{outline:2px solid #9de8d1;outline-offset:-3px;box-shadow:inset 0 0 0 4px #9de8d11f}
.game-battle .is-attack-target{outline:2px solid #f3c79e;outline-offset:-3px;box-shadow:inset 0 0 0 4px #f3c79e1f}
.game-battle .arena-content{--phase-row:48px}
.battle-attack-cue{display:grid;gap:1px;min-width:0;max-width:100%;color:#dcebe8}
.game-battle .battle-attack-cue strong{font:650 11px/1.2 system-ui;letter-spacing:0;color:#e7f4ec;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.battle-attack-cue>span{font:500 10px/1.25 system-ui;color:#e7cba8;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.game-battle .battle-divider:has(.battle-attack-cue)>div{width:100%;max-width:calc(100% - 20px)}
/* Result text shares the reserved help row so selecting or dragging a card
   never changes the hand's measured height or fitted card scale. */
.game-battle .selection-help:has(.battle-last-result){height:auto;min-height:28px;align-items:center;overflow:hidden}
.battle-last-result{display:block;width:100%;max-width:100%;min-width:0;text-align:center}
.battle-last-result .battle-attack-cue{width:100%;max-width:100%}
.battle-attack-live{position:absolute!important;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}
@media(prefers-reduced-motion:reduce){.attack-feedback-layer{display:none}}
.calm-motion .attack-feedback-layer,.is-paused .attack-feedback-layer{display:none}
