Field Notes
// Journal
Dispatches from the workbench — essays on design systems, performance, and the honest craft of building interfaces that feel physical. Written between commits.
// Entries: 9
A View Transition Starts With A Screenshot
The browser photographs your page before and after a change and animates the photographs, which explains duplicate names, smeared text, and a frozen page.
Recent Logs
Theming Is Three Separate Questions
light-dark(), contrast-color() and style queries each answer a different question about a component's surroundings, and picking the wrong one is how themes break.
Rem Is A Setting, Not A Size
Browser zoom scales pixels too, so the real difference between rem and px is whether your layout listens to the reader's font-size setting. Here is how to decide per property.
Nothing Tells You When Sticky Sticks
A sticky element pins without changing a single style, so here is how to detect the pinned state with a sentinel, and how CSS now does it natively.
What :has() Actually Selects
The argument is non-forgiving, the specificity leaks out of it, and the anchor sits where you started — the rules that make advanced :has() predictable.
Container Queries Need A Container
Why an element can never respond to its own width, what inline-size containment quietly costs you, and how the browser decides which container answers a query.
Grid Places First, Sizes Second
The placement algorithm runs on line numbers and spans alone, before any track has a width, which is why phantom columns appear and negative line numbers quietly stop working.
No entries match that search.