@filipgutica/ui 1.11.1 → 1.12.0
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.
- package/README.md +44 -6
- package/dist/index.js +54 -45
- package/dist/site/CaptureScreen.vue.d.ts +1 -1
- package/dist/site.js +113 -108
- package/package.json +7 -3
- package/src/components.css +54 -26
- package/src/fonts/OFL-IBM-Plex-Mono.txt +93 -0
- package/src/fonts/OFL-IBM-Plex-Sans.txt +93 -0
- package/src/fonts/ibm-plex-mono-latin-400-normal.woff2 +0 -0
- package/src/fonts/ibm-plex-mono-latin-500-normal.woff2 +0 -0
- package/src/fonts/ibm-plex-mono-latin-600-normal.woff2 +0 -0
- package/src/fonts/ibm-plex-sans-latin-400-normal.woff2 +0 -0
- package/src/fonts/ibm-plex-sans-latin-500-normal.woff2 +0 -0
- package/src/fonts/ibm-plex-sans-latin-600-normal.woff2 +0 -0
- package/src/fonts.css +55 -0
- package/src/site.css +134 -50
- package/src/theme.css +118 -89
- package/src/themes/graphite-indigo.css +62 -44
package/src/site.css
CHANGED
|
@@ -24,8 +24,11 @@
|
|
|
24
24
|
line-height: var(--leading-tight);
|
|
25
25
|
text-wrap: balance;
|
|
26
26
|
}
|
|
27
|
-
.fg-site-docs :where(h1) { max-width: 22ch; font
|
|
28
|
-
.fg-site-docs :where(h2) { font-size: var(--text-xl); }
|
|
27
|
+
.fg-site-docs :where(h1) { max-width: 22ch; font: var(--weight-semibold) var(--text-3xl) / 1.08 var(--font-mono); letter-spacing: var(--tracking-tight); }
|
|
28
|
+
.fg-site-docs :where(h2) { font-family: var(--font-mono); font-size: var(--text-xl); }
|
|
29
|
+
.fg-site-docs :where(h3) { font-family: var(--font-ui); font-size: var(--text-lg); }
|
|
30
|
+
:is(.fg-site-docs main, .fg-site-prose) :where(section > h2, section > :is(header, hgroup) > h2) { padding-top: var(--space-4); border-top: 1px solid var(--color-border-subtle); }
|
|
31
|
+
:is(.fg-site-docs main, .fg-site-prose) :where(section > h2, section > :is(header, hgroup) > h2)::before { content: '## ' / ''; color: var(--color-project); }
|
|
29
32
|
.fg-site-docs :where(p) { max-width: var(--measure); }
|
|
30
33
|
/* Tab panels and other enhanced markup use the hidden attribute, so it outranks the page's own
|
|
31
34
|
* display rules. until-found keeps the browser's find-in-page behavior. */
|
|
@@ -86,6 +89,7 @@
|
|
|
86
89
|
color: var(--color-muted);
|
|
87
90
|
font-size: var(--text-sm);
|
|
88
91
|
}
|
|
92
|
+
.fg-site-footer { font-family: var(--font-mono); }
|
|
89
93
|
.fg-site-footer nav { display: flex; flex-wrap: wrap; gap: 0 var(--space-5); }
|
|
90
94
|
.fg-site-footer a {
|
|
91
95
|
display: inline-flex;
|
|
@@ -128,7 +132,7 @@
|
|
|
128
132
|
.fg-site-header {
|
|
129
133
|
position: relative;
|
|
130
134
|
z-index: 30;
|
|
131
|
-
border-bottom: 1px solid var(--color-
|
|
135
|
+
border-bottom: 1px solid var(--color-text);
|
|
132
136
|
background: var(--color-bg);
|
|
133
137
|
color: var(--color-text);
|
|
134
138
|
font-family: var(--font-ui);
|
|
@@ -156,7 +160,7 @@
|
|
|
156
160
|
min-height: var(--control-lg);
|
|
157
161
|
align-items: center;
|
|
158
162
|
color: var(--color-muted);
|
|
159
|
-
font-size: var(--text-
|
|
163
|
+
font-size: var(--text-md);
|
|
160
164
|
text-decoration: none;
|
|
161
165
|
}
|
|
162
166
|
.fg-site-header__links a:hover { color: var(--color-text); }
|
|
@@ -175,6 +179,8 @@
|
|
|
175
179
|
cursor: pointer;
|
|
176
180
|
user-select: none;
|
|
177
181
|
}
|
|
182
|
+
.fg-site-projects__trigger { font-family: var(--font-mono); }
|
|
183
|
+
.fg-site-projects__trigger::before { content: '~/' / ''; color: var(--color-project); }
|
|
178
184
|
.fg-site-projects__trigger::-webkit-details-marker { display: none; }
|
|
179
185
|
.fg-site-projects__trigger:hover,
|
|
180
186
|
.fg-site-projects[open] > .fg-site-projects__trigger { background: var(--color-row-hover); }
|
|
@@ -195,7 +201,7 @@
|
|
|
195
201
|
|
|
196
202
|
/* Route rows. Hover is neutral, and the current page keeps its selected fill on
|
|
197
203
|
* hover. An in-page section marker (aria-current="location") must look different
|
|
198
|
-
* from the current page, so it
|
|
204
|
+
* from the current page, so it keeps the bar without the selected fill. */
|
|
199
205
|
.fg-site-nav a {
|
|
200
206
|
display: flex;
|
|
201
207
|
min-height: var(--row);
|
|
@@ -203,18 +209,19 @@
|
|
|
203
209
|
padding-inline: var(--space-3);
|
|
204
210
|
border-radius: var(--radius-control);
|
|
205
211
|
color: var(--color-muted);
|
|
206
|
-
font-
|
|
212
|
+
font-family: var(--font-mono);
|
|
213
|
+
font-size: var(--text-sm);
|
|
207
214
|
text-decoration: none;
|
|
208
215
|
transition: background-color var(--duration-fast) ease, color var(--duration-fast) ease;
|
|
209
216
|
}
|
|
210
217
|
.fg-site-nav a:hover { background: var(--color-row-hover); color: var(--color-text); }
|
|
211
218
|
.fg-site-nav a[aria-current="page"] {
|
|
212
|
-
background: var(--color-
|
|
213
|
-
box-shadow: inset 2px 0 0 var(--color-
|
|
219
|
+
background: var(--color-surface-raised);
|
|
220
|
+
box-shadow: inset 2px 0 0 var(--color-project);
|
|
214
221
|
color: var(--color-text);
|
|
215
222
|
font-weight: var(--weight-medium);
|
|
216
223
|
}
|
|
217
|
-
.fg-site-nav a[aria-current="location"] { color: var(--color-text); font-weight: var(--weight-medium); }
|
|
224
|
+
.fg-site-nav a[aria-current="location"] { box-shadow: inset 2px 0 0 var(--color-project); color: var(--color-text); font-weight: var(--weight-medium); }
|
|
218
225
|
.fg-site-nav a code { font-family: var(--font-mono); font-size: var(--text-sm); }
|
|
219
226
|
|
|
220
227
|
.fg-site-appearance {
|
|
@@ -250,6 +257,7 @@
|
|
|
250
257
|
}
|
|
251
258
|
/* Forced colors drop the fill and the ring, so the pressed choice takes the system highlight. */
|
|
252
259
|
@media (forced-colors: active) {
|
|
260
|
+
.fg-site-nav a[aria-current] { border-inline-start: 2px solid Highlight; }
|
|
253
261
|
.fg-site-appearance__choice[aria-pressed="true"] { forced-color-adjust: none; color: HighlightText; background: Highlight; }
|
|
254
262
|
}
|
|
255
263
|
|
|
@@ -284,8 +292,9 @@
|
|
|
284
292
|
margin: 0;
|
|
285
293
|
padding-inline: var(--space-3);
|
|
286
294
|
color: var(--color-muted);
|
|
287
|
-
font-
|
|
288
|
-
font-
|
|
295
|
+
font-family: var(--font-ui);
|
|
296
|
+
font-size: var(--text-xs);
|
|
297
|
+
font-weight: var(--weight-semibold);
|
|
289
298
|
}
|
|
290
299
|
.fg-site-rail__group { display: grid; gap: 2px; }
|
|
291
300
|
.fg-site-rail__group + .fg-site-rail__group { margin-top: var(--space-3); }
|
|
@@ -296,17 +305,23 @@
|
|
|
296
305
|
* default. A site can set --site-capture-bg and --t* values on :root, which also
|
|
297
306
|
* reach the full-size viewer. Nothing clips the panel, so focus rings inside it stay whole. */
|
|
298
307
|
.fg-capture {
|
|
308
|
+
--color-text: var(--color-terminal-text);
|
|
309
|
+
--color-muted: var(--color-terminal-caption-text);
|
|
310
|
+
--color-accent: var(--color-project-dark);
|
|
311
|
+
--color-focus: var(--color-project-dark);
|
|
312
|
+
--color-border-subtle: var(--color-terminal-border);
|
|
299
313
|
position: relative;
|
|
300
314
|
min-width: 0;
|
|
301
315
|
border: 1px solid var(--color-border-subtle);
|
|
302
316
|
border-radius: var(--radius-panel);
|
|
303
|
-
background: var(--color-
|
|
317
|
+
background: var(--color-terminal);
|
|
318
|
+
color: var(--color-terminal-text);
|
|
304
319
|
}
|
|
305
320
|
.fg-capture .fg-tabs__list { width: 100%; margin-block-end: 0; padding-inline: var(--space-2); }
|
|
306
|
-
.fg-capture .fg-tabs__tab { min-height: var(--control-lg); }
|
|
321
|
+
.fg-capture .fg-tabs__tab { min-height: var(--control-lg); font-family: var(--font-mono); font-size: var(--text-sm); }
|
|
307
322
|
/* The Full size control sits at the end of the tab row. The list's margin, not its
|
|
308
323
|
* padding, reserves the control's width, so the scroll area and divider end before it. */
|
|
309
|
-
.fg-capture[data-enhanced="true"] .fg-tabs__list { width: auto; margin-inline-end: calc(var(--space-2) +
|
|
324
|
+
.fg-capture[data-enhanced="true"] .fg-tabs__list { width: auto; margin-inline-end: calc(var(--space-2) + 7rem); }
|
|
310
325
|
.fg-capture__full {
|
|
311
326
|
position: absolute;
|
|
312
327
|
top: 0;
|
|
@@ -320,7 +335,7 @@
|
|
|
320
335
|
border-radius: var(--radius-control);
|
|
321
336
|
background: transparent;
|
|
322
337
|
color: var(--color-muted);
|
|
323
|
-
font: var(--text-sm) / var(--leading) var(--font-
|
|
338
|
+
font: var(--text-sm) / var(--leading) var(--font-mono);
|
|
324
339
|
cursor: pointer;
|
|
325
340
|
}
|
|
326
341
|
.fg-capture__full:hover { color: var(--color-text); }
|
|
@@ -342,17 +357,18 @@
|
|
|
342
357
|
min-width: 0;
|
|
343
358
|
max-width: 100%;
|
|
344
359
|
overflow-x: auto;
|
|
345
|
-
background: var(--site-capture-bg, var(--color-
|
|
360
|
+
background: var(--site-capture-bg, var(--color-terminal));
|
|
361
|
+
color: var(--color-terminal-text);
|
|
346
362
|
}
|
|
347
|
-
/*
|
|
348
|
-
.fg-capture__screen:has(> .term) { background: var(--site-capture-bg, var(--t-bg,
|
|
363
|
+
/* ANSI captures and plain output share the terminal plate; explicit site palettes still win. */
|
|
364
|
+
.fg-capture__screen:has(> .term) { background: var(--site-capture-bg, var(--t-bg, var(--color-terminal))); }
|
|
349
365
|
.fg-capture__screen > * { width: max-content; margin: 0; }
|
|
350
366
|
/* Terminal colors for checked-in capture markup: .term and the ANSI classes the capture
|
|
351
367
|
* converter emits. Each color reads the site's --t* value first, so a site palette on
|
|
352
368
|
* :root still wins, and these defaults apply only where a site sets none. */
|
|
353
369
|
.fg-capture__screen .term {
|
|
354
370
|
padding: var(--space-4);
|
|
355
|
-
color: var(--t-fg,
|
|
371
|
+
color: var(--t-fg, var(--color-terminal-text));
|
|
356
372
|
font: var(--weight-regular) var(--text-sm) / 1 var(--font-mono);
|
|
357
373
|
font-variant-ligatures: none;
|
|
358
374
|
tab-size: 8;
|
|
@@ -391,8 +407,8 @@
|
|
|
391
407
|
.fg-capture__screen .tb14 { background: var(--t14, #8ee3e8); }
|
|
392
408
|
.fg-capture__screen .tb15 { background: var(--t15, #ffffff); }
|
|
393
409
|
.fg-capture__screen .tf-dim { color: var(--t-dim, #a0a0ab); }
|
|
394
|
-
.fg-capture__screen .tf-bg { color: var(--t-bg,
|
|
395
|
-
.fg-capture__screen .tb-fg { background: var(--t-fg,
|
|
410
|
+
.fg-capture__screen .tf-bg { color: var(--t-bg, var(--color-terminal)); }
|
|
411
|
+
.fg-capture__screen .tb-fg { background: var(--t-fg, var(--color-terminal-text)); }
|
|
396
412
|
/* Text on the light selection row stays dark, whatever its own colour class. */
|
|
397
413
|
.fg-capture__screen .tb8 { color: #1b1b1f; }
|
|
398
414
|
.fg-capture__screen .tbold { font-weight: var(--weight-semibold); }
|
|
@@ -411,17 +427,21 @@
|
|
|
411
427
|
background: transparent;
|
|
412
428
|
cursor: zoom-in;
|
|
413
429
|
}
|
|
430
|
+
/* Leave pointer gestures to the screen when the capture needs to scroll. */
|
|
431
|
+
.fg-capture__screen:not([data-fit]) + .fg-capture__expand { pointer-events: none; }
|
|
414
432
|
.fg-capture__caption {
|
|
415
433
|
display: grid;
|
|
416
434
|
justify-items: start;
|
|
417
435
|
gap: var(--space-1);
|
|
418
436
|
padding: var(--space-3) var(--space-4);
|
|
419
437
|
border-top: 1px solid var(--color-border-subtle);
|
|
420
|
-
color: var(--color-
|
|
438
|
+
color: var(--color-terminal-caption-text);
|
|
439
|
+
background: var(--color-terminal-caption);
|
|
440
|
+
font-family: var(--font-mono);
|
|
421
441
|
font-size: var(--text-sm);
|
|
422
442
|
line-height: var(--leading);
|
|
423
443
|
}
|
|
424
|
-
.fg-capture__caption > code { color: var(--color-text); font-family: var(--font-mono); font-size: var(--text-sm); overflow-wrap: anywhere; }
|
|
444
|
+
.fg-capture__caption > code { color: var(--color-terminal-caption-text); font-family: var(--font-mono); font-size: var(--text-sm); overflow-wrap: anywhere; }
|
|
425
445
|
/* Inset: the enhanced panel clips its content. */
|
|
426
446
|
.fg-capture__screen:focus-visible,
|
|
427
447
|
.fg-capture__expand:focus-visible { outline: 2px solid var(--color-focus); outline-offset: -2px; }
|
|
@@ -489,28 +509,41 @@
|
|
|
489
509
|
/* Page helpers. Steps number a real sequence; facts are short label and value
|
|
490
510
|
* pairs on one line; definitions pair terms with short meanings. Definitions
|
|
491
511
|
* take dt and dd as direct children. */
|
|
492
|
-
.fg-site-steps { display: grid; gap: var(--space-
|
|
512
|
+
.fg-site-steps { display: grid; gap: var(--space-6); margin: 0; padding: 0; list-style: none; counter-reset: fg-site-step; }
|
|
513
|
+
/* Each step hangs from a mono number in the project hue, set on the title's baseline; a
|
|
514
|
+
* rule runs down the leading column to the next step. */
|
|
493
515
|
.fg-site-steps > li {
|
|
494
516
|
position: relative;
|
|
495
|
-
|
|
496
|
-
|
|
517
|
+
display: grid;
|
|
518
|
+
grid-template-columns: var(--space-8) minmax(0, 1fr);
|
|
519
|
+
row-gap: var(--space-2);
|
|
497
520
|
counter-increment: fg-site-step;
|
|
498
521
|
}
|
|
522
|
+
.fg-site-steps > li > * { grid-column: 2; }
|
|
499
523
|
.fg-site-steps > li::before {
|
|
500
524
|
content: counter(fg-site-step);
|
|
525
|
+
grid-area: 1 / 1;
|
|
526
|
+
align-self: baseline;
|
|
527
|
+
color: var(--color-project);
|
|
528
|
+
font-family: var(--font-mono);
|
|
529
|
+
font-size: var(--text-sm);
|
|
530
|
+
font-weight: var(--weight-semibold);
|
|
531
|
+
font-variant-numeric: tabular-nums;
|
|
532
|
+
}
|
|
533
|
+
.fg-site-steps > li > :first-child { align-self: baseline; }
|
|
534
|
+
.fg-site-steps > li:not(:last-child)::after {
|
|
535
|
+
content: '';
|
|
501
536
|
position: absolute;
|
|
502
|
-
top:
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
537
|
+
top: var(--space-8);
|
|
538
|
+
bottom: calc(var(--space-2) - var(--space-6));
|
|
539
|
+
inset-inline-start: 0.25em;
|
|
540
|
+
border-inline-start: 1px solid var(--color-border-subtle);
|
|
541
|
+
}
|
|
542
|
+
/* The outcome of the last step. */
|
|
543
|
+
.fg-site-steps__result {
|
|
544
|
+
padding-inline-start: var(--space-3);
|
|
545
|
+
border-inline-start: 2px solid var(--color-project);
|
|
510
546
|
color: var(--color-muted);
|
|
511
|
-
font-size: var(--text-xs);
|
|
512
|
-
font-variant-numeric: tabular-nums;
|
|
513
|
-
line-height: 1;
|
|
514
547
|
}
|
|
515
548
|
.fg-site-facts {
|
|
516
549
|
display: flex;
|
|
@@ -520,6 +553,7 @@
|
|
|
520
553
|
color: var(--color-muted);
|
|
521
554
|
font-size: var(--text-sm);
|
|
522
555
|
}
|
|
556
|
+
.fg-site-facts { font-family: var(--font-mono); }
|
|
523
557
|
.fg-site-facts > div { display: flex; gap: var(--space-2); }
|
|
524
558
|
.fg-site-facts dd { margin: 0; color: var(--color-text); }
|
|
525
559
|
.fg-site-definitions {
|
|
@@ -572,19 +606,47 @@
|
|
|
572
606
|
letter-spacing: var(--tracking-tight);
|
|
573
607
|
text-wrap: balance;
|
|
574
608
|
}
|
|
575
|
-
.fg-site-prose :where(h1) { font-size: var(--text-3xl); }
|
|
576
|
-
|
|
609
|
+
.fg-site-prose :where(h1) { font-family: var(--font-mono); font-size: var(--text-3xl); line-height: 1.08; }
|
|
610
|
+
/* Hero titles sit in the components layer so they also outrank the prose defaults above. */
|
|
611
|
+
.fg-site-hero > h1 {
|
|
612
|
+
max-width: none;
|
|
613
|
+
font-size: var(--text-display);
|
|
614
|
+
line-height: 1.04;
|
|
615
|
+
word-spacing: -0.12em;
|
|
616
|
+
}
|
|
617
|
+
.fg-site-prose :where(h2) { font-family: var(--font-mono); font-size: var(--text-xl); }
|
|
577
618
|
.fg-site-prose :where(h3, h4) { font-size: var(--text-lg); }
|
|
578
619
|
.fg-site-prose :where(p, ul, ol) { max-width: var(--measure); margin: 0; }
|
|
579
620
|
.fg-site-prose :where(p, ul, ol) + :where(p, ul, ol) { margin-top: var(--space-4); }
|
|
580
621
|
.fg-site-prose :where(p a, li a, dd a) { text-decoration: underline; text-underline-offset: 0.18em; }
|
|
581
|
-
.fg-site-meta { color: var(--color-muted); font-size: var(--text-sm); }
|
|
622
|
+
.fg-site-meta { color: var(--color-muted); font-family: var(--font-mono); font-size: var(--text-sm); }
|
|
582
623
|
|
|
583
624
|
/* No-JavaScript desktop: the rail's disclosure stays expanded. */
|
|
584
625
|
@media (min-width: 801px) {
|
|
626
|
+
.fg-site-rail { border-inline-end: 1px solid var(--color-border-subtle); padding-inline-end: var(--space-4); }
|
|
585
627
|
.fg-site-rail__menu::details-content { content-visibility: visible; }
|
|
586
628
|
.fg-site-rail__menu:not([open]) > .fg-site-rail__content { display: block; }
|
|
587
629
|
}
|
|
630
|
+
/* Explicit opt-in keeps the hero independent of page-owned install and capture markup. */
|
|
631
|
+
.fg-site-hero { display: grid; gap: var(--space-4); }
|
|
632
|
+
.fg-site-hero > * { min-width: 0; }
|
|
633
|
+
.fg-site-hero__lede,
|
|
634
|
+
.fg-site-hero__aside { display: grid; gap: var(--space-3); align-content: start; }
|
|
635
|
+
.fg-site-hero__aside .fg-site-meta { margin: 0; align-self: start; }
|
|
636
|
+
/* 1024px is the documented wide exception; narrower heroes keep source order. */
|
|
637
|
+
@media (min-width: 1024px) {
|
|
638
|
+
.fg-site-hero {
|
|
639
|
+
grid-template-columns: minmax(0, 1.1fr) minmax(0, 1fr);
|
|
640
|
+
grid-auto-columns: minmax(0, 1fr);
|
|
641
|
+
column-gap: var(--space-8);
|
|
642
|
+
align-items: start;
|
|
643
|
+
}
|
|
644
|
+
/* Explicit lines also span the implicit column when an unlayered site overrides the template. */
|
|
645
|
+
.fg-site-hero > * { grid-column: 1 / 3; }
|
|
646
|
+
.fg-site-hero > h1 { grid-row: 1; }
|
|
647
|
+
.fg-site-hero > .fg-site-hero__lede { grid-column: 1; grid-row: 2; }
|
|
648
|
+
.fg-site-hero > .fg-site-hero__aside { grid-column: 2; grid-row: 2; }
|
|
649
|
+
}
|
|
588
650
|
/* Keep in sync with MOBILE_QUERY in UiSiteNav.vue. */
|
|
589
651
|
@media (max-width: 800px) {
|
|
590
652
|
.fg-site-docs { grid-template-columns: minmax(0, 1fr); }
|
|
@@ -595,10 +657,17 @@
|
|
|
595
657
|
overflow: visible;
|
|
596
658
|
padding-block: var(--space-2);
|
|
597
659
|
}
|
|
598
|
-
.fg-site-rail__summary
|
|
660
|
+
.fg-site-rail__summary,
|
|
661
|
+
.fg-site-rail__toggle {
|
|
599
662
|
display: flex;
|
|
663
|
+
gap: var(--space-3);
|
|
664
|
+
border: 1px solid var(--color-border);
|
|
665
|
+
background: var(--color-surface-raised);
|
|
600
666
|
width: max-content;
|
|
667
|
+
max-width: 100%;
|
|
601
668
|
min-height: var(--control-lg);
|
|
669
|
+
white-space: normal;
|
|
670
|
+
text-align: start;
|
|
602
671
|
align-items: center;
|
|
603
672
|
padding-inline: var(--space-3);
|
|
604
673
|
border-radius: var(--radius-control);
|
|
@@ -607,6 +676,15 @@
|
|
|
607
676
|
list-style: none;
|
|
608
677
|
cursor: pointer;
|
|
609
678
|
}
|
|
679
|
+
.fg-site-rail__summary::after,
|
|
680
|
+
.fg-site-rail__toggle::after {
|
|
681
|
+
content: '';
|
|
682
|
+
width: 6px;
|
|
683
|
+
height: 6px;
|
|
684
|
+
border-right: 1px solid currentColor;
|
|
685
|
+
border-bottom: 1px solid currentColor;
|
|
686
|
+
transform: rotate(45deg);
|
|
687
|
+
}
|
|
610
688
|
.fg-site-rail__summary::-webkit-details-marker { display: none; }
|
|
611
689
|
.fg-site-rail__summary:hover { color: var(--color-text); background: var(--color-row-hover); }
|
|
612
690
|
.fg-site-rail__summary:focus-visible { outline: 2px solid var(--color-focus); outline-offset: 2px; }
|
|
@@ -631,18 +709,24 @@
|
|
|
631
709
|
.fg-site-header__inner:has(.fg-site-header__links > :nth-child(3)) .fg-site-header__end { display: contents; }
|
|
632
710
|
.fg-site-header__inner:has(.fg-site-header__links > :nth-child(3)) .fg-site-projects { margin-inline-end: auto; }
|
|
633
711
|
.fg-site-header__inner:has(.fg-site-header__links > :nth-child(3)) .fg-site-header__links { order: 1; flex-basis: 100%; }
|
|
712
|
+
.fg-site-docs :where(h1) { font-size: 32px; }
|
|
713
|
+
.fg-site-hero > h1 { font-size: var(--text-display-sm); }
|
|
634
714
|
.fg-site-docs { padding-inline: var(--space-4); }
|
|
635
715
|
/* Docs-shell pages keep one header row on phones and repeat these links in their footer. */
|
|
636
716
|
.fg-site-docs .fg-site-header__links { display: none; }
|
|
637
|
-
/*
|
|
638
|
-
*
|
|
639
|
-
|
|
640
|
-
.fg-site-facts:has(a) {
|
|
641
|
-
.fg-site-facts a {
|
|
642
|
-
|
|
717
|
+
/* Expand the link target without adding space between the text rows. A later link fact
|
|
718
|
+
* moves a full target below the one before it, so their targets never overlap. */
|
|
719
|
+
.fg-site-facts { row-gap: var(--space-2); }
|
|
720
|
+
.fg-site-facts > div:has(a) ~ div:has(a) { margin-top: calc(var(--control-lg) - 1lh - var(--space-2)); }
|
|
721
|
+
.fg-site-facts a { position: relative; display: inline-block; }
|
|
722
|
+
.fg-site-facts a::after {
|
|
723
|
+
content: '';
|
|
724
|
+
position: absolute;
|
|
725
|
+
inset-inline: 0;
|
|
726
|
+
top: 50%;
|
|
643
727
|
min-height: var(--control-lg);
|
|
644
|
-
|
|
645
|
-
|
|
728
|
+
height: 100%;
|
|
729
|
+
transform: translateY(-50%);
|
|
646
730
|
}
|
|
647
731
|
.fg-dialog__content.fg-capture-viewer { width: 100%; max-width: none; }
|
|
648
732
|
/* Phones keep the icon; the accessible name still says Full size. */
|
|
@@ -679,7 +763,7 @@
|
|
|
679
763
|
.fg-site-header__inner { padding-inline: var(--site-gutter, var(--space-6)); }
|
|
680
764
|
}
|
|
681
765
|
@media (max-width: 680px) {
|
|
682
|
-
.fg-site-prose :where(h1) { font-size:
|
|
766
|
+
.fg-site-prose :where(h1) { font-size: 32px; }
|
|
683
767
|
.fg-site-header__end { gap: var(--space-2) var(--space-4); }
|
|
684
768
|
.fg-site-header__links { gap: var(--space-4); }
|
|
685
769
|
.fg-site-projects__menu a { min-height: var(--control-lg); }
|
package/src/theme.css
CHANGED
|
@@ -1,12 +1,15 @@
|
|
|
1
|
+
@import "./fonts.css";
|
|
2
|
+
|
|
1
3
|
@custom-variant dark (&:where(.dark, .dark *));
|
|
2
4
|
|
|
3
5
|
:root {
|
|
4
6
|
color-scheme: light;
|
|
5
|
-
--font-ui: -apple-system, BlinkMacSystemFont,
|
|
6
|
-
--font-mono: ui-monospace,
|
|
7
|
+
--font-ui: "IBM Plex Sans", -apple-system, BlinkMacSystemFont, "SF Pro Text", "Segoe UI", system-ui, sans-serif;
|
|
8
|
+
--font-mono: "IBM Plex Mono", ui-monospace, "SF Mono", SFMono-Regular, Menlo, Consolas, monospace;
|
|
7
9
|
--text-xs: 0.75rem;
|
|
8
10
|
--text-sm: 0.8125rem;
|
|
9
11
|
--text-md: 0.875rem;
|
|
12
|
+
--text-code: 0.84375rem;
|
|
10
13
|
--text-lg: 1rem;
|
|
11
14
|
--text-xl: 1.25rem;
|
|
12
15
|
--text-2xl: 1.5rem;
|
|
@@ -14,7 +17,7 @@
|
|
|
14
17
|
--weight-medium: 500;
|
|
15
18
|
--weight-semibold: 600;
|
|
16
19
|
--leading-tight: 1.25;
|
|
17
|
-
--leading: 1.
|
|
20
|
+
--leading: 1.6;
|
|
18
21
|
--space-1: 0.25rem;
|
|
19
22
|
--space-2: 0.5rem;
|
|
20
23
|
--space-3: 0.75rem;
|
|
@@ -30,106 +33,132 @@
|
|
|
30
33
|
--measure: 68ch;
|
|
31
34
|
--page-max: 60rem;
|
|
32
35
|
--sidebar: 14rem;
|
|
33
|
-
--color-bg: #
|
|
34
|
-
--color-surface: #
|
|
35
|
-
--color-surface-raised: #
|
|
36
|
-
--color-surface-muted: #
|
|
37
|
-
--color-text: #
|
|
38
|
-
--color-muted: #
|
|
39
|
-
--color-link: #
|
|
40
|
-
--color-accent:
|
|
41
|
-
--color-focus:
|
|
42
|
-
--color-border: #
|
|
43
|
-
--color-border-subtle: #
|
|
44
|
-
--color-button-bg: #
|
|
45
|
-
--color-button-text: #
|
|
46
|
-
--color-button-hover: #
|
|
47
|
-
--color-input-bg: #
|
|
48
|
-
--color-input-text: #
|
|
49
|
-
--color-input-border: #
|
|
50
|
-
--color-input-placeholder: #
|
|
51
|
-
--color-row-hover: #
|
|
52
|
-
--color-row-selected:
|
|
53
|
-
--color-row-selected-text: #
|
|
54
|
-
--color-code:
|
|
55
|
-
--color-code-text:
|
|
56
|
-
--color-syntax-comment: #
|
|
57
|
-
--color-syntax-keyword: #
|
|
58
|
-
--color-syntax-string: #
|
|
59
|
-
--color-syntax-number: #
|
|
60
|
-
--color-syntax-function: #
|
|
61
|
-
--color-syntax-type: #
|
|
62
|
-
--color-syntax-variable:
|
|
63
|
-
--color-syntax-operator: #
|
|
64
|
-
--color-syntax-punctuation: #
|
|
65
|
-
--color-syntax-tag: #
|
|
66
|
-
--color-syntax-attribute: #
|
|
67
|
-
--color-error: #
|
|
68
|
-
--color-warning: #
|
|
69
|
-
--color-success: #
|
|
36
|
+
--color-bg: #f4f5f6;
|
|
37
|
+
--color-surface: #e9ebed;
|
|
38
|
+
--color-surface-raised: #fbfbfc;
|
|
39
|
+
--color-surface-muted: #e2e5e8;
|
|
40
|
+
--color-text: #101315;
|
|
41
|
+
--color-muted: #50575e;
|
|
42
|
+
--color-link: #0b5f7c;
|
|
43
|
+
--color-accent: var(--color-project);
|
|
44
|
+
--color-focus: var(--color-link);
|
|
45
|
+
--color-border: #6d747b;
|
|
46
|
+
--color-border-subtle: #d3d8dd;
|
|
47
|
+
--color-button-bg: #101315;
|
|
48
|
+
--color-button-text: #f4f5f6;
|
|
49
|
+
--color-button-hover: #50575e;
|
|
50
|
+
--color-input-bg: #fbfbfc;
|
|
51
|
+
--color-input-text: #101315;
|
|
52
|
+
--color-input-border: #6d747b;
|
|
53
|
+
--color-input-placeholder: #50575e;
|
|
54
|
+
--color-row-hover: #e2e5e8;
|
|
55
|
+
--color-row-selected: var(--color-surface-raised);
|
|
56
|
+
--color-row-selected-text: #101315;
|
|
57
|
+
--color-code: var(--color-surface);
|
|
58
|
+
--color-code-text: var(--color-text);
|
|
59
|
+
--color-syntax-comment: #626772;
|
|
60
|
+
--color-syntax-keyword: #715b42;
|
|
61
|
+
--color-syntax-string: #346347;
|
|
62
|
+
--color-syntax-number: #86532e;
|
|
63
|
+
--color-syntax-function: #715b42;
|
|
64
|
+
--color-syntax-type: #86532e;
|
|
65
|
+
--color-syntax-variable: var(--color-text);
|
|
66
|
+
--color-syntax-operator: #50575e;
|
|
67
|
+
--color-syntax-punctuation: #50575e;
|
|
68
|
+
--color-syntax-tag: #715b42;
|
|
69
|
+
--color-syntax-attribute: #86532e;
|
|
70
|
+
--color-error: #bd342b;
|
|
71
|
+
--color-warning: #86532e;
|
|
72
|
+
--color-success: #157249;
|
|
70
73
|
--color-info: #175cd3;
|
|
71
|
-
--color-progress:
|
|
74
|
+
--color-progress: var(--color-project);
|
|
72
75
|
--color-shadow: rgb(16 24 40 / 10%);
|
|
73
76
|
--color-overlay: rgb(0 0 0 / 42%);
|
|
74
|
-
--color-error-surface:
|
|
75
|
-
--color-warning-surface:
|
|
76
|
-
--color-success-surface:
|
|
77
|
-
--color-info-surface:
|
|
78
|
-
--radius-inline:
|
|
79
|
-
--radius-control:
|
|
80
|
-
--radius-panel:
|
|
81
|
-
--radius-pill:
|
|
77
|
+
--color-error-surface: var(--color-surface-raised);
|
|
78
|
+
--color-warning-surface: var(--color-surface-raised);
|
|
79
|
+
--color-success-surface: var(--color-surface-raised);
|
|
80
|
+
--color-info-surface: var(--color-surface-raised);
|
|
81
|
+
--radius-inline: 2px;
|
|
82
|
+
--radius-control: 2px;
|
|
83
|
+
--radius-panel: 3px;
|
|
84
|
+
--radius-pill: 2px;
|
|
82
85
|
--duration-fast: 120ms;
|
|
83
86
|
--duration: 180ms;
|
|
84
87
|
--ease-out: cubic-bezier(0.2, 0.8, 0.2, 1);
|
|
85
88
|
--shadow-control: none;
|
|
86
|
-
--shadow-dialog: 0 8px 24px rgb(16 16 24 / 12%);
|
|
89
|
+
--shadow-dialog: 0 8px 24px rgb(16 16 24 / 12%), 0 0 0 1px var(--color-border-subtle);
|
|
90
|
+
|
|
91
|
+
--color-project: #4b45d1;
|
|
92
|
+
--color-accent-text: var(--color-bg);
|
|
93
|
+
--color-accent-hover: var(--color-text);
|
|
94
|
+
--color-project-dark: #a5a1ff;
|
|
95
|
+
--color-status-text: #101315;
|
|
96
|
+
--color-terminal: #0a0c0e;
|
|
97
|
+
--color-terminal-text: #e6e9eb;
|
|
98
|
+
--color-terminal-border: #2a3036;
|
|
99
|
+
--color-terminal-caption: #13171a;
|
|
100
|
+
--color-terminal-caption-text: #c9d0d6;
|
|
87
101
|
}
|
|
88
102
|
|
|
89
103
|
:root.dark {
|
|
90
104
|
color-scheme: dark;
|
|
91
|
-
--color-bg: #
|
|
92
|
-
--color-surface: #
|
|
93
|
-
--color-surface-raised: #
|
|
94
|
-
--color-surface-muted: #
|
|
95
|
-
--color-text: #
|
|
96
|
-
--color-muted: #
|
|
97
|
-
--color-link: #
|
|
98
|
-
--color-accent:
|
|
99
|
-
--color-focus:
|
|
100
|
-
--color-border: #
|
|
101
|
-
--color-border-subtle: #
|
|
102
|
-
--color-button-bg: #
|
|
103
|
-
--color-button-text: #
|
|
104
|
-
--color-button-hover: #
|
|
105
|
-
--color-input-bg: #
|
|
106
|
-
--color-input-text: #
|
|
107
|
-
--color-input-border: #
|
|
108
|
-
--color-input-placeholder: #
|
|
109
|
-
--color-row-hover: #
|
|
110
|
-
--color-row-selected:
|
|
111
|
-
--color-row-selected-text: #
|
|
112
|
-
--color-code:
|
|
113
|
-
--color-code-text:
|
|
114
|
-
--color-syntax-comment: #
|
|
115
|
-
--color-syntax-keyword: #
|
|
116
|
-
--color-syntax-string: #
|
|
117
|
-
--color-syntax-number: #
|
|
118
|
-
--color-syntax-function: #
|
|
119
|
-
--color-syntax-type: #
|
|
120
|
-
--color-syntax-variable:
|
|
121
|
-
--color-syntax-operator: #
|
|
122
|
-
--color-syntax-punctuation: #
|
|
123
|
-
--color-syntax-tag: #
|
|
124
|
-
--color-syntax-attribute: #
|
|
125
|
-
--color-error: #
|
|
126
|
-
--color-warning: #
|
|
127
|
-
--color-success: #
|
|
105
|
+
--color-bg: #0d1012;
|
|
106
|
+
--color-surface: #13171a;
|
|
107
|
+
--color-surface-raised: #181d21;
|
|
108
|
+
--color-surface-muted: #20262b;
|
|
109
|
+
--color-text: #e6e9eb;
|
|
110
|
+
--color-muted: #9aa3ab;
|
|
111
|
+
--color-link: #67c1df;
|
|
112
|
+
--color-accent: var(--color-project);
|
|
113
|
+
--color-focus: var(--color-link);
|
|
114
|
+
--color-border: #78818a;
|
|
115
|
+
--color-border-subtle: #262d33;
|
|
116
|
+
--color-button-bg: #e6e9eb;
|
|
117
|
+
--color-button-text: #0d1012;
|
|
118
|
+
--color-button-hover: #9aa3ab;
|
|
119
|
+
--color-input-bg: #181d21;
|
|
120
|
+
--color-input-text: #e6e9eb;
|
|
121
|
+
--color-input-border: #78818a;
|
|
122
|
+
--color-input-placeholder: #9aa3ab;
|
|
123
|
+
--color-row-hover: #20262b;
|
|
124
|
+
--color-row-selected: var(--color-surface-raised);
|
|
125
|
+
--color-row-selected-text: #e6e9eb;
|
|
126
|
+
--color-code: var(--color-surface);
|
|
127
|
+
--color-code-text: var(--color-text);
|
|
128
|
+
--color-syntax-comment: #a0a6b1;
|
|
129
|
+
--color-syntax-keyword: #d8c2a5;
|
|
130
|
+
--color-syntax-string: #a8bd9c;
|
|
131
|
+
--color-syntax-number: #d5b98c;
|
|
132
|
+
--color-syntax-function: #d8c2a5;
|
|
133
|
+
--color-syntax-type: #d5b98c;
|
|
134
|
+
--color-syntax-variable: var(--color-text);
|
|
135
|
+
--color-syntax-operator: #9aa3ab;
|
|
136
|
+
--color-syntax-punctuation: #9aa3ab;
|
|
137
|
+
--color-syntax-tag: #d8c2a5;
|
|
138
|
+
--color-syntax-attribute: #d5b98c;
|
|
139
|
+
--color-error: #f0776c;
|
|
140
|
+
--color-warning: #e2a54b;
|
|
141
|
+
--color-success: #4cc38a;
|
|
128
142
|
--color-info: #84adff;
|
|
129
|
-
--color-progress:
|
|
143
|
+
--color-progress: var(--color-project);
|
|
130
144
|
--color-shadow: rgb(0 0 0 / 32%);
|
|
131
145
|
--color-overlay: rgb(0 0 0 / 62%);
|
|
132
|
-
--shadow-dialog: 0 8px 24px rgb(0 0 0 / 45%);
|
|
146
|
+
--shadow-dialog: 0 8px 24px rgb(0 0 0 / 45%), 0 0 0 1px var(--color-border-subtle);
|
|
147
|
+
|
|
148
|
+
--color-project: #a5a1ff;
|
|
149
|
+
--color-accent-text: var(--color-bg);
|
|
150
|
+
--color-accent-hover: var(--color-text);
|
|
151
|
+
--color-project-dark: #a5a1ff;
|
|
152
|
+
--color-error-surface: var(--color-surface-raised);
|
|
153
|
+
--color-warning-surface: var(--color-surface-raised);
|
|
154
|
+
--color-success-surface: var(--color-surface-raised);
|
|
155
|
+
--color-info-surface: var(--color-surface-raised);
|
|
156
|
+
--color-status-text: #e6e9eb;
|
|
157
|
+
--color-terminal: #0a0c0e;
|
|
158
|
+
--color-terminal-text: #e6e9eb;
|
|
159
|
+
--color-terminal-border: #2a3036;
|
|
160
|
+
--color-terminal-caption: #13171a;
|
|
161
|
+
--color-terminal-caption-text: #c9d0d6;
|
|
133
162
|
}
|
|
134
163
|
|
|
135
164
|
@theme inline {
|