- 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
15 KiB
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-cyanfor primary actions only, sparing use of other accent colors
Implementation:
- Primary actions: Use
kodo-cyan(buttons, active states, focus rings) - Secondary actions: Use
kodo-steelinstead 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-8instead ofp-6 - Section spacing: 32px standard (was 24px) -
space-y-8instead ofspace-y-6 - Large sections: 48px for major containers -
space-y-12for 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/5for interactive feedback - Opacity changes:
group-hover:opacity-100for functional overlays (play buttons) - Border color changes:
hover:border-white/10for interactive elements - Text color changes:
hover:text-whitefor navigation links
Remove (Excessive):
- Scale transforms:
hover:scale-[1.02],hover:scale-110on cards - Decorative shadows:
hover:shadow-neon-cyan/20,hover:shadow-lgon cards - Image zoom effects:
group-hover:scale-110on 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 unitgap-4,p-4,m-4(16px) - Standardgap-6,p-6,m-6(24px) - Largegap-8,p-8,m-8(32px) - Extra large (card padding, section spacing)gap-12,p-12,m-12(48px) - Section spacing, large containersgap-16,p-16,m-16(64px) - Page-level spacinggap-24,p-24,m-24(96px) - Maximum spacing
Avoid (not 8px-aligned):
gap-1,p-1,m-1(4px) - Usegap-2insteadgap-3,p-3,m-3(12px) - Usegap-2orgap-4insteadgap-10,p-10,m-10(40px) - Usegap-8orgap-12insteadgap-20,p-20,m-20(80px) - Usegap-16orgap-24instead
6. Text Color Hierarchy
Principle: Use white for primary content, dim text sparingly for truly secondary information
Primary Text:
- Main content:
text-white(wastext-kodo-text-mainwith beige) - Headings:
text-white - Interactive elements:
text-whitewith opacity for hover states
Secondary Text:
- Truly secondary info:
text-kodo-secondaryortext-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
--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-graphiteorbg-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-cyanorbg-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(notborder-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-graphiteorbg-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(notp-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) orspace-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/5for interactive feedback - Opacity changes:
group-hover:opacity-100for functional overlays (play buttons, tooltips) - Border color changes:
hover:border-white/10orhover:border-kodo-steel/50for interactive elements - Text color changes:
hover:text-whitefor navigation links - Transition duration is reasonable:
transition-colors duration-200ortransition-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-lgon cards - No image zoom effects: Remove
group-hover:scale-110on 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-graphiteorbg-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-whitefor maximum contrast - Secondary text uses
text-white opacity-80ortext-kodo-content-dimsparingly - 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-cyanwithtext-blackortext-white - Secondary/outline buttons:
border-kodo-steel(not cyan) - Hover states are subtle:
hover:opacity-90orhover: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-graphiteorbg-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-steelif needed (not cyan)
Navigation
- Active states use
text-kodo-cyanorbg-kodo-cyan/10 - Inactive states use
text-kodo-steelortext-white - Hover states are subtle:
hover:text-whiteorhover:bg-white/5 - No scale transforms on icons or text
Forms
- Input focus states use
focus-visible:ring-kodo-cyan - Labels use
text-whitefor 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
// 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
// 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
- ✅ Text Colors: Changed primary text to white, use dim text sparingly
- ✅ Card Padding: Increased from 24px to 32px
- ✅ Section Spacing: Increased from 24px to 32px (standard), 48px (large)
- ✅ Hover Effects: Removed excessive scale transforms and decorative shadows
- ✅ Gradients: Removed from cards, kept only in hero sections
- ✅ 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