card implementation without canvas