@threadlabs/looma 0.25.3 → 0.25.4

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.
@@ -349,7 +349,7 @@ svg[data-v-bf7b9190] {
349
349
  syntax: "*";
350
350
  inherits: false;
351
351
  }
352
- [data-component~="ui-badge"][data-v-b1009c5d] {
352
+ [data-component~="ui-badge"][data-v-5065fda2] {
353
353
  --_badge-surface: color-mix(in srgb, var(--ui-surface-subtle) 80%, var(--ui-surface-default));
354
354
  --_badge-text: var(--ui-text-secondary);
355
355
  /* Sit between the soft fill and its stronger theme ink. */
@@ -375,6 +375,7 @@ svg[data-v-bf7b9190] {
375
375
  display: inline-flex;
376
376
  align-items: center;
377
377
  justify-content: center;
378
+ gap: var(--ui-space-1);
378
379
  box-sizing: border-box;
379
380
  min-inline-size: 0;
380
381
  max-inline-size: 100%;
@@ -394,17 +395,48 @@ svg[data-v-bf7b9190] {
394
395
 
395
396
  /* A constrained badge keeps its surface intact and ellipsizes only its label. The full
396
397
  text stays in the DOM for accessible names and consumers' selected values. */
397
- .label[data-v-b1009c5d] {
398
+ .label[data-v-5065fda2] {
398
399
  display: block;
399
400
  min-inline-size: 0;
400
401
  overflow: hidden;
401
402
  text-overflow: ellipsis;
402
403
  }
404
+ .label[data-v-5065fda2]:empty {
405
+ display: none;
406
+ }
407
+
408
+ /* Icon content has its own flex item so label ellipsis never clips its strokes. */
409
+ .icon[data-v-5065fda2] {
410
+ display: inline-flex;
411
+ align-items: center;
412
+ justify-content: center;
413
+ flex: none;
414
+ }
415
+ .icon[data-v-5065fda2]:empty {
416
+ display: none;
417
+ }
418
+ .icon svg[data-v-5065fda2-s] {
419
+ display: block;
420
+ inline-size: 1em;
421
+ block-size: 1em;
422
+ flex: none;
423
+ }
424
+
425
+ /* Ordinary icon-plus-text children keep inline ellipsis, with explicit glyph spacing. */
426
+ .label svg[data-v-5065fda2-s] {
427
+ inline-size: 1em;
428
+ block-size: 1em;
429
+ vertical-align: middle;
430
+ margin-inline-end: var(--ui-space-1);
431
+ }
432
+ .label[data-v-5065fda2]:has(svg) {
433
+ text-box-trim: none;
434
+ }
403
435
 
404
- /* Trim leading while retaining the font's ascent and descent. A cap-to-baseline box
405
- would crop glyphs where the label clips horizontal overflow for ellipsis. */
436
+ /* Text-only badges retain their trimmed inline baseline. Icon content needs a flex row;
437
+ trimming its label separately keeps the glyph centered without changing adjacent lines. */
406
438
  @supports (text-box-trim: trim-both) {
407
- [data-component~="ui-badge"][data-v-b1009c5d] {
439
+ [data-component~="ui-badge"][data-v-5065fda2] {
408
440
  display: inline-block;
409
441
  min-block-size: var(--ui-badge-min-block-size, 1.5rem);
410
442
  text-align: center;
@@ -412,8 +444,17 @@ svg[data-v-bf7b9190] {
412
444
  text-box-trim: trim-both;
413
445
  text-box-edge: text;
414
446
  }
447
+ [data-component~="ui-badge"][data-v-5065fda2]:has(.icon:not(:empty)),
448
+ [data-component~="ui-badge"][data-v-5065fda2]:has(.label svg) {
449
+ display: inline-flex;
450
+ text-box-trim: none;
415
451
  }
416
- [data-component~="ui-badge"][data-ui-badge-state~="size=xs"][data-v-b1009c5d] {
452
+ [data-component~="ui-badge"]:has(.icon:not(:empty)) .label[data-v-5065fda2] {
453
+ text-box-trim: trim-both;
454
+ text-box-edge: text;
455
+ }
456
+ }
457
+ [data-component~="ui-badge"][data-ui-badge-state~="size=xs"][data-v-5065fda2] {
417
458
  box-sizing: border-box;
418
459
  min-inline-size: 1rem;
419
460
  min-block-size: var(--ui-badge-min-block-size, 1rem);
@@ -421,52 +462,52 @@ svg[data-v-bf7b9190] {
421
462
  font-size: var(--ui-badge-font-size, var(--ui-font-size-2xs));
422
463
  line-height: var(--ui-badge-line-height, 1);
423
464
  }
424
- [data-component~="ui-badge"][data-ui-badge-state~="tone=accent"][data-v-b1009c5d] {
465
+ [data-component~="ui-badge"][data-ui-badge-state~="tone=accent"][data-v-5065fda2] {
425
466
  --_badge-surface: var(--ui-accent-strong-surface, var(--ui-accent-solid));
426
467
  --_badge-border: var(--ui-accent-strong-surface, var(--ui-accent-solid));
427
468
  --_badge-text: var(--ui-accent-on-strong, var(--ui-text-on-accent));
428
469
  }
429
- [data-component~="ui-badge"][data-ui-badge-state~="tone=danger"][data-v-b1009c5d] {
470
+ [data-component~="ui-badge"][data-ui-badge-state~="tone=danger"][data-v-5065fda2] {
430
471
  --_badge-surface: var(--ui-danger-strong-surface, var(--ui-danger-solid));
431
472
  --_badge-border: var(--ui-danger-strong-surface, var(--ui-danger-solid));
432
473
  --_badge-text: var(--ui-danger-on-strong, var(--ui-text-on-accent));
433
474
  }
434
- [data-component~="ui-badge"][data-ui-badge-state~="tone=success"][data-v-b1009c5d] {
475
+ [data-component~="ui-badge"][data-ui-badge-state~="tone=success"][data-v-5065fda2] {
435
476
  --_badge-surface: var(--ui-success-strong-surface, var(--ui-success-solid));
436
477
  --_badge-border: var(--ui-success-strong-surface, var(--ui-success-solid));
437
478
  --_badge-text: var(--ui-success-on-strong, var(--ui-text-on-accent));
438
479
  }
439
- [data-component~="ui-badge"][data-ui-badge-state~="tone=warning"][data-v-b1009c5d] {
480
+ [data-component~="ui-badge"][data-ui-badge-state~="tone=warning"][data-v-5065fda2] {
440
481
  --_badge-surface: var(--ui-warning-strong-surface, var(--ui-warning-solid));
441
482
  --_badge-border: var(--ui-warning-strong-surface, var(--ui-warning-solid));
442
483
  --_badge-text: var(--ui-warning-on-strong, var(--ui-text-on-accent));
443
484
  }
444
- [data-component~="ui-badge"][data-ui-badge-state~="tone=info"][data-v-b1009c5d] {
485
+ [data-component~="ui-badge"][data-ui-badge-state~="tone=info"][data-v-5065fda2] {
445
486
  --_badge-surface: var(--ui-info-strong-surface, var(--ui-info-solid));
446
487
  --_badge-border: var(--ui-info-strong-surface, var(--ui-info-solid));
447
488
  --_badge-text: var(--ui-info-on-strong, var(--ui-text-on-accent));
448
489
  }
449
- [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=accent"][data-v-b1009c5d] {
490
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=accent"][data-v-5065fda2] {
450
491
  --_badge-surface: color-mix(in srgb, var(--ui-accent-solid) 19%, var(--ui-surface-default));
451
492
  --_badge-border: color-mix(in srgb, var(--ui-accent-solid) 25%, var(--ui-surface-default));
452
493
  --_badge-text: var(--ui-accent-subtle-text, var(--ui-accent-solid));
453
494
  }
454
- [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=danger"][data-v-b1009c5d] {
495
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=danger"][data-v-5065fda2] {
455
496
  --_badge-surface: color-mix(in srgb, var(--ui-danger-solid) 19%, var(--ui-surface-default));
456
497
  --_badge-border: color-mix(in srgb, var(--ui-danger-solid) 25%, var(--ui-surface-default));
457
498
  --_badge-text: var(--ui-danger-subtle-text, var(--ui-danger-solid));
458
499
  }
459
- [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=success"][data-v-b1009c5d] {
500
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=success"][data-v-5065fda2] {
460
501
  --_badge-surface: color-mix(in srgb, var(--ui-success-solid) 19%, var(--ui-surface-default));
461
502
  --_badge-border: color-mix(in srgb, var(--ui-success-solid) 25%, var(--ui-surface-default));
462
503
  --_badge-text: var(--ui-success-subtle-text, var(--ui-success-solid));
463
504
  }
464
- [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=warning"][data-v-b1009c5d] {
505
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=warning"][data-v-5065fda2] {
465
506
  --_badge-surface: color-mix(in srgb, var(--ui-warning-solid) 19%, var(--ui-surface-default));
466
507
  --_badge-border: color-mix(in srgb, var(--ui-warning-solid) 25%, var(--ui-surface-default));
467
508
  --_badge-text: var(--ui-warning-subtle-text, var(--ui-warning-solid));
468
509
  }
469
- [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=info"][data-v-b1009c5d] {
510
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=info"][data-v-5065fda2] {
470
511
  --_badge-surface: color-mix(in srgb, var(--ui-info-solid) 19%, var(--ui-surface-default));
471
512
  --_badge-border: color-mix(in srgb, var(--ui-info-solid) 25%, var(--ui-surface-default));
472
513
  --_badge-text: var(--ui-info-subtle-text, var(--ui-info-solid));
@@ -474,12 +515,12 @@ svg[data-v-bf7b9190] {
474
515
 
475
516
  /* A solid colour fills with the ink. Its text is the page surface, mixed at 0% only so that it too is
476
517
  invalid while the hook is unset. */
477
- [data-component~="ui-badge"][data-ui-badge-state~="variant=solid"][data-v-b1009c5d] {
518
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=solid"][data-v-5065fda2] {
478
519
  --_badge-color-surface: var(--_badge-color-ink);
479
520
  --_badge-color-border: var(--_badge-color-ink);
480
521
  --_badge-color-text: color-mix(in oklab, var(--_ui-badge-color) 0%, var(--ui-surface-default));
481
522
  }
482
- [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-v-b1009c5d] {
523
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-v-5065fda2] {
483
524
  --_badge-surface: var(--ui-surface-default);
484
525
  --_badge-border: var(--ui-border-strong);
485
526
  --_badge-text: var(--ui-text-secondary);
@@ -487,29 +528,29 @@ svg[data-v-bf7b9190] {
487
528
  --_badge-color-surface: initial;
488
529
  --_badge-color-border: var(--_badge-color-ink);
489
530
  }
490
- [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-ui-badge-state~="tone=accent"][data-v-b1009c5d] {
531
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-ui-badge-state~="tone=accent"][data-v-5065fda2] {
491
532
  --_badge-border: var(--ui-accent-solid);
492
533
  --_badge-text: var(--ui-accent-subtle-text, var(--ui-accent-solid));
493
534
  }
494
- [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-ui-badge-state~="tone=danger"][data-v-b1009c5d] {
535
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-ui-badge-state~="tone=danger"][data-v-5065fda2] {
495
536
  --_badge-border: var(--ui-danger-solid);
496
537
  --_badge-text: var(--ui-danger-subtle-text, var(--ui-danger-solid));
497
538
  }
498
- [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-ui-badge-state~="tone=success"][data-v-b1009c5d] {
539
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-ui-badge-state~="tone=success"][data-v-5065fda2] {
499
540
  --_badge-border: var(--ui-success-solid);
500
541
  --_badge-text: var(--ui-success-subtle-text, var(--ui-success-solid));
501
542
  }
502
- [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-ui-badge-state~="tone=warning"][data-v-b1009c5d] {
543
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-ui-badge-state~="tone=warning"][data-v-5065fda2] {
503
544
  --_badge-border: var(--ui-warning-solid);
504
545
  --_badge-text: var(--ui-warning-subtle-text, var(--ui-warning-solid));
505
546
  }
506
- [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-ui-badge-state~="tone=info"][data-v-b1009c5d] {
547
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-ui-badge-state~="tone=info"][data-v-5065fda2] {
507
548
  --_badge-border: var(--ui-info-solid);
508
549
  --_badge-text: var(--ui-info-subtle-text, var(--ui-info-solid));
509
550
  }
510
551
 
511
552
  /* An icon mark keeps the existing tone recipe and follows the global spacing and radius. */
512
- [data-component~="ui-badge"][data-ui-badge-state~="shape=square"][data-v-b1009c5d] {
553
+ [data-component~="ui-badge"][data-ui-badge-state~="shape=square"][data-v-5065fda2] {
513
554
  --_badge-square-size: var(--ui-badge-square-size, calc(var(--ui-space-4) * 2));
514
555
  display: inline-flex;
515
556
  box-sizing: border-box;
@@ -522,17 +563,23 @@ svg[data-v-bf7b9190] {
522
563
  border-radius: var(--ui-radius-md);
523
564
  text-box-trim: none;
524
565
  }
525
- [data-component~="ui-badge"][data-ui-badge-state~="shape=square"][data-ui-badge-state~="size=xs"][data-v-b1009c5d] {
566
+ [data-component~="ui-badge"][data-ui-badge-state~="shape=square"][data-ui-badge-state~="size=xs"][data-v-5065fda2] {
526
567
  --_badge-square-size: var(--ui-badge-square-size, calc(var(--ui-space-3) * 2));
527
568
  }
528
- [data-component~="ui-badge"][data-ui-badge-state~="shape=square"] .label[data-v-b1009c5d] {
569
+ [data-component~="ui-badge"][data-ui-badge-state~="shape=square"] .label[data-v-5065fda2] {
529
570
  display: inline-flex;
530
571
  align-items: center;
531
572
  justify-content: center;
532
573
  }
574
+ [data-component~="ui-badge"][data-ui-badge-state~="shape=square"] .label svg[data-v-5065fda2-s] {
575
+ margin-inline-end: 0;
576
+ }
577
+ [data-component~="ui-badge"][data-ui-badge-state~="shape=square"] .label[data-v-5065fda2]:empty {
578
+ display: none;
579
+ }
533
580
 
534
581
  /* A dot uses the badge's tone recipe; only its silhouette and visible label change. */
535
- [data-component~="ui-badge"][data-ui-badge-state~="shape=dot"][data-v-b1009c5d] {
582
+ [data-component~="ui-badge"][data-ui-badge-state~="shape=dot"][data-v-5065fda2] {
536
583
  position: relative;
537
584
  box-sizing: border-box;
538
585
  flex: none;
@@ -544,7 +591,7 @@ svg[data-v-bf7b9190] {
544
591
  border-radius: var(--ui-radius-round);
545
592
  text-box-trim: none;
546
593
  }
547
- [data-component~="ui-badge"][data-ui-badge-state~="shape=dot"] .label[data-v-b1009c5d] {
594
+ [data-component~="ui-badge"][data-ui-badge-state~="shape=dot"] .label[data-v-5065fda2] {
548
595
  position: absolute;
549
596
  inline-size: 1px;
550
597
  block-size: 1px;
@@ -555,7 +602,7 @@ svg[data-v-bf7b9190] {
555
602
 
556
603
  /* The clipped point needs an inset surface over an outer border-colour shape: a native border
557
604
  has no diagonal edge to follow. Keep this edge for every tag variant. */
558
- [data-component~="ui-badge"][data-ui-badge-state~="shape=tag"][data-v-b1009c5d] {
605
+ [data-component~="ui-badge"][data-ui-badge-state~="shape=tag"][data-v-5065fda2] {
559
606
  --_badge-point: var(--ui-badge-point, var(--ui-space-2));
560
607
 
561
608
  position: relative;
@@ -572,7 +619,7 @@ svg[data-v-bf7b9190] {
572
619
  0 100%
573
620
  );
574
621
  }
575
- [data-component~="ui-badge"][data-ui-badge-state~="shape=tag"][data-v-b1009c5d]::before {
622
+ [data-component~="ui-badge"][data-ui-badge-state~="shape=tag"][data-v-5065fda2]::before {
576
623
  content: "";
577
624
  position: absolute;
578
625
  inset: 0;
@@ -587,34 +634,34 @@ svg[data-v-bf7b9190] {
587
634
  );
588
635
  pointer-events: none;
589
636
  }
590
- [data-component~="ui-badge"][data-ui-badge-state~="shape=tag"][data-v-b1009c5d]:dir(rtl) {
637
+ [data-component~="ui-badge"][data-ui-badge-state~="shape=tag"][data-v-5065fda2]:dir(rtl) {
591
638
  padding-inline-end: var(--ui-badge-padding-inline, var(--ui-space-2));
592
639
  padding-inline-start: calc(
593
640
  var(--ui-badge-padding-inline, var(--ui-space-2)) + var(--_badge-point)
594
641
  );
595
642
  clip-path: polygon(var(--_badge-point) 0, 100% 0, 100% 100%, var(--_badge-point) 100%, 0 50%);
596
643
  }
597
- [data-component~="ui-badge"][data-ui-badge-state~="shape=tag"][data-v-b1009c5d]:dir(rtl)::before {
644
+ [data-component~="ui-badge"][data-ui-badge-state~="shape=tag"][data-v-5065fda2]:dir(rtl)::before {
598
645
  clip-path: polygon(var(--_badge-point) 0, 100% 0, 100% 100%, var(--_badge-point) 100%, 0 50%);
599
646
  }
600
647
  @media (forced-colors: active) {
601
- [data-component~="ui-badge"][data-ui-badge-state~="shape=dot"][data-v-b1009c5d] {
648
+ [data-component~="ui-badge"][data-ui-badge-state~="shape=dot"][data-v-5065fda2] {
602
649
  forced-color-adjust: none;
603
650
  border-color: CanvasText;
604
651
  background: CanvasText;
605
652
  }
606
- [data-component~="ui-badge"][data-ui-badge-state~="shape=tag"][data-v-b1009c5d] {
653
+ [data-component~="ui-badge"][data-ui-badge-state~="shape=tag"][data-v-5065fda2] {
607
654
  forced-color-adjust: none;
608
655
  background: CanvasText;
609
656
  color: CanvasText;
610
657
  }
611
- [data-component~="ui-badge"][data-ui-badge-state~="shape=tag"][data-v-b1009c5d]::before {
658
+ [data-component~="ui-badge"][data-ui-badge-state~="shape=tag"][data-v-5065fda2]::before {
612
659
  background: Canvas;
613
660
  }
614
661
  }
615
662
 
616
663
  /* A component that sets its display still honours the hidden attribute on its root. */
617
- [data-component~="ui-badge"][hidden][data-v-b1009c5d] {
664
+ [data-component~="ui-badge"][hidden][data-v-5065fda2] {
618
665
  display: none;
619
666
  }
620
667
 
@@ -824,7 +871,7 @@ svg[data-v-fb67873c],
824
871
  syntax: "*";
825
872
  inherits: false;
826
873
  }
827
- [data-component~="ui-button"][data-v-5c174bca] {
874
+ [data-component~="ui-button"][data-v-7c2bc2b4] {
828
875
  --_hue: var(--ui-accent);
829
876
  --_hue-hover: var(--ui-accent-hover);
830
877
  --_hue-active: var(--ui-accent-active);
@@ -840,18 +887,19 @@ svg[data-v-fb67873c],
840
887
  display: inline-flex;
841
888
  align-items: center;
842
889
  justify-content: center;
890
+ column-gap: var(--ui-space-2);
843
891
  vertical-align: middle;
844
892
  color: var(--_tone-text);
845
893
  }
846
- [data-component~="ui-button"][data-ui-button-state~="align=start"][data-v-5c174bca] {
894
+ [data-component~="ui-button"][data-ui-button-state~="align=start"][data-v-7c2bc2b4] {
847
895
  justify-content: flex-start;
848
896
  text-align: start;
849
897
  }
850
- [data-component~="ui-button"][data-ui-button-state~="stretch"][data-v-5c174bca] {
898
+ [data-component~="ui-button"][data-ui-button-state~="stretch"][data-v-7c2bc2b4] {
851
899
  display: flex;
852
900
  inline-size: 100%;
853
901
  }
854
- [data-component~="ui-button"][data-v-5c174bca] {
902
+ [data-component~="ui-button"][data-v-7c2bc2b4] {
855
903
  appearance: none;
856
904
  min-block-size: var(--ui-button-min-block-size, var(--ui-control-size-md));
857
905
  border-style: solid;
@@ -879,35 +927,34 @@ svg[data-v-fb67873c],
879
927
  }
880
928
 
881
929
  /* An anchor keeps the boxed button look even when an app styles ordinary links. */
882
- [data-component~="ui-button"][data-v-5c174bca]:is(a) {
930
+ [data-component~="ui-button"][data-v-7c2bc2b4]:is(a) {
883
931
  text-decoration: none;
884
932
  }
885
- .spinner-wrap[data-v-5c174bca] {
933
+ .spinner-wrap[data-v-7c2bc2b4] {
886
934
  display: inline-flex;
887
935
  flex: none;
888
- margin-inline-end: var(--ui-space-2);
889
936
  vertical-align: middle;
890
937
  }
891
938
  @supports (text-box-trim: trim-both) {
892
- [data-component~="ui-button"][data-v-5c174bca] {
939
+ [data-component~="ui-button"][data-v-7c2bc2b4] {
893
940
  text-box-trim: trim-both;
894
941
  text-box-edge: cap alphabetic;
895
942
  }
896
943
  }
897
- [data-component~="ui-button"][data-ui-button-state~="size=xs"][data-v-5c174bca] {
944
+ [data-component~="ui-button"][data-ui-button-state~="size=xs"][data-v-7c2bc2b4] {
898
945
  min-block-size: 1.5rem;
899
946
  padding: calc(var(--ui-space-0-5) * 1.5) calc(var(--ui-space-1) * 1.25);
900
947
  font-size: var(--ui-font-size-xs);
901
948
  }
902
- [data-component~="ui-button"][data-ui-button-state~="shape=pill"][data-v-5c174bca] {
949
+ [data-component~="ui-button"][data-ui-button-state~="shape=pill"][data-v-7c2bc2b4] {
903
950
  border-radius: var(--ui-button-radius, var(--ui-radius-round));
904
951
  }
905
- [data-component~="ui-button"][data-ui-button-state~="size=sm"][data-v-5c174bca] {
952
+ [data-component~="ui-button"][data-ui-button-state~="size=sm"][data-v-7c2bc2b4] {
906
953
  min-block-size: var(--ui-control-size-sm);
907
954
  padding: var(--ui-space-1) var(--ui-space-2);
908
955
  font-size: var(--ui-font-size-sm);
909
956
  }
910
- [data-component~="ui-button"][data-ui-button-state~="size=lg"][data-v-5c174bca] {
957
+ [data-component~="ui-button"][data-ui-button-state~="size=lg"][data-v-7c2bc2b4] {
911
958
  min-block-size: var(--ui-control-size-lg);
912
959
  padding: var(--ui-space-3) var(--ui-space-4);
913
960
  font-size: var(--ui-font-size-md);
@@ -915,7 +962,7 @@ svg[data-v-fb67873c],
915
962
 
916
963
  /* Card actions inherit Button's palette and behavior; only their shared layout changes.
917
964
  The icon may contain any decorative composition. Empty icons remove their column. */
918
- [data-component~="ui-button"][data-ui-button-state~="variant=card"][data-v-5c174bca] {
965
+ [data-component~="ui-button"][data-ui-button-state~="variant=card"][data-v-7c2bc2b4] {
919
966
  display: grid;
920
967
  grid-template-columns: auto minmax(0, 1fr) auto;
921
968
  align-content: center;
@@ -928,23 +975,23 @@ svg[data-v-fb67873c],
928
975
  box-shadow: none;
929
976
  background-image: none;
930
977
  }
931
- [data-component~="ui-button"][data-ui-button-state~="variant=card"][data-ui-button-state~="size=lg"][data-v-5c174bca] {
978
+ [data-component~="ui-button"][data-ui-button-state~="variant=card"][data-ui-button-state~="size=lg"][data-v-7c2bc2b4] {
932
979
  min-block-size: max(var(--ui-control-min-block-size), var(--ui-control-size-lg));
933
980
  }
934
- [data-component~="ui-button"][data-ui-button-state~="variant=card"][data-v-5c174bca]:has(.card-icon:empty) {
981
+ [data-component~="ui-button"][data-ui-button-state~="variant=card"][data-v-7c2bc2b4]:has(.card-icon:empty) {
935
982
  grid-template-columns: minmax(0, 1fr) auto;
936
983
  }
937
- .card-icon[data-v-5c174bca] {
984
+ .card-icon[data-v-7c2bc2b4] {
938
985
  display: flex;
939
986
  align-items: flex-start;
940
987
  }
941
- .card-icon[data-v-5c174bca]:empty {
988
+ .card-icon[data-v-7c2bc2b4]:empty {
942
989
  display: none;
943
990
  }
944
- .card-content[data-v-5c174bca] {
991
+ .card-content[data-v-7c2bc2b4] {
945
992
  min-inline-size: 0;
946
993
  }
947
- .card-action[data-v-5c174bca] {
994
+ .card-action[data-v-7c2bc2b4] {
948
995
  display: flex;
949
996
  align-items: center;
950
997
  align-self: center;
@@ -952,29 +999,29 @@ svg[data-v-fb67873c],
952
999
 
953
1000
  /* A link is never :enabled, so interactive states test "not unavailable" instead: for a button that
954
1001
  is exactly :enabled, at the same specificity, and it also matches a link that can be followed. */
955
- [data-component~="ui-button"][data-v-5c174bca]:hover:not(:disabled, [aria-disabled="true"]) {
1002
+ [data-component~="ui-button"][data-v-7c2bc2b4]:hover:not(:disabled, [aria-disabled="true"]) {
956
1003
  border-color: var(--ui-button-hover-border, var(--_tone-hover));
957
1004
  background-color: var(--ui-button-hover-surface, oklch(from var(--_tone) l c h / 12%));
958
1005
  }
959
1006
 
960
1007
  /* Pressed reads as pressed in: the highlight goes, and the shadow moves inside. */
961
- [data-component~="ui-button"][data-v-5c174bca]:active:not(:disabled, [aria-disabled="true"]) {
1008
+ [data-component~="ui-button"][data-v-7c2bc2b4]:active:not(:disabled, [aria-disabled="true"]) {
962
1009
  background-color: var(--ui-button-active-surface, oklch(from var(--_tone) l c h / 18%));
963
1010
  background-image: none;
964
1011
  box-shadow: var(--ui-pressed);
965
1012
  }
966
- [data-component~="ui-button"][data-ui-button-state~="variant=solid"][data-v-5c174bca],
967
- [data-component~="ui-button"][data-ui-button-state~="variant=danger"][data-v-5c174bca] {
1013
+ [data-component~="ui-button"][data-ui-button-state~="variant=solid"][data-v-7c2bc2b4],
1014
+ [data-component~="ui-button"][data-ui-button-state~="variant=danger"][data-v-7c2bc2b4] {
968
1015
  border-color: var(--_tone);
969
1016
  background-color: var(--_tone);
970
1017
  color: var(--_on-tone);
971
1018
  box-shadow: var(--ui-button-solid-shadow, var(--ui-raised));
972
1019
  }
973
- :is([data-component~="ui-button"][data-ui-button-state~="variant=solid"][data-v-5c174bca], [data-component~="ui-button"][data-ui-button-state~="variant=danger"][data-v-5c174bca]):hover:not(:disabled, [aria-disabled="true"]) {
1020
+ :is([data-component~="ui-button"][data-ui-button-state~="variant=solid"][data-v-7c2bc2b4], [data-component~="ui-button"][data-ui-button-state~="variant=danger"][data-v-7c2bc2b4]):hover:not(:disabled, [aria-disabled="true"]) {
974
1021
  background-color: var(--_tone-hover);
975
1022
  border-color: var(--_tone-hover);
976
1023
  }
977
- :is([data-component~="ui-button"][data-ui-button-state~="variant=solid"][data-v-5c174bca], [data-component~="ui-button"][data-ui-button-state~="variant=danger"][data-v-5c174bca]):active:not(:disabled, [aria-disabled="true"]) {
1024
+ :is([data-component~="ui-button"][data-ui-button-state~="variant=solid"][data-v-7c2bc2b4], [data-component~="ui-button"][data-ui-button-state~="variant=danger"][data-v-7c2bc2b4]):active:not(:disabled, [aria-disabled="true"]) {
978
1025
  background-color: var(--_tone-active);
979
1026
  border-color: var(--_tone-active);
980
1027
  background-image: none;
@@ -983,43 +1030,43 @@ svg[data-v-fb67873c],
983
1030
 
984
1031
  /* Tone is the colour, variant is the volume. Every pairing works: a danger outline is a
985
1032
  destructive secondary action, not a special case. */
986
- [data-component~="ui-button"][data-ui-button-state~="tone=neutral"][data-v-5c174bca] {
1033
+ [data-component~="ui-button"][data-ui-button-state~="tone=neutral"][data-v-7c2bc2b4] {
987
1034
  --_hue: var(--ui-text);
988
1035
  --_hue-hover: var(--ui-text);
989
1036
  --_hue-active: var(--ui-text);
990
1037
  --_hue-text: var(--ui-text);
991
1038
  --_on-hue: var(--ui-surface);
992
1039
  }
993
- [data-component~="ui-button"][data-ui-button-state~="tone=danger"][data-v-5c174bca],
994
- [data-component~="ui-button"][data-ui-button-state~="variant=danger"][data-v-5c174bca] {
1040
+ [data-component~="ui-button"][data-ui-button-state~="tone=danger"][data-v-7c2bc2b4],
1041
+ [data-component~="ui-button"][data-ui-button-state~="variant=danger"][data-v-7c2bc2b4] {
995
1042
  --_hue: var(--ui-danger);
996
1043
  --_hue-hover: var(--ui-danger-hover);
997
1044
  --_hue-active: var(--ui-danger-hover);
998
1045
  --_hue-text: var(--ui-danger-hover);
999
1046
  --_on-hue: var(--ui-on-danger);
1000
1047
  }
1001
- [data-component~="ui-button"][data-ui-button-state~="tone=success"][data-v-5c174bca] {
1048
+ [data-component~="ui-button"][data-ui-button-state~="tone=success"][data-v-7c2bc2b4] {
1002
1049
  --_hue: var(--ui-success);
1003
1050
  --_hue-hover: color-mix(in srgb, var(--ui-success) 85%, #000);
1004
1051
  --_hue-active: color-mix(in srgb, var(--ui-success) 75%, #000);
1005
1052
  --_hue-text: color-mix(in srgb, var(--ui-success) 85%, #000);
1006
1053
  --_on-hue: var(--ui-surface);
1007
1054
  }
1008
- [data-component~="ui-button"][data-ui-button-state~="tone=warning"][data-v-5c174bca] {
1055
+ [data-component~="ui-button"][data-ui-button-state~="tone=warning"][data-v-7c2bc2b4] {
1009
1056
  --_hue: var(--ui-warning);
1010
1057
  --_hue-hover: color-mix(in srgb, var(--ui-warning) 85%, #000);
1011
1058
  --_hue-active: color-mix(in srgb, var(--ui-warning) 75%, #000);
1012
1059
  --_hue-text: color-mix(in srgb, var(--ui-warning) 85%, #000);
1013
1060
  --_on-hue: var(--ui-surface);
1014
1061
  }
1015
- [data-component~="ui-button"][data-ui-button-state~="tone=info"][data-v-5c174bca] {
1062
+ [data-component~="ui-button"][data-ui-button-state~="tone=info"][data-v-7c2bc2b4] {
1016
1063
  --_hue: var(--ui-info);
1017
1064
  --_hue-hover: color-mix(in srgb, var(--ui-info) 85%, #000);
1018
1065
  --_hue-active: color-mix(in srgb, var(--ui-info) 75%, #000);
1019
1066
  --_hue-text: color-mix(in srgb, var(--ui-info) 85%, #000);
1020
1067
  --_on-hue: var(--ui-surface);
1021
1068
  }
1022
- [data-component~="ui-button"][data-ui-button-state~="variant=ghost"][data-v-5c174bca] {
1069
+ [data-component~="ui-button"][data-ui-button-state~="variant=ghost"][data-v-7c2bc2b4] {
1023
1070
  border-color: transparent;
1024
1071
  background: transparent;
1025
1072
  box-shadow: none;
@@ -1027,14 +1074,14 @@ svg[data-v-fb67873c],
1027
1074
  }
1028
1075
 
1029
1076
  /* Tints derive from the text colour, not a surface token, so hover and press show on any background. */
1030
- [data-component~="ui-button"][data-ui-button-state~="variant=ghost"][data-v-5c174bca]:hover:not(:disabled, [aria-disabled="true"]) {
1077
+ [data-component~="ui-button"][data-ui-button-state~="variant=ghost"][data-v-7c2bc2b4]:hover:not(:disabled, [aria-disabled="true"]) {
1031
1078
  background-color: var(--ui-button-ghost-hover-surface, oklch(from var(--_tone) l c h / 10%));
1032
1079
  border-color: transparent;
1033
1080
  }
1034
1081
 
1035
1082
  /* Pressed, or holding its menu open, a ghost button sinks slightly: a light surface with a faint
1036
1083
  edge and a soft inner shadow. Lighter than hover, so an open menu's trigger never reads as heavy. */
1037
- [data-component~="ui-button"][data-ui-button-state~="variant=ghost"][data-v-5c174bca]:is(:active, [aria-expanded="true"]):not(:disabled, [aria-disabled="true"]) {
1084
+ [data-component~="ui-button"][data-ui-button-state~="variant=ghost"][data-v-7c2bc2b4]:is(:active, [aria-expanded="true"]):not(:disabled, [aria-disabled="true"]) {
1038
1085
  background-color: var(
1039
1086
  --ui-button-ghost-active-surface,
1040
1087
  color-mix(in oklch, var(--ui-surface), var(--_tone) 3%)
@@ -1046,13 +1093,13 @@ svg[data-v-fb67873c],
1046
1093
  }
1047
1094
 
1048
1095
  /* A soft halo that transitions in with the other box-shadow changes, layered on the raised shadow. */
1049
- [data-component~="ui-button"][data-v-5c174bca]:focus-visible {
1096
+ [data-component~="ui-button"][data-v-7c2bc2b4]:focus-visible {
1050
1097
  outline: none;
1051
1098
  box-shadow:
1052
1099
  var(--ui-button-shadow, var(--ui-raised)),
1053
1100
  var(--ui-focus-halo);
1054
1101
  }
1055
- [data-component~="ui-button"][data-ui-button-state~="variant=solid"][data-v-5c174bca]:focus-visible {
1102
+ [data-component~="ui-button"][data-ui-button-state~="variant=solid"][data-v-7c2bc2b4]:focus-visible {
1056
1103
  box-shadow:
1057
1104
  var(--ui-button-solid-shadow, var(--ui-raised)),
1058
1105
  var(--ui-focus-halo);
@@ -1060,7 +1107,7 @@ svg[data-v-fb67873c],
1060
1107
 
1061
1108
  /* A loading action stays visually active; only an explicitly disabled action takes the
1062
1109
  neutral disabled palette. Its flat surface and muted ink make the state unambiguous. */
1063
- [data-component~="ui-button"][data-v-5c174bca]:is(:disabled, [aria-disabled="true"]:not([aria-busy="true"])) {
1110
+ [data-component~="ui-button"][data-v-7c2bc2b4]:is(:disabled, [aria-disabled="true"]:not([aria-busy="true"])) {
1064
1111
  border-color: var(--ui-disabled-border);
1065
1112
  background-color: var(--ui-disabled-surface);
1066
1113
  color: var(--ui-disabled-text);
@@ -1070,19 +1117,19 @@ svg[data-v-fb67873c],
1070
1117
  background-image: none;
1071
1118
  box-shadow: none;
1072
1119
  }
1073
- :is([data-component~="ui-button"][data-ui-button-state~="loading"][data-v-5c174bca], [data-component~="ui-button"][data-ui-button-state~="pending"][data-v-5c174bca]):focus-visible {
1120
+ :is([data-component~="ui-button"][data-ui-button-state~="loading"][data-v-7c2bc2b4], [data-component~="ui-button"][data-ui-button-state~="pending"][data-v-7c2bc2b4]):focus-visible {
1074
1121
  box-shadow: var(--ui-focus-halo);
1075
1122
  }
1076
1123
 
1077
1124
  /* Ghost keeps no border, but gains the same neutral surface as other disabled buttons. */
1078
- [data-component~="ui-button"][data-ui-button-state~="variant=ghost"][data-v-5c174bca]:is(:disabled, [aria-disabled="true"]:not([aria-busy="true"])) {
1125
+ [data-component~="ui-button"][data-ui-button-state~="variant=ghost"][data-v-7c2bc2b4]:is(:disabled, [aria-disabled="true"]:not([aria-busy="true"])) {
1079
1126
  background-color: var(--ui-disabled-surface);
1080
1127
  border-color: transparent;
1081
1128
  }
1082
1129
 
1083
1130
  /* The size states outrank :host, so sm is named too, or a small button would stay small. */
1084
1131
  @media (pointer: coarse) {
1085
- [data-component~="ui-button"][data-v-5c174bca], [data-component~="ui-button"][data-ui-button-state~="size=sm"][data-v-5c174bca] {
1132
+ [data-component~="ui-button"][data-v-7c2bc2b4], [data-component~="ui-button"][data-ui-button-state~="size=sm"][data-v-7c2bc2b4] {
1086
1133
  min-block-size: var(--ui-control-min-block-size);
1087
1134
  }
1088
1135
  }
@@ -1093,15 +1140,15 @@ svg[data-v-fb67873c],
1093
1140
  area. xs sits inside a line of text the same way, so it keeps its size and gains the area too.
1094
1141
  Only these need it: a hit area on every button would reach over its neighbours. */
1095
1142
  html[data-ui-input-modality="touch"]
1096
- [data-component~="ui-button"][data-ui-button-state~="variant=link"][data-v-5c174bca],
1143
+ [data-component~="ui-button"][data-ui-button-state~="variant=link"][data-v-7c2bc2b4],
1097
1144
  html[data-ui-input-modality="touch"]
1098
- [data-component~="ui-button"][data-ui-button-state~="size=xs"][data-v-5c174bca] {
1145
+ [data-component~="ui-button"][data-ui-button-state~="size=xs"][data-v-7c2bc2b4] {
1099
1146
  position: relative;
1100
1147
  }
1101
1148
  html[data-ui-input-modality="touch"]
1102
- [data-component~="ui-button"][data-ui-button-state~="variant=link"][data-v-5c174bca]::after,
1149
+ [data-component~="ui-button"][data-ui-button-state~="variant=link"][data-v-7c2bc2b4]::after,
1103
1150
  html[data-ui-input-modality="touch"]
1104
- [data-component~="ui-button"][data-ui-button-state~="size=xs"][data-v-5c174bca]::after {
1151
+ [data-component~="ui-button"][data-ui-button-state~="size=xs"][data-v-7c2bc2b4]::after {
1105
1152
  position: absolute;
1106
1153
  inset: 50% auto auto 50%;
1107
1154
  inline-size: max(100%, var(--ui-control-min-block-size));
@@ -1112,7 +1159,7 @@ html[data-ui-input-modality="touch"]
1112
1159
 
1113
1160
  /* Link: an inline text action. No box, padding, or minimum height (inline targets are exempt under
1114
1161
  WCAG 2.5.8); the inherited font; an underline that strengthens on hover; a visible focus ring. */
1115
- [data-component~="ui-button"][data-ui-button-state~="variant=link"][data-v-5c174bca] {
1162
+ [data-component~="ui-button"][data-ui-button-state~="variant=link"][data-v-7c2bc2b4] {
1116
1163
  display: inline;
1117
1164
  min-block-size: 0;
1118
1165
  padding: 0;
@@ -1130,21 +1177,21 @@ html[data-ui-input-modality="touch"]
1130
1177
  color var(--ui-motion-fast) var(--ui-motion-ease),
1131
1178
  text-decoration-color var(--ui-motion-fast) var(--ui-motion-ease);
1132
1179
  }
1133
- [data-component~="ui-button"][data-ui-button-state~="variant=link"][data-v-5c174bca]:hover:not(:disabled, [aria-disabled="true"]) {
1180
+ [data-component~="ui-button"][data-ui-button-state~="variant=link"][data-v-7c2bc2b4]:hover:not(:disabled, [aria-disabled="true"]) {
1134
1181
  color: var(--ui-button-link-hover-text, var(--ui-text-primary));
1135
1182
  text-decoration-color: currentColor;
1136
1183
  background: none;
1137
1184
  transform: none;
1138
1185
  }
1139
- [data-component~="ui-button"][data-ui-button-state~="variant=link"][data-v-5c174bca]:active:not(:disabled, [aria-disabled="true"]) {
1186
+ [data-component~="ui-button"][data-ui-button-state~="variant=link"][data-v-7c2bc2b4]:active:not(:disabled, [aria-disabled="true"]) {
1140
1187
  background: none;
1141
1188
  transform: none;
1142
1189
  }
1143
- [data-component~="ui-button"][data-ui-button-state~="variant=link"][data-v-5c174bca]:is(:disabled, [aria-disabled="true"]:not([aria-busy="true"])) {
1190
+ [data-component~="ui-button"][data-ui-button-state~="variant=link"][data-v-7c2bc2b4]:is(:disabled, [aria-disabled="true"]:not([aria-busy="true"])) {
1144
1191
  background: none;
1145
1192
  border-color: transparent;
1146
1193
  }
1147
- [data-component~="ui-button"][data-ui-button-state~="variant=link"][data-v-5c174bca]:focus-visible {
1194
+ [data-component~="ui-button"][data-ui-button-state~="variant=link"][data-v-7c2bc2b4]:focus-visible {
1148
1195
  box-shadow: none;
1149
1196
  /* Fallback keeps the ring if the token is missing: an unresolved var() would void the outline. */
1150
1197
  outline: var(--ui-focus-width) solid var(--ui-focus-ring);
@@ -1152,7 +1199,7 @@ html[data-ui-input-modality="touch"]
1152
1199
  }
1153
1200
 
1154
1201
  /* A component that sets its display still honours the hidden attribute on its root. */
1155
- [data-component~="ui-button"][hidden][data-v-5c174bca] {
1202
+ [data-component~="ui-button"][hidden][data-v-7c2bc2b4] {
1156
1203
  display: none;
1157
1204
  }
1158
1205