03: Culoarea
The colour wheel, the HEX, RGB and HSL systems, how to build a 3–5 colour palette and how to check contrast for accessibility.
Lesson 03 · Colour¶
What you will learn
- How to read the colour wheel and what colour schemes are
- The HEX, RGB and HSL systems — and why HSL is the most useful in practice
- The 60-30-10 rule for building a palette
- The difference between RGB (screen) and CMYK (print)
- How to check contrast and why it matters for accessibility
- How to create a palette in Figma and save it as styles
The colour wheel¶
The colour wheel arranges colours in the order in which they mix. Every colour scheme is read off it.
RED
RED-VIOLET RED-ORANGE
VIOLET ORANGE
BLUE-VIOLET YELLOW-ORANGE
BLUE YELLOW
BLUE-GREEN YELLOW-GREEN
GREEN
Warm colours (red → yellow): advance towards the viewer, energy, urgency, appetite. Cool colours (green → violet): recede, calm, trust, professionalism, technology.
The colour schemes¶
| Scheme | How it is picked | Effect | When to use it |
|---|---|---|---|
| Monochromatic | One colour, several lightnesses | Very coherent, calm, safe | When you do not trust your own choices |
| Analogous | 2–3 neighbouring colours on the wheel | Harmonious, natural, gentle | Posters, illustrations, "warm" brands |
| Complementary | 2 opposite colours on the wheel | Maximum contrast, energetic | Sports, promotions, warnings |
| Triadic | 3 colours 120° apart | Lively, balanced, playful | Materials for children, events |
| Split-complementary | One colour + the two neighbours of its opposite | Contrast without aggression | The safest choice for beginners |
Start monochromatic
If in doubt, take one single colour and work with 5 different lightnesses of it, plus a neutral grey and a single accent colour. It is almost impossible to get wrong and the result looks deliberate.
HEX, RGB, HSL¶
The same colour, three ways of writing it.
HEX — for copying¶
#F97316 — six hexadecimal characters: two for red, two for green, two for blue, each from 00 to FF (0–255).
This is the format you copy between Figma, CSS and Canva. It is not useful for thinking.
RGB — how the screen works¶
rgb(249, 115, 22) — the same colour. Screens add light: red + green + blue at maximum give white. This is called additive mixing.
The variant with transparency: rgba(249, 115, 22, 0.5) — the last number is opacity, from 0 (invisible) to 1 (opaque).
HSL — for thinking¶
hsl(25, 95%, 53%) — three values that match the way people talk about colour:
| Component | Range | What it means |
|---|---|---|
| H (hue) | 0–360° | The position on the colour wheel |
| S (saturation) | 0–100% | How intense it is; 0% = grey |
| L (lightness) | 0–100% | How light it is; 0% = black, 100% = white |
Why HSL makes your life easier
Want a darker version of your orange for a button's hover state? In HEX you have to guess. In HSL you subtract 10 from L: hsl(25, 95%, 43%). Done.
A whole palette is built by keeping H constant and varying L: hsl(25, 95%, 95%) for a very light background, hsl(25, 95%, 53%) for the main colour, hsl(25, 95%, 25%) for text on a light background.
In Figma, in the colour picker, the three-dot button lets you switch between HEX, RGB, HSL and CSS.
RGB vs. CMYK¶
This is the difference that ruins most printed posters.
| RGB | CMYK | |
|---|---|---|
| Where | Screens | |
| How it works | Adds light | Subtracts light (ink on paper) |
| Components | Red, Green, Blue | Cyan, Magenta, Yellow, Key (black) |
| Colour gamut | Wider | Narrower |
| White | Everything at maximum | The absence of ink (the paper) |
Fluorescent colours do not print
A bright neon green on screen (#39FF14) will come out of the press as a sad olive green. CMYK inks cannot reproduce the highly saturated colours of RGB.
What you do: if the work goes to print, avoid saturations above ~85% and check a printed proof before the main run. Figma works natively in RGB — for real CMYK you need a conversion step at the print shop.
The 60-30-10 rule¶
A balanced palette distributes colours in unequal proportions:
- 60% — the dominant colour. Usually a neutral: white, very light grey, or a very dark grey. This is the background.
- 30% — the secondary colour. Supports the structure: cards, bars, sections.
- 10% — the accent colour. Only for what must be pressed or noticed: the main button, a badge, an important number.
Example — this site's palette
- 60% — very dark zinc background (
#0D0D10) or white, depending on the theme. - 30% — text and card greys (
#27272A,#A1A1AA). - 10% — orange (
#F97316), used only for links, buttons and accents.
Notice that the orange appears rarely. That is why it works: if it were everywhere it would no longer mean "here".
The structure of a complete palette¶
For a serious project you need more than three colours:
| Role | How many | Example |
|---|---|---|
| Primary | 1 | The identity colour |
| Neutrals | 4–6 | From near-white to near-black |
| Accent | 1 | Opposite or complementary to the primary |
| Semantic | 3 | Success (green), warning (yellow), error (red) |
Do not use pure black and pure white
#000000 on #FFFFFF gives a harsh contrast, tiring over a long read. Use #111827 for text and #FAFAFA for background. The difference is small, but the eye feels it after 5 minutes of reading.
Contrast and accessibility¶
Roughly 1 in 12 men and 1 in 200 women have some form of colour blindness. Many more read on a phone, in sunlight, on a cheap screen. Contrast is not an aesthetic option.
The contrast ratio¶
It is measured as the ratio between the luminance of the text and that of the background, from 1:1 (identical) to 21:1 (black on white). The WCAG standard requires:
| Level | Normal text | Large text (≥ 24 px or ≥ 19 px bold) |
|---|---|---|
| AA (mandatory minimum) | 4.5:1 | 3:1 |
| AAA (ideal) | 7:1 | 4.5:1 |
How to check¶
- In Figma: the free Contrast or Stark plugin. You select the text and it shows the ratio instantly.
- In the browser: WebAIM Contrast Checker — paste the two HEX codes and it gives you the verdict.
The combinations that always fail
- Yellow on white (ratio ~1.5:1) — illegible
- Light grey on white (
#CCCCCCon#FFFFFF, ~1.6:1) - White text on light orange (~2:1)
- Blue on red — almost zero luminance contrast, it vibrates
Colour cannot be the only information¶
If in a chart the "sold" line is green and "unsold" is red, a colour-blind reader sees two identical lines. Always add a second signal: a label, a different shape, a dashed line, an icon.
The black and white test
Screenshot your work and turn it black and white (in Figma: a Saturation → -100 effect over the whole frame). If the information still reads, the design is robust. If it falls apart, you lean too hard on colour.
How to build a palette in Figma¶
- Pick the primary colour. Do not invent it out of nowhere — start from something: the school colours, a photo you like, an existing logo.
- Open coolors.co, lock the primary colour (the
spacekey generates variants) and pick 2–4 more that work with it. - Generate the neutrals: take the primary, drop saturation to 5–10% and vary lightness from 98% to 10%. You will get greys that "have" your colour, not dead greys.
- Check every text/background pair with the Contrast plugin.
- Save them as styles in Figma: select an element with that colour, in the right panel under Fill click the four dots → + → give it a name.
How to name colours¶
Do not name them after how they look
Blue is a bad name. When you change the blue to green a month from now, the style will still be called "Blue" but it will be green.
Name them after their role:
| Good name | Bad name |
|---|---|
brand/primary |
Orange |
brand/primary-hover |
Dark orange |
text/strong |
Black |
text/muted |
Grey |
surface/base |
White |
feedback/error |
Red |
The slash in the name automatically creates folders in Figma's style panel.
Colour psychology, briefly and with reservations¶
The associations are real, but cultural and contextual, not universal.
| Colour | Common association in Europe | Used by |
|---|---|---|
| Red | Urgency, passion, danger, appetite | Promotions, fast food, warnings |
| Orange | Energy, approachable, friendly | Action buttons, education |
| Yellow | Optimism, attention, cheap | Warnings, discounts |
| Green | Nature, safety, "go", health | Confirmations, ecology, pharmacies |
| Blue | Trust, calm, technology, corporate | Banks, social networks, software |
| Violet | Creativity, luxury, mystery | Premium brands, cosmetics |
| Black | Elegance, authority, expensive | Fashion, premium technology |
Mind the cultural context
White means purity in Europe and mourning in several Asian countries. Red is luck in China and danger in Europe. If your work addresses an international audience, check.
Exercises¶
Exercise 1 — The same colour in three systems¶
Take the colour #2563EB and write it in RGB and HSL. Then create a version 15% darker, using HSL.
Solution
- HEX:
#2563EB - RGB:
rgb(37, 99, 235)—0x25 = 37,0x63 = 99,0xEB = 235 - HSL:
hsl(221, 83%, 53%)
The darker version: subtract 15 from L → hsl(221, 83%, 38%), i.e. #1D4ED8.
In Figma: select the element, open the colour picker, click the format label (it says HEX) and switch to HSL. Change only the third value.
Exercise 2 — A 60-30-10 palette¶
Build a palette for a computer science club poster: one primary, four neutrals and one accent. Apply it to an A4 frame in 60-30-10 proportions.
Solution
A palette that works:
| Role | HEX | HSL | Where |
|---|---|---|---|
surface/base |
#0F172A |
hsl(222, 47%, 11%) |
Background — 60% |
surface/raised |
#1E293B |
hsl(217, 33%, 17%) |
Cards — 30% |
text/strong |
#F1F5F9 |
hsl(210, 40%, 96%) |
Headings |
text/muted |
#94A3B8 |
hsl(215, 20%, 65%) |
Secondary text |
brand/primary |
#F97316 |
hsl(25, 95%, 53%) |
Accent — 10% |
Contrast checks:
- text/strong on surface/base → 15.8:1 — passes AAA
- text/muted on surface/base → 6.4:1 — passes AA, not AAA. Acceptable for secondary text.
- brand/primary on surface/base → 5.9:1 — passes AA for normal text.
The typical mistake: using the accent on 40% of the surface. Then it is no longer an accent, it is a second dominant colour, and nothing stands out any more.
Exercise 3 — Fix three combinations¶
The following pairs fail the contrast test. Fix each one, keeping the hue (H) unchanged.
- Text
#FFD700on background#FFFFFF - Text
#FFFFFFon background#FB923C - Text
#9CA3AFon background#F3F4F6
Solution
1. #FFD700 on white = 1.6:1. Yellow cannot be text on white, full stop. Keep H = 51° and drop L from 50% to 30%: hsl(51, 100%, 30%) = #997A00, ratio 5.3:1. Passes AA.
2. White on #FB923C = 2.1:1. Either darken the background: hsl(27, 96%, 40%) = #C2560A, ratio 4.7:1. Or keep the light orange and use dark text: #431407 on #FB923C = 7.9:1. The second option is more pleasant visually.
3. #9CA3AF on #F3F4F6 = 2.4:1. Drop the text's L: #4B5563, ratio 7.3:1. Passes AAA.
Notice the pattern: in all three cases the solution was to increase the lightness (L) difference, not the hue difference. Colour contrast without luminance contrast helps nobody.
Mini-project: the same poster, three palettes¶
Take the mini-project from lesson 02 (the "movement" poster) and make three versions identical in form, different only in palette: one monochromatic, one complementary and one analogous. Check the contrast on each.
Solution
Monochromatic — blue:
background hsl(217, 91%, 96%), lines hsl(217, 91%, 25%), circle hsl(217, 91%, 53%).
Effect: calm, technical, coherent. Line/background contrast: 11.2:1.
Complementary — blue and orange:
background hsl(217, 30%, 12%), lines hsl(217, 60%, 70%), circle hsl(25, 95%, 53%).
Effect: energetic, the circle jumps out immediately. It is the most "event poster" of the three.
Analogous — blue, blue-green, green:
background hsl(190, 40%, 95%), lines hsl(200, 70%, 30%), circle hsl(160, 70%, 40%).
Effect: harmonious but soft — the circle does not stand out enough. That is the limit of the analogous scheme: it is beautiful, but it has low internal contrast.
The point of the exercise: the palette does not decorate the composition, it changes it. The same form communicates "technical", "energetic" or "calm" through colour alone. And if you need an element to jump out, the analogous scheme will give you trouble.
Summary¶
- The colour wheel gives the schemes: monochromatic, analogous, complementary, triadic, split-complementary.
- HEX for copying, RGB for screens, HSL for thinking and generating variants.
- RGB on screen, CMYK in print. High saturations do not print.
- 60-30-10: neutral dominant, structural secondary, rare accent.
- Do not use
#000000on#FFFFFF— it tires the eye. - Minimum contrast 4.5:1 for normal text, 3:1 for large text (WCAG AA).
- Colour cannot be the only information — add a label, a shape or an icon.
- Name styles by role (
brand/primary), not by appearance (Orange). - The black and white test tells you whether the design survives without colour.
Next step: → Lesson 04: Typography