title: “Design & colours” description: “How boulingua chooses a colour for each language, and why.” Link to heading
Every boulingua course shares one design system — the same navigation, the same typography, the same rhythm in light and dark. Within that frame each language carries one signature accent colour, so a course is recognisable at a glance without ever looking like a different product.
The rules Link to heading
A language’s accent must be:
- Flag-safe. The hue does not appear in that language’s national flag. Colour should signal which course you are in, not which country a language is spoken in — a language is not a nation, and several of these are spoken across many.
- At least 15° apart from every other accent on the OKLCH hue wheel, so two courses are never mistaken for each other.
- WCAG AA on white — 4.5:1 — because an accent is used for links and rules, not decoration.
- Not hub blue —
#1A73E8is reserved for this umbrella site and for anything that belongs to no single course.
Where the palette does not meet them yet Link to heading
These rules are the specification, and this section is measured from the same file the table below is printed from — so it cannot quietly stop being true.
Nothing. Every accent clears 4.5:1 on white and no two sit closer than 15° apart.
The palette Link to heading
18 languages.
| Code | Language | Accent | Hover | Dark | Dark hover | Status |
|---|---|---|---|---|---|---|
daf | German | ■ #0C7F9E | #006C89 | ■ #80CDEA | #AADDF1 | live |
efl | English | ■ #06881B | #007412 | ■ #83E883 | #ADF0AB | live |
fle | French | ■ #5C8000 | #4E6D00 | ■ #B8E474 | #CEEDA4 | live |
afl | Arabic | ■ #5C16C0 | #4B00A4 | ■ #967EE8 | #B6AAF1 | planned |
cfl | Chinese | ■ #382DC6 | #2D0EB1 | ■ #7B8AE7 | #A4B2F0 | planned |
ele | Spanish | ■ #008283 | #006F6F | ■ #7BE6E6 | #A8EFEE | planned |
gfl | Greek | ■ #C74B1F | #B23700 | ■ #E7977E | #EFBAA9 | planned |
ils | Italian | ■ #871EC1 | #7400AA | ■ #B97EE7 | #D0A9F0 | planned |
jfl | Japanese | ■ #8C7208 | #796100 | ■ #F3D77B | #F8E5A7 | planned |
lle | Latin | ■ #C72238 | #B10027 | ■ #E87F7E | #F0AAA7 | planned |
nsf | Norwegian | ■ #787900 | #676700 | ■ #DFE173 | #E9EBA3 | planned |
nvt | Dutch | ■ #008558 | #00724A | ■ #61EAAC | #9DF1C6 | planned |
pfa | Persian | ■ #9E6A00 | #885B00 | ■ #F2C380 | #F8D8AA | planned |
pfl | Polish | ■ #AA6322 | #975205 | ■ #F0B486 | #F6CDAE | planned |
ple | Portuguese | ■ #BA20C2 | #A400AC | ■ #DF7DE3 | #EBA8EC | planned |
rki | Russian | ■ #008471 | #007160 | ■ #6AE8CE | #A1EFDD | planned |
tfl | Turkish | ■ #C7236A | #B10059 | ■ #EB7D9F | #F2A9BD | planned |
ufl | Ukrainian | ■ #CA209A | #B30087 | ■ #ED7CC3 | #F4A8D5 | planned |
CEFR levels Link to heading
Independent of the accents and shared by every course, so a B1 badge means the
same thing everywhere: A #4CAF50 · B #1A73E8 (hub blue) · C #8E24AA.
Where these come from Link to heading
This page is generated. The colours live in one file — design/tokens.yaml in
the kit — from which the site CSS, the LaTeX
material templates, the accent registry and this table are all built. Adding a
nineteenth language is one entry there, not an edit in nineteen places.