Unfortunately, that's the way selector specificity works and Unity's style have a certain level of specificity that needs to be accounted for. C# class names are less specific than .class-names, and Unity's stylesheets uses `.unity-button` on its buttons. That's why `.btn` is applied, but not `Button`.
As for the hover state, same reason. Unity button has a `.unity-button:enabled:hover` selector, which is more specific than `.btn:hover`. It would need to be `.btn:enabled:hover`.
The UI Debugger can be used to inspect these selectors and sort out the specificity needed.