Happy to share the code and the light!
As for a multi-colored version of this code, there are a lot of ways to skin the proverbial cat.
The least-weird way is that along side your
array, you also declare an array of HSV colors, one for each led, like this
Then you do all your animation in the pixelColor array, and each time just before you call FastLED.show(), you do this:
hsv2rgb_rainbow( pixelColor, leds, NUM_LEDS);
This will convert all your pixelColor's into RGB values in the leds array, and then display them.
The problem is that this takes up exactly twice as much RAM as just keeping RGB values around, and you may not have that much RAM. Probably don't in fact.
Another way to to it is to have a separate, smaller array of "which pixels am I animating right now", and for each of those pixels, keep information like what the new target hue is, what the current brightness is, whether you're still brightening the old color or fading in a new color, etc. This takes way less RAM, but needs more code (and thinking).
There are, of course, lots of other ways to do it, too, but at this point I'd recommend playing around a bit and see what you come up with.