/* lane-fx.css: stub created by the foundation lane; owned by the fx lane. */

/* fx3d: crit = brief rim glow on the hero canvas edge (never a body fill); death = desaturate and sink. Filters only on the canvas. */
.m3d.rim-crit .m3d-canvas { animation: rimCrit .32s ease-out 1; }
@keyframes rimCrit { 0% { filter: drop-shadow(0 0 3px #ffc23a) drop-shadow(0 0 8px #ff8a1a); } 100% { filter: none; } }
.m3d.dying .m3d-canvas { animation: m3dDie .9s ease-in forwards; }
@keyframes m3dDie { 0% { filter: none; transform: translateY(0); } 100% { filter: grayscale(1) brightness(.55); transform: translateY(6%); opacity: .85; } }
@media (prefers-reduced-motion: reduce) { .m3d.rim-crit .m3d-canvas, .m3d.dying .m3d-canvas { animation-duration: .01s; } }

/* fx3d damage numbers: outlined, log-scaled by hit size (.sz1-.sz5 from react.js), crit = gold fill + short shake */
.floater.dmg, .floater.crit { -webkit-text-stroke: 1.5px #1a0a00; paint-order: stroke fill; text-shadow: 0 2px 0 #000, 0 0 8px rgba(0,0,0,.85); }
.floater.dmg.sz1 { font-size: 20px; } .floater.dmg.sz2 { font-size: 24px; } .floater.dmg.sz3 { font-size: 28px; } .floater.dmg.sz4 { font-size: 33px; } .floater.dmg.sz5 { font-size: 38px; }
.floater.crit { color: #ffd23a; } .floater.crit.sz1 { font-size: 28px; } .floater.crit.sz2 { font-size: 33px; } .floater.crit.sz3 { font-size: 38px; } .floater.crit.sz4 { font-size: 44px; } .floater.crit.sz5 { font-size: 50px; }
.stage .floater.dmg.sz1 { font-size: 24px; } .stage .floater.dmg.sz3 { font-size: 32px; } .stage .floater.dmg.sz5 { font-size: 42px; }
