{"version":3,"sources":["../src/utils/files.ts","../src/core/scanner.ts","../src/utils/regex.ts","../src/utils/hash.ts","../src/core/metrics.ts","../src/core/pattern-detector.ts","../src/config.ts","../src/utils/logger.ts","../src/utils/error-reporter.ts","../src/cli/analyze.ts","../src/core/consolidator.ts","../src/core/css-generator.ts","../src/core/transformer.ts","../src/core/css-purger.ts","../src/core/rehasher.ts","../src/cli/optimize.ts","../src/cli/report.ts","../src/cli/validate.ts","../src/cli/unused.ts","../src/cli/index.ts"],"names":["path","glob","readFile","writeFile","stat","copyFile","existsSync","require","createRequire","fileURLToPath","appendFile","os","chalk","readFileContent","postcss","crypto","rename","truncate","CSS_PATTERNS","extractClassFromSelector","Command"],"mappings":"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","file":"cli.cjs","sourcesContent":["/**\n * File utilities for Classpresso\n */\n\nimport { readFile, writeFile, stat, copyFile } from 'fs/promises';\nimport { glob } from 'glob';\nimport path from 'path';\nimport type { FileStats } from '../types/index.js';\n\n/**\n * Default file patterns to scan in build output\n *\n * These patterns support all major frameworks when pointing to their build directories:\n * - Next.js: --dir .next\n * - Astro: --dir dist\n * - Nuxt: --dir .output\n * - SvelteKit: --dir build (or .svelte-kit)\n * - Remix: --dir build\n * - Solid Start: --dir .output (or dist)\n * - Qwik: --dir dist\n * - Angular: --dir dist/[project-name]\n * - Gatsby: --dir public\n * - Vite/Vue/React: --dir dist\n * - Ember: --dir dist\n * - VitePress: --dir .vitepress/dist\n * - Docusaurus: --dir build\n * - Eleventy (11ty): --dir _site\n * - Hugo: --dir public\n * - Parcel: --dir dist\n * - Preact: --dir build (or dist)\n * - Gridsome: --dir dist\n * - RedwoodJS: --dir web/dist\n * - Webpack: --dir dist\n */\nexport const DEFAULT_PATTERNS = [\n  // === Next.js (.next directory) ===\n  // Client-side chunks\n  'static/chunks/**/*.js',\n  'static/css/**/*.css',\n  // Server components (Next.js App Router)\n  'server/app/**/*.js',\n  'server/app/**/*.html',\n  'server/app/**/*.rsc',\n  // Server chunks (contains Client Component code used for hydration)\n  'server/chunks/**/*.js',\n  // Standalone build (Next.js output: 'standalone')\n  'standalone/.next/static/chunks/**/*.js',\n  'standalone/.next/static/css/**/*.css',\n  'standalone/.next/server/app/**/*.js',\n  'standalone/.next/server/app/**/*.html',\n  'standalone/.next/server/app/**/*.rsc',\n  'standalone/.next/server/chunks/**/*.js',\n\n  // === Nuxt (.output directory) ===\n  'public/**/*.html',\n  'public/**/*.js',\n  'public/**/*.css',\n  'public/_nuxt/**/*.js',\n  'public/_nuxt/**/*.css',\n  'server/**/*.mjs',\n  'server/chunks/**/*.mjs',\n\n  // === SvelteKit (build directory) ===\n  // Static adapter output\n  '**/*.html',\n  '_app/**/*.js',\n  '_app/**/*.css',\n  // Node adapter output\n  'client/**/*.js',\n  'client/**/*.css',\n  'server/**/*.js',\n\n  // === Astro (dist directory) ===\n  '_astro/**/*.js',\n  '_astro/**/*.css',\n  // SSR/Hybrid build - Client assets\n  'client/_astro/**/*.js',\n  'client/_astro/**/*.css',\n\n  // === Remix (build directory) ===\n  'client/**/*.js',\n  'client/**/*.css',\n  'server/**/*.js',\n\n  // === Solid Start (.output or dist directory) ===\n  'public/**/*.html',\n  'public/**/*.js',\n  'public/**/*.css',\n  '_build/**/*.js',\n  '_build/**/*.css',\n\n  // === Qwik (dist directory) ===\n  'build/**/*.js',\n  'build/**/*.css',\n  'q-*.js',\n\n  // === Angular (dist/[project] directory) ===\n  // Angular 17+ uses browser subdirectory\n  'browser/**/*.js',\n  'browser/**/*.css',\n  'browser/**/*.html',\n  // Legacy Angular output\n  '*.js',\n  '*.css',\n  '*.html',\n\n  // === Gatsby (public directory) ===\n  'page-data/**/*.json',\n  '*.js',\n  '*.css',\n  '*.html',\n\n  // === Vite/Vue/React generic (dist directory) ===\n  'assets/**/*.js',\n  'assets/**/*.css',\n  'index.html',\n\n  // === Ember (dist directory) ===\n  'assets/**/*.js',\n  'assets/**/*.css',\n  '*.html',\n\n  // === VitePress (.vitepress/dist directory) ===\n  'assets/**/*.js',\n  'assets/**/*.css',\n  '**/*.html',\n\n  // === Docusaurus (build directory) ===\n  'assets/**/*.js',\n  'assets/**/*.css',\n  '**/*.html',\n\n  // === Eleventy/11ty (_site directory) ===\n  '**/*.html',\n  '**/*.js',\n  '**/*.css',\n\n  // === Hugo (public directory) ===\n  '**/*.html',\n  '**/*.js',\n  '**/*.css',\n\n  // === Parcel (dist directory) ===\n  '*.html',\n  '*.js',\n  '*.css',\n\n  // === Preact (build directory) ===\n  'bundle.js',\n  'bundle.*.js',\n  '*.css',\n  '*.html',\n\n  // === Gridsome (dist directory) ===\n  'assets/**/*.js',\n  'assets/**/*.css',\n  '**/*.html',\n\n  // === RedwoodJS (web/dist directory) ===\n  'static/**/*.js',\n  'static/**/*.css',\n  '*.html',\n\n  // === Webpack generic (dist directory) ===\n  '*.js',\n  '*.css',\n  '*.html',\n  'js/**/*.js',\n  'css/**/*.css',\n];\n\n/**\n * Find files matching patterns in a build directory\n */\nexport async function findFiles(\n  buildDir: string,\n  patterns: string[]\n): Promise<string[]> {\n  // Create full patterns and deduplicate\n  const globPatterns = [...new Set(patterns.map(p => path.join(buildDir, p)))];\n\n  // Use windowsPathsNoEscape for Windows compatibility\n  const allFiles = await glob(globPatterns, {\n    nodir: true,\n    windowsPathsNoEscape: true\n  });\n\n  // Remove duplicates (in case patterns overlap)\n  return [...new Set(allFiles)];\n}\n\n/**\n * Read file content as string\n */\nexport async function readFileContent(filePath: string): Promise<string> {\n  return readFile(filePath, 'utf-8');\n}\n\n/**\n * Write content to file\n */\nexport async function writeFileContent(\n  filePath: string,\n  content: string\n): Promise<void> {\n  await writeFile(filePath, content, 'utf-8');\n}\n\n/**\n * Get file size in bytes\n */\nexport async function getFileSize(filePath: string): Promise<number> {\n  const stats = await stat(filePath);\n  return stats.size;\n}\n\n/**\n * Create a backup of a file\n */\nexport async function backupFile(filePath: string): Promise<string> {\n  const backupPath = `${filePath}.classpresso-backup`;\n  await copyFile(filePath, backupPath);\n  return backupPath;\n}\n\n/**\n * Get file stats for a list of files\n */\nexport async function getFileStats(filePaths: string[]): Promise<FileStats[]> {\n  const stats: FileStats[] = [];\n\n  for (const filePath of filePaths) {\n    try {\n      const size = await getFileSize(filePath);\n      stats.push({\n        path: filePath,\n        originalSize: size,\n        modified: false,\n      });\n    } catch {\n      // Skip files that can't be read\n    }\n  }\n\n  return stats;\n}\n\n/**\n * Check if a file is a JavaScript file\n */\nexport function isJSFile(filePath: string): boolean {\n  return /\\.(js|mjs|cjs)$/.test(filePath);\n}\n\n/**\n * Check if a file is a CSS file\n */\nexport function isCSSFile(filePath: string): boolean {\n  return /\\.css$/.test(filePath);\n}\n\n/**\n * Check if a file is an HTML file\n */\nexport function isHTMLFile(filePath: string): boolean {\n  return /\\.(html|htm)$/.test(filePath);\n}\n\n/**\n * Check if a file is an RSC payload\n */\nexport function isRSCFile(filePath: string): boolean {\n  return /\\.rsc$/.test(filePath);\n}\n\n/**\n * Check if a file matches any exclusion pattern\n * Patterns can be glob-style (e.g., \"**\\/Demo*\", \"**\\/ClassTester*\")\n */\nexport function shouldExcludeFile(filePath: string, excludePatterns: string[]): boolean {\n  if (!excludePatterns || excludePatterns.length === 0) {\n    return false;\n  }\n\n  // Normalize path for consistent matching\n  const normalizedPath = filePath.replace(/\\\\/g, '/');\n\n  for (const pattern of excludePatterns) {\n    // Convert glob pattern to regex\n    // Support: ** (any path), * (any chars), ? (single char)\n    const regexPattern = pattern\n      .replace(/\\\\/g, '/')\n      .replace(/\\*\\*/g, '{{DOUBLESTAR}}')\n      .replace(/\\*/g, '[^/]*')\n      .replace(/\\?/g, '.')\n      .replace(/{{DOUBLESTAR}}/g, '.*');\n\n    const regex = new RegExp(regexPattern);\n    if (regex.test(normalizedPath)) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\n/**\n * Filter files to exclude those matching exclusion patterns\n */\nexport function filterExcludedFiles(files: string[], excludePatterns: string[]): string[] {\n  if (!excludePatterns || excludePatterns.length === 0) {\n    return files;\n  }\n\n  return files.filter(filePath => !shouldExcludeFile(filePath, excludePatterns));\n}\n","/**\n * Scanner - Extracts className patterns from build output\n */\n\nimport type {\n  ClasspressoConfig,\n  ClassOccurrence,\n  FileLocation,\n  ScanResult,\n  FileStats,\n  DynamicBasePattern,\n  SourceFileType,\n} from '../types/index.js';\nimport {\n  findFiles,\n  readFileContent,\n  getFileSize,\n  isJSFile,\n  isHTMLFile,\n  isRSCFile,\n  DEFAULT_PATTERNS,\n  filterExcludedFiles,\n} from '../utils/files.js';\nimport { ALL_CLASS_PATTERNS, isDynamicClassString, extractDynamicBaseStrings, extractConcatBaseStrings } from '../utils/regex.js';\n\n/**\n * Determine the source file type\n */\nfunction getSourceFileType(filePath: string): SourceFileType {\n  if (isHTMLFile(filePath)) return 'html';\n  if (isRSCFile(filePath)) return 'rsc';\n  return 'js';\n}\n\n/**\n * Check if pattern A's classes are a proper subset of pattern B's classes.\n * A is a proper subset of B if all classes in A are in B, and B has more classes.\n */\nexport function isProperSubset(classesA: string[], classesB: string[]): boolean {\n  if (classesA.length >= classesB.length) return false;\n\n  const setB = new Set(classesB);\n  return classesA.every(cls => setB.has(cls));\n}\n\n/**\n * Detect patterns that appear in JS but are subsets of HTML patterns.\n * These are likely className props that get merged with component classes.\n */\nexport function detectMergeablePatterns(\n  occurrences: Map<string, ClassOccurrence>\n): Set<string> {\n  const mergeablePatterns = new Set<string>();\n\n  // Get all JS-only patterns and HTML patterns\n  const jsPatterns: ClassOccurrence[] = [];\n  const htmlPatterns: ClassOccurrence[] = [];\n\n  for (const [, occurrence] of occurrences) {\n    if (occurrence.sourceTypes.has('js')) {\n      jsPatterns.push(occurrence);\n    }\n    if (occurrence.sourceTypes.has('html') || occurrence.sourceTypes.has('rsc')) {\n      htmlPatterns.push(occurrence);\n    }\n  }\n\n  // For each JS pattern, check if it's a subset of any HTML pattern\n  for (const jsPattern of jsPatterns) {\n    for (const htmlPattern of htmlPatterns) {\n      if (isProperSubset(jsPattern.classes, htmlPattern.classes)) {\n        // This JS pattern's classes appear as part of a larger HTML pattern\n        // It's likely a className prop that gets merged\n        mergeablePatterns.add(jsPattern.normalizedKey);\n        break;\n      }\n    }\n  }\n\n  return mergeablePatterns;\n}\n\n/**\n * Check if any class in a list contains a dynamic library prefix.\n * These are classes generated at runtime by libraries like lucide-react, heroicons, etc.\n */\nexport function containsDynamicPrefix(\n  classes: string[],\n  dynamicPrefixes: string[]\n): boolean {\n  for (const cls of classes) {\n    for (const prefix of dynamicPrefixes) {\n      // For prefixes ending with '-' (e.g., \"fa-\", \"icon-\"), just check startsWith\n      if (prefix.endsWith('-')) {\n        if (cls.startsWith(prefix)) {\n          return true;\n        }\n      } else {\n        // For prefixes without '-' (e.g., \"lucide\", \"fas\", \"far\", \"fab\"),\n        // match exact or followed by '-' to avoid false positives\n        // e.g., \"fab\" matches \"fab\" or \"fab-icon\", but not \"fabric\"\n        if (cls === prefix || cls.startsWith(prefix + '-')) {\n          return true;\n        }\n      }\n    }\n  }\n  return false;\n}\n\n/**\n * Check if a class occurrence is safe for SSR hydration.\n * A pattern is hydration-safe if it appears in BOTH:\n * - Server context (html or rsc)\n * - Client context (js)\n *\n * If a pattern only appears in one context, transforming it would cause\n * React hydration mismatches.\n */\nexport function isHydrationSafe(occurrence: ClassOccurrence): boolean {\n  const hasServerContext = occurrence.sourceTypes.has('html') || occurrence.sourceTypes.has('rsc');\n  const hasClientContext = occurrence.sourceTypes.has('js');\n\n  // Must appear in both server and client contexts to be safe\n  return hasServerContext && hasClientContext;\n}\n\n/**\n * Returns true for classes whose CSS rule cannot be expressed as flat declarations\n * on a single-class selector — i.e., classes that require a media query wrapper,\n * an @container wrapper, or a combinator child selector to function correctly.\n *\n * Consolidating these into a plain `.cp-xxx { ... }` rule silently drops the\n * wrapping context, producing a visually broken build with no warning.\n *\n * Detected categories:\n *  - Any variant prefix:    md:, hover:, dark:, focus:, group-hover:, data-[x]:, etc.\n *  - Container queries:     @sm, @md, @[800px], etc.\n *  - Combinator utilities:  space-x-*, space-y-*, divide-x-*, divide-y-*\n */\nexport function isNonFlattenableClass(className: string): boolean {\n  // Variant prefixes — any colon in the class name means it needs a wrapper\n  if (className.includes(':')) return true;\n  // Container queries\n  if (className.startsWith('@')) return true;\n  // Combinator utilities that generate child selectors like `.space-y-6 > :not(:last-child)`\n  if (/^space-[xy]/.test(className)) return true;\n  if (/^divide-[xy]/.test(className)) return true;\n  return false;\n}\n\n/**\n * Check if a class should be excluded based on config\n */\nexport function shouldExcludeClass(\n  className: string,\n  exclude: ClasspressoConfig['exclude']\n): boolean {\n  // Check prefix patterns\n  if (exclude.prefixes) {\n    for (const prefix of exclude.prefixes) {\n      if (className.startsWith(prefix)) return true;\n    }\n  }\n\n  // Check suffix patterns\n  if (exclude.suffixes) {\n    for (const suffix of exclude.suffixes) {\n      if (className.endsWith(suffix)) return true;\n    }\n  }\n\n  // Check exact matches\n  if (exclude.classes) {\n    if (exclude.classes.includes(className)) return true;\n  }\n\n  // Check regex patterns\n  if (exclude.patterns) {\n    for (const pattern of exclude.patterns) {\n      if (pattern.test(className)) return true;\n    }\n  }\n\n  return false;\n}\n\n/**\n * Normalize a class string for consistent comparison\n * - Splits into individual classes\n * - Removes excluded classes\n * - Sorts alphabetically\n * - Joins back together\n */\nexport function normalizeClassString(\n  classString: string,\n  exclude: ClasspressoConfig['exclude'],\n  excludeNonFlattenable: boolean = false\n): { normalized: string; classes: string[]; excludedClasses: string[] } {\n  const allClasses = classString.split(/\\s+/).filter(Boolean);\n  const includedClasses: string[] = [];\n  const excludedClasses: string[] = [];\n\n  for (const cls of allClasses) {\n    if (shouldExcludeClass(cls, exclude) || (excludeNonFlattenable && isNonFlattenableClass(cls))) {\n      excludedClasses.push(cls);\n    } else {\n      includedClasses.push(cls);\n    }\n  }\n\n  // Sort for consistent comparison\n  const sorted = [...includedClasses].sort();\n  return {\n    normalized: sorted.join(' '),\n    classes: includedClasses,\n    excludedClasses,\n  };\n}\n\n/**\n * Extract class strings from file content\n */\nexport function extractClassStrings(\n  content: string,\n  filePath: string\n): Array<{ classString: string; location: FileLocation }> {\n  const results: Array<{ classString: string; location: FileLocation }> = [];\n  const seen = new Set<string>();\n\n  for (const pattern of ALL_CLASS_PATTERNS) {\n    // Reset regex lastIndex\n    pattern.lastIndex = 0;\n\n    let match;\n    while ((match = pattern.exec(content)) !== null) {\n      const classString = match[1];\n\n      // Skip empty strings\n      if (!classString || !classString.trim()) continue;\n\n      // Skip dynamic expressions\n      if (isDynamicClassString(classString)) continue;\n\n      // Skip if already seen at this exact position (same file and character offset)\n      // This allows duplicate strings in the same file (e.g., bundled components)\n      // while avoiding double-counting from overlapping regex patterns\n      const key = `${filePath}:${match.index}:${classString}`;\n      if (seen.has(key)) continue;\n      seen.add(key);\n\n      // Calculate approximate line number\n      const beforeMatch = content.substring(0, match.index);\n      const line = (beforeMatch.match(/\\n/g) || []).length + 1;\n\n      results.push({\n        classString: classString.trim(),\n        location: {\n          filePath,\n          line,\n        },\n      });\n    }\n  }\n\n  return results;\n}\n\n/**\n * Scan build directory for className patterns\n */\nexport async function scanBuildOutput(\n  config: ClasspressoConfig\n): Promise<ScanResult> {\n  const occurrences = new Map<string, ClassOccurrence>();\n  const dynamicBasePatterns = new Map<string, DynamicBasePattern>();\n  const fileStats: FileStats[] = [];\n  const errors: string[] = [];\n\n  // Find all files to scan\n  const patterns = config.include.length > 0 ? config.include : DEFAULT_PATTERNS;\n  const allFiles = await findFiles(config.buildDir, patterns);\n\n  // Filter out excluded files\n  const files = filterExcludedFiles(allFiles, config.exclude.files || []);\n\n  if (config.verbose) {\n    console.log(`Found ${allFiles.length} files, scanning ${files.length} (${allFiles.length - files.length} excluded)`);\n  }\n\n  for (const filePath of files) {\n    try {\n      // Skip non-relevant file types\n      if (!isJSFile(filePath) && !isHTMLFile(filePath) && !isRSCFile(filePath)) {\n        continue;\n      }\n\n      const content = await readFileContent(filePath);\n      const size = await getFileSize(filePath);\n\n      fileStats.push({\n        path: filePath,\n        originalSize: size,\n        modified: false,\n      });\n\n      // Extract dynamic base patterns from JS files (for hydration safety)\n      // These include template literals with ${} and .concat() calls\n      if (isJSFile(filePath)) {\n        // Get bases from template literals: className:`base ${dynamic}`\n        const dynamicBases = extractDynamicBaseStrings(content);\n        // Get bases from concat calls: className:\"\".concat(\"base\", variant)\n        const concatBases = extractConcatBaseStrings(content);\n\n        // Combine all dynamic bases\n        const allDynamicBases = [...dynamicBases, ...concatBases];\n\n        for (const baseString of allDynamicBases) {\n          const { normalized, classes } = normalizeClassString(baseString, config.exclude, config.excludeNonFlattenableClasses);\n\n          // Skip if too few classes\n          if (classes.length < config.minClasses) continue;\n\n          const location: FileLocation = { filePath };\n\n          if (dynamicBasePatterns.has(normalized)) {\n            dynamicBasePatterns.get(normalized)!.locations.push(location);\n          } else {\n            dynamicBasePatterns.set(normalized, {\n              baseClasses: classes,\n              normalizedKey: normalized,\n              locations: [location],\n            });\n          }\n        }\n      }\n\n      const classStrings = extractClassStrings(content, filePath);\n      const sourceType = getSourceFileType(filePath);\n\n      for (const { classString, location } of classStrings) {\n        const { normalized, classes, excludedClasses } = normalizeClassString(\n          classString,\n          config.exclude,\n          config.excludeNonFlattenableClasses\n        );\n\n        // Skip if all classes were excluded\n        if (classes.length === 0) continue;\n\n        // Skip single classes (no benefit to consolidate)\n        if (classes.length < config.minClasses) continue;\n\n        // Skip patterns containing dynamic library prefixes (e.g., lucide-react, heroicons)\n        // These are generated at runtime and transforming them causes hydration mismatches\n        if (config.excludeDynamicPatterns && containsDynamicPrefix(classes, config.dynamicPrefixes)) {\n          continue;\n        }\n\n        if (occurrences.has(normalized)) {\n          const existing = occurrences.get(normalized)!;\n          existing.count++;\n          existing.locations.push(location);\n          existing.sourceTypes.add(sourceType);\n        } else {\n          occurrences.set(normalized, {\n            classString,\n            normalizedKey: normalized,\n            count: 1,\n            locations: [location],\n            classes,\n            excludedClasses,\n            sourceTypes: new Set([sourceType]),\n          });\n        }\n      }\n    } catch (err) {\n      errors.push(`Error scanning ${filePath}: ${err}`);\n    }\n  }\n\n  // Detect patterns that are likely className props that get merged\n  const mergeablePatterns = detectMergeablePatterns(occurrences);\n\n  if (config.verbose && mergeablePatterns.size > 0) {\n    console.log(`Found ${mergeablePatterns.size} patterns that appear to be merged className props`);\n  }\n\n  return {\n    occurrences,\n    files: fileStats,\n    errors,\n    dynamicBasePatterns,\n    mergeablePatterns,\n  };\n}\n","/**\n * Regex utilities for Classpresso\n */\n\n/**\n * Escape special regex characters in a string\n */\nexport function escapeRegex(str: string): string {\n  return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\n/**\n * Patterns to match className in various contexts\n */\nexport const CLASS_PATTERNS = {\n  // JSX: className=\"...\"\n  jsxDouble: /className\\s*=\\s*\"([^\"]+)\"/g,\n\n  // JSX: className='...'\n  jsxSingle: /className\\s*=\\s*'([^']+)'/g,\n\n  // React createElement: className:\"...\"\n  createElementDouble: /className\\s*:\\s*\"([^\"]+)\"/g,\n\n  // React createElement: className:'...'\n  createElementSingle: /className\\s*:\\s*'([^']+)'/g,\n\n  // Minified: \"className\",\"...\"\n  minifiedComma: /\"className\"\\s*,\\s*\"([^\"]+)\"/g,\n\n  // HTML: class=\"...\"\n  htmlDouble: /\\bclass\\s*=\\s*\"([^\"]+)\"/g,\n\n  // HTML: class='...'\n  htmlSingle: /\\bclass\\s*=\\s*'([^']+)'/g,\n\n  // HTML entity encoded: class=&quot;...&quot;\n  htmlEntityDouble: /\\bclass=&quot;([^&]+)&quot;/g,\n\n  // HTML entity encoded: class=&#34;...&#34; (numeric entity)\n  htmlNumericDouble: /\\bclass=&#34;([^&]+)&#34;/g,\n\n  // RSC payload: \\\"className\\\":\\\"...\\\" (escaped JSON in Next.js RSC payloads)\n  rscPayload: /\\\\\"className\\\\\"\\s*:\\s*\\\\\"([^\"\\\\]+)\\\\\"/g,\n\n  // Vue/Quasar createElement: class:\"...\" (Vue uses 'class' not 'className')\n  vueCreateElementDouble: /\\bclass\\s*:\\s*\"([^\"]+)\"/g,\n\n  // Vue/Quasar createElement: class:'...'\n  vueCreateElementSingle: /\\bclass\\s*:\\s*'([^']+)'/g,\n\n  // JSX: className=`...` (static template literal, no dynamic expressions)\n  jsxBacktick: /className\\s*=\\s*`([^`$]+)`/g,\n\n  // React createElement: className:`...` (static template literal, no dynamic expressions)\n  createElementBacktick: /className\\s*:\\s*`([^`$]+)`/g,\n};\n\n/**\n * All patterns combined for extraction\n */\nexport const ALL_CLASS_PATTERNS = [\n  CLASS_PATTERNS.jsxDouble,\n  CLASS_PATTERNS.jsxSingle,\n  CLASS_PATTERNS.createElementDouble,\n  CLASS_PATTERNS.createElementSingle,\n  CLASS_PATTERNS.minifiedComma,\n  CLASS_PATTERNS.htmlDouble,\n  CLASS_PATTERNS.htmlSingle,\n  CLASS_PATTERNS.htmlEntityDouble,\n  CLASS_PATTERNS.htmlNumericDouble,\n  CLASS_PATTERNS.rscPayload,\n  CLASS_PATTERNS.vueCreateElementDouble,\n  CLASS_PATTERNS.vueCreateElementSingle,\n  CLASS_PATTERNS.jsxBacktick,\n  CLASS_PATTERNS.createElementBacktick,\n];\n\n/**\n * Check if a class string contains dynamic expressions\n */\nexport function isDynamicClassString(classString: string): boolean {\n  // Template literal expression\n  if (classString.includes('${')) return true;\n\n  // Ternary operator (likely dynamic)\n  if (/\\s*\\?\\s*/.test(classString) && classString.includes(':')) return true;\n\n  // Function call\n  if (/\\w+\\s*\\(/.test(classString)) return true;\n\n  // Variable reference (camelCase or UPPER_CASE that's not a valid class)\n  if (/^[a-z][a-zA-Z0-9]*$/.test(classString) && !classString.includes('-')) return true;\n\n  return false;\n}\n\n/**\n * Patterns to extract the static base portion of template literal class names\n * These capture the static classes before the ${...} dynamic expression\n */\nexport const DYNAMIC_BASE_PATTERNS = [\n  // className:`base classes ${...}`\n  /className\\s*:\\s*`([^`$]+)\\s*\\$\\{/g,\n  // className=`base classes ${...}` (JSX)\n  /className\\s*=\\s*`([^`$]+)\\s*\\$\\{/g,\n  // class:`base classes ${...}` (rare but possible)\n  /\\bclass\\s*:\\s*`([^`$]+)\\s*\\$\\{/g,\n];\n\n/**\n * Patterns to extract the static base portion of .concat() calls\n * Minified React often uses \"\".concat(\"base\", \" \", variant) for className\n * These are treated as dynamic and should be skipped\n */\nexport const CONCAT_BASE_PATTERNS = [\n  // className:\"\".concat(\"base classes\",...) - the base before concat\n  /className\\s*:\\s*\"\"\\s*\\.concat\\s*\\(\\s*\"([^\"]+)\"/g,\n  // className:''.concat('base classes',...)\n  /className\\s*:\\s*''\\s*\\.concat\\s*\\(\\s*'([^']+)'/g,\n];\n\n/**\n * Extract static base patterns from .concat() calls\n * Returns the static class portion from the first concat argument\n */\nexport function extractConcatBaseStrings(content: string): string[] {\n  const results: string[] = [];\n\n  for (const pattern of CONCAT_BASE_PATTERNS) {\n    pattern.lastIndex = 0;\n    let match;\n    while ((match = pattern.exec(content)) !== null) {\n      const baseString = match[1]?.trim();\n      if (baseString && baseString.length > 0) {\n        results.push(baseString);\n      }\n    }\n  }\n\n  return results;\n}\n\n/**\n * Extract static base patterns from template literals with dynamic expressions\n * Returns the static class portion before ${...}\n */\nexport function extractDynamicBaseStrings(\n  content: string\n): string[] {\n  const results: string[] = [];\n\n  for (const pattern of DYNAMIC_BASE_PATTERNS) {\n    pattern.lastIndex = 0;\n    let match;\n    while ((match = pattern.exec(content)) !== null) {\n      const baseString = match[1]?.trim();\n      if (baseString && baseString.length > 0) {\n        results.push(baseString);\n      }\n    }\n  }\n\n  return results;\n}\n\n/**\n * Create a replacement pattern for a class string\n */\nexport function createReplacementPatterns(original: string): RegExp[] {\n  const escaped = escapeRegex(original);\n\n  return [\n    new RegExp(`(className\\\\s*=\\\\s*)\"${escaped}\"`, 'g'),\n    new RegExp(`(className\\\\s*=\\\\s*)'${escaped}'`, 'g'),\n    new RegExp(`(className\\\\s*:\\\\s*)\"${escaped}\"`, 'g'),\n    new RegExp(`(className\\\\s*:\\\\s*)'${escaped}'`, 'g'),\n    new RegExp(`(\"className\"\\\\s*,\\\\s*)\"${escaped}\"`, 'g'),\n    new RegExp(`(class\\\\s*=\\\\s*)\"${escaped}\"`, 'g'),\n    new RegExp(`(class\\\\s*=\\\\s*)'${escaped}'`, 'g'),\n    // HTML entity encoded quotes\n    new RegExp(`(class=&quot;)${escaped}(&quot;)`, 'g'),\n    new RegExp(`(class=&#34;)${escaped}(&#34;)`, 'g'),\n    // Vue/Quasar class: syntax\n    new RegExp(`(\\\\bclass\\\\s*:\\\\s*)\"${escaped}\"`, 'g'),\n    new RegExp(`(\\\\bclass\\\\s*:\\\\s*)'${escaped}'`, 'g'),\n    // Static template literals\n    new RegExp(`(className\\\\s*=\\\\s*)\\`${escaped}\\``, 'g'),\n    new RegExp(`(className\\\\s*:\\\\s*)\\`${escaped}\\``, 'g'),\n  ];\n}\n","/**\n * Hash generation utilities for Classpresso\n */\n\nimport crypto from 'crypto';\n\n// Base36 alphabet: a-z then 0-9 (letters first for valid CSS class names)\nconst ALPHABET = 'abcdefghijklmnopqrstuvwxyz0123456789';\nconst BASE = ALPHABET.length; // 36\n\n/**\n * Calculate the minimum hash length needed for a given count of patterns\n * Uses base36 (a-z, 0-9) for 36 possible characters per position\n */\nexport function calculateMinHashLength(count: number): number {\n  if (count <= 0) return 1;\n  // How many characters needed to represent `count` unique values in base36\n  return Math.max(1, Math.ceil(Math.log(count + 1) / Math.log(BASE)));\n}\n\n/**\n * Generate a sequential short name from an index\n * 0 -> 'a', 1 -> 'b', ..., 35 -> '9', 36 -> 'aa', 37 -> 'ab', ...\n */\nexport function generateSequentialName(index: number, prefix: string = 'cp-'): string {\n  let result = '';\n  let n = index;\n\n  do {\n    result = ALPHABET[n % BASE] + result;\n    n = Math.floor(n / BASE) - 1;\n  } while (n >= 0);\n\n  return `${prefix}${result}`;\n}\n\n/**\n * Generate sequential names for a list of items\n * Returns the shortest possible names based on total count\n */\nexport function generateSequentialNames(\n  count: number,\n  prefix: string = 'cp-'\n): string[] {\n  const names: string[] = [];\n  for (let i = 0; i < count; i++) {\n    names.push(generateSequentialName(i, prefix));\n  }\n  return names;\n}\n\n/**\n * Generate a hash-based class name from a normalized class string\n * @deprecated Use generateSequentialName for shorter names\n */\nexport function generateHashName(\n  normalizedClassString: string,\n  prefix: string = 'cp-',\n  length: number = 5\n): string {\n  const hash = crypto\n    .createHash('md5')\n    .update(normalizedClassString)\n    .digest('hex')\n    .substring(0, length);\n\n  return `${prefix}${hash}`;\n}\n\n/**\n * Resolve hash collisions by appending a suffix\n */\nexport function resolveCollisions<T extends { hashName: string; normalizedKey: string }>(\n  candidates: T[]\n): T[] {\n  const hashMap = new Map<string, T>();\n\n  for (const candidate of candidates) {\n    let hash = candidate.hashName;\n    let suffix = 0;\n\n    // Check for collision with different content\n    while (\n      hashMap.has(hash) &&\n      hashMap.get(hash)!.normalizedKey !== candidate.normalizedKey\n    ) {\n      suffix++;\n      hash = `${candidate.hashName}${suffix}`;\n    }\n\n    candidate.hashName = hash;\n    hashMap.set(hash, candidate);\n  }\n\n  return candidates;\n}\n","/**\n * Metrics - Calculate and format optimization metrics\n */\n\nimport type {\n  ConsolidationCandidate,\n  FileStats,\n  OptimizationMetrics,\n  TransformResult,\n} from '../types/index.js';\n\n/**\n * Calculate optimization metrics\n */\nexport function calculateMetrics(\n  candidates: ConsolidationCandidate[],\n  originalFiles: FileStats[],\n  transformResult: TransformResult,\n  cssOverhead: number\n): OptimizationMetrics {\n  const totalBytesSaved = candidates.reduce((sum, c) => sum + c.bytesSaved, 0);\n  const netSavings = totalBytesSaved - cssOverhead;\n\n  const originalTotalBytes = originalFiles.reduce((sum, f) => sum + f.originalSize, 0);\n  const optimizedTotalBytes = originalTotalBytes - netSavings;\n\n  // Estimate browser impact\n  // Based on research: ~0.1ms per KB of class parsing saved\n  const estimatedParseTimeSavedMs = Math.max(0, (netSavings / 1024) * 0.1);\n  const estimatedRenderTimeSavedMs = estimatedParseTimeSavedMs * 0.5;\n\n  return {\n    totalFilesScanned: originalFiles.length,\n    totalFilesModified: transformResult.filesModified,\n\n    totalClassStringsFound: candidates.reduce((sum, c) => sum + c.frequency, 0),\n    uniqueClassPatterns: candidates.length,\n    consolidatedPatterns: candidates.filter((c) => c.frequency >= 2).length,\n    totalOccurrencesReplaced: candidates.reduce((sum, c) => sum + c.frequency, 0),\n\n    originalTotalBytes,\n    optimizedTotalBytes,\n    bytesSaved: totalBytesSaved,\n    percentageReduction: originalTotalBytes > 0\n      ? (netSavings / originalTotalBytes) * 100\n      : 0,\n\n    originalCSSBytes: 0, // Would need to track CSS separately\n    consolidatedCSSBytes: cssOverhead,\n    netCSSChange: cssOverhead,\n\n    estimatedParseTimeSavedMs,\n    estimatedRenderTimeSavedMs,\n\n    topConsolidations: candidates.slice(0, 10).map((c) => ({\n      original: c.classString,\n      consolidated: c.hashName,\n      frequency: c.frequency,\n      bytesSaved: c.bytesSaved,\n    })),\n  };\n}\n\n/**\n * Calculate CSS overhead for a single pattern\n * More accurate estimation based on actual CSS output\n */\nexport function calculatePatternCSSOverhead(classes: string[]): number {\n  // Base overhead: selector + braces + newlines = ~15 bytes\n  // e.g., \".cp-a7b2c {\\n}\\n\" = ~15 bytes\n  const baseOverhead = 15;\n\n  // Per-class overhead: property: value; + newline = ~20 bytes average\n  // e.g., \"  display: flex;\\n\" = ~18 bytes\n  const perClassOverhead = 20;\n\n  return baseOverhead + (classes.length * perClassOverhead);\n}\n\n/**\n * Estimate CSS overhead from consolidated classes\n */\nexport function estimateCSSOverhead(candidates: ConsolidationCandidate[]): number {\n  return candidates.reduce((sum, c) => {\n    return sum + calculatePatternCSSOverhead(c.classes);\n  }, 0);\n}\n\n/**\n * Check if a pattern has net positive savings\n */\nexport function hasNetPositiveSavings(candidate: ConsolidationCandidate): boolean {\n  const cssOverhead = calculatePatternCSSOverhead(candidate.classes);\n  return candidate.bytesSaved > cssOverhead;\n}\n\n/**\n * Calculate net savings for a pattern\n */\nexport function calculateNetSavings(candidate: ConsolidationCandidate): number {\n  const cssOverhead = calculatePatternCSSOverhead(candidate.classes);\n  return candidate.bytesSaved - cssOverhead;\n}\n\n/**\n * Format bytes for display\n */\nexport function formatBytes(bytes: number): string {\n  if (bytes === 0) return '0 B';\n\n  const sign = bytes < 0 ? '-' : '';\n  const absBytes = Math.abs(bytes);\n\n  if (absBytes < 1024) {\n    return `${sign}${absBytes} B`;\n  } else if (absBytes < 1024 * 1024) {\n    return `${sign}${(absBytes / 1024).toFixed(2)} KB`;\n  } else {\n    return `${sign}${(absBytes / (1024 * 1024)).toFixed(2)} MB`;\n  }\n}\n\n/**\n * Format percentage for display\n */\nexport function formatPercentage(value: number): string {\n  return `${value.toFixed(2)}%`;\n}\n\n/**\n * Format time in milliseconds\n */\nexport function formatTime(ms: number): string {\n  if (ms < 1) {\n    return `${(ms * 1000).toFixed(2)}μs`;\n  } else if (ms < 1000) {\n    return `${ms.toFixed(2)}ms`;\n  } else {\n    return `${(ms / 1000).toFixed(2)}s`;\n  }\n}\n","/**\n * Pattern Detector - Identifies patterns worth consolidating\n */\n\nimport type {\n  ClasspressoConfig,\n  ClassOccurrence,\n  ConsolidationCandidate,\n} from '../types/index.js';\nimport { generateSequentialName } from '../utils/hash.js';\nimport { calculatePatternCSSOverhead } from './metrics.js';\nimport { isHydrationSafe } from './scanner.js';\n\n/**\n * Calculate bytes saved by consolidating a pattern\n */\nexport function calculateBytesSaved(\n  original: string,\n  hashName: string,\n  frequency: number,\n  excludedClasses: string[]\n): number {\n  // Original: \"flex flex-col gap-2 js-hook\" (with excluded)\n  // New: \"cp-a7b2c js-hook\"\n\n  // We're replacing the included classes portion only\n  const originalLength = original.length;\n  const excludedLength = excludedClasses.join(' ').length;\n  const includedLength = originalLength - excludedLength - (excludedClasses.length > 0 ? 1 : 0);\n\n  // New length is just the hash name\n  const newLength = hashName.length;\n\n  // Savings per occurrence\n  const savingsPerOccurrence = includedLength - newLength;\n\n  // Total savings across all occurrences\n  return savingsPerOccurrence * frequency;\n}\n\n/**\n * Detect patterns that are worth consolidating\n * Uses sequential naming (cp-a, cp-b, etc.) for shortest possible class names\n * @param occurrences - Map of pattern occurrences from scanner\n * @param config - Classpresso configuration\n * @param mergeablePatterns - Patterns that would be skipped in JS but not HTML (for SSR mode)\n */\nexport function detectConsolidatablePatterns(\n  occurrences: Map<string, ClassOccurrence>,\n  config: ClasspressoConfig,\n  mergeablePatterns?: Set<string>\n): ConsolidationCandidate[] {\n  // First pass: collect all valid candidates (without names yet)\n  const preliminaryCandidates: Array<{\n    occurrence: ClassOccurrence;\n    cssOverhead: number;\n  }> = [];\n\n  for (const [, occurrence] of occurrences) {\n    // Filter by minimum occurrences\n    if (occurrence.count < config.minOccurrences) continue;\n\n    // Filter by minimum classes\n    if (occurrence.classes.length < config.minClasses) continue;\n\n    // SSR mode: only transform patterns found in BOTH server and client contexts\n    // This prevents React hydration mismatches\n    if (config.ssr && !isHydrationSafe(occurrence)) {\n      continue;\n    }\n\n    // SSR mode: skip mergeable patterns to prevent hydration mismatches\n    // These are patterns that appear as className props in JS but get merged\n    // with component classes in HTML. If we consolidate in HTML but skip in JS,\n    // we get a mismatch. So we skip the pattern entirely in SSR mode.\n    if (config.ssr && mergeablePatterns && mergeablePatterns.has(occurrence.normalizedKey)) {\n      continue;\n    }\n\n    // Skip patterns that have excluded classes if skipPatternsWithExcludedClasses is enabled\n    // This prevents issues like \"hidden md:flex\" becoming \"_cp-xxx md:flex\" where\n    // the consolidated class has display:none that overrides the responsive md:flex\n    if (config.skipPatternsWithExcludedClasses && occurrence.excludedClasses.length > 0) {\n      continue;\n    }\n\n    const cssOverhead = calculatePatternCSSOverhead(occurrence.classes);\n    preliminaryCandidates.push({ occurrence, cssOverhead });\n  }\n\n  // Sort by frequency (highest first) for best sequential name assignment\n  // Most frequent patterns get shortest names (cp-a, cp-b, etc.)\n  preliminaryCandidates.sort((a, b) => b.occurrence.count - a.occurrence.count);\n\n  // Second pass: filter candidates that will have positive savings\n  // Use a placeholder name length estimate for initial filtering\n  const filteredCandidates: Array<{\n    occurrence: ClassOccurrence;\n    cssOverhead: number;\n  }> = [];\n\n  for (const { occurrence, cssOverhead } of preliminaryCandidates) {\n    // Estimate name length: cp-a (4 bytes) for first 36, cp-aa (5 bytes) for next, etc.\n    const estimatedNameLength = config.hashPrefix.length + 1; // Conservative estimate\n\n    // Calculate estimated bytes saved\n    const estimatedBytesSaved = calculateBytesSaved(\n      occurrence.classString,\n      'x'.repeat(estimatedNameLength), // placeholder\n      occurrence.count,\n      occurrence.excludedClasses\n    );\n\n    // Filter by minimum bytes saved\n    if (estimatedBytesSaved < config.minBytesSaved) continue;\n\n    // Filter by net positive savings (bytes saved > CSS overhead)\n    // Skip this check if forceAll is enabled (for React hydration consistency)\n    if (!config.forceAll) {\n      if (estimatedBytesSaved <= cssOverhead) continue;\n    }\n\n    filteredCandidates.push({ occurrence, cssOverhead });\n  }\n\n  // Third pass: assign sequential names to only the filtered candidates\n  const candidates: ConsolidationCandidate[] = [];\n\n  for (let i = 0; i < filteredCandidates.length; i++) {\n    const { occurrence } = filteredCandidates[i];\n\n    // Generate sequential name (cp-a, cp-b, cp-c, ...)\n    const hashName = generateSequentialName(i, config.hashPrefix);\n\n    // Calculate actual bytes saved with real name\n    const bytesSaved = calculateBytesSaved(\n      occurrence.classString,\n      hashName,\n      occurrence.count,\n      occurrence.excludedClasses\n    );\n\n    candidates.push({\n      classString: occurrence.classString,\n      normalizedKey: occurrence.normalizedKey,\n      frequency: occurrence.count,\n      bytesSaved,\n      classes: occurrence.classes,\n      excludedClasses: occurrence.excludedClasses,\n      hashName,\n    });\n  }\n\n  // Sort by bytes saved (highest first)\n  return candidates.sort((a, b) => b.bytesSaved - a.bytesSaved);\n}\n\n/**\n * Get summary statistics for detected patterns\n */\nexport function getPatternSummary(candidates: ConsolidationCandidate[]): {\n  totalPatterns: number;\n  totalOccurrences: number;\n  totalBytesSaved: number;\n  avgFrequency: number;\n  avgClassesPerPattern: number;\n} {\n  const totalPatterns = candidates.length;\n  const totalOccurrences = candidates.reduce((sum, c) => sum + c.frequency, 0);\n  const totalBytesSaved = candidates.reduce((sum, c) => sum + c.bytesSaved, 0);\n  const totalClasses = candidates.reduce((sum, c) => sum + c.classes.length, 0);\n\n  return {\n    totalPatterns,\n    totalOccurrences,\n    totalBytesSaved,\n    avgFrequency: totalPatterns > 0 ? totalOccurrences / totalPatterns : 0,\n    avgClassesPerPattern: totalPatterns > 0 ? totalClasses / totalPatterns : 0,\n  };\n}\n","/**\n * Configuration loader for Classpresso\n */\n\nimport { readFileContent } from './utils/files.js';\nimport { stat } from 'fs/promises';\nimport { existsSync } from 'fs';\nimport path from 'path';\nimport type { ClasspressoConfig } from './types/index.js';\n\n/**\n * Build directory candidates in priority order.\n * When multiple exist, we use the most recently modified.\n */\nexport const BUILD_DIR_CANDIDATES = [\n  '.next',           // Next.js\n  'dist',            // Vite, Angular, generic\n  'build',           // Create React App, Remix, Docusaurus\n  '.output',         // Nuxt 3, Solid Start\n  '.svelte-kit',     // SvelteKit (intermediate)\n  'public',          // Gatsby, Hugo\n  '_site',           // Eleventy\n  'out',             // Next.js static export\n  '.vitepress/dist', // VitePress\n  'web/dist',        // RedwoodJS\n];\n\n/**\n * Default prefixes that indicate dynamically-generated classes from icon/component libraries.\n * Patterns containing these will be skipped to prevent hydration mismatches.\n */\nexport const DEFAULT_DYNAMIC_PREFIXES = [\n  'lucide',      // lucide-react icons\n  'heroicon',    // heroicons\n  'icon-',       // generic icon patterns\n  'fa-',         // Font Awesome\n  'fas',         // Font Awesome solid\n  'far',         // Font Awesome regular\n  'fab',         // Font Awesome brands\n  'material-icons', // Material Design Icons\n  'mdi-',        // Material Design Icons (alternative)\n  'ri-',         // Remix Icons\n  'bi-',         // Bootstrap Icons\n  'tabler-',     // Tabler Icons\n  'phosphor-',   // Phosphor Icons\n];\n\n/**\n * Default configuration\n */\nexport const DEFAULT_CONFIG: ClasspressoConfig = {\n  buildDir: '.next',\n  minOccurrences: 2,\n  minClasses: 2,\n  minBytesSaved: 10,\n  hashPrefix: 'cp-',\n  hashLength: 5,\n  exclude: {\n    prefixes: ['js-', 'data-', 'hook-', 'track-'],\n    suffixes: ['-handler', '-trigger'],\n    classes: [],\n    patterns: [/^qa-/, /^test-/, /^e2e-/],\n    files: [],\n  },\n  include: [],\n  cssLayer: false,\n  dataAttributes: false,\n  manifest: true,\n  backup: false,\n  verbose: false,\n  forceAll: false,\n  excludeDynamicPatterns: true,\n  dynamicPrefixes: DEFAULT_DYNAMIC_PREFIXES,\n  skipPatternsWithExcludedClasses: true,\n  ssr: false,\n  debug: false,\n  sendErrorReports: false,\n  errorReportUrl: undefined,\n  excludeNonFlattenableClasses: true,\n  purgeUnusedCSS: false,\n  rehashAssets: true,\n  purgeSafelist: [\n    /^js-/,      // JavaScript hooks\n    /^data-/,    // Data attributes used as classes\n    /^is-/,      // State classes\n    /^has-/,     // State classes\n    /^active$/,\n    /^disabled$/,\n    /^hidden$/,\n    /^visible$/,\n  ],\n};\n\n/**\n * Load configuration from file or use defaults\n */\nexport async function loadConfig(buildDir?: string): Promise<ClasspressoConfig> {\n  const config = { ...DEFAULT_CONFIG };\n\n  if (buildDir) {\n    config.buildDir = buildDir;\n  }\n\n  // Try to load config file from current directory\n  const configPaths = [\n    'classpresso.config.js',\n    'classpresso.config.mjs',\n    'classpresso.config.json',\n  ];\n\n  for (const configPath of configPaths) {\n    try {\n      const fullPath = path.resolve(process.cwd(), configPath);\n\n      if (configPath.endsWith('.json')) {\n        const content = await readFileContent(fullPath);\n        const userConfig = JSON.parse(content);\n        return mergeConfig(config, userConfig);\n      } else {\n        // Dynamic import for JS config files\n        const userConfig = await import(fullPath);\n        return mergeConfig(config, userConfig.default || userConfig);\n      }\n    } catch {\n      // Config file not found, continue to next\n    }\n  }\n\n  return config;\n}\n\n/**\n * Merge user config with defaults\n */\nfunction mergeConfig(\n  defaults: ClasspressoConfig,\n  userConfig: Partial<ClasspressoConfig>\n): ClasspressoConfig {\n  return {\n    ...defaults,\n    ...userConfig,\n    exclude: {\n      ...defaults.exclude,\n      ...userConfig.exclude,\n      // Merge arrays instead of replacing\n      prefixes: [\n        ...(defaults.exclude.prefixes || []),\n        ...(userConfig.exclude?.prefixes || []),\n      ],\n      suffixes: [\n        ...(defaults.exclude.suffixes || []),\n        ...(userConfig.exclude?.suffixes || []),\n      ],\n      classes: [\n        ...(defaults.exclude.classes || []),\n        ...(userConfig.exclude?.classes || []),\n      ],\n      patterns: [\n        ...(defaults.exclude.patterns || []),\n        ...(userConfig.exclude?.patterns || []),\n      ],\n      files: [\n        ...(defaults.exclude.files || []),\n        ...(userConfig.exclude?.files || []),\n      ],\n    },\n    // Merge dynamicPrefixes arrays\n    dynamicPrefixes: [\n      ...(defaults.dynamicPrefixes || []),\n      ...(userConfig.dynamicPrefixes || []),\n    ],\n    // Merge purgeSafelist arrays\n    purgeSafelist: [\n      ...(defaults.purgeSafelist || []),\n      ...(userConfig.purgeSafelist || []),\n    ],\n  };\n}\n\n/**\n * Validate configuration\n */\nexport function validateConfig(config: ClasspressoConfig): string[] {\n  const errors: string[] = [];\n\n  if (config.minOccurrences < 1) {\n    errors.push('minOccurrences must be at least 1');\n  }\n\n  if (config.minClasses < 1) {\n    errors.push('minClasses must be at least 1');\n  }\n\n  if (config.hashLength < 3) {\n    errors.push('hashLength must be at least 3');\n  }\n\n  if (config.hashLength > 32) {\n    errors.push('hashLength must be at most 32');\n  }\n\n  if (!config.hashPrefix || config.hashPrefix.length === 0) {\n    errors.push('hashPrefix must not be empty');\n  }\n\n  // Validate error reporting configuration\n  if (config.sendErrorReports && !config.errorReportUrl) {\n    errors.push('errorReportUrl is required when sendErrorReports is true');\n  }\n\n  if (config.errorReportUrl && !isValidHttpsUrl(config.errorReportUrl)) {\n    errors.push('errorReportUrl must be a valid HTTPS URL');\n  }\n\n  return errors;\n}\n\n/**\n * Check if a URL is a valid HTTPS URL\n */\nfunction isValidHttpsUrl(url: string): boolean {\n  try {\n    const parsed = new URL(url);\n    return parsed.protocol === 'https:';\n  } catch {\n    return false;\n  }\n}\n\n/**\n * Auto-detect build directory from common framework patterns.\n * Returns the most recently modified build directory if multiple exist.\n * Returns null if no build directory is found.\n */\nexport async function detectBuildDir(cwd: string = process.cwd()): Promise<{\n  detected: string | null;\n  candidates: string[];\n  suggestion: string | null;\n}> {\n  const foundDirs: Array<{ dir: string; mtime: Date }> = [];\n  const existingCandidates: string[] = [];\n\n  for (const candidate of BUILD_DIR_CANDIDATES) {\n    const fullPath = path.resolve(cwd, candidate);\n\n    if (existsSync(fullPath)) {\n      existingCandidates.push(candidate);\n      try {\n        const stats = await stat(fullPath);\n        if (stats.isDirectory()) {\n          foundDirs.push({ dir: candidate, mtime: stats.mtime });\n        }\n      } catch {\n        // Skip if we can't stat\n      }\n    }\n  }\n\n  // No build directories found\n  if (foundDirs.length === 0) {\n    return {\n      detected: null,\n      candidates: [],\n      suggestion: 'No build directory found. Run your build command first, then try again.',\n    };\n  }\n\n  // Single directory found - use it\n  if (foundDirs.length === 1) {\n    return {\n      detected: foundDirs[0].dir,\n      candidates: existingCandidates,\n      suggestion: null,\n    };\n  }\n\n  // Multiple directories found - use most recently modified\n  foundDirs.sort((a, b) => b.mtime.getTime() - a.mtime.getTime());\n  const mostRecent = foundDirs[0];\n\n  return {\n    detected: mostRecent.dir,\n    candidates: existingCandidates,\n    suggestion: `Multiple build directories found (${existingCandidates.join(', ')}). Using most recent: ${mostRecent.dir}`,\n  };\n}\n\n/**\n * Framework hints from package.json dependencies\n */\ninterface FrameworkHint {\n  name: string;\n  buildDir: string;\n}\n\n/**\n * Try to detect framework from package.json and suggest build directory\n */\nexport async function detectFrameworkHint(cwd: string = process.cwd()): Promise<FrameworkHint | null> {\n  const packageJsonPath = path.resolve(cwd, 'package.json');\n\n  if (!existsSync(packageJsonPath)) {\n    return null;\n  }\n\n  try {\n    const content = await readFileContent(packageJsonPath);\n    const pkg = JSON.parse(content);\n    const deps = { ...pkg.dependencies, ...pkg.devDependencies };\n\n    // Check for frameworks in priority order\n    if (deps['next']) return { name: 'Next.js', buildDir: '.next' };\n    if (deps['nuxt']) return { name: 'Nuxt', buildDir: '.output' };\n    if (deps['@sveltejs/kit']) return { name: 'SvelteKit', buildDir: 'build' };\n    if (deps['astro']) return { name: 'Astro', buildDir: 'dist' };\n    if (deps['@remix-run/react']) return { name: 'Remix', buildDir: 'build' };\n    if (deps['solid-start']) return { name: 'Solid Start', buildDir: '.output' };\n    if (deps['@builder.io/qwik']) return { name: 'Qwik', buildDir: 'dist' };\n    if (deps['gatsby']) return { name: 'Gatsby', buildDir: 'public' };\n    if (deps['@angular/core']) return { name: 'Angular', buildDir: 'dist' };\n    if (deps['vite']) return { name: 'Vite', buildDir: 'dist' };\n    if (deps['@docusaurus/core']) return { name: 'Docusaurus', buildDir: 'build' };\n    if (deps['@11ty/eleventy']) return { name: 'Eleventy', buildDir: '_site' };\n\n    return null;\n  } catch {\n    return null;\n  }\n}\n","/**\n * Debug logger for Classpresso\n * Generates detailed log files for troubleshooting\n */\n\nimport { appendFile, writeFile } from 'fs/promises';\nimport { createRequire } from 'module';\nimport { fileURLToPath } from 'url';\nimport path from 'path';\nimport os from 'os';\nimport type { ClasspressoConfig } from '../types/index.js';\n\nconst require = createRequire(import.meta.url);\n\nconst DEBUG_LOG_FILENAME = 'classpresso-debug.log';\n\nexport interface LoggerOptions {\n  debug: boolean;\n  verbose: boolean;\n  buildDir: string;\n}\n\nexport interface Logger {\n  /** Log info message to console (always shown) */\n  info(message: string): void;\n  /** Log warning message to console (always shown) */\n  warn(message: string): void;\n  /** Log error message to console (always shown) */\n  error(message: string): void;\n  /** Log verbose message to console (only when verbose flag is set) */\n  verbose(message: string): void;\n\n  /** Log system info to debug file */\n  logSystemInfo(): Promise<void>;\n  /** Log config resolution to debug file */\n  logConfig(config: ClasspressoConfig, source: string): Promise<void>;\n  /** Log operation step to debug file */\n  logStep(step: string, details?: Record<string, unknown>): Promise<void>;\n  /** Log timing for an operation to debug file */\n  logTiming(operation: string, durationMs: number): Promise<void>;\n  /** Log error details to debug file */\n  logError(error: Error, context?: string): Promise<void>;\n\n  /** Flush and close the log file */\n  close(): Promise<void>;\n\n  /** Get the log file path */\n  getLogPath(): string | null;\n}\n\n/**\n * Get classpresso version from package.json\n */\nexport function getVersion(): string {\n  try {\n    // Use fileURLToPath for cross-platform compatibility (Windows/POSIX)\n    const __filename = fileURLToPath(import.meta.url);\n    const __dirname = path.dirname(__filename);\n    const packageJsonPath = path.resolve(__dirname, '../package.json');\n    const packageJson = require(packageJsonPath);\n    return packageJson.version || 'unknown';\n  } catch {\n    return 'unknown';\n  }\n}\n\n/**\n * Create a logger instance\n */\nexport function createLogger(options: LoggerOptions): Logger {\n  const { debug, verbose, buildDir } = options;\n  const logPath = debug ? path.join(buildDir, DEBUG_LOG_FILENAME) : null;\n  let initialized = false;\n\n  /**\n   * Write to the debug log file\n   */\n  async function writeToLog(content: string): Promise<void> {\n    if (!logPath) return;\n\n    try {\n      if (!initialized) {\n        // Initialize log file with header\n        const header = `=== CLASSPRESSO DEBUG LOG ===\\nGenerated: ${new Date().toISOString()}\\n\\n`;\n        await writeFile(logPath, header, 'utf-8');\n        initialized = true;\n      }\n      await appendFile(logPath, content + '\\n', 'utf-8');\n    } catch (err) {\n      // Silently fail - don't let logging errors affect the main process\n      console.error(`Warning: Failed to write to debug log: ${err}`);\n    }\n  }\n\n  /**\n   * Format a timestamp for log entries\n   */\n  function timestamp(): string {\n    return `[${new Date().toISOString()}]`;\n  }\n\n  return {\n    info(message: string): void {\n      console.log(message);\n    },\n\n    warn(message: string): void {\n      console.warn(message);\n    },\n\n    error(message: string): void {\n      console.error(message);\n    },\n\n    verbose(message: string): void {\n      if (verbose) {\n        console.log(message);\n      }\n    },\n\n    async logSystemInfo(): Promise<void> {\n      if (!debug) return;\n\n      const systemInfo = [\n        '=== SYSTEM INFO ===',\n        `Classpresso Version: ${getVersion()}`,\n        `Node Version: ${process.version}`,\n        `OS: ${process.platform}`,\n        `OS Release: ${os.release()}`,\n        `Architecture: ${process.arch}`,\n        `CWD: ${process.cwd()}`,\n        '',\n      ].join('\\n');\n\n      await writeToLog(systemInfo);\n    },\n\n    async logConfig(config: ClasspressoConfig, source: string): Promise<void> {\n      if (!debug) return;\n\n      // Create a sanitized version of config for logging\n      const sanitizedConfig = {\n        buildDir: path.basename(config.buildDir),\n        minOccurrences: config.minOccurrences,\n        minClasses: config.minClasses,\n        minBytesSaved: config.minBytesSaved,\n        hashPrefix: config.hashPrefix,\n        hashLength: config.hashLength,\n        cssLayer: config.cssLayer,\n        dataAttributes: config.dataAttributes,\n        manifest: config.manifest,\n        backup: config.backup,\n        verbose: config.verbose,\n        forceAll: config.forceAll,\n        excludeDynamicPatterns: config.excludeDynamicPatterns,\n        skipPatternsWithExcludedClasses: config.skipPatternsWithExcludedClasses,\n        ssr: config.ssr,\n        debug: config.debug,\n        sendErrorReports: config.sendErrorReports,\n        // Exclude errorReportUrl, exclude patterns, and include patterns for privacy\n        excludePrefixCount: config.exclude.prefixes?.length || 0,\n        excludeSuffixCount: config.exclude.suffixes?.length || 0,\n        excludeClassCount: config.exclude.classes?.length || 0,\n        excludePatternCount: config.exclude.patterns?.length || 0,\n        excludeFileCount: config.exclude.files?.length || 0,\n        dynamicPrefixCount: config.dynamicPrefixes?.length || 0,\n        includePatternCount: config.include?.length || 0,\n      };\n\n      const configInfo = [\n        '=== CONFIG ===',\n        `Source: ${source}`,\n        'Final Config:',\n        JSON.stringify(sanitizedConfig, null, 2),\n        '',\n      ].join('\\n');\n\n      await writeToLog(configInfo);\n    },\n\n    async logStep(step: string, details?: Record<string, unknown>): Promise<void> {\n      if (!debug) return;\n\n      let entry = `${timestamp()} ${step}`;\n      if (details) {\n        const detailLines = Object.entries(details)\n          .map(([key, value]) => `  ${key}: ${JSON.stringify(value)}`)\n          .join('\\n');\n        entry += '\\n' + detailLines;\n      }\n\n      await writeToLog(entry);\n    },\n\n    async logTiming(operation: string, durationMs: number): Promise<void> {\n      if (!debug) return;\n\n      await writeToLog(`${timestamp()} ${operation} completed in ${durationMs}ms`);\n    },\n\n    async logError(error: Error, context?: string): Promise<void> {\n      if (!debug) return;\n\n      const errorInfo = [\n        '',\n        '=== ERROR ===',\n        `${timestamp()} ${context || 'Error occurred'}`,\n        `Message: ${error.message}`,\n        `Stack trace:`,\n        error.stack || 'No stack trace available',\n        '',\n      ].join('\\n');\n\n      await writeToLog(errorInfo);\n    },\n\n    async close(): Promise<void> {\n      if (!debug || !logPath) return;\n\n      await writeToLog(`\\n=== LOG COMPLETE ===\\nEnded: ${new Date().toISOString()}\\n`);\n    },\n\n    getLogPath(): string | null {\n      return logPath;\n    },\n  };\n}\n","/**\n * Error reporter for Classpresso\n * Sends error reports to a configurable webhook for debugging\n */\n\nimport path from 'path';\nimport os from 'os';\nimport type { ClasspressoConfig } from '../types/index.js';\nimport { getVersion } from './logger.js';\n\nconst TIMEOUT_MS = 5000;\n\nexport interface ErrorReportPayload {\n  timestamp: string;\n  classpressoVersion: string;\n  nodeVersion: string;\n  os: string;\n  platform: string;\n  arch: string;\n  errorMessage: string;\n  errorStack?: string;\n  config: SanitizedConfig;\n  command?: string;\n}\n\nexport interface SanitizedConfig {\n  minOccurrences: number;\n  minClasses: number;\n  minBytesSaved: number;\n  hashPrefix: string;\n  hashLength: number;\n  cssLayer: string | false | undefined;\n  dataAttributes: boolean;\n  manifest: boolean;\n  backup: boolean;\n  verbose: boolean;\n  forceAll: boolean;\n  excludeDynamicPatterns: boolean;\n  skipPatternsWithExcludedClasses: boolean;\n  ssr: boolean;\n  debug: boolean;\n}\n\nexport interface ErrorReporterOptions {\n  enabled: boolean;\n  url?: string;\n}\n\n/**\n * Sanitize a file path to only include the basename\n * Protects user privacy by not sending full directory structure\n */\nexport function sanitizePath(fullPath: string): string {\n  return path.basename(fullPath);\n}\n\n/**\n * Create a sanitized version of the config that excludes sensitive data\n */\nexport function sanitizeConfig(config: ClasspressoConfig): SanitizedConfig {\n  return {\n    minOccurrences: config.minOccurrences,\n    minClasses: config.minClasses,\n    minBytesSaved: config.minBytesSaved,\n    hashPrefix: config.hashPrefix,\n    hashLength: config.hashLength,\n    cssLayer: config.cssLayer,\n    dataAttributes: config.dataAttributes,\n    manifest: config.manifest,\n    backup: config.backup,\n    verbose: config.verbose,\n    forceAll: config.forceAll,\n    excludeDynamicPatterns: config.excludeDynamicPatterns,\n    skipPatternsWithExcludedClasses: config.skipPatternsWithExcludedClasses,\n    ssr: config.ssr,\n    debug: config.debug,\n    // Excluded for privacy:\n    // - buildDir (full path reveals project structure)\n    // - errorReportUrl (meta/recursive)\n    // - sendErrorReports (meta)\n    // - exclude.* (could reveal project patterns)\n    // - include (could reveal project patterns)\n    // - dynamicPrefixes (could reveal libraries used)\n  };\n}\n\n/**\n * Send an error report to the configured webhook\n * This function never throws - failures are silent\n */\nexport async function sendErrorReport(\n  error: Error,\n  options: ErrorReporterOptions,\n  config: ClasspressoConfig,\n  command?: string\n): Promise<void> {\n  // Don't send if disabled or no URL configured\n  if (!options.enabled || !options.url) {\n    return;\n  }\n\n  const payload: ErrorReportPayload = {\n    timestamp: new Date().toISOString(),\n    classpressoVersion: getVersion(),\n    nodeVersion: process.version,\n    os: process.platform,\n    platform: os.release(),\n    arch: process.arch,\n    errorMessage: error.message,\n    errorStack: error.stack,\n    config: sanitizeConfig(config),\n    command,\n  };\n\n  try {\n    const controller = new AbortController();\n    const timeoutId = setTimeout(() => controller.abort(), TIMEOUT_MS);\n\n    await fetch(options.url, {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/json',\n        'User-Agent': `classpresso/${getVersion()}`,\n      },\n      body: JSON.stringify(payload),\n      signal: controller.signal,\n    });\n\n    clearTimeout(timeoutId);\n  } catch {\n    // Silently fail - error reporting should never affect the main process\n    // The user shouldn't see errors about error reporting failing\n  }\n}\n","/**\n * Analyze Command - Show potential optimizations\n */\n\nimport chalk from 'chalk';\nimport type { ClasspressoConfig } from '../types/index.js';\nimport { scanBuildOutput } from '../core/scanner.js';\nimport { detectConsolidatablePatterns, getPatternSummary } from '../core/pattern-detector.js';\nimport { formatBytes } from '../core/metrics.js';\nimport { loadConfig, detectBuildDir, detectFrameworkHint } from '../config.js';\nimport { createLogger } from '../utils/logger.js';\nimport { sendErrorReport } from '../utils/error-reporter.js';\n\ninterface AnalyzeOptions {\n  dir?: string;\n  minOccurrences: string;\n  minClasses: string;\n  ssr?: boolean;\n  json?: boolean;\n  verbose?: boolean;\n  debug?: boolean;\n  sendErrorReports?: boolean;\n  errorReportUrl?: string;\n}\n\nexport async function analyzeCommand(options: AnalyzeOptions): Promise<void> {\n  // Auto-detect build directory if not specified\n  let buildDir = options.dir;\n\n  if (!buildDir) {\n    const detection = await detectBuildDir();\n    if (detection.detected) {\n      buildDir = detection.detected;\n      if (!options.json) {\n        console.log(chalk.gray(`Auto-detected build directory: ${buildDir}`));\n        if (detection.suggestion) {\n          console.log(chalk.yellow(detection.suggestion));\n        }\n      }\n    } else {\n      const hint = await detectFrameworkHint();\n      if (hint) {\n        console.error(chalk.red(`No build directory found.`));\n        console.log(chalk.yellow(`Detected ${hint.name} project. Expected build directory: ${hint.buildDir}`));\n        console.log(chalk.gray(`Run your build command first, then try again.`));\n      } else {\n        console.error(chalk.red('No build directory found and could not auto-detect.'));\n        console.log(chalk.gray('Use --dir to specify your build directory, or run your build command first.'));\n      }\n      process.exit(1);\n    }\n  }\n\n  const config = await loadConfig(buildDir);\n\n  // Override config with CLI options\n  config.minOccurrences = parseInt(options.minOccurrences, 10);\n  config.minClasses = parseInt(options.minClasses, 10);\n  config.verbose = options.verbose || false;\n  config.ssr = options.ssr || false;\n  config.debug = options.debug || config.debug || false;\n  config.sendErrorReports = options.sendErrorReports || config.sendErrorReports || false;\n  config.errorReportUrl = options.errorReportUrl || config.errorReportUrl;\n\n  // Initialize logger\n  const logger = createLogger({\n    debug: config.debug,\n    verbose: config.verbose,\n    buildDir: config.buildDir,\n  });\n\n  if (!options.json) {\n    console.log(chalk.cyan('\\n☕ Classpresso - Analyzing build output...\\n'));\n  }\n\n  try {\n    // Log system info and config\n    await logger.logSystemInfo();\n    await logger.logConfig(config, 'analyze command');\n\n    // Scan build output\n    const scanStartTime = Date.now();\n    await logger.logStep('Starting scan', { buildDir: config.buildDir });\n    const scanResult = await scanBuildOutput(config);\n    await logger.logTiming('Scan', Date.now() - scanStartTime);\n    await logger.logStep('Scan complete', {\n      filesScanned: scanResult.files.length,\n      uniquePatterns: scanResult.occurrences.size,\n      errors: scanResult.errors.length,\n    });\n\n    if (scanResult.errors.length > 0 && config.verbose) {\n      console.log(chalk.yellow('Warnings:'));\n      for (const error of scanResult.errors) {\n        console.log(chalk.yellow(`  - ${error}`));\n      }\n      console.log();\n    }\n\n    // Detect patterns\n    const detectStartTime = Date.now();\n    await logger.logStep('Detecting consolidatable patterns');\n    // Pass mergeablePatterns to pattern detector in SSR mode to prevent hydration mismatches\n    const candidates = detectConsolidatablePatterns(\n      scanResult.occurrences,\n      config,\n      config.ssr ? scanResult.mergeablePatterns : undefined\n    );\n    const summary = getPatternSummary(candidates);\n    await logger.logTiming('Pattern detection', Date.now() - detectStartTime);\n    await logger.logStep('Pattern detection complete', {\n      candidatesFound: candidates.length,\n      totalBytesSaved: summary.totalBytesSaved,\n    });\n\n    if (options.json) {\n      console.log(JSON.stringify({\n        summary,\n        candidates: candidates.map((c) => ({\n          original: c.classString,\n          hashName: c.hashName,\n          frequency: c.frequency,\n          bytesSaved: c.bytesSaved,\n          classes: c.classes,\n          excludedClasses: c.excludedClasses,\n        })),\n        files: scanResult.files.length,\n        errors: scanResult.errors,\n      }, null, 2));\n      await logger.close();\n      return;\n    }\n\n    // Print summary\n    console.log(chalk.bold('📊 Analysis Summary\\n'));\n    console.log(`  Files scanned:        ${chalk.cyan(scanResult.files.length)}`);\n    console.log(`  Unique patterns:      ${chalk.cyan(summary.totalPatterns)}`);\n    console.log(`  Total occurrences:    ${chalk.cyan(summary.totalOccurrences)}`);\n    console.log(`  Avg. frequency:       ${chalk.cyan(summary.avgFrequency.toFixed(1))}`);\n    console.log(`  Avg. classes/pattern: ${chalk.cyan(summary.avgClassesPerPattern.toFixed(1))}`);\n    console.log();\n\n    console.log(chalk.bold('💰 Potential Savings\\n'));\n    console.log(`  Patterns to consolidate: ${chalk.green(summary.totalPatterns)}`);\n    console.log(`  Estimated savings:       ${chalk.green(formatBytes(summary.totalBytesSaved))}`);\n    console.log();\n\n    if (candidates.length > 0) {\n      console.log(chalk.bold('🔝 Top 10 Consolidation Candidates\\n'));\n\n      const top10 = candidates.slice(0, 10);\n      for (let i = 0; i < top10.length; i++) {\n        const c = top10[i];\n        console.log(\n          `  ${chalk.gray(`${i + 1}.`)} ${chalk.yellow(c.hashName)} ` +\n          `${chalk.gray('(')}${chalk.cyan(c.frequency)}x${chalk.gray(')')} ` +\n          `saves ${chalk.green(formatBytes(c.bytesSaved))}`\n        );\n        console.log(`     ${chalk.gray(truncate(c.classString, 60))}`);\n        if (c.excludedClasses.length > 0) {\n          console.log(`     ${chalk.gray('excluded:')} ${chalk.yellow(c.excludedClasses.join(' '))}`);\n        }\n      }\n      console.log();\n    }\n\n    if (candidates.length === 0) {\n      console.log(chalk.yellow('No patterns found that meet the consolidation criteria.'));\n      console.log(chalk.gray('Try lowering --min-occurrences or --min-classes'));\n    } else {\n      console.log(chalk.gray(`Run ${chalk.cyan('classpresso optimize')} to apply these optimizations.`));\n    }\n\n    // Show debug log location if debug mode is enabled\n    if (config.debug && logger.getLogPath()) {\n      console.log(chalk.gray(`Debug log: ${logger.getLogPath()}`));\n    }\n\n    console.log();\n    await logger.close();\n  } catch (err) {\n    const error = err instanceof Error ? err : new Error(String(err));\n    await logger.logError(error, 'analyze command');\n    await logger.close();\n\n    // Send error report if enabled\n    if (config.sendErrorReports) {\n      await sendErrorReport(error, {\n        enabled: true,\n        url: config.errorReportUrl,\n      }, config, 'analyze');\n    }\n\n    console.error(chalk.red(`Error: ${error.message}`));\n    process.exit(1);\n  }\n}\n\nfunction truncate(str: string, maxLength: number): string {\n  if (str.length <= maxLength) return str;\n  return str.substring(0, maxLength - 3) + '...';\n}\n","/**\n * Consolidator - Creates consolidated class mappings\n */\n\nimport type {\n  ClasspressoConfig,\n  ConsolidationCandidate,\n  ClassMapping,\n  MappingManifest,\n  OptimizationMetrics,\n} from '../types/index.js';\nimport { writeFileContent } from '../utils/files.js';\nimport path from 'path';\n\n/**\n * Create class mappings from consolidation candidates\n */\nexport function createClassMappings(\n  candidates: ConsolidationCandidate[]\n): ClassMapping[] {\n  return candidates.map((candidate) => ({\n    original: candidate.classString,\n    consolidated: candidate.hashName,\n    classes: candidate.classes,\n    excludedClasses: candidate.excludedClasses,\n    cssDeclarations: '', // Will be filled by CSS generator\n    frequency: candidate.frequency,\n    bytesSaved: candidate.bytesSaved,\n  }));\n}\n\n/**\n * Build a lookup map from original class patterns to their consolidated names\n */\nexport function buildReplacementMap(\n  mappings: ClassMapping[]\n): Map<string, { consolidated: string; excludedClasses: string[] }> {\n  const map = new Map<string, { consolidated: string; excludedClasses: string[] }>();\n\n  for (const mapping of mappings) {\n    // Key is the sorted class string (without excluded classes)\n    const key = [...mapping.classes].sort().join(' ');\n    map.set(key, {\n      consolidated: mapping.consolidated,\n      excludedClasses: mapping.excludedClasses,\n    });\n  }\n\n  return map;\n}\n\n/**\n * Create and save the mapping manifest\n */\nexport async function saveMappingManifest(\n  mappings: ClassMapping[],\n  metrics: OptimizationMetrics,\n  config: ClasspressoConfig\n): Promise<string> {\n  const manifest: MappingManifest = {\n    version: '1.0.0',\n    tool: 'classpresso',\n    buildDir: config.buildDir,\n    created: new Date().toISOString(),\n    config: {\n      minOccurrences: config.minOccurrences,\n      minClasses: config.minClasses,\n      hashPrefix: config.hashPrefix,\n      hashLength: config.hashLength,\n    },\n    mappings,\n    metrics,\n  };\n\n  const manifestPath = path.join(config.buildDir, 'classpresso-manifest.json');\n  await writeFileContent(manifestPath, JSON.stringify(manifest, null, 2));\n\n  return manifestPath;\n}\n\n/**\n * Load an existing manifest\n */\nexport async function loadMappingManifest(\n  buildDir: string\n): Promise<MappingManifest | null> {\n  const manifestPath = path.join(buildDir, 'classpresso-manifest.json');\n\n  try {\n    const { readFileContent } = await import('../utils/files.js');\n    const content = await readFileContent(manifestPath);\n    return JSON.parse(content) as MappingManifest;\n  } catch {\n    return null;\n  }\n}\n","/**\n * CSS Generator - Creates consolidated CSS rules\n */\n\nimport postcss from 'postcss';\nimport type { ClassMapping } from '../types/index.js';\nimport { readFileContent, writeFileContent, findFiles, isCSSFile } from '../utils/files.js';\nimport { isNonFlattenableClass } from './scanner.js';\n\n// Map of Tailwind utility prefixes to CSS properties\nconst UTILITY_PROPERTY_MAP: Record<string, string | string[]> = {\n  // Display\n  'flex': 'display: flex',\n  'grid': 'display: grid',\n  'block': 'display: block',\n  'inline': 'display: inline',\n  'inline-block': 'display: inline-block',\n  'hidden': 'display: none',\n\n  // Flex direction\n  'flex-col': 'flex-direction: column',\n  'flex-row': 'flex-direction: row',\n  'flex-col-reverse': 'flex-direction: column-reverse',\n  'flex-row-reverse': 'flex-direction: row-reverse',\n\n  // Flex wrap\n  'flex-wrap': 'flex-wrap: wrap',\n  'flex-nowrap': 'flex-wrap: nowrap',\n\n  // Justify content\n  'justify-start': 'justify-content: flex-start',\n  'justify-end': 'justify-content: flex-end',\n  'justify-center': 'justify-content: center',\n  'justify-between': 'justify-content: space-between',\n  'justify-around': 'justify-content: space-around',\n  'justify-evenly': 'justify-content: space-evenly',\n\n  // Align items\n  'items-start': 'align-items: flex-start',\n  'items-end': 'align-items: flex-end',\n  'items-center': 'align-items: center',\n  'items-baseline': 'align-items: baseline',\n  'items-stretch': 'align-items: stretch',\n\n  // Text align\n  'text-left': 'text-align: left',\n  'text-center': 'text-align: center',\n  'text-right': 'text-align: right',\n\n  // Font weight\n  'font-bold': 'font-weight: 700',\n  'font-semibold': 'font-weight: 600',\n  'font-medium': 'font-weight: 500',\n  'font-normal': 'font-weight: 400',\n  'font-light': 'font-weight: 300',\n\n  // Position\n  'relative': 'position: relative',\n  'absolute': 'position: absolute',\n  'fixed': 'position: fixed',\n  'sticky': 'position: sticky',\n\n  // Overflow\n  'overflow-hidden': 'overflow: hidden',\n  'overflow-auto': 'overflow: auto',\n  'overflow-scroll': 'overflow: scroll',\n  'overflow-visible': 'overflow: visible',\n\n  // Cursor\n  'cursor-pointer': 'cursor: pointer',\n  'cursor-default': 'cursor: default',\n  'cursor-not-allowed': 'cursor: not-allowed',\n\n  // Misc\n  'truncate': ['overflow: hidden', 'text-overflow: ellipsis', 'white-space: nowrap'],\n  'uppercase': 'text-transform: uppercase',\n  'lowercase': 'text-transform: lowercase',\n  'capitalize': 'text-transform: capitalize',\n};\n\n/**\n * Parse a Tailwind utility class and return its CSS\n */\nexport function parseUtilityClass(className: string): string[] {\n  // Check direct mapping first\n  if (UTILITY_PROPERTY_MAP[className]) {\n    const value = UTILITY_PROPERTY_MAP[className];\n    return Array.isArray(value) ? value : [value];\n  }\n\n  // Handle arbitrary values: text-[var(--gold)]\n  const arbitraryMatch = className.match(/^([a-z]+(?:-[a-z]+)?)-\\[(.+)\\]$/);\n  if (arbitraryMatch) {\n    const [, prefix, value] = arbitraryMatch;\n    return parseArbitraryValue(prefix, value);\n  }\n\n  // Handle spacing utilities: p-4, m-2, gap-2, etc.\n  const spacingMatch = className.match(/^(p|px|py|pt|pb|pl|pr|m|mx|my|mt|mb|ml|mr|gap|gap-x|gap-y)-(\\d+(?:\\.\\d+)?|\\[.+\\])$/);\n  if (spacingMatch) {\n    const [, prefix, value] = spacingMatch;\n    return parseSpacingUtility(prefix, value);\n  }\n\n  // Handle sizing utilities: w-full, h-screen, etc.\n  const sizeMatch = className.match(/^(w|h|min-w|min-h|max-w|max-h)-(.+)$/);\n  if (sizeMatch) {\n    const [, prefix, value] = sizeMatch;\n    return parseSizeUtility(prefix, value);\n  }\n\n  // Handle rounded utilities\n  const roundedMatch = className.match(/^rounded(-[a-z]+)?(-[a-z0-9]+)?$/);\n  if (roundedMatch) {\n    return parseRoundedUtility(className);\n  }\n\n  // Handle text size utilities: text-sm, text-lg, etc.\n  const textSizeMatch = className.match(/^text-(xs|sm|base|lg|xl|2xl|3xl|4xl|5xl|6xl|7xl|8xl|9xl)$/);\n  if (textSizeMatch) {\n    return parseTextSizeUtility(textSizeMatch[1]);\n  }\n\n  // Handle opacity utilities\n  const opacityMatch = className.match(/^opacity-(\\d+)$/);\n  if (opacityMatch) {\n    return [`opacity: ${parseInt(opacityMatch[1]) / 100}`];\n  }\n\n  // Handle z-index utilities\n  const zMatch = className.match(/^z-(\\d+|auto)$/);\n  if (zMatch) {\n    return [`z-index: ${zMatch[1]}`];\n  }\n\n  // Unknown utility - return empty (will be looked up from CSS file)\n  return [];\n}\n\n/**\n * Parse arbitrary value syntax\n */\nfunction parseArbitraryValue(prefix: string, value: string): string[] {\n  const propertyMap: Record<string, string> = {\n    'text': 'color',\n    'bg': 'background-color',\n    'border': 'border-color',\n    'border-t': 'border-top-color',\n    'border-b': 'border-bottom-color',\n    'border-l': 'border-left-color',\n    'border-r': 'border-right-color',\n    'fill': 'fill',\n    'stroke': 'stroke',\n    'p': 'padding',\n    'px': 'padding-inline',\n    'py': 'padding-block',\n    'pt': 'padding-top',\n    'pb': 'padding-bottom',\n    'pl': 'padding-left',\n    'pr': 'padding-right',\n    'm': 'margin',\n    'mx': 'margin-inline',\n    'my': 'margin-block',\n    'mt': 'margin-top',\n    'mb': 'margin-bottom',\n    'ml': 'margin-left',\n    'mr': 'margin-right',\n    'w': 'width',\n    'h': 'height',\n    'min-w': 'min-width',\n    'min-h': 'min-height',\n    'max-w': 'max-width',\n    'max-h': 'max-height',\n    'top': 'top',\n    'bottom': 'bottom',\n    'left': 'left',\n    'right': 'right',\n    'gap': 'gap',\n    'gap-x': 'column-gap',\n    'gap-y': 'row-gap',\n  };\n\n  const property = propertyMap[prefix];\n  if (property) {\n    return [`${property}: ${value}`];\n  }\n\n  return [];\n}\n\n/**\n * Parse spacing utilities (padding, margin, gap)\n */\nfunction parseSpacingUtility(prefix: string, value: string): string[] {\n  // Convert Tailwind spacing scale to rem\n  const spacingScale: Record<string, string> = {\n    '0': '0px',\n    '0.5': '0.125rem',\n    '1': '0.25rem',\n    '1.5': '0.375rem',\n    '2': '0.5rem',\n    '2.5': '0.625rem',\n    '3': '0.75rem',\n    '3.5': '0.875rem',\n    '4': '1rem',\n    '5': '1.25rem',\n    '6': '1.5rem',\n    '7': '1.75rem',\n    '8': '2rem',\n    '9': '2.25rem',\n    '10': '2.5rem',\n    '11': '2.75rem',\n    '12': '3rem',\n    '14': '3.5rem',\n    '16': '4rem',\n    '20': '5rem',\n    '24': '6rem',\n    '28': '7rem',\n    '32': '8rem',\n    '36': '9rem',\n    '40': '10rem',\n    '44': '11rem',\n    '48': '12rem',\n    '52': '13rem',\n    '56': '14rem',\n    '60': '15rem',\n    '64': '16rem',\n    '72': '18rem',\n    '80': '20rem',\n    '96': '24rem',\n  };\n\n  // Handle arbitrary values\n  let cssValue = spacingScale[value];\n  if (!cssValue && value.startsWith('[') && value.endsWith(']')) {\n    cssValue = value.slice(1, -1);\n  }\n  if (!cssValue) return [];\n\n  const propertyMap: Record<string, string | string[]> = {\n    'p': 'padding',\n    'px': ['padding-left', 'padding-right'],\n    'py': ['padding-top', 'padding-bottom'],\n    'pt': 'padding-top',\n    'pb': 'padding-bottom',\n    'pl': 'padding-left',\n    'pr': 'padding-right',\n    'm': 'margin',\n    'mx': ['margin-left', 'margin-right'],\n    'my': ['margin-top', 'margin-bottom'],\n    'mt': 'margin-top',\n    'mb': 'margin-bottom',\n    'ml': 'margin-left',\n    'mr': 'margin-right',\n    'gap': 'gap',\n    'gap-x': 'column-gap',\n    'gap-y': 'row-gap',\n  };\n\n  const property = propertyMap[prefix];\n  if (Array.isArray(property)) {\n    return property.map((p) => `${p}: ${cssValue}`);\n  }\n  if (property) {\n    return [`${property}: ${cssValue}`];\n  }\n\n  return [];\n}\n\n/**\n * Parse size utilities (width, height)\n */\nfunction parseSizeUtility(prefix: string, value: string): string[] {\n  const sizeMap: Record<string, string> = {\n    'full': '100%',\n    'screen': '100vh',\n    'svh': '100svh',\n    'lvh': '100lvh',\n    'dvh': '100dvh',\n    'min': 'min-content',\n    'max': 'max-content',\n    'fit': 'fit-content',\n    'auto': 'auto',\n  };\n\n  let cssValue = sizeMap[value];\n  if (!cssValue && value.startsWith('[') && value.endsWith(']')) {\n    cssValue = value.slice(1, -1);\n  }\n  if (!cssValue) {\n    // Try numeric (spacing scale)\n    const spacingMatch = value.match(/^(\\d+(?:\\.\\d+)?)$/);\n    if (spacingMatch) {\n      cssValue = `${parseFloat(spacingMatch[1]) * 0.25}rem`;\n    }\n  }\n  if (!cssValue) return [];\n\n  const propertyMap: Record<string, string> = {\n    'w': 'width',\n    'h': 'height',\n    'min-w': 'min-width',\n    'min-h': 'min-height',\n    'max-w': 'max-width',\n    'max-h': 'max-height',\n  };\n\n  const property = propertyMap[prefix];\n  if (property) {\n    return [`${property}: ${cssValue}`];\n  }\n\n  return [];\n}\n\n/**\n * Parse rounded utilities\n */\nfunction parseRoundedUtility(className: string): string[] {\n  const roundedMap: Record<string, string> = {\n    'rounded': 'border-radius: 0.25rem',\n    'rounded-none': 'border-radius: 0px',\n    'rounded-sm': 'border-radius: 0.125rem',\n    'rounded-md': 'border-radius: 0.375rem',\n    'rounded-lg': 'border-radius: 0.5rem',\n    'rounded-xl': 'border-radius: 0.75rem',\n    'rounded-2xl': 'border-radius: 1rem',\n    'rounded-3xl': 'border-radius: 1.5rem',\n    'rounded-full': 'border-radius: 9999px',\n  };\n\n  if (roundedMap[className]) {\n    return [roundedMap[className]];\n  }\n\n  return [];\n}\n\n/**\n * Parse text size utilities\n */\nfunction parseTextSizeUtility(size: string): string[] {\n  const sizeMap: Record<string, [string, string]> = {\n    'xs': ['0.75rem', '1rem'],\n    'sm': ['0.875rem', '1.25rem'],\n    'base': ['1rem', '1.5rem'],\n    'lg': ['1.125rem', '1.75rem'],\n    'xl': ['1.25rem', '1.75rem'],\n    '2xl': ['1.5rem', '2rem'],\n    '3xl': ['1.875rem', '2.25rem'],\n    '4xl': ['2.25rem', '2.5rem'],\n    '5xl': ['3rem', '1'],\n    '6xl': ['3.75rem', '1'],\n    '7xl': ['4.5rem', '1'],\n    '8xl': ['6rem', '1'],\n    '9xl': ['8rem', '1'],\n  };\n\n  const [fontSize, lineHeight] = sizeMap[size] || ['1rem', '1.5rem'];\n  return [`font-size: ${fontSize}`, `line-height: ${lineHeight}`];\n}\n\n/**\n * Extract utility CSS from the build's CSS file\n */\nexport async function extractUtilityCSS(\n  buildDir: string\n): Promise<Map<string, string[]>> {\n  const utilityMap = new Map<string, string[]>();\n\n  // Find CSS files in build (supports all frameworks)\n  const cssPatterns = [\n    // Next.js\n    'static/**/*.css',\n    'static/css/**/*.css',\n    // Angular\n    'browser/**/*.css',\n    // Astro\n    '_astro/**/*.css',\n    // Nuxt\n    'public/_nuxt/**/*.css',\n    // Vite/Vue/React/Qwik generic\n    'assets/**/*.css',\n    // Gatsby/Hugo/Eleventy/Docusaurus/Parcel\n    '**/*.css',\n  ];\n  const cssFiles = await findFiles(buildDir, cssPatterns);\n\n  for (const cssFile of cssFiles) {\n    if (!isCSSFile(cssFile)) continue;\n\n    try {\n      const content = await readFileContent(cssFile);\n      const root = postcss.parse(content);\n\n      root.walkRules((rule) => {\n        // Extract class name from selector\n        const selectorMatch = rule.selector.match(/^\\.([^\\s:,\\[]+)/);\n        if (!selectorMatch) return;\n\n        const className = selectorMatch[1];\n        const declarations: string[] = [];\n\n        rule.walkDecls((decl) => {\n          declarations.push(`${decl.prop}: ${decl.value}`);\n        });\n\n        if (declarations.length > 0) {\n          utilityMap.set(className, declarations);\n        }\n      });\n    } catch {\n      // Skip files that can't be parsed\n    }\n  }\n\n  return utilityMap;\n}\n\n/**\n * Generate CSS for consolidated classes\n */\nexport async function generateConsolidatedCSS(\n  mappings: ClassMapping[],\n  buildDir: string,\n  cssLayer?: string | false\n): Promise<string> {\n  // First, try to extract utilities from the build CSS\n  const utilityMap = await extractUtilityCSS(buildDir);\n\n  const cssRules: string[] = [];\n\n  for (const mapping of mappings) {\n    const declarations: string[] = [];\n    const lossyClasses: string[] = [];\n\n    for (const className of mapping.classes) {\n      // Try to get from extracted utilities first\n      const extracted = utilityMap.get(className);\n      if (extracted) {\n        declarations.push(...extracted);\n        continue;\n      }\n\n      // Fall back to parsing the utility\n      const parsed = parseUtilityClass(className);\n      if (parsed.length > 0) {\n        declarations.push(...parsed);\n        continue;\n      }\n\n      // Class produced no CSS — if it's a non-flattenable class this is silent data loss\n      if (isNonFlattenableClass(className)) {\n        lossyClasses.push(className);\n      }\n    }\n\n    if (lossyClasses.length > 0) {\n      console.warn(\n        `[classpresso] WARNING: Lossy consolidation detected for \"${mapping.original}\" → \"${mapping.consolidated}\". ` +\n        `The following classes require media query, container query, or combinator selectors that cannot be ` +\n        `expressed as flat CSS and have been silently dropped: ${lossyClasses.join(', ')}. ` +\n        `To fix: set excludeNonFlattenableClasses: true in your classpresso.config (it is true by default) ` +\n        `or add these classes to exclude.patterns.`\n      );\n    }\n\n    // Remove duplicates\n    const uniqueDeclarations = [...new Set(declarations)];\n\n    if (uniqueDeclarations.length > 0) {\n      mapping.cssDeclarations = uniqueDeclarations.join('; ');\n      cssRules.push(`.${mapping.consolidated} {\\n  ${uniqueDeclarations.join(';\\n  ')};\\n}`);\n    }\n  }\n\n  const cssContent = cssRules.join('\\n\\n');\n\n  if (cssLayer) {\n    return `/* Classpresso Consolidated Classes */\\n@layer ${cssLayer} {\\n${cssRules.map(rule => '  ' + rule.replace(/\\n/g, '\\n  ')).join('\\n\\n')}\\n}`;\n  }\n\n  return `/* Classpresso Consolidated Classes */\\n${cssContent}`;\n}\n\n/**\n * Inject consolidated CSS into the build\n * Only injects into ONE CSS file (the largest) to avoid duplicating overhead\n */\nexport async function injectConsolidatedCSS(\n  buildDir: string,\n  consolidatedCSS: string\n): Promise<string> {\n  // Find CSS files in build (supports all frameworks)\n  const cssPatterns = [\n    // Next.js\n    'static/**/*.css',\n    'static/css/**/*.css',\n    'standalone/.next/static/**/*.css',\n    'standalone/.next/static/css/**/*.css',\n    // Angular\n    'browser/**/*.css',\n    // Astro\n    '_astro/**/*.css',\n    'client/_astro/**/*.css',\n    // Nuxt\n    'public/_nuxt/**/*.css',\n    // SvelteKit\n    '_app/**/*.css',\n    'client/**/*.css',\n    // Vite/Vue/React/Qwik generic\n    'assets/**/*.css',\n    // Gatsby/Hugo/Eleventy/Docusaurus/Parcel\n    '**/*.css',\n  ];\n  const cssFiles = await findFiles(buildDir, cssPatterns);\n\n  if (cssFiles.length === 0) {\n    throw new Error('No CSS files found in build output');\n  }\n\n  // Find the largest CSS file to inject into (likely the main stylesheet)\n  // This avoids duplicating the consolidated CSS across multiple files\n  let targetFile = cssFiles[0];\n  let maxSize = 0;\n\n  for (const cssFile of cssFiles) {\n    if (!isCSSFile(cssFile)) continue;\n    try {\n      const content = await readFileContent(cssFile);\n      // Skip if already injected\n      if (content.includes('Classpresso Consolidated')) {\n        return `none (already injected in ${cssFile})`;\n      }\n      const size = Buffer.byteLength(content, 'utf-8');\n      if (size > maxSize) {\n        maxSize = size;\n        targetFile = cssFile;\n      }\n    } catch {\n      // Skip files that can't be read\n    }\n  }\n\n  // Inject into the largest CSS file only\n  const existingContent = await readFileContent(targetFile);\n  const newContent = `${existingContent}\\n\\n${consolidatedCSS}`;\n  await writeFileContent(targetFile, newContent);\n\n  return targetFile;\n}\n","/**\n * Transformer - Replaces class patterns in build output\n */\n\nimport type { ClassMapping, TransformResult, ClasspressoConfig, DynamicBasePattern } from '../types/index.js';\nimport {\n  findFiles,\n  readFileContent,\n  writeFileContent,\n  backupFile,\n  isJSFile,\n  isHTMLFile,\n  isRSCFile,\n  DEFAULT_PATTERNS,\n  filterExcludedFiles,\n} from '../utils/files.js';\nimport { escapeRegex } from '../utils/regex.js';\nimport { normalizeClassString } from './scanner.js';\n\ninterface MatchPattern {\n  regex: RegExp;\n  supportsDataAttr: boolean;\n}\n\n/**\n * Check if a set of classes is a superset of any dynamic base pattern\n * This helps prevent hydration mismatches in React/Next.js\n */\nfunction isSupersetOfDynamicBase(\n  classes: string[],\n  dynamicBasePatterns: Map<string, DynamicBasePattern>\n): boolean {\n  const classSet = new Set(classes);\n\n  for (const [, pattern] of dynamicBasePatterns) {\n    // Check if all base classes are present in the target classes\n    const allBasePresent = pattern.baseClasses.every(cls => classSet.has(cls));\n\n    // If all base classes are present and target has MORE classes, it's a superset\n    if (allBasePresent && classes.length > pattern.baseClasses.length) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\n/**\n * Check if a set of classes exactly matches any dynamic base pattern\n */\nfunction matchesDynamicBase(\n  classes: string[],\n  dynamicBasePatterns: Map<string, DynamicBasePattern>\n): boolean {\n  const classSet = new Set(classes);\n\n  for (const [, pattern] of dynamicBasePatterns) {\n    if (classes.length !== pattern.baseClasses.length) continue;\n\n    const allMatch = pattern.baseClasses.every(cls => classSet.has(cls));\n    if (allMatch) return true;\n  }\n\n  return false;\n}\n\n/**\n * Build a regex pattern to match a class string in various contexts\n */\nfunction buildMatchPatterns(classString: string): MatchPattern[] {\n  const escaped = escapeRegex(classString);\n\n  return [\n    // className=\"...\" (JSX/HTML) - supports data attributes\n    { regex: new RegExp(`(className\\\\s*=\\\\s*\")${escaped}(\")`,'g'), supportsDataAttr: true },\n    { regex: new RegExp(`(className\\\\s*=\\\\s*')${escaped}(')`,'g'), supportsDataAttr: true },\n\n    // className:\"...\" (React createElement) - no data attr support\n    { regex: new RegExp(`(className\\\\s*:\\\\s*\")${escaped}(\")`,'g'), supportsDataAttr: false },\n    { regex: new RegExp(`(className\\\\s*:\\\\s*')${escaped}(')`,'g'), supportsDataAttr: false },\n\n    // Template literals: className:`...` (static content only)\n    { regex: new RegExp(`(className\\\\s*:\\\\s*\\`)${escaped}(\\`)`,'g'), supportsDataAttr: false },\n\n    // Template literals with dynamic suffix: className:`... ${...}`\n    // Matches static prefix before ${...} expression\n    { regex: new RegExp(`(className\\\\s*:\\\\s*\\`)${escaped}( \\\\$\\\\{)`,'g'), supportsDataAttr: false },\n\n    // \"className\",\"...\" (minified) - no data attr support\n    { regex: new RegExp(`(\"className\"\\\\s*,\\\\s*\")${escaped}(\")`,'g'), supportsDataAttr: false },\n\n    // class=\"...\" (HTML) - supports data attributes\n    { regex: new RegExp(`(\\\\bclass\\\\s*=\\\\s*\")${escaped}(\")`,'g'), supportsDataAttr: true },\n    { regex: new RegExp(`(\\\\bclass\\\\s*=\\\\s*')${escaped}(')`,'g'), supportsDataAttr: true },\n\n    // class:\"...\" (Vue/Quasar createElement) - no data attr support\n    { regex: new RegExp(`(\\\\bclass\\\\s*:\\\\s*\")${escaped}(\")`,'g'), supportsDataAttr: false },\n    { regex: new RegExp(`(\\\\bclass\\\\s*:\\\\s*')${escaped}(')`,'g'), supportsDataAttr: false },\n\n    // HTML entity encoded: class=&quot;...&quot; - supports data attributes\n    { regex: new RegExp(`(class=&quot;)${escaped}(&quot;)`,'g'), supportsDataAttr: true },\n    { regex: new RegExp(`(class=&#34;)${escaped}(&#34;)`,'g'), supportsDataAttr: true },\n\n    // RSC payload (escaped JSON in HTML): \\\"className\\\":\\\"...\\\"\n    // This is used in Next.js self.__next_f.push() payloads\n    { regex: new RegExp(`(\\\\\\\\\"className\\\\\\\\\"\\\\s*:\\\\s*\\\\\\\\\")${escaped}(\\\\\\\\\")`, 'g'), supportsDataAttr: false },\n  ];\n}\n\n/**\n * Replace a single class pattern in content\n */\nfunction replacePattern(\n  content: string,\n  originalClasses: string,\n  consolidated: string,\n  excludedClasses: string[],\n  originalClassList: string[],\n  addDataAttributes: boolean\n): { content: string; replacements: number } {\n  let replacements = 0;\n  let result = content;\n\n  // Build the replacement string (consolidated + excluded classes)\n  const replacement = excludedClasses.length > 0\n    ? `${consolidated} ${excludedClasses.join(' ')}`\n    : consolidated;\n\n  // Build the data attribute string\n  const dataAttr = addDataAttributes\n    ? ` data-cp-original=\"${originalClassList.join(' ')}\"`\n    : '';\n\n  // Try exact match first\n  const patterns = buildMatchPatterns(originalClasses);\n\n  for (const { regex: pattern, supportsDataAttr } of patterns) {\n    const beforeLength = result.length;\n    const suffix = (addDataAttributes && supportsDataAttr) ? dataAttr : '';\n    result = result.replace(pattern, `$1${replacement}$2${suffix}`);\n    if (result.length !== beforeLength) {\n      // Count replacements (approximate)\n      const matches = content.match(pattern);\n      if (matches) replacements += matches.length;\n    }\n  }\n\n  return { content: result, replacements };\n}\n\n/**\n * Find all variations of a class pattern that should be replaced\n * This handles cases where classes appear in different orders\n */\nfunction findClassVariations(\n  content: string,\n  mapping: ClassMapping,\n  config: ClasspressoConfig\n): string[] {\n  const variations: string[] = [];\n  const targetClasses = new Set(mapping.classes);\n\n  // Create regex patterns to find className attributes (including HTML entity encoded and template literals)\n  const classAttrPatterns = [\n    /(?:className|class)\\s*[=:]\\s*[\"']([^\"']+)[\"']/g,\n    /class=&quot;([^&]+)&quot;/g,\n    /class=&#34;([^&]+)&#34;/g,\n    // Template literals - static only: className:`...`\n    /(?:className|class)\\s*:\\s*`([^`$]+)`/g,\n    // Template literals with dynamic suffix: className:`... ${...}`\n    // Captures the static part before the ${\n    /(?:className|class)\\s*:\\s*`([^`$]+) \\$\\{/g,\n    // RSC payload (escaped JSON in HTML): \\\"className\\\":\\\"...\\\"\n    // Used in Next.js self.__next_f.push() payloads\n    /\\\\\"className\\\\\"\\s*:\\s*\\\\\"([^\"\\\\]+)\\\\\"/g,\n  ];\n\n  for (const classAttrRegex of classAttrPatterns) {\n    classAttrRegex.lastIndex = 0;\n    let match;\n    while ((match = classAttrRegex.exec(content)) !== null) {\n      const classString = match[1];\n      const { classes } = normalizeClassString(classString, config.exclude);\n\n      // Check if this class string contains all the target classes\n      if (classes.length >= targetClasses.size) {\n        const classSet = new Set(classes);\n        let allPresent = true;\n\n        for (const targetClass of targetClasses) {\n          if (!classSet.has(targetClass)) {\n            allPresent = false;\n            break;\n          }\n        }\n\n        // If all target classes are present and it's an exact match\n        if (allPresent && classes.length === targetClasses.size) {\n          variations.push(classString);\n        }\n      }\n    }\n  }\n\n  return [...new Set(variations)];\n}\n\n/**\n * Transform a single file\n */\nasync function transformFile(\n  filePath: string,\n  mappings: ClassMapping[],\n  config: ClasspressoConfig,\n  dryRun: boolean,\n  dynamicBasePatterns: Map<string, DynamicBasePattern>,\n  mergeablePatterns: Set<string>\n): Promise<{ modified: boolean; replacements: number; skippedForHydration: number; error?: string }> {\n  try {\n    let content = await readFileContent(filePath);\n    let totalReplacements = 0;\n    let skippedForHydration = 0;\n    const originalContent = content;\n    const isJS = isJSFile(filePath);\n\n    for (const mapping of mappings) {\n      // Skip patterns that would cause hydration mismatches (SSR mode only)\n      // In non-SSR builds there is no server-rendered HTML to reconcile against,\n      // so template-literal base patterns pose no hydration risk.\n      if (config.ssr && dynamicBasePatterns.size > 0) {\n        // Skip if the pattern is a superset of OR exactly matches a dynamic base\n        // This prevents hydration mismatches in React/Next.js where:\n        // - HTML has rendered result: \"px-4 py-2 bg-blue\" (superset of base)\n        // - JS has template literal: `px-4 py-2 ${dynamic}` (base pattern)\n        // - Static JS may also have: \"px-4 py-2 bg-blue\" (same as HTML)\n        // All must stay untransformed to match at hydration time\n        const isSuperset = isSupersetOfDynamicBase(mapping.classes, dynamicBasePatterns);\n        const isExact = matchesDynamicBase(mapping.classes, dynamicBasePatterns);\n\n        if (isSuperset || isExact) {\n          skippedForHydration++;\n          continue;\n        }\n      }\n\n      // Skip mergeable patterns in JS files (SSR mode only)\n      // These are patterns that appear in JS as className props but get merged\n      // with component-internal classes in the HTML output during SSR.\n      // In non-SSR builds, className props are applied client-side only and\n      // there is no server-rendered HTML to cause a mismatch.\n      // NOTE: In SSR mode, mergeable patterns are also filtered at pattern detection\n      // time (pattern-detector.ts) to ensure consistent transformation across files.\n      if (config.ssr && isJS && mergeablePatterns.has(mapping.original)) {\n        skippedForHydration++;\n        continue;\n      }\n\n      // Find all variations of this pattern in the file\n      const variations = findClassVariations(content, mapping, config);\n\n      for (const variation of variations) {\n        const { content: newContent, replacements } = replacePattern(\n          content,\n          variation,\n          mapping.consolidated,\n          mapping.excludedClasses,\n          mapping.classes,\n          config.dataAttributes\n        );\n        content = newContent;\n        totalReplacements += replacements;\n      }\n    }\n\n    const modified = content !== originalContent;\n\n    if (modified && !dryRun) {\n      if (config.backup) {\n        await backupFile(filePath);\n      }\n      await writeFileContent(filePath, content);\n    }\n\n    return { modified, replacements: totalReplacements, skippedForHydration };\n  } catch (err) {\n    return {\n      modified: false,\n      replacements: 0,\n      skippedForHydration: 0,\n      error: `Error transforming ${filePath}: ${err}`,\n    };\n  }\n}\n\n/**\n * Transform all files in the build output\n */\nexport async function transformBuildOutput(\n  mappings: ClassMapping[],\n  config: ClasspressoConfig,\n  dryRun: boolean = false,\n  dynamicBasePatterns: Map<string, DynamicBasePattern> = new Map(),\n  mergeablePatterns: Set<string> = new Set()\n): Promise<TransformResult> {\n  if (config.verbose) {\n    if (dynamicBasePatterns.size > 0) {\n      console.log(`  ℹ Found ${dynamicBasePatterns.size} dynamic base patterns (template literals)`);\n    }\n    if (mergeablePatterns.size > 0) {\n      console.log(`  ℹ Found ${mergeablePatterns.size} mergeable patterns (className props)`);\n    }\n  }\n\n  const patterns = config.include.length > 0 ? config.include : DEFAULT_PATTERNS;\n  const allFiles = await findFiles(config.buildDir, patterns);\n\n  // Filter out excluded files\n  const files = filterExcludedFiles(allFiles, config.exclude.files || []);\n\n  if (config.verbose && allFiles.length !== files.length) {\n    console.log(`  ℹ Excluded ${allFiles.length - files.length} files from transformation`);\n  }\n\n  let filesModified = 0;\n  let totalBytesChanged = 0;\n  let totalSkippedForHydration = 0;\n  const errors: string[] = [];\n\n  for (const filePath of files) {\n    // Only transform JS, HTML, and RSC files\n    if (!isJSFile(filePath) && !isHTMLFile(filePath) && !isRSCFile(filePath)) {\n      continue;\n    }\n\n    const result = await transformFile(filePath, mappings, config, dryRun, dynamicBasePatterns, mergeablePatterns);\n\n    if (result.error) {\n      errors.push(result.error);\n    }\n\n    if (result.modified) {\n      filesModified++;\n      // Estimate bytes changed based on replacements\n      totalBytesChanged += result.replacements * 10; // Rough estimate\n    }\n\n    totalSkippedForHydration += result.skippedForHydration;\n  }\n\n  if (config.verbose && totalSkippedForHydration > 0) {\n    console.log(`Skipped ${totalSkippedForHydration} pattern transformations to prevent hydration mismatches`);\n  }\n\n  return {\n    filesModified,\n    bytesChanged: totalBytesChanged,\n    errors,\n  };\n}\n","/**\n * CSS Purger - Removes unused CSS classes after consolidation\n */\n\nimport postcss from 'postcss';\nimport type { ClassMapping, ClasspressoConfig, PurgeResult } from '../types/index.js';\nimport { readFileContent, writeFileContent, findFiles, isCSSFile } from '../utils/files.js';\nimport { ALL_CLASS_PATTERNS } from '../utils/regex.js';\n\n/**\n * CSS file patterns for all supported frameworks\n */\nconst CSS_PATTERNS = [\n  // Next.js\n  'static/**/*.css',\n  'static/css/**/*.css',\n  'standalone/.next/static/**/*.css',\n  // Angular\n  'browser/**/*.css',\n  // Astro\n  '_astro/**/*.css',\n  'client/_astro/**/*.css',\n  // Nuxt\n  'public/_nuxt/**/*.css',\n  // SvelteKit\n  '_app/**/*.css',\n  'client/**/*.css',\n  // Vite/Vue/React/Qwik generic\n  'assets/**/*.css',\n  // Generic fallback\n  '**/*.css',\n];\n\n/**\n * File patterns for scanning class usage\n */\nconst SCAN_PATTERNS = [\n  '**/*.html',\n  '**/*.js',\n  '**/*.mjs',\n  '**/*.jsx',\n];\n\n/**\n * Extract all individual class names used in HTML/JS files\n */\nexport async function extractUsedClasses(\n  buildDir: string\n): Promise<Set<string>> {\n  const usedClasses = new Set<string>();\n  const files = await findFiles(buildDir, SCAN_PATTERNS);\n\n  for (const file of files) {\n    try {\n      const content = await readFileContent(file);\n\n      // Use all class patterns to find class strings\n      for (const pattern of ALL_CLASS_PATTERNS) {\n        const regex = new RegExp(pattern.source, pattern.flags);\n        let match;\n\n        while ((match = regex.exec(content)) !== null) {\n          // Extract the class string from the match groups\n          const classString = match[1] || match[2] || match[3];\n          if (classString) {\n            // Split into individual classes\n            const classes = classString.split(/\\s+/).filter(c => c.length > 0);\n            classes.forEach(cls => usedClasses.add(cls));\n          }\n        }\n      }\n    } catch {\n      // Skip files that can't be read\n    }\n  }\n\n  return usedClasses;\n}\n\n/**\n * Extract class name from a CSS selector\n * Returns null if not a simple class selector\n */\nfunction extractClassFromSelector(selector: string): string | null {\n  // Match simple class selectors like .flex, .items-center\n  // Also handles escaped characters like .hover\\:bg-blue-700\n  const match = selector.match(/^\\.([^\\s:,\\[]+)/);\n  if (match) {\n    // Unescape the class name\n    return match[1].replace(/\\\\/g, '');\n  }\n  return null;\n}\n\n/**\n * Check if a class matches the safelist\n */\nfunction matchesSafelist(className: string, safelist: (string | RegExp)[]): boolean {\n  for (const pattern of safelist) {\n    if (typeof pattern === 'string') {\n      if (className === pattern) return true;\n    } else if (pattern instanceof RegExp) {\n      if (pattern.test(className)) return true;\n    }\n  }\n  return false;\n}\n\n/**\n * Check if a class is a responsive or state variant that might be dynamically applied\n */\nfunction isResponsiveOrStateVariant(className: string): boolean {\n  const variantPrefixes = [\n    'sm:', 'md:', 'lg:', 'xl:', '2xl:',  // Responsive\n    'hover:', 'focus:', 'active:', 'disabled:', 'group-hover:',  // State\n    'dark:', 'light:',  // Theme\n    'first:', 'last:', 'odd:', 'even:',  // Child\n    'before:', 'after:',  // Pseudo-elements\n  ];\n  return variantPrefixes.some(prefix => className.startsWith(prefix));\n}\n\n/**\n * Main function to purge unused CSS classes\n */\nexport async function purgeUnusedCSS(\n  buildDir: string,\n  mappings: ClassMapping[],\n  config: ClasspressoConfig\n): Promise<PurgeResult> {\n  const result: PurgeResult = {\n    filesProcessed: 0,\n    rulesRemoved: 0,\n    purgedClasses: [],\n    bytesSaved: 0,\n    keptClasses: [],\n    errors: [],\n  };\n\n  try {\n    // Step 1: Build set of classes that were consolidated\n    const consolidatedClasses = new Set<string>();\n    for (const mapping of mappings) {\n      mapping.classes.forEach(cls => consolidatedClasses.add(cls));\n      // Also add the consolidated class name (cp-a, cp-b, etc.)\n      consolidatedClasses.add(mapping.consolidated);\n    }\n\n    // Step 2: Scan HTML/JS to find all classes still in use\n    const usedClasses = await extractUsedClasses(buildDir);\n\n    // Step 3: Find CSS files\n    const cssFiles = await findFiles(buildDir, CSS_PATTERNS);\n\n    // Step 4: Process each CSS file\n    for (const cssFile of cssFiles) {\n      if (!isCSSFile(cssFile)) continue;\n\n      try {\n        const originalContent = await readFileContent(cssFile);\n        const originalSize = Buffer.byteLength(originalContent, 'utf-8');\n\n        const root = postcss.parse(originalContent);\n        const rulesToRemove: postcss.Rule[] = [];\n\n        root.walkRules((rule) => {\n          const className = extractClassFromSelector(rule.selector);\n          if (!className) return;\n\n          // Decision logic: should we purge this class?\n\n          // KEEP: Class is still used in HTML/JS\n          if (usedClasses.has(className)) {\n            result.keptClasses.push(className);\n            return;\n          }\n\n          // KEEP: Class is a consolidated class (cp-*)\n          if (className.startsWith(config.hashPrefix)) {\n            return;\n          }\n\n          // KEEP: Class was part of consolidation but might still be used elsewhere\n          // Actually, if it's not in usedClasses, it's safe to remove\n\n          // KEEP: Class matches safelist\n          if (config.purgeSafelist && matchesSafelist(className, config.purgeSafelist)) {\n            result.keptClasses.push(className);\n            return;\n          }\n\n          // KEEP: Responsive/state variants (might be dynamically applied)\n          if (isResponsiveOrStateVariant(className)) {\n            result.keptClasses.push(className);\n            return;\n          }\n\n          // PURGE: Class is not used\n          rulesToRemove.push(rule);\n          result.purgedClasses.push(className);\n        });\n\n        // Remove the rules\n        for (const rule of rulesToRemove) {\n          rule.remove();\n          result.rulesRemoved++;\n        }\n\n        // Write back if changes were made\n        if (rulesToRemove.length > 0) {\n          const newContent = root.toString();\n          const newSize = Buffer.byteLength(newContent, 'utf-8');\n          result.bytesSaved += (originalSize - newSize);\n          await writeFileContent(cssFile, newContent);\n        }\n\n        result.filesProcessed++;\n      } catch (error) {\n        result.errors.push(`Error processing ${cssFile}: ${error}`);\n      }\n    }\n\n    // Deduplicate arrays\n    result.purgedClasses = [...new Set(result.purgedClasses)];\n    result.keptClasses = [...new Set(result.keptClasses)];\n\n  } catch (error) {\n    result.errors.push(`Purge error: ${error}`);\n  }\n\n  return result;\n}\n","/**\n * Rehasher - Restore the cache-busting contract for content-hashed assets.\n *\n * Bundlers (Vite/Rollup `[hash]`, webpack `[contenthash]`, …) name assets after their\n * PRE-optimization content. Classpresso rewrites those files in place but keeps the\n * filename, so the hash in the filename no longer reflects the SERVED content. A returning\n * client with `Cache-Control: immutable` then keeps serving a stale cached copy after a\n * redeploy: old `cp-*` rules against new `cp-*` references → broken styling.\n *\n * The fix: after all mutations are done, re-hash every content-hashed asset whose content\n * actually changed, rename it to a new content-hash filename, and rewrite every reference\n * to it (HTML, JS, CSS `url()`, and bundler manifest JSON) so the build stays internally\n * consistent. Identical input → identical output, so the names are deterministic.\n *\n * Only JS/CSS assets with a hash-shaped filename are renamed. HTML/RSC entry documents are\n * never renamed (they are served by route, not by hash) but their references are updated.\n */\n\nimport { rename } from 'fs/promises';\nimport { existsSync } from 'fs';\nimport crypto from 'crypto';\nimport path from 'path';\nimport type { ClasspressoConfig } from '../types/index.js';\nimport {\n  findFiles,\n  readFileContent,\n  writeFileContent,\n  filterExcludedFiles,\n  isJSFile,\n  isCSSFile,\n  DEFAULT_PATTERNS,\n} from '../utils/files.js';\n\nexport interface RehashRename {\n  /** Absolute path before renaming */\n  fromPath: string;\n  /** Absolute path after renaming */\n  toPath: string;\n  /** Original filename (basename) */\n  fromName: string;\n  /** New filename (basename) */\n  toName: string;\n}\n\nexport interface RehashResult {\n  /** Assets that were renamed to a new content-hash filename */\n  renamed: RehashRename[];\n  /** Number of files whose references were rewritten */\n  filesUpdated: number;\n  /** Non-fatal errors */\n  errors: string[];\n}\n\n/**\n * Decide whether a filename segment looks like a bundler content hash.\n *\n * Content hashes are hex or base64url and effectively always contain a digit or mix\n * letter cases. Plain human-readable name parts (\"react-dom\", \"vendor\", \"polyfills\")\n * are all-lowercase with no digit, so they are left alone.\n */\nfunction looksLikeHash(segment: string): boolean {\n  if (segment.length < 8) return false;\n  if (!/^[A-Za-z0-9_-]+$/.test(segment)) return false;\n  const hasDigit = /[0-9]/.test(segment);\n  const hasUpper = /[A-Z]/.test(segment);\n  const hasLower = /[a-z]/.test(segment);\n  return hasDigit || (hasUpper && hasLower);\n}\n\n/**\n * Split a filename into { prefix, hash, ext } when it carries a content hash.\n * Returns null when no hash-shaped segment is present.\n *\n * Handles the common forms:\n *   index-D4Gx2k_p.css   (Vite/Rollup: name-<hash>.ext)\n *   main.1f2e3d4c.js     (webpack: name.<hash>.ext)\n *   D4Gx2k_p.css         (filename is the hash itself)\n */\nexport function detectContentHash(\n  basename: string\n): { prefix: string; hash: string; ext: string } | null {\n  const extMatch = basename.match(/\\.[^.]+$/);\n  if (!extMatch) return null;\n  const ext = extMatch[0];\n  const stem = basename.slice(0, -ext.length);\n\n  // Split on the last `-` or `.` separator (NOT `_`, which appears inside base64url hashes).\n  const sepMatch = stem.match(/^(.*[-.])([A-Za-z0-9_-]+)$/);\n  if (sepMatch && looksLikeHash(sepMatch[2])) {\n    return { prefix: sepMatch[1], hash: sepMatch[2], ext };\n  }\n\n  // Whole stem is the hash (no human-readable prefix).\n  if (looksLikeHash(stem)) {\n    return { prefix: '', hash: stem, ext };\n  }\n\n  return null;\n}\n\n/**\n * Compute a content hash of the SAME length as the original, so the new filename stays tidy.\n * Deterministic: identical content always yields the same name.\n */\nfunction computeHash(content: string, length: number): string {\n  const digest = crypto.createHash('sha256').update(content).digest('hex');\n  return digest.slice(0, Math.max(8, length));\n}\n\n/**\n * Asset file patterns (JS + CSS) used for hashing snapshots and rehash candidates.\n */\nfunction assetPatterns(config: ClasspressoConfig): string[] {\n  return config.include.length > 0 ? config.include : DEFAULT_PATTERNS;\n}\n\n/**\n * Snapshot the content hash of every candidate asset BEFORE any mutation.\n * Compared against the post-mutation state to find what actually changed.\n */\nexport async function captureAssetHashes(\n  config: ClasspressoConfig\n): Promise<Map<string, string>> {\n  const snapshot = new Map<string, string>();\n  const allFiles = await findFiles(config.buildDir, assetPatterns(config));\n  const files = filterExcludedFiles(allFiles, config.exclude.files || []);\n\n  for (const filePath of files) {\n    if (!isJSFile(filePath) && !isCSSFile(filePath)) continue;\n    try {\n      const content = await readFileContent(filePath);\n      snapshot.set(path.resolve(filePath), computeHash(content, 16));\n    } catch {\n      // Unreadable file - skip; it simply won't be considered for rehashing.\n    }\n  }\n\n  return snapshot;\n}\n\n/**\n * All text files in the build whose references may point at hashed assets.\n */\nasync function findReferenceFiles(buildDir: string): Promise<string[]> {\n  const patterns = [\n    '**/*.html',\n    '**/*.htm',\n    '**/*.js',\n    '**/*.mjs',\n    '**/*.cjs',\n    '**/*.css',\n    '**/*.rsc',\n    '**/*.json',\n    '**/*.map',\n    '**/*.webmanifest',\n  ];\n  const files = await findFiles(buildDir, patterns);\n  return [...new Set(files)];\n}\n\n/**\n * Re-hash modified content-hashed assets and rewrite every reference to them.\n *\n * @param originalHashes Snapshot from captureAssetHashes(), taken before mutation.\n */\nexport async function rehashAssets(\n  config: ClasspressoConfig,\n  originalHashes: Map<string, string>\n): Promise<RehashResult> {\n  const result: RehashResult = { renamed: [], filesUpdated: 0, errors: [] };\n\n  const allFiles = await findFiles(config.buildDir, assetPatterns(config));\n  const files = filterExcludedFiles(allFiles, config.exclude.files || []);\n\n  // Plan renames for every hashed asset whose content changed.\n  const renameMap = new Map<string, string>(); // old basename -> new basename\n  for (const filePath of files) {\n    if (!isJSFile(filePath) && !isCSSFile(filePath)) continue;\n\n    const absPath = path.resolve(filePath);\n    const original = originalHashes.get(absPath);\n\n    let content: string;\n    try {\n      content = await readFileContent(filePath);\n    } catch {\n      continue;\n    }\n\n    const current = computeHash(content, 16);\n    // Unchanged content keeps its filename - nothing to do.\n    if (original !== undefined && original === current) continue;\n    // A file with no snapshot entry was created during optimization; treat as changed.\n\n    const dir = path.dirname(filePath);\n    const basename = path.basename(filePath);\n    const parsed = detectContentHash(basename);\n    if (!parsed) continue; // Not content-hashed - renaming would break a stable name.\n\n    const newHash = computeHash(content, parsed.hash.length);\n    if (newHash === parsed.hash) continue; // Hash already reflects content (shouldn't happen, but safe).\n\n    const newName = `${parsed.prefix}${newHash}${parsed.ext}`;\n    if (newName === basename || renameMap.has(basename)) continue;\n\n    const toPath = path.join(dir, newName);\n    try {\n      await rename(filePath, toPath);\n      // Keep the backup paired with the renamed asset so restores still line up.\n      const backup = `${filePath}.classpresso-backup`;\n      if (existsSync(backup)) {\n        await rename(backup, `${toPath}.classpresso-backup`);\n      }\n      renameMap.set(basename, newName);\n      result.renamed.push({\n        fromPath: filePath,\n        toPath,\n        fromName: basename,\n        toName: newName,\n      });\n    } catch (err) {\n      result.errors.push(`Failed to rename ${basename} -> ${newName}: ${err}`);\n    }\n  }\n\n  if (renameMap.size === 0) return result;\n\n  // Rewrite every reference to the old filenames across all text files.\n  const referenceFiles = await findReferenceFiles(config.buildDir);\n  for (const filePath of referenceFiles) {\n    try {\n      const content = await readFileContent(filePath);\n      let updated = content;\n      for (const [oldName, newName] of renameMap) {\n        if (updated.includes(oldName)) {\n          updated = updated.split(oldName).join(newName);\n        }\n      }\n      if (updated !== content) {\n        await writeFileContent(filePath, updated);\n        result.filesUpdated++;\n      }\n    } catch (err) {\n      result.errors.push(`Failed to rewrite references in ${filePath}: ${err}`);\n    }\n  }\n\n  return result;\n}\n","/**\n * Optimize Command - Apply consolidation to build output\n */\n\nimport chalk from 'chalk';\nimport type { ClasspressoConfig } from '../types/index.js';\nimport { scanBuildOutput } from '../core/scanner.js';\nimport { detectConsolidatablePatterns } from '../core/pattern-detector.js';\nimport { createClassMappings, saveMappingManifest } from '../core/consolidator.js';\nimport { generateConsolidatedCSS, injectConsolidatedCSS } from '../core/css-generator.js';\nimport { transformBuildOutput } from '../core/transformer.js';\nimport { purgeUnusedCSS } from '../core/css-purger.js';\nimport { captureAssetHashes, rehashAssets } from '../core/rehasher.js';\nimport { calculateMetrics, estimateCSSOverhead, formatBytes, formatPercentage, formatTime } from '../core/metrics.js';\nimport { loadConfig, detectBuildDir, detectFrameworkHint } from '../config.js';\nimport { createLogger } from '../utils/logger.js';\nimport { sendErrorReport } from '../utils/error-reporter.js';\n\ninterface OptimizeOptions {\n  dir?: string;\n  minOccurrences: string;\n  minClasses: string;\n  ssr?: boolean;\n  dryRun?: boolean;\n  backup?: boolean;\n  manifest?: boolean;\n  purgeUnused?: boolean;\n  rehash?: boolean;\n  verbose?: boolean;\n  debug?: boolean;\n  sendErrorReports?: boolean;\n  errorReportUrl?: string;\n}\n\nexport async function optimizeCommand(options: OptimizeOptions): Promise<void> {\n  // Auto-detect build directory if not specified\n  let buildDir = options.dir;\n\n  if (!buildDir) {\n    const detection = await detectBuildDir();\n    if (detection.detected) {\n      buildDir = detection.detected;\n      console.log(chalk.gray(`Auto-detected build directory: ${buildDir}`));\n      if (detection.suggestion) {\n        console.log(chalk.yellow(detection.suggestion));\n      }\n    } else {\n      const hint = await detectFrameworkHint();\n      if (hint) {\n        console.error(chalk.red(`No build directory found.`));\n        console.log(chalk.yellow(`Detected ${hint.name} project. Expected build directory: ${hint.buildDir}`));\n        console.log(chalk.gray(`Run your build command first, then try again.`));\n      } else {\n        console.error(chalk.red('No build directory found and could not auto-detect.'));\n        console.log(chalk.gray('Use --dir to specify your build directory, or run your build command first.'));\n      }\n      process.exit(1);\n    }\n  }\n\n  const config = await loadConfig(buildDir);\n\n  // Override config with CLI options\n  config.minOccurrences = parseInt(options.minOccurrences, 10);\n  config.minClasses = parseInt(options.minClasses, 10);\n  config.ssr = options.ssr || false;\n  config.backup = options.backup || false;\n  config.manifest = options.manifest !== false;\n  config.verbose = options.verbose || false;\n  config.debug = options.debug || config.debug || false;\n  config.sendErrorReports = options.sendErrorReports || config.sendErrorReports || false;\n  config.errorReportUrl = options.errorReportUrl || config.errorReportUrl;\n  config.purgeUnusedCSS = options.purgeUnused || config.purgeUnusedCSS || false;\n  // --no-rehash sets options.rehash to false (Commander negates --no-* flags).\n  config.rehashAssets = options.rehash === false ? false : (config.rehashAssets !== false);\n\n  const dryRun = options.dryRun || false;\n\n  // Initialize logger\n  const logger = createLogger({\n    debug: config.debug,\n    verbose: config.verbose,\n    buildDir: config.buildDir,\n  });\n\n  console.log(chalk.cyan('\\n☕ Classpresso - Optimizing build output...\\n'));\n\n  if (dryRun) {\n    console.log(chalk.yellow('🔍 DRY RUN MODE - No files will be modified\\n'));\n  }\n\n  if (config.ssr) {\n    console.log(chalk.blue('🔒 SSR MODE - Only transforming patterns found in both HTML and JS\\n'));\n  }\n\n  try {\n    // Log system info and config\n    await logger.logSystemInfo();\n    await logger.logConfig(config, 'optimize command');\n\n    // Step 1: Scan\n    console.log(chalk.gray('Scanning build output...'));\n    const scanStartTime = Date.now();\n    await logger.logStep('Starting scan', { buildDir: config.buildDir, dryRun });\n    const scanResult = await scanBuildOutput(config);\n    await logger.logTiming('Scan', Date.now() - scanStartTime);\n    await logger.logStep('Scan complete', {\n      filesScanned: scanResult.files.length,\n      uniquePatterns: scanResult.occurrences.size,\n      errors: scanResult.errors.length,\n    });\n    console.log(chalk.green(`  ✓ Scanned ${scanResult.files.length} files\\n`));\n\n    // Step 2: Detect patterns\n    console.log(chalk.gray('Detecting patterns...'));\n    const detectStartTime = Date.now();\n    await logger.logStep('Detecting patterns');\n    // Pass mergeablePatterns to pattern detector in SSR mode to prevent hydration mismatches\n    const candidates = detectConsolidatablePatterns(\n      scanResult.occurrences,\n      config,\n      config.ssr ? scanResult.mergeablePatterns : undefined\n    );\n    await logger.logTiming('Pattern detection', Date.now() - detectStartTime);\n    await logger.logStep('Pattern detection complete', { candidatesFound: candidates.length });\n    console.log(chalk.green(`  ✓ Found ${candidates.length} patterns to consolidate\\n`));\n\n    if (candidates.length === 0) {\n      console.log(chalk.yellow('No patterns found that meet the consolidation criteria.'));\n      console.log(chalk.gray('Try lowering --min-occurrences or --min-classes\\n'));\n      await logger.logStep('No patterns to consolidate - exiting');\n      await logger.close();\n      return;\n    }\n\n    // Step 3: Create mappings\n    console.log(chalk.gray('Creating class mappings...'));\n    const mappingStartTime = Date.now();\n    await logger.logStep('Creating class mappings');\n    const mappings = createClassMappings(candidates);\n    await logger.logTiming('Mapping creation', Date.now() - mappingStartTime);\n    await logger.logStep('Mappings created', { mappingCount: mappings.length });\n    console.log(chalk.green(`  ✓ Created ${mappings.length} mappings\\n`));\n\n    // Step 4: Generate CSS\n    console.log(chalk.gray('Generating consolidated CSS...'));\n    const cssStartTime = Date.now();\n    await logger.logStep('Generating consolidated CSS');\n    const consolidatedCSS = await generateConsolidatedCSS(mappings, config.buildDir, config.cssLayer);\n    const cssBytes = Buffer.byteLength(consolidatedCSS, 'utf-8');\n    await logger.logTiming('CSS generation', Date.now() - cssStartTime);\n    await logger.logStep('CSS generated', { cssBytes });\n    console.log(chalk.green(`  ✓ Generated ${formatBytes(cssBytes)} of CSS\\n`));\n\n    // Snapshot asset content hashes BEFORE any mutation so we can re-hash only what changes.\n    const assetHashSnapshot = (config.rehashAssets && !dryRun)\n      ? await captureAssetHashes(config)\n      : null;\n\n    // Step 5: Transform build output\n    console.log(chalk.gray('Transforming build output...'));\n    const transformStartTime = Date.now();\n    await logger.logStep('Transforming build output', { dryRun });\n    const transformResult = await transformBuildOutput(\n      mappings,\n      config,\n      dryRun,\n      scanResult.dynamicBasePatterns,\n      scanResult.mergeablePatterns\n    );\n    await logger.logTiming('Transformation', Date.now() - transformStartTime);\n    await logger.logStep('Transformation complete', {\n      filesModified: transformResult.filesModified,\n      bytesChanged: transformResult.bytesChanged,\n      errors: transformResult.errors.length,\n    });\n    console.log(chalk.green(`  ✓ Modified ${transformResult.filesModified} files\\n`));\n\n    if (config.verbose) {\n      if (scanResult.dynamicBasePatterns.size > 0) {\n        console.log(chalk.gray(`  ℹ Found ${scanResult.dynamicBasePatterns.size} dynamic class patterns (template literals)\\n`));\n      }\n      if (scanResult.mergeablePatterns.size > 0) {\n        console.log(chalk.gray(`  ℹ Found ${scanResult.mergeablePatterns.size} mergeable patterns (className props)\\n`));\n      }\n    }\n\n    // Step 6: Inject CSS (if not dry run)\n    if (!dryRun) {\n      console.log(chalk.gray('Injecting consolidated CSS...'));\n      const injectStartTime = Date.now();\n      await logger.logStep('Injecting consolidated CSS');\n      const cssFile = await injectConsolidatedCSS(config.buildDir, consolidatedCSS);\n      await logger.logTiming('CSS injection', Date.now() - injectStartTime);\n      await logger.logStep('CSS injected', { cssFile });\n      console.log(chalk.green(`  ✓ Injected into ${cssFile}\\n`));\n    }\n\n    // Step 7: Purge unused CSS (if enabled and not dry run)\n    let purgeBytesSaved = 0;\n    if (config.purgeUnusedCSS && !dryRun) {\n      console.log(chalk.gray('Purging unused CSS...'));\n      const purgeStartTime = Date.now();\n      await logger.logStep('Purging unused CSS');\n      const purgeResult = await purgeUnusedCSS(config.buildDir, mappings, config);\n      await logger.logTiming('CSS purge', Date.now() - purgeStartTime);\n      await logger.logStep('CSS purge complete', {\n        rulesRemoved: purgeResult.rulesRemoved,\n        bytesSaved: purgeResult.bytesSaved,\n      });\n      purgeBytesSaved = purgeResult.bytesSaved;\n      console.log(chalk.green(`  ✓ Purged ${purgeResult.rulesRemoved} unused CSS rules (${formatBytes(purgeResult.bytesSaved)} saved)\\n`));\n\n      if (purgeResult.errors.length > 0 && config.verbose) {\n        for (const error of purgeResult.errors) {\n          console.log(chalk.yellow(`  ⚠ ${error}`));\n        }\n      }\n    }\n\n    // Step 7.5: Re-hash modified content-hashed assets (if enabled and not dry run)\n    // Restores the cache-busting contract so immutable long-term caching stays correct.\n    if (config.rehashAssets && !dryRun && assetHashSnapshot) {\n      console.log(chalk.gray('Re-hashing modified assets...'));\n      const rehashStartTime = Date.now();\n      await logger.logStep('Re-hashing assets');\n      const rehashResult = await rehashAssets(config, assetHashSnapshot);\n      await logger.logTiming('Re-hash', Date.now() - rehashStartTime);\n      await logger.logStep('Re-hash complete', {\n        renamed: rehashResult.renamed.length,\n        filesUpdated: rehashResult.filesUpdated,\n        errors: rehashResult.errors.length,\n      });\n\n      if (rehashResult.renamed.length > 0) {\n        console.log(chalk.green(`  ✓ Re-hashed ${rehashResult.renamed.length} assets, updated references in ${rehashResult.filesUpdated} files\\n`));\n        if (config.verbose) {\n          for (const r of rehashResult.renamed) {\n            console.log(chalk.gray(`    ${r.fromName} → ${r.toName}`));\n          }\n        }\n      } else {\n        console.log(chalk.gray(`  ✓ No content-hashed assets needed re-hashing\\n`));\n      }\n\n      if (rehashResult.errors.length > 0) {\n        for (const error of rehashResult.errors) {\n          console.log(chalk.yellow(`  ⚠ ${error}`));\n        }\n      }\n    }\n\n    // Step 8: Calculate metrics\n    await logger.logStep('Calculating metrics');\n    const cssOverhead = estimateCSSOverhead(candidates);\n    const metrics = calculateMetrics(candidates, scanResult.files, transformResult, cssOverhead);\n    await logger.logStep('Metrics calculated', {\n      bytesSaved: metrics.bytesSaved,\n      percentageReduction: metrics.percentageReduction,\n    });\n\n    // Step 9: Save manifest (if not dry run and manifest enabled)\n    if (!dryRun && config.manifest) {\n      console.log(chalk.gray('Saving manifest...'));\n      await logger.logStep('Saving manifest');\n      const manifestPath = await saveMappingManifest(mappings, metrics, config);\n      await logger.logStep('Manifest saved', { manifestPath });\n      console.log(chalk.green(`  ✓ Saved to ${manifestPath}\\n`));\n    }\n\n    // Print results\n    printResults(metrics, dryRun);\n\n    if (transformResult.errors.length > 0) {\n      console.log(chalk.yellow('\\nWarnings:'));\n      for (const error of transformResult.errors) {\n        console.log(chalk.yellow(`  - ${error}`));\n      }\n    }\n\n    // Show debug log location if debug mode is enabled\n    if (config.debug && logger.getLogPath()) {\n      console.log(chalk.gray(`Debug log: ${logger.getLogPath()}`));\n    }\n\n    await logger.close();\n\n  } catch (err) {\n    const error = err instanceof Error ? err : new Error(String(err));\n    await logger.logError(error, 'optimize command');\n    await logger.close();\n\n    // Send error report if enabled\n    if (config.sendErrorReports) {\n      await sendErrorReport(error, {\n        enabled: true,\n        url: config.errorReportUrl,\n      }, config, 'optimize');\n    }\n\n    console.error(chalk.red(`\\nError: ${error.message}`));\n    process.exit(1);\n  }\n}\n\nfunction printResults(metrics: ReturnType<typeof calculateMetrics>, dryRun: boolean): void {\n  const title = dryRun ? 'CLASSPRESSO ANALYSIS' : 'CLASSPRESSO RESULTS';\n  const borderChar = '═';\n  const width = 60;\n\n  console.log(chalk.cyan(`\\n╔${borderChar.repeat(width)}╗`));\n  console.log(chalk.cyan(`║${' '.repeat((width - title.length) / 2)}${title}${' '.repeat((width - title.length) / 2)}║`));\n  console.log(chalk.cyan(`╠${borderChar.repeat(width)}╣`));\n\n  const lines = [\n    ['Files Scanned:', metrics.totalFilesScanned.toString()],\n    ['Files Modified:', metrics.totalFilesModified.toString()],\n    ['', ''],\n    ['CLASS ANALYSIS', ''],\n    ['Total class strings:', metrics.totalClassStringsFound.toString()],\n    ['Unique patterns:', metrics.uniqueClassPatterns.toString()],\n    ['Consolidated:', metrics.consolidatedPatterns.toString()],\n    ['', ''],\n    ['SIZE IMPACT', ''],\n    ['Bytes saved (JS/HTML):', formatBytes(metrics.bytesSaved)],\n    ['CSS overhead:', formatBytes(metrics.consolidatedCSSBytes)],\n    ['Net reduction:', `${formatBytes(metrics.bytesSaved - metrics.consolidatedCSSBytes)} (${formatPercentage(metrics.percentageReduction)})`],\n    ['', ''],\n    ['BROWSER IMPACT', ''],\n    ['Parse time saved:', formatTime(metrics.estimatedParseTimeSavedMs)],\n    ['Render time saved:', formatTime(metrics.estimatedRenderTimeSavedMs)],\n  ];\n\n  for (const [label, value] of lines) {\n    if (label === '') {\n      console.log(chalk.cyan(`╠${borderChar.repeat(width)}╣`));\n    } else if (value === '') {\n      const padding = width - label.length - 2;\n      console.log(chalk.cyan(`║ ${chalk.bold(label)}${' '.repeat(padding)} ║`));\n    } else {\n      const padding = width - label.length - value.length - 3;\n      console.log(chalk.cyan(`║ ${label}${' '.repeat(Math.max(1, padding))}${chalk.green(value)} ║`));\n    }\n  }\n\n  console.log(chalk.cyan(`╠${borderChar.repeat(width)}╣`));\n  console.log(chalk.cyan(`║ TOP CONSOLIDATIONS${' '.repeat(width - 20)} ║`));\n\n  for (let i = 0; i < Math.min(5, metrics.topConsolidations.length); i++) {\n    const c = metrics.topConsolidations[i];\n    const line = ` ${i + 1}. ${c.consolidated} (${c.frequency}x) saves ${formatBytes(c.bytesSaved)}`;\n    const padding = width - line.length - 1;\n    console.log(chalk.cyan(`║${line}${' '.repeat(Math.max(1, padding))}║`));\n  }\n\n  console.log(chalk.cyan(`╚${borderChar.repeat(width)}╝\\n`));\n}\n","/**\n * Report Command - Generate report from manifest\n */\n\nimport chalk from 'chalk';\nimport { loadMappingManifest } from '../core/consolidator.js';\nimport { formatBytes, formatPercentage, formatTime } from '../core/metrics.js';\nimport { detectBuildDir, detectFrameworkHint } from '../config.js';\n\ninterface ReportOptions {\n  dir?: string;\n  format: 'text' | 'json' | 'html';\n}\n\nexport async function reportCommand(options: ReportOptions): Promise<void> {\n  // Auto-detect build directory if not specified\n  let buildDir = options.dir;\n\n  if (!buildDir) {\n    const detection = await detectBuildDir();\n    if (detection.detected) {\n      buildDir = detection.detected;\n      if (options.format !== 'json') {\n        console.log(chalk.gray(`Auto-detected build directory: ${buildDir}`));\n        if (detection.suggestion) {\n          console.log(chalk.yellow(detection.suggestion));\n        }\n      }\n    } else {\n      const hint = await detectFrameworkHint();\n      if (hint) {\n        console.error(chalk.red(`No build directory found.`));\n        console.log(chalk.yellow(`Detected ${hint.name} project. Expected build directory: ${hint.buildDir}`));\n        console.log(chalk.gray(`Run your build command first, then try again.`));\n      } else {\n        console.error(chalk.red('No build directory found and could not auto-detect.'));\n        console.log(chalk.gray('Use --dir to specify your build directory, or run your build command first.'));\n      }\n      process.exit(1);\n    }\n  }\n\n  const manifest = await loadMappingManifest(buildDir);\n\n  if (!manifest) {\n    console.error(chalk.red('No classpresso manifest found in build directory.'));\n    console.log(chalk.gray('Run \"classpresso optimize\" first to generate a manifest.'));\n    process.exit(1);\n  }\n\n  switch (options.format) {\n    case 'json':\n      console.log(JSON.stringify(manifest, null, 2));\n      break;\n\n    case 'html':\n      console.log(generateHTMLReport(manifest));\n      break;\n\n    case 'text':\n    default:\n      printTextReport(manifest);\n      break;\n  }\n}\n\nfunction printTextReport(manifest: ReturnType<typeof loadMappingManifest> extends Promise<infer T> ? NonNullable<T> : never): void {\n  const { metrics } = manifest;\n\n  console.log(chalk.cyan('\\n☕ CLASSPRESSO REPORT\\n'));\n  console.log(chalk.gray(`Generated: ${manifest.created}`));\n  console.log(chalk.gray(`Build: ${manifest.buildDir}\\n`));\n\n  console.log(chalk.bold('📊 Summary\\n'));\n  console.log(`  Files scanned:     ${chalk.cyan(metrics.totalFilesScanned)}`);\n  console.log(`  Files modified:    ${chalk.cyan(metrics.totalFilesModified)}`);\n  console.log(`  Patterns found:    ${chalk.cyan(metrics.uniqueClassPatterns)}`);\n  console.log(`  Patterns applied:  ${chalk.cyan(metrics.consolidatedPatterns)}`);\n  console.log();\n\n  console.log(chalk.bold('💾 Size Impact\\n'));\n  console.log(`  Bytes saved:       ${chalk.green(formatBytes(metrics.bytesSaved))}`);\n  console.log(`  CSS overhead:      ${chalk.yellow(formatBytes(metrics.consolidatedCSSBytes))}`);\n  console.log(`  Net reduction:     ${chalk.green(formatBytes(metrics.bytesSaved - metrics.consolidatedCSSBytes))}`);\n  console.log(`  Percentage:        ${chalk.green(formatPercentage(metrics.percentageReduction))}`);\n  console.log();\n\n  console.log(chalk.bold('⚡ Browser Impact\\n'));\n  console.log(`  Parse time saved:  ${chalk.green(formatTime(metrics.estimatedParseTimeSavedMs))}`);\n  console.log(`  Render time saved: ${chalk.green(formatTime(metrics.estimatedRenderTimeSavedMs))}`);\n  console.log();\n\n  if (metrics.topConsolidations.length > 0) {\n    console.log(chalk.bold('🔝 Top Consolidations\\n'));\n    for (let i = 0; i < metrics.topConsolidations.length; i++) {\n      const c = metrics.topConsolidations[i];\n      console.log(\n        `  ${chalk.gray(`${i + 1}.`)} ${chalk.yellow(c.consolidated)} ` +\n        `${chalk.gray('(')}${chalk.cyan(c.frequency)}x${chalk.gray(')')} ` +\n        `saves ${chalk.green(formatBytes(c.bytesSaved))}`\n      );\n    }\n    console.log();\n  }\n\n  console.log(chalk.bold('📋 All Mappings\\n'));\n  for (const mapping of manifest.mappings.slice(0, 20)) {\n    console.log(`  ${chalk.yellow(mapping.consolidated)} ← ${chalk.gray(truncate(mapping.original, 50))}`);\n  }\n  if (manifest.mappings.length > 20) {\n    console.log(chalk.gray(`  ... and ${manifest.mappings.length - 20} more`));\n  }\n  console.log();\n}\n\nfunction generateHTMLReport(manifest: ReturnType<typeof loadMappingManifest> extends Promise<infer T> ? NonNullable<T> : never): string {\n  const { metrics } = manifest;\n\n  return `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  <title>Classpresso Report</title>\n  <style>\n    body {\n      font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;\n      max-width: 800px;\n      margin: 0 auto;\n      padding: 2rem;\n      background: #1a1a1a;\n      color: #e0e0e0;\n    }\n    h1 { color: #d4af37; }\n    h2 { color: #888; margin-top: 2rem; }\n    .metric {\n      display: flex;\n      justify-content: space-between;\n      padding: 0.5rem 0;\n      border-bottom: 1px solid #333;\n    }\n    .metric-value { color: #4ade80; font-weight: bold; }\n    .mapping {\n      display: flex;\n      gap: 1rem;\n      padding: 0.5rem;\n      background: #222;\n      margin: 0.25rem 0;\n      border-radius: 4px;\n    }\n    .hash { color: #d4af37; font-family: monospace; }\n    .original { color: #888; font-family: monospace; font-size: 0.9rem; overflow: hidden; text-overflow: ellipsis; }\n    table { width: 100%; border-collapse: collapse; margin-top: 1rem; }\n    th, td { padding: 0.5rem; text-align: left; border-bottom: 1px solid #333; }\n    th { color: #888; }\n  </style>\n</head>\n<body>\n  <h1>☕ Classpresso Report</h1>\n  <p style=\"color: #888\">Generated: ${manifest.created}</p>\n\n  <h2>Summary</h2>\n  <div class=\"metric\"><span>Files Scanned</span><span class=\"metric-value\">${metrics.totalFilesScanned}</span></div>\n  <div class=\"metric\"><span>Files Modified</span><span class=\"metric-value\">${metrics.totalFilesModified}</span></div>\n  <div class=\"metric\"><span>Patterns Consolidated</span><span class=\"metric-value\">${metrics.consolidatedPatterns}</span></div>\n\n  <h2>Size Impact</h2>\n  <div class=\"metric\"><span>Bytes Saved</span><span class=\"metric-value\">${formatBytes(metrics.bytesSaved)}</span></div>\n  <div class=\"metric\"><span>CSS Overhead</span><span class=\"metric-value\">${formatBytes(metrics.consolidatedCSSBytes)}</span></div>\n  <div class=\"metric\"><span>Net Reduction</span><span class=\"metric-value\">${formatBytes(metrics.bytesSaved - metrics.consolidatedCSSBytes)} (${formatPercentage(metrics.percentageReduction)})</span></div>\n\n  <h2>Browser Impact</h2>\n  <div class=\"metric\"><span>Parse Time Saved</span><span class=\"metric-value\">${formatTime(metrics.estimatedParseTimeSavedMs)}</span></div>\n  <div class=\"metric\"><span>Render Time Saved</span><span class=\"metric-value\">${formatTime(metrics.estimatedRenderTimeSavedMs)}</span></div>\n\n  <h2>Top Consolidations</h2>\n  <table>\n    <thead>\n      <tr><th>#</th><th>Hash</th><th>Frequency</th><th>Savings</th></tr>\n    </thead>\n    <tbody>\n      ${metrics.topConsolidations.map((c, i) => `\n        <tr>\n          <td>${i + 1}</td>\n          <td class=\"hash\">${c.consolidated}</td>\n          <td>${c.frequency}x</td>\n          <td class=\"metric-value\">${formatBytes(c.bytesSaved)}</td>\n        </tr>\n      `).join('')}\n    </tbody>\n  </table>\n\n  <h2>All Mappings</h2>\n  ${manifest.mappings.map(m => `\n    <div class=\"mapping\">\n      <span class=\"hash\">${m.consolidated}</span>\n      <span class=\"original\">${escapeHtml(m.original)}</span>\n    </div>\n  `).join('')}\n</body>\n</html>`;\n}\n\nfunction truncate(str: string, maxLength: number): string {\n  if (str.length <= maxLength) return str;\n  return str.substring(0, maxLength - 3) + '...';\n}\n\nfunction escapeHtml(str: string): string {\n  return str\n    .replace(/&/g, '&amp;')\n    .replace(/</g, '&lt;')\n    .replace(/>/g, '&gt;')\n    .replace(/\"/g, '&quot;');\n}\n","/**\n * Validate Command - Check for hydration safety issues\n */\n\nimport chalk from 'chalk';\nimport type { ClasspressoConfig, ClassOccurrence } from '../types/index.js';\nimport { scanBuildOutput, isHydrationSafe } from '../core/scanner.js';\nimport { loadConfig, detectBuildDir, detectFrameworkHint } from '../config.js';\nimport { createLogger } from '../utils/logger.js';\nimport { sendErrorReport } from '../utils/error-reporter.js';\n\ninterface ValidateOptions {\n  dir?: string;\n  hydration?: boolean;\n  json?: boolean;\n  verbose?: boolean;\n  debug?: boolean;\n  sendErrorReports?: boolean;\n  errorReportUrl?: string;\n}\n\ninterface HydrationIssue {\n  pattern: string;\n  classes: string[];\n  status: 'server-only' | 'client-only' | 'mergeable';\n  locations: Array<{ file: string; line?: number }>;\n  explanation: string;\n  fix: string;\n}\n\n/**\n * Analyze a pattern and determine its hydration status\n */\nfunction analyzeHydrationStatus(occurrence: ClassOccurrence): HydrationIssue | null {\n  const hasServer = occurrence.sourceTypes.has('html') || occurrence.sourceTypes.has('rsc');\n  const hasClient = occurrence.sourceTypes.has('js');\n\n  // If it appears in both, it's safe\n  if (hasServer && hasClient) {\n    return null;\n  }\n\n  // Server-only pattern\n  if (hasServer && !hasClient) {\n    return {\n      pattern: occurrence.classString,\n      classes: occurrence.classes,\n      status: 'server-only',\n      locations: occurrence.locations.map(loc => ({\n        file: loc.filePath,\n        line: loc.line,\n      })),\n      explanation: 'This pattern only appears in server-rendered HTML/RSC, not in client-side JavaScript.',\n      fix: 'If this is a static element, this is fine. If it\\'s inside a client component, ensure the className is in your JS bundle.',\n    };\n  }\n\n  // Client-only pattern\n  if (!hasServer && hasClient) {\n    return {\n      pattern: occurrence.classString,\n      classes: occurrence.classes,\n      status: 'client-only',\n      locations: occurrence.locations.map(loc => ({\n        file: loc.filePath,\n        line: loc.line,\n      })),\n      explanation: 'This pattern only appears in client JavaScript, not in server-rendered HTML.',\n      fix: 'This may be a dynamically added className or a client-only component. React will hydrate it correctly, but Classpresso cannot consolidate it safely.',\n    };\n  }\n\n  return null;\n}\n\nexport async function validateCommand(options: ValidateOptions): Promise<void> {\n  // Auto-detect build directory if not specified\n  let buildDir = options.dir;\n\n  if (!buildDir) {\n    const detection = await detectBuildDir();\n    if (detection.detected) {\n      buildDir = detection.detected;\n      if (!options.json) {\n        console.log(chalk.gray(`Auto-detected build directory: ${buildDir}`));\n        if (detection.suggestion) {\n          console.log(chalk.yellow(detection.suggestion));\n        }\n      }\n    } else {\n      // Try framework hint\n      const hint = await detectFrameworkHint();\n      if (hint) {\n        console.error(chalk.red(`No build directory found.`));\n        console.log(chalk.yellow(`Detected ${hint.name} project. Expected build directory: ${hint.buildDir}`));\n        console.log(chalk.gray(`Run your build command first, then try again.`));\n      } else {\n        console.error(chalk.red('No build directory found and could not auto-detect.'));\n        console.log(chalk.gray('Use --dir to specify your build directory, or run your build command first.'));\n      }\n      process.exit(1);\n    }\n  }\n\n  const config = await loadConfig(buildDir);\n\n  // Override config with CLI options\n  config.verbose = options.verbose || false;\n  config.debug = options.debug || config.debug || false;\n  config.sendErrorReports = options.sendErrorReports || config.sendErrorReports || false;\n  config.errorReportUrl = options.errorReportUrl || config.errorReportUrl;\n\n  // Initialize logger\n  const logger = createLogger({\n    debug: config.debug,\n    verbose: config.verbose,\n    buildDir: config.buildDir,\n  });\n\n  if (!options.json) {\n    console.log(chalk.cyan('\\n☕ Classpresso - Hydration Safety Validator\\n'));\n  }\n\n  try {\n    await logger.logSystemInfo();\n    await logger.logConfig(config, 'validate command');\n\n    // Scan build output\n    const scanStartTime = Date.now();\n    await logger.logStep('Scanning build output', { buildDir: config.buildDir });\n    const scanResult = await scanBuildOutput(config);\n    await logger.logTiming('Scan', Date.now() - scanStartTime);\n\n    // Analyze each pattern for hydration safety\n    const issues: HydrationIssue[] = [];\n    const safePatterns: ClassOccurrence[] = [];\n\n    for (const [, occurrence] of scanResult.occurrences) {\n      // Skip single occurrences (not worth reporting)\n      if (occurrence.count < 2) continue;\n\n      const issue = analyzeHydrationStatus(occurrence);\n      if (issue) {\n        issues.push(issue);\n      } else {\n        safePatterns.push(occurrence);\n      }\n    }\n\n    // Also check mergeable patterns (these can cause hydration issues)\n    const mergeableIssues: HydrationIssue[] = [];\n    for (const pattern of scanResult.mergeablePatterns) {\n      const occurrence = scanResult.occurrences.get(pattern);\n      if (occurrence) {\n        mergeableIssues.push({\n          pattern: occurrence.classString,\n          classes: occurrence.classes,\n          status: 'mergeable',\n          locations: occurrence.locations.map(loc => ({\n            file: loc.filePath,\n            line: loc.line,\n          })),\n          explanation: 'This pattern appears to be a className prop that gets merged with component classes at runtime.',\n          fix: 'This is expected behavior for component composition. Classpresso will skip this pattern in SSR mode to prevent mismatches.',\n        });\n      }\n    }\n\n    // JSON output\n    if (options.json) {\n      console.log(JSON.stringify({\n        summary: {\n          totalPatterns: scanResult.occurrences.size,\n          safePatterns: safePatterns.length,\n          serverOnlyPatterns: issues.filter(i => i.status === 'server-only').length,\n          clientOnlyPatterns: issues.filter(i => i.status === 'client-only').length,\n          mergeablePatterns: mergeableIssues.length,\n        },\n        issues: [...issues, ...mergeableIssues],\n        safePatterns: safePatterns.map(p => ({\n          pattern: p.classString,\n          frequency: p.count,\n          classes: p.classes,\n        })),\n      }, null, 2));\n      await logger.close();\n      return;\n    }\n\n    // Text output\n    const serverOnly = issues.filter(i => i.status === 'server-only');\n    const clientOnly = issues.filter(i => i.status === 'client-only');\n\n    console.log(chalk.bold('📊 Hydration Safety Summary\\n'));\n    console.log(`  Patterns analyzed:    ${chalk.cyan(scanResult.occurrences.size)}`);\n    console.log(`  Hydration-safe:       ${chalk.green(safePatterns.length)}`);\n    console.log(`  Server-only:          ${chalk.yellow(serverOnly.length)}`);\n    console.log(`  Client-only:          ${chalk.yellow(clientOnly.length)}`);\n    console.log(`  Mergeable (props):    ${chalk.gray(mergeableIssues.length)}`);\n    console.log();\n\n    // Show issues if any\n    if (issues.length > 0) {\n      console.log(chalk.bold.yellow(`⚠️  Found ${issues.length} patterns that may cause hydration issues:\\n`));\n\n      let count = 0;\n      for (const issue of issues.slice(0, 10)) {\n        count++;\n        const statusColor = issue.status === 'server-only' ? chalk.magenta : chalk.blue;\n        const statusLabel = issue.status === 'server-only' ? 'SERVER-ONLY' : 'CLIENT-ONLY';\n\n        console.log(`  ${chalk.gray(`${count}.`)} ${chalk.white(`\"${truncate(issue.pattern, 50)}\"`)}`)\n        console.log(`     Status: ${statusColor(statusLabel)}`);\n\n        // Show first location\n        if (issue.locations.length > 0) {\n          const loc = issue.locations[0];\n          const locStr = loc.line ? `${loc.file}:${loc.line}` : loc.file;\n          console.log(`     Location: ${chalk.gray(truncate(locStr, 60))}`);\n          if (issue.locations.length > 1) {\n            console.log(`     ${chalk.gray(`+ ${issue.locations.length - 1} more locations`)}`);\n          }\n        }\n\n        console.log(`     ${chalk.gray('Fix:')} ${issue.fix}`);\n        console.log();\n      }\n\n      if (issues.length > 10) {\n        console.log(chalk.gray(`  ... and ${issues.length - 10} more patterns\\n`));\n      }\n    }\n\n    // Recommendations\n    console.log(chalk.bold('💡 Recommendations\\n'));\n\n    if (issues.length === 0) {\n      console.log(chalk.green('  ✅ All patterns are hydration-safe!'));\n      console.log(chalk.gray('     You can safely run \"classpresso optimize\" without the --ssr flag.'));\n    } else if (serverOnly.length > 0 && clientOnly.length > 0) {\n      console.log(chalk.yellow('  ⚠️  Mixed server/client patterns detected.'));\n      console.log(chalk.gray('     Use \"classpresso optimize --ssr\" to only consolidate safe patterns.'));\n    } else if (serverOnly.length > 0) {\n      console.log(chalk.yellow('  ⚠️  Some patterns only appear in server-rendered HTML.'));\n      console.log(chalk.gray('     These are typically static content. Use --ssr for safety.'));\n    } else if (clientOnly.length > 0) {\n      console.log(chalk.yellow('  ⚠️  Some patterns only appear in client JavaScript.'));\n      console.log(chalk.gray('     These may be dynamically applied classes. Use --ssr for safety.'));\n    }\n\n    if (mergeableIssues.length > 0 && options.verbose) {\n      console.log();\n      console.log(chalk.gray(`  Note: ${mergeableIssues.length} patterns are className props that merge with component classes.`));\n      console.log(chalk.gray('     These are automatically handled by the --ssr flag.'));\n    }\n\n    console.log();\n\n    // Show debug log location if debug mode is enabled\n    if (config.debug && logger.getLogPath()) {\n      console.log(chalk.gray(`Debug log: ${logger.getLogPath()}`));\n    }\n\n    await logger.close();\n  } catch (err) {\n    const error = err instanceof Error ? err : new Error(String(err));\n    await logger.logError(error, 'validate command');\n    await logger.close();\n\n    // Send error report if enabled\n    if (config.sendErrorReports) {\n      await sendErrorReport(error, {\n        enabled: true,\n        url: config.errorReportUrl,\n      }, config, 'validate');\n    }\n\n    console.error(chalk.red(`Error: ${error.message}`));\n    process.exit(1);\n  }\n}\n\nfunction truncate(str: string, maxLength: number): string {\n  if (str.length <= maxLength) return str;\n  return str.substring(0, maxLength - 3) + '...';\n}\n","/**\n * Unused Command - Analyze unused CSS classes\n */\n\nimport chalk from 'chalk';\nimport postcss from 'postcss';\nimport type { ClasspressoConfig } from '../types/index.js';\nimport { extractUsedClasses } from '../core/css-purger.js';\nimport { loadConfig, detectBuildDir, detectFrameworkHint } from '../config.js';\nimport { createLogger } from '../utils/logger.js';\nimport { sendErrorReport } from '../utils/error-reporter.js';\nimport { findFiles, readFileContent, isCSSFile } from '../utils/files.js';\nimport { formatBytes } from '../core/metrics.js';\n\ninterface UnusedOptions {\n  dir?: string;\n  json?: boolean;\n  verbose?: boolean;\n  debug?: boolean;\n  limit?: string;\n  sendErrorReports?: boolean;\n  errorReportUrl?: string;\n}\n\ninterface UnusedClass {\n  className: string;\n  selector: string;\n  bytes: number;\n  file: string;\n}\n\ninterface UnusedReport {\n  summary: {\n    cssFilesScanned: number;\n    totalCSSRules: number;\n    usedClasses: number;\n    unusedClasses: number;\n    unusedBytes: number;\n    estimatedGzipSavings: number;\n  };\n  unusedClasses: UnusedClass[];\n  topUnused: UnusedClass[];\n}\n\n/**\n * CSS file patterns for all supported frameworks\n */\nconst CSS_PATTERNS = [\n  'static/**/*.css',\n  'static/css/**/*.css',\n  'standalone/.next/static/**/*.css',\n  'browser/**/*.css',\n  '_astro/**/*.css',\n  'client/_astro/**/*.css',\n  'public/_nuxt/**/*.css',\n  '_app/**/*.css',\n  'client/**/*.css',\n  'assets/**/*.css',\n  '**/*.css',\n];\n\n/**\n * Extract class name from a CSS selector\n */\nfunction extractClassFromSelector(selector: string): string | null {\n  const match = selector.match(/^\\.([^\\s:,\\[]+)/);\n  if (match) {\n    return match[1].replace(/\\\\/g, '');\n  }\n  return null;\n}\n\n/**\n * Check if a class is a responsive or state variant\n */\nfunction isVariantClass(className: string): boolean {\n  const variantPrefixes = [\n    'sm:', 'md:', 'lg:', 'xl:', '2xl:',\n    'hover:', 'focus:', 'active:', 'disabled:', 'group-hover:',\n    'dark:', 'light:',\n    'first:', 'last:', 'odd:', 'even:',\n    'before:', 'after:',\n  ];\n  return variantPrefixes.some(prefix => className.includes(prefix.replace(':', '\\\\:')));\n}\n\n/**\n * Analyze CSS files to find unused classes\n */\nasync function analyzeUnusedCSS(\n  buildDir: string,\n  config: ClasspressoConfig\n): Promise<UnusedReport> {\n  const report: UnusedReport = {\n    summary: {\n      cssFilesScanned: 0,\n      totalCSSRules: 0,\n      usedClasses: 0,\n      unusedClasses: 0,\n      unusedBytes: 0,\n      estimatedGzipSavings: 0,\n    },\n    unusedClasses: [],\n    topUnused: [],\n  };\n\n  // Step 1: Extract all used classes from HTML/JS\n  const usedClasses = await extractUsedClasses(buildDir);\n  report.summary.usedClasses = usedClasses.size;\n\n  // Step 2: Find CSS files\n  const cssFiles = await findFiles(buildDir, CSS_PATTERNS);\n\n  // Step 3: Analyze each CSS file\n  const seenClasses = new Set<string>();\n\n  for (const cssFile of cssFiles) {\n    if (!isCSSFile(cssFile)) continue;\n\n    try {\n      const content = await readFileContent(cssFile);\n      const root = postcss.parse(content);\n\n      report.summary.cssFilesScanned++;\n\n      root.walkRules((rule) => {\n        report.summary.totalCSSRules++;\n\n        const className = extractClassFromSelector(rule.selector);\n        if (!className) return;\n\n        // Skip already seen classes\n        if (seenClasses.has(className)) return;\n        seenClasses.add(className);\n\n        // Skip if used\n        if (usedClasses.has(className)) return;\n\n        // Skip variant classes (might be dynamically applied)\n        if (isVariantClass(className)) return;\n\n        // Skip consolidated classes\n        if (className.startsWith(config.hashPrefix)) return;\n\n        // Skip safelisted classes\n        if (config.purgeSafelist) {\n          const isSafelisted = config.purgeSafelist.some(pattern => {\n            if (typeof pattern === 'string') {\n              return className === pattern;\n            } else if (pattern instanceof RegExp) {\n              return pattern.test(className);\n            }\n            return false;\n          });\n          if (isSafelisted) return;\n        }\n\n        // Calculate bytes for this rule\n        const ruleBytes = Buffer.byteLength(rule.toString(), 'utf-8');\n\n        report.unusedClasses.push({\n          className,\n          selector: rule.selector,\n          bytes: ruleBytes,\n          file: cssFile,\n        });\n\n        report.summary.unusedClasses++;\n        report.summary.unusedBytes += ruleBytes;\n      });\n    } catch {\n      // Skip files that can't be parsed\n    }\n  }\n\n  // Sort by bytes descending and get top unused\n  report.unusedClasses.sort((a, b) => b.bytes - a.bytes);\n  report.topUnused = report.unusedClasses.slice(0, 20);\n\n  // Estimate gzip savings (roughly 30% of original for CSS)\n  report.summary.estimatedGzipSavings = Math.round(report.summary.unusedBytes * 0.3);\n\n  return report;\n}\n\nexport async function unusedCommand(options: UnusedOptions): Promise<void> {\n  // Auto-detect build directory if not specified\n  let buildDir = options.dir;\n\n  if (!buildDir) {\n    const detection = await detectBuildDir();\n    if (detection.detected) {\n      buildDir = detection.detected;\n      if (!options.json) {\n        console.log(chalk.gray(`Auto-detected build directory: ${buildDir}`));\n        if (detection.suggestion) {\n          console.log(chalk.yellow(detection.suggestion));\n        }\n      }\n    } else {\n      const hint = await detectFrameworkHint();\n      if (hint) {\n        console.error(chalk.red(`No build directory found.`));\n        console.log(chalk.yellow(`Detected ${hint.name} project. Expected build directory: ${hint.buildDir}`));\n        console.log(chalk.gray(`Run your build command first, then try again.`));\n      } else {\n        console.error(chalk.red('No build directory found and could not auto-detect.'));\n        console.log(chalk.gray('Use --dir to specify your build directory, or run your build command first.'));\n      }\n      process.exit(1);\n    }\n  }\n\n  const config = await loadConfig(buildDir);\n\n  // Override config with CLI options\n  config.verbose = options.verbose || false;\n  config.debug = options.debug || config.debug || false;\n  config.sendErrorReports = options.sendErrorReports || config.sendErrorReports || false;\n  config.errorReportUrl = options.errorReportUrl || config.errorReportUrl;\n\n  const limit = parseInt(options.limit || '20', 10);\n\n  // Initialize logger\n  const logger = createLogger({\n    debug: config.debug,\n    verbose: config.verbose,\n    buildDir: config.buildDir,\n  });\n\n  if (!options.json) {\n    console.log(chalk.cyan('\\n☕ Classpresso - Unused CSS Analyzer\\n'));\n  }\n\n  try {\n    await logger.logSystemInfo();\n    await logger.logConfig(config, 'unused command');\n\n    // Analyze unused CSS\n    const analyzeStartTime = Date.now();\n    await logger.logStep('Analyzing CSS usage', { buildDir: config.buildDir });\n    const report = await analyzeUnusedCSS(config.buildDir, config);\n    await logger.logTiming('Analysis', Date.now() - analyzeStartTime);\n\n    // JSON output\n    if (options.json) {\n      console.log(JSON.stringify(report, null, 2));\n      await logger.close();\n      return;\n    }\n\n    // Text output\n    console.log(chalk.bold('📊 Summary\\n'));\n    console.log(`  CSS files scanned:    ${chalk.cyan(report.summary.cssFilesScanned)}`);\n    console.log(`  Total CSS rules:      ${chalk.cyan(report.summary.totalCSSRules)}`);\n    console.log(`  Classes used:         ${chalk.green(report.summary.usedClasses)}`);\n    console.log(`  Classes unused:       ${chalk.yellow(report.summary.unusedClasses)}`);\n    console.log();\n\n    console.log(chalk.bold('💾 Size Impact\\n'));\n    console.log(`  Unused CSS bytes:     ${chalk.yellow(formatBytes(report.summary.unusedBytes))}`);\n    console.log(`  Gzip estimate:        ${chalk.yellow(formatBytes(report.summary.estimatedGzipSavings))}`);\n    console.log();\n\n    if (report.unusedClasses.length > 0) {\n      console.log(chalk.bold(`🔝 Top ${Math.min(limit, report.unusedClasses.length)} Unused Classes (by size)\\n`));\n\n      const topClasses = report.unusedClasses.slice(0, limit);\n      for (let i = 0; i < topClasses.length; i++) {\n        const cls = topClasses[i];\n        console.log(\n          `  ${chalk.gray(`${i + 1}.`.padStart(4))} ${chalk.yellow(truncate(cls.className, 40).padEnd(42))} ` +\n          `${chalk.cyan(formatBytes(cls.bytes).padStart(10))}`\n        );\n      }\n\n      if (report.unusedClasses.length > limit) {\n        console.log(chalk.gray(`\\n  ... and ${report.unusedClasses.length - limit} more unused classes`));\n      }\n      console.log();\n    }\n\n    // Recommendations\n    console.log(chalk.bold('💡 Recommendations\\n'));\n\n    if (report.summary.unusedClasses === 0) {\n      console.log(chalk.green('  ✅ No unused CSS classes found!'));\n      console.log(chalk.gray('     Your CSS is well-optimized.'));\n    } else if (report.summary.unusedBytes > 10000) {\n      console.log(chalk.yellow(`  ⚠️  Found ${formatBytes(report.summary.unusedBytes)} of unused CSS.`));\n      console.log(chalk.gray('     Run \"classpresso optimize --purge-unused\" to remove these classes.'));\n    } else if (report.summary.unusedBytes > 1000) {\n      console.log(chalk.yellow(`  Found ${formatBytes(report.summary.unusedBytes)} of unused CSS.`));\n      console.log(chalk.gray('     Consider using \"classpresso optimize --purge-unused\" to remove these.'));\n    } else {\n      console.log(chalk.green(`  Found only ${formatBytes(report.summary.unusedBytes)} of unused CSS.`));\n      console.log(chalk.gray('     This is minimal - purging is optional.'));\n    }\n\n    console.log();\n\n    // Verbose mode: show file breakdown\n    if (options.verbose && report.unusedClasses.length > 0) {\n      const fileBreakdown = new Map<string, number>();\n      for (const cls of report.unusedClasses) {\n        const current = fileBreakdown.get(cls.file) || 0;\n        fileBreakdown.set(cls.file, current + cls.bytes);\n      }\n\n      console.log(chalk.bold('📁 Breakdown by File\\n'));\n      const sortedFiles = [...fileBreakdown.entries()].sort((a, b) => b[1] - a[1]);\n      for (const [file, bytes] of sortedFiles.slice(0, 10)) {\n        const shortPath = file.replace(config.buildDir, '').replace(/^\\//, '');\n        console.log(`  ${chalk.gray(truncate(shortPath, 50).padEnd(52))} ${chalk.cyan(formatBytes(bytes))}`);\n      }\n      console.log();\n    }\n\n    // Show debug log location if debug mode is enabled\n    if (config.debug && logger.getLogPath()) {\n      console.log(chalk.gray(`Debug log: ${logger.getLogPath()}`));\n    }\n\n    await logger.close();\n  } catch (err) {\n    const error = err instanceof Error ? err : new Error(String(err));\n    await logger.logError(error, 'unused command');\n    await logger.close();\n\n    // Send error report if enabled\n    if (config.sendErrorReports) {\n      await sendErrorReport(error, {\n        enabled: true,\n        url: config.errorReportUrl,\n      }, config, 'unused');\n    }\n\n    console.error(chalk.red(`Error: ${error.message}`));\n    process.exit(1);\n  }\n}\n\nfunction truncate(str: string, maxLength: number): string {\n  if (str.length <= maxLength) return str;\n  return str.substring(0, maxLength - 3) + '...';\n}\n","/**\n * Classpresso CLI\n */\n\nimport { Command } from 'commander';\nimport { analyzeCommand } from './analyze.js';\nimport { optimizeCommand } from './optimize.js';\nimport { reportCommand } from './report.js';\nimport { validateCommand } from './validate.js';\nimport { unusedCommand } from './unused.js';\nimport { getVersion } from '../utils/logger.js';\n\nconst program = new Command();\n\nprogram\n  .name('classpresso')\n  .description('CSS class consolidation tool - compress multiple utility classes into single optimized classes')\n  .version(getVersion());\n\nprogram\n  .command('analyze')\n  .description('Analyze build output and show potential optimizations')\n  .option('-d, --dir <path>', 'Build directory (auto-detected if not specified)')\n  .option('--min-occurrences <n>', 'Minimum occurrences to consolidate', '2')\n  .option('--min-classes <n>', 'Minimum classes in pattern', '2')\n  .option('--ssr', 'Enable SSR-safe mode (only transforms patterns in both HTML and JS)')\n  .option('--json', 'Output as JSON')\n  .option('-v, --verbose', 'Verbose output')\n  .option('--debug', 'Enable debug mode (generates detailed log file)')\n  .option('--send-error-reports', 'Send error reports to configured webhook')\n  .option('--error-report-url <url>', 'Webhook URL for error reports')\n  .action(analyzeCommand);\n\nprogram\n  .command('optimize')\n  .description('Optimize build output by consolidating classes')\n  .option('-d, --dir <path>', 'Build directory (auto-detected if not specified)')\n  .option('--min-occurrences <n>', 'Minimum occurrences to consolidate', '2')\n  .option('--min-classes <n>', 'Minimum classes in pattern', '2')\n  .option('--ssr', 'Enable SSR-safe mode (only transforms patterns in both HTML and JS)')\n  .option('--dry-run', 'Show what would be done without making changes')\n  .option('--backup', 'Create backup before modifying')\n  .option('--no-manifest', 'Do not generate manifest file')\n  .option('--purge-unused', 'Remove unused CSS classes after consolidation')\n  .option('--no-rehash', 'Do not re-hash content-hashed assets after rewriting (keeps original filenames)')\n  .option('-v, --verbose', 'Verbose output')\n  .option('--debug', 'Enable debug mode (generates detailed log file)')\n  .option('--send-error-reports', 'Send error reports to configured webhook')\n  .option('--error-report-url <url>', 'Webhook URL for error reports')\n  .action(optimizeCommand);\n\nprogram\n  .command('report')\n  .description('Generate report from existing manifest')\n  .option('-d, --dir <path>', 'Build directory (auto-detected if not specified)')\n  .option('--format <type>', 'Output format: text, json, html', 'text')\n  .action(reportCommand);\n\nprogram\n  .command('validate')\n  .description('Check for hydration safety issues in class patterns')\n  .option('-d, --dir <path>', 'Build directory (auto-detected if not specified)')\n  .option('--hydration', 'Check hydration safety (default)', true)\n  .option('--json', 'Output as JSON')\n  .option('-v, --verbose', 'Verbose output')\n  .option('--debug', 'Enable debug mode (generates detailed log file)')\n  .option('--send-error-reports', 'Send error reports to configured webhook')\n  .option('--error-report-url <url>', 'Webhook URL for error reports')\n  .action(validateCommand);\n\nprogram\n  .command('unused')\n  .description('Analyze CSS for unused classes')\n  .option('-d, --dir <path>', 'Build directory (auto-detected if not specified)')\n  .option('--json', 'Output as JSON')\n  .option('--limit <n>', 'Number of top unused classes to show', '20')\n  .option('-v, --verbose', 'Verbose output (show file breakdown)')\n  .option('--debug', 'Enable debug mode (generates detailed log file)')\n  .option('--send-error-reports', 'Send error reports to configured webhook')\n  .option('--error-report-url <url>', 'Webhook URL for error reports')\n  .action(unusedCommand);\n\nexport { program };\n"]}