Accessibility Health Check
https://www.lexingtonky.gov
Excellent
https://daylight.sonde.life/usgov/lexingtonky-gov/
Excellent
Executive Summary
Top Findings
highEmpty heading (role="heading"). Headings must contain text for screen reader navigation to work.WCAG 1.3.1
<!-- a11y: role="heading" name=" " -->
Add text content to the heading, or remove the heading element if it serves no structural purpose. WCAG 1.3.1 requires meaningful heading structure.
highEmpty heading (role="heading"). Headings must contain text for screen reader navigation to work.WCAG 1.3.1
<!-- a11y: role="heading" name=" " -->
Add text content to the heading, or remove the heading element if it serves no structural purpose. WCAG 1.3.1 requires meaningful heading structure.
highFocus jumps backward from "Water Quality" to "Special holiday collections" (visual distance: 1819px). No explicit tabIndex — likely a DOM order issue.WCAG 2.4.3
<a>Special holiday collections</a>
Reorder elements in the DOM to match the visual layout. Align DOM order with visual presentation, or use tabIndex to match the visual sequence.
highFocus jumps backward from "What's being done?" to "Investment in Homeless Response" (visual distance: 449px). No explicit tabIndex — likely a DOM order issue.WCAG 2.4.3
<h2>Investment in Homeless Response</h2>
Reorder elements in the DOM to match the visual layout.
highMissing X-Content-Type-Options header
Add X-Content-Type-Options: nosniff Add X-Frame-Options: DENY or SAMEORIGIN Add a Content-Security-Policy header with appropriate directives Add Referrer-Policy: strict-origin-when-cross-origin or no-referrer
highMissing X-Content-Type-Options header
Add X-Content-Type-Options: nosniff Add X-Frame-Options: DENY or SAMEORIGIN Add a Content-Security-Policy header with appropriate directives Add Referrer-Policy: strict-origin-when-cross-origin or no-referrer
highMissing X-Content-Type-Options header
Add X-Content-Type-Options: nosniff Add X-Frame-Options: DENY or SAMEORIGIN Add a Content-Security-Policy header with appropriate directives Add Referrer-Policy: strict-origin-when-cross-origin or no-referrer
highMissing X-Content-Type-Options header
Add X-Content-Type-Options: nosniff Add X-Frame-Options: DENY or SAMEORIGIN Add a Content-Security-Policy header with appropriate directives Add Referrer-Policy: strict-origin-when-cross-origin or no-referrer
highMissing X-Content-Type-Options header
Add X-Content-Type-Options: nosniff Add X-Frame-Options: DENY or SAMEORIGIN Add a Content-Security-Policy header with appropriate directives Add Referrer-Policy: strict-origin-when-cross-origin or no-referrer
highMissing X-Content-Type-Options header
Add X-Content-Type-Options: nosniff Add X-Frame-Options: DENY or SAMEORIGIN Add a Content-Security-Policy header with appropriate directives Add Referrer-Policy: strict-origin-when-cross-origin or no-referrer
highMissing X-Content-Type-Options header
Add X-Content-Type-Options: nosniff Add X-Frame-Options: DENY or SAMEORIGIN Add a Content-Security-Policy header with appropriate directives Add Referrer-Policy: strict-origin-when-cross-origin or no-referrer
highMissing X-Content-Type-Options header
Add X-Content-Type-Options: nosniff Add X-Frame-Options: DENY or SAMEORIGIN Add a Content-Security-Policy header with appropriate directives Add Referrer-Policy: strict-origin-when-cross-origin or no-referrer
highMissing X-Content-Type-Options header
Add X-Content-Type-Options: nosniff Add X-Frame-Options: DENY or SAMEORIGIN Add a Content-Security-Policy header with appropriate directives Add Referrer-Policy: strict-origin-when-cross-origin or no-referrer
mediumAll page content should be contained by landmarks: Fix any of the following: Some page content is not contained by landmarks
<div class="flex flex-col md:flex-row md:justify-between md:items-center gap-4">
Ensure all page content is contained by landmarks. See: https://www.w3.org/WAI/WCAG22/quickref/
mediumAll page content should be contained by landmarks: Fix any of the following: Some page content is not contained by landmarks
<div class="flex flex-col md:flex-row md:justify-between md:items-center gap-4">
Ensure all page content is contained by landmarks. See: https://www.w3.org/WAI/WCAG22/quickref/
mediumHeading levels should only increase by one: Fix any of the following: Heading order invalid
<h3 class="text-inherit group-hover:underline mb-0">Dispute resolution</h3>
Ensure the order of headings is semantically correct. See: https://www.w3.org/WAI/WCAG22/quickref/
mediumAll page content should be contained by landmarks: Fix any of the following: Some page content is not contained by landmarks
<div class="flex flex-col md:flex-row md:justify-between md:items-center gap-4">
Ensure all page content is contained by landmarks. See: https://www.w3.org/WAI/WCAG22/quickref/
mediumAll page content should be contained by landmarks: Fix any of the following: Some page content is not contained by landmarks
<div class="flex flex-col md:flex-row md:justify-between md:items-center gap-4">
Ensure all page content is contained by landmarks. See: https://www.w3.org/WAI/WCAG22/quickref/
mediumAll page content should be contained by landmarks: Fix any of the following: Some page content is not contained by landmarks
<div class="flex flex-col md:flex-row md:justify-between md:items-center gap-4">
Ensure all page content is contained by landmarks. See: https://www.w3.org/WAI/WCAG22/quickref/
mediumAll page content should be contained by landmarks: Fix any of the following: Some page content is not contained by landmarks
<div class="flex flex-col md:flex-row md:justify-between md:items-center gap-4">
Ensure all page content is contained by landmarks. See: https://www.w3.org/WAI/WCAG22/quickref/
mediumHeading levels should only increase by one: Fix any of the following: Heading order invalid
<h3 class="m-0 text-lg lg:text-xl xl:text-2xl">Public Safety</h3>
Ensure the order of headings is semantically correct. See: https://www.w3.org/WAI/WCAG22/quickref/
mediumHeading levels should only increase by one: Fix any of the following: Heading order invalid
<h3 class="m-0 text-lg lg:text-xl xl:text-2xl">After school programs </h3>
Ensure the order of headings is semantically correct. See: https://www.w3.org/WAI/WCAG22/quickref/
mediumAll page content should be contained by landmarks: Fix any of the following: Some page content is not contained by landmarks
<div class="flex flex-col md:flex-row md:justify-between md:items-center gap-4">
Ensure all page content is contained by landmarks. See: https://www.w3.org/WAI/WCAG22/quickref/
mediumAll page content should be contained by landmarks: Fix any of the following: Some page content is not contained by landmarks
<div class="flex flex-col md:flex-row md:justify-between md:items-center gap-4">
Ensure all page content is contained by landmarks. See: https://www.w3.org/WAI/WCAG22/quickref/
mediumPage should contain a level-one heading: Fix all of the following: Page must have a level-one heading
<html lang="en" translate="no">
Ensure that the page, or at least one of its frames contains a level-one heading. See: https://www.w3.org/WAI/WCAG22/quickref/
mediumAll page content should be contained by landmarks: Fix any of the following: Some page content is not contained by landmarks
<div class="flex flex-col md:flex-row md:justify-between md:items-center gap-4">
Ensure all page content is contained by landmarks. See: https://www.w3.org/WAI/WCAG22/quickref/
mediumHeading levels should only increase by one: Fix any of the following: Heading order invalid
<h3 class="m-0 text-lg lg:text-xl xl:text-2xl">Current building codes</h3>
Ensure the order of headings is semantically correct. See: https://www.w3.org/WAI/WCAG22/quickref/
mediumClicking "Pay..." inserts 7 element(s) without ARIA live region. Screen readers will not announce this dynamic content.WCAG 4.1.3
<button class="bg-transparent border-2 py-2 px-2 md:px-4 inline-block rounded-sm font-body text-base font-medium text-center border-primary-1 hover:bg-primary-1 hover:text-white mr-2 mb-2" aria-label=
Wrap dynamically inserted content in an element with aria-live="polite" (or role="status"/"alert") so assistive technologies announce the change.
mediumClicking "Search" inserts 1 element(s) without ARIA live region. Screen readers will not announce this dynamic content.WCAG 4.1.3
<button class=" text-white hover:underline underline-offset-2 ml-3 px-3 false"><i class="fa-sharp fa-regular fa-magnifying-glass pr-2"></i>Search</button>
Wrap dynamically inserted content in an element with aria-live="polite" (or role="status"/"alert") so assistive technologies announce the change.
mediumClicking "Language" inserts 106 element(s) without ARIA live region. Screen readers will not announce this dynamic content.WCAG 4.1.3
<button class="flex items-center h-full" aria-haspopup="true" aria-expanded="false"><span class="px-3 py-1 flex items-center h-full group"><i class="fa-sharp fa-regular fa-globe pr-1"></i> <span class
Wrap dynamically inserted content in an element with aria-live="polite" (or role="status"/"alert") so assistive technologies announce the change.
mediumClicking "Search" inserts 1 element(s) without ARIA live region. Screen readers will not announce this dynamic content.WCAG 4.1.3
<button class=" text-white hover:underline underline-offset-2 ml-3 px-3 false"><i class="fa-sharp fa-regular fa-magnifying-glass pr-2"></i>Search</button>
Wrap dynamically inserted content in an element with aria-live="polite" (or role="status"/"alert") so assistive technologies announce the change.
mediumClicking "Search" inserts 1 element(s) without ARIA live region. Screen readers will not announce this dynamic content.WCAG 4.1.3
<button class=" text-white hover:underline underline-offset-2 ml-3 px-3 false"><i class="fa-sharp fa-regular fa-magnifying-glass pr-2"></i>Search</button>
Wrap dynamically inserted content in an element with aria-live="polite" (or role="status"/"alert") so assistive technologies announce the change.
mediumClicking "Search" inserts 1 element(s) without ARIA live region. Screen readers will not announce this dynamic content.WCAG 4.1.3
<button class=" text-white hover:underline underline-offset-2 ml-3 px-3 false"><i class="fa-sharp fa-regular fa-magnifying-glass pr-2"></i>Search</button>
Wrap dynamically inserted content in an element with aria-live="polite" (or role="status"/"alert") so assistive technologies announce the change.
mediumClicking "Search" inserts 1 element(s) without ARIA live region. Screen readers will not announce this dynamic content.WCAG 4.1.3
<button class=" text-white hover:underline underline-offset-2 ml-3 px-3 false"><i class="fa-sharp fa-regular fa-magnifying-glass pr-2"></i>Search</button>
Wrap dynamically inserted content in an element with aria-live="polite" (or role="status"/"alert") so assistive technologies announce the change.
mediumClicking "Search" inserts 1 element(s) without ARIA live region. Screen readers will not announce this dynamic content.WCAG 4.1.3
<button class=" text-white hover:underline underline-offset-2 ml-3 px-3 false"><i class="fa-sharp fa-regular fa-magnifying-glass pr-2"></i>Search</button>
Wrap dynamically inserted content in an element with aria-live="polite" (or role="status"/"alert") so assistive technologies announce the change.
mediumClicking "Search" inserts 1 element(s) without ARIA live region. Screen readers will not announce this dynamic content.WCAG 4.1.3
<button class=" text-white hover:underline underline-offset-2 ml-3 px-3 false"><i class="fa-sharp fa-regular fa-magnifying-glass pr-2"></i>Search</button>
Wrap dynamically inserted content in an element with aria-live="polite" (or role="status"/"alert") so assistive technologies announce the change.
mediumClicking "Search" inserts 1 element(s) without ARIA live region. Screen readers will not announce this dynamic content.WCAG 4.1.3
<button class=" text-white hover:underline underline-offset-2 ml-3 px-3 false"><i class="fa-sharp fa-regular fa-magnifying-glass pr-2"></i>Search</button>
Wrap dynamically inserted content in an element with aria-live="polite" (or role="status"/"alert") so assistive technologies announce the change.
medium"Which cart does it go in?" is visually at position 30 but receives focus at position 66 (drift: 36).WCAG 2.4.3
<a>Which cart does it go in?</a>
Align DOM order with visual presentation, or use tabIndex to match the visual sequence.
medium"Live Green's Low-Waste Holiday Gift Guide" is visually at position 28 but receives focus at position 65 (drift: 37).WCAG 2.4.3
<a>Live Green's Low-Waste Holiday Gift Guide</a>
Align DOM order with visual presentation, or use tabIndex to match the visual sequence.
medium"Contact" is visually at position 31 but receives focus at position 67 (drift: 36).WCAG 2.4.3
<a>Contact</a>
Align DOM order with visual presentation, or use tabIndex to match the visual sequence.
mediumPage has only one navigation mechanism (navigation). WCAG requires at least two ways to locate a page within a set of pages.WCAG 2.4.5
Add at least two of: site navigation (<nav>), search functionality (input[type="search"] or role="search"), a sitemap link, breadcrumb navigation, or a table of contents.
mediumPage has only one navigation mechanism (navigation). WCAG requires at least two ways to locate a page within a set of pages.WCAG 2.4.5
Add at least two of: site navigation (<nav>), search functionality (input[type="search"] or role="search"), a sitemap link, breadcrumb navigation, or a table of contents.
mediumPage has only one navigation mechanism (navigation). WCAG requires at least two ways to locate a page within a set of pages.WCAG 2.4.5
Add at least two of: site navigation (<nav>), search functionality (input[type="search"] or role="search"), a sitemap link, breadcrumb navigation, or a table of contents.
mediumPage has only one navigation mechanism (navigation). WCAG requires at least two ways to locate a page within a set of pages.WCAG 2.4.5
Add at least two of: site navigation (<nav>), search functionality (input[type="search"] or role="search"), a sitemap link, breadcrumb navigation, or a table of contents.
mediumPage has only one navigation mechanism (navigation). WCAG requires at least two ways to locate a page within a set of pages.WCAG 2.4.5
Add at least two of: site navigation (<nav>), search functionality (input[type="search"] or role="search"), a sitemap link, breadcrumb navigation, or a table of contents.
mediumPage has only one navigation mechanism (navigation). WCAG requires at least two ways to locate a page within a set of pages.WCAG 2.4.5
Add at least two of: site navigation (<nav>), search functionality (input[type="search"] or role="search"), a sitemap link, breadcrumb navigation, or a table of contents.
mediumPage has only one navigation mechanism (navigation). WCAG requires at least two ways to locate a page within a set of pages.WCAG 2.4.5
Add at least two of: site navigation (<nav>), search functionality (input[type="search"] or role="search"), a sitemap link, breadcrumb navigation, or a table of contents.
mediumPage has only one navigation mechanism (navigation). WCAG requires at least two ways to locate a page within a set of pages.WCAG 2.4.5
Add at least two of: site navigation (<nav>), search functionality (input[type="search"] or role="search"), a sitemap link, breadcrumb navigation, or a table of contents.
mediumContent clipped by 56px when text spacing is applied per WCAG 1.4.12. Text may be hidden when users adjust spacing for readability.WCAG 1.4.12
<div class="absolute inset-0 flex justify-center items-start overflow-hidden"><img alt="" role="presentation" loading="lazy" width="800" height="800" decoding="async" data-nimg="1" class="w-full h-aut
Avoid fixed-height containers with overflow: hidden for text content. Use min-height or allow containers to grow.
mediumContent clipped by 95px when text spacing is applied per WCAG 1.4.12. Text may be hidden when users adjust spacing for readability.WCAG 1.4.12
<a class="absolute overflow-hidden h-[1px] w-[1px] focus:static focus:w-auto focus:h-auto focus:border-2 focus:border-black" tabindex="0" href="/#main-content">Skip to main content</a>
Avoid fixed-height containers with overflow: hidden for text content. Use min-height or allow containers to grow.
mediumElement overflows viewport by 160px at 320px width.WCAG 1.4.10
<img alt="" role="presentation" loading="lazy" width="800" height="800" decoding="async" data-nimg="1" class="w-full h-auto max-w-[28rem] top-5 right-[-50%] md:top-0 md:right-auto absolute" style="col
Set max-width: 100% or use overflow-wrap to prevent horizontal overflow.
mediumStuck loading state: loading indicator CSS class on <input> persists after page readiness
<input type="text" class="w-full mt-0 text-black placeholder:italic" tabindex="0" aria-label="Search" placeholder="Type to Search">
lowHeadings should not be empty: Fix any of the following: Element does not have text that is visible to screen readers aria-label attribute does not exist or is empty aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty Element has no title attribute
<h3> </h3>
Ensure headings have discernible text. See: https://www.w3.org/WAI/WCAG22/quickref/
lowHeadings should not be empty: Fix any of the following: Element does not have text that is visible to screen readers aria-label attribute does not exist or is empty aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty Element has no title attribute
<h3> </h3>
Ensure headings have discernible text. See: https://www.w3.org/WAI/WCAG22/quickref/
lowDeep focus region: nav "Sidebar navigation" has 40 tab stops before focus escapes. Consider adding skip navigation or grouping with arrow keys.WCAG 2.4.1
<nav role="nav">Sidebar navigation</nav>
Add a "skip to content" link or use roving tabindex to reduce the number of Tab stops.
lowBroken link: https://twitter.com/LexingtonKyGov returned status 403 Forbidden after 1 attempts
<a href="https://twitter.com/LexingtonKyGov"></a>
lowLink timeout: fax:+18592583194 did not respond within 5000ms after 8 attempts
<a href="fax:+18592583194">(859) 258-3194</a>
lowBroken link: https://twitter.com/LexingtonKyGov returned status 403 Forbidden after 1 attempts
<a href="https://twitter.com/LexingtonKyGov"></a>
lowBroken link: https://twitter.com/LexingtonKyGov returned status 403 Forbidden after 1 attempts
<a href="https://twitter.com/LexingtonKyGov"></a>
lowBroken link: https://twitter.com/LiveGreenLex returned status 403 Forbidden after 1 attempts
<a href="https://twitter.com/LiveGreenLex"></a>
lowBroken link: https://twitter.com/LexingtonKyGov returned status 403 Forbidden after 1 attempts
<a href="https://twitter.com/LexingtonKyGov"></a>
lowBroken link: https://drive.google.com/file/d/1BNNwhrAAp9X0XEzixYEJAHDA9IZBTaY1/view?usp=sharing returned status 404 Not Found after 1 attempts
<a href="https://drive.google.com/file/d/1BNNwhrAAp9X0XEzixYEJAHDA9IZBTaY1/view?usp=sharing">Schedule of Program Performance and Evaluation Committee presentations</a>
lowBroken link: https://twitter.com/LexingtonKyGov returned status 403 Forbidden after 1 attempts
<a href="https://twitter.com/LexingtonKyGov"></a>
lowBroken link: https://drive.google.com/file/d/1c8fj-PxpBp3e73tvDEexQA1Ki1UvJMDZ/view?usp=sharing returned status 404 Not Found after 1 attempts
<a href="https://drive.google.com/file/d/1c8fj-PxpBp3e73tvDEexQA1Ki1UvJMDZ/view?usp=sharing">Program Performance and Evaluation Committee meeting details</a>
lowBroken link: https://twitter.com/LexingtonKyGov returned status 403 Forbidden after 1 attempts
<a href="https://twitter.com/LexingtonKyGov"></a>
lowBroken link: https://twitter.com/LexingtonKyGov returned status 403 Forbidden after 1 attempts
<a href="https://twitter.com/LexingtonKyGov"></a>
lowBroken link: https://twitter.com/LexingtonKyGov returned status 403 Forbidden after 1 attempts
<a href="https://twitter.com/LexingtonKyGov"></a>
lowBroken link: https://twitter.com/LexingtonKyGov returned status 403 Forbidden after 1 attempts
<a href="https://twitter.com/LexingtonKyGov"></a>
Best Page Fix Opportunities
/government/departments-programs/environmental-quality-public-works/environmental-services/live-green-lexington/winter-waste-tips15findings
highEmpty heading (role="heading"). Headings must contain text for screen reader navigation to work.WCAG 1.3.1
<!-- a11y: role="heading" name=" " -->
Add text content to the heading, or remove the heading element if it serves no structural purpose. WCAG 1.3.1 requires meaningful heading structure.
highEmpty heading (role="heading"). Headings must contain text for screen reader navigation to work.WCAG 1.3.1
<!-- a11y: role="heading" name=" " -->
Add text content to the heading, or remove the heading element if it serves no structural purpose. WCAG 1.3.1 requires meaningful heading structure.
highFocus jumps backward from "Water Quality" to "Special holiday collections" (visual distance: 1819px). No explicit tabIndex — likely a DOM order issue.WCAG 2.4.3
<a>Special holiday collections</a>
Reorder elements in the DOM to match the visual layout. Align DOM order with visual presentation, or use tabIndex to match the visual sequence.
highMissing X-Content-Type-Options header
Add X-Content-Type-Options: nosniff Add X-Frame-Options: DENY or SAMEORIGIN Add a Content-Security-Policy header with appropriate directives Add Referrer-Policy: strict-origin-when-cross-origin or no-referrer
mediumAll page content should be contained by landmarks: Fix any of the following: Some page content is not contained by landmarks
<div class="flex flex-col md:flex-row md:justify-between md:items-center gap-4">
Ensure all page content is contained by landmarks. See: https://www.w3.org/WAI/WCAG22/quickref/
mediumClicking "Search" inserts 1 element(s) without ARIA live region. Screen readers will not announce this dynamic content.WCAG 4.1.3
<button class=" text-white hover:underline underline-offset-2 ml-3 px-3 false"><i class="fa-sharp fa-regular fa-magnifying-glass pr-2"></i>Search</button>
Wrap dynamically inserted content in an element with aria-live="polite" (or role="status"/"alert") so assistive technologies announce the change.
medium"Which cart does it go in?" is visually at position 30 but receives focus at position 66 (drift: 36).WCAG 2.4.3
<a>Which cart does it go in?</a>
Align DOM order with visual presentation, or use tabIndex to match the visual sequence.
medium"Live Green's Low-Waste Holiday Gift Guide" is visually at position 28 but receives focus at position 65 (drift: 37).WCAG 2.4.3
<a>Live Green's Low-Waste Holiday Gift Guide</a>
Align DOM order with visual presentation, or use tabIndex to match the visual sequence.
medium"Contact" is visually at position 31 but receives focus at position 67 (drift: 36).WCAG 2.4.3
<a>Contact</a>
Align DOM order with visual presentation, or use tabIndex to match the visual sequence.
mediumPage has only one navigation mechanism (navigation). WCAG requires at least two ways to locate a page within a set of pages.WCAG 2.4.5
Add at least two of: site navigation (<nav>), search functionality (input[type="search"] or role="search"), a sitemap link, breadcrumb navigation, or a table of contents.
lowHeadings should not be empty: Fix any of the following: Element does not have text that is visible to screen readers aria-label attribute does not exist or is empty aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty Element has no title attribute
<h3> </h3>
Ensure headings have discernible text. See: https://www.w3.org/WAI/WCAG22/quickref/
lowHeadings should not be empty: Fix any of the following: Element does not have text that is visible to screen readers aria-label attribute does not exist or is empty aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty Element has no title attribute
<h3> </h3>
Ensure headings have discernible text. See: https://www.w3.org/WAI/WCAG22/quickref/
lowDeep focus region: nav "Sidebar navigation" has 40 tab stops before focus escapes. Consider adding skip navigation or grouping with arrow keys.WCAG 2.4.1
<nav role="nav">Sidebar navigation</nav>
Add a "skip to content" link or use roving tabindex to reduce the number of Tab stops.
lowBroken link: https://twitter.com/LiveGreenLex returned status 403 Forbidden after 1 attempts
<a href="https://twitter.com/LiveGreenLex"></a>
lowBroken link: https://twitter.com/LexingtonKyGov returned status 403 Forbidden after 1 attempts
<a href="https://twitter.com/LexingtonKyGov"></a>
/government/departments-programs/housing-advocacy-community-development/office-homelessness-prevention-intervention/whats-being-done8findings
highFocus jumps backward from "What's being done?" to "Investment in Homeless Response" (visual distance: 449px). No explicit tabIndex — likely a DOM order issue.WCAG 2.4.3
<h2>Investment in Homeless Response</h2>
Reorder elements in the DOM to match the visual layout.
highMissing X-Content-Type-Options header
Add X-Content-Type-Options: nosniff Add X-Frame-Options: DENY or SAMEORIGIN Add a Content-Security-Policy header with appropriate directives Add Referrer-Policy: strict-origin-when-cross-origin or no-referrer
mediumAll page content should be contained by landmarks: Fix any of the following: Some page content is not contained by landmarks
<div class="flex flex-col md:flex-row md:justify-between md:items-center gap-4">
Ensure all page content is contained by landmarks. See: https://www.w3.org/WAI/WCAG22/quickref/
mediumClicking "Search" inserts 1 element(s) without ARIA live region. Screen readers will not announce this dynamic content.WCAG 4.1.3
<button class=" text-white hover:underline underline-offset-2 ml-3 px-3 false"><i class="fa-sharp fa-regular fa-magnifying-glass pr-2"></i>Search</button>
Wrap dynamically inserted content in an element with aria-live="polite" (or role="status"/"alert") so assistive technologies announce the change.
mediumPage has only one navigation mechanism (navigation). WCAG requires at least two ways to locate a page within a set of pages.WCAG 2.4.5
Add at least two of: site navigation (<nav>), search functionality (input[type="search"] or role="search"), a sitemap link, breadcrumb navigation, or a table of contents.
lowBroken link: https://drive.google.com/file/d/1BNNwhrAAp9X0XEzixYEJAHDA9IZBTaY1/view?usp=sharing returned status 404 Not Found after 1 attempts
<a href="https://drive.google.com/file/d/1BNNwhrAAp9X0XEzixYEJAHDA9IZBTaY1/view?usp=sharing">Schedule of Program Performance and Evaluation Committee presentations</a>
lowBroken link: https://twitter.com/LexingtonKyGov returned status 403 Forbidden after 1 attempts
<a href="https://twitter.com/LexingtonKyGov"></a>
lowBroken link: https://drive.google.com/file/d/1c8fj-PxpBp3e73tvDEexQA1Ki1UvJMDZ/view?usp=sharing returned status 404 Not Found after 1 attempts
<a href="https://drive.google.com/file/d/1c8fj-PxpBp3e73tvDEexQA1Ki1UvJMDZ/view?usp=sharing">Program Performance and Evaluation Committee meeting details</a>
www.lexingtonky.gov8findings
highMissing X-Content-Type-Options header
Add X-Content-Type-Options: nosniff Add X-Frame-Options: DENY or SAMEORIGIN Add a Content-Security-Policy header with appropriate directives Add Referrer-Policy: strict-origin-when-cross-origin or no-referrer
mediumAll page content should be contained by landmarks: Fix any of the following: Some page content is not contained by landmarks
<div class="flex flex-col md:flex-row md:justify-between md:items-center gap-4">
Ensure all page content is contained by landmarks. See: https://www.w3.org/WAI/WCAG22/quickref/
mediumClicking "Pay..." inserts 7 element(s) without ARIA live region. Screen readers will not announce this dynamic content.WCAG 4.1.3
<button class="bg-transparent border-2 py-2 px-2 md:px-4 inline-block rounded-sm font-body text-base font-medium text-center border-primary-1 hover:bg-primary-1 hover:text-white mr-2 mb-2" aria-label=
Wrap dynamically inserted content in an element with aria-live="polite" (or role="status"/"alert") so assistive technologies announce the change.
mediumClicking "Search" inserts 1 element(s) without ARIA live region. Screen readers will not announce this dynamic content.WCAG 4.1.3
<button class=" text-white hover:underline underline-offset-2 ml-3 px-3 false"><i class="fa-sharp fa-regular fa-magnifying-glass pr-2"></i>Search</button>
Wrap dynamically inserted content in an element with aria-live="polite" (or role="status"/"alert") so assistive technologies announce the change.
mediumContent clipped by 95px when text spacing is applied per WCAG 1.4.12. Text may be hidden when users adjust spacing for readability.WCAG 1.4.12
<a class="absolute overflow-hidden h-[1px] w-[1px] focus:static focus:w-auto focus:h-auto focus:border-2 focus:border-black" tabindex="0" href="/#main-content">Skip to main content</a>
Avoid fixed-height containers with overflow: hidden for text content. Use min-height or allow containers to grow.
mediumElement overflows viewport by 160px at 320px width.WCAG 1.4.10
<img alt="" role="presentation" loading="lazy" width="800" height="800" decoding="async" data-nimg="1" class="w-full h-auto max-w-[28rem] top-5 right-[-50%] md:top-0 md:right-auto absolute" style="col
Set max-width: 100% or use overflow-wrap to prevent horizontal overflow.
mediumStuck loading state: loading indicator CSS class on <input> persists after page readiness
<input type="text" class="w-full mt-0 text-black placeholder:italic" tabindex="0" aria-label="Search" placeholder="Type to Search">
lowBroken link: https://twitter.com/LexingtonKyGov returned status 403 Forbidden after 1 attempts
<a href="https://twitter.com/LexingtonKyGov"></a>
Methodology
The Sonde Score is a universal 0–1000 compliance index — think of it like a credit score for accessibility. Each finding is weighted by its impact on human access: a keyboard trap (critical) counts far more than a best-practice suggestion (low). The raw penalty is normalized per page so scores are comparable across sites of any size. A harmonic curve ensures every site gets a meaningful score — no zeros, no false perfection.
where S = sensitivity (750), P = Σ(weight × count), N = pages scanned
| Tier | Weight | Examples |
|---|---|---|
| Critical | 10 | Keyboard traps, missing page language |
| High | 3 | Missing alt text, insufficient contrast |
| Medium | 1 | Heading hierarchy, unclear link purpose |
| Low | 0.25 | Best-practice suggestions |
The Sonde Score is a living standard (v0.1). We’re building it in the open because accessibility is too important for closed-door decisions. Your expertise makes it better.
Enter Mission Control
Review raw findings data, track changes between scans, and contribute to Sonde’s open methodology.
Nominate a Site for the Daylight Index
Know a public website that should be on the accessibility leaderboard? Nominate it — we’ll scan it and publish the results.