Components
Every component with live preview and copy-paste code. All score 100 on CIF accessibility.
Badges
Inline labels for status, categories, and counts. All meet contrast requirements.
<span class="cui-badge">Default</span>
<span class="cui-badge cui-badge-primary">Primary</span>
<span class="cui-badge cui-badge-success">Success</span>
<span class="cui-badge cui-badge-destructive">Error</span>
Alerts
Contextual feedback messages. Use role="alert" for screen reader announcement.
<div class="cui-alert cui-alert-info" role="alert">
<strong>Info:</strong> Your session will expire in 5 minutes.
</div>
<div class="cui-alert cui-alert-success" role="alert">
<strong>Success:</strong> Your profile has been updated.
</div>
<div class="cui-alert cui-alert-warning" role="alert">
<strong>Warning:</strong> Your credit card expires next month.
</div>
<div class="cui-alert cui-alert-error" role="alert">
<strong>Error:</strong> Payment could not be processed.
</div>
Inputs
Form inputs with labels, hints, and error states. All 44px minimum height.
As it appears on your ID.
Password must be at least 8 characters.
<div>
<label for="name">Full name</label>
<input type="text" id="name" placeholder="Jane Smith">
<p class="cui-hint">As it appears on your ID.</p>
</div>
<!-- Error state -->
<div class="cui-error">
<label for="pw">Password</label>
<input type="password" id="pw">
<p class="cui-error-msg">Must be at least 8 characters.</p>
</div>
Checkbox & Radio
44px hit area via label wrapping. No extra markup needed.
<label><input type="checkbox" checked> Receive email updates</label>
<label><input type="checkbox"> Accept terms</label>
<label><input type="radio" name="plan" checked> Free plan</label>
<label><input type="radio" name="plan"> Pro — $49/mo</label>
Cards
Content containers with elevation variants. Hover lifts with shadow.
Default
Subtle border, hover shadow.
Elevated
Standing shadow, deeper on hover.
Highlighted
Primary tint border and inset glow.
<div class="cui-card">Default card</div>
<div class="cui-card cui-card-elevated">Elevated card</div>
<div class="cui-card cui-card-highlight">Highlighted card</div>
Table
Responsive data table with hover rows and sticky headers. Wrap in .cui-table-wrapper for horizontal scroll.
| Name | Role | Status | Score |
|---|---|---|---|
| Alexandra Chen | Designer | Active | 94 |
| Marcus Williams | Engineer | Active | 87 |
| Sarah Kim | PM | Away | 91 |
| James Rodriguez | Designer | Inactive | 78 |
<div class="cui-table-wrapper">
<table class="cui-table">
<thead>
<tr><th>Name</th><th>Role</th><th>Status</th></tr>
</thead>
<tbody>
<tr>
<td>Alexandra Chen</td>
<td>Designer</td>
<td><span class="cui-badge cui-badge-success">Active</span></td>
</tr>
</tbody>
</table>
</div>
Accordion
Uses native <details> — works without JavaScript. Keyboard accessible. 44px trigger.
How do I install cbrowser-ui?
Add one link tag: <link rel="stylesheet" href="https://cdn.cbrowser.ai/ui.css"> — or install via npm with npm install cbrowser-ui.
Does it work with React / Vue / Svelte?
Yes. It's framework-agnostic CSS. Import the stylesheet and use the class names. The JS runtime is optional — only needed for focus traps and keyboard navigation.
Can I customize the colors?
Override any of the 20 CSS custom properties. Every --cui-* variable changes the entire theme. The playground's theme editor (coming soon) will enforce contrast accessibility as you pick colors.
<details class="cui-accordion" open>
<summary>How do I install cbrowser-ui?</summary>
<p>Add one link tag or install via npm.</p>
</details>
<details class="cui-accordion">
<summary>Does it work with React?</summary>
<p>Yes. Framework-agnostic CSS.</p>
</details>
Dialog / Modal
Native <dialog> with focus trap, ESC to close, and backdrop. Add data-cui-trap for automatic focus management.
<button class="cui-btn" onclick="document.getElementById('my-dialog').showModal()">
Open Dialog
</button>
<dialog id="my-dialog" class="cui-dialog" data-cui-trap>
<div class="cui-dialog-content">
<div class="cui-dialog-header">
<h3 class="cui-dialog-title">Confirm Action</h3>
<p class="cui-dialog-description">Are you sure?</p>
</div>
<div class="cui-dialog-footer">
<button class="cui-btn cui-btn-secondary" onclick="this.closest('dialog').close()">Cancel</button>
<button class="cui-btn cui-btn-destructive">Delete</button>
</div>
</div>
</dialog>
Progress
Accessible progress bar with ARIA attributes.
Upload progress
72% complete
Storage used
3.5 GB of 10 GB
<div class="cui-progress" role="progressbar"
aria-valuenow="72" aria-valuemin="0" aria-valuemax="100"
aria-label="Upload progress: 72%">
<div class="cui-progress-bar" style="width: 72%;"></div>
</div>