@webority/theme 0.77.2 → 0.78.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/dist/purge-safelist.json +6 -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/wui/_calendar.scss +14 -1
- package/scss/wui/_choice.scss +14 -0
- package/scss/wui/_consent-banner.scss +49 -1
- package/scss/wui/_data.scss +3 -2
- package/scss/wui/_display.scss +218 -0
- package/scss/wui/_filter-popover.scss +5 -0
- package/scss/wui/_interaction.scss +26 -0
- package/scss/wui/_media.scss +10 -3
- package/scss/wui/_onboarding-checklist.scss +17 -3
- package/scss/wui/_overlays.scss +7 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webority/theme",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.78.1",
|
|
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/wui/_calendar.scss
CHANGED
|
@@ -30,6 +30,14 @@ wui-calendar {
|
|
|
30
30
|
color: var(--color-text-body);
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
+
// FullCalendar dims other-month days to opacity .3, which puts their numbers under the AA floor.
|
|
34
|
+
wui-calendar .fc .fc-day-other .fc-daygrid-day-top {
|
|
35
|
+
opacity: 1;
|
|
36
|
+
}
|
|
37
|
+
wui-calendar .fc .fc-day-other .fc-daygrid-day-number {
|
|
38
|
+
color: var(--color-text-subtle);
|
|
39
|
+
}
|
|
40
|
+
|
|
33
41
|
.wui-calendar-toolbar {
|
|
34
42
|
display: flex;
|
|
35
43
|
flex-wrap: wrap;
|
|
@@ -148,10 +156,15 @@ wui-calendar {
|
|
|
148
156
|
height: 44px;
|
|
149
157
|
}
|
|
150
158
|
.wui-calendar-view-btn {
|
|
151
|
-
min-height:
|
|
159
|
+
min-height: 44px;
|
|
152
160
|
padding: 0 10px;
|
|
153
161
|
}
|
|
154
162
|
}
|
|
163
|
+
@media (pointer: coarse) {
|
|
164
|
+
.wui-calendar-view-btn {
|
|
165
|
+
min-height: 44px;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
155
168
|
|
|
156
169
|
.wui-calendar-status {
|
|
157
170
|
display: flex;
|
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;
|
|
@@ -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/_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
|
|
package/scss/wui/_display.scss
CHANGED
|
@@ -1031,6 +1031,224 @@ a.info-row:hover .info-value {
|
|
|
1031
1031
|
justify-content: center;
|
|
1032
1032
|
}
|
|
1033
1033
|
|
|
1034
|
+
// Steps (`variant="steps"`): a numbered process. Each step is a large tinted icon disc with a
|
|
1035
|
+
// ring, a coloured eyebrow ("Step 1"), a title and a description; a dashed line joins the discs.
|
|
1036
|
+
// Phones get a column with the line running down beside the discs; from md up the steps sit in
|
|
1037
|
+
// a row of equal columns with the line running across, unless `.wui-timeline--steps-vertical`
|
|
1038
|
+
// keeps the column at every width. An untoned step takes the primary colour.
|
|
1039
|
+
.timeline.wui-timeline--steps {
|
|
1040
|
+
--wui-timeline-dot: 56px;
|
|
1041
|
+
--wui-timeline-step-ring: 7px;
|
|
1042
|
+
--wui-timeline-step-tint: var(--color-primary-soft);
|
|
1043
|
+
--wui-timeline-step-ink: var(--color-primary-ink);
|
|
1044
|
+
// The line between discs: 6px dashes with 6px gaps, 1px thick.
|
|
1045
|
+
--wui-timeline-step-line: var(--color-border-strong);
|
|
1046
|
+
--wui-timeline-step-dash: 6px;
|
|
1047
|
+
--wui-timeline-step-gap: 6px;
|
|
1048
|
+
padding: var(--wui-timeline-step-ring);
|
|
1049
|
+
}
|
|
1050
|
+
.timeline.wui-timeline--steps::before {
|
|
1051
|
+
display: none;
|
|
1052
|
+
}
|
|
1053
|
+
.wui-timeline--steps .timeline-item.success {
|
|
1054
|
+
--wui-timeline-step-tint: var(--color-success-soft);
|
|
1055
|
+
--wui-timeline-step-ink: var(--color-success-text);
|
|
1056
|
+
}
|
|
1057
|
+
.wui-timeline--steps .timeline-item.warning {
|
|
1058
|
+
--wui-timeline-step-tint: var(--color-warning-soft);
|
|
1059
|
+
--wui-timeline-step-ink: var(--color-warning-text);
|
|
1060
|
+
}
|
|
1061
|
+
.wui-timeline--steps .timeline-item.danger {
|
|
1062
|
+
--wui-timeline-step-tint: var(--color-danger-soft);
|
|
1063
|
+
--wui-timeline-step-ink: var(--color-danger-text);
|
|
1064
|
+
}
|
|
1065
|
+
.wui-timeline--steps .timeline-item.info {
|
|
1066
|
+
--wui-timeline-step-tint: var(--color-info-soft);
|
|
1067
|
+
--wui-timeline-step-ink: var(--color-info-text);
|
|
1068
|
+
}
|
|
1069
|
+
// The bottom padding is the space between steps in the column. It must clear both rings and
|
|
1070
|
+
// both 6px gaps around the dashed line, so the line between two discs is always visible.
|
|
1071
|
+
.wui-timeline--steps .timeline-item {
|
|
1072
|
+
gap: 16px;
|
|
1073
|
+
padding-bottom: 48px;
|
|
1074
|
+
}
|
|
1075
|
+
.wui-timeline--steps .timeline-item:last-child {
|
|
1076
|
+
padding-bottom: 0;
|
|
1077
|
+
}
|
|
1078
|
+
// The disc: the tint over the surface (the soft tokens are translucent in dark mode), a
|
|
1079
|
+
// surface-coloured gap, then a thin tinted ring. Three classes deep so it outranks the feed's
|
|
1080
|
+
// `.timeline-item.<tone> .timeline-dot`.
|
|
1081
|
+
.wui-timeline--steps .timeline-item .timeline-dot {
|
|
1082
|
+
color: var(--wui-timeline-step-ink);
|
|
1083
|
+
background: linear-gradient(var(--wui-timeline-step-tint), var(--wui-timeline-step-tint)), var(--color-surface);
|
|
1084
|
+
box-shadow:
|
|
1085
|
+
0 0 0 calc(var(--wui-timeline-step-ring) - 1px) var(--color-surface),
|
|
1086
|
+
0 0 0 var(--wui-timeline-step-ring) var(--wui-timeline-step-tint);
|
|
1087
|
+
}
|
|
1088
|
+
// The dashed line in the column: down the middle of the disc, from 6px below this disc's ring
|
|
1089
|
+
// to 6px above the next disc's ring. A gradient draws the dashes, so their length and gap are
|
|
1090
|
+
// set here rather than left to the browser's dashed border.
|
|
1091
|
+
.wui-timeline--steps .timeline-item:not(:last-child)::after {
|
|
1092
|
+
content: "";
|
|
1093
|
+
position: absolute;
|
|
1094
|
+
top: calc(var(--wui-timeline-dot) + var(--wui-timeline-step-ring) + 6px);
|
|
1095
|
+
bottom: calc(var(--wui-timeline-step-ring) + 6px);
|
|
1096
|
+
left: calc(var(--wui-timeline-dot) / 2);
|
|
1097
|
+
width: 1px;
|
|
1098
|
+
background: repeating-linear-gradient(
|
|
1099
|
+
to bottom,
|
|
1100
|
+
var(--wui-timeline-step-line) 0 var(--wui-timeline-step-dash),
|
|
1101
|
+
transparent var(--wui-timeline-step-dash) calc(var(--wui-timeline-step-dash) + var(--wui-timeline-step-gap))
|
|
1102
|
+
);
|
|
1103
|
+
}
|
|
1104
|
+
.wui-timeline--steps .timeline-body {
|
|
1105
|
+
padding-top: 4px;
|
|
1106
|
+
}
|
|
1107
|
+
.wui-timeline-eyebrow {
|
|
1108
|
+
margin-bottom: 4px;
|
|
1109
|
+
font-size: 12px;
|
|
1110
|
+
font-weight: 600;
|
|
1111
|
+
line-height: 1.4;
|
|
1112
|
+
letter-spacing: 0.1em;
|
|
1113
|
+
text-transform: uppercase;
|
|
1114
|
+
color: var(--wui-timeline-step-ink, var(--color-primary-ink));
|
|
1115
|
+
}
|
|
1116
|
+
.wui-timeline--steps .timeline-title {
|
|
1117
|
+
font-size: 16px;
|
|
1118
|
+
}
|
|
1119
|
+
.wui-timeline--steps .timeline-desc {
|
|
1120
|
+
margin-top: 6px;
|
|
1121
|
+
font-size: 14px;
|
|
1122
|
+
}
|
|
1123
|
+
@include media-breakpoint-up(md) {
|
|
1124
|
+
.timeline.wui-timeline--steps:not(.wui-timeline--steps-vertical) {
|
|
1125
|
+
display: flex;
|
|
1126
|
+
align-items: flex-start;
|
|
1127
|
+
}
|
|
1128
|
+
.wui-timeline--steps:not(.wui-timeline--steps-vertical) .timeline-item {
|
|
1129
|
+
flex: 1 1 0;
|
|
1130
|
+
min-width: 0;
|
|
1131
|
+
flex-direction: column;
|
|
1132
|
+
gap: 20px;
|
|
1133
|
+
padding: 0 24px 0 0;
|
|
1134
|
+
}
|
|
1135
|
+
.wui-timeline--steps:not(.wui-timeline--steps-vertical) .timeline-item:last-child {
|
|
1136
|
+
padding-right: 0;
|
|
1137
|
+
}
|
|
1138
|
+
.wui-timeline--steps:not(.wui-timeline--steps-vertical) .timeline-body {
|
|
1139
|
+
padding-top: 0;
|
|
1140
|
+
}
|
|
1141
|
+
// The dashed line across: from past this disc's ring to just before the next disc's ring.
|
|
1142
|
+
.wui-timeline--steps:not(.wui-timeline--steps-vertical) .timeline-item:not(:last-child)::after {
|
|
1143
|
+
top: calc(var(--wui-timeline-dot) / 2);
|
|
1144
|
+
bottom: auto;
|
|
1145
|
+
left: calc(var(--wui-timeline-dot) + var(--wui-timeline-step-ring) + 12px);
|
|
1146
|
+
right: calc(var(--wui-timeline-step-ring) + 12px);
|
|
1147
|
+
width: auto;
|
|
1148
|
+
height: 1px;
|
|
1149
|
+
background: repeating-linear-gradient(
|
|
1150
|
+
to right,
|
|
1151
|
+
var(--wui-timeline-step-line) 0 var(--wui-timeline-step-dash),
|
|
1152
|
+
transparent var(--wui-timeline-step-dash) calc(var(--wui-timeline-step-dash) + var(--wui-timeline-step-gap))
|
|
1153
|
+
);
|
|
1154
|
+
}
|
|
1155
|
+
}
|
|
1156
|
+
|
|
1157
|
+
// Sizes (`size="sm"` / `size="lg"`; md is the unclassed default above). A preset sets the dot
|
|
1158
|
+
// and scales the text and spacing to match, in every variant. A px `size` sets only the dot
|
|
1159
|
+
// through the inline --wui-timeline-dot, which outranks these classes.
|
|
1160
|
+
.timeline.wui-timeline--sm {
|
|
1161
|
+
--wui-timeline-dot: 18px;
|
|
1162
|
+
}
|
|
1163
|
+
.timeline.wui-timeline--lg {
|
|
1164
|
+
--wui-timeline-dot: 32px;
|
|
1165
|
+
}
|
|
1166
|
+
.wui-timeline--sm .timeline-item {
|
|
1167
|
+
gap: 10px;
|
|
1168
|
+
padding-bottom: 12px;
|
|
1169
|
+
}
|
|
1170
|
+
.wui-timeline--lg .timeline-item {
|
|
1171
|
+
gap: 16px;
|
|
1172
|
+
padding-bottom: 24px;
|
|
1173
|
+
}
|
|
1174
|
+
.wui-timeline--sm .timeline-item:last-child,
|
|
1175
|
+
.wui-timeline--lg .timeline-item:last-child {
|
|
1176
|
+
padding-bottom: 0;
|
|
1177
|
+
}
|
|
1178
|
+
.wui-timeline--sm .timeline-title {
|
|
1179
|
+
font-size: 13px;
|
|
1180
|
+
}
|
|
1181
|
+
.wui-timeline--lg .timeline-title {
|
|
1182
|
+
font-size: 16px;
|
|
1183
|
+
}
|
|
1184
|
+
.wui-timeline--sm .timeline-desc,
|
|
1185
|
+
.wui-timeline--sm .timeline-note {
|
|
1186
|
+
font-size: 12px;
|
|
1187
|
+
}
|
|
1188
|
+
.wui-timeline--lg .timeline-desc,
|
|
1189
|
+
.wui-timeline--lg .timeline-note {
|
|
1190
|
+
font-size: 14px;
|
|
1191
|
+
}
|
|
1192
|
+
.wui-timeline--sm .timeline-meta {
|
|
1193
|
+
font-size: 12px;
|
|
1194
|
+
}
|
|
1195
|
+
.wui-timeline--lg .timeline-meta {
|
|
1196
|
+
font-size: 13.5px;
|
|
1197
|
+
}
|
|
1198
|
+
// Steps keep their own, larger scale: three classes deep so they outrank the rules above.
|
|
1199
|
+
.timeline.wui-timeline--steps.wui-timeline--sm {
|
|
1200
|
+
--wui-timeline-dot: 44px;
|
|
1201
|
+
--wui-timeline-step-ring: 6px;
|
|
1202
|
+
}
|
|
1203
|
+
.timeline.wui-timeline--steps.wui-timeline--lg {
|
|
1204
|
+
--wui-timeline-dot: 72px;
|
|
1205
|
+
--wui-timeline-step-ring: 8px;
|
|
1206
|
+
}
|
|
1207
|
+
.wui-timeline--steps.wui-timeline--sm .timeline-item {
|
|
1208
|
+
gap: 12px;
|
|
1209
|
+
padding-bottom: 40px;
|
|
1210
|
+
}
|
|
1211
|
+
.wui-timeline--steps.wui-timeline--lg .timeline-item {
|
|
1212
|
+
gap: 20px;
|
|
1213
|
+
padding-bottom: 56px;
|
|
1214
|
+
}
|
|
1215
|
+
.wui-timeline--steps.wui-timeline--sm .timeline-item:last-child,
|
|
1216
|
+
.wui-timeline--steps.wui-timeline--lg .timeline-item:last-child {
|
|
1217
|
+
padding-bottom: 0;
|
|
1218
|
+
}
|
|
1219
|
+
.wui-timeline--steps.wui-timeline--sm .wui-timeline-eyebrow {
|
|
1220
|
+
font-size: 11px;
|
|
1221
|
+
}
|
|
1222
|
+
.wui-timeline--steps.wui-timeline--lg .wui-timeline-eyebrow {
|
|
1223
|
+
font-size: 13px;
|
|
1224
|
+
}
|
|
1225
|
+
.wui-timeline--steps.wui-timeline--sm .timeline-title {
|
|
1226
|
+
font-size: 14px;
|
|
1227
|
+
}
|
|
1228
|
+
.wui-timeline--steps.wui-timeline--lg .timeline-title {
|
|
1229
|
+
font-size: 18px;
|
|
1230
|
+
}
|
|
1231
|
+
.wui-timeline--steps.wui-timeline--sm .timeline-desc {
|
|
1232
|
+
font-size: 13px;
|
|
1233
|
+
}
|
|
1234
|
+
.wui-timeline--steps.wui-timeline--lg .timeline-desc {
|
|
1235
|
+
font-size: 15px;
|
|
1236
|
+
}
|
|
1237
|
+
@include media-breakpoint-up(md) {
|
|
1238
|
+
.wui-timeline--steps.wui-timeline--sm:not(.wui-timeline--steps-vertical) .timeline-item {
|
|
1239
|
+
gap: 14px;
|
|
1240
|
+
padding: 0 16px 0 0;
|
|
1241
|
+
}
|
|
1242
|
+
.wui-timeline--steps.wui-timeline--lg:not(.wui-timeline--steps-vertical) .timeline-item {
|
|
1243
|
+
gap: 24px;
|
|
1244
|
+
padding: 0 32px 0 0;
|
|
1245
|
+
}
|
|
1246
|
+
.wui-timeline--steps.wui-timeline--sm:not(.wui-timeline--steps-vertical) .timeline-item:last-child,
|
|
1247
|
+
.wui-timeline--steps.wui-timeline--lg:not(.wui-timeline--steps-vertical) .timeline-item:last-child {
|
|
1248
|
+
padding-right: 0;
|
|
1249
|
+
}
|
|
1250
|
+
}
|
|
1251
|
+
|
|
1034
1252
|
// ============================================================================
|
|
1035
1253
|
// Feature-comparison table — us vs them. The highlighted column is tinted so
|
|
1036
1254
|
// the reader's eye lands on it without a legend.
|
|
@@ -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;
|
|
@@ -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%;
|
|
@@ -52,8 +52,7 @@
|
|
|
52
52
|
background: var(--color-bg-muted);
|
|
53
53
|
}
|
|
54
54
|
.wui-onboarding-toggle:focus-visible,
|
|
55
|
-
.wui-onboarding-restore:focus-visible
|
|
56
|
-
.wui-onboarding-label:focus-visible {
|
|
55
|
+
.wui-onboarding-restore:focus-visible {
|
|
57
56
|
outline: var(--wui-focus-ring-width) solid var(--color-focus-ring);
|
|
58
57
|
outline-offset: var(--wui-focus-ring-offset);
|
|
59
58
|
}
|
|
@@ -104,9 +103,11 @@
|
|
|
104
103
|
list-style: none;
|
|
105
104
|
}
|
|
106
105
|
.wui-onboarding-step {
|
|
106
|
+
position: relative;
|
|
107
107
|
display: flex;
|
|
108
|
-
align-items:
|
|
108
|
+
align-items: center;
|
|
109
109
|
gap: 12px;
|
|
110
|
+
min-height: 44px;
|
|
110
111
|
padding: 8px 0;
|
|
111
112
|
}
|
|
112
113
|
.wui-onboarding-step + .wui-onboarding-step {
|
|
@@ -160,6 +161,19 @@ a.wui-onboarding-label:hover {
|
|
|
160
161
|
color: var(--color-primary-ink);
|
|
161
162
|
text-decoration-color: currentColor;
|
|
162
163
|
}
|
|
164
|
+
a.wui-onboarding-label::after {
|
|
165
|
+
content: "";
|
|
166
|
+
position: absolute;
|
|
167
|
+
inset: 0;
|
|
168
|
+
}
|
|
169
|
+
a.wui-onboarding-label:focus-visible {
|
|
170
|
+
outline: none;
|
|
171
|
+
}
|
|
172
|
+
a.wui-onboarding-label:focus-visible::after {
|
|
173
|
+
outline: var(--wui-focus-ring-width) solid var(--color-focus-ring);
|
|
174
|
+
outline-offset: -2px;
|
|
175
|
+
border-radius: var(--wui-radius-sm);
|
|
176
|
+
}
|
|
163
177
|
.wui-onboarding-step.is-current .wui-onboarding-label {
|
|
164
178
|
font-weight: 600;
|
|
165
179
|
}
|
package/scss/wui/_overlays.scss
CHANGED
|
@@ -285,6 +285,13 @@
|
|
|
285
285
|
background 180ms cubic-bezier(0.4, 0, 0.2, 1),
|
|
286
286
|
color 180ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
287
287
|
}
|
|
288
|
+
@media (max-width: 575.98px), (pointer: coarse) {
|
|
289
|
+
.wui-modal-close,
|
|
290
|
+
.wui-drawer-close {
|
|
291
|
+
width: var(--wui-control-height);
|
|
292
|
+
height: var(--wui-control-height);
|
|
293
|
+
}
|
|
294
|
+
}
|
|
288
295
|
.wui-modal-close:hover,
|
|
289
296
|
.wui-drawer-close:hover {
|
|
290
297
|
background: var(--color-danger-soft);
|