mirror of
https://github.com/hanzoai/font.git
synced 2026-11-02 23:42:52 +00:00
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
46 lines
5.4 KiB
CSS
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'}
|