@surflane/ui 0.1.0 → 0.2.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 (85) hide show
  1. package/README.md +8 -8
  2. package/dist/advanced-forms.d.ts +2 -2
  3. package/dist/advanced-forms.js +39 -39
  4. package/dist/app-shell.d.ts +1 -1
  5. package/dist/app-shell.js +11 -11
  6. package/dist/button.d.ts +5 -5
  7. package/dist/button.js +12 -12
  8. package/dist/chart.d.ts +3 -3
  9. package/dist/chart.js +36 -34
  10. package/dist/commands.d.ts +5 -5
  11. package/dist/commands.js +17 -17
  12. package/dist/content.d.ts +2 -2
  13. package/dist/content.js +66 -28
  14. package/dist/context-overlays.d.ts +3 -3
  15. package/dist/context-overlays.js +11 -11
  16. package/dist/data.d.ts +1 -1
  17. package/dist/data.js +18 -18
  18. package/dist/date-picker.d.ts +8 -8
  19. package/dist/date-picker.js +18 -18
  20. package/dist/dialog-focus.js +7 -7
  21. package/dist/dialog.d.ts +5 -5
  22. package/dist/dialog.js +16 -16
  23. package/dist/feedback.d.ts +5 -5
  24. package/dist/feedback.js +20 -20
  25. package/dist/file-upload.d.ts +9 -9
  26. package/dist/file-upload.js +64 -63
  27. package/dist/filter-bar.d.ts +1 -1
  28. package/dist/filter-bar.js +9 -9
  29. package/dist/form-state.d.ts +1 -1
  30. package/dist/form-state.js +11 -11
  31. package/dist/forms.d.ts +5 -5
  32. package/dist/forms.js +32 -32
  33. package/dist/foundations.d.ts +10 -10
  34. package/dist/foundations.js +26 -26
  35. package/dist/icon.d.ts +7 -7
  36. package/dist/icon.js +22 -22
  37. package/dist/index.d.ts +37 -37
  38. package/dist/index.js +38 -38
  39. package/dist/input-extensions.d.ts +3 -3
  40. package/dist/input-extensions.js +21 -21
  41. package/dist/input.d.ts +2 -2
  42. package/dist/input.js +7 -7
  43. package/dist/markdown.d.ts +2 -2
  44. package/dist/markdown.js +38 -38
  45. package/dist/menu.d.ts +2 -2
  46. package/dist/menu.js +19 -19
  47. package/dist/messages.d.ts +2 -2
  48. package/dist/messages.js +18 -18
  49. package/dist/navigation-menu.d.ts +2 -2
  50. package/dist/navigation-menu.js +16 -16
  51. package/dist/navigation.d.ts +5 -5
  52. package/dist/navigation.js +40 -40
  53. package/dist/otp-field.d.ts +1 -1
  54. package/dist/otp-field.js +14 -14
  55. package/dist/pagination.d.ts +2 -2
  56. package/dist/pagination.js +12 -12
  57. package/dist/panels.d.ts +8 -8
  58. package/dist/panels.js +39 -39
  59. package/dist/parts.d.ts +2 -2
  60. package/dist/parts.js +8 -8
  61. package/dist/popover.d.ts +3 -3
  62. package/dist/popover.js +6 -6
  63. package/dist/scroll-area.d.ts +1 -1
  64. package/dist/scroll-area.js +20 -20
  65. package/dist/select.d.ts +8 -8
  66. package/dist/select.js +21 -21
  67. package/dist/sizing.d.ts +3 -3
  68. package/dist/sizing.js +9 -9
  69. package/dist/slot.d.ts +1 -1
  70. package/dist/slot.js +4 -4
  71. package/dist/status.d.ts +4 -4
  72. package/dist/status.js +8 -8
  73. package/dist/syntax-engine.js +43 -43
  74. package/dist/syntax-highlighter.d.ts +2 -2
  75. package/dist/syntax-highlighter.js +32 -32
  76. package/dist/toast.d.ts +4 -4
  77. package/dist/toast.js +33 -33
  78. package/dist/tone-transition.d.ts +1 -1
  79. package/dist/tone-transition.js +17 -17
  80. package/dist/tooltip.d.ts +1 -1
  81. package/dist/tooltip.js +4 -4
  82. package/dist/tree.d.ts +4 -4
  83. package/dist/tree.js +60 -60
  84. package/package.json +2 -2
  85. package/src/styles.css +233 -142
package/src/styles.css CHANGED
@@ -1,5 +1,5 @@
1
- @import "@surflane/design-tokens/foundations.css";
2
- @import "@surflane/design-tokens/presentation.css";
1
+ @import '@surflane/design-tokens/foundations.css';
2
+ @import '@surflane/design-tokens/presentation.css';
3
3
 
4
4
  /* Explicit component classes: no utility framework or application-wide reset. */
5
5
  .pui-control,
@@ -33,10 +33,10 @@
33
33
  color: var(--control-placeholder);
34
34
  opacity: 1;
35
35
  }
36
- .pui-input:hover:not(:disabled, [aria-disabled="true"], [readonly], :focus),
36
+ .pui-input:hover:not(:disabled, [aria-disabled='true'], [readonly], :focus),
37
37
  .pui-select-trigger:hover:not(
38
38
  :disabled,
39
- [aria-disabled="true"],
39
+ [aria-disabled='true'],
40
40
  :focus-visible
41
41
  ) {
42
42
  background: var(--control-hover-background);
@@ -55,8 +55,8 @@
55
55
  cursor: not-allowed;
56
56
  background: var(--control-disabled-background);
57
57
  }
58
- .pui-input[aria-invalid="true"],
59
- .pui-select-trigger[aria-invalid="true"] {
58
+ .pui-input[aria-invalid='true'],
59
+ .pui-select-trigger[aria-invalid='true'] {
60
60
  border-color: var(--status-danger-fg);
61
61
  }
62
62
  .pui-control-icon {
@@ -187,27 +187,38 @@
187
187
  text-decoration: none;
188
188
  cursor: pointer;
189
189
  }
190
- .pui-button:is([data-variant="default"], [data-variant="primary"]) {
190
+ .pui-button:is([data-variant='default'], [data-variant='primary']) {
191
+ /* On the brand fill the layer is its ink: light ink barely moves bright cyan. */
192
+ --interaction-hover-bg: oklch(from var(--on-brand) l c h / 0.08);
193
+ --interaction-active-bg: oklch(from var(--on-brand) l c h / 0.14);
191
194
  background: var(--brand);
192
195
  border-color: transparent;
193
196
  color: var(--on-brand);
194
197
  }
195
- .pui-button[data-variant="outline"] {
198
+ .pui-button[data-variant='outline'] {
196
199
  border-color: var(--line);
197
200
  background: transparent;
198
201
  }
199
- .pui-button[data-variant="ghost"] {
202
+ .pui-button[data-variant='ghost'] {
200
203
  border-color: transparent;
201
204
  background: transparent;
202
205
  }
203
- .pui-button:hover:not(:disabled):not([data-disabled]) {
204
- filter: brightness(0.97);
206
+ /* Hover adds the state layer over the variant's own fill, so a primary, a
207
+ pressed toggle and a transparent toolbar button all step by the same amount. */
208
+ .pui-button:hover:not(:disabled, [data-disabled], [data-variant='link']) {
209
+ background-image: linear-gradient(
210
+ var(--interaction-hover-bg),
211
+ var(--interaction-hover-bg)
212
+ );
213
+ }
214
+ .pui-button[data-variant='link']:hover:not(:disabled, [data-disabled]) {
215
+ text-decoration-thickness: 2px;
205
216
  }
206
217
  .pui-button:focus-visible {
207
218
  outline: 2px solid var(--interaction-focus);
208
219
  outline-offset: 2px;
209
220
  }
210
- .pui-button:is(:disabled, [data-disabled], [aria-disabled="true"]) {
221
+ .pui-button:is(:disabled, [data-disabled], [aria-disabled='true']) {
211
222
  opacity: var(--control-disabled-opacity);
212
223
  cursor: not-allowed;
213
224
  }
@@ -224,6 +235,24 @@
224
235
  .pui-scroll-viewport::-webkit-scrollbar {
225
236
  display: none;
226
237
  }
238
+ /* A horizontal scroller fades the edge that hides more content, so a cut-off table
239
+ * or code line reads as scrollable before its scrollbar appears, on touch too. */
240
+ .pui-scroll-root[data-overflow-x-end] > .pui-scroll-viewport {
241
+ mask-image: linear-gradient(to left, transparent, #000 var(--space-6));
242
+ }
243
+ .pui-scroll-root[data-overflow-x-start] > .pui-scroll-viewport {
244
+ mask-image: linear-gradient(to right, transparent, #000 var(--space-6));
245
+ }
246
+ .pui-scroll-root[data-overflow-x-start][data-overflow-x-end]
247
+ > .pui-scroll-viewport {
248
+ mask-image: linear-gradient(
249
+ to right,
250
+ transparent,
251
+ #000 var(--space-6),
252
+ #000 calc(100% - var(--space-6)),
253
+ transparent
254
+ );
255
+ }
227
256
  .pui-scrollbar {
228
257
  display: flex;
229
258
  user-select: none;
@@ -237,24 +266,24 @@
237
266
  .pui-scrollbar[data-scrolling],
238
267
  .pui-scrollbar:hover,
239
268
  .pui-scroll-root[data-scroll-near-x]
240
- > .pui-scrollbar[data-orientation="horizontal"],
269
+ > .pui-scrollbar[data-orientation='horizontal'],
241
270
  .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"],
271
+ > .pui-scrollbar[data-orientation='vertical'],
272
+ .pui-scroll-root[data-scroll-dragging='horizontal']
273
+ > .pui-scrollbar[data-orientation='horizontal'],
274
+ .pui-scroll-root[data-scroll-dragging='vertical']
275
+ > .pui-scrollbar[data-orientation='vertical'],
247
276
  .pui-scroll-root:has(> .pui-scroll-viewport:focus-visible) > .pui-scrollbar {
248
277
  opacity: 1;
249
278
  }
250
- .pui-scrollbar[data-orientation="horizontal"] {
279
+ .pui-scrollbar[data-orientation='horizontal'] {
251
280
  height: 10px;
252
281
  position: absolute;
253
282
  bottom: 0;
254
283
  left: 0;
255
284
  right: 0;
256
285
  }
257
- .pui-scrollbar[data-orientation="vertical"] {
286
+ .pui-scrollbar[data-orientation='vertical'] {
258
287
  flex-direction: column;
259
288
  width: 10px;
260
289
  position: absolute;
@@ -333,24 +362,24 @@
333
362
  }
334
363
  }
335
364
 
336
- .pui-button[data-size="xs"] {
365
+ .pui-button[data-size='xs'] {
337
366
  height: 24px;
338
367
  min-height: 24px;
339
368
  padding-inline: 8px;
340
369
  font-size: 12px;
341
370
  gap: 4px;
342
371
  }
343
- .pui-button[data-size="sm"] {
372
+ .pui-button[data-size='sm'] {
344
373
  height: 32px;
345
374
  min-height: 32px;
346
375
  padding-inline: 10px;
347
376
  }
348
- .pui-button[data-size="lg"] {
377
+ .pui-button[data-size='lg'] {
349
378
  height: var(--size-control-height-large);
350
379
  min-height: var(--size-control-height-large);
351
380
  padding-inline: var(--size-button-padding-large);
352
381
  }
353
- .pui-button[data-size^="icon"] {
382
+ .pui-button[data-size^='icon'] {
354
383
  width: var(--control-height);
355
384
  padding: 0;
356
385
  }
@@ -360,24 +389,21 @@
360
389
  }
361
390
  }
362
391
 
363
- .pui-button[data-variant="secondary"] {
392
+ .pui-button[data-variant='secondary'] {
364
393
  background: var(--selected);
365
394
  color: var(--ink);
366
395
  }
367
- .pui-button[data-variant="destructive"] {
396
+ .pui-button[data-variant='destructive'] {
368
397
  background: var(--status-danger-bg);
369
398
  color: var(--status-danger-fg);
370
399
  border-color: transparent;
371
400
  }
372
- .pui-button[data-variant="link"] {
401
+ .pui-button[data-variant='link'] {
373
402
  background: transparent;
374
403
  color: var(--brand-ink);
375
404
  border-color: transparent;
376
405
  text-decoration: underline;
377
406
  }
378
- .pui-button[data-variant="ghost"]:hover:not(:disabled) {
379
- background: var(--interaction-hover-bg);
380
- }
381
407
 
382
408
  /* Edge panels share surfaces and layers; only Drawer adds native Base UI gestures. */
383
409
  .pui-panel-layer {
@@ -409,17 +435,17 @@
409
435
  padding: 12px;
410
436
  pointer-events: none;
411
437
  }
412
- .pui-panel-viewport[data-side="right"] {
438
+ .pui-panel-viewport[data-side='right'] {
413
439
  justify-content: flex-end;
414
440
  }
415
- .pui-panel-viewport[data-side="left"] {
441
+ .pui-panel-viewport[data-side='left'] {
416
442
  justify-content: flex-start;
417
443
  }
418
- .pui-panel-viewport[data-side="top"] {
444
+ .pui-panel-viewport[data-side='top'] {
419
445
  align-items: flex-start;
420
446
  justify-content: center;
421
447
  }
422
- .pui-panel-viewport[data-side="bottom"] {
448
+ .pui-panel-viewport[data-side='bottom'] {
423
449
  align-items: flex-end;
424
450
  justify-content: center;
425
451
  }
@@ -449,25 +475,25 @@
449
475
  );
450
476
  transition: transform var(--duration-base) var(--ease-out);
451
477
  }
452
- .pui-panel[data-size="sm"] {
478
+ .pui-panel[data-size='sm'] {
453
479
  --panel-width: 320px;
454
480
  }
455
- .pui-panel[data-size="lg"] {
481
+ .pui-panel[data-size='lg'] {
456
482
  --panel-width: 640px;
457
483
  }
458
- .pui-panel[data-side="right"] {
484
+ .pui-panel[data-side='right'] {
459
485
  --panel-enter-x: calc(100% + 12px);
460
486
  height: 100%;
461
487
  }
462
- .pui-panel[data-side="left"] {
488
+ .pui-panel[data-side='left'] {
463
489
  --panel-enter-x: calc(-100% - 12px);
464
490
  height: 100%;
465
491
  }
466
- .pui-panel[data-side="top"] {
492
+ .pui-panel[data-side='top'] {
467
493
  --panel-enter-y: calc(-100% - 12px);
468
494
  max-height: min(85dvh, 100%);
469
495
  }
470
- .pui-panel[data-side="bottom"] {
496
+ .pui-panel[data-side='bottom'] {
471
497
  --panel-enter-y: calc(100% + 12px);
472
498
  max-height: min(85dvh, 100%);
473
499
  }
@@ -542,8 +568,8 @@
542
568
  border-radius: var(--radius-full);
543
569
  background: var(--line);
544
570
  }
545
- .pui-drawer[data-side="left"] > .pui-drawer-handle,
546
- .pui-drawer[data-side="right"] > .pui-drawer-handle {
571
+ .pui-drawer[data-side='left'] > .pui-drawer-handle,
572
+ .pui-drawer[data-side='right'] > .pui-drawer-handle {
547
573
  display: none;
548
574
  }
549
575
  @media (prefers-reduced-motion: reduce) {
@@ -561,7 +587,7 @@
561
587
  .pui-panel-footer {
562
588
  box-sizing: border-box;
563
589
  }
564
- .pui-panel-viewport[data-side="bottom"] {
590
+ .pui-panel-viewport[data-side='bottom'] {
565
591
  bottom: var(--drawer-keyboard-inset, 0px);
566
592
  }
567
593
 
@@ -953,6 +979,9 @@
953
979
  color: var(--ink);
954
980
  background: var(--interaction-hover-bg);
955
981
  }
982
+ .pui-tabs-tab:active:not(:disabled):not([data-disabled]) {
983
+ background: var(--interaction-active-bg);
984
+ }
956
985
  .pui-tabs-tab[data-active] {
957
986
  background: var(--canvas);
958
987
  color: var(--ink);
@@ -993,19 +1022,19 @@
993
1022
  background: transparent;
994
1023
  border-color: transparent;
995
1024
  }
996
- .pui-tabs[data-orientation="vertical"] {
1025
+ .pui-tabs[data-orientation='vertical'] {
997
1026
  display: grid;
998
1027
  grid-template-columns: minmax(0, 180px) minmax(0, 1fr);
999
1028
  gap: var(--space-6);
1000
1029
  align-items: start;
1001
1030
  }
1002
- .pui-tabs-list[data-orientation="vertical"] {
1031
+ .pui-tabs-list[data-orientation='vertical'] {
1003
1032
  flex-direction: column;
1004
1033
  }
1005
- .pui-tabs-list[data-orientation="vertical"] .pui-tabs-tab {
1034
+ .pui-tabs-list[data-orientation='vertical'] .pui-tabs-tab {
1006
1035
  text-align: start;
1007
1036
  }
1008
- .pui-tabs[data-orientation="vertical"] > .pui-tabs-panel {
1037
+ .pui-tabs[data-orientation='vertical'] > .pui-tabs-panel {
1009
1038
  padding-block: var(--space-1);
1010
1039
  }
1011
1040
  .pui-accordion {
@@ -1050,6 +1079,9 @@
1050
1079
  .pui-disclosure-trigger:hover:not(:disabled) {
1051
1080
  background: var(--interaction-hover-bg);
1052
1081
  }
1082
+ .pui-disclosure-trigger:active:not(:disabled) {
1083
+ background: var(--interaction-active-bg);
1084
+ }
1053
1085
  .pui-disclosure-trigger:focus-visible {
1054
1086
  outline: 2px solid var(--interaction-focus);
1055
1087
  outline-offset: -2px;
@@ -1113,7 +1145,7 @@
1113
1145
  margin-bottom: 0;
1114
1146
  }
1115
1147
  @media (max-width: 760px) {
1116
- .pui-tabs[data-orientation="vertical"] {
1148
+ .pui-tabs[data-orientation='vertical'] {
1117
1149
  grid-template-columns: minmax(0, 1fr);
1118
1150
  gap: var(--space-3);
1119
1151
  }
@@ -1184,11 +1216,11 @@
1184
1216
  height: 20px;
1185
1217
  vertical-align: middle;
1186
1218
  }
1187
- .pui-spinner[data-size="sm"] {
1219
+ .pui-spinner[data-size='sm'] {
1188
1220
  width: 16px;
1189
1221
  height: 16px;
1190
1222
  }
1191
- .pui-spinner[data-size="lg"] {
1223
+ .pui-spinner[data-size='lg'] {
1192
1224
  width: 28px;
1193
1225
  height: 28px;
1194
1226
  }
@@ -1207,11 +1239,11 @@
1207
1239
  background: var(--surface);
1208
1240
  animation: pui-progress-pulse 1.4s ease-in-out infinite;
1209
1241
  }
1210
- .pui-skeleton[data-shape="block"] {
1242
+ .pui-skeleton[data-shape='block'] {
1211
1243
  height: 96px;
1212
1244
  border-radius: var(--radius-md);
1213
1245
  }
1214
- .pui-skeleton[data-shape="circle"] {
1246
+ .pui-skeleton[data-shape='circle'] {
1215
1247
  width: 36px;
1216
1248
  height: 36px;
1217
1249
  border-radius: 50%;
@@ -1555,18 +1587,18 @@
1555
1587
  .pui-slider-thumb[data-disabled] {
1556
1588
  cursor: not-allowed;
1557
1589
  }
1558
- .pui-slider[data-orientation="vertical"] {
1590
+ .pui-slider[data-orientation='vertical'] {
1559
1591
  width: max-content;
1560
1592
  min-width: 120px;
1561
1593
  }
1562
- .pui-slider-control[data-orientation="vertical"] {
1594
+ .pui-slider-control[data-orientation='vertical'] {
1563
1595
  width: 44px;
1564
1596
  height: 192px;
1565
1597
  justify-content: center;
1566
1598
  justify-self: center;
1567
1599
  touch-action: pan-x;
1568
1600
  }
1569
- .pui-slider-track[data-orientation="vertical"] {
1601
+ .pui-slider-track[data-orientation='vertical'] {
1570
1602
  width: 6px;
1571
1603
  height: 100%;
1572
1604
  }
@@ -1595,7 +1627,7 @@
1595
1627
  border-color: var(--line);
1596
1628
  }
1597
1629
  .pui-toggle[data-pressed],
1598
- .pui-toolbar-button[aria-pressed="true"] {
1630
+ .pui-toolbar-button[aria-pressed='true'] {
1599
1631
  background: var(--selected);
1600
1632
  border-color: var(--control-border);
1601
1633
  color: var(--ink);
@@ -1615,9 +1647,9 @@
1615
1647
  gap: var(--space-1);
1616
1648
  min-width: 0;
1617
1649
  }
1618
- .pui-toggle-group[data-orientation="vertical"],
1619
- .pui-toolbar[data-orientation="vertical"],
1620
- .pui-menubar[data-orientation="vertical"] {
1650
+ .pui-toggle-group[data-orientation='vertical'],
1651
+ .pui-toolbar[data-orientation='vertical'],
1652
+ .pui-menubar[data-orientation='vertical'] {
1621
1653
  flex-direction: column;
1622
1654
  align-items: flex-start;
1623
1655
  width: fit-content;
@@ -1643,10 +1675,6 @@
1643
1675
  border-radius: max(0px, calc(var(--radius-md) - var(--space-1)));
1644
1676
  text-decoration: none;
1645
1677
  }
1646
- .pui-toolbar-button:hover:not([data-disabled]),
1647
- .pui-toolbar-link:hover {
1648
- background: var(--interaction-hover-bg);
1649
- }
1650
1678
  .pui-toolbar-input {
1651
1679
  width: 160px;
1652
1680
  max-width: 100%;
@@ -1658,17 +1686,17 @@
1658
1686
  flex: none;
1659
1687
  background: transparent;
1660
1688
  }
1661
- .pui-toolbar-separator[data-orientation="vertical"] {
1689
+ .pui-toolbar-separator[data-orientation='vertical'] {
1662
1690
  width: 1px;
1663
1691
  height: 24px;
1664
1692
  margin-inline: var(--space-1);
1665
1693
  }
1666
- .pui-toolbar-separator[data-orientation="horizontal"] {
1694
+ .pui-toolbar-separator[data-orientation='horizontal'] {
1667
1695
  height: 1px;
1668
1696
  width: 100%;
1669
1697
  margin-block: var(--space-1);
1670
1698
  }
1671
- .pui-toolbar[data-orientation="vertical"] .pui-toolbar-group {
1699
+ .pui-toolbar[data-orientation='vertical'] .pui-toolbar-group {
1672
1700
  flex-direction: column;
1673
1701
  align-items: stretch;
1674
1702
  width: 100%;
@@ -1707,7 +1735,7 @@
1707
1735
  display: inline-flex;
1708
1736
  width: 16px;
1709
1737
  }
1710
- .pui-menu-check-item[aria-checked="false"] > .pui-menu-indicator {
1738
+ .pui-menu-check-item[aria-checked='false'] > .pui-menu-indicator {
1711
1739
  visibility: hidden;
1712
1740
  }
1713
1741
  .pui-menu-group-label {
@@ -1747,9 +1775,6 @@
1747
1775
  scrollbar-width: thin;
1748
1776
  scrollbar-color: var(--scrollbar-thumb) transparent;
1749
1777
  }
1750
- .pui-toolbar-button[data-disabled]:hover {
1751
- filter: none;
1752
- }
1753
1778
  .pui-menu-trigger[data-disabled] {
1754
1779
  opacity: var(--control-disabled-opacity);
1755
1780
  cursor: not-allowed;
@@ -1772,8 +1797,8 @@
1772
1797
  }
1773
1798
  @media (forced-colors: active) {
1774
1799
  .pui-toggle[data-pressed]::after,
1775
- .pui-toolbar-button[aria-pressed="true"]::after {
1776
- content: "";
1800
+ .pui-toolbar-button[aria-pressed='true']::after {
1801
+ content: '';
1777
1802
  position: absolute;
1778
1803
  inset: 3px;
1779
1804
  border: 1px solid CanvasText;
@@ -1850,7 +1875,7 @@
1850
1875
  padding: 0;
1851
1876
  list-style: none;
1852
1877
  }
1853
- .pui-navigation-menu[data-orientation="vertical"] > .pui-navigation-list {
1878
+ .pui-navigation-menu[data-orientation='vertical'] > .pui-navigation-list {
1854
1879
  flex-direction: column;
1855
1880
  align-items: stretch;
1856
1881
  }
@@ -1891,7 +1916,7 @@
1891
1916
  .pui-navigation-link[data-highlighted] {
1892
1917
  background: var(--menu-hover-background);
1893
1918
  }
1894
- .pui-navigation-link[aria-current="page"] {
1919
+ .pui-navigation-link[aria-current='page'] {
1895
1920
  background: var(--selected);
1896
1921
  color: var(--ink);
1897
1922
  font-weight: 500;
@@ -1964,7 +1989,7 @@
1964
1989
  color: CanvasText;
1965
1990
  border-color: CanvasText;
1966
1991
  }
1967
- .pui-navigation-link[aria-current="page"] {
1992
+ .pui-navigation-link[aria-current='page'] {
1968
1993
  border-color: Highlight;
1969
1994
  }
1970
1995
  }
@@ -2025,7 +2050,7 @@
2025
2050
  outline: 2px solid Highlight;
2026
2051
  outline-offset: 2px;
2027
2052
  }
2028
- .pui-otp-input[aria-invalid="true"] {
2053
+ .pui-otp-input[aria-invalid='true'] {
2029
2054
  border-color: LinkText;
2030
2055
  }
2031
2056
  .pui-otp-separator {
@@ -2073,16 +2098,16 @@
2073
2098
  opacity var(--dialog-enter-duration) var(--motion-ease),
2074
2099
  translate var(--dialog-enter-duration) var(--motion-spatial-ease);
2075
2100
  }
2076
- .pui-toast[data-tone="success"] {
2101
+ .pui-toast[data-tone='success'] {
2077
2102
  --_toast-icon: var(--status-success-fg);
2078
2103
  }
2079
- .pui-toast[data-tone="danger"] {
2104
+ .pui-toast[data-tone='danger'] {
2080
2105
  --_toast-icon: var(--status-danger-fg);
2081
2106
  }
2082
- .pui-toast[data-tone="caution"] {
2107
+ .pui-toast[data-tone='caution'] {
2083
2108
  --_toast-icon: var(--status-caution-fg);
2084
2109
  }
2085
- .pui-toast[data-tone="progress"] {
2110
+ .pui-toast[data-tone='progress'] {
2086
2111
  --_toast-icon: var(--status-progress-fg);
2087
2112
  }
2088
2113
  .pui-toast[data-starting-style] {
@@ -2154,12 +2179,12 @@
2154
2179
  }
2155
2180
  }
2156
2181
 
2157
- .pui-toast-viewport[data-layout="stack"]:focus-visible {
2182
+ .pui-toast-viewport[data-layout='stack']:focus-visible {
2158
2183
  border-radius: var(--radius-lg);
2159
2184
  outline: 2px solid var(--interaction-focus);
2160
2185
  outline-offset: -2px;
2161
2186
  }
2162
- .pui-toast-viewport[data-layout="anchored"] {
2187
+ .pui-toast-viewport[data-layout='anchored'] {
2163
2188
  inset: 0;
2164
2189
  display: block;
2165
2190
  width: auto;
@@ -2168,7 +2193,7 @@
2168
2193
  padding: 0;
2169
2194
  overflow: visible;
2170
2195
  }
2171
- .pui-toast-viewport[data-layout="anchored"] .pui-toast {
2196
+ .pui-toast-viewport[data-layout='anchored'] .pui-toast {
2172
2197
  width: 320px;
2173
2198
  max-width: min(calc(100vw - 24px), var(--available-width));
2174
2199
  max-height: var(--available-height);
@@ -2176,7 +2201,7 @@
2176
2201
  scrollbar-width: thin;
2177
2202
  }
2178
2203
 
2179
- .pui-toast-viewport[data-layout="anchored"]:focus-visible .pui-toast {
2204
+ .pui-toast-viewport[data-layout='anchored']:focus-visible .pui-toast {
2180
2205
  outline: 2px solid var(--interaction-focus);
2181
2206
  outline-offset: 2px;
2182
2207
  }
@@ -2224,7 +2249,7 @@
2224
2249
  outline: 2px solid var(--interaction-focus);
2225
2250
  outline-offset: 2px;
2226
2251
  }
2227
- .pui-file-upload:has(.pui-file-native[aria-invalid="true"]) .pui-file-dropzone {
2252
+ .pui-file-upload:has(.pui-file-native[aria-invalid='true']) .pui-file-dropzone {
2228
2253
  border-color: var(--status-danger-fg);
2229
2254
  }
2230
2255
  .pui-file-drop-hint {
@@ -2320,15 +2345,15 @@
2320
2345
  stroke-width: var(--icon-stroke-width);
2321
2346
  pointer-events: none;
2322
2347
  }
2323
- .pui-icon[data-size="md"] {
2348
+ .pui-icon[data-size='md'] {
2324
2349
  width: var(--icon-size-md);
2325
2350
  height: var(--icon-size-md);
2326
2351
  }
2327
- .pui-icon[data-size="lg"] {
2352
+ .pui-icon[data-size='lg'] {
2328
2353
  width: var(--icon-size-lg);
2329
2354
  height: var(--icon-size-lg);
2330
2355
  }
2331
- .pui-icon[data-directional="true"]:dir(rtl) {
2356
+ .pui-icon[data-directional='true']:dir(rtl) {
2332
2357
  transform: scaleX(-1);
2333
2358
  }
2334
2359
 
@@ -2389,7 +2414,7 @@
2389
2414
  }
2390
2415
 
2391
2416
  /* Base UI owns hover/focus expansion, announcements, timers and gestures. */
2392
- .pui-toast-viewport[data-layout="stack"] {
2417
+ .pui-toast-viewport[data-layout='stack'] {
2393
2418
  display: grid;
2394
2419
  /* An auto row adopts the tallest card while its height transitions, moving
2395
2420
  the bottom anchor during collapse when a behind-card has an action. */
@@ -2398,7 +2423,7 @@
2398
2423
  height: calc(var(--toast-frontmost-height, 80px) + 48px);
2399
2424
  overflow: visible;
2400
2425
  }
2401
- .pui-toast-viewport[data-layout="stack"] > .pui-toast {
2426
+ .pui-toast-viewport[data-layout='stack'] > .pui-toast {
2402
2427
  grid-area: 1 / 1;
2403
2428
  z-index: calc(100 - var(--toast-index));
2404
2429
  height: var(--toast-frontmost-height, var(--toast-height, auto));
@@ -2413,29 +2438,29 @@
2413
2438
  opacity var(--toast-enter-duration) var(--motion-ease),
2414
2439
  translate var(--toast-enter-duration) var(--toast-stack-ease);
2415
2440
  }
2416
- .pui-toast-viewport[data-layout="stack"]:not([data-expanded])
2441
+ .pui-toast-viewport[data-layout='stack']:not([data-expanded])
2417
2442
  .pui-toast-content[data-behind] {
2418
2443
  opacity: 0;
2419
2444
  pointer-events: none;
2420
2445
  }
2421
- .pui-toast-viewport[data-layout="stack"][data-expanded] {
2446
+ .pui-toast-viewport[data-layout='stack'][data-expanded] {
2422
2447
  pointer-events: auto;
2423
2448
  height: min(calc(var(--toast-stack-height, 240px) + 48px), 100dvh);
2424
2449
  grid-template-rows: var(--toast-stack-height, auto);
2425
2450
  padding-top: 24px;
2426
2451
  overflow: visible;
2427
2452
  }
2428
- .pui-toast-viewport[data-layout="stack"][data-expanded][data-stack-overflow] {
2453
+ .pui-toast-viewport[data-layout='stack'][data-expanded][data-stack-overflow] {
2429
2454
  overflow-y: auto;
2430
2455
  overflow-x: hidden;
2431
2456
  }
2432
- .pui-toast-viewport[data-layout="stack"][data-expanded] > .pui-toast {
2457
+ .pui-toast-viewport[data-layout='stack'][data-expanded] > .pui-toast {
2433
2458
  height: var(--toast-height, auto);
2434
2459
  transform: translateY(
2435
2460
  calc(-1 * (var(--toast-offset-y) + var(--toast-index) * var(--space-2)))
2436
2461
  );
2437
2462
  }
2438
- .pui-toast-viewport[data-layout="stack"] > .pui-toast[data-ending-style] {
2463
+ .pui-toast-viewport[data-layout='stack'] > .pui-toast[data-ending-style] {
2439
2464
  transition-duration: 0s;
2440
2465
  }
2441
2466
  @media (max-width: 760px) {
@@ -2452,8 +2477,8 @@
2452
2477
  }
2453
2478
  @media (prefers-reduced-motion: reduce) {
2454
2479
  .pui-toast-content,
2455
- .pui-toast-viewport[data-layout="stack"],
2456
- .pui-toast-viewport[data-layout="stack"] > .pui-toast {
2480
+ .pui-toast-viewport[data-layout='stack'],
2481
+ .pui-toast-viewport[data-layout='stack'] > .pui-toast {
2457
2482
  transition: none;
2458
2483
  }
2459
2484
  }
@@ -2468,10 +2493,13 @@
2468
2493
  }
2469
2494
 
2470
2495
  /* Active feedback is transient; persistent selection belongs to Toggle. */
2471
- .pui-button:active:not(:disabled):not([data-disabled]) {
2472
- filter: brightness(0.94);
2496
+ .pui-button:active:not(:disabled, [data-disabled], [data-variant='link']) {
2497
+ background-image: linear-gradient(
2498
+ var(--interaction-active-bg),
2499
+ var(--interaction-active-bg)
2500
+ );
2473
2501
  }
2474
- .pui-button[aria-busy="true"] {
2502
+ .pui-button[aria-busy='true'] {
2475
2503
  cursor: progress;
2476
2504
  }
2477
2505
  @media (forced-colors: active) {
@@ -2479,7 +2507,7 @@
2479
2507
  border-color: ButtonText;
2480
2508
  }
2481
2509
  .pui-button:active {
2482
- filter: none;
2510
+ background-image: none;
2483
2511
  }
2484
2512
  }
2485
2513
 
@@ -2510,7 +2538,7 @@
2510
2538
  min-inline-size: 0;
2511
2539
  max-inline-size: 100%;
2512
2540
  }
2513
- .pui-filter-bar-field[data-width="search"] {
2541
+ .pui-filter-bar-field[data-width='search'] {
2514
2542
  flex: 2 1 20rem;
2515
2543
  }
2516
2544
  .pui-filter-bar-field > :is(.pui-control, .pui-select-trigger) {
@@ -2551,7 +2579,7 @@
2551
2579
  background: var(--chrome);
2552
2580
  border-radius: var(--app-shell-radius);
2553
2581
  }
2554
- .pui-app-shell[data-sidebar="collapsed"] {
2582
+ .pui-app-shell[data-sidebar='collapsed'] {
2555
2583
  --app-shell-sidebar-width: 64px;
2556
2584
  }
2557
2585
  .pui-app-shell-header {
@@ -2598,7 +2626,10 @@
2598
2626
  .pui-app-shell-link:hover {
2599
2627
  background: var(--interaction-hover-bg);
2600
2628
  }
2601
- .pui-app-shell-link[aria-current="page"] {
2629
+ .pui-app-shell-link:active:not([aria-current='page']) {
2630
+ background: var(--interaction-active-bg);
2631
+ }
2632
+ .pui-app-shell-link[aria-current='page'] {
2602
2633
  background: var(--selected);
2603
2634
  color: var(--ink);
2604
2635
  font-weight: 500;
@@ -2619,7 +2650,7 @@
2619
2650
  white-space: nowrap;
2620
2651
  padding-inline-end: var(--space-2);
2621
2652
  }
2622
- .pui-app-shell[data-sidebar="collapsed"] .pui-app-shell-label {
2653
+ .pui-app-shell[data-sidebar='collapsed'] .pui-app-shell-label {
2623
2654
  position: absolute;
2624
2655
  inline-size: 1px;
2625
2656
  block-size: 1px;
@@ -2648,23 +2679,23 @@
2648
2679
  }
2649
2680
  }
2650
2681
  @media (forced-colors: active) {
2651
- .pui-app-shell-link[aria-current="page"] {
2682
+ .pui-app-shell-link[aria-current='page'] {
2652
2683
  outline: 1px solid Highlight;
2653
2684
  }
2654
2685
  }
2655
2686
 
2656
2687
  /* Workspace variant: product sidebar owns the brand; the content scrollport is caller-provided. */
2657
- .pui-app-shell[data-layout="workspace"] {
2688
+ .pui-app-shell[data-layout='workspace'] {
2658
2689
  --app-shell-sidebar-width: 224px;
2659
2690
  grid-template-rows: minmax(0, 1fr);
2660
2691
  gap: 0;
2661
2692
  padding: 0;
2662
2693
  transition: grid-template-columns var(--duration-base) var(--ease-out);
2663
2694
  }
2664
- .pui-app-shell[data-layout="workspace"][data-sidebar="collapsed"] {
2695
+ .pui-app-shell[data-layout='workspace'][data-sidebar='collapsed'] {
2665
2696
  --app-shell-sidebar-width: 72px;
2666
2697
  }
2667
- .pui-app-shell[data-layout="workspace"] > .pui-app-shell-sidebar {
2698
+ .pui-app-shell[data-layout='workspace'] > .pui-app-shell-sidebar {
2668
2699
  position: relative;
2669
2700
  grid-row: 1;
2670
2701
  grid-column: 1;
@@ -2672,7 +2703,7 @@
2672
2703
  padding: 0;
2673
2704
  z-index: 1;
2674
2705
  }
2675
- .pui-app-shell[data-layout="workspace"] > .pui-app-shell-content {
2706
+ .pui-app-shell[data-layout='workspace'] > .pui-app-shell-content {
2676
2707
  grid-row: 1;
2677
2708
  grid-column: 2;
2678
2709
  margin: 0;
@@ -2680,42 +2711,42 @@
2680
2711
  background: transparent;
2681
2712
  border-radius: 0;
2682
2713
  }
2683
- .pui-app-shell[data-layout="workspace"] .pui-app-shell-footer {
2714
+ .pui-app-shell[data-layout='workspace'] .pui-app-shell-footer {
2684
2715
  padding: var(--space-4);
2685
2716
  }
2686
- .pui-app-shell[data-layout="workspace"] .pui-app-shell-label {
2717
+ .pui-app-shell[data-layout='workspace'] .pui-app-shell-label {
2687
2718
  transition:
2688
2719
  opacity 80ms var(--ease-out) 160ms,
2689
2720
  visibility 0s 160ms;
2690
2721
  }
2691
- .pui-app-shell[data-layout="workspace"][data-sidebar="collapsed"]
2722
+ .pui-app-shell[data-layout='workspace'][data-sidebar='collapsed']
2692
2723
  .pui-app-shell-label {
2693
2724
  opacity: 0;
2694
2725
  visibility: hidden;
2695
2726
  transition: none;
2696
2727
  }
2697
2728
  @media (min-width: 761px) {
2698
- .pui-app-shell[data-layout="workspace"] > .pui-app-shell-header {
2729
+ .pui-app-shell[data-layout='workspace'] > .pui-app-shell-header {
2699
2730
  display: none;
2700
2731
  }
2701
2732
  }
2702
2733
  @media (max-width: 760px) {
2703
- .pui-app-shell[data-layout="workspace"] {
2734
+ .pui-app-shell[data-layout='workspace'] {
2704
2735
  grid-template-columns: minmax(0, 1fr);
2705
2736
  grid-template-rows: auto minmax(0, 1fr);
2706
2737
  }
2707
- .pui-app-shell[data-layout="workspace"] > .pui-app-shell-header {
2738
+ .pui-app-shell[data-layout='workspace'] > .pui-app-shell-header {
2708
2739
  padding: var(--space-3);
2709
2740
  }
2710
- .pui-app-shell[data-layout="workspace"] > .pui-app-shell-content {
2741
+ .pui-app-shell[data-layout='workspace'] > .pui-app-shell-content {
2711
2742
  grid-column: 1;
2712
2743
  grid-row: 2;
2713
2744
  margin: 0;
2714
2745
  }
2715
2746
  }
2716
2747
  @media (prefers-reduced-motion: reduce) {
2717
- .pui-app-shell[data-layout="workspace"],
2718
- .pui-app-shell[data-layout="workspace"] .pui-app-shell-label {
2748
+ .pui-app-shell[data-layout='workspace'],
2749
+ .pui-app-shell[data-layout='workspace'] .pui-app-shell-label {
2719
2750
  transition: none;
2720
2751
  }
2721
2752
  }
@@ -2744,13 +2775,13 @@
2744
2775
  .pui-tree-item:hover {
2745
2776
  background: var(--interaction-hover-bg);
2746
2777
  }
2747
- .pui-tree-item[aria-selected="true"] {
2778
+ .pui-tree-item[aria-selected='true'] {
2748
2779
  background: var(--selected);
2749
2780
  }
2750
2781
  .pui-tree-item:focus-visible {
2751
2782
  outline: 2px solid var(--control-focus);
2752
2783
  }
2753
- .pui-tree-item[aria-disabled="true"] {
2784
+ .pui-tree-item[aria-disabled='true'] {
2754
2785
  color: var(--ink-muted);
2755
2786
  }
2756
2787
  .pui-tree-toggle,
@@ -2771,6 +2802,9 @@
2771
2802
  .pui-tree-toggle:hover:not(:disabled) {
2772
2803
  background: var(--interaction-hover-bg);
2773
2804
  }
2805
+ .pui-tree-toggle:active:not(:disabled) {
2806
+ background: var(--interaction-active-bg);
2807
+ }
2774
2808
  .pui-tree-toggle svg[data-expanded] {
2775
2809
  rotate: 90deg;
2776
2810
  }
@@ -2793,11 +2827,11 @@
2793
2827
  }
2794
2828
  }
2795
2829
  @media (forced-colors: active) {
2796
- .pui-tree-item[aria-selected="true"] {
2830
+ .pui-tree-item[aria-selected='true'] {
2797
2831
  background: Highlight;
2798
2832
  color: HighlightText;
2799
2833
  }
2800
- .pui-tree-item[aria-disabled="true"] {
2834
+ .pui-tree-item[aria-disabled='true'] {
2801
2835
  color: GrayText;
2802
2836
  }
2803
2837
  .pui-tree-item:focus-visible {
@@ -2868,7 +2902,7 @@
2868
2902
  padding: 1px;
2869
2903
  outline: none;
2870
2904
  }
2871
- .pui-date-segment[data-type="literal"] {
2905
+ .pui-date-segment[data-type='literal'] {
2872
2906
  padding: 0;
2873
2907
  white-space: pre;
2874
2908
  }
@@ -3121,7 +3155,10 @@
3121
3155
  .pui-chart-legend-button:hover {
3122
3156
  background: var(--interaction-hover-bg);
3123
3157
  }
3124
- .pui-chart-legend-button[aria-pressed="false"] span {
3158
+ .pui-chart-legend-button:active {
3159
+ background: var(--interaction-active-bg);
3160
+ }
3161
+ .pui-chart-legend-button[aria-pressed='false'] span {
3125
3162
  text-decoration: line-through;
3126
3163
  color: var(--ink-muted);
3127
3164
  }
@@ -3235,7 +3272,7 @@
3235
3272
  display: contents;
3236
3273
  }
3237
3274
 
3238
- [data-ui-size="small"] {
3275
+ [data-ui-size='small'] {
3239
3276
  --ui-slider-track: var(--size-slider-track-small);
3240
3277
  --ui-file-padding: var(--size-file-padding-small);
3241
3278
  --ui-content-gap: var(--size-content-gap-small);
@@ -3276,7 +3313,7 @@
3276
3313
  --control-switch-thumb: var(--ui-switch-thumb);
3277
3314
  }
3278
3315
 
3279
- [data-ui-size="default"] {
3316
+ [data-ui-size='default'] {
3280
3317
  --ui-slider-track: var(--size-slider-track-default);
3281
3318
  --ui-file-padding: var(--size-file-padding-default);
3282
3319
  --ui-content-gap: var(--size-content-gap-default);
@@ -3317,7 +3354,7 @@
3317
3354
  --control-switch-thumb: var(--ui-switch-thumb);
3318
3355
  }
3319
3356
 
3320
- [data-ui-size="large"] {
3357
+ [data-ui-size='large'] {
3321
3358
  --ui-slider-track: var(--size-slider-track-large);
3322
3359
  --ui-file-padding: var(--size-file-padding-large);
3323
3360
  --ui-content-gap: var(--size-content-gap-large);
@@ -3365,7 +3402,7 @@
3365
3402
  font-size: var(--ui-font);
3366
3403
  line-height: var(--ui-leading);
3367
3404
  }
3368
- :where([data-ui-size], [data-ui-size] *).pui-button[data-size^="icon"] {
3405
+ :where([data-ui-size], [data-ui-size] *).pui-button[data-size^='icon'] {
3369
3406
  inline-size: var(--control-height);
3370
3407
  block-size: var(--control-height);
3371
3408
  padding: 0;
@@ -3488,7 +3525,7 @@
3488
3525
  :where([data-ui-size], [data-ui-size] *).pui-code-text {
3489
3526
  padding: var(--ui-surface-padding);
3490
3527
  }
3491
- :where([data-ui-size], [data-ui-size] *).pui-skeleton[data-shape="text"] {
3528
+ :where([data-ui-size], [data-ui-size] *).pui-skeleton[data-shape='text'] {
3492
3529
  height: var(--ui-leading);
3493
3530
  }
3494
3531
  :where([data-ui-size], [data-ui-size] *).pui-radio-indicator {
@@ -3497,7 +3534,7 @@
3497
3534
  }
3498
3535
 
3499
3536
  /* Explicit legacy button dimensions stay supported. */
3500
- .pui-button[data-size="xs"] {
3537
+ .pui-button[data-size='xs'] {
3501
3538
  height: 24px;
3502
3539
  min-height: 24px;
3503
3540
  padding-inline: 8px;
@@ -3564,14 +3601,14 @@
3564
3601
  min-inline-size: 0;
3565
3602
  }
3566
3603
  :where([data-ui-size], [data-ui-size] *).pui-slider-track:not(
3567
- [data-orientation="vertical"]
3604
+ [data-orientation='vertical']
3568
3605
  ) {
3569
3606
  height: var(--ui-gauge);
3570
3607
  }
3571
3608
  :where(
3572
3609
  [data-ui-size],
3573
3610
  [data-ui-size] *
3574
- ).pui-slider-track[data-orientation="vertical"] {
3611
+ ).pui-slider-track[data-orientation='vertical'] {
3575
3612
  width: var(--ui-slider-track);
3576
3613
  }
3577
3614
  :where([data-ui-size], [data-ui-size] *):is(.pui-link, .pui-breadcrumbs) {
@@ -3600,31 +3637,31 @@
3600
3637
  font: inherit;
3601
3638
  letter-spacing: inherit;
3602
3639
  }
3603
- .pui-syntax [data-syntax="plain"] {
3640
+ .pui-syntax [data-syntax='plain'] {
3604
3641
  color: var(--syntax-plain);
3605
3642
  }
3606
- .pui-syntax [data-syntax="comment"] {
3643
+ .pui-syntax [data-syntax='comment'] {
3607
3644
  color: var(--syntax-comment);
3608
3645
  }
3609
- .pui-syntax [data-syntax="keyword"] {
3646
+ .pui-syntax [data-syntax='keyword'] {
3610
3647
  color: var(--syntax-keyword);
3611
3648
  }
3612
- .pui-syntax [data-syntax="string"] {
3649
+ .pui-syntax [data-syntax='string'] {
3613
3650
  color: var(--syntax-string);
3614
3651
  }
3615
- .pui-syntax [data-syntax="number"] {
3652
+ .pui-syntax [data-syntax='number'] {
3616
3653
  color: var(--syntax-number);
3617
3654
  }
3618
- .pui-syntax [data-syntax="function"] {
3655
+ .pui-syntax [data-syntax='function'] {
3619
3656
  color: var(--syntax-function);
3620
3657
  }
3621
- .pui-syntax [data-syntax="tag"] {
3658
+ .pui-syntax [data-syntax='tag'] {
3622
3659
  color: var(--syntax-tag);
3623
3660
  }
3624
- .pui-syntax [data-syntax="attribute"] {
3661
+ .pui-syntax [data-syntax='attribute'] {
3625
3662
  color: var(--syntax-attribute);
3626
3663
  }
3627
- .pui-syntax [data-syntax="punctuation"] {
3664
+ .pui-syntax [data-syntax='punctuation'] {
3628
3665
  color: var(--syntax-punctuation);
3629
3666
  }
3630
3667
 
@@ -3636,10 +3673,26 @@
3636
3673
  background: var(--code-bg);
3637
3674
  border-radius: var(--radius-md);
3638
3675
  font: 400 13px/20px var(--font-code);
3676
+ /* Code shows the characters as typed, like the other code text: no === or => ligatures. */
3677
+ font-variant-ligatures: none;
3639
3678
  letter-spacing: 0;
3640
3679
  tab-size: 2;
3641
3680
  white-space: pre;
3642
3681
  }
3682
+ /* The visible box keeps its background and corners while long lines scroll inside it. */
3683
+ .pui-syntax-scroll {
3684
+ border-radius: var(--radius-md);
3685
+ background: var(--code-bg);
3686
+ overflow: hidden;
3687
+ }
3688
+ .pui-syntax-scroll .pui-syntax-pre {
3689
+ min-inline-size: max-content;
3690
+ border-radius: 0;
3691
+ background: none;
3692
+ }
3693
+ .pui-syntax-scroll .pui-syntax-pre[data-wrap] {
3694
+ min-inline-size: 0;
3695
+ }
3643
3696
  .pui-syntax-pre[data-wrap] {
3644
3697
  white-space: pre-wrap;
3645
3698
  overflow-wrap: anywhere;
@@ -3706,3 +3759,41 @@
3706
3759
  color: CanvasText;
3707
3760
  }
3708
3761
  }
3762
+
3763
+ /* Touch feedback is each control's own hover and pressed layer, drawn in its own
3764
+ shape. The browser's tap highlight is a rectangle over the box, so it is off. */
3765
+ :where(
3766
+ .pui-button,
3767
+ .pui-tabs-tab,
3768
+ .pui-disclosure-trigger,
3769
+ .pui-accordion-trigger,
3770
+ .pui-collapsible-trigger,
3771
+ .pui-app-shell-link,
3772
+ .pui-tree-item,
3773
+ .pui-tree-toggle,
3774
+ .pui-chart-legend-button,
3775
+ .pui-checkbox,
3776
+ .pui-radio,
3777
+ .pui-switch,
3778
+ .pui-choice-label,
3779
+ .pui-select-trigger,
3780
+ .pui-select-item,
3781
+ .pui-combobox-item,
3782
+ .pui-combobox-action,
3783
+ .pui-combobox-chip-remove,
3784
+ .pui-menu-item,
3785
+ .pui-navigation-trigger,
3786
+ .pui-navigation-link,
3787
+ .pui-link,
3788
+ .pui-breadcrumb-item a,
3789
+ .pui-calendar-day,
3790
+ .pui-calendar-nav,
3791
+ .pui-date-trigger,
3792
+ .pui-file-trigger,
3793
+ .pui-number-step,
3794
+ .pui-slider-control,
3795
+ .pui-toast-action,
3796
+ .pui-toast-close
3797
+ ) {
3798
+ -webkit-tap-highlight-color: transparent;
3799
+ }