El sistema de color de Frutjam utiliza tokens CSS semánticos diseñados para cumplir con las relaciones de contraste WCAG AA desde el primer momento. Sin JavaScript, compatible con el modo oscuro, compatible con Tailwind CSS v4. Funciona con Django, HTMX, Laravel y cualquier pila de solo CSS.
Frutjam utiliza propiedades personalizadas de CSS como tokens de diseño para todos los colores. Cada color se define por tema y funciona automáticamente con las clases de utilidad CSS de Tailwind, sin necesidad de configuración adicional. Solo CSS, no se requiere JavaScript. Contraste WCAG AA garantizado en cada par de colores, funciona con Django, HTMX, Laravel, React y cualquier proyecto Tailwind CSS v4.
Nombres de colores
Frutjam define los siguientes roles semánticos de color. Cada color tiene un juego on-{color} token para texto en primer plano accesible.
on-{color} El par está ajustado manualmente en OKLCH para cumplir con los requisitos de contraste WCAG AA. A diferencia de las bibliotecas que calculan los colores de primer plano automáticamente, Frutjam le brinda pares explícitos y verificados, por lo que sus componentes son accesibles por diseño, no por casualidad.| Color | Simbólico | Objetivo |
|---|---|---|
| base | --color-base | Fondo de la página |
| neutral | --color-neutral | Superficies, barras laterales, superposiciones |
| primario | --color-primary | Color de marca principal |
| secundario | --color-secondary | Color de marca secundaria |
| acento | --color-accent | Color de acento/resaltado |
| información | --color-info | Mensajes informativos |
| éxito | --color-success | Estados de éxito |
| advertencia | --color-warning | Estados de advertencia |
| error | --color-error | Error y estados destructivos. |
Escala de colores (50–950)
Cada color genera una escala de 11 pasos, calculada a partir de las variables del tema raíz con color-mix() en OKLCH en lugar de en el momento de la construcción. Establezca un color de marca y los once pasos se derivarán de él, por lo que nunca los configurará a mano.
Cada paso es una variable CSS y una utilidad Tailwind a la vez: use var(--color-primary-700) en tu propio CSS, o bg-primary-700 en marcado. Pase el cursor sobre una muestra para ver ambos nombres.
primaryprimary 50primary 100primary 200primary 300primary 400primary 500primary 600primary 700primary 800primary 900primary 950secondarysecondary 50secondary 100secondary 200secondary 300secondary 400secondary 500secondary 600secondary 700secondary 800secondary 900secondary 950accentaccent 50accent 100accent 200accent 300accent 400accent 500accent 600accent 700accent 800accent 900accent 950infoinfo 50info 100info 200info 300info 400info 500info 600info 700info 800info 900info 950successsuccess 50success 100success 200success 300success 400success 500success 600success 700success 800success 900success 950warningwarning 50warning 100warning 200warning 300warning 400warning 500warning 600warning 700warning 800warning 900warning 950errorerror 50error 100error 200error 300error 400error 500error 600error 700error 800error 900error 950neutralneutral 50neutral 100neutral 200neutral 300neutral 400neutral 500neutral 600neutral 700neutral 800neutral 900neutral 950basebase 50base 100base 200base 300base 400base 500base 600base 700base 800base 900base 950Debido a que los pasos se calculan a partir de su tema en lugar de estar codificados, esta cuadrícula no es una imagen de los colores de Frutjam. Son tus colores. Cambie el tema y cada muestra de arriba se moverá con él, razón por la cual no hay valores hexadecimales impresos junto a ellos.
1 2 3 | <div class="bg-primary-100 text-primary-900 p-4 rounded">Light tint, dark text</div> <div class="bg-success-700 text-success-50 p-4 rounded">Dark shade, light text</div> <div class="border-2 border-error-400 text-error-600 p-4 rounded">Border and text</div> |
on- color, por lo que nada garantiza el contraste con él. Cuando el texto se asienta sobre un color, use el par que prueba la biblioteca: bg-primary con text-on-primary.| Variables CSS | Descripción |
|---|---|
--color-{color}-50 | 80% del tono claro, 20% del color |
--color-{color}-100 | 65% luz, 35% color |
--color-{color}-200 | 50% luz, 50% color |
--color-{color}-300 | 35% luz, 65% color |
--color-{color}-400 | 18% luz, 82% color |
--color-{color}-500 | el color en sí, igual que --color-{color} |
--color-{color}-600 | 18% de tono oscuro, 82% de color. |
--color-{color}-700 | 34% oscuro, 66% color |
--color-{color}-800 | 50% oscuro, 50% color |
--color-{color}-900 | 65% oscuro, 35% color |
--color-{color}-950 | 80% oscuro, 20% color |
Clases de utilidad de color
Todos los colores de Frutjam funcionan con cualquier utilidad de color CSS de Tailwind. Reemplazar {color} con cualquier nombre de color de la tabla anterior, seguido opcionalmente de un paso de la escala 50-950: bg-primary, bg-primary-100, text-error-900, border-success-300.
| Clase | Descripción |
|---|---|
bg-{color} | Color de fondo |
text-{color} | Color del texto |
border-{color} | Color del borde |
ring-{color} | Color del anillo |
outline-{color} | color de contorno |
shadow-{color} | color de sombra |
fill-{color} | Color de relleno SVG |
stroke-{color} | color de trazo SVG |
decoration-{color} | Color de decoración del texto |
caret-{color} | Color de intercalación de entrada |
placeholder-{color} | Color del texto del marcador de posición |
divide-{color} | Color del borde divisorio |
{utility}-{color}-{step} | Cualquiera de los anteriores en un paso de escala, por ejemplo bg-accent-200 |
1 2 3 | <div class="bg-primary text-on-primary p-4 rounded">Primary background</div> <div class="bg-secondary text-on-secondary p-4 rounded">Secondary background</div> <div class="border border-primary text-primary p-4 rounded">Primary border and text</div> |
Modificador de opacidad
Controle la opacidad del color con el /{value} modificador, como cualquier color de Tailwind.
1 2 3 | <div class="bg-primary/10 text-primary p-4 rounded">10% primary background</div> <div class="bg-primary/20 text-primary p-4 rounded">20% primary background</div> <div class="text-on-base/60 p-4">60% opacity text</div> |
Suave y activo
Variantes con reconocimiento de estado para elementos interactivos, que se adaptan automáticamente a temas claros y oscuros.
| Variables CSS | Descripción |
|---|---|
--color-{color}-soft | Fondo teñido sutil para variantes suaves |
--color-on-{color}-soft | Color de texto para usar en fondos suaves |
--color-{color}-active | Tono oscurecido/aclarado para estados activos y suspendidos |
--color-body | Color del cuerpo del texto calculado (ligeramente suavizado desde on-base) |
Variables CSS del tema
Estos son los tokens raíz que defines al crear un tema personalizado. Todos los demás tokens de colores se calculan automáticamente a partir de estos.
| Variables CSS | Descripción |
|---|---|
--scheme-color | Esquema de colores: light o dark |
--border-radius | Radio del borde base para componentes |
--color-base | Color de fondo de la página |
--color-on-base | Color de texto predeterminado en el fondo base |
--color-neutral | Color de superficie neutro |
--color-on-neutral | Color del texto en superficies neutras. |
--color-primary | Color de marca principal |
--color-on-primary | Color del texto en fondos primarios |
--color-secondary | Color de marca secundaria |
--color-on-secondary | Color del texto en fondos secundarios. |
--color-accent | Color de acento |
--color-on-accent | Color del texto en fondos acentuados |
--color-info | Color de información |
--color-on-info | Color del texto en fondos de información. |
--color-success | Color del éxito |
--color-on-success | Color de texto en fondos de éxito. |
--color-warning | Color de advertencia |
--color-on-warning | Color del texto en fondos de advertencia |
--color-error | Color de error |
--color-on-error | Color del texto en fondos de error |
Ejemplo de tema personalizado
Anule los tokens raíz para crear un tema personalizado. Frutjam calcula todas las escalas y estados automáticamente.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | @import "tailwindcss"; @plugin "frutjam"; [data-theme="mytheme"] { --scheme-color: light; --border-radius: 0.5rem; --color-base: oklch(98% 0 0); --color-on-base: oklch(15% 0 0); --color-neutral: oklch(20% 0 0); --color-on-neutral: oklch(98% 0 0); --color-primary: oklch(55% 0.25 260); --color-on-primary: oklch(98% 0 0); --color-secondary: oklch(60% 0.20 320); --color-on-secondary: oklch(98% 0 0); --color-accent: oklch(65% 0.22 180); --color-on-accent: oklch(15% 0 0); --color-info: oklch(68% 0.17 237); --color-on-info: oklch(15% 0 0); --color-success: oklch(75% 0.20 150); --color-on-success: oklch(15% 0 0); --color-warning: oklch(82% 0.19 90); --color-on-warning: oklch(15% 0 0); --color-error: oklch(58% 0.24 27); --color-on-error: oklch(98% 0 0); } |