The more I spend time coding for HTML attributes instead of classes, the more I like the direction.
Buttons were a lot easier to make classless than I originally thought – plus they fit right in with the "role" attribute, providing an indication for accessibility purposes. Rather than just have a button with a class, it makes more sense to provide context, for accessibility, indicating a button is for a warning, or danger, or success ... it ends up dual role, one for accessibility, and one for the document structure.
Although it takes a bit more space, I define an HTML attribute two ways. First, as a role "button-danger" and then as a data- element as "data-button-danger". It then is an exercise in what makes the most sense when coding the HTML. You can have <button role="button-danger"> or <button data-button-danger> ... I would suggest the choice is made based on the target audience.
Either way, I now have classless buttons. It's not as extensive as the kitchen-sink frameworks. I don't have light buttons, dark buttons, transparent buttons, grouped buttons ... well, or any other kitchen-sink stuff. There are seven buttons representing the most common uses, plus a disabled state for each.
I also now have classless text utilities. That's for light, bold, bolder (or heavy), normal text. Plus alignment (left, center, right), font style (italics, roman), and capitalization state.