4c34aba66d
Part A — Restore BlobbiPage handleRest: - Revert handleRest to the original blobbi-specific implementation that operates on the page-selected companion (via selectedD/companionsByD), not profile.currentCompanion. This ensures the BlobbiActionsModal sleep/wake button targets the correct Blobbi. - The companion floating button continues to use useBlobbiSleepToggle independently (targets profile.currentCompanion). These are separate and correct targets for their respective contexts. - Restore imports: KIND_BLOBBI_STATE, updateBlobbiTags, applyBlobbiDecay, trackDailyMissionProgress, getStreakTagUpdates. Part B — Apply sleeping recipe overlay on BlobbiPage: - Keep useStatusReaction enabled during sleep (was disabled with enabled: !isSleeping). Body effects (dirty, stink) and extras (food icon) still resolve while sleeping. - Apply buildSleepingRecipe(rawStatusRecipe) when isSleeping is true, same pattern as BlobbiCompanionLayer. This overlays closed eyes, sleeping mouth, and Zzz while preserving compatible status effects. - Suppress actionOverride during sleep (no happy/excited flash). - Remove opacity-80 dim on sleeping Blobbi container (sleeping visuals are now expressed through the recipe, not opacity). Part D — Sleepy vs sleeping verified: - sleepyBlink (drowsy cycling animation) and sleepingClosed (permanent eye closure) are separate EyeRecipe fields that never overlap. - buildSleepingRecipe never sets sleepyBlink; status reactions never set sleepingClosed. The guard in applyVisualRecipe (line 894) skips sleepingClosed when sleepyBlink is present, but this case never occurs in practice.