Dispatches From The Internets

Build faster without leaving accessibility behind

The Accessibility Considerations Toolkit README, showing its title, introduction, and overview of the guidance.

When accessibility questions come up, not every team has someone who can help answer them. Without that resource, teams can miss how their decisions affect people with disabilities—and leave barriers in place until someone encounters them.

AI-assisted development makes that gap more pressing. If the tools helping us build software don’t account for how people with disabilities use technology, they can repeat those mistakes across more interfaces, faster. We need to bring that understanding into the work while decisions are still being made.

Today, my team is open sourcing the Accessibility Considerations Toolkit (ACT) to help close that gap.


System Colors Need to Work Together

A sample from the study, showing HighlightText on Highlight in Chrome on Android in the dark scheme and its contrast result of 1.98:1 with all five thresholds failing.

While testing out a recent web component, I discovered the demo I’d built made active buttons totally inaccessible, but only on Android in dark mode. I was baffled because I intentionally use system colors in all my web components and their demos. In the browsers I’d been testing, the pair looked great in both dark and light themes, but over on my phone it was a different story.

In Chrome’s dark mode on Android, HighlightText is a mid-tone grey. Highlight is a mid-tone blue. The contrast was abysmal—a mere 1.98:1, failing all five contrast thresholds in the Web Content Accessibility Guidelines (WCAG). I wish I could say it was the first time I’d stumbled on this kind of issue. A week or so earlier, a user reported similar trouble in my tabbed interface demo with Windows in forced-color mode. I’d mistakenly thought forced-color mode was the primary issue. It wasn’t.

In both cases, I’d expected colors named for foreground and background roles to work together. Apparently, that was asking too much.

These experiences prompted me to build the System Color Study: a resource for comparing browser-provided colors and their intended pairings across browsers, operating systems, and preferences. I’m using it to inform my component work; I hope it’ll help you too.


Theme Switching Made Easy

A System, Light, and Dark theme switcher with monitor, sun, and moon icons spans a diagonal divide between light and dark backgrounds, with its colors changing across the divide.

If you’ve used the theme switcher on this site, you may notice it works a little differently now.

There’s been a lot of discussion lately about whether theme controls should offer two states or three. Bramus has made the case for three states, while Lea has argued that two are enough.

That discussion prompted me to revisit the way I’ve been managing themes on this site. I’d supported two themes—dark and light—and neglected the system setting entirely. I wanted to rectify that and felt the urge to build a web component to make it reusable: <theme-switcher>.


There Can Be Only One, Redux

Delivery speed choices shown as a vertical radio group and a horizontal segmented control. Both show Standard, Express, and Overnight, with Express selected.

Back in 2022, I wrote “There can be only one: Options for building ‘choose one’ fields” for HTMHell. The interaction sounds simple—pick one option from a list—but choosing the right HTML control involves a few tradeoffs.

A <select> is compact, but you generally need to open it to see the available choices. Radio buttons put all the options in front of you, making them easier to scan and compare, but the group typically requires more screen real estate.

What if we could maintain visibility while presenting the choices in a more compact way?

That’s where <form-multi-switch> comes in. It presents a radio group as connected segments: all the options remain visible, but a short set of labels can fit neatly into a single row. Under the hood, they’re still native radio buttons, retaining their accessibility and UI affordances.


Long Alt

If your image’s alternative text is turning into a novella, Adrian Roselli wants you to know what that experience can be like. In this post he stuffs the alt attribute, then tests what browsers and screen readers do with it.

Spoiler: the experience is awful on all counts, but you should really read it though to fully grasp the horror.


ARIA live timing

Worth keeping handy the next time a live-region announcement seems to arrive on its own timeline. Russ Weakley walks through two different parts of the journey: the browser exposing an update to assistive technology and the screen reader deciding when to speak it.


Prompt and Circumstance

Back at Ability Summit, I moderated a conversation about shifting accessibility left in the age of AI. During that discussion, Yumeng Ma described a problem she’d encountered in her research: there wasn’t a magical prompt that made generated code accessible. The component mattered. The model mattered. And what we chose to measure mattered too.

That research is the subject of a paper I co-authored with Yumeng Ma, Jacob O. Wobbrock, Joe Devon, Michael Fairchild, Jennifer Mankoff, and Venkatesh Potluri: “Prompt and Circumstance: Evaluating Accessibility in LLM-Generated HTML Form Components”, for ASSETS ’26, the ACM SIGACCESS Conference on Computers and Accessibility.


Accessibility Assistant for Figma v53: From Design Decisions to Handoff

The Accessibility Assistant for Figma icon

In an internal analysis of accessibility bugs, a colleague found that roughly half could be traced back to design decisions. These were issues we should have caught earlier, before those decisions became codified in code and long before anyone encountered them in a shipped product.

That’s one of the reasons I started working on Accessibility Assistant for Figma. I wanted to help designers catch issues while they worked and help them build their accessibility knowledge along the way. Version 53 brings more of that work together, organizing annotations, assessments, issues, and handoff around projects.



Sortable Tables with Progressive Enhancement

A table of names, ages, cities, and occupations sorted by age from 26 to 42, with an ascending-sort indicator on Age.

Many years ago, I made a little jQuery plugin called Easy Sortable Tables. It works exactly as promised: point it at a table and it upgrades the UI so a reader can sort the rows by clicking a column heading. The functionality is still useful, but I can’t even remember the last time I added jQuery to a site.

The web platform’s changed quite a bit since I wrote that plugin, so I decided to modernize it as a web component: <table-sortable>.