Skip to content
928 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.

Checkout tries a failed fetch twice more, after 2 s and 5 s1/*
docs.g1t.sh and status.g1t.sh follow your system's light or dark setting, and each has an Auto, Light and Dark switch that this browser remembers: the docs' in the header (at the foot of the menu on a phone), with code, search, the API reference and its explorer in both themes; the status page's in its header, chosen before anything is drawn; the workspaces guide says where.2 * g1t's docs: Starlight in g1t's own design. A very dark gray base (or a
3 * near-white one, in light: styles/light.css), lavender as the accent for
4 * links and the current page, and quiet typography. Starlight's colours
5 * are mapped onto the g1t tokens once, here, for both themes.
Checkout tries a failed fetch twice more, after 2 s and 5 s6 */
docs.g1t.sh and status.g1t.sh follow your system's light or dark setting, and each has an Auto, Light and Dark switch that this browser remembers: the docs' in the header (at the foot of the menu on a phone), with code, search, the API reference and its explorer in both themes; the status page's in its header, chosen before anything is drawn; the workspaces guide says where.7:root {
Checkout tries a failed fetch twice more, after 2 s and 5 s8 --sl-font: var(--g1t-font-sans);
9 --sl-font-mono: var(--g1t-font-mono);
10
11 /* Lavender is the docs' accent: links, the current page, highlights. */
Merge branch 'worktree-agent-ad7c6d88d93adc817'12 --sl-color-accent-low: color-mix(in srgb, var(--g1t-accent) 14%, var(--g1t-bg));
13 --sl-color-accent: var(--g1t-accent);
docs.g1t.sh and status.g1t.sh follow your system's light or dark setting, and each has an Auto, Light and Dark switch that this browser remembers: the docs' in the header (at the foot of the menu on a phone), with code, search, the API reference and its explorer in both themes; the status page's in its header, chosen before anything is drawn; the workspaces guide says where.14 --sl-color-accent-high: var(--g1t-docs-accent-high);
Checkout tries a failed fetch twice more, after 2 s and 5 s15
16 --sl-color-white: var(--g1t-fg);
17 --sl-color-gray-1: var(--g1t-fg-soft);
18 --sl-color-gray-2: var(--g1t-fg-soft);
19 --sl-color-gray-3: var(--g1t-muted);
20 --sl-color-gray-4: var(--g1t-faint);
21 --sl-color-gray-5: var(--g1t-line);
22 --sl-color-gray-6: var(--g1t-surface);
23 --sl-color-gray-7: var(--g1t-surface);
24 --sl-color-black: var(--g1t-bg);
25
26 --sl-color-bg: var(--g1t-bg);
27 --sl-color-bg-nav: color-mix(in srgb, var(--g1t-bg) 88%, transparent);
28 --sl-color-bg-sidebar: var(--g1t-bg);
29 --sl-color-hairline: var(--g1t-line);
30 --sl-color-hairline-light: var(--g1t-line);
31 --sl-color-hairline-shade: var(--g1t-line);
32 --sl-color-text: var(--g1t-fg-soft);
docs.g1t.sh and status.g1t.sh follow your system's light or dark setting, and each has an Auto, Light and Dark switch that this browser remembers: the docs' in the header (at the foot of the menu on a phone), with code, search, the API reference and its explorer in both themes; the status page's in its header, chosen before anything is drawn; the workspaces guide says where.33 --sl-color-text-accent: var(--g1t-docs-link);
Checkout tries a failed fetch twice more, after 2 s and 5 s34 --sl-color-text-invert: var(--g1t-bg);
35 --sl-color-bg-inline-code: var(--g1t-raised);
36
37 --sl-text-body: 0.9375rem;
38 --sl-line-height: 1.75;
39 --sl-content-width: 46rem;
40 /* The header's row, as tall as the app's top bar (3.5rem), and the tabs
41 beneath it. */
42 --sl-nav-height: 6.25rem;
43 --sl-sidebar-width: 17rem;
Merge site-audit: SEO routes, analytics with consent first in Europe, security page, founder and X account, docs header; the tour opens on the pull request and leads with Code, on the real shell, with Agents and Docs working today44 /* Big enough to tap. */
45 --sl-menu-button-size: 2.5rem;
docs.g1t.sh and status.g1t.sh follow your system's light or dark setting, and each has an Auto, Light and Dark switch that this browser remembers: the docs' in the header (at the foot of the menu on a phone), with code, search, the API reference and its explorer in both themes; the status page's in its header, chosen before anything is drawn; the workspaces guide says where.46}
Checkout tries a failed fetch twice more, after 2 s and 5 s47
Merge the docs' new look: tabs for each section with their own short sidebar, a larger title under its section, a lavender pill for the current page, links in the text's colour on a lavender underline, On this page on a rail, and a header whose right side is g1t.sh, Source, Sign up and one theme button.48/* Starlight's theme select (Auto, Light, Dark), at the foot of the phone
49 menu; the header has its own button (components/ThemeToggle.astro). */
docs.g1t.sh and status.g1t.sh follow your system's light or dark setting, and each has an Auto, Light and Dark switch that this browser remembers: the docs' in the header (at the foot of the menu on a phone), with code, search, the API reference and its explorer in both themes; the status page's in its header, chosen before anything is drawn; the workspaces guide says where.50starlight-theme-select label {
51 color: var(--g1t-muted);
52 font-size: 0.85rem;
53}
54starlight-theme-select label:hover {
55 color: var(--g1t-fg);
56}
57starlight-theme-select select {
58 border-radius: 0.4rem;
Checkout tries a failed fetch twice more, after 2 s and 5 s59}
docs.g1t.sh and status.g1t.sh follow your system's light or dark setting, and each has an Auto, Light and Dark switch that this browser remembers: the docs' in the header (at the foot of the menu on a phone), with code, search, the API reference and its explorer in both themes; the status page's in its header, chosen before anything is drawn; the workspaces guide says where.60starlight-theme-select option {
61 background: var(--g1t-surface);
62 color: var(--g1t-fg);
Checkout tries a failed fetch twice more, after 2 s and 5 s63}
64
65/* --- Header --------------------------------------------------------------- */
66
67header.header {
68 padding: 0 !important;
69 backdrop-filter: blur(10px);
70 border-bottom: 1px solid var(--g1t-line);
71}
Merge site-audit: SEO routes, analytics with consent first in Europe, security page, founder and X account, docs header; the tour opens on the pull request and leads with Code, on the real shell, with Agents and Docs working today72/* The search box fills the header's middle column; Header.astro centres
73 that column in the header, the same on every page. */
Checkout tries a failed fetch twice more, after 2 s and 5 s74site-search {
Merge site-audit: SEO routes, analytics with consent first in Europe, security page, founder and X account, docs header; the tour opens on the pull request and leads with Code, on the real shell, with Agents and Docs working today75 display: flex;
76 justify-content: center;
Checkout tries a failed fetch twice more, after 2 s and 5 s77 width: 100%;
78}
79site-search button[data-open-modal] {
80 border-radius: 0.5rem;
81 background: var(--g1t-surface);
82 border-color: var(--g1t-line);
83 color: var(--g1t-faint);
84}
85site-search button[data-open-modal]:hover {
86 border-color: var(--g1t-line-strong);
87 color: var(--g1t-muted);
88}
Merge site-audit: SEO routes, analytics with consent first in Europe, security page, founder and X account, docs header; the tour opens on the pull request and leads with Code, on the real shell, with Agents and Docs working today89@media (min-width: 50rem) {
90 site-search button[data-open-modal] {
91 max-width: none;
92 }
93}
94/* Tablets: the full search box, as on desktop, since there is room. */
95@media (min-width: 45rem) and (max-width: 49.99rem) {
96 site-search button[data-open-modal] {
97 width: 100%;
98 border: 1px solid var(--g1t-line);
99 padding-inline: 0.75rem 0.5rem;
100 font-size: var(--sl-text-sm);
101 }
102 site-search button[data-open-modal] > span.sl-hidden {
103 display: block;
104 }
105 site-search button[data-open-modal] > kbd.sl-hidden {
106 display: flex;
107 margin-inline-start: auto;
108 }
109}
110/* Phones: a search icon, as big as a fingertip. */
111@media (max-width: 44.99rem) {
112 site-search button[data-open-modal] {
113 justify-content: center;
114 width: 2.5rem;
115 height: 2.5rem;
116 padding: 0;
117 border: 0;
118 background: transparent;
119 color: var(--g1t-muted);
120 font-size: 1.125rem;
121 }
122}
123/* The menu button sits in the header's top row, at the end, drawn like
124 the header's other icon buttons rather than as a floating disc. */
125.sl-menu-button {
126 top: calc((3.5rem - var(--sl-menu-button-size)) / 2) !important;
127 align-items: center;
128 justify-content: center;
129 border-radius: 0.5rem;
130 padding: 0;
131 background: transparent;
132 box-shadow: none;
133 color: var(--g1t-fg-soft);
134 font-size: 1.25rem;
135}
136.sl-menu-button:hover,
137.sl-menu-button:has(~ :popover-open) {
138 background: var(--g1t-raised);
139 color: var(--g1t-fg);
140}
Checkout tries a failed fetch twice more, after 2 s and 5 s141
docs.g1t.sh and status.g1t.sh follow your system's light or dark setting, and each has an Auto, Light and Dark switch that this browser remembers: the docs' in the header (at the foot of the menu on a phone), with code, search, the API reference and its explorer in both themes; the status page's in its header, chosen before anything is drawn; the workspaces guide says where.142/* Search, in light: the dialog is a white panel, so its results sit on a
143 step darker rather than on a white just off the panel's. */
144:root[data-theme='light'] #starlight__search {
145 --pagefind-ui-background: var(--g1t-surface);
146}
147:root[data-theme='light']
148 #starlight__search
149 :is(.pagefind-ui__result-title:not(:where(.pagefind-ui__result-nested *)), .pagefind-ui__result-nested):not(:hover) {
150 background-color: var(--g1t-raised);
151}
152
Checkout tries a failed fetch twice more, after 2 s and 5 s153/* --- Sidebar -------------------------------------------------------------- */
154
155.sidebar-content {
Merge the docs' new look: tabs for each section with their own short sidebar, a larger title under its section, a lavender pill for the current page, links in the text's colour on a lavender underline, On this page on a rail, and a header whose right side is g1t.sh, Source, Sign up and one theme button.156 padding-top: 1.5rem;
Checkout tries a failed fetch twice more, after 2 s and 5 s157}
158/* Groups always show their pages: no caret, no folding. */
159.sidebar-content details > summary {
160 pointer-events: none;
161 padding-top: 0.25rem;
162}
163.sidebar-content details > summary .caret {
164 display: none;
165}
166.sidebar-content .top-level > li + li {
Merge the docs' new look: tabs for each section with their own short sidebar, a larger title under its section, a lavender pill for the current page, links in the text's colour on a lavender underline, On this page on a rail, and a header whose right side is g1t.sh, Source, Sign up and one theme button.167 margin-top: 1.75rem;
Checkout tries a failed fetch twice more, after 2 s and 5 s168}
Merge the docs' new look: tabs for each section with their own short sidebar, a larger title under its section, a lavender pill for the current page, links in the text's colour on a lavender underline, On this page on a rail, and a header whose right side is g1t.sh, Source, Sign up and one theme button.169/* Group labels: headings over their pages, in the page's own ink. */
Checkout tries a failed fetch twice more, after 2 s and 5 s170.sidebar-content details > summary .group-label .large,
171.sidebar-content .top-level > li > details > summary {
Merge the docs' new look: tabs for each section with their own short sidebar, a larger title under its section, a lavender pill for the current page, links in the text's colour on a lavender underline, On this page on a rail, and a header whose right side is g1t.sh, Source, Sign up and one theme button.172 font-size: 0.875rem;
Checkout tries a failed fetch twice more, after 2 s and 5 s173 font-weight: 600;
Merge the docs' new look: tabs for each section with their own short sidebar, a larger title under its section, a lavender pill for the current page, links in the text's colour on a lavender underline, On this page on a rail, and a header whose right side is g1t.sh, Source, Sign up and one theme button.174 color: var(--g1t-fg);
Checkout tries a failed fetch twice more, after 2 s and 5 s175}
Merge the docs' new look: tabs for each section with their own short sidebar, a larger title under its section, a lavender pill for the current page, links in the text's colour on a lavender underline, On this page on a rail, and a header whose right side is g1t.sh, Source, Sign up and one theme button.176.sidebar-content .top-level > li > details > summary {
177 padding-inline: 0.75rem;
178 margin-bottom: 0.35rem;
179}
Checkout tries a failed fetch twice more, after 2 s and 5 s180.sidebar-content ul ul,
181.sidebar-content ul ul li {
182 border-inline-start: 0;
183 margin-inline-start: 0;
184 padding-inline-start: 0;
185}
186.sidebar-content a {
Merge the docs' new look: tabs for each section with their own short sidebar, a larger title under its section, a lavender pill for the current page, links in the text's colour on a lavender underline, On this page on a rail, and a header whose right side is g1t.sh, Source, Sign up and one theme button.187 border-radius: 0.5rem;
188 padding: 0.4rem 0.75rem;
Checkout tries a failed fetch twice more, after 2 s and 5 s189 font-size: 0.875rem;
190 color: var(--g1t-muted);
Merge the docs' new look: tabs for each section with their own short sidebar, a larger title under its section, a lavender pill for the current page, links in the text's colour on a lavender underline, On this page on a rail, and a header whose right side is g1t.sh, Source, Sign up and one theme button.191 transition: background 0.15s, color 0.15s;
Checkout tries a failed fetch twice more, after 2 s and 5 s192}
193.sidebar-content a:hover {
194 background: var(--g1t-surface);
195 color: var(--g1t-fg);
196}
Merge the docs' new look: tabs for each section with their own short sidebar, a larger title under its section, a lavender pill for the current page, links in the text's colour on a lavender underline, On this page on a rail, and a header whose right side is g1t.sh, Source, Sign up and one theme button.197/* The current page: a lavender pill. */
Checkout tries a failed fetch twice more, after 2 s and 5 s198.sidebar-content a[aria-current='page'],
199.sidebar-content a[aria-current='page']:hover {
Merge the docs' new look: tabs for each section with their own short sidebar, a larger title under its section, a lavender pill for the current page, links in the text's colour on a lavender underline, On this page on a rail, and a header whose right side is g1t.sh, Source, Sign up and one theme button.200 background: var(--g1t-accent-low);
201 color: var(--g1t-docs-accent-high);
202 font-weight: 600;
Checkout tries a failed fetch twice more, after 2 s and 5 s203}
204
205/* --- Content -------------------------------------------------------------- */
206
207.content-panel {
Merge the docs' new look: tabs for each section with their own short sidebar, a larger title under its section, a lavender pill for the current page, links in the text's colour on a lavender underline, On this page on a rail, and a header whose right side is g1t.sh, Source, Sign up and one theme button.208 padding-top: 2.75rem;
Checkout tries a failed fetch twice more, after 2 s and 5 s209}
210/* The title and the page read as one, without a rule between them. */
211.content-panel + .content-panel {
212 border-top: 0;
213 padding-top: 0.5rem;
214}
215/* Headlines in Bricolage Grotesque, its optical size following the size. */
216.sl-markdown-content :is(h1, h2) {
217 font-family: var(--g1t-font-display);
218 font-optical-sizing: auto;
219}
220.sl-markdown-content h1 {
221 font-size: 2.25rem;
222 font-weight: 650;
223 letter-spacing: -0.02em;
224 line-height: 1.15;
225 color: var(--g1t-fg);
226}
227/* Sections open with space, not rules. */
228.sl-markdown-content .sl-heading-wrapper.level-h2 {
Merge the docs' new look: tabs for each section with their own short sidebar, a larger title under its section, a lavender pill for the current page, links in the text's colour on a lavender underline, On this page on a rail, and a header whose right side is g1t.sh, Source, Sign up and one theme button.229 margin-top: 3.5rem;
Checkout tries a failed fetch twice more, after 2 s and 5 s230}
231.sl-markdown-content h2 {
Merge the docs' new look: tabs for each section with their own short sidebar, a larger title under its section, a lavender pill for the current page, links in the text's colour on a lavender underline, On this page on a rail, and a header whose right side is g1t.sh, Source, Sign up and one theme button.232 font-size: 1.75rem;
Checkout tries a failed fetch twice more, after 2 s and 5 s233 font-weight: 600;
Merge the docs' new look: tabs for each section with their own short sidebar, a larger title under its section, a lavender pill for the current page, links in the text's colour on a lavender underline, On this page on a rail, and a header whose right side is g1t.sh, Source, Sign up and one theme button.234 letter-spacing: -0.02em;
235 line-height: 1.2;
Checkout tries a failed fetch twice more, after 2 s and 5 s236 color: var(--g1t-fg);
237}
238.sl-markdown-content h3 {
239 margin-top: 2rem;
240 font-size: 1.1rem;
241 font-weight: 600;
242 letter-spacing: -0.005em;
243 color: var(--g1t-fg);
244}
245.sl-markdown-content p,
246.sl-markdown-content li {
247 color: var(--g1t-fg-soft);
248}
Merge the docs' new look: tabs for each section with their own short sidebar, a larger title under its section, a lavender pill for the current page, links in the text's colour on a lavender underline, On this page on a rail, and a header whose right side is g1t.sh, Source, Sign up and one theme button.249/* Links: the text's own ink, a little heavier, on a lavender underline. */
Checkout tries a failed fetch twice more, after 2 s and 5 s250.sl-markdown-content a:not(.card, .sl-link-button, .sl-link-card) {
Merge the docs' new look: tabs for each section with their own short sidebar, a larger title under its section, a lavender pill for the current page, links in the text's colour on a lavender underline, On this page on a rail, and a header whose right side is g1t.sh, Source, Sign up and one theme button.251 color: var(--g1t-fg);
252 font-weight: 500;
253 text-decoration-color: color-mix(in srgb, var(--g1t-accent) 55%, transparent);
254 text-decoration-thickness: 1.5px;
255 text-underline-offset: 0.25em;
256 transition: text-decoration-color 0.15s, color 0.15s;
Checkout tries a failed fetch twice more, after 2 s and 5 s257}
258.sl-markdown-content a:not(.card, .sl-link-button, .sl-link-card):hover {
Merge the docs' new look: tabs for each section with their own short sidebar, a larger title under its section, a lavender pill for the current page, links in the text's colour on a lavender underline, On this page on a rail, and a header whose right side is g1t.sh, Source, Sign up and one theme button.259 color: var(--g1t-docs-link);
Merge branch 'worktree-agent-ad7c6d88d93adc817'260 text-decoration-color: var(--g1t-accent);
Checkout tries a failed fetch twice more, after 2 s and 5 s261}
262.sl-markdown-content :not(pre) > code {
263 border-radius: 0.3rem;
264 padding: 0.1rem 0.3rem;
265 font-size: 0.85em;
266 color: var(--g1t-fg);
267 background: var(--g1t-raised);
268}
269
270/* Tables: ruled, not boxed. */
271.sl-markdown-content table {
272 display: table;
273 width: 100%;
274 border-collapse: collapse;
275 font-size: 0.875rem;
276}
277/* On a phone a wide table scrolls inside itself, not the page. */
278@media (max-width: 50rem) {
279 .sl-markdown-content table {
280 display: block;
281 overflow-x: auto;
282 }
283}
Usage, Billing settings and prepaid AI credit; fixes from the UX audit284/*
285 * There, a name, route or value in a table is never broken, not even at a
286 * hyphen or a slash: a long one widens the table, which then scrolls.
287 */
288@media (max-width: 50rem) {
289 .sl-markdown-content td code,
290 .sl-markdown-content th code {
291 white-space: nowrap;
292 overflow-wrap: normal;
293 word-break: normal;
294 }
Merge site-audit: SEO routes, analytics with consent first in Europe, security page, founder and X account, docs header; the tour opens on the pull request and leads with Code, on the real shell, with Agents and Docs working today295 /* The last column usually holds the sentences. Kept readable, it
296 scrolls the table sideways instead of folding to a word a line. */
297 .sl-markdown-content :is(td, th):last-child:not(:first-child) {
298 min-width: 12rem;
299 }
Usage, Billing settings and prepaid AI credit; fixes from the UX audit300}
Checkout tries a failed fetch twice more, after 2 s and 5 s301.sl-markdown-content th {
302 border-bottom: 1px solid var(--g1t-line-strong);
303 background: transparent;
304 font-weight: 600;
305 color: var(--g1t-muted);
306 text-align: start;
307}
308.sl-markdown-content td,
309.sl-markdown-content th {
310 padding: 0.6rem 0.75rem;
311 border-inline: 0;
312 border-top: 0;
313}
314.sl-markdown-content td {
315 border-bottom: 1px solid var(--g1t-line);
316 vertical-align: top;
317}
318.sl-markdown-content tr:nth-child(2n) {
319 background: transparent;
320}
321
322/* Callouts: a tinted panel with a coloured edge. */
323.starlight-aside {
324 border: 0;
325 border-inline-start: 2px solid;
326 border-radius: 0 0.6rem 0.6rem 0;
327 padding: 0.85rem 1.1rem;
328}
329.starlight-aside--note {
330 border-color: var(--g1t-info);
331 background: color-mix(in srgb, var(--g1t-info) 7%, var(--g1t-bg));
332}
333.starlight-aside--tip {
Merge branch 'worktree-agent-ad7c6d88d93adc817'334 border-color: var(--g1t-success);
335 background: color-mix(in srgb, var(--g1t-success) 6%, var(--g1t-bg));
Checkout tries a failed fetch twice more, after 2 s and 5 s336}
337.starlight-aside--caution {
338 border-color: var(--g1t-warn);
339 background: color-mix(in srgb, var(--g1t-warn) 7%, var(--g1t-bg));
340}
341.starlight-aside--danger {
342 border-color: var(--g1t-danger);
343 background: color-mix(in srgb, var(--g1t-danger) 7%, var(--g1t-bg));
344}
345
346/* --- On this page --------------------------------------------------------- */
347
Merge the docs' new look: tabs for each section with their own short sidebar, a larger title under its section, a lavender pill for the current page, links in the text's colour on a lavender underline, On this page on a rail, and a header whose right side is g1t.sh, Source, Sign up and one theme button.348.right-sidebar-panel {
349 padding-top: 2.75rem;
350}
Checkout tries a failed fetch twice more, after 2 s and 5 s351.right-sidebar-panel h2 {
Merge the docs' new look: tabs for each section with their own short sidebar, a larger title under its section, a lavender pill for the current page, links in the text's colour on a lavender underline, On this page on a rail, and a header whose right side is g1t.sh, Source, Sign up and one theme button.352 font-size: 0.875rem;
Checkout tries a failed fetch twice more, after 2 s and 5 s353 font-weight: 600;
Merge the docs' new look: tabs for each section with their own short sidebar, a larger title under its section, a lavender pill for the current page, links in the text's colour on a lavender underline, On this page on a rail, and a header whose right side is g1t.sh, Source, Sign up and one theme button.354 color: var(--g1t-fg);
355}
356/* The headings on a rail; the one being read is marked on it. */
357.right-sidebar-panel starlight-toc > nav > ul {
358 border-inline-start: 1px solid var(--g1t-line);
Checkout tries a failed fetch twice more, after 2 s and 5 s359}
360.right-sidebar-panel a {
Merge the docs' new look: tabs for each section with their own short sidebar, a larger title under its section, a lavender pill for the current page, links in the text's colour on a lavender underline, On this page on a rail, and a header whose right side is g1t.sh, Source, Sign up and one theme button.361 margin-inline-start: -1px;
362 border-inline-start: 1px solid transparent;
363 border-radius: 0;
364 padding-inline-start: calc(0.75rem + var(--depth) * 0.75rem);
Checkout tries a failed fetch twice more, after 2 s and 5 s365 font-size: 0.8125rem;
366 color: var(--g1t-muted);
Merge the docs' new look: tabs for each section with their own short sidebar, a larger title under its section, a lavender pill for the current page, links in the text's colour on a lavender underline, On this page on a rail, and a header whose right side is g1t.sh, Source, Sign up and one theme button.367 transition: color 0.15s, border-color 0.15s;
Checkout tries a failed fetch twice more, after 2 s and 5 s368}
369.right-sidebar-panel a:hover {
370 color: var(--g1t-fg);
371}
372.right-sidebar-panel a[aria-current='true'] {
Merge the docs' new look: tabs for each section with their own short sidebar, a larger title under its section, a lavender pill for the current page, links in the text's colour on a lavender underline, On this page on a rail, and a header whose right side is g1t.sh, Source, Sign up and one theme button.373 border-color: var(--g1t-accent);
docs.g1t.sh and status.g1t.sh follow your system's light or dark setting, and each has an Auto, Light and Dark switch that this browser remembers: the docs' in the header (at the foot of the menu on a phone), with code, search, the API reference and its explorer in both themes; the status page's in its header, chosen before anything is drawn; the workspaces guide says where.374 color: var(--g1t-docs-link);
Merge the docs' new look: tabs for each section with their own short sidebar, a larger title under its section, a lavender pill for the current page, links in the text's colour on a lavender underline, On this page on a rail, and a header whose right side is g1t.sh, Source, Sign up and one theme button.375 font-weight: 500;
Checkout tries a failed fetch twice more, after 2 s and 5 s376}
377
378/* --- Cards and buttons ---------------------------------------------------- */
379
380.card,
381.sl-link-card {
382 border-radius: 1rem;
383 background: var(--g1t-surface);
384 border: 1px solid var(--g1t-line);
Merge the docs' new look: tabs for each section with their own short sidebar, a larger title under its section, a lavender pill for the current page, links in the text's colour on a lavender underline, On this page on a rail, and a header whose right side is g1t.sh, Source, Sign up and one theme button.385 transition: border-color 0.15s, background 0.15s, transform 0.15s;
Checkout tries a failed fetch twice more, after 2 s and 5 s386}
Merge the docs' new look: tabs for each section with their own short sidebar, a larger title under its section, a lavender pill for the current page, links in the text's colour on a lavender underline, On this page on a rail, and a header whose right side is g1t.sh, Source, Sign up and one theme button.387/* A link card lifts toward the accent under the pointer. */
Checkout tries a failed fetch twice more, after 2 s and 5 s388.sl-link-card:hover {
Merge the docs' new look: tabs for each section with their own short sidebar, a larger title under its section, a lavender pill for the current page, links in the text's colour on a lavender underline, On this page on a rail, and a header whose right side is g1t.sh, Source, Sign up and one theme button.389 border-color: color-mix(in srgb, var(--g1t-accent) 45%, var(--g1t-line));
390 background: color-mix(in srgb, var(--g1t-accent) 4%, var(--g1t-surface));
391}
392.sl-link-card:hover .icon {
393 color: var(--g1t-accent);
Checkout tries a failed fetch twice more, after 2 s and 5 s394}
395.sl-link-button {
396 border-radius: 0.5rem;
397 font-size: 0.9rem;
398 font-weight: 500;
399}
400.sl-link-button.primary {
401 background: var(--g1t-fg);
402 border-color: var(--g1t-fg);
403 color: var(--g1t-bg);
404}
405.sl-link-button.primary:hover {
docs.g1t.sh and status.g1t.sh follow your system's light or dark setting, and each has an Auto, Light and Dark switch that this browser remembers: the docs' in the header (at the foot of the menu on a phone), with code, search, the API reference and its explorer in both themes; the status page's in its header, chosen before anything is drawn; the workspaces guide says where.406 background: var(--g1t-docs-fg-hover);
Checkout tries a failed fetch twice more, after 2 s and 5 s407}
408.sl-link-button.minimal {
409 color: var(--g1t-fg-soft);
410}
411
412/* --- Pagination and footer ----------------------------------------------- */
413
414.pagination-links a {
415 border-radius: 0.75rem;
416 border-color: var(--g1t-line);
417 box-shadow: none;
418}
419.pagination-links a:hover {
420 border-color: var(--g1t-line-strong);
421}
422.pagination-links a .link-title {
423 color: var(--g1t-fg);
424}
425.meta,
426.meta a {
427 font-size: 0.8125rem;
428 color: var(--g1t-faint);
429}
430
431/* --- Cards ---------------------------------------------------------------- */
432
433.sl-markdown-content .card-grid {
434 gap: 0.75rem;
435}
436.sl-markdown-content .card {
437 padding: 1.1rem 1.2rem;
438}
439.sl-markdown-content .card .title {
440 font-size: 1rem;
441 font-weight: 600;
442 color: var(--g1t-fg);
443}
444.sl-markdown-content .card .icon {
Merge branch 'worktree-agent-ad7c6d88d93adc817'445 color: var(--g1t-accent);
446 background: color-mix(in srgb, var(--g1t-accent) 12%, transparent);
Checkout tries a failed fetch twice more, after 2 s and 5 s447 border: 0;
448 border-radius: 0.5rem;
449 padding: 0.3rem;
450}
451.sl-link-card {
452 padding: 1rem 1.2rem;
453}
454.sl-link-card .title {
455 font-size: 0.95rem;
456 font-weight: 600;
457 color: var(--g1t-fg);
458}
459.sl-link-card .description {
460 font-size: 0.85rem;
461 color: var(--g1t-muted);
462}
463
464/* Steps: numbered, on a quiet rail. */
465.sl-steps > li::before {
466 background: var(--g1t-raised) !important;
467 color: var(--g1t-fg) !important;
468 box-shadow: inset 0 0 0 1px var(--g1t-line-strong);
469 font-family: var(--g1t-font-mono);
470 font-size: 0.8rem;
471}
472.sl-steps > li::after {
473 background: var(--g1t-line) !important;
474}
475
476/* --- API reference -------------------------------------------------------- */
477
478/* An operation's method and path, at the top of its page. */
479.sl-markdown-content .g1t-endpoint {
480 display: flex;
481 align-items: center;
482 gap: 0.75rem;
483 overflow-x: auto;
484 border: 1px solid var(--g1t-line);
485 border-radius: 0.75rem;
486 padding: 0.7rem 0.9rem;
487 background: var(--g1t-surface);
488}
489.sl-markdown-content .g1t-endpoint code {
490 padding: 0;
491 background: transparent;
492 font-size: 0.875rem;
493 white-space: nowrap;
494 color: var(--g1t-fg);
495}
Merge site-audit: SEO routes, analytics with consent first in Europe, security page, founder and X account, docs header; the tour opens on the pull request and leads with Code, on the real shell, with Agents and Docs working today496/* On a phone a long path wraps onto a second line rather than hiding its end. */
497@media (max-width: 40rem) {
498 .sl-markdown-content .g1t-endpoint {
499 align-items: flex-start;
500 }
501 .sl-markdown-content .g1t-endpoint code {
502 white-space: normal;
503 overflow-wrap: anywhere;
504 }
505}
Checkout tries a failed fetch twice more, after 2 s and 5 s506/* Methods: the same small mono tag in the sidebar and on the page. */
507.g1t-method {
508 --method: var(--g1t-muted);
509 flex-shrink: 0;
510 border: 0 !important;
511 border-radius: 0.3rem;
512 padding: 0.05rem 0.4rem;
docs.g1t.sh and status.g1t.sh follow your system's light or dark setting, and each has an Auto, Light and Dark switch that this browser remembers: the docs' in the header (at the foot of the menu on a phone), with code, search, the API reference and its explorer in both themes; the status page's in its header, chosen before anything is drawn; the workspaces guide says where.513 background: color-mix(in srgb, var(--method) var(--g1t-docs-tag-tint), transparent) !important;
Checkout tries a failed fetch twice more, after 2 s and 5 s514 color: var(--method) !important;
515 font-family: var(--g1t-font-mono);
516 font-size: 0.7rem;
517 font-weight: 600;
518 letter-spacing: 0.02em;
519}
520.g1t-method-get,
521.g1t-method[data-method='get'] {
Merge branch 'worktree-agent-ad7c6d88d93adc817'522 --method: var(--g1t-success);
Checkout tries a failed fetch twice more, after 2 s and 5 s523}
524.g1t-method-post,
525.g1t-method[data-method='post'] {
526 --method: var(--g1t-info);
527}
528.g1t-method-put,
529.g1t-method-patch,
530.g1t-method[data-method='put'],
531.g1t-method[data-method='patch'] {
532 --method: var(--g1t-warn);
533}
534.g1t-method-delete,
535.g1t-method[data-method='delete'] {
536 --method: var(--g1t-danger);
537}
538/* In the sidebar the method sits at the end of the row, in a fixed column. */
539.sidebar-content a:has(.g1t-method) {
540 display: flex;
541 justify-content: space-between;
542 align-items: center;
543 gap: 0.5rem;
544}
545.sidebar-content .g1t-method {
546 min-width: 3.1rem;
547 text-align: center;
548 font-size: 0.625rem;
549 line-height: 1.6;
550}
Chat and workspace agents: channels, DMs and named agents you talk to551
552/* "Soon" beside a sidebar entry for a feature not built yet: quiet, like
553 the site's Coming soon tag, not a call to action. */
554.sidebar-content .sl-badge {
555 background: var(--g1t-raised);
556 border: 1px solid var(--g1t-line-strong);
557 color: var(--g1t-muted);
558 font-family: var(--g1t-font-mono);
559 font-size: 0.625rem;
560 text-transform: uppercase;
561 letter-spacing: 0.04em;
562}
g1t is described as the product it is in alpha, and its shell takes the new shape: the README, the docs home and docs/PLAN.md label every feature Live, Preview or Coming; a floating dock with the g1t mark, Today, Chat, Notifications, Agents, Code, Artifacts, your pinned apps and the Apps launcher, with People, Workspace and the account menu (now holding help) at its foot; the workspace's logo and switcher heading a flat sidebar that folds away with Ctrl B, or leading the header's breadcrumbs where there is none; the page in a rounded panel with a full-width header; Today as the front page, with first-time acceptance of agents' pull requests, what needs you and what's at stake, spend today and one item to start with, every number from a service; Notifications in place of the Inbox at /notifications; a bottom bar and More sheet on phones; and sign-in, sign-up, two-factor, reset, invites and choosing a workspace on standalone pages with no app around them.563
564/* Feature tables with a Live, Preview or Coming badge (components/Status.astro):
565 on a phone each row stacks, the name and its badge on one line and what it
566 does under them, rather than three narrow columns. */
567@media (max-width: 50rem) {
568 .sl-markdown-content table:has(.status),
569 .sl-markdown-content table:has(.status) tbody {
570 display: block;
571 width: 100%;
572 }
573 .sl-markdown-content table:has(.status) thead {
574 display: none;
575 }
576 .sl-markdown-content table:has(.status) tr {
577 display: grid;
578 grid-template-columns: minmax(0, 1fr) max-content;
579 width: 100%;
580 column-gap: 0.75rem;
581 padding-block: 0.5rem;
582 border-bottom: 1px solid var(--sl-color-hairline);
583 }
584 .sl-markdown-content table:has(.status) td {
585 border: 0;
586 padding: 0.15rem 0;
587 width: auto;
588 }
589 .sl-markdown-content table:has(.status) td:first-child {
590 font-weight: 600;
591 }
592 .sl-markdown-content table:has(.status) td:nth-child(2) {
593 grid-column: 1 / -1;
594 grid-row: 2;
595 color: var(--sl-color-gray-2);
596 }
597 .sl-markdown-content table:has(.status) td:nth-child(3) {
598 grid-column: 2;
599 grid-row: 1;
600 justify-self: end;
601 align-self: center;
602 width: max-content;
603 min-width: 0;
604 }
605 .sl-markdown-content table:has(.status) td + td {
606 margin-top: 0;
607 }
608}
Merge tabs per system in the docs: Quickstart's token and the runner's install and service, synced across pages, and a home page that opens without repeating itself, with icons on its cards.609
610/* Tabs in a page, such as one per OS: quiet labels on a hairline, the
611 chosen one in ink over a lavender line. */
612starlight-tabs .tablist-wrapper {
613 margin-bottom: 0.75rem;
614}
615starlight-tabs [role='tablist'] {
616 gap: 0.25rem;
617 border-bottom: 1px solid var(--g1t-line);
618}
619starlight-tabs [role='tab'] {
620 margin-bottom: -1px;
621 border-bottom: 2px solid transparent;
622 padding: 0.4rem 0.75rem;
623 font-size: 0.875rem;
624 font-weight: 500;
625 color: var(--g1t-muted);
626 transition: color 0.15s, border-color 0.15s;
627}
628starlight-tabs [role='tab']:hover {
629 color: var(--g1t-fg);
630}
631starlight-tabs [role='tab'][aria-selected='true'] {
632 border-color: var(--g1t-accent);
633 color: var(--g1t-fg);
634 font-weight: 600;
635}
architecture and such636
637/* --- Diagrams --------------------------------------------------------------
638 <Diagram name="..."> (components/Diagram.astro) draws a spec from
639 src/diagrams as an inline SVG. Every colour is a token, so a diagram
640 follows the theme like the rest of the page. On a narrow screen it keeps
641 its size and scrolls sideways, rather than shrinking its text away. */
642
643.g1t-diagram {
644 /* A grid or flex item grows to fit its content unless told not to: without
645 this, the SVG's minimum width widens the whole page on a phone. */
646 min-width: 0;
647 max-width: 100%;
648 margin: 1.75rem 0;
649 border: 1px solid var(--g1t-line);
650 border-radius: 0.875rem;
651 background:
652 radial-gradient(circle at 1px 1px, color-mix(in srgb, var(--g1t-line-strong) 45%, transparent) 1px, transparent 0) 0 0 / 20px 20px,
653 var(--g1t-surface);
654}
655.g1t-diagram__scroll {
656 overflow-x: auto;
657 padding: 1.25rem;
658}
659.g1t-diagram__scroll:focus-visible {
660 outline: 2px solid var(--g1t-accent);
661 outline-offset: -2px;
662 border-radius: 0.875rem;
663}
664.g1t-diagram svg.d-svg {
665 display: block;
666 margin: 0 auto;
667 max-width: 100%;
668 height: auto;
669 /* Below this the labels get too small to read: scroll instead. */
670 min-width: 600px;
671 font-family: var(--g1t-font-sans);
672 overflow: visible;
673}
674.g1t-diagram figcaption {
675 display: flex;
676 flex-wrap: wrap;
677 align-items: center;
678 justify-content: space-between;
679 gap: 0.5rem 1rem;
680 border-top: 1px solid var(--g1t-line);
681 padding: 0.625rem 1rem;
682 color: var(--g1t-muted);
683 font-size: 0.8125rem;
684 line-height: 1.5;
685}
686.g1t-diagram__tools {
687 display: inline-flex;
688 align-items: center;
689 gap: 1rem;
690}
691.g1t-diagram__expand {
692 display: inline-flex;
693 align-items: center;
694 gap: 0.375rem;
695 border: 1px solid var(--g1t-line);
696 border-radius: 0.5rem;
697 background: var(--g1t-raised);
698 padding: 0.25rem 0.625rem;
699 color: var(--g1t-fg-soft);
700 font: inherit;
701 font-size: 0.75rem;
702 font-weight: 500;
703 cursor: pointer;
704}
705.g1t-diagram__expand:hover {
706 border-color: var(--g1t-line-strong);
707 color: var(--g1t-fg);
708}
709.g1t-diagram__expand:focus-visible {
710 outline: 2px solid var(--g1t-accent);
711 outline-offset: 2px;
712}
713
714/* The diagram at full size. On a wide screen it is drawn larger than in
715 the page, so its smallest labels read easily. */
716.g1t-diagram__dialog {
717 /* Starlight's reset takes a dialog's margins away; put the centring back. */
718 margin: auto;
719 width: min(96vw, 1400px);
720 max-width: none;
721 max-height: 92vh;
722 border: 1px solid var(--g1t-line-strong);
723 border-radius: 1rem;
724 background: var(--g1t-surface);
725 padding: 0;
726 color: var(--g1t-fg);
727 box-shadow: var(--g1t-docs-menu-shadow);
The docs page behind an expanded diagram no longer scrolls: while a diagram's dialog is open the page's scrolling is held, and scrolling past either end of the diagram stops at the dialog.728 /* Scrolling past either end of the diagram stops here. */
729 overscroll-behavior: contain;
730}
731/* The page behind an open diagram stays where it is. */
732html:has(.g1t-diagram__dialog[open]) {
733 overflow: hidden;
architecture and such734}
735.g1t-diagram__dialog::backdrop {
736 background: rgb(0 0 0 / 0.6);
737 backdrop-filter: blur(2px);
738}
739.g1t-diagram__dialog-bar {
740 position: sticky;
741 top: 0;
742 z-index: 1;
743 display: flex;
744 align-items: center;
745 justify-content: space-between;
746 gap: 1rem;
747 border-bottom: 1px solid var(--g1t-line);
748 background: var(--g1t-surface);
749 padding: 0.75rem 1rem;
750 color: var(--g1t-muted);
751 font-size: 0.875rem;
752}
753.g1t-diagram.g1t-diagram__dialog-body {
754 margin: 0;
755 border: 0;
756 border-radius: 0;
757}
758.g1t-diagram__dialog-body svg.d-svg {
759 width: 100%;
760 max-width: none;
761 min-width: 900px;
762}
763.g1t-diagram__key {
764 display: inline-flex;
765 gap: 1rem;
766 color: var(--g1t-faint);
767 font-size: 0.75rem;
768}
769.g1t-diagram__key > span {
770 display: inline-flex;
771 align-items: center;
772 gap: 0.375rem;
773}
774.g1t-diagram .d-key {
775 stroke: var(--g1t-faint);
776 stroke-width: 1.5;
777}
778
779/* Boxes. */
780.g1t-diagram .d-node {
781 fill: var(--g1t-raised);
782 stroke: var(--g1t-line-strong);
783 stroke-width: 1;
784}
785.g1t-diagram .d-node.d-tone-accent {
786 fill: var(--g1t-accent-low);
787 stroke: color-mix(in srgb, var(--g1t-accent) 65%, transparent);
788}
789.g1t-diagram .d-node.d-tone-success {
790 fill: var(--g1t-success-low);
791 stroke: color-mix(in srgb, var(--g1t-success-dim) 80%, transparent);
792}
793.g1t-diagram .d-node.d-tone-warn {
794 fill: color-mix(in srgb, var(--g1t-warn) 12%, var(--g1t-surface));
795 stroke: color-mix(in srgb, var(--g1t-warn) 60%, transparent);
796}
797.g1t-diagram .d-node.d-tone-store {
798 fill: var(--g1t-surface);
799 stroke: var(--g1t-line-strong);
800}
801.g1t-diagram .d-node.d-tone-external {
802 fill: var(--g1t-bg);
803 stroke: var(--g1t-line-strong);
804 stroke-dasharray: 4 3;
805}
806.g1t-diagram .d-rim {
807 fill: none;
808 stroke: var(--g1t-line-strong);
809}
810.g1t-diagram .d-title {
811 fill: var(--g1t-fg);
812 font-size: 12.5px;
813 font-weight: 600;
814}
815.g1t-diagram .d-sub {
816 fill: var(--g1t-muted);
817 font-family: var(--g1t-font-mono);
818 font-size: 10px;
819}
820.g1t-diagram .d-mono {
821 font-family: var(--g1t-font-mono);
822 font-size: 0.92em;
823}
824
825/* Frames around a group of boxes. */
826.g1t-diagram .d-group {
827 fill: color-mix(in srgb, var(--g1t-bg) 55%, transparent);
828 stroke: var(--g1t-line-strong);
829 stroke-dasharray: 2 4;
830 stroke-linecap: round;
831}
832.g1t-diagram .d-group.d-tone-accent {
833 fill: color-mix(in srgb, var(--g1t-accent-low) 45%, transparent);
834 stroke: color-mix(in srgb, var(--g1t-accent) 45%, transparent);
835}
836.g1t-diagram .d-group.d-tone-success {
837 fill: color-mix(in srgb, var(--g1t-success-low) 45%, transparent);
838 stroke: color-mix(in srgb, var(--g1t-success-dim) 55%, transparent);
839}
840.g1t-diagram .d-group-label {
841 fill: var(--g1t-faint);
842 font-size: 11px;
843 font-weight: 600;
844 letter-spacing: 0.01em;
845}
846.g1t-diagram .d-group-label.d-tone-accent {
847 fill: var(--g1t-accent);
848}
849.g1t-diagram .d-group-label.d-tone-success {
850 fill: var(--g1t-success-dim);
851}
852
853/* Arrows. */
854.g1t-diagram .d-edge,
855.g1t-diagram .d-msg {
856 fill: none;
857 stroke: var(--g1t-faint);
858 stroke-width: 1.4;
859 stroke-linejoin: round;
860}
861.g1t-diagram .d-edge.d-tone-accent,
862.g1t-diagram .d-msg:not(.d-reply) {
863 stroke: var(--g1t-accent);
864}
865.g1t-diagram .d-edge.d-tone-success {
866 stroke: var(--g1t-success-dim);
867}
868.g1t-diagram .d-edge.d-tone-warn {
869 stroke: var(--g1t-warn);
870}
871.g1t-diagram .d-async {
872 stroke-dasharray: 5 4;
873}
874.g1t-diagram .d-head {
875 fill: var(--g1t-faint);
876}
877.g1t-diagram .d-head.d-tone-accent {
878 fill: var(--g1t-accent);
879}
880.g1t-diagram .d-head.d-tone-success {
881 fill: var(--g1t-success-dim);
882}
883.g1t-diagram .d-head.d-tone-warn {
884 fill: var(--g1t-warn);
885}
886.g1t-diagram .d-label,
887.g1t-diagram .d-phase-label {
888 fill: var(--g1t-fg-soft);
889 font-weight: 500;
890}
891.g1t-diagram .d-label-bg,
892.g1t-diagram .d-phase-label-bg {
893 fill: var(--g1t-surface);
894 stroke: var(--g1t-line);
895}
896
897/* Sequences. */
898.g1t-diagram .d-lifeline {
899 stroke: var(--g1t-line-strong);
900 stroke-width: 1.25;
901}
902.g1t-diagram .d-msg-label {
903 fill: var(--g1t-fg-soft);
904 font-size: 11.5px;
905}
906.g1t-diagram .d-badge {
907 fill: var(--g1t-accent);
908}
909.g1t-diagram .d-badge-text {
910 fill: var(--g1t-bg);
911 font-size: 9.5px;
912 font-weight: 700;
913}
914.g1t-diagram .d-note {
915 fill: color-mix(in srgb, var(--g1t-warn) 9%, var(--g1t-surface));
916 stroke: color-mix(in srgb, var(--g1t-warn) 35%, transparent);
917}
918.g1t-diagram .d-note-text {
919 fill: var(--g1t-fg-soft);
920 font-size: 11px;
921}
922.g1t-diagram .d-phase {
923 stroke: var(--g1t-line-strong);
924}
925.g1t-diagram .d-phase-label {
926 fill: var(--g1t-muted);
927 font-weight: 600;
928}

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