@eos-ui/vue 0.4.0 → 0.5.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 (96) hide show
  1. package/README.md +4 -4
  2. package/dist/component-names.js +1 -1
  3. package/dist/component-names.js.map +1 -1
  4. package/dist/components/Actions/EActions.js.map +1 -1
  5. package/dist/components/Actions/EActions.vue.d.ts +1 -1
  6. package/dist/components/Actions/EActions.vue_vue_type_script_setup_true_lang.js.map +1 -1
  7. package/dist/components/Avatar/EAvatar.js.map +1 -1
  8. package/dist/components/Avatar/EAvatar.vue.d.ts +1 -1
  9. package/dist/components/Avatar/EAvatar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  10. package/dist/components/Button/EButton.js.map +1 -1
  11. package/dist/components/Button/EButton.vue.d.ts +2 -0
  12. package/dist/components/Button/EButton.vue_vue_type_script_setup_true_lang.js +64 -29
  13. package/dist/components/Button/EButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  14. package/dist/components/Calendar/ECalendar.js.map +1 -1
  15. package/dist/components/Calendar/ECalendar.vue.d.ts +1 -1
  16. package/dist/components/Calendar/ECalendar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  17. package/dist/components/Checkbox/ECheckbox.js.map +1 -1
  18. package/dist/components/Checkbox/ECheckbox.vue.d.ts +1 -1
  19. package/dist/components/Checkbox/ECheckbox.vue_vue_type_script_setup_true_lang.js.map +1 -1
  20. package/dist/components/Combobox/EComboboxBase.js.map +1 -1
  21. package/dist/components/Combobox/EComboboxBase.vue_vue_type_script_setup_true_lang.js +4 -8
  22. package/dist/components/Combobox/EComboboxBase.vue_vue_type_script_setup_true_lang.js.map +1 -1
  23. package/dist/components/Combobox/types.d.ts +2 -2
  24. package/dist/components/DataGrid/EDataGrid.js.map +1 -1
  25. package/dist/components/DataGrid/EDataGrid.vue.d.ts +1 -1
  26. package/dist/components/DataGrid/EDataGrid.vue_vue_type_script_setup_true_lang.js +1 -0
  27. package/dist/components/DataGrid/EDataGrid.vue_vue_type_script_setup_true_lang.js.map +1 -1
  28. package/dist/components/DescriptionList/EDescriptionList.js.map +1 -1
  29. package/dist/components/DescriptionList/EDescriptionList.vue_vue_type_script_setup_true_lang.js +2 -2
  30. package/dist/components/DescriptionList/EDescriptionList.vue_vue_type_script_setup_true_lang.js.map +1 -1
  31. package/dist/components/Dialog/EDialog.js.map +1 -1
  32. package/dist/components/Dialog/EDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  33. package/dist/components/Drawer/EDrawer.js.map +1 -1
  34. package/dist/components/Drawer/EDrawer.vue_vue_type_script_setup_true_lang.js.map +1 -1
  35. package/dist/components/EmptyState/EEmptyState.js.map +1 -1
  36. package/dist/components/EmptyState/EEmptyState.vue.d.ts +1 -1
  37. package/dist/components/EmptyState/EEmptyState.vue_vue_type_script_setup_true_lang.js.map +1 -1
  38. package/dist/components/Grid/EGrid.js.map +1 -1
  39. package/dist/components/Grid/EGrid.vue.d.ts +1 -1
  40. package/dist/components/Grid/EGrid.vue_vue_type_script_setup_true_lang.js.map +1 -1
  41. package/dist/components/IconButton/EIconButton.js.map +1 -1
  42. package/dist/components/IconButton/EIconButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  43. package/dist/components/Inline/EInline.js.map +1 -1
  44. package/dist/components/Inline/EInline.vue.d.ts +1 -1
  45. package/dist/components/Inline/EInline.vue_vue_type_script_setup_true_lang.js.map +1 -1
  46. package/dist/components/Kbd/EKbd.js.map +1 -1
  47. package/dist/components/Kbd/EKbd.vue_vue_type_script_setup_true_lang.js.map +1 -1
  48. package/dist/components/NavList/ENavList.js.map +1 -1
  49. package/dist/components/NavList/ENavList.vue_vue_type_script_setup_true_lang.js.map +1 -1
  50. package/dist/components/Notice/ENotice.js.map +1 -1
  51. package/dist/components/Notice/ENotice.vue_vue_type_script_setup_true_lang.js.map +1 -1
  52. package/dist/components/OtpField/EOtpField.js.map +1 -1
  53. package/dist/components/OtpField/EOtpField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  54. package/dist/components/Pagination/EPagination.js.map +1 -1
  55. package/dist/components/Pagination/EPagination.vue_vue_type_script_setup_true_lang.js.map +1 -1
  56. package/dist/components/PasswordField/EPasswordField.js.map +1 -1
  57. package/dist/components/PasswordField/EPasswordField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  58. package/dist/components/SearchBar/ESearchBar.js.map +1 -1
  59. package/dist/components/SearchBar/ESearchBar.vue.d.ts +1 -1
  60. package/dist/components/SearchBar/ESearchBar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  61. package/dist/components/Segmented/ESegmented.js.map +1 -1
  62. package/dist/components/Segmented/ESegmented.vue_vue_type_script_setup_true_lang.js.map +1 -1
  63. package/dist/components/Select/ESelectControl.js.map +1 -1
  64. package/dist/components/Select/ESelectControl.vue_vue_type_script_setup_true_lang.js.map +1 -1
  65. package/dist/components/SignaturePad/ESignaturePad.js.map +1 -1
  66. package/dist/components/SignaturePad/ESignaturePad.vue_vue_type_script_setup_true_lang.js.map +1 -1
  67. package/dist/components/Stack/EStack.js.map +1 -1
  68. package/dist/components/Stack/EStack.vue.d.ts +1 -1
  69. package/dist/components/Stack/EStack.vue_vue_type_script_setup_true_lang.js.map +1 -1
  70. package/dist/components/Stamp/EStamp.js.map +1 -1
  71. package/dist/components/Stamp/EStamp.vue.d.ts +2 -2
  72. package/dist/components/Stamp/EStamp.vue_vue_type_script_setup_true_lang.js +2 -2
  73. package/dist/components/Stamp/EStamp.vue_vue_type_script_setup_true_lang.js.map +1 -1
  74. package/dist/components/Stepper/EStepper.js.map +1 -1
  75. package/dist/components/Stepper/EStepper.vue_vue_type_script_setup_true_lang.js.map +1 -1
  76. package/dist/components/Surface/ESurface.js.map +1 -1
  77. package/dist/components/Surface/ESurface.vue.d.ts +1 -1
  78. package/dist/components/Surface/ESurface.vue_vue_type_script_setup_true_lang.js.map +1 -1
  79. package/dist/components/Switch/ESwitch.js.map +1 -1
  80. package/dist/components/Switch/ESwitch.vue_vue_type_script_setup_true_lang.js.map +1 -1
  81. package/dist/components/Table/ETable.js +8 -0
  82. package/dist/components/Table/ETable.js.map +1 -0
  83. package/dist/components/Table/ETable.vue.d.ts +25 -0
  84. package/dist/components/Table/ETable.vue_vue_type_script_setup_true_lang.js +28 -0
  85. package/dist/components/Table/ETable.vue_vue_type_script_setup_true_lang.js.map +1 -0
  86. package/dist/components/Table/index.d.ts +1 -0
  87. package/dist/components/Tabs/ETabs.js.map +1 -1
  88. package/dist/components/Tabs/ETabs.vue.d.ts +10 -2
  89. package/dist/components/Tabs/ETabs.vue_vue_type_script_setup_true_lang.js +11 -3
  90. package/dist/components/Tabs/ETabs.vue_vue_type_script_setup_true_lang.js.map +1 -1
  91. package/dist/components/Upload/EUpload.js.map +1 -1
  92. package/dist/components/Upload/EUpload.vue_vue_type_script_setup_true_lang.js.map +1 -1
  93. package/dist/index.d.ts +1 -0
  94. package/dist/index.js +10 -9
  95. package/dist/style.css +553 -174
  96. package/package.json +3 -2
package/dist/style.css CHANGED
@@ -178,6 +178,8 @@
178
178
  .e-radio,
179
179
  .e-sel-trigger,
180
180
  .e-combo,
181
+ .e-search,
182
+ .e-seg,
181
183
  .e-avatar {
182
184
  border: 1px solid ButtonText;
183
185
  }
@@ -464,6 +466,9 @@
464
466
  @layer e.reset, e.tokens, e.base, e.primitives, e.blocks, e.controls, e.composites, e.containers, e.page;
465
467
  @layer e.primitives {
466
468
  .e-avatar {
469
+ --e-ring: var(--e-border-strong);
470
+
471
+ position: relative;
467
472
  display: inline-grid;
468
473
  place-items: center;
469
474
  flex: none;
@@ -471,21 +476,31 @@
471
476
  width: var(--e-tap, 44px);
472
477
  height: var(--e-tap, 44px);
473
478
  overflow: hidden;
474
- border: var(--e-stroke-edge) solid var(--e-border-strong);
479
+ border: 0;
475
480
  border-radius: var(--e-radius-md);
476
481
  background: var(--e-surface-tint);
477
482
  color: var(--e-primary);
478
483
  font: 600 var(--e-text-sm) / 1 var(--e-font-mono);
479
484
  letter-spacing: 0.02em;
480
485
  }
486
+
487
+ /* The ring sits over the picture so an image never covers it. */
488
+ .e-avatar::after {
489
+ content: "";
490
+ position: absolute;
491
+ inset: 0;
492
+ border-radius: inherit;
493
+ box-shadow: inset 0 0 0 var(--e-stroke-edge) var(--e-ring);
494
+ pointer-events: none;
495
+ transition: box-shadow var(--e-duration-tap) var(--e-easing-out);
496
+ }
481
497
  .e-avatar--button {
482
498
  position: relative;
483
499
  padding: 0;
484
500
  cursor: pointer;
485
- transition: border-color var(--e-duration-tap) var(--e-easing-out);
486
501
  }
487
502
  .e-avatar--button:hover {
488
- border-color: var(--e-ink);
503
+ --e-ring: var(--e-ink);
489
504
  }
490
505
  .e-avatar--button:focus-visible {
491
506
  outline: var(--e-stroke-focus) solid var(--e-focus-ring);
@@ -608,21 +623,24 @@
608
623
  --e-hover: color-mix(in srgb, var(--e-fill), var(--e-shade-hover));
609
624
  --e-press: color-mix(in srgb, var(--e-fill), var(--e-shade-press));
610
625
 
611
- /* The face is a whole rounded box and the slab is an offset copy of it showing underneath, in the colour of the face's own edge. The margin gives back the room the slab takes, so the button is still one control height tall, and pressing sinks the face onto the slab. */
626
+ /* One rounded box, one control height tall. The slab is an inset shadow shifted up by the lift: the part of the box left uncovered along its bottom, which follows the corners up the sides, in the colour of the box's own edge. It is cut by the box's one outline, so nothing sits behind the curve. Pressing sinks the face over it. */
612
627
  --e-lift: var(--e-depth);
628
+ --e-band: calc(var(--e-lift) + var(--e-stroke-edge));
629
+ --e-ring: var(--e-slab);
613
630
 
614
631
  position: relative;
615
632
  display: inline-flex;
616
633
  align-items: center;
617
634
  justify-content: center;
618
635
  gap: var(--e-space-2);
619
- height: calc(var(--e-control-height) - var(--e-lift));
620
- margin-block-end: var(--e-lift);
621
- padding: 0 var(--e-space-4);
622
- border: var(--e-stroke-edge) solid var(--e-slab);
636
+ height: var(--e-control-height);
637
+ padding: 0 var(--e-space-4) var(--e-lift);
638
+ border: 0;
623
639
  border-radius: var(--e-radius-md);
624
- background: var(--e-fill);
625
- box-shadow: 0 var(--e-lift) 0 0 var(--e-slab);
640
+ background-color: var(--e-fill);
641
+ box-shadow:
642
+ inset 0 0 0 var(--e-stroke-edge) var(--e-ring),
643
+ inset 0 calc(-1 * var(--e-band)) 0 0 var(--e-slab);
626
644
  color: var(--e-on-fill);
627
645
  font: 500 var(--e-text-md) / 1 var(--e-font-sans);
628
646
  letter-spacing: 0.01em;
@@ -630,17 +648,19 @@
630
648
  text-decoration: none;
631
649
  cursor: pointer;
632
650
  transition:
633
- transform var(--e-duration-tap) var(--e-easing-out),
634
651
  box-shadow var(--e-duration-tap) var(--e-easing-out),
635
652
  background-color var(--e-duration-tap) var(--e-easing-out);
636
653
  }
637
654
  .e-btn:hover {
638
- background: var(--e-hover);
655
+ --e-slab: color-mix(in srgb, var(--e-hover), var(--e-shade-slab));
656
+
657
+ background-color: var(--e-hover);
639
658
  }
640
659
  .e-btn:active {
641
- background: var(--e-press);
642
- box-shadow: 0 0 0 0 var(--e-slab);
643
- transform: translateY(var(--e-lift));
660
+ --e-lift: 0px;
661
+
662
+ background-color: var(--e-press);
663
+ box-shadow: inset 0 0 0 var(--e-stroke-edge) var(--e-ring);
644
664
  }
645
665
  .e-btn--secondary {
646
666
  --e-fill: var(--e-secondary);
@@ -656,21 +676,24 @@
656
676
  --e-slab: var(--e-border-strong);
657
677
  }
658
678
  .e-btn--outline:hover {
659
- background: color-mix(in srgb, var(--e-surface), var(--e-shade-hover));
660
- border-color: var(--e-ink);
679
+ --e-ring: var(--e-ink);
680
+ --e-slab: var(--e-ink);
681
+
682
+ background-color: color-mix(in srgb, var(--e-surface), var(--e-shade-hover));
661
683
  }
662
684
  .e-btn--outline:active {
663
- background: color-mix(in srgb, var(--e-surface), var(--e-shade-press));
664
- border-color: var(--e-ink);
685
+ --e-ring: var(--e-ink);
686
+ --e-slab: var(--e-ink);
687
+
688
+ background-color: color-mix(in srgb, var(--e-surface), var(--e-shade-press));
665
689
  }
666
690
  .e-btn--quiet {
667
- border-color: transparent;
668
-
691
+ --e-ring: transparent;
669
692
  --e-lift: 0px;
670
693
 
671
694
  background: transparent;
672
695
  color: var(--e-ink);
673
- box-shadow: none;
696
+ box-shadow: inset 0 0 0 var(--e-stroke-edge) var(--e-ring);
674
697
  padding-inline: var(--e-space-3);
675
698
  text-decoration: underline;
676
699
  text-underline-offset: 5px;
@@ -678,18 +701,72 @@
678
701
  text-decoration-color: var(--e-border-strong);
679
702
  }
680
703
  .e-btn--quiet:not([disabled], [aria-disabled="true"]):hover {
681
- border-color: var(--e-wash-ring);
704
+ --e-ring: var(--e-wash-ring);
705
+
682
706
  background: var(--e-wash-hover);
683
707
  text-decoration-color: currentcolor;
684
708
  }
685
709
  .e-btn--quiet:not([disabled], [aria-disabled="true"]):active {
686
- border-color: var(--e-ink);
710
+ --e-ring: var(--e-ink);
711
+
687
712
  background: var(--e-wash-press);
688
713
  transform: none;
689
714
  }
690
- .e-btn .e-icon {
715
+ .e-btn .e-icon,
716
+ .e-btn-spinner {
691
717
  margin-inline-start: calc(-0.5 * var(--e-space-1));
692
718
  }
719
+ .e-btn-spinner {
720
+ flex: none;
721
+ width: 1.125em;
722
+ height: 1.125em;
723
+ fill: none;
724
+ stroke: currentcolor;
725
+ stroke-width: 3;
726
+ stroke-linecap: round;
727
+ stroke-dasharray: 36 56;
728
+ animation: e-btn-spin 0.9s linear infinite;
729
+ }
730
+
731
+ /* Busy reads as unavailable and in progress: a soft tint of the button's colour with a dashed edge like a disabled button, and stripes that move. The face grows over its slab, so the button stays one control height tall. The edge is a pseudo-element, so a page's focus reset cannot remove it. */
732
+ .e-btn--loading {
733
+ --e-lift: 0px;
734
+ --e-tint: var(--e-fill);
735
+ --e-busy: color-mix(in srgb, var(--e-tint) 80%, var(--e-ink));
736
+ }
737
+ .e-btn--outline.e-btn--loading {
738
+ --e-tint: var(--e-border-strong);
739
+ }
740
+ .e-btn--loading,
741
+ .e-btn--loading:hover,
742
+ .e-btn--loading:active {
743
+ background-color: color-mix(in srgb, var(--e-tint) 14%, var(--e-surface));
744
+ background-image: repeating-linear-gradient(135deg, transparent 0 8px, color-mix(in srgb, var(--e-tint) 20%, transparent) 8px 16px);
745
+ background-size: 22.63px 22.63px;
746
+ box-shadow: none;
747
+ color: var(--e-busy);
748
+ transform: none;
749
+ cursor: not-allowed;
750
+ animation: e-btn-stripes 0.8s linear infinite;
751
+ }
752
+ .e-btn--loading::before {
753
+ content: "";
754
+ position: absolute;
755
+ inset: 0;
756
+ border: var(--e-stroke-edge) dashed var(--e-busy);
757
+ border-radius: inherit;
758
+ pointer-events: none;
759
+ }
760
+ @keyframes e-btn-stripes {
761
+ to {
762
+ background-position-x: 22.63px;
763
+ }
764
+ }
765
+ @keyframes e-btn-spin {
766
+ to {
767
+ transform: rotate(360deg);
768
+ }
769
+ }
693
770
  .e-btn--block {
694
771
  width: 100%;
695
772
  }
@@ -699,9 +776,9 @@
699
776
  .e-btn[aria-pressed="true"]:hover,
700
777
  .e-btn[aria-pressed="true"]:active {
701
778
  --e-slab: var(--e-primary);
779
+ --e-ring: var(--e-primary);
702
780
 
703
- border-color: var(--e-primary);
704
- background: var(--e-surface-hover);
781
+ background-color: var(--e-surface-hover);
705
782
  color: var(--e-primary);
706
783
  }
707
784
  .e-btn[disabled],
@@ -711,8 +788,8 @@
711
788
  cursor: not-allowed;
712
789
  background: transparent;
713
790
  color: var(--e-muted);
714
- border: var(--e-stroke-edge) dashed var(--e-border-strong);
715
- outline: 0;
791
+ outline: var(--e-stroke-edge) dashed var(--e-border-strong);
792
+ outline-offset: calc(-1 * var(--e-stroke-edge));
716
793
  box-shadow: none;
717
794
  transform: none;
718
795
  }
@@ -720,6 +797,12 @@
720
797
  .e-btn {
721
798
  transition: none;
722
799
  }
800
+ .e-btn-spinner {
801
+ animation-duration: 3s;
802
+ }
803
+ .e-btn--loading {
804
+ animation: none;
805
+ }
723
806
  }
724
807
  @media print {
725
808
  .e-btn {
@@ -737,7 +820,7 @@
737
820
  }
738
821
  .e-btn[disabled],
739
822
  .e-btn[aria-disabled="true"] {
740
- border-color: GrayText;
823
+ outline-color: GrayText;
741
824
  color: GrayText;
742
825
  }
743
826
  }
@@ -767,7 +850,8 @@
767
850
  box-shadow: inset 0 0 0 var(--e-stroke-edge) var(--e-ink);
768
851
  }
769
852
  .e-icon-btn:disabled {
770
- border: var(--e-stroke-edge) dashed var(--e-border-strong);
853
+ outline: var(--e-stroke-edge) dashed var(--e-border-strong);
854
+ outline-offset: calc(-1 * var(--e-stroke-edge));
771
855
  color: var(--e-muted);
772
856
  cursor: not-allowed;
773
857
  }
@@ -788,7 +872,7 @@
788
872
  outline-offset: calc(-1 * var(--e-stroke-edge));
789
873
  }
790
874
  .e-icon-btn:disabled {
791
- border-color: GrayText;
875
+ outline-color: GrayText;
792
876
  color: GrayText;
793
877
  }
794
878
  }
@@ -826,7 +910,7 @@
826
910
  gap: var(--e-space-1);
827
911
  height: var(--e-control-height);
828
912
  padding: 0 var(--e-space-2);
829
- border: var(--e-stroke-edge) solid transparent;
913
+ border: 0;
830
914
  border-radius: var(--e-radius-md);
831
915
  background: transparent;
832
916
  color: var(--e-ink);
@@ -836,7 +920,7 @@
836
920
  }
837
921
  .e-cal-pick:hover {
838
922
  background: var(--e-surface-hover);
839
- border-color: var(--e-border-strong);
923
+ box-shadow: inset 0 0 0 var(--e-stroke-edge) var(--e-border-strong);
840
924
  }
841
925
  .e-cal-pick:focus-visible {
842
926
  outline: var(--e-stroke-focus) solid var(--e-focus-ring);
@@ -889,7 +973,7 @@
889
973
  width: 100%;
890
974
  height: var(--e-tap);
891
975
  padding: 0;
892
- border: var(--e-stroke-edge) solid transparent;
976
+ border: 0;
893
977
  border-radius: var(--e-radius-md);
894
978
  background: transparent;
895
979
  color: var(--e-ink);
@@ -902,7 +986,7 @@
902
986
  /* stylelint-disable-next-line selector-not-notation -- the selector stays in this form */
903
987
  .e-day:hover:not(:disabled):not(.e-day--sel) {
904
988
  background: var(--e-surface-hover);
905
- border-color: var(--e-border-strong);
989
+ box-shadow: inset 0 0 0 var(--e-stroke-edge) var(--e-border-strong);
906
990
  }
907
991
  .e-day:focus-visible {
908
992
  outline: var(--e-stroke-focus) solid var(--e-focus-ring);
@@ -917,7 +1001,7 @@
917
1001
  }
918
1002
  .e-day--sel {
919
1003
  background: var(--e-primary);
920
- border-color: var(--e-primary);
1004
+ box-shadow: none;
921
1005
  font-weight: 700;
922
1006
  color: var(--e-on-primary);
923
1007
  }
@@ -960,7 +1044,7 @@
960
1044
  height: 100%;
961
1045
  min-height: var(--e-tap);
962
1046
  padding: 0;
963
- border: var(--e-stroke-edge) solid transparent;
1047
+ border: 0;
964
1048
  border-radius: var(--e-radius-md);
965
1049
  background: transparent;
966
1050
  color: var(--e-ink);
@@ -976,7 +1060,7 @@
976
1060
  /* stylelint-disable-next-line selector-not-notation -- the selector stays in this form */
977
1061
  .e-cal-cell:hover:not(:disabled):not(.e-day--sel) {
978
1062
  background: var(--e-surface-hover);
979
- border-color: var(--e-border-strong);
1063
+ box-shadow: inset 0 0 0 var(--e-stroke-edge) var(--e-border-strong);
980
1064
  }
981
1065
  .e-cal-cell:focus-visible {
982
1066
  outline: var(--e-stroke-focus) solid var(--e-focus-ring);
@@ -989,7 +1073,7 @@
989
1073
  }
990
1074
  .e-cal-cell.e-day--sel {
991
1075
  background: var(--e-primary);
992
- border-color: var(--e-primary);
1076
+ box-shadow: none;
993
1077
  font-weight: 700;
994
1078
  color: var(--e-on-primary);
995
1079
  }
@@ -1092,12 +1176,17 @@
1092
1176
  width: 24px;
1093
1177
  height: 24px;
1094
1178
  margin: 0;
1095
- border: var(--e-stroke-edge) solid var(--e-border-strong);
1179
+
1180
+ --e-ring: var(--e-border-strong);
1181
+
1182
+ border: 0;
1096
1183
  background: var(--e-surface);
1097
- box-shadow: var(--e-well);
1184
+ box-shadow:
1185
+ inset 0 0 0 var(--e-stroke-edge) var(--e-ring),
1186
+ var(--e-well);
1098
1187
  cursor: inherit;
1099
1188
  transition:
1100
- border-color var(--e-duration-tap) var(--e-easing-out),
1189
+ box-shadow var(--e-duration-tap) var(--e-easing-out),
1101
1190
  background-color var(--e-duration-tap) var(--e-easing-out);
1102
1191
  }
1103
1192
 
@@ -1111,12 +1200,12 @@
1111
1200
 
1112
1201
  .e-check:hover,
1113
1202
  .e-radio:hover {
1114
- border-color: var(--e-ink);
1203
+ --e-ring: var(--e-ink);
1204
+
1115
1205
  background-color: var(--e-surface-hover);
1116
1206
  }
1117
1207
 
1118
1208
  .e-check:checked {
1119
- border-color: var(--e-primary);
1120
1209
  background-color: var(--e-primary);
1121
1210
  box-shadow: none;
1122
1211
  }
@@ -1135,7 +1224,6 @@
1135
1224
  }
1136
1225
 
1137
1226
  .e-radio:checked {
1138
- border-color: var(--e-primary);
1139
1227
  background-color: var(--e-primary);
1140
1228
  box-shadow: none;
1141
1229
  background-image: radial-gradient(circle, var(--e-on-primary) 0 4px, transparent 5px);
@@ -1155,16 +1243,17 @@
1155
1243
 
1156
1244
  .e-check:disabled,
1157
1245
  .e-radio:disabled {
1158
- border-style: dashed;
1246
+ outline: var(--e-stroke-edge) dashed var(--e-border-strong);
1247
+ outline-offset: calc(-1 * var(--e-stroke-edge));
1159
1248
  background-color: var(--e-surface-tint);
1160
1249
  box-shadow: none;
1161
1250
  }
1162
1251
 
1163
1252
  .e-check:checked:disabled,
1164
1253
  .e-radio:checked:disabled {
1165
- border-style: solid;
1254
+ outline: 0;
1166
1255
  background-color: var(--e-surface-tint);
1167
- border-color: var(--e-border-strong);
1256
+ box-shadow: inset 0 0 0 var(--e-stroke-edge) var(--e-border-strong);
1168
1257
  }
1169
1258
 
1170
1259
  @media (prefers-reduced-motion: reduce) {
@@ -1307,18 +1396,22 @@
1307
1396
  @layer e.reset, e.tokens, e.base, e.primitives, e.blocks, e.controls, e.composites, e.containers, e.page;
1308
1397
  @layer e.controls {
1309
1398
  .e-input {
1399
+ --e-ring: var(--e-border-strong);
1400
+
1310
1401
  width: 100%;
1311
1402
  min-width: 0;
1312
1403
  height: var(--e-control-height);
1313
1404
  padding: 0 var(--e-space-4);
1314
- border: var(--e-stroke-edge) solid var(--e-border-strong);
1405
+ border: 0;
1315
1406
  border-radius: var(--e-radius-md);
1316
1407
  background-color: var(--e-surface);
1317
- box-shadow: var(--e-well);
1408
+ box-shadow:
1409
+ inset 0 0 0 var(--e-stroke-edge) var(--e-ring),
1410
+ var(--e-well);
1318
1411
  color: var(--e-ink);
1319
1412
  font: 400 var(--e-text-md)/1 var(--e-font-sans);
1320
1413
  transition:
1321
- border-color var(--e-duration-tap) var(--e-easing-out),
1414
+ box-shadow var(--e-duration-tap) var(--e-easing-out),
1322
1415
  background-color var(--e-duration-tap) var(--e-easing-out);
1323
1416
  }
1324
1417
 
@@ -1327,25 +1420,34 @@
1327
1420
  }
1328
1421
 
1329
1422
  .e-input:hover {
1330
- border-color: var(--e-ink);
1331
1423
  background-color: var(--e-surface-hover);
1332
1424
  }
1333
1425
 
1334
1426
  .e-input:focus {
1335
- border-color: var(--e-focus-field);
1427
+ --e-ring: var(--e-focus-field);
1428
+
1336
1429
  background-color: var(--e-surface);
1337
1430
  }
1338
1431
 
1432
+ /* A field's focus outline lies over its border and then reaches at least as far outside it again, so the field looks thicker on every stroke preset. */
1339
1433
  .e-input:focus-visible {
1434
+ outline-width: max(var(--e-stroke-focus), calc(2 * var(--e-stroke-edge)));
1340
1435
  outline-color: var(--e-focus-field);
1341
1436
  outline-offset: var(--e-focus-gap-field);
1342
1437
  }
1343
1438
 
1344
1439
  .e-input[aria-invalid="true"] {
1345
- border-color: var(--e-danger);
1440
+ --e-ring: var(--e-danger);
1441
+
1442
+ background-color: var(--e-surface);
1443
+ }
1444
+
1445
+ .e-input[aria-invalid="true"]:hover {
1446
+ background-color: var(--e-danger-soft);
1447
+ }
1448
+
1449
+ .e-input[aria-invalid="true"]:focus {
1346
1450
  background-color: var(--e-surface);
1347
- box-shadow:
1348
- var(--e-well), inset 0 0 0 var(--e-stroke-hair) var(--e-danger);
1349
1451
  }
1350
1452
 
1351
1453
  .e-input[aria-invalid="true"]:focus-visible {
@@ -1354,8 +1456,8 @@
1354
1456
 
1355
1457
  .e-input:disabled {
1356
1458
  cursor: not-allowed;
1357
- border-style: dashed;
1358
- outline: 0;
1459
+ outline: var(--e-stroke-edge) dashed var(--e-border-strong);
1460
+ outline-offset: calc(-1 * var(--e-stroke-edge));
1359
1461
  background-color: var(--e-surface-tint);
1360
1462
  box-shadow: none;
1361
1463
  color: var(--e-muted);
@@ -1366,46 +1468,52 @@
1366
1468
  }
1367
1469
 
1368
1470
  .e-input-wrap {
1471
+ --e-ring: var(--e-border-strong);
1472
+
1369
1473
  display: flex;
1370
1474
  align-items: stretch;
1371
1475
  min-width: 0;
1372
1476
  min-height: var(--e-control-height);
1373
- border: var(--e-stroke-edge) solid var(--e-border-strong);
1374
1477
  border-radius: var(--e-radius-md);
1375
1478
  background: var(--e-surface);
1376
- box-shadow: var(--e-well);
1479
+ box-shadow:
1480
+ inset 0 0 0 var(--e-stroke-edge) var(--e-ring),
1481
+ var(--e-well);
1377
1482
  transition:
1378
- border-color var(--e-duration-tap) var(--e-easing-out),
1483
+ box-shadow var(--e-duration-tap) var(--e-easing-out),
1379
1484
  background-color var(--e-duration-tap) var(--e-easing-out);
1380
1485
  }
1381
1486
 
1382
1487
  .e-input-wrap:hover {
1383
- border-color: var(--e-ink);
1384
1488
  background: var(--e-surface-hover);
1385
1489
  }
1386
1490
 
1387
1491
  .e-input-wrap:focus-within {
1388
- border-color: var(--e-focus-field);
1492
+ --e-ring: var(--e-focus-field);
1493
+
1389
1494
  background: var(--e-surface);
1390
- outline: var(--e-stroke-focus) solid var(--e-focus-field);
1495
+ outline: max(var(--e-stroke-focus), calc(2 * var(--e-stroke-edge))) solid var(--e-focus-field);
1391
1496
  outline-offset: var(--e-focus-gap-field);
1392
1497
  }
1393
1498
 
1394
1499
  .e-input-wrap[data-invalid] {
1395
- border-color: var(--e-danger);
1396
- box-shadow:
1397
- var(--e-well), inset 0 0 0 var(--e-stroke-hair) var(--e-danger);
1500
+ --e-ring: var(--e-danger);
1501
+
1398
1502
  background: var(--e-surface);
1399
1503
  }
1400
1504
 
1505
+ .e-input-wrap[data-invalid]:hover {
1506
+ background: var(--e-danger-soft);
1507
+ }
1508
+
1401
1509
  .e-input-wrap[data-invalid]:focus-within {
1402
- border-color: var(--e-danger);
1510
+ background: var(--e-surface);
1403
1511
  outline-color: var(--e-danger);
1404
1512
  }
1405
1513
 
1406
1514
  .e-input-wrap[data-disabled] {
1407
- border-style: dashed;
1408
- outline: 0;
1515
+ outline: var(--e-stroke-edge) dashed var(--e-border-strong);
1516
+ outline-offset: calc(-1 * var(--e-stroke-edge));
1409
1517
  background: var(--e-surface-tint);
1410
1518
  box-shadow: none;
1411
1519
  color: var(--e-muted);
@@ -1413,7 +1521,6 @@
1413
1521
 
1414
1522
  .e-input-wrap .e-input {
1415
1523
  flex: 1;
1416
- border: 0;
1417
1524
  outline: 0;
1418
1525
  background: transparent;
1419
1526
  box-shadow: none;
@@ -1465,7 +1572,7 @@
1465
1572
 
1466
1573
  .e-input:disabled,
1467
1574
  .e-input-wrap[data-disabled] {
1468
- border-color: GrayText;
1575
+ outline-color: GrayText;
1469
1576
  }
1470
1577
 
1471
1578
  .e-input:focus-visible,
@@ -1800,6 +1907,9 @@ to {
1800
1907
  align-self: center;
1801
1908
  padding-inline: var(--e-space-2);
1802
1909
  }
1910
+ .e-combo-main .e-tag:not(:has(.e-tag-x)) {
1911
+ padding-inline-end: var(--e-space-3);
1912
+ }
1803
1913
  .e-tag {
1804
1914
  display: inline-flex;
1805
1915
  align-items: center;
@@ -1954,27 +2064,23 @@ to {
1954
2064
  justify-items: center;
1955
2065
  gap: var(--e-space-2);
1956
2066
  padding: var(--e-space-8) var(--e-space-4);
1957
- border: var(--e-stroke-edge) dashed var(--e-border-strong);
2067
+ outline: var(--e-stroke-edge) dashed var(--e-border-strong);
2068
+ outline-offset: calc(-1 * var(--e-stroke-edge));
1958
2069
  border-radius: var(--e-radius-md);
1959
2070
  text-align: center;
1960
2071
  }
1961
2072
  .e-empty--bare {
1962
- border: 0;
2073
+ outline: 0;
1963
2074
  }
1964
2075
  .e-empty-icon {
1965
2076
  display: grid;
1966
2077
  place-items: center;
1967
- box-sizing: border-box;
1968
- width: 56px;
1969
- height: 56px;
1970
2078
  margin-bottom: var(--e-space-1);
1971
- border-radius: 50%;
1972
- background: var(--e-secondary-soft);
1973
- border: var(--e-stroke-hair) solid var(--e-secondary);
2079
+ color: var(--e-primary);
1974
2080
  }
1975
2081
  .e-empty-icon .e-icon {
1976
- width: 26px;
1977
- height: 26px;
2082
+ width: 40px;
2083
+ height: 40px;
1978
2084
  }
1979
2085
  .e-empty-title {
1980
2086
  margin: 0;
@@ -1987,10 +2093,12 @@ to {
1987
2093
  color: var(--e-muted);
1988
2094
  }
1989
2095
  @media (forced-colors: active) {
1990
- .e-empty-icon {
1991
- border-color: CanvasText;
2096
+ .e-empty {
1992
2097
  outline-color: CanvasText;
1993
2098
  }
2099
+ .e-empty-icon {
2100
+ color: CanvasText;
2101
+ }
1994
2102
  }
1995
2103
  }
1996
2104
  @layer e.reset, e.tokens, e.base, e.primitives, e.blocks, e.controls, e.composites, e.containers, e.page;
@@ -2016,7 +2124,7 @@ to {
2016
2124
  min-width: var(--e-control-height);
2017
2125
  height: var(--e-control-height);
2018
2126
  padding: 0 var(--e-space-2);
2019
- border: var(--e-stroke-edge) solid transparent;
2127
+ border: 0;
2020
2128
  border-radius: var(--e-radius-md);
2021
2129
  background: transparent;
2022
2130
  color: var(--e-ink);
@@ -2025,11 +2133,11 @@ to {
2025
2133
  cursor: pointer;
2026
2134
  transition:
2027
2135
  background-color var(--e-duration-tap) var(--e-easing-out),
2028
- border-color var(--e-duration-tap) var(--e-easing-out);
2136
+ box-shadow var(--e-duration-tap) var(--e-easing-out);
2029
2137
  }
2030
2138
  .e-page:hover {
2031
2139
  background: var(--e-surface-hover);
2032
- border-color: var(--e-border-strong);
2140
+ box-shadow: inset 0 0 0 var(--e-stroke-edge) var(--e-border-strong);
2033
2141
  }
2034
2142
  .e-page:focus-visible {
2035
2143
  outline: var(--e-stroke-focus) solid var(--e-focus-ring);
@@ -2037,7 +2145,7 @@ to {
2037
2145
  }
2038
2146
  .e-page[aria-current="page"] {
2039
2147
  background: var(--e-primary);
2040
- border-color: var(--e-primary);
2148
+ box-shadow: none;
2041
2149
  color: var(--e-on-primary);
2042
2150
  font-weight: 600;
2043
2151
  cursor: default;
@@ -2089,7 +2197,8 @@ to {
2089
2197
  cursor: pointer;
2090
2198
  }
2091
2199
  .e-sel-trigger[aria-expanded="true"] {
2092
- border-color: var(--e-ink);
2200
+ --e-ring: var(--e-ink);
2201
+
2093
2202
  background-color: var(--e-surface);
2094
2203
  }
2095
2204
  .e-sel-value {
@@ -2173,15 +2282,20 @@ to {
2173
2282
  }
2174
2283
  }
2175
2284
  @layer e.reset, e.tokens, e.base, e.primitives, e.blocks, e.controls, e.composites, e.containers, e.page;
2285
+ /* The table look shared by ETable and EDataGrid: tinted mono headings, hairline rows, a hover row and numeric columns. */
2176
2286
  @layer e.containers {
2177
- .e-table {
2287
+ .e-table {
2178
2288
  width: 100%;
2179
2289
  border-collapse: collapse;
2180
2290
  font: 400 var(--e-text-md) / 1.4 var(--e-font-sans);
2181
- }
2182
- .e-table th {
2291
+ }
2292
+
2293
+ .e-table th {
2183
2294
  padding: var(--e-space-3) var(--e-space-4);
2184
- border-bottom: var(--e-stroke-card) solid var(--e-border-strong);
2295
+ border-bottom: 0;
2296
+
2297
+ /* The rule under a heading is a shadow, not a border: a sticky cell in a collapsed table drops its border when the table scrolls. */
2298
+ box-shadow: inset 0 calc(-1 * var(--e-stroke-card)) 0 var(--e-border-strong);
2185
2299
  background: var(--e-surface-tint);
2186
2300
  text-align: start;
2187
2301
  white-space: nowrap;
@@ -2189,30 +2303,52 @@ to {
2189
2303
  letter-spacing: 0.08em;
2190
2304
  text-transform: uppercase;
2191
2305
  color: var(--e-muted);
2192
- }
2193
- .e-table td {
2306
+ }
2307
+
2308
+ /* A heading at the start of a row names the row: it reads as a label, not as a column heading. */
2309
+ .e-table tbody th {
2310
+ padding: var(--e-space-3) var(--e-space-4);
2311
+ border-top: var(--e-stroke-hair) solid var(--e-border);
2312
+ border-bottom: 0;
2313
+ box-shadow: none;
2314
+ background: transparent;
2315
+ font: 600 var(--e-text-md) / 1.4 var(--e-font-sans);
2316
+ letter-spacing: normal;
2317
+ text-transform: none;
2318
+ color: var(--e-ink);
2319
+ }
2320
+
2321
+ .e-table td {
2194
2322
  padding: var(--e-space-3) var(--e-space-4);
2195
2323
  border-top: var(--e-stroke-hair) solid var(--e-border);
2196
2324
  vertical-align: middle;
2197
- }
2198
- .e-table tbody tr:first-child td {
2325
+ }
2326
+
2327
+ .e-table tbody tr:first-child :is(td, th) {
2199
2328
  border-top: 0;
2200
- }
2201
- .e-table tbody tr:hover td {
2329
+ }
2330
+
2331
+ .e-table tbody tr:hover :is(td, th) {
2202
2332
  background: var(--e-surface-hover);
2203
- }
2204
- .e-table .e-num {
2333
+ }
2334
+
2335
+ .e-table .e-num {
2205
2336
  text-align: end;
2206
2337
  font-family: var(--e-font-mono);
2207
2338
  font-variant-numeric: tabular-nums;
2208
2339
  white-space: nowrap;
2209
- }
2210
- .e-table th.e-num {
2340
+ }
2341
+
2342
+ .e-table th.e-num {
2211
2343
  font-family: var(--e-font-mono);
2212
- }
2213
- .e-table .e-center {
2344
+ }
2345
+
2346
+ .e-table .e-center {
2214
2347
  text-align: center;
2348
+ }
2215
2349
  }
2350
+ @layer e.reset, e.tokens, e.base, e.primitives, e.blocks, e.controls, e.composites, e.containers, e.page;
2351
+ @layer e.containers {
2216
2352
  .e-skel {
2217
2353
  display: block;
2218
2354
  height: 14px;
@@ -2363,7 +2499,7 @@ to {
2363
2499
  .e-filterrow td {
2364
2500
  padding: var(--e-space-1) var(--e-space-3);
2365
2501
  background: var(--e-surface);
2366
- border-bottom: var(--e-stroke-card) solid var(--e-border-strong);
2502
+ box-shadow: inset 0 calc(-1 * var(--e-stroke-card)) 0 var(--e-border-strong);
2367
2503
  border-top: 0;
2368
2504
  position: sticky;
2369
2505
  top: var(--e-grid-head-h);
@@ -2635,15 +2771,11 @@ to {
2635
2771
  white-space: nowrap;
2636
2772
  align-items: center;
2637
2773
  gap: var(--e-space-2);
2638
-
2639
- --e-bc: var(--e-strong);
2640
-
2641
2774
  min-height: calc(var(--e-chip-height) + var(--e-space-1));
2642
2775
  padding: 0 var(--e-space-3);
2643
2776
  border-radius: var(--e-radius-sm);
2644
2777
  background: var(--e-strong);
2645
2778
  color: var(--e-on);
2646
- box-shadow: inset 0 0 0 var(--e-stroke-card) var(--e-bc);
2647
2779
  cursor: default;
2648
2780
  justify-self: start;
2649
2781
  }
@@ -2866,7 +2998,7 @@ to {
2866
2998
  height: fit-content;
2867
2999
  max-height: calc(100dvh - var(--e-space-8));
2868
3000
  margin: auto;
2869
- border-radius: var(--e-radius-lg);
3001
+ border-radius: var(--e-radius-md);
2870
3002
  overflow: auto;
2871
3003
  }
2872
3004
  .e-dialog--inline {
@@ -2984,7 +3116,7 @@ to {
2984
3116
  height: auto;
2985
3117
  max-height: min(32rem, 85dvh);
2986
3118
  margin: 0;
2987
- border-radius: var(--e-radius-lg) var(--e-radius-lg) 0 0;
3119
+ border-radius: var(--e-radius-md) var(--e-radius-md) 0 0;
2988
3120
  }
2989
3121
  .e-drawer[data-state="open"] {
2990
3122
  animation: e-drawer-in 220ms var(--e-easing-out);
@@ -3056,7 +3188,7 @@ to {
3056
3188
  max-width: 28rem;
3057
3189
  height: auto;
3058
3190
  max-height: 18rem;
3059
- border-radius: var(--e-radius-lg);
3191
+ border-radius: var(--e-radius-md);
3060
3192
  }
3061
3193
  .e-drawer-body:focus-visible {
3062
3194
  outline: var(--e-stroke-focus) solid var(--e-focus-ring);
@@ -3445,9 +3577,10 @@ a:any-link > .e-highlight {
3445
3577
  display: inline-block;
3446
3578
  min-width: 1.5em;
3447
3579
  padding: 0 var(--e-space-1);
3448
- border: var(--e-stroke-hair) solid var(--e-border-strong);
3580
+ border: 0;
3449
3581
  border-radius: var(--e-radius-sm);
3450
3582
  background: var(--e-surface-tint);
3583
+ box-shadow: inset 0 0 0 var(--e-stroke-hair) var(--e-border-strong);
3451
3584
  color: var(--e-muted);
3452
3585
  font: 500 var(--e-text-sm) / 1.5 var(--e-font-mono);
3453
3586
  text-align: center;
@@ -3458,7 +3591,8 @@ a:any-link > .e-highlight {
3458
3591
  }
3459
3592
  @media (forced-colors: active) {
3460
3593
  .e-kbd {
3461
- border-color: ButtonText;
3594
+ outline: var(--e-stroke-hair) solid ButtonText;
3595
+ outline-offset: calc(-1 * var(--e-stroke-hair));
3462
3596
  }
3463
3597
  }
3464
3598
  }
@@ -3597,19 +3731,20 @@ a:any-link > .e-highlight {
3597
3731
  display: flex;
3598
3732
  align-items: center;
3599
3733
  gap: var(--e-space-3);
3600
- height: calc(var(--e-control-height) - var(--e-lift));
3601
- margin-block-end: var(--e-lift);
3734
+ height: var(--e-control-height);
3602
3735
  box-sizing: border-box;
3603
- padding: 0 var(--e-space-3);
3736
+ padding: 0 var(--e-space-3) var(--e-lift);
3604
3737
 
3605
3738
  --e-lift: 0px;
3606
3739
 
3607
- border: var(--e-stroke-edge) solid transparent;
3740
+ border: 0;
3608
3741
  border-radius: var(--e-radius-md);
3609
3742
  color: var(--e-ink);
3610
3743
  font: 400 var(--e-text-md) / 1 var(--e-font-sans);
3611
3744
  text-decoration: none;
3612
- transition: background-color var(--e-duration-tap) var(--e-easing-out);
3745
+ transition:
3746
+ background-color var(--e-duration-tap) var(--e-easing-out),
3747
+ box-shadow var(--e-duration-tap) var(--e-easing-out);
3613
3748
  }
3614
3749
  .e-nav-item:hover {
3615
3750
  background-color: var(--e-surface-hover);
@@ -3621,11 +3756,16 @@ a:any-link > .e-highlight {
3621
3756
  .e-nav-item[aria-current="page"] {
3622
3757
  background-color: color-mix(in srgb, var(--e-surface-tint), var(--e-ink) 3%);
3623
3758
  font-weight: 600;
3624
- border-color: var(--e-primary);
3625
3759
 
3626
3760
  --e-lift: var(--e-depth);
3761
+ --e-slab: var(--e-primary);
3627
3762
 
3628
- box-shadow: 0 var(--e-lift) 0 0 var(--e-primary);
3763
+ box-shadow:
3764
+ inset 0 0 0 var(--e-stroke-edge) var(--e-primary),
3765
+ inset 0 calc(-1 * (var(--e-lift) + var(--e-stroke-edge))) 0 0 var(--e-slab);
3766
+ }
3767
+ .e-nav-item[aria-current="page"]:hover {
3768
+ --e-slab: color-mix(in srgb, var(--e-primary), var(--e-shade-slab));
3629
3769
  }
3630
3770
  .e-nav-label {
3631
3771
  flex: 1;
@@ -3747,11 +3887,11 @@ a:any-link > .e-highlight {
3747
3887
  container-type: inline-size;
3748
3888
  padding: var(--e-space-3) var(--e-space-4);
3749
3889
  padding-left: calc(var(--e-space-4) + 2 * var(--e-depth));
3750
- border: var(--e-stroke-edge) solid var(--e-tone);
3890
+ border: 0;
3751
3891
  border-radius: var(--e-radius-md);
3752
3892
  background-color: var(--e-bg);
3893
+ box-shadow: inset 0 0 0 var(--e-stroke-edge) var(--e-tone);
3753
3894
  background-image: linear-gradient(to right, var(--e-tone) calc(var(--e-stroke-edge) + 2 * var(--e-depth)), transparent calc(var(--e-stroke-edge) + 2 * var(--e-depth)));
3754
- background-origin: border-box;
3755
3895
  background-repeat: no-repeat;
3756
3896
  color: var(--e-ink);
3757
3897
  }
@@ -3809,7 +3949,7 @@ a:any-link > .e-highlight {
3809
3949
 
3810
3950
  /* stylelint-disable-next-line selector-not-notation */
3811
3951
  .e-otp .e-otp-box[data-filled]:not(:focus):not([aria-invalid="true"]) {
3812
- border-color: var(--e-ink);
3952
+ --e-ring: var(--e-ink);
3813
3953
  }
3814
3954
  }
3815
3955
  @layer e.reset, e.tokens, e.base, e.primitives, e.blocks, e.controls, e.composites, e.containers, e.page;
@@ -3886,8 +4026,8 @@ a:any-link > .e-highlight {
3886
4026
  flex: none;
3887
4027
  width: 14px;
3888
4028
  height: 14px;
3889
- border: var(--e-stroke-edge) solid var(--e-border-strong);
3890
4029
  border-radius: 50%;
4030
+ box-shadow: inset 0 0 0 var(--e-stroke-edge) var(--e-border-strong);
3891
4031
  }
3892
4032
  }
3893
4033
  @layer e.reset, e.tokens, e.base, e.primitives, e.blocks, e.controls, e.composites, e.containers, e.page;
@@ -4020,24 +4160,27 @@ to {
4020
4160
  @layer e.reset, e.tokens, e.base, e.primitives, e.blocks, e.controls, e.composites, e.containers, e.page;
4021
4161
  @layer e.controls {
4022
4162
  .e-search {
4163
+ --e-ring: var(--e-border-strong);
4164
+
4023
4165
  display: flex;
4024
4166
  align-items: center;
4025
4167
  gap: var(--e-space-1);
4026
4168
  height: var(--e-control-height);
4027
4169
  padding: 0 var(--e-space-1) 0 var(--e-space-2);
4028
- border: var(--e-stroke-edge) solid var(--e-border-strong);
4029
4170
  border-radius: var(--e-radius-md);
4030
4171
  background: var(--e-surface);
4031
- box-shadow: var(--e-well);
4032
- transition: border-color var(--e-duration-tap) var(--e-easing-out);
4172
+ box-shadow:
4173
+ inset 0 0 0 var(--e-stroke-edge) var(--e-ring),
4174
+ var(--e-well);
4175
+ transition: box-shadow var(--e-duration-tap) var(--e-easing-out);
4033
4176
  }
4034
4177
  .e-search:hover {
4035
- border-color: var(--e-ink);
4178
+ background: var(--e-surface-hover);
4036
4179
  }
4037
4180
  .e-search .e-btn {
4038
4181
  position: relative;
4039
- height: calc(var(--e-control-height) - 6px - var(--e-lift));
4040
- padding: 0 var(--e-space-3);
4182
+ height: calc(var(--e-control-height) - 6px);
4183
+ padding: 0 var(--e-space-3) var(--e-lift);
4041
4184
  font-size: var(--e-text-md);
4042
4185
  }
4043
4186
  .e-search .e-btn::after {
@@ -4104,8 +4247,10 @@ to {
4104
4247
  outline: none;
4105
4248
  }
4106
4249
  .e-search:focus-within {
4107
- border-color: var(--e-focus-field);
4108
- outline: var(--e-stroke-focus) solid var(--e-focus-field);
4250
+ --e-ring: var(--e-focus-field);
4251
+
4252
+ background: var(--e-surface);
4253
+ outline: max(var(--e-stroke-focus), calc(2 * var(--e-stroke-edge))) solid var(--e-focus-field);
4109
4254
  outline-offset: var(--e-focus-gap-field);
4110
4255
  }
4111
4256
  @media (prefers-reduced-motion: reduce) {
@@ -4160,12 +4305,17 @@ to {
4160
4305
  }
4161
4306
  @layer e.reset, e.tokens, e.base, e.primitives, e.blocks, e.controls, e.composites, e.containers, e.page;
4162
4307
  @layer e.controls {
4308
+ /* A pressed-in track. The chosen option fills its cell edge to edge in the primary colour, covering the track's outline there so the outline turns primary where it is chosen, and the track clips it, so only the pieces at either end take the track's rounded corners: a value you set, not a place you go (that is Tabs). */
4163
4309
  .e-seg {
4164
4310
  display: inline-flex;
4311
+ box-sizing: border-box;
4165
4312
  height: var(--e-control-height);
4166
- border: var(--e-stroke-edge) solid var(--e-border-strong);
4313
+ position: relative;
4167
4314
  border-radius: var(--e-radius-md);
4168
- background: var(--e-border-strong);
4315
+ background: var(--e-surface-tint);
4316
+ box-shadow:
4317
+ inset 0 0 0 var(--e-stroke-edge) var(--e-border-strong),
4318
+ var(--e-well);
4169
4319
  overflow: hidden;
4170
4320
  max-width: 100%;
4171
4321
  width: fit-content;
@@ -4175,9 +4325,6 @@ to {
4175
4325
  display: inline-flex;
4176
4326
  cursor: pointer;
4177
4327
  }
4178
- .e-seg-opt + .e-seg-opt {
4179
- border-inline-start: var(--e-stroke-hair) solid var(--e-border-strong);
4180
- }
4181
4328
  .e-seg-input {
4182
4329
  position: absolute;
4183
4330
  inset: 0;
@@ -4190,18 +4337,24 @@ to {
4190
4337
  align-items: center;
4191
4338
  justify-content: center;
4192
4339
  gap: var(--e-space-2);
4340
+ box-sizing: border-box;
4193
4341
  min-width: 4rem;
4194
4342
  padding: 0 var(--e-space-4);
4195
- background: var(--e-surface);
4343
+ background: transparent;
4344
+ color: var(--e-ink);
4196
4345
  font: 500 var(--e-text-md)/1 var(--e-font-sans);
4197
4346
  white-space: nowrap;
4198
4347
  transition: background-color var(--e-duration-tap) var(--e-easing-out);
4199
4348
  }
4200
4349
  .e-seg-opt:hover .e-seg-text {
4201
- background: var(--e-surface-hover);
4350
+ background: var(--e-wash-hover);
4202
4351
  }
4203
- .e-seg-input:checked + .e-seg-text {
4204
- background: var(--e-primary);
4352
+ .e-seg-input:checked + .e-seg-text,
4353
+ .e-seg-opt:hover .e-seg-input:checked + .e-seg-text {
4354
+ background-color: var(--e-primary);
4355
+
4356
+ /* The darker band along the bottom is the slab, drawn inside the piece and the track clips it to the corners. */
4357
+ background-image: linear-gradient(to top, color-mix(in srgb, var(--e-primary), var(--e-shade-slab)) var(--e-depth), transparent var(--e-depth));
4205
4358
  color: var(--e-on-primary);
4206
4359
  font-weight: 600;
4207
4360
  }
@@ -4216,9 +4369,13 @@ to {
4216
4369
  .e-seg-opt:has(:disabled):hover .e-seg-text {
4217
4370
  background: transparent;
4218
4371
  }
4372
+
4373
+ /* Chosen but unavailable: a flat piece with ink text, so it stays readable. */
4219
4374
  .e-seg-input:disabled:checked + .e-seg-text,
4220
4375
  .e-seg-opt:has(:disabled:checked):hover .e-seg-text {
4221
- background: var(--e-surface-hover);
4376
+ background-color: var(--e-surface);
4377
+ background-image: none;
4378
+ box-shadow: inset 0 0 0 var(--e-stroke-edge) var(--e-border-strong);
4222
4379
  color: var(--e-ink);
4223
4380
  }
4224
4381
  .e-seg-field {
@@ -4247,10 +4404,11 @@ to {
4247
4404
  .e-pad-surface {
4248
4405
  position: relative;
4249
4406
  overflow: hidden;
4250
- border: var(--e-stroke-edge) solid var(--e-border-strong);
4251
4407
  border-radius: var(--e-radius-md);
4252
4408
  background: var(--e-surface);
4253
- box-shadow: var(--e-well);
4409
+ box-shadow:
4410
+ inset 0 0 0 var(--e-stroke-edge) var(--e-border-strong),
4411
+ var(--e-well);
4254
4412
  }
4255
4413
  .e-pad-surface::after {
4256
4414
  content: "";
@@ -4442,18 +4600,20 @@ to {
4442
4600
  width: var(--e-dot);
4443
4601
  height: var(--e-dot);
4444
4602
  border-radius: 50%;
4445
- border: var(--e-stroke-edge) dashed var(--e-border-strong);
4603
+ outline: var(--e-stroke-edge) dashed var(--e-border-strong);
4604
+ outline-offset: calc(-1 * var(--e-stroke-edge));
4446
4605
  background: var(--e-surface);
4447
4606
  color: var(--e-muted);
4448
4607
  font: 600 var(--e-text-xs) / 1 var(--e-font-mono);
4449
4608
  }
4450
4609
  .e-step[data-state="done"] .e-step-dot {
4451
- border: var(--e-stroke-edge) solid var(--e-primary);
4610
+ outline: 0;
4452
4611
  background: var(--e-primary);
4453
4612
  color: var(--e-on-primary);
4454
4613
  }
4455
4614
  .e-step[data-state="current"] .e-step-dot {
4456
- border: var(--e-stroke-focus) solid var(--e-primary);
4615
+ outline: 0;
4616
+ box-shadow: inset 0 0 0 var(--e-stroke-focus) var(--e-primary);
4457
4617
  color: var(--e-primary);
4458
4618
  background: var(--e-surface);
4459
4619
  }
@@ -4508,7 +4668,6 @@ to {
4508
4668
  .e-step[data-state="done"] .e-step-dot {
4509
4669
  forced-color-adjust: none;
4510
4670
  background: Highlight;
4511
- border-color: Highlight;
4512
4671
  color: HighlightText;
4513
4672
  }
4514
4673
  }
@@ -4574,19 +4733,20 @@ to {
4574
4733
  .e-switch-track {
4575
4734
  --e-switch-w: 44px;
4576
4735
  --e-thumb: 14px;
4577
- --e-thumb-inset: calc(var(--e-space-1) - var(--e-stroke-card));
4578
- --e-thumb-travel: calc(var(--e-switch-w) - 2 * var(--e-stroke-edge) - var(--e-thumb) - 2 * var(--e-thumb-inset));
4736
+ --e-thumb-inset: var(--e-space-1);
4737
+ --e-thumb-travel: calc(var(--e-switch-w) - var(--e-thumb) - 2 * var(--e-thumb-inset));
4738
+ --e-ring: var(--e-border-strong);
4579
4739
 
4580
4740
  position: relative;
4581
4741
  flex: none;
4582
4742
  width: var(--e-switch-w);
4583
4743
  height: 24px;
4584
- border: var(--e-stroke-edge) solid var(--e-border-strong);
4585
4744
  border-radius: var(--e-radius-pill);
4586
4745
  background: var(--e-surface-tint);
4746
+ box-shadow: inset 0 0 0 var(--e-stroke-edge) var(--e-ring);
4587
4747
  transition:
4588
4748
  background-color var(--e-duration-tap) var(--e-easing-out),
4589
- border-color var(--e-duration-tap) var(--e-easing-out);
4749
+ box-shadow var(--e-duration-tap) var(--e-easing-out);
4590
4750
  }
4591
4751
  .e-switch-track::after {
4592
4752
  content: "";
@@ -4601,19 +4761,21 @@ to {
4601
4761
  transition: transform var(--e-duration-move, 160ms) var(--e-easing-out);
4602
4762
  }
4603
4763
  .e-switch:hover .e-switch-track {
4604
- border-color: var(--e-ink);
4764
+ --e-ring: var(--e-ink);
4605
4765
  }
4606
4766
  .e-switch-input:checked + .e-switch-track {
4767
+ --e-ring: var(--e-primary);
4768
+
4607
4769
  background: var(--e-primary);
4608
- border-color: var(--e-primary);
4609
4770
  }
4610
4771
  .e-switch-input:checked + .e-switch-track::after {
4611
4772
  background: var(--e-on-primary);
4612
4773
  transform: translateX(var(--e-thumb-travel));
4613
4774
  }
4614
4775
  .e-switch-input:disabled + .e-switch-track {
4615
- border-style: dashed;
4616
- outline: 0;
4776
+ box-shadow: none;
4777
+ outline: var(--e-stroke-edge) dashed var(--e-border-strong);
4778
+ outline-offset: calc(-1 * var(--e-stroke-edge));
4617
4779
  background: var(--e-surface-tint);
4618
4780
  }
4619
4781
  .e-switch-input:disabled + .e-switch-track::after {
@@ -4640,8 +4802,79 @@ to {
4640
4802
  }
4641
4803
  @layer e.reset, e.tokens, e.base, e.primitives, e.blocks, e.controls, e.composites, e.containers, e.page;
4642
4804
  @layer e.containers {
4805
+ .e-table-wrap {
4806
+ position: relative;
4807
+ min-width: 0;
4808
+ border-radius: var(--e-radius-md);
4809
+ background: var(--e-surface);
4810
+ }
4811
+
4812
+ /* The outline is drawn once, above the scroller and its sticky headings, so nothing covers it. */
4813
+ .e-table-wrap::after {
4814
+ content: "";
4815
+ position: absolute;
4816
+ inset: 0;
4817
+ border-radius: inherit;
4818
+ z-index: var(--e-z-sticky);
4819
+ box-shadow: inset 0 0 0 var(--e-stroke-card) var(--e-border);
4820
+ pointer-events: none;
4821
+ }
4822
+ .e-table-scroll {
4823
+ overflow: auto;
4824
+ max-height: var(--e-table-max-h, none);
4825
+ border-radius: inherit;
4826
+ }
4827
+ .e-table-scroll:focus-visible {
4828
+ outline: var(--e-stroke-focus) solid var(--e-focus-ring);
4829
+ outline-offset: calc(-1 * var(--e-stroke-focus));
4830
+ }
4831
+ .e-table-wrap .e-table {
4832
+ background: var(--e-surface);
4833
+ }
4834
+ .e-table-caption {
4835
+ padding: var(--e-space-3) var(--e-space-4);
4836
+ border-bottom: var(--e-stroke-hair) solid var(--e-border);
4837
+ text-align: start;
4838
+ font: 600 var(--e-text-md) / 1.3 var(--e-font-sans);
4839
+ color: var(--e-ink);
4840
+ }
4841
+ .e-table-wrap thead th {
4842
+ position: sticky;
4843
+ top: 0;
4844
+ z-index: var(--e-z-raised);
4845
+ }
4846
+ .e-table-wrap--striped tbody tr:nth-child(even) :is(td, th) {
4847
+ background: var(--e-surface-tint);
4848
+ }
4849
+ .e-table-wrap--striped tbody tr:hover :is(td, th) {
4850
+ background: var(--e-surface-hover);
4851
+ }
4852
+ .e-table-wrap--dense .e-table {
4853
+ font-size: var(--e-text-sm);
4854
+ }
4855
+ .e-table-wrap--dense .e-table :is(th, td, tbody th) {
4856
+ padding: var(--e-space-2) var(--e-space-3);
4857
+ }
4858
+ @media print {
4859
+ .e-table-scroll {
4860
+ overflow: visible;
4861
+ max-height: none;
4862
+ }
4863
+ .e-table-wrap::after {
4864
+ display: none;
4865
+ }
4866
+ }
4867
+ @media (forced-colors: active) {
4868
+ .e-table-wrap {
4869
+ outline: 1px solid CanvasText;
4870
+ }
4871
+ }
4872
+ }
4873
+ @layer e.reset, e.tokens, e.base, e.primitives, e.blocks, e.controls, e.composites, e.containers, e.page;
4874
+ @layer e.containers {
4643
4875
  .e-tablist {
4644
4876
  display: flex;
4877
+ flex: none;
4645
4878
  gap: 0;
4646
4879
  /* stylelint-disable-next-line declaration-block-no-redundant-longhand-properties -- the two axes are set apart */
4647
4880
  overflow-x: auto;
@@ -4652,30 +4885,33 @@ to {
4652
4885
  display: none;
4653
4886
  }
4654
4887
 
4655
- /* Tabs are button-like: every tab is ringed and neighbours sit flush and share an edge, so only the outer ends of the row are rounded. The selected tab is outlined in the primary colour with a thick slab underneath. */
4888
+ /* Tabs are button-like: every tab is ringed and neighbours sit flush and share an edge, so only the outer ends of the row are rounded. The selected tab is outlined in the primary colour with a thick slab along its bottom. */
4656
4889
  .e-tab {
4657
4890
  --e-bc: var(--e-border-strong);
4658
4891
 
4659
- /* A selected tab rises: its face is a whole rounded box with an offset copy in the primary colour showing underneath. The margin gives back the room that copy takes, so every tab row is one control height tall. */
4892
+ /* A selected tab rises: the slab is a band the tab paints along one edge itself, so there is no second shape behind the corners. Every tab is one control height tall either way. */
4660
4893
  --e-lift: 0px;
4894
+ --e-band: calc(var(--e-lift) + var(--e-stroke-edge));
4895
+ --e-slab: var(--e-primary);
4661
4896
 
4662
4897
  position: relative;
4663
4898
  display: inline-flex;
4664
4899
  align-items: center;
4665
4900
  gap: var(--e-space-2);
4666
4901
  flex: none;
4667
- height: calc(var(--e-control-height) - var(--e-lift));
4668
- margin-block-end: var(--e-lift);
4669
- padding: 0 var(--e-space-4);
4670
- border: var(--e-stroke-edge) solid var(--e-bc);
4902
+ height: var(--e-control-height);
4903
+ padding: 0 var(--e-space-4) var(--e-lift);
4904
+ border: 0;
4671
4905
  border-radius: 0;
4672
4906
  background: transparent;
4907
+ box-shadow: inset 0 0 0 var(--e-stroke-edge) var(--e-bc);
4673
4908
  color: var(--e-muted);
4674
4909
  font: 500 var(--e-text-md) / 1 var(--e-font-sans);
4675
4910
  cursor: pointer;
4676
4911
  transition:
4677
4912
  color var(--e-duration-tap) var(--e-easing-out),
4678
- background-color var(--e-duration-tap) var(--e-easing-out);
4913
+ background-color var(--e-duration-tap) var(--e-easing-out),
4914
+ box-shadow var(--e-duration-tap) var(--e-easing-out);
4679
4915
  }
4680
4916
 
4681
4917
  /* Only the outer ends of the row are rounded. */
@@ -4703,10 +4939,17 @@ to {
4703
4939
 
4704
4940
  z-index: var(--e-z-sticky);
4705
4941
  background-color: color-mix(in srgb, var(--e-surface-tint), var(--e-ink) 3%);
4706
- box-shadow: 0 var(--e-lift) 0 0 var(--e-primary);
4942
+ box-shadow:
4943
+ inset 0 0 0 var(--e-stroke-edge) var(--e-bc),
4944
+ inset 0 calc(-1 * var(--e-band)) 0 0 var(--e-slab);
4707
4945
  color: var(--e-ink);
4708
4946
  font-weight: 600;
4709
4947
  }
4948
+
4949
+ /* The slab answers the pointer too: it darkens under the cursor, in step with the face. */
4950
+ .e-tab[aria-selected="true"]:hover {
4951
+ --e-slab: color-mix(in srgb, var(--e-primary), var(--e-shade-slab));
4952
+ }
4710
4953
  .e-tab:focus-visible {
4711
4954
  z-index: var(--e-z-focus);
4712
4955
  outline: var(--e-stroke-focus) solid var(--e-focus-ring);
@@ -4721,6 +4964,141 @@ to {
4721
4964
  justify-content: center;
4722
4965
  padding-inline: var(--e-space-1);
4723
4966
  }
4967
+
4968
+ /* Vertical: the tabs stack beside the panel, flush and sharing edges. The selected tab rises towards the panel, so its slab is a band down the inline-start side, away from the panel, instead of along the bottom, and only the top and bottom ends of the column are rounded. */
4969
+ .e-tabs--vertical {
4970
+ display: flex;
4971
+ align-items: flex-start;
4972
+ gap: var(--e-space-4);
4973
+ }
4974
+ .e-tabs--vertical .e-tablist {
4975
+ flex-direction: column;
4976
+ flex: none;
4977
+ overflow: visible;
4978
+ }
4979
+ .e-tabs--vertical .e-tab {
4980
+ --e-lift: 0px;
4981
+
4982
+ height: var(--e-control-height);
4983
+ padding-block-end: 0;
4984
+ justify-content: flex-start;
4985
+ border-radius: 0;
4986
+ }
4987
+ .e-tabs--vertical .e-tab:first-child {
4988
+ border-start-start-radius: var(--e-radius-md);
4989
+ border-start-end-radius: var(--e-radius-md);
4990
+ }
4991
+ .e-tabs--vertical .e-tab:last-child {
4992
+ border-end-start-radius: var(--e-radius-md);
4993
+ border-end-end-radius: var(--e-radius-md);
4994
+ }
4995
+ .e-tabs--vertical .e-tab + .e-tab {
4996
+ margin-inline-start: 0;
4997
+ margin-block-start: calc(-1 * var(--e-stroke-edge));
4998
+ }
4999
+ .e-tabs--vertical .e-tab[aria-selected="true"] {
5000
+ --e-lift: var(--e-depth);
5001
+
5002
+ padding-inline-start: calc(var(--e-space-4) + var(--e-lift));
5003
+ box-shadow:
5004
+ inset 0 0 0 var(--e-stroke-edge) var(--e-bc),
5005
+ inset var(--e-band) 0 0 0 var(--e-slab);
5006
+ }
5007
+ .e-tabs--vertical .e-tabpanel {
5008
+ flex: 1 1 0;
5009
+ min-width: 0;
5010
+ padding-top: 0;
5011
+ }
5012
+ :dir(rtl) .e-tabs--vertical .e-tab[aria-selected="true"] {
5013
+ box-shadow:
5014
+ inset 0 0 0 var(--e-stroke-edge) var(--e-bc),
5015
+ inset calc(-1 * var(--e-band)) 0 0 0 var(--e-slab);
5016
+ }
5017
+
5018
+ /* Framed: tabs and panel are one outlined card. The tab row sits over the panel's edge by one stroke, so a tab's lower edge and the panel's upper edge are the same line; the chosen tab has no edge on that side and its fill covers the panel's, opening into it. Tabs sit flush with their neighbours, square where they meet; only the card's outer corner at the first tab is rounded, and the panel's own corner beside it is square. The row always leaves a corner's width of open edge past the last tab, so the panel's curve never lands against a tab's straight edge. */
5019
+ .e-tabs--framed .e-tablist {
5020
+ position: relative;
5021
+ z-index: var(--e-z-raised);
5022
+ margin-block-end: calc(-1 * var(--e-stroke-edge));
5023
+ }
5024
+ .e-tabs--framed .e-tab {
5025
+ --e-bc: var(--e-border-strong);
5026
+ --e-lift: 0px;
5027
+
5028
+ border-radius: 0;
5029
+ background-color: var(--e-surface-tint);
5030
+ }
5031
+ .e-tabs--framed .e-tab:first-child {
5032
+ border-start-start-radius: var(--e-radius-md);
5033
+ }
5034
+ .e-tabs--framed.e-tabs--fill .e-tab:last-child {
5035
+ border-start-end-radius: var(--e-radius-md);
5036
+ }
5037
+ .e-tabs:not(.e-tabs--fill, .e-tabs--vertical).e-tabs--framed .e-tablist {
5038
+ padding-inline-end: var(--e-radius-md);
5039
+ }
5040
+ .e-tabs--framed .e-tab:hover {
5041
+ background-color: var(--e-surface-hover);
5042
+ }
5043
+
5044
+ /* The chosen tab rises like a button does, with its primary slab as a band on the edge away from the panel, and its open sides outlined in the primary colour. */
5045
+ .e-tabs--framed .e-tab[aria-selected="true"] {
5046
+ --e-bc: var(--e-primary);
5047
+ --e-lift: var(--e-depth);
5048
+
5049
+ padding-block: var(--e-lift) 0;
5050
+ background-color: var(--e-surface);
5051
+ box-shadow:
5052
+ inset var(--e-stroke-edge) 0 0 0 var(--e-bc),
5053
+ inset calc(-1 * var(--e-stroke-edge)) 0 0 0 var(--e-bc),
5054
+ inset 0 var(--e-band) 0 0 var(--e-slab);
5055
+ }
5056
+ .e-tabs--framed .e-tabpanel {
5057
+ padding: var(--e-space-4);
5058
+ border-radius: var(--e-radius-md);
5059
+ border-start-start-radius: 0;
5060
+ background: var(--e-surface);
5061
+ box-shadow: inset 0 0 0 var(--e-stroke-edge) var(--e-border-strong);
5062
+ }
5063
+ .e-tabs--framed.e-tabs--fill .e-tabpanel {
5064
+ border-start-end-radius: 0;
5065
+ }
5066
+ .e-tabs--framed.e-tabs--vertical {
5067
+ gap: 0;
5068
+ align-items: stretch;
5069
+ }
5070
+ .e-tabs--framed.e-tabs--vertical .e-tablist {
5071
+ align-self: flex-start;
5072
+ margin-block-end: var(--e-radius-md);
5073
+ margin-inline-end: calc(-1 * var(--e-stroke-edge));
5074
+ }
5075
+ .e-tabs--framed.e-tabs--vertical .e-tab {
5076
+ border-radius: 0;
5077
+ }
5078
+ .e-tabs--framed.e-tabs--vertical .e-tab:first-child {
5079
+ border-start-start-radius: var(--e-radius-md);
5080
+ }
5081
+ .e-tabs--framed.e-tabs--vertical .e-tab[aria-selected="true"] {
5082
+ margin-block: calc(-1 * var(--e-stroke-edge)) 0;
5083
+ padding-block: 0;
5084
+ padding-inline-start: calc(var(--e-space-4) + var(--e-lift));
5085
+ box-shadow:
5086
+ inset 0 var(--e-stroke-edge) 0 0 var(--e-bc),
5087
+ inset 0 calc(-1 * var(--e-stroke-edge)) 0 0 var(--e-bc),
5088
+ inset var(--e-band) 0 0 0 var(--e-slab);
5089
+ }
5090
+ :dir(rtl) .e-tabs--framed.e-tabs--vertical .e-tab[aria-selected="true"] {
5091
+ box-shadow:
5092
+ inset 0 var(--e-stroke-edge) 0 0 var(--e-bc),
5093
+ inset 0 calc(-1 * var(--e-stroke-edge)) 0 0 var(--e-bc),
5094
+ inset calc(-1 * var(--e-band)) 0 0 0 var(--e-slab);
5095
+ }
5096
+ .e-tabs--framed.e-tabs--vertical .e-tab[aria-selected="true"]:first-child {
5097
+ margin-block-start: 0;
5098
+ }
5099
+ .e-tabs--framed.e-tabs--vertical .e-tabpanel {
5100
+ padding: var(--e-space-4);
5101
+ }
4724
5102
  .e-tab-count {
4725
5103
  min-width: var(--e-space-6);
4726
5104
  padding: 0 var(--e-space-2);
@@ -4858,22 +5236,23 @@ to {
4858
5236
  justify-items: center;
4859
5237
  gap: var(--e-space-1);
4860
5238
  padding: var(--e-space-6) var(--e-space-4);
4861
- border: var(--e-stroke-edge) dashed var(--e-border-strong);
5239
+ outline: var(--e-stroke-edge) dashed var(--e-border-strong);
5240
+ outline-offset: calc(-1 * var(--e-stroke-edge));
4862
5241
  border-radius: var(--e-radius-md);
4863
5242
  background: var(--e-surface);
4864
5243
  text-align: center;
4865
5244
  cursor: pointer;
4866
5245
  transition:
4867
5246
  background-color var(--e-duration-tap) var(--e-easing-out),
4868
- border-color var(--e-duration-tap) var(--e-easing-out);
5247
+ outline-color var(--e-duration-tap) var(--e-easing-out);
4869
5248
  }
4870
5249
  .e-drop:hover {
4871
5250
  background: var(--e-surface-hover);
4872
- border-color: var(--e-ink);
5251
+ outline-color: var(--e-ink);
4873
5252
  }
4874
5253
  .e-drop--over {
4875
5254
  background: var(--e-secondary-soft);
4876
- border-color: var(--e-secondary);
5255
+ outline-color: var(--e-secondary);
4877
5256
  }
4878
5257
  .e-drop-main {
4879
5258
  font: 400 var(--e-text-md)/1.4 var(--e-font-sans);
@@ -4897,7 +5276,7 @@ to {
4897
5276
  }
4898
5277
  .e-drop-input:focus-visible + .e-files,
4899
5278
  .e-field:focus-within .e-drop {
4900
- outline: var(--e-stroke-focus) solid var(--e-focus-field);
5279
+ outline: max(var(--e-stroke-focus), calc(2 * var(--e-stroke-edge))) solid var(--e-focus-field);
4901
5280
  outline-offset: var(--e-focus-gap-field);
4902
5281
  }
4903
5282
  .e-files {
@@ -4932,8 +5311,8 @@ to {
4932
5311
  @media (forced-colors: active) {
4933
5312
  .e-drop:hover,
4934
5313
  .e-drop--over {
4935
- border-style: solid;
4936
- border-color: Highlight;
5314
+ outline-style: solid;
5315
+ outline-color: Highlight;
4937
5316
  }
4938
5317
  }
4939
5318
  }