@alivecss/aliveui 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/vite.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/theme/colors.ts","../src/theme/default.ts","../src/config.ts","../src/scanner.ts","../src/generator/base.ts","../src/generator/utils.ts","../src/generator/colors.ts","../src/generator/spacing.ts","../src/generator/typography.ts","../src/generator/layout.ts","../src/generator/sizing.ts","../src/generator/effects.ts","../src/generator/index.ts","../src/index.ts","../src/vite.ts"],"sourcesContent":["import type { ColorScale } from '../types'\n\nexport const defaultColors: ColorScale = {\n inherit: 'inherit',\n current: 'currentColor',\n transparent: 'transparent',\n black: '#000000',\n white: '#ffffff',\n\n slate: {\n 50: '#f8fafc',\n 100: '#f1f5f9',\n 200: '#e2e8f0',\n 300: '#cbd5e1',\n 400: '#94a3b8',\n 500: '#64748b',\n 600: '#475569',\n 700: '#334155',\n 800: '#1e293b',\n 900: '#0f172a',\n 950: '#020617',\n },\n gray: {\n 50: '#f9fafb',\n 100: '#f3f4f6',\n 200: '#e5e7eb',\n 300: '#d1d5db',\n 400: '#9ca3af',\n 500: '#6b7280',\n 600: '#4b5563',\n 700: '#374151',\n 800: '#1f2937',\n 900: '#111827',\n 950: '#030712',\n },\n zinc: {\n 50: '#fafafa',\n 100: '#f4f4f5',\n 200: '#e4e4e7',\n 300: '#d4d4d8',\n 400: '#a1a1aa',\n 500: '#71717a',\n 600: '#52525b',\n 700: '#3f3f46',\n 800: '#27272a',\n 900: '#18181b',\n 950: '#09090b',\n },\n neutral: {\n 50: '#fafafa',\n 100: '#f5f5f5',\n 200: '#e5e5e5',\n 300: '#d4d4d4',\n 400: '#a3a3a3',\n 500: '#737373',\n 600: '#525252',\n 700: '#404040',\n 800: '#262626',\n 900: '#171717',\n 950: '#0a0a0a',\n },\n stone: {\n 50: '#fafaf9',\n 100: '#f5f5f4',\n 200: '#e7e5e4',\n 300: '#d6d3d1',\n 400: '#a8a29e',\n 500: '#78716c',\n 600: '#57534e',\n 700: '#44403c',\n 800: '#292524',\n 900: '#1c1917',\n 950: '#0c0a09',\n },\n red: {\n 50: '#fef2f2',\n 100: '#fee2e2',\n 200: '#fecaca',\n 300: '#fca5a5',\n 400: '#f87171',\n 500: '#ef4444',\n 600: '#dc2626',\n 700: '#b91c1c',\n 800: '#991b1b',\n 900: '#7f1d1d',\n 950: '#450a0a',\n },\n orange: {\n 50: '#fff7ed',\n 100: '#ffedd5',\n 200: '#fed7aa',\n 300: '#fdba74',\n 400: '#fb923c',\n 500: '#f97316',\n 600: '#ea580c',\n 700: '#c2410c',\n 800: '#9a3412',\n 900: '#7c2d12',\n 950: '#431407',\n },\n amber: {\n 50: '#fffbeb',\n 100: '#fef3c7',\n 200: '#fde68a',\n 300: '#fcd34d',\n 400: '#fbbf24',\n 500: '#f59e0b',\n 600: '#d97706',\n 700: '#b45309',\n 800: '#92400e',\n 900: '#78350f',\n 950: '#451a03',\n },\n yellow: {\n 50: '#fefce8',\n 100: '#fef9c3',\n 200: '#fef08a',\n 300: '#fde047',\n 400: '#facc15',\n 500: '#eab308',\n 600: '#ca8a04',\n 700: '#a16207',\n 800: '#854d0e',\n 900: '#713f12',\n 950: '#422006',\n },\n lime: {\n 50: '#f7fee7',\n 100: '#ecfccb',\n 200: '#d9f99d',\n 300: '#bef264',\n 400: '#a3e635',\n 500: '#84cc16',\n 600: '#65a30d',\n 700: '#4d7c0f',\n 800: '#3f6212',\n 900: '#365314',\n 950: '#1a2e05',\n },\n green: {\n 50: '#f0fdf4',\n 100: '#dcfce7',\n 200: '#bbf7d0',\n 300: '#86efac',\n 400: '#4ade80',\n 500: '#22c55e',\n 600: '#16a34a',\n 700: '#15803d',\n 800: '#166534',\n 900: '#14532d',\n 950: '#052e16',\n },\n emerald: {\n 50: '#ecfdf5',\n 100: '#d1fae5',\n 200: '#a7f3d0',\n 300: '#6ee7b7',\n 400: '#34d399',\n 500: '#10b981',\n 600: '#059669',\n 700: '#047857',\n 800: '#065f46',\n 900: '#064e3b',\n 950: '#022c22',\n },\n teal: {\n 50: '#f0fdfa',\n 100: '#ccfbf1',\n 200: '#99f6e4',\n 300: '#5eead4',\n 400: '#2dd4bf',\n 500: '#14b8a6',\n 600: '#0d9488',\n 700: '#0f766e',\n 800: '#115e59',\n 900: '#134e4a',\n 950: '#042f2e',\n },\n cyan: {\n 50: '#ecfeff',\n 100: '#cffafe',\n 200: '#a5f3fc',\n 300: '#67e8f9',\n 400: '#22d3ee',\n 500: '#06b6d4',\n 600: '#0891b2',\n 700: '#0e7490',\n 800: '#155e75',\n 900: '#164e63',\n 950: '#083344',\n },\n sky: {\n 50: '#f0f9ff',\n 100: '#e0f2fe',\n 200: '#bae6fd',\n 300: '#7dd3fc',\n 400: '#38bdf8',\n 500: '#0ea5e9',\n 600: '#0284c7',\n 700: '#0369a1',\n 800: '#075985',\n 900: '#0c4a6e',\n 950: '#082f49',\n },\n blue: {\n 50: '#eff6ff',\n 100: '#dbeafe',\n 200: '#bfdbfe',\n 300: '#93c5fd',\n 400: '#60a5fa',\n 500: '#3b82f6',\n 600: '#2563eb',\n 700: '#1d4ed8',\n 800: '#1e40af',\n 900: '#1e3a8a',\n 950: '#172554',\n },\n indigo: {\n 50: '#eef2ff',\n 100: '#e0e7ff',\n 200: '#c7d2fe',\n 300: '#a5b4fc',\n 400: '#818cf8',\n 500: '#6366f1',\n 600: '#4f46e5',\n 700: '#4338ca',\n 800: '#3730a3',\n 900: '#312e81',\n 950: '#1e1b4b',\n },\n violet: {\n 50: '#f5f3ff',\n 100: '#ede9fe',\n 200: '#ddd6fe',\n 300: '#c4b5fd',\n 400: '#a78bfa',\n 500: '#8b5cf6',\n 600: '#7c3aed',\n 700: '#6d28d9',\n 800: '#5b21b6',\n 900: '#4c1d95',\n 950: '#2e1065',\n },\n purple: {\n 50: '#faf5ff',\n 100: '#f3e8ff',\n 200: '#e9d5ff',\n 300: '#d8b4fe',\n 400: '#c084fc',\n 500: '#a855f7',\n 600: '#9333ea',\n 700: '#7e22ce',\n 800: '#6b21a8',\n 900: '#581c87',\n 950: '#3b0764',\n },\n fuchsia: {\n 50: '#fdf4ff',\n 100: '#fae8ff',\n 200: '#f5d0fe',\n 300: '#f0abfc',\n 400: '#e879f9',\n 500: '#d946ef',\n 600: '#c026d3',\n 700: '#a21caf',\n 800: '#86198f',\n 900: '#701a75',\n 950: '#4a044e',\n },\n pink: {\n 50: '#fdf2f8',\n 100: '#fce7f3',\n 200: '#fbcfe8',\n 300: '#f9a8d4',\n 400: '#f472b6',\n 500: '#ec4899',\n 600: '#db2777',\n 700: '#be185d',\n 800: '#9d174d',\n 900: '#831843',\n 950: '#500724',\n },\n rose: {\n 50: '#fff1f2',\n 100: '#ffe4e6',\n 200: '#fecdd3',\n 300: '#fda4af',\n 400: '#fb7185',\n 500: '#f43f5e',\n 600: '#e11d48',\n 700: '#be123c',\n 800: '#9f1239',\n 900: '#881337',\n 950: '#4c0519',\n },\n}\n","import type { AliveUITheme } from '../types'\nimport { defaultColors } from './colors'\n\nexport const defaultTheme: AliveUITheme = {\n colors: defaultColors,\n\n spacing: {\n px: '1px',\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 borderRadius: {\n none: '0px',\n sm: '0.125rem',\n DEFAULT: '0.25rem',\n md: '0.375rem',\n lg: '0.5rem',\n xl: '0.75rem',\n '2xl': '1rem',\n '3xl': '1.5rem',\n full: '9999px',\n },\n\n fontSize: {\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 fontWeight: {\n thin: '100',\n extralight: '200',\n light: '300',\n normal: '400',\n medium: '500',\n semibold: '600',\n bold: '700',\n extrabold: '800',\n black: '900',\n },\n\n lineHeight: {\n none: '1',\n tight: '1.25',\n snug: '1.375',\n normal: '1.5',\n relaxed: '1.625',\n loose: '2',\n '3': '0.75rem',\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 },\n\n screens: {\n sm: '640px',\n md: '768px',\n lg: '1024px',\n xl: '1280px',\n '2xl': '1536px',\n },\n\n opacity: {\n '0': '0',\n '5': '0.05',\n '10': '0.1',\n '15': '0.15',\n '20': '0.2',\n '25': '0.25',\n '30': '0.3',\n '40': '0.4',\n '50': '0.5',\n '60': '0.6',\n '70': '0.7',\n '75': '0.75',\n '80': '0.8',\n '90': '0.9',\n '95': '0.95',\n '100': '1',\n },\n\n zIndex: {\n auto: 'auto',\n '0': '0',\n '10': '10',\n '20': '20',\n '30': '30',\n '40': '40',\n '50': '50',\n },\n\n boxShadow: {\n sm: '0 1px 2px rgba(0, 0, 0, 0.05)',\n DEFAULT: '0 1px 3px rgba(0, 0, 0, 0.1), 0 1px 2px rgba(0, 0, 0, 0.06)',\n md: '0 4px 6px rgba(0, 0, 0, 0.07), 0 2px 4px rgba(0, 0, 0, 0.06)',\n lg: '0 10px 15px rgba(0, 0, 0, 0.1), 0 4px 6px rgba(0, 0, 0, 0.05)',\n xl: '0 20px 25px rgba(0, 0, 0, 0.1), 0 10px 10px rgba(0, 0, 0, 0.04)',\n '2xl': '0 25px 50px rgba(0, 0, 0, 0.25)',\n inner: 'inset 0 2px 4px rgba(0, 0, 0, 0.06)',\n none: 'none',\n },\n\n darkMode: 'media',\n}\n","import type { AliveUIConfig, ResolvedConfig, AliveUITheme } from './types'\nimport { defaultTheme } from './theme/default'\n\nexport function resolveConfig(userConfig: Partial<AliveUIConfig> = {}): ResolvedConfig {\n const userTheme = userConfig.theme as Partial<AliveUITheme> | undefined\n const theme = mergeTheme(defaultTheme, userTheme ?? {})\n\n return {\n content: userConfig.content ?? [],\n output: userConfig.output ?? 'alive.css',\n theme,\n }\n}\n\nfunction mergeTheme(base: AliveUITheme, overrides: Partial<AliveUITheme>): AliveUITheme {\n return {\n colors: { ...base.colors, ...(overrides.colors ?? {}) },\n spacing: { ...base.spacing, ...(overrides.spacing ?? {}) },\n borderRadius: { ...base.borderRadius, ...(overrides.borderRadius ?? {}) },\n fontSize: { ...base.fontSize, ...(overrides.fontSize ?? {}) },\n fontWeight: { ...base.fontWeight, ...(overrides.fontWeight ?? {}) },\n lineHeight: { ...base.lineHeight, ...(overrides.lineHeight ?? {}) },\n screens: { ...base.screens, ...(overrides.screens ?? {}) },\n opacity: { ...base.opacity, ...(overrides.opacity ?? {}) },\n zIndex: { ...base.zIndex, ...(overrides.zIndex ?? {}) },\n boxShadow: { ...base.boxShadow, ...(overrides.boxShadow ?? {}) },\n darkMode: overrides.darkMode ?? base.darkMode,\n }\n}\n","import { readFileSync } from 'fs'\nimport glob from 'fast-glob'\nimport type { ResolvedConfig } from './types'\n\n// Broad regex to extract potential class name tokens from any file\n// Matches strings inside quotes/backticks and class/className attribute values\nconst CLASS_EXTRACTION_REGEX =\n /(?:class|className)(?:\\s*=\\s*|\\s*:\\s*)(?:\"([^\"]+)\"|'([^']+)'|`([^`]+)`|\\{[^}]*['\"`]([^'\"`]+)['\"`][^}]*\\})/g\n\nconst TOKEN_REGEX = /[`'\"]([\\w\\s/[\\]#%.-]+)[`'\"]/g\n\nexport async function scanContent(config: ResolvedConfig): Promise<Set<string>> {\n if (config.content.length === 0) return new Set()\n\n const files = await glob(config.content, {\n absolute: true,\n ignore: ['**/node_modules/**', '**/.git/**', '**/dist/**'],\n })\n\n const classes = new Set<string>()\n\n for (const file of files) {\n try {\n const content = readFileSync(file, 'utf-8')\n extractClasses(content, classes)\n } catch {\n // skip unreadable files\n }\n }\n\n return classes\n}\n\nfunction extractClasses(content: string, classes: Set<string>): void {\n // Strategy: extract all potential class-like tokens and validate them\n // This is intentionally broad to handle all template syntaxes\n\n // 1. Class/className attribute values\n let match: RegExpExecArray | null\n CLASS_EXTRACTION_REGEX.lastIndex = 0\n while ((match = CLASS_EXTRACTION_REGEX.exec(content)) !== null) {\n const value = match[1] ?? match[2] ?? match[3] ?? match[4]\n if (value) {\n splitAndAdd(value, classes)\n }\n }\n\n // 2. All string literals (catches template literal classes, computed classes, etc.)\n TOKEN_REGEX.lastIndex = 0\n while ((match = TOKEN_REGEX.exec(content)) !== null) {\n if (match[1]) {\n splitAndAdd(match[1], classes)\n }\n }\n\n // 3. Raw token scan — find anything that looks like a utility class\n // Handles: standard classes, negative utilities (-m-4), arbitrary values (w-[100px]),\n // and variant-prefixed classes (hover:bg-blue-500)\n const rawTokenRegex = /(?:^|[\\s\"'`{(,])(-?[a-z][a-z0-9]*(?:-[a-z0-9./]+)*(?:-\\[[^\\]]*\\])?(?::[a-z][a-z0-9]*(?:-[a-z0-9./]+)*(?:-\\[[^\\]]*\\])?)*)/g\n let rawMatch: RegExpExecArray | null\n while ((rawMatch = rawTokenRegex.exec(content)) !== null) {\n const token = rawMatch[1]\n if (token && isLikelyClass(token)) {\n classes.add(token)\n }\n }\n}\n\nfunction splitAndAdd(value: string, classes: Set<string>): void {\n // Split on whitespace and template literal expressions\n const tokens = value.split(/[\\s\\n\\r\\t]+/)\n for (const token of tokens) {\n const clean = token.trim()\n if (clean && isLikelyClass(clean)) {\n classes.add(clean)\n }\n }\n}\n\n// Object.prototype property names that match the class-like regex but are never CSS classes.\n// Accessing these on a plain theme object (e.g. spacing['constructor']) returns the inherited\n// function instead of undefined, which is truthy and would generate invalid CSS.\nconst JS_PROTOTYPE_PROPS = new Set([\n 'constructor', 'prototype', 'toString', 'valueOf', 'hasOwnProperty',\n 'isPrototypeOf', 'propertyIsEnumerable', 'toLocaleString',\n '__proto__', '__defineGetter__', '__defineSetter__', '__lookupGetter__', '__lookupSetter__',\n])\n\n// Quick heuristic to filter out non-class tokens\nfunction isLikelyClass(token: string): boolean {\n if (!token || token.length < 1 || token.length > 120) return false\n // Must start with an optional leading dash then a letter (e.g. -m-4 or bg-blue-500)\n if (!/^-?[a-z]/.test(token)) return false\n // No spaces (should be a single token)\n if (/\\s/.test(token)) return false\n // Skip common non-class patterns\n if (token.includes('://')) return false\n if (token.startsWith('http')) return false\n // Allow arbitrary value brackets — [100px], [#ff0000], [url(...)]\n // but reject tokens that have unmatched brackets\n const openBrackets = (token.match(/\\[/g) ?? []).length\n const closeBrackets = (token.match(/\\]/g) ?? []).length\n if (openBrackets !== closeBrackets) return false\n // Skip JS prototype-inherited property names — accessing these on a plain object\n // returns a function, not undefined, which would produce invalid CSS rules\n if (JS_PROTOTYPE_PROPS.has(token)) return false\n return true\n}\n","import type { ResolvedConfig } from '../types'\n\n// Generates the @aliveui base block:\n// CSS custom properties (motion tokens, depth shadows) + reset + all component primitives\nexport function generateBase(_config: ResolvedConfig): string {\n return `/* ═══════════════════════════════════════════════════════════════\n AliveUI — Motion-first CSS framework\n Base layer: tokens · depth · animations · components\n ═══════════════════════════════════════════════════════════════ */\n\n/* ── Reset ─────────────────────────────────────────────────────── */\n*,\n::before,\n::after {\n box-sizing: border-box;\n}\n\n/* ── Design tokens ──────────────────────────────────────────────── */\n:root {\n /* Motion durations */\n --alive-duration-fast: 120ms;\n --alive-duration-normal: 200ms;\n --alive-duration-slow: 320ms;\n\n /* Easing curves */\n --alive-ease-standard: cubic-bezier(0.2, 0, 0, 1);\n --alive-ease-emphasized: cubic-bezier(0.05, 0.7, 0.1, 1);\n --alive-ease-exit: cubic-bezier(0.3, 0, 0.8, 0.15);\n\n /* Depth shadows */\n --alive-shadow-d1: none;\n --alive-shadow-d2: 0 1px 3px rgba(0,0,0,0.08), 0 1px 2px rgba(0,0,0,0.04);\n --alive-shadow-d2-hover: 0 4px 16px rgba(0,0,0,0.10), 0 2px 6px rgba(0,0,0,0.06);\n --alive-shadow-d3: 0 8px 40px rgba(0,0,0,0.14), 0 4px 16px rgba(0,0,0,0.08);\n\n /* Stagger defaults */\n --alive-stagger-gap: 60ms;\n --alive-index: 0;\n\n /* Inherited depth context — overridden by .d1/.d2/.d3 */\n --alive-duration: 0ms;\n --alive-ease: linear;\n}\n\n/* ── Depth system ───────────────────────────────────────────────── */\n\n/* d1 — base surface: flat, color-only transitions */\n.d1 {\n --alive-depth: 1;\n --alive-duration: var(--alive-duration-normal);\n --alive-ease: var(--alive-ease-standard);\n}\n\n/* d2 — elevated interactive: lifts and scales on hover */\n.d2 {\n --alive-depth: 2;\n --alive-duration: var(--alive-duration-normal);\n --alive-ease: var(--alive-ease-standard);\n box-shadow: var(--alive-shadow-d2);\n transition:\n box-shadow var(--alive-duration-normal) var(--alive-ease-standard),\n transform var(--alive-duration-normal) var(--alive-ease-standard);\n}\n.d2:hover {\n box-shadow: var(--alive-shadow-d2-hover);\n transform: translateY(-1px) scale(1.004);\n}\n.d2:active {\n box-shadow: var(--alive-shadow-d2);\n transform: translateY(0) scale(0.998);\n transition-duration: var(--alive-duration-fast);\n}\n\n/* d3 — floating layer: strong shadow, emphasized entrance */\n.d3 {\n --alive-depth: 3;\n --alive-duration: var(--alive-duration-slow);\n --alive-ease: var(--alive-ease-emphasized);\n box-shadow: var(--alive-shadow-d3);\n}\n\n/* ── Keyframe animations ─────────────────────────────────────────── */\n\n/* Entrances */\n@keyframes alive-fade-up {\n from { opacity: 0; transform: translateY(8px); }\n to { opacity: 1; transform: translateY(0); }\n}\n@keyframes alive-fade-down {\n from { opacity: 0; transform: translateY(-8px); }\n to { opacity: 1; transform: translateY(0); }\n}\n@keyframes alive-fade-right {\n from { opacity: 0; transform: translateX(-12px); }\n to { opacity: 1; transform: translateX(0); }\n}\n@keyframes alive-fade-left {\n from { opacity: 0; transform: translateX(12px); }\n to { opacity: 1; transform: translateX(0); }\n}\n@keyframes alive-fade-in {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n@keyframes alive-scale-in {\n from { opacity: 0; transform: scale(0.94); }\n to { opacity: 1; transform: scale(1); }\n}\n@keyframes alive-scale-up {\n from { opacity: 0; transform: scale(0.92) translateY(4px); }\n to { opacity: 1; transform: scale(1) translateY(0); }\n}\n\n/* Exits */\n@keyframes alive-exit-down {\n from { opacity: 1; transform: translateY(0); }\n to { opacity: 0; transform: translateY(8px); }\n}\n@keyframes alive-exit-up {\n from { opacity: 1; transform: translateY(0); }\n to { opacity: 0; transform: translateY(-8px); }\n}\n@keyframes alive-exit-left {\n from { opacity: 1; transform: translateX(0); }\n to { opacity: 0; transform: translateX(-12px); }\n}\n@keyframes alive-exit-right {\n from { opacity: 1; transform: translateX(0); }\n to { opacity: 0; transform: translateX(12px); }\n}\n@keyframes alive-exit-scale {\n from { opacity: 1; transform: scale(1); }\n to { opacity: 0; transform: scale(0.94); }\n}\n\n/* Loop animations */\n@keyframes alive-pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.45; }\n}\n@keyframes alive-spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n}\n@keyframes alive-ping {\n 75%, 100% { transform: scale(2); opacity: 0; }\n}\n@keyframes alive-bounce {\n 0%, 100% {\n transform: translateY(0);\n animation-timing-function: cubic-bezier(0.8, 0, 1, 1);\n }\n 50% {\n transform: translateY(-25%);\n animation-timing-function: cubic-bezier(0, 0, 0.2, 1);\n }\n}\n@keyframes alive-shimmer {\n 0% { background-position: -200% 0; }\n 100% { background-position: 200% 0; }\n}\n\n/* ── Entrance classes ────────────────────────────────────────────── */\n\n.alive-enter {\n animation: alive-fade-up var(--alive-duration-slow) var(--alive-ease-emphasized) both;\n animation-delay: calc(var(--alive-stagger-gap, 60ms) * var(--alive-index, 0));\n}\n.alive-enter-down {\n animation: alive-fade-down var(--alive-duration-slow) var(--alive-ease-emphasized) both;\n animation-delay: calc(var(--alive-stagger-gap, 60ms) * var(--alive-index, 0));\n}\n.alive-enter-right {\n animation: alive-fade-right var(--alive-duration-slow) var(--alive-ease-emphasized) both;\n animation-delay: calc(var(--alive-stagger-gap, 60ms) * var(--alive-index, 0));\n}\n.alive-enter-left {\n animation: alive-fade-left var(--alive-duration-slow) var(--alive-ease-emphasized) both;\n animation-delay: calc(var(--alive-stagger-gap, 60ms) * var(--alive-index, 0));\n}\n.alive-enter-fade {\n animation: alive-fade-in var(--alive-duration-normal) var(--alive-ease-standard) both;\n animation-delay: calc(var(--alive-stagger-gap, 60ms) * var(--alive-index, 0));\n}\n.alive-enter-scale {\n animation: alive-scale-in var(--alive-duration-normal) var(--alive-ease-emphasized) both;\n animation-delay: calc(var(--alive-stagger-gap, 60ms) * var(--alive-index, 0));\n}\n\n/* ── Exit classes (apply dynamically when removing elements) ─────── */\n\n.alive-exit {\n animation: alive-exit-down var(--alive-duration-normal) var(--alive-ease-exit) both;\n}\n.alive-exit-up {\n animation: alive-exit-up var(--alive-duration-normal) var(--alive-ease-exit) both;\n}\n.alive-exit-left {\n animation: alive-exit-left var(--alive-duration-normal) var(--alive-ease-exit) both;\n}\n.alive-exit-right {\n animation: alive-exit-right var(--alive-duration-normal) var(--alive-ease-exit) both;\n}\n.alive-exit-scale {\n animation: alive-exit-scale var(--alive-duration-fast) var(--alive-ease-exit) both;\n}\n\n/* ── Loop animations ─────────────────────────────────────────────── */\n\n.alive-loop-pulse { animation: alive-pulse 2s ease-in-out infinite; }\n.alive-loop-spin { animation: alive-spin 1s linear infinite; }\n.alive-loop-ping { animation: alive-ping 1s cubic-bezier(0, 0, 0.2, 1) infinite; }\n.alive-loop-bounce { animation: alive-bounce 1s infinite; }\n\n/* Reduced motion — respect system preference */\n@media (prefers-reduced-motion: reduce) {\n .alive-enter,\n .alive-enter-down,\n .alive-enter-right,\n .alive-enter-left,\n .alive-enter-fade,\n .alive-enter-scale,\n .alive-exit,\n .alive-exit-up,\n .alive-exit-left,\n .alive-exit-right,\n .alive-exit-scale,\n .alive-loop-pulse,\n .alive-loop-spin,\n .alive-loop-ping,\n .alive-loop-bounce {\n animation: none;\n opacity: 1;\n transform: none;\n }\n\n /* depth system — disable hover lift and active press */\n .d2,\n .d2:hover,\n .d2:active {\n transform: none;\n transition: none;\n box-shadow: var(--alive-shadow-d2);\n }\n}\n\n/* ── Motion override utilities ───────────────────────────────────── */\n\n.motion-fast { --alive-duration: var(--alive-duration-fast) !important; }\n.motion-normal { --alive-duration: var(--alive-duration-normal) !important; }\n.motion-slow { --alive-duration: var(--alive-duration-slow) !important; }\n.motion-none { --alive-duration: 0ms !important; }\n\n.ease-standard { --alive-ease: var(--alive-ease-standard) !important; }\n.ease-emphasized { --alive-ease: var(--alive-ease-emphasized) !important; }\n.ease-exit { --alive-ease: var(--alive-ease-exit) !important; }\n\n/* ══════════════════════════════════════════════════════════════════\n COMPONENT PRIMITIVES\n ══════════════════════════════════════════════════════════════════ */\n\n/* ── Card ────────────────────────────────────────────────────────── */\n\n.alive-card {\n border-radius: 0.75rem;\n padding: 1.5rem;\n background-color: var(--alive-card-bg, #ffffff);\n border: 1px solid var(--alive-card-border, rgba(0,0,0,0.06));\n}\n.alive-card-flush { padding: 0; }\n.alive-card-sm { padding: 1rem; border-radius: 0.5rem; }\n.alive-card-lg { padding: 2rem; border-radius: 1rem; }\n\n/* ── Button ──────────────────────────────────────────────────────── */\n\n.alive-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 0.5rem;\n padding: 0.625rem 1.25rem;\n font-size: 0.875rem;\n font-weight: 500;\n line-height: 1;\n border-radius: 0.5rem;\n border: 1px solid transparent;\n cursor: pointer;\n user-select: none;\n white-space: nowrap;\n text-decoration: none;\n transition:\n background-color var(--alive-duration-fast) var(--alive-ease-standard),\n color var(--alive-duration-fast) var(--alive-ease-standard),\n border-color var(--alive-duration-fast) var(--alive-ease-standard),\n box-shadow var(--alive-duration-fast) var(--alive-ease-standard),\n transform var(--alive-duration-fast) var(--alive-ease-standard),\n opacity var(--alive-duration-fast) var(--alive-ease-standard);\n}\n.alive-button:active {\n transform: scale(0.97);\n transition-duration: calc(var(--alive-duration-fast) / 2);\n}\n.alive-button:focus-visible {\n outline: 2px solid currentColor;\n outline-offset: 2px;\n}\n.alive-button:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n pointer-events: none;\n}\n\n/* Button variants */\n.alive-button-primary {\n background-color: #0a0a0a;\n color: #ffffff;\n border-color: #0a0a0a;\n}\n.alive-button-primary:hover { background-color: #1a1a1a; }\n\n.alive-button-secondary {\n background-color: transparent;\n color: #0a0a0a;\n border-color: #e4e4e4;\n}\n.alive-button-secondary:hover {\n background-color: #f4f4f4;\n border-color: #d4d4d4;\n}\n\n.alive-button-ghost {\n background-color: transparent;\n color: #4b4b4b;\n border-color: transparent;\n}\n.alive-button-ghost:hover {\n background-color: #f4f4f4;\n color: #0a0a0a;\n}\n\n.alive-button-destructive {\n background-color: #dc2626;\n color: #ffffff;\n border-color: #dc2626;\n}\n.alive-button-destructive:hover { background-color: #b91c1c; }\n\n/* Button sizes */\n.alive-button-xs { padding: 0.25rem 0.625rem; font-size: 0.75rem; border-radius: 0.375rem; }\n.alive-button-sm { padding: 0.375rem 0.875rem; font-size: 0.8125rem; border-radius: 0.375rem; }\n.alive-button-lg { padding: 0.75rem 1.75rem; font-size: 0.9375rem; border-radius: 0.625rem; }\n.alive-button-xl { padding: 0.875rem 2rem; font-size: 1rem; border-radius: 0.75rem; }\n.alive-button-icon {\n padding: 0.625rem;\n aspect-ratio: 1;\n}\n\n/* ── Badge ───────────────────────────────────────────────────────── */\n\n.alive-badge {\n display: inline-flex;\n align-items: center;\n gap: 0.3rem;\n padding: 0.25rem 0.625rem;\n font-size: 0.75rem;\n font-weight: 500;\n line-height: 1;\n border-radius: 9999px;\n border: 1px solid transparent;\n white-space: nowrap;\n}\n\n/* Badge sizes */\n.alive-badge-sm { padding: 0.125rem 0.5rem; font-size: 0.6875rem; }\n.alive-badge-lg { padding: 0.375rem 0.75rem; font-size: 0.8125rem; }\n\n/* Badge colors */\n.alive-badge-gray { background: rgba(0,0,0,0.06); color: #525252; border-color: rgba(0,0,0,0.1); }\n.alive-badge-green { background: rgba(74,222,128,0.12); color: #16a34a; border-color: rgba(74,222,128,0.25); }\n.alive-badge-red { background: rgba(239,68,68,0.1); color: #dc2626; border-color: rgba(239,68,68,0.2); }\n.alive-badge-yellow { background: rgba(234,179,8,0.1); color: #ca8a04; border-color: rgba(234,179,8,0.25); }\n.alive-badge-blue { background: rgba(96,165,250,0.1); color: #2563eb; border-color: rgba(96,165,250,0.22); }\n.alive-badge-purple { background: rgba(167,139,250,0.12); color: #7c3aed; border-color: rgba(167,139,250,0.25); }\n.alive-badge-orange { background: rgba(251,146,60,0.1); color: #ea580c; border-color: rgba(251,146,60,0.22); }\n\n/* Badge with status dot */\n.alive-badge-dot::before {\n content: '';\n display: block;\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background: currentColor;\n flex-shrink: 0;\n}\n\n/* ── Input ───────────────────────────────────────────────────────── */\n\n.alive-input {\n display: block;\n width: 100%;\n padding: 0.625rem 0.875rem;\n font-size: 0.875rem;\n line-height: 1.5;\n color: inherit;\n background: transparent;\n border: 1px solid rgba(0,0,0,0.14);\n border-radius: 0.5rem;\n outline: none;\n transition:\n border-color var(--alive-duration-fast) var(--alive-ease-standard),\n box-shadow var(--alive-duration-fast) var(--alive-ease-standard);\n}\n.alive-input::placeholder { opacity: 0.4; }\n.alive-input:hover { border-color: rgba(0,0,0,0.24); }\n.alive-input:focus {\n border-color: rgba(0,0,0,0.5);\n box-shadow: 0 0 0 3px rgba(0,0,0,0.07);\n}\n.alive-input:disabled {\n opacity: 0.45;\n cursor: not-allowed;\n background: rgba(0,0,0,0.03);\n}\n.alive-input-error { border-color: rgba(239,68,68,0.55); }\n.alive-input-error:hover { border-color: rgba(239,68,68,0.7); }\n.alive-input-error:focus {\n border-color: #ef4444;\n box-shadow: 0 0 0 3px rgba(239,68,68,0.1);\n}\n.alive-input-sm { padding: 0.4375rem 0.75rem; font-size: 0.8125rem; }\n.alive-input-lg { padding: 0.75rem 1rem; font-size: 0.9375rem; }\n\n/* ── Textarea ────────────────────────────────────────────────────── */\n\n.alive-textarea {\n display: block;\n width: 100%;\n padding: 0.625rem 0.875rem;\n font-size: 0.875rem;\n line-height: 1.6;\n color: inherit;\n background: transparent;\n border: 1px solid rgba(0,0,0,0.14);\n border-radius: 0.5rem;\n outline: none;\n resize: vertical;\n min-height: 6rem;\n transition:\n border-color var(--alive-duration-fast) var(--alive-ease-standard),\n box-shadow var(--alive-duration-fast) var(--alive-ease-standard);\n}\n.alive-textarea::placeholder { opacity: 0.4; }\n.alive-textarea:hover { border-color: rgba(0,0,0,0.24); }\n.alive-textarea:focus {\n border-color: rgba(0,0,0,0.5);\n box-shadow: 0 0 0 3px rgba(0,0,0,0.07);\n}\n.alive-textarea:disabled {\n opacity: 0.45;\n cursor: not-allowed;\n background: rgba(0,0,0,0.03);\n}\n\n/* ── Select ──────────────────────────────────────────────────────── */\n\n.alive-select {\n display: block;\n width: 100%;\n padding: 0.625rem 2.25rem 0.625rem 0.875rem;\n font-size: 0.875rem;\n line-height: 1.5;\n color: inherit;\n background-color: transparent;\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: right 0.6rem center;\n background-size: 1.25rem;\n border: 1px solid rgba(0,0,0,0.14);\n border-radius: 0.5rem;\n outline: none;\n cursor: pointer;\n appearance: none;\n transition:\n border-color var(--alive-duration-fast) var(--alive-ease-standard),\n box-shadow var(--alive-duration-fast) var(--alive-ease-standard);\n}\n.alive-select:hover { border-color: rgba(0,0,0,0.24); }\n.alive-select:focus {\n border-color: rgba(0,0,0,0.5);\n box-shadow: 0 0 0 3px rgba(0,0,0,0.07);\n}\n.alive-select:disabled {\n opacity: 0.45;\n cursor: not-allowed;\n}\n\n/* ── Checkbox / Radio ────────────────────────────────────────────── */\n\n.alive-checkbox,\n.alive-radio {\n width: 1rem;\n height: 1rem;\n border: 1.5px solid rgba(0,0,0,0.25);\n border-radius: 0.25rem;\n background: transparent;\n cursor: pointer;\n appearance: none;\n transition:\n background var(--alive-duration-fast) var(--alive-ease-standard),\n border-color var(--alive-duration-fast) var(--alive-ease-standard),\n box-shadow var(--alive-duration-fast) var(--alive-ease-standard);\n flex-shrink: 0;\n}\n.alive-radio { border-radius: 50%; }\n\n.alive-checkbox:checked,\n.alive-radio:checked {\n background-color: #0a0a0a;\n border-color: #0a0a0a;\n background-image: url(\"data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: center;\n background-size: 0.75rem;\n}\n.alive-radio:checked {\n background-image: url(\"data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e\");\n}\n.alive-checkbox:focus-visible,\n.alive-radio:focus-visible {\n box-shadow: 0 0 0 3px rgba(0,0,0,0.1);\n}\n\n/* ── Switch / Toggle ─────────────────────────────────────────────── */\n\n.alive-switch {\n position: relative;\n display: inline-flex;\n align-items: center;\n width: 2.75rem;\n height: 1.5rem;\n border-radius: 9999px;\n background: rgba(0,0,0,0.15);\n cursor: pointer;\n flex-shrink: 0;\n transition: background var(--alive-duration-fast) var(--alive-ease-standard);\n}\n.alive-switch::after {\n content: '';\n position: absolute;\n top: 0.1875rem;\n left: 0.1875rem;\n width: 1.125rem;\n height: 1.125rem;\n border-radius: 50%;\n background: #fff;\n box-shadow: 0 1px 4px rgba(0,0,0,0.2);\n transition: transform var(--alive-duration-normal) var(--alive-ease-emphasized);\n}\n.alive-switch[aria-checked=\"true\"],\n.alive-switch.is-checked {\n background: #22c55e;\n}\n.alive-switch[aria-checked=\"true\"]::after,\n.alive-switch.is-checked::after {\n transform: translateX(1.25rem);\n}\n.alive-switch[aria-checked=\"false\"][data-pending],\n.alive-switch.is-pending {\n opacity: 0.7;\n cursor: wait;\n}\n/* Sizes */\n.alive-switch-sm {\n width: 2.25rem;\n height: 1.25rem;\n}\n.alive-switch-sm::after { width: 0.875rem; height: 0.875rem; }\n.alive-switch-sm[aria-checked=\"true\"]::after,\n.alive-switch-sm.is-checked::after { transform: translateX(1rem); }\n\n.alive-switch-lg {\n width: 3.5rem;\n height: 2rem;\n}\n.alive-switch-lg::after { width: 1.5rem; height: 1.5rem; }\n.alive-switch-lg[aria-checked=\"true\"]::after,\n.alive-switch-lg.is-checked::after { transform: translateX(1.5rem); }\n\n/* ── Avatar ──────────────────────────────────────────────────────── */\n\n.alive-avatar {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: 2.5rem;\n height: 2.5rem;\n border-radius: 50%;\n overflow: hidden;\n font-size: 0.875rem;\n font-weight: 500;\n background: rgba(0,0,0,0.08);\n color: rgba(0,0,0,0.5);\n user-select: none;\n}\n.alive-avatar img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n.alive-avatar-xs { width: 1.5rem; height: 1.5rem; font-size: 0.625rem; }\n.alive-avatar-sm { width: 2rem; height: 2rem; font-size: 0.75rem; }\n.alive-avatar-lg { width: 3rem; height: 3rem; font-size: 1rem; }\n.alive-avatar-xl { width: 4rem; height: 4rem; font-size: 1.25rem; }\n.alive-avatar-2xl { width: 5rem; height: 5rem; font-size: 1.5rem; }\n\n/* Avatar group — overlapping stack */\n.alive-avatar-group {\n display: flex;\n}\n.alive-avatar-group .alive-avatar {\n box-shadow: 0 0 0 2px rgba(0,0,0,0.06);\n margin-left: -0.5rem;\n}\n.alive-avatar-group .alive-avatar:first-child {\n margin-left: 0;\n}\n\n/* ── Skeleton ────────────────────────────────────────────────────── */\n\n.alive-skeleton {\n border-radius: 0.375rem;\n background: linear-gradient(\n 90deg,\n rgba(0,0,0,0.06) 25%,\n rgba(0,0,0,0.1) 50%,\n rgba(0,0,0,0.06) 75%\n );\n background-size: 200% 100%;\n animation: alive-shimmer 1.6s ease-in-out infinite;\n}\n.alive-skeleton-text { height: 1em; border-radius: 0.25rem; }\n.alive-skeleton-circle { border-radius: 9999px; }\n.alive-skeleton-sm { animation-duration: 1.2s; }\n.alive-skeleton-lg { animation-duration: 2s; }\n\n/* ── Progress ────────────────────────────────────────────────────── */\n\n.alive-progress {\n display: block;\n width: 100%;\n height: 0.5rem;\n border-radius: 9999px;\n background: rgba(0,0,0,0.08);\n overflow: hidden;\n}\n.alive-progress-bar {\n height: 100%;\n border-radius: 9999px;\n background: #0a0a0a;\n transition: width var(--alive-duration-slow) var(--alive-ease-standard);\n}\n.alive-progress-xs { height: 0.125rem; }\n.alive-progress-sm { height: 0.25rem; }\n.alive-progress-lg { height: 0.75rem; }\n.alive-progress-xl { height: 1rem; }\n.alive-progress-indeterminate .alive-progress-bar {\n width: 40% !important;\n animation: alive-progress-indeterminate 1.5s ease-in-out infinite;\n}\n@keyframes alive-progress-indeterminate {\n 0% { transform: translateX(-150%); }\n 100% { transform: translateX(400%); }\n}\n\n/* ── Separator ───────────────────────────────────────────────────── */\n\n.alive-separator {\n display: block;\n width: 100%;\n height: 1px;\n background: rgba(0,0,0,0.08);\n border: none;\n margin: 0;\n}\n.alive-separator-v {\n display: inline-block;\n width: 1px;\n height: 1em;\n vertical-align: middle;\n background: rgba(0,0,0,0.08);\n margin: 0 0.5rem;\n}\n.alive-separator-label {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n font-size: 0.75rem;\n color: rgba(0,0,0,0.4);\n font-weight: 500;\n letter-spacing: 0.04em;\n text-transform: uppercase;\n}\n.alive-separator-label::before,\n.alive-separator-label::after {\n content: '';\n flex: 1;\n height: 1px;\n background: rgba(0,0,0,0.08);\n}\n\n/* ── Alert ───────────────────────────────────────────────────────── */\n\n.alive-alert {\n display: flex;\n align-items: flex-start;\n gap: 0.75rem;\n padding: 1rem 1.25rem;\n border-radius: 0.75rem;\n border: 1px solid transparent;\n font-size: 0.875rem;\n line-height: 1.55;\n}\n.alive-alert-title {\n font-weight: 600;\n margin-bottom: 0.25rem;\n}\n\n.alive-alert-info { background: rgba(96,165,250,0.08); border-color: rgba(96,165,250,0.2); color: #1d4ed8; }\n.alive-alert-success { background: rgba(74,222,128,0.08); border-color: rgba(74,222,128,0.22); color: #15803d; }\n.alive-alert-warning { background: rgba(251,191,36,0.10); border-color: rgba(251,191,36,0.25); color: #92400e; }\n.alive-alert-error { background: rgba(239,68,68,0.08); border-color: rgba(239,68,68,0.2); color: #dc2626; }\n\n/* ── Tooltip ─────────────────────────────────────────────────────── */\n\n.alive-tooltip-wrap {\n position: relative;\n display: inline-flex;\n}\n.alive-tooltip {\n position: absolute;\n z-index: 50;\n bottom: calc(100% + 8px);\n left: 50%;\n transform: translateX(-50%) translateY(4px);\n padding: 0.375rem 0.75rem;\n font-size: 0.75rem;\n font-weight: 500;\n line-height: 1.4;\n white-space: nowrap;\n color: #fff;\n background: rgba(10,10,10,0.92);\n border-radius: 0.5rem;\n box-shadow: 0 4px 16px rgba(0,0,0,0.14);\n pointer-events: none;\n opacity: 0;\n transition:\n opacity var(--alive-duration-fast) var(--alive-ease-standard),\n transform var(--alive-duration-fast) var(--alive-ease-emphasized);\n}\n.alive-tooltip::after {\n content: '';\n position: absolute;\n top: 100%;\n left: 50%;\n transform: translateX(-50%);\n border: 5px solid transparent;\n border-top-color: rgba(10,10,10,0.92);\n}\n.alive-tooltip-wrap:hover .alive-tooltip {\n opacity: 1;\n transform: translateX(-50%) translateY(0);\n}\n\n/* Tooltip placements */\n.alive-tooltip-bottom {\n top: calc(100% + 8px);\n bottom: auto;\n transform: translateX(-50%) translateY(-4px);\n}\n.alive-tooltip-bottom::after {\n top: auto;\n bottom: 100%;\n border-top-color: transparent;\n border-bottom-color: rgba(10,10,10,0.92);\n}\n.alive-tooltip-wrap:hover .alive-tooltip-bottom {\n transform: translateX(-50%) translateY(0);\n}\n\n/* ── Modal ───────────────────────────────────────────────────────── */\n\n.alive-backdrop {\n position: fixed;\n inset: 0;\n z-index: 40;\n background: rgba(0,0,0,0.45);\n backdrop-filter: blur(4px);\n animation: alive-fade-in var(--alive-duration-normal) var(--alive-ease-standard) both;\n}\n.alive-modal {\n position: fixed;\n inset: 0;\n z-index: 50;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 1rem;\n overflow-y: auto;\n}\n.alive-modal-content {\n position: relative;\n width: 100%;\n max-width: 32rem;\n max-height: calc(100dvh - 2rem);\n overflow-y: auto;\n border-radius: 1rem;\n background: #fff;\n border: 1px solid rgba(0,0,0,0.08);\n box-shadow:\n 0 24px 64px rgba(0,0,0,0.18),\n 0 8px 24px rgba(0,0,0,0.10);\n animation: alive-scale-up var(--alive-duration-slow) var(--alive-ease-emphasized) both;\n}\n.alive-modal-sm .alive-modal-content { max-width: 24rem; }\n.alive-modal-lg .alive-modal-content { max-width: 48rem; }\n.alive-modal-xl .alive-modal-content { max-width: 64rem; }\n.alive-modal-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 1.25rem 1.5rem;\n border-bottom: 1px solid rgba(0,0,0,0.06);\n}\n.alive-modal-body { padding: 1.5rem; }\n.alive-modal-footer {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 0.75rem;\n padding: 1rem 1.5rem;\n border-top: 1px solid rgba(0,0,0,0.06);\n}\n\n/* ── Drawer / Sheet ──────────────────────────────────────────────── */\n\n.alive-drawer {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n z-index: 50;\n width: 100%;\n max-width: 24rem;\n background: #fff;\n border-left: 1px solid rgba(0,0,0,0.08);\n box-shadow: -8px 0 40px rgba(0,0,0,0.1);\n display: flex;\n flex-direction: column;\n animation: alive-fade-left var(--alive-duration-slow) var(--alive-ease-emphasized) both;\n}\n.alive-drawer-header { padding: 1.25rem 1.5rem; border-bottom: 1px solid rgba(0,0,0,0.06); }\n.alive-drawer-body { flex: 1; overflow-y: auto; padding: 1.5rem; }\n.alive-drawer-footer { padding: 1rem 1.5rem; border-top: 1px solid rgba(0,0,0,0.06); }\n\n/* ── Navigation bar ──────────────────────────────────────────────── */\n\n.alive-nav {\n position: sticky;\n top: 0;\n z-index: 50;\n display: flex;\n align-items: center;\n height: 3.5rem;\n padding: 0 1.5rem;\n border-bottom: 1px solid rgba(0,0,0,0.07);\n background: rgba(255,255,255,0.85);\n backdrop-filter: blur(12px);\n -webkit-backdrop-filter: blur(12px);\n gap: 1rem;\n}\n.alive-nav-brand {\n display: flex;\n align-items: center;\n gap: 0.625rem;\n font-weight: 600;\n font-size: 0.9375rem;\n text-decoration: none;\n color: inherit;\n}\n.alive-nav-items {\n display: flex;\n align-items: center;\n gap: 0.25rem;\n flex: 1;\n}\n.alive-nav-end {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n margin-left: auto;\n}\n.alive-nav-link {\n padding: 0.4375rem 0.75rem;\n border-radius: 0.5rem;\n font-size: 0.8125rem;\n font-weight: 500;\n text-decoration: none;\n color: rgba(0,0,0,0.55);\n transition: background var(--alive-duration-fast) var(--alive-ease-standard), color var(--alive-duration-fast) var(--alive-ease-standard);\n cursor: pointer;\n}\n.alive-nav-link:hover { background: rgba(0,0,0,0.05); color: rgba(0,0,0,0.85); }\n.alive-nav-link.is-active { background: rgba(0,0,0,0.07); color: rgba(0,0,0,0.9); }\n\n/* ── Tabs ────────────────────────────────────────────────────────── */\n\n.alive-tabs {\n display: flex;\n border-bottom: 1px solid rgba(0,0,0,0.08);\n gap: 0;\n position: relative;\n}\n.alive-tab {\n padding: 0.6875rem 1rem;\n font-size: 0.875rem;\n font-weight: 500;\n color: rgba(0,0,0,0.45);\n border: none;\n background: transparent;\n cursor: pointer;\n position: relative;\n border-bottom: 2px solid transparent;\n margin-bottom: -1px;\n transition: color var(--alive-duration-fast) var(--alive-ease-standard);\n}\n.alive-tab:hover { color: rgba(0,0,0,0.72); }\n.alive-tab.is-active {\n color: rgba(0,0,0,0.9);\n border-bottom-color: rgba(0,0,0,0.9);\n}\n/* Sliding indicator variant */\n.alive-tabs-indicator {\n position: absolute;\n bottom: -1px;\n height: 2px;\n background: #0a0a0a;\n border-radius: 2px 2px 0 0;\n transition:\n left var(--alive-duration-normal) var(--alive-ease-emphasized),\n width var(--alive-duration-normal) var(--alive-ease-emphasized);\n}\n\n/* Pill tabs variant */\n.alive-tabs-pills {\n border-bottom: none;\n gap: 0.25rem;\n background: rgba(0,0,0,0.05);\n padding: 0.25rem;\n border-radius: 0.625rem;\n}\n.alive-tabs-pills .alive-tab {\n border-radius: 0.375rem;\n border-bottom: none;\n margin-bottom: 0;\n}\n.alive-tabs-pills .alive-tab.is-active {\n background: #fff;\n color: rgba(0,0,0,0.9);\n box-shadow: 0 1px 3px rgba(0,0,0,0.1);\n border-bottom-color: transparent;\n}\n\n/* ── Dropdown / Menu ─────────────────────────────────────────────── */\n\n.alive-dropdown {\n position: absolute;\n z-index: 50;\n min-width: 12rem;\n padding: 0.375rem;\n border-radius: 0.75rem;\n background: #fff;\n border: 1px solid rgba(0,0,0,0.08);\n box-shadow:\n 0 8px 32px rgba(0,0,0,0.1),\n 0 2px 8px rgba(0,0,0,0.06);\n animation: alive-scale-up var(--alive-duration-fast) var(--alive-ease-emphasized) both;\n transform-origin: top left;\n}\n.alive-dropdown-item {\n display: flex;\n align-items: center;\n gap: 0.625rem;\n width: 100%;\n padding: 0.5625rem 0.75rem;\n font-size: 0.875rem;\n font-weight: 400;\n color: rgba(0,0,0,0.75);\n border-radius: 0.5rem;\n border: none;\n background: transparent;\n cursor: pointer;\n text-align: left;\n text-decoration: none;\n transition: background var(--alive-duration-fast) var(--alive-ease-standard), color var(--alive-duration-fast) var(--alive-ease-standard);\n}\n.alive-dropdown-item:hover {\n background: rgba(0,0,0,0.05);\n color: rgba(0,0,0,0.9);\n}\n.alive-dropdown-item.is-active {\n background: rgba(0,0,0,0.07);\n color: rgba(0,0,0,0.9);\n font-weight: 500;\n}\n.alive-dropdown-item-destructive { color: #dc2626; }\n.alive-dropdown-item-destructive:hover { background: rgba(239,68,68,0.08); color: #dc2626; }\n.alive-dropdown-separator {\n height: 1px;\n background: rgba(0,0,0,0.07);\n margin: 0.25rem 0;\n border: none;\n}\n.alive-dropdown-label {\n padding: 0.375rem 0.75rem;\n font-size: 0.6875rem;\n font-weight: 600;\n letter-spacing: 0.06em;\n text-transform: uppercase;\n color: rgba(0,0,0,0.35);\n}\n\n/* ── Table ───────────────────────────────────────────────────────── */\n\n.alive-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 0.875rem;\n text-align: left;\n}\n.alive-table th {\n padding: 0.75rem 1rem;\n font-size: 0.75rem;\n font-weight: 600;\n letter-spacing: 0.04em;\n text-transform: uppercase;\n color: rgba(0,0,0,0.45);\n border-bottom: 1px solid rgba(0,0,0,0.08);\n white-space: nowrap;\n}\n.alive-table td {\n padding: 0.875rem 1rem;\n border-bottom: 1px solid rgba(0,0,0,0.05);\n color: rgba(0,0,0,0.75);\n transition: background var(--alive-duration-fast) var(--alive-ease-standard);\n}\n.alive-table tr:hover td { background: rgba(0,0,0,0.02); }\n.alive-table tr:last-child td { border-bottom: none; }\n\n/* Table variants */\n.alive-table-striped tr:nth-child(even) td { background: rgba(0,0,0,0.018); }\n.alive-table-bordered td,\n.alive-table-bordered th { border: 1px solid rgba(0,0,0,0.07); }\n\n/* ── Chip ────────────────────────────────────────────────────────── */\n\n.alive-chip {\n display: inline-flex;\n align-items: center;\n gap: 0.375rem;\n padding: 0.3125rem 0.75rem;\n font-size: 0.8125rem;\n font-weight: 500;\n border-radius: 9999px;\n background: rgba(0,0,0,0.06);\n color: rgba(0,0,0,0.65);\n border: 1px solid rgba(0,0,0,0.1);\n cursor: default;\n user-select: none;\n transition:\n background var(--alive-duration-fast) var(--alive-ease-standard),\n border-color var(--alive-duration-fast) var(--alive-ease-standard);\n}\n.alive-chip:hover { background: rgba(0,0,0,0.09); border-color: rgba(0,0,0,0.16); }\n.alive-chip.is-selected {\n background: rgba(0,0,0,0.1);\n color: rgba(0,0,0,0.85);\n border-color: rgba(0,0,0,0.2);\n}\n.alive-chip-dismiss {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 1rem;\n height: 1rem;\n border-radius: 50%;\n cursor: pointer;\n opacity: 0.5;\n transition: opacity var(--alive-duration-fast) var(--alive-ease-standard), background var(--alive-duration-fast) var(--alive-ease-standard);\n}\n.alive-chip-dismiss:hover { opacity: 1; background: rgba(0,0,0,0.12); }\n\n/* ── Stack ───────────────────────────────────────────────────────── */\n\n.alive-stack { display: flex; }\n.alive-stack-v { flex-direction: column; }\n.alive-stack-h { flex-direction: row; }\n\n/* ── Container ───────────────────────────────────────────────────── */\n\n.alive-container {\n width: 100%;\n margin-left: auto;\n margin-right: auto;\n padding-left: 1rem;\n padding-right: 1rem;\n}\n@media (min-width: 640px) { .alive-container { max-width: 640px; padding-left: 1.5rem; padding-right: 1.5rem; } }\n@media (min-width: 768px) { .alive-container { max-width: 768px; } }\n@media (min-width: 1024px) { .alive-container { max-width: 1024px; padding-left: 2rem; padding-right: 2rem; } }\n@media (min-width: 1280px) { .alive-container { max-width: 1280px; } }\n@media (min-width: 1536px) { .alive-container { max-width: 1536px; } }\n\n/* ── Cluster (responsive flex wrap) ─────────────────────────────── */\n\n.alive-cluster {\n display: flex;\n flex-wrap: wrap;\n gap: 0.75rem;\n}\n\n/* ── Focus ring ──────────────────────────────────────────────────── */\n\n.alive-focus-ring:focus-visible {\n outline: 2px solid rgba(0,0,0,0.75);\n outline-offset: 2px;\n}\n\n/* ── Overlays & surfaces ─────────────────────────────────────────── */\n\n.alive-overlay {\n position: fixed;\n inset: 0;\n background: rgba(0,0,0,0.45);\n backdrop-filter: blur(4px);\n -webkit-backdrop-filter: blur(4px);\n}\n\n/* ── Toast / Snackbar ────────────────────────────────────────────── */\n\n.alive-toast-region {\n position: fixed;\n bottom: 1.25rem;\n right: 1.25rem;\n z-index: 60;\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n pointer-events: none;\n}\n.alive-toast {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n padding: 0.875rem 1.125rem;\n border-radius: 0.75rem;\n background: rgba(10,10,10,0.94);\n color: #fff;\n font-size: 0.875rem;\n font-weight: 500;\n box-shadow: 0 8px 32px rgba(0,0,0,0.2);\n border: 1px solid rgba(255,255,255,0.1);\n pointer-events: auto;\n min-width: 16rem;\n max-width: 24rem;\n animation: alive-fade-right var(--alive-duration-slow) var(--alive-ease-emphasized) both;\n}\n.alive-toast-icon { flex-shrink: 0; }\n.alive-toast-body { flex: 1; min-width: 0; }\n.alive-toast-title { font-weight: 600; }\n.alive-toast-desc { font-size: 0.8125rem; opacity: 0.7; margin-top: 0.125rem; }\n.alive-toast-close {\n flex-shrink: 0;\n opacity: 0.5;\n cursor: pointer;\n transition: opacity var(--alive-duration-fast) var(--alive-ease-standard);\n}\n.alive-toast-close:hover { opacity: 1; }\n\n/* Toast variants */\n.alive-toast-success { border-color: rgba(74,222,128,0.3); }\n.alive-toast-error { border-color: rgba(239,68,68,0.3); }\n.alive-toast-warning { border-color: rgba(251,191,36,0.3); }\n\n/* ── Command palette ─────────────────────────────────────────────── */\n\n.alive-command {\n position: fixed;\n inset: 0;\n z-index: 60;\n display: flex;\n align-items: flex-start;\n justify-content: center;\n padding-top: 10vh;\n}\n.alive-command-panel {\n width: 100%;\n max-width: 38rem;\n border-radius: 1rem;\n background: #fff;\n border: 1px solid rgba(0,0,0,0.1);\n box-shadow:\n 0 24px 80px rgba(0,0,0,0.22),\n 0 8px 24px rgba(0,0,0,0.12);\n overflow: hidden;\n animation: alive-scale-up var(--alive-duration-slow) var(--alive-ease-emphasized) both;\n}\n.alive-command-input-wrap {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n padding: 1rem 1.25rem;\n border-bottom: 1px solid rgba(0,0,0,0.08);\n}\n.alive-command-input {\n flex: 1;\n font-size: 1rem;\n border: none;\n outline: none;\n background: transparent;\n color: inherit;\n}\n.alive-command-list {\n max-height: 24rem;\n overflow-y: auto;\n padding: 0.375rem;\n}\n.alive-command-group-label {\n padding: 0.5rem 0.75rem 0.25rem;\n font-size: 0.6875rem;\n font-weight: 600;\n letter-spacing: 0.06em;\n text-transform: uppercase;\n color: rgba(0,0,0,0.35);\n}\n.alive-command-item {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n padding: 0.625rem 0.75rem;\n border-radius: 0.5rem;\n font-size: 0.875rem;\n cursor: pointer;\n color: rgba(0,0,0,0.75);\n transition: background var(--alive-duration-fast) var(--alive-ease-standard), color var(--alive-duration-fast) var(--alive-ease-standard);\n}\n.alive-command-item:hover,\n.alive-command-item.is-active {\n background: rgba(0,0,0,0.05);\n color: rgba(0,0,0,0.9);\n}\n.alive-command-shortcut {\n margin-left: auto;\n font-size: 0.75rem;\n opacity: 0.4;\n font-family: ui-monospace, monospace;\n}\n\n/* ── Popover ─────────────────────────────────────────────────────── */\n\n.alive-popover {\n position: absolute;\n z-index: 50;\n padding: 0.75rem;\n border-radius: 0.75rem;\n background: #fff;\n border: 1px solid rgba(0,0,0,0.08);\n box-shadow:\n 0 8px 32px rgba(0,0,0,0.1),\n 0 2px 8px rgba(0,0,0,0.06);\n animation: alive-scale-up var(--alive-duration-fast) var(--alive-ease-emphasized) both;\n}\n\n/* ── Sidebar ─────────────────────────────────────────────────────── */\n\n.alive-sidebar {\n display: flex;\n flex-direction: column;\n width: 15rem;\n height: 100%;\n border-right: 1px solid rgba(0,0,0,0.07);\n background: #fafafa;\n overflow-y: auto;\n flex-shrink: 0;\n}\n.alive-sidebar-section {\n padding: 1rem 0.75rem;\n}\n.alive-sidebar-section + .alive-sidebar-section {\n border-top: 1px solid rgba(0,0,0,0.06);\n}\n.alive-sidebar-label {\n padding: 0 0.5rem 0.375rem;\n font-size: 0.6875rem;\n font-weight: 600;\n letter-spacing: 0.06em;\n text-transform: uppercase;\n color: rgba(0,0,0,0.35);\n}\n.alive-sidebar-item {\n display: flex;\n align-items: center;\n gap: 0.625rem;\n padding: 0.5rem 0.625rem;\n font-size: 0.875rem;\n font-weight: 400;\n border-radius: 0.5rem;\n color: rgba(0,0,0,0.6);\n cursor: pointer;\n text-decoration: none;\n transition: background var(--alive-duration-fast) var(--alive-ease-standard), color var(--alive-duration-fast) var(--alive-ease-standard);\n}\n.alive-sidebar-item:hover { background: rgba(0,0,0,0.05); color: rgba(0,0,0,0.85); }\n.alive-sidebar-item.is-active {\n background: rgba(0,0,0,0.08);\n color: rgba(0,0,0,0.9);\n font-weight: 500;\n}\n\n/* ── Utility: visually hidden (screen reader) ────────────────────── */\n.alive-sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0,0,0,0);\n white-space: nowrap;\n border-width: 0;\n}\n\n/* ── Kbd ─────────────────────────────────────────────────────────── */\n\n.alive-kbd {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 0.1875rem 0.4375rem;\n font-family: ui-monospace, SFMono-Regular, Menlo, monospace;\n font-size: 0.75rem;\n font-weight: 500;\n line-height: 1;\n color: rgba(0,0,0,0.65);\n background: rgba(0,0,0,0.04);\n border: 1px solid rgba(0,0,0,0.14);\n border-bottom-width: 2px;\n border-radius: 0.3125rem;\n white-space: nowrap;\n user-select: none;\n}\n\n/* ── Form group ──────────────────────────────────────────────────── */\n\n.alive-form-group {\n display: flex;\n flex-direction: column;\n gap: 0.375rem;\n}\n.alive-label {\n display: block;\n font-size: 0.875rem;\n font-weight: 500;\n color: rgba(0,0,0,0.8);\n}\n.alive-label-required::after {\n content: ' *';\n color: #dc2626;\n}\n.alive-helper {\n font-size: 0.8125rem;\n color: rgba(0,0,0,0.45);\n line-height: 1.4;\n}\n.alive-error-msg {\n font-size: 0.8125rem;\n color: #dc2626;\n line-height: 1.4;\n}\n\n/* ── Breadcrumb ──────────────────────────────────────────────────── */\n\n.alive-breadcrumb {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 0.25rem;\n font-size: 0.875rem;\n color: rgba(0,0,0,0.45);\n list-style: none;\n margin: 0;\n padding: 0;\n}\n.alive-breadcrumb-item {\n display: flex;\n align-items: center;\n gap: 0.25rem;\n}\n.alive-breadcrumb-item a {\n color: rgba(0,0,0,0.55);\n text-decoration: none;\n transition: color var(--alive-duration-fast) var(--alive-ease-standard);\n}\n.alive-breadcrumb-item a:hover { color: rgba(0,0,0,0.9); }\n.alive-breadcrumb-item[aria-current=\"page\"] { color: rgba(0,0,0,0.85); font-weight: 500; }\n.alive-breadcrumb-sep {\n color: rgba(0,0,0,0.25);\n user-select: none;\n font-size: 0.8125rem;\n}\n\n/* ── Accordion ───────────────────────────────────────────────────── */\n\n.alive-accordion {\n display: flex;\n flex-direction: column;\n border: 1px solid rgba(0,0,0,0.08);\n border-radius: 0.75rem;\n overflow: hidden;\n}\n.alive-accordion-item {\n border-bottom: 1px solid rgba(0,0,0,0.07);\n}\n.alive-accordion-item:last-child { border-bottom: none; }\n.alive-accordion-trigger {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n padding: 1rem 1.25rem;\n font-size: 0.9375rem;\n font-weight: 500;\n color: rgba(0,0,0,0.8);\n background: transparent;\n border: none;\n cursor: pointer;\n text-align: left;\n gap: 0.75rem;\n transition: background var(--alive-duration-fast) var(--alive-ease-standard), color var(--alive-duration-fast) var(--alive-ease-standard);\n}\n.alive-accordion-trigger:hover { background: rgba(0,0,0,0.025); color: rgba(0,0,0,0.9); }\n.alive-accordion-icon {\n flex-shrink: 0;\n width: 1rem;\n height: 1rem;\n color: rgba(0,0,0,0.35);\n transition: transform var(--alive-duration-normal) var(--alive-ease-emphasized);\n}\n.alive-accordion-item.is-open .alive-accordion-icon { transform: rotate(180deg); }\n.alive-accordion-content {\n overflow: hidden;\n font-size: 0.875rem;\n line-height: 1.6;\n color: rgba(0,0,0,0.6);\n}\n.alive-accordion-content-inner { padding: 0 1.25rem 1.25rem; }\n\n/* ── JS Runtime: is-open / is-active state helpers ──────────────── */\n\n/* Modal and Drawer: hidden by default, shown when .is-open is added by runtime */\n[data-alive-modal],\n[data-alive-drawer] {\n display: none;\n}\n[data-alive-modal].is-open,\n[data-alive-drawer].is-open {\n display: flex;\n}\n\n/* Dropdown: hidden by default */\n[data-alive-dropdown-menu] {\n display: none;\n}\n[data-alive-dropdown-menu].is-open {\n display: block;\n}\n\n/* Accordion content: collapsed by default, expanded when parent has .is-open */\n[data-alive-content] {\n display: grid;\n grid-template-rows: 0fr;\n transition: grid-template-rows var(--alive-duration-normal) var(--alive-ease-standard);\n}\n[data-alive-content] > * {\n overflow: hidden;\n}\n[data-alive-accordion-item].is-open [data-alive-content] {\n grid-template-rows: 1fr;\n}\n\n/* Tabs: panels hidden by default, shown when .is-active */\n[data-alive-panel] {\n display: none;\n}\n[data-alive-panel].is-active {\n display: block;\n}\n[data-alive-tab].is-active {\n color: rgba(0,0,0,0.9);\n border-bottom-color: rgba(0,0,0,0.9);\n}\n\n/* ── Pagination ──────────────────────────────────────────────────── */\n\n.alive-pagination {\n display: flex;\n align-items: center;\n gap: 0.25rem;\n list-style: none;\n margin: 0;\n padding: 0;\n}\n.alive-page-item {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 2.25rem;\n height: 2.25rem;\n padding: 0 0.625rem;\n font-size: 0.875rem;\n font-weight: 500;\n border-radius: 0.5rem;\n border: 1px solid transparent;\n color: rgba(0,0,0,0.55);\n cursor: pointer;\n background: transparent;\n text-decoration: none;\n user-select: none;\n transition:\n background var(--alive-duration-fast) var(--alive-ease-standard),\n border-color var(--alive-duration-fast) var(--alive-ease-standard),\n color var(--alive-duration-fast) var(--alive-ease-standard);\n}\n.alive-page-item:hover { background: rgba(0,0,0,0.05); color: rgba(0,0,0,0.85); }\n.alive-page-item.is-active {\n background: rgba(0,0,0,0.08);\n border-color: rgba(0,0,0,0.14);\n color: rgba(0,0,0,0.9);\n font-weight: 600;\n cursor: default;\n}\n.alive-page-item:disabled,\n.alive-page-item.is-disabled {\n opacity: 0.35;\n cursor: not-allowed;\n pointer-events: none;\n}\n.alive-page-gap {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 2.25rem;\n height: 2.25rem;\n font-size: 0.875rem;\n color: rgba(0,0,0,0.3);\n user-select: none;\n}\n`\n}\n","// Escape special characters in a class name for use as a CSS selector\nexport function escapeSelector(cls: string): string {\n let result = cls\n .replace(/\\./g, '\\\\.')\n .replace(/:/g, '\\\\:')\n .replace(/\\[/g, '\\\\[')\n .replace(/\\]/g, '\\\\]')\n .replace(/\\//g, '\\\\/')\n .replace(/#/g, '\\\\#')\n .replace(/%/g, '\\\\%')\n // CSS identifiers cannot start with a plain hyphen followed by a non-letter,\n // so escape a leading hyphen (used by negative utilities like -m-4, -translate-x-full)\n if (result.startsWith('-')) {\n result = '\\\\' + result\n }\n return result\n}\n\n// Extract the arbitrary value from a class token like `w-[100px]` → `100px`\nexport function parseArbitrary(cls: string, prefix: string): string | null {\n const re = new RegExp(`^${prefix}-\\\\[(.+)\\\\]$`)\n const m = cls.match(re)\n return m ? m[1] : null\n}\n\n// Build a CSS rule block\nexport function rule(selector: string, declarations: Record<string, string>): string {\n const decls = Object.entries(declarations)\n .map(([prop, val]) => ` ${prop}: ${val};`)\n .join('\\n')\n return `.${selector} {\\n${decls}\\n}`\n}\n\n// Resolve a color value from the theme colors map\n// e.g. resolveColor(colors, 'blue', '500') → '#3b82f6'\nexport function resolveColor(\n colors: Record<string, string | Record<string, string>>,\n name: string,\n shade?: string,\n): string | null {\n if (!Object.prototype.hasOwnProperty.call(colors, name)) return null\n const entry = colors[name]\n if (typeof entry === 'string') return entry\n if (!shade) return null\n if (!Object.prototype.hasOwnProperty.call(entry, shade)) return null\n return entry[shade] ?? null\n}\n\n// Parse a class name into variant prefixes and the base utility\n// e.g. 'hover:md:bg-blue-500' → { variants: ['hover', 'md'], base: 'bg-blue-500' }\n// Bracket-aware: colons inside [...] (e.g. bg-[url(https://...)]) are not treated as separators\nexport function parseVariants(cls: string): { variants: string[]; base: string } {\n const variants: string[] = []\n let depth = 0\n let current = ''\n for (const ch of cls) {\n if (ch === '[') depth++\n else if (ch === ']') depth--\n else if (ch === ':' && depth === 0) {\n variants.push(current)\n current = ''\n continue\n }\n current += ch\n }\n return { variants, base: current }\n}\n\n// Wrap a CSS rule with state/responsive/dark variants\nexport function wrapVariants(\n cssRule: string,\n variants: string[],\n originalClass: string,\n screens: Record<string, string>,\n darkMode: 'media' | 'class',\n): string {\n let selector = `.${escapeSelector(originalClass)}`\n let mediaQueries: string[] = []\n\n for (const variant of variants) {\n switch (variant) {\n case 'hover':\n selector += ':hover'\n break\n case 'focus':\n selector += ':focus'\n break\n case 'focus-visible':\n selector += ':focus-visible'\n break\n case 'active':\n selector += ':active'\n break\n case 'disabled':\n selector += ':disabled'\n break\n case 'visited':\n selector += ':visited'\n break\n case 'first':\n selector += ':first-child'\n break\n case 'last':\n selector += ':last-child'\n break\n case 'odd':\n selector += ':nth-child(odd)'\n break\n case 'even':\n selector += ':nth-child(even)'\n break\n case 'group-hover':\n selector = `.group:hover ${selector}`\n break\n case 'dark':\n if (darkMode === 'class') {\n selector = `.dark ${selector}`\n } else {\n mediaQueries.push('@media (prefers-color-scheme: dark)')\n }\n break\n default:\n if (screens[variant]) {\n mediaQueries.push(`@media (min-width: ${screens[variant]})`)\n }\n }\n }\n\n // Extract declarations from the base rule and rebuild with correct selector\n const declMatch = cssRule.match(/\\{([\\s\\S]*)\\}/)\n if (!declMatch) return cssRule\n\n let result = `${selector} {\\n${declMatch[1].trim()}\\n}`\n\n // Wrap in media queries (outermost last)\n for (const mq of mediaQueries.reverse()) {\n result = `${mq} {\\n ${result.split('\\n').join('\\n ')}\\n}`\n }\n\n return result\n}\n","import type { ResolvedConfig } from '../types'\nimport { rule, resolveColor, escapeSelector } from './utils'\n\n// Properties that benefit from alive motion transitions\nconst TRANSITIONED = `\n transition-property: {prop};\n transition-duration: var(--alive-duration, 0ms);\n transition-timing-function: var(--alive-ease, linear);`\n\nfunction transitioned(prop: string): string {\n return TRANSITIONED.replace('{prop}', prop)\n}\n\nexport function generateColors(classes: Set<string>, config: ResolvedConfig): string[] {\n const { colors } = config.theme\n const rules: string[] = []\n\n for (const cls of classes) {\n const generated = matchColor(cls, colors)\n if (generated) rules.push(generated)\n }\n\n return rules\n}\n\nfunction matchColor(\n cls: string,\n colors: ResolvedConfig['theme']['colors'],\n): string | null {\n // bg-{color} | bg-{color}-{shade}\n const bgMatch = cls.match(/^bg-([a-z]+)(?:-(\\d+))?$/)\n if (bgMatch) {\n const value = resolveColor(colors, bgMatch[1], bgMatch[2])\n if (value) {\n return `.${cls} {\\n background-color: ${value};${transitioned('background-color')}\\n}`\n }\n }\n\n // text-{color} | text-{color}-{shade}\n const textColorMatch = cls.match(/^text-([a-z]+)(?:-(\\d+))?$/)\n if (textColorMatch) {\n const value = resolveColor(colors, textColorMatch[1], textColorMatch[2])\n if (value) {\n return `.${cls} {\\n color: ${value};${transitioned('color')}\\n}`\n }\n }\n\n // border-{color} | border-{color}-{shade}\n const borderColorMatch = cls.match(/^border-([a-z]+)(?:-(\\d+))?$/)\n if (borderColorMatch) {\n const value = resolveColor(colors, borderColorMatch[1], borderColorMatch[2])\n if (value) {\n return `.${cls} {\\n border-color: ${value};${transitioned('border-color')}\\n}`\n }\n }\n\n // ring-{color} | ring-{color}-{shade}\n const ringColorMatch = cls.match(/^ring-([a-z]+)(?:-(\\d+))?$/)\n if (ringColorMatch) {\n const value = resolveColor(colors, ringColorMatch[1], ringColorMatch[2])\n if (value) {\n return `.${cls} {\\n --alive-ring-color: ${value};\\n}`\n }\n }\n\n // outline-{color} | outline-{color}-{shade}\n const outlineColorMatch = cls.match(/^outline-([a-z]+)(?:-(\\d+))?$/)\n if (outlineColorMatch) {\n const value = resolveColor(colors, outlineColorMatch[1], outlineColorMatch[2])\n if (value) {\n return `.${cls} {\\n outline-color: ${value};\\n}`\n }\n }\n\n // fill-{color} | fill-{color}-{shade}\n const fillMatch = cls.match(/^fill-([a-z]+)(?:-(\\d+))?$/)\n if (fillMatch) {\n const value = resolveColor(colors, fillMatch[1], fillMatch[2])\n if (value) {\n return `.${cls} {\\n fill: ${value};\\n}`\n }\n }\n\n // stroke-{color} | stroke-{color}-{shade}\n const strokeMatch = cls.match(/^stroke-([a-z]+)(?:-(\\d+))?$/)\n if (strokeMatch) {\n const value = resolveColor(colors, strokeMatch[1], strokeMatch[2])\n if (value) {\n return `.${cls} {\\n stroke: ${value};\\n}`\n }\n }\n\n // decoration-{color} | decoration-{color}-{shade}\n const decorationMatch = cls.match(/^decoration-([a-z]+)(?:-(\\d+))?$/)\n if (decorationMatch) {\n const value = resolveColor(colors, decorationMatch[1], decorationMatch[2])\n if (value) {\n return `.${cls} {\\n text-decoration-color: ${value};\\n}`\n }\n }\n\n // caret-{color} | caret-{color}-{shade}\n const caretMatch = cls.match(/^caret-([a-z]+)(?:-(\\d+))?$/)\n if (caretMatch) {\n const value = resolveColor(colors, caretMatch[1], caretMatch[2])\n if (value) {\n return `.${cls} {\\n caret-color: ${value};\\n}`\n }\n }\n\n // accent-{color} | accent-{color}-{shade}\n const accentMatch = cls.match(/^accent-([a-z]+)(?:-(\\d+))?$/)\n if (accentMatch) {\n const value = resolveColor(colors, accentMatch[1], accentMatch[2])\n if (value) {\n return `.${cls} {\\n accent-color: ${value};\\n}`\n }\n }\n\n // shadow-{color} | shadow-{color}-{shade}\n const shadowColorMatch = cls.match(/^shadow-([a-z]+)-(\\d+)$/)\n if (shadowColorMatch) {\n const value = resolveColor(colors, shadowColorMatch[1], shadowColorMatch[2])\n if (value) {\n return `.${cls} {\\n --alive-shadow-color: ${value};\\n}`\n }\n }\n\n // ── Arbitrary color values ────────────────────────────────────────\n\n const arbBgMatch = cls.match(/^bg-\\[(.+)\\]$/)\n if (arbBgMatch) {\n const val = arbBgMatch[1]\n const escaped = escapeSelector(cls)\n // Support both colors and url() / gradient values\n if (val.startsWith('url(') || val.startsWith('linear-gradient') || val.startsWith('radial-gradient')) {\n return `.${escaped} {\\n background-image: ${val};${transitioned('background-image')}\\n}`\n }\n return `.${escaped} {\\n background-color: ${val};${transitioned('background-color')}\\n}`\n }\n\n const arbTextMatch = cls.match(/^text-\\[(.+)\\]$/)\n if (arbTextMatch) {\n return `.${escapeSelector(cls)} {\\n color: ${arbTextMatch[1]};${transitioned('color')}\\n}`\n }\n\n const arbBorderColorMatch = cls.match(/^border-\\[#[0-9a-fA-F]|^border-\\[rgb|^border-\\[hsl|^border-\\[oklch/)\n if (arbBorderColorMatch) {\n const m = cls.match(/^border-\\[(.+)\\]$/)\n if (m) {\n return `.${escapeSelector(cls)} {\\n border-color: ${m[1]};${transitioned('border-color')}\\n}`\n }\n }\n\n const arbFillMatch = cls.match(/^fill-\\[(.+)\\]$/)\n if (arbFillMatch) {\n return `.${escapeSelector(cls)} {\\n fill: ${arbFillMatch[1]};\\n}`\n }\n\n const arbStrokeMatch = cls.match(/^stroke-\\[(.+)\\]$/)\n if (arbStrokeMatch) {\n return `.${escapeSelector(cls)} {\\n stroke: ${arbStrokeMatch[1]};\\n}`\n }\n\n return null\n}\n\nexport { matchColor as matchColorClass }\n","import type { ResolvedConfig } from '../types'\nimport { escapeSelector } from './utils'\n\nexport function generateSpacing(classes: Set<string>, config: ResolvedConfig): string[] {\n const { spacing } = config.theme\n const rules: string[] = []\n\n for (const cls of classes) {\n const generated = matchSpacing(cls, spacing)\n if (generated) rules.push(generated)\n }\n\n return rules\n}\n\nfunction has(obj: Record<string, string>, key: string): boolean {\n return typeof obj[key] === 'string'\n}\n\nfunction matchSpacing(cls: string, spacing: Record<string, string>): string | null {\n // Padding\n const pMatch = cls.match(/^p-(.+)$/)\n if (pMatch && has(spacing, pMatch[1])) {\n return `.${cls} { padding: ${spacing[pMatch[1]]}; }`\n }\n\n const pxMatch = cls.match(/^px-(.+)$/)\n if (pxMatch && has(spacing, pxMatch[1])) {\n return `.${cls} { padding-left: ${spacing[pxMatch[1]]}; padding-right: ${spacing[pxMatch[1]]}; }`\n }\n\n const pyMatch = cls.match(/^py-(.+)$/)\n if (pyMatch && has(spacing, pyMatch[1])) {\n return `.${cls} { padding-top: ${spacing[pyMatch[1]]}; padding-bottom: ${spacing[pyMatch[1]]}; }`\n }\n\n const ptMatch = cls.match(/^pt-(.+)$/)\n if (ptMatch && has(spacing, ptMatch[1])) {\n return `.${cls} { padding-top: ${spacing[ptMatch[1]]}; }`\n }\n\n const prMatch = cls.match(/^pr-(.+)$/)\n if (prMatch && has(spacing, prMatch[1])) {\n return `.${cls} { padding-right: ${spacing[prMatch[1]]}; }`\n }\n\n const pbMatch = cls.match(/^pb-(.+)$/)\n if (pbMatch && has(spacing, pbMatch[1])) {\n return `.${cls} { padding-bottom: ${spacing[pbMatch[1]]}; }`\n }\n\n const plMatch = cls.match(/^pl-(.+)$/)\n if (plMatch && has(spacing, plMatch[1])) {\n return `.${cls} { padding-left: ${spacing[plMatch[1]]}; }`\n }\n\n // Margin\n const mMatch = cls.match(/^m-(.+)$/)\n if (mMatch) {\n if (mMatch[1] === 'auto') return `.${cls} { margin: auto; }`\n if (has(spacing, mMatch[1])) return `.${cls} { margin: ${spacing[mMatch[1]]}; }`\n }\n\n const mxMatch = cls.match(/^mx-(.+)$/)\n if (mxMatch) {\n if (mxMatch[1] === 'auto') return `.${cls} { margin-left: auto; margin-right: auto; }`\n if (has(spacing, mxMatch[1])) return `.${cls} { margin-left: ${spacing[mxMatch[1]]}; margin-right: ${spacing[mxMatch[1]]}; }`\n }\n\n const myMatch = cls.match(/^my-(.+)$/)\n if (myMatch) {\n if (myMatch[1] === 'auto') return `.${cls} { margin-top: auto; margin-bottom: auto; }`\n if (has(spacing, myMatch[1])) return `.${cls} { margin-top: ${spacing[myMatch[1]]}; margin-bottom: ${spacing[myMatch[1]]}; }`\n }\n\n const mtMatch = cls.match(/^mt-(.+)$/)\n if (mtMatch) {\n if (mtMatch[1] === 'auto') return `.${cls} { margin-top: auto; }`\n if (has(spacing, mtMatch[1])) return `.${cls} { margin-top: ${spacing[mtMatch[1]]}; }`\n }\n\n const mrMatch = cls.match(/^mr-(.+)$/)\n if (mrMatch) {\n if (mrMatch[1] === 'auto') return `.${cls} { margin-right: auto; }`\n if (has(spacing, mrMatch[1])) return `.${cls} { margin-right: ${spacing[mrMatch[1]]}; }`\n }\n\n const mbMatch = cls.match(/^mb-(.+)$/)\n if (mbMatch) {\n if (mbMatch[1] === 'auto') return `.${cls} { margin-bottom: auto; }`\n if (has(spacing, mbMatch[1])) return `.${cls} { margin-bottom: ${spacing[mbMatch[1]]}; }`\n }\n\n const mlMatch = cls.match(/^ml-(.+)$/)\n if (mlMatch) {\n if (mlMatch[1] === 'auto') return `.${cls} { margin-left: auto; }`\n if (has(spacing, mlMatch[1])) return `.${cls} { margin-left: ${spacing[mlMatch[1]]}; }`\n }\n\n // Gap\n const gapMatch = cls.match(/^gap-(.+)$/)\n if (gapMatch && has(spacing, gapMatch[1])) {\n return `.${cls} { gap: ${spacing[gapMatch[1]]}; }`\n }\n\n const gapXMatch = cls.match(/^gap-x-(.+)$/)\n if (gapXMatch && has(spacing, gapXMatch[1])) {\n return `.${cls} { column-gap: ${spacing[gapXMatch[1]]}; }`\n }\n\n const gapYMatch = cls.match(/^gap-y-(.+)$/)\n if (gapYMatch && has(spacing, gapYMatch[1])) {\n return `.${cls} { row-gap: ${spacing[gapYMatch[1]]}; }`\n }\n\n // Space between (using margin on children)\n const spaceXMatch = cls.match(/^space-x-(.+)$/)\n if (spaceXMatch && has(spacing, spaceXMatch[1])) {\n return `.${cls} > * + * { margin-left: ${spacing[spaceXMatch[1]]}; }`\n }\n\n const spaceYMatch = cls.match(/^space-y-(.+)$/)\n if (spaceYMatch && has(spacing, spaceYMatch[1])) {\n return `.${cls} > * + * { margin-top: ${spacing[spaceYMatch[1]]}; }`\n }\n\n // Inset (position offsets using spacing)\n const insetMatch = cls.match(/^inset-(.+)$/)\n if (insetMatch) {\n if (insetMatch[1] === 'auto') return `.${cls} { inset: auto; }`\n if (insetMatch[1] === '0') return `.${cls} { inset: 0px; }`\n if (has(spacing, insetMatch[1])) return `.${cls} { inset: ${spacing[insetMatch[1]]}; }`\n }\n\n const insetXMatch = cls.match(/^inset-x-(.+)$/)\n if (insetXMatch) {\n const val = insetXMatch[1] === 'auto' ? 'auto' : insetXMatch[1] === '0' ? '0px' : (has(spacing, insetXMatch[1]) ? spacing[insetXMatch[1]] : undefined)\n if (val) return `.${cls} { left: ${val}; right: ${val}; }`\n }\n\n const insetYMatch = cls.match(/^inset-y-(.+)$/)\n if (insetYMatch) {\n const val = insetYMatch[1] === 'auto' ? 'auto' : insetYMatch[1] === '0' ? '0px' : (has(spacing, insetYMatch[1]) ? spacing[insetYMatch[1]] : undefined)\n if (val) return `.${cls} { top: ${val}; bottom: ${val}; }`\n }\n\n const topMatch = cls.match(/^top-(.+)$/)\n if (topMatch) {\n if (topMatch[1] === 'auto') return `.${cls} { top: auto; }`\n if (topMatch[1] === '0') return `.${cls} { top: 0px; }`\n if (has(spacing, topMatch[1])) return `.${cls} { top: ${spacing[topMatch[1]]}; }`\n }\n\n const rightMatch = cls.match(/^right-(.+)$/)\n if (rightMatch) {\n if (rightMatch[1] === 'auto') return `.${cls} { right: auto; }`\n if (rightMatch[1] === '0') return `.${cls} { right: 0px; }`\n if (has(spacing, rightMatch[1])) return `.${cls} { right: ${spacing[rightMatch[1]]}; }`\n }\n\n const bottomMatch = cls.match(/^bottom-(.+)$/)\n if (bottomMatch) {\n if (bottomMatch[1] === 'auto') return `.${cls} { bottom: auto; }`\n if (bottomMatch[1] === '0') return `.${cls} { bottom: 0px; }`\n if (has(spacing, bottomMatch[1])) return `.${cls} { bottom: ${spacing[bottomMatch[1]]}; }`\n }\n\n const leftMatch = cls.match(/^left-(.+)$/)\n if (leftMatch) {\n if (leftMatch[1] === 'auto') return `.${cls} { left: auto; }`\n if (leftMatch[1] === '0') return `.${cls} { left: 0px; }`\n if (has(spacing, leftMatch[1])) return `.${cls} { left: ${spacing[leftMatch[1]]}; }`\n }\n\n // ── Negative margin utilities ─────────────────────────────────────\n\n const negMMatch = cls.match(/^-m-(.+)$/)\n if (negMMatch && has(spacing, negMMatch[1])) {\n return `.\\\\-m-${negMMatch[1]} { margin: -${spacing[negMMatch[1]]}; }`\n }\n\n const negMxMatch = cls.match(/^-mx-(.+)$/)\n if (negMxMatch && has(spacing, negMxMatch[1])) {\n return `.\\\\-mx-${negMxMatch[1]} { margin-left: -${spacing[negMxMatch[1]]}; margin-right: -${spacing[negMxMatch[1]]}; }`\n }\n\n const negMyMatch = cls.match(/^-my-(.+)$/)\n if (negMyMatch && has(spacing, negMyMatch[1])) {\n return `.\\\\-my-${negMyMatch[1]} { margin-top: -${spacing[negMyMatch[1]]}; margin-bottom: -${spacing[negMyMatch[1]]}; }`\n }\n\n const negMtMatch = cls.match(/^-mt-(.+)$/)\n if (negMtMatch && has(spacing, negMtMatch[1])) {\n return `.\\\\-mt-${negMtMatch[1]} { margin-top: -${spacing[negMtMatch[1]]}; }`\n }\n\n const negMrMatch = cls.match(/^-mr-(.+)$/)\n if (negMrMatch && has(spacing, negMrMatch[1])) {\n return `.\\\\-mr-${negMrMatch[1]} { margin-right: -${spacing[negMrMatch[1]]}; }`\n }\n\n const negMbMatch = cls.match(/^-mb-(.+)$/)\n if (negMbMatch && has(spacing, negMbMatch[1])) {\n return `.\\\\-mb-${negMbMatch[1]} { margin-bottom: -${spacing[negMbMatch[1]]}; }`\n }\n\n const negMlMatch = cls.match(/^-ml-(.+)$/)\n if (negMlMatch && has(spacing, negMlMatch[1])) {\n return `.\\\\-ml-${negMlMatch[1]} { margin-left: -${spacing[negMlMatch[1]]}; }`\n }\n\n // ── Negative inset utilities ──────────────────────────────────────\n\n const negInsetMatch = cls.match(/^-inset-(.+)$/)\n if (negInsetMatch && has(spacing, negInsetMatch[1])) {\n return `.\\\\-inset-${negInsetMatch[1]} { inset: -${spacing[negInsetMatch[1]]}; }`\n }\n\n const negInsetXMatch = cls.match(/^-inset-x-(.+)$/)\n if (negInsetXMatch && has(spacing, negInsetXMatch[1])) {\n return `.\\\\-inset-x-${negInsetXMatch[1]} { left: -${spacing[negInsetXMatch[1]]}; right: -${spacing[negInsetXMatch[1]]}; }`\n }\n\n const negInsetYMatch = cls.match(/^-inset-y-(.+)$/)\n if (negInsetYMatch && has(spacing, negInsetYMatch[1])) {\n return `.\\\\-inset-y-${negInsetYMatch[1]} { top: -${spacing[negInsetYMatch[1]]}; bottom: -${spacing[negInsetYMatch[1]]}; }`\n }\n\n // ── Negative position utilities ───────────────────────────────────\n\n const negTopMatch = cls.match(/^-top-(.+)$/)\n if (negTopMatch && has(spacing, negTopMatch[1])) {\n return `.\\\\-top-${negTopMatch[1]} { top: -${spacing[negTopMatch[1]]}; }`\n }\n\n const negRightMatch = cls.match(/^-right-(.+)$/)\n if (negRightMatch && has(spacing, negRightMatch[1])) {\n return `.\\\\-right-${negRightMatch[1]} { right: -${spacing[negRightMatch[1]]}; }`\n }\n\n const negBottomMatch = cls.match(/^-bottom-(.+)$/)\n if (negBottomMatch && has(spacing, negBottomMatch[1])) {\n return `.\\\\-bottom-${negBottomMatch[1]} { bottom: -${spacing[negBottomMatch[1]]}; }`\n }\n\n const negLeftMatch = cls.match(/^-left-(.+)$/)\n if (negLeftMatch && has(spacing, negLeftMatch[1])) {\n return `.\\\\-left-${negLeftMatch[1]} { left: -${spacing[negLeftMatch[1]]}; }`\n }\n\n // ── Arbitrary value utilities ─────────────────────────────────────\n\n const arbSpacingMatch = cls.match(/^(w|h|p|m|pt|pr|pb|pl|px|py|mt|mr|mb|ml|mx|my|gap|gap-x|gap-y|top|right|bottom|left|inset|inset-x|inset-y)-\\[(.+)\\]$/)\n if (arbSpacingMatch) {\n const [, prop, val] = arbSpacingMatch\n const escaped = escapeSelector(cls)\n switch (prop) {\n case 'w': return `.${escaped} { width: ${val}; }`\n case 'h': return `.${escaped} { height: ${val}; }`\n case 'p': return `.${escaped} { padding: ${val}; }`\n case 'm': return `.${escaped} { margin: ${val}; }`\n case 'pt': return `.${escaped} { padding-top: ${val}; }`\n case 'pr': return `.${escaped} { padding-right: ${val}; }`\n case 'pb': return `.${escaped} { padding-bottom: ${val}; }`\n case 'pl': return `.${escaped} { padding-left: ${val}; }`\n case 'px': return `.${escaped} { padding-left: ${val}; padding-right: ${val}; }`\n case 'py': return `.${escaped} { padding-top: ${val}; padding-bottom: ${val}; }`\n case 'mt': return `.${escaped} { margin-top: ${val}; }`\n case 'mr': return `.${escaped} { margin-right: ${val}; }`\n case 'mb': return `.${escaped} { margin-bottom: ${val}; }`\n case 'ml': return `.${escaped} { margin-left: ${val}; }`\n case 'mx': return `.${escaped} { margin-left: ${val}; margin-right: ${val}; }`\n case 'my': return `.${escaped} { margin-top: ${val}; margin-bottom: ${val}; }`\n case 'gap': return `.${escaped} { gap: ${val}; }`\n case 'gap-x': return `.${escaped} { column-gap: ${val}; }`\n case 'gap-y': return `.${escaped} { row-gap: ${val}; }`\n case 'top': return `.${escaped} { top: ${val}; }`\n case 'right': return `.${escaped} { right: ${val}; }`\n case 'bottom': return `.${escaped} { bottom: ${val}; }`\n case 'left': return `.${escaped} { left: ${val}; }`\n case 'inset': return `.${escaped} { inset: ${val}; }`\n case 'inset-x': return `.${escaped} { left: ${val}; right: ${val}; }`\n case 'inset-y': return `.${escaped} { top: ${val}; bottom: ${val}; }`\n }\n }\n\n return null\n}\n","import type { ResolvedConfig } from '../types'\n\nfunction hasOwn(obj: Record<string, unknown>, key: string): boolean {\n return Object.prototype.hasOwnProperty.call(obj, key)\n}\n\nexport function generateTypography(classes: Set<string>, config: ResolvedConfig): string[] {\n const { fontSize, fontWeight, lineHeight } = config.theme\n const rules: string[] = []\n\n for (const cls of classes) {\n const generated = matchTypography(cls, fontSize, fontWeight, lineHeight)\n if (generated) rules.push(generated)\n }\n\n return rules\n}\n\nfunction matchTypography(\n cls: string,\n fontSize: ResolvedConfig['theme']['fontSize'],\n fontWeight: ResolvedConfig['theme']['fontWeight'],\n lineHeight: ResolvedConfig['theme']['lineHeight'],\n): string | null {\n // text-{size}\n const textSizeMatch = cls.match(/^text-(xs|sm|base|lg|xl|2xl|3xl|4xl|5xl|6xl|7xl|8xl|9xl)$/)\n if (textSizeMatch && hasOwn(fontSize as Record<string, unknown>, textSizeMatch[1])) {\n const [size, lh] = fontSize[textSizeMatch[1]]\n return `.${cls} {\\n font-size: ${size};\\n line-height: ${lh};\\n}`\n }\n\n // font-{weight}\n const fontWeightMatch = cls.match(/^font-(thin|extralight|light|normal|medium|semibold|bold|extrabold|black)$/)\n if (fontWeightMatch && hasOwn(fontWeight, fontWeightMatch[1])) {\n return `.${cls} { font-weight: ${fontWeight[fontWeightMatch[1]]}; }`\n }\n\n // font-{family}\n if (cls === 'font-sans') return `.${cls} { font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif; }`\n if (cls === 'font-serif') return `.${cls} { font-family: ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif; }`\n if (cls === 'font-mono') return `.${cls} { font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace; }`\n\n // leading-{size}\n const leadingMatch = cls.match(/^leading-(.+)$/)\n if (leadingMatch && hasOwn(lineHeight, leadingMatch[1])) {\n return `.${cls} { line-height: ${lineHeight[leadingMatch[1]]}; }`\n }\n\n // tracking (letter-spacing)\n const trackingMap: Record<string, string> = {\n tighter: '-0.05em',\n tight: '-0.025em',\n normal: '0em',\n wide: '0.025em',\n wider: '0.05em',\n widest: '0.1em',\n }\n const trackingMatch = cls.match(/^tracking-(.+)$/)\n if (trackingMatch && Object.prototype.hasOwnProperty.call(trackingMap, trackingMatch[1])) {\n return `.${cls} { letter-spacing: ${trackingMap[trackingMatch[1]]}; }`\n }\n\n // text alignment\n if (cls === 'text-left') return `.${cls} { text-align: left; }`\n if (cls === 'text-center') return `.${cls} { text-align: center; }`\n if (cls === 'text-right') return `.${cls} { text-align: right; }`\n if (cls === 'text-justify') return `.${cls} { text-align: justify; }`\n if (cls === 'text-start') return `.${cls} { text-align: start; }`\n if (cls === 'text-end') return `.${cls} { text-align: end; }`\n\n // text transform\n if (cls === 'uppercase') return `.${cls} { text-transform: uppercase; }`\n if (cls === 'lowercase') return `.${cls} { text-transform: lowercase; }`\n if (cls === 'capitalize') return `.${cls} { text-transform: capitalize; }`\n if (cls === 'normal-case') return `.${cls} { text-transform: none; }`\n\n // text decoration\n if (cls === 'underline') return `.${cls} { text-decoration-line: underline; }`\n if (cls === 'overline') return `.${cls} { text-decoration-line: overline; }`\n if (cls === 'line-through') return `.${cls} { text-decoration-line: line-through; }`\n if (cls === 'no-underline') return `.${cls} { text-decoration-line: none; }`\n\n // text overflow\n if (cls === 'truncate') return `.${cls} { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }`\n if (cls === 'text-ellipsis') return `.${cls} { text-overflow: ellipsis; }`\n if (cls === 'text-clip') return `.${cls} { text-overflow: clip; }`\n\n // white space\n if (cls === 'whitespace-normal') return `.${cls} { white-space: normal; }`\n if (cls === 'whitespace-nowrap') return `.${cls} { white-space: nowrap; }`\n if (cls === 'whitespace-pre') return `.${cls} { white-space: pre; }`\n if (cls === 'whitespace-pre-line') return `.${cls} { white-space: pre-line; }`\n if (cls === 'whitespace-pre-wrap') return `.${cls} { white-space: pre-wrap; }`\n if (cls === 'whitespace-break-spaces') return `.${cls} { white-space: break-spaces; }`\n\n // font style\n if (cls === 'italic') return `.${cls} { font-style: italic; }`\n if (cls === 'not-italic') return `.${cls} { font-style: normal; }`\n\n // font variant numeric\n if (cls === 'tabular-nums') return `.${cls} { font-variant-numeric: tabular-nums; }`\n if (cls === 'oldstyle-nums') return `.${cls} { font-variant-numeric: oldstyle-nums; }`\n\n // list style\n if (cls === 'list-none') return `.${cls} { list-style-type: none; }`\n if (cls === 'list-disc') return `.${cls} { list-style-type: disc; }`\n if (cls === 'list-decimal') return `.${cls} { list-style-type: decimal; }`\n\n // word break\n if (cls === 'break-normal') return `.${cls} { overflow-wrap: normal; word-break: normal; }`\n if (cls === 'break-words') return `.${cls} { overflow-wrap: break-word; }`\n if (cls === 'break-all') return `.${cls} { word-break: break-all; }`\n if (cls === 'break-keep') return `.${cls} { word-break: keep-all; }`\n\n return null\n}\n","import type { ResolvedConfig } from '../types'\n\nexport function generateLayout(classes: Set<string>, _config: ResolvedConfig): string[] {\n const rules: string[] = []\n for (const cls of classes) {\n const generated = matchLayout(cls)\n if (generated) rules.push(generated)\n }\n return rules\n}\n\nfunction matchLayout(cls: string): string | null {\n // Display\n const displayMap: Record<string, string> = {\n block: 'display: block;',\n inline: 'display: inline;',\n 'inline-block': 'display: inline-block;',\n flex: 'display: flex;',\n 'inline-flex': 'display: inline-flex;',\n grid: 'display: grid;',\n 'inline-grid': 'display: inline-grid;',\n table: 'display: table;',\n hidden: 'display: none;',\n contents: 'display: contents;',\n }\n if (displayMap[cls]) return `.${cls} { ${displayMap[cls]} }`\n\n // Position\n const posMap: Record<string, string> = {\n static: 'position: static;',\n relative: 'position: relative;',\n absolute: 'position: absolute;',\n fixed: 'position: fixed;',\n sticky: 'position: sticky;',\n }\n if (posMap[cls]) return `.${cls} { ${posMap[cls]} }`\n\n // Flex direction\n if (cls === 'flex-row') return `.${cls} { flex-direction: row; }`\n if (cls === 'flex-row-reverse') return `.${cls} { flex-direction: row-reverse; }`\n if (cls === 'flex-col') return `.${cls} { flex-direction: column; }`\n if (cls === 'flex-col-reverse') return `.${cls} { flex-direction: column-reverse; }`\n\n // Flex wrap\n if (cls === 'flex-wrap') return `.${cls} { flex-wrap: wrap; }`\n if (cls === 'flex-nowrap') return `.${cls} { flex-wrap: nowrap; }`\n if (cls === 'flex-wrap-reverse') return `.${cls} { flex-wrap: wrap-reverse; }`\n\n // Flex grow/shrink\n if (cls === 'flex-1') return `.${cls} { flex: 1 1 0%; }`\n if (cls === 'flex-auto') return `.${cls} { flex: 1 1 auto; }`\n if (cls === 'flex-initial') return `.${cls} { flex: 0 1 auto; }`\n if (cls === 'flex-none') return `.${cls} { flex: none; }`\n if (cls === 'flex-grow') return `.${cls} { flex-grow: 1; }`\n if (cls === 'flex-grow-0') return `.${cls} { flex-grow: 0; }`\n if (cls === 'flex-shrink') return `.${cls} { flex-shrink: 1; }`\n if (cls === 'flex-shrink-0') return `.${cls} { flex-shrink: 0; }`\n\n // Align items\n if (cls === 'items-start') return `.${cls} { align-items: flex-start; }`\n if (cls === 'items-end') return `.${cls} { align-items: flex-end; }`\n if (cls === 'items-center') return `.${cls} { align-items: center; }`\n if (cls === 'items-baseline') return `.${cls} { align-items: baseline; }`\n if (cls === 'items-stretch') return `.${cls} { align-items: stretch; }`\n\n // Align self\n if (cls === 'self-auto') return `.${cls} { align-self: auto; }`\n if (cls === 'self-start') return `.${cls} { align-self: flex-start; }`\n if (cls === 'self-end') return `.${cls} { align-self: flex-end; }`\n if (cls === 'self-center') return `.${cls} { align-self: center; }`\n if (cls === 'self-stretch') return `.${cls} { align-self: stretch; }`\n if (cls === 'self-baseline') return `.${cls} { align-self: baseline; }`\n\n // Justify content\n if (cls === 'justify-start') return `.${cls} { justify-content: flex-start; }`\n if (cls === 'justify-end') return `.${cls} { justify-content: flex-end; }`\n if (cls === 'justify-center') return `.${cls} { justify-content: center; }`\n if (cls === 'justify-between') return `.${cls} { justify-content: space-between; }`\n if (cls === 'justify-around') return `.${cls} { justify-content: space-around; }`\n if (cls === 'justify-evenly') return `.${cls} { justify-content: space-evenly; }`\n if (cls === 'justify-stretch') return `.${cls} { justify-content: stretch; }`\n\n // Justify items / self\n if (cls === 'justify-items-start') return `.${cls} { justify-items: start; }`\n if (cls === 'justify-items-end') return `.${cls} { justify-items: end; }`\n if (cls === 'justify-items-center') return `.${cls} { justify-items: center; }`\n if (cls === 'justify-items-stretch') return `.${cls} { justify-items: stretch; }`\n if (cls === 'justify-self-auto') return `.${cls} { justify-self: auto; }`\n if (cls === 'justify-self-start') return `.${cls} { justify-self: start; }`\n if (cls === 'justify-self-end') return `.${cls} { justify-self: end; }`\n if (cls === 'justify-self-center') return `.${cls} { justify-self: center; }`\n if (cls === 'justify-self-stretch') return `.${cls} { justify-self: stretch; }`\n\n // Align content\n if (cls === 'content-normal') return `.${cls} { align-content: normal; }`\n if (cls === 'content-center') return `.${cls} { align-content: center; }`\n if (cls === 'content-start') return `.${cls} { align-content: flex-start; }`\n if (cls === 'content-end') return `.${cls} { align-content: flex-end; }`\n if (cls === 'content-between') return `.${cls} { align-content: space-between; }`\n if (cls === 'content-around') return `.${cls} { align-content: space-around; }`\n if (cls === 'content-evenly') return `.${cls} { align-content: space-evenly; }`\n if (cls === 'content-stretch') return `.${cls} { align-content: stretch; }`\n if (cls === 'content-baseline') return `.${cls} { align-content: baseline; }`\n\n // Grid cols\n const gridColsMatch = cls.match(/^grid-cols-(\\d+)$/)\n if (gridColsMatch) {\n const n = parseInt(gridColsMatch[1])\n return `.${cls} { grid-template-columns: repeat(${n}, minmax(0, 1fr)); }`\n }\n if (cls === 'grid-cols-none') return `.${cls} { grid-template-columns: none; }`\n\n // Grid rows\n const gridRowsMatch = cls.match(/^grid-rows-(\\d+)$/)\n if (gridRowsMatch) {\n const n = parseInt(gridRowsMatch[1])\n return `.${cls} { grid-template-rows: repeat(${n}, minmax(0, 1fr)); }`\n }\n if (cls === 'grid-rows-none') return `.${cls} { grid-template-rows: none; }`\n\n // Col span\n const colSpanMatch = cls.match(/^col-span-(\\d+)$/)\n if (colSpanMatch) return `.${cls} { grid-column: span ${colSpanMatch[1]} / span ${colSpanMatch[1]}; }`\n if (cls === 'col-span-full') return `.${cls} { grid-column: 1 / -1; }`\n if (cls === 'col-auto') return `.${cls} { grid-column: auto; }`\n\n // Row span\n const rowSpanMatch = cls.match(/^row-span-(\\d+)$/)\n if (rowSpanMatch) return `.${cls} { grid-row: span ${rowSpanMatch[1]} / span ${rowSpanMatch[1]}; }`\n if (cls === 'row-span-full') return `.${cls} { grid-row: 1 / -1; }`\n if (cls === 'row-auto') return `.${cls} { grid-row: auto; }`\n\n // Col start/end\n const colStartMatch = cls.match(/^col-start-(\\d+)$/)\n if (colStartMatch) return `.${cls} { grid-column-start: ${colStartMatch[1]}; }`\n const colEndMatch = cls.match(/^col-end-(\\d+)$/)\n if (colEndMatch) return `.${cls} { grid-column-end: ${colEndMatch[1]}; }`\n\n // Row start/end\n const rowStartMatch = cls.match(/^row-start-(\\d+)$/)\n if (rowStartMatch) return `.${cls} { grid-row-start: ${rowStartMatch[1]}; }`\n const rowEndMatch = cls.match(/^row-end-(\\d+)$/)\n if (rowEndMatch) return `.${cls} { grid-row-end: ${rowEndMatch[1]}; }`\n\n // Order\n const orderMatch = cls.match(/^order-(-?\\d+)$/)\n if (orderMatch) return `.${cls} { order: ${orderMatch[1]}; }`\n if (cls === 'order-first') return `.${cls} { order: -9999; }`\n if (cls === 'order-last') return `.${cls} { order: 9999; }`\n if (cls === 'order-none') return `.${cls} { order: 0; }`\n\n // Float\n if (cls === 'float-right') return `.${cls} { float: right; }`\n if (cls === 'float-left') return `.${cls} { float: left; }`\n if (cls === 'float-none') return `.${cls} { float: none; }`\n if (cls === 'clearfix') return `.${cls}::after { content: \"\"; display: table; clear: both; }`\n\n // Overflow\n if (cls === 'overflow-auto') return `.${cls} { overflow: auto; }`\n if (cls === 'overflow-hidden') return `.${cls} { overflow: hidden; }`\n if (cls === 'overflow-clip') return `.${cls} { overflow: clip; }`\n if (cls === 'overflow-visible') return `.${cls} { overflow: visible; }`\n if (cls === 'overflow-scroll') return `.${cls} { overflow: scroll; }`\n if (cls === 'overflow-x-auto') return `.${cls} { overflow-x: auto; }`\n if (cls === 'overflow-x-hidden') return `.${cls} { overflow-x: hidden; }`\n if (cls === 'overflow-x-scroll') return `.${cls} { overflow-x: scroll; }`\n if (cls === 'overflow-y-auto') return `.${cls} { overflow-y: auto; }`\n if (cls === 'overflow-y-hidden') return `.${cls} { overflow-y: hidden; }`\n if (cls === 'overflow-y-scroll') return `.${cls} { overflow-y: scroll; }`\n\n // Visibility\n if (cls === 'visible') return `.${cls} { visibility: visible; }`\n if (cls === 'invisible') return `.${cls} { visibility: hidden; }`\n if (cls === 'collapse') return `.${cls} { visibility: collapse; }`\n\n // Pointer events\n if (cls === 'pointer-events-none') return `.${cls} { pointer-events: none; }`\n if (cls === 'pointer-events-auto') return `.${cls} { pointer-events: auto; }`\n\n // Cursor\n const cursorMap: Record<string, string> = {\n 'cursor-auto': 'auto',\n 'cursor-default': 'default',\n 'cursor-pointer': 'pointer',\n 'cursor-wait': 'wait',\n 'cursor-text': 'text',\n 'cursor-move': 'move',\n 'cursor-not-allowed': 'not-allowed',\n 'cursor-grab': 'grab',\n 'cursor-grabbing': 'grabbing',\n 'cursor-crosshair': 'crosshair',\n 'cursor-help': 'help',\n 'cursor-none': 'none',\n 'cursor-zoom-in': 'zoom-in',\n 'cursor-zoom-out': 'zoom-out',\n }\n if (cursorMap[cls]) return `.${cls} { cursor: ${cursorMap[cls]}; }`\n\n // Select\n if (cls === 'select-none') return `.${cls} { user-select: none; }`\n if (cls === 'select-text') return `.${cls} { user-select: text; }`\n if (cls === 'select-all') return `.${cls} { user-select: all; }`\n if (cls === 'select-auto') return `.${cls} { user-select: auto; }`\n\n // Object fit\n if (cls === 'object-contain') return `.${cls} { object-fit: contain; }`\n if (cls === 'object-cover') return `.${cls} { object-fit: cover; }`\n if (cls === 'object-fill') return `.${cls} { object-fit: fill; }`\n if (cls === 'object-none') return `.${cls} { object-fit: none; }`\n if (cls === 'object-scale-down') return `.${cls} { object-fit: scale-down; }`\n\n // Aspect ratio\n if (cls === 'aspect-auto') return `.${cls} { aspect-ratio: auto; }`\n if (cls === 'aspect-square') return `.${cls} { aspect-ratio: 1 / 1; }`\n if (cls === 'aspect-video') return `.${cls} { aspect-ratio: 16 / 9; }`\n\n // Container\n if (cls === 'container') {\n return `.${cls} {\\n width: 100%;\\n margin-left: auto;\\n margin-right: auto;\\n}`\n }\n\n // Box decoration\n if (cls === 'box-border') return `.${cls} { box-sizing: border-box; }`\n if (cls === 'box-content') return `.${cls} { box-sizing: content-box; }`\n\n // Isolate\n if (cls === 'isolate') return `.${cls} { isolation: isolate; }`\n if (cls === 'isolation-auto') return `.${cls} { isolation: auto; }`\n\n // Mix blend mode\n const mixBlendMap: Record<string, string> = {\n 'mix-blend-normal': 'normal',\n 'mix-blend-multiply': 'multiply',\n 'mix-blend-screen': 'screen',\n 'mix-blend-overlay': 'overlay',\n 'mix-blend-darken': 'darken',\n 'mix-blend-lighten': 'lighten',\n 'mix-blend-color-dodge': 'color-dodge',\n 'mix-blend-color-burn': 'color-burn',\n 'mix-blend-hard-light': 'hard-light',\n 'mix-blend-soft-light': 'soft-light',\n 'mix-blend-difference': 'difference',\n 'mix-blend-exclusion': 'exclusion',\n }\n if (mixBlendMap[cls]) return `.${cls} { mix-blend-mode: ${mixBlendMap[cls]}; }`\n\n // ── Background size ───────────────────────────────────────────────\n if (cls === 'bg-auto') return `.${cls} { background-size: auto; }`\n if (cls === 'bg-cover') return `.${cls} { background-size: cover; }`\n if (cls === 'bg-contain') return `.${cls} { background-size: contain; }`\n\n // ── Background position ───────────────────────────────────────────\n if (cls === 'bg-center') return `.${cls} { background-position: center; }`\n if (cls === 'bg-top') return `.${cls} { background-position: top; }`\n if (cls === 'bg-bottom') return `.${cls} { background-position: bottom; }`\n if (cls === 'bg-left') return `.${cls} { background-position: left; }`\n if (cls === 'bg-right') return `.${cls} { background-position: right; }`\n if (cls === 'bg-left-top') return `.${cls} { background-position: left top; }`\n if (cls === 'bg-left-bottom') return `.${cls} { background-position: left bottom; }`\n if (cls === 'bg-right-top') return `.${cls} { background-position: right top; }`\n if (cls === 'bg-right-bottom') return `.${cls} { background-position: right bottom; }`\n\n // ── Background repeat ─────────────────────────────────────────────\n if (cls === 'bg-repeat') return `.${cls} { background-repeat: repeat; }`\n if (cls === 'bg-no-repeat') return `.${cls} { background-repeat: no-repeat; }`\n if (cls === 'bg-repeat-x') return `.${cls} { background-repeat: repeat-x; }`\n if (cls === 'bg-repeat-y') return `.${cls} { background-repeat: repeat-y; }`\n if (cls === 'bg-repeat-round') return `.${cls} { background-repeat: round; }`\n if (cls === 'bg-repeat-space') return `.${cls} { background-repeat: space; }`\n\n // ── Background attachment ─────────────────────────────────────────\n if (cls === 'bg-fixed') return `.${cls} { background-attachment: fixed; }`\n if (cls === 'bg-local') return `.${cls} { background-attachment: local; }`\n if (cls === 'bg-scroll') return `.${cls} { background-attachment: scroll; }`\n\n // ── Background origin ─────────────────────────────────────────────\n if (cls === 'bg-origin-border') return `.${cls} { background-origin: border-box; }`\n if (cls === 'bg-origin-padding') return `.${cls} { background-origin: padding-box; }`\n if (cls === 'bg-origin-content') return `.${cls} { background-origin: content-box; }`\n\n // ── Background clip ───────────────────────────────────────────────\n if (cls === 'bg-clip-border') return `.${cls} { background-clip: border-box; }`\n if (cls === 'bg-clip-padding') return `.${cls} { background-clip: padding-box; }`\n if (cls === 'bg-clip-content') return `.${cls} { background-clip: content-box; }`\n if (cls === 'bg-clip-text') return `.${cls} { background-clip: text; -webkit-background-clip: text; }`\n\n return null\n}\n","import type { ResolvedConfig } from '../types'\n\nfunction has(obj: Record<string, string>, key: string): boolean {\n return typeof obj[key] === 'string'\n}\n\nexport function generateSizing(classes: Set<string>, config: ResolvedConfig): string[] {\n const { spacing } = config.theme\n const rules: string[] = []\n for (const cls of classes) {\n const generated = matchSizing(cls, spacing)\n if (generated) rules.push(generated)\n }\n return rules\n}\n\nfunction matchSizing(cls: string, spacing: Record<string, string>): string | null {\n // Fractions\n const fractions: Record<string, string> = {\n '1/2': '50%', '1/3': '33.333333%', '2/3': '66.666667%',\n '1/4': '25%', '2/4': '50%', '3/4': '75%',\n '1/5': '20%', '2/5': '40%', '3/5': '60%', '4/5': '80%',\n '1/6': '16.666667%', '2/6': '33.333333%', '3/6': '50%',\n '4/6': '66.666667%', '5/6': '83.333333%',\n '1/12': '8.333333%', '2/12': '16.666667%', '3/12': '25%',\n '4/12': '33.333333%', '5/12': '41.666667%', '6/12': '50%',\n '7/12': '58.333333%', '8/12': '66.666667%', '9/12': '75%',\n '10/12': '83.333333%', '11/12': '91.666667%',\n }\n\n // Width\n const wMatch = cls.match(/^w-(.+)$/)\n if (wMatch) {\n const key = wMatch[1]\n if (key === 'auto') return `.${cls} { width: auto; }`\n if (key === 'full') return `.${cls} { width: 100%; }`\n if (key === 'screen') return `.${cls} { width: 100vw; }`\n if (key === 'svw') return `.${cls} { width: 100svw; }`\n if (key === 'min') return `.${cls} { width: min-content; }`\n if (key === 'max') return `.${cls} { width: max-content; }`\n if (key === 'fit') return `.${cls} { width: fit-content; }`\n if (has(fractions, key)) return `.${cls} { width: ${fractions[key]}; }`\n if (has(spacing, key)) return `.${cls} { width: ${spacing[key]}; }`\n }\n\n // Min width\n const minWMatch = cls.match(/^min-w-(.+)$/)\n if (minWMatch) {\n const key = minWMatch[1]\n if (key === '0') return `.${cls} { min-width: 0px; }`\n if (key === 'full') return `.${cls} { min-width: 100%; }`\n if (key === 'min') return `.${cls} { min-width: min-content; }`\n if (key === 'max') return `.${cls} { min-width: max-content; }`\n if (key === 'fit') return `.${cls} { min-width: fit-content; }`\n if (has(spacing, key)) return `.${cls} { min-width: ${spacing[key]}; }`\n }\n\n // Max width\n const maxWMap: Record<string, string> = {\n none: 'none', xs: '20rem', sm: '24rem', md: '28rem', lg: '32rem', xl: '36rem',\n '2xl': '42rem', '3xl': '48rem', '4xl': '56rem', '5xl': '64rem', '6xl': '72rem',\n '7xl': '80rem', full: '100%', min: 'min-content', max: 'max-content', fit: 'fit-content',\n prose: '65ch', 'screen-sm': '640px', 'screen-md': '768px', 'screen-lg': '1024px',\n 'screen-xl': '1280px', 'screen-2xl': '1536px',\n }\n const maxWMatch = cls.match(/^max-w-(.+)$/)\n if (maxWMatch && has(maxWMap, maxWMatch[1])) {\n return `.${cls} { max-width: ${maxWMap[maxWMatch[1]]}; }`\n }\n\n // Height\n const hMatch = cls.match(/^h-(.+)$/)\n if (hMatch) {\n const key = hMatch[1]\n if (key === 'auto') return `.${cls} { height: auto; }`\n if (key === 'full') return `.${cls} { height: 100%; }`\n if (key === 'screen') return `.${cls} { height: 100vh; }`\n if (key === 'svh') return `.${cls} { height: 100svh; }`\n if (key === 'dvh') return `.${cls} { height: 100dvh; }`\n if (key === 'min') return `.${cls} { height: min-content; }`\n if (key === 'max') return `.${cls} { height: max-content; }`\n if (key === 'fit') return `.${cls} { height: fit-content; }`\n if (has(fractions, key)) return `.${cls} { height: ${fractions[key]}; }`\n if (has(spacing, key)) return `.${cls} { height: ${spacing[key]}; }`\n }\n\n // Min height\n const minHMatch = cls.match(/^min-h-(.+)$/)\n if (minHMatch) {\n const key = minHMatch[1]\n if (key === '0') return `.${cls} { min-height: 0px; }`\n if (key === 'full') return `.${cls} { min-height: 100%; }`\n if (key === 'screen') return `.${cls} { min-height: 100vh; }`\n if (key === 'svh') return `.${cls} { min-height: 100svh; }`\n if (key === 'dvh') return `.${cls} { min-height: 100dvh; }`\n if (key === 'fit') return `.${cls} { min-height: fit-content; }`\n if (has(spacing, key)) return `.${cls} { min-height: ${spacing[key]}; }`\n }\n\n // Max height\n const maxHMatch = cls.match(/^max-h-(.+)$/)\n if (maxHMatch) {\n const key = maxHMatch[1]\n if (key === 'none') return `.${cls} { max-height: none; }`\n if (key === 'full') return `.${cls} { max-height: 100%; }`\n if (key === 'screen') return `.${cls} { max-height: 100vh; }`\n if (key === 'svh') return `.${cls} { max-height: 100svh; }`\n if (key === 'dvh') return `.${cls} { max-height: 100dvh; }`\n if (key === 'fit') return `.${cls} { max-height: fit-content; }`\n if (has(spacing, key)) return `.${cls} { max-height: ${spacing[key]}; }`\n }\n\n return null\n}\n","import type { ResolvedConfig } from '../types'\nimport { escapeSelector } from './utils'\n\nfunction has(obj: Record<string, string>, key: string): boolean {\n return typeof obj[key] === 'string'\n}\n\nexport function generateEffects(classes: Set<string>, config: ResolvedConfig): string[] {\n const { opacity, zIndex, boxShadow, borderRadius } = config.theme\n const rules: string[] = []\n for (const cls of classes) {\n const generated = matchEffects(cls, opacity, zIndex, boxShadow, borderRadius)\n if (generated) rules.push(generated)\n }\n return rules\n}\n\nfunction matchEffects(\n cls: string,\n opacity: Record<string, string>,\n zIndex: Record<string, string>,\n boxShadow: Record<string, string>,\n borderRadius: Record<string, string>,\n): string | null {\n // Opacity\n const opacityMatch = cls.match(/^opacity-(.+)$/)\n if (opacityMatch && has(opacity, opacityMatch[1])) {\n return `.${cls} {\\n opacity: ${opacity[opacityMatch[1]]};\\n transition-property: opacity;\\n transition-duration: var(--alive-duration, 0ms);\\n transition-timing-function: var(--alive-ease, linear);\\n}`\n }\n\n // Z-index\n const zMatch = cls.match(/^z-(.+)$/)\n if (zMatch && has(zIndex, zMatch[1])) {\n return `.${cls} { z-index: ${zIndex[zMatch[1]]}; }`\n }\n\n // Box shadow (non-depth)\n const shadowMatch = cls.match(/^shadow(?:-(.+))?$/)\n if (shadowMatch) {\n const key = shadowMatch[1] ?? 'DEFAULT'\n if (has(boxShadow, key)) {\n return `.${cls} { box-shadow: ${boxShadow[key]}; }`\n }\n if (!shadowMatch[1] && has(boxShadow, 'DEFAULT')) {\n return `.${cls} { box-shadow: ${boxShadow['DEFAULT']}; }`\n }\n }\n\n // Border radius\n const roundedMatch = cls.match(/^rounded(?:-(.+))?$/)\n if (roundedMatch) {\n const key = roundedMatch[1] ?? 'DEFAULT'\n if (has(borderRadius, key)) return `.${cls} { border-radius: ${borderRadius[key]}; }`\n if (!roundedMatch[1] && has(borderRadius, 'DEFAULT')) return `.${cls} { border-radius: ${borderRadius['DEFAULT']}; }`\n }\n\n // Directional border radius\n const roundedTMatch = cls.match(/^rounded-t(?:-(.+))?$/)\n if (roundedTMatch) {\n const rkey = roundedTMatch[1] ?? 'DEFAULT'\n const val = has(borderRadius, rkey) ? borderRadius[rkey] : (has(borderRadius, 'DEFAULT') ? borderRadius['DEFAULT'] : null)\n if (val) return `.${cls} { border-top-left-radius: ${val}; border-top-right-radius: ${val}; }`\n }\n\n const roundedBMatch = cls.match(/^rounded-b(?:-(.+))?$/)\n if (roundedBMatch) {\n const rkey = roundedBMatch[1] ?? 'DEFAULT'\n const val = has(borderRadius, rkey) ? borderRadius[rkey] : (has(borderRadius, 'DEFAULT') ? borderRadius['DEFAULT'] : null)\n if (val) return `.${cls} { border-bottom-left-radius: ${val}; border-bottom-right-radius: ${val}; }`\n }\n\n const roundedLMatch = cls.match(/^rounded-l(?:-(.+))?$/)\n if (roundedLMatch) {\n const rkey = roundedLMatch[1] ?? 'DEFAULT'\n const val = has(borderRadius, rkey) ? borderRadius[rkey] : (has(borderRadius, 'DEFAULT') ? borderRadius['DEFAULT'] : null)\n if (val) return `.${cls} { border-top-left-radius: ${val}; border-bottom-left-radius: ${val}; }`\n }\n\n const roundedRMatch = cls.match(/^rounded-r(?:-(.+))?$/)\n if (roundedRMatch) {\n const rkey = roundedRMatch[1] ?? 'DEFAULT'\n const val = has(borderRadius, rkey) ? borderRadius[rkey] : (has(borderRadius, 'DEFAULT') ? borderRadius['DEFAULT'] : null)\n if (val) return `.${cls} { border-top-right-radius: ${val}; border-bottom-right-radius: ${val}; }`\n }\n\n // Border width\n if (cls === 'border') return `.${cls} { border-width: 1px; border-style: solid; }`\n if (cls === 'border-0') return `.${cls} { border-width: 0px; }`\n if (cls === 'border-2') return `.${cls} { border-width: 2px; border-style: solid; }`\n if (cls === 'border-4') return `.${cls} { border-width: 4px; border-style: solid; }`\n if (cls === 'border-8') return `.${cls} { border-width: 8px; border-style: solid; }`\n if (cls === 'border-t') return `.${cls} { border-top-width: 1px; border-top-style: solid; }`\n if (cls === 'border-r') return `.${cls} { border-right-width: 1px; border-right-style: solid; }`\n if (cls === 'border-b') return `.${cls} { border-bottom-width: 1px; border-bottom-style: solid; }`\n if (cls === 'border-l') return `.${cls} { border-left-width: 1px; border-left-style: solid; }`\n if (cls === 'border-t-0') return `.${cls} { border-top-width: 0px; }`\n if (cls === 'border-r-0') return `.${cls} { border-right-width: 0px; }`\n if (cls === 'border-b-0') return `.${cls} { border-bottom-width: 0px; }`\n if (cls === 'border-l-0') return `.${cls} { border-left-width: 0px; }`\n\n // Border style\n if (cls === 'border-solid') return `.${cls} { border-style: solid; }`\n if (cls === 'border-dashed') return `.${cls} { border-style: dashed; }`\n if (cls === 'border-dotted') return `.${cls} { border-style: dotted; }`\n if (cls === 'border-double') return `.${cls} { border-style: double; }`\n if (cls === 'border-hidden') return `.${cls} { border-style: hidden; }`\n if (cls === 'border-none') return `.${cls} { border-style: none; }`\n\n // Outline\n if (cls === 'outline-none') return `.${cls} { outline: 2px solid transparent; outline-offset: 2px; }`\n if (cls === 'outline') return `.${cls} { outline-style: solid; }`\n if (cls === 'outline-dashed') return `.${cls} { outline-style: dashed; }`\n if (cls === 'outline-dotted') return `.${cls} { outline-style: dotted; }`\n if (cls === 'outline-double') return `.${cls} { outline-style: double; }`\n\n const outlineWidthMatch = cls.match(/^outline-(\\d+)$/)\n if (outlineWidthMatch) return `.${cls} { outline-width: ${outlineWidthMatch[1]}px; }`\n\n const outlineOffsetMatch = cls.match(/^outline-offset-(\\d+)$/)\n if (outlineOffsetMatch) return `.${cls} { outline-offset: ${outlineOffsetMatch[1]}px; }`\n\n // Ring\n const ringMatch = cls.match(/^ring(?:-(\\d+))?$/)\n if (ringMatch) {\n const width = ringMatch[1] ?? '3'\n return `.${cls} { box-shadow: 0 0 0 ${width}px var(--alive-ring-color, rgba(59, 130, 246, 0.5)); }`\n }\n if (cls === 'ring-inset') return `.${cls} { --alive-ring-inset: inset; }`\n\n const ringOffsetMatch = cls.match(/^ring-offset-(\\d+)$/)\n if (ringOffsetMatch) return `.${cls} { --alive-ring-offset: ${ringOffsetMatch[1]}px; }`\n\n // Transform utilities\n if (cls === 'transform') return `.${cls} { transform: translateX(var(--alive-tx,0)) translateY(var(--alive-ty,0)) rotate(var(--alive-rotate,0)) scaleX(var(--alive-sx,1)) scaleY(var(--alive-sy,1)) skewX(var(--alive-skew-x,0)) skewY(var(--alive-skew-y,0)); }`\n if (cls === 'transform-none') return `.${cls} { transform: none; }`\n\n // Scale\n const scaleMap: Record<string, string> = {\n '0': '0', '50': '.5', '75': '.75', '90': '.9', '95': '.95',\n '100': '1', '105': '1.05', '110': '1.1', '125': '1.25', '150': '1.5',\n }\n const scaleMatch = cls.match(/^scale-(\\d+)$/)\n if (scaleMatch && has(scaleMap, scaleMatch[1])) {\n return `.${cls} { transform: scale(${scaleMap[scaleMatch[1]]}); }`\n }\n\n const scaleXMatch = cls.match(/^scale-x-(\\d+)$/)\n if (scaleXMatch && has(scaleMap, scaleXMatch[1])) {\n return `.${cls} { transform: scaleX(${scaleMap[scaleXMatch[1]]}); }`\n }\n\n const scaleYMatch = cls.match(/^scale-y-(\\d+)$/)\n if (scaleYMatch && has(scaleMap, scaleYMatch[1])) {\n return `.${cls} { transform: scaleY(${scaleMap[scaleYMatch[1]]}); }`\n }\n\n // Rotate\n const rotateMatch = cls.match(/^-?rotate-(\\d+)$/)\n if (rotateMatch) {\n const neg = cls.startsWith('-') ? '-' : ''\n return `.${cls.replace(/^-/, '\\\\-')} { transform: rotate(${neg}${rotateMatch[1]}deg); }`\n }\n\n // Translate\n const translateXMatch = cls.match(/^-?translate-x-(.+)$/)\n if (translateXMatch) {\n const neg = cls.startsWith('-') ? '-' : ''\n const key = translateXMatch[1]\n const fractions: Record<string, string> = { '1/2': '50%', 'full': '100%' }\n const val = fractions[key] ?? null\n if (val) return `.${cls.replace(/^-/, '\\\\-')} { transform: translateX(${neg}${val}); }`\n }\n\n const translateYMatch = cls.match(/^-?translate-y-(.+)$/)\n if (translateYMatch) {\n const neg = cls.startsWith('-') ? '-' : ''\n const key = translateYMatch[1]\n const fractions: Record<string, string> = { '1/2': '50%', 'full': '100%' }\n const val = fractions[key] ?? null\n if (val) return `.${cls.replace(/^-/, '\\\\-')} { transform: translateY(${neg}${val}); }`\n }\n\n // Transition (explicit overrides for elements outside depth context)\n if (cls === 'transition-none') return `.${cls} { transition: none; }`\n if (cls === 'transition-all') return `.${cls} { transition: all var(--alive-duration-normal) var(--alive-ease-standard); }`\n if (cls === 'transition-colors') return `.${cls} { transition: color, background-color, border-color, text-decoration-color, fill, stroke; transition-duration: var(--alive-duration-normal); transition-timing-function: var(--alive-ease-standard); }`\n if (cls === 'transition-opacity') return `.${cls} { transition: opacity; transition-duration: var(--alive-duration-normal); transition-timing-function: var(--alive-ease-standard); }`\n if (cls === 'transition-shadow') return `.${cls} { transition: box-shadow; transition-duration: var(--alive-duration-normal); transition-timing-function: var(--alive-ease-standard); }`\n if (cls === 'transition-transform') return `.${cls} { transition: transform; transition-duration: var(--alive-duration-normal); transition-timing-function: var(--alive-ease-standard); }`\n\n // Backdrop filter\n const blurMatch = cls.match(/^blur(?:-(.+))?$/)\n if (blurMatch) {\n const blurMap: Record<string, string> = {\n none: '0', sm: '4px', DEFAULT: '8px', md: '12px', lg: '16px',\n xl: '24px', '2xl': '40px', '3xl': '64px',\n }\n const key = blurMatch[1] ?? 'DEFAULT'\n if (has(blurMap, key)) return `.${cls} { filter: blur(${blurMap[key]}); }`\n }\n\n const backdropBlurMatch = cls.match(/^backdrop-blur(?:-(.+))?$/)\n if (backdropBlurMatch) {\n const blurMap: Record<string, string> = {\n none: '0', sm: '4px', DEFAULT: '8px', md: '12px', lg: '16px',\n xl: '24px', '2xl': '40px', '3xl': '64px',\n }\n const key = backdropBlurMatch[1] ?? 'DEFAULT'\n if (has(blurMap, key)) return `.${cls} { backdrop-filter: blur(${blurMap[key]}); }`\n }\n\n // ── Arbitrary value utilities ─────────────────────────────────────\n\n const arbOpacityMatch = cls.match(/^opacity-\\[(.+)\\]$/)\n if (arbOpacityMatch) {\n const escaped = escapeSelector(cls)\n return `.${escaped} {\\n opacity: ${arbOpacityMatch[1]};\\n transition-property: opacity;\\n transition-duration: var(--alive-duration, 0ms);\\n transition-timing-function: var(--alive-ease, linear);\\n}`\n }\n\n const arbZMatch = cls.match(/^z-\\[(.+)\\]$/)\n if (arbZMatch) {\n return `.${escapeSelector(cls)} { z-index: ${arbZMatch[1]}; }`\n }\n\n const arbRoundedMatch = cls.match(/^rounded-\\[(.+)\\]$/)\n if (arbRoundedMatch) {\n return `.${escapeSelector(cls)} { border-radius: ${arbRoundedMatch[1]}; }`\n }\n\n const arbBorderMatch = cls.match(/^border-\\[(.+)\\]$/)\n if (arbBorderMatch) {\n return `.${escapeSelector(cls)} { border-width: ${arbBorderMatch[1]}; border-style: solid; }`\n }\n\n const arbShadowMatch = cls.match(/^shadow-\\[(.+)\\]$/)\n if (arbShadowMatch) {\n return `.${escapeSelector(cls)} { box-shadow: ${arbShadowMatch[1]}; }`\n }\n\n const arbBlurMatch = cls.match(/^blur-\\[(.+)\\]$/)\n if (arbBlurMatch) {\n return `.${escapeSelector(cls)} { filter: blur(${arbBlurMatch[1]}); }`\n }\n\n const arbScaleMatch = cls.match(/^scale-\\[(.+)\\]$/)\n if (arbScaleMatch) {\n return `.${escapeSelector(cls)} { transform: scale(${arbScaleMatch[1]}); }`\n }\n\n const arbRotateMatch = cls.match(/^rotate-\\[(.+)\\]$/)\n if (arbRotateMatch) {\n return `.${escapeSelector(cls)} { transform: rotate(${arbRotateMatch[1]}); }`\n }\n\n const arbTranslateXMatch = cls.match(/^translate-x-\\[(.+)\\]$/)\n if (arbTranslateXMatch) {\n return `.${escapeSelector(cls)} { transform: translateX(${arbTranslateXMatch[1]}); }`\n }\n\n const arbTranslateYMatch = cls.match(/^translate-y-\\[(.+)\\]$/)\n if (arbTranslateYMatch) {\n return `.${escapeSelector(cls)} { transform: translateY(${arbTranslateYMatch[1]}); }`\n }\n\n return null\n}\n","import type { ResolvedConfig } from '../types'\nimport { generateBase } from './base'\nimport { generateColors } from './colors'\nimport { generateSpacing } from './spacing'\nimport { generateTypography } from './typography'\nimport { generateLayout } from './layout'\nimport { generateSizing } from './sizing'\nimport { generateEffects } from './effects'\nimport { parseVariants, escapeSelector, wrapVariants } from './utils'\n\nexport { generateBase }\n\nexport function generateUtilities(classes: Set<string>, config: ResolvedConfig): string {\n // Expand variant-prefixed classes into base classes + variant info\n const variantMap = new Map<string, { base: string; variants: string[]; original: string }>()\n const baseClasses = new Set<string>()\n\n for (const cls of classes) {\n const { variants, base } = parseVariants(cls)\n baseClasses.add(base)\n variantMap.set(cls, { base, variants, original: cls })\n }\n\n // Generate CSS for all base classes\n const generators = [\n generateColors,\n generateSpacing,\n generateTypography,\n generateLayout,\n generateSizing,\n generateEffects,\n generateAliveSpecific,\n ]\n\n const baseRuleMap = new Map<string, string>()\n for (const gen of generators) {\n const rules = gen(baseClasses, config)\n for (const r of rules) {\n // Extract the base class name from the rule selector.\n // Handles: simple (.w-4), escaped arbitrary (.w-\\[100px\\]), negative (.\\-m-4),\n // and multi-selector (.divide-x > * + *) rules.\n // Regex: match everything after the leading dot up to an unescaped space/brace/combinator/colon\n const selectorMatch = r.match(/^\\.((?:\\\\.|[^ {>+~:])*)/)\n if (selectorMatch && selectorMatch[1]) {\n // Unescape CSS escapes (e.g. \\[ → [, \\- → -) to recover the original class name\n const key = selectorMatch[1].replace(/\\\\(.)/g, '$1')\n baseRuleMap.set(key, r)\n }\n }\n }\n\n // Now build the final CSS — for each original class (with variants), wrap the base rule\n const baseOutput: string[] = []\n const mediaOutput = new Map<string, string[]>()\n\n for (const [original, { base, variants, }] of variantMap) {\n const baseRule = baseRuleMap.get(base)\n if (!baseRule) continue\n\n if (variants.length === 0) {\n baseOutput.push(baseRule)\n continue\n }\n\n // Separate responsive variants from state/dark variants\n const responsiveVariants = variants.filter(v => config.theme.screens[v])\n const stateVariants = variants.filter(v => !config.theme.screens[v])\n\n // Build the selector from the base rule but with escaped original class name\n const declMatch = baseRule.match(/\\{([\\s\\S]*)\\}/)\n if (!declMatch) continue\n\n let selector = `.${escapeSelector(original)}`\n for (const sv of stateVariants) {\n switch (sv) {\n case 'hover': selector += ':hover'; break\n case 'focus': selector += ':focus'; break\n case 'focus-visible': selector += ':focus-visible'; break\n case 'active': selector += ':active'; break\n case 'disabled': selector += ':disabled'; break\n case 'visited': selector += ':visited'; break\n case 'first': selector += ':first-child'; break\n case 'last': selector += ':last-child'; break\n case 'odd': selector += ':nth-child(odd)'; break\n case 'even': selector += ':nth-child(even)'; break\n case 'placeholder': selector += '::placeholder'; break\n case 'group-hover': selector = `.group:hover ${selector}`; break\n case 'dark':\n if (config.theme.darkMode === 'class') {\n selector = `.dark ${selector}`\n }\n break\n }\n }\n\n const wrappedRule = `${selector} {${declMatch[1]}}`\n\n if (responsiveVariants.length === 0) {\n // dark media query\n if (stateVariants.includes('dark') && config.theme.darkMode === 'media') {\n const mq = '@media (prefers-color-scheme: dark)'\n const existing = mediaOutput.get(mq) ?? []\n mediaOutput.set(mq, [...existing, wrappedRule])\n } else {\n baseOutput.push(wrappedRule)\n }\n } else {\n // Responsive variant — wrap in media query\n const screen = config.theme.screens[responsiveVariants[0]]\n const mq = `@media (min-width: ${screen})`\n const existing = mediaOutput.get(mq) ?? []\n mediaOutput.set(mq, [...existing, wrappedRule])\n }\n }\n\n // Sort media queries by breakpoint size\n const sortedMedia = [...mediaOutput.entries()].sort((a, b) => {\n const aSize = parseInt(a[0].match(/\\d+/)?.[0] ?? '0')\n const bSize = parseInt(b[0].match(/\\d+/)?.[0] ?? '0')\n return aSize - bSize\n })\n\n const mediaCSS = sortedMedia\n .map(([mq, rules]) => `${mq} {\\n${rules.map(r => ' ' + r.split('\\n').join('\\n ')).join('\\n')}\\n}`)\n .join('\\n\\n')\n\n const parts = [\n '/* AliveUI Utilities */',\n ...dedupe(baseOutput),\n mediaCSS,\n ].filter(Boolean)\n\n return parts.join('\\n\\n')\n}\n\n// Remove duplicate rules\nfunction dedupe(rules: string[]): string[] {\n const seen = new Set<string>()\n return rules.filter(r => {\n if (seen.has(r)) return false\n seen.add(r)\n return true\n })\n}\n\n// AliveUI-specific utilities not covered by other generators\nfunction generateAliveSpecific(classes: Set<string>, _config: ResolvedConfig): string[] {\n const rules: string[] = []\n\n for (const cls of classes) {\n // Depth utilities — already in base, but also match here for variant support\n if (cls === 'd1' || cls === 'd2' || cls === 'd3') continue\n\n // Skip all alive- prefixed classes that are defined in base (component primitives)\n const aliveBasePrefixes = [\n 'alive-enter', 'alive-exit', 'alive-loop', 'alive-card', 'alive-button',\n 'alive-badge', 'alive-input', 'alive-textarea', 'alive-select', 'alive-checkbox',\n 'alive-radio', 'alive-switch', 'alive-avatar', 'alive-skeleton', 'alive-progress',\n 'alive-separator', 'alive-alert', 'alive-tooltip', 'alive-modal', 'alive-drawer',\n 'alive-nav', 'alive-tabs', 'alive-tab', 'alive-dropdown', 'alive-table',\n 'alive-chip', 'alive-stack', 'alive-container', 'alive-cluster', 'alive-focus',\n 'alive-overlay', 'alive-toast', 'alive-command', 'alive-popover', 'alive-sidebar',\n 'alive-backdrop', 'alive-sr-only',\n ]\n if (aliveBasePrefixes.some(p => cls === p || cls.startsWith(p + '-'))) continue\n\n // Animate utilities (keyframes are defined in base.ts)\n if (cls === 'animate-none') { rules.push(`.${cls} { animation: none; }`); continue }\n if (cls === 'animate-spin') { rules.push(`.${cls} { animation: alive-spin 1s linear infinite; }`); continue }\n if (cls === 'animate-ping') { rules.push(`.${cls} { animation: alive-ping 1s cubic-bezier(0,0,0.2,1) infinite; }`); continue }\n if (cls === 'animate-pulse') { rules.push(`.${cls} { animation: alive-pulse 2s cubic-bezier(0.4,0,0.6,1) infinite; }`); continue }\n if (cls === 'animate-bounce') { rules.push(`.${cls} { animation: alive-bounce 1s infinite; }`); continue }\n if (cls === 'animate-shimmer') { rules.push(`.${cls} { animation: alive-shimmer 1.5s linear infinite; }`); continue }\n\n // Easing timing function overrides\n if (cls === 'ease-linear') { rules.push(`.${cls} { transition-timing-function: linear; }`); continue }\n if (cls === 'ease-in') { rules.push(`.${cls} { transition-timing-function: cubic-bezier(0.4,0,1,1); }`); continue }\n if (cls === 'ease-out') { rules.push(`.${cls} { transition-timing-function: cubic-bezier(0,0,0.2,1); }`); continue }\n if (cls === 'ease-in-out') { rules.push(`.${cls} { transition-timing-function: cubic-bezier(0.4,0,0.2,1); }`); continue }\n\n // Group utility\n if (cls === 'group') {\n rules.push(`.${cls} {}`) // marker class\n continue\n }\n\n // Stagger gap override: stagger-{ms}\n const staggerMatch = cls.match(/^stagger-(\\d+)$/)\n if (staggerMatch) {\n rules.push(`.${cls} { --alive-stagger-gap: ${staggerMatch[1]}ms; }`)\n continue\n }\n\n // Stagger index: alive-index-{n}\n const indexMatch = cls.match(/^alive-index-(\\d+)$/)\n if (indexMatch) {\n rules.push(`.${cls} { --alive-index: ${indexMatch[1]}; }`)\n continue\n }\n\n // Custom duration override: duration-{ms}\n const durationMatch = cls.match(/^duration-(\\d+)$/)\n if (durationMatch) {\n rules.push(`.${cls} { --alive-duration: ${durationMatch[1]}ms; }`)\n continue\n }\n\n // Delay: delay-{ms}\n const delayMatch = cls.match(/^delay-(\\d+)$/)\n if (delayMatch) {\n rules.push(`.${cls} { animation-delay: ${delayMatch[1]}ms; }`)\n continue\n }\n\n // Motion tokens as animation-duration shorthand: motion-{ms}\n const motionMsMatch = cls.match(/^motion-(\\d+)$/)\n if (motionMsMatch) {\n rules.push(`.${cls} { --alive-duration: ${motionMsMatch[1]}ms !important; }`)\n continue\n }\n\n // Divide utilities\n if (cls === 'divide-x') {\n rules.push(`.${cls} > * + * { border-left-width: 1px; border-left-style: solid; }`)\n continue\n }\n if (cls === 'divide-y') {\n rules.push(`.${cls} > * + * { border-top-width: 1px; border-top-style: solid; }`)\n continue\n }\n const divideColorMatch = cls.match(/^divide-([a-z]+)(?:-(\\d+))?$/)\n if (divideColorMatch) {\n rules.push(`.${cls} > * + * { border-color: inherit; }`)\n continue\n }\n\n // Appearance\n if (cls === 'appearance-none') { rules.push(`.${cls} { appearance: none; }`); continue }\n if (cls === 'appearance-auto') { rules.push(`.${cls} { appearance: auto; }`); continue }\n\n // Resize\n if (cls === 'resize-none') { rules.push(`.${cls} { resize: none; }`); continue }\n if (cls === 'resize') { rules.push(`.${cls} { resize: both; }`); continue }\n if (cls === 'resize-y') { rules.push(`.${cls} { resize: vertical; }`); continue }\n if (cls === 'resize-x') { rules.push(`.${cls} { resize: horizontal; }`); continue }\n\n // Scroll snap\n if (cls === 'snap-none') { rules.push(`.${cls} { scroll-snap-type: none; }`); continue }\n if (cls === 'snap-x') { rules.push(`.${cls} { scroll-snap-type: x mandatory; }`); continue }\n if (cls === 'snap-y') { rules.push(`.${cls} { scroll-snap-type: y mandatory; }`); continue }\n if (cls === 'snap-start') { rules.push(`.${cls} { scroll-snap-align: start; }`); continue }\n if (cls === 'snap-center') { rules.push(`.${cls} { scroll-snap-align: center; }`); continue }\n if (cls === 'snap-end') { rules.push(`.${cls} { scroll-snap-align: end; }`); continue }\n\n // Pointer events\n if (cls === 'pointer-events-none') { rules.push(`.${cls} { pointer-events: none; }`); continue }\n if (cls === 'pointer-events-auto') { rules.push(`.${cls} { pointer-events: auto; }`); continue }\n\n // Screen reader\n if (cls === 'sr-only') {\n rules.push(`.${cls} { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border-width: 0; }`)\n continue\n }\n if (cls === 'not-sr-only') {\n rules.push(`.${cls} { position: static; width: auto; height: auto; padding: 0; margin: 0; overflow: visible; clip: auto; white-space: normal; }`)\n continue\n }\n\n // Will-change\n if (cls === 'will-change-auto') { rules.push(`.${cls} { will-change: auto; }`); continue }\n if (cls === 'will-change-transform') { rules.push(`.${cls} { will-change: transform; }`); continue }\n if (cls === 'will-change-opacity') { rules.push(`.${cls} { will-change: opacity; }`); continue }\n\n // Line clamp\n const lineClampMatch = cls.match(/^line-clamp-(\\d+)$/)\n if (lineClampMatch) {\n const n = lineClampMatch[1]\n rules.push(`.${cls} { overflow: hidden; display: -webkit-box; -webkit-line-clamp: ${n}; -webkit-box-orient: vertical; }`)\n continue\n }\n\n // Aspect ratio\n if (cls === 'aspect-square') { rules.push(`.${cls} { aspect-ratio: 1 / 1; }`); continue }\n if (cls === 'aspect-video') { rules.push(`.${cls} { aspect-ratio: 16 / 9; }`); continue }\n if (cls === 'aspect-auto') { rules.push(`.${cls} { aspect-ratio: auto; }`); continue }\n\n // Object fit\n if (cls === 'object-contain') { rules.push(`.${cls} { object-fit: contain; }`); continue }\n if (cls === 'object-cover') { rules.push(`.${cls} { object-fit: cover; }`); continue }\n if (cls === 'object-fill') { rules.push(`.${cls} { object-fit: fill; }`); continue }\n if (cls === 'object-none') { rules.push(`.${cls} { object-fit: none; }`); continue }\n if (cls === 'object-scale') { rules.push(`.${cls} { object-fit: scale-down; }`); continue }\n\n // Mix blend mode\n if (cls === 'mix-blend-multiply') { rules.push(`.${cls} { mix-blend-mode: multiply; }`); continue }\n if (cls === 'mix-blend-screen') { rules.push(`.${cls} { mix-blend-mode: screen; }`); continue }\n if (cls === 'mix-blend-overlay') { rules.push(`.${cls} { mix-blend-mode: overlay; }`); continue }\n if (cls === 'mix-blend-normal') { rules.push(`.${cls} { mix-blend-mode: normal; }`); continue }\n\n // Isolation\n if (cls === 'isolate') { rules.push(`.${cls} { isolation: isolate; }`); continue }\n if (cls === 'isolation-auto') { rules.push(`.${cls} { isolation: auto; }`); continue }\n\n // Touch action\n if (cls === 'touch-auto') { rules.push(`.${cls} { touch-action: auto; }`); continue }\n if (cls === 'touch-none') { rules.push(`.${cls} { touch-action: none; }`); continue }\n if (cls === 'touch-pan-x') { rules.push(`.${cls} { touch-action: pan-x; }`); continue }\n if (cls === 'touch-pan-y') { rules.push(`.${cls} { touch-action: pan-y; }`); continue }\n if (cls === 'touch-manipulation') { rules.push(`.${cls} { touch-action: manipulation; }`); continue }\n\n // User select\n if (cls === 'select-none') { rules.push(`.${cls} { user-select: none; }`); continue }\n if (cls === 'select-text') { rules.push(`.${cls} { user-select: text; }`); continue }\n if (cls === 'select-all') { rules.push(`.${cls} { user-select: all; }`); continue }\n if (cls === 'select-auto') { rules.push(`.${cls} { user-select: auto; }`); continue }\n\n // Break\n if (cls === 'break-normal') { rules.push(`.${cls} { overflow-wrap: normal; word-break: normal; }`); continue }\n if (cls === 'break-words') { rules.push(`.${cls} { overflow-wrap: break-word; }`); continue }\n if (cls === 'break-all') { rules.push(`.${cls} { word-break: break-all; }`); continue }\n if (cls === 'break-keep') { rules.push(`.${cls} { word-break: keep-all; }`); continue }\n }\n\n return rules\n}\n","import type { PluginCreator } from 'postcss'\nimport { resolveConfig } from './config'\nimport { scanContent } from './scanner'\nimport { generateBase, generateUtilities } from './generator'\nimport type { AliveUIConfig } from './types'\n\nexport type { AliveUIConfig } from './types'\nexport type { AliveUITheme } from './types'\nexport { resolveConfig } from './config'\nexport { generateBase, generateUtilities } from './generator'\nexport { scanContent } from './scanner'\n\nconst aliveui: PluginCreator<Partial<AliveUIConfig>> = (userConfig = {}) => {\n const config = resolveConfig(userConfig)\n\n return {\n postcssPlugin: 'aliveui',\n\n async Once(root, { result, postcss }) {\n const classes = await scanContent(config)\n\n root.walkAtRules('aliveui', atRule => {\n const param = atRule.params.trim()\n\n if (param === 'base') {\n const css = generateBase(config)\n const parsed = postcss.parse(css, { from: atRule.source?.input.file })\n atRule.replaceWith(parsed.nodes)\n } else if (param === 'utilities') {\n const css = generateUtilities(classes, config)\n const parsed = postcss.parse(css, { from: atRule.source?.input.file })\n atRule.replaceWith(parsed.nodes)\n } else {\n result.warn(`Unknown @aliveui directive: \"${param}\". Use \"base\" or \"utilities\".`, {\n node: atRule,\n })\n atRule.remove()\n }\n })\n },\n }\n}\n\naliveui.postcss = true\n\nexport default aliveui\n\n// CJS interop: make require('aliveui') return the function directly\nif (typeof module !== 'undefined') {\n module.exports = aliveui\n module.exports.default = aliveui\n}\n","/**\n * AliveUI Vite Plugin\n *\n * Injects the AliveUI PostCSS plugin into Vite's CSS pipeline so that\n * `@aliveui` directives in your CSS are processed automatically.\n *\n * Usage in vite.config.ts:\n * import { aliveUIVite } from '@pratikshadake/aliveui/vite'\n *\n * export default defineConfig({\n * plugins: [aliveUIVite({ content: ['./src/**\\/*.{ts,tsx,html}'] })],\n * })\n */\n\nimport type { Plugin } from 'vite'\nimport type { AliveUIConfig } from './types'\n\nexport function aliveUIVite(config?: Partial<AliveUIConfig>): Plugin {\n return {\n name: 'vite-plugin-aliveui',\n config() {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const aliveui = require('.') as { default: (cfg?: Partial<AliveUIConfig>) => import('postcss').Plugin }\n return {\n css: {\n postcss: {\n plugins: [aliveui.default(config)],\n },\n },\n }\n },\n }\n}\n\nexport default aliveUIVite\n"],"mappings":"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AAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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","names":["init_colors","has","has","init_colors","aliveui"]}
1
+ {"version":3,"sources":["../src/theme/colors.ts","../src/theme/default.ts","../src/config.ts","../src/scanner.ts","../src/generator/base.ts","../src/generator/utils.ts","../src/generator/colors.ts","../src/generator/spacing.ts","../src/generator/typography.ts","../src/generator/layout.ts","../src/generator/sizing.ts","../src/generator/effects.ts","../src/generator/index.ts","../src/index.ts","../src/vite.ts"],"sourcesContent":["import type { ColorScale } from '../types'\n\nexport const defaultColors: ColorScale = {\n inherit: 'inherit',\n current: 'currentColor',\n transparent: 'transparent',\n black: '#000000',\n white: '#ffffff',\n\n slate: {\n 50: '#f8fafc',\n 100: '#f1f5f9',\n 200: '#e2e8f0',\n 300: '#cbd5e1',\n 400: '#94a3b8',\n 500: '#64748b',\n 600: '#475569',\n 700: '#334155',\n 800: '#1e293b',\n 900: '#0f172a',\n 950: '#020617',\n },\n gray: {\n 50: '#f9fafb',\n 100: '#f3f4f6',\n 200: '#e5e7eb',\n 300: '#d1d5db',\n 400: '#9ca3af',\n 500: '#6b7280',\n 600: '#4b5563',\n 700: '#374151',\n 800: '#1f2937',\n 900: '#111827',\n 950: '#030712',\n },\n zinc: {\n 50: '#fafafa',\n 100: '#f4f4f5',\n 200: '#e4e4e7',\n 300: '#d4d4d8',\n 400: '#a1a1aa',\n 500: '#71717a',\n 600: '#52525b',\n 700: '#3f3f46',\n 800: '#27272a',\n 900: '#18181b',\n 950: '#09090b',\n },\n neutral: {\n 50: '#fafafa',\n 100: '#f5f5f5',\n 200: '#e5e5e5',\n 300: '#d4d4d4',\n 400: '#a3a3a3',\n 500: '#737373',\n 600: '#525252',\n 700: '#404040',\n 800: '#262626',\n 900: '#171717',\n 950: '#0a0a0a',\n },\n stone: {\n 50: '#fafaf9',\n 100: '#f5f5f4',\n 200: '#e7e5e4',\n 300: '#d6d3d1',\n 400: '#a8a29e',\n 500: '#78716c',\n 600: '#57534e',\n 700: '#44403c',\n 800: '#292524',\n 900: '#1c1917',\n 950: '#0c0a09',\n },\n red: {\n 50: '#fef2f2',\n 100: '#fee2e2',\n 200: '#fecaca',\n 300: '#fca5a5',\n 400: '#f87171',\n 500: '#ef4444',\n 600: '#dc2626',\n 700: '#b91c1c',\n 800: '#991b1b',\n 900: '#7f1d1d',\n 950: '#450a0a',\n },\n orange: {\n 50: '#fff7ed',\n 100: '#ffedd5',\n 200: '#fed7aa',\n 300: '#fdba74',\n 400: '#fb923c',\n 500: '#f97316',\n 600: '#ea580c',\n 700: '#c2410c',\n 800: '#9a3412',\n 900: '#7c2d12',\n 950: '#431407',\n },\n amber: {\n 50: '#fffbeb',\n 100: '#fef3c7',\n 200: '#fde68a',\n 300: '#fcd34d',\n 400: '#fbbf24',\n 500: '#f59e0b',\n 600: '#d97706',\n 700: '#b45309',\n 800: '#92400e',\n 900: '#78350f',\n 950: '#451a03',\n },\n yellow: {\n 50: '#fefce8',\n 100: '#fef9c3',\n 200: '#fef08a',\n 300: '#fde047',\n 400: '#facc15',\n 500: '#eab308',\n 600: '#ca8a04',\n 700: '#a16207',\n 800: '#854d0e',\n 900: '#713f12',\n 950: '#422006',\n },\n lime: {\n 50: '#f7fee7',\n 100: '#ecfccb',\n 200: '#d9f99d',\n 300: '#bef264',\n 400: '#a3e635',\n 500: '#84cc16',\n 600: '#65a30d',\n 700: '#4d7c0f',\n 800: '#3f6212',\n 900: '#365314',\n 950: '#1a2e05',\n },\n green: {\n 50: '#f0fdf4',\n 100: '#dcfce7',\n 200: '#bbf7d0',\n 300: '#86efac',\n 400: '#4ade80',\n 500: '#22c55e',\n 600: '#16a34a',\n 700: '#15803d',\n 800: '#166534',\n 900: '#14532d',\n 950: '#052e16',\n },\n emerald: {\n 50: '#ecfdf5',\n 100: '#d1fae5',\n 200: '#a7f3d0',\n 300: '#6ee7b7',\n 400: '#34d399',\n 500: '#10b981',\n 600: '#059669',\n 700: '#047857',\n 800: '#065f46',\n 900: '#064e3b',\n 950: '#022c22',\n },\n teal: {\n 50: '#f0fdfa',\n 100: '#ccfbf1',\n 200: '#99f6e4',\n 300: '#5eead4',\n 400: '#2dd4bf',\n 500: '#14b8a6',\n 600: '#0d9488',\n 700: '#0f766e',\n 800: '#115e59',\n 900: '#134e4a',\n 950: '#042f2e',\n },\n cyan: {\n 50: '#ecfeff',\n 100: '#cffafe',\n 200: '#a5f3fc',\n 300: '#67e8f9',\n 400: '#22d3ee',\n 500: '#06b6d4',\n 600: '#0891b2',\n 700: '#0e7490',\n 800: '#155e75',\n 900: '#164e63',\n 950: '#083344',\n },\n sky: {\n 50: '#f0f9ff',\n 100: '#e0f2fe',\n 200: '#bae6fd',\n 300: '#7dd3fc',\n 400: '#38bdf8',\n 500: '#0ea5e9',\n 600: '#0284c7',\n 700: '#0369a1',\n 800: '#075985',\n 900: '#0c4a6e',\n 950: '#082f49',\n },\n blue: {\n 50: '#eff6ff',\n 100: '#dbeafe',\n 200: '#bfdbfe',\n 300: '#93c5fd',\n 400: '#60a5fa',\n 500: '#3b82f6',\n 600: '#2563eb',\n 700: '#1d4ed8',\n 800: '#1e40af',\n 900: '#1e3a8a',\n 950: '#172554',\n },\n indigo: {\n 50: '#eef2ff',\n 100: '#e0e7ff',\n 200: '#c7d2fe',\n 300: '#a5b4fc',\n 400: '#818cf8',\n 500: '#6366f1',\n 600: '#4f46e5',\n 700: '#4338ca',\n 800: '#3730a3',\n 900: '#312e81',\n 950: '#1e1b4b',\n },\n violet: {\n 50: '#f5f3ff',\n 100: '#ede9fe',\n 200: '#ddd6fe',\n 300: '#c4b5fd',\n 400: '#a78bfa',\n 500: '#8b5cf6',\n 600: '#7c3aed',\n 700: '#6d28d9',\n 800: '#5b21b6',\n 900: '#4c1d95',\n 950: '#2e1065',\n },\n purple: {\n 50: '#faf5ff',\n 100: '#f3e8ff',\n 200: '#e9d5ff',\n 300: '#d8b4fe',\n 400: '#c084fc',\n 500: '#a855f7',\n 600: '#9333ea',\n 700: '#7e22ce',\n 800: '#6b21a8',\n 900: '#581c87',\n 950: '#3b0764',\n },\n fuchsia: {\n 50: '#fdf4ff',\n 100: '#fae8ff',\n 200: '#f5d0fe',\n 300: '#f0abfc',\n 400: '#e879f9',\n 500: '#d946ef',\n 600: '#c026d3',\n 700: '#a21caf',\n 800: '#86198f',\n 900: '#701a75',\n 950: '#4a044e',\n },\n pink: {\n 50: '#fdf2f8',\n 100: '#fce7f3',\n 200: '#fbcfe8',\n 300: '#f9a8d4',\n 400: '#f472b6',\n 500: '#ec4899',\n 600: '#db2777',\n 700: '#be185d',\n 800: '#9d174d',\n 900: '#831843',\n 950: '#500724',\n },\n rose: {\n 50: '#fff1f2',\n 100: '#ffe4e6',\n 200: '#fecdd3',\n 300: '#fda4af',\n 400: '#fb7185',\n 500: '#f43f5e',\n 600: '#e11d48',\n 700: '#be123c',\n 800: '#9f1239',\n 900: '#881337',\n 950: '#4c0519',\n },\n}\n","import type { AliveUITheme } from '../types'\nimport { defaultColors } from './colors'\n\nexport const defaultTheme: AliveUITheme = {\n colors: defaultColors,\n\n spacing: {\n px: '1px',\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 borderRadius: {\n none: '0px',\n sm: '0.125rem',\n DEFAULT: '0.25rem',\n md: '0.375rem',\n lg: '0.5rem',\n xl: '0.75rem',\n '2xl': '1rem',\n '3xl': '1.5rem',\n full: '9999px',\n },\n\n fontSize: {\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 fontWeight: {\n thin: '100',\n extralight: '200',\n light: '300',\n normal: '400',\n medium: '500',\n semibold: '600',\n bold: '700',\n extrabold: '800',\n black: '900',\n },\n\n lineHeight: {\n none: '1',\n tight: '1.25',\n snug: '1.375',\n normal: '1.5',\n relaxed: '1.625',\n loose: '2',\n '3': '0.75rem',\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 },\n\n screens: {\n sm: '640px',\n md: '768px',\n lg: '1024px',\n xl: '1280px',\n '2xl': '1536px',\n },\n\n opacity: {\n '0': '0',\n '5': '0.05',\n '10': '0.1',\n '15': '0.15',\n '20': '0.2',\n '25': '0.25',\n '30': '0.3',\n '40': '0.4',\n '50': '0.5',\n '60': '0.6',\n '70': '0.7',\n '75': '0.75',\n '80': '0.8',\n '90': '0.9',\n '95': '0.95',\n '100': '1',\n },\n\n zIndex: {\n auto: 'auto',\n '0': '0',\n '10': '10',\n '20': '20',\n '30': '30',\n '40': '40',\n '50': '50',\n },\n\n boxShadow: {\n sm: '0 1px 2px rgba(0, 0, 0, 0.05)',\n DEFAULT: '0 1px 3px rgba(0, 0, 0, 0.1), 0 1px 2px rgba(0, 0, 0, 0.06)',\n md: '0 4px 6px rgba(0, 0, 0, 0.07), 0 2px 4px rgba(0, 0, 0, 0.06)',\n lg: '0 10px 15px rgba(0, 0, 0, 0.1), 0 4px 6px rgba(0, 0, 0, 0.05)',\n xl: '0 20px 25px rgba(0, 0, 0, 0.1), 0 10px 10px rgba(0, 0, 0, 0.04)',\n '2xl': '0 25px 50px rgba(0, 0, 0, 0.25)',\n inner: 'inset 0 2px 4px rgba(0, 0, 0, 0.06)',\n none: 'none',\n },\n\n darkMode: 'media',\n}\n","import type { AliveUIConfig, ResolvedConfig, AliveUITheme } from './types'\nimport { defaultTheme } from './theme/default'\n\nexport function resolveConfig(userConfig: Partial<AliveUIConfig> = {}): ResolvedConfig {\n const userTheme = userConfig.theme as Partial<AliveUITheme> | undefined\n const theme = mergeTheme(defaultTheme, userTheme ?? {})\n\n return {\n content: userConfig.content ?? [],\n output: userConfig.output ?? 'alive.css',\n theme,\n }\n}\n\nfunction mergeTheme(base: AliveUITheme, overrides: Partial<AliveUITheme>): AliveUITheme {\n return {\n colors: { ...base.colors, ...(overrides.colors ?? {}) },\n spacing: { ...base.spacing, ...(overrides.spacing ?? {}) },\n borderRadius: { ...base.borderRadius, ...(overrides.borderRadius ?? {}) },\n fontSize: { ...base.fontSize, ...(overrides.fontSize ?? {}) },\n fontWeight: { ...base.fontWeight, ...(overrides.fontWeight ?? {}) },\n lineHeight: { ...base.lineHeight, ...(overrides.lineHeight ?? {}) },\n screens: { ...base.screens, ...(overrides.screens ?? {}) },\n opacity: { ...base.opacity, ...(overrides.opacity ?? {}) },\n zIndex: { ...base.zIndex, ...(overrides.zIndex ?? {}) },\n boxShadow: { ...base.boxShadow, ...(overrides.boxShadow ?? {}) },\n darkMode: overrides.darkMode ?? base.darkMode,\n }\n}\n","import { readFileSync } from 'fs'\nimport glob from 'fast-glob'\nimport type { ResolvedConfig } from './types'\n\n// Broad regex to extract potential class name tokens from any file\n// Matches strings inside quotes/backticks and class/className attribute values\nconst CLASS_EXTRACTION_REGEX =\n /(?:class|className)(?:\\s*=\\s*|\\s*:\\s*)(?:\"([^\"]+)\"|'([^']+)'|`([^`]+)`|\\{[^}]*['\"`]([^'\"`]+)['\"`][^}]*\\})/g\n\nconst TOKEN_REGEX = /[`'\"]([\\w\\s/[\\]#%.-]+)[`'\"]/g\n\nexport async function scanContent(config: ResolvedConfig): Promise<Set<string>> {\n if (config.content.length === 0) return new Set()\n\n const files = await glob(config.content, {\n absolute: true,\n ignore: ['**/node_modules/**', '**/.git/**', '**/dist/**'],\n })\n\n const classes = new Set<string>()\n\n for (const file of files) {\n try {\n const content = readFileSync(file, 'utf-8')\n extractClasses(content, classes)\n } catch {\n // skip unreadable files\n }\n }\n\n return classes\n}\n\nfunction extractClasses(content: string, classes: Set<string>): void {\n // Strategy: extract all potential class-like tokens and validate them\n // This is intentionally broad to handle all template syntaxes\n\n // 1. Class/className attribute values\n let match: RegExpExecArray | null\n CLASS_EXTRACTION_REGEX.lastIndex = 0\n while ((match = CLASS_EXTRACTION_REGEX.exec(content)) !== null) {\n const value = match[1] ?? match[2] ?? match[3] ?? match[4]\n if (value) {\n splitAndAdd(value, classes)\n }\n }\n\n // 2. All string literals (catches template literal classes, computed classes, etc.)\n TOKEN_REGEX.lastIndex = 0\n while ((match = TOKEN_REGEX.exec(content)) !== null) {\n if (match[1]) {\n splitAndAdd(match[1], classes)\n }\n }\n\n // 3. Raw token scan — find anything that looks like a utility class\n // Handles: standard classes, negative utilities (-m-4), arbitrary values (w-[100px]),\n // and variant-prefixed classes (hover:bg-blue-500)\n const rawTokenRegex = /(?:^|[\\s\"'`{(,])(-?[a-z][a-z0-9]*(?:-[a-z0-9./]+)*(?:-\\[[^\\]]*\\])?(?::[a-z][a-z0-9]*(?:-[a-z0-9./]+)*(?:-\\[[^\\]]*\\])?)*)/g\n let rawMatch: RegExpExecArray | null\n while ((rawMatch = rawTokenRegex.exec(content)) !== null) {\n const token = rawMatch[1]\n if (token && isLikelyClass(token)) {\n classes.add(token)\n }\n }\n}\n\nfunction splitAndAdd(value: string, classes: Set<string>): void {\n // Split on whitespace and template literal expressions\n const tokens = value.split(/[\\s\\n\\r\\t]+/)\n for (const token of tokens) {\n const clean = token.trim()\n if (clean && isLikelyClass(clean)) {\n classes.add(clean)\n }\n }\n}\n\n// Object.prototype property names that match the class-like regex but are never CSS classes.\n// Accessing these on a plain theme object (e.g. spacing['constructor']) returns the inherited\n// function instead of undefined, which is truthy and would generate invalid CSS.\nconst JS_PROTOTYPE_PROPS = new Set([\n 'constructor', 'prototype', 'toString', 'valueOf', 'hasOwnProperty',\n 'isPrototypeOf', 'propertyIsEnumerable', 'toLocaleString',\n '__proto__', '__defineGetter__', '__defineSetter__', '__lookupGetter__', '__lookupSetter__',\n])\n\n// Quick heuristic to filter out non-class tokens\nfunction isLikelyClass(token: string): boolean {\n if (!token || token.length < 1 || token.length > 120) return false\n // Must start with an optional leading dash then a letter (e.g. -m-4 or bg-blue-500)\n if (!/^-?[a-z]/.test(token)) return false\n // No spaces (should be a single token)\n if (/\\s/.test(token)) return false\n // Skip common non-class patterns\n if (token.includes('://')) return false\n if (token.startsWith('http')) return false\n // Allow arbitrary value brackets — [100px], [#ff0000], [url(...)]\n // but reject tokens that have unmatched brackets\n const openBrackets = (token.match(/\\[/g) ?? []).length\n const closeBrackets = (token.match(/\\]/g) ?? []).length\n if (openBrackets !== closeBrackets) return false\n // Skip JS prototype-inherited property names — accessing these on a plain object\n // returns a function, not undefined, which would produce invalid CSS rules\n if (JS_PROTOTYPE_PROPS.has(token)) return false\n return true\n}\n","import type { ResolvedConfig } from '../types'\n\n// Generates the @aliveui base block:\n// CSS custom properties (motion tokens, depth shadows) + reset + all component primitives\nexport function generateBase(_config: ResolvedConfig): string {\n return `/* ═══════════════════════════════════════════════════════════════\n AliveUI — Motion-first CSS framework\n Base layer: tokens · depth · animations · components\n ═══════════════════════════════════════════════════════════════ */\n\n/* ── Reset ─────────────────────────────────────────────────────── */\n*,\n::before,\n::after {\n box-sizing: border-box;\n}\n\nhtml {\n font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont,\n \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif,\n \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n line-height: 1.5;\n -webkit-text-size-adjust: 100%;\n -moz-tab-size: 4;\n tab-size: 4;\n}\n\nbody {\n margin: 0;\n line-height: inherit;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit;\n font-size: 100%;\n font-weight: inherit;\n line-height: inherit;\n color: inherit;\n margin: 0;\n padding: 0;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\n/* ── Design tokens ──────────────────────────────────────────────── */\n:root {\n /* Motion durations */\n --alive-duration-fast: 120ms;\n --alive-duration-normal: 200ms;\n --alive-duration-slow: 320ms;\n\n /* Easing curves */\n --alive-ease-standard: cubic-bezier(0.2, 0, 0, 1);\n --alive-ease-emphasized: cubic-bezier(0.05, 0.7, 0.1, 1);\n --alive-ease-exit: cubic-bezier(0.3, 0, 0.8, 0.15);\n\n /* Depth shadows */\n --alive-shadow-d1: none;\n --alive-shadow-d2: 0 1px 3px rgba(0,0,0,0.08), 0 1px 2px rgba(0,0,0,0.04);\n --alive-shadow-d2-hover: 0 4px 16px rgba(0,0,0,0.10), 0 2px 6px rgba(0,0,0,0.06);\n --alive-shadow-d3: 0 8px 40px rgba(0,0,0,0.14), 0 4px 16px rgba(0,0,0,0.08);\n\n /* Stagger defaults */\n --alive-stagger-gap: 60ms;\n --alive-index: 0;\n\n /* Inherited depth context — overridden by .d1/.d2/.d3 */\n --alive-duration: 0ms;\n --alive-ease: linear;\n}\n\n/* ── Depth system ───────────────────────────────────────────────── */\n\n/* d1 — base surface: flat, color-only transitions */\n.d1 {\n --alive-depth: 1;\n --alive-duration: var(--alive-duration-normal);\n --alive-ease: var(--alive-ease-standard);\n}\n\n/* d2 — elevated interactive: lifts and scales on hover */\n.d2 {\n --alive-depth: 2;\n --alive-duration: var(--alive-duration-normal);\n --alive-ease: var(--alive-ease-standard);\n box-shadow: var(--alive-shadow-d2);\n transition:\n box-shadow var(--alive-duration-normal) var(--alive-ease-standard),\n transform var(--alive-duration-normal) var(--alive-ease-standard);\n}\n.d2:hover {\n box-shadow: var(--alive-shadow-d2-hover);\n transform: translateY(-1px) scale(1.004);\n}\n.d2:active {\n box-shadow: var(--alive-shadow-d2);\n transform: translateY(0) scale(0.998);\n transition-duration: var(--alive-duration-fast);\n}\n\n/* d3 — floating layer: strong shadow, emphasized entrance */\n.d3 {\n --alive-depth: 3;\n --alive-duration: var(--alive-duration-slow);\n --alive-ease: var(--alive-ease-emphasized);\n box-shadow: var(--alive-shadow-d3);\n}\n\n/* ── Keyframe animations ─────────────────────────────────────────── */\n\n/* Entrances */\n@keyframes alive-fade-up {\n from { opacity: 0; transform: translateY(8px); }\n to { opacity: 1; transform: translateY(0); }\n}\n@keyframes alive-fade-down {\n from { opacity: 0; transform: translateY(-8px); }\n to { opacity: 1; transform: translateY(0); }\n}\n@keyframes alive-fade-right {\n from { opacity: 0; transform: translateX(-12px); }\n to { opacity: 1; transform: translateX(0); }\n}\n@keyframes alive-fade-left {\n from { opacity: 0; transform: translateX(12px); }\n to { opacity: 1; transform: translateX(0); }\n}\n@keyframes alive-fade-in {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n@keyframes alive-scale-in {\n from { opacity: 0; transform: scale(0.94); }\n to { opacity: 1; transform: scale(1); }\n}\n@keyframes alive-scale-up {\n from { opacity: 0; transform: scale(0.92) translateY(4px); }\n to { opacity: 1; transform: scale(1) translateY(0); }\n}\n\n/* Exits */\n@keyframes alive-exit-down {\n from { opacity: 1; transform: translateY(0); }\n to { opacity: 0; transform: translateY(8px); }\n}\n@keyframes alive-exit-up {\n from { opacity: 1; transform: translateY(0); }\n to { opacity: 0; transform: translateY(-8px); }\n}\n@keyframes alive-exit-left {\n from { opacity: 1; transform: translateX(0); }\n to { opacity: 0; transform: translateX(-12px); }\n}\n@keyframes alive-exit-right {\n from { opacity: 1; transform: translateX(0); }\n to { opacity: 0; transform: translateX(12px); }\n}\n@keyframes alive-exit-scale {\n from { opacity: 1; transform: scale(1); }\n to { opacity: 0; transform: scale(0.94); }\n}\n\n/* Loop animations */\n@keyframes alive-pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.45; }\n}\n@keyframes alive-spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n}\n@keyframes alive-ping {\n 75%, 100% { transform: scale(2); opacity: 0; }\n}\n@keyframes alive-bounce {\n 0%, 100% {\n transform: translateY(0);\n animation-timing-function: cubic-bezier(0.8, 0, 1, 1);\n }\n 50% {\n transform: translateY(-25%);\n animation-timing-function: cubic-bezier(0, 0, 0.2, 1);\n }\n}\n@keyframes alive-shimmer {\n 0% { background-position: -200% 0; }\n 100% { background-position: 200% 0; }\n}\n\n/* ── Entrance classes ────────────────────────────────────────────── */\n\n.alive-enter {\n animation: alive-fade-up var(--alive-duration-slow) var(--alive-ease-emphasized) both;\n animation-delay: calc(var(--alive-stagger-gap, 60ms) * var(--alive-index, 0));\n}\n.alive-enter-down {\n animation: alive-fade-down var(--alive-duration-slow) var(--alive-ease-emphasized) both;\n animation-delay: calc(var(--alive-stagger-gap, 60ms) * var(--alive-index, 0));\n}\n.alive-enter-right {\n animation: alive-fade-right var(--alive-duration-slow) var(--alive-ease-emphasized) both;\n animation-delay: calc(var(--alive-stagger-gap, 60ms) * var(--alive-index, 0));\n}\n.alive-enter-left {\n animation: alive-fade-left var(--alive-duration-slow) var(--alive-ease-emphasized) both;\n animation-delay: calc(var(--alive-stagger-gap, 60ms) * var(--alive-index, 0));\n}\n.alive-enter-fade {\n animation: alive-fade-in var(--alive-duration-normal) var(--alive-ease-standard) both;\n animation-delay: calc(var(--alive-stagger-gap, 60ms) * var(--alive-index, 0));\n}\n.alive-enter-scale {\n animation: alive-scale-in var(--alive-duration-normal) var(--alive-ease-emphasized) both;\n animation-delay: calc(var(--alive-stagger-gap, 60ms) * var(--alive-index, 0));\n}\n\n/* ── Exit classes (apply dynamically when removing elements) ─────── */\n\n.alive-exit {\n animation: alive-exit-down var(--alive-duration-normal) var(--alive-ease-exit) both;\n}\n.alive-exit-up {\n animation: alive-exit-up var(--alive-duration-normal) var(--alive-ease-exit) both;\n}\n.alive-exit-left {\n animation: alive-exit-left var(--alive-duration-normal) var(--alive-ease-exit) both;\n}\n.alive-exit-right {\n animation: alive-exit-right var(--alive-duration-normal) var(--alive-ease-exit) both;\n}\n.alive-exit-scale {\n animation: alive-exit-scale var(--alive-duration-fast) var(--alive-ease-exit) both;\n}\n\n/* ── Loop animations ─────────────────────────────────────────────── */\n\n.alive-loop-pulse { animation: alive-pulse 2s ease-in-out infinite; }\n.alive-loop-spin { animation: alive-spin 1s linear infinite; }\n.alive-loop-ping { animation: alive-ping 1s cubic-bezier(0, 0, 0.2, 1) infinite; }\n.alive-loop-bounce { animation: alive-bounce 1s infinite; }\n\n/* Reduced motion — respect system preference */\n@media (prefers-reduced-motion: reduce) {\n .alive-enter,\n .alive-enter-down,\n .alive-enter-right,\n .alive-enter-left,\n .alive-enter-fade,\n .alive-enter-scale,\n .alive-exit,\n .alive-exit-up,\n .alive-exit-left,\n .alive-exit-right,\n .alive-exit-scale,\n .alive-loop-pulse,\n .alive-loop-spin,\n .alive-loop-ping,\n .alive-loop-bounce {\n animation: none;\n opacity: 1;\n transform: none;\n }\n\n /* depth system — disable hover lift and active press */\n .d2,\n .d2:hover,\n .d2:active {\n transform: none;\n transition: none;\n box-shadow: var(--alive-shadow-d2);\n }\n}\n\n/* ── Motion override utilities ───────────────────────────────────── */\n\n.motion-fast { --alive-duration: var(--alive-duration-fast) !important; }\n.motion-normal { --alive-duration: var(--alive-duration-normal) !important; }\n.motion-slow { --alive-duration: var(--alive-duration-slow) !important; }\n.motion-none { --alive-duration: 0ms !important; }\n\n.ease-standard { --alive-ease: var(--alive-ease-standard) !important; }\n.ease-emphasized { --alive-ease: var(--alive-ease-emphasized) !important; }\n.ease-exit { --alive-ease: var(--alive-ease-exit) !important; }\n\n/* ══════════════════════════════════════════════════════════════════\n COMPONENT PRIMITIVES\n ══════════════════════════════════════════════════════════════════ */\n\n/* ── Card ────────────────────────────────────────────────────────── */\n\n.alive-card {\n border-radius: 0.75rem;\n padding: 1.5rem;\n background-color: var(--alive-card-bg, #ffffff);\n border: 1px solid var(--alive-card-border, rgba(0,0,0,0.06));\n}\n.alive-card-flush { padding: 0; }\n.alive-card-sm { padding: 1rem; border-radius: 0.5rem; }\n.alive-card-lg { padding: 2rem; border-radius: 1rem; }\n\n/* ── Button ──────────────────────────────────────────────────────── */\n\n.alive-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 0.5rem;\n padding: 0.625rem 1.25rem;\n font-size: 0.875rem;\n font-weight: 500;\n line-height: 1;\n border-radius: 0.5rem;\n border: 1px solid transparent;\n cursor: pointer;\n user-select: none;\n white-space: nowrap;\n text-decoration: none;\n transition:\n background-color var(--alive-duration-fast) var(--alive-ease-standard),\n color var(--alive-duration-fast) var(--alive-ease-standard),\n border-color var(--alive-duration-fast) var(--alive-ease-standard),\n box-shadow var(--alive-duration-fast) var(--alive-ease-standard),\n transform var(--alive-duration-fast) var(--alive-ease-standard),\n opacity var(--alive-duration-fast) var(--alive-ease-standard);\n}\n.alive-button:active {\n transform: scale(0.97);\n transition-duration: calc(var(--alive-duration-fast) / 2);\n}\n.alive-button:focus-visible {\n outline: 2px solid currentColor;\n outline-offset: 2px;\n}\n.alive-button:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n pointer-events: none;\n}\n\n/* Button variants */\n.alive-button-primary {\n background-color: #0a0a0a;\n color: #ffffff;\n border-color: #0a0a0a;\n}\n.alive-button-primary:hover { background-color: #1a1a1a; }\n\n.alive-button-secondary {\n background-color: transparent;\n color: #0a0a0a;\n border-color: #e4e4e4;\n}\n.alive-button-secondary:hover {\n background-color: #f4f4f4;\n border-color: #d4d4d4;\n}\n\n.alive-button-ghost {\n background-color: transparent;\n color: #4b4b4b;\n border-color: transparent;\n}\n.alive-button-ghost:hover {\n background-color: #f4f4f4;\n color: #0a0a0a;\n}\n\n.alive-button-destructive {\n background-color: #dc2626;\n color: #ffffff;\n border-color: #dc2626;\n}\n.alive-button-destructive:hover { background-color: #b91c1c; }\n\n/* Button sizes */\n.alive-button-xs { padding: 0.25rem 0.625rem; font-size: 0.75rem; border-radius: 0.375rem; }\n.alive-button-sm { padding: 0.375rem 0.875rem; font-size: 0.8125rem; border-radius: 0.375rem; }\n.alive-button-lg { padding: 0.75rem 1.75rem; font-size: 0.9375rem; border-radius: 0.625rem; }\n.alive-button-xl { padding: 0.875rem 2rem; font-size: 1rem; border-radius: 0.75rem; }\n.alive-button-icon {\n padding: 0.625rem;\n aspect-ratio: 1;\n}\n\n/* ── Badge ───────────────────────────────────────────────────────── */\n\n.alive-badge {\n display: inline-flex;\n align-items: center;\n gap: 0.3rem;\n padding: 0.25rem 0.625rem;\n font-size: 0.75rem;\n font-weight: 500;\n line-height: 1;\n border-radius: 9999px;\n border: 1px solid transparent;\n white-space: nowrap;\n}\n\n/* Badge sizes */\n.alive-badge-sm { padding: 0.125rem 0.5rem; font-size: 0.6875rem; }\n.alive-badge-lg { padding: 0.375rem 0.75rem; font-size: 0.8125rem; }\n\n/* Badge colors */\n.alive-badge-gray { background: rgba(0,0,0,0.06); color: #525252; border-color: rgba(0,0,0,0.1); }\n.alive-badge-green { background: rgba(74,222,128,0.12); color: #16a34a; border-color: rgba(74,222,128,0.25); }\n.alive-badge-red { background: rgba(239,68,68,0.1); color: #dc2626; border-color: rgba(239,68,68,0.2); }\n.alive-badge-yellow { background: rgba(234,179,8,0.1); color: #ca8a04; border-color: rgba(234,179,8,0.25); }\n.alive-badge-blue { background: rgba(96,165,250,0.1); color: #2563eb; border-color: rgba(96,165,250,0.22); }\n.alive-badge-purple { background: rgba(167,139,250,0.12); color: #7c3aed; border-color: rgba(167,139,250,0.25); }\n.alive-badge-orange { background: rgba(251,146,60,0.1); color: #ea580c; border-color: rgba(251,146,60,0.22); }\n\n/* Badge with status dot */\n.alive-badge-dot::before {\n content: '';\n display: block;\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background: currentColor;\n flex-shrink: 0;\n}\n\n/* ── Input ───────────────────────────────────────────────────────── */\n\n.alive-input {\n display: block;\n width: 100%;\n padding: 0.625rem 0.875rem;\n font-size: 0.875rem;\n line-height: 1.5;\n color: inherit;\n background: transparent;\n border: 1px solid rgba(0,0,0,0.14);\n border-radius: 0.5rem;\n outline: none;\n transition:\n border-color var(--alive-duration-fast) var(--alive-ease-standard),\n box-shadow var(--alive-duration-fast) var(--alive-ease-standard);\n}\n.alive-input::placeholder { opacity: 0.4; }\n.alive-input:hover { border-color: rgba(0,0,0,0.24); }\n.alive-input:focus {\n border-color: rgba(0,0,0,0.5);\n box-shadow: 0 0 0 3px rgba(0,0,0,0.07);\n}\n.alive-input:disabled {\n opacity: 0.45;\n cursor: not-allowed;\n background: rgba(0,0,0,0.03);\n}\n.alive-input-error { border-color: rgba(239,68,68,0.55); }\n.alive-input-error:hover { border-color: rgba(239,68,68,0.7); }\n.alive-input-error:focus {\n border-color: #ef4444;\n box-shadow: 0 0 0 3px rgba(239,68,68,0.1);\n}\n.alive-input-sm { padding: 0.4375rem 0.75rem; font-size: 0.8125rem; }\n.alive-input-lg { padding: 0.75rem 1rem; font-size: 0.9375rem; }\n\n/* ── Textarea ────────────────────────────────────────────────────── */\n\n.alive-textarea {\n display: block;\n width: 100%;\n padding: 0.625rem 0.875rem;\n font-size: 0.875rem;\n line-height: 1.6;\n color: inherit;\n background: transparent;\n border: 1px solid rgba(0,0,0,0.14);\n border-radius: 0.5rem;\n outline: none;\n resize: vertical;\n min-height: 6rem;\n transition:\n border-color var(--alive-duration-fast) var(--alive-ease-standard),\n box-shadow var(--alive-duration-fast) var(--alive-ease-standard);\n}\n.alive-textarea::placeholder { opacity: 0.4; }\n.alive-textarea:hover { border-color: rgba(0,0,0,0.24); }\n.alive-textarea:focus {\n border-color: rgba(0,0,0,0.5);\n box-shadow: 0 0 0 3px rgba(0,0,0,0.07);\n}\n.alive-textarea:disabled {\n opacity: 0.45;\n cursor: not-allowed;\n background: rgba(0,0,0,0.03);\n}\n\n/* ── Select ──────────────────────────────────────────────────────── */\n\n.alive-select {\n display: block;\n width: 100%;\n padding: 0.625rem 2.25rem 0.625rem 0.875rem;\n font-size: 0.875rem;\n line-height: 1.5;\n color: inherit;\n background-color: transparent;\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: right 0.6rem center;\n background-size: 1.25rem;\n border: 1px solid rgba(0,0,0,0.14);\n border-radius: 0.5rem;\n outline: none;\n cursor: pointer;\n appearance: none;\n transition:\n border-color var(--alive-duration-fast) var(--alive-ease-standard),\n box-shadow var(--alive-duration-fast) var(--alive-ease-standard);\n}\n.alive-select:hover { border-color: rgba(0,0,0,0.24); }\n.alive-select:focus {\n border-color: rgba(0,0,0,0.5);\n box-shadow: 0 0 0 3px rgba(0,0,0,0.07);\n}\n.alive-select:disabled {\n opacity: 0.45;\n cursor: not-allowed;\n}\n\n/* ── Checkbox / Radio ────────────────────────────────────────────── */\n\n.alive-checkbox,\n.alive-radio {\n width: 1rem;\n height: 1rem;\n border: 1.5px solid rgba(0,0,0,0.25);\n border-radius: 0.25rem;\n background: transparent;\n cursor: pointer;\n appearance: none;\n transition:\n background var(--alive-duration-fast) var(--alive-ease-standard),\n border-color var(--alive-duration-fast) var(--alive-ease-standard),\n box-shadow var(--alive-duration-fast) var(--alive-ease-standard);\n flex-shrink: 0;\n}\n.alive-radio { border-radius: 50%; }\n\n.alive-checkbox:checked,\n.alive-radio:checked {\n background-color: #0a0a0a;\n border-color: #0a0a0a;\n background-image: url(\"data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: center;\n background-size: 0.75rem;\n}\n.alive-radio:checked {\n background-image: url(\"data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e\");\n}\n.alive-checkbox:focus-visible,\n.alive-radio:focus-visible {\n box-shadow: 0 0 0 3px rgba(0,0,0,0.1);\n}\n\n/* ── Switch / Toggle ─────────────────────────────────────────────── */\n\n.alive-switch {\n position: relative;\n display: inline-flex;\n align-items: center;\n width: 2.75rem;\n height: 1.5rem;\n border-radius: 9999px;\n background: rgba(0,0,0,0.15);\n cursor: pointer;\n flex-shrink: 0;\n transition: background var(--alive-duration-fast) var(--alive-ease-standard);\n}\n.alive-switch::after {\n content: '';\n position: absolute;\n top: 0.1875rem;\n left: 0.1875rem;\n width: 1.125rem;\n height: 1.125rem;\n border-radius: 50%;\n background: #fff;\n box-shadow: 0 1px 4px rgba(0,0,0,0.2);\n transition: transform var(--alive-duration-normal) var(--alive-ease-emphasized);\n}\n.alive-switch[aria-checked=\"true\"],\n.alive-switch.is-checked {\n background: #22c55e;\n}\n.alive-switch[aria-checked=\"true\"]::after,\n.alive-switch.is-checked::after {\n transform: translateX(1.25rem);\n}\n.alive-switch[aria-checked=\"false\"][data-pending],\n.alive-switch.is-pending {\n opacity: 0.7;\n cursor: wait;\n}\n/* Sizes */\n.alive-switch-sm {\n width: 2.25rem;\n height: 1.25rem;\n}\n.alive-switch-sm::after { width: 0.875rem; height: 0.875rem; }\n.alive-switch-sm[aria-checked=\"true\"]::after,\n.alive-switch-sm.is-checked::after { transform: translateX(1rem); }\n\n.alive-switch-lg {\n width: 3.5rem;\n height: 2rem;\n}\n.alive-switch-lg::after { width: 1.5rem; height: 1.5rem; }\n.alive-switch-lg[aria-checked=\"true\"]::after,\n.alive-switch-lg.is-checked::after { transform: translateX(1.5rem); }\n\n/* ── Avatar ──────────────────────────────────────────────────────── */\n\n.alive-avatar {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: 2.5rem;\n height: 2.5rem;\n border-radius: 50%;\n overflow: hidden;\n font-size: 0.875rem;\n font-weight: 500;\n background: rgba(0,0,0,0.08);\n color: rgba(0,0,0,0.5);\n user-select: none;\n}\n.alive-avatar img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n.alive-avatar-xs { width: 1.5rem; height: 1.5rem; font-size: 0.625rem; }\n.alive-avatar-sm { width: 2rem; height: 2rem; font-size: 0.75rem; }\n.alive-avatar-lg { width: 3rem; height: 3rem; font-size: 1rem; }\n.alive-avatar-xl { width: 4rem; height: 4rem; font-size: 1.25rem; }\n.alive-avatar-2xl { width: 5rem; height: 5rem; font-size: 1.5rem; }\n\n/* Avatar group — overlapping stack */\n.alive-avatar-group {\n display: flex;\n}\n.alive-avatar-group .alive-avatar {\n box-shadow: 0 0 0 2px rgba(0,0,0,0.06);\n margin-left: -0.5rem;\n}\n.alive-avatar-group .alive-avatar:first-child {\n margin-left: 0;\n}\n\n/* ── Skeleton ────────────────────────────────────────────────────── */\n\n.alive-skeleton {\n border-radius: 0.375rem;\n background: linear-gradient(\n 90deg,\n rgba(0,0,0,0.06) 25%,\n rgba(0,0,0,0.1) 50%,\n rgba(0,0,0,0.06) 75%\n );\n background-size: 200% 100%;\n animation: alive-shimmer 1.6s ease-in-out infinite;\n}\n.alive-skeleton-text { height: 1em; border-radius: 0.25rem; }\n.alive-skeleton-circle { border-radius: 9999px; }\n.alive-skeleton-sm { animation-duration: 1.2s; }\n.alive-skeleton-lg { animation-duration: 2s; }\n\n/* ── Progress ────────────────────────────────────────────────────── */\n\n.alive-progress {\n display: block;\n width: 100%;\n height: 0.5rem;\n border-radius: 9999px;\n background: rgba(0,0,0,0.08);\n overflow: hidden;\n}\n.alive-progress-bar {\n height: 100%;\n border-radius: 9999px;\n background: #0a0a0a;\n transition: width var(--alive-duration-slow) var(--alive-ease-standard);\n}\n.alive-progress-xs { height: 0.125rem; }\n.alive-progress-sm { height: 0.25rem; }\n.alive-progress-lg { height: 0.75rem; }\n.alive-progress-xl { height: 1rem; }\n.alive-progress-indeterminate .alive-progress-bar {\n width: 40% !important;\n animation: alive-progress-indeterminate 1.5s ease-in-out infinite;\n}\n@keyframes alive-progress-indeterminate {\n 0% { transform: translateX(-150%); }\n 100% { transform: translateX(400%); }\n}\n\n/* ── Separator ───────────────────────────────────────────────────── */\n\n.alive-separator {\n display: block;\n width: 100%;\n height: 1px;\n background: rgba(0,0,0,0.08);\n border: none;\n margin: 0;\n}\n.alive-separator-v {\n display: inline-block;\n width: 1px;\n height: 1em;\n vertical-align: middle;\n background: rgba(0,0,0,0.08);\n margin: 0 0.5rem;\n}\n.alive-separator-label {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n font-size: 0.75rem;\n color: rgba(0,0,0,0.4);\n font-weight: 500;\n letter-spacing: 0.04em;\n text-transform: uppercase;\n}\n.alive-separator-label::before,\n.alive-separator-label::after {\n content: '';\n flex: 1;\n height: 1px;\n background: rgba(0,0,0,0.08);\n}\n\n/* ── Alert ───────────────────────────────────────────────────────── */\n\n.alive-alert {\n display: flex;\n align-items: flex-start;\n gap: 0.75rem;\n padding: 1rem 1.25rem;\n border-radius: 0.75rem;\n border: 1px solid transparent;\n font-size: 0.875rem;\n line-height: 1.55;\n}\n.alive-alert-title {\n font-weight: 600;\n margin-bottom: 0.25rem;\n}\n\n.alive-alert-info { background: rgba(96,165,250,0.08); border-color: rgba(96,165,250,0.2); color: #1d4ed8; }\n.alive-alert-success { background: rgba(74,222,128,0.08); border-color: rgba(74,222,128,0.22); color: #15803d; }\n.alive-alert-warning { background: rgba(251,191,36,0.10); border-color: rgba(251,191,36,0.25); color: #92400e; }\n.alive-alert-error { background: rgba(239,68,68,0.08); border-color: rgba(239,68,68,0.2); color: #dc2626; }\n\n/* ── Tooltip ─────────────────────────────────────────────────────── */\n\n.alive-tooltip-wrap {\n position: relative;\n display: inline-flex;\n}\n.alive-tooltip {\n position: absolute;\n z-index: 50;\n bottom: calc(100% + 8px);\n left: 50%;\n transform: translateX(-50%) translateY(4px);\n padding: 0.375rem 0.75rem;\n font-size: 0.75rem;\n font-weight: 500;\n line-height: 1.4;\n white-space: nowrap;\n color: #fff;\n background: rgba(10,10,10,0.92);\n border-radius: 0.5rem;\n box-shadow: 0 4px 16px rgba(0,0,0,0.14);\n pointer-events: none;\n opacity: 0;\n transition:\n opacity var(--alive-duration-fast) var(--alive-ease-standard),\n transform var(--alive-duration-fast) var(--alive-ease-emphasized);\n}\n.alive-tooltip::after {\n content: '';\n position: absolute;\n top: 100%;\n left: 50%;\n transform: translateX(-50%);\n border: 5px solid transparent;\n border-top-color: rgba(10,10,10,0.92);\n}\n.alive-tooltip-wrap:hover .alive-tooltip {\n opacity: 1;\n transform: translateX(-50%) translateY(0);\n}\n\n/* Tooltip placements */\n.alive-tooltip-bottom {\n top: calc(100% + 8px);\n bottom: auto;\n transform: translateX(-50%) translateY(-4px);\n}\n.alive-tooltip-bottom::after {\n top: auto;\n bottom: 100%;\n border-top-color: transparent;\n border-bottom-color: rgba(10,10,10,0.92);\n}\n.alive-tooltip-wrap:hover .alive-tooltip-bottom {\n transform: translateX(-50%) translateY(0);\n}\n\n/* ── Modal ───────────────────────────────────────────────────────── */\n\n.alive-backdrop {\n position: fixed;\n inset: 0;\n z-index: 40;\n background: rgba(0,0,0,0.45);\n backdrop-filter: blur(4px);\n animation: alive-fade-in var(--alive-duration-normal) var(--alive-ease-standard) both;\n}\n.alive-modal {\n position: fixed;\n inset: 0;\n z-index: 50;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 1rem;\n overflow-y: auto;\n}\n.alive-modal-content {\n position: relative;\n width: 100%;\n max-width: 32rem;\n max-height: calc(100dvh - 2rem);\n overflow-y: auto;\n border-radius: 1rem;\n background: #fff;\n border: 1px solid rgba(0,0,0,0.08);\n box-shadow:\n 0 24px 64px rgba(0,0,0,0.18),\n 0 8px 24px rgba(0,0,0,0.10);\n animation: alive-scale-up var(--alive-duration-slow) var(--alive-ease-emphasized) both;\n}\n.alive-modal-sm .alive-modal-content { max-width: 24rem; }\n.alive-modal-lg .alive-modal-content { max-width: 48rem; }\n.alive-modal-xl .alive-modal-content { max-width: 64rem; }\n.alive-modal-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 1.25rem 1.5rem;\n border-bottom: 1px solid rgba(0,0,0,0.06);\n}\n.alive-modal-body { padding: 1.5rem; }\n.alive-modal-footer {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 0.75rem;\n padding: 1rem 1.5rem;\n border-top: 1px solid rgba(0,0,0,0.06);\n}\n\n/* ── Drawer / Sheet ──────────────────────────────────────────────── */\n\n.alive-drawer {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n z-index: 50;\n width: 100%;\n max-width: 24rem;\n background: #fff;\n border-left: 1px solid rgba(0,0,0,0.08);\n box-shadow: -8px 0 40px rgba(0,0,0,0.1);\n display: flex;\n flex-direction: column;\n animation: alive-fade-left var(--alive-duration-slow) var(--alive-ease-emphasized) both;\n}\n.alive-drawer-header { padding: 1.25rem 1.5rem; border-bottom: 1px solid rgba(0,0,0,0.06); }\n.alive-drawer-body { flex: 1; overflow-y: auto; padding: 1.5rem; }\n.alive-drawer-footer { padding: 1rem 1.5rem; border-top: 1px solid rgba(0,0,0,0.06); }\n\n/* ── Navigation bar ──────────────────────────────────────────────── */\n\n.alive-nav {\n position: sticky;\n top: 0;\n z-index: 50;\n display: flex;\n align-items: center;\n height: 3.5rem;\n padding: 0 1.5rem;\n border-bottom: 1px solid rgba(0,0,0,0.07);\n background: rgba(255,255,255,0.85);\n backdrop-filter: blur(12px);\n -webkit-backdrop-filter: blur(12px);\n gap: 1rem;\n}\n.alive-nav-brand {\n display: flex;\n align-items: center;\n gap: 0.625rem;\n font-weight: 600;\n font-size: 0.9375rem;\n text-decoration: none;\n color: inherit;\n}\n.alive-nav-items {\n display: flex;\n align-items: center;\n gap: 0.25rem;\n flex: 1;\n}\n.alive-nav-end {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n margin-left: auto;\n}\n.alive-nav-link {\n padding: 0.4375rem 0.75rem;\n border-radius: 0.5rem;\n font-size: 0.8125rem;\n font-weight: 500;\n text-decoration: none;\n color: rgba(0,0,0,0.55);\n transition: background var(--alive-duration-fast) var(--alive-ease-standard), color var(--alive-duration-fast) var(--alive-ease-standard);\n cursor: pointer;\n}\n.alive-nav-link:hover { background: rgba(0,0,0,0.05); color: rgba(0,0,0,0.85); }\n.alive-nav-link.is-active { background: rgba(0,0,0,0.07); color: rgba(0,0,0,0.9); }\n\n/* ── Tabs ────────────────────────────────────────────────────────── */\n\n.alive-tabs {\n display: flex;\n border-bottom: 1px solid rgba(0,0,0,0.08);\n gap: 0;\n position: relative;\n}\n.alive-tab {\n padding: 0.6875rem 1rem;\n font-size: 0.875rem;\n font-weight: 500;\n color: rgba(0,0,0,0.45);\n border: none;\n background: transparent;\n cursor: pointer;\n position: relative;\n border-bottom: 2px solid transparent;\n margin-bottom: -1px;\n transition: color var(--alive-duration-fast) var(--alive-ease-standard);\n}\n.alive-tab:hover { color: rgba(0,0,0,0.72); }\n.alive-tab.is-active {\n color: rgba(0,0,0,0.9);\n border-bottom-color: rgba(0,0,0,0.9);\n}\n/* Sliding indicator variant */\n.alive-tabs-indicator {\n position: absolute;\n bottom: -1px;\n height: 2px;\n background: #0a0a0a;\n border-radius: 2px 2px 0 0;\n transition:\n left var(--alive-duration-normal) var(--alive-ease-emphasized),\n width var(--alive-duration-normal) var(--alive-ease-emphasized);\n}\n\n/* Pill tabs variant */\n.alive-tabs-pills {\n border-bottom: none;\n gap: 0.25rem;\n background: rgba(0,0,0,0.05);\n padding: 0.25rem;\n border-radius: 0.625rem;\n}\n.alive-tabs-pills .alive-tab {\n border-radius: 0.375rem;\n border-bottom: none;\n margin-bottom: 0;\n}\n.alive-tabs-pills .alive-tab.is-active {\n background: #fff;\n color: rgba(0,0,0,0.9);\n box-shadow: 0 1px 3px rgba(0,0,0,0.1);\n border-bottom-color: transparent;\n}\n\n/* ── Dropdown / Menu ─────────────────────────────────────────────── */\n\n.alive-dropdown {\n position: absolute;\n z-index: 50;\n min-width: 12rem;\n padding: 0.375rem;\n border-radius: 0.75rem;\n background: #fff;\n border: 1px solid rgba(0,0,0,0.08);\n box-shadow:\n 0 8px 32px rgba(0,0,0,0.1),\n 0 2px 8px rgba(0,0,0,0.06);\n animation: alive-scale-up var(--alive-duration-fast) var(--alive-ease-emphasized) both;\n transform-origin: top left;\n}\n.alive-dropdown-item {\n display: flex;\n align-items: center;\n gap: 0.625rem;\n width: 100%;\n padding: 0.5625rem 0.75rem;\n font-size: 0.875rem;\n font-weight: 400;\n color: rgba(0,0,0,0.75);\n border-radius: 0.5rem;\n border: none;\n background: transparent;\n cursor: pointer;\n text-align: left;\n text-decoration: none;\n transition: background var(--alive-duration-fast) var(--alive-ease-standard), color var(--alive-duration-fast) var(--alive-ease-standard);\n}\n.alive-dropdown-item:hover {\n background: rgba(0,0,0,0.05);\n color: rgba(0,0,0,0.9);\n}\n.alive-dropdown-item.is-active {\n background: rgba(0,0,0,0.07);\n color: rgba(0,0,0,0.9);\n font-weight: 500;\n}\n.alive-dropdown-item-destructive { color: #dc2626; }\n.alive-dropdown-item-destructive:hover { background: rgba(239,68,68,0.08); color: #dc2626; }\n.alive-dropdown-separator {\n height: 1px;\n background: rgba(0,0,0,0.07);\n margin: 0.25rem 0;\n border: none;\n}\n.alive-dropdown-label {\n padding: 0.375rem 0.75rem;\n font-size: 0.6875rem;\n font-weight: 600;\n letter-spacing: 0.06em;\n text-transform: uppercase;\n color: rgba(0,0,0,0.35);\n}\n\n/* ── Table ───────────────────────────────────────────────────────── */\n\n.alive-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 0.875rem;\n text-align: left;\n}\n.alive-table th {\n padding: 0.75rem 1rem;\n font-size: 0.75rem;\n font-weight: 600;\n letter-spacing: 0.04em;\n text-transform: uppercase;\n color: rgba(0,0,0,0.45);\n border-bottom: 1px solid rgba(0,0,0,0.08);\n white-space: nowrap;\n}\n.alive-table td {\n padding: 0.875rem 1rem;\n border-bottom: 1px solid rgba(0,0,0,0.05);\n color: rgba(0,0,0,0.75);\n transition: background var(--alive-duration-fast) var(--alive-ease-standard);\n}\n.alive-table tr:hover td { background: rgba(0,0,0,0.02); }\n.alive-table tr:last-child td { border-bottom: none; }\n\n/* Table variants */\n.alive-table-striped tr:nth-child(even) td { background: rgba(0,0,0,0.018); }\n.alive-table-bordered td,\n.alive-table-bordered th { border: 1px solid rgba(0,0,0,0.07); }\n\n/* ── Chip ────────────────────────────────────────────────────────── */\n\n.alive-chip {\n display: inline-flex;\n align-items: center;\n gap: 0.375rem;\n padding: 0.3125rem 0.75rem;\n font-size: 0.8125rem;\n font-weight: 500;\n border-radius: 9999px;\n background: rgba(0,0,0,0.06);\n color: rgba(0,0,0,0.65);\n border: 1px solid rgba(0,0,0,0.1);\n cursor: default;\n user-select: none;\n transition:\n background var(--alive-duration-fast) var(--alive-ease-standard),\n border-color var(--alive-duration-fast) var(--alive-ease-standard);\n}\n.alive-chip:hover { background: rgba(0,0,0,0.09); border-color: rgba(0,0,0,0.16); }\n.alive-chip.is-selected {\n background: rgba(0,0,0,0.1);\n color: rgba(0,0,0,0.85);\n border-color: rgba(0,0,0,0.2);\n}\n.alive-chip-dismiss {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 1rem;\n height: 1rem;\n border-radius: 50%;\n cursor: pointer;\n opacity: 0.5;\n transition: opacity var(--alive-duration-fast) var(--alive-ease-standard), background var(--alive-duration-fast) var(--alive-ease-standard);\n}\n.alive-chip-dismiss:hover { opacity: 1; background: rgba(0,0,0,0.12); }\n\n/* ── Stack ───────────────────────────────────────────────────────── */\n\n.alive-stack { display: flex; }\n.alive-stack-v { flex-direction: column; }\n.alive-stack-h { flex-direction: row; }\n\n/* ── Container ───────────────────────────────────────────────────── */\n\n.alive-container {\n width: 100%;\n margin-left: auto;\n margin-right: auto;\n padding-left: 1rem;\n padding-right: 1rem;\n}\n@media (min-width: 640px) { .alive-container { max-width: 640px; padding-left: 1.5rem; padding-right: 1.5rem; } }\n@media (min-width: 768px) { .alive-container { max-width: 768px; } }\n@media (min-width: 1024px) { .alive-container { max-width: 1024px; padding-left: 2rem; padding-right: 2rem; } }\n@media (min-width: 1280px) { .alive-container { max-width: 1280px; } }\n@media (min-width: 1536px) { .alive-container { max-width: 1536px; } }\n\n/* ── Cluster (responsive flex wrap) ─────────────────────────────── */\n\n.alive-cluster {\n display: flex;\n flex-wrap: wrap;\n gap: 0.75rem;\n}\n\n/* ── Focus ring ──────────────────────────────────────────────────── */\n\n.alive-focus-ring:focus-visible {\n outline: 2px solid rgba(0,0,0,0.75);\n outline-offset: 2px;\n}\n\n/* ── Overlays & surfaces ─────────────────────────────────────────── */\n\n.alive-overlay {\n position: fixed;\n inset: 0;\n background: rgba(0,0,0,0.45);\n backdrop-filter: blur(4px);\n -webkit-backdrop-filter: blur(4px);\n}\n\n/* ── Toast / Snackbar ────────────────────────────────────────────── */\n\n.alive-toast-region {\n position: fixed;\n bottom: 1.25rem;\n right: 1.25rem;\n z-index: 60;\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n pointer-events: none;\n}\n.alive-toast {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n padding: 0.875rem 1.125rem;\n border-radius: 0.75rem;\n background: rgba(10,10,10,0.94);\n color: #fff;\n font-size: 0.875rem;\n font-weight: 500;\n box-shadow: 0 8px 32px rgba(0,0,0,0.2);\n border: 1px solid rgba(255,255,255,0.1);\n pointer-events: auto;\n min-width: 16rem;\n max-width: 24rem;\n animation: alive-fade-right var(--alive-duration-slow) var(--alive-ease-emphasized) both;\n}\n.alive-toast-icon { flex-shrink: 0; }\n.alive-toast-body { flex: 1; min-width: 0; }\n.alive-toast-title { font-weight: 600; }\n.alive-toast-desc { font-size: 0.8125rem; opacity: 0.7; margin-top: 0.125rem; }\n.alive-toast-close {\n flex-shrink: 0;\n opacity: 0.5;\n cursor: pointer;\n transition: opacity var(--alive-duration-fast) var(--alive-ease-standard);\n}\n.alive-toast-close:hover { opacity: 1; }\n\n/* Toast variants */\n.alive-toast-success { border-color: rgba(74,222,128,0.3); }\n.alive-toast-error { border-color: rgba(239,68,68,0.3); }\n.alive-toast-warning { border-color: rgba(251,191,36,0.3); }\n\n/* ── Command palette ─────────────────────────────────────────────── */\n\n.alive-command {\n position: fixed;\n inset: 0;\n z-index: 60;\n display: flex;\n align-items: flex-start;\n justify-content: center;\n padding-top: 10vh;\n}\n.alive-command-panel {\n width: 100%;\n max-width: 38rem;\n border-radius: 1rem;\n background: #fff;\n border: 1px solid rgba(0,0,0,0.1);\n box-shadow:\n 0 24px 80px rgba(0,0,0,0.22),\n 0 8px 24px rgba(0,0,0,0.12);\n overflow: hidden;\n animation: alive-scale-up var(--alive-duration-slow) var(--alive-ease-emphasized) both;\n}\n.alive-command-input-wrap {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n padding: 1rem 1.25rem;\n border-bottom: 1px solid rgba(0,0,0,0.08);\n}\n.alive-command-input {\n flex: 1;\n font-size: 1rem;\n border: none;\n outline: none;\n background: transparent;\n color: inherit;\n}\n.alive-command-list {\n max-height: 24rem;\n overflow-y: auto;\n padding: 0.375rem;\n}\n.alive-command-group-label {\n padding: 0.5rem 0.75rem 0.25rem;\n font-size: 0.6875rem;\n font-weight: 600;\n letter-spacing: 0.06em;\n text-transform: uppercase;\n color: rgba(0,0,0,0.35);\n}\n.alive-command-item {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n padding: 0.625rem 0.75rem;\n border-radius: 0.5rem;\n font-size: 0.875rem;\n cursor: pointer;\n color: rgba(0,0,0,0.75);\n transition: background var(--alive-duration-fast) var(--alive-ease-standard), color var(--alive-duration-fast) var(--alive-ease-standard);\n}\n.alive-command-item:hover,\n.alive-command-item.is-active {\n background: rgba(0,0,0,0.05);\n color: rgba(0,0,0,0.9);\n}\n.alive-command-shortcut {\n margin-left: auto;\n font-size: 0.75rem;\n opacity: 0.4;\n font-family: ui-monospace, monospace;\n}\n\n/* ── Popover ─────────────────────────────────────────────────────── */\n\n.alive-popover {\n position: absolute;\n z-index: 50;\n padding: 0.75rem;\n border-radius: 0.75rem;\n background: #fff;\n border: 1px solid rgba(0,0,0,0.08);\n box-shadow:\n 0 8px 32px rgba(0,0,0,0.1),\n 0 2px 8px rgba(0,0,0,0.06);\n animation: alive-scale-up var(--alive-duration-fast) var(--alive-ease-emphasized) both;\n}\n\n/* ── Sidebar ─────────────────────────────────────────────────────── */\n\n.alive-sidebar {\n display: flex;\n flex-direction: column;\n width: 15rem;\n height: 100%;\n border-right: 1px solid rgba(0,0,0,0.07);\n background: #fafafa;\n overflow-y: auto;\n flex-shrink: 0;\n}\n.alive-sidebar-section {\n padding: 1rem 0.75rem;\n}\n.alive-sidebar-section + .alive-sidebar-section {\n border-top: 1px solid rgba(0,0,0,0.06);\n}\n.alive-sidebar-label {\n padding: 0 0.5rem 0.375rem;\n font-size: 0.6875rem;\n font-weight: 600;\n letter-spacing: 0.06em;\n text-transform: uppercase;\n color: rgba(0,0,0,0.35);\n}\n.alive-sidebar-item {\n display: flex;\n align-items: center;\n gap: 0.625rem;\n padding: 0.5rem 0.625rem;\n font-size: 0.875rem;\n font-weight: 400;\n border-radius: 0.5rem;\n color: rgba(0,0,0,0.6);\n cursor: pointer;\n text-decoration: none;\n transition: background var(--alive-duration-fast) var(--alive-ease-standard), color var(--alive-duration-fast) var(--alive-ease-standard);\n}\n.alive-sidebar-item:hover { background: rgba(0,0,0,0.05); color: rgba(0,0,0,0.85); }\n.alive-sidebar-item.is-active {\n background: rgba(0,0,0,0.08);\n color: rgba(0,0,0,0.9);\n font-weight: 500;\n}\n\n/* ── Utility: visually hidden (screen reader) ────────────────────── */\n.alive-sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0,0,0,0);\n white-space: nowrap;\n border-width: 0;\n}\n\n/* ── Kbd ─────────────────────────────────────────────────────────── */\n\n.alive-kbd {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 0.1875rem 0.4375rem;\n font-family: ui-monospace, SFMono-Regular, Menlo, monospace;\n font-size: 0.75rem;\n font-weight: 500;\n line-height: 1;\n color: rgba(0,0,0,0.65);\n background: rgba(0,0,0,0.04);\n border: 1px solid rgba(0,0,0,0.14);\n border-bottom-width: 2px;\n border-radius: 0.3125rem;\n white-space: nowrap;\n user-select: none;\n}\n\n/* ── Form group ──────────────────────────────────────────────────── */\n\n.alive-form-group {\n display: flex;\n flex-direction: column;\n gap: 0.375rem;\n}\n.alive-label {\n display: block;\n font-size: 0.875rem;\n font-weight: 500;\n color: rgba(0,0,0,0.8);\n}\n.alive-label-required::after {\n content: ' *';\n color: #dc2626;\n}\n.alive-helper {\n font-size: 0.8125rem;\n color: rgba(0,0,0,0.45);\n line-height: 1.4;\n}\n.alive-error-msg {\n font-size: 0.8125rem;\n color: #dc2626;\n line-height: 1.4;\n}\n\n/* ── Breadcrumb ──────────────────────────────────────────────────── */\n\n.alive-breadcrumb {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 0.25rem;\n font-size: 0.875rem;\n color: rgba(0,0,0,0.45);\n list-style: none;\n margin: 0;\n padding: 0;\n}\n.alive-breadcrumb-item {\n display: flex;\n align-items: center;\n gap: 0.25rem;\n}\n.alive-breadcrumb-item a {\n color: rgba(0,0,0,0.55);\n text-decoration: none;\n transition: color var(--alive-duration-fast) var(--alive-ease-standard);\n}\n.alive-breadcrumb-item a:hover { color: rgba(0,0,0,0.9); }\n.alive-breadcrumb-item[aria-current=\"page\"] { color: rgba(0,0,0,0.85); font-weight: 500; }\n.alive-breadcrumb-sep {\n color: rgba(0,0,0,0.25);\n user-select: none;\n font-size: 0.8125rem;\n}\n\n/* ── Accordion ───────────────────────────────────────────────────── */\n\n.alive-accordion {\n display: flex;\n flex-direction: column;\n border: 1px solid rgba(0,0,0,0.08);\n border-radius: 0.75rem;\n overflow: hidden;\n}\n.alive-accordion-item {\n border-bottom: 1px solid rgba(0,0,0,0.07);\n}\n.alive-accordion-item:last-child { border-bottom: none; }\n.alive-accordion-trigger {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n padding: 1rem 1.25rem;\n font-size: 0.9375rem;\n font-weight: 500;\n color: rgba(0,0,0,0.8);\n background: transparent;\n border: none;\n cursor: pointer;\n text-align: left;\n gap: 0.75rem;\n transition: background var(--alive-duration-fast) var(--alive-ease-standard), color var(--alive-duration-fast) var(--alive-ease-standard);\n}\n.alive-accordion-trigger:hover { background: rgba(0,0,0,0.025); color: rgba(0,0,0,0.9); }\n.alive-accordion-icon {\n flex-shrink: 0;\n width: 1rem;\n height: 1rem;\n color: rgba(0,0,0,0.35);\n transition: transform var(--alive-duration-normal) var(--alive-ease-emphasized);\n}\n.alive-accordion-item.is-open .alive-accordion-icon { transform: rotate(180deg); }\n.alive-accordion-content {\n overflow: hidden;\n font-size: 0.875rem;\n line-height: 1.6;\n color: rgba(0,0,0,0.6);\n}\n.alive-accordion-content-inner { padding: 0 1.25rem 1.25rem; }\n\n/* ── JS Runtime: is-open / is-active state helpers ──────────────── */\n\n/* Modal and Drawer: hidden by default, shown when .is-open is added by runtime */\n[data-alive-modal],\n[data-alive-drawer] {\n display: none;\n}\n[data-alive-modal].is-open,\n[data-alive-drawer].is-open {\n display: flex;\n}\n\n/* Dropdown: hidden by default */\n[data-alive-dropdown-menu] {\n display: none;\n}\n[data-alive-dropdown-menu].is-open {\n display: block;\n}\n\n/* Accordion content: collapsed by default, expanded when parent has .is-open */\n[data-alive-content] {\n display: grid;\n grid-template-rows: 0fr;\n transition: grid-template-rows var(--alive-duration-normal) var(--alive-ease-standard);\n}\n[data-alive-content] > * {\n overflow: hidden;\n}\n[data-alive-accordion-item].is-open [data-alive-content] {\n grid-template-rows: 1fr;\n}\n\n/* Tabs: panels hidden by default, shown when .is-active */\n[data-alive-panel] {\n display: none;\n}\n[data-alive-panel].is-active {\n display: block;\n}\n[data-alive-tab].is-active {\n color: rgba(0,0,0,0.9);\n border-bottom-color: rgba(0,0,0,0.9);\n}\n\n/* ── Pagination ──────────────────────────────────────────────────── */\n\n.alive-pagination {\n display: flex;\n align-items: center;\n gap: 0.25rem;\n list-style: none;\n margin: 0;\n padding: 0;\n}\n.alive-page-item {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 2.25rem;\n height: 2.25rem;\n padding: 0 0.625rem;\n font-size: 0.875rem;\n font-weight: 500;\n border-radius: 0.5rem;\n border: 1px solid transparent;\n color: rgba(0,0,0,0.55);\n cursor: pointer;\n background: transparent;\n text-decoration: none;\n user-select: none;\n transition:\n background var(--alive-duration-fast) var(--alive-ease-standard),\n border-color var(--alive-duration-fast) var(--alive-ease-standard),\n color var(--alive-duration-fast) var(--alive-ease-standard);\n}\n.alive-page-item:hover { background: rgba(0,0,0,0.05); color: rgba(0,0,0,0.85); }\n.alive-page-item.is-active {\n background: rgba(0,0,0,0.08);\n border-color: rgba(0,0,0,0.14);\n color: rgba(0,0,0,0.9);\n font-weight: 600;\n cursor: default;\n}\n.alive-page-item:disabled,\n.alive-page-item.is-disabled {\n opacity: 0.35;\n cursor: not-allowed;\n pointer-events: none;\n}\n.alive-page-gap {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 2.25rem;\n height: 2.25rem;\n font-size: 0.875rem;\n color: rgba(0,0,0,0.3);\n user-select: none;\n}\n`\n}\n","// Escape special characters in a class name for use as a CSS selector\nexport function escapeSelector(cls: string): string {\n let result = cls\n .replace(/\\./g, '\\\\.')\n .replace(/:/g, '\\\\:')\n .replace(/\\[/g, '\\\\[')\n .replace(/\\]/g, '\\\\]')\n .replace(/\\//g, '\\\\/')\n .replace(/#/g, '\\\\#')\n .replace(/%/g, '\\\\%')\n // CSS identifiers cannot start with a plain hyphen followed by a non-letter,\n // so escape a leading hyphen (used by negative utilities like -m-4, -translate-x-full)\n if (result.startsWith('-')) {\n result = '\\\\' + result\n }\n return result\n}\n\n// Extract the arbitrary value from a class token like `w-[100px]` → `100px`\nexport function parseArbitrary(cls: string, prefix: string): string | null {\n const re = new RegExp(`^${prefix}-\\\\[(.+)\\\\]$`)\n const m = cls.match(re)\n return m ? m[1] : null\n}\n\n// Build a CSS rule block\nexport function rule(selector: string, declarations: Record<string, string>): string {\n const decls = Object.entries(declarations)\n .map(([prop, val]) => ` ${prop}: ${val};`)\n .join('\\n')\n return `.${selector} {\\n${decls}\\n}`\n}\n\n// Resolve a color value from the theme colors map\n// e.g. resolveColor(colors, 'blue', '500') → '#3b82f6'\nexport function resolveColor(\n colors: Record<string, string | Record<string, string>>,\n name: string,\n shade?: string,\n): string | null {\n if (!Object.prototype.hasOwnProperty.call(colors, name)) return null\n const entry = colors[name]\n if (typeof entry === 'string') return entry\n if (!shade) return null\n if (!Object.prototype.hasOwnProperty.call(entry, shade)) return null\n return entry[shade] ?? null\n}\n\n// Parse a class name into variant prefixes and the base utility\n// e.g. 'hover:md:bg-blue-500' → { variants: ['hover', 'md'], base: 'bg-blue-500' }\n// Bracket-aware: colons inside [...] (e.g. bg-[url(https://...)]) are not treated as separators\nexport function parseVariants(cls: string): { variants: string[]; base: string } {\n const variants: string[] = []\n let depth = 0\n let current = ''\n for (const ch of cls) {\n if (ch === '[') depth++\n else if (ch === ']') depth--\n else if (ch === ':' && depth === 0) {\n variants.push(current)\n current = ''\n continue\n }\n current += ch\n }\n return { variants, base: current }\n}\n\n// Wrap a CSS rule with state/responsive/dark variants\nexport function wrapVariants(\n cssRule: string,\n variants: string[],\n originalClass: string,\n screens: Record<string, string>,\n darkMode: 'media' | 'class',\n): string {\n let selector = `.${escapeSelector(originalClass)}`\n let mediaQueries: string[] = []\n\n for (const variant of variants) {\n switch (variant) {\n case 'hover':\n selector += ':hover'\n break\n case 'focus':\n selector += ':focus'\n break\n case 'focus-visible':\n selector += ':focus-visible'\n break\n case 'active':\n selector += ':active'\n break\n case 'disabled':\n selector += ':disabled'\n break\n case 'visited':\n selector += ':visited'\n break\n case 'first':\n selector += ':first-child'\n break\n case 'last':\n selector += ':last-child'\n break\n case 'odd':\n selector += ':nth-child(odd)'\n break\n case 'even':\n selector += ':nth-child(even)'\n break\n case 'group-hover':\n selector = `.group:hover ${selector}`\n break\n case 'dark':\n if (darkMode === 'class') {\n selector = `.dark ${selector}`\n } else {\n mediaQueries.push('@media (prefers-color-scheme: dark)')\n }\n break\n default:\n if (screens[variant]) {\n mediaQueries.push(`@media (min-width: ${screens[variant]})`)\n }\n }\n }\n\n // Extract declarations from the base rule and rebuild with correct selector\n const declMatch = cssRule.match(/\\{([\\s\\S]*)\\}/)\n if (!declMatch) return cssRule\n\n let result = `${selector} {\\n${declMatch[1].trim()}\\n}`\n\n // Wrap in media queries (outermost last)\n for (const mq of mediaQueries.reverse()) {\n result = `${mq} {\\n ${result.split('\\n').join('\\n ')}\\n}`\n }\n\n return result\n}\n","import type { ResolvedConfig } from '../types'\nimport { rule, resolveColor, escapeSelector } from './utils'\n\n// Properties that benefit from alive motion transitions\nconst TRANSITIONED = `\n transition-property: {prop};\n transition-duration: var(--alive-duration, 0ms);\n transition-timing-function: var(--alive-ease, linear);`\n\nfunction transitioned(prop: string): string {\n return TRANSITIONED.replace('{prop}', prop)\n}\n\nexport function generateColors(classes: Set<string>, config: ResolvedConfig): string[] {\n const { colors } = config.theme\n const rules: string[] = []\n\n for (const cls of classes) {\n const generated = matchColor(cls, colors)\n if (generated) rules.push(generated)\n }\n\n return rules\n}\n\nfunction matchColor(\n cls: string,\n colors: ResolvedConfig['theme']['colors'],\n): string | null {\n // bg-{color} | bg-{color}-{shade}\n const bgMatch = cls.match(/^bg-([a-z]+)(?:-(\\d+))?$/)\n if (bgMatch) {\n const value = resolveColor(colors, bgMatch[1], bgMatch[2])\n if (value) {\n return `.${cls} {\\n background-color: ${value};${transitioned('background-color')}\\n}`\n }\n }\n\n // text-{color} | text-{color}-{shade}\n const textColorMatch = cls.match(/^text-([a-z]+)(?:-(\\d+))?$/)\n if (textColorMatch) {\n const value = resolveColor(colors, textColorMatch[1], textColorMatch[2])\n if (value) {\n return `.${cls} {\\n color: ${value};${transitioned('color')}\\n}`\n }\n }\n\n // border-{color} | border-{color}-{shade}\n const borderColorMatch = cls.match(/^border-([a-z]+)(?:-(\\d+))?$/)\n if (borderColorMatch) {\n const value = resolveColor(colors, borderColorMatch[1], borderColorMatch[2])\n if (value) {\n return `.${cls} {\\n border-color: ${value};${transitioned('border-color')}\\n}`\n }\n }\n\n // ring-{color} | ring-{color}-{shade}\n const ringColorMatch = cls.match(/^ring-([a-z]+)(?:-(\\d+))?$/)\n if (ringColorMatch) {\n const value = resolveColor(colors, ringColorMatch[1], ringColorMatch[2])\n if (value) {\n return `.${cls} {\\n --alive-ring-color: ${value};\\n}`\n }\n }\n\n // outline-{color} | outline-{color}-{shade}\n const outlineColorMatch = cls.match(/^outline-([a-z]+)(?:-(\\d+))?$/)\n if (outlineColorMatch) {\n const value = resolveColor(colors, outlineColorMatch[1], outlineColorMatch[2])\n if (value) {\n return `.${cls} {\\n outline-color: ${value};\\n}`\n }\n }\n\n // fill-{color} | fill-{color}-{shade}\n const fillMatch = cls.match(/^fill-([a-z]+)(?:-(\\d+))?$/)\n if (fillMatch) {\n const value = resolveColor(colors, fillMatch[1], fillMatch[2])\n if (value) {\n return `.${cls} {\\n fill: ${value};\\n}`\n }\n }\n\n // stroke-{color} | stroke-{color}-{shade}\n const strokeMatch = cls.match(/^stroke-([a-z]+)(?:-(\\d+))?$/)\n if (strokeMatch) {\n const value = resolveColor(colors, strokeMatch[1], strokeMatch[2])\n if (value) {\n return `.${cls} {\\n stroke: ${value};\\n}`\n }\n }\n\n // decoration-{color} | decoration-{color}-{shade}\n const decorationMatch = cls.match(/^decoration-([a-z]+)(?:-(\\d+))?$/)\n if (decorationMatch) {\n const value = resolveColor(colors, decorationMatch[1], decorationMatch[2])\n if (value) {\n return `.${cls} {\\n text-decoration-color: ${value};\\n}`\n }\n }\n\n // caret-{color} | caret-{color}-{shade}\n const caretMatch = cls.match(/^caret-([a-z]+)(?:-(\\d+))?$/)\n if (caretMatch) {\n const value = resolveColor(colors, caretMatch[1], caretMatch[2])\n if (value) {\n return `.${cls} {\\n caret-color: ${value};\\n}`\n }\n }\n\n // accent-{color} | accent-{color}-{shade}\n const accentMatch = cls.match(/^accent-([a-z]+)(?:-(\\d+))?$/)\n if (accentMatch) {\n const value = resolveColor(colors, accentMatch[1], accentMatch[2])\n if (value) {\n return `.${cls} {\\n accent-color: ${value};\\n}`\n }\n }\n\n // shadow-{color} | shadow-{color}-{shade}\n const shadowColorMatch = cls.match(/^shadow-([a-z]+)-(\\d+)$/)\n if (shadowColorMatch) {\n const value = resolveColor(colors, shadowColorMatch[1], shadowColorMatch[2])\n if (value) {\n return `.${cls} {\\n --alive-shadow-color: ${value};\\n}`\n }\n }\n\n // ── Arbitrary color values ────────────────────────────────────────\n\n const arbBgMatch = cls.match(/^bg-\\[(.+)\\]$/)\n if (arbBgMatch) {\n const val = arbBgMatch[1]\n const escaped = escapeSelector(cls)\n // Support both colors and url() / gradient values\n if (val.startsWith('url(') || val.startsWith('linear-gradient') || val.startsWith('radial-gradient')) {\n return `.${escaped} {\\n background-image: ${val};${transitioned('background-image')}\\n}`\n }\n return `.${escaped} {\\n background-color: ${val};${transitioned('background-color')}\\n}`\n }\n\n const arbTextMatch = cls.match(/^text-\\[(.+)\\]$/)\n if (arbTextMatch) {\n return `.${escapeSelector(cls)} {\\n color: ${arbTextMatch[1]};${transitioned('color')}\\n}`\n }\n\n const arbBorderColorMatch = cls.match(/^border-\\[#[0-9a-fA-F]|^border-\\[rgb|^border-\\[hsl|^border-\\[oklch/)\n if (arbBorderColorMatch) {\n const m = cls.match(/^border-\\[(.+)\\]$/)\n if (m) {\n return `.${escapeSelector(cls)} {\\n border-color: ${m[1]};${transitioned('border-color')}\\n}`\n }\n }\n\n const arbFillMatch = cls.match(/^fill-\\[(.+)\\]$/)\n if (arbFillMatch) {\n return `.${escapeSelector(cls)} {\\n fill: ${arbFillMatch[1]};\\n}`\n }\n\n const arbStrokeMatch = cls.match(/^stroke-\\[(.+)\\]$/)\n if (arbStrokeMatch) {\n return `.${escapeSelector(cls)} {\\n stroke: ${arbStrokeMatch[1]};\\n}`\n }\n\n return null\n}\n\nexport { matchColor as matchColorClass }\n","import type { ResolvedConfig } from '../types'\nimport { escapeSelector } from './utils'\n\nexport function generateSpacing(classes: Set<string>, config: ResolvedConfig): string[] {\n const { spacing } = config.theme\n const rules: string[] = []\n\n for (const cls of classes) {\n const generated = matchSpacing(cls, spacing)\n if (generated) rules.push(generated)\n }\n\n return rules\n}\n\nfunction has(obj: Record<string, string>, key: string): boolean {\n return typeof obj[key] === 'string'\n}\n\nfunction matchSpacing(cls: string, spacing: Record<string, string>): string | null {\n // Padding\n const pMatch = cls.match(/^p-(.+)$/)\n if (pMatch && has(spacing, pMatch[1])) {\n return `.${cls} { padding: ${spacing[pMatch[1]]}; }`\n }\n\n const pxMatch = cls.match(/^px-(.+)$/)\n if (pxMatch && has(spacing, pxMatch[1])) {\n return `.${cls} { padding-left: ${spacing[pxMatch[1]]}; padding-right: ${spacing[pxMatch[1]]}; }`\n }\n\n const pyMatch = cls.match(/^py-(.+)$/)\n if (pyMatch && has(spacing, pyMatch[1])) {\n return `.${cls} { padding-top: ${spacing[pyMatch[1]]}; padding-bottom: ${spacing[pyMatch[1]]}; }`\n }\n\n const ptMatch = cls.match(/^pt-(.+)$/)\n if (ptMatch && has(spacing, ptMatch[1])) {\n return `.${cls} { padding-top: ${spacing[ptMatch[1]]}; }`\n }\n\n const prMatch = cls.match(/^pr-(.+)$/)\n if (prMatch && has(spacing, prMatch[1])) {\n return `.${cls} { padding-right: ${spacing[prMatch[1]]}; }`\n }\n\n const pbMatch = cls.match(/^pb-(.+)$/)\n if (pbMatch && has(spacing, pbMatch[1])) {\n return `.${cls} { padding-bottom: ${spacing[pbMatch[1]]}; }`\n }\n\n const plMatch = cls.match(/^pl-(.+)$/)\n if (plMatch && has(spacing, plMatch[1])) {\n return `.${cls} { padding-left: ${spacing[plMatch[1]]}; }`\n }\n\n // Margin\n const mMatch = cls.match(/^m-(.+)$/)\n if (mMatch) {\n if (mMatch[1] === 'auto') return `.${cls} { margin: auto; }`\n if (has(spacing, mMatch[1])) return `.${cls} { margin: ${spacing[mMatch[1]]}; }`\n }\n\n const mxMatch = cls.match(/^mx-(.+)$/)\n if (mxMatch) {\n if (mxMatch[1] === 'auto') return `.${cls} { margin-left: auto; margin-right: auto; }`\n if (has(spacing, mxMatch[1])) return `.${cls} { margin-left: ${spacing[mxMatch[1]]}; margin-right: ${spacing[mxMatch[1]]}; }`\n }\n\n const myMatch = cls.match(/^my-(.+)$/)\n if (myMatch) {\n if (myMatch[1] === 'auto') return `.${cls} { margin-top: auto; margin-bottom: auto; }`\n if (has(spacing, myMatch[1])) return `.${cls} { margin-top: ${spacing[myMatch[1]]}; margin-bottom: ${spacing[myMatch[1]]}; }`\n }\n\n const mtMatch = cls.match(/^mt-(.+)$/)\n if (mtMatch) {\n if (mtMatch[1] === 'auto') return `.${cls} { margin-top: auto; }`\n if (has(spacing, mtMatch[1])) return `.${cls} { margin-top: ${spacing[mtMatch[1]]}; }`\n }\n\n const mrMatch = cls.match(/^mr-(.+)$/)\n if (mrMatch) {\n if (mrMatch[1] === 'auto') return `.${cls} { margin-right: auto; }`\n if (has(spacing, mrMatch[1])) return `.${cls} { margin-right: ${spacing[mrMatch[1]]}; }`\n }\n\n const mbMatch = cls.match(/^mb-(.+)$/)\n if (mbMatch) {\n if (mbMatch[1] === 'auto') return `.${cls} { margin-bottom: auto; }`\n if (has(spacing, mbMatch[1])) return `.${cls} { margin-bottom: ${spacing[mbMatch[1]]}; }`\n }\n\n const mlMatch = cls.match(/^ml-(.+)$/)\n if (mlMatch) {\n if (mlMatch[1] === 'auto') return `.${cls} { margin-left: auto; }`\n if (has(spacing, mlMatch[1])) return `.${cls} { margin-left: ${spacing[mlMatch[1]]}; }`\n }\n\n // Gap\n const gapMatch = cls.match(/^gap-(.+)$/)\n if (gapMatch && has(spacing, gapMatch[1])) {\n return `.${cls} { gap: ${spacing[gapMatch[1]]}; }`\n }\n\n const gapXMatch = cls.match(/^gap-x-(.+)$/)\n if (gapXMatch && has(spacing, gapXMatch[1])) {\n return `.${cls} { column-gap: ${spacing[gapXMatch[1]]}; }`\n }\n\n const gapYMatch = cls.match(/^gap-y-(.+)$/)\n if (gapYMatch && has(spacing, gapYMatch[1])) {\n return `.${cls} { row-gap: ${spacing[gapYMatch[1]]}; }`\n }\n\n // Space between (using margin on children)\n const spaceXMatch = cls.match(/^space-x-(.+)$/)\n if (spaceXMatch && has(spacing, spaceXMatch[1])) {\n return `.${cls} > * + * { margin-left: ${spacing[spaceXMatch[1]]}; }`\n }\n\n const spaceYMatch = cls.match(/^space-y-(.+)$/)\n if (spaceYMatch && has(spacing, spaceYMatch[1])) {\n return `.${cls} > * + * { margin-top: ${spacing[spaceYMatch[1]]}; }`\n }\n\n // Inset (position offsets using spacing)\n const insetMatch = cls.match(/^inset-(.+)$/)\n if (insetMatch) {\n if (insetMatch[1] === 'auto') return `.${cls} { inset: auto; }`\n if (insetMatch[1] === '0') return `.${cls} { inset: 0px; }`\n if (has(spacing, insetMatch[1])) return `.${cls} { inset: ${spacing[insetMatch[1]]}; }`\n }\n\n const insetXMatch = cls.match(/^inset-x-(.+)$/)\n if (insetXMatch) {\n const val = insetXMatch[1] === 'auto' ? 'auto' : insetXMatch[1] === '0' ? '0px' : (has(spacing, insetXMatch[1]) ? spacing[insetXMatch[1]] : undefined)\n if (val) return `.${cls} { left: ${val}; right: ${val}; }`\n }\n\n const insetYMatch = cls.match(/^inset-y-(.+)$/)\n if (insetYMatch) {\n const val = insetYMatch[1] === 'auto' ? 'auto' : insetYMatch[1] === '0' ? '0px' : (has(spacing, insetYMatch[1]) ? spacing[insetYMatch[1]] : undefined)\n if (val) return `.${cls} { top: ${val}; bottom: ${val}; }`\n }\n\n const topMatch = cls.match(/^top-(.+)$/)\n if (topMatch) {\n if (topMatch[1] === 'auto') return `.${cls} { top: auto; }`\n if (topMatch[1] === '0') return `.${cls} { top: 0px; }`\n if (has(spacing, topMatch[1])) return `.${cls} { top: ${spacing[topMatch[1]]}; }`\n }\n\n const rightMatch = cls.match(/^right-(.+)$/)\n if (rightMatch) {\n if (rightMatch[1] === 'auto') return `.${cls} { right: auto; }`\n if (rightMatch[1] === '0') return `.${cls} { right: 0px; }`\n if (has(spacing, rightMatch[1])) return `.${cls} { right: ${spacing[rightMatch[1]]}; }`\n }\n\n const bottomMatch = cls.match(/^bottom-(.+)$/)\n if (bottomMatch) {\n if (bottomMatch[1] === 'auto') return `.${cls} { bottom: auto; }`\n if (bottomMatch[1] === '0') return `.${cls} { bottom: 0px; }`\n if (has(spacing, bottomMatch[1])) return `.${cls} { bottom: ${spacing[bottomMatch[1]]}; }`\n }\n\n const leftMatch = cls.match(/^left-(.+)$/)\n if (leftMatch) {\n if (leftMatch[1] === 'auto') return `.${cls} { left: auto; }`\n if (leftMatch[1] === '0') return `.${cls} { left: 0px; }`\n if (has(spacing, leftMatch[1])) return `.${cls} { left: ${spacing[leftMatch[1]]}; }`\n }\n\n // ── Negative margin utilities ─────────────────────────────────────\n\n const negMMatch = cls.match(/^-m-(.+)$/)\n if (negMMatch && has(spacing, negMMatch[1])) {\n return `.\\\\-m-${negMMatch[1]} { margin: -${spacing[negMMatch[1]]}; }`\n }\n\n const negMxMatch = cls.match(/^-mx-(.+)$/)\n if (negMxMatch && has(spacing, negMxMatch[1])) {\n return `.\\\\-mx-${negMxMatch[1]} { margin-left: -${spacing[negMxMatch[1]]}; margin-right: -${spacing[negMxMatch[1]]}; }`\n }\n\n const negMyMatch = cls.match(/^-my-(.+)$/)\n if (negMyMatch && has(spacing, negMyMatch[1])) {\n return `.\\\\-my-${negMyMatch[1]} { margin-top: -${spacing[negMyMatch[1]]}; margin-bottom: -${spacing[negMyMatch[1]]}; }`\n }\n\n const negMtMatch = cls.match(/^-mt-(.+)$/)\n if (negMtMatch && has(spacing, negMtMatch[1])) {\n return `.\\\\-mt-${negMtMatch[1]} { margin-top: -${spacing[negMtMatch[1]]}; }`\n }\n\n const negMrMatch = cls.match(/^-mr-(.+)$/)\n if (negMrMatch && has(spacing, negMrMatch[1])) {\n return `.\\\\-mr-${negMrMatch[1]} { margin-right: -${spacing[negMrMatch[1]]}; }`\n }\n\n const negMbMatch = cls.match(/^-mb-(.+)$/)\n if (negMbMatch && has(spacing, negMbMatch[1])) {\n return `.\\\\-mb-${negMbMatch[1]} { margin-bottom: -${spacing[negMbMatch[1]]}; }`\n }\n\n const negMlMatch = cls.match(/^-ml-(.+)$/)\n if (negMlMatch && has(spacing, negMlMatch[1])) {\n return `.\\\\-ml-${negMlMatch[1]} { margin-left: -${spacing[negMlMatch[1]]}; }`\n }\n\n // ── Negative inset utilities ──────────────────────────────────────\n\n const negInsetMatch = cls.match(/^-inset-(.+)$/)\n if (negInsetMatch && has(spacing, negInsetMatch[1])) {\n return `.\\\\-inset-${negInsetMatch[1]} { inset: -${spacing[negInsetMatch[1]]}; }`\n }\n\n const negInsetXMatch = cls.match(/^-inset-x-(.+)$/)\n if (negInsetXMatch && has(spacing, negInsetXMatch[1])) {\n return `.\\\\-inset-x-${negInsetXMatch[1]} { left: -${spacing[negInsetXMatch[1]]}; right: -${spacing[negInsetXMatch[1]]}; }`\n }\n\n const negInsetYMatch = cls.match(/^-inset-y-(.+)$/)\n if (negInsetYMatch && has(spacing, negInsetYMatch[1])) {\n return `.\\\\-inset-y-${negInsetYMatch[1]} { top: -${spacing[negInsetYMatch[1]]}; bottom: -${spacing[negInsetYMatch[1]]}; }`\n }\n\n // ── Negative position utilities ───────────────────────────────────\n\n const negTopMatch = cls.match(/^-top-(.+)$/)\n if (negTopMatch && has(spacing, negTopMatch[1])) {\n return `.\\\\-top-${negTopMatch[1]} { top: -${spacing[negTopMatch[1]]}; }`\n }\n\n const negRightMatch = cls.match(/^-right-(.+)$/)\n if (negRightMatch && has(spacing, negRightMatch[1])) {\n return `.\\\\-right-${negRightMatch[1]} { right: -${spacing[negRightMatch[1]]}; }`\n }\n\n const negBottomMatch = cls.match(/^-bottom-(.+)$/)\n if (negBottomMatch && has(spacing, negBottomMatch[1])) {\n return `.\\\\-bottom-${negBottomMatch[1]} { bottom: -${spacing[negBottomMatch[1]]}; }`\n }\n\n const negLeftMatch = cls.match(/^-left-(.+)$/)\n if (negLeftMatch && has(spacing, negLeftMatch[1])) {\n return `.\\\\-left-${negLeftMatch[1]} { left: -${spacing[negLeftMatch[1]]}; }`\n }\n\n // ── Arbitrary value utilities ─────────────────────────────────────\n\n const arbSpacingMatch = cls.match(/^(w|h|p|m|pt|pr|pb|pl|px|py|mt|mr|mb|ml|mx|my|gap|gap-x|gap-y|top|right|bottom|left|inset|inset-x|inset-y)-\\[(.+)\\]$/)\n if (arbSpacingMatch) {\n const [, prop, val] = arbSpacingMatch\n const escaped = escapeSelector(cls)\n switch (prop) {\n case 'w': return `.${escaped} { width: ${val}; }`\n case 'h': return `.${escaped} { height: ${val}; }`\n case 'p': return `.${escaped} { padding: ${val}; }`\n case 'm': return `.${escaped} { margin: ${val}; }`\n case 'pt': return `.${escaped} { padding-top: ${val}; }`\n case 'pr': return `.${escaped} { padding-right: ${val}; }`\n case 'pb': return `.${escaped} { padding-bottom: ${val}; }`\n case 'pl': return `.${escaped} { padding-left: ${val}; }`\n case 'px': return `.${escaped} { padding-left: ${val}; padding-right: ${val}; }`\n case 'py': return `.${escaped} { padding-top: ${val}; padding-bottom: ${val}; }`\n case 'mt': return `.${escaped} { margin-top: ${val}; }`\n case 'mr': return `.${escaped} { margin-right: ${val}; }`\n case 'mb': return `.${escaped} { margin-bottom: ${val}; }`\n case 'ml': return `.${escaped} { margin-left: ${val}; }`\n case 'mx': return `.${escaped} { margin-left: ${val}; margin-right: ${val}; }`\n case 'my': return `.${escaped} { margin-top: ${val}; margin-bottom: ${val}; }`\n case 'gap': return `.${escaped} { gap: ${val}; }`\n case 'gap-x': return `.${escaped} { column-gap: ${val}; }`\n case 'gap-y': return `.${escaped} { row-gap: ${val}; }`\n case 'top': return `.${escaped} { top: ${val}; }`\n case 'right': return `.${escaped} { right: ${val}; }`\n case 'bottom': return `.${escaped} { bottom: ${val}; }`\n case 'left': return `.${escaped} { left: ${val}; }`\n case 'inset': return `.${escaped} { inset: ${val}; }`\n case 'inset-x': return `.${escaped} { left: ${val}; right: ${val}; }`\n case 'inset-y': return `.${escaped} { top: ${val}; bottom: ${val}; }`\n }\n }\n\n return null\n}\n","import type { ResolvedConfig } from '../types'\n\nfunction hasOwn(obj: Record<string, unknown>, key: string): boolean {\n return Object.prototype.hasOwnProperty.call(obj, key)\n}\n\nexport function generateTypography(classes: Set<string>, config: ResolvedConfig): string[] {\n const { fontSize, fontWeight, lineHeight } = config.theme\n const rules: string[] = []\n\n for (const cls of classes) {\n const generated = matchTypography(cls, fontSize, fontWeight, lineHeight)\n if (generated) rules.push(generated)\n }\n\n return rules\n}\n\nfunction matchTypography(\n cls: string,\n fontSize: ResolvedConfig['theme']['fontSize'],\n fontWeight: ResolvedConfig['theme']['fontWeight'],\n lineHeight: ResolvedConfig['theme']['lineHeight'],\n): string | null {\n // text-{size}\n const textSizeMatch = cls.match(/^text-(xs|sm|base|lg|xl|2xl|3xl|4xl|5xl|6xl|7xl|8xl|9xl)$/)\n if (textSizeMatch && hasOwn(fontSize as Record<string, unknown>, textSizeMatch[1])) {\n const [size, lh] = fontSize[textSizeMatch[1]]\n return `.${cls} {\\n font-size: ${size};\\n line-height: ${lh};\\n}`\n }\n\n // font-{weight}\n const fontWeightMatch = cls.match(/^font-(thin|extralight|light|normal|medium|semibold|bold|extrabold|black)$/)\n if (fontWeightMatch && hasOwn(fontWeight, fontWeightMatch[1])) {\n return `.${cls} { font-weight: ${fontWeight[fontWeightMatch[1]]}; }`\n }\n\n // font-{family}\n if (cls === 'font-sans') return `.${cls} { font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif; }`\n if (cls === 'font-serif') return `.${cls} { font-family: ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif; }`\n if (cls === 'font-mono') return `.${cls} { font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace; }`\n\n // leading-{size}\n const leadingMatch = cls.match(/^leading-(.+)$/)\n if (leadingMatch && hasOwn(lineHeight, leadingMatch[1])) {\n return `.${cls} { line-height: ${lineHeight[leadingMatch[1]]}; }`\n }\n\n // tracking (letter-spacing)\n const trackingMap: Record<string, string> = {\n tighter: '-0.05em',\n tight: '-0.025em',\n normal: '0em',\n wide: '0.025em',\n wider: '0.05em',\n widest: '0.1em',\n }\n const trackingMatch = cls.match(/^tracking-(.+)$/)\n if (trackingMatch && Object.prototype.hasOwnProperty.call(trackingMap, trackingMatch[1])) {\n return `.${cls} { letter-spacing: ${trackingMap[trackingMatch[1]]}; }`\n }\n\n // text alignment\n if (cls === 'text-left') return `.${cls} { text-align: left; }`\n if (cls === 'text-center') return `.${cls} { text-align: center; }`\n if (cls === 'text-right') return `.${cls} { text-align: right; }`\n if (cls === 'text-justify') return `.${cls} { text-align: justify; }`\n if (cls === 'text-start') return `.${cls} { text-align: start; }`\n if (cls === 'text-end') return `.${cls} { text-align: end; }`\n\n // text transform\n if (cls === 'uppercase') return `.${cls} { text-transform: uppercase; }`\n if (cls === 'lowercase') return `.${cls} { text-transform: lowercase; }`\n if (cls === 'capitalize') return `.${cls} { text-transform: capitalize; }`\n if (cls === 'normal-case') return `.${cls} { text-transform: none; }`\n\n // text decoration\n if (cls === 'underline') return `.${cls} { text-decoration-line: underline; }`\n if (cls === 'overline') return `.${cls} { text-decoration-line: overline; }`\n if (cls === 'line-through') return `.${cls} { text-decoration-line: line-through; }`\n if (cls === 'no-underline') return `.${cls} { text-decoration-line: none; }`\n\n // text overflow\n if (cls === 'truncate') return `.${cls} { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }`\n if (cls === 'text-ellipsis') return `.${cls} { text-overflow: ellipsis; }`\n if (cls === 'text-clip') return `.${cls} { text-overflow: clip; }`\n\n // white space\n if (cls === 'whitespace-normal') return `.${cls} { white-space: normal; }`\n if (cls === 'whitespace-nowrap') return `.${cls} { white-space: nowrap; }`\n if (cls === 'whitespace-pre') return `.${cls} { white-space: pre; }`\n if (cls === 'whitespace-pre-line') return `.${cls} { white-space: pre-line; }`\n if (cls === 'whitespace-pre-wrap') return `.${cls} { white-space: pre-wrap; }`\n if (cls === 'whitespace-break-spaces') return `.${cls} { white-space: break-spaces; }`\n\n // font style\n if (cls === 'italic') return `.${cls} { font-style: italic; }`\n if (cls === 'not-italic') return `.${cls} { font-style: normal; }`\n\n // font variant numeric\n if (cls === 'tabular-nums') return `.${cls} { font-variant-numeric: tabular-nums; }`\n if (cls === 'oldstyle-nums') return `.${cls} { font-variant-numeric: oldstyle-nums; }`\n\n // list style\n if (cls === 'list-none') return `.${cls} { list-style-type: none; }`\n if (cls === 'list-disc') return `.${cls} { list-style-type: disc; }`\n if (cls === 'list-decimal') return `.${cls} { list-style-type: decimal; }`\n\n // word break\n if (cls === 'break-normal') return `.${cls} { overflow-wrap: normal; word-break: normal; }`\n if (cls === 'break-words') return `.${cls} { overflow-wrap: break-word; }`\n if (cls === 'break-all') return `.${cls} { word-break: break-all; }`\n if (cls === 'break-keep') return `.${cls} { word-break: keep-all; }`\n\n return null\n}\n","import type { ResolvedConfig } from '../types'\nimport { escapeSelector } from './utils'\n\nfunction has(obj: Record<string, string>, key: string): boolean {\n return typeof obj[key] === 'string'\n}\n\nexport function generateLayout(classes: Set<string>, config: ResolvedConfig): string[] {\n const { spacing } = config.theme\n const rules: string[] = []\n for (const cls of classes) {\n // space-y / space-x need child selectors — handled before matchLayout\n const spaceYMatch = cls.match(/^space-y-(.+)$/)\n if (spaceYMatch && has(spacing, spaceYMatch[1])) {\n rules.push(`.${escapeSelector(cls)} > * + * { margin-top: ${spacing[spaceYMatch[1]]}; }`)\n continue\n }\n const spaceXMatch = cls.match(/^space-x-(.+)$/)\n if (spaceXMatch && has(spacing, spaceXMatch[1])) {\n rules.push(`.${escapeSelector(cls)} > * + * { margin-left: ${spacing[spaceXMatch[1]]}; }`)\n continue\n }\n\n const generated = matchLayout(cls)\n if (generated) rules.push(generated)\n }\n return rules\n}\n\nfunction matchLayout(cls: string): string | null {\n // Display\n const displayMap: Record<string, string> = {\n block: 'display: block;',\n inline: 'display: inline;',\n 'inline-block': 'display: inline-block;',\n flex: 'display: flex;',\n 'inline-flex': 'display: inline-flex;',\n grid: 'display: grid;',\n 'inline-grid': 'display: inline-grid;',\n table: 'display: table;',\n hidden: 'display: none;',\n contents: 'display: contents;',\n }\n if (displayMap[cls]) return `.${cls} { ${displayMap[cls]} }`\n\n // Position\n const posMap: Record<string, string> = {\n static: 'position: static;',\n relative: 'position: relative;',\n absolute: 'position: absolute;',\n fixed: 'position: fixed;',\n sticky: 'position: sticky;',\n }\n if (posMap[cls]) return `.${cls} { ${posMap[cls]} }`\n\n // Flex direction\n if (cls === 'flex-row') return `.${cls} { flex-direction: row; }`\n if (cls === 'flex-row-reverse') return `.${cls} { flex-direction: row-reverse; }`\n if (cls === 'flex-col') return `.${cls} { flex-direction: column; }`\n if (cls === 'flex-col-reverse') return `.${cls} { flex-direction: column-reverse; }`\n\n // Flex wrap\n if (cls === 'flex-wrap') return `.${cls} { flex-wrap: wrap; }`\n if (cls === 'flex-nowrap') return `.${cls} { flex-wrap: nowrap; }`\n if (cls === 'flex-wrap-reverse') return `.${cls} { flex-wrap: wrap-reverse; }`\n\n // Flex grow/shrink\n if (cls === 'flex-1') return `.${cls} { flex: 1 1 0%; }`\n if (cls === 'flex-auto') return `.${cls} { flex: 1 1 auto; }`\n if (cls === 'flex-initial') return `.${cls} { flex: 0 1 auto; }`\n if (cls === 'flex-none') return `.${cls} { flex: none; }`\n if (cls === 'flex-grow') return `.${cls} { flex-grow: 1; }`\n if (cls === 'flex-grow-0') return `.${cls} { flex-grow: 0; }`\n if (cls === 'flex-shrink') return `.${cls} { flex-shrink: 1; }`\n if (cls === 'flex-shrink-0') return `.${cls} { flex-shrink: 0; }`\n // Tailwind v3 shorthands\n if (cls === 'grow') return `.${cls} { flex-grow: 1; }`\n if (cls === 'grow-0') return `.${cls} { flex-grow: 0; }`\n if (cls === 'shrink') return `.${cls} { flex-shrink: 1; }`\n if (cls === 'shrink-0') return `.${cls} { flex-shrink: 0; }`\n\n // Align items\n if (cls === 'items-start') return `.${cls} { align-items: flex-start; }`\n if (cls === 'items-end') return `.${cls} { align-items: flex-end; }`\n if (cls === 'items-center') return `.${cls} { align-items: center; }`\n if (cls === 'items-baseline') return `.${cls} { align-items: baseline; }`\n if (cls === 'items-stretch') return `.${cls} { align-items: stretch; }`\n\n // Align self\n if (cls === 'self-auto') return `.${cls} { align-self: auto; }`\n if (cls === 'self-start') return `.${cls} { align-self: flex-start; }`\n if (cls === 'self-end') return `.${cls} { align-self: flex-end; }`\n if (cls === 'self-center') return `.${cls} { align-self: center; }`\n if (cls === 'self-stretch') return `.${cls} { align-self: stretch; }`\n if (cls === 'self-baseline') return `.${cls} { align-self: baseline; }`\n\n // Justify content\n if (cls === 'justify-start') return `.${cls} { justify-content: flex-start; }`\n if (cls === 'justify-end') return `.${cls} { justify-content: flex-end; }`\n if (cls === 'justify-center') return `.${cls} { justify-content: center; }`\n if (cls === 'justify-between') return `.${cls} { justify-content: space-between; }`\n if (cls === 'justify-around') return `.${cls} { justify-content: space-around; }`\n if (cls === 'justify-evenly') return `.${cls} { justify-content: space-evenly; }`\n if (cls === 'justify-stretch') return `.${cls} { justify-content: stretch; }`\n\n // Justify items / self\n if (cls === 'justify-items-start') return `.${cls} { justify-items: start; }`\n if (cls === 'justify-items-end') return `.${cls} { justify-items: end; }`\n if (cls === 'justify-items-center') return `.${cls} { justify-items: center; }`\n if (cls === 'justify-items-stretch') return `.${cls} { justify-items: stretch; }`\n if (cls === 'justify-self-auto') return `.${cls} { justify-self: auto; }`\n if (cls === 'justify-self-start') return `.${cls} { justify-self: start; }`\n if (cls === 'justify-self-end') return `.${cls} { justify-self: end; }`\n if (cls === 'justify-self-center') return `.${cls} { justify-self: center; }`\n if (cls === 'justify-self-stretch') return `.${cls} { justify-self: stretch; }`\n\n // Align content\n if (cls === 'content-normal') return `.${cls} { align-content: normal; }`\n if (cls === 'content-center') return `.${cls} { align-content: center; }`\n if (cls === 'content-start') return `.${cls} { align-content: flex-start; }`\n if (cls === 'content-end') return `.${cls} { align-content: flex-end; }`\n if (cls === 'content-between') return `.${cls} { align-content: space-between; }`\n if (cls === 'content-around') return `.${cls} { align-content: space-around; }`\n if (cls === 'content-evenly') return `.${cls} { align-content: space-evenly; }`\n if (cls === 'content-stretch') return `.${cls} { align-content: stretch; }`\n if (cls === 'content-baseline') return `.${cls} { align-content: baseline; }`\n\n // Grid cols\n const gridColsMatch = cls.match(/^grid-cols-(\\d+)$/)\n if (gridColsMatch) {\n const n = parseInt(gridColsMatch[1])\n return `.${cls} { grid-template-columns: repeat(${n}, minmax(0, 1fr)); }`\n }\n if (cls === 'grid-cols-none') return `.${cls} { grid-template-columns: none; }`\n\n // Grid rows\n const gridRowsMatch = cls.match(/^grid-rows-(\\d+)$/)\n if (gridRowsMatch) {\n const n = parseInt(gridRowsMatch[1])\n return `.${cls} { grid-template-rows: repeat(${n}, minmax(0, 1fr)); }`\n }\n if (cls === 'grid-rows-none') return `.${cls} { grid-template-rows: none; }`\n\n // Col span\n const colSpanMatch = cls.match(/^col-span-(\\d+)$/)\n if (colSpanMatch) return `.${cls} { grid-column: span ${colSpanMatch[1]} / span ${colSpanMatch[1]}; }`\n if (cls === 'col-span-full') return `.${cls} { grid-column: 1 / -1; }`\n if (cls === 'col-auto') return `.${cls} { grid-column: auto; }`\n\n // Row span\n const rowSpanMatch = cls.match(/^row-span-(\\d+)$/)\n if (rowSpanMatch) return `.${cls} { grid-row: span ${rowSpanMatch[1]} / span ${rowSpanMatch[1]}; }`\n if (cls === 'row-span-full') return `.${cls} { grid-row: 1 / -1; }`\n if (cls === 'row-auto') return `.${cls} { grid-row: auto; }`\n\n // Col start/end\n const colStartMatch = cls.match(/^col-start-(\\d+)$/)\n if (colStartMatch) return `.${cls} { grid-column-start: ${colStartMatch[1]}; }`\n const colEndMatch = cls.match(/^col-end-(\\d+)$/)\n if (colEndMatch) return `.${cls} { grid-column-end: ${colEndMatch[1]}; }`\n\n // Row start/end\n const rowStartMatch = cls.match(/^row-start-(\\d+)$/)\n if (rowStartMatch) return `.${cls} { grid-row-start: ${rowStartMatch[1]}; }`\n const rowEndMatch = cls.match(/^row-end-(\\d+)$/)\n if (rowEndMatch) return `.${cls} { grid-row-end: ${rowEndMatch[1]}; }`\n\n // Order\n const orderMatch = cls.match(/^order-(-?\\d+)$/)\n if (orderMatch) return `.${cls} { order: ${orderMatch[1]}; }`\n if (cls === 'order-first') return `.${cls} { order: -9999; }`\n if (cls === 'order-last') return `.${cls} { order: 9999; }`\n if (cls === 'order-none') return `.${cls} { order: 0; }`\n\n // Float\n if (cls === 'float-right') return `.${cls} { float: right; }`\n if (cls === 'float-left') return `.${cls} { float: left; }`\n if (cls === 'float-none') return `.${cls} { float: none; }`\n if (cls === 'clearfix') return `.${cls}::after { content: \"\"; display: table; clear: both; }`\n\n // Overflow\n if (cls === 'overflow-auto') return `.${cls} { overflow: auto; }`\n if (cls === 'overflow-hidden') return `.${cls} { overflow: hidden; }`\n if (cls === 'overflow-clip') return `.${cls} { overflow: clip; }`\n if (cls === 'overflow-visible') return `.${cls} { overflow: visible; }`\n if (cls === 'overflow-scroll') return `.${cls} { overflow: scroll; }`\n if (cls === 'overflow-x-auto') return `.${cls} { overflow-x: auto; }`\n if (cls === 'overflow-x-hidden') return `.${cls} { overflow-x: hidden; }`\n if (cls === 'overflow-x-scroll') return `.${cls} { overflow-x: scroll; }`\n if (cls === 'overflow-y-auto') return `.${cls} { overflow-y: auto; }`\n if (cls === 'overflow-y-hidden') return `.${cls} { overflow-y: hidden; }`\n if (cls === 'overflow-y-scroll') return `.${cls} { overflow-y: scroll; }`\n\n // Visibility\n if (cls === 'visible') return `.${cls} { visibility: visible; }`\n if (cls === 'invisible') return `.${cls} { visibility: hidden; }`\n if (cls === 'collapse') return `.${cls} { visibility: collapse; }`\n\n // Pointer events\n if (cls === 'pointer-events-none') return `.${cls} { pointer-events: none; }`\n if (cls === 'pointer-events-auto') return `.${cls} { pointer-events: auto; }`\n\n // Cursor\n const cursorMap: Record<string, string> = {\n 'cursor-auto': 'auto',\n 'cursor-default': 'default',\n 'cursor-pointer': 'pointer',\n 'cursor-wait': 'wait',\n 'cursor-text': 'text',\n 'cursor-move': 'move',\n 'cursor-not-allowed': 'not-allowed',\n 'cursor-grab': 'grab',\n 'cursor-grabbing': 'grabbing',\n 'cursor-crosshair': 'crosshair',\n 'cursor-help': 'help',\n 'cursor-none': 'none',\n 'cursor-zoom-in': 'zoom-in',\n 'cursor-zoom-out': 'zoom-out',\n }\n if (cursorMap[cls]) return `.${cls} { cursor: ${cursorMap[cls]}; }`\n\n // Select\n if (cls === 'select-none') return `.${cls} { user-select: none; }`\n if (cls === 'select-text') return `.${cls} { user-select: text; }`\n if (cls === 'select-all') return `.${cls} { user-select: all; }`\n if (cls === 'select-auto') return `.${cls} { user-select: auto; }`\n\n // Object fit\n if (cls === 'object-contain') return `.${cls} { object-fit: contain; }`\n if (cls === 'object-cover') return `.${cls} { object-fit: cover; }`\n if (cls === 'object-fill') return `.${cls} { object-fit: fill; }`\n if (cls === 'object-none') return `.${cls} { object-fit: none; }`\n if (cls === 'object-scale-down') return `.${cls} { object-fit: scale-down; }`\n\n // Aspect ratio\n if (cls === 'aspect-auto') return `.${cls} { aspect-ratio: auto; }`\n if (cls === 'aspect-square') return `.${cls} { aspect-ratio: 1 / 1; }`\n if (cls === 'aspect-video') return `.${cls} { aspect-ratio: 16 / 9; }`\n\n // Container\n if (cls === 'container') {\n return `.${cls} {\\n width: 100%;\\n margin-left: auto;\\n margin-right: auto;\\n}`\n }\n\n // Box decoration\n if (cls === 'box-border') return `.${cls} { box-sizing: border-box; }`\n if (cls === 'box-content') return `.${cls} { box-sizing: content-box; }`\n\n // Isolate\n if (cls === 'isolate') return `.${cls} { isolation: isolate; }`\n if (cls === 'isolation-auto') return `.${cls} { isolation: auto; }`\n\n // Mix blend mode\n const mixBlendMap: Record<string, string> = {\n 'mix-blend-normal': 'normal',\n 'mix-blend-multiply': 'multiply',\n 'mix-blend-screen': 'screen',\n 'mix-blend-overlay': 'overlay',\n 'mix-blend-darken': 'darken',\n 'mix-blend-lighten': 'lighten',\n 'mix-blend-color-dodge': 'color-dodge',\n 'mix-blend-color-burn': 'color-burn',\n 'mix-blend-hard-light': 'hard-light',\n 'mix-blend-soft-light': 'soft-light',\n 'mix-blend-difference': 'difference',\n 'mix-blend-exclusion': 'exclusion',\n }\n if (mixBlendMap[cls]) return `.${cls} { mix-blend-mode: ${mixBlendMap[cls]}; }`\n\n // ── Background size ───────────────────────────────────────────────\n if (cls === 'bg-auto') return `.${cls} { background-size: auto; }`\n if (cls === 'bg-cover') return `.${cls} { background-size: cover; }`\n if (cls === 'bg-contain') return `.${cls} { background-size: contain; }`\n\n // ── Background position ───────────────────────────────────────────\n if (cls === 'bg-center') return `.${cls} { background-position: center; }`\n if (cls === 'bg-top') return `.${cls} { background-position: top; }`\n if (cls === 'bg-bottom') return `.${cls} { background-position: bottom; }`\n if (cls === 'bg-left') return `.${cls} { background-position: left; }`\n if (cls === 'bg-right') return `.${cls} { background-position: right; }`\n if (cls === 'bg-left-top') return `.${cls} { background-position: left top; }`\n if (cls === 'bg-left-bottom') return `.${cls} { background-position: left bottom; }`\n if (cls === 'bg-right-top') return `.${cls} { background-position: right top; }`\n if (cls === 'bg-right-bottom') return `.${cls} { background-position: right bottom; }`\n\n // ── Background repeat ─────────────────────────────────────────────\n if (cls === 'bg-repeat') return `.${cls} { background-repeat: repeat; }`\n if (cls === 'bg-no-repeat') return `.${cls} { background-repeat: no-repeat; }`\n if (cls === 'bg-repeat-x') return `.${cls} { background-repeat: repeat-x; }`\n if (cls === 'bg-repeat-y') return `.${cls} { background-repeat: repeat-y; }`\n if (cls === 'bg-repeat-round') return `.${cls} { background-repeat: round; }`\n if (cls === 'bg-repeat-space') return `.${cls} { background-repeat: space; }`\n\n // ── Background attachment ─────────────────────────────────────────\n if (cls === 'bg-fixed') return `.${cls} { background-attachment: fixed; }`\n if (cls === 'bg-local') return `.${cls} { background-attachment: local; }`\n if (cls === 'bg-scroll') return `.${cls} { background-attachment: scroll; }`\n\n // ── Background origin ─────────────────────────────────────────────\n if (cls === 'bg-origin-border') return `.${cls} { background-origin: border-box; }`\n if (cls === 'bg-origin-padding') return `.${cls} { background-origin: padding-box; }`\n if (cls === 'bg-origin-content') return `.${cls} { background-origin: content-box; }`\n\n // ── Background clip ───────────────────────────────────────────────\n if (cls === 'bg-clip-border') return `.${cls} { background-clip: border-box; }`\n if (cls === 'bg-clip-padding') return `.${cls} { background-clip: padding-box; }`\n if (cls === 'bg-clip-content') return `.${cls} { background-clip: content-box; }`\n if (cls === 'bg-clip-text') return `.${cls} { background-clip: text; -webkit-background-clip: text; }`\n\n return null\n}\n","import type { ResolvedConfig } from '../types'\n\nfunction has(obj: Record<string, string>, key: string): boolean {\n return typeof obj[key] === 'string'\n}\n\nexport function generateSizing(classes: Set<string>, config: ResolvedConfig): string[] {\n const { spacing } = config.theme\n const rules: string[] = []\n for (const cls of classes) {\n const generated = matchSizing(cls, spacing)\n if (generated) rules.push(generated)\n }\n return rules\n}\n\nfunction matchSizing(cls: string, spacing: Record<string, string>): string | null {\n // Fractions\n const fractions: Record<string, string> = {\n '1/2': '50%', '1/3': '33.333333%', '2/3': '66.666667%',\n '1/4': '25%', '2/4': '50%', '3/4': '75%',\n '1/5': '20%', '2/5': '40%', '3/5': '60%', '4/5': '80%',\n '1/6': '16.666667%', '2/6': '33.333333%', '3/6': '50%',\n '4/6': '66.666667%', '5/6': '83.333333%',\n '1/12': '8.333333%', '2/12': '16.666667%', '3/12': '25%',\n '4/12': '33.333333%', '5/12': '41.666667%', '6/12': '50%',\n '7/12': '58.333333%', '8/12': '66.666667%', '9/12': '75%',\n '10/12': '83.333333%', '11/12': '91.666667%',\n }\n\n // Width\n const wMatch = cls.match(/^w-(.+)$/)\n if (wMatch) {\n const key = wMatch[1]\n if (key === 'auto') return `.${cls} { width: auto; }`\n if (key === 'full') return `.${cls} { width: 100%; }`\n if (key === 'screen') return `.${cls} { width: 100vw; }`\n if (key === 'svw') return `.${cls} { width: 100svw; }`\n if (key === 'min') return `.${cls} { width: min-content; }`\n if (key === 'max') return `.${cls} { width: max-content; }`\n if (key === 'fit') return `.${cls} { width: fit-content; }`\n if (has(fractions, key)) return `.${cls} { width: ${fractions[key]}; }`\n if (has(spacing, key)) return `.${cls} { width: ${spacing[key]}; }`\n }\n\n // Min width\n const minWMatch = cls.match(/^min-w-(.+)$/)\n if (minWMatch) {\n const key = minWMatch[1]\n if (key === '0') return `.${cls} { min-width: 0px; }`\n if (key === 'full') return `.${cls} { min-width: 100%; }`\n if (key === 'min') return `.${cls} { min-width: min-content; }`\n if (key === 'max') return `.${cls} { min-width: max-content; }`\n if (key === 'fit') return `.${cls} { min-width: fit-content; }`\n if (has(spacing, key)) return `.${cls} { min-width: ${spacing[key]}; }`\n }\n\n // Max width\n const maxWMap: Record<string, string> = {\n none: 'none', xs: '20rem', sm: '24rem', md: '28rem', lg: '32rem', xl: '36rem',\n '2xl': '42rem', '3xl': '48rem', '4xl': '56rem', '5xl': '64rem', '6xl': '72rem',\n '7xl': '80rem', full: '100%', min: 'min-content', max: 'max-content', fit: 'fit-content',\n prose: '65ch', 'screen-sm': '640px', 'screen-md': '768px', 'screen-lg': '1024px',\n 'screen-xl': '1280px', 'screen-2xl': '1536px',\n }\n const maxWMatch = cls.match(/^max-w-(.+)$/)\n if (maxWMatch && has(maxWMap, maxWMatch[1])) {\n return `.${cls} { max-width: ${maxWMap[maxWMatch[1]]}; }`\n }\n\n // Height\n const hMatch = cls.match(/^h-(.+)$/)\n if (hMatch) {\n const key = hMatch[1]\n if (key === 'auto') return `.${cls} { height: auto; }`\n if (key === 'full') return `.${cls} { height: 100%; }`\n if (key === 'screen') return `.${cls} { height: 100vh; }`\n if (key === 'svh') return `.${cls} { height: 100svh; }`\n if (key === 'dvh') return `.${cls} { height: 100dvh; }`\n if (key === 'min') return `.${cls} { height: min-content; }`\n if (key === 'max') return `.${cls} { height: max-content; }`\n if (key === 'fit') return `.${cls} { height: fit-content; }`\n if (has(fractions, key)) return `.${cls} { height: ${fractions[key]}; }`\n if (has(spacing, key)) return `.${cls} { height: ${spacing[key]}; }`\n }\n\n // Min height\n const minHMatch = cls.match(/^min-h-(.+)$/)\n if (minHMatch) {\n const key = minHMatch[1]\n if (key === '0') return `.${cls} { min-height: 0px; }`\n if (key === 'full') return `.${cls} { min-height: 100%; }`\n if (key === 'screen') return `.${cls} { min-height: 100vh; }`\n if (key === 'svh') return `.${cls} { min-height: 100svh; }`\n if (key === 'dvh') return `.${cls} { min-height: 100dvh; }`\n if (key === 'fit') return `.${cls} { min-height: fit-content; }`\n if (has(spacing, key)) return `.${cls} { min-height: ${spacing[key]}; }`\n }\n\n // Max height\n const maxHMatch = cls.match(/^max-h-(.+)$/)\n if (maxHMatch) {\n const key = maxHMatch[1]\n if (key === 'none') return `.${cls} { max-height: none; }`\n if (key === 'full') return `.${cls} { max-height: 100%; }`\n if (key === 'screen') return `.${cls} { max-height: 100vh; }`\n if (key === 'svh') return `.${cls} { max-height: 100svh; }`\n if (key === 'dvh') return `.${cls} { max-height: 100dvh; }`\n if (key === 'fit') return `.${cls} { max-height: fit-content; }`\n if (has(spacing, key)) return `.${cls} { max-height: ${spacing[key]}; }`\n }\n\n // Flex basis\n const basisMatch = cls.match(/^basis-(.+)$/)\n if (basisMatch) {\n const key = basisMatch[1]\n if (key === 'auto') return `.${cls} { flex-basis: auto; }`\n if (key === 'full') return `.${cls} { flex-basis: 100%; }`\n if (key === '0') return `.${cls} { flex-basis: 0px; }`\n if (has(fractions, key)) return `.${cls} { flex-basis: ${fractions[key]}; }`\n if (has(spacing, key)) return `.${cls} { flex-basis: ${spacing[key]}; }`\n }\n\n return null\n}\n","import type { ResolvedConfig } from '../types'\nimport { escapeSelector } from './utils'\n\nfunction has(obj: Record<string, string>, key: string): boolean {\n return typeof obj[key] === 'string'\n}\n\nexport function generateEffects(classes: Set<string>, config: ResolvedConfig): string[] {\n const { opacity, zIndex, boxShadow, borderRadius } = config.theme\n const rules: string[] = []\n for (const cls of classes) {\n const generated = matchEffects(cls, opacity, zIndex, boxShadow, borderRadius)\n if (generated) rules.push(generated)\n }\n return rules\n}\n\nfunction matchEffects(\n cls: string,\n opacity: Record<string, string>,\n zIndex: Record<string, string>,\n boxShadow: Record<string, string>,\n borderRadius: Record<string, string>,\n): string | null {\n // Opacity\n const opacityMatch = cls.match(/^opacity-(.+)$/)\n if (opacityMatch && has(opacity, opacityMatch[1])) {\n return `.${cls} {\\n opacity: ${opacity[opacityMatch[1]]};\\n transition-property: opacity;\\n transition-duration: var(--alive-duration, 0ms);\\n transition-timing-function: var(--alive-ease, linear);\\n}`\n }\n\n // Z-index\n const zMatch = cls.match(/^z-(.+)$/)\n if (zMatch && has(zIndex, zMatch[1])) {\n return `.${cls} { z-index: ${zIndex[zMatch[1]]}; }`\n }\n\n // Box shadow (non-depth)\n const shadowMatch = cls.match(/^shadow(?:-(.+))?$/)\n if (shadowMatch) {\n const key = shadowMatch[1] ?? 'DEFAULT'\n if (has(boxShadow, key)) {\n return `.${cls} { box-shadow: ${boxShadow[key]}; }`\n }\n if (!shadowMatch[1] && has(boxShadow, 'DEFAULT')) {\n return `.${cls} { box-shadow: ${boxShadow['DEFAULT']}; }`\n }\n }\n\n // Border radius\n const roundedMatch = cls.match(/^rounded(?:-(.+))?$/)\n if (roundedMatch) {\n const key = roundedMatch[1] ?? 'DEFAULT'\n if (has(borderRadius, key)) return `.${cls} { border-radius: ${borderRadius[key]}; }`\n if (!roundedMatch[1] && has(borderRadius, 'DEFAULT')) return `.${cls} { border-radius: ${borderRadius['DEFAULT']}; }`\n }\n\n // Directional border radius\n const roundedTMatch = cls.match(/^rounded-t(?:-(.+))?$/)\n if (roundedTMatch) {\n const rkey = roundedTMatch[1] ?? 'DEFAULT'\n const val = has(borderRadius, rkey) ? borderRadius[rkey] : (has(borderRadius, 'DEFAULT') ? borderRadius['DEFAULT'] : null)\n if (val) return `.${cls} { border-top-left-radius: ${val}; border-top-right-radius: ${val}; }`\n }\n\n const roundedBMatch = cls.match(/^rounded-b(?:-(.+))?$/)\n if (roundedBMatch) {\n const rkey = roundedBMatch[1] ?? 'DEFAULT'\n const val = has(borderRadius, rkey) ? borderRadius[rkey] : (has(borderRadius, 'DEFAULT') ? borderRadius['DEFAULT'] : null)\n if (val) return `.${cls} { border-bottom-left-radius: ${val}; border-bottom-right-radius: ${val}; }`\n }\n\n const roundedLMatch = cls.match(/^rounded-l(?:-(.+))?$/)\n if (roundedLMatch) {\n const rkey = roundedLMatch[1] ?? 'DEFAULT'\n const val = has(borderRadius, rkey) ? borderRadius[rkey] : (has(borderRadius, 'DEFAULT') ? borderRadius['DEFAULT'] : null)\n if (val) return `.${cls} { border-top-left-radius: ${val}; border-bottom-left-radius: ${val}; }`\n }\n\n const roundedRMatch = cls.match(/^rounded-r(?:-(.+))?$/)\n if (roundedRMatch) {\n const rkey = roundedRMatch[1] ?? 'DEFAULT'\n const val = has(borderRadius, rkey) ? borderRadius[rkey] : (has(borderRadius, 'DEFAULT') ? borderRadius['DEFAULT'] : null)\n if (val) return `.${cls} { border-top-right-radius: ${val}; border-bottom-right-radius: ${val}; }`\n }\n\n // Border width\n if (cls === 'border') return `.${cls} { border-width: 1px; border-style: solid; }`\n if (cls === 'border-0') return `.${cls} { border-width: 0px; }`\n if (cls === 'border-2') return `.${cls} { border-width: 2px; border-style: solid; }`\n if (cls === 'border-4') return `.${cls} { border-width: 4px; border-style: solid; }`\n if (cls === 'border-8') return `.${cls} { border-width: 8px; border-style: solid; }`\n if (cls === 'border-t') return `.${cls} { border-top-width: 1px; border-top-style: solid; }`\n if (cls === 'border-r') return `.${cls} { border-right-width: 1px; border-right-style: solid; }`\n if (cls === 'border-b') return `.${cls} { border-bottom-width: 1px; border-bottom-style: solid; }`\n if (cls === 'border-l') return `.${cls} { border-left-width: 1px; border-left-style: solid; }`\n if (cls === 'border-t-0') return `.${cls} { border-top-width: 0px; }`\n if (cls === 'border-r-0') return `.${cls} { border-right-width: 0px; }`\n if (cls === 'border-b-0') return `.${cls} { border-bottom-width: 0px; }`\n if (cls === 'border-l-0') return `.${cls} { border-left-width: 0px; }`\n\n // Border style\n if (cls === 'border-solid') return `.${cls} { border-style: solid; }`\n if (cls === 'border-dashed') return `.${cls} { border-style: dashed; }`\n if (cls === 'border-dotted') return `.${cls} { border-style: dotted; }`\n if (cls === 'border-double') return `.${cls} { border-style: double; }`\n if (cls === 'border-hidden') return `.${cls} { border-style: hidden; }`\n if (cls === 'border-none') return `.${cls} { border-style: none; }`\n\n // Outline\n if (cls === 'outline-none') return `.${cls} { outline: 2px solid transparent; outline-offset: 2px; }`\n if (cls === 'outline') return `.${cls} { outline-style: solid; }`\n if (cls === 'outline-dashed') return `.${cls} { outline-style: dashed; }`\n if (cls === 'outline-dotted') return `.${cls} { outline-style: dotted; }`\n if (cls === 'outline-double') return `.${cls} { outline-style: double; }`\n\n const outlineWidthMatch = cls.match(/^outline-(\\d+)$/)\n if (outlineWidthMatch) return `.${cls} { outline-width: ${outlineWidthMatch[1]}px; }`\n\n const outlineOffsetMatch = cls.match(/^outline-offset-(\\d+)$/)\n if (outlineOffsetMatch) return `.${cls} { outline-offset: ${outlineOffsetMatch[1]}px; }`\n\n // Ring\n const ringMatch = cls.match(/^ring(?:-(\\d+))?$/)\n if (ringMatch) {\n const width = ringMatch[1] ?? '3'\n return `.${cls} { box-shadow: 0 0 0 ${width}px var(--alive-ring-color, rgba(59, 130, 246, 0.5)); }`\n }\n if (cls === 'ring-inset') return `.${cls} { --alive-ring-inset: inset; }`\n\n const ringOffsetMatch = cls.match(/^ring-offset-(\\d+)$/)\n if (ringOffsetMatch) return `.${cls} { --alive-ring-offset: ${ringOffsetMatch[1]}px; }`\n\n // Transform utilities\n if (cls === 'transform') return `.${cls} { transform: translateX(var(--alive-tx,0)) translateY(var(--alive-ty,0)) rotate(var(--alive-rotate,0)) scaleX(var(--alive-sx,1)) scaleY(var(--alive-sy,1)) skewX(var(--alive-skew-x,0)) skewY(var(--alive-skew-y,0)); }`\n if (cls === 'transform-none') return `.${cls} { transform: none; }`\n\n // Scale\n const scaleMap: Record<string, string> = {\n '0': '0', '50': '.5', '75': '.75', '90': '.9', '95': '.95',\n '100': '1', '105': '1.05', '110': '1.1', '125': '1.25', '150': '1.5',\n }\n const scaleMatch = cls.match(/^scale-(\\d+)$/)\n if (scaleMatch && has(scaleMap, scaleMatch[1])) {\n return `.${cls} { transform: scale(${scaleMap[scaleMatch[1]]}); }`\n }\n\n const scaleXMatch = cls.match(/^scale-x-(\\d+)$/)\n if (scaleXMatch && has(scaleMap, scaleXMatch[1])) {\n return `.${cls} { transform: scaleX(${scaleMap[scaleXMatch[1]]}); }`\n }\n\n const scaleYMatch = cls.match(/^scale-y-(\\d+)$/)\n if (scaleYMatch && has(scaleMap, scaleYMatch[1])) {\n return `.${cls} { transform: scaleY(${scaleMap[scaleYMatch[1]]}); }`\n }\n\n // Rotate\n const rotateMatch = cls.match(/^-?rotate-(\\d+)$/)\n if (rotateMatch) {\n const neg = cls.startsWith('-') ? '-' : ''\n return `.${cls.replace(/^-/, '\\\\-')} { transform: rotate(${neg}${rotateMatch[1]}deg); }`\n }\n\n // Translate\n const translateXMatch = cls.match(/^-?translate-x-(.+)$/)\n if (translateXMatch) {\n const neg = cls.startsWith('-') ? '-' : ''\n const key = translateXMatch[1]\n const fractions: Record<string, string> = { '1/2': '50%', 'full': '100%' }\n const val = fractions[key] ?? null\n if (val) return `.${cls.replace(/^-/, '\\\\-')} { transform: translateX(${neg}${val}); }`\n }\n\n const translateYMatch = cls.match(/^-?translate-y-(.+)$/)\n if (translateYMatch) {\n const neg = cls.startsWith('-') ? '-' : ''\n const key = translateYMatch[1]\n const fractions: Record<string, string> = { '1/2': '50%', 'full': '100%' }\n const val = fractions[key] ?? null\n if (val) return `.${cls.replace(/^-/, '\\\\-')} { transform: translateY(${neg}${val}); }`\n }\n\n // Transition (explicit overrides for elements outside depth context)\n if (cls === 'transition-none') return `.${cls} { transition: none; }`\n if (cls === 'transition-all') return `.${cls} { transition: all var(--alive-duration-normal) var(--alive-ease-standard); }`\n if (cls === 'transition-colors') return `.${cls} { transition: color, background-color, border-color, text-decoration-color, fill, stroke; transition-duration: var(--alive-duration-normal); transition-timing-function: var(--alive-ease-standard); }`\n if (cls === 'transition-opacity') return `.${cls} { transition: opacity; transition-duration: var(--alive-duration-normal); transition-timing-function: var(--alive-ease-standard); }`\n if (cls === 'transition-shadow') return `.${cls} { transition: box-shadow; transition-duration: var(--alive-duration-normal); transition-timing-function: var(--alive-ease-standard); }`\n if (cls === 'transition-transform') return `.${cls} { transition: transform; transition-duration: var(--alive-duration-normal); transition-timing-function: var(--alive-ease-standard); }`\n\n // Backdrop filter\n const blurMatch = cls.match(/^blur(?:-(.+))?$/)\n if (blurMatch) {\n const blurMap: Record<string, string> = {\n none: '0', sm: '4px', DEFAULT: '8px', md: '12px', lg: '16px',\n xl: '24px', '2xl': '40px', '3xl': '64px',\n }\n const key = blurMatch[1] ?? 'DEFAULT'\n if (has(blurMap, key)) return `.${cls} { filter: blur(${blurMap[key]}); }`\n }\n\n const backdropBlurMatch = cls.match(/^backdrop-blur(?:-(.+))?$/)\n if (backdropBlurMatch) {\n const blurMap: Record<string, string> = {\n none: '0', sm: '4px', DEFAULT: '8px', md: '12px', lg: '16px',\n xl: '24px', '2xl': '40px', '3xl': '64px',\n }\n const key = backdropBlurMatch[1] ?? 'DEFAULT'\n if (has(blurMap, key)) return `.${cls} { backdrop-filter: blur(${blurMap[key]}); }`\n }\n\n // ── Arbitrary value utilities ─────────────────────────────────────\n\n const arbOpacityMatch = cls.match(/^opacity-\\[(.+)\\]$/)\n if (arbOpacityMatch) {\n const escaped = escapeSelector(cls)\n return `.${escaped} {\\n opacity: ${arbOpacityMatch[1]};\\n transition-property: opacity;\\n transition-duration: var(--alive-duration, 0ms);\\n transition-timing-function: var(--alive-ease, linear);\\n}`\n }\n\n const arbZMatch = cls.match(/^z-\\[(.+)\\]$/)\n if (arbZMatch) {\n return `.${escapeSelector(cls)} { z-index: ${arbZMatch[1]}; }`\n }\n\n const arbRoundedMatch = cls.match(/^rounded-\\[(.+)\\]$/)\n if (arbRoundedMatch) {\n return `.${escapeSelector(cls)} { border-radius: ${arbRoundedMatch[1]}; }`\n }\n\n const arbBorderMatch = cls.match(/^border-\\[(.+)\\]$/)\n if (arbBorderMatch) {\n return `.${escapeSelector(cls)} { border-width: ${arbBorderMatch[1]}; border-style: solid; }`\n }\n\n const arbShadowMatch = cls.match(/^shadow-\\[(.+)\\]$/)\n if (arbShadowMatch) {\n return `.${escapeSelector(cls)} { box-shadow: ${arbShadowMatch[1]}; }`\n }\n\n const arbBlurMatch = cls.match(/^blur-\\[(.+)\\]$/)\n if (arbBlurMatch) {\n return `.${escapeSelector(cls)} { filter: blur(${arbBlurMatch[1]}); }`\n }\n\n const arbScaleMatch = cls.match(/^scale-\\[(.+)\\]$/)\n if (arbScaleMatch) {\n return `.${escapeSelector(cls)} { transform: scale(${arbScaleMatch[1]}); }`\n }\n\n const arbRotateMatch = cls.match(/^rotate-\\[(.+)\\]$/)\n if (arbRotateMatch) {\n return `.${escapeSelector(cls)} { transform: rotate(${arbRotateMatch[1]}); }`\n }\n\n const arbTranslateXMatch = cls.match(/^translate-x-\\[(.+)\\]$/)\n if (arbTranslateXMatch) {\n return `.${escapeSelector(cls)} { transform: translateX(${arbTranslateXMatch[1]}); }`\n }\n\n const arbTranslateYMatch = cls.match(/^translate-y-\\[(.+)\\]$/)\n if (arbTranslateYMatch) {\n return `.${escapeSelector(cls)} { transform: translateY(${arbTranslateYMatch[1]}); }`\n }\n\n return null\n}\n","import type { ResolvedConfig } from '../types'\nimport { generateBase } from './base'\nimport { generateColors } from './colors'\nimport { generateSpacing } from './spacing'\nimport { generateTypography } from './typography'\nimport { generateLayout } from './layout'\nimport { generateSizing } from './sizing'\nimport { generateEffects } from './effects'\nimport { parseVariants, escapeSelector, wrapVariants } from './utils'\n\nexport { generateBase }\n\nexport function generateUtilities(classes: Set<string>, config: ResolvedConfig): string {\n // Expand variant-prefixed classes into base classes + variant info\n const variantMap = new Map<string, { base: string; variants: string[]; original: string }>()\n const baseClasses = new Set<string>()\n\n for (const cls of classes) {\n const { variants, base } = parseVariants(cls)\n baseClasses.add(base)\n variantMap.set(cls, { base, variants, original: cls })\n }\n\n // Generate CSS for all base classes\n const generators = [\n generateColors,\n generateSpacing,\n generateTypography,\n generateLayout,\n generateSizing,\n generateEffects,\n generateAliveSpecific,\n ]\n\n const baseRuleMap = new Map<string, string>()\n for (const gen of generators) {\n const rules = gen(baseClasses, config)\n for (const r of rules) {\n // Extract the base class name from the rule selector.\n // Handles: simple (.w-4), escaped arbitrary (.w-\\[100px\\]), negative (.\\-m-4),\n // and multi-selector (.divide-x > * + *) rules.\n // Regex: match everything after the leading dot up to an unescaped space/brace/combinator/colon\n const selectorMatch = r.match(/^\\.((?:\\\\.|[^ {>+~:])*)/)\n if (selectorMatch && selectorMatch[1]) {\n // Unescape CSS escapes (e.g. \\[ → [, \\- → -) to recover the original class name\n const key = selectorMatch[1].replace(/\\\\(.)/g, '$1')\n baseRuleMap.set(key, r)\n }\n }\n }\n\n // Now build the final CSS — for each original class (with variants), wrap the base rule\n const baseOutput: string[] = []\n const mediaOutput = new Map<string, string[]>()\n\n for (const [original, { base, variants, }] of variantMap) {\n const baseRule = baseRuleMap.get(base)\n if (!baseRule) continue\n\n if (variants.length === 0) {\n baseOutput.push(baseRule)\n continue\n }\n\n // Separate responsive variants from state/dark variants\n const responsiveVariants = variants.filter(v => config.theme.screens[v])\n const stateVariants = variants.filter(v => !config.theme.screens[v])\n\n // Build the selector from the base rule but with escaped original class name\n const declMatch = baseRule.match(/\\{([\\s\\S]*)\\}/)\n if (!declMatch) continue\n\n let selector = `.${escapeSelector(original)}`\n for (const sv of stateVariants) {\n switch (sv) {\n case 'hover': selector += ':hover'; break\n case 'focus': selector += ':focus'; break\n case 'focus-visible': selector += ':focus-visible'; break\n case 'active': selector += ':active'; break\n case 'disabled': selector += ':disabled'; break\n case 'visited': selector += ':visited'; break\n case 'first': selector += ':first-child'; break\n case 'last': selector += ':last-child'; break\n case 'odd': selector += ':nth-child(odd)'; break\n case 'even': selector += ':nth-child(even)'; break\n case 'placeholder': selector += '::placeholder'; break\n case 'group-hover': selector = `.group:hover ${selector}`; break\n case 'dark':\n if (config.theme.darkMode === 'class') {\n selector = `.dark ${selector}`\n }\n break\n }\n }\n\n const wrappedRule = `${selector} {${declMatch[1]}}`\n\n if (responsiveVariants.length === 0) {\n // dark media query\n if (stateVariants.includes('dark') && config.theme.darkMode === 'media') {\n const mq = '@media (prefers-color-scheme: dark)'\n const existing = mediaOutput.get(mq) ?? []\n mediaOutput.set(mq, [...existing, wrappedRule])\n } else {\n baseOutput.push(wrappedRule)\n }\n } else {\n // Responsive variant — wrap in media query\n const screen = config.theme.screens[responsiveVariants[0]]\n const mq = `@media (min-width: ${screen})`\n const existing = mediaOutput.get(mq) ?? []\n mediaOutput.set(mq, [...existing, wrappedRule])\n }\n }\n\n // Sort media queries by breakpoint size\n const sortedMedia = [...mediaOutput.entries()].sort((a, b) => {\n const aSize = parseInt(a[0].match(/\\d+/)?.[0] ?? '0')\n const bSize = parseInt(b[0].match(/\\d+/)?.[0] ?? '0')\n return aSize - bSize\n })\n\n const mediaCSS = sortedMedia\n .map(([mq, rules]) => `${mq} {\\n${rules.map(r => ' ' + r.split('\\n').join('\\n ')).join('\\n')}\\n}`)\n .join('\\n\\n')\n\n const parts = [\n '/* AliveUI Utilities */',\n ...dedupe(baseOutput),\n mediaCSS,\n ].filter(Boolean)\n\n return parts.join('\\n\\n')\n}\n\n// Remove duplicate rules\nfunction dedupe(rules: string[]): string[] {\n const seen = new Set<string>()\n return rules.filter(r => {\n if (seen.has(r)) return false\n seen.add(r)\n return true\n })\n}\n\n// AliveUI-specific utilities not covered by other generators\nfunction generateAliveSpecific(classes: Set<string>, _config: ResolvedConfig): string[] {\n const rules: string[] = []\n\n for (const cls of classes) {\n // Depth utilities — already in base, but also match here for variant support\n if (cls === 'd1' || cls === 'd2' || cls === 'd3') continue\n\n // Skip all alive- prefixed classes that are defined in base (component primitives)\n const aliveBasePrefixes = [\n 'alive-enter', 'alive-exit', 'alive-loop', 'alive-card', 'alive-button',\n 'alive-badge', 'alive-input', 'alive-textarea', 'alive-select', 'alive-checkbox',\n 'alive-radio', 'alive-switch', 'alive-avatar', 'alive-skeleton', 'alive-progress',\n 'alive-separator', 'alive-alert', 'alive-tooltip', 'alive-modal', 'alive-drawer',\n 'alive-nav', 'alive-tabs', 'alive-tab', 'alive-dropdown', 'alive-table',\n 'alive-chip', 'alive-stack', 'alive-container', 'alive-cluster', 'alive-focus',\n 'alive-overlay', 'alive-toast', 'alive-command', 'alive-popover', 'alive-sidebar',\n 'alive-backdrop', 'alive-sr-only',\n ]\n if (aliveBasePrefixes.some(p => cls === p || cls.startsWith(p + '-'))) continue\n\n // Animate utilities (keyframes are defined in base.ts)\n if (cls === 'animate-none') { rules.push(`.${cls} { animation: none; }`); continue }\n if (cls === 'animate-spin') { rules.push(`.${cls} { animation: alive-spin 1s linear infinite; }`); continue }\n if (cls === 'animate-ping') { rules.push(`.${cls} { animation: alive-ping 1s cubic-bezier(0,0,0.2,1) infinite; }`); continue }\n if (cls === 'animate-pulse') { rules.push(`.${cls} { animation: alive-pulse 2s cubic-bezier(0.4,0,0.6,1) infinite; }`); continue }\n if (cls === 'animate-bounce') { rules.push(`.${cls} { animation: alive-bounce 1s infinite; }`); continue }\n if (cls === 'animate-shimmer') { rules.push(`.${cls} { animation: alive-shimmer 1.5s linear infinite; }`); continue }\n\n // Easing timing function overrides\n if (cls === 'ease-linear') { rules.push(`.${cls} { transition-timing-function: linear; }`); continue }\n if (cls === 'ease-in') { rules.push(`.${cls} { transition-timing-function: cubic-bezier(0.4,0,1,1); }`); continue }\n if (cls === 'ease-out') { rules.push(`.${cls} { transition-timing-function: cubic-bezier(0,0,0.2,1); }`); continue }\n if (cls === 'ease-in-out') { rules.push(`.${cls} { transition-timing-function: cubic-bezier(0.4,0,0.2,1); }`); continue }\n\n // Group utility\n if (cls === 'group') {\n rules.push(`.${cls} {}`) // marker class\n continue\n }\n\n // Stagger gap override: stagger-{ms}\n const staggerMatch = cls.match(/^stagger-(\\d+)$/)\n if (staggerMatch) {\n rules.push(`.${cls} { --alive-stagger-gap: ${staggerMatch[1]}ms; }`)\n continue\n }\n\n // Stagger index: alive-index-{n}\n const indexMatch = cls.match(/^alive-index-(\\d+)$/)\n if (indexMatch) {\n rules.push(`.${cls} { --alive-index: ${indexMatch[1]}; }`)\n continue\n }\n\n // Custom duration override: duration-{ms}\n const durationMatch = cls.match(/^duration-(\\d+)$/)\n if (durationMatch) {\n rules.push(`.${cls} { --alive-duration: ${durationMatch[1]}ms; }`)\n continue\n }\n\n // Delay: delay-{ms}\n const delayMatch = cls.match(/^delay-(\\d+)$/)\n if (delayMatch) {\n rules.push(`.${cls} { animation-delay: ${delayMatch[1]}ms; }`)\n continue\n }\n\n // Motion tokens as animation-duration shorthand: motion-{ms}\n const motionMsMatch = cls.match(/^motion-(\\d+)$/)\n if (motionMsMatch) {\n rules.push(`.${cls} { --alive-duration: ${motionMsMatch[1]}ms !important; }`)\n continue\n }\n\n // Divide utilities\n if (cls === 'divide-x') {\n rules.push(`.${cls} > * + * { border-left-width: 1px; border-left-style: solid; }`)\n continue\n }\n if (cls === 'divide-y') {\n rules.push(`.${cls} > * + * { border-top-width: 1px; border-top-style: solid; }`)\n continue\n }\n const divideColorMatch = cls.match(/^divide-([a-z]+)(?:-(\\d+))?$/)\n if (divideColorMatch) {\n rules.push(`.${cls} > * + * { border-color: inherit; }`)\n continue\n }\n\n // Appearance\n if (cls === 'appearance-none') { rules.push(`.${cls} { appearance: none; }`); continue }\n if (cls === 'appearance-auto') { rules.push(`.${cls} { appearance: auto; }`); continue }\n\n // Resize\n if (cls === 'resize-none') { rules.push(`.${cls} { resize: none; }`); continue }\n if (cls === 'resize') { rules.push(`.${cls} { resize: both; }`); continue }\n if (cls === 'resize-y') { rules.push(`.${cls} { resize: vertical; }`); continue }\n if (cls === 'resize-x') { rules.push(`.${cls} { resize: horizontal; }`); continue }\n\n // Scroll snap\n if (cls === 'snap-none') { rules.push(`.${cls} { scroll-snap-type: none; }`); continue }\n if (cls === 'snap-x') { rules.push(`.${cls} { scroll-snap-type: x mandatory; }`); continue }\n if (cls === 'snap-y') { rules.push(`.${cls} { scroll-snap-type: y mandatory; }`); continue }\n if (cls === 'snap-start') { rules.push(`.${cls} { scroll-snap-align: start; }`); continue }\n if (cls === 'snap-center') { rules.push(`.${cls} { scroll-snap-align: center; }`); continue }\n if (cls === 'snap-end') { rules.push(`.${cls} { scroll-snap-align: end; }`); continue }\n\n // Pointer events\n if (cls === 'pointer-events-none') { rules.push(`.${cls} { pointer-events: none; }`); continue }\n if (cls === 'pointer-events-auto') { rules.push(`.${cls} { pointer-events: auto; }`); continue }\n\n // Screen reader\n if (cls === 'sr-only') {\n rules.push(`.${cls} { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border-width: 0; }`)\n continue\n }\n if (cls === 'not-sr-only') {\n rules.push(`.${cls} { position: static; width: auto; height: auto; padding: 0; margin: 0; overflow: visible; clip: auto; white-space: normal; }`)\n continue\n }\n\n // Will-change\n if (cls === 'will-change-auto') { rules.push(`.${cls} { will-change: auto; }`); continue }\n if (cls === 'will-change-transform') { rules.push(`.${cls} { will-change: transform; }`); continue }\n if (cls === 'will-change-opacity') { rules.push(`.${cls} { will-change: opacity; }`); continue }\n\n // Line clamp\n const lineClampMatch = cls.match(/^line-clamp-(\\d+)$/)\n if (lineClampMatch) {\n const n = lineClampMatch[1]\n rules.push(`.${cls} { overflow: hidden; display: -webkit-box; -webkit-line-clamp: ${n}; -webkit-box-orient: vertical; }`)\n continue\n }\n\n // Aspect ratio\n if (cls === 'aspect-square') { rules.push(`.${cls} { aspect-ratio: 1 / 1; }`); continue }\n if (cls === 'aspect-video') { rules.push(`.${cls} { aspect-ratio: 16 / 9; }`); continue }\n if (cls === 'aspect-auto') { rules.push(`.${cls} { aspect-ratio: auto; }`); continue }\n\n // Object fit\n if (cls === 'object-contain') { rules.push(`.${cls} { object-fit: contain; }`); continue }\n if (cls === 'object-cover') { rules.push(`.${cls} { object-fit: cover; }`); continue }\n if (cls === 'object-fill') { rules.push(`.${cls} { object-fit: fill; }`); continue }\n if (cls === 'object-none') { rules.push(`.${cls} { object-fit: none; }`); continue }\n if (cls === 'object-scale') { rules.push(`.${cls} { object-fit: scale-down; }`); continue }\n\n // Mix blend mode\n if (cls === 'mix-blend-multiply') { rules.push(`.${cls} { mix-blend-mode: multiply; }`); continue }\n if (cls === 'mix-blend-screen') { rules.push(`.${cls} { mix-blend-mode: screen; }`); continue }\n if (cls === 'mix-blend-overlay') { rules.push(`.${cls} { mix-blend-mode: overlay; }`); continue }\n if (cls === 'mix-blend-normal') { rules.push(`.${cls} { mix-blend-mode: normal; }`); continue }\n\n // Isolation\n if (cls === 'isolate') { rules.push(`.${cls} { isolation: isolate; }`); continue }\n if (cls === 'isolation-auto') { rules.push(`.${cls} { isolation: auto; }`); continue }\n\n // Touch action\n if (cls === 'touch-auto') { rules.push(`.${cls} { touch-action: auto; }`); continue }\n if (cls === 'touch-none') { rules.push(`.${cls} { touch-action: none; }`); continue }\n if (cls === 'touch-pan-x') { rules.push(`.${cls} { touch-action: pan-x; }`); continue }\n if (cls === 'touch-pan-y') { rules.push(`.${cls} { touch-action: pan-y; }`); continue }\n if (cls === 'touch-manipulation') { rules.push(`.${cls} { touch-action: manipulation; }`); continue }\n\n // User select\n if (cls === 'select-none') { rules.push(`.${cls} { user-select: none; }`); continue }\n if (cls === 'select-text') { rules.push(`.${cls} { user-select: text; }`); continue }\n if (cls === 'select-all') { rules.push(`.${cls} { user-select: all; }`); continue }\n if (cls === 'select-auto') { rules.push(`.${cls} { user-select: auto; }`); continue }\n\n // Break\n if (cls === 'break-normal') { rules.push(`.${cls} { overflow-wrap: normal; word-break: normal; }`); continue }\n if (cls === 'break-words') { rules.push(`.${cls} { overflow-wrap: break-word; }`); continue }\n if (cls === 'break-all') { rules.push(`.${cls} { word-break: break-all; }`); continue }\n if (cls === 'break-keep') { rules.push(`.${cls} { word-break: keep-all; }`); continue }\n }\n\n return rules\n}\n","import type { PluginCreator } from 'postcss'\nimport { resolveConfig } from './config'\nimport { scanContent } from './scanner'\nimport { generateBase, generateUtilities } from './generator'\nimport type { AliveUIConfig } from './types'\n\nexport type { AliveUIConfig } from './types'\nexport type { AliveUITheme } from './types'\nexport { resolveConfig } from './config'\nexport { generateBase, generateUtilities } from './generator'\nexport { scanContent } from './scanner'\n\nconst aliveui: PluginCreator<Partial<AliveUIConfig>> = (userConfig = {}) => {\n const config = resolveConfig(userConfig)\n\n return {\n postcssPlugin: 'aliveui',\n\n async Once(root, { result, postcss }) {\n const classes = await scanContent(config)\n\n // Declare layers upfront so user @layer rules always take precedence\n const hasAliveDirective = root.some(node => node.type === 'atrule' && (node as import('postcss').AtRule).name === 'aliveui')\n if (hasAliveDirective) {\n const layerDecl = postcss.atRule({ name: 'layer', params: 'aliveui.base, aliveui.utilities' })\n root.prepend(layerDecl)\n }\n\n root.walkAtRules('aliveui', atRule => {\n const param = atRule.params.trim()\n\n if (param === 'base') {\n const css = `@layer aliveui.base {\\n${generateBase(config)}\\n}`\n const parsed = postcss.parse(css, { from: atRule.source?.input.file })\n atRule.replaceWith(parsed.nodes)\n } else if (param === 'utilities') {\n const css = `@layer aliveui.utilities {\\n${generateUtilities(classes, config)}\\n}`\n const parsed = postcss.parse(css, { from: atRule.source?.input.file })\n atRule.replaceWith(parsed.nodes)\n } else {\n result.warn(`Unknown @aliveui directive: \"${param}\". Use \"base\" or \"utilities\".`, {\n node: atRule,\n })\n atRule.remove()\n }\n })\n },\n }\n}\n\naliveui.postcss = true\n\nexport default aliveui\n\n// CJS interop: make require('aliveui') return the function directly\nif (typeof module !== 'undefined') {\n module.exports = aliveui\n module.exports.default = aliveui\n}\n","/**\n * AliveUI Vite Plugin\n *\n * Injects the AliveUI PostCSS plugin into Vite's CSS pipeline so that\n * `@aliveui` directives in your CSS are processed automatically.\n *\n * Usage in vite.config.ts:\n * import { aliveUIVite } from '@alivecss/aliveui/vite'\n *\n * export default defineConfig({\n * plugins: [aliveUIVite({ content: ['./src/**\\/*.{ts,tsx,html}'] })],\n * })\n */\n\nimport type { Plugin } from 'vite'\nimport type { AliveUIConfig } from './types'\n\nexport function aliveUIVite(config?: Partial<AliveUIConfig>): Plugin {\n return {\n name: 'vite-plugin-aliveui',\n config() {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const aliveui = require('.') as { default: (cfg?: Partial<AliveUIConfig>) => import('postcss').Plugin }\n return {\n css: {\n postcss: {\n plugins: [aliveui.default(config)],\n },\n },\n }\n },\n }\n}\n\nexport default aliveUIVite\n"],"mappings":"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AAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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","names":["init_colors","has","has","has","init_colors","aliveui"]}