Qazana Strata · v0.24 · seven kits, one foundation

Design once.
Theme everything.

Strata is a framework-agnostic design system built on three tiers of tokens — primitive, semantic, component. Link a stylesheet, pick a scheme, and every surface from landing page to checkout re-skins itself.

No build step · vanilla CSS + data-attribute JS · dark, light and aurora schemes · RTL-ready · MIT-licensed.

index.html
<!-- one foundation, any stack -->
<link rel="stylesheet"
      href="@qazana/strata/site">
<script type="module"
        src="@qazana/strata"></script>

<html data-theme="aurora">
  <button class="btn btn-primary">
    Ship it
  </button>
soniq8watchinsyncpesanaveloxarmemoralumeiraqazana.net
7composable kits
3schemes
0build steps
100%token-driven
Why Strata

Everything is a token, so everything is themeable

Components never hardcode a colour, radius, space or duration. One override file re-skins an entire product.

Token-driven theming

Semantic names — --primary, --danger, --surface — with RGB channel twins, so alpha tints re-tint with the brand: rgb(var(--primary-rgb) / .12).

No build step

Vanilla CSS and data-attribute JS. Link the stylesheets, add one script, ship. The same files power vanilla, React + Tailwind and Ember apps today.

Accessible by default

Keyboard-operable components, :focus-visible rings, sensible ARIA, and every animation honours prefers-reduced-motion.

RTL in one attribute

Logical properties throughout plus targeted refinements — <html dir="rtl"> mirrors sidebars, drawers, timelines and form addons.

Density axis

Compact mode is orthogonal to colour: control sizing flows through density tokens, so dense admin tables combine with any scheme.

Render harness

A Playwright harness screenshots every demo in every scheme and gates on regressions — dead tokens, contrast flips and silent SVG failures included.

Foundation

Three strata, one source of truth

Primitive steps feed semantic roles, semantic roles feed component tokens. Change a layer and everything above it follows — that layering is what "Strata" names.

  • Fluid type scale: --text-2xs to --text-6xl with clamped display sizes
  • Semantic roles: --fs-h1, --surface-sunken, --on-primary
  • Component hooks: --btn-pad-y, --cell-pad-x drive density
  • Mirrored in tokens.json for Figma via Tokens Studio
themes/your-product.css
/* rebrand every kit at once */
:root{
  --primary:#3ddc97;
  --primary-rgb:61 220 151;
  --on-primary:#03190f;
  --accent:#c084fc;
  --accent-rgb:192 132 252;
}
Theming

A brand is eight lines of CSS

Override only the tokens that differ. Buttons, charts, focus rings, soft fills — every tint derives from the channel form, so one file restyles seven kits. This page ships its own scheme, Aurora; try them live:

The kits

Load only what the page needs

Each kit is scoped, collision-free, and themed identically because they all stand on the same tokens.

/app

App

In-product UI — buttons, full form coverage, tables, charts, modals, toasts, tabs, an admin shell and error pages.

/site

Site

Landing and marketing — nav, hero, feature grids, spotlights, pricing, testimonials, FAQ, CTA bands. This page is built with it.

/content

Content

Blogs and long-form prose: article typography, callouts, code blocks, author bios.

/auth

Auth

Sign-in, sign-up and reset flows with OAuth buttons and split layouts.

/media

Media

Video and audio players, embeds, share bars and profile cards.

/commerce

Commerce

The full funnel — product grid, PDP gallery, variant pickers, cart, checkout steps and order summary.

/email

Email

Transactional and newsletter templates — table layout, inlined CSS, palette baked from the tokens.

Across the family

Seven products, one design language

We rebranded soniq8's entire app surface by editing one theme file. Charts, focus rings, even the toasts picked up the green.

S
soniq8Music intelligence

Strata's tokens map straight into our Tailwind config. React components and the marketing site finally agree on what "primary" means.

W
watchinsyncReact + Tailwind

Dense finance tables wanted compact mode, not a new design. The density axis gave us that without touching a single component.

P
pesanaPayments, Ember
FAQ

Questions, answered

Do I need a build step?

No. Link the tokens and a kit stylesheet, add js/qazana.js, and you're done. Behaviours attach via data-* hooks, so they work with any framework's rendered DOM.

How do schemes and themes differ?

Schemes (data-theme="aurora", dark-knight, desert-dunes) flip the whole palette and set color-scheme so native controls match. Product themes are small token-override files layered on top — brand colour, fonts, nothing else.

Can I add my own scheme?

Yes — override the differing tokens under :root[data-theme="your-id"] and add the id to any data-theme-toggle list. The Aurora scheme on this page is exactly that: one extra CSS file.

What stops the kits from colliding?

Every kit is scoped under a root class (.site, .blog, .media…) and wrapped in @layer qazana, so your own unlayered CSS always wins without specificity battles.

How are regressions caught?

A Playwright render harness screenshots every demo in every scheme and fails on dead tokens, broken contrast flips, page errors and SVGs that silently render none.

Build your next surface on Strata

One foundation, seven kits, three schemes. Install the package and copy the quick-start below.

Browse the kits