a dark theme with São Paulo as its reference
The sodium lamp turns the whole city this colour.
Exposed concrete, the free span of the MASP, the drizzle before the rain. Three dark flavours built on one rule: every colour pairing is measured before it ships, never eyeballed.
- 3 flavours all dark, by decision
- 23 colours each named after the city
- 69 contrast pairs measured at build time
- 6 ports published, installable today
one palette, three cities
Same city, three ways of looking at it
The flavours differ in hue and chroma, never in brightness — so nothing gets easier or harder to read when you switch. Try it: the control below retints this entire page.
- Noite Paulista
- The city at 3 a.m. A blue-violet dark, with the sodium street lamp burning warm on top of it.
- Garoa
- The same window, seen through the drizzle. Flat grey — the garoa does not cool the city down, it fades it out.
- Pico do Jaraguá
- The same night, seen from the highest point in the city. Near-black surfaces, with the forest left to the accents — and the red-and-white tower lit at the summit.
~/sp-night (main) ❯ cat theme.lua -- the sodium lamp that turns the whole city this colour local palette = require("sp_night.palette") function M.setup(opts) if vim.o.background ~= "dark" then return nil, "dark only, by decision" end end ~/sp-night ❯ spn check ✓ contrast every pairing measured, AA on every surface ✓ accents separation ΔE ≥ 0.10 or ΔL ≥ 0.04
the palette
23 colours, named after the city
5 surfaces, 4 levels of text, 8 accents and their 6 bright pairs — each one carrying the name of the thing in São Paulo it came from.
contributors
Built by people, in the open
The palette, the engine, every port and this site are public. Adding a port means mapping one app's config keys onto roles that are already decided — and the list below is who has done it so far.