Tipografía
La tipografía se compone de tokens, un conjunto pequeño de estilos de elemento acotados a .iv-root y ocho utilidades de texto. No hay plugin tipográfico ni clase prose: el texto dentro de .iv-root recibe su estilo de sus propias etiquetas.
Escala tipográfica
Ocho pasos. Los dos mayores son fluidos: interpolan con el ancho de la ventana mediante clamp(), así que el título de una página encoge en un móvil sin necesidad de media query.
| Token | Valor | Lo usa |
|---|---|---|
--iv-text-xs | 0.75rem | iv-u-text-xs, letra pequeña en los componentes |
--iv-text-sm | 0.875rem | <small>, <caption>, <figcaption>, <kbd>, iv-u-text-sm |
--iv-text-md | 1rem | Texto de cuerpo en .iv-root, <h6>, iv-u-text-md |
--iv-text-lg | 1.125rem | <h5>, iv-u-text-lg |
--iv-text-xl | 1.25rem | <h4>, iv-u-text-xl |
--iv-text-2xl | 1.5rem | <h3>, iv-u-text-2xl |
--iv-text-3xl | clamp(1.75rem, 1.2rem + 1.5vw, 2.25rem) | <h2> — sin utilidad |
--iv-text-4xl | clamp(2.25rem, 1.5rem + 2.5vw, 3.5rem) | <h1> — sin utilidad |
La matriz de utilidades se detiene en 2xl a propósito: los dos pasos fluidos pertenecen a los títulos de página, y una página no debería tener varios. Aplícalos con <h1> y <h2>, o leyendo el token directamente en tu propio CSS.
La escala, renderizada
Cada fila de abajo es marcado real con las utilidades de texto, así que se renderiza con los mismos tokens que tus páginas.
xs — 0.75rem · notas al pie, metadatos
sm — 0.875rem · pies de foto, textos de ayuda
md — 1rem · texto de cuerpo, el valor por defecto
lg — 1.125rem · párrafo de entrada
xl — 1.25rem · subtítulo de sección
2xl — 1.5rem · títulos de tarjeta y de sección
Interlineado, grosor y familia
| Token | Valor | Se aplica a |
|---|---|---|
--iv-leading-tight | 1.1 | Todos los títulos h1–h6 lo reciben; h4–h6 lo sobrescriben después con snug |
--iv-leading-snug | 1.25 | h4, h5, h6, <pre> |
--iv-leading-normal | 1.5 | .iv-root, heredado por el texto de cuerpo |
--iv-leading-relaxed | 1.65 | Disponible para columnas de texto largo; no se aplica por defecto |
--iv-weight-normal | 400 | Texto de cuerpo, iv-u-font-normal |
--iv-weight-medium | 500 | iv-u-font-medium |
--iv-weight-semibold | 600 | h3–h6, <strong>, <b>, iv-u-font-semibold |
--iv-weight-bold | 700 | h1, h2, iv-u-font-bold |
--iv-font-sans | system-ui, -apple-system, "Segoe UI", Roboto, sans-serif | .iv-root |
--iv-font-mono | ui-monospace, "SFMono-Regular", Menlo, Consolas, monospace | <code>, <kbd>, <samp>, <pre> |
Qué aplica .iv-root
Los estilos de elemento viven en base.css y todos los selectores empiezan por .iv-root. Fuera de ese ámbito, iVOLT no da estilo a ningún elemento, y eso es lo que hace seguro añadirlo a una página que ya existe.
Títulos
| Elemento | Tamaño | Grosor | Interlineado |
|---|---|---|---|
h1 | --iv-text-4xl | bold | tight |
h2 | --iv-text-3xl | bold | tight |
h3 | --iv-text-2xl | semibold | tight |
h4 | --iv-text-xl | semibold | snug |
h5 | --iv-text-lg | semibold | snug |
h6 | --iv-text-md | semibold | snug |
Todos los títulos reciben margin-block: 0 y text-wrap: balance. El margen cero es deliberado: el ritmo vertical sale de una primitiva de maquetación, normalmente iv-stack, y no de unos márgenes colapsados contra los que pelear. El tamaño es presentación; elige el nivel de título por la estructura del documento y cambia su tamaño con una utilidad o con una regla propia si lo necesitas.
Contenido de flujo
<p>:margin-block: 0ytext-wrap: pretty.<ul>,<ol>: sin margen de bloque,padding-inline-start: var(--iv-space-6); los elementos de lista reciben un pequeño margen superior (--iv-space-1).<a>:--iv-color-primary, subrayado context-underline-offset: 0.15em, y pasa a--iv-color-primary-hoversolo dentro de@media (hover: hover), para que los dispositivos táctiles no se queden con un color de hover pegado.<strong>y<b>: semibold.<small>:--iv-text-sm.<blockquote>: texto atenuado con un borde de 2px en el lado inicial en--iv-color-border-strong.<hr>: una sola línea de borde en--iv-color-bordercon--iv-space-8arriba y abajo.
Código
code, kbd, samp y pre cambian a --iv-font-mono a 0.9375em, lo que mantiene el texto monoespaciado ópticamente al nivel del tamaño que lo rodea en vez de dar un salto. El code en línea y kbd se apoyan en --iv-color-surface con --iv-radius-sm y un poco de relleno en línea; kbd añade un borde. pre es un bloque de superficie con relleno, overflow-x: auto e interlineado ajustado, y pre code quita el fondo y el relleno para que el código anidado no se duplique.
Tablas y medios
Las tablas de contenido — <table> a secas, no el componente iv-table — reciben border-collapse: collapse, ancho en línea completo y texto alineado al inicio; <caption> es pequeña, atenuada y alineada al inicio. img, svg y video se limitan a max-inline-size: 100%; figure pierde sus márgenes por defecto y figcaption es pequeña y atenuada.
Medida de lectura
Las líneas largas cuestan de seguir. --iv-measure vale 68ch y, como ch es relativo a la fuente actual, la medida sigue a la tipografía y al tamaño que fijes. Tres formas de usarla:
<div class="iv-container iv-container--narrow">…</div> <!-- container limitado a la medida -->
<article class="iv-u-max-w-measure">…</article> <!-- utilidad en cualquier bloque -->
.my-article { max-inline-size: var(--iv-measure); } /* tu propio CSS, leyendo el token */La medida está pensada para el texto de cuerpo. Las tablas, los bloques de código y los cuadros de mando suelen querer el contenedor completo; no los envuelvas en un contenedor estrecho por costumbre.
Utilidades de texto
Salen de la matriz finita. Solo la alineación tiene prefijos adaptables (sm md lg xl); las utilidades de tamaño, grosor y color no los tienen, porque un tamaño que cambia por punto de ruptura suele ser la escala fluida de títulos disfrazada.
| Utilidad | Efecto | Adaptable |
|---|---|---|
iv-u-text-start|center|end | Alineación lógica del texto, así que sigue a RTL | sí |
iv-u-text-xs|sm|md|lg|xl|2xl | Fija font-size desde la escala | no |
iv-u-font-normal|medium|semibold|bold | Fija font-weight | no |
iv-u-text-muted | --iv-color-text-muted — texto secundario, nunca el único portador de significado | no |
iv-u-truncate | Una línea con puntos suspensivos; deja el texto completo accesible en otro sitio | no |
Las utilidades se emiten con el selector duplicado, especificidad (0,2,0), y se cargan las últimas, así que ganan a los modificadores de componente tanto en la hoja en capas como en la plana. Lo que quede fuera de la matriz no existe en la v0.1: no hay sintaxis de valores arbitrarios ni escáner de clases.
Cambiar la tipografía
Redefine los tokens de familia después de la hoja de iVOLT. Todos los estilos de elemento y todos los componentes leen el token, así que una sola declaración mueve el sistema entero.
/* tu-tema.css, cargado después de ivolt.css */
.iv-root {
--iv-font-sans: "Your Sans", system-ui, sans-serif;
--iv-font-mono: "Your Mono", ui-monospace, monospace;
}Dos cosas a tener en cuenta. Primera: --iv-measure está en ch, así que una tipografía más ancha hace la columna físicamente más ancha con los mismos 68 caracteres; es el comportamiento previsto, pero conviene comprobarlo. Segunda: si alojas tú mismo una fuente web, declara @font-face en tu propia hoja con el font-display que hayas elegido, y deja una alternativa real del sistema en la pila para que el texto sea legible antes de que llegue el archivo.
También puedes reescalar sin tocar las familias. --iv-text-* son propiedades personalizadas corrientes, así que una variante compacta es un puñado de sobrescrituras en el mismo bloque.
Por qué system-ui
El paquete no distribuye archivos de fuente ni pide ninguno. La pila por defecto empieza en system-ui y desciende por -apple-system, Segoe UI y Roboto, de modo que cada plataforma renderiza con una tipografía que ya tiene. Las razones son concretas:
- Sin petición de red, así que no hay parpadeo de texto sin estilo o invisible ni desplazamiento de la maquetación mientras se descarga un archivo.
- Sin un origen de terceros en la ruta crítica, lo que importa cuando un sitio aplica una Content-Security-Policy estricta o tiene que declarar de dónde vienen sus recursos.
- Nada que empaquetar ni que servir: el CSS funciona desde un sistema de archivos, desde la carpeta de un tema de WordPress o desde una CDN propia sin recursos adicionales.
La contrapartida es real y no la escondemos: la misma página no se ve idéntica en macOS, Windows y Android, porque no es la misma tipografía. Si tu marca necesita una sola tipografía en todas partes, alójala tú y sobrescribe el token como se ha visto arriba: el resto del sistema no cambia.