Lexington-Fayette Urban County — Score 987 | Sonde

Sonde

Accessibility Health Check

https://www.lexingtonky.gov

Excellent

April 28, 2026

Provided free by Sonde

10pages87findings0critical13high57medium17low8.7avg/page3,134elements30with findings99%ECR4m 3stotal24.3sper page

Excellent

Executive Summary

10pages87findings8.7avg/page3,134elements30with findings99%ECR4m 3stotal24.3sper page

Top Findings

Copy a direct link to share a finding Open a discussion to give feedback on a finding

highEmpty heading (role="heading"). Headings must contain text for screen reader navigation to work.WCAG 1.3.1
Element:
<!-- a11y: role="heading" name=" " -->
Sonde Fix Plan

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
Element:
<!-- a11y: role="heading" name=" " -->
Sonde Fix Plan

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
Element:
<a>Special holiday collections</a>
Sonde Fix Plan

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
Element:
<h2>Investment in Homeless Response</h2>
Sonde Fix Plan

Reorder elements in the DOM to match the visual layout.

highMissing X-Content-Type-Options header
Page: /
Sonde Fix Plan

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
Sonde Fix Plan

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
Sonde Fix Plan

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
Sonde Fix Plan

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
Sonde Fix Plan

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
Page: /living
Sonde Fix Plan

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
Page: /playing
Sonde Fix Plan

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
Page: /ready
Sonde Fix Plan

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
Page: /working
Sonde Fix Plan

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
Page: /
Element:
<div class="flex flex-col md:flex-row md:justify-between md:items-center gap-4">
Sonde Fix Plan

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
Element:
<div class="flex flex-col md:flex-row md:justify-between md:items-center gap-4">
Sonde Fix Plan

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
Element:
<h3 class="text-inherit group-hover:underline mb-0">Dispute resolution</h3>
Sonde Fix Plan

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
Element:
<div class="flex flex-col md:flex-row md:justify-between md:items-center gap-4">
Sonde Fix Plan

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
Element:
<div class="flex flex-col md:flex-row md:justify-between md:items-center gap-4">
Sonde Fix Plan

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
Element:
<div class="flex flex-col md:flex-row md:justify-between md:items-center gap-4">
Sonde Fix Plan

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
Page: /living
Element:
<div class="flex flex-col md:flex-row md:justify-between md:items-center gap-4">
Sonde Fix Plan

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
Page: /living
Element:
<h3 class="m-0 text-lg lg:text-xl xl:text-2xl">Public Safety</h3>
Sonde Fix Plan

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
Page: /playing
Element:
<h3 class="m-0 text-lg lg:text-xl xl:text-2xl">After school programs </h3>
Sonde Fix Plan

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
Page: /playing
Element:
<div class="flex flex-col md:flex-row md:justify-between md:items-center gap-4">
Sonde Fix Plan

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
Page: /ready
Element:
<div class="flex flex-col md:flex-row md:justify-between md:items-center gap-4">
Sonde Fix Plan

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
Page: /ready
Element:
<html lang="en" translate="no">
Sonde Fix Plan

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
Page: /working
Element:
<div class="flex flex-col md:flex-row md:justify-between md:items-center gap-4">
Sonde Fix Plan

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
Page: /working
Element:
<h3 class="m-0 text-lg lg:text-xl xl:text-2xl">Current building codes</h3>
Sonde Fix Plan

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
Element:
<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=
Sonde Fix Plan

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
Element:
<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>
Sonde Fix Plan

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
Element:
<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
Sonde Fix Plan

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
Element:
<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>
Sonde Fix Plan

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
Element:
<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>
Sonde Fix Plan

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
Element:
<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>
Sonde Fix Plan

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
Element:
<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>
Sonde Fix Plan

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
Element:
<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>
Sonde Fix Plan

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
Element:
<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>
Sonde Fix Plan

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
Element:
<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>
Sonde Fix Plan

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
Element:
<a>Which cart does it go in?</a>
Sonde Fix Plan

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
Element:
<a>Live Green's Low-Waste Holiday Gift Guide</a>
Sonde Fix Plan

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
Element:
<a>Contact</a>
Sonde Fix Plan

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
Sonde Fix Plan

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
Sonde Fix Plan

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
Sonde Fix Plan

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
Sonde Fix Plan

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
Sonde Fix Plan

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
Sonde Fix Plan

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
Sonde Fix Plan

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
Sonde Fix Plan

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
Element:
<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
Sonde Fix Plan

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
Element:
<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>
Sonde Fix Plan

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
Element:
<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
Sonde Fix Plan

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
Page: /
Element:
<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
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
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
Element:
<nav role="nav">Sidebar navigation</nav>
Sonde Fix Plan

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
Page: /
Element:
<a href="https://twitter.com/LexingtonKyGov"></a>
lowLink timeout: fax:+18592583194 did not respond within 5000ms after 8 attempts
Element:
<a href="fax:+18592583194">(859) 258-3194</a>
lowBroken link: https://twitter.com/LexingtonKyGov returned status 403 Forbidden after 1 attempts
Element:
<a href="https://twitter.com/LexingtonKyGov"></a>
lowBroken link: https://twitter.com/LexingtonKyGov returned status 403 Forbidden after 1 attempts
Element:
<a href="https://twitter.com/LexingtonKyGov"></a>
lowBroken link: https://twitter.com/LiveGreenLex returned status 403 Forbidden after 1 attempts
lowBroken link: https://twitter.com/LexingtonKyGov returned status 403 Forbidden after 1 attempts
lowBroken link: https://drive.google.com/file/d/1BNNwhrAAp9X0XEzixYEJAHDA9IZBTaY1/view?usp=sharing returned status 404 Not Found after 1 attempts
Element:
<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
lowBroken link: https://drive.google.com/file/d/1c8fj-PxpBp3e73tvDEexQA1Ki1UvJMDZ/view?usp=sharing returned status 404 Not Found after 1 attempts
Element:
<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
Page: /living
Element:
<a href="https://twitter.com/LexingtonKyGov"></a>
lowBroken link: https://twitter.com/LexingtonKyGov returned status 403 Forbidden after 1 attempts
Page: /playing
Element:
<a href="https://twitter.com/LexingtonKyGov"></a>
lowBroken link: https://twitter.com/LexingtonKyGov returned status 403 Forbidden after 1 attempts
Page: /ready
Element:
<a href="https://twitter.com/LexingtonKyGov"></a>
lowBroken link: https://twitter.com/LexingtonKyGov returned status 403 Forbidden after 1 attempts
Page: /working
Element:
<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
Element:
<!-- a11y: role="heading" name=" " -->
Sonde Fix Plan

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
Element:
<!-- a11y: role="heading" name=" " -->
Sonde Fix Plan

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
Element:
<a>Special holiday collections</a>
Sonde Fix Plan

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
Sonde Fix Plan

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
Element:
<div class="flex flex-col md:flex-row md:justify-between md:items-center gap-4">
Sonde Fix Plan

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
Element:
<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>
Sonde Fix Plan

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
Element:
<a>Which cart does it go in?</a>
Sonde Fix Plan

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
Element:
<a>Live Green's Low-Waste Holiday Gift Guide</a>
Sonde Fix Plan

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
Element:
<a>Contact</a>
Sonde Fix Plan

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
Sonde Fix Plan

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
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
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
Element:
<nav role="nav">Sidebar navigation</nav>
Sonde Fix Plan

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
lowBroken link: https://twitter.com/LexingtonKyGov returned status 403 Forbidden after 1 attempts
/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
Element:
<h2>Investment in Homeless Response</h2>
Sonde Fix Plan

Reorder elements in the DOM to match the visual layout.

highMissing X-Content-Type-Options header
Sonde Fix Plan

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
Element:
<div class="flex flex-col md:flex-row md:justify-between md:items-center gap-4">
Sonde Fix Plan

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
Element:
<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>
Sonde Fix Plan

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
Sonde Fix Plan

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
Element:
<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
lowBroken link: https://drive.google.com/file/d/1c8fj-PxpBp3e73tvDEexQA1Ki1UvJMDZ/view?usp=sharing returned status 404 Not Found after 1 attempts
Element:
<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
Page: /
Sonde Fix Plan

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
Page: /
Element:
<div class="flex flex-col md:flex-row md:justify-between md:items-center gap-4">
Sonde Fix Plan

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
Element:
<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=
Sonde Fix Plan

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
Element:
<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>
Sonde Fix Plan

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
Element:
<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>
Sonde Fix Plan

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
Element:
<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
Sonde Fix Plan

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
Page: /
Element:
<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
Page: /
Element:
<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.

Score = round(1000 × S / (S + P/N))

where S = sensitivity (750), P = Σ(weight × count), N = pages scanned

TierWeightExamples
Critical10Keyboard traps, missing page language
High3Missing alt text, insufficient contrast
Medium1Heading hierarchy, unclear link purpose
Low0.25Best-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.

Nominate a Site →

This report is a health check, not a verdict. Every website has room to improve.

Disclaimer: This report presents the results of automated accessibility analysis and is provided free of charge, as-is, without warranty of any kind. Findings are generated by software, not by human accessibility experts, and may contain errors or omissions. Automated testing can detect approximately 30–40% of accessibility issues; manual expert evaluation is recommended for complete conformance assessment. Scores reflect algorithmic analysis under a published methodology open to public review — they are not legal determinations of compliance. Results reflect the state of the website at the time of scanning and may change as the site is updated. Nothing in this report constitutes legal advice. Sonde assumes no liability for decisions made based on these results.

Compliance methodology: NIST 800-53 Rev 5 (usnistgov/oscal-content v1.4.0, catalog 5.2.0) · NIST PRIVACY overlay (usnistgov/oscal-content v1.4.0, catalog 5.2.0) · FedRAMP Rev 5 (OSCAL-Foundation/fedramp-resources a6b85ed451, catalog fedramp-3.0.0rc1-oscal-1.1.2).