@gjermundgaraba/gg-theme
v0.1.0
Published
Coordinated light and dark CSS variables for web apps. Tailwind v4 and shadcn/ui compatible.
Maintainers
Readme
gg-theme
Coordinated light and dark CSS variables for web apps. Generated from a single OKLCH palette so light and dark stay perceptually balanced. Compatible with Tailwind CSS v4, shadcn/ui, and any tool that reads CSS custom properties.
Install
npm install @gjermundgaraba/gg-themeUse
Plain CSS
@import "@gjermundgaraba/gg-theme";Then toggle modes by adding class="dark" to <html> (manually, with next-themes, or any other theme manager). The base :root block is light; .dark overrides every token.
Tailwind CSS v4
@import "tailwindcss";
@import "@gjermundgaraba/gg-theme/tailwind";@gjermundgaraba/gg-theme/tailwind re-exports all tokens through @theme inline, so utilities like bg-background, text-foreground, bg-primary, border-border, bg-chart-1 work out of the box. The bundled @custom-variant dark matches the .dark class.
shadcn/ui
shadcn components reference tokens by their bare names (--background, --primary, …) which is exactly the contract this package emits. Drop the import in globals.css and remove shadcn's default block.
Tokens
| Surface | Foreground | Used for |
| --- | --- | --- |
| background | foreground | Page chrome and body text. |
| card | card-foreground | Elevated panels, sheets, dialogs. |
| popover | popover-foreground | Floating menus, tooltips, popovers. |
| primary | primary-foreground | Brand action: primary buttons, active links. |
| secondary | secondary-foreground | Quiet alternative action. |
| muted | muted-foreground | Subdued surfaces and metadata text. |
| accent | accent-foreground | Hover and highlight surfaces. |
| destructive | destructive-foreground | Delete, irreversible actions, errors. |
| success | success-foreground | Confirmations, completed state. |
| warning | warning-foreground | Attention, recoverable issues. |
| info | info-foreground | Neutral informational state. |
| Token | Used for |
| --- | --- |
| border | Default 1px borders. |
| input | Form-control borders, slightly stronger than border. |
| ring | Focus ring. |
| selection / selection-foreground | Text selection. |
| chart-1 … chart-5 | Qualitative data viz palette. |
| radius | Base corner radius (Tailwind derives radius-sm/md/lg/xl). |
Files
| Export | Path |
| --- | --- |
| @gjermundgaraba/gg-theme | index.css, base CSS variables (:root + .dark). |
| @gjermundgaraba/gg-theme/tailwind | tailwind.css, Tailwind v4 @theme inline mapping. |
| @gjermundgaraba/gg-theme/primitives | primitives.css, un-roled OKLCH custom properties for downstream layers. |
| @gjermundgaraba/gg-theme/tokens | tokens.json, raw token values for tooling. |
Notes
Colors are generated in OKLCH with a fixed surface and accent hue. Borders use color-mix against --foreground, so they self-tune in both modes. Status foregrounds are pre-paired and meet WCAG AA against their surface.
