Built on a 4px base grid. All spacing tokens map to consistent increments for vertical rhythm and horizontal alignment.
--space-0-52px
--space-14px
--space-1-56px
--space-28px
--space-312px
--space-416px
--space-520px
--space-624px
--space-832px
--space-1040px
--space-1248px
--space-1456px
--space-1664px
--space-1872px
--space-2080px
--space-2496px
Border Radius
A range of radii from subtle rounding to fully circular. Use --radius-md for most UI elements.
--radius-sm
4px
--radius-md
10px
--radius-card
12px
--radius-lg
12px
--radius-xl
16px
--radius-2xl
24px
--radius-pill
9999px
--radius-full
50%
Shadows
A 6-level elevation scale from subtle to dramatic, plus utility shadows for hover, inset, and focus states.
--shadow-xs
Subtle elements
--shadow-sm
Default cards
--shadow-md
Mid-elevation
--shadow-lg
Dropdowns, popovers
--shadow-xl
Modal dialogs
--shadow-2xl
Dramatic elevation
--shadow-card-hover
Card hover state
--shadow-inset
Inset / pressed
Motion & Animation
Motion is purposeful, not decorative. Every animation must reduce cognitive load. No bounce or elastic — this is a professional tool.
Duration Tokens
--duration-instant
75ms
--duration-fast
100ms
--duration-normal
150ms
--duration-slow
250ms
--duration-slower
300ms
Easing Curves
Hover over each track to see the easing in action. The dot transitions from left to right using the corresponding curve.
--ease-out
Entrances, reveals
--ease-in
Exits, dismissals
--ease-in-out
Morphing, repositioning
--ease-spring
Playful emphasis (rare)
--ease-smooth
General-purpose
Icones (Lucide)
Givernance utilise Lucide Icons comme systeme d'icones unifie. Les icones sont chargees via CDN et rendues en SVG inline.
Taille standard : 16px (sm), 20px (base), 24px (lg). Stroke width : 1.5px pour un rendu elegant.
Regle d'icone
Toujours utiliser Lucide Icons via data-lucide="icon-name". Ne jamais utiliser d'emojis ou de caracteres Unicode comme icones dans l'interface.
Stroke width : 1.5px. Couleur via color CSS heritee. Tailles : 16/20/24px exclusivement.
Buttons
Variants
All button variants
Sizes
Small, Default, Large
Icon Buttons
Icon-only buttons
Loading State
Buttons with loading spinner
Disabled State
Disabled buttons
Badges
All Variants
Pill (default)
✓ Active⚠ Pending✕ Lapsedℹ NewDraft
Square variant
✓ Active⚠ Pending✕ Lapsedℹ NewDraft
Without icon
ActivePendingLapsedNewDraft
Alerts
✓
Donation recorded. Receipt #2024-0847 has been generated and emailed to the donor.
⚠
GDPR consent expiring. 12 donors have consent records older than 24 months. Review and request renewal.
✕
Import failed. Row 47 has an invalid email format. Please correct the file and retry.
ℹ
New feature available. Automated receipt generation is now available for all plans. Learn more
Forms
Input States
Full legal name as it appears on records
Primary contact email address
✕ Email address is missing a domain (e.g. @example.com)
✓ Email address verified
Select & Textarea
Checkbox & Radio
Checkboxes
Radio buttons
Sample Form Group
Personal Information
Cards
Default card
Recent Donations
Your organization received 24 donations this month totaling EUR 18,420. That is a 12% increase over last month.
Flat card (--flat)
Campaign Summary
✓ Active
Spring Fundraiser 2026 is 67% funded with 3 weeks remaining. 142 donors have contributed so far.
Interactive card (hover to see elevation)
Marie Dupont
Active
Individual Donor · Paris, France
Last gift: EUR 2,500 on 2026-01-15
Stat widget
Total Donations (YTD)
EUR 284,750
▲ 12.4% vs. last year
Avatars
Sizes
xs (20px), sm (28px), md (36px), lg (48px), xl (64px)
M
MD
MD
MD
MD
Color Variants
AB
CD
EF
GH
IJ
Rounded Variant
Square-rounded (--rounded) vs. circle (default)
SE
CL
PM
JD
Data Table
Dense but breathable tables with sticky headers, row hover, and sortable columns. Financial data uses monospace numerals.
Name
Email
Type
Last Gift
Status
MD
Marie Dupont
Fondation Espoir
marie@fondation.fr
Individual
EUR 2,500
✓ Active
SE
Stiftung Europa
Berlin, Germany
info@stiftung.de
Foundation
EUR 15,000
✓ Active
PM
Pierre Martin
Brussels, Belgium
pierre@ngo.be
Individual
EUR 180
✕ Lapsed
CL
Caritas Lyon
Lyon, France
contact@caritas.fr
Organization
EUR 8,200
✓ Active
Showing 1–4 of 127 donors
Navigation
Sidebar-first navigation with collapsible sections. Active states use a white left accent bar. Topbar carries breadcrumbs, search, and actions.
Tab content for the selected "Overview" tab would appear here. Tabs use a green bottom border for the active state with a smooth transition.
Progress Bars
Spring Campaign67%
Year-End Appeal23%
Infrastructure Grant100%
Emergency Fund45%
Timeline
Activity timelines show chronological event logs on donor and campaign records. Icons indicate event type.
€
Donation received — EUR 2,500
Marie Dupont · Spring Campaign 2026 · 2 hours ago
✉
Thank-you email sent
Automated · Receipt #2026-0847 attached · 2 hours ago
✎
Contact information updated
Claire Laurent · Changed phone number · Yesterday
👥
Donor created
Imported from Salesforce · 2025-09-14
Dropdown Menu
Context menus for actions on records and UI elements. Uses elevated shadow for clear separation from the page.
✎ Edit Donor
✉ Send Email
📄 Generate Receipt
🔗 View Relationships
📦 Archive
🗑 Delete Donor
Tooltips
Hover over elements below to see tooltip text. Tooltips use the data-tooltip attribute and appear above the element.
✓ Active
Skeleton Loading
Skeleton screens are preferred over spinners for content-heavy pages. They preserve layout structure and reduce perceived loading time.
Text skeleton
Avatar + text
Card skeletons
Empty State
Empty states guide users toward their first action. They include an illustration or icon, a descriptive title, supporting text, and a clear CTA.
👥
No donors yet
Your donor list is empty. Start building your community by adding your first donor or importing from a spreadsheet.
Layout Reference
The standard app layout uses a fixed sidebar, sticky topbar, and scrollable content area. Key dimension tokens are shown below.
Sidebar
240px
--sidebar-width
Topbar
56px height
--topbar-height
Content Area
max 1280px
--content-max
Forms: max 800px --form-max
Layout Tokens
Token
Value
Usage
--sidebar-width
240px
Default sidebar width
--sidebar-width-sm
200px
Compact sidebar
--sidebar-collapsed
64px
Icon-only collapsed mode
--topbar-height
56px
Sticky top navigation bar
--content-max
1280px
List views, dashboards
--form-max
800px
Forms, detail views
--table-row-height
48px
Default table row
--table-row-compact
36px
Compact density table row
Anti-Patterns
These patterns are explicitly prohibited in Givernance. They violate our principles of accessibility, calm, and trustworthiness.
outline: none without replacement
Never remove focus outlines without providing a visible alternative. Focus rings must always be visible for keyboard navigation. Use --focus-ring or --shadow-ring tokens.
Modals for complex forms
Modal dialogs with more than 3 fields cause cognitive overload. Use a dedicated page instead. Modals are reserved for confirmations, quick edits, and alerts.
Auto-dismissing success messages (<4s)
Users may miss success confirmations that disappear too quickly. Toast notifications must persist for at least 5 seconds or be manually dismissible.
Placeholder-only labels
Placeholder text disappears on focus and is inaccessible to screen readers. Always use explicit <label> elements. Placeholders are supplementary, not primary.
Infinite scroll on financial tables
Financial and audit data requires pagination with explicit page size controls. Infinite scroll makes it impossible to reference specific records by position and breaks auditability.
Generic "Are you sure?" dialogs
Confirmation dialogs must tell the user exactly what will happen and what data they will lose. "Are you sure you want to delete?" must become "Delete Marie Dupont and 24 related donation records? This cannot be undone."
Icons without tooltips
Icon-only buttons must always have a tooltip and an aria-label. Non-power-users cannot guess what an ambiguous icon means. Label all icon buttons.
Gradient backgrounds on data pages
Gradients create visual noise on data-dense pages. Reserve decorative gradients for marketing surfaces. Data views use flat, neutral backgrounds for maximum readability.