Files
zeekay b9b47efcda Arabic companions: Noto Kufi Arabic under Zen, Noto Sans Arabic beside it; 1.9.4
Zen draws no Arabic, so an Arabic page fell to whatever face the browser
picked. Two variable companions over Zen's own weight axis, cut to the
Arabic blocks, now ship in fonts/arabic. Each is declared under its own
family with an Arabic unicode-range, and the default under Zen and Zen
Mono too, so font-family: Zen sets Arabic and a page with no Arabic on it
requests nothing new.

They are not ours and keep their names, notices and vendor; identity.py
checks them for exactly that, from the table arabic.py builds them from,
pinned by commit and checksum. next.mjs refuses a default whose weight
range is not Zen's: faces composite only when their descriptors match,
and a companion that wins the weight match sends Latin to the system sans.
2026-10-22 19:22:13 -07:00

39 lines
3.7 KiB
CSS

/* Zen — the Hanzo type family, as plain CSS. Generated by scripts/next.mjs.
Do not edit.
Every other entry in this package is a next/font binding, so the faces were
reachable only from a Next app. A font is not a framework feature: this file
is @font-face and nothing else, so Vite, Tauri, Astro, a plain <link> and any
bundler load the same faces from the same package.
Import it once at your root: import '@hanzo/font/css'
The two text families are variable over wght 100-900, so one file covers
every weight. Pixel is five separate shapes rather than a weight axis.
Arabic comes from companions that are not ours, in fonts/arabic:
Noto Kufi Arabic, Noto Sans Arabic. Each is declared under its own
family, and the default under 'Zen' and 'Zen Mono' too, for the Arabic blocks
only: a page with no Arabic on it never requests one. */
@font-face{font-family:'Zen';src:url('./fonts/zen-sans/Zen-Variable.woff2') format('woff2');font-weight:100 900;font-style:normal;font-display:swap}
@font-face{font-family:'Zen';src:url('./fonts/zen-sans/Zen-Italic-Variable.woff2') format('woff2');font-weight:100 900;font-style:italic;font-display:swap}
@font-face{font-family:'Zen';src:url('./fonts/arabic/NotoKufiArabic-Variable.woff2') format('woff2');font-weight:100 900;font-style:normal;font-display:swap;unicode-range:U+0600-06FF, U+0750-077F, U+FB50-FDFF, U+FE70-FEFC}
@font-face{font-family:'Zen Mono';src:url('./fonts/zen-mono/ZenMono-Variable.woff2') format('woff2');font-weight:100 900;font-style:normal;font-display:swap}
@font-face{font-family:'Zen Mono';src:url('./fonts/zen-mono/ZenMono-Italic-Variable.woff2') format('woff2');font-weight:100 900;font-style:italic;font-display:swap}
@font-face{font-family:'Zen Mono';src:url('./fonts/arabic/NotoKufiArabic-Variable.woff2') format('woff2');font-weight:100 900;font-style:normal;font-display:swap;unicode-range:U+0600-06FF, U+0750-077F, U+FB50-FDFF, U+FE70-FEFC}
@font-face{font-family:'Noto Kufi Arabic';src:url('./fonts/arabic/NotoKufiArabic-Variable.woff2') format('woff2');font-weight:100 900;font-style:normal;font-display:swap;unicode-range:U+0600-06FF, U+0750-077F, U+FB50-FDFF, U+FE70-FEFC}
@font-face{font-family:'Noto Sans Arabic';src:url('./fonts/arabic/NotoSansArabic-Variable.woff2') format('woff2');font-weight:100 900;font-style:normal;font-display:swap;unicode-range:U+0600-06FF, U+0750-077F, U+FB50-FDFF, U+FE70-FEFC}
@font-face{font-family:'Zen Pixel Circle';src:url('./fonts/zen-pixel/ZenPixel-Circle.woff2') format('woff2');font-style:normal;font-display:swap}
@font-face{font-family:'Zen Pixel Grid';src:url('./fonts/zen-pixel/ZenPixel-Grid.woff2') format('woff2');font-style:normal;font-display:swap}
@font-face{font-family:'Zen Pixel Line';src:url('./fonts/zen-pixel/ZenPixel-Line.woff2') format('woff2');font-style:normal;font-display:swap}
@font-face{font-family:'Zen Pixel Square';src:url('./fonts/zen-pixel/ZenPixel-Square.woff2') format('woff2');font-style:normal;font-display:swap}
@font-face{font-family:'Zen Pixel Triangle';src:url('./fonts/zen-pixel/ZenPixel-Triangle.woff2') format('woff2');font-style:normal;font-display:swap}
/* Bound as custom properties too, so a consumer can hand a family to a design
system without spelling its name — and so a CSS-only consumer reads the same
two properties the next/font bindings generate. Dropping this block is what
1.9.0 did, and it turned every `var(--font-zen-sans)` in a non-Next app into
an invalid value, i.e. the OS default, silently. */
:root{--font-zen-sans:'Zen';--font-zen-mono:'Zen Mono';--font-zen-arabic:'Noto Kufi Arabic';--font-zen-pixel-circle:'Zen Pixel Circle';--font-zen-pixel-grid:'Zen Pixel Grid';--font-zen-pixel-line:'Zen Pixel Line';--font-zen-pixel-square:'Zen Pixel Square';--font-zen-pixel-triangle:'Zen Pixel Triangle'}