All studies

2026-09 · Card

Detail reveal card

A bottom panel that grows upward on hover, pushing the resting label up ahead of it. The base card is content-agnostic; everything below is the same component, differing only by custom properties and modifiers.

Behaviour

The base card at rest, and the same card pinned open.

Themes

One baked modifier, and one re-theme done from outside by overriding custom properties — component.css is untouched.

Map variant

The same card with an abstract map behind it — a duotone mesh, contour rings, and a pin that pulses at rest. Add the __pin element, and a __kicker line for coordinates. The pin origin moves with --…-pin-x / --…-pin-y, and the rings follow it.

Decisions

Type
Card

This is a reinterpretation, not a copy. The source was a location card backed by a blurred landmark photo. Here the reveal mechanic is the component and the subject is not — the base card is content-agnostic (an article, a plan, a changelog), and the location treatment is a --map modifier layered on top: an abstract duotone mesh with contour rings and a pulsing pin, so the map is drawn rather than photographed.

  1. The reveal is one translation, not a height animation of many parts.

    The label is the only thing visible at rest, sitting at the bottom edge. On hover the whole bottom panel grows upward (grid-template-rows: 0fr -> 1fr on a clipped region), so the label rises and the details arrive underneath it in the space it vacated. Nothing fades in on top of anything — the layout itself moves, which is why it reads as one motion instead of four.

  2. Easing and stagger.

    cubic-bezier(0.16, 1, 0.3, 1) over ~420ms: a fast launch and a quick settle, so the panel appears to decelerate into place. Disclosed rows follow at 55ms intervals. The delays are declared only in the hover/open state, so leaving snaps back immediately — an exit that staggers feels broken.

  3. The corner arrow hints, then gets out of the way.

    The accent ↗ fades and drifts up-right as the details arrive, while a grows in from zero width to the left of the label, pushing it right. One saturated colour, moved around the card rather than repeated.

  4. Two typefaces doing two jobs.

    Geometric sans at 28px/600 for the title; monospace, uppercase, 0.18em tracking for every label, badge, kicker and meta line. The tracking is what sells it — at 12px with normal spacing the same text reads as small body copy, not as a label.

  5. Hairline rules that fade out to the right.

    Separators are a 1px linear-gradient(to right, rule, transparent) used as a background, not a border. A full-width border would draw a hard box edge; the fade keeps the detail rows feeling like they float on the artwork.

notes.md — the full record, including what was tried and dropped