veza/apps/web/docs/DESIGN_DIRECTION.md
senke f02c68cfad aesthetic-improvements: enhance design direction checklist
- Expanded basic checklist into comprehensive implementation guide
- Added detailed sections: Color (80/20 rule), Spacing (8px grid), Interactions, Visual Elements
- Added component-specific checks: Buttons, Cards, Navigation, Forms, Pages
- Included specific Tailwind classes and values for each check
- Added 'keep vs remove' guidance for hover effects and visual elements
- Added final validation section for overall assessment
- Provides actionable, step-by-step guidance for applying Surgical Minimalism
- Action 11.5.1.2 complete
2026-01-16 10:48:00 +01:00

401 lines
15 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Design Direction: Surgical Minimalism
**Last Updated**: 2025-01-27
**Status**: Active Design Direction
**Purpose**: Define the "Surgical Minimalism" design philosophy for the Veza application
## Overview
"Surgical Minimalism" is a design philosophy that emphasizes:
- **Purposeful design**: Every visual element serves a function
- **Increased whitespace**: More breathing room improves readability and hierarchy
- **Restrained color usage**: Color used strategically, not decoratively
- **Subtle interactions**: Hover effects and animations are functional, not excessive
- **Visual clarity**: Remove unnecessary decorative elements
## Core Principles
### 1. 80/20 Color Rule
**Principle**: 80% neutral colors, 20% accent colors
- **80% Neutral**: Dark backgrounds (`kodo-void`, `kodo-ink`, `kodo-graphite`), white text, subtle grays
- **20% Color**: Strategic use of `kodo-cyan` for primary actions only, sparing use of other accent colors
**Implementation**:
- Primary actions: Use `kodo-cyan` (buttons, active states, focus rings)
- Secondary actions: Use `kodo-steel` instead of cyan
- Decorative elements: Use neutral colors, avoid color backgrounds
- Status/info: Use semantic colors only when necessary
**Target**: Reduce cyan usage by 30-40% from current levels
### 2. Increased Whitespace
**Principle**: More breathing room improves visual hierarchy and reduces cognitive load
**Implementation**:
- **Card padding**: 32px (was 24px) - `p-8` instead of `p-6`
- **Section spacing**: 32px standard (was 24px) - `space-y-8` instead of `space-y-6`
- **Large sections**: 48px for major containers - `space-y-12` for DashboardPage
- **8px grid alignment**: All spacing values align to 8px multiples
**Benefits**:
- Improved readability
- Better visual hierarchy
- Reduced visual clutter
- More professional appearance
### 3. Subtle, Purposeful Interactions
**Principle**: Hover effects and animations should be functional, not decorative
**Keep** (Necessary):
- Background color changes: `hover:bg-white/5` for interactive feedback
- Opacity changes: `group-hover:opacity-100` for functional overlays (play buttons)
- Border color changes: `hover:border-white/10` for interactive elements
- Text color changes: `hover:text-white` for navigation links
**Remove** (Excessive):
- Scale transforms: `hover:scale-[1.02]`, `hover:scale-110` on cards
- Decorative shadows: `hover:shadow-neon-cyan/20`, `hover:shadow-lg` on cards
- Image zoom effects: `group-hover:scale-110` on decorative images
- Multiple simultaneous effects: Scale + shadow + border combinations
**Target**: Reduce hover effects by 30-40% (remove decorative effects)
### 4. Gradients Used Sparingly
**Principle**: Gradients reserved for hero sections and functional overlays
**Keep Gradients**:
- Hero sections: Featured content, landing sections
- Functional overlays: Text readability over images (`bg-gradient-to-t from-black/80`)
- Small decorative elements: Icon containers, visualizations (minimal)
**Remove Gradients**:
- Card backgrounds: Use solid colors (`bg-kodo-ink`, `bg-kodo-graphite`)
- Decorative sections: Replace with solid backgrounds
- Hover overlays: Use solid colors with opacity
**Result**: All card components use solid backgrounds
### 5. 8px Grid System
**Principle**: All spacing aligns to an 8px base grid for visual rhythm
**Preferred Values** (8px-aligned):
- `gap-2`, `p-2`, `m-2` (8px) - Base unit
- `gap-4`, `p-4`, `m-4` (16px) - Standard
- `gap-6`, `p-6`, `m-6` (24px) - Large
- `gap-8`, `p-8`, `m-8` (32px) - Extra large (card padding, section spacing)
- `gap-12`, `p-12`, `m-12` (48px) - Section spacing, large containers
- `gap-16`, `p-16`, `m-16` (64px) - Page-level spacing
- `gap-24`, `p-24`, `m-24` (96px) - Maximum spacing
**Avoid** (not 8px-aligned):
- `gap-1`, `p-1`, `m-1` (4px) - Use `gap-2` instead
- `gap-3`, `p-3`, `m-3` (12px) - Use `gap-2` or `gap-4` instead
- `gap-10`, `p-10`, `m-10` (40px) - Use `gap-8` or `gap-12` instead
- `gap-20`, `p-20`, `m-20` (80px) - Use `gap-16` or `gap-24` instead
### 6. Text Color Hierarchy
**Principle**: Use white for primary content, dim text sparingly for truly secondary information
**Primary Text**:
- Main content: `text-white` (was `text-kodo-text-main` with beige)
- Headings: `text-white`
- Interactive elements: `text-white` with opacity for hover states
**Secondary Text**:
- Truly secondary info: `text-kodo-secondary` or `text-white opacity-80`
- Metadata: `text-kodo-content-dim`
- Use sparingly: Only for information that is genuinely less important
**Result**: Better contrast, improved readability, WCAG AA compliant
## Design Tokens
### Section Spacing
```css
--section-spacing: 2rem; /* 32px - Standard section spacing (4× base) */
--section-spacing-lg: 3rem; /* 48px - Large section spacing (6× base) */
```
**Usage**:
- Standard sections: `space-y-8` (32px)
- Large containers: `space-y-12` (48px)
- Or use CSS variable: `space-y-[var(--section-spacing)]`
### Color Usage Guidelines
**Primary Actions** (Use Cyan):
- Primary buttons: `bg-kodo-cyan`
- Active navigation: `text-kodo-cyan`, `bg-kodo-cyan/10`
- Focus rings: `focus-visible:ring-kodo-cyan`
- Critical status indicators
**Secondary Actions** (Use Steel):
- Outline buttons: `border-kodo-steel`, `hover:border-kodo-steel/50`
- Secondary navigation: `text-kodo-steel`
- Non-primary interactive elements
**Neutral Backgrounds**:
- Cards: `bg-kodo-graphite` or `bg-kodo-ink`
- Elevated surfaces: `bg-kodo-ink`
- Main background: `bg-kodo-void`
## Implementation Checklist
When applying "Surgical Minimalism" to a component or page, use this comprehensive checklist:
### Color (80/20 Rule)
#### Primary Actions (Use Cyan)
- [ ] Primary buttons use `bg-kodo-cyan` (not outline/secondary buttons)
- [ ] Active navigation states use `text-kodo-cyan` or `bg-kodo-cyan/10`
- [ ] Focus rings use `focus-visible:ring-kodo-cyan`
- [ ] Critical status indicators use cyan appropriately
- [ ] No cyan on decorative elements or backgrounds
#### Secondary Actions (Use Steel)
- [ ] Outline buttons use `border-kodo-steel` (not `border-kodo-cyan`)
- [ ] Outline button hover states use `hover:border-kodo-steel/50` (not cyan)
- [ ] Secondary navigation items use `text-kodo-steel` (not cyan)
- [ ] Non-primary interactive elements use steel colors
- [ ] Icon buttons (non-primary) use steel, not cyan
#### Neutral Backgrounds
- [ ] Cards use `bg-kodo-graphite` or `bg-kodo-ink` (solid colors, no gradients)
- [ ] Elevated surfaces use `bg-kodo-ink`
- [ ] Main backgrounds use `bg-kodo-void`
- [ ] No decorative color backgrounds (use neutral colors)
#### Color Ratio Check
- [ ] Approximately 80% of the component uses neutral colors (void, ink, graphite, steel, white)
- [ ] Approximately 20% uses accent colors (cyan for primary actions only)
- [ ] No excessive color usage that breaks the 80/20 rule
### Spacing (8px Grid Alignment)
#### Grid Alignment
- [ ] All spacing values are multiples of 8px (0, 8, 16, 24, 32, 48, 64, 96px)
- [ ] No use of non-8px values (4px, 12px, 40px, 80px) unless absolutely necessary
- [ ] Preferred values: `gap-2` (8px), `gap-4` (16px), `gap-6` (24px), `gap-8` (32px), `gap-12` (48px), `gap-16` (64px), `gap-24` (96px)
#### Card Padding
- [ ] Card padding is 32px (`p-8`) - increased from previous 24px (`p-6`)
- [ ] CardHeader, CardContent, CardFooter all use `p-8` (not `p-6`)
- [ ] Custom cards follow the same 32px padding standard
#### Section Spacing
- [ ] Standard section spacing is 32px (`space-y-8`) - increased from 24px (`space-y-6`)
- [ ] Large section containers use 48px (`space-y-12`) for major sections
- [ ] Page-level spacing uses 64px (`space-y-16`) or 96px (`space-y-24`) for maximum separation
- [ ] CSS variables can be used: `space-y-[var(--section-spacing)]` (32px) or `space-y-[var(--section-spacing-lg)]` (48px)
#### Whitespace Assessment
- [ ] Adequate breathing room between major sections
- [ ] Sufficient spacing between related elements (not cramped)
- [ ] Visual hierarchy is clear through spacing (not just color)
- [ ] No excessive spacing that creates disconnected feeling
### Interactions (Subtle & Functional)
#### Hover Effects - Keep (Functional)
- [ ] Background color changes: `hover:bg-white/5` for interactive feedback
- [ ] Opacity changes: `group-hover:opacity-100` for functional overlays (play buttons, tooltips)
- [ ] Border color changes: `hover:border-white/10` or `hover:border-kodo-steel/50` for interactive elements
- [ ] Text color changes: `hover:text-white` for navigation links
- [ ] Transition duration is reasonable: `transition-colors duration-200` or `transition-opacity duration-200`
#### Hover Effects - Remove (Excessive)
- [ ] No scale transforms on cards: Remove `hover:scale-[1.02]`, `hover:scale-110`, `hover:scale-105`
- [ ] No decorative shadows: Remove `hover:shadow-neon-cyan/20`, `hover:shadow-lg` on cards
- [ ] No image zoom effects: Remove `group-hover:scale-110` on decorative images
- [ ] No multiple simultaneous effects: Simplify combinations of scale + shadow + border
- [ ] No excessive glow effects: Remove `hover:shadow-[0_0_15px_rgba(255,255,255,0.5)]`
#### Animation Assessment
- [ ] All animations serve a functional purpose (feedback, state changes)
- [ ] No purely decorative animations
- [ ] Transitions are smooth but not distracting
- [ ] Performance is maintained (no janky animations)
### Visual Elements (Clarity & Purpose)
#### Gradients
- [ ] No gradients on card backgrounds (use solid `bg-kodo-graphite` or `bg-kodo-ink`)
- [ ] Gradients only in hero sections or featured content sections
- [ ] Functional overlay gradients for text readability are acceptable: `bg-gradient-to-t from-black/80`
- [ ] Small decorative gradients on icon containers are minimal and acceptable
- [ ] No decorative gradient overlays on cards (e.g., `bg-gradient-to-b from-white/5 to-transparent`)
#### Text Color Hierarchy
- [ ] Primary text uses `text-white` (not beige or dim colors)
- [ ] Headings use `text-white` for maximum contrast
- [ ] Secondary text uses `text-white opacity-80` or `text-kodo-content-dim` sparingly
- [ ] Metadata uses dim text only when genuinely less important
- [ ] Text contrast meets WCAG AA standards
#### Decorative Elements
- [ ] Unnecessary decorative elements are removed
- [ ] Every visual element serves a purpose (functional, not just aesthetic)
- [ ] No excessive borders, shadows, or highlights
- [ ] Visual clutter is minimized
### Component-Specific Checks
#### Buttons
- [ ] Primary buttons: `bg-kodo-cyan` with `text-black` or `text-white`
- [ ] Secondary/outline buttons: `border-kodo-steel` (not cyan)
- [ ] Hover states are subtle: `hover:opacity-90` or `hover:bg-white/5`
- [ ] No scale transforms on hover
- [ ] Focus states are clear: `focus-visible:ring-kodo-cyan`
#### Cards
- [ ] Padding is 32px (`p-8`)
- [ ] Background is solid color (`bg-kodo-graphite` or `bg-kodo-ink`)
- [ ] No gradients on background
- [ ] Hover effect is subtle: `hover:bg-white/5 transition-colors duration-200`
- [ ] No scale transforms or decorative shadows
- [ ] Border uses `border-kodo-steel` if needed (not cyan)
#### Navigation
- [ ] Active states use `text-kodo-cyan` or `bg-kodo-cyan/10`
- [ ] Inactive states use `text-kodo-steel` or `text-white`
- [ ] Hover states are subtle: `hover:text-white` or `hover:bg-white/5`
- [ ] No scale transforms on icons or text
#### Forms
- [ ] Input focus states use `focus-visible:ring-kodo-cyan`
- [ ] Labels use `text-white` for primary text
- [ ] Helper text uses dim text sparingly
- [ ] Error states use appropriate semantic colors
- [ ] Spacing between form fields aligns to 8px grid
#### Pages
- [ ] Main container spacing is 32px (`space-y-8`) or 48px (`space-y-12`) for large sections
- [ ] Page padding is 32px (`p-8`) or appropriate for layout
- [ ] Section hierarchy is clear through spacing
- [ ] No excessive decorative elements
- [ ] Color usage follows 80/20 rule
### Final Validation
#### Overall Assessment
- [ ] Component/page follows all "Surgical Minimalism" principles
- [ ] Visual hierarchy is clear and purposeful
- [ ] Whitespace is adequate and improves readability
- [ ] Color usage is restrained and strategic
- [ ] Interactions are subtle and functional
- [ ] No unnecessary decorative elements remain
- [ ] Component is accessible (WCAG AA compliant)
- [ ] Performance is maintained (no excessive animations or effects)
#### Documentation
- [ ] Component is documented if it's a reusable component
- [ ] Design decisions are clear and align with this direction
- [ ] Future maintainers can understand the design choices
## Examples
### ✅ Good: Surgical Minimalism Applied
```tsx
// Card with solid background, subtle hover, adequate padding
<Card className="p-8 hover:bg-white/5 transition-colors">
<CardHeader>
<CardTitle className="text-white">Title</CardTitle>
</CardHeader>
<CardContent>
<p className="text-white opacity-80">Content</p>
</CardContent>
</Card>
// Button with cyan only for primary actions
<Button variant="default" className="bg-kodo-cyan">Primary Action</Button>
<Button variant="outline" className="border-kodo-steel hover:border-kodo-steel/50">
Secondary Action
</Button>
// Section with proper spacing
<div className="space-y-8">
<Section1 />
<Section2 />
</div>
```
### ❌ Avoid: Excessive Decoration
```tsx
// Card with gradient, scale transform, decorative shadow
<Card className="p-6 bg-gradient-to-r from-kodo-ink to-kodo-graphite hover:scale-[1.02] hover:shadow-neon-cyan/20">
{/* Avoid */}
</Card>
// Button with cyan for secondary actions
<Button variant="outline" className="border-kodo-cyan hover:border-kodo-cyan/50">
{/* Should use kodo-steel */}
</Button>
// Section with insufficient spacing
<div className="space-y-4">
{/* Should be space-y-8 */}
</div>
```
## Migration Path
### Completed Actions
1.**Text Colors**: Changed primary text to white, use dim text sparingly
2.**Card Padding**: Increased from 24px to 32px
3.**Section Spacing**: Increased from 24px to 32px (standard), 48px (large)
4.**Hover Effects**: Removed excessive scale transforms and decorative shadows
5.**Gradients**: Removed from cards, kept only in hero sections
6.**8px Grid**: Documented and verified alignment
### In Progress
- **Color Reduction**: Audit complete, replacement in progress
- **Component Updates**: Applying principles to remaining components
### Future Work
- Apply to all remaining pages and components
- Create design system components that enforce principles
- Add linting rules to prevent violations
## References
- **8px Grid System**: `apps/web/src/styles/GRID_SYSTEM.md`
- **Cyan Usage Audit**: `apps/web/docs/CYAN_USAGE_AUDIT.md`
- **Hover Effects Audit**: `apps/web/docs/HOVER_EFFECTS_AUDIT.md`
- **Gradient Usage Verification**: `apps/web/docs/GRADIENT_USAGE_VERIFICATION.md`
- **Section Spacing Audit**: `apps/web/docs/SECTION_SPACING_AUDIT.md`
- **Design Tokens**: `apps/web/src/styles/design-tokens.css`
## Benefits
**User Experience**:
- Reduced cognitive load
- Improved readability
- Better visual hierarchy
- More professional appearance
- Faster information processing
**Developer Experience**:
- Clear design principles
- Consistent patterns
- Reusable utilities
- Easier maintenance
- Better scalability
**Accessibility**:
- WCAG AA compliant contrast ratios
- Clear focus states
- Reduced visual noise
- Better screen reader experience