lonja-typographylisted
Install: claude install-skill zakariaf/CatchLaw
# Lonja Typography
Type is the argument. CATCHLAW is a printed regulations booklet that happens to run on a phone,
so the letterforms have to carry the authority the app is claiming: **a serif for anything that
quotes the law, a mono with tabular figures for anything that can be compared, and sans only for
chrome that is not part of the document.** This skill owns the ramp values, the four roles, their
line-heights, tracking, reading measure and Arabic optical size. It does not own ThemeExtension
plumbing, font bundling, colour values, or the never-clamp accessibility floor.
Read the reference for the task at hand:
- `references/type-ramp.md` — every step, size, weight, height, tracking, role, worked example.
- `references/arabic-and-scripts.md` — Naskh stack, optical uplift, zero tracking, numeral faces,
bidi-safe line-height, mixed-script rows.
Run `scripts/check_lonja_type.sh` before a PR.
ThemeExtension mechanics, `of(context)` asserts, `lerp`/`copyWith` and font bundling live in
`design-system-structure`; colour and spacing values live in `lonja-design-tokens`; this skill
governs the type VALUES and which role is mandatory where.
## Non-negotiable rules
1. **EVERY TextStyle in the app comes from LonjaType.of(context).** The ramp is a
`ThemeExtension` declared once in `lib/theme/lonja_typography.dart`; call sites name a step
(`t.legal`, `t.datum`) and never a metric. A raw `TextStyle(fontSize: 15)` in a feature widget
is invisible to the night and sunligh