AI
Lovable
“Lovable Design System”
gradient-hero-dominantminimal-radius-languagesemantic-color-systemtypography-weight-hierarchyaccessibility-first-contrast
Lovable is an AI app builder with a light-theme design system centered on a vibrant gradient hero (blue-to-pink-to-orange), minimal rounded corners (8–12px), and a carefully curated semantic color palette. The design emphasizes high contrast between dark text (#1c1c1c) and light surfaces (#fcfbf8–#f7f4ed), with a single brand accent (#1f55f1 blue) for interactive elements. Typography relies on Camera Plain Variable with weight-driven hierarchy (400 for body, 600 for headings) and negative letter-spacing on larger sizes. The system prioritizes accessibility through WCAG-compliant contrast ratios and a structured spacing scale (4–12px base increments).
10Colors
7Type styles
14Spacing
6Radii
Colors
Brand
Action Primaryprimary
Primary buttons, links, and interactive highlightsAction Accentprimary
Hover and focus states on primary actionsDestructiveaccent
Error states and destructive actionsPositiveaccent
Success states and confirmationsAttentionaccent
Warning states and alertsSurface
Surface Basebackground
Primary page and card backgroundsSurface Mutedbackground
Secondary surfaces and footer backgroundsText
Text Primarytext
Body text, headings, and primary foregroundText Secondarytext
Secondary text, labels, and muted contentBorder
Border Defaultborder
Dividers, outlines, and structural bordersTypography
Page titles and hero headlines
The quick brown fox jumps
Camera Plain Variable60px · 600 · 66px · -1.5px
Section headings and major content titles
The quick brown fox jumps
Camera Plain Variable48px · 600 · 52.8px · -1.2px
Subsection headings
The quick brown fox jumps
Camera Plain Variable36px · 600 · 39.6px · -0.9px
Primary body text and default content
The quick brown fox jumps
Camera Plain Variable16px · 400 · 24px
Secondary body text
The quick brown fox jumps
Camera Plain Variable15px · 400 · 24px
Small text, labels, and captions
The quick brown fox jumps
Camera Plain Variable14px · 400 · 21px
Form labels and UI labels
The quick brown fox jumps
Camera Plain Variable14px · 480 · 21px
Fonts
Camera Plain VariableCustom
Spacing & Shape
Spacing
xs
4px
sm
6px
md
8px
lg
12px
xl
16px
2xl
20px
3xl
24px
4xl
32px
5xl
40px
6xl
48px
7xl
56px
8xl
80px
9xl
144px
10xl
160px
Border Radius
xs6px
sm8px
md12px
lg16px
xl24px
2xl28px
---
version: alpha
name: "Lovable Design System"
description: "Primary visual anchor uses #1f55f1 with primary buttons, links, and interactive highlights. Typography baseline relies on Camera Plain Variable for page titles and hero headlines."
colors:
action-accent: "#123ec5"
action-primary: "#1f55f1"
attention: "#ce4700"
destructive: "#e12429"
positive: "#338500"
surface-base: "#fcfbf8"
surface-muted: "#f7f4ed"
text-primary: "#1c1c1c"
text-secondary: "#5f5f5d"
border-default: "#eceae4"
typography:
heading-xl:
fontFamily: "Camera Plain Variable"
fontSize: "60px"
fontWeight: "600"
lineHeight: "66px"
letterSpacing: "-1.5px"
heading-lg:
fontFamily: "Camera Plain Variable"
fontSize: "48px"
fontWeight: "600"
lineHeight: "52.8px"
letterSpacing: "-1.2px"
heading-md:
fontFamily: "Camera Plain Variable"
fontSize: "36px"
fontWeight: "600"
lineHeight: "39.6px"
letterSpacing: "-0.9px"
body-lg:
fontFamily: "Camera Plain Variable"
fontSize: "16px"
fontWeight: "400"
lineHeight: "24px"
body-md:
fontFamily: "Camera Plain Variable"
fontSize: "15px"
fontWeight: "400"
lineHeight: "24px"
body-sm:
fontFamily: "Camera Plain Variable"
fontSize: "14px"
fontWeight: "400"
lineHeight: "21px"
label:
fontFamily: "Camera Plain Variable"
fontSize: "14px"
fontWeight: "480"
lineHeight: "21px"
rounded:
xs: "6px"
sm: "8px"
md: "12px"
lg: "16px"
xl: "24px"
2xl: "28px"
spacing:
xs: "4px"
sm: "6px"
md: "8px"
lg: "12px"
xl: "16px"
2xl: "20px"
3xl: "24px"
4xl: "32px"
5xl: "40px"
6xl: "48px"
7xl: "56px"
8xl: "80px"
9xl: "144px"
10xl: "160px"
---
## Overview
Primary visual anchor uses #1f55f1 with primary buttons, links, and interactive highlights. Typography baseline relies on Camera Plain Variable for page titles and hero headlines.
This system uses a 4px base grid with scale values 4, 6, 8, 12, 16, 20, 24, 32, 40, 48, 56, 80, 144, 160.
**Signature traits:**
- Core token rhythm: Token evidence indicates consistent color, spacing, and radius rhythm across visible UI.
## Colors
The palette uses 10 validated color tokens across 1 theme profile. Semantic roles stay attached to observed usage so generation agents can choose accents without inventing new color meaning.
**Semantic naming:**
- **surface-background** maps to `surface-base`: Role "background" is grounded by usage context "Primary page and card backgrounds".
- **content-text** maps to `text-primary`: Role "text" is grounded by usage context "Body text, headings, and primary foreground".
- **border-border** maps to `border-default`: Role "border" is grounded by usage context "Dividers, outlines, and structural borders".
- **action-primary** maps to `action-primary`: Role "primary" is grounded by usage context "Primary buttons, links, and interactive highlights".
### Primary Brand
- **Action Accent** (#123ec5): Hover and focus states on primary actions. Role: primary.
- **Action Primary** (#1f55f1): Primary buttons, links, and interactive highlights. Role: primary.
- **Attention** (#ce4700): Warning states and alerts. Role: accent.
- **Destructive** (#e12429): Error states and destructive actions. Role: accent.
- **Positive** (#338500): Success states and confirmations. Role: accent.
### Text Scale
- **Text Primary** (#1c1c1c): Body text, headings, and primary foreground. Role: text. {authored: rgb(28, 28, 28), space: rgb}
- **Text Secondary** (#5f5f5d): Secondary text, labels, and muted content. Role: text. {authored: rgb(95, 95, 93), space: rgb}
### Interactive
- **Border Default** (#eceae4): Dividers, outlines, and structural borders. Role: border. {authored: rgb(236, 234, 228), space: rgb}
### Surface & Shadows
- **Surface Base** (#fcfbf8): Primary page and card backgrounds. Role: background. {authored: rgb(252, 251, 248), space: rgb}
- **Surface Muted** (#f7f4ed): Secondary surfaces and footer backgrounds. Role: background. {authored: rgb(247, 244, 237), space: rgb}
## Typography
Typography uses Camera Plain Variable across extracted hierarchy roles. Keep hierarchy mapped to these token rows before adding decorative type styles.
Uses Camera Plain Variable throughout for a uniform feel. Weight range spans semi-bold, regular, medium. Sizes range from 14px to 60px.
### Font Roles
- **Headline Font**: Camera Plain Variable
- **Body Font**: Camera Plain Variable
### Type Scale Evidence
| Role | Font | Size | Weight | Line Height | Letter Spacing | Stack / Features | Notes |
|------|------|------|--------|-------------|----------------|------------------|-------|
| Page titles and hero headlines | Camera Plain Variable | 60px | 600 | 66px | -1.5px | Camera Plain Variable, ui-sans-serif, system-ui, sans-serif | Extracted token |
| Section headings and major content titles | Camera Plain Variable | 48px | 600 | 52.8px | -1.2px | Camera Plain Variable, ui-sans-serif, system-ui, sans-serif | Extracted token |
| Subsection headings | Camera Plain Variable | 36px | 600 | 39.6px | -0.9px | Camera Plain Variable, ui-sans-serif, system-ui, sans-serif | Extracted token |
| Primary body text and default content | Camera Plain Variable | 16px | 400 | 24px | normal | Camera Plain Variable, ui-sans-serif, system-ui, sans-serif | Extracted token |
| Secondary body text | Camera Plain Variable | 15px | 400 | 24px | normal | Camera Plain Variable, ui-sans-serif, system-ui, sans-serif | Extracted token |
| Small text, labels, and captions | Camera Plain Variable | 14px | 400 | 21px | normal | Camera Plain Variable, ui-sans-serif, system-ui, sans-serif | Extracted token |
| Form labels and UI labels | Camera Plain Variable | 14px | 480 | 21px | normal | Camera Plain Variable, ui-sans-serif, system-ui, sans-serif | Extracted token |
## Layout
Responsive system uses 2 breakpoint tier(s): mobile, desktop.
### Responsive Strategy
- **mobile (<= 600px)**: Constrain layout for small viewports and prioritize vertical stacking.
- **desktop (Unknown)**: Expand layout density and horizontal composition for wide viewports.
### Spacing System
| Token | Value | Px | Notes |
|------|-------|----|-------|
| xs | 4px | 4 | Extracted spacing token |
| sm | 6px | 6 | Extracted spacing token |
| md | 8px | 8 | Extracted spacing token |
| lg | 12px | 12 | Extracted spacing token |
| xl | 16px | 16 | Extracted spacing token |
| 2xl | 20px | 20 | Extracted spacing token |
| 3xl | 24px | 24 | Extracted spacing token |
| 4xl | 32px | 32 | Extracted spacing token |
| 5xl | 40px | 40 | Extracted spacing token |
| 6xl | 48px | 48 | Extracted spacing token |
| 7xl | 56px | 56 | Extracted spacing token |
| 8xl | 80px | 80 | Extracted spacing token |
| 9xl | 144px | 144 | Extracted spacing token |
| 10xl | 160px | 160 | Extracted spacing token |
## Elevation & Depth
Keep depth flat unless validated shadow or interaction evidence appears in the extraction payload. Do not invent shadows beyond this evidence boundary.
### Shadow Evidence
| Shadow Token | Layers | Details |
|--------------|--------|---------|
| n/a | 0 | No validated shadow payload |
### Interaction Signals
| Theme | Signal | Evidence |
|-------|--------|----------|
| Light | outline-style | solid |
| Light | outline-color | rgb(28, 28, 28) ; lab(0.903296 0 0) ; lab(98.2716 0 0) |
| Light | outline-width | 3px ; 2px |
| Light | outline-offset | 0px ; 2px |
| Light | transform | matrix(1, 0, 0, 1, 0, 0) ; matrix(1, 0, 0, 1, -1280, 0) ; matrix(1, 0, 0, 1, -605.388, 0) |
## Shapes
Shape language maps directly to rounded tokens. Keep component corners consistent with the role mapping below before introducing bespoke geometry.
### Radius Roles
| Token | Value | Px | Role Mapping |
|------|-------|----|--------------|
| xs | 6px | 6 | Subtle corner |
| sm | 8px | 8 | Control corner |
| md | 12px | 12 | Control corner |
| lg | 16px | 16 | Card corner |
| xl | 24px | 24 | Large surface corner |
| 2xl | 28px | 28 | Large surface corner |
### Geometry Evidence
| Radius Token | Shape | Units |
|--------------|-------|-------|
| xs | 6px | px |
| sm | 8px | px |
| md | 12px | px |
| lg | 16px | px |
| xl | 24px | px |
| 2xl | 28px | px |
## Components
(none detected)
## Do's and Don'ts
Guardrails protect Core token rhythm without adding unsupported visual claims.
| Do | Don't |
|----|---------|
| Do maintain consistent spacing using the base grid | Don't make unsupported claims about absent visual features |
| Do maintain WCAG AA contrast ratios (4.5:1 for normal text) | Don't mix rounded and sharp corners in the same view |
| Do use the primary color only for the single most important action per screen | |
| Do verify evidence before writing new design-system guidance | |
## Responsive Evidence
### Breakpoints
| Name | Width | Key Changes |
|------|-------|-------------|
| Mobile | <= 600px | (max-width: 600px) |
| Breakpoint 2 | Unknown | (-webkit-min-device-pixel-ratio: 2), (min-resolution: 2x) |
## Agent Prompt Guide
### Example Component Prompts
- Create button component using validated primary color role and spacing tokens.
- Create card component with mapped radius role and evidence-backed elevation.
- Create form input component using inferred typography hierarchy and border roles.
### Iteration Guide
1. Start with extracted palette and typography roles only.
2. Map spacing and radius directly from token tables before visual polish.
3. Apply component patterns one section at a time and compare against source intent.
4. Keep elevation claims tied to explicit evidence in output.
5. Iterate with smallest diffs and re-check section hierarchy after each change.