Pending

User tests: Successful: Unsuccessful:

avatar Nikhil-sinhaa
Nikhil-sinhaa
31 Oct 2026

Pull Request resolves #48424.

  • I read the Generative AI policy and my contribution is either not created with the help of AI or is compatible with the policy and GNU/GPL 2 or later.

Summary of Changes

Keyboard focus was undefined or hard to see on many controls in Atum and Cassiopeia (no indicator, a faint low-contrast halo, or an indicator clipped by its container). This adds one shared, consistent focus indicator. It is SCSS only: no PHP, JS or XML changes.

  • New shared partial media_source/system/scss/_focus-indicator.scss with focus tokens (colour, contrast colour, width, offset) and a focus-ring mixin. The indicator is a coloured 2px outline separated from the control by a contrasting 2px ring, so it stays visible on light and dark backgrounds.
  • Atum and Cassiopeia each define the token values (Atum #6fbfdb on dark, Cassiopeia #0b5ed7 on white).
  • A global :focus-visible rule replaces the old .js-focus-visible polyfill rule in Atum and adds a forced-colors (Highlight) fallback.
  • Bootstrap's input and button focus variables now use the shared ring, so inputs, selects and every .btn variant get it (Atum, Cassiopeia and the installer template).
  • Where a container clips overflow or controls sit edge to edge, the ring is drawn inside the control: Atum sidebar links, Toggle Menu / burger, header logo, quick icons, joomla-tab tabs, and the Media Manager toolbar, browser tiles, tree items and preview close button
  • Smaller fixes so the ring is not hidden: switcher, Choices.js, Cassiopeia main menu items, list-group items, the finder search input group and Cassiopeia list links.

Compiled assets are not part of this PR; run npm ci && npm run build to test.

Testing Instructions

  1. Check out this branch and run npm ci && npm run build.
  2. Use the Atum administrator template and the Cassiopeia frontend template. Test in Chrome and Firefox if you can; also try Atum's dark and light colour schemes.
  3. Move the mouse away and use only the keyboard (Tab / Shift+Tab) so hover does not hide the result. Check these controls:
    • Administrator: sidebar "Toggle Menu" (also at a narrow width, where it becomes a burger button), sidebar links such as "System", header "Post Installation Messages".
    • Content > Media: toolbar buttons.
    • Content > Articles > New: the Title field, and the tabs.
    • Articles list: the search box.
    • Articles > Options > Permissions: the selects.
    • System > Install > Extensions: "Or browse for file".
    • System > Joomla Update: "Check for Updates" (focus only, do not click).
    • Users > Multi-factor Authentication: "Add a new Passkey" (focus only).
    • Log out and check the backend login Username field and Log in button.
    • Frontend: the main menu, the header search field, "Read more", and the login Username field, Log in button and "Forgot your password?" link.

Actual result BEFORE applying this Pull Request

On 6.2-dev (Chrome 156 and Firefox, dark Atum, 1366x768):

  • The Atum mobile burger button shows no focus indicator at all. The desktop "Toggle Menu" and sidebar links show only a thin line along the top and bottom edges, because the sidebar clips the rest.
  • In Firefox the Article Title field, backend login Username, articles search box, Permissions select and the Cassiopeia login Username, search field, "Read more" and Log in button show no focus indicator. In Chrome these show a thin border or a faint halo.
  • Atum buttons ("Check for Updates", "Or browse for file", "Add a new Passkey", backend Log in) only get Bootstrap's 50%-opacity halo, which is very low contrast.
  • Cassiopeia main menu items get only a thin dotted outline.
    In Atum's light scheme on 6.2-dev: the burger button still shows no indicator, the Toggle Menu and sidebar links show only a pale-blue line along their edges, and the Media Manager "Change Ordering" button in Chrome has only a pale-blue ring on a white toolbar (low contrast).

Before/after screenshots
Scene 1: Atum mobile burger button (375px), Firefox.
Before:
before-firefox
After
after-firefox

Scene 2: Atum sidebar "Toggle Menu", Firefox.
Before
before-firefox
After
after-firefox

**Scene 3: **
Before
before-firefox
After
after-firefox

Scene 4: Media Manager "Change Ordering" button, Chrome, light mode.
Before
light-before-chrome
After
light-after-chrome

Expected result AFTER applying this Pull Request

Every control above shows the same clear keyboard focus indicator in Chrome and Firefox, in Atum dark and light and in Cassiopeia: a 2px coloured outline with a contrasting ring, drawn inside the control where its container would clip it.
Not changed or not tested:

  • The issue's "Post Installation Messages" example already shows a visible ring on 6.2-dev in Chrome and Firefox, in both Atum colour schemes, so I am not claiming a fix there. The Media Manager toolbar example shows a clear ring in dark mode and in Firefox light mode, but in Chrome light mode it is only a pale-blue ring on white, which this PR fixes. I did not test Safari, which the issue names, so I am not claiming the original report is wrong.
  • The "Keyboard Navigation" skip button is a bundled third-party widget with its own pop-up styling and is not changed.
  • The MFA captive screen and the later steps of the Install Joomla wizard were not tested.

Link to documentations

Please select:

  • Documentation link for guide.joomla.org:

  • No documentation changes for guide.joomla.org needed

  • Pull Request link for manual.joomla.org:

  • No documentation changes for manual.joomla.org needed

avatar Nikhil-sinhaa Nikhil-sinhaa - open - 31 Oct 2026
avatar Nikhil-sinhaa Nikhil-sinhaa - change - 31 Oct 2026
Status New ⇒ Pending
avatar joomla-cms-bot joomla-cms-bot - change - 31 Oct 2026
Category ⇒ NPM Change
avatar brianteeman
brianteeman - comment - 1 Nov 2026

Thank you for this comprehensive PR - could you please change the title to something more meaningful

avatar Nikhil-sinhaa Nikhil-sinhaa - change - 1 Nov 2026
Title
…
Feat/48424
[6.2] [a11y] Add a consistent, visible keyboard focus indicator to Atum, Cassiopeia, Media Manager and the installer
avatar Nikhil-sinhaa Nikhil-sinhaa - edited - 1 Nov 2026
avatar exlemor
exlemor - comment - 3 Nov 2026

@Nikhil-sinhaa very nice work... I've been testing your PR and what you mention being fixed appears working now.

BUT in my testing I also found some odd keyboard navigation behavior - it may be outside of your PR but it felt like it might be in it and / or should be mentioned here:

Once PR applied, If you go to https://www.mydomain.com/_j62dev/administrator/index.php?option=com_media&path=local-images:/

I tab over It goes to Take the Tour, it then moves to Multilingual Status, SKIPS J!6.2 DEV Nightly Build (the front end site link) for some reason, then User Menu, then on the next line Upload, Create Folder, then Delete, then SKIPS Options, then go to Help, then Clean Cache...

Why is the front end link and more importantly the Options button skipped? There may be a good reason but it doesn't seem logical...

avatar Nikhil-sinhaa
Nikhil-sinhaa - comment - 3 Nov 2026

@exlemor thanks for testing! I couldn't reproduce this as a Joomla/PR issue. Everything that was skipped is a link (<a href>): the frontend site link, Options, the sidebar. Everything reached is a <button>.

That's browser/OS behaviour, not tab order in the template:

  • Safari: plain Tab doesn't stop on links; Option+Tab does (or enable "Press Tab to highlight each item on a webpage" in Advanced settings). Apple docs
Screenshot From 2026-11-03 08-19-37
  • Firefox: accessibility.tabfocus is a bit field (1 text, 2 other form elements, 4 links). With 3 links are skipped, and on macOS Firefox switches between 7 and 3 with a system checkbox. Firefox source
Screenshot From 2026-11-03 08-20-46

when accessibility.tabfocus = 3
https://github.com/user-attachments/assets/5908fb41-daad-417d-ab77-9abec04cfacf

-when accessibility.tabfocus = 7
https://github.com/user-attachments/assets/9bafdd13-23c1-43c2-aaf7-3ecacd6b62d7

I reproduced your exact order (Keyboard Navigation, Take a Tour, User Menu, Upload, Create New Folder, Delete, Help) in Firefox on Linux with accessibility.tabfocus = 3. With the default 7 (and in Chrome), the frontend link and Options both get focus and show the new ring. This PR is SCSS only, so it can't change tab order.

Could you retest with Option+Tab in Safari, or with links enabled in your browser, and tell me which browser and OS you used?

avatar Nikhil-sinhaa
Nikhil-sinhaa - comment - 3 Nov 2026

@exlemor thanks for testing! I couldn't reproduce this as a Joomla/PR issue. Everything that was skipped is a link (<a href>): the frontend site link, Options, the sidebar. Everything reached is a <button>.

That's browser/OS behaviour, not tab order in the template:

  • Safari: plain Tab doesn't stop on links; Option+Tab does (or enable "Press Tab to highlight each item on a webpage" in Advanced settings). Apple docs
Screenshot From 2026-11-03 08-19-37
  • Firefox: accessibility.tabfocus is a bit field (1 text, 2 other form elements, 4 links). With 3 links are skipped, and on macOS Firefox switches between 7 and 3 with a system checkbox. Firefox source
Screenshot From 2026-11-03 08-20-46

when accessibility.tabfocus = 3
https://github.com/user-attachments/assets/5908fb41-daad-417d-ab77-9abec04cfacf

-when accessibility.tabfocus = 7
https://github.com/user-attachments/assets/9bafdd13-23c1-43c2-aaf7-3ecacd6b62d7

I reproduced your exact order (Keyboard Navigation, Take a Tour, User Menu, Upload, Create New Folder, Delete, Help) in Firefox on Linux with accessibility.tabfocus = 3. With the default 7 the frontend link and Options both get focus and show the new ring. This PR is SCSS only, so it can't change tab order.

Could you retest with Option+Tab in Safari, or with links enabled in your browser, and tell me which browser and OS you used?

avatar exlemor exlemor - test_item - 3 Nov 2026 - Tested successfully
avatar exlemor
exlemor - comment - 3 Nov 2026

I have tested this item ✅ successfully on a0f55ef

Hi @Nikhil-sinhaa, thank you for that clarification/precision, I was able to retest and match the expected results with Option-TAB and yes I was using Safari latest version on MacBook Pro M4. Thank you for the fix! :)


This comment was created with the J!Tracker Application at issues.joomla.org/tracker/joomla-cms/48742.

avatar exlemor
exlemor - comment - 3 Nov 2026

I have tested this item ✅ successfully on a0f55ef

Hi @Nikhil-sinhaa, thank you for that clarification/precision, I was able to retest and match the expected results with Option-TAB and yes I was using Safari latest version on MacBook Pro M4. Thank you for the fix! :)


This comment was created with the J!Tracker Application at issues.joomla.org/tracker/joomla-cms/48742.

Add a Comment

Login with GitHub to post a comment