Accessibility
ADA Web Lawsuit Trends for 2026: What 2025 Filings Reveal
2025 ADA website accessibility lawsuits are up. Learn the trends driving digital accessibility litigation and what they mean for 2026 planning.
Geography remains one of the strongest predictors of exposure.
Even for businesses with no physical locations. The complaints make one point clear: a physical presence is not required. If users in these states can access your website, courts are allowing cases to proceed.
Industry concentration remains consistent year over year.
In 2025:
- E-commerce accounted for nearly 70 percent of all ADA web lawsuits
- Food and service businesses made up roughly 21 percent
- Healthcare represented approximately 2 to 3 percent
Company size amplifies risk.
In 2025, 36 percent of companies sued reported annual revenue exceeding $25 million, continuing an upward trend from prior years.
A small number of plaintiff firms account for the majority of 2025 filings.
These firms file at scale across federal and state courts. Their complaints are standardized, reference accessibility standards fluently, and adapt quickly to jurisdiction-specific requirements.
Accessibility Widgets Do Not Prevent ADA Website Lawsuits.
In 2025, an increasing number of lawsuits explicitly referenced accessibility widgets while alleging unresolved code-level barriers. Some filings also claim that widgets interfere with screen readers or introduce additional obstacles.
What are DOM mutations
DOM mutations can happen with or without JavaScript. Every DOM mutation requires the browser to update the AXTree (accessibility tree). This tree is the internal structure used by screen readers and other assistive technologies. Not all AXEvents result in announcements — screen readers may merge, delay, or ignore certain events based on their behaviour and user settings.
DOM mutations directly influence:
- What screen readers announce
- How quickly announcements occur
- Which events interrupt others
- Whether changes are even detectable
Don't Fall Into the "Accessibility Grade/Score" Trap
In the rush to make digital products accessible, many teams lean on a single accessibility score or grade to convey how good (or bad) a product is from the accessibility point of view. An example of this might be 92 percent accessible, Grade A-, or 68 % accessible, D+. To non-accessibility professionals, these grades feel reassuring and objective. Yet these scores tell a fraction of the story, and often the wrong fraction.
People with disabilities do not interact with code or pass-fail tests. They interact with products, frequently using assistive technology. A high score means nothing if someone cannot execute core workflows such as buying groceries online or submiting a job application. Accessibility is about real people doing real tasks. Numbers on a dashboard that look good are not terribly meaningful.
ADA’s New 2026 Deadline: What Tech Vendors Need To Know
If your company builds websites, apps, or digital services for cities, counties, school districts, or any other state or local government body in the US—there’s a major accessibility deadline coming your way.
aria-busy is not your friend
Don't use aria-busy! It doesn't do what you think it does, and it doesn't even do what the spec says it should.
Shocking to most is the fact that ARIA is not fully supported by all browsers and assistive technologies. What works in one browser/assistive technology combination may not work the same with another. It may not work the way you think it should, or work at all. Even worse, is when something that used to work just stops working as expected.
Touch Targets and Web Accessibility
It’s important for elements to have enough touch target in order for all users to click with ease. When these targets are too small they become a significant barrier to navigation. For all users, small touch targets can make a website difficult or even impossible to use.
To ensure your interface is truly accessible, you should design and implement touch targets according to criteria set by WCAG, Web Content Accessibility Guidelines. WCAG provides the global benchmark for digital inclusion.
5 accessibility checks to run on every component
Hidde de Vries explains how to test components for accessibility, from keyboard support to screen readers and zoom.
Accessibility is personal
Web A11Y is always about education.
Initially, I need to educate myself, as one is never done learning. While the fundamental principles do not change a lot, a best practice from 18 months ago may not be the best practice today. And sometimes a problem can be so challenging, you end up learning something new.
Then, I’m educating others. While certain issues can lead to interesting discussions, most of the time I need to explain something, and more often than not it’s about the basics, so I’m repeating myself over and over again. Not just because the audience changes, but also because of time. After all these years I’m still talking about the same stuff. Makes you wonder if there’s been any progress at all.
Is A11Y work rewarding? Demanding? Exhausting? All of the above?
CSS
Directional CSS with scroll-state(scrolled)
There’s a new scroll-state() query in town, and it’s rolling out in Chrome 144. The scrolled state query lets you apply styles based on the last scroll direction of your user’s well.. scroll. This unlocks a ton of new possibilities, and I couldn’t help but get my hands on trying it out.
Quick guides to making beautiful PDF documents from HTML and CSS
Prince is a powerful HTML-to-PDF-via-CSS converter which offers advanced layout features. All your existing CSS skills can be used, and the guides below will teach you how to use the new features.
Prince is not free but if this is something that interests you, also take a look at DocRaptor and EuroPDF services, which provide access to Prince through cloud-based APIs without needing to install Prince locally.
Responsive Hexagon Grid without Media Queries
Using modern CSS to improve an old implementation of a responsive hexagon grid. corner-shape to create the hexagon shape and sibling-index() combined with math functions to conditionally apply a margin to only the first element of every other row.
Effortless animations with CSS view transitions
Designing an appealing web page is always a bit of a challenge for me: I don't have a lot of web design experience, and the one time a year I set up to do anything that has to look decent I always feel like I'm relearning CSS 101 from scratches.
Surprisingly, this time around I actually had a really good time, and the part I enjoyed the most was dipping my toes into CSS view transitions. I think the final result is really impressive given this is a static web page, with no JavaScript, no tricks, and just a couple of lines of CSS
4 CSS Features Every Front-End Developer Should Know In 2026
Toolbelt worthy, powerful, and game-changing CSS you need for 2026.
Connecting Circles With Anchor Positioning II
Connect circles with arrows and show their distance using modern CSS.
Improving the previous implementation to include the calculation of distance between both circles inside the arrow shape.
Frankenstyle is a no-build, value-driven, fully responsive, utility-first CSS framework
It takes inspiration from Tailwind CSS but simplifies setup by removing the need for a build pipeline. No PostCSS, no config files, no vite.config.js. Just drop in the CSS via CDN and start styling.
At its core, Frankenstyle provides:
- Utility-first syntax (similar to Tailwind CSS)
- Lightweight, value-driven styling (utilities paired with CSS variables you define)
- Runtime state generation (
:hover,:active, etc.) - Responsive and theme-aware design
HTML
Browser-level image lazy loading for the web
You can use the loading attribute to lazy-load images without the need to write custom lazy-loading code or use a separate JavaScript library. Here's a demo of the feature.
The three semantics of HTML
There is always that one elephant in the room alongside HTML – semantics. You can ignore it for quite a while, but at the end of the day, you'll need to acknowledge that it's there, cluttering half of the space.
JavaScript
JavaScript Performance: Debounce vs. Throttle Explained (With Examples)
In modern web development, creating responsive and performant applications often means dealing with events that fire at a very high frequency. Events like input on a search field, scroll on a long page, or resize on the window can trigger dozens or even hundreds of function calls per second. If these functions perform heavy computations or make API calls, your application's performance will suffer dramatically.
This is where two powerful utility functions, Debounce and Throttle, come into play. They help control how often a function is executed in response to frequent events, optimizing your application and improving the user experience.
Dittytoy - an online platform for creating and sharing generative music in the browser using a simple JavaScript-based API
Dittytoy is a platform for creating code-driven music using JavaScript. Instead of arranging samples on a timeline, you write code that generates sound. This lets you create music that evolves, responds to parameters, or never repeats. Everything runs in your browser using the Web Audio API.
The API syntax is loosely based on Sonic Pi. You can find the full Dittytoy API Reference here.
2025 JavaScript Rising Stars
A complete overview of the JavaScript landscape in 2025: trends about frontend, fullstack and Node.js frameworks, React and Vue.js ecosystems, build tools, state management...
Building UI Components Correctly in the Age of AI
What I learned as a frontend engineer by doing things wrong.
Learn Phaser 4 by Building a Sonic Themed Infinite Runner Game in JavaScript
If you’re a web developer looking to make 2D web games, Phaser is a great addition to your toolbelt.
To make the process of learning Phaser easier, I have released a course that takes you through the process of building a Sonic themed infinite runner game with Phaser 4 and JavaScript.
You can purchase the course here ($16.50 at the time of this writing).
Total length of the course is 1h 43min. More details regarding content and prerequisites are included in the link.
That said, you can freely play the game being built in the course as well as have access to the final source code.
The Phaser Game Framework in 5 Minutes
Phaser is the most popular JavaScript/TypeScript framework for making 2D games.
Because it’s a web-native framework, games made with Phaser are lightweight and generally load and run better on the web than the web exports produced by major game engines.
For that reason, if you’re looking to make 2D web games, Phaser is a great addition to your toolbelt.
React Guided Tour - A modern, flexible React TypeScript tour guide library with advanced highlighting and interaction capabilities
Built for React 19 with a clean, modular architecture that supports complex user onboarding flows.
Announcing jax-js: an ML library for the web
I’m excited to release jax-js, a machine learning library for the web.
You can think of it as a reimplementation of Google DeepMind’s JAX framework (similar to PyTorch) in pure JavaScript.
jax-js runs completely in the browser by generating fast WebGPU and Wasm kernels.
Manually Restoring Scroll Position on Reload with JavaScript
The JS browser APIs provide very simple interfaces to the page’s scroll position in window.scrollY and window.scroll(x, y). scrollY is a subpixel-precise measurement of where the user has scrolled, and scroll() takes integer arguments for horizontal and vertical coordinates to which to scroll. All we need to do is save the (rounded) value from the first whenever the user scrolls and feed it into the second when the user reloads the page.
We don’t want to use a cookie or localStorage, because those methods of data storage persist between browser sessions and across browser tabs. Instead, we want to use sessionStorage, a very simple KV store whose values are wiped away when the tab or window is closed.
Backpressure in JavaScript: The Hidden Force Behind Streams, Fetch, and Async Code
In JavaScript, backpressure exists in multiple places: Node.js streams, the Fetch API, Web Streams, and even async loops over large datasets. But it can be tricky. The language gives you the tools: ReadableStream, WritableStream, stream events like drain - but it doesn't enforce correct usage. And many developers end up ignoring these signals, mostly because the code "just works" on small datasets. Then the data grows, the load increases, and suddenly your app is struggling to keep up: crashes, OOMs, and latency spikes seem to come out of nowhere.
This article will unpack what backpressure really is, why it matters in JavaScript, and how to write async code that respects it. By the end, you'll see that backpressure isn't a limitation, it's a feature of well-behaved systems, and understanding it can save you from countless production headaches.
33 JavaScript Concepts
Want to truly understand how JavaScript works? Not just copy-paste code, but actually know what’s happening under the hood?
These 33 concepts are the foundation. Whether you’re debugging a tricky closure, optimizing async code, or preparing for technical interviews, this is the knowledge that separates developers who struggle from those who ship with confidence.
Miscellaneous
The UI Finesse Playbook
Opinionated UI design system and implementation playbook focused on interaction finesse, typography, and component standards for high-clarity product interfaces.
Why Federated Design Systems Keep Failing
Why do federated design systems keep failing? I watched it happen twice at Spotify. Here's what actually happened, where they broke down, and why centralised models usually work better.
Its Hover - Animated icons
A collection of smooth, high-quality animated icons for your next project. Copy and paste directly into your app.
Griddy Icons
Griddy Icons is free open-source icon family with unique utilitarian vibe.
Currently has 1,135 icons.
Getting started with Claude for software development
2025 was an interesting year in many ways. One way in which it was interesting for me is that I went from an AI hater to a pretty big user. And so I’ve had a few requests for a “using Claude” guide, so I figure new year, why not give it a shot? The lack of this kind of content was something that really frustrated me starting out, so feels like a good thing to contribute to the world.
This post is going to be for software developers that are interested in learning about using these tools as of early 2026. I’m going to spend this post talking about some background, and then the first steps towards getting your feet wet. If folks like it, I’ll follow up with more. There’s a lot here. I’m going to be speaking about Claude directly, because it’s the tool I use the most, but a lot of this should apply to other platforms as well.