17 KiB
Phase 5 Audit Report: Theme Consistency & Mobile Responsiveness
Executive Summary
This audit covers all new components implemented in Phases 2-4 of the League Pages Enhancement plan. The audit focused on two key areas:
- Theme Consistency: Ensuring all components use the "Modern Precision" theme with proper color palette, UI primitives, spacing, and typography
- Mobile Responsiveness: Ensuring all components work well on mobile breakpoints with appropriate touch targets and responsive layouts
Theme Consistency Issues
1. NextRaceCountdownWidget (apps/website/components/leagues/NextRaceCountdownWidget.tsx)
Issues Found:
-
Hardcoded Colors: Uses hardcoded color values instead of theme variables
- Line 77:
background: 'linear-gradient(to bottom right, #262626, rgba(38, 38, 38, 0.8))' - Line 78:
borderColor: 'rgba(59, 130, 246, 0.3)' - Line 88:
background: 'linear-gradient(to bottom left, rgba(59, 130, 246, 0.2), transparent)' - Line 112:
color="var(--text-gray-500)"(should use semantic intent) - Line 120:
color="var(--text-gray-500)"(should use semantic intent) - Line 132:
color="text-gray-500"(should use semantic variant) - Line 141:
color="text-primary-blue"(should use semantic intent) - Line 144:
color="text-gray-500"(should use semantic variant) - Line 146:
color="text-gray-600"(should use semantic variant) - Line 148:
color="text-primary-blue"(should use semantic intent) - Line 151:
color="text-gray-500"(should use semantic variant) - Line 155:
color="text-primary-blue"(should use semantic intent) - Line 158:
color="text-gray-500"(should use semantic variant) - Line 162:
color="text-primary-blue"(should use semantic intent) - Line 165:
color="text-gray-500"(should use semantic variant)
- Line 77:
-
Inconsistent Color Usage: Mixes semantic variants (
text-white) with hardcoded colors (text-gray-400,text-gray-500,text-gray-600) -
Missing Theme Variables: Uses custom CSS variables like
--text-gray-500instead of theme variables
Theme Compliance Score: 4/10
2. SeasonProgressWidget (apps/website/components/leagues/SeasonProgressWidget.tsx)
Issues Found:
-
Hardcoded Colors: Uses hardcoded color values instead of theme variables
- Line 27:
background: 'linear-gradient(to bottom right, #262626, rgba(38, 38, 38, 0.8))' - Line 28:
borderColor: 'rgba(34, 197, 94, 0.3)' - Line 43:
color="var(--performance-green)"(should use semantic intent) - Line 46:
color="text-white"(should use semantic variant) - Line 49:
color="text-gray-400"(should use semantic variant) - Line 63:
color="text-gray-500"(should use semantic variant) - Line 66:
color="text-performance-green"(should use semantic intent) - Line 80:
color="text-performance-green"(should use semantic intent)
- Line 27:
-
Inconsistent Color Usage: Mixes semantic variants with hardcoded colors
-
Missing Theme Variables: Uses custom CSS variables like
--performance-greeninstead of theme variables
Theme Compliance Score: 5/10
3. AdminQuickViewWidgets (apps/website/components/leagues/AdminQuickViewWidgets.tsx)
Issues Found:
-
Hardcoded Colors: Uses hardcoded color values instead of theme variables
- Line 39:
background: 'linear-gradient(to bottom right, #262626, rgba(38, 38, 38, 0.8))' - Line 40:
borderColor: 'rgba(59, 130, 246, 0.3)' - Line 54:
color="var(--primary-blue)"(should use semantic intent) - Line 57:
color="text-white"(should use semantic variant) - Line 60:
color="text-primary-blue"(should use semantic intent) - Line 86:
background: 'linear-gradient(to bottom right, #262626, rgba(38, 38, 38, 0.8))' - Line 87:
borderColor: 'rgba(239, 68, 68, 0.3)' - Line 101:
color="var(--error-red)"(should use semantic intent) - Line 104:
color="text-white"(should use semantic variant) - Line 107:
color="text-error-red"(should use semantic intent) - Line 125:
color="text-gray-500"(should use semantic variant) - Line 140:
background: 'linear-gradient(to bottom right, #262626, rgba(38, 38, 38, 0.8))' - Line 141:
borderColor: 'rgba(251, 191, 36, 0.3)' - Line 155:
color="var(--warning-amber)"(should use semantic intent) - Line 158:
color="text-white"(should use semantic variant) - Line 161:
color="text-warning-amber"(should use semantic intent)
- Line 39:
-
Inconsistent Color Usage: Mixes semantic variants with hardcoded colors
-
Missing Theme Variables: Uses custom CSS variables like
--primary-blue,--error-red,--warning-amberinstead of theme variables
Theme Compliance Score: 4/10
4. EnhancedLeagueSchedulePanel (apps/website/components/leagues/EnhancedLeagueSchedulePanel.tsx)
Issues Found:
-
Hardcoded Colors: Uses hardcoded color values instead of theme variables
- Line 119:
borderColor="zinc-800"(should use theme variable) - Line 119:
bg="zinc-900/30"(should use theme variable) - Line 120:
color="text-zinc-500"(should use semantic variant) - Line 132:
borderColor="border-outline-steel"(should use theme variable) - Line 139:
bg="bg-surface-charcoal"(should use theme variable) - Line 141:
borderColor="border-outline-steel"(should use theme variable) - Line 146:
color="text-primary-blue"(should use semantic intent) - Line 147:
color="text-white"(should use semantic variant) - Line 154:
color="text-zinc-400"(should use semantic variant) - Line 165:
borderColor="border-outline-steel"(should use theme variable) - Line 167:
bg="bg-base-black"(should use theme variable) - Line 174:
color="text-white"(should use semantic variant) - Line 180:
color="text-zinc-400"(should use semantic variant) - Line 184:
color="text-zinc-500"(should use semantic variant) - Line 189:
color="text-zinc-500"(should use semantic variant) - Line 195:
color="text-zinc-500"(should use semantic variant) - Line 196:
color="text-zinc-400"(should use semantic variant)
- Line 119:
-
Inconsistent Color Usage: Mixes semantic variants with hardcoded colors
-
Missing Theme Variables: Uses custom CSS variables like
--border-outline-steel,--bg-surface-charcoal,--bg-base-blackinstead of theme variables
Theme Compliance Score: 3/10
5. RaceDetailModal (apps/website/components/leagues/RaceDetailModal.tsx)
Issues Found:
-
Hardcoded Colors: Uses hardcoded color values instead of theme variables
- Line 75:
bg="bg-base-black/80"(should use theme variable) - Line 88:
borderColor="border-outline-steel"(should use theme variable) - Line 95:
bg="bg-surface-charcoal"(should use theme variable) - Line 97:
borderColor="border-outline-steel"(should use theme variable) - Line 100:
color="text-white"(should use semantic variant) - Line 119:
borderColor="border-outline-steel"(should use theme variable) - Line 120:
color="text-gray-500"(should use semantic variant) - Line 125:
color="text-primary-blue"(should use semantic intent) - Line 126:
color="text-white"(should use semantic variant) - Line 131:
color="text-primary-blue"(should use semantic intent) - Line 132:
color="text-white"(should use semantic variant) - Line 137:
color="text-primary-blue"(should use semantic intent) - Line 138:
color="text-white"(should use semantic variant) - Line 144:
color="text-primary-blue"(should use semantic intent) - Line 145:
color="text-white"(should use semantic variant) - Line 154:
borderColor="border-outline-steel"(should use theme variable) - Line 155:
color="text-gray-500"(should use semantic variant) - Line 160:
color="text-primary-blue"(should use semantic intent) - Line 164:
color="text-primary-blue"(should use semantic intent) - Line 168:
color="text-primary-blue"(should use semantic intent) - Line 172:
color="text-primary-blue"(should use semantic intent) - Line 176:
color="text-primary-blue"(should use semantic intent) - Line 183:
borderColor="border-outline-steel"(should use theme variable) - Line 184:
color="text-gray-500"(should use semantic variant) - Line 196:
borderColor="border-outline-steel"(should use theme variable) - Line 197:
color="text-gray-500"(should use semantic variant) - Line 201:
color="text-primary-blue"(should use semantic intent)
- Line 75:
-
Inconsistent Color Usage: Mixes semantic variants with hardcoded colors
-
Missing Theme Variables: Uses custom CSS variables like
--border-outline-steel,--bg-base-black,--bg-surface-charcoalinstead of theme variables
Theme Compliance Score: 3/10
6. LeagueCard (apps/website/ui/LeagueCard.tsx)
Issues Found:
-
Hardcoded Colors: Uses hardcoded color values instead of theme variables
- Line 77:
style={{ opacity: 0.4, filter: 'grayscale(0.2)' }}(should use theme-aware filters) - Line 82:
style={{ background: 'linear-gradient(to top, var(--ui-color-bg-base), transparent)' }}(uses theme variable correctly) - Line 99:
bg="var(--ui-color-bg-surface)"(uses theme variable correctly) - Line 102:
borderColor="var(--ui-color-border-default)"(uses theme variable correctly) - Line 155:
bg="var(--ui-color-bg-surface-muted)"(uses theme variable correctly) - Line 158:
bg="var(--ui-color-intent-primary)"(uses theme variable correctly) - Line 161:
boxShadow: '0 0 8px var(--ui-color-intent-primary)44'(uses theme variable correctly) - Line 192:
style={{ borderTop: '1px solid var(--ui-color-border-muted)' }}(uses theme variable correctly) - Line 229:
bg="var(--ui-color-bg-surface-muted)"(uses theme variable correctly) - Line 232:
bg={intentColors[intent]}(uses theme variable correctly) - Line 235:
boxShadow: '0 0 8px ${intentColors[intent]}44'(uses theme variable correctly) - Line 252:
style={{ borderTop: '1px solid var(--ui-color-border-muted)' }}(uses theme variable correctly)
- Line 77:
-
Inconsistent Color Usage: Uses theme variables correctly in most places, but has hardcoded opacity and filter on line 77
-
Theme Variables: Uses theme variables correctly in most places
Theme Compliance Score: 8/10
7. Featured Leagues Section (apps/website/templates/LeaguesTemplate.tsx)
Issues Found:
-
Hardcoded Colors: Uses hardcoded color values instead of theme variables
- Line 106:
borderColor="var(--ui-color-intent-warning-muted)"(uses theme variable correctly)
- Line 106:
-
Theme Variables: Uses theme variables correctly
Theme Compliance Score: 9/10
Mobile Responsiveness Issues
1. NextRaceCountdownWidget
Issues Found:
-
Countdown Layout: Uses fixed-width elements that may overflow on small screens
- The countdown timer uses multiple
Stackcomponents with fixed gap values - On very small screens (< 320px), the countdown may wrap or overflow
- The countdown timer uses multiple
-
Button Layout: Single button with
flex: 1should be fine, but could benefit from responsive sizing -
Text Sizes: Uses
size="2xl"for countdown which might be too large on mobile
Mobile Responsiveness Score: 7/10
2. SeasonProgressWidget
Issues Found:
-
Progress Bar: Uses
size="lg"which may be too large on mobile- The progress bar should be responsive to screen size
-
Text Sizes: Uses
size="2xl"for percentage which might be too large on mobile
Mobile Responsiveness Score: 8/10
3. AdminQuickViewWidgets
Issues Found:
-
Widget Layout: Uses fixed-width elements that may overflow on small screens
- The wallet balance display uses
size="2xl"which might be too large on mobile - The stewarding queue display uses
size="2xl"which might be too large on mobile
- The wallet balance display uses
-
Button Layout: Uses
flex: 1which should be fine, but could benefit from responsive sizing
Mobile Responsiveness Score: 7/10
4. EnhancedLeagueSchedulePanel
Issues Found:
-
Action Buttons: Uses
size="sm"for buttons which may be too small on mobile- Touch targets should be at least 44x44px for mobile accessibility
-
Race Info Layout: Uses fixed-width elements that may overflow on small screens
- The race info section uses
flex: 1which should be fine, but could benefit from responsive sizing
- The race info section uses
-
Month Header: Uses
p={4}which may be too small on mobile
Mobile Responsiveness Score: 6/10
5. RaceDetailModal
Issues Found:
-
Modal Layout: Uses
maxWidth="lg"which may be too large on mobile- The modal should be responsive to screen size
-
Action Buttons: Uses
size="md"for buttons which may be too small on mobile- Touch targets should be at least 44x44px for mobile accessibility
-
Content Layout: Uses
p={4}which may be too small on mobile
Mobile Responsiveness Score: 7/10
6. LeagueCard
Issues Found:
-
Card Layout: Uses fixed-height elements that may overflow on small screens
- The cover image uses
height="8rem"which may be too large on mobile - The logo uses
width="4rem"andheight="4rem"which may be too large on mobile
- The cover image uses
-
Button Layout: Uses
size="xs"for buttons which may be too small on mobile- Touch targets should be at least 44x44px for mobile accessibility
-
Text Sizes: Uses
size="xs"for some text which may be too small on mobile
Mobile Responsiveness Score: 6/10
7. Featured Leagues Section
Issues Found:
-
Grid Layout: Uses
columns={{ base: 1, md: 2 }}which is responsive- This is properly implemented for mobile responsiveness
-
Surface Padding: Uses
padding={6}which may be too small on mobile
Mobile Responsiveness Score: 8/10
Summary of Issues
Theme Consistency Issues (Total: 48 issues)
| Component | Issues | Theme Compliance Score |
|---|---|---|
| NextRaceCountdownWidget | 18 issues | 4/10 |
| SeasonProgressWidget | 8 issues | 5/10 |
| AdminQuickViewWidgets | 16 issues | 4/10 |
| EnhancedLeagueSchedulePanel | 18 issues | 3/10 |
| RaceDetailModal | 22 issues | 3/10 |
| LeagueCard | 1 issue | 8/10 |
| Featured Leagues Section | 1 issue | 9/10 |
Mobile Responsiveness Issues (Total: 15 issues)
| Component | Issues | Mobile Responsiveness Score |
|---|---|---|
| NextRaceCountdownWidget | 3 issues | 7/10 |
| SeasonProgressWidget | 2 issues | 8/10 |
| AdminQuickViewWidgets | 2 issues | 7/10 |
| EnhancedLeagueSchedulePanel | 3 issues | 6/10 |
| RaceDetailModal | 3 issues | 7/10 |
| LeagueCard | 3 issues | 6/10 |
| Featured Leagues Section | 1 issue | 8/10 |
Recommendations
High Priority (Theme Consistency)
-
Replace all hardcoded colors with theme variables:
- Use
var(--ui-color-bg-surface)instead of#262626 - Use
var(--ui-color-intent-primary)instead ofrgba(59, 130, 246, 0.3) - Use semantic variants (
variant="high",variant="med",variant="low") instead of hardcoded colors
- Use
-
Use semantic intent props for icons:
- Use
intent="primary"instead ofcolor="text-primary-blue" - Use
intent="success"instead ofcolor="text-performance-green" - Use
intent="warning"instead ofcolor="text-warning-amber"
- Use
-
Remove custom CSS variables:
- Replace
--text-gray-500,--performance-green,--primary-blue, etc. with theme variables
- Replace
High Priority (Mobile Responsiveness)
-
Increase touch target sizes:
- Ensure all buttons have minimum 44x44px touch targets
- Use
size="md"or larger for buttons on mobile
-
Make layouts responsive:
- Use responsive spacing (e.g.,
padding={{ base: 2, md: 4 }}) - Use responsive text sizes (e.g.,
size={{ base: 'sm', md: 'md' }})
- Use responsive spacing (e.g.,
-
Ensure content doesn't overflow:
- Use
flexWrap="wrap"where appropriate - Use
maxWidthconstraints on mobile
- Use
Medium Priority
-
Standardize gradient backgrounds:
- Use theme-aware gradients instead of hardcoded colors
- Consider using
Surfacecomponent variants for consistent backgrounds
-
Improve spacing consistency:
- Use theme spacing scale consistently
- Ensure proper vertical rhythm
Next Steps
- Apply fixes to all components with theme consistency issues
- Apply fixes to all components with mobile responsiveness issues
- Test all components on various screen sizes
- Update documentation to reflect theme usage guidelines
- Consider creating a theme compliance checklist for future development
Files to Update
apps/website/components/leagues/NextRaceCountdownWidget.tsxapps/website/components/leagues/SeasonProgressWidget.tsxapps/website/components/leagues/AdminQuickViewWidgets.tsxapps/website/components/leagues/EnhancedLeagueSchedulePanel.tsxapps/website/components/leagues/RaceDetailModal.tsxapps/website/ui/LeagueCard.tsx(minor fixes)apps/website/templates/LeaguesTemplate.tsx(minor fixes)
Audit Date
2026-01-21
Auditor
Roo (Senior Developer Mode)