Skip to content
4 min read

Kohra

How a theme came out of OKLCH, Todd Hido’s fog, and one lit window.

Colours are hard. I imagine even Rothko thought so on a bad afternoon. There are two ways to choose them, by eye and by rule, and both let you down. The first time I tried to build a palette by rule I asked for the same saturation across every hue. It held through the reds, the blues, the greens, and then it reached yellow and curdled. What came back was a dirty olive, the colour of a waiting-room wall. That was HSL's doing. I will come to that.

I started coding the week AI made it possible to pretend, like a lot of people who can't. The trouble is that sooner or later you have to open the file and look at the actual code, and that was worse than I expected. I told myself a different editor would help, and changed mine, which is the sort of thing you do to avoid the work the editor is for. It didn't help. But it led me to themes, and the themes were all wrong. Too much contrast or too little. Some looked like 1998. After another hour of bright saturated type on a screaming background I'd have sooner forked my eyes.

The world plainly did not need another theme. I made one anyway.

I began with Kepano's Flexoki, which I think is close to a perfect idea: take something real, oil paint, and turn it into a set of semantic colours. It is the longest I have ever stayed with a theme. But it didn't meet my register. It read as saturated to me, and saturation was the thing I was running from. That isn't a fault. Flexoki is built to be warm, to be read. I wanted something that would shut up and let me work.

So I worked from Todd Hido instead. His Homes at Night photographs are suburban houses in the dark, fog sitting on everything, and in each one a single window lit warm while the rest of the street goes cold blue-grey. It is almost the theme written out in advance. I took the gloom, and I like gloom, which I won't pretend is normal. What I left was Hido's sadness, the suburban-American kind those windows carry, which is his. I read the colours off the surface and let Hido keep the rest.

A suburban house at night in fog, a single window lit warm against cold blue-grey snow and bare trees.
Todd Hido, #2423, from the Homes at Night series. toddhido.com

Kohra means fog. I was choosing it in May in Delhi at forty degrees, about as far from fog as a person can sit.

Here is the part I owed you about HSL. It chooses colours by numbers that suit a computer rather than an eye, so two of them can share a lightness value and look nothing alike, and a yellow doesn't darken cleanly, it slides off into that green. I fought it for a week and then learned OKLCH, which is the same arithmetic arranged around how colour is actually seen. There I could hold the lightness still and the hue stayed where I left it. The olive went away.

After that it stopped being a matter of taste and became a set of rules, which is the only reason it holds. The neutrals sit at a chroma of 0.007, almost no colour at all, leaning faintly blue at hue 240 so the greys read cool instead of dead. There is an amber, kept well back. And almost nothing is allowed to glow. That last rule did most of the work, because most themes are loud, every keyword wanting its turn, and the result is a fairground. Rules instead of taste, since taste at midnight is how you end up with the fruit bowl.

Which leaves the one window. Every editor needs a colour to tell you something is wrong, the red under a mistake, and in a theme where nothing else glows that is the only thing that can. So I let it. The diagnostics colour is the single token allowed to break the chroma ceiling and carry real saturation, because it is the one thing you actually need to see. Everything else recedes, so that when the editor wants you it only has to clear its throat. The lit window in Hido works because the rest of the street has gone dark. Most of those houses are empty. You look at the one with the light on.

It runs on five editors now, VS Code, Cursor, Zed, Ghostty and Sublime, out of one Figma file. That took a while and I don't think about it at all, which was the point. The colours took a week and somebody else's fog.

The full system, every bucket and coordinate, is written out as a case study. Kohra is open source on GitHub.