| Body feels cramped on mobile | Bump leading to 1.5-1.6, not font-size. Check measure is 30-40 chars. |
| Heading looks loose and airy | line-height 1.0-1.15, tracking -10 to -20 / 1000 em. Reset inherited line-height. |
| Display face looks anemic at large size | Wrong cut. Switch to display opsz, or tighten tracking -20 to -30. |
| Text face clogs at small size | Wrong cut. Switch to text opsz, or open tracking +10 to +15. |
| Pairing reads "off" but you cannot name why | x-height mismatch. Set both faces side by side, size the sans down until x-heights align. |
| Justified web text has rivers | Enable hyphens: auto + lang attribute, or switch to ragged. Reduce measure to 45-60. |
| Web font swap causes layout shift | Match fallback x-height and advance width. Use font-display: swap + size-adjust on the fallback. |
| Heading inherits body line-height | Set line-height unitless on body, reset per heading. Never px line-height. |
| Bold looks uneven, counters clog | Faux bold. Load the real bold weight file, set font-synthesis: none. |
| Caps look too tight | Add +50 to +100 / 1000 em tracking. Caps need positive, lowercase display needs negative. |
| Numbers misalign in a table | font-variant-numeric: tabular-nums (or font-feature-settings: "tnum"). Proportional figures are the default. |