Summary
Single source of truth for the visual design of the four auth screens. All screens are part of the edit/mobile-audit-ux-polish deep-rework restored at commit 841ec58. For wizard business logic (validation, state machine, tag ordering) see feat-registration-wizard-v2.
Screen Inventory
| Screen | File | Background | Scaffold |
|---|---|---|---|
| Welcome / landing | lib/features/onboarding/screens/welcome_screen.dart | Pure white (Colors.white) | Plain Scaffold |
| Login | lib/features/auth/screens/login_screen.dart | Animated coral/violet blobs | FlowAuthScaffold |
| Forgot password | lib/features/auth/screens/forgot_password_screen.dart | Animated coral/violet blobs | FlowAuthScaffold |
| Registration wizard | lib/features/auth/screens/registration_wizard_screen.dart | Animated coral/violet blobs | FlowAuthScaffold |
The welcome screen does NOT use
FlowAuthScaffold. It uses a plainScaffold(backgroundColor: Colors.white)intentionally — it is the marketing-first entry point, not an auth form.
2026-05-20 — Editorial pass + shared auth widgets
End-to-end visual rewrite of welcome / login / forgot. Two shared widgets extract the cross-screen contract so the flow reads as one product.
Shared widgets
lib/shared/widgets/auth_text_field.dart exports AuthTextField (+ .email / .password factories):
- Resting:
pureWhitefill, 1pxdividerLightborder,radius14. - Focused: coral 1.5px border + soft coral glow (12px blur, 0.12 alpha). Small-caps label flips coral.
- Cursor color coral; error text coral.
Identical visual contract to the crew wizard’s _BrandedTextField. Replace CustomTextField / EmailTextField / PasswordTextField in auth flows.
lib/shared/widgets/auth_primary_button.dart exports AuthPrimaryButton and AuthTextLink:
AuthPrimaryButton— 54pt coral filled,radius14, 16pt/w800/+0.2, built-in loading state.AuthTextLink— coral text-as-action with compact tap target.
Welcome screen — hierarchy inversion
| Element | Before | After |
|---|---|---|
| Primary CTA “Sign up” | OutlinedButton (coral border) — tertiary visual | Coral filled 54pt — primary |
| Apple / Google | Vertical stack, Apple = full-black inkBlack filled | Side-by-side outline pills, both white + dividerLight border + dark icon |
| Headline | 50px / letter-spacing -2.0 | 44px / -1.5 — matches event-details hero, avoids Inter descender overlap |
| ”Already have an account?” | Muted “Sign in” word alone — near-invisible | RichText: muted prefix + coral “Accedi” verb |
| Terms | Colors.black38 hardcoded | textMuted token, w500 |
Login screen
- Uses
AuthTextField.email/.password+AuthPrimaryButton. - CTA radius normalized
radiusFull→radius14. - “Don’t have an account? Sign up” follows the welcome pattern (RichText + GestureDetector).
Forgot password screen
- Uses
AuthTextField.email+AuthPrimaryButton. - Hardcoded Italian
'Torna al login'→l10n.backToLogin(new key, en/it/es). - Success state now shows the actual submitted email (was the literal label “Email”).
Out of scope
Registration wizard (1129 lines) left untouched — deserves a dedicated pass.
flutter analyze: 0 issues.
Welcome Screen — Design Spec (current, post 2026-05-20)
The pre-editorial spec that used to live here (OutlinedButton primary CTA, 50px headline, black-filled Apple button,
radiusFull) was superseded by the editorial pass above — one fact, one location. This section describes only the shipped design.
Layout: Column(crossAxisAlignment: CrossAxisAlignment.start) — left-aligned; only bottom text links centered.
Element order (top → bottom):
Spacer(flex: 2)FlowBrandMark(height: 48, color: AppTheme.electricCoral)— coral S-wave mark, no container, no wordmark- Headline
Text(l10n.welcomeHeadline)— 44px,w900,inkBlack,letterSpacing: -1.5(matches event-details hero) - Rotating tagline carousel —
AnimatedSwitcher+ShaderMaskwithbrandGradient(coral→violet), 17px w600, keyswelcomeCarouselLine1..4, 3 s rotation Spacer(flex: 3)- Primary CTA “Sign up” —
AuthPrimaryButton: coral filled, 54pt,radius14 - Apple / Google — side-by-side outline pills, white bg +
dividerLightborder + darkFaIcon - “Already have an account?” — RichText: muted prefix + coral “Accedi” verb
- Terms
Text— centered,textMutedtoken, w500
Animations: flutter_animate staggered entrance (brand mark fade+scale, headline fade+slideY, buttons staggered fade+slideY).
FlowAuthScaffold — Design Spec
Used by login, forgot-password, and wizard screens. Provides:
- Animated coral (#FF5E57) and violet (#8A2BE2) blob background
showWatermarkbool — rendersFlowBrandMarkin top-left whentrue- Scrollable safe-area content wrapper
The wizard passes showWatermark: provider.currentStep == WizardStep.welcome so the brand mark only appears on the first step.
Login Screen — Design Spec
FlowAuthScaffoldwith brand mark visible- Card-style form panel: white bg,
radius14, soft shadow - Fields: email (
TextFormField), password with show/hide toggle - Primary CTA: coral filled button, full width
- Divider row:
RowwithDivider+l10n.orContinueWithlabel - Social icon row: 3
IconButtons —MdiIcons.google,MdiIcons.apple,MdiIcons.facebook(frommaterial_design_icons_flutter)- Icons are monochrome
AppTheme.textSecondary— not brand-colored
- Icons are monochrome
- Footer links: “Forgot password” + “Don’t have an account? Register”
The 3-icon social row on login/forgot uses MDI icons (
material_design_icons_flutter). The full-width social buttons on the welcome screen use FontAwesome (font_awesome_flutter). Both packages are active deps.
Forgot Password Screen — Design Spec
FlowAuthScaffold+FlowBrandMarkvisible- Single email field, descriptive subtitle
- Coral CTA: “Send reset link”
- Back link to login
Registration Wizard — Design Spec
For full step definitions, validation logic, and state machine see feat-registration-wizard-v2.
Visual constants across all steps:
FlowAuthScaffold(showWatermark: provider.currentStep == WizardStep.welcome)- Progress bar: linear, coral, top of the form area
- Step transitions:
AnimatedSwitcherwithKeyedSubtree(key: ValueKey('${step.name}_$pageIndex')) - Error banner: coral background,
Icons.error_outline_rounded, above CTA - CTA spinner replaces button when
isValidating || isSubmitting
Tag chips (_tagChip):
- Selected:
electricCoralfill, white label,FontWeight.w600, no checkmark - Unselected: white fill,
textPrimarylabel,FontWeight.w400,dividerLightborder - Shape:
RoundedRectangleBorder(borderRadius: 20)— pill
Brand Tokens Used
| Token | Value | Used for |
|---|---|---|
AppTheme.electricCoral | #FF5E57 | Brand mark, selected chips, CTAs, error banners |
AppTheme.inkBlack | #18181B | Headlines, Apple button bg |
AppTheme.textSecondary | #52525B | Body text, MDI social icons |
AppTheme.textMuted | #9E9E9E | Captions, placeholders |
AppTheme.brandGradient | coral → violet | Carousel shimmer text |
AppTheme.radiusFull | pill | Social buttons |
AppTheme.radius14 | 14.0 | Form card corners |
Icon Packages
| Package | Used for | Import |
|---|---|---|
font_awesome_flutter | Full-width Apple/Google welcome buttons | FontAwesomeIcons.apple, .google |
material_design_icons_flutter | 3-icon social divider on login/forgot | MdiIcons.google, .apple, .facebook |
l10n Keys — Auth Screens
Keys specific to auth screens (all in app_en.arb, app_it.arb, app_es.arb):
welcomeHeadline welcomeCarouselLine1–4
continueWithApple continueWithGoogle
appleSignInComingSoon googleSignInComingSoon
signInWithEmail readTerms acceptPrivacy
orContinueWith continueWithFacebook socialSignInComingSoon
byUsingYouAccept welcomeRegister welcomeLogin
For wizard-specific keys (validation messages, step labels) see feat-registration-wizard-v2.
Related
feat-registration-wizard-v2 — wizard business logic, state, validation refactor-theme-tokens — full token reference localization — ARB workflow and key conventions