 rgb_color dkgray = {5, 5, 5};
 
 #define NPALETTE 16
-#define NPRETTY_COLORS 13
-rgb_color palette[NPALETTE] = { white, red, orange, yellow, ltgreen, green, seafoam, cyan, ltblue, blue, purple, magenta, pink, black, gray, dkgray };
+#define NPRETTY_COLORS 12
+rgb_color palette[NPALETTE] = { red, orange, yellow, ltgreen, green, seafoam, cyan, ltblue, blue, purple, magenta, pink, white, black, gray, dkgray };
 rgb_color adjusted_palette[NPALETTE];
 
 rgb_color scale_color(rgb_color color, float scale){

  memcpy(adjusted_palette, palette, sizeof(palette));
}

#define NO_EFFECT 0
#define BREATHE_ON 1
#define RANDOM 2


#define STATIC_ON 101

#define RANDOM_EFFECTS 12
int random_effects[] = { NO_EFFECT, BREATHE_ON, RANDOM, BLINK_ON, BLINK_ON_1, BLINK_ON_2, BLINK_ON_3, BLINK_ON_4, BLINK_ON_5, BLINK_ON_6, BLINK_ON_A, BLINK_ON_B }; 

void shift_buffer(rgb_color * buffer, bool include_effects = true, int max = ANIM_LED_COUNT){
  for(int i = max - 1; i >= 1; i--){
    buffer[i] = buffer[i-1];
    if(include_effects){
      effects[i] = effects[i-1];
    }
  }
}

void push_color(rgb_color color, bool display = false, int effect = NO_EFFECT, rgb_color *buffer = colors, int max = ANIM_LED_COUNT){
  shift_buffer(buffer, effect = LEAVE_EFFECT ? false : true, max);
  
  buffer[0] = color;

  if(effect != LEAVE_EFFECT){
    effects[0] = effect;
  }
  
  if(display){
    display_buffer(buffer);
  }
}

void set_color(int pos, rgb_color color, bool display = false, int effect = NO_EFFECT, rgb_color *buffer = colors){
  buffer[pos] = color;

  if(effect != LEAVE_EFFECT){
    effects[pos] = effect;
  }
  
  if(display){
    display_buffer(buffer);
  }
}


#define MAX_BLINK 6000
#define BLINK_0 0
