@plexui/styles 0.0.0-stage → 0.1.1

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 (84) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +28 -2
  3. package/dist/es/components/Accordion/Accordion.module.css +89 -0
  4. package/dist/es/components/Alert/Alert.module.css +210 -0
  5. package/dist/es/components/Avatar/Avatar.module.css +168 -0
  6. package/dist/es/components/Avatar/AvatarGroup.module.css +26 -0
  7. package/dist/es/components/Badge/Badge.module.css +196 -0
  8. package/dist/es/components/Breadcrumb/Breadcrumb.module.css +59 -0
  9. package/dist/es/components/Button/Button.module.css +863 -0
  10. package/dist/es/components/ButtonGroup/ButtonGroup.module.css +158 -0
  11. package/dist/es/components/Card/Card.module.css +125 -0
  12. package/dist/es/components/Checkbox/Checkbox.module.css +225 -0
  13. package/dist/es/components/CodeBlock/CodeBlock.module.css +139 -0
  14. package/dist/es/components/DataTable/DataTable.module.css +117 -0
  15. package/dist/es/components/DatePicker/Calendar.module.css +271 -0
  16. package/dist/es/components/DateRangePicker/Calendar.module.css +295 -0
  17. package/dist/es/components/DateRangePicker/Trigger.module.css +25 -0
  18. package/dist/es/components/Dialog/Dialog.module.css +240 -0
  19. package/dist/es/components/EmptyMessage/EmptyMessage.module.css +116 -0
  20. package/dist/es/components/Field/Field.module.css +152 -0
  21. package/dist/es/components/FieldError/FieldError.module.css +28 -0
  22. package/dist/es/components/FileUpload/FileUpload.module.css +133 -0
  23. package/dist/es/components/FloatingLabelInput/FloatingLabelInput.module.css +220 -0
  24. package/dist/es/components/FloatingLabelSelect/FloatingLabelSelect.module.css +152 -0
  25. package/dist/es/components/Image/Image.module.css +9 -0
  26. package/dist/es/components/Indicator/CircularProgress.module.css +28 -0
  27. package/dist/es/components/Indicator/LoadingDots.module.css +35 -0
  28. package/dist/es/components/Indicator/LoadingIndicator.module.css +41 -0
  29. package/dist/es/components/Input/Input.module.css +519 -0
  30. package/dist/es/components/InputGroup/InputGroup.module.css +309 -0
  31. package/dist/es/components/Kbd/Kbd.module.css +47 -0
  32. package/dist/es/components/Label/Label.module.css +16 -0
  33. package/dist/es/components/Markdown/Markdown.module.css +233 -0
  34. package/dist/es/components/MarkdownEditor/MarkdownEditor.module.css +297 -0
  35. package/dist/es/components/Menu/Menu.module.css +389 -0
  36. package/dist/es/components/OTPInput/OTPInput.module.css +70 -0
  37. package/dist/es/components/Popover/Popover.module.css +82 -0
  38. package/dist/es/components/Progress/Progress.module.css +34 -0
  39. package/dist/es/components/ProgressSteps/ProgressSteps.module.css +246 -0
  40. package/dist/es/components/RadioGroup/RadioGroup.module.css +159 -0
  41. package/dist/es/components/Select/Select.module.css +341 -0
  42. package/dist/es/components/SelectControl/SelectControl.module.css +558 -0
  43. package/dist/es/components/Separator/Separator.module.css +16 -0
  44. package/dist/es/components/ShimmerText/ShimmerText.module.css +43 -0
  45. package/dist/es/components/Sidebar/Sidebar.module.css +913 -0
  46. package/dist/es/components/Skeleton/Skeleton.module.css +17 -0
  47. package/dist/es/components/Slider/Slider.module.css +199 -0
  48. package/dist/es/components/StatCard/StatCard.module.css +234 -0
  49. package/dist/es/components/Switch/Switch.module.css +121 -0
  50. package/dist/es/components/Table/Table.module.css +56 -0
  51. package/dist/es/components/Tabs/Tabs.module.css +688 -0
  52. package/dist/es/components/TagInput/TagInput.module.css +320 -0
  53. package/dist/es/components/TextLink/TextLink.module.css +50 -0
  54. package/dist/es/components/Textarea/Textarea.module.css +272 -0
  55. package/dist/es/components/Toast/Toast.module.css +99 -0
  56. package/dist/es/components/Tooltip/Tooltip.module.css +91 -0
  57. package/dist/es/components/Transition/Animate.module.css +54 -0
  58. package/dist/es/components/Transition/AnimateLayout.module.css +101 -0
  59. package/dist/es/components/Transition/AnimateLayoutGroup.module.css +88 -0
  60. package/dist/es/components/Transition/TransitionGroup.module.css +4 -0
  61. package/dist/es/styles/base.css +102 -0
  62. package/dist/es/styles/globals.css +50 -0
  63. package/dist/es/styles/index.css +22 -0
  64. package/dist/es/styles/katex.min.css +1296 -0
  65. package/dist/es/styles/tailwind-utilities.css +1316 -0
  66. package/dist/es/styles/touch.css +71 -0
  67. package/dist/es/styles/variables-components.css +626 -0
  68. package/dist/es/styles/variables-primitive.css +327 -0
  69. package/dist/es/styles/variables-semantic.css +629 -0
  70. package/dist/es/styles/variables-tailwind-theme.css +34 -0
  71. package/dist/es/styles/variables-tokens-root.css +40 -0
  72. package/dist/es/types.js +4 -0
  73. package/dist/es/types.js.map +1 -0
  74. package/dist/es/vite/index.js +54 -0
  75. package/dist/es/vite/index.js.map +1 -0
  76. package/dist/types/types.d.ts +15 -0
  77. package/dist/types/vite/index.d.ts +55 -0
  78. package/package.json +109 -4
  79. package/postcss/functions.mjs +23 -0
  80. package/postcss/injectBreakpoints.mjs +47 -0
  81. package/postcss/mixins.mjs +100 -0
  82. package/postcss/parseLightDark.mjs +174 -0
  83. package/postcss/wrapModulesInLayer.mjs +21 -0
  84. package/postcss.config.mjs +52 -0
@@ -0,0 +1,71 @@
1
+ /*
2
+ * Optional touch sizes for phones, from Apple's iOS and iPadOS 26 design
3
+ * resources. Below 768px every control takes one height, 44px, with text at
4
+ * 17px; menus and the mobile sidebar follow the iOS measures. Nothing changes
5
+ * unless this file is imported, after the main stylesheet:
6
+ *
7
+ * @import "@plexui/styles/styles/touch.css";
8
+ *
9
+ * Tokens only, so a size prop still picks the same token as on desktop. `3xl`
10
+ * stays large at 50px for the main action of a sign-in or checkout screen.
11
+ */
12
+ @media (max-width: 767px) {
13
+ html:root {
14
+ --control-size-sm: 44px;
15
+ --control-size-md: 44px;
16
+ --control-size-lg: 44px;
17
+ --control-size-xl: 44px;
18
+ --control-size-3xl: 50px;
19
+ --control-gutter-sm: 14px;
20
+ --control-gutter-md: 14px;
21
+ --control-gutter-lg: 14px;
22
+ --control-gutter-xl: 20px;
23
+ --control-gutter-pill-scaling: 1;
24
+ --control-font-size-md: 17px;
25
+ --control-font-size-lg: 17px;
26
+ --button-gap-lg: 4px;
27
+
28
+ --segmented-control-gutter: 4px;
29
+
30
+ --menu-gutter: 10px;
31
+ --menu-radius: 32px;
32
+ --menu-radius-pill: 32px;
33
+ --menu-font-size: 17px;
34
+ --menu-line-height: 20px;
35
+ --menu-item-padding: 10px 14px 10px 12px;
36
+ --menu-item-gap: 6px;
37
+ --menu-separator-gutter: 10px 14px;
38
+ --menu-checkbox-indicator-size: 24px;
39
+ --menu-label-padding: 4px 14px 10px;
40
+ --menu-label-padding-bottom: 10px;
41
+ --menu-label-font-size: 13px;
42
+ --menu-label-font-weight: var(--font-weight-medium);
43
+ --menu-label-line-height: 15px;
44
+
45
+ --sidebar-menu-item-height: 44px;
46
+ --sidebar-menu-item-font-size: 17px;
47
+ --sidebar-menu-item-line-height: 22px;
48
+ --sidebar-menu-item-margin: 0;
49
+ --sidebar-menu-sub-item-padding-y: 11px;
50
+ --sidebar-menu-sub-item-font-size: 17px;
51
+ --sidebar-menu-sub-item-line-height: 22px;
52
+ --sidebar-icon-size: 20px;
53
+ }
54
+
55
+ html [role="radiogroup"] {
56
+ --segmented-control-font-size: 15px;
57
+ }
58
+
59
+ html [data-slot="input"] {
60
+ --input-font-size: 17px;
61
+ --input-gutter: 14px;
62
+ }
63
+
64
+ html [data-slot="input"][data-has-start-adornment] {
65
+ --input-gutter: 11px;
66
+ }
67
+
68
+ html [role="menu"] {
69
+ --menu-min-width: 238px !important;
70
+ }
71
+ }
@@ -0,0 +1,626 @@
1
+ @layer theme {
2
+ :root,
3
+ :where([data-theme]) {
4
+ /* =============================================
5
+ Alert
6
+ ============================================= */
7
+ --alert-border-radius: var(--radius-xl);
8
+ --alert-gap: calc(var(--spacing) * 3);
9
+ --alert-gutter: calc(var(--spacing) * 4);
10
+ --alert-font-size: var(--font-text-sm-size);
11
+ --alert-line-height: var(--font-text-sm-line-height);
12
+ --alert-title-font-weight: var(--font-weight-semibold);
13
+
14
+ /* =============================================
15
+ Avatar
16
+ ============================================= */
17
+ --avatar-radius: var(--radius-full);
18
+ --avatar-size: 28px;
19
+ --avatar-font-size-scaling: 0.5;
20
+ --avatar-overflow-font-size-scaling-one: 0.45;
21
+ --avatar-overflow-font-size-scaling-two: 0.37;
22
+ --avatar-overflow-font-size-scaling-three: 0.3;
23
+
24
+ /* =============================================
25
+ AvatarGroup
26
+ ============================================= */
27
+ --avatar-group-cutout-width: 3px;
28
+ --avatar-group-cutout-color: var(--color-surface);
29
+ --avatar-group-spacing: -8px;
30
+
31
+ /* =============================================
32
+ Badge
33
+ ============================================= */
34
+ --badge-gutter-2xs: 0.1875rem;
35
+ /* 3px */
36
+ --badge-gutter-xs: 0.25rem;
37
+ /* 4px */
38
+ --badge-gutter-sm: calc(var(--control-gutter-2xs) - 1px);
39
+ --badge-gutter-md: var(--control-gutter-2xs);
40
+ --badge-gutter-lg: var(--control-gutter-xs);
41
+ --badge-size-2xs: 1rem;
42
+ /* 16px */
43
+ --badge-size-xs: 1.125rem;
44
+ /* 18px */
45
+ --badge-size-sm: calc(var(--control-size-3xs) - 2px);
46
+ --badge-size-md: var(--control-size-3xs);
47
+ --badge-size-lg: var(--control-size-2xs);
48
+ --badge-radius-2xs: var(--radius-2xs);
49
+ --badge-radius-xs: var(--radius-2xs);
50
+ --badge-radius-sm: var(--radius-xs);
51
+ --badge-radius-md: var(--radius-xs);
52
+ --badge-radius-lg: var(--radius-sm);
53
+ --badge-font-size-2xs: var(--font-text-xs-size);
54
+ --badge-font-size-xs: var(--font-text-xs-size);
55
+ --badge-font-size-sm: var(--font-text-xs-size);
56
+ --badge-font-size-md: var(--font-text-sm-size);
57
+ --badge-font-size-lg: var(--font-text-sm-size);
58
+ --badge-tracking-2xs: var(--tracking-wide);
59
+ --badge-tracking-xs: var(--tracking-wide);
60
+ --badge-tracking-sm: var(--tracking-wide);
61
+ --badge-tracking-md: var(--tracking-normal);
62
+ --badge-tracking-lg: var(--tracking-normal);
63
+ --badge-font-weight-2xs: var(--font-weight-semibold);
64
+ --badge-font-weight-xs: var(--font-weight-semibold);
65
+ --badge-font-weight-sm: var(--font-weight-semibold);
66
+ --badge-font-weight-md: var(--font-weight-semibold);
67
+ --badge-font-weight-lg: var(--font-weight-semibold);
68
+ --badge-icon-font-size-2xs: var(--font-text-xs-size);
69
+ --badge-icon-font-size-xs: var(--font-text-xs-size);
70
+ --badge-icon-font-size-sm: var(--font-text-xs-size);
71
+ --badge-icon-font-size-md: var(--font-text-md-size);
72
+ --badge-icon-font-size-lg: var(--font-text-md-size);
73
+ --badge-indicator-size-2xs: 0.625rem;
74
+ /* 10px */
75
+ --badge-indicator-size-xs: 0.625rem;
76
+ /* 10px */
77
+ --badge-indicator-size-sm: var(--font-text-xs-size);
78
+ --badge-indicator-size-md: var(--font-text-xs-size);
79
+ --badge-indicator-size-lg: var(--font-text-sm-size);
80
+
81
+ /* =============================================
82
+ Button
83
+ ============================================= */
84
+ --button-gap-sm: 3px;
85
+ --button-gap-md: 4px;
86
+ --button-gap-lg: 6px;
87
+ --button-font-weight: var(--font-weight-medium);
88
+
89
+ /* =============================================
90
+ Card
91
+ ============================================= */
92
+ --card-radius: var(--radius-xl);
93
+ --card-background: var(--color-surface);
94
+ --card-background-hover: var(--color-surface-secondary);
95
+ --card-border-color: var(--color-border);
96
+ --card-border-color-hover: var(--color-border-primary-outline-hover);
97
+ --card-text-color: var(--color-text);
98
+ --card-font-size: var(--font-text-sm-size);
99
+ --card-title-color: var(--color-text);
100
+ --card-title-font-size: var(--font-heading-xs-size);
101
+ --card-title-font-weight: var(--font-weight-semibold);
102
+ --card-description-color: var(--color-text-tertiary);
103
+ --card-description-font-size: var(--font-text-sm-size);
104
+
105
+ /* =============================================
106
+ Label
107
+ ============================================= */
108
+ --label-color: var(--color-text);
109
+ --label-font-size: var(--font-text-sm-size);
110
+ --label-font-weight: var(--font-weight-medium);
111
+ --label-line-height: 1;
112
+
113
+ /* =============================================
114
+ Progress
115
+ ============================================= */
116
+ --progress-height: 4px;
117
+ --progress-radius: var(--radius-full);
118
+ --progress-track-color: var(--color-background-secondary-soft);
119
+ --progress-indicator-color: var(--color-text);
120
+ --progress-transition-duration: var(--transition-duration-basic);
121
+ --progress-transition-ease: var(--transition-ease-basic);
122
+ --progress-indeterminate-duration: 1.5s;
123
+
124
+ /* =============================================
125
+ Separator
126
+ ============================================= */
127
+ --separator-color: var(--color-border);
128
+ --separator-thickness: 1px;
129
+
130
+ /* =============================================
131
+ ButtonGroup
132
+ ============================================= */
133
+ --button-group-nested-gap: calc(var(--spacing) * 2);
134
+ --button-group-separator-color: var(--color-border-strong, var(--color-border));
135
+ --button-group-text-background: var(--color-background-secondary-soft);
136
+ --button-group-text-color: var(--color-text-primary);
137
+ --button-group-text-border-color: var(--color-border-secondary-outline, var(--color-border));
138
+ --button-group-text-font-size: var(--font-text-sm-size);
139
+ --button-group-text-font-weight: var(--font-weight-medium);
140
+
141
+ /* =============================================
142
+ Accordion
143
+ ============================================= */
144
+ --accordion-item-divider-color: var(--color-border);
145
+ --accordion-item-divider-width: 1px;
146
+ --accordion-item-disabled-opacity: 0.5;
147
+ --accordion-trigger-color: var(--color-text);
148
+ --accordion-trigger-font-size: var(--font-text-sm-size);
149
+ --accordion-trigger-font-weight: var(--font-weight-semibold);
150
+ --accordion-trigger-line-height: var(--font-text-sm-line-height);
151
+ --accordion-trigger-padding-block: calc(var(--spacing) * 2.5);
152
+ --accordion-trigger-gap: calc(var(--spacing) * 3);
153
+ --accordion-trigger-focus-ring-color: var(--color-ring);
154
+ --accordion-trigger-focus-radius: var(--radius-sm);
155
+ --accordion-icon-color: var(--color-text-secondary);
156
+ --accordion-icon-size: 16px;
157
+ --accordion-content-color: var(--color-text);
158
+ --accordion-content-font-size: var(--font-text-sm-size);
159
+ --accordion-content-line-height: var(--font-text-sm-line-height);
160
+ --accordion-content-padding-bottom: calc(var(--spacing) * 2.5);
161
+ --accordion-transition-duration: var(--transition-duration-basic);
162
+ --accordion-transition-ease: var(--transition-ease-basic);
163
+
164
+ /* =============================================
165
+ Checkbox
166
+ ============================================= */
167
+ --checkbox-indicator-size: var(--radio-group-indicator-size);
168
+ --checkbox-label-gap: var(--radio-group-item-gap);
169
+ --checkbox-label-line-height: var(--radio-group-item-line-height);
170
+
171
+ /* =============================================
172
+ Input
173
+ ============================================= */
174
+ --input-gap-xs: 4px;
175
+ --input-gap-sm: 6px;
176
+ --input-gap-md: 8px;
177
+ --input-gap-lg: 10px;
178
+ --input-text-color: var(--color-text);
179
+ --input-placeholder-text-color: var(--color-text-tertiary);
180
+ --input-outline-border-color: var(--color-border-primary-outline);
181
+ --input-outline-border-color-focus: var(--alpha-50);
182
+ --input-soft-background-color: var(--color-background-primary-soft-alpha);
183
+ --input-soft-border-color-focus: var(--alpha-20);
184
+ --input-border-color-invalid: var(--color-border-danger-outline);
185
+
186
+ /* =============================================
187
+ FieldError
188
+ ============================================= */
189
+ --field-error-color: var(--color-text-danger-outline);
190
+ --field-error-font-size: 0.75rem;
191
+ --field-error-line-height: var(--font-text-xs-line-height);
192
+ --field-error-icon-size: 1rem;
193
+ --field-error-gap: calc(var(--spacing) * 2);
194
+ --field-error-margin-top: 0.5rem;
195
+ --field-error-margin-bottom: calc(var(--spacing) * 3);
196
+ --field-error-padding-inline: 0;
197
+
198
+ /* =============================================
199
+ Field
200
+ ============================================= */
201
+ --field-label-font-weight: var(--font-weight-medium);
202
+ --field-horizontal-label-width: 120px;
203
+ --field-horizontal-control-width: 240px;
204
+
205
+ /* =============================================
206
+ FloatingLabelInput
207
+ ============================================= */
208
+ --floating-input-height: 3.25rem;
209
+ --floating-input-gutter: 1.25rem;
210
+ --floating-input-border-radius: var(--radius-full);
211
+ --floating-input-background: var(--color-surface);
212
+ --floating-input-border-color-focus: var(--alpha-50);
213
+ --floating-input-border-color-invalid: var(--color-border-danger-outline);
214
+ --floating-input-label-color: var(--color-text-tertiary);
215
+ --floating-input-label-color-focus: var(--color-text);
216
+ --floating-input-label-color-invalid: var(--color-text-danger-outline);
217
+ --floating-input-transition-duration: 80ms;
218
+ --floating-input-label-scale: 0.88;
219
+
220
+ /* =============================================
221
+ FileUpload
222
+ ============================================= */
223
+ --file-upload-height: var(--floating-input-height);
224
+ --file-upload-gutter: var(--floating-input-gutter);
225
+ --file-upload-border-radius: var(--floating-input-border-radius);
226
+ --file-upload-border-color: var(--floating-input-border-color);
227
+ --file-upload-border-color-hover: var(--floating-input-border-color-hover);
228
+ --file-upload-border-color-invalid: var(--floating-input-border-color-invalid);
229
+ --file-upload-background: var(--floating-input-background);
230
+ --file-upload-transition-duration: var(--floating-input-transition-duration);
231
+ --file-upload-list-border-radius: var(--radius-lg);
232
+ --file-upload-list-gap: 0.5rem;
233
+ --file-upload-area-border-radius: var(--radius-xl);
234
+ --file-upload-area-min-height: 10rem;
235
+
236
+ /* =============================================
237
+ Link
238
+ ============================================= */
239
+ --link-font-weight: inherit;
240
+ --link-gap: calc(var(--spacing) * 0.5);
241
+ --link-radius: var(--radius-sm);
242
+ --link-underline-decoration-offset: 0.1em;
243
+
244
+ /* =============================================
245
+ Chat
246
+ ============================================= */
247
+ --chat-max-width: 800px;
248
+ --chat-gutter: calc(var(--spacing) * 5);
249
+ --chat-background-color: var(--color-surface);
250
+ --thread-gutter: calc(var(--spacing) * 4);
251
+ /* 12px (composer gutter) + 4px (input inset) */
252
+ --composer-gutter: calc(var(--spacing) * 3);
253
+ --composer-compact-gutter: calc(var(--spacing) * 2);
254
+ --composer-radius: var(--radius-4xl);
255
+ --composer-background-color: var(--color-surface-elevated);
256
+ --smoothing-background-color: var(--color-surface);
257
+ --user-message-text-color: var(--color-text);
258
+ --source-list-gutter: var(--thread-gutter);
259
+
260
+ /* =============================================
261
+ CodeBlock
262
+ ============================================= */
263
+ --codeblock-syntax-4: var(--pink-500);
264
+
265
+ /* =============================================
266
+ Dialog
267
+ ============================================= */
268
+ --dialog-min-width: 250px;
269
+ --dialog-max-width: 450px;
270
+ --dialog-container-inner-padding: calc(var(--spacing) * 5);
271
+ --dialog-backdrop-fade-background: color-mix(in oklab, var(--color-surface-elevated) 60%, transparent);
272
+
273
+ /* =============================================
274
+ Menu
275
+ ============================================= */
276
+ --menu-gutter: calc(var(--spacing) * 1.5);
277
+ --menu-radius: var(--radius-xl);
278
+ --menu-font-size: var(--font-text-sm-size);
279
+ /* Important that this line-height is ~an even number for centering with icons */
280
+ --menu-line-height: var(--font-text-sm-line-height);
281
+ --menu-item-padding: calc(var(--spacing) * 1.5) calc(var(--spacing) * 2);
282
+ --menu-item-gap: calc(var(--spacing) * 1.5);
283
+ --menu-separator-gutter: var(--menu-gutter) calc(-1 * var(--menu-gutter));
284
+ --menu-separator-background-color: var(--color-border);
285
+ --menu-radio-indicator-size: var(--font-text-lg-size);
286
+ --menu-radio-indicator-hole-size: var(--font-text-3xs-size);
287
+ --menu-checkbox-indicator-size: var(--font-text-lg-size);
288
+
289
+ /* =============================================
290
+ Modal
291
+ ============================================= */
292
+ --modal-container-inner-padding: calc(var(--spacing) * 5);
293
+
294
+ /* =============================================
295
+ Popover
296
+ ============================================= */
297
+ --popover-radius: var(--radius-xl);
298
+
299
+ /* =============================================
300
+ RadioGroup
301
+ ============================================= */
302
+ --radio-group-col-gap: calc(var(--spacing) * 2.5);
303
+ --radio-group-row-gap: calc(var(--spacing) * 5);
304
+ --radio-group-item-gap: calc(var(--spacing) * 1.5);
305
+ --radio-group-item-font-size: var(--font-text-sm-size);
306
+ --radio-group-item-line-height: var(--font-text-sm-line-height);
307
+ --radio-group-indicator-size: var(--font-text-lg-size);
308
+ --radio-group-indicator-border-color: var(--color-border-primary-outline);
309
+ --radio-group-indicator-border-color-hover: var(--alpha-25);
310
+ --radio-group-indicator-background-color: var(--color-background-primary-solid);
311
+ --radio-group-indicator-hole-size: 0.375rem;
312
+ --radio-group-indicator-hole-background-color: var(--color-text-primary-solid);
313
+
314
+ /* =============================================
315
+ Segmented Control
316
+ ============================================= */
317
+ --segmented-control-gap: 2px;
318
+ --segmented-control-gutter: 2px;
319
+ --segmented-control-font-weight: var(--font-weight-semibold);
320
+ --segmented-control-thumb-shadow: 0 1px 4px -1px rgb(0 0 0 / 20%);
321
+ --segmented-control-option-highlight-gutter: 1px;
322
+
323
+ /* =============================================
324
+ Tabs — Underline variant
325
+ ============================================= */
326
+ --tabs-underline-indicator-height: 2px;
327
+ --tabs-underline-indicator-color: var(--color-background-primary-solid);
328
+ --tabs-underline-border-color: var(--color-border);
329
+
330
+ /* =============================================
331
+ SelectControl
332
+ ============================================= */
333
+ --select-control-font-weight: var(--font-weight-normal);
334
+
335
+ /* =============================================
336
+ Slider
337
+ ============================================= */
338
+
339
+ /* =============================================
340
+ Switch
341
+ ============================================= */
342
+ --switch-track-width: 32px;
343
+ --switch-track-height: 19px;
344
+ --switch-thumb-offset: 3px;
345
+ --switch-thumb-size: calc(var(--switch-track-height) - 2 * var(--switch-thumb-offset));
346
+ --switch-thumb-shadow: 0 1px 2px rgb(0 0 0 / 20%);
347
+ --switch-label-gap: calc(var(--spacing) * 2);
348
+
349
+ /* =============================================
350
+ ProgressSteps
351
+ ============================================= */
352
+ --progress-steps-indicator-size-sm: 24px;
353
+ --progress-steps-indicator-size-md: 32px;
354
+ --progress-steps-indicator-size-lg: 40px;
355
+ --progress-steps-row-gap-sm: calc(var(--spacing) * 4);
356
+ --progress-steps-row-gap-md: calc(var(--spacing) * 6);
357
+ --progress-steps-row-gap-lg: calc(var(--spacing) * 8);
358
+ --progress-steps-content-gap-sm: calc(var(--spacing) * 2.5);
359
+ --progress-steps-content-gap-md: calc(var(--spacing) * 3);
360
+ --progress-steps-content-gap-lg: calc(var(--spacing) * 4);
361
+ --progress-steps-font-size-sm: var(--font-text-xs-size);
362
+ --progress-steps-font-size-md: var(--font-text-sm-size);
363
+ --progress-steps-font-size-lg: var(--font-text-md-size);
364
+ --progress-steps-icon-size-sm: var(--control-icon-size-xs);
365
+ --progress-steps-icon-size-md: var(--control-icon-size-sm);
366
+ --progress-steps-icon-size-lg: var(--control-icon-size-md);
367
+ --progress-steps-step-padding-sm: calc(var(--spacing) * 1.5);
368
+ --progress-steps-step-padding-md: calc(var(--spacing) * 2);
369
+ --progress-steps-step-padding-lg: calc(var(--spacing) * 3);
370
+ --progress-steps-connector-width: 2px;
371
+ --progress-steps-connector-dash-length: 4px;
372
+ --progress-steps-connector-dash-gap: 4px;
373
+ --progress-steps-connector-color: var(--gray-100);
374
+ --progress-steps-connector-color-completed: var(--gray-900);
375
+ --progress-steps-indicator-background: var(--gray-100);
376
+ --progress-steps-indicator-background-active: var(--gray-900);
377
+ --progress-steps-indicator-background-completed: var(--gray-900);
378
+ --progress-steps-indicator-text: var(--color-text-secondary);
379
+ --progress-steps-indicator-text-active: var(--gray-0);
380
+ --progress-steps-indicator-text-completed: var(--gray-0);
381
+ --progress-steps-title-font-weight: var(--font-weight-medium);
382
+ --progress-steps-title-color: var(--color-text);
383
+ --progress-steps-title-color-inactive: var(--color-text-tertiary);
384
+ --progress-steps-description-color: var(--color-text-secondary);
385
+ --progress-steps-description-color-inactive: var(--color-text-tertiary);
386
+
387
+ /* =============================================
388
+ ProgressSteps Minimal Variant
389
+ ============================================= */
390
+ --progress-steps-minimal-gap-sm: calc(var(--spacing) * 1);
391
+ --progress-steps-minimal-gap-md: calc(var(--spacing) * 1);
392
+ --progress-steps-minimal-gap-lg: calc(var(--spacing) * 1.5);
393
+ --progress-steps-minimal-height-sm: 3px;
394
+ --progress-steps-minimal-height-md: 3px;
395
+ --progress-steps-minimal-height-lg: 4px;
396
+ --progress-steps-minimal-width-sm: 24px;
397
+ --progress-steps-minimal-width-md: 24px;
398
+ --progress-steps-minimal-width-lg: 32px;
399
+ --progress-steps-minimal-radius: var(--radius-full);
400
+ --progress-steps-minimal-color-completed: var(--gray-900);
401
+ --progress-steps-minimal-color-upcoming: var(--gray-100);
402
+
403
+ /* =============================================
404
+ Sidebar
405
+ ============================================= */
406
+
407
+ /* Dimensions */
408
+ --sidebar-width: 210px;
409
+ --sidebar-width-mobile: 288px;
410
+ --sidebar-width-icon: 64px;
411
+ --sidebar-header-height: var(--control-size-3xl);
412
+ --sidebar-gutter: 12px;
413
+ --sidebar-gutter-sm: var(--control-gutter-2xs);
414
+
415
+ /* Colors */
416
+ --sidebar-background: none;
417
+ --sidebar-background-secondary: var(--color-surface-secondary);
418
+ --sidebar-foreground: var(--color-text);
419
+ --sidebar-border: var(--color-border);
420
+ --sidebar-menu-text-active: var(--gray-900);
421
+
422
+ /* Group label */
423
+ --sidebar-group-label-color: var(--color-text-tertiary);
424
+ --sidebar-group-label-font-size: 14px;
425
+ --sidebar-group-label-font-weight: var(--font-weight-semibold);
426
+ --sidebar-group-label-margin: 24px 0 2px;
427
+ --sidebar-group-label-margin-first: 8px 0 2px;
428
+ --sidebar-group-label-padding: 0 12px 8px;
429
+ --sidebar-group-label-line-height: 14px;
430
+
431
+ /* Menu item */
432
+ --sidebar-menu-item-height: 38px;
433
+ --sidebar-menu-item-height-desktop: 32px;
434
+ --sidebar-menu-item-padding: 0;
435
+ --sidebar-menu-item-margin: 0 0 2px;
436
+ --sidebar-menu-item-margin-desktop: 0 0 2px;
437
+ --sidebar-menu-item-radius: 8px;
438
+ --sidebar-menu-item-font-size: 14px;
439
+ --sidebar-menu-item-line-height: 20px;
440
+
441
+ /* Icon */
442
+ --sidebar-icon-size: 20px;
443
+ --sidebar-icon-wrapper-size: 32px;
444
+ --sidebar-icon-margin: 0 2px 0 4px;
445
+ --sidebar-icon-color: inherit;
446
+
447
+ /* Transitions */
448
+ --sidebar-transition-duration: 0.3s;
449
+ --sidebar-collapse-duration: 0.3s;
450
+
451
+ /* Mobile menu button (hamburger icon) */
452
+ --sidebar-mobile-button-size: 32px;
453
+ --sidebar-mobile-button-radius: 8px;
454
+ --sidebar-mobile-icon-size: 18px;
455
+ --sidebar-mobile-line-height: 2px;
456
+ --sidebar-mobile-line-color: var(--gray-900);
457
+ --sidebar-mobile-line-transition-duration: 0.2s;
458
+
459
+ /* Mobile drawer */
460
+ --sidebar-mobile-gutter: 12px;
461
+ --sidebar-mobile-header-height: 48px;
462
+ --sidebar-mobile-z-index: 301;
463
+ --sidebar-mobile-enter-opacity-duration: 0.8s;
464
+ --sidebar-mobile-enter-transform-duration: 0.7s;
465
+ --sidebar-mobile-enter-delay: 0.33s;
466
+ --sidebar-mobile-exit-duration: 0.3s;
467
+
468
+ /* Footer */
469
+ --sidebar-footer-padding: var(--sidebar-gutter-sm) var(--sidebar-gutter);
470
+
471
+ /* Main content area (Inset) – no shadow, matching reference (.mO2WL) */
472
+ --sidebar-inset-shadow: none;
473
+
474
+ /* Card */
475
+ --sidebar-card-padding: calc(var(--spacing) * 4);
476
+ --sidebar-card-radius: var(--radius-2xl);
477
+ --sidebar-card-height: 96px;
478
+ --sidebar-card-background: var(--color-surface);
479
+ --sidebar-card-background-hover: var(--color-surface-secondary);
480
+ --sidebar-card-shadow: var(--shadow-300), var(--shadow-hairline);
481
+ --sidebar-card-shadow-hover: var(--shadow-400), var(--shadow-hairline);
482
+ --sidebar-card-active-scale: 0.98;
483
+
484
+ /* =============================================
485
+ StatCard
486
+ ============================================= */
487
+ --stat-card-padding: calc(var(--spacing) * 5);
488
+ --stat-card-radius: var(--radius-xl);
489
+ /* spacing is per-section: mt-3 (12px) label→value, mt-2 (8px) value→footer */
490
+ --stat-card-background: var(--color-surface);
491
+ --stat-card-border-color: var(--color-border);
492
+ --stat-card-label-font-size: var(--font-text-sm-size);
493
+ --stat-card-label-color: var(--color-text-secondary);
494
+ --stat-card-value-font-size: var(--font-heading-xl-size);
495
+ --stat-card-value-font-weight: var(--font-weight-semibold);
496
+ --stat-card-value-color: var(--color-text);
497
+ --stat-card-description-font-size: var(--font-text-sm-size);
498
+ --stat-card-description-color: var(--color-text-tertiary);
499
+ --stat-card-trend-font-size: var(--font-text-sm-size);
500
+ --stat-card-trend-font-weight: var(--font-weight-semibold);
501
+ --stat-card-trend-positive-color: var(--color-text-success-soft);
502
+ --stat-card-trend-negative-color: var(--color-text-danger-soft);
503
+ --stat-card-trend-neutral-color: var(--color-text-tertiary);
504
+ --stat-card-progress-height: 4px;
505
+ --stat-card-progress-radius: var(--radius-full);
506
+ --stat-card-progress-fill: var(--color-background-primary-solid);
507
+ --stat-card-icon-size: 24px;
508
+ --stat-card-icon-color: var(--color-text-primary);
509
+ /* label line-height (20) + gap spacing(0.5) (2) + value line-height (38) = 60 */
510
+ --stat-card-icon-wrapper-size: 60px;
511
+ --stat-card-icon-wrapper-radius: var(--radius-md);
512
+ --stat-card-icon-wrapper-background: var(--color-background-primary-soft-alpha);
513
+ --stat-card-accent-width: 3px;
514
+ --stat-card-info-icon-size: 16px;
515
+
516
+ /* sm size overrides */
517
+ --stat-card-sm-padding-block: calc(var(--spacing) * 3);
518
+ --stat-card-sm-padding-inline: calc(var(--spacing) * 4);
519
+ --stat-card-sm-label-font-size: var(--font-text-xs-size);
520
+ --stat-card-sm-value-font-size: var(--font-heading-md-size);
521
+ --stat-card-sm-trend-font-size: var(--font-text-xs-size);
522
+ --stat-card-sm-description-font-size: var(--font-text-xs-size);
523
+ --stat-card-sm-icon-size: 20px;
524
+ /* label line-height (18) + gap spacing(0.5) (2) + value line-height (26) = 46 */
525
+ --stat-card-sm-icon-wrapper-size: 46px;
526
+ --stat-card-sm-icon-wrapper-radius: var(--radius-sm);
527
+ --stat-card-sm-info-icon-size: 14px;
528
+
529
+ /* =============================================
530
+ Table
531
+ ============================================= */
532
+ --table-border-color: var(--color-border);
533
+ --table-header-background: transparent;
534
+ --table-header-font-weight: var(--font-weight-medium);
535
+ --table-header-color: var(--color-text-secondary);
536
+ --table-cell-padding: calc(var(--spacing) * 3) calc(var(--spacing) * 4);
537
+ --table-cell-font-size: var(--font-text-sm-size);
538
+ --table-cell-line-height: var(--font-text-sm-line-height);
539
+ --table-cell-color: var(--color-text);
540
+ --table-footer-background: transparent;
541
+ --table-footer-font-weight: var(--font-weight-medium);
542
+ --table-caption-font-size: var(--font-text-sm-size);
543
+ --table-caption-color: var(--color-text-tertiary);
544
+
545
+ /* =============================================
546
+ Skeleton
547
+ ============================================= */
548
+ --skeleton-radius: var(--radius-md);
549
+ }
550
+ :where(:root), :where([data-theme="light"]) {
551
+ --avatar-image-border-color: var(--alpha-04);
552
+ --input-outline-border-color-hover: var(--alpha-25);
553
+ --floating-input-border-color: rgb(0 0 0 / 15%);
554
+ --floating-input-border-color-hover: rgb(0 0 0 / 20%);
555
+ --file-upload-separator-color: rgb(0 0 0 / 8%);
556
+ --link-primary-text-color: var(--blue-500);
557
+ --link-primary-text-color-hover: var(--blue-600);
558
+ --user-message-background-color: var(--alpha-05);
559
+ --codeblock-background-color: #f9f9f9;
560
+ --codeblock-syntax-1: #c0660d;
561
+ --codeblock-syntax-2: var(--blue-500);
562
+ --codeblock-syntax-3: var(--green-600);
563
+ --codeblock-syntax-5: var(--purple-500);
564
+ --dialog-backdrop-dim-background: rgb(0 0 0 / 30%);
565
+ --menu-item-background-color: var(--alpha-08);
566
+ --modal-backdrop-background: rgb(0 0 0 / 30%);
567
+ --segmented-control-background: var(--gray-100);
568
+ --segmented-control-thumb-background: var(--gray-0);
569
+ --segmented-control-option-highlight-background-color: var(--gray-200);
570
+ --slider-track-color: var(--gray-150);
571
+ --slider-range-color: var(--gray-450);
572
+ --switch-track-color: var(--gray-150);
573
+ --switch-track-color-hover: var(--gray-200);
574
+ --switch-track-color-checked: var(--gray-900);
575
+ --switch-track-color-checked-disabled: var(--gray-300);
576
+ --switch-track-color-disabled: var(--gray-100);
577
+ --switch-thumb-color: var(--gray-0);
578
+ --switch-thumb-color-disabled: var(--gray-0);
579
+ --sidebar-accent: var(--alpha-08);
580
+ --sidebar-accent-hover: var(--alpha-12);
581
+ --sidebar-menu-text: var(--gray-750);
582
+ --sidebar-mobile-backdrop-color: rgb(0 0 0 / 15%);
583
+ --sidebar-footer-shadow: 0 -2px 10px rgb(0 0 0 / 6%);
584
+ --stat-card-progress-background: var(--alpha-08);
585
+ --table-row-hover-background: var(--alpha-02);
586
+ --skeleton-background: var(--alpha-08);
587
+ }
588
+ :where([data-theme="dark"]) {
589
+ --avatar-image-border-color: var(--alpha-15);
590
+ --input-outline-border-color-hover: var(--alpha-30);
591
+ --floating-input-border-color: rgb(255 255 255 / 16%);
592
+ --floating-input-border-color-hover: rgb(255 255 255 / 24%);
593
+ --file-upload-separator-color: rgb(255 255 255 / 8%);
594
+ --link-primary-text-color: var(--blue-300);
595
+ --link-primary-text-color-hover: var(--blue-400);
596
+ --user-message-background-color: var(--alpha-08);
597
+ --codeblock-background-color: #161616;
598
+ --codeblock-syntax-1: var(--yellow-100);
599
+ --codeblock-syntax-2: var(--blue-200);
600
+ --codeblock-syntax-3: var(--green-300);
601
+ --codeblock-syntax-5: var(--purple-300);
602
+ --dialog-backdrop-dim-background: rgb(0 0 0 / 50%);
603
+ --menu-item-background-color: var(--alpha-10);
604
+ --modal-backdrop-background: rgb(0 0 0 / 50%);
605
+ --segmented-control-background: var(--gray-0);
606
+ --segmented-control-thumb-background: var(--gray-300);
607
+ --segmented-control-option-highlight-background-color: var(--gray-300);
608
+ --slider-track-color: var(--gray-400);
609
+ --slider-range-color: var(--gray-600);
610
+ --switch-track-color: var(--gray-400);
611
+ --switch-track-color-hover: var(--gray-450);
612
+ --switch-track-color-checked: var(--blue-400);
613
+ --switch-track-color-checked-disabled: var(--blue-700);
614
+ --switch-track-color-disabled: var(--gray-300);
615
+ --switch-thumb-color: var(--gray-1000);
616
+ --switch-thumb-color-disabled: var(--gray-800);
617
+ --sidebar-accent: var(--alpha-12);
618
+ --sidebar-accent-hover: var(--alpha-16);
619
+ --sidebar-menu-text: var(--gray-850);
620
+ --sidebar-mobile-backdrop-color: rgb(0 0 0 / 35%);
621
+ --sidebar-footer-shadow: 0 -2px 10px rgb(0 0 0 / 35%);
622
+ --stat-card-progress-background: var(--alpha-12);
623
+ --table-row-hover-background: var(--alpha-04);
624
+ --skeleton-background: var(--alpha-12);
625
+ }
626
+ }