simplify hour overlap logic and organize CSS better [ci skip]