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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (176) hide show
  1. package/package.json +1 -1
  2. package/src/accordion/accordion.css +10 -10
  3. package/src/action-bar/action-bar.css +31 -32
  4. package/src/action-sheet/action-sheet.css +36 -36
  5. package/src/alert/alert.css +43 -35
  6. package/src/alert/alert.tokens.json +5 -0
  7. package/src/app-shell/app-shell.css +356 -301
  8. package/src/aspect-ratio/aspect-ratio.css +9 -9
  9. package/src/attachment/attachment.css +91 -99
  10. package/src/avatar/avatar.css +71 -41
  11. package/src/avatar/avatar.tokens.json +7 -0
  12. package/src/avatar-group/avatar-group.css +21 -22
  13. package/src/badge/badge.css +45 -37
  14. package/src/badge/badge.tokens.json +5 -0
  15. package/src/breadcrumb/breadcrumb.css +37 -37
  16. package/src/button/button.css +139 -64
  17. package/src/button/button.tokens.json +10 -0
  18. package/src/button-group/button-group.css +76 -72
  19. package/src/button-group/button-group.tokens.json +2 -0
  20. package/src/calendar/calendar.css +93 -103
  21. package/src/card/card.css +54 -61
  22. package/src/carousel/carousel.css +150 -161
  23. package/src/cascader/cascader.css +152 -153
  24. package/src/cascader/cascader.tokens.json +1 -0
  25. package/src/chart/chart.css +242 -239
  26. package/src/chart/chart.tokens.json +1 -0
  27. package/src/checkbox/checkbox.css +119 -124
  28. package/src/checkbox-group/checkbox-group.css +7 -7
  29. package/src/code-block/code-block.css +81 -85
  30. package/src/collapsible/collapsible.css +69 -76
  31. package/src/color-picker/color-picker.css +83 -91
  32. package/src/column-manager/column-manager.css +106 -114
  33. package/src/combobox/combobox.css +132 -107
  34. package/src/combobox/combobox.tokens.json +1 -0
  35. package/src/command-palette/command-palette.css +84 -90
  36. package/src/container/container.css +24 -24
  37. package/src/context-menu/context-menu.css +8 -8
  38. package/src/currency-field/currency-field.css +210 -88
  39. package/src/currency-field/currency-field.tokens.json +13 -0
  40. package/src/dashboard-grid/dashboard-grid.css +148 -116
  41. package/src/data-grid/data-grid.css +504 -469
  42. package/src/data-grid/data-grid.tokens.json +2 -0
  43. package/src/data-list/data-list.css +81 -70
  44. package/src/data-list/data-list.tokens.json +2 -1
  45. package/src/date-field/date-field.css +55 -52
  46. package/src/date-field/date-field.tokens.json +1 -0
  47. package/src/date-picker/date-picker.css +40 -42
  48. package/src/date-range-picker/date-range-picker.css +114 -118
  49. package/src/datetime-field/datetime-field.css +78 -80
  50. package/src/datetime-field/datetime-field.tokens.json +1 -0
  51. package/src/datetime-picker/datetime-picker.css +61 -63
  52. package/src/datetime-range-picker/datetime-range-picker.css +149 -156
  53. package/src/description-list/description-list.css +61 -64
  54. package/src/detail-panel/detail-panel.css +70 -70
  55. package/src/dialog/dialog.css +334 -153
  56. package/src/dialog/dialog.tokens.json +5 -0
  57. package/src/divider/divider.css +18 -18
  58. package/src/drawer/drawer.css +186 -209
  59. package/src/entity-picker/entity-picker.css +238 -241
  60. package/src/entity-picker/entity-picker.tokens.json +1 -0
  61. package/src/event-calendar/event-calendar.css +343 -385
  62. package/src/field/field.css +74 -78
  63. package/src/field-group/field-group.css +22 -25
  64. package/src/filter-bar/filter-bar.css +193 -209
  65. package/src/form/form.css +34 -24
  66. package/src/form/form.tokens.json +1 -0
  67. package/src/fullscreen/fullscreen.css +24 -25
  68. package/src/grid/grid.css +28 -28
  69. package/src/highlight/highlight.css +6 -6
  70. package/src/hover-card/hover-card.css +6 -6
  71. package/src/icon/icon.css +19 -15
  72. package/src/icon/icon.tokens.json +1 -0
  73. package/src/image/image.css +39 -39
  74. package/src/import-export-center/import-export-center.css +135 -156
  75. package/src/inline/inline.css +27 -27
  76. package/src/inline-message/inline-message.css +52 -28
  77. package/src/inline-message/inline-message.tokens.json +4 -0
  78. package/src/kbd/kbd.css +30 -26
  79. package/src/link/link.css +15 -15
  80. package/src/list/list.css +44 -17
  81. package/src/list/list.tokens.json +4 -0
  82. package/src/list-item/list-item.css +80 -66
  83. package/src/list-item/list-item.tokens.json +7 -0
  84. package/src/listbox/listbox.css +56 -59
  85. package/src/loading-overlay/loading-overlay.css +75 -92
  86. package/src/markdown/markdown.css +17 -17
  87. package/src/menu/menu.css +83 -63
  88. package/src/menubar/menubar.css +13 -13
  89. package/src/message/message.css +182 -202
  90. package/src/message/message.tokens.json +5 -0
  91. package/src/message-scroller/message-scroller.css +41 -42
  92. package/src/multi-select/multi-select.css +152 -145
  93. package/src/multi-select/multi-select.tokens.json +1 -0
  94. package/src/navigation-menu/navigation-menu.css +167 -188
  95. package/src/notification-center/notification-center.css +140 -148
  96. package/src/notification-center/notification-center.tokens.json +3 -0
  97. package/src/number-field/number-field.css +84 -83
  98. package/src/number-field/number-field.tokens.json +1 -0
  99. package/src/otp-input/otp-input.css +67 -57
  100. package/src/otp-input/otp-input.tokens.json +1 -0
  101. package/src/page/page.css +23 -23
  102. package/src/page-header/page-header.css +268 -281
  103. package/src/page-header/page-header.tokens.json +1 -0
  104. package/src/pagination/pagination.css +68 -72
  105. package/src/popover/popover.css +40 -49
  106. package/src/progress-indicator/progress-indicator.css +177 -120
  107. package/src/progress-indicator/progress-indicator.tokens.json +1 -1
  108. package/src/prompt-composer/prompt-composer.css +221 -102
  109. package/src/prompt-composer/prompt-composer.tokens.json +15 -0
  110. package/src/prose/prose.css +71 -75
  111. package/src/radio-group/radio-group.css +98 -103
  112. package/src/rating/rating.css +136 -132
  113. package/src/rating/rating.tokens.json +1 -0
  114. package/src/result-state/result-state.css +74 -77
  115. package/src/runtime-properties.mjs +2 -0
  116. package/src/saved-views/saved-views.css +41 -47
  117. package/src/scroll-area/scroll-area.css +39 -32
  118. package/src/section/section.css +161 -41
  119. package/src/section/section.tokens.json +7 -2
  120. package/src/segmented-control/segmented-control.css +254 -97
  121. package/src/segmented-control/segmented-control.tokens.json +15 -11
  122. package/src/select/select.css +118 -117
  123. package/src/select/select.tokens.json +1 -0
  124. package/src/side-navigation/side-navigation.css +179 -182
  125. package/src/side-navigation/side-navigation.tokens.json +1 -0
  126. package/src/skeleton/skeleton.css +47 -48
  127. package/src/slider/slider.css +86 -88
  128. package/src/sparkline/sparkline.css +62 -40
  129. package/src/sparkline/sparkline.tokens.json +2 -0
  130. package/src/spinner/spinner.css +39 -182
  131. package/src/spinner/spinner.tokens.json +0 -2
  132. package/src/split-button/split-button.css +30 -31
  133. package/src/split-button/split-button.tokens.json +1 -0
  134. package/src/splitter/splitter.css +35 -35
  135. package/src/stack/stack.css +24 -24
  136. package/src/stat-card/stat-card.css +341 -224
  137. package/src/stat-card/stat-card.tokens.json +3 -0
  138. package/src/status-indicator/status-indicator.css +28 -28
  139. package/src/stepper/stepper.css +58 -62
  140. package/src/switch/switch.css +86 -92
  141. package/src/table/table.css +310 -165
  142. package/src/table/table.tokens.json +6 -0
  143. package/src/table-of-contents/table-of-contents.css +51 -54
  144. package/src/tabs/tabs.css +330 -302
  145. package/src/tabs/tabs.tokens.json +8 -5
  146. package/src/tag/tag.css +79 -71
  147. package/src/tag/tag.tokens.json +9 -0
  148. package/src/tags-input/tags-input.css +145 -82
  149. package/src/tags-input/tags-input.tokens.json +7 -1
  150. package/src/text-field/text-field.css +132 -136
  151. package/src/text-field/text-field.tokens.json +1 -0
  152. package/src/textarea/textarea.css +31 -28
  153. package/src/textarea/textarea.tokens.json +1 -0
  154. package/src/time-field/time-field.css +72 -69
  155. package/src/time-field/time-field.tokens.json +1 -0
  156. package/src/time-picker/time-picker.css +56 -58
  157. package/src/time-range-picker/time-range-picker.css +126 -133
  158. package/src/timeline/timeline.css +254 -266
  159. package/src/timeline/timeline.tokens.json +5 -0
  160. package/src/toast/toast.css +89 -90
  161. package/src/toast/toast.tokens.json +5 -0
  162. package/src/toggle/toggle.css +62 -25
  163. package/src/toggle/toggle.tokens.json +8 -0
  164. package/src/toggle-group/toggle-group.css +106 -60
  165. package/src/toggle-group/toggle-group.tokens.json +10 -0
  166. package/src/toolbar/toolbar.css +30 -35
  167. package/src/tooltip/tooltip.css +26 -26
  168. package/src/top-navigation/top-navigation.css +243 -259
  169. package/src/tour/tour.css +51 -60
  170. package/src/transfer/transfer.css +160 -164
  171. package/src/tree/tree.css +103 -111
  172. package/src/typography/typography.css +40 -36
  173. package/src/typography/typography.tokens.json +1 -0
  174. package/src/upload/upload.css +224 -224
  175. package/src/visually-hidden/visually-hidden.css +1 -1
  176. package/src/wizard/wizard.css +185 -197
@@ -5,7 +5,7 @@
5
5
  * the family draws every interaction over. The table is a view of the plot,
6
6
  * shown in the plot's own box.
7
7
  *
8
- * ┌ figure [data-ui=chart] ─────────────────────────────────────────┐
8
+ * ┌ figure [data-ui-chart] ─────────────────────────────────────────┐
9
9
  * │ header title (help) · description actions toolbar │
10
10
  * │ legend ▬ Revenue ■ Cost ● Visits +3 │
11
11
  * │ plot ┌ canvas (engine) · table-region (the table view) ───┐ │
@@ -24,7 +24,7 @@
24
24
  * resolves them at the plot, so a scheme, a density, a palette or a token a
25
25
  * consumer overrides on a wrapper reaches the marks through the cascade.
26
26
  */
27
- [data-ui='chart'] {
27
+ [data-ui-chart] {
28
28
  --_gap: var(--slotted-chart-gap, var(--slotted-space-5, 0.75rem));
29
29
  --_plot-size: var(--slotted-chart-plot-block-size, calc(var(--slotted-space-12, 4rem) * 4));
30
30
  --_radius: var(--slotted-chart-radius, var(--slotted-radius-md, 6px));
@@ -51,6 +51,7 @@
51
51
  --_chart-tone-accent: var(--slotted-tone-accent-text, CanvasText);
52
52
  --_chart-tone-secondary: var(--slotted-tone-secondary-text, CanvasText);
53
53
  --_chart-tone-success: var(--slotted-tone-success-text, CanvasText);
54
+ --_chart-tone-info: var(--slotted-tone-info-text, CanvasText);
54
55
  --_chart-tone-warning: var(--slotted-tone-warning-text, CanvasText);
55
56
  --_chart-tone-danger: var(--slotted-tone-danger-text, CanvasText);
56
57
  --_chart-overflow: var(--slotted-text-muted, GrayText);
@@ -98,11 +99,11 @@
98
99
  /* Three heights on the space scale's top step: 12, 16 and 24 rem. A plot
99
100
  is content, not a control, so the height does not follow density; what
100
101
  density moves is the inset around the marks and the type on the axes. */
101
- [data-ui='chart'][data-size='sm'] {
102
+ [data-ui-chart][data-size='sm'] {
102
103
  --_plot-size: var(--slotted-chart-plot-block-size-sm, calc(var(--slotted-space-12, 4rem) * 3));
103
104
  }
104
105
 
105
- [data-ui='chart'][data-size='lg'] {
106
+ [data-ui-chart][data-size='lg'] {
106
107
  --_plot-size: var(--slotted-chart-plot-block-size-lg, calc(var(--slotted-space-12, 4rem) * 6));
107
108
  }
108
109
 
@@ -117,7 +118,7 @@
117
118
  * are mixed in CSS from tokens the theme already owns, so they follow every
118
119
  * scheme and brand with no scale of their own.
119
120
  */
120
- [data-ui='chart'][data-palette='sequential'] {
121
+ [data-ui-chart][data-palette='sequential'] {
121
122
  --_hue: var(--slotted-chart-sequential-color, var(--slotted-tone-accent-text, CanvasText));
122
123
  --_chart-slot-1: var(--_hue);
123
124
  --_chart-slot-2: color-mix(in oklab, var(--_hue) 76%, var(--_chart-surface));
@@ -129,7 +130,7 @@
129
130
  --_chart-slot-8: color-mix(in oklab, var(--_hue) 10%, var(--_chart-surface));
130
131
  }
131
132
 
132
- [data-ui='chart'][data-palette='focus'] {
133
+ [data-ui-chart][data-palette='focus'] {
133
134
  --_muted: var(--slotted-text-muted, GrayText);
134
135
  --_chart-slot-1: var(--slotted-chart-focus-color, var(--slotted-tone-accent-text, CanvasText));
135
136
  --_chart-slot-2: color-mix(in oklab, var(--_muted) 70%, var(--_chart-surface));
@@ -151,7 +152,7 @@
151
152
  * never less than its size step — so tiles in one row end on one line
152
153
  * whatever their titles and legends hold.
153
154
  */
154
- [data-ui='chart'][data-variant='card'] {
155
+ [data-ui-chart][data-variant='card'] {
155
156
  --_chart-surface: var(--slotted-chart-surface, var(--slotted-surface-raised, Canvas));
156
157
 
157
158
  background-color: var(--_chart-surface);
@@ -167,7 +168,7 @@
167
168
  `description` and `actions` are also parts of the families a plot
168
169
  composes — `result-state` in an empty or failed plot — and a bare
169
170
  descendant selector restyled theirs. */
170
- [data-ui='chart'] > [data-part='header'] {
171
+ [data-ui-chart] > [data-part-header] {
171
172
  align-items: start;
172
173
  display: flex;
173
174
  gap: var(--slotted-space-4, 0.5rem);
@@ -175,7 +176,7 @@
175
176
  }
176
177
 
177
178
  /* The heading block: title and help on one line, the description under. */
178
- [data-ui='chart'] > [data-part='header'] > :first-child {
179
+ [data-ui-chart] > [data-part-header] > :first-child {
179
180
  align-content: start;
180
181
  display: grid;
181
182
  flex: 1 1 auto;
@@ -183,14 +184,14 @@
183
184
  min-inline-size: 0;
184
185
  }
185
186
 
186
- [data-ui='chart'] > [data-part='header'] > :first-child > :first-child {
187
+ [data-ui-chart] > [data-part-header] > :first-child > :first-child {
187
188
  align-items: center;
188
189
  display: flex;
189
190
  gap: var(--slotted-space-2, 0.25rem);
190
191
  min-inline-size: 0;
191
192
  }
192
193
 
193
- [data-ui='chart'] > [data-part='header'] [data-part='title'] {
194
+ [data-ui-chart] > [data-part-header] [data-part-title] {
194
195
  color: var(--slotted-text, CanvasText);
195
196
  font-family: var(
196
197
  --slotted-font-family-heading,
@@ -203,7 +204,7 @@
203
204
  overflow-wrap: anywhere;
204
205
  }
205
206
 
206
- [data-ui='chart'] > [data-part='header'] [data-part='description'] {
207
+ [data-ui-chart] > [data-part-header] [data-part-description] {
207
208
  color: var(--slotted-text-muted, GrayText);
208
209
  font-size: var(--slotted-font-size-sm, 0.8125rem);
209
210
  line-height: var(--slotted-line-height-sm, 1.45);
@@ -213,22 +214,22 @@
213
214
  /* A tile's heading is one line of title and one of description, cut with
214
215
  an ellipsis and whole in the DOM, so tiles in a row keep one header
215
216
  height. The full text stays the figure's name and description. */
216
- [data-ui='chart'][data-variant='card']
217
- > [data-part='header']
218
- :is([data-part='title'], [data-part='description']) {
217
+ [data-ui-chart][data-variant='card']
218
+ > [data-part-header]
219
+ :is([data-part-title], [data-part-description]) {
219
220
  overflow: hidden;
220
221
  text-overflow: ellipsis;
221
222
  white-space: nowrap;
222
223
  }
223
224
 
224
- [data-ui='chart'][data-variant='card'] > [data-part='header'] [data-part='title'] {
225
+ [data-ui-chart][data-variant='card'] > [data-part-header] [data-part-title] {
225
226
  font-size: var(--slotted-font-size-md, 0.875rem);
226
227
  line-height: var(--slotted-line-height-md, 1.5);
227
228
  }
228
229
 
229
230
  /* A tile keeps the description's line whether it has one or not, so the
230
231
  legends and the plots of a row start on one line too. */
231
- [data-ui='chart'][data-variant='card'] > [data-part='header'] > :first-child {
232
+ [data-ui-chart][data-variant='card'] > [data-part-header] > :first-child {
232
233
  min-block-size: calc(
233
234
  var(--slotted-font-size-md, 0.875rem) * var(--slotted-line-height-md, 1.5) +
234
235
  var(--slotted-space-1, 0.125rem) + var(--slotted-font-size-sm, 0.8125rem) *
@@ -236,7 +237,7 @@
236
237
  );
237
238
  }
238
239
 
239
- [data-ui='chart'] > [data-part='header'] > [data-part='actions'] {
240
+ [data-ui-chart] > [data-part-header] > [data-part-actions] {
240
241
  align-items: center;
241
242
  display: flex;
242
243
  flex: none;
@@ -252,7 +253,7 @@
252
253
  * hovered or holds focus (`toolbar="hover"`), and never where the device
253
254
  * cannot hover.
254
255
  */
255
- [data-ui='chart'] > [data-part='header'] > [data-part='toolbar'] {
256
+ [data-ui-chart] > [data-part-header] > [data-part-toolbar] {
256
257
  align-items: center;
257
258
  display: flex;
258
259
  flex: none;
@@ -269,38 +270,38 @@
269
270
  transition: opacity var(--slotted-duration-short) var(--slotted-easing-standard);
270
271
  }
271
272
 
272
- [data-ui='chart'][data-toolbar='hover'] > [data-part='header'] > [data-part='toolbar'] {
273
+ [data-ui-chart][data-toolbar='hover'] > [data-part-header] > [data-part-toolbar] {
273
274
  opacity: 0;
274
275
  }
275
276
 
276
277
  /* While the plot waits, fails or has no data the toolbar keeps its width —
277
278
  the title and the description wrap where they will wrap once it is ready —
278
279
  and draws nothing: an action nobody can press yet is absent. */
279
- [data-ui='chart'] > [data-part='header'] > [data-part='toolbar'][data-waiting] {
280
+ [data-ui-chart] > [data-part-header] > [data-part-toolbar][data-waiting] {
280
281
  visibility: hidden;
281
282
  }
282
283
 
283
284
  /* A chart has no disabled state; the guard is the precedence rule every
284
285
  hover in the library states (`packages/styles/src/states.test.mjs`). */
285
- [data-ui='chart'][data-toolbar='hover']:is(:hover, :focus-within):not([data-disabled])
286
- > [data-part='header']
287
- > [data-part='toolbar'] {
286
+ [data-ui-chart][data-toolbar='hover']:is(:hover, :focus-within):not([data-disabled])
287
+ > [data-part-header]
288
+ > [data-part-toolbar] {
288
289
  opacity: 1;
289
290
  }
290
291
 
291
292
  @media (hover: none) {
292
- [data-ui='chart'][data-toolbar='hover'] > [data-part='header'] > [data-part='toolbar'] {
293
+ [data-ui-chart][data-toolbar='hover'] > [data-part-header] > [data-part-toolbar] {
293
294
  opacity: 1;
294
295
  }
295
296
  }
296
297
 
297
- [data-ui='chart']
298
+ [data-ui-chart]
298
299
  :is(
299
- [data-part='zoom-reset'],
300
- [data-part='view-toggle'],
301
- [data-part='fullscreen-toggle'],
302
- [data-part='menu-trigger'],
303
- [data-part='help']
300
+ [data-part-zoom-reset],
301
+ [data-part-view-toggle],
302
+ [data-part-fullscreen-toggle],
303
+ [data-part-menu-trigger],
304
+ [data-part-help]
304
305
  ) {
305
306
  --_box: var(--slotted-control-height-sm, 1.75rem);
306
307
 
@@ -322,7 +323,7 @@
322
323
  }
323
324
 
324
325
  /* Help sits beside the words it explains, a step smaller than the toolbar. */
325
- [data-ui='chart'] [data-part='help'] {
326
+ [data-ui-chart] [data-part-help] {
326
327
  --_box: var(--slotted-control-inner-size-sm, 1.25rem);
327
328
 
328
329
  /* It hangs past the title's line by the difference rather than growing
@@ -332,35 +333,35 @@
332
333
  );
333
334
  }
334
335
 
335
- [data-ui='chart']
336
+ [data-ui-chart]
336
337
  :is(
337
- [data-part='zoom-reset'],
338
- [data-part='view-toggle'],
339
- [data-part='fullscreen-toggle'],
340
- [data-part='menu-trigger'],
341
- [data-part='help']
338
+ [data-part-zoom-reset],
339
+ [data-part-view-toggle],
340
+ [data-part-fullscreen-toggle],
341
+ [data-part-menu-trigger],
342
+ [data-part-help]
342
343
  ):hover:not(:disabled) {
343
344
  background-color: var(--slotted-tone-secondary-subtle-hover, ButtonFace);
344
345
  color: var(--slotted-text, CanvasText);
345
346
  }
346
347
 
347
348
  /* On: the table standing in the plot, the menu or the help open. */
348
- [data-ui='chart']
349
- :is([data-part='view-toggle'], [data-part='menu-trigger'], [data-part='help'])[data-pressed],
350
- [data-ui='chart'] :is([data-part='menu-trigger'], [data-part='help'])[data-open] {
349
+ [data-ui-chart]
350
+ :is([data-part-view-toggle], [data-part-menu-trigger], [data-part-help])[data-pressed],
351
+ [data-ui-chart] :is([data-part-menu-trigger], [data-part-help])[data-open] {
351
352
  background-color: var(--slotted-tone-secondary-surface, ButtonFace);
352
353
  color: var(--slotted-text, CanvasText);
353
354
  }
354
355
 
355
- [data-ui='chart']
356
+ [data-ui-chart]
356
357
  :is(
357
- [data-part='zoom-reset'],
358
- [data-part='view-toggle'],
359
- [data-part='fullscreen-toggle'],
360
- [data-part='menu-trigger'],
361
- [data-part='help'],
362
- [data-part='legend-more'],
363
- [data-part='menu-item']
358
+ [data-part-zoom-reset],
359
+ [data-part-view-toggle],
360
+ [data-part-fullscreen-toggle],
361
+ [data-part-menu-trigger],
362
+ [data-part-help],
363
+ [data-part-legend-more],
364
+ [data-part-menu-item]
364
365
  ):focus-visible {
365
366
  outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
366
367
  outline-offset: 0;
@@ -371,7 +372,7 @@
371
372
  * every floating layer in the library. They are placed in the viewport's
372
373
  * coordinates by the binding, through the chart's two runtime properties.
373
374
  */
374
- [data-ui='chart'] :is([data-part='menu'], [data-part='help-content']) {
375
+ [data-ui-chart] :is([data-part-menu], [data-part-help-content]) {
375
376
  background-color: var(--slotted-surface-raised, Canvas);
376
377
  border: var(--slotted-border-width-thin, 1px) solid var(--slotted-border-subtle, CanvasText);
377
378
  border-radius: var(--slotted-radius-md, 6px);
@@ -389,26 +390,26 @@
389
390
  z-index: var(--slotted-z-index-popover, 1100);
390
391
  }
391
392
 
392
- [data-ui='chart'] [data-part='menu'] {
393
+ [data-ui-chart] [data-part-menu] {
393
394
  display: grid;
394
395
  min-inline-size: 11rem;
395
396
  padding: var(--slotted-space-2, 0.25rem);
396
397
  }
397
398
 
398
- [data-ui='chart'] [data-part='menu']:not(:popover-open, [data-open]) {
399
+ [data-ui-chart] [data-part-menu]:not(:popover-open, [data-open]) {
399
400
  display: none;
400
401
  }
401
402
 
402
- [data-ui='chart'] [data-part='help-content'] {
403
+ [data-ui-chart] [data-part-help-content] {
403
404
  padding-block: var(--slotted-space-4, 0.5rem);
404
405
  padding-inline: var(--slotted-space-5, 0.75rem);
405
406
  }
406
407
 
407
- [data-ui='chart'] [data-part='help-content']:not(:popover-open, [data-open]) {
408
+ [data-ui-chart] [data-part-help-content]:not(:popover-open, [data-open]) {
408
409
  display: none;
409
410
  }
410
411
 
411
- [data-ui='chart'] [data-part='menu-item'] {
412
+ [data-ui-chart] [data-part-menu-item] {
412
413
  align-items: center;
413
414
  background: transparent;
414
415
  border: 0;
@@ -425,11 +426,11 @@
425
426
 
426
427
  /* The table and full-screen controls are in the toolbar; the menu holds
427
428
  them only where the toolbar gives them up (see Narrow). */
428
- [data-ui='chart'] [data-part='menu-item']:is([data-action='view'], [data-action='fullscreen']) {
429
+ [data-ui-chart] [data-part-menu-item]:is([data-action='view'], [data-action='fullscreen']) {
429
430
  display: none;
430
431
  }
431
432
 
432
- [data-ui='chart'] [data-part='menu-item']:hover:not(:disabled) {
433
+ [data-ui-chart] [data-part-menu-item]:hover:not(:disabled) {
433
434
  background-color: var(--slotted-tone-secondary-subtle-hover, ButtonFace);
434
435
  }
435
436
 
@@ -438,7 +439,7 @@
438
439
  /* One line: what does not fit waits behind `legend-more`, so a legend of
439
440
  three and a legend of twelve are the same height. `legendOverflow="wrap"`
440
441
  lets a chart that owns its own page wrap instead. */
441
- [data-ui='chart'] [data-part='legend'] {
442
+ [data-ui-chart] [data-part-legend] {
442
443
  align-items: center;
443
444
  display: flex;
444
445
  flex: none;
@@ -455,7 +456,7 @@
455
456
  padding: 0;
456
457
  }
457
458
 
458
- [data-ui='chart'][data-legend-overflow='wrap'] [data-part='legend'] {
459
+ [data-ui-chart][data-legend-overflow='wrap'] [data-part-legend] {
459
460
  flex-wrap: wrap;
460
461
  overflow: visible;
461
462
  }
@@ -467,53 +468,57 @@
467
468
  * muted step with a dash of its own. The legend, the markers and the
468
469
  * tooltip read the palette the root declares, as the engine does.
469
470
  */
470
- [data-ui='chart'] [data-slot='1'] {
471
+ [data-ui-chart] [data-slot='1'] {
471
472
  --_series: var(--_chart-slot-1);
472
473
  }
473
- [data-ui='chart'] [data-slot='2'] {
474
+ [data-ui-chart] [data-slot='2'] {
474
475
  --_series: var(--_chart-slot-2);
475
476
  }
476
- [data-ui='chart'] [data-slot='3'] {
477
+ [data-ui-chart] [data-slot='3'] {
477
478
  --_series: var(--_chart-slot-3);
478
479
  }
479
- [data-ui='chart'] [data-slot='4'] {
480
+ [data-ui-chart] [data-slot='4'] {
480
481
  --_series: var(--_chart-slot-4);
481
482
  }
482
- [data-ui='chart'] [data-slot='5'] {
483
+ [data-ui-chart] [data-slot='5'] {
483
484
  --_series: var(--_chart-slot-5);
484
485
  }
485
- [data-ui='chart'] [data-slot='6'] {
486
+ [data-ui-chart] [data-slot='6'] {
486
487
  --_series: var(--_chart-slot-6);
487
488
  }
488
- [data-ui='chart'] [data-slot='7'] {
489
+ [data-ui-chart] [data-slot='7'] {
489
490
  --_series: var(--_chart-slot-7);
490
491
  }
491
- [data-ui='chart'] [data-slot='8'] {
492
+ [data-ui-chart] [data-slot='8'] {
492
493
  --_series: var(--_chart-slot-8);
493
494
  }
494
- [data-ui='chart'] [data-tone='neutral'] {
495
+ [data-ui-chart] [data-tone='neutral'] {
495
496
  --_series: var(--_chart-tone-neutral);
496
497
  }
497
- [data-ui='chart'] [data-tone='accent'] {
498
+ [data-ui-chart] [data-tone='accent'] {
498
499
  --_series: var(--_chart-tone-accent);
499
500
  }
500
- [data-ui='chart'] [data-tone='secondary'] {
501
+ [data-ui-chart] [data-tone='secondary'] {
501
502
  --_series: var(--_chart-tone-secondary);
502
503
  }
503
- [data-ui='chart'] [data-tone='success'] {
504
+ [data-ui-chart] [data-tone='success'] {
504
505
  --_series: var(--_chart-tone-success);
505
506
  }
506
- [data-ui='chart'] [data-tone='warning'] {
507
+
508
+ [data-ui-chart] [data-tone='info'] {
509
+ --_series: var(--_chart-tone-info);
510
+ }
511
+ [data-ui-chart] [data-tone='warning'] {
507
512
  --_series: var(--_chart-tone-warning);
508
513
  }
509
- [data-ui='chart'] [data-tone='danger'] {
514
+ [data-ui-chart] [data-tone='danger'] {
510
515
  --_series: var(--_chart-tone-danger);
511
516
  }
512
- [data-ui='chart'] [data-overflow] {
517
+ [data-ui-chart] [data-overflow] {
513
518
  --_series: var(--_chart-overflow);
514
519
  }
515
520
 
516
- [data-ui='chart'] :is([data-part='legend-item'], [data-part='legend-more']) {
521
+ [data-ui-chart] :is([data-part-legend-item], [data-part-legend-more]) {
517
522
  align-items: center;
518
523
  background: transparent;
519
524
  border: 0;
@@ -535,11 +540,11 @@
535
540
  color var(--slotted-duration-short) var(--slotted-easing-standard);
536
541
  }
537
542
 
538
- [data-ui='chart'] :is([data-part='legend-item'], [data-part='legend-more'])[hidden] {
543
+ [data-ui-chart] :is([data-part-legend-item], [data-part-legend-more])[hidden] {
539
544
  display: none;
540
545
  }
541
546
 
542
- [data-ui='chart'] [data-part='legend-more'] {
547
+ [data-ui-chart] [data-part-legend-more] {
543
548
  color: var(--slotted-text-muted, GrayText);
544
549
  cursor: pointer;
545
550
  font-variant-numeric: tabular-nums;
@@ -547,20 +552,19 @@
547
552
  }
548
553
 
549
554
  /* An entry moved into the `+N` layer stands in a column there. */
550
- [data-ui='chart'] [data-part='menu'] [data-part='legend-item'] {
555
+ [data-ui-chart] [data-part-menu] [data-part-legend-item] {
551
556
  inline-size: 100%;
552
557
  }
553
558
 
554
- [data-ui='chart'] :is(button[data-part='legend-item'], [data-part='legend-more']) {
559
+ [data-ui-chart] :is(button[data-part-legend-item], [data-part-legend-more]) {
555
560
  cursor: pointer;
556
561
  }
557
562
 
558
- [data-ui='chart']
559
- :is(button[data-part='legend-item'], [data-part='legend-more']):hover:not(:disabled) {
563
+ [data-ui-chart] :is(button[data-part-legend-item], [data-part-legend-more]):hover:not(:disabled) {
560
564
  background-color: var(--slotted-tone-secondary-subtle-hover, ButtonFace);
561
565
  }
562
566
 
563
- [data-ui='chart'] [data-part='legend-item']:focus-visible {
567
+ [data-ui-chart] [data-part-legend-item]:focus-visible {
564
568
  outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
565
569
  outline-offset: 0;
566
570
  }
@@ -570,7 +574,7 @@
570
574
  * legend reads without colour: a stroke for a line, a square for a bar, an
571
575
  * area or a slice, a disc for a scatter.
572
576
  */
573
- [data-ui='chart'] :is([data-part='legend-marker'], [data-part='tooltip-marker']) {
577
+ [data-ui-chart] :is([data-part-legend-marker], [data-part-tooltip-marker]) {
574
578
  background-color: var(--_series);
575
579
  block-size: 0.625rem;
576
580
  border-radius: var(--slotted-radius-xs, 2px);
@@ -578,32 +582,28 @@
578
582
  inline-size: 0.625rem;
579
583
  }
580
584
 
581
- [data-ui='chart']
582
- :is([data-part='legend-marker'], [data-part='tooltip-marker'])[data-kind='line'] {
585
+ [data-ui-chart] :is([data-part-legend-marker], [data-part-tooltip-marker])[data-kind='line'] {
583
586
  block-size: var(--slotted-border-width-thick, 2px);
584
587
  border-radius: var(--slotted-radius-full, 9999px);
585
588
  inline-size: 0.875rem;
586
589
  }
587
590
 
588
- [data-ui='chart']
589
- :is([data-part='legend-marker'], [data-part='tooltip-marker'])[data-kind='scatter'] {
591
+ [data-ui-chart] :is([data-part-legend-marker], [data-part-tooltip-marker])[data-kind='scatter'] {
590
592
  border-radius: var(--slotted-radius-full, 9999px);
591
593
  }
592
594
 
593
595
  /* The line's own dash, drawn at the marker's scale, so three series that
594
596
  share the muted colour past the eighth slot still read apart. */
595
- [data-ui='chart']
596
- :is([data-part='legend-marker'], [data-part='tooltip-marker'])[data-stroke='dashed'] {
597
+ [data-ui-chart] :is([data-part-legend-marker], [data-part-tooltip-marker])[data-stroke='dashed'] {
597
598
  background: repeating-linear-gradient(to right, var(--_series) 0 3px, transparent 3px 5px);
598
599
  }
599
600
 
600
- [data-ui='chart']
601
- :is([data-part='legend-marker'], [data-part='tooltip-marker'])[data-stroke='dotted'] {
601
+ [data-ui-chart] :is([data-part-legend-marker], [data-part-tooltip-marker])[data-stroke='dotted'] {
602
602
  background: repeating-linear-gradient(to right, var(--_series) 0 2px, transparent 2px 4px);
603
603
  }
604
604
 
605
- [data-ui='chart']
606
- :is([data-part='legend-marker'], [data-part='tooltip-marker'])[data-stroke='dash-dot'] {
605
+ [data-ui-chart]
606
+ :is([data-part-legend-marker], [data-part-tooltip-marker])[data-stroke='dash-dot'] {
607
607
  background: repeating-linear-gradient(
608
608
  to right,
609
609
  var(--_series) 0 5px,
@@ -613,20 +613,20 @@
613
613
  );
614
614
  }
615
615
 
616
- [data-ui='chart'] [data-part='legend-label'] {
616
+ [data-ui-chart] [data-part-legend-label] {
617
617
  min-inline-size: 0;
618
618
  overflow: hidden;
619
619
  text-overflow: ellipsis;
620
620
  white-space: nowrap;
621
621
  }
622
622
 
623
- [data-ui='chart'] [data-part='legend-value'] {
623
+ [data-ui-chart] [data-part-legend-value] {
624
624
  color: var(--slotted-text-muted, GrayText);
625
625
  font-variant-numeric: tabular-nums;
626
626
  white-space: nowrap;
627
627
  }
628
628
 
629
- [data-ui='chart'] [data-part='legend-item'][data-current] [data-part='legend-value'] {
629
+ [data-ui-chart] [data-part-legend-item][data-current] [data-part-legend-value] {
630
630
  color: var(--slotted-text, CanvasText);
631
631
  }
632
632
 
@@ -637,33 +637,31 @@
637
637
  * outline is the series colour, so the item still says which series it
638
638
  * would bring back.
639
639
  */
640
- [data-ui='chart'] button[data-part='legend-item']:not([data-pressed]) {
640
+ [data-ui-chart] button[data-part-legend-item]:not([data-pressed]) {
641
641
  color: var(--slotted-text-muted, GrayText);
642
642
  }
643
643
 
644
- [data-ui='chart']
645
- button[data-part='legend-item']:not([data-pressed])
646
- [data-part='legend-marker'] {
644
+ [data-ui-chart] button[data-part-legend-item]:not([data-pressed]) [data-part-legend-marker] {
647
645
  background: transparent;
648
646
  box-shadow: inset 0 0 0 var(--slotted-border-width-medium, 1.5px) var(--_series);
649
647
  }
650
648
 
651
- [data-ui='chart']
652
- button[data-part='legend-item']:not([data-pressed])
653
- [data-part='legend-marker'][data-kind='line'] {
649
+ [data-ui-chart]
650
+ button[data-part-legend-item]:not([data-pressed])
651
+ [data-part-legend-marker][data-kind='line'] {
654
652
  background: var(--_series);
655
653
  box-shadow: none;
656
654
  opacity: 0.4;
657
655
  }
658
656
 
659
- [data-ui='chart'] button[data-part='legend-item']:not([data-pressed]) [data-part='legend-label'] {
657
+ [data-ui-chart] button[data-part-legend-item]:not([data-pressed]) [data-part-legend-label] {
660
658
  text-decoration: line-through;
661
659
  text-decoration-color: color-mix(in oklab, currentColor 55%, transparent);
662
660
  }
663
661
 
664
662
  /* ── Plot ─────────────────────────────────────────────────────────────── */
665
663
 
666
- [data-ui='chart'] [data-part='plot'] {
664
+ [data-ui-chart] [data-part-plot] {
667
665
  border-radius: var(--_radius);
668
666
  /* Its size step, and whatever more a tile or the full screen gives it. */
669
667
  flex: 1 0 var(--_plot-size);
@@ -678,12 +676,12 @@
678
676
  position: relative;
679
677
  }
680
678
 
681
- [data-ui='chart'] [data-part='plot']:focus-visible {
679
+ [data-ui-chart] [data-part-plot]:focus-visible {
682
680
  outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
683
681
  outline-offset: var(--slotted-focus-ring-offset, 2px);
684
682
  }
685
683
 
686
- [data-ui='chart'] [data-part='canvas'] {
684
+ [data-ui-chart] [data-part-canvas] {
687
685
  inset: 0;
688
686
  position: absolute;
689
687
  z-index: 1;
@@ -691,14 +689,14 @@
691
689
 
692
690
  /* The engine keeps its size and its state behind the table, so the chart
693
691
  comes back where the reader left it. */
694
- [data-ui='chart']
695
- [data-part='plot']:has(> [data-part='table-region']:not([hidden]))
692
+ [data-ui-chart]
693
+ [data-part-plot]:has(> [data-part-table-region]:not([hidden]))
696
694
  > :is(
697
- [data-part='canvas'],
698
- [data-part='crosshair'],
699
- [data-part='marker'],
700
- [data-part='tooltip'],
701
- [data-part='center']
695
+ [data-part-canvas],
696
+ [data-part-crosshair],
697
+ [data-part-marker],
698
+ [data-part-tooltip],
699
+ [data-part-center]
702
700
  ) {
703
701
  visibility: hidden;
704
702
  }
@@ -714,7 +712,7 @@
714
712
  * `--slotted-chart-frame-size` for the grid across it. None of them is a
715
713
  * design token.
716
714
  */
717
- [data-ui='chart'] :is([data-part='crosshair'], [data-part='marker'], [data-part='tooltip']) {
715
+ [data-ui-chart] :is([data-part-crosshair], [data-part-marker], [data-part-tooltip]) {
718
716
  inset-block-start: 0;
719
717
  inset-inline-start: 0;
720
718
  pointer-events: none;
@@ -723,7 +721,7 @@
723
721
 
724
722
  /* A line under the marks for a line or an area, where the eye needs the
725
723
  exact x; a band for bars, where the category is the whole slot. */
726
- [data-ui='chart'] [data-part='crosshair'] {
724
+ [data-ui-chart] [data-part-crosshair] {
727
725
  background-color: var(--slotted-chart-crosshair-color, var(--slotted-border-strong, GrayText));
728
726
  block-size: var(--slotted-chart-frame-size, 100%);
729
727
  inline-size: 1px;
@@ -734,7 +732,7 @@
734
732
  z-index: 0;
735
733
  }
736
734
 
737
- [data-ui='chart'] [data-part='crosshair'][data-band] {
735
+ [data-ui-chart] [data-part-crosshair][data-band] {
738
736
  background-color: var(
739
737
  --slotted-chart-band-color,
740
738
  color-mix(in oklab, var(--slotted-text, CanvasText) 6%, transparent)
@@ -747,7 +745,7 @@
747
745
  );
748
746
  }
749
747
 
750
- [data-ui='chart'] [data-part='crosshair'][data-orientation='horizontal'] {
748
+ [data-ui-chart] [data-part-crosshair][data-orientation='horizontal'] {
751
749
  block-size: 1px;
752
750
  inline-size: var(--slotted-chart-frame-size, 100%);
753
751
  transform: translate(
@@ -756,7 +754,7 @@
756
754
  );
757
755
  }
758
756
 
759
- [data-ui='chart'] [data-part='crosshair'][data-band][data-orientation='horizontal'] {
757
+ [data-ui-chart] [data-part-crosshair][data-band][data-orientation='horizontal'] {
760
758
  block-size: var(--slotted-chart-band-size, 0px);
761
759
  transform: translate(
762
760
  var(--slotted-chart-frame-start, 0px),
@@ -769,7 +767,7 @@
769
767
  * of the ground around it, so it separates from the line it sits on and
770
768
  * from a neighbouring series crossing at the same place.
771
769
  */
772
- [data-ui='chart'] [data-part='marker'] {
770
+ [data-ui-chart] [data-part-marker] {
773
771
  --_size: calc(var(--_chart-marker-size) + var(--slotted-space-2, 0.25rem));
774
772
 
775
773
  background-color: var(--_series, var(--_chart-slot-1));
@@ -787,7 +785,7 @@
787
785
  /* The point the reader chose stays marked after the pointer leaves: a ring
788
786
  in the series colour around the ground, larger than the hover marker so
789
787
  the two read as two states when they meet. */
790
- [data-ui='chart'] [data-part='marker'][data-selected] {
788
+ [data-ui-chart] [data-part-marker][data-selected] {
791
789
  --_size: calc(var(--_chart-marker-size) * 2 + var(--slotted-space-2, 0.25rem));
792
790
 
793
791
  background-color: transparent;
@@ -805,7 +803,7 @@
805
803
  * subgrid of one three-column grid, so the values line up whatever the
806
804
  * labels' lengths.
807
805
  */
808
- [data-ui='chart'] [data-part='tooltip'] {
806
+ [data-ui-chart] [data-part-tooltip] {
809
807
  background-color: var(--slotted-chart-tooltip-surface, var(--slotted-surface-raised, Canvas));
810
808
  border: var(--slotted-border-width-thin, 1px) solid var(--slotted-border-subtle, CanvasText);
811
809
  border-radius: var(--slotted-radius-md, 6px);
@@ -837,7 +835,7 @@
837
835
  * point never hides under, and the crosshair shows which point it is about.
838
836
  * The binding docks it; `placeTooltip` says when.
839
837
  */
840
- [data-ui='chart'] [data-part='tooltip'][data-docked] {
838
+ [data-ui-chart] [data-part-tooltip][data-docked] {
841
839
  inline-size: 100%;
842
840
  max-inline-size: 100%;
843
841
  min-inline-size: 0;
@@ -847,16 +845,16 @@
847
845
  plot's coordinates: an inset resolves against the element's own
848
846
  direction, so the right-to-left box anchors at its inline end, which is
849
847
  the same left edge the translation is measured from. */
850
- [data-ui='chart']:dir(rtl) :is([data-part='tooltip'], [data-part='center']) {
848
+ [data-ui-chart]:dir(rtl) :is([data-part-tooltip], [data-part-center]) {
851
849
  direction: rtl;
852
850
  }
853
851
 
854
- [data-ui='chart']:dir(rtl) [data-part='tooltip'] {
852
+ [data-ui-chart]:dir(rtl) [data-part-tooltip] {
855
853
  inset-inline-end: 0;
856
854
  inset-inline-start: auto;
857
855
  }
858
856
 
859
- [data-ui='chart'] [data-part='tooltip'][data-open] {
857
+ [data-ui-chart] [data-part-tooltip][data-open] {
860
858
  opacity: 1;
861
859
  visibility: visible;
862
860
  }
@@ -864,42 +862,49 @@
864
862
  /* A tooltip that appears slides into place from where it opened; one that
865
863
  follows the pointer from point to point moves with it. Opening snaps the
866
864
  position so the first frame is not a flight from the corner. */
867
- [data-ui='chart'] [data-part='tooltip']:not([data-open]) {
865
+ [data-ui-chart] [data-part-tooltip]:not([data-open]) {
868
866
  transition:
869
867
  opacity var(--slotted-duration-short) var(--slotted-easing-standard),
870
868
  visibility var(--slotted-duration-instant) linear var(--slotted-duration-short);
871
869
  }
872
870
 
873
- [data-ui='chart'] [data-part='tooltip-title'] {
871
+ [data-ui-chart] [data-part-tooltip-title] {
874
872
  color: var(--slotted-text, CanvasText);
875
873
  font-weight: var(--slotted-font-weight-semibold, 600);
876
874
  grid-column: 1 / -1;
877
875
  overflow-wrap: anywhere;
878
876
  }
879
877
 
880
- [data-ui='chart'] :is([data-part='tooltip-item'], [data-part='tooltip-total']) {
878
+ /* The label of a line on this category, the plot's own words for it. */
879
+ [data-ui-chart] [data-part-tooltip-note] {
880
+ color: var(--slotted-text-muted, GrayText);
881
+ grid-column: 1 / -1;
882
+ overflow-wrap: anywhere;
883
+ }
884
+
885
+ [data-ui-chart] :is([data-part-tooltip-item], [data-part-tooltip-total]) {
881
886
  align-items: center;
882
887
  display: grid;
883
888
  grid-column: 1 / -1;
884
889
  grid-template-columns: subgrid;
885
890
  }
886
891
 
887
- [data-ui='chart'] [data-part='tooltip-item'] {
892
+ [data-ui-chart] [data-part-tooltip-item] {
888
893
  color: var(--slotted-text-muted, GrayText);
889
894
  }
890
895
 
891
- [data-ui='chart'] [data-part='tooltip-item'][data-current] {
896
+ [data-ui-chart] [data-part-tooltip-item][data-current] {
892
897
  color: var(--slotted-text, CanvasText);
893
898
  }
894
899
 
895
- [data-ui='chart'] [data-part='tooltip-label'] {
900
+ [data-ui-chart] [data-part-tooltip-label] {
896
901
  min-inline-size: 0;
897
902
  overflow: hidden;
898
903
  text-overflow: ellipsis;
899
904
  white-space: nowrap;
900
905
  }
901
906
 
902
- [data-ui='chart'] [data-part='tooltip-value'] {
907
+ [data-ui-chart] [data-part-tooltip-value] {
903
908
  color: var(--slotted-text, CanvasText);
904
909
  font-variant-numeric: tabular-nums;
905
910
  font-weight: var(--slotted-font-weight-medium, 500);
@@ -907,7 +912,7 @@
907
912
  white-space: nowrap;
908
913
  }
909
914
 
910
- [data-ui='chart'] [data-part='tooltip-total'] {
915
+ [data-ui-chart] [data-part-tooltip-total] {
911
916
  border-block-start: var(--slotted-border-width-thin, 1px) solid
912
917
  var(--slotted-border-subtle, CanvasText);
913
918
  font-weight: var(--slotted-font-weight-semibold, 600);
@@ -915,13 +920,13 @@
915
920
  padding-block-start: var(--slotted-space-3, 0.375rem);
916
921
  }
917
922
 
918
- [data-ui='chart'] [data-part='tooltip-total'] > :first-child {
923
+ [data-ui-chart] [data-part-tooltip-total] > :first-child {
919
924
  grid-column: 1 / 3;
920
925
  }
921
926
 
922
927
  /* ── The centre of a donut ────────────────────────────────────────────── */
923
928
 
924
- [data-ui='chart'] [data-part='center'] {
929
+ [data-ui-chart] [data-part-center] {
925
930
  align-content: center;
926
931
  display: grid;
927
932
  inset: 0;
@@ -932,14 +937,14 @@
932
937
  z-index: 2;
933
938
  }
934
939
 
935
- [data-ui='chart'] [data-part='center-value'] {
940
+ [data-ui-chart] [data-part-center-value] {
936
941
  font-size: var(--slotted-font-size-2xl, 1.25rem);
937
942
  font-variant-numeric: tabular-nums;
938
943
  font-weight: var(--slotted-font-weight-semibold, 600);
939
944
  line-height: var(--slotted-line-height-2xl, 1.4);
940
945
  }
941
946
 
942
- [data-ui='chart'] [data-part='center-label'] {
947
+ [data-ui-chart] [data-part-center-label] {
943
948
  color: var(--slotted-text-muted, GrayText);
944
949
  font-size: var(--slotted-font-size-xs, 0.75rem);
945
950
  line-height: var(--slotted-line-height-xs, 1.4);
@@ -955,12 +960,12 @@
955
960
  * have, a line and its wash, a pie's ring — under one shimmer. It fills the
956
961
  * plot's box exactly, so nothing moves when the data lands.
957
962
  */
958
- [data-ui='chart'] [data-part='skeleton'] {
963
+ [data-ui-chart] [data-part-skeleton] {
959
964
  inset: var(--_chart-inset);
960
965
  position: absolute;
961
966
  }
962
967
 
963
- [data-ui='chart'] [data-part='skeleton'] > [data-ui='skeleton'] {
968
+ [data-ui-chart] [data-part-skeleton] > [data-ui-skeleton] {
964
969
  /* A tenth of the text over the ground: a step lighter than the ground
965
970
  in a dark scheme and a step darker in a light one, where the skeleton
966
971
  family's own fill, made for a sunken field, sank into a dark tile. */
@@ -983,7 +988,7 @@
983
988
  row-gap: var(--_chart-inset);
984
989
  }
985
990
 
986
- [data-ui='chart'] [data-part='skeleton'] [data-skeleton='y'] {
991
+ [data-ui-chart] [data-part-skeleton] [data-skeleton='y'] {
987
992
  align-items: end;
988
993
  display: flex;
989
994
  flex-direction: column;
@@ -991,17 +996,17 @@
991
996
  justify-content: space-between;
992
997
  }
993
998
 
994
- [data-ui='chart'] [data-part='skeleton'] [data-skeleton='x'] {
999
+ [data-ui-chart] [data-part-skeleton] [data-skeleton='x'] {
995
1000
  display: flex;
996
1001
  grid-area: x;
997
1002
  justify-content: space-around;
998
1003
  }
999
1004
 
1000
1005
  /* An axis label is a short line at the axis type's height. */
1001
- [data-ui='chart']
1002
- [data-part='skeleton']
1006
+ [data-ui-chart]
1007
+ [data-part-skeleton]
1003
1008
  :is([data-skeleton='y'], [data-skeleton='x'])
1004
- > [data-ui='skeleton'] {
1009
+ > [data-ui-skeleton] {
1005
1010
  block-size: 0.5rem;
1006
1011
  border-radius: var(--slotted-radius-full, 9999px);
1007
1012
  flex: none;
@@ -1009,22 +1014,19 @@
1009
1014
  min-block-size: 0;
1010
1015
  }
1011
1016
 
1012
- [data-ui='chart']
1013
- [data-part='skeleton']
1014
- [data-skeleton='y']
1015
- > [data-ui='skeleton']:nth-child(odd) {
1017
+ [data-ui-chart] [data-part-skeleton] [data-skeleton='y'] > [data-ui-skeleton]:nth-child(odd) {
1016
1018
  inline-size: 2rem;
1017
1019
  }
1018
1020
 
1019
1021
  /* Six category labels at their full width are 144 pixels, more than the
1020
1022
  marks column of a quarter-width tile holds; they shrink together with it,
1021
1023
  as the engine's labels thin out, rather than run past the plot. */
1022
- [data-ui='chart'] [data-part='skeleton'] [data-skeleton='x'] > [data-ui='skeleton'] {
1024
+ [data-ui-chart] [data-part-skeleton] [data-skeleton='x'] > [data-ui-skeleton] {
1023
1025
  flex: 0 1 auto;
1024
1026
  min-inline-size: 0;
1025
1027
  }
1026
1028
 
1027
- [data-ui='chart'] [data-part='skeleton'] [data-skeleton='marks'] {
1029
+ [data-ui-chart] [data-part-skeleton] [data-skeleton='marks'] {
1028
1030
  align-items: end;
1029
1031
  background-image: repeating-linear-gradient(
1030
1032
  to bottom,
@@ -1040,73 +1042,73 @@
1040
1042
 
1041
1043
  /* The skeleton family sizes a block on its own; inside the plot a bar takes
1042
1044
  its share of the row and nothing more. */
1043
- [data-ui='chart'] [data-part='skeleton'] [data-skeleton='marks'] > [data-ui='skeleton'] {
1045
+ [data-ui-chart] [data-part-skeleton] [data-skeleton='marks'] > [data-ui-skeleton] {
1044
1046
  border-radius: var(--_chart-bar-radius) var(--_chart-bar-radius) 0 0;
1045
1047
  flex: 0 1 9%;
1046
1048
  inline-size: auto;
1047
1049
  min-inline-size: 0;
1048
1050
  }
1049
1051
 
1050
- [data-ui='chart']
1051
- [data-part='skeleton'][data-kind='bar']
1052
+ [data-ui-chart]
1053
+ [data-part-skeleton][data-kind='bar']
1052
1054
  [data-skeleton='marks']
1053
- > [data-ui='skeleton']:nth-child(7n + 1) {
1055
+ > [data-ui-skeleton]:nth-child(7n + 1) {
1054
1056
  block-size: 38%;
1055
1057
  }
1056
- [data-ui='chart']
1057
- [data-part='skeleton'][data-kind='bar']
1058
+ [data-ui-chart]
1059
+ [data-part-skeleton][data-kind='bar']
1058
1060
  [data-skeleton='marks']
1059
- > [data-ui='skeleton']:nth-child(7n + 2) {
1061
+ > [data-ui-skeleton]:nth-child(7n + 2) {
1060
1062
  block-size: 62%;
1061
1063
  }
1062
- [data-ui='chart']
1063
- [data-part='skeleton'][data-kind='bar']
1064
+ [data-ui-chart]
1065
+ [data-part-skeleton][data-kind='bar']
1064
1066
  [data-skeleton='marks']
1065
- > [data-ui='skeleton']:nth-child(7n + 3) {
1067
+ > [data-ui-skeleton]:nth-child(7n + 3) {
1066
1068
  block-size: 50%;
1067
1069
  }
1068
- [data-ui='chart']
1069
- [data-part='skeleton'][data-kind='bar']
1070
+ [data-ui-chart]
1071
+ [data-part-skeleton][data-kind='bar']
1070
1072
  [data-skeleton='marks']
1071
- > [data-ui='skeleton']:nth-child(7n + 4) {
1073
+ > [data-ui-skeleton]:nth-child(7n + 4) {
1072
1074
  block-size: 74%;
1073
1075
  }
1074
- [data-ui='chart']
1075
- [data-part='skeleton'][data-kind='bar']
1076
+ [data-ui-chart]
1077
+ [data-part-skeleton][data-kind='bar']
1076
1078
  [data-skeleton='marks']
1077
- > [data-ui='skeleton']:nth-child(7n + 5) {
1079
+ > [data-ui-skeleton]:nth-child(7n + 5) {
1078
1080
  block-size: 56%;
1079
1081
  }
1080
- [data-ui='chart']
1081
- [data-part='skeleton'][data-kind='bar']
1082
+ [data-ui-chart]
1083
+ [data-part-skeleton][data-kind='bar']
1082
1084
  [data-skeleton='marks']
1083
- > [data-ui='skeleton']:nth-child(7n + 6) {
1085
+ > [data-ui-skeleton]:nth-child(7n + 6) {
1084
1086
  block-size: 44%;
1085
1087
  }
1086
- [data-ui='chart']
1087
- [data-part='skeleton'][data-kind='bar']
1088
+ [data-ui-chart]
1089
+ [data-part-skeleton][data-kind='bar']
1088
1090
  [data-skeleton='marks']
1089
- > [data-ui='skeleton']:nth-child(7n + 7) {
1091
+ > [data-ui-skeleton]:nth-child(7n + 7) {
1090
1092
  block-size: 68%;
1091
1093
  }
1092
1094
 
1093
1095
  /* A line is its stroke and the wash under it: two blocks over the whole
1094
1096
  marks area, one cut to a band as thick as a line, one to the silhouette
1095
1097
  under it at a third of the fill. */
1096
- [data-ui='chart']
1097
- [data-part='skeleton'][data-kind='line']
1098
+ [data-ui-chart]
1099
+ [data-part-skeleton][data-kind='line']
1098
1100
  [data-skeleton='marks']
1099
- > [data-ui='skeleton'] {
1101
+ > [data-ui-skeleton] {
1100
1102
  block-size: 100%;
1101
1103
  border-radius: 0;
1102
1104
  inset: 0;
1103
1105
  position: absolute;
1104
1106
  }
1105
1107
 
1106
- [data-ui='chart']
1107
- [data-part='skeleton'][data-kind='line']
1108
+ [data-ui-chart]
1109
+ [data-part-skeleton][data-kind='line']
1108
1110
  [data-skeleton='marks']
1109
- > [data-ui='skeleton']:first-child {
1111
+ > [data-ui-skeleton]:first-child {
1110
1112
  clip-path: polygon(
1111
1113
  0% 60.5%,
1112
1114
  14% 46.5%,
@@ -1127,10 +1129,10 @@
1127
1129
  );
1128
1130
  }
1129
1131
 
1130
- [data-ui='chart']
1131
- [data-part='skeleton'][data-kind='line']
1132
+ [data-ui-chart]
1133
+ [data-part-skeleton][data-kind='line']
1132
1134
  [data-skeleton='marks']
1133
- > [data-ui='skeleton']:last-child {
1135
+ > [data-ui-skeleton]:last-child {
1134
1136
  clip-path: polygon(
1135
1137
  0% 62%,
1136
1138
  14% 48%,
@@ -1147,15 +1149,13 @@
1147
1149
  }
1148
1150
 
1149
1151
  /* A pie has no axes: its ring, centred, at the size the engine draws it. */
1150
- [data-ui='chart'] [data-part='skeleton'][data-kind='pie'] > [data-ui='skeleton'] {
1152
+ [data-ui-chart] [data-part-skeleton][data-kind='pie'] > [data-ui-skeleton] {
1151
1153
  align-items: center;
1152
1154
  display: flex;
1153
1155
  justify-content: center;
1154
1156
  }
1155
1157
 
1156
- [data-ui='chart']
1157
- [data-part='skeleton'][data-kind='pie']
1158
- [data-ui='skeleton'][data-shape='circle'] {
1158
+ [data-ui-chart] [data-part-skeleton][data-kind='pie'] [data-ui-skeleton][data-shape='circle'] {
1159
1159
  aspect-ratio: 1;
1160
1160
  block-size: 76%;
1161
1161
  flex: none;
@@ -1169,7 +1169,7 @@
1169
1169
 
1170
1170
  /* A legend whose entries come with the data stands in as three short
1171
1171
  lines of the entries' type height. */
1172
- [data-ui='chart'] [data-part='legend'] > [data-ui='skeleton'] {
1172
+ [data-ui-chart] [data-part-legend] > [data-ui-skeleton] {
1173
1173
  /* A tenth of the text over the ground: a step lighter than the ground
1174
1174
  in a dark scheme and a step darker in a light one, where the skeleton
1175
1175
  family's own fill, made for a sunken field, sank into a dark tile. */
@@ -1191,13 +1191,13 @@
1191
1191
  min-block-size: 0;
1192
1192
  }
1193
1193
 
1194
- [data-ui='chart'] [data-part='legend'] > [data-ui='skeleton']:nth-child(2) {
1194
+ [data-ui-chart] [data-part-legend] > [data-ui-skeleton]:nth-child(2) {
1195
1195
  inline-size: 3.25rem;
1196
1196
  }
1197
1197
 
1198
1198
  /* ── Empty and failed ─────────────────────────────────────────────────── */
1199
1199
 
1200
- [data-ui='chart'] :is([data-part='empty'], [data-part='error']) {
1200
+ [data-ui-chart] :is([data-part-empty], [data-part-error]) {
1201
1201
  /* A message about one chart, at the size of the chart's own words. */
1202
1202
  --slotted-result-state-title-font-size: var(--slotted-font-size-md, 0.875rem);
1203
1203
  --slotted-result-state-padding-block: var(--slotted-space-4, 0.5rem);
@@ -1216,7 +1216,7 @@
1216
1216
  the message stands on no surface of its own, and the bands the grid drew
1217
1217
  every quarter of the height crossed the empty title and ran between the
1218
1218
  failed title and its retry. */
1219
- [data-ui='chart'] [data-part='plot']:has(> :is([data-part='empty'], [data-part='error'])) {
1219
+ [data-ui-chart] [data-part-plot]:has(> :is([data-part-empty], [data-part-error])) {
1220
1220
  background: linear-gradient(var(--_chart-grid), var(--_chart-grid)) 0 100% / 100% 1px no-repeat
1221
1221
  content-box;
1222
1222
  box-sizing: border-box;
@@ -1225,7 +1225,7 @@
1225
1225
 
1226
1226
  /* ── Text alternatives ────────────────────────────────────────────────── */
1227
1227
 
1228
- [data-ui='chart'] [data-part='summary'] {
1228
+ [data-ui-chart] [data-part-summary] {
1229
1229
  block-size: 1px;
1230
1230
  clip-path: inset(50%);
1231
1231
  inline-size: 1px;
@@ -1237,7 +1237,7 @@
1237
1237
 
1238
1238
  /* The table view: in the plot's box, scrolling inside it, in the document's
1239
1239
  direction, on the plot's ground. */
1240
- [data-ui='chart'] [data-part='table-region'] {
1240
+ [data-ui-chart] [data-part-table-region] {
1241
1241
  background-color: var(--_chart-surface);
1242
1242
  border-radius: var(--_radius);
1243
1243
  inset: 0;
@@ -1247,28 +1247,34 @@
1247
1247
  z-index: 4;
1248
1248
  }
1249
1249
 
1250
- [data-ui='chart']:dir(rtl) [data-part='table-region'] {
1250
+ [data-ui-chart]:dir(rtl) [data-part-table-region] {
1251
1251
  direction: rtl;
1252
1252
  }
1253
1253
 
1254
- /* The region scrolls, so it takes focus to be scrolled by keyboard. */
1255
- [data-ui='chart'] [data-part='table-region']:focus-visible {
1254
+ /* The region scrolls, so it takes focus to be scrolled by keyboard. The ring
1255
+ is drawn for a focus from the keyboard: a click on a cell focuses the region
1256
+ too, and the next Shift would make it match `:focus-visible`
1257
+ (`createFocusOrigin`). The browser's own ring is suppressed for the same focus. */
1258
+ [data-ui-chart] [data-part-table-region]:focus {
1259
+ outline: none;
1260
+ }
1261
+ [data-ui-chart] [data-part-table-region]:focus-visible[data-focus-origin='keyboard'] {
1256
1262
  outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
1257
1263
  outline-offset: calc(var(--slotted-focus-ring-width, 2px) * -1);
1258
1264
  }
1259
1265
 
1260
- [data-ui='chart'] [data-part='table-region'][hidden] {
1266
+ [data-ui-chart] [data-part-table-region][hidden] {
1261
1267
  display: none;
1262
1268
  }
1263
1269
 
1264
- [data-ui='chart'] [data-part='table'] {
1270
+ [data-ui-chart] [data-part-table] {
1265
1271
  border-collapse: collapse;
1266
1272
  font-size: var(--slotted-font-size-sm, 0.8125rem);
1267
1273
  inline-size: 100%;
1268
1274
  line-height: var(--slotted-line-height-sm, 1.45);
1269
1275
  }
1270
1276
 
1271
- [data-ui='chart'] [data-part='table'] caption {
1277
+ [data-ui-chart] [data-part-table] caption {
1272
1278
  caption-side: bottom;
1273
1279
  color: var(--slotted-text-muted, GrayText);
1274
1280
  font-size: var(--slotted-font-size-xs, 0.75rem);
@@ -1276,7 +1282,7 @@
1276
1282
  text-align: start;
1277
1283
  }
1278
1284
 
1279
- [data-ui='chart'] [data-part='table'] :is(th, td) {
1285
+ [data-ui-chart] [data-part-table] :is(th, td) {
1280
1286
  border-block-end: var(--slotted-border-width-thin, 1px) solid
1281
1287
  var(--slotted-border-subtle, CanvasText);
1282
1288
  padding-block: var(--slotted-control-gap-sm, 0.375rem);
@@ -1285,11 +1291,11 @@
1285
1291
  white-space: nowrap;
1286
1292
  }
1287
1293
 
1288
- [data-ui='chart'] [data-part='table'] tbody th {
1294
+ [data-ui-chart] [data-part-table] tbody th {
1289
1295
  font-weight: var(--slotted-font-weight-medium, 500);
1290
1296
  }
1291
1297
 
1292
- [data-ui='chart'] [data-part='table'] thead th {
1298
+ [data-ui-chart] [data-part-table] thead th {
1293
1299
  background-color: var(--_chart-surface);
1294
1300
  color: var(--slotted-text-muted, GrayText);
1295
1301
  font-weight: var(--slotted-font-weight-medium, 500);
@@ -1297,12 +1303,12 @@
1297
1303
  position: sticky;
1298
1304
  }
1299
1305
 
1300
- [data-ui='chart'] [data-part='table'] [data-numeric] {
1306
+ [data-ui-chart] [data-part-table] [data-numeric] {
1301
1307
  font-variant-numeric: tabular-nums;
1302
1308
  text-align: end;
1303
1309
  }
1304
1310
 
1305
- [data-ui='chart'] [data-part='table'] tbody tr[data-current] {
1311
+ [data-ui-chart] [data-part-table] tbody tr[data-current] {
1306
1312
  background-color: var(--slotted-tone-secondary-subtle-hover, Highlight);
1307
1313
  }
1308
1314
 
@@ -1315,7 +1321,7 @@
1315
1321
  * `data-fullscreen`; the plot takes the height the header and the legend
1316
1322
  * leave, and the engine redraws at the new size on its own.
1317
1323
  */
1318
- [data-ui='chart'][data-fullscreen] {
1324
+ [data-ui-chart][data-fullscreen] {
1319
1325
  --_chart-surface: var(--slotted-chart-surface, var(--slotted-surface, Canvas));
1320
1326
 
1321
1327
  background-color: var(--_chart-surface);
@@ -1329,7 +1335,7 @@
1329
1335
  z-index: var(--slotted-z-index-overlay, 1000);
1330
1336
  }
1331
1337
 
1332
- [data-ui='chart'][data-fullscreen] [data-part='title'] {
1338
+ [data-ui-chart][data-fullscreen] [data-part-title] {
1333
1339
  font-size: var(--slotted-font-size-xl, 1.125rem);
1334
1340
  }
1335
1341
 
@@ -1346,24 +1352,24 @@
1346
1352
  * (`docs/token-foundation.md`, rule 4).
1347
1353
  */
1348
1354
  @container slotted-chart (max-width: 480px) {
1349
- [data-ui='chart']
1350
- > [data-part='header']
1351
- > [data-part='toolbar']
1352
- > :is([data-part='view-toggle'], [data-part='fullscreen-toggle']) {
1355
+ [data-ui-chart]
1356
+ > [data-part-header]
1357
+ > [data-part-toolbar]
1358
+ > :is([data-part-view-toggle], [data-part-fullscreen-toggle]) {
1353
1359
  display: none;
1354
1360
  }
1355
1361
 
1356
- [data-ui='chart'] [data-part='menu-item']:is([data-action='view'], [data-action='fullscreen']) {
1362
+ [data-ui-chart] [data-part-menu-item]:is([data-action='view'], [data-action='fullscreen']) {
1357
1363
  display: flex;
1358
1364
  }
1359
1365
 
1360
- [data-ui='chart'] :is([data-part='legend-item'], [data-part='legend-more']) {
1366
+ [data-ui-chart] :is([data-part-legend-item], [data-part-legend-more]) {
1361
1367
  padding-inline: var(--slotted-space-2, 0.25rem);
1362
1368
  }
1363
1369
  }
1364
1370
 
1365
1371
  @container slotted-chart (max-width: 360px) {
1366
- [data-ui='chart'][data-variant='card'] {
1372
+ [data-ui-chart][data-variant='card'] {
1367
1373
  padding-block: var(--slotted-space-5, 0.75rem);
1368
1374
  padding-inline: var(--slotted-space-5, 0.75rem);
1369
1375
  }
@@ -1381,44 +1387,42 @@
1381
1387
  * the last entry two pixels away and does not reach back across it.
1382
1388
  */
1383
1389
  @media (pointer: coarse) {
1384
- [data-ui='chart'] [data-part='menu-item'] {
1390
+ [data-ui-chart] [data-part-menu-item] {
1385
1391
  min-block-size: var(--slotted-target-comfortable, 2.75rem);
1386
1392
  }
1387
1393
 
1388
- [data-ui='chart'] [data-part='menu'] [data-part='legend-item'] {
1394
+ [data-ui-chart] [data-part-menu] [data-part-legend-item] {
1389
1395
  min-block-size: var(--slotted-target-comfortable, 2.75rem);
1390
1396
  min-inline-size: var(--slotted-target-comfortable, 2.75rem);
1391
1397
  }
1392
1398
 
1393
- [data-ui='chart'] [data-part='legend'] {
1399
+ [data-ui-chart] [data-part-legend] {
1394
1400
  min-block-size: var(--slotted-target-comfortable, 2.75rem);
1395
1401
  row-gap: calc(var(--slotted-target-comfortable, 2.75rem) - var(--slotted-target-min, 1.5rem));
1396
1402
  }
1397
1403
 
1398
- [data-ui='chart']
1399
- [data-part='legend']
1400
- > :is([data-part='legend-item'], [data-part='legend-more']) {
1404
+ [data-ui-chart] [data-part-legend] > :is([data-part-legend-item], [data-part-legend-more]) {
1401
1405
  position: relative;
1402
1406
  }
1403
1407
 
1404
- [data-ui='chart']
1405
- [data-part='legend']
1406
- > :is([data-part='legend-item'], [data-part='legend-more'])::after {
1408
+ [data-ui-chart]
1409
+ [data-part-legend]
1410
+ > :is([data-part-legend-item], [data-part-legend-more])::after {
1407
1411
  content: '';
1408
1412
  inset: min(0px, calc((100% - var(--slotted-target-comfortable, 2.75rem)) / 2));
1409
1413
  position: absolute;
1410
1414
  }
1411
1415
 
1412
- [data-ui='chart'] [data-part='legend'] > [data-part='legend-more']::after {
1416
+ [data-ui-chart] [data-part-legend] > [data-part-legend-more]::after {
1413
1417
  inset-inline-start: 0;
1414
1418
  }
1415
1419
 
1416
- [data-ui='chart']
1420
+ [data-ui-chart]
1417
1421
  :is(
1418
- [data-part='zoom-reset'],
1419
- [data-part='view-toggle'],
1420
- [data-part='fullscreen-toggle'],
1421
- [data-part='menu-trigger']
1422
+ [data-part-zoom-reset],
1423
+ [data-part-view-toggle],
1424
+ [data-part-fullscreen-toggle],
1425
+ [data-part-menu-trigger]
1422
1426
  ) {
1423
1427
  --_box: var(--slotted-target-comfortable, 2.75rem);
1424
1428
  }
@@ -1428,24 +1432,24 @@
1428
1432
 
1429
1433
  /* Paper holds the marks and the words: no controls, no hover, no layer. */
1430
1434
  @media print {
1431
- [data-ui='chart']
1435
+ [data-ui-chart]
1432
1436
  :is(
1433
- [data-part='toolbar'],
1434
- [data-part='help'],
1435
- [data-part='legend-more'],
1436
- [data-part='tooltip'],
1437
- [data-part='crosshair'],
1438
- [data-part='marker']:not([data-selected])
1437
+ [data-part-toolbar],
1438
+ [data-part-help],
1439
+ [data-part-legend-more],
1440
+ [data-part-tooltip],
1441
+ [data-part-crosshair],
1442
+ [data-part-marker]:not([data-selected])
1439
1443
  ) {
1440
1444
  display: none;
1441
1445
  }
1442
1446
 
1443
- [data-ui='chart'] [data-part='legend'] {
1447
+ [data-ui-chart] [data-part-legend] {
1444
1448
  flex-wrap: wrap;
1445
1449
  overflow: visible;
1446
1450
  }
1447
1451
 
1448
- [data-ui='chart'] {
1452
+ [data-ui-chart] {
1449
1453
  break-inside: avoid;
1450
1454
  }
1451
1455
  }
@@ -1459,13 +1463,12 @@
1459
1463
  * not have carried anyway.
1460
1464
  */
1461
1465
  @media (forced-colors: active) {
1462
- [data-ui='chart']
1463
- :is([data-part='legend-marker'], [data-part='tooltip-marker'], [data-part='marker']) {
1466
+ [data-ui-chart] :is([data-part-legend-marker], [data-part-tooltip-marker], [data-part-marker]) {
1464
1467
  forced-color-adjust: none;
1465
1468
  background-color: CanvasText;
1466
1469
  }
1467
1470
 
1468
- [data-ui='chart'] [data-part='crosshair'] {
1471
+ [data-ui-chart] [data-part-crosshair] {
1469
1472
  background-color: GrayText;
1470
1473
  forced-color-adjust: none;
1471
1474
  }