ca-grow-ops-manager/frontend/tailwind.config.cjs
fullsizemalt 60085da01b
Some checks are pending
Deploy to Production / deploy (push) Waiting to run
Test / backend-test (push) Waiting to run
Test / frontend-test (push) Waiting to run
fix(build): Hardcode colors in tailwind.config.cjs
- Replaced tailwindcss/colors require with hardcoded values to bypass module loading issues
- Finalized Stone/Lime palette implementation
- This resolves persistence build failures on the remote
2025-12-19 15:41:42 -08:00

213 lines
8.3 KiB
JavaScript

/** @type {import('tailwindcss').Config} */
module.exports = {
content: [
"./index.html",
"./src/**/*.{js,ts,jsx,tsx}",
],
darkMode: 'class',
theme: {
// Mobile-first breakpoints
screens: {
'xs': '375px',
'sm': '640px',
'md': '768px',
'lg': '1024px',
'xl': '1280px',
'2xl': '1536px',
},
container: {
center: true,
padding: {
DEFAULT: '1rem',
sm: '1.5rem',
md: '2rem',
lg: '3rem',
},
screens: {
"2xl": "1400px",
},
},
extend: {
// Design OS Palette (Stone & Lime) - Hardcoded for build stability
colors: {
// Neutral scale (Stone)
neutral: {
50: '#fafaf9',
100: '#f5f5f4',
200: '#e7e5e4',
300: '#d6d3d1',
400: '#a8a29e',
500: '#78716c',
600: '#57534e',
700: '#44403c',
800: '#292524',
900: '#1c1917',
950: '#0c0a09',
850: '#1c1917', // Legacy support
},
// Primary Accent (Lime)
accent: {
DEFAULT: '#84cc16', // lime-500
hover: '#a3e635', // lime-400
muted: 'rgba(132, 204, 22, 0.15)',
foreground: '#0c0a09',
50: '#f7fee7',
100: '#ecfccb',
200: '#d9f99d',
300: '#bef264',
400: '#a3e635',
500: '#84cc16',
600: '#65a30d',
700: '#4d7c0f',
800: '#3f6212',
900: '#365314',
950: '#1a2e05',
},
// Semantic colors
success: {
DEFAULT: '#10b981', // emerald-500
muted: 'rgba(16, 185, 129, 0.15)',
foreground: '#FFFFFF',
},
warning: {
DEFAULT: '#f59e0b', // amber-500
muted: 'rgba(245, 158, 11, 0.15)',
foreground: '#171717',
},
destructive: {
DEFAULT: '#ef4444', // red-500
muted: 'rgba(239, 68, 68, 0.15)',
foreground: '#FFFFFF',
},
// Mappings
border: '#e7e5e4', // stone-200
input: '#e7e5e4',
ring: '#84cc16', // lime-500
background: '#fafaf9', // stone-50
foreground: '#0c0a09', // stone-950
primary: {
DEFAULT: '#84cc16',
foreground: '#0c0a09',
},
secondary: {
DEFAULT: '#f5f5f4', // stone-100
foreground: '#1c1917',
},
muted: {
DEFAULT: '#f5f5f4',
foreground: '#78716c',
},
popover: {
DEFAULT: "#FFFFFF",
foreground: '#0c0a09',
},
card: {
DEFAULT: "#FFFFFF",
foreground: '#0c0a09',
},
},
borderRadius: {
'xs': '4px',
'sm': '6px',
'md': '8px',
'lg': '12px',
'xl': '16px',
},
// Touch-friendly spacing
spacing: {
'touch': '44px',
'touch-lg': '56px',
},
// Linear-inspired typography
fontFamily: {
sans: ['Inter', '-apple-system', 'BlinkMacSystemFont', 'Segoe UI', 'Roboto', 'sans-serif'],
display: ['Space Grotesk', 'Inter', '-apple-system', 'BlinkMacSystemFont', 'sans-serif'],
mono: ['JetBrains Mono', 'Fira Code', 'Consolas', 'monospace'],
},
fontSize: {
'xs': ['11px', { lineHeight: '1.4', letterSpacing: '0.01em' }],
'sm': ['13px', { lineHeight: '1.5', letterSpacing: '-0.01em' }],
'base': ['14px', { lineHeight: '1.6', letterSpacing: '-0.01em' }],
'lg': ['16px', { lineHeight: '1.5', letterSpacing: '-0.02em', fontWeight: '500' }],
'xl': ['18px', { lineHeight: '1.4', letterSpacing: '-0.02em', fontWeight: '600' }],
'2xl': ['24px', { lineHeight: '1.3', letterSpacing: '-0.02em', fontWeight: '600' }],
'3xl': ['30px', { lineHeight: '1.2', letterSpacing: '-0.02em', fontWeight: '700' }],
'4xl': ['36px', { lineHeight: '1.1', letterSpacing: '-0.02em', fontWeight: '700' }],
},
// Animation timing (Linear-style)
transitionTimingFunction: {
'out-expo': 'cubic-bezier(0.16, 1, 0.3, 1)',
'in-out-expo': 'cubic-bezier(0.87, 0, 0.13, 1)',
'spring': 'cubic-bezier(0.34, 1.56, 0.64, 1)',
},
transitionDuration: {
'instant': '50ms',
'fast': '100ms',
'normal': '150ms',
'slow': '250ms',
'slower': '400ms',
},
// Keyframe animations
keyframes: {
'fade-in': {
'0%': { opacity: '0' },
'100%': { opacity: '1' },
},
'fade-out': {
'0%': { opacity: '1' },
'100%': { opacity: '0' },
},
'slide-up': {
'0%': { opacity: '0', transform: 'translateY(8px)' },
'100%': { opacity: '1', transform: 'translateY(0)' },
},
'slide-down': {
'0%': { opacity: '0', transform: 'translateY(-8px)' },
'100%': { opacity: '1', transform: 'translateY(0)' },
},
'scale-in': {
'0%': { opacity: '0', transform: 'scale(0.95)' },
'100%': { opacity: '1', transform: 'scale(1)' },
},
'scale-out': {
'0%': { opacity: '1', transform: 'scale(1)' },
'100%': { opacity: '0', transform: 'scale(0.95)' },
},
'shimmer': {
'0%': { backgroundPosition: '-200% 0' },
'100%': { backgroundPosition: '200% 0' },
},
'pulse-subtle': {
'0%, 100%': { opacity: '1' },
'50%': { opacity: '0.7' },
},
'spin-slow': {
'0%': { transform: 'rotate(0deg)' },
'100%': { transform: 'rotate(360deg)' },
},
},
animation: {
'fade-in': 'fade-in 150ms ease-out',
'fade-out': 'fade-out 150ms ease-out',
'slide-up': 'slide-up 200ms cubic-bezier(0.16, 1, 0.3, 1)',
'slide-down': 'slide-down 200ms cubic-bezier(0.16, 1, 0.3, 1)',
'scale-in': 'scale-in 150ms cubic-bezier(0.16, 1, 0.3, 1)',
'scale-out': 'scale-out 150ms cubic-bezier(0.16, 1, 0.3, 1)',
'shimmer': 'shimmer 2s linear infinite',
'pulse-subtle': 'pulse-subtle 2s ease-in-out infinite',
'spin-slow': 'spin-slow 3s linear infinite',
},
// Box shadows (subtle, Linear-style)
boxShadow: {
'xs': '0 1px 2px 0 rgb(0 0 0 / 0.05)',
'sm': '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)',
'focus': '0 0 0 3px rgba(94, 106, 210, 0.25)',
'focus-destructive': '0 0 0 3px rgba(239, 68, 68, 0.25)',
},
},
},
},
plugins: [],
}