No.276 · Type & Names
Dither Logo
A mark rebuilt from square dots by error diffusion; the pointer pushes the dots aside and a click sends a ripple through them.
The prompt
Written for the variant you picked above: Ink
Build a logo component that turns a mark into a field of square dots and lets you disturb them. The source is an image/SVG URL, or a piece of text set in Instrument Serif italic on an offscreen canvas and trimmed to its own bounds. Blur it slightly (3.75px, padded so edges don't clip), sample it down to a grid of at most 200 cells on the long side, apply optional contrast and gamma, and run Floyd–Steinberg error diffusion (serpentine, adjustable strength) only inside the mark's alpha. With invert on (default), the dots fill a rounded tile (corner radius 20% of the short side) everywhere except the mark, so the logo reads as a cut-out; with invert off, the dots draw the mark itself. Each dot is a fillRect square at 72% of the cell (so the grid shows), centred in the canvas, in the element's text colour by default. The pointer pushes dots within 100px away with strength (1 − d/100)³ × 40; a release sends a ripple ring outward at 225px/s, 37px wide, for 675ms (stacked ripples add up); every dot's offset chases its target force with a 0.12 lerp and snaps to zero below 0.01, so the loop stops by itself once the field is still. It re-dithers (debounced) when the canvas width changes, and uses slightly smaller dots on phones. Selected variant — Ink: Off-white dots (#f2efe9) on near-black (#0b0b0c).
Notes
- Interaction
- Move across the mark to push dots aside; click or tap to send a ripple through the field.
- Motion
- Offsets ease at 0.12 per frame toward the cursor and ripple forces; ripples travel 225px/s for 675ms. The loop sleeps when everything settles.
- Accessibility
- The canvas is role="img" with the brand name as its label, so the identity is never only in dots. Reduced motion draws the still mark with no pushing or ripples.
- Responsive
- Fills its box, re-dithers on resize (debounced) and scales the mark to a fraction of the smaller side; dots shrink 20% under 640px.
- On touch
- Dragging a finger pushes the dots like the cursor; lifting it sends a ripple.