@slotted/styles 0.1.0-beta.7 → 0.1.0-beta.9

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