@kushagradhawan/kookie-ui 0.1.21 → 0.1.23

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 (97) hide show
  1. package/components.css +854 -582
  2. package/dist/cjs/components/_internal/base-checkbox.props.d.ts +2 -2
  3. package/dist/cjs/components/_internal/base-checkbox.props.js +1 -1
  4. package/dist/cjs/components/_internal/base-checkbox.props.js.map +2 -2
  5. package/dist/cjs/components/_internal/base-radio.props.d.ts +2 -2
  6. package/dist/cjs/components/_internal/base-radio.props.js +1 -1
  7. package/dist/cjs/components/_internal/base-radio.props.js.map +2 -2
  8. package/dist/cjs/components/checkbox-cards.d.ts.map +1 -1
  9. package/dist/cjs/components/checkbox-cards.js +1 -1
  10. package/dist/cjs/components/checkbox-cards.js.map +3 -3
  11. package/dist/cjs/components/checkbox-cards.props.d.ts +5 -0
  12. package/dist/cjs/components/checkbox-cards.props.d.ts.map +1 -1
  13. package/dist/cjs/components/checkbox-cards.props.js +1 -1
  14. package/dist/cjs/components/checkbox-cards.props.js.map +3 -3
  15. package/dist/cjs/components/checkbox-group.props.d.ts +2 -2
  16. package/dist/cjs/components/image.d.ts.map +1 -1
  17. package/dist/cjs/components/image.js +1 -1
  18. package/dist/cjs/components/image.js.map +2 -2
  19. package/dist/cjs/components/radio-cards.d.ts.map +1 -1
  20. package/dist/cjs/components/radio-cards.js +1 -1
  21. package/dist/cjs/components/radio-cards.js.map +3 -3
  22. package/dist/cjs/components/radio-cards.props.d.ts +5 -0
  23. package/dist/cjs/components/radio-cards.props.d.ts.map +1 -1
  24. package/dist/cjs/components/radio-cards.props.js +1 -1
  25. package/dist/cjs/components/radio-cards.props.js.map +3 -3
  26. package/dist/cjs/components/radio-group.props.d.ts +2 -2
  27. package/dist/cjs/components/radio-group.props.js +1 -1
  28. package/dist/cjs/components/radio-group.props.js.map +2 -2
  29. package/dist/cjs/components/segmented-control.props.d.ts +5 -0
  30. package/dist/cjs/components/segmented-control.props.d.ts.map +1 -1
  31. package/dist/cjs/components/segmented-control.props.js +1 -1
  32. package/dist/cjs/components/segmented-control.props.js.map +2 -2
  33. package/dist/esm/components/_internal/base-checkbox.props.d.ts +2 -2
  34. package/dist/esm/components/_internal/base-checkbox.props.js +1 -1
  35. package/dist/esm/components/_internal/base-checkbox.props.js.map +2 -2
  36. package/dist/esm/components/_internal/base-radio.props.d.ts +2 -2
  37. package/dist/esm/components/_internal/base-radio.props.js +1 -1
  38. package/dist/esm/components/_internal/base-radio.props.js.map +2 -2
  39. package/dist/esm/components/checkbox-cards.d.ts.map +1 -1
  40. package/dist/esm/components/checkbox-cards.js +1 -1
  41. package/dist/esm/components/checkbox-cards.js.map +3 -3
  42. package/dist/esm/components/checkbox-cards.props.d.ts +5 -0
  43. package/dist/esm/components/checkbox-cards.props.d.ts.map +1 -1
  44. package/dist/esm/components/checkbox-cards.props.js +1 -1
  45. package/dist/esm/components/checkbox-cards.props.js.map +3 -3
  46. package/dist/esm/components/checkbox-group.props.d.ts +2 -2
  47. package/dist/esm/components/image.d.ts.map +1 -1
  48. package/dist/esm/components/image.js +1 -1
  49. package/dist/esm/components/image.js.map +2 -2
  50. package/dist/esm/components/radio-cards.d.ts.map +1 -1
  51. package/dist/esm/components/radio-cards.js +1 -1
  52. package/dist/esm/components/radio-cards.js.map +3 -3
  53. package/dist/esm/components/radio-cards.props.d.ts +5 -0
  54. package/dist/esm/components/radio-cards.props.d.ts.map +1 -1
  55. package/dist/esm/components/radio-cards.props.js +1 -1
  56. package/dist/esm/components/radio-cards.props.js.map +3 -3
  57. package/dist/esm/components/radio-group.props.d.ts +2 -2
  58. package/dist/esm/components/radio-group.props.js +1 -1
  59. package/dist/esm/components/radio-group.props.js.map +2 -2
  60. package/dist/esm/components/segmented-control.props.d.ts +5 -0
  61. package/dist/esm/components/segmented-control.props.d.ts.map +1 -1
  62. package/dist/esm/components/segmented-control.props.js +1 -1
  63. package/dist/esm/components/segmented-control.props.js.map +2 -2
  64. package/package.json +1 -1
  65. package/src/components/_internal/base-button.css +16 -7
  66. package/src/components/_internal/base-card.css +31 -0
  67. package/src/components/_internal/base-checkbox.css +84 -24
  68. package/src/components/_internal/base-checkbox.props.ts +2 -2
  69. package/src/components/_internal/base-radio.css +68 -12
  70. package/src/components/_internal/base-radio.props.ts +2 -2
  71. package/src/components/_internal/base-tab-list.css +6 -1
  72. package/src/components/animations.css +4 -4
  73. package/src/components/avatar.css +10 -0
  74. package/src/components/badge.css +1 -1
  75. package/src/components/card.css +115 -63
  76. package/src/components/checkbox-cards.css +36 -14
  77. package/src/components/checkbox-cards.props.tsx +3 -0
  78. package/src/components/checkbox-cards.tsx +13 -6
  79. package/src/components/image.css +33 -9
  80. package/src/components/image.tsx +2 -1
  81. package/src/components/progress.css +29 -27
  82. package/src/components/radio-cards.css +33 -9
  83. package/src/components/radio-cards.props.tsx +3 -0
  84. package/src/components/radio-cards.tsx +10 -5
  85. package/src/components/radio-group.props.tsx +2 -2
  86. package/src/components/segmented-control.css +71 -26
  87. package/src/components/segmented-control.props.tsx +6 -0
  88. package/src/components/select.css +42 -32
  89. package/src/components/slider.css +19 -19
  90. package/src/components/switch.css +6 -6
  91. package/src/components/text-area.css +31 -11
  92. package/src/components/text-field.css +31 -11
  93. package/src/styles/tokens/constants.css +141 -20
  94. package/src/styles/tokens/transition.css +27 -8
  95. package/styles.css +948 -604
  96. package/tokens/base.css +14 -6
  97. package/tokens.css +94 -22
@@ -1,5 +1,6 @@
1
1
  .radix-themes {
2
- --segmented-control-transition-duration: 100ms;
2
+ /* Use standard duration token instead of custom duration */
3
+ --segmented-control-transition-duration: var(--duration-1); /* 100ms - Fast transitions */
3
4
  }
4
5
 
5
6
  .rt-SegmentedControlRoot {
@@ -20,6 +21,33 @@
20
21
 
21
22
  /* Create a new stacking context */
22
23
  isolation: isolate;
24
+
25
+ /* Theme-level translucent override */
26
+ :where([data-panel-background='translucent']) & {
27
+ background-color: var(--color-surface-translucent);
28
+ background-image: linear-gradient(var(--gray-a3), var(--gray-a3));
29
+ backdrop-filter: var(--backdrop-filter-panel);
30
+ }
31
+
32
+ /* Component-level overrides (higher specificity) */
33
+ &:where([data-panel-background='solid']) {
34
+ background-color: var(--color-surface);
35
+ background-image: linear-gradient(var(--gray-a3), var(--gray-a3));
36
+ backdrop-filter: none;
37
+ --backdrop-filter-panel: none;
38
+ }
39
+
40
+ &:where([data-panel-background='translucent']) {
41
+ background-color: var(--color-surface-translucent);
42
+ background-image: linear-gradient(var(--gray-a3), var(--gray-a3));
43
+ backdrop-filter: var(--backdrop-filter-panel);
44
+ --backdrop-filter-panel: blur(var(--backdrop-blur-panel));
45
+ }
46
+
47
+ /* Disable backdrop-filter when inside elements that already have backdrop-filter */
48
+ :where(.rt-PopoverContent, .rt-BaseDialogContent, .rt-BaseMenuContent, .rt-DropdownMenuContent, .rt-ContextMenuContent, .rt-AlertDialogContent, .rt-HoverCardContent, .rt-TooltipContent, .rt-Card) & {
49
+ backdrop-filter: none !important;
50
+ }
23
51
  }
24
52
 
25
53
  .rt-SegmentedControlRoot:where([data-disabled]) {
@@ -42,8 +70,8 @@
42
70
  }
43
71
  &:where(:focus-visible) {
44
72
  border-radius: inherit;
45
- outline: 2px solid var(--focus-8);
46
- outline-offset: -1px;
73
+ outline: var(--focus-outline-width) solid var(--focus-8);
74
+ outline-offset: var(--focus-outline-offset-inset);
47
75
  }
48
76
  }
49
77
 
@@ -70,30 +98,30 @@
70
98
  .rt-SegmentedControlItemLabelInactive {
71
99
  position: absolute;
72
100
 
73
- transition: opacity calc(0.8 * var(--segmented-control-transition-duration));
101
+ transition: var(--transition-tabs);
74
102
  font-weight: var(--font-weight-regular);
75
103
  letter-spacing: var(--tab-inactive-letter-spacing);
76
104
  word-spacing: var(--tab-inactive-word-spacing);
77
105
 
78
106
  opacity: 1;
79
- transition-timing-function: ease-out;
107
+ transition-delay: var(--duration-1); /* Staggered effect like tabs */
80
108
  :where(.rt-SegmentedControlItem[data-state='on']) & {
81
109
  opacity: 0;
82
- transition-timing-function: ease-in;
110
+ transition-delay: 0ms; /* Immediate transition for state change */
83
111
  }
84
112
  }
85
113
 
86
114
  .rt-SegmentedControlItemLabelActive {
87
- transition: opacity calc(0.8 * var(--segmented-control-transition-duration));
115
+ transition: var(--transition-tabs);
88
116
  font-weight: var(--font-weight-medium);
89
117
  letter-spacing: var(--tab-active-letter-spacing);
90
118
  word-spacing: var(--tab-active-word-spacing);
91
119
 
92
120
  opacity: 0;
93
- transition-timing-function: ease-in;
121
+ transition-delay: 0ms; /* Immediate transition for active state like tabs */
94
122
  :where(.rt-SegmentedControlItem[data-state='on']) & {
95
123
  opacity: 1;
96
- transition-timing-function: ease-out;
124
+ transition-delay: 0ms; /* Immediate transition for active state */
97
125
  }
98
126
  }
99
127
 
@@ -105,22 +133,21 @@
105
133
  */
106
134
  z-index: -1;
107
135
 
108
- margin-top: 3px;
109
- margin-bottom: 3px;
110
- margin-left: -0.5px;
111
- margin-right: -0.5px;
112
- width: 1px;
136
+ margin-top: calc(var(--space-1) * 0.75); /* 3px - slightly smaller than space-1 */
137
+ margin-bottom: calc(var(--space-1) * 0.75); /* 3px */
138
+ margin-left: calc(-1 * var(--border-width-standard) * 0.5); /* -0.5px */
139
+ margin-right: calc(-1 * var(--border-width-standard) * 0.5); /* -0.5px */
140
+ width: var(--border-width-standard); /* 1px */
113
141
  background-color: var(--gray-a4);
114
- transition: opacity calc(0.8 * var(--segmented-control-transition-duration));
142
+ transition: opacity calc(0.8 * var(--segmented-control-transition-duration)) var(--ease-1);
115
143
 
116
144
  /* Make separators slow to disappear and fast to appear, syncing it well with the indicator motion */
117
- transition-timing-function: ease-out;
118
145
 
119
146
  :where(.rt-SegmentedControlItem:first-child) &,
120
147
  :where(.rt-SegmentedControlItem:where([data-state='on'], :focus-visible)) &,
121
148
  :where(.rt-SegmentedControlItem:where([data-state='on'], :focus-visible)) + * & {
122
149
  opacity: 0;
123
- transition-timing-function: ease-in;
150
+ transition-timing-function: var(--ease-1);
124
151
  }
125
152
  /* Don't transition when the separator is hidden because of the focus outline */
126
153
  :where(.rt-SegmentedControlRoot:has(:focus-visible)) & {
@@ -144,14 +171,12 @@
144
171
  left: 0;
145
172
  height: 100%;
146
173
  pointer-events: none;
147
- transition-property: transform;
148
- transition-timing-function: cubic-bezier(0.445, 0.05, 0.55, 0.95);
149
- transition-duration: var(--segmented-control-transition-duration);
174
+ transition: transform var(--segmented-control-transition-duration) var(--ease-3);
150
175
 
151
176
  &::before {
152
- inset: 1px;
177
+ inset: var(--border-width-standard); /* 1px */
153
178
  position: absolute;
154
- border-radius: max(0.5px, calc(var(--segmented-control-border-radius) - 1px));
179
+ border-radius: max(calc(var(--border-width-standard) * 0.5), calc(var(--segmented-control-border-radius) - var(--border-width-standard)));
155
180
  background-color: var(--segmented-control-indicator-background-color);
156
181
  content: '';
157
182
  }
@@ -164,7 +189,7 @@
164
189
  --segmented-control-indicator-background-color: var(--gray-a3);
165
190
 
166
191
  &::before {
167
- inset: 0px;
192
+ inset: 0;
168
193
  box-shadow: none;
169
194
  }
170
195
  }
@@ -248,7 +273,7 @@
248
273
  @breakpoints {
249
274
  .rt-SegmentedControlRoot {
250
275
  &:where(.rt-r-size-1) {
251
- --segmented-control-border-radius: max(var(--radius-2), var(--radius-full));
276
+ --segmented-control-border-radius: max(calc(var(--radius-1) * var(--spacing-multiplier-large)), var(--radius-full));
252
277
  height: var(--space-5);
253
278
 
254
279
  & :where(.rt-SegmentedControlItemLabel) {
@@ -295,7 +320,7 @@
295
320
  .rt-SegmentedControlRoot:where(.rt-variant-surface) {
296
321
  & :where(.rt-SegmentedControlItem:not([disabled])) ~ :where(.rt-SegmentedControlIndicator) {
297
322
  &::before {
298
- box-shadow: 0 0 0 1px var(--gray-a4);
323
+ box-shadow: 0 0 0 var(--border-width-standard) var(--gray-a4);
299
324
  }
300
325
  }
301
326
  }
@@ -309,7 +334,27 @@
309
334
  .rt-SegmentedControlRoot:where(.rt-variant-classic) {
310
335
  & :where(.rt-SegmentedControlItem:not([disabled])) ~ :where(.rt-SegmentedControlIndicator) {
311
336
  &::before {
312
- box-shadow: var(--shadow-2);
337
+ /* Use the same elevated 3D effect as Button classic variant */
338
+ /* prettier-ignore */
339
+ box-shadow:
340
+ inset 0 calc(-1 * var(--classic-border-width)) var(--classic-shadow-blur-large) var(--gray-a2),
341
+ inset 0 var(--classic-border-width) var(--white-a12),
342
+ inset 0 var(--classic-shadow-blur-medium) var(--classic-shadow-blur-large) var(--gray-a2),
343
+ inset 0 calc(-1 * var(--classic-border-width)) var(--gray-a6),
344
+ 0 0 0 var(--classic-border-width) var(--gray-a5),
345
+ 0 var(--classic-shadow-offset-y) var(--classic-shadow-blur-small) var(--gray-a7);
346
+
347
+ :where(.dark, .dark-theme) &,
348
+ :where(.dark, .dark-theme) :where(.radix-themes:not(.light, .light-theme)) & {
349
+ /* prettier-ignore */
350
+ box-shadow:
351
+ inset 0 calc(-1 * var(--classic-border-width)) var(--classic-shadow-blur-large) var(--gray-a3),
352
+ inset 0 var(--classic-border-width) var(--gray-a11),
353
+ inset 0 var(--classic-shadow-blur-medium) var(--classic-shadow-blur-large) var(--gray-a2),
354
+ inset 0 calc(-2 * var(--classic-border-width)) var(--black-a11),
355
+ 0 0 0 var(--classic-border-width-thick) var(--gray-a7),
356
+ 0 var(--classic-shadow-offset-y) var(--classic-shadow-blur-small) var(--black-a12);
357
+ }
313
358
  }
314
359
  }
315
360
  }
@@ -9,11 +9,17 @@ const segmentedControlRootPropDefs = {
9
9
  disabled: { type: 'boolean', className: 'disabled', default: false },
10
10
  size: { type: 'enum', className: 'rt-r-size', values: sizes, default: '2', responsive: true },
11
11
  variant: { type: 'enum', className: 'rt-variant', values: variants, default: 'surface' },
12
+ panelBackground: {
13
+ type: 'enum',
14
+ className: 'rt-panel-background',
15
+ values: ['solid', 'translucent'],
16
+ },
12
17
  ...radiusPropDef,
13
18
  } satisfies {
14
19
  disabled?: PropDef<boolean>;
15
20
  size: PropDef<(typeof sizes)[number]>;
16
21
  variant: PropDef<(typeof variants)[number]>;
22
+ panelBackground: PropDef<'solid' | 'translucent'>;
17
23
  };
18
24
 
19
25
  export { segmentedControlRootPropDefs };
@@ -14,8 +14,8 @@
14
14
  text-align: start;
15
15
 
16
16
  &:where(:focus-visible) {
17
- outline: 2px solid var(--focus-8);
18
- outline-offset: -1px;
17
+ outline: var(--focus-outline-width) solid var(--focus-8);
18
+ outline-offset: var(--focus-outline-offset-inset);
19
19
  }
20
20
 
21
21
  /* Reduced motion support */
@@ -95,7 +95,7 @@
95
95
  }
96
96
 
97
97
  .rt-SelectSeparator {
98
- height: 1px;
98
+ height: var(--separator-height-thin);
99
99
  margin-top: var(--space-2);
100
100
  margin-bottom: var(--space-2);
101
101
  margin-left: var(--select-item-indicator-width);
@@ -218,7 +218,7 @@
218
218
  &:where(.rt-r-size-1) {
219
219
  --select-content-padding: var(--space-1);
220
220
  --select-item-height: var(--space-5);
221
- --select-item-indicator-width: calc(var(--space-5) / 1.2);
221
+ --select-item-indicator-width: calc(var(--space-5) / var(--select-item-indicator-width-factor));
222
222
  --select-separator-margin-right: var(--space-2);
223
223
  border-radius: var(--radius-3);
224
224
 
@@ -234,8 +234,8 @@
234
234
  border-radius: var(--radius-1);
235
235
  }
236
236
  & :where(.rt-SelectItemIndicatorIcon) {
237
- width: calc(8px * var(--scaling));
238
- height: calc(8px * var(--scaling));
237
+ width: var(--select-indicator-icon-size-1);
238
+ height: var(--select-indicator-icon-size-1);
239
239
  }
240
240
  }
241
241
  &:where(.rt-r-size-2, .rt-r-size-3) {
@@ -261,8 +261,8 @@
261
261
  letter-spacing: var(--letter-spacing-2);
262
262
  }
263
263
  & :where(.rt-SelectItemIndicatorIcon) {
264
- width: calc(10px * var(--scaling));
265
- height: calc(10px * var(--scaling));
264
+ width: var(--select-indicator-icon-size-2);
265
+ height: var(--select-indicator-icon-size-2);
266
266
  }
267
267
  }
268
268
  &:where(.rt-r-size-3) {
@@ -271,8 +271,8 @@
271
271
  letter-spacing: var(--letter-spacing-3);
272
272
  }
273
273
  & :where(.rt-SelectItemIndicatorIcon) {
274
- width: calc(10px * var(--scaling));
275
- height: calc(10px * var(--scaling));
274
+ width: var(--select-indicator-icon-size-3);
275
+ height: var(--select-indicator-icon-size-3);
276
276
  }
277
277
  }
278
278
  }
@@ -286,7 +286,7 @@
286
286
 
287
287
  /* Outline variant - neutral with gray border (previously surface) */
288
288
  .rt-SelectTrigger:where(.rt-variant-outline) {
289
- --select-trigger-border-width: 1px;
289
+ --select-trigger-border-width: var(--border-width-standard);
290
290
 
291
291
  background-color: var(--color-surface);
292
292
  color: var(--gray-12);
@@ -331,22 +331,22 @@
331
331
 
332
332
  /* Classic variant - 3D inset form input */
333
333
  .rt-SelectTrigger:where(.rt-variant-classic) {
334
- --select-trigger-border-width: 0px;
334
+ --select-trigger-border-width: var(--border-width-none);
335
335
 
336
336
  position: relative;
337
337
  /* Subtle inset positioning */
338
- top: calc(var(--classic-elevation-offset) / 3); /* More pronounced than before */
338
+ top: calc(var(--classic-elevation-offset) / var(--classic-elevation-factor-subtle));
339
339
 
340
340
  background-color: var(--color-surface);
341
341
  color: var(--gray-12);
342
342
 
343
343
  /* 3D inset effect - more pronounced but still subtle */
344
344
  /* prettier-ignore */
345
- box-shadow:
346
- inset 0 var(--classic-border-width) calc(var(--classic-shadow-blur-small) / 1.5) var(--gray-a3),
347
- inset 0 calc(-1 * var(--classic-border-width)) var(--gray-a1),
348
- inset 0 calc(var(--classic-border-width) * 2) calc(var(--classic-shadow-blur-medium) / 3) var(--gray-a2),
349
- 0 0 0 var(--classic-border-width) var(--gray-a5);
345
+ box-shadow:
346
+ inset 0 var(--classic-border-width) calc(var(--classic-shadow-blur-small) / var(--classic-shadow-factor-light)) var(--gray-a4),
347
+ inset 0 calc(-1 * var(--classic-border-width)) var(--gray-a2),
348
+ inset 0 calc(var(--classic-border-width) * var(--classic-border-multiplier-double)) calc(var(--classic-shadow-blur-medium) / var(--classic-shadow-medium-factor-third)) var(--gray-a3),
349
+ 0 0 0 var(--classic-border-width) var(--gray-a5);
350
350
 
351
351
  /* Theme-level translucent override */
352
352
  :where([data-panel-background='translucent']) & {
@@ -368,19 +368,19 @@
368
368
  @media (hover: hover) {
369
369
  &:where(:hover:not(:focus-visible)) {
370
370
  /* prettier-ignore */
371
- box-shadow:
372
- inset 0 calc(var(--classic-border-width) / 1.5) calc(var(--classic-shadow-blur-small) / 2) var(--gray-a2),
373
- inset 0 calc(-1 * var(--classic-border-width) / 1.5) var(--gray-a1),
374
- inset 0 var(--classic-border-width) calc(var(--classic-shadow-blur-medium) / 4) var(--gray-a2),
375
- 0 0 0 var(--classic-border-width) var(--gray-a6);
371
+ box-shadow:
372
+ inset 0 calc(var(--classic-border-width) / var(--classic-border-factor-light)) calc(var(--classic-shadow-blur-small) / var(--classic-shadow-factor-medium)) var(--gray-a3),
373
+ inset 0 calc(-1 * var(--classic-border-width) / var(--classic-border-factor-light)) var(--gray-a2),
374
+ inset 0 var(--classic-border-width) calc(var(--classic-shadow-blur-medium) / var(--classic-shadow-factor-subtle)) var(--gray-a3),
375
+ 0 0 0 var(--classic-border-width) var(--gray-a6);
376
376
  }
377
377
  }
378
378
  &:where([data-state='open']) {
379
379
  /* prettier-ignore */
380
380
  box-shadow:
381
- inset 0 calc(var(--classic-border-width) / 1.5) calc(var(--classic-shadow-blur-small) / 2) var(--gray-a2),
382
- inset 0 calc(-1 * var(--classic-border-width) / 1.5) var(--gray-a1),
383
- inset 0 var(--classic-border-width) calc(var(--classic-shadow-blur-medium) / 4) var(--gray-a2),
381
+ inset 0 calc(var(--classic-border-width) / var(--classic-border-factor-light)) calc(var(--classic-shadow-blur-small) / var(--classic-shadow-factor-medium)) var(--gray-a3),
382
+ inset 0 calc(-1 * var(--classic-border-width) / var(--classic-border-factor-light)) var(--gray-a2),
383
+ inset 0 var(--classic-border-width) calc(var(--classic-shadow-blur-medium) / var(--classic-shadow-factor-subtle)) var(--gray-a3),
384
384
  0 0 0 var(--classic-border-width) var(--gray-a6);
385
385
  }
386
386
 
@@ -388,8 +388,8 @@
388
388
  &:where(:focus-visible) {
389
389
  /* prettier-ignore */
390
390
  box-shadow:
391
- inset 0 calc(var(--classic-border-width) / 2) calc(var(--classic-shadow-blur-small) / 3) var(--gray-a1),
392
- 0 0 0 2px var(--focus-8);
391
+ inset 0 calc(var(--classic-border-width) / var(--classic-border-factor-half)) calc(var(--classic-shadow-blur-small) / var(--classic-shadow-factor-heavy)) var(--gray-a2),
392
+ 0 0 0 var(--focus-outline-width) var(--focus-8);
393
393
  }
394
394
 
395
395
  &:where(:disabled) {
@@ -397,7 +397,7 @@
397
397
  background-color: var(--gray-a2);
398
398
  /* prettier-ignore */
399
399
  box-shadow:
400
- inset 0 calc(var(--classic-border-width) / 2) calc(var(--classic-shadow-blur-small) / 2) var(--gray-a1),
400
+ inset 0 calc(var(--classic-border-width) / var(--classic-border-factor-half)) calc(var(--classic-shadow-blur-small) / var(--classic-shadow-factor-medium)) var(--gray-a2),
401
401
  inset 0 0 0 var(--classic-border-width) var(--gray-a6);
402
402
  }
403
403
  &:where([data-placeholder]) {
@@ -409,7 +409,7 @@
409
409
 
410
410
  /* Soft variant - branded with accent colors */
411
411
  .rt-SelectTrigger:where(.rt-variant-soft) {
412
- --select-trigger-border-width: 0px;
412
+ --select-trigger-border-width: var(--border-width-none);
413
413
 
414
414
  /* Use solid accent for solid panels, alpha accent for translucent panels */
415
415
  background-color: var(--accent-3);
@@ -482,7 +482,7 @@
482
482
 
483
483
  /* Surface variant - transparent with accent border (previously outline) */
484
484
  .rt-SelectTrigger:where(.rt-variant-surface) {
485
- --select-trigger-border-width: 1px;
485
+ --select-trigger-border-width: var(--border-width-standard);
486
486
 
487
487
  background-color: transparent;
488
488
  box-shadow: inset 0 0 0 var(--select-trigger-border-width) var(--accent-7);
@@ -595,7 +595,7 @@
595
595
 
596
596
  /* Ghost variant - transparent until interaction */
597
597
  .rt-SelectTrigger:where(.rt-variant-ghost) {
598
- --select-trigger-border-width: 0px;
598
+ --select-trigger-border-width: var(--border-width-none);
599
599
 
600
600
  background-color: transparent;
601
601
  color: var(--accent-12);
@@ -635,6 +635,11 @@
635
635
  background-color: var(--accent-a2);
636
636
  backdrop-filter: var(--backdrop-filter-components);
637
637
  }
638
+
639
+ /* Disable backdrop-filter when inside elements that already have backdrop-filter */
640
+ :where(.rt-PopoverContent, .rt-BaseDialogContent, .rt-BaseMenuContent, .rt-DropdownMenuContent, .rt-ContextMenuContent, .rt-AlertDialogContent, .rt-HoverCardContent, .rt-TooltipContent, .rt-Card) & {
641
+ backdrop-filter: none !important;
642
+ }
638
643
  }
639
644
  }
640
645
  &:where([data-state='open']) {
@@ -644,6 +649,11 @@
644
649
  background-color: var(--accent-a2);
645
650
  backdrop-filter: var(--backdrop-filter-components);
646
651
  }
652
+
653
+ /* Disable backdrop-filter when inside elements that already have backdrop-filter */
654
+ :where(.rt-PopoverContent, .rt-BaseDialogContent, .rt-BaseMenuContent, .rt-DropdownMenuContent, .rt-ContextMenuContent, .rt-AlertDialogContent, .rt-HoverCardContent, .rt-TooltipContent, .rt-Card) & {
655
+ backdrop-filter: none !important;
656
+ }
647
657
  }
648
658
  &:where(:focus-visible) {
649
659
  outline-color: var(--accent-8);
@@ -7,7 +7,7 @@
7
7
  flex-grow: 1;
8
8
 
9
9
  border-radius: max(
10
- calc(var(--radius-factor) * var(--slider-track-size) / 3),
10
+ calc(var(--radius-factor) * var(--slider-track-size) / var(--slider-track-radius-factor)),
11
11
  calc(var(--radius-factor) * var(--radius-thumb))
12
12
  );
13
13
 
@@ -47,11 +47,11 @@
47
47
  border-radius: inherit;
48
48
 
49
49
  &:where([data-orientation='horizontal']) {
50
- height: 100%;
50
+ height: var(--position-full);
51
51
  }
52
52
 
53
53
  &:where([data-orientation='vertical']) {
54
- width: 100%;
54
+ width: var(--position-full);
55
55
  }
56
56
  }
57
57
 
@@ -67,10 +67,10 @@
67
67
  content: '';
68
68
  position: absolute;
69
69
  z-index: -1;
70
- width: calc(var(--slider-thumb-size) * 3);
71
- height: calc(var(--slider-thumb-size) * 3);
72
- top: 50%;
73
- left: 50%;
70
+ width: calc(var(--slider-thumb-size) * var(--slider-thumb-hit-area-multiplier));
71
+ height: calc(var(--slider-thumb-size) * var(--slider-thumb-hit-area-multiplier));
72
+ top: var(--position-center);
73
+ left: var(--position-center);
74
74
  transform: translate(-50%, -50%);
75
75
  }
76
76
 
@@ -78,7 +78,7 @@
78
78
  &::after {
79
79
  content: '';
80
80
  position: absolute;
81
- inset: calc(-0.25 * var(--slider-track-size));
81
+ inset: calc(var(--slider-thumb-inset-factor) * var(--slider-track-size) * -1);
82
82
  background-color: white;
83
83
  border-radius: max(var(--radius-1), var(--radius-thumb));
84
84
  box-shadow: var(--slider-thumb-box-shadow);
@@ -86,7 +86,7 @@
86
86
  }
87
87
 
88
88
  &:where(:focus-visible)::after {
89
- box-shadow: var(--slider-thumb-box-shadow), 0 0 0 3px var(--accent-3), 0 0 0 5px var(--focus-8);
89
+ box-shadow: var(--slider-thumb-box-shadow), 0 0 0 var(--slider-focus-ring-inner) var(--accent-3), 0 0 0 var(--slider-focus-ring-outer) var(--focus-8);
90
90
  }
91
91
 
92
92
  &:where(:active) {
@@ -103,13 +103,13 @@
103
103
  @breakpoints {
104
104
  .rt-SliderRoot {
105
105
  &:where(.rt-r-size-1) {
106
- --slider-track-size: calc(var(--space-2) * 0.75);
106
+ --slider-track-size: calc(var(--space-2) * var(--size-multiplier-small));
107
107
  }
108
108
  &:where(.rt-r-size-2) {
109
109
  --slider-track-size: var(--space-2);
110
110
  }
111
111
  &:where(.rt-r-size-3) {
112
- --slider-track-size: calc(var(--space-2) * 1.25);
112
+ --slider-track-size: calc(var(--space-2) * var(--size-multiplier-large));
113
113
  }
114
114
  }
115
115
  }
@@ -125,17 +125,17 @@
125
125
  .rt-SliderRoot:where(.rt-variant-surface) {
126
126
  & :where(.rt-SliderTrack) {
127
127
  background-color: var(--gray-a3);
128
- box-shadow: inset 0 0 0 1px var(--gray-a5);
128
+ box-shadow: inset 0 0 0 var(--border-width-standard) var(--gray-a5);
129
129
 
130
130
  &:where([data-disabled]) {
131
- box-shadow: inset 0 0 0 1px var(--gray-a4);
131
+ box-shadow: inset 0 0 0 var(--border-width-standard) var(--gray-a4);
132
132
  }
133
133
  }
134
134
 
135
135
  & :where(.rt-SliderRange) {
136
136
  background-color: var(--accent-track);
137
137
  background-image: var(--slider-range-high-contrast-background-image);
138
- box-shadow: inset 0 0 0 1px var(--gray-a5);
138
+ box-shadow: inset 0 0 0 var(--border-width-standard) var(--gray-a5);
139
139
  }
140
140
 
141
141
  & :where(.rt-SliderThumb) {
@@ -160,21 +160,21 @@
160
160
  inset: 0;
161
161
  position: absolute;
162
162
  border-radius: inherit;
163
- box-shadow: var(--shadow-1);
163
+ box-shadow: var(--classic-inset-shadow-dark);
164
164
  }
165
165
  &:where([data-disabled])::before {
166
- opacity: 0.5;
166
+ opacity: var(--opacity-disabled);
167
167
  }
168
168
  }
169
169
 
170
170
  & :where(.rt-SliderRange) {
171
171
  background-color: var(--accent-track);
172
172
  background-image: var(--slider-range-high-contrast-background-image);
173
- box-shadow: inset 0 0 0 1px var(--gray-a3), inset 0 0 0 1px var(--accent-a4), inset 0 0 0 1px var(--black-a1),
174
- inset 0 1.5px 2px 0 var(--black-a2);
173
+ box-shadow: inset 0 0 0 var(--border-width-standard) var(--gray-a3), inset 0 0 0 var(--border-width-standard) var(--accent-a4), inset 0 0 0 var(--border-width-standard) var(--black-a1),
174
+ inset 0 var(--slider-classic-inset-offset) 2px 0 var(--black-a2);
175
175
 
176
176
  &:where(.rt-high-contrast) {
177
- box-shadow: inset 0 0 0 1px var(--gray-a3), inset 0 0 0 1px var(--black-a2), inset 0 1.5px 2px 0 var(--black-a2);
177
+ box-shadow: inset 0 0 0 var(--border-width-standard) var(--gray-a3), inset 0 0 0 var(--border-width-standard) var(--black-a2), inset 0 var(--slider-classic-inset-offset) 2px 0 var(--black-a2);
178
178
  }
179
179
  }
180
180
 
@@ -197,21 +197,21 @@
197
197
  &::before {
198
198
  background-image: linear-gradient(to right, var(--accent-track) 40%, transparent 60%);
199
199
  background-color: var(--gray-a4);
200
- box-shadow: var(--shadow-1);
200
+ box-shadow: var(--classic-inset-shadow-dark);
201
201
  }
202
202
  &:where([data-state='unchecked']:active)::before {
203
203
  background-color: var(--gray-a5);
204
204
  }
205
205
  &:where([data-state='checked'])::before {
206
- box-shadow: inset 0 0 0 1px var(--gray-a3), inset 0 0 0 1px var(--accent-a4), inset 0 0 0 1px var(--black-a1),
207
- inset 0 1.5px 2px 0 var(--black-a2);
206
+ box-shadow: inset 0 0 0 var(--border-width-standard) var(--gray-a3), inset 0 0 0 var(--border-width-standard) var(--accent-a4), inset 0 0 0 var(--border-width-standard) var(--black-a1),
207
+ inset 0 var(--slider-classic-inset-offset) 2px 0 var(--black-a2);
208
208
  }
209
209
  &:where([data-state='checked']:active)::before {
210
210
  filter: var(--switch-surface-checked-active-filter);
211
211
  }
212
212
  &:where(.rt-high-contrast) {
213
213
  &::before {
214
- box-shadow: inset 0 0 0 1px var(--gray-a3), inset 0 0 0 1px var(--black-a2), inset 0 1.5px 2px 0 var(--black-a2);
214
+ box-shadow: inset 0 0 0 var(--border-width-standard) var(--gray-a3), inset 0 0 0 var(--border-width-standard) var(--black-a2), inset 0 var(--slider-classic-inset-offset) 2px 0 var(--black-a2);
215
215
 
216
216
  /* prettier-ignore */
217
217
  background-image:
@@ -229,8 +229,8 @@
229
229
  filter: none;
230
230
  background-image: none;
231
231
  background-color: var(--gray-a5);
232
- box-shadow: var(--shadow-1);
233
- opacity: 0.5;
232
+ box-shadow: var(--classic-inset-shadow-dark);
233
+ opacity: var(--opacity-disabled);
234
234
  }
235
235
  }
236
236
 
@@ -209,11 +209,11 @@
209
209
 
210
210
  /* 3D inset effect - same as TextField */
211
211
  /* prettier-ignore */
212
- box-shadow:
213
- inset 0 var(--classic-border-width) calc(var(--classic-shadow-blur-small) / 1.5) var(--gray-a3),
214
- inset 0 calc(-1 * var(--classic-border-width)) var(--gray-a1),
215
- inset 0 calc(var(--classic-border-width) * 2) calc(var(--classic-shadow-blur-medium) / 3) var(--gray-a2),
216
- 0 0 0 var(--classic-border-width) var(--gray-a5);
212
+ box-shadow:
213
+ inset 0 var(--classic-border-width) calc(var(--classic-shadow-blur-small) / 1.5) var(--gray-a4),
214
+ inset 0 calc(-1 * var(--classic-border-width)) var(--gray-a2),
215
+ inset 0 calc(var(--classic-border-width) * 2) calc(var(--classic-shadow-blur-medium) / 3) var(--gray-a3),
216
+ 0 0 0 var(--classic-border-width) var(--gray-a5);
217
217
 
218
218
  /* Theme-level translucent override */
219
219
  :where([data-panel-background='translucent']) & {
@@ -235,11 +235,11 @@
235
235
  @media (hover: hover) {
236
236
  &:where(:hover:not(:has(.rt-TextAreaInput:focus))) {
237
237
  /* prettier-ignore */
238
- box-shadow:
239
- inset 0 calc(var(--classic-border-width) / 1.5) calc(var(--classic-shadow-blur-small) / 2) var(--gray-a2),
240
- inset 0 calc(-1 * var(--classic-border-width) / 1.5) var(--gray-a1),
241
- inset 0 var(--classic-border-width) calc(var(--classic-shadow-blur-medium) / 4) var(--gray-a2),
242
- 0 0 0 var(--classic-border-width) var(--gray-a6);
238
+ box-shadow:
239
+ inset 0 calc(var(--classic-border-width) / 1.5) calc(var(--classic-shadow-blur-small) / 2) var(--gray-a3),
240
+ inset 0 calc(-1 * var(--classic-border-width) / 1.5) var(--gray-a2),
241
+ inset 0 var(--classic-border-width) calc(var(--classic-shadow-blur-medium) / 4) var(--gray-a3),
242
+ 0 0 0 var(--classic-border-width) var(--gray-a6);
243
243
  }
244
244
  }
245
245
 
@@ -247,7 +247,7 @@
247
247
  &:where(:has(.rt-TextAreaInput:focus)) {
248
248
  /* prettier-ignore */
249
249
  box-shadow:
250
- inset 0 calc(var(--classic-border-width) / 2) calc(var(--classic-shadow-blur-small) / 3) var(--gray-a1),
250
+ inset 0 calc(var(--classic-border-width) / 2) calc(var(--classic-shadow-blur-small) / 3) var(--gray-a2),
251
251
  0 0 0 2px var(--focus-8);
252
252
  }
253
253
 
@@ -383,6 +383,11 @@
383
383
  backdrop-filter: var(--backdrop-filter-components);
384
384
  --backdrop-filter-components: blur(var(--backdrop-blur-components));
385
385
  }
386
+
387
+ /* Disable backdrop-filter when inside elements that already have backdrop-filter */
388
+ :where(.rt-PopoverContent, .rt-BaseDialogContent, .rt-BaseMenuContent, .rt-DropdownMenuContent, .rt-ContextMenuContent, .rt-AlertDialogContent, .rt-HoverCardContent, .rt-TooltipContent, .rt-Card) & {
389
+ backdrop-filter: none !important;
390
+ }
386
391
  }
387
392
  }
388
393
 
@@ -407,6 +412,11 @@
407
412
  background-color: var(--accent-a2);
408
413
  backdrop-filter: var(--backdrop-filter-components);
409
414
  }
415
+
416
+ /* Disable backdrop-filter when inside elements that already have backdrop-filter */
417
+ :where(.rt-PopoverContent, .rt-BaseDialogContent, .rt-BaseMenuContent, .rt-DropdownMenuContent, .rt-ContextMenuContent, .rt-AlertDialogContent, .rt-HoverCardContent, .rt-TooltipContent, .rt-Card) & {
418
+ backdrop-filter: none !important;
419
+ }
410
420
  }
411
421
 
412
422
  /* prettier-ignore */
@@ -476,6 +486,11 @@
476
486
  backdrop-filter: var(--backdrop-filter-components);
477
487
  --backdrop-filter-components: blur(var(--backdrop-blur-components));
478
488
  }
489
+
490
+ /* Disable backdrop-filter when inside elements that already have backdrop-filter */
491
+ :where(.rt-PopoverContent, .rt-BaseDialogContent, .rt-BaseMenuContent, .rt-DropdownMenuContent, .rt-ContextMenuContent, .rt-AlertDialogContent, .rt-HoverCardContent, .rt-TooltipContent, .rt-Card) & {
492
+ backdrop-filter: none !important;
493
+ }
479
494
  }
480
495
  }
481
496
 
@@ -504,6 +519,11 @@
504
519
  box-shadow: inset 0 0 0 var(--text-area-border-width) var(--accent-a8);
505
520
  backdrop-filter: var(--backdrop-filter-components);
506
521
  }
522
+
523
+ /* Disable backdrop-filter when inside elements that already have backdrop-filter */
524
+ :where(.rt-PopoverContent, .rt-BaseDialogContent, .rt-BaseMenuContent, .rt-DropdownMenuContent, .rt-ContextMenuContent, .rt-AlertDialogContent, .rt-HoverCardContent, .rt-TooltipContent, .rt-Card) & {
525
+ backdrop-filter: none !important;
526
+ }
507
527
  }
508
528
 
509
529
  /* prettier-ignore */