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