@threadlabs/looma 0.17.4 → 0.18.0

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 (47) 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-combobox/ui-combobox.html +4 -48
  4. package/components/ui-input/ui-input.html +1 -1
  5. package/components/ui-input-group/ui-input-group.html +1 -1
  6. package/components/ui-listbox/ui-listbox.html +88 -12
  7. package/components/ui-listbox/ui-listbox.js +162 -18
  8. package/components/ui-select/ui-select.html +1 -1
  9. package/components/ui-spinner/ui-spinner.html +47 -14
  10. package/components/ui-textarea/ui-textarea.html +1 -1
  11. package/dist/index.js +1 -1
  12. package/editor/chunks/extensions.js +5 -0
  13. package/package.json +1 -1
  14. package/styles/ui-avatar.css +6 -2
  15. package/styles/ui-badge.css +30 -40
  16. package/styles/ui-combobox.css +0 -52
  17. package/styles/ui-input-group.css +1 -1
  18. package/styles/ui-input.css +1 -1
  19. package/styles/ui-listbox.css +33 -8
  20. package/styles/ui-select.css +1 -1
  21. package/styles/ui-spinner.css +40 -15
  22. package/styles/ui-textarea.css +1 -1
  23. package/tokens.css +67 -2
  24. package/vanilla/UiCombobox.js +9 -1
  25. package/vanilla/UiListbox.d.ts +3 -1
  26. package/vanilla/UiListbox.js +65 -18
  27. package/vanilla/UiSpinner.js +19 -1
  28. package/vue/UiAvatar.vue +11 -2
  29. package/vue/UiBadge.vue +30 -36
  30. package/vue/UiCombobox.vue +4 -49
  31. package/vue/UiInput.vue +1 -1
  32. package/vue/UiInputGroup.vue +1 -1
  33. package/vue/UiListbox.d.ts +18 -5
  34. package/vue/UiListbox.vue +142 -25
  35. package/vue/UiSelect.vue +1 -1
  36. package/vue/UiSpinner.vue +47 -14
  37. package/vue/UiTextarea.vue +1 -1
  38. package/vue/chunks/UiAvatar.js +2 -1
  39. package/vue/chunks/UiBadge.js +1 -1
  40. package/vue/chunks/UiCombobox.js +11 -2
  41. package/vue/chunks/UiInput.js +1 -1
  42. package/vue/chunks/UiInputGroup.js +1 -1
  43. package/vue/chunks/UiListbox.js +134 -20
  44. package/vue/chunks/UiSelect.js +1 -1
  45. package/vue/chunks/UiSpinner.js +29 -3
  46. package/vue/chunks/UiTextarea.js +1 -1
  47. package/vue/components.css +248 -251
@@ -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
 
@@ -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
 
@@ -4518,7 +4494,7 @@ svg[data-v-ae1ec9d2-s] {
4518
4494
  syntax: "*";
4519
4495
  inherits: false;
4520
4496
  }
4521
- [data-component~="ui-input"][data-v-aa3c35f4] {
4497
+ [data-component~="ui-input"][data-v-0d457505] {
4522
4498
  box-sizing: border-box;
4523
4499
  display: inline-block;
4524
4500
  inline-size: var(--ui-input-inline-size, 100%);
@@ -4554,7 +4530,7 @@ svg[data-v-ae1ec9d2-s] {
4554
4530
  }
4555
4531
 
4556
4532
  /* 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] {
4533
+ [data-component~="ui-input"][data-ui-input-state~="size=sm"][data-v-0d457505] {
4558
4534
  min-block-size: var(
4559
4535
  --ui-input-min-block-size,
4560
4536
  var(--_ui-default-input-min-block-size, var(--ui-control-size-sm))
@@ -4562,7 +4538,7 @@ svg[data-v-ae1ec9d2-s] {
4562
4538
  padding: var(--ui-space-1) var(--ui-space-2);
4563
4539
  font-size: var(--ui-font-size-sm);
4564
4540
  }
4565
- [data-component~="ui-input"][data-ui-input-state~="size=lg"][data-v-aa3c35f4] {
4541
+ [data-component~="ui-input"][data-ui-input-state~="size=lg"][data-v-0d457505] {
4566
4542
  min-block-size: var(
4567
4543
  --ui-input-min-block-size,
4568
4544
  var(--_ui-default-input-min-block-size, var(--ui-control-size-lg))
@@ -4574,7 +4550,7 @@ svg[data-v-ae1ec9d2-s] {
4574
4550
  /* Under touch a small field is still a touch-sized target, as a small button is, and keeps
4575
4551
  body-size text: below 16px, iOS zooms the page into the focused field. */
4576
4552
  @media (pointer: coarse) {
4577
- [data-component~="ui-input"][data-ui-input-state~="size=sm"][data-v-aa3c35f4] {
4553
+ [data-component~="ui-input"][data-ui-input-state~="size=sm"][data-v-0d457505] {
4578
4554
  min-block-size: var(
4579
4555
  --ui-input-min-block-size,
4580
4556
  var(--_ui-default-input-min-block-size, var(--ui-control-min-block-size))
@@ -4584,21 +4560,21 @@ svg[data-v-ae1ec9d2-s] {
4584
4560
  }
4585
4561
 
4586
4562
  /* 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 {
4563
+ [data-component~="ui-input"][data-v-0d457505]::selection {
4588
4564
  background: color-mix(in srgb, var(--ui-accent-solid) 20%, transparent);
4589
4565
  color: inherit;
4590
4566
  }
4591
- [data-component~="ui-input"][data-v-aa3c35f4]::placeholder {
4567
+ [data-component~="ui-input"][data-v-0d457505]::placeholder {
4592
4568
  color: var(--ui-control-placeholder, var(--ui-text-secondary));
4593
4569
  opacity: 1;
4594
4570
  }
4595
- [data-component~="ui-input"][data-v-aa3c35f4]:hover:not(:focus):not(:disabled) {
4571
+ [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
4572
  border-color: var(
4597
4573
  --ui-input-border-hover,
4598
4574
  var(--_ui-default-input-border-hover, var(--ui-control-border-hover, var(--ui-text-secondary)))
4599
4575
  );
4600
4576
  }
4601
- [data-component~="ui-input"][data-v-aa3c35f4]:focus-visible {
4577
+ [data-component~="ui-input"][data-v-0d457505]:focus-visible {
4602
4578
  border-color: var(
4603
4579
  --ui-input-focus-border,
4604
4580
  var(--_ui-default-input-focus-border, var(--ui-control-focus, var(--ui-accent-solid)))
@@ -4615,14 +4591,14 @@ svg[data-v-ae1ec9d2-s] {
4615
4591
  }
4616
4592
 
4617
4593
  /* 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]) {
4594
+ [data-component~="ui-input"][aria-invalid="true"][data-v-0d457505],
4595
+ [data-component~="ui-input"][data-v-0d457505]:is(:user-invalid, [data-user-invalid]) {
4620
4596
  border-color: var(
4621
4597
  --ui-input-invalid-border,
4622
4598
  var(--_ui-default-input-invalid-border, var(--ui-field-danger, var(--ui-danger-solid)))
4623
4599
  );
4624
4600
  }
4625
- [data-component~="ui-input"][data-v-aa3c35f4]:is([aria-invalid="true"], :is(:user-invalid, [data-user-invalid])):focus-visible {
4601
+ [data-component~="ui-input"][data-v-0d457505]:is([aria-invalid="true"], :is(:user-invalid, [data-user-invalid])):focus-visible {
4626
4602
  box-shadow: var(
4627
4603
  --ui-input-invalid-focus-shadow,
4628
4604
  var(
@@ -4636,7 +4612,7 @@ svg[data-v-ae1ec9d2-s] {
4636
4612
  )
4637
4613
  );
4638
4614
  }
4639
- [data-component~="ui-input"][data-v-aa3c35f4]:disabled {
4615
+ [data-component~="ui-input"][data-v-0d457505]:disabled {
4640
4616
  background: var(--ui-control-surface-disabled, var(--ui-surface-muted));
4641
4617
  color: var(--ui-disabled-text);
4642
4618
  box-shadow: none;
@@ -4645,7 +4621,7 @@ svg[data-v-ae1ec9d2-s] {
4645
4621
 
4646
4622
  /* Forced colors drop box shadows, so the focus ring becomes an outline. */
4647
4623
  @media (forced-colors: active) {
4648
- [data-component~="ui-input"][data-v-aa3c35f4]:focus-visible {
4624
+ [data-component~="ui-input"][data-v-0d457505]:focus-visible {
4649
4625
  outline: var(
4650
4626
  --ui-input-focus-outline,
4651
4627
  var(--_ui-default-input-focus-outline, 2px solid Highlight)
@@ -4658,7 +4634,7 @@ svg[data-v-ae1ec9d2-s] {
4658
4634
  * scroll vertically inside the field. Native inputs already center their single line. */
4659
4635
 
4660
4636
  /* A component that sets its display still honours the hidden attribute on its root. */
4661
- [data-component~="ui-input"][hidden][data-v-aa3c35f4] {
4637
+ [data-component~="ui-input"][hidden][data-v-0d457505] {
4662
4638
  display: none;
4663
4639
  }
4664
4640
 
@@ -4682,7 +4658,7 @@ svg[data-v-ae1ec9d2-s] {
4682
4658
  whole value is. The action slot takes one button at the end, inside the border, for the one
4683
4659
  thing the field is for ("Continue" after a site's address), so it reads as the field's action
4684
4660
  and not the form's. */
4685
- [data-component~="ui-input-group"][data-v-51eefe72] {
4661
+ [data-component~="ui-input-group"][data-v-5ed34845] {
4686
4662
  /* The group's own border and height stand for the input's, so the group is a lone Input's height.
4687
4663
  Hooks do not inherit, so these are defaults for the input; its own hooks still win. */
4688
4664
  --_ui-default-input-border-width: 0;
@@ -4718,36 +4694,36 @@ svg[data-v-ae1ec9d2-s] {
4718
4694
  }
4719
4695
 
4720
4696
  /* 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"]) {
4697
+ [data-component~="ui-input-group"][data-v-5ed34845]:has(.field [data-ui-input-state~="size=sm"]) {
4722
4698
  min-block-size: var(--ui-control-size-sm);
4723
4699
  }
4724
- [data-component~="ui-input-group"][data-v-51eefe72]:has(.field [data-ui-input-state~="size=lg"]) {
4700
+ [data-component~="ui-input-group"][data-v-5ed34845]:has(.field [data-ui-input-state~="size=lg"]) {
4725
4701
  min-block-size: var(--ui-control-size-lg);
4726
4702
  }
4727
4703
  @media (pointer: coarse) {
4728
- [data-component~="ui-input-group"][data-v-51eefe72]:has(.field [data-ui-input-state~="size=sm"]) {
4704
+ [data-component~="ui-input-group"][data-v-5ed34845]:has(.field [data-ui-input-state~="size=sm"]) {
4729
4705
  min-block-size: var(--ui-control-min-block-size);
4730
4706
  }
4731
4707
  }
4732
- [data-component~="ui-input-group"][data-v-51eefe72]:hover:not(:has(input:focus, input:disabled)) {
4708
+ [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
4709
  border-color: var(--ui-control-border-hover, var(--ui-text-secondary));
4734
4710
  }
4735
4711
 
4736
4712
  /* The ring shows when the field's input would show its own: when it is focus-visible, which a
4737
4713
  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) {
4714
+ [data-component~="ui-input-group"][data-v-5ed34845]:has(.field input:focus-visible) {
4739
4715
  border-color: var(--ui-control-focus, var(--ui-accent-solid));
4740
4716
  box-shadow:
4741
4717
  var(--ui-control-inset),
4742
4718
  var(--ui-control-focus-halo-shadow);
4743
4719
  }
4744
- [data-component~="ui-input-group"][data-v-51eefe72]:has([aria-invalid="true"], :is(:user-invalid, [data-user-invalid])) {
4720
+ [data-component~="ui-input-group"][data-v-5ed34845]:has([aria-invalid="true"], :is(:user-invalid, [data-user-invalid])) {
4745
4721
  border-color: var(
4746
4722
  --ui-input-group-invalid-border,
4747
4723
  var(--ui-field-danger, var(--ui-danger-solid))
4748
4724
  );
4749
4725
  }
4750
- [data-component~="ui-input-group"][data-v-51eefe72]:has(input:is([aria-invalid="true"], :is(:user-invalid, [data-user-invalid])):focus-visible) {
4726
+ [data-component~="ui-input-group"][data-v-5ed34845]:has(input:is([aria-invalid="true"], :is(:user-invalid, [data-user-invalid])):focus-visible) {
4751
4727
  box-shadow: var(
4752
4728
  --ui-input-group-invalid-focus-shadow,
4753
4729
  var(--ui-control-inset),
@@ -4761,23 +4737,23 @@ svg[data-v-ae1ec9d2-s] {
4761
4737
 
4762
4738
  /* Forced colors drop box shadows, so the focus ring becomes an outline. */
4763
4739
  @media (forced-colors: active) {
4764
- [data-component~="ui-input-group"][data-v-51eefe72]:has(input:focus-visible) {
4740
+ [data-component~="ui-input-group"][data-v-5ed34845]:has(input:focus-visible) {
4765
4741
  outline: 2px solid Highlight;
4766
4742
  outline-offset: 1px;
4767
4743
  }
4768
4744
  }
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) {
4745
+ [data-component~="ui-input-group"][data-ui-input-group-state~="disabled"][data-v-5ed34845],
4746
+ [data-component~="ui-input-group"][data-v-5ed34845]:has(input:disabled) {
4771
4747
  background: var(--ui-control-surface-disabled, var(--ui-surface-muted));
4772
4748
  box-shadow: none;
4773
4749
  cursor: not-allowed;
4774
4750
  }
4775
- .field[data-v-51eefe72] {
4751
+ .field[data-v-5ed34845] {
4776
4752
  display: flex;
4777
4753
  flex: 1;
4778
4754
  min-inline-size: 0;
4779
4755
  }
4780
- .affix[data-v-51eefe72] {
4756
+ .affix[data-v-5ed34845] {
4781
4757
  display: inline-flex;
4782
4758
  flex: none;
4783
4759
  align-items: center;
@@ -4790,19 +4766,19 @@ svg[data-v-ae1ec9d2-s] {
4790
4766
 
4791
4767
  /* Centred rather than padded above and below: the group is exactly a lone Input's height, so a
4792
4768
  small button sits inside it with the difference split evenly, and the field keeps its height. */
4793
- .action[data-v-51eefe72] {
4769
+ .action[data-v-5ed34845] {
4794
4770
  display: flex;
4795
4771
  flex: none;
4796
4772
  align-items: center;
4797
4773
  padding-inline: var(--ui-space-1);
4798
4774
  }
4799
- .affix[data-v-51eefe72]:empty,
4800
- .action[data-v-51eefe72]:empty {
4775
+ .affix[data-v-5ed34845]:empty,
4776
+ .action[data-v-5ed34845]:empty {
4801
4777
  display: none;
4802
4778
  }
4803
4779
 
4804
4780
  /* A component that sets its display still honours the hidden attribute on its root. */
4805
- [data-component~="ui-input-group"][hidden][data-v-51eefe72] {
4781
+ [data-component~="ui-input-group"][hidden][data-v-5ed34845] {
4806
4782
  display: none;
4807
4783
  }
4808
4784
 
@@ -5043,45 +5019,66 @@ svg[data-v-ae1ec9d2-s] {
5043
5019
  syntax: "*";
5044
5020
  inherits: false;
5045
5021
  }
5046
- [data-component~="ui-listbox"][data-v-44b33b05] {
5022
+ [data-component~="ui-listbox"][data-v-db56e4d0] {
5023
+ position: relative;
5047
5024
  box-sizing: border-box;
5048
5025
  display: block;
5049
5026
  inline-size: 100%;
5050
5027
  min-inline-size: 0;
5051
- min-block-size: var(--ui-control-min-block-size);
5052
5028
  margin: 0;
5053
5029
  padding: var(--ui-space-1);
5054
5030
  border: 1px solid var(--ui-listbox-border, var(--ui-control-border));
5055
5031
  border-radius: var(--ui-listbox-radius, var(--ui-field-radius, var(--ui-radius-md)));
5056
5032
  background: var(--ui-listbox-surface, var(--ui-control-surface));
5057
5033
  color: var(--ui-text-primary);
5058
- color-scheme: light dark;
5059
5034
  font: inherit;
5060
5035
  line-height: var(--ui-line-height-md);
5061
5036
  box-shadow: var(--ui-control-inset);
5037
+ outline: none;
5062
5038
  }
5063
- [data-component~="ui-listbox"] option[data-v-44b33b05],
5064
- [data-component~="ui-listbox"] optgroup[data-v-44b33b05] {
5065
- padding: var(--ui-space-2);
5039
+ .choices[data-v-db56e4d0] {
5040
+ max-block-size: calc(max(2, var(--_rows, 5)) * var(--ui-control-size-md));
5041
+ }
5042
+ [data-component~="ui-listbox"][data-v-db56e4d0]:not([data-enhanced]) {
5043
+ padding: 0;
5044
+ border: 0;
5045
+ background: transparent;
5046
+ box-shadow: none;
5047
+ }
5048
+ [data-component~="ui-listbox"]:not([data-enhanced]) .choices[data-v-db56e4d0],
5049
+ [data-component~="ui-listbox"][data-enhanced] .fallback[data-v-db56e4d0] {
5050
+ display: none;
5051
+ }
5052
+ .fallback[data-v-db56e4d0] {
5053
+ box-sizing: border-box;
5054
+ inline-size: 100%;
5066
5055
  font: inherit;
5067
5056
  }
5068
- [data-component~="ui-listbox"][data-v-44b33b05]:focus-visible {
5057
+ .validity[data-v-db56e4d0] {
5058
+ position: absolute;
5059
+ inline-size: 1px;
5060
+ block-size: 1px;
5061
+ overflow: hidden;
5062
+ clip-path: inset(50%);
5063
+ opacity: 0;
5064
+ pointer-events: none;
5065
+ }
5066
+ [data-component~="ui-listbox"][data-v-db56e4d0]:focus-visible {
5069
5067
  border-color: var(--ui-control-focus);
5070
5068
  outline: 2px solid var(--ui-focus-ring);
5071
5069
  outline-offset: 2px;
5072
5070
  box-shadow: var(--ui-listbox-focus-shadow, var(--ui-focus-halo));
5073
5071
  }
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]) {
5072
+ [data-component~="ui-listbox"][aria-invalid="true"][data-v-db56e4d0] {
5076
5073
  border-color: var(--ui-listbox-invalid-border, var(--ui-field-danger, var(--ui-danger)));
5077
5074
  }
5078
- [data-component~="ui-listbox"][data-v-44b33b05]:disabled {
5075
+ [data-component~="ui-listbox"][aria-disabled="true"][data-v-db56e4d0] {
5079
5076
  background: var(--ui-control-surface-disabled);
5080
5077
  color: var(--ui-disabled-text);
5081
5078
  box-shadow: none;
5082
5079
  cursor: not-allowed;
5083
5080
  }
5084
- [data-component~="ui-listbox"][hidden][data-v-44b33b05] {
5081
+ [data-component~="ui-listbox"][hidden][data-v-db56e4d0] {
5085
5082
  display: none;
5086
5083
  }
5087
5084
 
@@ -6429,7 +6426,7 @@ dialog[data-v-b1cde00b] {
6429
6426
  syntax: "*";
6430
6427
  inherits: false;
6431
6428
  }
6432
- [data-component~="ui-select"][data-v-3f68a24f] {
6429
+ [data-component~="ui-select"][data-v-699dcb22] {
6433
6430
  box-sizing: border-box;
6434
6431
  display: inline-block;
6435
6432
  inline-size: var(--ui-select-inline-size, 100%);
@@ -6453,7 +6450,7 @@ dialog[data-v-b1cde00b] {
6453
6450
 
6454
6451
  /* The select draws its own chevron: the native caret cannot be inset or sized consistently.
6455
6452
  * 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] {
6453
+ [data-component~="ui-select"][data-v-699dcb22] {
6457
6454
  appearance: none;
6458
6455
  padding-inline-end: calc(var(--ui-space-3) + 1.5rem);
6459
6456
  background-image: var(
@@ -6464,13 +6461,13 @@ dialog[data-v-b1cde00b] {
6464
6461
  background-position: right var(--ui-space-3) center;
6465
6462
  background-size: 1.125rem 1.125rem;
6466
6463
  }
6467
- [data-component~="ui-select"][data-v-3f68a24f]:hover:not(:focus):not(:disabled) {
6464
+ [data-component~="ui-select"][data-v-699dcb22]:hover:not(:focus):not(:disabled):not([aria-invalid="true"]):not(:is(:user-invalid, [data-user-invalid])) {
6468
6465
  border-color: var(
6469
6466
  --ui-select-border-hover,
6470
6467
  var(--ui-control-border-hover, var(--ui-text-secondary))
6471
6468
  );
6472
6469
  }
6473
- [data-component~="ui-select"][data-v-3f68a24f]:focus-visible {
6470
+ [data-component~="ui-select"][data-v-699dcb22]:focus-visible {
6474
6471
  border-color: var(--ui-select-focus-border, var(--ui-control-focus, var(--ui-accent-solid)));
6475
6472
  outline: none;
6476
6473
  box-shadow: var(
@@ -6481,11 +6478,11 @@ dialog[data-v-b1cde00b] {
6481
6478
  }
6482
6479
 
6483
6480
  /* 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]) {
6481
+ [data-component~="ui-select"][aria-invalid="true"][data-v-699dcb22],
6482
+ [data-component~="ui-select"][data-v-699dcb22]:is(:user-invalid, [data-user-invalid]) {
6486
6483
  border-color: var(--ui-select-invalid-border, var(--ui-field-danger, var(--ui-danger-solid)));
6487
6484
  }
6488
- [data-component~="ui-select"][data-v-3f68a24f]:is([aria-invalid="true"], :is(:user-invalid, [data-user-invalid])):focus-visible {
6485
+ [data-component~="ui-select"][data-v-699dcb22]:is([aria-invalid="true"], :is(:user-invalid, [data-user-invalid])):focus-visible {
6489
6486
  box-shadow: var(
6490
6487
  --ui-select-invalid-focus-shadow,
6491
6488
  var(--ui-control-inset),
@@ -6496,13 +6493,13 @@ dialog[data-v-b1cde00b] {
6496
6493
  )
6497
6494
  );
6498
6495
  }
6499
- [data-component~="ui-select"][data-v-3f68a24f]:disabled {
6496
+ [data-component~="ui-select"][data-v-699dcb22]:disabled {
6500
6497
  background-color: var(--ui-control-surface-disabled, var(--ui-surface-muted));
6501
6498
  color: var(--ui-disabled-text);
6502
6499
  box-shadow: none;
6503
6500
  cursor: not-allowed;
6504
6501
  }
6505
- [data-component~="ui-select"][data-ui-select-state~="size=sm"][data-v-3f68a24f] {
6502
+ [data-component~="ui-select"][data-ui-select-state~="size=sm"][data-v-699dcb22] {
6506
6503
  min-block-size: var(--ui-control-size-sm);
6507
6504
  padding: var(--ui-space-1) var(--ui-space-2);
6508
6505
  padding-inline-end: calc(var(--ui-space-2) + var(--ui-icon-size-sm) + var(--ui-space-1));
@@ -6510,7 +6507,7 @@ dialog[data-v-b1cde00b] {
6510
6507
  background-size: var(--ui-icon-size-sm) var(--ui-icon-size-sm);
6511
6508
  font-size: var(--ui-font-size-sm);
6512
6509
  }
6513
- [data-component~="ui-select"][data-ui-select-state~="size=lg"][data-v-3f68a24f] {
6510
+ [data-component~="ui-select"][data-ui-select-state~="size=lg"][data-v-699dcb22] {
6514
6511
  min-block-size: var(--ui-control-size-lg);
6515
6512
  padding: var(--ui-space-3) var(--ui-space-4);
6516
6513
  padding-inline-end: calc(var(--ui-space-4) + 1.5rem);
@@ -6521,14 +6518,14 @@ dialog[data-v-b1cde00b] {
6521
6518
  /* Under touch a small field is still a touch-sized target, as a small button is, and keeps
6522
6519
  body-size text: below 16px, iOS zooms the page into the focused field. */
6523
6520
  @media (pointer: coarse) {
6524
- [data-component~="ui-select"][data-ui-select-state~="size=sm"][data-v-3f68a24f] {
6521
+ [data-component~="ui-select"][data-ui-select-state~="size=sm"][data-v-699dcb22] {
6525
6522
  min-block-size: var(--ui-control-min-block-size);
6526
6523
  font-size: inherit;
6527
6524
  }
6528
6525
  }
6529
6526
 
6530
6527
  /* A component that sets its display still honours the hidden attribute on its root. */
6531
- [data-component~="ui-select"][hidden][data-v-3f68a24f] {
6528
+ [data-component~="ui-select"][hidden][data-v-699dcb22] {
6532
6529
  display: none;
6533
6530
  }
6534
6531
 
@@ -7440,7 +7437,7 @@ tbody tr[data-v-a58b58d4-s]:last-child > * {
7440
7437
  syntax: "*";
7441
7438
  inherits: false;
7442
7439
  }
7443
- [data-component~="ui-textarea"][data-v-f371e58f] {
7440
+ [data-component~="ui-textarea"][data-v-a2e0e09f] {
7444
7441
  box-sizing: border-box;
7445
7442
  display: inline-block;
7446
7443
  inline-size: 100%;
@@ -7465,18 +7462,18 @@ tbody tr[data-v-a58b58d4-s]:last-child > * {
7465
7462
  }
7466
7463
 
7467
7464
  /* 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 {
7465
+ [data-component~="ui-textarea"][data-v-a2e0e09f]::selection {
7469
7466
  background: color-mix(in srgb, var(--ui-accent-solid) 20%, transparent);
7470
7467
  color: inherit;
7471
7468
  }
7472
- [data-component~="ui-textarea"][data-v-f371e58f]::placeholder {
7469
+ [data-component~="ui-textarea"][data-v-a2e0e09f]::placeholder {
7473
7470
  color: var(--ui-control-placeholder, var(--ui-text-secondary));
7474
7471
  opacity: 1;
7475
7472
  }
7476
- [data-component~="ui-textarea"][data-v-f371e58f]:hover:not(:focus):not(:disabled) {
7473
+ [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
7474
  border-color: var(--ui-control-border-hover, var(--ui-text-secondary));
7478
7475
  }
7479
- [data-component~="ui-textarea"][data-v-f371e58f]:focus-visible {
7476
+ [data-component~="ui-textarea"][data-v-a2e0e09f]:focus-visible {
7480
7477
  border-color: var(--ui-control-focus, var(--ui-accent-solid));
7481
7478
  outline: none;
7482
7479
  box-shadow: var(
@@ -7487,11 +7484,11 @@ tbody tr[data-v-a58b58d4-s]:last-child > * {
7487
7484
  }
7488
7485
 
7489
7486
  /* 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]) {
7487
+ [data-component~="ui-textarea"][aria-invalid="true"][data-v-a2e0e09f],
7488
+ [data-component~="ui-textarea"][data-v-a2e0e09f]:is(:user-invalid, [data-user-invalid]) {
7492
7489
  border-color: var(--ui-textarea-invalid-border, var(--ui-field-danger, var(--ui-danger-solid)));
7493
7490
  }
7494
- [data-component~="ui-textarea"][data-v-f371e58f]:is([aria-invalid="true"], :is(:user-invalid, [data-user-invalid])):focus-visible {
7491
+ [data-component~="ui-textarea"][data-v-a2e0e09f]:is([aria-invalid="true"], :is(:user-invalid, [data-user-invalid])):focus-visible {
7495
7492
  box-shadow: var(
7496
7493
  --ui-textarea-invalid-focus-shadow,
7497
7494
  var(--ui-control-inset),
@@ -7502,24 +7499,24 @@ tbody tr[data-v-a58b58d4-s]:last-child > * {
7502
7499
  )
7503
7500
  );
7504
7501
  }
7505
- [data-component~="ui-textarea"][data-v-f371e58f]:disabled {
7502
+ [data-component~="ui-textarea"][data-v-a2e0e09f]:disabled {
7506
7503
  background: var(--ui-control-surface-disabled, var(--ui-surface-muted));
7507
7504
  color: var(--ui-disabled-text);
7508
7505
  box-shadow: none;
7509
7506
  cursor: not-allowed;
7510
7507
  }
7511
- [data-component~="ui-textarea"][data-ui-textarea-state~="size=sm"][data-v-f371e58f] {
7508
+ [data-component~="ui-textarea"][data-ui-textarea-state~="size=sm"][data-v-a2e0e09f] {
7512
7509
  --_padding-block: var(--ui-space-1);
7513
7510
  padding: var(--ui-space-1) var(--ui-space-2);
7514
7511
  font-size: var(--ui-font-size-sm);
7515
7512
  }
7516
- [data-component~="ui-textarea"][data-ui-textarea-state~="size=lg"][data-v-f371e58f] {
7513
+ [data-component~="ui-textarea"][data-ui-textarea-state~="size=lg"][data-v-a2e0e09f] {
7517
7514
  --_padding-block: var(--ui-space-3);
7518
7515
  padding: var(--ui-space-3) var(--ui-space-4);
7519
7516
  font-size: var(--ui-font-size-md);
7520
7517
  }
7521
7518
  @supports (field-sizing: content) {
7522
- [data-component~="ui-textarea"][data-ui-textarea-state~="autosize"][data-v-f371e58f] {
7519
+ [data-component~="ui-textarea"][data-ui-textarea-state~="autosize"][data-v-a2e0e09f] {
7523
7520
  field-sizing: content;
7524
7521
  min-block-size: calc(var(--_rows) * 1lh + var(--_padding-block) + var(--_padding-block) + 2px);
7525
7522
  }
@@ -7527,13 +7524,13 @@ tbody tr[data-v-a58b58d4-s]:last-child > * {
7527
7524
 
7528
7525
  /* Below 16px, iOS zooms the page into the focused field, so touch keeps body-size text. */
7529
7526
  @media (pointer: coarse) {
7530
- [data-component~="ui-textarea"][data-ui-textarea-state~="size=sm"][data-v-f371e58f] {
7527
+ [data-component~="ui-textarea"][data-ui-textarea-state~="size=sm"][data-v-a2e0e09f] {
7531
7528
  font-size: inherit;
7532
7529
  }
7533
7530
  }
7534
7531
 
7535
7532
  /* A component that sets its display still honours the hidden attribute on its root. */
7536
- [data-component~="ui-textarea"][hidden][data-v-f371e58f] {
7533
+ [data-component~="ui-textarea"][hidden][data-v-a2e0e09f] {
7537
7534
  display: none;
7538
7535
  }
7539
7536