css-development:validate
This skill should be used when reviewing or auditing existing CSS code for consistency with established patterns. Triggers on "review CSS", "audit styles", "check CSS", "validate stylesheet", "CSS review". Checks semantic naming, dark mode coverage, Tailwind usage, and test coverage.
$ 安裝
git clone https://github.com/2389-research/claude-plugins /tmp/claude-plugins && cp -r /tmp/claude-plugins/css-development/skills/validate ~/.claude/skills/claude-plugins// tip: Run this command in your terminal to install the skill
name: css-development:validate description: This skill should be used when reviewing or auditing existing CSS code for consistency with established patterns. Triggers on "review CSS", "audit styles", "check CSS", "validate stylesheet", "CSS review". Checks semantic naming, dark mode coverage, Tailwind usage, and test coverage.
CSS Development: Validate
Overview
Reviews existing CSS code against established patterns and provides specific, actionable feedback:
- Semantic naming conventions
- Tailwind
@applycomposition - Dark mode variant coverage
- Test coverage (static + rendering)
- Documentation quality
- Composition opportunities
This is a sub-skill of css-development - typically invoked automatically via the main skill.
When This Skill Applies
Use when:
- Reviewing existing CSS code
- Auditing component styles for consistency
- Checking if patterns are being followed
- Before merging CSS changes
- Refactoring prep (identify issues first)
Pattern Reference
This skill validates against patterns documented in the main css-development skill:
Semantic naming: .button-primary not .btn-blue
Tailwind composition: Use @apply to compose utilities
Dark mode: Include dark: variants
Test coverage: Static CSS + component rendering tests
Documentation: Usage comments above classes
Workflow
When this skill is invoked, create a TodoWrite checklist and work through validation systematically.
Announce Usage
"I'm using the css-development:validate skill to review this CSS against established patterns."
Create TodoWrite Checklist
Use the TodoWrite tool:
Validating CSS:
- [ ] Read CSS files (load components.css and related styles)
- [ ] Check semantic naming (verify descriptive class names)
- [ ] Verify @apply usage (ensure Tailwind composition)
- [ ] Check dark mode coverage (confirm dark: variants present)
- [ ] Look for composition opportunities (identify reusable patterns)
- [ ] Verify test coverage (check static and rendering tests exist)
- [ ] Check documentation (ensure usage comments present)
- [ ] Report findings (provide file:line references and suggestions)
Validation Checklist Details
Step 1: Read CSS Files
Action: Use Read tool to load CSS files for review
Files to check:
styles/components.css(main semantic components)- Any component-specific CSS files mentioned
- Inline styles in component files (if applicable)
What to capture:
- All class definitions
- Usage of
@applyvs. inline utilities - Presence of dark mode variants
- Documentation comments
Mark as completed when files are loaded and understood.
Step 2: Check Semantic Naming
Action: Review all class names for semantic, descriptive naming
Good patterns:
.button-primary,.card-header,.form-field,.empty-state- Context + component:
.session-card,.marketing-hero - Base + variant:
.badge-success,.button-danger
Bad patterns (report these):
- Utility names:
.btn-blue,.card-sm,.text-big - Abbreviations:
.btn,.hdr,.desc - Generic:
.component,.item,.thing - Random:
.style1,.custom,.special
For each issue:
- Note file and line number
- Show the problematic class name
- Suggest semantic alternative based on usage context
Mark as completed when all class names reviewed.
Step 3: Verify @apply Usage
Action: Check that Tailwind utilities are composed via @apply, not scattered in markup
Good patterns:
.button-primary {
@apply bg-indigo-500 hover:bg-indigo-700 px-6 py-3 rounded-lg;
}
Bad patterns (report these):
<!-- Utilities in markup instead of semantic class -->
<button class="bg-indigo-500 hover:bg-indigo-700 px-6 py-3 rounded-lg">
Click me
</button>
Check:
- Are utilities composed into semantic classes via
@apply? - Are there repeated utility combinations in markup that should be extracted?
- Are semantic classes actually being used in components?
For each issue:
- Show the problematic markup or CSS
- Explain why it should use
@apply - Suggest extraction to semantic class
Mark as completed when @apply usage is reviewed.
Step 4: Check Dark Mode Coverage
Action: Verify colored and interactive elements have dark: variants
What needs dark mode:
- Background colors (bg-*)
- Text colors (text-*)
- Border colors (border-*)
- Interactive states (hover, focus)
- Shadows that affect visibility
What typically doesn't need dark mode:
- Spacing utilities (p-, m-, gap-*)
- Layout utilities (flex, grid, etc.)
- Pure structural styles
Pattern to check:
/* Good - has dark mode */
.card {
@apply bg-white dark:bg-gray-800 text-gray-900 dark:text-white;
}
/* Bad - missing dark mode */
.card {
@apply bg-white text-gray-900;
}
For each issue:
- Note which class is missing dark mode variants
- Show the current CSS
- Suggest specific
dark:utilities to add
Mark as completed when dark mode coverage is checked.
Step 5: Look for Composition Opportunities
Action: Identify repeated patterns that could use existing classes or be extracted
Look for:
- Same utility combinations repeated in multiple classes
- Similar patterns that could share a base class
- Inline utilities that could reference semantic classes
Example issue:
/* Repeated pattern */
.card-primary {
@apply bg-white dark:bg-gray-800 rounded-lg shadow-md p-6;
}
.card-secondary {
@apply bg-white dark:bg-gray-800 rounded-lg shadow-md p-6;
@apply border-2 border-gray-200;
}
/* Suggestion: Extract base .card class, add variants */
.card {
@apply bg-white dark:bg-gray-800 rounded-lg shadow-md p-6;
}
.card-secondary {
@apply border-2 border-gray-200;
}
For each opportunity:
- Show the repeated pattern
- Suggest base class + composition
- Estimate impact (how many places benefit)
Mark as completed when composition opportunities are identified.
Step 6: Verify Test Coverage
Action: Check that CSS classes have test coverage
Static CSS tests - Check styles/__tests__/components.test.ts:
it('should have button-primary class', () => {
expect(content).toContain('.button-primary');
});
Component rendering tests - Check component test files:
it('applies button-primary class', () => {
render(<Button variant="primary">Click</Button>);
expect(screen.getByRole('button')).toHaveClass('button-primary');
});
For classes without tests:
- List the class name
- Note which test is missing (static, rendering, or both)
- Provide test template to add
Mark as completed when test coverage is checked.
Step 7: Check Documentation
Action: Verify components have usage documentation
Required documentation:
- Comment above CSS class explaining purpose
- Usage example in comment
Example:
/* Button component - Primary action button with hover lift effect
Usage: <button className="button-primary">Click me</button> */
.button-primary {
...
}
For classes without documentation:
- List the class name and location
- Suggest documentation to add based on class purpose
Mark as completed when documentation is checked.
Step 8: Report Findings
Action: Compile all findings into structured report
Report format:
## CSS Validation Report
### ✅ Good Patterns Found
- `.button-primary` follows semantic naming (components.css:15)
- Dark mode variants present on interactive elements (components.css:17-19)
- Tests cover className application (Button.test.tsx:23)
- Documentation comments present (components.css:14)
### ⚠️ Issues Found
#### Semantic Naming Issues
**components.css:45** - `.btn-blue` uses utility naming
- Current: `.btn-blue`
- Suggestion: Rename to `.button-secondary` for consistency with `.button-primary`
- Impact: Update 3 component files
**components.css:67** - `.card-sm` uses size in name
- Current: `.card-sm`
- Suggestion: Extract size to utility or rename to `.card-compact` for semantic meaning
- Impact: Update 5 usages
#### Missing Dark Mode Variants
**components.css:78** - `.card-header` missing dark mode
- Current: `@apply bg-gray-100 text-gray-900`
- Suggestion: Add `dark:bg-gray-800 dark:text-white`
- Impact: Visual bug in dark mode
**components.css:92** - `.badge` missing dark mode
- Current: `@apply bg-indigo-100 text-indigo-800`
- Suggestion: Add `dark:bg-indigo-900 dark:text-indigo-200`
- Impact: Low contrast in dark mode
#### Missing Test Coverage
**components.css:102** - `.empty-state` has no tests
- Missing: Both static CSS test and component rendering test
- Suggestion: Add tests to verify class exists and renders correctly
#### Missing Documentation
**components.css:115** - `.session-card` lacks usage comment
- Suggestion: Add comment explaining purpose and usage example
### 📊 Summary
- **Total classes reviewed:** 12
- **Issues found:** 7
- **Priority:** 2 high (dark mode bugs), 3 medium (naming), 2 low (docs)
### 🎯 Recommended Actions
1. **High priority:** Add dark mode variants to `.card-header` and `.badge` (visual bugs)
2. **Medium priority:** Rename `.btn-blue` → `.button-secondary` for consistency
3. **Medium priority:** Add test coverage for `.empty-state`
4. **Low priority:** Add documentation comments to undocumented classes
Would you like me to fix these issues, or would you prefer to address them manually?
Mark as completed when report is generated and presented.
Completion
After generating the validation report:
-
Ask user what they want to do next:
- Fix issues automatically?
- Fix specific issues only?
- Just wanted the report?
-
Offer to invoke refactor skill if there are structural issues that need refactoring
-
Suggest committing any fixes made
Repository
