@slotted/styles 0.1.0-beta.1 → 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
@@ -22,7 +22,7 @@
22
22
  * in, the browser rounded the half to a whole CSS pixel, and the line was
23
23
  * drawn one device pixel off the dot's centre at 100%, 150% and 200%.
24
24
  */
25
- [data-ui='timeline'] {
25
+ [data-ui-timeline] {
26
26
  --_icon: var(--slotted-control-icon-size-md, 16px);
27
27
  --_font-size: var(--slotted-timeline-font-size, var(--slotted-control-font-size-md, 13px));
28
28
  /**
@@ -105,7 +105,7 @@
105
105
  line-height: var(--_leading);
106
106
  }
107
107
 
108
- [data-ui='timeline'][data-size='sm'] {
108
+ [data-ui-timeline][data-size='sm'] {
109
109
  --_icon: var(--slotted-control-icon-size-sm, 14px);
110
110
  --_font-size: var(--slotted-timeline-font-size, var(--slotted-control-font-size-sm, 12px));
111
111
  --_gap: var(
@@ -114,7 +114,7 @@
114
114
  );
115
115
  }
116
116
 
117
- [data-ui='timeline'][data-size='lg'] {
117
+ [data-ui-timeline][data-size='lg'] {
118
118
  --_icon: var(--slotted-control-icon-size-lg, 18px);
119
119
  --_font-size: var(--slotted-timeline-font-size, var(--slotted-control-font-size-lg, 14px));
120
120
  --_gap: var(
@@ -129,11 +129,11 @@
129
129
  * title starts at the same indent. A spinner and the check of a finished
130
130
  * dot are a dot's size and widen nothing.
131
131
  */
132
- [data-ui='timeline']:has([data-part='marker'] > :not([data-ui='spinner'], [data-check])) {
132
+ [data-ui-timeline]:has([data-part-marker] > :not([data-ui-spinner], [data-check])) {
133
133
  --_rail: var(--_badge);
134
134
  }
135
135
 
136
- [data-ui='timeline']:has([data-part='marker'] > [data-ui='avatar']) {
136
+ [data-ui-timeline]:has([data-part-marker] > [data-ui-avatar]) {
137
137
  --_rail: max(var(--_badge), var(--_avatar));
138
138
  }
139
139
 
@@ -144,8 +144,8 @@
144
144
  * item that names its own wins by being nearer.
145
145
  */
146
146
 
147
- [data-ui='timeline'],
148
- [data-ui='timeline'] [data-tone='secondary'] {
147
+ [data-ui-timeline],
148
+ [data-ui-timeline] [data-tone='secondary'] {
149
149
  --_tone-solid: var(--slotted-tone-secondary-solid, ButtonFace);
150
150
  --_tone-on-solid: var(--slotted-tone-secondary-on-solid, ButtonText);
151
151
  --_tone-surface: var(--slotted-tone-secondary-surface, Canvas);
@@ -159,8 +159,8 @@
159
159
  --_tone-mark: var(--slotted-border-strong, GrayText);
160
160
  }
161
161
 
162
- [data-ui='timeline'][data-tone='accent'],
163
- [data-ui='timeline'] [data-tone='accent'] {
162
+ [data-ui-timeline][data-tone='accent'],
163
+ [data-ui-timeline] [data-tone='accent'] {
164
164
  --_tone-solid: var(--slotted-tone-accent-solid, Highlight);
165
165
  --_tone-on-solid: var(--slotted-tone-accent-on-solid, HighlightText);
166
166
  --_tone-surface: var(--slotted-tone-accent-surface, Canvas);
@@ -169,8 +169,8 @@
169
169
  --_tone-text: var(--slotted-tone-accent-text, Highlight);
170
170
  }
171
171
 
172
- [data-ui='timeline'][data-tone='success'],
173
- [data-ui='timeline'] [data-tone='success'] {
172
+ [data-ui-timeline][data-tone='success'],
173
+ [data-ui-timeline] [data-tone='success'] {
174
174
  --_tone-solid: var(--slotted-tone-success-solid, ButtonFace);
175
175
  --_tone-on-solid: var(--slotted-tone-success-on-solid, ButtonText);
176
176
  --_tone-surface: var(--slotted-tone-success-surface, Canvas);
@@ -179,8 +179,18 @@
179
179
  --_tone-text: var(--slotted-tone-success-text, CanvasText);
180
180
  }
181
181
 
182
- [data-ui='timeline'][data-tone='warning'],
183
- [data-ui='timeline'] [data-tone='warning'] {
182
+ [data-ui-timeline][data-tone='info'],
183
+ [data-ui-timeline] [data-tone='info'] {
184
+ --_tone-solid: var(--slotted-tone-info-solid, ButtonFace);
185
+ --_tone-on-solid: var(--slotted-tone-info-on-solid, ButtonText);
186
+ --_tone-surface: var(--slotted-tone-info-surface, Canvas);
187
+ --_tone-border: var(--slotted-tone-info-border, ButtonBorder);
188
+ --_tone-mark: var(--slotted-tone-info-border, ButtonBorder);
189
+ --_tone-text: var(--slotted-tone-info-text, CanvasText);
190
+ }
191
+
192
+ [data-ui-timeline][data-tone='warning'],
193
+ [data-ui-timeline] [data-tone='warning'] {
184
194
  --_tone-solid: var(--slotted-tone-warning-solid, ButtonFace);
185
195
  --_tone-on-solid: var(--slotted-tone-warning-on-solid, ButtonText);
186
196
  --_tone-surface: var(--slotted-tone-warning-surface, Canvas);
@@ -189,8 +199,8 @@
189
199
  --_tone-text: var(--slotted-tone-warning-text, CanvasText);
190
200
  }
191
201
 
192
- [data-ui='timeline'][data-tone='danger'],
193
- [data-ui='timeline'] [data-tone='danger'] {
202
+ [data-ui-timeline][data-tone='danger'],
203
+ [data-ui-timeline] [data-tone='danger'] {
194
204
  --_tone-solid: var(--slotted-tone-danger-solid, Mark);
195
205
  --_tone-on-solid: var(--slotted-tone-danger-on-solid, MarkText);
196
206
  --_tone-surface: var(--slotted-tone-danger-surface, Canvas);
@@ -206,7 +216,7 @@
206
216
  * like. A group nests a second list of the same kind.
207
217
  */
208
218
 
209
- [data-ui='timeline'] :is([data-part='list'], [data-part='group-list']) {
219
+ [data-ui-timeline] :is([data-part-list], [data-part-group-list]) {
210
220
  display: flex;
211
221
  flex-direction: column;
212
222
  list-style: none;
@@ -219,7 +229,7 @@
219
229
  * read from the list rather than declared, so a consumer who writes the part
220
230
  * on one event gets the column on every event and the titles keep lining up.
221
231
  */
222
- [data-ui='timeline'] [data-part='list']:has([data-part='opposite']) {
232
+ [data-ui-timeline] [data-part-list]:has([data-part-opposite]) {
223
233
  --_opposite-column: var(--_opposite);
224
234
  }
225
235
 
@@ -231,7 +241,7 @@
231
241
  * title still sits on the title's first line.
232
242
  */
233
243
 
234
- [data-ui='timeline'] [data-part='item'] {
244
+ [data-ui-timeline] [data-part-item] {
235
245
  align-items: stretch;
236
246
  column-gap: var(--_gap);
237
247
  display: grid;
@@ -242,9 +252,7 @@
242
252
  position: relative;
243
253
  }
244
254
 
245
- [data-ui='timeline']
246
- :where([data-part='list']:not(:has([data-part='opposite'])))
247
- [data-part='item'] {
255
+ [data-ui-timeline] :where([data-part-list]:not(:has([data-part-opposite]))) [data-part-item] {
248
256
  grid-template-columns: [rail] var(--_rail) [content] minmax(0, 1fr);
249
257
  }
250
258
 
@@ -253,15 +261,15 @@
253
261
  * around an article wraps the event and not the air under it; the connector
254
262
  * runs on through the margin to the next marker.
255
263
  */
256
- [data-ui='timeline'] [data-part='item'] {
264
+ [data-ui-timeline] [data-part-item] {
257
265
  margin-block-end: var(--_item-gap);
258
266
  }
259
267
 
260
- [data-ui='timeline'] [data-part='item']:last-child {
268
+ [data-ui-timeline] [data-part-item]:last-child {
261
269
  margin-block-end: 0;
262
270
  }
263
271
 
264
- [data-ui='timeline'] [data-part='content'] {
272
+ [data-ui-timeline] [data-part-content] {
265
273
  align-self: baseline;
266
274
  grid-column: content;
267
275
  /**
@@ -273,7 +281,7 @@
273
281
  min-inline-size: 0;
274
282
  }
275
283
 
276
- [data-ui='timeline'] [data-part='opposite'] {
284
+ [data-ui-timeline] [data-part-opposite] {
277
285
  align-self: baseline;
278
286
  color: var(--_muted);
279
287
  grid-column: opposite;
@@ -291,7 +299,7 @@
291
299
  * connector starts and ends — whatever size the marker is.
292
300
  */
293
301
 
294
- [data-ui='timeline'] [data-part='rail'] {
302
+ [data-ui-timeline] [data-part-rail] {
295
303
  align-items: center;
296
304
  display: flex;
297
305
  flex-direction: column;
@@ -315,7 +323,7 @@
315
323
  * and a core laid over it at a whole-pixel inset. There is no smaller box
316
324
  * centred by arithmetic, so the core lands where the ring does.
317
325
  */
318
- [data-ui='timeline'] [data-part='marker'] {
326
+ [data-ui-timeline] [data-part-marker] {
319
327
  --_marker: var(--_dot);
320
328
  /**
321
329
  * Rounded to a whole pixel: a line of 19.5 put a 13-pixel dot at a
@@ -355,7 +363,7 @@
355
363
  * pixels, since the dot and the core differ by an even number. A finished
356
364
  * dot holds its check instead, so it is not empty and draws no core.
357
365
  */
358
- [data-ui='timeline'] [data-part='marker']:empty::after {
366
+ [data-ui-timeline] [data-part-marker]:empty::after {
359
367
  background-color: var(--_tone-mark);
360
368
  border-radius: inherit;
361
369
  content: '';
@@ -377,8 +385,7 @@
377
385
  * the marker stays a dot, and every rule a dot takes names it beside
378
386
  * `:empty`.
379
387
  */
380
- [data-ui='timeline']
381
- [data-part='marker']:not(:empty, :has(> [data-ui='spinner'], > [data-check])) {
388
+ [data-ui-timeline] [data-part-marker]:not(:empty, :has(> [data-ui-spinner], > [data-check])) {
382
389
  --_marker: var(--_badge);
383
390
 
384
391
  background-color: var(--_surface);
@@ -386,7 +393,7 @@
386
393
  border-width: var(--slotted-border-width-thin, 1px);
387
394
  }
388
395
 
389
- [data-ui='timeline'] [data-part='marker'] > [data-ui='icon'] {
396
+ [data-ui-timeline] [data-part-marker] > [data-ui-icon] {
390
397
  --slotted-icon-size: calc(
391
398
  var(--_badge) - 2 * round(down, (var(--_badge) - var(--_glyph)) / 2, 1px)
392
399
  );
@@ -395,17 +402,17 @@
395
402
  }
396
403
 
397
404
  /* A spinner is a dot: the same box, and the same size as the glyph in a badge. */
398
- [data-ui='timeline'] [data-part='marker'] > [data-ui='spinner'] {
405
+ [data-ui-timeline] [data-part-marker] > [data-ui-spinner] {
399
406
  --slotted-spinner-size: var(--_dot);
400
407
 
401
408
  color: inherit;
402
409
  }
403
410
 
404
- [data-ui='timeline'] [data-part='marker'] > [data-ui='avatar'] {
411
+ [data-ui-timeline] [data-part-marker] > [data-ui-avatar] {
405
412
  --slotted-avatar-size: var(--_avatar);
406
413
  }
407
414
 
408
- [data-ui='timeline'] [data-part='marker']:has(> [data-ui='avatar']) {
415
+ [data-ui-timeline] [data-part-marker]:has(> [data-ui-avatar]) {
409
416
  --_marker: var(--_avatar);
410
417
 
411
418
  background-color: transparent;
@@ -422,22 +429,18 @@
422
429
  * the core alone, threaded on the line, or the bare glyph over it.
423
430
  */
424
431
 
425
- [data-ui='timeline']
426
- [data-variant='outline']
427
- [data-part='marker']:is(:empty, :has(> [data-check])) {
432
+ [data-ui-timeline] [data-variant='outline'] [data-part-marker]:is(:empty, :has(> [data-check])) {
428
433
  background-color: var(--_surface);
429
434
  border-color: var(--_tone-mark);
430
435
  border-width: var(--_edge);
431
436
  }
432
437
 
433
- [data-ui='timeline'] [data-variant='outline'] [data-part='marker']:empty::after,
434
- [data-ui='timeline'] [data-variant='solid'] [data-part='marker']:empty::after {
438
+ [data-ui-timeline] [data-variant='outline'] [data-part-marker]:empty::after,
439
+ [data-ui-timeline] [data-variant='solid'] [data-part-marker]:empty::after {
435
440
  content: none;
436
441
  }
437
442
 
438
- [data-ui='timeline']
439
- [data-variant='solid']
440
- [data-part='marker']:is(:empty, :has(> [data-check])) {
443
+ [data-ui-timeline] [data-variant='solid'] [data-part-marker]:is(:empty, :has(> [data-check])) {
441
444
  background-color: var(--_tone-mark);
442
445
  /* A border as wide as the radius, so forced colours, which drop the ground, keep the disc. */
443
446
  border-color: var(--_tone-mark);
@@ -445,45 +448,39 @@
445
448
  }
446
449
 
447
450
  /* The core alone, on the line: the ground and the halo give way so the line runs into it. */
448
- [data-ui='timeline']
449
- [data-variant='plain']
450
- [data-part='marker']:is(:empty, :has(> [data-check])) {
451
+ [data-ui-timeline] [data-variant='plain'] [data-part-marker]:is(:empty, :has(> [data-check])) {
451
452
  background-color: transparent;
452
453
  box-shadow: none;
453
454
  }
454
455
 
455
456
  /* The glyph of a hairline or frameless badge is drawn in the dot's own ink. */
456
- [data-ui='timeline']
457
- [data-variant='outline']
458
- [data-part='marker']:not(:empty, :has(> [data-check])) {
457
+ [data-ui-timeline] [data-variant='outline'] [data-part-marker]:not(:empty, :has(> [data-check])) {
459
458
  color: var(--_tone-mark);
460
459
  }
461
460
 
462
- [data-ui='timeline']
461
+ [data-ui-timeline]
463
462
  [data-variant='outline'][data-tone]:not([data-tone='secondary'])
464
- [data-part='marker']:not(:empty, :has(> [data-ui='spinner'], > [data-check])) {
463
+ [data-part-marker]:not(:empty, :has(> [data-ui-spinner], > [data-check])) {
465
464
  border-color: var(--_tone-border);
466
465
  }
467
466
 
468
- [data-ui='timeline']
467
+ [data-ui-timeline]
469
468
  [data-variant='solid']
470
- [data-part='marker']:not(:empty, :has(> [data-ui='spinner'], > [data-check])) {
469
+ [data-part-marker]:not(:empty, :has(> [data-ui-spinner], > [data-check])) {
471
470
  background-color: var(--_tone-solid);
472
471
  border-color: var(--_tone-solid);
473
472
  color: var(--_tone-on-solid);
474
473
  }
475
474
 
476
- [data-ui='timeline']
475
+ [data-ui-timeline]
477
476
  [data-variant='subtle']
478
- [data-part='marker']:not(:empty, :has(> [data-ui='spinner'], > [data-check])) {
477
+ [data-part-marker]:not(:empty, :has(> [data-ui-spinner], > [data-check])) {
479
478
  background-color: var(--_tone-surface);
480
479
  border-color: var(--_tone-border);
481
480
  color: var(--_tone-text);
482
481
  }
483
482
 
484
- [data-ui='timeline']
485
- [data-variant='plain']
486
- [data-part='marker']:not(:empty, :has(> [data-check])) {
483
+ [data-ui-timeline] [data-variant='plain'] [data-part-marker]:not(:empty, :has(> [data-check])) {
487
484
  background-color: var(--_surface);
488
485
  border-color: transparent;
489
486
  color: var(--_tone-mark);
@@ -507,20 +504,18 @@
507
504
  * radius: that border would leave the check no box to stand in. Forced
508
505
  * colours keep the ground through the block at the end.
509
506
  */
510
- [data-ui='timeline']
511
- [data-complete]:not([data-current])
512
- [data-part='marker']:has(> [data-check]) {
507
+ [data-ui-timeline] [data-complete]:not([data-current]) [data-part-marker]:has(> [data-check]) {
513
508
  background-color: var(--_tone-mark);
514
509
  border-width: 0;
515
510
  }
516
511
 
517
- [data-ui='timeline'] [data-current] [data-part='marker']:empty {
512
+ [data-ui-timeline] [data-current] [data-part-marker]:empty {
518
513
  background-color: var(--_tone-mark);
519
514
  border-color: var(--_tone-mark);
520
515
  border-width: calc(var(--_marker) / 2);
521
516
  }
522
517
 
523
- [data-ui='timeline'] [data-current] [data-part='marker']:empty::after {
518
+ [data-ui-timeline] [data-current] [data-part-marker]:empty::after {
524
519
  content: none;
525
520
  }
526
521
 
@@ -529,25 +524,25 @@
529
524
  * reads in every tone and scheme without a token of its own; it is the
530
525
  * dot less a step a side, the same air a badge gives its glyph.
531
526
  */
532
- [data-ui='timeline'] [data-part='marker'] > [data-ui='icon'][data-check] {
527
+ [data-ui-timeline] [data-part-marker] > [data-ui-icon][data-check] {
533
528
  --slotted-icon-size: calc(var(--_marker) - 2 * var(--slotted-space-1, 0.125rem));
534
529
 
535
530
  color: var(--_surface);
536
531
  }
537
532
 
538
- [data-ui='timeline'] [data-current] [data-part='marker'] {
533
+ [data-ui-timeline] [data-current] [data-part-marker] {
539
534
  box-shadow:
540
535
  0 0 0 var(--slotted-border-width-thick, 2px) var(--_surface),
541
536
  0 0 0 var(--_reach) var(--_tone-mark),
542
537
  0 0 0 calc(var(--_reach) + var(--_line-gap)) var(--_surface);
543
538
  }
544
539
 
545
- [data-ui='timeline']
540
+ [data-ui-timeline]
546
541
  [data-complete]:not([data-current])
547
- [data-part='marker']:not(:empty, :has(> [data-ui='spinner'], > [data-check])),
548
- [data-ui='timeline']
542
+ [data-part-marker]:not(:empty, :has(> [data-ui-spinner], > [data-check])),
543
+ [data-ui-timeline]
549
544
  [data-current]
550
- [data-part='marker']:not(:empty, :has(> [data-ui='spinner'], > [data-check])) {
545
+ [data-part-marker]:not(:empty, :has(> [data-ui-spinner], > [data-check])) {
551
546
  background-color: var(--_tone-solid);
552
547
  border-color: var(--_tone-solid);
553
548
  color: var(--_tone-on-solid);
@@ -558,14 +553,14 @@
558
553
  * for every family that waits — standing bare on the ground, the size of a
559
554
  * dot, in the tone's ink.
560
555
  */
561
- [data-ui='timeline'] [data-loading][data-variant] [data-part='marker'] {
556
+ [data-ui-timeline] [data-loading][data-variant] [data-part-marker] {
562
557
  background-color: var(--_surface);
563
558
  border-color: transparent;
564
559
  box-shadow: 0 0 0 var(--_line-gap) var(--_surface);
565
560
  color: var(--_tone-mark);
566
561
  }
567
562
 
568
- [data-ui='timeline'] [data-loading] > [data-part='content'] {
563
+ [data-ui-timeline] [data-loading] > [data-part-content] {
569
564
  color: var(--_muted);
570
565
  }
571
566
 
@@ -579,7 +574,7 @@
579
574
  * none, because there is nothing after it.
580
575
  */
581
576
 
582
- [data-ui='timeline'] [data-part='connector'] {
577
+ [data-ui-timeline] [data-part-connector] {
583
578
  /* Both edges named, so the dashed style below reaches only the one drawn. */
584
579
  border-block-start: 0 solid var(--_line);
585
580
  border-inline-start: var(--_rule) solid var(--_line);
@@ -593,13 +588,13 @@
593
588
  var(--slotted-control-transition-easing);
594
589
  }
595
590
 
596
- [data-ui='timeline'] [data-connector='dashed'] [data-part='connector'] {
591
+ [data-ui-timeline] [data-connector='dashed'] [data-part-connector] {
597
592
  border-block-start-style: dashed;
598
593
  border-inline-start-style: dashed;
599
594
  }
600
595
 
601
- [data-ui='timeline'] [data-connector='none'] [data-part='connector'],
602
- [data-ui='timeline'] [data-part='item']:last-child [data-part='connector'] {
596
+ [data-ui-timeline] [data-connector='none'] [data-part-connector],
597
+ [data-ui-timeline] [data-part-item]:last-child [data-part-connector] {
603
598
  display: none;
604
599
  }
605
600
 
@@ -607,7 +602,7 @@
607
602
  * The line after a finished event is painted in its tone, so a tracking
608
603
  * timeline reads as a filled track up to where the reader is.
609
604
  */
610
- [data-ui='timeline'] [data-complete] [data-part='connector'] {
605
+ [data-ui-timeline] [data-complete] [data-part-connector] {
611
606
  border-color: var(--_tone-mark);
612
607
  }
613
608
 
@@ -625,7 +620,7 @@
625
620
  * under.
626
621
  */
627
622
 
628
- [data-ui='timeline'] [data-part='content'] {
623
+ [data-ui-timeline] [data-part-content] {
629
624
  /**
630
625
  * No column gap: the timestamp carries the distance itself, so a body
631
626
  * with no timestamp has no empty column and no gap beside it.
@@ -638,15 +633,15 @@
638
633
  row-gap: 0;
639
634
  }
640
635
 
641
- [data-ui='timeline'] [data-part='content'] > :not([data-part='title'], [data-part='time']) {
636
+ [data-ui-timeline] [data-part-content] > :not([data-part-title], [data-part-time]) {
642
637
  grid-column: 1 / -1;
643
638
  }
644
639
 
645
- [data-ui='timeline'] [data-part='content'] > :is([data-part='actor'], [data-part='description']) {
640
+ [data-ui-timeline] [data-part-content] > :is([data-part-actor], [data-part-description]) {
646
641
  margin-block-start: var(--slotted-timeline-content-gap, var(--slotted-space-2, 0.25rem));
647
642
  }
648
643
 
649
- [data-ui='timeline'] [data-part='title'] {
644
+ [data-ui-timeline] [data-part-title] {
650
645
  color: var(--_strong);
651
646
  font-weight: var(--slotted-timeline-title-weight, var(--slotted-font-weight-medium, 500));
652
647
  grid-column: 1;
@@ -654,20 +649,20 @@
654
649
  overflow-wrap: anywhere;
655
650
  }
656
651
 
657
- [data-ui='timeline'] [data-part='content'] > [data-part='time'] {
652
+ [data-ui-timeline] [data-part-content] > [data-part-time] {
658
653
  grid-column: 2;
659
654
  grid-row: 1;
660
655
  margin-inline-start: var(--_gap);
661
656
  }
662
657
 
663
- [data-ui='timeline'] [data-part='time'] {
658
+ [data-ui-timeline] [data-part-time] {
664
659
  color: var(--_muted);
665
660
  font-size: var(--slotted-timeline-time-font-size, var(--slotted-font-size-xs, 0.75rem));
666
661
  font-variant-numeric: tabular-nums;
667
662
  white-space: nowrap;
668
663
  }
669
664
 
670
- [data-ui='timeline'] [data-part='actor'] {
665
+ [data-ui-timeline] [data-part-actor] {
671
666
  align-items: center;
672
667
  color: var(--_muted);
673
668
  column-gap: var(--slotted-space-3, 0.375rem);
@@ -676,14 +671,14 @@
676
671
  min-inline-size: 0;
677
672
  }
678
673
 
679
- [data-ui='timeline'] [data-part='description'] {
674
+ [data-ui-timeline] [data-part-description] {
680
675
  color: var(--_muted);
681
676
  font-size: var(--_meta-size);
682
677
  min-inline-size: 0;
683
678
  overflow-wrap: anywhere;
684
679
  }
685
680
 
686
- [data-ui='timeline'] [data-part='actions'] {
681
+ [data-ui-timeline] [data-part-actions] {
687
682
  column-gap: var(--_gap);
688
683
  display: flex;
689
684
  flex-wrap: wrap;
@@ -698,7 +693,7 @@
698
693
  * theme states, around the whole row rather than around the words.
699
694
  */
700
695
 
701
- [data-ui='timeline'] [data-part='item'][tabindex]:focus-visible {
696
+ [data-ui-timeline] [data-part-item][tabindex]:focus-visible {
702
697
  border-radius: var(--slotted-timeline-radius, var(--slotted-control-radius, 4px));
703
698
  outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
704
699
  outline-offset: var(--slotted-focus-ring-offset, 2px);
@@ -711,11 +706,11 @@
711
706
  * track that ran into it would say the opposite.
712
707
  */
713
708
 
714
- [data-ui='timeline'] [data-part='group'] {
709
+ [data-ui-timeline] [data-part-group] {
715
710
  display: block;
716
711
  }
717
712
 
718
- [data-ui='timeline'] [data-part='group'] + [data-part='group'] {
713
+ [data-ui-timeline] [data-part-group] + [data-part-group] {
719
714
  margin-block-start: var(--_item-gap);
720
715
  }
721
716
 
@@ -724,7 +719,7 @@
724
719
  * trigger on the heading's baseline added the font's descent under its
725
720
  * 24 pixels, and the heading measured 26.5.
726
721
  */
727
- [data-ui='timeline'] [data-part='group-label'] {
722
+ [data-ui-timeline] [data-part-group-label] {
728
723
  align-items: center;
729
724
  color: var(--_muted);
730
725
  display: flex;
@@ -734,7 +729,7 @@
734
729
  margin: 0 0 var(--slotted-timeline-group-gap, var(--slotted-space-4, 0.5rem));
735
730
  }
736
731
 
737
- [data-ui='timeline'] [data-part='group-trigger'] {
732
+ [data-ui-timeline] [data-part-group-trigger] {
738
733
  align-items: center;
739
734
  appearance: none;
740
735
  background: none;
@@ -754,7 +749,7 @@
754
749
  translate var(--slotted-duration-instant) var(--slotted-control-transition-easing);
755
750
  }
756
751
 
757
- [data-ui='timeline'] [data-part='group-trigger']:enabled:hover {
752
+ [data-ui-timeline] [data-part-group-trigger]:enabled:hover {
758
753
  color: var(--_strong);
759
754
  }
760
755
 
@@ -763,12 +758,12 @@
763
758
  * strongest ink, so a press answers in place: the label settles by a
764
759
  * hairline, the press `button` draws on a solid fill.
765
760
  */
766
- [data-ui='timeline'] [data-part='group-trigger']:enabled:active {
761
+ [data-ui-timeline] [data-part-group-trigger]:enabled:active {
767
762
  color: var(--_strong);
768
763
  translate: 0 var(--slotted-border-width-thin, 1px);
769
764
  }
770
765
 
771
- [data-ui='timeline'] [data-part='group-trigger']:focus-visible {
766
+ [data-ui-timeline] [data-part-group-trigger]:focus-visible {
772
767
  outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
773
768
  outline-offset: var(--slotted-focus-ring-offset, 2px);
774
769
  }
@@ -778,7 +773,7 @@
778
773
  * that rotates between down and up is the same mark in every direction. The
779
774
  * part sizes the icon box and the box turns.
780
775
  */
781
- [data-ui='timeline'] [data-part='group-indicator'] {
776
+ [data-ui-timeline] [data-part-group-indicator] {
782
777
  --slotted-icon-size: var(--_icon);
783
778
 
784
779
  display: inline-flex;
@@ -793,21 +788,21 @@
793
788
  * one frame, the exiting curve held the list at 0.9 for the first fifty-five milliseconds
794
789
  * after the press, and the chevron finished seventy milliseconds after the list had gone.
795
790
  */
796
- [data-ui='timeline'] [data-part='group'] {
791
+ [data-ui-timeline] [data-part-group] {
797
792
  --_fold: var(--slotted-duration-medium)
798
793
  var(--slotted-control-transition-easing, var(--slotted-easing-standard));
799
794
  }
800
795
 
801
- [data-ui='timeline'] [data-part='group-indicator'] > [data-ui='icon'] {
796
+ [data-ui-timeline] [data-part-group-indicator] > [data-ui-icon] {
802
797
  rotate: -90deg;
803
798
  transition: rotate var(--_fold);
804
799
  }
805
800
 
806
- [data-ui='timeline']
801
+ [data-ui-timeline]
807
802
  [data-open]
808
- > [data-part='group-label']
809
- [data-part='group-indicator']
810
- > [data-ui='icon'] {
803
+ > [data-part-group-label]
804
+ [data-part-group-indicator]
805
+ > [data-ui-icon] {
811
806
  rotate: 0deg;
812
807
  }
813
808
 
@@ -821,7 +816,7 @@
821
816
  * opening. The clip margin keeps the current marker's ring and a focus
822
817
  * ring at the list's edge whole.
823
818
  */
824
- [data-ui='timeline'] [data-part='group-list'] {
819
+ [data-ui-timeline] [data-part-group-list] {
825
820
  interpolate-size: allow-keywords;
826
821
  opacity: 1;
827
822
  overflow: clip;
@@ -835,7 +830,7 @@
835
830
  visibility var(--_fold);
836
831
  }
837
832
 
838
- [data-ui='timeline'] [data-part='group-list'][hidden] {
833
+ [data-ui-timeline] [data-part-group-list][hidden] {
839
834
  block-size: 0;
840
835
  display: flex;
841
836
  opacity: 0;
@@ -843,11 +838,11 @@
843
838
  }
844
839
 
845
840
  /* A folded group ends at its heading; the distance to the next is the group's own. */
846
- [data-ui='timeline'] [data-part='group-label'] {
841
+ [data-ui-timeline] [data-part-group-label] {
847
842
  transition: margin-block-end var(--_fold);
848
843
  }
849
844
 
850
- [data-ui='timeline'] [data-part='group-label']:has(+ [data-part='group-list'][hidden]) {
845
+ [data-ui-timeline] [data-part-group-label]:has(+ [data-part-group-list][hidden]) {
851
846
  margin-block-end: 0;
852
847
  }
853
848
 
@@ -858,8 +853,8 @@
858
853
  * been loaded; `empty` is the list with nothing in it yet.
859
854
  */
860
855
 
861
- [data-ui='timeline'] [data-part='fresh'],
862
- [data-ui='timeline'] button[data-part='more'] {
856
+ [data-ui-timeline] [data-part-fresh],
857
+ [data-ui-timeline] button[data-part-more] {
863
858
  align-items: center;
864
859
  appearance: none;
865
860
  background-color: var(--_surface);
@@ -886,7 +881,7 @@
886
881
  color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing);
887
882
  }
888
883
 
889
- [data-ui='timeline'] [data-part='fresh'] {
884
+ [data-ui-timeline] [data-part-fresh] {
890
885
  --_tone-solid: var(--slotted-tone-accent-solid, Highlight);
891
886
  --_tone-surface: var(--slotted-tone-accent-surface, Canvas);
892
887
  --_tone-border: var(--slotted-tone-accent-border, Highlight);
@@ -928,7 +923,7 @@
928
923
  * (`text-scale.test.mjs`).
929
924
  */
930
925
  @starting-style {
931
- [data-ui='timeline'] [data-part='fresh']:not([hidden]) {
926
+ [data-ui-timeline] [data-part-fresh]:not([hidden]) {
932
927
  block-size: 0;
933
928
  border-block-width: 0;
934
929
  margin-block-end: 0;
@@ -937,7 +932,7 @@
937
932
  }
938
933
  }
939
934
 
940
- [data-ui='timeline'] [data-part='fresh'][hidden] {
935
+ [data-ui-timeline] [data-part-fresh][hidden] {
941
936
  block-size: 0;
942
937
  border-block-width: 0;
943
938
  display: none;
@@ -954,7 +949,7 @@
954
949
  * on — `subtle-hover` lightened it toward the page in the light scheme, and
955
950
  * matched the page in the dark one, and `subtle-active` was the rest colour.
956
951
  */
957
- [data-ui='timeline'] [data-part='fresh']:enabled:hover {
952
+ [data-ui-timeline] [data-part-fresh]:enabled:hover {
958
953
  background-color: color-mix(
959
954
  in oklab,
960
955
  var(--_tone-surface),
@@ -962,7 +957,7 @@
962
957
  );
963
958
  }
964
959
 
965
- [data-ui='timeline'] [data-part='fresh']:enabled:active {
960
+ [data-ui-timeline] [data-part-fresh]:enabled:active {
966
961
  background-color: color-mix(
967
962
  in oklab,
968
963
  var(--_tone-surface),
@@ -970,21 +965,21 @@
970
965
  );
971
966
  }
972
967
 
973
- [data-ui='timeline'] button[data-part='more']:enabled:hover {
968
+ [data-ui-timeline] button[data-part-more]:enabled:hover {
974
969
  background-color: var(--slotted-tone-secondary-subtle-hover, Canvas);
975
970
  }
976
971
 
977
- [data-ui='timeline'] button[data-part='more']:enabled:active {
972
+ [data-ui-timeline] button[data-part-more]:enabled:active {
978
973
  background-color: var(--slotted-tone-secondary-subtle-active, Canvas);
979
974
  }
980
975
 
981
976
  /* A press lands at once, as a `button` does; the release eases back. */
982
- [data-ui='timeline'] :is([data-part='fresh'], button[data-part='more']):enabled:active {
977
+ [data-ui-timeline] :is([data-part-fresh], button[data-part-more]):enabled:active {
983
978
  transition-duration: var(--slotted-duration-instant);
984
979
  }
985
980
 
986
- [data-ui='timeline'] [data-part='fresh']:focus-visible,
987
- [data-ui='timeline'] button[data-part='more']:focus-visible {
981
+ [data-ui-timeline] [data-part-fresh]:focus-visible,
982
+ [data-ui-timeline] button[data-part-more]:focus-visible {
988
983
  outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
989
984
  outline-offset: var(--slotted-focus-ring-offset, 2px);
990
985
  }
@@ -993,16 +988,16 @@
993
988
  * The end of the loaded list, in the body's own column so it reads as the
994
989
  * next event's place rather than as a footer.
995
990
  */
996
- [data-ui='timeline'] [data-part='more'] {
991
+ [data-ui-timeline] [data-part-more] {
997
992
  margin-block-start: var(--_item-gap);
998
993
  margin-inline-start: calc(var(--_opposite-column, 0px) + var(--_rail) + var(--_gap));
999
994
  }
1000
995
 
1001
- [data-ui='timeline'] [data-part='list']:has([data-part='opposite']) ~ [data-part='more'] {
996
+ [data-ui-timeline] [data-part-list]:has([data-part-opposite]) ~ [data-part-more] {
1002
997
  margin-inline-start: calc(var(--_opposite) + var(--_rail) + 2 * var(--_gap));
1003
998
  }
1004
999
 
1005
- [data-ui='timeline'] div[data-part='more'] {
1000
+ [data-ui-timeline] div[data-part-more] {
1006
1001
  align-items: center;
1007
1002
  color: var(--_muted);
1008
1003
  column-gap: var(--_gap);
@@ -1011,11 +1006,11 @@
1011
1006
  min-block-size: var(--slotted-control-height-sm, 30px);
1012
1007
  }
1013
1008
 
1014
- [data-ui='timeline'] [data-part='more'] > [data-ui='spinner'] {
1009
+ [data-ui-timeline] [data-part-more] > [data-ui-spinner] {
1015
1010
  --slotted-spinner-size: var(--_icon);
1016
1011
  }
1017
1012
 
1018
- [data-ui='timeline'] [data-part='empty'] {
1013
+ [data-ui-timeline] [data-part-empty] {
1019
1014
  color: var(--_muted);
1020
1015
  padding-block: var(--_item-gap);
1021
1016
  text-align: center;
@@ -1029,45 +1024,45 @@
1029
1024
  * document `start` is the same timeline mirrored.
1030
1025
  */
1031
1026
 
1032
- [data-ui='timeline'][data-placement='start'] [data-part='item'] {
1027
+ [data-ui-timeline][data-placement='start'] [data-part-item] {
1033
1028
  grid-template-columns:
1034
1029
  [content] minmax(0, 1fr)
1035
1030
  [rail] var(--_rail)
1036
1031
  [opposite] var(--_opposite-column, 0);
1037
1032
  }
1038
1033
 
1039
- [data-ui='timeline'][data-placement='start']
1040
- :where([data-part='list']:not(:has([data-part='opposite'])))
1041
- [data-part='item'] {
1034
+ [data-ui-timeline][data-placement='start']
1035
+ :where([data-part-list]:not(:has([data-part-opposite])))
1036
+ [data-part-item] {
1042
1037
  grid-template-columns: [content] minmax(0, 1fr) [rail] var(--_rail);
1043
1038
  }
1044
1039
 
1045
- [data-ui='timeline'][data-placement='start'] [data-part='content'] {
1040
+ [data-ui-timeline][data-placement='start'] [data-part-content] {
1046
1041
  text-align: end;
1047
1042
  }
1048
1043
 
1049
- [data-ui='timeline'][data-placement='start'] [data-part='content'] {
1044
+ [data-ui-timeline][data-placement='start'] [data-part-content] {
1050
1045
  grid-template-columns: auto minmax(0, 1fr);
1051
1046
  }
1052
1047
 
1053
- [data-ui='timeline'][data-placement='start'] [data-part='content'] > [data-part='title'] {
1048
+ [data-ui-timeline][data-placement='start'] [data-part-content] > [data-part-title] {
1054
1049
  grid-column: 2;
1055
1050
  }
1056
1051
 
1057
- [data-ui='timeline'][data-placement='start'] [data-part='content'] > [data-part='time'] {
1052
+ [data-ui-timeline][data-placement='start'] [data-part-content] > [data-part-time] {
1058
1053
  grid-column: 1;
1059
1054
  margin-inline: 0 var(--_gap);
1060
1055
  }
1061
1056
 
1062
- [data-ui='timeline'][data-placement='start'] :is([data-part='actor'], [data-part='actions']) {
1057
+ [data-ui-timeline][data-placement='start'] :is([data-part-actor], [data-part-actions]) {
1063
1058
  justify-content: flex-end;
1064
1059
  }
1065
1060
 
1066
- [data-ui='timeline'][data-placement='start'] [data-part='opposite'] {
1061
+ [data-ui-timeline][data-placement='start'] [data-part-opposite] {
1067
1062
  text-align: start;
1068
1063
  }
1069
1064
 
1070
- [data-ui='timeline'][data-placement='start'] [data-part='more'] {
1065
+ [data-ui-timeline][data-placement='start'] [data-part-more] {
1071
1066
  margin-inline-start: 0;
1072
1067
  }
1073
1068
 
@@ -1076,18 +1071,18 @@
1076
1071
  * rest: two equal fractions of an odd remainder put the rail, and every
1077
1072
  * marker on it, at half a pixel.
1078
1073
  */
1079
- [data-ui='timeline'][data-placement='alternate'] [data-part='item'] {
1074
+ [data-ui-timeline][data-placement='alternate'] [data-part-item] {
1080
1075
  grid-template-columns:
1081
1076
  [before] round(down, calc((100% - var(--_rail)) / 2 - var(--_gap)), 1px)
1082
1077
  [rail] var(--_rail)
1083
1078
  [after] minmax(0, 1fr);
1084
1079
  }
1085
1080
 
1086
- [data-ui='timeline'][data-placement='alternate'] [data-part='content'] {
1081
+ [data-ui-timeline][data-placement='alternate'] [data-part-content] {
1087
1082
  grid-column: after;
1088
1083
  }
1089
1084
 
1090
- [data-ui='timeline'][data-placement='alternate'] [data-part='opposite'] {
1085
+ [data-ui-timeline][data-placement='alternate'] [data-part-opposite] {
1091
1086
  grid-column: before;
1092
1087
  }
1093
1088
 
@@ -1095,72 +1090,72 @@
1095
1090
  * Even rows swap sides. Parity is read from the list rather than written by
1096
1091
  * a binding, and an item that names its own side wins.
1097
1092
  */
1098
- [data-ui='timeline'][data-placement='alternate']
1099
- [data-part='item']:nth-child(even)
1100
- [data-part='content'],
1101
- [data-ui='timeline'][data-placement='alternate'] [data-side='start'] [data-part='content'] {
1093
+ [data-ui-timeline][data-placement='alternate']
1094
+ [data-part-item]:nth-child(even)
1095
+ [data-part-content],
1096
+ [data-ui-timeline][data-placement='alternate'] [data-side='start'] [data-part-content] {
1102
1097
  grid-column: before;
1103
1098
  text-align: end;
1104
1099
  }
1105
1100
 
1106
- [data-ui='timeline'][data-placement='alternate']
1107
- [data-part='item']:nth-child(even)
1108
- [data-part='opposite'],
1109
- [data-ui='timeline'][data-placement='alternate'] [data-side='start'] [data-part='opposite'] {
1101
+ [data-ui-timeline][data-placement='alternate']
1102
+ [data-part-item]:nth-child(even)
1103
+ [data-part-opposite],
1104
+ [data-ui-timeline][data-placement='alternate'] [data-side='start'] [data-part-opposite] {
1110
1105
  grid-column: after;
1111
1106
  text-align: start;
1112
1107
  }
1113
1108
 
1114
- [data-ui='timeline'][data-placement='alternate'] [data-side='end'] [data-part='content'] {
1109
+ [data-ui-timeline][data-placement='alternate'] [data-side='end'] [data-part-content] {
1115
1110
  grid-column: after;
1116
1111
  text-align: start;
1117
1112
  }
1118
1113
 
1119
- [data-ui='timeline'][data-placement='alternate'] [data-side='end'] [data-part='opposite'] {
1114
+ [data-ui-timeline][data-placement='alternate'] [data-side='end'] [data-part-opposite] {
1120
1115
  grid-column: before;
1121
1116
  text-align: end;
1122
1117
  }
1123
1118
 
1124
- [data-ui='timeline'][data-placement='alternate']
1125
- [data-part='item']:nth-child(even)
1126
- [data-part='content'],
1127
- [data-ui='timeline'][data-placement='alternate'] [data-side='start'] [data-part='content'] {
1119
+ [data-ui-timeline][data-placement='alternate']
1120
+ [data-part-item]:nth-child(even)
1121
+ [data-part-content],
1122
+ [data-ui-timeline][data-placement='alternate'] [data-side='start'] [data-part-content] {
1128
1123
  grid-template-columns: auto minmax(0, 1fr);
1129
1124
  }
1130
1125
 
1131
- [data-ui='timeline'][data-placement='alternate']
1132
- [data-part='item']:nth-child(even)
1133
- [data-part='content']
1134
- > [data-part='title'],
1135
- [data-ui='timeline'][data-placement='alternate']
1126
+ [data-ui-timeline][data-placement='alternate']
1127
+ [data-part-item]:nth-child(even)
1128
+ [data-part-content]
1129
+ > [data-part-title],
1130
+ [data-ui-timeline][data-placement='alternate']
1136
1131
  [data-side='start']
1137
- [data-part='content']
1138
- > [data-part='title'] {
1132
+ [data-part-content]
1133
+ > [data-part-title] {
1139
1134
  grid-column: 2;
1140
1135
  }
1141
1136
 
1142
- [data-ui='timeline'][data-placement='alternate']
1143
- [data-part='item']:nth-child(even)
1144
- [data-part='content']
1145
- > [data-part='time'],
1146
- [data-ui='timeline'][data-placement='alternate']
1137
+ [data-ui-timeline][data-placement='alternate']
1138
+ [data-part-item]:nth-child(even)
1139
+ [data-part-content]
1140
+ > [data-part-time],
1141
+ [data-ui-timeline][data-placement='alternate']
1147
1142
  [data-side='start']
1148
- [data-part='content']
1149
- > [data-part='time'] {
1143
+ [data-part-content]
1144
+ > [data-part-time] {
1150
1145
  grid-column: 1;
1151
1146
  margin-inline: 0 var(--_gap);
1152
1147
  }
1153
1148
 
1154
- [data-ui='timeline'][data-placement='alternate']
1155
- [data-part='item']:nth-child(even)
1156
- :is([data-part='actor'], [data-part='actions']),
1157
- [data-ui='timeline'][data-placement='alternate']
1149
+ [data-ui-timeline][data-placement='alternate']
1150
+ [data-part-item]:nth-child(even)
1151
+ :is([data-part-actor], [data-part-actions]),
1152
+ [data-ui-timeline][data-placement='alternate']
1158
1153
  [data-side='start']
1159
- :is([data-part='actor'], [data-part='actions']) {
1154
+ :is([data-part-actor], [data-part-actions]) {
1160
1155
  justify-content: flex-end;
1161
1156
  }
1162
1157
 
1163
- [data-ui='timeline'][data-placement='alternate'] [data-part='more'] {
1158
+ [data-ui-timeline][data-placement='alternate'] [data-part-more] {
1164
1159
  margin-inline-start: calc(50% + var(--_rail) / 2 + var(--_gap));
1165
1160
  }
1166
1161
 
@@ -1173,7 +1168,7 @@
1173
1168
  * titles are.
1174
1169
  */
1175
1170
 
1176
- [data-ui='timeline'][data-orientation='horizontal'] [data-part='list'] {
1171
+ [data-ui-timeline][data-orientation='horizontal'] [data-part-list] {
1177
1172
  display: grid;
1178
1173
  grid-auto-columns: minmax(
1179
1174
  var(--slotted-timeline-track-min, var(--slotted-space-12, 4rem)),
@@ -1193,7 +1188,7 @@
1193
1188
  padding-inline: round(up, var(--_reach), 1px);
1194
1189
  }
1195
1190
 
1196
- [data-ui='timeline'][data-orientation='horizontal'] [data-part='item'] {
1191
+ [data-ui-timeline][data-orientation='horizontal'] [data-part-item] {
1197
1192
  /**
1198
1193
  * The rows keep their own height. Every item in the row is stretched to
1199
1194
  * the tallest, and `auto` rows would share that extra space out — which
@@ -1210,7 +1205,7 @@
1210
1205
  row-gap: 0;
1211
1206
  }
1212
1207
 
1213
- [data-ui='timeline'][data-orientation='horizontal'] [data-part='item']:last-child {
1208
+ [data-ui-timeline][data-orientation='horizontal'] [data-part-item]:last-child {
1214
1209
  padding-inline-end: 0;
1215
1210
  }
1216
1211
 
@@ -1219,7 +1214,7 @@
1219
1214
  * the marker centred in it, so every centre sits half a rail in and the
1220
1215
  * line runs from one to the next along the same row.
1221
1216
  */
1222
- [data-ui='timeline'][data-orientation='horizontal'] [data-part='rail'] {
1217
+ [data-ui-timeline][data-orientation='horizontal'] [data-part-rail] {
1223
1218
  align-items: start;
1224
1219
  align-self: start;
1225
1220
  block-size: var(--_rail);
@@ -1228,13 +1223,13 @@
1228
1223
  justify-content: center;
1229
1224
  }
1230
1225
 
1231
- [data-ui='timeline'][data-orientation='horizontal'] [data-part='marker'] {
1226
+ [data-ui-timeline][data-orientation='horizontal'] [data-part-marker] {
1232
1227
  --_lift: 0px;
1233
1228
 
1234
1229
  margin-inline-start: calc((var(--_rail) - var(--_marker)) / 2);
1235
1230
  }
1236
1231
 
1237
- [data-ui='timeline'][data-orientation='horizontal'] [data-part='connector'] {
1232
+ [data-ui-timeline][data-orientation='horizontal'] [data-part-connector] {
1238
1233
  /* Widths only: the colour and the dash are the rules above, for both edges. */
1239
1234
  border-block-start-width: var(--_rule);
1240
1235
  border-inline-start-width: 0;
@@ -1246,7 +1241,7 @@
1246
1241
  inset-inline-start: calc(var(--_rail) / 2);
1247
1242
  }
1248
1243
 
1249
- [data-ui='timeline'][data-orientation='horizontal'] [data-part='content'] {
1244
+ [data-ui-timeline][data-orientation='horizontal'] [data-part-content] {
1250
1245
  align-self: start;
1251
1246
  grid-column: 1;
1252
1247
  grid-row: after;
@@ -1254,7 +1249,7 @@
1254
1249
  text-align: start;
1255
1250
  }
1256
1251
 
1257
- [data-ui='timeline'][data-orientation='horizontal'] [data-part='opposite'] {
1252
+ [data-ui-timeline][data-orientation='horizontal'] [data-part-opposite] {
1258
1253
  align-self: start;
1259
1254
  grid-column: 1;
1260
1255
  grid-row: before;
@@ -1262,21 +1257,20 @@
1262
1257
  text-align: start;
1263
1258
  }
1264
1259
 
1265
- [data-ui='timeline'][data-orientation='horizontal'][data-placement='start'] [data-part='content'],
1266
- [data-ui='timeline'][data-orientation='horizontal'][data-placement='alternate']
1267
- [data-part='item']:nth-child(even)
1268
- [data-part='content'] {
1260
+ [data-ui-timeline][data-orientation='horizontal'][data-placement='start'] [data-part-content],
1261
+ [data-ui-timeline][data-orientation='horizontal'][data-placement='alternate']
1262
+ [data-part-item]:nth-child(even)
1263
+ [data-part-content] {
1269
1264
  grid-column: 1;
1270
1265
  grid-row: before;
1271
1266
  margin-block: 0 var(--_gap);
1272
1267
  text-align: start;
1273
1268
  }
1274
1269
 
1275
- [data-ui='timeline'][data-orientation='horizontal'][data-placement='start']
1276
- [data-part='opposite'],
1277
- [data-ui='timeline'][data-orientation='horizontal'][data-placement='alternate']
1278
- [data-part='item']:nth-child(even)
1279
- [data-part='opposite'] {
1270
+ [data-ui-timeline][data-orientation='horizontal'][data-placement='start'] [data-part-opposite],
1271
+ [data-ui-timeline][data-orientation='horizontal'][data-placement='alternate']
1272
+ [data-part-item]:nth-child(even)
1273
+ [data-part-opposite] {
1280
1274
  grid-column: 1;
1281
1275
  grid-row: after;
1282
1276
  margin-block: var(--_gap) 0;
@@ -1287,23 +1281,22 @@
1287
1281
  * the placements swap are then irrelevant, and the DOM order — title, time,
1288
1282
  * actor, description, actions — is the order a narrow body reads in.
1289
1283
  */
1290
- [data-ui='timeline'][data-orientation='horizontal'] [data-part='content'] {
1284
+ [data-ui-timeline][data-orientation='horizontal'] [data-part-content] {
1291
1285
  display: flex;
1292
1286
  flex-direction: column;
1293
1287
  }
1294
1288
 
1295
1289
  /* On a line of its own the timestamp may wrap: nowrap is for the title's line. */
1296
- [data-ui='timeline'][data-orientation='horizontal'] [data-part='content'] > [data-part='time'] {
1290
+ [data-ui-timeline][data-orientation='horizontal'] [data-part-content] > [data-part-time] {
1297
1291
  margin-inline: 0;
1298
1292
  white-space: normal;
1299
1293
  }
1300
1294
 
1301
- [data-ui='timeline'][data-orientation='horizontal']
1302
- :is([data-part='actor'], [data-part='actions']) {
1295
+ [data-ui-timeline][data-orientation='horizontal'] :is([data-part-actor], [data-part-actions]) {
1303
1296
  justify-content: flex-start;
1304
1297
  }
1305
1298
 
1306
- [data-ui='timeline'][data-orientation='horizontal'] [data-part='more'] {
1299
+ [data-ui-timeline][data-orientation='horizontal'] [data-part-more] {
1307
1300
  margin-block-start: var(--_gap);
1308
1301
  margin-inline-start: 0;
1309
1302
  }
@@ -1323,12 +1316,12 @@
1323
1316
  */
1324
1317
 
1325
1318
  @container slotted-timeline (max-width: 20rem) {
1326
- [data-ui='timeline'][data-orientation='vertical'] [data-part='content'] {
1319
+ [data-ui-timeline][data-orientation='vertical'] [data-part-content] {
1327
1320
  display: flex;
1328
1321
  flex-direction: column;
1329
1322
  }
1330
1323
 
1331
- [data-ui='timeline'][data-orientation='vertical'] [data-part='content'] > [data-part='time'] {
1324
+ [data-ui-timeline][data-orientation='vertical'] [data-part-content] > [data-part-time] {
1332
1325
  margin-inline: 0;
1333
1326
  white-space: normal;
1334
1327
  }
@@ -1338,62 +1331,59 @@
1338
1331
  * body's measure. The opposite side takes the line above the body, and
1339
1332
  * the rail spans both.
1340
1333
  */
1341
- [data-ui='timeline'][data-orientation='vertical']:not([data-reflow='false'])
1342
- [data-part='list']
1343
- [data-part='item']:nth-child(n) {
1334
+ [data-ui-timeline][data-orientation='vertical']:not([data-reflow='false'])
1335
+ [data-part-list]
1336
+ [data-part-item]:nth-child(n) {
1344
1337
  grid-template-columns: [rail] var(--_rail) [content] minmax(0, 1fr);
1345
1338
  }
1346
1339
 
1347
- [data-ui='timeline'][data-orientation='vertical']:not([data-reflow='false'])
1348
- [data-part='item']:nth-child(n)
1349
- > [data-part='opposite'] {
1340
+ [data-ui-timeline][data-orientation='vertical']:not([data-reflow='false'])
1341
+ [data-part-item]:nth-child(n)
1342
+ > [data-part-opposite] {
1350
1343
  grid-column: content;
1351
1344
  grid-row: 1;
1352
1345
  text-align: start;
1353
1346
  }
1354
1347
 
1355
- [data-ui='timeline'][data-orientation='vertical']:not([data-reflow='false'])
1356
- [data-part='item']:nth-child(n):has(> [data-part='opposite'])
1357
- > [data-part='content'] {
1348
+ [data-ui-timeline][data-orientation='vertical']:not([data-reflow='false'])
1349
+ [data-part-item]:nth-child(n):has(> [data-part-opposite])
1350
+ > [data-part-content] {
1358
1351
  grid-row: 2;
1359
1352
  }
1360
1353
 
1361
- [data-ui='timeline'][data-orientation='vertical']:not([data-reflow='false'])
1362
- [data-part='item']:nth-child(n):has(> [data-part='opposite'])
1363
- > [data-part='rail'] {
1354
+ [data-ui-timeline][data-orientation='vertical']:not([data-reflow='false'])
1355
+ [data-part-item]:nth-child(n):has(> [data-part-opposite])
1356
+ > [data-part-rail] {
1364
1357
  grid-row: 1 / 3;
1365
1358
  }
1366
1359
 
1367
- [data-ui='timeline'][data-orientation='vertical']:not([data-reflow='false'])
1368
- [data-part='item']:nth-child(n)
1369
- > [data-part='content'] {
1360
+ [data-ui-timeline][data-orientation='vertical']:not([data-reflow='false'])
1361
+ [data-part-item]:nth-child(n)
1362
+ > [data-part-content] {
1370
1363
  grid-column: content;
1371
1364
  text-align: start;
1372
1365
  }
1373
1366
 
1374
- [data-ui='timeline'][data-orientation='vertical']:not([data-reflow='false'])
1375
- [data-part='item']:nth-child(n)
1376
- :is([data-part='actor'], [data-part='actions']) {
1367
+ [data-ui-timeline][data-orientation='vertical']:not([data-reflow='false'])
1368
+ [data-part-item]:nth-child(n)
1369
+ :is([data-part-actor], [data-part-actions]) {
1377
1370
  justify-content: flex-start;
1378
1371
  }
1379
1372
 
1380
- [data-ui='timeline'][data-orientation='vertical']:not([data-reflow='false'])
1381
- [data-part='more'] {
1373
+ [data-ui-timeline][data-orientation='vertical']:not([data-reflow='false']) [data-part-more] {
1382
1374
  margin-inline-start: calc(var(--_rail) + var(--_gap));
1383
1375
  }
1384
1376
  }
1385
1377
 
1386
1378
  @container slotted-timeline (max-width: 30rem) {
1387
- [data-ui='timeline'][data-orientation='horizontal']:not([data-reflow='false'])
1388
- [data-part='list'] {
1379
+ [data-ui-timeline][data-orientation='horizontal']:not([data-reflow='false']) [data-part-list] {
1389
1380
  display: flex;
1390
1381
  flex-direction: column;
1391
1382
  overflow-x: visible;
1392
1383
  padding: 0;
1393
1384
  }
1394
1385
 
1395
- [data-ui='timeline'][data-orientation='horizontal']:not([data-reflow='false'])
1396
- [data-part='item'] {
1386
+ [data-ui-timeline][data-orientation='horizontal']:not([data-reflow='false']) [data-part-item] {
1397
1387
  align-items: stretch;
1398
1388
  column-gap: var(--_gap);
1399
1389
  grid-template-columns: [rail] var(--_rail) [content] minmax(0, 1fr);
@@ -1403,13 +1393,12 @@
1403
1393
  row-gap: 0;
1404
1394
  }
1405
1395
 
1406
- [data-ui='timeline'][data-orientation='horizontal']:not([data-reflow='false'])
1407
- [data-part='item']:last-child {
1396
+ [data-ui-timeline][data-orientation='horizontal']:not([data-reflow='false'])
1397
+ [data-part-item]:last-child {
1408
1398
  margin-block-end: 0;
1409
1399
  }
1410
1400
 
1411
- [data-ui='timeline'][data-orientation='horizontal']:not([data-reflow='false'])
1412
- [data-part='rail'] {
1401
+ [data-ui-timeline][data-orientation='horizontal']:not([data-reflow='false']) [data-part-rail] {
1413
1402
  align-items: center;
1414
1403
  align-self: stretch;
1415
1404
  block-size: auto;
@@ -1419,15 +1408,15 @@
1419
1408
  justify-content: flex-start;
1420
1409
  }
1421
1410
 
1422
- [data-ui='timeline'][data-orientation='horizontal']:not([data-reflow='false'])
1423
- [data-part='marker'] {
1411
+ [data-ui-timeline][data-orientation='horizontal']:not([data-reflow='false'])
1412
+ [data-part-marker] {
1424
1413
  --_lift: round(nearest, calc((1lh - var(--_marker)) / 2), 1px);
1425
1414
 
1426
1415
  margin-inline-start: 0;
1427
1416
  }
1428
1417
 
1429
- [data-ui='timeline'][data-orientation='horizontal']:not([data-reflow='false'])
1430
- [data-part='connector'] {
1418
+ [data-ui-timeline][data-orientation='horizontal']:not([data-reflow='false'])
1419
+ [data-part-connector] {
1431
1420
  border-block-start-width: 0;
1432
1421
  border-inline-start-width: var(--_rule);
1433
1422
  block-size: auto;
@@ -1443,9 +1432,9 @@
1443
1432
  * so the column wins over them here; a container query adds no weight of
1444
1433
  * its own.
1445
1434
  */
1446
- [data-ui='timeline'][data-orientation='horizontal']:not([data-reflow='false'])
1447
- [data-part='item']:nth-child(n)
1448
- > [data-part='opposite'] {
1435
+ [data-ui-timeline][data-orientation='horizontal']:not([data-reflow='false'])
1436
+ [data-part-item]:nth-child(n)
1437
+ > [data-part-opposite] {
1449
1438
  align-self: baseline;
1450
1439
  grid-column: content;
1451
1440
  grid-row: 1;
@@ -1453,9 +1442,9 @@
1453
1442
  text-align: start;
1454
1443
  }
1455
1444
 
1456
- [data-ui='timeline'][data-orientation='horizontal']:not([data-reflow='false'])
1457
- [data-part='item']:nth-child(n)
1458
- > [data-part='content'] {
1445
+ [data-ui-timeline][data-orientation='horizontal']:not([data-reflow='false'])
1446
+ [data-part-item]:nth-child(n)
1447
+ > [data-part-content] {
1459
1448
  align-self: baseline;
1460
1449
  grid-column: content;
1461
1450
  grid-row: auto;
@@ -1463,8 +1452,7 @@
1463
1452
  text-align: start;
1464
1453
  }
1465
1454
 
1466
- [data-ui='timeline'][data-orientation='horizontal']:not([data-reflow='false'])
1467
- [data-part='more'] {
1455
+ [data-ui-timeline][data-orientation='horizontal']:not([data-reflow='false']) [data-part-more] {
1468
1456
  margin-block-start: var(--_item-gap);
1469
1457
  margin-inline-start: calc(var(--_rail) + var(--_gap));
1470
1458
  }
@@ -1474,85 +1462,85 @@
1474
1462
  * are two columns of three words. The opposite side takes the line above
1475
1463
  * the body, in reading order.
1476
1464
  */
1477
- [data-ui='timeline'][data-orientation='vertical'][data-placement='alternate']:not(
1465
+ [data-ui-timeline][data-orientation='vertical'][data-placement='alternate']:not(
1478
1466
  [data-reflow='false']
1479
1467
  )
1480
- [data-part='item'] {
1468
+ [data-part-item] {
1481
1469
  grid-template-columns: [rail] var(--_rail) [content] minmax(0, 1fr);
1482
1470
  }
1483
1471
 
1484
- [data-ui='timeline'][data-orientation='vertical'][data-placement='alternate']:not(
1472
+ [data-ui-timeline][data-orientation='vertical'][data-placement='alternate']:not(
1485
1473
  [data-reflow='false']
1486
1474
  )
1487
- [data-part='item']
1488
- :is([data-part='content'], [data-part='opposite']) {
1475
+ [data-part-item]
1476
+ :is([data-part-content], [data-part-opposite]) {
1489
1477
  grid-column: content;
1490
1478
  text-align: start;
1491
1479
  }
1492
1480
 
1493
- [data-ui='timeline'][data-orientation='vertical'][data-placement='alternate']:not(
1481
+ [data-ui-timeline][data-orientation='vertical'][data-placement='alternate']:not(
1494
1482
  [data-reflow='false']
1495
1483
  )
1496
- [data-part='item']
1497
- [data-part='opposite'] {
1484
+ [data-part-item]
1485
+ [data-part-opposite] {
1498
1486
  grid-row: 1;
1499
1487
  }
1500
1488
 
1501
- [data-ui='timeline'][data-orientation='vertical'][data-placement='alternate']:not(
1489
+ [data-ui-timeline][data-orientation='vertical'][data-placement='alternate']:not(
1502
1490
  [data-reflow='false']
1503
1491
  )
1504
- [data-part='item']:has(> [data-part='opposite'])
1505
- > [data-part='content'] {
1492
+ [data-part-item]:has(> [data-part-opposite])
1493
+ > [data-part-content] {
1506
1494
  grid-row: 2;
1507
1495
  }
1508
1496
 
1509
- [data-ui='timeline'][data-orientation='vertical'][data-placement='alternate']:not(
1497
+ [data-ui-timeline][data-orientation='vertical'][data-placement='alternate']:not(
1510
1498
  [data-reflow='false']
1511
1499
  )
1512
- [data-part='item']:has(> [data-part='opposite'])
1513
- > [data-part='rail'] {
1500
+ [data-part-item]:has(> [data-part-opposite])
1501
+ > [data-part-rail] {
1514
1502
  grid-row: 1 / 3;
1515
1503
  }
1516
1504
 
1517
- [data-ui='timeline'][data-orientation='vertical'][data-placement='alternate']:not(
1505
+ [data-ui-timeline][data-orientation='vertical'][data-placement='alternate']:not(
1518
1506
  [data-reflow='false']
1519
1507
  )
1520
- [data-part='item']:nth-child(n)
1521
- [data-part='content'] {
1508
+ [data-part-item]:nth-child(n)
1509
+ [data-part-content] {
1522
1510
  grid-template-columns: minmax(0, 1fr) auto;
1523
1511
  }
1524
1512
 
1525
- [data-ui='timeline'][data-orientation='vertical'][data-placement='alternate']:not(
1513
+ [data-ui-timeline][data-orientation='vertical'][data-placement='alternate']:not(
1526
1514
  [data-reflow='false']
1527
1515
  )
1528
- [data-part='item']:nth-child(n)
1529
- [data-part='content']
1530
- > [data-part='title'] {
1516
+ [data-part-item]:nth-child(n)
1517
+ [data-part-content]
1518
+ > [data-part-title] {
1531
1519
  grid-column: 1;
1532
1520
  }
1533
1521
 
1534
- [data-ui='timeline'][data-orientation='vertical'][data-placement='alternate']:not(
1522
+ [data-ui-timeline][data-orientation='vertical'][data-placement='alternate']:not(
1535
1523
  [data-reflow='false']
1536
1524
  )
1537
- [data-part='item']:nth-child(n)
1538
- [data-part='content']
1539
- > [data-part='time'] {
1525
+ [data-part-item]:nth-child(n)
1526
+ [data-part-content]
1527
+ > [data-part-time] {
1540
1528
  grid-column: 2;
1541
1529
  margin-inline: var(--_gap) 0;
1542
1530
  }
1543
1531
 
1544
- [data-ui='timeline'][data-orientation='vertical'][data-placement='alternate']:not(
1532
+ [data-ui-timeline][data-orientation='vertical'][data-placement='alternate']:not(
1545
1533
  [data-reflow='false']
1546
1534
  )
1547
- [data-part='item']
1548
- :is([data-part='actor'], [data-part='actions']) {
1535
+ [data-part-item]
1536
+ :is([data-part-actor], [data-part-actions]) {
1549
1537
  justify-content: flex-start;
1550
1538
  }
1551
1539
 
1552
- [data-ui='timeline'][data-orientation='vertical'][data-placement='alternate']:not(
1540
+ [data-ui-timeline][data-orientation='vertical'][data-placement='alternate']:not(
1553
1541
  [data-reflow='false']
1554
1542
  )
1555
- [data-part='more'] {
1543
+ [data-part-more] {
1556
1544
  margin-inline-start: calc(var(--_rail) + var(--_gap));
1557
1545
  }
1558
1546
  }
@@ -1571,12 +1559,12 @@
1571
1559
 
1572
1560
  @media (forced-colors: active) {
1573
1561
  /* The core in the marker's own ink, which the system has already forced. */
1574
- [data-ui='timeline'] [data-part='marker']:empty::after {
1562
+ [data-ui-timeline] [data-part-marker]:empty::after {
1575
1563
  background-color: currentColor;
1576
1564
  forced-color-adjust: none;
1577
1565
  }
1578
1566
 
1579
- [data-ui='timeline'] [data-complete]:not([data-current]) [data-part='marker'] {
1567
+ [data-ui-timeline] [data-complete]:not([data-current]) [data-part-marker] {
1580
1568
  background-color: Highlight;
1581
1569
  border-color: Highlight;
1582
1570
  color: HighlightText;
@@ -1584,11 +1572,11 @@
1584
1572
  }
1585
1573
 
1586
1574
  /* The check in the finished disc's forced ink, not the author's ground. */
1587
- [data-ui='timeline'] [data-part='marker'] > [data-ui='icon'][data-check] {
1575
+ [data-ui-timeline] [data-part-marker] > [data-ui-icon][data-check] {
1588
1576
  color: inherit;
1589
1577
  }
1590
1578
 
1591
- [data-ui='timeline'] [data-current]:not([data-loading]) [data-part='marker'] {
1579
+ [data-ui-timeline] [data-current]:not([data-loading]) [data-part-marker] {
1592
1580
  outline: var(--_edge) solid CanvasText;
1593
1581
  outline-offset: var(--slotted-border-width-thick, 2px);
1594
1582
  }