+
{children}
diff --git a/src/components/Navbar.jsx b/src/components/Navbar.jsx
index 5686f254..bb9624b0 100644
--- a/src/components/Navbar.jsx
+++ b/src/components/Navbar.jsx
@@ -74,9 +74,10 @@ export default function Navbar() {
navigate('/settings')}
+ onClick={() => { navigate('/settings'); setMenuOpen(false) }}
style={{ background: 'none', border: '1px solid var(--border)', color: 'var(--text2)', borderRadius: 6, padding: '5px 10px', fontSize: 12, display: 'flex', alignItems: 'center', gap: 5 }}
className='h-[-webkit-fill-available]'
+ aria-label="Settings"
>
Settings
@@ -84,8 +85,9 @@ export default function Navbar() {
{/* Support Us — always visible, between Settings and hamburger */}
navigate('/support-us')}
+ onClick={() => { navigate('/support-us'); setMenuOpen(false) }}
className="flex items-center gap-2 rounded-md bg-emerald-500 px-4 py-2 text-sm font-medium text-white shadow transition-all duration-200 hover:bg-emerald-600 hover:shadow-lg active:scale-95"
+ aria-label="Support Us"
>
Support Us
@@ -103,43 +105,63 @@ export default function Navbar() {
- {/* Mobile dropdown menu — only on mobile */}
+ {/* Mobile dropdown menu & backdrop — only on mobile */}
{menuOpen && (
-
- {hasData ? LINKS.map(({ to, label }) => (
-
({
- padding: '10px 4px',
- fontSize: 14,
- textDecoration: 'none',
- fontWeight: isActive ? 600 : 400,
- color: isActive ? 'var(--accent)' : 'var(--text)',
- borderBottom: '1px solid var(--border)',
- })}
- onClick={() => setMenuOpen(false)}
- >
- {label}
-
- )) : (
-
- Load an organisation to explore pages.
-
- )}
- {/* Rate limit in mobile menu */}
- {rateLimit && (
-
-
- API: {rateLimit.remaining.toLocaleString()} / {rateLimit.limit.toLocaleString()} remaining
-
- )}
-
+ <>
+ setMenuOpen(false)}
+ />
+
+ {hasData ? LINKS.map(({ to, label }) => (
+
({
+ padding: '10px 4px',
+ fontSize: 14,
+ textDecoration: 'none',
+ fontWeight: isActive ? 600 : 400,
+ color: isActive ? 'var(--accent)' : 'var(--text)',
+ borderBottom: '1px solid var(--border)',
+ })}
+ onClick={() => setMenuOpen(false)}
+ >
+ {label}
+
+ )) : (
+
+ Load an organisation to explore pages.
+
+ )}
+ {/* Rate limit in mobile menu */}
+ {rateLimit && (
+
+
+ API: {rateLimit.remaining.toLocaleString()} / {rateLimit.limit.toLocaleString()} remaining
+
+ )}
+
+ >
)}
)
diff --git a/src/styles/global.css b/src/styles/global.css
index 9ce9d539..178388fc 100644
--- a/src/styles/global.css
+++ b/src/styles/global.css
@@ -41,7 +41,6 @@
html, body, #root {
min-height: 100%;
- overflow-x: hidden;
background: var(--bg);
color: var(--text);
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
From df6222f25e24fb5e75a1975b1809a26aea3284b0 Mon Sep 17 00:00:00 2001
From: Aman kumar vishwakrma <186990161+amankv1234@users.noreply.github.com>
Date: Fri, 2 Oct 2026 23:46:56 +0530
Subject: [PATCH 4/6] fix(navbar): resolve backdrop stacking context, 320px
responsive header spacing, and ARIA keyboard support
---
src/components/Navbar.jsx | 38 ++++++++++++++++++++++++++------------
1 file changed, 26 insertions(+), 12 deletions(-)
diff --git a/src/components/Navbar.jsx b/src/components/Navbar.jsx
index bb9624b0..2f9bb75b 100644
--- a/src/components/Navbar.jsx
+++ b/src/components/Navbar.jsx
@@ -1,4 +1,4 @@
-import React, { useState } from 'react'
+import React, { useState, useEffect } from 'react'
import { NavLink, useNavigate } from 'react-router-dom'
import { FiHeart, FiSettings, FiZap, FiMenu, FiX } from 'react-icons/fi'
import { useApp } from '../context/AppContext'
@@ -23,6 +23,19 @@ export default function Navbar() {
const lowLimit = rateLimit && rateLimit.remaining < 15
const [menuOpen, setMenuOpen] = useState(false)
+ // Keyboard Escape key dismissal for mobile navigation
+ useEffect(() => {
+ const handleKeyDown = (e) => {
+ if (e.key === 'Escape') {
+ setMenuOpen(false);
+ }
+ };
+ if (menuOpen) {
+ window.addEventListener('keydown', handleKeyDown);
+ }
+ return () => window.removeEventListener('keydown', handleKeyDown);
+ }, [menuOpen]);
+
const navLinkStyle = ({ isActive }) => ({
display: 'block',
padding: '6px 10px',
@@ -39,22 +52,20 @@ export default function Navbar() {
- {/* Main bar */}
-
+ {/* Main bar — responsive padding/gap for narrow viewports (320px+) */}
+
{/* Logo */}
{ navigate('/'); setMenuOpen(false) }} style={{ cursor: 'pointer', flexShrink: 0 }}>
{/* Desktop nav links */}
-
+
{hasData && LINKS.map(({ to, label }) => (
{label}
@@ -63,7 +74,7 @@ export default function Navbar() {
{/* Right side */}
-
+
{/* Rate limit — hidden on mobile */}
{rateLimit && (
@@ -86,7 +97,7 @@ export default function Navbar() {
{ navigate('/support-us'); setMenuOpen(false) }}
- className="flex items-center gap-2 rounded-md bg-emerald-500 px-4 py-2 text-sm font-medium text-white shadow transition-all duration-200 hover:bg-emerald-600 hover:shadow-lg active:scale-95"
+ className="flex items-center gap-2 rounded-md bg-emerald-500 px-3 md:px-4 py-2 text-sm font-medium text-white shadow transition-all duration-200 hover:bg-emerald-600 hover:shadow-lg active:scale-95"
aria-label="Support Us"
>
@@ -99,6 +110,8 @@ export default function Navbar() {
onClick={() => setMenuOpen(prev => !prev)}
style={{ color: 'var(--text)' }}
aria-label={menuOpen ? 'Close menu' : 'Open menu'}
+ aria-expanded={menuOpen}
+ aria-controls="mobile-navigation"
>
{menuOpen ? : }
@@ -122,6 +135,7 @@ export default function Navbar() {
onClick={() => setMenuOpen(false)}
/>
{hasData ? LINKS.map(({ to, label }) => (
Date: Sat, 3 Oct 2026 00:03:31 +0530
Subject: [PATCH 5/6] fix(navbar): add focus restoration on Escape and viewport
height limit for mobile dropdown
---
src/components/Navbar.jsx | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/src/components/Navbar.jsx b/src/components/Navbar.jsx
index 2f9bb75b..ffaa868b 100644
--- a/src/components/Navbar.jsx
+++ b/src/components/Navbar.jsx
@@ -1,4 +1,4 @@
-import React, { useState, useEffect } from 'react'
+import React, { useState, useEffect, useRef } from 'react'
import { NavLink, useNavigate } from 'react-router-dom'
import { FiHeart, FiSettings, FiZap, FiMenu, FiX } from 'react-icons/fi'
import { useApp } from '../context/AppContext'
@@ -22,12 +22,14 @@ export default function Navbar() {
const hasData = orgs.length > 0
const lowLimit = rateLimit && rateLimit.remaining < 15
const [menuOpen, setMenuOpen] = useState(false)
+ const toggleRef = useRef(null)
- // Keyboard Escape key dismissal for mobile navigation
+ // Keyboard Escape key dismissal & focus restoration for mobile navigation
useEffect(() => {
const handleKeyDown = (e) => {
if (e.key === 'Escape') {
setMenuOpen(false);
+ toggleRef.current?.focus();
}
};
if (menuOpen) {
@@ -105,6 +107,7 @@ export default function Navbar() {
{/* Hamburger / Menu toggle — only on mobile */}
setMenuOpen(prev => !prev)}
@@ -143,6 +146,8 @@ export default function Navbar() {
borderTop: '1px solid var(--border)',
padding: '12px 24px 16px',
gap: 4,
+ maxHeight: 'calc(100dvh - 56px)',
+ overflowY: 'auto',
}}
className="flex flex-col md:hidden fade-up"
>
From 2f33a330e8f8df0bc8dff8ee9779fbef6966622a Mon Sep 17 00:00:00 2001
From: Aman kumar vishwakrma <186990161+amankv1234@users.noreply.github.com>
Date: Thu, 15 Oct 2026 18:15:59 +0530
Subject: [PATCH 6/6] refactor: use NavLink for logo and format box-sizing
selector in global.css
---
src/components/Navbar.jsx | 4 ++--
src/styles/global.css | 4 +++-
2 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/src/components/Navbar.jsx b/src/components/Navbar.jsx
index d6caa52d..df246067 100644
--- a/src/components/Navbar.jsx
+++ b/src/components/Navbar.jsx
@@ -62,9 +62,9 @@ export default function Navbar() {
style={{ backdropFilter: 'blur(10px)' }}
>
{/* Logo */}
- { navigate('/'); setMenuOpen(false) }} style={{ cursor: 'pointer', flexShrink: 0 }}>
+ setMenuOpen(false)} style={{ flexShrink: 0 }} aria-label="Home">
-
+
{/* Desktop nav links */}
diff --git a/src/styles/global.css b/src/styles/global.css
index 178388fc..25d33211 100644
--- a/src/styles/global.css
+++ b/src/styles/global.css
@@ -35,7 +35,9 @@
--radius: 8px;
}
-*, *::before, *::after {
+*,
+*::before,
+*::after {
box-sizing: border-box;
}