riazmo commited on
Commit
578b1e3
·
2 Parent(s): d041f142c2e6a3

Merge branch 'main' of https://huggingface.co/spaces/riazmo/Design-System-Automation

Browse files

# Conflicts:
# ARCHITECTURE.md
# CLAUDE.md
# PLAN_W3C_DTCG_UPDATE.md
# PROJECT_CONTEXT.md
# docs/CONTEXT.md
# storage/benchmark_cache.json

PART2_COMPONENT_GENERATION.md ADDED
@@ -0,0 +1,418 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Design System Automation — Part 2: Component Generation
2
+
3
+ ## Session Context
4
+
5
+ **Prerequisite**: Part 1 (Token Extraction + Analysis) is COMPLETE at v3.2
6
+ - Phases 1-3 DONE: Normalizer, Stage 2 agents, Export all working
7
+ - 113 tests passing, W3C DTCG v1 compliant output
8
+ - GitHub: https://github.com/hiriazmo/design-system-automation
9
+ - Project: `/Users/yahya/design-system-automation/`
10
+
11
+ **This session**: Build automated component generation from extracted tokens into Figma.
12
+
13
+ ---
14
+
15
+ ## THE GAP: Nobody Does This
16
+
17
+ Exhaustive research of 30+ tools (Feb 2026) confirms:
18
+
19
+ **No production tool takes DTCG JSON and outputs Figma Components.**
20
+
21
+ ```
22
+ YOUR EXTRACTOR THE GAP FIGMA
23
+ +--------------+ +----------------------------+ +------------------+
24
+ | DTCG JSON |--->| ??? Nothing does this |--->| Button component |
25
+ | with tokens | | tokens -> components | | with 60 variants |
26
+ +--------------+ +----------------------------+ +------------------+
27
+ ```
28
+
29
+ ### What Exists (and What It Can't Do)
30
+
31
+ | Category | Best Tool | What It Does | Creates Components? |
32
+ |----------|-----------|-------------|-------------------|
33
+ | Token Importers | Tokens Studio (1M+ installs) | JSON -> Figma Variables | NO - variables only |
34
+ | AI Design | Figma Make | Prompt -> prototype | NO - not token-driven |
35
+ | MCP Bridges | Figma Console MCP (543 stars) | AI writes to Figma | YES but non-deterministic |
36
+ | Code-to-Figma | story.to.design | Storybook -> Figma components | YES but needs full Storybook |
37
+ | Generators | Figr Identity | Brand config -> components | YES but can't consume YOUR tokens |
38
+ | Commercial | Knapsack ($10M), Supernova | Token management | NO - manages, doesn't create |
39
+ | DEAD | Specify.app (shutting down), Backlight.dev (shut down June 2025) | - | - |
40
+
41
+ ### Key Findings Per Category
42
+
43
+ **Token Importers** (7+ tools evaluated): Tokens Studio, TokensBrucke, Styleframe, DTCG Token Manager, GitFig, Supa Design Tokens, Design System Automator — ALL create Figma Variables from JSON, NONE create components.
44
+
45
+ **MCP Bridges** (5 tools): Figma Console MCP (Southleft), claude-talk-to-figma-mcp, cursor-talk-to-figma-mcp (Grab), figma-mcp-write-server, Figma-MCP-Write-Bridge — ALL have full write access, but component creation is AI-interpreted (non-deterministic, varies per run).
46
+
47
+ **Code-to-Figma**: story.to.design is the standout — creates REAL Figma components with proper variants from Storybook. But requires a full coded component library + running Storybook instance as intermediary.
48
+
49
+ **figma-json2component** (GitHub): Experimental proof-of-concept that generates components from custom JSON schema. Not DTCG, not production quality, but validates the concept IS possible.
50
+
51
+ ---
52
+
53
+ ## FOUR APPROACHES — RANKED
54
+
55
+ ### Option A: Custom Figma Plugin (RECOMMENDED)
56
+ ```
57
+ DTCG JSON -> Your Plugin reads JSON -> Creates Variables -> Generates Components -> Done
58
+ ```
59
+ - **Effort**: 4-8 weeks (~1400 lines of plugin code for 5 MVP components)
60
+ - **Quality**: Highest — fully deterministic, consistent every run
61
+ - **Advantage**: We already have a working plugin (code.js) that imports tokens
62
+ - **Risk**: Low — Figma Plugin API supports everything needed
63
+
64
+ ### Option B: Pipeline — shadcn + Storybook + story.to.design
65
+ ```
66
+ DTCG JSON -> Style Dictionary -> CSS vars -> shadcn themed -> Storybook -> story.to.design -> Figma
67
+ ```
68
+ - **Effort**: 2-3 days setup, then 15-30 min per extraction
69
+ - **Quality**: High — battle-tested shadcn components
70
+ - **Dependency**: story.to.design (commercial, paid)
71
+ - **Risk**: Medium — many moving parts
72
+
73
+ ### Option C: MCP + Claude AI Chain
74
+ ```
75
+ DTCG JSON -> Claude reads tokens -> Figma Console MCP -> AI creates components -> Figma
76
+ ```
77
+ - **Effort**: 2-3 weeks
78
+ - **Quality**: Medium — non-deterministic
79
+ - **Risk**: High — AI output varies per run
80
+
81
+ ### Option D: Figr Identity + Manual Token Swap
82
+ ```
83
+ Figr Identity generates base system -> Manually swap tokens -> Adjust
84
+ ```
85
+ - **Effort**: 1-2 days
86
+ - **Quality**: Medium — not YOUR tokens
87
+ - **Risk**: Medium — manual alignment needed
88
+
89
+ **Decision: Option A (Custom Plugin)** — we already have 80% of the infrastructure, it's deterministic, no external dependencies, and fills a genuine market gap.
90
+
91
+ ---
92
+
93
+ ## FIGMA PLUGIN API: FULL CAPABILITY CHECK
94
+
95
+ Every feature needed for component generation is supported:
96
+
97
+ | Requirement | API Method | Status |
98
+ |------------|-----------|--------|
99
+ | Create components | `figma.createComponent()` | Supported |
100
+ | Variant sets (60 variants) | `figma.combineAsVariants()` | Supported |
101
+ | Auto-layout with padding | `layoutMode`, `paddingTop/Right/Bottom/Left`, `itemSpacing` | Supported |
102
+ | Text labels | `figma.createText()` + `loadFontAsync()` | Supported |
103
+ | Icon slot (optional) | `addComponentProperty("ShowIcon", "BOOLEAN", true)` | Supported |
104
+ | Instance swap (icons) | `addComponentProperty("Icon", "INSTANCE_SWAP", id)` | Supported |
105
+ | Border radius from tokens | `setBoundVariable('topLeftRadius', radiusVar)` | Supported |
106
+ | Colors from tokens | `setBoundVariableForPaint()` -> binds to variables | Supported |
107
+ | Shadows from tokens | `setBoundVariableForEffect()` | Supported (has spread bug, workaround exists) |
108
+ | Hover/press interactions | `node.setReactionsAsync()` with `ON_HOVER`/`ON_PRESS` | Supported |
109
+ | Expose text property | `addComponentProperty("Label", "TEXT", "Button")` | Supported |
110
+ | Disabled opacity | `node.opacity = 0.5` | Supported |
111
+
112
+ ---
113
+
114
+ ## MVP SCOPE: 5 Components, 62 Variants
115
+
116
+ | Component | Variants | Automatable? | Effort |
117
+ |-----------|---------|-------------|--------|
118
+ | **Button** | 4 variants x 3 sizes x 5 states = 60 | Fully | 2-3 days |
119
+ | **Text Input** | 4 states x 2 sizes = 8 | Fully | 1-2 days |
120
+ | **Card** | 2 configurations | Semi | 1 day |
121
+ | **Toast/Notification** | 4 types (success/error/warn/info) | Fully | 1 day |
122
+ | **Checkbox + Radio** | ~12 variants | Fully | 1-2 days |
123
+ | **Total** | **~86 variants** | | **8-12 days** |
124
+
125
+ ### Post-MVP Components
126
+
127
+ | Component | Variants | Automatable? | Effort |
128
+ |-----------|---------|-------------|--------|
129
+ | Toggle/Switch | on/off x enabled/disabled = 4 | Fully | 0.5 day |
130
+ | Select/Dropdown | Multiple states | Semi | 1-2 days |
131
+ | Modal/Dialog | 3 sizes | Semi | 1 day |
132
+ | Table | Header + data rows | Template-based | 2 days |
133
+
134
+ ---
135
+
136
+ ## TOKEN-TO-COMPONENT MAPPING
137
+
138
+ How extracted tokens bind to component properties:
139
+
140
+ ### Button Example
141
+ ```
142
+ Token -> Figma Property
143
+ -------------------------------------------------
144
+ color.brand.primary -> Fill (default state)
145
+ color.brand.600 -> Fill (hover state)
146
+ color.brand.700 -> Fill (pressed state)
147
+ color.text.inverse -> Text color
148
+ color.neutral.200 -> Fill (secondary variant)
149
+ color.neutral.300 -> Fill (secondary hover)
150
+ radius.md -> Corner radius (all corners)
151
+ shadow.sm -> Drop shadow (elevated variant)
152
+ spacing.3 -> Padding horizontal (16px)
153
+ spacing.2 -> Padding vertical (8px)
154
+ font.body.md -> Text style (label)
155
+ ```
156
+
157
+ ### Variable Collections Needed
158
+ ```
159
+ 1. Primitives -> Raw color palette (blue.50 through blue.900, etc.)
160
+ 2. Semantic -> Role-based aliases (brand.primary -> blue.500)
161
+ 3. Spacing -> 4px grid (spacing.1=4, spacing.2=8, spacing.3=12...)
162
+ 4. Radius -> none/sm/md/lg/xl/full
163
+ 5. Shadow -> xs/sm/md/lg/xl elevation levels
164
+ 6. Typography -> Font families, sizes, weights, line-heights
165
+ ```
166
+
167
+ ---
168
+
169
+ ## COMPONENT DEFINITION SCHEMA (Proposed)
170
+
171
+ Each component needs a JSON definition describing its anatomy, token bindings, and variant matrix:
172
+
173
+ ```json
174
+ {
175
+ "component": "Button",
176
+ "anatomy": {
177
+ "root": {
178
+ "type": "frame",
179
+ "layout": "horizontal",
180
+ "padding": { "h": "spacing.3", "v": "spacing.2" },
181
+ "radius": "radius.md",
182
+ "fill": "color.brand.primary",
183
+ "gap": "spacing.2"
184
+ },
185
+ "icon_slot": {
186
+ "type": "instance_swap",
187
+ "size": 16,
188
+ "visible": false,
189
+ "property": "ShowIcon"
190
+ },
191
+ "label": {
192
+ "type": "text",
193
+ "style": "font.body.md",
194
+ "color": "color.text.inverse",
195
+ "content": "Button",
196
+ "property": "Label"
197
+ }
198
+ },
199
+ "variants": {
200
+ "Variant": ["Primary", "Secondary", "Outline", "Ghost"],
201
+ "Size": ["Small", "Medium", "Large"],
202
+ "State": ["Default", "Hover", "Pressed", "Focused", "Disabled"]
203
+ },
204
+ "variant_overrides": {
205
+ "Variant=Secondary": {
206
+ "root.fill": "color.neutral.200",
207
+ "label.color": "color.text.primary"
208
+ },
209
+ "Variant=Outline": {
210
+ "root.fill": "transparent",
211
+ "root.stroke": "color.border.primary",
212
+ "root.strokeWeight": 1,
213
+ "label.color": "color.brand.primary"
214
+ },
215
+ "Variant=Ghost": {
216
+ "root.fill": "transparent",
217
+ "label.color": "color.brand.primary"
218
+ },
219
+ "State=Hover": {
220
+ "root.fill": "color.brand.600"
221
+ },
222
+ "State=Pressed": {
223
+ "root.fill": "color.brand.700"
224
+ },
225
+ "State=Disabled": {
226
+ "root.opacity": 0.5
227
+ },
228
+ "Size=Small": {
229
+ "root.padding.h": "spacing.2",
230
+ "root.padding.v": "spacing.1",
231
+ "label.style": "font.body.sm"
232
+ },
233
+ "Size=Large": {
234
+ "root.padding.h": "spacing.4",
235
+ "root.padding.v": "spacing.3",
236
+ "label.style": "font.body.lg"
237
+ }
238
+ }
239
+ }
240
+ ```
241
+
242
+ ### Component Generation Pattern (Plugin Code)
243
+
244
+ Every component follows the same pipeline:
245
+ ```
246
+ 1. Read tokens from DTCG JSON
247
+ 2. Create Variable Collections (if not exist)
248
+ 3. For each variant combination:
249
+ a. Create frame with auto-layout
250
+ b. Add child nodes (icon slot, label, etc.)
251
+ c. Apply token bindings via setBoundVariable()
252
+ d. Apply variant-specific overrides
253
+ 4. combineAsVariants() -> component set
254
+ 5. Add component properties (Label text, ShowIcon boolean)
255
+ ```
256
+
257
+ ---
258
+
259
+ ## ARCHITECTURE FOR PLUGIN EXTENSION
260
+
261
+ Current plugin (`code.js`) already does:
262
+ - Parse DTCG JSON (isDTCGFormat detection)
263
+ - Create paint styles from colors
264
+ - Create text styles from typography
265
+ - Create effect styles from shadows
266
+ - Create variable collections
267
+
268
+ What needs to be ADDED:
269
+ ```
270
+ code.js (existing ~1200 lines)
271
+ |
272
+ +-- componentGenerator.js (NEW ~1400 lines)
273
+ | |-- generateButton() ~250 lines
274
+ | |-- generateTextInput() ~200 lines
275
+ | |-- generateCard() ~150 lines
276
+ | |-- generateToast() ~150 lines
277
+ | |-- generateCheckbox() ~200 lines
278
+ | |-- generateRadio() ~150 lines
279
+ | +-- shared utilities ~300 lines
280
+ | |-- createAutoLayoutFrame()
281
+ | |-- bindTokenToVariable()
282
+ | |-- buildVariantMatrix()
283
+ | |-- resolveTokenValue()
284
+ |
285
+ +-- componentDefinitions.json (NEW ~500 lines)
286
+ |-- Button definition
287
+ |-- TextInput definition
288
+ |-- Card definition
289
+ |-- Toast definition
290
+ +-- Checkbox/Radio definition
291
+ ```
292
+
293
+ ### Implementation Order
294
+ ```
295
+ Week 1-2: Infrastructure
296
+ - Variable collection builder (primitives, semantic, spacing, radius, shadow)
297
+ - Token resolver (DTCG path -> Figma variable reference)
298
+ - Auto-layout frame builder with token bindings
299
+ - Variant matrix generator
300
+
301
+ Week 3-4: MVP Components
302
+ - Button (60 variants) — most complex, validates the full pipeline
303
+ - TextInput (8 variants) — validates form patterns
304
+ - Toast (4 variants) — validates feedback patterns
305
+
306
+ Week 5-6: Remaining MVP + Polish
307
+ - Card (2 configs) — validates layout composition
308
+ - Checkbox + Radio (12 variants) — validates toggle patterns
309
+ - Error handling, edge cases, testing
310
+
311
+ Week 7-8: Post-MVP (if time)
312
+ - Toggle/Switch, Select, Modal
313
+ - Documentation
314
+ ```
315
+
316
+ ---
317
+
318
+ ## EXISTING FILES TO KNOW ABOUT
319
+
320
+ | File | Purpose | Lines |
321
+ |------|---------|-------|
322
+ | `app.py` | Main Gradio app, token extraction orchestration | ~5000 |
323
+ | `agents/llm_agents.py` | AURORA, ATLAS, SENTINEL, NEXUS LLM agents | ~1200 |
324
+ | `agents/normalizer.py` | Token normalization (colors, radius, shadows) | ~950 |
325
+ | `core/color_classifier.py` | Rule-based color classification (PRIMARY authority) | ~815 |
326
+ | `core/color_utils.py` | Color math (hex/RGB/HSL, contrast, ramps) | ~400 |
327
+ | `core/rule_engine.py` | Type scale, WCAG, spacing grid analysis | ~1100 |
328
+ | `output_json/figma-plugin-extracted/figma-design-token-creator 5/src/code.js` | **Figma plugin — EXTEND THIS** | ~1200 |
329
+ | `output_json/figma-plugin-extracted/figma-design-token-creator 5/src/ui.html` | Plugin UI | ~500 |
330
+
331
+ ### DTCG Output Format (What the Plugin Receives)
332
+
333
+ ```json
334
+ {
335
+ "color": {
336
+ "brand": {
337
+ "primary": {
338
+ "$type": "color",
339
+ "$value": "#005aa3",
340
+ "$description": "[classifier] brand: primary_action",
341
+ "$extensions": {
342
+ "com.design-system-automation": {
343
+ "frequency": 47,
344
+ "confidence": "high",
345
+ "category": "brand",
346
+ "evidence": ["background-color on <a>", "background-color on <button>"]
347
+ }
348
+ }
349
+ }
350
+ }
351
+ },
352
+ "radius": {
353
+ "md": { "$type": "dimension", "$value": "8px" },
354
+ "lg": { "$type": "dimension", "$value": "16px" },
355
+ "full": { "$type": "dimension", "$value": "9999px" }
356
+ },
357
+ "shadow": {
358
+ "sm": {
359
+ "$type": "shadow",
360
+ "$value": {
361
+ "offsetX": "0px",
362
+ "offsetY": "2px",
363
+ "blur": "8px",
364
+ "spread": "0px",
365
+ "color": "#00000026"
366
+ }
367
+ }
368
+ },
369
+ "typography": {
370
+ "body": {
371
+ "md": {
372
+ "$type": "typography",
373
+ "$value": {
374
+ "fontFamily": "Inter",
375
+ "fontSize": "16px",
376
+ "fontWeight": 400,
377
+ "lineHeight": 1.5,
378
+ "letterSpacing": "0px"
379
+ }
380
+ }
381
+ }
382
+ },
383
+ "spacing": {
384
+ "1": { "$type": "dimension", "$value": "4px" },
385
+ "2": { "$type": "dimension", "$value": "8px" },
386
+ "3": { "$type": "dimension", "$value": "16px" }
387
+ }
388
+ }
389
+ ```
390
+
391
+ ---
392
+
393
+ ## COMPETITIVE ADVANTAGE
394
+
395
+ Building this fills a genuine market gap:
396
+ - **Tokens Studio** (1M+ installs) = token management, no component generation
397
+ - **Figr Identity** = generates components but from brand config, not YOUR tokens
398
+ - **story.to.design** = needs full Storybook pipeline as intermediary
399
+ - **MCP bridges** = non-deterministic AI interpretation
400
+ - **Us** = DTCG JSON in, deterministic Figma components out. Nobody else does this.
401
+
402
+ ### Strategic Position
403
+ ```
404
+ [Extract from website] -> [Analyze & Score] -> [Generate Components in Figma]
405
+ Part 1 (DONE) Part 1 (DONE) Part 2 (THIS)
406
+ ```
407
+
408
+ We become the only tool that goes from URL to complete Figma design system with components — fully automated.
409
+
410
+ ---
411
+
412
+ ## OPEN QUESTIONS FOR THIS SESSION
413
+
414
+ 1. Should component definitions live in JSON (data-driven) or be hardcoded in JS (simpler)?
415
+ 2. Should we generate all 60 Button variants at once, or let user pick which variants?
416
+ 3. How to handle missing tokens? (e.g., site has no shadow tokens — skip shadow on buttons or use defaults?)
417
+ 4. Should we support dark mode variants from the start, or add later?
418
+ 5. Icon system — use a bundled icon set (Lucide?) or just placeholder frames?
output_json/file (19).json ADDED
@@ -0,0 +1,1164 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "color": {
3
+ "brand": {
4
+ "primary": {
5
+ "$type": "color",
6
+ "$value": "#06b2c4"
7
+ },
8
+ "secondary": {
9
+ "$type": "color",
10
+ "$value": "#bcd432"
11
+ },
12
+ "accent": {
13
+ "$type": "color",
14
+ "$value": "#3aaede"
15
+ }
16
+ },
17
+ "text": {
18
+ "primary": {
19
+ "$type": "color",
20
+ "$value": "#373737"
21
+ },
22
+ "secondary": {
23
+ "$type": "color",
24
+ "$value": "#ffffff"
25
+ },
26
+ "muted": {
27
+ "$type": "color",
28
+ "$value": "#000000"
29
+ }
30
+ },
31
+ "bg": {
32
+ "primary": {
33
+ "$type": "color",
34
+ "$value": "#ecedee"
35
+ },
36
+ "secondary": {
37
+ "$type": "color",
38
+ "$value": "#d5d5d5"
39
+ }
40
+ },
41
+ "border": {
42
+ "primary": {
43
+ "$type": "color",
44
+ "$value": "#bbbbbb"
45
+ },
46
+ "secondary": {
47
+ "$type": "color",
48
+ "$value": "#a5a0a0"
49
+ }
50
+ },
51
+ "feedback": {
52
+ "error": {
53
+ "$type": "color",
54
+ "$value": "#ff323e"
55
+ },
56
+ "info": {
57
+ "$type": "color",
58
+ "$value": "#1883fd"
59
+ },
60
+ "warning": {
61
+ "$type": "color",
62
+ "$value": "#fee233"
63
+ }
64
+ },
65
+ "blue": {
66
+ "700": {
67
+ "50": {
68
+ "$type": "color",
69
+ "$value": "#b4daf3"
70
+ },
71
+ "100": {
72
+ "$type": "color",
73
+ "$value": "#97cef0"
74
+ },
75
+ "200": {
76
+ "$type": "color",
77
+ "$value": "#5bb5ee"
78
+ },
79
+ "300": {
80
+ "$type": "color",
81
+ "$value": "#1b9df0"
82
+ },
83
+ "400": {
84
+ "$type": "color",
85
+ "$value": "#067cc8"
86
+ },
87
+ "500": {
88
+ "$type": "color",
89
+ "$value": "#005890"
90
+ },
91
+ "600": {
92
+ "$type": "color",
93
+ "$value": "#004571"
94
+ },
95
+ "700": {
96
+ "$type": "color",
97
+ "$value": "#003252"
98
+ },
99
+ "800": {
100
+ "$type": "color",
101
+ "$value": "#001f34"
102
+ },
103
+ "900": {
104
+ "$type": "color",
105
+ "$value": "#000d15"
106
+ }
107
+ },
108
+ "800": {
109
+ "50": {
110
+ "$type": "color",
111
+ "$value": "#bec2f1"
112
+ },
113
+ "100": {
114
+ "$type": "color",
115
+ "$value": "#a5abed"
116
+ },
117
+ "200": {
118
+ "$type": "color",
119
+ "$value": "#727be8"
120
+ },
121
+ "300": {
122
+ "$type": "color",
123
+ "$value": "#3b49e6"
124
+ },
125
+ "400": {
126
+ "$type": "color",
127
+ "$value": "#1323d6"
128
+ },
129
+ "500": {
130
+ "$type": "color",
131
+ "$value": "#0a17a7"
132
+ },
133
+ "600": {
134
+ "$type": "color",
135
+ "$value": "#040f86"
136
+ },
137
+ "700": {
138
+ "$type": "color",
139
+ "$value": "#010964"
140
+ },
141
+ "800": {
142
+ "$type": "color",
143
+ "$value": "#000540"
144
+ },
145
+ "900": {
146
+ "$type": "color",
147
+ "$value": "#00021a"
148
+ }
149
+ }
150
+ },
151
+ "cyan": {
152
+ "400": {
153
+ "50": {
154
+ "$type": "color",
155
+ "$value": "#d9e9ec"
156
+ },
157
+ "100": {
158
+ "$type": "color",
159
+ "$value": "#cbe2e6"
160
+ },
161
+ "200": {
162
+ "$type": "color",
163
+ "$value": "#aed4db"
164
+ },
165
+ "300": {
166
+ "$type": "color",
167
+ "$value": "#8fc7d1"
168
+ },
169
+ "400": {
170
+ "$type": "color",
171
+ "$value": "#70bac8"
172
+ },
173
+ "500": {
174
+ "$type": "color",
175
+ "$value": "#50afc1"
176
+ },
177
+ "600": {
178
+ "$type": "color",
179
+ "$value": "#3590a1"
180
+ },
181
+ "700": {
182
+ "$type": "color",
183
+ "$value": "#256a77"
184
+ },
185
+ "800": {
186
+ "$type": "color",
187
+ "$value": "#16434c"
188
+ },
189
+ "900": {
190
+ "$type": "color",
191
+ "$value": "#081c20"
192
+ }
193
+ }
194
+ },
195
+ "neutral": {
196
+ "200": {
197
+ "50": {
198
+ "$type": "color",
199
+ "$value": "#eff0f1"
200
+ },
201
+ "100": {
202
+ "$type": "color",
203
+ "$value": "#e9ebec"
204
+ },
205
+ "200": {
206
+ "$type": "color",
207
+ "$value": "#dde0e2"
208
+ },
209
+ "300": {
210
+ "$type": "color",
211
+ "$value": "#d1d6d9"
212
+ },
213
+ "400": {
214
+ "$type": "color",
215
+ "$value": "#c6ccd0"
216
+ },
217
+ "500": {
218
+ "$type": "color",
219
+ "$value": "#bac2c7"
220
+ },
221
+ "600": {
222
+ "$type": "color",
223
+ "$value": "#8c9aa2"
224
+ },
225
+ "700": {
226
+ "$type": "color",
227
+ "$value": "#62717b"
228
+ },
229
+ "800": {
230
+ "$type": "color",
231
+ "$value": "#3d474e"
232
+ },
233
+ "900": {
234
+ "$type": "color",
235
+ "$value": "#191d20"
236
+ }
237
+ },
238
+ "400": {
239
+ "50": {
240
+ "$type": "color",
241
+ "$value": "#e6e6e6"
242
+ },
243
+ "100": {
244
+ "$type": "color",
245
+ "$value": "#dddddd"
246
+ },
247
+ "200": {
248
+ "$type": "color",
249
+ "$value": "#cccccc"
250
+ },
251
+ "300": {
252
+ "$type": "color",
253
+ "$value": "#bababa"
254
+ },
255
+ "400": {
256
+ "$type": "color",
257
+ "$value": "#a8a8a8"
258
+ },
259
+ "500": {
260
+ "$type": "color",
261
+ "$value": "#979797"
262
+ },
263
+ "600": {
264
+ "$type": "color",
265
+ "$value": "#767676"
266
+ },
267
+ "700": {
268
+ "$type": "color",
269
+ "$value": "#565656"
270
+ },
271
+ "800": {
272
+ "$type": "color",
273
+ "$value": "#363636"
274
+ },
275
+ "900": {
276
+ "$type": "color",
277
+ "$value": "#161616"
278
+ }
279
+ },
280
+ "600": {
281
+ "50": {
282
+ "$type": "color",
283
+ "$value": "#d3d8dd"
284
+ },
285
+ "100": {
286
+ "$type": "color",
287
+ "$value": "#c3cad1"
288
+ },
289
+ "200": {
290
+ "$type": "color",
291
+ "$value": "#a3aeb9"
292
+ },
293
+ "300": {
294
+ "$type": "color",
295
+ "$value": "#8392a2"
296
+ },
297
+ "400": {
298
+ "$type": "color",
299
+ "$value": "#647689"
300
+ },
301
+ "500": {
302
+ "$type": "color",
303
+ "$value": "#4c5b6a"
304
+ },
305
+ "600": {
306
+ "$type": "color",
307
+ "$value": "#3b4754"
308
+ },
309
+ "700": {
310
+ "$type": "color",
311
+ "$value": "#2a343d"
312
+ },
313
+ "800": {
314
+ "$type": "color",
315
+ "$value": "#1a2027"
316
+ },
317
+ "900": {
318
+ "$type": "color",
319
+ "$value": "#0a0d10"
320
+ }
321
+ },
322
+ "800": {
323
+ "50": {
324
+ "$type": "color",
325
+ "$value": "#c8c8c8"
326
+ },
327
+ "100": {
328
+ "$type": "color",
329
+ "$value": "#b5b5b5"
330
+ },
331
+ "200": {
332
+ "$type": "color",
333
+ "$value": "#8e8e8e"
334
+ },
335
+ "300": {
336
+ "$type": "color",
337
+ "$value": "#676767"
338
+ },
339
+ "400": {
340
+ "$type": "color",
341
+ "$value": "#404040"
342
+ },
343
+ "500": {
344
+ "$type": "color",
345
+ "$value": "#191919"
346
+ },
347
+ "600": {
348
+ "$type": "color",
349
+ "$value": "#131313"
350
+ },
351
+ "700": {
352
+ "$type": "color",
353
+ "$value": "#0e0e0e"
354
+ },
355
+ "800": {
356
+ "$type": "color",
357
+ "$value": "#090909"
358
+ },
359
+ "900": {
360
+ "$type": "color",
361
+ "$value": "#030303"
362
+ }
363
+ }
364
+ },
365
+ "orange": {
366
+ "200": {
367
+ "50": {
368
+ "$type": "color",
369
+ "$value": "#f7ecce"
370
+ },
371
+ "100": {
372
+ "$type": "color",
373
+ "$value": "#f5e6bb"
374
+ },
375
+ "200": {
376
+ "$type": "color",
377
+ "$value": "#f4db93"
378
+ },
379
+ "300": {
380
+ "$type": "color",
381
+ "$value": "#f5d069"
382
+ },
383
+ "400": {
384
+ "$type": "color",
385
+ "$value": "#f8c73c"
386
+ },
387
+ "500": {
388
+ "$type": "color",
389
+ "$value": "#ffc00e"
390
+ },
391
+ "600": {
392
+ "$type": "color",
393
+ "$value": "#d39c00"
394
+ },
395
+ "700": {
396
+ "$type": "color",
397
+ "$value": "#9a7200"
398
+ },
399
+ "800": {
400
+ "$type": "color",
401
+ "$value": "#614800"
402
+ },
403
+ "900": {
404
+ "$type": "color",
405
+ "$value": "#281d00"
406
+ }
407
+ }
408
+ },
409
+ "pink": {
410
+ "500": {
411
+ "50": {
412
+ "$type": "color",
413
+ "$value": "#f6cbf6"
414
+ },
415
+ "100": {
416
+ "$type": "color",
417
+ "$value": "#f5b7f5"
418
+ },
419
+ "200": {
420
+ "$type": "color",
421
+ "$value": "#f38df3"
422
+ },
423
+ "300": {
424
+ "$type": "color",
425
+ "$value": "#f460f4"
426
+ },
427
+ "400": {
428
+ "$type": "color",
429
+ "$value": "#f831f8"
430
+ },
431
+ "500": {
432
+ "$type": "color",
433
+ "$value": "#ff00ff"
434
+ },
435
+ "600": {
436
+ "$type": "color",
437
+ "$value": "#c800c8"
438
+ },
439
+ "700": {
440
+ "$type": "color",
441
+ "$value": "#920092"
442
+ },
443
+ "800": {
444
+ "$type": "color",
445
+ "$value": "#5c005c"
446
+ },
447
+ "900": {
448
+ "$type": "color",
449
+ "$value": "#260026"
450
+ }
451
+ },
452
+ "600": {
453
+ "50": {
454
+ "$type": "color",
455
+ "$value": "#eaccea"
456
+ },
457
+ "100": {
458
+ "$type": "color",
459
+ "$value": "#e4b9e4"
460
+ },
461
+ "200": {
462
+ "$type": "color",
463
+ "$value": "#d891d8"
464
+ },
465
+ "300": {
466
+ "$type": "color",
467
+ "$value": "#ce67ce"
468
+ },
469
+ "400": {
470
+ "$type": "color",
471
+ "$value": "#c63cc6"
472
+ },
473
+ "500": {
474
+ "$type": "color",
475
+ "$value": "#a52ba5"
476
+ },
477
+ "600": {
478
+ "$type": "color",
479
+ "$value": "#841f84"
480
+ },
481
+ "700": {
482
+ "$type": "color",
483
+ "$value": "#621562"
484
+ },
485
+ "800": {
486
+ "$type": "color",
487
+ "$value": "#3f0c3f"
488
+ },
489
+ "900": {
490
+ "$type": "color",
491
+ "$value": "#1a041a"
492
+ }
493
+ }
494
+ },
495
+ "purple": {
496
+ "400": {
497
+ "50": {
498
+ "$type": "color",
499
+ "$value": "#eedef2"
500
+ },
501
+ "100": {
502
+ "$type": "color",
503
+ "$value": "#e8d2ee"
504
+ },
505
+ "200": {
506
+ "$type": "color",
507
+ "$value": "#ddb9e7"
508
+ },
509
+ "300": {
510
+ "$type": "color",
511
+ "$value": "#d29fe2"
512
+ },
513
+ "400": {
514
+ "$type": "color",
515
+ "$value": "#c983dd"
516
+ },
517
+ "500": {
518
+ "$type": "color",
519
+ "$value": "#c067da"
520
+ },
521
+ "600": {
522
+ "$type": "color",
523
+ "$value": "#aa2dcf"
524
+ },
525
+ "700": {
526
+ "$type": "color",
527
+ "$value": "#7e1e9a"
528
+ },
529
+ "800": {
530
+ "$type": "color",
531
+ "$value": "#501162"
532
+ },
533
+ "900": {
534
+ "$type": "color",
535
+ "$value": "#210629"
536
+ }
537
+ },
538
+ "700": {
539
+ "50": {
540
+ "$type": "color",
541
+ "$value": "#cdcaec"
542
+ },
543
+ "100": {
544
+ "$type": "color",
545
+ "$value": "#bbb6e7"
546
+ },
547
+ "200": {
548
+ "$type": "color",
549
+ "$value": "#948ddd"
550
+ },
551
+ "300": {
552
+ "$type": "color",
553
+ "$value": "#6c61d5"
554
+ },
555
+ "400": {
556
+ "$type": "color",
557
+ "$value": "#4233d0"
558
+ },
559
+ "500": {
560
+ "$type": "color",
561
+ "$value": "#3023ae"
562
+ },
563
+ "600": {
564
+ "$type": "color",
565
+ "$value": "#23188b"
566
+ },
567
+ "700": {
568
+ "$type": "color",
569
+ "$value": "#181068"
570
+ },
571
+ "800": {
572
+ "$type": "color",
573
+ "$value": "#0e0842"
574
+ },
575
+ "900": {
576
+ "$type": "color",
577
+ "$value": "#05031c"
578
+ }
579
+ },
580
+ "800": {
581
+ "50": {
582
+ "$type": "color",
583
+ "$value": "#bcb5e5"
584
+ },
585
+ "100": {
586
+ "$type": "color",
587
+ "$value": "#a299dd"
588
+ },
589
+ "200": {
590
+ "$type": "color",
591
+ "$value": "#6f5fcf"
592
+ },
593
+ "300": {
594
+ "$type": "color",
595
+ "$value": "#4330b6"
596
+ },
597
+ "400": {
598
+ "$type": "color",
599
+ "$value": "#2c1e81"
600
+ },
601
+ "500": {
602
+ "$type": "color",
603
+ "$value": "#170f49"
604
+ },
605
+ "600": {
606
+ "$type": "color",
607
+ "$value": "#110a3a"
608
+ },
609
+ "700": {
610
+ "$type": "color",
611
+ "$value": "#0c062b"
612
+ },
613
+ "800": {
614
+ "$type": "color",
615
+ "$value": "#07031c"
616
+ },
617
+ "900": {
618
+ "$type": "color",
619
+ "$value": "#02010b"
620
+ }
621
+ }
622
+ },
623
+ "red": {
624
+ "500": {
625
+ "50": {
626
+ "$type": "color",
627
+ "$value": "#f6d4d2"
628
+ },
629
+ "100": {
630
+ "$type": "color",
631
+ "$value": "#f3c4c2"
632
+ },
633
+ "200": {
634
+ "$type": "color",
635
+ "$value": "#f1a19e"
636
+ },
637
+ "300": {
638
+ "$type": "color",
639
+ "$value": "#f07d79"
640
+ },
641
+ "400": {
642
+ "$type": "color",
643
+ "$value": "#f15751"
644
+ },
645
+ "500": {
646
+ "$type": "color",
647
+ "$value": "#f53028"
648
+ },
649
+ "600": {
650
+ "$type": "color",
651
+ "$value": "#db0d04"
652
+ },
653
+ "700": {
654
+ "$type": "color",
655
+ "$value": "#a30600"
656
+ },
657
+ "800": {
658
+ "$type": "color",
659
+ "$value": "#670400"
660
+ },
661
+ "900": {
662
+ "$type": "color",
663
+ "$value": "#2a0100"
664
+ }
665
+ }
666
+ },
667
+ "yellow": {
668
+ "100": {
669
+ "50": {
670
+ "$type": "color",
671
+ "$value": "#f6f3cb"
672
+ },
673
+ "100": {
674
+ "$type": "color",
675
+ "$value": "#f5f0b7"
676
+ },
677
+ "200": {
678
+ "$type": "color",
679
+ "$value": "#f3ec8d"
680
+ },
681
+ "300": {
682
+ "$type": "color",
683
+ "$value": "#f4e960"
684
+ },
685
+ "400": {
686
+ "$type": "color",
687
+ "$value": "#f8e931"
688
+ },
689
+ "500": {
690
+ "$type": "color",
691
+ "$value": "#ffec00"
692
+ },
693
+ "600": {
694
+ "$type": "color",
695
+ "$value": "#c8b900"
696
+ },
697
+ "700": {
698
+ "$type": "color",
699
+ "$value": "#928700"
700
+ },
701
+ "800": {
702
+ "$type": "color",
703
+ "$value": "#5c5500"
704
+ },
705
+ "900": {
706
+ "$type": "color",
707
+ "$value": "#262300"
708
+ }
709
+ }
710
+ }
711
+ },
712
+ "font": {
713
+ "display": {
714
+ "2xl": {
715
+ "desktop": {
716
+ "$type": "typography",
717
+ "$value": {
718
+ "fontFamily": "Open Sans",
719
+ "fontSize": "68px",
720
+ "fontWeight": "700",
721
+ "lineHeight": "1.2"
722
+ }
723
+ },
724
+ "mobile": {
725
+ "$type": "typography",
726
+ "$value": {
727
+ "fontFamily": "Open Sans",
728
+ "fontSize": "60px",
729
+ "fontWeight": "700",
730
+ "lineHeight": "1.2"
731
+ }
732
+ }
733
+ },
734
+ "xl": {
735
+ "desktop": {
736
+ "$type": "typography",
737
+ "$value": {
738
+ "fontFamily": "Open Sans",
739
+ "fontSize": "58px",
740
+ "fontWeight": "700",
741
+ "lineHeight": "1.2"
742
+ }
743
+ },
744
+ "mobile": {
745
+ "$type": "typography",
746
+ "$value": {
747
+ "fontFamily": "Open Sans",
748
+ "fontSize": "50px",
749
+ "fontWeight": "700",
750
+ "lineHeight": "1.2"
751
+ }
752
+ }
753
+ },
754
+ "lg": {
755
+ "desktop": {
756
+ "$type": "typography",
757
+ "$value": {
758
+ "fontFamily": "Open Sans",
759
+ "fontSize": "48px",
760
+ "fontWeight": "700",
761
+ "lineHeight": "1.2"
762
+ }
763
+ },
764
+ "mobile": {
765
+ "$type": "typography",
766
+ "$value": {
767
+ "fontFamily": "Open Sans",
768
+ "fontSize": "42px",
769
+ "fontWeight": "700",
770
+ "lineHeight": "1.2"
771
+ }
772
+ }
773
+ },
774
+ "md": {
775
+ "desktop": {
776
+ "$type": "typography",
777
+ "$value": {
778
+ "fontFamily": "Open Sans",
779
+ "fontSize": "40px",
780
+ "fontWeight": "700",
781
+ "lineHeight": "1.2"
782
+ }
783
+ },
784
+ "mobile": {
785
+ "$type": "typography",
786
+ "$value": {
787
+ "fontFamily": "Open Sans",
788
+ "fontSize": "34px",
789
+ "fontWeight": "700",
790
+ "lineHeight": "1.2"
791
+ }
792
+ }
793
+ }
794
+ },
795
+ "heading": {
796
+ "xl": {
797
+ "desktop": {
798
+ "$type": "typography",
799
+ "$value": {
800
+ "fontFamily": "Open Sans",
801
+ "fontSize": "34px",
802
+ "fontWeight": "600",
803
+ "lineHeight": "1.3"
804
+ }
805
+ },
806
+ "mobile": {
807
+ "$type": "typography",
808
+ "$value": {
809
+ "fontFamily": "Open Sans",
810
+ "fontSize": "30px",
811
+ "fontWeight": "600",
812
+ "lineHeight": "1.3"
813
+ }
814
+ }
815
+ },
816
+ "lg": {
817
+ "desktop": {
818
+ "$type": "typography",
819
+ "$value": {
820
+ "fontFamily": "Open Sans",
821
+ "fontSize": "28px",
822
+ "fontWeight": "600",
823
+ "lineHeight": "1.3"
824
+ }
825
+ },
826
+ "mobile": {
827
+ "$type": "typography",
828
+ "$value": {
829
+ "fontFamily": "Open Sans",
830
+ "fontSize": "24px",
831
+ "fontWeight": "600",
832
+ "lineHeight": "1.3"
833
+ }
834
+ }
835
+ },
836
+ "md": {
837
+ "desktop": {
838
+ "$type": "typography",
839
+ "$value": {
840
+ "fontFamily": "Open Sans",
841
+ "fontSize": "24px",
842
+ "fontWeight": "600",
843
+ "lineHeight": "1.3"
844
+ }
845
+ },
846
+ "mobile": {
847
+ "$type": "typography",
848
+ "$value": {
849
+ "fontFamily": "Open Sans",
850
+ "fontSize": "20px",
851
+ "fontWeight": "600",
852
+ "lineHeight": "1.3"
853
+ }
854
+ }
855
+ },
856
+ "sm": {
857
+ "desktop": {
858
+ "$type": "typography",
859
+ "$value": {
860
+ "fontFamily": "Open Sans",
861
+ "fontSize": "20px",
862
+ "fontWeight": "600",
863
+ "lineHeight": "1.3"
864
+ }
865
+ },
866
+ "mobile": {
867
+ "$type": "typography",
868
+ "$value": {
869
+ "fontFamily": "Open Sans",
870
+ "fontSize": "16px",
871
+ "fontWeight": "600",
872
+ "lineHeight": "1.3"
873
+ }
874
+ }
875
+ }
876
+ },
877
+ "body": {
878
+ "lg": {
879
+ "desktop": {
880
+ "$type": "typography",
881
+ "$value": {
882
+ "fontFamily": "Open Sans",
883
+ "fontSize": "16px",
884
+ "fontWeight": "400",
885
+ "lineHeight": "1.5"
886
+ }
887
+ },
888
+ "mobile": {
889
+ "$type": "typography",
890
+ "$value": {
891
+ "fontFamily": "Open Sans",
892
+ "fontSize": "14px",
893
+ "fontWeight": "400",
894
+ "lineHeight": "1.5"
895
+ }
896
+ }
897
+ },
898
+ "md": {
899
+ "desktop": {
900
+ "$type": "typography",
901
+ "$value": {
902
+ "fontFamily": "Open Sans",
903
+ "fontSize": "14px",
904
+ "fontWeight": "400",
905
+ "lineHeight": "1.5"
906
+ }
907
+ },
908
+ "mobile": {
909
+ "$type": "typography",
910
+ "$value": {
911
+ "fontFamily": "Open Sans",
912
+ "fontSize": "12px",
913
+ "fontWeight": "400",
914
+ "lineHeight": "1.5"
915
+ }
916
+ }
917
+ },
918
+ "sm": {
919
+ "desktop": {
920
+ "$type": "typography",
921
+ "$value": {
922
+ "fontFamily": "Open Sans",
923
+ "fontSize": "12px",
924
+ "fontWeight": "400",
925
+ "lineHeight": "1.5"
926
+ }
927
+ },
928
+ "mobile": {
929
+ "$type": "typography",
930
+ "$value": {
931
+ "fontFamily": "Open Sans",
932
+ "fontSize": "10px",
933
+ "fontWeight": "400",
934
+ "lineHeight": "1.5"
935
+ }
936
+ }
937
+ }
938
+ },
939
+ "caption": {
940
+ "desktop": {
941
+ "$type": "typography",
942
+ "$value": {
943
+ "fontFamily": "Open Sans",
944
+ "fontSize": "10px",
945
+ "fontWeight": "400",
946
+ "lineHeight": "1.4"
947
+ }
948
+ },
949
+ "mobile": {
950
+ "$type": "typography",
951
+ "$value": {
952
+ "fontFamily": "Open Sans",
953
+ "fontSize": "10px",
954
+ "fontWeight": "400",
955
+ "lineHeight": "1.4"
956
+ }
957
+ }
958
+ },
959
+ "overline": {
960
+ "desktop": {
961
+ "$type": "typography",
962
+ "$value": {
963
+ "fontFamily": "Open Sans",
964
+ "fontSize": "10px",
965
+ "fontWeight": "500",
966
+ "lineHeight": "1.2"
967
+ }
968
+ },
969
+ "mobile": {
970
+ "$type": "typography",
971
+ "$value": {
972
+ "fontFamily": "Open Sans",
973
+ "fontSize": "10px",
974
+ "fontWeight": "500",
975
+ "lineHeight": "1.2"
976
+ }
977
+ }
978
+ }
979
+ },
980
+ "space": {
981
+ "1": {
982
+ "desktop": {
983
+ "$type": "dimension",
984
+ "$value": "8px"
985
+ },
986
+ "mobile": {
987
+ "$type": "dimension",
988
+ "$value": "8px"
989
+ }
990
+ },
991
+ "2": {
992
+ "desktop": {
993
+ "$type": "dimension",
994
+ "$value": "16px"
995
+ },
996
+ "mobile": {
997
+ "$type": "dimension",
998
+ "$value": "16px"
999
+ }
1000
+ },
1001
+ "3": {
1002
+ "desktop": {
1003
+ "$type": "dimension",
1004
+ "$value": "24px"
1005
+ },
1006
+ "mobile": {
1007
+ "$type": "dimension",
1008
+ "$value": "24px"
1009
+ }
1010
+ },
1011
+ "4": {
1012
+ "desktop": {
1013
+ "$type": "dimension",
1014
+ "$value": "32px"
1015
+ },
1016
+ "mobile": {
1017
+ "$type": "dimension",
1018
+ "$value": "32px"
1019
+ }
1020
+ },
1021
+ "5": {
1022
+ "desktop": {
1023
+ "$type": "dimension",
1024
+ "$value": "40px"
1025
+ },
1026
+ "mobile": {
1027
+ "$type": "dimension",
1028
+ "$value": "40px"
1029
+ }
1030
+ },
1031
+ "6": {
1032
+ "desktop": {
1033
+ "$type": "dimension",
1034
+ "$value": "48px"
1035
+ },
1036
+ "mobile": {
1037
+ "$type": "dimension",
1038
+ "$value": "48px"
1039
+ }
1040
+ },
1041
+ "8": {
1042
+ "desktop": {
1043
+ "$type": "dimension",
1044
+ "$value": "56px"
1045
+ },
1046
+ "mobile": {
1047
+ "$type": "dimension",
1048
+ "$value": "56px"
1049
+ }
1050
+ },
1051
+ "10": {
1052
+ "desktop": {
1053
+ "$type": "dimension",
1054
+ "$value": "64px"
1055
+ },
1056
+ "mobile": {
1057
+ "$type": "dimension",
1058
+ "$value": "64px"
1059
+ }
1060
+ },
1061
+ "12": {
1062
+ "desktop": {
1063
+ "$type": "dimension",
1064
+ "$value": "72px"
1065
+ },
1066
+ "mobile": {
1067
+ "$type": "dimension",
1068
+ "$value": "72px"
1069
+ }
1070
+ },
1071
+ "16": {
1072
+ "desktop": {
1073
+ "$type": "dimension",
1074
+ "$value": "80px"
1075
+ },
1076
+ "mobile": {
1077
+ "$type": "dimension",
1078
+ "$value": "80px"
1079
+ }
1080
+ }
1081
+ },
1082
+ "radius": {
1083
+ "xs": {
1084
+ "$type": "dimension",
1085
+ "$value": "1px"
1086
+ },
1087
+ "sm": {
1088
+ "$type": "dimension",
1089
+ "$value": "2px"
1090
+ },
1091
+ "md": {
1092
+ "$type": "dimension",
1093
+ "$value": "4px"
1094
+ },
1095
+ "lg": {
1096
+ "$type": "dimension",
1097
+ "$value": "8px"
1098
+ },
1099
+ "xl": {
1100
+ "$type": "dimension",
1101
+ "$value": "16px"
1102
+ },
1103
+ "3xl": {
1104
+ "$type": "dimension",
1105
+ "$value": "50px"
1106
+ },
1107
+ "full": {
1108
+ "$type": "dimension",
1109
+ "$value": "9999px"
1110
+ }
1111
+ },
1112
+ "shadow": {
1113
+ "xs": {
1114
+ "$type": "shadow",
1115
+ "$value": {
1116
+ "color": "rgba(0, 0, 0, 0.5)",
1117
+ "offsetX": "0.0px",
1118
+ "offsetY": "2.0px",
1119
+ "blur": "4.0px",
1120
+ "spread": "0.0px"
1121
+ }
1122
+ },
1123
+ "sm": {
1124
+ "$type": "shadow",
1125
+ "$value": {
1126
+ "color": "rgba(0, 0, 0, 0.412)",
1127
+ "offsetX": "0.0px",
1128
+ "offsetY": "1.5px",
1129
+ "blur": "7.0px",
1130
+ "spread": "0.0px"
1131
+ }
1132
+ },
1133
+ "md": {
1134
+ "$type": "shadow",
1135
+ "$value": {
1136
+ "color": "rgba(0, 0, 0, 0.325)",
1137
+ "offsetX": "0.0px",
1138
+ "offsetY": "1.0px",
1139
+ "blur": "10.0px",
1140
+ "spread": "0.0px"
1141
+ }
1142
+ },
1143
+ "lg": {
1144
+ "$type": "shadow",
1145
+ "$value": {
1146
+ "color": "rgba(0, 0, 0, 0.238)",
1147
+ "offsetX": "0.0px",
1148
+ "offsetY": "0.5px",
1149
+ "blur": "13.0px",
1150
+ "spread": "0.0px"
1151
+ }
1152
+ },
1153
+ "xl": {
1154
+ "$type": "shadow",
1155
+ "$value": {
1156
+ "color": "rgba(0, 0, 0, 0.15)",
1157
+ "offsetX": "0.0px",
1158
+ "offsetY": "0.0px",
1159
+ "blur": "16.0px",
1160
+ "spread": "0.0px"
1161
+ }
1162
+ }
1163
+ }
1164
+ }