@threadlabs/looma 0.17.4 → 0.18.1

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 (61) hide show
  1. package/components/ui-avatar/ui-avatar.html +8 -4
  2. package/components/ui-badge/ui-badge.html +28 -34
  3. package/components/ui-button/ui-button.html +1 -1
  4. package/components/ui-combobox/ui-combobox.html +4 -48
  5. package/components/ui-icon-button/ui-icon-button.html +10 -0
  6. package/components/ui-input/ui-input.html +1 -1
  7. package/components/ui-input-group/ui-input-group.html +1 -1
  8. package/components/ui-listbox/ui-listbox.html +88 -12
  9. package/components/ui-listbox/ui-listbox.js +162 -18
  10. package/components/ui-menu/ui-menu.js +14 -2
  11. package/components/ui-menu-item/ui-menu-item.html +3 -0
  12. package/components/ui-popover/ui-popover.js +13 -2
  13. package/components/ui-select/ui-select.html +1 -1
  14. package/components/ui-spinner/ui-spinner.html +47 -14
  15. package/components/ui-textarea/ui-textarea.html +1 -1
  16. package/dist/index.js +1 -1
  17. package/editor/chunks/extensions.js +5 -0
  18. package/package.json +1 -1
  19. package/styles/ui-avatar.css +6 -2
  20. package/styles/ui-badge.css +30 -40
  21. package/styles/ui-button.css +1 -1
  22. package/styles/ui-combobox.css +0 -52
  23. package/styles/ui-icon-button.css +10 -0
  24. package/styles/ui-input-group.css +1 -1
  25. package/styles/ui-input.css +1 -1
  26. package/styles/ui-listbox.css +33 -8
  27. package/styles/ui-menu-item.css +3 -0
  28. package/styles/ui-select.css +1 -1
  29. package/styles/ui-spinner.css +40 -15
  30. package/styles/ui-textarea.css +1 -1
  31. package/tokens.css +67 -2
  32. package/vanilla/UiCombobox.js +9 -1
  33. package/vanilla/UiListbox.d.ts +3 -1
  34. package/vanilla/UiListbox.js +65 -18
  35. package/vanilla/UiSpinner.js +19 -1
  36. package/vue/UiAvatar.vue +11 -2
  37. package/vue/UiBadge.vue +30 -36
  38. package/vue/UiButton.vue +1 -1
  39. package/vue/UiCombobox.vue +4 -49
  40. package/vue/UiIconButton.vue +13 -0
  41. package/vue/UiInput.vue +1 -1
  42. package/vue/UiInputGroup.vue +1 -1
  43. package/vue/UiListbox.d.ts +18 -5
  44. package/vue/UiListbox.vue +142 -25
  45. package/vue/UiMenuItem.vue +3 -0
  46. package/vue/UiSelect.vue +1 -1
  47. package/vue/UiSpinner.vue +47 -14
  48. package/vue/UiTextarea.vue +1 -1
  49. package/vue/chunks/UiAvatar.js +2 -1
  50. package/vue/chunks/UiBadge.js +1 -1
  51. package/vue/chunks/UiButton.js +1 -1
  52. package/vue/chunks/UiCombobox.js +11 -2
  53. package/vue/chunks/UiIconButton.js +1 -1
  54. package/vue/chunks/UiInput.js +1 -1
  55. package/vue/chunks/UiInputGroup.js +1 -1
  56. package/vue/chunks/UiListbox.js +134 -20
  57. package/vue/chunks/UiMenuItem.js +1 -1
  58. package/vue/chunks/UiSelect.js +1 -1
  59. package/vue/chunks/UiSpinner.js +29 -3
  60. package/vue/chunks/UiTextarea.js +1 -1
  61. package/vue/components.css +354 -342
@@ -134,7 +134,7 @@ svg[data-v-988c6eae] {
134
134
  syntax: "*";
135
135
  inherits: false;
136
136
  }
137
- [data-component~="ui-avatar"][data-v-f9a69ac3] {
137
+ [data-component~="ui-avatar"][data-v-f0891fb1] {
138
138
  --_ui-default-icon-size: 1.25rem;
139
139
  display: inline-grid;
140
140
  place-items: center;
@@ -142,7 +142,11 @@ svg[data-v-988c6eae] {
142
142
  inline-size: 2.5rem;
143
143
  block-size: 2.5rem;
144
144
  border-radius: var(--ui-avatar-radius, var(--ui-radius-round));
145
- border: 1px solid var(--ui-avatar-border, var(--ui-border-strong));
145
+ border: 1px solid
146
+ var(
147
+ --ui-avatar-border,
148
+ color-mix(in srgb, var(--ui-accent-solid) 35%, var(--ui-surface-default))
149
+ );
146
150
  background: var(--ui-avatar-surface, var(--ui-accent-soft));
147
151
  color: var(--ui-avatar-text, var(--ui-accent-subtle-text, var(--ui-accent-solid)));
148
152
  font: inherit;
@@ -150,29 +154,32 @@ svg[data-v-988c6eae] {
150
154
  font-weight: 600;
151
155
  text-transform: uppercase;
152
156
  }
153
- [data-component~="ui-avatar"][data-ui-avatar-state~="size=sm"][data-v-f9a69ac3] {
157
+ [data-component~="ui-avatar"][data-ui-avatar-state~="size=sm"][data-v-f0891fb1] {
154
158
  --_ui-default-icon-size: 1rem;
155
159
  inline-size: 1.75rem;
156
160
  block-size: 1.75rem;
157
161
  font-size: var(--ui-font-size-xs);
158
162
  }
159
- [data-component~="ui-avatar"][data-ui-avatar-state~="shape=square"][data-v-f9a69ac3] {
163
+ [data-component~="ui-avatar"][data-ui-avatar-state~="hasImage"][data-v-f0891fb1] {
164
+ border-color: var(--ui-avatar-border, var(--ui-border-strong));
165
+ }
166
+ [data-component~="ui-avatar"][data-ui-avatar-state~="shape=square"][data-v-f0891fb1] {
160
167
  border-radius: var(--ui-avatar-radius, var(--ui-radius-md));
161
168
  }
162
169
 
163
170
  /* An outline, not a dot: the avatar clips its content to the circle, and an outline is drawn
164
171
  outside the box, so the ring survives the clip and the overlap in an Avatar Group. */
165
- [data-component~="ui-avatar"][data-ui-avatar-state~="active"][data-v-f9a69ac3] {
166
- outline: 2px solid var(--ui-avatar-active-ring, var(--ui-success));
172
+ [data-component~="ui-avatar"][data-ui-avatar-state~="active"][data-v-f0891fb1] {
173
+ outline: 1px solid var(--ui-avatar-active-ring, var(--ui-accent-solid));
167
174
  outline-offset: 1px;
168
175
  }
169
- .image[data-v-f9a69ac3],img[data-v-f9a69ac3-s] {
176
+ .image[data-v-f0891fb1],img[data-v-f0891fb1-s] {
170
177
  grid-area: 1 / 1;
171
178
  inline-size: 100%;
172
179
  block-size: 100%;
173
180
  object-fit: cover;
174
181
  }
175
- .fallback[data-v-f9a69ac3] {
182
+ .fallback[data-v-f0891fb1] {
176
183
  grid-area: 1 / 1;
177
184
  display: inline-flex;
178
185
  align-items: center;
@@ -185,7 +192,7 @@ svg[data-v-988c6eae] {
185
192
  /* Centre the glyphs, not the line box: a label without descenders otherwise reads high.
186
193
  * Trimming applies to block containers, so the box is a block with centred content. */
187
194
  @supports (text-box-trim: trim-both) {
188
- .fallback[data-v-f9a69ac3] {
195
+ .fallback[data-v-f0891fb1] {
189
196
  display: block;
190
197
  text-align: center;
191
198
  align-content: center;
@@ -193,12 +200,12 @@ svg[data-v-988c6eae] {
193
200
  text-box-edge: cap alphabetic;
194
201
  }
195
202
  }
196
- [hidden][data-v-f9a69ac3] {
203
+ [hidden][data-v-f0891fb1] {
197
204
  display: none;
198
205
  }
199
206
 
200
207
  /* A component that sets its display still honours the hidden attribute on its root. */
201
- [data-component~="ui-avatar"][hidden][data-v-f9a69ac3] {
208
+ [data-component~="ui-avatar"][hidden][data-v-f0891fb1] {
202
209
  display: none;
203
210
  }
204
211
 
@@ -316,8 +323,8 @@ svg[data-v-988c6eae] {
316
323
  syntax: "*";
317
324
  inherits: false;
318
325
  }
319
- [data-component~="ui-badge"][data-v-38a29166] {
320
- --_badge-surface: var(--ui-surface-subtle);
326
+ [data-component~="ui-badge"][data-v-fe098822] {
327
+ --_badge-surface: color-mix(in srgb, var(--ui-surface-subtle) 80%, var(--ui-surface-default));
321
328
  --_badge-text: var(--ui-text-secondary);
322
329
  /* Sit between the soft fill and its stronger theme ink. */
323
330
  --_badge-border: color-mix(in srgb, var(--_badge-surface) 75%, var(--_badge-text) 25%);
@@ -325,7 +332,7 @@ svg[data-v-988c6eae] {
325
332
  surface, text, and border hooks. Each value is invalid, so the tone shows, while it is unset. The
326
333
  mixes keep 4.5:1 text contrast for any colour, in a light theme or a dark one. */
327
334
  --_ui-badge-color: var(--ui-badge-color);
328
- --_badge-color-wash: color-mix(in oklab, var(--_ui-badge-color) 15%, var(--ui-surface-default));
335
+ --_badge-color-wash: color-mix(in oklab, var(--_ui-badge-color) 13%, var(--ui-surface-default));
329
336
  --_badge-color-ink: color-mix(in oklab, var(--_ui-badge-color) 35%, var(--ui-text-primary));
330
337
  --_badge-color-surface: var(--_badge-color-wash);
331
338
  --_badge-color-border: color-mix(
@@ -360,7 +367,7 @@ svg[data-v-988c6eae] {
360
367
  * Trimming applies to block containers; an inline-block is one and, like the inline-flex it
361
368
  * replaces, still sizes to its label rather than filling its container. */
362
369
  @supports (text-box-trim: trim-both) {
363
- [data-component~="ui-badge"][data-v-38a29166] {
370
+ [data-component~="ui-badge"][data-v-fe098822] {
364
371
  display: inline-block;
365
372
  min-block-size: var(--ui-badge-min-block-size, 1.5rem);
366
373
  text-align: center;
@@ -369,65 +376,65 @@ svg[data-v-988c6eae] {
369
376
  text-box-edge: cap alphabetic;
370
377
  }
371
378
  }
372
- [data-component~="ui-badge"][data-ui-badge-state~="tone=accent"][data-v-38a29166] {
379
+ [data-component~="ui-badge"][data-ui-badge-state~="tone=accent"][data-v-fe098822] {
373
380
  --_badge-surface: var(--ui-accent-strong-surface, var(--ui-accent-solid));
374
381
  --_badge-border: var(--ui-accent-strong-surface, var(--ui-accent-solid));
375
382
  --_badge-text: var(--ui-accent-on-strong, var(--ui-text-on-accent));
376
383
  }
377
- [data-component~="ui-badge"][data-ui-badge-state~="tone=danger"][data-v-38a29166] {
384
+ [data-component~="ui-badge"][data-ui-badge-state~="tone=danger"][data-v-fe098822] {
378
385
  --_badge-surface: var(--ui-danger-strong-surface, var(--ui-danger-solid));
379
386
  --_badge-border: var(--ui-danger-strong-surface, var(--ui-danger-solid));
380
387
  --_badge-text: var(--ui-danger-on-strong, var(--ui-text-on-accent));
381
388
  }
382
- [data-component~="ui-badge"][data-ui-badge-state~="tone=success"][data-v-38a29166] {
389
+ [data-component~="ui-badge"][data-ui-badge-state~="tone=success"][data-v-fe098822] {
383
390
  --_badge-surface: var(--ui-success-strong-surface, var(--ui-success-solid));
384
391
  --_badge-border: var(--ui-success-strong-surface, var(--ui-success-solid));
385
392
  --_badge-text: var(--ui-success-on-strong, var(--ui-text-on-accent));
386
393
  }
387
- [data-component~="ui-badge"][data-ui-badge-state~="tone=warning"][data-v-38a29166] {
394
+ [data-component~="ui-badge"][data-ui-badge-state~="tone=warning"][data-v-fe098822] {
388
395
  --_badge-surface: var(--ui-warning-strong-surface, var(--ui-warning-solid));
389
396
  --_badge-border: var(--ui-warning-strong-surface, var(--ui-warning-solid));
390
397
  --_badge-text: var(--ui-warning-on-strong, var(--ui-text-on-accent));
391
398
  }
392
- [data-component~="ui-badge"][data-ui-badge-state~="tone=info"][data-v-38a29166] {
399
+ [data-component~="ui-badge"][data-ui-badge-state~="tone=info"][data-v-fe098822] {
393
400
  --_badge-surface: var(--ui-info-strong-surface, var(--ui-info-solid));
394
401
  --_badge-border: var(--ui-info-strong-surface, var(--ui-info-solid));
395
402
  --_badge-text: var(--ui-info-on-strong, var(--ui-text-on-accent));
396
403
  }
397
- [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=accent"][data-v-38a29166] {
398
- --_badge-surface: color-mix(in srgb, var(--ui-accent-solid) 22%, var(--ui-surface-default));
399
- --_badge-border: color-mix(in srgb, var(--ui-accent-solid) 28%, var(--ui-surface-default));
404
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=accent"][data-v-fe098822] {
405
+ --_badge-surface: color-mix(in srgb, var(--ui-accent-solid) 19%, var(--ui-surface-default));
406
+ --_badge-border: color-mix(in srgb, var(--ui-accent-solid) 25%, var(--ui-surface-default));
400
407
  --_badge-text: var(--ui-accent-subtle-text, var(--ui-accent-solid));
401
408
  }
402
- [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=danger"][data-v-38a29166] {
403
- --_badge-surface: color-mix(in srgb, var(--ui-danger-solid) 22%, var(--ui-surface-default));
404
- --_badge-border: color-mix(in srgb, var(--ui-danger-solid) 28%, var(--ui-surface-default));
409
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=danger"][data-v-fe098822] {
410
+ --_badge-surface: color-mix(in srgb, var(--ui-danger-solid) 19%, var(--ui-surface-default));
411
+ --_badge-border: color-mix(in srgb, var(--ui-danger-solid) 25%, var(--ui-surface-default));
405
412
  --_badge-text: var(--ui-danger-subtle-text, var(--ui-danger-solid));
406
413
  }
407
- [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=success"][data-v-38a29166] {
408
- --_badge-surface: color-mix(in srgb, var(--ui-success-solid) 22%, var(--ui-surface-default));
409
- --_badge-border: color-mix(in srgb, var(--ui-success-solid) 28%, var(--ui-surface-default));
414
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=success"][data-v-fe098822] {
415
+ --_badge-surface: color-mix(in srgb, var(--ui-success-solid) 19%, var(--ui-surface-default));
416
+ --_badge-border: color-mix(in srgb, var(--ui-success-solid) 25%, var(--ui-surface-default));
410
417
  --_badge-text: var(--ui-success-subtle-text, var(--ui-success-solid));
411
418
  }
412
- [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=warning"][data-v-38a29166] {
413
- --_badge-surface: color-mix(in srgb, var(--ui-warning-solid) 22%, var(--ui-surface-default));
414
- --_badge-border: color-mix(in srgb, var(--ui-warning-solid) 28%, var(--ui-surface-default));
419
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=warning"][data-v-fe098822] {
420
+ --_badge-surface: color-mix(in srgb, var(--ui-warning-solid) 19%, var(--ui-surface-default));
421
+ --_badge-border: color-mix(in srgb, var(--ui-warning-solid) 25%, var(--ui-surface-default));
415
422
  --_badge-text: var(--ui-warning-subtle-text, var(--ui-warning-solid));
416
423
  }
417
- [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=info"][data-v-38a29166] {
418
- --_badge-surface: color-mix(in srgb, var(--ui-info-solid) 22%, var(--ui-surface-default));
419
- --_badge-border: color-mix(in srgb, var(--ui-info-solid) 28%, var(--ui-surface-default));
424
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=info"][data-v-fe098822] {
425
+ --_badge-surface: color-mix(in srgb, var(--ui-info-solid) 19%, var(--ui-surface-default));
426
+ --_badge-border: color-mix(in srgb, var(--ui-info-solid) 25%, var(--ui-surface-default));
420
427
  --_badge-text: var(--ui-info-subtle-text, var(--ui-info-solid));
421
428
  }
422
429
 
423
430
  /* A solid colour fills with the ink. Its text is the page surface, mixed at 0% only so that it too is
424
431
  invalid while the hook is unset. */
425
- [data-component~="ui-badge"][data-ui-badge-state~="variant=solid"][data-v-38a29166] {
432
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=solid"][data-v-fe098822] {
426
433
  --_badge-color-surface: var(--_badge-color-ink);
427
434
  --_badge-color-border: var(--_badge-color-ink);
428
435
  --_badge-color-text: color-mix(in oklab, var(--_ui-badge-color) 0%, var(--ui-surface-default));
429
436
  }
430
- [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-v-38a29166] {
437
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-v-fe098822] {
431
438
  --_badge-surface: var(--ui-surface-default);
432
439
  --_badge-border: var(--ui-border-strong);
433
440
  --_badge-text: var(--ui-text-secondary);
@@ -435,35 +442,37 @@ svg[data-v-988c6eae] {
435
442
  --_badge-color-surface: initial;
436
443
  --_badge-color-border: var(--_badge-color-ink);
437
444
  }
438
- [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-ui-badge-state~="tone=accent"][data-v-38a29166] {
445
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-ui-badge-state~="tone=accent"][data-v-fe098822] {
439
446
  --_badge-border: var(--ui-accent-solid);
440
447
  --_badge-text: var(--ui-accent-subtle-text, var(--ui-accent-solid));
441
448
  }
442
- [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-ui-badge-state~="tone=danger"][data-v-38a29166] {
449
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-ui-badge-state~="tone=danger"][data-v-fe098822] {
443
450
  --_badge-border: var(--ui-danger-solid);
444
451
  --_badge-text: var(--ui-danger-subtle-text, var(--ui-danger-solid));
445
452
  }
446
- [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-ui-badge-state~="tone=success"][data-v-38a29166] {
453
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-ui-badge-state~="tone=success"][data-v-fe098822] {
447
454
  --_badge-border: var(--ui-success-solid);
448
455
  --_badge-text: var(--ui-success-subtle-text, var(--ui-success-solid));
449
456
  }
450
- [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-ui-badge-state~="tone=warning"][data-v-38a29166] {
457
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-ui-badge-state~="tone=warning"][data-v-fe098822] {
451
458
  --_badge-border: var(--ui-warning-solid);
452
459
  --_badge-text: var(--ui-warning-subtle-text, var(--ui-warning-solid));
453
460
  }
454
- [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-ui-badge-state~="tone=info"][data-v-38a29166] {
461
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-ui-badge-state~="tone=info"][data-v-fe098822] {
455
462
  --_badge-border: var(--ui-info-solid);
456
463
  --_badge-text: var(--ui-info-subtle-text, var(--ui-info-solid));
457
464
  }
458
465
 
459
- /* A tag is flat at the start and points at the end. The point is cut from the box, so it has no
460
- outline to follow: the edge is the fill. The end padding grows by the point's depth so the
461
- label never runs into it. */
462
- [data-component~="ui-badge"][data-ui-badge-state~="shape=tag"][data-v-38a29166] {
466
+ /* The clipped point needs an inset surface over an outer border-colour shape: a native border
467
+ has no diagonal edge to follow. Keep this edge for every tag variant. */
468
+ [data-component~="ui-badge"][data-ui-badge-state~="shape=tag"][data-v-fe098822] {
463
469
  --_badge-point: var(--ui-badge-point, var(--ui-space-2));
464
470
 
471
+ position: relative;
472
+ isolation: isolate;
465
473
  border-color: transparent;
466
474
  border-radius: 0;
475
+ background: var(--ui-badge-border, var(--_badge-color-border, var(--_badge-border)));
467
476
  padding-inline-end: calc(var(--ui-badge-padding-inline, var(--ui-space-2)) + var(--_badge-point));
468
477
  clip-path: polygon(
469
478
  0 0,
@@ -473,25 +482,10 @@ svg[data-v-988c6eae] {
473
482
  0 100%
474
483
  );
475
484
  }
476
- [data-component~="ui-badge"][data-ui-badge-state~="shape=tag"][data-v-38a29166]:dir(rtl) {
477
- padding-inline-end: var(--ui-badge-padding-inline, var(--ui-space-2));
478
- padding-inline-start: calc(
479
- var(--ui-badge-padding-inline, var(--ui-space-2)) + var(--_badge-point)
480
- );
481
- clip-path: polygon(var(--_badge-point) 0, 100% 0, 100% 100%, var(--_badge-point) 100%, 0 50%);
482
- }
483
-
484
- /* The tag clips its point, including the native border. Draw the outer shape in the border
485
- colour and an inset inner shape in the surface colour to keep a visible diagonal edge. */
486
- [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-ui-badge-state~="shape=tag"][data-v-38a29166] {
487
- position: relative;
488
- isolation: isolate;
489
- background: var(--ui-badge-border, var(--_badge-color-border, var(--_badge-border)));
490
- }
491
- [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-ui-badge-state~="shape=tag"][data-v-38a29166]::before {
485
+ [data-component~="ui-badge"][data-ui-badge-state~="shape=tag"][data-v-fe098822]::before {
492
486
  content: "";
493
487
  position: absolute;
494
- inset: 1px;
488
+ inset: 0;
495
489
  z-index: -1;
496
490
  background: var(--_badge-outline-surface);
497
491
  clip-path: polygon(
@@ -503,22 +497,29 @@ svg[data-v-988c6eae] {
503
497
  );
504
498
  pointer-events: none;
505
499
  }
506
- [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-ui-badge-state~="shape=tag"][data-v-38a29166]:dir(rtl)::before {
500
+ [data-component~="ui-badge"][data-ui-badge-state~="shape=tag"][data-v-fe098822]:dir(rtl) {
501
+ padding-inline-end: var(--ui-badge-padding-inline, var(--ui-space-2));
502
+ padding-inline-start: calc(
503
+ var(--ui-badge-padding-inline, var(--ui-space-2)) + var(--_badge-point)
504
+ );
505
+ clip-path: polygon(var(--_badge-point) 0, 100% 0, 100% 100%, var(--_badge-point) 100%, 0 50%);
506
+ }
507
+ [data-component~="ui-badge"][data-ui-badge-state~="shape=tag"][data-v-fe098822]:dir(rtl)::before {
507
508
  clip-path: polygon(var(--_badge-point) 0, 100% 0, 100% 100%, var(--_badge-point) 100%, 0 50%);
508
509
  }
509
510
  @media (forced-colors: active) {
510
- [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-ui-badge-state~="shape=tag"][data-v-38a29166] {
511
+ [data-component~="ui-badge"][data-ui-badge-state~="shape=tag"][data-v-fe098822] {
511
512
  forced-color-adjust: none;
512
513
  background: CanvasText;
513
514
  color: CanvasText;
514
515
  }
515
- [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-ui-badge-state~="shape=tag"][data-v-38a29166]::before {
516
+ [data-component~="ui-badge"][data-ui-badge-state~="shape=tag"][data-v-fe098822]::before {
516
517
  background: Canvas;
517
518
  }
518
519
  }
519
520
 
520
521
  /* A component that sets its display still honours the hidden attribute on its root. */
521
- [data-component~="ui-badge"][hidden][data-v-38a29166] {
522
+ [data-component~="ui-badge"][hidden][data-v-fe098822] {
522
523
  display: none;
523
524
  }
524
525
 
@@ -589,9 +590,8 @@ ol[data-v-ee3145b6] {
589
590
  display: none;
590
591
  }
591
592
 
592
- /* Something is on its way. The ring chases in the current text colour; with reduced motion it holds still,
593
- and the label (or the text beside it) still says what is happening. */
594
- [data-component~="ui-spinner"][data-v-f5f5cd89] {
593
+ /* A rounded SVG arc grows and recedes over a quiet full-circle track. */
594
+ [data-component~="ui-spinner"][data-v-7dbd4f40] {
595
595
  display: inline-flex;
596
596
  flex: none;
597
597
  align-items: center;
@@ -599,37 +599,60 @@ ol[data-v-ee3145b6] {
599
599
  box-sizing: border-box;
600
600
  inline-size: 1em;
601
601
  block-size: 1em;
602
- border: 2px solid transparent;
603
- border-block-start-color: currentColor;
604
- border-inline-end-color: color-mix(in srgb, currentColor 52%, transparent);
605
- border-radius: 50%;
606
602
  color: currentColor;
607
603
  font-size: var(--ui-font-size-lg);
608
604
  line-height: 1;
609
- animation: ui-spinner-chase-f5f5cd89 1s linear infinite;
610
605
  }
611
- [data-component~="ui-spinner"][data-ui-spinner-state~="size=sm"][data-v-f5f5cd89] {
606
+ [data-component~="ui-spinner"][data-ui-spinner-state~="size=sm"][data-v-7dbd4f40] {
612
607
  font-size: var(--ui-font-size-md);
613
608
  }
614
- @keyframes ui-spinner-chase-f5f5cd89 {
615
- 0% {
616
- transform: rotate(0);
609
+ svg[data-v-7dbd4f40] {
610
+ display: block;
611
+ inline-size: 100%;
612
+ block-size: 100%;
613
+ animation: ui-spinner-rotate-7dbd4f40 2s linear infinite;
614
+ }
615
+ circle[data-v-7dbd4f40] {
616
+ stroke-width: 3;
617
+ stroke-linecap: round;
618
+ }
619
+ .track[data-v-7dbd4f40] {
620
+ stroke: color-mix(in srgb, currentColor 16%, transparent);
617
621
  }
618
- 70% {
619
- transform: rotate(160deg);
622
+ .arc[data-v-7dbd4f40] {
623
+ stroke: currentColor;
624
+ stroke-dasharray: 90, 150;
625
+ stroke-dashoffset: 0;
626
+ animation: ui-spinner-dash-7dbd4f40 1.5s ease-in-out infinite;
620
627
  }
628
+ @keyframes ui-spinner-rotate-7dbd4f40 {
621
629
  100% {
622
630
  transform: rotate(1turn);
623
631
  }
624
632
  }
633
+ @keyframes ui-spinner-dash-7dbd4f40 {
634
+ 0% {
635
+ stroke-dasharray: 1, 150;
636
+ stroke-dashoffset: 0;
637
+ }
638
+ 50% {
639
+ stroke-dasharray: 90, 150;
640
+ stroke-dashoffset: -35;
641
+ }
642
+ 100% {
643
+ stroke-dasharray: 90, 150;
644
+ stroke-dashoffset: -124;
645
+ }
646
+ }
625
647
  @media (prefers-reduced-motion: reduce) {
626
- [data-component~="ui-spinner"][data-v-f5f5cd89] {
648
+ svg[data-v-7dbd4f40],
649
+ .arc[data-v-7dbd4f40] {
627
650
  animation: none;
628
651
  }
629
652
  }
630
653
 
631
654
  /* A component that sets its display still honours the hidden attribute on its root. */
632
- [data-component~="ui-spinner"][hidden][data-v-f5f5cd89] {
655
+ [data-component~="ui-spinner"][hidden][data-v-7dbd4f40] {
633
656
  display: none;
634
657
  }
635
658
 
@@ -706,7 +729,7 @@ ol[data-v-ee3145b6] {
706
729
  syntax: "*";
707
730
  inherits: false;
708
731
  }
709
- [data-component~="ui-button"][data-v-a89a1895] {
732
+ [data-component~="ui-button"][data-v-720dbd9f] {
710
733
  --_hue: var(--ui-accent);
711
734
  --_hue-hover: var(--ui-accent-hover);
712
735
  --_hue-active: var(--ui-accent-active);
@@ -725,15 +748,15 @@ ol[data-v-ee3145b6] {
725
748
  vertical-align: middle;
726
749
  color: var(--_tone-text);
727
750
  }
728
- [data-component~="ui-button"][data-ui-button-state~="align=start"][data-v-a89a1895] {
751
+ [data-component~="ui-button"][data-ui-button-state~="align=start"][data-v-720dbd9f] {
729
752
  justify-content: flex-start;
730
753
  text-align: start;
731
754
  }
732
- [data-component~="ui-button"][data-ui-button-state~="stretch"][data-v-a89a1895] {
755
+ [data-component~="ui-button"][data-ui-button-state~="stretch"][data-v-720dbd9f] {
733
756
  display: flex;
734
757
  inline-size: 100%;
735
758
  }
736
- [data-component~="ui-button"][data-v-a89a1895] {
759
+ [data-component~="ui-button"][data-v-720dbd9f] {
737
760
  appearance: none;
738
761
  min-block-size: var(--ui-button-min-block-size, var(--ui-control-size-md));
739
762
  border-style: solid;
@@ -761,27 +784,27 @@ ol[data-v-ee3145b6] {
761
784
  }
762
785
 
763
786
  /* An anchor keeps the boxed button look even when an app styles ordinary links. */
764
- [data-component~="ui-button"][data-v-a89a1895]:is(a) {
787
+ [data-component~="ui-button"][data-v-720dbd9f]:is(a) {
765
788
  text-decoration: none;
766
789
  }
767
- .spinner-wrap[data-v-a89a1895] {
790
+ .spinner-wrap[data-v-720dbd9f] {
768
791
  display: inline-flex;
769
792
  flex: none;
770
793
  margin-inline-end: var(--ui-space-2);
771
794
  vertical-align: middle;
772
795
  }
773
796
  @supports (text-box-trim: trim-both) {
774
- [data-component~="ui-button"][data-v-a89a1895] {
797
+ [data-component~="ui-button"][data-v-720dbd9f] {
775
798
  text-box-trim: trim-both;
776
799
  text-box-edge: cap alphabetic;
777
800
  }
778
801
  }
779
- [data-component~="ui-button"][data-ui-button-state~="size=sm"][data-v-a89a1895] {
802
+ [data-component~="ui-button"][data-ui-button-state~="size=sm"][data-v-720dbd9f] {
780
803
  min-block-size: var(--ui-control-size-sm);
781
804
  padding: var(--ui-space-1) var(--ui-space-2);
782
805
  font-size: var(--ui-font-size-sm);
783
806
  }
784
- [data-component~="ui-button"][data-ui-button-state~="size=lg"][data-v-a89a1895] {
807
+ [data-component~="ui-button"][data-ui-button-state~="size=lg"][data-v-720dbd9f] {
785
808
  min-block-size: var(--ui-control-size-lg);
786
809
  padding: var(--ui-space-3) var(--ui-space-4);
787
810
  font-size: var(--ui-font-size-md);
@@ -789,29 +812,29 @@ ol[data-v-ee3145b6] {
789
812
 
790
813
  /* A link is never :enabled, so interactive states test "not unavailable" instead: for a button that
791
814
  is exactly :enabled, at the same specificity, and it also matches a link that can be followed. */
792
- [data-component~="ui-button"][data-v-a89a1895]:hover:not(:disabled, [aria-disabled="true"]) {
815
+ [data-component~="ui-button"][data-v-720dbd9f]:hover:not(:disabled, [aria-disabled="true"]) {
793
816
  border-color: var(--ui-button-hover-border, var(--_tone-hover));
794
817
  background-color: var(--ui-button-hover-surface, oklch(from var(--_tone) l c h / 12%));
795
818
  }
796
819
 
797
820
  /* Pressed reads as pressed in: the highlight goes, and the shadow moves inside. */
798
- [data-component~="ui-button"][data-v-a89a1895]:active:not(:disabled, [aria-disabled="true"]) {
821
+ [data-component~="ui-button"][data-v-720dbd9f]:active:not(:disabled, [aria-disabled="true"]) {
799
822
  background-color: var(--ui-button-active-surface, oklch(from var(--_tone) l c h / 18%));
800
823
  background-image: none;
801
824
  box-shadow: var(--ui-pressed);
802
825
  }
803
- [data-component~="ui-button"][data-ui-button-state~="variant=solid"][data-v-a89a1895],
804
- [data-component~="ui-button"][data-ui-button-state~="variant=danger"][data-v-a89a1895] {
826
+ [data-component~="ui-button"][data-ui-button-state~="variant=solid"][data-v-720dbd9f],
827
+ [data-component~="ui-button"][data-ui-button-state~="variant=danger"][data-v-720dbd9f] {
805
828
  border-color: var(--_tone);
806
829
  background-color: var(--_tone);
807
830
  color: var(--_on-tone);
808
831
  box-shadow: var(--ui-button-solid-shadow, var(--ui-raised));
809
832
  }
810
- :is([data-component~="ui-button"][data-ui-button-state~="variant=solid"][data-v-a89a1895], [data-component~="ui-button"][data-ui-button-state~="variant=danger"][data-v-a89a1895]):hover:not(:disabled, [aria-disabled="true"]) {
833
+ :is([data-component~="ui-button"][data-ui-button-state~="variant=solid"][data-v-720dbd9f], [data-component~="ui-button"][data-ui-button-state~="variant=danger"][data-v-720dbd9f]):hover:not(:disabled, [aria-disabled="true"]) {
811
834
  background-color: var(--_tone-hover);
812
835
  border-color: var(--_tone-hover);
813
836
  }
814
- :is([data-component~="ui-button"][data-ui-button-state~="variant=solid"][data-v-a89a1895], [data-component~="ui-button"][data-ui-button-state~="variant=danger"][data-v-a89a1895]):active:not(:disabled, [aria-disabled="true"]) {
837
+ :is([data-component~="ui-button"][data-ui-button-state~="variant=solid"][data-v-720dbd9f], [data-component~="ui-button"][data-ui-button-state~="variant=danger"][data-v-720dbd9f]):active:not(:disabled, [aria-disabled="true"]) {
815
838
  background-color: var(--_tone-active);
816
839
  border-color: var(--_tone-active);
817
840
  background-image: none;
@@ -820,43 +843,43 @@ ol[data-v-ee3145b6] {
820
843
 
821
844
  /* Tone is the colour, variant is the volume. Every pairing works: a danger outline is a
822
845
  destructive secondary action, not a special case. */
823
- [data-component~="ui-button"][data-ui-button-state~="tone=neutral"][data-v-a89a1895] {
846
+ [data-component~="ui-button"][data-ui-button-state~="tone=neutral"][data-v-720dbd9f] {
824
847
  --_hue: var(--ui-text);
825
848
  --_hue-hover: var(--ui-text);
826
849
  --_hue-active: var(--ui-text);
827
850
  --_hue-text: var(--ui-text);
828
851
  --_on-hue: var(--ui-surface);
829
852
  }
830
- [data-component~="ui-button"][data-ui-button-state~="tone=danger"][data-v-a89a1895],
831
- [data-component~="ui-button"][data-ui-button-state~="variant=danger"][data-v-a89a1895] {
853
+ [data-component~="ui-button"][data-ui-button-state~="tone=danger"][data-v-720dbd9f],
854
+ [data-component~="ui-button"][data-ui-button-state~="variant=danger"][data-v-720dbd9f] {
832
855
  --_hue: var(--ui-danger);
833
856
  --_hue-hover: var(--ui-danger-hover);
834
857
  --_hue-active: var(--ui-danger-hover);
835
858
  --_hue-text: var(--ui-danger-hover);
836
859
  --_on-hue: var(--ui-on-danger);
837
860
  }
838
- [data-component~="ui-button"][data-ui-button-state~="tone=success"][data-v-a89a1895] {
861
+ [data-component~="ui-button"][data-ui-button-state~="tone=success"][data-v-720dbd9f] {
839
862
  --_hue: var(--ui-success);
840
863
  --_hue-hover: color-mix(in srgb, var(--ui-success) 85%, #000);
841
864
  --_hue-active: color-mix(in srgb, var(--ui-success) 75%, #000);
842
865
  --_hue-text: color-mix(in srgb, var(--ui-success) 85%, #000);
843
866
  --_on-hue: var(--ui-surface);
844
867
  }
845
- [data-component~="ui-button"][data-ui-button-state~="tone=warning"][data-v-a89a1895] {
868
+ [data-component~="ui-button"][data-ui-button-state~="tone=warning"][data-v-720dbd9f] {
846
869
  --_hue: var(--ui-warning);
847
870
  --_hue-hover: color-mix(in srgb, var(--ui-warning) 85%, #000);
848
871
  --_hue-active: color-mix(in srgb, var(--ui-warning) 75%, #000);
849
872
  --_hue-text: color-mix(in srgb, var(--ui-warning) 85%, #000);
850
873
  --_on-hue: var(--ui-surface);
851
874
  }
852
- [data-component~="ui-button"][data-ui-button-state~="tone=info"][data-v-a89a1895] {
875
+ [data-component~="ui-button"][data-ui-button-state~="tone=info"][data-v-720dbd9f] {
853
876
  --_hue: var(--ui-info);
854
877
  --_hue-hover: color-mix(in srgb, var(--ui-info) 85%, #000);
855
878
  --_hue-active: color-mix(in srgb, var(--ui-info) 75%, #000);
856
879
  --_hue-text: color-mix(in srgb, var(--ui-info) 85%, #000);
857
880
  --_on-hue: var(--ui-surface);
858
881
  }
859
- [data-component~="ui-button"][data-ui-button-state~="variant=ghost"][data-v-a89a1895] {
882
+ [data-component~="ui-button"][data-ui-button-state~="variant=ghost"][data-v-720dbd9f] {
860
883
  border-color: transparent;
861
884
  background: transparent;
862
885
  box-shadow: none;
@@ -864,24 +887,24 @@ ol[data-v-ee3145b6] {
864
887
  }
865
888
 
866
889
  /* Tints derive from the text colour, not a surface token, so hover and press show on any background. */
867
- [data-component~="ui-button"][data-ui-button-state~="variant=ghost"][data-v-a89a1895]:hover:not(:disabled, [aria-disabled="true"]) {
890
+ [data-component~="ui-button"][data-ui-button-state~="variant=ghost"][data-v-720dbd9f]:hover:not(:disabled, [aria-disabled="true"]) {
868
891
  background-color: var(--ui-button-ghost-hover-surface, oklch(from var(--_tone) l c h / 10%));
869
892
  border-color: transparent;
870
893
  }
871
- [data-component~="ui-button"][data-ui-button-state~="variant=ghost"][data-v-a89a1895]:active:not(:disabled, [aria-disabled="true"]) {
894
+ [data-component~="ui-button"][data-ui-button-state~="variant=ghost"][data-v-720dbd9f]:is(:active, [aria-expanded="true"]):not(:disabled, [aria-disabled="true"]) {
872
895
  background-color: var(--ui-button-ghost-active-surface, oklch(from var(--_tone) l c h / 16%));
873
896
  border-color: transparent;
874
897
  box-shadow: var(--ui-pressed);
875
898
  }
876
899
 
877
900
  /* A soft halo that transitions in with the other box-shadow changes, layered on the raised shadow. */
878
- [data-component~="ui-button"][data-v-a89a1895]:focus-visible {
901
+ [data-component~="ui-button"][data-v-720dbd9f]:focus-visible {
879
902
  outline: none;
880
903
  box-shadow:
881
904
  var(--ui-button-shadow, var(--ui-raised)),
882
905
  var(--ui-focus-halo);
883
906
  }
884
- [data-component~="ui-button"][data-ui-button-state~="variant=solid"][data-v-a89a1895]:focus-visible {
907
+ [data-component~="ui-button"][data-ui-button-state~="variant=solid"][data-v-720dbd9f]:focus-visible {
885
908
  box-shadow:
886
909
  var(--ui-button-solid-shadow, var(--ui-raised)),
887
910
  var(--ui-focus-halo);
@@ -889,7 +912,7 @@ ol[data-v-ee3145b6] {
889
912
 
890
913
  /* A loading action stays visually active; only an explicitly disabled action takes the
891
914
  neutral disabled palette. Its flat surface and muted ink make the state unambiguous. */
892
- [data-component~="ui-button"][data-v-a89a1895]:is(:disabled, [aria-disabled="true"]:not([aria-busy="true"])) {
915
+ [data-component~="ui-button"][data-v-720dbd9f]:is(:disabled, [aria-disabled="true"]:not([aria-busy="true"])) {
893
916
  border-color: var(--ui-disabled-border);
894
917
  background-color: var(--ui-disabled-surface);
895
918
  color: var(--ui-disabled-text);
@@ -899,19 +922,19 @@ ol[data-v-ee3145b6] {
899
922
  background-image: none;
900
923
  box-shadow: none;
901
924
  }
902
- :is([data-component~="ui-button"][data-ui-button-state~="loading"][data-v-a89a1895], [data-component~="ui-button"][data-ui-button-state~="pending"][data-v-a89a1895]):focus-visible {
925
+ :is([data-component~="ui-button"][data-ui-button-state~="loading"][data-v-720dbd9f], [data-component~="ui-button"][data-ui-button-state~="pending"][data-v-720dbd9f]):focus-visible {
903
926
  box-shadow: var(--ui-focus-halo);
904
927
  }
905
928
 
906
929
  /* Ghost keeps no border, but gains the same neutral surface as other disabled buttons. */
907
- [data-component~="ui-button"][data-ui-button-state~="variant=ghost"][data-v-a89a1895]:is(:disabled, [aria-disabled="true"]:not([aria-busy="true"])) {
930
+ [data-component~="ui-button"][data-ui-button-state~="variant=ghost"][data-v-720dbd9f]:is(:disabled, [aria-disabled="true"]:not([aria-busy="true"])) {
908
931
  background-color: var(--ui-disabled-surface);
909
932
  border-color: transparent;
910
933
  }
911
934
 
912
935
  /* The size states outrank :host, so sm is named too, or a small button would stay small. */
913
936
  @media (pointer: coarse) {
914
- [data-component~="ui-button"][data-v-a89a1895], [data-component~="ui-button"][data-ui-button-state~="size=sm"][data-v-a89a1895] {
937
+ [data-component~="ui-button"][data-v-720dbd9f], [data-component~="ui-button"][data-ui-button-state~="size=sm"][data-v-720dbd9f] {
915
938
  min-block-size: var(--ui-control-min-block-size);
916
939
  }
917
940
  }
@@ -921,11 +944,11 @@ ol[data-v-ee3145b6] {
921
944
  a link-style one keeps its text size, so a standalone one ("See all" under a list) needs the
922
945
  area. Only the link needs it: a hit area on every button would reach over its neighbours. */
923
946
  html[data-ui-input-modality="touch"]
924
- [data-component~="ui-button"][data-ui-button-state~="variant=link"][data-v-a89a1895] {
947
+ [data-component~="ui-button"][data-ui-button-state~="variant=link"][data-v-720dbd9f] {
925
948
  position: relative;
926
949
  }
927
950
  html[data-ui-input-modality="touch"]
928
- [data-component~="ui-button"][data-ui-button-state~="variant=link"][data-v-a89a1895]::after {
951
+ [data-component~="ui-button"][data-ui-button-state~="variant=link"][data-v-720dbd9f]::after {
929
952
  position: absolute;
930
953
  inset: 50% auto auto 50%;
931
954
  inline-size: max(100%, var(--ui-control-min-block-size));
@@ -936,7 +959,7 @@ html[data-ui-input-modality="touch"]
936
959
 
937
960
  /* Link: an inline text action. No box, padding, or minimum height (inline targets are exempt under
938
961
  WCAG 2.5.8); the inherited font; an underline that strengthens on hover; a visible focus ring. */
939
- [data-component~="ui-button"][data-ui-button-state~="variant=link"][data-v-a89a1895] {
962
+ [data-component~="ui-button"][data-ui-button-state~="variant=link"][data-v-720dbd9f] {
940
963
  display: inline;
941
964
  min-block-size: 0;
942
965
  padding: 0;
@@ -954,21 +977,21 @@ html[data-ui-input-modality="touch"]
954
977
  color var(--ui-motion-fast) var(--ui-motion-ease),
955
978
  text-decoration-color var(--ui-motion-fast) var(--ui-motion-ease);
956
979
  }
957
- [data-component~="ui-button"][data-ui-button-state~="variant=link"][data-v-a89a1895]:hover:not(:disabled, [aria-disabled="true"]) {
980
+ [data-component~="ui-button"][data-ui-button-state~="variant=link"][data-v-720dbd9f]:hover:not(:disabled, [aria-disabled="true"]) {
958
981
  color: var(--ui-button-link-hover-text, var(--ui-text-primary));
959
982
  text-decoration-color: currentColor;
960
983
  background: none;
961
984
  transform: none;
962
985
  }
963
- [data-component~="ui-button"][data-ui-button-state~="variant=link"][data-v-a89a1895]:active:not(:disabled, [aria-disabled="true"]) {
986
+ [data-component~="ui-button"][data-ui-button-state~="variant=link"][data-v-720dbd9f]:active:not(:disabled, [aria-disabled="true"]) {
964
987
  background: none;
965
988
  transform: none;
966
989
  }
967
- [data-component~="ui-button"][data-ui-button-state~="variant=link"][data-v-a89a1895]:is(:disabled, [aria-disabled="true"]:not([aria-busy="true"])) {
990
+ [data-component~="ui-button"][data-ui-button-state~="variant=link"][data-v-720dbd9f]:is(:disabled, [aria-disabled="true"]:not([aria-busy="true"])) {
968
991
  background: none;
969
992
  border-color: transparent;
970
993
  }
971
- [data-component~="ui-button"][data-ui-button-state~="variant=link"][data-v-a89a1895]:focus-visible {
994
+ [data-component~="ui-button"][data-ui-button-state~="variant=link"][data-v-720dbd9f]:focus-visible {
972
995
  box-shadow: none;
973
996
  /* Fallback keeps the ring if the token is missing: an unresolved var() would void the outline. */
974
997
  outline: 2px solid var(--ui-focus-ring);
@@ -976,7 +999,7 @@ html[data-ui-input-modality="touch"]
976
999
  }
977
1000
 
978
1001
  /* A component that sets its display still honours the hidden attribute on its root. */
979
- [data-component~="ui-button"][hidden][data-v-a89a1895] {
1002
+ [data-component~="ui-button"][hidden][data-v-720dbd9f] {
980
1003
  display: none;
981
1004
  }
982
1005
 
@@ -1628,7 +1651,7 @@ input[data-v-9a218638]:focus-visible {
1628
1651
  syntax: "*";
1629
1652
  inherits: false;
1630
1653
  }
1631
- [data-component~="ui-combobox"][data-v-87a4808b] {
1654
+ [data-component~="ui-combobox"][data-v-f90db7fa] {
1632
1655
  /* Hooks do not inherit, so the parts below read them from the root. */
1633
1656
  --_ui-combobox-label-text: var(--ui-combobox-label-text);
1634
1657
  --_ui-combobox-label-font-size: var(--ui-combobox-label-font-size);
@@ -1653,20 +1676,20 @@ input[data-v-9a218638]:focus-visible {
1653
1676
  color: var(--ui-text-primary);
1654
1677
  font: inherit;
1655
1678
  }
1656
- label[data-v-87a4808b] {
1679
+ label[data-v-f90db7fa] {
1657
1680
  color: var(--_ui-combobox-label-text, var(--ui-text-primary));
1658
1681
  font-size: var(--_ui-combobox-label-font-size, var(--ui-font-size-sm));
1659
1682
  font-weight: 500;
1660
1683
  }
1661
1684
  /* The field and anything that annotates it sit on one row; the help button is beside the box,
1662
1685
  not inside it, because a control's box holds its value. */
1663
- .control[data-v-87a4808b] {
1686
+ .control[data-v-f90db7fa] {
1664
1687
  display: flex;
1665
1688
  align-items: center;
1666
1689
  gap: var(--ui-space-2);
1667
1690
  min-inline-size: 0;
1668
1691
  }
1669
- .field[data-v-87a4808b] {
1692
+ .field[data-v-f90db7fa] {
1670
1693
  flex: 1 1 auto;
1671
1694
  display: flex;
1672
1695
  min-inline-size: 0;
@@ -1678,19 +1701,19 @@ label[data-v-87a4808b] {
1678
1701
  border-color var(--ui-motion-fast) var(--ui-motion-ease),
1679
1702
  box-shadow var(--ui-motion-fast) var(--ui-motion-ease);
1680
1703
  }
1681
- .field[data-v-87a4808b]:focus-within {
1704
+ .field[data-v-f90db7fa]:focus-within {
1682
1705
  border-color: var(--ui-control-focus, var(--ui-accent-solid));
1683
1706
  box-shadow:
1684
1707
  var(--ui-control-inset),
1685
1708
  var(--ui-control-focus-halo-shadow);
1686
1709
  }
1687
- .entry[data-v-87a4808b] {
1710
+ .entry[data-v-f90db7fa] {
1688
1711
  display: flex;
1689
1712
  flex: 1 1 auto;
1690
1713
  min-inline-size: 0;
1691
1714
  }
1692
1715
  /* A ghost icon button: the affordance is the mark, not a box around it. */
1693
- .help[data-v-87a4808b] {
1716
+ .help[data-v-f90db7fa] {
1694
1717
  flex: none;
1695
1718
  display: inline-flex;
1696
1719
  align-items: center;
@@ -1707,28 +1730,28 @@ label[data-v-87a4808b] {
1707
1730
  background-color var(--ui-motion-fast) var(--ui-motion-ease),
1708
1731
  color var(--ui-motion-fast) var(--ui-motion-ease);
1709
1732
  }
1710
- .help[data-v-87a4808b]:hover:enabled,
1711
- .help[aria-expanded="true"][data-v-87a4808b] {
1733
+ .help[data-v-f90db7fa]:hover:enabled,
1734
+ .help[aria-expanded="true"][data-v-f90db7fa] {
1712
1735
  background: color-mix(in srgb, currentColor 8%, transparent);
1713
1736
  color: var(--ui-text-primary);
1714
1737
  }
1715
- .help[data-v-87a4808b]:focus-visible {
1738
+ .help[data-v-f90db7fa]:focus-visible {
1716
1739
  outline: none;
1717
1740
  box-shadow: var(--ui-focus-halo);
1718
1741
  }
1719
- .help[data-v-87a4808b]:disabled {
1742
+ .help[data-v-f90db7fa]:disabled {
1720
1743
  color: var(--ui-disabled-text);
1721
1744
  cursor: not-allowed;
1722
1745
  }
1723
- .help-icon[data-v-87a4808b] {
1746
+ .help-icon[data-v-f90db7fa] {
1724
1747
  inline-size: var(--ui-icon-size-sm);
1725
1748
  block-size: var(--ui-icon-size-sm);
1726
1749
  }
1727
- input[data-v-87a4808b]::selection {
1750
+ input[data-v-f90db7fa]::selection {
1728
1751
  background: color-mix(in srgb, var(--ui-accent-solid) 20%, transparent);
1729
1752
  color: inherit;
1730
1753
  }
1731
- input[data-v-87a4808b] {
1754
+ input[data-v-f90db7fa] {
1732
1755
  appearance: none;
1733
1756
  width: 100%;
1734
1757
  min-inline-size: 0;
@@ -1744,20 +1767,20 @@ input[data-v-87a4808b] {
1744
1767
  margin: 0;
1745
1768
  outline: none;
1746
1769
  }
1747
- [data-component~="ui-combobox"][data-ui-combobox-state~="size=sm"][data-v-87a4808b] {
1770
+ [data-component~="ui-combobox"][data-ui-combobox-state~="size=sm"][data-v-f90db7fa] {
1748
1771
  --_row: var(--ui-control-size-sm);
1749
1772
  }
1750
- [data-component~="ui-combobox"][data-ui-combobox-state~="size=sm"] input[data-v-87a4808b] {
1773
+ [data-component~="ui-combobox"][data-ui-combobox-state~="size=sm"] input[data-v-f90db7fa] {
1751
1774
  min-block-size: calc(var(--_row) - 2px);
1752
1775
  padding: var(--ui-space-1) var(--ui-space-2);
1753
1776
  font-size: var(--ui-font-size-sm);
1754
1777
  }
1755
- [data-component~="ui-combobox"][data-ui-combobox-state~="size=lg"] input[data-v-87a4808b] {
1778
+ [data-component~="ui-combobox"][data-ui-combobox-state~="size=lg"] input[data-v-f90db7fa] {
1756
1779
  min-block-size: calc(var(--ui-control-size-lg) - 2px);
1757
1780
  padding: var(--ui-space-3) var(--ui-space-4);
1758
1781
  font-size: var(--ui-font-size-md);
1759
1782
  }
1760
- button[data-v-87a4808b] {
1783
+ button[data-v-f90db7fa] {
1761
1784
  appearance: none;
1762
1785
  display: inline-grid;
1763
1786
  place-items: center;
@@ -1772,35 +1795,35 @@ button[data-v-87a4808b] {
1772
1795
  padding: 0 var(--ui-space-1);
1773
1796
  cursor: pointer;
1774
1797
  }
1775
- .affordance-icon[data-v-87a4808b] {
1798
+ .affordance-icon[data-v-f90db7fa] {
1776
1799
  display: block;
1777
1800
  inline-size: var(--ui-icon-size-sm);
1778
1801
  block-size: var(--ui-icon-size-sm);
1779
1802
  }
1780
- button[data-v-87a4808b]:hover:enabled {
1803
+ button[data-v-f90db7fa]:hover:enabled {
1781
1804
  background: var(--ui-surface-muted);
1782
1805
  color: var(--ui-text-primary);
1783
1806
  }
1784
- button[data-v-87a4808b]:focus-visible {
1807
+ button[data-v-f90db7fa]:focus-visible {
1785
1808
  outline: none;
1786
1809
  background: var(--ui-surface-muted);
1787
1810
  box-shadow: inset 0 0 0 2px color-mix(in srgb, var(--ui-focus-ring) 45%, transparent);
1788
1811
  }
1789
- input[data-v-87a4808b]:disabled, button[data-v-87a4808b]:disabled {
1812
+ input[data-v-f90db7fa]:disabled, button[data-v-f90db7fa]:disabled {
1790
1813
  color: var(--ui-disabled-text);
1791
1814
  cursor: not-allowed;
1792
1815
  }
1793
- .field[data-v-87a4808b]:has(input:disabled) {
1816
+ .field[data-v-f90db7fa]:has(input:disabled) {
1794
1817
  background: var(--ui-control-surface-disabled, var(--ui-surface-muted));
1795
1818
  }
1796
- [data-component~="ui-combobox"][data-ui-combobox-state~="validationStatus=error"] .field[data-v-87a4808b],
1797
- [data-component~="ui-combobox"][data-ui-combobox-state~="invalid"] .field[data-v-87a4808b] {
1819
+ [data-component~="ui-combobox"][data-ui-combobox-state~="validationStatus=error"] .field[data-v-f90db7fa],
1820
+ [data-component~="ui-combobox"][data-ui-combobox-state~="invalid"] .field[data-v-f90db7fa] {
1798
1821
  border-color: var(
1799
1822
  --_ui-combobox-invalid-border,
1800
1823
  var(--ui-field-danger, var(--ui-danger-solid, var(--ui-accent-active)))
1801
1824
  );
1802
1825
  }
1803
- .popup[data-v-87a4808b] {
1826
+ .popup[data-v-f90db7fa] {
1804
1827
  box-sizing: border-box;
1805
1828
  min-inline-size: 12rem;
1806
1829
  max-inline-size: calc(100vw - 1rem);
@@ -1821,61 +1844,46 @@ input[data-v-87a4808b]:disabled, button[data-v-87a4808b]:disabled {
1821
1844
  var(--ui-overlay-shadow, var(--ui-elevation-overlay, var(--ui-shadow-lg)))
1822
1845
  );
1823
1846
  }
1824
- [hidden][data-v-87a4808b] {
1847
+ [hidden][data-v-f90db7fa] {
1825
1848
  display: none;
1826
1849
  }
1827
- .option[data-v-87a4808b] {
1828
- padding: var(--ui-space-2) var(--ui-space-3);
1829
- border-radius: var(--ui-radius-sm);
1830
- cursor: pointer;
1831
- overflow-wrap: anywhere;
1832
- }
1833
- .option[data-v-87a4808b]:hover, .option.active[data-v-87a4808b] {
1834
- background: var(--ui-surface-muted);
1835
- outline: 1px solid var(--ui-focus-ring);
1836
- outline-offset: -1px;
1837
- }
1838
- .option[aria-disabled="true"][data-v-87a4808b] {
1839
- color: var(--ui-disabled-text);
1840
- cursor: not-allowed;
1841
- }
1842
- .option[aria-disabled="true"] .primary[data-v-87a4808b],
1843
- .option[aria-disabled="true"] .secondary[data-v-87a4808b] {
1850
+ .option[aria-disabled="true"] .primary[data-v-f90db7fa],
1851
+ .option[aria-disabled="true"] .secondary[data-v-f90db7fa] {
1844
1852
  color: var(--ui-disabled-text);
1845
1853
  }
1846
- .primary[data-v-87a4808b] {
1854
+ .primary[data-v-f90db7fa] {
1847
1855
  display: block;
1848
1856
  color: var(--_ui-combobox-option-text, var(--ui-text-primary));
1849
1857
  font-weight: 500;
1850
1858
  }
1851
1859
  /* A row with a tag or a description: the label and its tag on one line, the description under them. */
1852
- .detail[data-v-87a4808b] {
1860
+ .detail[data-v-f90db7fa] {
1853
1861
  display: grid;
1854
1862
  gap: var(--ui-space-0-5);
1855
1863
  min-inline-size: 0;
1856
1864
  }
1857
- .line[data-v-87a4808b] {
1865
+ .line[data-v-f90db7fa] {
1858
1866
  display: flex;
1859
1867
  flex-wrap: wrap;
1860
1868
  align-items: center;
1861
1869
  gap: var(--ui-space-2);
1862
1870
  }
1863
- .description[data-v-87a4808b] {
1871
+ .description[data-v-f90db7fa] {
1864
1872
  color: var(--ui-text-muted);
1865
1873
  font-size: var(--ui-font-size-sm);
1866
1874
  line-height: var(--ui-line-height-md);
1867
1875
  }
1868
- .message[data-v-87a4808b], .group[data-v-87a4808b] {
1876
+ .message[data-v-f90db7fa], .group[data-v-f90db7fa] {
1869
1877
  color: var(--_ui-combobox-message-text, var(--ui-text-secondary));
1870
1878
  font-weight: 400;
1871
1879
  font-size: var(--ui-font-size-sm);
1872
1880
  line-height: var(--ui-line-height-md);
1873
1881
  overflow-wrap: anywhere;
1874
1882
  }
1875
- .group[data-v-87a4808b], .popup .message[data-v-87a4808b] {
1883
+ .group[data-v-f90db7fa], .popup .message[data-v-f90db7fa] {
1876
1884
  padding: var(--ui-space-2) var(--ui-space-3);
1877
1885
  }
1878
- .sr-only[data-v-87a4808b] {
1886
+ .sr-only[data-v-f90db7fa] {
1879
1887
  position: absolute;
1880
1888
  inline-size: 1px;
1881
1889
  block-size: 1px;
@@ -1884,77 +1892,45 @@ input[data-v-87a4808b]:disabled, button[data-v-87a4808b]:disabled {
1884
1892
  white-space: nowrap;
1885
1893
  }
1886
1894
  @media (pointer: coarse) {
1887
- button[data-v-87a4808b] {
1895
+ button[data-v-f90db7fa] {
1888
1896
  min-inline-size: 2.75rem;
1889
1897
  min-block-size: 2.75rem;
1890
1898
  }
1891
1899
  /* Under touch a small field is still a touch-sized target, as a small button is, and keeps
1892
1900
  body-size text: below 16px, iOS zooms the page into the focused field. */
1893
- [data-component~="ui-combobox"][data-ui-combobox-state~="size=sm"][data-v-87a4808b] {
1901
+ [data-component~="ui-combobox"][data-ui-combobox-state~="size=sm"][data-v-f90db7fa] {
1894
1902
  --_row: var(--ui-control-min-block-size);
1895
1903
  }
1896
- [data-component~="ui-combobox"][data-ui-combobox-state~="size=sm"] input[data-v-87a4808b] {
1904
+ [data-component~="ui-combobox"][data-ui-combobox-state~="size=sm"] input[data-v-f90db7fa] {
1897
1905
  font-size: inherit;
1898
1906
  }
1899
1907
  }
1900
1908
  @media (forced-colors: active) {
1901
- .field[data-v-87a4808b], .popup[data-v-87a4808b] {
1909
+ .field[data-v-f90db7fa], .popup[data-v-f90db7fa] {
1902
1910
  border-color: CanvasText;
1903
1911
  }
1904
- .option.active[data-v-87a4808b] {
1912
+ .option.active[data-v-f90db7fa] {
1905
1913
  outline-color: Highlight;
1906
1914
  }
1907
1915
  }
1908
1916
 
1909
- /* Multiple mode: every option carries a checkbox, so a list that takes several answers says so
1910
- before anything is picked. aria-selected is the state; this draws it.
1911
- Longhands, not shorthands: lowering drops a shorthand that omits a component. */
1912
- [data-component~="ui-combobox"][data-ui-combobox-state~="multiple"] .option[data-v-87a4808b] {
1913
- display: flex;
1914
- gap: var(--ui-space-2);
1915
- align-items: center;
1916
- }
1917
- [data-component~="ui-combobox"][data-ui-combobox-state~="multiple"] .option[data-v-87a4808b]::before {
1918
- content: "";
1919
- flex: none;
1920
- inline-size: 1.125rem;
1921
- block-size: 1.125rem;
1922
- border-style: solid;
1923
- border-width: 1px;
1924
- border-color: var(--ui-control-border-hover, var(--ui-border-strong));
1925
- border-radius: var(--ui-radius-sm);
1926
- background-color: var(--ui-control-surface, var(--ui-surface-default));
1927
- background-repeat: no-repeat;
1928
- background-position: center;
1929
- background-size: 0.7rem;
1930
- }
1931
- [data-component~="ui-combobox"][data-ui-combobox-state~="multiple"]
1932
- .option[aria-selected="true"][data-v-87a4808b]::before {
1933
- border-color: var(--ui-accent-solid);
1934
- background-color: var(--ui-accent-solid);
1935
- background-image: var(
1936
- --_ui-combobox-option-check,
1937
- url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23ffffff' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m5 12 5 5 9-9'/%3E%3C/svg%3E")
1938
- );
1939
- }
1940
-
1941
1917
  /* Multiple mode keeps one control height. Chips and the input scroll within the entry,
1942
1918
  while the clear and disclosure controls remain fixed at the end of the field. */
1943
- [data-component~="ui-combobox"][data-ui-combobox-state~="multiple"] .field[data-v-87a4808b] {
1919
+ [data-component~="ui-combobox"][data-ui-combobox-state~="multiple"] .field[data-v-f90db7fa] {
1944
1920
  align-items: center;
1945
1921
  min-block-size: var(--_ui-combobox-item-min-block-size, 2.5rem);
1946
1922
  padding: var(--ui-space-1);
1947
1923
  }
1948
- [data-component~="ui-combobox"][data-ui-combobox-state~="multiple"] .entry[data-v-87a4808b] {
1924
+ [data-component~="ui-combobox"][data-ui-combobox-state~="multiple"] .entry[data-v-f90db7fa] {
1949
1925
  align-items: center;
1950
1926
  gap: var(--ui-space-1);
1951
1927
  overflow-x: auto;
1952
1928
  scrollbar-width: none;
1953
1929
  }
1954
- [data-component~="ui-combobox"][data-ui-combobox-state~="multiple"] .entry[data-v-87a4808b]::-webkit-scrollbar {
1930
+ [data-component~="ui-combobox"][data-ui-combobox-state~="multiple"] .entry[data-v-f90db7fa]::-webkit-scrollbar {
1955
1931
  display: none;
1956
1932
  }
1957
- [data-component~="ui-combobox"][data-ui-combobox-state~="multiple"] input[data-v-87a4808b] {
1933
+ [data-component~="ui-combobox"][data-ui-combobox-state~="multiple"] input[data-v-f90db7fa] {
1958
1934
  flex: 1 0 var(--_ui-combobox-item-input-min-inline-size, 5rem);
1959
1935
  width: auto;
1960
1936
  min-block-size: 1.75rem;
@@ -1962,25 +1938,25 @@ button[data-v-87a4808b] {
1962
1938
  }
1963
1939
  /* Size variants keep their control height as selections are added. */
1964
1940
  [data-component~="ui-combobox"][data-ui-combobox-state~="multiple"][data-component~="ui-combobox"][data-ui-combobox-state~="size=sm"]
1965
- .field[data-v-87a4808b] {
1941
+ .field[data-v-f90db7fa] {
1966
1942
  min-block-size: 0;
1967
1943
  padding: var(--ui-space-0-5);
1968
1944
  }
1969
1945
  [data-component~="ui-combobox"][data-ui-combobox-state~="multiple"][data-component~="ui-combobox"][data-ui-combobox-state~="size=sm"]
1970
- input[data-v-87a4808b] {
1946
+ input[data-v-f90db7fa] {
1971
1947
  min-block-size: calc(var(--_row) - 2px - 2 * var(--ui-space-0-5));
1972
1948
  padding: 0 var(--ui-space-1);
1973
1949
  }
1974
1950
  /* A large multiple field starts at the large control height, as sm starts at the small one. */
1975
1951
  [data-component~="ui-combobox"][data-ui-combobox-state~="multiple"][data-component~="ui-combobox"][data-ui-combobox-state~="size=lg"]
1976
- .field[data-v-87a4808b] {
1952
+ .field[data-v-f90db7fa] {
1977
1953
  min-block-size: 0;
1978
1954
  }
1979
1955
  [data-component~="ui-combobox"][data-ui-combobox-state~="multiple"][data-component~="ui-combobox"][data-ui-combobox-state~="size=lg"]
1980
- input[data-v-87a4808b] {
1956
+ input[data-v-f90db7fa] {
1981
1957
  min-block-size: calc(var(--ui-control-size-lg) - 2px - 2 * var(--ui-space-1));
1982
1958
  }
1983
- .item[data-v-87a4808b] {
1959
+ .item[data-v-f90db7fa] {
1984
1960
  appearance: none;
1985
1961
  display: inline-flex;
1986
1962
  flex: none;
@@ -1995,16 +1971,16 @@ button[data-v-87a4808b] {
1995
1971
  font: inherit;
1996
1972
  cursor: default;
1997
1973
  }
1998
- .item[data-v-87a4808b]:focus-visible {
1974
+ .item[data-v-f90db7fa]:focus-visible {
1999
1975
  outline: 2px solid var(--ui-focus-ring);
2000
1976
  outline-offset: 1px;
2001
1977
  }
2002
- .item[data-v-87a4808b]:disabled {
1978
+ .item[data-v-f90db7fa]:disabled {
2003
1979
  color: var(--ui-disabled-text);
2004
1980
  }
2005
1981
 
2006
1982
  /* A component that sets its display still honours the hidden attribute on its root. */
2007
- [data-component~="ui-combobox"][hidden][data-v-87a4808b] {
1983
+ [data-component~="ui-combobox"][hidden][data-v-f90db7fa] {
2008
1984
  display: none;
2009
1985
  }
2010
1986
 
@@ -4171,6 +4147,10 @@ svg[data-v-610f67a7-s] {
4171
4147
  syntax: "*";
4172
4148
  inherits: false;
4173
4149
  }
4150
+ @property --ui-icon-button-active-surface {
4151
+ syntax: "*";
4152
+ inherits: false;
4153
+ }
4174
4154
  @property --ui-icon-button-border {
4175
4155
  syntax: "*";
4176
4156
  inherits: false;
@@ -4239,7 +4219,7 @@ svg[data-v-610f67a7-s] {
4239
4219
  syntax: "*";
4240
4220
  inherits: false;
4241
4221
  }
4242
- [data-component~="ui-icon-button"][data-v-ae1ec9d2] {
4222
+ [data-component~="ui-icon-button"][data-v-9828be81] {
4243
4223
  /* Hooks do not inherit, so the parts below read them from the root. */
4244
4224
  --_ui-icon-button-icon-size: var(--ui-icon-button-icon-size);
4245
4225
  --_ui-icon-button-icon-stroke-width: var(--ui-icon-button-icon-stroke-width);
@@ -4247,10 +4227,10 @@ svg[data-v-610f67a7-s] {
4247
4227
  display: inline-flex;
4248
4228
  color: var(--ui-text-secondary);
4249
4229
  }
4250
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"][data-v-ae1ec9d2] {
4230
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"][data-v-9828be81] {
4251
4231
  position: relative;
4252
4232
  }
4253
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"][data-v-ae1ec9d2]::before {
4233
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"][data-v-9828be81]::before {
4254
4234
  content: "";
4255
4235
  position: absolute;
4256
4236
  inset: 50% auto auto 50%;
@@ -4264,13 +4244,13 @@ svg[data-v-610f67a7-s] {
4264
4244
  transition: opacity var(--ui-affordance-motion, var(--ui-motion-fast)) var(--ui-motion-ease);
4265
4245
  pointer-events: none;
4266
4246
  }
4267
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"][data-v-ae1ec9d2]:disabled::before {
4247
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"][data-v-9828be81]:disabled::before {
4268
4248
  opacity: 0;
4269
4249
  }
4270
4250
 
4271
4251
  /* At rest an anticipatory button shows only its guide dot. The icon grows into place when
4272
4252
  proximity, hover, or focus reveals it; the button's hit area and guide remain stable. */
4273
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"] .content[data-v-ae1ec9d2] {
4253
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"] .content[data-v-9828be81] {
4274
4254
  opacity: 1;
4275
4255
  transform: scale(1);
4276
4256
  transition:
@@ -4278,22 +4258,22 @@ svg[data-v-610f67a7-s] {
4278
4258
  transform calc(var(--ui-motion-fast) * 2) cubic-bezier(0.2, 1.4, 0.35, 1);
4279
4259
  }
4280
4260
  @media (hover: hover) and (pointer: fine) {
4281
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"][data-v-ae1ec9d2]:not([data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=solid"], [data-component~="ui-icon-button"][data-ui-icon-button-state~="loading"], [data-component~="ui-icon-button"][data-ui-icon-button-state~="pending"], :disabled, [data-ui-proximity="near"], :hover, :focus-visible) {
4261
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"][data-v-9828be81]:not([data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=solid"], [data-component~="ui-icon-button"][data-ui-icon-button-state~="loading"], [data-component~="ui-icon-button"][data-ui-icon-button-state~="pending"], :disabled, [data-ui-proximity="near"], :hover, :focus-visible) {
4282
4262
  border-color: transparent;
4283
4263
  background-color: transparent;
4284
4264
  box-shadow: none;
4285
4265
  }
4286
4266
  [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"]:not([data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=solid"], [data-component~="ui-icon-button"][data-ui-icon-button-state~="loading"], [data-component~="ui-icon-button"][data-ui-icon-button-state~="pending"], :disabled, [data-ui-proximity="near"], :hover, :focus-visible)
4287
- .content[data-v-ae1ec9d2] {
4267
+ .content[data-v-9828be81] {
4288
4268
  opacity: 0;
4289
4269
  transform: scale(0.65);
4290
4270
  transition-duration: var(--ui-motion-fast);
4291
4271
  }
4292
4272
  }
4293
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"][data-v-ae1ec9d2]:is([data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=solid"], [data-ui-proximity="near"], :hover, :focus-visible)::before {
4273
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"][data-v-9828be81]:is([data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=solid"], [data-ui-proximity="near"], :hover, :focus-visible)::before {
4294
4274
  opacity: 0;
4295
4275
  }
4296
- [data-component~="ui-icon-button"][data-v-ae1ec9d2] {
4276
+ [data-component~="ui-icon-button"][data-v-9828be81] {
4297
4277
  /* The size prop resolves here; --ui-icon-button-size overrides it on an element. */
4298
4278
  --_size: 2rem;
4299
4279
  appearance: none;
@@ -4319,7 +4299,7 @@ svg[data-v-610f67a7-s] {
4319
4299
  transform var(--ui-motion-fast) var(--ui-motion-ease);
4320
4300
  }
4321
4301
  @media (hover: none), (pointer: coarse) {
4322
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"][data-v-ae1ec9d2]::before {
4302
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"][data-v-9828be81]::before {
4323
4303
  opacity: 0;
4324
4304
  }
4325
4305
  }
@@ -4327,10 +4307,10 @@ svg[data-v-610f67a7-s] {
4327
4307
  /* A touch target without a bigger button: an invisible hit area, at least the control
4328
4308
  minimum, centred on the button (::before is the anticipatory guide). */
4329
4309
  @media (pointer: coarse) {
4330
- [data-component~="ui-icon-button"][data-v-ae1ec9d2] {
4310
+ [data-component~="ui-icon-button"][data-v-9828be81] {
4331
4311
  position: relative;
4332
4312
  }
4333
- [data-component~="ui-icon-button"][data-v-ae1ec9d2]::after {
4313
+ [data-component~="ui-icon-button"][data-v-9828be81]::after {
4334
4314
  content: "";
4335
4315
  position: absolute;
4336
4316
  inset: 50% auto auto 50%;
@@ -4339,10 +4319,10 @@ svg[data-v-610f67a7-s] {
4339
4319
  transform: translate(-50%, -50%);
4340
4320
  }
4341
4321
  }
4342
- html[data-ui-input-modality="touch"] [data-component~="ui-icon-button"][data-v-ae1ec9d2] {
4322
+ html[data-ui-input-modality="touch"] [data-component~="ui-icon-button"][data-v-9828be81] {
4343
4323
  position: relative;
4344
4324
  }
4345
- html[data-ui-input-modality="touch"] [data-component~="ui-icon-button"][data-v-ae1ec9d2]::after {
4325
+ html[data-ui-input-modality="touch"] [data-component~="ui-icon-button"][data-v-9828be81]::after {
4346
4326
  content: "";
4347
4327
  position: absolute;
4348
4328
  inset: 50% auto auto 50%;
@@ -4350,31 +4330,31 @@ html[data-ui-input-modality="touch"] [data-component~="ui-icon-button"][data-v-a
4350
4330
  block-size: max(100%, var(--ui-control-min-block-size));
4351
4331
  transform: translate(-50%, -50%);
4352
4332
  }
4353
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="size=sm"][data-v-ae1ec9d2] {
4333
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="size=sm"][data-v-9828be81] {
4354
4334
  --_size: 1.75rem;
4355
4335
  inline-size: var(--ui-icon-button-size, var(--_size));
4356
4336
  block-size: var(--ui-icon-button-size, var(--_size));
4357
4337
  min-inline-size: var(--ui-icon-button-size, var(--_size));
4358
4338
  min-block-size: var(--ui-icon-button-size, var(--_size));
4359
4339
  }
4360
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="size=lg"][data-v-ae1ec9d2] {
4340
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="size=lg"][data-v-9828be81] {
4361
4341
  --_size: 2.5rem;
4362
4342
  inline-size: var(--ui-icon-button-size, var(--_size));
4363
4343
  block-size: var(--ui-icon-button-size, var(--_size));
4364
4344
  min-inline-size: var(--ui-icon-button-size, var(--_size));
4365
4345
  min-block-size: var(--ui-icon-button-size, var(--_size));
4366
4346
  }
4367
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="round"][data-v-ae1ec9d2] {
4347
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="round"][data-v-9828be81] {
4368
4348
  border-radius: var(--ui-radius-round);
4369
4349
  }
4370
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=outline"][data-v-ae1ec9d2] {
4350
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=outline"][data-v-9828be81] {
4371
4351
  border-color: var(--ui-icon-button-border, var(--ui-control-border, var(--ui-border-strong)));
4372
4352
  background-color: var(--ui-icon-button-outline-surface, var(--ui-surface-default));
4373
4353
  background-image: var(--ui-raised-highlight);
4374
4354
  color: var(--ui-icon-button-outline-text, var(--ui-text-primary));
4375
4355
  box-shadow: var(--ui-raised);
4376
4356
  }
4377
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=solid"][data-v-ae1ec9d2] {
4357
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=solid"][data-v-9828be81] {
4378
4358
  background-color: var(--ui-icon-button-solid-surface, var(--ui-accent-solid));
4379
4359
  background-image: var(--ui-raised-highlight);
4380
4360
  color: var(--ui-icon-button-solid-text, var(--ui-text-on-accent));
@@ -4383,7 +4363,7 @@ html[data-ui-input-modality="touch"] [data-component~="ui-icon-button"][data-v-a
4383
4363
  0 1px 2px color-mix(in srgb, var(--ui-accent-solid) 18%, transparent)
4384
4364
  );
4385
4365
  }
4386
- [data-component~="ui-icon-button"][data-v-ae1ec9d2]:hover:enabled:not([aria-disabled="true"]) {
4366
+ [data-component~="ui-icon-button"][data-v-9828be81]:hover:enabled:not([aria-disabled="true"]) {
4387
4367
  /* Derived from the text colour so the ghost hover shows on any background. */
4388
4368
  background-color: var(
4389
4369
  --ui-icon-button-hover-surface,
@@ -4391,42 +4371,50 @@ html[data-ui-input-modality="touch"] [data-component~="ui-icon-button"][data-v-a
4391
4371
  );
4392
4372
  color: var(--ui-icon-button-hover-text, var(--ui-text-primary));
4393
4373
  }
4394
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=outline"][data-v-ae1ec9d2]:hover:enabled:not([aria-disabled="true"]) {
4374
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=outline"][data-v-9828be81]:hover:enabled:not([aria-disabled="true"]) {
4395
4375
  border-color: var(
4396
4376
  --ui-icon-button-hover-border,
4397
4377
  var(--ui-control-border-hover, var(--ui-control-border))
4398
4378
  );
4399
4379
  }
4400
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=solid"][data-v-ae1ec9d2]:hover:enabled:not([aria-disabled="true"]) {
4380
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=solid"][data-v-9828be81]:hover:enabled:not([aria-disabled="true"]) {
4401
4381
  background-color: var(--ui-icon-button-solid-hover-surface, var(--ui-accent-hover));
4402
4382
  }
4403
- [data-component~="ui-icon-button"][data-v-ae1ec9d2]:active:enabled:not([aria-disabled="true"]) {
4383
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=ghost"][aria-expanded="true"][data-v-9828be81]:enabled:not([aria-disabled="true"]) {
4384
+ background-color: var(
4385
+ --ui-icon-button-active-surface,
4386
+ color-mix(in srgb, currentColor 16%, transparent)
4387
+ );
4388
+ color: var(--ui-icon-button-hover-text, var(--ui-text-primary));
4389
+ box-shadow: var(--ui-pressed);
4390
+ }
4391
+ [data-component~="ui-icon-button"][data-v-9828be81]:active:enabled:not([aria-disabled="true"]) {
4404
4392
  transform: scale(var(--ui-icon-button-active-scale, 0.96));
4405
4393
  }
4406
- :is([data-component~="ui-icon-button"][data-ui-icon-button-state~="loading"][data-v-ae1ec9d2], [data-component~="ui-icon-button"][data-ui-icon-button-state~="pending"][data-v-ae1ec9d2]) {
4394
+ :is([data-component~="ui-icon-button"][data-ui-icon-button-state~="loading"][data-v-9828be81], [data-component~="ui-icon-button"][data-ui-icon-button-state~="pending"][data-v-9828be81]) {
4407
4395
  cursor: progress;
4408
4396
  }
4409
- .content[data-v-ae1ec9d2] {
4397
+ .content[data-v-9828be81] {
4410
4398
  display: inline-flex;
4411
4399
  align-items: center;
4412
4400
  justify-content: center;
4413
4401
  }
4414
4402
  :is([data-component~="ui-icon-button"][data-ui-icon-button-state~="loading"], [data-component~="ui-icon-button"][data-ui-icon-button-state~="pending"])
4415
- .content[data-v-ae1ec9d2] {
4403
+ .content[data-v-9828be81] {
4416
4404
  display: none;
4417
4405
  }
4418
4406
  @media (prefers-reduced-motion: reduce) {
4419
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"] .content[data-v-ae1ec9d2] {
4407
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"] .content[data-v-9828be81] {
4420
4408
  transition: none;
4421
4409
  }
4422
4410
  }
4423
- [data-component~="ui-icon-button"][data-v-ae1ec9d2]:focus-visible {
4411
+ [data-component~="ui-icon-button"][data-v-9828be81]:focus-visible {
4424
4412
  outline: none;
4425
4413
  box-shadow: var(--ui-focus-halo);
4426
4414
  }
4427
4415
 
4428
4416
  /* Disabled is a flat neutral control, independent of the active variant's tone. */
4429
- [data-component~="ui-icon-button"][data-v-ae1ec9d2]:disabled {
4417
+ [data-component~="ui-icon-button"][data-v-9828be81]:disabled {
4430
4418
  border-color: var(--ui-disabled-border);
4431
4419
  background-color: var(--ui-disabled-surface);
4432
4420
  color: var(--ui-disabled-text);
@@ -4436,23 +4424,23 @@ html[data-ui-input-modality="touch"] [data-component~="ui-icon-button"][data-v-a
4436
4424
  box-shadow: none;
4437
4425
  background-image: none;
4438
4426
  }
4439
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=ghost"][data-v-ae1ec9d2]:disabled {
4427
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=ghost"][data-v-9828be81]:disabled {
4440
4428
  border-color: transparent;
4441
4429
  }
4442
- [data-component~="ui-icon-button"][data-v-ae1ec9d2] {
4430
+ [data-component~="ui-icon-button"][data-v-9828be81] {
4443
4431
  --_icon-button-icon-default: var(--ui-icon-size-md);
4444
4432
  /* A slotted ui-icon is its own component, out of reach of the svg rule below; these are its
4445
4433
  defaults, which its own --ui-icon-* hooks still override. */
4446
4434
  --_ui-default-icon-size: var(--_ui-icon-button-icon-size, var(--_icon-button-icon-default));
4447
4435
  --_ui-default-icon-stroke-width: var(--_ui-icon-button-icon-stroke-width, 1.75);
4448
4436
  }
4449
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="size=sm"][data-v-ae1ec9d2] {
4437
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="size=sm"][data-v-9828be81] {
4450
4438
  --_icon-button-icon-default: var(--ui-icon-size-sm);
4451
4439
  }
4452
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="size=lg"][data-v-ae1ec9d2] {
4440
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="size=lg"][data-v-9828be81] {
4453
4441
  --_icon-button-icon-default: var(--ui-icon-size-lg);
4454
4442
  }
4455
- svg[data-v-ae1ec9d2-s] {
4443
+ svg[data-v-9828be81-s] {
4456
4444
  inline-size: var(--_ui-icon-button-icon-size, var(--_icon-button-icon-default));
4457
4445
  block-size: var(--_ui-icon-button-icon-size, var(--_icon-button-icon-default));
4458
4446
  flex-shrink: 0;
@@ -4460,7 +4448,7 @@ svg[data-v-ae1ec9d2-s] {
4460
4448
  }
4461
4449
 
4462
4450
  /* A component that sets its display still honours the hidden attribute on its root. */
4463
- [data-component~="ui-icon-button"][hidden][data-v-ae1ec9d2] {
4451
+ [data-component~="ui-icon-button"][hidden][data-v-9828be81] {
4464
4452
  display: none;
4465
4453
  }
4466
4454
 
@@ -4518,7 +4506,7 @@ svg[data-v-ae1ec9d2-s] {
4518
4506
  syntax: "*";
4519
4507
  inherits: false;
4520
4508
  }
4521
- [data-component~="ui-input"][data-v-aa3c35f4] {
4509
+ [data-component~="ui-input"][data-v-0d457505] {
4522
4510
  box-sizing: border-box;
4523
4511
  display: inline-block;
4524
4512
  inline-size: var(--ui-input-inline-size, 100%);
@@ -4554,7 +4542,7 @@ svg[data-v-ae1ec9d2-s] {
4554
4542
  }
4555
4543
 
4556
4544
  /* Each size reads the hook and then an Input Group's default first, so a group, which draws the frame, can zero it. */
4557
- [data-component~="ui-input"][data-ui-input-state~="size=sm"][data-v-aa3c35f4] {
4545
+ [data-component~="ui-input"][data-ui-input-state~="size=sm"][data-v-0d457505] {
4558
4546
  min-block-size: var(
4559
4547
  --ui-input-min-block-size,
4560
4548
  var(--_ui-default-input-min-block-size, var(--ui-control-size-sm))
@@ -4562,7 +4550,7 @@ svg[data-v-ae1ec9d2-s] {
4562
4550
  padding: var(--ui-space-1) var(--ui-space-2);
4563
4551
  font-size: var(--ui-font-size-sm);
4564
4552
  }
4565
- [data-component~="ui-input"][data-ui-input-state~="size=lg"][data-v-aa3c35f4] {
4553
+ [data-component~="ui-input"][data-ui-input-state~="size=lg"][data-v-0d457505] {
4566
4554
  min-block-size: var(
4567
4555
  --ui-input-min-block-size,
4568
4556
  var(--_ui-default-input-min-block-size, var(--ui-control-size-lg))
@@ -4574,7 +4562,7 @@ svg[data-v-ae1ec9d2-s] {
4574
4562
  /* Under touch a small field is still a touch-sized target, as a small button is, and keeps
4575
4563
  body-size text: below 16px, iOS zooms the page into the focused field. */
4576
4564
  @media (pointer: coarse) {
4577
- [data-component~="ui-input"][data-ui-input-state~="size=sm"][data-v-aa3c35f4] {
4565
+ [data-component~="ui-input"][data-ui-input-state~="size=sm"][data-v-0d457505] {
4578
4566
  min-block-size: var(
4579
4567
  --ui-input-min-block-size,
4580
4568
  var(--_ui-default-input-min-block-size, var(--ui-control-min-block-size))
@@ -4584,21 +4572,21 @@ svg[data-v-ae1ec9d2-s] {
4584
4572
  }
4585
4573
 
4586
4574
  /* Tabbing into a field selects its text; tint that selection softly instead of the page highlight. */
4587
- [data-component~="ui-input"][data-v-aa3c35f4]::selection {
4575
+ [data-component~="ui-input"][data-v-0d457505]::selection {
4588
4576
  background: color-mix(in srgb, var(--ui-accent-solid) 20%, transparent);
4589
4577
  color: inherit;
4590
4578
  }
4591
- [data-component~="ui-input"][data-v-aa3c35f4]::placeholder {
4579
+ [data-component~="ui-input"][data-v-0d457505]::placeholder {
4592
4580
  color: var(--ui-control-placeholder, var(--ui-text-secondary));
4593
4581
  opacity: 1;
4594
4582
  }
4595
- [data-component~="ui-input"][data-v-aa3c35f4]:hover:not(:focus):not(:disabled) {
4583
+ [data-component~="ui-input"][data-v-0d457505]:hover:not(:focus):not(:disabled):not(:read-only):not([aria-invalid="true"]):not(:is(:user-invalid, [data-user-invalid])) {
4596
4584
  border-color: var(
4597
4585
  --ui-input-border-hover,
4598
4586
  var(--_ui-default-input-border-hover, var(--ui-control-border-hover, var(--ui-text-secondary)))
4599
4587
  );
4600
4588
  }
4601
- [data-component~="ui-input"][data-v-aa3c35f4]:focus-visible {
4589
+ [data-component~="ui-input"][data-v-0d457505]:focus-visible {
4602
4590
  border-color: var(
4603
4591
  --ui-input-focus-border,
4604
4592
  var(--_ui-default-input-focus-border, var(--ui-control-focus, var(--ui-accent-solid)))
@@ -4615,14 +4603,14 @@ svg[data-v-ae1ec9d2-s] {
4615
4603
  }
4616
4604
 
4617
4605
  /* The app's invalid flag, or the browser's own verdict once the user has left an invalid field. */
4618
- [data-component~="ui-input"][aria-invalid="true"][data-v-aa3c35f4],
4619
- [data-component~="ui-input"][data-v-aa3c35f4]:is(:user-invalid, [data-user-invalid]) {
4606
+ [data-component~="ui-input"][aria-invalid="true"][data-v-0d457505],
4607
+ [data-component~="ui-input"][data-v-0d457505]:is(:user-invalid, [data-user-invalid]) {
4620
4608
  border-color: var(
4621
4609
  --ui-input-invalid-border,
4622
4610
  var(--_ui-default-input-invalid-border, var(--ui-field-danger, var(--ui-danger-solid)))
4623
4611
  );
4624
4612
  }
4625
- [data-component~="ui-input"][data-v-aa3c35f4]:is([aria-invalid="true"], :is(:user-invalid, [data-user-invalid])):focus-visible {
4613
+ [data-component~="ui-input"][data-v-0d457505]:is([aria-invalid="true"], :is(:user-invalid, [data-user-invalid])):focus-visible {
4626
4614
  box-shadow: var(
4627
4615
  --ui-input-invalid-focus-shadow,
4628
4616
  var(
@@ -4636,7 +4624,7 @@ svg[data-v-ae1ec9d2-s] {
4636
4624
  )
4637
4625
  );
4638
4626
  }
4639
- [data-component~="ui-input"][data-v-aa3c35f4]:disabled {
4627
+ [data-component~="ui-input"][data-v-0d457505]:disabled {
4640
4628
  background: var(--ui-control-surface-disabled, var(--ui-surface-muted));
4641
4629
  color: var(--ui-disabled-text);
4642
4630
  box-shadow: none;
@@ -4645,7 +4633,7 @@ svg[data-v-ae1ec9d2-s] {
4645
4633
 
4646
4634
  /* Forced colors drop box shadows, so the focus ring becomes an outline. */
4647
4635
  @media (forced-colors: active) {
4648
- [data-component~="ui-input"][data-v-aa3c35f4]:focus-visible {
4636
+ [data-component~="ui-input"][data-v-0d457505]:focus-visible {
4649
4637
  outline: var(
4650
4638
  --ui-input-focus-outline,
4651
4639
  var(--_ui-default-input-focus-outline, 2px solid Highlight)
@@ -4658,7 +4646,7 @@ svg[data-v-ae1ec9d2-s] {
4658
4646
  * scroll vertically inside the field. Native inputs already center their single line. */
4659
4647
 
4660
4648
  /* A component that sets its display still honours the hidden attribute on its root. */
4661
- [data-component~="ui-input"][hidden][data-v-aa3c35f4] {
4649
+ [data-component~="ui-input"][hidden][data-v-0d457505] {
4662
4650
  display: none;
4663
4651
  }
4664
4652
 
@@ -4682,7 +4670,7 @@ svg[data-v-ae1ec9d2-s] {
4682
4670
  whole value is. The action slot takes one button at the end, inside the border, for the one
4683
4671
  thing the field is for ("Continue" after a site's address), so it reads as the field's action
4684
4672
  and not the form's. */
4685
- [data-component~="ui-input-group"][data-v-51eefe72] {
4673
+ [data-component~="ui-input-group"][data-v-5ed34845] {
4686
4674
  /* The group's own border and height stand for the input's, so the group is a lone Input's height.
4687
4675
  Hooks do not inherit, so these are defaults for the input; its own hooks still win. */
4688
4676
  --_ui-default-input-border-width: 0;
@@ -4718,36 +4706,36 @@ svg[data-v-ae1ec9d2-s] {
4718
4706
  }
4719
4707
 
4720
4708
  /* The frame takes its input's size, so a small group lines up with small buttons and fields. */
4721
- [data-component~="ui-input-group"][data-v-51eefe72]:has(.field [data-ui-input-state~="size=sm"]) {
4709
+ [data-component~="ui-input-group"][data-v-5ed34845]:has(.field [data-ui-input-state~="size=sm"]) {
4722
4710
  min-block-size: var(--ui-control-size-sm);
4723
4711
  }
4724
- [data-component~="ui-input-group"][data-v-51eefe72]:has(.field [data-ui-input-state~="size=lg"]) {
4712
+ [data-component~="ui-input-group"][data-v-5ed34845]:has(.field [data-ui-input-state~="size=lg"]) {
4725
4713
  min-block-size: var(--ui-control-size-lg);
4726
4714
  }
4727
4715
  @media (pointer: coarse) {
4728
- [data-component~="ui-input-group"][data-v-51eefe72]:has(.field [data-ui-input-state~="size=sm"]) {
4716
+ [data-component~="ui-input-group"][data-v-5ed34845]:has(.field [data-ui-input-state~="size=sm"]) {
4729
4717
  min-block-size: var(--ui-control-min-block-size);
4730
4718
  }
4731
4719
  }
4732
- [data-component~="ui-input-group"][data-v-51eefe72]:hover:not(:has(input:focus, input:disabled)) {
4720
+ [data-component~="ui-input-group"][data-v-5ed34845]:hover:not(:has(input:focus, input:disabled, input:read-only, [aria-invalid="true"], :is(:user-invalid, [data-user-invalid]))) {
4733
4721
  border-color: var(--ui-control-border-hover, var(--ui-text-secondary));
4734
4722
  }
4735
4723
 
4736
4724
  /* The ring shows when the field's input would show its own: when it is focus-visible, which a
4737
4725
  text input is for a pointer as well as a keyboard. A focused action button draws its own. */
4738
- [data-component~="ui-input-group"][data-v-51eefe72]:has(.field input:focus-visible) {
4726
+ [data-component~="ui-input-group"][data-v-5ed34845]:has(.field input:focus-visible) {
4739
4727
  border-color: var(--ui-control-focus, var(--ui-accent-solid));
4740
4728
  box-shadow:
4741
4729
  var(--ui-control-inset),
4742
4730
  var(--ui-control-focus-halo-shadow);
4743
4731
  }
4744
- [data-component~="ui-input-group"][data-v-51eefe72]:has([aria-invalid="true"], :is(:user-invalid, [data-user-invalid])) {
4732
+ [data-component~="ui-input-group"][data-v-5ed34845]:has([aria-invalid="true"], :is(:user-invalid, [data-user-invalid])) {
4745
4733
  border-color: var(
4746
4734
  --ui-input-group-invalid-border,
4747
4735
  var(--ui-field-danger, var(--ui-danger-solid))
4748
4736
  );
4749
4737
  }
4750
- [data-component~="ui-input-group"][data-v-51eefe72]:has(input:is([aria-invalid="true"], :is(:user-invalid, [data-user-invalid])):focus-visible) {
4738
+ [data-component~="ui-input-group"][data-v-5ed34845]:has(input:is([aria-invalid="true"], :is(:user-invalid, [data-user-invalid])):focus-visible) {
4751
4739
  box-shadow: var(
4752
4740
  --ui-input-group-invalid-focus-shadow,
4753
4741
  var(--ui-control-inset),
@@ -4761,23 +4749,23 @@ svg[data-v-ae1ec9d2-s] {
4761
4749
 
4762
4750
  /* Forced colors drop box shadows, so the focus ring becomes an outline. */
4763
4751
  @media (forced-colors: active) {
4764
- [data-component~="ui-input-group"][data-v-51eefe72]:has(input:focus-visible) {
4752
+ [data-component~="ui-input-group"][data-v-5ed34845]:has(input:focus-visible) {
4765
4753
  outline: 2px solid Highlight;
4766
4754
  outline-offset: 1px;
4767
4755
  }
4768
4756
  }
4769
- [data-component~="ui-input-group"][data-ui-input-group-state~="disabled"][data-v-51eefe72],
4770
- [data-component~="ui-input-group"][data-v-51eefe72]:has(input:disabled) {
4757
+ [data-component~="ui-input-group"][data-ui-input-group-state~="disabled"][data-v-5ed34845],
4758
+ [data-component~="ui-input-group"][data-v-5ed34845]:has(input:disabled) {
4771
4759
  background: var(--ui-control-surface-disabled, var(--ui-surface-muted));
4772
4760
  box-shadow: none;
4773
4761
  cursor: not-allowed;
4774
4762
  }
4775
- .field[data-v-51eefe72] {
4763
+ .field[data-v-5ed34845] {
4776
4764
  display: flex;
4777
4765
  flex: 1;
4778
4766
  min-inline-size: 0;
4779
4767
  }
4780
- .affix[data-v-51eefe72] {
4768
+ .affix[data-v-5ed34845] {
4781
4769
  display: inline-flex;
4782
4770
  flex: none;
4783
4771
  align-items: center;
@@ -4790,19 +4778,19 @@ svg[data-v-ae1ec9d2-s] {
4790
4778
 
4791
4779
  /* Centred rather than padded above and below: the group is exactly a lone Input's height, so a
4792
4780
  small button sits inside it with the difference split evenly, and the field keeps its height. */
4793
- .action[data-v-51eefe72] {
4781
+ .action[data-v-5ed34845] {
4794
4782
  display: flex;
4795
4783
  flex: none;
4796
4784
  align-items: center;
4797
4785
  padding-inline: var(--ui-space-1);
4798
4786
  }
4799
- .affix[data-v-51eefe72]:empty,
4800
- .action[data-v-51eefe72]:empty {
4787
+ .affix[data-v-5ed34845]:empty,
4788
+ .action[data-v-5ed34845]:empty {
4801
4789
  display: none;
4802
4790
  }
4803
4791
 
4804
4792
  /* A component that sets its display still honours the hidden attribute on its root. */
4805
- [data-component~="ui-input-group"][hidden][data-v-51eefe72] {
4793
+ [data-component~="ui-input-group"][hidden][data-v-5ed34845] {
4806
4794
  display: none;
4807
4795
  }
4808
4796
 
@@ -5043,45 +5031,66 @@ svg[data-v-ae1ec9d2-s] {
5043
5031
  syntax: "*";
5044
5032
  inherits: false;
5045
5033
  }
5046
- [data-component~="ui-listbox"][data-v-44b33b05] {
5034
+ [data-component~="ui-listbox"][data-v-db56e4d0] {
5035
+ position: relative;
5047
5036
  box-sizing: border-box;
5048
5037
  display: block;
5049
5038
  inline-size: 100%;
5050
5039
  min-inline-size: 0;
5051
- min-block-size: var(--ui-control-min-block-size);
5052
5040
  margin: 0;
5053
5041
  padding: var(--ui-space-1);
5054
5042
  border: 1px solid var(--ui-listbox-border, var(--ui-control-border));
5055
5043
  border-radius: var(--ui-listbox-radius, var(--ui-field-radius, var(--ui-radius-md)));
5056
5044
  background: var(--ui-listbox-surface, var(--ui-control-surface));
5057
5045
  color: var(--ui-text-primary);
5058
- color-scheme: light dark;
5059
5046
  font: inherit;
5060
5047
  line-height: var(--ui-line-height-md);
5061
5048
  box-shadow: var(--ui-control-inset);
5049
+ outline: none;
5062
5050
  }
5063
- [data-component~="ui-listbox"] option[data-v-44b33b05],
5064
- [data-component~="ui-listbox"] optgroup[data-v-44b33b05] {
5065
- padding: var(--ui-space-2);
5051
+ .choices[data-v-db56e4d0] {
5052
+ max-block-size: calc(max(2, var(--_rows, 5)) * var(--ui-control-size-md));
5053
+ }
5054
+ [data-component~="ui-listbox"][data-v-db56e4d0]:not([data-enhanced]) {
5055
+ padding: 0;
5056
+ border: 0;
5057
+ background: transparent;
5058
+ box-shadow: none;
5059
+ }
5060
+ [data-component~="ui-listbox"]:not([data-enhanced]) .choices[data-v-db56e4d0],
5061
+ [data-component~="ui-listbox"][data-enhanced] .fallback[data-v-db56e4d0] {
5062
+ display: none;
5063
+ }
5064
+ .fallback[data-v-db56e4d0] {
5065
+ box-sizing: border-box;
5066
+ inline-size: 100%;
5066
5067
  font: inherit;
5067
5068
  }
5068
- [data-component~="ui-listbox"][data-v-44b33b05]:focus-visible {
5069
+ .validity[data-v-db56e4d0] {
5070
+ position: absolute;
5071
+ inline-size: 1px;
5072
+ block-size: 1px;
5073
+ overflow: hidden;
5074
+ clip-path: inset(50%);
5075
+ opacity: 0;
5076
+ pointer-events: none;
5077
+ }
5078
+ [data-component~="ui-listbox"][data-v-db56e4d0]:focus-visible {
5069
5079
  border-color: var(--ui-control-focus);
5070
5080
  outline: 2px solid var(--ui-focus-ring);
5071
5081
  outline-offset: 2px;
5072
5082
  box-shadow: var(--ui-listbox-focus-shadow, var(--ui-focus-halo));
5073
5083
  }
5074
- [data-component~="ui-listbox"][aria-invalid="true"][data-v-44b33b05],
5075
- [data-component~="ui-listbox"][data-v-44b33b05]:is(:user-invalid, [data-user-invalid]) {
5084
+ [data-component~="ui-listbox"][aria-invalid="true"][data-v-db56e4d0] {
5076
5085
  border-color: var(--ui-listbox-invalid-border, var(--ui-field-danger, var(--ui-danger)));
5077
5086
  }
5078
- [data-component~="ui-listbox"][data-v-44b33b05]:disabled {
5087
+ [data-component~="ui-listbox"][aria-disabled="true"][data-v-db56e4d0] {
5079
5088
  background: var(--ui-control-surface-disabled);
5080
5089
  color: var(--ui-disabled-text);
5081
5090
  box-shadow: none;
5082
5091
  cursor: not-allowed;
5083
5092
  }
5084
- [data-component~="ui-listbox"][hidden][data-v-44b33b05] {
5093
+ [data-component~="ui-listbox"][hidden][data-v-db56e4d0] {
5085
5094
  display: none;
5086
5095
  }
5087
5096
 
@@ -5240,7 +5249,7 @@ svg[data-v-ae1ec9d2-s] {
5240
5249
  syntax: "*";
5241
5250
  inherits: false;
5242
5251
  }
5243
- [data-component~="ui-menu-item"][data-v-6b7f9bed] {
5252
+ [data-component~="ui-menu-item"][data-v-6d5ac848] {
5244
5253
  display: flex;
5245
5254
  align-items: center;
5246
5255
  gap: var(--ui-space-2);
@@ -5272,11 +5281,14 @@ svg[data-v-ae1ec9d2-s] {
5272
5281
  background-color var(--ui-motion-fast) var(--ui-motion-ease),
5273
5282
  color var(--ui-motion-fast) var(--ui-motion-ease);
5274
5283
  }
5275
- .label[data-v-6b7f9bed] {
5284
+ .label[data-v-6d5ac848] {
5285
+ display: flex;
5286
+ align-items: center;
5287
+ gap: var(--ui-space-2);
5276
5288
  flex: 1;
5277
5289
  min-inline-size: 0;
5278
5290
  }
5279
- .indicator[data-v-6b7f9bed] {
5291
+ .indicator[data-v-6d5ac848] {
5280
5292
  display: inline-flex;
5281
5293
  align-items: center;
5282
5294
  justify-content: center;
@@ -5289,75 +5301,75 @@ svg[data-v-ae1ec9d2-s] {
5289
5301
  color: var(--ui-surface);
5290
5302
  --_ui-default-icon-size: 0.75rem;
5291
5303
  }
5292
- [data-component~="ui-menu-item"][data-ui-menu-item-state~="type=action"] .indicator[data-v-6b7f9bed] {
5304
+ [data-component~="ui-menu-item"][data-ui-menu-item-state~="type=action"] .indicator[data-v-6d5ac848] {
5293
5305
  display: none;
5294
5306
  }
5295
5307
  [data-component~="ui-menu-item"][data-ui-menu-item-state~="type=checkbox"][aria-checked="true"]
5296
- .indicator[data-v-6b7f9bed] {
5308
+ .indicator[data-v-6d5ac848] {
5297
5309
  border-color: var(--ui-accent);
5298
5310
  background: var(--ui-accent);
5299
5311
  }
5300
- [data-component~="ui-menu-item"][data-ui-menu-item-state~="type=radio"] .indicator[data-v-6b7f9bed] {
5312
+ [data-component~="ui-menu-item"][data-ui-menu-item-state~="type=radio"] .indicator[data-v-6d5ac848] {
5301
5313
  border-radius: var(--ui-radius-round);
5302
5314
  }
5303
5315
  [data-component~="ui-menu-item"][data-ui-menu-item-state~="type=radio"][aria-checked="true"]
5304
- .indicator[data-v-6b7f9bed] {
5316
+ .indicator[data-v-6d5ac848] {
5305
5317
  border-color: var(--ui-accent);
5306
5318
  }
5307
5319
  [data-component~="ui-menu-item"][data-ui-menu-item-state~="type=radio"][aria-checked="true"]
5308
- .indicator[data-v-6b7f9bed]::after {
5320
+ .indicator[data-v-6d5ac848]::after {
5309
5321
  content: "";
5310
5322
  inline-size: 0.375rem;
5311
5323
  block-size: 0.375rem;
5312
5324
  border-radius: var(--ui-radius-round);
5313
5325
  background: var(--ui-accent);
5314
5326
  }
5315
- .shortcut[data-v-6b7f9bed] {
5327
+ .shortcut[data-v-6d5ac848] {
5316
5328
  margin-inline-start: auto;
5317
5329
  color: var(--ui-text-secondary);
5318
5330
  font-size: var(--ui-font-size-sm);
5319
5331
  font-weight: var(--ui-font-normal);
5320
5332
  }
5321
- .shortcut[data-v-6b7f9bed]:empty {
5333
+ .shortcut[data-v-6d5ac848]:empty {
5322
5334
  display: none;
5323
5335
  }
5324
5336
 
5325
5337
  /* Keep the text row at the shared control height where cap trimming is available. */
5326
5338
  @supports (text-box-trim: trim-both) {
5327
- [data-component~="ui-menu-item"][data-v-6b7f9bed] {
5339
+ [data-component~="ui-menu-item"][data-v-6d5ac848] {
5328
5340
  min-block-size: var(--ui-menu-item-min-block-size, var(--ui-control-size-md, 2.5rem));
5329
5341
  text-box-trim: trim-both;
5330
5342
  text-box-edge: cap alphabetic;
5331
5343
  }
5332
5344
  }
5333
- [data-component~="ui-menu-item"][data-v-6b7f9bed]:is(:hover, :focus-visible):not([aria-disabled="true"]) {
5345
+ [data-component~="ui-menu-item"][data-v-6d5ac848]:is(:hover, :focus-visible):not([aria-disabled="true"]) {
5334
5346
  background: var(--ui-menu-item-hover-surface, var(--ui-surface-subtle));
5335
5347
  }
5336
- [data-component~="ui-menu-item"][data-v-6b7f9bed]:focus-visible {
5348
+ [data-component~="ui-menu-item"][data-v-6d5ac848]:focus-visible {
5337
5349
  outline: 2px solid var(--ui-focus-ring);
5338
5350
  outline-offset: -2px;
5339
5351
  }
5340
- [data-component~="ui-menu-item"][aria-disabled="true"][data-v-6b7f9bed] {
5352
+ [data-component~="ui-menu-item"][aria-disabled="true"][data-v-6d5ac848] {
5341
5353
  background: var(--ui-disabled-surface);
5342
5354
  color: var(--ui-disabled-text);
5343
5355
  cursor: not-allowed;
5344
5356
  }
5345
- [data-component~="ui-menu-item"][aria-disabled="true"] .indicator[data-v-6b7f9bed] {
5357
+ [data-component~="ui-menu-item"][aria-disabled="true"] .indicator[data-v-6d5ac848] {
5346
5358
  border-color: var(--ui-disabled-border);
5347
5359
  background: transparent;
5348
5360
  color: var(--ui-disabled-text);
5349
5361
  }
5350
- [data-component~="ui-menu-item"][aria-disabled="true"] .indicator[data-v-6b7f9bed]::after {
5362
+ [data-component~="ui-menu-item"][aria-disabled="true"] .indicator[data-v-6d5ac848]::after {
5351
5363
  background: var(--ui-disabled-text);
5352
5364
  }
5353
5365
  @media (forced-colors: active) {
5354
- [data-component~="ui-menu-item"][data-v-6b7f9bed]:focus-visible {
5366
+ [data-component~="ui-menu-item"][data-v-6d5ac848]:focus-visible {
5355
5367
  outline-color: Highlight;
5356
5368
  }
5357
5369
  }
5358
5370
 
5359
5371
  /* A component that sets its display still honours the hidden attribute on its root. */
5360
- [data-component~="ui-menu-item"][hidden][data-v-6b7f9bed] {
5372
+ [data-component~="ui-menu-item"][hidden][data-v-6d5ac848] {
5361
5373
  display: none;
5362
5374
  }
5363
5375
 
@@ -6429,7 +6441,7 @@ dialog[data-v-b1cde00b] {
6429
6441
  syntax: "*";
6430
6442
  inherits: false;
6431
6443
  }
6432
- [data-component~="ui-select"][data-v-3f68a24f] {
6444
+ [data-component~="ui-select"][data-v-699dcb22] {
6433
6445
  box-sizing: border-box;
6434
6446
  display: inline-block;
6435
6447
  inline-size: var(--ui-select-inline-size, 100%);
@@ -6453,7 +6465,7 @@ dialog[data-v-b1cde00b] {
6453
6465
 
6454
6466
  /* The select draws its own chevron: the native caret cannot be inset or sized consistently.
6455
6467
  * The root stays a native <s-lect>, so the icon is a background image rather than an element. */
6456
- [data-component~="ui-select"][data-v-3f68a24f] {
6468
+ [data-component~="ui-select"][data-v-699dcb22] {
6457
6469
  appearance: none;
6458
6470
  padding-inline-end: calc(var(--ui-space-3) + 1.5rem);
6459
6471
  background-image: var(
@@ -6464,13 +6476,13 @@ dialog[data-v-b1cde00b] {
6464
6476
  background-position: right var(--ui-space-3) center;
6465
6477
  background-size: 1.125rem 1.125rem;
6466
6478
  }
6467
- [data-component~="ui-select"][data-v-3f68a24f]:hover:not(:focus):not(:disabled) {
6479
+ [data-component~="ui-select"][data-v-699dcb22]:hover:not(:focus):not(:disabled):not([aria-invalid="true"]):not(:is(:user-invalid, [data-user-invalid])) {
6468
6480
  border-color: var(
6469
6481
  --ui-select-border-hover,
6470
6482
  var(--ui-control-border-hover, var(--ui-text-secondary))
6471
6483
  );
6472
6484
  }
6473
- [data-component~="ui-select"][data-v-3f68a24f]:focus-visible {
6485
+ [data-component~="ui-select"][data-v-699dcb22]:focus-visible {
6474
6486
  border-color: var(--ui-select-focus-border, var(--ui-control-focus, var(--ui-accent-solid)));
6475
6487
  outline: none;
6476
6488
  box-shadow: var(
@@ -6481,11 +6493,11 @@ dialog[data-v-b1cde00b] {
6481
6493
  }
6482
6494
 
6483
6495
  /* The app's invalid flag, or the browser's own verdict once the user has left an invalid field. */
6484
- [data-component~="ui-select"][aria-invalid="true"][data-v-3f68a24f],
6485
- [data-component~="ui-select"][data-v-3f68a24f]:is(:user-invalid, [data-user-invalid]) {
6496
+ [data-component~="ui-select"][aria-invalid="true"][data-v-699dcb22],
6497
+ [data-component~="ui-select"][data-v-699dcb22]:is(:user-invalid, [data-user-invalid]) {
6486
6498
  border-color: var(--ui-select-invalid-border, var(--ui-field-danger, var(--ui-danger-solid)));
6487
6499
  }
6488
- [data-component~="ui-select"][data-v-3f68a24f]:is([aria-invalid="true"], :is(:user-invalid, [data-user-invalid])):focus-visible {
6500
+ [data-component~="ui-select"][data-v-699dcb22]:is([aria-invalid="true"], :is(:user-invalid, [data-user-invalid])):focus-visible {
6489
6501
  box-shadow: var(
6490
6502
  --ui-select-invalid-focus-shadow,
6491
6503
  var(--ui-control-inset),
@@ -6496,13 +6508,13 @@ dialog[data-v-b1cde00b] {
6496
6508
  )
6497
6509
  );
6498
6510
  }
6499
- [data-component~="ui-select"][data-v-3f68a24f]:disabled {
6511
+ [data-component~="ui-select"][data-v-699dcb22]:disabled {
6500
6512
  background-color: var(--ui-control-surface-disabled, var(--ui-surface-muted));
6501
6513
  color: var(--ui-disabled-text);
6502
6514
  box-shadow: none;
6503
6515
  cursor: not-allowed;
6504
6516
  }
6505
- [data-component~="ui-select"][data-ui-select-state~="size=sm"][data-v-3f68a24f] {
6517
+ [data-component~="ui-select"][data-ui-select-state~="size=sm"][data-v-699dcb22] {
6506
6518
  min-block-size: var(--ui-control-size-sm);
6507
6519
  padding: var(--ui-space-1) var(--ui-space-2);
6508
6520
  padding-inline-end: calc(var(--ui-space-2) + var(--ui-icon-size-sm) + var(--ui-space-1));
@@ -6510,7 +6522,7 @@ dialog[data-v-b1cde00b] {
6510
6522
  background-size: var(--ui-icon-size-sm) var(--ui-icon-size-sm);
6511
6523
  font-size: var(--ui-font-size-sm);
6512
6524
  }
6513
- [data-component~="ui-select"][data-ui-select-state~="size=lg"][data-v-3f68a24f] {
6525
+ [data-component~="ui-select"][data-ui-select-state~="size=lg"][data-v-699dcb22] {
6514
6526
  min-block-size: var(--ui-control-size-lg);
6515
6527
  padding: var(--ui-space-3) var(--ui-space-4);
6516
6528
  padding-inline-end: calc(var(--ui-space-4) + 1.5rem);
@@ -6521,14 +6533,14 @@ dialog[data-v-b1cde00b] {
6521
6533
  /* Under touch a small field is still a touch-sized target, as a small button is, and keeps
6522
6534
  body-size text: below 16px, iOS zooms the page into the focused field. */
6523
6535
  @media (pointer: coarse) {
6524
- [data-component~="ui-select"][data-ui-select-state~="size=sm"][data-v-3f68a24f] {
6536
+ [data-component~="ui-select"][data-ui-select-state~="size=sm"][data-v-699dcb22] {
6525
6537
  min-block-size: var(--ui-control-min-block-size);
6526
6538
  font-size: inherit;
6527
6539
  }
6528
6540
  }
6529
6541
 
6530
6542
  /* A component that sets its display still honours the hidden attribute on its root. */
6531
- [data-component~="ui-select"][hidden][data-v-3f68a24f] {
6543
+ [data-component~="ui-select"][hidden][data-v-699dcb22] {
6532
6544
  display: none;
6533
6545
  }
6534
6546
 
@@ -7440,7 +7452,7 @@ tbody tr[data-v-a58b58d4-s]:last-child > * {
7440
7452
  syntax: "*";
7441
7453
  inherits: false;
7442
7454
  }
7443
- [data-component~="ui-textarea"][data-v-f371e58f] {
7455
+ [data-component~="ui-textarea"][data-v-a2e0e09f] {
7444
7456
  box-sizing: border-box;
7445
7457
  display: inline-block;
7446
7458
  inline-size: 100%;
@@ -7465,18 +7477,18 @@ tbody tr[data-v-a58b58d4-s]:last-child > * {
7465
7477
  }
7466
7478
 
7467
7479
  /* Tabbing into a field selects its text; tint that selection softly instead of the page highlight. */
7468
- [data-component~="ui-textarea"][data-v-f371e58f]::selection {
7480
+ [data-component~="ui-textarea"][data-v-a2e0e09f]::selection {
7469
7481
  background: color-mix(in srgb, var(--ui-accent-solid) 20%, transparent);
7470
7482
  color: inherit;
7471
7483
  }
7472
- [data-component~="ui-textarea"][data-v-f371e58f]::placeholder {
7484
+ [data-component~="ui-textarea"][data-v-a2e0e09f]::placeholder {
7473
7485
  color: var(--ui-control-placeholder, var(--ui-text-secondary));
7474
7486
  opacity: 1;
7475
7487
  }
7476
- [data-component~="ui-textarea"][data-v-f371e58f]:hover:not(:focus):not(:disabled) {
7488
+ [data-component~="ui-textarea"][data-v-a2e0e09f]:hover:not(:focus):not(:disabled):not(:read-only):not([aria-invalid="true"]):not(:is(:user-invalid, [data-user-invalid])) {
7477
7489
  border-color: var(--ui-control-border-hover, var(--ui-text-secondary));
7478
7490
  }
7479
- [data-component~="ui-textarea"][data-v-f371e58f]:focus-visible {
7491
+ [data-component~="ui-textarea"][data-v-a2e0e09f]:focus-visible {
7480
7492
  border-color: var(--ui-control-focus, var(--ui-accent-solid));
7481
7493
  outline: none;
7482
7494
  box-shadow: var(
@@ -7487,11 +7499,11 @@ tbody tr[data-v-a58b58d4-s]:last-child > * {
7487
7499
  }
7488
7500
 
7489
7501
  /* The app's invalid flag, or the browser's own verdict once the user has left an invalid field. */
7490
- [data-component~="ui-textarea"][aria-invalid="true"][data-v-f371e58f],
7491
- [data-component~="ui-textarea"][data-v-f371e58f]:is(:user-invalid, [data-user-invalid]) {
7502
+ [data-component~="ui-textarea"][aria-invalid="true"][data-v-a2e0e09f],
7503
+ [data-component~="ui-textarea"][data-v-a2e0e09f]:is(:user-invalid, [data-user-invalid]) {
7492
7504
  border-color: var(--ui-textarea-invalid-border, var(--ui-field-danger, var(--ui-danger-solid)));
7493
7505
  }
7494
- [data-component~="ui-textarea"][data-v-f371e58f]:is([aria-invalid="true"], :is(:user-invalid, [data-user-invalid])):focus-visible {
7506
+ [data-component~="ui-textarea"][data-v-a2e0e09f]:is([aria-invalid="true"], :is(:user-invalid, [data-user-invalid])):focus-visible {
7495
7507
  box-shadow: var(
7496
7508
  --ui-textarea-invalid-focus-shadow,
7497
7509
  var(--ui-control-inset),
@@ -7502,24 +7514,24 @@ tbody tr[data-v-a58b58d4-s]:last-child > * {
7502
7514
  )
7503
7515
  );
7504
7516
  }
7505
- [data-component~="ui-textarea"][data-v-f371e58f]:disabled {
7517
+ [data-component~="ui-textarea"][data-v-a2e0e09f]:disabled {
7506
7518
  background: var(--ui-control-surface-disabled, var(--ui-surface-muted));
7507
7519
  color: var(--ui-disabled-text);
7508
7520
  box-shadow: none;
7509
7521
  cursor: not-allowed;
7510
7522
  }
7511
- [data-component~="ui-textarea"][data-ui-textarea-state~="size=sm"][data-v-f371e58f] {
7523
+ [data-component~="ui-textarea"][data-ui-textarea-state~="size=sm"][data-v-a2e0e09f] {
7512
7524
  --_padding-block: var(--ui-space-1);
7513
7525
  padding: var(--ui-space-1) var(--ui-space-2);
7514
7526
  font-size: var(--ui-font-size-sm);
7515
7527
  }
7516
- [data-component~="ui-textarea"][data-ui-textarea-state~="size=lg"][data-v-f371e58f] {
7528
+ [data-component~="ui-textarea"][data-ui-textarea-state~="size=lg"][data-v-a2e0e09f] {
7517
7529
  --_padding-block: var(--ui-space-3);
7518
7530
  padding: var(--ui-space-3) var(--ui-space-4);
7519
7531
  font-size: var(--ui-font-size-md);
7520
7532
  }
7521
7533
  @supports (field-sizing: content) {
7522
- [data-component~="ui-textarea"][data-ui-textarea-state~="autosize"][data-v-f371e58f] {
7534
+ [data-component~="ui-textarea"][data-ui-textarea-state~="autosize"][data-v-a2e0e09f] {
7523
7535
  field-sizing: content;
7524
7536
  min-block-size: calc(var(--_rows) * 1lh + var(--_padding-block) + var(--_padding-block) + 2px);
7525
7537
  }
@@ -7527,13 +7539,13 @@ tbody tr[data-v-a58b58d4-s]:last-child > * {
7527
7539
 
7528
7540
  /* Below 16px, iOS zooms the page into the focused field, so touch keeps body-size text. */
7529
7541
  @media (pointer: coarse) {
7530
- [data-component~="ui-textarea"][data-ui-textarea-state~="size=sm"][data-v-f371e58f] {
7542
+ [data-component~="ui-textarea"][data-ui-textarea-state~="size=sm"][data-v-a2e0e09f] {
7531
7543
  font-size: inherit;
7532
7544
  }
7533
7545
  }
7534
7546
 
7535
7547
  /* A component that sets its display still honours the hidden attribute on its root. */
7536
- [data-component~="ui-textarea"][hidden][data-v-f371e58f] {
7548
+ [data-component~="ui-textarea"][hidden][data-v-a2e0e09f] {
7537
7549
  display: none;
7538
7550
  }
7539
7551