Files
chorus-services-website/theme/chorusTheme.ts
anthonyrawlins 7774d7ec98 feat(brand-system): Implement comprehensive CHORUS brand system with typography and design tokens
This commit implements a complete brand system overhaul including:

TYPOGRAPHY SYSTEM:
- Add Exo font family (Thin, Light, Regular, ExtraLight) as primary brand font
- Implement SF Pro Display/Text hierarchy for UI components
- Create comprehensive Typography component with all brand variants
- Update all components to use new typography tokens

DESIGN TOKEN SYSTEM:
- Create complete design token system in theme/designTokens.ts
- Define Carbon Black (#1a1a1a), Walnut Brown (#8B4513), Brushed Aluminum (#A8A8A8) palette
- Implement CSS custom properties for consistent theming
- Update Ant Design theme integration

COMPONENT UPDATES:
- Enhance Hero section with Exo Thin typography and improved layout
- Update navigation with SF Pro font hierarchy
- Redesign Button component with new variants and accessibility
- Apply brand colors and typography across all showcase sections
- Improve Footer with consistent brand application

PERFORMANCE & ACCESSIBILITY:
- Self-host Exo fonts for optimal loading performance
- Implement proper font-display strategies
- Add comprehensive accessibility audit documentation
- Include responsive testing verification

DOCUMENTATION:
- Add brand system demo and implementation guides
- Include QA testing reports and accessibility audits
- Document design token usage and component patterns

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-02 22:12:42 +10:00

218 lines
6.5 KiB
TypeScript

import { ThemeConfig } from 'antd';
import { designTokens } from './designTokens';
export const chorusTheme: ThemeConfig = {
// algorithm: darkAlgorithm, // Temporarily removed to fix build issue
token: {
// Primary brand colors - CHORUS brand system
colorPrimary: designTokens.system.orchestration.blue, // #007AFF
colorSuccess: designTokens.system.harmony.green, // #30D158
colorInfo: designTokens.system.orchestration.light, // #4A90E2
colorWarning: designTokens.system.resonance.amber, // #FF9F0A
colorError: designTokens.system.alert.coral, // #FF453A
// Background colors - Carbon Black foundation
colorBgContainer: designTokens.brand.carbon.medium, // #1a1a1a
colorBgElevated: designTokens.brand.carbon.light, // #2a2a2a
colorBgLayout: designTokens.brand.carbon.black, // #000000
colorBgSpotlight: designTokens.brand.carbon.medium, // #1a1a1a
colorBgBase: designTokens.brand.carbon.black, // #000000
// Text colors - Accessibility compliant hierarchy
colorText: '#F2F2F7', // Primary text (19.96:1 contrast)
colorTextSecondary: '#A1A1A6', // Secondary text (6.64:1 contrast)
colorTextTertiary: '#6D6D73', // Tertiary text (4.51:1 contrast)
colorTextQuaternary: '#48484A', // Disabled text
// Border colors
colorBorder: '#48484A', // Primary borders
colorBorderSecondary: designTokens.brand.carbon.light, // #2a2a2a
// Typography - Enhanced brand system
fontFamily: 'Roboto, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif',
fontFamilyCode: 'SF Mono, Monaco, Inconsolata, Fira Code, monospace',
fontSize: 16, // Base 16px for accessibility
fontSizeHeading1: 48, // Display typography
fontSizeHeading2: 36,
fontSizeHeading3: 28,
fontSizeHeading4: 24,
fontSizeHeading5: 20,
fontSizeLG: 18, // Body large
fontSizeSM: 14, // Body small
fontSizeXL: 20,
// Spacing and sizing
borderRadius: 8,
borderRadiusLG: 12,
borderRadiusOuter: 6,
borderRadiusSM: 4,
borderRadiusXS: 2,
// Layout
padding: 16,
paddingLG: 24,
paddingSM: 12,
paddingXL: 32,
paddingXS: 8,
margin: 16,
marginLG: 24,
marginSM: 12,
marginXL: 32,
marginXS: 8,
// Component specific
controlHeight: 40,
controlHeightLG: 48,
controlHeightSM: 32,
// Motion
motionDurationFast: '0.1s',
motionDurationMid: '0.2s',
motionDurationSlow: '0.3s',
// Box shadow for depth
boxShadow: '0 4px 12px rgba(0, 0, 0, 0.15)',
boxShadowSecondary: '0 2px 8px rgba(0, 0, 0, 0.12)',
// Wire frame (for development)
wireframe: false,
},
components: {
// Button customization - Brand system integration
Button: {
borderRadius: 8,
controlHeight: 44,
fontWeight: 600,
fontFamily: 'Roboto, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif',
primaryShadow: '0 2px 8px rgba(0, 122, 255, 0.2)',
defaultShadow: '0 2px 4px rgba(0, 0, 0, 0.1)',
},
// Typography - Exo for headings, Roboto for body
Typography: {
titleMarginBottom: '0.5em',
titleMarginTop: '1.2em',
fontFamilyCode: 'SF Mono, Monaco, Inconsolata, Fira Code, monospace',
},
// Layout - Carbon Black foundation
Layout: {
headerBg: designTokens.brand.carbon.dark, // #0f0f0f
bodyBg: designTokens.brand.carbon.black, // #000000
footerBg: designTokens.brand.carbon.dark, // #0f0f0f
siderBg: designTokens.brand.carbon.medium, // #1a1a1a
},
// Menu - Orchestration Blue highlights
Menu: {
itemBg: 'transparent',
itemSelectedBg: 'rgba(0, 122, 255, 0.08)',
itemHoverBg: 'rgba(255, 255, 255, 0.03)',
itemActiveBg: 'rgba(0, 122, 255, 0.12)',
itemColor: '#A1A1A6',
itemSelectedColor: '#F2F2F7',
itemHoverColor: '#F2F2F7',
},
// Card
Card: {
borderRadius: 12,
boxShadow: '0 4px 20px rgba(0, 0, 0, 0.25)',
},
// Input
Input: {
borderRadius: 8,
controlHeight: 44,
},
// Divider
Divider: {
colorSplit: '#2a2a2a',
},
// Spin (loading)
Spin: {
colorPrimary: '#4A90E2',
},
// Progress
Progress: {
defaultColor: '#4A90E2',
},
// Tooltip
Tooltip: {
borderRadius: 6,
colorBgSpotlight: '#2a2a2a',
},
// Modal
Modal: {
borderRadius: 12,
contentBg: '#1a1a1a',
headerBg: '#1a1a1a',
},
// Drawer
Drawer: {
colorBgElevated: '#1a1a1a',
},
// Table
Table: {
borderRadius: 8,
headerBg: '#2a2a2a',
headerSortActiveBg: '#3a3a3a',
rowHoverBg: 'rgba(255, 255, 255, 0.02)',
},
},
};
// Color palette for consistent usage across components
export const chorusColors = {
// Core brand colors
carbon: designTokens.brand.carbon,
walnut: designTokens.brand.walnut,
aluminum: designTokens.brand.aluminum,
paper: designTokens.brand.paper,
// System colors
orchestrationBlue: designTokens.system.orchestration.blue, // #007AFF
harmonyGreen: designTokens.system.harmony.green, // #30D158
resonanceAmber: designTokens.system.resonance.amber, // #FF9F0A
alertCoral: designTokens.system.alert.coral, // #FF453A
// Semantic colors
primary: designTokens.system.orchestration.blue,
success: designTokens.system.harmony.green,
warning: designTokens.system.resonance.amber,
error: designTokens.system.alert.coral,
info: designTokens.system.orchestration.light,
// Backgrounds - Carbon Black foundation
bgPrimary: designTokens.brand.carbon.black, // #000000
bgSecondary: designTokens.brand.carbon.medium, // #1a1a1a
bgTertiary: designTokens.brand.carbon.light, // #2a2a2a
bgElevated: designTokens.brand.carbon.dark, // #0f0f0f
// Text hierarchy - WCAG compliant
textPrimary: '#F2F2F7', // 19.96:1 contrast
textSecondary: '#A1A1A6', // 6.64:1 contrast
textTertiary: '#6D6D73', // 4.51:1 contrast
textDisabled: '#48484A', // 3.0:1 contrast (minimum for disabled)
textInverse: designTokens.brand.carbon.black, // For light backgrounds
// Interactive elements
interactivePrimary: designTokens.system.orchestration.blue,
interactivePrimaryHover: designTokens.system.orchestration.deep,
interactiveSecondary: designTokens.brand.aluminum.metallic,
interactiveSecondaryHover: designTokens.brand.aluminum.slate,
// Borders
borderPrimary: '#48484A',
borderSecondary: designTokens.brand.carbon.light,
borderAccent: designTokens.system.orchestration.blue,
} as const;
export type ChorusColor = keyof typeof chorusColors;