9889cb07d4
FALL entry changes: - Simplified to 2 pull attempts (was wiggle-based) - Each pull: quick down, slower up (purely vertical, no diagonal) - Normal flow (~80%): stuck -> pull_1 -> pause_1 -> pull_2 -> pause_2 -> fall -> land - Rare flow (~20%): stuck -> pull_1 -> pause_1 -> pull_2 -> stuck_permanent Permanent stuck behavior: - 20% chance on FALL entry (configurable via trulyStuckChance) - Blobbi hangs at top, won't fall automatically - User must drag and release to rescue - Resolves when drag ends (after any movement away from stuck position) Route change handling: - Cancels current entry immediately (no continuation) - Waits 1 second after new page appears - Then restarts entry animation for the new route Timing (total ~1470ms for normal fall): - stuck: 200ms (15% visible) - pull_1: 280ms (10% drop) - pause_1: 140ms - pull_2: 300ms (14% drop) - pause_2: 100ms - fall: 450ms - land: 200ms Files changed: - companion.types.ts: New phases (pulling_1/2, pause_1/2, stuck_permanent), isTrulyStuck flag - companionConfig.ts: New timing config for 2-pull system - animation.ts: Simplified vertical pull calculations - useBlobbiEntryAnimation.ts: New state machine with 20% stuck chance - useBlobbiCompanion.ts: Pass isDragging to entry hook - BlobbiCompanion.tsx: Updated config mapping