Я понял это сам.
проблема здесь
.card header h2{
font-size:2em;
line-height: 1.5em;
}
Размер базового шрифта установлен на 10 пикселей. поэтому, когда я устанавливаю font-size: 2em, это означает, что font-size имеет значение "20px", поэтому, когда line-height установлен на 1.5em, он принимает текущее значение font-size, равное 20px (2em), поэтому теперь line-height: 1,5em означает 1,5 из 20px, что составляет 30px.
короче: em относится к локальному значению размера шрифта сначала к родительскому, а затем к глобальному