Fundamentos & Tokens

El sistema de tokens de diseño que impulsa cada componente — superficies, colores, espaciado, tipografía y el motor de temas multi-eje.

Tokens de diseño

Todos los valores (colores, tamaños, radios, sombras, espaciado) son propiedades personalizadas CSS definidas en tokens.css. Los componentes nunca usan valores fijos — siempre referencian un token. Reemplaza cualquier token para adaptar WebBlocks UI a tu marca.

Regla: Usa tokens también en tus propios componentes. Nunca fijes un color, tamaño o radio que pueda cambiar con un cambio de tema.

Superficies & texto

TokenPor defecto (claro)Uso
--wb-bg#f4f6fbFondo de página
--wb-surface#ffffffTarjetas, paneles, modales
--wb-surface-2#edf1f7Fondos sutiles, filas de tabla
--wb-surface-3#e2e8f2Estados hover, divisores
--wb-text#18212fTexto principal
--wb-muted#5a6a84Texto secundario, etiquetas, marcadores
--wb-border#d6e0eeTodos los bordes y divisores

Colores semánticos

TokenVariantesUso
--wb-success-dark · -softAlertas de éxito, badges, iconos
--wb-warning-dark · -softAlertas de advertencia, estados de precaución
--wb-danger-dark · -softEstados de error, acciones destructivas
--wb-info-dark · -softAlertas informativas, sugerencias

Escala de espaciado (base 4px)

TokenValorTokenValor
--wb-s14px--wb-s832px
--wb-s28px--wb-s1040px
--wb-s312px--wb-s1248px
--wb-s416px--wb-s1664px
--wb-s520px--wb-s2080px
--wb-s624px

Radio de borde

TokenValor
--wb-r-sm5px
--wb-r-md9px
--wb-r-lg14px
--wb-r-xl20px
--wb-r-full9999px (pastilla/círculo)

Tipografía

TokenDescripción
--wb-fontPila de fuente de cuerpo (Inter, fallbacks del sistema)
--wb-font-headingPila de fuente para encabezados (igual al cuerpo por defecto)
--wb-font-monoPila monoespaciada (Cascadia Code, Menlo, Consolas)
--wb-font-size-xs/sm/md/lg/xl0.75 / 0.875 / 1 / 1.125 / 1.25 rem

Sombras

TokenUso
--wb-shadow-smElevación sutil (tarjetas, entradas)
--wb-shadow-mdMenús desplegables, popovers
--wb-shadow-lgModales, drawers
--wb-shadow-xlPaleta de comandos, overlays elevados

Escala de z-index

TokenValorUso
--wb-z-dropdown100Menús desplegables, popovers, tooltips
--wb-z-modal200Modales, drawers, diálogos de confirmación
--wb-z-toast300Notificaciones toast

Sobreescribir tokens

Sobreescribe cualquier token en tu propio CSS apuntando a :root o a un selector acotado:

/* Sobreescritura global */
:root {
  --wb-font: 'Geist', sans-serif;
  --wb-r-md: 12px;
}

/* Sobreescritura acotada — solo afecta a una sección */
.my-hero {
  --wb-accent: #8b5cf6;
}

Colores de acento

Establece data-accent en el elemento <html> para cambiar toda la interfaz a un esquema de color diferente. Cada acento define 12 tokens.

ocean
forest
sunset
royal
mint
amber
rose
slate-fire

Haz clic en una muestra arriba para ver el acento en esta página.

Conjunto de tokens de acento (12 tokens por acento)

TokenUso
--wb-accentAcento principal — fondos de botones, estados activos
--wb-accent-hoverEstado hover para elementos con color de acento
--wb-accent-activeEstado activo / presionado
--wb-accent-softFondo con tinte (badges, chips)
--wb-accent-softerTinte muy claro (secciones de página, callouts)
--wb-accent-borderBorde con tinte de acento
--wb-accent-textTexto de acento sobre fondo claro
--wb-accent-onColor de texto sobre fondo de acento (siempre blanco o casi blanco)
--wb-accent-ringColor del anillo de foco
--wb-accent-ring-rgbValores RGB para anillo de foco con opacidad rgba()
--wb-accent-selectionFondo de selección de texto
--wb-accent-glow-rgbValores RGB para efectos de brillo
Compatibilidad con versiones anteriores: --wb-primary, --wb-primary-dark y --wb-primary-soft son alias que apuntan a sus equivalentes --wb-accent*. En código nuevo, usa siempre --wb-accent*.

Modo oscuro

El modo oscuro se controla mediante el atributo data-mode en <html>. Se admiten tres valores.

ValorComportamiento
lightSiempre modo claro
darkSiempre modo oscuro
autoSigue la configuración del sistema prefers-color-scheme

Cómo funciona el modo oscuro

El modo oscuro reemplaza los tokens de superficie, texto y borde mediante un selector [data-mode="dark"] en dark.css. Todos los estilos de componentes heredan automáticamente los nuevos valores — no se necesitan variantes separadas de clase para modo oscuro.

<!-- Estático -->
<html data-mode="dark">

<!-- Cambiado por el usuario -->
<button data-wb-mode-cycle>Cambiar modo</button>

<!-- Establecido por programación -->
<script>WBTheme.setMode('dark');</script>
Persistencia en localStorage: WBTheme guarda la preferencia de modo del usuario en localStorage bajo la clave wb-mode y la restaura en la siguiente carga de página. Establece el data-mode inicial en el HTML para evitar un flash del modo incorrecto.

Presets

Los presets son paquetes con nombre que establecen múltiples ejes a la vez — radio, sombra, densidad, fuente y borde. Úsalos como punto de partida para un aspecto coherente; los ejes individuales aún pueden sobreescribir cualquier valor del preset.

PresetRadioSombraDensidadFuenteBorde
moderndefaultdefaultdefaultmodernsubtle
minimalsharpflatcompactsystemsubtle
roundedsoftsoftcomfortablemodernnone
boldsharpdefaultdefaultmodernbold
editorialsharpflatcomfortableeditorialmedium
<!-- Aplicar preset "rounded", sobreescribir solo el acento -->
<html data-preset="rounded" data-accent="rose">

<!-- Aplicar "minimal", sobreescribir radio a soft -->
<html data-preset="minimal" data-radius="soft">

Los presets se aplican en el orden de cascada CSS antes que los atributos de eje individuales, por lo que los ejes individuales siempre tienen prioridad.

Ejes de tema

Más allá del modo oscuro y el acento, cinco ejes adicionales permiten ajustar la personalidad visual de tu interfaz.

Radio — data-radius

ValorEfecto
sharpReduce todos los radios de borde — aspecto más estructurado y empresarial
softAumenta todos los radios de borde — aspecto amigable y orientado al consumidor

Densidad — data-density

ValorEfecto
compactReduce el relleno en botones, entradas, filas de tabla — más contenido por pantalla
comfortableAumenta el relleno — más espacio para respirar, mejor para táctil

Sombra — data-shadow

ValorEfecto
flatElimina sombras — profundidad basada en bordes, limpio y minimalista
softAumenta el desenfoque y opacidad de sombra — aspecto más elevado y premium

Fuente — data-font

ValorPila de fuente
systemPila de fuente nativa del SO — no se carga ninguna fuente web
modernInter (CDN) — limpia y muy legible
editorialPlayfair Display (CDN) + Inter — aspecto editorial y de publicación

Borde — data-border

ValorEfecto
noneElimina bordes — superficies definidas solo por sombras
subtleBordes ligeros (por defecto)
mediumBordes de peso medio
boldBordes gruesos — estructura visual fuerte
dashedBordes discontinuos — aspecto distintivo y técnico

Combinando todos los ejes

<!-- Máxima personalización sin una sola línea de CSS propio -->
<html
  data-mode="dark"
  data-accent="royal"
  data-preset="rounded"
  data-density="comfortable"
  data-font="modern"
>

Sobreescrituras de token personalizadas

Para personalizaciones específicas de marca que van más allá de los ejes incorporados, sobreescribe tokens directamente en tu propio CSS.

/* ── Fuente de marca ─────────────────────────────── */
:root {
  --wb-font:         'DM Sans', sans-serif;
  --wb-font-heading: 'DM Serif Display', serif;
}

/* ── Acento personalizado (fuera de los 8 predefinidos) ── */
:root {
  --wb-accent:           #0f766e;
  --wb-accent-hover:     #0d6e66;
  --wb-accent-active:    #0b605a;
  --wb-accent-soft:      #ccfbf1;
  --wb-accent-softer:    #f0fdf4;
  --wb-accent-border:    #5eead4;
  --wb-accent-text:      #0d6e66;
  --wb-accent-on:        #ffffff;
  --wb-accent-ring:      rgb(15 118 110);
  --wb-accent-ring-rgb:  15 118 110;
  --wb-accent-selection: #ccfbf1;
  --wb-accent-glow-rgb:  15 118 110;
}

/* ── Espaciado más ajustado para una tabla de datos densa ── */
.my-data-table {
  --wb-s3: 0.5rem;
  --wb-s4: 0.75rem;
}