super-fit-web-app / src / themes / primary.ts
primary.ts
Raw
import { createTheme, Theme } from "@mui/material";
import { CustomTheme } from ".";

//declare new button variants here
declare module '@mui/material/styles' {
    interface ButtonPropsVariantOverrides {
        content: true;
        helper: true;
        basic: true;
    }

    interface TypographyPropsVariantOverrides {
        footerLink: true;
    }
}

const defaultBackground = '#f1e0ff';

//purpleish pink background mesh gradient
const backgroundGradient = 'radial-gradient(at 100% 44%, hsla(272,100%,70%,0.37) 0px, transparent 50%), radial-gradient(at 15% 100%, hsla(279,100%,76%,0.57) 0px, transparent 50%)';

// border gradient used in GradientBorderBox component
const borderBoxGradient = 'radial-gradient(at 100% 44%, hsla(272,100%,70%,0.37) 0px, transparent 50%), radial-gradient(at 15% 100%, hsla(279,100%,76%,0.57) 0px, transparent 50%)';

// transparent black to dark blue gradient used in DialogContainer component
const dialogContainerGradient = `radial-gradient(at 100% 44%, hsla(272,100%,70%,0.37) 0px, transparent 50%), radial-gradient(at 15% 100%, hsla(279,100%,76%,0.57) 0px, transparent 50%)`;

//default horizontal padding for sections
const sectionPaddingX = { xs: 1, md: '3%', lg: '7%' };

const paperBackground: string = '#FAFAFA'

const primaryPink: string = '#E9C3FC';
const secondaryPink: string = '#CE6DFF'
const pureWhite: string = '#FFFFFF';
const black: string = '#000000'

const primaryFont: string = 'Comfortaa'

declare module '@mui/material/Button' {
    interface ButtonPropsVariantOverrides {
      content: true;
      helper: true;
      basic: true;
    }
}

declare module '@mui/material/Typography' {
    interface TypographyPropsVariantOverrides {
      footerLink: true;
    }
}

export const primaryTheme: CustomTheme = createTheme({
    palette: {
        mode: 'light',
        background: {
            default: defaultBackground,
            paper: paperBackground
        },
        primary: {
            main: primaryPink
        },
        secondary: {
            main: secondaryPink
        }
    },
    components: {
        MuiButton: {
            variants: [
                {
                    props: { variant: 'content' },
                    style: {
                        backgroundColor: 'transparent',
                        border: `2px solid ${primaryPink}`,
                        padding: '14px',
                        margin: '2px 0',
                    }
                },
                {
                    props: { variant: 'contained' },
                    style: {
                        backgroundColor: pureWhite,
                        border: `2px solid ${primaryPink}`,
                        fontWeight: '700',
                        padding: '16px 28px',
                        fontSize: '18px',
                        boxShadow: 'none',
                        width: '100%',
                        '&:hover': {
                            backgroundColor: pureWhite,
                        }
                    }
                },
                {
                    props: { variant: 'helper' },
                    style: {
                        backgroundColor: 'transparent',
                        color: black,
                        fontSize: '12px',
                        '&:hover': {
                            backgroundColor: 'transparent',
                            color: '#00000090'
                        }
                    }
                },
                {
                    props: { variant: 'basic' },
                    style: {
                        backgroundColor: primaryPink,
                        fontWeight: '500',
                        fontSize: '16px',
                        '&:hover': {
                            backgroundColor: primaryPink,
                        }                    
                    }
                }
            ]
        },
        MuiCard: {
            styleOverrides: {
                root: {
                    borderRadius: '15px'
                }
            }
        }
    },
    typography: {
        h1: {
            fontSize: '7rem',
            fontWeight: '400',
            '@media (max-width: 600px)': {
                fontSize: '3.8rem'
            }
        },
        h2: {
            fontSize: '3rem',
            letterSpacing: '-.7px',
            fontWeight: '400',
            '@media (max-width: 600px)': {
                fontSize: '2.3rem'
            },
            marginBottom: '20px'
        },
        h3: {
            fontSize: '26px',
            fontWeight: '700',
            marginBottom: '20px'
        },
        h4: {
            fontSize: '16px',
            fontWeight: '400'
        },
        h5: {
            fontSize: '1.5rem',
            fontWieght: '400',
            marginBottom: '20px'
        },
        h6: {
            fontSize: '23px',
            fontWeight: '600'
        },
        subtitle1: {
            fontWeight: '800',
            opacity: '0.5',
        },
        body1: {
            marginBottom: '0'
        },
        body2: {
            fontSize: '18px'
        },
        fontFamily: "'Playfair Display', serif"
    },
}) as CustomTheme;



primaryTheme.customProperties = {
    sectionPaddingX,
    backgroundGradient,
    borderBoxGradient,
    dialogContainerGradient,
    primaryPink
};