Skip to main content
LanderLab lets you design quizzes visually, but if you need more control, you can use Custom CSS to style your quiz beyond the built-in settings. This is useful when you want to fine-tune the appearance of quiz elements or apply styles that are not available in the editor.

How it works

LanderLab lets you inject custom CSS into your flow. Your CSS is automatically scoped inside the .ll-quiz root container, so styles only affect your quiz and never bleed into the rest of the page.

Where to add CSS

Css
In your LanderLab editor, open Settings → Custom CSS and paste your rules there. Every selector you write is already inside .ll-quiz — you don’t need to prefix anything.
You cannot style the .ll-quiz root element itself (e.g. background, font-family). These are controlled by the theme engine. Target child elements instead.

Scoping rules

All your CSS lives inside .ll-quiz. Theme variables (like --colorPrimary) are read-only — they’re set by the theme engine and can’t be overridden. To change how something looks, write regular CSS rules targeting the selectors described in this guide. ✓ Do this
✗ Not this - variables are read-only

Selector reference

Use these selectors to target the elements you want to style. All of them are scoped inside .ll-quiz automatically.

Layout & structure

.ll-quiz-step All steps (visible + hidden) .ll-quiz-step[data-active-step=“true”] Only the currently visible step .ll-quiz-header Fixed top header area .ll-quiz-footer Fixed bottom footer area .ll-quiz-block Every block, any type .ll-quiz-block—[type] A specific block type (e.g. --text-field)

Inputs

.ll-quiz-block__input All text inputs and selects .ll-quiz-block__input-wrapper Wrapper div around inputs .ll-quiz-block__label Field labels .ll-quiz-block__decorator Prefix / suffix icons or text

Buttons

.ll-quiz-continue-button Continue button .ll-quiz-previous-button Previous / back button .ll-quiz-submit-button Submit button .ll-quiz-default-button Generic action button .ll-quiz-button-text Label inside any button .ll-quiz-button-description Sub-label inside any button

Choice blocks

.ll-choice-option A single multiple-choice option .ll-choice-option:has(input:checked) A selected option .ll-choice-option__text Text label inside an option .ll-img-choice-option An image choice option card .ll-img-choice-option:has(input:checked) Selected image choice card .ll-choice-label Choice block group label

Progress & feedback

.ll-quiz-progress__fill The filled bar portion .ll-quiz-header__progress-fill Header progress bar fill .ll-quiz-block—has-error A block that failed validation .ll-quiz-block-error The error message text .ll-quiz-variable Dynamic variables in text (e.g. first name)

Input fields

All text inputs, selects, textareas, and similar fields share the same class structure. Target .ll-quiz-block__input to style them all at once, or narrow by block type for individual control.

Style all input fields

CSS

Target a specific block by ID

Find the block ID from the URL when editing a block in LanderLab (e.g. text-field-abc123).

Style prefix / suffix decorators

Labels

Buttons

Buttons in LanderLab render as <a> elements, not <button>. Use the specific selector for each button type, or target all buttons at once with a shared class.

Continue button

Previous button

Submit button

Style all buttons at once

Button sub-label (description)

Choice blocks

Multiple-choice and image-choice options can be styled in their default, hover, and selected states.

Style options

Image choice cards

Hide the radio / checkbox icon

Progress bars

There are two progress bar locations — one inline in steps, and one in the header. Style them independently or together.

Inline progress bar

Header progress bar

Responsive design

LanderLab uses CSS container queries, not media queries. Always use the container syntax below — standard @media queries won’t work as expected inside the quiz container. The breakpoint is 490px: anything wider is treated as desktop, anything narrower as mobile. Container query syntax
Do not use @media queries Use @container quiz-container (...) instead of @media (...). The quiz is a container component and media queries won’t reflect its actual width.

States & validation

When a field fails validation, it receives the class .ll-quiz-block--has-error. Use this to style error states consistently with your design.

Error styling

Dynamic text variables

Text blocks can include live variables like {{firstName}} that update as the user types. These render as .ll-quiz-variable spans.

Full examples

Paste any of these into your Custom CSS panel to get started quickly.

Example 1 — Clean minimal theme

Example 2 — Rounded colorful theme

Example 3 — Mobile-first layout adjustments

Block type class list

Use these modifiers on .ll-quiz-block to target individual block types.