Theming

Every value is a CSS custom property. Rebranding is plain CSS you already know: no config file, no theme object, no build step.

Rebrand the whole library

globals.css
:root {
  --vk-color-primary: #0ea5e9;   /* your brand */
  --vk-radius-md: 2px;           /* sharp corners */
  --vk-font-sans: 'Inter', sans-serif;
}

Load this after the library's stylesheet. Every component picks it up. There is nothing to wire up and no provider to add.

Per-component and per-instance

Custom properties cascade, so an override can be scoped to a subtree or a single element.

{/* one instance */}
<Button style={{ '--vk-color-primary': '#db2777' } as React.CSSProperties}>
  Pink button
</Button>

{/* a whole subtree */}
<div style={{ '--vk-radius-md': '0px' } as React.CSSProperties}>
  <Card>Square corners in here only</Card>
</div>

Token reference

Design tokens
TokenDefaultUsed for
--vk-color-primary#4f46e5Brand colour. Buttons, links, focus rings.
--vk-color-primary-fg#ffffffText on a primary surface.
--vk-color-bg#ffffffPage background.
--vk-color-fg#111827Body text.
--vk-color-muted#6b7280Secondary text.
--vk-color-border#e5e7ebBorders and dividers.
--vk-color-danger#dc2626Errors and destructive actions.
--vk-color-success#16a34aSuccess states.
--vk-color-warning#ca8a04Warnings.
--vk-color-overlayrgb(9 9 11 / 0.6)Modal and drawer backdrops.
--vk-space-1 to --vk-space-160.25rem to 4remSpacing scale, 4px based.
--vk-font-sanssystem-ui, ...Every component inherits this.
--vk-text-sm to --vk-text-2xl0.875rem to 2remType scale.
--vk-text-heroclamp(2.25rem, 5vw, 3.75rem)Fluid hero size.
--vk-radius-sm / md / lg / full6px / 10px / 16px / 9999pxCorner radii.
--vk-shadow-sm / --vk-shadow-mdsubtle / mediumElevation.
--vk-easecubic-bezier(0.2, 0.8, 0.2, 1)Transition easing.
--vk-duration180msTransition duration.
--vk-z-overlay / --vk-toast-z1000 / 1100Layering.
--vk-modal-width-sm to xl24rem to 56remDialog sizes.
--vk-drawer-size-sm to xl18rem to 42remDrawer sizes.

Charts add --vk-chart-1 through --vk-chart-6 plus axis, grid and label colours, declared in charts.css.

Next

Dark mode covers the one attribute and how to avoid a flash of the wrong theme. Overriding styles explains why your CSS always wins.