Utility classes mask the architectural challenge of CSS. Writing clean, maintainable, scalable native CSS is an art form involving custom properties and the cascade. Frameworks just bypass the cascade entirely rather than teaching developers how to leverage it.