Alerts
Alert with Title
Important Notice
This is a warning alert with a title, followed by a longer description explaining the issue in more detail.
Avatar
Placeholder (no image)
Badges
Inline usage: Notifications 3 and status Active badges.
Blockquote
This is a blockquote for highlighting important text, quotes, or callouts. It uses a left border for visual emphasis.
Board
Kanban — columns of cards, drag a card onto another column (JS toggles the .dragging and .drag-over flag classes)
Cards
Card Title
This is a card description.
Code
Inline code: use
font-family: monospace
for code elements.
// Code block example
function greet(name) {
return "Hello, " + name;
}
greet("World");
Description List
Vertical — label above value
Horizontal — side by side
Between — value pushed to the end
Grid — four columns, label above value
Horizontal — value containing a form (select + save button, for review)
Emphasis
Black label, muted value
Bold label, regular value
Regular label, bold value
Vertical — bold label above regular value
Disclosure
Disclosure: Default (closed)
Disclosure Summary Closed
Disclosure content revealed after clicking summary. Hidden by default.
Disclosure: Open by Default
Disclosure Summary Open
Disclosure content visible on load. Can be collapsed by clicking summary.
Disclosure: With Longer Content
Disclosure Summary With Longer Content
First paragraph of disclosure content with more detail.
Second paragraph showing that disclosure can contain multiple elements and longer text blocks.
Disclosure: FAQ Style (multiple)
Disclosure FAQ Question One
Answer to first question in FAQ-style disclosure group.
Disclosure FAQ Question Two Longer
Answer to second question with more detail in the response.
Disclosure FAQ Question Three
Answer to third question in FAQ-style disclosure group.
Divider
Content above divider.
Content below divider.
Dropdown
No dividers (default left-align)
All dividers (.divided)
Divider before section (.dropdown-divider)
Right-aligned (.dropdown.right) — for header/navbar user menus
With icons (.dropdown.right)
Actions menu (button items, no dividers)
Avatar trigger — first letter, right-aligned (user menu pattern)
Item with badge — the badge follows the label, no extra classes
Icon-button trigger (three dots)
Submenu (nested flyout)
Empty States
Empty State: Icon + Title + Description + CTA
Empty State Title
Empty State: Icon + Title + CTA
Empty State Title Without Description
Primary ActionEmpty State: Icon + Title + Description
Empty State Title Without Action
Empty State: Title + Description + CTA
Empty State Title Without Icon
Empty State: Title + CTA
Empty State Minimal
Primary ActionEmpty State: Icon + Description
Forms
Input style — border, on white surface
Input style — filled, on white surface
Input style — white, on gray surface
Input style — border, on gray surface
Field — label + input
Field — label + input + hint text
Field — label + input + error message
Form — one field of each remaining type
Grid
Responsive CSS grid. Collapses to 1 column on mobile (≤48rem).
Combine
grid
+
cols-N
(desktop) +
sm-cols-N
(mobile) +
gap-N
(spacing).
2 columns
3 columns
4 columns → 2 on mobile
cols-4 sm-cols-2
4 columns → 4 on mobile
cols-4 sm-cols-4
Custom gap
cols-3 gap-6
Header
Logo only
Logo + actions
Logo + icon actions
Logo + nav + actions
Logo + search-bar + icon actions
Logo + actions + nav + search
Nav + actions (actions stay on the right)
Two navs (left + right aligned)
Centered Logo + Centered Nav
Centered SVG Logo + Centered Nav
Header — primary background, full width
Hero
Default
Hero Title
Centered
Long Hero Title That Spans Multiple Lines to Test Wrapping Behavior
Call to ActionInput Group
Input group — search bar (input + search button)
Input group — text prefix + input
Input group — input + text suffix
Input group — input + icon button
Input group — password field with reveal toggle (Filled variant)
Input group — input + two icon buttons
Input group — select + two icon buttons
Row — select + text button (separate controls, not grouped)
Field — label + select + text button + hint text
Input group — select + input + icon button
Lightbox
Full-screen image viewer. One shared
<dialog>
per page — each trigger swaps the
<img>
source and calls
showModal(). Native
<dialog>
closes on Escape automatically; the close button calls
.close(). Image is centered both axes and capped at viewport size (max-width/height: 100vw/100vh,
object-fit: contain) so it never overflows on any device, big or small.
Gestures (script layer, see
DESIGN.md
→ Lightbox): double tap zooms to the tapped spot and back, two fingers
pinch-zoom, one finger pans a zoomed image or swipes between pictures
at normal size, and a downward swipe closes. With a mouse: double
click, wheel and drag. The image sits in a stage with
touch-none select-none
so the page doesn't steal the gestures; the zoom transform is the one
value set from script.
Click a thumbnail to open
Lists
Unordered List
- First item in unordered list
- Second item with longer text content
- Third item
Ordered List
- First step in ordered process
- Second step with more detail
- Third and final step
Unstyled List
- Item without bullet marker
- Another unstyled list item
- Third unstyled item
Modal
Pagination
Left Aligned (default)
Center Aligned
Right Aligned
Row (flex layout)
Horizontal flex with
1rem
gap. No default alignment — state it. Different words per axis, so the
two "centers" never collide: vertical (align-items)
.top
/
.middle
/
.bottom; horizontal (justify-content)
.start
/
.center
/
.end
/
.between.
Vertical — top / middle / bottom
Horizontal — center / between / end
Combine axes — middle + between
Gap sizes — xs / sm / md / default
Override the default
1rem
gap. Compose with alignment modifiers.
.xs — 0.25rem
.sm — 0.5rem
.md — 0.75rem
default — 1rem
Section Title
With icon before
Section Title
With chevron after (link)
Section Title
With icon before + chevron after (link)
Section Title
h2 tag, h3 size, tight chevron
Section Title
Long two-line title (h3 size)
This Is a Very Long Section Title That Wraps to Two Lines
Long two-line title (h2 size)
This Is a Very Long Section Title That Wraps to Two Lines
Long two-line title with icon before (h2 size)
This Is a Very Long Section Title That Wraps to Two Lines
Table — Complex (with alignment)
| # | Product | Description | Qty | Price | Total | Status |
|---|---|---|---|---|---|---|
| 1 | Premium Wireless Headphones | Noise-cancelling, 40hr battery, Bluetooth 5.3 | 2 | $149.99 | $299.98 | In Stock |
| 2 | USB-C Hub | 7-in-1, 4K HDMI, SD card | 1 | $59.00 | $59.00 | In Stock |
| 3 | Mechanical Keyboard | Cherry MX Brown, RGB backlit, full-size aluminum frame | 1 | $189.00 | $189.00 | Low Stock |
| 4 | Monitor Stand | Adjustable height, cable management | 3 | $34.50 | $103.50 | Out of Stock |
| 5 | Webcam HD | 1080p, autofocus, built-in mic | 2 | $79.99 | $159.98 | In Stock |
Table — Editable numbers (right-aligned inputs)
Quantity and unit price are inputs; the line total is plain text
| Product name | Quantity | Unit price (USD) | Line total (USD) |
|---|---|---|---|
| Wireless headphones | 299.98 | ||
| USB-C hub | 59.00 | ||
| Laptop stand | 97.50 |
Table — Empty state row
No data — one centered gray message spanning all columns
| Product name | Quantity | Unit price (USD) | Line total (USD) |
|---|---|---|---|
| No orders found | |||
Table — Header row vertical alignment
Header row — default (vertical middle)
| Product name | Estimated delivery date (business days) | Quantity | Line total (USD) |
|---|---|---|---|
| Wireless headphones | 3–5 days | 2 | 299.98 |
Header row — align-top
| Product name | Estimated delivery date (business days) | Quantity | Line total (USD) |
|---|---|---|---|
| Wireless headphones | 3–5 days | 2 | 299.98 |
Header row — align-bottom
| Product name | Estimated delivery date (business days) | Quantity | Line total (USD) |
|---|---|---|---|
| Wireless headphones | 3–5 days | 2 | 299.98 |
Header cells — text-center and align-top on each cell
| Product name | Estimated delivery date (business days) | Quantity | Line total (USD) |
|---|---|---|---|
| Wireless headphones | 3–5 days | 2 | 299.98 |
Body rows — align-top when cells wrap to multiple lines
| Customer | Shipping address | Order notes | Total (USD) |
|---|---|---|---|
| Sarah Connor | 742 Evergreen Terrace, Springfield, OR 97477, United States | Leave the package with the neighbour if nobody answers; call before delivery | 299.98 |
| John Doe | 1 Infinite Loop, Cupertino, CA 95014, United States | Gift wrap, no invoice in the box | 59.00 |
Table — Highlighted column, clickable cells
The selected column is light gray, the cells you can edit in it turn darker on hover (empty ones also show a plus), the selected cell has a black outline — a single click opens the editor
| Student | 04.05.2026 | 05.05.2026 | 06.05.2026 |
|---|---|---|---|
| Alice Johnson | 5 | 4 | |
| Bob Smith | 3 | ||
| Carol White (joined later) | |||
| Dan Brown | 4 |
Table — Inline Editing
| # | Task | Assignee | Due Date | Priority | Actions |
|---|---|---|---|---|---|
| 1 |
|
||||
| 2 |
|
||||
| 3 |
|
Table — Normal
| Name | Category | Status |
|---|---|---|
| Item One Longer Name | Category A | Active |
| Item Two | Category B | Pending |
| Item Three Medium | Category A | Inactive |
Table — Rich Content
| Name | Location | Project | Last Active | Revenue | Status | ||
|---|---|---|---|---|---|---|---|
|
|
Anna Lee | anna@example.com | 123 Main Street San Francisco, CA 94102 |
Dashboard Redesign | 2 hours ago | $12,450.00 | Active |
|
|
Mark Chen | mark.chen@company.org |
456 Oak Avenue, Apt 12B New York, NY 10001 |
API Integration | 3 days ago | $8,200.00 | Away |
|
SM
|
Sara Müller | s.muller@mail.de | — | — | Never | — | Inactive |
|
|
James Wright | j.wright@startup.io | 789 Pine Road Austin, TX 73301 |
Mobile App v2 | Just now | $23,100.50 | Active |
Table — Rowspan (top-aligned label)
When a label cell spans multiple rows (rowspan), the browser default is to vertical-center it across the merged
height. Add
.align-top
to pin it to the top-left instead — reads better when each row below has
its own distinct content (e.g. one document with several uploaded files,
each on its own row).
Table — Scrollable with sticky header
The wrapper is the scroll surface and the header sticks inside it — fixed height here for the demo; in an app pass the remaining viewport height down instead (see DESIGN.md)
| Product name | Quantity | Unit price (USD) | Line total (USD) |
|---|---|---|---|
| Wireless headphones | 2 | 149.99 | 299.98 |
| USB-C hub | 1 | 59.00 | 59.00 |
| Laptop stand | 3 | 32.50 | 97.50 |
| Mechanical keyboard | 1 | 89.00 | 89.00 |
| Webcam | 2 | 45.00 | 90.00 |
| Desk mat | 1 | 24.00 | 24.00 |
| Wireless headphones | 2 | 149.99 | 299.98 |
| USB-C hub | 1 | 59.00 | 59.00 |
| Laptop stand | 3 | 32.50 | 97.50 |
| Mechanical keyboard | 1 | 89.00 | 89.00 |
| Webcam | 2 | 45.00 | 90.00 |
| Desk mat | 1 | 24.00 | 24.00 |
Table — Simple
| Name | Role |
|---|---|
| Alice | Admin |
| Bob | Editor |
Table — Striped rows
Every second row has a gray background
| Product name | Quantity | Unit price (USD) | Line total (USD) |
|---|---|---|---|
| Wireless headphones | 2 | 149.99 | 299.98 |
| USB-C hub | 1 | 59.00 | 59.00 |
| Laptop stand | 3 | 32.50 | 97.50 |
| Mechanical keyboard | 1 | 89.00 | 89.00 |
| Webcam | 2 | 45.00 | 90.00 |
Table — With Form Elements
| Select | User | Role | Active | Actions | |
|---|---|---|---|---|---|
| Sarah Connor | sarah@example.com |
|
|||
| John Doe | john.doe@company.org |
|
|||
| Maria Garcia | m.garcia@mail.com |
|
Typography
Heading 1
Heading 2
Heading 3
Heading 4
This is a paragraph.
This is small text (text-sm) — captions, table metadata, compact UI.
This is extra small text (text-xs) — labels, hints, error messages.
Upload Card
Dropzone-style file input. Click anywhere on the card to open the file
picker; the chosen file previews instantly client-side (image thumbnail
via
URL.createObjectURL(), or a file icon + name for non-images like PDFs) — no upload
round-trip needed to see what was picked. The remove button clears the
selection and returns to the empty state.
Empty state (click to upload) — field label always visible, like any other input
Multiple files (e.g. passport — front and back, or any number of pages)