It might be worth it to spend a little bit of time to make sure your CSS selectors are not too broad (which would cause the issue you’re seeing in the admin interface)
However, if you simply don’t want any custom CSS to apply to the admin, you can actually use something similar to what you described.
Discourse supports SCSS which means that you only need to addbody:not(.admin-interface)once to your theme. You don’t need to add it to every rule.
Something like this
body:not(.admin-interface) {
// all the CSS rules from your theme go here
}