feat: US-020 - Scale TopBar and SubNav
This commit is contained in:
+2
-2
@@ -34,7 +34,7 @@
|
|||||||
"Typecheck passes"
|
"Typecheck passes"
|
||||||
],
|
],
|
||||||
"priority": 2,
|
"priority": 2,
|
||||||
"passes": false,
|
"passes": true,
|
||||||
"notes": "These are foundational tokens — many components reference --sidebar-width, --topbar-height, --subnav-height via CSS vars, so changes propagate automatically. Card.tsx changes affect every card and subsection header in the dashboard."
|
"notes": "These are foundational tokens — many components reference --sidebar-width, --topbar-height, --subnav-height via CSS vars, so changes propagate automatically. Card.tsx changes affect every card and subsection header in the dashboard."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -58,7 +58,7 @@
|
|||||||
"Verify in browser using dev-browser skill"
|
"Verify in browser using dev-browser skill"
|
||||||
],
|
],
|
||||||
"priority": 3,
|
"priority": 3,
|
||||||
"passes": false,
|
"passes": true,
|
||||||
"notes": "TopBar and SubNav heights are controlled by CSS vars updated in US-019. This story just scales the internal text and elements. The search bar min/max widths may also need slight adjustment — use judgement."
|
"notes": "TopBar and SubNav heights are controlled by CSS vars updated in US-019. This story just scales the internal text and elements. The search bar min/max widths may also need slight adjustment — use judgement."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -58,6 +58,28 @@
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## 2026-02-14 — US-019
|
||||||
|
- Updated --sidebar-width 272px→304px, --topbar-height 48px→56px, --subnav-height 36px→42px in index.css
|
||||||
|
- Updated .dashboard-grid gap from 12px→14px (mobile), 16px→20px (tablet/desktop)
|
||||||
|
- Updated Card.tsx: padding 20px→24px, CardHeader title fontSize 12px→13px, rightText fontSize 10px→11px, dot 8px→9px, marginBottom 16px→18px
|
||||||
|
- Files changed: src/index.css, src/components/Card.tsx
|
||||||
|
- **Learnings for future iterations:**
|
||||||
|
- CSS vars (--sidebar-width, --topbar-height, --subnav-height) propagate automatically to TopBar, Sidebar, DashboardLayout — no additional changes needed
|
||||||
|
- Card padding and CardHeader sizing affect every tile in the dashboard since all tiles use these components
|
||||||
|
- Dashboard grid gap is defined in 3 media query blocks in index.css: base (mobile), 768px (tablet), 1024px (desktop)
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2026-02-14 — US-020
|
||||||
|
- Scaled TopBar: brand text 13px→15px, 'Remote' label 11px→12px, search text 13px→14px, search height 42px→46px, Ctrl+K kbd 10px→11px, A.RECRUITER 12px→13px, session badge 11px→12px, skip-link 13px→14px, Home icon 18→20, Search icon 16→17
|
||||||
|
- Scaled SubNav: tab fontSize 13px→14px, minHeight 36px→42px
|
||||||
|
- Files changed: src/components/TopBar.tsx, src/components/SubNav.tsx
|
||||||
|
- **Learnings for future iterations:**
|
||||||
|
- TopBar has two brand spans: one for desktop (sm:inline) and one for mobile (sm:hidden) — both need fontSize updates
|
||||||
|
- TopBar session badge also has two spans: one for xs+ (xs:inline) and one for mobile (xs:hidden) — both need updating
|
||||||
|
- SubNav height is controlled by both the CSS var (--subnav-height) and the button minHeight — both should match
|
||||||
|
- SubNav uses sticky positioning with top: var(--topbar-height), so it automatically adjusts when topbar height changes
|
||||||
|
---
|
||||||
|
|
||||||
## 2026-02-14 — US-018
|
## 2026-02-14 — US-018
|
||||||
- Changed initial Phase state from 'boot' to 'pmr' in src/App.tsx (line 47)
|
- Changed initial Phase state from 'boot' to 'pmr' in src/App.tsx (line 47)
|
||||||
- Boot/ECG/login phases remain in code — only the default state changed
|
- Boot/ECG/login phases remain in code — only the default state changed
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ export function SubNav({ activeSection, onSectionClick }: SubNavProps) {
|
|||||||
aria-current={isActive ? 'true' : undefined}
|
aria-current={isActive ? 'true' : undefined}
|
||||||
style={{
|
style={{
|
||||||
position: 'relative',
|
position: 'relative',
|
||||||
fontSize: '13px',
|
fontSize: '14px',
|
||||||
fontWeight: 500,
|
fontWeight: 500,
|
||||||
color: isActive ? 'var(--accent)' : 'var(--text-secondary)',
|
color: isActive ? 'var(--accent)' : 'var(--text-secondary)',
|
||||||
background: 'none',
|
background: 'none',
|
||||||
@@ -68,7 +68,7 @@ export function SubNav({ activeSection, onSectionClick }: SubNavProps) {
|
|||||||
transition: 'color 200ms ease-out',
|
transition: 'color 200ms ease-out',
|
||||||
fontFamily: 'var(--font-ui)',
|
fontFamily: 'var(--font-ui)',
|
||||||
flexShrink: 0,
|
flexShrink: 0,
|
||||||
minHeight: '36px',
|
minHeight: '42px',
|
||||||
display: 'flex',
|
display: 'flex',
|
||||||
alignItems: 'center',
|
alignItems: 'center',
|
||||||
}}
|
}}
|
||||||
|
|||||||
+12
-12
@@ -40,7 +40,7 @@ export function TopBar({ onSearchClick }: TopBarProps) {
|
|||||||
textDecoration: 'none',
|
textDecoration: 'none',
|
||||||
zIndex: 101,
|
zIndex: 101,
|
||||||
borderRadius: '0 0 4px 0',
|
borderRadius: '0 0 4px 0',
|
||||||
fontSize: '13px',
|
fontSize: '14px',
|
||||||
fontWeight: 600,
|
fontWeight: 600,
|
||||||
}}
|
}}
|
||||||
onFocus={(e) => {
|
onFocus={(e) => {
|
||||||
@@ -55,14 +55,14 @@ export function TopBar({ onSearchClick }: TopBarProps) {
|
|||||||
{/* Brand */}
|
{/* Brand */}
|
||||||
<div className="flex items-center gap-2 shrink-0">
|
<div className="flex items-center gap-2 shrink-0">
|
||||||
<Home
|
<Home
|
||||||
size={18}
|
size={20}
|
||||||
style={{ color: 'var(--accent)' }}
|
style={{ color: 'var(--accent)' }}
|
||||||
aria-hidden="true"
|
aria-hidden="true"
|
||||||
/>
|
/>
|
||||||
<span
|
<span
|
||||||
className="font-ui hidden sm:inline"
|
className="font-ui hidden sm:inline"
|
||||||
style={{
|
style={{
|
||||||
fontSize: '13px',
|
fontSize: '15px',
|
||||||
fontWeight: 600,
|
fontWeight: 600,
|
||||||
color: 'var(--text-primary)',
|
color: 'var(--text-primary)',
|
||||||
}}
|
}}
|
||||||
@@ -72,7 +72,7 @@ export function TopBar({ onSearchClick }: TopBarProps) {
|
|||||||
<span
|
<span
|
||||||
className="font-ui sm:hidden"
|
className="font-ui sm:hidden"
|
||||||
style={{
|
style={{
|
||||||
fontSize: '13px',
|
fontSize: '15px',
|
||||||
fontWeight: 600,
|
fontWeight: 600,
|
||||||
color: 'var(--text-primary)',
|
color: 'var(--text-primary)',
|
||||||
}}
|
}}
|
||||||
@@ -82,7 +82,7 @@ export function TopBar({ onSearchClick }: TopBarProps) {
|
|||||||
<span
|
<span
|
||||||
className="hidden md:inline"
|
className="hidden md:inline"
|
||||||
style={{
|
style={{
|
||||||
fontSize: '11px',
|
fontSize: '12px',
|
||||||
fontWeight: 400,
|
fontWeight: 400,
|
||||||
color: 'var(--text-tertiary)',
|
color: 'var(--text-tertiary)',
|
||||||
marginLeft: '2px',
|
marginLeft: '2px',
|
||||||
@@ -100,7 +100,7 @@ export function TopBar({ onSearchClick }: TopBarProps) {
|
|||||||
style={{
|
style={{
|
||||||
maxWidth: '560px',
|
maxWidth: '560px',
|
||||||
minWidth: '400px',
|
minWidth: '400px',
|
||||||
height: '42px',
|
height: '46px',
|
||||||
border: '1.5px solid var(--border)',
|
border: '1.5px solid var(--border)',
|
||||||
borderRadius: 'var(--radius-card)',
|
borderRadius: 'var(--radius-card)',
|
||||||
padding: '0 14px',
|
padding: '0 14px',
|
||||||
@@ -126,14 +126,14 @@ export function TopBar({ onSearchClick }: TopBarProps) {
|
|||||||
aria-label="Search records, experience, skills. Press Control plus K"
|
aria-label="Search records, experience, skills. Press Control plus K"
|
||||||
>
|
>
|
||||||
<Search
|
<Search
|
||||||
size={16}
|
size={17}
|
||||||
style={{ color: 'var(--text-tertiary)', flexShrink: 0 }}
|
style={{ color: 'var(--text-tertiary)', flexShrink: 0 }}
|
||||||
aria-hidden="true"
|
aria-hidden="true"
|
||||||
/>
|
/>
|
||||||
<span
|
<span
|
||||||
className="flex-1 text-left"
|
className="flex-1 text-left"
|
||||||
style={{
|
style={{
|
||||||
fontSize: '13px',
|
fontSize: '14px',
|
||||||
color: 'var(--text-tertiary)',
|
color: 'var(--text-tertiary)',
|
||||||
fontFamily: 'var(--font-ui)',
|
fontFamily: 'var(--font-ui)',
|
||||||
}}
|
}}
|
||||||
@@ -143,7 +143,7 @@ export function TopBar({ onSearchClick }: TopBarProps) {
|
|||||||
<kbd
|
<kbd
|
||||||
className="font-geist"
|
className="font-geist"
|
||||||
style={{
|
style={{
|
||||||
fontSize: '10px',
|
fontSize: '11px',
|
||||||
color: 'var(--text-tertiary)',
|
color: 'var(--text-tertiary)',
|
||||||
background: 'var(--bg-dashboard)',
|
background: 'var(--bg-dashboard)',
|
||||||
border: '1px solid var(--border)',
|
border: '1px solid var(--border)',
|
||||||
@@ -164,7 +164,7 @@ export function TopBar({ onSearchClick }: TopBarProps) {
|
|||||||
<span
|
<span
|
||||||
className="hidden sm:inline"
|
className="hidden sm:inline"
|
||||||
style={{
|
style={{
|
||||||
fontSize: '12px',
|
fontSize: '13px',
|
||||||
color: 'var(--text-secondary)',
|
color: 'var(--text-secondary)',
|
||||||
fontFamily: 'var(--font-ui)',
|
fontFamily: 'var(--font-ui)',
|
||||||
}}
|
}}
|
||||||
@@ -174,7 +174,7 @@ export function TopBar({ onSearchClick }: TopBarProps) {
|
|||||||
<span
|
<span
|
||||||
className="font-geist hidden xs:inline"
|
className="font-geist hidden xs:inline"
|
||||||
style={{
|
style={{
|
||||||
fontSize: '11px',
|
fontSize: '12px',
|
||||||
color: 'var(--text-tertiary)',
|
color: 'var(--text-tertiary)',
|
||||||
background: 'var(--accent-light)',
|
background: 'var(--accent-light)',
|
||||||
padding: '3px 10px',
|
padding: '3px 10px',
|
||||||
@@ -187,7 +187,7 @@ export function TopBar({ onSearchClick }: TopBarProps) {
|
|||||||
<span
|
<span
|
||||||
className="font-geist xs:hidden"
|
className="font-geist xs:hidden"
|
||||||
style={{
|
style={{
|
||||||
fontSize: '11px',
|
fontSize: '12px',
|
||||||
color: 'var(--text-tertiary)',
|
color: 'var(--text-tertiary)',
|
||||||
background: 'var(--accent-light)',
|
background: 'var(--accent-light)',
|
||||||
padding: '3px 8px',
|
padding: '3px 8px',
|
||||||
|
|||||||
Reference in New Issue
Block a user