работает... и, вроде, правильно считает

Полностью переработана логика оффсета, добавлено слово "цветность" и
отступ