diff --git a/components/Acomplishments/Acomplishments.js b/components/Acomplishments/Acomplishments.js
new file mode 100644
index 0000000..1d8f437
--- /dev/null
+++ b/components/Acomplishments/Acomplishments.js
@@ -0,0 +1,27 @@
+import React from 'react';
+
+import { Section, SectionDivider, SectionTitle } from '../../styles/GlobalComponents';
+import { Box, Boxes, BoxNum, BoxText } from './AcomplishmentsStyles';
+
+const data = [
+ { number: 20, text: 'Open Source Projects'},
+ { number: 1000, text: 'Students', },
+ { number: 1900, text: 'Github Followers', },
+ { number: 5000, text: 'Github Stars', }
+];
+
+const Acomplishments = () => (
+
+ Personal Accomplishments
+
+ {data.map((card, index) => (
+
+ {card.number}+
+ {card.text}
+
+ ))}
+
+
+);
+
+export default Acomplishments;
diff --git a/components/Acomplishments/AcomplishmentsStyles.js b/components/Acomplishments/AcomplishmentsStyles.js
new file mode 100644
index 0000000..95daa29
--- /dev/null
+++ b/components/Acomplishments/AcomplishmentsStyles.js
@@ -0,0 +1,134 @@
+import styled from "styled-components"
+
+export const Boxes = styled.div`
+ width: 100%;
+ display: grid;
+ grid-template-columns: repeat(4, 1fr);
+ gap: 24px;
+ margin: 24px 0 40px;
+
+ @media ${props => props.theme.breakpoints.md}{
+ gap: 16px;
+ margin: 20px 0 32px;
+ grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
+ }
+
+ @media ${props => props.theme.breakpoints.sm}{
+ display: grid;
+ grid-template-columns: repeat(2, 1fr);
+ gap: 10px;
+ max-width: 500px;
+ margin: 24px auto;
+ }
+`
+
+export const Box = styled.div`
+ background: #212D45;
+ border-radius: 12px;
+ height: 144px;
+ padding: 24px;
+ @media ${props => props.theme.breakpoints.lg} {
+ height: 210px;
+
+ }
+
+ @media ${props => props.theme.breakpoints.md} {
+ height: 135px;
+ padding: 16px;
+ }
+
+ @media ${props => props.theme.breakpoints.sm} {
+ height: 110px;
+ padding: 12px;
+
+ &:nth-child(2n){
+ grid-row:2;
+ }
+ }
+`
+export const BoxNum = styled.h5`
+ font-style: normal;
+ font-weight: 600;
+ font-size: 36px;
+ line-height: 40px;
+ letter-spacing: 0.01em;
+ color: #FFFFFF;
+ margin-bottom: 8px;
+
+ @media ${props => props.theme.breakpoints.md} {
+ font-size: 28px;
+ line-height: 32px;
+ }
+ @media ${props => props.theme.breakpoints.sm} {
+ font-size: 24px;
+ line-height: 26px;
+}
+`
+
+export const BoxText = styled.p`
+ font-style: normal;
+ font-weight: normal;
+ font-size: 18px;
+ line-height: 24px;
+ letter-spacing: 0.02em;
+ color: rgba(255, 255, 255, 0.75);
+
+ @media ${props => props.theme.breakpoints.md}{
+ font-size: 16px;
+ line-height: 20px;
+ };
+
+ @media ${props => props.theme.breakpoints.sm} {
+ font-size: 10px;
+ line-height: 14px;
+ }
+`
+
+export const Join = styled.div`
+ display: flex;
+ max-width: 1040px;
+ justify-content: center;
+ align-items: center;
+ padding-bottom: 80px;
+
+ @media ${props => props.theme.breakpoints.md}{
+ display: flex;
+ justify-content: center;
+ padding-bottom: 64px;
+ }
+
+ @media ${props => props.theme.breakpoints.sm}{
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ padding-bottom: 32px;
+ }
+`
+
+export const JoinText = styled.h5`
+ display: flex;
+ font-size: 24px;
+ line-height: 40px;
+ letter-spacing: 0.02em;
+ color: rgba(255, 255, 255, 0.5);
+
+@media ${props => props.theme.breakpoints.md}{
+ line-height: 32px;
+ font-size: 20px;
+};
+
+@media ${props => props.theme.breakpoints.sm}{
+ font-size: 16px;
+ line-height: 24px;
+ margin: 0 0 16px;
+}
+`
+
+export const IconContainer = styled.div`
+ display: flex;
+
+ @media ${props => props.theme.breakpoints.sm}{
+ width: 160px;
+ justify-content: space-between;
+ }
+`
diff --git a/components/BackgrooundAnimation/BackgroundAnimation.js b/components/BackgrooundAnimation/BackgroundAnimation.js
new file mode 100644
index 0000000..1dd2e12
--- /dev/null
+++ b/components/BackgrooundAnimation/BackgroundAnimation.js
@@ -0,0 +1,365 @@
+import React from 'react';
+
+const BackgroundAnimation = () => (
+
+
+
+);
+
+export default BackgroundAnimation;
\ No newline at end of file
diff --git a/components/Footer/Footer.js b/components/Footer/Footer.js
new file mode 100644
index 0000000..05d4f63
--- /dev/null
+++ b/components/Footer/Footer.js
@@ -0,0 +1,40 @@
+import React from 'react';
+import { AiFillGithub, AiFillInstagram, AiFillLinkedin } from 'react-icons/ai';
+
+import { SocialIcons } from '../Header/HeaderStyles';
+import { CompanyContainer, FooterWrapper, LinkColumn, LinkItem, LinkList, LinkTitle, Slogan, SocialContainer, SocialIconsContainer } from './FooterStyles';
+
+const Footer = () => {
+ return (
+
+
+
+ Call
+ +234-8117266403
+
+
+ Mail
+ modupe775@gmail.com
+
+
+
+
+ Solving Problems one code at a time
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
+
+export default Footer;
diff --git a/components/Footer/FooterStyles.js b/components/Footer/FooterStyles.js
new file mode 100644
index 0000000..63b4f5d
--- /dev/null
+++ b/components/Footer/FooterStyles.js
@@ -0,0 +1,159 @@
+import styled from "styled-components"
+
+export const FooterWrapper = styled.section`
+ width: calc(100vw - 96px);
+ max-width: 1040px;
+ padding: 2rem 48px 40px;
+ margin: 1rem auto;
+ box-sizing: content-box;
+
+
+ @media ${props => props.theme.breakpoints.sm} {
+ padding: 0 16px 48px;
+ width: calc(100vw - 32px);
+ }
+`
+
+export const LinkItem = styled.a`
+ font-size: 18px;
+ line-height: 30px;
+ color: rgba(255, 255, 255, 0.75);
+ margin-bottom: 16px;
+ transition: .3s ease;
+ position: relative;
+ left: 0;
+
+ &:hover {
+ color: #fff;
+ left: 6px;
+ }
+
+ @media ${props => props.theme.breakpoints.md} {
+ font-size: 16px;
+ line-height: 28px;
+ display: flex;
+ }
+
+ @media ${props => props.theme.breakpoints.sm} {
+ font-size: 8px;
+ line-height: 14px;
+ margin-bottom: 8px;
+ display: flex;
+ align-items: center;
+ }
+`
+
+export const SocialIconsContainer = styled.div`
+max-width: 1040px;
+display: flex;
+justify-content: space-between;
+
+@media ${props => props.theme.breakpoints.md}{
+ display: flex;
+ justify-content: space-between;
+}
+
+@media ${props => props.theme.breakpoints.sm}{
+ display: flex;
+ width: 100%;
+ flex-direction: column;
+}
+`
+
+export const CompanyContainer = styled.div`
+ display: flex;
+ align-items:baseline;
+ flex-wrap: wrap;
+ margin-right: auto;
+
+
+ @media ${props => props.theme.breakpoints.md}{
+ flex-direction: column;
+ align-items: baseline;
+ }
+
+ @media ${props => props.theme.breakpoints.sm}{
+ display: flex;
+ flex-direction: column;
+ margin: 0 0 32px;
+ align-items: center;
+ }
+`
+
+
+export const Slogan = styled.p`
+ color: rgba(255, 255, 255, 0.5);
+ min-width: 280px;
+ letter-spacing: 0.02em;
+ font-size: 18px;
+ line-height: 30px;
+ padding: 1rem;
+
+ @media ${props => props.theme.breakpoints.md}{
+ font-size: 16px;
+ line-height: 28px;
+ }
+
+ @media ${props => props.theme.breakpoints.sm}{
+ line-height: 22px;
+ font-size: 14px;
+ min-width: 100px;
+ }
+`
+
+export const SocialContainer = styled.div`
+ display: flex;
+ align-items: center;
+
+ @media ${props => props.theme.breakpoints.md}{
+ justify-content: center;
+ padding-right: 16px;
+ flex-wrap: wrap;
+ }
+`
+
+
+export const LinkList = styled.ul`
+ border-top: 1px solid rgba(255, 255, 255, 0.1);
+ display: grid;
+ grid-template-columns: repeat(3, minmax(85px, 220px));
+ gap: 40px;
+ padding: 40px 0 28px;
+
+ @media ${props => props.theme.breakpoints.lg} {
+ padding: 32px 0 16px;
+ }
+
+ @media ${props => props.theme.breakpoints.md} {
+ width: 100%;
+ padding: 32px 0 16px;
+ gap: 16px;
+ }
+ @media ${props => props.theme.breakpoints.sm} {
+ width: 100%;
+ padding: 32px 4px 16px;
+ gap: 5px;
+ }
+`
+
+export const LinkColumn = styled.div`
+ display: flex;
+ flex-direction: column;
+ max-width: 220px;
+ width: 100%;
+`
+export const LinkTitle = styled.h4`
+ font-style: normal;
+ font-weight: 600;
+ font-size: 12px;
+ line-height: 24px;
+ text-transform: uppercase;
+ color: rgba(255, 255, 255, 0.4);
+ margin-bottom: 16px;
+
+ @media ${props => props.theme.breakpoints.sm} {
+ font-size: 10px;
+ line-height: 12px;
+ margin-bottom: 8px;
+ }
+`
diff --git a/components/Header/Header.js b/components/Header/Header.js
new file mode 100644
index 0000000..f4bee09
--- /dev/null
+++ b/components/Header/Header.js
@@ -0,0 +1,48 @@
+import Link from 'next/link';
+import React from 'react';
+import { AiFillGithub, AiFillInstagram, AiFillLinkedin } from 'react-icons/ai';
+import { DiCssdeck } from 'react-icons/di';
+
+import { Container, Div1, Div2, Div3, NavLink, SocialIcons, Span } from './HeaderStyles';
+
+const Header = () => (
+
+
+
+
+ Portfolio
+
+
+
+
+
+
+ Projects
+
+
+
+
+ Technologies
+
+
+
+
+ About
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+);
+
+export default Header;
diff --git a/components/Header/HeaderStyles.js b/components/Header/HeaderStyles.js
new file mode 100644
index 0000000..e8bb1b8
--- /dev/null
+++ b/components/Header/HeaderStyles.js
@@ -0,0 +1,129 @@
+import { IoIosArrowDropdown } from 'react-icons/io';
+import styled from 'styled-components';
+
+export const Container = styled.div`
+ display: grid;
+ grid-template-columns: repeat(5, 1fr);
+ grid-template-rows: 1fr;
+ grid-column-gap: 2rem;
+ padding: 1rem;
+ padding-top: 2rem;
+
+ @media ${(props) => props.theme.breakpoints.sm} {
+ display: grid;
+ grid-template-columns: repeat(5, 1fr);
+ grid-template-rows: repeat(2, 60px);
+ grid-column-gap: 0.5rem;
+ grid-row-gap: 0.5rem;
+ }
+`;
+
+export const Span = styled.span`
+ font-size: 2rem;
+`;
+
+export const Div1 = styled.div`
+ grid-area: 1 / 1 / 2 / 2;
+ display: flex;
+ flex-direction: row;
+ align-content: center;
+ @media ${(props) => props.theme.breakpoints.sm} {
+ grid-area: 1 / 1 / 2 / 3;
+ }
+`;
+export const Div2 = styled.div`
+ grid-area: 1 / 2 / 2 / 4;
+ display: flex;
+ justify-content: space-around;
+ @media ${(props) => props.theme.breakpoints.sm} {
+ grid-area: 2 / 2 / 3 / 5;
+ }
+`;
+export const Div3 = styled.div`
+ grid-area: 1 / 5 / 2 / 6;
+ display: flex;
+ justify-content: space-around;
+ align-items: center;
+ @media ${(props) => props.theme.breakpoints.sm} {
+ align-items: center;
+ grid-area: 1 / 4 / 2 / 6;
+ }
+`;
+
+// Navigation Links
+export const NavLink = styled.a`
+ font-size: 2rem;
+ line-height: 32px;
+ color: rgba(255, 255, 255, 0.75);
+ transition: 0.4s ease;
+ &:hover {
+ color: #fff;
+ opacity: 1;
+ cursor: pointer;
+ }
+ @media ${(props) => props.theme.breakpoints.sm} {
+ padding: 0.5rem;
+ }
+`;
+
+/// DropDown Contact
+export const ContactDropDown = styled.button`
+ border: none;
+ display: flex;
+ position: relative;
+ background: none;
+ font-size: 1.7rem;
+
+ line-height: 32px;
+ color: rgba(255, 255, 255, 0.75);
+ cursor: pointer;
+ transition: 0.3s ease;
+
+ &:focus {
+ outline: none;
+ }
+ &:hover {
+ color: #fff;
+ }
+
+ @media ${(props) => props.theme.breakpoints.sm} {
+ padding: 0.4rem 0;
+ }
+ @media ${(props) => props.theme.breakpoints.md} {
+ padding: 0;
+ }
+`;
+
+export const NavProductsIcon = styled(IoIosArrowDropdown)`
+ margin-left: 8px;
+ display: flex;
+ align-self: center;
+ transition: 0.3s ease;
+ opacity: ${({ isOpen }) => (isOpen ? '1' : '.75')};
+ transform: ${({ isOpen }) => (isOpen ? 'scaleY(-1)' : 'scaleY(1)')};
+
+ &:hover {
+ opacity: 1;
+ }
+
+ @media ${(props) => props.theme.breakpoints.sm} {
+ margin: 2px 0 0 2px;
+ width: 15px;
+ }
+`;
+
+
+// Social Icons
+
+export const SocialIcons = styled.a`
+transition: 0.3s ease;
+color: white;
+border-radius: 50px;
+ padding: 8px;
+&:hover {
+ background-color: #212d45;
+ transform: scale(1.2);
+ cursor: pointer;
+
+ }
+`
\ No newline at end of file
diff --git a/components/Hero/Hero.js b/components/Hero/Hero.js
new file mode 100644
index 0000000..70e5bf2
--- /dev/null
+++ b/components/Hero/Hero.js
@@ -0,0 +1,22 @@
+import React from 'react';
+
+import { Section, SectionText, SectionTitle } from '../../styles/GlobalComponents';
+import Button from '../../styles/GlobalComponents/Button';
+import { LeftSection } from './HeroStyles';
+
+const Hero = () => (
+
+
+
+ Welcome To
+ My Personal Portfolio
+
+
+ An Experienced Front-end Developer passionate about making Impact and building beautiful modern websites.
+
+
+
+
+);
+
+export default Hero;
\ No newline at end of file
diff --git a/components/Hero/HeroStyles.js b/components/Hero/HeroStyles.js
new file mode 100644
index 0000000..6a0c7fc
--- /dev/null
+++ b/components/Hero/HeroStyles.js
@@ -0,0 +1,19 @@
+import styled from 'styled-components';
+
+export const LeftSection = styled.div`
+ width: 100%;
+ @media ${(props) => props.theme.breakpoints.sm} {
+ width: 80%;
+ display: flex;
+ flex-direction: column;
+
+ margin: 0 auto;
+ }
+ @media ${(props) => props.theme.breakpoints.md} {
+ width: 100%;
+ display: flex;
+ flex-direction: column;
+
+ margin: 0 auto;
+ }
+`;
diff --git a/components/NavDropDown/NavDropDown.js b/components/NavDropDown/NavDropDown.js
new file mode 100644
index 0000000..93bbc3d
--- /dev/null
+++ b/components/NavDropDown/NavDropDown.js
@@ -0,0 +1,76 @@
+import styled from 'styled-components'
+
+export const DropDownContainer = styled.div`
+ position: absolute;
+ display: flex;
+ flex-direction: column;
+ right: -25%;
+ top: 40px;
+ width: 280px;
+ background-color: #fff;
+ border-radius: 8px;
+ z-index: 100;
+ padding: 4px 0;
+ cursor: default;
+ overflow: hidden;
+ transition: 0.3s ease;
+ visibility: ${({ active }) => active ? 'visible' : 'hidden'};
+ opacity: ${({ active }) => active ? '1' : '0'};
+ transform-origin: top;
+ transform: ${({ active }) => active ? 'scaleY(1)' : 'scaleY(.3)'};
+
+ @media ${(props) => props.theme.breakpoints.md} {
+ top: 32px;
+ }
+ @media ${(props) => props.theme.breakpoints.sm} {
+ top: 24px;
+ }
+`
+export const DropDownItem = styled.a`
+ width: 100%;
+ display: flex;
+ align-items: flex-start;
+ cursor: pointer;
+ transition: .3s ease;
+ padding: 12px 16px;
+
+ &:hover {
+ transform: scale(1.05);
+ background-color: #eee;
+ box-shadow: 0 3px 6px 3px rgba(0,0,0,.3);
+ }
+
+ &:nth-of-type(2n):hover {
+ box-shadow: 0 0 8px 4px rgba(0,0,0,.3);
+ }
+
+ &:nth-of-type(3n):hover {
+ box-shadow: 0 -3px 6px 3px rgba(0,0,0,.3);
+ }
+`
+
+export const DropDownIcon = styled.div`
+ width: 32px;
+ height: 32px;
+ margin-right: 16px;
+`
+
+export const DropDownTextContainer = styled.div`
+ display: flex;
+ flex-direction: column;
+`
+
+export const DropDownItemTitle = styled.h2`
+ color: #0f1624;
+ font-size: 18px;
+ line-height: 26px;
+ text-align: start;
+`
+
+export const DropDownItemDesc = styled.p`
+ color: #0f1624;
+ opacity: 0.5;
+ font-size: 14px;
+ line-height: 22px;
+ text-align: start;
+`
\ No newline at end of file
diff --git a/components/NavDropDown/index.js b/components/NavDropDown/index.js
new file mode 100644
index 0000000..f2e8ee4
--- /dev/null
+++ b/components/NavDropDown/index.js
@@ -0,0 +1,13 @@
+import React from 'react'
+import { AiFillPhone, AiOutlineMail } from 'react-icons/ai'
+import { FaLocationArrow } from "react-icons/fa"
+
+import { DropDownContainer, DropDownIcon, DropDownItem, DropDownItemDesc, DropDownItemTitle, DropDownTextContainer } from './NavDropDown'
+
+const NavDropDown = (props) => (
+
+ NavDropDown
+
+);
+
+export default NavDropDown
diff --git a/components/Projects/Projects.js b/components/Projects/Projects.js
new file mode 100644
index 0000000..d4433fb
--- /dev/null
+++ b/components/Projects/Projects.js
@@ -0,0 +1,38 @@
+import React from 'react';
+
+import { BlogCard, CardInfo, ExternalLinks, GridContainer, HeaderThree, Hr, Tag, TagList, TitleContent, UtilityList, Img } from './ProjectsStyles';
+import { Section, SectionDivider, SectionTitle } from '../../styles/GlobalComponents';
+import { projects } from '../../constants/constants';
+
+
+const Projects = () => (
+
+
+ Projects
+
+ {projects.map(({ id, image, title, description, tags, source, visit }) => (
+
+
+
+ {title}
+
+
+ {description}
+
+ Stack
+
+ {tags.map((tag, i) => (
+ {tag}
+ ) )}
+
+
+
+ Code
+ Live
+
+
+ ))}
+
+);
+
+export default Projects;
\ No newline at end of file
diff --git a/components/Projects/ProjectsStyles.js b/components/Projects/ProjectsStyles.js
new file mode 100644
index 0000000..c3eab89
--- /dev/null
+++ b/components/Projects/ProjectsStyles.js
@@ -0,0 +1,112 @@
+import styled from 'styled-components';
+
+export const Img = styled.img`
+ width:100%;
+ height:100%;
+ object-fit: cover;
+ overflow: hidden;
+`
+
+export const GridContainer = styled.section`
+display: grid;
+grid-template-columns: repeat(auto-fill, minmax(400px, 1fr));
+padding: 3rem;
+place-items: center;
+column-gap: 2rem;
+row-gap: 3rem;
+@media ${(props) => props.theme.breakpoints.sm} {
+ display: flex;
+ flex-direction: column;
+ padding: 2rem;
+ padding-bottom: 0;
+}
+
+`
+export const BlogCard = styled.div`
+ border-radius: 10px;
+ box-shadow: 3px 3px 20px rgba(80, 78, 78, 0.5);
+ text-align: center;
+ width: 400px;
+ @media ${(props) => props.theme.breakpoints.sm} {
+ width: 100%;
+ }
+`;
+export const TitleContent = styled.div`
+ text-align: center;
+ z-index: 20;
+ width: 100%;
+
+`;
+
+
+export const HeaderThree = styled.h3`
+ font-weight: 500;
+ letter-spacing: 2px;
+ color: #9cc9e3;
+ padding: .5rem 0;
+ font-size: ${(props) => props.title ? '3rem' : '2rem'};
+`;
+
+export const Hr = styled.hr`
+ width: 50px;
+ height: 3px;
+ margin: 20px auto;
+ border: 0;
+ background: #d0bb57;
+`;
+
+export const Intro = styled.div`
+ width: 170px;
+ margin: 0 auto;
+ color: #dce3e7;
+ font-family: 'Droid Serif', serif;
+ font-size: 13px;
+ font-style: italic;
+ line-height: 18px;
+`;
+
+
+export const CardInfo = styled.p`
+ width: 100%;
+ padding: 0 50px;
+ color: #e4e6e7;
+ font-style: 2rem;
+ line-height: 24px;
+ text-align: justify;
+ @media ${(props) => props.theme.breakpoints.sm} {
+ padding:.3rem
+
+}
+`;
+
+
+export const UtilityList = styled.ul`
+ list-style-type: none;
+ padding: 0;
+ display: flex;
+ justify-content: space-around;
+ margin: 2.5rem 0;
+`;
+
+export const ExternalLinks = styled.a`
+color:#d4c0c0;
+font-size: 1.6rem;
+padding:1rem 1.5rem;
+background: #6b3030;
+border-radius: 15px;
+transition: 0.5s;
+&:hover{
+ background: #801414;
+
+}
+`;
+
+export const TagList = styled.ul`
+display: flex;
+justify-content: space-around;
+padding: 2rem;
+`
+export const Tag = styled.li`
+color: #d8bfbf;
+font-size: 1.5rem;
+`
\ No newline at end of file
diff --git a/components/Technologies/Technologies.js b/components/Technologies/Technologies.js
new file mode 100644
index 0000000..e55905c
--- /dev/null
+++ b/components/Technologies/Technologies.js
@@ -0,0 +1,50 @@
+import React from 'react';
+import { DiFirebase, DiReact, DiZend } from 'react-icons/di';
+import { Section, SectionDivider, SectionText, SectionTitle } from '../../styles/GlobalComponents';
+import { List, ListContainer, ListItem, ListParagraph, ListTitle } from './TechnologiesStyles';
+
+const Technologies = () => (
+
+
+
+ Technologies
+
+ I've worked with a range of technologies in the web development world.
+ From Front-end to Back-end.
+
+
+
+
+
+ Front-End
+
+ Experience with
+ React.js
+
+
+
+
+
+
+ Back-End
+
+ Experience with
+ Node and Databases
+
+
+
+
+
+
+ UI/UX
+
+ Experience with
+ tools like Figma
+
+
+
+
+
+);
+
+export default Technologies;
diff --git a/components/Technologies/TechnologiesStyles.js b/components/Technologies/TechnologiesStyles.js
new file mode 100644
index 0000000..11959ad
--- /dev/null
+++ b/components/Technologies/TechnologiesStyles.js
@@ -0,0 +1,133 @@
+import styled from 'styled-components'
+
+export const ImageContainer = styled.div`
+ text-align: center;
+ background-image: radial-gradient(50% 50% at 50% 50%, rgba(79, 108, 176, 0.25) 53.8%, rgba(79, 108, 176, 0) 100%);
+ width: 100%;
+ padding: 60px;
+ margin-top: 48px;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+
+ @media ${props => props.theme.breakpoints.lg} {
+ background-image: none;
+ padding: 0;
+ margin-top: 40px;
+ }
+ @media ${props => props.theme.breakpoints.md} {
+ background-image: none;
+ padding: 0;
+ margin-top: 16px;
+ }
+`
+
+export const MainImage = styled.img`
+ width: 100%;
+`
+
+export const List = styled.ul`
+ list-style-type: none;
+ display: grid;
+ grid-template-columns: repeat(3, 1fr);
+ gap: 40px;
+ margin: 3rem 0;
+
+ @media ${props => props.theme.breakpoints.lg}{
+ margin: 64px 0;
+ }
+
+ @media ${props => props.theme.breakpoints.md}{
+ margin: 64px 0;
+ gap: 24px
+ }
+
+ @media ${props => props.theme.breakpoints.sm}{
+ display: flex;
+ flex-direction: column;
+ margin: 32px 0;
+ }
+`
+
+export const ListContainer = styled.div`
+ display: flex;
+ flex-direction: column;
+
+ @media ${props => props.theme.breakpoints.sm}{
+ display: flex;
+ margin-left: 18px;
+ }
+`
+
+export const ListTitle = styled.h4`
+ font-weight: 700;
+ font-size: 28px;
+ line-height: 32px;
+ letter-spacing: 0.02em;
+ color: #FFFFFF;
+ margin-bottom: 8px;
+
+@media ${props => props.theme.breakpoints.md}{
+ font-size: 24px;
+ line-height: 28px;
+}
+
+@media ${props => props.theme.breakpoints.sm}{
+ font-size: 20px;
+ line-height: 28px;
+ letter-spacing: 0.02em;
+ margin-bottom: 4px;
+}
+`
+
+export const ListParagraph = styled.p`
+ font-size: 18px;
+ line-height: 30px;
+ color: rgba(255, 255, 255, 0.75);
+
+ @media ${props => props.theme.breakpoints.md}{
+ font-size: 16px;
+ line-height: 28px;
+ }
+
+ @media ${props => props.theme.breakpoints.sm}{
+ font-size: 14px;
+ line-height: 22px;
+ }
+`
+
+export const ListItem = styled.li`
+ max-width: 320px;
+ display: flex;
+ flex-direction: column;
+
+@media ${props => props.theme.breakpoints.md}{
+ max-width: 203px;
+}
+
+@media ${props => props.theme.breakpoints.sm}{
+ margin-bottom: 14px;
+ max-width: 320px;
+ flex-direction: row;
+}
+`
+
+export const ListIcon = styled.img`
+ display: block;
+ width: 48px;
+ height: 48px;
+ margin-bottom: 10px;
+
+ @media ${props => props.theme.breakpoints.md}{
+ width: 40px;
+ height: 40px;
+ margin-bottom: 8px;
+ }
+
+ @media ${props => props.theme.breakpoints.sm}{
+ width: 32px;
+ height: 32px;
+ margin-bottom: 0px;
+ }
+`
diff --git a/components/TimeLine/TimeLine.js b/components/TimeLine/TimeLine.js
new file mode 100644
index 0000000..160a9e3
--- /dev/null
+++ b/components/TimeLine/TimeLine.js
@@ -0,0 +1,117 @@
+import React, { useState, useRef, useEffect } from 'react';
+
+import { CarouselButton, CarouselButtonDot, CarouselButtons, CarouselContainer, CarouselItem, CarouselItemImg, CarouselItemText, CarouselItemTitle, CarouselMobileScrollNode } from './TimeLineStyles';
+import { Section, SectionDivider, SectionText, SectionTitle } from '../../styles/GlobalComponents';
+import { TimeLineData } from '../../constants/constants';
+
+const TOTAL_CAROUSEL_COUNT = TimeLineData.length;
+
+const Timeline = () => {
+ const [activeItem, setActiveItem] = useState(0);
+ const carouselRef = useRef();
+
+ const scroll = (node, left) => {
+ return node.scrollTo({ left, behavior: 'smooth' });
+ }
+
+ const handleClick = (e, i) => {
+ e.preventDefault();
+
+ if (carouselRef.current) {
+ const scrollLeft = Math.floor(carouselRef.current.scrollWidth * 0.7 * (i / TimeLineData.length));
+
+ scroll(carouselRef.current, scrollLeft);
+ }
+ }
+
+ const handleScroll = () => {
+ if (carouselRef.current) {
+ const index = Math.round((carouselRef.current.scrollLeft / (carouselRef.current.scrollWidth * 0.7)) * TimeLineData.length);
+
+ setActiveItem(index);
+ }
+ }
+
+ // snap back to beginning of scroll when window is resized
+ // avoids a bug where content is covered up if coming from smaller screen
+ useEffect(() => {
+ const handleResize = () => {
+ scroll(carouselRef.current, 0);
+ }
+
+ window.addEventListener('resize', handleResize);
+ }, []);
+
+ return (
+
+ About Me
+
+ I’m Modupe, but people call me “Goke.” I’m a frontend developer, and I specialize in efficient React apps and CSS & HTML that just work across all platforms and browsers. I care deeply about building interfaces that are usable and pleasant for the most number of people possible.
+
+ My professional life has been 100% driven by my passion for design and structure. I’ve had the opportunity to intern at a talent development agency "Zuri", where I was able to utilise skills learnt to collaborate with developers, provide solutions to problems and work on projects. After that, I was a front-end developer at Techaton, where I worked on projects weekly that involved bringing beautiful modern UI/UX designs to life.
+
+ Right now, I’m excited about the still very complicated Web3, and working towards becoming a React senior. In the following years, I also plan to explore the “server-side” more and become a better-rounded full-stack dev.
+
+ {/*
+ <>
+ {TimeLineData.map((item, index) => (
+
+ handleClick(e, index)}>
+
+ {item.year}
+
+
+
+
+
+
+
+
+
+
+ {item.text}
+
+
+ ))}
+ >
+
+
+ {TimeLineData.map((item, index) => (
+ handleClick(e, index)}
+ type="button"
+ >
+
+
+ ))}
+ */}
+ {/* */}
+
+ );
+};
+
+export default Timeline;
diff --git a/components/TimeLine/TimeLineStyles.js b/components/TimeLine/TimeLineStyles.js
new file mode 100644
index 0000000..61a8ccd
--- /dev/null
+++ b/components/TimeLine/TimeLineStyles.js
@@ -0,0 +1,154 @@
+
+import styled from 'styled-components'
+
+export const CarouselContainer = styled.ul`
+ max-width: 1040px;
+ background: #0F1624;
+ padding: 0rem;
+ list-style:none;
+ display: flex;
+ justify-content: space-between;
+ /* overflow-x: hidden; */
+
+ margin-left: 32px;
+ &:first-of-type{
+ margin-left: 0px;
+ }
+
+ margin-bottom: 80px;
+
+ //remove scrollbar
+ scrollbar-width: none;
+ &::-webkit-scrollbar {
+ display: none;
+ }
+
+ @media ${props => props.theme.breakpoints.sm} {
+ overflow-x: scroll;
+ -webkit-overflow-scrolling: touch;
+ scroll-snap-type: x mandatory;
+ touch-action: pan-x;
+ justify-content: initial;
+ margin-bottom: 8px;
+ }
+`
+export const CarouselMobileScrollNode = styled.div`
+ @media ${props => props.theme.breakpoints.sm} {
+ display: flex;
+ min-width: ${({ final }) => final ? `120%;` : `min-content`}
+ }
+`
+
+export const CarouselItem = styled.div`
+ background: #0F1624;
+ border-radius: 3px;
+ max-width: 196px;
+
+ @media ${props => props.theme.breakpoints.md} {
+ max-width: 124px;
+ }
+
+ @media ${props => props.theme.breakpoints.sm} {
+ margin-left: 32px;
+ min-width: 120px;
+ background: #0E131F;
+ padding: 4px;
+ align-content: start;
+ scroll-snap-align: start;
+ border-radius: 3px;
+ overflow: visible;
+ position: relative;
+ height: fit-content;
+
+ ${(props) => props.active === props.index ? `opacity: 1` : `opacity: 0.5`};
+ }
+`
+
+export const CarouselItemTitle = styled.h4`
+ font-weight: bold;
+ font-size: 24px;
+ line-height: 32px;
+ letter-spacing: 0.02em;
+ display: flex;
+ /* This gradient is different due to the size of the Title container, it must transition sooner to be visible on the text */
+ background: linear-gradient(121.57deg, #FFFFFF 10%, rgba(255, 255, 255, 0.66) 30.15%);
+ -webkit-background-clip: text;
+ -webkit-text-fill-color: transparent;
+ margin-bottom: 8px;
+
+ @media ${props => props.theme.breakpoints.md} {
+ font-size: 20px;
+ line-height: 28px;
+ margin-bottom: 4px;
+ }
+
+ @media ${props => props.theme.breakpoints.sm} {
+ font-size: 16px;
+ line-height: 24px;
+ }
+`
+export const CarouselItemImg = styled.svg`
+ margin-left: 21px;
+ -webkit-mask-image: linear-gradient(to right, rgba(0,0,0,1), rgba(0,0,0,0));
+ width: 100%;
+
+ @media ${props => props.theme.breakpoints.sm} {
+ -webkit-mask-image: none;
+ margin-left: 16px;
+ overflow: visible;
+ }
+`
+
+export const CarouselItemText = styled.p`
+ font-size: 14px;
+ line-height: 22px;
+ letter-spacing: 0.02em;
+ color: rgba(255, 255, 255, 0.75);
+ padding-right: 16px;
+
+ @media ${props => props.theme.breakpoints.md} {
+ font-size: 12px;
+ line-height: 18px;
+ padding-right: 32px;
+ }
+ @media ${props => props.theme.breakpoints.sm} {
+ font-size: 10px;
+ line-height: 16px;
+ padding-right: 0;
+ }
+`
+export const CarouselButtons = styled.div`
+ width: 288px;
+
+ display: none;
+ visibility: hidden;
+
+ @media ${props => props.theme.breakpoints.sm} {
+ display: flex;
+ visibility: visible;
+ margin-bottom: 48px;
+ }
+`
+
+export const CarouselButton = styled.button`
+ box-sizing: border-box;
+ background: none;
+ padding: 4px;
+ border: none;
+ cursor: pointer;
+ margin-right: 4px;
+ opacity: ${(props) => props.active === props.index ? `1` : `.33`};
+ transform: ${(props) => props.active === props.index ? `scale(1.6)` : `scale(1)`};
+
+ &:focus {
+ outline: none;
+ }
+`
+
+export const CarouselButtonDot = styled.div`
+ background-color: white;
+ border-radius: 10px;
+ margin: auto;
+ width: 3px;
+ height: 3px;
+`
diff --git a/constants/constants.js b/constants/constants.js
new file mode 100644
index 0000000..0fe3f29
--- /dev/null
+++ b/constants/constants.js
@@ -0,0 +1,46 @@
+export const projects = [
+ {
+ title: 'Hoo Bank',
+ description: "Using React and Tailwind, I built a mobile responsive bank website by transforming a UI/UX design into reality.",
+ image: '/images/screenshot (88).png',
+ tags: ['React', 'Node', 'Vite'],
+ source: 'https://github.com/Goketech/bank_modern_app',
+ visit: 'https://bank-modern-app-r9rw.vercel.app/',
+ id: 0,
+ },
+ {
+ title: 'Restaurant',
+ description:"Created a beautiful frontend restaurant site. It contains Hero Section, About, History, Menu, Chef, full screen video and lot's more.",
+ image: '/images/screenshot (89).png',
+ tags: ['React', 'JavaScript'],
+ source: 'https://github.com/Goketech/gerich-restaurant',
+ visit: 'https://gerich-restaurant-chi.vercel.app/',
+ id: 1,
+ },
+ {
+ title: 'AI Website',
+ description: "This is a .",
+ image: '/images/screenshot (90).png',
+ tags: ['React'],
+ source: 'https://github.com/Goketech/gpt3_goke',
+ visit: 'https://gpt3-goke.vercel.app/',
+ id: 2,
+ },
+ {
+ title: 'Netflix-clone',
+ description: "Created a Netflix movie Web App that fetches current and Trending using the movie database API.",
+ image: '/images/screenshot (91).png',
+ tags: ['React', 'Tailwind', 'Firebase', 'TMD API'],
+ source: 'https://github.com/Goketech/netflix',
+ visit: 'https://netflix-ten-iota.vercel.app/',
+ id: 3,
+ },
+];
+
+export const TimeLineData = [
+ { year: 2017, text: 'Started my journey', },
+ { year: 2018, text: 'Worked as a freelance developer', },
+ { year: 2019, text: 'Founded JavaScript Mastery', },
+ { year: 2020, text: 'Shared my projects with the world', },
+ { year: 2021, text: 'Started my own platform', },
+];
\ No newline at end of file
diff --git a/layout/Layout.js b/layout/Layout.js
new file mode 100644
index 0000000..43fd0a6
--- /dev/null
+++ b/layout/Layout.js
@@ -0,0 +1,15 @@
+import React from 'react'
+
+import Footer from '../components/Footer/Footer'
+import Header from '../components/Header/Header'
+import { Container } from './LayoutStyles'
+
+export const Layout = ({children}) => {
+ return (
+
+
+ {children}
+
+
+ )
+}
diff --git a/layout/LayoutStyles.js b/layout/LayoutStyles.js
new file mode 100644
index 0000000..63f1d1f
--- /dev/null
+++ b/layout/LayoutStyles.js
@@ -0,0 +1,7 @@
+import styled from 'styled-components';
+
+export const Container = styled.div`
+max-width: 1280px;
+width: 100%;
+margin: auto;
+`;
diff --git a/package-lock.json b/package-lock.json
index e265ee6..6a4a732 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -13,7 +13,202 @@
"eslint-config-next": "13.1.1",
"next": "13.1.1",
"react": "18.2.0",
- "react-dom": "18.2.0"
+ "react-dom": "18.2.0",
+ "react-icons": "^4.7.1",
+ "styled-components": "^5.3.0",
+ "styled-normalize": "^8.0.7"
+ }
+ },
+ "node_modules/@babel/code-frame": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz",
+ "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==",
+ "dependencies": {
+ "@babel/highlight": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/generator": {
+ "version": "7.20.7",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.7.tgz",
+ "integrity": "sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw==",
+ "dependencies": {
+ "@babel/types": "^7.20.7",
+ "@jridgewell/gen-mapping": "^0.3.2",
+ "jsesc": "^2.5.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-annotate-as-pure": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz",
+ "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==",
+ "dependencies": {
+ "@babel/types": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-environment-visitor": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz",
+ "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-function-name": {
+ "version": "7.19.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz",
+ "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==",
+ "dependencies": {
+ "@babel/template": "^7.18.10",
+ "@babel/types": "^7.19.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-hoist-variables": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz",
+ "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==",
+ "dependencies": {
+ "@babel/types": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-module-imports": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz",
+ "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==",
+ "dependencies": {
+ "@babel/types": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-split-export-declaration": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz",
+ "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==",
+ "dependencies": {
+ "@babel/types": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-string-parser": {
+ "version": "7.19.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz",
+ "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.19.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz",
+ "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/highlight": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz",
+ "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==",
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.18.6",
+ "chalk": "^2.0.0",
+ "js-tokens": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
+ },
+ "node_modules/@babel/highlight/node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/parser": {
+ "version": "7.20.7",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.7.tgz",
+ "integrity": "sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg==",
+ "bin": {
+ "parser": "bin/babel-parser.js"
+ },
+ "engines": {
+ "node": ">=6.0.0"
}
},
"node_modules/@babel/runtime": {
@@ -39,6 +234,83 @@
"node": ">=6.9.0"
}
},
+ "node_modules/@babel/template": {
+ "version": "7.20.7",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz",
+ "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==",
+ "dependencies": {
+ "@babel/code-frame": "^7.18.6",
+ "@babel/parser": "^7.20.7",
+ "@babel/types": "^7.20.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/traverse": {
+ "version": "7.20.12",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.12.tgz",
+ "integrity": "sha512-MsIbFN0u+raeja38qboyF8TIT7K0BFzz/Yd/77ta4MsUsmP2RAnidIlwq7d5HFQrH/OZJecGV6B71C4zAgpoSQ==",
+ "dependencies": {
+ "@babel/code-frame": "^7.18.6",
+ "@babel/generator": "^7.20.7",
+ "@babel/helper-environment-visitor": "^7.18.9",
+ "@babel/helper-function-name": "^7.19.0",
+ "@babel/helper-hoist-variables": "^7.18.6",
+ "@babel/helper-split-export-declaration": "^7.18.6",
+ "@babel/parser": "^7.20.7",
+ "@babel/types": "^7.20.7",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/traverse/node_modules/globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/types": {
+ "version": "7.20.7",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz",
+ "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==",
+ "dependencies": {
+ "@babel/helper-string-parser": "^7.19.4",
+ "@babel/helper-validator-identifier": "^7.19.1",
+ "to-fast-properties": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@emotion/is-prop-valid": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.0.tgz",
+ "integrity": "sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg==",
+ "dependencies": {
+ "@emotion/memoize": "^0.8.0"
+ }
+ },
+ "node_modules/@emotion/memoize": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.0.tgz",
+ "integrity": "sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA=="
+ },
+ "node_modules/@emotion/stylis": {
+ "version": "0.8.5",
+ "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz",
+ "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ=="
+ },
+ "node_modules/@emotion/unitless": {
+ "version": "0.7.5",
+ "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz",
+ "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg=="
+ },
"node_modules/@eslint/eslintrc": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz",
@@ -91,6 +363,49 @@
"resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
"integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA=="
},
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
+ "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
+ "dependencies": {
+ "@jridgewell/set-array": "^1.0.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
+ "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/set-array": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
+ "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.4.14",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
+ "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw=="
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.17",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz",
+ "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==",
+ "dependencies": {
+ "@jridgewell/resolve-uri": "3.1.0",
+ "@jridgewell/sourcemap-codec": "1.4.14"
+ }
+ },
"node_modules/@next/env": {
"version": "13.1.1",
"resolved": "https://registry.npmjs.org/@next/env/-/env-13.1.1.tgz",
@@ -643,6 +958,26 @@
"resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz",
"integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA=="
},
+ "node_modules/babel-plugin-styled-components": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-2.0.7.tgz",
+ "integrity": "sha512-i7YhvPgVqRKfoQ66toiZ06jPNA3p6ierpfUuEWxNF+fV27Uv5gxBkf8KZLHUCc1nFA9j6+80pYoIpqCeyW3/bA==",
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.16.0",
+ "@babel/helper-module-imports": "^7.16.0",
+ "babel-plugin-syntax-jsx": "^6.18.0",
+ "lodash": "^4.17.11",
+ "picomatch": "^2.3.0"
+ },
+ "peerDependencies": {
+ "styled-components": ">= 2"
+ }
+ },
+ "node_modules/babel-plugin-syntax-jsx": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz",
+ "integrity": "sha512-qrPaCSo9c8RHNRHIotaufGbuOBN8rtdC4QrrFFc43vyWCCz7Kl7GL1PGaXtMGQZUXrkCjNEgxDfmAuAabr/rlw=="
+ },
"node_modules/balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
@@ -688,6 +1023,14 @@
"node": ">=6"
}
},
+ "node_modules/camelize": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz",
+ "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/caniuse-lite": {
"version": "1.0.30001442",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001442.tgz",
@@ -767,6 +1110,24 @@
"node": ">= 8"
}
},
+ "node_modules/css-color-keywords": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz",
+ "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/css-to-react-native": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.0.0.tgz",
+ "integrity": "sha512-Ro1yETZA813eoyUp2GDBhG2j+YggidUmzO1/v9eYBKR2EHVEniE2MI/NqpTQ954BMpTPZFsGNPm46qFB9dpaPQ==",
+ "dependencies": {
+ "camelize": "^1.0.0",
+ "css-color-keywords": "^1.0.0",
+ "postcss-value-parser": "^4.0.2"
+ }
+ },
"node_modules/damerau-levenshtein": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz",
@@ -1743,6 +2104,14 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/hoist-non-react-statics": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
+ "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
+ "dependencies": {
+ "react-is": "^16.7.0"
+ }
+ },
"node_modules/ignore": {
"version": "5.2.4",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
@@ -2073,6 +2442,17 @@
"js-yaml": "bin/js-yaml.js"
}
},
+ "node_modules/jsesc": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
+ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+ "bin": {
+ "jsesc": "bin/jsesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/json-schema-traverse": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
@@ -2145,6 +2525,11 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
+ },
"node_modules/lodash.merge": {
"version": "4.6.2",
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
@@ -2536,6 +2921,11 @@
"node": "^10 || ^12 || >=14"
}
},
+ "node_modules/postcss-value-parser": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
+ },
"node_modules/prelude-ls": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
@@ -2604,6 +2994,14 @@
"react": "^18.2.0"
}
},
+ "node_modules/react-icons": {
+ "version": "4.7.1",
+ "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.7.1.tgz",
+ "integrity": "sha512-yHd3oKGMgm7zxo3EA7H2n7vxSoiGmHk5t6Ou4bXsfcgWyhfDKMpyKfhHR6Bjnn63c+YXBLBPUql9H4wPJM6sXw==",
+ "peerDependencies": {
+ "react": "*"
+ }
+ },
"node_modules/react-is": {
"version": "16.13.1",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
@@ -2745,6 +3143,11 @@
"node": ">=10"
}
},
+ "node_modules/shallowequal": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz",
+ "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ=="
+ },
"node_modules/shebang-command": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
@@ -2867,6 +3270,55 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/styled-components": {
+ "version": "5.3.6",
+ "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.3.6.tgz",
+ "integrity": "sha512-hGTZquGAaTqhGWldX7hhfzjnIYBZ0IXQXkCYdvF1Sq3DsUaLx6+NTHC5Jj1ooM2F68sBiVz3lvhfwQs/S3l6qg==",
+ "hasInstallScript": true,
+ "dependencies": {
+ "@babel/helper-module-imports": "^7.0.0",
+ "@babel/traverse": "^7.4.5",
+ "@emotion/is-prop-valid": "^1.1.0",
+ "@emotion/stylis": "^0.8.4",
+ "@emotion/unitless": "^0.7.4",
+ "babel-plugin-styled-components": ">= 1.12.0",
+ "css-to-react-native": "^3.0.0",
+ "hoist-non-react-statics": "^3.0.0",
+ "shallowequal": "^1.1.0",
+ "supports-color": "^5.5.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/styled-components"
+ },
+ "peerDependencies": {
+ "react": ">= 16.8.0",
+ "react-dom": ">= 16.8.0",
+ "react-is": ">= 16.8.0"
+ }
+ },
+ "node_modules/styled-components/node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/styled-components/node_modules/supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/styled-jsx": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz",
@@ -2889,6 +3341,14 @@
}
}
},
+ "node_modules/styled-normalize": {
+ "version": "8.0.7",
+ "resolved": "https://registry.npmjs.org/styled-normalize/-/styled-normalize-8.0.7.tgz",
+ "integrity": "sha512-qQV4O7B9g7ZUnStCwGde7Dc/mcFF/pz0Ha/LL7+j/r6uopf6kJCmmR7jCPQMCBrDkYiQ4xvw1hUoceVJkdaMuQ==",
+ "peerDependencies": {
+ "styled-components": "^4.0.0 || ^5.0.0"
+ }
+ },
"node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -2948,6 +3408,14 @@
"globrex": "^0.1.2"
}
},
+ "node_modules/to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
@@ -3143,6 +3611,146 @@
}
},
"dependencies": {
+ "@babel/code-frame": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz",
+ "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==",
+ "requires": {
+ "@babel/highlight": "^7.18.6"
+ }
+ },
+ "@babel/generator": {
+ "version": "7.20.7",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.7.tgz",
+ "integrity": "sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw==",
+ "requires": {
+ "@babel/types": "^7.20.7",
+ "@jridgewell/gen-mapping": "^0.3.2",
+ "jsesc": "^2.5.1"
+ }
+ },
+ "@babel/helper-annotate-as-pure": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz",
+ "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==",
+ "requires": {
+ "@babel/types": "^7.18.6"
+ }
+ },
+ "@babel/helper-environment-visitor": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz",
+ "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg=="
+ },
+ "@babel/helper-function-name": {
+ "version": "7.19.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz",
+ "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==",
+ "requires": {
+ "@babel/template": "^7.18.10",
+ "@babel/types": "^7.19.0"
+ }
+ },
+ "@babel/helper-hoist-variables": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz",
+ "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==",
+ "requires": {
+ "@babel/types": "^7.18.6"
+ }
+ },
+ "@babel/helper-module-imports": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz",
+ "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==",
+ "requires": {
+ "@babel/types": "^7.18.6"
+ }
+ },
+ "@babel/helper-split-export-declaration": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz",
+ "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==",
+ "requires": {
+ "@babel/types": "^7.18.6"
+ }
+ },
+ "@babel/helper-string-parser": {
+ "version": "7.19.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz",
+ "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw=="
+ },
+ "@babel/helper-validator-identifier": {
+ "version": "7.19.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz",
+ "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w=="
+ },
+ "@babel/highlight": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz",
+ "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==",
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.18.6",
+ "chalk": "^2.0.0",
+ "js-tokens": "^4.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "@babel/parser": {
+ "version": "7.20.7",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.7.tgz",
+ "integrity": "sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg=="
+ },
"@babel/runtime": {
"version": "7.20.7",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.7.tgz",
@@ -3160,6 +3768,73 @@
"regenerator-runtime": "^0.13.11"
}
},
+ "@babel/template": {
+ "version": "7.20.7",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz",
+ "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==",
+ "requires": {
+ "@babel/code-frame": "^7.18.6",
+ "@babel/parser": "^7.20.7",
+ "@babel/types": "^7.20.7"
+ }
+ },
+ "@babel/traverse": {
+ "version": "7.20.12",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.12.tgz",
+ "integrity": "sha512-MsIbFN0u+raeja38qboyF8TIT7K0BFzz/Yd/77ta4MsUsmP2RAnidIlwq7d5HFQrH/OZJecGV6B71C4zAgpoSQ==",
+ "requires": {
+ "@babel/code-frame": "^7.18.6",
+ "@babel/generator": "^7.20.7",
+ "@babel/helper-environment-visitor": "^7.18.9",
+ "@babel/helper-function-name": "^7.19.0",
+ "@babel/helper-hoist-variables": "^7.18.6",
+ "@babel/helper-split-export-declaration": "^7.18.6",
+ "@babel/parser": "^7.20.7",
+ "@babel/types": "^7.20.7",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0"
+ },
+ "dependencies": {
+ "globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA=="
+ }
+ }
+ },
+ "@babel/types": {
+ "version": "7.20.7",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz",
+ "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==",
+ "requires": {
+ "@babel/helper-string-parser": "^7.19.4",
+ "@babel/helper-validator-identifier": "^7.19.1",
+ "to-fast-properties": "^2.0.0"
+ }
+ },
+ "@emotion/is-prop-valid": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.0.tgz",
+ "integrity": "sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg==",
+ "requires": {
+ "@emotion/memoize": "^0.8.0"
+ }
+ },
+ "@emotion/memoize": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.0.tgz",
+ "integrity": "sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA=="
+ },
+ "@emotion/stylis": {
+ "version": "0.8.5",
+ "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz",
+ "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ=="
+ },
+ "@emotion/unitless": {
+ "version": "0.7.5",
+ "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz",
+ "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg=="
+ },
"@eslint/eslintrc": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz",
@@ -3196,6 +3871,40 @@
"resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
"integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA=="
},
+ "@jridgewell/gen-mapping": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
+ "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
+ "requires": {
+ "@jridgewell/set-array": "^1.0.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ }
+ },
+ "@jridgewell/resolve-uri": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
+ "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w=="
+ },
+ "@jridgewell/set-array": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
+ "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw=="
+ },
+ "@jridgewell/sourcemap-codec": {
+ "version": "1.4.14",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
+ "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw=="
+ },
+ "@jridgewell/trace-mapping": {
+ "version": "0.3.17",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz",
+ "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==",
+ "requires": {
+ "@jridgewell/resolve-uri": "3.1.0",
+ "@jridgewell/sourcemap-codec": "1.4.14"
+ }
+ },
"@next/env": {
"version": "13.1.1",
"resolved": "https://registry.npmjs.org/@next/env/-/env-13.1.1.tgz",
@@ -3514,6 +4223,23 @@
"resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz",
"integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA=="
},
+ "babel-plugin-styled-components": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-2.0.7.tgz",
+ "integrity": "sha512-i7YhvPgVqRKfoQ66toiZ06jPNA3p6ierpfUuEWxNF+fV27Uv5gxBkf8KZLHUCc1nFA9j6+80pYoIpqCeyW3/bA==",
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.16.0",
+ "@babel/helper-module-imports": "^7.16.0",
+ "babel-plugin-syntax-jsx": "^6.18.0",
+ "lodash": "^4.17.11",
+ "picomatch": "^2.3.0"
+ }
+ },
+ "babel-plugin-syntax-jsx": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz",
+ "integrity": "sha512-qrPaCSo9c8RHNRHIotaufGbuOBN8rtdC4QrrFFc43vyWCCz7Kl7GL1PGaXtMGQZUXrkCjNEgxDfmAuAabr/rlw=="
+ },
"balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
@@ -3550,6 +4276,11 @@
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
"integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="
},
+ "camelize": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz",
+ "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ=="
+ },
"caniuse-lite": {
"version": "1.0.30001442",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001442.tgz",
@@ -3602,6 +4333,21 @@
"which": "^2.0.1"
}
},
+ "css-color-keywords": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz",
+ "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg=="
+ },
+ "css-to-react-native": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.0.0.tgz",
+ "integrity": "sha512-Ro1yETZA813eoyUp2GDBhG2j+YggidUmzO1/v9eYBKR2EHVEniE2MI/NqpTQ954BMpTPZFsGNPm46qFB9dpaPQ==",
+ "requires": {
+ "camelize": "^1.0.0",
+ "css-color-keywords": "^1.0.0",
+ "postcss-value-parser": "^4.0.2"
+ }
+ },
"damerau-levenshtein": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz",
@@ -4320,6 +5066,14 @@
"has-symbols": "^1.0.2"
}
},
+ "hoist-non-react-statics": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
+ "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
+ "requires": {
+ "react-is": "^16.7.0"
+ }
+ },
"ignore": {
"version": "5.2.4",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
@@ -4535,6 +5289,11 @@
"argparse": "^2.0.1"
}
},
+ "jsesc": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
+ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA=="
+ },
"json-schema-traverse": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
@@ -4592,6 +5351,11 @@
"p-locate": "^5.0.0"
}
},
+ "lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
+ },
"lodash.merge": {
"version": "4.6.2",
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
@@ -4845,6 +5609,11 @@
"source-map-js": "^1.0.2"
}
},
+ "postcss-value-parser": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
+ },
"prelude-ls": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
@@ -4887,6 +5656,12 @@
"scheduler": "^0.23.0"
}
},
+ "react-icons": {
+ "version": "4.7.1",
+ "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.7.1.tgz",
+ "integrity": "sha512-yHd3oKGMgm7zxo3EA7H2n7vxSoiGmHk5t6Ou4bXsfcgWyhfDKMpyKfhHR6Bjnn63c+YXBLBPUql9H4wPJM6sXw==",
+ "requires": {}
+ },
"react-is": {
"version": "16.13.1",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
@@ -4974,6 +5749,11 @@
"lru-cache": "^6.0.0"
}
},
+ "shallowequal": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz",
+ "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ=="
+ },
"shebang-command": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
@@ -5060,6 +5840,38 @@
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
"integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="
},
+ "styled-components": {
+ "version": "5.3.6",
+ "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.3.6.tgz",
+ "integrity": "sha512-hGTZquGAaTqhGWldX7hhfzjnIYBZ0IXQXkCYdvF1Sq3DsUaLx6+NTHC5Jj1ooM2F68sBiVz3lvhfwQs/S3l6qg==",
+ "requires": {
+ "@babel/helper-module-imports": "^7.0.0",
+ "@babel/traverse": "^7.4.5",
+ "@emotion/is-prop-valid": "^1.1.0",
+ "@emotion/stylis": "^0.8.4",
+ "@emotion/unitless": "^0.7.4",
+ "babel-plugin-styled-components": ">= 1.12.0",
+ "css-to-react-native": "^3.0.0",
+ "hoist-non-react-statics": "^3.0.0",
+ "shallowequal": "^1.1.0",
+ "supports-color": "^5.5.0"
+ },
+ "dependencies": {
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
"styled-jsx": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz",
@@ -5068,6 +5880,12 @@
"client-only": "0.0.1"
}
},
+ "styled-normalize": {
+ "version": "8.0.7",
+ "resolved": "https://registry.npmjs.org/styled-normalize/-/styled-normalize-8.0.7.tgz",
+ "integrity": "sha512-qQV4O7B9g7ZUnStCwGde7Dc/mcFF/pz0Ha/LL7+j/r6uopf6kJCmmR7jCPQMCBrDkYiQ4xvw1hUoceVJkdaMuQ==",
+ "requires": {}
+ },
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -5109,6 +5927,11 @@
"globrex": "^0.1.2"
}
},
+ "to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog=="
+ },
"to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
diff --git a/package.json b/package.json
index 2449640..b4e121f 100644
--- a/package.json
+++ b/package.json
@@ -14,6 +14,9 @@
"eslint-config-next": "13.1.1",
"next": "13.1.1",
"react": "18.2.0",
- "react-dom": "18.2.0"
+ "react-dom": "18.2.0",
+ "react-icons": "^4.7.1",
+ "styled-components": "^5.3.0",
+ "styled-normalize": "^8.0.7"
}
}
diff --git a/pages/_app.js b/pages/_app.js
index 048541e..84762e7 100644
--- a/pages/_app.js
+++ b/pages/_app.js
@@ -1,5 +1,12 @@
-import '../styles/globals.css'
+import Theme from '../styles/theme';
export default function App({ Component, pageProps }) {
- return
+ return (
+ <>
+
+
+
+ >
+ );
}
+
\ No newline at end of file
diff --git a/pages/_document.js b/pages/_document.js
index 54e8bf3..c10c231 100644
--- a/pages/_document.js
+++ b/pages/_document.js
@@ -1,13 +1,43 @@
-import { Html, Head, Main, NextScript } from 'next/document'
+import Document, { Head, Html, Main, NextScript } from 'next/document'
+import { ServerStyleSheet } from 'styled-components'
-export default function Document() {
- return (
-
-
-
-
-
-
- )
-}
+export default class MyDocument extends Document {
+ static async getInitialProps(ctx) {
+ const sheet = new ServerStyleSheet()
+ const originalRenderPage = ctx.renderPage
+
+ try {
+ ctx.renderPage = () =>
+ originalRenderPage({
+ enhanceApp: (App) => (props) =>
+ sheet.collectStyles(),
+ })
+
+ const initialProps = await Document.getInitialProps(ctx)
+ return {
+ ...initialProps,
+ styles: (
+ <>
+ {initialProps.styles}
+ {sheet.getStyleElement()}
+ >
+ ),
+ }
+ } finally {
+ sheet.seal()
+ }
+ }
+ render() {
+ return (
+
+
+
+
+
+
+
+
+
+ );
+ }
+}
\ No newline at end of file
diff --git a/pages/api/hello.js b/pages/api/hello.js
index df63de8..84ae0e8 100644
--- a/pages/api/hello.js
+++ b/pages/api/hello.js
@@ -1,5 +1,5 @@
// Next.js API route support: https://nextjs.org/docs/api-routes/introduction
-export default function handler(req, res) {
+export default (req, res) => {
res.status(200).json({ name: 'John Doe' })
-}
+}
\ No newline at end of file
diff --git a/pages/index.js b/pages/index.js
index dc5a1cc..e515232 100644
--- a/pages/index.js
+++ b/pages/index.js
@@ -1,123 +1,28 @@
-import Head from 'next/head'
-import Image from 'next/image'
-import { Inter } from '@next/font/google'
-import styles from '../styles/Home.module.css'
+import Acomplishments from '../components/Acomplishments/Acomplishments';
+import BgAnimation from '../components/BackgrooundAnimation/BackgroundAnimation';
+import Hero from '../components/Hero/Hero';
+import Projects from '../components/Projects/Projects';
+import Technologies from '../components/Technologies/Technologies';
+import Timeline from '../components/TimeLine/TimeLine';
+import { Layout } from '../layout/Layout';
+import { Section } from '../styles/GlobalComponents';
-const inter = Inter({ subsets: ['latin'] })
-export default function Home() {
- return (
- <>
-
- Create Next App
-
-
-
-
-
-
-
- Get started by editing
- pages/index.js
-
-
-
-
-
-
-
-
- >
- )
-}
+export default Home;
diff --git a/public/favicon.ico b/public/favicon.ico
index 718d6fe..4965832 100644
Binary files a/public/favicon.ico and b/public/favicon.ico differ
diff --git a/public/images/1.png b/public/images/1.png
new file mode 100644
index 0000000..3060d19
Binary files /dev/null and b/public/images/1.png differ
diff --git a/public/images/2.png b/public/images/2.png
new file mode 100644
index 0000000..ad5f534
Binary files /dev/null and b/public/images/2.png differ
diff --git a/public/images/3.jpg b/public/images/3.jpg
new file mode 100644
index 0000000..cd0d0c1
Binary files /dev/null and b/public/images/3.jpg differ
diff --git a/public/images/4.jpg b/public/images/4.jpg
new file mode 100644
index 0000000..d5cf06f
Binary files /dev/null and b/public/images/4.jpg differ
diff --git a/public/images/Screenshot (88).png b/public/images/Screenshot (88).png
new file mode 100644
index 0000000..e53a06d
Binary files /dev/null and b/public/images/Screenshot (88).png differ
diff --git a/public/images/Screenshot (89).png b/public/images/Screenshot (89).png
new file mode 100644
index 0000000..617dfc6
Binary files /dev/null and b/public/images/Screenshot (89).png differ
diff --git a/public/images/Screenshot (90).png b/public/images/Screenshot (90).png
new file mode 100644
index 0000000..fa0f8d2
Binary files /dev/null and b/public/images/Screenshot (90).png differ
diff --git a/public/images/Screenshot (91).png b/public/images/Screenshot (91).png
new file mode 100644
index 0000000..15054bf
Binary files /dev/null and b/public/images/Screenshot (91).png differ
diff --git a/public/images/profile.jpeg b/public/images/profile.jpeg
new file mode 100644
index 0000000..e1b11e8
Binary files /dev/null and b/public/images/profile.jpeg differ
diff --git a/public/images/projects.jpeg b/public/images/projects.jpeg
new file mode 100644
index 0000000..a01ba41
Binary files /dev/null and b/public/images/projects.jpeg differ
diff --git a/public/next.svg b/public/next.svg
deleted file mode 100644
index 5174b28..0000000
--- a/public/next.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/public/thirteen.svg b/public/thirteen.svg
deleted file mode 100644
index 8977c1b..0000000
--- a/public/thirteen.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/public/vercel.svg b/public/vercel.svg
index d2f8422..fbf0e25 100644
--- a/public/vercel.svg
+++ b/public/vercel.svg
@@ -1 +1,4 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/styles/GlobalComponents/Button.js b/styles/GlobalComponents/Button.js
new file mode 100644
index 0000000..7c1db41
--- /dev/null
+++ b/styles/GlobalComponents/Button.js
@@ -0,0 +1,11 @@
+import React from 'react'
+
+import { ButtonBack, ButtonFront } from './index'
+
+const Button = (props) => (
+ {props.children}
+ {props.children}
+
+);
+
+export default Button
diff --git a/styles/GlobalComponents/index.js b/styles/GlobalComponents/index.js
new file mode 100644
index 0000000..60da792
--- /dev/null
+++ b/styles/GlobalComponents/index.js
@@ -0,0 +1,281 @@
+import styled from 'styled-components'
+
+export const Section = styled.section`
+ display: ${(props) => props.grid ? "grid" : "flex" };
+ flex-direction: ${(props) => props.row ? "row" : "column" };
+ padding: ${(props) => props.nopadding ? "0" : "32px 48px 0" } ;
+ margin: 0 auto;
+ max-width: 1040px;
+ box-sizing: content-box;
+ position: relative;
+ overflow: hidden;
+ grid-template-columns: 1fr 1fr;
+
+ @media ${(props) => props.theme.breakpoints.md} {
+ padding: 24px 48px 0;
+ flex-direction: column;
+ }
+
+ @media ${(props) => props.theme.breakpoints.sm} {
+ padding: ${(props) => props.nopadding ? "0" : "16px 16px 0" } ;
+
+ width: calc(100vw - 32px);
+ flex-direction: column;
+ }
+`
+
+export const SectionTitle = styled.h2`
+ font-weight: 800;
+ font-size: ${(props) => props.main ? '65px' : '56px'};
+ line-height: ${(props) => props.main ? '72px' : '56px'};
+ width: max-content;
+ max-width: 100%;
+ background: linear-gradient(121.57deg, #FFFFFF 18.77%, rgba(255, 255, 255, 0.66) 60.15%);
+ -webkit-background-clip: text;
+ -webkit-text-fill-color: transparent;
+ margin-bottom: 16px;
+ padding: ${(props) => props.main ? '58px 0 16px' : '0'};
+
+ @media ${props => props.theme.breakpoints.md}{
+ font-size: ${(props) => props.main ? '56px' : '48px'};
+ line-height: ${(props) => props.main ? '56px' : '48px'};
+ margin-bottom: 12px;
+ padding: ${(props) => props.main ? '40px 0 12px' : '0'};
+ }
+
+ @media ${props => props.theme.breakpoints.sm}{
+ font-size: 32px;
+ line-height: 40px;
+ font-size: ${(props) => props.main ? '28px' : '32px'};
+ line-height: ${(props) => props.main ? '32px' : '40px'};
+ margin-bottom: 8px;
+ padding: ${(props) => props.main ? '16px 0 8px' : '0'};
+ max-width: 100%;
+ }
+`
+
+export const SectionText = styled.p`
+ max-width: 800px;
+ font-size: 24px;
+ line-height: 40px;
+ font-weight: 300;
+ padding-bottom: 3.6rem;
+ color: rgba(255, 255, 255, 0.5);
+
+ @media ${(props) => props.theme.breakpoints.md} {
+ max-width: 670px;
+ font-size: 20px;
+ line-height: 32px;
+ padding-bottom: 24px;
+ }
+
+ @media ${(props) => props.theme.breakpoints.sm} {
+ font-size: 16px;
+ line-height: 24px;
+ padding-bottom: 16px;
+ }
+`
+
+export const SectionDivider = styled.div`
+
+ width: 64px;
+ height: 6px;
+ border-radius: 10px;
+ background-color: #fff;
+ background: ${(props) => props.colorAlt ?
+ 'linear-gradient(270deg, #F46737 0%, #945DD6 100%)' :
+ 'linear-gradient(270deg, #13ADC7 0%, #945DD6 100%)'};
+
+ margin: ${(props) => props.divider ? "4rem 0" : "" };
+
+ @media ${(props) => props.theme.breakpoints.md} {
+ width: 48px;
+ height: 4px;
+ }
+
+ @media ${(props) => props.theme.breakpoints.sm} {
+ width: 32px;
+ height: 2px;
+ }
+`
+export const SectionSubText = styled.p`
+ max-width: 800px;
+ font-weight: 300;
+ font-size: 18px;
+ line-height: 32px;
+ color: rgba(255, 255, 255, 0.75);
+
+@media ${(props) => props.theme.breakpoints.md} {
+ max-width: 672px;
+ font-size: 16px;
+ line-height: 25px;
+ }
+
+ @media ${(props) => props.theme.breakpoints.sm} {
+ font-size: 14px;
+ line-height: 22px;
+ }
+`
+export const SecondaryBtn = styled.button`
+ color: #FFF;
+ background: none;
+ border: 1px solid rgba(255, 255, 255, 0.33);
+ box-sizing: border-box;
+ border-radius: 999px;
+ padding: 16px 24px;
+ font-weight: 600;
+ font-size: 18px;
+ line-height: 16px;
+ width: fit-content;
+ margin-top: 32px;
+ margin-bottom: 80px;
+ cursor: pointer;
+ transition: 0.4s ease;
+ &:focus {
+ outline: none;
+ }
+
+ &:hover {
+ color: #0f1624;
+ background: #fff;
+ border: 1px solid #fff;
+ }
+
+ &:active {
+ background: #e0e4eb;
+ border: 1px solid #304169;
+ box-shadow: inset 0px 2px 1px rgba(46, 49, 55, 0.15), inset 0px 0px 4px rgba(20, 20, 55, 0.3);
+ }
+
+ @media ${(props) => props.theme.breakpoints.md}{
+ margin-top: 24px;
+ margin-bottom: 64px;
+ padding: 16px 24px;
+ width: fit-content;
+ font-size: 20px;
+ line-height: 20px;
+ }
+
+ @media ${(props) => props.theme.breakpoints.sm} {
+ margin-top: 16px;
+ margin-bottom: 40px;
+ padding: 8px 16px;
+ width: 100%;
+ font-size: 14px;
+ line-height: 16px;
+ }
+`
+
+export const ButtonBack = styled.div`
+ width: ${({ alt }) => alt ? '150px' : '262px'};
+ height: ${({ alt }) => alt ? '52px' : '64px'};
+ border-radius: 50px;
+ font-size: ${({ alt }) => alt ? '20px' : '24px'};
+ font-weight: 600;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ margin: ${({ alt, form }) => (alt || form) ? '0' : '0 0 80px'};
+ color: #fff;
+ background: ${({ alt }) => alt ? 'linear-gradient(270deg, #ff622e 0%, #B133FF 100%)' : 'linear-gradient(270deg, #00DBD8 0%, #B133FF 100%)'};
+ cursor: pointer;
+ transition: 0.5s ease;
+ position: relative;
+ overflow: hidden;
+ opacity: ${({ disabled }) => disabled ? '.5' : '1'};
+
+ @media ${(props) => props.theme.breakpoints.md} {
+ width: ${({ alt }) => alt ? '150px' : '184px'};
+ height: ${({ alt }) => alt ? '52px' : '48px'};
+ font-size: ${({ alt }) => alt ? '20px' : '16px'};
+ margin-bottom: ${({ alt }) => alt ? '0' : '64px'};
+ }
+
+ @media ${(props) => props.theme.breakpoints.sm} {
+ width: 100%;
+ height: 32px;
+ font-size: 14px;
+ margin-bottom: ${({ alt }) => alt ? '0' : '32px'};
+ }
+`
+
+export const ButtonFront = styled.button`
+ border: none;
+ border-radius: 50px;
+ color: #fff;
+ display: flex;
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background: ${({ alt }) => alt ? 'linear-gradient(270deg, #F46737 0%, #945DD6 100%)' : 'linear-gradient(270deg, #13ADC7 0%, #945DD6 100%)'};
+ opacity: ${({ disabled }) => disabled ? '.5' : '1'};
+ transition: .4s ease;
+ font-size: ${({ alt }) => alt ? '20px' : '24px'};
+ font-weight: 600;
+ align-items: center;
+ justify-content: center;
+ cursor: pointer;
+ box-shadow: ${({ disabled }) => disabled ? 'inset 0px 2px 1px rgba(46, 49, 55, 0.15), inset 0px 0px 4px rgba(20, 20, 55, 0.3)' : 'none'};
+
+ &:hover {
+ opacity: 0;
+ }
+ &:focus {
+ outline: none;
+ }
+ &:active {
+ opacity: 1;
+ box-shadow: inset 0px 2px 1px rgba(46, 49, 55, 0.15), inset 0px 0px 4px rgba(20, 20, 55, 0.3);
+ }
+
+ &:disabled{
+ background: linear-gradient(270deg, #00DBD8 0%, #B133FF 100%);
+ opacity: 0.5;
+ box-shadow: inset 0px 2px 1px rgba(46, 49, 55, 0.15), inset 0px 0px 4px rgba(20, 20, 55, 0.3);
+ }
+
+ @media ${(props) => props.theme.breakpoints.md} {
+ font-size: ${({ alt }) => alt ? '20px' : '16px'};
+ }
+
+ @media ${(props) => props.theme.breakpoints.sm} {
+ font-size: 14px;
+ }
+`
+
+export const LinkContainer = styled.div`
+ margin-left: ${({ large }) => large ? '24px' : '16px'};
+ transition: 0.3s ease;
+ justify-content: center;
+ border-radius: 50px;
+ padding: 8px;
+
+ &:hover {
+ background-color: #212d45;
+ transform: scale(1.2);
+ cursor: pointer;
+ }
+
+ @media ${(props) => props.theme.breakpoints.md} {
+ margin-left: ${({ large }) => large ? '16px' : '8px'};
+
+ }
+ @media ${(props) => props.theme.breakpoints.sm} {
+ margin-left: ${({ large }) => large ? '0' : '8px'};
+ }
+`
+
+export const LinkIconImg = styled.div`
+ display: flex;
+ height: ${({ large }) => large ? '32px' : '24px'};
+
+ @media ${(props) => props.theme.breakpoints.md} {
+ height: ${({ nav }) => nav ? '16px' : '24px'};
+ }
+
+ @media ${(props) => props.theme.breakpoints.sm} {
+ height: ${({ large }) => large ? '32px' : '16px'};
+ }
+`
diff --git a/styles/Home.module.css b/styles/Home.module.css
deleted file mode 100644
index 27dfff5..0000000
--- a/styles/Home.module.css
+++ /dev/null
@@ -1,278 +0,0 @@
-.main {
- display: flex;
- flex-direction: column;
- justify-content: space-between;
- align-items: center;
- padding: 6rem;
- min-height: 100vh;
-}
-
-.description {
- display: inherit;
- justify-content: inherit;
- align-items: inherit;
- font-size: 0.85rem;
- max-width: var(--max-width);
- width: 100%;
- z-index: 2;
- font-family: var(--font-mono);
-}
-
-.description a {
- display: flex;
- justify-content: center;
- align-items: center;
- gap: 0.5rem;
-}
-
-.description p {
- position: relative;
- margin: 0;
- padding: 1rem;
- background-color: rgba(var(--callout-rgb), 0.5);
- border: 1px solid rgba(var(--callout-border-rgb), 0.3);
- border-radius: var(--border-radius);
-}
-
-.code {
- font-weight: 700;
- font-family: var(--font-mono);
-}
-
-.grid {
- display: grid;
- grid-template-columns: repeat(4, minmax(25%, auto));
- width: var(--max-width);
- max-width: 100%;
-}
-
-.card {
- padding: 1rem 1.2rem;
- border-radius: var(--border-radius);
- background: rgba(var(--card-rgb), 0);
- border: 1px solid rgba(var(--card-border-rgb), 0);
- transition: background 200ms, border 200ms;
-}
-
-.card span {
- display: inline-block;
- transition: transform 200ms;
-}
-
-.card h2 {
- font-weight: 600;
- margin-bottom: 0.7rem;
-}
-
-.card p {
- margin: 0;
- opacity: 0.6;
- font-size: 0.9rem;
- line-height: 1.5;
- max-width: 30ch;
-}
-
-.center {
- display: flex;
- justify-content: center;
- align-items: center;
- position: relative;
- padding: 4rem 0;
-}
-
-.center::before {
- background: var(--secondary-glow);
- border-radius: 50%;
- width: 480px;
- height: 360px;
- margin-left: -400px;
-}
-
-.center::after {
- background: var(--primary-glow);
- width: 240px;
- height: 180px;
- z-index: -1;
-}
-
-.center::before,
-.center::after {
- content: '';
- left: 50%;
- position: absolute;
- filter: blur(45px);
- transform: translateZ(0);
-}
-
-.logo,
-.thirteen {
- position: relative;
-}
-
-.thirteen {
- display: flex;
- justify-content: center;
- align-items: center;
- width: 75px;
- height: 75px;
- padding: 25px 10px;
- margin-left: 16px;
- transform: translateZ(0);
- border-radius: var(--border-radius);
- overflow: hidden;
- box-shadow: 0px 2px 8px -1px #0000001a;
-}
-
-.thirteen::before,
-.thirteen::after {
- content: '';
- position: absolute;
- z-index: -1;
-}
-
-/* Conic Gradient Animation */
-.thirteen::before {
- animation: 6s rotate linear infinite;
- width: 200%;
- height: 200%;
- background: var(--tile-border);
-}
-
-/* Inner Square */
-.thirteen::after {
- inset: 0;
- padding: 1px;
- border-radius: var(--border-radius);
- background: linear-gradient(
- to bottom right,
- rgba(var(--tile-start-rgb), 1),
- rgba(var(--tile-end-rgb), 1)
- );
- background-clip: content-box;
-}
-
-/* Enable hover only on non-touch devices */
-@media (hover: hover) and (pointer: fine) {
- .card:hover {
- background: rgba(var(--card-rgb), 0.1);
- border: 1px solid rgba(var(--card-border-rgb), 0.15);
- }
-
- .card:hover span {
- transform: translateX(4px);
- }
-}
-
-@media (prefers-reduced-motion) {
- .thirteen::before {
- animation: none;
- }
-
- .card:hover span {
- transform: none;
- }
-}
-
-/* Mobile */
-@media (max-width: 700px) {
- .content {
- padding: 4rem;
- }
-
- .grid {
- grid-template-columns: 1fr;
- margin-bottom: 120px;
- max-width: 320px;
- text-align: center;
- }
-
- .card {
- padding: 1rem 2.5rem;
- }
-
- .card h2 {
- margin-bottom: 0.5rem;
- }
-
- .center {
- padding: 8rem 0 6rem;
- }
-
- .center::before {
- transform: none;
- height: 300px;
- }
-
- .description {
- font-size: 0.8rem;
- }
-
- .description a {
- padding: 1rem;
- }
-
- .description p,
- .description div {
- display: flex;
- justify-content: center;
- position: fixed;
- width: 100%;
- }
-
- .description p {
- align-items: center;
- inset: 0 0 auto;
- padding: 2rem 1rem 1.4rem;
- border-radius: 0;
- border: none;
- border-bottom: 1px solid rgba(var(--callout-border-rgb), 0.25);
- background: linear-gradient(
- to bottom,
- rgba(var(--background-start-rgb), 1),
- rgba(var(--callout-rgb), 0.5)
- );
- background-clip: padding-box;
- backdrop-filter: blur(24px);
- }
-
- .description div {
- align-items: flex-end;
- pointer-events: none;
- inset: auto 0 0;
- padding: 2rem;
- height: 200px;
- background: linear-gradient(
- to bottom,
- transparent 0%,
- rgb(var(--background-end-rgb)) 40%
- );
- z-index: 1;
- }
-}
-
-/* Tablet and Smaller Desktop */
-@media (min-width: 701px) and (max-width: 1120px) {
- .grid {
- grid-template-columns: repeat(2, 50%);
- }
-}
-
-@media (prefers-color-scheme: dark) {
- .vercelLogo {
- filter: invert(1);
- }
-
- .logo,
- .thirteen img {
- filter: invert(1) drop-shadow(0 0 0.3rem #ffffff70);
- }
-}
-
-@keyframes rotate {
- from {
- transform: rotate(360deg);
- }
- to {
- transform: rotate(0deg);
- }
-}
diff --git a/styles/globals.css b/styles/globals.css
deleted file mode 100644
index d4f491e..0000000
--- a/styles/globals.css
+++ /dev/null
@@ -1,107 +0,0 @@
-:root {
- --max-width: 1100px;
- --border-radius: 12px;
- --font-mono: ui-monospace, Menlo, Monaco, 'Cascadia Mono', 'Segoe UI Mono',
- 'Roboto Mono', 'Oxygen Mono', 'Ubuntu Monospace', 'Source Code Pro',
- 'Fira Mono', 'Droid Sans Mono', 'Courier New', monospace;
-
- --foreground-rgb: 0, 0, 0;
- --background-start-rgb: 214, 219, 220;
- --background-end-rgb: 255, 255, 255;
-
- --primary-glow: conic-gradient(
- from 180deg at 50% 50%,
- #16abff33 0deg,
- #0885ff33 55deg,
- #54d6ff33 120deg,
- #0071ff33 160deg,
- transparent 360deg
- );
- --secondary-glow: radial-gradient(
- rgba(255, 255, 255, 1),
- rgba(255, 255, 255, 0)
- );
-
- --tile-start-rgb: 239, 245, 249;
- --tile-end-rgb: 228, 232, 233;
- --tile-border: conic-gradient(
- #00000080,
- #00000040,
- #00000030,
- #00000020,
- #00000010,
- #00000010,
- #00000080
- );
-
- --callout-rgb: 238, 240, 241;
- --callout-border-rgb: 172, 175, 176;
- --card-rgb: 180, 185, 188;
- --card-border-rgb: 131, 134, 135;
-}
-
-@media (prefers-color-scheme: dark) {
- :root {
- --foreground-rgb: 255, 255, 255;
- --background-start-rgb: 0, 0, 0;
- --background-end-rgb: 0, 0, 0;
-
- --primary-glow: radial-gradient(rgba(1, 65, 255, 0.4), rgba(1, 65, 255, 0));
- --secondary-glow: linear-gradient(
- to bottom right,
- rgba(1, 65, 255, 0),
- rgba(1, 65, 255, 0),
- rgba(1, 65, 255, 0.3)
- );
-
- --tile-start-rgb: 2, 13, 46;
- --tile-end-rgb: 2, 5, 19;
- --tile-border: conic-gradient(
- #ffffff80,
- #ffffff40,
- #ffffff30,
- #ffffff20,
- #ffffff10,
- #ffffff10,
- #ffffff80
- );
-
- --callout-rgb: 20, 20, 20;
- --callout-border-rgb: 108, 108, 108;
- --card-rgb: 100, 100, 100;
- --card-border-rgb: 200, 200, 200;
- }
-}
-
-* {
- box-sizing: border-box;
- padding: 0;
- margin: 0;
-}
-
-html,
-body {
- max-width: 100vw;
- overflow-x: hidden;
-}
-
-body {
- color: rgb(var(--foreground-rgb));
- background: linear-gradient(
- to bottom,
- transparent,
- rgb(var(--background-end-rgb))
- )
- rgb(var(--background-start-rgb));
-}
-
-a {
- color: inherit;
- text-decoration: none;
-}
-
-@media (prefers-color-scheme: dark) {
- html {
- color-scheme: dark;
- }
-}
diff --git a/styles/globals.js b/styles/globals.js
new file mode 100644
index 0000000..bed4bcc
--- /dev/null
+++ b/styles/globals.js
@@ -0,0 +1,37 @@
+import { createGlobalStyle } from 'styled-components';
+import { normalize } from 'styled-normalize';
+
+const GlobalStyles = createGlobalStyle`
+ ${normalize};
+
+ * {
+ box-sizing: border-box;
+ margin: 0;
+ padding: 0;
+ }
+ html {
+ font-size: 62.5%;
+ scroll-behavior: smooth;
+
+ }
+ body {
+ font-family: ${props => props.theme.fonts.main};
+ font-size: 1.6rem;
+ background: ${props => props.theme.colors.background1};
+ color: ${props => props.theme.colors.primary1};
+ cursor: default;
+
+ }
+ h1,h2,h3,h4,h5,h6,button {
+ font-family: ${props => props.theme.fonts.title};
+ }
+ a {
+ text-decoration: none;
+ }
+ li{
+ list-style: none;
+ }
+
+`;
+
+export default GlobalStyles;
\ No newline at end of file
diff --git a/styles/theme.js b/styles/theme.js
new file mode 100644
index 0000000..531a590
--- /dev/null
+++ b/styles/theme.js
@@ -0,0 +1,13 @@
+import { ThemeProvider } from 'styled-components';
+
+import theme from "../themes/default";
+import GlobalStyles from './globals';
+
+const Theme = ({ children }) => (
+
+
+ {children}
+
+);
+
+export default Theme;
\ No newline at end of file
diff --git a/themes/default.js b/themes/default.js
new file mode 100644
index 0000000..aa7f733
--- /dev/null
+++ b/themes/default.js
@@ -0,0 +1,22 @@
+export default {
+ // Temp fonts
+ fonts: {
+ title: "Space Grotesk, sans-serif",
+ main: "Space Grotesk, sans-serif"
+ },
+ // Colors for layout
+ colors: {
+ primary1: "hsl(204,23.8%,95.9%)",
+ background1: "#0F1624",
+ accent1: "hsl(34.9,98.6%,72.9%)",
+ button: "hsl(205.1,100%,36.1%)",
+ background2: "hsl(232.7,27.3%,23.7%)",
+ },
+ // Breakpoints for responsive design
+ breakpoints: {
+ sm: 'screen and (max-width: 640px)',
+ md: 'screen and (max-width: 768px)',
+ lg: 'screen and (max-width: 1024px)',
+ xl: 'screen and (max-width: 1280px)'
+ },
+}