@webority/theme 0.81.0 → 0.82.1
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.
- package/README.md +3 -3
- package/dist/purge-safelist.json +0 -1
- package/dist/webority-brand-signal.css +1 -1
- package/dist/webority-theme.css +1 -1
- package/package.json +1 -1
- package/scss/_brand-signal.scss +7 -8
- package/scss/_components.scss +12 -10
- package/scss/_tokens.scss +14 -8
- package/scss/_variables.scss +2 -2
- package/scss/_wui-aliases.scss +7 -0
- package/scss/wui/_card.scss +3 -0
- package/scss/wui/_carousel.scss +1 -1
- package/scss/wui/_chart.scss +2 -2
- package/scss/wui/_choice.scss +17 -19
- package/scss/wui/_command-palette.scss +3 -3
- package/scss/wui/_controls.scss +51 -43
- package/scss/wui/_data.scss +17 -19
- package/scss/wui/_display.scss +38 -54
- package/scss/wui/_file-viewer.scss +1 -1
- package/scss/wui/_flow.scss +2 -2
- package/scss/wui/_interaction.scss +55 -2
- package/scss/wui/_lightbox.scss +1 -1
- package/scss/wui/_media.scss +11 -10
- package/scss/wui/_navigation.scss +8 -5
- package/scss/wui/_notification-center.scss +2 -2
- package/scss/wui/_overlays.scss +2 -2
- package/scss/wui/_rating.scss +1 -1
- package/scss/wui/_rich-text.scss +1 -1
- package/scss/wui/_score-scale.scss +1 -1
- package/scss/wui/_shell-parts.scss +4 -4
- package/scss/wui/_shell.scss +2 -2
- package/scss/wui/_shortcuts.scss +1 -1
- package/scss/wui/_sortable.scss +1 -1
- package/scss/wui/_split-view.scss +1 -1
- package/scss/wui/_toolbar.scss +3 -3
- package/scss/wui/_typography.scss +4 -5
- package/scss/wui/_utilities.scss +1 -1
- package/scss/wui/_workspace.scss +6 -6
package/scss/wui/_data.scss
CHANGED
|
@@ -13,9 +13,9 @@
|
|
|
13
13
|
color: var(--color-text-subtle);
|
|
14
14
|
}
|
|
15
15
|
.empty-state-title {
|
|
16
|
-
// Matches .tbl-empty-title
|
|
16
|
+
// Matches .tbl-empty-title, both in the sans face under every brand. A table's header hides
|
|
17
17
|
// in any .table-wrap whose empty block is visible.
|
|
18
|
-
font-size:
|
|
18
|
+
font-size: 17px;
|
|
19
19
|
font-weight: 600;
|
|
20
20
|
line-height: 1.35;
|
|
21
21
|
color: var(--color-text);
|
|
@@ -74,7 +74,7 @@
|
|
|
74
74
|
margin-bottom: 16px;
|
|
75
75
|
}
|
|
76
76
|
.tbl-empty-title {
|
|
77
|
-
font-size:
|
|
77
|
+
font-size: 17px;
|
|
78
78
|
font-weight: 600;
|
|
79
79
|
line-height: 1.35;
|
|
80
80
|
color: var(--color-text);
|
|
@@ -348,8 +348,10 @@
|
|
|
348
348
|
.table-ledger tbody tr:last-child td {
|
|
349
349
|
border-bottom: none;
|
|
350
350
|
}
|
|
351
|
-
|
|
352
|
-
|
|
351
|
+
// A row tints under the pointer, and while a control inside it holds keyboard focus.
|
|
352
|
+
.table-ledger tbody tr:hover,
|
|
353
|
+
.table-ledger tbody tr:focus-within {
|
|
354
|
+
--bs-table-bg-state: var(--color-bg-muted);
|
|
353
355
|
}
|
|
354
356
|
.table-ledger .u-meta {
|
|
355
357
|
gap: 2px;
|
|
@@ -583,10 +585,6 @@
|
|
|
583
585
|
white-space: nowrap;
|
|
584
586
|
flex: none;
|
|
585
587
|
}
|
|
586
|
-
// 3px padding and a 1px border on each side, so the strip reaches the small control height beside the other filter controls.
|
|
587
|
-
.wui-filter-bar .segmented-sm {
|
|
588
|
-
--segmented-option-h: calc(var(--wui-control-height-sm) - 8px);
|
|
589
|
-
}
|
|
590
588
|
// Facets folded behind the Filters button stack in one panel, each at the panel's width. Both surfaces
|
|
591
589
|
// draw it as the same <details>; in the Razor bar it sits inside the form, so the controls still submit.
|
|
592
590
|
.wui-filter-more-panel {
|
|
@@ -704,8 +702,8 @@
|
|
|
704
702
|
.select.tpg-select {
|
|
705
703
|
width: auto;
|
|
706
704
|
min-width: 64px;
|
|
707
|
-
height:
|
|
708
|
-
min-height:
|
|
705
|
+
height: var(--wui-control-height-sm);
|
|
706
|
+
min-height: var(--wui-control-height-sm);
|
|
709
707
|
padding: 0 28px 0 12px;
|
|
710
708
|
font-size: 13px;
|
|
711
709
|
font-weight: 600;
|
|
@@ -730,8 +728,8 @@
|
|
|
730
728
|
.tpg-arrow {
|
|
731
729
|
display: grid;
|
|
732
730
|
place-items: center;
|
|
733
|
-
width:
|
|
734
|
-
height:
|
|
731
|
+
width: var(--wui-control-height-sm);
|
|
732
|
+
height: var(--wui-control-height-sm);
|
|
735
733
|
border: none;
|
|
736
734
|
background: transparent;
|
|
737
735
|
color: var(--color-text-muted);
|
|
@@ -760,8 +758,8 @@
|
|
|
760
758
|
.tpg-page {
|
|
761
759
|
display: grid;
|
|
762
760
|
place-items: center;
|
|
763
|
-
min-width:
|
|
764
|
-
height:
|
|
761
|
+
min-width: var(--wui-control-height-sm);
|
|
762
|
+
height: var(--wui-control-height-sm);
|
|
765
763
|
padding: 0 6px;
|
|
766
764
|
border: none;
|
|
767
765
|
background: transparent;
|
|
@@ -793,7 +791,7 @@
|
|
|
793
791
|
display: grid;
|
|
794
792
|
place-items: center;
|
|
795
793
|
min-width: 24px;
|
|
796
|
-
height:
|
|
794
|
+
height: var(--wui-control-height-sm);
|
|
797
795
|
color: var(--color-text-subtle);
|
|
798
796
|
font-size: 13px;
|
|
799
797
|
user-select: none;
|
|
@@ -1371,7 +1369,7 @@
|
|
|
1371
1369
|
outline-offset: var(--wui-focus-ring-offset);
|
|
1372
1370
|
}
|
|
1373
1371
|
.u-action:disabled {
|
|
1374
|
-
opacity:
|
|
1372
|
+
opacity: var(--wui-disabled-opacity);
|
|
1375
1373
|
cursor: not-allowed;
|
|
1376
1374
|
}
|
|
1377
1375
|
.u-action.danger {
|
|
@@ -1448,7 +1446,7 @@
|
|
|
1448
1446
|
}
|
|
1449
1447
|
.u-you {
|
|
1450
1448
|
padding: 1px 7px;
|
|
1451
|
-
font-size:
|
|
1449
|
+
font-size: 12px;
|
|
1452
1450
|
}
|
|
1453
1451
|
|
|
1454
1452
|
// Table extras — a sortable header and numeric cells. These sit AFTER the
|
|
@@ -1831,7 +1829,7 @@ wui-data-table {
|
|
|
1831
1829
|
background: var(--color-primary-soft);
|
|
1832
1830
|
}
|
|
1833
1831
|
[data-wui-drop-target][aria-disabled="true"] {
|
|
1834
|
-
opacity:
|
|
1832
|
+
opacity: var(--wui-disabled-opacity);
|
|
1835
1833
|
}
|
|
1836
1834
|
[data-wui-row-drag] tbody tr[draggable="true"] {
|
|
1837
1835
|
cursor: grab;
|
package/scss/wui/_display.scss
CHANGED
|
@@ -457,28 +457,24 @@ a.info-row:hover .info-value {
|
|
|
457
457
|
}
|
|
458
458
|
|
|
459
459
|
// ============================================================================
|
|
460
|
-
// Segmented control
|
|
461
|
-
// The
|
|
462
|
-
//
|
|
463
|
-
//
|
|
464
|
-
//
|
|
465
|
-
// dark 4.5:1); a stronger tint drops the dark label under 4.5:1.
|
|
460
|
+
// Segmented control: 2 to 4 mutually exclusive options shown side by side.
|
|
461
|
+
// The selected option is a raised thumb (--color-thumb with an edge and a soft shadow) on a muted
|
|
462
|
+
// track, never an outline. Each size takes its option height from the control ladder less the
|
|
463
|
+
// track's 3px padding and 1px border on each side, so the strip is exactly sm 32 / md 36 / lg 44px
|
|
464
|
+
// and lines up with the fields beside it. A note option grows past the height.
|
|
466
465
|
// ============================================================================
|
|
467
|
-
// Each size sets one option height, icon size and note size, so a text, icon or note option in
|
|
468
|
-
// the same control lines up, and the four sizes step evenly: 28 / 32 / 38 / 44px tall overall
|
|
469
|
-
// (the track adds 8px), xl matching the 44px field height. A note option grows past the height.
|
|
470
466
|
.segmented {
|
|
471
|
-
--segmented-selected-bg:
|
|
472
|
-
--segmented-option-h:
|
|
473
|
-
--segmented-icon:
|
|
474
|
-
--segmented-note:
|
|
467
|
+
--segmented-selected-bg: var(--color-thumb);
|
|
468
|
+
--segmented-option-h: calc(var(--wui-control-height) - 8px);
|
|
469
|
+
--segmented-icon: 14px;
|
|
470
|
+
--segmented-note: 12px;
|
|
475
471
|
position: relative;
|
|
476
472
|
display: inline-flex;
|
|
477
473
|
gap: 2px;
|
|
478
474
|
padding: 3px;
|
|
479
475
|
border: 1px solid var(--color-border);
|
|
480
476
|
border-radius: 999px;
|
|
481
|
-
background: var(--color-
|
|
477
|
+
background: var(--color-bg-muted);
|
|
482
478
|
}
|
|
483
479
|
.segmented-option {
|
|
484
480
|
position: relative;
|
|
@@ -494,11 +490,11 @@ a.info-row:hover .info-value {
|
|
|
494
490
|
border-radius: 999px;
|
|
495
491
|
background: transparent;
|
|
496
492
|
font-family: inherit;
|
|
497
|
-
font-size:
|
|
493
|
+
font-size: 13px;
|
|
498
494
|
font-weight: 600;
|
|
499
495
|
line-height: 1;
|
|
500
496
|
white-space: nowrap;
|
|
501
|
-
color: var(--color-text);
|
|
497
|
+
color: var(--color-text-muted);
|
|
502
498
|
cursor: pointer;
|
|
503
499
|
transition:
|
|
504
500
|
background 0.14s ease,
|
|
@@ -522,8 +518,9 @@ a.info-row:hover .info-value {
|
|
|
522
518
|
clip-path: inset(50%);
|
|
523
519
|
white-space: nowrap;
|
|
524
520
|
}
|
|
525
|
-
.segmented-option:hover {
|
|
526
|
-
color: var(--color-
|
|
521
|
+
.segmented-option:hover:not(:has(.segmented-input:checked, .segmented-input:disabled)) {
|
|
522
|
+
color: var(--color-text);
|
|
523
|
+
background: color-mix(in srgb, currentColor 6%, transparent);
|
|
527
524
|
}
|
|
528
525
|
// A per-option sub-label under the main text — optional, so a segment without one keeps the
|
|
529
526
|
// plain single-line layout above untouched.
|
|
@@ -543,16 +540,15 @@ a.info-row:hover .info-value {
|
|
|
543
540
|
font-weight: 400;
|
|
544
541
|
// Inherits the option's current text colour (plain, hover, or primary-on-checked) rather
|
|
545
542
|
// than a fixed token, so it always matches without a separate state per variant. No opacity
|
|
546
|
-
// muting — that dropped the sub-label below AA on an unchecked option;
|
|
543
|
+
// muting — that dropped the sub-label below AA on an unchecked option; its lighter weight already
|
|
547
544
|
// distinguishes it from the label.
|
|
548
545
|
color: currentColor;
|
|
549
546
|
}
|
|
550
|
-
// Without JS this per-option pill stands in for the sliding thumb below, so it carries the
|
|
551
|
-
// same ring and tint.
|
|
547
|
+
// Without JS this per-option pill stands in for the sliding thumb below, so it carries the same edge and shadow.
|
|
552
548
|
.segmented-option:has(.segmented-input:checked) {
|
|
553
549
|
background: var(--segmented-selected-bg);
|
|
554
|
-
box-shadow:
|
|
555
|
-
color: var(--color-
|
|
550
|
+
box-shadow: 0 0 0 1px var(--color-border), var(--wui-shadow-thumb);
|
|
551
|
+
color: var(--color-text);
|
|
556
552
|
}
|
|
557
553
|
// The ring is drawn on the label because the input it belongs to has no box.
|
|
558
554
|
.segmented-option:has(.segmented-input:focus-visible) {
|
|
@@ -571,8 +567,8 @@ a.info-row:hover .info-value {
|
|
|
571
567
|
z-index: 0;
|
|
572
568
|
border-radius: 999px;
|
|
573
569
|
background: var(--segmented-selected-bg);
|
|
574
|
-
//
|
|
575
|
-
box-shadow:
|
|
570
|
+
// A shadow, not a border: a border would add to the width JS measures and sets.
|
|
571
|
+
box-shadow: 0 0 0 1px var(--color-border), var(--wui-shadow-thumb);
|
|
576
572
|
opacity: 0;
|
|
577
573
|
pointer-events: none;
|
|
578
574
|
}
|
|
@@ -590,7 +586,7 @@ a.info-row:hover .info-value {
|
|
|
590
586
|
background: transparent;
|
|
591
587
|
box-shadow: none;
|
|
592
588
|
}
|
|
593
|
-
// A two-line note option keeps a little more air inside the
|
|
589
|
+
// A two-line note option keeps a little more air inside the pill than a one-line option needs.
|
|
594
590
|
.segmented-option:has(.segmented-option-note) {
|
|
595
591
|
padding-top: 6px;
|
|
596
592
|
padding-bottom: 6px;
|
|
@@ -600,8 +596,7 @@ a.info-row:hover .info-value {
|
|
|
600
596
|
width: var(--segmented-icon);
|
|
601
597
|
height: var(--segmented-icon);
|
|
602
598
|
}
|
|
603
|
-
// Borderless (bordered={false} / bordered="false")
|
|
604
|
-
// label but drops the ring, on both the sliding thumb and the no-JS per-option pill.
|
|
599
|
+
// Borderless (bordered={false} / bordered="false"): the selected thumb drops its edge and shadow and stays a flat pill, on both the sliding thumb and the no-JS per-option pill.
|
|
605
600
|
.wui-segmented-borderless .segmented-thumb,
|
|
606
601
|
.wui-segmented-borderless .segmented-option:has(.segmented-input:checked) {
|
|
607
602
|
box-shadow: none;
|
|
@@ -612,38 +607,26 @@ a.info-row:hover .info-value {
|
|
|
612
607
|
transition: transform 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);
|
|
613
608
|
}
|
|
614
609
|
.segmented-sm .segmented-thumb,
|
|
615
|
-
.segmented-lg .segmented-thumb
|
|
616
|
-
.wui-segmented-xl .segmented-thumb {
|
|
610
|
+
.segmented-lg .segmented-thumb {
|
|
617
611
|
top: 3px;
|
|
618
612
|
bottom: 3px;
|
|
619
613
|
}
|
|
620
614
|
.segmented-sm {
|
|
621
|
-
--segmented-option-h:
|
|
622
|
-
--segmented-icon:
|
|
615
|
+
--segmented-option-h: calc(var(--wui-control-height-sm) - 8px);
|
|
616
|
+
--segmented-icon: 13px;
|
|
623
617
|
}
|
|
624
618
|
.segmented-lg {
|
|
625
|
-
--segmented-option-h:
|
|
626
|
-
--segmented-icon:
|
|
627
|
-
--segmented-note: 11px;
|
|
628
|
-
}
|
|
629
|
-
.wui-segmented-xl {
|
|
630
|
-
--segmented-option-h: 36px;
|
|
631
|
-
--segmented-icon: 17px;
|
|
632
|
-
--segmented-note: 12px;
|
|
619
|
+
--segmented-option-h: calc(var(--wui-control-height-lg) - 8px);
|
|
620
|
+
--segmented-icon: 16px;
|
|
633
621
|
}
|
|
634
622
|
.segmented-sm .segmented-option {
|
|
635
|
-
padding: 4px
|
|
636
|
-
font-size:
|
|
623
|
+
padding: 4px 10px;
|
|
624
|
+
font-size: 12px;
|
|
637
625
|
}
|
|
638
626
|
.segmented-lg .segmented-option {
|
|
639
627
|
gap: 6px;
|
|
640
628
|
padding: 4px 16px;
|
|
641
|
-
font-size:
|
|
642
|
-
}
|
|
643
|
-
.wui-segmented-xl .segmented-option {
|
|
644
|
-
gap: 7px;
|
|
645
|
-
padding: 4px 20px;
|
|
646
|
-
font-size: 15px;
|
|
629
|
+
font-size: 14px;
|
|
647
630
|
}
|
|
648
631
|
// Full width — segments share the row equally (a toggle spanning a card or toolbar).
|
|
649
632
|
.segmented-full {
|
|
@@ -654,13 +637,14 @@ a.info-row:hover .info-value {
|
|
|
654
637
|
flex: 1;
|
|
655
638
|
justify-content: center;
|
|
656
639
|
}
|
|
657
|
-
// Disabled
|
|
640
|
+
// Disabled: the whole control, or a single option that stays visible but cannot be picked. An option
|
|
641
|
+
// inside a disabled control is not dimmed a second time.
|
|
658
642
|
.segmented.is-disabled {
|
|
659
|
-
opacity:
|
|
643
|
+
opacity: var(--wui-disabled-opacity);
|
|
660
644
|
pointer-events: none;
|
|
661
645
|
}
|
|
662
|
-
.segmented-option:has(.segmented-input:disabled) {
|
|
663
|
-
opacity:
|
|
646
|
+
.segmented:not(.is-disabled) .segmented-option:has(.segmented-input:disabled) {
|
|
647
|
+
opacity: var(--wui-disabled-opacity);
|
|
664
648
|
cursor: not-allowed;
|
|
665
649
|
}
|
|
666
650
|
@media (prefers-reduced-motion: reduce) {
|
|
@@ -1219,7 +1203,7 @@ a.info-row:hover .info-value {
|
|
|
1219
1203
|
padding-bottom: 0;
|
|
1220
1204
|
}
|
|
1221
1205
|
.wui-timeline--steps.wui-timeline--sm .wui-timeline-eyebrow {
|
|
1222
|
-
font-size:
|
|
1206
|
+
font-size: 12px;
|
|
1223
1207
|
}
|
|
1224
1208
|
.wui-timeline--steps.wui-timeline--lg .wui-timeline-eyebrow {
|
|
1225
1209
|
font-size: 13px;
|
|
@@ -1510,7 +1494,7 @@ a.info-row:hover .info-value {
|
|
|
1510
1494
|
.wui-link.is-disabled {
|
|
1511
1495
|
color: var(--color-text-muted);
|
|
1512
1496
|
cursor: not-allowed;
|
|
1513
|
-
opacity:
|
|
1497
|
+
opacity: var(--wui-disabled-opacity);
|
|
1514
1498
|
pointer-events: none;
|
|
1515
1499
|
}
|
|
1516
1500
|
.wui-link__label {
|
package/scss/wui/_flow.scss
CHANGED
|
@@ -822,7 +822,7 @@ button.wui-step-tile-body:hover .step-label {
|
|
|
822
822
|
--wui-step-size: 22px;
|
|
823
823
|
--wui-step-badge-size: 44px;
|
|
824
824
|
--wui-step-journey-size: 32px;
|
|
825
|
-
--wui-step-number-font:
|
|
825
|
+
--wui-step-number-font: 12px;
|
|
826
826
|
--wui-step-label-font: 12px;
|
|
827
827
|
}
|
|
828
828
|
.wui-step-size-sm .stepper-journey,
|
|
@@ -918,7 +918,7 @@ button.wui-step-tile-body:hover .step-label {
|
|
|
918
918
|
border-radius: 999px;
|
|
919
919
|
background: var(--color-primary);
|
|
920
920
|
color: var(--color-primary-text);
|
|
921
|
-
font-size:
|
|
921
|
+
font-size: 12px;
|
|
922
922
|
font-weight: 600;
|
|
923
923
|
text-transform: uppercase;
|
|
924
924
|
letter-spacing: 0.04em;
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
// ---- Default ring -----------------------------------------------------------
|
|
12
12
|
// Anything focusable that no partial styles gets the shared ring instead of the browser's.
|
|
13
13
|
// Zero specificity, so every component rule (including a panel's deliberate `outline: none`)
|
|
14
|
-
// still wins. Text fields are
|
|
14
|
+
// still wins. Text fields are not in this list; the Text fields block below rings them.
|
|
15
15
|
:where(
|
|
16
16
|
a[href],
|
|
17
17
|
area[href],
|
|
@@ -50,6 +50,13 @@
|
|
|
50
50
|
outline: var(--wui-focus-ring-width) solid var(--color-focus-ring);
|
|
51
51
|
outline-offset: var(--wui-focus-ring-offset);
|
|
52
52
|
}
|
|
53
|
+
// Bootstrap paints a focused button in its hover colours, so an outline or unselected button
|
|
54
|
+
// fills solid and reads as selected. Focus keeps the resting look; the ring marks it.
|
|
55
|
+
.btn:focus-visible:not(:hover, :active, .active, .show, [aria-pressed="true"]) {
|
|
56
|
+
color: var(--bs-btn-color);
|
|
57
|
+
background-color: var(--bs-btn-bg);
|
|
58
|
+
border-color: var(--bs-btn-border-color);
|
|
59
|
+
}
|
|
53
60
|
|
|
54
61
|
// Bootstrap rings the close button on any :focus, a mouse click included.
|
|
55
62
|
.btn-close {
|
|
@@ -75,6 +82,32 @@
|
|
|
75
82
|
outline-offset: var(--wui-focus-ring-inset);
|
|
76
83
|
}
|
|
77
84
|
|
|
85
|
+
// ---- Text fields --------------------------------------------------------------
|
|
86
|
+
// A text field keeps its soft focus border and also draws the shared ring. Browsers match
|
|
87
|
+
// :focus-visible on a text field after a pointer click too, so the ring shows whenever the caret is
|
|
88
|
+
// in the field. A field drawn inside a shell (phone, unit, stepper, input group, one-time code) rings
|
|
89
|
+
// the shell and the bare input inside it draws nothing; so does the borderless .input-bare, which
|
|
90
|
+
// sits inside another control's chrome.
|
|
91
|
+
:is(.form-control, .form-select, .input, .select, .textarea):not(.input-bare):focus-visible {
|
|
92
|
+
outline: var(--wui-focus-ring-width) solid var(--color-focus-ring);
|
|
93
|
+
outline-offset: var(--wui-focus-ring-offset);
|
|
94
|
+
}
|
|
95
|
+
.app-phone-number-input .phone-input-wrap:has(> .input:focus-visible),
|
|
96
|
+
.input-with-unit:has(.num-input:focus-visible),
|
|
97
|
+
.num-wrap:has(.num-input:focus-visible),
|
|
98
|
+
.wui-input-group:has(> :is(.form-control, .input):focus-visible),
|
|
99
|
+
.otp:has(.otp-field:focus-visible) .otp-slot.active {
|
|
100
|
+
outline: var(--wui-focus-ring-width) solid var(--color-focus-ring);
|
|
101
|
+
outline-offset: var(--wui-focus-ring-offset);
|
|
102
|
+
}
|
|
103
|
+
// After the ring rule: these tie with it on specificity, so source order decides.
|
|
104
|
+
.app-phone-number-input .phone-input-wrap > .input:focus-visible,
|
|
105
|
+
.input-with-unit .num-input:focus-visible,
|
|
106
|
+
.num-wrap .num-input:focus-visible,
|
|
107
|
+
.wui-input-group > :is(.form-control, .input):focus-visible {
|
|
108
|
+
outline: none;
|
|
109
|
+
}
|
|
110
|
+
|
|
78
111
|
// ---- Not obscured (WCAG 2.4.11) ---------------------------------------------
|
|
79
112
|
// A control focused by Tab scrolls clear of the sticky shell topbar (72px) and a sticky form
|
|
80
113
|
// footer (AppFormActions sticky, about 78px), not under them.
|
|
@@ -224,6 +257,25 @@ html:has(.form-actions-sticky) {
|
|
|
224
257
|
}
|
|
225
258
|
}
|
|
226
259
|
|
|
260
|
+
// Small inline controls answer clicks across at least 24px (the WCAG target-size floor) while the
|
|
261
|
+
// ink stays its size. Touch pointers widen the country toggle further, below.
|
|
262
|
+
.infotip-btn,
|
|
263
|
+
.chip-remove,
|
|
264
|
+
.country-toggle {
|
|
265
|
+
position: relative;
|
|
266
|
+
}
|
|
267
|
+
.infotip-btn::before,
|
|
268
|
+
.chip-remove::before,
|
|
269
|
+
.country-toggle::before {
|
|
270
|
+
content: "";
|
|
271
|
+
position: absolute;
|
|
272
|
+
top: 50%;
|
|
273
|
+
left: 50%;
|
|
274
|
+
transform: translate(-50%, -50%);
|
|
275
|
+
width: max(100%, 24px);
|
|
276
|
+
height: max(100%, 24px);
|
|
277
|
+
}
|
|
278
|
+
|
|
227
279
|
// Phone touch targets
|
|
228
280
|
// Below sm the pointer is a finger: every small control the library draws reaches 44px.
|
|
229
281
|
@media (max-width: 575.98px) {
|
|
@@ -247,7 +299,8 @@ html:has(.form-actions-sticky) {
|
|
|
247
299
|
|
|
248
300
|
// Touch pointers at any width: the same 44px floor for controls the phone block does not reach.
|
|
249
301
|
@media (pointer: coarse) {
|
|
250
|
-
.app-tab
|
|
302
|
+
.app-tab,
|
|
303
|
+
.app-tabs-sm .app-tab {
|
|
251
304
|
min-height: 44px;
|
|
252
305
|
}
|
|
253
306
|
.app-tabs-scroll-btn {
|
package/scss/wui/_lightbox.scss
CHANGED
package/scss/wui/_media.scss
CHANGED
|
@@ -36,7 +36,9 @@
|
|
|
36
36
|
border-radius: 999px;
|
|
37
37
|
background: color-mix(in srgb, var(--color-primary) 15%, var(--color-surface));
|
|
38
38
|
color: var(--color-primary-ink);
|
|
39
|
-
|
|
39
|
+
// Initials take 37.5% of the disc but never go under the 12px text floor; a disc under 24px
|
|
40
|
+
// takes half its size instead, the most two letters fit (the 20px preset sets 10px).
|
|
41
|
+
font-size: max(min(12px, calc(var(--avatar-size, 32px) * 0.5)), calc(var(--avatar-size, 32px) * 0.375));
|
|
40
42
|
font-weight: 600;
|
|
41
43
|
display: inline-flex;
|
|
42
44
|
align-items: center;
|
|
@@ -49,12 +51,12 @@
|
|
|
49
51
|
.avatar-xs {
|
|
50
52
|
width: 20px;
|
|
51
53
|
height: 20px;
|
|
52
|
-
font-size:
|
|
54
|
+
font-size: 10px;
|
|
53
55
|
}
|
|
54
56
|
.avatar-sm {
|
|
55
57
|
width: 24px;
|
|
56
58
|
height: 24px;
|
|
57
|
-
font-size:
|
|
59
|
+
font-size: 12px;
|
|
58
60
|
}
|
|
59
61
|
.avatar-lg {
|
|
60
62
|
width: 48px;
|
|
@@ -130,7 +132,7 @@
|
|
|
130
132
|
// The pairing .wui-bell-count uses (_shell-parts.scss): it clears contrast in light and dark.
|
|
131
133
|
background: var(--color-danger-strong);
|
|
132
134
|
color: var(--color-progress-label);
|
|
133
|
-
font-size:
|
|
135
|
+
font-size: 12px;
|
|
134
136
|
font-weight: 700;
|
|
135
137
|
line-height: 1;
|
|
136
138
|
box-shadow: 0 0 0 2px var(--color-surface);
|
|
@@ -883,7 +885,7 @@
|
|
|
883
885
|
}
|
|
884
886
|
// A disabled drop zone (AppDropZone `disabled`): dimmed, no pointer affordance, and no hover lift.
|
|
885
887
|
.file-input[aria-disabled="true"] {
|
|
886
|
-
opacity:
|
|
888
|
+
opacity: var(--wui-disabled-opacity);
|
|
887
889
|
cursor: not-allowed;
|
|
888
890
|
}
|
|
889
891
|
.file-input[aria-disabled="true"] > .file-input-zone-label {
|
|
@@ -973,14 +975,13 @@
|
|
|
973
975
|
flex-direction: column;
|
|
974
976
|
align-items: center;
|
|
975
977
|
justify-content: center;
|
|
976
|
-
//
|
|
977
|
-
//
|
|
978
|
-
// overlaps the initials. Clamped so md/lg land on the same 11px / 4px gap as before.
|
|
978
|
+
// The gap scales with the ring so a small (sm, 72px) ring's overlay stays uncramped. The label
|
|
979
|
+
// stays at the 12px floor; a small ring wraps it to two lines.
|
|
979
980
|
gap: clamp(2px, calc(var(--wui-logo-size) * 0.035), 4px);
|
|
980
981
|
padding: 0 6%;
|
|
981
982
|
background: var(--color-scrim-strong);
|
|
982
983
|
color: var(--color-on-scrim);
|
|
983
|
-
font-size:
|
|
984
|
+
font-size: 12px;
|
|
984
985
|
line-height: 1.15;
|
|
985
986
|
text-align: center;
|
|
986
987
|
font-weight: 600;
|
|
@@ -1143,7 +1144,7 @@
|
|
|
1143
1144
|
// A plain disabled (not busy) picker: dim it and drop the pointer affordance.
|
|
1144
1145
|
.set-uploader:disabled:not([aria-busy="true"]) {
|
|
1145
1146
|
cursor: not-allowed;
|
|
1146
|
-
opacity:
|
|
1147
|
+
opacity: var(--wui-disabled-opacity);
|
|
1147
1148
|
}
|
|
1148
1149
|
.set-uploader:disabled:not([aria-busy="true"]) .set-uploader-ring {
|
|
1149
1150
|
border-style: solid;
|
|
@@ -192,7 +192,8 @@
|
|
|
192
192
|
display: inline-flex;
|
|
193
193
|
align-items: center;
|
|
194
194
|
gap: 8px;
|
|
195
|
-
|
|
195
|
+
min-height: var(--wui-control-height);
|
|
196
|
+
padding: 0 14px;
|
|
196
197
|
border: 0;
|
|
197
198
|
// Sits on the strip's own hairline rather than adding a second one.
|
|
198
199
|
border-bottom: 2px solid transparent;
|
|
@@ -270,7 +271,7 @@
|
|
|
270
271
|
.app-tab:disabled,
|
|
271
272
|
.app-tab.disabled,
|
|
272
273
|
.app-tab[aria-disabled="true"] {
|
|
273
|
-
|
|
274
|
+
opacity: var(--wui-disabled-opacity);
|
|
274
275
|
cursor: not-allowed;
|
|
275
276
|
}
|
|
276
277
|
// A disabled link tab already has no href; also stop it swallowing clicks (a <button:disabled>
|
|
@@ -375,7 +376,8 @@
|
|
|
375
376
|
|
|
376
377
|
// ── Sizes ──
|
|
377
378
|
.app-tabs-sm .app-tab {
|
|
378
|
-
|
|
379
|
+
min-height: var(--wui-control-height-sm);
|
|
380
|
+
padding: 0 10px;
|
|
379
381
|
gap: 6px;
|
|
380
382
|
font-size: 13px;
|
|
381
383
|
}
|
|
@@ -384,7 +386,8 @@
|
|
|
384
386
|
height: 16px;
|
|
385
387
|
}
|
|
386
388
|
.app-tabs-lg .app-tab {
|
|
387
|
-
|
|
389
|
+
min-height: var(--wui-control-height-lg);
|
|
390
|
+
padding: 0 18px;
|
|
388
391
|
font-size: 15px;
|
|
389
392
|
}
|
|
390
393
|
.app-tabs-lg .app-tab-img {
|
|
@@ -791,7 +794,7 @@
|
|
|
791
794
|
}
|
|
792
795
|
.search-input:disabled {
|
|
793
796
|
cursor: not-allowed;
|
|
794
|
-
opacity:
|
|
797
|
+
opacity: var(--wui-disabled-opacity);
|
|
795
798
|
}
|
|
796
799
|
|
|
797
800
|
// Breadcrumbs — Bootstrap's .breadcrumb with brand tokens (AppBreadcrumbs / <app-breadcrumbs>).
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
border-radius: 999px;
|
|
27
27
|
background: var(--color-danger-strong);
|
|
28
28
|
color: var(--color-progress-label);
|
|
29
|
-
font-size:
|
|
29
|
+
font-size: 12px;
|
|
30
30
|
font-weight: 700;
|
|
31
31
|
line-height: 14px;
|
|
32
32
|
text-align: center;
|
|
@@ -110,7 +110,7 @@
|
|
|
110
110
|
text-decoration: underline;
|
|
111
111
|
}
|
|
112
112
|
.wui-notification-center-markall:disabled {
|
|
113
|
-
opacity:
|
|
113
|
+
opacity: var(--wui-disabled-opacity);
|
|
114
114
|
cursor: default;
|
|
115
115
|
text-decoration: none;
|
|
116
116
|
}
|
package/scss/wui/_overlays.scss
CHANGED
|
@@ -165,7 +165,7 @@
|
|
|
165
165
|
// Break long unbroken names so they wrap within the heading instead of
|
|
166
166
|
// running under the close button.
|
|
167
167
|
.wui-modal-title {
|
|
168
|
-
font-size:
|
|
168
|
+
font-size: 17px;
|
|
169
169
|
font-weight: 600;
|
|
170
170
|
color: var(--color-text);
|
|
171
171
|
overflow-wrap: anywhere;
|
|
@@ -179,7 +179,7 @@
|
|
|
179
179
|
}
|
|
180
180
|
// Eyebrow — a small kicker label above the title (a section / step / category marker).
|
|
181
181
|
.wui-modal-eyebrow {
|
|
182
|
-
font-size:
|
|
182
|
+
font-size: 12px;
|
|
183
183
|
font-weight: 700;
|
|
184
184
|
letter-spacing: 0.06em;
|
|
185
185
|
text-transform: uppercase;
|
package/scss/wui/_rating.scss
CHANGED
package/scss/wui/_rich-text.scss
CHANGED
|
@@ -90,7 +90,7 @@
|
|
|
90
90
|
display: -webkit-box;
|
|
91
91
|
-webkit-box-orient: vertical;
|
|
92
92
|
-webkit-line-clamp: 2;
|
|
93
|
-
font-size: 0.
|
|
93
|
+
font-size: 0.75rem;
|
|
94
94
|
line-height: 1.15;
|
|
95
95
|
overflow-wrap: anywhere;
|
|
96
96
|
text-overflow: clip;
|
|
@@ -109,7 +109,7 @@
|
|
|
109
109
|
border-radius: 999px;
|
|
110
110
|
background: var(--color-bg-muted);
|
|
111
111
|
color: var(--color-text-muted);
|
|
112
|
-
font-size:
|
|
112
|
+
font-size: 12px;
|
|
113
113
|
font-weight: 700;
|
|
114
114
|
line-height: 18px;
|
|
115
115
|
text-align: center;
|
|
@@ -254,7 +254,7 @@
|
|
|
254
254
|
border-radius: 999px;
|
|
255
255
|
background: var(--color-danger-strong);
|
|
256
256
|
color: var(--color-progress-label);
|
|
257
|
-
font-size:
|
|
257
|
+
font-size: 12px;
|
|
258
258
|
font-weight: 700;
|
|
259
259
|
line-height: 14px;
|
|
260
260
|
text-align: center;
|
|
@@ -296,7 +296,7 @@
|
|
|
296
296
|
text-decoration: underline;
|
|
297
297
|
}
|
|
298
298
|
.wui-bell-markall:disabled {
|
|
299
|
-
opacity:
|
|
299
|
+
opacity: var(--wui-disabled-opacity);
|
|
300
300
|
cursor: default;
|
|
301
301
|
}
|
|
302
302
|
.wui-bell-list {
|
package/scss/wui/_shell.scss
CHANGED
|
@@ -380,7 +380,7 @@
|
|
|
380
380
|
display: flex;
|
|
381
381
|
align-items: center;
|
|
382
382
|
gap: 12px;
|
|
383
|
-
//
|
|
383
|
+
// It is the same control height buttons
|
|
384
384
|
// and inputs use — the nav reads as part of the same system.
|
|
385
385
|
min-height: var(--wui-control-height);
|
|
386
386
|
padding: 9px 14px;
|
|
@@ -434,7 +434,7 @@
|
|
|
434
434
|
padding: 1px 7px;
|
|
435
435
|
border-radius: 999px;
|
|
436
436
|
background: var(--color-bg-muted);
|
|
437
|
-
font-size:
|
|
437
|
+
font-size: 12px;
|
|
438
438
|
font-weight: 500;
|
|
439
439
|
color: var(--color-text-subtle);
|
|
440
440
|
}
|