@threadlabs/looma 0.26.0 → 0.26.2

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.
@@ -305,6 +305,10 @@ svg[data-v-abaeb064] {
305
305
  syntax: "*";
306
306
  inherits: false;
307
307
  }
308
+ @property --ui-badge-circle-size {
309
+ syntax: "*";
310
+ inherits: false;
311
+ }
308
312
  @property --ui-badge-dot-size {
309
313
  syntax: "*";
310
314
  inherits: false;
@@ -349,7 +353,7 @@ svg[data-v-abaeb064] {
349
353
  syntax: "*";
350
354
  inherits: false;
351
355
  }
352
- [data-component~="ui-badge"][data-v-a45f2b52] {
356
+ [data-component~="ui-badge"][data-v-c96818e7] {
353
357
  --_badge-surface: color-mix(in srgb, var(--ui-surface-subtle) 80%, var(--ui-surface-default));
354
358
  --_badge-text: var(--ui-text-secondary);
355
359
  /* Sit between the soft fill and its stronger theme ink. */
@@ -395,27 +399,27 @@ svg[data-v-abaeb064] {
395
399
 
396
400
  /* A constrained badge keeps its surface intact and ellipsizes only its label. The full
397
401
  text stays in the DOM for accessible names and consumers' selected values. */
398
- .label[data-v-a45f2b52] {
402
+ .label[data-v-c96818e7] {
399
403
  display: block;
400
404
  min-inline-size: 0;
401
405
  overflow: hidden;
402
406
  text-overflow: ellipsis;
403
407
  }
404
- .label[data-v-a45f2b52]:empty {
408
+ .label[data-v-c96818e7]:empty {
405
409
  display: none;
406
410
  }
407
411
 
408
412
  /* Icon content has its own flex item so label ellipsis never clips its strokes. */
409
- .icon[data-v-a45f2b52] {
413
+ .icon[data-v-c96818e7] {
410
414
  display: inline-flex;
411
415
  align-items: center;
412
416
  justify-content: center;
413
417
  flex: none;
414
418
  }
415
- .icon[data-v-a45f2b52]:empty {
419
+ .icon[data-v-c96818e7]:empty {
416
420
  display: none;
417
421
  }
418
- .icon svg[data-v-a45f2b52-s] {
422
+ .icon svg[data-v-c96818e7-s] {
419
423
  display: block;
420
424
  inline-size: 1em;
421
425
  block-size: 1em;
@@ -423,20 +427,20 @@ svg[data-v-abaeb064] {
423
427
  }
424
428
 
425
429
  /* Ordinary icon-plus-text children keep inline ellipsis, with explicit glyph spacing. */
426
- .label svg[data-v-a45f2b52-s] {
430
+ .label svg[data-v-c96818e7-s] {
427
431
  inline-size: 1em;
428
432
  block-size: 1em;
429
433
  vertical-align: middle;
430
434
  margin-inline-end: var(--ui-space-1);
431
435
  }
432
- .label[data-v-a45f2b52]:has(svg) {
436
+ .label[data-v-c96818e7]:has(svg) {
433
437
  text-box-trim: none;
434
438
  }
435
439
 
436
440
  /* Text-only badges retain their trimmed inline baseline. Icon content needs a flex row;
437
441
  trimming its label separately keeps the glyph centered without changing adjacent lines. */
438
442
  @supports (text-box-trim: trim-both) {
439
- [data-component~="ui-badge"][data-v-a45f2b52] {
443
+ [data-component~="ui-badge"][data-v-c96818e7] {
440
444
  display: inline-block;
441
445
  min-block-size: var(--ui-badge-min-block-size, 1.5rem);
442
446
  text-align: center;
@@ -444,17 +448,17 @@ svg[data-v-abaeb064] {
444
448
  text-box-trim: trim-both;
445
449
  text-box-edge: text;
446
450
  }
447
- [data-component~="ui-badge"][data-v-a45f2b52]:has(.icon:not(:empty)),
448
- [data-component~="ui-badge"][data-v-a45f2b52]:has(.label svg) {
451
+ [data-component~="ui-badge"][data-v-c96818e7]:has(.icon:not(:empty)),
452
+ [data-component~="ui-badge"][data-v-c96818e7]:has(.label svg) {
449
453
  display: inline-flex;
450
454
  text-box-trim: none;
451
455
  }
452
- [data-component~="ui-badge"]:has(.icon:not(:empty)) .label[data-v-a45f2b52] {
456
+ [data-component~="ui-badge"]:has(.icon:not(:empty)) .label[data-v-c96818e7] {
453
457
  text-box-trim: trim-both;
454
458
  text-box-edge: text;
455
459
  }
456
460
  }
457
- [data-component~="ui-badge"][data-ui-badge-state~="size=xs"][data-v-a45f2b52] {
461
+ [data-component~="ui-badge"][data-ui-badge-state~="size=xs"][data-v-c96818e7] {
458
462
  box-sizing: border-box;
459
463
  min-inline-size: 1rem;
460
464
  min-block-size: var(--ui-badge-min-block-size, 1rem);
@@ -462,52 +466,52 @@ svg[data-v-abaeb064] {
462
466
  font-size: var(--ui-badge-font-size, var(--ui-font-size-2xs));
463
467
  line-height: var(--ui-badge-line-height, 1);
464
468
  }
465
- [data-component~="ui-badge"][data-ui-badge-state~="tone=accent"][data-v-a45f2b52] {
469
+ [data-component~="ui-badge"][data-ui-badge-state~="tone=accent"][data-v-c96818e7] {
466
470
  --_badge-surface: var(--ui-accent-strong-surface, var(--ui-accent-solid));
467
471
  --_badge-border: var(--ui-accent-strong-surface, var(--ui-accent-solid));
468
472
  --_badge-text: var(--ui-accent-on-strong, var(--ui-text-on-accent));
469
473
  }
470
- [data-component~="ui-badge"][data-ui-badge-state~="tone=danger"][data-v-a45f2b52] {
474
+ [data-component~="ui-badge"][data-ui-badge-state~="tone=danger"][data-v-c96818e7] {
471
475
  --_badge-surface: var(--ui-danger-strong-surface, var(--ui-danger-solid));
472
476
  --_badge-border: var(--ui-danger-strong-surface, var(--ui-danger-solid));
473
477
  --_badge-text: var(--ui-danger-on-strong, var(--ui-text-on-accent));
474
478
  }
475
- [data-component~="ui-badge"][data-ui-badge-state~="tone=success"][data-v-a45f2b52] {
479
+ [data-component~="ui-badge"][data-ui-badge-state~="tone=success"][data-v-c96818e7] {
476
480
  --_badge-surface: var(--ui-success-strong-surface, var(--ui-success-solid));
477
481
  --_badge-border: var(--ui-success-strong-surface, var(--ui-success-solid));
478
482
  --_badge-text: var(--ui-success-on-strong, var(--ui-text-on-accent));
479
483
  }
480
- [data-component~="ui-badge"][data-ui-badge-state~="tone=warning"][data-v-a45f2b52] {
484
+ [data-component~="ui-badge"][data-ui-badge-state~="tone=warning"][data-v-c96818e7] {
481
485
  --_badge-surface: var(--ui-warning-strong-surface, var(--ui-warning-solid));
482
486
  --_badge-border: var(--ui-warning-strong-surface, var(--ui-warning-solid));
483
487
  --_badge-text: var(--ui-warning-on-strong, var(--ui-text-on-accent));
484
488
  }
485
- [data-component~="ui-badge"][data-ui-badge-state~="tone=info"][data-v-a45f2b52] {
489
+ [data-component~="ui-badge"][data-ui-badge-state~="tone=info"][data-v-c96818e7] {
486
490
  --_badge-surface: var(--ui-info-strong-surface, var(--ui-info-solid));
487
491
  --_badge-border: var(--ui-info-strong-surface, var(--ui-info-solid));
488
492
  --_badge-text: var(--ui-info-on-strong, var(--ui-text-on-accent));
489
493
  }
490
- [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=accent"][data-v-a45f2b52] {
494
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=accent"][data-v-c96818e7] {
491
495
  --_badge-surface: color-mix(in srgb, var(--ui-accent-solid) 19%, var(--ui-surface-default));
492
496
  --_badge-border: color-mix(in srgb, var(--ui-accent-solid) 25%, var(--ui-surface-default));
493
497
  --_badge-text: var(--ui-accent-subtle-text, var(--ui-accent-solid));
494
498
  }
495
- [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=danger"][data-v-a45f2b52] {
499
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=danger"][data-v-c96818e7] {
496
500
  --_badge-surface: color-mix(in srgb, var(--ui-danger-solid) 19%, var(--ui-surface-default));
497
501
  --_badge-border: color-mix(in srgb, var(--ui-danger-solid) 25%, var(--ui-surface-default));
498
502
  --_badge-text: var(--ui-danger-subtle-text, var(--ui-danger-solid));
499
503
  }
500
- [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=success"][data-v-a45f2b52] {
504
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=success"][data-v-c96818e7] {
501
505
  --_badge-surface: color-mix(in srgb, var(--ui-success-solid) 19%, var(--ui-surface-default));
502
506
  --_badge-border: color-mix(in srgb, var(--ui-success-solid) 25%, var(--ui-surface-default));
503
507
  --_badge-text: var(--ui-success-subtle-text, var(--ui-success-solid));
504
508
  }
505
- [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=warning"][data-v-a45f2b52] {
509
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=warning"][data-v-c96818e7] {
506
510
  --_badge-surface: color-mix(in srgb, var(--ui-warning-solid) 19%, var(--ui-surface-default));
507
511
  --_badge-border: color-mix(in srgb, var(--ui-warning-solid) 25%, var(--ui-surface-default));
508
512
  --_badge-text: var(--ui-warning-subtle-text, var(--ui-warning-solid));
509
513
  }
510
- [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=info"][data-v-a45f2b52] {
514
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=info"][data-v-c96818e7] {
511
515
  --_badge-surface: color-mix(in srgb, var(--ui-info-solid) 19%, var(--ui-surface-default));
512
516
  --_badge-border: color-mix(in srgb, var(--ui-info-solid) 25%, var(--ui-surface-default));
513
517
  --_badge-text: var(--ui-info-subtle-text, var(--ui-info-solid));
@@ -515,12 +519,12 @@ svg[data-v-abaeb064] {
515
519
 
516
520
  /* A solid colour fills with the ink. Its text is the page surface, mixed at 0% only so that it too is
517
521
  invalid while the hook is unset. */
518
- [data-component~="ui-badge"][data-ui-badge-state~="variant=solid"][data-v-a45f2b52] {
522
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=solid"][data-v-c96818e7] {
519
523
  --_badge-color-surface: var(--_badge-color-ink);
520
524
  --_badge-color-border: var(--_badge-color-ink);
521
525
  --_badge-color-text: color-mix(in oklab, var(--_ui-badge-color) 0%, var(--ui-surface-default));
522
526
  }
523
- [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-v-a45f2b52] {
527
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-v-c96818e7] {
524
528
  --_badge-surface: var(--ui-surface-default);
525
529
  --_badge-border: var(--ui-border-strong);
526
530
  --_badge-text: var(--ui-text-secondary);
@@ -528,29 +532,29 @@ svg[data-v-abaeb064] {
528
532
  --_badge-color-surface: initial;
529
533
  --_badge-color-border: var(--_badge-color-ink);
530
534
  }
531
- [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-ui-badge-state~="tone=accent"][data-v-a45f2b52] {
535
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-ui-badge-state~="tone=accent"][data-v-c96818e7] {
532
536
  --_badge-border: var(--ui-accent-solid);
533
537
  --_badge-text: var(--ui-accent-subtle-text, var(--ui-accent-solid));
534
538
  }
535
- [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-ui-badge-state~="tone=danger"][data-v-a45f2b52] {
539
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-ui-badge-state~="tone=danger"][data-v-c96818e7] {
536
540
  --_badge-border: var(--ui-danger-solid);
537
541
  --_badge-text: var(--ui-danger-subtle-text, var(--ui-danger-solid));
538
542
  }
539
- [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-ui-badge-state~="tone=success"][data-v-a45f2b52] {
543
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-ui-badge-state~="tone=success"][data-v-c96818e7] {
540
544
  --_badge-border: var(--ui-success-solid);
541
545
  --_badge-text: var(--ui-success-subtle-text, var(--ui-success-solid));
542
546
  }
543
- [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-ui-badge-state~="tone=warning"][data-v-a45f2b52] {
547
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-ui-badge-state~="tone=warning"][data-v-c96818e7] {
544
548
  --_badge-border: var(--ui-warning-solid);
545
549
  --_badge-text: var(--ui-warning-subtle-text, var(--ui-warning-solid));
546
550
  }
547
- [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-ui-badge-state~="tone=info"][data-v-a45f2b52] {
551
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-ui-badge-state~="tone=info"][data-v-c96818e7] {
548
552
  --_badge-border: var(--ui-info-solid);
549
553
  --_badge-text: var(--ui-info-subtle-text, var(--ui-info-solid));
550
554
  }
551
555
 
552
556
  /* An icon mark keeps the existing tone recipe and follows the global spacing and radius. */
553
- [data-component~="ui-badge"][data-ui-badge-state~="shape=square"][data-v-a45f2b52] {
557
+ [data-component~="ui-badge"][data-ui-badge-state~="shape=square"][data-v-c96818e7] {
554
558
  --_badge-square-size: var(--ui-badge-square-size, calc(var(--ui-space-4) * 2));
555
559
  display: inline-flex;
556
560
  box-sizing: border-box;
@@ -563,23 +567,53 @@ svg[data-v-abaeb064] {
563
567
  border-radius: var(--ui-radius-md);
564
568
  text-box-trim: none;
565
569
  }
566
- [data-component~="ui-badge"][data-ui-badge-state~="shape=square"][data-ui-badge-state~="size=xs"][data-v-a45f2b52] {
570
+ [data-component~="ui-badge"][data-ui-badge-state~="shape=square"][data-ui-badge-state~="size=xs"][data-v-c96818e7] {
567
571
  --_badge-square-size: var(--ui-badge-square-size, calc(var(--ui-space-3) * 2));
568
572
  }
569
- [data-component~="ui-badge"][data-ui-badge-state~="shape=square"] .label[data-v-a45f2b52] {
573
+ [data-component~="ui-badge"][data-ui-badge-state~="shape=square"] .label[data-v-c96818e7] {
574
+ display: inline-flex;
575
+ align-items: center;
576
+ justify-content: center;
577
+ }
578
+ [data-component~="ui-badge"][data-ui-badge-state~="shape=square"] .label svg[data-v-c96818e7-s] {
579
+ margin-inline-end: 0;
580
+ }
581
+ [data-component~="ui-badge"][data-ui-badge-state~="shape=square"] .label[data-v-c96818e7]:empty {
582
+ display: none;
583
+ }
584
+
585
+ /* A visible glyph needs fixed geometry, unlike a content-sized pill or a hidden-label dot. */
586
+ [data-component~="ui-badge"][data-ui-badge-state~="shape=circle"][data-v-c96818e7] {
587
+ --_badge-circle-size: var(--ui-badge-circle-size, calc(var(--ui-space-3) * 2));
588
+ display: inline-flex;
589
+ flex: none;
590
+ inline-size: var(--_badge-circle-size);
591
+ block-size: var(--_badge-circle-size);
592
+ min-inline-size: var(--_badge-circle-size);
593
+ min-block-size: var(--_badge-circle-size);
594
+ padding: 0;
595
+ border-radius: var(--ui-radius-round);
596
+ text-box-trim: none;
597
+ }
598
+ [data-component~="ui-badge"][data-ui-badge-state~="shape=circle"][data-ui-badge-state~="size=xs"][data-v-c96818e7] {
599
+ --_badge-circle-size: var(--ui-badge-circle-size, var(--ui-space-4));
600
+ }
601
+ [data-component~="ui-badge"][data-ui-badge-state~="shape=circle"] .label[data-v-c96818e7] {
570
602
  display: inline-flex;
571
603
  align-items: center;
572
604
  justify-content: center;
605
+ line-height: 1;
606
+ text-box-trim: none;
573
607
  }
574
- [data-component~="ui-badge"][data-ui-badge-state~="shape=square"] .label svg[data-v-a45f2b52-s] {
608
+ [data-component~="ui-badge"][data-ui-badge-state~="shape=circle"] .label svg[data-v-c96818e7-s] {
575
609
  margin-inline-end: 0;
576
610
  }
577
- [data-component~="ui-badge"][data-ui-badge-state~="shape=square"] .label[data-v-a45f2b52]:empty {
611
+ [data-component~="ui-badge"][data-ui-badge-state~="shape=circle"] .label[data-v-c96818e7]:empty {
578
612
  display: none;
579
613
  }
580
614
 
581
615
  /* A dot uses the badge's tone recipe; only its silhouette and visible label change. */
582
- [data-component~="ui-badge"][data-ui-badge-state~="shape=dot"][data-v-a45f2b52] {
616
+ [data-component~="ui-badge"][data-ui-badge-state~="shape=dot"][data-v-c96818e7] {
583
617
  position: relative;
584
618
  box-sizing: border-box;
585
619
  flex: none;
@@ -591,7 +625,7 @@ svg[data-v-abaeb064] {
591
625
  border-radius: var(--ui-radius-round);
592
626
  text-box-trim: none;
593
627
  }
594
- [data-component~="ui-badge"][data-ui-badge-state~="shape=dot"] .label[data-v-a45f2b52] {
628
+ [data-component~="ui-badge"][data-ui-badge-state~="shape=dot"] .label[data-v-c96818e7] {
595
629
  position: absolute;
596
630
  inline-size: 1px;
597
631
  block-size: 1px;
@@ -602,7 +636,7 @@ svg[data-v-abaeb064] {
602
636
 
603
637
  /* The clipped point needs an inset surface over an outer border-colour shape: a native border
604
638
  has no diagonal edge to follow. Keep this edge for every tag variant. */
605
- [data-component~="ui-badge"][data-ui-badge-state~="shape=tag"][data-v-a45f2b52] {
639
+ [data-component~="ui-badge"][data-ui-badge-state~="shape=tag"][data-v-c96818e7] {
606
640
  --_badge-point: var(--ui-badge-point, var(--ui-space-2));
607
641
 
608
642
  position: relative;
@@ -619,7 +653,7 @@ svg[data-v-abaeb064] {
619
653
  0 100%
620
654
  );
621
655
  }
622
- [data-component~="ui-badge"][data-ui-badge-state~="shape=tag"][data-v-a45f2b52]::before {
656
+ [data-component~="ui-badge"][data-ui-badge-state~="shape=tag"][data-v-c96818e7]::before {
623
657
  content: "";
624
658
  position: absolute;
625
659
  inset: 0;
@@ -634,34 +668,34 @@ svg[data-v-abaeb064] {
634
668
  );
635
669
  pointer-events: none;
636
670
  }
637
- [data-component~="ui-badge"][data-ui-badge-state~="shape=tag"][data-v-a45f2b52]:dir(rtl) {
671
+ [data-component~="ui-badge"][data-ui-badge-state~="shape=tag"][data-v-c96818e7]:dir(rtl) {
638
672
  padding-inline-end: var(--ui-badge-padding-inline, var(--ui-space-2));
639
673
  padding-inline-start: calc(
640
674
  var(--ui-badge-padding-inline, var(--ui-space-2)) + var(--_badge-point)
641
675
  );
642
676
  clip-path: polygon(var(--_badge-point) 0, 100% 0, 100% 100%, var(--_badge-point) 100%, 0 50%);
643
677
  }
644
- [data-component~="ui-badge"][data-ui-badge-state~="shape=tag"][data-v-a45f2b52]:dir(rtl)::before {
678
+ [data-component~="ui-badge"][data-ui-badge-state~="shape=tag"][data-v-c96818e7]:dir(rtl)::before {
645
679
  clip-path: polygon(var(--_badge-point) 0, 100% 0, 100% 100%, var(--_badge-point) 100%, 0 50%);
646
680
  }
647
681
  @media (forced-colors: active) {
648
- [data-component~="ui-badge"][data-ui-badge-state~="shape=dot"][data-v-a45f2b52] {
682
+ [data-component~="ui-badge"][data-ui-badge-state~="shape=dot"][data-v-c96818e7] {
649
683
  forced-color-adjust: none;
650
684
  border-color: CanvasText;
651
685
  background: CanvasText;
652
686
  }
653
- [data-component~="ui-badge"][data-ui-badge-state~="shape=tag"][data-v-a45f2b52] {
687
+ [data-component~="ui-badge"][data-ui-badge-state~="shape=tag"][data-v-c96818e7] {
654
688
  forced-color-adjust: none;
655
689
  background: CanvasText;
656
690
  color: CanvasText;
657
691
  }
658
- [data-component~="ui-badge"][data-ui-badge-state~="shape=tag"][data-v-a45f2b52]::before {
692
+ [data-component~="ui-badge"][data-ui-badge-state~="shape=tag"][data-v-c96818e7]::before {
659
693
  background: Canvas;
660
694
  }
661
695
  }
662
696
 
663
697
  /* A component that sets its display still honours the hidden attribute on its root. */
664
- [data-component~="ui-badge"][hidden][data-v-a45f2b52] {
698
+ [data-component~="ui-badge"][hidden][data-v-c96818e7] {
665
699
  display: none;
666
700
  }
667
701
 
@@ -2285,7 +2319,7 @@ button[data-v-2be0ffde] {
2285
2319
  syntax: "*";
2286
2320
  inherits: false;
2287
2321
  }
2288
- [data-component~="ui-container"][data-v-955318c7] {
2322
+ [data-component~="ui-container"][data-v-d3919ea4] {
2289
2323
  --_container-measure: 65ch;
2290
2324
  --_container-gutters: var(--ui-space-4);
2291
2325
  display: block;
@@ -2294,24 +2328,32 @@ button[data-v-2be0ffde] {
2294
2328
  margin-inline: auto;
2295
2329
  padding-inline: var(--ui-container-gutters, var(--_container-gutters));
2296
2330
  }
2297
- [data-component~="ui-container"][data-ui-container-state~="measure=narrow"][data-v-955318c7] {
2331
+ [data-component~="ui-container"][data-ui-container-state~="measure=narrow"][data-v-d3919ea4] {
2298
2332
  --_container-measure: 45ch;
2299
2333
  }
2300
- [data-component~="ui-container"][data-ui-container-state~="measure=wide"][data-v-955318c7] {
2334
+ [data-component~="ui-container"][data-ui-container-state~="fill"][data-v-d3919ea4] {
2335
+ box-sizing: border-box;
2336
+ display: flex;
2337
+ flex-direction: column;
2338
+ flex: 1;
2339
+ min-inline-size: 0;
2340
+ min-block-size: 0;
2341
+ }
2342
+ [data-component~="ui-container"][data-ui-container-state~="measure=wide"][data-v-d3919ea4] {
2301
2343
  --_container-measure: 80ch;
2302
2344
  }
2303
- [data-component~="ui-container"][data-ui-container-state~="gutters=s"][data-v-955318c7] {
2345
+ [data-component~="ui-container"][data-ui-container-state~="gutters=s"][data-v-d3919ea4] {
2304
2346
  --_container-gutters: var(--ui-space-3);
2305
2347
  }
2306
- [data-component~="ui-container"][data-ui-container-state~="gutters=m"][data-v-955318c7] {
2348
+ [data-component~="ui-container"][data-ui-container-state~="gutters=m"][data-v-d3919ea4] {
2307
2349
  --_container-gutters: var(--ui-space-4);
2308
2350
  }
2309
- [data-component~="ui-container"][data-ui-container-state~="gutters=l"][data-v-955318c7] {
2351
+ [data-component~="ui-container"][data-ui-container-state~="gutters=l"][data-v-d3919ea4] {
2310
2352
  --_container-gutters: var(--ui-space-5);
2311
2353
  }
2312
2354
 
2313
2355
  /* A component that sets its display still honours the hidden attribute on its root. */
2314
- [data-component~="ui-container"][hidden][data-v-955318c7] {
2356
+ [data-component~="ui-container"][hidden][data-v-d3919ea4] {
2315
2357
  display: none;
2316
2358
  }
2317
2359
 
@@ -2538,10 +2580,10 @@ dd[data-v-ac017b1f] {
2538
2580
  /* The controller sets each fade length from overflow and scroll position. The mask blends
2539
2581
  into whatever is behind the area without needing to know its colour. Before upgrade, its
2540
2582
  zero-length defaults leave the authored scroll area fully visible. */
2541
- [data-component~="ui-scroll-area"][data-ui-scroll-area-state~="fill"][data-v-3aa9f4b3] {
2583
+ [data-component~="ui-scroll-area"][data-ui-scroll-area-state~="fill"][data-v-a1ccf697] {
2542
2584
  flex: 1;
2543
2585
  }
2544
- [data-component~="ui-scroll-area"][data-v-3aa9f4b3] {
2586
+ [data-component~="ui-scroll-area"][data-v-a1ccf697] {
2545
2587
  display: block;
2546
2588
  box-sizing: border-box;
2547
2589
  min-block-size: 0;
@@ -2560,29 +2602,41 @@ dd[data-v-ac017b1f] {
2560
2602
  transparent
2561
2603
  );
2562
2604
  }
2563
- .content[data-v-3aa9f4b3] {
2605
+ .content[data-v-a1ccf697] {
2564
2606
  display: flow-root;
2565
2607
  }
2566
- [data-component~="ui-scroll-area"][data-ui-scroll-area-state~="orientation=horizontal"][data-v-3aa9f4b3] {
2608
+
2609
+ /* Trim projected edges without changing spacing inside an item. */
2610
+ [data-component~="ui-scroll-area"][data-ui-scroll-area-state~="trim"]
2611
+ .content
2612
+ > [data-v-a1ccf697-s]:first-child {
2613
+ margin-block-start: 0;
2614
+ }
2615
+ [data-component~="ui-scroll-area"][data-ui-scroll-area-state~="trim"]
2616
+ .content
2617
+ > [data-v-a1ccf697-s]:last-child {
2618
+ margin-block-end: 0;
2619
+ }
2620
+ [data-component~="ui-scroll-area"][data-ui-scroll-area-state~="orientation=horizontal"][data-v-a1ccf697] {
2567
2621
  overflow-x: auto;
2568
2622
  overflow-y: hidden;
2569
2623
  --_ui-scroll-fade-direction: var(--_ui-scroll-fade-inline);
2570
2624
  }
2571
- [data-component~="ui-scroll-area"][data-v-3aa9f4b3]:dir(rtl) {
2625
+ [data-component~="ui-scroll-area"][data-v-a1ccf697]:dir(rtl) {
2572
2626
  --_ui-scroll-fade-inline: to left;
2573
2627
  }
2574
- [data-component~="ui-scroll-area"][data-ui-scroll-area-state~="size=sm"][data-v-3aa9f4b3] {
2628
+ [data-component~="ui-scroll-area"][data-ui-scroll-area-state~="size=sm"][data-v-a1ccf697] {
2575
2629
  max-block-size: calc(9.375rem + var(--ui-scroll-fade-size, 24px));
2576
2630
  }
2577
- [data-component~="ui-scroll-area"][data-ui-scroll-area-state~="size=md"][data-v-3aa9f4b3] {
2631
+ [data-component~="ui-scroll-area"][data-ui-scroll-area-state~="size=md"][data-v-a1ccf697] {
2578
2632
  max-block-size: 20rem;
2579
2633
  }
2580
- [data-component~="ui-scroll-area"][data-ui-scroll-area-state~="size=lg"][data-v-3aa9f4b3] {
2634
+ [data-component~="ui-scroll-area"][data-ui-scroll-area-state~="size=lg"][data-v-a1ccf697] {
2581
2635
  max-block-size: 30rem;
2582
2636
  }
2583
2637
 
2584
2638
  /* A component that sets its display still honours the hidden attribute on its root. */
2585
- [data-component~="ui-scroll-area"][hidden][data-v-3aa9f4b3] {
2639
+ [data-component~="ui-scroll-area"][hidden][data-v-a1ccf697] {
2586
2640
  display: none;
2587
2641
  }
2588
2642
 
@@ -2615,7 +2669,7 @@ dd[data-v-ac017b1f] {
2615
2669
  syntax: "*";
2616
2670
  inherits: false;
2617
2671
  }
2618
- [data-component~="ui-dialog"][data-v-f11b295f] {
2672
+ [data-component~="ui-dialog"][data-v-6d90ae32] {
2619
2673
  /* Hooks do not inherit, so the parts below read them from the root. */
2620
2674
  --_ui-dialog-duration: var(--ui-dialog-duration);
2621
2675
 
@@ -2651,21 +2705,21 @@ dd[data-v-ac017b1f] {
2651
2705
  display var(--ui-dialog-duration, var(--ui-motion-base)) var(--ui-motion-ease) allow-discrete,
2652
2706
  overlay var(--ui-dialog-duration, var(--ui-motion-base)) var(--ui-motion-ease) allow-discrete;
2653
2707
  }
2654
- [data-component~="ui-dialog"][open][data-v-f11b295f] {
2708
+ [data-component~="ui-dialog"][open][data-v-6d90ae32] {
2655
2709
  display: flex;
2656
2710
  visibility: visible;
2657
2711
  pointer-events: auto;
2658
2712
  opacity: 1;
2659
2713
  transform: scale(1);
2660
- animation: ui-dialog-enter-f11b295f var(--ui-dialog-duration, var(--ui-motion-base)) var(--ui-motion-ease);
2714
+ animation: ui-dialog-enter-6d90ae32 var(--ui-dialog-duration, var(--ui-motion-base)) var(--ui-motion-ease);
2661
2715
  }
2662
- [data-component~="ui-dialog"][data-ui-dialog-state~="size=sm"][data-v-f11b295f] {
2716
+ [data-component~="ui-dialog"][data-ui-dialog-state~="size=sm"][data-v-6d90ae32] {
2663
2717
  --_ui-dialog-size: 360px;
2664
2718
  }
2665
- [data-component~="ui-dialog"][data-ui-dialog-state~="size=lg"][data-v-f11b295f] {
2719
+ [data-component~="ui-dialog"][data-ui-dialog-state~="size=lg"][data-v-6d90ae32] {
2666
2720
  --_ui-dialog-size: 640px;
2667
2721
  }
2668
- [data-component~="ui-dialog"][data-ui-dialog-state~="size=fullscreen"][data-v-f11b295f] {
2722
+ [data-component~="ui-dialog"][data-ui-dialog-state~="size=fullscreen"][data-v-6d90ae32] {
2669
2723
  inset: 0;
2670
2724
  inline-size: 100%;
2671
2725
  block-size: 100dvh;
@@ -2673,12 +2727,12 @@ dd[data-v-ac017b1f] {
2673
2727
  margin: 0;
2674
2728
  border-radius: var(--ui-dialog-radius, 0);
2675
2729
  }
2676
- [data-component~="ui-dialog"][data-ui-dialog-state~="alert"] .close[data-v-f11b295f] {
2730
+ [data-component~="ui-dialog"][data-ui-dialog-state~="alert"] .close[data-v-6d90ae32] {
2677
2731
  display: none;
2678
2732
  }
2679
2733
 
2680
- /* Header and actions stay pinned; only the body scrolls when content is long. */
2681
- header[data-v-f11b295f] {
2734
+ /* Own the layout wrapper; nested component roots are outside these scoped rules. */
2735
+ header[data-v-6d90ae32] {
2682
2736
  display: flex;
2683
2737
  align-items: center;
2684
2738
  gap: var(--ui-space-3);
@@ -2687,7 +2741,7 @@ header[data-v-f11b295f] {
2687
2741
  }
2688
2742
 
2689
2743
  /* :host-qualified so page heading rules that reach in cannot outrank the dialog chrome. */
2690
- [data-component~="ui-dialog"] .title[data-v-f11b295f] {
2744
+ [data-component~="ui-dialog"] .title[data-v-6d90ae32] {
2691
2745
  flex: 1;
2692
2746
  min-inline-size: 0;
2693
2747
  margin: 0;
@@ -2699,7 +2753,7 @@ header[data-v-f11b295f] {
2699
2753
  font-weight: var(--ui-font-semibold);
2700
2754
  line-height: var(--ui-line-height-tight);
2701
2755
  }
2702
- .close[data-v-f11b295f] {
2756
+ .close[data-v-6d90ae32] {
2703
2757
  display: inline-grid;
2704
2758
  place-items: center;
2705
2759
  flex: none;
@@ -2718,8 +2772,8 @@ header[data-v-f11b295f] {
2718
2772
  }
2719
2773
 
2720
2774
  /* A CSS-drawn X. */
2721
- .close[data-v-f11b295f]::before,
2722
- .close[data-v-f11b295f]::after {
2775
+ .close[data-v-6d90ae32]::before,
2776
+ .close[data-v-6d90ae32]::after {
2723
2777
  content: "";
2724
2778
  grid-area: 1 / 1;
2725
2779
  inline-size: 0.875rem;
@@ -2728,69 +2782,71 @@ header[data-v-f11b295f] {
2728
2782
  background: currentColor;
2729
2783
  transform: rotate(45deg);
2730
2784
  }
2731
- .close[data-v-f11b295f]::after {
2785
+ .close[data-v-6d90ae32]::after {
2732
2786
  transform: rotate(-45deg);
2733
2787
  }
2734
- .close[data-v-f11b295f]:hover {
2788
+ .close[data-v-6d90ae32]:hover {
2735
2789
  background: var(--ui-surface-muted);
2736
2790
  color: var(--ui-text-primary);
2737
2791
  }
2738
- .close[data-v-f11b295f]:focus-visible {
2792
+ .close[data-v-6d90ae32]:focus-visible {
2739
2793
  outline: var(--ui-focus-width) solid var(--ui-focus-ring);
2740
2794
  outline-offset: var(--ui-focus-width);
2741
2795
  }
2742
2796
 
2743
2797
  /* A touch target, like Button on coarse pointers. */
2744
2798
  @media (pointer: coarse) {
2745
- .close[data-v-f11b295f] {
2799
+ .close[data-v-6d90ae32] {
2746
2800
  inline-size: var(--ui-control-min-block-size);
2747
2801
  block-size: var(--ui-control-min-block-size);
2748
2802
  }
2749
2803
  }
2750
- html[data-ui-input-modality="touch"] [data-component~="ui-dialog"] .close[data-v-f11b295f] {
2804
+ html[data-ui-input-modality="touch"] [data-component~="ui-dialog"] .close[data-v-6d90ae32] {
2751
2805
  inline-size: var(--ui-control-min-block-size);
2752
2806
  block-size: var(--ui-control-min-block-size);
2753
2807
  }
2754
- .body[data-v-f11b295f] {
2808
+ .body[data-v-6d90ae32] {
2809
+ display: flex;
2810
+ flex-direction: column;
2755
2811
  flex: 1 1 auto;
2756
2812
  min-block-size: 0;
2757
- padding: var(--ui-space-5);
2813
+ padding: var(--ui-space-3) var(--ui-space-5) var(--ui-space-5);
2758
2814
  }
2759
- footer[data-v-f11b295f] {
2815
+ footer[data-v-6d90ae32] {
2760
2816
  display: flex;
2761
2817
  flex: none;
2762
2818
  flex-wrap: wrap;
2763
2819
  justify-content: flex-end;
2764
2820
  gap: var(--ui-space-2);
2765
- padding: var(--ui-space-3) var(--ui-space-5);
2821
+ padding: 0 var(--ui-space-5) var(--ui-space-5);
2766
2822
  }
2767
- footer[data-v-f11b295f]:empty {
2823
+ footer[data-v-6d90ae32]:empty {
2768
2824
  display: none;
2769
2825
  }
2770
- @keyframes ui-dialog-enter-f11b295f {
2826
+ @keyframes ui-dialog-enter-6d90ae32 {
2771
2827
  from {
2772
2828
  opacity: 0;
2773
2829
  transform: scale(0.96);
2774
2830
  }
2775
2831
  }
2776
- [data-component~="ui-dialog"][data-v-f11b295f]::backdrop {
2832
+ [data-component~="ui-dialog"][data-v-6d90ae32]::backdrop {
2777
2833
  background-color: transparent;
2778
2834
  transition:
2779
2835
  background-color var(--_ui-dialog-duration, var(--ui-motion-base)) var(--ui-motion-ease),
2780
2836
  display var(--_ui-dialog-duration, var(--ui-motion-base)) var(--ui-motion-ease) allow-discrete,
2781
2837
  overlay var(--_ui-dialog-duration, var(--ui-motion-base)) var(--ui-motion-ease) allow-discrete;
2782
2838
  }
2783
- [data-component~="ui-dialog"][open][data-v-f11b295f]::backdrop {
2839
+ [data-component~="ui-dialog"][open][data-v-6d90ae32]::backdrop {
2784
2840
  background-color: var(--ui-overlay-backdrop);
2785
- animation: ui-dialog-backdrop-enter-f11b295f var(--_ui-dialog-duration, var(--ui-motion-base))
2841
+ animation: ui-dialog-backdrop-enter-6d90ae32 var(--_ui-dialog-duration, var(--ui-motion-base))
2786
2842
  var(--ui-motion-ease);
2787
2843
  }
2788
- [data-component~="ui-dialog"][open][data-ui-backdrop-hidden][data-v-f11b295f]::backdrop {
2844
+ [data-component~="ui-dialog"][open][data-ui-backdrop-hidden][data-v-6d90ae32]::backdrop {
2789
2845
  background-color: transparent;
2790
2846
  animation: none;
2791
2847
  transition: none;
2792
2848
  }
2793
- @keyframes ui-dialog-backdrop-enter-f11b295f {
2849
+ @keyframes ui-dialog-backdrop-enter-6d90ae32 {
2794
2850
  from {
2795
2851
  background-color: transparent;
2796
2852
  }
@@ -4680,7 +4736,7 @@ svg[data-v-955cfa65-s] {
4680
4736
  syntax: "*";
4681
4737
  inherits: false;
4682
4738
  }
4683
- [data-component~="ui-icon-button"][data-v-cb9aaf03] {
4739
+ [data-component~="ui-icon-button"][data-v-b66a1661] {
4684
4740
  /* Hooks do not inherit, so the parts below read them from the root. */
4685
4741
  --_ui-icon-button-icon-size: var(--ui-icon-button-icon-size);
4686
4742
  --_ui-icon-button-icon-stroke-width: var(--ui-icon-button-icon-stroke-width);
@@ -4688,10 +4744,28 @@ svg[data-v-955cfa65-s] {
4688
4744
  display: inline-flex;
4689
4745
  color: var(--ui-text-secondary);
4690
4746
  }
4691
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"][data-v-cb9aaf03] {
4747
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="tone=accent"][data-v-b66a1661] {
4748
+ --_icon-button-border: var(--ui-accent-solid);
4749
+ --_icon-button-hover-border: var(--ui-accent-hover);
4750
+ --_icon-button-text: var(--ui-accent-subtle-text, var(--ui-accent-solid));
4751
+ --_icon-button-outline-surface: color-mix(
4752
+ in srgb,
4753
+ var(--ui-accent-solid) 5%,
4754
+ var(--ui-surface-default)
4755
+ );
4756
+ color: var(--_icon-button-text);
4757
+ }
4758
+
4759
+ /* Omitted tone retains the existing accent solid; explicit neutral is additive. */
4760
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="tone=neutral"][data-v-b66a1661] {
4761
+ --_icon-button-solid-surface: var(--ui-text-primary);
4762
+ --_icon-button-solid-hover-surface: var(--ui-text-primary);
4763
+ --_icon-button-solid-text: var(--ui-surface-default);
4764
+ }
4765
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"][data-v-b66a1661] {
4692
4766
  position: relative;
4693
4767
  }
4694
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"][data-v-cb9aaf03]::before {
4768
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"][data-v-b66a1661]::before {
4695
4769
  content: "";
4696
4770
  position: absolute;
4697
4771
  inset: 50% auto auto 50%;
@@ -4705,13 +4779,13 @@ svg[data-v-955cfa65-s] {
4705
4779
  transition: opacity var(--ui-affordance-motion, var(--ui-motion-fast)) var(--ui-motion-ease);
4706
4780
  pointer-events: none;
4707
4781
  }
4708
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"][data-v-cb9aaf03]:disabled::before {
4782
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"][data-v-b66a1661]:disabled::before {
4709
4783
  opacity: 0;
4710
4784
  }
4711
4785
 
4712
4786
  /* At rest an anticipatory button shows only its guide dot. The icon grows into place when
4713
4787
  proximity, hover, or focus reveals it; the button's hit area and guide remain stable. */
4714
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"] .content[data-v-cb9aaf03] {
4788
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"] .content[data-v-b66a1661] {
4715
4789
  opacity: 1;
4716
4790
  transform: scale(1);
4717
4791
  transition:
@@ -4719,22 +4793,22 @@ svg[data-v-955cfa65-s] {
4719
4793
  transform calc(var(--ui-motion-fast) * 2) cubic-bezier(0.2, 1.4, 0.35, 1);
4720
4794
  }
4721
4795
  @media (hover: hover) and (pointer: fine) {
4722
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"][data-v-cb9aaf03]: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) {
4796
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"][data-v-b66a1661]: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, [aria-pressed="true"], [data-ui-proximity="near"], :hover, :focus-visible) {
4723
4797
  border-color: transparent;
4724
4798
  background-color: transparent;
4725
4799
  box-shadow: none;
4726
4800
  }
4727
- [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)
4728
- .content[data-v-cb9aaf03] {
4801
+ [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, [aria-pressed="true"], [data-ui-proximity="near"], :hover, :focus-visible)
4802
+ .content[data-v-b66a1661] {
4729
4803
  opacity: 0;
4730
4804
  transform: scale(0.65);
4731
4805
  transition-duration: var(--ui-motion-fast);
4732
4806
  }
4733
4807
  }
4734
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"][data-v-cb9aaf03]:is([data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=solid"], [data-ui-proximity="near"], :hover, :focus-visible)::before {
4808
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"][data-v-b66a1661]:is([data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=solid"], [aria-pressed="true"], [data-ui-proximity="near"], :hover, :focus-visible)::before {
4735
4809
  opacity: 0;
4736
4810
  }
4737
- [data-component~="ui-icon-button"][data-v-cb9aaf03] {
4811
+ [data-component~="ui-icon-button"][data-v-b66a1661] {
4738
4812
  /* The size prop resolves here; --ui-icon-button-size overrides it on an element. */
4739
4813
  --_size: 2rem;
4740
4814
  appearance: none;
@@ -4760,7 +4834,7 @@ svg[data-v-955cfa65-s] {
4760
4834
  transform var(--ui-motion-fast) var(--ui-motion-ease);
4761
4835
  }
4762
4836
  @media (hover: none), (pointer: coarse) {
4763
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"][data-v-cb9aaf03]::before {
4837
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"][data-v-b66a1661]::before {
4764
4838
  opacity: 0;
4765
4839
  }
4766
4840
  }
@@ -4768,10 +4842,10 @@ svg[data-v-955cfa65-s] {
4768
4842
  /* A touch target without a bigger button: an invisible hit area, at least the control
4769
4843
  minimum, centred on the button (::before is the anticipatory guide). */
4770
4844
  @media (pointer: coarse) {
4771
- [data-component~="ui-icon-button"][data-v-cb9aaf03] {
4845
+ [data-component~="ui-icon-button"][data-v-b66a1661] {
4772
4846
  position: relative;
4773
4847
  }
4774
- [data-component~="ui-icon-button"][data-v-cb9aaf03]::after {
4848
+ [data-component~="ui-icon-button"][data-v-b66a1661]::after {
4775
4849
  content: "";
4776
4850
  position: absolute;
4777
4851
  inset: 50% auto auto 50%;
@@ -4780,10 +4854,10 @@ svg[data-v-955cfa65-s] {
4780
4854
  transform: translate(-50%, -50%);
4781
4855
  }
4782
4856
  }
4783
- html[data-ui-input-modality="touch"] [data-component~="ui-icon-button"][data-v-cb9aaf03] {
4857
+ html[data-ui-input-modality="touch"] [data-component~="ui-icon-button"][data-v-b66a1661] {
4784
4858
  position: relative;
4785
4859
  }
4786
- html[data-ui-input-modality="touch"] [data-component~="ui-icon-button"][data-v-cb9aaf03]::after {
4860
+ html[data-ui-input-modality="touch"] [data-component~="ui-icon-button"][data-v-b66a1661]::after {
4787
4861
  content: "";
4788
4862
  position: absolute;
4789
4863
  inset: 50% auto auto 50%;
@@ -4791,14 +4865,14 @@ html[data-ui-input-modality="touch"] [data-component~="ui-icon-button"][data-v-c
4791
4865
  block-size: max(100%, var(--ui-control-min-block-size));
4792
4866
  transform: translate(-50%, -50%);
4793
4867
  }
4794
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="size=sm"][data-v-cb9aaf03] {
4868
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="size=sm"][data-v-b66a1661] {
4795
4869
  --_size: 1.75rem;
4796
4870
  inline-size: var(--ui-icon-button-size, var(--_size));
4797
4871
  block-size: var(--ui-icon-button-size, var(--_size));
4798
4872
  min-inline-size: var(--ui-icon-button-size, var(--_size));
4799
4873
  min-block-size: var(--ui-icon-button-size, var(--_size));
4800
4874
  }
4801
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="size=lg"][data-v-cb9aaf03] {
4875
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="size=lg"][data-v-b66a1661] {
4802
4876
  --_size: 2.5rem;
4803
4877
  inline-size: var(--ui-icon-button-size, var(--_size));
4804
4878
  block-size: var(--ui-icon-button-size, var(--_size));
@@ -4807,19 +4881,19 @@ html[data-ui-input-modality="touch"] [data-component~="ui-icon-button"][data-v-c
4807
4881
  }
4808
4882
 
4809
4883
  /* A text button's companion uses control geometry; compact icon buttons keep their own density. */
4810
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="matchButton"][data-v-cb9aaf03] {
4884
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="matchButton"][data-v-b66a1661] {
4811
4885
  --_size: var(--ui-control-size-md);
4812
4886
  block-size: auto;
4813
4887
  align-self: stretch;
4814
4888
  }
4815
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="matchButton"][data-ui-icon-button-state~="size=sm"][data-v-cb9aaf03] {
4889
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="matchButton"][data-ui-icon-button-state~="size=sm"][data-v-b66a1661] {
4816
4890
  --_size: var(--ui-control-size-sm);
4817
4891
  }
4818
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="matchButton"][data-ui-icon-button-state~="size=lg"][data-v-cb9aaf03] {
4892
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="matchButton"][data-ui-icon-button-state~="size=lg"][data-v-b66a1661] {
4819
4893
  --_size: var(--ui-control-size-lg);
4820
4894
  }
4821
4895
  @media (pointer: coarse) {
4822
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="matchButton"][data-v-cb9aaf03] {
4896
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="matchButton"][data-v-b66a1661] {
4823
4897
  inline-size: max(var(--ui-icon-button-size, var(--_size)), var(--ui-control-min-block-size));
4824
4898
  min-inline-size: max(
4825
4899
  var(--ui-icon-button-size, var(--_size)),
@@ -4828,77 +4902,117 @@ html[data-ui-input-modality="touch"] [data-component~="ui-icon-button"][data-v-c
4828
4902
  min-block-size: max(var(--ui-icon-button-size, var(--_size)), var(--ui-control-min-block-size));
4829
4903
  }
4830
4904
  }
4831
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="round"][data-v-cb9aaf03] {
4905
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="round"][data-v-b66a1661] {
4832
4906
  border-radius: var(--ui-radius-round);
4833
4907
  }
4834
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=outline"][data-v-cb9aaf03] {
4835
- border-color: var(--ui-icon-button-border, var(--ui-control-border, var(--ui-border-strong)));
4836
- background-color: var(--ui-icon-button-outline-surface, var(--ui-surface-default));
4908
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=outline"][data-v-b66a1661] {
4909
+ border-color: var(
4910
+ --ui-icon-button-border,
4911
+ var(--_icon-button-border, var(--ui-control-border, var(--ui-border-strong)))
4912
+ );
4913
+ background-color: var(
4914
+ --ui-icon-button-outline-surface,
4915
+ var(--_icon-button-outline-surface, var(--ui-surface-default))
4916
+ );
4837
4917
  background-image: var(--ui-raised-highlight);
4838
- color: var(--ui-icon-button-outline-text, var(--ui-text-primary));
4918
+ color: var(--ui-icon-button-outline-text, var(--_icon-button-text, var(--ui-text-primary)));
4839
4919
  box-shadow: var(--ui-raised);
4840
4920
  }
4841
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=solid"][data-v-cb9aaf03] {
4842
- background-color: var(--ui-icon-button-solid-surface, var(--ui-accent-solid));
4921
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=solid"][data-v-b66a1661] {
4922
+ background-color: var(
4923
+ --ui-icon-button-solid-surface,
4924
+ var(--_icon-button-solid-surface, var(--ui-accent-solid))
4925
+ );
4843
4926
  background-image: var(--ui-raised-highlight);
4844
- color: var(--ui-icon-button-solid-text, var(--ui-text-on-accent));
4927
+ color: var(--ui-icon-button-solid-text, var(--_icon-button-solid-text, var(--ui-text-on-accent)));
4845
4928
  box-shadow: var(
4846
4929
  --ui-icon-button-solid-shadow,
4847
4930
  0 1px 2px color-mix(in srgb, var(--ui-accent-solid) 18%, transparent)
4848
4931
  );
4849
4932
  }
4850
- [data-component~="ui-icon-button"][data-v-cb9aaf03]:hover:enabled:not([aria-disabled="true"]) {
4933
+ [data-component~="ui-icon-button"][data-v-b66a1661]:hover:enabled:not([aria-disabled="true"]) {
4851
4934
  /* Derived from the text colour so the ghost hover shows on any background. */
4852
4935
  background-color: var(
4853
4936
  --ui-icon-button-hover-surface,
4854
4937
  color-mix(in srgb, currentColor 8%, transparent)
4855
4938
  );
4856
- color: var(--ui-icon-button-hover-text, var(--ui-text-primary));
4939
+ color: var(--ui-icon-button-hover-text, var(--_icon-button-text, var(--ui-text-primary)));
4857
4940
  }
4858
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=outline"][data-v-cb9aaf03]:hover:enabled:not([aria-disabled="true"]) {
4941
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=outline"][data-v-b66a1661]:hover:enabled:not([aria-disabled="true"]) {
4859
4942
  border-color: var(
4860
4943
  --ui-icon-button-hover-border,
4861
- var(--ui-control-border-hover, var(--ui-control-border))
4944
+ var(--_icon-button-hover-border, var(--ui-control-border-hover, var(--ui-control-border)))
4945
+ );
4946
+ }
4947
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=solid"][data-v-b66a1661]:hover:enabled:not([aria-disabled="true"]) {
4948
+ background-color: var(
4949
+ --ui-icon-button-solid-hover-surface,
4950
+ var(--_icon-button-solid-hover-surface, var(--ui-accent-hover))
4862
4951
  );
4863
4952
  }
4864
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=solid"][data-v-cb9aaf03]:hover:enabled:not([aria-disabled="true"]) {
4865
- background-color: var(--ui-icon-button-solid-hover-surface, var(--ui-accent-hover));
4953
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=solid"][data-ui-icon-button-state~="tone=accent"][data-v-b66a1661]:hover:enabled:not([aria-disabled="true"]),
4954
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=solid"][data-ui-icon-button-state~="tone=neutral"][data-v-b66a1661]:hover:enabled:not([aria-disabled="true"]) {
4955
+ color: var(--ui-icon-button-solid-text, var(--_icon-button-solid-text, var(--ui-text-on-accent)));
4866
4956
  }
4867
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=ghost"][aria-expanded="true"][data-v-cb9aaf03]:enabled:not([aria-disabled="true"]) {
4957
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=ghost"][aria-expanded="true"][data-v-b66a1661]:enabled:not([aria-disabled="true"]) {
4868
4958
  background-color: var(
4869
4959
  --ui-icon-button-active-surface,
4870
4960
  color-mix(in srgb, currentColor 16%, transparent)
4871
4961
  );
4872
- color: var(--ui-icon-button-hover-text, var(--ui-text-primary));
4962
+ color: var(--ui-icon-button-hover-text, var(--_icon-button-text, var(--ui-text-primary)));
4873
4963
  box-shadow: var(--ui-pressed);
4874
4964
  }
4875
- [data-component~="ui-icon-button"][data-v-cb9aaf03]:active:enabled:not([aria-disabled="true"]) {
4965
+
4966
+ /* Native toggle state persists after pointer release, including during loading. */
4967
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=outline"][aria-pressed="true"][data-v-b66a1661]:enabled {
4968
+ background-color: var(
4969
+ --ui-icon-button-active-surface,
4970
+ color-mix(in srgb, currentColor 12%, var(--ui-surface-default))
4971
+ );
4972
+ background-image: none;
4973
+ box-shadow: var(--ui-pressed);
4974
+ }
4975
+ [data-component~="ui-icon-button"][data-v-b66a1661]:active:enabled:not([aria-disabled="true"]) {
4876
4976
  transform: scale(var(--ui-icon-button-active-scale, 0.96));
4877
4977
  }
4878
- :is([data-component~="ui-icon-button"][data-ui-icon-button-state~="loading"][data-v-cb9aaf03], [data-component~="ui-icon-button"][data-ui-icon-button-state~="pending"][data-v-cb9aaf03]) {
4978
+ :is([data-component~="ui-icon-button"][data-ui-icon-button-state~="loading"][data-v-b66a1661], [data-component~="ui-icon-button"][data-ui-icon-button-state~="pending"][data-v-b66a1661]) {
4879
4979
  cursor: progress;
4880
4980
  }
4881
- .content[data-v-cb9aaf03] {
4981
+ .content[data-v-b66a1661] {
4882
4982
  display: inline-flex;
4883
4983
  align-items: center;
4884
4984
  justify-content: center;
4885
4985
  }
4886
4986
  :is([data-component~="ui-icon-button"][data-ui-icon-button-state~="loading"], [data-component~="ui-icon-button"][data-ui-icon-button-state~="pending"])
4887
- .content[data-v-cb9aaf03] {
4987
+ .content[data-v-b66a1661] {
4888
4988
  display: none;
4889
4989
  }
4890
4990
  @media (prefers-reduced-motion: reduce) {
4891
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"] .content[data-v-cb9aaf03] {
4991
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"] .content[data-v-b66a1661] {
4892
4992
  transition: none;
4893
4993
  }
4894
4994
  }
4895
- [data-component~="ui-icon-button"][data-v-cb9aaf03]:focus-visible {
4995
+ [data-component~="ui-icon-button"][data-v-b66a1661]:focus-visible {
4896
4996
  outline: none;
4897
4997
  box-shadow: var(--ui-focus-halo);
4898
4998
  }
4999
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=outline"][aria-pressed="true"][data-v-b66a1661]:enabled:focus-visible {
5000
+ box-shadow:
5001
+ var(--ui-pressed),
5002
+ var(--ui-focus-halo);
5003
+ }
5004
+ @media (forced-colors: active) {
5005
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=outline"][aria-pressed="true"][data-v-b66a1661]:enabled {
5006
+ outline: var(--ui-focus-width) solid Highlight;
5007
+ outline-offset: calc(-2 * var(--ui-focus-width));
5008
+ }
5009
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=outline"][aria-pressed="true"][data-v-b66a1661]:enabled:focus-visible {
5010
+ outline-offset: var(--ui-focus-width);
5011
+ }
5012
+ }
4899
5013
 
4900
5014
  /* Disabled is a flat neutral control, independent of the active variant's tone. */
4901
- [data-component~="ui-icon-button"][data-v-cb9aaf03]:disabled {
5015
+ [data-component~="ui-icon-button"][data-v-b66a1661]:disabled {
4902
5016
  border-color: var(--ui-disabled-border);
4903
5017
  background-color: var(--ui-disabled-surface);
4904
5018
  color: var(--ui-disabled-text);
@@ -4908,23 +5022,23 @@ html[data-ui-input-modality="touch"] [data-component~="ui-icon-button"][data-v-c
4908
5022
  box-shadow: none;
4909
5023
  background-image: none;
4910
5024
  }
4911
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=ghost"][data-v-cb9aaf03]:disabled {
5025
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=ghost"][data-v-b66a1661]:disabled {
4912
5026
  border-color: transparent;
4913
5027
  }
4914
- [data-component~="ui-icon-button"][data-v-cb9aaf03] {
5028
+ [data-component~="ui-icon-button"][data-v-b66a1661] {
4915
5029
  --_icon-button-icon-default: var(--ui-icon-size-md);
4916
5030
  /* A slotted ui-icon is its own component, out of reach of the svg rule below; these are its
4917
5031
  defaults, which its own --ui-icon-* hooks still override. */
4918
5032
  --_ui-default-icon-size: var(--_ui-icon-button-icon-size, var(--_icon-button-icon-default));
4919
5033
  --_ui-default-icon-stroke-width: var(--_ui-icon-button-icon-stroke-width, 1.75);
4920
5034
  }
4921
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="size=sm"][data-v-cb9aaf03] {
5035
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="size=sm"][data-v-b66a1661] {
4922
5036
  --_icon-button-icon-default: var(--ui-icon-size-sm);
4923
5037
  }
4924
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="size=lg"][data-v-cb9aaf03] {
5038
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="size=lg"][data-v-b66a1661] {
4925
5039
  --_icon-button-icon-default: var(--ui-icon-size-lg);
4926
5040
  }
4927
- svg[data-v-cb9aaf03-s] {
5041
+ svg[data-v-b66a1661-s] {
4928
5042
  inline-size: var(--_ui-icon-button-icon-size, var(--_icon-button-icon-default));
4929
5043
  block-size: var(--_ui-icon-button-icon-size, var(--_icon-button-icon-default));
4930
5044
  flex-shrink: 0;
@@ -4932,7 +5046,7 @@ svg[data-v-cb9aaf03-s] {
4932
5046
  }
4933
5047
 
4934
5048
  /* A component that sets its display still honours the hidden attribute on its root. */
4935
- [data-component~="ui-icon-button"][hidden][data-v-cb9aaf03] {
5049
+ [data-component~="ui-icon-button"][hidden][data-v-b66a1661] {
4936
5050
  display: none;
4937
5051
  }
4938
5052