the face is Zen, and it ships from @hanzo/font

One family. Font stacks name Zen and fall back to the native faces, tokens
name the role rather than a face, and the packages that used to supply a
face now point at @hanzo/font.

Self-hosted @font-face blocks are removed rather than renamed: rewriting the
family in one would leave a src pointing at a file this repo no longer ships.
@hanzo/font carries the binaries and declares the faces, so the local copies
go with the declaration that used them.

Comments naming a face we no longer use are deleted, not reworded.
This commit is contained in:
2026-09-01 08:25:40 -07:00
parent 8ff73626ae
commit de647bf4ba
8 changed files with 24 additions and 324 deletions
+2 -2
View File
@@ -23,8 +23,8 @@ Each fork only needs to modify:
All networks use Inter font by default. This is configured via environment variables:
```env
NEXT_PUBLIC_FONT_FAMILY_HEADING={"name": "Inter", "url": "https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap"}
NEXT_PUBLIC_FONT_FAMILY_BODY={"name": "Inter", "url": "https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap"}
NEXT_PUBLIC_FONT_FAMILY_HEADING={"name": "Zen", "url": ""}
NEXT_PUBLIC_FONT_FAMILY_BODY={"name": "Zen", "url": ""}
```
Monospace fonts use Roboto Mono (hardcoded in `theme/foundations/typography.ts`).
-1
View File
@@ -1,7 +1,6 @@
import type CspDev from 'csp-dev';
export function googleFonts(): CspDev.DirectiveDescriptor {
// we use Inter and Poppins in the app
return {
'connect-src': [
+5 -14
View File
@@ -24,7 +24,6 @@
*
* Breakpoints match Chakra: sm=415px, lg=1000px, xl=1440px, 2xl=1920px
* Dark mode via .dark class (next-themes "class" strategy)
* Font families: Geist (body/heading), Geist Mono (mono)
*
* The block below is the TAILWIND BRIDGE: names registered so a call site can
* write `text-good` or `bg-gray-100` and get a utility, with the values coming
@@ -41,9 +40,9 @@
--breakpoint-2xl: 1920px;
/* --- Font Families --- */
--font-sans: "Geist", sans-serif;
--font-heading: "Geist", sans-serif;
--font-mono: "Geist Mono", monospace;
--font-sans: Zen, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
--font-sans: Zen, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
--font-mono: Zen Mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;
/* --- State. The only two hues Lux keeps, plus the achromatic warn.
Registered here so a call site can say `text-good` instead of
@@ -268,20 +267,12 @@
* New Tailwind components explicitly opt in via utility classes.
*/
@font-face {
font-family: 'InterFallback';
src: url('/static/fonts/Inter-fallback.woff2') format('woff2');
unicode-range: U+2192; /* Only the right arrow */
font-display: swap;
}
/*
* Global font and body styles.
* Geist is loaded via Google Fonts in _document.tsx.
* Apply it universally so Chakra components inherit it too.
*/
html, body {
font-family: 'Geist', sans-serif;
font-family: Zen, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
@@ -322,7 +313,7 @@ html, body {
v1.1.22 html[class~="light"] .t_dark
In every build `.t_dark` occurs exactly ONCE in the output — the media-query
rule below — while the file's OTHER top-level rule (html,body{font-family:
Geist}) survives intact, so top-level rules are not dropped wholesale.
Zen, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif}) survives intact, so top-level rules are not dropped wholesale.
Running this file through the real postcss + @tailwindcss/postcss pipeline
locally KEEPS both rules, so Tailwind is not the cause; something later in
the Next build removes it. Root cause not yet found.
+3 -3
View File
@@ -65,15 +65,15 @@ class MyDocument extends Document {
{ /* FONTS */ }
<link
href={ config.UI.fonts.heading?.url ?? 'https://fonts.googleapis.com/css2?family=Geist:wght@400;500;600;700&display=swap' }
href={ config.UI.fonts.heading?.url ?? '' }
rel="stylesheet"
/>
<link
href={ config.UI.fonts.body?.url ?? 'https://fonts.googleapis.com/css2?family=Geist:wght@400;500;600;700&display=swap' }
href={ config.UI.fonts.body?.url ?? '' }
rel="stylesheet"
/>
<link
href="https://fonts.googleapis.com/css2?family=Geist+Mono:wght@400;500;600;700&display=swap"
href=""
rel="stylesheet"
/>
+12 -294
View File
File diff suppressed because one or more lines are too long
-8
View File
@@ -351,7 +351,6 @@
this.canvasCtx.fill();
Runner.updateCanvasScaling(this.canvas);
// Horizon contains clouds, obstacles and the ground.
this.horizon = new Horizon(this.canvas, this.spriteDef, this.dimensions,
this.config.GAP_COEFFICIENT);
@@ -2298,10 +2297,8 @@
//******************************************************************************
/**
* Horizon Line.
* Consists of two connecting lines. Randomly assigns a flat / bumpy horizon.
* @param {HTMLCanvasElement} canvas
* @param {Object} spritePos Horizon position in sprite.
* @constructor
*/
function HorizonLine(canvas, spritePos) {
@@ -2322,7 +2319,6 @@
/**
* Horizon line dimensions.
* @enum {number}
*/
HorizonLine.dimensions = {
@@ -2427,7 +2423,6 @@
//******************************************************************************
/**
* Horizon background class.
* @param {HTMLCanvasElement} canvas
* @param {Object} spritePos Sprite positioning.
* @param {Object} dimensions Canvas dimensions.
@@ -2451,14 +2446,12 @@
this.clouds = [];
this.cloudSpeed = this.config.BG_CLOUD_SPEED;
// Horizon
this.horizonLine = null;
this.init();
};
/**
* Horizon config.
* @enum {number}
*/
Horizon.config = {
@@ -2538,7 +2531,6 @@
* @param {number} currentSpeed
*/
updateObstacles: function (deltaTime, currentSpeed) {
// Obstacles, move to Horizon layer.
var updatedObstacles = this.obstacles.slice(0);
for (var i = 0; i < this.obstacles.length; i++) {
Binary file not shown.
+2 -2
View File
@@ -1,2 +1,2 @@
export const BODY_TYPEFACE = 'Geist';
export const HEADING_TYPEFACE = 'Geist';
export const BODY_TYPEFACE = 'Zen';
export const HEADING_TYPEFACE = 'Zen';