3.8 KiB
3.8 KiB
Galdr Design System
Brand direction
Brand: Galdr
Meaning: Norse incantation / spellcraft
Positioning: Professional customer-health intelligence with a dark, edgy, ritual-tech aesthetic.
This system blends:
26-industrialfor tactile product seriousness and mechanical confidence19-minimal-darkfor premium nocturnal polish and readability14-bold-typographyaccents for controlled punk energy
Experience principles
- Ritual over noise — the UI should feel intentional and “cast,” never chaotic.
- Dark by default — depth from layered charcoals, not pure black.
- Sharp confidence — cards/buttons carry strong edges and subtle hard shadows.
- Professional legibility — AA+ contrast and clean hierarchy at all breakpoints.
- Measured motion — short, deliberate transitions (150–250ms), no flashy gimmicks.
Core design tokens
Color tokens
--galdr-bg:#0b0b12--galdr-bg-elevated:#12121a--galdr-surface:#171724--galdr-surface-soft:#1f1f2e--galdr-border:#2d2d40--galdr-fg:#f2f2f8--galdr-fg-muted:#a8a8bc--galdr-accent:#8b5cf6(arcane violet)--galdr-accent-2:#22d3ee(frost-cyan)--galdr-danger:#f43f5e--galdr-success:#34d399
Typography
- Display + UI:
Space Grotesk,Inter,system-ui, sans-serif - Technical labels:
JetBrains Mono, monospace - Headings: weight
700 - Body: weight
400–500 - Labels/chips: uppercase + tracking
0.08em
Shape and depth
- Radius:
10px,14px,18px - Border: 1px, high-contrast dark edge
- Shadow style:
- ambient:
0 10px 30px rgba(0,0,0,0.35) - accent glow:
0 0 0 1px rgba(139,92,246,0.35), 0 0 24px rgba(139,92,246,0.18)
- ambient:
Component language
Buttons
- Primary: violet gradient fill, bright text, slight glow on hover
- Secondary: elevated dark surface with subtle border and hover brighten
- States:
- hover:
translateY(-1px) - active:
translateY(1px)+ reduced shadow - focus-visible: 2px accent ring
- hover:
Cards / panels
- Elevated dark surfaces with a soft top highlight and hard-ish outer edge
- Optional “rune rail” accent (2px violet strip) for featured modules
Inputs
- Dark recessed field
- Strong focus ring with accent and no outline suppression without replacement
Status treatment
- healthy: emerald
- at-risk: amber/violet blend
- critical: rose
- Status should use icon + text, not color only.
Layout and spacing
- Container max width:
1280px(max-w-7xl) - Section rhythm:
py-16mobile,py-24desktop - Grid spacing:
gap-4togap-8 - First paint pages to align first: Landing, Pricing, Auth, App shell
Motion and interaction
- Default transition:
200ms ease - Elevation on hover should remain subtle (no dramatic scale)
- Respect
prefers-reduced-motion
Accessibility guardrails
- Minimum text contrast: 4.5:1
- Visible keyboard focus for all interactive controls
- Semantic elements over clickable
<div>wrappers - Touch targets >= 44px
Implementation rollout
Phase 1 (foundation)
- Global tokens + typography in
web/src/index.css - Global focus ring / motion-reduction defaults
- Shared utility classes (
galdr-panel,galdr-card,galdr-button-*)
Phase 2 (brand surfaces)
- Rebrand core UI strings to Galdr
- Landing page + marketing sections refactor
- Sidebar/app shell visual alignment
Phase 3 (full convergence)
- Auth + onboarding screens styling alignment
- Pricing/SEO/legal pages finish
- Chart color/token normalization and hardcoded color cleanup
Acceptance criteria
- No new hardcoded one-off hex values in components where a token exists
- All primary CTAs use shared Galdr button patterns
- Landing, pricing, auth, and app shell all visually belong to one system
- Keyboard-only navigation has clear focus indicators on every route