1{
2 "schemaVersion": 2,
3 "generatedAt": "2026-04-29T00:00:00Z",
4 "title": "Design System: Lumina",
5 "extensions": {
6 "colorMeta": {
7 "cream": {
8 "role": "neutral",
9 "displayName": "Cream",
10 "canonical": "oklch(96.5% 0.012 80)",
11 "tonalRamp": [
12 "oklch(15% 0.012 80)",
13 "oklch(25% 0.012 80)",
14 "oklch(35% 0.012 80)",
15 "oklch(50% 0.012 80)",
16 "oklch(65% 0.012 80)",
17 "oklch(80% 0.012 80)",
18 "oklch(90% 0.012 80)",
19 "oklch(96.5% 0.012 80)"
20 ]
21 },
22 "cream-warm": {
23 "role": "neutral",
24 "displayName": "Cream Warm",
25 "canonical": "oklch(92% 0.020 75)",
26 "tonalRamp": [
27 "oklch(15% 0.020 75)",
28 "oklch(25% 0.020 75)",
29 "oklch(35% 0.020 75)",
30 "oklch(50% 0.020 75)",
31 "oklch(65% 0.020 75)",
32 "oklch(78% 0.020 75)",
33 "oklch(85% 0.020 75)",
34 "oklch(92% 0.020 75)"
35 ]
36 },
37 "peach": {
38 "role": "neutral",
39 "displayName": "Peach",
40 "canonical": "oklch(91% 0.040 60)",
41 "tonalRamp": [
42 "oklch(20% 0.040 60)",
43 "oklch(30% 0.060 60)",
44 "oklch(45% 0.080 60)",
45 "oklch(60% 0.080 60)",
46 "oklch(72% 0.060 60)",
47 "oklch(82% 0.050 60)",
48 "oklch(88% 0.045 60)",
49 "oklch(91% 0.040 60)"
50 ]
51 },
52 "line": {
53 "role": "neutral",
54 "displayName": "Line (Hairline Border)",
55 "canonical": "oklch(89% 0.018 75)",
56 "tonalRamp": [
57 "oklch(15% 0.018 75)",
58 "oklch(25% 0.018 75)",
59 "oklch(40% 0.018 75)",
60 "oklch(55% 0.018 75)",
61 "oklch(70% 0.018 75)",
62 "oklch(80% 0.018 75)",
63 "oklch(85% 0.018 75)",
64 "oklch(89% 0.018 75)"
65 ]
66 },
67 "ink": {
68 "role": "neutral",
69 "displayName": "Ink",
70 "canonical": "oklch(15% 0.010 60)",
71 "tonalRamp": [
72 "oklch(15% 0.010 60)",
73 "oklch(22% 0.010 60)",
74 "oklch(30% 0.010 60)",
75 "oklch(40% 0.010 60)",
76 "oklch(55% 0.010 60)",
77 "oklch(70% 0.010 60)",
78 "oklch(85% 0.010 60)",
79 "oklch(94% 0.010 60)"
80 ]
81 },
82 "soft": {
83 "role": "neutral",
84 "displayName": "Soft",
85 "canonical": "oklch(40% 0.012 60)",
86 "tonalRamp": [
87 "oklch(15% 0.012 60)",
88 "oklch(25% 0.012 60)",
89 "oklch(35% 0.012 60)",
90 "oklch(40% 0.012 60)",
91 "oklch(55% 0.012 60)",
92 "oklch(70% 0.012 60)",
93 "oklch(82% 0.012 60)",
94 "oklch(92% 0.012 60)"
95 ]
96 },
97 "accent": {
98 "role": "primary",
99 "displayName": "Burnt Orange Accent",
100 "canonical": "oklch(60% 0.150 40)",
101 "tonalRamp": [
102 "oklch(15% 0.060 40)",
103 "oklch(25% 0.090 40)",
104 "oklch(35% 0.120 40)",
105 "oklch(48% 0.150 40)",
106 "oklch(60% 0.150 40)",
107 "oklch(72% 0.130 40)",
108 "oklch(85% 0.080 40)",
109 "oklch(95% 0.040 40)"
110 ]
111 },
112 "accent-deep": {
113 "role": "primary",
114 "displayName": "Accent Deep",
115 "canonical": "oklch(50% 0.150 38)",
116 "tonalRamp": [
117 "oklch(15% 0.060 38)",
118 "oklch(25% 0.090 38)",
119 "oklch(35% 0.120 38)",
120 "oklch(50% 0.150 38)",
121 "oklch(62% 0.140 38)",
122 "oklch(75% 0.110 38)",
123 "oklch(86% 0.070 38)",
124 "oklch(95% 0.035 38)"
125 ]
126 }
127 },
128 "typographyMeta": {
129 "display": {
130 "displayName": "Display",
131 "purpose": "Hero headlines only. Fraunces, weight 400, optical-sized for large display."
132 },
133 "headline": {
134 "displayName": "Headline",
135 "purpose": "Section headlines (the features-head h2, cta-section h2)."
136 },
137 "title": {
138 "displayName": "Title",
139 "purpose": "Card headings inside the feature grid."
140 },
141 "lede": {
142 "displayName": "Lede",
143 "purpose": "The supporting paragraph that sits below a hero headline."
144 },
145 "body": {
146 "displayName": "Body",
147 "purpose": "Default paragraph copy. Cap line length at 65–75ch."
148 },
149 "label": {
150 "displayName": "Label",
151 "purpose": "The eyebrow chip and any small uppercase labels."
152 }
153 },
154 "shadows": [],
155 "motion": [
156 {
157 "name": "ease-button",
158 "value": "ease",
159 "duration": "150ms",
160 "purpose": "Default easing for button hover transforms."
161 },
162 {
163 "name": "ease-card",
164 "value": "ease",
165 "duration": "300ms",
166 "purpose": "Card hover transition (currently unused but reserved)."
167 }
168 ],
169 "breakpoints": [
170 { "name": "container", "value": "1180px" },
171 { "name": "logo-strip", "value": "1100px" }
172 ]
173 },
174 "components": [
175 {
176 "name": "Primary Button",
177 "kind": "button",
178 "refersTo": "button-primary",
179 "description": "The default CTA. Ink background, cream text, fully rounded.",
180 "html": "<a href=\"#\" class=\"ds-btn-primary\">Start free trial</a>",
181 "css": ".ds-btn-primary { display: inline-flex; align-items: center; gap: 8px; padding: 14px 28px; border-radius: 999px; background: #1f1a15; color: #faf6ef; font-family: 'Inter', system-ui, sans-serif; font-weight: 500; font-size: 15px; text-decoration: none; transition: transform 150ms ease; } .ds-btn-primary:hover { transform: translateY(-1px); }"
182 },
183 {
184 "name": "Ghost Button",
185 "kind": "button",
186 "refersTo": "button-ghost",
187 "description": "Secondary CTA, always paired with the primary.",
188 "html": "<a href=\"#\" class=\"ds-btn-ghost\">Watch demo</a>",
189 "css": ".ds-btn-ghost { display: inline-flex; align-items: center; gap: 8px; padding: 14px 28px; border-radius: 999px; background: transparent; color: #1f1a15; border: 1px solid #1f1a15; font-family: 'Inter', system-ui, sans-serif; font-weight: 500; font-size: 15px; text-decoration: none; transition: transform 150ms ease; } .ds-btn-ghost:hover { transform: translateY(-1px); }"
190 },
191 {
192 "name": "Nav Pill",
193 "kind": "button",
194 "refersTo": "nav-pill",
195 "description": "Compact primary CTA used in the nav. Smaller padding than the full button.",
196 "html": "<a href=\"#\" class=\"ds-nav-pill\">Get started</a>",
197 "css": ".ds-nav-pill { display: inline-flex; align-items: center; padding: 9px 18px; border-radius: 999px; background: #1f1a15; color: #faf6ef; font-family: 'Inter', system-ui, sans-serif; font-weight: 500; font-size: 14px; text-decoration: none; }"
198 },
199 {
200 "name": "Eyebrow Chip",
201 "kind": "chip",
202 "description": "The small uppercase label sitting above the hero headline. Pure typography, no background.",
203 "html": "<div class=\"ds-eyebrow\">AI-native workflows</div>",
204 "css": ".ds-eyebrow { display: inline-block; font-family: 'Inter', system-ui, sans-serif; font-size: 12px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.16em; color: #a8431f; }"
205 },
206 {
207 "name": "Feature Card",
208 "kind": "card",
209 "refersTo": "card",
210 "description": "Tonal-layered card on cream-warm with hairline border. Flat, no shadow.",
211 "html": "<div class=\"ds-card\">\n <div class=\"ds-card-icon\">⚡</div>\n <h3 class=\"ds-card-title\">Lightning Fast</h3>\n <p class=\"ds-card-body\">Move from idea to production in minutes.</p>\n</div>",
212 "css": ".ds-card { background: #f4ebdc; border: 1px solid #e6dccb; border-radius: 20px; padding: 40px 32px; text-align: center; max-width: 280px; } .ds-card-icon { width: 56px; height: 56px; border-radius: 14px; background: #faf6ef; border: 1px solid #e6dccb; display: inline-flex; align-items: center; justify-content: center; font-size: 28px; margin-bottom: 24px; } .ds-card-title { font-family: 'Fraunces', Georgia, serif; font-weight: 500; font-size: 22px; letter-spacing: -0.01em; margin: 0 0 12px; color: #1f1a15; } .ds-card-body { font-family: 'Inter', system-ui, sans-serif; font-size: 15px; color: #5b4f44; margin: 0; line-height: 1.55; }"
213 },
214 {
215 "name": "Hero Headline",
216 "kind": "custom",
217 "description": "The display-scale headline with the One-Italic Rule applied: italic accent on a single word.",
218 "html": "<h1 class=\"ds-hero-h1\">Build faster with <em>intelligent</em> workflows</h1>",
219 "css": ".ds-hero-h1 { font-family: 'Fraunces', Georgia, serif; font-weight: 400; font-size: clamp(48px, 7vw, 88px); line-height: 1.05; letter-spacing: -0.02em; color: #1f1a15; max-width: 720px; margin: 0; } .ds-hero-h1 em { font-style: italic; color: #a8431f; }"
220 },
221 {
222 "name": "Logo Strip Wordmark",
223 "kind": "custom",
224 "description": "The italic Fraunces wordmarks in the logo row — the exception to the One-Italic Rule.",
225 "html": "<span class=\"ds-logo-mark\">Northwind</span>",
226 "css": ".ds-logo-mark { font-family: 'Fraunces', Georgia, serif; font-style: italic; font-size: 22px; color: #5b4f44; }"
227 }
228 ],
229 "narrative": {
230 "northStar": "Editorial confidence in warm light.",
231 "overview": "The system reads as a printed magazine spread, transposed to a screen. Cream paper as the page surface, ink-dark headlines in Fraunces, restrained pacing carried by whitespace. Density is mid. The accent (a burnt orange warming toward the lower stop of the cream-to-peach hero gradient) appears sparingly: on the eyebrow chip, the logo dot, and the italic emphasis inside the hero headline. Nowhere else.\n\nWhat the system explicitly rejects, per PRODUCT.md anti-references: glassmorphism, dark mode with neon glow, gradient text, side-stripe accents on cards, and the broader \"Fraunces-cream-peach SaaS template\" that this very page exemplifies. The DESIGN.md documents the current visual reality so the live-mode design panel can render it accurately. The brand intent is to diffuse away from it.",
232 "keyCharacteristics": [
233 "Warm-paper palette anchored on cream (#faf6ef)",
234 "Display in Fraunces, body in Inter",
235 "Editorial-leaning layout vocabulary",
236 "Rounded throughout (14px, 20px, 999px)",
237 "Flat: no shadows, depth via tonal layering"
238 ],
239 "rules": [
240 {
241 "name": "The Cream-Family Rule",
242 "body": "Every neutral surface tints toward the brand hue. No pure white anywhere, no pure black, no untinted gray. The eye should never read this page as 'default browser.'",
243 "section": "colors"
244 },
245 {
246 "name": "The 10% Accent Rule",
247 "body": "The burnt orange covers no more than 10% of any rendered surface. Its rarity is the point.",
248 "section": "colors"
249 },
250 {
251 "name": "The One-Italic Rule",
252 "body": "Italic appears exactly once per page: on a single emphasized word inside the hero headline. Nowhere else. The logo strip's italic Fraunces wordmarks are the exception that proves it (wordmark, not running italic).",
253 "section": "typography"
254 },
255 {
256 "name": "The No-Gradient-Text Rule",
257 "body": "Type is solid color, always. The hero's cream-to-peach gradient is a section background, never a typographic effect.",
258 "section": "typography"
259 },
260 {
261 "name": "The Flat-By-Default Rule",
262 "body": "Surfaces are flat at rest. Hover lift uses transform: translateY(-1px), never a shadow. Glassmorphism, neon glow, and elevation halos are absent by design.",
263 "section": "elevation"
264 }
265 ],
266 "dos": [
267 "Do keep the burnt-orange accent under 10% of any visible surface; it's a typographic accent and a logo dot, not a button.",
268 "Do use Fraunces for display and Inter for body; respect the One-Italic Rule.",
269 "Do carry depth via tonal layering and hairline borders, not shadows.",
270 "Do tint every neutral toward the cream hue. Reject pure white and pure gray.",
271 "Do keep buttons fully rounded (999px) and cards moderately rounded (20px); the contrast is intentional."
272 ],
273 "donts": [
274 "Don't add box-shadows to surfaces. The system is flat by default; hover lift uses transform, not shadow.",
275 "Don't introduce gradient text or background-clip: text. The hero gradient is a section background, never a typographic effect.",
276 "Don't add glassmorphism, neon glow, dark mode by default, or side-stripe colored borders. All banned in PRODUCT.md anti-references.",
277 "Don't introduce a fourth color outside the cream / ink / orange family without an explicit reason recorded in PRODUCT.md.",
278 "Don't drift into the broader 'Fraunces-cream-peach SaaS template' the page already exemplifies. The PRODUCT.md anti-references this aesthetic; departure-mode variants should diffuse away from it."
279 ]
280 }
281}