Card Title
Card Subtitle
Label text
Single-page catalogue of every component in the Vanilla Lexicon kit. Copy markup directly
from each section into your prototype. All examples live in components.css and use
tokens from tokens.css — no build, no server.
To start a new prototype, copy starter.html into prototypes/ and
edit inside the marked region.
142 tokens · use as var(--color-primary)
Three axes: type (simple/embedded/stripe/toast), layout (inline/vertical) and validation
(info/success/warning/danger). Action buttons reuse .btn with matching tone.
Info: This is the alert's message.
Info: This is the alert's message.
Success: This is the alert's message.
Success: This is the alert's
Warning: This is the alert's message.
Success: This is the alert's message.
Error: This is the alert's message.
Warning: This is the alert's message.
Compact pill for counts and status labels. One axis: type.
16×16 box with a 24×24 circular focus ring. Indeterminate is a
.is-indeterminate class on the wrapper (native :indeterminate needs JS).
Compact tag for tags, status, removable filters. Axes: type, size (regular / sm),
weight (outline / --bold), optional sticker (any 16×16 leading element)
and optional .label__close button.
Underlined heading separator. Two sizes (regular = 14/21, --sm = 12/18) and two
types — Section (header only) or Collapsable (--link appends a trailing chevron).
Segmented control + split button. Add .is-active to the selected segment.
Pill button for dark surfaces. Compose with tone modifiers; add a small status dot via the .indicator helper.
Default: media + body. Use .card--centered for icon cards, .card--inline for list rows. .is-selected turns the border primary.
Card Subtitle
Label textCard Subtitle
Tinted circular media slot + title + description + optional CTA. Use --sm for the compact form.
Please, fill this text box with your content.
Try adjusting your filters.
White card with .sheet-header (title + text), content rows (single column or 2 cols via .sheet-row), and an optional .sheet-footer of buttons.
Sheet text should be used for any kind of explanatory text. The Sheet Title and Sheet Text are contained inside a sheet-header.
32px tall fill, focus turns primary tint + ring. Validation tones tint the field and colour the feedback row. Textarea via .input__field--textarea.
Combine .input__field with leading/trailing text or button addons. Validation tones flow from the wrapping .input.
Keyboard-shortcut chip. Two sizes (regular / --sm) and two types (auto-width / --fixed square).
Default .loading-animation = circle (ring) spinner; .loading-animation-squares = paired squares (standalone, not composed). Sizes -xs/-sm/-md/-lg, colours -primary/-secondary/-light.
Page-size selector + summary + page list with prev/next chevrons. Use aria-current="page" on the active page.
8px tall track. States: loading (partial), --striped (animated 100%), --completed (green + check icon).
Sibling of Checkbox with the same 24×24 circular focus ring. Checked state = 4px primary inner ring.
Reuses .input__field + a trailing magnifier and optional clear button. The clear button is hidden when the field is empty.
Native <input type="range"> styled to match Lexicon. The fill follows --value on the wrapper. Optional value tooltip and right-aligned label.
Avatar-style chip. Three types (image, outline initials, icon), four sizes (--sm/--md/--lg) and rounded-square or --circle shape.
Horizontal row over a baseline. Active tab gets a white card via .is-active.
Two sizes (regular 48×24, --sm 30×16). Optional icon inside the dot, visible only when checked.
Dark pill with a triangular arrow. Placement: bottom (default) or --top. Arrow alignment: center / --align-start / --align-end.
Free-text input that opens a filtered list. Editable trigger (vs Picker's read-only). Menu uses .dropdown.autocomplete__menu.
Two surfaces: .color-picker (palette panel with swatch grid) and .color-input (compact swatch + hex field).
Trigger: .input-group with #calendar icon. Panel: .date-picker-panel with month/year controls, weekday row, 7-column day grid, optional time row.
White card menu. <ul class="dropdown"> of .dropdown__item buttons. Supports group titles, dividers, left/right icons, active state, footer.
3-col grid (1fr auto 1fr). Move buttons in .dual-listbox__moves, optional reorder arrows in .dual-listbox__reorder.
Picker variant: .lang-picker__flag SVG flag (16×12) + locale code + optional status .label--sm.
.list__row with optional select checkbox, sticker, content (title + subtitle + detail + labels) and actions. States: .is-active, .has-notification.
.modal-overlay backdrop + .modal card (600px max). Validation variants tint header + colored border. Footer: first .btn--borderless pushes left automatically.
.multi-select shell: inline chips (.label--sm) + free-text input + clear button. Menu is .dropdown.
<ol class="stepper">. States: .is-complete (check icon) / .is-active (primary ring) / pending (number). Connector via ::after.
Read-only trigger (.picker__trigger) + .dropdown menu. Every item carries a #check-small slot (opacity:0 when inactive) so text aligns to the same column. Active item = primary-l3 soft fill + --color-dark text.
White card, optional .popover__header + .popover__body. .popover__body--scrollable caps height. Arrow mirrors Tooltip placement classes.
This is how information is displayed in a popover.
Body content with a close button in the header.
No header — body only popover content.
Right drawer: 280px default / .side-panel--lg 480px. Header + scrollable body + footer. Use .side-panel__body--no-padding for edge-to-edge content.
Zebra rows. .is-selected tints with primary-l3. .table__cell--gutter (48px) for checkbox/actions columns. Composes Checkbox, Sticker, Label.
| Title | Author | Status | ||
|---|---|---|---|---|
| Getting Started GuideUpdated 2 hours ago | James Smith | Published | ||
| Advanced ConfigurationUpdated yesterday | Maria Garcia | Draft |
#clock icon + .time-picker__field (HH:MM input + clear + up/down spinner) + optional .time-picker__tz timezone label.
<ul role="tree"> of .tree__row (toggle + icon + label). Children in <ul role="group"> with +24px indent.
40px icon sidebar. .vert-bar__cluster groups icons; .vert-bar__cluster--end pins a group to the bottom. .is-active = primary-l3 bg + left rail.
Full-width contextual toolbar. Default state: checkbox + ghost filter/order buttons + search (flex-1) + ghost view picker + primary New button. Active state (.management-toolbar--active): primary-l3 bg + 1px primary bottom border + count + bulk actions. Optional .management-toolbar__results blue-tint summary bar.
240px white panel for selecting a CMS field type or structure. Field items use .cms-structure-dropdown__sticker--field (blue); the Structure item uses .cms-structure-dropdown__sticker--structure (orange). Add .is-active on any item to show selection state.
320px overlay sidebar for DXP administration. .control-panel wrapper · .control-panel__header (sticker + title + close) · .control-panel__search (reuses .search, 16px side padding) · .control-panel__body scrollable area · .control-panel__groups list of groups · .control-panel__group-header 12px uppercase label + chevron · .control-panel__item 40px row; .is-active adds primary-l3 bg + 6px primary left rail.
Use as <svg class="lexicon-icon"><use href="#name"></use></svg>. Sizes: lexicon-icon-sm (12) · default (16) · lexicon-icon-lg (24) · lexicon-icon-xl (32).