Skip to content

Theming

All three UI kits share a single CSS design-token system. Customize any token to match your brand.

Setting the Theme

html
<!-- Default: dark theme -->
<div data-theme="dark">...</div>

<!-- Light theme -->
<div data-theme="light">...</div>

Or via the component prop:

tsx
<VideoConference call={call} theme="light" />

Design Tokens

Override any of these in your CSS:

css
:root {
  /* Backgrounds */
  --rtc-bg: #0f0f1a;           /* Outermost container */
  --rtc-surface-1: #1a1a2e;   /* Cards, panels */
  --rtc-surface-2: #252540;   /* Elevated surfaces */

  /* Text */
  --rtc-text: #e8e8f0;
  --rtc-text-muted: #9090a8;

  /* Borders */
  --rtc-border: #2a2a45;

  /* Brand */
  --rtc-accent: #6366f1;       /* Buttons, active states */
  --rtc-accent-hover: #5254cc;

  /* Status */
  --rtc-danger: #ef4444;       /* Leave button, errors */
  --rtc-danger-hover: #dc2626;
  --rtc-success: #22c55e;      /* Active speaking ring */
  --rtc-warning: #f59e0b;      /* Poor connection */

  /* Video tiles */
  --rtc-tile-bg: #1a1a2e;
  --rtc-tile-radius: 12px;
  --rtc-tile-gap: 8px;

  /* Control bar */
  --rtc-ctrl-bg: rgba(15, 15, 26, 0.9);
  --rtc-ctrl-btn-size: 48px;
  --rtc-ctrl-btn-radius: 50%;

  /* Chat */
  --rtc-chat-bg: #1a1a2e;
  --rtc-chat-width: 320px;

  /* Typography */
  --rtc-font: system-ui, -apple-system, sans-serif;
  --rtc-font-size: 14px;

  /* Speaking indicator */
  --rtc-speaking-ring: 2px solid var(--rtc-success);
  --rtc-speaking-glow: 0 0 8px rgba(34, 197, 94, 0.4);

  /* Z-indices */
  --rtc-z-overlay: 100;
  --rtc-z-modal: 200;
}

Light Theme Overrides

css
[data-theme="light"] {
  --rtc-bg: #f8f8fc;
  --rtc-surface-1: #ffffff;
  --rtc-surface-2: #f0f0f8;
  --rtc-text: #1a1a2e;
  --rtc-text-muted: #6060a0;
  --rtc-border: #e0e0f0;
  --rtc-tile-bg: #ffffff;
  --rtc-ctrl-bg: rgba(248, 248, 252, 0.95);
}

Example: Brand Customization

css
/* Indigo brand */
:root {
  --rtc-accent: #4f46e5;
  --rtc-accent-hover: #4338ca;
  --rtc-success: #059669;
  --rtc-tile-radius: 8px;
  --rtc-font: 'Inter', sans-serif;
}
css
/* Minimal dark with tighter tiles */
:root {
  --rtc-bg: #000000;
  --rtc-surface-1: #111111;
  --rtc-surface-2: #1c1c1c;
  --rtc-border: #333333;
  --rtc-tile-gap: 4px;
  --rtc-tile-radius: 4px;
  --rtc-ctrl-btn-radius: 8px;
}

CSS Classes

If you need deeper customization, the generated class names are stable:

ClassElement
.rtc-conferenceRoot conference container
.rtc-gridVideo tile grid
.rtc-grid--1/2/4/9/manyGrid size variants
.rtc-tileIndividual participant tile
.rtc-tile--speakingActive speaker tile
.rtc-tile--screenScreen share tile
.rtc-tile__nameName label overlay
.rtc-tile__mutedMuted microphone icon
.rtc-controlsControl bar container
.rtc-controls__btnIndividual control button
.rtc-controls__btn--activeActive/on state
.rtc-controls__btn--dangerLeave/end button
.rtc-chatChat panel container
.rtc-chat__messagesScrollable message list
.rtc-chat__inputMessage input area