Files
zeekay e738240139 IBM Plex Sans Arabic beside the Noto companions; 1.9.6
The Arabic table now holds a third companion, and every companion must draw
every letter the Arabic-script catalogs in @hanzo/i18n write ("needs":
Arabic, Persian, Dari, Urdu, Pashto, Sindhi, Sorani Kurdish, Uyghur,
Shahmukhi Punjabi). arabic.py refuses a face that does not. Measured
against those catalogs, Cairo, Readex Pro and Rubik each miss letters
Pashto, Sindhi, Kurdish or Uyghur write; Noto Kufi, Noto Sans and IBM Plex
Sans Arabic miss none.

Plex ships as IBM published it, one woff2 per weight, byte for byte: the
OFL reserves "Plex", and a subset is a Modified Version that may not carry
it. So a face is either cut (the Noto pair, as before) or whole, and a
face lists its files. The default must still be one variable file over
Zen's 100-900, since a static face under 'Zen' wins the weight match for
Latin; Plex is offered under its own name only.

The publish check reads the files to expect from the table.

Claude-Session: https://claude.ai/code/session_015XYKLjZtDTJEnMo4eK3AFH
2026-10-29 23:34:46 -07:00

46 lines
5.4 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, IBM Plex 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:block;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:block;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:block;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:block;unicode-range:U+0600-06FF, U+0750-077F, U+FB50-FDFF, U+FE70-FEFC}
@font-face{font-family:'IBM Plex Sans Arabic';src:url('./fonts/arabic/IBMPlexSansArabic-Thin.woff2') format('woff2');font-weight:100;font-style:normal;font-display:block;unicode-range:U+0600-06FF, U+0750-077F, U+FB50-FDFF, U+FE70-FEFC}
@font-face{font-family:'IBM Plex Sans Arabic';src:url('./fonts/arabic/IBMPlexSansArabic-ExtraLight.woff2') format('woff2');font-weight:200;font-style:normal;font-display:block;unicode-range:U+0600-06FF, U+0750-077F, U+FB50-FDFF, U+FE70-FEFC}
@font-face{font-family:'IBM Plex Sans Arabic';src:url('./fonts/arabic/IBMPlexSansArabic-Light.woff2') format('woff2');font-weight:300;font-style:normal;font-display:block;unicode-range:U+0600-06FF, U+0750-077F, U+FB50-FDFF, U+FE70-FEFC}
@font-face{font-family:'IBM Plex Sans Arabic';src:url('./fonts/arabic/IBMPlexSansArabic-Regular.woff2') format('woff2');font-weight:400;font-style:normal;font-display:block;unicode-range:U+0600-06FF, U+0750-077F, U+FB50-FDFF, U+FE70-FEFC}
@font-face{font-family:'IBM Plex Sans Arabic';src:url('./fonts/arabic/IBMPlexSansArabic-Medium.woff2') format('woff2');font-weight:500;font-style:normal;font-display:block;unicode-range:U+0600-06FF, U+0750-077F, U+FB50-FDFF, U+FE70-FEFC}
@font-face{font-family:'IBM Plex Sans Arabic';src:url('./fonts/arabic/IBMPlexSansArabic-SemiBold.woff2') format('woff2');font-weight:600;font-style:normal;font-display:block;unicode-range:U+0600-06FF, U+0750-077F, U+FB50-FDFF, U+FE70-FEFC}
@font-face{font-family:'IBM Plex Sans Arabic';src:url('./fonts/arabic/IBMPlexSansArabic-Bold.woff2') format('woff2');font-weight:700;font-style:normal;font-display:block;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'}