feat(ui): self-host fonts, remove Google Fonts CDN

- Bundle Satoshi (sans) and JetBrains Mono in web/fonts/
- New fonts.css with @font-face declarations
- Remove Google Fonts preconnect and stylesheet link
- Update --sans token: Satoshi replaces Space Grotesk/Inter
- Zero external font requests, works fully offline
- Keep extra fonts (Geo, Mooli, StackSansNotch) for future use
This commit is contained in:
2026-05-16 19:58:11 -04:00
parent 5fd324e4bb
commit 03e982281c
14 changed files with 70 additions and 5 deletions
+67
View File
@@ -0,0 +1,67 @@
/* ── Self-hosted fonts ─────────────────────────────── */
/* Satoshi — primary sans */
@font-face {
font-family: 'Satoshi';
src: url('/fonts/Satoshi-Light.woff2') format('woff2');
font-weight: 300;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: 'Satoshi';
src: url('/fonts/Satoshi-Regular.woff2') format('woff2');
font-weight: 400;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: 'Satoshi';
src: url('/fonts/Satoshi-Medium.woff2') format('woff2');
font-weight: 500;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: 'Satoshi';
src: url('/fonts/Satoshi-Bold.woff2') format('woff2');
font-weight: 700;
font-style: normal;
font-display: swap;
}
/* JetBrains Mono — mono */
@font-face {
font-family: 'JetBrains Mono';
src: url('/fonts/JetBrainsMono-Light.woff2') format('woff2');
font-weight: 300;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: 'JetBrains Mono';
src: url('/fonts/JetBrainsMono-Regular.woff2') format('woff2');
font-weight: 400;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: 'JetBrains Mono';
src: url('/fonts/JetBrainsMono-Medium.woff2') format('woff2');
font-weight: 500;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: 'JetBrains Mono';
src: url('/fonts/JetBrainsMono-Bold.woff2') format('woff2');
font-weight: 700;
font-style: normal;
font-display: swap;
}
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1 -3
View File
@@ -4,9 +4,7 @@
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<title>nib</title> <title>nib</title>
<link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="stylesheet" href="/fonts.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=Space+Grotesk:wght@300;400;500;600;700&family=JetBrains+Mono:ital,wght@0,300;0,400;0,500;0,600;0,700;1,400&display=swap" rel="stylesheet">
<link rel="stylesheet" href="/style.css"> <link rel="stylesheet" href="/style.css">
</head> </head>
<body> <body>
+2 -2
View File
@@ -19,7 +19,7 @@
--ok: #7aab72; --ok: #7aab72;
--danger: #b85858; --danger: #b85858;
--lineage: #9878bc; --lineage: #9878bc;
--sans: 'Space Grotesk', system-ui, sans-serif; --sans: 'Satoshi', system-ui, sans-serif;
--mono: 'JetBrains Mono', ui-monospace, monospace; --mono: 'JetBrains Mono', ui-monospace, monospace;
--r1: 2px; --r1: 2px;
--r2: 4px; --r2: 4px;
@@ -70,7 +70,7 @@
--ok: #4ade80; --ok: #4ade80;
--danger: #ef4444; --danger: #ef4444;
--lineage: #a78bfa; --lineage: #a78bfa;
--sans: 'Inter', system-ui, sans-serif; --sans: 'Satoshi', system-ui, sans-serif;
--mono: 'JetBrains Mono', ui-monospace, monospace; --mono: 'JetBrains Mono', ui-monospace, monospace;
} }