diff --git a/frontend/src/components/ui/DesignSystemStyles.astro b/frontend/src/components/ui/DesignSystemStyles.astro index 7b582e6..a443909 100644 --- a/frontend/src/components/ui/DesignSystemStyles.astro +++ b/frontend/src/components/ui/DesignSystemStyles.astro @@ -118,6 +118,10 @@ overflow: hidden; } + #main-content { + scroll-margin-top: 6rem; + } + .skip-link { position: fixed; top: 0.75rem; @@ -138,6 +142,18 @@ transform: translateY(0); } + .sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border: 0; + } + ::selection { background: var(--color-primary-muted); } @@ -159,11 +175,11 @@ color: var(--color-primary-hover); } - :where(a, button, input, textarea, select):focus { + :where(a, button, input, textarea, select, summary):focus { outline: none; } - :where(a, button, input, textarea, select):focus-visible { + :where(a, button, input, textarea, select, summary):focus-visible { box-shadow: var(--focus-ring); border-radius: var(--radius-sm); } diff --git a/frontend/src/layouts/Layout.astro b/frontend/src/layouts/Layout.astro index 97e62a3..408427c 100644 --- a/frontend/src/layouts/Layout.astro +++ b/frontend/src/layouts/Layout.astro @@ -128,6 +128,12 @@ const publicDemoSite = isEnabled((globalThis as any).process?.env?.PUBLIC_DEMO_S navToggle.setAttribute('aria-expanded', 'true'); if (window.matchMedia('(max-width: 640px)').matches) { document.body.classList.add('is-scroll-locked'); + const firstFocusable = nav.querySelector( + '#nav-menu a, #nav-menu button, #nav-menu input, #nav-menu select, #nav-menu textarea, #nav-menu summary' + ); + if (firstFocusable instanceof HTMLElement) { + firstFocusable.focus(); + } } } @@ -136,6 +142,7 @@ const publicDemoSite = isEnabled((globalThis as any).process?.env?.PUBLIC_DEMO_S nav.classList.remove('is-open'); navToggle.setAttribute('aria-expanded', 'false'); document.body.classList.remove('is-scroll-locked'); + navToggle.focus(); } if (nav && navToggle) { @@ -187,8 +194,9 @@ const publicDemoSite = isEnabled((globalThis as any).process?.env?.PUBLIC_DEMO_S const userData = JSON.parse(user); navAuth.innerHTML = ` Dashboard - + 🔔 + Notifications Settings diff --git a/frontend/src/layouts/PublicLayout.astro b/frontend/src/layouts/PublicLayout.astro index 4a0c126..358ecf7 100644 --- a/frontend/src/layouts/PublicLayout.astro +++ b/frontend/src/layouts/PublicLayout.astro @@ -165,6 +165,12 @@ const defaultTheme = DEFAULT_THEME; toggle.setAttribute('aria-expanded', 'true'); if (window.matchMedia('(max-width: 768px)').matches) { document.body.classList.add('is-scroll-locked'); + const firstFocusable = nav.querySelector( + '#public-nav-menu a, #public-nav-menu button, #public-nav-menu input, #public-nav-menu select, #public-nav-menu textarea, #public-nav-menu summary' + ); + if (firstFocusable instanceof HTMLElement) { + firstFocusable.focus(); + } } } @@ -173,6 +179,7 @@ const defaultTheme = DEFAULT_THEME; nav.classList.remove('is-open'); toggle.setAttribute('aria-expanded', 'false'); document.body.classList.remove('is-scroll-locked'); + toggle.focus(); } function setActiveNav() {