@eos-ui/vue 0.5.1 → 0.5.3

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 (34) hide show
  1. package/dist/components/AppShell/EAppShell.js.map +1 -1
  2. package/dist/components/AppShell/EAppShell.vue_vue_type_script_setup_true_lang.js.map +1 -1
  3. package/dist/components/Avatar/EAvatar.js.map +1 -1
  4. package/dist/components/Avatar/EAvatar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  5. package/dist/components/Button/EButton.js.map +1 -1
  6. package/dist/components/Button/EButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  7. package/dist/components/Combobox/EComboboxBase.js.map +1 -1
  8. package/dist/components/Combobox/EComboboxBase.vue_vue_type_script_setup_true_lang.js.map +1 -1
  9. package/dist/components/DataGrid/EDataGrid.js.map +1 -1
  10. package/dist/components/DataGrid/EDataGrid.vue_vue_type_script_setup_true_lang.js.map +1 -1
  11. package/dist/components/NavList/ENavList.js.map +1 -1
  12. package/dist/components/NavList/ENavList.vue_vue_type_script_setup_true_lang.js.map +1 -1
  13. package/dist/components/Notice/ENotice.js.map +1 -1
  14. package/dist/components/Notice/ENotice.vue_vue_type_script_setup_true_lang.js.map +1 -1
  15. package/dist/components/Progress/EProgress.js.map +1 -1
  16. package/dist/components/Progress/EProgress.vue_vue_type_script_setup_true_lang.js.map +1 -1
  17. package/dist/components/SearchBar/ESearchBar.js.map +1 -1
  18. package/dist/components/SearchBar/ESearchBar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  19. package/dist/components/Segmented/ESegmented.js.map +1 -1
  20. package/dist/components/Segmented/ESegmented.vue_vue_type_script_setup_true_lang.js.map +1 -1
  21. package/dist/components/Select/ESelectControl.js.map +1 -1
  22. package/dist/components/Select/ESelectControl.vue_vue_type_script_setup_true_lang.js.map +1 -1
  23. package/dist/components/SignaturePad/ESignaturePad.js.map +1 -1
  24. package/dist/components/SignaturePad/ESignaturePad.vue_vue_type_script_setup_true_lang.js.map +1 -1
  25. package/dist/components/Stepper/EStepper.js.map +1 -1
  26. package/dist/components/Stepper/EStepper.vue_vue_type_script_setup_true_lang.js.map +1 -1
  27. package/dist/components/Switch/ESwitch.js.map +1 -1
  28. package/dist/components/Switch/ESwitch.vue_vue_type_script_setup_true_lang.js.map +1 -1
  29. package/dist/components/Tabs/ETabs.js.map +1 -1
  30. package/dist/components/Tabs/ETabs.vue_vue_type_script_setup_true_lang.js.map +1 -1
  31. package/dist/components/Textarea/ETextarea.js.map +1 -1
  32. package/dist/components/Textarea/ETextarea.vue_vue_type_script_setup_true_lang.js.map +1 -1
  33. package/dist/style.css +179 -156
  34. package/package.json +2 -2
package/dist/style.css CHANGED
@@ -18,7 +18,7 @@
18
18
  --e-background: #ffffff;
19
19
  --e-surface: #ffffff;
20
20
  --e-surface-tint: #eaf4f8;
21
- --e-surface-hover: color-mix(in srgb, var(--e-surface-tint), var(--e-ink) 3%);
21
+ --e-surface-hover: color-mix(in srgb, var(--e-surface), var(--e-ink) 9%);
22
22
  --e-ink: #000000;
23
23
  --e-print-ink: #000000;
24
24
  --e-print-paper: #ffffff;
@@ -402,6 +402,7 @@
402
402
  @layer e.page {
403
403
  .e-shell {
404
404
  position: relative;
405
+ overflow-x: clip;
405
406
  display: grid;
406
407
  grid-template-rows: auto 1fr auto;
407
408
  min-height: 100%;
@@ -417,20 +418,19 @@
417
418
  padding: var(--e-space-6) var(--e-space-4);
418
419
  }
419
420
 
420
- /* Hairlines down both edges of the page column, drawn over the header and footer. */
421
- @media (min-width: 64rem) {
421
+ /* Hairlines just outside both edges of the page column, drawn over the header and footer. When the column fills the screen they fall off it and nothing shows. */
422
422
  .e-shell::after {
423
- content: "";
424
- position: absolute;
425
- inset-block: 0;
426
- inset-inline: 0;
427
- z-index: var(--e-z-sticky);
428
- box-sizing: border-box;
429
- width: min(100%, var(--e-shell-width, 72rem));
430
- margin-inline: auto;
431
- border-inline: var(--e-stroke-hair) solid var(--e-shell-rail, var(--e-border));
432
- pointer-events: none;
433
- }
423
+ content: "";
424
+ position: absolute;
425
+ inset-block: 0;
426
+ inset-inline: 0;
427
+ z-index: var(--e-z-sticky);
428
+ width: min(100%, var(--e-shell-width, 72rem));
429
+ margin-inline: auto;
430
+ box-shadow:
431
+ calc(-1 * var(--e-stroke-hair)) 0 0 0 var(--e-shell-rail, var(--e-border)),
432
+ var(--e-stroke-hair) 0 0 0 var(--e-shell-rail, var(--e-border));
433
+ pointer-events: none;
434
434
  }
435
435
  @media (min-width: 48rem) {
436
436
  .e-shell--side .e-shell-body {
@@ -476,23 +476,14 @@
476
476
  width: var(--e-tap, 44px);
477
477
  height: var(--e-tap, 44px);
478
478
  overflow: hidden;
479
- border: 0;
479
+ border: var(--e-stroke-edge) solid var(--e-ring);
480
480
  border-radius: var(--e-radius-md);
481
481
  background: var(--e-surface-tint);
482
+ background-clip: padding-box;
482
483
  color: var(--e-primary);
483
484
  font: 600 var(--e-text-sm) / 1 var(--e-font-mono);
484
485
  letter-spacing: 0.02em;
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);
486
+ transition: border-color var(--e-duration-tap) var(--e-easing-out);
496
487
  }
497
488
  .e-avatar--button {
498
489
  position: relative;
@@ -623,9 +614,8 @@
623
614
  --e-hover: color-mix(in srgb, var(--e-fill), var(--e-shade-hover));
624
615
  --e-press: color-mix(in srgb, var(--e-fill), var(--e-shade-press));
625
616
 
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. */
617
+ /* One border, one control height tall. The slab is the bottom edge made thicker by the lift; the radius tapers it up the corners. Pressing sinks the face over it. */
627
618
  --e-lift: var(--e-depth);
628
- --e-band: calc(var(--e-lift) + var(--e-stroke-edge));
629
619
  --e-ring: var(--e-slab);
630
620
 
631
621
  position: relative;
@@ -634,13 +624,15 @@
634
624
  justify-content: center;
635
625
  gap: var(--e-space-2);
636
626
  height: var(--e-control-height);
637
- padding: 0 var(--e-space-4) var(--e-lift);
638
- border: 0;
627
+ padding: 0 calc(var(--e-space-4) - var(--e-stroke-edge));
628
+ box-sizing: border-box;
629
+ border: var(--e-stroke-edge) solid var(--e-ring);
630
+ border-bottom-width: calc(var(--e-stroke-edge) + var(--e-lift));
639
631
  border-radius: var(--e-radius-md);
640
632
  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);
633
+
634
+ /* A solid face runs under its border so no page colour shows between them. */
635
+ background-clip: border-box;
644
636
  color: var(--e-on-fill);
645
637
  font: 500 var(--e-text-md) / 1 var(--e-font-sans);
646
638
  letter-spacing: 0.01em;
@@ -648,7 +640,7 @@
648
640
  text-decoration: none;
649
641
  cursor: pointer;
650
642
  transition:
651
- box-shadow var(--e-duration-tap) var(--e-easing-out),
643
+ border-color var(--e-duration-tap) var(--e-easing-out),
652
644
  background-color var(--e-duration-tap) var(--e-easing-out);
653
645
  }
654
646
  .e-btn:hover {
@@ -660,7 +652,6 @@
660
652
  --e-lift: 0px;
661
653
 
662
654
  background-color: var(--e-press);
663
- box-shadow: inset 0 0 0 var(--e-stroke-edge) var(--e-ring);
664
655
  }
665
656
  .e-btn--secondary {
666
657
  --e-fill: var(--e-secondary);
@@ -674,6 +665,8 @@
674
665
  --e-fill: var(--e-surface);
675
666
  --e-on-fill: var(--e-ink);
676
667
  --e-slab: var(--e-border-strong);
668
+
669
+ background-clip: padding-box;
677
670
  }
678
671
  .e-btn--outline:hover {
679
672
  --e-ring: var(--e-ink);
@@ -693,8 +686,7 @@
693
686
 
694
687
  background: transparent;
695
688
  color: var(--e-ink);
696
- box-shadow: inset 0 0 0 var(--e-stroke-edge) var(--e-ring);
697
- padding-inline: var(--e-space-3);
689
+ padding-inline: calc(var(--e-space-3) - var(--e-stroke-edge));
698
690
  text-decoration: underline;
699
691
  text-underline-offset: 5px;
700
692
  text-decoration-thickness: var(--e-stroke-edge);
@@ -728,7 +720,7 @@
728
720
  animation: e-btn-spin 0.9s linear infinite;
729
721
  }
730
722
 
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. */
723
+ /* 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 edge is a pseudo-element, so a page's focus reset cannot remove it. */
732
724
  .e-btn--loading {
733
725
  --e-lift: 0px;
734
726
  --e-tint: var(--e-fill);
@@ -743,7 +735,8 @@
743
735
  background-color: color-mix(in srgb, var(--e-tint) 14%, var(--e-surface));
744
736
  background-image: repeating-linear-gradient(135deg, transparent 0 8px, color-mix(in srgb, var(--e-tint) 20%, transparent) 8px 16px);
745
737
  background-size: 22.63px 22.63px;
746
- box-shadow: none;
738
+ background-clip: padding-box;
739
+ border-color: transparent;
747
740
  color: var(--e-busy);
748
741
  transform: none;
749
742
  cursor: not-allowed;
@@ -752,7 +745,7 @@
752
745
  .e-btn--loading::before {
753
746
  content: "";
754
747
  position: absolute;
755
- inset: 0;
748
+ inset: calc(-1 * var(--e-stroke-edge));
756
749
  border: var(--e-stroke-edge) dashed var(--e-busy);
757
750
  border-radius: inherit;
758
751
  pointer-events: none;
@@ -790,7 +783,7 @@ to {
790
783
  color: var(--e-muted);
791
784
  outline: var(--e-stroke-edge) dashed var(--e-border-strong);
792
785
  outline-offset: calc(-1 * var(--e-stroke-edge));
793
- box-shadow: none;
786
+ border-color: transparent;
794
787
  transform: none;
795
788
  }
796
789
  @media (prefers-reduced-motion: reduce) {
@@ -1179,14 +1172,15 @@ to {
1179
1172
 
1180
1173
  --e-ring: var(--e-border-strong);
1181
1174
 
1182
- border: 0;
1175
+
1176
+ box-sizing: border-box;
1177
+ border: var(--e-stroke-edge) solid var(--e-ring);
1183
1178
  background: var(--e-surface);
1184
- box-shadow:
1185
- inset 0 0 0 var(--e-stroke-edge) var(--e-ring),
1186
- var(--e-well);
1179
+ background-clip: padding-box;
1180
+ box-shadow: var(--e-well);
1187
1181
  cursor: inherit;
1188
1182
  transition:
1189
- box-shadow var(--e-duration-tap) var(--e-easing-out),
1183
+ border-color var(--e-duration-tap) var(--e-easing-out),
1190
1184
  background-color var(--e-duration-tap) var(--e-easing-out);
1191
1185
  }
1192
1186
 
@@ -1205,8 +1199,11 @@ to {
1205
1199
  background-color: var(--e-surface-hover);
1206
1200
  }
1207
1201
 
1208
- .e-check:checked {
1202
+ .e-check:checked,
1203
+ .e-radio:checked {
1204
+ border-color: var(--e-primary);
1209
1205
  background-color: var(--e-primary);
1206
+ background-clip: border-box;
1210
1207
  box-shadow: none;
1211
1208
  }
1212
1209
 
@@ -1224,8 +1221,6 @@ to {
1224
1221
  }
1225
1222
 
1226
1223
  .e-radio:checked {
1227
- background-color: var(--e-primary);
1228
- box-shadow: none;
1229
1224
  background-image: radial-gradient(circle, var(--e-on-primary) 0 4px, transparent 5px);
1230
1225
  }
1231
1226
 
@@ -1245,6 +1240,7 @@ to {
1245
1240
  .e-radio:disabled {
1246
1241
  outline: var(--e-stroke-edge) dashed var(--e-border-strong);
1247
1242
  outline-offset: calc(-1 * var(--e-stroke-edge));
1243
+ border-color: transparent;
1248
1244
  background-color: var(--e-surface-tint);
1249
1245
  box-shadow: none;
1250
1246
  }
@@ -1252,8 +1248,9 @@ to {
1252
1248
  .e-check:checked:disabled,
1253
1249
  .e-radio:checked:disabled {
1254
1250
  outline: 0;
1251
+ border-color: var(--e-border-strong);
1255
1252
  background-color: var(--e-surface-tint);
1256
- box-shadow: inset 0 0 0 var(--e-stroke-edge) var(--e-border-strong);
1253
+ box-shadow: none;
1257
1254
  }
1258
1255
 
1259
1256
  @media (prefers-reduced-motion: reduce) {
@@ -1401,17 +1398,19 @@ to {
1401
1398
  width: 100%;
1402
1399
  min-width: 0;
1403
1400
  height: var(--e-control-height);
1404
- padding: 0 var(--e-space-4);
1405
- border: 0;
1401
+ padding: 0 calc(var(--e-space-4) - var(--e-stroke-edge));
1402
+
1403
+ /* The edge is a border and the fill stops inside it: a fill under an inset-shadow edge leaks into the antialiased corner. */
1404
+ box-sizing: border-box;
1405
+ border: var(--e-stroke-edge) solid var(--e-ring);
1406
1406
  border-radius: var(--e-radius-md);
1407
1407
  background-color: var(--e-surface);
1408
- box-shadow:
1409
- inset 0 0 0 var(--e-stroke-edge) var(--e-ring),
1410
- var(--e-well);
1408
+ background-clip: padding-box;
1409
+ box-shadow: var(--e-well);
1411
1410
  color: var(--e-ink);
1412
1411
  font: 400 var(--e-text-md)/1 var(--e-font-sans);
1413
1412
  transition:
1414
- box-shadow var(--e-duration-tap) var(--e-easing-out),
1413
+ border-color var(--e-duration-tap) var(--e-easing-out),
1415
1414
  background-color var(--e-duration-tap) var(--e-easing-out);
1416
1415
  }
1417
1416
 
@@ -1419,14 +1418,18 @@ to {
1419
1418
  color: var(--e-muted);
1420
1419
  }
1421
1420
 
1422
- .e-input:hover {
1423
- background-color: var(--e-surface-hover);
1421
+ /* The hover fill is laid over the well, so it runs unbroken to the top edge. */
1422
+ .e-input:hover,
1423
+ .e-input-wrap:hover,
1424
+ .e-search:hover {
1425
+ box-shadow: inset 0 0 0 100vmax var(--e-over, var(--e-surface-hover));
1424
1426
  }
1425
1427
 
1426
1428
  .e-input:focus {
1427
1429
  --e-ring: var(--e-focus-field);
1428
1430
 
1429
1431
  background-color: var(--e-surface);
1432
+ box-shadow: var(--e-well);
1430
1433
  }
1431
1434
 
1432
1435
  /* 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. */
@@ -1442,12 +1445,14 @@ to {
1442
1445
  background-color: var(--e-surface);
1443
1446
  }
1444
1447
 
1445
- .e-input[aria-invalid="true"]:hover {
1446
- background-color: var(--e-danger-soft);
1448
+ .e-input[aria-invalid="true"]:hover,
1449
+ .e-input-wrap[data-invalid]:hover {
1450
+ --e-over: var(--e-danger-soft);
1447
1451
  }
1448
1452
 
1449
1453
  .e-input[aria-invalid="true"]:focus {
1450
1454
  background-color: var(--e-surface);
1455
+ box-shadow: var(--e-well);
1451
1456
  }
1452
1457
 
1453
1458
  .e-input[aria-invalid="true"]:focus-visible {
@@ -1458,6 +1463,7 @@ to {
1458
1463
  cursor: not-allowed;
1459
1464
  outline: var(--e-stroke-edge) dashed var(--e-border-strong);
1460
1465
  outline-offset: calc(-1 * var(--e-stroke-edge));
1466
+ border-color: transparent;
1461
1467
  background-color: var(--e-surface-tint);
1462
1468
  box-shadow: none;
1463
1469
  color: var(--e-muted);
@@ -1465,6 +1471,7 @@ to {
1465
1471
 
1466
1472
  .e-input[readonly]:not(:disabled) {
1467
1473
  background-color: var(--e-surface-tint);
1474
+ box-shadow: none;
1468
1475
  }
1469
1476
 
1470
1477
  .e-input-wrap {
@@ -1474,24 +1481,22 @@ to {
1474
1481
  align-items: stretch;
1475
1482
  min-width: 0;
1476
1483
  min-height: var(--e-control-height);
1484
+ box-sizing: border-box;
1485
+ border: var(--e-stroke-edge) solid var(--e-ring);
1477
1486
  border-radius: var(--e-radius-md);
1478
1487
  background: var(--e-surface);
1479
- box-shadow:
1480
- inset 0 0 0 var(--e-stroke-edge) var(--e-ring),
1481
- var(--e-well);
1488
+ background-clip: padding-box;
1489
+ box-shadow: var(--e-well);
1482
1490
  transition:
1483
- box-shadow var(--e-duration-tap) var(--e-easing-out),
1491
+ border-color var(--e-duration-tap) var(--e-easing-out),
1484
1492
  background-color var(--e-duration-tap) var(--e-easing-out);
1485
1493
  }
1486
1494
 
1487
- .e-input-wrap:hover {
1488
- background: var(--e-surface-hover);
1489
- }
1490
-
1491
1495
  .e-input-wrap:focus-within {
1492
1496
  --e-ring: var(--e-focus-field);
1493
1497
 
1494
1498
  background: var(--e-surface);
1499
+ box-shadow: var(--e-well);
1495
1500
  outline: max(var(--e-stroke-focus), calc(2 * var(--e-stroke-edge))) solid var(--e-focus-field);
1496
1501
  outline-offset: var(--e-focus-gap-field);
1497
1502
  }
@@ -1502,18 +1507,16 @@ to {
1502
1507
  background: var(--e-surface);
1503
1508
  }
1504
1509
 
1505
- .e-input-wrap[data-invalid]:hover {
1506
- background: var(--e-danger-soft);
1507
- }
1508
-
1509
1510
  .e-input-wrap[data-invalid]:focus-within {
1510
1511
  background: var(--e-surface);
1512
+ box-shadow: var(--e-well);
1511
1513
  outline-color: var(--e-danger);
1512
1514
  }
1513
1515
 
1514
1516
  .e-input-wrap[data-disabled] {
1515
1517
  outline: var(--e-stroke-edge) dashed var(--e-border-strong);
1516
1518
  outline-offset: calc(-1 * var(--e-stroke-edge));
1519
+ border-color: transparent;
1517
1520
  background: var(--e-surface-tint);
1518
1521
  box-shadow: none;
1519
1522
  color: var(--e-muted);
@@ -1522,6 +1525,7 @@ to {
1522
1525
  .e-input-wrap .e-input {
1523
1526
  flex: 1;
1524
1527
  outline: 0;
1528
+ border: 0;
1525
1529
  background: transparent;
1526
1530
  box-shadow: none;
1527
1531
  height: auto;
@@ -1532,6 +1536,7 @@ to {
1532
1536
  .e-input-wrap .e-input:hover,
1533
1537
  .e-input-wrap .e-input:focus {
1534
1538
  background: transparent;
1539
+ box-shadow: none;
1535
1540
  }
1536
1541
 
1537
1542
  .e-input-wrap .e-input:focus-visible {
@@ -1817,7 +1822,7 @@ to {
1817
1822
  flex-wrap: nowrap;
1818
1823
  align-items: center;
1819
1824
  min-height: var(--e-control-height);
1820
- padding-inline-end: var(--e-space-1);
1825
+ padding-inline-end: calc(var(--e-space-1) - var(--e-stroke-edge));
1821
1826
  }
1822
1827
 
1823
1828
  .e-combo:not(.e-combo--multi) .e-input {
@@ -1825,7 +1830,7 @@ to {
1825
1830
  min-width: 4rem;
1826
1831
  height: auto;
1827
1832
  align-self: stretch;
1828
- padding-inline: var(--e-space-4) var(--e-space-2);
1833
+ padding-inline: calc(var(--e-space-4) - var(--e-stroke-edge)) calc(var(--e-space-2) - var(--e-stroke-edge));
1829
1834
  }
1830
1835
 
1831
1836
  .e-combo-btn {
@@ -1899,7 +1904,7 @@ to {
1899
1904
  align-self: center;
1900
1905
  }
1901
1906
  .e-combo--multi {
1902
- padding: 3px var(--e-space-1) 3px var(--e-space-2);
1907
+ padding: calc(3px - var(--e-stroke-edge)) calc(var(--e-space-1) - var(--e-stroke-edge)) calc(3px - var(--e-stroke-edge)) calc(var(--e-space-2) - var(--e-stroke-edge));
1903
1908
  gap: var(--e-space-1);
1904
1909
  }
1905
1910
  .e-combo--multi .e-input {
@@ -2192,14 +2197,23 @@ to {
2192
2197
  align-items: center;
2193
2198
  justify-content: space-between;
2194
2199
  gap: var(--e-space-2);
2195
- padding-inline-end: var(--e-space-3);
2200
+ padding-inline-end: calc(var(--e-space-3) - var(--e-stroke-edge));
2196
2201
  text-align: start;
2197
2202
  cursor: pointer;
2198
2203
  }
2204
+
2205
+ /* Open, the trigger looks focused: focus moves into the list, so the field's own :focus no longer applies. */
2199
2206
  .e-sel-trigger[aria-expanded="true"] {
2200
- --e-ring: var(--e-ink);
2207
+ --e-ring: var(--e-focus-field);
2201
2208
 
2202
2209
  background-color: var(--e-surface);
2210
+ outline: max(var(--e-stroke-focus), calc(2 * var(--e-stroke-edge))) solid var(--e-focus-field);
2211
+ outline-offset: var(--e-focus-gap-field);
2212
+ }
2213
+ .e-sel-trigger[aria-expanded="true"][aria-invalid="true"] {
2214
+ --e-ring: var(--e-danger);
2215
+
2216
+ outline-color: var(--e-danger);
2203
2217
  }
2204
2218
  .e-sel-value {
2205
2219
  display: inline-flex;
@@ -2508,11 +2522,11 @@ to {
2508
2522
  .e-filterrow .e-input {
2509
2523
  height: var(--e-control-height);
2510
2524
  font-size: var(--e-text-md);
2511
- padding-inline: var(--e-space-3);
2525
+ padding-inline: calc(var(--e-space-3) - var(--e-stroke-edge));
2512
2526
  }
2513
2527
  .e-filterrow .e-sel-trigger {
2514
2528
  height: var(--e-control-height);
2515
- padding-inline-end: var(--e-space-2);
2529
+ padding-inline-end: calc(var(--e-space-2) - var(--e-stroke-edge));
2516
2530
  }
2517
2531
  .e-filter-range {
2518
2532
  display: grid;
@@ -3733,18 +3747,20 @@ a:any-link > .e-highlight {
3733
3747
  gap: var(--e-space-3);
3734
3748
  height: var(--e-control-height);
3735
3749
  box-sizing: border-box;
3736
- padding: 0 var(--e-space-3) var(--e-lift);
3750
+ padding: 0 calc(var(--e-space-3) - var(--e-stroke-edge));
3737
3751
 
3738
3752
  --e-lift: 0px;
3739
3753
 
3740
- border: 0;
3754
+ /* The current page is outlined with a border and its fill stops inside it, so the corner carries the edge colour alone; the other items have no edge and fill to the box. */
3755
+ border: var(--e-stroke-edge) solid transparent;
3756
+ border-bottom-width: calc(var(--e-stroke-edge) + var(--e-lift));
3741
3757
  border-radius: var(--e-radius-md);
3742
3758
  color: var(--e-ink);
3743
3759
  font: 400 var(--e-text-md) / 1 var(--e-font-sans);
3744
3760
  text-decoration: none;
3745
3761
  transition:
3746
3762
  background-color var(--e-duration-tap) var(--e-easing-out),
3747
- box-shadow var(--e-duration-tap) var(--e-easing-out);
3763
+ border-color var(--e-duration-tap) var(--e-easing-out);
3748
3764
  }
3749
3765
  .e-nav-item:hover {
3750
3766
  background-color: var(--e-surface-hover);
@@ -3760,9 +3776,9 @@ a:any-link > .e-highlight {
3760
3776
  --e-lift: var(--e-depth);
3761
3777
  --e-slab: var(--e-primary);
3762
3778
 
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);
3779
+ border-color: var(--e-primary);
3780
+ border-bottom-color: var(--e-slab);
3781
+ background-clip: padding-box;
3766
3782
  }
3767
3783
  .e-nav-item[aria-current="page"]:hover {
3768
3784
  --e-slab: color-mix(in srgb, var(--e-primary), var(--e-shade-slab));
@@ -3885,14 +3901,14 @@ a:any-link > .e-highlight {
3885
3901
  --e-bg: var(--e-surface-tint);
3886
3902
 
3887
3903
  container-type: inline-size;
3888
- padding: var(--e-space-3) var(--e-space-4);
3889
- padding-left: calc(var(--e-space-4) + 2 * var(--e-depth));
3890
- border: 0;
3904
+ padding: calc(var(--e-space-3) - var(--e-stroke-edge)) calc(var(--e-space-4) - var(--e-stroke-edge));
3905
+ padding-left: calc(var(--e-space-4) - var(--e-stroke-edge) + 2 * var(--e-depth));
3906
+ border: var(--e-stroke-edge) solid var(--e-tone);
3891
3907
  border-radius: var(--e-radius-md);
3892
3908
  background-color: var(--e-bg);
3893
- box-shadow: inset 0 0 0 var(--e-stroke-edge) var(--e-tone);
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)));
3909
+ background-image: linear-gradient(to right, var(--e-tone) calc(2 * var(--e-depth)), transparent calc(2 * var(--e-depth)));
3895
3910
  background-repeat: no-repeat;
3911
+ background-clip: padding-box;
3896
3912
  color: var(--e-ink);
3897
3913
  }
3898
3914
  .e-notice--success {
@@ -4056,21 +4072,32 @@ a:any-link > .e-highlight {
4056
4072
  .e-progress-track {
4057
4073
  position: relative;
4058
4074
  height: 10px;
4075
+ box-sizing: border-box;
4076
+ padding: calc(var(--e-stroke-card) / 2);
4059
4077
  border-radius: var(--e-radius-pill);
4060
4078
  background: var(--e-surface-tint);
4061
- box-shadow: inset 0 0 0 var(--e-stroke-card) var(--e-border-strong);
4079
+ background-clip: content-box;
4062
4080
  overflow: hidden;
4063
4081
  }
4082
+
4083
+ /* The outline lies over the track and bar, which stop half a stroke inside its outer edge: nothing shows outside the curve or in a gap inside it. */
4084
+ .e-progress-track::after {
4085
+ content: "";
4086
+ position: absolute;
4087
+ inset: 0;
4088
+ border: var(--e-stroke-card) solid var(--e-border-strong);
4089
+ border-radius: inherit;
4090
+ pointer-events: none;
4091
+ }
4064
4092
  .e-progress-fill {
4065
4093
  height: 100%;
4066
4094
  border-radius: var(--e-radius-pill);
4067
4095
  background: var(--e-primary);
4068
- box-shadow: inset 0 0 0 var(--e-stroke-card) var(--e-primary);
4069
4096
  transition: width var(--e-duration-move) var(--e-easing-out);
4070
4097
  }
4071
4098
  .e-progress--indeterminate .e-progress-fill {
4072
4099
  position: absolute;
4073
- inset: 0 auto 0 0;
4100
+ inset: calc(var(--e-stroke-card) / 2) auto calc(var(--e-stroke-card) / 2) calc(var(--e-stroke-card) / 2);
4074
4101
  width: 40%;
4075
4102
  transition: none;
4076
4103
  animation: e-progress-slide 1.5s cubic-bezier(0.4, 0, 0.2, 1) infinite;
@@ -4098,8 +4125,8 @@ to {
4098
4125
  }
4099
4126
  }
4100
4127
  @media (forced-colors: active) {
4101
- .e-progress-track {
4102
- border: var(--e-stroke-card) solid CanvasText;
4128
+ .e-progress-track::after {
4129
+ border-color: CanvasText;
4103
4130
  }
4104
4131
  .e-progress-fill {
4105
4132
  forced-color-adjust: none;
@@ -4163,21 +4190,19 @@ to {
4163
4190
  align-items: center;
4164
4191
  gap: var(--e-space-1);
4165
4192
  height: var(--e-control-height);
4166
- padding: 0 var(--e-space-1) 0 var(--e-space-2);
4193
+ padding: 0 calc(var(--e-space-1) - var(--e-stroke-edge)) 0 calc(var(--e-space-2) - var(--e-stroke-edge));
4194
+ box-sizing: border-box;
4195
+ border: var(--e-stroke-edge) solid var(--e-ring);
4167
4196
  border-radius: var(--e-radius-md);
4168
4197
  background: var(--e-surface);
4169
- box-shadow:
4170
- inset 0 0 0 var(--e-stroke-edge) var(--e-ring),
4171
- var(--e-well);
4172
- transition: box-shadow var(--e-duration-tap) var(--e-easing-out);
4173
- }
4174
- .e-search:hover {
4175
- background: var(--e-surface-hover);
4198
+ background-clip: padding-box;
4199
+ box-shadow: var(--e-well);
4200
+ transition: border-color var(--e-duration-tap) var(--e-easing-out);
4176
4201
  }
4177
4202
  .e-search .e-btn {
4178
4203
  position: relative;
4179
4204
  height: calc(var(--e-control-height) - 6px);
4180
- padding: 0 var(--e-space-3) var(--e-lift);
4205
+ padding: 0 calc(var(--e-space-3) - var(--e-stroke-edge));
4181
4206
  font-size: var(--e-text-md);
4182
4207
  }
4183
4208
  .e-search .e-btn::after {
@@ -4239,6 +4264,7 @@ to {
4239
4264
  .e-search .e-input:focus {
4240
4265
  border: 0;
4241
4266
  background: transparent;
4267
+ box-shadow: none;
4242
4268
  }
4243
4269
  .e-search .e-input:focus-visible {
4244
4270
  outline: none;
@@ -4372,7 +4398,8 @@ to {
4372
4398
  .e-seg-opt:has(:disabled:checked):hover .e-seg-text {
4373
4399
  background-color: var(--e-surface);
4374
4400
  background-image: none;
4375
- box-shadow: inset 0 0 0 var(--e-stroke-edge) var(--e-border-strong);
4401
+ outline: var(--e-stroke-edge) solid var(--e-border-strong);
4402
+ outline-offset: calc(-1 * var(--e-stroke-edge));
4376
4403
  color: var(--e-ink);
4377
4404
  }
4378
4405
  .e-seg-field {
@@ -4401,11 +4428,11 @@ to {
4401
4428
  .e-pad-surface {
4402
4429
  position: relative;
4403
4430
  overflow: hidden;
4431
+ border: var(--e-stroke-edge) solid var(--e-border-strong);
4404
4432
  border-radius: var(--e-radius-md);
4405
4433
  background: var(--e-surface);
4406
- box-shadow:
4407
- inset 0 0 0 var(--e-stroke-edge) var(--e-border-strong),
4408
- var(--e-well);
4434
+ background-clip: padding-box;
4435
+ box-shadow: var(--e-well);
4409
4436
  }
4410
4437
  .e-pad-surface::after {
4411
4438
  content: "";
@@ -4596,23 +4623,28 @@ to {
4596
4623
  place-items: center;
4597
4624
  width: var(--e-dot);
4598
4625
  height: var(--e-dot);
4626
+ box-sizing: border-box;
4627
+ border: var(--e-stroke-edge) solid transparent;
4599
4628
  border-radius: 50%;
4600
4629
  outline: var(--e-stroke-edge) dashed var(--e-border-strong);
4601
4630
  outline-offset: calc(-1 * var(--e-stroke-edge));
4602
4631
  background: var(--e-surface);
4632
+ background-clip: padding-box;
4603
4633
  color: var(--e-muted);
4604
4634
  font: 600 var(--e-text-xs) / 1 var(--e-font-mono);
4605
4635
  }
4606
4636
  .e-step[data-state="done"] .e-step-dot {
4607
4637
  outline: 0;
4638
+ border-color: var(--e-primary);
4608
4639
  background: var(--e-primary);
4609
4640
  color: var(--e-on-primary);
4610
4641
  }
4611
4642
  .e-step[data-state="current"] .e-step-dot {
4612
4643
  outline: 0;
4613
- box-shadow: inset 0 0 0 var(--e-stroke-focus) var(--e-primary);
4644
+ border: var(--e-stroke-focus) solid var(--e-primary);
4614
4645
  color: var(--e-primary);
4615
4646
  background: var(--e-surface);
4647
+ background-clip: padding-box;
4616
4648
  }
4617
4649
  .e-step-label {
4618
4650
  font: 400 var(--e-text-sm) / 1.3 var(--e-font-sans);
@@ -4738,18 +4770,20 @@ to {
4738
4770
  flex: none;
4739
4771
  width: var(--e-switch-w);
4740
4772
  height: 24px;
4773
+ box-sizing: border-box;
4774
+ border: var(--e-stroke-edge) solid var(--e-ring);
4741
4775
  border-radius: var(--e-radius-pill);
4742
4776
  background: var(--e-surface-tint);
4743
- box-shadow: inset 0 0 0 var(--e-stroke-edge) var(--e-ring);
4777
+ background-clip: padding-box;
4744
4778
  transition:
4745
4779
  background-color var(--e-duration-tap) var(--e-easing-out),
4746
- box-shadow var(--e-duration-tap) var(--e-easing-out);
4780
+ border-color var(--e-duration-tap) var(--e-easing-out);
4747
4781
  }
4748
4782
  .e-switch-track::after {
4749
4783
  content: "";
4750
4784
  position: absolute;
4751
4785
  top: 50%;
4752
- inset-inline-start: var(--e-thumb-inset);
4786
+ inset-inline-start: calc(var(--e-thumb-inset) - var(--e-stroke-edge));
4753
4787
  width: var(--e-thumb);
4754
4788
  height: var(--e-thumb);
4755
4789
  margin-top: calc(var(--e-thumb) / -2);
@@ -4763,17 +4797,18 @@ to {
4763
4797
  .e-switch-input:checked + .e-switch-track {
4764
4798
  --e-ring: var(--e-primary);
4765
4799
 
4766
- background: var(--e-primary);
4800
+ background-color: var(--e-primary);
4801
+ background-clip: border-box;
4767
4802
  }
4768
4803
  .e-switch-input:checked + .e-switch-track::after {
4769
4804
  background: var(--e-on-primary);
4770
4805
  transform: translateX(var(--e-thumb-travel));
4771
4806
  }
4772
4807
  .e-switch-input:disabled + .e-switch-track {
4773
- box-shadow: none;
4808
+ border-color: transparent;
4774
4809
  outline: var(--e-stroke-edge) dashed var(--e-border-strong);
4775
4810
  outline-offset: calc(-1 * var(--e-stroke-edge));
4776
- background: var(--e-surface-tint);
4811
+ background-color: var(--e-surface-tint);
4777
4812
  }
4778
4813
  .e-switch-input:disabled + .e-switch-track::after {
4779
4814
  background: var(--e-muted);
@@ -4888,7 +4923,6 @@ to {
4888
4923
 
4889
4924
  /* 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. */
4890
4925
  --e-lift: 0px;
4891
- --e-band: calc(var(--e-lift) + var(--e-stroke-edge));
4892
4926
  --e-slab: var(--e-primary);
4893
4927
 
4894
4928
  position: relative;
@@ -4897,18 +4931,19 @@ to {
4897
4931
  gap: var(--e-space-2);
4898
4932
  flex: none;
4899
4933
  height: var(--e-control-height);
4900
- padding: 0 var(--e-space-4) var(--e-lift);
4901
- border: 0;
4934
+ padding: 0 calc(var(--e-space-4) - var(--e-stroke-edge));
4935
+ border: var(--e-stroke-edge) solid var(--e-bc);
4936
+ border-bottom-width: calc(var(--e-stroke-edge) + var(--e-lift));
4902
4937
  border-radius: 0;
4903
4938
  background: transparent;
4904
- box-shadow: inset 0 0 0 var(--e-stroke-edge) var(--e-bc);
4939
+ background-clip: padding-box;
4905
4940
  color: var(--e-muted);
4906
4941
  font: 500 var(--e-text-md) / 1 var(--e-font-sans);
4907
4942
  cursor: pointer;
4908
4943
  transition:
4909
4944
  color var(--e-duration-tap) var(--e-easing-out),
4910
4945
  background-color var(--e-duration-tap) var(--e-easing-out),
4911
- box-shadow var(--e-duration-tap) var(--e-easing-out);
4946
+ border-color var(--e-duration-tap) var(--e-easing-out);
4912
4947
  }
4913
4948
 
4914
4949
  /* Only the outer ends of the row are rounded. */
@@ -4935,10 +4970,8 @@ to {
4935
4970
  --e-lift: var(--e-depth);
4936
4971
 
4937
4972
  z-index: var(--e-z-sticky);
4973
+ border-bottom-color: var(--e-slab);
4938
4974
  background-color: color-mix(in srgb, var(--e-surface-tint), var(--e-ink) 3%);
4939
- box-shadow:
4940
- inset 0 0 0 var(--e-stroke-edge) var(--e-bc),
4941
- inset 0 calc(-1 * var(--e-band)) 0 0 var(--e-slab);
4942
4975
  color: var(--e-ink);
4943
4976
  font-weight: 600;
4944
4977
  }
@@ -4959,10 +4992,10 @@ to {
4959
4992
  flex: 1 1 0;
4960
4993
  min-width: 0;
4961
4994
  justify-content: center;
4962
- padding-inline: var(--e-space-1);
4995
+ padding-inline: max(0px, calc(var(--e-space-1) - var(--e-stroke-edge)));
4963
4996
  }
4964
4997
 
4965
- /* 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. */
4998
+ /* Vertical: the tabs stack beside the panel, flush and sharing edges. The selected tab's slab is a band down the inline-start side, and only the column's ends are rounded. */
4966
4999
  .e-tabs--vertical {
4967
5000
  display: flex;
4968
5001
  align-items: flex-start;
@@ -4977,7 +5010,6 @@ to {
4977
5010
  --e-lift: 0px;
4978
5011
 
4979
5012
  height: var(--e-control-height);
4980
- padding-block-end: 0;
4981
5013
  justify-content: flex-start;
4982
5014
  border-radius: 0;
4983
5015
  }
@@ -4996,23 +5028,18 @@ to {
4996
5028
  .e-tabs--vertical > .e-tablist > .e-tab[aria-selected="true"] {
4997
5029
  --e-lift: var(--e-depth);
4998
5030
 
4999
- padding-inline-start: calc(var(--e-space-4) + var(--e-lift));
5000
- box-shadow:
5001
- inset 0 0 0 var(--e-stroke-edge) var(--e-bc),
5002
- inset var(--e-band) 0 0 0 var(--e-slab);
5031
+ border-bottom-width: var(--e-stroke-edge);
5032
+ border-bottom-color: var(--e-bc);
5033
+ border-inline-start-width: calc(var(--e-stroke-edge) + var(--e-lift));
5034
+ border-inline-start-color: var(--e-slab);
5003
5035
  }
5004
5036
  .e-tabs--vertical > .e-tabpanel {
5005
5037
  flex: 1 1 0;
5006
5038
  min-width: 0;
5007
5039
  padding-top: 0;
5008
5040
  }
5009
- :dir(rtl) .e-tabs--vertical > .e-tablist > .e-tab[aria-selected="true"] {
5010
- box-shadow:
5011
- inset 0 0 0 var(--e-stroke-edge) var(--e-bc),
5012
- inset calc(-1 * var(--e-band)) 0 0 0 var(--e-slab);
5013
- }
5014
5041
 
5015
- /* 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. */
5042
+ /* 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. Only the card's outer corner at the first tab is rounded. The row leaves a corner's width of open edge past the last tab, so the panel's curve never meets a tab's straight edge. */
5016
5043
  .e-tabs--framed > .e-tablist {
5017
5044
  position: relative;
5018
5045
  z-index: var(--e-z-raised);
@@ -5043,19 +5070,19 @@ to {
5043
5070
  --e-bc: var(--e-primary);
5044
5071
  --e-lift: var(--e-depth);
5045
5072
 
5046
- padding-block: var(--e-lift) 0;
5073
+ padding-block-end: var(--e-stroke-edge);
5074
+ border-bottom-width: 0;
5075
+ border-top-width: calc(var(--e-stroke-edge) + var(--e-lift));
5076
+ border-top-color: var(--e-slab);
5047
5077
  background-color: var(--e-surface);
5048
- box-shadow:
5049
- inset var(--e-stroke-edge) 0 0 0 var(--e-bc),
5050
- inset calc(-1 * var(--e-stroke-edge)) 0 0 0 var(--e-bc),
5051
- inset 0 var(--e-band) 0 0 var(--e-slab);
5052
5078
  }
5053
5079
  .e-tabs--framed > .e-tabpanel {
5054
- padding: var(--e-space-4);
5080
+ padding: calc(var(--e-space-4) - var(--e-stroke-edge));
5081
+ border: var(--e-stroke-edge) solid var(--e-border-strong);
5055
5082
  border-radius: var(--e-radius-md);
5056
5083
  border-start-start-radius: 0;
5057
5084
  background: var(--e-surface);
5058
- box-shadow: inset 0 0 0 var(--e-stroke-edge) var(--e-border-strong);
5085
+ background-clip: padding-box;
5059
5086
  }
5060
5087
  .e-tabs--framed.e-tabs--fill > .e-tabpanel {
5061
5088
  border-start-end-radius: 0;
@@ -5078,23 +5105,19 @@ to {
5078
5105
  .e-tabs--framed.e-tabs--vertical > .e-tablist > .e-tab[aria-selected="true"] {
5079
5106
  margin-block: calc(-1 * var(--e-stroke-edge)) 0;
5080
5107
  padding-block: 0;
5081
- padding-inline-start: calc(var(--e-space-4) + var(--e-lift));
5082
- box-shadow:
5083
- inset 0 var(--e-stroke-edge) 0 0 var(--e-bc),
5084
- inset 0 calc(-1 * var(--e-stroke-edge)) 0 0 var(--e-bc),
5085
- inset var(--e-band) 0 0 0 var(--e-slab);
5086
- }
5087
- :dir(rtl) .e-tabs--framed.e-tabs--vertical > .e-tablist > .e-tab[aria-selected="true"] {
5088
- box-shadow:
5089
- inset 0 var(--e-stroke-edge) 0 0 var(--e-bc),
5090
- inset 0 calc(-1 * var(--e-stroke-edge)) 0 0 var(--e-bc),
5091
- inset calc(-1 * var(--e-band)) 0 0 0 var(--e-slab);
5108
+ border-block-start-width: var(--e-stroke-edge);
5109
+ border-block-start-color: var(--e-bc);
5110
+ border-block-end-width: var(--e-stroke-edge);
5111
+ border-block-end-color: var(--e-bc);
5112
+ border-inline-start-width: calc(var(--e-stroke-edge) + var(--e-lift));
5113
+ border-inline-start-color: var(--e-slab);
5114
+ border-inline-end-width: 0;
5092
5115
  }
5093
5116
  .e-tabs--framed.e-tabs--vertical > .e-tablist > .e-tab[aria-selected="true"]:first-child {
5094
5117
  margin-block-start: 0;
5095
5118
  }
5096
5119
  .e-tabs--framed.e-tabs--vertical > .e-tabpanel {
5097
- padding: var(--e-space-4);
5120
+ padding: calc(var(--e-space-4) - var(--e-stroke-edge));
5098
5121
  }
5099
5122
  .e-tab-count {
5100
5123
  min-width: var(--e-space-6);
@@ -5148,7 +5171,7 @@ to {
5148
5171
  .e-textarea {
5149
5172
  height: auto;
5150
5173
  min-height: 6.5rem;
5151
- padding: var(--e-space-3) var(--e-space-4);
5174
+ padding: calc(var(--e-space-3) - var(--e-stroke-edge)) calc(var(--e-space-4) - var(--e-stroke-edge));
5152
5175
  line-height: 1.5;
5153
5176
  resize: vertical;
5154
5177
  }