// Use when working with CSS, creating components, styling elements, refactoring styles, or reviewing CSS code. Guides CSS development following Tailwind + semantic component patterns with dark mode support and test coverage.
| name | css-development |
| description | Use when working with CSS, creating components, styling elements, refactoring styles, or reviewing CSS code. Guides CSS development following Tailwind + semantic component patterns with dark mode support and test coverage. |
Comprehensive workflow for CSS development using Tailwind + semantic component patterns. This skill automatically routes you to the appropriate specialized workflow based on context.
This skill will invoke one of three sub-skills:
css-development:create-component - Creating new CSS componentscss-development:validate - Reviewing existing CSScss-development:refactor - Transforming CSS to semantic patternsClaude Code will automatically load this skill when you:
All sub-skills follow these core patterns. Reference this section when working with CSS.
.button-primary, .card-header) not utility names (.btn-blue, .card-hdr)@apply directivedark: variants for all colored/interactive elements/* Button component - Primary action button with hover states
Usage: <button className="button-primary">Click me</button> */
.button-primary {
@apply bg-indigo-500 hover:bg-indigo-700 dark:bg-indigo-600 dark:hover:bg-indigo-800;
@apply px-6 py-3 rounded-lg font-medium text-white;
@apply transition-all duration-200 hover:-translate-y-0.5;
}
Key characteristics:
dark: prefixstyles/
โโโ components.css # All semantic component classes
โโโ __tests__/
โโโ components.test.ts # CSS and component tests
Works with React, Vue, Svelte, or vanilla HTML:
React:
const classes = `button-primary ${className}`.trim();
<button className={classes}>...</button>
Vanilla HTML:
<button class="button-primary custom-class">...</button>
Vue:
<button :class="['button-primary', customClass]">...</button>
Key principle: Apply semantic class + allow additional classes for customization.
.button, .input, .badge, .spinner).card, .form-field, .empty-state).page-layout, .session-card, .conversation-timeline)Static CSS Tests:
it('should have button component classes', () => {
const content = readFileSync('styles/components.css', 'utf-8');
expect(content).toContain('.button-primary');
});
Component Rendering Tests:
it('applies semantic class and custom className', () => {
render(<Button variant="primary" className="custom" />);
expect(screen.getByRole('button')).toHaveClass('button-primary', 'custom');
});
When this skill is invoked, follow these steps to route to the appropriate sub-skill:
Look at the user's request and recent conversation to determine intent:
Creating new components?
Validating existing CSS?
Refactoring CSS?
Based on context analysis:
If creating: Use the Skill tool to invoke css-development:create-component
If validating: Use the Skill tool to invoke css-development:validate
If refactoring: Use the Skill tool to invoke css-development:refactor
If ambiguous: Ask the user using AskUserQuestion tool:
Question: "What would you like to do with CSS?"
Options:
- "Create new component" (Guide creating new semantic CSS component classes)
- "Validate existing CSS" (Review CSS against established patterns)
- "Refactor CSS" (Transform inline/utility styles to semantic components)
Use the Skill tool to invoke the chosen sub-skill:
Example:
I'm routing you to the create-component workflow.
[Invoke Skill tool with skill: "css-development:create-component"]
Once the sub-skill is invoked, it takes over. The main skill's job is complete.