Looking for some help with button debounce and latching please

Shown below is what I have so far. Currently only concerned about button 1 and I should be able to duplicate things after that. Anyhow, there is a 60 LED neopixel strip connected to pin 6, an LED to pin 24, and buttons with 10k pull up resistors on 25, 27, 29, and 31. The goal is to have the strip play a specific effect after a button is pressed and continue to do so until it is pressed again.

If I call Strobe() after case 2, it only runs the effect once and stops.. though the LED stays on. As shown I tried using a while() loop to run the effect if the case modeB1 is in case 3. However this seems to break the button function. Any advice would be greatly appreciated.

/* 
 Tinker costume code
 */
 
// Include required libraries
#include <Bounce2.h>
#include <Adafruit_NeoPixel.h>

// NeoPixel info
#define NUM_LEDS 60 
#define PIN 6 
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);

// Define buttons
#define BUTTON_PIN_1 25
#define BUTTON_PIN_2 27
#define BUTTON_PIN_3 29
#define BUTTON_PIN_4 31

// Define other
#define LED_PIN 24

// Instantiate button Bounce objects
Bounce debouncerB1 = Bounce();
Bounce debouncerB2 = Bounce(); 
Bounce debouncerB3 = Bounce();
Bounce debouncerB4 = Bounce();

// Define switch modes
byte modeB1 = 0;
byte modeB2 = 0;
byte modeB3 = 0;
byte modeB4 = 0;

//NeoPixel Strip effects

void Strobe(byte red, byte green, byte blue, int StrobeCount, int FlashDelay, int EndPause){
  for(int j = 0; j < StrobeCount; j++) {
    setAll(red,green,blue);
    showStrip();
    delay(FlashDelay);
    setAll(0,0,0);
    showStrip();
    delay(FlashDelay);
  }
 
 delay(EndPause);
}

void setup() {
  
  Serial.begin(115200);

  // Setup the first button:
  pinMode(BUTTON_PIN_1,INPUT);
  // After setting up the button, setup the Bounce instance :
  debouncerB1.attach(BUTTON_PIN_1);
  debouncerB1.interval(50); // interval in ms
  
   // Setup the second button :
  pinMode(BUTTON_PIN_2,INPUT);
  // After setting up the button, setup the Bounce instance :
  debouncerB2.attach(BUTTON_PIN_2);
  debouncerB2.interval(50); // interval in ms

  // Setup the third button:
  pinMode(BUTTON_PIN_3,INPUT);
  // After setting up the button, setup the Bounce instance :
  debouncerB3.attach(BUTTON_PIN_3);
  debouncerB3.interval(50); // interval in ms
  
   // Setup the fourth button:
  pinMode(BUTTON_PIN_4,INPUT);
  // After setting up the button, setup the Bounce instance :
  debouncerB4.attach(BUTTON_PIN_4);
  debouncerB4.interval(50); // interval in ms


  //Setup the LED :
  pinMode(LED_PIN,OUTPUT);

  // Intiaite NeoPixel Strip
  strip.begin();
  strip.show();

}

void loop() {

  
  // Update the Bounce instances :
  debouncerB1.update();
  debouncerB2.update();
  debouncerB3.update();
  debouncerB4.update();

  // Get the updated button values :
  int valueB1 = debouncerB1.read();
  int valueB2 = debouncerB2.read();
  int valueB3 = debouncerB3.read();
  int valueB4 = debouncerB4.read();

// Button 1 switch case
  switch( modeB1 )
 {
   case 0://------------------------ I'm off and in restmode
     if ( valueB1 == HIGH )
     { // switch relay ON
       //strip.show();
        digitalWrite(24, LOW); 
        
       
       modeB1 = 1;
     }
     break;
   case 1://------------------------ I'm in ON mode, w8 4 keyrelease
     if ( valueB1 == LOW )
       modeB1 = 2;
       
     break;
   case 2://------------------------ I'm ON and in restmode
     if ( valueB1 == HIGH )
     { // switch relay OFF
        Serial.println("Button1 has been pressed!");

       
        Strobe(0xff, 0xff, 0xff, 20, 50, 1000);
        digitalWrite(24, HIGH);
      
        
       modeB1 = 3;
     }
     break;
   case 3://------------------------ I'm in OFF mode, w8 4 keyrelease
     if ( valueB1 == LOW )
       modeB1 = 0;
     break;
 }//switch

Serial.println(modeB1);
  Serial.println(valueB1);

  // Turn on the LED if either button is pressed :
  /*
   * if ( valueB1 == LOW || value2 == LOW ) {
    digitalWrite(LED_PIN, HIGH );
  } 
  else {
    digitalWrite(LED_PIN, LOW );
  }
  */
}//loop


// Additional NeoPixel functions:

void showStrip() {
 #ifdef ADAFRUIT_NEOPIXEL_H
   // NeoPixel
   strip.show();
 #endif
 #ifndef ADAFRUIT_NEOPIXEL_H
   // FastLED
   FastLED.show();
 #endif
}

void setPixel(int Pixel, byte red, byte green, byte blue) {
 #ifdef ADAFRUIT_NEOPIXEL_H
   // NeoPixel
   strip.setPixelColor(Pixel, strip.Color(red, green, blue));
 #endif
 #ifndef ADAFRUIT_NEOPIXEL_H
   // FastLED
   leds[Pixel].r = red;
   leds[Pixel].g = green;
   leds[Pixel].b = blue;
 #endif
}

void setAll(byte red, byte green, byte blue) {
  for(int i = 0; i < NUM_LEDS; i++ ) {
    setPixel(i, red, green, blue);
  }
  showStrip();
}

There is a tutorial on debounce here;
https://www.arduino.cc/en/tutorial/debounce

An some info on libraries here;
https://forum.arduino.cc/index.php?topic=266132.0