shadcn-theme-default
使用 OKLCH CSS 变量、Tailwind v4 集成和暗模式支持强制执行默认 shadcn/ui 中性主题(黑/白/灰)
安装 / 下载方式
TotalClaw CLI推荐
totalclaw install totalclaw:totalclaw~guifav-shadcn-theme-defaultcURL直接下载,无需登录
curl -fsSL https://skills.taituai.com/api/skills/totalclaw%3Atotalclaw~guifav-shadcn-theme-default/file -o guifav-shadcn-theme-default.md## 概述(中文)
使用 OKLCH CSS 变量、Tailwind v4 集成和暗模式支持强制执行默认 shadcn/ui 中性主题(黑/白/灰)
## 原文
# shadcn/ui Default Theme — Neutral (Black/White/Gray)
You are a frontend engineer responsible for applying and maintaining the default shadcn/ui Neutral theme across the project. When creating components, pages, layouts, or any visual element, you MUST use the theme tokens defined below. Never hardcode hex, RGB, or HSL values — always reference CSS variables via Tailwind utility classes.
This skill only modifies CSS and Tailwind configuration files. It never reads or modifies `.env`, `.env.local`, or credential files.
## Planning Protocol (MANDATORY — execute before ANY action)
Before modifying any styling file or component, you MUST complete this planning phase:
1. **Understand the request.** Determine what visual change is needed: new component styling, theme adjustment, dark mode fix, or full theme setup.
2. **Survey the current state.** Check: (a) `src/app/globals.css` (or equivalent) for existing CSS variables, (b) `tailwind.config.ts` or `@theme` directives for Tailwind integration, (c) `components.json` for shadcn/ui configuration, (d) whether dark mode is already configured. Do NOT read `.env` or credential files.
3. **Build an execution plan.** Write out which files will be created or modified and in what order. Theme variables must be set before component styling.
4. **Identify risks.** Flag: (a) overwriting custom theme values the user may have set, (b) breaking existing component styles by changing variable names, (c) Tailwind version incompatibility (v3 uses `hsl()`, v4 uses `oklch()`).
5. **Execute sequentially.** Apply changes in order: CSS variables first, then Tailwind config, then component updates.
6. **Summarize.** Report what changed and confirm both light and dark modes render correctly.
Do NOT skip this protocol.
---
## Theme Architecture
shadcn/ui uses CSS custom properties (variables) following a **background/foreground** naming convention:
- The **background** variable (e.g., `--primary`) is used for the element's fill/background.
- The **foreground** variable (e.g., `--primary-foreground`) is used for text/icons on top of that background.
In Tailwind, these map to:
- `bg-primary` uses `var(--primary)`
- `text-primary-foreground` uses `var(--primary-foreground)`
The color space is **OKLCH** (Oklab Lightness Chroma Hue), which is perceptually uniform and the default in shadcn/ui since Tailwind v4.
---
## Complete CSS Variables — Default Neutral Theme
### Light Mode (`:root`)
```css
:root {
/* Border radius */
--radius: 0.625rem;
/* Core surfaces */
--background: oklch(1 0 0); /* pure white */
--foreground: oklch(0.145 0 0); /* near black */
/* Card */
--card: oklch(1 0 0);
--card-foreground: oklch(0.145 0 0);
/* Popover */
--popover: oklch(1 0 0);
--popover-foreground: oklch(0.145 0 0);
/* Primary — used for main CTA buttons, links, active states */
--primary: oklch(0.205 0 0); /* very dark gray / near black */
--primary-foreground: oklch(0.985 0 0); /* near white */
/* Secondary — used for secondary buttons, subtle backgrounds */
--secondary: oklch(0.97 0 0); /* very light gray */
--secondary-foreground: oklch(0.205 0 0);
/* Muted — used for disabled states, placeholder text backgrounds */
--muted: oklch(0.97 0 0);
--muted-foreground: oklch(0.556 0 0); /* medium gray */
/* Accent — used for hover states, highlighted items */
--accent: oklch(0.97 0 0);
--accent-foreground: oklch(0.205 0 0);
/* Destructive — used for delete buttons, error states */
--destructive: oklch(0.577 0.245 27.325); /* red */
--destructive-foreground: oklch(0.985 0 0);
/* Borders and inputs */
--border: oklch(0.922 0 0); /* light gray border */
--input: oklch(0.922 0 0); /* input border */
--ring: oklch(0.708 0 0); /* focus ring — medium gray */
/* Chart colors (for Recharts, Chart.js, etc.) */
--chart-1: oklch(0.646 0.222 41.116); /* warm orange */
--chart-2: oklch(0.6 0.118 184.704); /* teal */
--chart-3: oklch(0.398 0.07 227.392); /* dark blue */
--chart-4: oklch(0.828 0.189 84.429); /* yellow-green */
--chart-5: oklch(0.769 0.188 70.08); /* golden */
/* Sidebar */
--sidebar: oklch(0.985 0 0);
--sidebar-foreground: oklch(0.145 0 0);
--sidebar-primary: oklch(0.205 0 0);
--sidebar-primary-foreground: oklch(0.985 0 0);
--sidebar-accent: oklch(0.97 0 0);
--sidebar-accent-foreground: oklch(0.205 0 0);
--sidebar-border: oklch(0.922 0 0);
--sidebar-ring: oklch(0.708 0 0);
}
```
### Dark Mode (`.dark`)
```css
.dark {
/* Core surfaces */
--background: oklch(0.145 0 0); /* near black */
--foreground: oklch(0.985 0 0); /* near white */
/* Card */
--card: oklch(0.205 0 0); /* dark gray */
--card-foreground: oklch(0.985 0 0);
/* Popover */
--popover: oklch(0.269 0 0);
--popover-foreground: oklch(0.985 0 0);
/* Primary — inverted for dark mode */
--primary: oklch(0.922 0 0); /* light gray */
--primary-foreground: oklch(0.205 0 0); /* dark gray */
/* Secondary */
--secondary: oklch(0.269 0 0);
--secondary-foreground: oklch(0.985 0 0);
/* Muted */
--muted: oklch(0.269 0 0);
--muted-foreground: oklch(0.708 0 0);
/* Accent */
--accent: oklch(0.371 0 0);
--accent-foreground: oklch(0.985 0 0);
/* Destructive */
--destructive: oklch(0.704 0.191 22.216);
--destructive-foreground: oklch(0.985 0 0);
/* Borders and inputs — use alpha channel in dark mode */
--border: oklch(1 0 0 / 10%);
--input: oklch(1 0 0 / 15%);
--ring: oklch(0.556 0 0);
/* Chart colors (dark mode variants) */
--chart-1: oklch(0.488 0.243 264.376); /* blue-purple */
--chart-2: oklch(0.696 0.17 162.48); /* green-teal */
--chart-3: oklch(0.769 0.188 70.08); /* golden */
--chart-4: oklch(0.627 0.265 303.9); /* purple */
--chart-5: oklch(0.645 0.246 16.439); /* warm red */
/* Sidebar */
--sidebar: oklch(0.205 0 0);
--sidebar-foreground: oklch(0.985 0 0);
--sidebar-primary: oklch(0.488 0.243 264.376);
--sidebar-primary-foreground: oklch(0.985 0 0);
--sidebar-accent: oklch(0.269 0 0);
--sidebar-accent-foreground: oklch(0.985 0 0);
--sidebar-border: oklch(1 0 0 / 10%);
--sidebar-ring: oklch(0.439 0 0);
}
```
---
## Tailwind v4 Integration
In Tailwind v4, register the CSS variables as colors using the `@theme inline` directive. Add this to your main CSS file after the variable definitions:
```css
@theme inline {
--color-background: var(--background);
--color-foreground: var(--foreground);
--color-card: var(--card);
--color-card-foreground: var(--card-foreground);
--color-popover: var(--popover);
--color-popover-foreground: var(--popover-foreground);
--color-primary: var(--primary);
--color-primary-foreground: var(--primary-foreground);
--color-secondary: var(--secondary);
--color-secondary-foreground: var(--secondary-foreground);
--color-muted: var(--muted);
--color-muted-foreground: var(--muted-foreground);
--color-accent: var(--accent);
--color-accent-foreground: var(--accent-foreground);
--color-destructive: var(--destructive);
--color-destructive-foreground: var(--destructive-foreground);
--color-border: var(--border);
--color-input: var(--input);
--color-ring: var(--ring);
--color-chart-1: var(--chart-1);
--color-chart-2: var(--chart-2);
--color-chart-3: var(--chart-3);
--color-chart-4: var(--chart-4);
--color-chart-5: var(--chart-5);
--color-sidebar: var(--sidebar);
--color-sidebar-foreground: var(--sidebar-foreground);
--color-sidebar-primar