/**
 * Shared Tailwind CSS preset for all ManaCore apps
 *
 * This preset uses HSL-based CSS variables for theming.
 * Colors are defined as HSL values (e.g., "47 95% 58%") and
 * wrapped with hsl() in the Tailwind config for flexibility.
 *
 * Usage in tailwind.config.js:
 * ```
 * import preset from '@manacore/shared-tailwind/preset';
 *
 * export default {
 *   presets: [preset],
 *   content: ['./src/**\/*.{html,js,svelte,ts}'],
 *   // app-specific overrides...
 * }
 * ```
 */

/** @type {import('tailwindcss').Config} */
const preset = {
	darkMode: 'class',
	theme: {
		extend: {
			colors: {
				// Brand color (consistent across all apps)
				mana: '#4287f5',

				// ===== HSL-Based Semantic Colors =====
				// These use CSS variables set by @manacore/shared-theme
				// Format: hsl(var(--color-name)) where --color-name is "H S% L%"

				// Page background
				background: 'hsl(var(--color-background))',

				// Main text color
				foreground: 'hsl(var(--color-foreground))',

				// Primary brand color (customizable per app)
				primary: {
					DEFAULT: 'hsl(var(--color-primary))',
					foreground: 'hsl(var(--color-primary-foreground))',
				},

				// Secondary accent
				secondary: {
					DEFAULT: 'hsl(var(--color-secondary))',
					foreground: 'hsl(var(--color-secondary-foreground))',
				},

				// Card/content surfaces
				surface: {
					DEFAULT: 'hsl(var(--color-surface))',
					hover: 'hsl(var(--color-surface-hover))',
					elevated: 'hsl(var(--color-surface-elevated))',
				},

				// Muted/disabled elements
				muted: {
					DEFAULT: 'hsl(var(--color-muted))',
					foreground: 'hsl(var(--color-muted-foreground))',
				},

				// Borders
				border: {
					DEFAULT: 'hsl(var(--color-border))',
					strong: 'hsl(var(--color-border-strong))',
				},

				// Semantic/feedback colors
				error: 'hsl(var(--color-error))',
				success: 'hsl(var(--color-success))',
				warning: 'hsl(var(--color-warning))',

				// Form elements
				input: 'hsl(var(--color-input))',
				ring: 'hsl(var(--color-ring))',

				// ===== Legacy aliases (for backwards compatibility) =====
				content: {
					DEFAULT: 'hsl(var(--color-surface))',
					hover: 'hsl(var(--color-surface-hover))',
					page: 'hsl(var(--color-background))',
				},
				menu: {
					DEFAULT: 'hsl(var(--color-muted))',
					hover: 'hsl(var(--color-surface-hover))',
				},
				theme: {
					DEFAULT: 'hsl(var(--color-foreground))',
					secondary: 'hsl(var(--color-muted-foreground))',
				},
				'primary-btn': {
					DEFAULT: 'hsl(var(--color-primary))',
					text: 'hsl(var(--color-primary-foreground))',
				},
			},

			// Border radius tokens (CSS variable support)
			borderRadius: {
				none: '0',
				sm: 'var(--radius-sm, 0.25rem)',
				DEFAULT: 'var(--radius, 0.375rem)',
				md: 'var(--radius-md, 0.5rem)',
				lg: 'var(--radius-lg, 0.75rem)',
				xl: 'var(--radius-xl, 1rem)',
				'2xl': 'var(--radius-2xl, 1.5rem)',
				'3xl': 'var(--radius-3xl, 2rem)',
				full: '9999px',
			},

			// Box shadow tokens
			boxShadow: {
				sm: '0 1px 2px 0 rgb(0 0 0 / 0.05)',
				DEFAULT: '0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)',
				md: '0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)',
				lg: '0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)',
				xl: '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)',
				'2xl': '0 25px 50px -12px rgb(0 0 0 / 0.25)',
				inner: 'inset 0 2px 4px 0 rgb(0 0 0 / 0.05)',
				none: 'none',
			},

			// Font family
			fontFamily: {
				sans: [
					'Inter',
					'system-ui',
					'-apple-system',
					'BlinkMacSystemFont',
					'Segoe UI',
					'Roboto',
					'Helvetica Neue',
					'Arial',
					'sans-serif',
				],
				mono: ['JetBrains Mono', 'Fira Code', 'Menlo', 'Monaco', 'Consolas', 'monospace'],
			},

			// Animation
			animation: {
				'spin-slow': 'spin 3s linear infinite',
				'pulse-slow': 'pulse 3s cubic-bezier(0.4, 0, 0.6, 1) infinite',
				'bounce-slow': 'bounce 2s infinite',
				'fade-in': 'fadeIn 0.2s ease-out',
				'fade-out': 'fadeOut 0.2s ease-in',
				'slide-in': 'slideIn 0.2s ease-out',
				'slide-out': 'slideOut 0.2s ease-in',
			},

			keyframes: {
				fadeIn: {
					'0%': { opacity: '0' },
					'100%': { opacity: '1' },
				},
				fadeOut: {
					'0%': { opacity: '1' },
					'100%': { opacity: '0' },
				},
				slideIn: {
					'0%': { transform: 'translateY(-10px)', opacity: '0' },
					'100%': { transform: 'translateY(0)', opacity: '1' },
				},
				slideOut: {
					'0%': { transform: 'translateY(0)', opacity: '1' },
					'100%': { transform: 'translateY(-10px)', opacity: '0' },
				},
			},

			// Transition
			transitionDuration: {
				250: '250ms',
				350: '350ms',
				400: '400ms',
			},
		},
	},
	plugins: [],
};

export default preset;
