A good dark theme is not just “invert the light one”. It is a set of small decisions that add up to something you can read for an hour without eye strain.

Avoid pure black

Deep charcoal (#1d1e20) is softer than #000 and lets cards sit above the background using nothing but a lighter grey. Contrast comes from layering, not from hard borders.

One accent, used sparingly

Pick a single calm accent — a soft blue works well — and reserve it for links and interactive states. Everything else stays in the greyscale.

RoleColour
Body#e5e7eb
Muted#9ca3af
Accent#64b5f6

Let whitespace breathe

Generous line-height and comfortable font size matter more than any colour choice. Text is the interface.