Skip to content

Channel Theming

FanFest provides a comprehensive theming system that lets you customize your channel's visual identity. You can configure colors for every visual element -- from backgrounds and surfaces to text, borders, and icons -- so your channel matches your brand.

Accessing the Theme Editor

Navigate to your channel page, open the admin Settings menu (gear icon), and select Customize Channel. The customization panel has two tabs:

  • Colors -- Configure your channel's color scheme using design tokens
  • Sections -- Toggle which content sections appear on your channel page

Color Configuration

The Colors tab displays all configurable design tokens organized into six categories. Each token has a hex color input and a color picker.

Token Categories

Background

Controls the main page and secondary background colors.

TokenPurposeDefault
--bgPrimary page background#0C1217
--bg-secondarySecondary/alternate background#1A1A1A

Surface

Controls card, panel, and overlay surfaces.

TokenPurposeDefault
--surfacePrimary card/panel background#1A1A1A
--surface-hoverSurface hover state#2A2A2A
--surface-secondarySecondary surface#2A2A2A
--surface-secondary-hoverSecondary surface hover state#3A3A3A
--surface-accentAccent surface for highlighted elements#875AF9

Fill

Controls button, badge, and interactive element fills. This is the largest category with brand, state, and medal color tokens.

TokenPurposeDefault
--fill-brandPrimary brand fill (buttons, badges)#875AF9
--fill-brand-hoverBrand fill hover state#9B6FFA
--fill-brand-pressedBrand fill pressed state#7B4AF8
--fill-brand-secondarySecondary brand fill#875AF9
--fill-darkDark fill variant#0C1217
--fill-disabledDisabled state fill#3A3A3A
--fill-successSuccess state (green)#00C853
--fill-criticalError/critical state (red)#FF3D00
--fill-warningWarning state (yellow)#FFD600
--fill-goldGold medal/rank#FFD700
--fill-silverSilver medal/rank#C0C0C0
--fill-bronzeBronze medal/rank#CD7F32

Text

Controls text colors across all UI elements.

TokenPurposeDefault
--textPrimary text#FFFFFF
--text-on-brandText on branded backgrounds#FFFFFF
--text-inverseInverse text (for light surfaces)#0C1217
--text-secondarySecondary/muted text#CCCCCC
--text-tertiaryTertiary text (least emphasis)#999999
--text-disabledDisabled state text#666666
--text-brandBrand-colored text#875AF9
--text-successSuccess state text#00C853
--text-criticalError state text#FF3D00

Border

Controls borders on cards, buttons, inputs, and interactive elements.

TokenPurposeDefault
--borderDefault border#333333
--border-hoverBorder hover state#444444
--border-selectedSelected/active border#875AF9
--border-brandBrand-colored border#875AF9
--border-criticalError state border#FF3D00
--border-successSuccess state border#00C853

Icon

Controls icon colors throughout the interface.

TokenPurposeDefault
--iconPrimary icon color#FFFFFF
--icon-emphasisEmphasized icon#FFFFFF
--icon-on-branded-surfaceIcons on brand-colored backgrounds#FFFFFF
--icon-secondarySecondary icon color#CCCCCC
--icon-disabledDisabled state icon#666666
--icon-brandBrand-colored icon#875AF9

Using the Color Picker

For each token:

  1. Enter a hex color value directly in the text input (e.g., #875AF9). The input supports 6-digit and 8-digit (with alpha) hex values.
  2. Or select the color swatch circle to open the visual color picker with hue, saturation, and alpha controls.

Invalid hex values are highlighted with a red ring. The Save and Publish button is disabled until all color values are valid.

Saving and Publishing

After configuring your colors:

  1. Review your changes in the token list
  2. Select Save and Publish
  3. Confirm in the confirmation dialog

Changes apply immediately across your channel. All fans visiting your channel will see the updated colors.

Community-Level Theming

In addition to channel-wide theming, each community within your channel can have its own color scheme. When a fan selects a community, the theme switches to that community's colors (if configured), providing distinct visual identities within a single channel.

Community themes use the same token system described above. The theme is loaded based on whether the fan is viewing the channel root or a specific community.

This is useful for multi-brand channels. For example, a sports league can give each team community its own color scheme, so the interface feels personalized to the selected team.

Legacy and V2 Tokens

FanFest's theming system has two layers:

  • V2 tokens (current) -- The design tokens listed above (e.g., --fill-brand, --text-secondary, --surface). These are what you configure in the Customize Channel panel.
  • V1 tokens (legacy) -- Older tokens like --brand-primary, --brand-bg-main. These are maintained for backward compatibility and mapped automatically from V2 values when needed.

When configuring your theme, you only need to work with V2 tokens. V1 tokens are handled internally by the platform.

For the complete list of all design tokens and their CSS custom property mappings, see the Design Tokens Reference.

Best Practices

  • Start with your primary brand color -- Set --fill-brand to your primary brand color, then adjust related tokens (hover, pressed states) to be lighter/darker variants
  • Maintain contrast -- Ensure text colors have sufficient contrast against their background surfaces. White text on dark backgrounds is the default pattern.
  • Test with content -- After setting colors, view your channel page with actual shows, contests, and leaderboard entries to verify the theme looks correct in context
  • Use consistent states -- Keep hover states slightly lighter than their base, and pressed states slightly darker, for a predictable interactive feel

Next Steps

Released under the MIT License.