diff --git a/ui/src/auth/LoginPage.module.css b/ui/src/auth/LoginPage.module.css new file mode 100644 index 00000000..ea6b8fd3 --- /dev/null +++ b/ui/src/auth/LoginPage.module.css @@ -0,0 +1,85 @@ +.page { + display: flex; + align-items: center; + justify-content: center; + min-height: 100vh; + background: var(--bg-base); +} + +.card { + width: 100%; + max-width: 400px; + padding: 32px; +} + +.loginForm { + display: flex; + flex-direction: column; + align-items: center; + font-family: var(--font-body); + width: 100%; +} + +.logo { + margin-bottom: 8px; + font-size: 24px; + font-weight: 700; + color: var(--text-primary); +} + +.subtitle { + font-size: 13px; + color: var(--text-muted); + margin: 0 0 24px; +} + +.error { + width: 100%; + margin-bottom: 16px; +} + +.socialSection { + display: flex; + flex-direction: column; + gap: 8px; + width: 100%; + margin-bottom: 20px; +} + +.divider { + display: flex; + align-items: center; + gap: 12px; + width: 100%; + margin-bottom: 20px; +} + +.dividerLine { + flex: 1; + height: 1px; + background: var(--border); +} + +.dividerText { + color: var(--text-muted); + font-size: 11px; + text-transform: uppercase; + letter-spacing: 0.5px; + font-weight: 500; +} + +.fields { + display: flex; + flex-direction: column; + gap: 14px; + width: 100%; +} + +.submitButton { + width: 100%; +} + +.ssoButton { + width: 100%; + justify-content: center; +} diff --git a/ui/src/auth/LoginPage.tsx b/ui/src/auth/LoginPage.tsx index 92819045..02a8b226 100644 --- a/ui/src/auth/LoginPage.tsx +++ b/ui/src/auth/LoginPage.tsx @@ -3,6 +3,7 @@ import { Navigate } from 'react-router'; import { useAuthStore } from './auth-store'; import { api } from '../api/client'; import { Card, Input, Button, Alert, FormField } from '@cameleer/design-system'; +import styles from './LoginPage.module.css'; interface OidcInfo { clientId: string; @@ -50,53 +51,75 @@ export function LoginPage() { }; return ( -