button: pseudo + action