The standard blink without delay-example code makes it unnescessary complicated to understand non-blocking timing.
The main reason is that this example and other tutorials do not focus on the fundamental difference how non-blocking timing works.
You should learn the principle prior to looking into the code.
Knowing the basic principle will make it much easier to understand the code
I recommend a version that puts the details about non-blocking timing into a function
that can be used in a single if-condition that says what the function is doing
checking if TimePeriodIsOver()
if( TimePeriodIsOver(myTimingVariable,Period) ) {
// do timed action
}
best regards Stefan