 void animateIdle() {
   updateParticles();
 
+  fade_timer -= ANIMATE_SECS_PER_TICK;
+  float dimmer = (FADE_TIME - fade_timer) / FADE_TIME;
+  dimmer = min(dimmer, 1.0);
+
   // Blank all LEDs
   for (int i = 0; i < NUM_LEDS; i++) {
     leds_inner_values[i].r = 0;


void setupIdleAnimation() {
  randomSeed(analogRead(0));

  for (int i = 0; i < NUM_LEDS; i++) {
    positions[i] = false;

  // Apply particles to LEDs
  for (int i = 0; i < NUM_PARTICLES; i++) {
    Particle p = particles[i];

    int brightness = p.brightness * dimmer;

    leds_inner_values[p.position].r = brightness;
    leds_inner_values[p.position].g = brightness;
    leds_inner_values[p.position].b = brightness;

    leds_outer_values[p.position].r = brightness;
    leds_outer_values[p.position].g = brightness;
    leds_outer_values[p.position].b = brightness;
  }

  // Apply values to the FastLED array
  for (int i = 0; i < NUM_MIC_LEDS; i++) {
    mic_leds_val[i] += 255 * ANIMATE_SECS_PER_TICK * IDLE_MIC_ROTATIONS_PER_SEC;
    if (mic_leds_val[i] > 255) { mic_leds_val[i] = 0; }
    mic_leds_rgb[i] = CHSV(0, 0, mic_leds_val[i] * dimmer);
  }
}
