@7onic-ui/tokens 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,924 @@
1
+ /**
2
+ * Design System - CSS Variables
3
+ * ⚠️ Auto-generated from figma-tokens.json — DO NOT EDIT
4
+ *
5
+ * No Tailwind required. Just import:
6
+ * @import '@7onic-ui/tokens/css/variables.css';
7
+ *
8
+ * Regenerate: npx sync-tokens
9
+ */
10
+
11
+ :root {
12
+ /* ========================================
13
+ Primitive Colors
14
+ Raw color palette — the building blocks
15
+ for semantic color tokens
16
+ ======================================== */
17
+
18
+ /* Base */
19
+ --color-white: #FFFFFF;
20
+ --color-white-rgb: 255 255 255;
21
+ --color-black: #000000;
22
+ --color-black-rgb: 0 0 0;
23
+
24
+ /* Gray */
25
+ --color-gray-50: #F9F9FA;
26
+ --color-gray-50-rgb: 249 249 250;
27
+ --color-gray-100: #F4F4F5;
28
+ --color-gray-100-rgb: 244 244 245;
29
+ --color-gray-200: #E4E4E6;
30
+ --color-gray-200-rgb: 228 228 230;
31
+ --color-gray-300: #D4D4D5;
32
+ --color-gray-300-rgb: 212 212 213;
33
+ --color-gray-400: #9A9A9B;
34
+ --color-gray-400-rgb: 154 154 155;
35
+ --color-gray-500: #6B6B6C;
36
+ --color-gray-500-rgb: 107 107 108;
37
+ --color-gray-600: #4A4A4B;
38
+ --color-gray-600-rgb: 74 74 75;
39
+ --color-gray-700: #3A3A3E;
40
+ --color-gray-700-rgb: 58 58 62;
41
+ --color-gray-800: #2D2D31;
42
+ --color-gray-800-rgb: 45 45 49;
43
+ --color-gray-900: #222225;
44
+ --color-gray-900-rgb: 34 34 37;
45
+
46
+ /* Primary */
47
+ --color-primary-50: #DBF8FB;
48
+ --color-primary-50-rgb: 219 248 251;
49
+ --color-primary-100: #B2F0F5;
50
+ --color-primary-100-rgb: 178 240 245;
51
+ --color-primary-200: #89E8F0;
52
+ --color-primary-200-rgb: 137 232 240;
53
+ --color-primary-300: #60E0EB;
54
+ --color-primary-300-rgb: 96 224 235;
55
+ --color-primary-400: #37D8E6;
56
+ --color-primary-400-rgb: 55 216 230;
57
+ --color-primary-500: #1AC6D5;
58
+ --color-primary-500-rgb: 26 198 213;
59
+ --color-primary-600: #15A0AC;
60
+ --color-primary-600-rgb: 21 160 172;
61
+ --color-primary-700: #107A84;
62
+ --color-primary-700-rgb: 16 122 132;
63
+ --color-primary-800: #0B545B;
64
+ --color-primary-800-rgb: 11 84 91;
65
+ --color-primary-900: #062E32;
66
+ --color-primary-900-rgb: 6 46 50;
67
+
68
+ /* Secondary */
69
+ --color-secondary-50: #F5F5FB;
70
+ --color-secondary-50-rgb: 245 245 251;
71
+ --color-secondary-100: #EBEBF5;
72
+ --color-secondary-100-rgb: 235 235 245;
73
+ --color-secondary-200: #D9D9E9;
74
+ --color-secondary-200-rgb: 217 217 233;
75
+ --color-secondary-300: #BCBCD2;
76
+ --color-secondary-300-rgb: 188 188 210;
77
+ --color-secondary-400: #8F8FA9;
78
+ --color-secondary-400-rgb: 143 143 169;
79
+ --color-secondary-500: #69697F;
80
+ --color-secondary-500-rgb: 105 105 127;
81
+ --color-secondary-600: #4E4E60;
82
+ --color-secondary-600-rgb: 78 78 96;
83
+ --color-secondary-700: #3B3B4A;
84
+ --color-secondary-700-rgb: 59 59 74;
85
+ --color-secondary-800: #2F2F3B;
86
+ --color-secondary-800-rgb: 47 47 59;
87
+ --color-secondary-900: #23232D;
88
+ --color-secondary-900-rgb: 35 35 45;
89
+
90
+ /* Blue */
91
+ --color-blue-50: #EFF6FF;
92
+ --color-blue-50-rgb: 239 246 255;
93
+ --color-blue-100: #DBEAFE;
94
+ --color-blue-100-rgb: 219 234 254;
95
+ --color-blue-200: #BFDBFE;
96
+ --color-blue-200-rgb: 191 219 254;
97
+ --color-blue-300: #93C5FD;
98
+ --color-blue-300-rgb: 147 197 253;
99
+ --color-blue-400: #60A5FA;
100
+ --color-blue-400-rgb: 96 165 250;
101
+ --color-blue-500: #3B82F6;
102
+ --color-blue-500-rgb: 59 130 246;
103
+ --color-blue-600: #2563EB;
104
+ --color-blue-600-rgb: 37 99 235;
105
+ --color-blue-700: #1D4ED8;
106
+ --color-blue-700-rgb: 29 78 216;
107
+ --color-blue-800: #1E40AF;
108
+ --color-blue-800-rgb: 30 64 175;
109
+ --color-blue-900: #1E3A8A;
110
+ --color-blue-900-rgb: 30 58 138;
111
+
112
+ /* Green */
113
+ --color-green-50: #ECFDF5;
114
+ --color-green-50-rgb: 236 253 245;
115
+ --color-green-100: #D1FAE5;
116
+ --color-green-100-rgb: 209 250 229;
117
+ --color-green-200: #A7F3D0;
118
+ --color-green-200-rgb: 167 243 208;
119
+ --color-green-300: #6EE7B7;
120
+ --color-green-300-rgb: 110 231 183;
121
+ --color-green-400: #34D399;
122
+ --color-green-400-rgb: 52 211 153;
123
+ --color-green-500: #10B981;
124
+ --color-green-500-rgb: 16 185 129;
125
+ --color-green-600: #059669;
126
+ --color-green-600-rgb: 5 150 105;
127
+ --color-green-700: #047857;
128
+ --color-green-700-rgb: 4 120 87;
129
+ --color-green-800: #065F46;
130
+ --color-green-800-rgb: 6 95 70;
131
+ --color-green-900: #064E3B;
132
+ --color-green-900-rgb: 6 78 59;
133
+
134
+ /* Yellow */
135
+ --color-yellow-50: #FFFBEB;
136
+ --color-yellow-50-rgb: 255 251 235;
137
+ --color-yellow-100: #FEF3C7;
138
+ --color-yellow-100-rgb: 254 243 199;
139
+ --color-yellow-200: #FDE68A;
140
+ --color-yellow-200-rgb: 253 230 138;
141
+ --color-yellow-300: #FCD34D;
142
+ --color-yellow-300-rgb: 252 211 77;
143
+ --color-yellow-400: #FBBF24;
144
+ --color-yellow-400-rgb: 251 191 36;
145
+ --color-yellow-500: #F59E0B;
146
+ --color-yellow-500-rgb: 245 158 11;
147
+ --color-yellow-600: #D97706;
148
+ --color-yellow-600-rgb: 217 119 6;
149
+ --color-yellow-700: #B45309;
150
+ --color-yellow-700-rgb: 180 83 9;
151
+ --color-yellow-800: #92400E;
152
+ --color-yellow-800-rgb: 146 64 14;
153
+ --color-yellow-900: #78350F;
154
+ --color-yellow-900-rgb: 120 53 15;
155
+
156
+ /* Red */
157
+ --color-red-50: #FEF2F2;
158
+ --color-red-50-rgb: 254 242 242;
159
+ --color-red-100: #FEE2E2;
160
+ --color-red-100-rgb: 254 226 226;
161
+ --color-red-200: #FECACA;
162
+ --color-red-200-rgb: 254 202 202;
163
+ --color-red-300: #FCA5A5;
164
+ --color-red-300-rgb: 252 165 165;
165
+ --color-red-400: #F87171;
166
+ --color-red-400-rgb: 248 113 113;
167
+ --color-red-500: #EF4444;
168
+ --color-red-500-rgb: 239 68 68;
169
+ --color-red-600: #DC2626;
170
+ --color-red-600-rgb: 220 38 38;
171
+ --color-red-700: #B91C1C;
172
+ --color-red-700-rgb: 185 28 28;
173
+ --color-red-800: #991B1B;
174
+ --color-red-800-rgb: 153 27 27;
175
+ --color-red-900: #7F1D1D;
176
+ --color-red-900-rgb: 127 29 29;
177
+
178
+ /* Chart */
179
+ --color-chart-blue-light: #4570E8;
180
+ --color-chart-blue-light-rgb: 69 112 232;
181
+ --color-chart-blue-dark: #6B8FF5;
182
+ --color-chart-blue-dark-rgb: 107 143 245;
183
+ --color-chart-pink-light: #D94F9A;
184
+ --color-chart-pink-light-rgb: 217 79 154;
185
+ --color-chart-pink-dark: #E870B8;
186
+ --color-chart-pink-dark-rgb: 232 112 184;
187
+ --color-chart-lavender-light: #A888F0;
188
+ --color-chart-lavender-light-rgb: 168 136 240;
189
+ --color-chart-lavender-dark: #C4A8F8;
190
+ --color-chart-lavender-dark-rgb: 196 168 248;
191
+ --color-chart-sky-light: #68C8F5;
192
+ --color-chart-sky-light-rgb: 104 200 245;
193
+ --color-chart-sky-dark: #8DD8F8;
194
+ --color-chart-sky-dark-rgb: 141 216 248;
195
+ --color-chart-rose-light: #F0A0CC;
196
+ --color-chart-rose-light-rgb: 240 160 204;
197
+ --color-chart-rose-dark: #F8C0DE;
198
+ --color-chart-rose-dark-rgb: 248 192 222;
199
+
200
+ /* ========================================
201
+ Font Family
202
+ ======================================== */
203
+ --font-family-sans: Inter, -apple-system, BlinkMacSystemFont, sans-serif;
204
+ --font-family-mono: 'Fira Code', 'SF Mono', Consolas, 'Liberation Mono', Menlo, monospace;
205
+
206
+ /* ========================================
207
+ Typography
208
+ ======================================== */
209
+ --font-size-2xs: 0.6875rem; /* 11px */
210
+ --line-height-2xs: 1rem; /* 16px */
211
+ --font-size-xs: 0.75rem; /* 12px */
212
+ --line-height-xs: 1.125rem; /* 18px */
213
+ --font-size-sm: 0.8125rem; /* 13px */
214
+ --line-height-sm: 1.25rem; /* 20px */
215
+ --font-size-md: 0.875rem; /* 14px */
216
+ --line-height-md: 1.375rem; /* 22px */
217
+ --font-size-base: 1rem; /* 16px */
218
+ --line-height-base: 1.625rem; /* 26px */
219
+ --font-size-lg: 1.125rem; /* 18px */
220
+ --line-height-lg: 1.75rem; /* 28px */
221
+ --font-size-xl: 1.25rem; /* 20px */
222
+ --line-height-xl: 1.875rem; /* 30px */
223
+ --font-size-2xl: 1.5rem; /* 24px */
224
+ --line-height-2xl: 2.125rem; /* 34px */
225
+ --font-size-3xl: 1.875rem; /* 30px */
226
+ --line-height-3xl: 2.5rem; /* 40px */
227
+ --font-size-4xl: 2.25rem; /* 36px */
228
+ --line-height-4xl: 2.875rem; /* 46px */
229
+ --font-size-5xl: 3rem; /* 48px */
230
+ --line-height-5xl: 3.625rem; /* 58px */
231
+
232
+ /* ========================================
233
+ Font Weight
234
+ ======================================== */
235
+ --font-weight-normal: 400;
236
+ --font-weight-semibold: 600;
237
+ --font-weight-bold: 700;
238
+
239
+ /* ========================================
240
+ Spacing
241
+ 0~12px: 2px increments, 12px~: 4px increments
242
+ ======================================== */
243
+ --spacing-0: 0;
244
+ --spacing-0-5: 0.125rem; /* 2px */
245
+ --spacing-1: 0.25rem; /* 4px */
246
+ --spacing-1-5: 0.375rem; /* 6px */
247
+ --spacing-2: 0.5rem; /* 8px */
248
+ --spacing-2-5: 0.625rem; /* 10px */
249
+ --spacing-3: 0.75rem; /* 12px */
250
+ --spacing-4: 1rem; /* 16px */
251
+ --spacing-5: 1.25rem; /* 20px */
252
+ --spacing-6: 1.5rem; /* 24px */
253
+ --spacing-7: 1.75rem; /* 28px */
254
+ --spacing-8: 2rem; /* 32px */
255
+ --spacing-10: 2.5rem; /* 40px */
256
+ --spacing-12: 3rem; /* 48px */
257
+ --spacing-14: 3.5rem; /* 56px */
258
+ --spacing-16: 4rem; /* 64px */
259
+ --spacing-20: 5rem; /* 80px */
260
+ --spacing-24: 6rem; /* 96px */
261
+
262
+ /* ========================================
263
+ Border Radius
264
+ ======================================== */
265
+ --radius-none: 0px;
266
+ --radius-sm: 2px;
267
+ --radius-base: 4px;
268
+ --radius-md: 6px;
269
+ --radius-lg: 8px;
270
+ --radius-xl: 12px;
271
+ --radius-2xl: 16px;
272
+ --radius-3xl: 24px;
273
+ --radius-full: 9999px;
274
+
275
+ /* ========================================
276
+ Border Width
277
+ ======================================== */
278
+ --border-width-0: 0px;
279
+ --border-width-1: 1px;
280
+ --border-width-2: 2px;
281
+ --border-width-4: 4px;
282
+ --border-width-8: 8px;
283
+
284
+ /* ========================================
285
+ Shadows (Light Mode)
286
+ ======================================== */
287
+ --shadow-xs: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
288
+ --shadow-sm: 0 1px 3px 0 rgba(0, 0, 0, 0.1);
289
+ --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
290
+ --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
291
+ --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1);
292
+ --shadow-primary-glow: 0 0 0 4px color-mix(in srgb, var(--color-primary) 15%, transparent);
293
+
294
+ /* ========================================
295
+ Icon Size (5-step scale)
296
+ ======================================== */
297
+ --icon-size-2xs: 0.75rem; /* 12px */
298
+ --icon-size-xs: 0.875rem; /* 14px */
299
+ --icon-size-sm: 1rem; /* 16px */
300
+ --icon-size-md: 1.25rem; /* 20px */
301
+ --icon-size-lg: 1.5rem; /* 24px */
302
+ --icon-size-xl: 2rem; /* 32px */
303
+
304
+ /* ========================================
305
+ Scale
306
+ ======================================== */
307
+ --scale-50: 0.5;
308
+ --scale-75: 0.75;
309
+ --scale-95: 0.95;
310
+ --scale-pressed: 0.98;
311
+
312
+ /* ========================================
313
+ Z-Index
314
+ ======================================== */
315
+ --z-index-0: 0;
316
+ --z-index-10: 10;
317
+ --z-index-20: 20;
318
+ --z-index-30: 30;
319
+ --z-index-40: 40;
320
+ --z-index-50: 50;
321
+ --z-index-sticky: 100;
322
+ --z-index-dropdown: 1000;
323
+ --z-index-overlay: 1100;
324
+ --z-index-modal: 2000;
325
+ --z-index-popover: 2100;
326
+ --z-index-tooltip: 2200;
327
+ --z-index-toast: 3000;
328
+
329
+ /* ========================================
330
+ Opacity
331
+ ======================================== */
332
+ --opacity-0: 0%;
333
+ --opacity-5: 5%;
334
+ --opacity-10: 10%;
335
+ --opacity-15: 15%;
336
+ --opacity-20: 20%;
337
+ --opacity-25: 25%;
338
+ --opacity-30: 30%;
339
+ --opacity-35: 35%;
340
+ --opacity-40: 40%;
341
+ --opacity-45: 45%;
342
+ --opacity-50: 50%;
343
+ --opacity-55: 55%;
344
+ --opacity-60: 60%;
345
+ --opacity-65: 65%;
346
+ --opacity-70: 70%;
347
+ --opacity-75: 75%;
348
+ --opacity-80: 80%;
349
+ --opacity-85: 85%;
350
+ --opacity-90: 90%;
351
+ --opacity-95: 95%;
352
+ --opacity-100: 100%;
353
+
354
+ /* ========================================
355
+ Duration
356
+ ======================================== */
357
+ --duration-instant: 0ms;
358
+ --duration-fast: 100ms;
359
+ --duration-micro: 150ms;
360
+ --duration-normal: 200ms;
361
+ --duration-slow: 300ms;
362
+ --duration-slower: 400ms;
363
+ --duration-slowest: 500ms;
364
+ --duration-spin: 1000ms;
365
+
366
+ /* ========================================
367
+ Easing
368
+ ======================================== */
369
+ --easing-linear: linear;
370
+ --easing-ease: ease;
371
+ --easing-ease-in: ease-in;
372
+ --easing-ease-out: ease-out;
373
+ --easing-ease-in-out: ease-in-out;
374
+
375
+ /* ========================================
376
+ Breakpoints
377
+ ======================================== */
378
+ --breakpoint-sm: 640px;
379
+ --breakpoint-md: 768px;
380
+ --breakpoint-lg: 1024px;
381
+ --breakpoint-xl: 1280px;
382
+ --breakpoint-2xl: 1536px;
383
+
384
+ /* ========================================
385
+ Component Size
386
+ ======================================== */
387
+ --component-switch-track-sm-width: 24px;
388
+ --component-switch-track-sm-height: 14px;
389
+ --component-switch-track-default-width: 32px;
390
+ --component-switch-track-default-height: 18px;
391
+ --component-switch-track-lg-width: 40px;
392
+ --component-switch-track-lg-height: 22px;
393
+ --component-switch-thumb-sm: 12px;
394
+ --component-switch-thumb-default: 16px;
395
+ --component-switch-thumb-lg: 20px;
396
+ --component-slider-thumb-sm: 14px;
397
+ --component-slider-thumb-default: 18px;
398
+ --component-slider-thumb-lg: 22px;
399
+
400
+ /* ========================================
401
+ Semantic Typography
402
+ ======================================== */
403
+ --typography-heading-1-font-size: var(--font-size-3xl); /* 30px */
404
+ --typography-heading-1-line-height: var(--line-height-3xl); /* 40px */
405
+ --typography-heading-1-font-weight: var(--font-weight-bold); /* 700 */
406
+ --typography-heading-1-font-family: var(--font-family-sans);
407
+ --typography-heading-2-font-size: var(--font-size-2xl); /* 24px */
408
+ --typography-heading-2-line-height: var(--line-height-2xl); /* 34px */
409
+ --typography-heading-2-font-weight: var(--font-weight-bold); /* 700 */
410
+ --typography-heading-2-font-family: var(--font-family-sans);
411
+ --typography-heading-3-font-size: var(--font-size-xl); /* 20px */
412
+ --typography-heading-3-line-height: var(--line-height-xl); /* 30px */
413
+ --typography-heading-3-font-weight: var(--font-weight-semibold); /* 600 */
414
+ --typography-heading-3-font-family: var(--font-family-sans);
415
+ --typography-heading-4-font-size: var(--font-size-lg); /* 18px */
416
+ --typography-heading-4-line-height: var(--line-height-lg); /* 28px */
417
+ --typography-heading-4-font-weight: var(--font-weight-semibold); /* 600 */
418
+ --typography-heading-4-font-family: var(--font-family-sans);
419
+ --typography-heading-5-font-size: var(--font-size-base); /* 16px */
420
+ --typography-heading-5-line-height: var(--line-height-base); /* 26px */
421
+ --typography-heading-5-font-weight: var(--font-weight-semibold); /* 600 */
422
+ --typography-heading-5-font-family: var(--font-family-sans);
423
+ --typography-heading-6-font-size: var(--font-size-md); /* 14px */
424
+ --typography-heading-6-line-height: var(--line-height-md); /* 22px */
425
+ --typography-heading-6-font-weight: var(--font-weight-semibold); /* 600 */
426
+ --typography-heading-6-font-family: var(--font-family-sans);
427
+ --typography-body-lg-font-size: var(--font-size-lg); /* 18px */
428
+ --typography-body-lg-line-height: var(--line-height-lg); /* 28px */
429
+ --typography-body-lg-font-weight: var(--font-weight-normal); /* 400 */
430
+ --typography-body-lg-font-family: var(--font-family-sans);
431
+ --typography-body-default-font-size: var(--font-size-base); /* 16px */
432
+ --typography-body-default-line-height: var(--line-height-base); /* 26px */
433
+ --typography-body-default-font-weight: var(--font-weight-normal); /* 400 */
434
+ --typography-body-default-font-family: var(--font-family-sans);
435
+ --typography-body-md-font-size: var(--font-size-md); /* 14px */
436
+ --typography-body-md-line-height: var(--line-height-md); /* 22px */
437
+ --typography-body-md-font-weight: var(--font-weight-normal); /* 400 */
438
+ --typography-body-md-font-family: var(--font-family-sans);
439
+ --typography-body-sm-font-size: var(--font-size-sm); /* 13px */
440
+ --typography-body-sm-line-height: var(--line-height-sm); /* 20px */
441
+ --typography-body-sm-font-weight: var(--font-weight-normal); /* 400 */
442
+ --typography-body-sm-font-family: var(--font-family-sans);
443
+ --typography-body-xs-font-size: var(--font-size-xs); /* 12px */
444
+ --typography-body-xs-line-height: var(--line-height-xs); /* 18px */
445
+ --typography-body-xs-font-weight: var(--font-weight-normal); /* 400 */
446
+ --typography-body-xs-font-family: var(--font-family-sans);
447
+ --typography-body-2xs-font-size: var(--font-size-2xs); /* 11px */
448
+ --typography-body-2xs-line-height: var(--line-height-2xs); /* 16px */
449
+ --typography-body-2xs-font-weight: var(--font-weight-normal); /* 400 */
450
+ --typography-body-2xs-font-family: var(--font-family-sans);
451
+ --typography-label-lg-font-size: var(--font-size-base); /* 16px */
452
+ --typography-label-lg-line-height: var(--line-height-base); /* 26px */
453
+ --typography-label-lg-font-weight: var(--font-weight-semibold); /* 600 */
454
+ --typography-label-lg-font-family: var(--font-family-sans);
455
+ --typography-label-md-font-size: var(--font-size-md); /* 14px */
456
+ --typography-label-md-line-height: var(--line-height-md); /* 22px */
457
+ --typography-label-md-font-weight: var(--font-weight-semibold); /* 600 */
458
+ --typography-label-md-font-family: var(--font-family-sans);
459
+ --typography-label-default-font-size: var(--font-size-sm); /* 13px */
460
+ --typography-label-default-line-height: var(--line-height-sm); /* 20px */
461
+ --typography-label-default-font-weight: var(--font-weight-semibold); /* 600 */
462
+ --typography-label-default-font-family: var(--font-family-sans);
463
+ --typography-label-sm-font-size: var(--font-size-xs); /* 12px */
464
+ --typography-label-sm-line-height: var(--line-height-xs); /* 18px */
465
+ --typography-label-sm-font-weight: var(--font-weight-semibold); /* 600 */
466
+ --typography-label-sm-font-family: var(--font-family-sans);
467
+ --typography-label-xs-font-size: var(--font-size-2xs); /* 11px */
468
+ --typography-label-xs-line-height: var(--line-height-2xs); /* 16px */
469
+ --typography-label-xs-font-weight: var(--font-weight-semibold); /* 600 */
470
+ --typography-label-xs-font-family: var(--font-family-sans);
471
+ --typography-caption-font-size: var(--font-size-xs); /* 12px */
472
+ --typography-caption-line-height: var(--line-height-xs); /* 18px */
473
+ --typography-caption-font-weight: var(--font-weight-normal); /* 400 */
474
+ --typography-caption-font-family: var(--font-family-sans);
475
+ --typography-code-block-font-size: var(--font-size-sm); /* 13px */
476
+ --typography-code-block-line-height: 1.375rem; /* override: sm default = 20px */
477
+ --typography-code-block-font-weight: var(--font-weight-normal); /* 400 */
478
+ --typography-code-block-font-family: var(--font-family-mono);
479
+ --typography-code-inline-font-size: var(--font-size-sm); /* 13px */
480
+ --typography-code-inline-line-height: var(--line-height-sm); /* 20px */
481
+ --typography-code-inline-font-weight: var(--font-weight-normal); /* 400 */
482
+ --typography-code-inline-font-family: var(--font-family-mono);
483
+
484
+ }
485
+
486
+ /* ========================================
487
+ Component Animations
488
+ Generated from semantic.animation in figma-tokens.json
489
+ Token name = keyframe name = class name (1:1)
490
+ ======================================== */
491
+
492
+ @keyframes checkbox-enter {
493
+ from { opacity: 0; transform: scale(0.75); }
494
+ to { opacity: 1; transform: scale(1); }
495
+ }
496
+ .animate-checkbox-enter {
497
+ animation: checkbox-enter var(--duration-micro) var(--easing-ease-out);
498
+ }
499
+
500
+ @keyframes radio-enter {
501
+ from { opacity: 0; transform: scale(0.5); }
502
+ to { opacity: 1; transform: scale(1); }
503
+ }
504
+ .animate-radio-enter {
505
+ animation: radio-enter var(--duration-micro) var(--easing-ease-out);
506
+ }
507
+
508
+ @keyframes fade-in {
509
+ from { opacity: 0; }
510
+ to { opacity: 1; }
511
+ }
512
+ .animate-fade-in {
513
+ animation: fade-in var(--duration-normal) var(--easing-ease-out);
514
+ }
515
+
516
+ @keyframes fade-out {
517
+ from { opacity: 1; }
518
+ to { opacity: 0; }
519
+ }
520
+ .animate-fade-out {
521
+ animation: fade-out var(--duration-normal) var(--easing-ease-out);
522
+ }
523
+
524
+ @keyframes modal-overlay-enter {
525
+ from { opacity: 0; }
526
+ to { opacity: 1; }
527
+ }
528
+ .animate-modal-overlay-enter {
529
+ animation: modal-overlay-enter var(--duration-normal) var(--easing-ease-out);
530
+ }
531
+
532
+ @keyframes modal-overlay-exit {
533
+ from { opacity: 1; }
534
+ to { opacity: 0; }
535
+ }
536
+ .animate-modal-overlay-exit {
537
+ animation: modal-overlay-exit var(--duration-fast) var(--easing-ease-out);
538
+ }
539
+
540
+ @keyframes modal-content-enter {
541
+ from { opacity: 0; transform: scale(0.95) translateY(8px); }
542
+ to { opacity: 1; transform: scale(1) translateY(0); }
543
+ }
544
+ .animate-modal-content-enter {
545
+ animation: modal-content-enter var(--duration-normal) var(--easing-ease-out);
546
+ }
547
+
548
+ @keyframes modal-content-exit {
549
+ from { opacity: 1; transform: scale(1) translateY(0); }
550
+ to { opacity: 0; transform: scale(0.95) translateY(8px); }
551
+ }
552
+ .animate-modal-content-exit {
553
+ animation: modal-content-exit var(--duration-fast) var(--easing-ease-out);
554
+ }
555
+
556
+ @keyframes nav-viewport-enter {
557
+ from { opacity: 0; transform: scale(0.98) translateY(-2px); }
558
+ to { opacity: 1; transform: scale(1) translateY(0); }
559
+ }
560
+ .animate-nav-viewport-enter {
561
+ animation: nav-viewport-enter var(--duration-micro) var(--easing-ease-out);
562
+ }
563
+
564
+ @keyframes nav-viewport-exit {
565
+ from { opacity: 1; transform: scale(1) translateY(0); }
566
+ to { opacity: 0; transform: scale(0.98) translateY(-2px); }
567
+ }
568
+ .animate-nav-viewport-exit {
569
+ animation: nav-viewport-exit var(--duration-fast) var(--easing-ease-out);
570
+ }
571
+
572
+ @keyframes accordion-down {
573
+ from { height: 0; }
574
+ to { height: var(--radix-accordion-content-height); }
575
+ }
576
+ .animate-accordion-down {
577
+ animation: accordion-down var(--duration-normal) var(--easing-ease-out);
578
+ }
579
+
580
+ @keyframes accordion-up {
581
+ from { height: var(--radix-accordion-content-height); }
582
+ to { height: 0; }
583
+ }
584
+ .animate-accordion-up {
585
+ animation: accordion-up var(--duration-normal) var(--easing-ease-out);
586
+ }
587
+
588
+ @keyframes collapsible-down {
589
+ from { height: 0; }
590
+ to { height: var(--radix-collapsible-content-height); }
591
+ }
592
+ .animate-collapsible-down {
593
+ animation: collapsible-down var(--duration-normal) var(--easing-ease-out);
594
+ }
595
+
596
+ @keyframes collapsible-up {
597
+ from { height: var(--radix-collapsible-content-height); }
598
+ to { height: 0; }
599
+ }
600
+ .animate-collapsible-up {
601
+ animation: collapsible-up var(--duration-normal) var(--easing-ease-out);
602
+ }
603
+
604
+ @keyframes drawer-right-enter {
605
+ from { transform: translateX(100%); }
606
+ to { transform: translateX(0); }
607
+ }
608
+ .animate-drawer-right-enter {
609
+ animation: drawer-right-enter var(--duration-slow) var(--easing-ease-out);
610
+ }
611
+
612
+ @keyframes drawer-right-exit {
613
+ from { transform: translateX(0); }
614
+ to { transform: translateX(100%); }
615
+ }
616
+ .animate-drawer-right-exit {
617
+ animation: drawer-right-exit var(--duration-normal) var(--easing-ease-out);
618
+ }
619
+
620
+ @keyframes drawer-left-enter {
621
+ from { transform: translateX(-100%); }
622
+ to { transform: translateX(0); }
623
+ }
624
+ .animate-drawer-left-enter {
625
+ animation: drawer-left-enter var(--duration-slow) var(--easing-ease-out);
626
+ }
627
+
628
+ @keyframes drawer-left-exit {
629
+ from { transform: translateX(0); }
630
+ to { transform: translateX(-100%); }
631
+ }
632
+ .animate-drawer-left-exit {
633
+ animation: drawer-left-exit var(--duration-normal) var(--easing-ease-out);
634
+ }
635
+
636
+ @keyframes drawer-top-enter {
637
+ from { transform: translateY(-100%); }
638
+ to { transform: translateY(0); }
639
+ }
640
+ .animate-drawer-top-enter {
641
+ animation: drawer-top-enter var(--duration-slow) var(--easing-ease-out);
642
+ }
643
+
644
+ @keyframes drawer-top-exit {
645
+ from { transform: translateY(0); }
646
+ to { transform: translateY(-100%); }
647
+ }
648
+ .animate-drawer-top-exit {
649
+ animation: drawer-top-exit var(--duration-normal) var(--easing-ease-out);
650
+ }
651
+
652
+ @keyframes drawer-bottom-enter {
653
+ from { transform: translateY(100%); }
654
+ to { transform: translateY(0); }
655
+ }
656
+ .animate-drawer-bottom-enter {
657
+ animation: drawer-bottom-enter var(--duration-slow) var(--easing-ease-out);
658
+ }
659
+
660
+ @keyframes drawer-bottom-exit {
661
+ from { transform: translateY(0); }
662
+ to { transform: translateY(100%); }
663
+ }
664
+ .animate-drawer-bottom-exit {
665
+ animation: drawer-bottom-exit var(--duration-normal) var(--easing-ease-out);
666
+ }
667
+
668
+ @keyframes tooltip-top-enter {
669
+ from { opacity: 0; transform: translateY(4px); }
670
+ to { opacity: 1; transform: translateY(0); }
671
+ }
672
+ .animate-tooltip-top-enter {
673
+ animation: tooltip-top-enter var(--duration-micro) var(--easing-ease-out);
674
+ }
675
+
676
+ @keyframes tooltip-top-exit {
677
+ from { opacity: 1; transform: translateY(0); }
678
+ to { opacity: 0; transform: translateY(4px); }
679
+ }
680
+ .animate-tooltip-top-exit {
681
+ animation: tooltip-top-exit var(--duration-fast) var(--easing-ease-out);
682
+ }
683
+
684
+ @keyframes tooltip-bottom-enter {
685
+ from { opacity: 0; transform: translateY(-4px); }
686
+ to { opacity: 1; transform: translateY(0); }
687
+ }
688
+ .animate-tooltip-bottom-enter {
689
+ animation: tooltip-bottom-enter var(--duration-micro) var(--easing-ease-out);
690
+ }
691
+
692
+ @keyframes tooltip-bottom-exit {
693
+ from { opacity: 1; transform: translateY(0); }
694
+ to { opacity: 0; transform: translateY(-4px); }
695
+ }
696
+ .animate-tooltip-bottom-exit {
697
+ animation: tooltip-bottom-exit var(--duration-fast) var(--easing-ease-out);
698
+ }
699
+
700
+ @keyframes tooltip-right-enter {
701
+ from { opacity: 0; transform: translateX(-4px); }
702
+ to { opacity: 1; transform: translateX(0); }
703
+ }
704
+ .animate-tooltip-right-enter {
705
+ animation: tooltip-right-enter var(--duration-micro) var(--easing-ease-out);
706
+ }
707
+
708
+ @keyframes tooltip-right-exit {
709
+ from { opacity: 1; transform: translateX(0); }
710
+ to { opacity: 0; transform: translateX(-4px); }
711
+ }
712
+ .animate-tooltip-right-exit {
713
+ animation: tooltip-right-exit var(--duration-fast) var(--easing-ease-out);
714
+ }
715
+
716
+ @keyframes tooltip-left-enter {
717
+ from { opacity: 0; transform: translateX(4px); }
718
+ to { opacity: 1; transform: translateX(0); }
719
+ }
720
+ .animate-tooltip-left-enter {
721
+ animation: tooltip-left-enter var(--duration-micro) var(--easing-ease-out);
722
+ }
723
+
724
+ @keyframes tooltip-left-exit {
725
+ from { opacity: 1; transform: translateX(0); }
726
+ to { opacity: 0; transform: translateX(4px); }
727
+ }
728
+ .animate-tooltip-left-exit {
729
+ animation: tooltip-left-exit var(--duration-fast) var(--easing-ease-out);
730
+ }
731
+
732
+ @keyframes popover-top-enter {
733
+ from { opacity: 0; transform: translateY(4px); }
734
+ to { opacity: 1; transform: translateY(0); }
735
+ }
736
+ .animate-popover-top-enter {
737
+ animation: popover-top-enter var(--duration-normal) var(--easing-ease-out);
738
+ }
739
+
740
+ @keyframes popover-top-exit {
741
+ from { opacity: 1; transform: translateY(0); }
742
+ to { opacity: 0; transform: translateY(4px); }
743
+ }
744
+ .animate-popover-top-exit {
745
+ animation: popover-top-exit var(--duration-fast) var(--easing-ease-out);
746
+ }
747
+
748
+ @keyframes popover-bottom-enter {
749
+ from { opacity: 0; transform: translateY(-4px); }
750
+ to { opacity: 1; transform: translateY(0); }
751
+ }
752
+ .animate-popover-bottom-enter {
753
+ animation: popover-bottom-enter var(--duration-normal) var(--easing-ease-out);
754
+ }
755
+
756
+ @keyframes popover-bottom-exit {
757
+ from { opacity: 1; transform: translateY(0); }
758
+ to { opacity: 0; transform: translateY(-4px); }
759
+ }
760
+ .animate-popover-bottom-exit {
761
+ animation: popover-bottom-exit var(--duration-fast) var(--easing-ease-out);
762
+ }
763
+
764
+ @keyframes popover-right-enter {
765
+ from { opacity: 0; transform: translateX(-4px); }
766
+ to { opacity: 1; transform: translateX(0); }
767
+ }
768
+ .animate-popover-right-enter {
769
+ animation: popover-right-enter var(--duration-normal) var(--easing-ease-out);
770
+ }
771
+
772
+ @keyframes popover-right-exit {
773
+ from { opacity: 1; transform: translateX(0); }
774
+ to { opacity: 0; transform: translateX(-4px); }
775
+ }
776
+ .animate-popover-right-exit {
777
+ animation: popover-right-exit var(--duration-fast) var(--easing-ease-out);
778
+ }
779
+
780
+ @keyframes popover-left-enter {
781
+ from { opacity: 0; transform: translateX(4px); }
782
+ to { opacity: 1; transform: translateX(0); }
783
+ }
784
+ .animate-popover-left-enter {
785
+ animation: popover-left-enter var(--duration-normal) var(--easing-ease-out);
786
+ }
787
+
788
+ @keyframes popover-left-exit {
789
+ from { opacity: 1; transform: translateX(0); }
790
+ to { opacity: 0; transform: translateX(4px); }
791
+ }
792
+ .animate-popover-left-exit {
793
+ animation: popover-left-exit var(--duration-fast) var(--easing-ease-out);
794
+ }
795
+
796
+ @keyframes toast-slide-in-right {
797
+ from { opacity: 0; transform: translateX(100%); }
798
+ to { opacity: 1; transform: translateX(0); }
799
+ }
800
+ .animate-toast-slide-in-right {
801
+ animation: toast-slide-in-right var(--duration-slow) var(--easing-ease-out);
802
+ }
803
+
804
+ @keyframes toast-slide-out-right {
805
+ from { opacity: 1; transform: translateX(0); }
806
+ to { opacity: 0; transform: translateX(100%); }
807
+ }
808
+ .animate-toast-slide-out-right {
809
+ animation: toast-slide-out-right var(--duration-normal) var(--easing-ease-out);
810
+ }
811
+
812
+ @keyframes toast-slide-in-left {
813
+ from { opacity: 0; transform: translateX(-100%); }
814
+ to { opacity: 1; transform: translateX(0); }
815
+ }
816
+ .animate-toast-slide-in-left {
817
+ animation: toast-slide-in-left var(--duration-slow) var(--easing-ease-out);
818
+ }
819
+
820
+ @keyframes toast-slide-out-left {
821
+ from { opacity: 1; transform: translateX(0); }
822
+ to { opacity: 0; transform: translateX(-100%); }
823
+ }
824
+ .animate-toast-slide-out-left {
825
+ animation: toast-slide-out-left var(--duration-normal) var(--easing-ease-out);
826
+ }
827
+
828
+ @keyframes toast-slide-in-top {
829
+ from { opacity: 0; transform: translateY(-100%); }
830
+ to { opacity: 1; transform: translateY(0); }
831
+ }
832
+ .animate-toast-slide-in-top {
833
+ animation: toast-slide-in-top var(--duration-slow) var(--easing-ease-out);
834
+ }
835
+
836
+ @keyframes toast-slide-out-top {
837
+ from { opacity: 1; transform: translateY(0); }
838
+ to { opacity: 0; transform: translateY(-100%); }
839
+ }
840
+ .animate-toast-slide-out-top {
841
+ animation: toast-slide-out-top var(--duration-normal) var(--easing-ease-out);
842
+ }
843
+
844
+ @keyframes toast-slide-in-bottom {
845
+ from { opacity: 0; transform: translateY(100%); }
846
+ to { opacity: 1; transform: translateY(0); }
847
+ }
848
+ .animate-toast-slide-in-bottom {
849
+ animation: toast-slide-in-bottom var(--duration-slow) var(--easing-ease-out);
850
+ }
851
+
852
+ @keyframes toast-slide-out-bottom {
853
+ from { opacity: 1; transform: translateY(0); }
854
+ to { opacity: 0; transform: translateY(100%); }
855
+ }
856
+ .animate-toast-slide-out-bottom {
857
+ animation: toast-slide-out-bottom var(--duration-normal) var(--easing-ease-out);
858
+ }
859
+
860
+ @keyframes spin {
861
+ from { transform: rotate(0deg); }
862
+ to { transform: rotate(360deg); }
863
+ }
864
+ .animate-spin {
865
+ animation: spin var(--duration-spin) var(--easing-linear) infinite;
866
+ }
867
+
868
+ @keyframes progress-stripe {
869
+ from { background-position: 1rem 0; }
870
+ to { background-position: 0 0; }
871
+ }
872
+ .animate-progress-stripe {
873
+ animation: progress-stripe var(--duration-spin) var(--easing-linear) infinite;
874
+ }
875
+
876
+ @keyframes spinner-orbit {
877
+ from { transform: rotateY(0deg); }
878
+ to { transform: rotateY(360deg); }
879
+ }
880
+ .animate-spinner-orbit {
881
+ animation: spinner-orbit var(--duration-spin) var(--easing-linear) infinite;
882
+ }
883
+
884
+ @keyframes spinner-dot {
885
+ 0%, 100% { opacity: 0.2; }
886
+ 50% { opacity: 1; }
887
+ }
888
+ .animate-spinner-dot {
889
+ animation: spinner-dot var(--duration-spin) var(--easing-ease-in-out) infinite;
890
+ }
891
+
892
+ @keyframes spinner-bar {
893
+ 0%, 100% { transform: scaleY(0.4); }
894
+ 50% { transform: scaleY(1); }
895
+ }
896
+ .animate-spinner-bar {
897
+ animation: spinner-bar var(--duration-spin) var(--easing-ease-in-out) infinite;
898
+ }
899
+
900
+ @keyframes spinner-morph {
901
+ 0%, 100% { border-radius: 50%; transform: rotateY(0deg) rotate(0deg); }
902
+ 25% { border-radius: 30% 70% 70% 30% / 30% 30% 70% 70%; transform: rotateY(90deg) rotate(90deg); }
903
+ 50% { border-radius: 50%; transform: rotateY(180deg) rotate(180deg); }
904
+ 75% { border-radius: 70% 30% 30% 70% / 70% 70% 30% 30%; transform: rotateY(270deg) rotate(270deg); }
905
+ }
906
+ .animate-spinner-morph {
907
+ animation: spinner-morph var(--duration-spin) var(--easing-ease-in-out) infinite;
908
+ }
909
+
910
+ @keyframes skeleton-pulse {
911
+ 0%, 100% { opacity: 1; }
912
+ 50% { opacity: 0.4; }
913
+ }
914
+ .animate-skeleton-pulse {
915
+ animation: skeleton-pulse var(--duration-spin) var(--easing-ease-in-out) infinite;
916
+ }
917
+
918
+ @keyframes skeleton-wave {
919
+ 0% { transform: translateX(-100%); }
920
+ 100% { transform: translateX(100%); }
921
+ }
922
+ .animate-skeleton-wave {
923
+ animation: skeleton-wave var(--duration-spin) var(--easing-linear) infinite;
924
+ }