From 5533cded822c84f56c121fd34e9fd3f14dbc6050 Mon Sep 17 00:00:00 2001 From: A Charlwood Date: Fri, 13 Feb 2026 00:35:43 +0000 Subject: [PATCH] Task 5: Rebuild ClinicalSidebar with CV-friendly labels and premium font MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Replace clinical jargon labels with CV-friendly terms: Experience, Skills, Achievements, Projects, Education, Contact - Replace all font-inter references with font-ui (Elvaro Grotesque) - Fix Tailwind opacity syntax: bg-white/12 → bg-white/[0.12] etc. - Add right edge border (border-r border-[#334155]) for sidebar depth - Add focus-visible ring styles on all nav buttons - Set explicit h-[44px] and font-[14px] per design spec - Add border-transparent on inactive items to prevent layout shift - Update footer text color to #64748B per spec - Update MobileBottomNav labels to match sidebar convention - Update PMRInterface viewLabels to CV-friendly names Co-Authored-By: Claude Opus 4.6 --- src/components/ClinicalSidebar.tsx | 76 +++++++++++++++++++----------- src/components/MobileBottomNav.tsx | 14 +++--- src/components/PMRInterface.tsx | 14 +++--- 3 files changed, 62 insertions(+), 42 deletions(-) diff --git a/src/components/ClinicalSidebar.tsx b/src/components/ClinicalSidebar.tsx index 6e04f75..ba97481 100644 --- a/src/components/ClinicalSidebar.tsx +++ b/src/components/ClinicalSidebar.tsx @@ -27,12 +27,12 @@ interface ClinicalSidebarProps { const navItems: NavItem[] = [ { id: 'summary', label: 'Summary', icon: }, - { id: 'consultations', label: 'Consultations', icon: }, - { id: 'medications', label: 'Medications', icon: }, - { id: 'problems', label: 'Problems', icon: }, - { id: 'investigations', label: 'Investigations', icon: }, - { id: 'documents', label: 'Documents', icon: }, - { id: 'referrals', label: 'Referrals', icon: }, + { id: 'consultations', label: 'Experience', icon: }, + { id: 'medications', label: 'Skills', icon: }, + { id: 'problems', label: 'Achievements', icon: }, + { id: 'investigations', label: 'Projects', icon: }, + { id: 'documents', label: 'Education', icon: }, + { id: 'referrals', label: 'Contact', icon: }, ] function getCurrentTime(): string { @@ -94,6 +94,7 @@ export function ClinicalSidebar({ activeView, onViewChange, isTablet = false }: } }, [handleNavClick]) + // Update clock every minute useEffect(() => { const interval = setInterval(() => { setCurrentTime(getCurrentTime()) @@ -101,6 +102,7 @@ export function ClinicalSidebar({ activeView, onViewChange, isTablet = false }: return () => clearInterval(interval) }, []) + // Hash routing useEffect(() => { const handleHashChange = () => { const hash = window.location.hash.slice(1) as ViewId @@ -114,6 +116,7 @@ export function ClinicalSidebar({ activeView, onViewChange, isTablet = false }: return () => window.removeEventListener('hashchange', handleHashChange) }, [onViewChange]) + // Alt+1-7 keyboard shortcuts and "/" for search useEffect(() => { const handleKeyDown = (e: KeyboardEvent) => { if (e.altKey && e.key >= '1' && e.key <= '7') { @@ -136,6 +139,7 @@ export function ClinicalSidebar({ activeView, onViewChange, isTablet = false }: return () => window.removeEventListener('keydown', handleKeyDown) }, [onViewChange, isSearchFocused]) + // Set focus-after-login ref to first nav button useEffect(() => { if (navButtonRefs.current[0]) { ;(focusAfterLoginRef as React.MutableRefObject).current = navButtonRefs.current[0] @@ -163,19 +167,22 @@ export function ClinicalSidebar({ activeView, onViewChange, isTablet = false }: ) }, [searchQuery]) + // ── Tablet: 56px icon-only sidebar ── if (isTablet) { return (