Skip to content

fix: resolve mobile UI issues — theme, layout, light mode contrast#251

Merged
ctkm-aelf merged 7 commits intomainfrom
fix/mobile-ui-issues
Apr 10, 2026
Merged

fix: resolve mobile UI issues — theme, layout, light mode contrast#251
ctkm-aelf merged 7 commits intomainfrom
fix/mobile-ui-issues

Conversation

@ctkm-aelf
Copy link
Copy Markdown
Collaborator

@ctkm-aelf ctkm-aelf commented Apr 10, 2026

Summary

Theme & Light Mode (#217, #218, #223)

Navigation & Animation

  • Date pill — Opaque c.cardSoft bg with border; BlurView kept for dark mode only
  • Detail sheet — Clean slide with withTiming, no bounce
  • Active tab — Fixed shrunk highlight after legal screens; tabWidth ref→state; legal routes map to account tab
  • Toast — Removed spring/bounce animations
  • Chat button — NyxFAB and NyxSheet commented out (not ready)

Login Page Redesign

  • Portal Mark logo (80px) in dark circular container
  • "NyxID" title + companion tagline
  • Email/password login enabled for all users (was dev-only)
  • Social login below divider (Google, GitHub, Apple)
  • Inline error banner below card (replaces toast) for all auth errors
  • SSO errors surfaced with user-friendly messages (incl. social_auth_registration_closed)
  • Loading state never blocks UI after errors
  • Debug logging for social auth flow in dev builds

Build

  • Bumped to build 34

Closes #217, closes #218, closes #223

Test plan

  • Light mode: system theme toggle works, all screens have proper contrast
  • Account screen: legal links visible above bottom nav
  • Activity: date pills readable in both themes, detail sheet slides without bounce
  • Legal screens: active tab stays on Account, highlight full width on return
  • Login: Portal Mark logo visible on dark circle, email login works
  • Login: Google/GitHub/Apple SSO shows inline error on failure (not toast)
  • Login: "Registration is currently invite-only" shown for new social users
  • Login: loading never blocks UI after error, inputs always editable
  • Toast animations have no bounce

🤖 Generated with Claude Code

ctkm-aelf and others added 7 commits April 10, 2026 12:12
#217, #218, #223)

- Invert system theme detection so null/undefined defaults to light instead
  of dark, and align default context value to light (#217)
- Add BOTTOM_NAV_CLEARANCE constant and apply 120px bottom padding on the
  Account screen so legal links clear the absolutely-positioned bottom nav (#223)
- Replace hardcoded dark hex/rgba colors with theme tokens across auth screen,
  loading state, history section header, activity notices, and status badge
  pills for proper light mode contrast (#218)
- Comment out NyxFAB and NyxSheet (chat not ready); make BottomNavV2 layout
  conditional on onFabPress prop

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add border (c.borderSoft) to history section header pill for visibility
  in light mode, use c.textSecondary for stronger text contrast
- Replace withSpring with withTiming on detail sheet open and snap-back
  animations for a clean slide with no bounce

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
tabWidth was a useRef that didn't trigger re-renders when onLayout
recalculated it after remount. Converted to useState so the highlight
width updates correctly.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…for legal screens

- Use c.cardSoft (opaque) instead of c.ghostBg (4% opacity) for history
  section header background
- Map TermsOfService/PrivacyPolicy routes to account tab so the
  highlight stays on Account when navigating to legal screens

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
onLayout sets tabWidth via setState (async), but computeOffset read
the stale value in the same cycle. Now computes offset directly from
the new width in onLayout, and added tabWidth to useEffect deps so
the spring re-runs after state updates.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
… light mode

BlurView's tint rendered a dark overlay on top of c.cardSoft, making
the pill unreadable in light mode. Replaced with plain View.
Also bumps build number to 34.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Dark mode uses BlurView with tint="dark" for the frosted effect.
Light mode uses a plain View since BlurView's tint overrides the
opaque background.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@ctkm-aelf ctkm-aelf marked this pull request as ready for review April 10, 2026 07:46
@ctkm-aelf ctkm-aelf merged commit 3c15e75 into main Apr 10, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant