Browse documentation
On this page
Customization
Cirth is CSS first. Every colour, space, radius, shadow and font is a
--cirth-* custom property, and the supported way to change one is a rule
in your own stylesheet, loaded after Cirth. No Sass, no build step, no
rebuild.
<link rel="stylesheet" href="dist/cirth.min.css">
<link rel="stylesheet" href="your-theme.css">
/* your-theme.css */
:root {
--cirth-primary: #2563eb;
}
That one line is a worked example rather than a teaser: it moves the accent everywhere it is used — links, focus rings, the filled button, its hover, the underline tint, the checkbox mark, the switch, the range thumb — because those are derived from it rather than listed alongside it. The next section is about why, because it is the thing that makes the rest of this page short.
How the token system works #
Cirth's tokens are not one flat list. There are five kinds, and knowing which one you are looking at tells you what will happen when you set it.
Inputs #
A small set of tokens that other tokens are built from. --cirth-primary
is the clearest one, and the status trio — --cirth-error,
--cirth-success, --cirth-warning — behaves the same way. Setting an
input is the cheapest possible change: everything downstream follows.
:root {
--cirth-error: #b91c1c;
}
That moves the invalid field border, the border it takes while you are
typing in it, the <del> ink, the low reading on a <meter>, and the tint
a status surface would sit on. You do not have to know which of those
exists to retune them together.
Derived tokens #
Tokens computed from an input, at runtime, by the browser. They are written as relationships:
--cirth-primary-active: color-mix(in oklch, var(--cirth-primary) 83.5%, black);
--cirth-primary-underline: oklch(from var(--cirth-primary) l c h / 50%);
You can set a derived token directly, and sometimes you should — that is
how you break a relationship on purpose. The playroom preset does exactly
this so its buttons brighten on hover instead of darkening, which no
proportional darkening could produce. What you should know is that doing so
opts that token out permanently: it stops following the input, and a later
change to the accent will leave it behind.
Slots #
A handful of names are not theme settings at all. They are the variables a component paints through, and components rebind them constantly:
--cirth-background-color · --cirth-color · --cirth-border-color ·
--cirth-box-shadow · --cirth-underline · --cirth-font-size ·
--cirth-font-weight · --cirth-line-height · --cirth-letter-spacing ·
--cirth-text-decoration
--cirth-color is declared on the page, and then again on every heading,
on a button, inside a dropdown, on a form field — each time pointing at the
token that element should use. Setting it at :root changes the page
default and nothing else, because everything else was already given its own
value.
That is worth stating plainly because it is the one place where an override can look like it silently did nothing:
:root {
--cirth-color: rebeccapurple; /* body text turns purple */
}
/* headings do not: they are given --cirth-h1-color and friends */
If you want the headings too, set the tokens the headings actually read
(--cirth-h1-color … --cirth-h6-color). The reference at the end of this
page marks every token with its kind, so you can tell at a glance whether
you are setting a value or a slot.
When you need to refer to the page itself, use the two page roles. They are values, not slots, and no component is allowed to shadow either of them:
--cirth-canvas— the page surface. Use it for an opaque background on a control, or a tint mixing toward the page.--cirth-background-colordefaults to it.--cirth-ink— the page text colour. Use it wherever you need the ink the document is set in rather than the ink of whatever you happen to be inside.--cirth-colordefaults to it.
The distinction matters most inside a <button>, a link, an <input> or a
heading, because each of those rebinds --cirth-color for its own subtree.
A custom control built on <button> — a tab, a toolbar, a chip — that
reaches for --cirth-color gets the button's on-surface ink, which on a
button that has dropped its fill is white on white. Reach for
--cirth-ink instead and you get the page's ink, whatever the theme is.
--cirth-contrast-text is not the same thing: that is maximum-contrast ink, the
role the .contrast variant is built on, not the ink of body text.
Roles #
Standalone semantic settings that a component reads directly. A role does
not promise to drive a family of other tokens: --cirth-modal-max-width,
--cirth-code-color, and --cirth-form-element-border-color each configure
one responsibility. Set one when that responsibility is exactly what you
want to change.
Scales #
The raw ladders: --cirth-space-*, --cirth-radius-*,
--cirth-font-size-*, --cirth-border-width-*, --cirth-duration-*.
Every step exists whether or not the library uses it, so picking one is the
same exercise wherever you are. You will usually reach for the role token
that sits on top of a scale — --cirth-spacing rather than
--cirth-space-5 — but the steps are there when you want to move one
component without moving the rest.
Start here #
Four tokens carry most of a retheme. If you change nothing else, change these.
| Token | What it moves |
|---|---|
--cirth-primary |
The whole accent: links, buttons, focus rings, controls |
--cirth-canvas |
The page surface, and anything that tints toward it |
--cirth-font-family |
Body text, and every control that inherits it |
--cirth-border-radius |
Every radius, including the ones derived from it |
The plain preset is those first two plus three role choices, and nothing
else — see
Colors for what it looks like. It exists partly to prove the
point: a coherent, accessible, light-and-dark theme in five declarations.
Here is a custom accent applied live, which is two declarations — the pair and a radius — over the build this page is already using:
Show HTML
<style>
/* Two declarations, because the accent is an input: the fill, the hover,
the focus ring and the underline tint all derive from --cirth-primary.
The pair covers both schemes at once — light-dark() is resolved where
the token is used, so this holds inside a forced-scheme subtree too.
The light half is darker than a naive rose (#e11d48 measures 4.36:1 on
the page surface, below AA) because it has to read as text, not only
as a fill. */
.demo-brand {
--cirth-primary: light-dark(#c81e42, #fb7185);
--cirth-border-radius: 9999px;
}
</style>
<div class="demo-brand">
<button type="button">Custom primary</button>
<button type="button" class="outline">Outline</button>
<button type="button" class="ghost">Ghost</button>
<p><a href="#">A link picks up the same override.</a></p>
</div>
Colour #
The accent #
--cirth-primary is the input. These follow it, and you do not normally
set them:
| Token | Relationship |
|---|---|
--cirth-primary-text |
The accent as text: links and quiet controls |
--cirth-primary-surface |
The filled surface. Same as the accent in light; darker in dark |
--cirth-primary-border |
The edge of that filled surface |
--cirth-primary-active |
Active text and quiet-control edges; darker in light, lighter in dark |
--cirth-primary-surface-active |
The filled surface, one step further |
--cirth-primary-border-active |
The active edge of that surface |
--cirth-primary-underline |
The accent at 50% alpha |
--cirth-primary-underline-active |
The underline while its link is active |
--cirth-primary-focus |
The accent at 75% alpha — the focus ring |
--cirth-primary-on-surface |
The text that sits on the accent |
--cirth-primary-on-surface is the one to check when you pick an unusual
accent. It is white by default, which is right for most accents and wrong
for a light one — a pale yellow accent with white text on it is
unreadable. It is a plain value rather than a derivation because choosing
between light and dark text is a decision, not a mix. A relative-color
threshold was tested across 936 accents: 10 results missed 4.5:1 and it
chose the worse of black and white in 14 cases, concentrated around
cyan–teal. The exact contrast-color() decision is outside Cirth's browser
floor, so the role remains explicit until the platform can choose reliably.
A future theme generator can make the same choice before it emits a theme.
:root {
--cirth-primary: #fbbf24; /* a light amber */
--cirth-primary-on-surface: #1c1917; /* so the label stays readable */
}
The name now says the role before it says the state: text, surface,
border, underline, focus, and on-surface, with -active appended
where a state needs another value. That is the same vocabulary the status
families use below, rather than the former mix of background, hover and
inverse.
--cirth-secondary-text and --cirth-contrast-text anchor the other two
colour groups, with the same shape. They are roles rather than inputs: the
default theme chooses their neutral and maximum-contrast values directly.
.secondary and .contrast on a button or link swap which group it reads
from; .outline and .ghost keep the group and drop the fill. See
Button.
Status colours #
Three inputs, each driving four roles:
| Role | Used by |
|---|---|
--cirth-error |
The solid reading — a worst-band <meter> and the .danger button fill |
--cirth-error-text |
<del>, and status text on the page |
--cirth-error-border |
An [aria-invalid="true"] field |
--cirth-error-active |
That field while it has focus |
--cirth-error-surface |
A tint to sit status content on |
--cirth-success and --cirth-warning are identical in shape. A <mark>
does not imply warning: its background is derived from --cirth-primary, so
highlighted evidence follows the chosen accent while status content stays on
the explicit *-surface families.
Status hues are deliberately not fixed constants. If your brand overlaps a conventional status hue, move the status family rather than avoiding the brand — what has to stay true is that the two remain distinguishable, and that state is never signalled by colour alone (WCAG 1.4.1). Cirth's own validity styling pairs colour with an icon for that reason.
Surfaces #
| Token | What it is |
|---|---|
--cirth-canvas |
The page surface |
--cirth-ink |
The page text colour |
--cirth-code-background-color |
A recessed band: <pre>, inline <code> |
--cirth-form-element-background-color |
A field at rest |
--cirth-card-sectioning-background-color |
A card's header and footer band |
--cirth-card-background-color |
An <article>; a dropdown and a popover follow it |
--cirth-form-element-active-background-color |
A focused field; rises back to the canvas |
--cirth-muted-color |
Subordinate text |
--cirth-muted-border-color |
Hairlines: tables, cards, blockquotes |
--cirth-canvas and --cirth-ink are the two inputs in this family — the
page's surface and the page's ink. Set either and the tokens that alias it
follow: --cirth-background-color and the surface ladder from the canvas,
--cirth-color and the component inks (accordion summary, dropdown,
popover, the <kbd> fill) from the ink. The others are runtime
relationships: code is the deepest recess, the resting field sits between it
and the canvas, the band and card add lightness, and a focused field rises to
the canvas. Dropdown and popover alias the card because they are floating
sheets. Overriding any derived token directly still breaks its relationship
on purpose.
The ladder preserves the canvas hue and chroma, so warm paper stays warm, Plain becomes neutral, and Playroom carries its violet temperature without restating a parallel scale. Both schemes now tell the same semantic story:
light: code 95.5 < control 96.6 < canvas 97.4 < band 98.3 < card 99.2
dark: code 18.2 < control 19.4 < canvas 20.2 < band 22.7 < card 24.2
A single --cirth-canvas override therefore moves card, form, code, dropdown,
and popover in light, dark, and forced-theme subtrees. Plain uses that one
surface input; it does not enumerate the ladder.
Light and dark #
Cirth ships both schemes. The scheme follows the operating system, and
data-theme="light" or data-theme="dark" on any element forces one for
that subtree.
<html data-theme="dark">
A :root override applies to both schemes, and it applies everywhere —
including inside a subtree that forces one:
:root {
--cirth-primary: #2563eb;
}
When light and dark should differ, give the token both values at once with
light-dark():
:root {
--cirth-primary: light-dark(#2563eb, #93c5fd);
}
This is the same shape Cirth uses internally. The pair is resolved where the token is used, against the colour scheme in effect at that point, so one line covers the page and any widget that forces its own scheme.
You can still target the scheme selectors directly. They are more specific
than a plain :root, which makes them the tool for changing one scheme
without touching the other:
:root:not([data-theme="dark"]) {
--cirth-primary: #2563eb;
}
[data-theme="dark"] {
--cirth-primary: #93c5fd;
}
For a value that should hold everywhere, prefer the pair: it is one line, and it cannot fall out of step with itself.
data-theme in scoped builds #
The builds differ in where they look for the attribute.
- Unscoped builds respond to
data-themeon any ancestor. - Scoped builds only look at the
.cirthelement itself, or elements inside it.<html data-theme="dark">around a.cirthwidget has no effect, because every generated selector is anchored to the wrapper.
If you embed a scoped widget in a host page that manages its own dark mode, mirror the host's choice onto the wrapper:
<div class="cirth" data-theme="dark">…</div>
Increased contrast #
Cirth carries a prefers-contrast: more pass that strengthens inks,
hairlines and focus rings. Your overrides load after it, so a token you set
unconditionally will win there too — which usually means the preference
stops working for that token.
/* your accent, in both modes */
:root {
--cirth-primary: #2563eb;
}
/* and a stronger one where the user asked for it */
@media (prefers-contrast: more) {
:root {
--cirth-primary: #1e3a8a;
}
}
Both presets do this, and it is worth copying if you set colours at all.
Typography #
:root {
--cirth-font-family: Inter, system-ui, sans-serif;
--cirth-font-family-display: Inter, system-ui, sans-serif;
}
--cirth-font-family is body text and every control that inherits it.
--cirth-font-family-display is headings — it points at the serif stack by
default, which is part of Cirth's own identity; setting it to
var(--cirth-font-family) is how both presets make headings match the body.
Cirth loads no webfonts. If you want one, load it yourself and point the token at it afterwards:
<link rel="stylesheet" href="https://your-cdn.example/inter.css">
<link rel="stylesheet" href="your-theme.css">
The scale runs --cirth-font-size-xs through -7xl. h4–h6 read steps
from it directly; h1–h3 are fluid and read their clamp bounds from it,
so moving a step still moves the heading:
:root {
--cirth-font-size-6xl: 2.25rem; /* h1 stops growing sooner */
}
The shipped ladder is 44 / 32 / 24 / 20 / 18 / 16 at the default root size. If you want display type beyond that, ask for it on the element rather than moving the scale everyone else reads:
/* a campaign page, opting in through the slot every heading resolves
through — no second API, and the rest of the site keeps product scale */
.hero h1 {
--cirth-font-size: clamp(2.75rem, 2rem + 1.9vw, 3.5rem);
}
--cirth-line-height, --cirth-font-weight and --cirth-letter-spacing
are slots: set at the root they change the page default, and elements that
were given their own value keep it. The two tracking steps have consumers —
--cirth-letter-spacing-tight on h1/h2, --cirth-letter-spacing-snug
on h3/h4 — so overriding one moves the headings that read it.
--cirth-form-label-font-weight is separate so labels can be heavier than
the prose around them.
Spacing and layout #
--cirth-spacing is the flow knob: it times the space between things
and the padding of the document blocks that are made of running text. Set it
at the root, which is where the tokens that derive from it are declared:
:root {
--cirth-spacing: 0.75rem; /* a denser interface */
}
What follows the knob #
| Token | What it moves |
|---|---|
--cirth-typography-spacing-vertical |
Space between paragraphs, lists and tables |
--cirth-block-spacing-vertical |
Space between landmarks and sections |
--cirth-grid-column-gap, --cirth-grid-row-gap |
The gaps in a .grid and a .row |
Nothing else has to be restated to move with it. A few document blocks read
--cirth-spacing directly for the same reason: <pre>, <blockquote> and
table cells are running text with a box around it, so their padding is part
of the same rhythm.
What deliberately does not #
| Token | Why it is separate |
|---|---|
--cirth-form-element-spacing-vertical / -horizontal |
The one-line control height is computed from this pair, and that height carries WCAG 2.5.5's 44px target size. A density knob must not be able to walk a target size, so control padding is named on the space scale and overridden directly. |
--cirth-block-spacing-vertical / -horizontal on <article> |
A card's padding is a container decision. It is pinned one step above the controls' gutter on the same scale — --cirth-space-5 against --cirth-space-4 — so a container stays roomier than its contents at every setting of --cirth-spacing. Derived from the knob instead, the two would cross the first time a preset tightened it. |
--cirth-container-gutter |
Page gutters follow the container, not the knob: opening a wide shell up must not also enlarge cards, controls and grid gaps. |
To change control or card density, set those tokens. They are public, they are documented in the reference below, and overriding one of them is not a workaround — it is the second half of the same contract.
| Token | What it moves |
|---|---|
--cirth-container-max-width |
The .container measure |
--cirth-grid-min-column |
When .grid wraps to a new row |
--cirth-modal-max-width |
The fluid modal card's upper width bound |
A note on control height: Cirth's controls are at least 44px tall — WCAG
2.5.5's target size. Button, input, select and one-line textarea share one
runtime formula made from --cirth-font-size-md, line-height, vertical
padding and border. Text inputs use that result as their fixed one-line
height; controls that may legitimately grow use it as a floor. Changing the
padding therefore changes their internal proportions without letting an
equivalent control fall out of alignment. Navigation opts down to a 40px
band — comfortably clear of WCAG 2.5.8's 24px AA minimum — because a nav row
is compact by design and a header should not have to fight the framework for
a height.
Borders, radii and outlines #
:root {
--cirth-border-radius: 0; /* square corners everywhere */
}
--cirth-border-radius is the single knob. The per-component radii are
derived from it — a card is softer, a checkbox and inline code are capped
so they never read as circles — so zeroing it zeroes them too.
| Token | Relationship |
|---|---|
--cirth-card-border-radius |
--cirth-border-radius × 1.5 — the container/control pair |
--cirth-checkbox-border-radius |
Capped at --cirth-radius-sm |
--cirth-code-border-radius |
Capped at --cirth-radius-sm |
--cirth-radius-pill |
Untouched by the knob — switches stay pills |
--cirth-border-width and --cirth-outline-width read steps from one
stroke ladder, --cirth-border-width-*.
Motion #
:root {
--cirth-transition: 120ms ease-out;
}
One token covers every transition in the library. It is composed from
--cirth-duration-* and --cirth-ease-*, which are there if you want a
different pairing per component.
Cirth already honours prefers-reduced-motion, with one deliberate
exception: a busy indicator keeps moving, because a spinner that has
stopped says the opposite of what it means.
Worked examples #
Rebrand the accent #
Everything the accent touches, in one line per scheme:
:root {
--cirth-primary: light-dark(#7c3aed, #a78bfa);
}
@media (prefers-contrast: more) {
:root {
--cirth-primary: light-dark(#5b21b6, #c4b5fd);
}
}
Check --cirth-primary-on-surface if your accent is light: the label on a
filled button has to clear 4.5:1 against it.
Swap the typography #
:root {
--cirth-font-family: "IBM Plex Sans", system-ui, sans-serif;
--cirth-font-family-display: "IBM Plex Serif", Georgia, serif;
--cirth-line-height: 1.6;
}
Make it denser #
:root {
--cirth-spacing: 0.75rem;
--cirth-border-radius: 0.25rem;
--cirth-transition: 100ms ease-out;
}
That tightens the flow — prose, sections, grid gaps — and leaves controls and cards where they were. Add the control pair if you want the components to come in too:
:root {
--cirth-form-element-spacing-vertical: 0.375rem;
--cirth-form-element-spacing-horizontal: 0.75rem;
}
Controls keep their 44px floor either way: the padding shrinks, the target does not.
Change the dark scheme only #
[data-theme="dark"] {
--cirth-canvas: #0b1120;
--cirth-card-background-color: #111827;
}
Or, as a pair, if you are setting the light value anyway:
:root {
--cirth-canvas: light-dark(#ffffff, #0b1120);
}
Theme one embedded widget #
Scoped builds put everything under .cirth, so a widget can carry a theme
the host page knows nothing about:
<link rel="stylesheet" href="dist/cirth.scoped.min.css">
<div class="cirth" data-theme="dark" style="--cirth-primary: #34d399">
<article>
<h2>Settings</h2>
<button type="button">Save</button>
</article>
</div>
Verifying your theme #
Cirth's shipped themes — the default and both presets — are verified: every
text pair clears WCAG AA (4.5:1, or 7:1 under prefers-contrast: more) and
every non-text indicator clears 3:1, checked in light and dark on every page
of this site.
That verification covers the values Cirth ships. It does not extend to values you set. The relationships hold — a derived hover stays proportionally darker than whatever accent you give it — but whether the result clears a threshold depends on the colour you chose. When you change an input, the pairs worth checking are:
- your accent against the page, as link text;
--cirth-primary-on-surfaceagainst--cirth-primary-surface, as a button label;--cirth-muted-coloragainst the page;- the status borders against a field.
What you cannot change with a variable #
Some choices are Sass switches decided when the CSS was compiled, because they change which selectors exist at all:
- Class-based selectors (
.container,.grid,.secondary,.outline,.ghost, …) exist in the default build and not in the classless one. - Scoping every selector under
.cirthis the scoped build. - The
.rowbreakpoint is fixed insrc/_breakpoints.scss.
If you need different values for these you are choosing a different published build, not overriding a variable. See Get Started.
Token reference #
Every --cirth-* token Cirth declares, grouped by what it affects. The
kind column is the distinction from
How the token system works:
- input — set this; other tokens follow
- derived — computed from an input; set it only to break that
- slot — a variable components paint through, not a theme setting
- role — a named setting a component reads directly
- scale — a step on a ladder
Accent and status #
| Token | Kind |
|---|---|
--cirth-contrast-active |
role |
--cirth-contrast-border |
derived |
--cirth-contrast-border-active |
derived |
--cirth-contrast-focus |
role |
--cirth-contrast-on-surface |
role |
--cirth-contrast-surface |
role |
--cirth-contrast-surface-active |
role |
--cirth-contrast-text |
role |
--cirth-contrast-underline |
role |
--cirth-contrast-underline-active |
derived |
--cirth-error |
input |
--cirth-error-active |
derived |
--cirth-error-border |
derived |
--cirth-error-surface |
derived |
--cirth-error-text |
derived |
--cirth-primary |
input |
--cirth-primary-active |
derived |
--cirth-primary-border |
derived |
--cirth-primary-border-active |
derived |
--cirth-primary-focus |
derived |
--cirth-primary-on-surface |
role |
--cirth-primary-surface |
derived |
--cirth-primary-surface-active |
derived |
--cirth-primary-text |
derived |
--cirth-primary-underline |
derived |
--cirth-primary-underline-active |
derived |
--cirth-secondary-active |
role |
--cirth-secondary-border |
derived |
--cirth-secondary-border-active |
derived |
--cirth-secondary-focus |
role |
--cirth-secondary-on-surface |
role |
--cirth-secondary-surface |
role |
--cirth-secondary-surface-active |
role |
--cirth-secondary-text |
role |
--cirth-secondary-underline |
role |
--cirth-secondary-underline-active |
derived |
--cirth-success |
input |
--cirth-success-active |
derived |
--cirth-success-border |
derived |
--cirth-success-surface |
derived |
--cirth-success-text |
derived |
--cirth-warning |
input |
--cirth-warning-active |
derived |
--cirth-warning-border |
derived |
--cirth-warning-surface |
derived |
--cirth-warning-text |
derived |
Surfaces and text #
| Token | Kind |
|---|---|
--cirth-background-color |
slot |
--cirth-blockquote-border-color |
derived |
--cirth-blockquote-footer-color |
derived |
--cirth-canvas |
input |
--cirth-card-background-color |
derived |
--cirth-card-border-color |
derived |
--cirth-card-border-radius |
role |
--cirth-card-box-shadow |
role |
--cirth-card-sectioning-background-color |
derived |
--cirth-code-background-color |
derived |
--cirth-code-border-radius |
role |
--cirth-code-color |
role |
--cirth-code-kbd-background-color |
derived |
--cirth-code-kbd-color |
derived |
--cirth-color |
slot |
--cirth-del-color |
derived |
--cirth-ink |
input |
--cirth-ins-color |
derived |
--cirth-link-visited-color |
role |
--cirth-mark-background-color |
derived |
--cirth-mark-color |
role |
--cirth-muted-border-color |
role |
--cirth-muted-color |
role |
--cirth-text-selection-color |
role |
Typography #
| Token | Kind |
|---|---|
--cirth-font-family |
role |
--cirth-font-family-display |
role |
--cirth-font-family-emoji |
scale |
--cirth-font-family-mono |
scale |
--cirth-font-family-sans |
scale |
--cirth-font-family-serif |
scale |
--cirth-font-size |
slot |
--cirth-font-size-2xl |
scale |
--cirth-font-size-3xl |
scale |
--cirth-font-size-4xl |
scale |
--cirth-font-size-5xl |
scale |
--cirth-font-size-6xl |
scale |
--cirth-font-size-7xl |
scale |
--cirth-font-size-lg |
scale |
--cirth-font-size-md |
scale |
--cirth-font-size-sm |
scale |
--cirth-font-size-xl |
scale |
--cirth-font-size-xs |
scale |
--cirth-font-weight |
slot |
--cirth-font-weight-bold |
scale |
--cirth-font-weight-light |
scale |
--cirth-font-weight-medium |
scale |
--cirth-font-weight-regular |
scale |
--cirth-font-weight-semibold |
scale |
--cirth-letter-spacing |
slot |
--cirth-letter-spacing-snug |
scale |
--cirth-letter-spacing-tight |
scale |
--cirth-line-height |
slot |
--cirth-line-height-loose |
scale |
--cirth-line-height-none |
scale |
--cirth-line-height-normal |
scale |
--cirth-line-height-relaxed |
scale |
--cirth-line-height-snug |
scale |
--cirth-line-height-tight |
scale |
--cirth-text-underline-offset |
role |
--cirth-typography-spacing-top |
role |
--cirth-typography-spacing-vertical |
role |
Spacing and layout #
| Token | Kind |
|---|---|
--cirth-block-spacing-horizontal |
role |
--cirth-block-spacing-vertical |
role |
--cirth-container-gutter |
role |
--cirth-container-max-width |
role |
--cirth-grid-column-gap |
role |
--cirth-grid-min-column |
role |
--cirth-grid-row-gap |
role |
--cirth-nav-breadcrumb-divider |
role |
--cirth-nav-element-spacing-horizontal |
role |
--cirth-nav-element-spacing-vertical |
role |
--cirth-nav-link-spacing-horizontal |
role |
--cirth-nav-link-spacing-vertical |
role |
--cirth-space-0 |
scale |
--cirth-space-1 |
scale |
--cirth-space-10 |
scale |
--cirth-space-12 |
scale |
--cirth-space-16 |
scale |
--cirth-space-2 |
scale |
--cirth-space-20 |
scale |
--cirth-space-24 |
scale |
--cirth-space-3 |
scale |
--cirth-space-4 |
scale |
--cirth-space-5 |
scale |
--cirth-space-6 |
scale |
--cirth-space-8 |
scale |
--cirth-spacing |
role |
Borders, radii and outlines #
| Token | Kind |
|---|---|
--cirth-border-color |
slot |
--cirth-border-radius |
role |
--cirth-border-width |
role |
--cirth-border-width-0 |
scale |
--cirth-border-width-1 |
scale |
--cirth-border-width-2 |
scale |
--cirth-border-width-4 |
scale |
--cirth-outline-width |
role |
--cirth-radius-2xl |
scale |
--cirth-radius-lg |
scale |
--cirth-radius-md |
scale |
--cirth-radius-none |
scale |
--cirth-radius-pill |
scale |
--cirth-radius-sm |
scale |
--cirth-radius-xl |
scale |
--cirth-radius-xs |
scale |
Motion, depth and layering #
| Token | Kind |
|---|---|
--cirth-box-shadow |
slot |
--cirth-duration-fast |
scale |
--cirth-duration-instant |
scale |
--cirth-duration-normal |
scale |
--cirth-duration-slow |
scale |
--cirth-duration-slower |
scale |
--cirth-ease-in |
scale |
--cirth-ease-in-out |
scale |
--cirth-ease-linear |
scale |
--cirth-ease-out |
scale |
--cirth-opacity-disabled |
scale |
--cirth-opacity-overlay |
scale |
--cirth-transition |
role |
--cirth-z-index-dropdown |
scale |
--cirth-z-index-fixed |
scale |
--cirth-z-index-modal |
scale |
--cirth-z-index-modal-backdrop |
scale |
--cirth-z-index-sticky |
scale |
Form controls #
| Token | Kind |
|---|---|
--cirth-checkbox-border-radius |
role |
--cirth-form-element-active-background-color |
derived |
--cirth-form-element-active-border-color |
derived |
--cirth-form-element-background-color |
derived |
--cirth-form-element-border-color |
role |
--cirth-form-element-color |
role |
--cirth-form-element-disabled-opacity |
derived |
--cirth-form-element-focus-color |
derived |
--cirth-form-element-invalid-active-border-color |
derived |
--cirth-form-element-invalid-border-color |
derived |
--cirth-form-element-invalid-focus-color |
derived |
--cirth-form-element-placeholder-color |
derived |
--cirth-form-element-selected-background-color |
role |
--cirth-form-element-spacing-horizontal |
role |
--cirth-form-element-spacing-vertical |
role |
--cirth-form-element-valid-active-border-color |
derived |
--cirth-form-element-valid-border-color |
derived |
--cirth-form-element-valid-focus-color |
derived |
--cirth-form-label-font-weight |
role |
--cirth-icon-checkbox |
role |
--cirth-icon-chevron |
role |
--cirth-icon-close |
role |
--cirth-icon-date |
role |
--cirth-icon-height |
role |
--cirth-icon-invalid |
role |
--cirth-icon-loading |
role |
--cirth-icon-minus |
role |
--cirth-icon-position |
role |
--cirth-icon-search |
role |
--cirth-icon-time |
role |
--cirth-icon-valid |
role |
--cirth-icon-width |
role |
--cirth-meter-background-color |
role |
--cirth-meter-border-color |
role |
--cirth-meter-even-less-good-color |
derived |
--cirth-meter-optimum-color |
derived |
--cirth-meter-suboptimum-color |
derived |
--cirth-progress-background-color |
role |
--cirth-progress-border-color |
role |
--cirth-progress-color |
derived |
--cirth-range-active-border-color |
role |
--cirth-range-border-color |
role |
--cirth-range-thumb-active-color |
derived |
--cirth-range-thumb-border-color |
derived |
--cirth-range-thumb-color |
derived |
--cirth-switch-background-color |
role |
--cirth-switch-checked-background-color |
derived |
--cirth-switch-color |
derived |
--cirth-switch-thumb-box-shadow |
role |
Components #
| Token | Kind |
|---|---|
--cirth-accordion-active-summary-color |
derived |
--cirth-accordion-close-summary-color |
derived |
--cirth-accordion-open-summary-color |
derived |
--cirth-dropdown-background-color |
derived |
--cirth-dropdown-border-color |
derived |
--cirth-dropdown-box-shadow |
derived |
--cirth-dropdown-color |
derived |
--cirth-dropdown-hover-background-color |
derived |
--cirth-group-box-shadow |
role |
--cirth-group-box-shadow-focus-with-button |
role |
--cirth-group-box-shadow-focus-with-input |
role |
--cirth-modal-max-width |
role |
--cirth-modal-overlay-backdrop-filter |
role |
--cirth-modal-overlay-background-color |
derived |
--cirth-popover-background-color |
derived |
--cirth-popover-border-color |
role |
--cirth-popover-box-shadow |
role |
--cirth-popover-color |
role |
--cirth-popover-display |
role |
--cirth-popover-max-width |
role |
--cirth-print-border-color |
role |
--cirth-print-color |
role |
--cirth-print-muted-color |
role |
--cirth-table-border-color |
derived |
--cirth-table-row-stripped-background-color |
role |
--cirth-text-decoration |
slot |
--cirth-underline |
slot |
Everything else #
| Token | Kind |
|---|---|
--cirth-button-box-shadow |
derived |
--cirth-button-hover-box-shadow |
derived |
--cirth-h1-color |
role |
--cirth-h2-color |
role |
--cirth-h3-color |
role |
--cirth-h4-color |
role |
--cirth-h5-color |
role |
--cirth-h6-color |
role |