replace delay()

How can I shrink it?

you can remove the - static unsigned long lastmillis = 0; - from the patterns()
and use one global unsigned long lastmillis = 0;
That will save you 4 bytes per pattern

you might reuse state as a global var instead of local statics. (might introduce some less defined behavior)

static int count = 0; idem

global vars can be used in all functions but they share state, where a static function has its scope only within the function it is defined in.

int interval = 90; => uint8_t interval = 90; use 8 bit variables where possible saves a byte per place
==> also in for (uint8_t i=0; i< 10; i++){

should get you started.