01 Languages & frameworks
CSS
Modern CSS does what a build step used to, which means one fewer thing between you and the page.
- Role
- Styling
- Licence
- Open standard
- Since
- 1996
- Upstream
- Project site ↗
CSS is on this list as a deliberate statement rather than a formality. We write it directly, and we do not reach for a framework to do it.
Why we still choose it, plainly
Because the language grew up. Custom properties made design tokens native, so a
palette lives in one place and themes without a rebuild. Grid and flexbox
replaced a decade of layout workarounds. clamp() made fluid typography a
one-liner. Container queries, :has(), cascade layers and nesting have absorbed
most of what a preprocessor was for.
The practical result is that a bespoke stylesheet is now smaller and clearer than the configuration file for a framework that generates one. This site’s entire design system — light and dark themes, the type scale, the grid, every component — is around 30 kB of CSS with no runtime and no utility classes in the markup.
How we write it
Tokens on :root, a handful of layout primitives, and components named after
what they are. Sass survives only for file organisation and nesting; nothing we
write depends on it. Dark mode is a token redefinition rather than a parallel
stylesheet, and the markup stays readable, because HTML that describes its
content outlives HTML that describes its appearance.
The honest limit
Writing CSS well requires someone who knows CSS well, and a utility framework genuinely does help a team without that person hold a large codebase together. We are making a trade: more skill required, far less machinery, and a stylesheet that will still make sense to whoever inherits it.