better-typography
Sets and reviews how text renders in your product, from the type scale and spacing to font features, wrapping, truncation and punctuation.
Skill by transitive-bullshit
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/transitive-bullshit-better-typography
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: design
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md and code. Checked Oct 26, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/better-typography
What's inside
- Skill name
better-typography- Description
- Sets and reviews how text renders in your product, from the type scale and spacing to font features, wrapping, truncation and punctuation.
- License
- MIT
- Instructions
- 162 lines in SKILL.md · view on GitHub
Files (8)
- SKILL.md
- openai.yaml · agents/
- choosing-fonts.md
- css-cheat-sheet.md
- details-and-accessibility.md
- spacing-and-sizing.md
- variable-fonts-and-opentype.md
- wrapping-and-punctuation.md
SKILL.md (first lines)
# Typography This skill sets and reviews how text renders, from the type scale and spacing to font loading, wrapping and punctuation. It writes every fix in the project's styling system, and the [cheat sheet](css-cheat-sheet.md) maps each declaration to its Tailwind utility. The words belong to `better-writing`, semantic heading structure to `better-accessibility` and spatial RTL layout to `better-layout`. Measure contrast with `better-colors`; whether it passes is `better-accessibility`'s. ## Measured, not preferred Some values here are exact. Unitless line-height, weight `400` or heavier below `18px`, a 60–75 character measure, `16px` inputs on iOS and `tabular-nums` on changing values are findings when missed. Letter-spacing, pairing and scale ratios are heuristics. Report them only where they break the project's own scale. Never propose a new typeface, paid or free, unless the task asks for a type change. ## Fewer fonts, sizes and weights Rarely use more than three fonts; marketing pages can carry more than apps. Weight and size carry hierarchy, so each extra one dilutes it. Pair for contrast. A serif headline over a sans body reads as deliberate, two near-identical sans-serifs read as a mistake. Below `18px`, use weight `400` or heavier. Weights `100`–`300` belong at `28px` and up, checked against the background even there. Categories, `Display` and `Text` cuts, formats and fallback stacks are in [choosing-fonts.md](choosing-fonts.md). ## Load the faces the design uses Browsers synthesize a weight or style the family doesn't ship, distorting the face. Load every face the design uses. Disable synthesis only after verifying the fallback stack, and only the unwanted mode. The [synthesis longhands](variable-fonts-and-opentype.md#disable-synthesis-narrowly) show how. ## Properties over raw tags When a CSS property exists, use it. `font-weight: 650`, not `font-variation-settings: "wght" 650`. `font-variant-numeric: tabular-nums`, not `font-feature-settings: "tnum" 1`. Properties keep working when a non-variable fallback renders. Leave `font-optical-sizing` at its default `auto`. Hard-code `"opsz"` only when the design deliberately decouples optical size from font size. Reserve raw tags for custom axes like `"GRAD" 80` and features with no property, like `"ss01" 1`. Axes, features and variable versus static files are in [variable-fonts-and-opentype.md](variable-fonts-and-opentype.md). ## Use a type scale with semantic names Define a small set of sizes and deviate from it as little as possible. Pair each size with its line-height and weight, so a role is one decision instead of three. Solo, default names like `text-sm` are fine when the usage rules are clear. On a team, name sizes by use (`text-body-sm`) so the rules survive other people. A [role-based starting scale](spacing-and-sizing.md#type-scale) is in the reference. ## Heading sizes descend with level Map heading levels to descending steps of the scale, so a subordinate heading never overpowers its parent. Deep levels may share a size where the scale runs out of steps, as long as weight or letter-spacing keeps them distinct. A heading is never smaller than body text unless it is a deliberate overline. See the [level mapping](spacing-and-sizing.md#heading-hierarchy). ## Line-height by role Display text `1.1`, headings `1.2`–`1.3`, body copy `1.5`–`1.6`. Use unitless values so line-height scales with the font size; a fixed `24px` does not. Tight line-height is for short text. Anything that wraps to three or more lines needs at least `1.4`, even in a height-constrained row. See the [card description example](spacing-and-sizing.md#line-height-for-wrapping-text). ## Letter-spacing by size Headings at `24px` and up take `-0.01em` to `-0.02em`. Uppercase labels at `14px` or smaller take `0.05em`. Body copy stays at `0`. Use `em` so tracking scales with the size. Kerning is built into the font and on by default. `font-kerning: none` is never a fix. ## Cap the measure Cap long-form text at 60–75 characters per line. Any unit works, as long as a cap exists and the line length lands in range. See [unit choices and the pixel equivalents](wrapping-and-punctuation.md#measure-line-length). ## Wrap deliberately - `text-wrap: balance` evens out headings and short descriptions. Never on paragraphs, and Chromium ignores it past six lines. - `text-wrap: pretty` keeps a lone word off the last line. Safe on any paragraph, long-form included. - `overflow-wrap: break-word` where a long word, link or ID could escape the container. - `white-space: nowrap` on labels and badges where a line break looks broken. Keep interface text at `text-align: start`. `justify` belongs only in specific editorial layouts. ## Tabular numbers on changing values Apply `font-variant-numeric: tabular-nums` to timers, counters, prices and numeric table columns, so every digit keeps one width and nothing shifts. Leave figures in prose proportional. ## Truncate with a way back For one line, `overflow: hidden`, `text-overflow: ellipsis` and `white-space: nowrap`, which Tailwind's `truncate` sets together. For several, `display: -webkit-box`, `-webkit-box-orient: vertical`, `-webkit-line-clamp: 3` and `overflow: hidden`, which Tailwind's `line-clamp-3` emits. A truncated value needs a way back to the full text, which `better-layout` owns. ## Natural case, typographic punctuation Store text in natural case and set case with `text-transform`, so a redesign never means rewriting copy. Rendered text uses typographic characters, never their keyboard stand-ins. Curly quotes, en dashes, the ellipsis character and non-breaking spaces are in the [substitution table](wrapping-and-punctuation.md#smart-punctuation). Code keeps straight quotes. ## Underlines from the font Set `text-underline-position: from-font` and `text-decoration-thickness: from-font`, or tune `text-underline-offset` and thickness by hand. A dotted `text-decoration-style` hints that a word carries extra information, such as an abbreviation or a defined term. See the [underline recipes](details-and-accessibility.md#underlines). Color is the only part of a real underline that animates reliably. Any other underline animation needs a separate element, and its motion is `better-ui`'s. ## Inputs at 16px on mobile iOS Safari zooms the whole page when an input's text is smaller than `16px`. Two fixes hold `16px` and look different, so ask which one the design wants: - Size the input up on mobile (`text-base sm:text-sm`). Changes how it looks on small screens. - Keep `font-size: 16px` and render the intended size with `transform: scale()`. Identical at every viewport, more code to maintain. Both recipes, plus placeholder and caret styling, are in [details-and-accessibility.md](details-and-accessibility.md#forms-and-editable-text). ## Size floors Start long-form body text at `16px`, the browser default. Move off it only for a reason you can name, such as a typeface that runs small, a narrow measure or a dense professional tool. UI text can go smaller. Start inputs and menus at `14px` and captions at `13px`, and rarely go below `12px`. Set `font-size` in [`rem`](spacing-and-sizing.md#units) so the reader's browser font size still applies. ## Font smoothing on the root Apply `-webkit-font-smoothing: antialiased` and `-moz-osx-font-smoothing: grayscale` once on the root, never per component. Tailwind's `antialiased` sets both. ## Language and bidi behavior Set `lang` so browsers and assistive technology pick the right quotes, hyphenation and pronunciation. Set `dir` on the document and wherever direction changes. Wrap a mixed-direction value in `<bdi>` and never reorder digits by hand. How long paragraphs and numbers behave is in [wrapping-and-punctuation.md](wrapping-and-punctuation.md#internationalization). ## Trim text boxes in tight containers In buttons and badges, the space a font reserves above and below its letters makes text sit low. `text-box: trim-both cap alphabetic` trims it as a progressive enhancement. See the [edges, keywords and support](spacing-and-sizing.md#text-trimming-with-text-box). ## Decorative text in CSS, not images Build drop caps, gradient text, outlines and text shadows in CSS so the text stays selectable and searchable. The [properties and their support](details-and-accessibility.md#decorative-text) are in the reference. ## Keep useful text selectable Keep text selectable by default. `::selection` can carry brand into the reading experience, as long as the selected combination stays legible. [Styling other ranges](details-and-accessibility.md#selection) such as search matches is in the reference.
From transitive-bullshit/skills, MIT.
More from transitive-bullshit/skills
- 0.606score
better-writing
transitive-bullshit
Writes and reviews your interface copy, from labels and errors to empty states and confirmations, so it matches your product's voice and tells people what to…
SkillAFreshness: A★ 4Claude Code +9 - 0.606score
better-layout
transitive-bullshit
Helps with grouping, alignment, reading order, responsive structure and room for translated text, so a layout holds up when it is resized, translated or…
SkillAFreshness: A★ 4Claude Code +9 - 0.606score
better-accessibility
transitive-bullshit
Reviews and fixes keyboard and focus behavior, ARIA, accessible names, forms, screen-reader announcements, motion and zoom in your project against WCAG 2.2.
SkillAFreshness: A★ 4Claude Code +9 - 0.606score
better-colors
transitive-bullshit
Helps you build and check a color system for your project.
SkillAFreshness: A★ 4Claude Code +9 - 0.606score
better-ui
transitive-bullshit
Polishes the surfaces, icons and motion in your project with exact values for border radius, optical alignment, shadows, icon states and animation.
SkillAFreshness: A★ 4Claude Code +9 - 0.582score
create-verification-skill
transitive-bullshit
Generate a project-local verification skill that drives your app the way a user does — any language, framework, or platform.
SkillAFreshness: A★ 4Claude Code +9 - 0.580score
domain-modeling
transitive-bullshit
Build and sharpen a project's domain model.
SkillAFreshness: A★ 4Claude Code +9 - 0.580score
codebase-design
transitive-bullshit
Shared vocabulary for designing deep modules.
SkillAFreshness: A★ 4Claude Code +9 - 0.578score
resolving-merge-conflicts
transitive-bullshit
Use when you need to resolve an in-progress git merge/rebase conflict.
SkillAFreshness: A★ 4Claude Code +9 - 0.577score
testing-strategy
transitive-bullshit
Choose proportionate verification and maintain useful tests when implementing changes, fixing bugs, or reviewing test coverage.
SkillAFreshness: A★ 4Claude Code +9
Signals
- Stars
- 4
- Forks
- 1
- Open issues
- 0
- Last commit (this folder)
- Oct 11, 2026 (17 days ago)
- Last release
- Sep 6, 2026 (1 month ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/transitive-bullshit/skills
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
Same skill elsewhere
Copies of this SKILL.md published by others; search shows only one of them.
- 0.347score
better-typography
itsmichaelwest
Sets and reviews how text renders in your product, from the type scale and spacing to font features, wrapping, truncation and punctuation.
SkillAFreshness: A★ 1Claude Code +9 - 0.337score
better-typography
jorgesolerrr
Sets and reviews how text renders in your product, from the type scale and spacing to font features, wrapping, truncation and punctuation.
SkillAFreshness: AClaude Code +9 - 0.334score
better-typography
ManatoYamashita
Sets and reviews how text renders in your product, from the type scale and spacing to font features, wrapping, truncation and punctuation.
SkillAFreshness: AClaude Code +9
More from transitive-bullshit
- 0.606score
better-writing
transitive-bullshit
Writes and reviews your interface copy, from labels and errors to empty states and confirmations, so it matches your product's voice and tells people what to…
SkillAFreshness: A★ 4Claude Code +9 - 0.606score
better-layout
transitive-bullshit
Helps with grouping, alignment, reading order, responsive structure and room for translated text, so a layout holds up when it is resized, translated or…
SkillAFreshness: A★ 4Claude Code +9 - 0.606score
better-accessibility
transitive-bullshit
Reviews and fixes keyboard and focus behavior, ARIA, accessible names, forms, screen-reader announcements, motion and zoom in your project against WCAG 2.2.
SkillAFreshness: A★ 4Claude Code +9 - 0.606score
better-colors
transitive-bullshit
Helps you build and check a color system for your project.
SkillAFreshness: A★ 4Claude Code +9 - 0.606score
better-ui
transitive-bullshit
Polishes the surfaces, icons and motion in your project with exact values for border radius, optical alignment, shadows, icon states and animation.
SkillAFreshness: A★ 4Claude Code +9 - 0.582score
create-verification-skill
transitive-bullshit
Generate a project-local verification skill that drives your app the way a user does — any language, framework, or platform.
SkillAFreshness: A★ 4Claude Code +9
Cite this page
better-typography skill. Agent Mart. https://agentmart.dev/skills/transitive-bullshit-better-typography (last updated 2026-10-24)