---
name: lovable-design-reference
provider: DesignSkill (https://designskill.dev)
reference: lovable.dev
source_url: https://lovable.dev/
tool: designskill-extract/3.2.0
extracted_at: 2026-07-27T08:56:50.717Z
mode: full-render
classification: reference_only
---

# Lovable — Design Reference (measured)

Measured design tokens extracted from `https://lovable.dev/` by designskill-extract/3.2.0.
Every value below was observed in the live page (×N = observation count). Values not listed were **not observed** — do not invent them.
This document is `reference_only`: an analysis of a third-party site, not a license to its brand assets.

## Overview

- Extraction mode: **full-render** (viewports 390/768/1440px × light/dark), 1 page(s), 534 observation records.
- Primary action color observed as `#091a48` (basis: inferred, confidence 0.54).
- Dominant font family: **Camera Plain Variable** (×808; secondary Roboto Mono Variable ×6).
- Type scale observed at 8 sizes from 14px to 60px.
- Corner radius values in use: 12px, 8px, 16px, 24px….
- Not observed in this extraction: forms.

## Colors

### Role Tokens

Semantic roles inferred from observed usage. `basis` tells how the role was established (declared CSS var > cross-validated > inferred).

| Token | Value | Basis | Confidence | Observed |
|---|---|---|---|---|
| `{color.primary}` | `#091a48` | inferred | 0.54 | ×4 |
| `{color.background}` | `#ffffff` | cross-validated | 0.93 | ×228 |
| `{color.ink}` | `#000000` | cross-validated | 0.93 | ×261 |
| `{color.muted}` | `#777771` | inferred | 0.6 | ×36 |
| `{color.surface}` | `#f7f4ed` | inferred | 0.7 | ×47 |
| `{color.accent}` | `#420a25` | inferred | 0.57 | ×4 |

### Observed Palette

Full measured palette ordered by usage share. `Used in` lists the CSS properties the color appeared on.

| Hex | Share | Used in | Observed |
|---|---|---|---|
| `#000000` | 27.4% | background-color, border-color, color, --tw-shadow | ×261 (cross-validated, 0.93) |
| `#ffffff` | 23.9% | background-color, border-color, color, --tw-shadow | ×228 (cross-validated, 0.93) |
| `#f7f4ed` | 4.9% | background-color | ×47 (observed, 0.76) |
| `#272725` | 4.9% | background-color | ×47 (observed, 0.76) |
| `#1f1f1e` | 10.8% | background-color, color, --tw-shadow | ×103 (cross-validated, 0.92) |
| `#777771` | 3.8% | background-color, border-color, color, box-shadow | ×36 (inferred, 0.6) |
| `#767676` | 3.4% | --tw-shadow, -webkit-mask-image | ×32 (inferred, 0.6) |
| `#ff8b61` | 1.1% | background-color, border-color, color, --tw-ring-color | ×11 (inferred, 0.59) |
| `#749df7` | 1.6% | border-color, background-color | ×15 (inferred, 0.59) |
| `#fd49a8` | 0.8% | background-color | ×8 (inferred, 0.58) |
| `#4f88ff` | 2.9% | background-color | ×28 (inferred, 0.6) |
| `#7491ff` | 0.7% | background-color | ×7 (inferred, 0.58) |
| `#b0acfe` | 0.7% | background-color | ×7 (inferred, 0.58) |
| `#ceaffb` | 0.7% | background-color | ×7 (inferred, 0.58) |
| `#e2a5f2` | 0.7% | background-color | ×7 (inferred, 0.58) |
| `#f388de` | 0.7% | background-color | ×7 (inferred, 0.58) |

## Typography

### Font Families

| Family | Observed |
|---|---|
| `Camera Plain Variable` | ×808 |
| `Roboto Mono Variable` | ×6 |
| `Menlo` | ×1 |
| `Arial` | ×1 |
| `monospace` | ×1 |

Use **Camera Plain Variable** as the default family — it accounts for the overwhelming majority of observed text nodes.

### Type Scale

| Token | Size | Observed |
|---|---|---|
| `{type.display}` | 60px | ×16 |
| `{type.h1}` | 48px | ×24 |
| `{type.h2}` | 36px | ×24 |
| `{type.h3}` | 20px | ×10 |
| `{type.body-lg}` | 18px | ×46 |
| `{type.body}` | 16px | ×89 |
| `{type.body-sm}` | 15px | ×15 |
| `{type.caption}` | 14px | ×586 |

The most frequently observed size is **14px** (×586) — treat it as the default body size.

## Spacing

| Value | Observed |
|---|---|
| `8px` | ×517 |
| `6px` | ×392 |
| `4px` | ×181 |
| `24px` | ×86 |
| `16px` | ×60 |
| `80px` | ×38 |
| `12px` | ×32 |
| `10px` | ×32 |
| `32px` | ×30 |
| `40px` | ×22 |
| `144px` | ×18 |
| `2px` | ×14 |

## Shape (Border Radius)

| Value | Observed |
|---|---|
| `12px` | ×144 |
| `8px` | ×99 |
| `16px` | ×30 |
| `24px` | ×18 |
| `28px` | ×12 |
| `6px` | ×10 |
| `32px` | ×6 |
| `5px` | ×5 |

## Elevation

| Shadow | Observed |
|---|---|
| `#777771` | ×24 |
| `oklch(0 0 0 / 0.16) 0px 0px 0px 1px inset` | ×9 |
| `oklch(1 0 0 / 0.16) 0px 0px 0px 1px inset` | ×9 |
| `var(--shadow-button-neutral)` | ×6 |
| `color(srgb 0.0860868 0.0861112 0.0861135 / 0.12) 0px 2px 2px -1px, color(srgb 0.0860868 0.0861112 0.0861135 / 0.12) 0px 4px 4px -2px` | ×6 |
| `var(--shadow-input-base), inset 0 0 0 1px var(--border-destructive)` | ×4 |

## Motion

| Duration | Observed |
|---|---|
| `0.15s` | ×168 |
| `0.3s` | ×30 |
| `0.2s` | ×22 |
| `.15s` | ×16 |
| `0.5s` | ×12 |

## Components

Measured computed styles of representative components (desktop viewport).

| Component | Measured spec | Samples |
|---|---|---|
| card | radius `32px` · shadow `rgb(255, 255, 255) 0px 0px 0px 1px, oklch(0.9851 0 107) 0px 0px 0px 1px, rgba(119, 119, 113, 0.16) 0px 0px 0px 2px, rgba(0, 0, 0, 0.04) 0px 2px 1px 0px` · padding `24px` | ×1 |
| badge | bg `#030303` · text `#fafafa` · radius `6px` · font `14px/480` · padding `0px` | ×1 |
| nav | height `32px` · position `relative` · link `#030303` | — |

### Hero Gradient (observed)

```css
background-image: linear-gradient(90deg, rgb(28, 28, 28) 0px, rgb(28, 28, 28) 33.33%, rgb(130, 188, 255) 40%, rgb(36, 131, 255) 45%, rgb(255, 102, 244) 50%, rgb(255, 48, 41) 55%, rgb(254, 123, 2) 60%, rgba(0, 0, 0, 0) 66.67%, rgba(0, 0, 0, 0));
```

## Accessibility (WCAG Contrast)

| FG | BG | Ratio | AA | Source |
|---|---|---|---|---|
| `#030303` | `#fcfbf8` | 19.93 | pass | observed ×48 |
| `#1c1c1c` | `#fcfbf8` | 16.47 | pass | observed ×18 |
| `#030303` | `#f7f4ed` | 18.78 | pass | observed ×15 |
| `#fafafa` | `#030303` | 19.76 | pass | observed ×3 |
| `#5f5f5d` | `#fcfbf8` | 6.18 | pass | observed ×3 |
| `#5f5f5d` | `#f7f4ed` | 5.83 | pass | observed ×3 |
| `#000000` | `#ffffff` | 21 | pass | ink_on_background |
| `#ffffff` | `#091a48` | 16.76 | pass | white_on_primary |
| `#777771` | `#ffffff` | 4.5 | pass | muted_on_background |


## Usage Rules

### Do
- Use `{color.primary}` (`#091a48`) for primary actions only — that is where it was observed.
- Default text pairing: `{color.ink}` (`#000000`) on `{color.background}` (`#ffffff`).
- Set all text in `Camera Plain Variable` (fallbacks only for glyph coverage).
- Pick corner radii from the measured set (12px, 8px, 16px, 24px) — no intermediate values were observed.
- Cite this file's token names (`{color.*}`, `{type.*}`) when generating UI so output stays traceable to observations.

### Don't
- Don't invent colors, sizes, shadows, or spacing not listed above — absence means *not observed*, and this document records observations only.
- Don't assume the missing blocks (forms) don't exist on the site — they were simply not captured in this run.
- Don't copy brand assets (logo, wordmark, imagery, copy) — `reference_only` covers measured style values, not brand identity.
- Treat `{color.primary}`, `{color.accent}` with caution — confidence below 0.6.

## Provenance

- Source: https://lovable.dev/ (1 page(s))
- Tool: designskill-extract/3.2.0 · extracted 2026-07-27T08:56:50.717Z
- Mode: full-render — 풀렌더 모드 — 3뷰포트 × 라이트/다크 computed style + 상태 관측.
- Blocks observed: 00, 01, 02, 03, 04, 05, 07, 08, 09, 10, 11, 12 · missing: forms
- Warning: primary 불일치: static=#ff8b61 vs render=#091a48 — render 채택

---

<sub>Generated & served by [DesignSkill](https://designskill.dev)</sub>
