Skip to content
327 linesCodeBlameRaw

Pick any line to see why it is the way it is: the commit, the pull request and issue it came from, and what the agent was thinking.

Merge remote-tracking branch 'origin/claude/cool-newton-7nm8r9' into claude/cool-newton-7nm8r91/* 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}
Merge the desktop app's runner: it starts with the app for the signed-in person, sandboxed by default and running nothing where no sandbox is available yet, registers through the site, keeps itself up to date, and says everywhere what it is doing, why it is not, and how to fix it.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}
Merge the desktop app's sandbox: its default runner now starts g1t-runner's sandbox on Windows, macOS and Linux, and says per kind of job (Linux, Windows) what it is doing or why it cannot and how to fix it.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}
Merge the desktop app's runner: it starts with the app for the signed-in person, sandboxed by default and running nothing where no sandbox is available yet, registers through the site, keeps itself up to date, and says everywhere what it is doing, why it is not, and how to fix it.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}

This file's history is long; its oldest lines are credited to the oldest commit read.