Your override is there, it is later in the file, and the button still ignores it. Specificity is not a score, it is three separate counts compared left to right: ids, then classes and their kin, then types. One id outranks any number of classes; one class outranks any number of element names. Add the rules that target one button and see which one the browser will pick, and the seven things that get a say before specificity even comes up.
.btn010(0,1,0)
.card .btn020(0,2,0)
#app .btn110(1,1,0)
.btn.btn020(0,2,0)
:where(.card) .btn010(0,1,0)
ids · classes, attributes, pseudo-classes · types, pseudo-elements. Compared left to right; a single id beats a hundred classes. Ties go to the rule that comes last, so order in the list is source order.