Submitted
This challenge took me quite A LOT of effort.
A difficulty I ran into was the layout of the form. Particularly, the expiration portion being grouped together. When running the error label the padding of a valid expiration would interfere with the invalid causing the error to be pushed further down. I used a CSS class called 'semi-valid' to mark when a group of inputs is partially valid to fix that particular issue. I am unsure if this is the best way to handle that issue.
Another difficulty was the validation, doing that by hand is very tedious process. I ended up using jQuery Validation Plugin to do the heavy lifting and it did an excellent job.
Finally, formatting the credit card number input to automatically add a whitespace in groups of 4 was tricky. You have to pay attention to the cursor position as you edit the value of the input.
Let me know if the responsiveness is lacking. I went through the debugger on Google Chrome to test out different screen sizes. Any suggestion are welcome!