Accessibility
The State of US County PDF Accessibility 2026 - 58.1% of the county PDFs we scanned have no tag tree at all
US counties must make their PDFs accessible by 26 April 2027. We drew a random sample of 100 US counties, harvested 941 documents from their public portals, and found 58.1% have no tag tree at all - meaning a screen reader gets no headings, no reading order, and no table structure.
A PDF without a tag tree is not a document to a screen reader. It has no headings to navigate by, no reading order, no table structure, and no way to tell a caption from a paragraph. Under the Department of Justice’s ADA Title II rule, PDFs are explicitly “conventional electronic documents” and therefore regulated web content.
CSS
Feature Detecting “Undetectable” CSS Features with @supports named-feature()
In CSS you can feature detect support for things like selectors, properties + values, and at-rules using @supports. But how do you feature detect a change to an underlying implementation, or two existing properties suddenly working together? Enter @supports named-feature(), a function designed to expose these specific capabilities without relying on hacky workarounds.
Background Image Refraction in CSS
The soul of a “liquid glass” design is a good illusion of light refraction. That is, to see parts of the screen through a metaphorical lens. This article shows you how to get that for the backgrounds of elements.
A shelf with counts
A demonstration of how HTML and CSS alone can replace a faceted-search widget with dynamic result counts. It uses CSS counters, :has(), and display: none to update item counts as filters are selected—without any JavaScript.
Get Grid Information using pure CSS II
Extending the previous implementation to consider a responsive grid with a random configuration. Each item can span multiple rows/columns and get placed anywhere on the grid.
Whatever the placement, we can retrieve the position of each item using pure CSS. A task made possible using Scroll-Driven animations.
How to Build Tile Patterns with CSS Grid
A Modernist hydraulic tile floor, one motif rotated across the whole room, is something you'll find everywhere in Barcelona. Let's build our own in CSS Grid. Six real motifs, a whole floor of palettes.
CSS Scroll-Driven Animations: Ship Them Safely
CSS scroll-driven animations tie a keyframe animation to scroll position instead of a clock. You set animation-timeline: scroll() to follow a scroll container’s progress, or animation-timeline: view() to follow an element moving through the viewport. Chrome, Edge and Safari support them. Firefox stable still needs a flag.
That last sentence is the whole planning problem. The API is pleasant, the performance story is real, and roughly a fifth of your visitors will not see any of it. So the question is not whether the syntax works, it is how you write the CSS so the non-supporting browsers get something sensible rather than a broken page.
HTML
New Things You Should Know About HTML Here in Mid 2026
Highlights new and increasingly useful HTML features available by mid-2026, encouraging developers to rely more on native HTML instead of JavaScript for common UI patterns.
You Don't Need Initial-Scale In Your HTML
A line you will find in the head of almost every single HTML document:
<meta name="viewport" content="width=device-width, initial-scale=1.0">
The line came into relevance after the first iPhone launched in 2007. Though width=device-width handled things broadly, initial-scale=1.0 was important for many years to resolve undesired zooming behaviour in older versions of iOS and some other browsers. However, this isn’t the case any more. All the problems are no longer present and don’t need working around.
JavaScript
Components of JWTs Explained
Technical article explains JSON Web Tokens (JWT), their component parts, and how they are used for authentication.
The Browser's Main Thread Is Expensive
Explores why the browser’s main thread is such an important performance bottleneck. JavaScript execution, event handling, style calculation, layout, and painting all compete for time on the same thread, so long-running tasks can cause sluggish input, dropped frames, and stuttering animations.
It presents several strategies for managing that limited resource: splitting large tasks into smaller chunks, batching frequent work, prioritizing important tasks, and deferring work that doesn’t need to happen immediately. It also covers cases where the better solution is to avoid the main thread entirely by using compositor-driven CSS animations, Web Workers, or eliminating unnecessary work.
UX
Toggles Considered Harmful
Argues that digital toggles are fundamentally poor UI controls because their on/off state isn't always obvious, especially without relying on position or color. The author suggests using checkboxes instead, since checked/unchecked states are more explicit and accessible.
Should a Dialog Close When Clicked Outside?
Maybe not, but I’ll break these down into three categories because it depends on context and intent. Pretend this post also applies for pressing Esc.
Miscellaneous
Using Cloudflare Workers and reCAPTCHA v3 for a Static Site Contact Form
A practical guide to adding a secure, accessible contact form to a static site using Cloudflare Pages Functions, reCAPTCHA, and Resend, without needing a traditional backend.
35 people I know lost their tech jobs. AI was part of the reason. The layoff wasn’t the worst part
A lot of them made the same mistake. They watched AI change software engineering without changing much about how they worked.
That was survivable while the salary still arrived every month. Now it is not.
Because once you are unemployed, you are no longer competing against the engineer sitting next to you. You are competing against the market.