feat(auth): redesign auth UI to match Dart original

- Full-bleed bg_login.png background outside 500px MobileShell
- Facebook landing: logo + Facebook pill button + "Other Sign In Options" link
- Replace centered Dialog with true bottom sheet (drag handle, top radius 28px)
- Email panel: internal login/register toggle, no separate route
- Pink gradient primary button (#f96ADE → #f657A0)
- Pill input fields (46px, white, radius 24, pink 10% shadow)
- Pink circular checkbox + bold Privacy/Terms rich text (visual only, non-blocking)
- Floating 40x40 white back button (top:20/left:20)
- Wire AuthPanelModeChanged dispatch for panel switching
- New design tokens (--color-auth-*, --auth-*, --radius-bottom-sheet)
- New generic BottomSheet component
- Copy ic-logo-login.png (+@2x, +@3x) from Dart assets

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2026-06-10 14:27:06 +08:00
parent 4e27b4c512
commit 90bb711a45
30 changed files with 967 additions and 335 deletions
@@ -1,22 +1,37 @@
/* 原始 Dart: lib/ui/auth/widgets/auth_primary_button.dart
*
* 视觉规格(与 Dart 对齐):
* - 46px 高
* - 粉渐变(#f96ADE → #f657A0,左→右)
* - 半径 24
* - 20% 红阴影(#d00c41 @ 20%
* - 文字 16px bold 白色
*/
.button {
display: inline-flex;
align-items: center;
justify-content: center;
gap: var(--spacing-sm);
width: 100%;
height: var(--button-height);
height: var(--auth-field-height);
padding: 0 var(--spacing-lg);
border: none;
border-radius: var(--radius-full);
font-size: var(--font-size-md);
font-weight: 600;
color: var(--color-text-primary);
border-radius: var(--radius-xxxl);
background: linear-gradient(
90deg,
var(--color-auth-primary-gradient-start),
var(--color-auth-primary-gradient-end)
);
box-shadow: 0 3px 5px var(--color-auth-primary-button-shadow);
color: #ffffff;
font-size: var(--font-size-lg);
font-weight: 700;
cursor: pointer;
transition: opacity 0.15s ease, transform 0.05s ease;
transition: filter 0.15s ease, transform 0.05s ease, opacity 0.15s ease;
}
.button:disabled {
opacity: 0.6;
opacity: 0.7;
cursor: not-allowed;
}
@@ -24,25 +39,18 @@
transform: scale(0.98);
}
.accent {
background: linear-gradient(
90deg,
var(--color-accent),
var(--color-facebook-button-gradient-end)
);
}
.primary {
background: var(--color-primary);
.label {
flex: 1 1 auto;
text-align: center;
}
.spinner {
display: inline-block;
width: 16px;
height: 16px;
width: 18px;
height: 18px;
border-width: 2px;
border-style: solid;
border-color: currentColor transparent transparent transparent;
border-color: #ffffff transparent transparent transparent;
border-radius: 50%;
animation: spin 0.8s linear infinite;
}