Enforce consistent theming across all prototype mockup screens. Auto-loads theme.yaml, validates CSS variable usage, prevents hardcoded values, and maintains visual consistency session-to-session...
This prevents the common problem where screens created in different sessions drift in style, creating an inconsistent prototype that undermines the design intent.
Do NOT invoke when:
ALWAYS use:
var(--color-primary), var(--space-4).btn--primary, .card, .form-input.density-compact, .density-spaciousWhen generating any prototype screen, FIRST load the theme:
# Read design/prototype/theme.yaml
theme:
locked: true|false
palette:
primary: "oklch(55% 0.2 250)"
# ... all colors
typography:
heading_font: "Inter, system-ui, sans-serif"
# ... font settings
spacing:
unit: "8px"
# ... spacing scale
tone:
style: "professional" # affects content voice
density: "comfortable" # affects spacing multipliers
If locked: true:
If locked: false:
locked: trueEvery screen MUST follow base.html structure:
<!DOCTYPE html>
<html lang="en">
<head>
<title>{{SCREEN_TITLE}} - {{APP_NAME}}</title>
<link rel="stylesheet" href="../../theme.css">
<link rel="stylesheet" href="../../shared.css">
<style>/* Screen-specific overrides only */</style>
</head>
<body class="theme-{{TONE_STYLE}} density-{{DENSITY}}">
<a href="#main-content" class="skip-link">Skip to main content</a>
<!-- Navigation (if applicable) -->
<nav class="nav nav--{{LAYOUT}}">...</nav>
<!-- Main Content -->
<main id="main-content" class="main main--{{LAYOUT}}">
{{SCREEN_CONTENT}}
</main>
</body>
</html>
| Element | Correct | Incorrect |
|---|---|---|
| Button background | var(--color-primary) |
#3b82f6 |
| Card padding | var(--space-4) |
32px |
| Heading size | var(--text-2xl) |
1.953rem |
| Border radius | var(--radius-md) |
8px |
| Box shadow | var(--shadow-md) |
0 4px 6px rgba(...) |
| Transition | var(--transition-base) |
150ms ease |
Use shared.css classes instead of inline styles:
<!-- CORRECT -->
<button class="btn btn--primary">Submit</button>
<div class="card card--elevated">...</div>
<input class="form-input" type="text">
<!-- INCORRECT -->
<button style="background: #3b82f6; padding: 8px 16px;">Submit</button>
<div style="background: white; box-shadow: 0 4px 6px rgba(0,0,0,0.1);">...</div>
After generating screen HTML, validate:
# Check for hex colors
grep -E "#[0-9a-fA-F]{3,6}" screen.html
# Check for rgb/rgba
grep -E "rgb\(|rgba\(" screen.html
# Check for hsl/hsla
grep -E "hsl\(|hsla\(" screen.html
# Check for pixel values not in variables
grep -E "padding:\s*\d+px" screen.html
grep -E "margin:\s*\d+px" screen.html
grep -E "gap:\s*\d+px" screen.html
# Check for hardcoded font-family
grep -E "font-family:\s*[^v]" screen.html # Should use var()
Ensure all visual properties use theme variables:
var(--color-*)var(--space-*)var(--text-*), var(--font-*)var(--shadow-*), var(--radius-*)Use context from theme.yaml to guide content structure:
After screen generation, output validation status:
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
THEME CONSISTENCY CHECK
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
Screen: dashboard-overview.html
Theme: [APP_NAME] Theme (locked)
CHECKLIST:
ā
Uses theme.css variables
ā
Imports shared.css
ā
No hardcoded colors
ā
No hardcoded spacing
ā
Uses shared component classes
ā
Follows base.html structure
ā
Includes skip link
ā
Matches layout pattern (sidebar)
ā
Applies density setting (comfortable)
STATUS: PASS
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
If violations found:
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
THEME CONSISTENCY CHECK
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
Screen: settings-form.html
Theme: [APP_NAME] Theme (locked)
VIOLATIONS FOUND:
Line 45: Hardcoded color
Before: background: #f3f4f6;
After: background: var(--color-neutral-100);
Line 67: Hardcoded spacing
Before: padding: 24px;
After: padding: var(--space-3);
Line 89: Missing shared class
Before: <button style="...">
After: <button class="btn btn--primary">
STATUS: FAIL (3 violations)
Auto-fixing violations...
STATUS: PASS (after fixes)
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
.spec-flow/templates/prototype/theme.yaml.spec-flow/templates/prototype/theme.css.spec-flow/templates/prototype/base.html.spec-flow/templates/prototype/shared.cssdocs/project/style-guide.md