@ponchia/ui 0.8.1 → 0.10.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/CHANGELOG.md +149 -3
  2. package/MIGRATIONS.json +117 -27
  3. package/README.md +19 -11
  4. package/behaviors/index.d.ts +0 -2
  5. package/behaviors/index.d.ts.map +1 -1
  6. package/behaviors/index.js +0 -2
  7. package/behaviors/popover.js +4 -4
  8. package/classes/classes.json +48 -10
  9. package/classes/index.d.ts +16 -3
  10. package/classes/index.js +28 -3
  11. package/classes/vscode.css-custom-data.json +10 -10
  12. package/css/app.css +52 -30
  13. package/css/base.css +10 -14
  14. package/css/content.css +23 -21
  15. package/css/core.css +1 -0
  16. package/css/disclosure.css +17 -17
  17. package/css/feedback.css +15 -15
  18. package/css/forms.css +8 -7
  19. package/css/navigation.css +3 -3
  20. package/css/overlay.css +37 -39
  21. package/css/primitives.css +48 -28
  22. package/css/report.css +66 -42
  23. package/css/row.css +154 -0
  24. package/css/state.css +95 -6
  25. package/css/table.css +3 -3
  26. package/css/tokens.css +10 -10
  27. package/css/workbench.css +22 -10
  28. package/dist/bronto.css +1 -1
  29. package/dist/css/app.css +1 -1
  30. package/dist/css/base.css +1 -1
  31. package/dist/css/content.css +1 -1
  32. package/dist/css/disclosure.css +1 -1
  33. package/dist/css/feedback.css +1 -1
  34. package/dist/css/forms.css +1 -1
  35. package/dist/css/navigation.css +1 -1
  36. package/dist/css/overlay.css +1 -1
  37. package/dist/css/primitives.css +1 -1
  38. package/dist/css/report-kit.css +1 -1
  39. package/dist/css/report.css +1 -1
  40. package/dist/css/row.css +1 -0
  41. package/dist/css/state.css +1 -1
  42. package/dist/css/table.css +1 -1
  43. package/dist/css/tokens.css +1 -1
  44. package/dist/css/workbench.css +1 -1
  45. package/docs/adr/0004-prune-unused-adapters.md +5 -1
  46. package/docs/adr/0005-productive-tools-and-editorial-reports.md +58 -0
  47. package/docs/adr/0006-trusted-publishing.md +92 -0
  48. package/docs/architecture.md +16 -23
  49. package/docs/command.md +1 -2
  50. package/docs/compositions.md +110 -0
  51. package/docs/frontier-primitives.md +1 -2
  52. package/docs/migrations/0.8-to-0.9.md +66 -0
  53. package/docs/migrations/0.9-to-0.10.md +47 -0
  54. package/docs/package-contract.md +13 -13
  55. package/docs/reference.md +43 -18
  56. package/docs/reporting.md +15 -9
  57. package/docs/stability.md +20 -55
  58. package/docs/state.md +47 -0
  59. package/docs/theming.md +16 -0
  60. package/docs/usage.md +60 -30
  61. package/llms.txt +7 -18
  62. package/package.json +15 -54
  63. package/tokens/figma.variables.json +20 -20
  64. package/tokens/index.js +10 -10
  65. package/tokens/index.json +20 -20
  66. package/tokens/resolved.json +10 -10
  67. package/tokens/tokens.dtcg.json +20 -20
  68. package/behaviors/modal.d.ts +0 -45
  69. package/behaviors/modal.d.ts.map +0 -1
  70. package/behaviors/modal.js +0 -373
  71. package/qwik/index.d.ts +0 -48
  72. package/qwik/index.d.ts.map +0 -1
  73. package/qwik/index.js +0 -227
  74. package/react/index.d.ts +0 -45
  75. package/react/index.d.ts.map +0 -1
  76. package/react/index.js +0 -165
  77. package/solid/index.d.ts +0 -75
  78. package/solid/index.d.ts.map +0 -1
  79. package/solid/index.js +0 -172
  80. package/svelte/index.d.ts +0 -114
  81. package/svelte/index.d.ts.map +0 -1
  82. package/svelte/index.js +0 -197
  83. package/vue/index.d.ts +0 -116
  84. package/vue/index.d.ts.map +0 -1
  85. package/vue/index.js +0 -266
package/css/content.css CHANGED
@@ -9,6 +9,8 @@
9
9
  ========================================================================== */
10
10
 
11
11
  .ui-prose {
12
+ /* A prose block must shrink as a grid/flex item; its pre blocks scroll locally. */
13
+ min-inline-size: 0;
12
14
  color: var(--text-soft);
13
15
  font-size: var(--text-base);
14
16
  line-height: 1.7;
@@ -41,27 +43,27 @@
41
43
  max-inline-size: none;
42
44
  }
43
45
 
44
- /* --- Headings — brand display face; only the top two shout --- */
46
+ /* --- Headings — readable hierarchy inside narrative content --- */
45
47
 
46
48
  .ui-prose :is(h1, h2, h3, h4, h5, h6) {
47
49
  color: var(--text);
48
- font-family: var(--display);
50
+ font-family: var(--sans);
49
51
  line-height: 1.12;
50
52
  text-wrap: balance;
51
53
  }
52
54
 
53
55
  .ui-prose h1 {
54
56
  font-size: var(--text-xl);
55
- letter-spacing: var(--tracking-wide);
56
- text-transform: uppercase;
57
+ letter-spacing: 0;
58
+ text-transform: none;
57
59
  }
58
60
 
59
61
  .ui-prose h2 {
60
62
  font-size: var(--text-lg);
61
- letter-spacing: var(--tracking-wide);
63
+ letter-spacing: 0;
62
64
  padding-block-end: 0.3rem;
63
65
  border-block-end: 1px solid var(--line);
64
- text-transform: uppercase;
66
+ text-transform: none;
65
67
  }
66
68
 
67
69
  .ui-prose h3 {
@@ -70,8 +72,8 @@
70
72
 
71
73
  .ui-prose :is(h4, h5, h6) {
72
74
  font-size: var(--text-base);
73
- letter-spacing: var(--tracking-wide);
74
- text-transform: uppercase;
75
+ letter-spacing: 0;
76
+ text-transform: none;
75
77
  }
76
78
 
77
79
  .ui-prose :is(h5, h6) {
@@ -185,11 +187,11 @@
185
187
 
186
188
  .ui-prose dt {
187
189
  color: var(--text-dim);
188
- font-family: var(--mono);
190
+ font-family: var(--sans);
189
191
  font-size: var(--text-2xs);
190
192
  font-weight: 700;
191
- letter-spacing: var(--tracking-wide);
192
- text-transform: uppercase;
193
+ letter-spacing: 0;
194
+ text-transform: none;
193
195
  }
194
196
 
195
197
  .ui-prose dd {
@@ -241,10 +243,10 @@
241
243
 
242
244
  .ui-prose figcaption {
243
245
  color: var(--text-dim);
244
- font-family: var(--mono);
246
+ font-family: var(--sans);
245
247
  font-size: var(--text-2xs);
246
- letter-spacing: var(--tracking-wide);
247
- text-transform: uppercase;
248
+ letter-spacing: 0;
249
+ text-transform: none;
248
250
  }
249
251
 
250
252
  /* --- Table — raw Markdown tables look like ui-table ---
@@ -262,7 +264,7 @@
262
264
  border-collapse: collapse;
263
265
  border-radius: var(--radius-md);
264
266
  display: block;
265
- font-family: var(--mono);
267
+ font-family: var(--sans);
266
268
  font-size: var(--text-sm);
267
269
  inline-size: 100%;
268
270
  overflow-x: auto;
@@ -280,8 +282,8 @@
280
282
  color: var(--text-dim);
281
283
  font-size: var(--text-2xs);
282
284
  font-weight: 700;
283
- letter-spacing: var(--tracking-wide);
284
- text-transform: uppercase;
285
+ letter-spacing: 0;
286
+ text-transform: none;
285
287
  }
286
288
 
287
289
  .ui-prose td {
@@ -316,7 +318,7 @@
316
318
  .ui-quote {
317
319
  color: var(--text);
318
320
  display: grid;
319
- font-family: var(--display);
321
+ font-family: var(--sans);
320
322
  font-size: var(--text-xl);
321
323
  font-weight: var(--display-weight);
322
324
  gap: var(--space-sm);
@@ -335,9 +337,9 @@
335
337
 
336
338
  .ui-quote__cite {
337
339
  color: var(--text-dim);
338
- font-family: var(--mono);
340
+ font-family: var(--sans);
339
341
  font-size: var(--text-2xs);
340
342
  font-style: normal;
341
- letter-spacing: var(--tracking-wide);
342
- text-transform: uppercase;
343
+ letter-spacing: 0;
344
+ text-transform: none;
343
345
  }
package/css/core.css CHANGED
@@ -18,6 +18,7 @@
18
18
  @import url('./site.css') layer(bronto);
19
19
  @import url('./content.css') layer(bronto);
20
20
  @import url('./primitives.css') layer(bronto);
21
+ @import url('./row.css') layer(bronto);
21
22
  @import url('./forms.css') layer(bronto);
22
23
  @import url('./feedback.css') layer(bronto);
23
24
  @import url('./overlay.css') layer(bronto);
@@ -32,13 +32,13 @@
32
32
  cursor: pointer;
33
33
  display: inline-flex;
34
34
  flex: 0 0 auto;
35
- font-family: var(--mono);
35
+ font-family: var(--sans);
36
36
  font-size: var(--text-xs);
37
37
  gap: 0.4rem;
38
- letter-spacing: var(--tracking-wide);
38
+ letter-spacing: 0;
39
39
  margin-block-end: -1px;
40
40
  padding: 0.6rem 0.85rem;
41
- text-transform: uppercase;
41
+ text-transform: none;
42
42
  transition:
43
43
  color var(--duration-fast) var(--ease-standard),
44
44
  border-color var(--duration-fast) var(--ease-standard);
@@ -104,13 +104,13 @@
104
104
  color: var(--text);
105
105
  cursor: pointer;
106
106
  display: flex;
107
- font-family: var(--mono);
107
+ font-family: var(--sans);
108
108
  font-size: var(--text-sm);
109
109
  gap: 0.6rem;
110
- letter-spacing: var(--tracking-wide);
110
+ letter-spacing: 0;
111
111
  list-style: none;
112
112
  padding: 0.85rem 0.2rem;
113
- text-transform: uppercase;
113
+ text-transform: none;
114
114
  }
115
115
 
116
116
  .ui-accordion__summary::-webkit-details-marker {
@@ -192,12 +192,12 @@
192
192
  color: var(--text-soft);
193
193
  cursor: pointer;
194
194
  flex: 1 0 auto;
195
- font-family: var(--mono);
195
+ font-family: var(--sans);
196
196
  font-size: var(--text-xs);
197
- letter-spacing: var(--tracking-wide);
197
+ letter-spacing: 0;
198
198
  padding: 0.42rem 0.8rem;
199
199
  text-align: center;
200
- text-transform: uppercase;
200
+ text-transform: none;
201
201
  transition:
202
202
  background-color var(--duration-fast) var(--ease-standard),
203
203
  color var(--duration-fast) var(--ease-standard);
@@ -233,14 +233,14 @@
233
233
  color: var(--text-dim);
234
234
  display: flex;
235
235
  flex-wrap: wrap;
236
- font-family: var(--mono);
236
+ font-family: var(--sans);
237
237
  font-size: var(--text-2xs);
238
238
  gap: 0.5rem;
239
- letter-spacing: var(--tracking-wide);
239
+ letter-spacing: 0;
240
240
  list-style: none;
241
241
  margin: 0;
242
242
  padding: 0;
243
- text-transform: uppercase;
243
+ text-transform: none;
244
244
  }
245
245
 
246
246
  .ui-breadcrumb__item {
@@ -302,7 +302,7 @@
302
302
  color: var(--text-soft);
303
303
  cursor: pointer;
304
304
  display: inline-flex;
305
- font-family: var(--mono);
305
+ font-family: var(--sans);
306
306
  font-size: var(--text-xs);
307
307
  justify-content: center;
308
308
  min-block-size: 2rem;
@@ -370,14 +370,14 @@
370
370
  color: var(--text);
371
371
  display: inline-flex;
372
372
  flex: 0 0 auto;
373
- font-family: var(--mono);
373
+ font-family: var(--sans);
374
374
  font-size: calc(var(--av-size) * 0.38);
375
375
  font-weight: 700;
376
376
  block-size: var(--av-size);
377
377
  justify-content: center;
378
378
  letter-spacing: 0.04em;
379
379
  overflow: hidden;
380
- text-transform: uppercase;
380
+ text-transform: none;
381
381
  inline-size: var(--av-size);
382
382
  }
383
383
 
@@ -528,11 +528,11 @@
528
528
  background: color-mix(in srgb, var(--panel-strong) 75%, transparent);
529
529
  border-radius: var(--radius-pill);
530
530
  color: var(--text);
531
- font-family: var(--mono);
531
+ font-family: var(--sans);
532
532
  font-size: var(--text-2xs);
533
533
  inset-block-end: var(--space-xs);
534
534
  inset-inline-start: var(--space-xs);
535
- letter-spacing: var(--tracking-wide);
535
+ letter-spacing: 0;
536
536
  padding: 0.2rem 0.5rem;
537
537
  position: absolute;
538
538
  }
package/css/feedback.css CHANGED
@@ -50,12 +50,12 @@
50
50
 
51
51
  .ui-alert__title {
52
52
  color: var(--text);
53
- font-family: var(--mono);
53
+ font-family: var(--sans);
54
54
  font-size: var(--text-2xs);
55
55
  font-weight: 700;
56
- letter-spacing: var(--tracking-wide);
56
+ letter-spacing: 0;
57
57
  margin: 0;
58
- text-transform: uppercase;
58
+ text-transform: none;
59
59
  }
60
60
 
61
61
  .ui-alert__body {
@@ -67,7 +67,7 @@
67
67
  border: 0;
68
68
  color: var(--text-dim);
69
69
  cursor: pointer;
70
- font-family: var(--mono);
70
+ font-family: var(--sans);
71
71
  grid-column: 3;
72
72
  grid-row: 1;
73
73
  line-height: 1;
@@ -199,12 +199,12 @@
199
199
 
200
200
  .ui-toast__title {
201
201
  color: var(--text);
202
- font-family: var(--mono);
202
+ font-family: var(--sans);
203
203
  font-size: var(--text-2xs);
204
204
  font-weight: 700;
205
- letter-spacing: var(--tracking-wide);
205
+ letter-spacing: 0;
206
206
  margin: 0;
207
- text-transform: uppercase;
207
+ text-transform: none;
208
208
  }
209
209
 
210
210
  .ui-toast__close {
@@ -284,7 +284,7 @@
284
284
  block-size: auto;
285
285
  inline-size: auto;
286
286
  margin-block-start: 0;
287
- font-family: var(--mono);
287
+ font-family: var(--sans);
288
288
  font-weight: 700;
289
289
  line-height: 1.1;
290
290
  }
@@ -327,15 +327,15 @@
327
327
  border-radius: var(--radius-sm);
328
328
  inset-block-end: calc(100% + 0.5rem);
329
329
  color: var(--bg);
330
- font-family: var(--mono);
330
+ font-family: var(--sans);
331
331
  font-size: var(--text-2xs);
332
332
  inset-inline-start: 50%;
333
- letter-spacing: var(--tracking-wide);
333
+ letter-spacing: 0;
334
334
  opacity: 0;
335
335
  padding: 0.34rem 0.5rem;
336
336
  pointer-events: none;
337
337
  position: absolute;
338
- text-transform: uppercase;
338
+ text-transform: none;
339
339
  transform: translate(-50%, 4px);
340
340
  transition: opacity var(--duration-fast) var(--ease-standard);
341
341
  white-space: nowrap;
@@ -540,7 +540,7 @@
540
540
 
541
541
  .ui-meter__value {
542
542
  color: var(--text);
543
- font-family: var(--mono);
543
+ font-family: var(--sans);
544
544
  font-variant-numeric: tabular-nums;
545
545
  text-align: end;
546
546
  }
@@ -575,17 +575,17 @@
575
575
  counter-increment: ui-step;
576
576
  display: inline-flex;
577
577
  flex: 1 1 auto;
578
- font-family: var(--mono);
578
+ font-family: var(--sans);
579
579
  font-size: var(--text-xs);
580
580
  gap: 0.5rem;
581
- letter-spacing: var(--tracking-wide);
581
+ letter-spacing: 0;
582
582
 
583
583
  /* Prefer the natural one-line width, but never wider than the container: a
584
584
  long step label at `max-content` couldn't shrink and overflowed the page on
585
585
  narrow viewports (tabs scroll; steps didn't). Capping at 100% lets an
586
586
  over-long label wrap instead of overflowing. */
587
587
  min-inline-size: min(100%, max-content);
588
- text-transform: uppercase;
588
+ text-transform: none;
589
589
  }
590
590
 
591
591
  .ui-steps__item::before {
package/css/forms.css CHANGED
@@ -9,11 +9,11 @@
9
9
 
10
10
  .ui-label {
11
11
  color: var(--text-dim);
12
- font-family: var(--mono);
12
+ font-family: var(--sans);
13
13
  font-size: var(--text-2xs);
14
14
  font-weight: 700;
15
- letter-spacing: var(--tracking-wide);
16
- text-transform: uppercase;
15
+ letter-spacing: 0;
16
+ text-transform: none;
17
17
  }
18
18
 
19
19
  .ui-input,
@@ -23,7 +23,7 @@
23
23
  border: 1px solid var(--line-strong);
24
24
  border-radius: var(--radius-md);
25
25
  color: var(--text);
26
- font-family: var(--mono);
26
+ font-family: var(--sans);
27
27
  font-size: var(--text-sm);
28
28
  padding: 0.6rem 0.7rem;
29
29
  transition:
@@ -286,6 +286,7 @@
286
286
 
287
287
  /* --- Range --- */
288
288
  .ui-range {
289
+ margin-inline: 0;
289
290
  accent-color: var(--accent);
290
291
  inline-size: 100%;
291
292
  }
@@ -315,9 +316,9 @@
315
316
  font-family: var(--sans);
316
317
  font-size: var(--text-sm);
317
318
  font-weight: 700;
318
- letter-spacing: var(--tracking-wide);
319
+ letter-spacing: 0;
319
320
  margin: 0 0 var(--space-xs);
320
- text-transform: uppercase;
321
+ text-transform: none;
321
322
  }
322
323
 
323
324
  .ui-error-summary__list {
@@ -369,7 +370,7 @@
369
370
  background: transparent;
370
371
  border: 0;
371
372
  color: var(--text);
372
- font-family: var(--mono);
373
+ font-family: var(--sans);
373
374
  font-size: var(--text-sm);
374
375
  outline: none;
375
376
  padding: 0.6rem 0;
@@ -12,16 +12,16 @@
12
12
  color: var(--text);
13
13
  cursor: pointer;
14
14
  display: inline-flex;
15
- font-family: var(--mono);
15
+ font-family: var(--sans);
16
16
  font-size: var(--text-xs);
17
17
  font-weight: 600;
18
18
  gap: 0.4rem;
19
19
  justify-content: center;
20
- letter-spacing: var(--tracking-wide);
20
+ letter-spacing: 0;
21
21
  min-block-size: 2rem;
22
22
  min-inline-size: 7rem;
23
23
  padding: 0.42rem 0.66rem;
24
- text-transform: uppercase;
24
+ text-transform: none;
25
25
  transition:
26
26
  background-color var(--duration-fast) var(--ease-standard),
27
27
  border-color var(--duration-fast) var(--ease-standard),
package/css/overlay.css CHANGED
@@ -33,8 +33,8 @@
33
33
  /* Enter AND exit, zero JS — `@starting-style` + `transition-behavior:
34
34
  allow-discrete` keep the native <dialog> (and its backdrop) in the top
35
35
  layer while it transitions out on close, so it fades/scales both ways
36
- instead of only animating in. Scoped to `dialog.ui-modal` so the
37
- controlled `.is-open` (non-<dialog>) path keeps its own entrance.
36
+ instead of only animating in. The native dialog owns top-layer state;
37
+ an application toggles it through showModal() and close().
38
38
  Needs a 2026-era floor (see CONTRIBUTING → Browser floor). */
39
39
  dialog.ui-modal {
40
40
  opacity: 0;
@@ -76,24 +76,8 @@ dialog.ui-modal[open]::backdrop {
76
76
  }
77
77
  }
78
78
 
79
- /* Controlled (non-<dialog>) usage. A portal/React modal that can't be a
80
- native <dialog> wears the same skin + open layout via `.is-open`.
81
- Backdrop and top-layer stacking are then the consumer's responsibility
82
- (the native <dialog> path gets them free); focus-trapping no longer is —
83
- mark the overlay `data-bronto-modal` and run `initModal` for an
84
- inert-based trap + focus-return + Escape signal. */
85
- .ui-modal.is-open {
86
- animation: uiToastIn var(--duration-base) var(--ease-spring) both;
87
- display: grid;
88
- grid-template-rows: auto 1fr auto;
89
- }
90
-
91
- /* Background scroll-lock. A native <dialog> top layer does NOT stop the page
92
- behind it scrolling, and the no-JS native path can't lock it in script — so
93
- lock it in CSS, for both the native [open] dialog and the controlled .is-open
94
- overlay (incl. the drawer modifier, same base). */
95
- html:has(dialog.ui-modal[open]),
96
- html:has(.ui-modal.is-open) {
79
+ /* Native dialogs lock the document while open. */
80
+ html:has(dialog.ui-modal[open]) {
97
81
  overflow: hidden;
98
82
  }
99
83
 
@@ -108,11 +92,11 @@ html:has(.ui-modal.is-open) {
108
92
 
109
93
  .ui-modal__title {
110
94
  color: var(--text);
111
- font-family: var(--display);
95
+ font-family: var(--sans);
112
96
  font-size: var(--text-lg);
113
- letter-spacing: var(--tracking-wide);
97
+ letter-spacing: 0;
114
98
  margin: 0;
115
- text-transform: uppercase;
99
+ text-transform: none;
116
100
  }
117
101
 
118
102
  .ui-modal__body {
@@ -136,7 +120,7 @@ html:has(.ui-modal.is-open) {
136
120
  color: var(--text);
137
121
  cursor: pointer;
138
122
  flex: 0 0 auto;
139
- font-family: var(--mono);
123
+ font-family: var(--sans);
140
124
  line-height: 1;
141
125
  padding: 0.34rem 0.5rem;
142
126
  }
@@ -247,6 +231,12 @@ html:has(.ui-modal.is-open) {
247
231
  position: relative;
248
232
  }
249
233
 
234
+ /* The SURFACE only. Placement is a separate decision, because a menu is not
235
+ always a dropdown: a canvas context menu opens at the pointer, a mobile one
236
+ arrives as a sheet. This rule used to weld `position: absolute` plus a
237
+ trigger-relative offset into the surface itself, so a consumer with a
238
+ pointer-positioned menu could not use it at all and re-declared the panel,
239
+ the border, the radius and the shadow to get one. */
250
240
  .ui-menu {
251
241
  background: var(--panel-strong);
252
242
  border: 1px solid var(--line-strong);
@@ -256,35 +246,43 @@ html:has(.ui-modal.is-open) {
256
246
  gap: 1px;
257
247
  min-inline-size: 11rem;
258
248
  padding: 0.3rem;
249
+ }
250
+
251
+ /* The dropdown placement this class always had: anchored under its trigger
252
+ inside a `.ui-menu-host`. Unchanged behaviour, now opted into. */
253
+ .ui-menu--dropdown {
259
254
  position: absolute;
260
255
  inset-inline-end: 0;
261
256
  inset-block-start: calc(100% + 0.4rem);
262
257
  z-index: var(--z-overlay);
263
258
  }
264
259
 
260
+ /* Opened at a point the host computes — a right-click, a long-press. The host
261
+ sets `left`/`top` (or `inset-inline-start`/`inset-block-start`); Bronto only
262
+ takes it out of flow and gives it the layer. */
263
+ .ui-menu--at-pointer {
264
+ position: fixed;
265
+ z-index: var(--z-popover);
266
+ }
267
+
265
268
  .ui-menu__label {
266
269
  color: var(--text-dim);
267
- font-family: var(--mono);
270
+ font-family: var(--sans);
268
271
  font-size: var(--text-2xs);
269
- letter-spacing: var(--tracking-wide);
272
+ letter-spacing: 0;
270
273
  padding: 0.45rem 0.55rem 0.2rem;
271
- text-transform: uppercase;
274
+ text-transform: none;
272
275
  }
273
276
 
277
+ /* Composes `.ui-row` (css/row.css) — a menu item IS a dense selectable row,
278
+ and keeping two copies of that shape is how they drift. What is menu-specific
279
+ stays here: the mono face, the slightly roomier padding a pointer target
280
+ wants, and the leading bullet below. `row.css` is in the core bundle, which
281
+ is what lets a core component compose it. */
274
282
  .ui-menu__item {
275
- align-items: center;
276
- background: transparent;
277
- border: 0;
278
- border-radius: var(--radius-sm);
279
- color: var(--text-soft);
280
- cursor: pointer;
281
- display: flex;
282
- font-family: var(--mono);
283
+ font-family: var(--sans);
283
284
  font-size: var(--text-sm);
284
- gap: 0.5rem;
285
285
  padding: 0.5rem 0.55rem;
286
- text-align: start;
287
- inline-size: 100%;
288
286
  }
289
287
 
290
288
  .ui-menu__item::before {
@@ -380,7 +378,7 @@ html:has(.ui-modal.is-open) {
380
378
  border-radius: var(--radius-sm);
381
379
  color: var(--text-soft);
382
380
  cursor: pointer;
383
- font-family: var(--mono);
381
+ font-family: var(--sans);
384
382
  font-size: var(--text-sm);
385
383
  padding: 0.5rem 0.55rem;
386
384
  }