What problem does it solve? Applying or migrating a visual theme across a generated Next.js project often leads to inconsistent colors, broken dark mode, and hard-coded values scattered through components. This Skill enforces a registry-driven workflow so every theme change produces consistent semantic tokens in both light and dark modes. ## Core Features & Use Cases - Theme Registry Management: Register built-in or custom Luma/shadcn themes with light/dark token maps, preview swatches, and stable kebab-case ids. - Semantic Token Enforcement: Preserve semantic token names, reject arbitrary selectors, imports, and URLs, and tolerate pasted shadcn CSS by stripping fences, comments, and known legacy tokens. - Preview and Rollback: Capture the previous token file before applying a theme, validate contrast and surfaces in a live preview, and restore the prior file if validation fails. - Use Case: A template needs its own palette. Register luma-cv-indigo via defineBuiltInTheme() in lib/themes/registry.ts, add matching swatch CSS in app/globals.css, and point the template at the new id so it appears in the Create Project modal. ## Quick Start Apply the luma-indigo-emerald theme to this project and preview it in both light and dark modes.