Data attributes and better CSS

Originally, the CSS classes this used were added one by one to their own separate stylesheets. Now they can be added in bulk.

We also didn't like using classes (they might conflict with others), so those have turned into data attributes instead.