card event framework