implement button hover and active states