The CSS system that
scales with you
99 UI surfaces, one stylesheet. Theme switching with a single attribute. No JavaScript required.
0 — Start Here
Use this site as the curated gallery for high-value, mostly supported surfaces. Use the playground as the workflow lab for templates, interaction-heavy checks, and beta coverage.
Site role: gallery-first onboarding and copy-paste surfaces. Playground role: starter templates, workflow demos, support-tier visibility, and deeper interaction smoke paths.
1 — Install
Pick one of three options. No build step required for consumers.
Prerelease channels are opt-in: use npm install fikir-css@beta or
npm install fikir-css@rc only when a release note explicitly asks for them.
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 99 surfaces
Button
btn is the base class. The official contract is style + tone + size: use a style modifier like btn-solid or btn-ghost, then pair it with a tone such as btn-primary or btn-danger.
Icon Button
Square button for icons — use icon-button.
Link
Alert
Use alert with a tone class. The default style is soft; data-style="outline" is the official alternate.
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
Flat card
Default container style.
Subtle card
Uses the default page layer.
Elevated card
With shadow.
Interactive card
Hover or focus this surface.
card card-interactiveDivider
divider
Surface
surface-flat · surface-subtle · surface-elevated · surface-interactiveTabs
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