reskin it, do not fork it
no component in usva. contains a colour. every one of them consumes a role: surface, accent, danger. a theme is nothing but a block of variables that says what those roles mean. that is the whole mechanism, and it is why 3 very different looking themes run the same components with zero component changes.
use a theme that ships
import the theme CSS and put its name on any element. it cascades, so <html> themes the app and a <section> themes one region.
<section data-theme="sisu">
{/* this region is sisu, whatever the rest of the page is */}
<Panel title="requests" />
</section>write your own
a theme is one selector and a list of roles. override the ones you care about, inherit the rest.
[data-theme="brand"] {
--usva-bg: #07110f;
--usva-surface: #0d1a17;
--usva-ink: #e8f2ef;
--usva-muted: #9db3ac; /* must still clear 4.5:1 on bg and surface */
--usva-faint: #35514a; /* decoration only, so 2:1 is fine here */
--usva-accent: #35e3a4;
--usva-accent-alt: #ffb454;
--usva-border: #1c2a26;
}<html data-theme="brand">bg is not just a colour, it is the ground
the one role that does more than paint. every atmosphere reads bg to decide what material it is: on a dark ground it emits light, on a light one it stains like pigment soaking into clay. the same component, two materials, decided by one variable you set.
and some of them have no light-ground form at all. kuulto, hehku, loimu, kajastus are light thrown into a void, and a void is what they need. give them a pale bg and they render nothing rather than render badly. that is deliberate, and it is worth knowing before you wonder where your hero went.
you can always say which you meant with mode, but the default reads the ground, and the default is usually right.
the two constraints
keep ink and muted above 4.5:1 against bg, sunken, surface and surface-2. every component assumes it. and keep faint decorative: it is allowed to be quiet precisely because nothing depends on it being read. the full table is in the color chapter.
when forking is the right call
if what you want is a different DOM or a different behaviour, tokens will not get you there and you should not try. copy the source in from the registry and own it. that is the second distribution, and it exists for exactly this.