Accessibility
Project Developers
Menu
- Page Overview
- Semantic HTML & Structure
- ARIA Attributes
- Screen Reader Support
- Skip Link
- Keyboard & Focus
- Color & Contrast
- Responsive Design
- Responsive Images
- Touch Device Accessibility
- Form Accessibility
- External Link Security
- Structured Data / Schema.org
- Performance & Resource Loading
- Typography
- Navigation
Page Overview
The project developers have designed this site to incorporate a variety of accessibility features. The sections that follow describe each of these features. We welcome additional suggestions for making the site more accessible.
Semantic HTML & Structure
lang="en"attribute on all pages- Semantic landmarks:
<main>,<nav>,<footer>,<section>,<figure>,<figcaption> - Proper heading hierarchy (h1–h4) with unique IDs
<section aria-labelledby="...">linking sections to their headings<ul role="list">for explicit list semantics- Semantic table markup with
<thead>,<tbody>,<th scope="col">
ARIA Attributes
aria-labelon all external links, email links, chart containers, and interactive buttonsaria-expandedon hamburger menu button, toggled dynamically via JSrole="img"with descriptivearia-labelon Plotly chart containersaria-labelledbyconnecting<main>and<section>elements to their headings
Screen Reader Support
.sr-onlyutility class (1px clip, off-screen positioning)- Screen-reader-only data tables for every interactive chart
- Table
<caption>elements describing chart data
Skip Link
- "Skip to main content" link, hidden off-screen until focused
Keyboard & Focus
- Global
*:focusoutline (2px solid white, 2px offset) - Custom focus styles on hamburger button, close button, select dropdowns, figure links
- Skip link visible on focus with z-index 1000
scroll-padding-top: 6.5remto account for fixed nav on anchor jumps
Color & Contrast
- WCAG AAA contrast ratios (7:1+) across all text/background combinations
- Custom
::selectioncolors for readable text highlighting
Responsive Design
- Viewport meta tag with
width=device-width, initial-scale=1.0 - Nine CSS media query breakpoints (400px–1200px)
- Responsive font sizes in
remunits scaling across breakpoints - Body line-height 1.8 for readability
- Responsive padding adjustments per viewport
Responsive Images
srcsetwith nine width variants (320w–2732w) andsizesattributeloading="lazy"anddecoding="async"on below-fold images- Descriptive
alttext on all images
Touch Device Accessibility
window.matchMedia('(any-hover: hover)')detection for hover capability- Tap-to-toggle info panels replacing tooltips on touch-only devices
hovermode: falseon Plotly charts for touch devices- Adequate touch target sizing on mobile nav items
Form Accessibility
<label for="...">associated with filter<select>controls- Focus border color change on select inputs
External Link Security
rel="noopener noreferrer"on alltarget="_blank"linksreferrerpolicy="no-referrer"on external resources
Structured Data / Schema.org
- JSON-LD
ScholarlyArticleschema with accessibility properties:accessMode: ["textual", "visual"]accessModeSufficient: ["textual"]accessibilityFeature: ["structuralNavigation", "readingOrder", "alternativeText", "tableOfContents"]accessibilityHazard: "none"
Performance & Resource Loading
<link rel="preload">for stylesheet,<link rel="preconnect">for font/CDN origins- SRI hashes (
integrityattribute) on external CSS/JS crossorigin="anonymous"on third-party resourcesdisplay=swapon Google Fonts for flash-of-unstyled-text prevention
Typography
- Noto Serif for headings, Source Sans Pro for body (both with system fallbacks)
box-sizing: border-boxglobally applied-webkit-text-size-adjust: 100%preventing mobile text inflation
Navigation
- Mobile hamburger menu with
aria-label, overlay dismiss, and close button - Table of contents ("Contents" box) for in-page section navigation
- Plotly mode bar hidden (
displayModeBar: false) to reduce UI clutter