Skip to content
327 linesCodeBlameRaw
1/* The settings window, in the launcher's colours (launcher.css): rows of
2 settings under small headings, each with its switch on the right. */
3:root {
4 --bg: #0f0f11;
5 --fg: #ededf0;
6 --muted: #9a9aa6;
7 --line: #26262c;
8 --surface: #17171b;
9 --accent: #b6a8ff;
10 --accent-ink: #15112e;
11 --error: #ff8a8a;
12 color-scheme: dark;
13}
14* {
15 box-sizing: border-box;
16}
17html,
18body {
19 margin: 0;
20}
21body {
22 background: var(--bg);
23 color: var(--fg);
24 font: 14px/1.45 system-ui, "Segoe UI", Roboto, "Helvetica Neue", sans-serif;
25 -webkit-font-smoothing: antialiased;
26 user-select: none;
27 cursor: default;
28}
29/* g1t's own title bar, when the window has no system frame: fixed at the top, 36px tall. */
30.titlebar {
31 position: fixed;
32 inset: 0 0 auto 0;
33 z-index: 10;
34 height: 36px;
35 display: flex;
36 align-items: center;
37 justify-content: space-between;
38 padding-left: 14px;
39 background: #050507;
40 color: var(--muted);
41 font-size: 12px;
42 font-weight: 500;
43}
44.titlebar[hidden] {
45 display: none;
46}
47.mac .titlebar {
48 padding-left: 78px;
49}
50.mac .titlebar .caption {
51 display: none;
52}
53.titlebar .caption {
54 all: unset;
55 display: inline-flex;
56 align-items: center;
57 justify-content: center;
58 width: 46px;
59 height: 36px;
60}
61.titlebar .caption:hover {
62 background: #c42b1c;
63 color: #fff;
64}
65/* Under it, the page scrolls on its own, so its scrollbar starts below the bar. */
66body.framed .page {
67 position: fixed;
68 inset: 36px 0 0 0;
69 overflow-y: auto;
70}
71main {
72 max-width: 36rem;
73 margin: 0 auto;
74 padding: 1.5rem 1.25rem 1.25rem;
75}
76h1 {
77 font-size: 1.25rem;
78 font-weight: 600;
79 margin: 0 0 0.25rem;
80}
81h2 {
82 font-size: 0.75rem;
83 font-weight: 600;
84 letter-spacing: 0.06em;
85 text-transform: uppercase;
86 color: var(--muted);
87 margin: 0 0 0.25rem;
88}
89p {
90 margin: 0;
91}
92.lede {
93 margin-bottom: 1.5rem;
94}
95.muted {
96 color: var(--muted);
97}
98.small {
99 font-size: 0.8125rem;
100}
101section {
102 margin-bottom: 1.5rem;
103}
104.setting {
105 display: flex;
106 align-items: center;
107 justify-content: space-between;
108 gap: 1rem;
109 padding: 0.75rem 0;
110 border-bottom: 1px solid var(--line);
111}
112section .setting:last-child {
113 border-bottom: 0;
114}
115.setting > span {
116 display: flex;
117 flex-direction: column;
118 gap: 0.125rem;
119 min-width: 0;
120}
121.setting strong {
122 font-weight: 500;
123 overflow-wrap: anywhere;
124}
125.setting .muted {
126 font-size: 0.8125rem;
127}
128.setting.off {
129 opacity: 0.5;
130}
131input[type="checkbox"][role="switch"] {
132 appearance: none;
133 flex: none;
134 width: 36px;
135 height: 20px;
136 margin: 0;
137 border-radius: 999px;
138 background: var(--line);
139 position: relative;
140 transition: background 0.15s;
141}
142input[type="checkbox"][role="switch"]::after {
143 content: "";
144 position: absolute;
145 top: 2px;
146 left: 2px;
147 width: 16px;
148 height: 16px;
149 border-radius: 50%;
150 background: var(--fg);
151 transition: transform 0.15s;
152}
153input[type="checkbox"][role="switch"]:checked {
154 background: var(--accent);
155}
156input[type="checkbox"][role="switch"]:checked::after {
157 transform: translateX(16px);
158 background: var(--accent-ink);
159}
160input:disabled {
161 opacity: 0.5;
162}
163@media (prefers-reduced-motion: reduce) {
164 input[type="checkbox"][role="switch"],
165 input[type="checkbox"][role="switch"]::after {
166 transition: none;
167 }
168}
169button,
170select {
171 flex: none;
172 font: inherit;
173 font-size: 0.8125rem;
174 font-weight: 500;
175 padding: 0.375rem 0.75rem;
176 border-radius: 8px;
177 border: 1px solid var(--line);
178 background: var(--surface);
179 color: var(--fg);
180 cursor: default;
181}
182button:hover,
183select:hover {
184 border-color: #3a3a44;
185}
186.setting > .buttons {
187 flex-direction: row;
188 flex: none;
189 gap: 0.5rem;
190}
191button.primary {
192 background: var(--accent);
193 border-color: var(--accent);
194 color: var(--accent-ink);
195}
196button.primary:hover {
197 filter: brightness(1.06);
198}
199button[hidden] {
200 display: none;
201}
202button:disabled {
203 opacity: 0.6;
204}
205button:focus-visible,
206select:focus-visible,
207input:focus-visible,
208a:focus-visible {
209 outline: 2px solid var(--accent);
210 outline-offset: 2px;
211}
212a {
213 color: var(--muted);
214 text-decoration: underline;
215 text-underline-offset: 3px;
216}
217a:hover {
218 color: var(--fg);
219}
220.error {
221 color: var(--error);
222 font-size: 0.875rem;
223 margin-bottom: 1rem;
224}
225.foot {
226 text-align: center;
227}
228code {
229 font: 0.8125rem ui-monospace, SFMono-Regular, Consolas, monospace;
230}
231/* The runner's state: a dot in its tone, what it is doing, and when it
232 isn't running, why and the fix, with its buttons. */
233.diagnosis {
234 display: flex;
235 align-items: flex-start;
236 gap: 0.75rem;
237 margin: 0.25rem 0 0.5rem;
238 padding: 0.75rem;
239 border: 1px solid var(--line);
240 border-radius: 10px;
241 background: var(--surface);
242}
243.diagnosis-text {
244 display: flex;
245 flex-direction: column;
246 gap: 0.25rem;
247 min-width: 0;
248 flex: 1;
249 font-size: 0.8125rem;
250}
251.diagnosis-text strong {
252 font-size: 0.875rem;
253 font-weight: 500;
254}
255.diagnosis-text .buttons {
256 display: flex;
257 flex-wrap: wrap;
258 gap: 0.5rem;
259 margin-top: 0.25rem;
260}
261.diagnosis-text .buttons:empty {
262 display: none;
263}
264/* With the sandbox, each kind of job it runs: Linux jobs, Windows jobs. */
265.capabilities {
266 display: flex;
267 flex-direction: column;
268 gap: 0.5rem;
269 margin: 0.5rem 0 0;
270 padding: 0.5rem 0 0;
271 border-top: 1px solid var(--line);
272 list-style: none;
273}
274.capabilities[hidden] {
275 display: none;
276}
277.capabilities li {
278 display: flex;
279 align-items: flex-start;
280 gap: 0.5rem;
281}
282.capabilities .dot {
283 margin-top: 0.3rem;
284}
285.dot {
286 flex: none;
287 width: 8px;
288 height: 8px;
289 margin-top: 0.4rem;
290 border-radius: 50%;
291 background: var(--muted);
292}
293.dot.ok {
294 background: #4ade80;
295}
296.dot.working {
297 background: #60a5fa;
298}
299.dot.warning {
300 background: #fbbf24;
301}
302.dot.problem {
303 background: var(--error);
304}
305.warning-note {
306 color: #fbbf24;
307}
308details.log {
309 padding: 0.75rem 0;
310}
311details.log summary {
312 color: var(--muted);
313 font-size: 0.8125rem;
314}
315details.log pre {
316 max-height: 12rem;
317 overflow: auto;
318 margin: 0.5rem 0;
319 padding: 0.5rem;
320 border-radius: 8px;
321 background: #050507;
322 color: var(--muted);
323 font: 0.75rem/1.4 ui-monospace, SFMono-Regular, Consolas, monospace;
324 white-space: pre-wrap;
325 overflow-wrap: anywhere;
326 user-select: text;
327}