@sirlund/mindset-ui 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,1194 @@
1
+ /* src/tokens/tokens.css */
2
+ /**
3
+ * MindSet Design System - Design Tokens
4
+ * Auto-generated from Figma variables
5
+ *
6
+ * Token Categories:
7
+ * - Primitives: Base scale, typography
8
+ * - Colors: Base colors, system colors, semantic colors
9
+ * - Dimensions: Spacing, radius, stroke
10
+ */
11
+
12
+ :root {
13
+ /* ========================================
14
+ PRIMITIVES - Scale
15
+ ======================================== */
16
+
17
+ --scale-0: 0px;
18
+ --scale-12-5: 1px;
19
+ --scale-25: 2px;
20
+ --scale-50: 4px;
21
+ --scale-75: 6px;
22
+ --scale-100: 8px;
23
+ --scale-150: 12px;
24
+ --scale-175: 14px;
25
+ --scale-200: 16px;
26
+ --scale-250: 20px;
27
+ --scale-300: 24px;
28
+ --scale-400: 32px;
29
+ --scale-500: 40px;
30
+ --scale-600: 48px;
31
+ --scale-700: 56px;
32
+ --scale-800: 64px;
33
+ --scale-900: 72px;
34
+ --scale-1000: 80px;
35
+ --scale-2000: 160px;
36
+ --scale-2500: 200px;
37
+
38
+ /* ========================================
39
+ PRIMITIVES - Typography
40
+ ======================================== */
41
+
42
+ /* Font Families */
43
+ --font-family-default: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif;
44
+ --font-family-mono: 'Fira Code', 'Monaco', 'Courier New', monospace;
45
+
46
+ /* Font Sizes */
47
+ --font-size-xs: var(--scale-150); /* 12px */
48
+ --font-size-s: var(--scale-175); /* 14px */
49
+ --font-size-m: var(--scale-200); /* 16px */
50
+ --font-size-l: var(--scale-250); /* 20px */
51
+ --font-size-xl: var(--scale-300); /* 24px */
52
+
53
+ /* ========================================
54
+ DIMENSIONS - Gap/Spacing
55
+ ======================================== */
56
+
57
+ --gap-none: var(--scale-0); /* 0px */
58
+ --gap-3xs: var(--scale-25); /* 2px */
59
+ --gap-2xs: var(--scale-50); /* 4px */
60
+ --gap-xs: var(--scale-100); /* 8px */
61
+ --gap-s: var(--scale-150); /* 12px */
62
+ --gap-m: var(--scale-200); /* 16px */
63
+ --gap-l: var(--scale-250); /* 20px */
64
+ --gap-xl: var(--scale-300); /* 24px */
65
+ --gap-2xl: var(--scale-400); /* 32px */
66
+ --gap-3xl: var(--scale-500); /* 40px */
67
+ --gap-4xl: var(--scale-600); /* 48px */
68
+ --gap-5xl: var(--scale-700); /* 56px */
69
+ --gap-6xl: var(--scale-800); /* 64px */
70
+ --gap-7xl: var(--scale-1000); /* 80px */
71
+
72
+ /* ========================================
73
+ DIMENSIONS - Border Radius
74
+ ======================================== */
75
+
76
+ --radius-none: 0px;
77
+ --radius-xs: var(--scale-50); /* 4px */
78
+ --radius-s: var(--scale-75); /* 6px */
79
+ --radius-m: var(--scale-100); /* 8px */
80
+ --radius-l: var(--scale-150); /* 12px */
81
+ --radius-xl: var(--scale-200); /* 16px */
82
+ --radius-rounded: 9999px; /* Fully rounded */
83
+
84
+ /* ========================================
85
+ DIMENSIONS - Stroke Width
86
+ ======================================== */
87
+
88
+ --stroke-none: 0px;
89
+ --stroke-thin: 1px;
90
+ --stroke-light: 1.25px;
91
+ --stroke-medium: 1.5px;
92
+ --stroke-large: 2px;
93
+
94
+ /* ========================================
95
+ DIMENSIONS - Container Max Widths
96
+ ======================================== */
97
+
98
+ --max-width-mobile: 480px;
99
+ --max-width-tablet-portrait: 768px;
100
+ --max-width-tablet-landscape: 1024px;
101
+ --max-width-desktop: 1440px;
102
+ --max-width-desktop-lg: 1600px;
103
+ --max-width-desktop-xl: 1980px;
104
+
105
+ /* ========================================
106
+ COLORS - Base (Light Mode)
107
+ ======================================== */
108
+
109
+ /* Base Colors */
110
+ --color-base-black: rgb(18, 18, 19);
111
+ --color-base-white: rgb(254, 254, 255);
112
+
113
+ /* Grey Scale */
114
+ --color-grey-100: rgb(246, 246, 247);
115
+ --color-grey-200: rgb(234, 234, 234);
116
+ --color-grey-300: rgb(204, 204, 205);
117
+ --color-grey-400: rgb(153, 153, 154);
118
+ --color-grey-500: rgb(109, 109, 110);
119
+ --color-grey-600: rgb(63, 63, 70);
120
+ --color-grey-700: rgb(41, 41, 42);
121
+
122
+ /* Blue Scale */
123
+ --color-blue-100: rgb(232, 243, 255);
124
+ --color-blue-200: rgb(180, 211, 255);
125
+ --color-blue-300: rgb(76, 150, 255);
126
+ --color-blue-400: rgb(0, 105, 255);
127
+ --color-blue-500: rgb(0, 75, 183);
128
+ --color-blue-600: rgb(0, 46, 111);
129
+ --color-blue-700: rgb(0, 31, 75);
130
+
131
+ /* Red Scale */
132
+ --color-red-100: rgb(255, 243, 241);
133
+ --color-red-200: rgb(254, 209, 201);
134
+ --color-red-300: rgb(237, 115, 99);
135
+ --color-red-400: rgb(205, 73, 55);
136
+ --color-red-500: rgb(189, 54, 36);
137
+ --color-red-600: rgb(168, 32, 13);
138
+ --color-red-700: rgb(128, 20, 5);
139
+
140
+ /* Green Scale */
141
+ --color-green-100: rgb(240, 254, 241);
142
+ --color-green-200: rgb(204, 238, 206);
143
+ --color-green-300: rgb(104, 178, 111);
144
+ --color-green-400: rgb(52, 134, 60);
145
+ --color-green-500: rgb(18, 121, 29);
146
+ --color-green-600: rgb(8, 93, 17);
147
+ --color-green-700: rgb(3, 65, 10);
148
+
149
+ /* Yellow Scale */
150
+ --color-yellow-100: rgb(255, 249, 227);
151
+ --color-yellow-200: rgb(253, 239, 190);
152
+ --color-yellow-300: rgb(245, 218, 117);
153
+ --color-yellow-400: rgb(237, 200, 67);
154
+ --color-yellow-500: rgb(177, 142, 14);
155
+ --color-yellow-600: rgb(129, 101, 0);
156
+ --color-yellow-700: rgb(87, 68, 0);
157
+
158
+ /* Pink Scale */
159
+ --color-pink-100: rgb(252, 228, 236);
160
+ --color-pink-200: rgb(246, 179, 200);
161
+ --color-pink-300: rgb(241, 130, 165);
162
+ --color-pink-400: rgb(235, 81, 129);
163
+ --color-pink-500: rgb(169, 58, 93);
164
+ --color-pink-600: rgb(102, 35, 56);
165
+ --color-pink-700: rgb(69, 24, 38);
166
+
167
+ /* Jade Scale */
168
+ --color-jade-100: rgb(223, 247, 237);
169
+ --color-jade-200: rgb(164, 232, 205);
170
+ --color-jade-300: rgb(104, 217, 172);
171
+ --color-jade-400: rgb(45, 202, 140);
172
+ --color-jade-500: rgb(32, 145, 100);
173
+ --color-jade-600: rgb(20, 88, 61);
174
+ --color-jade-700: rgb(13, 59, 41);
175
+
176
+ /* Violet Scale */
177
+ --color-violet-100: rgb(235, 230, 246);
178
+ --color-violet-200: rgb(197, 183, 228);
179
+ --color-violet-300: rgb(160, 136, 211);
180
+ --color-violet-400: rgb(122, 89, 194);
181
+ --color-violet-500: rgb(88, 64, 139);
182
+ --color-violet-600: rgb(53, 39, 84);
183
+ --color-violet-700: rgb(36, 26, 57);
184
+
185
+ /* Amber Scale */
186
+ --color-amber-100: rgb(251, 239, 225);
187
+ --color-amber-200: rgb(243, 210, 170);
188
+ --color-amber-300: rgb(236, 181, 114);
189
+ --color-amber-400: rgb(228, 152, 59);
190
+ --color-amber-500: rgb(164, 109, 42);
191
+ --color-amber-600: rgb(99, 66, 26);
192
+ --color-amber-700: rgb(67, 45, 17);
193
+
194
+ /* Teal Scale */
195
+ --color-teal-100: rgb(227, 239, 243);
196
+ --color-teal-200: rgb(177, 210, 220);
197
+ --color-teal-300: rgb(126, 180, 197);
198
+ --color-teal-400: rgb(75, 151, 174);
199
+ --color-teal-500: rgb(54, 108, 125);
200
+ --color-teal-600: rgb(33, 66, 76);
201
+ --color-teal-700: rgb(22, 44, 51);
202
+
203
+ /* Alpha Colors */
204
+ --color-alpha-black-100: rgba(18, 18, 19, 0.1);
205
+ --color-alpha-black-200: rgba(18, 18, 19, 0.2);
206
+ --color-alpha-black-300: rgba(18, 18, 19, 0.25);
207
+ --color-alpha-black-400: rgba(18, 18, 19, 0.4);
208
+ --color-alpha-black-500: rgba(18, 18, 19, 0.5);
209
+ --color-alpha-black-600: rgba(18, 18, 19, 0.6);
210
+ --color-alpha-black-700: rgba(18, 18, 19, 0.7);
211
+ --color-alpha-black-800: rgba(18, 18, 19, 0.85);
212
+
213
+ --color-alpha-white-100: rgba(254, 254, 255, 0.2);
214
+ --color-alpha-white-200: rgba(254, 254, 255, 0.3);
215
+ --color-alpha-white-300: rgba(254, 254, 255, 0.4);
216
+ --color-alpha-white-400: rgba(254, 254, 255, 0.5);
217
+ --color-alpha-white-500: rgba(254, 254, 255, 0.6);
218
+ --color-alpha-white-600: rgba(254, 254, 255, 0.7);
219
+ --color-alpha-white-700: rgba(254, 254, 255, 0.8);
220
+ --color-alpha-white-800: rgba(254, 254, 255, 0.9);
221
+
222
+ /* ========================================
223
+ SYSTEM COLORS - Semantic Tokens (Light Mode)
224
+ ======================================== */
225
+
226
+ /* Accent Colors */
227
+ --color-accent-default: var(--color-blue-400);
228
+ --color-accent-subtle: var(--color-blue-300);
229
+ --color-accent-strong: var(--color-blue-600);
230
+ --color-accent-lighter: var(--color-blue-100);
231
+ --color-accent-light: var(--color-blue-200);
232
+
233
+ /* Primary Colors */
234
+ --color-primary-default: var(--color-base-black);
235
+ --color-primary-inverted: var(--color-base-white);
236
+ --color-primary-subtle: var(--color-grey-500);
237
+ --color-primary-light: var(--color-grey-200);
238
+
239
+ /* Surface Colors */
240
+ --color-surface-background: var(--color-base-white);
241
+ --color-surface-background-inverted: var(--color-base-black);
242
+ --color-surface-background-inverted-alpha: var(--color-alpha-black-800);
243
+ --color-surface-layer: var(--color-grey-100);
244
+ --color-surface-layer-strong: var(--color-grey-200);
245
+ --color-surface-layer-stronger: var(--color-grey-300);
246
+ --color-surface-elevated: var(--color-base-white);
247
+ --color-surface-elevated-inverted: var(--color-base-black);
248
+ --color-surface-accent: var(--color-blue-400);
249
+ --color-surface-input: var(--color-alpha-white-500);
250
+
251
+ /* Content/Text Colors */
252
+ --color-content-heading: var(--color-base-black);
253
+ --color-content-primary: var(--color-grey-700);
254
+ --color-content-secondary: var(--color-grey-500);
255
+ --color-content-disabled: var(--color-grey-400);
256
+ --color-content-inverted: var(--color-base-white);
257
+ --color-content-accent: var(--color-blue-400);
258
+ --color-content-error: var(--color-red-400);
259
+ --color-content-success: var(--color-green-400);
260
+ --color-content-warning: var(--color-yellow-400);
261
+
262
+ /* Content On Inverted */
263
+ --color-content-on-inverted-heading: var(--color-base-white);
264
+ --color-content-on-inverted-primary: var(--color-grey-100);
265
+ --color-content-on-inverted-secondary: var(--color-grey-400);
266
+ --color-content-on-inverted-disabled: var(--color-grey-500);
267
+ --color-content-on-inverted-accent: var(--color-blue-300);
268
+
269
+ /* Icon Colors */
270
+ --color-icon-primary: var(--color-grey-700);
271
+ --color-icon-secondary: var(--color-grey-500);
272
+ --color-icon-disabled: var(--color-grey-400);
273
+ --color-icon-inverted: var(--color-base-white);
274
+ --color-icon-accent: var(--color-blue-400);
275
+ --color-icon-accent-subtle: var(--color-blue-300);
276
+ --color-icon-accent-strong: var(--color-blue-500);
277
+ --color-icon-error: var(--color-red-400);
278
+ --color-icon-success: var(--color-green-400);
279
+ --color-icon-warning: var(--color-yellow-400);
280
+
281
+ /* Icon On Inverted */
282
+ --color-icon-on-inverted-primary: var(--color-grey-100);
283
+ --color-icon-on-inverted-secondary: var(--color-grey-400);
284
+ --color-icon-on-inverted-disabled: var(--color-grey-500);
285
+ --color-icon-on-inverted-accent: var(--color-blue-300);
286
+
287
+ /* Stroke/Border Colors */
288
+ --color-stroke-subtle: var(--color-grey-200);
289
+ --color-stroke-medium: var(--color-grey-300);
290
+ --color-stroke-strong: var(--color-grey-400);
291
+ --color-stroke-alpha-subtle: var(--color-alpha-black-100);
292
+ --color-stroke-alpha-medium: var(--color-alpha-black-300);
293
+ --color-stroke-alpha-strong: var(--color-alpha-black-500);
294
+
295
+ /* Stroke On Dark */
296
+ --color-stroke-on-dark-subtle: var(--color-grey-600);
297
+ --color-stroke-on-dark-medium: var(--color-grey-500);
298
+ --color-stroke-on-dark-strong: var(--color-grey-400);
299
+ --color-stroke-on-dark-alpha-subtle: var(--color-alpha-white-100);
300
+ --color-stroke-on-dark-alpha-medium: var(--color-alpha-white-300);
301
+ --color-stroke-on-dark-alpha-strong: var(--color-alpha-white-500);
302
+
303
+ /* Feedback Colors */
304
+ --color-feedback-negative-light: var(--color-red-100);
305
+ --color-feedback-negative-default: var(--color-red-400);
306
+ --color-feedback-negative-strong: var(--color-red-600);
307
+
308
+ --color-feedback-positive-light: var(--color-green-100);
309
+ --color-feedback-positive-default: var(--color-green-400);
310
+ --color-feedback-positive-strong: var(--color-green-600);
311
+
312
+ --color-feedback-warning-light: var(--color-yellow-100);
313
+ --color-feedback-warning-default: var(--color-yellow-400);
314
+ --color-feedback-warning-strong: var(--color-yellow-500);
315
+
316
+ /* Build System Colors (for code/tech contexts) */
317
+ --color-build-action: var(--color-jade-400);
318
+ --color-build-data: var(--color-violet-400);
319
+ --color-build-function: var(--color-amber-400);
320
+ --color-build-input: var(--color-teal-400);
321
+ --color-build-workflow: var(--color-pink-400);
322
+ }
323
+
324
+ /* ========================================
325
+ DARK MODE OVERRIDES
326
+ ======================================== */
327
+
328
+ @media (prefers-color-scheme: dark) {
329
+ :root {
330
+ /* System Colors - Dark Mode adjustments */
331
+ --color-accent-lighter: var(--color-blue-700);
332
+ --color-accent-light: var(--color-blue-600);
333
+ --color-accent-subtle: var(--color-blue-500);
334
+ --color-accent-strong: var(--color-blue-300);
335
+
336
+ --color-primary-default: var(--color-base-white);
337
+ --color-primary-inverted: var(--color-base-black);
338
+ --color-primary-subtle: var(--color-grey-300);
339
+ --color-primary-light: var(--color-grey-700);
340
+
341
+ --color-surface-background: var(--color-base-black);
342
+ --color-surface-background-inverted: var(--color-base-white);
343
+ --color-surface-background-inverted-alpha: var(--color-alpha-grey-600-800);
344
+ --color-surface-layer: var(--color-grey-700);
345
+ --color-surface-layer-strong: var(--color-grey-600);
346
+ --color-surface-layer-stronger: var(--color-grey-500);
347
+ --color-surface-elevated: var(--color-grey-600);
348
+ --color-surface-elevated-inverted: var(--color-grey-600);
349
+ --color-surface-accent: var(--color-blue-600);
350
+ --color-surface-input: var(--color-alpha-black-500);
351
+
352
+ --color-content-heading: var(--color-base-white);
353
+ --color-content-primary: var(--color-grey-300);
354
+ --color-content-secondary: var(--color-grey-400);
355
+ --color-content-disabled: var(--color-grey-500);
356
+ --color-content-inverted: var(--color-base-black);
357
+ --color-content-accent: var(--color-blue-300);
358
+ --color-content-error: var(--color-red-300);
359
+ --color-content-success: var(--color-green-300);
360
+ --color-content-warning: var(--color-yellow-300);
361
+
362
+ --color-icon-primary: var(--color-grey-300);
363
+ --color-icon-secondary: var(--color-grey-400);
364
+ --color-icon-disabled: var(--color-grey-500);
365
+ --color-icon-inverted: var(--color-base-black);
366
+ --color-icon-accent: var(--color-blue-300);
367
+ --color-icon-accent-subtle: var(--color-blue-400);
368
+ --color-icon-accent-strong: var(--color-blue-200);
369
+ --color-icon-error: var(--color-red-300);
370
+ --color-icon-success: var(--color-green-300);
371
+ --color-icon-warning: var(--color-yellow-300);
372
+
373
+ --color-stroke-subtle: var(--color-grey-600);
374
+ --color-stroke-medium: var(--color-grey-500);
375
+ --color-stroke-strong: var(--color-grey-400);
376
+ --color-stroke-alpha-subtle: var(--color-alpha-white-100);
377
+ --color-stroke-alpha-medium: var(--color-alpha-white-300);
378
+ --color-stroke-alpha-strong: var(--color-alpha-white-500);
379
+
380
+ --color-feedback-negative-light: var(--color-red-700);
381
+ --color-feedback-negative-strong: var(--color-red-300);
382
+
383
+ --color-feedback-positive-light: var(--color-green-700);
384
+ --color-feedback-positive-strong: var(--color-green-300);
385
+
386
+ --color-feedback-warning-light: var(--color-yellow-700);
387
+ --color-feedback-warning-strong: var(--color-yellow-300);
388
+
389
+ --color-build-action: var(--color-jade-300);
390
+ --color-build-data: var(--color-violet-300);
391
+ --color-build-function: var(--color-amber-300);
392
+ --color-build-input: var(--color-teal-300);
393
+ --color-build-workflow: var(--color-pink-300);
394
+ }
395
+ }
396
+
397
+
398
+ /* src/components/Button/Button.css */
399
+ /* Import design tokens */
400
+ @import '../../tokens/tokens.css';
401
+
402
+ /* Button Base Styles */
403
+ .btn {
404
+ display: inline-flex;
405
+ align-items: center;
406
+ justify-content: center;
407
+ gap: var(--gap-xs);
408
+ border: none;
409
+ border-radius: var(--radius-m);
410
+ font-family: var(--font-family-default);
411
+ font-weight: 500;
412
+ text-decoration: none;
413
+ cursor: pointer;
414
+ transition: all 0.2s ease-in-out;
415
+ position: relative;
416
+ outline: none;
417
+ user-select: none;
418
+ white-space: nowrap;
419
+ }
420
+
421
+ .btn:focus-visible {
422
+ outline: 2px solid var(--color-accent-default);
423
+ outline-offset: 2px;
424
+ }
425
+
426
+ /* Button Sizes */
427
+ .btn--xsmall {
428
+ padding: var(--gap-3xs) var(--gap-2xs);
429
+ font-size: var(--font-size-xs);
430
+ line-height: 16px;
431
+ min-height: var(--scale-300);
432
+ }
433
+
434
+ .btn--small {
435
+ padding: var(--gap-2xs) var(--gap-s);
436
+ font-size: var(--font-size-s);
437
+ line-height: 20px;
438
+ min-height: var(--scale-400);
439
+ }
440
+
441
+ .btn--medium {
442
+ padding: var(--gap-xs) var(--gap-m);
443
+ font-size: var(--font-size-m);
444
+ line-height: 24px;
445
+ min-height: var(--scale-500);
446
+ }
447
+
448
+ .btn--large {
449
+ padding: var(--gap-s) var(--gap-xl);
450
+ font-size: 18px;
451
+ line-height: 28px;
452
+ min-height: var(--scale-600);
453
+ }
454
+
455
+ /* Button Variants */
456
+ /* Primary = Dark/Inverted background */
457
+ .btn--primary {
458
+ background-color: var(--color-surface-background-inverted);
459
+ color: var(--color-content-on-inverted-heading);
460
+ box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
461
+ }
462
+
463
+ .btn--primary:hover:not(.btn--disabled):not(.btn--loading) {
464
+ background-color: var(--color-surface-background-inverted);
465
+ opacity: 0.9;
466
+ box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
467
+ }
468
+
469
+ .btn--primary:active:not(.btn--disabled):not(.btn--loading) {
470
+ background-color: var(--color-surface-background-inverted);
471
+ opacity: 0.8;
472
+ transform: translateY(1px);
473
+ }
474
+
475
+ /* Accent = Blue/Secondary */
476
+ .btn--accent {
477
+ background-color: var(--color-accent-default);
478
+ color: var(--color-content-on-inverted-heading);
479
+ box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
480
+ }
481
+
482
+ .btn--accent:hover:not(.btn--disabled):not(.btn--loading) {
483
+ background-color: var(--color-accent-strong);
484
+ box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
485
+ }
486
+
487
+ .btn--accent:active:not(.btn--disabled):not(.btn--loading) {
488
+ background-color: var(--color-accent-strong);
489
+ transform: translateY(1px);
490
+ }
491
+
492
+ /* Tertiary = Ghost with border */
493
+ .btn--tertiary {
494
+ background-color: transparent;
495
+ color: var(--color-accent-default);
496
+ border: var(--stroke-thin) solid var(--color-stroke-medium);
497
+ }
498
+
499
+ .btn--tertiary:hover:not(.btn--disabled):not(.btn--loading) {
500
+ background-color: var(--color-accent-weaker);
501
+ border-color: var(--color-stroke-medium);
502
+ }
503
+
504
+ .btn--tertiary:active:not(.btn--disabled):not(.btn--loading) {
505
+ background-color: var(--color-accent-weak);
506
+ transform: translateY(1px);
507
+ }
508
+
509
+ /* Text = No background or border */
510
+ .btn--text {
511
+ background-color: transparent;
512
+ color: var(--color-accent-default);
513
+ border: none;
514
+ box-shadow: none;
515
+ }
516
+
517
+ .btn--text:hover:not(.btn--disabled):not(.btn--loading) {
518
+ background-color: var(--color-accent-weaker);
519
+ }
520
+
521
+ .btn--text:active:not(.btn--disabled):not(.btn--loading) {
522
+ background-color: var(--color-accent-weak);
523
+ transform: translateY(1px);
524
+ }
525
+
526
+ /* Danger = Destructive actions */
527
+ .btn--danger {
528
+ background-color: var(--color-feedback-negative-default);
529
+ color: var(--color-content-on-inverted-heading);
530
+ box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
531
+ }
532
+
533
+ .btn--danger:hover:not(.btn--disabled):not(.btn--loading) {
534
+ background-color: var(--color-feedback-negative-strong);
535
+ box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
536
+ }
537
+
538
+ .btn--danger:active:not(.btn--disabled):not(.btn--loading) {
539
+ background-color: var(--color-feedback-negative-strong);
540
+ transform: translateY(1px);
541
+ }
542
+
543
+ /* Button States */
544
+ .btn--disabled {
545
+ opacity: 0.5;
546
+ cursor: not-allowed;
547
+ pointer-events: none;
548
+ }
549
+
550
+ .btn--loading {
551
+ cursor: not-allowed;
552
+ pointer-events: none;
553
+ }
554
+
555
+ .btn--full-width {
556
+ width: 100%;
557
+ }
558
+
559
+ /* Button Content */
560
+ .btn__content {
561
+ display: flex;
562
+ align-items: center;
563
+ gap: var(--gap-xs);
564
+ }
565
+
566
+ .btn__icon {
567
+ display: flex;
568
+ align-items: center;
569
+ justify-content: center;
570
+ flex-shrink: 0;
571
+ }
572
+
573
+ .btn__icon--start {
574
+ margin-right: 0;
575
+ }
576
+
577
+ .btn__icon--end {
578
+ margin-left: 0;
579
+ }
580
+
581
+ /* Loading Spinner */
582
+ .btn__spinner {
583
+ display: flex;
584
+ align-items: center;
585
+ justify-content: center;
586
+ flex-shrink: 0;
587
+ margin-right: var(--gap-xs);
588
+ }
589
+
590
+ .btn__spinner-icon {
591
+ width: var(--scale-200);
592
+ height: var(--scale-200);
593
+ animation: spin 0.8s linear infinite;
594
+ }
595
+
596
+ .btn--xsmall .btn__spinner-icon {
597
+ width: var(--scale-150);
598
+ height: var(--scale-150);
599
+ }
600
+
601
+ .btn--small .btn__spinner-icon {
602
+ width: var(--scale-175);
603
+ height: var(--scale-175);
604
+ }
605
+
606
+ .btn--large .btn__spinner-icon {
607
+ width: var(--scale-225);
608
+ height: var(--scale-225);
609
+ }
610
+
611
+ .btn__spinner-circle {
612
+ stroke-dasharray: 60;
613
+ stroke-dashoffset: 45;
614
+ transform-origin: center;
615
+ }
616
+
617
+ @keyframes spin {
618
+ from {
619
+ transform: rotate(0deg);
620
+ }
621
+ to {
622
+ transform: rotate(360deg);
623
+ }
624
+ }
625
+
626
+ /* Responsive Design */
627
+ @media (max-width: 640px) {
628
+ .btn--large {
629
+ padding: var(--gap-2xs) var(--gap-l);
630
+ font-size: var(--font-size-m);
631
+ min-height: var(--scale-550);
632
+ }
633
+
634
+ .btn--medium {
635
+ padding: var(--gap-xs) var(--gap-s);
636
+ font-size: var(--font-size-s);
637
+ min-height: var(--scale-500);
638
+ }
639
+ }
640
+
641
+
642
+ /* src/components/Card/Card.css */
643
+ @import '../../tokens/tokens.css';
644
+
645
+ /* Card Base Styles */
646
+ .card {
647
+ background-color: var(--color-surface-default);
648
+ border-radius: var(--radius-m);
649
+ border: var(--stroke-thin) solid var(--color-stroke-subtle);
650
+ overflow: hidden;
651
+ width: 100%;
652
+ max-width: var(--max-width-tablet);
653
+ }
654
+
655
+ .card__container {
656
+ display: flex;
657
+ flex-direction: column;
658
+ width: 100%;
659
+ }
660
+
661
+ /* Card Header */
662
+ .card__header {
663
+ display: flex;
664
+ align-items: center;
665
+ justify-content: space-between;
666
+ padding: var(--gap-l);
667
+ gap: var(--gap-m);
668
+ }
669
+
670
+ .card__header-title {
671
+ display: flex;
672
+ align-items: center;
673
+ gap: var(--gap-xs);
674
+ flex: 1;
675
+ }
676
+
677
+ .card__header-icon {
678
+ display: flex;
679
+ align-items: center;
680
+ justify-content: center;
681
+ width: var(--scale-400);
682
+ height: var(--scale-400);
683
+ flex-shrink: 0;
684
+ }
685
+
686
+ .card__header-text {
687
+ font-family: var(--font-family-default);
688
+ font-size: var(--font-size-s);
689
+ font-weight: 600;
690
+ line-height: 1.1;
691
+ color: var(--color-content-secondary);
692
+ white-space: nowrap;
693
+ }
694
+
695
+ .card__header-action {
696
+ height: var(--scale-400);
697
+ min-width: var(--scale-800);
698
+ max-width: var(--max-width-tablet);
699
+ }
700
+
701
+ .card__action-button {
702
+ display: flex;
703
+ align-items: center;
704
+ justify-content: center;
705
+ height: 100%;
706
+ padding: 0 var(--gap-m);
707
+ border: none;
708
+ background: transparent;
709
+ border-radius: var(--radius-s);
710
+ cursor: pointer;
711
+ transition: background-color 0.2s ease;
712
+ }
713
+
714
+ .card__action-button:hover {
715
+ background-color: var(--color-surface-layer);
716
+ }
717
+
718
+ .card__action-text {
719
+ font-family: var(--font-family-default);
720
+ font-size: var(--font-size-s);
721
+ font-weight: 600;
722
+ line-height: 1.2;
723
+ color: var(--color-accent-default);
724
+ white-space: nowrap;
725
+ }
726
+
727
+ /* Card Body */
728
+ .card__body {
729
+ padding: var(--gap-l);
730
+ display: flex;
731
+ flex-direction: column;
732
+ gap: var(--gap-xs);
733
+ }
734
+
735
+ .card__content {
736
+ display: flex;
737
+ flex-direction: column;
738
+ gap: var(--gap-l);
739
+ }
740
+
741
+ /* Plan Section */
742
+ .card__plan {
743
+ display: flex;
744
+ align-items: center;
745
+ gap: var(--gap-s);
746
+ }
747
+
748
+ .card__plan-icon {
749
+ width: var(--scale-500);
750
+ height: var(--scale-500);
751
+ flex-shrink: 0;
752
+ }
753
+
754
+ .card__plan-name {
755
+ font-family: var(--font-family-default);
756
+ font-size: var(--scale-400);
757
+ font-weight: 600;
758
+ line-height: 1.2;
759
+ color: var(--color-content-primary);
760
+ flex: 1;
761
+ }
762
+
763
+ /* Price Section */
764
+ .card__price-section {
765
+ display: flex;
766
+ flex-direction: column;
767
+ gap: var(--gap-xs);
768
+ }
769
+
770
+ .card__price {
771
+ display: flex;
772
+ align-items: center;
773
+ gap: var(--gap-xs);
774
+ font-family: var(--font-family-default);
775
+ font-weight: 600;
776
+ }
777
+
778
+ .card__price-currency {
779
+ font-size: var(--font-size-l);
780
+ line-height: 1.3;
781
+ color: var(--color-content-secondary);
782
+ }
783
+
784
+ .card__price-amount {
785
+ font-size: var(--font-size-xl);
786
+ line-height: 1.2;
787
+ color: var(--color-content-primary);
788
+ }
789
+
790
+ .card__price-period {
791
+ font-size: var(--font-size-l);
792
+ line-height: 1.3;
793
+ color: var(--color-content-secondary);
794
+ width: var(--scale-1750);
795
+ }
796
+
797
+ /* Seats Section */
798
+ .card__seats {
799
+ display: flex;
800
+ flex-direction: column;
801
+ gap: var(--gap-xs);
802
+ }
803
+
804
+ .card__seats-divider {
805
+ height: var(--stroke-thin);
806
+ background-color: var(--color-stroke-subtle);
807
+ margin: var(--gap-xs) 0;
808
+ }
809
+
810
+ .card__seats-info {
811
+ display: flex;
812
+ align-items: center;
813
+ justify-content: space-between;
814
+ padding: 0;
815
+ }
816
+
817
+ .card__seats-count {
818
+ display: flex;
819
+ align-items: center;
820
+ gap: var(--gap-xs);
821
+ font-family: var(--font-family-default);
822
+ font-size: var(--font-size-s);
823
+ font-weight: 600;
824
+ line-height: 1.1;
825
+ color: var(--color-content-tertiary);
826
+ flex: 1;
827
+ }
828
+
829
+ .card__seats-teams {
830
+ display: flex;
831
+ align-items: center;
832
+ gap: var(--gap-xs);
833
+ }
834
+
835
+ .card__seats-multiplier {
836
+ font-size: var(--font-size-l);
837
+ line-height: 1.3;
838
+ color: var(--color-content-secondary);
839
+ }
840
+
841
+ .card__seats-number {
842
+ font-size: var(--font-size-xl);
843
+ line-height: 1.2;
844
+ color: var(--color-content-primary);
845
+ }
846
+
847
+ .card__seats-text {
848
+ font-size: var(--font-size-l);
849
+ line-height: 1.3;
850
+ color: var(--color-content-secondary);
851
+ }
852
+
853
+ .card__seats-edit {
854
+ display: flex;
855
+ align-items: center;
856
+ justify-content: center;
857
+ height: var(--scale-400);
858
+ padding: 0 var(--gap-3xs);
859
+ border: none;
860
+ background: transparent;
861
+ border-radius: var(--radius-s);
862
+ cursor: pointer;
863
+ transition: background-color 0.2s ease;
864
+ }
865
+
866
+ .card__seats-edit:hover {
867
+ background-color: var(--color-surface-layer);
868
+ }
869
+
870
+ .card__seats-edit span {
871
+ font-family: var(--font-family-default);
872
+ font-size: var(--font-size-s);
873
+ font-weight: 600;
874
+ line-height: 1.2;
875
+ color: var(--color-accent-default);
876
+ }
877
+
878
+ .card__seats-upgrade {
879
+ font-family: var(--font-family-default);
880
+ font-size: var(--font-size-xs);
881
+ font-weight: 400;
882
+ line-height: 1.2;
883
+ color: var(--color-content-tertiary);
884
+ text-align: right;
885
+ width: var(--scale-1600);
886
+ }
887
+
888
+ /* Card Footer */
889
+ .card__footer {
890
+ background-color: var(--color-surface-layer);
891
+ display: flex;
892
+ align-items: center;
893
+ justify-content: space-between;
894
+ padding: var(--gap-m) var(--gap-l);
895
+ gap: var(--gap-m);
896
+ border-radius: 0 0 var(--radius-m) var(--radius-m);
897
+ }
898
+
899
+ .card__footer-left {
900
+ display: flex;
901
+ align-items: center;
902
+ gap: var(--gap-xs);
903
+ flex: 1;
904
+ }
905
+
906
+ .card__footer-price {
907
+ display: flex;
908
+ align-items: center;
909
+ gap: var(--gap-3xs);
910
+ font-family: var(--font-family-default);
911
+ font-weight: 600;
912
+ }
913
+
914
+ .card__footer-currency {
915
+ font-size: var(--font-size-xl);
916
+ line-height: 1.2;
917
+ color: var(--color-content-secondary);
918
+ }
919
+
920
+ .card__footer-amount {
921
+ font-size: var(--scale-400);
922
+ line-height: 1.2;
923
+ color: var(--color-content-primary);
924
+ }
925
+
926
+ .card__footer-label {
927
+ font-family: var(--font-family-default);
928
+ font-size: var(--font-size-s);
929
+ font-weight: 400;
930
+ line-height: 1.2;
931
+ color: var(--color-content-primary);
932
+ flex: 1;
933
+ }
934
+
935
+ .card__footer-right {
936
+ display: flex;
937
+ flex-direction: column;
938
+ align-items: flex-end;
939
+ justify-content: center;
940
+ min-width: var(--scale-1250);
941
+ }
942
+
943
+ .card__footer-renewal {
944
+ font-family: var(--font-family-default);
945
+ font-size: var(--font-size-s);
946
+ font-weight: 400;
947
+ line-height: 1.2;
948
+ color: var(--color-content-secondary);
949
+ }
950
+
951
+ .card__footer-date {
952
+ font-family: var(--font-family-default);
953
+ font-size: var(--font-size-s);
954
+ font-weight: 400;
955
+ line-height: 1.2;
956
+ color: var(--color-content-secondary);
957
+ }
958
+
959
+ /* Plan Icons */
960
+ .plan-icon {
961
+ position: relative;
962
+ width: 100%;
963
+ height: 100%;
964
+ }
965
+
966
+ .plan-icon__square {
967
+ position: absolute;
968
+ background-color: var(--color-surface-layer-strong);
969
+ border-radius: var(--radius-xs);
970
+ }
971
+
972
+ /* Starter Plan Icons */
973
+ .plan-icon--starter .plan-icon__square--left {
974
+ top: 27.5%;
975
+ left: 0;
976
+ right: 55%;
977
+ bottom: 27.5%;
978
+ }
979
+
980
+ .plan-icon--starter .plan-icon__square--right {
981
+ top: 27.5%;
982
+ left: 55%;
983
+ right: 0;
984
+ bottom: 27.5%;
985
+ }
986
+
987
+ /* Individual Plan Icons */
988
+ .plan-icon--individual .plan-icon__square--top-left {
989
+ top: 0;
990
+ left: 0;
991
+ right: 55%;
992
+ bottom: 55%;
993
+ }
994
+
995
+ .plan-icon--individual .plan-icon__square--bottom-left {
996
+ top: 55%;
997
+ left: 0;
998
+ right: 55%;
999
+ bottom: 0;
1000
+ }
1001
+
1002
+ .plan-icon--individual .plan-icon__square--top-right {
1003
+ top: 0;
1004
+ left: 55%;
1005
+ right: 0;
1006
+ bottom: 55%;
1007
+ }
1008
+
1009
+ .plan-icon--individual .plan-icon__square--bottom-right {
1010
+ top: 55%;
1011
+ left: 55%;
1012
+ right: 0;
1013
+ bottom: 0;
1014
+ }
1015
+
1016
+ /* Teams Plan Icons */
1017
+ .plan-icon--teams .plan-icon__square--top-left {
1018
+ top: 0;
1019
+ left: 0;
1020
+ right: 70%;
1021
+ bottom: 70%;
1022
+ }
1023
+
1024
+ .plan-icon--teams .plan-icon__square--middle-left {
1025
+ top: 35%;
1026
+ left: 0;
1027
+ right: 70%;
1028
+ bottom: 35%;
1029
+ }
1030
+
1031
+ .plan-icon--teams .plan-icon__square--bottom-center {
1032
+ top: 70%;
1033
+ left: 35%;
1034
+ right: 35%;
1035
+ bottom: 0;
1036
+ }
1037
+
1038
+ .plan-icon--teams .plan-icon__square--top-center {
1039
+ top: 0;
1040
+ left: 35%;
1041
+ right: 35%;
1042
+ bottom: 70%;
1043
+ }
1044
+
1045
+ .plan-icon--teams .plan-icon__square--middle-right {
1046
+ top: 35%;
1047
+ left: 70%;
1048
+ right: 0;
1049
+ bottom: 35%;
1050
+ }
1051
+
1052
+ .plan-icon--teams .plan-icon__square--center {
1053
+ top: 35%;
1054
+ left: 35%;
1055
+ right: 35%;
1056
+ bottom: 35%;
1057
+ }
1058
+
1059
+ .plan-icon--teams .plan-icon__square--bottom-right {
1060
+ top: 70%;
1061
+ left: 70%;
1062
+ right: 0;
1063
+ bottom: 0;
1064
+ }
1065
+
1066
+ /* Responsive Design */
1067
+ @media (max-width: 640px) {
1068
+ .card {
1069
+ max-width: 100%;
1070
+ }
1071
+
1072
+ .card__header {
1073
+ padding: var(--gap-m);
1074
+ gap: var(--gap-s);
1075
+ }
1076
+
1077
+ .card__body {
1078
+ padding: var(--gap-m);
1079
+ }
1080
+
1081
+ .card__footer {
1082
+ padding: var(--gap-s) var(--gap-m);
1083
+ }
1084
+
1085
+ .card__plan-name {
1086
+ font-size: var(--scale-350);
1087
+ }
1088
+
1089
+ .card__price-amount {
1090
+ font-size: var(--font-size-l);
1091
+ }
1092
+
1093
+ .card__footer-amount {
1094
+ font-size: var(--scale-350);
1095
+ }
1096
+ }
1097
+
1098
+
1099
+ /* src/components/Icon/Icon.css */
1100
+ @import '../../tokens/tokens.css';
1101
+
1102
+ /* Icon Base Styles */
1103
+ .icon {
1104
+ display: inline-flex;
1105
+ align-items: center;
1106
+ justify-content: center;
1107
+ flex-shrink: 0;
1108
+ user-select: none;
1109
+ cursor: default;
1110
+ }
1111
+
1112
+ .icon svg {
1113
+ display: block;
1114
+ width: 100%;
1115
+ height: 100%;
1116
+ }
1117
+
1118
+ /* Icon Sizes */
1119
+ .icon--xs {
1120
+ width: var(--scale-200);
1121
+ height: var(--scale-200);
1122
+ }
1123
+
1124
+ .icon--s {
1125
+ width: var(--scale-250);
1126
+ height: var(--scale-250);
1127
+ }
1128
+
1129
+ .icon--m {
1130
+ width: var(--scale-300);
1131
+ height: var(--scale-300);
1132
+ }
1133
+
1134
+ .icon--l {
1135
+ width: var(--scale-400);
1136
+ height: var(--scale-400);
1137
+ }
1138
+
1139
+ /* Clickable Icons */
1140
+ .icon[onclick] {
1141
+ cursor: pointer;
1142
+ transition: opacity 0.2s ease;
1143
+ }
1144
+
1145
+ .icon[onclick]:hover {
1146
+ opacity: 0.7;
1147
+ }
1148
+
1149
+ .icon[onclick]:active {
1150
+ opacity: 0.5;
1151
+ }
1152
+
1153
+ /* Icon Colors */
1154
+ .icon--primary {
1155
+ color: var(--color-content-primary);
1156
+ }
1157
+
1158
+ .icon--secondary {
1159
+ color: var(--color-content-secondary);
1160
+ }
1161
+
1162
+ .icon--accent {
1163
+ color: var(--color-accent-default);
1164
+ }
1165
+
1166
+ .icon--success {
1167
+ color: var(--color-feedback-positive-default);
1168
+ }
1169
+
1170
+ .icon--warning {
1171
+ color: var(--color-feedback-warning-default);
1172
+ }
1173
+
1174
+ .icon--error {
1175
+ color: var(--color-feedback-negative-default);
1176
+ }
1177
+
1178
+ .icon--white {
1179
+ color: var(--color-content-on-inverted-heading);
1180
+ }
1181
+
1182
+ /* Responsive Design */
1183
+ @media (max-width: 640px) {
1184
+ .icon--l {
1185
+ width: var(--scale-350);
1186
+ height: var(--scale-350);
1187
+ }
1188
+
1189
+ .icon--m {
1190
+ width: var(--scale-275);
1191
+ height: var(--scale-275);
1192
+ }
1193
+ }
1194
+