@surflane/ui 0.4.0 → 0.6.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 (296) hide show
  1. package/README.md +2 -2
  2. package/dist/{disclosure.d.ts → accordion.d.ts} +1 -17
  3. package/dist/{disclosure.js → accordion.js} +3 -17
  4. package/dist/alert-dialog.d.ts +31 -0
  5. package/dist/alert-dialog.js +22 -0
  6. package/dist/app-shell.d.ts +44 -3
  7. package/dist/app-shell.js +86 -13
  8. package/dist/{input-extensions.d.ts → autocomplete.d.ts} +4 -42
  9. package/dist/{input-extensions.js → autocomplete.js} +7 -26
  10. package/dist/avatar.js +3 -5
  11. package/dist/badge.d.ts +20 -0
  12. package/dist/badge.js +16 -0
  13. package/dist/bottom-navigation.d.ts +66 -0
  14. package/dist/bottom-navigation.js +36 -0
  15. package/dist/{navigation.d.ts → breadcrumbs.d.ts} +2 -6
  16. package/dist/breadcrumbs.js +31 -0
  17. package/dist/button.d.ts +11 -0
  18. package/dist/button.js +27 -4
  19. package/dist/{content.d.ts → card.d.ts} +6 -24
  20. package/dist/card.js +26 -0
  21. package/dist/chart.d.ts +35 -0
  22. package/dist/chart.js +123 -50
  23. package/dist/checkbox-group.d.ts +2 -0
  24. package/dist/checkbox-group.js +16 -0
  25. package/dist/checkbox.d.ts +9 -0
  26. package/dist/checkbox.js +29 -0
  27. package/dist/choice-label.d.ts +25 -0
  28. package/dist/choice-label.js +14 -0
  29. package/dist/choice.d.ts +7 -0
  30. package/dist/choice.js +3 -0
  31. package/dist/code.d.ts +21 -0
  32. package/dist/{content.js → code.js} +5 -30
  33. package/dist/collapsible.d.ts +18 -0
  34. package/dist/collapsible.js +21 -0
  35. package/dist/{advanced-forms.d.ts → combobox.d.ts} +5 -25
  36. package/dist/{advanced-forms.js → combobox.js} +13 -49
  37. package/dist/{context-overlays.d.ts → context-menu.d.ts} +6 -28
  38. package/dist/{context-overlays.js → context-menu.js} +5 -25
  39. package/dist/css/accordion.css +11 -0
  40. package/dist/css/alert-dialog.css +11 -0
  41. package/{src → dist/css}/all.css +1 -1
  42. package/dist/css/app-shell.css +12 -0
  43. package/dist/css/autocomplete.css +15 -0
  44. package/dist/css/avatar.css +10 -0
  45. package/dist/css/badge.css +10 -0
  46. package/dist/css/bottom-navigation.css +8 -0
  47. package/dist/css/breadcrumbs.css +12 -0
  48. package/dist/css/button.css +8 -0
  49. package/dist/css/card.css +11 -0
  50. package/dist/css/chart.css +13 -0
  51. package/dist/css/checkbox-group.css +9 -0
  52. package/dist/css/checkbox.css +9 -0
  53. package/dist/css/choice-label.css +9 -0
  54. package/dist/css/code.css +13 -0
  55. package/dist/css/collapsible.css +11 -0
  56. package/dist/css/combobox.css +14 -0
  57. package/dist/css/context-menu.css +15 -0
  58. package/dist/css/date-picker.css +12 -0
  59. package/dist/css/dialog.css +10 -0
  60. package/dist/css/drawer.css +11 -0
  61. package/dist/css/empty-state.css +9 -0
  62. package/dist/css/field.css +10 -0
  63. package/dist/css/fieldset.css +8 -0
  64. package/dist/css/file-upload.css +17 -0
  65. package/dist/css/filter-bar.css +8 -0
  66. package/dist/css/form.css +8 -0
  67. package/dist/css/icon.css +8 -0
  68. package/dist/css/inline-message.css +10 -0
  69. package/dist/css/input.css +9 -0
  70. package/dist/css/layout.css +9 -0
  71. package/dist/css/link.css +9 -0
  72. package/dist/css/list.css +9 -0
  73. package/dist/css/markdown.css +18 -0
  74. package/dist/css/menu.css +14 -0
  75. package/dist/css/menubar.css +9 -0
  76. package/dist/css/meter.css +9 -0
  77. package/dist/css/native-select.css +13 -0
  78. package/dist/css/navigation-menu.css +11 -0
  79. package/dist/css/number-field.css +11 -0
  80. package/dist/css/otp-field.css +10 -0
  81. package/dist/css/page-header.css +11 -0
  82. package/dist/css/pagination.css +11 -0
  83. package/dist/css/popover.css +9 -0
  84. package/dist/css/preview-card.css +11 -0
  85. package/dist/css/progress.css +9 -0
  86. package/dist/css/radio-group.css +9 -0
  87. package/dist/css/rules/accordion.css +21 -0
  88. package/dist/css/rules/alert-dialog.css +23 -0
  89. package/dist/css/rules/app-shell.css +220 -0
  90. package/dist/css/rules/autocomplete.css +3 -0
  91. package/dist/css/rules/avatar.css +17 -0
  92. package/dist/css/rules/badge.css +17 -0
  93. package/dist/css/rules/bar.css +38 -0
  94. package/dist/css/rules/base.css +46 -0
  95. package/dist/css/rules/bottom-navigation.css +142 -0
  96. package/dist/css/rules/breadcrumbs.css +9 -0
  97. package/dist/css/rules/button.css +131 -0
  98. package/dist/css/rules/card.css +10 -0
  99. package/dist/css/rules/chart.css +256 -0
  100. package/dist/css/rules/checkbox-group.css +3 -0
  101. package/dist/css/rules/checkbox.css +25 -0
  102. package/dist/css/rules/choice-label.css +52 -0
  103. package/dist/css/rules/choice.css +104 -0
  104. package/dist/css/rules/code.css +9 -0
  105. package/dist/css/rules/collapsible.css +12 -0
  106. package/dist/css/rules/combobox.css +177 -0
  107. package/dist/css/rules/context-menu.css +9 -0
  108. package/dist/css/rules/date-picker.css +301 -0
  109. package/dist/css/rules/dialog.css +160 -0
  110. package/dist/css/rules/disclosure.css +107 -0
  111. package/dist/css/rules/drawer.css +18 -0
  112. package/dist/css/rules/empty-state.css +9 -0
  113. package/dist/css/rules/field-control.css +70 -0
  114. package/dist/css/rules/field.css +56 -0
  115. package/dist/css/rules/fieldset.css +23 -0
  116. package/dist/css/rules/file-upload.css +156 -0
  117. package/dist/css/rules/filter-bar.css +56 -0
  118. package/dist/css/rules/form.css +15 -0
  119. package/dist/css/rules/gauge.css +61 -0
  120. package/dist/css/rules/icon.css +27 -0
  121. package/dist/css/rules/inline-message.css +10 -0
  122. package/dist/css/rules/input-group.css +69 -0
  123. package/dist/css/rules/input.css +33 -0
  124. package/dist/css/rules/item.css +14 -0
  125. package/dist/css/rules/layout.css +3 -0
  126. package/dist/css/rules/link.css +9 -0
  127. package/dist/css/rules/list.css +10 -0
  128. package/dist/css/rules/markdown.css +63 -0
  129. package/dist/css/rules/menu.css +97 -0
  130. package/dist/css/rules/menubar.css +18 -0
  131. package/dist/css/rules/meter.css +3 -0
  132. package/dist/css/rules/native-select.css +3 -0
  133. package/dist/css/rules/navigation-menu.css +159 -0
  134. package/dist/css/rules/number-field.css +55 -0
  135. package/dist/css/rules/otp-field.css +68 -0
  136. package/dist/css/rules/page-header.css +3 -0
  137. package/dist/css/rules/pagination.css +3 -0
  138. package/dist/css/rules/panel.css +221 -0
  139. package/dist/css/rules/popover.css +41 -0
  140. package/dist/css/rules/popup.css +27 -0
  141. package/dist/css/rules/preview-card.css +60 -0
  142. package/dist/css/rules/progress.css +14 -0
  143. package/dist/css/rules/radio-group.css +26 -0
  144. package/dist/css/rules/scroll-area.css +101 -0
  145. package/dist/css/rules/select.css +88 -0
  146. package/dist/css/rules/separator.css +3 -0
  147. package/dist/css/rules/sheet.css +3 -0
  148. package/dist/css/rules/sizing.css +140 -0
  149. package/dist/css/rules/skeleton.css +41 -0
  150. package/dist/css/rules/slider.css +123 -0
  151. package/dist/css/rules/sparkline.css +52 -0
  152. package/dist/css/rules/spinner.css +38 -0
  153. package/dist/css/rules/stat.css +59 -0
  154. package/dist/css/rules/switch.css +50 -0
  155. package/dist/css/rules/syntax-highlighter.css +82 -0
  156. package/dist/css/rules/table.css +28 -0
  157. package/dist/css/rules/tabs.css +126 -0
  158. package/dist/css/rules/textarea.css +21 -0
  159. package/dist/css/rules/toast.css +247 -0
  160. package/dist/css/rules/toggle-group.css +3 -0
  161. package/dist/css/rules/toggle.css +27 -0
  162. package/dist/css/rules/toolbar.css +62 -0
  163. package/dist/css/rules/tooltip.css +38 -0
  164. package/dist/css/rules/tree.css +98 -0
  165. package/dist/css/rules/typography.css +3 -0
  166. package/dist/css/scroll-area.css +8 -0
  167. package/dist/css/select.css +12 -0
  168. package/dist/css/separator.css +9 -0
  169. package/dist/css/sheet.css +11 -0
  170. package/dist/css/sizing.css +7 -0
  171. package/dist/css/skeleton.css +8 -0
  172. package/dist/css/slider.css +8 -0
  173. package/dist/css/sparkline.css +8 -0
  174. package/dist/css/spinner.css +8 -0
  175. package/dist/css/stat.css +9 -0
  176. package/dist/css/styles.css +100 -0
  177. package/dist/css/switch.css +9 -0
  178. package/dist/css/syntax-highlighter.css +9 -0
  179. package/dist/css/table.css +12 -0
  180. package/dist/css/tabs.css +8 -0
  181. package/dist/css/textarea.css +10 -0
  182. package/dist/css/toast.css +11 -0
  183. package/dist/css/toggle-group.css +9 -0
  184. package/dist/css/toggle.css +10 -0
  185. package/dist/css/toolbar.css +12 -0
  186. package/dist/css/tooltip.css +9 -0
  187. package/dist/css/tree.css +10 -0
  188. package/dist/css/typography.css +9 -0
  189. package/dist/date-picker.js +3 -2
  190. package/dist/dialog.d.ts +6 -24
  191. package/dist/dialog.js +7 -20
  192. package/dist/{panels.d.ts → drawer.d.ts} +3 -34
  193. package/dist/drawer.js +47 -0
  194. package/dist/empty-state.d.ts +29 -0
  195. package/dist/empty-state.js +19 -0
  196. package/dist/field.d.ts +42 -0
  197. package/dist/field.js +21 -0
  198. package/dist/fieldset.d.ts +14 -0
  199. package/dist/fieldset.js +10 -0
  200. package/dist/file-upload.d.ts +3 -1
  201. package/dist/file-upload.js +7 -5
  202. package/dist/filter-bar.js +1 -1
  203. package/dist/form.d.ts +2 -0
  204. package/dist/form.js +7 -0
  205. package/dist/format.d.ts +25 -0
  206. package/dist/format.js +42 -0
  207. package/dist/icon.d.ts +11 -0
  208. package/dist/icon.js +19 -3
  209. package/dist/index.d.ts +61 -30
  210. package/dist/index.js +75 -33
  211. package/dist/{messages.d.ts → inline-message.d.ts} +0 -28
  212. package/dist/{messages.js → inline-message.js} +3 -18
  213. package/dist/input.js +2 -2
  214. package/dist/{foundations.d.ts → layout.d.ts} +5 -23
  215. package/dist/{foundations.js → layout.js} +4 -19
  216. package/dist/link.d.ts +6 -0
  217. package/dist/link.js +17 -0
  218. package/dist/list.d.ts +33 -0
  219. package/dist/list.js +21 -0
  220. package/dist/markdown.js +4 -5
  221. package/dist/menu.d.ts +7 -5
  222. package/dist/menu.js +12 -8
  223. package/dist/menubar.d.ts +4 -0
  224. package/dist/menubar.js +4 -0
  225. package/dist/meter.d.ts +29 -0
  226. package/dist/meter.js +13 -0
  227. package/dist/native-select.d.ts +8 -0
  228. package/dist/native-select.js +54 -0
  229. package/dist/navigation-menu.js +8 -5
  230. package/dist/number-field.d.ts +23 -0
  231. package/dist/number-field.js +33 -0
  232. package/dist/page-header.d.ts +12 -0
  233. package/dist/page-header.js +9 -0
  234. package/dist/pagination.js +3 -4
  235. package/dist/panel.d.ts +13 -0
  236. package/dist/panel.js +13 -0
  237. package/dist/parts.d.ts +19 -1
  238. package/dist/parts.js +32 -6
  239. package/dist/popover.d.ts +23 -6
  240. package/dist/popover.js +17 -7
  241. package/dist/preview-card.d.ts +29 -0
  242. package/dist/preview-card.js +27 -0
  243. package/dist/progress.d.ts +29 -0
  244. package/dist/progress.js +13 -0
  245. package/dist/radio-group.d.ts +16 -0
  246. package/dist/radio-group.js +31 -0
  247. package/dist/scroll-area.js +3 -4
  248. package/dist/select.d.ts +8 -8
  249. package/dist/select.js +19 -54
  250. package/dist/separator.d.ts +4 -0
  251. package/dist/separator.js +8 -0
  252. package/dist/sheet.d.ts +29 -0
  253. package/dist/sheet.js +39 -0
  254. package/dist/skeleton.d.ts +8 -0
  255. package/dist/skeleton.js +8 -0
  256. package/dist/slider.d.ts +40 -0
  257. package/dist/slider.js +27 -0
  258. package/dist/sparkline.d.ts +41 -0
  259. package/dist/sparkline.js +50 -0
  260. package/dist/spinner.d.ts +13 -0
  261. package/dist/spinner.js +10 -0
  262. package/dist/stat.d.ts +59 -0
  263. package/dist/stat.js +26 -0
  264. package/dist/status.d.ts +2 -20
  265. package/dist/status.js +11 -14
  266. package/dist/switch.d.ts +13 -0
  267. package/dist/switch.js +25 -0
  268. package/dist/syntax-highlighter.js +2 -1
  269. package/dist/{data.d.ts → table.d.ts} +8 -32
  270. package/dist/{data.js → table.js} +15 -30
  271. package/dist/textarea.d.ts +7 -0
  272. package/dist/textarea.js +12 -0
  273. package/dist/toast.d.ts +57 -1
  274. package/dist/toast.js +80 -8
  275. package/dist/toggle-group.d.ts +5 -0
  276. package/dist/toggle-group.js +7 -0
  277. package/dist/toggle.d.ts +7 -0
  278. package/dist/toggle.js +9 -0
  279. package/dist/{commands.d.ts → toolbar.d.ts} +0 -13
  280. package/dist/toolbar.js +14 -0
  281. package/dist/tooltip.d.ts +10 -3
  282. package/dist/tooltip.js +4 -4
  283. package/dist/tree.js +4 -2
  284. package/dist/typography.d.ts +12 -0
  285. package/dist/typography.js +14 -0
  286. package/package.json +324 -25
  287. package/dist/chevron.d.ts +0 -3
  288. package/dist/chevron.js +0 -6
  289. package/dist/commands.js +0 -27
  290. package/dist/feedback.d.ts +0 -76
  291. package/dist/feedback.js +0 -35
  292. package/dist/forms.d.ts +0 -91
  293. package/dist/forms.js +0 -109
  294. package/dist/navigation.js +0 -41
  295. package/dist/panels.js +0 -100
  296. package/src/styles.css +0 -3780
package/src/styles.css DELETED
@@ -1,3780 +0,0 @@
1
- /* Explicit component classes: no utility framework or application-wide reset. */
2
- @layer surflane.tokens, surflane.themes, surflane.base, surflane.components;
3
- @import '@surflane/design-tokens/foundations.css';
4
- @import '@surflane/design-tokens/presentation.css';
5
-
6
- @layer surflane.components {
7
- .pui-control,
8
- .pui-select {
9
- position: relative;
10
- display: inline-flex;
11
- min-width: 0;
12
- max-width: 100%;
13
- width: 100%;
14
- vertical-align: middle;
15
- }
16
- .pui-input,
17
- .pui-select-trigger {
18
- box-sizing: border-box;
19
- width: 100%;
20
- min-width: 0;
21
- height: var(--control-height);
22
- padding: 0 var(--control-padding-x);
23
- border: 1px solid var(--control-border);
24
- border-radius: var(--control-radius);
25
- background: var(--control-background);
26
- color: var(--ink);
27
- font: 400 14px/22px var(--font-body);
28
- outline: none;
29
- transition:
30
- background-color var(--duration-fast) var(--ease-out),
31
- border-color var(--duration-fast) var(--ease-out),
32
- box-shadow var(--duration-fast) var(--ease-out);
33
- }
34
- .pui-input::placeholder {
35
- color: var(--control-placeholder);
36
- opacity: 1;
37
- }
38
- .pui-input:hover:not(:disabled, [aria-disabled='true'], [readonly], :focus),
39
- .pui-select-trigger:hover:not(
40
- :disabled,
41
- [aria-disabled='true'],
42
- :focus-visible
43
- ) {
44
- background: var(--control-hover-background);
45
- border-color: var(--control-hover-border);
46
- }
47
- .pui-input:focus,
48
- .pui-select-trigger:focus-visible {
49
- background: var(--control-focus-background);
50
- border-color: var(--control-focus);
51
- box-shadow: 0 0 0 3px
52
- color-mix(in oklch, var(--control-focus) 18%, transparent);
53
- }
54
- .pui-input:disabled,
55
- .pui-select-trigger:disabled {
56
- opacity: var(--control-disabled-opacity);
57
- cursor: not-allowed;
58
- background: var(--control-disabled-background);
59
- }
60
- .pui-input[aria-invalid='true'],
61
- .pui-select-trigger[aria-invalid='true'] {
62
- border-color: var(--status-danger-fg);
63
- }
64
- .pui-control-icon {
65
- pointer-events: none;
66
- position: absolute;
67
- inset-inline-start: var(--control-padding-x);
68
- top: 50%;
69
- transform: translateY(-50%);
70
- display: flex;
71
- align-items: center;
72
- color: var(--ink-muted);
73
- z-index: 1;
74
- }
75
- .pui-control[data-leading-icon] .pui-input {
76
- padding-inline-start: calc(
77
- var(--control-padding-x) + var(--control-icon-size) +
78
- var(--control-icon-gap)
79
- );
80
- }
81
- .pui-select-trigger {
82
- display: flex;
83
- align-items: center;
84
- justify-content: space-between;
85
- gap: var(--space-2);
86
- text-align: start;
87
- cursor: pointer;
88
- }
89
- .pui-select-trigger > span:first-child {
90
- overflow: hidden;
91
- text-overflow: ellipsis;
92
- white-space: nowrap;
93
- }
94
- .pui-select-icon {
95
- display: flex;
96
- align-items: center;
97
- flex: none;
98
- color: var(--ink-muted);
99
- }
100
- .pui-positioner {
101
- z-index: var(--layer-popup);
102
- outline: none;
103
- isolation: isolate;
104
- }
105
- .pui-select-popup,
106
- .pui-popover,
107
- .pui-menu,
108
- .pui-tooltip {
109
- box-sizing: border-box;
110
- max-width: calc(100vw - 24px);
111
- border: 1px solid var(--menu-border);
112
- border-radius: var(--radius-md);
113
- background: var(--menu-background);
114
- color: var(--ink);
115
- box-shadow: var(--shadow-float);
116
- font: 400 14px/22px var(--font-body);
117
- outline: none;
118
- }
119
- .pui-tooltip-positioner {
120
- z-index: var(--layer-tooltip);
121
- }
122
- .pui-select-popup {
123
- min-width: var(--anchor-width);
124
- max-height: min(360px, var(--available-height));
125
- overflow: auto;
126
- padding: var(--space-1);
127
- overscroll-behavior: contain;
128
- scrollbar-width: thin;
129
- }
130
- .pui-select-item {
131
- position: relative;
132
- display: flex;
133
- align-items: center;
134
- gap: var(--space-2);
135
- min-height: var(--control-height);
136
- padding: 6px var(--space-3) 6px 32px;
137
- border-radius: var(--control-radius);
138
- cursor: default;
139
- outline: none;
140
- overflow-wrap: anywhere;
141
- }
142
- .pui-select-item[data-highlighted] {
143
- background: var(--menu-hover-background);
144
- }
145
- .pui-select-item[data-selected] {
146
- font-weight: 500;
147
- }
148
- .pui-select-item[data-disabled] {
149
- opacity: var(--control-disabled-opacity);
150
- }
151
- .pui-select-check {
152
- position: absolute;
153
- left: 10px;
154
- display: flex;
155
- }
156
- .pui-popover {
157
- padding: var(--space-4);
158
- max-height: var(--available-height);
159
- overflow: auto;
160
- }
161
- .pui-menu {
162
- padding: var(--space-1);
163
- min-width: 176px;
164
- }
165
- .pui-tooltip {
166
- border: 0;
167
- background: var(--tooltip-background);
168
- color: var(--tooltip-foreground);
169
- padding: 8px 12px;
170
- max-width: 256px;
171
- font-size: 12px;
172
- line-height: 18px;
173
- }
174
- .pui-button {
175
- box-sizing: border-box;
176
- height: var(--control-height);
177
- display: inline-flex;
178
- align-items: center;
179
- justify-content: center;
180
- gap: var(--space-2);
181
- min-height: var(--control-height);
182
- padding: 0 14px;
183
- border: 1px solid transparent;
184
- border-radius: var(--radius-full);
185
- font: 500 14px/20px var(--font-body);
186
- color: var(--ink);
187
- background: var(--canvas);
188
- /* A link rendered as a button drops the user-agent underline. */
189
- text-decoration: none;
190
- cursor: pointer;
191
- }
192
- .pui-button:is([data-variant='default'], [data-variant='primary']) {
193
- /* On the brand fill the layer is its ink: light ink barely moves bright cyan. */
194
- --interaction-hover-bg: oklch(from var(--on-brand) l c h / 0.08);
195
- --interaction-active-bg: oklch(from var(--on-brand) l c h / 0.14);
196
- background: var(--brand);
197
- border-color: transparent;
198
- color: var(--on-brand);
199
- }
200
- .pui-button[data-variant='outline'] {
201
- border-color: var(--line);
202
- background: transparent;
203
- }
204
- .pui-button[data-variant='ghost'] {
205
- border-color: transparent;
206
- background: transparent;
207
- }
208
- /* Hover adds the state layer over the variant's own fill, so a primary, a
209
- pressed toggle and a transparent toolbar button all step by the same amount. */
210
- .pui-button:hover:not(:disabled, [data-disabled], [data-variant='link']) {
211
- background-image: linear-gradient(
212
- var(--interaction-hover-bg),
213
- var(--interaction-hover-bg)
214
- );
215
- }
216
- .pui-button[data-variant='link']:hover:not(:disabled, [data-disabled]) {
217
- text-decoration-thickness: 2px;
218
- }
219
- .pui-button:focus-visible {
220
- outline: 2px solid var(--interaction-focus);
221
- outline-offset: 2px;
222
- }
223
- .pui-button:is(:disabled, [data-disabled], [aria-disabled='true']) {
224
- opacity: var(--control-disabled-opacity);
225
- cursor: not-allowed;
226
- }
227
- .pui-scroll-root {
228
- position: relative;
229
- min-width: 0;
230
- max-width: 100%;
231
- }
232
- .pui-scroll-viewport {
233
- max-width: 100%;
234
- overscroll-behavior: auto;
235
- scrollbar-width: none !important;
236
- }
237
- .pui-scroll-viewport::-webkit-scrollbar {
238
- display: none;
239
- }
240
- /* A horizontal scroller fades the edge that hides more content, so a cut-off table
241
- * or code line reads as scrollable before its scrollbar appears, on touch too. */
242
- .pui-scroll-root[data-overflow-x-end] > .pui-scroll-viewport {
243
- mask-image: linear-gradient(to left, transparent, #000 var(--space-6));
244
- }
245
- .pui-scroll-root[data-overflow-x-start] > .pui-scroll-viewport {
246
- mask-image: linear-gradient(to right, transparent, #000 var(--space-6));
247
- }
248
- .pui-scroll-root[data-overflow-x-start][data-overflow-x-end]
249
- > .pui-scroll-viewport {
250
- mask-image: linear-gradient(
251
- to right,
252
- transparent,
253
- #000 var(--space-6),
254
- #000 calc(100% - var(--space-6)),
255
- transparent
256
- );
257
- }
258
- .pui-scrollbar {
259
- display: flex;
260
- user-select: none;
261
- touch-action: none;
262
- padding: 2px;
263
- background: transparent;
264
- z-index: 1;
265
- opacity: 0;
266
- transition: opacity var(--duration-fast) var(--ease-out);
267
- }
268
- .pui-scrollbar[data-scrolling],
269
- .pui-scrollbar:hover,
270
- .pui-scroll-root[data-scroll-near-x]
271
- > .pui-scrollbar[data-orientation='horizontal'],
272
- .pui-scroll-root[data-scroll-near-y]
273
- > .pui-scrollbar[data-orientation='vertical'],
274
- .pui-scroll-root[data-scroll-dragging='horizontal']
275
- > .pui-scrollbar[data-orientation='horizontal'],
276
- .pui-scroll-root[data-scroll-dragging='vertical']
277
- > .pui-scrollbar[data-orientation='vertical'],
278
- .pui-scroll-root:has(> .pui-scroll-viewport:focus-visible) > .pui-scrollbar {
279
- opacity: 1;
280
- }
281
- .pui-scrollbar[data-orientation='horizontal'] {
282
- height: 10px;
283
- position: absolute;
284
- bottom: 0;
285
- left: 0;
286
- right: 0;
287
- }
288
- .pui-scrollbar[data-orientation='vertical'] {
289
- flex-direction: column;
290
- width: 10px;
291
- position: absolute;
292
- top: 0;
293
- bottom: 0;
294
- right: 0;
295
- }
296
- .pui-scroll-thumb {
297
- flex: none;
298
- border-radius: var(--radius-full);
299
- background: var(--ink-muted);
300
- opacity: 0.45;
301
- }
302
- .pui-scrollbar:hover .pui-scroll-thumb {
303
- opacity: 0.8;
304
- }
305
- /* On touch-only screens a scrollbar is a position indicator, as native mobile
306
- * scrollbars are: content scrolls by swiping, so the bar overlaying its edge
307
- * never takes a tap meant for the link or control beneath it. */
308
- @media (hover: none) and (pointer: coarse) {
309
- .pui-scrollbar {
310
- pointer-events: none;
311
- }
312
- }
313
- @media (forced-colors: active) {
314
- .pui-scrollbar {
315
- opacity: 1;
316
- }
317
- .pui-scrollbar .pui-scroll-thumb {
318
- background: CanvasText;
319
- opacity: 1;
320
- }
321
- }
322
- /* Dialog: acknowledge arrival; dismissal has no visual wait. */
323
- .pui-dialog-backdrop {
324
- position: fixed;
325
- inset: 0;
326
- z-index: var(--layer-backdrop);
327
- background: color-mix(in srgb, var(--chrome), transparent 25%);
328
- backdrop-filter: blur(3px);
329
- opacity: 1;
330
- transition: opacity var(--dialog-enter-duration) var(--motion-ease);
331
- }
332
- .pui-dialog-popup {
333
- position: fixed;
334
- top: 50%;
335
- left: 50%;
336
- transform: translate(-50%, -50%);
337
- z-index: var(--layer-dialog);
338
- margin: 0;
339
- outline: none;
340
- opacity: 1;
341
- translate: 0 0;
342
- transition:
343
- opacity var(--dialog-enter-duration) var(--motion-ease),
344
- translate var(--dialog-enter-duration) var(--motion-spatial-ease);
345
- }
346
- .pui-dialog-popup[data-starting-style] {
347
- opacity: 0;
348
- translate: 0 var(--dialog-enter-offset);
349
- }
350
- .pui-dialog-backdrop[data-starting-style] {
351
- opacity: 0;
352
- }
353
- .pui-dialog-popup[data-ending-style],
354
- .pui-dialog-backdrop[data-ending-style] {
355
- transition: none;
356
- transition-duration: var(--dialog-exit-duration);
357
- opacity: 0;
358
- }
359
- @media (prefers-reduced-motion: reduce) {
360
- .pui-dialog-popup,
361
- .pui-dialog-backdrop {
362
- transition: none;
363
- }
364
- .pui-dialog-popup {
365
- translate: none;
366
- }
367
- }
368
- @media (prefers-reduced-motion: reduce) {
369
- .pui-input,
370
- .pui-select-trigger {
371
- transition: none;
372
- }
373
- }
374
-
375
- .pui-button[data-size='xs'] {
376
- height: 24px;
377
- min-height: 24px;
378
- padding-inline: 8px;
379
- font-size: 12px;
380
- gap: 4px;
381
- }
382
- .pui-button[data-size^='icon'] {
383
- width: var(--control-height);
384
- padding: 0;
385
- }
386
- @media (max-width: 760px) {
387
- .pui-button {
388
- min-height: 44px;
389
- }
390
- }
391
-
392
- .pui-button[data-variant='secondary'] {
393
- background: var(--selected);
394
- color: var(--ink);
395
- }
396
- .pui-button[data-variant='destructive'] {
397
- background: var(--status-danger-bg);
398
- color: var(--status-danger-fg);
399
- border-color: transparent;
400
- }
401
- .pui-button[data-variant='link'] {
402
- background: transparent;
403
- color: var(--brand-ink);
404
- border-color: transparent;
405
- text-decoration: underline;
406
- }
407
-
408
- /* Edge panels share surfaces and layers; only Drawer adds native Base UI gestures. */
409
- .pui-panel-layer {
410
- position: fixed;
411
- inset: 0;
412
- z-index: var(--layer-dialog);
413
- pointer-events: none;
414
- isolation: isolate;
415
- }
416
- .pui-panel-backdrop {
417
- position: fixed;
418
- inset: 0;
419
- z-index: 0;
420
- pointer-events: auto;
421
- background: color-mix(in srgb, var(--chrome), transparent 25%);
422
- backdrop-filter: blur(3px);
423
- opacity: calc(1 - var(--drawer-swipe-progress, 0));
424
- transition: opacity var(--duration-base) var(--ease-out);
425
- }
426
- .pui-panel-backdrop[data-starting-style],
427
- .pui-panel-backdrop[data-ending-style] {
428
- opacity: 0;
429
- }
430
- .pui-panel-viewport {
431
- position: fixed;
432
- inset: 0;
433
- z-index: 1;
434
- display: flex;
435
- padding: 12px;
436
- pointer-events: none;
437
- }
438
- .pui-panel-viewport[data-side='right'] {
439
- justify-content: flex-end;
440
- }
441
- .pui-panel-viewport[data-side='left'] {
442
- justify-content: flex-start;
443
- }
444
- .pui-panel-viewport[data-side='top'] {
445
- align-items: flex-start;
446
- justify-content: center;
447
- }
448
- .pui-panel-viewport[data-side='bottom'] {
449
- align-items: flex-end;
450
- justify-content: center;
451
- }
452
- .pui-panel {
453
- --panel-width: 440px;
454
- --panel-enter-x: 0px;
455
- --panel-enter-y: 0px;
456
- position: relative;
457
- display: flex;
458
- flex-direction: column;
459
- width: min(var(--panel-width), 100%);
460
- min-width: 0;
461
- max-height: 100%;
462
- overflow: hidden;
463
- pointer-events: auto;
464
- background: var(--canvas);
465
- color: var(--ink);
466
- border-radius: var(--radius-sheet);
467
- box-shadow: var(--shadow-float);
468
- outline: none;
469
- font: 400 14px/22px var(--font-body);
470
- transform: translate(
471
- var(--drawer-swipe-movement-x, 0px),
472
- calc(
473
- var(--drawer-swipe-movement-y, 0px) +
474
- var(--drawer-snap-point-offset, 0px)
475
- )
476
- );
477
- transition: transform var(--duration-base) var(--ease-out);
478
- }
479
- .pui-panel[data-size='sm'] {
480
- --panel-width: 320px;
481
- }
482
- .pui-panel[data-size='lg'] {
483
- --panel-width: 640px;
484
- }
485
- .pui-panel[data-side='right'] {
486
- --panel-enter-x: calc(100% + 12px);
487
- height: 100%;
488
- }
489
- .pui-panel[data-side='left'] {
490
- --panel-enter-x: calc(-100% - 12px);
491
- height: 100%;
492
- }
493
- .pui-panel[data-side='top'] {
494
- --panel-enter-y: calc(-100% - 12px);
495
- max-height: min(85dvh, 100%);
496
- }
497
- .pui-panel[data-side='bottom'] {
498
- --panel-enter-y: calc(100% + 12px);
499
- max-height: min(85dvh, 100%);
500
- }
501
- .pui-panel[data-starting-style],
502
- .pui-panel[data-ending-style] {
503
- transform: translate(var(--panel-enter-x), var(--panel-enter-y));
504
- }
505
- .pui-panel[data-swiping],
506
- .pui-panel-backdrop[data-swiping] {
507
- transition: none;
508
- }
509
- .pui-panel-content {
510
- display: flex;
511
- flex-direction: column;
512
- min-height: 0;
513
- flex: 1;
514
- }
515
- .pui-panel-header {
516
- flex: none;
517
- padding: 24px 68px 20px 24px;
518
- }
519
- .pui-panel-title {
520
- margin: 0;
521
- font: 500 22px/28px var(--font-display);
522
- letter-spacing: var(--tracking);
523
- }
524
- .pui-panel-description {
525
- margin: 8px 0 0;
526
- color: var(--ink-body);
527
- font: 400 14px/22px var(--font-body);
528
- }
529
- .pui-panel-body {
530
- flex: 1 1 auto;
531
- min-height: 0;
532
- overflow: auto;
533
- padding: 0 24px 24px;
534
- overscroll-behavior: contain;
535
- scrollbar-width: thin;
536
- scrollbar-color: var(--scrollbar-thumb) var(--scrollbar-track);
537
- }
538
- .pui-panel-body::-webkit-scrollbar {
539
- width: var(--scrollbar-size);
540
- height: var(--scrollbar-size);
541
- }
542
- .pui-panel-body::-webkit-scrollbar-thumb {
543
- border-radius: var(--scrollbar-radius);
544
- background: var(--scrollbar-thumb);
545
- }
546
- .pui-panel-body::-webkit-scrollbar-thumb:hover {
547
- background: var(--scrollbar-thumb-hover);
548
- }
549
- .pui-panel-footer {
550
- flex: none;
551
- display: flex;
552
- justify-content: flex-end;
553
- flex-wrap: wrap;
554
- gap: var(--space-2);
555
- padding: 16px 24px max(20px, env(safe-area-inset-bottom));
556
- background: var(--surface);
557
- }
558
- .pui-panel-close {
559
- position: absolute;
560
- top: 16px;
561
- right: 16px;
562
- z-index: 1;
563
- }
564
- .pui-drawer-handle {
565
- flex: none;
566
- width: 36px;
567
- height: 4px;
568
- margin: 10px auto 0;
569
- border-radius: var(--radius-full);
570
- background: var(--line);
571
- }
572
- .pui-drawer[data-side='left'] > .pui-drawer-handle,
573
- .pui-drawer[data-side='right'] > .pui-drawer-handle {
574
- display: none;
575
- }
576
- @media (prefers-reduced-motion: reduce) {
577
- .pui-panel,
578
- .pui-panel-backdrop {
579
- transition: none;
580
- }
581
- }
582
- .pui-panel-layer,
583
- .pui-panel-viewport,
584
- .pui-panel,
585
- .pui-panel-content,
586
- .pui-panel-header,
587
- .pui-panel-body,
588
- .pui-panel-footer {
589
- box-sizing: border-box;
590
- }
591
- .pui-panel-viewport[data-side='bottom'] {
592
- bottom: var(--drawer-keyboard-inset, 0px);
593
- }
594
-
595
- .pui-dialog-close {
596
- position: absolute;
597
- top: 16px;
598
- right: 16px;
599
- z-index: 1;
600
- }
601
-
602
- /* Structural chrome never reserves scrollbar space; scrolling belongs to Body. */
603
- .pui-dialog-content {
604
- box-sizing: border-box;
605
- display: flex;
606
- flex-direction: column;
607
- width: min(640px, calc(100% - 32px));
608
- max-height: calc(100dvh - 32px);
609
- overflow: hidden;
610
- scrollbar-gutter: auto;
611
- padding: 0;
612
- border: 1px solid var(--line);
613
- border-radius: var(--radius-sheet);
614
- background: var(--canvas);
615
- color: var(--ink);
616
- box-shadow: var(--shadow-float);
617
- font: 400 14px/22px var(--font-body);
618
- }
619
- .pui-dialog-header,
620
- .pui-dialog-body,
621
- .pui-dialog-footer {
622
- box-sizing: border-box;
623
- min-width: 0;
624
- }
625
- .pui-dialog-header,
626
- .pui-dialog-footer {
627
- flex: none;
628
- align-self: stretch;
629
- }
630
- .pui-dialog-header {
631
- padding: 24px 72px 20px 24px;
632
- border-bottom: 1px solid var(--line);
633
- }
634
- .pui-dialog-header h2 {
635
- margin: 0;
636
- font: 500 22px/28px var(--font-display);
637
- }
638
- .pui-dialog-header p {
639
- margin: 8px 0 0;
640
- color: var(--ink-body);
641
- }
642
- .pui-dialog-body {
643
- flex: 1 1 auto;
644
- min-height: 0;
645
- overflow: auto;
646
- padding: 24px;
647
- overscroll-behavior: contain;
648
- scrollbar-width: thin;
649
- scrollbar-color: var(--scrollbar-thumb) var(--scrollbar-track);
650
- }
651
- .pui-dialog-body::-webkit-scrollbar {
652
- width: var(--scrollbar-size);
653
- height: var(--scrollbar-size);
654
- }
655
- .pui-dialog-body::-webkit-scrollbar-thumb {
656
- background: var(--scrollbar-thumb);
657
- border-radius: var(--scrollbar-radius);
658
- }
659
- .pui-dialog-body::-webkit-scrollbar-thumb:hover {
660
- background: var(--scrollbar-thumb-hover);
661
- }
662
- .pui-dialog-footer {
663
- display: flex;
664
- justify-content: flex-end;
665
- flex-wrap: wrap;
666
- gap: var(--space-2);
667
- padding: 20px 24px;
668
- border-top: 1px solid var(--line);
669
- }
670
- .pui-dialog-close:disabled {
671
- opacity: var(--control-disabled-opacity);
672
- cursor: not-allowed;
673
- }
674
-
675
- .pui-confirm-content {
676
- width: min(420px, calc(100% - 32px));
677
- }
678
- .pui-confirm-content .pui-dialog-header {
679
- padding-inline-end: 24px;
680
- border-bottom: 0;
681
- }
682
- .pui-confirm-content .pui-dialog-footer {
683
- border-top: 0;
684
- padding-top: 8px;
685
- }
686
-
687
- /* Form and selection primitives: semantic labels, consistent control states. */
688
- .pui-form,
689
- .pui-field {
690
- display: flex;
691
- flex-direction: column;
692
- min-width: 0;
693
- }
694
- .pui-form {
695
- gap: var(--space-6);
696
- }
697
- .pui-field {
698
- gap: var(--space-2);
699
- }
700
- .pui-field-label {
701
- display: block;
702
- margin: 0;
703
- color: var(--ink);
704
- font: 400 var(--type-body-size)/var(--type-body-leading) var(--font-body);
705
- }
706
- .pui-field-description,
707
- .pui-field-error {
708
- margin: 0;
709
- font: 400 var(--type-caption-size)/var(--type-caption-leading)
710
- var(--font-body);
711
- overflow-wrap: anywhere;
712
- }
713
- .pui-field-description {
714
- color: var(--ink-muted);
715
- }
716
- .pui-field-error {
717
- color: var(--status-danger-fg);
718
- }
719
- .pui-fieldset {
720
- min-width: 0;
721
- margin: 0;
722
- padding: 0;
723
- border: 0;
724
- display: flex;
725
- flex-direction: column;
726
- gap: var(--space-4);
727
- }
728
- .pui-fieldset-legend {
729
- padding: 0;
730
- margin-bottom: var(--space-4);
731
- color: var(--ink);
732
- font: 500 var(--type-subsection-size)/var(--type-subsection-leading)
733
- var(--font-body);
734
- }
735
- .pui-field-item {
736
- display: grid;
737
- grid-template-columns: auto minmax(0, 1fr);
738
- align-items: center;
739
- column-gap: var(--space-3);
740
- row-gap: var(--space-1);
741
- min-height: var(--control-height);
742
- }
743
- .pui-field-item > :is(.pui-field-description, .pui-field-error) {
744
- grid-column: 2;
745
- }
746
- .pui-choice-group {
747
- display: flex;
748
- flex-direction: column;
749
- gap: var(--space-2);
750
- min-width: 0;
751
- }
752
- .pui-textarea {
753
- height: auto;
754
- min-height: calc(var(--control-height) * 2.5);
755
- padding-block: var(--space-3);
756
- resize: vertical;
757
- scrollbar-width: thin;
758
- scrollbar-color: var(--scrollbar-thumb) var(--scrollbar-track);
759
- }
760
- .pui-textarea[readonly],
761
- .pui-input[readonly] {
762
- cursor: text;
763
- }
764
- .pui-checkbox,
765
- .pui-radio,
766
- .pui-switch {
767
- box-sizing: border-box;
768
- display: inline-flex;
769
- align-items: center;
770
- justify-content: center;
771
- flex: none;
772
- width: var(--control-choice-size);
773
- height: var(--control-choice-size);
774
- border: 1px solid var(--control-choice-border);
775
- border-radius: var(--control-choice-radius);
776
- background: var(--control-background);
777
- color: var(--ink);
778
- outline: none;
779
- cursor: pointer;
780
- transition:
781
- background-color var(--duration-fast) var(--ease-out),
782
- border-color var(--duration-fast) var(--ease-out),
783
- box-shadow var(--duration-fast) var(--ease-out);
784
- }
785
- /* With no text inside, an inline control rests on the baseline, above the middle of a
786
- * table row. In a cell it becomes a block, so the cell centers it exactly, and it
787
- * still follows the cell's alignment. Put a labelled control in a pui-choice-label. */
788
- .pui-table-cell > :is(.pui-checkbox, .pui-radio, .pui-switch) {
789
- display: flex;
790
- }
791
- .pui-table-cell[data-align='center']
792
- > :is(.pui-checkbox, .pui-radio, .pui-switch) {
793
- margin-inline: auto;
794
- }
795
- .pui-table-cell[data-align='end']
796
- > :is(.pui-checkbox, .pui-radio, .pui-switch) {
797
- margin-inline-start: auto;
798
- }
799
- .pui-checkbox:hover:not([data-disabled], [data-readonly]),
800
- .pui-radio:hover:not([data-disabled], [data-readonly]),
801
- .pui-switch:hover:not([data-disabled], [data-readonly]) {
802
- border-color: var(--control-choice-hover-border);
803
- background: var(--control-hover-background);
804
- }
805
- .pui-checkbox:is([data-checked], [data-indeterminate]),
806
- .pui-radio[data-checked],
807
- .pui-switch[data-checked] {
808
- background: var(--control-choice-selected-bg);
809
- border-color: var(--control-choice-selected-border);
810
- color: var(--control-choice-selected-fg);
811
- }
812
- /* Label hover shares the same feedback as the small control itself. */
813
- .pui-choice-label:hover
814
- :is(.pui-checkbox, .pui-radio, .pui-switch):not(
815
- [data-disabled],
816
- [data-readonly]
817
- ) {
818
- background: var(--control-hover-background);
819
- border-color: var(--control-choice-hover-border);
820
- }
821
- :is(.pui-checkbox, .pui-radio, .pui-switch):is(
822
- [data-checked],
823
- [data-indeterminate]
824
- ):hover:not([data-disabled], [data-readonly]),
825
- .pui-choice-label:hover
826
- :is(.pui-checkbox, .pui-radio, .pui-switch):is(
827
- [data-checked],
828
- [data-indeterminate]
829
- ):not([data-disabled], [data-readonly]) {
830
- background: var(--control-choice-selected-hover-bg);
831
- border-color: var(--control-choice-selected-border);
832
- }
833
- .pui-checkbox:focus-visible,
834
- .pui-radio:focus-visible,
835
- .pui-switch:focus-visible {
836
- outline: 2px solid var(--interaction-focus);
837
- outline-offset: 3px;
838
- }
839
- .pui-checkbox[data-disabled],
840
- .pui-radio[data-disabled],
841
- .pui-switch[data-disabled] {
842
- opacity: var(--control-disabled-opacity);
843
- cursor: not-allowed;
844
- }
845
- .pui-checkbox[data-readonly],
846
- .pui-radio[data-readonly],
847
- .pui-switch[data-readonly] {
848
- cursor: default;
849
- }
850
- :is(.pui-checkbox, .pui-radio, .pui-switch)[data-invalid],
851
- .pui-choice-label:hover
852
- :is(.pui-checkbox, .pui-radio, .pui-switch)[data-invalid] {
853
- border-color: var(--status-danger-fg);
854
- }
855
- .pui-checkbox-indicator {
856
- display: flex;
857
- align-items: center;
858
- justify-content: center;
859
- }
860
- .pui-checkbox-mixed {
861
- display: none;
862
- }
863
- .pui-checkbox[data-indeterminate] .pui-checkbox-check {
864
- display: none;
865
- }
866
- .pui-checkbox[data-indeterminate] .pui-checkbox-mixed {
867
- display: block;
868
- }
869
- .pui-radio {
870
- border-radius: var(--radius-full);
871
- }
872
- .pui-radio-indicator {
873
- width: 8px;
874
- height: 8px;
875
- border-radius: var(--radius-full);
876
- background: currentColor;
877
- }
878
- .pui-switch {
879
- width: var(--control-switch-width);
880
- height: var(--control-switch-height);
881
- padding: 3px;
882
- border-radius: var(--radius-full);
883
- justify-content: flex-start;
884
- }
885
- .pui-switch-thumb {
886
- width: var(--control-switch-thumb);
887
- height: var(--control-switch-thumb);
888
- border-radius: var(--radius-full);
889
- background: var(--ink-muted);
890
- transform: translateX(0);
891
- transition:
892
- transform var(--duration-fast) var(--ease-out),
893
- background-color var(--duration-fast) var(--ease-out);
894
- }
895
- .pui-switch[data-checked] .pui-switch-thumb {
896
- background: var(--on-brand);
897
- transform: translateX(
898
- calc(var(--control-switch-width) - var(--control-switch-thumb) - 8px)
899
- );
900
- }
901
- .pui-switch:dir(rtl)[data-checked] .pui-switch-thumb {
902
- transform: translateX(
903
- calc(
904
- -1 * (var(--control-switch-width) - var(--control-switch-thumb) - 8px)
905
- )
906
- );
907
- }
908
- @media (prefers-reduced-motion: reduce) {
909
- .pui-checkbox,
910
- .pui-radio,
911
- .pui-switch,
912
- .pui-switch-thumb {
913
- transition: none;
914
- }
915
- }
916
- @media (forced-colors: active) {
917
- .pui-checkbox,
918
- .pui-radio,
919
- .pui-switch {
920
- border-color: ButtonText;
921
- }
922
- .pui-checkbox:is([data-checked], [data-indeterminate]),
923
- .pui-radio[data-checked],
924
- .pui-switch[data-checked] {
925
- background: Highlight;
926
- border-color: Highlight;
927
- color: HighlightText;
928
- forced-color-adjust: none;
929
- }
930
- .pui-switch[data-checked] .pui-switch-thumb {
931
- background: HighlightText;
932
- }
933
- .pui-switch-thumb {
934
- background: ButtonText;
935
- }
936
- }
937
-
938
- .pui-choice-label {
939
- display: flex;
940
- flex-direction: row;
941
- align-items: center;
942
- gap: var(--space-3);
943
- min-height: var(--control-height);
944
- width: fit-content;
945
- max-width: 100%;
946
- cursor: pointer;
947
- color: var(--ink-body);
948
- font: 400 var(--type-body-size)/var(--type-body-leading) var(--font-body);
949
- }
950
- .pui-choice-label:has([data-disabled]) {
951
- cursor: not-allowed;
952
- }
953
- .pui-choice-label > span:last-child {
954
- min-width: 0;
955
- overflow-wrap: anywhere;
956
- }
957
-
958
- .pui-choice-label:has([data-readonly]) {
959
- cursor: default;
960
- }
961
-
962
- /* Navigation: whole-surface selection and stable controls. */
963
- .pui-tabs {
964
- min-width: 0;
965
- }
966
- .pui-tabs-list {
967
- display: flex;
968
- gap: var(--space-1);
969
- position: relative;
970
- min-width: 0;
971
- max-width: 100%;
972
- padding: var(--space-1);
973
- background: var(--surface);
974
- border-radius: var(--radius-md);
975
- overflow: auto;
976
- scrollbar-width: thin;
977
- scrollbar-color: var(--scrollbar-thumb) transparent;
978
- }
979
- .pui-tabs-tab {
980
- box-sizing: border-box;
981
- flex: none;
982
- position: relative;
983
- z-index: 1;
984
- border: 0;
985
- border-radius: var(--control-radius);
986
- min-height: var(--control-height);
987
- padding: 0 var(--space-3);
988
- background: transparent;
989
- color: var(--ink-muted);
990
- font: 400 var(--type-body-size)/var(--type-body-leading) var(--font-body);
991
- cursor: pointer;
992
- white-space: nowrap;
993
- outline: none;
994
- }
995
- .pui-tabs-tab:hover:not(:disabled):not([data-disabled]) {
996
- color: var(--ink);
997
- background: var(--interaction-hover-bg);
998
- }
999
- .pui-tabs-tab:active:not(:disabled):not([data-disabled]) {
1000
- background: var(--interaction-active-bg);
1001
- }
1002
- .pui-tabs-tab[data-active] {
1003
- background: var(--canvas);
1004
- color: var(--ink);
1005
- font-weight: 500;
1006
- }
1007
- .pui-tabs-tab:focus-visible {
1008
- outline: 2px solid var(--interaction-focus);
1009
- outline-offset: -3px;
1010
- }
1011
- .pui-tabs-tab:is(:disabled, [data-disabled]) {
1012
- opacity: var(--control-disabled-opacity);
1013
- cursor: not-allowed;
1014
- }
1015
- .pui-tabs-panel {
1016
- min-width: 0;
1017
- padding-block: var(--space-4);
1018
- outline: none;
1019
- overflow-wrap: anywhere;
1020
- }
1021
- .pui-tabs-panel:focus-visible {
1022
- outline: 2px solid var(--interaction-focus);
1023
- outline-offset: 3px;
1024
- border-radius: var(--radius-md);
1025
- }
1026
- .pui-tabs-indicator {
1027
- position: absolute;
1028
- top: var(--active-tab-top);
1029
- left: var(--active-tab-left);
1030
- width: var(--active-tab-width);
1031
- height: var(--active-tab-height);
1032
- box-sizing: border-box;
1033
- border: 0;
1034
- background: var(--canvas);
1035
- border-radius: var(--control-radius);
1036
- pointer-events: none;
1037
- }
1038
- .pui-tabs-list:has(.pui-tabs-indicator) .pui-tabs-tab[data-active] {
1039
- background: transparent;
1040
- border-color: transparent;
1041
- }
1042
- .pui-tabs[data-orientation='vertical'] {
1043
- display: grid;
1044
- grid-template-columns: minmax(0, 180px) minmax(0, 1fr);
1045
- gap: var(--space-6);
1046
- align-items: start;
1047
- }
1048
- .pui-tabs-list[data-orientation='vertical'] {
1049
- flex-direction: column;
1050
- }
1051
- .pui-tabs-list[data-orientation='vertical'] .pui-tabs-tab {
1052
- text-align: start;
1053
- }
1054
- .pui-tabs[data-orientation='vertical'] > .pui-tabs-panel {
1055
- padding-block: var(--space-1);
1056
- }
1057
- .pui-accordion {
1058
- display: grid;
1059
- gap: var(--space-2);
1060
- min-width: 0;
1061
- }
1062
- .pui-accordion-item,
1063
- .pui-collapsible {
1064
- border-radius: var(--radius-md);
1065
- min-width: 0;
1066
- }
1067
- .pui-accordion-item[data-open],
1068
- .pui-collapsible[data-open] {
1069
- background: var(--surface);
1070
- }
1071
- .pui-accordion-header {
1072
- margin: 0;
1073
- font: inherit;
1074
- }
1075
- .pui-disclosure-trigger {
1076
- display: flex;
1077
- align-items: center;
1078
- justify-content: space-between;
1079
- gap: var(--space-3);
1080
- width: 100%;
1081
- min-height: var(--control-height);
1082
- padding: var(--space-3) var(--space-4);
1083
- border: 0;
1084
- border-radius: var(--radius-md);
1085
- background: transparent;
1086
- color: var(--ink);
1087
- font: 500 var(--type-body-size)/var(--type-body-leading) var(--font-body);
1088
- text-align: start;
1089
- cursor: pointer;
1090
- outline: none;
1091
- }
1092
- .pui-disclosure-label {
1093
- min-width: 0;
1094
- overflow-wrap: anywhere;
1095
- }
1096
- .pui-disclosure-trigger:hover:not(:disabled) {
1097
- background: var(--interaction-hover-bg);
1098
- }
1099
- .pui-disclosure-trigger:active:not(:disabled) {
1100
- background: var(--interaction-active-bg);
1101
- }
1102
- .pui-disclosure-trigger:focus-visible {
1103
- outline: 2px solid var(--interaction-focus);
1104
- outline-offset: -2px;
1105
- }
1106
- .pui-disclosure-trigger:disabled {
1107
- opacity: var(--control-disabled-opacity);
1108
- cursor: not-allowed;
1109
- }
1110
- .pui-disclosure-chevron {
1111
- flex: none;
1112
- transition: transform var(--duration-fast) var(--ease-out);
1113
- }
1114
- .pui-disclosure-trigger[data-panel-open] > .pui-disclosure-chevron {
1115
- transform: rotate(90deg);
1116
- }
1117
- .pui-disclosure-trigger:dir(rtl) > .pui-disclosure-chevron {
1118
- transform: rotate(180deg);
1119
- }
1120
- .pui-disclosure-trigger:dir(rtl)[data-panel-open] > .pui-disclosure-chevron {
1121
- transform: rotate(90deg);
1122
- }
1123
- .pui-accordion-panel,
1124
- .pui-collapsible-panel {
1125
- overflow: clip;
1126
- opacity: 1;
1127
- transition:
1128
- height var(--motion-reveal) var(--motion-ease),
1129
- opacity var(--motion-reveal) var(--motion-ease);
1130
- }
1131
- .pui-accordion-panel {
1132
- height: var(--accordion-panel-height);
1133
- }
1134
- .pui-collapsible-panel {
1135
- height: var(--collapsible-panel-height);
1136
- }
1137
- .pui-accordion-panel[data-starting-style],
1138
- .pui-collapsible-panel[data-starting-style] {
1139
- height: 0;
1140
- opacity: 0;
1141
- }
1142
- .pui-accordion-panel[data-ending-style],
1143
- .pui-collapsible-panel[data-ending-style] {
1144
- height: 0;
1145
- opacity: 0;
1146
- }
1147
- .pui-collapsible-panel[data-ending-style] {
1148
- transition-duration: 0ms;
1149
- }
1150
- .pui-accordion-panel[data-ending-style] {
1151
- pointer-events: none;
1152
- }
1153
- .pui-disclosure-body {
1154
- padding: var(--space-2) var(--space-4) var(--space-4);
1155
- overflow-wrap: anywhere;
1156
- min-width: 0;
1157
- }
1158
- .pui-disclosure-body > :first-child {
1159
- margin-top: 0;
1160
- }
1161
- .pui-disclosure-body > :last-child {
1162
- margin-bottom: 0;
1163
- }
1164
- @media (max-width: 760px) {
1165
- .pui-tabs[data-orientation='vertical'] {
1166
- grid-template-columns: minmax(0, 1fr);
1167
- gap: var(--space-3);
1168
- }
1169
- }
1170
- @media (prefers-reduced-motion: reduce) {
1171
- .pui-disclosure-chevron,
1172
- .pui-accordion-panel,
1173
- .pui-collapsible-panel {
1174
- transition: none;
1175
- }
1176
- }
1177
- @media (forced-colors: active) {
1178
- .pui-tabs-tab[data-active] {
1179
- background: Highlight;
1180
- color: HighlightText;
1181
- forced-color-adjust: none;
1182
- }
1183
- .pui-tabs-indicator {
1184
- background: Highlight;
1185
- forced-color-adjust: none;
1186
- }
1187
- }
1188
-
1189
- /* Feedback: completion and measurement share geometry, not semantics. */
1190
- .pui-gauge {
1191
- display: grid;
1192
- grid-template-columns: minmax(0, 1fr) auto;
1193
- gap: var(--space-2) var(--space-4);
1194
- min-width: 0;
1195
- color: var(--ink);
1196
- }
1197
- .pui-gauge-label {
1198
- font-weight: var(--weight-regular);
1199
- overflow-wrap: anywhere;
1200
- }
1201
- .pui-gauge-value {
1202
- color: var(--ink-body);
1203
- font-variant-numeric: tabular-nums;
1204
- }
1205
- .pui-gauge-track {
1206
- grid-column: 1 / -1;
1207
- position: relative;
1208
- height: var(--space-2);
1209
- overflow: hidden;
1210
- border-radius: var(--radius-full);
1211
- background: var(--surface);
1212
- }
1213
- .pui-gauge-indicator {
1214
- background: var(--ink-body);
1215
- border-radius: inherit;
1216
- transition: width var(--duration-base) var(--ease-out);
1217
- }
1218
- .pui-progress .pui-gauge-indicator {
1219
- background: var(--brand);
1220
- }
1221
- .pui-gauge-indicator[data-indeterminate] {
1222
- width: 40%;
1223
- height: inherit;
1224
- animation: pui-progress-pulse 1.4s ease-in-out infinite;
1225
- }
1226
- .pui-spinner {
1227
- display: inline-flex;
1228
- align-items: center;
1229
- justify-content: center;
1230
- flex: none;
1231
- color: var(--ink-body);
1232
- width: 20px;
1233
- height: 20px;
1234
- vertical-align: middle;
1235
- }
1236
- .pui-spinner > svg {
1237
- width: 100%;
1238
- height: 100%;
1239
- animation: pui-feedback-spin 1s linear infinite;
1240
- }
1241
-
1242
- .pui-skeleton {
1243
- display: block;
1244
- min-width: 0;
1245
- width: 100%;
1246
- height: 1em;
1247
- border-radius: var(--radius-sm);
1248
- background: var(--surface);
1249
- animation: pui-progress-pulse 1.4s ease-in-out infinite;
1250
- }
1251
- .pui-skeleton[data-shape='block'] {
1252
- height: 96px;
1253
- border-radius: var(--radius-md);
1254
- }
1255
- .pui-skeleton[data-shape='circle'] {
1256
- width: 36px;
1257
- height: 36px;
1258
- border-radius: 50%;
1259
- flex: none;
1260
- }
1261
- @keyframes pui-feedback-spin {
1262
- to {
1263
- transform: rotate(360deg);
1264
- }
1265
- }
1266
- @keyframes pui-progress-pulse {
1267
- 50% {
1268
- opacity: 0.45;
1269
- }
1270
- }
1271
- @media (prefers-reduced-motion: reduce) {
1272
- .pui-gauge-indicator,
1273
- .pui-gauge-indicator[data-indeterminate],
1274
- .pui-spinner > svg,
1275
- .pui-skeleton {
1276
- animation: none;
1277
- transition: none;
1278
- }
1279
- }
1280
- @media (forced-colors: active) {
1281
- .pui-gauge-track {
1282
- background: Canvas;
1283
- outline: 1px solid CanvasText;
1284
- }
1285
- .pui-gauge-indicator,
1286
- .pui-progress .pui-gauge-indicator,
1287
- .pui-skeleton {
1288
- background: CanvasText;
1289
- }
1290
- }
1291
-
1292
- .pui-combobox-group,
1293
- .pui-number-group {
1294
- box-sizing: border-box;
1295
- display: flex;
1296
- align-items: center;
1297
- min-width: 0;
1298
- width: 100%;
1299
- min-height: var(--control-height);
1300
- border: 1px solid var(--control-border);
1301
- border-radius: var(--control-radius);
1302
- background: var(--control-background);
1303
- transition:
1304
- background-color var(--duration-fast) var(--ease-out),
1305
- border-color var(--duration-fast) var(--ease-out),
1306
- box-shadow var(--duration-fast) var(--ease-out);
1307
- }
1308
- .pui-combobox-group:hover,
1309
- .pui-number-group:hover {
1310
- border-color: var(--control-hover-border);
1311
- background: var(--control-hover-background);
1312
- }
1313
- .pui-combobox-group:focus-within,
1314
- .pui-number-group:focus-within {
1315
- border-color: var(--control-focus);
1316
- box-shadow: 0 0 0 3px
1317
- color-mix(in srgb, var(--control-focus) 18%, transparent);
1318
- }
1319
- .pui-combobox-group > .pui-combobox-input {
1320
- flex: 1;
1321
- min-width: 0;
1322
- width: 0;
1323
- border: 0;
1324
- background: transparent;
1325
- box-shadow: none;
1326
- }
1327
- .pui-combobox-action,
1328
- .pui-number-step,
1329
- .pui-combobox-chip-remove {
1330
- display: inline-flex;
1331
- align-items: center;
1332
- justify-content: center;
1333
- flex: none;
1334
- width: var(--control-height);
1335
- height: var(--control-height);
1336
- padding: 0;
1337
- border: 0;
1338
- border-radius: var(--control-radius);
1339
- background: transparent;
1340
- color: var(--ink-body);
1341
- cursor: pointer;
1342
- }
1343
- .pui-combobox-action:focus-visible,
1344
- .pui-number-step:focus-visible,
1345
- .pui-combobox-chip-remove:focus-visible {
1346
- outline: 2px solid var(--interaction-focus);
1347
- outline-offset: -3px;
1348
- }
1349
- .pui-combobox-group[data-disabled],
1350
- .pui-number-group[data-disabled] {
1351
- opacity: var(--control-disabled-opacity);
1352
- cursor: not-allowed;
1353
- }
1354
- .pui-combobox-action[data-disabled],
1355
- .pui-number-step[data-disabled],
1356
- .pui-combobox-chip-remove[data-disabled] {
1357
- opacity: var(--control-disabled-opacity);
1358
- cursor: not-allowed;
1359
- }
1360
- .pui-combobox-popup {
1361
- box-sizing: border-box;
1362
- width: var(--anchor-width);
1363
- max-width: calc(100vw - 24px);
1364
- max-height: var(--available-height);
1365
- overflow: auto;
1366
- padding: var(--space-1);
1367
- border: 1px solid var(--menu-border);
1368
- border-radius: var(--radius-md);
1369
- background: var(--menu-background);
1370
- color: var(--ink);
1371
- box-shadow: var(--shadow-float);
1372
- font: 400 14px/22px var(--font-body);
1373
- outline: none;
1374
- transition:
1375
- opacity var(--duration-fast) var(--ease-out),
1376
- transform var(--duration-fast) var(--ease-out);
1377
- }
1378
- .pui-combobox-popup[data-starting-style] {
1379
- opacity: 0;
1380
- transform: translateY(4px);
1381
- }
1382
- .pui-combobox-popup[data-ending-style] {
1383
- opacity: 0;
1384
- transition: none;
1385
- }
1386
- .pui-combobox-list {
1387
- max-height: min(280px, var(--available-height));
1388
- overflow: auto;
1389
- }
1390
- .pui-combobox-item {
1391
- display: flex;
1392
- align-items: center;
1393
- gap: var(--space-2);
1394
- padding: var(--space-2) var(--space-3);
1395
- min-height: 36px;
1396
- box-sizing: border-box;
1397
- border-radius: var(--radius-md);
1398
- cursor: default;
1399
- outline: none;
1400
- overflow-wrap: anywhere;
1401
- }
1402
- .pui-combobox-item[data-highlighted] {
1403
- background: var(--menu-hover-background);
1404
- }
1405
- .pui-combobox-item[data-selected] {
1406
- background: var(--selected);
1407
- }
1408
- .pui-combobox-item[data-disabled] {
1409
- opacity: var(--control-disabled-opacity);
1410
- }
1411
- .pui-combobox-indicator {
1412
- display: inline-flex;
1413
- align-items: center;
1414
- }
1415
- .pui-combobox-empty,
1416
- .pui-combobox-status {
1417
- padding: var(--space-3);
1418
- color: var(--ink-body);
1419
- }
1420
- .pui-combobox-empty:empty,
1421
- .pui-combobox-status:empty {
1422
- padding: 0;
1423
- }
1424
- .pui-combobox-section-label {
1425
- padding: var(--space-2) var(--space-3);
1426
- color: var(--ink-muted);
1427
- font-size: 12px;
1428
- }
1429
- .pui-combobox-separator {
1430
- height: 1px;
1431
- background: var(--line);
1432
- margin-block: var(--space-1);
1433
- }
1434
- .pui-combobox-chips {
1435
- display: flex;
1436
- flex-wrap: wrap;
1437
- align-items: center;
1438
- gap: var(--space-1);
1439
- width: 100%;
1440
- padding: var(--space-1);
1441
- }
1442
- .pui-combobox-chips .pui-combobox-input {
1443
- flex: 1;
1444
- width: 100px;
1445
- min-width: 80px;
1446
- border: 0;
1447
- box-shadow: none;
1448
- background: transparent;
1449
- }
1450
- .pui-combobox-chip {
1451
- display: inline-flex;
1452
- align-items: center;
1453
- gap: var(--space-1);
1454
- padding-inline-start: var(--space-3);
1455
- border-radius: var(--radius-full);
1456
- background: var(--selected);
1457
- color: var(--ink);
1458
- font-size: 12px;
1459
- }
1460
- .pui-combobox-chip-remove {
1461
- width: 28px;
1462
- height: 28px;
1463
- }
1464
- .pui-number-group {
1465
- display: grid;
1466
- grid-template-columns: var(--control-height) minmax(0, 1fr) var(
1467
- --control-height
1468
- );
1469
- }
1470
- .pui-number-input {
1471
- box-sizing: border-box;
1472
- width: 100%;
1473
- min-width: 0;
1474
- height: var(--control-height);
1475
- padding: 0 var(--space-2);
1476
- border: 0;
1477
- outline: none;
1478
- background: transparent;
1479
- color: var(--ink);
1480
- font: 400 14px/22px var(--font-body);
1481
- text-align: center;
1482
- font-variant-numeric: tabular-nums;
1483
- }
1484
- .pui-number-scrub {
1485
- cursor: ew-resize;
1486
- touch-action: none;
1487
- }
1488
- @media (max-width: 760px) {
1489
- .pui-combobox-item {
1490
- min-height: 44px;
1491
- }
1492
- .pui-combobox-chip-remove {
1493
- width: 44px;
1494
- height: 44px;
1495
- }
1496
- }
1497
- @media (prefers-reduced-motion: reduce) {
1498
- .pui-combobox-popup,
1499
- .pui-combobox-group,
1500
- .pui-number-group {
1501
- transition: none;
1502
- }
1503
- }
1504
- @media (forced-colors: active) {
1505
- .pui-combobox-item:is([data-selected], [data-highlighted]) {
1506
- outline: 1px solid CanvasText;
1507
- outline-offset: -1px;
1508
- }
1509
- }
1510
- .pui-combobox-group > .pui-combobox-input,
1511
- .pui-combobox-action,
1512
- .pui-number-step,
1513
- .pui-number-input {
1514
- height: calc(var(--control-height) - 2px);
1515
- }
1516
- .pui-combobox-group[data-invalid],
1517
- .pui-number-group[data-invalid] {
1518
- border-color: var(--status-danger-border);
1519
- }
1520
- .pui-number-scrub[data-readonly],
1521
- .pui-number-scrub[data-disabled] {
1522
- cursor: default;
1523
- }
1524
- .pui-number-field {
1525
- width: 100%;
1526
- max-width: 20rem;
1527
- }
1528
- /* Reserve the selection mark so every option label shares one alignment line. */
1529
- .pui-combobox-indicator {
1530
- width: 16px;
1531
- flex: none;
1532
- }
1533
- .pui-combobox-item:not([data-selected]) .pui-combobox-indicator {
1534
- visibility: hidden;
1535
- }
1536
-
1537
- .pui-slider {
1538
- display: grid;
1539
- grid-template-columns: minmax(0, 1fr) auto;
1540
- column-gap: var(--space-4);
1541
- row-gap: var(--space-2);
1542
- width: 100%;
1543
- max-width: 32rem;
1544
- min-width: 0;
1545
- color: var(--ink-body);
1546
- }
1547
- .pui-slider-label {
1548
- font-weight: var(--weight-regular);
1549
- color: var(--ink);
1550
- overflow-wrap: anywhere;
1551
- }
1552
- .pui-slider-value {
1553
- margin: 0;
1554
- font: inherit;
1555
- font-variant-numeric: tabular-nums;
1556
- text-align: end;
1557
- }
1558
- .pui-slider-control {
1559
- position: relative;
1560
- grid-column: 1/-1;
1561
- display: flex;
1562
- align-items: center;
1563
- width: 100%;
1564
- min-width: 0;
1565
- height: 44px;
1566
- touch-action: pan-y;
1567
- user-select: none;
1568
- cursor: pointer;
1569
- }
1570
- .pui-slider-track {
1571
- width: 100%;
1572
- height: 6px;
1573
- border-radius: var(--radius-full);
1574
- background: var(--ink-muted);
1575
- }
1576
- .pui-slider-indicator {
1577
- background: var(--brand);
1578
- border-radius: inherit;
1579
- }
1580
- .pui-slider-thumb {
1581
- box-sizing: border-box;
1582
- width: 24px;
1583
- height: 24px;
1584
- border: 2px solid var(--ink-body);
1585
- border-radius: var(--radius-full);
1586
- background: var(--canvas);
1587
- }
1588
- .pui-slider-thumb:focus-within {
1589
- outline: 2px solid var(--interaction-focus);
1590
- outline-offset: 3px;
1591
- }
1592
- .pui-slider[data-disabled] {
1593
- opacity: var(--control-disabled-opacity);
1594
- }
1595
- .pui-slider-control[data-disabled],
1596
- .pui-slider-thumb[data-disabled] {
1597
- cursor: not-allowed;
1598
- }
1599
- .pui-slider[data-orientation='vertical'] {
1600
- width: max-content;
1601
- min-width: 120px;
1602
- }
1603
- .pui-slider-control[data-orientation='vertical'] {
1604
- width: 44px;
1605
- height: 192px;
1606
- justify-content: center;
1607
- justify-self: center;
1608
- touch-action: pan-x;
1609
- }
1610
- .pui-slider-track[data-orientation='vertical'] {
1611
- width: 6px;
1612
- height: 100%;
1613
- }
1614
- @media (max-width: 760px) {
1615
- .pui-slider-thumb {
1616
- width: 28px;
1617
- height: 28px;
1618
- }
1619
- }
1620
- @media (forced-colors: active) {
1621
- .pui-slider-track {
1622
- background: CanvasText;
1623
- }
1624
- .pui-slider-indicator {
1625
- background: Highlight;
1626
- }
1627
- .pui-slider-thumb {
1628
- border-color: CanvasText;
1629
- background: Canvas;
1630
- }
1631
- }
1632
-
1633
- /* Command state uses the whole rounded surface, with no one-sided accent. */
1634
- .pui-toggle {
1635
- background: transparent;
1636
- border-color: var(--line);
1637
- }
1638
- .pui-toggle[data-pressed],
1639
- .pui-toolbar-button[aria-pressed='true'] {
1640
- background: var(--selected);
1641
- border-color: var(--control-border);
1642
- color: var(--ink);
1643
- }
1644
- .pui-toggle[data-disabled],
1645
- .pui-toolbar-button[data-disabled],
1646
- .pui-toolbar-input[data-disabled] {
1647
- opacity: var(--control-disabled-opacity);
1648
- cursor: not-allowed;
1649
- }
1650
- .pui-toggle-group,
1651
- .pui-toolbar,
1652
- .pui-menubar {
1653
- display: flex;
1654
- flex-wrap: wrap;
1655
- align-items: center;
1656
- gap: var(--space-1);
1657
- min-width: 0;
1658
- }
1659
- .pui-toggle-group[data-orientation='vertical'],
1660
- .pui-toolbar[data-orientation='vertical'],
1661
- .pui-menubar[data-orientation='vertical'] {
1662
- flex-direction: column;
1663
- align-items: flex-start;
1664
- width: fit-content;
1665
- max-width: 100%;
1666
- }
1667
- .pui-toolbar {
1668
- padding: var(--space-1);
1669
- border-radius: var(--radius-md);
1670
- background: var(--surface);
1671
- gap: var(--space-2);
1672
- }
1673
- .pui-toolbar-group {
1674
- display: flex;
1675
- flex-wrap: wrap;
1676
- align-items: center;
1677
- gap: var(--space-1);
1678
- min-width: 0;
1679
- }
1680
- .pui-toolbar-button,
1681
- .pui-toolbar-link {
1682
- background: transparent;
1683
- border: 0;
1684
- border-radius: max(0px, calc(var(--radius-md) - var(--space-1)));
1685
- text-decoration: none;
1686
- }
1687
- .pui-toolbar-input {
1688
- width: 160px;
1689
- max-width: 100%;
1690
- border: 0;
1691
- border-radius: max(0px, calc(var(--radius-md) - var(--space-1)));
1692
- background: var(--canvas);
1693
- }
1694
- .pui-toolbar-separator {
1695
- flex: none;
1696
- background: transparent;
1697
- }
1698
- .pui-toolbar-separator[data-orientation='vertical'] {
1699
- width: 1px;
1700
- height: 24px;
1701
- margin-inline: var(--space-1);
1702
- }
1703
- .pui-toolbar-separator[data-orientation='horizontal'] {
1704
- height: 1px;
1705
- width: 100%;
1706
- margin-block: var(--space-1);
1707
- }
1708
- .pui-toolbar[data-orientation='vertical'] .pui-toolbar-group {
1709
- flex-direction: column;
1710
- align-items: stretch;
1711
- width: 100%;
1712
- }
1713
- .pui-menu-trigger[data-popup-open] {
1714
- background: var(--selected);
1715
- border-color: var(--control-border);
1716
- }
1717
- .pui-menu-item {
1718
- position: relative;
1719
- box-sizing: border-box;
1720
- display: flex;
1721
- align-items: center;
1722
- gap: var(--space-2);
1723
- min-height: var(--control-height);
1724
- padding: var(--space-2) var(--space-3);
1725
- border-radius: var(--control-radius);
1726
- color: var(--ink);
1727
- outline: none;
1728
- cursor: default;
1729
- text-decoration: none;
1730
- overflow-wrap: anywhere;
1731
- }
1732
- .pui-menu-item[data-highlighted] {
1733
- background: var(--menu-hover-background);
1734
- }
1735
- .pui-menu-item[data-disabled] {
1736
- opacity: var(--control-disabled-opacity);
1737
- }
1738
- .pui-menu-check-item {
1739
- padding-inline-start: 36px;
1740
- }
1741
- .pui-menu-indicator {
1742
- position: absolute;
1743
- inset-inline-start: var(--space-3);
1744
- display: inline-flex;
1745
- width: 16px;
1746
- }
1747
- .pui-menu-check-item[aria-checked='false'] > .pui-menu-indicator {
1748
- visibility: hidden;
1749
- }
1750
- .pui-menu-group-label {
1751
- padding: var(--space-2) var(--space-3);
1752
- color: var(--ink-muted);
1753
- font-size: 12px;
1754
- }
1755
- .pui-menu-separator {
1756
- height: 1px;
1757
- background: var(--line);
1758
- margin-block: var(--space-1);
1759
- }
1760
- .pui-menu-submenu-trigger {
1761
- justify-content: space-between;
1762
- }
1763
- .pui-submenu-arrow {
1764
- flex: none;
1765
- margin-inline-start: var(--space-3);
1766
- }
1767
- .pui-menu-submenu-trigger:dir(rtl) .pui-submenu-arrow {
1768
- transform: rotate(180deg);
1769
- }
1770
- @media (max-width: 760px) {
1771
- .pui-menu-item {
1772
- min-height: 44px;
1773
- }
1774
- }
1775
- @media (forced-colors: active) {
1776
- .pui-menu-item[data-highlighted] {
1777
- outline: 1px solid CanvasText;
1778
- outline-offset: -1px;
1779
- }
1780
- }
1781
- .pui-menu {
1782
- max-height: min(360px, var(--available-height));
1783
- overflow: auto;
1784
- scrollbar-width: thin;
1785
- scrollbar-color: var(--scrollbar-thumb) transparent;
1786
- }
1787
- .pui-menu-trigger[data-disabled] {
1788
- opacity: var(--control-disabled-opacity);
1789
- cursor: not-allowed;
1790
- }
1791
- .pui-menubar {
1792
- padding: var(--space-1);
1793
- border-radius: var(--radius-md);
1794
- background: var(--surface);
1795
- width: fit-content;
1796
- max-width: 100%;
1797
- }
1798
- /* Concentric corners: outer radius minus the bar's inset. */
1799
- .pui-menubar > .pui-menu-trigger {
1800
- border: 0;
1801
- border-radius: max(0px, calc(var(--radius-md) - var(--space-1)));
1802
- }
1803
- .pui-toggle,
1804
- .pui-toolbar-button {
1805
- position: relative;
1806
- }
1807
- @media (forced-colors: active) {
1808
- .pui-toggle[data-pressed]::after,
1809
- .pui-toolbar-button[aria-pressed='true']::after {
1810
- content: '';
1811
- position: absolute;
1812
- inset: 3px;
1813
- border: 1px solid CanvasText;
1814
- border-radius: inherit;
1815
- pointer-events: none;
1816
- }
1817
- }
1818
-
1819
- .pui-context-trigger {
1820
- -webkit-touch-callout: none;
1821
- }
1822
- .pui-preview-card {
1823
- box-sizing: border-box;
1824
- width: 320px;
1825
- max-width: min(calc(100vw - 24px), var(--available-width));
1826
- max-height: var(--available-height);
1827
- overflow: auto;
1828
- overscroll-behavior: contain;
1829
- scrollbar-width: thin;
1830
- padding: var(--space-5);
1831
- border: 1px solid var(--menu-border);
1832
- border-radius: var(--radius-md);
1833
- background: var(--menu-background);
1834
- color: var(--ink);
1835
- box-shadow: var(--shadow-float);
1836
- font: 400 14px/22px var(--font-body);
1837
- overflow-wrap: anywhere;
1838
- outline: none;
1839
- transform: translateY(0);
1840
- opacity: 1;
1841
- transition:
1842
- opacity var(--dialog-enter-duration) var(--ease-out),
1843
- transform var(--dialog-enter-duration) var(--ease-out);
1844
- }
1845
- .pui-preview-card > :first-child {
1846
- margin-top: 0;
1847
- }
1848
- .pui-preview-card > :last-child {
1849
- margin-bottom: 0;
1850
- }
1851
- .pui-preview-card[data-starting-style] {
1852
- opacity: 0;
1853
- transform: translateY(6px);
1854
- }
1855
- .pui-preview-card[data-ending-style] {
1856
- transition-duration: 0s;
1857
- }
1858
- .pui-preview-card[data-instant] {
1859
- transition-duration: 0s;
1860
- }
1861
- @media (prefers-reduced-motion: reduce) {
1862
- .pui-preview-card {
1863
- transition: none;
1864
- transform: none;
1865
- }
1866
- }
1867
- @media (forced-colors: active) {
1868
- .pui-preview-card {
1869
- border-color: CanvasText;
1870
- background: Canvas;
1871
- color: CanvasText;
1872
- }
1873
- }
1874
-
1875
- .pui-navigation-menu {
1876
- width: fit-content;
1877
- max-width: 100%;
1878
- }
1879
- .pui-navigation-list {
1880
- display: flex;
1881
- align-items: center;
1882
- gap: var(--space-1);
1883
- margin: 0;
1884
- padding: 0;
1885
- list-style: none;
1886
- }
1887
- .pui-navigation-menu[data-orientation='vertical'] > .pui-navigation-list {
1888
- flex-direction: column;
1889
- align-items: stretch;
1890
- }
1891
- .pui-navigation-trigger {
1892
- padding-inline: var(--space-3);
1893
- font-weight: 500;
1894
- background: transparent;
1895
- color: var(--ink-body);
1896
- }
1897
- .pui-navigation-trigger:hover,
1898
- .pui-navigation-trigger[data-popup-open] {
1899
- background: var(--menu-hover-background);
1900
- }
1901
- .pui-navigation-trigger[data-popup-open] {
1902
- color: var(--ink);
1903
- }
1904
- .pui-navigation-icon {
1905
- display: inline-flex;
1906
- flex: none;
1907
- transition: rotate var(--motion-enter) var(--motion-ease);
1908
- }
1909
- .pui-navigation-icon[data-popup-open] {
1910
- rotate: 180deg;
1911
- }
1912
- .pui-navigation-link {
1913
- display: block;
1914
- box-sizing: border-box;
1915
- min-height: var(--control-height);
1916
- padding: var(--space-2) var(--space-3);
1917
- border: 1px solid transparent;
1918
- border-radius: var(--radius-md);
1919
- color: var(--ink-body);
1920
- text-decoration: none;
1921
- font: 400 14px/22px var(--font-body);
1922
- overflow-wrap: anywhere;
1923
- }
1924
- .pui-navigation-link:hover,
1925
- .pui-navigation-link[data-highlighted] {
1926
- background: var(--menu-hover-background);
1927
- }
1928
- .pui-navigation-link[aria-current='page'] {
1929
- background: var(--selected);
1930
- color: var(--ink);
1931
- font-weight: 500;
1932
- }
1933
- .pui-navigation-link:focus-visible {
1934
- outline: 2px solid var(--interaction-focus);
1935
- outline-offset: 2px;
1936
- }
1937
- .pui-navigation-popup {
1938
- box-sizing: border-box;
1939
- width: var(--popup-width);
1940
- height: var(--popup-height);
1941
- max-width: min(calc(100vw - 24px), var(--available-width));
1942
- max-height: var(--available-height);
1943
- overflow: hidden;
1944
- border: 1px solid var(--menu-border);
1945
- border-radius: var(--radius-lg);
1946
- background: var(--menu-background);
1947
- color: var(--ink);
1948
- box-shadow: var(--shadow-float);
1949
- font: 400 14px/22px var(--font-body);
1950
- outline: none;
1951
- opacity: 1;
1952
- translate: 0 0;
1953
- transition:
1954
- opacity var(--dialog-enter-duration) var(--motion-ease),
1955
- translate var(--dialog-enter-duration) var(--motion-spatial-ease);
1956
- }
1957
- .pui-navigation-popup[data-starting-style] {
1958
- opacity: 0;
1959
- translate: 0 12px;
1960
- }
1961
- .pui-navigation-popup[data-ending-style] {
1962
- transition-duration: 0s;
1963
- }
1964
- .pui-navigation-viewport {
1965
- position: relative;
1966
- width: 100%;
1967
- height: 100%;
1968
- overflow: auto;
1969
- scrollbar-width: thin;
1970
- scrollbar-color: var(--scrollbar-thumb) transparent;
1971
- overscroll-behavior: contain;
1972
- }
1973
- .pui-navigation-content {
1974
- box-sizing: border-box;
1975
- width: 380px;
1976
- max-width: calc(100vw - 26px);
1977
- padding: var(--space-4);
1978
- overflow-wrap: anywhere;
1979
- }
1980
- @media (max-width: 760px) {
1981
- .pui-navigation-trigger,
1982
- .pui-navigation-link {
1983
- min-height: 44px;
1984
- }
1985
- }
1986
- @media (prefers-reduced-motion: reduce) {
1987
- .pui-navigation-popup,
1988
- .pui-navigation-icon {
1989
- transition: none;
1990
- }
1991
- .pui-navigation-popup[data-starting-style] {
1992
- translate: 0 0;
1993
- }
1994
- }
1995
- @media (forced-colors: active) {
1996
- .pui-navigation-popup {
1997
- background: Canvas;
1998
- color: CanvasText;
1999
- border-color: CanvasText;
2000
- }
2001
- .pui-navigation-link[aria-current='page'] {
2002
- border-color: Highlight;
2003
- }
2004
- }
2005
-
2006
- /* Keep the floating box measurable even when the popup anchors from its bottom edge. */
2007
- .pui-navigation-positioner {
2008
- width: var(--positioner-width);
2009
- height: var(--positioner-height);
2010
- max-width: calc(100vw - 24px);
2011
- }
2012
- .pui-navigation-viewport {
2013
- max-height: calc(var(--available-height) - 2px);
2014
- }
2015
-
2016
- .pui-otp-field,
2017
- .pui-otp-group {
2018
- display: flex;
2019
- align-items: center;
2020
- gap: var(--space-2);
2021
- min-width: 0;
2022
- max-width: 100%;
2023
- width: fit-content;
2024
- }
2025
- .pui-otp-group {
2026
- flex: 1 1 auto;
2027
- }
2028
- .pui-otp-input {
2029
- flex: 0 1 44px;
2030
- width: 44px;
2031
- height: 44px;
2032
- min-width: 0;
2033
- padding: 0;
2034
- text-align: center;
2035
- font: 400 20px/24px var(--font-code);
2036
- font-variant-numeric: tabular-nums;
2037
- caret-color: var(--control-focus);
2038
- }
2039
- .pui-otp-separator {
2040
- flex: none;
2041
- width: var(--space-2);
2042
- height: 0;
2043
- border: 0;
2044
- border-top: 1px solid var(--line);
2045
- }
2046
- @media (max-width: 760px) {
2047
- .pui-otp-field,
2048
- .pui-otp-group {
2049
- gap: var(--space-1);
2050
- }
2051
- }
2052
- @media (forced-colors: active) {
2053
- .pui-otp-input {
2054
- background: Field;
2055
- color: FieldText;
2056
- border-color: ButtonText;
2057
- }
2058
- .pui-otp-input:focus-visible {
2059
- outline: 2px solid Highlight;
2060
- outline-offset: 2px;
2061
- }
2062
- .pui-otp-input[aria-invalid='true'] {
2063
- border-color: LinkText;
2064
- }
2065
- .pui-otp-separator {
2066
- border-color: CanvasText;
2067
- }
2068
- }
2069
-
2070
- /* Compact notification surfaces: one quiet card, semantic icon and predictable actions. */
2071
- .pui-toast-viewport {
2072
- position: fixed;
2073
- /* The inset is inside the scrollport so shadows have room to fade. */
2074
- inset-inline-end: 0;
2075
- bottom: 0;
2076
- z-index: var(--layer-popup);
2077
- display: flex;
2078
- flex-direction: column-reverse;
2079
- gap: var(--space-2);
2080
- box-sizing: border-box;
2081
- width: 416px;
2082
- max-width: 100vw;
2083
- max-height: 100dvh;
2084
- padding: var(--space-6);
2085
- overflow-x: hidden;
2086
- overflow-y: auto;
2087
- scrollbar-width: none;
2088
- overscroll-behavior: contain;
2089
- pointer-events: none;
2090
- outline: none;
2091
- }
2092
- .pui-toast {
2093
- --_toast-icon: var(--ink-muted);
2094
- position: relative;
2095
- flex: none;
2096
- box-sizing: border-box;
2097
- width: 100%;
2098
- padding: var(--space-4);
2099
- border: 0;
2100
- border-radius: var(--radius-lg);
2101
- background: var(--menu-background);
2102
- color: var(--ink);
2103
- box-shadow: var(--shadow-float);
2104
- font: 400 13px/20px var(--font-body);
2105
- overflow-wrap: anywhere;
2106
- pointer-events: auto;
2107
- opacity: 1;
2108
- translate: 0 0;
2109
- transition:
2110
- opacity var(--toast-enter-duration) var(--motion-ease),
2111
- translate var(--toast-enter-duration) var(--toast-stack-ease);
2112
- }
2113
- .pui-toast[data-tone='success'] {
2114
- --_toast-icon: var(--status-success-fg);
2115
- }
2116
- .pui-toast[data-tone='danger'] {
2117
- --_toast-icon: var(--status-danger-fg);
2118
- }
2119
- .pui-toast[data-tone='caution'] {
2120
- --_toast-icon: var(--status-caution-fg);
2121
- }
2122
- .pui-toast[data-tone='progress'] {
2123
- --_toast-icon: var(--status-progress-fg);
2124
- }
2125
- .pui-toast[data-starting-style] {
2126
- opacity: 0;
2127
- translate: 0 12px;
2128
- }
2129
- .pui-toast[data-ending-style] {
2130
- opacity: 0;
2131
- transition-duration: 0s;
2132
- }
2133
- .pui-toast[data-limited] {
2134
- display: none;
2135
- }
2136
- .pui-toast:focus-visible {
2137
- outline: 2px solid var(--interaction-focus);
2138
- outline-offset: 2px;
2139
- }
2140
- .pui-toast-content {
2141
- display: flex;
2142
- align-items: flex-start;
2143
- gap: var(--space-3);
2144
- opacity: 1;
2145
- transition: opacity var(--duration-fast) var(--motion-ease);
2146
- }
2147
- .pui-toast-text {
2148
- flex: 1;
2149
- min-width: 0;
2150
- }
2151
- .pui-toast-icon {
2152
- display: inline-flex;
2153
- flex: none;
2154
- color: var(--_toast-icon);
2155
- margin-top: 1px;
2156
- }
2157
- .pui-toast-icon > svg {
2158
- width: 18px;
2159
- height: 18px;
2160
- }
2161
- .pui-toast-title {
2162
- margin: 0;
2163
- font: 500 13px/20px var(--font-body);
2164
- }
2165
- .pui-toast-description {
2166
- margin: 2px 0 0;
2167
- color: var(--ink-muted);
2168
- font-size: 13px;
2169
- line-height: 18px;
2170
- }
2171
- /* Close and Action are small Buttons (see toast.tsx); only their placement is set here. */
2172
- .pui-toast-close {
2173
- flex: none;
2174
- margin: -4px 0 0;
2175
- margin-inline-end: -4px;
2176
- color: var(--ink-muted);
2177
- }
2178
- .pui-toast-action {
2179
- margin-top: var(--space-3);
2180
- }
2181
- @media (prefers-reduced-motion: reduce) {
2182
- .pui-toast {
2183
- transition: none;
2184
- }
2185
- .pui-toast[data-starting-style] {
2186
- translate: 0 0;
2187
- }
2188
- }
2189
- @media (forced-colors: active) {
2190
- .pui-toast {
2191
- background: Canvas;
2192
- color: CanvasText;
2193
- border: 1px solid CanvasText;
2194
- box-shadow: none;
2195
- }
2196
- .pui-toast-description,
2197
- .pui-toast-icon {
2198
- color: CanvasText;
2199
- }
2200
- }
2201
-
2202
- .pui-toast-viewport[data-layout='stack']:focus-visible {
2203
- border-radius: var(--radius-lg);
2204
- outline: 2px solid var(--interaction-focus);
2205
- outline-offset: -2px;
2206
- }
2207
- .pui-toast-viewport[data-layout='anchored'] {
2208
- inset: 0;
2209
- display: block;
2210
- width: auto;
2211
- max-width: none;
2212
- max-height: none;
2213
- padding: 0;
2214
- overflow: visible;
2215
- }
2216
- .pui-toast-viewport[data-layout='anchored'] .pui-toast {
2217
- width: 320px;
2218
- max-width: min(calc(100vw - 24px), var(--available-width));
2219
- max-height: var(--available-height);
2220
- overflow: auto;
2221
- scrollbar-width: thin;
2222
- }
2223
-
2224
- .pui-toast-viewport[data-layout='anchored']:focus-visible .pui-toast {
2225
- outline: 2px solid var(--interaction-focus);
2226
- outline-offset: 2px;
2227
- }
2228
-
2229
- .pui-file-upload {
2230
- min-width: 0;
2231
- }
2232
- .pui-file-native {
2233
- position: absolute;
2234
- width: 1px;
2235
- height: 1px;
2236
- margin: -1px;
2237
- padding: 0;
2238
- border: 0;
2239
- overflow: hidden;
2240
- clip-path: inset(50%);
2241
- white-space: nowrap;
2242
- }
2243
- .pui-file-dropzone {
2244
- display: flex;
2245
- flex-wrap: wrap;
2246
- align-items: center;
2247
- gap: var(--space-3);
2248
- padding: var(--space-5);
2249
- border: 1px solid transparent;
2250
- border-radius: var(--radius-lg);
2251
- background: var(--surface);
2252
- transition: background-color var(--duration-fast) var(--ease-out);
2253
- }
2254
- .pui-file-upload[data-dragging] .pui-file-dropzone {
2255
- background: var(--selected);
2256
- }
2257
- .pui-file-trigger {
2258
- flex-direction: row;
2259
- width: fit-content;
2260
- cursor: pointer;
2261
- font-size: 14px;
2262
- line-height: 22px;
2263
- }
2264
- .pui-file-trigger[data-disabled] {
2265
- opacity: var(--control-disabled-opacity);
2266
- cursor: not-allowed;
2267
- }
2268
- .pui-file-upload:has(.pui-file-native:focus-visible) .pui-file-trigger {
2269
- outline: 2px solid var(--interaction-focus);
2270
- outline-offset: 2px;
2271
- }
2272
- .pui-file-upload:has(.pui-file-native[aria-invalid='true'])
2273
- .pui-file-dropzone {
2274
- border-color: var(--status-danger-fg);
2275
- }
2276
- .pui-file-drop-hint {
2277
- margin: 0;
2278
- color: var(--ink-muted);
2279
- font-size: 13px;
2280
- }
2281
- .pui-file-errors {
2282
- color: var(--status-danger-fg);
2283
- font: 400 13px/20px var(--font-body);
2284
- overflow-wrap: anywhere;
2285
- }
2286
- .pui-file-errors:empty {
2287
- display: none;
2288
- }
2289
- .pui-file-errors ul {
2290
- margin: 0;
2291
- padding-inline-start: var(--space-5);
2292
- }
2293
- .pui-file-list {
2294
- display: grid;
2295
- gap: var(--space-2);
2296
- list-style: none;
2297
- padding: 0;
2298
- margin: 0;
2299
- }
2300
- .pui-file-item {
2301
- min-width: 0;
2302
- padding: var(--space-4);
2303
- border-radius: var(--radius-md);
2304
- background: var(--surface);
2305
- }
2306
- .pui-file-info {
2307
- display: flex;
2308
- flex-wrap: wrap;
2309
- align-items: center;
2310
- gap: var(--space-2) var(--space-3);
2311
- font-size: 13px;
2312
- }
2313
- .pui-file-info > strong {
2314
- min-width: 0;
2315
- max-width: 100%;
2316
- overflow-wrap: anywhere;
2317
- font-weight: 500;
2318
- }
2319
- .pui-file-info > span:not(.pui-badge) {
2320
- color: var(--ink-muted);
2321
- }
2322
- .pui-file-actions {
2323
- display: flex;
2324
- flex-wrap: wrap;
2325
- gap: var(--space-2);
2326
- margin-top: var(--space-3);
2327
- }
2328
- .pui-file-item .pui-gauge {
2329
- margin-top: var(--space-3);
2330
- }
2331
- .pui-file-upload-error {
2332
- margin: var(--space-2) 0 0;
2333
- color: var(--status-danger-fg);
2334
- font-size: 13px;
2335
- }
2336
- @media (max-width: 760px) {
2337
- .pui-file-trigger {
2338
- min-height: 44px;
2339
- }
2340
- .pui-file-dropzone {
2341
- padding: var(--space-4);
2342
- }
2343
- }
2344
- @media (forced-colors: active) {
2345
- .pui-file-dropzone {
2346
- border-color: ButtonText;
2347
- background: Canvas;
2348
- }
2349
- .pui-file-upload[data-dragging] .pui-file-dropzone {
2350
- border-color: Highlight;
2351
- }
2352
- .pui-file-item {
2353
- border: 1px solid CanvasText;
2354
- background: Canvas;
2355
- color: CanvasText;
2356
- }
2357
- }
2358
-
2359
- /* Static glyphs share size/stroke tokens; parent controls own interaction. */
2360
- .pui-icon {
2361
- display: inline-block;
2362
- flex: 0 0 auto;
2363
- width: var(--icon-size-sm);
2364
- height: var(--icon-size-sm);
2365
- vertical-align: -0.125em;
2366
- stroke-width: var(--icon-stroke-width);
2367
- pointer-events: none;
2368
- }
2369
- .pui-icon[data-size='md'] {
2370
- width: var(--icon-size-md);
2371
- height: var(--icon-size-md);
2372
- }
2373
- .pui-icon[data-size='lg'] {
2374
- width: var(--icon-size-lg);
2375
- height: var(--icon-size-lg);
2376
- }
2377
- .pui-icon[data-directional='true']:dir(rtl) {
2378
- transform: scaleX(-1);
2379
- }
2380
-
2381
- /* Base UI owns hover/focus expansion, announcements, timers and gestures. */
2382
- .pui-toast-viewport[data-layout='stack'] {
2383
- display: grid;
2384
- /* An auto row adopts the tallest card while its height transitions, moving
2385
- the bottom anchor during collapse when a behind-card has an action. */
2386
- grid-template-rows: var(--toast-frontmost-height, 80px);
2387
- padding-top: 24px;
2388
- height: calc(var(--toast-frontmost-height, 80px) + 48px);
2389
- overflow: visible;
2390
- }
2391
- .pui-toast-viewport[data-layout='stack'] > .pui-toast {
2392
- grid-area: 1 / 1;
2393
- z-index: calc(100 - var(--toast-index));
2394
- height: var(--toast-frontmost-height, var(--toast-height, auto));
2395
- overflow: clip;
2396
- align-self: end;
2397
- transform-origin: bottom center;
2398
- transform: translateY(calc(var(--toast-index) * -10px))
2399
- scale(calc(1 - var(--toast-index) * 0.035));
2400
- transition:
2401
- height var(--toast-stack-duration) var(--toast-stack-ease),
2402
- transform var(--toast-stack-duration) var(--toast-stack-ease),
2403
- opacity var(--toast-enter-duration) var(--motion-ease),
2404
- translate var(--toast-enter-duration) var(--toast-stack-ease);
2405
- }
2406
- .pui-toast-viewport[data-layout='stack']:not([data-expanded])
2407
- .pui-toast-content[data-behind] {
2408
- opacity: 0;
2409
- pointer-events: none;
2410
- }
2411
- .pui-toast-viewport[data-layout='stack'][data-expanded] {
2412
- pointer-events: auto;
2413
- height: min(calc(var(--toast-stack-height, 240px) + 48px), 100dvh);
2414
- grid-template-rows: var(--toast-stack-height, auto);
2415
- padding-top: 24px;
2416
- overflow: visible;
2417
- }
2418
- .pui-toast-viewport[data-layout='stack'][data-expanded][data-stack-overflow] {
2419
- overflow-y: auto;
2420
- overflow-x: hidden;
2421
- }
2422
- .pui-toast-viewport[data-layout='stack'][data-expanded] > .pui-toast {
2423
- height: var(--toast-height, auto);
2424
- transform: translateY(
2425
- calc(-1 * (var(--toast-offset-y) + var(--toast-index) * var(--space-2)))
2426
- );
2427
- }
2428
- .pui-toast-viewport[data-layout='stack'] > .pui-toast[data-ending-style] {
2429
- transition-duration: 0s;
2430
- }
2431
- /* Touch targets grow to 44px with the small Button scheme; the close button stays centred
2432
- on the first line. */
2433
- @media (max-width: 760px), (pointer: coarse) {
2434
- .pui-toast-close {
2435
- margin-top: -8px;
2436
- }
2437
- }
2438
- @media (prefers-reduced-motion: reduce) {
2439
- .pui-toast-content,
2440
- .pui-toast-viewport[data-layout='stack'],
2441
- .pui-toast-viewport[data-layout='stack'] > .pui-toast {
2442
- transition: none;
2443
- }
2444
- }
2445
-
2446
- .pui-toast-viewport::-webkit-scrollbar {
2447
- display: none;
2448
- }
2449
- @media (prefers-reduced-motion: reduce) {
2450
- .pui-toast {
2451
- transition: none;
2452
- }
2453
- }
2454
-
2455
- /* Active feedback is transient; persistent selection belongs to Toggle. */
2456
- .pui-button:active:not(:disabled, [data-disabled], [data-variant='link']) {
2457
- background-image: linear-gradient(
2458
- var(--interaction-active-bg),
2459
- var(--interaction-active-bg)
2460
- );
2461
- }
2462
- .pui-button[aria-busy='true'] {
2463
- cursor: progress;
2464
- }
2465
- @media (forced-colors: active) {
2466
- .pui-button {
2467
- border-color: ButtonText;
2468
- }
2469
- .pui-button:active {
2470
- background-image: none;
2471
- }
2472
- }
2473
-
2474
- @media (forced-colors: active) {
2475
- .pui-tooltip {
2476
- background: CanvasText;
2477
- color: Canvas;
2478
- forced-color-adjust: none;
2479
- }
2480
- }
2481
-
2482
- .pui-filter-bar {
2483
- display: grid;
2484
- gap: var(--space-4);
2485
- min-inline-size: 0;
2486
- }
2487
- .pui-filter-bar-controls {
2488
- display: flex;
2489
- flex-wrap: wrap;
2490
- align-items: end;
2491
- gap: var(--space-4);
2492
- min-inline-size: 0;
2493
- }
2494
- .pui-filter-bar-field {
2495
- display: grid;
2496
- gap: var(--space-2);
2497
- flex: 1 1 12rem;
2498
- min-inline-size: 0;
2499
- max-inline-size: 100%;
2500
- }
2501
- .pui-filter-bar-field[data-width='search'] {
2502
- flex: 2 1 20rem;
2503
- }
2504
- .pui-filter-bar-field > :is(.pui-control, .pui-select-trigger) {
2505
- inline-size: 100%;
2506
- min-inline-size: 0;
2507
- }
2508
- .pui-filter-bar-actions {
2509
- display: flex;
2510
- align-items: center;
2511
- flex-wrap: wrap;
2512
- gap: var(--space-2);
2513
- min-inline-size: 0;
2514
- }
2515
- .pui-filter-bar-summary {
2516
- color: var(--ink-muted);
2517
- font: var(--weight-regular)
2518
- var(--type-caption-size)/var(--type-caption-leading) var(--font-body);
2519
- }
2520
- .pui-filter-bar-actions > .pui-button {
2521
- max-inline-size: 100%;
2522
- height: auto;
2523
- min-height: var(--control-height);
2524
- padding-block: var(--space-2);
2525
- overflow-wrap: anywhere;
2526
- }
2527
-
2528
- /* Application frame slots: navigation state and product routing remain caller-owned. */
2529
- .pui-app-shell {
2530
- --app-shell-radius: var(--radius-sheet);
2531
- --app-shell-inset: var(--space-3);
2532
- --app-shell-sidebar-width: 216px;
2533
- display: grid;
2534
- grid-template-columns: var(--app-shell-sidebar-width) minmax(0, 1fr);
2535
- grid-template-rows: auto minmax(0, 1fr);
2536
- gap: var(--space-4);
2537
- min-inline-size: 0;
2538
- padding: var(--app-shell-inset);
2539
- background: var(--chrome);
2540
- border-radius: var(--app-shell-radius);
2541
- }
2542
- .pui-app-shell[data-sidebar='collapsed'] {
2543
- --app-shell-sidebar-width: 64px;
2544
- }
2545
- .pui-app-shell-header {
2546
- grid-column: 1 / -1;
2547
- display: flex;
2548
- align-items: center;
2549
- justify-content: space-between;
2550
- gap: var(--space-3);
2551
- min-inline-size: 0;
2552
- }
2553
- .pui-app-shell-sidebar {
2554
- display: flex;
2555
- flex-direction: column;
2556
- gap: var(--space-3);
2557
- min-inline-size: 0;
2558
- min-block-size: 0;
2559
- padding-inline: var(--space-3);
2560
- }
2561
- .pui-app-shell-content {
2562
- min-inline-size: 0;
2563
- min-block-size: 0;
2564
- padding: var(--space-6);
2565
- background: var(--canvas);
2566
- border-radius: max(
2567
- 0px,
2568
- calc(var(--app-shell-radius) - var(--app-shell-inset))
2569
- );
2570
- overflow-wrap: anywhere;
2571
- }
2572
- .pui-app-shell-footer {
2573
- margin-block-start: auto;
2574
- flex: none;
2575
- }
2576
- .pui-app-shell-link {
2577
- display: grid;
2578
- grid-template-columns: 40px minmax(0, 1fr);
2579
- align-items: center;
2580
- min-block-size: 40px;
2581
- border-radius: var(--radius-md);
2582
- text-decoration: none;
2583
- color: var(--ink-body);
2584
- transition: background-color var(--duration-fast) var(--ease-out);
2585
- }
2586
- .pui-app-shell-link:hover {
2587
- background: var(--interaction-hover-bg);
2588
- }
2589
- .pui-app-shell-link:active:not([aria-current='page']) {
2590
- background: var(--interaction-active-bg);
2591
- }
2592
- .pui-app-shell-link[aria-current='page'] {
2593
- background: var(--selected);
2594
- color: var(--ink);
2595
- font-weight: 500;
2596
- }
2597
- .pui-app-shell-link:focus-visible {
2598
- outline: 2px solid var(--control-focus);
2599
- outline-offset: -2px;
2600
- }
2601
- .pui-app-shell-icon {
2602
- display: grid;
2603
- place-items: center;
2604
- inline-size: 40px;
2605
- }
2606
- .pui-app-shell-label {
2607
- min-inline-size: 0;
2608
- overflow: hidden;
2609
- text-overflow: ellipsis;
2610
- white-space: nowrap;
2611
- padding-inline-end: var(--space-2);
2612
- }
2613
- .pui-app-shell[data-sidebar='collapsed'] .pui-app-shell-label {
2614
- position: absolute;
2615
- inline-size: 1px;
2616
- block-size: 1px;
2617
- padding: 0;
2618
- clip-path: inset(50%);
2619
- overflow: hidden;
2620
- }
2621
- @media (max-width: 760px) {
2622
- .pui-app-shell {
2623
- grid-template-columns: minmax(0, 1fr);
2624
- grid-template-rows: auto minmax(0, 1fr);
2625
- }
2626
- .pui-app-shell-sidebar {
2627
- display: none;
2628
- }
2629
- .pui-app-shell-link {
2630
- min-block-size: 44px;
2631
- }
2632
- .pui-app-shell-content {
2633
- padding: var(--space-4);
2634
- }
2635
- }
2636
- @media (prefers-reduced-motion: reduce) {
2637
- .pui-app-shell-link {
2638
- transition: none;
2639
- }
2640
- }
2641
- @media (forced-colors: active) {
2642
- .pui-app-shell-link[aria-current='page'] {
2643
- outline: 1px solid Highlight;
2644
- }
2645
- }
2646
-
2647
- /* Workspace variant: product sidebar owns the brand; the content scrollport is caller-provided. */
2648
- .pui-app-shell[data-layout='workspace'] {
2649
- --app-shell-sidebar-width: 224px;
2650
- grid-template-rows: minmax(0, 1fr);
2651
- gap: 0;
2652
- padding: 0;
2653
- transition: grid-template-columns var(--duration-base) var(--ease-out);
2654
- }
2655
- .pui-app-shell[data-layout='workspace'][data-sidebar='collapsed'] {
2656
- --app-shell-sidebar-width: 72px;
2657
- }
2658
- .pui-app-shell[data-layout='workspace'] > .pui-app-shell-sidebar {
2659
- position: relative;
2660
- grid-row: 1;
2661
- grid-column: 1;
2662
- gap: 0;
2663
- padding: 0;
2664
- z-index: 1;
2665
- }
2666
- .pui-app-shell[data-layout='workspace'] > .pui-app-shell-content {
2667
- grid-row: 1;
2668
- grid-column: 2;
2669
- margin: 0;
2670
- padding: 0;
2671
- background: transparent;
2672
- border-radius: 0;
2673
- }
2674
- /* The page surface: concentric with the shell, inset on every side but the
2675
- * sidebar's. Stretch or size it from its container: a percentage height here
2676
- * would resolve against a scroll content that sizes from the page itself. */
2677
- .pui-app-shell-page {
2678
- box-sizing: border-box;
2679
- min-inline-size: 0;
2680
- margin: var(--app-shell-inset);
2681
- margin-inline-start: 0;
2682
- padding: var(--space-6);
2683
- background: var(--canvas);
2684
- border-radius: max(
2685
- 0px,
2686
- calc(var(--app-shell-radius) - var(--app-shell-inset))
2687
- );
2688
- }
2689
- /* Without the sidebar the page insets evenly. Below a mobile header it starts flush. */
2690
- @media (max-width: 760px) {
2691
- .pui-app-shell-page {
2692
- margin: var(--app-shell-inset);
2693
- padding: var(--space-4);
2694
- }
2695
- .pui-app-shell:has(> .pui-app-shell-header) .pui-app-shell-page {
2696
- margin-block-start: 0;
2697
- }
2698
- }
2699
- .pui-app-shell[data-layout='workspace'] .pui-app-shell-footer {
2700
- padding: var(--space-4);
2701
- }
2702
- .pui-app-shell[data-layout='workspace'] .pui-app-shell-label {
2703
- transition:
2704
- opacity 80ms var(--ease-out) 160ms,
2705
- visibility 0s 160ms;
2706
- }
2707
- .pui-app-shell[data-layout='workspace'][data-sidebar='collapsed']
2708
- .pui-app-shell-label {
2709
- opacity: 0;
2710
- visibility: hidden;
2711
- transition: none;
2712
- }
2713
- @media (min-width: 761px) {
2714
- .pui-app-shell[data-layout='workspace'] > .pui-app-shell-header {
2715
- display: none;
2716
- }
2717
- }
2718
- @media (max-width: 760px) {
2719
- .pui-app-shell[data-layout='workspace'] {
2720
- grid-template-columns: minmax(0, 1fr);
2721
- grid-template-rows: auto minmax(0, 1fr);
2722
- }
2723
- .pui-app-shell[data-layout='workspace'] > .pui-app-shell-header {
2724
- padding: var(--space-3);
2725
- }
2726
- .pui-app-shell[data-layout='workspace'] > .pui-app-shell-content {
2727
- grid-column: 1;
2728
- grid-row: 2;
2729
- margin: 0;
2730
- }
2731
- }
2732
- @media (prefers-reduced-motion: reduce) {
2733
- .pui-app-shell[data-layout='workspace'],
2734
- .pui-app-shell[data-layout='workspace'] .pui-app-shell-label {
2735
- transition: none;
2736
- }
2737
- }
2738
-
2739
- .pui-tree-scroll {
2740
- min-inline-size: 0;
2741
- }
2742
- .pui-tree-viewport {
2743
- block-size: 100%;
2744
- }
2745
- .pui-tree {
2746
- position: relative;
2747
- min-inline-size: 0;
2748
- }
2749
- .pui-tree-item {
2750
- display: flex;
2751
- align-items: center;
2752
- gap: var(--space-1);
2753
- padding-inline-end: var(--space-2);
2754
- border-radius: var(--radius-md);
2755
- color: var(--ink);
2756
- cursor: default;
2757
- outline-offset: -2px;
2758
- transition: background-color var(--duration-fast) var(--ease-out);
2759
- }
2760
- .pui-tree-item:hover {
2761
- background: var(--interaction-hover-bg);
2762
- }
2763
- .pui-tree-item[aria-selected='true'] {
2764
- background: var(--selected);
2765
- }
2766
- .pui-tree-item:focus-visible {
2767
- outline: 2px solid var(--control-focus);
2768
- }
2769
- .pui-tree-item[aria-disabled='true'] {
2770
- color: var(--ink-muted);
2771
- }
2772
- .pui-tree-toggle,
2773
- .pui-tree-leaf {
2774
- inline-size: 32px;
2775
- block-size: 32px;
2776
- flex: 0 0 32px;
2777
- }
2778
- .pui-tree-toggle {
2779
- display: grid;
2780
- place-items: center;
2781
- padding: 0;
2782
- border: 0;
2783
- border-radius: var(--radius-full);
2784
- background: transparent;
2785
- color: inherit;
2786
- }
2787
- .pui-tree-toggle:hover:not(:disabled) {
2788
- background: var(--interaction-hover-bg);
2789
- }
2790
- .pui-tree-toggle:active:not(:disabled) {
2791
- background: var(--interaction-active-bg);
2792
- }
2793
- .pui-tree-toggle svg[data-expanded] {
2794
- rotate: 90deg;
2795
- }
2796
- .pui-tree:dir(rtl) .pui-tree-toggle svg:not([data-expanded]) {
2797
- rotate: 180deg;
2798
- }
2799
- .pui-tree-label {
2800
- min-inline-size: 0;
2801
- overflow: hidden;
2802
- text-overflow: ellipsis;
2803
- white-space: nowrap;
2804
- }
2805
- .pui-tree-empty {
2806
- padding: var(--space-4);
2807
- color: var(--ink-muted);
2808
- }
2809
- @media (prefers-reduced-motion: reduce) {
2810
- .pui-tree-item {
2811
- transition: none;
2812
- }
2813
- }
2814
- @media (forced-colors: active) {
2815
- .pui-tree-item[aria-selected='true'] {
2816
- background: Highlight;
2817
- color: HighlightText;
2818
- }
2819
- .pui-tree-item[aria-disabled='true'] {
2820
- color: GrayText;
2821
- }
2822
- .pui-tree-item:focus-visible {
2823
- outline-color: Highlight;
2824
- }
2825
- }
2826
-
2827
- /* Date and time share the same field feedback and nested surface hierarchy. */
2828
- .pui-date-picker,
2829
- .pui-time-field {
2830
- display: flex;
2831
- flex-direction: column;
2832
- gap: var(--space-2);
2833
- min-width: 0;
2834
- max-width: 100%;
2835
- }
2836
- .pui-date-group {
2837
- display: flex;
2838
- align-items: center;
2839
- box-sizing: border-box;
2840
- min-height: var(--control-height);
2841
- gap: var(--space-2);
2842
- padding-inline: var(--control-padding-x) var(--space-1);
2843
- border: 1px solid var(--control-border);
2844
- border-radius: var(--control-radius);
2845
- background: var(--control-background);
2846
- color: var(--ink);
2847
- outline: none;
2848
- transition:
2849
- background-color var(--duration-fast) var(--ease-out),
2850
- border-color var(--duration-fast) var(--ease-out),
2851
- box-shadow var(--duration-fast) var(--ease-out);
2852
- }
2853
- :is(.pui-date-picker, .pui-time-field):not([data-disabled], [data-readonly])
2854
- .pui-date-group:hover:not([data-focus-within], :focus-within) {
2855
- background: var(--control-hover-background);
2856
- border-color: var(--control-hover-border);
2857
- }
2858
- .pui-date-group[data-focus-within],
2859
- .pui-date-group:focus-within {
2860
- background: var(--control-focus-background);
2861
- border-color: var(--control-focus);
2862
- box-shadow: 0 0 0 3px
2863
- color-mix(in oklch, var(--control-focus) 18%, transparent);
2864
- }
2865
- :is(.pui-date-picker, .pui-time-field)[data-invalid] .pui-date-group {
2866
- border-color: var(--status-danger-fg);
2867
- }
2868
- :is(.pui-date-picker, .pui-time-field)[data-disabled] {
2869
- opacity: var(--control-disabled-opacity);
2870
- }
2871
- :is(.pui-date-picker, .pui-time-field)[data-disabled] .pui-date-group {
2872
- cursor: not-allowed;
2873
- background: var(--control-disabled-background);
2874
- }
2875
- .pui-date-input {
2876
- display: flex;
2877
- align-items: center;
2878
- flex: 1;
2879
- min-width: 0;
2880
- padding-block: var(--space-1);
2881
- font: 400 var(--type-body-size)/var(--type-body-leading) var(--font-body);
2882
- white-space: nowrap;
2883
- }
2884
- .pui-date-segment {
2885
- font-variant-numeric: tabular-nums;
2886
- border-radius: var(--space-1);
2887
- padding: 1px;
2888
- outline: none;
2889
- }
2890
- .pui-date-segment[data-type='literal'] {
2891
- padding: 0;
2892
- white-space: pre;
2893
- }
2894
- .pui-date-segment[data-placeholder] {
2895
- color: var(--control-placeholder);
2896
- }
2897
- .pui-date-segment[data-focused] {
2898
- background: var(--selected);
2899
- color: var(--ink);
2900
- outline: 1px solid var(--control-focus);
2901
- }
2902
- .pui-date-range-inputs {
2903
- display: flex;
2904
- flex-wrap: wrap;
2905
- align-items: center;
2906
- gap: var(--space-1) var(--space-2);
2907
- min-width: 0;
2908
- flex: 1;
2909
- }
2910
- .pui-date-range-inputs .pui-date-input {
2911
- flex: 0 1 auto;
2912
- }
2913
- .pui-date-range-separator {
2914
- color: var(--ink-muted);
2915
- }
2916
- .pui-date-trigger,
2917
- .pui-calendar-nav {
2918
- display: inline-flex;
2919
- align-items: center;
2920
- justify-content: center;
2921
- flex: none;
2922
- width: 32px;
2923
- height: 32px;
2924
- min-width: 32px;
2925
- padding: 0;
2926
- border: 0;
2927
- border-radius: var(--radius-full);
2928
- background: transparent;
2929
- color: var(--ink);
2930
- cursor: pointer;
2931
- outline: none;
2932
- transition: background-color var(--duration-fast) var(--ease-out);
2933
- }
2934
- :is(.pui-date-trigger, .pui-calendar-nav)[data-hovered]:not([data-disabled]) {
2935
- background: var(--selected);
2936
- }
2937
- :is(.pui-date-trigger, .pui-calendar-nav)[data-focus-visible] {
2938
- outline: 2px solid var(--control-focus);
2939
- outline-offset: 2px;
2940
- }
2941
- :is(.pui-date-trigger, .pui-calendar-nav)[data-disabled] {
2942
- opacity: var(--control-disabled-opacity);
2943
- cursor: not-allowed;
2944
- }
2945
- .pui-date-popover {
2946
- box-sizing: border-box;
2947
- max-width: calc(100vw - var(--space-4));
2948
- max-height: var(--available-height);
2949
- overflow: auto;
2950
- overscroll-behavior: contain;
2951
- padding: var(--space-2);
2952
- border: 1px solid var(--line);
2953
- border-radius: var(--radius-lg);
2954
- background: var(--canvas);
2955
- color: var(--ink);
2956
- box-shadow: var(--shadow-float);
2957
- z-index: var(--layer-popup);
2958
- }
2959
- .pui-date-dialog {
2960
- outline: none;
2961
- }
2962
- .pui-calendar {
2963
- width: 280px;
2964
- max-width: 100%;
2965
- font: 400 var(--type-body-size)/var(--type-body-leading) var(--font-body);
2966
- }
2967
- .pui-calendar-header {
2968
- display: flex;
2969
- align-items: center;
2970
- justify-content: space-between;
2971
- gap: var(--space-1);
2972
- margin-bottom: var(--space-2);
2973
- }
2974
- .pui-calendar-heading {
2975
- margin: 0;
2976
- font: 500 var(--type-body-size)/var(--type-body-leading) var(--font-body);
2977
- text-align: center;
2978
- }
2979
- .pui-calendar-grid {
2980
- min-width: 0;
2981
- width: 100%;
2982
- border-collapse: separate;
2983
- border-spacing: 2px;
2984
- table-layout: fixed;
2985
- }
2986
- .pui-calendar-weekday {
2987
- color: var(--ink-muted);
2988
- font-weight: 400;
2989
- font-size: var(--type-caption-size);
2990
- text-align: center;
2991
- }
2992
- .pui-calendar-day {
2993
- display: flex;
2994
- align-items: center;
2995
- justify-content: center;
2996
- box-sizing: border-box;
2997
- width: 100%;
2998
- min-height: 36px;
2999
- border: 1px solid transparent;
3000
- border-radius: var(--radius-sm);
3001
- cursor: pointer;
3002
- outline: none;
3003
- font-variant-numeric: tabular-nums;
3004
- }
3005
- .pui-calendar-day[data-hovered]:not(
3006
- [data-disabled],
3007
- [data-unavailable],
3008
- [data-selected]
3009
- ) {
3010
- background: var(--selected);
3011
- }
3012
- .pui-calendar-day[data-selected] {
3013
- background: var(--selected);
3014
- color: var(--ink);
3015
- }
3016
- .pui-calendar-day:is([data-selection-start], [data-selection-end]) {
3017
- background: var(--brand);
3018
- color: var(--on-brand);
3019
- }
3020
- .pui-calendar-day[data-focus-visible] {
3021
- outline: 2px solid var(--control-focus);
3022
- outline-offset: -2px;
3023
- }
3024
- .pui-calendar-day[data-today] {
3025
- border-color: var(--control-border);
3026
- }
3027
- .pui-calendar-day[data-outside-month] {
3028
- visibility: hidden;
3029
- }
3030
- .pui-calendar-day:is([data-disabled], [data-unavailable]) {
3031
- color: var(--ink-muted);
3032
- text-decoration: line-through;
3033
- cursor: not-allowed;
3034
- opacity: var(--control-disabled-opacity);
3035
- }
3036
- @media (max-width: 760px), (pointer: coarse) {
3037
- .pui-date-trigger,
3038
- .pui-calendar-nav {
3039
- width: 40px;
3040
- height: 40px;
3041
- min-width: 40px;
3042
- }
3043
- .pui-calendar-day {
3044
- min-height: 40px;
3045
- }
3046
- }
3047
- @media (prefers-reduced-motion: reduce) {
3048
- .pui-date-group,
3049
- .pui-date-trigger,
3050
- .pui-calendar-nav {
3051
- transition: none;
3052
- }
3053
- }
3054
- @media (forced-colors: active) {
3055
- .pui-date-group,
3056
- .pui-date-popover {
3057
- border-color: CanvasText;
3058
- }
3059
- .pui-date-group[data-focus-within],
3060
- .pui-date-group:focus-within {
3061
- outline: 2px solid Highlight;
3062
- }
3063
- .pui-calendar-day[data-selected] {
3064
- background: Highlight;
3065
- color: HighlightText;
3066
- forced-color-adjust: none;
3067
- }
3068
- .pui-calendar-day[data-focus-visible],
3069
- .pui-date-segment[data-focused] {
3070
- outline-color: Highlight;
3071
- }
3072
- }
3073
-
3074
- .pui-calendar-grid :is(th, td) {
3075
- padding: 0;
3076
- border: 0;
3077
- min-width: 0;
3078
- text-align: center;
3079
- }
3080
- .pui-calendar-day[data-focus-visible][data-selected] {
3081
- outline-color: var(--ink);
3082
- }
3083
- .pui-calendar:dir(rtl) .pui-calendar-nav svg {
3084
- transform: scaleX(-1);
3085
- }
3086
-
3087
- @media (prefers-reduced-motion: reduce) {
3088
- .pui-file-dropzone {
3089
- transition: none;
3090
- }
3091
- }
3092
-
3093
- .pui-chart {
3094
- min-width: 0;
3095
- max-width: 100%;
3096
- margin: 0;
3097
- display: flex;
3098
- flex-direction: column;
3099
- gap: var(--space-3);
3100
- }
3101
- .pui-chart-caption strong {
3102
- font: 500 var(--type-subsection-size)/var(--type-subsection-leading)
3103
- var(--font-body);
3104
- }
3105
- .pui-chart-caption p,
3106
- .pui-chart-help {
3107
- margin: var(--space-2) 0 0;
3108
- color: var(--ink-muted);
3109
- font: 400 var(--type-body-size)/var(--type-body-leading) var(--font-body);
3110
- }
3111
- .pui-chart-legend {
3112
- display: flex;
3113
- flex-wrap: wrap;
3114
- gap: var(--space-1) var(--space-2);
3115
- padding: 0;
3116
- margin: 0;
3117
- list-style: none;
3118
- }
3119
- .pui-chart-legend-button {
3120
- max-width: 100%;
3121
- display: inline-flex;
3122
- align-items: center;
3123
- gap: var(--space-2);
3124
- min-height: 36px;
3125
- padding: var(--space-1) var(--space-2);
3126
- border: 0;
3127
- border-radius: var(--radius-md);
3128
- background: transparent;
3129
- color: var(--ink-body);
3130
- font: 400 var(--type-body-size)/var(--type-body-leading) var(--font-body);
3131
- cursor: pointer;
3132
- text-align: start;
3133
- }
3134
- .pui-chart-legend-button svg {
3135
- flex: none;
3136
- }
3137
- .pui-chart-legend-button span {
3138
- overflow-wrap: anywhere;
3139
- }
3140
- .pui-chart-legend-button:hover {
3141
- background: var(--interaction-hover-bg);
3142
- }
3143
- .pui-chart-legend-button:active {
3144
- background: var(--interaction-active-bg);
3145
- }
3146
- .pui-chart-legend-button[aria-pressed='false'] span {
3147
- text-decoration: line-through;
3148
- color: var(--ink-muted);
3149
- }
3150
- .pui-chart-legend-button:focus-visible,
3151
- .pui-chart-plot .recharts-surface:focus-visible,
3152
- .pui-chart-table summary:focus-visible {
3153
- outline: 2px solid var(--interaction-focus);
3154
- outline-offset: 2px;
3155
- border-radius: var(--radius-sm);
3156
- }
3157
- .pui-chart-axis-label {
3158
- margin: 0;
3159
- color: var(--ink-muted);
3160
- font: 400 var(--type-caption-size)/var(--type-caption-leading)
3161
- var(--font-body);
3162
- overflow-wrap: anywhere;
3163
- }
3164
- .pui-chart-x-label {
3165
- text-align: center;
3166
- }
3167
- .pui-chart-plot {
3168
- min-width: 0;
3169
- width: 100%;
3170
- font-family: var(--font-body);
3171
- }
3172
- .pui-chart-inspector {
3173
- box-sizing: border-box;
3174
- min-height: 100px;
3175
- padding: var(--space-3) var(--space-4);
3176
- background: var(--surface);
3177
- color: var(--ink-body);
3178
- border-radius: var(--radius-md);
3179
- font: 400 var(--type-body-size)/var(--type-body-leading) var(--font-body);
3180
- overflow-wrap: anywhere;
3181
- }
3182
- .pui-chart-inspector[hidden] {
3183
- display: none;
3184
- }
3185
- .pui-chart-readout strong {
3186
- font-weight: 500;
3187
- }
3188
- .pui-chart-readout ul {
3189
- display: flex;
3190
- flex-wrap: wrap;
3191
- gap: var(--space-2) var(--space-4);
3192
- list-style: none;
3193
- padding: 0;
3194
- margin: var(--space-2) 0 0;
3195
- }
3196
- .pui-chart-empty {
3197
- display: flex;
3198
- align-items: center;
3199
- flex-wrap: wrap;
3200
- gap: var(--space-3);
3201
- min-height: 160px;
3202
- padding: var(--space-4);
3203
- background: var(--surface);
3204
- color: var(--ink-muted);
3205
- border-radius: var(--radius-md);
3206
- }
3207
- .pui-chart-empty p {
3208
- margin: 0;
3209
- }
3210
- .pui-chart-table {
3211
- min-width: 0;
3212
- }
3213
- .pui-chart-table summary {
3214
- width: fit-content;
3215
- cursor: pointer;
3216
- color: var(--ink);
3217
- padding-block: var(--space-2);
3218
- text-decoration: underline;
3219
- text-underline-offset: 3px;
3220
- }
3221
- .pui-chart-table .pui-scroll-root {
3222
- max-height: 320px;
3223
- margin-top: var(--space-2);
3224
- }
3225
- @media (max-width: 760px), (pointer: coarse) {
3226
- .pui-chart-legend-button {
3227
- min-height: 44px;
3228
- }
3229
- }
3230
- @media (forced-colors: active) {
3231
- .pui-chart {
3232
- --canvas: Canvas;
3233
- --ink-muted: CanvasText;
3234
- --line: GrayText;
3235
- --control-border: CanvasText;
3236
- --chart-series-1: CanvasText;
3237
- --chart-series-2: CanvasText;
3238
- --chart-series-3: CanvasText;
3239
- }
3240
- .pui-chart-plot .recharts-surface,
3241
- .pui-chart-legend svg {
3242
- forced-color-adjust: none;
3243
- }
3244
- .pui-chart-inspector,
3245
- .pui-chart-empty {
3246
- background: Canvas;
3247
- color: CanvasText;
3248
- border: 1px solid CanvasText;
3249
- }
3250
- .pui-chart-plot .recharts-cartesian-axis-tick text {
3251
- fill: CanvasText;
3252
- }
3253
- }
3254
-
3255
- /* SizeProvider adds no layout box. Screen-reader semantics belong to its children. */
3256
- .pui-size-scope {
3257
- display: contents;
3258
- }
3259
-
3260
- [data-ui-size='small'] {
3261
- --ui-slider-track: var(--size-slider-track-small);
3262
- --ui-file-padding: var(--size-file-padding-small);
3263
- --ui-content-gap: var(--size-content-gap-small);
3264
-
3265
- --ui-control-height: var(--size-control-height-small);
3266
- --ui-control-padding: var(--size-control-padding-small);
3267
- --ui-button-padding: var(--size-button-padding-small);
3268
- --ui-font: var(--size-font-small);
3269
- --ui-leading: var(--size-leading-small);
3270
- --ui-choice: var(--size-choice-small);
3271
- --ui-switch-width: var(--size-switch-width-small);
3272
- --ui-switch-height: var(--size-switch-height-small);
3273
- --ui-switch-thumb: var(--size-switch-thumb-small);
3274
- --ui-icon: var(--size-icon-small);
3275
- --ui-surface-padding: var(--size-surface-padding-small);
3276
- --ui-card-padding: var(--size-card-padding-small);
3277
- --ui-gap: var(--size-gap-small);
3278
- --ui-row: var(--size-row-small);
3279
- --ui-table-padding-y: var(--size-table-padding-y-small);
3280
- --ui-table-padding-x: var(--size-table-padding-x-small);
3281
- --ui-avatar: var(--size-avatar-small);
3282
- --ui-spinner: var(--size-spinner-small);
3283
- --ui-badge-padding-y: var(--size-badge-padding-y-small);
3284
- --ui-badge-padding-x: var(--size-badge-padding-x-small);
3285
- --ui-badge-font: var(--size-badge-font-small);
3286
- --ui-gauge: var(--size-gauge-small);
3287
- --ui-slider-thumb: var(--size-slider-thumb-small);
3288
- --ui-otp: var(--size-otp-small);
3289
- --ui-tree-row: var(--size-tree-row-small);
3290
- --ui-textarea-padding: var(--size-textarea-padding-small);
3291
- --ui-tooltip-padding-y: var(--size-tooltip-padding-y-small);
3292
- --ui-tooltip-padding-x: var(--size-tooltip-padding-x-small);
3293
- --control-height: var(--ui-control-height);
3294
- --control-padding-x: var(--ui-control-padding);
3295
- --control-choice-size: var(--ui-choice);
3296
- --control-switch-width: var(--ui-switch-width);
3297
- --control-switch-height: var(--ui-switch-height);
3298
- --control-switch-thumb: var(--ui-switch-thumb);
3299
- }
3300
-
3301
- [data-ui-size='default'] {
3302
- --ui-slider-track: var(--size-slider-track-default);
3303
- --ui-file-padding: var(--size-file-padding-default);
3304
- --ui-content-gap: var(--size-content-gap-default);
3305
-
3306
- --ui-control-height: var(--size-control-height-default);
3307
- --ui-control-padding: var(--size-control-padding-default);
3308
- --ui-button-padding: var(--size-button-padding-default);
3309
- --ui-font: var(--size-font-default);
3310
- --ui-leading: var(--size-leading-default);
3311
- --ui-choice: var(--size-choice-default);
3312
- --ui-switch-width: var(--size-switch-width-default);
3313
- --ui-switch-height: var(--size-switch-height-default);
3314
- --ui-switch-thumb: var(--size-switch-thumb-default);
3315
- --ui-icon: var(--size-icon-default);
3316
- --ui-surface-padding: var(--size-surface-padding-default);
3317
- --ui-card-padding: var(--size-card-padding-default);
3318
- --ui-gap: var(--size-gap-default);
3319
- --ui-row: var(--size-row-default);
3320
- --ui-table-padding-y: var(--size-table-padding-y-default);
3321
- --ui-table-padding-x: var(--size-table-padding-x-default);
3322
- --ui-avatar: var(--size-avatar-default);
3323
- --ui-spinner: var(--size-spinner-default);
3324
- --ui-badge-padding-y: var(--size-badge-padding-y-default);
3325
- --ui-badge-padding-x: var(--size-badge-padding-x-default);
3326
- --ui-badge-font: var(--size-badge-font-default);
3327
- --ui-gauge: var(--size-gauge-default);
3328
- --ui-slider-thumb: var(--size-slider-thumb-default);
3329
- --ui-otp: var(--size-otp-default);
3330
- --ui-tree-row: var(--size-tree-row-default);
3331
- --ui-textarea-padding: var(--size-textarea-padding-default);
3332
- --ui-tooltip-padding-y: var(--size-tooltip-padding-y-default);
3333
- --ui-tooltip-padding-x: var(--size-tooltip-padding-x-default);
3334
- --control-height: var(--ui-control-height);
3335
- --control-padding-x: var(--ui-control-padding);
3336
- --control-choice-size: var(--ui-choice);
3337
- --control-switch-width: var(--ui-switch-width);
3338
- --control-switch-height: var(--ui-switch-height);
3339
- --control-switch-thumb: var(--ui-switch-thumb);
3340
- }
3341
-
3342
- [data-ui-size='large'] {
3343
- --ui-slider-track: var(--size-slider-track-large);
3344
- --ui-file-padding: var(--size-file-padding-large);
3345
- --ui-content-gap: var(--size-content-gap-large);
3346
-
3347
- --ui-control-height: var(--size-control-height-large);
3348
- --ui-control-padding: var(--size-control-padding-large);
3349
- --ui-button-padding: var(--size-button-padding-large);
3350
- --ui-font: var(--size-font-large);
3351
- --ui-leading: var(--size-leading-large);
3352
- --ui-choice: var(--size-choice-large);
3353
- --ui-switch-width: var(--size-switch-width-large);
3354
- --ui-switch-height: var(--size-switch-height-large);
3355
- --ui-switch-thumb: var(--size-switch-thumb-large);
3356
- --ui-icon: var(--size-icon-large);
3357
- --ui-surface-padding: var(--size-surface-padding-large);
3358
- --ui-card-padding: var(--size-card-padding-large);
3359
- --ui-gap: var(--size-gap-large);
3360
- --ui-row: var(--size-row-large);
3361
- --ui-table-padding-y: var(--size-table-padding-y-large);
3362
- --ui-table-padding-x: var(--size-table-padding-x-large);
3363
- --ui-avatar: var(--size-avatar-large);
3364
- --ui-spinner: var(--size-spinner-large);
3365
- --ui-badge-padding-y: var(--size-badge-padding-y-large);
3366
- --ui-badge-padding-x: var(--size-badge-padding-x-large);
3367
- --ui-badge-font: var(--size-badge-font-large);
3368
- --ui-gauge: var(--size-gauge-large);
3369
- --ui-slider-thumb: var(--size-slider-thumb-large);
3370
- --ui-otp: var(--size-otp-large);
3371
- --ui-tree-row: var(--size-tree-row-large);
3372
- --ui-textarea-padding: var(--size-textarea-padding-large);
3373
- --ui-tooltip-padding-y: var(--size-tooltip-padding-y-large);
3374
- --ui-tooltip-padding-x: var(--size-tooltip-padding-x-large);
3375
- --control-height: var(--ui-control-height);
3376
- --control-padding-x: var(--ui-control-padding);
3377
- --control-choice-size: var(--ui-choice);
3378
- --control-switch-width: var(--ui-switch-width);
3379
- --control-switch-height: var(--ui-switch-height);
3380
- --control-switch-thumb: var(--ui-switch-thumb);
3381
- }
3382
-
3383
- :where([data-ui-size], [data-ui-size] *).pui-button {
3384
- height: var(--control-height);
3385
- min-height: var(--control-height);
3386
- padding-inline: var(--ui-button-padding);
3387
- font-size: var(--ui-font);
3388
- line-height: var(--ui-leading);
3389
- }
3390
- :where([data-ui-size], [data-ui-size] *).pui-button[data-size^='icon'] {
3391
- inline-size: var(--control-height);
3392
- block-size: var(--control-height);
3393
- padding: 0;
3394
- border-radius: var(--radius-full);
3395
- }
3396
- :where([data-ui-size], [data-ui-size] *):is(
3397
- .pui-input,
3398
- .pui-select-trigger,
3399
- .pui-combobox-input,
3400
- .pui-number-input,
3401
- .pui-date-input,
3402
- .pui-date-segment
3403
- ) {
3404
- font-size: var(--ui-font);
3405
- line-height: var(--ui-leading);
3406
- }
3407
- :where([data-ui-size], [data-ui-size] *).pui-textarea {
3408
- height: auto;
3409
- min-height: calc(var(--control-height) * 2.5);
3410
- padding-block: var(--ui-textarea-padding);
3411
- }
3412
- :where([data-ui-size], [data-ui-size] *):is(
3413
- .pui-tabs-tab,
3414
- .pui-toggle,
3415
- .pui-menu-item,
3416
- .pui-select-item,
3417
- .pui-combobox-item,
3418
- .pui-navigation-trigger,
3419
- .pui-navigation-link
3420
- ) {
3421
- min-block-size: var(--ui-row);
3422
- font-size: var(--ui-font);
3423
- line-height: var(--ui-leading);
3424
- }
3425
- /* At the default size these equal the base rules: a default SizeProvider changes nothing. */
3426
- :where([data-ui-size], [data-ui-size] *).pui-disclosure-trigger {
3427
- min-block-size: var(--control-height);
3428
- font-size: var(--ui-font);
3429
- padding-block: calc(var(--ui-gap) * 1.5);
3430
- }
3431
- :where([data-ui-size], [data-ui-size] *).pui-popover {
3432
- padding: var(--ui-surface-padding);
3433
- }
3434
- :where([data-ui-size], [data-ui-size] *).pui-tooltip {
3435
- padding: var(--ui-tooltip-padding-y) var(--ui-tooltip-padding-x);
3436
- }
3437
- :where([data-ui-size], [data-ui-size] *).pui-dialog-body {
3438
- padding: var(--ui-card-padding);
3439
- }
3440
- :where([data-ui-size], [data-ui-size] *):is(
3441
- .pui-dialog-header,
3442
- .pui-dialog-footer
3443
- ) {
3444
- padding-inline: var(--ui-card-padding);
3445
- }
3446
- :where([data-ui-size], [data-ui-size] *).pui-dialog-header {
3447
- padding-inline-end: calc(var(--ui-card-padding) + 48px);
3448
- }
3449
- :where([data-ui-size], [data-ui-size] *).pui-confirm-content
3450
- .pui-dialog-header {
3451
- padding-inline-end: var(--ui-card-padding);
3452
- }
3453
- :where([data-ui-size], [data-ui-size] *):is(
3454
- .pui-panel-header,
3455
- .pui-panel-body,
3456
- .pui-panel-footer
3457
- ) {
3458
- padding-inline: var(--ui-card-padding);
3459
- }
3460
- /* The title keeps clear of the close button: its 16px inset, its width and a 16px gap. */
3461
- :where([data-ui-size], [data-ui-size] *).pui-panel-header {
3462
- padding-inline-end: calc(var(--control-height) + var(--space-4) * 2);
3463
- }
3464
- :where([data-ui-size], [data-ui-size] *).pui-card {
3465
- padding: var(--surface-padding, var(--ui-card-padding));
3466
- gap: var(--ui-surface-padding);
3467
- }
3468
- :where([data-ui-size], [data-ui-size] *).pui-badge {
3469
- padding: var(--ui-badge-padding-y) var(--ui-badge-padding-x);
3470
- font-size: var(--ui-badge-font);
3471
- }
3472
- :where([data-ui-size], [data-ui-size] *).pui-avatar {
3473
- width: var(--ui-avatar);
3474
- height: var(--ui-avatar);
3475
- }
3476
- :where([data-ui-size], [data-ui-size] *).pui-spinner {
3477
- width: var(--ui-spinner);
3478
- height: var(--ui-spinner);
3479
- }
3480
- :where([data-ui-size], [data-ui-size] *).pui-table-cell {
3481
- padding: var(--ui-table-padding-y) var(--ui-table-padding-x);
3482
- }
3483
- :where([data-ui-size], [data-ui-size] *).pui-table-caption {
3484
- padding-inline: var(--ui-table-padding-x);
3485
- }
3486
- :where([data-ui-size], [data-ui-size] *).pui-list-item {
3487
- padding: var(--ui-table-padding-y) var(--ui-surface-padding);
3488
- gap: var(--ui-surface-padding);
3489
- }
3490
- :where([data-ui-size], [data-ui-size] *).pui-message {
3491
- padding: var(--ui-surface-padding);
3492
- gap: var(--ui-content-gap);
3493
- }
3494
- :where([data-ui-size], [data-ui-size] *).pui-gauge-track {
3495
- height: var(--ui-gauge);
3496
- }
3497
- :where([data-ui-size], [data-ui-size] *).pui-slider-thumb {
3498
- width: var(--ui-slider-thumb);
3499
- height: var(--ui-slider-thumb);
3500
- }
3501
- :where([data-ui-size], [data-ui-size] *).pui-otp-input {
3502
- flex-basis: var(--ui-otp);
3503
- width: var(--ui-otp);
3504
- height: var(--ui-otp);
3505
- }
3506
- :where([data-ui-size], [data-ui-size] *).pui-file-dropzone {
3507
- padding: var(--ui-file-padding);
3508
- }
3509
- :where([data-ui-size], [data-ui-size] *).pui-toast {
3510
- padding: var(--ui-surface-padding);
3511
- }
3512
- :where([data-ui-size], [data-ui-size] *).pui-code-text {
3513
- padding: var(--ui-surface-padding);
3514
- }
3515
- :where([data-ui-size], [data-ui-size] *).pui-skeleton[data-shape='text'] {
3516
- height: var(--ui-leading);
3517
- }
3518
- :where([data-ui-size], [data-ui-size] *).pui-radio-indicator {
3519
- width: calc(var(--control-choice-size) * 0.4);
3520
- height: calc(var(--control-choice-size) * 0.4);
3521
- }
3522
-
3523
- /* Coarse pointers retain comfortable targets even with a compact visual scheme. */
3524
- @media (max-width: 760px), (pointer: coarse) {
3525
- [data-ui-size] {
3526
- --control-height: max(44px, var(--ui-control-height));
3527
- --ui-row: max(44px, var(--ui-control-height));
3528
- }
3529
- }
3530
- @media (forced-colors: active) {
3531
- :where([data-ui-size], [data-ui-size] *).pui-badge {
3532
- border: 1px solid CanvasText;
3533
- padding: calc(var(--ui-badge-padding-y) - 1px)
3534
- calc(var(--ui-badge-padding-x) - 1px);
3535
- }
3536
- }
3537
-
3538
- :where([data-ui-size], [data-ui-size] *):is(
3539
- .pui-menu-item,
3540
- .pui-select-item,
3541
- .pui-combobox-item
3542
- ) {
3543
- box-sizing: border-box;
3544
- padding-block: max(4px, calc((var(--ui-row) - var(--ui-leading)) / 2));
3545
- }
3546
- :where([data-ui-size], [data-ui-size] *):is(.pui-button, .pui-date-trigger)
3547
- > svg {
3548
- inline-size: var(--ui-icon);
3549
- block-size: var(--ui-icon);
3550
- }
3551
- :where([data-ui-size], [data-ui-size] *).pui-date-popover {
3552
- padding: var(--ui-surface-padding);
3553
- }
3554
- :where([data-ui-size], [data-ui-size] *).pui-empty {
3555
- padding: var(--ui-card-padding);
3556
- }
3557
- :where([data-ui-size], [data-ui-size] *).pui-tree-item {
3558
- font-size: var(--ui-font);
3559
- }
3560
- :where([data-ui-size], [data-ui-size] *).pui-field-item {
3561
- min-block-size: var(--control-height);
3562
- }
3563
- @media (max-width: 760px), (pointer: coarse) {
3564
- :where([data-ui-size], [data-ui-size] *).pui-field-item {
3565
- min-block-size: 44px;
3566
- }
3567
- :where([data-ui-size], [data-ui-size] *).pui-slider-control {
3568
- min-block-size: 44px;
3569
- }
3570
- }
3571
-
3572
- :where([data-ui-size], [data-ui-size] *).pui-calendar-day {
3573
- min-block-size: var(--ui-row);
3574
- }
3575
- :where([data-ui-size], [data-ui-size] *):is(
3576
- .pui-date-trigger,
3577
- .pui-calendar-nav
3578
- ) {
3579
- inline-size: calc(var(--control-height) - 4px);
3580
- block-size: calc(var(--control-height) - 4px);
3581
- min-inline-size: 0;
3582
- }
3583
- :where([data-ui-size], [data-ui-size] *).pui-slider-track:not(
3584
- [data-orientation='vertical']
3585
- ) {
3586
- height: var(--ui-gauge);
3587
- }
3588
- :where(
3589
- [data-ui-size],
3590
- [data-ui-size] *
3591
- ).pui-slider-track[data-orientation='vertical'] {
3592
- width: var(--ui-slider-track);
3593
- }
3594
- :where([data-ui-size], [data-ui-size] *):is(.pui-link, .pui-breadcrumbs) {
3595
- font-size: var(--ui-font);
3596
- }
3597
- :where([data-ui-size], [data-ui-size] *).pui-avatar[data-ui-size] {
3598
- font-size: clamp(12px, calc(var(--ui-avatar) / 3), 16px);
3599
- }
3600
- @media (max-width: 760px), (pointer: coarse) {
3601
- :where([data-ui-size], [data-ui-size] *):is(
3602
- .pui-date-trigger,
3603
- .pui-calendar-nav
3604
- ) {
3605
- inline-size: 44px;
3606
- block-size: 44px;
3607
- }
3608
- }
3609
-
3610
- /* Syntax tokens are semantic color roles; source text, type and geometry remain unchanged. */
3611
- .pui-syntax {
3612
- color: var(--syntax-plain);
3613
- font: inherit;
3614
- letter-spacing: inherit;
3615
- }
3616
- .pui-syntax [data-syntax] {
3617
- font: inherit;
3618
- letter-spacing: inherit;
3619
- }
3620
- .pui-syntax [data-syntax='plain'] {
3621
- color: var(--syntax-plain);
3622
- }
3623
- .pui-syntax [data-syntax='comment'] {
3624
- color: var(--syntax-comment);
3625
- }
3626
- .pui-syntax [data-syntax='keyword'] {
3627
- color: var(--syntax-keyword);
3628
- }
3629
- .pui-syntax [data-syntax='string'] {
3630
- color: var(--syntax-string);
3631
- }
3632
- .pui-syntax [data-syntax='number'] {
3633
- color: var(--syntax-number);
3634
- }
3635
- .pui-syntax [data-syntax='function'] {
3636
- color: var(--syntax-function);
3637
- }
3638
- .pui-syntax [data-syntax='tag'] {
3639
- color: var(--syntax-tag);
3640
- }
3641
- .pui-syntax [data-syntax='attribute'] {
3642
- color: var(--syntax-attribute);
3643
- }
3644
- .pui-syntax [data-syntax='punctuation'] {
3645
- color: var(--syntax-punctuation);
3646
- }
3647
-
3648
- .pui-syntax-pre {
3649
- box-sizing: border-box;
3650
- min-inline-size: 0;
3651
- margin: 0;
3652
- padding: var(--ui-surface-padding, var(--space-4));
3653
- background: var(--code-bg);
3654
- border-radius: var(--radius-md);
3655
- font: 400 13px/20px var(--font-code);
3656
- /* Code shows the characters as typed, like the other code text: no === or => ligatures. */
3657
- font-variant-ligatures: none;
3658
- letter-spacing: 0;
3659
- tab-size: 2;
3660
- white-space: pre;
3661
- }
3662
- /* The visible box keeps its background and corners while long lines scroll inside it. */
3663
- .pui-syntax-scroll {
3664
- border-radius: var(--radius-md);
3665
- background: var(--code-bg);
3666
- overflow: hidden;
3667
- }
3668
- .pui-syntax-scroll .pui-syntax-pre {
3669
- min-inline-size: max-content;
3670
- border-radius: 0;
3671
- background: none;
3672
- }
3673
- .pui-syntax-scroll .pui-syntax-pre[data-wrap] {
3674
- min-inline-size: 0;
3675
- }
3676
- .pui-syntax-pre[data-wrap] {
3677
- white-space: pre-wrap;
3678
- overflow-wrap: anywhere;
3679
- }
3680
- .pui-markdown {
3681
- min-inline-size: 0;
3682
- overflow-wrap: anywhere;
3683
- }
3684
- .pui-markdown > :first-child {
3685
- margin-block-start: 0;
3686
- }
3687
- .pui-markdown > :last-child {
3688
- margin-block-end: 0;
3689
- }
3690
- .pui-markdown .pui-code-block {
3691
- max-inline-size: 100%;
3692
- margin-block: var(--space-4);
3693
- }
3694
- .pui-markdown img {
3695
- display: block;
3696
- max-inline-size: 100%;
3697
- block-size: auto;
3698
- border-radius: var(--radius-md);
3699
- }
3700
- .pui-markdown blockquote {
3701
- margin-inline: 0;
3702
- padding-inline-start: var(--space-4);
3703
- border-inline-start: 2px solid var(--line);
3704
- color: var(--ink-body);
3705
- }
3706
- .pui-markdown a {
3707
- color: var(--ink);
3708
- text-decoration: underline;
3709
- text-underline-offset: 3px;
3710
- }
3711
- .pui-markdown a:focus-visible {
3712
- outline: 2px solid var(--interaction-focus);
3713
- outline-offset: 2px;
3714
- }
3715
- .pui-markdown .contains-task-list {
3716
- list-style: none;
3717
- padding-inline-start: 0;
3718
- }
3719
- .pui-markdown .task-list-item {
3720
- display: list-item;
3721
- }
3722
- .pui-markdown .task-list-item input {
3723
- margin-inline-end: var(--space-2);
3724
- accent-color: var(--ink);
3725
- }
3726
- /* Markdown always renders inside pui-prose, whose code rule sets the family, size,
3727
- * radius and ligatures. */
3728
- .pui-markdown-inline-code {
3729
- padding: 2px 4px;
3730
- background: var(--code-bg);
3731
- font-weight: 400;
3732
- line-height: 20px;
3733
- letter-spacing: 0;
3734
- }
3735
- .pui-markdown .pui-table {
3736
- min-inline-size: 480px;
3737
- }
3738
- @media (forced-colors: active) {
3739
- .pui-syntax,
3740
- .pui-syntax [data-syntax] {
3741
- color: CanvasText;
3742
- }
3743
- }
3744
-
3745
- /* Touch feedback is each control's own hover and pressed layer, drawn in its own
3746
- shape. The browser's tap highlight is a rectangle over the box, so it is off. */
3747
- :where(
3748
- .pui-button,
3749
- .pui-tabs-tab,
3750
- .pui-disclosure-trigger,
3751
- .pui-app-shell-link,
3752
- .pui-tree-item,
3753
- .pui-tree-toggle,
3754
- .pui-chart-legend-button,
3755
- .pui-checkbox,
3756
- .pui-radio,
3757
- .pui-switch,
3758
- .pui-choice-label,
3759
- .pui-select-trigger,
3760
- .pui-select-item,
3761
- .pui-combobox-item,
3762
- .pui-combobox-action,
3763
- .pui-combobox-chip-remove,
3764
- .pui-menu-item,
3765
- .pui-navigation-trigger,
3766
- .pui-navigation-link,
3767
- .pui-link,
3768
- .pui-breadcrumb-item a,
3769
- .pui-calendar-day,
3770
- .pui-calendar-nav,
3771
- .pui-date-trigger,
3772
- .pui-file-trigger,
3773
- .pui-number-step,
3774
- .pui-slider-control,
3775
- .pui-toast-action,
3776
- .pui-toast-close
3777
- ) {
3778
- -webkit-tap-highlight-color: transparent;
3779
- }
3780
- }