Ir al contenido

17 · Typography

Versión: 0.1 Última actualización: 2026-04-24


La tipografía es el signal anti-AI más poderoso que tenemos. Mientras que 99% de productos AI usan Inter/Geist/SF Pro, nuestra elección de serif variable con personalidad inmediatamente dice “esto fue diseñado con criterio”.

Tres familias. Cada una con rol claro. Ninguna es reemplazable por otra.


  • Rol: H1, H2, headlines, quotes
  • Por qué: serif variable contemporánea con personalidad ajustable (SOFT axis para warmth, WONK axis para quirkiness). Diseñada por Undercase Type (small Portuguese foundry — no corporate). Libre.
  • Ajuste en el axis:
    • SOFT 100 → calidez (para headlines emocionales)
    • WONK 0 → estándar (para títulos de trabajo)
    • WONK 1 → con carácter (para momentos de énfasis — use sparingly)
    • Weight 500-700 para display
  • Download: Google Fonts — Fraunces
  • Alternativa si falla load: Newsreader → Lora → Playfair Display
  • Rol: párrafos, labels, UI, nav
  • Por qué: geometric sans con calidez (no tan frío como Inter), proporciones generosas, pairs perfectamente con Fraunces. Libre.
  • Weight: 400 body, 500 labels, 600 UI emphasis
  • Download: Google Fonts — Work Sans
  • Alternativa: Source Sans → IBM Plex Sans (NUNCA Inter puro)
  • Rol: code blocks, terminal, file paths, technical metadata
  • Por qué: diseñada para lectura larga de código, ligaduras activables, buena para español con acentos
  • Weight: 400 body de código, 500 para énfasis
  • Ligatures: ON (fi, =>, !=, -> mejoran legibilidad)
  • Alternativa: Fira Code → IBM Plex Mono

Basada en modular scale 1.250 (mayor tercera musical), más cálida que el 1.333 típico de tech.

TokenSizeLine heightRol
text-hero72px / 4.5rem1.05Landing hero
text-display-xl56px / 3.5rem1.1Page title (H1 principal)
text-display-lg40px / 2.5rem1.15Section opener (H2)
text-display32px / 2rem1.2Chapter title (H2)
text-headline26px / 1.625rem1.25Step headline (H3)
text-title20px / 1.25rem1.3Card title, H4
text-lead18px / 1.125rem1.6Intro paragraph
text-body16px / 1rem1.65Body paragraph
text-small14px / 0.875rem1.5Captions, metadata
text-micro12px / 0.75rem1.4Labels, meta pequeño

Mobile: reducir 1-2 steps en hero/display (64px → 56px, etc.)


  • Hero / landing titles
  • Page titles (H1)
  • Chapter titles (H2)
  • Step headlines (H3)
  • Pull quotes
  • Occasional large UI labels (course names, section titles)
  • Todo el body text
  • Navigation
  • Buttons (UI labels)
  • Form labels
  • Captions
  • Metadata (dates, durations, authors)
  • Tab labels
  • Small text in general
  • Code blocks
  • Inline code (backticks)
  • Terminal output
  • File paths and commands
  • Technical IDs, timestamps
  • Numerical metadata (01/28, 14:30, etc.)

NUNCA mezclar serif y sans en la misma línea (excepto si sans es text-small deliberado como sublabel).


Fraunces 700 · 72px · text-primary → "Claude Code Pro"
Work Sans 400 · 20px · text-secondary → "Lo que no sabías"
Work Sans 400 · 14px · text-muted → "10 lessons · 2-3 semanas"
JetBrains Mono 500 · 12px · terracotta → "CH 01"
Fraunces 600 · 24px · text-primary → "El ecosystem de Claude Code"
Work Sans 400 · 14px · text-secondary → "5 steps · 15 min"
Fraunces 600 · 32px · terracotta → headline del step
Work Sans 400 · 18px · text-primary → captions/narration
JetBrains Mono 400 · 14px · text-primary → code blocks
Work Sans 500 · 12px · text-muted → meta "paso 3 de 5"

  • Axes a explotar: SOFT (+50) para warmth, opsz size-appropriate
  • Features a activar: dlig (discretionary ligatures) OFF — mantener limpio; liga ON
  • letter-spacing: -0.01em en sizes grandes (40px+), 0 en resto
  • font-feature-settings: "ss02" 1 (opcional, para quirk controlado)
  • letter-spacing: 0 para body; 0.02em para uppercase micro labels
  • font-variant-numeric: tabular-nums para tables/metrics, oldstyle-nums si quieres elegance en texto largo
  • Ligatures ON para código
  • letter-spacing: -0.01em
  • tabular-nums automático (monospace)

Regla general: usar con moderación.

  • Chapter numbers (CH 01, STEP 3): Work Sans 500, uppercase, letter-spacing: 0.08em, text-small
  • Section labels (TIER 1 — PRODUCTO): Work Sans 600, uppercase, letter-spacing: 0.1em, text-micro
  • Botones: NO uppercase (caja natural)
  • Navigation: NO uppercase

  • Fraunces italic tiene personalidad notable — úsalo para énfasis de voz: “¿te acuerdas del ejemplo pasado?”
  • Work Sans italic: menos usado, OK para citas cortas o émfasis sutil
  • JetBrains Mono italic: para comments en código, variables opcionales

  • Body text (párrafos largos): 60-75 caracteres por línea max → aproximadamente max-width: 65ch en CSS
  • Headlines hero: sin límite, pero idealmente 2 líneas max
  • Code blocks: no limit (scroll horizontal si necesario)

Español tiene palabras más largas que inglés, acentos diacríticos, y puntuación específica (¿? ¡!). Considerar:

  • No usar H1 con abreviaturas — palabras completas leen mejor
  • Em-dash (—) es tu amigo — común en español editorial
  • Dejar respirar comillas: «español» o “español” (NO ‘single’)
  • Evitar word-break agresivo — español no corta bien como inglés

Estos son los tells de AI-default que evitamos:

  • ❌ Inter everywhere (especialmente Inter tight 500)
  • ❌ System font stack puro sin fallback definido
  • ❌ Titles en mayúsculas apretadas (letter-spacing negativo extremo)
  • ❌ Mezclar 3+ sans-serif distintos
  • ❌ Emoji como text replacement (usa emoji SPARINGLY, solo donde suma contexto)
  • ❌ Headline gigante + body tiny (contraste excesivo)
  • ❌ Italic solo para “énfasis decorativo” sin razón

@theme {
--font-display: "Fraunces", Georgia, serif;
--font-body: "Work Sans", system-ui, sans-serif;
--font-mono: "JetBrains Mono", Menlo, monospace;
}
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght,SOFT@9..144,400..700,50&family=Work+Sans:wght@400;500;600&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">

Weights cargados:

  • Fraunces: 400, 500, 600, 700 (con opsz + SOFT axis)
  • Work Sans: 400, 500, 600
  • JetBrains Mono: 400, 500

Total subset fonts: ~120-150KB. Aceptable para el carácter que da.


Antes de aprobar cualquier layout:

  1. ¿Hay al menos una instancia de Fraunces visible? Si todo es sans-serif, falta identidad.
  2. ¿Los espaciados respiran? Spanish titles necesitan leading-tight que no corte.
  3. ¿El code block se ve como código (no como body)? Mono debe sentirse distinto, no solo “otra fuente”.
  4. ¿La jerarquía se lee como libro o como formulario? Debe leerse como libro.