@webority/theme 0.78.0 → 0.79.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.
- package/dist/purge-safelist.json +5 -0
- 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 +1 -0
- package/scss/_components.scss +2 -1
- package/scss/wui/_calendar.scss +6 -1
- package/scss/wui/_chat.scss +10 -2
- package/scss/wui/_choice.scss +18 -0
- package/scss/wui/_consent-banner.scss +49 -1
- package/scss/wui/_controls.scss +74 -0
- package/scss/wui/_data.scss +3 -2
- package/scss/wui/_filter-popover.scss +5 -0
- package/scss/wui/_flow.scss +53 -0
- package/scss/wui/_interaction.scss +26 -0
- package/scss/wui/_media.scss +10 -3
- package/scss/wui/_navigation.scss +3 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webority/theme",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.79.0",
|
|
4
4
|
"description": "Webority shared design system — Bootstrap 5.3 SCSS overrides, --wui-* tokens, and shared component CSS. The single source of brand chrome for React portals and Razor sites.",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE",
|
|
6
6
|
"publishConfig": {
|
package/scss/_brand-signal.scss
CHANGED
package/scss/_components.scss
CHANGED
|
@@ -847,7 +847,8 @@
|
|
|
847
847
|
padding: 0;
|
|
848
848
|
border: 0;
|
|
849
849
|
border-radius: var(--radius);
|
|
850
|
-
|
|
850
|
+
// The same resting grey as the modal and drawer close buttons.
|
|
851
|
+
background: var(--color-bg-subtle);
|
|
851
852
|
color: var(--color-text-muted);
|
|
852
853
|
cursor: pointer;
|
|
853
854
|
transition:
|
package/scss/wui/_calendar.scss
CHANGED
|
@@ -156,10 +156,15 @@ wui-calendar .fc .fc-day-other .fc-daygrid-day-number {
|
|
|
156
156
|
height: 44px;
|
|
157
157
|
}
|
|
158
158
|
.wui-calendar-view-btn {
|
|
159
|
-
min-height:
|
|
159
|
+
min-height: 44px;
|
|
160
160
|
padding: 0 10px;
|
|
161
161
|
}
|
|
162
162
|
}
|
|
163
|
+
@media (pointer: coarse) {
|
|
164
|
+
.wui-calendar-view-btn {
|
|
165
|
+
min-height: 44px;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
163
168
|
|
|
164
169
|
.wui-calendar-status {
|
|
165
170
|
display: flex;
|
package/scss/wui/_chat.scss
CHANGED
|
@@ -75,8 +75,16 @@ wui-chat[position="start"] .wui-chat-panel {
|
|
|
75
75
|
overflow-wrap: anywhere;
|
|
76
76
|
}
|
|
77
77
|
|
|
78
|
-
// The question box
|
|
79
|
-
.
|
|
78
|
+
// The question box starts one line tall, as tall as Send beside it, and grows with its text
|
|
79
|
+
// up to a few lines. It overrides the textarea's 120px minimum and uneven padding.
|
|
80
|
+
.wui-chat-composer .form-control {
|
|
81
|
+
min-height: var(--wui-control-height);
|
|
80
82
|
max-height: 9rem;
|
|
83
|
+
padding-block: 10px;
|
|
81
84
|
resize: none;
|
|
82
85
|
}
|
|
86
|
+
// A form reserves a line under each field for its error; the question box has none, and the
|
|
87
|
+
// empty line pushed Send below the box.
|
|
88
|
+
.wui-chat-composer .wui-field-message:empty {
|
|
89
|
+
display: none;
|
|
90
|
+
}
|
package/scss/wui/_choice.scss
CHANGED
|
@@ -35,6 +35,20 @@
|
|
|
35
35
|
.struct-card.checked .struct-card-title {
|
|
36
36
|
color: var(--color-primary-ink);
|
|
37
37
|
}
|
|
38
|
+
|
|
39
|
+
// A card that cannot change: its input is disabled directly or by a disabled fieldset.
|
|
40
|
+
.struct-card:has(.struct-card-input:disabled) {
|
|
41
|
+
cursor: default;
|
|
42
|
+
}
|
|
43
|
+
.struct-card:has(.struct-card-input:disabled):hover {
|
|
44
|
+
border-color: var(--color-border);
|
|
45
|
+
}
|
|
46
|
+
.struct-card.checked:has(.struct-card-input:disabled):hover {
|
|
47
|
+
border-color: color-mix(in srgb, var(--color-primary) 30%, transparent);
|
|
48
|
+
}
|
|
49
|
+
.struct-card:has(.struct-card-input:disabled):active {
|
|
50
|
+
background-image: none !important;
|
|
51
|
+
}
|
|
38
52
|
.struct-card-input {
|
|
39
53
|
position: absolute;
|
|
40
54
|
opacity: 0;
|
|
@@ -58,6 +72,10 @@
|
|
|
58
72
|
background: var(--color-surface);
|
|
59
73
|
color: var(--color-primary-ink);
|
|
60
74
|
}
|
|
75
|
+
// Hover previews the chosen glyph colour; a card that cannot change keeps its grey.
|
|
76
|
+
.struct-card:hover:not(:has(.struct-card-input:disabled)) .struct-card-ic {
|
|
77
|
+
color: var(--color-primary-ink);
|
|
78
|
+
}
|
|
61
79
|
// An image in the round icon disc (React iconNode={<img …/>}) keeps its own colours whether or not
|
|
62
80
|
// the card is selected, fills the whole disc and is cropped to its circle, whatever the image's own
|
|
63
81
|
// size or aspect. The tile variant drops the disc and sizes its illustration itself, so it is left out.
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// ── Cookie consent banner ──
|
|
2
2
|
// AppConsentBanner / <app-consent-banner> / <wui-consent-banner>: a card pinned to a bottom
|
|
3
|
-
// corner
|
|
3
|
+
// corner, or a slim full-width bar along the bottom edge (position "bar", and every phone) asking
|
|
4
|
+
// for cookie consent, with
|
|
4
5
|
// per-category switches behind "Cookie settings". The element authors the markup and owns the
|
|
5
6
|
// states (`open` on the host, `hidden` on the panel, the settings block and the save button);
|
|
6
7
|
// everything visual lives here.
|
|
@@ -26,6 +27,18 @@ wui-consent-banner[position="bottom-right"] {
|
|
|
26
27
|
right: 20px;
|
|
27
28
|
left: auto;
|
|
28
29
|
}
|
|
30
|
+
wui-consent-banner[position="bar"] {
|
|
31
|
+
left: 0;
|
|
32
|
+
right: 0;
|
|
33
|
+
bottom: 0;
|
|
34
|
+
width: auto;
|
|
35
|
+
max-width: none;
|
|
36
|
+
}
|
|
37
|
+
wui-consent-banner[position="bar"] .wui-consent-banner-panel {
|
|
38
|
+
padding: 12px 24px calc(12px + env(safe-area-inset-bottom, 0px));
|
|
39
|
+
border-width: 1px 0 0;
|
|
40
|
+
border-radius: 0;
|
|
41
|
+
}
|
|
29
42
|
wui-consent-banner:not([open]) {
|
|
30
43
|
pointer-events: none;
|
|
31
44
|
}
|
|
@@ -154,3 +167,38 @@ wui-consent-banner[tour-open] {
|
|
|
154
167
|
gap: 6px;
|
|
155
168
|
}
|
|
156
169
|
}
|
|
170
|
+
|
|
171
|
+
@media (min-width: 576px) {
|
|
172
|
+
wui-consent-banner[position="bar"] .wui-consent-banner-panel {
|
|
173
|
+
display: flex;
|
|
174
|
+
flex-wrap: wrap;
|
|
175
|
+
align-items: center;
|
|
176
|
+
gap: 8px 24px;
|
|
177
|
+
}
|
|
178
|
+
// Hidden on the bar, but it stays the dialog's accessible name.
|
|
179
|
+
wui-consent-banner[position="bar"] .wui-consent-banner-heading {
|
|
180
|
+
position: absolute;
|
|
181
|
+
width: 1px;
|
|
182
|
+
height: 1px;
|
|
183
|
+
margin: -1px;
|
|
184
|
+
padding: 0;
|
|
185
|
+
overflow: hidden;
|
|
186
|
+
clip: rect(0, 0, 0, 0);
|
|
187
|
+
white-space: nowrap;
|
|
188
|
+
border: 0;
|
|
189
|
+
}
|
|
190
|
+
wui-consent-banner[position="bar"] .wui-consent-banner-description {
|
|
191
|
+
margin: 0;
|
|
192
|
+
flex: 1 1 320px;
|
|
193
|
+
}
|
|
194
|
+
wui-consent-banner[position="bar"] .wui-consent-banner-actions {
|
|
195
|
+
flex: none;
|
|
196
|
+
}
|
|
197
|
+
wui-consent-banner[position="bar"] .wui-consent-banner-settings {
|
|
198
|
+
flex-basis: 100%;
|
|
199
|
+
margin: 0;
|
|
200
|
+
}
|
|
201
|
+
wui-consent-banner[position="bar"] .wui-consent-banner-panel[hidden] {
|
|
202
|
+
display: none;
|
|
203
|
+
}
|
|
204
|
+
}
|
package/scss/wui/_controls.scss
CHANGED
|
@@ -99,6 +99,80 @@
|
|
|
99
99
|
.wui-radio-group .form-check-label {
|
|
100
100
|
min-width: auto;
|
|
101
101
|
}
|
|
102
|
+
// An option's description: a muted line under its label, in the label's column.
|
|
103
|
+
.wui-radio-option-desc {
|
|
104
|
+
grid-column: 2;
|
|
105
|
+
font-size: 13px;
|
|
106
|
+
line-height: 1.4;
|
|
107
|
+
color: var(--color-text-subtle);
|
|
108
|
+
}
|
|
109
|
+
// With a description the glyph spans both lines, so it sits centred against the label and description.
|
|
110
|
+
.form-check:has(> .wui-radio-option-desc) > .form-check-input {
|
|
111
|
+
grid-row: 1 / span 2;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// variant="card": each option is a bordered card. The label's ::after covers the whole card, so a
|
|
115
|
+
// click anywhere on it (description included) selects the option; the chosen card takes the
|
|
116
|
+
// primary border and a tinted fill.
|
|
117
|
+
.wui-radio-group-card {
|
|
118
|
+
gap: 12px;
|
|
119
|
+
}
|
|
120
|
+
.wui-radio-group-card.wui-radio-group-inline {
|
|
121
|
+
column-gap: 12px;
|
|
122
|
+
}
|
|
123
|
+
.wui-radio-group-card > .form-check {
|
|
124
|
+
position: relative;
|
|
125
|
+
padding: 14px 16px;
|
|
126
|
+
min-height: 56px;
|
|
127
|
+
border: 1.5px solid var(--color-border);
|
|
128
|
+
border-radius: var(--radius);
|
|
129
|
+
background: var(--color-surface);
|
|
130
|
+
transition:
|
|
131
|
+
border-color 0.12s ease,
|
|
132
|
+
background-color 0.12s ease;
|
|
133
|
+
}
|
|
134
|
+
.wui-radio-group-card.wui-radio-group-inline > .form-check {
|
|
135
|
+
flex: 1 1 200px;
|
|
136
|
+
min-width: 0;
|
|
137
|
+
}
|
|
138
|
+
.wui-radio-group-card .form-check-label {
|
|
139
|
+
font-size: 15px;
|
|
140
|
+
font-weight: 500;
|
|
141
|
+
}
|
|
142
|
+
.wui-radio-group-card .form-check-label::after {
|
|
143
|
+
content: "";
|
|
144
|
+
position: absolute;
|
|
145
|
+
inset: 0;
|
|
146
|
+
border-radius: inherit;
|
|
147
|
+
}
|
|
148
|
+
.wui-radio-group-card > .form-check:hover:not(:has(:disabled)):not(:has(:checked)) {
|
|
149
|
+
border-color: color-mix(in srgb, var(--color-primary) 40%, var(--color-border));
|
|
150
|
+
}
|
|
151
|
+
.wui-radio-group-card > .form-check:has(:checked) {
|
|
152
|
+
border-color: var(--color-primary);
|
|
153
|
+
background: color-mix(in srgb, var(--color-primary) 7%, var(--color-surface));
|
|
154
|
+
}
|
|
155
|
+
// The keyboard ring goes round the card, not the small glyph inside it.
|
|
156
|
+
.wui-radio-group-card > .form-check:has(.form-check-input:focus-visible) {
|
|
157
|
+
outline: var(--wui-focus-ring-width) solid var(--color-focus-ring);
|
|
158
|
+
outline-offset: var(--wui-focus-ring-offset);
|
|
159
|
+
}
|
|
160
|
+
.wui-radio-group-card .form-check-input:focus-visible {
|
|
161
|
+
outline: none;
|
|
162
|
+
}
|
|
163
|
+
// Hovering the card glows the glyph as hovering the glyph itself does.
|
|
164
|
+
.wui-radio-group-card > .form-check:hover .form-check-input:not(:disabled):not(:checked) {
|
|
165
|
+
border-color: var(--color-primary);
|
|
166
|
+
box-shadow: 0 0 0 2px var(--color-primary-soft);
|
|
167
|
+
}
|
|
168
|
+
.wui-radio-group-card > .form-check:has(:disabled) {
|
|
169
|
+
cursor: not-allowed;
|
|
170
|
+
background: var(--color-bg-muted);
|
|
171
|
+
}
|
|
172
|
+
.wui-radio-group-card[aria-invalid="true"] > .form-check:not(:has(:checked)) {
|
|
173
|
+
border-color: var(--color-danger);
|
|
174
|
+
}
|
|
175
|
+
|
|
102
176
|
// Beside-label forms centre a label on a text control; a radio group's first option is shorter,
|
|
103
177
|
// so its label lines up with that row instead.
|
|
104
178
|
.wui-form-labels-start .field:has(> .wui-radio-group) > .label {
|
package/scss/wui/_data.scss
CHANGED
|
@@ -13,7 +13,8 @@
|
|
|
13
13
|
color: var(--color-text-subtle);
|
|
14
14
|
}
|
|
15
15
|
.empty-state-title {
|
|
16
|
-
// Matches .tbl-empty-title
|
|
16
|
+
// Matches .tbl-empty-title; brand-signal sets both title faces together. A table's header hides
|
|
17
|
+
// in any .table-wrap whose empty block is visible.
|
|
17
18
|
font-size: 18px;
|
|
18
19
|
font-weight: 600;
|
|
19
20
|
line-height: 1.35;
|
|
@@ -136,7 +137,7 @@
|
|
|
136
137
|
// `.tbl-empty` / `.tbl-empty-plain` inside own the centring and padding.
|
|
137
138
|
}
|
|
138
139
|
// An empty list shows its empty state with no column headers above it.
|
|
139
|
-
.table-wrap:has(> .tbl-empty-block:not([hidden])) >
|
|
140
|
+
.table-wrap:has(> .tbl-empty-block:not([hidden])) > table > thead {
|
|
140
141
|
display: none;
|
|
141
142
|
}
|
|
142
143
|
|
|
@@ -11,6 +11,11 @@
|
|
|
11
11
|
white-space: nowrap;
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
+
// The floating bar form never shrinks below its Filters button and chips.
|
|
15
|
+
.wui-filter-form:has(wui-filter-popover) {
|
|
16
|
+
min-width: min-content;
|
|
17
|
+
}
|
|
18
|
+
|
|
14
19
|
.wui-filter-popover-panel {
|
|
15
20
|
box-sizing: border-box;
|
|
16
21
|
width: 600px;
|
package/scss/wui/_flow.scss
CHANGED
|
@@ -201,6 +201,11 @@ button.step.done:focus-visible .step-circle {
|
|
|
201
201
|
color: var(--color-text-muted);
|
|
202
202
|
overflow-wrap: break-word;
|
|
203
203
|
}
|
|
204
|
+
// The label and its description read as one block: pull the description up so the
|
|
205
|
+
// step's 10px column gap leaves 2px between them (the journey bar's spacing).
|
|
206
|
+
.step > .step-label + .step-desc {
|
|
207
|
+
margin-top: -8px;
|
|
208
|
+
}
|
|
204
209
|
|
|
205
210
|
.stepper-journey {
|
|
206
211
|
display: flex;
|
|
@@ -369,6 +374,10 @@ button.step.done:focus-visible .step-circle {
|
|
|
369
374
|
grid-row: 2;
|
|
370
375
|
max-width: none;
|
|
371
376
|
}
|
|
377
|
+
// The vertical grid has no row gap, so the description sits right under the label.
|
|
378
|
+
.stepper-vertical .step > .step-label + .step-desc {
|
|
379
|
+
margin-top: 0;
|
|
380
|
+
}
|
|
372
381
|
// The compact connector is horizontal (::before); redraw it as a vertical segment
|
|
373
382
|
// down the circle's centre, from below one circle to the top of the next.
|
|
374
383
|
.stepper-vertical .step + .step::before {
|
|
@@ -414,6 +423,10 @@ button.step.done:focus-visible .step-circle {
|
|
|
414
423
|
.stepper-icons .step {
|
|
415
424
|
gap: 6px;
|
|
416
425
|
}
|
|
426
|
+
// The icons column gap is 6px, so the description pulls up less to land 2px under the label.
|
|
427
|
+
.stepper-icons .step > .step-label + .step-desc {
|
|
428
|
+
margin-top: -4px;
|
|
429
|
+
}
|
|
417
430
|
.stepper-icons .step-circle {
|
|
418
431
|
width: var(--wui-step-badge-size, 56px);
|
|
419
432
|
height: var(--wui-step-badge-size, 56px);
|
|
@@ -513,6 +526,10 @@ button.step.done:focus-visible .step-circle {
|
|
|
513
526
|
gap: 14px;
|
|
514
527
|
text-align: left;
|
|
515
528
|
}
|
|
529
|
+
// A row has no column gap to pull the description back from.
|
|
530
|
+
.stepper-icons.stepper-icons .step > .step-label + .step-desc {
|
|
531
|
+
margin-top: 0;
|
|
532
|
+
}
|
|
516
533
|
.stepper-icons.stepper-icons .step + .step::before {
|
|
517
534
|
content: none;
|
|
518
535
|
}
|
|
@@ -675,6 +692,42 @@ button.wui-step-tile-body:hover .step-label {
|
|
|
675
692
|
content: none;
|
|
676
693
|
}
|
|
677
694
|
|
|
695
|
+
// Start alignment: the wizard's align="start" sets each step's badge, label and description at
|
|
696
|
+
// the start of its column instead of centred. Only the centred variants change (compact steps, and
|
|
697
|
+
// icons from md up); journey, tiles and vertical steps are start-aligned already. The steps share
|
|
698
|
+
// the row equally, so the step before sits one full column back: its badge starts at -100%, and
|
|
699
|
+
// the line runs from that badge's end edge to this step's badge, with the variant's usual gap.
|
|
700
|
+
.wui-stepper-start:not(.stepper-vertical, .stepper-journey, .stepper-icons, .wui-step-tiles) {
|
|
701
|
+
.step {
|
|
702
|
+
align-items: flex-start;
|
|
703
|
+
text-align: left;
|
|
704
|
+
}
|
|
705
|
+
.step + .step::before {
|
|
706
|
+
left: calc(-100% + var(--wui-step-size, 28px) + 4px);
|
|
707
|
+
right: calc(100% + 4px);
|
|
708
|
+
}
|
|
709
|
+
// The active badge's 4px ring would swallow the gap, so the lines touching it start further out.
|
|
710
|
+
.step.active + .step::before {
|
|
711
|
+
left: calc(-100% + var(--wui-step-size, 28px) + 8px);
|
|
712
|
+
}
|
|
713
|
+
.step.active::before {
|
|
714
|
+
right: calc(100% + 8px);
|
|
715
|
+
}
|
|
716
|
+
}
|
|
717
|
+
// Below md the icons stepper stacks into a list, which needs no alignment change.
|
|
718
|
+
@include media-breakpoint-up(md) {
|
|
719
|
+
.wui-stepper-start.stepper-icons:not(.stepper-vertical) {
|
|
720
|
+
.step {
|
|
721
|
+
align-items: flex-start;
|
|
722
|
+
text-align: left;
|
|
723
|
+
}
|
|
724
|
+
.step + .step::before {
|
|
725
|
+
left: calc(-100% + var(--wui-step-badge-size, 56px) + 8px);
|
|
726
|
+
right: calc(100% + 8px);
|
|
727
|
+
}
|
|
728
|
+
}
|
|
729
|
+
}
|
|
730
|
+
|
|
678
731
|
@media (prefers-reduced-motion: reduce) {
|
|
679
732
|
a.step:hover .step-circle,
|
|
680
733
|
button.step:hover .step-circle,
|
|
@@ -244,3 +244,29 @@ html:has(.form-actions-sticky) {
|
|
|
244
244
|
min-height: 44px;
|
|
245
245
|
}
|
|
246
246
|
}
|
|
247
|
+
|
|
248
|
+
// Touch pointers at any width: the same 44px floor for controls the phone block does not reach.
|
|
249
|
+
@media (pointer: coarse) {
|
|
250
|
+
.app-tab {
|
|
251
|
+
min-height: 44px;
|
|
252
|
+
}
|
|
253
|
+
.app-tabs-scroll-btn {
|
|
254
|
+
min-width: 44px;
|
|
255
|
+
min-height: 44px;
|
|
256
|
+
}
|
|
257
|
+
// The hit area grows, the ink does not: both controls sit inside a 44px field.
|
|
258
|
+
.country-toggle,
|
|
259
|
+
.search-select-clear {
|
|
260
|
+
position: relative;
|
|
261
|
+
}
|
|
262
|
+
.country-toggle::before,
|
|
263
|
+
.search-select-clear::before {
|
|
264
|
+
content: "";
|
|
265
|
+
position: absolute;
|
|
266
|
+
top: 50%;
|
|
267
|
+
left: 50%;
|
|
268
|
+
transform: translate(-50%, -50%);
|
|
269
|
+
width: 44px;
|
|
270
|
+
height: 44px;
|
|
271
|
+
}
|
|
272
|
+
}
|
package/scss/wui/_media.scss
CHANGED
|
@@ -314,6 +314,10 @@
|
|
|
314
314
|
border-color: var(--color-primary);
|
|
315
315
|
background: var(--color-primary-soft);
|
|
316
316
|
}
|
|
317
|
+
.attach-drop.dragging {
|
|
318
|
+
border-color: var(--color-primary);
|
|
319
|
+
background: var(--color-primary-soft);
|
|
320
|
+
}
|
|
317
321
|
// The hidden input is a sibling of the label (not a descendant), so :focus-within on
|
|
318
322
|
// .attach-drop never fires — reach the label through the general sibling combinator instead.
|
|
319
323
|
.attach-drop:has(+ input:focus-visible) {
|
|
@@ -336,6 +340,9 @@
|
|
|
336
340
|
.attach-drop:hover .attach-drop-icon {
|
|
337
341
|
background: var(--color-surface);
|
|
338
342
|
}
|
|
343
|
+
.attach-drop.dragging .attach-drop-icon {
|
|
344
|
+
background: var(--color-surface);
|
|
345
|
+
}
|
|
339
346
|
.attach-drop-copy {
|
|
340
347
|
display: flex;
|
|
341
348
|
flex-direction: column;
|
|
@@ -1147,9 +1154,9 @@
|
|
|
1147
1154
|
justify-content: center;
|
|
1148
1155
|
// Scales with the ring (~23% of the diameter reads well) so it stays proportional at every
|
|
1149
1156
|
// size instead of dwarfing a small (sm) ring and vanishing on a large (lg) one. Clamped so it
|
|
1150
|
-
// never shrinks below
|
|
1151
|
-
width: clamp(
|
|
1152
|
-
height: clamp(
|
|
1157
|
+
// never shrinks below the 24px WCAG 2.2 target or grows past the badge look; md lands on 28px.
|
|
1158
|
+
width: clamp(24px, calc(var(--wui-logo-size) * 0.23), 34px);
|
|
1159
|
+
height: clamp(24px, calc(var(--wui-logo-size) * 0.23), 34px);
|
|
1153
1160
|
padding: 0;
|
|
1154
1161
|
border: 2px solid var(--color-surface);
|
|
1155
1162
|
border-radius: 50%;
|
|
@@ -208,6 +208,9 @@
|
|
|
208
208
|
// A tab can be a real <a href> (link tab) — strip the browser's link underline so a link
|
|
209
209
|
// tab is visually identical to a button tab.
|
|
210
210
|
text-decoration: none;
|
|
211
|
+
// A tab sits on the page surface with no fill of its own, so the shared 12% pressed wash
|
|
212
|
+
// reads as a heavy grey block; half of it still answers the press.
|
|
213
|
+
--color-pressed-overlay: color-mix(in srgb, currentColor 6%, transparent);
|
|
211
214
|
transition:
|
|
212
215
|
color 0.12s ease,
|
|
213
216
|
border-color 0.12s ease;
|