CSS Structure Reference Guide
This guide provides a comprehensive overview of all CSS classes and selectors available in the 💎 Built for Shopify RevenueHunt quiz app. Use this reference to customize the appearance of your quizzes.
Table of Contents
Top-Level Container Structure
Main Selectors
| Selector | Description | 
| main#quiz-{quizId} | Main quiz container with dynamic ID | 
| .quiz | Base quiz class - always present | 
| .mobile | Applied when viewport < 480px | 
| .quiz-question | Applied when showing question pages | 
| .quiz-result | Applied when showing result pages | 
| .quiz-modal | Modal type quiz styling | 
| .quiz-inline | Inline type quiz styling | 
| .use-font-family-heading | When custom heading font is set | 
| .use-font-family-body | When custom body font is set | 
Examples
/* Style all quiz text */
.quiz {
    font-size: 16px;
    line-height: 1.5;
}
/* Mobile-specific styling */
.quiz.mobile {
    padding: 10px;
}
/* Target specific quiz instance */
#quiz-abc123 {
    background: #f0f0f0;
}
Question Structure
Main Selectors
| Selector | Description | 
| .question-wrapper | Main question wrapper container | 
| .question-wrapper-hide-next-button | When next button is hidden | 
| .question-wrapper-split | Split layout (image + content) | 
| .question-wrapper-split-desktop-left | Desktop image on left | 
| .question-wrapper-split-desktop-right | Desktop image on right | 
| .question-wrapper-split-mobile-above | Mobile image above text | 
| .question-wrapper-split-mobile-below | Mobile image below text | 
| .question-wrapper-split-mobile-hidden | Mobile image hidden | 
| .question-navigation-item | Individual question slide container | 
| .question-preview | Question preview container | 
| .question | Main question element | 
| .question-split | Question with split layout | 
| .content.question-content | Question content area | 
| .content-split | Split layout content area | 
Examples
/* Customize split layout spacing */
.question-wrapper-split {
    gap: 2rem;
}
/* Question container padding */
.question {
    padding: 1.5rem;
}
/* Mobile question adjustments */
.question.mobile {
    margin: 0.5rem;
}
Question Blocks
Text Block Selectors
| Selector | Description | 
| #qbt-{ref} | Text block with unique reference ID | 
| .text.question-text | Text block base class | 
| .question-text-large | Large text size | 
| .question-text-medium | Medium text size | 
| .question-text-small | Small text size | 
| .question-text--left | Left aligned text | 
| .question-text--center | Center aligned text | 
| .question-text--right | Right aligned text | 
Heading Block Selectors
| Selector | Description | 
| #qbh-{ref} | Heading block with unique reference ID | 
| .heading.question-heading | Heading block container | 
| .heading.question-heading h1/h2/h3 | Actual heading text elements | 
| .heading__small.question-heading__small h3 | Small heading text (h3) | 
| .heading__medium.question-heading__medium h2 | Medium heading text (h2) | 
| .heading__large.question-heading__large h1 | Large heading text (h1) | 
| .heading__left.question-heading__left | Left aligned heading | 
| .heading__center.question-heading__center | Center aligned heading | 
| .heading__right.question-heading__right | Right aligned heading | 
| Selector | Description | 
| #qbb-{ref} | Button block with unique reference ID | 
| .question-button__container | Button container | 
| .button.question_button | Button element | 
| .question-button--left | Left aligned button | 
| .question-button--center | Center aligned button | 
| .question-button--right | Right aligned button | 
| .button_text | Button text span | 
Examples
/* Style all question heading text */
.heading.question-heading h1,
.heading.question-heading h2,
.heading.question-heading h3 {
    color: black;
    font-weight: bold;
}
/* Style heading container */
.heading.question-heading {
    margin-bottom: 2rem;
    padding: 1rem;
}
/* Target specific heading size */
.heading__medium.question-heading__medium h2 {
    font-size: 2rem;
    color: #333;
}
/* Customize question buttons */
.question_button {
    border-radius: 8px;
    padding: 12px 24px;
}
Choice Blocks
Main Selectors
| Selector | Description | 
| #qbc-{ref} | Choice block container with unique reference ID | 
| .question-choice_list | Choice list container | 
| .question-choice_list--multiple-choice | Multiple choice type | 
| .question-choice_list--picture-choice | Picture choice type | 
| .question-choice_list--slider-choice | Slider choice type | 
| .question-choice_list--scroll-snap | Horizontal scroll layout | 
| .picture-choice-{N}-choices | Dynamic class based on choice count | 
| .picture-choice__tiny | Tiny picture size | 
| .picture-choice__small | Small picture size | 
| .picture-choice__medium | Medium picture size | 
| .picture-choice__large | Large picture size | 
Individual Choice Selectors
| Selector | Description | 
| #qbcc-{ref} | Individual choice with unique reference ID | 
| .question-choice__label | Choice label wrapper | 
| .question-choice__label-selected | Selected choice state | 
| .question-choice__label-content | Choice content area | 
| .question-choice__label-thumbnail | Choice image thumbnail | 
| .question-block__choice-error-message | Error message container | 
Examples
/* Style choice options */
.question-choice__label {
    border: 1px solid #ddd;
    border-radius: 6px;
}
/* Selected choice styling */
.question-choice__label-selected {
    background: #007bff;
    color: white;
}
/* Picture choice thumbnails */
.question-choice__label-thumbnail {
    border-radius: 8px;
    overflow: hidden;
}
Background and Navigation
Main Selectors
| Selector | Description | 
| .question-background | Question background base | 
| .background | Background image position | 
| .background-split | Split layout background | 
| .question-background-image | Background image element | 
| .question-background-image--split | Split layout background image | 
Navigation Bar Selectors
| Selector | Description | 
| .navigation-bar | Navigation bar container | 
| .navigation-bar__container | Navigation bar wrapper | 
| .navigation-bar__progress | Progress section | 
| .navigation-bar__progress-text | Progress text | 
| .navigation-bar__progress-bar | Progress bar container | 
| .navigation-bar__progress-bar-fill | Progress bar fill | 
| .navigation-bar__buttons | Navigation buttons container | 
| .navigation-bar__button | Navigation button | 
Examples
/* Customize navigation bar */
.navigation-bar {
    background: #f8f9fa;
    border-top: 1px solid #dee2e6;
}
/* Progress bar styling */
.navigation-bar__progress-bar-fill {
    background: linear-gradient(to right, #007bff, #28a745);
}
/* Navigation buttons */
.navigation-bar__button {
    border-radius: 4px;
    padding: 8px 16px;
}
Results Structure
Main Selectors
| Selector | Description | 
| .content.results-content | Main results content container | 
| #rs-{ref} | Result section with unique reference ID | 
| .result-block__container | Result section wrapper | 
| #rsb-{ref} | Result block with unique reference ID | 
| .block.results-block | Base result block class | 
Results Heading Selectors
| Selector | Description | 
| .heading.results-heading | Result heading block container | 
| .heading.results-heading h1/h2/h3 | Result heading text elements | 
| .heading__small.results-heading__small h3 | Small result heading (h3) | 
| .heading__medium.results-heading__medium h2 | Medium result heading (h2) | 
| .heading__large.results-heading__large h1 | Large result heading (h1) | 
| .results-heading__left | Left aligned result heading | 
| .results-heading__center | Center aligned result heading | 
| .results-heading__right | Right aligned result heading | 
Results List Selectors
| Selector | Description | 
| .results-slot_list | Slot list container | 
| .results-slot_list-stacked | Stacked layout | 
| .results-slot_list-side_by_side | Side by side layout | 
| .results-slot_list__no_recommendations | No recommendations state | 
Examples
/* Style result heading text */
.heading.results-heading h1,
.heading.results-heading h2,
.heading.results-heading h3 {
    color: #007bff;
    font-weight: 600;
}
/* Results container styling */
.results-content {
    max-width: 1200px;
    margin: 0 auto;
}
/* Slot layout customization */
.results-slot_list-stacked {
    gap: 1.5rem;
}
Slot Components
Main Selectors
| Selector | Description | 
| #rsbss-{ref} | Individual slot with unique reference ID | 
| .results-slot_{width} | Slot width classes (full, half, third) | 
| .results-slot_{N}-items | Dynamic class based on item count | 
| .results-slot | Individual slot item | 
| .results-slot.in-cart | Item already in cart state | 
Product Elements
| Selector | Description | 
| .slot-product__image | Product image | 
| .slot-product__image--{size} | Image size variations | 
| .slot-product__image-link | Product image link | 
| .slot-product__title | Product title | 
| .slot-product__title-link | Product title link | 
| .slot-product__button | Add to cart button | 
| .slot-product__button-add | Add button (quantity > 0) | 
| .slot-product__button-added--container | Added to cart state container | 
| .slot-product__button-remove | Remove quantity button | 
| .slot-product__button-item-text | Button item text | 
Collection Elements
| Selector | Description | 
| .slot-collection__title | Collection title | 
| .slot-collection__image | Collection image | 
Examples
/* Product card styling */
.results-slot {
    border: 1px solid #eee;
    border-radius: 8px;
    padding: 1rem;
}
/* Product images */
.slot-product__image {
    border-radius: 6px;
    transition: transform 0.2s;
}
/* Add to cart buttons */
.slot-product__button {
    background: #007bff;
    color: white;
    border: none;
}
/* Responsive slot widths */
.results-slot_half {
    width: calc(50% - 0.5rem);
}
Animations
Animation Classes
| Selector | Description | 
| .horizontal-forward.enter | Horizontal forward enter animation | 
| .horizontal-forward.exit | Horizontal forward exit animation | 
| .horizontal-backward.enter | Horizontal backward enter animation | 
| .horizontal-backward.exit | Horizontal backward exit animation | 
| .vertical-forward.enter | Vertical forward enter animation | 
| .vertical-forward.exit | Vertical forward exit animation | 
| .vertical-backward.enter | Vertical backward enter animation | 
| .vertical-backward.exit | Vertical backward exit animation | 
Examples
/* Custom transition timing */
.question-navigation-item {
    transition: all 0.3s ease-in-out;
}
/* Disable animations */
.quiz * {
    transition: none !important;
    animation: none !important;
}
Dynamic ID Patterns
Use these patterns to target specific elements in your quiz:
| Pattern | Description | 
| #quiz-{quizId} | Target entire quiz instance | 
| #q-{ref} | Target specific question page | 
| #qbt-{ref} | Target specific text block | 
| #qbh-{ref} | Target specific heading block | 
| #qbc-{ref} | Target specific choice block | 
| #qbcc-{ref} | Target specific choice option | 
| #qbb-{ref} | Target specific button block | 
| #r-{ref} | Target specific result page | 
| #rs-{ref} | Target specific result section | 
| #rsb-{ref} | Target specific result block | 
| #rsbss-{ref} | Target specific slot | 
Examples
/* Target specific question */
#q-abc123 .question-text {
    font-size: 18px;
}
/* Style specific choice block */
#qbc-choice456 {
    margin-bottom: 2rem;
}
/* Customize specific result section */
#rs-section789 {
    background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
}
Common Use Cases
Brand Color Customization
/* Primary brand colors */
.question_button,
.slot-product__button {
    background: var(--brand-primary, #007bff);
    color: var(--brand-text, white);
}
.question-choice__label-selected {
    background: var(--brand-primary, #007bff);
    border-color: var(--brand-primary, #007bff);
}
Mobile-First Responsive Design
/* Mobile base styles */
.quiz {
    padding: 1rem;
}
.question {
    margin-bottom: 1rem;
}
/* Desktop enhancements */
@media (min-width: 768px) {
    .quiz {
        padding: 2rem;
    }
    .question {
        margin-bottom: 2rem;
    }
}
Custom Typography Scale
/* Typography hierarchy */
.question-heading__large {
    font-size: 2.5rem;
}
.question-heading__medium {
    font-size: 2rem;
}
.question-heading__small {
    font-size: 1.5rem;
}
.question-text {
    font-size: 1rem;
    line-height: 1.6;
}
Product Grid Layout
/* Responsive product grid */
.results-slot_list {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
    gap: 1.5rem;
}
.results-slot {
    display: flex;
    flex-direction: column;
    height: 100%;
}
This article explains the CSS structure of the 💎 Built for Shopify RevenueHunt quiz app.