diff --git a/CLAUDE.md b/CLAUDE.md index 26b5b08..79323a8 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -208,9 +208,14 @@ Embed via `include_bytes!()` only when ALL of the following are true: Currently embedded: * **Audio** — all `.wav` files in `audio_plugin.rs` * **Default card theme** — shipped via `embedded://` scheme in `ThemePlugin` +* **Bundled UI font** — `assets/fonts/main.ttf` (FiraMono) via `include_bytes!` + in `font_plugin.rs` and `assets/svg_loader.rs`; it is the canonical UI face + and must always be present, so it is embedded rather than `AssetServer`-loaded -Do NOT embed card face PNGs, background images, or user fonts — -these are loaded via `AssetServer` so art can be swapped without recompile. +Do NOT embed card face PNGs or background images — these are loaded via +`AssetServer` so art can be swapped without recompile. User-supplied fonts +(if ever added) likewise go through `AssetServer`; only the bundled FiraMono +face above is embedded. --- diff --git a/solitaire_engine/src/font_plugin.rs b/solitaire_engine/src/font_plugin.rs index 8098554..7c4e42d 100644 --- a/solitaire_engine/src/font_plugin.rs +++ b/solitaire_engine/src/font_plugin.rs @@ -2,8 +2,9 @@ //! //! Bundling rather than runtime-loading guarantees the canonical UI face is //! always available regardless of install or platform. The bytes are -//! validated at startup; a parse failure aborts the program with a clear -//! error because it means the binary is corrupt. +//! validated at startup; a parse failure logs a warning and continues with +//! glyph-less UI rather than aborting, since crashing on a corrupt embed is +//! worse than degraded text. use bevy::prelude::*;