Orbit UI

Color

Dos capas. Las primitivas guardan los valores; los tokens semánticos guardan el significado. Un componente nunca referencia una primitiva, y esa regla la impone la herramienta, no la disciplina.

Por qué dos capas

En Tailwind v4, un token declarado dentro de @theme genera sus utilidades: --color-card produce bg-card, text-card y border-card. Las primitivas se declaran fuera de @theme, así que no generan ninguna.

La consecuencia es la que buscábamos: no existe ninguna utilidad de Tailwind que apunte a un valor crudo. No hace falta acordarse de la regla, porque la clase directamente no existe.

/* capa 1 — primitivas, en :root, sin utilidades */
:root {
  --orbit-neutral-950: oklch(15.5% 0.004 285);
  --orbit-indigo-600:  oklch(54.6% 0.204 278);
}

/* capa 2 — semánticos, dentro de @theme, con utilidades */
@theme {
  --color-fg:     var(--orbit-neutral-950);
  --color-accent: var(--orbit-indigo-600);
}

/* dark mode: solo se redefine la capa semántica */
html.dark {
  --color-fg: var(--orbit-neutral-50);
}

Superficies

  • surfaceFondo de página
  • surface-subtleZona diferenciada dentro de la página
  • cardSuperficie de tarjeta
  • card-hoverTarjeta bajo el cursor
  • raisedMenús, popovers, cualquier cosa que flote
  • insetHundido: rieles, campos de código, fondos de barra

Texto e iconos

  • fgTexto principal
  • fg-mutedSecundario: descripciones, etiquetas
  • fg-subtleTerciario: unidades, marcas de eje
  • fg-disabledDeshabilitado
  • fg-inverseSobre fondo oscuro en tema claro
  • fg-on-accentSobre el color de acento

Bordes

  • borderBorde por defecto
  • border-subtleSeparadores internos
  • border-strongBorde con más presencia
  • ringAnillo de foco

Acento y estado

  • accentAcción primaria
  • accent-subtleFondo teñido de acento
  • accent-fgTexto de acento
  • successConfirmación
  • dangerError o destrucción
  • warningAtención

Paleta de series

8 · OKLCH

Validada con contraste contra el fondo de tarjeta en ambos temas, y con distancia perceptual mínima entre series contiguas. En modo oscuro no se usan los mismos valores: se sustituyen por versiones más claras del mismo matiz.

  • chart-1
  • chart-2
  • chart-3
  • chart-4
  • chart-5
  • chart-6
  • chart-7
  • chart-8

La regla, en una línea

Si estás por escribir un hex, un oklch() o una clase de paleta cruda, parate: hay un token semántico para eso. Si no lo hay, el que falta es el token, no el literal.