9 min read
Accessible Color Contrast Without Killing the Brand
I keep a dark UI with a bright accent WCAG-AA readable at 4.5:1
The Lab · Written in the open · Tagged CSS
Working notes from the studio. The tools I build, the workflows I keep, the mistakes I paid for.
30 entries · latest 2026-07-15
Latest entry
Optimistic UI updates before the server confirms feel instant to users 150ms is my default transition duration for hover and press states Skeleton screens beat spinners because they show layout, not just waiting Focus rings and press feedback make an...
Read the entry
Latest entry · Design
All entries · CSS
9 min read
I keep a dark UI with a bright accent WCAG-AA readable at 4.5:1
8 min read
One brand variable feeds hover, disabled, surface, and text colors
8 min read
Removed a 12 KB validation library across 3 surfaces using native HTML
9 min read
@starting-style ships in every modern browser as of 2024
9 min read
Popover attribute gives top-layer rendering and light-dismiss free
9 min read
Content-shaped skeletons cut layout shift to zero versus 0.18 CLS for spinners
8 min read
interpolate-size and calc-size finally let a panel transition to height auto with no measuring script.
8 min read
A scroll-snap track plus the new pseudo-elements replaced a 14KB carousel dependency in my UI.
11 min read
CSS scroll-driven animations in 2026: 6 copy-paste patterns using animation-timeline scroll() and view(), zero JavaScript.
9 min read
Six :has() selectors deleted roughly 240 lines of JS across my sites
10 min read
Five icon systems across 15 repos created visual drift and 84KB bundles in the worst Next.js app.