card handling abstraction work