feat: US-008 - Align login card border radius and shadow with dashboard design system
This commit is contained in:
+1
-1
@@ -129,7 +129,7 @@
|
|||||||
"Verify in browser using dev-browser skill"
|
"Verify in browser using dev-browser skill"
|
||||||
],
|
],
|
||||||
"priority": 8,
|
"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."
|
"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."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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
|
- 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
|
- 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
|
||||||
|
---
|
||||||
|
|||||||
@@ -192,9 +192,9 @@ export function LoginScreen({ onComplete }: LoginScreenProps) {
|
|||||||
width: 'clamp(320px, 28vw, 480px)',
|
width: 'clamp(320px, 28vw, 480px)',
|
||||||
maxWidth: 'calc(100vw - 32px)',
|
maxWidth: 'calc(100vw - 32px)',
|
||||||
padding: 'clamp(24px, 2.5vw, 40px)',
|
padding: 'clamp(24px, 2.5vw, 40px)',
|
||||||
borderRadius: '12px',
|
borderRadius: 'var(--radius-card, 8px)',
|
||||||
border: '1px solid #E4EDEB',
|
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)',
|
backgroundColor: 'var(--surface, #FFFFFF)',
|
||||||
}}
|
}}
|
||||||
initial={{ opacity: 0, scale: 0.98 }}
|
initial={{ opacity: 0, scale: 0.98 }}
|
||||||
@@ -295,7 +295,7 @@ export function LoginScreen({ onComplete }: LoginScreenProps) {
|
|||||||
fontSize: 'clamp(13px, 1.1vw, 15px)',
|
fontSize: 'clamp(13px, 1.1vw, 15px)',
|
||||||
backgroundColor: activeField === 'username' ? 'var(--surface, #FFFFFF)' : 'var(--bg-dashboard, #F0F5F4)',
|
backgroundColor: activeField === 'username' ? 'var(--surface, #FFFFFF)' : 'var(--bg-dashboard, #F0F5F4)',
|
||||||
border: activeField === 'username' ? '1px solid var(--accent, #0D6E6E)' : '1px solid #E4EDEB',
|
border: activeField === 'username' ? '1px solid var(--accent, #0D6E6E)' : '1px solid #E4EDEB',
|
||||||
borderRadius: '4px',
|
borderRadius: 'var(--radius-sm, 6px)',
|
||||||
color: '#111827',
|
color: '#111827',
|
||||||
minHeight: '38px',
|
minHeight: '38px',
|
||||||
display: 'flex',
|
display: 'flex',
|
||||||
@@ -337,7 +337,7 @@ export function LoginScreen({ onComplete }: LoginScreenProps) {
|
|||||||
fontSize: 'clamp(13px, 1.1vw, 15px)',
|
fontSize: 'clamp(13px, 1.1vw, 15px)',
|
||||||
backgroundColor: activeField === 'password' ? 'var(--surface, #FFFFFF)' : 'var(--bg-dashboard, #F0F5F4)',
|
backgroundColor: activeField === 'password' ? 'var(--surface, #FFFFFF)' : 'var(--bg-dashboard, #F0F5F4)',
|
||||||
border: activeField === 'password' ? '1px solid var(--accent, #0D6E6E)' : '1px solid #E4EDEB',
|
border: activeField === 'password' ? '1px solid var(--accent, #0D6E6E)' : '1px solid #E4EDEB',
|
||||||
borderRadius: '4px',
|
borderRadius: 'var(--radius-sm, 6px)',
|
||||||
color: '#111827',
|
color: '#111827',
|
||||||
letterSpacing: '0.15em',
|
letterSpacing: '0.15em',
|
||||||
minHeight: '38px',
|
minHeight: '38px',
|
||||||
@@ -375,7 +375,7 @@ export function LoginScreen({ onComplete }: LoginScreenProps) {
|
|||||||
color: '#FFFFFF',
|
color: '#FFFFFF',
|
||||||
backgroundColor: buttonBg,
|
backgroundColor: buttonBg,
|
||||||
border: 'none',
|
border: 'none',
|
||||||
borderRadius: '4px',
|
borderRadius: 'var(--radius-sm, 6px)',
|
||||||
cursor: canLogin ? 'pointer' : 'default',
|
cursor: canLogin ? 'pointer' : 'default',
|
||||||
opacity: canLogin ? 1 : 0.6,
|
opacity: canLogin ? 1 : 0.6,
|
||||||
transition: 'background-color 150ms, opacity 300ms',
|
transition: 'background-color 150ms, opacity 300ms',
|
||||||
|
|||||||
Reference in New Issue
Block a user