Foundations /
stableColors
7 semantic tones (primary/secondary/accent/info/success/warning/error) + surface tokens. Setiap tone punya pair light/dark + content color untuk text on-color.
Semantic Tones
Pakai tone berdasarkan makna, bukan warna. Bila brand berubah, satu update token cukup.
Primary
--color-primaryLight / Dark
#2D7BFF / #3B82F6Aksi utama, link, brand emphasis
Secondary
--color-secondaryLight / Dark
#F1F5F9 / #1E293BBackground subtle, neutral fill, surface alternatif
Accent
--color-accentLight / Dark
#06B6D4 / #22D3EEHighlight, callout, gradient pair dengan primary
Info
--color-infoLight / Dark
#0EA5E9 / #38BDF8Informational state, tooltip neutral
Success
--color-successLight / Dark
#10B981 / #34D399Confirmasi, success toast, status hijau
Warning
--color-warningLight / Dark
#F59E0B / #FBBF24Caution, pending state, perlu perhatian
Error
--color-errorLight / Dark
#EF4444 / #F87171Destructive, error message, validasi gagal
Surface & Text
Background, surface alternatif, text & border baseline.
App Background
--bg-app#F8FAFC / #070A13Background utama halaman
Surface
--bg-surface#FFFFFF / #0D1324Card, modal, panel
Text Main
--text-main#0F172A / #F1F5F9Body text, heading
Text Muted
--text-muted#64748B / #94A3B8Secondary text, label, caption
Border Subtle
--border-subtlergba(226,232,240,0.8) / rgba(30,41,59,0.7)Divider, border default
Interactive States
Primary tone punya derived state untuk hover & active. Auto-computed di Theme Builder.
Auto-derived hover/active
--color-primary-hover dan --color-primary-active di-derive dengan shade ±18/±36 dari primary base. Light mode darken, dark mode lighten.
Cara Pakai
Selalu pakai CSS variable, jangan hard-code hex.
/* ✅ Pakai token */
.my-button {
background: rgb(var(--color-primary));
color: rgb(var(--color-primary-content));
}
/* ❌ Hindari hard-code */
.my-button {
background: #2D7BFF;
color: #FFFFFF;
}