/* ============ 复利成长助手 · fx.css：动效（可整体关闭） ============ */
body.fx-off *, body.fx-off *::before, body.fx-off *::after {
  animation: none !important;
  transition: none !important;
}

@keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } }
@keyframes popIn { from { opacity: 0; transform: scale(.92) translateY(8px); } to { opacity: 1; transform: none; } }
@keyframes slideInRight { from { opacity: 0; transform: translateX(30px); } to { opacity: 1; transform: none; } }
@keyframes slideUp { from { opacity: 0; transform: translateY(16px); } to { opacity: 1; transform: none; } }
@keyframes xpFloatUp {
  0% { opacity: 0; transform: translate(0, 10px) scale(.8); }
  20% { opacity: 1; transform: translate(0, 0) scale(1); }
  100% { opacity: 0; transform: translate(var(--dx, 10px), -46px) scale(1.05); }
}
@keyframes confettiFall {
  0% { opacity: 1; transform: translateY(-10px) rotate(0); }
  100% { opacity: 0; transform: translateY(120px) rotate(540deg); }
}
@keyframes bannerGlow {
  0% { filter: brightness(1); }
  50% { filter: brightness(1.35); }
  100% { filter: brightness(1); }
}
@keyframes pulse { 0%,100% { transform: scale(1); } 50% { transform: scale(1.05); } }
@keyframes ringFill { from { stroke-dashoffset: var(--ring-from); } }

.page-enter { animation: slideUp .22s ease; }

.xp-float {
  position: fixed; z-index: 500; pointer-events: none;
  font-weight: 800; font-size: 17px; color: var(--accent-2);
  text-shadow: 0 2px 8px rgba(0,0,0,.4);
  animation: xpFloatUp .9s ease forwards;
}
.xp-float.gold { color: var(--gold); font-size: 19px; }

#fx-root { position: fixed; inset: 0; pointer-events: none; z-index: 450; overflow: hidden; }
.confetti {
  position: absolute; top: -14px; width: 8px; height: 12px; border-radius: 2px;
  animation: confettiFall var(--cf-dur, 1.4s) ease-in forwards;
}

.level-banner {
  position: fixed; top: 18%; left: 50%; transform: translateX(-50%);
  z-index: 480; text-align: center; pointer-events: none;
  background: linear-gradient(135deg, #2c2310, #4a3a12 45%, #2c2310);
  border: 1px solid rgba(245,194,92,.6); color: var(--gold);
  border-radius: 16px; padding: 18px 42px; box-shadow: 0 10px 40px rgba(0,0,0,.5);
  animation: popIn .3s ease, bannerGlow 1.6s ease infinite;
}
.level-banner .lb-title { font-size: 30px; font-weight: 900; }
.level-banner .lb-sub { font-size: 13px; margin-top: 4px; opacity: .9; }

.flash-stroke {
  animation: ringFill .8s ease;
}

.pulse-soft { animation: pulse 2s ease infinite; }

body[data-theme="dawn"] .xp-float { text-shadow: none; }
body[data-theme="forest"] .xp-float { text-shadow: none; }