/* Bullets in flight, enemy bolts, slash / damage / knockback FX */
/* ---------- 空中的子彈 ---------- */
.bullets { position: absolute; inset: 0; pointer-events: none; }
.air { position: absolute; top: 475px; width: 60px; height: 18px; transform: translateY(-50%);
  transition: left .55s cubic-bezier(.2,.8,.2,1), opacity .3s; }
.air .trail { position: absolute; right: 52px; top: 50%; width: 140px; height: 2px; transform: translateY(-50%);
  background: linear-gradient(90deg, transparent, rgba(230,176,75,.7)); }
.air .trail::before, .air .trail::after { content: ""; position: absolute; left: 20px; right: 0; height: 1px; background: linear-gradient(90deg, transparent, rgba(230,176,75,.35)); }
.air .trail::before { top: -6px } .air .trail::after { top: 6px }
.air .slug { position: absolute; left: 0; top: 0; width: 60px; height: 18px; border-radius: 9px 9px 9px 9px / 9px 9px 9px 9px;
  background: linear-gradient(90deg, #A97C2E 0 55%, #F2D48A 55%); box-shadow: 0 0 14px rgba(230,176,75,.6); }
.air .slug::after { content: ""; position: absolute; right: -2px; top: 2px; width: 22px; height: 14px; border-radius: 0 12px 12px 0; background: #F6E1A8; }
.air .n { position: absolute; left: 50%; top: -34px; transform: translateX(-50%); font-family: var(--hud); font-weight: 700; font-size: 13px;
  color: var(--brass); letter-spacing: .06em; white-space: nowrap; text-align: center; line-height: 1.1; }
.air .n small { display: block; font-family: var(--zh); font-weight: 400; color: var(--muted); font-size: 11px; letter-spacing: 0; }
  .stage.is-timestop .air .slug { animation: shimmer 2.2s ease-in-out infinite; }
@keyframes shimmer { 0%,100% { box-shadow: 0 0 10px rgba(230,176,75,.5) } 50% { box-shadow: 0 0 22px rgba(95,227,255,.7) } }
.stage.is-hit .air { transition: left .35s ease-in; }

/* 敵人遠程投射物 */
.bolt { position: absolute; top: 585px; width: 46px; height: 12px; transform: translateY(-50%);
  background: linear-gradient(270deg, transparent, var(--crimson)); border-radius: 6px; box-shadow: 0 0 12px var(--crimson-dim); opacity: 0; transition: opacity .3s; }
.bolt::after { content: ""; position: absolute; left: -8px; top: -3px; width: 18px; height: 18px; border-radius: 50%; background: #FF8A8E; box-shadow: 0 0 14px var(--crimson); }
.stage.is-ranged .bolt { opacity: 1; }
.bolt.b1 { left: 980px } .bolt.b2 { left: 760px } .bolt.b3 { left: 560px } .stage.is-ranged .bolt.b3 { opacity: .55 }

/* ---------- 特效 ---------- */
.fx { position: absolute; inset: 0; pointer-events: none; }
.slash { position: absolute; left: 350px; top: 385px; width: 220px; height: 220px; opacity: 0; transition: opacity .3s; }
.slash svg { width: 100%; height: 100%; overflow: visible; }
.stage.is-melee .slash { opacity: 1; }
.stage.is-melee .slash svg path { animation: slashpulse .5s ease-out infinite; transform-origin: 50% 50%; }
.stage.is-slowmo .slash svg path { animation-duration: 3s; }
@keyframes slashpulse { 0% { opacity: .2; transform: rotate(-30deg) scale(.7) } 60% { opacity: 1 } 100% { opacity: 0; transform: rotate(30deg) scale(1.1) } }

.dmg { position: absolute; font-family: var(--hud); font-weight: 700; font-size: 44px; color: var(--brass); opacity: 0;
  text-shadow: 0 2px 0 #000, 0 0 18px rgba(230,176,75,.5); }
.dmg small { font-family: var(--zh); font-size: 14px; font-weight: 500; color: var(--text); margin-left: 6px; text-shadow: 0 1px 0 #000; }
@keyframes float { 0% { opacity: 0; transform: translateY(10px) } 15% { opacity: 1 } 80% { opacity: 1 } 100% { opacity: 0; transform: translateY(-50px) } }
.hitring { position: absolute; left: 1300px; top: 455px; width: 40px; height: 40px; margin: -20px; border-radius: 50%; border: 3px solid var(--brass); opacity: 0; }
@keyframes ring { 0% { opacity: 1; transform: scale(.2) } 100% { opacity: 0; transform: scale(3) } }

.kb-lines { position: absolute; left: 860px; top: 385px; width: 300px; height: 200px; opacity: 0; transition: opacity .3s; }
.kb-lines i { position: absolute; left: 0; height: 2px; background: linear-gradient(90deg, transparent, var(--brass)); }
.stage.is-knockback .kb-lines { opacity: 1; }
.stage.is-knockback .kb-lines i { animation: speed .5s linear infinite; }
@keyframes speed { 0% { transform: translateX(-40px); opacity: 0 } 40% { opacity: 1 } 100% { transform: translateX(80px); opacity: 0 } }
