@webority/theme 0.81.0 → 0.82.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.
@@ -13,9 +13,9 @@
13
13
  color: var(--color-text-subtle);
14
14
  }
15
15
  .empty-state-title {
16
- // Matches .tbl-empty-title; brand-signal sets both title faces together. A table's header hides
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: 18px;
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: 18px;
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
- .table-ledger tbody tr:hover {
352
- --bs-table-bg-state: var(--color-bg-subtle);
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: 32px;
708
- min-height: 32px;
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: 32px;
734
- height: 32px;
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: 32px;
764
- height: 32px;
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: 32px;
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: 0.4;
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: 10.5px;
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: .6;
1832
+ opacity: var(--wui-disabled-opacity);
1835
1833
  }
1836
1834
  [data-wui-row-drag] tbody tr[draggable="true"] {
1837
1835
  cursor: grab;
@@ -457,28 +457,24 @@ a.info-row:hover .info-value {
457
457
  }
458
458
 
459
459
  // ============================================================================
460
- // Segmented control — 2–4 mutually-exclusive options shown side by side.
461
- // The theme toggle (light/dark/system) is the canonical use.
462
- //
463
- // The selected segment is an OUTLINED pill: a primary ring over a faint primary tint, with the
464
- // label in primary. The tint is 8% so the label clears AA on it in both themes (light 5.6:1,
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: color-mix(in srgb, var(--color-primary) 8%, var(--color-surface));
472
- --segmented-option-h: 24px;
473
- --segmented-icon: 13px;
474
- --segmented-note: 10px;
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-surface);
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: 11.5px;
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-primary-ink);
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; the 10px size already
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: inset 0 0 0 2px var(--color-primary);
555
- color: var(--color-primary-ink);
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
- // An inset ring, not a border: a border would add to the width JS measures and sets.
575
- box-shadow: inset 0 0 0 2px var(--color-primary);
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 ring than a one-line option needs.
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") — the selected pill keeps its tint and primary
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: 20px;
622
- --segmented-icon: 12px;
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: 30px;
626
- --segmented-icon: 15px;
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 9px;
636
- font-size: 11px;
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: 13px;
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 — the whole control, or a single option that stays visible but unpickable.
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: 0.55;
643
+ opacity: var(--wui-disabled-opacity);
660
644
  pointer-events: none;
661
645
  }
662
- .segmented-option:has(.segmented-input:disabled) {
663
- opacity: 0.45;
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: 11px;
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: 0.65;
1497
+ opacity: var(--wui-disabled-opacity);
1514
1498
  pointer-events: none;
1515
1499
  }
1516
1500
  .wui-link__label {
@@ -244,7 +244,7 @@ wui-file-viewer:fullscreen {
244
244
  .wui-file-viewer-thumb-no {
245
245
  display: block;
246
246
  padding: 3px 0 1px;
247
- font-size: 11px;
247
+ font-size: 12px;
248
248
  line-height: 1.2;
249
249
  color: var(--color-text-subtle);
250
250
  text-align: center;
@@ -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: 11px;
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: 11px;
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 left out: their focus cue is their own soft border.
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],
@@ -75,6 +75,32 @@
75
75
  outline-offset: var(--wui-focus-ring-inset);
76
76
  }
77
77
 
78
+ // ---- Text fields --------------------------------------------------------------
79
+ // A text field keeps its soft focus border and also draws the shared ring. Browsers match
80
+ // :focus-visible on a text field after a pointer click too, so the ring shows whenever the caret is
81
+ // in the field. A field drawn inside a shell (phone, unit, stepper, input group, one-time code) rings
82
+ // the shell and the bare input inside it draws nothing; so does the borderless .input-bare, which
83
+ // sits inside another control's chrome.
84
+ :is(.form-control, .form-select, .input, .select, .textarea):not(.input-bare):focus-visible {
85
+ outline: var(--wui-focus-ring-width) solid var(--color-focus-ring);
86
+ outline-offset: var(--wui-focus-ring-offset);
87
+ }
88
+ .app-phone-number-input .phone-input-wrap:has(> .input:focus-visible),
89
+ .input-with-unit:has(.num-input:focus-visible),
90
+ .num-wrap:has(.num-input:focus-visible),
91
+ .wui-input-group:has(> :is(.form-control, .input):focus-visible),
92
+ .otp:has(.otp-field:focus-visible) .otp-slot.active {
93
+ outline: var(--wui-focus-ring-width) solid var(--color-focus-ring);
94
+ outline-offset: var(--wui-focus-ring-offset);
95
+ }
96
+ // After the ring rule: these tie with it on specificity, so source order decides.
97
+ .app-phone-number-input .phone-input-wrap > .input:focus-visible,
98
+ .input-with-unit .num-input:focus-visible,
99
+ .num-wrap .num-input:focus-visible,
100
+ .wui-input-group > :is(.form-control, .input):focus-visible {
101
+ outline: none;
102
+ }
103
+
78
104
  // ---- Not obscured (WCAG 2.4.11) ---------------------------------------------
79
105
  // A control focused by Tab scrolls clear of the sticky shell topbar (72px) and a sticky form
80
106
  // footer (AppFormActions sticky, about 78px), not under them.
@@ -247,7 +273,8 @@ html:has(.form-actions-sticky) {
247
273
 
248
274
  // Touch pointers at any width: the same 44px floor for controls the phone block does not reach.
249
275
  @media (pointer: coarse) {
250
- .app-tab {
276
+ .app-tab,
277
+ .app-tabs-sm .app-tab {
251
278
  min-height: 44px;
252
279
  }
253
280
  .app-tabs-scroll-btn {
@@ -95,7 +95,7 @@
95
95
  outline-offset: var(--wui-focus-ring-offset);
96
96
  }
97
97
  &:disabled {
98
- opacity: 0.4;
98
+ opacity: var(--wui-disabled-opacity);
99
99
  }
100
100
  }
101
101
 
@@ -49,12 +49,12 @@
49
49
  .avatar-xs {
50
50
  width: 20px;
51
51
  height: 20px;
52
- font-size: 8px;
52
+ font-size: 10px;
53
53
  }
54
54
  .avatar-sm {
55
55
  width: 24px;
56
56
  height: 24px;
57
- font-size: 10px;
57
+ font-size: 12px;
58
58
  }
59
59
  .avatar-lg {
60
60
  width: 48px;
@@ -130,7 +130,7 @@
130
130
  // The pairing .wui-bell-count uses (_shell-parts.scss): it clears contrast in light and dark.
131
131
  background: var(--color-danger-strong);
132
132
  color: var(--color-progress-label);
133
- font-size: 10px;
133
+ font-size: 12px;
134
134
  font-weight: 700;
135
135
  line-height: 1;
136
136
  box-shadow: 0 0 0 2px var(--color-surface);
@@ -883,7 +883,7 @@
883
883
  }
884
884
  // A disabled drop zone (AppDropZone `disabled`): dimmed, no pointer affordance, and no hover lift.
885
885
  .file-input[aria-disabled="true"] {
886
- opacity: 0.6;
886
+ opacity: var(--wui-disabled-opacity);
887
887
  cursor: not-allowed;
888
888
  }
889
889
  .file-input[aria-disabled="true"] > .file-input-zone-label {
@@ -973,14 +973,13 @@
973
973
  flex-direction: column;
974
974
  align-items: center;
975
975
  justify-content: center;
976
- // Label + gap scale with the ring so a small (sm, 72px) ring's overlay stays legible and
977
- // uncramped instead of wrapping a fixed 11px "Update photo" into a tight disc where it
978
- // overlaps the initials. Clamped so md/lg land on the same 11px / 4px gap as before.
976
+ // The gap scales with the ring so a small (sm, 72px) ring's overlay stays uncramped. The label
977
+ // stays at the 12px floor; a small ring wraps it to two lines.
979
978
  gap: clamp(2px, calc(var(--wui-logo-size) * 0.035), 4px);
980
979
  padding: 0 6%;
981
980
  background: var(--color-scrim-strong);
982
981
  color: var(--color-on-scrim);
983
- font-size: clamp(9px, calc(var(--wui-logo-size) * 0.1), 11px);
982
+ font-size: 12px;
984
983
  line-height: 1.15;
985
984
  text-align: center;
986
985
  font-weight: 600;
@@ -1143,7 +1142,7 @@
1143
1142
  // A plain disabled (not busy) picker: dim it and drop the pointer affordance.
1144
1143
  .set-uploader:disabled:not([aria-busy="true"]) {
1145
1144
  cursor: not-allowed;
1146
- opacity: 0.55;
1145
+ opacity: var(--wui-disabled-opacity);
1147
1146
  }
1148
1147
  .set-uploader:disabled:not([aria-busy="true"]) .set-uploader-ring {
1149
1148
  border-style: solid;
@@ -192,7 +192,8 @@
192
192
  display: inline-flex;
193
193
  align-items: center;
194
194
  gap: 8px;
195
- padding: 10px 14px;
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
- color: var(--color-text-subtle);
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
- padding: 6px 10px;
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
- padding: 14px 18px;
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: 0.6;
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: 11px;
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: 0.6;
113
+ opacity: var(--wui-disabled-opacity);
114
114
  cursor: default;
115
115
  text-decoration: none;
116
116
  }
@@ -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: 20px;
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: 11px;
182
+ font-size: 12px;
183
183
  font-weight: 700;
184
184
  letter-spacing: 0.06em;
185
185
  text-transform: uppercase;
@@ -71,7 +71,7 @@
71
71
  width: 100%;
72
72
  }
73
73
  .wui-rating-input[disabled] {
74
- opacity: 0.55;
74
+ opacity: var(--wui-disabled-opacity);
75
75
  }
76
76
  .wui-rating-input[disabled] .wui-rating-star {
77
77
  cursor: not-allowed;
@@ -111,7 +111,7 @@ wui-rich-text[readonly] .wui-rich-text-shell {
111
111
  }
112
112
  .wui-rich-text-button:disabled {
113
113
  color: var(--color-text-subtle);
114
- opacity: 0.5;
114
+ opacity: var(--wui-disabled-opacity);
115
115
  cursor: not-allowed;
116
116
  }
117
117
  .wui-rich-text-glyph {
@@ -42,7 +42,7 @@
42
42
  outline-offset: var(--wui-focus-ring-offset);
43
43
  }
44
44
  .wui-score-scale__item:has(input:disabled) {
45
- opacity: 0.55;
45
+ opacity: var(--wui-disabled-opacity);
46
46
  cursor: not-allowed;
47
47
  }
48
48
  .wui-score-scale__ends {
@@ -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.6875rem;
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: 11px;
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: 11px;
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: 0.6;
299
+ opacity: var(--wui-disabled-opacity);
300
300
  cursor: default;
301
301
  }
302
302
  .wui-bell-list {
@@ -380,7 +380,7 @@
380
380
  display: flex;
381
381
  align-items: center;
382
382
  gap: 12px;
383
- // 44px is the touch-target floor, and it is the same control height buttons
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: 11px;
437
+ font-size: 12px;
438
438
  font-weight: 500;
439
439
  color: var(--color-text-subtle);
440
440
  }
@@ -18,7 +18,7 @@
18
18
  background: var(--color-bg-muted);
19
19
  color: var(--color-text);
20
20
  font-family: inherit;
21
- font-size: 11px;
21
+ font-size: 12px;
22
22
  font-weight: 600;
23
23
  line-height: 1;
24
24
  white-space: nowrap;
@@ -74,7 +74,7 @@ wui-sortable[disabled] .wui-sortable-item,
74
74
  }
75
75
  .wui-sortable-handle:disabled {
76
76
  cursor: not-allowed;
77
- opacity: 0.45;
77
+ opacity: var(--wui-disabled-opacity);
78
78
  background: transparent;
79
79
  color: var(--color-text-subtle);
80
80
  }
@@ -222,7 +222,7 @@
222
222
  border-radius: 999px;
223
223
  background: var(--color-primary-soft);
224
224
  color: var(--color-primary-ink);
225
- font-size: 11px;
225
+ font-size: 12px;
226
226
  font-weight: 600;
227
227
  line-height: 18px;
228
228
  text-align: center;