Color System
Frutjam's color system uses semantic CSS tokens designed to meet WCAG AA contrast ratios out of the box. No JavaScript, dark mode aware, compatible with Tailwind CSS v4. Works with Django, HTMX, Laravel, and any CSS-only stack.
Frutjam wykorzystuje niestandardowe właściwości CSS jako tokeny projektu dla wszystkich kolorów. Każdy kolor jest zdefiniowany dla motywu i automatycznie współpracuje z klasami narzędzi CSS Tailwind — nie jest wymagana dodatkowa konfiguracja. Tylko CSS, nie wymaga JavaScript. Kontrast WCAG AA gwarantowany dla każdej pary kolorów, współpracuje z Django, HTMX, Laravel, React i dowolnym projektem Tailwind CSS v4.
Nazwy kolorów
Frutjam definiuje następujące semantyczne role kolorów. Każdy kolor ma pasujący token on-{color} dla dostępnego tekstu na pierwszym planie.
on-{color} jest ręcznie dostrajana w OKLCH, aby spełnić wymagania kontrastu WCAG AA. W przeciwieństwie do bibliotek, które automatycznie obliczają kolory pierwszego planu, Frutjam udostępnia jawne, zweryfikowane pary, dzięki czemu dostęp do komponentów jest zgodny z projektem, a nie przypadkowy.
| Kolor | Znak | Zamiar |
|---|---|---|
| base | --color-base | Tło strony |
| neutral | --color-neutral | Powierzchnie, paski boczne, nakładki |
| primary | --color-primary | Podstawowy kolor marki |
| secondary | --color-secondary | Kolor drugorzędny marki |
| accent | --color-accent | Kolor akcentu/podkreślenia |
| info | --color-info | Komunikaty informacyjne |
| success | --color-success | Stany sukcesu |
| warning | --color-warning | Stany ostrzegawcze |
| error | --color-error | Stany błędne i destrukcyjne |
Zajęcia z użyteczności kolorów
Wszystkie kolory Frutjam współpracują z dowolnym narzędziem do tworzenia kolorów CSS Tailwind. Zastąp {color} dowolną nazwą koloru z powyższej tabeli.
| Klasa | Opis |
|---|---|
bg-{color} | Kolor tła |
text-{color} | Kolor tekstu |
border-{color} | Kolor obramowania |
ring-{color} | Kolor pierścionka |
outline-{color} | Kolor konturu |
shadow-{color} | Kolor cienia |
fill-{color} | Kolor wypełnienia SVG |
stroke-{color} | Kolor obrysu SVG |
decoration-{color} | Kolor dekoracji tekstu |
caret-{color} | Wprowadź kolor karetki |
placeholder-{color} | Kolor tekstu zastępczego |
divide-{color} | Kolor obramowania rozdzielacza |
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> |
Modyfikator krycia
Kontroluj krycie kolorów za pomocą modyfikatora /{value}, tak jak w przypadku każdego koloru 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> |
Zmienne CSS motywu
Są to tokeny główne, które definiujesz podczas tworzenia niestandardowego motywu. Wszystkie inne żetony kolorów są obliczane automatycznie na ich podstawie.
| Zmienna CSS | Opis |
|---|---|
--scheme-color | Schemat kolorów: jasny lub ciemny |
--border-radius | Podstawowy promień obramowania komponentów |
--color-base | Kolor tła strony |
--color-on-base | Domyślny kolor tekstu na tle bazowym |
--color-neutral | Neutralny kolor powierzchni |
--color-on-neutral | Kolor tekstu na neutralnych powierzchniach |
--color-primary | Podstawowy kolor marki |
--color-on-primary | Kolor tekstu na tle podstawowym |
--color-secondary | Kolor drugorzędny marki |
--color-on-secondary | Kolor tekstu na tle wtórnym |
--color-accent | Kolor akcentujący |
--color-on-accent | Kolor tekstu na akcentowanym tle |
--color-info | Kolor informacji |
--color-on-info | Kolor tekstu na tłach informacyjnych |
--color-success | Kolor sukcesu |
--color-on-success | Kolor tekstu na tle sukcesu |
--color-warning | Kolor ostrzegawczy |
--color-on-warning | Kolor tekstu na tle ostrzeżeń |
--color-error | Kolor błędu |
--color-on-error | Kolor tekstu na tle błędów |
Obliczone tokeny kolorów
Frutjam automatycznie oblicza te tokeny na podstawie zmiennych motywu głównego — nie ustawia się ich ręcznie. Są one dostępne do użycia w niestandardowym CSS.
Skala (50–950)
Każdy kolor generuje pełną 11-stopniową skalę odcienia. Zamień {color} na dowolną nazwę koloru.
| Zmienna CSS | Opis |
|---|---|
--color-{color}-50 | Najjaśniejszy odcień (mieszanka kolorów 4%) |
--color-{color}-100 | Bardzo jasny odcień |
--color-{color}-200 | Lekki odcień |
--color-{color}-300 | Odcień średnio jasny |
--color-{color}-400 | Lekki odcień |
--color-{color}-500 | Kolor bazowy (taki sam jak --color-{color}) |
--color-{color}-600 | Lekki cień |
--color-{color}-700 | Średni odcień |
--color-{color}-800 | Ciemny odcień |
--color-{color}-900 | Bardzo ciemny odcień |
--color-{color}-950 | Najciemniejszy odcień |
Miękkie & Aktywny
Warianty świadome stanu elementów interaktywnych, automatycznie dostosowujące się do jasnych i ciemnych motywów.
| Zmienna CSS | Opis |
|---|---|
--color-{color}-soft | Subtelnie przyciemnione tło dla miękkich wariantów |
--color-on-{color}-soft | Kolor tekstu do stosowania na miękkim tle |
--color-{color}-active | Przyciemniony/rozjaśniony odcień dla stanów najechania i aktywności |
--color-body | Obliczony kolor tekstu podstawowego (nieznacznie złagodzony w stosunku do w bazie) |
Przykład niestandardowego motywu
Zastąp tokeny root, aby utworzyć niestandardowy motyw. Frutjam automatycznie oblicza wszystkie skale i stany.
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); } |