@neo-ui-kit/react 0.0.0-stage → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (270) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +203 -2
  3. package/dist/artwork/icons.json.d.ts +2 -0
  4. package/dist/artwork/illustrations.json.d.ts +2 -0
  5. package/dist/chunks/chunk-347P6ZE4.js +104 -0
  6. package/dist/chunks/chunk-BJSFN52W.js +417 -0
  7. package/dist/chunks/chunk-FCOU3ODR.js +63 -0
  8. package/dist/chunks/chunk-JZ4GDTH5.js +87 -0
  9. package/dist/chunks/chunk-UGDRXR7P.js +3362 -0
  10. package/dist/chunks/chunk-VK6GHRLV.js +335 -0
  11. package/dist/chunks/chunk-YKCUOZ7V.js +777 -0
  12. package/dist/components/artwork/DatabaseArt/DatabaseArt.d.ts +6 -0
  13. package/dist/components/artwork/DatabaseArt/styles.css +58 -0
  14. package/dist/components/artwork/Landscape/Landscape.d.ts +7 -0
  15. package/dist/components/artwork/Landscape/styles.css +79 -0
  16. package/dist/components/artwork/NeonWaves/NeonWaves.d.ts +15 -0
  17. package/dist/components/artwork/NeonWaves/styles.css +48 -0
  18. package/dist/components/artwork/Planet/Planet.d.ts +4 -0
  19. package/dist/components/artwork/Planet/styles.css +52 -0
  20. package/dist/components/artwork/QuantumField/QuantumField.d.ts +42 -0
  21. package/dist/components/artwork/QuantumField/QuantumFieldExperience.d.ts +22 -0
  22. package/dist/components/artwork/QuantumField/UPSTREAM-LICENSE.txt +21 -0
  23. package/dist/components/artwork/QuantumField/audio.d.ts +15 -0
  24. package/dist/components/artwork/QuantumField/renderer.d.ts +24 -0
  25. package/dist/components/artwork/QuantumField/styles.css +77 -0
  26. package/dist/components/artwork/ServerArt/ServerArt.d.ts +8 -0
  27. package/dist/components/artwork/ServerArt/styles.css +43 -0
  28. package/dist/components/artwork/Spectrum/Spectrum.d.ts +7 -0
  29. package/dist/components/artwork/Spectrum/styles.css +35 -0
  30. package/dist/components/artwork/layers.d.ts +15 -0
  31. package/dist/components/artwork/useArtwork.d.ts +8 -0
  32. package/dist/components/controls/Autocomplete/Autocomplete.d.ts +2 -0
  33. package/dist/components/controls/Autocomplete/styles.css +1 -0
  34. package/dist/components/controls/Button/Button.d.ts +2 -0
  35. package/dist/components/controls/Button/styles.css +1 -0
  36. package/dist/components/controls/Checkbox/Checkbox.d.ts +2 -0
  37. package/dist/components/controls/Checkbox/styles.css +70 -0
  38. package/dist/components/controls/Chip/Chip.d.ts +21 -0
  39. package/dist/components/controls/Chip/styles.css +74 -0
  40. package/dist/components/controls/ChipField.d.ts +25 -0
  41. package/dist/components/controls/ColorPicker/ColorPicker.d.ts +16 -0
  42. package/dist/components/controls/ColorPicker/color.d.ts +9 -0
  43. package/dist/components/controls/ColorPicker/styles.css +103 -0
  44. package/dist/components/controls/DatePicker/DatePicker.d.ts +19 -0
  45. package/dist/components/controls/DatePicker/styles.css +69 -0
  46. package/dist/components/controls/FilePicker/FilePicker.d.ts +2 -0
  47. package/dist/components/controls/FilePicker/styles.css +149 -0
  48. package/dist/components/controls/IconButton/IconButton.d.ts +2 -0
  49. package/dist/components/controls/IconButton/styles.css +4 -0
  50. package/dist/components/controls/InputBase/InputBase.d.ts +21 -0
  51. package/dist/components/controls/InputBase/styles.css +379 -0
  52. package/dist/components/controls/Link/Link.d.ts +11 -0
  53. package/dist/components/controls/Link/styles.css +50 -0
  54. package/dist/components/controls/NumberField/NumberField.d.ts +2 -0
  55. package/dist/components/controls/NumberField/styles.css +1 -0
  56. package/dist/components/controls/PeoplePicker/PeoplePicker.d.ts +37 -0
  57. package/dist/components/controls/PeoplePicker/styles.css +7 -0
  58. package/dist/components/controls/SegmentedControl/SegmentedControl.d.ts +2 -0
  59. package/dist/components/controls/SegmentedControl/styles.css +9 -0
  60. package/dist/components/controls/Select/Select.d.ts +8 -0
  61. package/dist/components/controls/Select/styles.css +142 -0
  62. package/dist/components/controls/Slider/Slider.d.ts +3 -0
  63. package/dist/components/controls/Slider/styles.css +138 -0
  64. package/dist/components/controls/SplitButton/SplitButton.d.ts +2 -0
  65. package/dist/components/controls/SplitButton/styles.css +169 -0
  66. package/dist/components/controls/Switch/Switch.d.ts +2 -0
  67. package/dist/components/controls/Switch/styles.css +54 -0
  68. package/dist/components/controls/Tab/Tab.d.ts +2 -0
  69. package/dist/components/controls/Tab/styles.css +111 -0
  70. package/dist/components/controls/Tabs/Tabs.d.ts +2 -0
  71. package/dist/components/controls/Tabs/styles.css +239 -0
  72. package/dist/components/controls/TagInput/TagInput.d.ts +24 -0
  73. package/dist/components/controls/TagInput/styles.css +24 -0
  74. package/dist/components/controls/TextArea/TextArea.d.ts +2 -0
  75. package/dist/components/controls/TextArea/styles.css +15 -0
  76. package/dist/components/controls/TextField/TextField.d.ts +2 -0
  77. package/dist/components/controls/ThemePicker/ThemePicker.d.ts +24 -0
  78. package/dist/components/controls/ThemePicker/styles.css +128 -0
  79. package/dist/components/controls/ToggleButton/ToggleButton.d.ts +2 -0
  80. package/dist/components/controls/ToggleButton/styles.css +49 -0
  81. package/dist/components/controls/internal.d.ts +62 -0
  82. package/dist/components/controls/shared.css +694 -0
  83. package/dist/components/controls/shared.d.ts +204 -0
  84. package/dist/components/editor/PianoRoll/PianoRoll.d.ts +65 -0
  85. package/dist/components/editor/PianoRoll/styles.css +186 -0
  86. package/dist/components/editor/shared.css +1 -0
  87. package/dist/components/effects/AnimatedBorder/AnimatedBorder.d.ts +9 -0
  88. package/dist/components/effects/AnimatedBorder/styles.css +7 -0
  89. package/dist/components/effects/Beacon/Beacon.d.ts +9 -0
  90. package/dist/components/effects/Beacon/styles.css +38 -0
  91. package/dist/components/effects/Equalizer/Equalizer.d.ts +14 -0
  92. package/dist/components/effects/Equalizer/styles.css +38 -0
  93. package/dist/components/effects/GlowText/GlowText.d.ts +9 -0
  94. package/dist/components/effects/GlowText/styles.css +56 -0
  95. package/dist/components/effects/ImageShine/ImageShine.d.ts +13 -0
  96. package/dist/components/effects/ImageShine/styles.css +66 -0
  97. package/dist/components/effects/Marquee/Marquee.d.ts +9 -0
  98. package/dist/components/effects/Marquee/styles.css +46 -0
  99. package/dist/components/effects/MelodixText/MelodixText.d.ts +15 -0
  100. package/dist/components/effects/MelodixText/styles.css +28 -0
  101. package/dist/components/effects/Reveal/Reveal.d.ts +13 -0
  102. package/dist/components/effects/Reveal/styles.css +25 -0
  103. package/dist/components/effects/Shimmer/Shimmer.d.ts +10 -0
  104. package/dist/components/effects/Shimmer/styles.css +48 -0
  105. package/dist/components/effects/Sparkles/Sparkles.d.ts +9 -0
  106. package/dist/components/effects/Sparkles/styles.css +28 -0
  107. package/dist/components/effects/Spotlight/Spotlight.d.ts +11 -0
  108. package/dist/components/effects/Spotlight/styles.css +45 -0
  109. package/dist/components/effects/Tilt/Tilt.d.ts +11 -0
  110. package/dist/components/effects/Tilt/styles.css +67 -0
  111. package/dist/components/feedback/Badge/Badge.d.ts +3 -0
  112. package/dist/components/feedback/Badge/styles.css +91 -0
  113. package/dist/components/feedback/CollapsibleSection/CollapsibleSection.d.ts +2 -0
  114. package/dist/components/feedback/CollapsibleSection/styles.css +76 -0
  115. package/dist/components/feedback/DataTable/DataTable.d.ts +16 -0
  116. package/dist/components/feedback/DataTable/styles.css +522 -0
  117. package/dist/components/feedback/Dialog/Dialog.d.ts +2 -0
  118. package/dist/components/feedback/Dialog/styles.css +82 -0
  119. package/dist/components/feedback/EmptyState/EmptyState.d.ts +2 -0
  120. package/dist/components/feedback/EmptyState/styles.css +80 -0
  121. package/dist/components/feedback/KeyValueList/KeyValueList.d.ts +2 -0
  122. package/dist/components/feedback/KeyValueList/styles.css +51 -0
  123. package/dist/components/feedback/Menu/Menu.d.ts +2 -0
  124. package/dist/components/feedback/Menu/styles.css +123 -0
  125. package/dist/components/feedback/MenuItem/MenuItem.d.ts +2 -0
  126. package/dist/components/feedback/MenuItem/styles.css +71 -0
  127. package/dist/components/feedback/MessageBar/MessageBar.d.ts +2 -0
  128. package/dist/components/feedback/MessageBar/styles.css +116 -0
  129. package/dist/components/feedback/Popover/Popover.d.ts +2 -0
  130. package/dist/components/feedback/Popover/styles.css +44 -0
  131. package/dist/components/feedback/ProgressBar/ProgressBar.d.ts +2 -0
  132. package/dist/components/feedback/ProgressBar/styles.css +76 -0
  133. package/dist/components/feedback/SignalBars/SignalBars.d.ts +11 -0
  134. package/dist/components/feedback/SignalBars/styles.css +31 -0
  135. package/dist/components/feedback/StatusIndicator/StatusIndicator.d.ts +2 -0
  136. package/dist/components/feedback/StatusIndicator/styles.css +88 -0
  137. package/dist/components/feedback/Steps/Steps.d.ts +2 -0
  138. package/dist/components/feedback/Steps/styles.css +152 -0
  139. package/dist/components/feedback/Toast/Toast.d.ts +2 -0
  140. package/dist/components/feedback/Toast/styles.css +89 -0
  141. package/dist/components/feedback/Tooltip/Tooltip.d.ts +15 -0
  142. package/dist/components/feedback/Tooltip/styles.css +38 -0
  143. package/dist/components/feedback/shared.css +22 -0
  144. package/dist/components/feedback/shared.d.ts +231 -0
  145. package/dist/components/forms/Form/Form.d.ts +35 -0
  146. package/dist/components/forms/Form/styles.css +1 -0
  147. package/dist/components/forms/FormFields/FormFields.d.ts +20 -0
  148. package/dist/components/forms/FormFields/styles.css +72 -0
  149. package/dist/components/foundation/Loader/Loader.d.ts +30 -0
  150. package/dist/components/foundation/LoaderGenerator/LoaderGenerator.d.ts +38 -0
  151. package/dist/components/foundation/LoaderGenerator/styles.css +104 -0
  152. package/dist/components/foundation/ThemeEditor/ThemeEditor.d.ts +15 -0
  153. package/dist/components/foundation/ThemeEditor/styles.css +97 -0
  154. package/dist/components/foundation/ThemeEditor/themeConfig.d.ts +47 -0
  155. package/dist/components/foundation/ThemeProvider/ThemeProvider.d.ts +32 -0
  156. package/dist/components/foundation/ThemeProvider/styles.css +59 -0
  157. package/dist/components/foundation/Typography/Typography.d.ts +17 -0
  158. package/dist/components/foundation/Typography/styles.css +115 -0
  159. package/dist/components/layout/Avatar/Avatar.d.ts +2 -0
  160. package/dist/components/layout/Avatar/HostSeal.d.ts +5 -0
  161. package/dist/components/layout/Avatar/styles.css +166 -0
  162. package/dist/components/layout/BrandMark/BrandMark.d.ts +2 -0
  163. package/dist/components/layout/BrandMark/styles.css +39 -0
  164. package/dist/components/layout/ButtonGroup/ButtonGroup.d.ts +12 -0
  165. package/dist/components/layout/ButtonGroup/styles.css +36 -0
  166. package/dist/components/layout/Card/Card.d.ts +14 -0
  167. package/dist/components/layout/Card/styles.css +37 -0
  168. package/dist/components/layout/DialogActions/DialogActions.d.ts +12 -0
  169. package/dist/components/layout/DialogActions/styles.css +31 -0
  170. package/dist/components/layout/DialogBody/DialogBody.d.ts +12 -0
  171. package/dist/components/layout/DialogBody/styles.css +28 -0
  172. package/dist/components/layout/Divider/Divider.d.ts +2 -0
  173. package/dist/components/layout/Divider/styles.css +58 -0
  174. package/dist/components/layout/FloatingPanel/FloatingPanel.d.ts +15 -0
  175. package/dist/components/layout/FloatingPanel/styles.css +47 -0
  176. package/dist/components/layout/FloatingPanel/useFloatingPanel.d.ts +54 -0
  177. package/dist/components/layout/Grid/Grid.d.ts +24 -0
  178. package/dist/components/layout/Grid/styles.css +90 -0
  179. package/dist/components/layout/Header/Header.d.ts +2 -0
  180. package/dist/components/layout/Header/styles.css +42 -0
  181. package/dist/components/layout/Icon/Icon.d.ts +4 -0
  182. package/dist/components/layout/Icon/styles.css +62 -0
  183. package/dist/components/layout/Illustration/Illustration.d.ts +2 -0
  184. package/dist/components/layout/Illustration/styles.css +104 -0
  185. package/dist/components/layout/ScrollArea/ScrollArea.d.ts +2 -0
  186. package/dist/components/layout/ScrollArea/styles.css +61 -0
  187. package/dist/components/layout/Stack/Stack.d.ts +21 -0
  188. package/dist/components/layout/Stack/styles.css +53 -0
  189. package/dist/components/layout/StatTile/StatTile.d.ts +20 -0
  190. package/dist/components/layout/StatTile/styles.css +90 -0
  191. package/dist/components/layout/TabPanel/TabPanel.d.ts +2 -0
  192. package/dist/components/layout/TabPanel/styles.css +16 -0
  193. package/dist/components/layout/Text/Text.d.ts +2 -0
  194. package/dist/components/layout/Text/styles.css +29 -0
  195. package/dist/components/layout/Toolbar/Toolbar.d.ts +12 -0
  196. package/dist/components/layout/Toolbar/styles.css +7 -0
  197. package/dist/components/layout/shared.css +79 -0
  198. package/dist/components/layout/shared.d.ts +64 -0
  199. package/dist/components/media/AudioPlayer/AudioPlayer.d.ts +2 -0
  200. package/dist/components/media/AudioPlayer/styles.css +86 -0
  201. package/dist/components/media/KaraokeLyrics/KaraokeLyrics.d.ts +25 -0
  202. package/dist/components/media/KaraokeLyrics/styles.css +56 -0
  203. package/dist/components/media/LevelMeter/LevelMeter.d.ts +7 -0
  204. package/dist/components/media/LevelMeter/styles.css +30 -0
  205. package/dist/components/media/MediaCard/MediaCard.d.ts +24 -0
  206. package/dist/components/media/MediaCard/styles.css +108 -0
  207. package/dist/components/media/MelodyRoll/MelodyRoll.d.ts +48 -0
  208. package/dist/components/media/MelodyRoll/styles.css +196 -0
  209. package/dist/components/media/PianoKeyboard/PianoKeyboard.d.ts +24 -0
  210. package/dist/components/media/PianoKeyboard/styles.css +83 -0
  211. package/dist/components/media/RotaryKnob/RotaryKnob.d.ts +3 -0
  212. package/dist/components/media/RotaryKnob/styles.css +319 -0
  213. package/dist/components/media/Sparkline/Sparkline.d.ts +2 -0
  214. package/dist/components/media/Sparkline/styles.css +70 -0
  215. package/dist/components/media/WaveDecoration/WaveDecoration.d.ts +2 -0
  216. package/dist/components/media/WaveDecoration/styles.css +2 -0
  217. package/dist/components/media/Waveform/Waveform.d.ts +9 -0
  218. package/dist/components/media/Waveform/styles.css +375 -0
  219. package/dist/components/media/Waveform/useWaveformPeaks.d.ts +11 -0
  220. package/dist/components/media/shared.css +7 -0
  221. package/dist/components/media/shared.d.ts +80 -0
  222. package/dist/components/navigation/Router/Router.d.ts +32 -0
  223. package/dist/components/navigation/Router/styles.css +1 -0
  224. package/dist/components.css +102 -0
  225. package/dist/core/artwork.d.ts +17 -0
  226. package/dist/core/base.d.ts +65 -0
  227. package/dist/core/environment.d.ts +5 -0
  228. package/dist/core/i18n.d.ts +34 -0
  229. package/dist/core/messages.d.ts +1 -0
  230. package/dist/core/motion/hooks.d.ts +17 -0
  231. package/dist/core/motion-engine.d.ts +13 -0
  232. package/dist/core/noise.d.ts +20 -0
  233. package/dist/core/providers/context.d.ts +4 -0
  234. package/dist/core/responsive.d.ts +13 -0
  235. package/dist/core.d.ts +8 -0
  236. package/dist/core.js +56 -0
  237. package/dist/editor.d.ts +2 -0
  238. package/dist/editor.js +8 -0
  239. package/dist/fonts/melodix/Melodix-100.woff2 +0 -0
  240. package/dist/fonts/melodix/Melodix-200.woff2 +0 -0
  241. package/dist/fonts/melodix/Melodix-300.woff2 +0 -0
  242. package/dist/fonts/melodix/Melodix-400.woff2 +0 -0
  243. package/dist/fonts/melodix/Melodix-500.woff2 +0 -0
  244. package/dist/fonts/melodix/Melodix-600.woff2 +0 -0
  245. package/dist/fonts/melodix/Melodix-700.woff2 +0 -0
  246. package/dist/fonts/melodix/Melodix-800.woff2 +0 -0
  247. package/dist/fonts/melodix/Melodix-900.woff2 +0 -0
  248. package/dist/fonts/melodix/MelodixText-100.woff2 +0 -0
  249. package/dist/fonts/melodix/MelodixText-200.woff2 +0 -0
  250. package/dist/fonts/melodix/MelodixText-300.woff2 +0 -0
  251. package/dist/fonts/melodix/MelodixText-400.woff2 +0 -0
  252. package/dist/fonts/melodix/MelodixText-500.woff2 +0 -0
  253. package/dist/fonts/melodix/MelodixText-600.woff2 +0 -0
  254. package/dist/fonts/melodix/MelodixText-700.woff2 +0 -0
  255. package/dist/fonts/melodix/MelodixText-800.woff2 +0 -0
  256. package/dist/fonts/melodix/MelodixText-900.woff2 +0 -0
  257. package/dist/fonts/melodix/OFL-PlayfairDisplay.txt +93 -0
  258. package/dist/fonts/melodix.css +123 -0
  259. package/dist/forms.d.ts +4 -0
  260. package/dist/forms.js +17 -0
  261. package/dist/index.d.ts +163 -0
  262. package/dist/index.js +9683 -0
  263. package/dist/router.d.ts +2 -0
  264. package/dist/router.js +11 -0
  265. package/dist/styles.css +2 -0
  266. package/dist/theme/base.css +221 -0
  267. package/dist/theme/tokens.css +196 -0
  268. package/dist/theme/typography.d.ts +24 -0
  269. package/dist/tokens.css +1 -0
  270. package/package.json +83 -4
@@ -0,0 +1,694 @@
1
+ /* Shared control sizing + canonical premium button system. */
2
+ /* One size scale for every control; data-ad-size picks a step. */
3
+ :is(
4
+ .ad-button,
5
+ .ad-icon-button,
6
+ .ad-toggle-button,
7
+ .ad-split-button,
8
+ .ad-input-base,
9
+ .ad-text-field-shell,
10
+ .ad-text-area,
11
+ .ad-number-field,
12
+ .ad-select,
13
+ .ad-switch,
14
+ .ad-checkbox,
15
+ .ad-slider,
16
+ .ad-file-picker,
17
+ .ad-tabs,
18
+ .ad-tab,
19
+ .ad-segmented-control
20
+ ) {
21
+ --ad-size-h: var(--ad-control-height);
22
+ --ad-size-font: 0.8125rem;
23
+ --ad-size-radius: var(--ad-radius);
24
+ --ad-size-pad-x: 0.6875rem;
25
+ --ad-size-gap: 0.625rem;
26
+ }
27
+ :is(
28
+ .ad-button,
29
+ .ad-icon-button,
30
+ .ad-toggle-button,
31
+ .ad-split-button,
32
+ .ad-input-base,
33
+ .ad-text-field-shell,
34
+ .ad-text-area,
35
+ .ad-number-field,
36
+ .ad-select,
37
+ .ad-switch,
38
+ .ad-checkbox,
39
+ .ad-slider,
40
+ .ad-file-picker,
41
+ .ad-tabs,
42
+ .ad-tab,
43
+ .ad-segmented-control
44
+ )[data-ad-size="xs"] {
45
+ --ad-size-h: 1.8rem;
46
+ --ad-size-font: 0.6875rem;
47
+ --ad-size-radius: 0.52rem;
48
+ --ad-size-pad-x: 0.52rem;
49
+ --ad-size-gap: 0.42rem;
50
+ }
51
+ :is(
52
+ .ad-button,
53
+ .ad-icon-button,
54
+ .ad-toggle-button,
55
+ .ad-split-button,
56
+ .ad-input-base,
57
+ .ad-text-field-shell,
58
+ .ad-text-area,
59
+ .ad-number-field,
60
+ .ad-select,
61
+ .ad-switch,
62
+ .ad-checkbox,
63
+ .ad-slider,
64
+ .ad-file-picker,
65
+ .ad-tabs,
66
+ .ad-tab,
67
+ .ad-segmented-control
68
+ )[data-ad-size="sm"] {
69
+ --ad-size-h: 2.15rem;
70
+ --ad-size-font: 0.75rem;
71
+ --ad-size-radius: 0.64rem;
72
+ --ad-size-pad-x: 0.64rem;
73
+ --ad-size-gap: 0.5rem;
74
+ }
75
+ :is(
76
+ .ad-button,
77
+ .ad-icon-button,
78
+ .ad-toggle-button,
79
+ .ad-split-button,
80
+ .ad-input-base,
81
+ .ad-text-field-shell,
82
+ .ad-text-area,
83
+ .ad-number-field,
84
+ .ad-select,
85
+ .ad-switch,
86
+ .ad-checkbox,
87
+ .ad-slider,
88
+ .ad-file-picker,
89
+ .ad-tabs,
90
+ .ad-tab,
91
+ .ad-segmented-control
92
+ )[data-ad-size="md"] {
93
+ --ad-size-h: 2.65rem;
94
+ --ad-size-font: 0.825rem;
95
+ --ad-size-radius: 0.78rem;
96
+ --ad-size-pad-x: 0.76rem;
97
+ --ad-size-gap: 0.6rem;
98
+ }
99
+ :is(
100
+ .ad-button,
101
+ .ad-icon-button,
102
+ .ad-toggle-button,
103
+ .ad-split-button,
104
+ .ad-input-base,
105
+ .ad-text-field-shell,
106
+ .ad-text-area,
107
+ .ad-number-field,
108
+ .ad-select,
109
+ .ad-switch,
110
+ .ad-checkbox,
111
+ .ad-slider,
112
+ .ad-file-picker,
113
+ .ad-tabs,
114
+ .ad-tab,
115
+ .ad-segmented-control
116
+ )[data-ad-size="lg"] {
117
+ --ad-size-h: 3.08rem;
118
+ --ad-size-font: 0.94rem;
119
+ --ad-size-radius: 0.9rem;
120
+ --ad-size-pad-x: 0.95rem;
121
+ --ad-size-gap: 0.72rem;
122
+ }
123
+
124
+ @keyframes ad-btn-breathe {
125
+ 50% {
126
+ opacity: 1;
127
+ }
128
+ }
129
+ @keyframes ad-btn-sheen {
130
+ 0%,
131
+ 60% {
132
+ transform: translateX(-190%) rotate(14deg);
133
+ opacity: 0;
134
+ }
135
+ 68% {
136
+ opacity: 0.18;
137
+ }
138
+ 76% {
139
+ opacity: 0.85;
140
+ }
141
+ 92%,
142
+ 100% {
143
+ transform: translateX(255%) rotate(14deg);
144
+ opacity: 0;
145
+ }
146
+ }
147
+
148
+ /* Shared visual contract. */
149
+ .ad-button,
150
+ .ad-icon-button,
151
+ .ad-toggle-button {
152
+ /* Pill buttons, as in music players. */
153
+ --ad-btn-radius: 999rem;
154
+ --ad-btn-bg-top: var(--ad-neutral-700);
155
+ --ad-btn-bg-mid: var(--ad-neutral-850);
156
+ --ad-btn-bg-bottom: var(--ad-neutral-900);
157
+ --ad-btn-border-a: rgb(from var(--ad-secondary-100) r g b / 0.65);
158
+ --ad-btn-border-b: rgb(from var(--ad-primary-600) r g b / 0.43);
159
+ --ad-btn-edge: rgb(from var(--ad-secondary) r g b / 0.21);
160
+ --ad-btn-glow: rgb(from var(--ad-primary) r g b / 0.16);
161
+ --ad-btn-inner: #ffffff3d;
162
+ --ad-btn-bottom: #000a;
163
+ --ad-button-x: 50%;
164
+ --ad-button-y: 20%;
165
+ position: relative;
166
+ display: inline-flex;
167
+ align-items: center;
168
+ justify-content: center;
169
+ min-inline-size: 0;
170
+ max-inline-size: 100%;
171
+ height: var(--ad-size-h);
172
+ gap: var(--ad-size-gap);
173
+ padding-inline: calc(var(--ad-size-pad-x) * 1.55);
174
+ border: 0.0625rem solid transparent;
175
+ border-radius: var(--ad-btn-radius);
176
+ color: var(--ad-neutral-200);
177
+ font-size: var(--ad-size-font);
178
+ font-weight: 700;
179
+ letter-spacing: 0.01em;
180
+ line-height: 1;
181
+ white-space: nowrap;
182
+ background:
183
+ linear-gradient(
184
+ 180deg,
185
+ var(--ad-btn-bg-top),
186
+ var(--ad-btn-bg-mid) 58%,
187
+ var(--ad-btn-bg-bottom)
188
+ )
189
+ padding-box,
190
+ linear-gradient(
191
+ 135deg,
192
+ var(--ad-btn-border-a),
193
+ #ffffff18 18%,
194
+ var(--ad-btn-border-b) 56%,
195
+ rgb(from var(--ad-primary-800) r g b / 0.31) 100%
196
+ )
197
+ border-box;
198
+ box-shadow:
199
+ inset 0 0.08rem 0.15rem var(--ad-btn-inner),
200
+ inset 0 -0.48rem 0.95rem var(--ad-btn-bottom),
201
+ inset 0 0 0 0.03125rem #ffffff09,
202
+ 0 0.42rem 1rem #0009,
203
+ 0 0 1rem var(--ad-btn-glow);
204
+ isolation: isolate;
205
+ overflow: hidden;
206
+ -webkit-tap-highlight-color: transparent;
207
+ transition:
208
+ transform 0.22s cubic-bezier(0.2, 0.78, 0.24, 1),
209
+ filter 0.22s,
210
+ box-shadow 0.22s,
211
+ border-color 0.22s,
212
+ opacity 0.22s;
213
+ }
214
+ .ad-button::before,
215
+ .ad-icon-button::before,
216
+ .ad-toggle-button::before {
217
+ content: "";
218
+ position: absolute;
219
+ inset: 0.0625rem;
220
+ z-index: -1;
221
+ border-radius: calc(var(--ad-btn-radius) - 0.0625rem);
222
+ pointer-events: none;
223
+ background:
224
+ radial-gradient(
225
+ 70% 105% at var(--ad-button-x) var(--ad-button-y),
226
+ #ffffff3f 0%,
227
+ rgb(from var(--ad-neutral-200) r g b / 0.14) 24%,
228
+ rgb(from var(--ad-secondary-200) r g b / 0.08) 48%,
229
+ transparent 72%
230
+ ),
231
+ linear-gradient(180deg, #ffffff2f 0%, #ffffff10 18%, transparent 36%),
232
+ linear-gradient(180deg, #ffffff12 0%, transparent 24%, transparent 100%),
233
+ radial-gradient(88% 48% at 50% 112%, var(--ad-btn-edge) 0%, transparent 74%);
234
+ opacity: 0.96;
235
+ transition:
236
+ opacity 0.22s,
237
+ filter 0.22s;
238
+ }
239
+ .ad-button::after,
240
+ .ad-icon-button::after,
241
+ .ad-toggle-button::after {
242
+ content: "";
243
+ position: absolute;
244
+ top: -72%;
245
+ bottom: -72%;
246
+ left: -18%;
247
+ width: 34%;
248
+ pointer-events: none;
249
+ background: linear-gradient(
250
+ 90deg,
251
+ transparent,
252
+ rgb(from var(--ad-neutral-200) r g b / 0.08) 18%,
253
+ #fffefecf 48%,
254
+ rgb(from var(--ad-secondary-100) r g b / 0.3) 62%,
255
+ transparent 80%
256
+ );
257
+ filter: blur(0.08rem);
258
+ transform: translateX(-190%) rotate(14deg);
259
+ opacity: 0;
260
+ }
261
+ .ad-button:hover:not(:disabled),
262
+ .ad-icon-button:hover:not(:disabled),
263
+ .ad-toggle-button:hover:not(:disabled) {
264
+ transform: translateY(-0.09rem);
265
+ filter: brightness(1.07) saturate(1.08);
266
+ box-shadow:
267
+ inset 0 0.09rem 0.18rem #ffffff61,
268
+ inset 0 -0.54rem 1.05rem var(--ad-btn-bottom),
269
+ inset 0 0 0 0.03125rem #ffffff14,
270
+ 0 0.58rem 1.15rem #000a,
271
+ 0 0 1.35rem color-mix(in srgb, var(--ad-btn-glow) 92%, transparent);
272
+ }
273
+ .ad-button:hover:not(:disabled)::before,
274
+ .ad-icon-button:hover:not(:disabled)::before,
275
+ .ad-toggle-button:hover:not(:disabled)::before {
276
+ opacity: 1;
277
+ filter: brightness(1.04);
278
+ }
279
+ .ad-button:hover:not(:disabled)::after,
280
+ .ad-icon-button:hover:not(:disabled)::after,
281
+ .ad-toggle-button:hover:not(:disabled)::after {
282
+ animation: ad-btn-sheen 1.05s ease-out 1;
283
+ }
284
+ .ad-button:active:not(:disabled),
285
+ .ad-icon-button:active:not(:disabled),
286
+ .ad-toggle-button:active:not(:disabled) {
287
+ transform: translateY(0.03rem) scale(0.987);
288
+ filter: brightness(0.96);
289
+ box-shadow:
290
+ inset 0 0.26rem 0.64rem #000b,
291
+ inset 0 0 0.4rem var(--ad-btn-edge),
292
+ 0 0.1rem 0.24rem #0008;
293
+ }
294
+ .ad-button:focus-visible,
295
+ .ad-icon-button:focus-visible,
296
+ .ad-toggle-button:focus-visible {
297
+ outline: 0.125rem solid var(--ad-neutral-200);
298
+ outline-offset: 0.18rem;
299
+ }
300
+
301
+ /* Semantic variants: one source for Button, IconButton, SplitButton and ToggleButton. */
302
+ .ad-button[data-ad-variant="primary"],
303
+ .ad-icon-button[data-ad-variant="primary"],
304
+ .ad-split-button[data-ad-variant="primary"],
305
+ .ad-toggle-button[aria-pressed="true"] {
306
+ --ad-btn-bg-top: var(--ad-primary);
307
+ --ad-btn-bg-mid: var(--ad-primary-600);
308
+ --ad-btn-bg-bottom: var(--ad-primary-900);
309
+ --ad-btn-border-a: var(--ad-neutral-200);
310
+ --ad-btn-border-b: rgb(from var(--ad-secondary) r g b / 0.86);
311
+ --ad-btn-edge: rgb(from var(--ad-primary) r g b / 0.44);
312
+ --ad-btn-glow: rgb(from var(--ad-primary) r g b / 0.42);
313
+ --ad-btn-inner: #fffafca3;
314
+ --ad-btn-bottom: rgb(from var(--ad-primary-800) r g b / 0.42);
315
+ color: var(--ad-on-accent);
316
+ }
317
+ .ad-button[data-ad-variant="primary"]::after,
318
+ .ad-icon-button[data-ad-variant="primary"]::after,
319
+ .ad-toggle-button[aria-pressed="true"]::after {
320
+ animation: ad-btn-sheen 4.6s ease-in-out infinite;
321
+ }
322
+
323
+ .ad-button[data-ad-variant="secondary"],
324
+ .ad-icon-button[data-ad-variant="secondary"],
325
+ .ad-split-button[data-ad-variant="secondary"],
326
+ .ad-toggle-button[aria-pressed="false"] {
327
+ --ad-btn-bg-top: var(--ad-neutral-700);
328
+ --ad-btn-bg-mid: var(--ad-neutral-850);
329
+ --ad-btn-bg-bottom: var(--ad-neutral-900);
330
+ --ad-btn-border-a: rgb(from var(--ad-neutral-300) r g b / 0.66);
331
+ --ad-btn-border-b: rgb(from var(--ad-neutral-600) r g b / 0.36);
332
+ --ad-btn-edge: rgb(from var(--ad-secondary) r g b / 0.17);
333
+ --ad-btn-glow: rgb(from var(--ad-primary) r g b / 0.11);
334
+ --ad-btn-inner: #ffffff35;
335
+ --ad-btn-bottom: #000a;
336
+ }
337
+
338
+ .ad-button[data-ad-variant="ghost"],
339
+ .ad-icon-button[data-ad-variant="ghost"],
340
+ .ad-split-button[data-ad-variant="ghost"] {
341
+ --ad-btn-bg-top: #ffffff05;
342
+ --ad-btn-bg-mid: #ffffff02;
343
+ --ad-btn-bg-bottom: #0000000b;
344
+ --ad-btn-border-a: rgb(from var(--ad-secondary-200) r g b / 0.18);
345
+ --ad-btn-border-b: rgb(from var(--ad-primary-600) r g b / 0.13);
346
+ --ad-btn-edge: rgb(from var(--ad-secondary-200) r g b / 0.05);
347
+ --ad-btn-glow: transparent;
348
+ --ad-btn-inner: #ffffff08;
349
+ --ad-btn-bottom: #00000018;
350
+ color: var(--ad-neutral-300);
351
+ }
352
+
353
+ .ad-button[data-ad-variant="danger"],
354
+ .ad-icon-button[data-ad-variant="danger"],
355
+ .ad-split-button[data-ad-variant="danger"] {
356
+ --ad-btn-bg-top: var(--ad-primary-600);
357
+ --ad-btn-bg-mid: var(--ad-primary-800);
358
+ --ad-btn-bg-bottom: var(--ad-primary-900);
359
+ --ad-btn-border-a: rgb(from var(--ad-secondary-200) r g b / 0.83);
360
+ --ad-btn-border-b: rgb(from var(--ad-primary) r g b / 0.43);
361
+ --ad-btn-edge: rgb(from var(--ad-primary) r g b / 0.3);
362
+ --ad-btn-glow: rgb(from var(--ad-primary-600) r g b / 0.22);
363
+ --ad-btn-inner: rgb(from var(--ad-secondary-100) r g b / 0.37);
364
+ --ad-btn-bottom: rgb(from var(--ad-primary-900) r g b / 0.47);
365
+ color: var(--ad-on-accent);
366
+ }
367
+ .ad-button:disabled,
368
+ .ad-icon-button:disabled,
369
+ .ad-toggle-button:disabled {
370
+ opacity: 0.42;
371
+ filter: saturate(0.2) brightness(0.88);
372
+ cursor: not-allowed;
373
+ animation: none;
374
+ transform: none;
375
+ }
376
+ .ad-button:disabled::after,
377
+ .ad-icon-button:disabled::after,
378
+ .ad-toggle-button:disabled::after {
379
+ display: none;
380
+ }
381
+
382
+ .ad-button > .ad-icon,
383
+ .ad-toggle-button > .ad-icon {
384
+ --ad-icon-size: calc(var(--ad-size-font) * 1.45);
385
+ flex: 0 0 auto;
386
+ filter: drop-shadow(0 0 0.24rem rgb(from var(--ad-secondary-100) r g b / 0.42));
387
+ }
388
+ .ad-button-label {
389
+ display: block;
390
+ min-inline-size: 0;
391
+ max-inline-size: 100%;
392
+ overflow: hidden;
393
+ text-overflow: ellipsis;
394
+ white-space: nowrap;
395
+ }
396
+ .ad-button > .ad-spinner {
397
+ flex: 0 0 auto;
398
+ }
399
+
400
+ .ad-icon-button {
401
+ aspect-ratio: 1/1;
402
+ width: var(--ad-size-h);
403
+ min-width: var(--ad-size-h);
404
+ padding: 0;
405
+ border-radius: var(--ad-btn-radius);
406
+ }
407
+ .ad-icon-button[data-ad-round],
408
+ .ad-button[data-ad-round] {
409
+ width: var(--ad-size-h);
410
+ height: var(--ad-size-h);
411
+ padding: 0;
412
+ border-radius: 50%;
413
+ }
414
+ /* Icons scale with the control: text buttons follow the font, icon-only buttons the height. */
415
+ .ad-icon-button > .ad-icon {
416
+ --ad-icon-size: calc(var(--ad-size-h) * 0.44);
417
+ filter: drop-shadow(0 0 0.2rem rgb(from var(--ad-secondary-100) r g b / 0.49));
418
+ }
419
+
420
+ .ad-switch,
421
+ .ad-checkbox {
422
+ display: inline-flex;
423
+ align-items: center;
424
+ gap: var(--ad-size-gap);
425
+ cursor: pointer;
426
+ font-size: var(--ad-size-font);
427
+ position: relative;
428
+ }
429
+ .ad-switch input,
430
+ .ad-checkbox input {
431
+ position: absolute;
432
+ opacity: 0;
433
+ width: 0.0625rem;
434
+ height: 0.0625rem;
435
+ }
436
+ .ad-toggle-track {
437
+ --ad-track-h: calc(var(--ad-size-h) * 0.64);
438
+ --ad-track-w: calc(var(--ad-track-h) * 1.82);
439
+ width: var(--ad-track-w);
440
+ height: var(--ad-track-h);
441
+ position: relative;
442
+ border-radius: 999rem;
443
+ border: 0.0625rem solid rgb(from var(--ad-primary) r g b / 0.55);
444
+ background: linear-gradient(180deg, var(--ad-neutral-800), var(--ad-neutral-900));
445
+ box-shadow: inset 0 0 0.3125rem #000b;
446
+ flex: none;
447
+ }
448
+ .ad-toggle-track i {
449
+ --ad-thumb-inset: calc(var(--ad-track-h) * 0.08);
450
+ position: absolute;
451
+ left: var(--ad-thumb-inset);
452
+ top: var(--ad-thumb-inset);
453
+ width: calc(var(--ad-track-h) - var(--ad-thumb-inset) * 2);
454
+ height: calc(var(--ad-track-h) - var(--ad-thumb-inset) * 2);
455
+ border: 0.125rem solid var(--ad-neutral-300);
456
+ border-radius: 50%;
457
+ background: linear-gradient(135deg, var(--ad-neutral-700), var(--ad-neutral-850));
458
+ box-shadow: 0 0 0.1875rem rgb(from var(--ad-secondary-200) r g b / 0.25);
459
+ transition:
460
+ transform 0.42s cubic-bezier(0.34, 1.56, 0.5, 1),
461
+ scale 0.18s ease-out,
462
+ background 0.25s,
463
+ border-color 0.25s,
464
+ box-shadow 0.25s;
465
+ }
466
+ .ad-switch input:focus-visible + .ad-toggle-track,
467
+ .ad-checkbox input:focus-visible + .ad-toggle-track {
468
+ outline: 0.125rem solid var(--ad-secondary-100);
469
+ outline-offset: 0.1875rem;
470
+ }
471
+ .ad-tab-shape {
472
+ position: absolute;
473
+ inset: 0;
474
+ width: 100%;
475
+ height: 100%;
476
+ overflow: visible;
477
+ z-index: -1;
478
+ pointer-events: none;
479
+ }
480
+ .ad-tab-shape .tab-shape__glow {
481
+ stroke: var(--ad-primary);
482
+ stroke-width: 6.5;
483
+ opacity: 0.72;
484
+ filter: blur(0.25rem);
485
+ }
486
+ .ad-tab-shape .tab-shape__edge {
487
+ stroke: var(--ad-secondary);
488
+ stroke-width: 1.15;
489
+ }
490
+ .ad-tab-shape .tab-shape__glint {
491
+ stroke: var(--ad-neutral-200);
492
+ stroke-width: 1.2;
493
+ stroke-linecap: round;
494
+ stroke-dasharray: 8 92;
495
+ animation: ad-tab-glint 6s linear infinite;
496
+ }
497
+ /* The glint's glow: two faint wider dashes under it, in step with it, instead of a live filter. */
498
+ .ad-tab-shape .tab-shape__glint[data-part="wide"] {
499
+ stroke: var(--ad-secondary);
500
+ stroke-width: 7.2;
501
+ opacity: 0.1;
502
+ }
503
+ .ad-tab-shape .tab-shape__glint[data-part="near"] {
504
+ stroke: var(--ad-secondary);
505
+ stroke-width: 4.2;
506
+ opacity: 0.25;
507
+ }
508
+ .ad-tab-shape-glint {
509
+ will-change: transform;
510
+ }
511
+ .ad-tab-shape .tab-shape__floor {
512
+ stroke: var(--ad-secondary);
513
+ stroke-width: 1.85;
514
+ filter: drop-shadow(0 0 0.25rem var(--ad-primary));
515
+ }
516
+
517
+ @media (prefers-reduced-motion: reduce) {
518
+ .ad-button,
519
+ .ad-icon-button,
520
+ .ad-toggle-button {
521
+ animation: none !important;
522
+ transition: none !important;
523
+ }
524
+ .ad-button::after,
525
+ .ad-icon-button::after,
526
+ .ad-toggle-button::after {
527
+ animation: none !important;
528
+ display: none !important;
529
+ }
530
+ }
531
+
532
+ /* Ghost is a subtle button (Fluent "subtle", MUI "text"): no surface until hovered. */
533
+ :is(.ad-button, .ad-icon-button)[data-ad-variant="ghost"] {
534
+ border-color: transparent;
535
+ background: transparent;
536
+ box-shadow: none;
537
+ color: var(--ad-neutral-300);
538
+ animation: none;
539
+ }
540
+ :is(.ad-button, .ad-icon-button)[data-ad-variant="ghost"]::before,
541
+ :is(.ad-button, .ad-icon-button)[data-ad-variant="ghost"]::after {
542
+ display: none;
543
+ }
544
+ :is(.ad-button, .ad-icon-button)[data-ad-variant="ghost"] > .ad-icon {
545
+ filter: none;
546
+ }
547
+ :is(.ad-button, .ad-icon-button)[data-ad-variant="ghost"]:hover:not(:disabled) {
548
+ background: rgb(from var(--ad-primary) r g b / 0.08);
549
+ box-shadow: none;
550
+ color: var(--ad-text);
551
+ filter: none;
552
+ transform: none;
553
+ }
554
+ :is(.ad-button, .ad-icon-button)[data-ad-variant="ghost"]:active:not(
555
+ :disabled
556
+ ) {
557
+ background: rgb(from var(--ad-primary) r g b / 0.14);
558
+ box-shadow: none;
559
+ transform: scale(0.98);
560
+ }
561
+
562
+ /* Living plasma inside the button, a soft breath of light, and a comet running round its edge.
563
+ Accent buttons always show them; quieter variants reveal them on hover. Everything moves by
564
+ transform and opacity only, and only while it is visible, so a screen of buttons stays light. */
565
+ .ad-button-fx {
566
+ position: absolute;
567
+ inset: 0;
568
+ z-index: -1;
569
+ border-radius: inherit;
570
+ overflow: hidden;
571
+ pointer-events: none;
572
+ }
573
+ .ad-button-fx::before {
574
+ content: "";
575
+ position: absolute;
576
+ inset: -40% -10% -40% 30%;
577
+ background:
578
+ radial-gradient(circle at 72% 30%, #fff 0 1.2%, transparent 2.6%),
579
+ radial-gradient(circle at 86% 68%, var(--ad-secondary-100) 0 1.4%, transparent 3.2%),
580
+ radial-gradient(circle at 58% 74%, var(--ad-secondary-200) 0 1.8%, transparent 4%),
581
+ repeating-conic-gradient(
582
+ from 20deg at 80% 50%,
583
+ transparent 0 7deg,
584
+ #ffffff24 8deg 10deg,
585
+ transparent 12deg 19deg
586
+ ),
587
+ radial-gradient(ellipse at 80% 50%, rgb(from var(--ad-secondary) r g b / 0.44), transparent 65%);
588
+ mask-image: linear-gradient(90deg, transparent, #000 40%);
589
+ filter: saturate(1.35);
590
+ opacity: 0;
591
+ transition: opacity 0.4s;
592
+ will-change: transform;
593
+ }
594
+ /* The breath: a faint light over the face that swells and settles. */
595
+ .ad-button-fx::after {
596
+ content: "";
597
+ position: absolute;
598
+ inset: 0;
599
+ background: radial-gradient(ellipse at 50% 30%, rgb(from var(--ad-secondary-100) r g b / 0.14), transparent 70%);
600
+ opacity: 0;
601
+ }
602
+ /* The comet: a ring-shaped window onto a conic light that turns behind it. */
603
+ .ad-button-orbit {
604
+ position: absolute;
605
+ inset: 0;
606
+ z-index: 0;
607
+ border-radius: inherit;
608
+ padding: 0.0625rem;
609
+ overflow: hidden;
610
+ mask:
611
+ linear-gradient(#000 0 0) content-box exclude,
612
+ linear-gradient(#000 0 0);
613
+ opacity: 0;
614
+ transition: opacity 0.4s;
615
+ pointer-events: none;
616
+ }
617
+ .ad-button-orbit::before {
618
+ content: "";
619
+ position: absolute;
620
+ top: 50%;
621
+ left: 50%;
622
+ width: max(130%, 6rem);
623
+ aspect-ratio: 1;
624
+ translate: -50% -50%;
625
+ background: conic-gradient(
626
+ transparent 0 76%,
627
+ var(--ad-secondary) 84%,
628
+ #fff 88%,
629
+ transparent 93%
630
+ );
631
+ will-change: transform;
632
+ }
633
+ :is(.ad-button, .ad-icon-button):is([data-ad-variant="primary"], [data-ad-variant="danger"]) > .ad-button-fx::before,
634
+ .ad-toggle-button[aria-pressed="true"] > .ad-button-fx::before {
635
+ opacity: 0.85;
636
+ animation: ad-btn-plasma 7s ease-in-out infinite alternate;
637
+ }
638
+ :is(.ad-button, .ad-icon-button):is([data-ad-variant="primary"], [data-ad-variant="danger"]) > .ad-button-fx::after,
639
+ .ad-toggle-button[aria-pressed="true"] > .ad-button-fx::after {
640
+ animation: ad-btn-breathe 3.1s ease-in-out infinite;
641
+ }
642
+ :is(.ad-button, .ad-icon-button):is([data-ad-variant="primary"], [data-ad-variant="danger"]) > .ad-button-orbit,
643
+ .ad-toggle-button[aria-pressed="true"] > .ad-button-orbit {
644
+ opacity: 1;
645
+ }
646
+ :is(.ad-button, .ad-icon-button):is([data-ad-variant="primary"], [data-ad-variant="danger"]) > .ad-button-orbit::before,
647
+ .ad-toggle-button[aria-pressed="true"] > .ad-button-orbit::before {
648
+ animation: ad-btn-orbit 4.5s linear infinite;
649
+ }
650
+ :is(.ad-button, .ad-icon-button, .ad-toggle-button):hover:not(:disabled) > .ad-button-fx::before {
651
+ opacity: 0.9;
652
+ animation: ad-btn-plasma 7s ease-in-out infinite alternate;
653
+ }
654
+ :is(.ad-button, .ad-icon-button, .ad-toggle-button):hover:not(:disabled) > .ad-button-orbit {
655
+ opacity: 1;
656
+ }
657
+ :is(.ad-button, .ad-icon-button, .ad-toggle-button):hover:not(:disabled) > .ad-button-orbit::before {
658
+ animation: ad-btn-orbit 1.6s linear infinite;
659
+ }
660
+ :is(.ad-button, .ad-icon-button):disabled > :is(.ad-button-fx, .ad-button-orbit) {
661
+ display: none;
662
+ }
663
+ /* Icon-only buttons are small: the plasma centres on them instead of the right side. */
664
+ .ad-icon-button > .ad-button-fx::before {
665
+ inset: -30%;
666
+ mask-image: radial-gradient(closest-side, #000 40%, transparent);
667
+ }
668
+ /* Ghost buttons stay subtle: only the comet, no plasma. */
669
+ :is(.ad-button, .ad-icon-button)[data-ad-variant="ghost"] > .ad-button-fx::before {
670
+ display: none;
671
+ }
672
+ @keyframes ad-btn-plasma {
673
+ from {
674
+ transform: translate3d(-3%, -2%, 0) scale(1.02) rotate(0deg);
675
+ }
676
+ to {
677
+ transform: translate3d(3%, 2%, 0) scale(1.14) rotate(8deg);
678
+ }
679
+ }
680
+ @keyframes ad-btn-orbit {
681
+ to {
682
+ rotate: 360deg;
683
+ }
684
+ }
685
+ /* Buttons that live inside other controls stay plain. */
686
+ :is(.ad-input-adornment, .ad-split-button) :is(.ad-button-fx, .ad-button-orbit) {
687
+ display: none;
688
+ }
689
+
690
+ @keyframes ad-tab-glint {
691
+ to {
692
+ stroke-dashoffset: -100;
693
+ }
694
+ }