presentation/widgets/common/level_up_overlay library

Classes

LevelUpCelebration
One LevelUpEvent plus the extra presentation detail LevelUpOverlayController needs that LevelUpEvent itself doesn't carry: where its XP bar starts filling FROM. Every level after the first in a queue starts a fresh bar at 0 — only the very first queued event might start partway through (wherever the player's bar actually was right before the grantXp call that crossed it).
LevelUpOverlay
Renders LevelUpOverlayController's sequence over child — same in-tree-overlay pattern as NeonDialog/SceneTransitionOverlay (see CLAUDE.md's "Dialog pattern" note), so it also works over a full-screen Flame GameWidget.
LevelUpOverlayController
Pure state machine driving LevelUpOverlay — no Animation/ BuildContext here, so it's unit-testable without pumping a widget tree (same shape as SceneTransitionController, FEAT-58).

Enums

LevelUpPhase
Lifecycle of one queued level-up celebration: idle (no overlay) → xpFill (bar animates to full) → levelPop (level number bounces in) → rewardReveal (reward lines fade in) → back to idle once the whole queue is done, or xpFill again for the next queued level.