@filipgutica/ui 0.2.2 → 1.0.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.
@@ -1,12 +1,73 @@
1
1
  @layer components {
2
+ /* Package-owned typography keeps controls consistent across consuming apps. */
3
+ .fg-button, .fg-input, .fg-select, .fg-checkbox, .fg-field,
4
+ .fg-radio-card, .fg-badge, .fg-alert, .fg-surface, .fg-card,
5
+ .fg-dialog__content, .fg-code-block {
6
+ font-family: var(--font-ui);
7
+ font-size: 0.875rem;
8
+ font-weight: 400;
9
+ line-height: 1.5;
10
+ }
11
+
12
+ .fg-code-block {
13
+ min-width: 0;
14
+ max-width: 100%;
15
+ overflow: hidden;
16
+ border: 1px solid color-mix(in srgb, var(--color-code-text) 22%, var(--color-code));
17
+ border-radius: var(--radius-control);
18
+ background: var(--color-code);
19
+ color: var(--color-code-text);
20
+ }
21
+ .fg-code-block__header {
22
+ display: flex;
23
+ align-items: center;
24
+ gap: 0.75rem;
25
+ min-height: 2.5rem;
26
+ padding: 0.35rem 0.75rem;
27
+ border-bottom: 1px solid color-mix(in srgb, var(--color-code-text) 16%, transparent);
28
+ background: color-mix(in srgb, var(--color-code-text) 5%, var(--color-code));
29
+ font-size: 0.75rem;
30
+ }
31
+ .fg-code-block__title { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-weight: 600; }
32
+ .fg-code-block__language { opacity: 0.7; }
33
+ .fg-code-block__actions { display: flex; align-items: center; gap: 0.5rem; margin-left: auto; flex-shrink: 0; }
34
+ .fg-code-block__copy {
35
+ display: inline-flex;
36
+ align-items: center;
37
+ gap: 0.4rem;
38
+ padding: 0.25rem 0.4rem;
39
+ border: 0;
40
+ border-radius: 0.25rem;
41
+ background: transparent;
42
+ color: inherit;
43
+ font: inherit;
44
+ cursor: pointer;
45
+ }
46
+ .fg-code-block__copy:hover { background: color-mix(in srgb, currentColor 12%, transparent); }
47
+ .fg-code-block__copy svg { width: 1rem; height: 1rem; }
48
+ .fg-code-block__copy:focus-visible, .fg-code-block__pre:focus-visible { outline: 2px solid var(--color-focus); outline-offset: -2px; }
49
+ .fg-code-block__pre { margin: 0; padding: 1rem; overflow: auto; max-height: 32rem; tab-size: 2; }
50
+ .fg-code-block__pre, .fg-code-block__pre code { font-family: var(--font-mono); font-size: 0.8125rem; line-height: 1.65; }
51
+ .fg-code-block__pre code { display: block; color: inherit; }
52
+ .fg-code-block__line { display: flex; min-height: 1.65em; }
53
+ .fg-code-block__text { white-space: pre; }
54
+ .fg-code-block__number { min-width: 2.5em; padding-right: 1em; flex-shrink: 0; text-align: right; opacity: 0.5; user-select: none; }
55
+ .fg-code-block[data-wrap="true"] .fg-code-block__text { min-width: 0; white-space: pre-wrap; overflow-wrap: anywhere; }
56
+ .fg-code-block__status:empty { display: none; }
57
+ .fg-code-block__status:not(:empty) { display: block; padding: 0.5rem 0.75rem; font-size: 0.75rem; }
2
58
  .fg-button,
3
59
  .fg-input,
4
60
  .fg-select,
5
61
  .fg-dialog__close {
6
- min-height: 2.5rem;
7
62
  border: 1px solid transparent;
8
63
  border-radius: var(--radius-control);
9
- font: inherit;
64
+ font-family: var(--font-ui);
65
+ transition:
66
+ background-color var(--duration-fast) ease,
67
+ border-color var(--duration-fast) ease,
68
+ color var(--duration-fast) ease,
69
+ box-shadow var(--duration-fast) ease,
70
+ transform var(--duration-fast) ease;
10
71
  }
11
72
 
12
73
  .fg-button {
@@ -14,10 +75,11 @@
14
75
  align-items: center;
15
76
  justify-content: center;
16
77
  gap: 0.5rem;
17
- padding: 0.55rem 0.85rem;
18
78
  color: var(--color-button-text);
19
79
  background: var(--color-button-bg);
20
- font-weight: 680;
80
+ box-shadow: none;
81
+ font-weight: 500;
82
+ letter-spacing: -0.01em;
21
83
  line-height: 1.25;
22
84
  cursor: pointer;
23
85
  }
@@ -26,6 +88,10 @@
26
88
  background: var(--color-button-hover);
27
89
  }
28
90
 
91
+ .fg-button:active:not(:disabled) {
92
+ box-shadow: none;
93
+ }
94
+
29
95
  .fg-button:disabled,
30
96
  .fg-input:disabled,
31
97
  .fg-select:disabled,
@@ -38,12 +104,62 @@
38
104
  cursor: wait;
39
105
  }
40
106
 
107
+ .fg-button[aria-busy="true"]::before {
108
+ width: 0.85rem;
109
+ height: 0.85rem;
110
+ flex: none;
111
+ border: 2px solid currentColor;
112
+ border-right-color: transparent;
113
+ border-radius: 50%;
114
+ content: "";
115
+ animation: fg-button-spin 700ms linear infinite;
116
+ }
117
+
118
+ .fg-button[data-size="sm"],
119
+ .fg-input[data-size="sm"],
120
+ .fg-select[data-size="sm"] {
121
+ font-size: 0.8125rem;
122
+ }
123
+
124
+ .fg-button[data-size="md"],
125
+ .fg-input[data-size="md"],
126
+ .fg-select[data-size="md"] {
127
+ font-size: 0.875rem;
128
+ }
129
+
130
+ .fg-button[data-size="lg"],
131
+ .fg-input[data-size="lg"],
132
+ .fg-select[data-size="lg"] {
133
+ font-size: 1rem;
134
+ }
135
+
136
+ .fg-button[data-size="sm"] { min-height: 2rem; }
137
+ .fg-button[data-size="md"] { min-height: 2.25rem; }
138
+ .fg-button[data-size="lg"] { min-height: 2.75rem; }
139
+ .fg-input[data-size="sm"],
140
+ .fg-select[data-size="sm"] { height: 2rem; }
141
+ .fg-input[data-size="md"],
142
+ .fg-select[data-size="md"] { height: 2.25rem; }
143
+ .fg-input[data-size="lg"],
144
+ .fg-select[data-size="lg"] { height: 2.75rem; }
145
+
146
+ .fg-button[data-size="sm"] { padding: 0 0.6rem; }
147
+ .fg-button[data-size="md"] { padding: 0 0.75rem; }
148
+ .fg-button[data-size="lg"] { padding: 0 1rem; }
149
+
150
+ /* Deprecated UiButton aliases retained for existing consumers. */
41
151
  .fg-button[data-size="compact"] {
42
- min-height: 2rem;
43
- padding: 0.35rem 0.6rem;
152
+ min-height: 2.25rem;
153
+ padding: 0 0.7rem;
44
154
  font-size: 0.8125rem;
45
155
  }
46
156
 
157
+ .fg-button[data-size="default"] {
158
+ min-height: 2.75rem;
159
+ padding: 0 1rem;
160
+ font-size: 1rem;
161
+ }
162
+
47
163
  .fg-button[data-variant="secondary"] {
48
164
  border-color: var(--color-border);
49
165
  color: var(--color-text);
@@ -59,20 +175,31 @@
59
175
  .fg-button[data-variant="ghost"] {
60
176
  color: var(--color-muted);
61
177
  background: transparent;
178
+ box-shadow: none;
62
179
  }
63
180
 
64
181
  .fg-button[data-variant="danger"] {
65
182
  color: var(--color-error);
66
183
  background: var(--color-error-surface);
184
+ box-shadow: none;
185
+ }
186
+
187
+ .fg-button[data-variant="danger"]:hover:not(:disabled) {
188
+ border-color: var(--color-error);
189
+ color: var(--color-error);
190
+ background: var(--color-error-surface);
191
+ box-shadow: inset 0 0 0 1px var(--color-error);
67
192
  }
68
193
 
69
194
  .fg-button[data-variant="text"] {
195
+ height: auto;
70
196
  min-height: auto;
71
- padding: 0;
197
+ padding: 0.25rem;
72
198
  color: var(--color-link);
73
199
  background: transparent;
74
200
  text-decoration: underline;
75
201
  text-underline-offset: 0.2em;
202
+ box-shadow: none;
76
203
  }
77
204
 
78
205
  .fg-button[data-variant="text"]:hover:not(:disabled) {
@@ -83,13 +210,33 @@
83
210
  .fg-input,
84
211
  .fg-select {
85
212
  width: 100%;
86
- padding: 0.5rem 0.7rem;
87
213
  border-color: var(--color-input-border);
88
214
  color: var(--color-input-text);
89
215
  background: var(--color-input-bg);
216
+ box-shadow: none;
90
217
  line-height: 1.35;
91
218
  }
92
219
 
220
+ .fg-select {
221
+ appearance: none;
222
+ background-image:
223
+ linear-gradient(45deg, transparent 50%, currentColor 50%),
224
+ linear-gradient(135deg, currentColor 50%, transparent 50%);
225
+ background-position:
226
+ calc(100% - 0.8rem) 52%,
227
+ calc(100% - 0.55rem) 52%;
228
+ background-repeat: no-repeat;
229
+ background-size: 0.3rem 0.3rem;
230
+ }
231
+
232
+ .fg-input[data-size="sm"] { padding: 0 0.55rem; }
233
+ .fg-input[data-size="md"] { padding: 0 0.65rem; }
234
+ .fg-input[data-size="lg"] { padding: 0 0.7rem; }
235
+
236
+ .fg-select[data-size="sm"] { padding: 0 1.6rem 0 0.5rem; }
237
+ .fg-select[data-size="md"] { padding: 0 1.7rem 0 0.6rem; }
238
+ .fg-select[data-size="lg"] { padding: 0 1.8rem 0 0.7rem; }
239
+
93
240
  .fg-input::placeholder {
94
241
  color: var(--color-input-placeholder);
95
242
  opacity: 1;
@@ -107,9 +254,9 @@
107
254
  }
108
255
 
109
256
  .fg-field__label {
110
- color: var(--color-muted);
257
+ color: var(--color-text);
111
258
  font-size: 0.8125rem;
112
- font-weight: 680;
259
+ font-weight: 600;
113
260
  }
114
261
 
115
262
  .fg-field__description,
@@ -132,14 +279,15 @@
132
279
  .fg-checkbox__control {
133
280
  display: inline-grid;
134
281
  flex: none;
135
- width: 1.15rem;
136
- height: 1.15rem;
282
+ width: 1.25rem;
283
+ height: 1.25rem;
137
284
  margin-top: 0.1rem;
138
285
  place-items: center;
139
286
  border: 1px solid var(--color-input-border);
140
287
  border-radius: 0.3rem;
141
288
  color: var(--color-button-text);
142
289
  background: var(--color-input-bg);
290
+ box-shadow: var(--shadow-control);
143
291
  }
144
292
 
145
293
  .fg-checkbox__control[data-state="checked"] {
@@ -155,6 +303,112 @@
155
303
 
156
304
  .fg-checkbox__label { line-height: 1.4; }
157
305
 
306
+ .fg-checkbox[data-size="sm"] {
307
+ min-height: 2rem;
308
+ align-items: center;
309
+ gap: 0.45rem;
310
+ font-size: 0.8125rem;
311
+ }
312
+
313
+ .fg-checkbox[data-size="md"] {
314
+ min-height: 2.25rem;
315
+ align-items: center;
316
+ gap: 0.55rem;
317
+ font-size: 0.875rem;
318
+ }
319
+
320
+ .fg-checkbox[data-size="lg"] {
321
+ min-height: 2.75rem;
322
+ align-items: center;
323
+ gap: 0.65rem;
324
+ font-size: 1rem;
325
+ }
326
+
327
+ .fg-checkbox[data-size] .fg-checkbox__control { margin-top: 0; }
328
+
329
+ .fg-checkbox[data-size="sm"] .fg-checkbox__control {
330
+ width: 1rem;
331
+ height: 1rem;
332
+ border-radius: 0.25rem;
333
+ }
334
+
335
+ .fg-checkbox[data-size="md"] .fg-checkbox__control {
336
+ width: 1.125rem;
337
+ height: 1.125rem;
338
+ }
339
+
340
+ .fg-checkbox[data-size="lg"] .fg-checkbox__control {
341
+ width: 1.25rem;
342
+ height: 1.25rem;
343
+ }
344
+
345
+ .fg-checkbox[data-size="sm"] .fg-checkbox__indicator { font-size: 0.68rem; }
346
+ .fg-checkbox[data-size="md"] .fg-checkbox__indicator { font-size: 0.74rem; }
347
+ .fg-checkbox[data-size="lg"] .fg-checkbox__indicator { font-size: 0.8rem; }
348
+
349
+ .fg-radio-card-group {
350
+ display: grid;
351
+ grid-template-columns: repeat(auto-fit, minmax(10rem, 1fr));
352
+ gap: 0.75rem;
353
+ }
354
+
355
+ .fg-radio-card {
356
+ position: relative;
357
+ display: block;
358
+ min-width: 0;
359
+ padding: 0.75rem;
360
+ overflow: hidden;
361
+ border: 1px solid var(--color-border-subtle);
362
+ border-radius: var(--radius-panel);
363
+ color: var(--color-text);
364
+ background: var(--color-surface-raised);
365
+ box-shadow: none;
366
+ text-align: left;
367
+ cursor: pointer;
368
+ transition:
369
+ border-color var(--duration-fast) ease,
370
+ box-shadow var(--duration-fast) ease,
371
+ transform var(--duration-fast) ease;
372
+ }
373
+
374
+ .fg-radio-card:hover:not([data-disabled]) {
375
+ border-color: var(--color-border);
376
+ }
377
+
378
+ .fg-radio-card[data-state="checked"] {
379
+ border-color: var(--color-link);
380
+ box-shadow: 0 0 0 1px var(--color-link);
381
+ }
382
+
383
+ .fg-radio-card[data-disabled] {
384
+ cursor: not-allowed;
385
+ opacity: 0.58;
386
+ }
387
+
388
+ .fg-radio-card__content {
389
+ display: grid;
390
+ min-width: 0;
391
+ gap: 0.25rem;
392
+ padding-right: 1.75rem;
393
+ }
394
+
395
+ .fg-radio-card__indicator {
396
+ position: absolute;
397
+ z-index: 1;
398
+ top: 0.75rem;
399
+ right: 0.75rem;
400
+ display: block;
401
+ width: 1rem;
402
+ height: 1rem;
403
+ border: 1px solid var(--color-input-border);
404
+ border-radius: 50%;
405
+ background: var(--color-input-bg);
406
+ }
407
+
408
+ .fg-radio-card[data-state="checked"] .fg-radio-card__indicator {
409
+ border: 0.3rem solid var(--color-link);
410
+ }
411
+
158
412
  .fg-badge {
159
413
  display: inline-flex;
160
414
  align-items: center;
@@ -165,29 +419,30 @@
165
419
  color: var(--color-muted);
166
420
  background: var(--color-surface-muted);
167
421
  font-size: 0.75rem;
168
- font-weight: 700;
422
+ font-weight: 500;
169
423
  line-height: 1.25;
170
424
  }
171
425
 
172
426
  .fg-badge[data-tone="info"] { color: var(--color-info); background: var(--color-info-surface); }
173
427
  .fg-badge[data-tone="success"] { color: var(--color-success); background: var(--color-success-surface); }
174
428
  .fg-badge[data-tone="warning"] { color: var(--color-warning); background: var(--color-warning-surface); }
175
- .fg-badge[data-tone="danger"] { color: var(--color-error); background: var(--color-error-surface); }
429
+ .fg-badge[data-tone="danger"],
430
+ .fg-badge[data-tone="error"] { color: var(--color-error); background: var(--color-error-surface); }
176
431
 
177
432
  .fg-alert {
178
433
  display: flex;
179
434
  align-items: flex-start;
180
435
  gap: 0.75rem;
181
- padding: 0.85rem 1rem;
436
+ padding: 0.75rem 1rem;
182
437
  border: 1px solid var(--color-border-subtle);
183
438
  border-radius: var(--radius-control);
184
439
  color: var(--color-text);
185
440
  background: var(--color-surface);
186
441
  }
187
442
 
188
- .fg-alert[data-tone="info"] { background: var(--color-info-surface); }
189
- .fg-alert[data-tone="success"] { background: var(--color-success-surface); }
190
- .fg-alert[data-tone="warning"] { background: var(--color-warning-surface); }
443
+ .fg-alert[data-tone="info"] { border-color: color-mix(in srgb, var(--color-info) 35%, var(--color-border-subtle)); background: var(--color-info-surface); }
444
+ .fg-alert[data-tone="success"] { border-color: color-mix(in srgb, var(--color-success) 35%, var(--color-border-subtle)); background: var(--color-success-surface); }
445
+ .fg-alert[data-tone="warning"] { border-color: color-mix(in srgb, var(--color-warning) 35%, var(--color-border-subtle)); background: var(--color-warning-surface); }
191
446
  .fg-alert[data-tone="danger"],
192
447
  .fg-alert[data-tone="error"] {
193
448
  border-color: var(--color-error);
@@ -199,15 +454,42 @@
199
454
  border: 1px solid var(--color-border-subtle);
200
455
  border-radius: var(--radius-panel);
201
456
  background: var(--color-surface-raised);
457
+ box-shadow: none;
458
+ }
459
+
460
+ .fg-surface[data-padding="compact"] { padding: 0.75rem; }
461
+ .fg-surface[data-padding="default"] { padding: 1rem; }
462
+
463
+ .fg-card {
464
+ overflow: hidden;
465
+ border: 1px solid var(--color-border-subtle);
466
+ border-radius: var(--radius-panel);
467
+ background: var(--color-surface-raised);
468
+ box-shadow: none;
469
+ }
470
+
471
+ .fg-card__header,
472
+ .fg-card__footer {
473
+ display: flex;
474
+ align-items: center;
475
+ justify-content: space-between;
476
+ gap: 0.75rem;
477
+ padding: 0.75rem 1rem;
478
+ }
479
+
480
+ .fg-card__footer {
481
+ background: var(--color-surface);
202
482
  }
203
483
 
204
- .fg-surface[data-padding="compact"] { padding: 0.85rem; }
205
- .fg-surface[data-padding="default"] { padding: 1.2rem; }
484
+ .fg-card__title { margin: 0; font-size: 0.875rem; font-weight: 600; line-height: 1.4; }
485
+ .fg-card__actions { display: flex; align-items: center; gap: 0.5rem; margin-left: auto; }
486
+ .fg-card__body { padding: 1rem; }
206
487
 
207
488
  .fg-progress {
208
489
  position: relative;
209
490
  height: 0.55rem;
210
491
  overflow: hidden;
492
+ border: 1px solid var(--color-border-subtle);
211
493
  border-radius: var(--radius-pill);
212
494
  background: var(--color-surface-muted);
213
495
  }
@@ -220,11 +502,56 @@
220
502
  transition: transform var(--duration-fast) ease-out;
221
503
  }
222
504
 
505
+ .fg-slider {
506
+ position: relative;
507
+ display: flex;
508
+ width: 100%;
509
+ align-items: center;
510
+ touch-action: none;
511
+ user-select: none;
512
+ }
513
+
514
+ .fg-slider[data-size="sm"] { min-height: 2rem; }
515
+ .fg-slider[data-size="md"] { min-height: 2.25rem; }
516
+ .fg-slider[data-size="lg"] { min-height: 2.75rem; }
517
+
518
+ .fg-slider__track {
519
+ position: relative;
520
+ height: 0.375rem;
521
+ flex: 1;
522
+ overflow: hidden;
523
+ border-radius: var(--radius-pill);
524
+ background: var(--color-surface-muted);
525
+ }
526
+
527
+ .fg-slider__range {
528
+ position: absolute;
529
+ height: 100%;
530
+ border-radius: inherit;
531
+ background: var(--color-progress);
532
+ }
533
+
534
+ .fg-slider__thumb {
535
+ display: block;
536
+ border: 2px solid var(--color-progress);
537
+ border-radius: 50%;
538
+ background: var(--color-input-bg);
539
+ box-shadow: var(--shadow-control);
540
+ cursor: grab;
541
+ }
542
+
543
+ .fg-slider__thumb:active { cursor: grabbing; }
544
+ .fg-slider[data-size="sm"] .fg-slider__thumb { width: 1rem; height: 1rem; }
545
+ .fg-slider[data-size="md"] .fg-slider__thumb { width: 1.125rem; height: 1.125rem; }
546
+ .fg-slider[data-size="lg"] .fg-slider__thumb { width: 1.25rem; height: 1.25rem; }
547
+ .fg-slider[data-disabled] { cursor: not-allowed; opacity: 0.58; }
548
+
223
549
  .fg-dialog__overlay {
224
550
  position: fixed;
225
551
  inset: 0;
226
552
  z-index: 50;
227
553
  background: var(--color-overlay);
554
+ backdrop-filter: blur(2px);
228
555
  }
229
556
 
230
557
  .fg-dialog__content {
@@ -233,11 +560,11 @@
233
560
  top: 50%;
234
561
  left: 50%;
235
562
  display: grid;
236
- width: min(42rem, calc(100vw - 2rem));
563
+ width: min(32rem, calc(100vw - 2rem));
237
564
  max-height: min(42rem, calc(100vh - 2rem));
238
565
  overflow: hidden;
239
566
  transform: translate(-50%, -50%);
240
- border: 1px solid var(--color-border);
567
+ border: 1px solid var(--color-border-subtle);
241
568
  border-radius: var(--radius-panel);
242
569
  color: var(--color-text);
243
570
  background: var(--color-surface-raised);
@@ -250,16 +577,17 @@
250
577
  align-items: flex-start;
251
578
  justify-content: space-between;
252
579
  gap: 1rem;
253
- padding: 1rem 1.2rem;
580
+ padding: 1rem;
254
581
  }
255
582
 
256
583
  .fg-dialog__header { border-bottom: 1px solid var(--color-border-subtle); }
257
- .fg-dialog__footer { justify-content: flex-end; border-top: 1px solid var(--color-border-subtle); }
584
+ .fg-dialog__footer { justify-content: flex-end; border-top: 1px solid var(--color-border-subtle); background: var(--color-surface); }
258
585
 
259
586
  .fg-dialog__title {
260
587
  margin: 0;
261
- font-size: 1.1rem;
262
- font-weight: 750;
588
+ font-size: 1.125rem;
589
+ font-weight: 600;
590
+ letter-spacing: -0.02em;
263
591
  }
264
592
 
265
593
  .fg-dialog__description {
@@ -271,13 +599,14 @@
271
599
  .fg-dialog__body {
272
600
  min-height: 0;
273
601
  overflow: auto;
274
- padding: 1.2rem;
602
+ padding: 1rem;
275
603
  }
276
604
 
277
605
  .fg-dialog__close {
278
606
  display: inline-grid;
279
607
  flex: none;
280
- width: 2.5rem;
608
+ width: 2.75rem;
609
+ min-height: 2.75rem;
281
610
  padding: 0;
282
611
  place-items: center;
283
612
  color: var(--color-muted);
@@ -288,13 +617,19 @@
288
617
 
289
618
  .fg-dialog__close:hover { color: var(--color-text); background: var(--color-row-hover); }
290
619
 
620
+ @keyframes fg-button-spin {
621
+ to { transform: rotate(360deg); }
622
+ }
623
+
291
624
  .fg-button:focus-visible,
292
625
  .fg-input:focus-visible,
293
626
  .fg-select:focus-visible,
294
627
  .fg-checkbox__control:focus-visible,
628
+ .fg-radio-card:focus-visible,
629
+ .fg-slider__thumb:focus-visible,
295
630
  .fg-dialog__close:focus-visible,
296
631
  .fg-dialog__content:focus-visible {
297
- outline: 3px solid var(--color-focus);
632
+ outline: 2px solid var(--color-focus);
298
633
  outline-offset: 2px;
299
634
  }
300
635
 
@@ -302,8 +637,11 @@
302
637
  :root.high-contrast .fg-input,
303
638
  :root.high-contrast .fg-select,
304
639
  :root.high-contrast .fg-checkbox__control,
640
+ :root.high-contrast .fg-radio-card,
305
641
  :root.high-contrast .fg-alert,
306
642
  :root.high-contrast .fg-surface,
643
+ :root.high-contrast .fg-card,
644
+ :root.high-contrast .fg-code-block,
307
645
  :root.high-contrast .fg-dialog__content {
308
646
  border-width: 2px;
309
647
  border-color: var(--color-border);
@@ -322,6 +660,14 @@
322
660
  }
323
661
 
324
662
  @media (prefers-reduced-motion: reduce) {
663
+ .fg-button,
664
+ .fg-input,
665
+ .fg-select,
666
+ .fg-radio-card,
667
+ .fg-slider__range,
668
+ .fg-dialog__close,
325
669
  .fg-progress__indicator { transition: none; }
670
+
671
+ .fg-button[aria-busy="true"]::before { animation-duration: 1.4s; }
326
672
  }
327
673
  }