/* Shield Bash. The module positions everything; this is look only. */
.exp-bash-host { position: absolute; pointer-events: none; z-index: 8; }

/* height 180, margin-bottom -90 (half) — anchor 0.90 * PLAYER_WIDTH = 102.6px,
   minus halfHeight 90 = 12.6px clear of the ground. */
.exp-bash-shield {
  position: absolute; width: 180px; height: 180px;
  margin-left: -90px; margin-bottom: -90px;
  background: url('/assets/skills/knight/fx/shield-front.webp') center/contain no-repeat;
  transform-origin: center center;
  will-change: transform, opacity;
  filter: drop-shadow(0 0 10px rgba(255,255,255,.9));
}

/* Reuses Ground Slam's exact dust-puff box (190/-95/-95, anchor 1.15) — see the
   plan's preamble for why "launch point" is interpreted as this already-proven
   height rather than literal y=0. */
.exp-bash-dust {
  position: absolute; width: 190px; height: 190px; margin-left: -95px; margin-bottom: -95px;
  background: url('/assets/skills/knight/fx/dust-puff.webp') center/contain no-repeat;
  will-change: transform, opacity;
}

/* Stun stars: anchored to the MONSTER, not the player — see .exp-bash-star-host
   below, positioned in JS from state.monsters. Size 32, half 16; anchor is
   computed per-monster from its own serialized height (Step 7), not PLAYER_WIDTH. */
.exp-bash-star-host { position: absolute; pointer-events: none; z-index: 62; }
.exp-bash-star {
  position: absolute; width: 32px; height: 32px; margin-left: -16px; margin-bottom: -16px;
  background: url('/assets/skills/knight/fx/stun-star.webp') center/contain no-repeat;
  will-change: transform;
}
