Skip to content
922 linesCodeBlameRaw
1/*
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.
6 */
7:root {
8 --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. */
12 --sl-color-accent-low: color-mix(in srgb, var(--g1t-accent) 14%, var(--g1t-bg));
13 --sl-color-accent: var(--g1t-accent);
14 --sl-color-accent-high: var(--g1t-docs-accent-high);
15
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);
33 --sl-color-text-accent: var(--g1t-docs-link);
34 --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;
44 /* Big enough to tap. */
45 --sl-menu-button-size: 2.5rem;
46}
47
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). */
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;
59}
60starlight-theme-select option {
61 background: var(--g1t-surface);
62 color: var(--g1t-fg);
63}
64
65/* --- Header --------------------------------------------------------------- */
66
67header.header {
68 padding: 0 !important;
69 backdrop-filter: blur(10px);
70 border-bottom: 1px solid var(--g1t-line);
71}
72/* The search box fills the header's middle column; Header.astro centres
73 that column in the header, the same on every page. */
74site-search {
75 display: flex;
76 justify-content: center;
77 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}
89@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}
141
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
153/* --- Sidebar -------------------------------------------------------------- */
154
155.sidebar-content {
156 padding-top: 1.5rem;
157}
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 {
167 margin-top: 1.75rem;
168}
169/* Group labels: headings over their pages, in the page's own ink. */
170.sidebar-content details > summary .group-label .large,
171.sidebar-content .top-level > li > details > summary {
172 font-size: 0.875rem;
173 font-weight: 600;
174 color: var(--g1t-fg);
175}
176.sidebar-content .top-level > li > details > summary {
177 padding-inline: 0.75rem;
178 margin-bottom: 0.35rem;
179}
180.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 {
187 border-radius: 0.5rem;
188 padding: 0.4rem 0.75rem;
189 font-size: 0.875rem;
190 color: var(--g1t-muted);
191 transition: background 0.15s, color 0.15s;
192}
193.sidebar-content a:hover {
194 background: var(--g1t-surface);
195 color: var(--g1t-fg);
196}
197/* The current page: a lavender pill. */
198.sidebar-content a[aria-current='page'],
199.sidebar-content a[aria-current='page']:hover {
200 background: var(--g1t-accent-low);
201 color: var(--g1t-docs-accent-high);
202 font-weight: 600;
203}
204
205/* --- Content -------------------------------------------------------------- */
206
207.content-panel {
208 padding-top: 2.75rem;
209}
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 {
229 margin-top: 3.5rem;
230}
231.sl-markdown-content h2 {
232 font-size: 1.75rem;
233 font-weight: 600;
234 letter-spacing: -0.02em;
235 line-height: 1.2;
236 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}
249/* Links: the text's own ink, a little heavier, on a lavender underline. */
250.sl-markdown-content a:not(.card, .sl-link-button, .sl-link-card) {
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;
257}
258.sl-markdown-content a:not(.card, .sl-link-button, .sl-link-card):hover {
259 color: var(--g1t-docs-link);
260 text-decoration-color: var(--g1t-accent);
261}
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}
284/*
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 }
295 /* 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 }
300}
301.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 {
334 border-color: var(--g1t-success);
335 background: color-mix(in srgb, var(--g1t-success) 6%, var(--g1t-bg));
336}
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
348.right-sidebar-panel {
349 padding-top: 2.75rem;
350}
351.right-sidebar-panel h2 {
352 font-size: 0.875rem;
353 font-weight: 600;
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);
359}
360.right-sidebar-panel a {
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);
365 font-size: 0.8125rem;
366 color: var(--g1t-muted);
367 transition: color 0.15s, border-color 0.15s;
368}
369.right-sidebar-panel a:hover {
370 color: var(--g1t-fg);
371}
372.right-sidebar-panel a[aria-current='true'] {
373 border-color: var(--g1t-accent);
374 color: var(--g1t-docs-link);
375 font-weight: 500;
376}
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);
385 transition: border-color 0.15s, background 0.15s, transform 0.15s;
386}
387/* A link card lifts toward the accent under the pointer. */
388.sl-link-card:hover {
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);
394}
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 {
406 background: var(--g1t-docs-fg-hover);
407}
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 {
445 color: var(--g1t-accent);
446 background: color-mix(in srgb, var(--g1t-accent) 12%, transparent);
447 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}
496/* 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}
506/* 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;
513 background: color-mix(in srgb, var(--method) var(--g1t-docs-tag-tint), transparent) !important;
514 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'] {
522 --method: var(--g1t-success);
523}
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}
551
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}
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}
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}
636
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);
728}
729.g1t-diagram__dialog::backdrop {
730 background: rgb(0 0 0 / 0.6);
731 backdrop-filter: blur(2px);
732}
733.g1t-diagram__dialog-bar {
734 position: sticky;
735 top: 0;
736 z-index: 1;
737 display: flex;
738 align-items: center;
739 justify-content: space-between;
740 gap: 1rem;
741 border-bottom: 1px solid var(--g1t-line);
742 background: var(--g1t-surface);
743 padding: 0.75rem 1rem;
744 color: var(--g1t-muted);
745 font-size: 0.875rem;
746}
747.g1t-diagram.g1t-diagram__dialog-body {
748 margin: 0;
749 border: 0;
750 border-radius: 0;
751}
752.g1t-diagram__dialog-body svg.d-svg {
753 width: 100%;
754 max-width: none;
755 min-width: 900px;
756}
757.g1t-diagram__key {
758 display: inline-flex;
759 gap: 1rem;
760 color: var(--g1t-faint);
761 font-size: 0.75rem;
762}
763.g1t-diagram__key > span {
764 display: inline-flex;
765 align-items: center;
766 gap: 0.375rem;
767}
768.g1t-diagram .d-key {
769 stroke: var(--g1t-faint);
770 stroke-width: 1.5;
771}
772
773/* Boxes. */
774.g1t-diagram .d-node {
775 fill: var(--g1t-raised);
776 stroke: var(--g1t-line-strong);
777 stroke-width: 1;
778}
779.g1t-diagram .d-node.d-tone-accent {
780 fill: var(--g1t-accent-low);
781 stroke: color-mix(in srgb, var(--g1t-accent) 65%, transparent);
782}
783.g1t-diagram .d-node.d-tone-success {
784 fill: var(--g1t-success-low);
785 stroke: color-mix(in srgb, var(--g1t-success-dim) 80%, transparent);
786}
787.g1t-diagram .d-node.d-tone-warn {
788 fill: color-mix(in srgb, var(--g1t-warn) 12%, var(--g1t-surface));
789 stroke: color-mix(in srgb, var(--g1t-warn) 60%, transparent);
790}
791.g1t-diagram .d-node.d-tone-store {
792 fill: var(--g1t-surface);
793 stroke: var(--g1t-line-strong);
794}
795.g1t-diagram .d-node.d-tone-external {
796 fill: var(--g1t-bg);
797 stroke: var(--g1t-line-strong);
798 stroke-dasharray: 4 3;
799}
800.g1t-diagram .d-rim {
801 fill: none;
802 stroke: var(--g1t-line-strong);
803}
804.g1t-diagram .d-title {
805 fill: var(--g1t-fg);
806 font-size: 12.5px;
807 font-weight: 600;
808}
809.g1t-diagram .d-sub {
810 fill: var(--g1t-muted);
811 font-family: var(--g1t-font-mono);
812 font-size: 10px;
813}
814.g1t-diagram .d-mono {
815 font-family: var(--g1t-font-mono);
816 font-size: 0.92em;
817}
818
819/* Frames around a group of boxes. */
820.g1t-diagram .d-group {
821 fill: color-mix(in srgb, var(--g1t-bg) 55%, transparent);
822 stroke: var(--g1t-line-strong);
823 stroke-dasharray: 2 4;
824 stroke-linecap: round;
825}
826.g1t-diagram .d-group.d-tone-accent {
827 fill: color-mix(in srgb, var(--g1t-accent-low) 45%, transparent);
828 stroke: color-mix(in srgb, var(--g1t-accent) 45%, transparent);
829}
830.g1t-diagram .d-group.d-tone-success {
831 fill: color-mix(in srgb, var(--g1t-success-low) 45%, transparent);
832 stroke: color-mix(in srgb, var(--g1t-success-dim) 55%, transparent);
833}
834.g1t-diagram .d-group-label {
835 fill: var(--g1t-faint);
836 font-size: 11px;
837 font-weight: 600;
838 letter-spacing: 0.01em;
839}
840.g1t-diagram .d-group-label.d-tone-accent {
841 fill: var(--g1t-accent);
842}
843.g1t-diagram .d-group-label.d-tone-success {
844 fill: var(--g1t-success-dim);
845}
846
847/* Arrows. */
848.g1t-diagram .d-edge,
849.g1t-diagram .d-msg {
850 fill: none;
851 stroke: var(--g1t-faint);
852 stroke-width: 1.4;
853 stroke-linejoin: round;
854}
855.g1t-diagram .d-edge.d-tone-accent,
856.g1t-diagram .d-msg:not(.d-reply) {
857 stroke: var(--g1t-accent);
858}
859.g1t-diagram .d-edge.d-tone-success {
860 stroke: var(--g1t-success-dim);
861}
862.g1t-diagram .d-edge.d-tone-warn {
863 stroke: var(--g1t-warn);
864}
865.g1t-diagram .d-async {
866 stroke-dasharray: 5 4;
867}
868.g1t-diagram .d-head {
869 fill: var(--g1t-faint);
870}
871.g1t-diagram .d-head.d-tone-accent {
872 fill: var(--g1t-accent);
873}
874.g1t-diagram .d-head.d-tone-success {
875 fill: var(--g1t-success-dim);
876}
877.g1t-diagram .d-head.d-tone-warn {
878 fill: var(--g1t-warn);
879}
880.g1t-diagram .d-label,
881.g1t-diagram .d-phase-label {
882 fill: var(--g1t-fg-soft);
883 font-weight: 500;
884}
885.g1t-diagram .d-label-bg,
886.g1t-diagram .d-phase-label-bg {
887 fill: var(--g1t-surface);
888 stroke: var(--g1t-line);
889}
890
891/* Sequences. */
892.g1t-diagram .d-lifeline {
893 stroke: var(--g1t-line-strong);
894 stroke-width: 1.25;
895}
896.g1t-diagram .d-msg-label {
897 fill: var(--g1t-fg-soft);
898 font-size: 11.5px;
899}
900.g1t-diagram .d-badge {
901 fill: var(--g1t-accent);
902}
903.g1t-diagram .d-badge-text {
904 fill: var(--g1t-bg);
905 font-size: 9.5px;
906 font-weight: 700;
907}
908.g1t-diagram .d-note {
909 fill: color-mix(in srgb, var(--g1t-warn) 9%, var(--g1t-surface));
910 stroke: color-mix(in srgb, var(--g1t-warn) 35%, transparent);
911}
912.g1t-diagram .d-note-text {
913 fill: var(--g1t-fg-soft);
914 font-size: 11px;
915}
916.g1t-diagram .d-phase {
917 stroke: var(--g1t-line-strong);
918}
919.g1t-diagram .d-phase-label {
920 fill: var(--g1t-muted);
921 font-weight: 600;
922}