-
-
Brand mark lab
-
- Tune each mark's before-hover and after-hover state — geometry, stroke, and goo fusion.
- Scrub or play the transition, then copy the readout into the component constants.
-
-
-
-
- {MARKS.map((m) => (
- {
- setMarkId(m.id)
- setAmt(0)
- setPlaying(false)
- }}
- className={`rounded-md px-3 py-1.5 text-[13px] transition-colors ${
- m.id === markId
- ? 'bg-[var(--text-primary)] text-[var(--bg)]'
- : 'border border-[var(--border)] bg-[var(--surface-2)] text-[var(--text-body)] hover:bg-[var(--surface-hover)]'
- }`}
- >
- {m.label}
-
- ))}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- setPlaying((v) => !v)}
- className='rounded-md bg-[var(--text-primary)] px-3 py-1.5 text-[13px] text-[var(--bg)]'
- >
- {playing ? 'Pause' : 'Play hover'}
-
- {
- setPlaying(false)
- setAmt(v)
- }}
- />
-
-
-
-
-
-
-
-
Geometry (before → after hover)
- {mark.params.map((def) => (
-
setPair('params', def.key, side, v)}
- />
- ))}
-
-
-
-
Style (before → after hover)
-
setPair('stroke', 'stroke', side, v)}
- />
- setPair('goo', 'goo', side, v)}
- />
-
-
-
-
- Gradient — radial stops + position (moves on hover)
-
-
setGradColor('from', v)}
- />
- setGradColor('to', v)}
- />
- setGradPair('cx', side, v)}
- />
- setGradPair('cy', side, v)}
- />
- setGradPair('r', side, v)}
- />
-
-
-
-
Readout
-
- {readout}
-
-
navigator.clipboard?.writeText(readout)}
- className='self-start rounded-md border border-[var(--border)] bg-[var(--surface-2)] px-3 py-1.5 text-[12px] text-[var(--text-body)]'
- >
- Copy JSON
-
-
-
-
-