Поиграйтесь с свойством min-width. Вы задаёте ширину элементов которые могут бесконечно растягиваться и сжиматься к примеру input только свойством width в процентах(проценты относительно родителя). Они так и делают ещё можно настраивать ширину flex элемента свойствами flex-grow, flex-shrink и flex-basis. Оба варианта решат вашу проблему, но вообще есть более кардинальная мера. Для более тонкой настройки изменения страницы на разных экранах используются медиазапросы
Конечный автомат это функция или набор функций которые получает состояние и действие. В зависимости от них что- то делает и задаёт новое состояние. Есть начальное, промежуточные и обычно конечное состояние. Они меняются во время жизненного цикла приложения. Redux хороший пример конечного автомата. Когда мы в вузе это проходили я с удивлением узнал в нём банальный стейт с функциями в setState.
Представим eventloop step by step
1. Мы синхронно выполнили код и получили 2 микротаска с вызовом 1 и вызовом 3
2. Микротаски вызвались и создали еще 2 микротаска с вызовом 4 и вот этим вот промисом return new Promise((resolve) => resolve());(функция в then его просто вернула, а в следующий then он должен попасть выполненным, так что, js его отдельно сначала должен выполнять )
3. После вызова прошлых микротасок мы получили микротаск с вызовом 5 и 2
4. Осталось вызвать микротаск с 6 и все