Skip to main content

Customize your Speak recorder with custom CSS

This guide shows non‑developers how to safely customize recorder button colors, sizes, and fonts using simple CSS

Speak Ai avatar
Written by Speak Ai
Updated this week

This guide shows how to customize the appearance of recorder components using simple CSS. You can customize buttons, cards, inputs, dropdowns, media players, waveforms, and dialogs.


What you can customize

You can restyle every recorder element using the following CSS classes:

Component

CSS Class

Description

Primary Buttons

.sp-custom-primary-btn

Start, Stop, Submit, Upload, Record again, etc.

Secondary Buttons

.sp-custom-secondary-btn

Cancel, Back actions

Card Containers

.sp-custom-card

Wrappers for grouped content

Input Fields

.sp-custom-input

Text or password inputs

Dropdowns

.sp-custom-dropdown

Custom select inputs

Waveform

.sp-custom-waveform

Audio waveform visualization

Audio Player

.sp-custom-audio-player

Embedded audio playback controls

Video Player

.sp-custom-video-player

Video playback controls

Dialogs

.sp-custom-dialog

Confirmation or modal windows

Titles

.sp-custom-title-* (1 to 6)

Title headings (different sizes for h1-h6)

Description

.sp-custom-desc

Recorder Description Text


How Custom CSS works

The recorder automatically detects and applies your custom CSS rules if you define them using the class names listed above.

  • You can override colors, typography, borders, padding, animation, and shadows.

  • You don’t need to use !important; the recorder gives your custom classes higher priority.

  • Only appearance changes — core functionality remains the same.


/* ================================================================
SPEAK RECORDER – CUSTOM BUTTON STYLES
This master block includes:
• Primary & Secondary button styles
• Hover, Focus, Active and Disabled states
• Responsive sizing (for mobile / desktop)
• spacing, and brand-style design
• Optional shadows and gradient backgrounds
================================================================ */

/* Title - Simple Example */
/* This styles the main recorder title (h3 heading level) */
/* Available classes: sp-custom-title-1 through sp-custom-title-6 for different heading sizes */
.sp-custom-title-3 {
color: #0F0F0F;
font-family: 'Poppins', sans-serif;
font-size: 1.75rem;
font-weight: 600;
margin-bottom: 16px;
}

/* This styles the recorder description text that appears below the title */
.sp-custom-desc {
color: #666666;
font-family: 'Poppins', sans-serif;
font-size: 1rem;
font-weight: 400;
line-height: 1.6;
margin-bottom: 20px;
}

/* Primary Button - Simple Example */
.sp-custom-primary-btn {
background-color: #0F0F0F;
color: white;
border: none;
border-radius: 8px;
padding: 12px 24px;
font-family: 'Poppins', sans-serif;
font-size: 16px;
font-weight: 600;
cursor: pointer;
transition: all 0.2s ease;
}

.sp-custom-primary-btn:hover {
background-color: #545454;
}

/* Secondary Button - Simple Example */
.sp-custom-secondary-btn {
background-color: transparent;
color: #0F0F0F;
border: 2px solid #0F0F0F;
border-radius: 8px;
padding: 10px 22px;
font-family: 'Poppins', sans-serif;
font-size: 16px;
font-weight: 600;
cursor: pointer;
transition: all 0.2s ease;
}

.sp-custom-secondary-btn:hover {
background-color: #FAFAFA;
}

/* Card - Simple Example */
.sp-custom-card {
background-color: #FAFAFA;
border: 1px solid #E0E0E0;
border-radius: 8px;
padding: 16px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}

/* Input Field - Simple Example */
.sp-custom-input {
border: 1px solid #E0E0E0;
border-radius: 4px;
padding: 8px 12px;
background-color: white;
font-family: 'Poppins', sans-serif;
font-size: 14px;
color: #0F0F0F;
}

.sp-custom-input:focus {
border-color: #0F0F0F;
outline: 2px solid rgba(15, 15, 15, 0.2);
outline-offset: 2px;
}

/* Dropdown - Simple Example */
.sp-custom-dropdown {
border: 1px solid #E0E0E0;
border-radius: 4px;
background-color: white;
font-family: 'Poppins', sans-serif;
}

.sp-custom-dropdown:focus {
border-color: #0F0F0F;
outline: 2px solid rgba(15, 15, 15, 0.2);
outline-offset: 2px;
}

/* Waveform - Simple Example */
.sp-custom-waveform {
background-color: #FAFAFA;
border: 1px solid #E0E0E0;
border-radius: 4px;
height: 80px;
width: 100%;
}

/* Audio Player - Simple Example */
.sp-custom-audio-player {
width: 100%;
height: 40px;
border-radius: 4px;
}

/* Video Player - Simple Example */
.sp-custom-video-player {
width: 100%;
height: auto;
border-radius: 8px;
background-color: #000000;
}

/* Dialog - Simple Example */
.sp-custom-dialog {
background-color: white;
border-radius: 8px;
padding: 24px;
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15);
}



Best practices for writing your CSS

Use these guidelines to avoid common issues when creating your own styles.

  • Target the provided classes: Use the specific custom classes (`.sp-custom-primary-btn`, `.sp-custom-secondary-btn`, etc.) instead of very broad selectors like `button { … }`, so you only affect recorder components.

  • Test in light and dark themes: Choose colors with enough contrast so text remains readable on both light and dark backgrounds.​

  • Always define hover and focus states: This improves clarity and keyboard accessibility.

  • Design clear disabled buttons: Disabled buttons should look different and clearly non-clickable.

  • Use transitions sparingly: Small transitions (0.2–0.3s) are usually enough and keep the interface feeling fast.

  • Avoid rules that break functionality: Do not hide components or block interactions.

Avoid rules that break functionality, like hiding buttons or blocking clicks:

/* Avoid this – it breaks the UI */
.sp-custom-primary-btn {
display: none;
pointer-events: none;
}


Troubleshooting your custom CSS

If your styles do not look right, try these checks:

  • Make sure the selector name is spelled exactly: `.sp-custom-primary-btn`, `.sp-custom-secondary-btn`, `.sp-custom-card`, `.sp-custom-input`, `.sp-custom-dropdown`, `.sp-custom-waveform`, `.sp-custom-audio-player`, `.sp-custom-video-player`, or `.sp-custom-dialog`.

  • Check for missing semicolons ; or braces } in your CSS.

  • If some default styling still appears, try setting all related properties explicitly (background, border, padding, font, etc.) in your rule.

  • Refresh your page without cache (for example, Ctrl+Shift+R or Cmd+Shift+R) to be sure you see the latest changes.​

If problems continue, share your CSS and a screenshot with support so they can help you adjust the rules without changing your integration.

Did this answer your question?