Card
.v4-cardLinear gradient bg-2 → bg, 1px rule border, cursor-tracked radial spotlight via --mx/--my CSS vars set in JS on mousemove.
- ✓ DO lift -6px on hover and warm border to accent at 55% alpha.
- ✓ DO update --mx and --my from pointer events for the spotlight.
- ✗ DON'T apply border-radius. DON'T stack box-shadows beyond the defined elevation.
Primary CTA
.v4-ctaBordered block with ::before fill that translates from translateY(101%) → 0 on hover. Arrow child .v4-cta-arrow translates +4px,-1px.
- ✓ DO keep text color stable; let the slide fill provide contrast.
- ✗ DON'T animate background-color directly — use the ::before transform.
Ghost button
.v4-ghostTransparent fill, fg-dim border. Border ignites to fg + 4% fg fill on hover.
- ✓ DO use as the secondary action next to a .v4-cta. DON'T pair two ghosts side by side.
Kinetic link
.v4-linkInline element with ::after underline that scaleX from right→left on enter, retracts left→right on leave.
- ✓ DO use for any inline navigation or external link. DON'T add it to button-shaped elements.
Outline display
.v4-outline1px text-stroke in fg, transparent fill. Fills to accent on hover over 350ms.
- ✓ DO use for large list items and section indices. DON'T use below 32px — stroke breaks down.
Marquee tape
.v4-tape / .v4-tape-wrapDuplicated content track, 38s linear translateX -50%. Pauses on wrapper hover.
- ✓ DO duplicate content exactly twice for seamless loop. DON'T speed up below 25s — reads as nervous.
Pulse dot
.v4-pulse999px dot, accent-2, breathing scale + expanding box-shadow ring at 1.8s.
- ✓ DO use as live/status indicator only. DON'T use more than one per visible viewport.
Cursor
.v4-cursorFixed 18px circle, mix-blend-mode: difference. States: default / .is-hover (56px accent-2) / .is-text (4×28 bar).
- ✓ DO hide on coarse pointers. DO update transform via rAF, not React state, for snappiness.
- ✗ DON'T apply transitions to transform — only width/height/background/border-radius.
Aurora + scan
.v4-aurora / .v4-scanFixed full-viewport layers behind content. Aurora: 3 radial gradients, 22s drift. Scan: 18vh band, 14s linear sweep.
- ✓ DO mount once at the layout root. DON'T nest inside scrolling containers.
SystemCanvas (multi-agent swarm)
<SystemCanvas />Canvas background simulating 26–44 agents (viewport-scaled) with task rings, progress arcs, and message lines. Whisper-intensity defaults: ring alpha 0.32, arc 0.85, message 0.6, label 0.42.
- ✓ DO mount as the hero background only.
- ✓ DO reduce agent count to ~16 if FPS drops below 50 on integrated GPUs.
- ✗ DON'T render above interactive content.