Case StudiesProductsBlogOpen SourceBook a call

sparkstone/css

I Finally Built the CSS Framework I Wanted

I’ve been using Pico.css for years on a lot of projects. Liveframe.app is even built with it. But I’ve had to hack on it quite a bit to get adjustable per-user theming, and it ends up being kind of heavy when you include all the colors. I wanted something a little more dynamic, and I’ve finally built it.

It’s called @sparkstone/css, and it’s built for people like me: folks who want semantic HTML, zero bloat, and a color system that actually makes sense when you start tweaking things. (@sparkstone/css on npm)

This isn’t meant to compete with the big players. It’s not Tailwind. It’s not Bootstrap. It’s what I needed, and maybe you do too.


Why I Love Pico.css (And What I Needed More Of)

I’ve used Pico on a dozen projects. I love the simplicity of it, and how you can just start building things and rarely even need to reach for classes to adjust stuff. Honestly, I tried just making a fork of it to start with — Pico has almost everything I want. But over time, I kept running into the same issues:

So after I realized that hacking on Pico was going to be harder than starting from a new foundation, I started designing.

Enter @sparkstone/css

This project is heavily inspired by Pico, but rebuilt from scratch around oklch(). If you’ve ever struggled to tune your colors across light and dark mode, or wanted a theme system that actually reflects your palette’s structure — you’ll get why this matters. After I got the color system working, I built a page and put it side by side with Pico to get it close — like I said, I still love Pico.

Here’s how it works:

/* these are the defaults */
:root {
  --color: rebeccapurple;
  --primary-color: blue;
  --accent-color: oklch(from var(--color) l c calc(h + 180));
  --error-color: maroon;
}

That’s it. The rest cascades from there. Text colors, surface backgrounds, borders, shadows — all tuned based on perceptual lightness and chroma. You don’t need to invent a palette. You just pick a color, and everything adjusts accordingly.


What You Get

There’s no runtime. No JS required for the styles. Just smart CSS.


Try It Live

I put together a docs site using the framework itself:

https://sparkstonepdx.github.io/css/docs

The docs include:

Everything is copyable and live-styled with your chosen theme.


Install It

pnpm add @sparkstone/css

Then import it however you like:

// scss (for full control)
import '@sparkstone/css/src/theme.scss';

// or plain css
import '@sparkstone/css/theme.css';

I Made This For Me (But It’s for all of us)

I’ve spent years building local-first, minimal, durable tools, after outgrowing a decade of chasing the new shiny. Always reaching for libraries that almost worked the way I wanted. This one finally does.

If you’re like me, and you want your CSS to feel like it’s helping, and not just there — I think you might like it too.

— Adam Founder @ Sparkstone

This remind you of a problem you've been dealing with?

I'd be happy to discuss it with you and see if it's something we could turn into a solution.

Book a call

Newsletter

Subscribe to my newsletter to be the first to hear about what I do next