| name | creating-revealjs-presentations |
| description | Creates, customizes, and troubleshoots Quarto Reveal.js presentations with proper SCSS theming, layout patterns, and extensions. Use when authoring .qmd slides or styling with SCSS. |
Purpose
Guide the agent to write production-ready Quarto Reveal.js slides in a single pass:
- Correct YAML configuration
- SCSS theme customization (variables + rules)
- Layout patterns (columns, absolute positioning, backgrounds)
- Extension usage (Font Awesome, embedio, editable)
- Accessibility and maintainability
When to Use This Skill
Use when:
- Creating new
.qmdpresentation files - Writing or modifying SCSS themes for Reveal.js
- Adding extensions (icons, embeds, interactive elements)
- Troubleshooting slide rendering issues
- Converting content into slide format
Do NOT use when:
- Working with Quarto documents that are NOT presentations
- The task involves only HTML/PDF/DOCX output formats
Inputs and Outputs
Inputs:
- User's content requirements (topic, structure, style preferences)
- Existing .qmd files or SCSS to modify
- Design constraints (colors, fonts, branding)
Outputs:
.qmdfiles with proper YAML frontmatter- SCSS files with
/*-- scss:defaults --*/and/*-- scss:rules --*/sections - Extension installation commands when needed
Behavior and Guidelines
YAML Configuration
- Theme layering: Use
theme: [default, styles/custom.scss]— later entries override earlier ones. - Scroll View: Enable with
scroll-view: truefor Reveal.js v5 (Quarto 1.6+). - Title slide backgrounds: Use
title-slide-attributes:withdata-prefixed keys.
SCSS Structure
- Two required sections:
/*-- scss:defaults --*/for variables (colors, fonts, sizes)/*-- scss:rules --*/for CSS rules
- Override specificity: Prefix rules with
.reveal .slideto beat built-in styles. - Background image paths: Use
url("../../../../../assets/...")from compiled CSS location (5 levels up).
Layout Patterns
- Columns: Use
:::: {.columns}with::: {.column width="X%"}children. - Fit text: Wrap with
::: r-fit-textfor auto-sizing headlines. - Stack: Use
.r-stackto overlay elements revealed sequentially. - Absolute positioning: Add
{.absolute top="X" left="Y"}to images/divs. - Vertical center: Use
.centerclass for vertical centering.
Advanced Features
- Fragments: 20+ animation effects (
fade-*,highlight-*,grow, etc.) withfragment-indexordering. - Auto-animate: Automatic transitions between slides using
data-idmatching. - Vertical slides: Create slide stacks with navigation modes (linear/vertical/grid).
- Parallax backgrounds: Scrolling background images for depth effect.
- Presentation sizing: Control dimensions, margins, and scaling.
Extensions
- Font Awesome:
quarto add quarto-ext/fontawesome→{{< fa icon >}} - embedio:
quarto add coatless-quarto/embedio→{{< revealjs file="..." >}} - editable:
quarto add EmilHvitfeldt/quarto-revealjs-editable→ drag/resize in preview
Accessibility
- Background images cannot have alt text — add visible text descriptions.
- Use
title="..."in Font Awesome shortcodes. - Ensure color contrast (avoid pure black/white).
Step-by-Step Procedure
Clarify requirements: Ask about topic, slide count, style preferences, required extensions.
Set up YAML frontmatter:
- Define
format: revealjswith theme, transitions, slide-number - Add
execute: echo: falsefor code-heavy slides - Reference
reference.md§ Minimal YAML Template
- Define
Create SCSS theme (if customizing):
- Define color palette in
scss:defaults($body-bg, $body-color, $link-color) - Add font family and size variables
- Write rules in
scss:ruleswith.reveal .slideprefix
- Define color palette in
Author slide content:
- Use
##for slide breaks (or---for untitled slides) - Apply layout patterns from reference
- Add speaker notes with
::: {.notes}
- Use
Install extensions (if needed):
- Provide
quarto addcommands - Show YAML activation (
revealjs-plugins,filters)
- Provide
Validate:
- Check
quarto previewruns without errors - Verify Scroll View (
Rkey) and Print View (?view=print)
- Check
Summarize what was created and any assumptions made.
Use of Reference Files
Load specific modules from resources/ based on task:
| Module | When to Load |
|---|---|
resources/yaml-config.md |
YAML frontmatter, sizing, navigation |
resources/scss-theming.md |
Theme customization, variables |
resources/layout.md |
Column, stack, positioning patterns |
resources/animation.md |
Fragments, auto-animate effects |
resources/extensions.md |
FontAwesome, embedio, editable |
resources/advanced.md |
Parallax, vertical slides, templates |
resources/troubleshooting.md |
Debugging rendering issues |
Examples
Example 1 – New presentation with custom theme
- User goal: "Create slides for a tech talk with dark theme and code highlighting"
- Expected behavior:
- Generate YAML with
theme: [default, styles/dark.scss] - Create SCSS with dark $body-bg, light $body-color
- Enable
code-line-numbers: true,code-overflow: wrap - Provide slide structure with
##headers
- Generate YAML with
Example 2 – Add icons and embeds
- User goal: "Add GitHub icon and embed another slide deck"
- Expected behavior:
- Provide
quarto add quarto-ext/fontawesomecommand - Show
{{< fa brands github >}}syntax - Provide
quarto add coatless-quarto/embediocommand - Show
{{< revealjs file="other.html" >}}syntax
- Provide
Example 3 – Fix background image not showing
- User goal: "My SCSS background-image doesn't work"
- Expected behavior:
- Diagnose path issue (CSS compiles to deep directory)
- Suggest
url("../../../../../assets/images/bg.jpg")path - Explain the 5-level depth from
_output/index_files/libs/revealjs/dist/theme/