@@ -115,6 +115,7 @@ a:hover {
115115 align-items : center;
116116 justify-content : space-between;
117117 padding : var (--spacing-md ) 0 ;
118+ position : relative;
118119}
119120
120121.navbar-brand .logo {
@@ -182,6 +183,18 @@ a:hover {
182183 background-color : var (--text-primary );
183184 margin : 3px 0 ;
184185 transition : var (--transition );
186+ transform-origin : center;
187+ }
188+
189+ /* Animate hamburger -> X */
190+ .mobile-menu-toggle .active span : nth-child (1 ) {
191+ transform : translateY (12px ) rotate (45deg );
192+ }
193+ .mobile-menu-toggle .active span : nth-child (2 ) {
194+ opacity : 0 ;
195+ }
196+ .mobile-menu-toggle .active span : nth-child (3 ) {
197+ transform : translateY (-6px ) rotate (-45deg );
185198}
186199
187200/* Hero section */
@@ -590,12 +603,51 @@ hr {
590603 padding : 0 var (--spacing-md );
591604 }
592605
606+ /* Mobile dropdown menu (smooth transition) */
593607 .navbar-menu {
594- display : none;
608+ display : flex; /* keep layout consistent */
609+ flex-direction : column;
610+ position : absolute;
611+ top : 100% ;
612+ left : 0 ;
613+ right : 0 ;
614+ background-color : var (--bg-primary );
615+ border-bottom : 1px solid var (--border-color );
616+ gap : var (--spacing-md );
617+ padding : var (--spacing-md ) var (--spacing-lg );
618+ box-shadow : 0 8px 25px var (--shadow );
619+ z-index : 110 ;
620+ /* hidden state */
621+ max-height : 0 ;
622+ overflow : hidden;
623+ opacity : 0 ;
624+ transform : translateY (-8px );
625+ pointer-events : none;
626+ visibility : hidden;
627+ transition : max-height 0.25s ease, opacity 0.2s ease, transform 0.2s ease, visibility 0.2s ease;
628+ }
629+ /* Shown when hamburger is toggled */
630+ .navbar-menu .is-open {
631+ max-height : 60vh ;
632+ opacity : 1 ;
633+ transform : translateY (0 );
634+ pointer-events : auto;
635+ visibility : visible;
636+ }
637+ /* Keep column layout during both open and closing transitions to prevent sideways shift */
638+ .navbar-menu .navbar-nav {
639+ flex-direction : column;
640+ gap : var (--spacing-sm );
641+ }
642+ .navbar-menu .is-open .nav-link {
643+ display : block;
644+ padding : var (--spacing-sm ) 0 ;
595645 }
596646
597647 .mobile-menu-toggle {
598648 display : flex;
649+ position : relative; /* allow z-index */
650+ z-index : 120 ; /* above the dropdown so the X isn't clipped */
599651 }
600652
601653 .hero-content {
0 commit comments