picocrank 1.25.0 → 1.25.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.
@@ -15,17 +15,46 @@ html {
15
15
  --waffle-syrup: #8b4513;
16
16
  --waffle-butter: #ffd966;
17
17
  --waffle-berry: #c23b5a;
18
+ --waffle-accent: #a05020;
19
+
20
+ --body-bg-color: var(--waffle-cream);
21
+ --surface-bg-color: #fffdf6;
22
+ --standout-bg-color: var(--waffle-batter);
23
+ --section-header-bg-color: var(--waffle-batter);
24
+ --shadow-color: rgba(139, 69, 19, 0.12);
18
25
 
19
26
  --text-color: var(--waffle-syrup);
27
+ --muted-text-color: #a88860;
28
+ --link-color: var(--waffle-accent);
20
29
  --border-color: #e0c896;
21
- --standout-bg-color: var(--waffle-batter);
30
+
22
31
  --hover-background-color: #f0d9a8;
23
32
  --hover-text-color: var(--waffle-syrup);
33
+
34
+ --header-fg-color: var(--waffle-cream);
24
35
  --header-hover-background-color: var(--waffle-crust);
25
36
  --header-hover-text-color: var(--waffle-cream);
37
+ --header-button-hover-bg-color: var(--waffle-crust);
38
+
39
+ --sidebar-bg-color: var(--waffle-sidebar);
40
+ --sidebar-link-color: var(--waffle-syrup);
41
+ --sidebar-hover-bg-color: var(--hover-background-color);
42
+ --sidebar-border-color: var(--waffle-crust);
43
+
44
+ --input-bg-color: var(--waffle-cream);
45
+ --input-fg-color: var(--waffle-syrup);
46
+ --control-option-bg-color: var(--waffle-butter);
47
+ --control-hover-bg-color: #ffe14d;
48
+
26
49
  --disabled-background-color: #efe4cb;
27
50
  --disabled-text-color: #a88860;
28
51
 
52
+ --button-good-bg: #9ccc65;
53
+ --button-good-hover-bg: #9ccc65;
54
+ --button-bad-bg: var(--waffle-berry);
55
+ --button-bad-hover-bg: var(--waffle-berry);
56
+ --button-on-accent-fg: #fff8e7;
57
+
29
58
  --karma-good: #b8d98a;
30
59
  --karma-bad: #f0a0a8;
31
60
  --karma-warning: var(--waffle-butter);
@@ -46,8 +75,8 @@ html {
46
75
  }
47
76
 
48
77
  body {
49
- background-color: var(--waffle-cream);
50
- color: var(--waffle-syrup);
78
+ background-color: var(--body-bg-color);
79
+ color: var(--text-color);
51
80
  background-image:
52
81
  repeating-linear-gradient(
53
82
  0deg,
@@ -68,142 +97,11 @@ body {
68
97
  header {
69
98
  background: linear-gradient(180deg, var(--waffle-crust), #a86e2e);
70
99
  border-bottom: 3px solid var(--waffle-syrup);
71
- color: var(--waffle-cream);
72
100
  box-shadow: 0 2px 8px rgba(139, 69, 19, 0.25);
73
101
  }
74
102
 
75
- header a,
76
- header button,
77
- header .button {
78
- color: var(--waffle-cream);
79
- }
80
-
81
- #sidebar-toggler-button,
82
- #sidebar-toggler-button.neutral,
83
- header .theme-toggle,
84
- header .theme-toggle.neutral,
85
- header .search-trigger,
86
- header .search-trigger.neutral {
87
- background-color: transparent;
88
- border: 0;
89
- color: var(--waffle-cream);
90
- }
91
-
92
- #sidebar-toggler-button:hover,
93
- header .theme-toggle:hover,
94
- header .search-trigger:hover,
95
- header .user-info:hover {
96
- background-color: var(--header-hover-background-color);
97
- color: var(--header-hover-text-color);
98
- }
99
-
100
- section {
101
- background-color: #fffdf6;
102
- border: 1px solid var(--border-color);
103
- box-shadow: 0 2px 6px rgba(139, 69, 19, 0.12);
104
- }
105
-
106
103
  section .section-header {
107
- background-color: var(--waffle-batter);
108
- border-bottom: 2px solid var(--waffle-crust);
109
- color: var(--waffle-syrup);
110
- }
111
-
112
- html[data-theme="dark"] {
113
- --waffle-foreground: #3a1f08;
114
- --waffle-foreground-muted: #5c3a18;
115
- --text-color: var(--waffle-foreground);
116
- --hover-background-color: #f0d9a8;
117
- --hover-text-color: var(--waffle-foreground);
118
- --border-color: #c9a66a;
119
- --standout-bg-color: var(--waffle-batter);
120
- --disabled-text-color: #7a6548;
121
- }
122
-
123
- html[data-theme="dark"] body {
124
- color: var(--waffle-foreground);
125
- }
126
-
127
- html[data-theme="dark"] section {
128
- background-color: var(--waffle-batter);
129
- color: var(--waffle-foreground);
130
- }
131
-
132
- html[data-theme="dark"] section .section-header,
133
- html[data-theme="dark"] section .section-subheader {
134
- background-color: var(--waffle-section);
135
104
  border-bottom: 2px solid var(--waffle-crust);
136
- color: var(--waffle-foreground);
137
- }
138
-
139
- html[data-theme="dark"] aside,
140
- html[data-theme="dark"] #sidebar {
141
- background-color: var(--waffle-sidebar);
142
- color: var(--waffle-foreground);
143
- border-color: var(--waffle-crust);
144
- box-shadow: 0.15em 0 0.6em rgba(139, 69, 19, 0.22);
145
- }
146
-
147
- html[data-theme="dark"] aside a,
148
- html[data-theme="dark"] aside a:visited,
149
- html[data-theme="dark"] aside .nav-section-header {
150
- color: var(--waffle-foreground) !important;
151
- }
152
-
153
- html[data-theme="dark"] aside a:hover,
154
- html[data-theme="dark"] aside a:focus-visible,
155
- html[data-theme="dark"] aside :is(ul, menu) li a:hover,
156
- html[data-theme="dark"] aside :is(ul, menu) li a:focus-visible,
157
- html[data-theme="dark"] aside .nav-section-header:hover,
158
- html[data-theme="dark"] aside .nav-section-header:focus-visible {
159
- background-color: var(--hover-background-color);
160
- color: var(--hover-text-color) !important;
161
- }
162
-
163
- html[data-theme="dark"] a {
164
- color: #6b3410;
165
- }
166
-
167
- html[data-theme="dark"] a:visited {
168
- color: #5c2d0e;
169
- }
170
-
171
- html[data-theme="dark"] button,
172
- html[data-theme="dark"] .button {
173
- color: var(--waffle-foreground);
174
- }
175
-
176
- html[data-theme="dark"] input,
177
- html[data-theme="dark"] select,
178
- html[data-theme="dark"] textarea {
179
- background-color: var(--waffle-cream);
180
- border-color: var(--border-color);
181
- color: var(--waffle-foreground);
182
- }
183
-
184
- html[data-theme="dark"] table,
185
- html[data-theme="dark"] th,
186
- html[data-theme="dark"] td {
187
- color: var(--waffle-foreground);
188
- }
189
-
190
- html[data-theme="dark"] table.row-hover tr:hover td {
191
- background-color: var(--hover-background-color);
192
- color: var(--waffle-foreground);
193
- }
194
-
195
- html[data-theme="dark"] pre {
196
- background-color: var(--waffle-batter);
197
- border-color: var(--border-color);
198
- color: var(--waffle-foreground);
199
- }
200
-
201
- html[data-theme="dark"] footer {
202
- color: var(--waffle-foreground-muted);
203
- }
204
-
205
- html[data-theme="dark"] .subtle {
206
- color: var(--waffle-foreground-muted);
207
105
  }
208
106
 
209
107
  button,
@@ -220,23 +118,49 @@ button:hover,
220
118
 
221
119
  button.good,
222
120
  .button.good {
223
- background-color: #9ccc65;
224
- border-color: #6a9a38;
225
121
  color: #2a4010;
226
122
  }
227
123
 
228
124
  button.bad,
229
125
  .button.bad {
230
- background-color: var(--waffle-berry);
231
126
  border-color: #8a2040;
232
- color: #fff8e7;
233
- }
234
-
235
- a {
236
- color: #a05020;
237
127
  }
238
128
 
239
129
  footer {
240
- color: var(--waffle-syrup);
241
130
  border-top: 1px dashed var(--border-color);
242
131
  }
132
+
133
+ html[data-theme="dark"] {
134
+ --waffle-foreground: #3a1f08;
135
+ --waffle-foreground-muted: #5c3a18;
136
+ --waffle-accent-dark: #6b3410;
137
+
138
+ --text-color: var(--waffle-foreground);
139
+ --muted-text-color: var(--waffle-foreground-muted);
140
+ --link-color: var(--waffle-accent-dark);
141
+ --border-color: #c9a66a;
142
+ --standout-bg-color: var(--waffle-batter);
143
+ --hover-background-color: #f0d9a8;
144
+ --hover-text-color: var(--waffle-foreground);
145
+ --disabled-text-color: #7a6548;
146
+
147
+ --body-bg-color: var(--waffle-cream);
148
+ --surface-bg-color: var(--waffle-batter);
149
+ --section-header-bg-color: var(--waffle-section);
150
+ --sidebar-bg-color: var(--waffle-sidebar);
151
+ --sidebar-link-color: var(--waffle-foreground);
152
+ --sidebar-hover-bg-color: var(--hover-background-color);
153
+ --sidebar-border-color: var(--waffle-crust);
154
+
155
+ --input-bg-color: var(--waffle-cream);
156
+ --input-fg-color: var(--waffle-foreground);
157
+ }
158
+
159
+ html[data-theme="dark"] section .section-header,
160
+ html[data-theme="dark"] section .section-subheader {
161
+ border-bottom: 2px solid var(--waffle-crust);
162
+ }
163
+
164
+ html[data-theme="dark"] a:visited {
165
+ color: #5c2d0e;
166
+ }
@@ -205,7 +205,7 @@
205
205
  .header-actions :deep(button) {
206
206
  border: 0;
207
207
  border-radius: 0;
208
- color: var(--header-text-color, #fff);
208
+ color: var(--header-fg-color, var(--header-text-color, #fff));
209
209
  background-color: transparent;
210
210
  align-self: stretch;
211
211
  display: inline-flex;
@@ -227,7 +227,7 @@
227
227
  #sidebar-toggler-button {
228
228
  border: 0;
229
229
  border-radius: 0;
230
- color: var(--header-text-color, #fff);
230
+ color: var(--header-fg-color, var(--header-text-color, #fff));
231
231
  background-color: transparent;
232
232
  align-self: stretch;
233
233
  display: inline-flex;
@@ -260,7 +260,7 @@ header .search-trigger,
260
260
  header .search-trigger.neutral {
261
261
  border: 0;
262
262
  border-radius: 0;
263
- color: var(--header-text-color, #fff);
263
+ color: var(--header-fg-color, var(--header-text-color, #fff));
264
264
  background-color: transparent;
265
265
  align-self: stretch;
266
266
  height: 100%;
@@ -414,7 +414,7 @@ button {
414
414
  text-align: left;
415
415
  font-weight: 600;
416
416
  font-size: 1em;
417
- color: inherit;
417
+ color: var(--text-color);
418
418
  background: transparent;
419
419
  border-radius: 0;
420
420
  cursor: pointer;
@@ -422,7 +422,7 @@ button {
422
422
 
423
423
  .nav-section-header:hover,
424
424
  .nav-section-header:focus-visible {
425
- background-color: var(--hover-background-color);
425
+ background-color: var(--sidebar-hover-bg-color);
426
426
  color: var(--hover-text-color);
427
427
  }
428
428
 
@@ -437,14 +437,8 @@ button {
437
437
  text-align: center;
438
438
  }
439
439
 
440
- html[data-theme="dark"] {
441
- .nav-section-header {
442
- color: #f8f9fa;
443
- }
444
-
445
- .supplemental-links {
446
- border-top: 1px solid #444;
447
- }
440
+ .supplemental-links {
441
+ border-top: 1px solid var(--border-color);
448
442
  }
449
443
 
450
444
  @media (max-width: 768px) {
@@ -105,6 +105,7 @@ a {
105
105
  padding: .75em;
106
106
  border-radius: 0;
107
107
  position: relative;
108
+ color: var(--text-color);
108
109
  }
109
110
 
110
111
  a.active {
@@ -145,23 +146,13 @@ li.disabled a {
145
146
 
146
147
  .separator {
147
148
  height: 1px;
148
- background-color: #eee;
149
+ background-color: var(--border-color);
149
150
  margin: 0.5rem 0.75rem;
150
151
  }
151
152
 
152
- html[data-theme="dark"] {
153
- a {
154
- color: #f8f9fa;
155
- }
156
-
157
- a:hover,
158
- a:focus-visible {
159
- background-color: var(--hover-background-color);
160
- color: var(--hover-text-color, #fff);
161
- }
162
-
163
- .separator {
164
- background-color: #444;
165
- }
153
+ a:hover,
154
+ a:focus-visible {
155
+ background-color: var(--sidebar-hover-bg-color);
156
+ color: var(--hover-text-color);
166
157
  }
167
158
  </style>
@@ -1361,7 +1361,7 @@ onBeforeUnmount(() => {
1361
1361
  <style scoped>
1362
1362
  table thead th.sortable:hover {
1363
1363
  cursor: pointer;
1364
- color: #0366d6;
1364
+ color: var(--table-header-active-fg);
1365
1365
  }
1366
1366
 
1367
1367
  table thead th.filterable {
@@ -1369,12 +1369,12 @@ table thead th.filterable {
1369
1369
  }
1370
1370
 
1371
1371
  table thead th.filtered {
1372
- color: #0366d6;
1372
+ color: var(--table-header-active-fg);
1373
1373
  }
1374
1374
 
1375
1375
  table thead th.menu-open {
1376
- background-color: var(--hover-background-color, rgba(3, 102, 214, 0.08));
1377
- color: var(--text-color, inherit);
1376
+ background-color: var(--table-header-active-bg);
1377
+ color: var(--table-header-fg);
1378
1378
  }
1379
1379
 
1380
1380
  table.loading tbody {
@@ -146,7 +146,7 @@ defineExpose({
146
146
  border-radius: 0;
147
147
  cursor: pointer;
148
148
  font-size: 1em;
149
- color: var(--text-muted, #666);
149
+ color: var(--tab-fg);
150
150
  transition: all 0.2s ease;
151
151
  white-space: nowrap;
152
152
  position: relative;
@@ -158,13 +158,13 @@ defineExpose({
158
158
  }
159
159
 
160
160
  .tab-button.active {
161
- color: var(--primary-color, #007bff);
162
- border-bottom-color: var(--primary-color, #007bff);
161
+ color: var(--tab-active-fg);
162
+ border-bottom-color: var(--tab-active-fg);
163
163
  font-weight: bold;
164
164
  }
165
165
 
166
166
  .tab-button:focus {
167
- outline: 2px solid var(--primary-color, #007bff);
167
+ outline: 2px solid var(--tab-focus-outline-color);
168
168
  outline-offset: -2px;
169
169
  border-radius: 0;
170
170
  }
@@ -196,27 +196,6 @@ defineExpose({
196
196
  }
197
197
  }
198
198
 
199
- /* Dark theme support */
200
- html[data-theme="dark"] {
201
- .tabs-header {
202
- border-bottom-color: var(--border-color, #444);
203
- }
204
-
205
- .tab-button {
206
- color: var(--text-muted, #999);
207
- }
208
-
209
- .tab-button:hover {
210
- color: var(--text-color, #fff);
211
- background-color: var(--hover-background-color, #333);
212
- }
213
-
214
- .tab-button.active {
215
- color: var(--primary-color, #60a5fa);
216
- border-bottom-color: var(--primary-color, #60a5fa);
217
- }
218
- }
219
-
220
199
  /* Responsive */
221
200
  @media (max-width: 768px) {
222
201
  .tabs-header {
@@ -1,7 +1,13 @@
1
1
  <template>
2
- <label class="theme-switcher">
2
+ <label :class="['theme-switcher', { 'theme-switcher--compact': compact }]">
3
3
  <span v-if="label" class="theme-switcher-label">{{ label }}</span>
4
- <select :value="themePreference" @change="onThemeChange">
4
+ <select
5
+ ref="selectRef"
6
+ :id="selectId || undefined"
7
+ :value="themePreference"
8
+ :aria-label="compact ? (label || 'Active theme') : undefined"
9
+ @change="onThemeChange"
10
+ >
5
11
  <option value="">{{ defaultOptionLabel }}</option>
6
12
  <option
7
13
  v-for="name in availableThemes"
@@ -12,7 +18,7 @@
12
18
  </option>
13
19
  </select>
14
20
  </label>
15
- <p v-if="showEmptyHint && availableThemes.length === 0" class="subtle theme-switcher-hint">
21
+ <p v-if="showEmptyHint && !compact && availableThemes.length === 0" class="subtle theme-switcher-hint">
16
22
  <slot name="empty">
17
23
  No drop-in themes found. Add <code>public/themes/&lt;name&gt;/theme.css</code>
18
24
  or set <code>include-supplemental-themes</code> to list bundled supplemental themes.
@@ -20,8 +26,12 @@
20
26
  </p>
21
27
  </template>
22
28
 
29
+ <script>
30
+ export const HEADER_THEME_SWITCHER_SELECT_ID = 'picocrank-header-theme-switcher'
31
+ </script>
32
+
23
33
  <script setup>
24
- import { onMounted, watch } from 'vue'
34
+ import { onMounted, ref, watch } from 'vue'
25
35
  import { useCustomTheme } from '../composables/useCustomTheme.js'
26
36
 
27
37
  const props = defineProps({
@@ -31,7 +41,7 @@ const props = defineProps({
31
41
  },
32
42
  defaultOptionLabel: {
33
43
  type: String,
34
- default: 'Default (Femtocrank)',
44
+ default: 'Default (Femtocrank only)',
35
45
  },
36
46
  includeSupplementalThemes: {
37
47
  type: Boolean,
@@ -53,6 +63,14 @@ const props = defineProps({
53
63
  type: Boolean,
54
64
  default: false,
55
65
  },
66
+ compact: {
67
+ type: Boolean,
68
+ default: false,
69
+ },
70
+ selectId: {
71
+ type: String,
72
+ default: undefined,
73
+ },
56
74
  })
57
75
 
58
76
  const emit = defineEmits(['change'])
@@ -66,6 +84,17 @@ const {
66
84
  configure,
67
85
  } = useCustomTheme()
68
86
 
87
+ const selectRef = ref(null)
88
+
89
+ function focusSelect() {
90
+ selectRef.value?.focus()
91
+ selectRef.value?.scrollIntoView({ block: 'nearest', inline: 'nearest' })
92
+ }
93
+
94
+ defineExpose({
95
+ focus: focusSelect,
96
+ })
97
+
69
98
  function syncOptions() {
70
99
  configure({
71
100
  includeSupplementalThemes: props.includeSupplementalThemes,
@@ -113,6 +142,16 @@ onMounted(() => {
113
142
  min-width: 14rem;
114
143
  }
115
144
 
145
+ .theme-switcher--compact {
146
+ flex-wrap: nowrap;
147
+ gap: 0;
148
+ }
149
+
150
+ .theme-switcher--compact select {
151
+ min-width: 10rem;
152
+ max-width: 13.5rem;
153
+ }
154
+
116
155
  .theme-switcher-hint {
117
156
  margin: 0.75rem 0 0;
118
157
  }
@@ -97,7 +97,7 @@ function handleLinkClick(callback = null) {
97
97
  padding: 0.5em 0.75em;
98
98
  border-radius: 0.25em;
99
99
  text-decoration: none;
100
- color: var(--header-text-color, inherit);
100
+ color: var(--header-fg-color, var(--header-text-color, inherit));
101
101
  transition: background-color 0.15s ease;
102
102
  white-space: nowrap;
103
103
  border: 0;
@@ -124,7 +124,7 @@ function handleLinkClick(callback = null) {
124
124
 
125
125
  html[data-theme="dark"] {
126
126
  .topbar-link {
127
- color: var(--header-text-color, #f8f9fa);
127
+ color: var(--header-fg-color, var(--header-text-color, #f8f9fa));
128
128
  }
129
129
 
130
130
  .separator {
@@ -2,6 +2,10 @@
2
2
  <Navigation ref="navigation">
3
3
  <Header username = "Guest" @toggleSidebar="toggleSidebar" @logoClick="goToIndex" @userClick="goToUserDetails" title = "PicoCrank" :logoUrl="logoUrl" :sidebarEnabled="sidebarEnabled" :navigation="navigation" :topBarEnabled="topBarEnabled" :showBranding="brandingEnabled" :breadcrumbs="breadcrumbsEnabled" :themeToggleEnabled="themeToggleEnabled">
4
4
  <template #toolbar>
5
+ <ExampleHeaderThemeSwitcher
6
+ v-if="themeSwitcherEnabled"
7
+ :include-supplemental-themes="includeSupplementalThemes"
8
+ />
5
9
  <QuickSearch
6
10
  v-if="quickSearchEnabled"
7
11
  ref="quickSearchRef"
@@ -37,6 +41,7 @@
37
41
  import { Pin02Icon, UserIcon } from '@hugeicons/core-free-icons'
38
42
 
39
43
  import QuickSearch from './../components/QuickSearch.vue'
44
+ import ExampleHeaderThemeSwitcher from './ExampleHeaderThemeSwitcher.vue'
40
45
  import Navigation from './../components/Navigation.vue'
41
46
  import NotificationPopups from './../components/NotificationPopups.vue'
42
47
  import '../../styles.css'
@@ -54,6 +59,8 @@
54
59
  const quickSearchEnabled = ref(true);
55
60
  const dummySearchFetchEnabled = ref(false);
56
61
  const themeToggleEnabled = ref(true);
62
+ const themeSwitcherEnabled = ref(true);
63
+ const includeSupplementalThemes = ref(true);
57
64
  const topBarEnabled = ref(false);
58
65
  const breadcrumbsEnabled = ref(false);
59
66
 
@@ -93,6 +100,10 @@
93
100
  themeToggleEnabled.value = !themeToggleEnabled.value;
94
101
  }
95
102
 
103
+ function toggleThemeSwitcherEnabled() {
104
+ themeSwitcherEnabled.value = !themeSwitcherEnabled.value;
105
+ }
106
+
96
107
  function toggleTopBarEnabled() {
97
108
  topBarEnabled.value = !topBarEnabled.value;
98
109
  }
@@ -161,6 +172,8 @@
161
172
  provide('toggleDummySearchFetchEnabled', toggleDummySearchFetchEnabled);
162
173
  provide('themeToggleEnabled', themeToggleEnabled);
163
174
  provide('toggleThemeToggleEnabled', toggleThemeToggleEnabled);
175
+ provide('themeSwitcherEnabled', themeSwitcherEnabled);
176
+ provide('toggleThemeSwitcherEnabled', toggleThemeSwitcherEnabled);
164
177
  provide('topBarEnabled', topBarEnabled);
165
178
  provide('toggleTopBarEnabled', toggleTopBarEnabled);
166
179
  provide('breadcrumbsEnabled', breadcrumbsEnabled);
@@ -0,0 +1,78 @@
1
+ <template>
2
+ <ThemeSwitcher
3
+ v-if="enabled"
4
+ compact
5
+ label=""
6
+ :select-id="HEADER_THEME_SWITCHER_SELECT_ID"
7
+ default-option-label="Default (Femtocrank only)"
8
+ :include-supplemental-themes="includeSupplementalThemes"
9
+ />
10
+ </template>
11
+
12
+ <script setup>
13
+ import ThemeSwitcher, { HEADER_THEME_SWITCHER_SELECT_ID } from '../components/ThemeSwitcher.vue'
14
+
15
+ defineProps({
16
+ enabled: {
17
+ type: Boolean,
18
+ default: true,
19
+ },
20
+ includeSupplementalThemes: {
21
+ type: Boolean,
22
+ default: true,
23
+ },
24
+ })
25
+ </script>
26
+
27
+ <!-- Examples app only: match Header toolbar chrome (see Header search-trigger styles). -->
28
+ <style>
29
+ /*
30
+ * Header renders theme toggle before the toolbar slot; use flex order to swap
31
+ * the drop-in theme selector ahead of the light/dark button without changing Header.
32
+ */
33
+ header .header-actions .theme-switcher--compact {
34
+ order: 1;
35
+ align-self: stretch;
36
+ display: inline-flex;
37
+ align-items: center;
38
+ margin: 0;
39
+ }
40
+
41
+ header .header-actions .theme-toggle {
42
+ order: 2;
43
+ }
44
+
45
+ header .header-actions .quick-search {
46
+ order: 3;
47
+ }
48
+
49
+ header .header-actions .user-info {
50
+ order: 4;
51
+ }
52
+
53
+ header .header-actions .theme-switcher--compact select {
54
+ align-self: stretch;
55
+ height: 100%;
56
+ border: 0;
57
+ border-radius: 0;
58
+ background-color: transparent;
59
+ color: var(--header-fg-color, var(--header-text-color, #fff));
60
+ padding-top: 0;
61
+ padding-bottom: 0;
62
+ padding-left: 0.6em;
63
+ padding-right: 0.6em;
64
+ font-size: small;
65
+ font-family: inherit;
66
+ cursor: pointer;
67
+ }
68
+
69
+ header .header-actions .theme-switcher--compact select:hover {
70
+ background-color: var(--header-hover-background-color);
71
+ color: var(--header-hover-text-color);
72
+ }
73
+
74
+ header .header-actions .theme-switcher--compact select:focus-visible {
75
+ outline: 2px solid var(--header-hover-text-color, #fff);
76
+ outline-offset: -2px;
77
+ }
78
+ </style>