@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
@@ -26,7 +26,7 @@
26
26
  * the result-state inside are theirs, reached with child combinators so a
27
27
  * `title`, an `actions` or a `description` of theirs is never restyled.
28
28
  */
29
- [data-ui='notification-center'] {
29
+ [data-ui-notification-center] {
30
30
  --_text: var(--slotted-text, CanvasText);
31
31
  --_muted: var(--slotted-text-muted, GrayText);
32
32
  --_rule: var(--slotted-notification-center-border, var(--slotted-border-subtle, ButtonBorder));
@@ -128,7 +128,7 @@
128
128
  * would collapse to nothing; `sm` states a floor, capped by the viewport
129
129
  * for a phone, and `100%` keeps it filling a host that has a width.
130
130
  */
131
- [data-ui='notification-center'][data-size='sm'] {
131
+ [data-ui-notification-center][data-size='sm'] {
132
132
  min-inline-size: var(
133
133
  --slotted-notification-center-min-inline-size-sm,
134
134
  min(22rem, calc(100vw - var(--slotted-space-8, 2rem)))
@@ -165,7 +165,7 @@
165
165
  * The title pushes the rest to the end; a control that wraps lands at the
166
166
  * end of its own line, under the one before it, not at the start.
167
167
  */
168
- [data-ui='notification-center'] > [data-part='header'] {
168
+ [data-ui-notification-center] > [data-part-header] {
169
169
  align-items: center;
170
170
  border-block-end: var(--_rule-size) solid var(--_rule);
171
171
  display: flex;
@@ -177,7 +177,7 @@
177
177
  padding-inline: var(--_inset-inline);
178
178
  }
179
179
 
180
- [data-ui='notification-center'] > [data-part='header'] > [data-part='title'] {
180
+ [data-ui-notification-center] > [data-part-header] > [data-part-title] {
181
181
  align-items: center;
182
182
  color: var(--_text);
183
183
  display: inline-flex;
@@ -203,7 +203,7 @@
203
203
  * is what waits.
204
204
  */
205
205
  /** One measure for both dimensions: a single digit is a circle, two digits a pill. */
206
- [data-ui='notification-center'] [data-part='count'] {
206
+ [data-ui-notification-center] [data-part-count] {
207
207
  align-items: center;
208
208
  background-color: var(--slotted-surface-sunken, Canvas);
209
209
  block-size: var(--_count-box);
@@ -223,21 +223,18 @@
223
223
  padding-inline: var(--slotted-space-2, 0.25rem);
224
224
  }
225
225
 
226
- [data-ui='notification-center']
227
- > [data-part='header']
228
- > [data-part='title']
229
- > [data-part='count'] {
226
+ [data-ui-notification-center] > [data-part-header] > [data-part-title] > [data-part-count] {
230
227
  background-color: var(--slotted-tone-accent-surface, Canvas);
231
228
  color: var(--slotted-tone-accent-text, Highlight);
232
229
  }
233
230
 
234
231
  /** The slot a Button sits in, pushed to the end of the row; the consumer's actions after it. */
235
- [data-ui='notification-center'] > [data-part='header'] > [data-part='mark-all'] {
232
+ [data-ui-notification-center] > [data-part-header] > [data-part-mark-all] {
236
233
  display: inline-flex;
237
234
  }
238
235
 
239
236
  /** The consumer's controls read at the row's meta size: a link beside a small button, not beside the title. */
240
- [data-ui='notification-center'] > [data-part='header'] > [data-part='actions'] {
237
+ [data-ui-notification-center] > [data-part-header] > [data-part-actions] {
241
238
  align-items: center;
242
239
  display: inline-flex;
243
240
  font-size: var(--_meta-size);
@@ -251,7 +248,7 @@
251
248
  * The strip sits on the header's rule, so the tabs family's own track is
252
249
  * off (`track="none"`) and the marker lands on the line the header drew.
253
250
  */
254
- [data-ui='notification-center'] > [data-part='views'] {
251
+ [data-ui-notification-center] > [data-part-views] {
255
252
  border-block-end: var(--_rule-size) solid var(--_rule);
256
253
  min-inline-size: 0;
257
254
  padding-inline: var(--_inset-inline);
@@ -265,8 +262,8 @@
265
262
  * the idiom `timeline` set for the same two controls; `fresh` in the accent
266
263
  * pair so it reads as something new, `more` in the secondary.
267
264
  */
268
- [data-ui='notification-center'] > [data-part='fresh'],
269
- [data-ui='notification-center'] > button[data-part='more'] {
265
+ [data-ui-notification-center] > [data-part-fresh],
266
+ [data-ui-notification-center] > button[data-part-more] {
270
267
  align-items: center;
271
268
  appearance: none;
272
269
  background-color: var(--_ground);
@@ -292,35 +289,35 @@
292
289
  color var(--_duration) var(--_easing);
293
290
  }
294
291
 
295
- [data-ui='notification-center'] > [data-part='fresh'] {
292
+ [data-ui-notification-center] > [data-part-fresh] {
296
293
  background-color: var(--slotted-tone-accent-surface, Canvas);
297
294
  border-color: var(--slotted-tone-accent-border, Highlight);
298
295
  color: var(--slotted-tone-accent-text, Highlight);
299
296
  }
300
297
 
301
- [data-ui='notification-center'] > [data-part='fresh']:enabled:hover {
298
+ [data-ui-notification-center] > [data-part-fresh]:enabled:hover {
302
299
  background-color: var(--slotted-tone-accent-subtle-hover, Canvas);
303
300
  }
304
301
 
305
- [data-ui='notification-center'] > [data-part='fresh']:enabled:active {
302
+ [data-ui-notification-center] > [data-part-fresh]:enabled:active {
306
303
  background-color: var(--slotted-tone-accent-subtle-active, Canvas);
307
304
  }
308
305
 
309
- [data-ui='notification-center'] > button[data-part='more']:enabled:hover {
306
+ [data-ui-notification-center] > button[data-part-more]:enabled:hover {
310
307
  background-color: var(--_hover);
311
308
  }
312
309
 
313
- [data-ui='notification-center'] > button[data-part='more']:enabled:active {
310
+ [data-ui-notification-center] > button[data-part-more]:enabled:active {
314
311
  background-color: var(--_active);
315
312
  }
316
313
 
317
- [data-ui='notification-center'] > button[data-part='more']:disabled {
314
+ [data-ui-notification-center] > button[data-part-more]:disabled {
318
315
  color: var(--slotted-disabled-foreground, GrayText);
319
316
  cursor: default;
320
317
  }
321
318
 
322
319
  /** Under growing=scroll the sentinel is a box the observer watches, and it says it is waiting. */
323
- [data-ui='notification-center'] > div[data-part='more'] {
320
+ [data-ui-notification-center] > div[data-part-more] {
324
321
  color: var(--_muted);
325
322
  font-size: var(--_meta-size);
326
323
  line-height: var(--_meta-line-height);
@@ -330,8 +327,8 @@
330
327
  text-align: center;
331
328
  }
332
329
 
333
- [data-ui='notification-center'] > [data-part='fresh']:focus-visible,
334
- [data-ui='notification-center'] > button[data-part='more']:focus-visible {
330
+ [data-ui-notification-center] > [data-part-fresh]:focus-visible,
331
+ [data-ui-notification-center] > button[data-part-more]:focus-visible {
335
332
  outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
336
333
  outline-offset: var(--slotted-focus-ring-offset, 2px);
337
334
  }
@@ -347,7 +344,7 @@
347
344
  * is `scroll-area`'s: a reserved gutter so the rows do not move when the
348
345
  * feed grows past the panel, the thin platform bar, the family's ink on it.
349
346
  */
350
- [data-ui='notification-center'] > [data-part='feed'] {
347
+ [data-ui-notification-center] > [data-part-feed] {
351
348
  display: flex;
352
349
  flex: 1 1 auto;
353
350
  flex-direction: column;
@@ -361,17 +358,17 @@
361
358
  }
362
359
 
363
360
  /** The footer draws its own rule above, so the last row gives up the one below it: one seam, not two. */
364
- [data-ui='notification-center']
365
- > [data-part='feed']:has(+ [data-part='footer'])
366
- > [data-part='item']:last-child,
367
- [data-ui='notification-center']
368
- > [data-part='feed']:has(+ [data-part='footer'])
369
- > [data-part='group']:last-child
370
- > [data-part='item']:last-child {
361
+ [data-ui-notification-center]
362
+ > [data-part-feed]:has(+ [data-part-footer])
363
+ > [data-part-item]:last-child,
364
+ [data-ui-notification-center]
365
+ > [data-part-feed]:has(+ [data-part-footer])
366
+ > [data-part-group]:last-child
367
+ > [data-part-item]:last-child {
371
368
  border-block-end: 0;
372
369
  }
373
370
 
374
- [data-ui='notification-center'] > [data-part='feed'] > [data-part='group'] {
371
+ [data-ui-notification-center] > [data-part-feed] > [data-part-group] {
375
372
  display: flex;
376
373
  flex-direction: column;
377
374
  min-inline-size: 0;
@@ -381,10 +378,7 @@
381
378
  * A group's heading: an overline in the muted text, on the feed's inset, so
382
379
  * the groups read as one list with dates between rather than as boxes.
383
380
  */
384
- [data-ui='notification-center']
385
- > [data-part='feed']
386
- > [data-part='group']
387
- > [data-part='group-label'] {
381
+ [data-ui-notification-center] > [data-part-feed] > [data-part-group] > [data-part-group-label] {
388
382
  color: var(--_muted);
389
383
  font-size: var(--slotted-font-size-xs, 0.75rem);
390
384
  font-weight: var(--slotted-font-weight-semibold, 600);
@@ -403,7 +397,7 @@
403
397
  * rows and not as a column of cards. The visual, the title's first line
404
398
  * and the controls are centred on one axis.
405
399
  */
406
- [data-ui='notification-center'] > [data-part='feed'] [data-part='item'] {
400
+ [data-ui-notification-center] > [data-part-feed] [data-part-item] {
407
401
  align-items: flex-start;
408
402
  border-block-end: var(--_rule-size) solid var(--_rule);
409
403
  display: grid;
@@ -416,29 +410,35 @@
416
410
  transition: background-color var(--_duration) var(--_easing);
417
411
  }
418
412
 
419
- [data-ui='notification-center'] > [data-part='feed'] [data-part='item'][data-tone='secondary'] {
413
+ [data-ui-notification-center] > [data-part-feed] [data-part-item][data-tone='secondary'] {
420
414
  --_tone-solid: var(--slotted-tone-secondary-solid, ButtonText);
421
415
  --_tone-text: var(--slotted-tone-secondary-text, ButtonText);
422
416
  --_tone-surface: var(--slotted-tone-secondary-surface, Canvas);
423
417
  }
424
- [data-ui='notification-center'] > [data-part='feed'] [data-part='item'][data-tone='success'] {
418
+ [data-ui-notification-center] > [data-part-feed] [data-part-item][data-tone='success'] {
425
419
  --_tone-solid: var(--slotted-tone-success-solid, ButtonText);
426
420
  --_tone-text: var(--slotted-tone-success-text, ButtonText);
427
421
  --_tone-surface: var(--slotted-tone-success-surface, Canvas);
428
422
  }
429
- [data-ui='notification-center'] > [data-part='feed'] [data-part='item'][data-tone='warning'] {
423
+
424
+ [data-ui-notification-center] > [data-part-feed] [data-part-item][data-tone='info'] {
425
+ --_tone-solid: var(--slotted-tone-info-solid, ButtonText);
426
+ --_tone-text: var(--slotted-tone-info-text, ButtonText);
427
+ --_tone-surface: var(--slotted-tone-info-surface, Canvas);
428
+ }
429
+ [data-ui-notification-center] > [data-part-feed] [data-part-item][data-tone='warning'] {
430
430
  --_tone-solid: var(--slotted-tone-warning-solid, ButtonText);
431
431
  --_tone-text: var(--slotted-tone-warning-text, ButtonText);
432
432
  --_tone-surface: var(--slotted-tone-warning-surface, Canvas);
433
433
  }
434
- [data-ui='notification-center'] > [data-part='feed'] [data-part='item'][data-tone='danger'] {
434
+ [data-ui-notification-center] > [data-part-feed] [data-part-item][data-tone='danger'] {
435
435
  --_tone-solid: var(--slotted-tone-danger-solid, ButtonText);
436
436
  --_tone-text: var(--slotted-tone-danger-text, ButtonText);
437
437
  --_tone-surface: var(--slotted-tone-danger-surface, Canvas);
438
438
  }
439
439
 
440
440
  /** Unread stands on the wash; read stands on the surface. The dot says the same thing a second way. */
441
- [data-ui='notification-center'] > [data-part='feed'] [data-part='item']:not([data-read]) {
441
+ [data-ui-notification-center] > [data-part-feed] [data-part-item]:not([data-read]) {
442
442
  background-color: var(--_unread-ground);
443
443
  }
444
444
 
@@ -447,9 +447,7 @@
447
447
  * vocabulary's: an item is never disabled, and the rule says so where the
448
448
  * states test looks.
449
449
  */
450
- [data-ui='notification-center']
451
- > [data-part='feed']
452
- [data-part='item']:not([data-disabled]):hover {
450
+ [data-ui-notification-center] > [data-part-feed] [data-part-item]:not([data-disabled]):hover {
453
451
  background-color: var(--_hover);
454
452
  }
455
453
 
@@ -458,12 +456,12 @@
458
456
  * ring is drawn inward, because the rows touch and an outward ring would be
459
457
  * cut by the neighbours.
460
458
  */
461
- [data-ui='notification-center'] > [data-part='feed'] [data-part='item']:focus-visible {
459
+ [data-ui-notification-center] > [data-part-feed] [data-part-item]:focus-visible {
462
460
  outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
463
461
  outline-offset: calc(var(--slotted-focus-ring-offset, 2px) * -1);
464
462
  }
465
463
 
466
- [data-ui='notification-center'] > [data-part='feed'] [data-part='item'] > [data-part='visual'] {
464
+ [data-ui-notification-center] > [data-part-feed] [data-part-item] > [data-part-visual] {
467
465
  align-items: center;
468
466
  display: flex;
469
467
  grid-column: 1;
@@ -472,10 +470,10 @@
472
470
  }
473
471
 
474
472
  /** Without a visual the words take the column. */
475
- [data-ui='notification-center']
476
- > [data-part='feed']
477
- [data-part='item']:not(:has(> [data-part='visual']))
478
- > [data-part='content'] {
473
+ [data-ui-notification-center]
474
+ > [data-part-feed]
475
+ [data-part-item]:not(:has(> [data-part-visual]))
476
+ > [data-part-content] {
479
477
  grid-column: 1 / 3;
480
478
  }
481
479
 
@@ -504,10 +502,10 @@
504
502
  * the consumer put there. The disc is the wrapper's own background, centred
505
503
  * on the box the glyph is centred in, so the two stay concentric.
506
504
  */
507
- [data-ui='notification-center']
508
- > [data-part='feed']
509
- [data-part='item']
510
- > [data-part='visual']:empty:not([data-tone]) {
505
+ [data-ui-notification-center]
506
+ > [data-part-feed]
507
+ [data-part-item]
508
+ > [data-part-visual]:empty:not([data-tone]) {
511
509
  display: none;
512
510
  }
513
511
 
@@ -517,10 +515,10 @@
517
515
  * rather than percentages of the ray (Chrome paints a `calc(100% - …)`
518
516
  * stop as a ramp several pixels wide).
519
517
  */
520
- [data-ui='notification-center']
521
- > [data-part='feed']
522
- [data-part='item']
523
- > [data-part='visual'][data-tone]:has(> [data-tone-glyph]) {
518
+ [data-ui-notification-center]
519
+ > [data-part-feed]
520
+ [data-part-item]
521
+ > [data-part-visual][data-tone]:has(> [data-tone-glyph]) {
524
522
  --slotted-icon-size: var(--_visual-glyph);
525
523
 
526
524
  align-items: center;
@@ -541,7 +539,7 @@
541
539
  * line and the offset centres that line on the visual — a visual taller
542
540
  * than the line pushes the words down, never the other way.
543
541
  */
544
- [data-ui='notification-center'] > [data-part='feed'] [data-part='item'] > [data-part='content'] {
542
+ [data-ui-notification-center] > [data-part-feed] [data-part-item] > [data-part-content] {
545
543
  display: flex;
546
544
  flex-direction: column;
547
545
  font-size: var(--_item-title-size);
@@ -552,11 +550,11 @@
552
550
  min-inline-size: 0;
553
551
  }
554
552
 
555
- [data-ui='notification-center']
556
- > [data-part='feed']
557
- [data-part='item']
558
- > [data-part='content']
559
- > [data-part='title'] {
553
+ [data-ui-notification-center]
554
+ > [data-part-feed]
555
+ [data-part-item]
556
+ > [data-part-content]
557
+ > [data-part-title] {
560
558
  -webkit-box-orient: vertical;
561
559
  -webkit-line-clamp: var(--slotted-notification-center-title-clamp, 2);
562
560
  color: var(--_text);
@@ -571,11 +569,11 @@
571
569
  }
572
570
 
573
571
  /** Unread says so with weight as well as with the dot and the wash. */
574
- [data-ui='notification-center']
575
- > [data-part='feed']
576
- [data-part='item']:not([data-read])
577
- > [data-part='content']
578
- > [data-part='title'] {
572
+ [data-ui-notification-center]
573
+ > [data-part-feed]
574
+ [data-part-item]:not([data-read])
575
+ > [data-part-content]
576
+ > [data-part-title] {
579
577
  font-weight: var(--slotted-font-weight-semibold, 600);
580
578
  }
581
579
 
@@ -584,38 +582,38 @@
584
582
  * opens the thing, and the controls stand above it so they take their own
585
583
  * press. The ring stays on the article, which is what has focus.
586
584
  */
587
- [data-ui='notification-center']
588
- > [data-part='feed']
589
- [data-part='item']
590
- > [data-part='content']
591
- > a[data-part='title']::after {
585
+ [data-ui-notification-center]
586
+ > [data-part-feed]
587
+ [data-part-item]
588
+ > [data-part-content]
589
+ > a[data-part-title]::after {
592
590
  content: '';
593
591
  inset: 0;
594
592
  position: absolute;
595
593
  }
596
594
 
597
- [data-ui='notification-center']
598
- > [data-part='feed']
599
- [data-part='item']
600
- > [data-part='content']
601
- > a[data-part='title']:not([data-disabled]):hover {
595
+ [data-ui-notification-center]
596
+ > [data-part-feed]
597
+ [data-part-item]
598
+ > [data-part-content]
599
+ > a[data-part-title]:not([data-disabled]):hover {
602
600
  text-decoration: underline;
603
601
  text-underline-offset: 0.15em;
604
602
  }
605
603
 
606
- [data-ui='notification-center']
607
- > [data-part='feed']
608
- [data-part='item']
609
- > [data-part='content']
610
- > a[data-part='title']:focus-visible {
604
+ [data-ui-notification-center]
605
+ > [data-part-feed]
606
+ [data-part-item]
607
+ > [data-part-content]
608
+ > a[data-part-title]:focus-visible {
611
609
  outline: none;
612
610
  }
613
611
 
614
- [data-ui='notification-center']
615
- > [data-part='feed']
616
- [data-part='item']
617
- > [data-part='content']
618
- > [data-part='description'] {
612
+ [data-ui-notification-center]
613
+ > [data-part-feed]
614
+ [data-part-item]
615
+ > [data-part-content]
616
+ > [data-part-description] {
619
617
  -webkit-box-orient: vertical;
620
618
  -webkit-line-clamp: var(--slotted-notification-center-description-clamp, 3);
621
619
  color: var(--_muted);
@@ -627,11 +625,11 @@
627
625
  overflow-wrap: anywhere;
628
626
  }
629
627
 
630
- [data-ui='notification-center']
631
- > [data-part='feed']
632
- [data-part='item']
633
- > [data-part='content']
634
- > [data-part='time'] {
628
+ [data-ui-notification-center]
629
+ > [data-part-feed]
630
+ [data-part-item]
631
+ > [data-part-content]
632
+ > [data-part-time] {
635
633
  color: var(--_muted);
636
634
  font-size: var(--_meta-size);
637
635
  font-variant-numeric: tabular-nums;
@@ -639,11 +637,11 @@
639
637
  }
640
638
 
641
639
  /** The consumer's controls for the item, above the covering link. */
642
- [data-ui='notification-center']
643
- > [data-part='feed']
644
- [data-part='item']
645
- > [data-part='content']
646
- > [data-part='actions'] {
640
+ [data-ui-notification-center]
641
+ > [data-part-feed]
642
+ [data-part-item]
643
+ > [data-part-content]
644
+ > [data-part-actions] {
647
645
  align-items: center;
648
646
  display: flex;
649
647
  flex-wrap: wrap;
@@ -655,7 +653,7 @@
655
653
 
656
654
  /* ── The family's controls ───────────────────────────────────────────── */
657
655
 
658
- [data-ui='notification-center'] > [data-part='feed'] [data-part='item'] > [data-part='controls'] {
656
+ [data-ui-notification-center] > [data-part-feed] [data-part-item] > [data-part-controls] {
659
657
  display: flex;
660
658
  gap: var(--slotted-space-1, 0.125rem);
661
659
  grid-column: 3;
@@ -674,10 +672,10 @@
674
672
  * unread, `dot` while read (the control offers to mark it unread), and `x`
675
673
  * to dismiss; the control hands its icon box the glyph size.
676
674
  */
677
- [data-ui='notification-center']
678
- > [data-part='feed']
679
- [data-part='item']
680
- > [data-part='controls']
675
+ [data-ui-notification-center]
676
+ > [data-part-feed]
677
+ [data-part-item]
678
+ > [data-part-controls]
681
679
  > button {
682
680
  --slotted-icon-size: var(--_glyph);
683
681
 
@@ -700,10 +698,10 @@
700
698
  background-color var(--_duration) var(--_easing);
701
699
  }
702
700
 
703
- [data-ui='notification-center']
704
- > [data-part='feed']
705
- [data-part='item']
706
- > [data-part='controls']
701
+ [data-ui-notification-center]
702
+ > [data-part-feed]
703
+ [data-part-item]
704
+ > [data-part-controls]
707
705
  > button::before {
708
706
  /* The halo: the target minimum, centred on the box, taking the press and drawing nothing. */
709
707
  block-size: max(var(--_control), var(--slotted-target-min, 24px));
@@ -715,58 +713,58 @@
715
713
  translate: -50% -50%;
716
714
  }
717
715
 
718
- [data-ui='notification-center']
719
- > [data-part='feed']
720
- [data-part='item']
721
- > [data-part='controls']
716
+ [data-ui-notification-center]
717
+ > [data-part-feed]
718
+ [data-part-item]
719
+ > [data-part-controls]
722
720
  > button:enabled:hover {
723
721
  background-color: var(--_hover);
724
722
  color: var(--_text);
725
723
  }
726
724
 
727
- [data-ui='notification-center']
728
- > [data-part='feed']
729
- [data-part='item']
730
- > [data-part='controls']
725
+ [data-ui-notification-center]
726
+ > [data-part-feed]
727
+ [data-part-item]
728
+ > [data-part-controls]
731
729
  > button:enabled:active {
732
730
  background-color: var(--_active);
733
731
  }
734
732
 
735
- [data-ui='notification-center']
736
- > [data-part='feed']
737
- [data-part='item']
738
- > [data-part='controls']
733
+ [data-ui-notification-center]
734
+ > [data-part-feed]
735
+ [data-part-item]
736
+ > [data-part-controls]
739
737
  > button:focus-visible {
740
738
  outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
741
739
  outline-offset: var(--slotted-focus-ring-offset, 2px);
742
740
  }
743
741
 
744
742
  /** The `controls` axis: a product with its own triage keeps one of the two, or neither. */
745
- [data-ui='notification-center'][data-controls='read']
746
- > [data-part='feed']
747
- [data-part='item']
748
- > [data-part='controls']
749
- > [data-part='dismiss'],
750
- [data-ui='notification-center'][data-controls='dismiss']
751
- > [data-part='feed']
752
- [data-part='item']
753
- > [data-part='controls']
754
- > [data-part='read-toggle'],
755
- [data-ui='notification-center'][data-controls='none']
756
- > [data-part='feed']
757
- [data-part='item']
758
- > [data-part='controls'] {
743
+ [data-ui-notification-center][data-controls='read']
744
+ > [data-part-feed]
745
+ [data-part-item]
746
+ > [data-part-controls]
747
+ > [data-part-dismiss],
748
+ [data-ui-notification-center][data-controls='dismiss']
749
+ > [data-part-feed]
750
+ [data-part-item]
751
+ > [data-part-controls]
752
+ > [data-part-read-toggle],
753
+ [data-ui-notification-center][data-controls='none']
754
+ > [data-part-feed]
755
+ [data-part-item]
756
+ > [data-part-controls] {
759
757
  display: none;
760
758
  }
761
759
 
762
760
  /* ── Loading, empty and the footer ───────────────────────────────────── */
763
761
 
764
762
  /** The waiting rows are skeleton's; the family gives them the item's inset and rule, and no wash. */
765
- [data-ui='notification-center'] > [data-part='feed'] > [data-part='item'][aria-hidden] {
763
+ [data-ui-notification-center] > [data-part-feed] > [data-part-item][aria-hidden] {
766
764
  background-color: transparent;
767
765
  }
768
766
 
769
- [data-ui='notification-center'] > [data-part='empty'] {
767
+ [data-ui-notification-center] > [data-part-empty] {
770
768
  color: var(--_muted);
771
769
  display: grid;
772
770
  font-size: var(--_meta-size);
@@ -778,7 +776,7 @@
778
776
  text-align: center;
779
777
  }
780
778
 
781
- [data-ui='notification-center'] > [data-part='footer'] {
779
+ [data-ui-notification-center] > [data-part-footer] {
782
780
  align-items: center;
783
781
  border-block-start: var(--_rule-size) solid var(--_rule);
784
782
  display: flex;
@@ -799,14 +797,11 @@
799
797
  * the title.
800
798
  */
801
799
  @container notification-center (max-width: 319px) {
802
- [data-ui='notification-center'] > [data-part='feed'] [data-part='item'] {
800
+ [data-ui-notification-center] > [data-part-feed] [data-part-item] {
803
801
  grid-template-columns: auto minmax(0, 1fr);
804
802
  }
805
803
 
806
- [data-ui='notification-center']
807
- > [data-part='feed']
808
- [data-part='item']
809
- > [data-part='controls'] {
804
+ [data-ui-notification-center] > [data-part-feed] [data-part-item] > [data-part-controls] {
810
805
  grid-column: 2;
811
806
  justify-content: flex-end;
812
807
  margin-block-start: var(--slotted-space-2, 0.25rem);
@@ -827,10 +822,7 @@
827
822
  * the halo already reached there.
828
823
  */
829
824
  @media (pointer: coarse) {
830
- [data-ui='notification-center']
831
- > [data-part='feed']
832
- [data-part='item']
833
- > [data-part='controls'] {
825
+ [data-ui-notification-center] > [data-part-feed] [data-part-item] > [data-part-controls] {
834
826
  --_control: var(--slotted-target-comfortable, 44px);
835
827
 
836
828
  margin-block-start: calc((var(--_visual) - var(--_control)) / 2);
@@ -846,7 +838,7 @@
846
838
  * carries unread.
847
839
  */
848
840
  @media (forced-colors: active) {
849
- [data-ui='notification-center'] [data-part='count'] {
841
+ [data-ui-notification-center] [data-part-count] {
850
842
  background-color: Highlight;
851
843
  border-color: Highlight;
852
844
  color: HighlightText;
@@ -70,6 +70,9 @@
70
70
  "--slotted-tone-danger-solid",
71
71
  "--slotted-tone-danger-surface",
72
72
  "--slotted-tone-danger-text",
73
+ "--slotted-tone-info-solid",
74
+ "--slotted-tone-info-surface",
75
+ "--slotted-tone-info-text",
73
76
  "--slotted-tone-secondary-solid",
74
77
  "--slotted-tone-secondary-subtle-active",
75
78
  "--slotted-tone-secondary-subtle-hover",