diff --git a/web/templates/base.html b/web/templates/base.html
index 36d43a8..b57ae54 100644
--- a/web/templates/base.html
+++ b/web/templates/base.html
@@ -89,6 +89,9 @@
border-radius:12px; box-shadow:0 8px 30px rgba(0,0,0,.08);
min-width: 160px; padding:6px; display:grid; gap:4px; z-index:60;
}
+ /* KEY FIX: ensure [hidden] actually hides despite display:grid above */
+ .user-menu[hidden]{ display:none !important; }
+
.user-menu .menu-item{
display:block; width:100%; text-align:left;
padding:10px 12px; border-radius:10px;
@@ -204,12 +207,22 @@
if (userBtn && userMenu) {
const open = () => { userMenu.hidden = false; userBtn.setAttribute('aria-expanded','true'); };
const close = () => { userMenu.hidden = true; userBtn.setAttribute('aria-expanded','false'); };
+
userBtn.addEventListener('click', (e) => { e.stopPropagation(); userMenu.hidden ? open() : close(); });
+
+ // Close on outside click / Escape / tab away
document.addEventListener('click', (e) => {
if (userMenu.hidden) return;
if (!userMenu.contains(e.target) && !userBtn.contains(e.target)) close();
});
document.addEventListener('keydown', (e) => { if (e.key === 'Escape') close(); });
+
+ // NEW: close when clicking any item inside the menu
+ userMenu.addEventListener('click', (e) => {
+ const el = e.target;
+ if (el.closest('a') || el.closest('button')) close();
+ });
+
window.addEventListener('blur', close);
}
})();