| name | css-architecture |
| type | skill |
| description | Structure CSS/Tailwind for maintainability — tokens, BEM naming, specificity control, responsive patterns. |
| related-rules | ["architecture.md","accessibility.md"] |
| allowed-tools | Read, Write, Edit, Bash |
CSS Architecture Skill
Expertise: Design tokens, BEM, Tailwind utility classes, CSS custom properties, responsive design, dark mode.
Design Tokens — Never Hardcode Values
:root {
--color-primary: #3b82f6;
--color-primary-hover: #2563eb;
--color-surface: #ffffff;
--color-surface-raised: #f8fafc;
--color-text-primary: #0f172a;
--color-text-muted: #64748b;
--color-error: #ef4444;
--color-success: #22c55e;
--space-1: 0.25rem;
--space-2: 0.5rem;
--space-4: 1rem;
--space-6: 1.5rem;
--space-8: 2rem;
--font-size-sm: 0.875rem;
--font-size-base: 1rem;
--font-size-lg: 1.125rem;
--font-size-xl: 1.25rem;
--line-height-tight: 1.25;
--line-height-normal: 1.5;
--radius-sm: 0.25rem;
--radius-md: 0.5rem;
--radius-lg: 1rem;
--border-color: #e2e8f0;
}
@media (prefers-color-scheme: dark) {
:root {
--color-surface: #0f172a;
--color-text-primary: #f1f5f9;
--border-color: #1e293b;
}
}
BEM Naming Convention
.card { }
.card__header { }
.card__body { }
.card__footer { }
.card--featured { }
.card__header--sticky { }
Tailwind: Extracting Repeated Patterns
<button className="px-4 py-2 bg-blue-600 text-white rounded-md hover:bg-blue-700 focus:ring-2 focus:ring-blue-500 disabled:opacity-50">
<button className="px-4 py-2 bg-blue-600 text-white rounded-md hover:bg-blue-700 focus:ring-2 focus:ring-blue-500 disabled:opacity-50">
// ✅ Extract to component variant
const buttonVariants = cva(
"px-4 py-2 rounded-md focus:ring-2 disabled:opacity-50 transition-colors",
{
variants: {
variant: {
primary: "bg-blue-600 text-white hover:bg-blue-700 focus:ring-blue-500",
secondary: "bg-gray-100 text-gray-900 hover:bg-gray-200 focus:ring-gray-400",
ghost: "text-gray-700 hover:bg-gray-100 focus:ring-gray-400",
},
size: {
sm: "px-3 py-1.5 text-sm",
md: "px-4 py-2",
lg: "px-6 py-3 text-lg",
},
},
defaultVariants: { variant: "primary", size: "md" },
}
);
Responsive Design Patterns
.card {
padding: var(--space-4);
}
@media (min-width: 768px) {
.card { padding: var(--space-6); }
}
@media (min-width: 1024px) {
.card { padding: var(--space-8); }
}
.card-container { container-type: inline-size; }
@container (min-width: 400px) {
.card { display: grid; grid-template-columns: auto 1fr; }
}
Specificity Rules
#app .container .card.featured > .header span.title { }
.card__title { }
.card--featured .card__title { }