Bouncing an LED on an LED strip

Hello,
I'm new to arduino and still getting my head around the syntax. I've written a really simple code that should bounce a light up an down an LED strip (Knightrider style). The code compiles and loads without error and the LEDs go up and then black for the length of time it would take them to come back down.

Can anyone point out the really obvious mistake that I just can't see?
I think either my DIRECTION variable must not be switching between 1 and 0 or the PIXEL number is never decrementing but I just can't see the wood for the trees any more!

#include "FastLED.h"
#define NUM_LEDS 30 // Number of LEDs in LED strip
#define LED_PIN 12 // Arduino pin for LED strip
#define BOUNCE 60 // twice the number of LEDs the time to go up and down
CRGB leds[NUM_LEDS];

// Variables
int DIRECTION = 1; // 1 is up 0 is down
int PIXEL = 0; // which Pixel are we affecting

void setup()
{
  FastLED.addLeds<WS2811, LED_PIN, GRB>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip );
}
void loop() {
  for (int count = 0; count < BOUNCE; count++) {

    leds[PIXEL] = CRGB::Blue;
    FastLED.show();
    // clear this led for the next time around the loop
    leds[PIXEL] = CRGB::Black;
    delay(30);

    if (DIRECTION == 1) { //if the direction is up increment the pixel
      PIXEL++;
    }
    else {
      PIXEL--; //else decrement the pixel
    }

    if (PIXEL >= NUM_LEDS) { //if the current pixel is greater or equal to the number of LEDS start going down
      DIRECTION = 0;
    }
    else if (PIXEL <= 0) { //if the current pixel is less or equal to 0 start going up
      DIRECTION = 1;
    }
    else {} //else carry on in the same direction
  }
}

Print the variables .. you’ll see that you don’t reset PIXEL once you overflow

Idiot! Ignore me.
If there are 30 pixels on a strip and you count from 0 then the last pixel is 29 NOT 30!

Here's the working code for anyone interested....

#include "FastLED.h"
#define NUM_LEDS 30 // Number of LEDs in LED strip
#define LED_PIN 12 // Arduino pin for LED strip
#define BOUNCE 60 // twice the number of LEDs the time to go up and down
CRGB leds[NUM_LEDS];

// Variables
int DIRECTION = 1; // 1 is up 0 is down
int PIXEL = 0; // which Pixel are we affecting

void setup()
{
FastLED.addLeds<WS2811, LED_PIN, GRB>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip );
}
void loop() {
for (int count = 0; count < BOUNCE; count++) {

leds[PIXEL] = CRGB::Blue;
FastLED.show();
// clear this led for the next time around the loop
leds[PIXEL] = CRGB::Black;
delay(30);

if (DIRECTION == 1) { //if the direction is up increment the pixel
PIXEL++;
}
else {
PIXEL--; //else decrement the pixel
}

if (PIXEL >= (NUM_LEDS - 1)) { //if the current pixel is greater or equal to the number of LEDS start going down
DIRECTION = 0;
}
else if (PIXEL <= 0) { //if the current pixel is less or equal to 0 start going up
DIRECTION = 1;
}
else {} //else carry on in the same direction
}
}

That’s one way to reverse before the last led. You coude otherwise had change PIXEL when changing direction and overflowing or underflowing