# Design Tokens This document defines the design tokens used throughout the Flyer Crawler application, including color palettes, usage guidelines, and semantic mappings. ## Color Palette ### Brand Colors The Flyer Crawler brand uses a **teal** color palette that evokes freshness, value, and the grocery shopping experience. | Token | Value | Tailwind | RGB | Usage | | --------------------- | --------- | -------- | ------------- | ---------------------------------------- | | `brand-primary` | `#0d9488` | teal-600 | 13, 148, 136 | Main brand color, primary call-to-action | | `brand-secondary` | `#14b8a6` | teal-500 | 20, 184, 166 | Supporting actions, primary buttons | | `brand-light` | `#ccfbf1` | teal-100 | 204, 251, 241 | Backgrounds, highlights (light mode) | | `brand-dark` | `#115e59` | teal-800 | 17, 94, 89 | Hover states, backgrounds (dark mode) | | `brand-primary-light` | `#99f6e4` | teal-200 | 153, 246, 228 | Subtle backgrounds, light accents | | `brand-primary-dark` | `#134e4a` | teal-900 | 19, 78, 74 | Deep backgrounds, strong emphasis (dark) | ### Color Usage Examples ```jsx // Primary color for icons and emphasis // Secondary color for primary action buttons // Light backgrounds for selected/highlighted items
Selected Flyer
// Focus rings on form inputs ``` ## Semantic Color Mappings ### Primary (`brand-primary`) **Purpose**: Main brand color for visual identity and key interactive elements **Use Cases**: - Icons representing key features (shopping cart, tags, deals) - Hover states on links and interactive text - Focus indicators on form elements - Progress bars and loading indicators - Selected state indicators **Example Usage**: ```jsx className = 'text-brand-primary hover:text-brand-dark'; ``` ### Secondary (`brand-secondary`) **Purpose**: Supporting actions and primary buttons that drive user engagement **Use Cases**: - Primary action buttons (Add, Submit, Save) - Call-to-action elements that require user attention - Active state for toggles and switches **Example Usage**: ```jsx className = 'bg-brand-secondary hover:bg-brand-dark'; ``` ### Light (`brand-light`) **Purpose**: Subtle backgrounds and highlights in light mode **Use Cases**: - Selected item backgrounds - Highlighted sections - Drag-and-drop target areas - Subtle emphasis backgrounds **Example Usage**: ```jsx className = 'bg-brand-light dark:bg-brand-dark/20'; ``` ### Dark (`brand-dark`) **Purpose**: Hover states and backgrounds in dark mode **Use Cases**: - Button hover states - Dark mode backgrounds for highlighted sections - Strong emphasis in dark theme **Example Usage**: ```jsx className = 'hover:bg-brand-dark dark:bg-brand-dark/30'; ``` ## Dark Mode Variants All brand colors have dark mode variants defined using Tailwind's `dark:` prefix. ### Dark Mode Mapping Table | Light Mode Class | Dark Mode Class | Purpose | | ----------------------- | ----------------------------- | ------------------------------------ | | `text-brand-primary` | `dark:text-brand-light` | Text readability on dark backgrounds | | `bg-brand-light` | `dark:bg-brand-dark/20` | Subtle backgrounds | | `bg-brand-primary` | `dark:bg-brand-primary` | Brand color maintained in both modes | | `hover:text-brand-dark` | `dark:hover:text-brand-light` | Interactive text hover | | `border-brand-primary` | `dark:border-brand-primary` | Borders maintained in both modes | ### Dark Mode Best Practices 1. **Contrast**: Ensure sufficient contrast (WCAG AA: 4.5:1 for text, 3:1 for UI) 2. **Consistency**: Use `brand-primary` for icons in both modes (it works well on both backgrounds) 3. **Backgrounds**: Use lighter opacity variants for dark mode backgrounds (e.g., `/20`, `/30`) 4. **Text**: Swap `brand-dark` ↔ `brand-light` for text elements between modes ## Accessibility ### Color Contrast Ratios All color combinations meet WCAG 2.1 Level AA standards: | Foreground | Background | Contrast Ratio | Pass Level | | --------------- | ----------------- | -------------- | ---------- | | `brand-primary` | white | 4.51:1 | AA | | `brand-dark` | white | 7.82:1 | AAA | | white | `brand-primary` | 4.51:1 | AA | | white | `brand-secondary` | 3.98:1 | AA Large | | white | `brand-dark` | 7.82:1 | AAA | | `brand-light` | `brand-dark` | 13.4:1 | AAA | ### Focus Indicators All interactive elements MUST have visible focus indicators using `focus:ring-2`: ```jsx className = 'focus:ring-2 focus:ring-brand-primary focus:ring-offset-2'; ``` ### Color Blindness Considerations The teal color palette is accessible for most forms of color blindness: - **Deuteranopia** (green-weak): Teal appears as blue/cyan - **Protanopia** (red-weak): Teal appears as blue - **Tritanopia** (blue-weak): Teal appears as green The brand colors are always used alongside text labels and icons, never relying solely on color to convey information. ## Implementation Notes ### Tailwind Config Brand colors are defined in `tailwind.config.js`: ```javascript theme: { extend: { colors: { brand: { primary: '#0d9488', secondary: '#14b8a6', light: '#ccfbf1', dark: '#115e59', 'primary-light': '#99f6e4', 'primary-dark': '#134e4a', }, }, }, } ``` ### Usage in Components Import and use brand colors with Tailwind utility classes: ```jsx // Text colors Price // Background colors
Button
// Border colors
Card
// Opacity variants
Overlay
``` ## Future Considerations ### Potential Extensions - **Success**: Consider adding semantic success color (green) for completed actions - **Warning**: Consider adding semantic warning color (amber) for alerts - **Error**: Consider adding semantic error color (red) for errors (already using red-\* palette) ### Color Palette Expansion If the brand evolves, consider these complementary colors: - **Accent**: Warm coral/orange for limited-time deals - **Neutral**: Gray scale for backgrounds and borders (already using Tailwind's gray palette) ## References - [Tailwind CSS Color Palette](https://tailwindcss.com/docs/customizing-colors) - [WCAG 2.1 Contrast Guidelines](https://www.w3.org/WAI/WCAG21/Understanding/contrast-minimum.html) - [WebAIM Contrast Checker](https://webaim.org/resources/contrastchecker/)