4a84a782db
Tab switch attention: - Added TAB_SELECTORS for Radix UI tabs with data-state='active' - Tab changes trigger brief glance (1.2s) instead of full attention (3s) - Uses shorter glanceCooldown (0.8s) to allow noticing multiple tabs - Low priority so overlays can still interrupt - Skipped tooltips entirely (too noisy) Post-route attention: - After entry animation completes, Blobbi looks at main content - findMainContentPosition() tries common selectors: main, [role=main], .main-content, article - Falls back to center-top of viewport if no main content found - Uses postRouteDuration (2.5s) for how long to look - Small postRouteDelay (200ms) before triggering - Low priority so modals can immediately interrupt Improved upward pupil movement: - Asymmetric vertical scaling in BlobbiBabyVisual and BlobbiAdultVisual - Looking up: full range (4px/4.5px for baby/adult) - Looking down: reduced range (2.4px/2.7px, 0.6x) to avoid droopy look - Updated calculateEyeOffset() with asymmetric maxDistanceY: - 350px for looking up (easier to reach full upward gaze) - 500px for looking down (normal distance) - Updated generateRandomScreenGaze() to favor upward looks (-0.6 to +0.5) New config options: - attention.glanceDuration: 1200ms for brief tab glances - attention.glanceCooldown: 800ms between glances - attention.postRouteDuration: 2500ms for post-route attention - attention.postRouteDelay: 200ms delay before post-route attention Files changed: - companion.types.ts: New config options - companionConfig.ts: New timing values - companionMachine.ts: Asymmetric calculateEyeOffset - useBlobbiAttention.ts: Tab detection, overlay/tab separation - useBlobbiCompanion.ts: Post-route attention trigger - useBlobbiCompanionGaze.ts: Improved random gaze range - BlobbiBabyVisual.tsx: Asymmetric vertical eye movement - BlobbiAdultVisual.tsx: Asymmetric vertical eye movement