PaulS:
There's the debouncing problem though...
True, but what OP wanted to do in each mode was going to take time, so debouncing would be handled by that.
Yes, but I was thinking about having the led pattern implemented with a state machine, rather than using delay().
Anyway your code was a very good starting point. Let's see what the OP thinks about it.