1#!/usr/bin/env node2/*3 * build-fonts-css.cjs — bundle the template fonts into ONE self-contained4 * fonts.css with base64 data-URI @font-face (no sub-resources, no CDN, no5 * system-font dependency). This is what makes Standard/Cinematic renders6 * deterministic on ANY machine: hyperframes' renderer only auto-supplies its7 * ~18 CANONICAL_FONTS; every other family falls back to a generic font unless8 * the HTML ships a local @font-face. (hyperframes' own font linter says exactly9 * this: "Use local @font-face declarations with captured .woff2 files.")10 *11 * Source woff2 live in ./files/<slug>-latin-<weight>-normal.woff2 (latin subset12 * from @fontsource via jsdelivr). Re-run after adding/removing a font:13 * node build-fonts-css.cjs14
78 ` font-display: block;\n` + // block (not swap): render text only once the real face is ready — measure-layout + capture see the true glyphs, never a fallback flash