Illustration

20 single-colour line scenes for empty, error and success states.

v1.0.0·Updated Jul 10, 2026 · 23:00
Live Demo — Fully Interactive
20 single-colour line scenes for generic empty, error & success states
not-found
no-results
empty
error
success
offline
no-messages
no-notifications
no-files
no-data
no-images
upload
no-access
maintenance
coming-soon
no-connection
cart-empty
welcome
complete
no-comments
Configuration
Scene
Size
Surface
<Illustration name="not-found" size={120} />
Behavior — The Engineering Contract
PropTypeNotes
namestringOne of 20 generic scenes (not-found, no-results…)
sizenumber = 120Rendered px; the scene is a 200×160 box
titlestringPresent ⇒ role=img & labelled; absent ⇒ aria-hidden

An illustration holds no state and fires no events — it's inline SVG, one colour. Because every stroke is currentColor, the same scene reads on a dark or a light surface with no second asset. Keep the set small: 20 generic scenes cover most empty, error and success moments.

Anatomy
1Bounding boxEvery scene is composed inside the same 200×160 frame.
2Stroke2px in currentColor — one colour, never filled.
3Round cap & joinSoft ends match the icon family at a larger scale.
Do's and Don'ts
✓ Do

Draw once in currentColor and let the surface decide. One asset, both themes.

✕ Don't

Don't fill the shapes solid. Illustrations are line art, like the icons.

✓ Do

Reach for a generic scene. 20 cover most empty, error and success states.

✕ Don't

Don't colour parts individually. Illustrations are a single colour.

In context: Examples
A · Empty state
No projects yet

Anchoring a first-run, zero-data screen.

B · 404 page
Page not found

Softening a dead end without alarming the reader.

C · On a light surface

The same scene, dark strokes — no separate light asset.

Measurements & Tokens
TokenValueRole
--illus-box200 × 160The viewBox every scene is drawn in
--illus-stroke2pxLine weight, matching the icon family
--illus-caproundLine-cap and line-join
--illus-colorcurrentColorSingle colour — inherits the surface's text colour
--illus-size80 · 120 · 160The three rendered steps
--illus-count20 scenesGeneric empty / error / success states
Code
<figure class="o-illus" aria-hidden="true">
  <svg viewBox="0 0 200 160" width="120" height="96"
       fill="none" stroke="currentColor" stroke-width="2"
       stroke-linecap="round" stroke-linejoin="round">
    <circle cx="100" cy="80" r="40" />
    <polyline points="82,82 95,96 120,64" />   <!-- e.g. success -->
  </svg>
</figure>