@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
@@ -10,7 +10,7 @@
10
10
  * base rule, so a nested layout can never inherit the separation of the one
11
11
  * above it.
12
12
  */
13
- [data-ui='stack'] {
13
+ [data-ui-stack] {
14
14
  --_gap: var(--slotted-space-6, 1rem);
15
15
 
16
16
  display: flex;
@@ -25,55 +25,55 @@
25
25
  }
26
26
 
27
27
  /* Separation is a step on the scale, never a length the consumer states. */
28
- [data-ui='stack'][data-gap='0'] {
28
+ [data-ui-stack][data-gap='0'] {
29
29
  --_gap: 0;
30
30
  }
31
31
 
32
- [data-ui='stack'][data-gap='1'] {
32
+ [data-ui-stack][data-gap='1'] {
33
33
  --_gap: var(--slotted-space-1, 0.125rem);
34
34
  }
35
35
 
36
- [data-ui='stack'][data-gap='2'] {
36
+ [data-ui-stack][data-gap='2'] {
37
37
  --_gap: var(--slotted-space-2, 0.25rem);
38
38
  }
39
39
 
40
- [data-ui='stack'][data-gap='3'] {
40
+ [data-ui-stack][data-gap='3'] {
41
41
  --_gap: var(--slotted-space-3, 0.375rem);
42
42
  }
43
43
 
44
- [data-ui='stack'][data-gap='4'] {
44
+ [data-ui-stack][data-gap='4'] {
45
45
  --_gap: var(--slotted-space-4, 0.5rem);
46
46
  }
47
47
 
48
- [data-ui='stack'][data-gap='5'] {
48
+ [data-ui-stack][data-gap='5'] {
49
49
  --_gap: var(--slotted-space-5, 0.75rem);
50
50
  }
51
51
 
52
- [data-ui='stack'][data-gap='6'] {
52
+ [data-ui-stack][data-gap='6'] {
53
53
  --_gap: var(--slotted-space-6, 1rem);
54
54
  }
55
55
 
56
- [data-ui='stack'][data-gap='7'] {
56
+ [data-ui-stack][data-gap='7'] {
57
57
  --_gap: var(--slotted-space-7, 1.25rem);
58
58
  }
59
59
 
60
- [data-ui='stack'][data-gap='8'] {
60
+ [data-ui-stack][data-gap='8'] {
61
61
  --_gap: var(--slotted-space-8, 1.5rem);
62
62
  }
63
63
 
64
- [data-ui='stack'][data-gap='9'] {
64
+ [data-ui-stack][data-gap='9'] {
65
65
  --_gap: var(--slotted-space-9, 2rem);
66
66
  }
67
67
 
68
- [data-ui='stack'][data-gap='10'] {
68
+ [data-ui-stack][data-gap='10'] {
69
69
  --_gap: var(--slotted-space-10, 2.5rem);
70
70
  }
71
71
 
72
- [data-ui='stack'][data-gap='11'] {
72
+ [data-ui-stack][data-gap='11'] {
73
73
  --_gap: var(--slotted-space-11, 3rem);
74
74
  }
75
75
 
76
- [data-ui='stack'][data-gap='12'] {
76
+ [data-ui-stack][data-gap='12'] {
77
77
  --_gap: var(--slotted-space-12, 4rem);
78
78
  }
79
79
 
@@ -82,19 +82,19 @@
82
82
  * axis. The keywords are the logical ones, so a right-to-left document is the
83
83
  * same component mirrored rather than a second stylesheet.
84
84
  */
85
- [data-ui='stack'][data-align='start'] {
85
+ [data-ui-stack][data-align='start'] {
86
86
  align-items: start;
87
87
  }
88
88
 
89
- [data-ui='stack'][data-align='center'] {
89
+ [data-ui-stack][data-align='center'] {
90
90
  align-items: center;
91
91
  }
92
92
 
93
- [data-ui='stack'][data-align='end'] {
93
+ [data-ui-stack][data-align='end'] {
94
94
  align-items: end;
95
95
  }
96
96
 
97
- [data-ui='stack'][data-align='stretch'] {
97
+ [data-ui-stack][data-align='stretch'] {
98
98
  align-items: stretch;
99
99
  }
100
100
 
@@ -102,27 +102,27 @@
102
102
  * `justify` positions children along the flow, which for a stack is the block
103
103
  * axis. It moves nothing until the stack is given a block size to distribute.
104
104
  */
105
- [data-ui='stack'][data-justify='start'] {
105
+ [data-ui-stack][data-justify='start'] {
106
106
  justify-content: start;
107
107
  }
108
108
 
109
- [data-ui='stack'][data-justify='center'] {
109
+ [data-ui-stack][data-justify='center'] {
110
110
  justify-content: center;
111
111
  }
112
112
 
113
- [data-ui='stack'][data-justify='end'] {
113
+ [data-ui-stack][data-justify='end'] {
114
114
  justify-content: end;
115
115
  }
116
116
 
117
- [data-ui='stack'][data-justify='between'] {
117
+ [data-ui-stack][data-justify='between'] {
118
118
  justify-content: space-between;
119
119
  }
120
120
 
121
- [data-ui='stack'][data-justify='around'] {
121
+ [data-ui-stack][data-justify='around'] {
122
122
  justify-content: space-around;
123
123
  }
124
124
 
125
- [data-ui='stack'][data-justify='evenly'] {
125
+ [data-ui-stack][data-justify='evenly'] {
126
126
  justify-content: space-evenly;
127
127
  }
128
128
  }
@@ -10,7 +10,7 @@
10
10
  * in: a container cannot change its own tracks
11
11
  * (`docs/build-briefing.md`, _Decisions already taken_).
12
12
  */
13
- [data-ui='stat-card'] {
13
+ [data-ui-stat-card] {
14
14
  --_edge-width: var(--slotted-stat-card-border-width, var(--slotted-border-width-thin, 1px));
15
15
  --_radius: var(--slotted-stat-card-radius, var(--slotted-radius-lg, 8px));
16
16
  --_inset-block: var(--slotted-stat-card-padding-block, var(--slotted-space-6, 1rem));
@@ -87,7 +87,7 @@
87
87
  }
88
88
 
89
89
  /* The edge, out of flow, so a frame that changes width moves no text. */
90
- [data-ui='stat-card']::before {
90
+ [data-ui-stat-card]::before {
91
91
  border: var(--_edge-width) solid var(--_edge);
92
92
  border-radius: inherit;
93
93
  content: '';
@@ -96,7 +96,7 @@
96
96
  position: absolute;
97
97
  }
98
98
 
99
- [data-ui='stat-card'][data-size='sm'] {
99
+ [data-ui-stat-card][data-size='sm'] {
100
100
  --_inset-block: var(--slotted-stat-card-padding-block-sm, var(--slotted-space-5, 0.75rem));
101
101
  --_inset-inline: var(--slotted-stat-card-padding-inline-sm, var(--slotted-space-5, 0.75rem));
102
102
  --_region-gap: var(--slotted-stat-card-region-gap-sm, var(--slotted-space-2, 0.25rem));
@@ -126,7 +126,7 @@
126
126
  --_value-line-narrow: var(--slotted-line-height-xl, 1.45);
127
127
  }
128
128
 
129
- [data-ui='stat-card'][data-size='lg'] {
129
+ [data-ui-stat-card][data-size='lg'] {
130
130
  --_inset-block: var(--slotted-stat-card-padding-block-lg, var(--slotted-space-8, 1.5rem));
131
131
  --_inset-inline: var(--slotted-stat-card-padding-inline-lg, var(--slotted-space-8, 1.5rem));
132
132
  --_region-gap: var(--slotted-stat-card-region-gap-lg, var(--slotted-space-4, 0.5rem));
@@ -170,11 +170,11 @@
170
170
 
171
171
  /* ── Fill: the three frames a card has, and none ─────────────────────── */
172
172
 
173
- [data-ui='stat-card'][data-fill='elevated'] {
173
+ [data-ui-stat-card][data-fill='elevated'] {
174
174
  --_shadow: var(--slotted-stat-card-shadow-elevated, var(--slotted-shadow-md));
175
175
  }
176
176
 
177
- [data-ui='stat-card'][data-fill='subtle'] {
177
+ [data-ui-stat-card][data-fill='subtle'] {
178
178
  --_surface: var(--slotted-stat-card-background-subtle, var(--slotted-surface-sunken, Canvas));
179
179
  }
180
180
 
@@ -183,7 +183,7 @@
183
183
  * of metrics separated by dividers, inside a card that is already a card.
184
184
  * It keeps no inset either, because the host's inset is the inset.
185
185
  */
186
- [data-ui='stat-card'][data-fill='plain'] {
186
+ [data-ui-stat-card][data-fill='plain'] {
187
187
  --_surface: transparent;
188
188
  --_edge: transparent;
189
189
  --_shadow: none;
@@ -218,8 +218,8 @@
218
218
  * number is broken only when it is wider than the card itself. A floor on
219
219
  * the trend was tried and pushed the trend through the card's edge.
220
220
  */
221
- @scope ([data-ui='stat-card']) to (:scope [data-ui] > *) {
222
- :scope [data-part='body'] {
221
+ @scope ([data-ui-stat-card]) to (:scope [data-ui] > *) {
222
+ :scope [data-part-body] {
223
223
  column-gap: var(--_trend-gap);
224
224
  display: grid;
225
225
  flex: 1 1 auto;
@@ -234,8 +234,8 @@
234
234
  }
235
235
  }
236
236
 
237
- @scope ([data-ui='stat-card']) to (:scope [data-ui] > *) {
238
- :scope[data-layout='stacked'] [data-part='body'] {
237
+ @scope ([data-ui-stat-card]) to (:scope [data-ui] > *) {
238
+ :scope[data-layout='stacked'] [data-part-body] {
239
239
  grid-template-areas:
240
240
  'header'
241
241
  'figure'
@@ -254,15 +254,15 @@
254
254
  * inline axis gives these regions no intrinsic width: the figure alone
255
255
  * decides the column, and the text is cut or wrapped by the card's width.
256
256
  */
257
- @scope ([data-ui='stat-card']) to (:scope [data-ui] > *) {
258
- :scope [data-part='header'] {
257
+ @scope ([data-ui-stat-card]) to (:scope [data-ui] > *) {
258
+ :scope [data-part-header] {
259
259
  contain: inline-size;
260
260
  grid-area: header;
261
261
  }
262
262
  }
263
263
 
264
- @scope ([data-ui='stat-card']) to (:scope [data-ui] > *) {
265
- :scope [data-part='figure'] {
264
+ @scope ([data-ui-stat-card]) to (:scope [data-ui] > *) {
265
+ :scope [data-part-figure] {
266
266
  align-self: start;
267
267
  grid-area: figure;
268
268
  min-inline-size: 0;
@@ -276,8 +276,8 @@
276
276
  * width is the space a wide value left, which a query on the card cannot
277
277
  * see.
278
278
  */
279
- @scope ([data-ui='stat-card']) to (:scope [data-ui] > *) {
280
- :scope [data-part='trend'] {
279
+ @scope ([data-ui-stat-card]) to (:scope [data-ui] > *) {
280
+ :scope [data-part-trend] {
281
281
  /* The marker's ring is the card's ground, not the page's. */
282
282
  --slotted-sparkline-ring-color: var(--_surface);
283
283
 
@@ -291,22 +291,22 @@
291
291
  }
292
292
 
293
293
  @container stat-card-trend (max-width: 39px) {
294
- @scope ([data-ui='stat-card']) to (:scope [data-ui] > *) {
295
- :scope [data-part='trend'] > * {
294
+ @scope ([data-ui-stat-card]) to (:scope [data-ui] > *) {
295
+ :scope [data-part-trend] > * {
296
296
  visibility: hidden;
297
297
  }
298
298
  }
299
299
  }
300
300
 
301
- @scope ([data-ui='stat-card']) to (:scope [data-ui] > *) {
302
- :scope[data-layout='stacked'] [data-part='trend'] {
301
+ @scope ([data-ui-stat-card]) to (:scope [data-ui] > *) {
302
+ :scope[data-layout='stacked'] [data-part-trend] {
303
303
  align-self: end;
304
304
  margin-block-start: var(--slotted-space-2, 0.25rem);
305
305
  }
306
306
  }
307
307
 
308
- @scope ([data-ui='stat-card']) to (:scope [data-ui] > *) {
309
- :scope [data-part='message'] {
308
+ @scope ([data-ui-stat-card]) to (:scope [data-ui] > *) {
309
+ :scope [data-part-message] {
310
310
  contain: inline-size;
311
311
  grid-area: message;
312
312
  }
@@ -319,8 +319,8 @@
319
319
  * (`docs/token-foundation.md`, rule 4).
320
320
  */
321
321
  @container stat-card (max-width: 219px) {
322
- @scope ([data-ui='stat-card']) to (:scope [data-ui] > *) {
323
- :scope [data-part='body'] {
322
+ @scope ([data-ui-stat-card]) to (:scope [data-ui] > *) {
323
+ :scope [data-part-body] {
324
324
  grid-template-areas:
325
325
  'header'
326
326
  'figure'
@@ -331,23 +331,23 @@
331
331
  }
332
332
  }
333
333
 
334
- @scope ([data-ui='stat-card']) to (:scope [data-ui] > *) {
335
- :scope [data-part='trend'] {
334
+ @scope ([data-ui-stat-card]) to (:scope [data-ui] > *) {
335
+ :scope [data-part-trend] {
336
336
  align-self: end;
337
337
  margin-block-start: var(--slotted-space-2, 0.25rem);
338
338
  }
339
339
  }
340
340
 
341
- @scope ([data-ui='stat-card']) to (:scope [data-ui] > *) {
342
- :scope [data-part='value'] {
341
+ @scope ([data-ui-stat-card]) to (:scope [data-ui] > *) {
342
+ :scope [data-part-value] {
343
343
  font-size: var(--_value-size-narrow);
344
344
  line-height: var(--_value-line-narrow);
345
345
  }
346
346
  }
347
347
 
348
348
  /* The value steps down here, and so does the line its placeholder keeps. */
349
- @scope ([data-ui='stat-card']) to (:scope [data-ui] > *) {
350
- :scope[data-loading] [data-part='value'] {
349
+ @scope ([data-ui-stat-card]) to (:scope [data-ui] > *) {
350
+ :scope[data-loading] [data-part-value] {
351
351
  min-block-size: calc(var(--_value-size-narrow) * var(--_value-line-narrow));
352
352
  }
353
353
  }
@@ -361,8 +361,8 @@
361
361
  * them as part of the name, instead of floating them at the middle of the
362
362
  * block.
363
363
  */
364
- @scope ([data-ui='stat-card']) to (:scope [data-ui] > *) {
365
- :scope [data-part='header'] {
364
+ @scope ([data-ui-stat-card]) to (:scope [data-ui] > *) {
365
+ :scope [data-part-header] {
366
366
  align-items: baseline;
367
367
  column-gap: var(--slotted-space-3, 0.375rem);
368
368
  display: flex;
@@ -381,8 +381,8 @@
381
381
  * proportion of the type rather than a scale step: it is a width of
382
382
  * words, and it scales with them.
383
383
  */
384
- @scope ([data-ui='stat-card']) to (:scope [data-ui] > *) {
385
- :scope [data-part='label'] {
384
+ @scope ([data-ui-stat-card]) to (:scope [data-ui] > *) {
385
+ :scope [data-part-label] {
386
386
  color: var(--_ink-muted);
387
387
  flex: 1 1 0%;
388
388
  font-size: var(--_label-size);
@@ -394,8 +394,8 @@
394
394
  }
395
395
  }
396
396
 
397
- @scope ([data-ui='stat-card']) to (:scope [data-ui] > *) {
398
- :scope [data-part='status'] {
397
+ @scope ([data-ui-stat-card]) to (:scope [data-ui] > *) {
398
+ :scope [data-part-status] {
399
399
  display: inline-flex;
400
400
  flex: none;
401
401
  }
@@ -404,8 +404,8 @@
404
404
  /* The action takes the end of the header's first line and stays there
405
405
  when the label wraps: it is the one thing on the card the reader presses,
406
406
  and a corner is where a control is looked for. */
407
- @scope ([data-ui='stat-card']) to (:scope [data-ui] > *) {
408
- :scope [data-part='action'] {
407
+ @scope ([data-ui-stat-card]) to (:scope [data-ui] > *) {
408
+ :scope [data-part-action] {
409
409
  flex: none;
410
410
  /* The label's line, so a link here is as tall in the fallback face as in
411
411
  the web face and the header does not grow when the font arrives. */
@@ -420,15 +420,14 @@
420
420
  part itself when `render` made it one — reaches
421
421
  the comfortable size in both axes, and the header keeps its height. */
422
422
  @media (pointer: coarse) {
423
- @scope ([data-ui='stat-card']) to (:scope [data-ui] > *) {
424
- :scope :is([data-part='action']:is(a, button), [data-part='action'] > :is(a, button)) {
423
+ @scope ([data-ui-stat-card]) to (:scope [data-ui] > *) {
424
+ :scope :is([data-part-action]:is(a, button), [data-part-action] > :is(a, button)) {
425
425
  position: relative;
426
426
  }
427
427
  }
428
428
 
429
- @scope ([data-ui='stat-card']) to (:scope [data-ui] > *) {
430
- :scope
431
- :is([data-part='action']:is(a, button), [data-part='action'] > :is(a, button))::before {
429
+ @scope ([data-ui-stat-card]) to (:scope [data-ui] > *) {
430
+ :scope :is([data-part-action]:is(a, button), [data-part-action] > :is(a, button))::before {
432
431
  content: '';
433
432
  inset: min(0px, calc((100% - var(--slotted-target-comfortable, 44px)) / 2));
434
433
  position: absolute;
@@ -444,8 +443,8 @@
444
443
  * so a delta that does not fit beside a wide number drops under it rather
445
444
  * than pushing the number.
446
445
  */
447
- @scope ([data-ui='stat-card']) to (:scope [data-ui] > *) {
448
- :scope [data-part='figure'] {
446
+ @scope ([data-ui-stat-card]) to (:scope [data-ui] > *) {
447
+ :scope [data-part-figure] {
449
448
  align-items: baseline;
450
449
  column-gap: var(--slotted-space-3, 0.375rem);
451
450
  display: flex;
@@ -454,8 +453,8 @@
454
453
  }
455
454
  }
456
455
 
457
- @scope ([data-ui='stat-card']) to (:scope [data-ui] > *) {
458
- :scope [data-part='comparison'] {
456
+ @scope ([data-ui-stat-card]) to (:scope [data-ui] > *) {
457
+ :scope [data-part-comparison] {
459
458
  contain: inline-size;
460
459
  flex: 1 1 100%;
461
460
  }
@@ -471,8 +470,8 @@
471
470
  * to pull a large numeral's counters back together, and it is the same
472
471
  * fraction at every size.
473
472
  */
474
- @scope ([data-ui='stat-card']) to (:scope [data-ui] > *) {
475
- :scope [data-part='value'] {
473
+ @scope ([data-ui-stat-card]) to (:scope [data-ui] > *) {
474
+ :scope [data-part-value] {
476
475
  /* The figure and its unit are two flex items on one baseline — the text
477
476
  node is an item of its own — so the gap spaces the unit from the digit
478
477
  on whichever side it stands. A margin on the unit, reset by
@@ -502,8 +501,8 @@
502
501
 
503
502
  /* The unit is in the value's own line, a step down in size and weight, so
504
503
  `$` and `%` read as annotation of the number rather than as digits. */
505
- @scope ([data-ui='stat-card']) to (:scope [data-ui] > *) {
506
- :scope [data-part='unit'] {
504
+ @scope ([data-ui-stat-card]) to (:scope [data-ui] > *) {
505
+ :scope [data-part-unit] {
507
506
  color: var(--_ink-muted);
508
507
  font-size: var(--_delta-size);
509
508
  font-weight: var(--slotted-font-weight-medium, 500);
@@ -517,8 +516,8 @@
517
516
  * metrics, and the tone's text role already clears the reading ratio on
518
517
  * the surface. It sits on the value's baseline.
519
518
  */
520
- @scope ([data-ui='stat-card']) to (:scope [data-ui] > *) {
521
- :scope [data-part='delta'] {
519
+ @scope ([data-ui-stat-card]) to (:scope [data-ui] > *) {
520
+ :scope [data-part-delta] {
522
521
  align-items: center;
523
522
  color: var(--_tone-text);
524
523
  column-gap: var(--slotted-space-1, 0.125rem);
@@ -535,38 +534,38 @@
535
534
  }
536
535
  }
537
536
 
538
- @scope ([data-ui='stat-card']) to (:scope [data-ui] > *) {
539
- :scope [data-part='delta'][data-tone='neutral'] {
537
+ @scope ([data-ui-stat-card]) to (:scope [data-ui] > *) {
538
+ :scope [data-part-delta][data-tone='neutral'] {
540
539
  --_tone-text: var(--_ink-muted);
541
540
  }
542
541
  }
543
542
 
544
- @scope ([data-ui='stat-card']) to (:scope [data-ui] > *) {
545
- :scope [data-part='delta'][data-tone='accent'] {
543
+ @scope ([data-ui-stat-card]) to (:scope [data-ui] > *) {
544
+ :scope [data-part-delta][data-tone='accent'] {
546
545
  --_tone-text: var(--slotted-tone-accent-text);
547
546
  }
548
547
  }
549
548
 
550
- @scope ([data-ui='stat-card']) to (:scope [data-ui] > *) {
551
- :scope [data-part='delta'][data-tone='secondary'] {
549
+ @scope ([data-ui-stat-card]) to (:scope [data-ui] > *) {
550
+ :scope [data-part-delta][data-tone='secondary'] {
552
551
  --_tone-text: var(--slotted-tone-secondary-text);
553
552
  }
554
553
  }
555
554
 
556
- @scope ([data-ui='stat-card']) to (:scope [data-ui] > *) {
557
- :scope [data-part='delta'][data-tone='success'] {
555
+ @scope ([data-ui-stat-card]) to (:scope [data-ui] > *) {
556
+ :scope [data-part-delta][data-tone='success'] {
558
557
  --_tone-text: var(--slotted-tone-success-text);
559
558
  }
560
559
  }
561
560
 
562
- @scope ([data-ui='stat-card']) to (:scope [data-ui] > *) {
563
- :scope [data-part='delta'][data-tone='warning'] {
561
+ @scope ([data-ui-stat-card]) to (:scope [data-ui] > *) {
562
+ :scope [data-part-delta][data-tone='warning'] {
564
563
  --_tone-text: var(--slotted-tone-warning-text);
565
564
  }
566
565
  }
567
566
 
568
- @scope ([data-ui='stat-card']) to (:scope [data-ui] > *) {
569
- :scope [data-part='delta'][data-tone='danger'] {
567
+ @scope ([data-ui-stat-card]) to (:scope [data-ui] > *) {
568
+ :scope [data-part-delta][data-tone='danger'] {
570
569
  --_tone-text: var(--slotted-tone-danger-text);
571
570
  }
572
571
  }
@@ -579,8 +578,8 @@
579
578
  * change draws `minus`. The binding renders the glyph inside the icon box;
580
579
  * the part hands the box its size, and the box inherits the delta's ink.
581
580
  */
582
- @scope ([data-ui='stat-card']) to (:scope [data-ui] > *) {
583
- :scope [data-part='indicator'] {
581
+ @scope ([data-ui-stat-card]) to (:scope [data-ui] > *) {
582
+ :scope [data-part-indicator] {
584
583
  --slotted-icon-size: var(--_indicator-size);
585
584
 
586
585
  display: inline-flex;
@@ -592,16 +591,16 @@
592
591
  a rise becomes a fall. Time runs from the right in a right-to-left
593
592
  document, so the rise points the other way there, as the sparkline beside
594
593
  it does — the `directional` icon box the binding draws does that. */
595
- @scope ([data-ui='stat-card']) to (:scope [data-ui] > *) {
596
- :scope [data-part='delta'][data-trend='down'] [data-part='indicator'] > [data-ui='icon'] {
594
+ @scope ([data-ui-stat-card]) to (:scope [data-ui] > *) {
595
+ :scope [data-part-delta][data-trend='down'] [data-part-indicator] > [data-ui-icon] {
597
596
  rotate: x 180deg;
598
597
  }
599
598
  }
600
599
 
601
600
  /* ── Comparison: the prose under the figure ───────────────────────────── */
602
601
 
603
- @scope ([data-ui='stat-card']) to (:scope [data-ui] > *) {
604
- :scope [data-part='comparison'] {
602
+ @scope ([data-ui-stat-card]) to (:scope [data-ui] > *) {
603
+ :scope [data-part-comparison] {
605
604
  color: var(--_ink-muted);
606
605
  font-size: var(--_prose-size);
607
606
  line-height: var(--_prose-line);
@@ -612,8 +611,8 @@
612
611
  }
613
612
  }
614
613
 
615
- @scope ([data-ui='stat-card']) to (:scope [data-ui] > *) {
616
- :scope [data-part='period'] {
614
+ @scope ([data-ui-stat-card]) to (:scope [data-ui] > *) {
615
+ :scope [data-part-period] {
617
616
  color: var(--_ink-muted);
618
617
  }
619
618
  }
@@ -628,53 +627,53 @@
628
627
  * — a card with no delta, or a metric with no valence, draws its trend in
629
628
  * the theme's blue and not in grey.
630
629
  */
631
- @scope ([data-ui='stat-card']) to (:scope [data-ui] > *) {
632
- :scope [data-part='trend'] {
630
+ @scope ([data-ui-stat-card]) to (:scope [data-ui] > *) {
631
+ :scope [data-part-trend] {
633
632
  align-self: center;
634
633
  display: flex;
635
634
  }
636
635
  }
637
636
 
638
- @scope ([data-ui='stat-card']) to (:scope [data-ui] > *) {
639
- :scope[data-tone='success'] [data-part='trend'] {
637
+ @scope ([data-ui-stat-card]) to (:scope [data-ui] > *) {
638
+ :scope[data-tone='success'] [data-part-trend] {
640
639
  --slotted-sparkline-color: var(--slotted-tone-success-text);
641
640
  }
642
641
  }
643
642
 
644
- @scope ([data-ui='stat-card']) to (:scope [data-ui] > *) {
645
- :scope[data-tone='danger'] [data-part='trend'] {
643
+ @scope ([data-ui-stat-card]) to (:scope [data-ui] > *) {
644
+ :scope[data-tone='danger'] [data-part-trend] {
646
645
  --slotted-sparkline-color: var(--slotted-tone-danger-text);
647
646
  }
648
647
  }
649
648
 
650
- @scope ([data-ui='stat-card']) to (:scope [data-ui] > *) {
651
- :scope[data-tone='warning'] [data-part='trend'] {
649
+ @scope ([data-ui-stat-card]) to (:scope [data-ui] > *) {
650
+ :scope[data-tone='warning'] [data-part-trend] {
652
651
  --slotted-sparkline-color: var(--slotted-tone-warning-text);
653
652
  }
654
653
  }
655
654
 
656
- @scope ([data-ui='stat-card']) to (:scope [data-ui] > *) {
657
- :scope[data-tone='accent'] [data-part='trend'] {
655
+ @scope ([data-ui-stat-card]) to (:scope [data-ui] > *) {
656
+ :scope[data-tone='accent'] [data-part-trend] {
658
657
  --slotted-sparkline-color: var(--slotted-tone-accent-text);
659
658
  }
660
659
  }
661
660
 
662
- @scope ([data-ui='stat-card']) to (:scope [data-ui] > *) {
663
- :scope[data-tone='secondary'] [data-part='trend'] {
661
+ @scope ([data-ui-stat-card]) to (:scope [data-ui] > *) {
662
+ :scope[data-tone='secondary'] [data-part-trend] {
664
663
  --slotted-sparkline-color: var(--slotted-tone-secondary-text);
665
664
  }
666
665
  }
667
666
 
668
- @scope ([data-ui='stat-card']) to (:scope [data-ui] > *) {
669
- :scope[data-fill='plain'] [data-part='trend'] {
667
+ @scope ([data-ui-stat-card]) to (:scope [data-ui] > *) {
668
+ :scope[data-fill='plain'] [data-part-trend] {
670
669
  --slotted-sparkline-ring-color: var(--slotted-surface-raised, Canvas);
671
670
  }
672
671
  }
673
672
 
674
673
  /* ── Message: what stands in for a value that is missing or failed ────── */
675
674
 
676
- @scope ([data-ui='stat-card']) to (:scope [data-ui] > *) {
677
- :scope [data-part='message'] {
675
+ @scope ([data-ui-stat-card]) to (:scope [data-ui] > *) {
676
+ :scope [data-part-message] {
678
677
  color: var(--_ink-muted);
679
678
  font-size: var(--_prose-size);
680
679
  line-height: var(--_prose-line);
@@ -684,17 +683,17 @@
684
683
  }
685
684
  }
686
685
 
687
- @scope ([data-ui='stat-card']) to (:scope [data-ui] > *) {
688
- :scope[data-status='error'] [data-part='message'] {
686
+ @scope ([data-ui-stat-card]) to (:scope [data-ui] > *) {
687
+ :scope[data-status='error'] [data-part-message] {
689
688
  color: var(--slotted-tone-danger-text);
690
689
  }
691
690
  }
692
691
 
693
692
  /* A value that is not there is a dash in the muted step, at the value's
694
693
  own size, so the row keeps its height and its rhythm. */
695
- @scope ([data-ui='stat-card']) to (:scope [data-ui] > *) {
696
- :scope[data-status='empty'] [data-part='value'],
697
- :scope[data-status='error'] [data-part='value'] {
694
+ @scope ([data-ui-stat-card]) to (:scope [data-ui] > *) {
695
+ :scope[data-status='empty'] [data-part-value],
696
+ :scope[data-status='error'] [data-part-value] {
698
697
  color: var(--_ink-muted);
699
698
  }
700
699
  }
@@ -716,14 +715,14 @@
716
715
  * arrived. The floor is one line of the value's own type, so the two states
717
716
  * occupy the same box.
718
717
  */
719
- @scope ([data-ui='stat-card']) to (:scope [data-ui] > *) {
720
- :scope[data-loading] [data-part='value'] {
718
+ @scope ([data-ui-stat-card]) to (:scope [data-ui] > *) {
719
+ :scope[data-loading] [data-part-value] {
721
720
  min-block-size: calc(var(--_value-size) * var(--_value-line));
722
721
  }
723
722
  }
724
723
 
725
- @scope ([data-ui='stat-card']) to (:scope [data-ui] > *) {
726
- :scope[data-loading] [data-part='trend'] {
724
+ @scope ([data-ui-stat-card]) to (:scope [data-ui] > *) {
725
+ :scope[data-loading] [data-part-trend] {
727
726
  --slotted-skeleton-block-size: var(
728
727
  --slotted-sparkline-block-size,
729
728
  var(--slotted-space-9, 2rem)
@@ -731,8 +730,8 @@
731
730
  }
732
731
  }
733
732
 
734
- @scope ([data-ui='stat-card']) to (:scope [data-ui] > *) {
735
- :scope[data-loading][data-size='sm'] [data-part='trend'] {
733
+ @scope ([data-ui-stat-card]) to (:scope [data-ui] > *) {
734
+ :scope[data-loading][data-size='sm'] [data-part-trend] {
736
735
  --slotted-skeleton-block-size: var(
737
736
  --slotted-sparkline-block-size-sm,
738
737
  var(--slotted-space-7, 1.25rem)
@@ -740,8 +739,8 @@
740
739
  }
741
740
  }
742
741
 
743
- @scope ([data-ui='stat-card']) to (:scope [data-ui] > *) {
744
- :scope[data-loading][data-size='lg'] [data-part='trend'] {
742
+ @scope ([data-ui-stat-card]) to (:scope [data-ui] > *) {
743
+ :scope[data-loading][data-size='lg'] [data-part-trend] {
745
744
  --slotted-skeleton-block-size: var(
746
745
  --slotted-sparkline-block-size-lg,
747
746
  var(--slotted-space-11, 3rem)