diff --git a/src/assets/style/navbarStyles.css b/src/assets/style/navbarStyles.css
index a85e592..9d5d352 100644
--- a/src/assets/style/navbarStyles.css
+++ b/src/assets/style/navbarStyles.css
@@ -43,7 +43,7 @@
color: #0C489E;
}
#navbar div li a:hover::after,
-#navbar div li a:focus::after{
+#navbar div li a:focus-visible::after{
content: "";
width: 80%;
height: 3px;
@@ -73,6 +73,19 @@
opacity: 1;
display: block
}
+
+/* Navbar: don't show focus ring on mouse click */
+#navbar a:focus {
+ outline: none;
+}
+
+/* Navbar: show focus ring for keyboard navigation */
+#navbar a:focus-visible {
+ outline: 3px solid #0C489E;
+ outline-offset: 2px;
+ border-radius: 10px; /* tweak to match your design */
+}
+
/* #navbar div li:focus-within > ul,
#navbar div li ul:hover,
#navbar div li ul:focus {
diff --git a/src/assets/style/styles.css b/src/assets/style/styles.css
index 196ca43..f438c04 100644
--- a/src/assets/style/styles.css
+++ b/src/assets/style/styles.css
@@ -74,4 +74,60 @@ a:active {
text-decoration: none;
}
-/* iframe#webpack-dev-server-client-overlay{display:none!important} */
\ No newline at end of file
+/* iframe#webpack-dev-server-client-overlay{display:none!important} */
+
+/* ===== WCAG 2.4.7 Focus Visible (Global) ===== */
+:where(
+ a,
+ button,
+ input,
+ select,
+ textarea,
+ summary,
+ [role="button"],
+ [role="link"],
+ [tabindex]:not([tabindex="-1"])
+):focus-visible {
+ outline: 3px solid #0C489E;
+ outline-offset: 2px;
+ border-radius: 4px;
+}
+
+/* Fallback for browsers that don't support :focus-visible */
+:where(
+ a,
+ button,
+ input,
+ select,
+ textarea,
+ summary,
+ [role="button"],
+ [role="link"],
+ [tabindex]:not([tabindex="-1"])
+):focus {
+ outline: 3px solid #0C489E;
+ outline-offset: 2px;
+ border-radius: 4px;
+}
+
+/* ===== MUI DataGrid focus visible (WCAG 2.4.7) ===== */
+
+/* Column headers */
+.MuiDataGrid-columnHeader:focus,
+.MuiDataGrid-columnHeader:focus-within {
+ outline: 3px solid #0C489E;
+ outline-offset: -2px;
+}
+
+/* Cells */
+.MuiDataGrid-cell:focus,
+.MuiDataGrid-cell:focus-within {
+ outline: 3px solid #0C489E;
+ outline-offset: -2px;
+}
+
+/* If outline is clipped, add halo */
+.MuiDataGrid-columnHeader:focus-within,
+.MuiDataGrid-cell:focus-within {
+ box-shadow: 0 0 0 3px rgba(12, 72, 158, 0.25);
+}
\ No newline at end of file
diff --git a/src/components/AdminLogo/index.js b/src/components/AdminLogo/index.js
index 8a75781..f847e3b 100644
--- a/src/components/AdminLogo/index.js
+++ b/src/components/AdminLogo/index.js
@@ -23,14 +23,23 @@ const LogoSection = ({ sx, to }) => {
return (
dispatch(activeItem({ openItem: [defaultId] }))}
- to={!to ? config.defaultPath : to}
- sx={sx}
- >
-
-
+ disableRipple
+ component={Link}
+ onClick={() => dispatch(activeItem({ openItem: [defaultId] }))}
+ to={!to ? config.defaultPath : to}
+ sx={{
+ ...sx,
+
+ /* ✅ WCAG 2.4.7 focus indicator */
+ '&:focus-visible': {
+ outline: '3px solid #0C489E',
+ outlineOffset: '2px',
+ borderRadius: '6px'
+ }
+ }}
+ >
+
+
PNSPS
diff --git a/src/components/MobileLogo/index.js b/src/components/MobileLogo/index.js
index eb2a16d..d5386ff 100644
--- a/src/components/MobileLogo/index.js
+++ b/src/components/MobileLogo/index.js
@@ -17,14 +17,23 @@ const LogoSection = ({ sx, to }) => {
const dispatch = useDispatch();
return (
dispatch(activeItem({ openItem: [defaultId] }))}
- to={!to ? config.defaultPath : to}
- sx={sx}
- >
-
-
+ disableRipple
+ component={Link}
+ onClick={() => dispatch(activeItem({ openItem: [defaultId] }))}
+ to={!to ? config.defaultPath : to}
+ sx={{
+ ...sx,
+
+ /* WCAG 2.4.7 – visible keyboard focus */
+ '&:focus-visible': {
+ outline: '3px solid #0C489E',
+ outlineOffset: '2px',
+ borderRadius: '6px'
+ }
+ }}
+ >
+
+
);
};
diff --git a/src/layout/MainLayout/Header/HeaderContent/LocaleSelector.js b/src/layout/MainLayout/Header/HeaderContent/LocaleSelector.js
index ad676aa..cd0016f 100644
--- a/src/layout/MainLayout/Header/HeaderContent/LocaleSelector.js
+++ b/src/layout/MainLayout/Header/HeaderContent/LocaleSelector.js
@@ -47,16 +47,26 @@ const LocaleSelector = () => {
return (
-
+
{
<>
-
-
+ component="span"
+ disableRipple
+ sx={{
+ bgcolor: open ? 'grey.300' : 'grey.100',
+
+ /* WCAG 2.4.7 – visible keyboard focus */
+ '&:focus-visible': {
+ outline: '3px solid #0C489E',
+ outlineOffset: '2px',
+ borderRadius: '6px'
+ }
+ }}
+ ref={anchorRef}
+ aria-controls={open ? 'menu-list-grow' : undefined}
+ aria-haspopup="true"
+ onClick={handleToggle}
+ color="inherit"
+ >
+
+
{
-
-
-
-
+
+
+
+