$npx -y skills add educlopez/ui-craft --skill typesetTypography pass covering font choice, modular scale, tracking, leading, weight hierarchy, and micro-typography details. Use when fonts feel generic (default Inter with no reason), the scale is ad hoc, hierarchy is flat, or the user says "fix the typography" / "the text doesn't fe
| 1 | <!-- HARNESS MIRROR — do not edit here. Canonical source: skills/ or commands/. After editing source, copy into cli/assets/<harness>/ and repo-root harness mirrors. --> |
| 2 | |
| 3 | **Context:** this sub-skill is one lens of the broader `ui-craft` skill. If the `ui-craft` skill is also installed, read its SKILL.md first for Discovery + Anti-Slop + Craft Test, then apply the specific lens below. |
| 4 | |
| 5 | Typeset the UI at the target the user described. Load the `ui-craft` skill and read `references/typography.md`. |
| 6 | |
| 7 | **Note:** typeset is knob-agnostic — typography rules (no ALL CAPS on headings, tracking-tight ≥24px, one body font, etc.) are not tunable. |
| 8 | |
| 9 | **Apply, in order:** |
| 10 | |
| 11 | 1. **Font inventory** — what's loaded? If Inter is the default choice with no reason, ask before accepting it (Inter is the #1 AI-tell). Good alternatives: Geist, DM Sans, Plus Jakarta Sans, system stack. One body font, optionally one display font. Never three. |
| 12 | |
| 13 | 2. **Scale** — is there a scale or are sizes ad hoc? Anchor to a modular scale (1.125 / 1.2 / 1.25). Sizes: 12 / 14 / 16 / 20 / 24 / 32 / 48 / 64 / 72. No 13px / 15px / 17px one-offs unless optical. |
| 14 | |
| 15 | 3. **Tracking (letter-spacing)**: |
| 16 | - ≥ 24px → `tracking-tight` (`-0.02em`) or tighter for 40px+ |
| 17 | - 14-20px body → default |
| 18 | - 11-13px category labels → `tracking-wide` (`+0.06em`) + uppercase IS allowed here (the one exception) |
| 19 | - Never ALL CAPS on headings, nav, buttons, tables |
| 20 | |
| 21 | 4. **Leading (line-height)**: |
| 22 | - Headings: 1.05-1.15 |
| 23 | - Body: 1.5-1.65 |
| 24 | - UI (buttons, labels): 1.2-1.3 |
| 25 | |
| 26 | 5. **Weight hierarchy** — pick 2-3 weights max. Common: 400 body, 500 UI/labels, 600-700 headings. Never load 9 weights "just in case". |
| 27 | |
| 28 | 6. **Micro-typography** (the compound details): |
| 29 | - `tabular-nums` on every number you align (tables, stats, timestamps, prices) |
| 30 | - `text-wrap: balance` on headlines, `text-wrap: pretty` on body |
| 31 | - Curly quotes (`'` / `"`), em dashes (`—`), en dashes (`–`), no double hyphens |
| 32 | - ` ` in brand names, between number + unit, and before final short words in headlines |
| 33 | - Real apostrophes in contractions |
| 34 | - `font-feature-settings` or `font-variant-*` for opt-in features (ligatures, ss01, fractions) |
| 35 | - Straight prime marks (`′`, `″`) for units, not quotes |
| 36 | |
| 37 | 7. **Hierarchy check** — can you tell primary / secondary / tertiary at a glance? If every line has the same weight or size, collapse or amplify. |
| 38 | |
| 39 | ## Amplifying hierarchy |
| 40 | |
| 41 | If the UI is technically correct but forgettable, use typography as the weapon. **Pick ONE element to carry signature** (never two); boldness is typography, not color or decoration: |
| 42 | |
| 43 | 1. **Hero headline** — push size to 80-120px, weight to 700-800, tracking to -0.04em. Tight leading (0.95-1.0). |
| 44 | 2. **Hierarchy jump** — widen the gap between H1 and body. If H1 is 32px and body is 16px, the UI is whispering; if H1 is 48px+, the ratio reads. Compress or expand the range deliberately. |
| 45 | 3. **Micro-motif** — one custom detail that repeats: a hand-drawn underline, numeric counters (`01`, `02`), an asymmetric supporting element, a distinctive list marker. |
| 46 | |
| 47 | **Knob gating for amplification (CRAFT_LEVEL):** |
| 48 | - `≤ 4` — skip. Boldness is a craft layer, not a baseline. |
| 49 | - `5-7` — apply the type amplification only. No signature motif unless asked. |
| 50 | - `8+` — type amplification + one signature detail (chosen at `/craft` first pass per `references/craft-intent.md`; `/polish` and `/bolder` strengthen it — never stack a second). |
| 51 | |
| 52 | **Pre-check:** if an accent is already overused or hierarchy is already loud, you don't have a tameness problem — you have a noise problem. Route to `/distill` (cut) or `/colorize` (reduce accents) instead. |
| 53 | |
| 54 | **Output**: edit code directly. Print the Review Format table. Call out the single highest-impact change (usually: "font choice" or "tracking-tight on hero"). |