@rakeyshgidwani/roger-ui-bank-theme-stan-design 0.1.6 → 0.1.7

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.
Files changed (82) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/dist/index.d.ts +7 -0
  3. package/dist/index.esm.js +18 -1
  4. package/dist/index.js +18 -1
  5. package/dist/setupTests.d.ts +124 -0
  6. package/dist/setupTests.esm.js +122 -0
  7. package/dist/setupTests.js +122 -0
  8. package/dist/styles.css +1 -1
  9. package/package.json +1 -1
  10. package/src/index.css +1046 -0
  11. package/src/index.ts +18 -0
  12. package/src/plugins/theme-css-generator.ts +354 -0
  13. package/src/setupTests.ts +124 -0
  14. package/src/stories/README.md +39 -0
  15. package/src/stories/components/ThemeDebugger.tsx +143 -0
  16. package/src/stories/index.ts +29 -0
  17. package/src/stories/storybook-theme-imports.css +51 -0
  18. package/src/styles/base/fonts.css +30 -0
  19. package/src/styles/base/generated-theme-variables.css +573 -0
  20. package/src/styles/base/index.css +7 -0
  21. package/src/styles/base/reset.css +48 -0
  22. package/src/styles/base/theme.css +1068 -0
  23. package/src/styles/base/typography.css +68 -0
  24. package/src/styles/base/variables.css +5 -0
  25. package/src/styles/components/CLAUDE.md +62 -0
  26. package/src/styles/components/base/badge.css +428 -0
  27. package/src/styles/components/base/button.css +774 -0
  28. package/src/styles/components/base/card.css +601 -0
  29. package/src/styles/components/base/checkbox.css +442 -0
  30. package/src/styles/components/base/index.css +9 -0
  31. package/src/styles/components/base/input.css +887 -0
  32. package/src/styles/components/base/label.css +296 -0
  33. package/src/styles/components/data-display/chart.css +353 -0
  34. package/src/styles/components/data-display/data-grid.css +619 -0
  35. package/src/styles/components/data-display/index.css +9 -0
  36. package/src/styles/components/data-display/list.css +560 -0
  37. package/src/styles/components/data-display/table.css +498 -0
  38. package/src/styles/components/data-display/timeline.css +764 -0
  39. package/src/styles/components/data-display/tree.css +881 -0
  40. package/src/styles/components/feedback/alert.css +358 -0
  41. package/src/styles/components/feedback/index.css +7 -0
  42. package/src/styles/components/feedback/progress.css +435 -0
  43. package/src/styles/components/feedback/skeleton.css +337 -0
  44. package/src/styles/components/feedback/toast.css +564 -0
  45. package/src/styles/components/index.css +17 -0
  46. package/src/styles/components/navigation/breadcrumb.css +465 -0
  47. package/src/styles/components/navigation/index.css +9 -0
  48. package/src/styles/components/navigation/menu.css +572 -0
  49. package/src/styles/components/navigation/pagination.css +635 -0
  50. package/src/styles/components/navigation/sidebar.css +807 -0
  51. package/src/styles/components/navigation/stepper.css +519 -0
  52. package/src/styles/components/navigation/tabs.css +404 -0
  53. package/src/styles/components/overlay/backdrop.css +243 -0
  54. package/src/styles/components/overlay/index.css +8 -0
  55. package/src/styles/components/overlay/modal.css +482 -0
  56. package/src/styles/components/overlay/popover.css +607 -0
  57. package/src/styles/components/overlay/portal.css +213 -0
  58. package/src/styles/components/overlay/tooltip.css +488 -0
  59. package/src/styles/generated-theme-variables.css +573 -0
  60. package/src/styles/index.css +5 -0
  61. package/src/styles/layers/index.css +54 -0
  62. package/src/styles/layers/overrides.css +108 -0
  63. package/src/styles/layers/validation.css +159 -0
  64. package/src/styles/layers/validation.js +310 -0
  65. package/src/styles/themes/default.css +450 -0
  66. package/src/styles/themes/enterprise.css +370 -0
  67. package/src/styles/themes/harvey.css +436 -0
  68. package/src/styles/themes/index.css +4 -0
  69. package/src/styles/themes/stan-design.css +572 -0
  70. package/src/styles/utilities/advanced-transition-system.css +467 -0
  71. package/src/styles/utilities/battery-conscious-animations.css +289 -0
  72. package/src/styles/utilities/enterprise-mobile-experience.css +817 -0
  73. package/src/styles/utilities/hardware-acceleration.css +121 -0
  74. package/src/styles/utilities/index.css +20 -0
  75. package/src/styles/utilities/mobile-skeleton-loading.css +596 -0
  76. package/src/styles/utilities/semantic-input-system.css +451 -0
  77. package/src/styles/utilities/touch-friendly-interface.css +247 -0
  78. package/src/styles/utilities/touch-optimization.css +165 -0
  79. package/src/test-utils/index.ts +7 -0
  80. package/src/test-utils/theme-testing.tsx +219 -0
  81. package/src/testing/test-automation.ts +627 -0
  82. package/src/testing/test-utils.tsx +367 -0
@@ -0,0 +1,774 @@
1
+ /* Button Component Styles */
2
+ /* Using semantic CSS architecture with CSS variables and BEM methodology */
3
+
4
+ /* Button Component CSS Variables */
5
+ :root {
6
+ /* Button Base Variables */
7
+ --button-height-sm: calc(var(--cs-spacing-scale-2xl) + var(--cs-spacing-scale-md));
8
+ --button-height-md: calc(var(--cs-spacing-scale-2xl) + var(--cs-spacing-scale-lg));
9
+ --button-height-lg: var(--cs-spacing-scale-3xl);
10
+ --button-height-icon: calc(var(--cs-spacing-scale-2xl) + var(--cs-spacing-scale-lg));
11
+ --button-height-mobile: var(--cs-spacing-scale-3xl);
12
+
13
+ --button-padding-y-sm: var(--cs-spacing-scale-sm);
14
+ --button-padding-x-sm: var(--cs-spacing-scale-md);
15
+ --button-padding-y-md: var(--cs-spacing-scale-md);
16
+ --button-padding-x-md: var(--cs-spacing-scale-lg);
17
+ --button-padding-y-lg: var(--cs-spacing-scale-lg);
18
+ --button-padding-x-lg: var(--cs-spacing-scale-xl);
19
+ --button-padding-icon: var(--cs-spacing-scale-sm);
20
+ --button-padding-mobile-y: var(--cs-spacing-scale-lg);
21
+ --button-padding-mobile-x: var(--cs-spacing-scale-xl);
22
+
23
+ --button-font-size-sm: var(--cs-fonts-primary-sizes-sm);
24
+ --button-font-size-md: var(--cs-fonts-primary-sizes-base);
25
+ --button-font-size-lg: var(--cs-fonts-primary-sizes-lg);
26
+ --button-font-size-mobile: var(--cs-fonts-primary-sizes-base);
27
+
28
+ --button-font-weight: var(--cs-fonts-primary-weights-medium);
29
+ --button-line-height: var(--cs-fonts-primary-line-heights-tight);
30
+ --button-border-radius: var(--cs-border-radius-md);
31
+ --button-transition: var(--cs-transitions-properties-colors);
32
+ --button-gap: var(--cs-spacing-scale-sm);
33
+
34
+ /* Button Variant Variables */
35
+ --button-default-background: var(--cs-colors-primary-500);
36
+ --button-default-text: var(--cs-colors-text-on-primary);
37
+ --button-default-border: var(--cs-colors-primary-500);
38
+ --button-default-shadow: var(--cs-shadows-sm);
39
+
40
+ --button-primary-background: var(--cs-colors-primary-500);
41
+ --button-primary-text: var(--cs-colors-text-on-primary);
42
+ --button-primary-border: var(--cs-colors-primary-500);
43
+ --button-primary-shadow: var(--cs-shadows-sm);
44
+
45
+ --button-secondary-background: var(--cs-colors-secondary-100);
46
+ --button-secondary-text: var(--cs-colors-text-primary);
47
+ --button-secondary-border: var(--cs-colors-border);
48
+ --button-secondary-shadow: var(--cs-shadows-sm);
49
+
50
+ --button-outline-background: transparent;
51
+ --button-outline-text: var(--cs-colors-text-primary);
52
+ --button-outline-border: var(--cs-colors-border);
53
+ --button-outline-shadow: var(--cs-shadows-sm);
54
+
55
+ --button-ghost-background: transparent;
56
+ --button-ghost-text: var(--cs-colors-text-secondary);
57
+ --button-ghost-border: transparent;
58
+ --button-ghost-shadow: none;
59
+
60
+ --button-destructive-background: var(--cs-colors-semantic-error);
61
+ --button-destructive-text: var(--cs-colors-text-inverse);
62
+ --button-destructive-border: var(--cs-colors-semantic-error);
63
+ --button-destructive-shadow: var(--cs-shadows-sm);
64
+
65
+ --button-link-background: transparent;
66
+ --button-link-text: var(--cs-colors-primary-500);
67
+ --button-link-border: none;
68
+ --button-link-shadow: none;
69
+ --button-link-padding-y: var(--cs-spacing-scale-sm);
70
+ --button-link-padding-x: var(--cs-spacing-scale-md);
71
+ --button-link-underline-offset: var(--cs-spacing-scale-xs);
72
+
73
+ /* Button Hover State Variables */
74
+ --button-default-hover-background: var(--cs-colors-primary-hover);
75
+ --button-default-hover-border: var(--cs-colors-primary-hover);
76
+ --button-default-hover-shadow: var(--cs-shadows-md);
77
+
78
+ --button-primary-hover-background: var(--cs-colors-primary-hover);
79
+ --button-primary-hover-border: var(--cs-colors-primary-hover);
80
+ --button-primary-hover-shadow: var(--cs-shadows-md);
81
+
82
+ --button-secondary-hover-background: var(--cs-colors-interactive-hover);
83
+ --button-secondary-hover-border: var(--cs-colors-primary-500);
84
+ --button-secondary-hover-shadow: var(--cs-shadows-md);
85
+
86
+ --button-outline-hover-background: var(--cs-colors-interactive-hover);
87
+ --button-outline-hover-border: var(--cs-colors-primary-500);
88
+ --button-outline-hover-shadow: var(--cs-shadows-md);
89
+
90
+ --button-ghost-hover-background: var(--cs-colors-interactive-hover);
91
+ --button-ghost-hover-text: var(--cs-colors-text-primary);
92
+ --button-ghost-hover-shadow: var(--cs-shadows-sm);
93
+
94
+ --button-destructive-hover-background: var(--cs-colors-semantic-error-dark);
95
+ --button-destructive-hover-border: var(--cs-colors-semantic-error-dark);
96
+ --button-destructive-hover-shadow: var(--cs-shadows-md);
97
+
98
+ --button-link-hover-text: var(--cs-colors-primary-hover);
99
+ --button-link-hover-underline-thickness: var(--button-link-hover-underline-thickness);
100
+
101
+ /* Button Interactive State Variables */
102
+ --button-focus-outline: var(--button-focus-outline-width) solid var(--cs-colors-interactive-focus);
103
+ --button-focus-offset: var(--button-focus-offset);
104
+ --button-focus-visible-outline: var(--button-focus-visible-outline-width) solid var(--cs-colors-interactive-focus);
105
+ --button-focus-visible-offset: var(--button-focus-visible-offset);
106
+
107
+ --button-active-transform: scale(0.98);
108
+ --button-active-shadow: var(--cs-shadows-sm);
109
+
110
+ --button-hover-transform: translateY(calc(-1 * var(--cs-spacing-scale-xs)));
111
+ --button-hover-shadow: var(--cs-shadows-md);
112
+
113
+ /* Button State Variables */
114
+ --button-loading-color: transparent;
115
+ --button-loading-spinner-size: var(--cs-spacing-scale-lg);
116
+ --button-loading-spinner-animation: spin 1s linear infinite;
117
+
118
+ --button-disabled-background: var(--cs-colors-interactive-disabled);
119
+ --button-disabled-text: var(--cs-colors-text-muted);
120
+ --button-disabled-border: var(--cs-colors-interactive-disabled);
121
+ --button-disabled-opacity: var(--button-disabled-opacity);
122
+ --button-disabled-cursor: var(--button-disabled-cursor);
123
+
124
+ /* Button Element Variables */
125
+ --button-icon-size: var(--cs-spacing-scale-lg);
126
+ --button-icon-pointer-events: var(--button-icon-pointer-events);
127
+ --button-icon-flex-shrink: var(--button-icon-flex-shrink);
128
+
129
+ --button-content-gap: var(--cs-spacing-scale-sm);
130
+
131
+ --button-spinner-size: var(--cs-spacing-scale-lg);
132
+ --button-spinner-animation: spin 1s linear infinite;
133
+
134
+ /* Button Accessibility Variables */
135
+ --button-touch-target-min-height: var(--button-touch-target-min-height);
136
+ --button-touch-target-min-width: var(--button-touch-target-min-width);
137
+ --button-touch-target-breakpoint: var(--button-touch-target-breakpoint);
138
+
139
+ --button-high-contrast-border-width: var(--button-high-contrast-border-width);
140
+ --button-high-contrast-focus-outline-width: var(--button-high-contrast-focus-outline-width);
141
+
142
+ /* Button Focus Variables */
143
+ --button-focus-outline-width: var(--cs-border-width-focus);
144
+ --button-focus-visible-outline-width: var(--cs-border-width-focus);
145
+ --button-focus-offset: var(--cs-border-width-focus);
146
+ --button-focus-visible-offset: var(--cs-border-width-focus);
147
+
148
+ /* Button Link Variables */
149
+ --button-link-hover-underline-thickness: var(--cs-border-width-focus);
150
+
151
+ /* Button Icon Variables */
152
+ --button-icon-pointer-events: none;
153
+ --button-icon-flex-shrink: 0;
154
+
155
+ /* Button Disabled Variables */
156
+ --button-disabled-cursor: not-allowed;
157
+ --button-disabled-opacity: 0.6;
158
+
159
+ /* Button Responsive Variables */
160
+ --button-mobile-breakpoint: var(--cs-breakpoints-mobile);
161
+ --button-tablet-breakpoint: var(--cs-breakpoints-tablet);
162
+ --button-desktop-breakpoint: var(--cs-breakpoints-desktop);
163
+
164
+ /* Button Showcase Variables */
165
+ --button-showcase-gap: var(--cs-spacing-scale-md);
166
+ --button-variant-showcase-gap: var(--cs-spacing-scale-md);
167
+ --button-size-showcase-gap: var(--cs-spacing-scale-md);
168
+ --button-state-showcase-gap: var(--cs-spacing-scale-md);
169
+ --button-responsive-showcase-gap: var(--cs-spacing-scale-md);
170
+
171
+ --button-showcase-title-size: var(--cs-fonts-primary-sizes-lg);
172
+ --button-showcase-title-weight: var(--cs-fonts-primary-weights-semibold);
173
+ --button-showcase-description-size: var(--cs-fonts-primary-sizes-sm);
174
+ --button-showcase-description-color: var(--cs-colors-text-muted);
175
+
176
+ --button-showcase-grid-gap: var(--cs-spacing-scale-sm);
177
+ --button-responsive-grid-gap: var(--cs-spacing-scale-md);
178
+ --button-responsive-grid-max-width: var(--cs-spacing-scale-6xl);
179
+ }
180
+
181
+ /* Base Button Component */
182
+ .button {
183
+ /* Layout */
184
+ display: inline-flex;
185
+ align-items: center;
186
+ justify-content: center;
187
+ gap: var(--button-gap);
188
+
189
+ /* Sizing */
190
+ border-radius: var(--button-border-radius);
191
+
192
+ /* Typography */
193
+ font-family: var(--cs-fonts-primary-family);
194
+ font-weight: var(--button-font-weight);
195
+ line-height: var(--button-line-height);
196
+
197
+ /* Visual Styling */
198
+ border: none;
199
+ outline: none;
200
+ text-decoration: none;
201
+ white-space: nowrap;
202
+
203
+ /* Transitions */
204
+ transition: var(--button-transition);
205
+
206
+ /* Interactive States */
207
+ cursor: pointer;
208
+ position: relative;
209
+ user-select: none;
210
+ }
211
+
212
+ /* Button Elements */
213
+ .button__icon {
214
+ pointer-events: var(--button-icon-pointer-events);
215
+ flex-shrink: var(--button-icon-flex-shrink);
216
+ width: var(--button-icon-size);
217
+ height: var(--button-icon-size);
218
+ }
219
+
220
+ .button__content {
221
+ display: flex;
222
+ align-items: center;
223
+ gap: var(--button-content-gap);
224
+ }
225
+
226
+ .button__spinner {
227
+ width: var(--button-spinner-size);
228
+ height: var(--button-spinner-size);
229
+ animation: var(--button-spinner-animation);
230
+ }
231
+
232
+ @keyframes spin {
233
+ from { transform: rotate(0deg); }
234
+ to { transform: rotate(360deg); }
235
+ }
236
+
237
+ /* Button Size Variants */
238
+ .button--size-sm {
239
+ height: var(--button-height-sm);
240
+ padding: var(--button-padding-y-sm) var(--button-padding-x-sm);
241
+ font-size: var(--button-font-size-sm);
242
+ border-radius: var(--button-border-radius);
243
+ }
244
+
245
+ .button--size-md {
246
+ height: var(--button-height-md);
247
+ padding: var(--button-padding-y-md) var(--button-padding-x-md);
248
+ font-size: var(--button-font-size-md);
249
+ border-radius: var(--button-border-radius);
250
+ }
251
+
252
+ .button--size-lg {
253
+ height: var(--button-height-lg);
254
+ padding: var(--button-padding-y-lg) var(--button-padding-x-lg);
255
+ font-size: var(--button-font-size-lg);
256
+ border-radius: var(--button-border-radius);
257
+ }
258
+
259
+ .button--size-icon {
260
+ height: var(--button-height-icon);
261
+ width: var(--button-height-icon);
262
+ padding: var(--button-padding-icon);
263
+ border-radius: var(--button-border-radius);
264
+ }
265
+
266
+ .button--size-mobile {
267
+ height: var(--button-height-mobile);
268
+ padding: var(--button-padding-mobile-y) var(--button-padding-mobile-x);
269
+ font-size: var(--button-font-size-mobile);
270
+ border-radius: var(--button-border-radius);
271
+ }
272
+
273
+ /* Button Variants */
274
+ .button--variant-default {
275
+ background-color: var(--button-default-background);
276
+ color: var(--button-default-text);
277
+ border: var(--cs-border-width-normal) solid var(--button-default-border);
278
+ box-shadow: var(--button-default-shadow);
279
+ }
280
+
281
+ .button--variant-default:hover {
282
+ background-color: var(--button-default-hover-background);
283
+ border-color: var(--button-default-hover-border);
284
+ box-shadow: var(--button-default-hover-shadow);
285
+ transform: var(--button-hover-transform);
286
+ }
287
+
288
+ .button--variant-default:focus {
289
+ outline: var(--button-focus-outline);
290
+ outline-offset: var(--button-focus-offset);
291
+ }
292
+
293
+ .button--variant-default:active {
294
+ transform: var(--button-active-transform);
295
+ box-shadow: var(--button-active-shadow);
296
+ }
297
+
298
+ .button--variant-primary {
299
+ background-color: var(--button-primary-background);
300
+ color: var(--button-primary-text);
301
+ border: var(--cs-border-width-normal) solid var(--button-primary-border);
302
+ box-shadow: var(--button-primary-shadow);
303
+ }
304
+
305
+ .button--variant-primary:hover {
306
+ background-color: var(--button-primary-hover-background);
307
+ border-color: var(--button-primary-hover-border);
308
+ box-shadow: var(--button-primary-hover-shadow);
309
+ transform: var(--button-hover-transform);
310
+ }
311
+
312
+ .button--variant-primary:focus {
313
+ outline: var(--button-focus-outline);
314
+ outline-offset: var(--button-focus-offset);
315
+ }
316
+
317
+ .button--variant-primary:active {
318
+ transform: var(--button-active-transform);
319
+ box-shadow: var(--button-active-shadow);
320
+ }
321
+
322
+ .button--variant-secondary {
323
+ background-color: var(--button-secondary-background);
324
+ color: var(--button-secondary-text);
325
+ border: var(--cs-border-width-normal) solid var(--button-secondary-border);
326
+ box-shadow: var(--button-secondary-shadow);
327
+ }
328
+
329
+ .button--variant-secondary:hover {
330
+ background-color: var(--button-secondary-hover-background);
331
+ border-color: var(--button-secondary-hover-border);
332
+ box-shadow: var(--button-secondary-hover-shadow);
333
+ transform: var(--button-hover-transform);
334
+ }
335
+
336
+ .button--variant-secondary:focus {
337
+ outline: var(--button-focus-outline);
338
+ outline-offset: var(--button-focus-offset);
339
+ }
340
+
341
+ .button--variant-secondary:active {
342
+ transform: var(--button-active-transform);
343
+ box-shadow: var(--button-active-shadow);
344
+ }
345
+
346
+ .button--variant-outline {
347
+ background-color: var(--button-outline-background);
348
+ color: var(--button-outline-text);
349
+ border: var(--cs-border-width-normal) solid var(--button-outline-border);
350
+ box-shadow: var(--button-outline-shadow);
351
+ }
352
+
353
+ .button--variant-outline:hover {
354
+ background-color: var(--button-outline-hover-background);
355
+ border-color: var(--button-outline-hover-border);
356
+ box-shadow: var(--button-outline-hover-shadow);
357
+ transform: var(--button-hover-transform);
358
+ }
359
+
360
+ .button--variant-outline:focus {
361
+ outline: var(--button-focus-outline);
362
+ outline-offset: var(--button-focus-offset);
363
+ }
364
+
365
+ .button--variant-outline:active {
366
+ transform: var(--button-active-transform);
367
+ box-shadow: var(--button-active-shadow);
368
+ }
369
+
370
+ .button--variant-ghost {
371
+ background-color: var(--button-ghost-background);
372
+ color: var(--button-ghost-text);
373
+ border: var(--cs-border-width-normal) solid var(--button-ghost-border);
374
+ box-shadow: var(--button-ghost-shadow);
375
+ }
376
+
377
+ .button--variant-ghost:hover {
378
+ background-color: var(--button-ghost-hover-background);
379
+ color: var(--button-ghost-hover-text);
380
+ box-shadow: var(--button-ghost-hover-shadow);
381
+ transform: var(--button-hover-transform);
382
+ }
383
+
384
+ .button--variant-ghost:focus {
385
+ outline: var(--button-focus-outline);
386
+ outline-offset: var(--button-focus-offset);
387
+ }
388
+
389
+ .button--variant-ghost:active {
390
+ transform: var(--button-active-transform);
391
+ box-shadow: var(--button-active-shadow);
392
+ }
393
+
394
+ .button--variant-destructive {
395
+ background-color: var(--button-destructive-background);
396
+ color: var(--button-destructive-text);
397
+ border: var(--cs-border-width-normal) solid var(--button-destructive-border);
398
+ box-shadow: var(--button-destructive-shadow);
399
+ }
400
+
401
+ .button--variant-destructive:hover {
402
+ background-color: var(--button-destructive-hover-background);
403
+ border-color: var(--button-destructive-hover-border);
404
+ box-shadow: var(--button-destructive-hover-shadow);
405
+ transform: var(--button-hover-transform);
406
+ }
407
+
408
+ .button--variant-destructive:focus {
409
+ outline: var(--button-focus-outline);
410
+ outline-offset: var(--button-focus-offset);
411
+ }
412
+
413
+ .button--variant-destructive:active {
414
+ transform: var(--button-active-transform);
415
+ box-shadow: var(--button-active-shadow);
416
+ }
417
+
418
+ .button--variant-link {
419
+ background-color: var(--button-link-background);
420
+ color: var(--button-link-text);
421
+ text-decoration: underline;
422
+ text-underline-offset: var(--button-link-underline-offset);
423
+ border: var(--button-link-border);
424
+ box-shadow: var(--button-link-shadow);
425
+ padding: var(--button-link-padding-y) var(--button-link-padding-x);
426
+ }
427
+
428
+ .button--variant-link:hover {
429
+ color: var(--button-link-hover-text);
430
+ text-decoration-thickness: var(--button-link-hover-underline-thickness);
431
+ transform: var(--button-hover-transform);
432
+ }
433
+
434
+ .button--variant-link:focus {
435
+ outline: var(--button-focus-outline);
436
+ outline-offset: var(--button-focus-offset);
437
+ }
438
+
439
+ .button--variant-link:active {
440
+ transform: var(--button-active-transform);
441
+ }
442
+
443
+ /* Button States */
444
+ .button--state-loading {
445
+ position: relative;
446
+ color: var(--button-loading-color);
447
+ }
448
+
449
+ .button--state-loading .button__spinner {
450
+ position: absolute;
451
+ top: 50%;
452
+ left: 50%;
453
+ transform: translate(-50%, -50%);
454
+ color: currentColor;
455
+ }
456
+
457
+ .button--state-disabled {
458
+ background-color: var(--button-disabled-background);
459
+ color: var(--button-disabled-text);
460
+ border-color: var(--button-disabled-border);
461
+ cursor: var(--button-disabled-cursor);
462
+ opacity: var(--button-disabled-opacity);
463
+ box-shadow: none;
464
+ }
465
+
466
+ .button--state-disabled:hover {
467
+ background-color: var(--button-disabled-background);
468
+ border-color: var(--button-disabled-border);
469
+ box-shadow: none;
470
+ }
471
+
472
+ /* Focus Management */
473
+ .button:focus-visible {
474
+ outline: var(--button-focus-visible-outline);
475
+ outline-offset: var(--button-focus-visible-offset);
476
+ }
477
+
478
+ /* Touch Target Compliance */
479
+ @media (max-width: var(--button-touch-target-breakpoint)) {
480
+ .button {
481
+ min-height: var(--button-touch-target-min-height);
482
+ min-width: var(--button-touch-target-min-width);
483
+ }
484
+ }
485
+
486
+ /* High Contrast Mode Support */
487
+ @media (prefers-contrast: high) {
488
+ .button {
489
+ border-width: var(--button-high-contrast-border-width);
490
+ }
491
+
492
+ .button:focus {
493
+ outline-width: var(--button-high-contrast-focus-outline-width);
494
+ }
495
+ }
496
+
497
+ /* Reduced Motion Support */
498
+ @media (prefers-reduced-motion: reduce) {
499
+ .button {
500
+ transition: none;
501
+ }
502
+
503
+ .button__spinner {
504
+ animation: none;
505
+ }
506
+ }
507
+
508
+ /* Dark Mode Support */
509
+ .dark .button--variant-default,
510
+ .dark .button--variant-primary {
511
+ background-color: var(--cs-modes-dark-colors-primary-500);
512
+ border-color: var(--cs-modes-dark-colors-primary-500);
513
+ }
514
+
515
+ .dark .button--variant-default:hover,
516
+ .dark .button--variant-primary:hover {
517
+ background-color: var(--cs-modes-dark-colors-primary-hover);
518
+ border-color: var(--cs-modes-dark-colors-primary-hover);
519
+ }
520
+
521
+ .dark .button--variant-secondary {
522
+ background-color: var(--cs-modes-dark-colors-secondary-100);
523
+ border-color: var(--cs-modes-dark-colors-border);
524
+ }
525
+
526
+ .dark .button--variant-outline {
527
+ border-color: var(--cs-modes-dark-colors-border);
528
+ }
529
+
530
+ .dark .button--variant-ghost {
531
+ color: var(--cs-modes-dark-colors-text-secondary);
532
+ }
533
+
534
+ .dark .button--variant-ghost:hover {
535
+ background-color: var(--cs-modes-dark-colors-interactive-hover);
536
+ color: var(--cs-modes-dark-colors-text-primary);
537
+ }
538
+
539
+ .dark .button--variant-destructive {
540
+ background-color: var(--cs-modes-dark-colors-semantic-error);
541
+ border-color: var(--cs-modes-dark-colors-semantic-error);
542
+ }
543
+
544
+ .dark .button--variant-link {
545
+ color: var(--cs-modes-dark-colors-primary-500);
546
+ }
547
+
548
+ .dark .button--variant-link:hover {
549
+ color: var(--cs-modes-dark-colors-primary-hover);
550
+ }
551
+
552
+ /* Storybook Showcase Styles */
553
+ /* Button Showcase Layout */
554
+ .button-showcase {
555
+ display: flex;
556
+ flex-wrap: wrap;
557
+ gap: var(--button-showcase-gap);
558
+ align-items: center;
559
+ }
560
+
561
+ /* Button Variant Showcase */
562
+ .button-variant-showcase {
563
+ display: flex;
564
+ flex-direction: column;
565
+ gap: var(--button-variant-showcase-gap);
566
+ }
567
+
568
+ .button-variant-section {
569
+ display: flex;
570
+ flex-direction: column;
571
+ gap: var(--button-showcase-grid-gap);
572
+ }
573
+
574
+ .button-variant-title {
575
+ font-size: var(--button-showcase-title-size);
576
+ font-weight: var(--button-showcase-title-weight);
577
+ margin-bottom: var(--cs-spacing-scale-sm);
578
+ color: var(--cs-colors-text-primary);
579
+ }
580
+
581
+ .button-variant-grid {
582
+ display: flex;
583
+ flex-wrap: wrap;
584
+ gap: var(--button-showcase-grid-gap);
585
+ }
586
+
587
+ .button-variant-description {
588
+ font-size: var(--button-showcase-description-size);
589
+ color: var(--button-showcase-description-color);
590
+ }
591
+
592
+ /* Button Size Showcase */
593
+ .button-size-showcase {
594
+ display: flex;
595
+ flex-direction: column;
596
+ gap: var(--button-size-showcase-gap);
597
+ }
598
+
599
+ .button-size-section {
600
+ display: flex;
601
+ flex-direction: column;
602
+ gap: var(--button-showcase-grid-gap);
603
+ }
604
+
605
+ .button-size-title {
606
+ font-size: var(--button-showcase-title-size);
607
+ font-weight: var(--button-showcase-title-weight);
608
+ margin-bottom: var(--cs-spacing-scale-sm);
609
+ color: var(--cs-colors-text-primary);
610
+ }
611
+
612
+ .button-size-grid {
613
+ display: flex;
614
+ align-items: center;
615
+ gap: var(--button-showcase-grid-gap);
616
+ }
617
+
618
+ .button-size-description {
619
+ font-size: var(--button-showcase-description-size);
620
+ color: var(--button-showcase-description-color);
621
+ }
622
+
623
+ /* Button State Showcase */
624
+ .button-state-showcase {
625
+ display: flex;
626
+ flex-direction: column;
627
+ gap: var(--button-state-showcase-gap);
628
+ }
629
+
630
+ .button-state-section {
631
+ display: flex;
632
+ flex-direction: column;
633
+ gap: var(--button-showcase-grid-gap);
634
+ }
635
+
636
+ .button-state-title {
637
+ font-size: var(--button-showcase-title-size);
638
+ font-weight: var(--button-showcase-title-weight);
639
+ margin-bottom: var(--cs-spacing-scale-sm);
640
+ color: var(--cs-colors-text-primary);
641
+ }
642
+
643
+ .button-state-grid {
644
+ display: flex;
645
+ flex-wrap: wrap;
646
+ gap: var(--button-showcase-grid-gap);
647
+ }
648
+
649
+ .button-state-description {
650
+ font-size: var(--button-showcase-description-size);
651
+ color: var(--button-showcase-description-color);
652
+ }
653
+
654
+ /* Button Icon Showcase */
655
+ .button-icon-showcase {
656
+ display: flex;
657
+ flex-direction: column;
658
+ gap: var(--button-showcase-gap);
659
+ }
660
+
661
+ .button-icon-section {
662
+ display: flex;
663
+ flex-direction: column;
664
+ gap: var(--button-showcase-grid-gap);
665
+ }
666
+
667
+ .button-icon-title {
668
+ font-size: var(--button-showcase-title-size);
669
+ font-weight: var(--button-showcase-title-weight);
670
+ margin-bottom: var(--cs-spacing-scale-sm);
671
+ color: var(--cs-colors-text-primary);
672
+ }
673
+
674
+ .button-icon-grid {
675
+ display: flex;
676
+ flex-wrap: wrap;
677
+ gap: var(--button-showcase-grid-gap);
678
+ }
679
+
680
+ .button-icon-description {
681
+ font-size: var(--button-showcase-description-size);
682
+ color: var(--button-showcase-description-color);
683
+ }
684
+
685
+ /* Button Responsive Showcase */
686
+ .button-responsive-showcase {
687
+ display: flex;
688
+ flex-direction: column;
689
+ gap: var(--button-responsive-showcase-gap);
690
+ }
691
+
692
+ .button-responsive-description {
693
+ font-size: var(--button-showcase-description-size);
694
+ color: var(--button-showcase-description-color);
695
+ margin-bottom: var(--cs-spacing-scale-sm);
696
+ }
697
+
698
+ .button-responsive-grid {
699
+ display: grid;
700
+ grid-template-columns: 1fr;
701
+ gap: var(--button-responsive-grid-gap);
702
+ width: 100%;
703
+ max-width: var(--button-responsive-grid-max-width);
704
+ }
705
+
706
+ .button-responsive-column {
707
+ display: flex;
708
+ flex-direction: column;
709
+ gap: var(--cs-spacing-scale-sm);
710
+ }
711
+
712
+ .button-responsive-title {
713
+ font-size: var(--button-showcase-title-size);
714
+ font-weight: var(--button-showcase-title-weight);
715
+ margin-bottom: var(--cs-spacing-scale-sm);
716
+ color: var(--cs-colors-text-primary);
717
+ }
718
+
719
+ .button-responsive-buttons {
720
+ display: flex;
721
+ flex-wrap: wrap;
722
+ gap: var(--button-showcase-grid-gap);
723
+ width: 100%;
724
+ }
725
+
726
+ /* Full-width button utility for responsive design */
727
+ .button--full-width {
728
+ width: 100%;
729
+ }
730
+
731
+ /* Responsive Design for Showcase */
732
+ @media (min-width: var(--cs-breakpoints-tablet)) {
733
+ .button-responsive-grid {
734
+ grid-template-columns: 1fr 1fr !important;
735
+ }
736
+ }
737
+
738
+ /* Container Queries for Adaptive Layouts */
739
+ @container (min-width: var(--cs-breakpoints-tablet)) {
740
+ .button-showcase {
741
+ gap: var(--cs-spacing-scale-lg);
742
+ }
743
+
744
+ .button-variant-grid,
745
+ .button-size-grid,
746
+ .button-state-grid,
747
+ .button-icon-grid {
748
+ gap: var(--cs-spacing-scale-md);
749
+ }
750
+ }
751
+
752
+ /* High Contrast Mode Support for Showcase */
753
+ @media (prefers-contrast: high) {
754
+ .button-variant-title,
755
+ .button-size-title,
756
+ .button-state-title,
757
+ .button-icon-title,
758
+ .button-responsive-title {
759
+ border-bottom: var(--button-high-contrast-border-width) solid var(--cs-colors-text-primary);
760
+ padding-bottom: var(--cs-spacing-scale-xs);
761
+ }
762
+ }
763
+
764
+ /* Reduced Motion Support for Showcase */
765
+ @media (prefers-reduced-motion: reduce) {
766
+ .button-showcase,
767
+ .button-variant-showcase,
768
+ .button-size-showcase,
769
+ .button-state-showcase,
770
+ .button-icon-showcase,
771
+ .button-responsive-showcase {
772
+ transition: none;
773
+ }
774
+ }