# Shared Fonts
Card assembly uses this repository-owned font directory. Reference these files directly; do not copy fonts or licenses into individual card/proof folders or select a system-installed substitute.
The approved production faces are **P052 Bold** (`P052-Bold.otf`) for titles and **Sanctification P052 Medium** (`SanctificationP052-Medium.otf`) for verses/excerpts, references and approved descriptors. [Art Direction](../docs/art-direction.md#shared-card-typography-and-text-palette) owns the role and weight rules. P052 Roman remains the source for Medium and a historical comparison face. Noto Serif, Noto Sans, and Nimbus Sans are retained for archived font comparisons and existing proof/review labels.
`manifest.json` pins the exact file bytes by SHA-256. Keep the original URW and Noto license notices beside their font files. Adding or replacing a face requires an explicit font revision and a manifest update; no build should download or copy fonts automatically.
Python builders locate the repository from their script path, then use `REPO / 'fonts'`. For Fontconfig, generate a proof-local configuration whose `
` points here and keep caches in the proof output or a temporary directory. JavaScript builders resolve this directory relative to `import.meta.url` and pass the same Fontconfig environment to matching and rendering. Validate the exact selected file and glyph coverage.
Rejected proofs keep relative `fonts` symlinks for compatibility with their historical input paths and preservation manifests. All font and license bytes live here. Historical validation/provenance reports retain the paths recorded when they were produced.
## Production Faces and Custom Medium Recipe
The production roles below were compared in the [typography preview](../spikes/p052-weight-proof/README.md):
| Role | Weight | Shared font file |
|---|---|---|
| Title | 700, native Bold | `P052-Bold.otf` |
| Verse | 500, custom optical Medium | `SanctificationP052-Medium.otf` |
| Reference | 500, custom optical Medium | `SanctificationP052-Medium.otf` |
The custom face is named **Sanctification P052 Medium** to distinguish it from upstream P052. Its `optical-medium-v1` recipe expands Roman outlines by 4 units per side on the 1000-unit em, using a miter limit of 2. Advance widths, cmap, kerning and shaping tables remain intact. Weight 500 is assigned metadata for this optical derivative; it is not a native or master-interpolated Medium. Original stem hint instructions are removed when rebuilding outlines, so small text needs visual review. The original copyright/license notices remain in the font and [URW license](URW-font-license.txt).
The source recipe is [tools/build_medium.py](tools/build_medium.py), with pinned [requirements](tools/requirements.txt) and a [build report](medium-build.json). Rebuild explicitly with an isolated Python environment:
```sh
python3 -m venv /tmp/sanctification-font-tools-env
/tmp/sanctification-font-tools-env/bin/python -m pip install -r fonts/tools/requirements.txt
/tmp/sanctification-font-tools-env/bin/python fonts/tools/build_medium.py
```
Run these commands from `sanctification/`. The build verifies the original Roman hash and writes only the named derivative/report; it never downloads or replaces source fonts. Any changed output must be explicitly repinned in the shared manifest. `productionTypography` records the approved role-specific files and weights; `productionFont` identifies the default Medium supporting-text face. New assemblies follow those roles. Historical proof outputs and build reports record the font choices used when they were produced.