@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
@@ -36,7 +36,7 @@
36
36
  * description-list has a `description`, a card has `actions` and a `header`
37
37
  * — and a descendant rule would restyle theirs.
38
38
  */
39
- [data-ui='page-header'] {
39
+ [data-ui-page-header] {
40
40
  --_surface: var(--slotted-page-header-background, var(--slotted-surface, Canvas));
41
41
  /* What the root and the title area paint; `plain` takes it away at rest. */
42
42
  --_ground: var(--_surface);
@@ -117,7 +117,7 @@
117
117
  overflow-x: clip;
118
118
  }
119
119
 
120
- [data-ui='page-header'][data-size='sm'] {
120
+ [data-ui-page-header][data-size='sm'] {
121
121
  --_heading-size: var(
122
122
  --slotted-page-header-heading-size-sm,
123
123
  var(--slotted-font-size-xl, 1.125rem)
@@ -130,7 +130,7 @@
130
130
  --_snapped-heading-line-height: var(--slotted-line-height-md, 1.5);
131
131
  }
132
132
 
133
- [data-ui='page-header'][data-size='lg'] {
133
+ [data-ui-page-header][data-size='lg'] {
134
134
  --_heading-size: var(
135
135
  --slotted-page-header-heading-size-lg,
136
136
  var(--slotted-font-size-3xl, 1.5rem)
@@ -150,9 +150,9 @@
150
150
  * and `pressed` is its word. Under `collapse="manual"` the offset is what
151
151
  * the scroll would use, so it is zero for good.
152
152
  */
153
- [data-ui='page-header'][data-revealed],
154
- [data-ui='page-header'][data-collapse='manual'],
155
- [data-ui='page-header']:has([data-part='pin'][data-pressed]) {
153
+ [data-ui-page-header][data-revealed],
154
+ [data-ui-page-header][data-collapse='manual'],
155
+ [data-ui-page-header]:has([data-part-pin][data-pressed]) {
156
156
  inset-block-start: var(--_sticky-inset);
157
157
  }
158
158
 
@@ -166,7 +166,7 @@
166
166
  * ground would show the page through its title. The hairline stays in
167
167
  * both: it is where the chrome ends.
168
168
  */
169
- [data-ui='page-header'][data-variant='plain']:not([data-stuck]) {
169
+ [data-ui-page-header][data-variant='plain']:not([data-stuck]) {
170
170
  --_ground: transparent;
171
171
  }
172
172
 
@@ -179,19 +179,19 @@
179
179
  * sat an inset down over the content under it. The title area paints its
180
180
  * own ground, so its top corners follow the root's, and it slides with it.
181
181
  */
182
- [data-ui='page-header'][data-variant='floating'] {
182
+ [data-ui-page-header][data-variant='floating'] {
183
183
  --_radius: var(--slotted-page-header-radius, var(--slotted-radius-lg, 8px));
184
184
 
185
185
  border: var(--_rule-size) solid var(--_rule);
186
186
  border-radius: var(--_radius);
187
187
  box-sizing: border-box;
188
188
  }
189
- [data-ui='page-header'][data-variant='floating'] > * > [data-part='title-area'] {
189
+ [data-ui-page-header][data-variant='floating'] > * > [data-part-title-area] {
190
190
  border-start-end-radius: calc(var(--_radius) - var(--_rule-size));
191
191
  border-start-start-radius: calc(var(--_radius) - var(--_rule-size));
192
192
  transition: inset-block-start var(--_duration) var(--_easing);
193
193
  }
194
- [data-ui='page-header'][data-variant='floating'][data-stuck] {
194
+ [data-ui-page-header][data-variant='floating'][data-stuck] {
195
195
  --_sticky-inset: var(--slotted-page-header-inset, var(--slotted-space-4, 0.5rem));
196
196
 
197
197
  box-shadow: var(--slotted-page-header-shadow, var(--slotted-shadow-sm));
@@ -203,14 +203,14 @@
203
203
  * record's header and tabs held 40 per cent of the screen for the whole
204
204
  * scroll. `relative` and not `static`, so the root keeps the stacking the
205
205
  * pill straddling its edge relies on, at an offset of nought. The binding
206
- * writes the attribute from the root's own width: a container query cannot
207
- * select the container it measures.
206
+ * writes the attribute from the frame's width, so a header in a narrow pane
207
+ * of a wide frame still sticks inside the pane.
208
208
  */
209
- [data-ui='page-header'][data-compact] {
209
+ [data-ui-page-header][data-compact] {
210
210
  inset-block-start: 0;
211
211
  position: relative;
212
212
  }
213
- [data-ui='page-header'][data-compact] > * > [data-part='title-area'] {
213
+ [data-ui-page-header][data-compact] > * > [data-part-title-area] {
214
214
  inset-block-start: 0;
215
215
  position: relative;
216
216
  }
@@ -222,7 +222,7 @@
222
222
  * renders to align its rows to the page's measure, and it is not named,
223
223
  * because a family does not select another family's identity.
224
224
  */
225
- [data-ui='page-header'] > * > [data-part='title-area'] {
225
+ [data-ui-page-header] > * > [data-part-title-area] {
226
226
  background-color: var(--_ground);
227
227
  display: flex;
228
228
  flex-direction: column;
@@ -242,9 +242,7 @@
242
242
  * the title keeps its own ground, because a title that let the area show
243
243
  * through would print the area's words under its own.
244
244
  */
245
- [data-ui='page-header']:not(:has(> * > [data-part='header-area']))
246
- > *
247
- > [data-part='title-area'] {
245
+ [data-ui-page-header]:not(:has(> * > [data-part-header-area])) > * > [data-part-title-area] {
248
246
  background-color: transparent;
249
247
  }
250
248
 
@@ -255,7 +253,7 @@
255
253
  * at all. The filter is the stuck state's alone, so a `plain` header,
256
254
  * transparent at rest, filters nothing at rest.
257
255
  */
258
- [data-ui='page-header'][data-stuck] {
256
+ [data-ui-page-header][data-stuck] {
259
257
  -webkit-backdrop-filter: var(--slotted-page-header-backdrop-filter, none);
260
258
  backdrop-filter: var(--slotted-page-header-backdrop-filter, none);
261
259
  }
@@ -265,7 +263,7 @@
265
263
  * forced colours the ground is the system's and the blur has nothing to add.
266
264
  */
267
265
  @media (prefers-reduced-transparency: reduce), (forced-colors: active) {
268
- [data-ui='page-header'][data-stuck] {
266
+ [data-ui-page-header][data-stuck] {
269
267
  -webkit-backdrop-filter: none;
270
268
  backdrop-filter: none;
271
269
  }
@@ -279,11 +277,11 @@
279
277
  * because a padding that changed at the snap would move the tabs by that
280
278
  * much at the moment the header area left.
281
279
  */
282
- [data-ui='page-header']:has([data-part='controls'] > *) > * > [data-part='title-area'] {
280
+ [data-ui-page-header]:has([data-part-controls] > *) > * > [data-part-title-area] {
283
281
  padding-block-end: calc(var(--slotted-space-4, 0.5rem) + var(--_control-size) / 2);
284
282
  }
285
283
 
286
- [data-ui='page-header'] > * > [data-part='title-area'] > [data-part='nav'] {
284
+ [data-ui-page-header] > * > [data-part-title-area] > [data-part-nav] {
287
285
  align-items: center;
288
286
  color: var(--_muted);
289
287
  display: flex;
@@ -292,7 +290,7 @@
292
290
  line-height: var(--slotted-line-height-sm, 1.45);
293
291
  min-inline-size: 0;
294
292
  }
295
- [data-ui='page-header'] > * > [data-part='title-area'] > [data-part='nav']:empty {
293
+ [data-ui-page-header] > * > [data-part-title-area] > [data-part-nav]:empty {
296
294
  display: none;
297
295
  }
298
296
  /**
@@ -301,11 +299,11 @@
301
299
  * breadcrumbs go and the arrow is what remains. A consumer writes both
302
300
  * once and the width decides.
303
301
  */
304
- [data-ui='page-header']
302
+ [data-ui-page-header]
305
303
  > *
306
- > [data-part='title-area']
307
- > [data-part='nav']
308
- > [data-part='back']:has(~ [data-part='breadcrumbs']:not(:empty)) {
304
+ > [data-part-title-area]
305
+ > [data-part-nav]
306
+ > [data-part-back]:has(~ [data-part-breadcrumbs]:not(:empty)) {
309
307
  display: none;
310
308
  }
311
309
 
@@ -315,7 +313,7 @@
315
313
  * label, and it points along the reading direction, so its `directional`
316
314
  * box mirrors it in a right-to-left document.
317
315
  */
318
- [data-ui='page-header'] > * > [data-part='title-area'] > [data-part='nav'] > [data-part='back'] {
316
+ [data-ui-page-header] > * > [data-part-title-area] > [data-part-nav] > [data-part-back] {
319
317
  --slotted-icon-size: var(--_icon-size);
320
318
 
321
319
  align-items: center;
@@ -339,11 +337,7 @@
339
337
  reaches the comfortable size by padding and gives it back as a negative
340
338
  margin, so the nav row keeps its height and nothing under it moves. */
341
339
  @media (pointer: coarse) {
342
- [data-ui='page-header']
343
- > *
344
- > [data-part='title-area']
345
- > [data-part='nav']
346
- > [data-part='back'] {
340
+ [data-ui-page-header] > * > [data-part-title-area] > [data-part-nav] > [data-part-back] {
347
341
  --_reach: max(
348
342
  0px,
349
343
  calc((var(--slotted-target-comfortable, 44px) - var(--slotted-target-min, 24px)) / 2)
@@ -353,27 +347,23 @@
353
347
  padding-block: var(--_reach);
354
348
  }
355
349
  }
356
- [data-ui='page-header']
350
+ [data-ui-page-header]
357
351
  > *
358
- > [data-part='title-area']
359
- > [data-part='nav']
360
- > [data-part='back']:not([data-disabled]):not(:disabled):hover {
352
+ > [data-part-title-area]
353
+ > [data-part-nav]
354
+ > [data-part-back]:not([data-disabled]):not(:disabled):hover {
361
355
  color: var(--_text);
362
356
  }
363
- [data-ui='page-header']
357
+ [data-ui-page-header]
364
358
  > *
365
- > [data-part='title-area']
366
- > [data-part='nav']
367
- > [data-part='back']:focus-visible {
359
+ > [data-part-title-area]
360
+ > [data-part-nav]
361
+ > [data-part-back]:focus-visible {
368
362
  outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
369
363
  outline-offset: var(--slotted-focus-ring-offset, 2px);
370
364
  }
371
365
 
372
- [data-ui='page-header']
373
- > *
374
- > [data-part='title-area']
375
- > [data-part='nav']
376
- > [data-part='breadcrumbs'] {
366
+ [data-ui-page-header] > * > [data-part-title-area] > [data-part-nav] > [data-part-breadcrumbs] {
377
367
  min-inline-size: 0;
378
368
  }
379
369
 
@@ -382,7 +372,7 @@
382
372
  * navigation pushed to the end. Everything after the title wraps under it
383
373
  * when the width runs out, in the order it has in the DOM.
384
374
  */
385
- [data-ui='page-header'] > * > [data-part='title-area'] > [data-part='title-row'] {
375
+ [data-ui-page-header] > * > [data-part-title-area] > [data-part-title-row] {
386
376
  align-items: flex-start;
387
377
  display: flex;
388
378
  flex-wrap: wrap;
@@ -390,11 +380,7 @@
390
380
  min-inline-size: 0;
391
381
  }
392
382
 
393
- [data-ui='page-header']
394
- > *
395
- > [data-part='title-area']
396
- > [data-part='title-row']
397
- > [data-part='visual'] {
383
+ [data-ui-page-header] > * > [data-part-title-area] > [data-part-title-row] > [data-part-visual] {
398
384
  align-items: center;
399
385
  /* On the title's first line, as Primer's LeadingVisual: centred on the
400
386
  whole column it sank beside the second line of a wrapped title. */
@@ -409,11 +395,7 @@
409
395
  * aligned to the text" asks for — and the subheading, forced to a full
410
396
  * row, takes the line under it.
411
397
  */
412
- [data-ui='page-header']
413
- > *
414
- > [data-part='title-area']
415
- > [data-part='title-row']
416
- > [data-part='title'] {
398
+ [data-ui-page-header] > * > [data-part-title-area] > [data-part-title-row] > [data-part-title] {
417
399
  align-items: center;
418
400
  column-gap: var(--slotted-space-4, 0.5rem);
419
401
  display: flex;
@@ -440,12 +422,12 @@
440
422
  * width to the flex algorithm that is not the width it then paints, and the
441
423
  * marks beside it ran past the container in the first capture.
442
424
  */
443
- [data-ui='page-header']
425
+ [data-ui-page-header]
444
426
  > *
445
- > [data-part='title-area']
446
- > [data-part='title-row']
447
- > [data-part='title']
448
- > [data-part='heading'] {
427
+ > [data-part-title-area]
428
+ > [data-part-title-row]
429
+ > [data-part-title]
430
+ > [data-part-heading] {
449
431
  -webkit-box-orient: vertical;
450
432
  color: var(--_text);
451
433
  display: -webkit-box;
@@ -466,12 +448,12 @@
466
448
  /* No transition on the size: text re-rasterised on every frame of a
467
449
  font-size change blurs and settles with a jolt, so the step is a cut. */
468
450
  }
469
- [data-ui='page-header']:not([data-expanded])
451
+ [data-ui-page-header]:not([data-expanded])
470
452
  > *
471
- > [data-part='title-area']
472
- > [data-part='title-row']
473
- > [data-part='title']
474
- > [data-part='heading'] {
453
+ > [data-part-title-area]
454
+ > [data-part-title-row]
455
+ > [data-part-title]
456
+ > [data-part-heading] {
475
457
  display: block;
476
458
  flex: 0 1 auto;
477
459
  font-size: var(--_snapped-heading-size);
@@ -480,33 +462,33 @@
480
462
  white-space: nowrap;
481
463
  }
482
464
 
483
- [data-ui='page-header']
465
+ [data-ui-page-header]
484
466
  > *
485
- > [data-part='title-area']
486
- > [data-part='title-row']
487
- > [data-part='title']
488
- > [data-part='marks'] {
467
+ > [data-part-title-area]
468
+ > [data-part-title-row]
469
+ > [data-part-title]
470
+ > [data-part-marks] {
489
471
  align-items: center;
490
472
  display: inline-flex;
491
473
  flex-wrap: wrap;
492
474
  gap: var(--slotted-space-2, 0.25rem);
493
475
  min-inline-size: 0;
494
476
  }
495
- [data-ui='page-header']
477
+ [data-ui-page-header]
496
478
  > *
497
- > [data-part='title-area']
498
- > [data-part='title-row']
499
- > [data-part='title']
500
- > [data-part='marks']:empty {
479
+ > [data-part-title-area]
480
+ > [data-part-title-row]
481
+ > [data-part-title]
482
+ > [data-part-marks]:empty {
501
483
  display: none;
502
484
  }
503
485
 
504
- [data-ui='page-header']
486
+ [data-ui-page-header]
505
487
  > *
506
- > [data-part='title-area']
507
- > [data-part='title-row']
508
- > [data-part='title']
509
- > [data-part='subheading'] {
488
+ > [data-part-title-area]
489
+ > [data-part-title-row]
490
+ > [data-part-title]
491
+ > [data-part-subheading] {
510
492
  -webkit-box-orient: vertical;
511
493
  color: var(--_muted);
512
494
  display: -webkit-box;
@@ -522,23 +504,19 @@
522
504
  text-wrap: pretty;
523
505
  }
524
506
  /* Snapped, the bar has one line to give it. */
525
- [data-ui='page-header']:not([data-expanded])
507
+ [data-ui-page-header]:not([data-expanded])
526
508
  > *
527
- > [data-part='title-area']
528
- > [data-part='title-row']
529
- > [data-part='title']
530
- > [data-part='subheading'] {
509
+ > [data-part-title-area]
510
+ > [data-part-title-row]
511
+ > [data-part-title]
512
+ > [data-part-subheading] {
531
513
  display: block;
532
514
  overflow: hidden;
533
515
  text-overflow: ellipsis;
534
516
  white-space: nowrap;
535
517
  }
536
518
 
537
- [data-ui='page-header']
538
- > *
539
- > [data-part='title-area']
540
- > [data-part='title-row']
541
- > [data-part='actions'] {
519
+ [data-ui-page-header] > * > [data-part-title-area] > [data-part-title-row] > [data-part-actions] {
542
520
  align-items: center;
543
521
  display: flex;
544
522
  flex: 0 1 auto;
@@ -559,20 +537,20 @@
559
537
  * that scrolls — written from the same public tokens; a framed bar keeps
560
538
  * its box.
561
539
  */
562
- [data-ui='page-header']
540
+ [data-ui-page-header]
563
541
  > *
564
- > [data-part='title-area']
565
- > [data-part='title-row']
566
- > [data-part='actions']
567
- > [data-ui='toolbar']:not([data-variant='outline']) {
542
+ > [data-part-title-area]
543
+ > [data-part-title-row]
544
+ > [data-part-actions]
545
+ > [data-ui-toolbar]:not([data-variant='outline']) {
568
546
  margin-block: calc(-1 * var(--slotted-toolbar-inset, var(--slotted-space-2, 0.25rem)));
569
547
  }
570
- [data-ui='page-header']
548
+ [data-ui-page-header]
571
549
  > *
572
- > [data-part='title-area']
573
- > [data-part='title-row']
574
- > [data-part='actions']
575
- > [data-ui='toolbar']:not([data-variant='outline']):is(
550
+ > [data-part-title-area]
551
+ > [data-part-title-row]
552
+ > [data-part-actions]
553
+ > [data-ui-toolbar]:not([data-variant='outline']):is(
576
554
  [data-overflow='menu'],
577
555
  [data-overflow='scroll']
578
556
  ) {
@@ -601,12 +579,10 @@
601
579
  * its observer never fired, and the actions stayed folded after the window
602
580
  * widened again, while a fresh load at the same width showed them all.
603
581
  */
604
- [data-ui='page-header']
582
+ [data-ui-page-header]
605
583
  > *
606
- > [data-part='title-area']
607
- > [data-part='title-row']:has(
608
- > [data-part='actions'] > [data-ui='toolbar'][data-overflow='menu']
609
- ) {
584
+ > [data-part-title-area]
585
+ > [data-part-title-row]:has(> [data-part-actions] > [data-ui-toolbar][data-overflow='menu']) {
610
586
  flex-wrap: nowrap;
611
587
  }
612
588
  /* The title starts from its own width, not from the basis a wrapping row gives it, at every
@@ -617,48 +593,42 @@
617
593
  of 420, and the toolbar beside them folded every command into its menu next to empty room. As
618
594
  a grid — the heading and its marks on the first line, the subheading across both columns
619
595
  under them — the title is as wide as its widest line. */
620
- [data-ui='page-header']
596
+ [data-ui-page-header]
621
597
  > *
622
- > [data-part='title-area']
623
- > [data-part='title-row']:has(
624
- > [data-part='actions'] > [data-ui='toolbar'][data-overflow='menu']
625
- )
626
- > [data-part='title'] {
598
+ > [data-part-title-area]
599
+ > [data-part-title-row]:has(> [data-part-actions] > [data-ui-toolbar][data-overflow='menu'])
600
+ > [data-part-title] {
627
601
  align-items: center;
628
602
  display: grid;
629
603
  flex: 0 1 auto;
630
604
  grid-template-columns: minmax(0, auto) auto;
631
605
  justify-content: start;
632
606
  }
633
- [data-ui='page-header']
607
+ [data-ui-page-header]
634
608
  > *
635
- > [data-part='title-area']
636
- > [data-part='title-row']:has(
637
- > [data-part='actions'] > [data-ui='toolbar'][data-overflow='menu']
638
- )
639
- > [data-part='title']
640
- > [data-part='heading'] {
609
+ > [data-part-title-area]
610
+ > [data-part-title-row]:has(> [data-part-actions] > [data-ui-toolbar][data-overflow='menu'])
611
+ > [data-part-title]
612
+ > [data-part-heading] {
641
613
  grid-column: 1;
642
614
  }
643
- [data-ui='page-header']
615
+ [data-ui-page-header]
644
616
  > *
645
- > [data-part='title-area']
646
- > [data-part='title-row']:has(
647
- > [data-part='actions'] > [data-ui='toolbar'][data-overflow='menu']
648
- )
649
- > [data-part='title']
650
- > [data-part='subheading'] {
617
+ > [data-part-title-area]
618
+ > [data-part-title-row]:has(> [data-part-actions] > [data-ui-toolbar][data-overflow='menu'])
619
+ > [data-part-title]
620
+ > [data-part-subheading] {
651
621
  grid-column: 1 / -1;
652
622
  }
653
623
  /* The cluster starts from nothing and grows into what the title leaves, so its width follows
654
624
  the row's in both directions. It never gives way below its menu's trigger, a medium control,
655
625
  and the toolbar's inset on either side: under it the trigger stood past the screen's edge on
656
626
  a phone. */
657
- [data-ui='page-header']
627
+ [data-ui-page-header]
658
628
  > *
659
- > [data-part='title-area']
660
- > [data-part='title-row']
661
- > [data-part='actions']:has(> [data-ui='toolbar'][data-overflow='menu']) {
629
+ > [data-part-title-area]
630
+ > [data-part-title-row]
631
+ > [data-part-actions]:has(> [data-ui-toolbar][data-overflow='menu']) {
662
632
  flex: 1 1 0%;
663
633
  min-inline-size: calc(
664
634
  var(--slotted-control-height-md, 34px) + 2 *
@@ -675,12 +645,12 @@
675
645
  stand at the end of the row as they did when the cluster was their own width. `safe`, because
676
646
  a bar of pinned controls wider than the room scrolls, and overflow at the start of a scroll
677
647
  container cannot be scrolled to. */
678
- [data-ui='page-header']
648
+ [data-ui-page-header]
679
649
  > *
680
- > [data-part='title-area']
681
- > [data-part='title-row']
682
- > [data-part='actions']
683
- > [data-ui='toolbar'][data-overflow='menu'] {
650
+ > [data-part-title-area]
651
+ > [data-part-title-row]
652
+ > [data-part-actions]
653
+ > [data-ui-toolbar][data-overflow='menu'] {
684
654
  flex: 1 1 0%;
685
655
  justify-content: safe flex-end;
686
656
  }
@@ -689,11 +659,11 @@
689
659
  * Previous and next record, after the actions and set apart from them by a
690
660
  * rule, which is where sap.f puts navigationActions.
691
661
  */
692
- [data-ui='page-header']
662
+ [data-ui-page-header]
693
663
  > *
694
- > [data-part='title-area']
695
- > [data-part='title-row']
696
- > [data-part='navigation'] {
664
+ > [data-part-title-area]
665
+ > [data-part-title-row]
666
+ > [data-part-navigation] {
697
667
  align-items: center;
698
668
  border-inline-start: var(--_rule-size) solid var(--_rule);
699
669
  display: flex;
@@ -713,12 +683,12 @@
713
683
  * for the other direction. The glyphs mirror; the order is already the
714
684
  * row's.
715
685
  */
716
- [data-ui='page-header']
686
+ [data-ui-page-header]
717
687
  > *
718
- > [data-part='title-area']
719
- > [data-part='title-row']
720
- > [data-part='navigation']:dir(rtl)
721
- :is(svg, [data-ui='icon']) {
688
+ > [data-part-title-area]
689
+ > [data-part-title-row]
690
+ > [data-part-navigation]:dir(rtl)
691
+ :is(svg, [data-ui-icon]) {
722
692
  scale: -1 1;
723
693
  }
724
694
 
@@ -729,7 +699,7 @@
729
699
  * to 0fr — the content's own height at every frame, nothing measured — as
730
700
  * collapsible does. Figure and content share the row.
731
701
  */
732
- [data-ui='page-header'] > * > [data-part='header-area'] {
702
+ [data-ui-page-header] > * > [data-part-header-area] {
733
703
  display: grid;
734
704
  grid-template-columns: auto minmax(0, 1fr);
735
705
  grid-template-rows: 1fr;
@@ -739,10 +709,10 @@
739
709
  grid-template-rows var(--_duration) var(--_easing),
740
710
  opacity var(--_duration) var(--_easing);
741
711
  }
742
- [data-ui='page-header'] > * > [data-part='header-area']:not(:has([data-part='figure'])) {
712
+ [data-ui-page-header] > * > [data-part-header-area]:not(:has([data-part-figure])) {
743
713
  grid-template-columns: minmax(0, 1fr);
744
714
  }
745
- [data-ui='page-header'] > * > [data-part='header-area'] > * {
715
+ [data-ui-page-header] > * > [data-part-header-area] > * {
746
716
  min-block-size: 0;
747
717
  }
748
718
 
@@ -752,26 +722,24 @@
752
722
  * offset is what hides the area — a 0fr row there would shorten the root
753
723
  * under the reader and jump the scroll by the area's height.
754
724
  */
755
- [data-ui='page-header']:not([data-expanded]):not([data-scrolled])
756
- > *
757
- > [data-part='header-area'] {
725
+ [data-ui-page-header]:not([data-expanded]):not([data-scrolled]) > * > [data-part-header-area] {
758
726
  grid-template-rows: 0fr;
759
727
  opacity: 0;
760
728
  }
761
- [data-ui='page-header']:not([data-expanded]):not([data-scrolled])
729
+ [data-ui-page-header]:not([data-expanded]):not([data-scrolled])
762
730
  > *
763
- > [data-part='header-area']
731
+ > [data-part-header-area]
764
732
  > * {
765
733
  overflow: clip;
766
734
  }
767
735
 
768
- [data-ui='page-header'] > * > [data-part='header-area'] > [data-part='figure'] {
736
+ [data-ui-page-header] > * > [data-part-header-area] > [data-part-figure] {
769
737
  display: flex;
770
738
  padding-block-end: var(--_padding-block);
771
739
  padding-inline-end: var(--slotted-space-6, 1rem);
772
740
  }
773
741
 
774
- [data-ui='page-header'] > * > [data-part='header-area'] > [data-part='content'] {
742
+ [data-ui-page-header] > * > [data-part-header-area] > [data-part-content] {
775
743
  display: flex;
776
744
  flex-direction: column;
777
745
  gap: var(--_gap);
@@ -779,11 +747,11 @@
779
747
  padding-block-end: var(--_padding-block);
780
748
  }
781
749
 
782
- [data-ui='page-header']
750
+ [data-ui-page-header]
783
751
  > *
784
- > [data-part='header-area']
785
- > [data-part='content']
786
- > [data-part='description'] {
752
+ > [data-part-header-area]
753
+ > [data-part-content]
754
+ > [data-part-description] {
787
755
  -webkit-box-orient: vertical;
788
756
  color: var(--_muted);
789
757
  display: -webkit-box;
@@ -798,14 +766,14 @@
798
766
 
799
767
  /* The half pill the header area's columns keep clear of the edge; see the
800
768
  title area's reservation above. After the columns' own rules, so it wins. */
801
- [data-ui='page-header']:has([data-part='controls'] > *)
769
+ [data-ui-page-header]:has([data-part-controls] > *)
802
770
  > *
803
- > [data-part='header-area']
804
- > [data-part='figure'],
805
- [data-ui='page-header']:has([data-part='controls'] > *)
771
+ > [data-part-header-area]
772
+ > [data-part-figure],
773
+ [data-ui-page-header]:has([data-part-controls] > *)
806
774
  > *
807
- > [data-part='header-area']
808
- > [data-part='content'] {
775
+ > [data-part-header-area]
776
+ > [data-part-content] {
809
777
  padding-block-end: calc(var(--_padding-block) + var(--_control-size) / 2);
810
778
  }
811
779
 
@@ -814,9 +782,9 @@
814
782
  * reserved would keep the area 27 pixels tall: the reservation goes with
815
783
  * the content, and the pill straddles the title area's own reservation.
816
784
  */
817
- [data-ui='page-header']:not([data-expanded]):not([data-scrolled])
785
+ [data-ui-page-header]:not([data-expanded]):not([data-scrolled])
818
786
  > *
819
- > [data-part='header-area']
787
+ > [data-part-header-area]
820
788
  > * {
821
789
  padding-block: 0;
822
790
  }
@@ -834,7 +802,7 @@
834
802
  * The row is `relative` and the pill `absolute`, so the tabs under it lay
835
803
  * out as if it were not there; the pill overlaps their top edge.
836
804
  */
837
- [data-ui='page-header'] > * > [data-part='controls'] {
805
+ [data-ui-page-header] > * > [data-part-controls] {
838
806
  block-size: 0;
839
807
  position: relative;
840
808
  /* Above the title area, and above the wait drawn on the same edge. */
@@ -847,16 +815,14 @@
847
815
  * Without tabs the root's edge is where the pill sits, and no second rule
848
816
  * is drawn.
849
817
  */
850
- [data-ui='page-header']:has(> * > [data-part='tabs']:not(:empty))
851
- > *
852
- > [data-part='controls']::before {
818
+ [data-ui-page-header]:has(> * > [data-part-tabs]:not(:empty)) > * > [data-part-controls]::before {
853
819
  border-block-start: var(--_rule-size) solid var(--_rule);
854
820
  content: '';
855
821
  inset-block-start: 0;
856
822
  inset-inline: -50vw;
857
823
  position: absolute;
858
824
  }
859
- [data-ui='page-header'] > * > [data-part='controls'] > * {
825
+ [data-ui-page-header] > * > [data-part-controls] > * {
860
826
  /* The pill is a control on the hairline: it keeps the surface in every variant. */
861
827
  background-color: var(--_surface);
862
828
  border: var(--_rule-size) solid var(--_rule);
@@ -879,8 +845,8 @@
879
845
  * and nothing else does; press goes one step further; both hold back for a
880
846
  * disabled control.
881
847
  */
882
- [data-ui='page-header'] > * > [data-part='controls'] > * > [data-part='toggle'],
883
- [data-ui='page-header'] > * > [data-part='controls'] > * > [data-part='pin'] {
848
+ [data-ui-page-header] > * > [data-part-controls] > * > [data-part-toggle],
849
+ [data-ui-page-header] > * > [data-part-controls] > * > [data-part-pin] {
884
850
  /* One step above the nav row's arrow: a mark on a hairline pill reads
885
851
  thin at the small step, and the reviewer asked for weight. The marks
886
852
  are the Glyph elements the bindings render — `chevron-down` in the
@@ -906,20 +872,15 @@
906
872
  background-color var(--slotted-duration-short) var(--_easing),
907
873
  color var(--slotted-duration-short) var(--_easing);
908
874
  }
909
- [data-ui='page-header']
910
- > *
911
- > [data-part='controls']
912
- > *
913
- > [data-part='toggle']
914
- > [data-ui='icon'] {
875
+ [data-ui-page-header] > * > [data-part-controls] > * > [data-part-toggle] > [data-ui-icon] {
915
876
  transition: rotate var(--slotted-duration-short) var(--_easing);
916
877
  }
917
- [data-ui='page-header'][data-expanded]
878
+ [data-ui-page-header][data-expanded]
918
879
  > *
919
- > [data-part='controls']
880
+ > [data-part-controls]
920
881
  > *
921
- > [data-part='toggle']
922
- > [data-ui='icon'] {
882
+ > [data-part-toggle]
883
+ > [data-ui-icon] {
923
884
  rotate: 180deg;
924
885
  }
925
886
  /**
@@ -929,54 +890,38 @@
929
890
  * read, so the pin is not offered — the binding writes the fact and lets a
930
891
  * held header go — and below 600 pixels the sheet hides it on its own.
931
892
  */
932
- [data-ui='page-header'][data-tall] > * > [data-part='controls'] > * > [data-part='pin'] {
893
+ [data-ui-page-header][data-tall] > * > [data-part-controls] > * > [data-part-pin] {
933
894
  display: none;
934
895
  }
935
- [data-ui='page-header'] > * > [data-part='controls'] > * > [data-part='pin'][data-pressed] {
896
+ [data-ui-page-header] > * > [data-part-controls] > * > [data-part-pin][data-pressed] {
936
897
  background-color: var(--slotted-tone-accent-surface, transparent);
937
898
  color: var(--slotted-tone-accent-text, LinkText);
938
899
  }
939
- [data-ui='page-header']
900
+ [data-ui-page-header]
940
901
  > *
941
- > [data-part='controls']
902
+ > [data-part-controls]
942
903
  > *
943
- > [data-part='pin'][data-pressed]:not(:disabled):hover {
904
+ > [data-part-pin][data-pressed]:not(:disabled):hover {
944
905
  background-color: var(--slotted-tone-accent-subtle-hover, ButtonFace);
945
906
  color: var(--slotted-tone-accent-text, LinkText);
946
907
  }
947
908
 
948
- [data-ui='page-header']
949
- > *
950
- > [data-part='controls']
951
- > *
952
- > [data-part='toggle']:not(:disabled):hover,
953
- [data-ui='page-header']
954
- > *
955
- > [data-part='controls']
956
- > *
957
- > [data-part='pin']:not(:disabled):hover {
909
+ [data-ui-page-header] > * > [data-part-controls] > * > [data-part-toggle]:not(:disabled):hover,
910
+ [data-ui-page-header] > * > [data-part-controls] > * > [data-part-pin]:not(:disabled):hover {
958
911
  background-color: var(--slotted-tone-secondary-subtle-hover, ButtonFace);
959
912
  color: var(--_text);
960
913
  }
961
- [data-ui='page-header']
962
- > *
963
- > [data-part='controls']
964
- > *
965
- > [data-part='toggle']:not(:disabled):active,
966
- [data-ui='page-header']
967
- > *
968
- > [data-part='controls']
969
- > *
970
- > [data-part='pin']:not(:disabled):active {
914
+ [data-ui-page-header] > * > [data-part-controls] > * > [data-part-toggle]:not(:disabled):active,
915
+ [data-ui-page-header] > * > [data-part-controls] > * > [data-part-pin]:not(:disabled):active {
971
916
  background-color: var(--slotted-tone-secondary-subtle-active, ButtonFace);
972
917
  }
973
- [data-ui='page-header'] > * > [data-part='controls'] > * > [data-part='toggle']:focus-visible,
974
- [data-ui='page-header'] > * > [data-part='controls'] > * > [data-part='pin']:focus-visible {
918
+ [data-ui-page-header] > * > [data-part-controls] > * > [data-part-toggle]:focus-visible,
919
+ [data-ui-page-header] > * > [data-part-controls] > * > [data-part-pin]:focus-visible {
975
920
  outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
976
921
  outline-offset: var(--slotted-focus-ring-offset, 2px);
977
922
  }
978
- [data-ui='page-header'] > * > [data-part='controls'] > * > [data-part='toggle']:disabled,
979
- [data-ui='page-header'] > * > [data-part='controls'] > * > [data-part='pin']:disabled {
923
+ [data-ui-page-header] > * > [data-part-controls] > * > [data-part-toggle]:disabled,
924
+ [data-ui-page-header] > * > [data-part-controls] > * > [data-part-pin]:disabled {
980
925
  color: var(--slotted-disabled-foreground, GrayText);
981
926
  cursor: default;
982
927
  }
@@ -988,18 +933,18 @@
988
933
  * why it needs no sticky of its own. The pill above it needs the room its
989
934
  * lower half takes, so the slot starts half a control down.
990
935
  */
991
- [data-ui='page-header'] > * > [data-part='tabs'] {
936
+ [data-ui-page-header] > * > [data-part-tabs] {
992
937
  /* The root's bottom edge is the tabs' track: one line, the whole width. */
993
938
  --slotted-tabs-track-color: transparent;
994
939
 
995
940
  min-inline-size: 0;
996
941
  padding-block-start: calc(var(--_control-size) / 2 + var(--slotted-space-2, 0.25rem));
997
942
  }
998
- [data-ui='page-header'] > * > [data-part='tabs']:empty {
943
+ [data-ui-page-header] > * > [data-part-tabs]:empty {
999
944
  display: none;
1000
945
  }
1001
946
  /* Without a pill the tabs sit on the rule. */
1002
- [data-ui='page-header'] > * > [data-part='controls']:empty + [data-part='tabs'] {
947
+ [data-ui-page-header] > * > [data-part-controls]:empty + [data-part-tabs] {
1003
948
  padding-block-start: 0;
1004
949
  }
1005
950
 
@@ -1016,13 +961,13 @@
1016
961
  * well and comes later. It is honoured on parts, which is where a consumer
1017
962
  * writes it.
1018
963
  */
1019
- [data-ui='page-header'][data-expanded]
964
+ [data-ui-page-header][data-expanded]
1020
965
  > *
1021
- > [data-part='title-area']
966
+ > [data-part-title-area]
1022
967
  [data-part][data-when='snapped'][data-when],
1023
- [data-ui='page-header']:not([data-expanded])
968
+ [data-ui-page-header]:not([data-expanded])
1024
969
  > *
1025
- > [data-part='title-area']
970
+ > [data-part-title-area]
1026
971
  [data-part][data-when='expanded'][data-when] {
1027
972
  display: none;
1028
973
  }
@@ -1035,31 +980,31 @@
1035
980
  * of the text it replaces, which is what keeps the height still when the
1036
981
  * title arrives.
1037
982
  */
1038
- [data-ui='page-header'][data-loading]
983
+ [data-ui-page-header][data-loading]
1039
984
  > *
1040
- > [data-part='title-area']
1041
- > [data-part='title-row']
1042
- > [data-part='title']
1043
- > [data-part='heading'] {
985
+ > [data-part-title-area]
986
+ > [data-part-title-row]
987
+ > [data-part-title]
988
+ > [data-part-heading] {
1044
989
  /* The width a title has, and no growth: grown, the heading pushed the
1045
990
  marks to the far end and they jumped back beside it when the title
1046
991
  arrived. The bar is what the words will be. */
1047
992
  --slotted-skeleton-inline-size: 24ch;
1048
993
  flex: 0 1 auto;
1049
994
  }
1050
- [data-ui='page-header'][data-loading]
995
+ [data-ui-page-header][data-loading]
1051
996
  > *
1052
- > [data-part='title-area']
1053
- > [data-part='title-row']
1054
- > [data-part='title']
1055
- > [data-part='subheading'] {
997
+ > [data-part-title-area]
998
+ > [data-part-title-row]
999
+ > [data-part-title]
1000
+ > [data-part-subheading] {
1056
1001
  --slotted-skeleton-inline-size: 32ch;
1057
1002
  }
1058
- [data-ui='page-header'][data-loading]
1003
+ [data-ui-page-header][data-loading]
1059
1004
  > *
1060
- > [data-part='header-area']
1061
- > [data-part='content']
1062
- > [data-part='description'] {
1005
+ > [data-part-header-area]
1006
+ > [data-part-content]
1007
+ > [data-part-description] {
1063
1008
  --slotted-skeleton-inline-size: 40ch;
1064
1009
  }
1065
1010
 
@@ -1085,7 +1030,7 @@
1085
1030
  * whose ground would cover the bar's upper pixel once the area has slid
1086
1031
  * under the title; below the controls, whose pill straddles the same line.
1087
1032
  */
1088
- [data-ui='page-header'] > * > [data-part='progress'] {
1033
+ [data-ui-page-header] > * > [data-part-progress] {
1089
1034
  block-size: var(--_rule-size);
1090
1035
  grid-column: full;
1091
1036
  margin-block-end: calc(-1 * var(--_rule-size));
@@ -1101,8 +1046,8 @@
1101
1046
  * inside it. The second rule reads an ARIA state rather than another
1102
1047
  * family's identity, so any region a consumer marks busy takes it.
1103
1048
  */
1104
- [data-ui='page-header'][data-loading] > * > [data-part='progress'],
1105
- [aria-busy='true'] [data-ui='page-header'] > * > [data-part='progress'] {
1049
+ [data-ui-page-header][data-loading] > * > [data-part-progress],
1050
+ [aria-busy='true'] [data-ui-page-header] > * > [data-part-progress] {
1106
1051
  display: none;
1107
1052
  }
1108
1053
 
@@ -1116,7 +1061,7 @@
1116
1061
  * against the component's own width rather than the viewport.
1117
1062
  */
1118
1063
  @container page-header (width < 600px) {
1119
- [data-ui='page-header'] {
1064
+ [data-ui-page-header] {
1120
1065
  --_heading-size: var(
1121
1066
  --slotted-page-header-heading-size-sm,
1122
1067
  var(--slotted-font-size-xl, 1.125rem)
@@ -1128,29 +1073,25 @@
1128
1073
  );
1129
1074
  --_snapped-heading-line-height: var(--slotted-line-height-md, 1.5);
1130
1075
  }
1131
- [data-ui='page-header']
1076
+ [data-ui-page-header]
1132
1077
  > *
1133
- > [data-part='title-area']
1134
- > [data-part='nav']
1135
- > [data-part='back']
1136
- ~ [data-part='breadcrumbs'] {
1078
+ > [data-part-title-area]
1079
+ > [data-part-nav]
1080
+ > [data-part-back]
1081
+ ~ [data-part-breadcrumbs] {
1137
1082
  display: none;
1138
1083
  }
1139
- [data-ui='page-header']
1084
+ [data-ui-page-header]
1140
1085
  > *
1141
- > [data-part='title-area']
1142
- > [data-part='nav']
1143
- > [data-part='back']:has(~ [data-part='breadcrumbs']:not(:empty)) {
1086
+ > [data-part-title-area]
1087
+ > [data-part-nav]
1088
+ > [data-part-back]:has(~ [data-part-breadcrumbs]:not(:empty)) {
1144
1089
  display: inline-flex;
1145
1090
  }
1146
- [data-ui='page-header'] > * > [data-part='controls'] > * > [data-part='pin'] {
1091
+ [data-ui-page-header] > * > [data-part-controls] > * > [data-part-pin] {
1147
1092
  display: none;
1148
1093
  }
1149
- [data-ui='page-header']
1150
- > *
1151
- > [data-part='title-area']
1152
- > [data-part='title-row']
1153
- > [data-part='title'] {
1094
+ [data-ui-page-header] > * > [data-part-title-area] > [data-part-title-row] > [data-part-title] {
1154
1095
  flex: 1 1 0;
1155
1096
  min-inline-size: 60%;
1156
1097
  }
@@ -1160,57 +1101,55 @@
1160
1101
  * title that leaves it room, the grown box put one button at its own
1161
1102
  * start, mid-row, off the edge every other width aligns it to.
1162
1103
  */
1163
- [data-ui='page-header']
1104
+ [data-ui-page-header]
1164
1105
  > *
1165
- > [data-part='title-area']
1166
- > [data-part='title-row']
1167
- > [data-part='actions'] {
1106
+ > [data-part-title-area]
1107
+ > [data-part-title-row]
1108
+ > [data-part-actions] {
1168
1109
  flex: 1 1 auto;
1169
1110
  justify-content: flex-end;
1170
1111
  }
1171
1112
  /* The marks take a line of their own under the heading: beside it their break depends on
1172
1113
  what they say, which the waiting header cannot know, and the header grew when it landed. */
1173
- [data-ui='page-header']
1114
+ [data-ui-page-header]
1174
1115
  > *
1175
- > [data-part='title-area']
1176
- > [data-part='title-row']
1177
- > [data-part='title']
1178
- > [data-part='marks'] {
1116
+ > [data-part-title-area]
1117
+ > [data-part-title-row]
1118
+ > [data-part-title]
1119
+ > [data-part-marks] {
1179
1120
  flex-basis: 100%;
1180
1121
  }
1181
- [data-ui='page-header']
1122
+ [data-ui-page-header]
1182
1123
  > *
1183
- > [data-part='title-area']
1184
- > [data-part='title-row']:has(
1185
- > [data-part='actions'] > [data-ui='toolbar'][data-overflow='menu']
1186
- )
1187
- > [data-part='title']
1188
- > [data-part='marks'] {
1124
+ > [data-part-title-area]
1125
+ > [data-part-title-row]:has(> [data-part-actions] > [data-ui-toolbar][data-overflow='menu'])
1126
+ > [data-part-title]
1127
+ > [data-part-marks] {
1189
1128
  grid-column: 1 / -1;
1190
1129
  }
1191
1130
  /* One line, as snapped: the phone has no second one to give it. */
1192
- [data-ui='page-header']
1131
+ [data-ui-page-header]
1193
1132
  > *
1194
- > [data-part='title-area']
1195
- > [data-part='title-row']
1196
- > [data-part='title']
1197
- > [data-part='subheading'] {
1133
+ > [data-part-title-area]
1134
+ > [data-part-title-row]
1135
+ > [data-part-title]
1136
+ > [data-part-subheading] {
1198
1137
  display: block;
1199
1138
  text-overflow: ellipsis;
1200
1139
  white-space: nowrap;
1201
1140
  }
1202
- [data-ui='page-header']
1141
+ [data-ui-page-header]
1203
1142
  > *
1204
- > [data-part='title-area']
1205
- > [data-part='title-row']
1206
- > [data-part='navigation'] {
1143
+ > [data-part-title-area]
1144
+ > [data-part-title-row]
1145
+ > [data-part-navigation] {
1207
1146
  border-inline-start: 0;
1208
1147
  padding-inline-start: 0;
1209
1148
  }
1210
- [data-ui='page-header'] > * > [data-part='header-area'] {
1149
+ [data-ui-page-header] > * > [data-part-header-area] {
1211
1150
  grid-template-columns: minmax(0, 1fr);
1212
1151
  }
1213
- [data-ui='page-header'] > * > [data-part='header-area'] > [data-part='figure'] {
1152
+ [data-ui-page-header] > * > [data-part-header-area] > [data-part-figure] {
1214
1153
  padding-block-end: var(--_gap);
1215
1154
  padding-inline-end: 0;
1216
1155
  }