Double speed in countdown timer when button pressed

So I’m pretty new in arduino(and math), and I want to make a countdown timer which doubles in speed every time an input comes.

Can somebody please look at the code and see what I’m doing wrong?
The first time I send an input it works just fine, but when I try to send more inputs, the timer jumps forward in time, while the speed still doubles

//Variables you need to see.
int secDivider = 1000;
int timeInSec = 240;


currentMil = millis() - previousMil;
seconds = timeInSec - (currentMil / secDivider);
minutes = seconds / 60;

//Making sure seconds does not reach over 60   
if(minutes >= 1){
int minuteChange = minutes * 60;
seconds -= minuteChange;
}


//Here comes the input.
if(Serial.readString() == "d"){
previousMil = currentMil;
timeInSec -= millis() / 1000;
secDivider /= 2;
}

Please post a complete program that shows the problem.

OK, here is the entire program.

#include <Wire.h> 
#include <Keypad.h>
#include <LiquidCrystal_I2C.h>

#define BACKLIGHT_PIN     13

LiquidCrystal_I2C lcd(0x27);
//LiquidCrystal_I2C lcd(0x27, BACKLIGHT_PIN, POSITIVE);

//-----------------------------------------------------

const byte numRows= 4;
const byte numCols= 4;
char keymap[numRows][numCols]= { {'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'} };
byte rowPins[numRows] = {9,8,7,6};
byte colPins[numCols]= {5,4,3,2};

Keypad myKeypad= Keypad(makeKeymap(keymap), rowPins, colPins, numRows, numCols);

//-----------------------------------------------------
//Something about character creation I don't understand anything about...
const uint8_t charBitmap[][8] = {
   { 0xc, 0x12, 0x12, 0xc, 0, 0, 0, 0 },
   { 0x6, 0x9, 0x9, 0x6, 0, 0, 0, 0 },
   { 0x0, 0x6, 0x9, 0x9, 0x6, 0, 0, 0x0 },
   { 0x0, 0xc, 0x12, 0x12, 0xc, 0, 0, 0x0 },
   { 0x0, 0x0, 0xc, 0x12, 0x12, 0xc, 0, 0x0 },
   { 0x0, 0x0, 0x6, 0x9, 0x9, 0x6, 0, 0x0 },
   { 0x0, 0x0, 0x0, 0x6, 0x9, 0x9, 0x6, 0x0 },
   { 0x0, 0x0, 0x0, 0xc, 0x12, 0x12, 0xc, 0x0 }
   
};

//-----------------------------------------------------

int minutes;
int seconds;
int stopped = 0;
int timerSpeed = 0;
int secDivider = 1000;
int currentMil;
int previousMil;
int rawSeconds;
int multiTimes = 0;

int timeInSec = 240; //Seconds before explosion. Shown on LCD..

//-----------------------------------------------------
//-----------------------------------------------------
//-----------------------------------------------------

void setup()
{
  Serial.begin(9600);
   int charBitmapSize = (sizeof(charBitmap ) / sizeof (charBitmap[0]));

  pinMode ( BACKLIGHT_PIN, OUTPUT );
  digitalWrite ( BACKLIGHT_PIN, HIGH );
  
  lcd.begin(16,2);

  for ( int i = 0; i < charBitmapSize; i++ )
  {
    lcd.createChar ( i, (uint8_t *)charBitmap[i] );
  }
  Serial.setTimeout(0);
  lcd.home ();  
}

//-----------------------------------------------------
//-----------------------------------------------------
//-----------------------------------------------------

void loop()
{
  while(stopped == 0){
    currentMil = millis() - previousMil;
    seconds = timeInSec - (currentMil / secDivider);
    minutes = seconds / 60;
   
    if(minutes >= 1){
      int minuteChange = minutes * 60;
      seconds -= minuteChange;
    }
    lcd.setCursor(7,0);
    lcd.print(minutes);
    Serial.print(minutes);
    lcd.setCursor(8,0);
    Serial.print(":");
    lcd.print(":");
    if (seconds < 10){
      lcd.setCursor(9,0);
      lcd.print("0");
      Serial.print(0);
      lcd.setCursor(10,0);
      lcd.print(seconds);
      Serial.println(seconds);
    }else{
      lcd.setCursor(9,0);
      lcd.print(seconds);
      Serial.println(seconds);
    }
    if(seconds <= 0 and minutes < 1){
      stopped = 1;
    }
    if(Serial.readString() == "d"){
      previousMil = currentMil;
      timeInSec -= millis() / 1000;
      secDivider /= 2;
    }
  }
  
}

OK, here is the entire program.

And the problem is?

    currentMil = millis() - previousMil;

What type does millis() return? What type are the other variables in this line? Are they the same type? (no). Do they need to be? (yes)

    }else{

Getyourspacebarfixed.

    if(Serial.readString() == "d"){

If there is no serial data, how long does that statement take to execute? Doesn't that f**k with your timing?

Why do you need to piss away time and effort and resources making a String of ONE character?