@slotted/styles 0.1.0-beta.0 → 0.1.0-beta.10

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 (176) hide show
  1. package/package.json +1 -1
  2. package/src/accordion/accordion.css +10 -10
  3. package/src/action-bar/action-bar.css +31 -32
  4. package/src/action-sheet/action-sheet.css +36 -36
  5. package/src/alert/alert.css +43 -35
  6. package/src/alert/alert.tokens.json +5 -0
  7. package/src/app-shell/app-shell.css +356 -301
  8. package/src/aspect-ratio/aspect-ratio.css +9 -9
  9. package/src/attachment/attachment.css +91 -99
  10. package/src/avatar/avatar.css +71 -41
  11. package/src/avatar/avatar.tokens.json +7 -0
  12. package/src/avatar-group/avatar-group.css +21 -22
  13. package/src/badge/badge.css +45 -37
  14. package/src/badge/badge.tokens.json +5 -0
  15. package/src/breadcrumb/breadcrumb.css +37 -37
  16. package/src/button/button.css +139 -64
  17. package/src/button/button.tokens.json +10 -0
  18. package/src/button-group/button-group.css +76 -72
  19. package/src/button-group/button-group.tokens.json +2 -0
  20. package/src/calendar/calendar.css +93 -103
  21. package/src/card/card.css +54 -61
  22. package/src/carousel/carousel.css +150 -161
  23. package/src/cascader/cascader.css +152 -153
  24. package/src/cascader/cascader.tokens.json +1 -0
  25. package/src/chart/chart.css +242 -239
  26. package/src/chart/chart.tokens.json +1 -0
  27. package/src/checkbox/checkbox.css +119 -124
  28. package/src/checkbox-group/checkbox-group.css +7 -7
  29. package/src/code-block/code-block.css +81 -85
  30. package/src/collapsible/collapsible.css +69 -76
  31. package/src/color-picker/color-picker.css +83 -91
  32. package/src/column-manager/column-manager.css +106 -114
  33. package/src/combobox/combobox.css +132 -107
  34. package/src/combobox/combobox.tokens.json +1 -0
  35. package/src/command-palette/command-palette.css +84 -90
  36. package/src/container/container.css +24 -24
  37. package/src/context-menu/context-menu.css +8 -8
  38. package/src/currency-field/currency-field.css +210 -88
  39. package/src/currency-field/currency-field.tokens.json +13 -0
  40. package/src/dashboard-grid/dashboard-grid.css +148 -116
  41. package/src/data-grid/data-grid.css +504 -469
  42. package/src/data-grid/data-grid.tokens.json +2 -0
  43. package/src/data-list/data-list.css +81 -70
  44. package/src/data-list/data-list.tokens.json +2 -1
  45. package/src/date-field/date-field.css +55 -52
  46. package/src/date-field/date-field.tokens.json +1 -0
  47. package/src/date-picker/date-picker.css +40 -42
  48. package/src/date-range-picker/date-range-picker.css +114 -118
  49. package/src/datetime-field/datetime-field.css +78 -80
  50. package/src/datetime-field/datetime-field.tokens.json +1 -0
  51. package/src/datetime-picker/datetime-picker.css +61 -63
  52. package/src/datetime-range-picker/datetime-range-picker.css +149 -156
  53. package/src/description-list/description-list.css +61 -64
  54. package/src/detail-panel/detail-panel.css +70 -70
  55. package/src/dialog/dialog.css +334 -153
  56. package/src/dialog/dialog.tokens.json +5 -0
  57. package/src/divider/divider.css +18 -18
  58. package/src/drawer/drawer.css +186 -209
  59. package/src/entity-picker/entity-picker.css +238 -241
  60. package/src/entity-picker/entity-picker.tokens.json +1 -0
  61. package/src/event-calendar/event-calendar.css +343 -385
  62. package/src/field/field.css +74 -78
  63. package/src/field-group/field-group.css +22 -25
  64. package/src/filter-bar/filter-bar.css +193 -209
  65. package/src/form/form.css +34 -24
  66. package/src/form/form.tokens.json +1 -0
  67. package/src/fullscreen/fullscreen.css +24 -25
  68. package/src/grid/grid.css +28 -28
  69. package/src/highlight/highlight.css +6 -6
  70. package/src/hover-card/hover-card.css +6 -6
  71. package/src/icon/icon.css +19 -15
  72. package/src/icon/icon.tokens.json +1 -0
  73. package/src/image/image.css +39 -39
  74. package/src/import-export-center/import-export-center.css +135 -156
  75. package/src/inline/inline.css +27 -27
  76. package/src/inline-message/inline-message.css +52 -28
  77. package/src/inline-message/inline-message.tokens.json +4 -0
  78. package/src/kbd/kbd.css +30 -26
  79. package/src/link/link.css +15 -15
  80. package/src/list/list.css +44 -17
  81. package/src/list/list.tokens.json +4 -0
  82. package/src/list-item/list-item.css +80 -66
  83. package/src/list-item/list-item.tokens.json +7 -0
  84. package/src/listbox/listbox.css +56 -59
  85. package/src/loading-overlay/loading-overlay.css +75 -92
  86. package/src/markdown/markdown.css +17 -17
  87. package/src/menu/menu.css +83 -63
  88. package/src/menubar/menubar.css +13 -13
  89. package/src/message/message.css +182 -202
  90. package/src/message/message.tokens.json +5 -0
  91. package/src/message-scroller/message-scroller.css +41 -42
  92. package/src/multi-select/multi-select.css +152 -145
  93. package/src/multi-select/multi-select.tokens.json +1 -0
  94. package/src/navigation-menu/navigation-menu.css +167 -188
  95. package/src/notification-center/notification-center.css +140 -148
  96. package/src/notification-center/notification-center.tokens.json +3 -0
  97. package/src/number-field/number-field.css +84 -83
  98. package/src/number-field/number-field.tokens.json +1 -0
  99. package/src/otp-input/otp-input.css +67 -57
  100. package/src/otp-input/otp-input.tokens.json +1 -0
  101. package/src/page/page.css +23 -23
  102. package/src/page-header/page-header.css +268 -281
  103. package/src/page-header/page-header.tokens.json +1 -0
  104. package/src/pagination/pagination.css +68 -72
  105. package/src/popover/popover.css +40 -49
  106. package/src/progress-indicator/progress-indicator.css +177 -120
  107. package/src/progress-indicator/progress-indicator.tokens.json +1 -1
  108. package/src/prompt-composer/prompt-composer.css +221 -102
  109. package/src/prompt-composer/prompt-composer.tokens.json +15 -0
  110. package/src/prose/prose.css +71 -75
  111. package/src/radio-group/radio-group.css +98 -103
  112. package/src/rating/rating.css +136 -132
  113. package/src/rating/rating.tokens.json +1 -0
  114. package/src/result-state/result-state.css +74 -77
  115. package/src/runtime-properties.mjs +2 -0
  116. package/src/saved-views/saved-views.css +41 -47
  117. package/src/scroll-area/scroll-area.css +39 -32
  118. package/src/section/section.css +161 -41
  119. package/src/section/section.tokens.json +7 -2
  120. package/src/segmented-control/segmented-control.css +254 -97
  121. package/src/segmented-control/segmented-control.tokens.json +15 -11
  122. package/src/select/select.css +118 -117
  123. package/src/select/select.tokens.json +1 -0
  124. package/src/side-navigation/side-navigation.css +179 -182
  125. package/src/side-navigation/side-navigation.tokens.json +1 -0
  126. package/src/skeleton/skeleton.css +47 -48
  127. package/src/slider/slider.css +86 -88
  128. package/src/sparkline/sparkline.css +62 -40
  129. package/src/sparkline/sparkline.tokens.json +2 -0
  130. package/src/spinner/spinner.css +39 -182
  131. package/src/spinner/spinner.tokens.json +0 -2
  132. package/src/split-button/split-button.css +30 -31
  133. package/src/split-button/split-button.tokens.json +1 -0
  134. package/src/splitter/splitter.css +35 -35
  135. package/src/stack/stack.css +24 -24
  136. package/src/stat-card/stat-card.css +341 -224
  137. package/src/stat-card/stat-card.tokens.json +3 -0
  138. package/src/status-indicator/status-indicator.css +28 -28
  139. package/src/stepper/stepper.css +58 -62
  140. package/src/switch/switch.css +86 -92
  141. package/src/table/table.css +310 -165
  142. package/src/table/table.tokens.json +6 -0
  143. package/src/table-of-contents/table-of-contents.css +51 -54
  144. package/src/tabs/tabs.css +330 -302
  145. package/src/tabs/tabs.tokens.json +8 -5
  146. package/src/tag/tag.css +79 -71
  147. package/src/tag/tag.tokens.json +9 -0
  148. package/src/tags-input/tags-input.css +145 -82
  149. package/src/tags-input/tags-input.tokens.json +7 -1
  150. package/src/text-field/text-field.css +132 -136
  151. package/src/text-field/text-field.tokens.json +1 -0
  152. package/src/textarea/textarea.css +31 -28
  153. package/src/textarea/textarea.tokens.json +1 -0
  154. package/src/time-field/time-field.css +72 -69
  155. package/src/time-field/time-field.tokens.json +1 -0
  156. package/src/time-picker/time-picker.css +56 -58
  157. package/src/time-range-picker/time-range-picker.css +126 -133
  158. package/src/timeline/timeline.css +254 -266
  159. package/src/timeline/timeline.tokens.json +5 -0
  160. package/src/toast/toast.css +89 -90
  161. package/src/toast/toast.tokens.json +5 -0
  162. package/src/toggle/toggle.css +62 -25
  163. package/src/toggle/toggle.tokens.json +8 -0
  164. package/src/toggle-group/toggle-group.css +106 -60
  165. package/src/toggle-group/toggle-group.tokens.json +10 -0
  166. package/src/toolbar/toolbar.css +30 -35
  167. package/src/tooltip/tooltip.css +26 -26
  168. package/src/top-navigation/top-navigation.css +243 -259
  169. package/src/tour/tour.css +51 -60
  170. package/src/transfer/transfer.css +160 -164
  171. package/src/tree/tree.css +103 -111
  172. package/src/typography/typography.css +40 -36
  173. package/src/typography/typography.tokens.json +1 -0
  174. package/src/upload/upload.css +224 -224
  175. package/src/visually-hidden/visually-hidden.css +1 -1
  176. package/src/wizard/wizard.css +185 -197
@@ -2,9 +2,11 @@
2
2
  "--slotted-border-strong",
3
3
  "--slotted-border-subtle",
4
4
  "--slotted-border-width-medium",
5
+ "--slotted-border-width-thick",
5
6
  "--slotted-border-width-thin",
6
7
  "--slotted-control-border-color",
7
8
  "--slotted-control-border-width",
9
+ "--slotted-control-focus-ring-offset",
8
10
  "--slotted-control-font-family",
9
11
  "--slotted-control-font-size-lg",
10
12
  "--slotted-control-font-size-md",
@@ -24,9 +26,14 @@
24
26
  "--slotted-control-surface",
25
27
  "--slotted-control-transition-duration",
26
28
  "--slotted-control-transition-easing",
29
+ "--slotted-data-1",
30
+ "--slotted-data-2",
31
+ "--slotted-data-3",
32
+ "--slotted-data-5",
27
33
  "--slotted-disabled-background",
28
34
  "--slotted-disabled-border",
29
35
  "--slotted-disabled-foreground",
36
+ "--slotted-duration-loop-slow",
30
37
  "--slotted-duration-medium",
31
38
  "--slotted-duration-short",
32
39
  "--slotted-easing-enter",
@@ -62,6 +69,13 @@
62
69
  "--slotted-prompt-composer-raised-focus-shadow",
63
70
  "--slotted-prompt-composer-raised-shadow",
64
71
  "--slotted-prompt-composer-readonly-background",
72
+ "--slotted-prompt-composer-ring-colors",
73
+ "--slotted-prompt-composer-ring-duration",
74
+ "--slotted-prompt-composer-ring-glow-opacity",
75
+ "--slotted-prompt-composer-ring-glow-opacity-busy",
76
+ "--slotted-prompt-composer-ring-glow-opacity-focus",
77
+ "--slotted-prompt-composer-ring-glow-reach",
78
+ "--slotted-prompt-composer-ring-width",
65
79
  "--slotted-prompt-composer-rows",
66
80
  "--slotted-prompt-composer-selection-background",
67
81
  "--slotted-prompt-composer-shadow",
@@ -82,6 +96,7 @@
82
96
  "--slotted-space-3",
83
97
  "--slotted-space-4",
84
98
  "--slotted-space-5",
99
+ "--slotted-space-8",
85
100
  "--slotted-surface-sunken",
86
101
  "--slotted-target-comfortable",
87
102
  "--slotted-target-min",
@@ -8,20 +8,20 @@
8
8
  * two: a Slotted family placed inside the region, selected by `data-ui` at
9
9
  * 0-1-0, and the consumer's own rule. So every content rule below is written
10
10
  *
11
- * [data-ui='prose'] :where(<tag>):not(:where(<the donut>))
11
+ * [data-ui-prose] :where(<tag>):not(:where(<the donut>))
12
12
  *
13
13
  * which weighs 0-1-0 — the root and nothing else. `:where()` has no weight,
14
14
  * and `:not()` takes the weight of its argument, which here is also none.
15
15
  *
16
16
  * The donut is the opt-out: `data-part='exclude'` and everything inside it.
17
- * `@scope ([data-ui='prose']) to ([data-part='exclude'])` says the same thing
17
+ * `@scope ([data-ui-prose]) to ([data-part='exclude'])` says the same thing
18
18
  * in one line and resolves lower still, and it was refused on a date rather
19
19
  * than on a principle: it reached Baseline in March 2026, and an `@scope`
20
20
  * block a browser cannot parse drops this whole stylesheet instead of one
21
21
  * declaration. The attribute is the same either way, so the move costs no
22
22
  * contract change. `specs/components/prose/contract.json` holds the note.
23
23
  */
24
- [data-ui='prose'] {
24
+ [data-ui-prose] {
25
25
  /**
26
26
  * The space between blocks. Typeset proves one number governs a whole page
27
27
  * — heading gaps, list gaps and the room around a rule all derive from it —
@@ -95,27 +95,27 @@
95
95
  * is, so the offset from control type is a fact a reader can check rather
96
96
  * than one hidden behind `sm`.
97
97
  */
98
- [data-ui='prose'][data-size='md'] {
98
+ [data-ui-prose][data-size='md'] {
99
99
  font-size: var(--slotted-font-size-md, 0.875rem);
100
100
  }
101
101
 
102
- [data-ui='prose'][data-size='lg'] {
102
+ [data-ui-prose][data-size='lg'] {
103
103
  font-size: var(--slotted-font-size-lg, 1rem);
104
104
  }
105
105
 
106
- [data-ui='prose'][data-size='xl'] {
106
+ [data-ui-prose][data-size='xl'] {
107
107
  font-size: var(--slotted-font-size-xl, 1.125rem);
108
108
  }
109
109
 
110
- [data-ui='prose'][data-flow='tight'] {
110
+ [data-ui-prose][data-flow='tight'] {
111
111
  --_flow: var(--slotted-prose-flow-tight, 0.75em);
112
112
  }
113
113
 
114
- [data-ui='prose'][data-flow='normal'] {
114
+ [data-ui-prose][data-flow='normal'] {
115
115
  --_flow: var(--slotted-prose-flow-normal, 1.15em);
116
116
  }
117
117
 
118
- [data-ui='prose'][data-flow='loose'] {
118
+ [data-ui-prose][data-flow='loose'] {
119
119
  --_flow: var(--slotted-prose-flow-loose, 1.6em);
120
120
  }
121
121
 
@@ -129,7 +129,7 @@
129
129
  * and are stable, and `prose.styles.test.mjs` holds the distinction.
130
130
  */
131
131
 
132
- [data-ui='prose']
132
+ [data-ui-prose]
133
133
  :where(
134
134
  p,
135
135
  ul,
@@ -147,7 +147,7 @@
147
147
  h4,
148
148
  h5,
149
149
  h6,
150
- [data-part='scroll'],
150
+ [data-part-scroll],
151
151
  [data-part='footnotes']
152
152
  ):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
153
153
  margin-block-end: 0;
@@ -159,9 +159,9 @@
159
159
  * child of the region and of every box that holds blocks of its own, so a
160
160
  * quotation, a list item and a table cell each start flush.
161
161
  */
162
- [data-ui='prose'] > :first-child,
163
- [data-ui='prose']
164
- :where(li, blockquote, td, th, details, figure, [data-part='scroll'])
162
+ [data-ui-prose] > :first-child,
163
+ [data-ui-prose]
164
+ :where(li, blockquote, td, th, details, figure, [data-part-scroll])
165
165
  > :first-child {
166
166
  margin-block-start: 0;
167
167
  }
@@ -171,7 +171,7 @@
171
171
  * The pair is what keeps two consecutive headings — a section title followed
172
172
  * by its first subsection — from collapsing into one block.
173
173
  */
174
- [data-ui='prose']
174
+ [data-ui-prose]
175
175
  :where(h1, h2, h3, h4, h5, h6):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
176
176
  color: var(--slotted-text, CanvasText);
177
177
  font-family: var(
@@ -197,31 +197,31 @@
197
197
  text-wrap: balance;
198
198
  }
199
199
 
200
- [data-ui='prose']
200
+ [data-ui-prose]
201
201
  :where(h1, h2, h3, h4, h5, h6)
202
202
  + :not(:where([data-part='exclude'], [data-part='exclude'] *)) {
203
203
  margin-block-start: calc(var(--_flow) * 0.5);
204
204
  }
205
205
 
206
- [data-ui='prose'] :where(h1):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
206
+ [data-ui-prose] :where(h1):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
207
207
  font-size: var(--_h1);
208
208
  line-height: var(--slotted-line-height-3xl, 1.3);
209
209
  }
210
210
 
211
- [data-ui='prose'] :where(h2):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
211
+ [data-ui-prose] :where(h2):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
212
212
  font-size: var(--_h2);
213
213
  line-height: var(--slotted-line-height-3xl, 1.3);
214
214
  }
215
215
 
216
- [data-ui='prose'] :where(h3):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
216
+ [data-ui-prose] :where(h3):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
217
217
  font-size: var(--_h3);
218
218
  }
219
219
 
220
- [data-ui='prose'] :where(h4):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
220
+ [data-ui-prose] :where(h4):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
221
221
  font-size: var(--_h4);
222
222
  }
223
223
 
224
- [data-ui='prose'] :where(h5):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
224
+ [data-ui-prose] :where(h5):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
225
225
  font-size: var(--_h5);
226
226
  }
227
227
 
@@ -229,7 +229,7 @@
229
229
  * The sixth level is smaller than the body text, so weight and case are what
230
230
  * carry it. A heading that is merely smaller reads as a caption.
231
231
  */
232
- [data-ui='prose'] :where(h6):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
232
+ [data-ui-prose] :where(h6):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
233
233
  color: var(--_muted);
234
234
  font-size: var(--_h6);
235
235
  letter-spacing: var(--slotted-prose-h6-tracking, 0.06em);
@@ -242,7 +242,7 @@
242
242
  * is the common languages written in it, which is the correction
243
243
  * `typography` already carries.
244
244
  */
245
- [data-ui='prose']
245
+ [data-ui-prose]
246
246
  :where(h6):not(:where([data-part='exclude'], [data-part='exclude'] *)):where(
247
247
  :lang(ar),
248
248
  :lang(fa),
@@ -254,7 +254,7 @@
254
254
 
255
255
  /* ── Running text ───────────────────────────────────────────────────── */
256
256
 
257
- [data-ui='prose'] :where(p):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
257
+ [data-ui-prose] :where(p):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
258
258
  /**
259
259
  * `pretty` asks the browser for the last few lines rather than the whole
260
260
  * paragraph, which is what keeps a widow off the end without the cost
@@ -263,11 +263,11 @@
263
263
  text-wrap: pretty;
264
264
  }
265
265
 
266
- [data-ui='prose'] :where(strong, b):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
266
+ [data-ui-prose] :where(strong, b):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
267
267
  font-weight: var(--slotted-font-weight-semibold, 600);
268
268
  }
269
269
 
270
- [data-ui='prose'] :where(small):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
270
+ [data-ui-prose] :where(small):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
271
271
  font-size: var(--slotted-prose-small-size, 0.875em);
272
272
  }
273
273
 
@@ -277,15 +277,14 @@
277
277
  * theme's own — a mark painted with a background and no matching ink is a
278
278
  * mark that vanishes in the dark scheme.
279
279
  */
280
- [data-ui='prose'] :where(mark):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
280
+ [data-ui-prose] :where(mark):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
281
281
  background-color: var(--slotted-tone-warning-surface, Mark);
282
282
  border-radius: var(--slotted-radius-xs, 2px);
283
283
  color: var(--slotted-tone-warning-text, MarkText);
284
284
  padding-inline: var(--slotted-prose-mark-inset, 0.2em);
285
285
  }
286
286
 
287
- [data-ui='prose']
288
- :where(abbr[title]):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
287
+ [data-ui-prose] :where(abbr[title]):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
289
288
  text-decoration-line: underline;
290
289
  text-decoration-style: dotted;
291
290
  text-underline-offset: 0.2em;
@@ -296,7 +295,7 @@
296
295
  * sits in; zero is what keeps the paragraph's rhythm even where a footnote
297
296
  * reference lands.
298
297
  */
299
- [data-ui='prose'] :where(sub, sup):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
298
+ [data-ui-prose] :where(sub, sup):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
300
299
  font-size: 0.75em;
301
300
  line-height: 0;
302
301
  }
@@ -310,7 +309,7 @@
310
309
  * `<Link>` placed inside this region wins on specificity and is left alone.
311
310
  */
312
311
 
313
- [data-ui='prose'] :where(a[href]):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
312
+ [data-ui-prose] :where(a[href]):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
314
313
  color: var(--slotted-link-color, var(--slotted-tone-accent-text, LinkText));
315
314
  text-decoration-color: var(
316
315
  --slotted-link-underline-color,
@@ -324,7 +323,7 @@
324
323
  text-decoration-color var(--slotted-duration-short) var(--slotted-easing-standard);
325
324
  }
326
325
 
327
- [data-ui='prose']
326
+ [data-ui-prose]
328
327
  :where(a[href]):not(:where([data-part='exclude'], [data-part='exclude'] *)):not(
329
328
  [data-disabled]
330
329
  ):hover {
@@ -339,7 +338,7 @@
339
338
  text-decoration-color: currentColor;
340
339
  }
341
340
 
342
- [data-ui='prose']
341
+ [data-ui-prose]
343
342
  :where(a[href]):not(:where([data-part='exclude'], [data-part='exclude'] *)):focus-visible {
344
343
  outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
345
344
  outline-offset: var(--slotted-link-focus-ring-offset, 1px);
@@ -354,16 +353,16 @@
354
353
  * <https://www.scottohara.me/blog/2019/01/12/lists-and-safari.html>.
355
354
  */
356
355
 
357
- [data-ui='prose'] :where(ul, ol):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
356
+ [data-ui-prose] :where(ul, ol):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
358
357
  padding-inline-start: var(--slotted-prose-list-inset, 1.5em);
359
358
  }
360
359
 
361
- [data-ui='prose'] :where(li):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
360
+ [data-ui-prose] :where(li):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
362
361
  margin-block-start: calc(var(--_flow) * 0.35);
363
362
  padding-inline-start: var(--slotted-prose-marker-gap, 0.25em);
364
363
  }
365
364
 
366
- [data-ui='prose'] :where(li):not(:where([data-part='exclude'], [data-part='exclude'] *))::marker {
365
+ [data-ui-prose] :where(li):not(:where([data-part='exclude'], [data-part='exclude'] *))::marker {
367
366
  color: var(--_muted);
368
367
  }
369
368
 
@@ -371,24 +370,24 @@
371
370
  * A nested list belongs to the row above it, so it takes the gap between two
372
371
  * rows rather than the gap between two blocks.
373
372
  */
374
- [data-ui='prose']
373
+ [data-ui-prose]
375
374
  :where(li)
376
375
  > :where(ul, ol):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
377
376
  margin-block-start: calc(var(--_flow) * 0.35);
378
377
  }
379
378
 
380
- [data-ui='prose'] :where(dt):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
379
+ [data-ui-prose] :where(dt):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
381
380
  font-weight: var(--slotted-font-weight-semibold, 600);
382
381
  margin-block-start: calc(var(--_flow) * 0.5);
383
382
  }
384
383
 
385
- [data-ui='prose'] :where(dd):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
384
+ [data-ui-prose] :where(dd):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
386
385
  margin-inline-start: var(--slotted-prose-list-inset, 1.5em);
387
386
  }
388
387
 
389
388
  /* ── Quotation ──────────────────────────────────────────────────────── */
390
389
 
391
- [data-ui='prose'] :where(blockquote):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
390
+ [data-ui-prose] :where(blockquote):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
392
391
  border-inline-start: var(
393
392
  --slotted-prose-quote-thickness,
394
393
  var(--slotted-border-width-thick, 2px)
@@ -408,11 +407,11 @@
408
407
  }
409
408
 
410
409
  /** The same forty pixels, on the element that holds an image. */
411
- [data-ui='prose'] :where(figure):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
410
+ [data-ui-prose] :where(figure):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
412
411
  margin-inline: 0;
413
412
  }
414
413
 
415
- [data-ui='prose']
414
+ [data-ui-prose]
416
415
  :where(figcaption, caption):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
417
416
  color: var(--_muted);
418
417
  font-size: var(--slotted-prose-caption-size, 0.875em);
@@ -422,7 +421,7 @@
422
421
 
423
422
  /* ── Media ──────────────────────────────────────────────────────────── */
424
423
 
425
- [data-ui='prose']
424
+ [data-ui-prose]
426
425
  :where(img, svg, video, canvas):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
427
426
  block-size: auto;
428
427
  border-radius: var(--slotted-prose-media-radius, var(--slotted-radius-md, 6px));
@@ -441,21 +440,21 @@
441
440
  * code starts.
442
441
  */
443
442
 
444
- [data-ui='prose']
443
+ [data-ui-prose]
445
444
  :where(code, kbd, samp, var):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
446
445
  font-family: var(--slotted-font-family-mono, ui-monospace, monospace);
447
446
  /* The mono face runs large beside the sans at the same size. */
448
447
  font-size: var(--slotted-prose-code-size, 0.9em);
449
448
  }
450
449
 
451
- [data-ui='prose'] :where(code):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
450
+ [data-ui-prose] :where(code):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
452
451
  background-color: var(--_ground);
453
452
  border: var(--slotted-border-width-thin, 1px) solid var(--_rule);
454
453
  border-radius: var(--slotted-radius-sm, 4px);
455
454
  padding-inline: var(--slotted-prose-code-inset, 0.3em);
456
455
  }
457
456
 
458
- [data-ui='prose'] :where(kbd):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
457
+ [data-ui-prose] :where(kbd):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
459
458
  background-color: var(--slotted-surface-raised, Canvas);
460
459
  border: var(--slotted-kbd-border-width, var(--slotted-border-width-thin, 1px)) solid
461
460
  var(--slotted-border-strong, ButtonBorder);
@@ -465,7 +464,7 @@
465
464
  padding-inline: var(--slotted-prose-code-inset, 0.3em);
466
465
  }
467
466
 
468
- [data-ui='prose'] :where(pre):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
467
+ [data-ui-prose] :where(pre):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
469
468
  background-color: var(--_ground);
470
469
  /**
471
470
  * A fence reads left to right in a right-to-left document: the order of
@@ -483,7 +482,7 @@
483
482
  }
484
483
 
485
484
  /** A fence is one box, not a box of boxes. */
486
- [data-ui='prose']
485
+ [data-ui-prose]
487
486
  :where(pre)
488
487
  > :where(code):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
489
488
  background-color: transparent;
@@ -502,7 +501,7 @@
502
501
  * so a row appended to a streaming answer restyles nothing above it.
503
502
  */
504
503
 
505
- [data-ui='prose'] :where(table):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
504
+ [data-ui-prose] :where(table):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
506
505
  border-collapse: collapse;
507
506
  inline-size: 100%;
508
507
  text-align: start;
@@ -519,25 +518,25 @@
519
518
  * `min-inline-size` keeps a narrow table filling the column, so wrapping a
520
519
  * table that happens to fit costs nothing.
521
520
  */
522
- [data-ui='prose']
523
- [data-part='scroll']
521
+ [data-ui-prose]
522
+ [data-part-scroll]
524
523
  > :where(table):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
525
524
  inline-size: max-content;
526
525
  min-inline-size: 100%;
527
526
  }
528
527
 
529
- [data-ui='prose'] :where(th, td):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
528
+ [data-ui-prose] :where(th, td):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
530
529
  padding-block: var(--slotted-space-4, 0.5rem);
531
530
  padding-inline: var(--slotted-space-5, 0.75rem);
532
531
  text-align: start;
533
532
  vertical-align: baseline;
534
533
  }
535
534
 
536
- [data-ui='prose'] :where(th):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
535
+ [data-ui-prose] :where(th):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
537
536
  font-weight: var(--slotted-font-weight-semibold, 600);
538
537
  }
539
538
 
540
- [data-ui='prose']
539
+ [data-ui-prose]
541
540
  :where(thead)
542
541
  > :where(tr)
543
542
  > :where(th, td):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
@@ -545,7 +544,7 @@
545
544
  var(--slotted-border-strong, ButtonBorder);
546
545
  }
547
546
 
548
- [data-ui='prose']
547
+ [data-ui-prose]
549
548
  :where(tr + tr)
550
549
  > :where(th, td):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
551
550
  border-block-start: var(--slotted-border-width-thin, 1px) solid var(--_rule);
@@ -553,19 +552,19 @@
553
552
 
554
553
  /* ── Rules and disclosure ───────────────────────────────────────────── */
555
554
 
556
- [data-ui='prose'] :where(hr):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
555
+ [data-ui-prose] :where(hr):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
557
556
  border: 0;
558
557
  border-block-start: var(--slotted-divider-thickness, var(--slotted-border-width-thin, 1px))
559
558
  solid var(--slotted-divider-color, var(--slotted-border-subtle, ButtonBorder));
560
559
  margin-block-start: calc(var(--_flow) * 1.75);
561
560
  }
562
561
 
563
- [data-ui='prose'] :where(summary):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
562
+ [data-ui-prose] :where(summary):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
564
563
  cursor: pointer;
565
564
  font-weight: var(--slotted-font-weight-medium, 500);
566
565
  }
567
566
 
568
- [data-ui='prose']
567
+ [data-ui-prose]
569
568
  :where(summary):not(:where([data-part='exclude'], [data-part='exclude'] *)):focus-visible {
570
569
  outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
571
570
  outline-offset: var(--slotted-prose-focus-ring-offset, 2px);
@@ -579,13 +578,13 @@
579
578
  * several. The selector looks backwards, which is what keeps it stable while
580
579
  * the rest of the document is still arriving.
581
580
  */
582
- [data-ui='prose']
581
+ [data-ui-prose]
583
582
  [data-part='lead']
584
583
  + :not(:where([data-part='exclude'], [data-part='exclude'] *)) {
585
584
  margin-block-start: calc(var(--_flow) * 1.35);
586
585
  }
587
586
 
588
- [data-ui='prose'] [data-part='lead'] {
587
+ [data-ui-prose] [data-part='lead'] {
589
588
  color: var(--_muted);
590
589
  font-size: var(--slotted-prose-lead-size, 1.125em);
591
590
  line-height: var(--slotted-prose-lead-line-height, var(--slotted-line-height-lg, 1.5));
@@ -615,7 +614,7 @@
615
614
  * reason: a no-break space would carry a full word space with it.
616
615
  */
617
616
 
618
- [data-ui='prose'] [data-part='anchor'] {
617
+ [data-ui-prose] [data-part-anchor] {
619
618
  align-items: center;
620
619
  color: var(--_muted);
621
620
  display: inline-flex;
@@ -629,14 +628,12 @@
629
628
  transition: opacity var(--slotted-duration-short) var(--slotted-easing-standard);
630
629
  }
631
630
 
632
- [data-ui='prose']
633
- :where(h1, h2, h3, h4, h5, h6):hover
634
- > [data-part='anchor']:not([data-disabled]),
635
- [data-ui='prose'] [data-part='anchor']:focus-visible {
631
+ [data-ui-prose] :where(h1, h2, h3, h4, h5, h6):hover > [data-part-anchor]:not([data-disabled]),
632
+ [data-ui-prose] [data-part-anchor]:focus-visible {
636
633
  opacity: 1;
637
634
  }
638
635
 
639
- [data-ui='prose'] [data-part='anchor']:focus-visible {
636
+ [data-ui-prose] [data-part-anchor]:focus-visible {
640
637
  border-radius: var(--slotted-radius-sm, 4px);
641
638
  outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
642
639
  outline-offset: var(--slotted-prose-focus-ring-offset, 2px);
@@ -659,7 +656,7 @@
659
656
  * a ring nobody asked for.
660
657
  */
661
658
 
662
- [data-ui='prose'] [data-part='scroll'] {
659
+ [data-ui-prose] [data-part-scroll] {
663
660
  max-inline-size: 100%;
664
661
  /* The page does not scroll sideways because one table is wide. */
665
662
  overflow-x: auto;
@@ -667,14 +664,14 @@
667
664
  overscroll-behavior-inline: contain;
668
665
  }
669
666
 
670
- [data-ui='prose'] [data-part='scroll'][tabindex]:focus-visible {
667
+ [data-ui-prose] [data-part-scroll][tabindex]:focus-visible {
671
668
  outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
672
669
  outline-offset: var(--slotted-prose-focus-ring-offset, 2px);
673
670
  }
674
671
 
675
672
  /* ── Footnotes ──────────────────────────────────────────────────────── */
676
673
 
677
- [data-ui='prose'] [data-part='footnotes'] {
674
+ [data-ui-prose] [data-part='footnotes'] {
678
675
  border-block-start: var(--slotted-border-width-thin, 1px) solid var(--_rule);
679
676
  color: var(--_muted);
680
677
  font-size: var(--slotted-prose-footnotes-size, 0.875em);
@@ -692,7 +689,7 @@
692
689
  * expects, and a component that sets its own overrides all four.
693
690
  */
694
691
 
695
- [data-ui='prose'] [data-part='exclude'] {
692
+ [data-ui-prose] [data-part='exclude'] {
696
693
  font-family: var(--slotted-font-family-sans, ui-sans-serif, system-ui, sans-serif);
697
694
  font-size: var(--slotted-font-size-md, 0.875rem);
698
695
  line-height: var(--slotted-line-height-md, 1.5);
@@ -711,22 +708,21 @@
711
708
 
712
709
  @container slotted-prose (max-width: 34rem) {
713
710
  /* A 2em heading in a 400-pixel column is six words a line. */
714
- [data-ui='prose'] :where(h1):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
711
+ [data-ui-prose] :where(h1):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
715
712
  font-size: var(--slotted-prose-h1-size-narrow, 1.6em);
716
713
  }
717
714
 
718
- [data-ui='prose'] :where(h2):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
715
+ [data-ui-prose] :where(h2):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
719
716
  font-size: var(--slotted-prose-h2-size-narrow, 1.35em);
720
717
  }
721
718
  }
722
719
 
723
720
  @container slotted-prose (max-width: 22rem) {
724
- [data-ui='prose']
725
- :where(blockquote):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
721
+ [data-ui-prose] :where(blockquote):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
726
722
  padding-inline-start: calc(var(--slotted-prose-quote-inset, 1em) / 2);
727
723
  }
728
724
 
729
- [data-ui='prose'] :where(ul, ol):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
725
+ [data-ui-prose] :where(ul, ol):not(:where([data-part='exclude'], [data-part='exclude'] *)) {
730
726
  padding-inline-start: var(--slotted-prose-list-inset-narrow, 1.15em);
731
727
  }
732
728
  }