Sección 04 / Tipografía

Cuatro
voces,
un acento.

Esta página no se limita a describir el sistema — lo consume. Todo lo que leés está compuesto con los mismos tokens semánticos que usan las slides.

type.display · type.editorial · type.body · type.data · type.eyebrow

Código
sabroso,
che.

El sistema tipográfico vive en design-system/tokens/type-style.semantic.json. Cada titular, subtítulo y eyebrow de esta página cita un type-style por nombre — nada se define aquí dos veces.

01 · Arquitectura

Dos capas,
una dirección.

Primitivos abajo, recetas arriba. Cada surface declara una receta y consume cinco variables — --recipe-surface, --recipe-ink, --recipe-em, --recipe-accent, --recipe-warn. La receta también whitelistea qué familias tipográficas pueden aparecer (ver sección 07).

01
Capa cruda

Primitives

Los valores sin significado: hex, px, stacks de fuente, weight steps. Son el inventario, no la combinación. Las superficies nunca los tocan directo.

--chimi-primitives-color-patagonia-base
--chimi-primitives-size-font-4xl
--chimi-primitives-font-family-chaney
02
Capa de recetas

Recipes

Siete recetas cerradas (canvas-quiet, canvas-signal, paper-warm/cool, energy-loud, cool-fresh, critical). Cada una empaqueta cinco roles de color + una whitelist de familias permitidas (display, body, editorial, data, code, numeral). Una surface, una receta — el resto deriva.

--recipe-surface · --recipe-ink
--recipe-em · --recipe-accent
--recipe-warn + type whitelist
02 · Familias

Cinco familias,
cinco trabajos.

Cada familia tiene un rol semántico. Se la invoca por el rol (font.family.display), no por el nombre del archivo — así cambiar una tipografía no toca ningún layout.

Display
CHANEY
La voz que grita. Condensada, geométrica, con aire deportivo. Para titulares enormes y marcas.
Rol: font.family.display
Tamaños: display.sm → 2xl
CÓDE
BIEN HECHO
A B C D E F G H I J K L M N Ñ O P Q R S T U V W X Y Z · 0 1 2 3 4 5 6 7 8 9
Body
At Aero
El caballo de batalla. Sans neutra pero con carácter, legibilidad excelente. Para subtítulos, bullets, cuerpo en UI.
Rol: font.family.body
Tamaños: body.md → xl
Pensamos producto,
cebamos el código.
Aa Bb Cc Dd Ee Ff Gg Hh Ii Jj Kk Ll Mm Nn Ññ Oo Pp Qq Rr Ss Tt Uu Vv Ww Xx Yy Zz — 0 1 2 3 4 5 6 7 8 9
Editorial
Scilla
Narrow
El serif con alma. Se usa casi siempre en cursiva: para citas, énfasis dentro de titulares, subtítulos que respiran.
Rol: font.family.editorial
Tamaños: editorial.sm → xl, quote-md/lg/xl
“Un commit sin revisión
es como un asado sin sal.”
Aa Bb Cc Dd Ee Ff Gg Hh Ii Jj — 0 1 2 3 4 5 6 7 8 9
Data
Thunder
Altísima, condensada, pesada. Solo para numerales protagonistas: hero stats, KPI grids, multiplicadores.
Rol: font.family.data
Tamaños: data.md/lg/xl, numeral.md/lg
03.247
0 1 2 3 4 5 6 7 8 9 · $ % € ° → ← ↑ ↓ + —
Code
JetBrains
Mono
Monoespaciada con ligaduras. Todo lo que es metadata, label, eyebrow, código. Nunca cuerpo.
Rol: font.family.code
Tamaños: eyebrow.sm/md/lg
const chimi = () => {
  return ‘rico’;
}
A a 0 1 { } [ ] = > < — /* */ · λ
03 · Cuándo usar cada familia

Cinco voces,
cinco contextos.

No es estética: cada familia tiene un trabajo. Display grita en cover, body sostiene el cuerpo, editorial siempre va en cursiva, data solo aparece para números protagonistas, mono firma metadata. Salirse del rol rompe la jerarquía sin avisar.

Display · CHANEY
Hablamos de esto.

Para titulares cortos y enormes — covers, big-concept, hero de blog y techconf, transiciones de sección. Pensada para 3–10 palabras como mucho. Si el bloque pasa de 15 palabras, es un body disfrazado.

  • Cover de slide / título de post
  • Hero de chimi.pro
  • Big-concept · una idea por slide
Body · At Aero
Pensamos producto, cebamos código.

El caballo de batalla. Subtítulos, bullets, párrafos, UI de formularios, descripciones de evento, nav. Cualquier texto que el lector lea de corrido pasa por acá.

  • Body del blog y techconf
  • Bullets de big-list
  • Inputs y labels de UI
Editorial · Scilla Narrow
El serif con alma — siempre cursiva.

Casi exclusivamente como cursiva: el color del <em>, los subtítulos editoriales bajo display, los testimonios y quotes. Nunca como cuerpo recto — eso rompe el contrato del sistema.

  • Em dentro de display titles
  • Subtítulo de cover/big-stat
  • Quote default y testimonial
Data · Thunder
92%

Solo para numerales protagonistas. Hero stats, multiplicadores, KPI grids, big-stat. Nunca para cuerpo, nunca para títulos textuales — la condensación cansa la vista en cualquier otro contexto.

  • Big-stat (data.lg/xl)
  • KPI grid con allowMultipleStats
  • Numerales en chart-bar / line
Code · JetBrains Mono
const chimi = 'rico';

Mono para todo lo que es metadata: eyebrows, labels, código (block o inline), tokens, file names en tablas. Nunca como cuerpo — es una voz de anotación, no de lectura.

  • Eyebrows en todas las webs
  • Code blocks y tokens en docs
  • Labels de chart y nav
04 · Pesos & estilos

Las variantes cargadas.

Cada familia trae los pesos y estilos que el sistema realmente usa. Si necesitás uno que no está acá, primero entra al JSON — no se cargan archivos extra desde un layout.

CHANEY · Display
Regular · 400
CÓDE BIEN HECHO
Display default · todos los tamaños
Extended · 700–900
CÓDE BIEN HECHO
Display extra-bold · variable
At Aero · Body
Regular · 400
Pensamos producto.
Body en lectura larga
Medium · 500
Pensamos producto.
Body default · UI
Semibold · 600
Pensamos producto.
Body emphasis · titulares de UI
Bold · 700
Pensamos producto.
CTA labels · big-list items
Italic · 400i
Pensamos producto.
Énfasis dentro de body
Scilla Narrow · Editorial · variable 400–700
Regular · 400–700
Subtítulo editorial.
Sólo para casos edge · default va en italic
Italic · 400–700
Subtítulo editorial.
Default · em y subtítulos
Thunder · Data · variable 100–900 (usado solo a 700)
Bold · 700
3.247
Único peso usado · stats & numerales
JetBrains Mono · Code · 400–900 (usado a 500)
Medium · 500
color.surface.canvas
Único peso usado · eyebrows & code
05 · Numeral vs Data

Misma fuente,
distinto trabajo.

Las dos escalas usan Thunder, pero hacen cosas distintas. Data es el numeral protagonista — el héroe de la slide. Numeral es para listas: marcadores chicos al lado de un ítem, capítulos numerados, ranking. Confundirlas hace que la slide pierda jerarquía.

type.data.lg/xl
El héroe de la slide. Nada compite a su escala.
92%
data.md 120px · data.lg 420px · data.xl 640px
type.numeral.md/lg
Marcador. Lista. Ranking.
  • 01Trunk-based dev
  • 02Feature flags
  • 03Continuous deploy
numeral.md 56px · numeral.lg 72px
06 · Slide-scale vs web-scale

Misma escala,
otro lienzo.

Los --chimi-type-* están tuneados para 1920×1080 — una slide es un cartel a 3 metros. Una web vive a 30 cm de la cara y se redimensiona. Por eso web.css publica composites paralelos --web-display-*, --web-body-*, --web-eyebrow con valores clamp() tuneados al canvas web. Usá uno u otro según el contexto.

Slide · 1920×1080
Cebada caliente

Display.lg viene a 148px. Pensado para auditorio: visible desde la fila 12, tipografía dominante en el cartel.

font: var(--chimi-type-display-lg)
Web · 1120 / responsive
Cebada caliente

Web-display.lg clampea entre 48 y 88px según viewport. Mismo carácter, otro fluido — no se siente subdimensionada en mobile ni gigante en 4K.

font: var(--web-display-lg)

Brand y type usan slide-scale a propósito — esta página es un specimen del DS, así que muestra los valores canónicos. Las webs reales (blog, techconf, etc.) consumen web-scale via web.css.

07 · Tipografía permitida por receta

No todo entra en
cualquier receta.

Cada receta whitelistea las familias que pueden aparecer en su superficie. Energy-loud no admite editorial larga, paper-cool restringe data salvo en kpi-grid, critical bg permite solo display + body. El linter npm run check:recipes reporta violaciones.

Receta
Familias permitidas
Restricciones
canvas-quiet
display, body, editorial, code, numeral
data solo en kpi-grid (allowMultipleStats)
canvas-signal
display, body, editorial, code, numeral, data
data es protagonista, no decoración
paper-warm
display, body, editorial, code
data, numeral — sin contraste para Thunder en ivory
paper-cool
display, body, editorial, code, numeral
data salvo en allowMultipleStats
energy-loud
display, body, code
editorial, data, numeral — el ruido cromático ya es la voz
cool-fresh
display, body, code
editorial, data, numeral
critical (bg)
display, body
editorial, data, numeral, code
08 · Escala

Type-styles,
no tamaños sueltos.

Cada rol tipográfico tiene una escala t-shirt (sm, md, lg, xl, 2xl). El style completo — familia + tamaño + line-height + letter-spacing — está encapsulado en una sola variable --chimi-type-<rol>-<escala>. Un layout escribe font: var(--chimi-type-display-md) y listo.

Display · CHANEY
type.display.md
Título default
120px · 0.95 · −0.015em
type.display.lg
Cover / Punch
148px · 0.9 · −0.015em
type.display.xl
Transición
180px · 1 · −0.015em
Editorial · Scilla Narrow (italic)
type.editorial.sm
Detalle editorial en KPI cards
24px · 1.25
type.editorial.md
Subtítulo editorial en cover
36px · 1.3
type.editorial.lg
Subtítulo big-concept / big-stat
56px · 1.25
type.editorial.quote-md
“Testimonial que respira”
70px · 1.15 · −0.005em
type.editorial.quote-lg
“Quote default”
120px · 1.05 · −0.01em
type.editorial.quote-xl
“Quote xl”
180px · 1 · −0.015em
Body · At Aero
type.body.md
Cuerpo para detalles y descripciones.
36px · 1.25 · 500
type.body.lg
Cuerpo para slides con mucho texto.
44px · 1.25 · 500
type.body.xl
Ítems de big-list.
56px · 1.25 · 600
Data · Thunder
type.data.md
120
120px · 0.9 · 700
type.data.lg
420px · 0.82 · 700
type.data.xl
9
640px · 0.82 · 700
Numeral (data, list-scale) · Thunder
type.numeral.md
01 02 03
56px · 1 · 700
type.numeral.lg
1. 2. 3.
72px · 1 · 700
Eyebrow · JetBrains Mono
type.eyebrow.sm
Fuente · Metadata chica
20px · 0.15em
type.eyebrow.md
Eyebrow default
22px · 0.15em
09 · Reglas rápidas

Lo que el sistema espera.

No son reglas morales — son el contrato que hace que todo se vea coherente. Romperlas es posible; hay que tener una razón clara.

Una familia por rol

Display para titulares, body para texto, editorial para énfasis. El rol viene antes que el gusto.

Referenciá type-styles por nombre, no por tamaño.

NO

Mezclar display con editorial

Dos voces competing en la misma línea se neutralizan. Editorial va siempre adentro (como em), display afuera.

Editorial no reemplaza a display — lo acentúa.

Consumir solo la capa semántica

Siempre color.surface.canvas, nunca primitives.color.charcoal.100.

Si no hay rol para lo que necesitás, agregalo al JSON.

NO

CHANEY como body text

Pensada para titulares cortos. Párrafos enteros en display cansan al lector en tres líneas.

Máxima ~15 palabras por bloque de display.