Theming
Create and manage color themes for animations.
Theming
Create animations that support multiple color variations without re-exporting. Use color slots (tokens) and the Theme Manager to build light/dark mode support, brand variations, and dynamic color schemes.
What is Theming?
Theming allows animations to support multiple color schemes.
Theming Overview
Theming System:
- •Color Slots - Named color variables (tokens) referenced by multiple properties
- •Theme Manager - Create and manage multiple color themes
- •Runtime Switching - Change themes without re-exporting animation
- •dotLottie Support - Export with multiple themes in one file
Benefits:
- •Single animation, multiple themes - One file supports light/dark mode
- •No re-export needed - Switch themes at runtime
- •Smaller file sizes - One animation instead of duplicates
- •Easier maintenance - Update theme colors in one place
- •Brand flexibility - Multiple brand color variations
Why Use Theming?
Use Cases:
- •Light and dark mode support
- •Brand color variations (primary, secondary themes)
- •Seasonal or event themes
- •A/B testing color schemes
- •User customization options
- •Platform-specific themes (iOS, Android, Web)
Traditional Approach (Without Theming):
❌ Problems:
- Export animation-light.json
- Export animation-dark.json
- Duplicate files (larger bandwidth)
- Update colors → Re-export both files
- Manage multiple versionsModern Approach (With Theming):
✅ Benefits:
- Export animation.lottie with light + dark themes
- Single file (smaller bandwidth)
- Update theme colors → No re-export needed
- One version to manage
- Runtime theme switchingHow Theming Works
Understanding the technical architecture behind the theming system.
Architecture Overview
The theming system uses an indirection layer between animation properties and actual color values.
System Flow:
Animation Properties → Slot References → Theme Rules → Color Values
↓ ↓ ↓ ↓
Layer fills "primary-color" Light theme: #2196F3
Layer strokes Dark theme: #64B5F6
Gradient stopsKey Concept - Indirection:
- •Instead of properties storing colors directly:
fill.color = #2196F3 - •Properties reference slots:
fill.referenceId = "primary-color" - •Slots resolve to theme colors:
theme.getColor("primary-color") → #2196F3 - •Change theme → Same slot resolves differently → Animation updates
Why Indirection Matters:
- •Single Source of Truth: One slot, many properties
- •Runtime Switching: Change theme without re-exporting
- •Smaller Files: No animation data duplication
- •Easier Maintenance: Update color once, changes everywhere
Data Flow: Creator to Player
Complete journey from creation to playback.
1. Creation (Lottie Creator):
Designer creates animation
↓
Creates color slots ("primary", "bg", "text")
↓
Links properties to slots (fills, strokes reference slot IDs)
↓
Creates themes (Light: #2196F3, Dark: #64B5F6)
↓
Assigns colors to slots in each theme2. Export (Creator → dotLottie):
User exports as dotLottie
↓
Slot references preserved in animation JSON
{"c": {"k": {"sid": "primary-color", "type": "Color"}}}
↓
Theme data extracted to separate files
themes/light.json: {"id": "primary-color", "value": [0.129, 0.588, 0.953]}
themes/dark.json: {"id": "primary-color", "value": [0.392, 0.710, 0.965]}
↓
Files packaged into .lottie ZIP
animation.lottie = manifest + animation + themes
↓
Color values converted: RGB 0-255 → 0-13. Runtime (Player):
Player loads .lottie file
↓
Reads manifest.json → Discovers available themes
↓
User selects theme (or auto-detected)
↓
Player loads theme file (themes/dark.json)
↓
Animation renders → Encounters slot reference
↓
Player resolves: slot ID → active theme → color value
"primary-color" → dark theme → [0.392, 0.710, 0.965]
↓
Property rendered with resolved color4. Theme Switching:
User triggers theme switch
↓
Player loads new theme file
↓
Re-resolves all slot references
↓
Canvas re-renders with new colors
↓
Seamless transition (no reload)Technical Components
Three layers work together to enable theming.
1. Slot Layer (Creator):
- •Color Slots: Named identifiers for colors
- •Slot Values: Current color based on active theme
- •Bidirectional References: Properties ↔ Slots
- •Scene Graph Integration: Slots are nodes in animation structure
2. Theme Layer (Creator + dotLottie):
- •Theme Definitions: Collections of slot-to-color mappings
- •DEFAULT_THEME: Fallback for compatibility
- •Theme State Machine: Manages theme operations
- •Export Conversion: Creator format (0-255) → dotLottie format (0-1)
3. Resolution Layer (Player):
- •Slot Resolution: Maps slot IDs to theme color values
- •Runtime Lookup: Property → Slot ID → Theme → Color
- •Theme Switching: Re-resolve slots on theme change
- •Fallback Mechanism: Use default if theme incomplete
Format Comparison
Understanding the difference between internal and export formats.
Creator Internal Format (.creator file):
{
"colorSlots": [
{
"assetId": "primary-color",
"slotType": 2,
"type": "SLOT",
"value": {
"isAnimated": false,
"staticValue": { "r": 33, "g": 150, "b": 243, "a": 1 }
}
}
],
"themes": {
"light": {
"colors": {
"primary-color": { "r": 33, "g": 150, "b": 243, "a": 1 }
}
},
"dark": {
"colors": {
"primary-color": { "r": 100, "g": 181, "b": 246, "a": 1 }
}
}
},
"activeThemeId": "light"
}dotLottie Export Format (.lottie file):
animation.lottie (ZIP)
├── manifest.json
│ {"animations": [{"themes": ["light", "dark"], "defaultTheme": "light"}]}
├── animations/main.json
│ {"layers": [{"c": {"k": {"sid": "primary-color", "type": "Color"}}}]}
├── themes/light.json
│ {"id": "light", "rules": [{"id": "primary-color", "type": "Color", "value": [0.129, 0.588, 0.953]}]}
└── themes/dark.json
{"id": "dark", "rules": [{"id": "primary-color", "type": "Color", "value": [0.392, 0.710, 0.965]}]}Key Differences:
- •Color Format: Creator uses 0-255, dotLottie uses 0-1
- •Structure: Creator is single JSON, dotLottie is ZIP with multiple files
- •Slot Storage: Creator stores in colorSlots array, dotLottie uses slot references in animation
- •Theme Format: Creator uses simple object, dotLottie uses rule-based format
- •Compression: dotLottie compressed (60-80% smaller)
Technical Capabilities
What the theming system can do.
Supported:
- •✅ Color Slots: RGB/RGBA color theming
- •✅ Multiple Themes: Unlimited theme variations
- •✅ Runtime Switching: Change themes without reload
- •✅ Animated Properties: Slots work with keyframes
- •✅ Property Types: Fills, strokes, gradients
- •✅ dotLottie Export: Compressed multi-theme format
- •✅ Fallback Support: DEFAULT_THEME for compatibility
- •✅ Undo/Redo: Full history for theme operations
Current Limitations:
- •❌ Other Slot Types: Gradients, Images, Scalars (coming soon)
- •❌ Animated Theme Values: Keyframes for slot colors (coming soon)
- •❌ Theme Inheritance: Themes extending other themes (coming soon)
- •❌ Conditional Theming: State-based theme switching (coming soon)
- •❌ JSON Export: Themes require dotLottie format
- •❌ Legacy Players: Require Lottie-web 5.10+ or equivalent
Performance Characteristics
How theming impacts animation performance.
Creation Time:
- •
Create slot: < 1ms
- •
Link property: < 1ms
- •
Create theme: < 1ms
- •
Update slot color: < 5ms
- •
Switch active theme: 10-50ms (depends on slot count)
Export Time:
- •Small animation (10 slots, 2 themes): 50-100ms
- •Medium animation (30 slots, 3 themes): 100-200ms
- •Large animation (50+ slots, 4+ themes): 200-500ms
Runtime Performance:
- •Initial load: +2-5ms (load theme file)
- •Theme switch: 5-10ms (re-resolve slots)
- •Rendering: No overhead vs non-themed animations
- •Memory: +2-3 KB per theme (negligible)
Optimization:
- •Batched updates during theme switch
- •Cached theme rule lookups
- •Lazy validation
- •Minimal re-rendering
Architecture Deep Dive
For detailed technical documentation about the theming architecture, see:
Theming Components
Three main components of the theming system.
Color Slots (Tokens)
What are Color Slots?
- •Named color variables that can be referenced by multiple properties
- •Reusable color tokens linked across layers
- •Changing a slot updates all linked properties automatically
- •Work with animated properties
Example:
Color Slot: "Primary Blue" = #2196F3
Linked to:
- Button fill color
- Icon stroke color
- Background gradient stop
- Text color (3 layers)
Change "Primary Blue" to #FF5722
→ All 6 properties update automaticallyBenefits:
- •Consistency: Same color across multiple layers
- •Easy updates: Change color once, updates everywhere
- •Theme support: Slots have different values per theme
- •Maintainability: Clearer color management
See Color Slots for complete guide.
Theme Manager
What is Theme Manager?
- •Interface for creating and managing multiple color themes
- •Define theme colors and properties
- •Apply themes to animations
- •Manage light/dark mode variations
Theme Manager Features:
- •Create new themes (light, dark, brand variants)
- •Edit theme colors
- •Apply themes to animation
- •Preview theme changes
- •Export with multiple themes
Example Themes:
Theme: Light
- Primary: #2196F3
- Background: #FFFFFF
- Text: #000000
Theme: Dark
- Primary: #64B5F6
- Background: #121212
- Text: #FFFFFFSee Theme Manager for complete guide.
Runtime Theme Switching
Dynamic Themes:
- •Change themes in player without re-exporting animation
- •Switch between embedded themes at runtime
- •No code changes when theme changes
- •Instant theme updates
How It Works:
Export animation with multiple themes (dotLottie)
Load animation in player (web, mobile)
Player selects theme (light, dark, or custom)
Animation renders with selected theme colors
Switch theme anytime without reload
Player Support:
- •Lottie-web 5.10+ with dotLottie plugin
- •dotLottie-web, dotLottie-player
- •LottieFiles platform
- •Modern Lottie players
Color Slots System
Reusable color tokens for consistent theming.
How Color Slots Work
Creating Color Slots:
Define named color slot ("Primary", "Background", "Accent")
Assign color value to slot (#2196F3, #FFFFFF, etc.)
Link layer properties to slot
Properties reference slot instead of direct color
Linking Properties:
- •Select layer with color property (fill, stroke, gradient)
- •In property panel, link to color slot
- •Property now uses slot value
- •Changes to slot update property automatically
Theme Variations:
- •Each theme defines values for all slots
- •Light theme: "Primary" = #2196F3
- •Dark theme: "Primary" = #64B5F6
- •Switch theme → All slots update → Animation updates
Color Slot Benefits
Consistency:
- •Same color across multiple layers guaranteed
- •No manual synchronization needed
- •One source of truth for each color
Maintainability:
- •Update color once in slot
- •All linked properties update automatically
- •Easier than finding and changing individual properties
Theme Support:
- •Slots enable multi-theme animations
- •Each theme has different slot values
- •Runtime theme switching possible
Animated Properties:
- •Color slots work with keyframe animation
- •Animate slot value over time
- •All linked properties animate together
- •Coordinated color changes
Document Colors
Automatic color palette tracking.
What are Document Colors?
Auto-Generated Palette:
- •Lottie Creator automatically tracks all colors used in animation
- •Recently used colors saved for quick access
- •Appear as clickable swatches in color picker
- •Quick color consistency across project
Document Colors Features:
- •Automatically updated as you work
- •Shows all colors in current animation
- •Click swatch to apply color
- •No manual palette management needed
Location:
- •Color Picker → Document Colors section
- •Shows swatches of all used colors
- •Recently used colors at top
- •Quick access for consistency
Using Document Colors
Quick Color Application:
Select layer with color property
Open color picker
Click document color swatch
Color applied instantly
Maintains consistency
Color Consistency:
- •Reuse exact colors from animation
- •Avoid color drift (slightly different values)
- •Professional, cohesive appearance
- •No need to remember hex codes
Workflow Integration:
- •Automatically populated
- •No setup required
- •Works with color slots
- •Complements theme system
Light/Dark Mode Support
Create animations that adapt to user preferences.
Multi-Theme Animations
Light and Dark Themes:
- •Create light theme with bright colors
- •Create dark theme with dark colors
- •Export both themes in single dotLottie file
- •Player selects appropriate theme
Theme Switching:
- •User changes system theme (light/dark)
- •App detects theme change
- •Player switches animation theme
- •Seamless transition
Example:
Light Theme:
- Background: #FFFFFF (white)
- Primary: #2196F3 (blue)
- Text: #000000 (black)
Dark Theme:
- Background: #121212 (dark)
- Primary: #64B5F6 (lighter blue)
- Text: #FFFFFF (white)
Both themes in animation.lottie filePlatform Integration
Integrate themes seamlessly across web and mobile platforms:
Use Cases
Application UI:
- •Loading animations adapt to app theme
- •Icons change colors with system theme
- •Consistent with platform appearance
- •Better user experience
Web Applications:
- •Respect user's theme preference
- •Seamless dark mode support
- •No duplicate animation files
- •Smaller bandwidth usage
dotLottie Themes
Export animations with embedded themes.
dotLottie Format
Theme Support:
- •ZIP-based container format (.lottie)
- •Contains animation + multiple themes
- •60-80% smaller than JSON
- •Modern Lottie players only
File Structure:
animation.lottie (ZIP archive)
├── manifest.json // Metadata, describes themes
├── animations/
│ └── animation.json // Compressed animation data
├── themes/
│ ├── light.json // Light theme definitions
│ └── dark.json // Dark theme definitions
└── states/
└── machine.json // State machine (if used)Manifest Example:
{
"version": "1.0",
"animations": [
{
"id": "main",
"themes": ["light", "dark"]
}
]
}Multiple Themes in One File
Package Themes:
- •Include all theme variations in single .lottie file
- •Light, dark, brand variants together
- •Easier asset management
- •One file to distribute
Benefits:
- •Smaller file size vs multiple JSON files
- •Single download includes all themes
- •Runtime theme selection
- •No duplicate animation data
Compatibility:
- •Lottie-web 5.10+ with dotLottie plugin
- •dotLottie-web, dotLottie-player
- •LottieFiles platform
- •Not supported in older players
See Exporting Themes for complete guide.
Creating Themes
Workflow for theme creation.
Basic Theme Workflow
Create Color Slots
Define named color slots for your themeable colors.
What to do:
- •Open Theme Manager panel
- •Click "Create Color Slot" or "New Token"
- •Create slots for primary, background, text, accent colors
- •Assign default color values to each slot
Example slots:
Primary → #2196F3 (vibrant blue)
Background → #FFFFFF (white)
Text → #000000 (black)
Accent → #FF5722 (orange)Tips:
- •
Use semantic names like "Primary Button" not "Color 1"
- •
Start with 5-8 core color slots
- •
You can always add more later
Link Layer Properties
Connect your animation properties to the color slots.
What to do:
- •Select a layer with a color property (fill, stroke, gradient)
- •Open the property panel
- •Click the color swatch to open color picker
- •Look for "Link to Slot" option
- •Choose the appropriate color slot from the list
- •Repeat for all themeable properties
Linkable properties:
- •Fill colors on shapes
- •Stroke colors
- •Individual gradient stops
- •Text colors
Verification:
- •
Linked properties show the slot name
- •
Changing slot value updates all linked properties
Create Light Theme
Define your light theme color values.
What to do:
- •Open Theme Manager panel
- •Click "Create Theme" or "New Theme"
- •Name it "Light" or "light"
- •Set appropriate light theme colors for each slot
Light theme guidelines:
Primary → Vibrant colors (#2196F3)
Background → White or light gray (#FFFFFF)
Text → Dark colors for contrast (#000000)
Accent → Complementary vibrant colorsTips:
- •
Ensure sufficient contrast (WCAG 4.5:1 for text)
- •
Test readability on light backgrounds
- •
Use your brand's light mode palette
Create Dark Theme
Define your dark theme color values.
What to do:
- •In Theme Manager, create another theme
- •Name it "Dark" or "dark"
- •Set appropriate dark theme colors for each slot
- •Use lighter, desaturated variants of light theme colors
Dark theme guidelines:
Primary → Lighter variants (#64B5F6)
Background → Dark gray or black (#121212)
Text → Light colors for contrast (#FFFFFF)
Accent → Lighter, desaturated variantsTips:
- •
Material Design recommends #121212 for dark backgrounds
- •
Reduce color saturation for dark mode
- •
Ensure contrast ratios are maintained
Preview Themes
Test and refine both themes in the editor.
What to do:
- •In Theme Manager, click on "Light" theme to activate it
- •Observe how your animation looks
- •Switch to "Dark" theme
- •Compare the appearance
- •Make adjustments to slot colors as needed
What to check:
- •All properties updating correctly with theme switch
- •Colors have sufficient contrast in both themes
- •Visual hierarchy maintained in both themes
- •No missing slot definitions
- •Smooth visual transition between themes
Iterate:
- •
Adjust slot colors based on preview
- •
Test with actual content and backgrounds
- •
Get feedback from stakeholders
Export with Themes
Export your animation with embedded themes.
What to do:
- •Go to File → Export or click Export button
- •Select "dotLottie" (.lottie) format (required for themes)
- •Ensure "Include Themes" option is checked
- •Choose export location
- •Click Export
Verification:
animation.lottie (exported file)
├── manifest.json (contains theme references)
├── animations/main.json (animation data)
└── themes/
├── light.json (light theme definitions)
└── dark.json (dark theme definitions)Result:
- •
Single .lottie file contains animation + all themes
- •
60-80% smaller than multiple JSON exports
- •
Ready for runtime theme switching in players
- •
Can be used on web, iOS, Android platforms
Theme Color Selection
Choosing Theme Colors:
- •
Light Theme: High contrast, bright backgrounds
- •Background: White or light gray
- •Text: Dark gray or black
- •Primary: Vibrant colors
- •
Dark Theme: Lower contrast, dark backgrounds
- •Background: Dark gray or black (#121212 recommended)
- •Text: Light gray or white
- •Primary: Lighter, desaturated variants
Color Contrast:
- •Ensure readability in both themes
- •WCAG contrast ratios (4.5:1 for text)
- •Test both themes for accessibility
- •Adjust colors for visibility
Advanced Theming
Brand Variations:
- •Create multiple brand themes
- •Primary brand colors
- •Secondary brand colors
- •Partner or white-label themes
Seasonal Themes:
- •Holiday color schemes
- •Seasonal variations
- •Event-specific themes
- •Limited-time themes
User Customization:
- •Allow users to select themes
- •Custom color schemes
- •Personalization options
- •Saved preferences
Theming Workflows
Common theming patterns.
Web Application Workflow
Design Animation with Color Slots
Create your animation using color slots for all themeable properties.
What to do:
- •Design your animation in Lottie Creator
- •Create color slots for all colors that should change with themes
- •Link layer properties (fills, strokes) to color slots
- •Test that all themeable elements are properly linked
Best practices:
- •
Use slots for backgrounds, primary colors, text colors, accents
- •
Keep non-themeable decorative colors as direct values
- •
Name slots semantically ("Primary", "Background", "Text")
Create Light and Dark Themes
Define color values for both light and dark modes.
What to do:
- •Open Theme Manager
- •Create "light" theme with bright background colors
- •Create "dark" theme with dark background colors
- •Ensure both themes define all color slots
- •Preview both themes in the editor
Color guidelines:
Light Theme:
- Background: #FFFFFF
- Text: #000000
- Primary: #2196F3
Dark Theme:
- Background: #121212
- Text: #FFFFFF
- Primary: #64B5F6Export as dotLottie
Export your animation with embedded themes.
What to do:
- •File → Export
- •Choose dotLottie (.lottie) format
- •Check "Include Themes" option
- •Set default theme (usually "light")
- •Export the file
Result:
- •
Single .lottie file with both themes embedded
- •
60-80% smaller than multiple JSON files
- •
Ready for web integration
Integrate with Web App
Add the animation to your web application.
What to do:
- •Install a Lottie player library (lottie-web, dotLottie-web, or web component)
- •Add the .lottie file to your project (public folder or CDN)
- •Add a container element for the animation
- •Initialize the player with the animation file
Example setup:
<div id="lottie-container"></div>
<script src="lottie-web.js"></script>See the Code Integration tabs below for specific implementation examples.
Detect User's Theme Preference
Determine which theme to display initially.
What to do:
- •Use CSS media query to detect system theme preference
- •Check for saved user preference in localStorage
- •Determine initial theme (light or dark)
- •Pass theme to animation player on initialization
Detection code:
const isDark = window.matchMedia("(prefers-color-scheme: dark)").matches;
const initialTheme = isDark ? "dark" : "light";Considerations:
- •
Respect user's system preference by default
- •
Allow users to override with manual toggle
- •
Persist user preference if they change it
Load Animation with Theme
Initialize the player with the detected theme.
What to do:
- •Use player's initialization options to set theme
- •Pass the theme name ('light' or 'dark')
- •Configure loop, autoplay, and other options
- •Start playback
Example:
const animation = lottie.loadAnimation({
container: document.getElementById("lottie-container"),
path: "/animations/animation.lottie",
theme: initialTheme,
loop: true,
autoplay: true,
});Listen for Theme Changes
Update animation when user changes theme.
What to do:
- •Add event listener for system theme changes
- •Add event listener for manual theme toggle (if provided)
- •Call player's
setTheme()method when theme changes - •Update UI to reflect new theme
System theme listener:
window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change", (e) => {
const newTheme = e.matches ? "dark" : "light";
animation.setTheme(newTheme);
});Manual toggle:
themeToggleButton.addEventListener("click", () => {
currentTheme = currentTheme === "dark" ? "light" : "dark";
animation.setTheme(currentTheme);
localStorage.setItem("theme", currentTheme);
});Update Animation Theme Dynamically
Seamlessly switch themes without page reload.
What to do:
- •Call
setTheme()method with new theme name - •Animation updates colors automatically
- •No need to reload or re-initialize
- •Smooth transition between themes
Result:
- •✅ Animation adapts to user's theme preference
- •✅ Seamless theme switching
- •✅ Consistent with app appearance
- •✅ Single animation file serves both themes
- •✅ Better user experience
Verification:
- •
Test theme switching in browser
- •
Check system theme change detection
- •
Verify colors update correctly
- •
Test on different devices/browsers
Code Integration:
Mobile App Workflow
Platform Theme Integration:
Create themed animation
Export with light/dark themes
Add to app bundle
Detect platform theme (iOS/Android)
Load animation with detected theme
Update when user changes system theme
Seamless integration
Brand Variation Workflow
Multi-Brand Support:
Design base animation
Define color slots for brand colors
Create theme per brand
Export with all brand themes
Select theme based on context
Same animation, different branding
Best Practices
Tips for effective theming.
Plan Color Slots Early
Upfront Planning:
- •Identify which colors should be themeable
- •Create color slots at project start
- •Link properties as you create layers
- •Easier than retrofitting later
Common Slots:
- •Primary (main brand color)
- •Secondary (accent color)
- •Background (background color)
- •Surface (card/panel background)
- •Text (primary text color)
- •Text Secondary (secondary text)
- •Border (dividers, outlines)
- •Error, Warning, Success (status colors)
Test Both Themes
Quality Assurance:
- •Preview animation in both themes
- •Verify contrast and readability
- •Check all color slots used correctly
- •Test on actual devices/browsers
- •Ensure smooth theme switching
Meaningful Slot Names
Clear Naming:
- •Use descriptive names ("Primary Button", not "Color 1")
- •Indicate purpose ("Background Dark", "Text Light")
- •Consistent naming convention
- •Easier to manage and understand
Limit Slot Count
Keep It Simple:
- •Don't create too many slots (hard to manage)
- •Group similar colors
- •Typical range: 5-12 slots
- •More slots = more complexity
Document Theme Usage
Documentation:
- •Document color slots and purpose
- •Specify theme requirements
- •Guide for developers/designers
- •Easier handoff and maintenance
Keyboard Shortcuts
Color Management:
- •No specific theming shortcuts
- •Use standard color picker shortcuts
- •Property panel shortcuts apply
General:
- •Cmd/Ctrl + Z - Undo theme changes
- •Cmd/Ctrl + Y - Redo
See Complete Keyboard Shortcuts for all shortcuts.
Common Issues
Tips for Theming Success
Start Simple
Begin with Basics:
- •Create light/dark themes first
- •Add complexity gradually
- •Test frequently
- •Iterate based on feedback
Use Consistent Colors
Color Consistency:
- •Reuse color slots across animation
- •Don't create duplicate slots
- •Maintain color palette
- •Professional appearance
Plan for Maintenance
Long-Term Thinking:
- •Descriptive slot names
- •Document theme purpose
- •Organize slots logically
- •Easier updates later
Test on Target Platform
Platform Testing:
- •Test themes in actual player
- •Verify theme switching works
- •Check performance
- •Ensure compatibility
Next Steps
Dive deeper into specific theming topics: