themes-earthen/RECOMMENDED_FONTS.md
Alex Dunmow 8b8fb4d65d feat(earthen): Wave A theme lane — 49 overrides, 7 templates, seed (WO-TF-016)
Deliver the full conservation-nonprofit theme per OVERRIDE-CONTRACT (Wave A).

- 49 mandatory builtin overrides in templates/overrides/earthen/ (chrome,
  marketing, primitives, commerce, blog family, auth surface, page-suggestions),
  re-skinned from the frozen builtins into botanical/paper-grain chrome with
  all content fields, custom tags, provider vars, HTMX/auth wiring and JS
  preserved verbatim. Stale button/card/image/text/heading overrides fixed to
  the new field contract (link/style/label, media/text via {% img %}).
- 7 page templates: default, full-width, landing, article, blog-index, contact,
  auth.
- Blocks rework: impact_metrics/partner_logos/botanical_divider/footer converted
  to builtin overrides (deleted as theme blocks); donation_cta and field_note
  kept; impact_report added. Persona blocks now 3.
- 5 presets (all 19 tokens; mossbed/sage-morning/ember-loam are dual-mode).
- Bundled Fraunces + Work Sans woff2 (OFL) in assets/fonts/; fonts.json,
  RECOMMENDED_FONTS.md, RECOMMENDED_ICONS.md; required_icon_packs=[lucide].
- Seed: home/about/blog(3 posts)/contact/login as Rootline Trust, contact-form
  formConfig.targetTable=contact_submissions + row_inserted email-admins workflow.
- Themed email-safe wrapper; on-theme master pages; CSS-first botanical motion.

Verified: make (build) exit 0, make archive-check exit 0, check-safety exit 0.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-05 11:13:01 +08:00

2.0 KiB

Earthen — fonts

Earthen bundles its display and body faces as source=template rows via fonts.json, so the theme reads correctly on activation with no admin setup. All CSS references fonts through var(--font-heading) / var(--font-body) / var(--font-mono) with a fallback stack, so the admin can still override any role from the Typography panel.

Bundled faces (ship with the theme)

Role Family Weights File License
Heading Fraunces 400, 600 assets/fonts/fraunces-latin-400.woff2, fraunces-latin-600.woff2 SIL Open Font License 1.1 (assets/fonts/OFL.txt)
Body Work Sans 400, 600 assets/fonts/worksans-latin-400.woff2, worksans-latin-600.woff2 SIL Open Font License 1.1 (assets/fonts/OFL.txt)

Fraunces gives the organic, slightly wobbly display voice the persona wants; Work Sans keeps body copy warm but legible for donation and report pages. Both are OFL, subset to the Latin range to stay inside the marketplace size gate.

Fallback stacks (used before/without admin fonts)

  • Heading: var(--font-heading, "Fraunces", "Playfair Display", Georgia, serif)
  • Body: var(--font-body, "Work Sans", ui-sans-serif, system-ui, sans-serif)
  • Mono: var(--font-mono, "JetBrains Mono", ui-monospace, monospace)

Optional admin choices

  • Mono is not bundled. If your content uses monospace (data captions, code), add JetBrains Mono (google:JetBrains Mono, OFL) from the Typography panel Google Fonts tab and assign it to Mono. Until then the system mono stack applies.
  • Alegreya (google:Alegreya, OFL) is a good serif alternative for Body if you want a more literary, long-read feel for field journals. Assign it to Body to swap.

Notes

  • Do not hardcode a font-family anywhere. Every family flows through the CSS variables so the admin font picker keeps working.
  • Bundled woff2 files are subset to Latin. Extend the subset only if you serve non-Latin content, and keep the total artifact within the registry size gate.