Accessibility Health Check
https://nyc.gov
Excellent
https://daylight.sonde.life/usgov/nyc-gov/
Excellent
Executive Summary
Top Findings
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
<span class="main-heading--subhead">Find what you need on nyc.gov</span>
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
<span class="small-paragraph">What's happening?</span>
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
<p class="cmp-teaser__pretitle">Posted April 16, 2026</p>
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
<p>Cast a ballot during the early voting period, April 18th– April 26th, or on Election Day, Tuesday, April 28th.</p>
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
<span class="cmp-accordion__title">Special Election</span>
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
<h1 class="nyc-hero__title" data-heading-only="true" data-has-bread="false">
Welcome to the Mayor’s Office
</h1>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
<!-- a11y: role="image" -->
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
<!-- a11y: role="image" desc="Voters casting ballots in polling station" -->
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
<!-- a11y: role="image" desc="Zohran Mamdani" -->
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
<!-- a11y: role="image" -->
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
<!-- a11y: role="image" -->
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
<!-- a11y: role="image" -->
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
<!-- a11y: role="image" -->
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
<!-- a11y: role="image" -->
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
<!-- a11y: role="image" -->
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
<!-- a11y: role="image" -->
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
<!-- a11y: role="image" -->
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
<!-- a11y: role="image" -->
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
<!-- a11y: role="image" -->
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
<!-- a11y: role="image" -->
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
<span class="cmp-language-navigation__action-button--language" aria-hidden="true">English</span>
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
<a>Story Hour</a>
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
<a>Read press release</a>
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
<a>Read press release</a>
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
<a>Terms of Service</a>
Reorder elements in the DOM to match the visual layout.
highMissing Content-Security-Policy header
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
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
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)
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
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
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
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
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
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
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
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
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
<!-- 2 navigation landmarks, 1 labeled -->
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
<!-- 4 navigation landmarks, 1 labeled -->
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
<!-- 2 navigation landmarks, 1 labeled -->
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
<!-- 4 navigation landmarks, 1 labeled -->
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
<!-- 4 navigation landmarks, 1 labeled -->
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
<!-- 5 navigation landmarks, 2 labeled -->
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
<!-- 5 navigation landmarks, 2 labeled -->
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
<!-- 5 navigation landmarks, 2 labeled -->
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
<!-- 5 navigation landmarks, 2 labeled -->
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
<!-- 5 navigation landmarks, 2 labeled -->
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
<!-- 5 navigation landmarks, 2 labeled -->
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
<!-- 4 navigation landmarks, 1 labeled -->
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
<h3><span>Tuesday,</span><span>April 28, 2026</span></h3>
Ensure the order of headings is semantically correct. See: https://www.w3.org/WAI/WCAG22/quickref/
mediumHeading levels should only increase by one: Fix any of the following: Heading order invalid
<h4 class="cmp-title__text">Office of the Mayor</h4>
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
<nav id="primary-navigation" class="cmp-navigation">
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
<h4>112th Mayor of New York City</h4>
Ensure the order of headings is semantically correct. See: https://www.w3.org/WAI/WCAG22/quickref/
mediumHeading levels should only increase by one: Fix any of the following: Heading order invalid
<h3 class="cmp-title__text">More on nyc.gov</h3>
Ensure the order of headings is semantically correct. See: https://www.w3.org/WAI/WCAG22/quickref/
mediumHeading levels should only increase by one: Fix any of the following: Heading order invalid
<h3 class="cmp-title__text">Mailing address </h3>
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
<nav id="primary-navigation" class="cmp-navigation">
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
<nav id="primary-navigation" class="cmp-navigation">
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
<h4 class="cmp-title__text">Office of the Mayor</h4>
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
<nav id="primary-navigation" class="cmp-navigation">
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
<h4 class="cmp-title__text">Office of the Mayor</h4>
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
<h4 class="cmp-title__text">Office of the Mayor</h4>
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
<nav id="primary-navigation" class="cmp-navigation">
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
<h4 class="cmp-title__text">Office of the Mayor</h4>
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
<nav id="primary-navigation" class="cmp-navigation">
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
<h4 class="cmp-title__text">Office of the Mayor</h4>
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
<nav id="primary-navigation" class="cmp-navigation">
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
<h4 class="cmp-title__text">Office of the Mayor</h4>
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
<nav id="primary-navigation" class="cmp-navigation">
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
<nav id="primary-navigation" class="cmp-navigation">
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
<h4 class="cmp-title__text">Office of the Mayor</h4>
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
<nav id="primary-navigation" class="cmp-navigation">
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
<h4 class="cmp-title__text">Office of the Mayor</h4>
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
<a href="https://www.schools.nyc.gov/calendar"><u>View the public school calendar</u></a>
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
<a href="https://www.nyc.gov/assets/dsny/forms/collection-schedule"><u>Check your collection schedule</u></a>
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
<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>
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
<a>Your government</a>
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
<a>Website feedback</a>
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
<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
Add at least two of: site navigation (<nav>), search functionality (input[type="search"] or role="search"), a sitemap link, breadcrumb navigation, or a table of contents.
mediumPage has only one navigation mechanism (navigation). WCAG requires at least two ways to locate a page within a set of pages.WCAG 2.4.5
Add at least two of: site navigation (<nav>), search functionality (input[type="search"] or role="search"), a sitemap link, breadcrumb navigation, or a table of contents.
mediumPage has only one navigation mechanism (navigation). WCAG requires at least two ways to locate a page within a set of pages.WCAG 2.4.5
Add at least two of: site navigation (<nav>), search functionality (input[type="search"] or role="search"), a sitemap link, breadcrumb navigation, or a table of contents.
mediumPage has only one navigation mechanism (navigation). WCAG requires at least two ways to locate a page within a set of pages.WCAG 2.4.5
Add at least two of: site navigation (<nav>), search functionality (input[type="search"] or role="search"), a sitemap link, breadcrumb navigation, or a table of contents.
mediumPage has only one navigation mechanism (navigation). WCAG requires at least two ways to locate a page within a set of pages.WCAG 2.4.5
Add at least two of: site navigation (<nav>), search functionality (input[type="search"] or role="search"), a sitemap link, breadcrumb navigation, or a table of contents.
mediumPage has only one navigation mechanism (navigation). WCAG requires at least two ways to locate a page within a set of pages.WCAG 2.4.5
Add at least two of: site navigation (<nav>), search functionality (input[type="search"] or role="search"), a sitemap link, breadcrumb navigation, or a table of contents.
mediumElement overflows viewport by 302px at 320px width.WCAG 1.4.10
<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 conferenSet 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
<span class="carousel-annoucer sr-only" aria-atomic="true" aria-live="polite">showing slide 1 of 6</span>
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
<span id="carousel-title-gCra0gltaO" class="carousel-title sr-only" aria-hidden="true">latest news</span>
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
<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">
Set max-width: 100% or use overflow-wrap to prevent horizontal overflow.
mediumElement overflows viewport by 302px at 320px width.WCAG 1.4.10
<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-worlSet max-width: 100% or use overflow-wrap to prevent horizontal overflow.
mediumElement overflows viewport by 216px at 320px width.WCAG 1.4.10
<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 2Set max-width: 100% or use overflow-wrap to prevent horizontal overflow.
mediumElement overflows viewport by 302px at 320px width.WCAG 1.4.10
<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-thuSet max-width: 100% or use overflow-wrap to prevent horizontal overflow.
mediumElement overflows viewport by 317px at 320px width.WCAG 1.4.10
<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">
Set max-width: 100% or use overflow-wrap to prevent horizontal overflow.
mediumElement overflows viewport by 189px at 320px width.WCAG 1.4.10
<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>
<Set max-width: 100% or use overflow-wrap to prevent horizontal overflow.
mediumElement overflows viewport by 302px at 320px width.WCAG 1.4.10
<img class="video-thumbnail" src="/content/dam/nycgov/mayors-office/images/press-releases/2026/04/fifa-world-cup-2026-nynj-host--1.jpg" alt="">
Set max-width: 100% or use overflow-wrap to prevent horizontal overflow.
mediumElement overflows viewport by 302px at 320px width.WCAG 1.4.10
<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-officeSet max-width: 100% or use overflow-wrap to prevent horizontal overflow.
mediumElement overflows viewport by 317px at 320px width.WCAG 1.4.10
<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"Set max-width: 100% or use overflow-wrap to prevent horizontal overflow.
mediumElement overflows viewport by 186px at 320px width.WCAG 1.4.10
<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
Set max-width: 100% or use overflow-wrap to prevent horizontal overflow.
mediumElement overflows viewport by 186px at 320px width.WCAG 1.4.10
<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
Set max-width: 100% or use overflow-wrap to prevent horizontal overflow.
mediumElement overflows viewport by 186px at 320px width.WCAG 1.4.10
<div class="grecaptcha-error"></div>
Set max-width: 100% or use overflow-wrap to prevent horizontal overflow.
mediumElement overflows viewport by 186px at 320px width.WCAG 1.4.10
<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
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
<span class="cmp-link__screen-reader-only">opens in a new tab</span>
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
<a class="cmp-page__skiptomaincontent-link" style="position: absolute" href="#mainContent">Skip to main content</a>
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
<span id="filter-header-GwM6VCW4vt">News filter control</span>
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
<span class="sr-only">NYC</span>
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
<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="gAvoid 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
<label for="filter" class="sr-only">Filter languages</label>
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
<div role="navigation">Footer</div>
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
<a href="https://new.mta.info/">Check transit alerts</a>
lowBroken link: http://www.twitter.com/nycmayorsoffice returned status 520 <none> after 1 attempts
<a href="http://www.twitter.com/nycmayorsoffice"></a>
lowBroken link: https://a860-openrecords.nyc.gov/ returned status 403 Forbidden after 1 attempts
<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
<a href="http://www.twitter.com/nycmayorsoffice"></a>
lowBroken link: http://www.twitter.com/nycmayorsoffice returned status 520 <none> after 1 attempts
<a href="http://www.twitter.com/nycmayorsoffice"></a>
lowBroken link: http://www.twitter.com/nycmayorsoffice returned status 520 <none> after 1 attempts
<a href="http://www.twitter.com/nycmayorsoffice"></a>
lowBroken link: http://www.twitter.com/nycmayorsoffice returned status 520 <none> after 1 attempts
<a href="http://www.twitter.com/nycmayorsoffice"></a>
lowBroken link: http://www.twitter.com/nycmayorsoffice returned status 520 <none> after 1 attempts
<a href="http://www.twitter.com/nycmayorsoffice"></a>
lowBroken link: http://www.twitter.com/nycmayorsoffice returned status 520 <none> after 1 attempts
<a href="http://www.twitter.com/nycmayorsoffice"></a>
lowBroken link: http://www.twitter.com/nycmayorsoffice returned status 520 <none> after 1 attempts
<a href="http://www.twitter.com/nycmayorsoffice"></a>
lowBroken link: http://www.twitter.com/nycmayorsoffice returned status 520 <none> after 1 attempts
<a href="http://www.twitter.com/nycmayorsoffice"></a>
lowBroken link: http://www.twitter.com/nycmayorsoffice returned status 520 <none> after 1 attempts
<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
<h1 class="nyc-hero__title" data-heading-only="true" data-has-bread="false">
Welcome to the Mayor’s Office
</h1>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
<!-- a11y: role="image" desc="Zohran Mamdani" -->
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
<!-- a11y: role="image" -->
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
<a>Read press release</a>
Reorder elements in the DOM to match the visual layout.
highMissing Content-Security-Policy header
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
<!-- 4 navigation landmarks, 1 labeled -->
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
<h4 class="cmp-title__text">Office of the Mayor</h4>
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
<nav id="primary-navigation" class="cmp-navigation">
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
<h4>112th Mayor of New York City</h4>
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
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
<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 conferenSet 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
<span class="carousel-annoucer sr-only" aria-atomic="true" aria-live="polite">showing slide 1 of 6</span>
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
<span id="carousel-title-gCra0gltaO" class="carousel-title sr-only" aria-hidden="true">latest news</span>
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
<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">
Set max-width: 100% or use overflow-wrap to prevent horizontal overflow.
mediumElement overflows viewport by 302px at 320px width.WCAG 1.4.10
<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-worlSet max-width: 100% or use overflow-wrap to prevent horizontal overflow.
mediumElement overflows viewport by 216px at 320px width.WCAG 1.4.10
<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 2Set max-width: 100% or use overflow-wrap to prevent horizontal overflow.
mediumElement overflows viewport by 302px at 320px width.WCAG 1.4.10
<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-thuSet max-width: 100% or use overflow-wrap to prevent horizontal overflow.
mediumElement overflows viewport by 317px at 320px width.WCAG 1.4.10
<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">
Set max-width: 100% or use overflow-wrap to prevent horizontal overflow.
mediumElement overflows viewport by 189px at 320px width.WCAG 1.4.10
<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>
<Set max-width: 100% or use overflow-wrap to prevent horizontal overflow.
mediumElement overflows viewport by 302px at 320px width.WCAG 1.4.10
<img class="video-thumbnail" src="/content/dam/nycgov/mayors-office/images/press-releases/2026/04/fifa-world-cup-2026-nynj-host--1.jpg" alt="">
Set max-width: 100% or use overflow-wrap to prevent horizontal overflow.
mediumElement overflows viewport by 302px at 320px width.WCAG 1.4.10
<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-officeSet max-width: 100% or use overflow-wrap to prevent horizontal overflow.
mediumElement overflows viewport by 317px at 320px width.WCAG 1.4.10
<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"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
<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
<span class="main-heading--subhead">Find what you need on nyc.gov</span>
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
<span class="small-paragraph">What's happening?</span>
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
<p class="cmp-teaser__pretitle">Posted April 16, 2026</p>
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
<p>Cast a ballot during the early voting period, April 18th– April 26th, or on Election Day, Tuesday, April 28th.</p>
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
<span class="cmp-accordion__title">Special Election</span>
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
<!-- a11y: role="image" -->
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
<!-- a11y: role="image" desc="Voters casting ballots in polling station" -->
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
<a>Story Hour</a>
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
<a>Read press release</a>
Reorder elements in the DOM to match the visual layout.
highMissing Content-Security-Policy header
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
<!-- 2 navigation landmarks, 1 labeled -->
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
<h3><span>Tuesday,</span><span>April 28, 2026</span></h3>
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
<a href="https://www.schools.nyc.gov/calendar"><u>View the public school calendar</u></a>
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
<a href="https://www.nyc.gov/assets/dsny/forms/collection-schedule"><u>Check your collection schedule</u></a>
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
<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>
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
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
<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
<!-- a11y: role="image" -->
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
<a>Terms of Service</a>
Reorder elements in the DOM to match the visual layout.
highMissing Strict-Transport-Security header (HSTS)
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
<!-- 4 navigation landmarks, 1 labeled -->
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
<h3 class="cmp-title__text">Mailing address </h3>
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
<nav id="primary-navigation" class="cmp-navigation">
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
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
<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
Set max-width: 100% or use overflow-wrap to prevent horizontal overflow.
mediumElement overflows viewport by 186px at 320px width.WCAG 1.4.10
<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
Set max-width: 100% or use overflow-wrap to prevent horizontal overflow.
mediumElement overflows viewport by 186px at 320px width.WCAG 1.4.10
<div class="grecaptcha-error"></div>
Set max-width: 100% or use overflow-wrap to prevent horizontal overflow.
mediumElement overflows viewport by 186px at 320px width.WCAG 1.4.10
<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
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
<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
<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.
where S = sensitivity (750), P = Σ(weight × count), N = pages scanned
| Tier | Weight | Examples |
|---|---|---|
| Critical | 10 | Keyboard traps, missing page language |
| High | 3 | Missing alt text, insufficient contrast |
| Medium | 1 | Heading hierarchy, unclear link purpose |
| Low | 0.25 | Best-practice suggestions |
The Sonde Score is a living standard (v0.1). We’re building it in the open because accessibility is too important for closed-door decisions. Your expertise makes it better.
Enter Mission Control
Review raw findings data, track changes between scans, and contribute to Sonde’s open methodology.
Nominate a Site for the Daylight Index
Know a public website that should be on the accessibility leaderboard? Nominate it — we’ll scan it and publish the results.