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