Cantarell, the regular and bold UI faces, has no Cyrillic. Board cards,
descriptions, Jira imports and every other Russian string arrived as empty
boxes, while the Markdown editor looked fine because its source pane uses
JetBrains Mono, which does have Cyrillic.
FontCyrillic.ttf and FontCyrillicBold.ttf are Cyrillic cuts of Cantarell
0.111 — the upstream release that has Cyrillic — at the two weights, subset
to the Cyrillic blocks plus №. Their x-height and cap height match the
Cantarell 1.004 faces already bundled, and nanovg scales each font by its own
upem, so the two generations sit on one line.
Each text face now has its own fallback chain in CanvasFonts.hpp: bold
Russian falls back to the bold cut instead of the regular one, and the symbol
fonts stay ahead of it in the chain so the arrows, maths and emoji characters
they already covered keep rendering. Mono draws Cyrillic itself and only
needs the cut for the few characters it lacks. LibraryViewer and Sketch3D ship
their own rsc and now copy the two files too.
FontCoverage gained a Russian-alphabet check — board text is data, so the
source-literal scan could not catch this — and a check that every face falls
back to the Cyrillic cut of its own weight. Graphics/rsc/FONTS.md now records
where each bundled font comes from and how the cuts are regenerated.