@slotted/styles 0.1.0-beta.1 → 0.1.0-beta.11

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 (180) hide show
  1. package/package.json +1 -1
  2. package/src/accordion/accordion.css +10 -10
  3. package/src/action-bar/action-bar.css +35 -42
  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 +149 -68
  17. package/src/button/button.tokens.json +10 -0
  18. package/src/button-group/button-group.css +79 -74
  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 +103 -90
  36. package/src/command-palette/command-palette.tokens.json +1 -0
  37. package/src/container/container.css +24 -24
  38. package/src/context-menu/context-menu.css +8 -8
  39. package/src/currency-field/currency-field.css +210 -88
  40. package/src/currency-field/currency-field.tokens.json +13 -0
  41. package/src/dashboard-grid/dashboard-grid.css +148 -116
  42. package/src/data-grid/data-grid.css +535 -470
  43. package/src/data-grid/data-grid.tokens.json +4 -0
  44. package/src/data-list/data-list.css +81 -70
  45. package/src/data-list/data-list.tokens.json +2 -1
  46. package/src/date-field/date-field.css +55 -52
  47. package/src/date-field/date-field.tokens.json +1 -0
  48. package/src/date-picker/date-picker.css +40 -42
  49. package/src/date-range-picker/date-range-picker.css +114 -118
  50. package/src/datetime-field/datetime-field.css +78 -80
  51. package/src/datetime-field/datetime-field.tokens.json +1 -0
  52. package/src/datetime-picker/datetime-picker.css +61 -63
  53. package/src/datetime-range-picker/datetime-range-picker.css +149 -156
  54. package/src/description-list/description-list.css +61 -64
  55. package/src/detail-panel/detail-panel.css +86 -71
  56. package/src/detail-panel/detail-panel.tokens.json +2 -0
  57. package/src/dialog/dialog.css +372 -153
  58. package/src/dialog/dialog.tokens.json +6 -0
  59. package/src/divider/divider.css +18 -18
  60. package/src/drawer/drawer.css +205 -210
  61. package/src/drawer/drawer.tokens.json +1 -0
  62. package/src/entity-picker/entity-picker.css +238 -241
  63. package/src/entity-picker/entity-picker.tokens.json +1 -0
  64. package/src/event-calendar/event-calendar.css +343 -385
  65. package/src/field/field.css +74 -78
  66. package/src/field-group/field-group.css +22 -25
  67. package/src/filter-bar/filter-bar.css +193 -209
  68. package/src/form/form.css +34 -24
  69. package/src/form/form.tokens.json +1 -0
  70. package/src/fullscreen/fullscreen.css +24 -25
  71. package/src/grid/grid.css +28 -28
  72. package/src/highlight/highlight.css +6 -6
  73. package/src/hover-card/hover-card.css +6 -6
  74. package/src/icon/icon.css +19 -15
  75. package/src/icon/icon.tokens.json +1 -0
  76. package/src/image/image.css +39 -39
  77. package/src/import-export-center/import-export-center.css +135 -156
  78. package/src/inline/inline.css +27 -27
  79. package/src/inline-message/inline-message.css +52 -28
  80. package/src/inline-message/inline-message.tokens.json +4 -0
  81. package/src/kbd/kbd.css +30 -26
  82. package/src/link/link.css +15 -15
  83. package/src/list/list.css +44 -17
  84. package/src/list/list.tokens.json +4 -0
  85. package/src/list-item/list-item.css +80 -66
  86. package/src/list-item/list-item.tokens.json +7 -0
  87. package/src/listbox/listbox.css +56 -59
  88. package/src/loading-overlay/loading-overlay.css +75 -92
  89. package/src/markdown/markdown.css +17 -17
  90. package/src/menu/menu.css +83 -63
  91. package/src/menubar/menubar.css +13 -13
  92. package/src/message/message.css +182 -202
  93. package/src/message/message.tokens.json +5 -0
  94. package/src/message-scroller/message-scroller.css +41 -42
  95. package/src/multi-select/multi-select.css +152 -145
  96. package/src/multi-select/multi-select.tokens.json +1 -0
  97. package/src/navigation-menu/navigation-menu.css +167 -188
  98. package/src/notification-center/notification-center.css +140 -148
  99. package/src/notification-center/notification-center.tokens.json +3 -0
  100. package/src/number-field/number-field.css +84 -83
  101. package/src/number-field/number-field.tokens.json +1 -0
  102. package/src/otp-input/otp-input.css +67 -57
  103. package/src/otp-input/otp-input.tokens.json +1 -0
  104. package/src/page/page.css +39 -23
  105. package/src/page/page.tokens.json +1 -0
  106. package/src/page-header/page-header.css +323 -283
  107. package/src/page-header/page-header.tokens.json +5 -0
  108. package/src/pagination/pagination.css +68 -72
  109. package/src/popover/popover.css +40 -49
  110. package/src/progress-indicator/progress-indicator.css +177 -120
  111. package/src/progress-indicator/progress-indicator.tokens.json +1 -1
  112. package/src/prompt-composer/prompt-composer.css +221 -102
  113. package/src/prompt-composer/prompt-composer.tokens.json +15 -0
  114. package/src/prose/prose.css +71 -75
  115. package/src/radio-group/radio-group.css +98 -103
  116. package/src/rating/rating.css +136 -132
  117. package/src/rating/rating.tokens.json +1 -0
  118. package/src/result-state/result-state.css +74 -77
  119. package/src/runtime-properties.mjs +2 -0
  120. package/src/saved-views/saved-views.css +41 -47
  121. package/src/scroll-area/scroll-area.css +39 -32
  122. package/src/section/section.css +161 -41
  123. package/src/section/section.tokens.json +7 -2
  124. package/src/segmented-control/segmented-control.css +254 -97
  125. package/src/segmented-control/segmented-control.tokens.json +15 -11
  126. package/src/select/select.css +118 -117
  127. package/src/select/select.tokens.json +1 -0
  128. package/src/side-navigation/side-navigation.css +179 -182
  129. package/src/side-navigation/side-navigation.tokens.json +1 -0
  130. package/src/skeleton/skeleton.css +47 -48
  131. package/src/slider/slider.css +86 -88
  132. package/src/sparkline/sparkline.css +62 -40
  133. package/src/sparkline/sparkline.tokens.json +2 -0
  134. package/src/spinner/spinner.css +83 -180
  135. package/src/spinner/spinner.tokens.json +0 -1
  136. package/src/split-button/split-button.css +30 -31
  137. package/src/split-button/split-button.tokens.json +1 -0
  138. package/src/splitter/splitter.css +35 -35
  139. package/src/stack/stack.css +24 -24
  140. package/src/stat-card/stat-card.css +341 -224
  141. package/src/stat-card/stat-card.tokens.json +3 -0
  142. package/src/status-indicator/status-indicator.css +28 -28
  143. package/src/stepper/stepper.css +58 -62
  144. package/src/switch/switch.css +86 -92
  145. package/src/table/table.css +310 -165
  146. package/src/table/table.tokens.json +6 -0
  147. package/src/table-of-contents/table-of-contents.css +51 -54
  148. package/src/tabs/tabs.css +337 -302
  149. package/src/tabs/tabs.tokens.json +8 -5
  150. package/src/tag/tag.css +79 -71
  151. package/src/tag/tag.tokens.json +9 -0
  152. package/src/tags-input/tags-input.css +145 -82
  153. package/src/tags-input/tags-input.tokens.json +7 -1
  154. package/src/text-field/text-field.css +132 -136
  155. package/src/text-field/text-field.tokens.json +1 -0
  156. package/src/textarea/textarea.css +31 -28
  157. package/src/textarea/textarea.tokens.json +1 -0
  158. package/src/time-field/time-field.css +72 -69
  159. package/src/time-field/time-field.tokens.json +1 -0
  160. package/src/time-picker/time-picker.css +56 -58
  161. package/src/time-range-picker/time-range-picker.css +126 -133
  162. package/src/timeline/timeline.css +254 -266
  163. package/src/timeline/timeline.tokens.json +5 -0
  164. package/src/toast/toast.css +108 -90
  165. package/src/toast/toast.tokens.json +6 -0
  166. package/src/toggle/toggle.css +62 -25
  167. package/src/toggle/toggle.tokens.json +8 -0
  168. package/src/toggle-group/toggle-group.css +106 -60
  169. package/src/toggle-group/toggle-group.tokens.json +10 -0
  170. package/src/toolbar/toolbar.css +30 -35
  171. package/src/tooltip/tooltip.css +26 -26
  172. package/src/top-navigation/top-navigation.css +243 -259
  173. package/src/tour/tour.css +51 -60
  174. package/src/transfer/transfer.css +160 -164
  175. package/src/tree/tree.css +103 -111
  176. package/src/typography/typography.css +40 -36
  177. package/src/typography/typography.tokens.json +1 -0
  178. package/src/upload/upload.css +224 -224
  179. package/src/visually-hidden/visually-hidden.css +1 -1
  180. package/src/wizard/wizard.css +185 -197
@@ -17,7 +17,7 @@
17
17
  * input derives it here, from which radio is checked and which one is under
18
18
  * the pointer, so the picture is the platform's state.
19
19
  */
20
- [data-ui='rating'][data-part='root'] {
20
+ [data-ui-rating][data-part-root] {
21
21
  /**
22
22
  * The symbol does not follow density. The selection scale settled the same
23
23
  * question for a checkbox: the thing the value is read from keeps its size,
@@ -72,13 +72,13 @@
72
72
 
73
73
  /* ── Size ─────────────────────────────────────────────────────────────── */
74
74
 
75
- [data-ui='rating'][data-part='root'][data-size='sm'] {
75
+ [data-ui-rating][data-part-root][data-size='sm'] {
76
76
  --_symbol: var(--slotted-rating-symbol-size, var(--slotted-space-6, 1rem));
77
77
  --_font-size: var(--slotted-control-font-size-sm, 12px);
78
78
  --_gap: var(--slotted-control-gap-sm, 6px);
79
79
  }
80
80
 
81
- [data-ui='rating'][data-part='root'][data-size='lg'] {
81
+ [data-ui-rating][data-part-root][data-size='lg'] {
82
82
  --_symbol: var(--slotted-rating-symbol-size, var(--slotted-space-8, 1.5rem));
83
83
  --_font-size: var(--slotted-control-font-size-lg, 14px);
84
84
  --_gap: var(--slotted-control-gap-lg, 8px);
@@ -86,15 +86,19 @@
86
86
 
87
87
  /* ── Tone ─────────────────────────────────────────────────────────────── */
88
88
 
89
- [data-ui='rating'][data-part='root'][data-tone='accent'] {
89
+ [data-ui-rating][data-part-root][data-tone='accent'] {
90
90
  --_on: var(--slotted-rating-lit-color, var(--slotted-tone-accent-solid));
91
91
  }
92
92
 
93
- [data-ui='rating'][data-part='root'][data-tone='success'] {
93
+ [data-ui-rating][data-part-root][data-tone='success'] {
94
94
  --_on: var(--slotted-rating-lit-color, var(--slotted-tone-success-solid));
95
95
  }
96
96
 
97
- [data-ui='rating'][data-part='root'][data-tone='danger'] {
97
+ [data-ui-rating][data-part-root][data-tone='info'] {
98
+ --_on: var(--slotted-rating-lit-color, var(--slotted-tone-info-solid));
99
+ }
100
+
101
+ [data-ui-rating][data-part-root][data-tone='danger'] {
98
102
  --_on: var(--slotted-rating-lit-color, var(--slotted-tone-danger-solid));
99
103
  }
100
104
 
@@ -111,7 +115,7 @@
111
115
  * inside a twenty-four unit box with a unit and a half of air a side, so two
112
116
  * pixels between boxes reads as the five ReUI's rows read at.
113
117
  */
114
- [data-ui='rating'] [data-part='symbols'] {
118
+ [data-ui-rating] [data-part-symbols] {
115
119
  column-gap: var(--slotted-rating-gap, var(--slotted-space-1, 0.125rem));
116
120
  display: flex;
117
121
  flex: 0 1 auto;
@@ -123,12 +127,12 @@
123
127
  * A finger dragged along the row is the binding's to read, so the row keeps
124
128
  * vertical panning for the page and takes the horizontal gesture.
125
129
  */
126
- [data-ui='rating'] [data-part='symbols']:has([data-part='input']) {
130
+ [data-ui-rating] [data-part-symbols]:has([data-part-input]) {
127
131
  column-gap: 0;
128
132
  touch-action: pan-y;
129
133
  }
130
134
 
131
- [data-ui='rating'] [data-part='item'] {
135
+ [data-ui-rating] [data-part-item] {
132
136
  --_fill: var(--slotted-rating-fill, 0);
133
137
  /*
134
138
  * The curve of the next change of the lit share, read at the moment it
@@ -164,14 +168,14 @@
164
168
  * shrinking included: at `sm` and `md` the box is twenty-four pixels, at
165
169
  * `lg` the symbol plus two pixels of air a side, twenty-eight.
166
170
  */
167
- [data-ui='rating'] [data-part='item']:has(> [data-part='input']) {
171
+ [data-ui-rating] [data-part-item]:has(> [data-part-input]) {
168
172
  --_air: var(--slotted-space-1, 0.125rem);
169
173
  --_box: max(var(--slotted-target-min, 24px), calc(var(--_symbol) + 2 * var(--_air)));
170
174
 
171
175
  min-inline-size: var(--slotted-target-min, 24px);
172
176
  }
173
177
 
174
- [data-ui='rating'] :is([data-part='symbol'], [data-part='fill']) {
178
+ [data-ui-rating] :is([data-part-symbol], [data-part-fill]) {
175
179
  --_drawn: min(var(--_symbol), 100cqi - 2 * var(--_air));
176
180
  --slotted-icon-size: var(--_drawn);
177
181
 
@@ -184,14 +188,14 @@
184
188
  z-index: 2;
185
189
  }
186
190
 
187
- [data-ui='rating'] :is([data-part='symbol'], [data-part='fill']) svg {
191
+ [data-ui-rating] :is([data-part-symbol], [data-part-fill]) svg {
188
192
  stroke-width: var(--_stroke);
189
193
  transition:
190
194
  fill var(--slotted-control-transition-duration) var(--slotted-control-transition-easing),
191
195
  stroke var(--slotted-control-transition-duration) var(--slotted-control-transition-easing);
192
196
  }
193
197
 
194
- [data-ui='rating'] [data-part='symbol'] svg {
198
+ [data-ui-rating] [data-part-symbol] svg {
195
199
  fill: var(--_off);
196
200
  stroke: var(--_off-edge);
197
201
  }
@@ -201,18 +205,18 @@
201
205
  * the share `--_fill` names; the clip moves on the medium step, so a value
202
206
  * that changes by three stars is seen travelling rather than swapped.
203
207
  */
204
- [data-ui='rating'] [data-part='fill'] {
208
+ [data-ui-rating] [data-part-fill] {
205
209
  clip-path: inset(0 calc((1 - var(--_fill)) * 100%) 0 0);
206
210
  transition:
207
211
  scale var(--slotted-duration-short) var(--slotted-easing-standard),
208
212
  clip-path var(--slotted-duration-medium) var(--_fill-easing);
209
213
  }
210
214
 
211
- [data-ui='rating'][data-part='root']:dir(rtl) [data-part='fill'] {
215
+ [data-ui-rating][data-part-root]:dir(rtl) [data-part-fill] {
212
216
  clip-path: inset(0 0 0 calc((1 - var(--_fill)) * 100%));
213
217
  }
214
218
 
215
- [data-ui='rating'] [data-part='fill'] svg {
219
+ [data-ui-rating] [data-part-fill] svg {
216
220
  fill: var(--_on);
217
221
  stroke: var(--_edge);
218
222
  }
@@ -229,7 +233,7 @@
229
233
  * The box is a circle: its ground is the halo the pointer lights, and its
230
234
  * edge is where the focus ring is drawn.
231
235
  */
232
- [data-ui='rating'] [data-part='input'] {
236
+ [data-ui-rating] [data-part-input] {
233
237
  appearance: none;
234
238
  background-color: transparent;
235
239
  block-size: 100%;
@@ -247,7 +251,7 @@
247
251
  z-index: 0;
248
252
  }
249
253
 
250
- [data-ui='rating'] [data-part='input'][data-half] {
254
+ [data-ui-rating] [data-part-input][data-half] {
251
255
  border-end-end-radius: 0;
252
256
  border-start-end-radius: 0;
253
257
  inline-size: 50%;
@@ -259,13 +263,13 @@
259
263
  * What the reader has picked: every symbol before the checked radio's item
260
264
  * is lit, and that item is lit whole or by half.
261
265
  */
262
- [data-ui='rating'] [data-part='item']:has(~ [data-part='item'] > [data-part='input']:checked),
263
- [data-ui='rating'] [data-part='item']:has(> [data-part='input']:not([data-half]):checked) {
266
+ [data-ui-rating] [data-part-item]:has(~ [data-part-item] > [data-part-input]:checked),
267
+ [data-ui-rating] [data-part-item]:has(> [data-part-input]:not([data-half]):checked) {
264
268
  --_fill: 1;
265
269
  --_fill-easing: var(--slotted-easing-enter);
266
270
  }
267
271
 
268
- [data-ui='rating'] [data-part='item']:has(> [data-part='input'][data-half]:checked) {
272
+ [data-ui-rating] [data-part-item]:has(> [data-part-input][data-half]:checked) {
269
273
  --_fill: 0.5;
270
274
  --_fill-easing: var(--slotted-easing-enter);
271
275
  }
@@ -275,27 +279,27 @@
275
279
  * row shows the value under it instead of the one held, the way every
276
280
  * surveyed input previews; nothing is requested until the press.
277
281
  */
278
- [data-ui='rating'][data-part='root']:not([data-readonly], [data-disabled]):has(
279
- [data-part='input']:hover:not(:disabled)
282
+ [data-ui-rating][data-part-root]:not([data-readonly], [data-disabled]):has(
283
+ [data-part-input]:hover:not(:disabled)
280
284
  )
281
- [data-part='item'] {
285
+ [data-part-item] {
282
286
  --_fill: 0;
283
287
  --_fill-easing: var(--slotted-easing-exit);
284
288
  }
285
289
 
286
- [data-ui='rating'][data-part='root']:not([data-readonly], [data-disabled]):has(
287
- [data-part='input']:hover:not(:disabled)
290
+ [data-ui-rating][data-part-root]:not([data-readonly], [data-disabled]):has(
291
+ [data-part-input]:hover:not(:disabled)
288
292
  )
289
- [data-part='item']:is(
290
- :has(~ [data-part='item'] > [data-part='input']:hover:not(:disabled)),
291
- :has(> [data-part='input']:not([data-half]):hover:not(:disabled))
293
+ [data-part-item]:is(
294
+ :has(~ [data-part-item] > [data-part-input]:hover:not(:disabled)),
295
+ :has(> [data-part-input]:not([data-half]):hover:not(:disabled))
292
296
  ) {
293
297
  --_fill: 1;
294
298
  --_fill-easing: var(--slotted-easing-enter);
295
299
  }
296
300
 
297
- [data-ui='rating'][data-part='root']:not([data-readonly], [data-disabled])
298
- [data-part='item']:has(> [data-part='input'][data-half]:hover:not(:disabled)) {
301
+ [data-ui-rating][data-part-root]:not([data-readonly], [data-disabled])
302
+ [data-part-item]:has(> [data-part-input][data-half]:hover:not(:disabled)) {
299
303
  --_fill: 0.5;
300
304
  --_fill-easing: var(--slotted-easing-enter);
301
305
  }
@@ -305,7 +309,7 @@
305
309
  * and marks the root `data-dragging`; the transitions of the lit share step
306
310
  * aside, so the row follows the finger rather than trailing it.
307
311
  */
308
- [data-ui='rating'][data-part='root'][data-dragging] [data-part='fill'] {
312
+ [data-ui-rating][data-part-root][data-dragging] [data-part-fill] {
309
313
  transition-duration: var(--slotted-duration-instant);
310
314
  }
311
315
 
@@ -319,19 +323,19 @@
319
323
  * symbol six per cent below its size and darkens the wash, and the release
320
324
  * brings both back on the standard curve.
321
325
  */
322
- [data-ui='rating'][data-part='root']:not([data-readonly], [data-disabled])
323
- [data-part='input']:hover:not(:disabled) {
326
+ [data-ui-rating][data-part-root]:not([data-readonly], [data-disabled])
327
+ [data-part-input]:hover:not(:disabled) {
324
328
  background-color: var(--_halo);
325
329
  }
326
330
 
327
- [data-ui='rating'][data-part='root']:not([data-readonly], [data-disabled])
328
- [data-part='input']:active:not(:disabled) {
331
+ [data-ui-rating][data-part-root]:not([data-readonly], [data-disabled])
332
+ [data-part-input]:active:not(:disabled) {
329
333
  background-color: var(--_halo-active);
330
334
  }
331
335
 
332
- [data-ui='rating'][data-part='root']:not([data-readonly], [data-disabled])
333
- [data-part='item']:has(> [data-part='input']:active:not(:disabled))
334
- > :is([data-part='symbol'], [data-part='fill']) {
336
+ [data-ui-rating][data-part-root]:not([data-readonly], [data-disabled])
337
+ [data-part-item]:has(> [data-part-input]:active:not(:disabled))
338
+ > :is([data-part-symbol], [data-part-fill]) {
335
339
  scale: 0.94;
336
340
  }
337
341
 
@@ -341,7 +345,7 @@
341
345
  * half radio is half of a star and the ring still encloses the whole star,
342
346
  * because the star is what the reader is on.
343
347
  */
344
- [data-ui='rating'] [data-part='item']:has(> [data-part='input']:focus-visible) {
348
+ [data-ui-rating] [data-part-item]:has(> [data-part-input]:focus-visible) {
345
349
  border-radius: var(--slotted-radius-full, 9999px);
346
350
  outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color);
347
351
  outline-offset: calc(-1 * var(--slotted-focus-ring-width, 2px));
@@ -352,7 +356,7 @@
352
356
  * that holds the ratio against it — so a required rating left empty is
353
357
  * marked on the stars themselves, beside the message `field` writes.
354
358
  */
355
- [data-ui='rating'][data-part='root'][data-invalid] {
359
+ [data-ui-rating][data-part-root][data-invalid] {
356
360
  --_off: var(--slotted-rating-invalid-color, var(--slotted-tone-danger-surface));
357
361
  --_off-edge: var(--slotted-tone-danger-border);
358
362
  --slotted-focus-ring-color: var(--slotted-focus-ring-color-invalid);
@@ -365,14 +369,14 @@
365
369
  * stroke grows about its path inside the drawing's own box, so no star and
366
370
  * no label moves.
367
371
  */
368
- [data-ui='rating'][data-part='root'][data-invalid] [data-part='symbol'] svg {
372
+ [data-ui-rating][data-part-root][data-invalid] [data-part-symbol] svg {
369
373
  stroke-width: calc(
370
374
  var(--_stroke) * 1px +
371
375
  var(--slotted-rating-invalid-edge-width, var(--slotted-control-invalid-edge-width, 1px))
372
376
  );
373
377
  }
374
378
 
375
- [data-ui='rating'][data-part='root'][data-readonly] [data-part='input'] {
379
+ [data-ui-rating][data-part-root][data-readonly] [data-part-input] {
376
380
  cursor: default;
377
381
  }
378
382
 
@@ -381,14 +385,14 @@
381
385
  * disabled ink and the unlit ones stay on the disabled ground, so three of
382
386
  * five reads as three of five and not as an absent control.
383
387
  */
384
- [data-ui='rating'][data-part='root'][data-disabled] {
388
+ [data-ui-rating][data-part-root][data-disabled] {
385
389
  --_on: var(--slotted-disabled-foreground);
386
390
  --_off: var(--slotted-disabled-background);
387
391
 
388
392
  color: var(--slotted-disabled-foreground);
389
393
  }
390
394
 
391
- [data-ui='rating'][data-part='root'][data-disabled] [data-part='input'] {
395
+ [data-ui-rating][data-part-root][data-disabled] [data-part-input] {
392
396
  cursor: not-allowed;
393
397
  }
394
398
 
@@ -399,13 +403,13 @@
399
403
  * how many readings the number is made of. Figures are tabular, so a row of
400
404
  * products lines its numbers up.
401
405
  */
402
- [data-ui='rating'] [data-part='value'] {
406
+ [data-ui-rating] [data-part-value] {
403
407
  font-variant-numeric: tabular-nums;
404
408
  font-weight: var(--slotted-font-weight-semibold, 600);
405
409
  white-space: nowrap;
406
410
  }
407
411
 
408
- [data-ui='rating'] [data-part='count'] {
412
+ [data-ui-rating] [data-part-count] {
409
413
  color: var(--slotted-text-muted, GrayText);
410
414
  font-variant-numeric: tabular-nums;
411
415
  white-space: nowrap;
@@ -416,7 +420,7 @@
416
420
  * rather than a figure — so it is set muted, as a description is, and a
417
421
  * long one wraps inside the row rather than running past it.
418
422
  */
419
- [data-ui='rating'][data-part='root']:has([data-part='input']) > [data-part='value'] {
423
+ [data-ui-rating][data-part-root]:has([data-part-input]) > [data-part-value] {
420
424
  color: var(--slotted-text-muted, GrayText);
421
425
  font-weight: var(--slotted-font-weight-regular, 400);
422
426
  min-inline-size: 0;
@@ -428,14 +432,14 @@
428
432
 
429
433
  /* While the pointer previews a value the word names it, and reads as the
430
434
  answer to the pointer rather than as a hint. */
431
- [data-ui='rating'][data-part='root']:not([data-readonly], [data-disabled]):has(
432
- [data-part='input']:hover:not(:disabled)
435
+ [data-ui-rating][data-part-root]:not([data-readonly], [data-disabled]):has(
436
+ [data-part-input]:hover:not(:disabled)
433
437
  )
434
- > [data-part='value'] {
438
+ > [data-part-value] {
435
439
  color: var(--slotted-text, CanvasText);
436
440
  }
437
441
 
438
- [data-ui='rating'][data-part='root'][data-disabled] > [data-part='value'] {
442
+ [data-ui-rating][data-part-root][data-disabled] > [data-part-value] {
439
443
  color: var(--slotted-disabled-foreground);
440
444
  }
441
445
 
@@ -457,9 +461,9 @@
457
461
  * trimmed figure pulled the stars up against its baseline.
458
462
  */
459
463
  @supports (text-box: trim-both cap alphabetic) {
460
- [data-ui='rating'][data-part='root'] > :is([data-part='value'], [data-part='count']),
461
- [data-ui='rating'] [data-part='level-count'],
462
- [data-ui='rating'] [data-part='level-label'] > span:not([data-ui]) {
464
+ [data-ui-rating][data-part-root] > :is([data-part-value], [data-part-count]),
465
+ [data-ui-rating] [data-part-level-count],
466
+ [data-ui-rating] [data-part-level-label] > span:not([data-ui]) {
463
467
  text-box: trim-both cap alphabetic;
464
468
  }
465
469
  }
@@ -471,11 +475,11 @@
471
475
  * cell has room for, and the one Fluent calls `compact`. The star is the
472
476
  * mark of the figure, not a share of it, so it is always lit whole.
473
477
  */
474
- [data-ui='rating'][data-part='root'][data-variant='compact'] {
478
+ [data-ui-rating][data-part-root][data-variant='compact'] {
475
479
  column-gap: var(--slotted-space-2, 0.25rem);
476
480
  }
477
481
 
478
- [data-ui='rating'][data-part='root'][data-variant='compact'] [data-part='item'] {
482
+ [data-ui-rating][data-part-root][data-variant='compact'] [data-part-item] {
479
483
  --_fill: 1;
480
484
  }
481
485
 
@@ -489,7 +493,7 @@
489
493
  * query, because the break is where the content stops fitting and nowhere
490
494
  * else.
491
495
  */
492
- [data-ui='rating'][data-part='root'][data-variant='summary'] {
496
+ [data-ui-rating][data-part-root][data-variant='summary'] {
493
497
  --_bar: var(--slotted-rating-bar-size, var(--slotted-space-4, 0.5rem));
494
498
 
495
499
  align-items: start;
@@ -500,7 +504,7 @@
500
504
  inline-size: 100%;
501
505
  }
502
506
 
503
- [data-ui='rating'] [data-part='aggregate'] {
507
+ [data-ui-rating] [data-part-aggregate] {
504
508
  align-content: start;
505
509
  column-gap: var(--slotted-space-3, 0.375rem);
506
510
  display: grid;
@@ -513,23 +517,23 @@
513
517
  * The figure is set at the key-figure step `stat-card` reads, on its own
514
518
  * line height, and the scale beside it sits on its baseline.
515
519
  */
516
- [data-ui='rating'] [data-part='aggregate'] > [data-part='value'] {
520
+ [data-ui-rating] [data-part-aggregate] > [data-part-value] {
517
521
  align-self: baseline;
518
522
  font-size: var(--slotted-font-size-4xl, 2rem);
519
523
  font-weight: var(--slotted-font-weight-semibold, 600);
520
524
  line-height: var(--slotted-line-height-4xl, 1.2);
521
525
  }
522
526
 
523
- [data-ui='rating'] [data-part='scale'] {
527
+ [data-ui-rating] [data-part-scale] {
524
528
  align-self: baseline;
525
529
  color: var(--slotted-text-muted, GrayText);
526
530
  }
527
531
 
528
- [data-ui='rating'] [data-part='aggregate'] > :not([data-part='value'], [data-part='scale']) {
532
+ [data-ui-rating] [data-part-aggregate] > :not([data-part-value], [data-part-scale]) {
529
533
  grid-column: 1 / -1;
530
534
  }
531
535
 
532
- [data-ui='rating'] [data-part='aggregate'] > [data-part='count'] {
536
+ [data-ui-rating] [data-part-aggregate] > [data-part-count] {
533
537
  white-space: normal;
534
538
  }
535
539
 
@@ -537,7 +541,7 @@
537
541
  * The distribution is one grid whose rows are subgrids, so every label,
538
542
  * bar and count lines up with the one above it whatever the numbers.
539
543
  */
540
- [data-ui='rating'] [data-part='distribution'] {
544
+ [data-ui-rating] [data-part-distribution] {
541
545
  display: grid;
542
546
  flex: 1 1 15rem;
543
547
  grid-template-columns: auto minmax(4rem, 1fr) auto;
@@ -548,13 +552,13 @@
548
552
  row-gap: var(--slotted-space-1, 0.125rem);
549
553
  }
550
554
 
551
- [data-ui='rating'] [data-part='distribution'] > li {
555
+ [data-ui-rating] [data-part-distribution] > li {
552
556
  display: grid;
553
557
  grid-column: 1 / -1;
554
558
  grid-template-columns: subgrid;
555
559
  }
556
560
 
557
- [data-ui='rating'] [data-part='level'] {
561
+ [data-ui-rating] [data-part-level] {
558
562
  align-items: center;
559
563
  background-color: transparent;
560
564
  border: 0;
@@ -578,19 +582,19 @@
578
582
  box-shadow var(--slotted-control-transition-duration) var(--slotted-control-transition-easing);
579
583
  }
580
584
 
581
- [data-ui='rating'] button[data-part='level'] {
585
+ [data-ui-rating] button[data-part-level] {
582
586
  cursor: pointer;
583
587
  }
584
588
 
585
- [data-ui='rating'] button[data-part='level']:hover:not(:disabled) {
589
+ [data-ui-rating] button[data-part-level]:hover:not(:disabled) {
586
590
  background-color: var(--_halo);
587
591
  }
588
592
 
589
- [data-ui='rating'] button[data-part='level']:active:not(:disabled) {
593
+ [data-ui-rating] button[data-part-level]:active:not(:disabled) {
590
594
  background-color: var(--_halo-active);
591
595
  }
592
596
 
593
- [data-ui='rating'] button[data-part='level']:focus-visible {
597
+ [data-ui-rating] button[data-part-level]:focus-visible {
594
598
  outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color);
595
599
  outline-offset: calc(-1 * var(--slotted-focus-ring-width, 2px));
596
600
  }
@@ -601,22 +605,22 @@
601
605
  * as they are, so the filter reads as one row lit among five rather than
602
606
  * four rows dimmed.
603
607
  */
604
- [data-ui='rating'] [data-part='level'][data-pressed] {
608
+ [data-ui-rating] [data-part-level][data-pressed] {
605
609
  background-color: var(--slotted-tone-warning-surface);
606
610
  box-shadow: inset 0 0 0 var(--slotted-border-width-thin, 1px) var(--slotted-tone-warning-border);
607
611
  }
608
612
 
609
- [data-ui='rating'] [data-part='level'][data-pressed] [data-part='level-count'] {
613
+ [data-ui-rating] [data-part-level][data-pressed] [data-part-level-count] {
610
614
  color: var(--slotted-text, CanvasText);
611
615
  font-weight: var(--slotted-font-weight-semibold, 600);
612
616
  }
613
617
 
614
- [data-ui='rating'] button[data-part='level']:disabled {
618
+ [data-ui-rating] button[data-part-level]:disabled {
615
619
  color: var(--slotted-disabled-foreground);
616
620
  cursor: default;
617
621
  }
618
622
 
619
- [data-ui='rating'] [data-part='level-label'] {
623
+ [data-ui-rating] [data-part-level-label] {
620
624
  --slotted-icon-size: var(--slotted-control-icon-size-sm, 14px);
621
625
 
622
626
  align-items: center;
@@ -626,18 +630,18 @@
626
630
  white-space: nowrap;
627
631
  }
628
632
 
629
- [data-ui='rating'] [data-part='level-label'] svg {
633
+ [data-ui-rating] [data-part-level-label] svg {
630
634
  fill: currentColor;
631
635
  stroke-width: var(--_stroke);
632
636
  }
633
637
 
634
- [data-ui='rating'] [data-part='level-label'] > [data-ui='icon'] {
638
+ [data-ui-rating] [data-part-level-label] > [data-ui-icon] {
635
639
  color: var(--slotted-text-muted, GrayText);
636
640
  }
637
641
 
638
642
  /* The track takes the symbols' edge: nothing in `light` and `dark`, a black
639
643
  hairline in `high-contrast`, where its ground is the page's white. */
640
- [data-ui='rating'] [data-part='track'] {
644
+ [data-ui-rating] [data-part-track] {
641
645
  background-color: var(--_off);
642
646
  block-size: var(--_bar);
643
647
  box-shadow: inset 0 0 0 var(--slotted-border-width-thin, 1px) var(--_edge);
@@ -650,7 +654,7 @@
650
654
  * the enter curve, the first time it is drawn and every time the share
651
655
  * changes, so a summary that loads reads as filling rather than popping.
652
656
  */
653
- [data-ui='rating'] [data-part='indicator'] {
657
+ [data-ui-rating] [data-part-indicator] {
654
658
  background-color: var(--slotted-rating-bar-color, var(--_on));
655
659
  block-size: 100%;
656
660
  border-radius: inherit;
@@ -660,20 +664,20 @@
660
664
  }
661
665
 
662
666
  @starting-style {
663
- [data-ui='rating'] [data-part='indicator'] {
667
+ [data-ui-rating] [data-part-indicator] {
664
668
  inline-size: 0;
665
669
  }
666
670
  }
667
671
 
668
- [data-ui='rating'] [data-part='level-count'] {
672
+ [data-ui-rating] [data-part-level-count] {
669
673
  color: var(--slotted-text-muted, GrayText);
670
674
  font-variant-numeric: tabular-nums;
671
675
  justify-self: end;
672
676
  white-space: nowrap;
673
677
  }
674
678
 
675
- [data-ui='rating'][data-disabled] [data-part='indicator'],
676
- [data-ui='rating'] button[data-part='level']:disabled [data-part='indicator'] {
679
+ [data-ui-rating][data-disabled] [data-part-indicator],
680
+ [data-ui-rating] button[data-part-level]:disabled [data-part-indicator] {
677
681
  background-color: var(--slotted-disabled-foreground);
678
682
  }
679
683
 
@@ -689,7 +693,7 @@
689
693
  * (`@slotted/core/rating`, `summariseRatings`). Every figure, the interval
690
694
  * included, is also written as text.
691
695
  */
692
- [data-ui='rating'][data-part='root'][data-variant='spectrum'] {
696
+ [data-ui-rating][data-part-root][data-variant='spectrum'] {
693
697
  --_g: var(--slotted-space-3, 0.375rem);
694
698
  --_plot: var(--slotted-space-12, 4rem);
695
699
  --_col: calc((100% - 4 * var(--_g)) / 5);
@@ -702,7 +706,7 @@
702
706
  inline-size: 100%;
703
707
  }
704
708
 
705
- [data-ui='rating'][data-variant='spectrum'] > [data-part='aggregate'] {
709
+ [data-ui-rating][data-variant='spectrum'] > [data-part-aggregate] {
706
710
  align-items: baseline;
707
711
  column-gap: var(--slotted-space-3, 0.375rem);
708
712
  display: flex;
@@ -710,7 +714,7 @@
710
714
  row-gap: var(--slotted-space-2, 0.25rem);
711
715
  }
712
716
 
713
- [data-ui='rating'][data-variant='spectrum'] > [data-part='aggregate'] > [data-part='count'] {
717
+ [data-ui-rating][data-variant='spectrum'] > [data-part-aggregate] > [data-part-count] {
714
718
  color: var(--slotted-text-muted, GrayText);
715
719
  flex-basis: 100%;
716
720
  }
@@ -719,7 +723,7 @@
719
723
  * The conclusion is a pill in its tone's surface, edge and text roles, the
720
724
  * pair a badge reads, pushed to the inline end of the figure's line.
721
725
  */
722
- [data-ui='rating'] [data-part='insight'] {
726
+ [data-ui-rating] [data-part-insight] {
723
727
  align-self: center;
724
728
  background-color: var(--_tint-surface);
725
729
  border-radius: var(--slotted-radius-full, 9999px);
@@ -733,61 +737,61 @@
733
737
  white-space: nowrap;
734
738
  }
735
739
 
736
- [data-ui='rating'] :is([data-part='insight'], [data-part='bucket'])[data-tone='success'] {
740
+ [data-ui-rating] :is([data-part-insight], [data-part-bucket])[data-tone='success'] {
737
741
  --_tint-surface: var(--slotted-tone-success-surface);
738
742
  --_tint-border: var(--slotted-tone-success-border);
739
743
  --_tint-text: var(--slotted-tone-success-text);
740
744
  --_mark: var(--slotted-tone-success-solid);
741
745
  }
742
746
 
743
- [data-ui='rating'] :is([data-part='insight'], [data-part='bucket'])[data-tone='warning'] {
747
+ [data-ui-rating] :is([data-part-insight], [data-part-bucket])[data-tone='warning'] {
744
748
  --_tint-surface: var(--slotted-tone-warning-surface);
745
749
  --_tint-border: var(--slotted-tone-warning-border);
746
750
  --_tint-text: var(--slotted-tone-warning-text);
747
751
  --_mark: var(--slotted-tone-warning-solid);
748
752
  }
749
753
 
750
- [data-ui='rating'] :is([data-part='insight'], [data-part='bucket'])[data-tone='secondary'] {
754
+ [data-ui-rating] :is([data-part-insight], [data-part-bucket])[data-tone='secondary'] {
751
755
  --_tint-surface: var(--slotted-tone-secondary-surface);
752
756
  --_tint-border: var(--slotted-tone-secondary-border);
753
757
  --_tint-text: var(--slotted-text-muted, GrayText);
754
758
  --_mark: var(--slotted-tone-secondary-border);
755
759
  }
756
760
 
757
- [data-ui='rating'] :is([data-part='insight'], [data-part='bucket'])[data-tone='danger'] {
761
+ [data-ui-rating] :is([data-part-insight], [data-part-bucket])[data-tone='danger'] {
758
762
  --_tint-surface: var(--slotted-tone-danger-surface);
759
763
  --_tint-border: var(--slotted-tone-danger-border);
760
764
  --_tint-text: var(--slotted-tone-danger-text);
761
765
  --_mark: var(--slotted-tone-danger-solid);
762
766
  }
763
767
 
764
- [data-ui='rating'] [data-part='plot'] {
768
+ [data-ui-rating] [data-part-plot] {
765
769
  display: grid;
766
770
  row-gap: var(--slotted-space-3, 0.375rem);
767
771
  }
768
772
 
769
773
  /* The drawing area: its top margin is the room the mean's label stands in. */
770
- [data-ui='rating'] [data-part='field'] {
774
+ [data-ui-rating] [data-part-field] {
771
775
  block-size: var(--_plot);
772
776
  border-block-end: var(--slotted-border-width-thin, 1px) solid var(--slotted-border-subtle);
773
777
  margin-block-start: var(--slotted-space-7, 1.25rem);
774
778
  position: relative;
775
779
  }
776
780
 
777
- [data-ui='rating'] :is([data-part='columns'], [data-part='axis']) {
781
+ [data-ui-rating] :is([data-part-columns], [data-part-axis]) {
778
782
  column-gap: var(--_g);
779
783
  display: grid;
780
784
  grid-template-columns: repeat(5, 1fr);
781
785
  }
782
786
 
783
- [data-ui='rating'] [data-part='columns'] {
787
+ [data-ui-rating] [data-part-columns] {
784
788
  block-size: 100%;
785
789
  isolation: isolate;
786
790
  position: relative;
787
791
  z-index: 1;
788
792
  }
789
793
 
790
- [data-ui='rating'] [data-part='column'] {
794
+ [data-ui-rating] [data-part-column] {
791
795
  align-items: end;
792
796
  background-color: transparent;
793
797
  border: 0;
@@ -801,19 +805,19 @@
801
805
  var(--slotted-control-transition-easing);
802
806
  }
803
807
 
804
- [data-ui='rating'] button[data-part='column'] {
808
+ [data-ui-rating] button[data-part-column] {
805
809
  cursor: pointer;
806
810
  }
807
811
 
808
- [data-ui='rating'] button[data-part='column']:hover:not(:disabled) {
812
+ [data-ui-rating] button[data-part-column]:hover:not(:disabled) {
809
813
  background-color: var(--_halo);
810
814
  }
811
815
 
812
- [data-ui='rating'] button[data-part='column']:active:not(:disabled) {
816
+ [data-ui-rating] button[data-part-column]:active:not(:disabled) {
813
817
  background-color: var(--_halo-active);
814
818
  }
815
819
 
816
- [data-ui='rating'] button[data-part='column']:focus-visible {
820
+ [data-ui-rating] button[data-part-column]:focus-visible {
817
821
  outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color);
818
822
  outline-offset: var(--slotted-focus-ring-offset, 2px);
819
823
  }
@@ -824,7 +828,7 @@
824
828
  * any other is at least two pixels, so one reading is never invisible. It
825
829
  * grows from the baseline on the long step and the enter curve.
826
830
  */
827
- [data-ui='rating'] [data-part='column'] > [data-part='bar'] {
831
+ [data-ui-rating] [data-part-column] > [data-part-bar] {
828
832
  background-color: var(--_on);
829
833
  block-size: max(
830
834
  min(var(--slotted-space-1, 0.125rem), var(--slotted-rating-share, 0) * 100rem),
@@ -841,15 +845,15 @@
841
845
  }
842
846
 
843
847
  @starting-style {
844
- [data-ui='rating'] [data-part='column'] > [data-part='bar'] {
848
+ [data-ui-rating] [data-part-column] > [data-part-bar] {
845
849
  block-size: 0;
846
850
  }
847
851
  }
848
852
 
849
- [data-ui='rating']
850
- [data-part='columns']:has([data-pressed])
851
- [data-part='column']:not([data-pressed])
852
- > [data-part='bar'] {
853
+ [data-ui-rating]
854
+ [data-part-columns]:has([data-pressed])
855
+ [data-part-column]:not([data-pressed])
856
+ > [data-part-bar] {
853
857
  background-color: var(--_off);
854
858
  }
855
859
 
@@ -858,12 +862,12 @@
858
862
  * first column, plus one column and one gap per unit. The interval sits
859
863
  * behind the columns and the mean in front of them.
860
864
  */
861
- [data-ui='rating'] :is([data-part='interval'], [data-part='mean']) {
865
+ [data-ui-rating] :is([data-part-interval], [data-part-mean]) {
862
866
  pointer-events: none;
863
867
  position: absolute;
864
868
  }
865
869
 
866
- [data-ui='rating'] [data-part='interval'] {
870
+ [data-ui-rating] [data-part-interval] {
867
871
  background-color: color-mix(
868
872
  in oklab,
869
873
  var(--slotted-text) calc(var(--slotted-highlight-tint-opacity, 0.075) * 100%),
@@ -883,7 +887,7 @@
883
887
  z-index: 0;
884
888
  }
885
889
 
886
- [data-ui='rating'] [data-part='mean'] {
890
+ [data-ui-rating] [data-part-mean] {
887
891
  border-inline-start: var(--slotted-border-width-thick, 2px) solid var(--slotted-text);
888
892
  inset-block: calc(-1 * var(--slotted-space-5, 0.75rem)) 0;
889
893
  inset-inline-start: calc(
@@ -894,7 +898,7 @@
894
898
  z-index: 2;
895
899
  }
896
900
 
897
- [data-ui='rating'] [data-part='mean-label'] {
901
+ [data-ui-rating] [data-part-mean-label] {
898
902
  background-color: var(--slotted-surface-inverse);
899
903
  border-radius: var(--slotted-radius-full, 9999px);
900
904
  color: var(--slotted-text-inverse);
@@ -910,17 +914,17 @@
910
914
  white-space: nowrap;
911
915
  }
912
916
 
913
- [data-ui='rating'][data-part='root']:dir(rtl) [data-part='mean-label'] {
917
+ [data-ui-rating][data-part-root]:dir(rtl) [data-part-mean-label] {
914
918
  translate: 50% 0;
915
919
  }
916
920
 
917
- [data-ui='rating'] [data-part='tick'] {
921
+ [data-ui-rating] [data-part-tick] {
918
922
  display: grid;
919
923
  justify-items: center;
920
924
  row-gap: var(--slotted-space-1, 0.125rem);
921
925
  }
922
926
 
923
- [data-ui='rating'] [data-part='tick-label'] {
927
+ [data-ui-rating] [data-part-tick-label] {
924
928
  --slotted-icon-size: var(--slotted-control-icon-size-sm, 14px);
925
929
 
926
930
  align-items: center;
@@ -929,16 +933,16 @@
929
933
  font-variant-numeric: tabular-nums;
930
934
  }
931
935
 
932
- [data-ui='rating'] [data-part='tick-label'] svg {
936
+ [data-ui-rating] [data-part-tick-label] svg {
933
937
  fill: currentColor;
934
938
  stroke-width: var(--_stroke);
935
939
  }
936
940
 
937
- [data-ui='rating'] [data-part='tick-label'] > [data-ui='icon'] {
941
+ [data-ui-rating] [data-part-tick-label] > [data-ui-icon] {
938
942
  color: var(--slotted-text-muted, GrayText);
939
943
  }
940
944
 
941
- [data-ui='rating'] [data-part='tick-share'] {
945
+ [data-ui-rating] [data-part-tick-share] {
942
946
  color: var(--slotted-text-muted, GrayText);
943
947
  font-size: var(--slotted-font-size-xs, 0.75rem);
944
948
  font-variant-numeric: tabular-nums;
@@ -946,7 +950,7 @@
946
950
 
947
951
  /* The executive reading: positive, neutral and negative shares, each with
948
952
  its tone's mark, which never carries the meaning alone. */
949
- [data-ui='rating'] [data-part='sentiment'] {
953
+ [data-ui-rating] [data-part-sentiment] {
950
954
  color: var(--slotted-text-muted, GrayText);
951
955
  column-gap: var(--slotted-space-6, 1rem);
952
956
  display: flex;
@@ -955,19 +959,19 @@
955
959
  row-gap: var(--slotted-space-2, 0.25rem);
956
960
  }
957
961
 
958
- [data-ui='rating'] [data-part='bucket'] {
962
+ [data-ui-rating] [data-part-bucket] {
959
963
  align-items: center;
960
964
  column-gap: var(--slotted-space-2, 0.25rem);
961
965
  display: inline-flex;
962
966
  }
963
967
 
964
- [data-ui='rating'] [data-part='bucket'] > strong {
968
+ [data-ui-rating] [data-part-bucket] > strong {
965
969
  color: var(--slotted-text, CanvasText);
966
970
  font-variant-numeric: tabular-nums;
967
971
  font-weight: var(--slotted-font-weight-semibold, 600);
968
972
  }
969
973
 
970
- [data-ui='rating'] [data-part='swatch'] {
974
+ [data-ui-rating] [data-part-swatch] {
971
975
  background-color: var(--_mark);
972
976
  block-size: var(--slotted-space-4, 0.5rem);
973
977
  border-radius: var(--slotted-radius-full, 9999px);
@@ -984,15 +988,15 @@
984
988
  * the count. Two rows at 3.3 stop looking alike when one is split between
985
989
  * the ends.
986
990
  */
987
- [data-ui='rating'][data-part='root'][data-variant='histogram'] {
991
+ [data-ui-rating][data-part-root][data-variant='histogram'] {
988
992
  column-gap: var(--slotted-space-2, 0.25rem);
989
993
  }
990
994
 
991
- [data-ui='rating'][data-part='root'][data-variant='histogram'] [data-part='item'] {
995
+ [data-ui-rating][data-part-root][data-variant='histogram'] [data-part-item] {
992
996
  --_fill: 1;
993
997
  }
994
998
 
995
- [data-ui='rating'] [data-part='histogram'] {
999
+ [data-ui-rating] [data-part-histogram] {
996
1000
  align-items: end;
997
1001
  block-size: calc(1cap + 0.5em);
998
1002
  border-block-end: var(--slotted-border-width-thin, 1px) solid var(--slotted-border-strong);
@@ -1002,7 +1006,7 @@
1002
1006
  margin-inline: var(--slotted-space-2, 0.25rem);
1003
1007
  }
1004
1008
 
1005
- [data-ui='rating'] [data-part='histogram'] > [data-part='bar'] {
1009
+ [data-ui-rating] [data-part-histogram] > [data-part-bar] {
1006
1010
  background-color: var(--_on);
1007
1011
  block-size: max(
1008
1012
  min(var(--slotted-border-width-thin, 1px), var(--slotted-rating-share, 0) * 100rem),
@@ -1019,11 +1023,11 @@
1019
1023
  * scales.
1020
1024
  */
1021
1025
  @media (pointer: coarse) {
1022
- [data-ui='rating'] [data-part='item']:has(> [data-part='input']) {
1026
+ [data-ui-rating] [data-part-item]:has(> [data-part-input]) {
1023
1027
  --_box: max(var(--slotted-target-comfortable, 44px), var(--_symbol));
1024
1028
  }
1025
1029
 
1026
- [data-ui='rating'] [data-part='level'] {
1030
+ [data-ui-rating] [data-part-level] {
1027
1031
  min-block-size: var(--slotted-target-comfortable, 44px);
1028
1032
  }
1029
1033
  }
@@ -1035,36 +1039,36 @@
1035
1039
  * it — the shape carries the value, as it does in every scheme.
1036
1040
  */
1037
1041
  @media (forced-colors: active) {
1038
- [data-ui='rating'][data-part='root'] {
1042
+ [data-ui-rating][data-part-root] {
1039
1043
  --_on: CanvasText;
1040
1044
  --_off: Canvas;
1041
1045
  --_edge: CanvasText;
1042
1046
  --_off-edge: CanvasText;
1043
1047
  }
1044
1048
 
1045
- [data-ui='rating'][data-part='root'][data-disabled] {
1049
+ [data-ui-rating][data-part-root][data-disabled] {
1046
1050
  --_on: GrayText;
1047
1051
  --_edge: GrayText;
1048
1052
  --_off-edge: GrayText;
1049
1053
  }
1050
1054
 
1051
- [data-ui='rating'] [data-part='track'] {
1055
+ [data-ui-rating] [data-part-track] {
1052
1056
  border: var(--slotted-border-width-thin, 1px) solid CanvasText;
1053
1057
  }
1054
1058
 
1055
- [data-ui='rating'] :is([data-part='insight'], [data-part='swatch']) {
1059
+ [data-ui-rating] :is([data-part-insight], [data-part-swatch]) {
1056
1060
  border: var(--slotted-border-width-thin, 1px) solid CanvasText;
1057
1061
  }
1058
1062
 
1059
- [data-ui='rating'] [data-part='column'][data-pressed] {
1063
+ [data-ui-rating] [data-part-column][data-pressed] {
1060
1064
  outline: var(--slotted-border-width-thick, 2px) solid Highlight;
1061
1065
  }
1062
1066
 
1063
- [data-ui='rating'] [data-part='level'][data-pressed] {
1067
+ [data-ui-rating] [data-part-level][data-pressed] {
1064
1068
  outline: var(--slotted-border-width-thick, 2px) solid Highlight;
1065
1069
  }
1066
1070
 
1067
- [data-ui='rating'] [data-part='item']:has(> [data-part='input']:focus-visible) {
1071
+ [data-ui-rating] [data-part-item]:has(> [data-part-input]:focus-visible) {
1068
1072
  outline-color: Highlight;
1069
1073
  }
1070
1074
  }