331 lines
7.6 KiB
TypeScript
331 lines
7.6 KiB
TypeScript
import { createTheme, alpha } from '@mui/material/styles';
|
|
|
|
// Modern 2026 design tokens
|
|
export const modernTokens = {
|
|
colors: {
|
|
primary: {
|
|
50: '#f0f4ff',
|
|
100: '#e0eaff',
|
|
200: '#c7d7fe',
|
|
300: '#a5b8fc',
|
|
400: '#8b93f8',
|
|
500: '#6366f1',
|
|
600: '#4f46e5',
|
|
700: '#4338ca',
|
|
800: '#3730a3',
|
|
900: '#312e81',
|
|
},
|
|
secondary: {
|
|
50: '#fdf4ff',
|
|
100: '#fae8ff',
|
|
200: '#f5d0fe',
|
|
300: '#f0abfc',
|
|
400: '#e879f9',
|
|
500: '#d946ef',
|
|
600: '#c026d3',
|
|
700: '#a21caf',
|
|
800: '#86198f',
|
|
900: '#701a75',
|
|
},
|
|
neutral: {
|
|
0: '#ffffff',
|
|
50: '#fafafa',
|
|
100: '#f5f5f5',
|
|
200: '#e5e5e5',
|
|
300: '#d4d4d4',
|
|
400: '#a3a3a3',
|
|
500: '#737373',
|
|
600: '#525252',
|
|
700: '#404040',
|
|
800: '#262626',
|
|
900: '#171717',
|
|
950: '#0a0a0a',
|
|
},
|
|
success: {
|
|
50: '#f0fdf4',
|
|
100: '#dcfce7',
|
|
200: '#bbf7d0',
|
|
300: '#86efac',
|
|
400: '#4ade80',
|
|
500: '#22c55e',
|
|
600: '#16a34a',
|
|
700: '#15803d',
|
|
800: '#166534',
|
|
900: '#14532d',
|
|
},
|
|
warning: {
|
|
50: '#fffbeb',
|
|
100: '#fef3c7',
|
|
200: '#fde68a',
|
|
300: '#fcd34d',
|
|
400: '#fbbf24',
|
|
500: '#f59e0b',
|
|
600: '#d97706',
|
|
700: '#b45309',
|
|
800: '#92400e',
|
|
900: '#78350f',
|
|
},
|
|
error: {
|
|
50: '#fef2f2',
|
|
100: '#fee2e2',
|
|
200: '#fecaca',
|
|
300: '#fca5a5',
|
|
400: '#f87171',
|
|
500: '#ef4444',
|
|
600: '#dc2626',
|
|
700: '#b91c1c',
|
|
800: '#991b1b',
|
|
900: '#7f1d1d',
|
|
},
|
|
info: {
|
|
50: '#eff6ff',
|
|
100: '#dbeafe',
|
|
200: '#bfdbfe',
|
|
300: '#93c5fd',
|
|
400: '#60a5fa',
|
|
500: '#3b82f6',
|
|
600: '#2563eb',
|
|
700: '#1d4ed8',
|
|
800: '#1e40af',
|
|
900: '#1e3a8a',
|
|
},
|
|
blue: {
|
|
50: '#eff6ff',
|
|
100: '#dbeafe',
|
|
200: '#bfdbfe',
|
|
300: '#93c5fd',
|
|
400: '#60a5fa',
|
|
500: '#3b82f6',
|
|
600: '#2563eb',
|
|
700: '#1d4ed8',
|
|
800: '#1e40af',
|
|
900: '#1e3a8a',
|
|
},
|
|
orange: {
|
|
50: '#fff7ed',
|
|
100: '#ffedd5',
|
|
200: '#fed7aa',
|
|
300: '#fdba74',
|
|
400: '#fb923c',
|
|
500: '#f97316',
|
|
600: '#ea580c',
|
|
700: '#c2410c',
|
|
800: '#9a3412',
|
|
900: '#7c2d12',
|
|
},
|
|
green: {
|
|
50: '#f0fdf4',
|
|
100: '#dcfce7',
|
|
200: '#bbf7d0',
|
|
300: '#86efac',
|
|
400: '#4ade80',
|
|
500: '#22c55e',
|
|
600: '#16a34a',
|
|
700: '#15803d',
|
|
800: '#166534',
|
|
900: '#14532d',
|
|
},
|
|
},
|
|
shadows: {
|
|
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)',
|
|
xl: '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)',
|
|
glass: '0 8px 32px 0 rgba(31, 38, 135, 0.37)',
|
|
},
|
|
};
|
|
|
|
// Glassmorphism effect helper
|
|
export const glassEffect = (alphaValue: number = 0.1) => ({
|
|
background: `rgba(255, 255, 255, ${alphaValue})`,
|
|
backdropFilter: 'blur(10px)',
|
|
border: '1px solid rgba(255, 255, 255, 0.2)',
|
|
boxShadow: modernTokens.shadows.glass,
|
|
});
|
|
|
|
// Modern card style
|
|
export const modernCard = {
|
|
borderRadius: 16,
|
|
boxShadow: modernTokens.shadows.md,
|
|
border: `1px solid ${modernTokens.colors.neutral[200]}`,
|
|
background: modernTokens.colors.neutral[0],
|
|
transition: 'all 0.2s ease-in-out',
|
|
'&:hover': {
|
|
boxShadow: modernTokens.shadows.lg,
|
|
transform: 'translateY(-1px)',
|
|
},
|
|
};
|
|
|
|
const theme = createTheme({
|
|
palette: {
|
|
primary: {
|
|
main: modernTokens.colors.primary[500],
|
|
light: modernTokens.colors.primary[300],
|
|
dark: modernTokens.colors.primary[700],
|
|
50: modernTokens.colors.primary[50],
|
|
100: modernTokens.colors.primary[100],
|
|
200: modernTokens.colors.primary[200],
|
|
300: modernTokens.colors.primary[300],
|
|
400: modernTokens.colors.primary[400],
|
|
500: modernTokens.colors.primary[500],
|
|
600: modernTokens.colors.primary[600],
|
|
700: modernTokens.colors.primary[700],
|
|
800: modernTokens.colors.primary[800],
|
|
900: modernTokens.colors.primary[900],
|
|
},
|
|
secondary: {
|
|
main: modernTokens.colors.secondary[500],
|
|
light: modernTokens.colors.secondary[300],
|
|
dark: modernTokens.colors.secondary[700],
|
|
},
|
|
background: {
|
|
default: modernTokens.colors.neutral[50],
|
|
paper: modernTokens.colors.neutral[0],
|
|
},
|
|
text: {
|
|
primary: modernTokens.colors.neutral[900],
|
|
secondary: modernTokens.colors.neutral[600],
|
|
},
|
|
divider: modernTokens.colors.neutral[200],
|
|
success: {
|
|
main: modernTokens.colors.success[500],
|
|
light: modernTokens.colors.success[50],
|
|
dark: modernTokens.colors.success[600],
|
|
},
|
|
warning: {
|
|
main: modernTokens.colors.warning[500],
|
|
light: modernTokens.colors.warning[50],
|
|
dark: modernTokens.colors.warning[600],
|
|
},
|
|
error: {
|
|
main: modernTokens.colors.error[500],
|
|
light: modernTokens.colors.error[50],
|
|
dark: modernTokens.colors.error[600],
|
|
},
|
|
info: {
|
|
main: modernTokens.colors.info[500],
|
|
light: modernTokens.colors.info[50],
|
|
dark: modernTokens.colors.info[600],
|
|
},
|
|
},
|
|
typography: {
|
|
fontFamily: [
|
|
'"Inter"',
|
|
'-apple-system',
|
|
'BlinkMacSystemFont',
|
|
'"Segoe UI"',
|
|
'Roboto',
|
|
'"Helvetica Neue"',
|
|
'Arial',
|
|
'sans-serif',
|
|
].join(','),
|
|
h1: {
|
|
fontSize: '2.25rem',
|
|
fontWeight: 800,
|
|
lineHeight: 1.2,
|
|
},
|
|
h2: {
|
|
fontSize: '1.875rem',
|
|
fontWeight: 700,
|
|
lineHeight: 1.2,
|
|
},
|
|
h3: {
|
|
fontSize: '1.5rem',
|
|
fontWeight: 700,
|
|
lineHeight: 1.2,
|
|
},
|
|
h4: {
|
|
fontSize: '1.25rem',
|
|
fontWeight: 600,
|
|
lineHeight: 1.5,
|
|
},
|
|
h5: {
|
|
fontSize: '1.125rem',
|
|
fontWeight: 600,
|
|
lineHeight: 1.5,
|
|
},
|
|
h6: {
|
|
fontSize: '1rem',
|
|
fontWeight: 600,
|
|
lineHeight: 1.5,
|
|
},
|
|
body1: {
|
|
fontSize: '1rem',
|
|
fontWeight: 400,
|
|
lineHeight: 1.75,
|
|
},
|
|
body2: {
|
|
fontSize: '0.875rem',
|
|
fontWeight: 400,
|
|
lineHeight: 1.5,
|
|
},
|
|
caption: {
|
|
fontSize: '0.75rem',
|
|
fontWeight: 400,
|
|
lineHeight: 1.5,
|
|
},
|
|
},
|
|
shape: {
|
|
borderRadius: 12,
|
|
},
|
|
components: {
|
|
MuiButton: {
|
|
styleOverrides: {
|
|
root: {
|
|
textTransform: 'none',
|
|
borderRadius: 8,
|
|
fontWeight: 500,
|
|
boxShadow: 'none',
|
|
'&:hover': {
|
|
boxShadow: modernTokens.shadows.sm,
|
|
},
|
|
},
|
|
contained: {
|
|
background: `linear-gradient(135deg, ${modernTokens.colors.primary[500]} 0%, ${modernTokens.colors.primary[600]} 100%)`,
|
|
'&:hover': {
|
|
background: `linear-gradient(135deg, ${modernTokens.colors.primary[600]} 0%, ${modernTokens.colors.primary[700]} 100%)`,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
MuiCard: {
|
|
styleOverrides: {
|
|
root: modernCard,
|
|
},
|
|
},
|
|
MuiPaper: {
|
|
styleOverrides: {
|
|
root: {
|
|
borderRadius: 12,
|
|
boxShadow: modernTokens.shadows.sm,
|
|
},
|
|
},
|
|
},
|
|
MuiChip: {
|
|
styleOverrides: {
|
|
root: {
|
|
borderRadius: 8,
|
|
fontWeight: 500,
|
|
},
|
|
},
|
|
},
|
|
MuiAccordion: {
|
|
styleOverrides: {
|
|
root: {
|
|
boxShadow: 'none',
|
|
border: `1px solid ${modernTokens.colors.neutral[200]}`,
|
|
borderRadius: 8,
|
|
'&:before': {
|
|
display: 'none',
|
|
},
|
|
'&.Mui-expanded': {
|
|
margin: 0,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
});
|
|
|
|
export default theme; |