@scattered-light/base-ui-theme 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.
Files changed (105) hide show
  1. package/README.md +19 -0
  2. package/dist/index.d.ts +103 -0
  3. package/dist/index.js +313 -0
  4. package/dist/index.js.map +1 -0
  5. package/dist/styles/base/borders.css +26 -0
  6. package/dist/styles/base/breakpoints.css +26 -0
  7. package/dist/styles/base/colors.css +150 -0
  8. package/dist/styles/base/global.css +108 -0
  9. package/dist/styles/base/reset-accessibility.css +119 -0
  10. package/dist/styles/base/reset.css +451 -0
  11. package/dist/styles/base/shadows.css +42 -0
  12. package/dist/styles/base/spacing.css +62 -0
  13. package/dist/styles/base/transitions.css +29 -0
  14. package/dist/styles/base/typography.css +63 -0
  15. package/dist/styles/base/z-index.css +22 -0
  16. package/dist/styles/components/AGGrid.css +6 -0
  17. package/dist/styles/components/Accordion.css +184 -0
  18. package/dist/styles/components/AlertDialog.css +172 -0
  19. package/dist/styles/components/Autocomplete.css +261 -0
  20. package/dist/styles/components/Avatar.css +154 -0
  21. package/dist/styles/components/Button.css +164 -0
  22. package/dist/styles/components/Checkbox.css +199 -0
  23. package/dist/styles/components/CheckboxGroup.css +21 -0
  24. package/dist/styles/components/Collapsible.css +115 -0
  25. package/dist/styles/components/Combobox.css +514 -0
  26. package/dist/styles/components/ContextMenu.css +209 -0
  27. package/dist/styles/components/Dialog.css +159 -0
  28. package/dist/styles/components/Field.css +138 -0
  29. package/dist/styles/components/Fieldset.css +48 -0
  30. package/dist/styles/components/Form.css +22 -0
  31. package/dist/styles/components/Input.css +106 -0
  32. package/dist/styles/components/Menu.css +158 -0
  33. package/dist/styles/components/Menubar.css +201 -0
  34. package/dist/styles/components/Meter.css +104 -0
  35. package/dist/styles/components/NavigationMenu.css +469 -0
  36. package/dist/styles/components/NumberField.css +182 -0
  37. package/dist/styles/components/Popover.css +167 -0
  38. package/dist/styles/components/PreviewCard.css +148 -0
  39. package/dist/styles/components/Progress.css +130 -0
  40. package/dist/styles/components/Radio.css +178 -0
  41. package/dist/styles/components/ScrollArea.css +103 -0
  42. package/dist/styles/components/Select.css +297 -0
  43. package/dist/styles/components/Separator.css +34 -0
  44. package/dist/styles/components/Slider.css +163 -0
  45. package/dist/styles/components/Switch.css +197 -0
  46. package/dist/styles/components/Tabs.css +163 -0
  47. package/dist/styles/components/Toast.css +261 -0
  48. package/dist/styles/components/Toggle.css +103 -0
  49. package/dist/styles/components/ToggleGroup.css +19 -0
  50. package/dist/styles/components/Toolbar.css +78 -0
  51. package/dist/styles/components/Tooltip.css +87 -0
  52. package/dist/styles/index.css +103 -0
  53. package/dist/styles/semantic/accessibility.css +77 -0
  54. package/dist/styles/semantic/accordion.css +102 -0
  55. package/dist/styles/semantic/ag-grid.css +114 -0
  56. package/dist/styles/semantic/alert-dialog.css +78 -0
  57. package/dist/styles/semantic/autocomplete.css +162 -0
  58. package/dist/styles/semantic/avatar.css +96 -0
  59. package/dist/styles/semantic/badge.css +16 -0
  60. package/dist/styles/semantic/button.css +145 -0
  61. package/dist/styles/semantic/card.css +14 -0
  62. package/dist/styles/semantic/checkbox-group.css +18 -0
  63. package/dist/styles/semantic/checkbox.css +117 -0
  64. package/dist/styles/semantic/collapsible.css +123 -0
  65. package/dist/styles/semantic/combobox.css +325 -0
  66. package/dist/styles/semantic/context-menu.css +131 -0
  67. package/dist/styles/semantic/dialog.css +91 -0
  68. package/dist/styles/semantic/dropdown.css +16 -0
  69. package/dist/styles/semantic/field.css +73 -0
  70. package/dist/styles/semantic/fieldset.css +45 -0
  71. package/dist/styles/semantic/form.css +20 -0
  72. package/dist/styles/semantic/input.css +83 -0
  73. package/dist/styles/semantic/menu.css +104 -0
  74. package/dist/styles/semantic/menubar.css +70 -0
  75. package/dist/styles/semantic/meter.css +88 -0
  76. package/dist/styles/semantic/modal.css +14 -0
  77. package/dist/styles/semantic/navigation-menu.css +171 -0
  78. package/dist/styles/semantic/number-field.css +142 -0
  79. package/dist/styles/semantic/popover.css +113 -0
  80. package/dist/styles/semantic/preview-card.css +108 -0
  81. package/dist/styles/semantic/progress.css +85 -0
  82. package/dist/styles/semantic/radio.css +103 -0
  83. package/dist/styles/semantic/scroll-area.css +64 -0
  84. package/dist/styles/semantic/select.css +197 -0
  85. package/dist/styles/semantic/separator.css +37 -0
  86. package/dist/styles/semantic/slider.css +120 -0
  87. package/dist/styles/semantic/switch.css +158 -0
  88. package/dist/styles/semantic/tabs.css +150 -0
  89. package/dist/styles/semantic/toast.css +171 -0
  90. package/dist/styles/semantic/toggle-group.css +29 -0
  91. package/dist/styles/semantic/toggle.css +94 -0
  92. package/dist/styles/semantic/toolbar.css +47 -0
  93. package/dist/styles/semantic/tooltip.css +56 -0
  94. package/dist/styles/theme/README.md +179 -0
  95. package/dist/styles/theme/theme-accessibility.css +13 -0
  96. package/dist/styles/theme/theme-primitives.css +7 -0
  97. package/dist/styles/theme/theme-radius.css +12 -0
  98. package/dist/styles/theme/theme-roles.css +66 -0
  99. package/dist/styles/theme/theme-spacing.css +28 -0
  100. package/dist/styles/theme/theme-stroke.css +7 -0
  101. package/dist/styles/theme/theme-typography.css +218 -0
  102. package/dist/styles/utilities/color-styles.css +34 -0
  103. package/dist/styles/utilities/layout-styles.css +19 -0
  104. package/dist/styles/utilities/text-styles.css +102 -0
  105. package/package.json +75 -0
@@ -0,0 +1,469 @@
1
+ /* Navigation Menu - Mojave Theme */
2
+
3
+ /* ============================================
4
+ ROOT CONTAINER
5
+ ============================================ */
6
+
7
+ .NavigationMenuRoot {
8
+ display: var(--navigation-menu-root-display);
9
+ align-items: var(--navigation-menu-root-align-items);
10
+ gap: var(--navigation-menu-root-gap);
11
+ background-color: var(--navigation-menu-root-background);
12
+ border-radius: var(--navigation-menu-root-border-radius);
13
+ padding: var(--navigation-menu-root-padding);
14
+ min-width: max-content;
15
+ }
16
+
17
+ /* ============================================
18
+ LIST
19
+ ============================================ */
20
+
21
+ .NavigationMenuList {
22
+ display: flex;
23
+ position: relative;
24
+ align-items: center;
25
+ gap: var(--navigation-menu-root-gap);
26
+ list-style: none;
27
+ margin: 0;
28
+ padding: 0;
29
+ }
30
+
31
+ /* Reset ALL list items in the main navigation list */
32
+ .NavigationMenuList > li {
33
+ margin: 0;
34
+ padding: 0;
35
+ list-style: none;
36
+ }
37
+
38
+ /* ============================================
39
+ TRIGGER
40
+ ============================================ */
41
+
42
+ .NavigationMenuTrigger {
43
+ box-sizing: border-box;
44
+ display: var(--navigation-menu-trigger-display);
45
+ align-items: var(--navigation-menu-trigger-align-items);
46
+ justify-content: var(--navigation-menu-trigger-justify-content);
47
+ gap: var(--navigation-menu-trigger-gap);
48
+ height: var(--navigation-menu-trigger-height);
49
+ padding-block: var(--navigation-menu-trigger-padding-block);
50
+ padding-inline: var(--navigation-menu-trigger-padding-inline);
51
+ margin: 0;
52
+ outline: 0;
53
+ border: var(--navigation-menu-trigger-border);
54
+ border-radius: var(--navigation-menu-trigger-border-radius);
55
+ font-family: var(--navigation-menu-trigger-font-family);
56
+ font-size: var(--navigation-menu-trigger-font-size);
57
+ font-weight: var(--navigation-menu-trigger-font-weight);
58
+ line-height: var(--navigation-menu-trigger-line-height);
59
+ letter-spacing: var(--navigation-menu-trigger-letter-spacing);
60
+ color: var(--navigation-menu-trigger-color);
61
+ background: var(--navigation-menu-trigger-background);
62
+ cursor: var(--navigation-menu-trigger-cursor);
63
+ user-select: none;
64
+ text-decoration: none;
65
+ }
66
+
67
+ @media (hover: hover) {
68
+ .NavigationMenuTrigger:hover {
69
+ background: var(--navigation-menu-trigger-background-hover);
70
+ }
71
+ }
72
+
73
+ .NavigationMenuTrigger[data-popup-open] {
74
+ background: var(--navigation-menu-trigger-background-active);
75
+ }
76
+
77
+ .NavigationMenuTrigger:focus-visible {
78
+ position: relative;
79
+ outline: 2px solid var(--focus-ring);
80
+ outline-offset: -1px;
81
+ }
82
+
83
+ /* ============================================
84
+ ICON (chevron)
85
+ ============================================ */
86
+
87
+ .NavigationMenuIcon {
88
+ width: var(--navigation-menu-indicator-size);
89
+ height: var(--navigation-menu-indicator-size);
90
+ color: var(--navigation-menu-indicator-color);
91
+ transition: var(--navigation-menu-indicator-transition);
92
+ display: flex;
93
+ align-items: center;
94
+ justify-content: center;
95
+ }
96
+
97
+ .NavigationMenuIcon[data-popup-open] {
98
+ transform: rotate(180deg);
99
+ }
100
+
101
+ /* ============================================
102
+ POSITIONER
103
+ ============================================ */
104
+
105
+ .NavigationMenuPositioner {
106
+ --easing: cubic-bezier(0.22, 1, 0.36, 1);
107
+ --duration: 0.35s;
108
+
109
+ box-sizing: border-box;
110
+ z-index: var(--navigation-menu-positioner-z-index);
111
+ transition-property: top, left, right, bottom;
112
+ transition-duration: var(--duration);
113
+ transition-timing-function: var(--easing);
114
+ width: var(--positioner-width);
115
+ height: var(--positioner-height);
116
+ max-width: var(--available-width);
117
+ }
118
+
119
+ /* Add safe zone around positioner to prevent flickering */
120
+ .NavigationMenuPositioner::before {
121
+ content: '';
122
+ position: absolute;
123
+ }
124
+
125
+ .NavigationMenuPositioner[data-side='top']::before {
126
+ left: 0;
127
+ right: 0;
128
+ bottom: -10px;
129
+ height: 10px;
130
+ }
131
+
132
+ .NavigationMenuPositioner[data-side='bottom']::before {
133
+ left: 0;
134
+ right: 0;
135
+ top: -10px;
136
+ height: 10px;
137
+ }
138
+
139
+ .NavigationMenuPositioner[data-side='left']::before {
140
+ top: 0;
141
+ bottom: 0;
142
+ right: -10px;
143
+ width: 10px;
144
+ }
145
+
146
+ .NavigationMenuPositioner[data-side='right']::before {
147
+ top: 0;
148
+ bottom: 0;
149
+ left: -10px;
150
+ width: 10px;
151
+ }
152
+
153
+ .NavigationMenuPositioner[data-instant] {
154
+ transition: none;
155
+ }
156
+
157
+ /* ============================================
158
+ POPUP
159
+ ============================================ */
160
+
161
+ .NavigationMenuPopup {
162
+ position: relative;
163
+ box-sizing: border-box;
164
+ background: var(--navigation-menu-popup-background);
165
+ border-radius: var(--navigation-menu-popup-border-radius);
166
+ color: var(--navigation-menu-popup-color);
167
+ transform-origin: var(--transform-origin);
168
+ transition-property: opacity, transform, width, height;
169
+ transition-duration: var(--duration);
170
+ transition-timing-function: var(--easing);
171
+ width: var(--popup-width);
172
+ height: var(--popup-height);
173
+ outline: var(--navigation-menu-popup-border-width) solid var(--navigation-menu-popup-border-color);
174
+ box-shadow: var(--navigation-menu-popup-shadow);
175
+ }
176
+
177
+ .NavigationMenuPopup[data-starting-style],
178
+ .NavigationMenuPopup[data-ending-style] {
179
+ opacity: 0;
180
+ transform: scale(0.9);
181
+ }
182
+
183
+ .NavigationMenuPopup[data-ending-style] {
184
+ transition-timing-function: ease;
185
+ transition-duration: 0.15s;
186
+ }
187
+
188
+ @media (prefers-color-scheme: dark) {
189
+ .NavigationMenuPopup {
190
+ outline-color: var(--navigation-menu-popup-border-color-dark);
191
+ outline-offset: -1px;
192
+ }
193
+ }
194
+
195
+ /* ============================================
196
+ VIEWPORT (content container)
197
+ ============================================ */
198
+
199
+ .NavigationMenuViewport {
200
+ position: relative;
201
+ overflow: hidden;
202
+ width: 100%;
203
+ height: 100%;
204
+ }
205
+
206
+ /* ============================================
207
+ CONTENT
208
+ ============================================ */
209
+
210
+ .NavigationMenuContent {
211
+ box-sizing: border-box;
212
+ transition:
213
+ opacity calc(var(--duration) * 0.5) ease,
214
+ transform var(--duration) var(--easing);
215
+ padding: var(--navigation-menu-popup-padding);
216
+ width: calc(100vw - 40px);
217
+ height: 100%;
218
+ }
219
+
220
+ @media (min-width: 500px) {
221
+ .NavigationMenuContent {
222
+ width: max-content;
223
+ min-width: var(--navigation-menu-popup-min-width);
224
+ }
225
+ }
226
+
227
+ .NavigationMenuContent[data-starting-style],
228
+ .NavigationMenuContent[data-ending-style] {
229
+ opacity: 0;
230
+ }
231
+
232
+ .NavigationMenuContent[data-starting-style][data-activation-direction='left'] {
233
+ transform: translateX(-50%);
234
+ }
235
+
236
+ .NavigationMenuContent[data-starting-style][data-activation-direction='right'] {
237
+ transform: translateX(50%);
238
+ }
239
+
240
+ .NavigationMenuContent[data-ending-style][data-activation-direction='left'] {
241
+ transform: translateX(50%);
242
+ }
243
+
244
+ .NavigationMenuContent[data-ending-style][data-activation-direction='right'] {
245
+ transform: translateX(-50%);
246
+ }
247
+
248
+ /* ============================================
249
+ LINK LIST
250
+ ============================================ */
251
+
252
+ .NavigationMenuLinkList {
253
+ display: var(--navigation-menu-content-display);
254
+ gap: var(--navigation-menu-content-gap);
255
+ list-style: none;
256
+ margin: 0;
257
+ padding: 0;
258
+ }
259
+
260
+ .NavigationMenuLinkList > li {
261
+ margin: 0;
262
+ padding: 0;
263
+ }
264
+
265
+ .NavigationMenuLinkList[data-columns='1'] {
266
+ grid-template-columns: 1fr;
267
+ max-width: 400px;
268
+ }
269
+
270
+ .NavigationMenuLinkList[data-columns='2'] {
271
+ grid-template-columns: var(--navigation-menu-content-grid-columns);
272
+ }
273
+
274
+ @media (max-width: 500px) {
275
+ .NavigationMenuLinkList[data-columns='2'] {
276
+ grid-template-columns: 1fr;
277
+ }
278
+ }
279
+
280
+ .NavigationMenuLinkList[data-columns='3'] {
281
+ grid-template-columns: repeat(3, 1fr);
282
+ }
283
+
284
+ /* ============================================
285
+ SECTIONS CONTAINER
286
+ ============================================ */
287
+
288
+ .NavigationMenuSections {
289
+ display: grid;
290
+ gap: var(--navigation-menu-content-gap);
291
+ }
292
+
293
+ .NavigationMenuSections[data-columns='2'] {
294
+ grid-template-columns: repeat(2, 1fr);
295
+ }
296
+
297
+ .NavigationMenuSections[data-columns='3'] {
298
+ grid-template-columns: repeat(3, 1fr);
299
+ }
300
+
301
+ /* ============================================
302
+ LINK ITEM
303
+ ============================================ */
304
+
305
+ .NavigationMenuLink {
306
+ box-sizing: border-box;
307
+ display: var(--navigation-menu-link-display);
308
+ flex-direction: var(--navigation-menu-link-flex-direction);
309
+ gap: var(--navigation-menu-link-gap);
310
+ padding: var(--navigation-menu-link-padding);
311
+ border-radius: var(--navigation-menu-link-border-radius);
312
+ border: none;
313
+ background-color: transparent;
314
+ color: inherit;
315
+ text-decoration: var(--navigation-menu-link-text-decoration);
316
+ transition: var(--navigation-menu-link-transition);
317
+ outline: none;
318
+ }
319
+
320
+ @media (hover: hover) {
321
+ .NavigationMenuLink:hover {
322
+ background: var(--navigation-menu-link-background-hover);
323
+ }
324
+ }
325
+
326
+ .NavigationMenuLink:focus-visible {
327
+ position: relative;
328
+ outline: 2px solid var(--focus-ring);
329
+ outline-offset: -1px;
330
+ }
331
+
332
+ /* ============================================
333
+ LINK TITLE
334
+ ============================================ */
335
+
336
+ .NavigationMenuLinkTitle {
337
+ font-family: var(--navigation-menu-link-title-font-family);
338
+ font-size: var(--navigation-menu-link-title-font-size);
339
+ font-weight: var(--navigation-menu-link-title-font-weight);
340
+ line-height: var(--navigation-menu-link-title-line-height);
341
+ letter-spacing: var(--navigation-menu-link-title-letter-spacing);
342
+ color: var(--navigation-menu-link-title-color);
343
+ margin: 0 0 4px 0;
344
+ }
345
+
346
+ /* ============================================
347
+ LINK DESCRIPTION
348
+ ============================================ */
349
+
350
+ .NavigationMenuLinkDescription {
351
+ font-family: var(--navigation-menu-link-description-font-family);
352
+ font-size: var(--navigation-menu-link-description-font-size);
353
+ font-weight: var(--navigation-menu-link-description-font-weight);
354
+ letter-spacing: var(--navigation-menu-link-description-letter-spacing);
355
+ color: var(--navigation-menu-link-description-color);
356
+ line-height: var(--navigation-menu-link-description-line-height);
357
+ margin: 0;
358
+ }
359
+
360
+ /* ============================================
361
+ SECTION
362
+ ============================================ */
363
+
364
+ .NavigationMenuSection {
365
+ display: var(--navigation-menu-section-display);
366
+ flex-direction: var(--navigation-menu-section-flex-direction);
367
+ gap: var(--navigation-menu-section-gap);
368
+ }
369
+
370
+ /* ============================================
371
+ SECTION HEADING
372
+ ============================================ */
373
+
374
+ .NavigationMenuSectionHeading {
375
+ font-family: var(--navigation-menu-section-heading-font-family);
376
+ font-size: var(--navigation-menu-section-heading-font-size);
377
+ font-weight: var(--navigation-menu-section-heading-font-weight);
378
+ line-height: var(--navigation-menu-section-heading-line-height);
379
+ color: var(--navigation-menu-section-heading-color);
380
+ text-transform: var(--navigation-menu-section-heading-text-transform);
381
+ letter-spacing: var(--navigation-menu-section-heading-letter-spacing);
382
+ margin: 0 0 var(--navigation-menu-section-heading-margin-bottom) 0;
383
+ }
384
+
385
+ /* ============================================
386
+ ARROW (styled to match popup with border)
387
+ ============================================ */
388
+
389
+ .NavigationMenuArrow {
390
+ display: flex;
391
+ transition: left calc(var(--duration)) var(--easing);
392
+ }
393
+
394
+ .NavigationMenuArrow[data-side='top'] {
395
+ bottom: -8px;
396
+ rotate: 180deg;
397
+ }
398
+
399
+ .NavigationMenuArrow[data-side='bottom'] {
400
+ top: -8px;
401
+ rotate: 0deg;
402
+ }
403
+
404
+ .NavigationMenuArrow[data-side='left'] {
405
+ right: -13px;
406
+ rotate: 90deg;
407
+ }
408
+
409
+ .NavigationMenuArrow[data-side='right'] {
410
+ left: -13px;
411
+ rotate: -90deg;
412
+ }
413
+
414
+ /* Arrow fill - matches popup background */
415
+ .NavigationMenuArrowFill {
416
+ fill: var(--navigation-menu-popup-background);
417
+ }
418
+
419
+ /* Arrow outer stroke - creates the border effect */
420
+ .NavigationMenuArrowOuterStroke {
421
+ fill: var(--navigation-menu-popup-border-color);
422
+ }
423
+
424
+ @media (prefers-color-scheme: dark) {
425
+ .NavigationMenuArrowOuterStroke {
426
+ fill: var(--navigation-menu-popup-border-color-dark);
427
+ }
428
+ }
429
+
430
+ /* Arrow inner stroke - creates the inner border line */
431
+ .NavigationMenuArrowInnerStroke {
432
+ fill: var(--navigation-menu-popup-border-color);
433
+ }
434
+
435
+ @media (prefers-color-scheme: dark) {
436
+ .NavigationMenuArrowInnerStroke {
437
+ fill: var(--navigation-menu-popup-border-color-dark);
438
+ }
439
+ }
440
+
441
+ /* ============================================
442
+ SEPARATOR
443
+ ============================================ */
444
+
445
+ .NavigationMenuSeparator {
446
+ height: var(--navigation-menu-separator-height);
447
+ background: var(--navigation-menu-separator-background);
448
+ margin-block: var(--navigation-menu-separator-margin-block);
449
+ border: none;
450
+ width: 100%;
451
+ }
452
+
453
+ /* ============================================
454
+ REDUCED MOTION
455
+ ============================================ */
456
+
457
+ @media (prefers-reduced-motion: reduce) {
458
+ .NavigationMenuPopup,
459
+ .NavigationMenuContent {
460
+ animation: none;
461
+ }
462
+
463
+ .NavigationMenuTrigger,
464
+ .NavigationMenuLink,
465
+ .NavigationMenuIcon,
466
+ .NavigationMenuArrow {
467
+ transition: none;
468
+ }
469
+ }
@@ -0,0 +1,182 @@
1
+ /* Number Field - Mojave Theme */
2
+
3
+ /* ============================================
4
+ ROOT CONTAINER
5
+ ============================================ */
6
+
7
+ .NumberFieldRoot {
8
+ display: var(--number-field-root-display);
9
+ flex-direction: var(--number-field-root-flex-direction);
10
+ gap: var(--number-field-root-gap);
11
+ }
12
+
13
+ /* ============================================
14
+ GROUP (input + buttons container)
15
+ ============================================ */
16
+
17
+ .NumberFieldGroup {
18
+ display: var(--number-field-group-display);
19
+ position: var(--number-field-group-position);
20
+ width: var(--number-field-group-width);
21
+ }
22
+
23
+ /* ============================================
24
+ INPUT
25
+ ============================================ */
26
+
27
+ .NumberFieldInput {
28
+ box-sizing: border-box;
29
+ width: var(--number-field-input-width);
30
+ height: var(--number-field-input-height);
31
+ padding-block: var(--number-field-input-padding-block);
32
+ padding-inline-start: var(--number-field-input-padding-inline-start);
33
+ padding-inline-end: var(--number-field-input-padding-inline-end);
34
+ font-family: inherit;
35
+ font-size: var(--number-field-input-font-size);
36
+ font-weight: var(--number-field-input-font-weight);
37
+ line-height: var(--number-field-input-line-height);
38
+ color: var(--number-field-input-color);
39
+ background: var(--number-field-input-background);
40
+ border: var(--number-field-input-border-width) solid var(--number-field-input-border-color);
41
+ border-radius: var(--number-field-input-border-radius);
42
+ transition: var(--number-field-input-transition);
43
+ outline: none;
44
+ }
45
+
46
+ .NumberFieldInput:hover:not(:disabled):not(:focus) {
47
+ border-color: var(--number-field-input-border-color-hover);
48
+ }
49
+
50
+ .NumberFieldInput:focus {
51
+ outline: none;
52
+ border-color: var(--number-field-input-border-color-focus);
53
+ box-shadow: var(--number-field-input-shadow-focus);
54
+ }
55
+
56
+ .NumberFieldInput:disabled {
57
+ background: var(--number-field-input-background-disabled);
58
+ color: var(--number-field-input-color-disabled);
59
+ cursor: var(--number-field-input-cursor-disabled);
60
+ }
61
+
62
+ /* Error state */
63
+ .NumberFieldRoot[data-invalid] .NumberFieldInput {
64
+ border-color: var(--number-field-input-border-color-error);
65
+ }
66
+
67
+ .NumberFieldRoot[data-invalid] .NumberFieldInput:focus {
68
+ border-color: var(--number-field-input-border-color-error);
69
+ box-shadow: var(--number-field-input-shadow-focus-error);
70
+ }
71
+
72
+ /* ============================================
73
+ INCREMENT/DECREMENT BUTTONS
74
+ ============================================ */
75
+
76
+ .NumberFieldIncrement,
77
+ .NumberFieldDecrement {
78
+ display: var(--number-field-button-display);
79
+ align-items: var(--number-field-button-align-items);
80
+ justify-content: var(--number-field-button-justify-content);
81
+ position: var(--number-field-button-position);
82
+ width: var(--number-field-button-width);
83
+ height: var(--number-field-button-height);
84
+ padding: 0;
85
+ border: var(--number-field-button-border);
86
+ background: var(--number-field-button-background);
87
+ color: var(--number-field-button-color);
88
+ cursor: var(--number-field-button-cursor);
89
+ transition: var(--number-field-button-transition);
90
+ border-radius: var(--number-field-button-border-radius);
91
+ outline: none;
92
+ }
93
+
94
+ .NumberFieldIncrement {
95
+ top: var(--number-field-increment-top);
96
+ right: var(--number-field-increment-right);
97
+ }
98
+
99
+ .NumberFieldDecrement {
100
+ bottom: var(--number-field-decrement-bottom);
101
+ right: var(--number-field-decrement-right);
102
+ }
103
+
104
+ .NumberFieldIncrement:hover:not(:disabled),
105
+ .NumberFieldDecrement:hover:not(:disabled) {
106
+ background: var(--number-field-button-background-hover);
107
+ color: var(--number-field-button-color-hover);
108
+ }
109
+
110
+ .NumberFieldIncrement:active:not(:disabled),
111
+ .NumberFieldDecrement:active:not(:disabled) {
112
+ background: var(--number-field-button-background-active);
113
+ }
114
+
115
+ .NumberFieldIncrement:focus-visible,
116
+ .NumberFieldDecrement:focus-visible {
117
+ outline: 2px solid var(--focus-ring);
118
+ outline-offset: -1px;
119
+ }
120
+
121
+ .NumberFieldIncrement:disabled,
122
+ .NumberFieldDecrement:disabled {
123
+ opacity: var(--number-field-button-opacity-disabled);
124
+ cursor: var(--number-field-button-cursor-disabled);
125
+ }
126
+
127
+ /* ============================================
128
+ SCRUB AREA
129
+ ============================================ */
130
+
131
+ .NumberFieldScrubArea {
132
+ cursor: var(--number-field-scrub-area-cursor);
133
+ user-select: var(--number-field-scrub-area-user-select);
134
+ }
135
+
136
+ .NumberFieldScrubArea[data-scrubbing] {
137
+ cursor: var(--number-field-scrub-area-cursor);
138
+ }
139
+
140
+ /* ============================================
141
+ LABEL
142
+ ============================================ */
143
+
144
+ .NumberFieldLabel {
145
+ font-size: var(--number-field-label-font-size);
146
+ font-weight: var(--number-field-label-font-weight);
147
+ color: var(--number-field-label-color);
148
+ }
149
+
150
+ /* ============================================
151
+ DESCRIPTION
152
+ ============================================ */
153
+
154
+ .NumberFieldDescription {
155
+ font-size: var(--number-field-description-font-size);
156
+ color: var(--number-field-description-color);
157
+ line-height: var(--number-field-description-line-height);
158
+ margin: 0;
159
+ }
160
+
161
+ /* ============================================
162
+ ERROR MESSAGE
163
+ ============================================ */
164
+
165
+ .NumberFieldError {
166
+ font-size: var(--number-field-error-font-size);
167
+ color: var(--number-field-error-color);
168
+ line-height: var(--number-field-error-line-height);
169
+ margin: 0;
170
+ }
171
+
172
+ /* ============================================
173
+ REDUCED MOTION
174
+ ============================================ */
175
+
176
+ @media (prefers-reduced-motion: reduce) {
177
+ .NumberFieldInput,
178
+ .NumberFieldIncrement,
179
+ .NumberFieldDecrement {
180
+ transition: none;
181
+ }
182
+ }