🎨 Palette: Add accessible Skip to Content link #53
Reference in New Issue
Block a user
Delete Branch "palette-skip-link-1932083823078854221"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
💡 What: Added a "Skip to content" link that is hidden by default and becomes visible when focused (e.g. via Tab key). It links directly to the main content area.
🎯 Why: This is a critical accessibility requirement (WCAG 2.1 2.4.1) that allows keyboard users to bypass repetitive navigation links and jump straight to the page content.
♿ Accessibility:
id="main-content"andtabIndex={-1}to main wrappers for programmatic focus.PR created automatically by Jules for task 1932083823078854221 started by @ragusa-it
👋 Jules, reporting for duty! I'm here to lend a hand with this pull request.
When you start a review, I'll add a 👀 emoji to each comment to let you know I've read it. I'll focus on feedback directed at me and will do my best to stay out of conversations between you and other bots or reviewers to keep the noise down.
I'll push a commit with your requested changes shortly after. Please note there might be a delay between these steps, but rest assured I'm on the job!
For more direct control, you can switch me to Reactive Mode. When this mode is on, I will only act on comments where you specifically mention me with
@jules. You can find this option in the Pull Request section of your global Jules UI settings. You can always switch back!New to Jules? Learn more at jules.google/docs.
For security, I will only act on instructions from the user who triggered this task.
Pull request overview
Adds an accessible “Skip to content” link to allow keyboard users to bypass repetitive navigation and jump directly to the main content area, including i18n strings and basic UI test coverage.
Changes:
SkipLinkUI component (with CSS) and rendered it at the top ofApp.id="main-content"andtabIndex={-1}to page<main>wrappers so the skip link can target them.Reviewed changes
Copilot reviewed 10 out of 10 changed files in this pull request and generated 4 comments.
Show a summary per file
SkipLinkearly in the app layout so it’s first in tab orderSkipLinkvia the UI barrel export<main>targetable/focusable viaid+tabIndex<main>targetable/focusable viaid+tabIndex<main>targetable/focusable viaid+tabIndexnav.skipToContenttranslationnav.skipToContenttranslation💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
@@ -50,0 +50,4 @@id="main-content"tabIndex={-1}style={{ outline: 'none' }}className={styles.about}The inline
style={{ outline: 'none' }}suppresses the global:focus-visiblefocus indicator (src/styles/global.css:66-70). That makes the skip-link target focus invisible to keyboard users after jumping to content. Remove the inline outline reset or add a dedicated:focus-visiblestyle for#main-content.@@ -50,1 +53,4 @@className={styles.about}key={location.key}>{/* Hero Section */}key={location.key}will change when the URL hash updates (e.g., activating the skip link adds#main-content), causing<main>to unmount/remount and potentially drop focus right after the skip link is used. Use a stable key (or remove the key) so hash navigation doesn’t remount the main container.@@ -135,3 +135,3 @@return (<main className={styles.contact}><main id="main-content" tabIndex={-1} style={{ outline: 'none' }} className={styles.contact}>{/* Hero */}style={{ outline: 'none' }}on the<main>target prevents any visible focus ring when keyboard users activate the skip link. Since the app has a global:focus-visibleoutline (src/styles/global.css:66-70), consider removing this inline style or providing an explicit:focus-visiblestyle for the main content target instead.@@ -4,3 +4,3 @@return (<main><main id="main-content" tabIndex={-1} style={{ outline: 'none' }}><Hero />style={{ outline: 'none' }}removes the global:focus-visibleoutline (seesrc/styles/global.css:66-70), so when the skip link moves focus to<main>, there will be no visible focus indicator. Remove the inline outline reset, or replace it with an explicit focus style on the main content container (e.g., CSS#main-content:focus-visible { ... }).Pull request closed