Skip to content
DESIGN SYSTEM f(x) → NATURE DS v1.1
[00] // DESIGN SYSTEM / WHERE FUNCTIONS BECOME NATURE

f(x) NATURE

A brutalist, technical design system for interfaces you can stand behind — cast in high-contrast black & cream, struck with a single acid-lime accent, built entirely on tokens and documented with live Preview/Code.

53+ Components
7 Categories
2 Themes
v1.1 Release
[01]// FOUNDATIONS / PRIMITIVES

Foundations

The primitives every component is built from — a high-contrast color system, heavy grotesque + monospace type, an 8px spacing rhythm, sharp materials, and the signature grid.

Color / Surfaces--background … --surface-3
--background#0a0a0a
--background-subtle#0e0e0e
--surface#131313
--surface-2#181818
--surface-3#1f1f1f
<div class="fd-swatch">
  <div class="fd-swatch__chip" style="--swatch: var(--surface-2);"></div>
  <span class="fd-swatch__token">--surface-2</span>
</div>
Color / Foreground--foreground … --foreground-faint
--foreground#f3f1ea
--foreground-muted#a3a299
--foreground-subtle#6e6e66
--foreground-faint#45453f
--border-strong#363632
color: var(--foreground);
color: var(--foreground-muted);   /* body copy */
color: var(--foreground-subtle);  /* mono labels */
color: var(--foreground-faint);   /* hairline text */
Color / Accent + Semantic--accent · --success · --warning · --error · --info
--accent#d4f60a
--accent-muted12% lime
--success#4ade80
--warning#fbbf24
--error#ff5c5c
--info#5ca8ff
--success-muted12% tint
--warning-muted12% tint
--error-muted12% tint
--info-muted12% tint
background: var(--accent);        /* acid lime, used sparingly */
color: var(--on-accent);          /* #0a0a0a on lime */
background: var(--success-muted); /* 12% semantic tint surface */
Typography / Families--font-display · --font-sans · --font-mono
Shikaku Display --font-display / Display · grotesque · 900
Cast In Iron
Shikaku Sans --font-sans / UI · body · 400–600
Engineered for clarity at any size.
Shikaku Mono --font-mono / Labels · code · indices
const nature = [01]; // 0x0a0a0a
font-family: var(--font-display); /* display, headings */
font-family: var(--font-sans);    /* sans, UI + body */
font-family: var(--font-mono);    /* Shikaku Mono, labels */
Typography / Type scale--text-6xl … --text-xs
--text-6xl88pxNature
--text-5xl64pxNature
--text-4xl48pxNature
--text-3xl36pxNature stamp
--text-2xl28pxNature stamp
--text-xl22pxNature stamp set
--text-lg18pxNature stamp set
--text-md16pxNature stamp set in lime
--text-base15pxNature stamp set in lime
--text-sm13pxNature stamp set in lime
--text-xs12pxNature stamp set in lime
font-size: var(--text-4xl); /* 48px — section titles */
font-size: var(--text-base);/* 15px — body default */
font-size: var(--text-xs);  /* 12px — captions */
Typography / Weights + Label--weight-regular … --weight-black
Aa400 · regular
Aa500 · medium
Aa600 · semibold
Aa700 · bold
Aa900 · black
[01]// FOUNDATIONS / PRIMITIVES
font-weight: var(--weight-black); /* 900 — display headings */

<span class="fd-label">
  <span class="fd-label__index">[01]</span>
  <span class="fd-label__sep">//</span> FOUNDATIONS
</span>
Spacing / 8px rhythm--space-1 … --space-12
--space-14px
--space-28px
--space-312px
--space-416px
--space-520px
--space-624px
--space-832px
--space-1040px
--space-1248px
padding: var(--space-4);          /* 16px */
gap: var(--space-2);              /* 8px — base unit */
margin-bottom: var(--space-8);    /* 32px */
Materials / Radii · Shadows · Strokes--radius-* · --shadow-* · --border-*
Radii — brutalist defaults to sharp
none · 0
sm · 2px
md · 4px
lg · 8px
xl · 12px
full
Shadows — subtle elevation + hard brutalist
shadow-sm
shadow-md
shadow-lg
shadow-hard
Strokes — 1px hairlines + accent
border
border-strong
accent · 2px
border-radius: var(--radius-md);  /* 4px */
box-shadow: var(--shadow-hard);   /* 4px 4px 0 hard offset */
border: var(--border-width) solid var(--border);
Grid / Crosshair motif.fd-grid-bg · .fd-frame--crosshair
8PX BASELINE GRID Built On The Grid
<div class="fd-frame fd-frame--crosshair">
  <span class="fd-crosshair fd-crosshair--tl"></span>
  <span class="fd-crosshair fd-crosshair--tr"></span>
  <span class="fd-crosshair fd-crosshair--bl"></span>
  <span class="fd-crosshair fd-crosshair--br"></span>
  <div class="fd-grid-bg"></div>
</div>
Icons / Technical set.fd-icon · 1.25rem · 1.5 stroke
arrow
terminal
grid
layers
bolt
check
cross
search
settings
copy
external
chevron
plus
folder
code
command
<svg class="fd-icon" viewBox="0 0 24 24" aria-hidden="true">
  <path d="M5 12h14"/><path d="m13 6 6 6-6 6"/>
</svg>
/* 1.25rem · currentColor · 1.5 stroke */
Motion / Easing + Duration--ease-* · --duration-*
--ease-outcubic-bezier(0.16, 1, 0.3, 1)
--ease-in-outcubic-bezier(0.65, 0, 0.35, 1)
--ease-springcubic-bezier(0.34, 1.56, 0.64, 1)
--duration-fast120ms
--duration-base200ms
--duration-slow320ms
Hover · lift
Hover · spring
Hover · fill
Hover the boxes — each uses a different easing + duration token.
transition: transform var(--duration-base) var(--ease-out);
transition: transform var(--duration-slow) var(--ease-spring);
box-shadow: var(--shadow-hard-accent); /* lift on hover */
[02]// COMPONENTS / ACTIONS

Buttons & Actions

Interactive triggers — buttons, button groups, toggles, badges, and keyboard hints — carrying the brutalist weight.

Button

.fd-btn

A pressable action trigger. Flat fills, hairline outlines, and an optional hard offset shadow that pops on hover.

<button class="fd-btn fd-btn--primary">Deploy</button>
<button class="fd-btn fd-btn--secondary">Preview</button>
<button class="fd-btn fd-btn--ghost">Cancel</button>

Usage

<button class="fd-btn fd-btn--primary">Deploy</button>

Examples

Variants
<button class="fd-btn fd-btn--primary">Primary</button>
<button class="fd-btn fd-btn--secondary">Secondary</button>
<button class="fd-btn fd-btn--ghost">Ghost</button>
<button class="fd-btn fd-btn--outline">Outline</button>
<button class="fd-btn fd-btn--danger">Danger</button>
Sizes
<button class="fd-btn fd-btn--primary fd-btn--sm">Small</button>
<button class="fd-btn fd-btn--primary fd-btn--md">Medium</button>
<button class="fd-btn fd-btn--primary fd-btn--lg">Large</button>
With Icon & Icon-only
<button class="fd-btn fd-btn--primary">
  <svg viewBox="0 0 16 16" aria-hidden="true"><path d="M8 3v10M3 8h10" .../></svg>
  New File
</button>

<!-- icon-only requires aria-label -->
<button class="fd-btn fd-btn--outline fd-btn--icon" aria-label="Settings">
  <svg viewBox="0 0 16 16" aria-hidden="true">…</svg>
</button>
Loading & Disabled
<!-- .is-loading shows a spinner and preserves width -->
<button class="fd-btn fd-btn--primary is-loading">Saving</button>

<button class="fd-btn fd-btn--primary" disabled>Disabled</button>
Block
<button class="fd-btn fd-btn--primary fd-btn--block">Deploy to Production</button>
<button class="fd-btn fd-btn--outline fd-btn--block">Cancel</button>

API Reference

ClassDescriptionDefault
.fd-btnBase button. Mono uppercase, hairline border, sharp corners.
.fd-btn--primaryPrimary lime fill action with hard offset shadow on hover.
.fd-btn--secondarySurface fill with strong border.
.fd-btn--ghostTransparent until hover; lowest emphasis.
.fd-btn--outlineTransparent with strong border; accent border-shadow on hover.
.fd-btn--dangerDestructive action in the error palette.
.fd-btn--sm · --md · --lgSize scale.--md
.fd-btn--iconSquare icon-only button. Requires aria-label.
.fd-btn--blockFull-width button.
.is-loadingSwaps content for a spinner; preserves width.false
disabledNative disabled attribute; dims and blocks interaction.false

Button Group

.fd-btn-group

A segmented row of buttons that share borders into a single seam — for split actions, paginators, and segmented controls.

<div class="fd-btn-group" role="group" aria-label="Text alignment">
  <button class="fd-btn fd-btn--secondary is-active">Left</button>
  <button class="fd-btn fd-btn--secondary">Center</button>
  <button class="fd-btn fd-btn--secondary">Right</button>
</div>

Usage

<div class="fd-btn-group" role="group" aria-label="Actions">
  <button class="fd-btn fd-btn--secondary">Save</button>
  <button class="fd-btn fd-btn--secondary">Publish</button>
</div>

Anatomy

fd-btn-group            // segmented container (role="group")
└─ fd-btn               // member · seams collapse; ends keep radius
   └─ .is-active        // selected segment (accent fill)

Examples

Split & Paginator
<div class="fd-btn-group" role="group" aria-label="Deploy">
  <button class="fd-btn fd-btn--primary">Deploy</button>
  <button class="fd-btn fd-btn--primary fd-btn--icon" aria-label="Deploy options">
    <svg viewBox="0 0 16 16" aria-hidden="true">…</svg>
  </button>
</div>

<div class="fd-btn-group" role="group" aria-label="Pagination">
  <button class="fd-btn fd-btn--outline is-active">1</button>
  <button class="fd-btn fd-btn--outline">2</button>
  <button class="fd-btn fd-btn--outline">3</button>
</div>
Vertical
<div class="fd-btn-group fd-btn-group--vertical" role="group" aria-label="View mode">
  <button class="fd-btn fd-btn--secondary is-active">Grid</button>
  <button class="fd-btn fd-btn--secondary">List</button>
  <button class="fd-btn fd-btn--secondary">Board</button>
</div>

API Reference

ClassDescriptionDefault
.fd-btn-groupSegmented container; collapses adjacent button seams.
.fd-btn-group--verticalStacks members vertically; rounds top/bottom ends.
.fd-btn.is-activeMarks the selected segment with the accent fill.false
role="group"Required; pair with aria-label for the set.

Toggle

.fd-toggle

A two-state pressable that latches on — bold, italic, mute, pin. Tracks state via aria-pressed.

<!-- a single toggle wraps in a multiple toggle-group so main.js drives it -->
<div class="fd-toggle-group" role="group" data-fd-toggle-group data-fd-type="multiple" aria-label="Bold">
  <button class="fd-toggle fd-toggle--bold" data-fd-toggle aria-pressed="true" aria-label="Bold">B</button>
</div>

Usage

<div class="fd-toggle-group" role="group" data-fd-toggle-group data-fd-type="multiple" aria-label="Mute">
  <button class="fd-toggle" data-fd-toggle aria-pressed="false">Mute</button>
</div>

Examples

With Text & Icon
<div class="fd-toggle-group" role="group" data-fd-toggle-group data-fd-type="multiple" aria-label="Pin">
  <button class="fd-toggle" data-fd-toggle aria-pressed="true">
    <svg viewBox="0 0 16 16" aria-hidden="true">…</svg> Pinned
  </button>
</div>
Sizes & Disabled
<button class="fd-toggle fd-toggle--sm" data-fd-toggle aria-pressed="true">B</button>
<button class="fd-toggle fd-toggle--lg" data-fd-toggle aria-pressed="false">B</button>
<button class="fd-toggle" data-fd-toggle aria-pressed="false" disabled>Locked</button>

API Reference

ClassDescriptionDefault
.fd-toggleBase pressable. Ghost frame that latches to accent when on.
.fd-toggle--sm · --lgSize scale.md
.fd-toggle--bold · --italic · --underlineTypographic style cues for formatting toggles.
data-fd-toggleHook for main.js; flips aria-pressed + .is-on.
aria-pressedReflects on/off state. Set the initial value.false
disabledDims and blocks interaction.false

Toggle Group

.fd-toggle-group

A segmented set of toggles. Single mode behaves like a radio (one active); multiple lets several latch independently.

<div class="fd-toggle-group" role="group" data-fd-toggle-group data-fd-type="single" aria-label="Text alignment">
  <button class="fd-toggle" data-fd-toggle aria-pressed="true" aria-label="Align left">…</button>
  <button class="fd-toggle" data-fd-toggle aria-pressed="false" aria-label="Align center">…</button>
  <button class="fd-toggle" data-fd-toggle aria-pressed="false" aria-label="Align right">…</button>
</div>

Usage

<div class="fd-toggle-group" role="group" data-fd-toggle-group data-fd-type="single" aria-label="Align">
  <button class="fd-toggle" data-fd-toggle aria-pressed="true">Left</button>
  <button class="fd-toggle" data-fd-toggle aria-pressed="false">Right</button>
</div>

Anatomy

fd-toggle-group[data-fd-toggle-group][data-fd-type]   // single | multiple
└─ fd-toggle[data-fd-toggle]            // member
   ├─ aria-pressed="true|false"         // reflects on/off
   └─ .is-on                            // applied by main.js

Examples

Single (radio-like)
<div class="fd-toggle-group" role="group" data-fd-toggle-group data-fd-type="single" aria-label="Density">
  <button class="fd-toggle" data-fd-toggle aria-pressed="false">Compact</button>
  <button class="fd-toggle" data-fd-toggle aria-pressed="true">Cozy</button>
  <button class="fd-toggle" data-fd-toggle aria-pressed="false">Roomy</button>
</div>
Multiple (formatting)
<div class="fd-toggle-group" role="group" data-fd-toggle-group data-fd-type="multiple" aria-label="Text formatting">
  <button class="fd-toggle fd-toggle--bold" data-fd-toggle aria-pressed="true" aria-label="Bold">B</button>
  <button class="fd-toggle fd-toggle--italic" data-fd-toggle aria-pressed="true" aria-label="Italic">I</button>
  <button class="fd-toggle fd-toggle--underline" data-fd-toggle aria-pressed="false" aria-label="Underline">U</button>
</div>

API Reference

ClassDescriptionDefault
.fd-toggle-groupSegmented container; collapses toggle seams.
data-fd-toggle-groupHook that activates main.js selection logic.
data-fd-type="single"Radio-like: at most one member on.single
data-fd-type="multiple"Each member latches independently.
role="group"Required; pair with aria-label.

Badge

.fd-badge

A compact mono label for statuses, counts, and tags. Optional status dot and semantic palettes.

v1.4 Operational Draft
<span class="fd-badge fd-badge--accent">v1.4</span>
<span class="fd-badge fd-badge--success fd-badge--dot">
  <span class="fd-badge__dot"></span>Operational
</span>
<span class="fd-badge fd-badge--outline">Draft</span>

Usage

<span class="fd-badge fd-badge--accent">v1.4</span>

Examples

Variants
Default Accent Stable Beta Deprecated Outline
<span class="fd-badge">Default</span>
<span class="fd-badge fd-badge--accent">Accent</span>
<span class="fd-badge fd-badge--success">Stable</span>
<span class="fd-badge fd-badge--warning">Beta</span>
<span class="fd-badge fd-badge--error">Deprecated</span>
<span class="fd-badge fd-badge--outline">Outline</span>
Dot & Sizes
Operational Degraded Offline SM MD
<span class="fd-badge fd-badge--dot fd-badge--success">
  <span class="fd-badge__dot"></span>Operational
</span>

<span class="fd-badge fd-badge--accent fd-badge--sm">SM</span>
<span class="fd-badge fd-badge--accent fd-badge--md">MD</span>

API Reference

ClassDescriptionDefault
.fd-badgeBase mono label chip.
.fd-badge--accentAcid-lime accent palette.
.fd-badge--success · --warning · --errorSemantic status palettes.
.fd-badge--outlineTransparent with strong border.
.fd-badge--dot + .fd-badge__dotLeading status dot inheriting the variant color.
.fd-badge--sm · --mdSize scale.md

Kbd

.fd-kbd

Keyboard key caps for documenting shortcuts and command hints, with a tactile bottom-border lip.

+K +
<span class="fd-kbd">
  <kbd>⌘</kbd><span class="fd-kbd__plus">+</span><kbd>K</kbd>
</span>

Usage

<span class="fd-kbd"><kbd>Esc</kbd></span>

Examples

Combos
+K ++P Esc Ctrl+C
<span class="fd-kbd">
  <kbd>⌘</kbd><span class="fd-kbd__plus">+</span><kbd>⇧</kbd><span class="fd-kbd__plus">+</span><kbd>P</kbd>
</span>
<span class="fd-kbd"><kbd>Esc</kbd></span>
Inline & Accent

Open the palette with +K then press to run.

Open the palette with
<span class="fd-kbd fd-kbd--accent"><kbd>⌘</kbd><span class="fd-kbd__plus">+</span><kbd>K</kbd></span>
then press <span class="fd-kbd"><kbd>↵</kbd></span> to run.

API Reference

ClassDescriptionDefault
.fd-kbdInline wrapper for one or more key caps.
<kbd>A single key cap with a tactile bottom-border lip.
.fd-kbd__plusFaint separator between keys in a combo.
.fd-kbd--accentTints the caps with the acid-lime accent.
[03]// COMPONENTS / FORMS

Forms & Inputs

Data-entry primitives — technical, legible, with mono helper text and unmistakable focus, error, and disabled states. Every control is a real, labelled element.

Label

.fd-field__label

A mono, uppercase caption for a control. Pairs with a field via for/id and carries required or optional markers.

<label class="fd-field__label" for="key">
  API key <span class="fd-field__label-req" aria-hidden="true">*</span>
</label>
<input class="fd-input" id="key" type="text" placeholder="FND_LIVE_…" />

Usage

<label class="fd-field__label" for="email">Email</label>

Examples

Required & Optional markers
<label class="fd-field__label" for="ws">
  Workspace name <span class="fd-field__label-req" aria-hidden="true">*</span>
</label>

<label class="fd-field__label" for="disp">
  Display name <span class="fd-field__label-opt" aria-hidden="true">OPTIONAL</span>
</label>
Label with hint
Lowercase, used in the production URL.
<label class="fd-field__label" for="slug">Project slug</label>
<input class="fd-input" id="slug" aria-describedby="slug-hint" />
<span class="fd-field__hint" id="slug-hint">Lowercase, used in the production URL.</span>

API Reference

ClassDescriptionDefault
.fd-field__labelMono uppercase caption. Use a real <label for> bound to the control.
.fd-field__label-reqAcid-lime asterisk marking a required field.
.fd-field__label-optFaint mono "OPTIONAL" marker.
.fd-field__hintMono helper text rendered under the control.
.fd-field__hint--errorTints the hint in the error palette.

Input

.fd-input

A single-line text field. Hairline border, sharp corners, and an accent focus ring with a tinted fill.

Legal name as it appears on file.
<div class="fd-field">
  <label class="fd-field__label" for="name">
    Full name <span class="fd-field__label-req" aria-hidden="true">*</span>
  </label>
  <input class="fd-input" id="name" type="text" placeholder="ADA LOVELACE" />
  <span class="fd-field__hint">Legal name as it appears on file.</span>
</div>

Usage

<input class="fd-input" type="text" placeholder="ADA LOVELACE" />

Examples

Sizes
<input class="fd-input fd-input--sm" type="text" placeholder="COMPACT ROW" />
<input class="fd-input fd-input--md" type="text" placeholder="STANDARD HEIGHT" />
<input class="fd-input fd-input--lg" type="text" placeholder="PROMINENT INPUT" />
Error
Slug must be lowercase, no spaces.
<input class="fd-input is-error" type="text" value="nature studio"
       aria-invalid="true" aria-describedby="hint" />
<span class="fd-field__hint fd-field__hint--error" id="hint">
  <span class="fd-field__hint-icon" aria-hidden="true">!</span>Slug must be lowercase, no spaces.
</span>
Disabled
Assigned at provisioning. Cannot be edited.
<input class="fd-input" type="text" value="FND-0x91A2-LOCKED" disabled />

API Reference

ClassDescriptionDefault
.fd-inputBase text field. Hairline border, sharp corners, accent focus ring.
.fd-input--sm · --md · --lgHeight & type-size scale.--md
.is-errorError styling; pair with aria-invalid and an error hint.false
disabledNative disabled attribute; dims and blocks input.false

Input Group

.fd-input-group

An input wrapped with prefix/suffix addons or a leading icon. The whole group shares one border and one focus ring.

https:// .dev
<div class="fd-input-group">
  <span class="fd-input-group__addon fd-input-group__addon--prefix">https://</span>
  <input class="fd-input" type="text" placeholder="nature.studio" />
  <span class="fd-input-group__addon fd-input-group__addon--suffix">.dev</span>
</div>

Usage

<div class="fd-input-group">
  <span class="fd-input-group__addon fd-input-group__addon--prefix">$</span>
  <input class="fd-input" type="text" />
</div>

Anatomy

fd-input-group               // bordered shell; owns hover + focus-within ring
├─ fd-input-group__addon     // --prefix (left seam) | --suffix (right seam)
├─ fd-input-group__icon      // leading icon, no fill (search style)
└─ fd-input                  // borderless, transparent, flex-fills the row

Examples

Prefix & suffix
USD $ / MO
<div class="fd-input-group">
  <span class="fd-input-group__addon fd-input-group__addon--prefix">USD $</span>
  <input class="fd-input" type="text" inputmode="decimal" placeholder="0.00" />
  <span class="fd-input-group__addon fd-input-group__addon--suffix">/ MO</span>
</div>
Leading icon (search)
<div class="fd-input-group">
  <span class="fd-input-group__icon" aria-hidden="true">
    <svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5">
      <circle cx="7" cy="7" r="4.5"/><path d="M10.5 10.5L14 14"/>
    </svg>
  </span>
  <input class="fd-input" type="search" placeholder="QUERY COMPONENTS…" />
</div>

API Reference

ClassDescriptionDefault
.fd-input-groupBordered shell; owns hover, focus-within ring, and error state.
.fd-input-group__addonMono text adornment with a surface fill.
.fd-input-group__addon--prefix · --suffixPlaces the addon on the leading or trailing seam.
.fd-input-group__iconLeading icon with no fill — search-style affordance.
.is-errorError styling on the whole group.false

Textarea

.fd-textarea

A resizable multi-line text field. Shares the input's focus and error language; grows vertically by drag.

Markdown supported. Drag the corner to resize vertically.
<div class="fd-field fd-field--full">
  <label class="fd-field__label" for="notes">Release notes</label>
  <textarea class="fd-textarea" id="notes" rows="3"
            placeholder="Describe the change set…"></textarea>
  <span class="fd-field__hint">Markdown supported. Drag to resize.</span>
</div>

Usage

<textarea class="fd-textarea" rows="3" placeholder="Describe the change set…"></textarea>

Examples

Error
Message must be at least 12 characters.
<textarea class="fd-textarea is-error" rows="2"
          aria-invalid="true" aria-describedby="hint">fix stuff</textarea>
<span class="fd-field__hint fd-field__hint--error" id="hint">
  <span class="fd-field__hint-icon" aria-hidden="true">!</span>Message must be at least 12 characters.
</span>
Disabled
<textarea class="fd-textarea" rows="2" disabled>Auto-generated by the deploy pipeline.</textarea>

API Reference

ClassDescriptionDefault
.fd-textareaMulti-line text field; vertical resize only.
.is-errorError styling; pair with aria-invalid.false
disabledNative disabled attribute; dims and blocks input.false
rowsNative attribute setting the initial visible line count.

Select

.fd-select

A native <select> with a custom chevron. Keeps the platform menu while matching the input's frame.

<label class="fd-field__label" for="region">Deploy region</label>
<select class="fd-select" id="region">
  <option value="" disabled>Select a region…</option>
  <option>iad1 — Washington, D.C.</option>
  <option selected>fra1 — Frankfurt</option>
  <option>hnd1 — Tokyo</option>
</select>

Usage

<select class="fd-select">
  <option>Production</option>
  <option>Preview</option>
</select>

Examples

Sizes
<select class="fd-select fd-select--sm">…</select>
<select class="fd-select fd-select--lg">…</select>
Disabled
<select class="fd-select" disabled>
  <option>Enterprise</option>
</select>

API Reference

ClassDescriptionDefault
.fd-selectNative select with a custom SVG chevron and input frame.
.fd-select--sm · --lgHeight & type-size scale (medium is the base).base
.is-errorError styling on the control.false
disabledNative disabled attribute; dims and blocks selection.false

Checkbox

.fd-checkbox

A custom-drawn box over a real checkbox input. Acid-lime fill with a spring-in checkmark; supports an indeterminate dash.

<label class="fd-checkbox">
  <input class="fd-checkbox__input" type="checkbox" checked />
  <span class="fd-checkbox__box" aria-hidden="true"></span>
  <span class="fd-checkbox__label">
    <span class="fd-checkbox__text">Enable preview deployments</span>
    <span class="fd-checkbox__note">Build every push to a branch.</span>
  </span>
</label>

Usage

<label class="fd-checkbox">
  <input class="fd-checkbox__input" type="checkbox" />
  <span class="fd-checkbox__box" aria-hidden="true"></span>
  <span class="fd-checkbox__label">
    <span class="fd-checkbox__text">Remember me</span>
  </span>
</label>

Anatomy

fd-checkbox                  // <label> wrapper (click target)
├─ fd-checkbox__input        // real <input type="checkbox">, visually hidden
├─ fd-checkbox__box          // custom box; draws check / indeterminate dash
└─ fd-checkbox__label        // text column
   ├─ fd-checkbox__text      // primary label
   └─ fd-checkbox__note      // optional mono helper

Examples

States
<label class="fd-checkbox">
  <input class="fd-checkbox__input" type="checkbox" checked />
  <span class="fd-checkbox__box" aria-hidden="true"></span>
  <span class="fd-checkbox__label"><span class="fd-checkbox__text">Checked</span></span>
</label>

<!-- disabled -->
<input class="fd-checkbox__input" type="checkbox" checked disabled />
Indeterminate
<!-- set el.indeterminate = true in JS -->
<label class="fd-checkbox">
  <input class="fd-checkbox__input" type="checkbox" aria-checked="mixed" />
  <span class="fd-checkbox__box" aria-hidden="true"></span>
  <span class="fd-checkbox__label"><span class="fd-checkbox__text">Select all regions</span></span>
</label>

API Reference

ClassDescriptionDefault
.fd-checkboxLabel wrapper and click target.
.fd-checkbox__inputReal visually-hidden checkbox; carries state & focus.
.fd-checkbox__boxCustom box; renders the check or indeterminate dash.
.fd-checkbox__text · __notePrimary label text and optional mono helper.
:indeterminateRenders a centered dash. Set el.indeterminate in JS.false
disabledNative disabled attribute; dims and blocks toggling.false

Radio Group

.fd-radio

A set of mutually-exclusive choices wrapped in a fieldset. Each row is a real radio input with a spring-in dot.

<fieldset class="fd-radio-group" aria-label="Project visibility">
  <label class="fd-radio">
    <input class="fd-radio__input" type="radio" name="visibility" checked />
    <span class="fd-radio__box" aria-hidden="true"></span>
    <span class="fd-radio__label">
      <span class="fd-radio__text">Public</span>
      <span class="fd-radio__note">Anyone can view the project.</span>
    </span>
  </label>
  <!-- …more .fd-radio rows sharing the same name -->
</fieldset>

Usage

<label class="fd-radio">
  <input class="fd-radio__input" type="radio" name="plan" />
  <span class="fd-radio__box" aria-hidden="true"></span>
  <span class="fd-radio__label"><span class="fd-radio__text">Pro</span></span>
</label>

Anatomy

fd-radio-group               // <fieldset> with aria-label (or a <legend>)
└─ fd-radio                  // <label> row; repeat per choice
   ├─ fd-radio__input        // real <input type="radio">, shared name=""
   ├─ fd-radio__box          // custom ring; draws the selected dot
   └─ fd-radio__label
      ├─ fd-radio__text
      └─ fd-radio__note      // optional mono helper

Examples

Inline layout
<fieldset class="fd-radio-group fd-radio-group--inline" aria-label="Environment">
  <label class="fd-radio">
    <input class="fd-radio__input" type="radio" name="env" checked />
    <span class="fd-radio__box" aria-hidden="true"></span>
    <span class="fd-radio__label"><span class="fd-radio__text">Production</span></span>
  </label>
  <!-- …Preview, Development -->
</fieldset>

API Reference

ClassDescriptionDefault
.fd-radio-groupFieldset wrapper; stacks rows. Needs aria-label or a <legend>.
.fd-radio-group--inlineLays the choices out in a wrapping row.
.fd-radioSingle choice row; a real <label>.
.fd-radio__inputReal radio input. Group members share name.
.fd-radio__boxCustom ring; renders the selected dot.
disabledNative disabled attribute on a row's input.false

Switch

.fd-switch

A toggle for an instant on/off setting. Built on a real checkbox; the track fills acid-lime and the thumb springs across when on.

<label class="fd-switch">
  <input class="fd-switch__input" type="checkbox" checked />
  <span class="fd-switch__track" aria-hidden="true">
    <span class="fd-switch__thumb"></span>
  </span>
  <span class="fd-switch__label">Auto-deploy main</span>
</label>

Usage

<label class="fd-switch">
  <input class="fd-switch__input" type="checkbox" />
  <span class="fd-switch__track" aria-hidden="true"><span class="fd-switch__thumb"></span></span>
  <span class="fd-switch__label">Notifications</span>
</label>

Anatomy

fd-switch                    // <label> wrapper (click target)
├─ fd-switch__input          // real <input type="checkbox">, visually hidden
├─ fd-switch__track          // pill rail; fills accent when checked
│  └─ fd-switch__thumb       // knob; translates across on check
└─ fd-switch__label          // mono uppercase caption

Examples

States
<!-- checked -->
<input class="fd-switch__input" type="checkbox" checked />
<!-- disabled -->
<input class="fd-switch__input" type="checkbox" checked disabled />
Small
<label class="fd-switch fd-switch--sm">
  <input class="fd-switch__input" type="checkbox" checked />
  <span class="fd-switch__track" aria-hidden="true"><span class="fd-switch__thumb"></span></span>
  <span class="fd-switch__label">Compact toggle</span>
</label>

API Reference

ClassDescriptionDefault
.fd-switchLabel wrapper and click target.
.fd-switch__inputReal visually-hidden checkbox; carries state & focus.
.fd-switch__track · __thumbPill rail and the knob that translates across.
.fd-switch__labelMono uppercase caption beside the control.
.fd-switch--smCompact size.
disabledNative disabled attribute; dims and blocks toggling.false

Form

.fd-fieldset

A composed form: grouped fieldsets, stacked fields, choice groups, and an action footer — every primitive working together.

[A] PROJECT
Used for the production URL.
[B] ACCESS
Visibility
<form class="fd-card">
  <div class="fd-forms-grid">
    <fieldset class="fd-fieldset">
      <legend class="fd-fieldset__legend">
        <span class="fd-fieldset__legend-index">[A]</span> PROJECT
      </legend>
      <div class="fd-field-group">
        <div class="fd-field">
          <label class="fd-field__label" for="proj">Project name</label>
          <input class="fd-input" id="proj" type="text" />
          <span class="fd-field__hint">Used for the production URL.</span>
        </div>
        <div class="fd-field-actions">
          <button type="submit" class="fd-field-submit">Create project</button>
          <button type="button" class="fd-field-submit fd-field-submit--ghost">Cancel</button>
        </div>
      </div>
    </fieldset>
  </div>
</form>

Usage

<fieldset class="fd-fieldset">
  <legend class="fd-fieldset__legend">PROJECT</legend>
  <div class="fd-field-group">
    <div class="fd-field">…</div>
  </div>
</fieldset>

Anatomy

form                         // optional .fd-card shell
└─ fd-forms-grid             // responsive 2-col layout (1-col on small)
   └─ fd-fieldset            // grouped section with a mono legend
      ├─ fd-fieldset__legend // [A] PROJECT
      └─ fd-field-group      // vertical stack of rows
         ├─ fd-field         // label + control + hint
         └─ fd-field-actions // footer row
            └─ fd-field-submit // submit / --ghost cancel

Examples

Single-column sign-in
[//] SIGN IN
<form class="fd-card">
  <fieldset class="fd-fieldset">
    <legend class="fd-fieldset__legend">SIGN IN</legend>
    <div class="fd-field-group">
      <div class="fd-field fd-field--full">
        <label class="fd-field__label" for="email">Email</label>
        <input class="fd-input" id="email" type="email" />
      </div>
      <div class="fd-field-actions">
        <button type="submit" class="fd-field-submit">Sign in</button>
      </div>
    </div>
  </fieldset>
</form>

API Reference

ClassDescriptionDefault
.fd-fieldsetGrouped section with a hairline border and surface fill.
.fd-fieldset__legendMono uppercase section title; __legend-index tints a bracketed marker.
.fd-field-groupVertical stack of field rows inside a fieldset.
.fd-fieldAtomic row: label + control + optional hint.
.fd-field--fullLets a field stretch to the full container width.
.fd-field-actionsFooter row with a top hairline for submit / cancel.
.fd-field-submit · --ghostPrimary submit button and its quiet ghost variant.
.fd-forms-gridTwo-column form layout; collapses to one column on small screens.

Slider

.fd-slider

A native range input restyled with a hairline track and a square acid-lime handle, with an optional live numeric readout.

64
0100
<div class="fd-slider-field">
  <div class="fd-slider-head">
    <label class="fd-field__label" for="opacity">Opacity</label>
    <output class="fd-slider-output" id="opacity-out"
            data-fd-slider-output="opacity" for="opacity">64</output>
  </div>
  <input class="fd-slider" id="opacity" type="range" min="0" max="100"
         value="64" aria-controls="opacity-out" aria-label="Opacity" />
  <div class="fd-slider-scale"><span>0</span><span>100</span></div>
</div>

Usage

<input class="fd-slider" type="range" min="0" max="100" value="64" aria-label="Opacity" />

Examples

Plain
<input class="fd-slider" type="range" min="0" max="100" value="40" aria-label="Volume" />
With output
8
112
<div class="fd-slider-head">
  <label class="fd-field__label" for="quality">Quality</label>
  <output class="fd-slider-output" id="quality-out"
          data-fd-slider-output="quality">8</output>
</div>
<input class="fd-slider" id="quality" type="range" min="1" max="12"
       value="8" aria-controls="quality-out" aria-label="Quality" />
Disabled
<input class="fd-slider" type="range" min="0" max="100" value="30" disabled aria-label="Locked range" />

API Reference

ClassDescriptionDefault
.fd-sliderNative <input type="range"> with brutalist track + square thumb.
.fd-slider-fieldVertical wrapper composing head, slider, and scale.
.fd-slider-headBaseline row pairing a label with the live output.
.fd-slider-outputMono readout chip; bind via data-fd-slider-output.
.fd-slider-scaleMin / max tick row rendered under the track.
data-fd-slider-outputLinks an output to a slider id for live updates.
:disabledDims the control and blocks interaction.

Input OTP

.fd-otp

A segmented one-time-code field — auto-advancing slots, backspace step-back, and paste distribution, restricted to digits.

<div class="fd-otp" data-fd-otp role="group" aria-label="One-time code">
  <div class="fd-otp__group">
    <input class="fd-otp__slot" inputmode="numeric" maxlength="1" aria-label="Digit 1" />
    <input class="fd-otp__slot" inputmode="numeric" maxlength="1" aria-label="Digit 2" />
    <input class="fd-otp__slot" inputmode="numeric" maxlength="1" aria-label="Digit 3" />
  </div>
  <span class="fd-otp__sep" aria-hidden="true"></span>
  <div class="fd-otp__group">
    <input class="fd-otp__slot" inputmode="numeric" maxlength="1" aria-label="Digit 4" />
    <input class="fd-otp__slot" inputmode="numeric" maxlength="1" aria-label="Digit 5" />
    <input class="fd-otp__slot" inputmode="numeric" maxlength="1" aria-label="Digit 6" />
  </div>
</div>

Usage

<div class="fd-otp" data-fd-otp role="group" aria-label="One-time code">
  <div class="fd-otp__group">
    <input class="fd-otp__slot" inputmode="numeric" maxlength="1" />
    <!-- …two more slots… -->
  </div>
  <span class="fd-otp__sep" aria-hidden="true"></span>
  <div class="fd-otp__group">…</div>
</div>

Anatomy

fd-otp                 // root, carries data-fd-otp
├─ fd-otp__group       // a run of 3 slots
│  └─ fd-otp__slot ×3  // single-character inputs
├─ fd-otp__sep         // visual divider between groups
└─ fd-otp__group       // second run of 3 slots
   └─ fd-otp__slot ×3

Examples

Compact
<div class="fd-otp fd-otp--sm" data-fd-otp role="group" aria-label="One-time code">
  <div class="fd-otp__group">…3 slots…</div>
  <span class="fd-otp__sep" aria-hidden="true"></span>
  <div class="fd-otp__group">…3 slots…</div>
</div>
Error state
Code expired. Request a new one.
<div class="fd-otp is-error" data-fd-otp role="group"
     aria-label="One-time code" aria-invalid="true">
  <div class="fd-otp__group">…</div>
  <span class="fd-otp__sep" aria-hidden="true"></span>
  <div class="fd-otp__group">…</div>
</div>
<span class="fd-field__hint fd-field__hint--error">
  <span class="fd-field__hint-icon" aria-hidden="true">!</span>Code expired.
</span>
Disabled
<div class="fd-otp" data-fd-otp role="group" aria-label="One-time code">
  <div class="fd-otp__group">
    <input class="fd-otp__slot" inputmode="numeric" maxlength="1" value="1" disabled />
    <!-- …remaining disabled slots… -->
  </div>
</div>

API Reference

ClassDescriptionDefault
.fd-otpRoot group; pair with data-fd-otp to wire the behaviour.
.fd-otp__groupA visual cluster of consecutive slots.
.fd-otp__slotSingle-character input; use inputmode="numeric" + maxlength="1".
.fd-otp__sepDecorative divider between groups.
.fd-otp--smCompact slot sizing.
.is-errorError styling across all slots.
data-fd-otpEnables advance / backspace / paste handling.

Combobox

.fd-combobox

A trigger that opens a searchable command list in a popover; picking an option writes its label back to the trigger.

<div class="fd-combobox" data-fd-combobox data-fd-combobox-selected="Next.js">
  <button class="fd-combobox__trigger" type="button" data-fd-popover-trigger
          aria-haspopup="listbox" aria-expanded="false">
    <span data-fd-combobox-value>Next.js</span>
    <span class="fd-combobox__trigger-icon" aria-hidden="true">…chevron…</span>
  </button>
  <div class="fd-popover__content" role="dialog" aria-label="Select framework">
    <div class="fd-command" data-fd-command>
      <input class="fd-command__input" type="text" data-fd-command-input
             placeholder="Search framework…" />
      <div class="fd-command__list" data-fd-command-list role="listbox">
        <button class="fd-command__item" type="button" data-fd-command-item
                data-fd-command-value="Next.js" role="option" aria-selected="true">
          Next.js<span class="fd-command__check">…check…</span>
        </button>
        <!-- …more options… -->
      </div>
    </div>
  </div>
</div>

Usage

<div class="fd-combobox" data-fd-combobox>
  <button class="fd-combobox__trigger" type="button" data-fd-popover-trigger aria-expanded="false">
    <span data-fd-combobox-value>Select…</span>
  </button>
  <div class="fd-popover__content" role="dialog">
    <div class="fd-command" data-fd-command> … </div>
  </div>
</div>

Anatomy

fd-combobox                  // root, data-fd-combobox
├─ fd-combobox__trigger      // data-fd-popover-trigger, aria-expanded
│  ├─ [data-fd-combobox-value]   // selected label
│  └─ fd-combobox__trigger-icon  // chevron
└─ fd-popover__content       // role="dialog"
   └─ fd-command             // data-fd-command
      ├─ fd-command__input   // data-fd-command-input
      └─ fd-command__list    // role="listbox"
         └─ fd-command__item // data-fd-command-item · data-fd-command-value

Examples

In a field
Closest region to your users.
<div class="fd-field">
  <label class="fd-field__label" id="region-label">Deploy region</label>
  <div class="fd-combobox" data-fd-combobox>
    <button class="fd-combobox__trigger" type="button" data-fd-popover-trigger
            aria-expanded="false" aria-labelledby="region-label">
      <span data-fd-combobox-value>Select region…</span>
    </button>
    <div class="fd-popover__content" role="dialog">
      <div class="fd-command" data-fd-command> … </div>
    </div>
  </div>
  <span class="fd-field__hint">Closest region to your users.</span>
</div>
Disabled
<div class="fd-combobox" data-fd-combobox>
  <button class="fd-combobox__trigger" type="button" disabled
          aria-haspopup="listbox" aria-expanded="false">
    <span data-fd-combobox-value>Plan: Enterprise</span>
    <span class="fd-combobox__trigger-icon" aria-hidden="true">…chevron…</span>
  </button>
</div>

API Reference

ClassDescriptionDefault
.fd-comboboxRoot wrapper; carries data-fd-combobox.
.fd-combobox__triggerPopover trigger button (data-fd-popover-trigger).
.fd-combobox__trigger-iconChevron; rotates when the popover is open.
[data-fd-combobox-value]Element whose text receives the chosen label.
.fd-popover__contentFloating panel; role="dialog".
.fd-commandFilterable command list (data-fd-command).
.fd-command__itemOption; filtered by data-fd-command-value.
.fd-command__item.is-activeKeyboard-highlighted option.

Calendar

.fd-calendar

A static month grid with a mono weekday header, today and selected day states, and muted overflow days from adjacent months.

June 2026
<div class="fd-calendar" role="application" aria-label="June 2026">
  <div class="fd-calendar__head">
    <button class="fd-calendar__nav" type="button" aria-label="Previous month">‹</button>
    <span class="fd-calendar__title">June 2026</span>
    <button class="fd-calendar__nav" type="button" aria-label="Next month">›</button>
  </div>
  <div class="fd-calendar__grid" role="grid">
    <span class="fd-calendar__weekday">Su</span> <!-- …Mo Tu We Th Fr Sa -->
    <button class="fd-calendar__day is-muted" tabindex="-1">31</button>
    <button class="fd-calendar__day">1</button>
    <!-- … -->
    <button class="fd-calendar__day is-selected" aria-pressed="true">12</button>
    <!-- … -->
    <button class="fd-calendar__day is-today" aria-current="date">20</button>
    <!-- … -->
  </div>
</div>

Usage

<div class="fd-calendar">
  <div class="fd-calendar__head">…title + prev/next…</div>
  <div class="fd-calendar__grid">
    <span class="fd-calendar__weekday">Su</span> …
    <button class="fd-calendar__day is-today">20</button> …
  </div>
</div>

Anatomy

fd-calendar
├─ fd-calendar__head
│  ├─ fd-calendar__nav    // prev
│  ├─ fd-calendar__title  // "June 2026"
│  └─ fd-calendar__nav    // next
└─ fd-calendar__grid
   ├─ fd-calendar__weekday ×7   // Su…Sa
   └─ fd-calendar__day ×N       // is-today · is-selected · is-muted

Examples

With footer
June 2026
TODAY · JUN 20 UTC+0
<div class="fd-calendar">
  <div class="fd-calendar__head">…</div>
  <div class="fd-calendar__grid">…</div>
  <div class="fd-calendar__foot">
    <span>TODAY · JUN 20</span>
    <span>UTC+0</span>
  </div>
</div>
Disabled days
June 2026
<button class="fd-calendar__day" disabled aria-label="June 6, unavailable">6</button>
<button class="fd-calendar__day" disabled aria-label="June 7, unavailable">7</button>
<!-- weekends carry [disabled]; struck through + not focusable -->

API Reference

ClassDescriptionDefault
.fd-calendarMonth grid container.
.fd-calendar__headTitle row with prev / next navigation.
.fd-calendar__navSquare chevron button (visual prev / next).
.fd-calendar__titleMono month + year label.
.fd-calendar__grid7-column grid of weekdays + days.
.fd-calendar__weekdayMono weekday header cell.
.fd-calendar__dayDay cell button.
.is-todayToday — hairline accent ring.
.is-selectedSelected day — filled accent.
.is-mutedDay bleeding in from an adjacent month.
[disabled]Unselectable day — struck through.
.fd-calendar__footOptional footer (readout / timezone).

Date Picker

.fd-datepicker

A trigger button that opens a calendar in a popover; combines the popover shell with a static month grid.

<div class="fd-datepicker" data-fd-datepicker>
  <button class="fd-datepicker__trigger" type="button" data-fd-popover-trigger
          aria-haspopup="dialog" aria-expanded="false">
    <span class="fd-datepicker__trigger-lead">
      <svg>…calendar glyph…</svg>
      <span class="fd-datepicker__value">Jun 12, 2026</span>
    </span>
    <span class="fd-datepicker__trigger-icon" aria-hidden="true">…chevron…</span>
  </button>
  <div class="fd-popover__content" role="dialog" aria-label="Choose date">
    <div class="fd-calendar">…June 2026 grid…</div>
  </div>
</div>

Usage

<div class="fd-datepicker" data-fd-datepicker>
  <button class="fd-datepicker__trigger" type="button" data-fd-popover-trigger aria-expanded="false">
    <span class="fd-datepicker__trigger-lead">
      <span class="fd-datepicker__value">Jun 12, 2026</span>
    </span>
  </button>
  <div class="fd-popover__content" role="dialog">
    <div class="fd-calendar"> … </div>
  </div>
</div>

Anatomy

fd-datepicker                  // root, data-fd-datepicker
├─ fd-datepicker__trigger      // data-fd-popover-trigger, aria-expanded
│  ├─ fd-datepicker__trigger-lead
│  │  └─ fd-datepicker__value  // formatted date label
│  └─ fd-datepicker__trigger-icon
└─ fd-popover__content         // role="dialog"
   └─ fd-calendar              // month grid

Examples

Empty (placeholder)
Pick the date your deployment goes live.
<div class="fd-field">
  <label class="fd-field__label" id="start-label">Start date</label>
  <div class="fd-datepicker" data-fd-datepicker>
    <button class="fd-datepicker__trigger" type="button" data-fd-popover-trigger
            aria-expanded="false" aria-labelledby="start-label">
      <span class="fd-datepicker__trigger-lead">
        <span class="fd-datepicker__value fd-datepicker__value--placeholder">Pick a date</span>
      </span>
    </button>
    <div class="fd-popover__content" role="dialog"><div class="fd-calendar">…</div></div>
  </div>
</div>
Disabled
<div class="fd-datepicker" data-fd-datepicker>
  <button class="fd-datepicker__trigger" type="button" disabled
          aria-haspopup="dialog" aria-expanded="false">
    <span class="fd-datepicker__trigger-lead">
      <span class="fd-datepicker__value">Jun 12, 2026</span>
    </span>
  </button>
</div>

API Reference

ClassDescriptionDefault
.fd-datepickerRoot wrapper; carries data-fd-datepicker.
.fd-datepicker__triggerPopover trigger (data-fd-popover-trigger).
.fd-datepicker__trigger-leadLeading glyph + value cluster.
.fd-datepicker__valueFormatted date label.
.fd-datepicker__value--placeholderMuted empty-state label.
.fd-datepicker__trigger-iconTrailing chevron.
.fd-popover__contentFloating panel wrapping the calendar.
.fd-calendarMonth grid rendered inside the popover.
[04]// COMPONENTS / FEEDBACK

Feedback & Status

Communicate state and progress — alerts, toasts, tooltips, loaders, and meters that report what the system is doing with restrained, semantic color coding.

Alert

.fd-alert

Displays a short, important message inline — an icon, a mono title, and supporting copy on a left-stripe surface that escalates color by severity.

Info

Tokens resolve at build time. Run npm run tokens after editing the manifest.

<div class="fd-alert fd-alert--info" role="status">
  <span class="fd-alert__icon" aria-hidden="true"><svg>…</svg></span>
  <div class="fd-alert__body">
    <div class="fd-alert__title">Info</div>
    <p class="fd-alert__text">Tokens resolve at build time.</p>
  </div>
</div>

Usage

<div class="fd-alert fd-alert--success" role="status">
  <span class="fd-alert__icon" aria-hidden="true"><svg>…</svg></span>
  <div class="fd-alert__body">
    <div class="fd-alert__title">Deployed</div>
    <p class="fd-alert__text">All checks passed.</p>
  </div>
</div>

Anatomy

fd-alert                 // surface + left severity stripe (+ fd-alert--VARIANT)
├── fd-alert__icon       // 18px status glyph, aria-hidden
└── fd-alert__body
    ├── fd-alert__title  // mono uppercase label
    ├── fd-alert__text   // supporting copy (may hold <code>)
    └── fd-alert__actions // optional trailing button row

Examples

Variants
Default

Neutral aside. A left stripe and muted surface set context without raising alarm.

Success

Pipeline passed. All 248 token references validated against the schema.

Warning

This control is deprecated. Migrate to .fd-field before the next major release.

<div class="fd-alert">…</div>                  <!-- default -->
<div class="fd-alert fd-alert--success">…</div>
<div class="fd-alert fd-alert--warning">…</div>
<div class="fd-alert fd-alert--error" role="alert">…</div>
With actions
Unsaved changes

You have edits to the token manifest that have not been committed.

<div class="fd-alert fd-alert--warning" role="status">
  <span class="fd-alert__icon" aria-hidden="true"><svg>…</svg></span>
  <div class="fd-alert__body">
    <div class="fd-alert__title">Unsaved changes</div>
    <p class="fd-alert__text">You have uncommitted edits.</p>
    <div class="fd-alert__actions">
      <button class="fd-btn fd-btn--primary fd-btn--sm">Save now</button>
      <button class="fd-btn fd-btn--ghost fd-btn--sm">Discard</button>
    </div>
  </div>
</div>

API Reference

ClassDescriptionDefault
.fd-alertInline message surface with a neutral left severity stripe.
.fd-alert--infoInformational tone; info-colored stripe, surface, and icon.
.fd-alert--successPositive confirmation tone.
.fd-alert--warningCautionary tone for reversible or deprecation notices.
.fd-alert--errorFailure tone; pair with role="alert".
.fd-alert__iconLeading status glyph slot, aria-hidden.
.fd-alert__titleMono uppercase heading inside the body.
.fd-alert__textSupporting copy; styles inline <code>.
.fd-alert__actionsOptional trailing button row.

Toast

.fd-toast

A transient, succinct notification that slides into a corner region and auto-dismisses — fired declaratively from any trigger with data-fd-toast.

<button class="fd-btn"
  data-fd-toast
  data-fd-toast-variant="success"
  data-fd-toast-title="Deployed"
  data-fd-toast-msg="Build 4127 is live on edge.">
  Success
</button>

Usage

<!-- 1. mount the region once, near </body> -->
<div class="fd-toast-region" aria-live="polite" aria-atomic="false"></div>

<!-- 2. any trigger fires a toast -->
<button data-fd-toast data-fd-toast-variant="info"
  data-fd-toast-title="Sync" data-fd-toast-msg="3 new components pulled.">
  Notify
</button>

Anatomy

fd-toast-region          // fixed corner stack, aria-live="polite"
└── fd-toast             // injected by main.js (+ fd-toast--VARIANT, .is-open)
    ├── fd-toast__icon   // variant glyph, aria-hidden
    ├── fd-toast__body
    │   ├── fd-toast__title
    │   └── fd-toast__msg
    └── fd-toast__close  // dismiss button, aria-label

Examples

Rendered structure
Deployed
Build 4127 is live on edge.
<!-- main.js builds this node inside .fd-toast-region -->
<div class="fd-toast fd-toast--success is-open" role="status">
  <span class="fd-toast__icon"><svg>…</svg></span>
  <div class="fd-toast__body">
    <div class="fd-toast__title">Deployed</div>
    <div class="fd-toast__msg">Build 4127 is live on edge.</div>
  </div>
  <button class="fd-toast__close" aria-label="Dismiss notification">…</button>
</div>

API Reference

Class / HookDescriptionDefault
data-fd-toastOn a trigger; fires a toast on click.
data-fd-toast-variantTone: default, success, error, warning, info.default
data-fd-toast-titleMono uppercase title line.
data-fd-toast-msgBody message line.
.fd-toast-regionFixed corner mount; declare once with aria-live.
.fd-toastInjected notification node (+ --VARIANT).
.is-openEnter state; drives the slide-and-fade transition.
.fd-toast__closeDismiss button with aria-label.

Tooltip

.fd-tooltip

A tiny label that surfaces on hover or keyboard focus to name an action or explain a glyph — pure CSS, no script required.

Anchored above, centered on the trigger.
<span class="fd-tooltip">
  <button class="fd-btn">Hover top</button>
  <span class="fd-tooltip__content" role="tooltip">
    Anchored above, centered.
  </span>
</span>

Usage

<span class="fd-tooltip">
  <button class="fd-btn">Trigger</button>
  <span class="fd-tooltip__content" role="tooltip">Label text</span>
</span>

Examples

Placements
Default placement, above. --accent resolves to #d4f60a in dark theme. Settings · ⌘,
<!-- top (default) -->
<span class="fd-tooltip__content">…</span>
<!-- bottom / right / left -->
<span class="fd-tooltip__content fd-tooltip__content--bottom">…</span>
<span class="fd-tooltip__content fd-tooltip__content--right">…</span>
Dotted info trigger

Coverage holds steady at Measured against 248 declared tokens. this cycle.

<span class="fd-tooltip">
  <button class="fd-tooltip__trigger" aria-describedby="tt-cov">92%</button>
  <span class="fd-tooltip__content fd-tooltip__content--bottom"
    id="tt-cov" role="tooltip">Measured against 248 tokens.</span>
</span>

API Reference

ClassDescriptionDefault
.fd-tooltipRelative wrapper around trigger + content.
.fd-tooltip__contentThe label bubble; reveals on hover / focus-within.
.fd-tooltip__content--bottomAnchors below the trigger.top
.fd-tooltip__content--rightAnchors to the right of the trigger.top
.fd-tooltip__content--leftAnchors to the left of the trigger.top
.fd-tooltip__triggerDashed-underline inline trigger for definitions.
role="tooltip"On content; pair with aria-describedby on the trigger.

Hover Card

.fd-hovercard

A richer hover preview than a tooltip — surfaces an identity block, summary, and metadata for sighted users who hover or focus a link.

<span class="fd-hovercard">
  <button class="fd-hovercard__trigger" aria-haspopup="true">@nature</button>
  <div class="fd-hovercard__content" role="dialog" aria-label="nature profile">
    <div class="fd-hovercard__head">
      <span class="fd-hovercard__avatar">FD</span>
      <div>
        <div class="fd-hovercard__name">Nature Unit</div>
        <div class="fd-hovercard__handle">@nature</div>
      </div>
    </div>
    <p class="fd-hovercard__text">Maintainer of the design system.</p>
    <div class="fd-hovercard__meta"><span><b>248</b> Tokens</span></div>
  </div>
</span>

Usage

<span class="fd-hovercard">
  <button class="fd-hovercard__trigger">@user</button>
  <div class="fd-hovercard__content" role="dialog">…</div>
</span>

Anatomy

fd-hovercard                  // relative wrapper
├── fd-hovercard__trigger     // dashed inline trigger
└── fd-hovercard__content     // role="dialog", reveals on hover/focus
    ├── fd-hovercard__head
    │   ├── fd-hovercard__avatar
    │   ├── fd-hovercard__name
    │   └── fd-hovercard__handle
    ├── fd-hovercard__text
    └── fd-hovercard__meta     // <b> emphasises figures

Examples

Right-aligned panel
<div class="fd-hovercard__content fd-hovercard__content--right"
  role="dialog" aria-label="release detail">
  …
</div>

API Reference

ClassDescriptionDefault
.fd-hovercardRelative wrapper around trigger + content.
.fd-hovercard__triggerDashed-underline trigger; reveals the card on hover / focus.
.fd-hovercard__contentFloating panel; carries role="dialog".
.fd-hovercard__content--rightRight-aligns the panel under the trigger.left
.fd-hovercard__avatarSquare accent avatar with mono initials.
.fd-hovercard__metaMono stat row; <b> emphasises figures.

Progress

.fd-progress

A horizontal bar that reports completion of a task — determinate with a known percentage, or indeterminate while the duration is unknown.

Compiling70%
<div class="fd-progress">
  <div class="fd-progress__meta">
    <span>Compiling</span><span class="fd-progress__value">70%</span>
  </div>
  <div class="fd-progress__track">
    <div class="fd-progress__bar" role="progressbar"
      aria-valuenow="70" aria-valuemin="0" aria-valuemax="100"
      style="width: 70%;"></div>
  </div>
</div>

Usage

<div class="fd-progress">
  <div class="fd-progress__track">
    <div class="fd-progress__bar" role="progressbar"
      aria-valuenow="70" aria-valuemin="0" aria-valuemax="100"
      style="width: 70%;"></div>
  </div>
</div>

Examples

Determinate steps
Upload30%
Complete100%
Quota88%
<div class="fd-progress fd-progress--success">…</div>
<div class="fd-progress fd-progress--warning">…</div>
<div class="fd-progress fd-progress--error">…</div>
Indeterminate
Syncing
<div class="fd-progress fd-progress--indeterminate">
  <div class="fd-progress__track">
    <div class="fd-progress__bar" role="progressbar"
      aria-label="Syncing" aria-valuetext="In progress"></div>
  </div>
</div>

API Reference

ClassDescriptionDefault
.fd-progressWrapper with optional meta row + track.
.fd-progress__trackThe rail; clips the fill bar.
.fd-progress__barAccent fill; width set inline; carries role="progressbar".
.fd-progress__metaMono label + value row above the track.
.fd-progress--successRecolors the fill to the success token.accent
.fd-progress--warningRecolors the fill to the warning token.accent
.fd-progress--errorRecolors the fill to the error token.accent
.fd-progress--indeterminateAnimates a sliding chunk for unknown duration.

Spinner

.fd-spinner

An indeterminate rotary loader for pending work of unknown length, with a complementary three-dot pulse for inline contexts.

<span class="fd-spinner" role="status" aria-label="Loading"></span>

Usage

<span class="fd-spinner" role="status" aria-label="Loading"></span>

Examples

Sizes & tone
<span class="fd-spinner fd-spinner--sm"></span>
<span class="fd-spinner"></span>
<span class="fd-spinner fd-spinner--lg"></span>
<span class="fd-spinner fd-spinner--muted"></span>
Loading dots
<span class="fd-dots" role="status" aria-label="Loading">
  <span></span><span></span><span></span>
</span>

<button class="fd-btn" disabled>
  <span class="fd-spinner fd-spinner--sm" aria-hidden="true"></span> Deploying
</button>

API Reference

ClassDescriptionDefault
.fd-spinnerRotating ring with an accent top arc; role="status".28px
.fd-spinner--smCompact 16px ring for inline / button use.
.fd-spinner--lgProminent 44px ring.
.fd-spinner--mutedForeground arc instead of accent.accent
.fd-dotsThree-dot pulse loader.
.fd-dots--mutedSubtle-colored dots.accent

Skeleton

.fd-skeleton

A shimmering placeholder that mirrors the shape of content while it loads, reducing layout shift and perceived wait.

<div class="fd-skeleton-card" aria-hidden="true">
  <div class="fd-skeleton-row">
    <div class="fd-skeleton fd-skeleton--avatar"></div>
    <div class="fd-skeleton-lines">
      <div class="fd-skeleton fd-skeleton--line w-60"></div>
      <div class="fd-skeleton fd-skeleton--line is-sm w-40"></div>
    </div>
  </div>
  <div class="fd-skeleton fd-skeleton--line"></div>
  <div class="fd-skeleton fd-skeleton--line w-90"></div>
</div>

Usage

<div class="fd-skeleton fd-skeleton--line" aria-hidden="true"></div>
<div class="fd-skeleton fd-skeleton--title" aria-hidden="true"></div>
<div class="fd-skeleton fd-skeleton--avatar" aria-hidden="true"></div>

Examples

Media card
<div class="fd-skeleton-card" aria-hidden="true">
  <div class="fd-skeleton fd-skeleton--thumb"></div>
  <div class="fd-skeleton fd-skeleton--title"></div>
  <div class="fd-skeleton-lines">
    <div class="fd-skeleton fd-skeleton--line"></div>
    <div class="fd-skeleton fd-skeleton--line w-80"></div>
  </div>
  <div class="fd-skeleton fd-skeleton--btn"></div>
</div>

API Reference

ClassDescriptionDefault
.fd-skeletonBase shimmering block; set aria-hidden on the container.
.fd-skeleton--lineFull-width text line placeholder.
.fd-skeleton--titleTaller heading-height block.
.fd-skeleton--avatarRound 44px avatar placeholder.
.fd-skeleton--thumbWide media / thumbnail block.
.fd-skeleton--btnButton-sized block.
.w-40 / .w-60 / .w-80 / .w-90Width helpers for ragged line lengths.100%
.fd-skeleton-cardBordered container that groups placeholders.

Gauge

.fd-gauge

A circular SVG meter that reads a single value at a glance — a ring fill over a track, with the figure and a mono label centered inside.

<!-- r=52 → circumference ≈ 326.7; 72% → dash 235.3 -->
<div class="fd-gauge" role="img" aria-label="Coverage 72 percent">
  <svg viewBox="0 0 120 120">
    <circle class="fd-gauge__track" cx="60" cy="60" r="52"/>
    <circle class="fd-gauge__fill" cx="60" cy="60" r="52"
      stroke-dasharray="235.3 326.7"/>
  </svg>
  <div class="fd-gauge__center"><div>
    <span class="fd-gauge__num">72<span class="fd-gauge__unit">%</span></span>
    <span class="fd-gauge__label">Coverage</span>
  </div></div>
</div>

Usage

<div class="fd-gauge" role="img" aria-label="Coverage 72 percent">
  <svg viewBox="0 0 120 120">
    <circle class="fd-gauge__track" cx="60" cy="60" r="52"/>
    <circle class="fd-gauge__fill" cx="60" cy="60" r="52"
      stroke-dasharray="235.3 326.7"/>
  </svg>
  <div class="fd-gauge__center">…</div>
</div>

Anatomy

fd-gauge                 // role="img" aria-label="…"
├── svg
│   ├── fd-gauge__track  // full ring
│   └── fd-gauge__fill   // value arc (stroke-dasharray) (+ --VARIANT)
└── fd-gauge__center
    ├── fd-gauge__num    // figure (+ fd-gauge__unit)
    └── fd-gauge__label  // mono caption

Examples

Semantic fills
<circle class="fd-gauge__fill fd-gauge__fill--success" …/>
<circle class="fd-gauge__fill fd-gauge__fill--warning" …/>
<circle class="fd-gauge__fill fd-gauge__fill--error" …/>
Compact
<div class="fd-gauge fd-gauge--sm" role="img" aria-label="Coverage 72 percent">
  …
</div>

API Reference

ClassDescriptionDefault
.fd-gaugeCircular meter wrapper; carries role="img" + label.112px
.fd-gauge--smCompact 84px gauge; hides the caption.
.fd-gauge__trackFull background ring.
.fd-gauge__fillValue arc; set stroke-dasharray for the percentage.accent
.fd-gauge__fill--successSuccess-colored arc (also --warning, --error).accent
.fd-gauge__numCentered figure (+ .fd-gauge__unit).
.fd-gauge__labelMono uppercase caption below the figure.

Empty

.fd-empty

A centered placeholder for the no-data, no-results, or first-run state — an icon, a title, a line of guidance, and an optional call to action.

No components yet

Nothing has been cast into this registry. Pull a section to populate the catalog.

<div class="fd-empty">
  <span class="fd-empty__icon" aria-hidden="true"><svg>…</svg></span>
  <div class="fd-empty__title">No components yet</div>
  <p class="fd-empty__text">Pull a section to populate the catalog.</p>
  <div class="fd-empty__actions">
    <button class="fd-btn fd-btn--primary">Pull section</button>
  </div>
</div>

Usage

<div class="fd-empty">
  <span class="fd-empty__icon" aria-hidden="true"><svg>…</svg></span>
  <div class="fd-empty__title">No results</div>
  <p class="fd-empty__text">Try a different query.</p>
</div>

Examples

No results
No matches

No tokens matched “--accent-soft”. Check the spelling or clear the filter.

<div class="fd-empty">
  <span class="fd-empty__icon" aria-hidden="true"><svg>…</svg></span>
  <div class="fd-empty__title">No matches</div>
  <p class="fd-empty__text">No tokens matched the query.</p>
  <div class="fd-empty__actions">
    <button class="fd-btn fd-btn--ghost">Clear filter</button>
  </div>
</div>
Compact
Inbox zero

No pending notifications.

<div class="fd-empty fd-empty--compact">
  <span class="fd-empty__icon" aria-hidden="true"><svg>…</svg></span>
  <div class="fd-empty__title">Inbox zero</div>
  <p class="fd-empty__text">No pending notifications.</p>
</div>

API Reference

ClassDescriptionDefault
.fd-emptyCentered dashed-border empty-state container.
.fd-empty--compactTighter padding and smaller icon for panels.
.fd-empty__iconFramed leading glyph; aria-hidden.
.fd-empty__titleDisplay-weight heading.
.fd-empty__textOne line of guidance copy.
.fd-empty__actionsOptional centered call-to-action row.
[05]// COMPONENTS / OVERLAYS

Overlays

Layered surfaces summoned on demand — dialogs, sheets, popovers, menus and the command palette.

Dialog

.fd-modal

A modal window overlaid on the page that interrupts the flow to demand a focused decision, with backdrop blur, focus trap, and Esc-to-close.

<button data-fd-modal-open="ov-dialog">Pour the Cast</button>

<div class="fd-modal" data-fd-modal="ov-dialog">
  <div class="fd-modal__backdrop" data-fd-modal-close></div>
  <div class="fd-modal__panel" role="dialog" aria-modal="true" aria-labelledby="ov-dialog-t">
    <div class="fd-overlay__header">
      <h3 class="fd-overlay__title" id="ov-dialog-t">Pour the Cast</h3>
      <button class="fd-overlay__close" data-fd-modal-close aria-label="Close dialog"></button>
    </div>
    <div class="fd-overlay__body">…</div>
    <div class="fd-overlay__footer">
      <button data-fd-modal-close>Cancel</button>
      <button data-fd-modal-close>Confirm</button>
    </div>
  </div>
</div>

Usage

<button data-fd-modal-open="id">Open</button>
<div class="fd-modal" data-fd-modal="id">
  <div class="fd-modal__backdrop" data-fd-modal-close></div>
  <div class="fd-modal__panel" role="dialog" aria-modal="true">…</div>
</div>

Anatomy

fd-modal                 // fixed full-screen layer (data-fd-modal=ID)
├── fd-modal__backdrop   // blurred click-to-close scrim (data-fd-modal-close)
└── fd-modal__panel      // role="dialog" aria-modal="true"
    ├── fd-overlay__header
    │   ├── fd-overlay__eyebrow
    │   ├── fd-overlay__title
    │   └── fd-overlay__close   (data-fd-modal-close)
    ├── fd-overlay__body
    └── fd-overlay__footer

Examples

Scrollable body
<div class="fd-modal__panel" role="dialog" aria-modal="true">
  <div class="fd-overlay__header">…</div>
  <!-- body scrolls; header + footer stay pinned -->
  <div class="fd-overlay__body">
    <p>Section 01…</p> <p>Section 02…</p> … <p>Section 05…</p>
  </div>
  <div class="fd-overlay__footer">…</div>
</div>
Form dialog
<div class="fd-overlay__body">
  <div class="fd-overlay__field">
    <label class="fd-overlay__label" for="name">Unit name</label>
    <input class="fd-overlay__input" id="name" type="text" placeholder="FND-0451" />
  </div>
</div>
<div class="fd-overlay__footer">
  <button data-fd-modal-close>Cancel</button>
  <button class="fd-surface-btn--primary" data-fd-modal-close>Create</button>
</div>

API Reference

Class / HookDescriptionDefault
.fd-modalFixed full-screen overlay layer that centers its panel.
data-fd-modal="ID"Identifies the overlay so triggers can target it.
data-fd-modal-open="ID"On a trigger; opens the overlay with the matching id.
data-fd-modal-closeOn backdrop / button; dismisses the open overlay.
.fd-modal__panelThe dialog surface; carries role="dialog".
.is-openRuntime state class that reveals the overlay.off

Alert Dialog

.fd-modal--alert

A destructive-confirm dialog that interrupts to require an explicit, irreversible choice — role="alertdialog" with an emphasised destructive action.

[×] // DESTRUCTIVE

Delete this unit?

This permanently removes FND-0451 and all of its cast history. This action cannot be undone.

<button class="fd-surface-btn--danger" data-fd-modal-open="ov-alert">Delete Unit</button>

<div class="fd-modal fd-modal--alert" data-fd-modal="ov-alert">
  <div class="fd-modal__backdrop" data-fd-modal-close></div>
  <div class="fd-modal__panel" role="alertdialog" aria-modal="true"
       aria-labelledby="ov-alert-t" aria-describedby="ov-alert-d">
    <div class="fd-overlay__header">
      <span class="fd-overlay__eyebrow--danger">[×] // DESTRUCTIVE</span>
      <h3 class="fd-overlay__title" id="ov-alert-t">Delete this unit?</h3>
    </div>
    <div class="fd-overlay__body" id="ov-alert-d">…</div>
    <div class="fd-overlay__footer">
      <button data-fd-modal-close>Cancel</button>
      <button class="fd-surface-btn--danger" data-fd-modal-close>Delete permanently</button>
    </div>
  </div>
</div>

Usage

<div class="fd-modal fd-modal--alert" data-fd-modal="id">
  <div class="fd-modal__backdrop" data-fd-modal-close></div>
  <div class="fd-modal__panel" role="alertdialog" aria-modal="true">…</div>
</div>

Examples

No backdrop dismiss
[×] // CRITICAL

Wipe the entire index?

The backdrop here is non-dismissing — drop data-fd-modal-close from it so users must choose an explicit button.

<!-- Backdrop without data-fd-modal-close = cannot dismiss by clicking out -->
<div class="fd-modal__backdrop"></div>
<div class="fd-modal__panel" role="alertdialog" aria-modal="true">
  …
  <div class="fd-overlay__footer">
    <button data-fd-modal-close>Keep index</button>
    <button class="fd-surface-btn--danger" data-fd-modal-close>Wipe everything</button>
  </div>
</div>

API Reference

Class / HookDescriptionDefault
.fd-modal--alertVariant that tightens the panel and styles for a confirm.
role="alertdialog"On the panel; signals an urgent, focus-stealing prompt.
.fd-overlay__eyebrow--dangerError-toned eyebrow for the destructive label.
.fd-surface-btn--dangerThe emphasised destructive confirm action.

Sheet

.fd-drawer

An edge-anchored panel that slides in over the page for filters, details, or secondary navigation without leaving the current context.

<button data-fd-drawer-open="ov-sheet">Open Manifest</button>

<div class="fd-drawer" data-fd-drawer="ov-sheet">
  <div class="fd-drawer__backdrop" data-fd-drawer-close></div>
  <div class="fd-drawer__panel" role="dialog" aria-modal="true" aria-labelledby="ov-sheet-t">
    <div class="fd-overlay__header">
      <h3 class="fd-overlay__title" id="ov-sheet-t">Build Manifest</h3>
      <button class="fd-overlay__close" data-fd-drawer-close aria-label="Close sheet"></button>
    </div>
    <div class="fd-overlay__body">…</div>
    <div class="fd-overlay__footer">…</div>
  </div>
</div>

Usage

<button data-fd-drawer-open="id">Open</button>
<div class="fd-drawer" data-fd-drawer="id">
  <div class="fd-drawer__backdrop" data-fd-drawer-close></div>
  <div class="fd-drawer__panel" role="dialog" aria-modal="true">…</div>
</div>

Anatomy

fd-drawer                 // fixed full-screen layer (data-fd-drawer=ID)
├── fd-drawer__backdrop   // click-to-close scrim (data-fd-drawer-close)
└── fd-drawer__panel      // edge-anchored sliding surface, role="dialog"
    ├── fd-overlay__header (reused from dialog)
    ├── fd-overlay__body
    └── fd-overlay__footer

Examples

Side variants
<!-- Left edge -->
<div class="fd-drawer fd-drawer--left" data-fd-drawer="left">…</div>

<!-- Top edge -->
<div class="fd-drawer fd-drawer--top" data-fd-drawer="top">…</div>

API Reference

Class / HookDescriptionDefault
.fd-drawerFixed overlay; panel anchors to the right by default.
.fd-drawer--leftAnchors and slides the panel from the left edge.right
.fd-drawer--topDrops a full-width panel down from the top edge.right
data-fd-drawer-open="ID"On a trigger; opens the sheet with the matching id.
data-fd-drawer-closeOn backdrop / button; dismisses the sheet.

Popover

.fd-popover

A non-modal floating surface anchored to its trigger, for rich content and quick controls — toggles open, closes on outside-click and Esc.

<div class="fd-popover">
  <button class="fd-popover__trigger fd-surface-btn" data-fd-popover-trigger aria-expanded="false">
    Dimensions
  </button>
  <div class="fd-popover__content" role="dialog" aria-label="Dimensions">
    <span class="fd-popover__eyebrow">// CAST PARAMETERS</span>
    <p class="fd-popover__text">Set the bounding box for the cast unit.</p>
    <div class="fd-popover__row"><span class="fd-popover__key">Width</span><span class="fd-popover__val">320 PX</span></div>
  </div>
</div>

Usage

<div class="fd-popover">
  <button class="fd-popover__trigger" data-fd-popover-trigger aria-expanded="false">Open</button>
  <div class="fd-popover__content" role="dialog">…</div>
</div>

Anatomy

fd-popover                  // positioning context (relative)
├── fd-popover__trigger     // data-fd-popover-trigger, aria-expanded
└── fd-popover__content     // role="dialog"; toggled by .is-open
    ├── fd-popover__eyebrow
    ├── fd-popover__text
    └── fd-popover__row × n  (fd-popover__key + fd-popover__val)

Examples

Aligned end
<div class="fd-popover">
  <button class="fd-popover__trigger fd-surface-btn" data-fd-popover-trigger aria-expanded="false" aria-label="More options">…</button>
  <div class="fd-popover__content fd-popover__content--end" role="dialog">…</div>
</div>
Hover Card
<div class="fd-hovercard">
  <button class="fd-hovercard__trigger">@nature-unit</button>
  <div class="fd-hovercard__content" role="tooltip">
    <div class="fd-hovercard__top">…</div>
    <p class="fd-hovercard__body">Revealed on hover / focus-within.</p>
  </div>
</div>

API Reference

Class / HookDescriptionDefault
.fd-popoverRelative positioning context for the floating content.
data-fd-popover-triggerOn the trigger; toggles .is-open and aria-expanded.
.fd-popover__contentThe floating surface; carries role="dialog".
.fd-popover__content--endRight-aligns the content to the trigger.start
.fd-hovercardCSS-only card revealed on hover / focus-within.

Dropdown Menu

.fd-menu

A button-triggered list of actions with labels, icons, shortcuts, and destructive items — opens on click, closes on selection, outside-click, or Esc.

<div class="fd-menu">
  <button class="fd-menu__trigger" data-fd-menu-trigger aria-expanded="false" aria-haspopup="menu">
    Actions
    <svg viewBox="0 0 24 24"><path d="m6 9 6 6 6-6"/></svg>
  </button>
  <div class="fd-menu__list" role="menu" aria-label="Actions">
    <span class="fd-menu__label">FILE</span>
    <button class="fd-menu__item" role="menuitem">New Cast <span class="fd-menu__item-shortcut">⌘N</span></button>
    <hr class="fd-menu__separator" role="separator">
    <button class="fd-menu__item fd-menu__item--danger" role="menuitem">Delete Unit</button>
  </div>
</div>

Usage

<div class="fd-menu">
  <button class="fd-menu__trigger" data-fd-menu-trigger aria-expanded="false" aria-haspopup="menu">Actions</button>
  <div class="fd-menu__list" role="menu">
    <button class="fd-menu__item" role="menuitem">New Cast</button>
  </div>
</div>

Examples

Grouped & labelled
<div class="fd-menu__list" role="menu">
  <span class="fd-menu__label">SESSION</span>
  <button class="fd-menu__item" role="menuitem">Profile</button>
  <hr class="fd-menu__separator" role="separator">
  <span class="fd-menu__label">TEAM</span>
  <button class="fd-menu__item" role="menuitem">Invite member</button>
  <hr class="fd-menu__separator" role="separator">
  <button class="fd-menu__item fd-menu__item--danger" role="menuitem">Sign out</button>
</div>

API Reference

Class / HookDescriptionDefault
data-fd-menu-triggerOn the trigger; toggles .is-open on the menu.
.fd-menu__listThe floating list; carries role="menu".
.fd-menu__itemAn actionable row; clicking it closes the menu.
.fd-menu__item--dangerError-toned destructive item.
.fd-menu__labelMono uppercase group heading inside the list.
.fd-menu__separatorHairline rule between groups of items.

Context Menu

.fd-context

A right-click menu summoned at the cursor over a target region, clamped to the viewport and dismissed on outside-click, scroll, or Esc.

[ RIGHT-CLICK HERE ] Cast surface · FND-0451
<div class="fd-context" data-fd-context>
  <div class="fd-context__trigger" data-fd-context-trigger tabindex="0" role="button">
    Right-click here
  </div>
  <div class="fd-context__menu" role="menu" aria-label="Cast actions">
    <button class="fd-context__item" role="menuitem">Open</button>
    <hr class="fd-context__separator" role="separator">
    <button class="fd-context__item fd-context__item--danger" role="menuitem">Delete</button>
  </div>
</div>

Usage

<div class="fd-context" data-fd-context>
  <div class="fd-context__trigger" data-fd-context-trigger tabindex="0">Right-click here</div>
  <div class="fd-context__menu" role="menu">…items…</div>
</div>

Anatomy

fd-context                  // wrapper (data-fd-context)
├── fd-context__trigger     // right-click target (data-fd-context-trigger)
└── fd-context__menu        // role="menu"; positioned at the cursor on open
    ├── fd-context__item × n (optional fd-context__shortcut)
    ├── fd-context__separator
    └── fd-context__item--danger

Examples

With inset checks
[ RIGHT-CLICK ] View options
<div class="fd-context__menu" role="menu">
  <span class="fd-context__label">VIEW</span>
  <button class="fd-context__item fd-context__item--check is-on"
          role="menuitemcheckbox" aria-checked="true">Grid overlay</button>
  <button class="fd-context__item fd-context__item--check"
          role="menuitemcheckbox" aria-checked="false">Crosshairs</button>
</div>

API Reference

Class / HookDescriptionDefault
data-fd-contextMarks the wrapper as a context-menu host.
data-fd-context-triggerThe right-click target region.
.fd-context__menuCursor-positioned menu; carries role="menu".
.fd-context__item--checkCheckable item; toggle .is-on + aria-checked.
.fd-context__item--dangerError-toned destructive item.

Command

.fd-command

A fast, filterable command palette — type to narrow items, arrow keys to move, Enter to run. ⌘K / Ctrl K opens it globally.

<div class="fd-command" data-fd-command role="dialog" aria-label="Command palette">
  <div class="fd-command__bar">
    <input class="fd-command__input" data-fd-command-input placeholder="Type a command…" />
  </div>
  <div class="fd-command__list" data-fd-command-list role="listbox">
    <span class="fd-command__group">ACTIONS</span>
    <button class="fd-command__item" data-fd-command-item data-fd-command-value="New Cast Unit" role="option">
      New Cast Unit<span class="fd-command__shortcut">⌘N</span>
    </button>
  </div>
</div>

Usage

<div class="fd-command" data-fd-command>
  <input class="fd-command__input" data-fd-command-input placeholder="Type a command…" />
  <div class="fd-command__list" data-fd-command-list role="listbox">
    <button class="fd-command__item" data-fd-command-item data-fd-command-value="New" role="option">New</button>
  </div>
</div>

Anatomy

fd-command                   // data-fd-command (filter + arrow/Enter engine)
├── fd-command__bar
│   ├── fd-command__search   // search glyph
│   ├── fd-command__input    // data-fd-command-input
│   └── fd-command__kbd      // ESC hint
└── fd-command__list         // data-fd-command-list, role="listbox"
    ├── fd-command__group    // section heading
    └── fd-command__item × n // data-fd-command-item + data-fd-command-value
        └── fd-command__shortcut

Examples

Global ⌘K palette

Press ⌘K (or Ctrl K) anywhere to open the palette mounted in a dialog with id command-dialog. The runtime focuses the input and resets the filter.

<!-- Mount the palette inside the modal with id "command-dialog" -->
<div class="fd-modal fd-modal--command" data-fd-modal="command-dialog">
  <div class="fd-modal__backdrop" data-fd-modal-close></div>
  <div class="fd-modal__panel" role="dialog" aria-modal="true" aria-label="Command palette">
    <div class="fd-command" data-fd-command>
      <input class="fd-command__input" data-fd-command-input placeholder="Type a command…" />
      <div class="fd-command__list" data-fd-command-list role="listbox">
        <button class="fd-command__item" data-fd-command-item data-fd-command-value="Dialog"
                data-fd-href="#comp-dialog" role="option">Dialog</button>
      </div>
    </div>
  </div>
</div>
<!-- ⌘K / Ctrl+K opens it globally (handled by the runtime). -->

API Reference

Class / HookDescriptionDefault
data-fd-commandMarks the palette; enables filter + keyboard nav.
data-fd-command-inputThe text field; filters items as you type.
data-fd-command-itemA result row; carries role="option".
data-fd-command-valueLowercased substring matched against the query.
data-fd-hrefOn an item; jumps to that hash when activated.
data-fd-modal="command-dialog"The id the global ⌘K shortcut opens.

Menubar

.fd-menubar

A desktop-style horizontal menu bar — click a top-level trigger to open its menu, then hover sibling triggers to switch. Outside-click and Esc close.

<div class="fd-menubar" data-fd-menubar>
  <div class="fd-menubar__menu">
    <button class="fd-menubar__trigger" data-fd-menubar-trigger aria-expanded="false" aria-haspopup="menu">File</button>
    <div class="fd-menubar__content" role="menu" aria-label="File">
      <button class="fd-menubar__item" role="menuitem">New Cast <span class="fd-menubar__shortcut">⌘N</span></button>
      <hr class="fd-menubar__separator" role="separator">
      <button class="fd-menubar__item" role="menuitem">Export</button>
    </div>
  </div>
  <!-- repeat .fd-menubar__menu for Edit, View… -->
</div>

Usage

<div class="fd-menubar" data-fd-menubar>
  <div class="fd-menubar__menu">
    <button class="fd-menubar__trigger" data-fd-menubar-trigger aria-expanded="false">File</button>
    <div class="fd-menubar__content" role="menu">…</div>
  </div>
</div>

Anatomy

fd-menubar                   // data-fd-menubar (one bar)
└── fd-menubar__menu × n      // one top-level entry
    ├── fd-menubar__trigger   // data-fd-menubar-trigger, aria-expanded
    └── fd-menubar__content   // role="menu"; revealed by .is-open
        ├── fd-menubar__item × n  (optional fd-menubar__shortcut)
        ├── fd-menubar__item--check
        └── fd-menubar__separator

Examples

Compact bar
<!-- Add --compact for a tighter, denser bar -->
<div class="fd-menubar fd-menubar--compact" data-fd-menubar>
  <div class="fd-menubar__menu">…</div>
</div>

API Reference

Class / HookDescriptionDefault
data-fd-menubarMarks the bar; enables click-open + hover-switch.
.fd-menubar__menuOne top-level entry holding a trigger + content.
data-fd-menubar-triggerTop-level button; toggles its menu.
.fd-menubar__contentThe dropped menu; carries role="menu".
.fd-menubar--compactTighter padding and type for dense bars.
[07]// COMPONENTS / DATA

Data Display

Present structured information — tables, cards, avatars, carousels, and space-management primitives.

Table

.fd-table

A responsive technical table for tabular data — mono uppercase headers, hairline row rules, right-aligned numeric columns, and inline status badges.

f(x) → NATURE · TYPEFACE REGISTRY
Glyph Set Designer Status Weights Licenses
Shikaku Grotesk
BSF-001
H. Mercer Shipped 9 1,204
Archivo Expanded
BSF-014
O. Petrova In Nature 6 388
Shikaku Mono
BSF-027
L. Okafor Review 5 96
Acid Display
BSF-031
R. Vasquez Halted 2 0
<div class="fd-table-wrap">
  <table class="fd-table">
    <caption>f(x) → NATURE · TYPEFACE REGISTRY</caption>
    <thead>
      <tr>
        <th scope="col">Glyph Set</th>
        <th scope="col">Status</th>
        <th scope="col" class="fd-table__num">Weights</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td><span class="fd-table__strong">Shikaku Grotesk</span></td>
        <td><span class="fd-table__status fd-table__status--success">Shipped</span></td>
        <td class="fd-table__num">9</td>
      </tr>
    </tbody>
  </table>
</div>

Usage

<div class="fd-table-wrap">
  <table class="fd-table"> … </table>
</div>

Anatomy

fd-table-wrap          // overflow + frame
└─ fd-table            // <table>
   ├─ caption          // mono uppercase title
   ├─ thead › th       // mono header cell
   │  └─ fd-table__num // right-aligned numeric header
   └─ tbody › td
      ├─ fd-table__strong  // primary identifier
      ├─ fd-table__id      // mono secondary id
      ├─ fd-table__num     // tabular numeric cell
      └─ fd-table__status  // inline status badge

Examples

Bordered grid
Build Channel Size KB Δ
v2.4.0stable42.8−1.2
v2.5.0-rccanary44.1+1.3
v2.5.0-rc.2canary43.6−0.5
<table class="fd-table fd-table--bordered">
  <thead>
    <tr>
      <th>Build</th>
      <th class="fd-table__num">Size KB</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td class="fd-table__id">v2.4.0</td>
      <td class="fd-table__num">42.8</td>
    </tr>
  </tbody>
</table>
Status badges
Shipped In Nature Review Halted Draft
<span class="fd-table__status fd-table__status--success">Shipped</span>
<span class="fd-table__status fd-table__status--accent">In Nature</span>
<span class="fd-table__status fd-table__status--warning">Review</span>
<span class="fd-table__status fd-table__status--error">Halted</span>
<span class="fd-table__status">Draft</span>

API Reference

ClassDescriptionDefault
.fd-table-wrapOverflow container with a hairline frame; wrap every table.
.fd-tableBase table — mono headers, row hairlines, hover rows.required
.fd-table--borderedAdds vertical cell rules for a full grid.
.fd-table__strongPrimary identifier cell, full-strength foreground.
.fd-table__idMono secondary identifier (codes, versions).
.fd-table__numRight-aligned tabular numeric column.
.fd-table__statusInline status badge with a leading dot.neutral
.fd-table__status--*Variant: success, warning, error, accent.

Data Table

.fd-table--data

A full data grid: a toolbar with search and an action, sortable-looking column headers with sort glyphs, a status column, row selection, and hover affordances.

42 ROWS
Status Δ KB
v2.5.0-rc.2 O. Petrova Passed 1m 04s −0.5
v2.5.0-rc H. Mercer Running 0m 51s +1.3
v2.4.1 L. Okafor Queued 0.0
v2.4.0 R. Vasquez Failed 0m 38s −1.2
<div class="fd-datatable">
  <div class="fd-datatable__toolbar">
    <div class="fd-datatable__search">
      <span class="fd-datatable__search-icon"><svg>…</svg></span>
      <input class="fd-datatable__input" type="search" placeholder="FILTER BUILDS…" />
    </div>
    <button class="fd-datatable__btn">New Build</button>
  </div>
  <div class="fd-table-wrap">
    <table class="fd-table fd-table--data">
      <thead><tr>
        <th><button class="fd-table__sort is-asc">Build
          <span class="fd-table__sort-glyph"></span></button></th>
        <th>Status</th>
      </tr></thead>
      <tbody>
        <tr class="is-selected">
          <td><span class="fd-table__strong">v2.5.0-rc</span></td>
          <td><span class="fd-table__status fd-table__status--accent">Running</span></td>
        </tr>
      </tbody>
    </table>
  </div>
</div>

Usage

<div class="fd-datatable">
  <div class="fd-datatable__toolbar"> … </div>
  <table class="fd-table fd-table--data"> … </table>
  <div class="fd-datatable__footer"> … </div>
</div>

Examples

Sort glyph states
<button class="fd-table__sort">Default
  <span class="fd-table__sort-glyph"></span></button>
<button class="fd-table__sort is-asc">Ascending
  <span class="fd-table__sort-glyph"></span></button>
<button class="fd-table__sort is-desc">Descending
  <span class="fd-table__sort-glyph"></span></button>
Toolbar only
128 ROWS
<div class="fd-datatable__toolbar">
  <div class="fd-datatable__search">
    <span class="fd-datatable__search-icon"><svg>…</svg></span>
    <input class="fd-datatable__input" type="search" placeholder="FILTER GLYPHS…" />
  </div>
  <div class="fd-datatable__actions">
    <span class="fd-datatable__count">128 ROWS</span>
    <button class="fd-datatable__btn">Export</button>
  </div>
</div>

API Reference

ClassDescriptionDefault
.fd-datatableGrid shell: toolbar + table + footer, framed.
.fd-datatable__toolbarTop bar holding the search field and actions.
.fd-datatable__searchSearch input with a leading magnifier icon.
.fd-datatable__btnPrimary lime toolbar action button.
.fd-table--dataGrid styling: tighter rows, sortable headers.
.fd-table__sortHeader button rendering a sort glyph.unsorted
.is-asc / .is-descActive sort direction on a sort button.
.fd-table__checkNarrow selection column for checkboxes.
tr.is-selectedHighlighted selected row.
.fd-datatable__footerBottom bar with selection meta + pagination.

Card

.fd-card

A bordered surface that groups related content into a header, body, and footer — with an optional crosshair-framed variant.

001 TYPEFACE

Shikaku Grotesk

v2.5
A heavy display grotesque cut for headlines and technical signage. Nine weights, variable axis, OFL-1.1 licensed.
<div class="fd-card">
  <div class="fd-card__header">
    <div>
      <span class="fd-card__eyebrow"><span class="fd-card__idx">001</span> TYPEFACE</span>
      <h4 class="fd-card__title">Shikaku Grotesk</h4>
    </div>
    <span class="fd-card__header-aside">v2.5</span>
  </div>
  <div class="fd-card__body">A heavy display grotesque cut for headlines…</div>
  <div class="fd-card__footer">
    <span class="fd-card__meta">1,204 GLYPHS</span>
    <button class="fd-surface-btn fd-surface-btn--primary">Install</button>
  </div>
</div>

Usage

<div class="fd-card">
  <div class="fd-card__header"> … </div>
  <div class="fd-card__body"> … </div>
  <div class="fd-card__footer"> … </div>
</div>

Anatomy

fd-card
├─ fd-card__header
│  ├─ fd-card__eyebrow › fd-card__idx
│  ├─ fd-card__title
│  └─ fd-card__header-aside
├─ fd-card__body
└─ fd-card__footer
   ├─ fd-card__meta
   └─ fd-surface-btn

Examples

Crosshair frame
031 EXPERIMENT

Acid Display

Sharp high-contrast display face under active iteration in the nature. Not yet shipped.
<div class="fd-frame fd-frame--crosshair fd-card fd-card--crosshair">
  <span class="fd-crosshair fd-crosshair--tl"></span>
  <span class="fd-crosshair fd-crosshair--tr"></span>
  <span class="fd-crosshair fd-crosshair--bl"></span>
  <span class="fd-crosshair fd-crosshair--br"></span>
  <div class="fd-card__header"> … </div>
  <div class="fd-card__body"> … </div>
  <div class="fd-card__footer"> … </div>
</div>
Context card
Olga Petrova LEAD · TYPE

Owns the variable axis pipeline and ships the canary channel weekly.

<div class="fd-context-card">
  <div class="fd-context-card__top">
    <span class="fd-context-card__avatar">OP</span>
    <div class="fd-context-card__id">
      <span class="fd-context-card__name">Olga Petrova</span>
      <span class="fd-context-card__meta">LEAD · TYPE</span>
    </div>
  </div>
  <p class="fd-context-card__body">Owns the variable axis pipeline…</p>
  <div class="fd-context-card__actions"> … </div>
</div>

API Reference

ClassDescriptionDefault
.fd-cardBordered surface; flex column, 360px max width.
.fd-card__headerTop region — eyebrow, title, and aside.
.fd-card__eyebrowMono uppercase label with an accent index.
.fd-card__titleDisplay heading of the card.
.fd-card__bodyMain content region with relaxed leading.
.fd-card__footerBottom region — meta + actions on a subtle bar.
.fd-card--crosshairPairs with .fd-frame--crosshair for corner marks.
.fd-context-cardCompact avatar + identity + actions card.

Avatar

.fd-avatar

An image or initials representing a user, with shape and size variants, a presence status dot, and an overlapping group stack.

<span class="fd-avatar fd-avatar--md" role="img" aria-label="Olga Petrova">
  <span class="fd-avatar__fallback" aria-hidden="true">OP</span>
  <span class="fd-avatar__status fd-avatar__status--online"></span>
</span>

Usage

<span class="fd-avatar fd-avatar--md" role="img" aria-label="Olga Petrova">
  <span class="fd-avatar__fallback" aria-hidden="true">OP</span>
</span>

Examples

Sizes & shapes
<span class="fd-avatar fd-avatar--sm">…</span>
<span class="fd-avatar fd-avatar--md">…</span>
<span class="fd-avatar fd-avatar--lg">…</span>
<span class="fd-avatar fd-avatar--md fd-avatar--square">…</span>
<span class="fd-avatar fd-avatar--lg fd-avatar--square fd-avatar--accent">…</span>
Status dots
<span class="fd-avatar fd-avatar--md">
  <span class="fd-avatar__fallback">ON</span>
  <span class="fd-avatar__status fd-avatar__status--online"></span>
</span>
<!-- --busy · --away · (none = offline) -->
Overlapping group
<div class="fd-avatar-group" role="group" aria-label="Type team, 5 members">
  <span class="fd-avatar fd-avatar--md" role="img" aria-label="Hana Mercer">
    <span class="fd-avatar__fallback" aria-hidden="true">HM</span>
  </span>
  <!-- … more avatars … -->
  <span class="fd-avatar fd-avatar--md fd-avatar-group__more" aria-hidden="true">
    <span class="fd-avatar__fallback">+8</span>
  </span>
</div>

API Reference

ClassDescriptionDefault
.fd-avatarBase circular avatar with initials fallback.
.fd-avatar--sm / md / lgSize variants — 28 / 40 / 56px.md
.fd-avatar--squareRounded-square instead of circle.
.fd-avatar--accentLime fill for bot / system avatars.
.fd-avatar__fallbackInitials shown when no image is set.
.fd-avatar__statusPresence dot; --online / --busy / --away.offline
.fd-avatar-groupOverlapping stack; hover lifts a member.
.fd-avatar-group__moreOverflow counter chip (e.g. +8).

Aspect Ratio

.fd-aspect

Constrains content to a fixed width-to-height ratio via a --ratio custom property — for media, embeds, and placeholders.

16 : 9
<div class="fd-aspect" style="--ratio: 16/9">
  <div class="fd-aspect__fill">
    <span class="fd-aspect__label">16 : 9</span>
  </div>
</div>

Usage

<div class="fd-aspect" style="--ratio: 16/9">
  <img class="fd-aspect__fill" src="cover.webp" alt="Cover" />
</div>

Examples

Ratios
1:1
4:3
16:9
<div class="fd-aspect" style="--ratio: 1/1">…</div>
<div class="fd-aspect" style="--ratio: 4/3">…</div>
<div class="fd-aspect" style="--ratio: 16/9">…</div>

API Reference

ClassDescriptionDefault
.fd-aspectRatio box; reads --ratio for aspect-ratio.16/9
--ratioCustom property, e.g. 1/1, 4/3, 21/9.16/9
.fd-aspect__fillChild that covers the box (img, iframe, div).
.fd-aspect__labelCentered mono placeholder label.

Scroll Area

.fd-scrollarea

A framed, scrollable region with a thin custom scrollbar that keeps overflowing content contained without breaking the layout.

CHANGELOG
  • v2.5.0-rc.2 Hinting pass on lowercase descenders.
  • v2.5.0-rc.1 New variable weight axis 100–900.
  • v2.4.1 Fixed kerning between A and V.
  • v2.4.0 Added Archivo Expanded to the registry.
  • v2.3.2 Recompressed woff2 payloads, −1.2 KB.
  • v2.3.1 Patched ligature table for fi / fl.
  • v2.3.0 Shikaku Mono entered review.
  • v2.2.0 Acid Display experiment opened.
<div class="fd-scrollarea" tabindex="0" role="region" aria-label="Changelog">
  <span class="fd-scrollarea__head">CHANGELOG</span>
  <ul class="fd-scrollarea__list">
    <li><span class="fd-scrollarea__ver">v2.5.0-rc.2</span> … </li>
  </ul>
</div>

Usage

<div class="fd-scrollarea" tabindex="0" role="region" aria-label="Changelog">
  … overflowing content …
</div>

Examples

Horizontal
Thin 100 Light 300 Regular 400 Medium 500 Bold 700 Black 900
<div class="fd-scrollarea fd-scrollarea--x" tabindex="0"
     role="region" aria-label="Weight axis">
  <div class="fd-scrollarea__rail">
    <span class="fd-scrollarea__chip">Thin 100</span> …
  </div>
</div>

API Reference

ClassDescriptionDefault
.fd-scrollareaFramed scroll region with a thin scrollbar.vertical
.fd-scrollarea--xHorizontal scrolling variant.
.fd-scrollarea__headSticky mono label at the top of the region.
.fd-scrollarea__railHorizontal flex row of items.
tabindex="0"Makes the region keyboard-scrollable.required

Resizable

.fd-resizable

A two-pane layout where the first pane can be dragged wider or narrower via a native CSS resize handle.

SIDEBAR

Drag the handle →

CANVAS

This pane fills the remaining width.

<div class="fd-resizable">
  <div class="fd-resizable__pane fd-resizable__pane--first">
    <span class="fd-resizable__label">SIDEBAR</span>
    <span class="fd-resizable__handle" aria-hidden="true"></span>
  </div>
  <div class="fd-resizable__pane">
    <span class="fd-resizable__label">CANVAS</span>
  </div>
</div>

Usage

<div class="fd-resizable">
  <div class="fd-resizable__pane fd-resizable__pane--first"> … </div>
  <div class="fd-resizable__pane"> … </div>
</div>

Examples

Code + preview split
SOURCE .fd-card { }
<div class="fd-resizable">
  <div class="fd-resizable__pane fd-resizable__pane--first">
    <code class="fd-resizable__code">.fd-card { }</code>
    <span class="fd-resizable__handle"></span>
  </div>
  <div class="fd-resizable__pane fd-resizable__pane--center"> … </div>
</div>

API Reference

ClassDescriptionDefault
.fd-resizableTwo-pane flex row with a hairline frame.
.fd-resizable__paneA single pane region.
.fd-resizable__pane--firstResizable pane — resize: horizontal.
.fd-resizable__handleVisible grip cue at the pane's edge.
.fd-resizable__labelMono uppercase pane label.

Description

.fd-desc

A key/value metadata list rendered as a two-column grid of mono term labels and foreground values.

Version
2.5.0-rc.2
License
SIL Open Font · OFL-1.1
Glyphs
1,204 across 9 weights
Format
woff2 · variable
Updated
2026 · 06 · 18
<dl class="fd-desc">
  <div class="fd-desc__row"><dt>Version</dt><dd>2.5.0-rc.2</dd></div>
  <div class="fd-desc__row">
    <dt>License</dt>
    <dd>SIL Open Font · <span class="fd-inline-code">OFL-1.1</span></dd>
  </div>
</dl>

Usage

<dl class="fd-desc">
  <div class="fd-desc__row"><dt>Key</dt><dd>Value</dd></div>
</dl>

Examples

Inline (stacked)
Designer
H. Mercer
Channel
canary · --theme dark
Footprint
43.6 KB woff2
<dl class="fd-desc fd-desc--inline">
  <div class="fd-desc__row"><dt>Designer</dt><dd>H. Mercer</dd></div>
  <div class="fd-desc__row"><dt>Footprint</dt><dd>43.6 KB woff2</dd></div>
</dl>

API Reference

ClassDescriptionDefault
.fd-descTwo-column key/value grid, framed.
.fd-desc__rowPairs a dt with its dd (display: contents).
.fd-desc dtMono uppercase term on a subtle background.
.fd-desc ddForeground value cell.
.fd-desc--inlineStacked single-column variant.