Skip to content

Latest commit

 

History

History
403 lines (325 loc) · 14.2 KB

DESIGN.md

File metadata and controls

403 lines (325 loc) · 14.2 KB
color
primary background text status pastel accent border functional
green secondary light dark
#10B981
#059669
#D1FAE5
#064E3B
default surface surface_alt
#F4F7F6
#FFFFFF
#F9FAFB
primary secondary muted
#111827
#4B5563
#9CA3AF
pending progress resolved rejected
#F59E0B
#3B82F6
#10B981
#EF4444
green orange blue purple
#D1FAE5
#FFEDD5
#DBEAFE
#EDE9FE
teal lime yellow
#14B8A6
#84CC16
#FACC15
light default medium
#F3F4F6
#E5E7EB
#D1D5DB
success warning error info
#10B981
#F59E0B
#EF4444
#3B82F6
typography
font_family scale weight line_height letter_spacing
sans mono
Plus Jakarta Sans, Inter, sans-serif
JetBrains Mono, monospace
xs sm base lg xl 2xl 3xl 4xl 5xl 6xl 7xl
0.75rem
0.875rem
1rem
1.125rem
1.25rem
1.5rem
1.875rem
2.25rem
3rem
3.75rem
4.5rem
normal medium semibold bold
400
500
600
700
tight normal relaxed
1.08
1.5
1.75
tight normal wide wider widest
-0.025em
0
0.025em
0.05em
0.1em
spacing
scale container
0 1 2 3 4 5 6 8 10 12 16 20 24
0
0.25rem
0.5rem
0.75rem
1rem
1.25rem
1.5rem
2rem
2.5rem
3rem
4rem
5rem
6rem
sm md lg xl 2xl
640px
768px
1024px
1280px
1536px
border_radius
sm md lg xl 2xl 3xl full
0.375rem
0.5rem
0.75rem
1rem
1.5rem
2rem
9999px
shadow
sm md lg xl 2xl inner custom
0 1px 2px 0 rgba(0, 0, 0, 0.05)
0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)
0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)
0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)
0 25px 50px -12px rgba(0, 0, 0, 0.25)
inset 0 2px 4px 0 rgba(0, 0, 0, 0.06)
glass glass_elevated glass_hover green_glow green_glow_strong button button_hover
0 4px 12px rgba(0, 0, 0, 0.03)
0 10px 30px rgba(0, 0, 0, 0.05)
0 8px 24px rgba(0, 0, 0, 0.06)
0 0 15px rgba(34, 197, 94, 0.1)
0 0 15px rgba(34, 197, 94, 0.15)
0 4px 14px rgba(34, 197, 94, 0.2)
0 6px 20px rgba(34, 197, 94, 0.3)
elevation
level_0 level_1 level_2 level_3 level_4
none
0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24)
0 3px 6px rgba(0, 0, 0, 0.15), 0 2px 4px rgba(0, 0, 0, 0.12)
0 10px 20px rgba(0, 0, 0, 0.15), 0 3px 6px rgba(0, 0, 0, 0.10)
0 15px 25px rgba(0, 0, 0, 0.15), 0 5px 10px rgba(0, 0, 0, 0.05)
motion
duration easing animation
fast normal slow slower
150ms
300ms
500ms
700ms
ease ease_in ease_out ease_in_out
ease
ease-in
ease-out
ease-in-out
float float_delayed shimmer pulse fade_in slide_up
float 10s ease-in-out infinite
float 12s ease-in-out infinite 2s
shimmer 2s infinite
pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite
fade-in 500ms ease-out
slide-in-from-bottom-4 500ms ease-out
opacity
transparent low medium high full
0
0.25
0.5
0.75
1
blur
sm md lg xl 2xl 3xl
4px
8px
16px
24px
40px
64px
backdrop
blur_sm blur_md blur_lg blur_xl
backdrop-blur-sm
backdrop-blur-md
backdrop-blur-lg
backdrop-blur-xl
z_index
dropdown sticky fixed modal_backdrop modal popover tooltip
10
20
30
40
50
60
70
component
button card input badge avatar icon
padding_x padding_y border_radius font_size
sm md lg
0.75rem
1rem
1.5rem
sm md lg
0.5rem
0.75rem
1rem
sm md lg
0.5rem
0.75rem
1rem
sm md lg
0.875rem
1rem
1.125rem
padding border_radius
sm md lg
1rem
1.5rem
2rem
sm md lg xl
0.75rem
1rem
1.5rem
2rem
padding_x padding_y border_radius font_size
0.75rem
0.5rem
0.625rem
0.875rem
padding_x padding_y border_radius font_size
0.5rem
0.25rem
0.5rem
0.75rem
size
sm md lg xl
2rem
2.5rem
3rem
4rem
size
xs sm md lg xl
0.75rem
1rem
1.25rem
1.5rem
2rem
layout
sidebar navbar container
width collapsed_width
260px
80px
height scrolled_height
60px
52px
max_width padding_x
80rem
mobile tablet desktop
1rem
1.5rem
2rem
scrollbar
width height track_background thumb_background thumb_hover_background border_radius
4px
4px
transparent
rgba(34, 197, 94, 0.25)
rgba(34, 197, 94, 0.5)
9999px
gradient
primary accent subtle hero
start end
#10B981
#14B8A6
start end
#10B981
#84CC16
start end
rgba(34, 197, 94, 0.1)
rgba(20, 184, 166, 0.1)
start middle end
rgba(34, 197, 94, 0.1)
transparent
rgba(20, 184, 166, 0.1)
grid
pattern_size line_color line_width
60px
rgba(34, 197, 94, 0.04)
1px
breakpoint
mobile tablet desktop wide ultrawide
640px
768px
1024px
1280px
1536px

CityResolve Design System

Design Philosophy

CityResolve embodies a modern, approachable civic technology aesthetic that balances professionalism with community warmth. The design system prioritizes clarity, trust, and engagement while maintaining a clean, contemporary visual language that feels both governmental and citizen-friendly.

Visual Identity

Core Aesthetic

The design language centers on a fresh, optimistic green palette that symbolizes growth, community, and environmental stewardship. The aesthetic is deliberately clean and modern, avoiding bureaucratic heaviness while maintaining the credibility expected of civic platforms. Soft pastel accents and generous whitespace create an approachable, user-friendly experience that encourages participation.

Color Psychology

The primary green (#10B981) serves as the brand's heartbeat—representing progress, resolution, and positive civic action. This is complemented by a sophisticated neutral palette that provides visual breathing room and ensures content remains the focus. Status colors use intuitive associations (amber for pending, blue for in-progress, emerald for resolved) to create immediate visual understanding without requiring cognitive processing.

Typography Strategy

Typography prioritizes readability and hierarchy through the Plus Jakarta Sans font family—a modern, geometric sans-serif that conveys trustworthiness and clarity. The type scale is generous, with large, bold headlines that create impact and smaller, refined body text that ensures comfortable reading. Monospace fonts are reserved for data displays and technical elements, creating clear semantic distinction.

Component Design Language

Card Architecture

Cards form the foundation of the UI, featuring generous border-radius (up to 24px) that creates a soft, approachable feel. The glass-card pattern uses subtle borders and delicate shadows to create depth without heaviness. Cards employ a consistent internal padding hierarchy and maintain visual coherence through shared border treatments and shadow behaviors.

Interactive Elements

Buttons and interactive elements use the primary green as their anchor, with hover states that introduce subtle elevation changes and shadow intensification. The interaction model favors direct manipulation—buttons scale slightly on hover, cards lift gently, and transitions use smooth 300ms easings that feel responsive but not hurried.

Status Communication

Status badges and indicators use color-coded systems that are both accessible and intuitive. The four-state status system (pending, in-progress, resolved, rejected) maps to warm-to-cool color progression that creates visual narrative flow. Status indicators often incorporate subtle animations (pulsing dots, floating elements) to draw attention without being distracting.

Spatial Design

Layout Principles

The layout system uses a mobile-first approach with generous container padding that creates breathing room. The sidebar navigation (260px) provides persistent access to core functionality while the main content area maximizes available space. Grid systems employ consistent gutters and maintain alignment across breakpoints.

Whitespace Strategy

Whitespace is used deliberately as a design element, not just as empty space. Generous vertical spacing between sections creates visual rhythm and prevents cognitive overload. Horizontal spacing within components follows a consistent scale that creates harmony across the interface. The background color (#F4F7F6) provides subtle warmth that reduces eye strain compared to pure white.

Depth and Elevation

The elevation system uses subtle shadows and backdrop blur to create hierarchy without visual clutter. Glass morphism effects (backdrop-blur with semi-transparent backgrounds) create modern depth while maintaining content legibility. Shadow values are carefully tuned to provide clear elevation signals without appearing heavy or dated.

Motion and Animation

Animation Philosophy

Motion serves functional purposes—guiding attention, communicating state changes, and providing feedback. Animations use smooth easings and moderate durations (300-500ms) that feel natural rather than jarring. The system avoids gratuitous motion; every animation has a clear purpose.

Key Animations

  • Float animation: Gentle vertical movement (10-12s duration) for decorative elements
  • Shimmer effect: Subtle light movement across progress bars and loading states
  • Pulse: Soft attention-grabbing for live indicators and notifications
  • Hover states: 300ms transitions with subtle elevation and scale changes
  • Page transitions: Fade-in with slight upward slide for smooth content loading

Performance Considerations

Animations use CSS transforms and opacity changes to maintain 60fps performance. Complex animations are hardware-accelerated where possible. The system provides reduced-motion preferences for accessibility.

Accessibility and Inclusivity

Color Contrast

All text and interactive elements meet WCAG AA contrast requirements. The primary green provides sufficient contrast against both light and dark backgrounds. Status colors are paired with text labels to ensure colorblind users can understand state information.

Touch Targets

Interactive elements maintain minimum 44px touch targets for mobile usability. Buttons and cards have generous padding that accommodates various finger sizes and input methods.

Semantic Structure

The design system supports semantic HTML structure with clear visual hierarchy. Typography scales create logical heading relationships, and component patterns reinforce content relationships through consistent visual treatment.

Brand Expression

Logo and Identity

The logo uses a leaf icon combined with the CityResolve wordmark, emphasizing the civic-environmental connection. The leaf icon appears in navigation and branding elements, creating consistent brand recognition. The wordmark uses bold typography with the "Resolve" portion highlighted in the primary green.

Voice and Tone

The visual design supports a brand voice that is empowering, transparent, and community-focused. The clean, modern aesthetic conveys efficiency and trustworthiness, while the warm color palette and soft shapes approachability and civic pride.

Photography and Imagery

When imagery is used, it follows the brand's optimistic, community-focused aesthetic. User avatars use circular containers with subtle borders that maintain visual consistency. Category icons use the Lucide icon set with consistent sizing and color treatment.

Responsive Behavior

Mobile Adaptation

The design gracefully adapts to mobile contexts through collapsible navigation, stacked layouts, and touch-optimized interactions. The sidebar transforms into a drawer on mobile, and grid layouts collapse to single columns while maintaining content hierarchy.

Tablet Enhancement

Tablet layouts introduce two-column grids and expanded navigation options while maintaining the mobile-first content hierarchy. Touch targets remain generous, and spacing scales appropriately for the larger screen.

Desktop Expansion

Desktop layouts maximize horizontal space with multi-column grids, persistent navigation, and expanded content areas. The design maintains visual coherence through consistent spacing and component treatment across all breakpoints.

Implementation Guidelines

Component Consistency

All components share common design tokens for spacing, typography, color, and border-radius. This creates visual harmony and makes the system maintainable. Components are designed to be composable, with clear patterns for nesting and combination.

State Management

Components have clear visual states for default, hover, active, focus, and disabled conditions. Focus states use the primary green with subtle rings to maintain accessibility while providing clear feedback. Loading states use skeleton patterns and subtle animations to communicate progress.

Error and Feedback

Error states use the functional red color (#EF4444) with clear messaging and actionable next steps. Success states use the primary green with celebratory micro-interactions. Warning states use amber with clear guidance for resolution.

Design System Evolution

The design system is built to evolve while maintaining consistency. New components should reference existing patterns and tokens before introducing novel approaches. The color palette, typography scale, and spacing system provide foundations that support future growth while maintaining brand coherence.

This design system serves as both a reference and a guide—ensuring that CityResolve continues to deliver a cohesive, accessible, and delightful experience as it grows and evolves.