Skip to main content

Components

Every component with live preview and copy-paste code. All score 100 on CIF accessibility.

Buttons

Four variants. All 44px minimum touch target. All keyboard accessible with visible focus ring.

<button class="cui-btn">Primary</button>
<button class="cui-btn cui-btn-secondary">Secondary</button>
<button class="cui-btn cui-btn-destructive">Destructive</button>
<button class="cui-btn cui-btn-ghost">Ghost</button>

As links

<a href="/signup" class="cui-btn">Link as button</a>
<a href="/learn" class="cui-btn cui-btn-secondary">Secondary link</a>

CSS Classes

ClassDescription
.cui-btnPrimary button — solid background, white text
.cui-btn-secondaryOutlined — border only, transparent background
.cui-btn-destructiveDanger action — red background
.cui-btn-ghostMinimal — no border, hover reveals background
.cui-glowAdd glow shadow on focus (use with primary)

Badges

Inline labels for status, categories, and counts. All meet contrast requirements.

Default Primary Success Error
<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.

NameRoleStatusScore
Alexandra ChenDesignerActive94
Marcus WilliamsEngineerActive87
Sarah KimPMAway91
James RodriguezDesignerInactive78
<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.

Confirm Action

Are you sure you want to delete this item? This action cannot be undone.

<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>