Widget: - Fetches /api/fitness/entries/totals and /api/fitness/goals/for-date directly from gateway using shared session cookie - Falls back to cached data in App Group UserDefaults if network fails - Refreshes every 15 minutes via WidgetKit timeline - Each phone shows the logged-in user's own data Auth sharing: - AuthManager.syncCookieToWidget() copies the session cookie to App Group UserDefaults on login and auth check - Widget reads cookie and makes authenticated API calls - Logout clears widget auth + cached data Data in App Group (group.com.quadjourney.platform): - widget_sessionCookie: auth token for API calls - widget_totalCalories: cached fallback - widget_calorieGoal: cached fallback - widget_lastUpdate: cache timestamp HomeViewModel also writes cache on each loadTodayData() as fallback. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>