New York City — Score 968 | Sonde

Sonde

Accessibility Health Check

https://nyc.gov

Excellent

April 28, 2026

Provided free by Sonde

12pages180findings6critical42high109medium23low15.0avg/page6,973elements65with findings99.1%ECR3m 47stotal18.9sper page

Excellent

Executive Summary

12pages180findings15.0avg/page6,973elements65with findings99.1%ECR3m 47stotal18.9sper page

Top Findings

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

criticalInsufficient color contrast: 1.14:1 (required: 3:1 for large text). Foreground: rgb(255, 255, 255), background: rgb(226, 243, 255). Text: "Find what you need on nyc.gov"WCAG 1.4.3
Element:
<span class="main-heading--subhead">Find what you need on nyc.gov</span>
Sonde Fix Plan

Current ratio: 1.14:1 (need 3:1). Change foreground from #ffffff to #8b8b8b (ratio: 3.0:1). Or change background from #e2f3ff to #ffffff.

criticalInsufficient color contrast: 1.00:1 (required: 4.5:1 for normal text). Foreground: rgb(255, 255, 255), background: rgb(255, 255, 255). Text: "What's happening?"WCAG 1.4.3
Element:
<span class="small-paragraph">What's happening?</span>
Sonde Fix Plan

Current ratio: 1.00:1 (need 4.5:1). Change foreground from #ffffff to #777676 (ratio: 4.5:1).

criticalInsufficient color contrast: 1.00:1 (required: 4.5:1 for normal text). Foreground: rgb(255, 255, 255), background: rgb(255, 255, 255). Text: "Posted April 16, 2026"WCAG 1.4.3
Element:
<p class="cmp-teaser__pretitle">Posted April 16, 2026</p>
Sonde Fix Plan

Current ratio: 1.00:1 (need 4.5:1). Change foreground from #ffffff to #777676 (ratio: 4.5:1).

criticalInsufficient color contrast: 1.00:1 (required: 4.5:1 for normal text). Foreground: rgb(255, 255, 255), background: rgb(255, 255, 255). Text: "Cast a ballot during the early voting period, April 18th– Ap"WCAG 1.4.3
Element:
<p>Cast a ballot during the early voting period, April 18th– April 26th, or on Election Day, Tuesday, April 28th.</p>
Sonde Fix Plan

Current ratio: 1.00:1 (need 4.5:1). Change foreground from #ffffff to #777676 (ratio: 4.5:1).

criticalInsufficient color contrast: 1.00:1 (required: 3:1 for large text). Foreground: rgb(255, 255, 255), background: rgb(255, 255, 255). Text: "Special Election"WCAG 1.4.3
Element:
<span class="cmp-accordion__title">Special Election</span>
Sonde Fix Plan

Current ratio: 1.00:1 (need 3:1). Change foreground from #ffffff to #959494 (ratio: 3.0:1).

criticalInsufficient color contrast: 1.00:1 (required: 3:1 for large text). Foreground: rgb(255, 255, 255), background: rgb(255, 255, 255). Text: "Welcome to the Mayor’s Office"WCAG 1.4.3
Element:
<h1 class="nyc-hero__title" data-heading-only="true" data-has-bread="false">
            Welcome to the Mayor’s Office
          </h1>
Sonde Fix Plan

Current ratio: 1.00:1 (need 3:1). Change foreground from #ffffff to #959494 (ratio: 3.0:1).

highImage has no accessible name in the accessibility tree. Screen readers will skip or announce it generically.WCAG 1.1.1
Element:
<!-- a11y: role="image" -->
Sonde Fix Plan

Add alt text to the image. If decorative, mark with role="presentation" or alt="". WCAG 1.1.1 requires text alternatives for non-text content.

highImage has no accessible name in the accessibility tree. Screen readers will skip or announce it generically.WCAG 1.1.1
Element:
<!-- a11y: role="image" desc="Voters casting ballots in polling station" -->
Sonde Fix Plan

Add alt text to the image. If decorative, mark with role="presentation" or alt="". WCAG 1.1.1 requires text alternatives for non-text content.

highImage has no accessible name in the accessibility tree. Screen readers will skip or announce it generically.WCAG 1.1.1
Element:
<!-- a11y: role="image" desc="Zohran Mamdani" -->
Sonde Fix Plan

Add alt text to the image. If decorative, mark with role="presentation" or alt="". WCAG 1.1.1 requires text alternatives for non-text content.

highImage has no accessible name in the accessibility tree. Screen readers will skip or announce it generically.WCAG 1.1.1
Element:
<!-- a11y: role="image" -->
Sonde Fix Plan

Add alt text to the image. If decorative, mark with role="presentation" or alt="". WCAG 1.1.1 requires text alternatives for non-text content.

highImage has no accessible name in the accessibility tree. Screen readers will skip or announce it generically.WCAG 1.1.1
Element:
<!-- a11y: role="image" -->
Sonde Fix Plan

Add alt text to the image. If decorative, mark with role="presentation" or alt="". WCAG 1.1.1 requires text alternatives for non-text content.

highImage has no accessible name in the accessibility tree. Screen readers will skip or announce it generically.WCAG 1.1.1
Element:
<!-- a11y: role="image" -->
Sonde Fix Plan

Add alt text to the image. If decorative, mark with role="presentation" or alt="". WCAG 1.1.1 requires text alternatives for non-text content.

highImage has no accessible name in the accessibility tree. Screen readers will skip or announce it generically.WCAG 1.1.1
Element:
<!-- a11y: role="image" -->
Sonde Fix Plan

Add alt text to the image. If decorative, mark with role="presentation" or alt="". WCAG 1.1.1 requires text alternatives for non-text content.

highImage has no accessible name in the accessibility tree. Screen readers will skip or announce it generically.WCAG 1.1.1
Element:
<!-- a11y: role="image" -->
Sonde Fix Plan

Add alt text to the image. If decorative, mark with role="presentation" or alt="". WCAG 1.1.1 requires text alternatives for non-text content.

highImage has no accessible name in the accessibility tree. Screen readers will skip or announce it generically.WCAG 1.1.1
Element:
<!-- a11y: role="image" -->
Sonde Fix Plan

Add alt text to the image. If decorative, mark with role="presentation" or alt="". WCAG 1.1.1 requires text alternatives for non-text content.

highImage has no accessible name in the accessibility tree. Screen readers will skip or announce it generically.WCAG 1.1.1
Element:
<!-- a11y: role="image" -->
Sonde Fix Plan

Add alt text to the image. If decorative, mark with role="presentation" or alt="". WCAG 1.1.1 requires text alternatives for non-text content.

highImage has no accessible name in the accessibility tree. Screen readers will skip or announce it generically.WCAG 1.1.1
Element:
<!-- a11y: role="image" -->
Sonde Fix Plan

Add alt text to the image. If decorative, mark with role="presentation" or alt="". WCAG 1.1.1 requires text alternatives for non-text content.

highImage has no accessible name in the accessibility tree. Screen readers will skip or announce it generically.WCAG 1.1.1
Element:
<!-- a11y: role="image" -->
Sonde Fix Plan

Add alt text to the image. If decorative, mark with role="presentation" or alt="". WCAG 1.1.1 requires text alternatives for non-text content.

highImage has no accessible name in the accessibility tree. Screen readers will skip or announce it generically.WCAG 1.1.1
Element:
<!-- a11y: role="image" -->
Sonde Fix Plan

Add alt text to the image. If decorative, mark with role="presentation" or alt="". WCAG 1.1.1 requires text alternatives for non-text content.

highImage has no accessible name in the accessibility tree. Screen readers will skip or announce it generically.WCAG 1.1.1
Element:
<!-- a11y: role="image" -->
Sonde Fix Plan

Add alt text to the image. If decorative, mark with role="presentation" or alt="". WCAG 1.1.1 requires text alternatives for non-text content.

highInsufficient color contrast: 2.85:1 (required: 3:1 for large text). Foreground: rgba(0, 0, 0, 0), background: rgb(108, 149, 255). Text: "English"WCAG 1.4.3
Element:
<span class="cmp-language-navigation__action-button--language" aria-hidden="true">English</span>
Sonde Fix Plan

Current ratio: 2.85:1 (need 3:1). Change foreground from #ffffff to #4d4c4c (ratio: 3.0:1).

highFocus jumps backward from "Learn to Ride" to "Story Hour" (visual distance: 598px). No explicit tabIndex — likely a DOM order issue.WCAG 2.4.3
Element:
<a>Story Hour</a>
Sonde Fix Plan

Reorder elements in the DOM to match the visual layout.

highFocus jumps backward from "Read press release" to "Read press release" (visual distance: 452px). No explicit tabIndex — likely a DOM order issue.WCAG 2.4.3
Element:
<a>Read press release</a>
Sonde Fix Plan

Reorder elements in the DOM to match the visual layout.

highFocus jumps backward from "Read press release" to "Read press release" (visual distance: 452px). No explicit tabIndex — likely a DOM order issue.WCAG 2.4.3
Element:
<a>Read press release</a>
Sonde Fix Plan

Reorder elements in the DOM to match the visual layout.

highFocus jumps backward from "Privacy Policy" to "Terms of Service" (visual distance: 447px). No explicit tabIndex — likely a DOM order issue.WCAG 2.4.3
Element:
<a>Terms of Service</a>
Sonde Fix Plan

Reorder elements in the DOM to match the visual layout.

highMissing Content-Security-Policy header
Page: /main
Sonde Fix Plan

Add a Content-Security-Policy header with appropriate directives Add Referrer-Policy: strict-origin-when-cross-origin or no-referrer

highMissing Content-Security-Policy header
Sonde Fix Plan

Add a Content-Security-Policy header with appropriate directives Add Referrer-Policy: strict-origin-when-cross-origin or no-referrer

highMissing Content-Security-Policy header
Sonde Fix Plan

Add a Content-Security-Policy header with appropriate directives Add Referrer-Policy: strict-origin-when-cross-origin or no-referrer

highMissing Strict-Transport-Security header (HSTS)
Sonde Fix Plan

Add Strict-Transport-Security header with max-age of at least 31536000 Add X-Frame-Options: DENY or SAMEORIGIN Add Referrer-Policy: strict-origin-when-cross-origin or no-referrer

highMissing Content-Security-Policy header
Sonde Fix Plan

Add a Content-Security-Policy header with appropriate directives Add Referrer-Policy: strict-origin-when-cross-origin or no-referrer

highMissing Content-Security-Policy header
Sonde Fix Plan

Add a Content-Security-Policy header with appropriate directives Add Referrer-Policy: strict-origin-when-cross-origin or no-referrer

highMissing Content-Security-Policy header
Sonde Fix Plan

Add a Content-Security-Policy header with appropriate directives Add Referrer-Policy: strict-origin-when-cross-origin or no-referrer

highMissing Content-Security-Policy header
Sonde Fix Plan

Add a Content-Security-Policy header with appropriate directives Add Referrer-Policy: strict-origin-when-cross-origin or no-referrer

highMissing Content-Security-Policy header
Sonde Fix Plan

Add a Content-Security-Policy header with appropriate directives Add Referrer-Policy: strict-origin-when-cross-origin or no-referrer

highMissing Content-Security-Policy header
Sonde Fix Plan

Add a Content-Security-Policy header with appropriate directives Add Referrer-Policy: strict-origin-when-cross-origin or no-referrer

highMissing Content-Security-Policy header
Sonde Fix Plan

Add a Content-Security-Policy header with appropriate directives Add Referrer-Policy: strict-origin-when-cross-origin or no-referrer

highMissing Content-Security-Policy header
Sonde Fix Plan

Add a Content-Security-Policy header with appropriate directives Add Referrer-Policy: strict-origin-when-cross-origin or no-referrer

mediumPage has 2 "navigation" landmarks but only 1 have distinct labels. Screen reader users cannot distinguish between them.WCAG 1.3.1
Element:
<!-- 2 navigation landmarks, 1 labeled -->
Sonde Fix Plan

Add unique aria-label or aria-labelledby to each "navigation" landmark so screen readers can differentiate them. Example: <nav aria-label="Primary">, <nav aria-label="Footer">.

mediumPage has 4 "navigation" landmarks but only 1 have distinct labels. Screen reader users cannot distinguish between them.WCAG 1.3.1
Element:
<!-- 4 navigation landmarks, 1 labeled -->
Sonde Fix Plan

Add unique aria-label or aria-labelledby to each "navigation" landmark so screen readers can differentiate them. Example: <nav aria-label="Primary">, <nav aria-label="Footer">.

mediumPage has 2 "navigation" landmarks but only 1 have distinct labels. Screen reader users cannot distinguish between them.WCAG 1.3.1
Element:
<!-- 2 navigation landmarks, 1 labeled -->
Sonde Fix Plan

Add unique aria-label or aria-labelledby to each "navigation" landmark so screen readers can differentiate them. Example: <nav aria-label="Primary">, <nav aria-label="Footer">.

mediumPage has 4 "navigation" landmarks but only 1 have distinct labels. Screen reader users cannot distinguish between them.WCAG 1.3.1
Element:
<!-- 4 navigation landmarks, 1 labeled -->
Sonde Fix Plan

Add unique aria-label or aria-labelledby to each "navigation" landmark so screen readers can differentiate them. Example: <nav aria-label="Primary">, <nav aria-label="Footer">.

mediumPage has 4 "navigation" landmarks but only 1 have distinct labels. Screen reader users cannot distinguish between them.WCAG 1.3.1
Element:
<!-- 4 navigation landmarks, 1 labeled -->
Sonde Fix Plan

Add unique aria-label or aria-labelledby to each "navigation" landmark so screen readers can differentiate them. Example: <nav aria-label="Primary">, <nav aria-label="Footer">.

mediumPage has 5 "navigation" landmarks but only 2 have distinct labels. Screen reader users cannot distinguish between them.WCAG 1.3.1
Element:
<!-- 5 navigation landmarks, 2 labeled -->
Sonde Fix Plan

Add unique aria-label or aria-labelledby to each "navigation" landmark so screen readers can differentiate them. Example: <nav aria-label="Primary">, <nav aria-label="Footer">.

mediumPage has 5 "navigation" landmarks but only 2 have distinct labels. Screen reader users cannot distinguish between them.WCAG 1.3.1
Element:
<!-- 5 navigation landmarks, 2 labeled -->
Sonde Fix Plan

Add unique aria-label or aria-labelledby to each "navigation" landmark so screen readers can differentiate them. Example: <nav aria-label="Primary">, <nav aria-label="Footer">.

mediumPage has 5 "navigation" landmarks but only 2 have distinct labels. Screen reader users cannot distinguish between them.WCAG 1.3.1
Element:
<!-- 5 navigation landmarks, 2 labeled -->
Sonde Fix Plan

Add unique aria-label or aria-labelledby to each "navigation" landmark so screen readers can differentiate them. Example: <nav aria-label="Primary">, <nav aria-label="Footer">.

mediumPage has 5 "navigation" landmarks but only 2 have distinct labels. Screen reader users cannot distinguish between them.WCAG 1.3.1
Element:
<!-- 5 navigation landmarks, 2 labeled -->
Sonde Fix Plan

Add unique aria-label or aria-labelledby to each "navigation" landmark so screen readers can differentiate them. Example: <nav aria-label="Primary">, <nav aria-label="Footer">.

mediumPage has 5 "navigation" landmarks but only 2 have distinct labels. Screen reader users cannot distinguish between them.WCAG 1.3.1
Element:
<!-- 5 navigation landmarks, 2 labeled -->
Sonde Fix Plan

Add unique aria-label or aria-labelledby to each "navigation" landmark so screen readers can differentiate them. Example: <nav aria-label="Primary">, <nav aria-label="Footer">.

mediumPage has 5 "navigation" landmarks but only 2 have distinct labels. Screen reader users cannot distinguish between them.WCAG 1.3.1
Element:
<!-- 5 navigation landmarks, 2 labeled -->
Sonde Fix Plan

Add unique aria-label or aria-labelledby to each "navigation" landmark so screen readers can differentiate them. Example: <nav aria-label="Primary">, <nav aria-label="Footer">.

mediumPage has 4 "navigation" landmarks but only 1 have distinct labels. Screen reader users cannot distinguish between them.WCAG 1.3.1
Element:
<!-- 4 navigation landmarks, 1 labeled -->
Sonde Fix Plan

Add unique aria-label or aria-labelledby to each "navigation" landmark so screen readers can differentiate them. Example: <nav aria-label="Primary">, <nav aria-label="Footer">.

mediumHeading levels should only increase by one: Fix any of the following: Heading order invalid
Page: /main
Element:
<h3><span>Tuesday,</span><span>April 28, 2026</span></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
Element:
<h4 class="cmp-title__text">Office of the Mayor</h4>
Sonde Fix Plan

Ensure the order of headings is semantically correct. See: https://www.w3.org/WAI/WCAG22/quickref/

mediumLandmarks should have a unique role or role/label/title (i.e. accessible name) combination: Fix any of the following: The landmark must have a unique aria-label, aria-labelledby, or title to make landmarks distinguishable
Element:
<nav id="primary-navigation" class="cmp-navigation">
Sonde Fix Plan

Ensure landmarks are unique. See: https://www.w3.org/WAI/WCAG22/quickref/

mediumHeading levels should only increase by one: Fix any of the following: Heading order invalid
Element:
<h4>112th Mayor of New York City</h4>
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
Element:
<h3 class="cmp-title__text">More on nyc.gov</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
Element:
<h3 class="cmp-title__text">Mailing address&nbsp;</h3>
Sonde Fix Plan

Ensure the order of headings is semantically correct. See: https://www.w3.org/WAI/WCAG22/quickref/

mediumLandmarks should have a unique role or role/label/title (i.e. accessible name) combination: Fix any of the following: The landmark must have a unique aria-label, aria-labelledby, or title to make landmarks distinguishable
Element:
<nav id="primary-navigation" class="cmp-navigation">
Sonde Fix Plan

Ensure landmarks are unique. See: https://www.w3.org/WAI/WCAG22/quickref/

mediumLandmarks should have a unique role or role/label/title (i.e. accessible name) combination: Fix any of the following: The landmark must have a unique aria-label, aria-labelledby, or title to make landmarks distinguishable
Element:
<nav id="primary-navigation" class="cmp-navigation">
Sonde Fix Plan

Ensure landmarks are unique. See: https://www.w3.org/WAI/WCAG22/quickref/

mediumHeading levels should only increase by one: Fix any of the following: Heading order invalid
Element:
<h4 class="cmp-title__text">Office of the Mayor</h4>
Sonde Fix Plan

Ensure the order of headings is semantically correct. See: https://www.w3.org/WAI/WCAG22/quickref/

mediumLandmarks should have a unique role or role/label/title (i.e. accessible name) combination: Fix any of the following: The landmark must have a unique aria-label, aria-labelledby, or title to make landmarks distinguishable
Element:
<nav id="primary-navigation" class="cmp-navigation">
Sonde Fix Plan

Ensure landmarks are unique. See: https://www.w3.org/WAI/WCAG22/quickref/

mediumHeading levels should only increase by one: Fix any of the following: Heading order invalid
Element:
<h4 class="cmp-title__text">Office of the Mayor</h4>
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
Element:
<h4 class="cmp-title__text">Office of the Mayor</h4>
Sonde Fix Plan

Ensure the order of headings is semantically correct. See: https://www.w3.org/WAI/WCAG22/quickref/

mediumLandmarks should have a unique role or role/label/title (i.e. accessible name) combination: Fix any of the following: The landmark must have a unique aria-label, aria-labelledby, or title to make landmarks distinguishable
Element:
<nav id="primary-navigation" class="cmp-navigation">
Sonde Fix Plan

Ensure landmarks are unique. See: https://www.w3.org/WAI/WCAG22/quickref/

mediumHeading levels should only increase by one: Fix any of the following: Heading order invalid
Element:
<h4 class="cmp-title__text">Office of the Mayor</h4>
Sonde Fix Plan

Ensure the order of headings is semantically correct. See: https://www.w3.org/WAI/WCAG22/quickref/

mediumLandmarks should have a unique role or role/label/title (i.e. accessible name) combination: Fix any of the following: The landmark must have a unique aria-label, aria-labelledby, or title to make landmarks distinguishable
Element:
<nav id="primary-navigation" class="cmp-navigation">
Sonde Fix Plan

Ensure landmarks are unique. See: https://www.w3.org/WAI/WCAG22/quickref/

mediumHeading levels should only increase by one: Fix any of the following: Heading order invalid
Element:
<h4 class="cmp-title__text">Office of the Mayor</h4>
Sonde Fix Plan

Ensure the order of headings is semantically correct. See: https://www.w3.org/WAI/WCAG22/quickref/

mediumLandmarks should have a unique role or role/label/title (i.e. accessible name) combination: Fix any of the following: The landmark must have a unique aria-label, aria-labelledby, or title to make landmarks distinguishable
Element:
<nav id="primary-navigation" class="cmp-navigation">
Sonde Fix Plan

Ensure landmarks are unique. See: https://www.w3.org/WAI/WCAG22/quickref/

mediumHeading levels should only increase by one: Fix any of the following: Heading order invalid
Element:
<h4 class="cmp-title__text">Office of the Mayor</h4>
Sonde Fix Plan

Ensure the order of headings is semantically correct. See: https://www.w3.org/WAI/WCAG22/quickref/

mediumLandmarks should have a unique role or role/label/title (i.e. accessible name) combination: Fix any of the following: The landmark must have a unique aria-label, aria-labelledby, or title to make landmarks distinguishable
Element:
<nav id="primary-navigation" class="cmp-navigation">
Sonde Fix Plan

Ensure landmarks are unique. See: https://www.w3.org/WAI/WCAG22/quickref/

mediumLandmarks should have a unique role or role/label/title (i.e. accessible name) combination: Fix any of the following: The landmark must have a unique aria-label, aria-labelledby, or title to make landmarks distinguishable
Element:
<nav id="primary-navigation" class="cmp-navigation">
Sonde Fix Plan

Ensure landmarks are unique. See: https://www.w3.org/WAI/WCAG22/quickref/

mediumHeading levels should only increase by one: Fix any of the following: Heading order invalid
Element:
<h4 class="cmp-title__text">Office of the Mayor</h4>
Sonde Fix Plan

Ensure the order of headings is semantically correct. See: https://www.w3.org/WAI/WCAG22/quickref/

mediumLandmarks should have a unique role or role/label/title (i.e. accessible name) combination: Fix any of the following: The landmark must have a unique aria-label, aria-labelledby, or title to make landmarks distinguishable
Element:
<nav id="primary-navigation" class="cmp-navigation">
Sonde Fix Plan

Ensure landmarks are unique. See: https://www.w3.org/WAI/WCAG22/quickref/

mediumHeading levels should only increase by one: Fix any of the following: Heading order invalid
Element:
<h4 class="cmp-title__text">Office of the Mayor</h4>
Sonde Fix Plan

Ensure the order of headings is semantically correct. See: https://www.w3.org/WAI/WCAG22/quickref/

mediumLink is distinguished from surrounding text only by color (link: rgb(5, 26, 219), text: rgb(0, 0, 0)). Users who cannot perceive color differences may not identify this as a link.WCAG 1.4.1
Element:
<a href="https://www.schools.nyc.gov/calendar"><u>View the public school calendar</u></a>
Sonde Fix Plan

Add a non-color visual indicator to links: underline (text-decoration: underline), border-bottom, increased font-weight, or a visible icon. The indicator must be present in the default state, not just on hover.

mediumLink is distinguished from surrounding text only by color (link: rgb(5, 26, 219), text: rgb(0, 0, 0)). Users who cannot perceive color differences may not identify this as a link.WCAG 1.4.1
Element:
<a href="https://www.nyc.gov/assets/dsny/forms/collection-schedule"><u>Check your collection schedule</u></a>
Sonde Fix Plan

Add a non-color visual indicator to links: underline (text-decoration: underline), border-bottom, increased font-weight, or a visible icon. The indicator must be present in the default state, not just on hover.

mediumLink is distinguished from surrounding text only by color (link: rgb(5, 26, 219), text: rgb(0, 0, 0)). Users who cannot perceive color differences may not identify this as a link.WCAG 1.4.1
Element:
<a href="https://www.nyc.gov/html/dot/html/motorist/alternate-side-parking.shtml"><u>View the full year alternate side parking calendar</u></a>
Sonde Fix Plan

Add a non-color visual indicator to links: underline (text-decoration: underline), border-bottom, increased font-weight, or a visible icon. The indicator must be present in the default state, not just on hover.

medium"Your government" is visually at position 22 but receives focus at position 14 (drift: 8).WCAG 2.4.3
Element:
<a>Your government</a>
Sonde Fix Plan

Align DOM order with visual presentation, or use tabIndex to match the visual sequence.

medium"Website feedback" is visually at position 12 but receives focus at position 20 (drift: 8).WCAG 2.4.3
Element:
<a>Website feedback</a>
Sonde Fix Plan

Align DOM order with visual presentation, or use tabIndex to match the visual sequence.

mediumBroken link: https://www.nyc.gov/mayors-office/config#mainContent returned status 404 Not Found after 1 attempts
Element:
<a href="https://www.nyc.gov/mayors-office/config#mainContent">Skip to main content</a>
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.

mediumElement overflows viewport by 302px at 320px width.WCAG 1.4.10
Element:
<div class="teaser cmp-teaser--event"><div class="cmp-news-carousel__item">
        <div class="video-container">
          <button type="button" class="play" aria-label="Play Watch the press conferen
Sonde Fix Plan

Set max-width: 100% or use overflow-wrap to prevent horizontal overflow.

mediumContent clipped by 27px 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:
<span class="carousel-annoucer sr-only" aria-atomic="true" aria-live="polite">showing slide&nbsp;1 of 6</span>
Sonde Fix Plan

Avoid fixed-height containers with overflow: hidden for text content. Use min-height or allow containers to grow.

mediumContent clipped by 61px 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:
<span id="carousel-title-gCra0gltaO" class="carousel-title sr-only" aria-hidden="true">latest news</span>
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 317px at 320px width.WCAG 1.4.10
Element:
<div class="carousel-slide-content"><div class="carousel-slide-content--desc"><div class="teaser cmp-teaser--event"><div class="cmp-news-carousel__item">
        <div class="video-container">
        
Sonde Fix Plan

Set max-width: 100% or use overflow-wrap to prevent horizontal overflow.

mediumElement overflows viewport by 302px at 320px width.WCAG 1.4.10
Element:
<button type="button" class="play" aria-label="Play Watch the press conference">
            <img class="video-thumbnail" src="/content/dam/nycgov/mayors-office/images/press-releases/2026/04/fifa-worl
Sonde Fix Plan

Set max-width: 100% or use overflow-wrap to prevent horizontal overflow.

mediumElement overflows viewport by 216px at 320px width.WCAG 1.4.10
Element:
<svg xmlns="http://www.w3.org/2000/svg" width="130" height="130" viewBox="0 0 140 120" fill="none" aria-hidden="true">
              <g fill="#fff">
                <path d="M58 77.054c0 1.535 1.659 2
Sonde Fix Plan

Set max-width: 100% or use overflow-wrap to prevent horizontal overflow.

mediumElement overflows viewport by 302px at 320px width.WCAG 1.4.10
Element:
<div class="cmp-news-carousel__item">
        <div class="video-container">
          <button type="button" class="play" aria-label="Play Watch the press conference">
            <img class="video-thu
Sonde Fix Plan

Set max-width: 100% or use overflow-wrap to prevent horizontal overflow.

mediumElement overflows viewport by 317px at 320px width.WCAG 1.4.10
Element:
<li class="carousel-slide " data-si="1"><div class="carousel-slide-content"><div class="carousel-slide-content--desc"><div class="teaser cmp-teaser--event"><div class="cmp-news-carousel__item">
      
Sonde Fix Plan

Set max-width: 100% or use overflow-wrap to prevent horizontal overflow.

mediumElement overflows viewport by 189px at 320px width.WCAG 1.4.10
Element:
<g fill="#fff">
                <path d="M58 77.054c0 1.535 1.659 2.498 2.992 1.736l21.97-12.553c1.343-.768 1.343-2.706 0-3.473L60.991 50.21c-1.333-.762-2.992.2-2.992 1.736z"></path>
                <
Sonde Fix Plan

Set max-width: 100% or use overflow-wrap to prevent horizontal overflow.

mediumElement overflows viewport by 302px at 320px width.WCAG 1.4.10
Element:
<img class="video-thumbnail" src="/content/dam/nycgov/mayors-office/images/press-releases/2026/04/fifa-world-cup-2026-nynj-host--1.jpg" alt="">
Sonde Fix Plan

Set max-width: 100% or use overflow-wrap to prevent horizontal overflow.

mediumElement overflows viewport by 302px at 320px width.WCAG 1.4.10
Element:
<div class="video-container">
          <button type="button" class="play" aria-label="Play Watch the press conference">
            <img class="video-thumbnail" src="/content/dam/nycgov/mayors-office
Sonde Fix Plan

Set max-width: 100% or use overflow-wrap to prevent horizontal overflow.

mediumElement overflows viewport by 317px at 320px width.WCAG 1.4.10
Element:
<div class="carousel-slide-content--desc"><div class="teaser cmp-teaser--event"><div class="cmp-news-carousel__item">
        <div class="video-container">
          <button type="button" class="play"
Sonde Fix Plan

Set max-width: 100% or use overflow-wrap to prevent horizontal overflow.

mediumElement overflows viewport by 186px at 320px width.WCAG 1.4.10
Element:
<div class="grecaptcha-badge" data-style="bottomright" style="width: 256px; height: 60px; display: block; transition: right 0.3s; position: fixed; bottom: 14px; right: -186px; box-shadow: gray 0px 0px
Sonde Fix Plan

Set max-width: 100% or use overflow-wrap to prevent horizontal overflow.

mediumElement overflows viewport by 186px at 320px width.WCAG 1.4.10
Element:
<iframe title="reCAPTCHA" width="256" height="60" role="presentation" name="a-hwh5npsixfd4" frameborder="0" scrolling="no" sandbox="allow-forms allow-popups allow-same-origin allow-scripts allow-top-n
Sonde Fix Plan

Set max-width: 100% or use overflow-wrap to prevent horizontal overflow.

mediumElement overflows viewport by 186px at 320px width.WCAG 1.4.10
Element:
<div class="grecaptcha-error"></div>
Sonde Fix Plan

Set max-width: 100% or use overflow-wrap to prevent horizontal overflow.

mediumElement overflows viewport by 186px at 320px width.WCAG 1.4.10
Element:
<div class="grecaptcha-logo"><iframe title="reCAPTCHA" width="256" height="60" role="presentation" name="a-hwh5npsixfd4" frameborder="0" scrolling="no" sandbox="allow-forms allow-popups allow-same-ori
Sonde Fix Plan

Set max-width: 100% or use overflow-wrap to prevent horizontal overflow.

mediumContent clipped by 134px 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:
<span class="cmp-link__screen-reader-only">opens in a new tab</span>
Sonde Fix Plan

Avoid fixed-height containers with overflow: hidden for text content. Use min-height or allow containers to grow.

mediumContent clipped by 40px 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="cmp-page__skiptomaincontent-link" style="position: absolute" href="#mainContent">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.

mediumContent clipped by 25px 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:
<span id="filter-header-GwM6VCW4vt">News filter control</span>
Sonde Fix Plan

Avoid fixed-height containers with overflow: hidden for text content. Use min-height or allow containers to grow.

mediumContent clipped by 42px 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:
<span class="sr-only">NYC</span>
Sonde Fix Plan

Avoid fixed-height containers with overflow: hidden for text content. Use min-height or allow containers to grow.

mediumContent clipped by 114px 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="modal__pane">
      <div class="modal__header">
        <div class="modal__header-content">
          <button type="button" class="modal__close-button" data-close-modal="" aria-controls="g
Sonde Fix Plan

Avoid fixed-height containers with overflow: hidden for text content. Use min-height or allow containers to grow.

mediumContent clipped by 27px 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:
<label for="filter" class="sr-only">Filter languages</label>
Sonde Fix Plan

Avoid fixed-height containers with overflow: hidden for text content. Use min-height or allow containers to grow.

lowDeep focus region: navigation "Footer" has 16 tab stops before focus escapes. Consider adding skip navigation or grouping with arrow keys.WCAG 2.4.1
Element:
<div role="navigation">Footer</div>
Sonde Fix Plan

Add a "skip to content" link or use roving tabindex to reduce the number of Tab stops.

lowBroken link: https://new.mta.info/ returned status 403 Forbidden after 1 attempts
Page: /main
Element:
<a href="https://new.mta.info/">Check transit alerts</a>
lowBroken link: http://www.twitter.com/nycmayorsoffice returned status 520 <none> after 1 attempts
Element:
<a href="http://www.twitter.com/nycmayorsoffice"></a>
lowBroken link: https://a860-openrecords.nyc.gov/ returned status 403 Forbidden after 1 attempts
Element:
<a href="https://a860-openrecords.nyc.gov/">Freedom of Information Law (FOIL) tracker</a>
lowBroken link: http://www.twitter.com/nycmayorsoffice returned status 520 <none> after 1 attempts
Element:
<a href="http://www.twitter.com/nycmayorsoffice"></a>
lowBroken link: http://www.twitter.com/nycmayorsoffice returned status 520 <none> after 1 attempts
Element:
<a href="http://www.twitter.com/nycmayorsoffice"></a>
lowBroken link: http://www.twitter.com/nycmayorsoffice returned status 520 <none> after 1 attempts
Element:
<a href="http://www.twitter.com/nycmayorsoffice"></a>
lowBroken link: http://www.twitter.com/nycmayorsoffice returned status 520 <none> after 1 attempts
Element:
<a href="http://www.twitter.com/nycmayorsoffice"></a>
lowBroken link: http://www.twitter.com/nycmayorsoffice returned status 520 <none> after 1 attempts
Element:
<a href="http://www.twitter.com/nycmayorsoffice"></a>
lowBroken link: http://www.twitter.com/nycmayorsoffice returned status 520 <none> after 1 attempts
Element:
<a href="http://www.twitter.com/nycmayorsoffice"></a>
lowBroken link: http://www.twitter.com/nycmayorsoffice returned status 520 <none> after 1 attempts
Element:
<a href="http://www.twitter.com/nycmayorsoffice"></a>
lowBroken link: http://www.twitter.com/nycmayorsoffice returned status 520 <none> after 1 attempts
Element:
<a href="http://www.twitter.com/nycmayorsoffice"></a>
lowBroken link: http://www.twitter.com/nycmayorsoffice returned status 520 <none> after 1 attempts
Element:
<a href="http://www.twitter.com/nycmayorsoffice"></a>

Best Page Fix Opportunities

/mayors-office23findings
criticalInsufficient color contrast: 1.00:1 (required: 3:1 for large text). Foreground: rgb(255, 255, 255), background: rgb(255, 255, 255). Text: "Welcome to the Mayor’s Office"WCAG 1.4.3
Element:
<h1 class="nyc-hero__title" data-heading-only="true" data-has-bread="false">
            Welcome to the Mayor’s Office
          </h1>
Sonde Fix Plan

Current ratio: 1.00:1 (need 3:1). Change foreground from #ffffff to #959494 (ratio: 3.0:1).

highImage has no accessible name in the accessibility tree. Screen readers will skip or announce it generically.WCAG 1.1.1
Element:
<!-- a11y: role="image" desc="Zohran Mamdani" -->
Sonde Fix Plan

Add alt text to the image. If decorative, mark with role="presentation" or alt="". WCAG 1.1.1 requires text alternatives for non-text content.

highImage has no accessible name in the accessibility tree. Screen readers will skip or announce it generically.WCAG 1.1.1
Element:
<!-- a11y: role="image" -->
Sonde Fix Plan

Add alt text to the image. If decorative, mark with role="presentation" or alt="". WCAG 1.1.1 requires text alternatives for non-text content.

highFocus jumps backward from "Read press release" to "Read press release" (visual distance: 452px). No explicit tabIndex — likely a DOM order issue.WCAG 2.4.3
Element:
<a>Read press release</a>
Sonde Fix Plan

Reorder elements in the DOM to match the visual layout.

highMissing Content-Security-Policy header
Sonde Fix Plan

Add a Content-Security-Policy header with appropriate directives Add Referrer-Policy: strict-origin-when-cross-origin or no-referrer

mediumPage has 4 "navigation" landmarks but only 1 have distinct labels. Screen reader users cannot distinguish between them.WCAG 1.3.1
Element:
<!-- 4 navigation landmarks, 1 labeled -->
Sonde Fix Plan

Add unique aria-label or aria-labelledby to each "navigation" landmark so screen readers can differentiate them. Example: <nav aria-label="Primary">, <nav aria-label="Footer">.

mediumHeading levels should only increase by one: Fix any of the following: Heading order invalid
Element:
<h4 class="cmp-title__text">Office of the Mayor</h4>
Sonde Fix Plan

Ensure the order of headings is semantically correct. See: https://www.w3.org/WAI/WCAG22/quickref/

mediumLandmarks should have a unique role or role/label/title (i.e. accessible name) combination: Fix any of the following: The landmark must have a unique aria-label, aria-labelledby, or title to make landmarks distinguishable
Element:
<nav id="primary-navigation" class="cmp-navigation">
Sonde Fix Plan

Ensure landmarks are unique. See: https://www.w3.org/WAI/WCAG22/quickref/

mediumHeading levels should only increase by one: Fix any of the following: Heading order invalid
Element:
<h4>112th Mayor of New York City</h4>
Sonde Fix Plan

Ensure the order of headings is semantically correct. See: https://www.w3.org/WAI/WCAG22/quickref/

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.

mediumElement overflows viewport by 302px at 320px width.WCAG 1.4.10
Element:
<div class="teaser cmp-teaser--event"><div class="cmp-news-carousel__item">
        <div class="video-container">
          <button type="button" class="play" aria-label="Play Watch the press conferen
Sonde Fix Plan

Set max-width: 100% or use overflow-wrap to prevent horizontal overflow.

mediumContent clipped by 27px 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:
<span class="carousel-annoucer sr-only" aria-atomic="true" aria-live="polite">showing slide&nbsp;1 of 6</span>
Sonde Fix Plan

Avoid fixed-height containers with overflow: hidden for text content. Use min-height or allow containers to grow.

mediumContent clipped by 61px 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:
<span id="carousel-title-gCra0gltaO" class="carousel-title sr-only" aria-hidden="true">latest news</span>
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 317px at 320px width.WCAG 1.4.10
Element:
<div class="carousel-slide-content"><div class="carousel-slide-content--desc"><div class="teaser cmp-teaser--event"><div class="cmp-news-carousel__item">
        <div class="video-container">
        
Sonde Fix Plan

Set max-width: 100% or use overflow-wrap to prevent horizontal overflow.

mediumElement overflows viewport by 302px at 320px width.WCAG 1.4.10
Element:
<button type="button" class="play" aria-label="Play Watch the press conference">
            <img class="video-thumbnail" src="/content/dam/nycgov/mayors-office/images/press-releases/2026/04/fifa-worl
Sonde Fix Plan

Set max-width: 100% or use overflow-wrap to prevent horizontal overflow.

mediumElement overflows viewport by 216px at 320px width.WCAG 1.4.10
Element:
<svg xmlns="http://www.w3.org/2000/svg" width="130" height="130" viewBox="0 0 140 120" fill="none" aria-hidden="true">
              <g fill="#fff">
                <path d="M58 77.054c0 1.535 1.659 2
Sonde Fix Plan

Set max-width: 100% or use overflow-wrap to prevent horizontal overflow.

mediumElement overflows viewport by 302px at 320px width.WCAG 1.4.10
Element:
<div class="cmp-news-carousel__item">
        <div class="video-container">
          <button type="button" class="play" aria-label="Play Watch the press conference">
            <img class="video-thu
Sonde Fix Plan

Set max-width: 100% or use overflow-wrap to prevent horizontal overflow.

mediumElement overflows viewport by 317px at 320px width.WCAG 1.4.10
Element:
<li class="carousel-slide " data-si="1"><div class="carousel-slide-content"><div class="carousel-slide-content--desc"><div class="teaser cmp-teaser--event"><div class="cmp-news-carousel__item">
      
Sonde Fix Plan

Set max-width: 100% or use overflow-wrap to prevent horizontal overflow.

mediumElement overflows viewport by 189px at 320px width.WCAG 1.4.10
Element:
<g fill="#fff">
                <path d="M58 77.054c0 1.535 1.659 2.498 2.992 1.736l21.97-12.553c1.343-.768 1.343-2.706 0-3.473L60.991 50.21c-1.333-.762-2.992.2-2.992 1.736z"></path>
                <
Sonde Fix Plan

Set max-width: 100% or use overflow-wrap to prevent horizontal overflow.

mediumElement overflows viewport by 302px at 320px width.WCAG 1.4.10
Element:
<img class="video-thumbnail" src="/content/dam/nycgov/mayors-office/images/press-releases/2026/04/fifa-world-cup-2026-nynj-host--1.jpg" alt="">
Sonde Fix Plan

Set max-width: 100% or use overflow-wrap to prevent horizontal overflow.

mediumElement overflows viewport by 302px at 320px width.WCAG 1.4.10
Element:
<div class="video-container">
          <button type="button" class="play" aria-label="Play Watch the press conference">
            <img class="video-thumbnail" src="/content/dam/nycgov/mayors-office
Sonde Fix Plan

Set max-width: 100% or use overflow-wrap to prevent horizontal overflow.

mediumElement overflows viewport by 317px at 320px width.WCAG 1.4.10
Element:
<div class="carousel-slide-content--desc"><div class="teaser cmp-teaser--event"><div class="cmp-news-carousel__item">
        <div class="video-container">
          <button type="button" class="play"
Sonde Fix Plan

Set max-width: 100% or use overflow-wrap to prevent horizontal overflow.

lowBroken link: http://www.twitter.com/nycmayorsoffice returned status 520 <none> after 1 attempts
Element:
<a href="http://www.twitter.com/nycmayorsoffice"></a>
/main17findings
criticalInsufficient color contrast: 1.14:1 (required: 3:1 for large text). Foreground: rgb(255, 255, 255), background: rgb(226, 243, 255). Text: "Find what you need on nyc.gov"WCAG 1.4.3
Element:
<span class="main-heading--subhead">Find what you need on nyc.gov</span>
Sonde Fix Plan

Current ratio: 1.14:1 (need 3:1). Change foreground from #ffffff to #8b8b8b (ratio: 3.0:1). Or change background from #e2f3ff to #ffffff.

criticalInsufficient color contrast: 1.00:1 (required: 4.5:1 for normal text). Foreground: rgb(255, 255, 255), background: rgb(255, 255, 255). Text: "What's happening?"WCAG 1.4.3
Element:
<span class="small-paragraph">What's happening?</span>
Sonde Fix Plan

Current ratio: 1.00:1 (need 4.5:1). Change foreground from #ffffff to #777676 (ratio: 4.5:1).

criticalInsufficient color contrast: 1.00:1 (required: 4.5:1 for normal text). Foreground: rgb(255, 255, 255), background: rgb(255, 255, 255). Text: "Posted April 16, 2026"WCAG 1.4.3
Element:
<p class="cmp-teaser__pretitle">Posted April 16, 2026</p>
Sonde Fix Plan

Current ratio: 1.00:1 (need 4.5:1). Change foreground from #ffffff to #777676 (ratio: 4.5:1).

criticalInsufficient color contrast: 1.00:1 (required: 4.5:1 for normal text). Foreground: rgb(255, 255, 255), background: rgb(255, 255, 255). Text: "Cast a ballot during the early voting period, April 18th– Ap"WCAG 1.4.3
Element:
<p>Cast a ballot during the early voting period, April 18th– April 26th, or on Election Day, Tuesday, April 28th.</p>
Sonde Fix Plan

Current ratio: 1.00:1 (need 4.5:1). Change foreground from #ffffff to #777676 (ratio: 4.5:1).

criticalInsufficient color contrast: 1.00:1 (required: 3:1 for large text). Foreground: rgb(255, 255, 255), background: rgb(255, 255, 255). Text: "Special Election"WCAG 1.4.3
Element:
<span class="cmp-accordion__title">Special Election</span>
Sonde Fix Plan

Current ratio: 1.00:1 (need 3:1). Change foreground from #ffffff to #959494 (ratio: 3.0:1).

highImage has no accessible name in the accessibility tree. Screen readers will skip or announce it generically.WCAG 1.1.1
Element:
<!-- a11y: role="image" -->
Sonde Fix Plan

Add alt text to the image. If decorative, mark with role="presentation" or alt="". WCAG 1.1.1 requires text alternatives for non-text content.

highImage has no accessible name in the accessibility tree. Screen readers will skip or announce it generically.WCAG 1.1.1
Element:
<!-- a11y: role="image" desc="Voters casting ballots in polling station" -->
Sonde Fix Plan

Add alt text to the image. If decorative, mark with role="presentation" or alt="". WCAG 1.1.1 requires text alternatives for non-text content.

highFocus jumps backward from "Learn to Ride" to "Story Hour" (visual distance: 598px). No explicit tabIndex — likely a DOM order issue.WCAG 2.4.3
Element:
<a>Story Hour</a>
Sonde Fix Plan

Reorder elements in the DOM to match the visual layout.

highFocus jumps backward from "Read press release" to "Read press release" (visual distance: 452px). No explicit tabIndex — likely a DOM order issue.WCAG 2.4.3
Element:
<a>Read press release</a>
Sonde Fix Plan

Reorder elements in the DOM to match the visual layout.

highMissing Content-Security-Policy header
Page: /main
Sonde Fix Plan

Add a Content-Security-Policy header with appropriate directives Add Referrer-Policy: strict-origin-when-cross-origin or no-referrer

mediumPage has 2 "navigation" landmarks but only 1 have distinct labels. Screen reader users cannot distinguish between them.WCAG 1.3.1
Element:
<!-- 2 navigation landmarks, 1 labeled -->
Sonde Fix Plan

Add unique aria-label or aria-labelledby to each "navigation" landmark so screen readers can differentiate them. Example: <nav aria-label="Primary">, <nav aria-label="Footer">.

mediumHeading levels should only increase by one: Fix any of the following: Heading order invalid
Page: /main
Element:
<h3><span>Tuesday,</span><span>April 28, 2026</span></h3>
Sonde Fix Plan

Ensure the order of headings is semantically correct. See: https://www.w3.org/WAI/WCAG22/quickref/

mediumLink is distinguished from surrounding text only by color (link: rgb(5, 26, 219), text: rgb(0, 0, 0)). Users who cannot perceive color differences may not identify this as a link.WCAG 1.4.1
Element:
<a href="https://www.schools.nyc.gov/calendar"><u>View the public school calendar</u></a>
Sonde Fix Plan

Add a non-color visual indicator to links: underline (text-decoration: underline), border-bottom, increased font-weight, or a visible icon. The indicator must be present in the default state, not just on hover.

mediumLink is distinguished from surrounding text only by color (link: rgb(5, 26, 219), text: rgb(0, 0, 0)). Users who cannot perceive color differences may not identify this as a link.WCAG 1.4.1
Element:
<a href="https://www.nyc.gov/assets/dsny/forms/collection-schedule"><u>Check your collection schedule</u></a>
Sonde Fix Plan

Add a non-color visual indicator to links: underline (text-decoration: underline), border-bottom, increased font-weight, or a visible icon. The indicator must be present in the default state, not just on hover.

mediumLink is distinguished from surrounding text only by color (link: rgb(5, 26, 219), text: rgb(0, 0, 0)). Users who cannot perceive color differences may not identify this as a link.WCAG 1.4.1
Element:
<a href="https://www.nyc.gov/html/dot/html/motorist/alternate-side-parking.shtml"><u>View the full year alternate side parking calendar</u></a>
Sonde Fix Plan

Add a non-color visual indicator to links: underline (text-decoration: underline), border-bottom, increased font-weight, or a visible icon. The indicator must be present in the default state, not just on hover.

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://new.mta.info/ returned status 403 Forbidden after 1 attempts
Page: /main
Element:
<a href="https://new.mta.info/">Check transit alerts</a>
/mayors-office/contact-the-mayor13findings
highImage has no accessible name in the accessibility tree. Screen readers will skip or announce it generically.WCAG 1.1.1
Element:
<!-- a11y: role="image" -->
Sonde Fix Plan

Add alt text to the image. If decorative, mark with role="presentation" or alt="". WCAG 1.1.1 requires text alternatives for non-text content.

highFocus jumps backward from "Privacy Policy" to "Terms of Service" (visual distance: 447px). No explicit tabIndex — likely a DOM order issue.WCAG 2.4.3
Element:
<a>Terms of Service</a>
Sonde Fix Plan

Reorder elements in the DOM to match the visual layout.

highMissing Strict-Transport-Security header (HSTS)
Sonde Fix Plan

Add Strict-Transport-Security header with max-age of at least 31536000 Add X-Frame-Options: DENY or SAMEORIGIN Add Referrer-Policy: strict-origin-when-cross-origin or no-referrer

mediumPage has 4 "navigation" landmarks but only 1 have distinct labels. Screen reader users cannot distinguish between them.WCAG 1.3.1
Element:
<!-- 4 navigation landmarks, 1 labeled -->
Sonde Fix Plan

Add unique aria-label or aria-labelledby to each "navigation" landmark so screen readers can differentiate them. Example: <nav aria-label="Primary">, <nav aria-label="Footer">.

mediumHeading levels should only increase by one: Fix any of the following: Heading order invalid
Element:
<h3 class="cmp-title__text">Mailing address&nbsp;</h3>
Sonde Fix Plan

Ensure the order of headings is semantically correct. See: https://www.w3.org/WAI/WCAG22/quickref/

mediumLandmarks should have a unique role or role/label/title (i.e. accessible name) combination: Fix any of the following: The landmark must have a unique aria-label, aria-labelledby, or title to make landmarks distinguishable
Element:
<nav id="primary-navigation" class="cmp-navigation">
Sonde Fix Plan

Ensure landmarks are unique. See: https://www.w3.org/WAI/WCAG22/quickref/

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.

mediumElement overflows viewport by 186px at 320px width.WCAG 1.4.10
Element:
<div class="grecaptcha-badge" data-style="bottomright" style="width: 256px; height: 60px; display: block; transition: right 0.3s; position: fixed; bottom: 14px; right: -186px; box-shadow: gray 0px 0px
Sonde Fix Plan

Set max-width: 100% or use overflow-wrap to prevent horizontal overflow.

mediumElement overflows viewport by 186px at 320px width.WCAG 1.4.10
Element:
<iframe title="reCAPTCHA" width="256" height="60" role="presentation" name="a-hwh5npsixfd4" frameborder="0" scrolling="no" sandbox="allow-forms allow-popups allow-same-origin allow-scripts allow-top-n
Sonde Fix Plan

Set max-width: 100% or use overflow-wrap to prevent horizontal overflow.

mediumElement overflows viewport by 186px at 320px width.WCAG 1.4.10
Element:
<div class="grecaptcha-error"></div>
Sonde Fix Plan

Set max-width: 100% or use overflow-wrap to prevent horizontal overflow.

mediumElement overflows viewport by 186px at 320px width.WCAG 1.4.10
Element:
<div class="grecaptcha-logo"><iframe title="reCAPTCHA" width="256" height="60" role="presentation" name="a-hwh5npsixfd4" frameborder="0" scrolling="no" sandbox="allow-forms allow-popups allow-same-ori
Sonde Fix Plan

Set max-width: 100% or use overflow-wrap to prevent horizontal overflow.

lowBroken link: https://a860-openrecords.nyc.gov/ returned status 403 Forbidden after 1 attempts
Element:
<a href="https://a860-openrecords.nyc.gov/">Freedom of Information Law (FOIL) tracker</a>
lowBroken link: http://www.twitter.com/nycmayorsoffice returned status 520 <none> after 1 attempts
Element:
<a href="http://www.twitter.com/nycmayorsoffice"></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).