For best experience, open in browser on a wider screen
Nexvyn UI focuses on clarity and restraint. Each component has one signature motion moment, the accent appears only on focus, selection, or that signature, and everything else stays neutral. The goal is interfaces that feel built with care rather than assembled from parts. Components are small, readable, and meant to be copied into your project and owned by you.
Colors come from a short list of semantic tokens: background, foreground, muted, border, surface, and a single accent. Every token has a light and a dark value, so components follow the theme without any component-level dark mode code. Radii use rounded-md, spacing sits on a 4px grid, and type uses a small set of sizes at regular weight.
Motion uses spring physics and a small set of duration and easing tokens. Elements entering or leaving use ease-out, elements already on screen use ease-in-out, and hovers use plain ease. Only transform, opacity, clip-path, and filter are animated, and every animation respects the reduced motion setting by turning itself off.
Components animate hardware-friendly properties, clean up every timer, listener, and observer on unmount, and avoid reading layout during render. The documentation site is prerendered as static pages, heavy views such as anatomy diagrams load only when opened, and each component installs as its own file so you ship only what you use.
Components use semantic elements, keyboard support, visible focus rings for keyboard users, and ARIA attributes where native semantics are not enough. Composite widgets use roving focus, overlays trap and restore focus, and touch targets aim for 44 by 44 pixels. Contrast is checked by hand in both themes.
Everything is typed with TypeScript, props follow a consistent naming pattern, and components support both controlled and uncontrolled use. Styling merges through a cn helper, so your className always wins. Install any component with a single shadcn command, then read and change the source like your own code.
Override the design tokens to match your brand, pass className to adjust layout, and swap icons, since icons are accepted as React nodes. User-facing strings such as labels and placeholders are props with sensible defaults, so the components are easy to localize without editing their source.