feat: US-008 - Align login card border radius and shadow with dashboard design system

This commit is contained in:
2026-02-15 14:26:53 +00:00
parent 274188b6aa
commit fc1581a9ff
3 changed files with 18 additions and 6 deletions
+1 -1
View File
@@ -129,7 +129,7 @@
"Verify in browser using dev-browser skill"
],
"priority": 8,
"passes": false,
"passes": true,
"notes": "Check index.css for whether --radius-card and --radius-sm exist as CSS custom properties. If not, use the hardcoded values (8px and 6px) directly. The card shadow is currently set via inline style — update to the shadow-lg value. The login card borderRadius is in the card's inline style object."
},
{
+12
View File
@@ -144,3 +144,15 @@
- Framer Motion's `animate` prop interpolates from the element's current computed style, so the exit blur animation doesn't need the starting value explicitly
- Only the initial style needs the constant; the exit target (`blur(0px)`) is always 0
---
## 2026-02-15 - US-008: Align login card border radius and shadow with dashboard design system
- Changed card borderRadius from `12px` to `var(--radius-card, 8px)`
- Changed card boxShadow from `shadow-sm` (`0 1px 2px rgba(26,43,42,0.05)`) to `var(--shadow-lg, 0 8px 32px rgba(26,43,42,0.12))`
- Changed username input, password input, and button borderRadius from `4px` to `var(--radius-sm, 6px)`
- All values use CSS custom property references with fallbacks
- Files changed: `src/components/LoginScreen.tsx`
- **Learnings for future iterations:**
- CSS tokens `--radius-card`, `--radius-sm`, `--shadow-sm`, `--shadow-md`, `--shadow-lg` are all defined in `index.css` `:root` — use `var()` references with fallback values
- The button has 18-space indentation vs 20-space for inputs — `replace_all` may not catch all instances if matching on indentation
- The spinner (`borderRadius: '50%'`) and status indicator dot should NOT be changed — they're circles, not card elements
---
+5 -5
View File
@@ -192,9 +192,9 @@ export function LoginScreen({ onComplete }: LoginScreenProps) {
width: 'clamp(320px, 28vw, 480px)',
maxWidth: 'calc(100vw - 32px)',
padding: 'clamp(24px, 2.5vw, 40px)',
borderRadius: '12px',
borderRadius: 'var(--radius-card, 8px)',
border: '1px solid #E4EDEB',
boxShadow: '0 1px 2px rgba(26,43,42,0.05)',
boxShadow: 'var(--shadow-lg, 0 8px 32px rgba(26,43,42,0.12))',
backgroundColor: 'var(--surface, #FFFFFF)',
}}
initial={{ opacity: 0, scale: 0.98 }}
@@ -295,7 +295,7 @@ export function LoginScreen({ onComplete }: LoginScreenProps) {
fontSize: 'clamp(13px, 1.1vw, 15px)',
backgroundColor: activeField === 'username' ? 'var(--surface, #FFFFFF)' : 'var(--bg-dashboard, #F0F5F4)',
border: activeField === 'username' ? '1px solid var(--accent, #0D6E6E)' : '1px solid #E4EDEB',
borderRadius: '4px',
borderRadius: 'var(--radius-sm, 6px)',
color: '#111827',
minHeight: '38px',
display: 'flex',
@@ -337,7 +337,7 @@ export function LoginScreen({ onComplete }: LoginScreenProps) {
fontSize: 'clamp(13px, 1.1vw, 15px)',
backgroundColor: activeField === 'password' ? 'var(--surface, #FFFFFF)' : 'var(--bg-dashboard, #F0F5F4)',
border: activeField === 'password' ? '1px solid var(--accent, #0D6E6E)' : '1px solid #E4EDEB',
borderRadius: '4px',
borderRadius: 'var(--radius-sm, 6px)',
color: '#111827',
letterSpacing: '0.15em',
minHeight: '38px',
@@ -375,7 +375,7 @@ export function LoginScreen({ onComplete }: LoginScreenProps) {
color: '#FFFFFF',
backgroundColor: buttonBg,
border: 'none',
borderRadius: '4px',
borderRadius: 'var(--radius-sm, 6px)',
cursor: canLogin ? 'pointer' : 'default',
opacity: canLogin ? 1 : 0.6,
transition: 'background-color 150ms, opacity 300ms',