If you customized your theme disable those customizations.
If using frontend affecting apps disable those apps.
Test in a new unpublished theme install set to the same menu.
If a fresh theme with no customizations and no apps works fine you need to diff, in diff software like Meld, the live themes code against the fresh one’s code in a game of spot the differences to find relevant changes.
If you need this debugged and fixed professionally then contact me by mail for services.
ALWAYS please provide context, examples: store url, theme name, post url(s) , or any further detail in ALL correspondence..
Contact info in signature.
The menu HTML is there, something going on with the theme not getting it’s .js class added to the body tag once the page loads to indicate that javascript is available.
The menus **non-**visibility starts in component-menu-drawer.css line~28:
.menu-drawer {
position:absolute;
transform: translate(-100%);
visibility: hidden;
z-index: 3;
left: 0;
top: 100%;
width: 100%;
padding: 0;
background-color: rgb(var(--color-background));
overflow-x: hidden;
filter: drop-shadow(var(--drawer-shadow-horizontal-offset) var(--drawer-shadow-vertical-offset) var(--drawer-shadow-blur-radius) rgba(var(--color-shadow),var(--drawer-shadow-opacity)))
}
The transform and visibility rules should get overridden when the menu is open , and/or a transition animation happens when the menu opens.
A CSS band-aid follows, there may be other issues, this band-aid does not fix the core issues , band-aids may degrade performance. Use the CSS in a custom css setting
https://help.shopify.com/en/manual/online-store/themes/theme-structure/extend/add-css
/* CSS kludge because .js javascript class on body tag is not working, see component-menu-drawer.css line~55 for proper usage when .js javascript class on body tag is working properly */
details[open] >.menu-drawer, details[open] > .menu-drawer__submenu {
transform: translate(0) !important;
visibility: visible !important;
}
details[open] > .menu-drawer__submenu {
transform: translate(0) !important;
visibility: visible !important;
}