@kushagradhawan/kookie-ui 0.1.17 → 0.1.19

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 (276) hide show
  1. package/components.css +3730 -1072
  2. package/dist/cjs/components/_internal/base-button.d.ts.map +1 -1
  3. package/dist/cjs/components/_internal/base-button.js +1 -1
  4. package/dist/cjs/components/_internal/base-button.js.map +3 -3
  5. package/dist/cjs/components/_internal/base-button.props.d.ts +9 -0
  6. package/dist/cjs/components/_internal/base-button.props.d.ts.map +1 -1
  7. package/dist/cjs/components/_internal/base-button.props.js +1 -1
  8. package/dist/cjs/components/_internal/base-button.props.js.map +3 -3
  9. package/dist/cjs/components/_internal/base-menu.props.d.ts +5 -0
  10. package/dist/cjs/components/_internal/base-menu.props.d.ts.map +1 -1
  11. package/dist/cjs/components/_internal/base-menu.props.js +1 -1
  12. package/dist/cjs/components/_internal/base-menu.props.js.map +3 -3
  13. package/dist/cjs/components/_internal/base-tab-list.props.d.ts +5 -0
  14. package/dist/cjs/components/_internal/base-tab-list.props.d.ts.map +1 -1
  15. package/dist/cjs/components/_internal/base-tab-list.props.js +1 -1
  16. package/dist/cjs/components/_internal/base-tab-list.props.js.map +3 -3
  17. package/dist/cjs/components/alert-dialog.d.ts.map +1 -1
  18. package/dist/cjs/components/alert-dialog.js +1 -1
  19. package/dist/cjs/components/alert-dialog.js.map +3 -3
  20. package/dist/cjs/components/avatar.d.ts.map +1 -1
  21. package/dist/cjs/components/avatar.js +1 -1
  22. package/dist/cjs/components/avatar.js.map +3 -3
  23. package/dist/cjs/components/avatar.props.d.ts +6 -1
  24. package/dist/cjs/components/avatar.props.d.ts.map +1 -1
  25. package/dist/cjs/components/avatar.props.js +1 -1
  26. package/dist/cjs/components/avatar.props.js.map +3 -3
  27. package/dist/cjs/components/badge.d.ts.map +1 -1
  28. package/dist/cjs/components/badge.js +1 -1
  29. package/dist/cjs/components/badge.js.map +3 -3
  30. package/dist/cjs/components/badge.props.d.ts +6 -1
  31. package/dist/cjs/components/badge.props.d.ts.map +1 -1
  32. package/dist/cjs/components/badge.props.js +1 -1
  33. package/dist/cjs/components/badge.props.js.map +2 -2
  34. package/dist/cjs/components/callout.d.ts.map +1 -1
  35. package/dist/cjs/components/callout.js +1 -1
  36. package/dist/cjs/components/callout.js.map +3 -3
  37. package/dist/cjs/components/callout.props.d.ts +5 -0
  38. package/dist/cjs/components/callout.props.d.ts.map +1 -1
  39. package/dist/cjs/components/callout.props.js +1 -1
  40. package/dist/cjs/components/callout.props.js.map +3 -3
  41. package/dist/cjs/components/card.d.ts.map +1 -1
  42. package/dist/cjs/components/card.js +1 -1
  43. package/dist/cjs/components/card.js.map +3 -3
  44. package/dist/cjs/components/card.props.d.ts +11 -2
  45. package/dist/cjs/components/card.props.d.ts.map +1 -1
  46. package/dist/cjs/components/card.props.js +1 -1
  47. package/dist/cjs/components/card.props.js.map +3 -3
  48. package/dist/cjs/components/context-menu.d.ts.map +1 -1
  49. package/dist/cjs/components/context-menu.js +1 -1
  50. package/dist/cjs/components/context-menu.js.map +3 -3
  51. package/dist/cjs/components/dialog.d.ts.map +1 -1
  52. package/dist/cjs/components/dialog.js +1 -1
  53. package/dist/cjs/components/dialog.js.map +3 -3
  54. package/dist/cjs/components/dialog.props.d.ts +5 -0
  55. package/dist/cjs/components/dialog.props.d.ts.map +1 -1
  56. package/dist/cjs/components/dialog.props.js +1 -1
  57. package/dist/cjs/components/dialog.props.js.map +3 -3
  58. package/dist/cjs/components/dropdown-menu.d.ts.map +1 -1
  59. package/dist/cjs/components/dropdown-menu.js +1 -1
  60. package/dist/cjs/components/dropdown-menu.js.map +3 -3
  61. package/dist/cjs/components/image.d.ts +6 -1
  62. package/dist/cjs/components/image.d.ts.map +1 -1
  63. package/dist/cjs/components/image.js +1 -1
  64. package/dist/cjs/components/image.js.map +3 -3
  65. package/dist/cjs/components/popover.d.ts.map +1 -1
  66. package/dist/cjs/components/popover.js +1 -1
  67. package/dist/cjs/components/popover.js.map +3 -3
  68. package/dist/cjs/components/popover.props.d.ts +5 -0
  69. package/dist/cjs/components/popover.props.d.ts.map +1 -1
  70. package/dist/cjs/components/popover.props.js +1 -1
  71. package/dist/cjs/components/popover.props.js.map +3 -3
  72. package/dist/cjs/components/select.d.ts.map +1 -1
  73. package/dist/cjs/components/select.js +1 -1
  74. package/dist/cjs/components/select.js.map +3 -3
  75. package/dist/cjs/components/select.props.d.ts +6 -1
  76. package/dist/cjs/components/select.props.d.ts.map +1 -1
  77. package/dist/cjs/components/select.props.js +1 -1
  78. package/dist/cjs/components/select.props.js.map +2 -2
  79. package/dist/cjs/components/sidebar.d.ts +17 -6
  80. package/dist/cjs/components/sidebar.d.ts.map +1 -1
  81. package/dist/cjs/components/sidebar.js +1 -1
  82. package/dist/cjs/components/sidebar.js.map +3 -3
  83. package/dist/cjs/components/sidebar.props.d.ts +5 -0
  84. package/dist/cjs/components/sidebar.props.d.ts.map +1 -1
  85. package/dist/cjs/components/sidebar.props.js +1 -1
  86. package/dist/cjs/components/sidebar.props.js.map +2 -2
  87. package/dist/cjs/components/tabs.d.ts.map +1 -1
  88. package/dist/cjs/components/tabs.js +1 -1
  89. package/dist/cjs/components/tabs.js.map +3 -3
  90. package/dist/cjs/components/text-area.d.ts.map +1 -1
  91. package/dist/cjs/components/text-area.js +1 -1
  92. package/dist/cjs/components/text-area.js.map +3 -3
  93. package/dist/cjs/components/text-area.props.d.ts +6 -1
  94. package/dist/cjs/components/text-area.props.d.ts.map +1 -1
  95. package/dist/cjs/components/text-area.props.js +1 -1
  96. package/dist/cjs/components/text-area.props.js.map +3 -3
  97. package/dist/cjs/components/text-field.d.ts.map +1 -1
  98. package/dist/cjs/components/text-field.js +2 -2
  99. package/dist/cjs/components/text-field.js.map +3 -3
  100. package/dist/cjs/components/text-field.props.d.ts +6 -1
  101. package/dist/cjs/components/text-field.props.d.ts.map +1 -1
  102. package/dist/cjs/components/text-field.props.js +1 -1
  103. package/dist/cjs/components/text-field.props.js.map +3 -3
  104. package/dist/cjs/components/theme.d.ts.map +1 -1
  105. package/dist/cjs/components/theme.js +1 -1
  106. package/dist/cjs/components/theme.js.map +2 -2
  107. package/dist/cjs/helpers/map-prop-values.js +1 -1
  108. package/dist/cjs/helpers/map-prop-values.js.map +2 -2
  109. package/dist/esm/components/_internal/base-button.d.ts.map +1 -1
  110. package/dist/esm/components/_internal/base-button.js +1 -1
  111. package/dist/esm/components/_internal/base-button.js.map +3 -3
  112. package/dist/esm/components/_internal/base-button.props.d.ts +9 -0
  113. package/dist/esm/components/_internal/base-button.props.d.ts.map +1 -1
  114. package/dist/esm/components/_internal/base-button.props.js +1 -1
  115. package/dist/esm/components/_internal/base-button.props.js.map +3 -3
  116. package/dist/esm/components/_internal/base-menu.props.d.ts +5 -0
  117. package/dist/esm/components/_internal/base-menu.props.d.ts.map +1 -1
  118. package/dist/esm/components/_internal/base-menu.props.js +1 -1
  119. package/dist/esm/components/_internal/base-menu.props.js.map +3 -3
  120. package/dist/esm/components/_internal/base-tab-list.props.d.ts +5 -0
  121. package/dist/esm/components/_internal/base-tab-list.props.d.ts.map +1 -1
  122. package/dist/esm/components/_internal/base-tab-list.props.js +1 -1
  123. package/dist/esm/components/_internal/base-tab-list.props.js.map +3 -3
  124. package/dist/esm/components/alert-dialog.d.ts.map +1 -1
  125. package/dist/esm/components/alert-dialog.js +1 -1
  126. package/dist/esm/components/alert-dialog.js.map +3 -3
  127. package/dist/esm/components/avatar.d.ts.map +1 -1
  128. package/dist/esm/components/avatar.js +1 -1
  129. package/dist/esm/components/avatar.js.map +3 -3
  130. package/dist/esm/components/avatar.props.d.ts +6 -1
  131. package/dist/esm/components/avatar.props.d.ts.map +1 -1
  132. package/dist/esm/components/avatar.props.js +1 -1
  133. package/dist/esm/components/avatar.props.js.map +3 -3
  134. package/dist/esm/components/badge.d.ts.map +1 -1
  135. package/dist/esm/components/badge.js +1 -1
  136. package/dist/esm/components/badge.js.map +3 -3
  137. package/dist/esm/components/badge.props.d.ts +6 -1
  138. package/dist/esm/components/badge.props.d.ts.map +1 -1
  139. package/dist/esm/components/badge.props.js +1 -1
  140. package/dist/esm/components/badge.props.js.map +2 -2
  141. package/dist/esm/components/callout.d.ts.map +1 -1
  142. package/dist/esm/components/callout.js +1 -1
  143. package/dist/esm/components/callout.js.map +3 -3
  144. package/dist/esm/components/callout.props.d.ts +5 -0
  145. package/dist/esm/components/callout.props.d.ts.map +1 -1
  146. package/dist/esm/components/callout.props.js +1 -1
  147. package/dist/esm/components/callout.props.js.map +3 -3
  148. package/dist/esm/components/card.d.ts.map +1 -1
  149. package/dist/esm/components/card.js +1 -1
  150. package/dist/esm/components/card.js.map +3 -3
  151. package/dist/esm/components/card.props.d.ts +11 -2
  152. package/dist/esm/components/card.props.d.ts.map +1 -1
  153. package/dist/esm/components/card.props.js +1 -1
  154. package/dist/esm/components/card.props.js.map +3 -3
  155. package/dist/esm/components/context-menu.d.ts.map +1 -1
  156. package/dist/esm/components/context-menu.js +1 -1
  157. package/dist/esm/components/context-menu.js.map +3 -3
  158. package/dist/esm/components/dialog.d.ts.map +1 -1
  159. package/dist/esm/components/dialog.js +1 -1
  160. package/dist/esm/components/dialog.js.map +3 -3
  161. package/dist/esm/components/dialog.props.d.ts +5 -0
  162. package/dist/esm/components/dialog.props.d.ts.map +1 -1
  163. package/dist/esm/components/dialog.props.js +1 -1
  164. package/dist/esm/components/dialog.props.js.map +3 -3
  165. package/dist/esm/components/dropdown-menu.d.ts.map +1 -1
  166. package/dist/esm/components/dropdown-menu.js +1 -1
  167. package/dist/esm/components/dropdown-menu.js.map +3 -3
  168. package/dist/esm/components/image.d.ts +6 -1
  169. package/dist/esm/components/image.d.ts.map +1 -1
  170. package/dist/esm/components/image.js +1 -1
  171. package/dist/esm/components/image.js.map +3 -3
  172. package/dist/esm/components/popover.d.ts.map +1 -1
  173. package/dist/esm/components/popover.js +1 -1
  174. package/dist/esm/components/popover.js.map +3 -3
  175. package/dist/esm/components/popover.props.d.ts +5 -0
  176. package/dist/esm/components/popover.props.d.ts.map +1 -1
  177. package/dist/esm/components/popover.props.js +1 -1
  178. package/dist/esm/components/popover.props.js.map +3 -3
  179. package/dist/esm/components/select.d.ts.map +1 -1
  180. package/dist/esm/components/select.js +1 -1
  181. package/dist/esm/components/select.js.map +3 -3
  182. package/dist/esm/components/select.props.d.ts +6 -1
  183. package/dist/esm/components/select.props.d.ts.map +1 -1
  184. package/dist/esm/components/select.props.js +1 -1
  185. package/dist/esm/components/select.props.js.map +2 -2
  186. package/dist/esm/components/sidebar.d.ts +17 -6
  187. package/dist/esm/components/sidebar.d.ts.map +1 -1
  188. package/dist/esm/components/sidebar.js +1 -1
  189. package/dist/esm/components/sidebar.js.map +3 -3
  190. package/dist/esm/components/sidebar.props.d.ts +5 -0
  191. package/dist/esm/components/sidebar.props.d.ts.map +1 -1
  192. package/dist/esm/components/sidebar.props.js +1 -1
  193. package/dist/esm/components/sidebar.props.js.map +2 -2
  194. package/dist/esm/components/tabs.d.ts.map +1 -1
  195. package/dist/esm/components/tabs.js +1 -1
  196. package/dist/esm/components/tabs.js.map +3 -3
  197. package/dist/esm/components/text-area.d.ts.map +1 -1
  198. package/dist/esm/components/text-area.js +1 -1
  199. package/dist/esm/components/text-area.js.map +3 -3
  200. package/dist/esm/components/text-area.props.d.ts +6 -1
  201. package/dist/esm/components/text-area.props.d.ts.map +1 -1
  202. package/dist/esm/components/text-area.props.js +1 -1
  203. package/dist/esm/components/text-area.props.js.map +3 -3
  204. package/dist/esm/components/text-field.d.ts.map +1 -1
  205. package/dist/esm/components/text-field.js +2 -2
  206. package/dist/esm/components/text-field.js.map +3 -3
  207. package/dist/esm/components/text-field.props.d.ts +6 -1
  208. package/dist/esm/components/text-field.props.d.ts.map +1 -1
  209. package/dist/esm/components/text-field.props.js +1 -1
  210. package/dist/esm/components/text-field.props.js.map +3 -3
  211. package/dist/esm/components/theme.d.ts.map +1 -1
  212. package/dist/esm/components/theme.js +1 -1
  213. package/dist/esm/components/theme.js.map +2 -2
  214. package/dist/esm/helpers/map-prop-values.js +1 -1
  215. package/dist/esm/helpers/map-prop-values.js.map +2 -2
  216. package/package.json +1 -1
  217. package/src/components/_internal/base-button.css +518 -110
  218. package/src/components/_internal/base-button.props.ts +5 -0
  219. package/src/components/_internal/base-button.tsx +4 -0
  220. package/src/components/_internal/base-card.css +59 -11
  221. package/src/components/_internal/base-dialog.css +26 -9
  222. package/src/components/_internal/base-menu.css +192 -21
  223. package/src/components/_internal/base-menu.props.ts +7 -0
  224. package/src/components/_internal/base-tab-list.css +56 -5
  225. package/src/components/_internal/base-tab-list.props.ts +3 -0
  226. package/src/components/alert-dialog.tsx +22 -7
  227. package/src/components/animations.css +31 -0
  228. package/src/components/avatar.css +436 -9
  229. package/src/components/avatar.props.tsx +4 -1
  230. package/src/components/avatar.tsx +19 -6
  231. package/src/components/badge.css +222 -7
  232. package/src/components/badge.props.tsx +3 -1
  233. package/src/components/badge.tsx +3 -2
  234. package/src/components/button.css +17 -17
  235. package/src/components/callout.css +75 -6
  236. package/src/components/callout.props.tsx +3 -0
  237. package/src/components/callout.tsx +6 -5
  238. package/src/components/card.css +361 -44
  239. package/src/components/card.props.tsx +7 -2
  240. package/src/components/card.tsx +7 -1
  241. package/src/components/context-menu.tsx +47 -22
  242. package/src/components/dialog.props.tsx +3 -0
  243. package/src/components/dialog.tsx +22 -7
  244. package/src/components/dropdown-menu.css +10 -10
  245. package/src/components/dropdown-menu.tsx +37 -11
  246. package/src/components/icon-button.css +36 -8
  247. package/src/components/image.tsx +92 -73
  248. package/src/components/kbd.css +122 -54
  249. package/src/components/popover.css +22 -3
  250. package/src/components/popover.props.tsx +3 -0
  251. package/src/components/popover.tsx +15 -8
  252. package/src/components/select.css +386 -95
  253. package/src/components/select.props.tsx +7 -1
  254. package/src/components/select.tsx +21 -13
  255. package/src/components/sidebar.css +201 -86
  256. package/src/components/sidebar.props.tsx +15 -3
  257. package/src/components/sidebar.tsx +313 -242
  258. package/src/components/tabs.css +3 -1
  259. package/src/components/tabs.tsx +8 -3
  260. package/src/components/text-area.css +323 -32
  261. package/src/components/text-area.props.tsx +4 -1
  262. package/src/components/text-area.tsx +3 -2
  263. package/src/components/text-field.css +336 -15
  264. package/src/components/text-field.props.tsx +4 -1
  265. package/src/components/text-field.tsx +5 -7
  266. package/src/components/theme.tsx +11 -9
  267. package/src/helpers/map-prop-values.ts +1 -1
  268. package/src/styles/tokens/color.css +19 -5
  269. package/src/styles/tokens/constants.css +118 -0
  270. package/src/styles/tokens/index.css +1 -0
  271. package/src/styles/tokens/radius.css +9 -6
  272. package/src/styles/tokens/shadow.css +10 -10
  273. package/src/styles/tokens/transition.css +33 -1
  274. package/styles.css +3846 -1089
  275. package/tokens/base.css +51 -22
  276. package/tokens.css +133 -34
@@ -7,6 +7,7 @@ import type { PropDef } from '../../props/prop-def.js';
7
7
 
8
8
  const sizes = ['1', '2', '3', '4'] as const;
9
9
  const variants = ['classic', 'solid', 'soft', 'surface', 'outline', 'ghost'] as const;
10
+ const panelBackgrounds = ['solid', 'translucent'] as const;
10
11
 
11
12
  const baseButtonPropDefs = {
12
13
  ...asChildPropDef,
@@ -17,11 +18,15 @@ const baseButtonPropDefs = {
17
18
  ...radiusPropDef,
18
19
  loading: { type: 'boolean', className: 'rt-loading', default: false },
19
20
  fullWidth: { type: 'boolean', className: 'rt-full-width', default: false },
21
+ panelBackground: { type: 'enum', values: panelBackgrounds, default: undefined },
22
+ flush: { type: 'boolean', default: false },
20
23
  } satisfies {
21
24
  size: PropDef<(typeof sizes)[number]>;
22
25
  variant: PropDef<(typeof variants)[number]>;
23
26
  loading: PropDef<boolean>;
24
27
  fullWidth: PropDef<boolean>;
28
+ panelBackground: PropDef<(typeof panelBackgrounds)[number] | undefined>;
29
+ flush: PropDef<boolean>;
25
30
  };
26
31
 
27
32
  export { baseButtonPropDefs };
@@ -35,6 +35,8 @@ const BaseButton = React.forwardRef<BaseButtonElement, BaseButtonProps>((props,
35
35
  as,
36
36
  color,
37
37
  radius,
38
+ panelBackground,
39
+ flush,
38
40
  disabled = props.loading,
39
41
  ...baseButtonProps
40
42
  } = extractProps(props, baseButtonPropDefs, marginPropDefs);
@@ -65,6 +67,8 @@ const BaseButton = React.forwardRef<BaseButtonElement, BaseButtonProps>((props,
65
67
  data-disabled={disabled || undefined}
66
68
  data-accent-color={color}
67
69
  data-radius={radius}
70
+ data-panel-background={panelBackground}
71
+ data-flush={flush ? 'true' : undefined}
68
72
  {...baseButtonProps}
69
73
  {...accessibilityProps}
70
74
  ref={forwardedRef}
@@ -3,6 +3,7 @@
3
3
  position: relative;
4
4
  overflow: hidden;
5
5
  border-radius: var(--base-card-border-radius);
6
+ transition: var(--transition-card);
6
7
 
7
8
  /* Don't inherit typographic properties */
8
9
  font-family: var(--default-font-family);
@@ -70,9 +71,9 @@
70
71
  --base-card-surface-active-box-shadow: 0 0 0 1px var(--gray-a6);
71
72
 
72
73
  @supports (color: color-mix(in oklab, white, black)) {
73
- --base-card-surface-box-shadow: 0 0 0 1px color-mix(in oklab, var(--gray-a5), var(--gray-5) 25%);
74
- --base-card-surface-hover-box-shadow: 0 0 0 1px color-mix(in oklab, var(--gray-a7), var(--gray-7) 25%);
75
- --base-card-surface-active-box-shadow: 0 0 0 1px color-mix(in oklab, var(--gray-a6), var(--gray-6) 25%);
74
+ --base-card-surface-box-shadow: 0 0 0 1px color-mix(in oklab, var(--gray-a5), var(--gray-5) var(--color-mix-percentage-light));
75
+ --base-card-surface-hover-box-shadow: 0 0 0 1px color-mix(in oklab, var(--gray-a7), var(--gray-7) var(--color-mix-percentage-light));
76
+ --base-card-surface-active-box-shadow: 0 0 0 1px color-mix(in oklab, var(--gray-a6), var(--gray-6) var(--color-mix-percentage-light));
76
77
  }
77
78
  }
78
79
 
@@ -83,21 +84,68 @@
83
84
  /* * * * * * * * * * * * * * * * * * * */
84
85
 
85
86
  /*
86
- * Using standard shadow tokens for consistency across the design system.
87
- * Maps shadow variants to the standard --shadow-{1-6} tokens.
87
+ * Using the same elevated 3D effect as Button classic variant for consistency.
88
+ * Creates a sophisticated multi-layer shadow system with inset and outer shadows.
88
89
  */
89
90
 
90
91
  :where(.radix-themes) {
91
- --base-card-classic-box-shadow-outer: var(--shadow-2);
92
- --base-card-classic-hover-box-shadow-outer: var(--shadow-3);
93
- --base-card-classic-active-box-shadow-outer: var(--shadow-2);
92
+ /* Base state - elevated 3D effect (exact same structure as Button) */
93
+ --base-card-classic-box-shadow-outer:
94
+ inset 0 calc(-1 * var(--classic-border-width)) var(--classic-shadow-blur-large) var(--gray-a2),
95
+ inset 0 var(--classic-border-width) var(--white-a12),
96
+ inset 0 var(--classic-shadow-blur-medium) var(--classic-shadow-blur-large) var(--gray-a2),
97
+ inset 0 calc(-1 * var(--classic-border-width)) var(--gray-a6),
98
+ 0 0 0 var(--classic-border-width) var(--gray-a5),
99
+ 0 var(--classic-shadow-offset-y) var(--classic-shadow-blur-small) var(--gray-a7);
94
100
 
101
+ /* Hover state - enhanced elevation (exact same structure as Button) */
102
+ --base-card-classic-hover-box-shadow-outer:
103
+ inset 0 calc(-1 * var(--classic-border-width)) var(--classic-shadow-blur-large) var(--gray-a2),
104
+ inset 0 var(--classic-border-width) var(--white-a12),
105
+ inset 0 var(--classic-shadow-blur-medium) var(--classic-shadow-blur-large) var(--gray-a2),
106
+ inset 0 calc(-1 * var(--classic-border-width)) var(--gray-a6),
107
+ 0 0 0 var(--classic-border-width) var(--gray-a5),
108
+ 0 var(--classic-shadow-offset-y) var(--classic-shadow-blur-small) var(--gray-a7),
109
+ 0 0 0 var(--classic-border-width) var(--gray-a5);
110
+
111
+ /* Active state - pressed down effect (exact same structure as Button) */
112
+ --base-card-classic-active-box-shadow-outer:
113
+ inset 0 var(--classic-border-width) var(--black-a3),
114
+ 0 0 0 var(--classic-border-width) var(--gray-a7);
115
+
116
+ /* Dark mode overrides (exact same structure as Button) */
117
+ :where(.dark, .dark-theme) &,
118
+ :where(.dark, .dark-theme) :where(.radix-themes:not(.light, .light-theme)) {
119
+ --base-card-classic-box-shadow-outer:
120
+ inset 0 calc(-1 * var(--classic-border-width)) var(--classic-shadow-blur-large) var(--gray-a3),
121
+ inset 0 var(--classic-border-width) var(--gray-a11),
122
+ inset 0 var(--classic-shadow-blur-medium) var(--classic-shadow-blur-large) var(--gray-a2),
123
+ inset 0 calc(-2 * var(--classic-border-width)) var(--black-a11),
124
+ 0 0 0 var(--classic-border-width-thick) var(--gray-a7),
125
+ 0 var(--classic-shadow-offset-y) var(--classic-shadow-blur-small) var(--black-a12);
126
+
127
+ --base-card-classic-hover-box-shadow-outer:
128
+ inset 0 calc(-1 * var(--classic-border-width)) var(--classic-shadow-blur-large) var(--gray-a3),
129
+ inset 0 var(--classic-border-width) var(--gray-a11),
130
+ inset 0 var(--classic-shadow-blur-medium) var(--classic-shadow-blur-large) var(--gray-a2),
131
+ inset 0 var(--classic-shadow-offset-negative) var(--black-a11),
132
+ 0 0 0 var(--classic-border-width-thick) var(--gray-a7),
133
+ 0 var(--classic-shadow-offset-y) var(--classic-shadow-blur-small) var(--black-a12),
134
+ 0 0 0 var(--classic-border-width) var(--gray-a5);
135
+
136
+ --base-card-classic-active-box-shadow-outer:
137
+ inset 0 var(--classic-border-width) var(--black-a3),
138
+ 0 0 0 var(--classic-border-width) var(--gray-a7);
139
+ }
140
+
141
+ /* Border color definitions (kept for compatibility) */
95
142
  --base-card-classic-border-color: var(--gray-a3);
96
143
  --base-card-classic-hover-border-color: var(--gray-a3);
97
144
  --base-card-classic-active-border-color: var(--gray-a4);
145
+
98
146
  @supports (color: color-mix(in oklab, white, black)) {
99
- --base-card-classic-border-color: color-mix(in oklab, var(--gray-a3), var(--gray-3) 25%);
100
- --base-card-classic-hover-border-color: color-mix(in oklab, var(--gray-a4), var(--gray-4) 25%);
101
- --base-card-classic-active-border-color: color-mix(in oklab, var(--gray-a3), var(--gray-3) 25%);
147
+ --base-card-classic-border-color: color-mix(in oklab, var(--gray-a3), var(--gray-3) var(--color-mix-percentage-light));
148
+ --base-card-classic-hover-border-color: color-mix(in oklab, var(--gray-a4), var(--gray-4) var(--color-mix-percentage-light));
149
+ --base-card-classic-active-border-color: color-mix(in oklab, var(--gray-a3), var(--gray-3) var(--color-mix-percentage-light));
102
150
  }
103
151
  }
@@ -50,9 +50,26 @@
50
50
  padding: var(--dialog-content-padding);
51
51
  box-sizing: border-box;
52
52
 
53
- background-color: var(--color-panel-solid);
53
+ /* Base state: use contextual dialog color that auto-resolves */
54
+ background-color: var(--color-dialog);
54
55
  box-shadow: var(--shadow-6);
55
56
  outline: none;
57
+
58
+ /* Theme-level backdrop filter for auto dialogs */
59
+ :where([data-panel-background='translucent']) & {
60
+ backdrop-filter: var(--backdrop-filter-dialog);
61
+ }
62
+
63
+ /* Component-level overrides (when panelBackground prop is explicitly set) */
64
+ &:where([data-panel-background='solid']) {
65
+ background-color: var(--color-dialog-solid);
66
+ backdrop-filter: none;
67
+ }
68
+
69
+ &:where([data-panel-background='translucent']) {
70
+ background-color: var(--color-dialog-translucent);
71
+ backdrop-filter: var(--backdrop-filter-dialog);
72
+ }
56
73
  }
57
74
 
58
75
  /***************************************************************************************************
@@ -64,20 +81,20 @@
64
81
  @breakpoints {
65
82
  .rt-BaseDialogContent {
66
83
  &:where(.rt-r-size-1) {
67
- --dialog-content-padding: var(--space-3);
68
- border-radius: var(--radius-4);
84
+ --dialog-content-padding: var(--space-4);
85
+ border-radius: var(--radius-5);
69
86
  }
70
87
  &:where(.rt-r-size-2) {
71
- --dialog-content-padding: var(--space-4);
72
- border-radius: var(--radius-4);
88
+ --dialog-content-padding: var(--space-5);
89
+ border-radius: var(--radius-6);
73
90
  }
74
91
  &:where(.rt-r-size-3) {
75
- --dialog-content-padding: var(--space-5);
76
- border-radius: var(--radius-5);
92
+ --dialog-content-padding: var(--space-6);
93
+ border-radius: var(--radius-7);
77
94
  }
78
95
  &:where(.rt-r-size-4) {
79
- --dialog-content-padding: var(--space-6);
80
- border-radius: var(--radius-5);
96
+ --dialog-content-padding: var(--space-7);
97
+ border-radius: var(--radius-8);
81
98
  }
82
99
  }
83
100
  }
@@ -8,7 +8,27 @@
8
8
  flex-direction: column;
9
9
  box-sizing: border-box;
10
10
  overflow: hidden;
11
- background-color: var(--base-menu-bg);
11
+
12
+ background-color: var(--color-panel);
13
+ backdrop-filter: var(--backdrop-filter-panel);
14
+ box-shadow: var(--shadow-5);
15
+ transition: var(--transition-background-blur);
16
+
17
+ /* Reduced motion support */
18
+ @media (prefers-reduced-motion: reduce) {
19
+ transition: none;
20
+ }
21
+
22
+ /* Component-level overrides (higher specificity) */
23
+ &:where([data-panel-background='solid']) {
24
+ background-color: var(--color-panel-solid);
25
+ backdrop-filter: none;
26
+ }
27
+
28
+ &:where([data-panel-background='translucent']) {
29
+ background-color: var(--color-panel-translucent);
30
+ backdrop-filter: var(--backdrop-filter-panel);
31
+ }
12
32
  }
13
33
 
14
34
  .rt-BaseMenuViewport {
@@ -37,6 +57,7 @@
37
57
  position: relative;
38
58
  outline: none;
39
59
  scroll-margin: var(--base-menu-content-padding) 0;
60
+ transition: var(--transition-menu);
40
61
 
41
62
  /* Fix sticky text highlighting after selection in Firefox */
42
63
  user-select: none;
@@ -46,6 +67,11 @@
46
67
  &:where([data-disabled]) {
47
68
  cursor: default;
48
69
  }
70
+
71
+ /* Reduced motion support */
72
+ @media (prefers-reduced-motion: reduce) {
73
+ transition: none;
74
+ }
49
75
  }
50
76
 
51
77
  .rt-BaseMenuShortcut {
@@ -53,6 +79,7 @@
53
79
  align-items: center;
54
80
  margin-left: auto;
55
81
  padding-left: var(--space-4);
82
+ margin-right: calc(-2px * var(--scaling)); /* Pulls closer to edge */
56
83
  }
57
84
 
58
85
  .rt-BaseMenuSubTriggerIcon {
@@ -96,7 +123,16 @@
96
123
  }
97
124
 
98
125
  .rt-BaseMenuArrow {
99
- fill: var(--base-menu-bg);
126
+ fill: var(--color-panel);
127
+
128
+ /* Component-level overrides (higher specificity) */
129
+ :where(.rt-BaseMenuContent[data-panel-background='solid']) & {
130
+ fill: var(--color-panel-solid);
131
+ }
132
+
133
+ :where(.rt-BaseMenuContent[data-panel-background='translucent']) & {
134
+ fill: var(--color-panel-translucent);
135
+ }
100
136
  }
101
137
 
102
138
  /***************************************************************************************************
@@ -108,7 +144,7 @@
108
144
  @breakpoints {
109
145
  .rt-BaseMenuContent {
110
146
  &:where(.rt-r-size-1) {
111
- --base-menu-content-padding: var(--space-1);
147
+ --base-menu-content-padding: var(--space-2);
112
148
  --base-menu-item-padding-left: calc(var(--space-5) / 1.2);
113
149
  --base-menu-item-padding-right: var(--space-2);
114
150
  --base-menu-item-padding-y: calc(var(--space-1) * 0.75);
@@ -116,6 +152,7 @@
116
152
  border-radius: var(--radius-3);
117
153
 
118
154
  & :where(.rt-BaseMenuItem) {
155
+ gap: var(--component-gap-2);
119
156
  font-size: var(--font-size-1);
120
157
  line-height: var(--line-height-1);
121
158
  letter-spacing: var(--letter-spacing-1);
@@ -123,8 +160,8 @@
123
160
 
124
161
  /* stylelint-disable-next-line selector-max-type */
125
162
  & :where(svg) {
126
- width: calc(var(--space-3) * 1.175);
127
- height: calc(var(--space-3) * 1.175);
163
+ width: var(--content-icon-size-1);
164
+ height: var(--content-icon-size-1);
128
165
  flex-shrink: 0;
129
166
  }
130
167
  }
@@ -136,8 +173,8 @@
136
173
  }
137
174
 
138
175
  & :where(.rt-BaseMenuItemIndicatorIcon, .rt-BaseMenuSubTriggerIcon) {
139
- width: calc(8px * var(--scaling));
140
- height: calc(8px * var(--scaling));
176
+ width: var(--indicator-icon-size-1);
177
+ height: var(--indicator-icon-size-1);
141
178
  }
142
179
 
143
180
  /* reset with :not:has so we still support browsers without :has */
@@ -150,14 +187,15 @@
150
187
  }
151
188
 
152
189
  &:where(.rt-r-size-2) {
153
- --base-menu-content-padding: var(--space-2);
190
+ --base-menu-content-padding: var(--space-3);
154
191
  --base-menu-item-padding-left: var(--space-3);
155
192
  --base-menu-item-padding-right: var(--space-3);
156
193
  --base-menu-item-padding-y: var(--space-1);
157
194
  --base-menu-item-height: var(--space-6);
158
- border-radius: var(--radius-4);
195
+ border-radius: var(--radius-5);
159
196
 
160
197
  & :where(.rt-BaseMenuItem) {
198
+ gap: var(--component-gap-3);
161
199
  font-size: var(--font-size-2);
162
200
  line-height: var(--line-height-2);
163
201
  letter-spacing: var(--letter-spacing-2);
@@ -165,8 +203,8 @@
165
203
 
166
204
  /* stylelint-disable-next-line selector-max-type */
167
205
  & :where(svg) {
168
- width: var(--space-4);
169
- height: var(--space-4);
206
+ width: var(--content-icon-size-2);
207
+ height: var(--content-icon-size-2);
170
208
  flex-shrink: 0;
171
209
  }
172
210
  }
@@ -178,8 +216,51 @@
178
216
  }
179
217
 
180
218
  & :where(.rt-BaseMenuItemIndicatorIcon, .rt-BaseMenuSubTriggerIcon) {
181
- width: calc(10px * var(--scaling));
182
- height: calc(10px * var(--scaling));
219
+ width: var(--indicator-icon-size-2);
220
+ height: var(--indicator-icon-size-2);
221
+ }
222
+
223
+ /* reset with :not:has so we still support browsers without :has */
224
+ &:where(:not(:has(.rt-BaseMenuCheckboxItem, .rt-BaseMenuRadioItem))) {
225
+ --base-menu-item-padding-left: var(--space-3);
226
+ }
227
+ &:where(:has(.rt-BaseMenuCheckboxItem, .rt-BaseMenuRadioItem)) {
228
+ --base-menu-item-padding-left: var(--space-5);
229
+ }
230
+ }
231
+
232
+ &:where(.rt-r-size-3) {
233
+ --base-menu-content-padding: var(--space-3);
234
+ --base-menu-item-padding-left: var(--space-3);
235
+ --base-menu-item-padding-right: var(--space-3);
236
+ --base-menu-item-padding-y: var(--space-1);
237
+ --base-menu-item-height: var(--space-6);
238
+ border-radius: var(--radius-6);
239
+
240
+ & :where(.rt-BaseMenuItem) {
241
+ gap: var(--component-gap-4);
242
+ font-size: var(--font-size-3);
243
+ line-height: var(--line-height-2);
244
+ letter-spacing: var(--letter-spacing-3);
245
+ border-radius: var(--radius-2);
246
+
247
+ /* stylelint-disable-next-line selector-max-type */
248
+ & :where(svg) {
249
+ width: var(--content-icon-size-2);
250
+ height: var(--content-icon-size-2);
251
+ flex-shrink: 0;
252
+ }
253
+ }
254
+
255
+ & :where(.rt-BaseMenuLabel) {
256
+ font-size: var(--font-size-2);
257
+ line-height: var(--line-height-2);
258
+ letter-spacing: var(--letter-spacing-2);
259
+ }
260
+
261
+ & :where(.rt-BaseMenuItemIndicatorIcon, .rt-BaseMenuSubTriggerIcon) {
262
+ width: var(--indicator-icon-size-2);
263
+ height: var(--indicator-icon-size-2);
183
264
  }
184
265
 
185
266
  /* reset with :not:has so we still support browsers without :has */
@@ -198,11 +279,6 @@
198
279
  * VARIANTS *
199
280
  * *
200
281
  ***************************************************************************************************/
201
-
202
- .rt-BaseMenuContent {
203
- --base-menu-bg: var(--color-panel-solid);
204
- box-shadow: var(--shadow-5);
205
- }
206
282
  .rt-BaseMenuItem:where([data-accent-color]) {
207
283
  color: var(--accent-a11);
208
284
  }
@@ -230,8 +306,46 @@
230
306
  /* solid */
231
307
 
232
308
  .rt-BaseMenuContent:where(.rt-variant-solid) {
309
+ & :where(.rt-BaseMenuSubTrigger) {
310
+ transition: var(--transition-menu);
311
+
312
+ /* Reduced motion support */
313
+ @media (prefers-reduced-motion: reduce) {
314
+ transition: none;
315
+ }
316
+
317
+ /* Remove backdrop-filter transitions in translucent mode to prevent flickering */
318
+ :where([data-panel-background='translucent']) & {
319
+ transition: background var(--duration-1) var(--ease-1), color var(--duration-2) var(--ease-1);
320
+ }
321
+ }
233
322
  & :where(.rt-BaseMenuSubTrigger[data-state='open']) {
234
- background-color: var(--gray-a3);
323
+ /* Base state: solid gray for solid panels */
324
+ background-color: var(--gray-3);
325
+
326
+ /* Theme-level translucent override */
327
+ :where([data-panel-background='translucent']) & {
328
+ background-color: var(--gray-a3);
329
+ /* Remove individual backdrop-filter to prevent layering with container backdrop-filter */
330
+ }
331
+
332
+ /* Component-level overrides (higher specificity) */
333
+ &:where([data-panel-background='solid']) {
334
+ background-color: var(--gray-3);
335
+ backdrop-filter: none;
336
+ --backdrop-filter-components: none;
337
+ }
338
+
339
+ &:where([data-panel-background='translucent']) {
340
+ background-color: var(--gray-a3);
341
+ /* No backdrop-filter here to prevent double-blur with container */
342
+ }
343
+ }
344
+ & :where(.rt-BaseMenuItem) {
345
+ /* Remove backdrop-filter transitions in translucent mode to prevent flickering */
346
+ :where([data-panel-background='translucent']) & {
347
+ transition: background var(--duration-1) var(--ease-1), color var(--duration-2) var(--ease-1);
348
+ }
235
349
  }
236
350
  & :where(.rt-BaseMenuItem[data-highlighted]) {
237
351
  background-color: var(--accent-9);
@@ -289,11 +403,68 @@
289
403
  /* soft */
290
404
 
291
405
  .rt-BaseMenuContent:where(.rt-variant-soft) {
406
+ & :where(.rt-BaseMenuSubTrigger) {
407
+ transition: var(--transition-menu);
408
+
409
+ /* Reduced motion support */
410
+ @media (prefers-reduced-motion: reduce) {
411
+ transition: none;
412
+ }
413
+
414
+ /* Remove backdrop-filter transitions in translucent mode to prevent flickering */
415
+ :where([data-panel-background='translucent']) & {
416
+ transition: background var(--duration-1) var(--ease-1), color var(--duration-2) var(--ease-1);
417
+ }
418
+ }
292
419
  & :where(.rt-BaseMenuSubTrigger[data-state='open']) {
293
- background-color: var(--accent-a3);
420
+ /* Base state: solid accent for solid panels */
421
+ background-color: var(--accent-3);
422
+
423
+ /* Theme-level translucent override */
424
+ :where([data-panel-background='translucent']) & {
425
+ background-color: var(--accent-a3);
426
+ /* Remove individual backdrop-filter to prevent layering with container backdrop-filter */
427
+ }
428
+
429
+ /* Component-level overrides (higher specificity) */
430
+ &:where([data-panel-background='solid']) {
431
+ background-color: var(--accent-3);
432
+ backdrop-filter: none;
433
+ --backdrop-filter-components: none;
434
+ }
435
+
436
+ &:where([data-panel-background='translucent']) {
437
+ background-color: var(--accent-a3);
438
+ /* No backdrop-filter here to prevent double-blur with container */
439
+ }
440
+ }
441
+ & :where(.rt-BaseMenuItem) {
442
+ /* Remove backdrop-filter transitions in translucent mode to prevent flickering */
443
+ :where([data-panel-background='translucent']) & {
444
+ transition: background var(--duration-1) var(--ease-1), color var(--duration-2) var(--ease-1);
445
+ }
294
446
  }
295
447
  & :where(.rt-BaseMenuItem[data-highlighted]) {
296
- background-color: var(--accent-a4);
448
+ /* Base state: solid accent for solid panels */
449
+ background-color: var(--accent-4);
450
+
451
+ /* Theme-level translucent override */
452
+ :where([data-panel-background='translucent']) & {
453
+ background-color: var(--accent-a4);
454
+ /* Remove individual backdrop-filter to prevent layering with container backdrop-filter */
455
+ }
456
+
457
+ /* Component-level overrides (higher specificity) */
458
+ &:where([data-panel-background='solid']) {
459
+ background-color: var(--accent-4);
460
+ backdrop-filter: none;
461
+ --backdrop-filter-components: none;
462
+ }
463
+
464
+ &:where([data-panel-background='translucent']) {
465
+ background-color: var(--accent-a4);
466
+ /* No backdrop-filter here to prevent double-blur with container */
467
+ }
297
468
 
298
469
  /* In soft variant, improve contrast for gray text while maintaining hierarchy */
299
470
  & :where(.rt-Text[data-accent-color='gray'], [data-accent-color='gray']) {
@@ -6,6 +6,7 @@ import type { PropDef } from '../../props/prop-def.js';
6
6
 
7
7
  const contentSizes = ['1', '2'] as const;
8
8
  const contentVariants = ['solid', 'soft'] as const;
9
+ const panelBackgrounds = ['solid', 'translucent'] as const;
9
10
 
10
11
  const baseMenuContentPropDefs = {
11
12
  size: {
@@ -21,11 +22,17 @@ const baseMenuContentPropDefs = {
21
22
  values: contentVariants,
22
23
  default: 'solid',
23
24
  },
25
+ panelBackground: {
26
+ type: 'enum',
27
+ values: panelBackgrounds,
28
+ default: undefined,
29
+ },
24
30
  ...colorPropDef,
25
31
  ...highContrastPropDef,
26
32
  } satisfies {
27
33
  size: PropDef<(typeof contentSizes)[number]>;
28
34
  variant: PropDef<(typeof contentVariants)[number]>;
35
+ panelBackground: PropDef<(typeof panelBackgrounds)[number] | undefined>;
29
36
  };
30
37
 
31
38
  const baseMenuItemPropDefs = {
@@ -20,6 +20,7 @@
20
20
  flex-shrink: 0;
21
21
  position: relative;
22
22
  user-select: none;
23
+ transition: var(--transition-tabs);
23
24
  }
24
25
 
25
26
  .rt-BaseTabListTriggerInner,
@@ -27,6 +28,7 @@
27
28
  display: flex;
28
29
  align-items: center;
29
30
  justify-content: center;
31
+ transition: var(--transition-tabs);
30
32
  }
31
33
 
32
34
  .rt-BaseTabListTriggerInner {
@@ -35,12 +37,14 @@
35
37
  :where(.rt-BaseTabListTrigger[data-state='inactive'], .rt-TabNavLink:not([data-active])) & {
36
38
  letter-spacing: var(--tab-inactive-letter-spacing);
37
39
  word-spacing: var(--tab-inactive-word-spacing);
40
+ transition-delay: var(--duration-1); /* 100ms - allows staggered effect vs active state's 0ms */
38
41
  }
39
42
 
40
43
  :where(.rt-BaseTabListTrigger[data-state='active'], .rt-TabNavLink[data-active]) & {
41
44
  font-weight: var(--font-weight-medium);
42
45
  letter-spacing: var(--tab-active-letter-spacing);
43
46
  word-spacing: var(--tab-active-word-spacing);
47
+ transition-delay: 0ms; /* Immediate transition for active state */
44
48
  }
45
49
  }
46
50
 
@@ -80,7 +84,7 @@
80
84
  --tab-height: var(--space-6);
81
85
  --tab-padding-x: var(--space-1);
82
86
  --tab-inner-padding-x: var(--space-1);
83
- --tab-inner-padding-y: calc(var(--space-1) * 0.5);
87
+ --tab-inner-padding-y: calc(var(--space-1) * var(--spacing-multiplier-small));
84
88
  --tab-inner-border-radius: var(--radius-1);
85
89
  }
86
90
  &:where(.rt-r-size-2) {
@@ -103,7 +107,7 @@
103
107
  ***************************************************************************************************/
104
108
 
105
109
  .rt-BaseTabList {
106
- box-shadow: inset 0 -1px 0 0 var(--gray-a5);
110
+ box-shadow: inset 0 calc(-1 * var(--border-width-standard)) 0 0 var(--gray-a5);
107
111
  }
108
112
 
109
113
  .rt-BaseTabListTrigger {
@@ -114,28 +118,73 @@
114
118
  color: var(--gray-12);
115
119
  }
116
120
  &:where(:hover) :where(.rt-BaseTabListTriggerInner) {
121
+ /* Base state: solid gray for solid panels */
117
122
  background-color: var(--gray-a3);
123
+
124
+ /* Theme-level translucent override for hover */
125
+ :where([data-panel-background='translucent']) & {
126
+ background-color: var(--gray-a3);
127
+ backdrop-filter: var(--backdrop-filter-components);
128
+ }
129
+
130
+ /* Component-level overrides for hover */
131
+ :where(.rt-BaseTabList[data-panel-background='solid']) & {
132
+ background-color: var(--gray-a3);
133
+ backdrop-filter: none;
134
+ --backdrop-filter-components: none;
135
+ }
136
+
137
+ :where(.rt-BaseTabList[data-panel-background='translucent']) & {
138
+ background-color: var(--gray-a3);
139
+ backdrop-filter: var(--backdrop-filter-components);
140
+ --backdrop-filter-components: blur(var(--backdrop-blur-components));
141
+ }
118
142
  }
119
143
  &:where(:focus-visible:hover) :where(.rt-BaseTabListTriggerInner) {
144
+ /* Base state: solid accent for solid panels */
120
145
  background-color: var(--accent-a3);
146
+
147
+ /* Theme-level translucent override for focus+hover */
148
+ :where([data-panel-background='translucent']) & {
149
+ background-color: var(--accent-a3);
150
+ backdrop-filter: var(--backdrop-filter-components);
151
+ }
152
+
153
+ /* Component-level overrides for focus+hover */
154
+ :where(.rt-BaseTabList[data-panel-background='solid']) & {
155
+ background-color: var(--accent-a3);
156
+ backdrop-filter: none;
157
+ --backdrop-filter-components: none;
158
+ }
159
+
160
+ :where(.rt-BaseTabList[data-panel-background='translucent']) & {
161
+ background-color: var(--accent-a3);
162
+ backdrop-filter: var(--backdrop-filter-components);
163
+ --backdrop-filter-components: blur(var(--backdrop-blur-components));
164
+ }
121
165
  }
122
166
  }
123
167
  &:where([data-state='active'], [data-active]) {
124
168
  color: var(--gray-12);
125
169
  }
126
170
  &:where(:focus-visible) :where(.rt-BaseTabListTriggerInner) {
127
- outline: 2px solid var(--focus-8);
128
- outline-offset: -2px;
171
+ outline: var(--focus-outline-width) solid var(--focus-8);
172
+ outline-offset: var(--focus-outline-offset-inset);
129
173
  }
130
174
  &:where([data-state='active'], [data-active])::before {
131
175
  box-sizing: border-box;
132
176
  content: '';
133
- height: 2px;
177
+ height: var(--focus-outline-width); /* Consistent with focus outline thickness */
134
178
  position: absolute;
135
179
  bottom: 0;
136
180
  left: 0;
137
181
  right: 0;
138
182
  background-color: var(--accent-indicator);
183
+ transform-origin: center;
184
+ transition:
185
+ transform var(--duration-3) var(--ease-3),
186
+ opacity var(--duration-2) var(--ease-1),
187
+ background-color var(--duration-2) var(--ease-1);
139
188
  }
140
189
 
141
190
  :where(.rt-BaseTabList.rt-high-contrast) & {
@@ -144,3 +193,5 @@
144
193
  }
145
194
  }
146
195
  }
196
+
197
+