slidev-styles
Slidev Styles
Brand discovery, theme generation, and style validation for Slidev presentations.
When to Use This Skill
Activate when:
- Extracting brand tokens (colors, fonts, spacing) from a website using Playwright MCP
- Creating a Slidev theme from brand guidelines or a style guide URL
- Validating slides for brand compliance or WCAG contrast requirements
- Configuring UnoCSS theme shortcuts and CSS variables for a presentation
- Applying a logo, custom font, or color palette to existing slides
- Working from a manual brand brief when no website is available
Brand Discovery Pipeline Overview
The full brand discovery workflow has four stages:
- Navigate to the brand site using Playwright MCP tools
- Extract CSS variables and computed styles via
browser_evaluate - Parse extracted values into a brand config JSON object
- Generate the Slidev theme from the brand config
For step-by-step Playwright extraction details, see references/discovery-pipeline.md.
For theme generation details, see references/theme-generation.md.
For validation details, see references/validation-checklist.md.
Playwright MCP Tools
Use these tools during brand extraction:
| Tool | Purpose |
|---|---|
browser_navigate |
Open the brand site URL |
browser_evaluate |
Run JavaScript to extract CSS vars and computed styles |
browser_take_screenshot |
Capture rendered slides or pages for visual validation |
browser_snapshot |
Get accessibility tree snapshot for structural inspection |
browser_close |
Close the browser session when extraction is complete |
Always call browser_close after extraction to release resources.
Brand Config JSON Schema
Produce a brand config JSON object after extraction. All fields are optional; populate what is available.
{
"colors": {
"primary": "#hex",
"secondary": "#hex",
"accent": "#hex",
"background": "#hex",
"text": "#hex",
"error": "#hex",
"success": "#hex"
},
"fonts": {
"heading": "Font Name",
"body": "Font Name",
"code": "Monospace Font"
},
"spacing": {
"slide-padding": "value",
"section-gap": "value"
},
"logo": {
"url": "path/to/logo",
"position": "top-left|top-right"
}
}
Save the brand config as brand-config.json in the project root before proceeding to theme generation.
Theme Generation Overview
Convert the brand config to a Slidev theme by:
- Creating
styles/index.csswith CSS custom properties mapped from brand config colors and spacing - Configuring UnoCSS theme extensions in
uno.config.ts(orvite.config.ts) with brand colors and font stacks - Adding UnoCSS shortcut classes for common slide patterns (headings, callouts, code blocks)
- Loading fonts via Google Fonts import in
styles/index.cssor placing font files inpublic/fonts/ - Creating a global
components/Logo.vuecomponent for logo placement
For complete theme generation with code examples, see references/theme-generation.md.
Validation Overview
After applying a theme, validate compliance by:
- Taking screenshots of rendered slides with
browser_take_screenshot - Running contrast ratio checks using the WCAG AA formula via
browser_evaluate - Verifying rendered font families match the brand spec
- Checking all colors against the brand palette within a tolerance of ±5 hex units per channel
- Confirming logo placement and sizing
WCAG 2.1 AA requirements (per core:accessibility):
- Normal text (< 18pt): minimum contrast ratio 4.5:1
- Large text (≥ 18pt or ≥ 14pt bold): minimum contrast ratio 3:1
- UI components and graphical objects: minimum contrast ratio 3:1
For the full validation workflow and automated checks, see references/validation-checklist.md.
Manual Brand Input
When no website is available, gather brand information using this questionnaire:
Brand Color Questionnaire
--------------------------
1. Primary brand color (main CTA, headings): ___
2. Secondary brand color (accents, highlights): ___
3. Background color (slides): ___
4. Body text color: ___
5. Accent/success color (callouts): ___
6. Error/warning color: ___
Font Questionnaire
------------------
7. Heading font (name and weight): ___
8. Body text font: ___
9. Code/monospace font: ___
10. Are fonts hosted on Google Fonts, or do you have local files?
Spacing Questionnaire
---------------------
11. Slide padding (distance from edge to content): ___
12. Gap between major sections: ___
Logo Questionnaire
------------------
13. Logo file URL or local path: ___
14. Logo placement: top-left / top-right / none
Populate the brand config JSON from questionnaire answers, then proceed to theme generation.
Integration with core:accessibility
Load core:accessibility when:
- Validating contrast ratios for slide text and UI components
- Reviewing color combinations for color-blindness considerations
- Checking that information is not conveyed by color alone
Key WCAG requirements that apply to slide presentations:
- Text on slide backgrounds must meet 4.5:1 contrast ratio (AA)
- Heading text at large sizes must meet 3:1 contrast ratio
- Charts and diagrams must have text labels or patterns, not only color
- Slide transitions and animations must not flash more than 3 times per second
Slidev Theme File Structure
A self-contained brand theme lives in a slidev-theme-brand/ directory:
slidev-theme-brand/
├── package.json # Theme package with name "slidev-theme-brand"
├── styles/
│ └── index.css # CSS custom properties and base styles
├── uno.config.ts # UnoCSS theme extensions and shortcuts
└── components/
└── Logo.vue # Global logo component for all slides
Reference the theme from the presentation frontmatter:
---
theme: ./slidev-theme-brand
---
References
references/discovery-pipeline.md— Step-by-step Playwright MCP extraction workflow with JavaScript snippetsreferences/theme-generation.md— Converting brand config to UnoCSS theme and CSS variablesreferences/validation-checklist.md— Contrast validation, font verification, and compliance checklist
More from vinnie357/claude-skills
material-design
Guide for implementing Material Design 3 (Material You). Use when designing Android apps, implementing dynamic theming, or following Material component patterns.
18elixir-testing
Guide for Elixir testing with ExUnit. Use when writing unit tests, implementing property-based tests, setting up mocks, or organizing test suites.
16elixir-anti-patterns
Identify and refactor Elixir anti-patterns. Use when reviewing Elixir code for smells, refactoring problematic patterns, or improving code quality.
15phoenix-framework
Guide for Phoenix web applications. Use when building Phoenix apps, implementing LiveView, designing contexts, setting up channels, or integrating Tidewave MCP dev tools.
14nushell
Guide for using Nushell for structured data pipelines and scripting. Use when writing shell scripts, processing structured data, or working with cross-platform automation.
14documentation-writing
Guide for writing technical documentation. Use when creating README files, API documentation, guides, or inline code documentation.
12