# cock — complete reference > An open-source Svelte 5 and Tailwind 4 component kit: 66 accessible components, dark mode, theming from three colours and a theme generator. Install: `npm install @joshicodes/cock` (also bun, pnpm, yarn). ```css /* src/app.css */ @import 'tailwindcss'; @import '@joshicodes/cock/theme.css'; ``` ```ts // src/hooks.server.ts — applies the stored theme before the first paint export { themeHandle as handle } from '@joshicodes/cock'; ``` ## Theming Set three custom properties; the rest is derived with `color-mix`: `--ck-bg`, `--ck-fg`, `--ck-accent` (plus `--ck-accent-hover` and `--ck-accent-fg` when you use a custom accent). Derived tokens: `--ck-canvas`, `--ck-surface`, `--ck-muted`, `--ck-border`, `--ck-border-strong`, `--ck-fg-muted`, `--ck-fg-subtle`, `--ck-accent-soft`, `--ck-ring`. Each one reaches Tailwind as a utility, e.g. `bg-surface`. Other knobs: `--ck-tint`, `--ck-radius-scale`, `--ck-font-sans`, `--ck-font-mono`. Put `data-ck-theme="dark"` on any element to theme only that subtree. Runtime: `theme.mode`, `theme.toggle()`, `theme.accent`, `theme.setToken(name, value, scheme?)`, `theme.setSharedToken()`, `theme.clearTokens()`, `theme.resolved`, `theme.revision`. Every component accepts `class`, merged with tailwind-merge so your utility wins. ## Button The one component everything else borrows from. Pass `href` and it renders an `` with the same look, which saves wrapping buttons in links and getting the keyboard behaviour wrong. Category: Primitives. Docs: https://cock.joshicodes.de/components/button ```svelte import { Button } from '@joshicodes/cock'; ``` **Props** | Name | Type | Default | Notes | | --- | --- | --- | --- | | `variant` | `ButtonVariant` | `'solid'` | — | | `size` | `ButtonSize` | `'md'` | — | | `href` | `string` | — | Render as an `` instead of a `