Mix a CSS reset, a design system, components, and utility classes in one project and specificity wars follow. Making a utility class like `.text-red` beat a component rule like `.card .title` usually meant reaching for `!important` or deliberately bloating the selector.
Declare order upfront with `@layer reset, base, components, utilities;`, and afterward a later layer beats an earlier one no matter how low its specificity is inside that layer — specificity only matters within a layer; priority between layers is purely declaration order. Utility frameworks like Tailwind use layers internally for exactly this.
Check caniuse/MDN baseline for support. Without it, the only option remains what's always worked: managing load order carefully and designing specificity by hand.
When to use
Deciding priority in a large project mixing resets, a design system, and utility classes — without `!important`.