Fundamentos

Color

Superficies, texto, acento y estados, con su contraste medido en cada personalidad.

Los componentes nunca escriben un color: piden un token semántico (bg-card, text-muted-foreground) y el motor lo resuelve para la personalidad y el modo donde viven. Cada valor de esta página se lee en vivo del navegador: mueve la barra de arriba y cambian juntos, contrastes incluidos.

De dónde sale cada color

Una marca no elige veinte colores: elige marca, tinta, papel y tinte. El motor (eclipse_ui/tokens.css) tiñe la tinta con un poco de la marca y saca cada gris como un paso de esa tinta mezclada con el fondo en oklab: color-mix(in oklab, tinta 15%, fondo) es el borde. En oscuro tinta y papel se invierten y los pasos crecen. El texto sobre la marca y el texto de marca se ajustan solos hasta leerse. Carbón fija sus valores a mano, así que sus muestras no caen exactas sobre la línea. Para ver cada personalidad completa sobre la página de un estudio, abre Personalidades.

Diales y pasos de tinta
  • Marca --eui-brand — La luz de la marca: botón principal, medidor, foco.
  • Tinta --eui-ink — El texto en claro; el fondo en oscuro.
  • Papel --eui-paper — El fondo en claro; el texto en oscuro.
  • Tinte --eui-tint — Cuánta marca entra en los grises: su temperatura.
Fondo · 0% Tinta teñida · 100%
Elevado
—
Relleno
—
Borde sutil
—
Borde
—
Borde hover
—
Ícono tenue
—
Metadatos
—
Secundario
—

Fuera de la línea: la tarjeta es blanca en claro y toma el relleno en oscuro; el hover mezcla — de tinta sobre la tarjeta; la marca en hover mezcla — del color del texto, y el lavado, 12% de marca sobre el fondo.

Superficies

La escalera de capas: cada superficie es apenas distinta de la de abajo y la separa un borde de 1px. Elige por función, no por tono: la tarjeta es tarjeta en todas las personalidades aunque cambie su color. Más en Profundidad.

Superficies
  • Fondo

    bg-background --color-background —

    La página y el escenario. Todo empieza aquí.

  • Elevado

    bg-raised --color-raised —

    Un paso de tinta sobre el fondo: barras, encabezados de tabla, la base de un control segmentado.

  • Tarjeta

    bg-card --color-card —

    Tarjetas, paneles, menús y modales. bg-surface es el mismo token.

  • Hover

    bg-surface-hover --color-surface-hover —

    La fila, opción o tarjeta bajo el cursor; la opción activa de una lista.

  • Relleno

    bg-muted --color-muted —

    Pistas y rellenos de controles: interruptor apagado, barra de progreso.

Texto

Cinco tonos de texto, de lo que se lee primero a lo que casi no se ve. Cada celda está pintada sobre su superficie y dice su contraste medido (WCAG 2): AAA desde 7:1, AA desde 4.5:1, AA grande desde 3:1 (solo títulos de 24px o 19px seminegrita) y no apto para texto por debajo.

Texto sobre cada superficie
  • text-foreground

    --color-foreground —

    Títulos, valores y lo que se lee primero.

    Vinyasa 07:00

    Contraste sobre fondo: — —

    Vinyasa 07:00

    Contraste sobre elevado: — —

    Vinyasa 07:00

    Contraste sobre tarjeta: — —

    Vinyasa 07:00

    Contraste sobre hover: — —

  • text-muted-foreground

    --color-muted-foreground —

    Texto secundario: descripciones, ayudas, celdas.

    Vinyasa 07:00

    Contraste sobre fondo: — —

    Vinyasa 07:00

    Contraste sobre elevado: — —

    Vinyasa 07:00

    Contraste sobre tarjeta: — —

    Vinyasa 07:00

    Contraste sobre hover: — —

  • text-primary-text

    --color-primary-text —

    Texto en color de marca: ligas y etiquetas.

    Vinyasa 07:00

    Contraste sobre fondo: — —

    Vinyasa 07:00

    Contraste sobre elevado: — —

    Vinyasa 07:00

    Contraste sobre tarjeta: — —

    Vinyasa 07:00

    Contraste sobre hover: — —

  • text-faint

    --color-faint —

    Solo metadatos que no hace falta leer: horas y contadores.

    Vinyasa 07:00

    Contraste sobre fondo: — —

    Vinyasa 07:00

    Contraste sobre elevado: — —

    Vinyasa 07:00

    Contraste sobre tarjeta: — —

    Vinyasa 07:00

    Contraste sobre hover: — —

  • text-subtle

    --color-subtle —

    Íconos tenues y separadores. Nunca texto.

    Vinyasa 07:00

    Contraste sobre fondo: — —

    Vinyasa 07:00

    Contraste sobre elevado: — —

    Vinyasa 07:00

    Contraste sobre tarjeta: — —

    Vinyasa 07:00

    Contraste sobre hover: — —

Bordes

El borde de 1px es la separación principal del sistema, antes que cualquier sombra. Tres pasos: el de siempre, uno más tenue para dividir dentro de una pieza y uno más firme para lo que está bajo el cursor.

Bordes
  • Borde border-border --color-border · — El de siempre: tarjetas, campos, tablas. La separación principal.
  • Sutil border-border-subtle --color-border-subtle · — Divisiones dentro de una pieza: filas de una lista, pie de una tarjeta.
  • Hover border-border-hover --color-border-hover · — El borde bajo el cursor o de lo activo: hover:border-border-hover.
Vinyasa Flow 07:00 · Mariana 8 lugares
Reformer Intermedio 09:30 · Sofía Llena
Mat Pilates 19:00 · Ana 3 lugares

Acento

La marca es la luz de tu producto y se usa poco: el botón principal, el medidor, lo que importa en la vista. El texto sobre ella lo elige el motor (oscuro o claro según qué tan clara es la luz); el texto en color de marca usa text-primary-text, que se acerca a la tinta hasta leerse.

Acento
  • Marca

    bg-primary --color-primary —

    Botón principal, medidor, el punto que importa.

  • Marca en hover

    bg-primary-hover --color-primary-hover —

    La marca un paso hacia el color del texto.

  • Texto sobre la marca

    text-primary-foreground --color-primary-foreground —

    Oscuro sobre luz clara, claro sobre luz oscura: lo elige el motor.

  • Lavado

    bg-wash --eui-brand-wash —

    12% de marca sobre el fondo: lo elegido, un aviso suave.

  • Velo

    bg-accent-subtle --eui-accent-subtle —

    Un velo de tinta: resaltado de fila o de pastilla.

Texto sobre la marca
——
Con el cursor encima
——
Paquete 10 clases Vence en 60 días · elegido $1,450
Clase suelta Vence en 30 días $180

Ver todos los paquetes · liga en text-primary-text

Estados

Éxito, atención y peligro no salen de la marca: un rojo siempre debe leerse como error, en cualquier marca. Cada uno tiene su relleno con su texto encima y su versión como texto; los números dicen dónde se puede usar cada cosa.

Estados
Éxito bg-success text-success-foreground — Pagado

Reserva confirmada · +12% vs. la semana pasada

Texto en el relleno
——
Sobre tarjeta
——
Sobre fondo
——

Confirmaciones, pagos recibidos, cambios a favor.

Atención bg-warning text-warning-foreground — Quedan 2

Cancelación tardía: el crédito no se devuelve

Texto en el relleno
——
Sobre tarjeta
——
Sobre fondo
——

Cupo casi lleno, cancelación tardía. Como texto, siempre junto a un ícono y solo donde aquí diga AA.

Peligro bg-destructive text-destructive-foreground — Cancelar

El correo ya tiene una cuenta

Texto en el relleno
——
Sobre tarjeta
——
Sobre fondo
——

Errores de campo, cancelar, eliminar. Pasa AA como texto chico.

El color nunca va solo: Confirmada En lista de espera Cancelada

Foco

El único color fuera de la marca es el del foco, y solo aparece con teclado (:focus-visible). eui-focus pinta un anillo nítido de 2px separado 2px del control con --eui-focus (azul en Carbón) o, si la personalidad no lo fija, la marca al 60%. eui-ring es la versión con halo (separación del color del fondo, el anillo y un resplandor que sigue el dial --eui-halo); la usan los botones. Recorre la muestra con Tab.

Foco
Así se ve Liga con eui-focus
Color del anillo
—
Anillo contra el fondo (mínimo 3:1)
——

Reglas de uso

  • Por función, no por tono. text-foreground para lo que se lee primero, text-muted-foreground para lo secundario: los dos pasan AA en fondo, elevado, tarjeta, hover y relleno, en todas las personalidades.
  • text-faint solo para metadatos (horas, contadores) y text-subtle solo para íconos tenues: no pasan AA en todas las personalidades. Si hay que leerlo para decidir algo, es text-muted-foreground.
  • El color nunca va solo. Un estado es punto o ícono más texto ("Confirmada", "Lista de espera"); un error dice qué pasó y cómo seguir.
  • La marca no es para fondos grandes. Botón principal, medidor, el punto que importa. Para una superficie con marca, bg-wash o bg-primary/10.
  • Texto de marca con text-primary-text, nunca text-primary: la marca pura es para rellenos y no siempre se lee sobre el fondo.
  • Atención es ícono y relleno. warning es un amarillo: como texto sobre un fondo claro casi nunca llega a AA. Úsalo de relleno (con text-warning-foreground encima) o como texto solo donde la muestra de estados diga AA.
  • Opacidad con modificador (bg-primary/10, border-destructive/30), nunca un color nuevo. Nada de hex ni gray-* en una vista: si falta un color, falta un token.

Contraste en todas las personalidades

El contrato de contraste vive en config/eclipse_ui/contrast.yml: estos pares deben pasar AA (4.5:1) en todas las personalidades, en claro y en oscuro. La tabla los mide ahora en este navegador, sin importar la barra; la prueba test/eclipse_ui/contrast_test.rb los mide igual (con Chrome sin ventana, dentro de bin/rails test) y falla si alguno baja.

  • foreground sobre background, raised, card, surface-hover, muted
  • muted-foreground sobre background, raised, card, surface-hover, muted
  • destructive sobre background, card, surface-hover
  • primary-text sobre background, card
  • primary-foreground sobre primary, primary-hover
  • destructive-foreground sobre destructive
  • success sobre background, card
  • success-foreground sobre success
  • warning-foreground sobre warning
PersonalidadClaro: el par más bajoOscuro: el par más bajo
Carbón — — midiendo… — pares en AA — — midiendo… — pares en AA
Eclipse — — midiendo… — pares en AA — — midiendo… — pares en AA
Alba — — midiendo… — pares en AA — — midiendo… — pares en AA
Brisa — — midiendo… — pares en AA — — midiendo… — pares en AA
Umbra — — midiendo… — pares en AA — — midiendo… — pares en AA
Terra — — midiendo… — pares en AA — — midiendo… — pares en AA