The CSS system that
scales with you
82 UI surfaces, one stylesheet. Theme switching with a single attribute. No JavaScript required.
1 — Install
Pick one of three options. No build step required for consumers.
2 — Theme & Density
All themes are activated via data-* attributes — no rebuild required. Toggle and see the effect live:
Info alert
Activate in HTML: data-theme="dark" or data-density="compact" on <html>.
3 — Real App Examples
Full starter templates — open and copy-paste. No build step.
Component Gallery 82 surfaces
Button
btn is the base class — it provides sizing, focus ring, and cursor. A tone modifier (btn-primary, btn-neutral, etc.) is required for color. btn alone is intentionally invisible so it composes cleanly.
Icon Button
Square button for icons — use icon-button.
Link
Alert
Use alert + tone modifier.
Default
A neutral informational message.
Error
Something went wrong. Please try again.
Warning
Your session expires in 5 minutes.
Success
Your changes have been saved.
Info
A new version is available.
Badge
Toast
Normally positioned fixed; shown inline here for preview. Toggle data-open="true".
Saved successfully
Upload failed
Session expiring soon
New version available
Spinner
Skeleton
Input / Field
Visual states: default, focus (click the input), invalid (aria-invalid="true"), disabled.
Click to see focus ring.
Please enter a valid email address.
This field is read-only.
Select
Checkbox · Radio · Switch
Textarea
Card
Plain card
Default variant.
Elevated card
With shadow.
Divider
divider
Surface
Tabs
Breadcrumb
Pagination
Modal
Toggle data-open="true" on the wrapper. Focus trap should be wired in JS.
Confirm action
This modal is driven by data-open with no JS framework required.
Tooltip
Table
| Name | Status | Role |
|---|---|---|
| Alice Kim | Active | Admin |
| Bob Chen | Invited | Editor |
| Carol Davis | Suspended | Viewer |
Empty State
No results found
Try adjusting your search or filters.
Stat
Total users
12,480
+8.2%
Revenue
$42,900
+3.1%
Churn rate
2.4%
+0.4%
stat · stat-label · stat-value · stat-change--up/downStepper
Multi-step progress indicator. Use data-state (complete / active / upcoming) on each stepper-item.
- Account details
- Billing info
- Review & confirm
Timeline
Ordered event list. Last item hides the connector line.
-
Account created
-
First deploy
-
v1.0 released
Tree View
Hierarchical list. Toggle data-tree-expanded (true/false) on tree-view-item to expand/collapse children.
-
- App.vue
-
- Button.vue
- Modal.vue
- package.json
Progress
Linear progress bar. Set value and max on the native <progress> or use the CSS surface manually.
Rating
Star rating. Add rating-item-active to filled stars. Use aria-label for screen readers.
Range Slider
Native <input type="range"> styled with the range-slider class.
Calendar
Monthly grid. Mark selected day with aria-current="date", today with aria-pressed="true".
April 2025
Typography
Heading 1
heading-1Heading 2
heading-2Heading 3
heading-3Muted text — helper descriptions
text-mutedVisually hidden (screen-reader only)
visually-hidden