/* Animation visibility — triggered by JS IntersectionObserver */
.animate { opacity: 0; transform: translateY(18px); transition: opacity 0.55s cubic-bezier(0.16,1,0.3,1), transform 0.55s cubic-bezier(0.16,1,0.3,1); }
.animate.visible { opacity: 1; transform: translateY(0); }
.menu-row.animate { opacity: 0; transform: translateX(16px); }
.menu-row.animate.visible { opacity: 1; transform: translateX(0); }
