@stackoverflow/stacks 0.71.0 → 0.74.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/README.md +1 -1
- package/dist/css/stacks.css +963 -571
- package/dist/css/stacks.min.css +1 -1
- package/dist/js/stacks.js +190 -100
- package/dist/js/stacks.min.js +1 -1
- package/lib/css/atomic/_stacks-flex.less +2 -7
- package/lib/css/atomic/_stacks-grid.less +1 -0
- package/lib/css/atomic/_stacks-misc.less +6 -0
- package/lib/css/atomic/_stacks-typography.less +25 -7
- package/lib/css/base/_stacks-configuration-dynamic.less +4 -14
- package/lib/css/components/_stacks-activity-indicator.less +26 -2
- package/lib/css/components/_stacks-badges.less +1 -4
- package/lib/css/components/_stacks-buttons.less +44 -8
- package/lib/css/components/_stacks-cards.less +7 -11
- package/lib/css/components/_stacks-inputs.less +19 -0
- package/lib/css/components/_stacks-link-previews.less +4 -0
- package/lib/css/components/_stacks-links.less +25 -2
- package/lib/css/components/_stacks-navigation.less +8 -0
- package/lib/css/components/_stacks-pagination.less +2 -0
- package/lib/css/components/_stacks-popovers.less +4 -0
- package/lib/css/components/_stacks-post-summary.less +156 -10
- package/lib/css/components/_stacks-progress-bars.less +18 -3
- package/lib/css/components/_stacks-prose.less +7 -2
- package/lib/css/components/_stacks-tags.less +38 -15
- package/lib/css/components/_stacks-toggle-switches.less +8 -1
- package/lib/css/components/_stacks-topbar.less +440 -0
- package/lib/css/components/_stacks-uploader.less +2 -0
- package/lib/css/components/_stacks-user-cards.less +15 -39
- package/lib/css/exports/_stacks-constants-colors.less +50 -14
- package/lib/css/exports/_stacks-constants-helpers.less +1 -2
- package/lib/css/exports/_stacks-mixins.less +11 -0
- package/lib/css/stacks-dynamic.less +0 -1
- package/lib/css/stacks-static.less +2 -0
- package/package.json +15 -12
|
@@ -37,7 +37,6 @@
|
|
|
37
37
|
background-color: var(--green-400);
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
|
|
41
40
|
// $$ LABEL
|
|
42
41
|
// For when there's descriptive, label copy within the progress bar
|
|
43
42
|
// ----------------------------------------------------------------------------
|
|
@@ -53,7 +52,6 @@
|
|
|
53
52
|
z-index: @zi-base + 2;
|
|
54
53
|
}
|
|
55
54
|
|
|
56
|
-
|
|
57
55
|
// ===========================================================================
|
|
58
56
|
// $ VARIATION PROGRESS BACKGROUNDS
|
|
59
57
|
// ---------------------------------------------------------------------------
|
|
@@ -75,10 +73,13 @@
|
|
|
75
73
|
}
|
|
76
74
|
.s-progress--label {
|
|
77
75
|
border-color: var(--green-400);
|
|
76
|
+
display: flex;
|
|
77
|
+
gap: @su4;
|
|
78
|
+
align-items: center;
|
|
79
|
+
justify-content: center;
|
|
78
80
|
}
|
|
79
81
|
}
|
|
80
82
|
|
|
81
|
-
|
|
82
83
|
// ===========================================================================
|
|
83
84
|
// $ BADGE PROGRESS BARS
|
|
84
85
|
// ===========================================================================
|
|
@@ -95,6 +96,20 @@
|
|
|
95
96
|
background-color: transparent;
|
|
96
97
|
}
|
|
97
98
|
|
|
99
|
+
.s-progress__badge {
|
|
100
|
+
.s-progress--label {
|
|
101
|
+
display: flex;
|
|
102
|
+
gap: @su4;
|
|
103
|
+
align-items: center;
|
|
104
|
+
padding-left: 1em;
|
|
105
|
+
padding-right: 1em;
|
|
106
|
+
|
|
107
|
+
.s-badge--label {
|
|
108
|
+
text-align: center;
|
|
109
|
+
flex-grow: 1;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
98
113
|
|
|
99
114
|
// $$ GOLD
|
|
100
115
|
// ---------------------------------------------------------------------------
|
|
@@ -322,8 +322,8 @@
|
|
|
322
322
|
top: 0;
|
|
323
323
|
bottom: 0;
|
|
324
324
|
left: 0;
|
|
325
|
-
width:
|
|
326
|
-
border-radius:
|
|
325
|
+
width: @su4;
|
|
326
|
+
border-radius: @su8;
|
|
327
327
|
background: var(--black-150);
|
|
328
328
|
|
|
329
329
|
.highcontrast-mode({
|
|
@@ -431,6 +431,11 @@
|
|
|
431
431
|
border-radius: @br-sm;
|
|
432
432
|
}
|
|
433
433
|
|
|
434
|
+
// When contained within a link, we want the code to be link-colored
|
|
435
|
+
*:not(.s-code-block) > a code {
|
|
436
|
+
color: var(--theme-link-color);
|
|
437
|
+
}
|
|
438
|
+
|
|
434
439
|
pre {
|
|
435
440
|
margin-top: 0;
|
|
436
441
|
margin-bottom: calc(var(--s-prose-spacing) + 0.4em); // Increase this spacing for better optical alignment
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
background-color: transparent;
|
|
27
27
|
|
|
28
28
|
&:hover {
|
|
29
|
-
color: @
|
|
29
|
+
color: @background;
|
|
30
30
|
background-color: @color;
|
|
31
31
|
|
|
32
32
|
.highcontrast-mode({
|
|
@@ -68,7 +68,7 @@
|
|
|
68
68
|
.s-tag {
|
|
69
69
|
#stacks-internals #load-config();
|
|
70
70
|
display: inline-flex;
|
|
71
|
-
align-
|
|
71
|
+
align-items: center;
|
|
72
72
|
justify-content: center;
|
|
73
73
|
min-width: 0;
|
|
74
74
|
padding-left: @su4;
|
|
@@ -82,10 +82,12 @@
|
|
|
82
82
|
vertical-align: middle;
|
|
83
83
|
white-space: nowrap;
|
|
84
84
|
|
|
85
|
-
.s-tag-styles(
|
|
85
|
+
.s-tag-styles(var(--theme-tag-border-color), var(--theme-tag-background-color), var(--theme-tag-color));
|
|
86
|
+
|
|
87
|
+
.highcontrast-mode({ text-decoration: none; });
|
|
86
88
|
|
|
87
89
|
&.is-selected {
|
|
88
|
-
.s-tag-selected-styles(
|
|
90
|
+
.s-tag-selected-styles(transparent, var(--theme-secondary-200), var(--theme-secondary-900));
|
|
89
91
|
}
|
|
90
92
|
|
|
91
93
|
// -- SIZES
|
|
@@ -116,7 +118,7 @@
|
|
|
116
118
|
|
|
117
119
|
a.s-tag:not(.is-selected) {
|
|
118
120
|
#stacks-internals #load-config();
|
|
119
|
-
.s-tag-hover-styles(
|
|
121
|
+
.s-tag-hover-styles(var(--theme-tag-hover-border-color), var(--theme-tag-hover-background-color), var(--theme-tag-hover-color));
|
|
120
122
|
}
|
|
121
123
|
|
|
122
124
|
// $$ DISMISS ICON
|
|
@@ -206,17 +208,38 @@ a.s-tag__muted:not(.is-selected) {
|
|
|
206
208
|
.s-tag-hover-styles(@tags-muted-hover-border, @tags-muted-hover-background, @tags-muted-hover-color);
|
|
207
209
|
}
|
|
208
210
|
|
|
209
|
-
// $$
|
|
211
|
+
// $$ Tag with Icons (watched, ignored)
|
|
210
212
|
// ---------------------------------------------------------------------------
|
|
211
|
-
.s-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
213
|
+
.s-tag__watched,
|
|
214
|
+
.s-tag__ignored {
|
|
215
|
+
position: relative;
|
|
216
|
+
padding-left: 22px;
|
|
217
|
+
|
|
218
|
+
&:before {
|
|
219
|
+
content: "";
|
|
220
|
+
display: block;
|
|
221
|
+
width: 14px;
|
|
222
|
+
height: 14px;
|
|
223
|
+
margin-right: @su2;
|
|
224
|
+
background-color: currentColor;
|
|
225
|
+
position: absolute;
|
|
226
|
+
left: 4px;
|
|
227
|
+
top: calc(50% - 7px);
|
|
228
|
+
-webkit-mask: var(--s-tag-icon) no-repeat center;
|
|
229
|
+
mask: var(--s-tag-icon) no-repeat center;
|
|
230
|
+
-webkit-mask-size: contain;
|
|
231
|
+
mask-size: contain;
|
|
217
232
|
}
|
|
218
233
|
}
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
234
|
+
|
|
235
|
+
// $$ Watched Tag
|
|
236
|
+
// ---------------------------------------------------------------------------
|
|
237
|
+
.s-tag__watched {
|
|
238
|
+
--s-tag-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 14 14'%3E%3Cpath d='M7.05 1C2.63 1 0 6.5 0 6.5S2.63 12 7.05 12C11.38 12 14 6.5 14 6.5S11.37 1 7.05 1ZM7 10.17A3.59 3.59 0 0 1 3.5 6.5 3.6 3.6 0 0 1 7 2.83c1.94 0 3.5 1.65 3.5 3.67A3.57 3.57 0 0 1 7 10.17Zm0-1.84c.97 0 1.75-.81 1.75-1.83S7.97 4.67 7 4.67s-1.75.81-1.75 1.83S6.03 8.33 7 8.33Z'/%3E%3C/svg%3E");
|
|
222
239
|
}
|
|
240
|
+
|
|
241
|
+
// $$ Ignored Tag
|
|
242
|
+
// ---------------------------------------------------------------------------
|
|
243
|
+
.s-tag__ignored {
|
|
244
|
+
--s-tag-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 14 14'%3E%3Cpath d='M3.52 7.38 1.58 9.26A12.38 12.38 0 0 1 0 7s2.63-5.14 7.05-5.14c.66 0 1.28.12 1.86.32L7.44 3.6a3.48 3.48 0 0 0-3.92 3.78ZM5.3 9.99c.5.28 1.1.44 1.71.44 1.94 0 3.5-1.53 3.5-3.43 0-.62-.17-1.21-.47-1.72L8.7 6.6a1.73 1.73 0 0 1-2.08 2.07L5.29 10Zm6.23-6.19A12.7 12.7 0 0 1 14 7s-2.63 5.14-6.95 5.14A6.1 6.1 0 0 1 4 11.3L2.27 13l-1.4-1.36L11.9 1l1.23 1.2-1.6 1.6Z'/%3E%3C/svg%3E");
|
|
245
|
+
}
|
|
@@ -112,7 +112,6 @@
|
|
|
112
112
|
// If the input is selected, style its label accordingly.
|
|
113
113
|
input[type="radio"]:checked {
|
|
114
114
|
+ label {
|
|
115
|
-
// Color activated options green
|
|
116
115
|
&.s-toggle-switch--label-off {
|
|
117
116
|
background-color: var(--black-300);
|
|
118
117
|
color: @white;
|
|
@@ -132,6 +131,14 @@
|
|
|
132
131
|
});
|
|
133
132
|
}
|
|
134
133
|
}
|
|
134
|
+
|
|
135
|
+
&:focus + label.s-toggle-switch--label-off {
|
|
136
|
+
box-shadow: 0 0 0 @su4 var(--focus-ring-muted);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
&:focus + label:not(.s-toggle-switch--label-off) {
|
|
140
|
+
box-shadow: 0 0 0 @su4 var(--focus-ring-success);
|
|
141
|
+
}
|
|
135
142
|
}
|
|
136
143
|
}
|
|
137
144
|
}
|
|
@@ -0,0 +1,440 @@
|
|
|
1
|
+
//
|
|
2
|
+
// STACK OVERFLOW
|
|
3
|
+
// TOPBAR
|
|
4
|
+
//
|
|
5
|
+
// This CSS comes from Stacks, our CSS & Pattern library for rapidly building
|
|
6
|
+
// Stack Overflow. For documentation of all these classes and how to contribute,
|
|
7
|
+
// visit https://stackoverflow.design/
|
|
8
|
+
//
|
|
9
|
+
// ============================================================================
|
|
10
|
+
// $ BASE STYLE
|
|
11
|
+
// ----------------------------------------------------------------------------
|
|
12
|
+
.s-topbar {
|
|
13
|
+
min-width: auto;
|
|
14
|
+
box-shadow: var(--bs-sm);
|
|
15
|
+
width: 100%;
|
|
16
|
+
z-index: @zi-navigation-fixed;
|
|
17
|
+
background-color: var(--theme-topbar-background-color);
|
|
18
|
+
height: var(--theme-topbar-height);
|
|
19
|
+
display: flex;
|
|
20
|
+
border-top: var(--theme-topbar-accent-border);
|
|
21
|
+
position: relative;
|
|
22
|
+
align-items: center;
|
|
23
|
+
|
|
24
|
+
// Redefine the variables for extra contrast in high-contrast mode
|
|
25
|
+
.highcontrast-mode({
|
|
26
|
+
// Search input
|
|
27
|
+
--theme-topbar-search-color: var(--theme-topbar-item-color);
|
|
28
|
+
--theme-topbar-search-background: var(--theme-topbar-background-color);
|
|
29
|
+
--theme-topbar-search-placeholder: var(--theme-topbar-item-color);
|
|
30
|
+
--theme-topbar-search-border: var(--theme-topbar-item-color);
|
|
31
|
+
--theme-topbar-search-border-focus: var(--theme-topbar-item-color);
|
|
32
|
+
|
|
33
|
+
// Search switcher
|
|
34
|
+
--theme-topbar-select-color: var(--theme-topbar-item-color);
|
|
35
|
+
--theme-topbar-select-background: var(--theme-topbar-background-color);
|
|
36
|
+
|
|
37
|
+
// Topbar items
|
|
38
|
+
--theme-topbar-item-color: var(--black-800);
|
|
39
|
+
--theme-topbar-item-color-hover: var(--black-900);
|
|
40
|
+
--theme-topbar-item-background-hover: var(--black-200);
|
|
41
|
+
--theme-topbar-item-color-current: var(--black);
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
.highcontrast-mode({ border-bottom: 1px solid currentColor; });
|
|
45
|
+
|
|
46
|
+
// Wraps the content so the topbar stretches 100% w/ content at some value below that
|
|
47
|
+
.s-topbar--container {
|
|
48
|
+
width: @s-full; // wmx12; Consumers should use atomic classes to override this
|
|
49
|
+
max-width: 100%;
|
|
50
|
+
height: 100%;
|
|
51
|
+
display: flex;
|
|
52
|
+
margin: 0 auto;
|
|
53
|
+
align-items: center;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.s-topbar--logo {
|
|
57
|
+
padding: 0 @su8;
|
|
58
|
+
height: 100%;
|
|
59
|
+
display: flex;
|
|
60
|
+
align-items: center;
|
|
61
|
+
background-color: transparent;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
a.s-topbar--logo:hover {
|
|
65
|
+
background-color: var(--theme-topbar-item-background-hover);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
a.s-topbar--logo.is-selected {
|
|
69
|
+
background-color: var(--theme-topbar-item-background-hover);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.s-topbar--menu-btn {
|
|
73
|
+
display: flex;
|
|
74
|
+
height: 100%;
|
|
75
|
+
padding: 0 @su16;
|
|
76
|
+
flex-shrink: 0;
|
|
77
|
+
align-items: center;
|
|
78
|
+
justify-content: center;
|
|
79
|
+
|
|
80
|
+
// Build a hamburger icon manually using spans instead of using `@Svg` helper so
|
|
81
|
+
// we can more easily animate its content and transform the hamburger into an x
|
|
82
|
+
span {
|
|
83
|
+
&,
|
|
84
|
+
&:before,
|
|
85
|
+
&:after {
|
|
86
|
+
width: @su16;
|
|
87
|
+
height: @su2;
|
|
88
|
+
background-color: var(--theme-topbar-item-color);
|
|
89
|
+
position: relative;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
&:before,
|
|
93
|
+
&:after {
|
|
94
|
+
position: absolute;
|
|
95
|
+
content: '';
|
|
96
|
+
left: 0;
|
|
97
|
+
top: -5px;
|
|
98
|
+
transition: top, transform;
|
|
99
|
+
transition-duration: 0.1s;
|
|
100
|
+
transition-timing-function: ease-in-out;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
&:after {
|
|
104
|
+
top: 5px;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// Transforming hamburger into x
|
|
109
|
+
&.is-selected {
|
|
110
|
+
color: var(--theme-topbar-item-color-current);
|
|
111
|
+
background-color: var(--theme-topbar-item-background-current);
|
|
112
|
+
|
|
113
|
+
span {
|
|
114
|
+
background-color: transparent;
|
|
115
|
+
|
|
116
|
+
&:before,
|
|
117
|
+
&:after {
|
|
118
|
+
top: 0;
|
|
119
|
+
transform: rotate(-45deg);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
&:after { transform: rotate(45deg); }
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
&:hover {
|
|
127
|
+
color: var(--theme-topbar-item-color-hover);
|
|
128
|
+
background-color: var(--theme-topbar-item-background-hover);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
.s-navigation {
|
|
133
|
+
.s-navigation--item:not(.is-selected) {
|
|
134
|
+
color: var(--theme-topbar-item-color);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
.s-navigation--item:not(.is-selected):hover {
|
|
138
|
+
color: var(--theme-topbar-item-color-hover);
|
|
139
|
+
background-color: var(--theme-topbar-item-background-hover);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
// ===========================================================================
|
|
145
|
+
// $ LIGHT
|
|
146
|
+
// ---------------------------------------------------------------------------
|
|
147
|
+
.s-topbar__light {
|
|
148
|
+
// TODO this only works 100% perfectly in light mode, due to child elements inheriting current theme colors
|
|
149
|
+
// TODO extend forced light mode instead of overriding
|
|
150
|
+
|
|
151
|
+
--theme-topbar-background-color: @black-025;
|
|
152
|
+
|
|
153
|
+
// Search input
|
|
154
|
+
--theme-topbar-search-color: @black-700;
|
|
155
|
+
--theme-topbar-search-background: @white;
|
|
156
|
+
--theme-topbar-search-placeholder: @black-200;
|
|
157
|
+
--theme-topbar-search-border: @black-200;
|
|
158
|
+
--theme-topbar-search-border-focus: @blue-300;
|
|
159
|
+
--theme-topbar-search-shadow-focus: 0 0 0 @su4 var(--focus-ring);
|
|
160
|
+
|
|
161
|
+
// Search switcher
|
|
162
|
+
--theme-topbar-select-color: @black-700;
|
|
163
|
+
--theme-topbar-select-background: @black-050;
|
|
164
|
+
|
|
165
|
+
// Items
|
|
166
|
+
--theme-topbar-item-color: @black-600;
|
|
167
|
+
--theme-topbar-item-color-hover: @black-800;
|
|
168
|
+
--theme-topbar-item-background-hover: @black-075;
|
|
169
|
+
--theme-topbar-item-color-current: @black;
|
|
170
|
+
--theme-topbar-item-border-current: var(--theme-primary-color);
|
|
171
|
+
|
|
172
|
+
// TODO HACK remove everything below once light/dark topbars are inheriting forced themes correctly
|
|
173
|
+
// redefine the variables for extra contrast in high-contrast mode
|
|
174
|
+
.highcontrast-mode({
|
|
175
|
+
// Topbar items
|
|
176
|
+
--theme-topbar-item-color: @black-800;
|
|
177
|
+
--theme-topbar-item-color-hover: @black-900;
|
|
178
|
+
--theme-topbar-item-background-hover: @black-075;
|
|
179
|
+
--theme-topbar-item-color-current: @black;
|
|
180
|
+
});
|
|
181
|
+
|
|
182
|
+
--scrollbar: hsla(0, 0%, 0%, 0.2);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
// ===========================================================================
|
|
186
|
+
// $ DARK
|
|
187
|
+
// ---------------------------------------------------------------------------
|
|
188
|
+
.s-topbar__dark {
|
|
189
|
+
// TODO this only works 100% perfectly in dark mode, due to child elements inheriting current theme colors
|
|
190
|
+
// TODO extend forced dark mode instead of overriding
|
|
191
|
+
|
|
192
|
+
@topbar-actual-background: @black-800;
|
|
193
|
+
// TODO
|
|
194
|
+
#calc-topbar-lightness-increase() when (lightness(@topbar-actual-background) < 15%) {
|
|
195
|
+
@topbar-search-lightness-increase: 20%;
|
|
196
|
+
}
|
|
197
|
+
#calc-topbar-lightness-increase() when not (lightness(@topbar-actual-background) < 15%) {
|
|
198
|
+
@topbar-search-lightness-increase: 10%;
|
|
199
|
+
}
|
|
200
|
+
#calc-topbar-lightness-increase();
|
|
201
|
+
|
|
202
|
+
--theme-topbar-background-color: @topbar-actual-background;
|
|
203
|
+
|
|
204
|
+
// Search input
|
|
205
|
+
--theme-topbar-search-color: lighten(@topbar-actual-background, 80% + @topbar-search-lightness-increase);
|
|
206
|
+
--theme-topbar-search-background: lighten(@topbar-actual-background, @topbar-search-lightness-increase);
|
|
207
|
+
--theme-topbar-search-placeholder: lighten(@topbar-actual-background, 60% + @topbar-search-lightness-increase);
|
|
208
|
+
--theme-topbar-search-border: lighten(@topbar-actual-background, 20% + @topbar-search-lightness-increase);
|
|
209
|
+
--theme-topbar-search-border-focus: lighten(@topbar-actual-background, 45% + @topbar-search-lightness-increase);
|
|
210
|
+
--theme-topbar-search-shadow-focus: 0 0 0 @su4 fade(@white, 30%);
|
|
211
|
+
|
|
212
|
+
// Search switcher
|
|
213
|
+
--theme-topbar-select-color: lighten(@topbar-actual-background, 60% + @topbar-search-lightness-increase);
|
|
214
|
+
--theme-topbar-select-background: lighten(@topbar-actual-background, 10% + @topbar-search-lightness-increase);
|
|
215
|
+
|
|
216
|
+
// Items
|
|
217
|
+
--theme-topbar-item-color: @black-025;
|
|
218
|
+
--theme-topbar-item-color-hover: @white;
|
|
219
|
+
--theme-topbar-item-background-hover: @black-700;
|
|
220
|
+
--theme-topbar-item-color-current: @white;
|
|
221
|
+
--theme-topbar-item-border-current: var(--theme-primary-color);
|
|
222
|
+
|
|
223
|
+
// Themed border accent
|
|
224
|
+
--theme-topbar-accent-border: none;
|
|
225
|
+
|
|
226
|
+
// TODO HACK remove everything below once light/dark topbars are inheriting forced themes correctly
|
|
227
|
+
// redefine the variables for extra contrast in high-contrast mode
|
|
228
|
+
.highcontrast-mode({
|
|
229
|
+
// Topbar items
|
|
230
|
+
--theme-topbar-item-color: @white;
|
|
231
|
+
--theme-topbar-item-color-hover: @white;
|
|
232
|
+
--theme-topbar-item-background-hover: @black-700;
|
|
233
|
+
--theme-topbar-item-color-current: @white;
|
|
234
|
+
|
|
235
|
+
.s-badge {
|
|
236
|
+
border-color: currentColor;
|
|
237
|
+
}
|
|
238
|
+
});
|
|
239
|
+
|
|
240
|
+
--scrollbar: hsla(0, 0%, 100%, 0.2);
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
// ===========================================================================
|
|
244
|
+
// $ CONTENT & CTAS
|
|
245
|
+
// ---------------------------------------------------------------------------
|
|
246
|
+
.s-topbar .s-topbar--content,
|
|
247
|
+
.s-topbar .s-topbar--ctas {
|
|
248
|
+
display: flex;
|
|
249
|
+
height: 100%;
|
|
250
|
+
.list-reset;
|
|
251
|
+
|
|
252
|
+
& > li {
|
|
253
|
+
display: inline-flex;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
.s-topbar .s-topbar--content {
|
|
258
|
+
overflow-x: auto; // Allow this content to scroll if it gets too long
|
|
259
|
+
@scrollbar-styles(); // Style the scrollbars
|
|
260
|
+
margin-left: auto; // Push this section as far to the right as possible
|
|
261
|
+
|
|
262
|
+
.s-topbar--item {
|
|
263
|
+
color: var(--theme-topbar-item-color);
|
|
264
|
+
display: inline-flex;
|
|
265
|
+
align-items: center;
|
|
266
|
+
padding: 0 (@su12 - @su2);
|
|
267
|
+
text-decoration: none;
|
|
268
|
+
white-space: nowrap;
|
|
269
|
+
position: relative;
|
|
270
|
+
|
|
271
|
+
&:hover,
|
|
272
|
+
&:focus,
|
|
273
|
+
&.is-selected,
|
|
274
|
+
&.is-selected:hover,
|
|
275
|
+
&.is-selected:focus {
|
|
276
|
+
color: var(--theme-topbar-item-color-hover);
|
|
277
|
+
background-color: var(--theme-topbar-item-background-hover);
|
|
278
|
+
text-decoration: none;
|
|
279
|
+
outline: none;
|
|
280
|
+
|
|
281
|
+
.s-activity-indicator {
|
|
282
|
+
top: calc(50% - 18px);
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
.svg-icon {
|
|
287
|
+
vertical-align: text-top;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
.s-activity-indicator {
|
|
291
|
+
position: absolute;
|
|
292
|
+
top: calc(50% - 14px);
|
|
293
|
+
right: 2px;
|
|
294
|
+
transition: top @te-smooth 0.15s;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
// CTAs: Sign in, Sign up, etc. on the far right
|
|
300
|
+
.s-topbar .s-topbar--ctas {
|
|
301
|
+
padding-left: @su4;
|
|
302
|
+
padding-right: @su8;
|
|
303
|
+
overflow-x: auto; // Allow this content to scroll if it gets too long
|
|
304
|
+
@scrollbar-styles(); // Style the scrollbars
|
|
305
|
+
margin-left: auto; // Push this section as far to the right as possible
|
|
306
|
+
|
|
307
|
+
li + li {
|
|
308
|
+
margin-left: @su4;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
.s-topbar--item {
|
|
312
|
+
align-self: center;
|
|
313
|
+
padding-top: @su8;
|
|
314
|
+
padding-bottom: @su8;
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
// ===========================================================================
|
|
319
|
+
// $ NOTICE
|
|
320
|
+
// ---------------------------------------------------------------------------
|
|
321
|
+
.s-topbar--notice {
|
|
322
|
+
&:extend(.s-badge);
|
|
323
|
+
|
|
324
|
+
text-transform: uppercase;
|
|
325
|
+
font-size: @fs-fine;
|
|
326
|
+
font-weight: 700;
|
|
327
|
+
margin-left: @su8;
|
|
328
|
+
margin-right: @su8;
|
|
329
|
+
flex-shrink: 0;
|
|
330
|
+
|
|
331
|
+
.badge-styles(transparent, transparent, var(--theme-topbar-item-color));
|
|
332
|
+
|
|
333
|
+
&:hover,
|
|
334
|
+
&:focus {
|
|
335
|
+
.badge-styles(var(--theme-topbar-item-background-hover), var(--theme-topbar-item-background-hover), var(--theme-topbar-item-color-hover));
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
&.is-unread {
|
|
339
|
+
.badge-styles(var(--theme-primary-color), var(--theme-primary-color), var(--white));
|
|
340
|
+
|
|
341
|
+
&:hover,
|
|
342
|
+
&:focus {
|
|
343
|
+
.badge-styles(var(--theme-primary-600), var(--theme-primary-600), var(--white));
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
// ===========================================================================
|
|
349
|
+
// $ SEARCHBAR
|
|
350
|
+
// ---------------------------------------------------------------------------
|
|
351
|
+
.s-topbar .s-topbar--searchbar {
|
|
352
|
+
@inputLineHeights: @lh-sm; // Ensure the line heights between the elements match up
|
|
353
|
+
padding: 0 @su8;
|
|
354
|
+
display: flex;
|
|
355
|
+
align-items: center;
|
|
356
|
+
flex-shrink: 10000; // Force the searchbar to shrink as much as possible if there's no extra space
|
|
357
|
+
flex-grow: 1; //...but allow it to grow if there *is* extra space
|
|
358
|
+
|
|
359
|
+
.s-topbar--searchbar--input-group {
|
|
360
|
+
position: relative;
|
|
361
|
+
flex-grow: 1;
|
|
362
|
+
|
|
363
|
+
.s-input {
|
|
364
|
+
border-color: var(--theme-topbar-search-border);
|
|
365
|
+
background-color: var(--theme-topbar-search-background);
|
|
366
|
+
box-shadow: var(--theme-topbar-search-shadow);
|
|
367
|
+
color: var(--theme-topbar-search-color);
|
|
368
|
+
display: block;
|
|
369
|
+
line-height: @inputLineHeights;
|
|
370
|
+
|
|
371
|
+
&:focus {
|
|
372
|
+
border-color: var(--theme-topbar-search-border-focus);
|
|
373
|
+
box-shadow: var(--theme-topbar-search-shadow-focus);
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
&::placeholder {
|
|
377
|
+
color: var(--theme-topbar-search-placeholder);
|
|
378
|
+
font-style: normal;
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
.s-input-icon {
|
|
383
|
+
color: var(--theme-topbar-search-placeholder);
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
.s-select {
|
|
388
|
+
.wmx2;
|
|
389
|
+
|
|
390
|
+
align-self: stretch;
|
|
391
|
+
margin-right: -1px;
|
|
392
|
+
color: var(--theme-topbar-select-color);
|
|
393
|
+
|
|
394
|
+
&:before,
|
|
395
|
+
&:after {
|
|
396
|
+
z-index: @zi-active; // Make sure our focus ring is above the search input
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
.s-select > select {
|
|
401
|
+
.brr0;
|
|
402
|
+
height: 100%;
|
|
403
|
+
line-height: @inputLineHeights;
|
|
404
|
+
|
|
405
|
+
border-color: var(--theme-topbar-search-border);
|
|
406
|
+
background-color: var(--theme-topbar-select-background);
|
|
407
|
+
color: var(--theme-topbar-select-color);
|
|
408
|
+
|
|
409
|
+
&:focus {
|
|
410
|
+
border-color: var(--theme-topbar-search-border-focus);
|
|
411
|
+
box-shadow: var(--theme-topbar-search-shadow-focus);
|
|
412
|
+
z-index: @zi-selected;
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
// Drop the left border of the search input when it is next to the select
|
|
417
|
+
.s-select + .s-topbar--searchbar--input-group > .s-input {
|
|
418
|
+
.blr0;
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
#stacks-internals #screen-sm({
|
|
422
|
+
display: none;
|
|
423
|
+
position: absolute;
|
|
424
|
+
left: 0;
|
|
425
|
+
right: 0;
|
|
426
|
+
top: 100%;
|
|
427
|
+
max-width: 100%;
|
|
428
|
+
padding: @su8 @su12;
|
|
429
|
+
background: var(--theme-topbar-item-background-hover);
|
|
430
|
+
|
|
431
|
+
&.s-topbar--searchbar__open {
|
|
432
|
+
display: flex;
|
|
433
|
+
max-width: none;
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
.s-select {
|
|
437
|
+
.w25;
|
|
438
|
+
}
|
|
439
|
+
});
|
|
440
|
+
}
|