на примере, что я дал сделано плавно, там как бы создается какой то элемент сзади и одновременно задается background-color у самой кнопки и делает вроде через transform3d, на вашем примере работает через transform: scale и из-за этого анимация идет по стадиям через keyframe и получается не плавно, можно пример плавной работы?