diff --git a/package.json b/package.json
index b85d40fc..2b39d32e 100644
--- a/package.json
+++ b/package.json
@@ -24,6 +24,7 @@
"react-router-dom": "^6.2.1",
"react-scripts": "5.0.1",
"react-slick": "^0.29.0",
+ "recoil": "^0.7.4",
"slick-carousel": "^1.8.1",
"styled-components": "^5.3.5"
},
diff --git a/src/App.tsx b/src/App.tsx
index 1dd16ca1..a9bfecbd 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -1,10 +1,16 @@
+import { useRecoilValue } from "recoil";
import styled from "styled-components";
+import { activeState } from "./core/atom/menuBar";
import Router from "./Router";
+import { ModalStyle } from "./style/modalStyle";
export default function App() {
+ const isActive = useRecoilValue(activeState);
+
return (
+ {isActive && }
);
@@ -12,6 +18,8 @@ export default function App() {
const St = {
MobileContainer: styled.div`
+ position: relative;
+
margin: 0 auto;
@media screen and (min-width: 48rem), screen and (min-height: 48rem) and (orientation: landscape) {
diff --git a/src/asset/icon/MenuBar Profile.svg b/src/asset/icon/MenuBar Profile.svg
new file mode 100644
index 00000000..2f524674
--- /dev/null
+++ b/src/asset/icon/MenuBar Profile.svg
@@ -0,0 +1,9 @@
+
diff --git a/src/asset/icon/closeBtn.svg b/src/asset/icon/closeBtn.svg
new file mode 100644
index 00000000..e1e31c3e
--- /dev/null
+++ b/src/asset/icon/closeBtn.svg
@@ -0,0 +1,4 @@
+
diff --git a/src/asset/icon/index.ts b/src/asset/icon/index.ts
index cf428d62..68ef2ed3 100644
--- a/src/asset/icon/index.ts
+++ b/src/asset/icon/index.ts
@@ -1,8 +1,11 @@
+export { ReactComponent as IcCloseBtn } from "./closeBtn.svg";
export { ReactComponent as IcEmptyHeart } from "./emptyHeart.svg";
export { ReactComponent as IcFilterBtn } from "./filterBtn.svg";
export { ReactComponent as IcHamburger } from "./hamburger.svg";
export { ReactComponent as IcLogo } from "./logo.svg";
export { ReactComponent as IcCloseBtn } from "./modalCloseBtn.svg";
export { ReactComponent as IcNextCardBtmn } from "./nextCardBtn.svg";
+export { ReactComponent as IcMenuBarImg } from "./MenuBar Profile.svg";
+export { ReactComponent as IcNextCardBtn } from "./nextCardBtn.svg";
export { ReactComponent as IcVoteImg1 } from "./voteImg1.svg";
export { ReactComponent as IcVoteImg2 } from "./voteImg2.svg";
diff --git a/src/components/CardCollection/Card/LastCard/index.tsx b/src/components/CardCollection/Card/LastCard/index.tsx
index 2e55a4d0..7fb00903 100644
--- a/src/components/CardCollection/Card/LastCard/index.tsx
+++ b/src/components/CardCollection/Card/LastCard/index.tsx
@@ -1,4 +1,4 @@
-import { IcNextCardBtmn } from "../../../../asset/icon";
+import { IcNextCardBtn } from "../../../../asset/icon";
import { St } from "./style";
export default function LastCard() {
@@ -16,7 +16,7 @@ export default function LastCard() {
-
+
홈으로 돌아가기
diff --git a/src/components/CardCollection/CardSlider/style.ts b/src/components/CardCollection/CardSlider/style.ts
index 680cb900..79cabcec 100644
--- a/src/components/CardCollection/CardSlider/style.ts
+++ b/src/components/CardCollection/CardSlider/style.ts
@@ -1,13 +1,3 @@
-/*
-마지막 편집자: 22-07-13 joohaem
-변경사항 및 참고:
- - height/scale, background 애니메이션이 너무 이상하게 들어가서
- 주석처리 된 부분들 디자인팀과 소통이 좀 필요할 것 같아요
-
-고민점:
- -
-*/
-
import styled from "styled-components";
import { IcFilterBtn } from "../../../asset/icon";
@@ -30,9 +20,6 @@ export const St = {
height: 100%;
/* width: calc(100vw - 5.6rem); */
/* height: calc(100vh - 10.5rem); */
-
- /* background: linear-gradient(0deg, rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.1)), rgba(211, 245, 232, 0.5);
- backdrop-filter: blur(1.2rem); */
}
& .slick-slide.slick-active article {
@@ -53,7 +40,7 @@ export const St = {
`,
IcFilterBtn: styled(IcFilterBtn)`
- position: absolute;
+ position: fixed;
right: 2.3rem;
bottom: 3.4rem;
`,
diff --git a/src/components/Login/LoginForm/index.tsx b/src/components/Login/LoginForm/index.tsx
new file mode 100644
index 00000000..2606928e
--- /dev/null
+++ b/src/components/Login/LoginForm/index.tsx
@@ -0,0 +1,38 @@
+/*
+마지막 편집자: 22-07-14 joohaem
+변경사항 및 참고:
+ - "react-hook-form" 도입 고려해도 좋을 것 같습니다
+
+고민점:
+ -
+*/
+
+import { useState } from "react";
+
+import { St } from "./style";
+
+export default function LoginForm() {
+ const [errorMessage, setErrorMessage] = useState({ emailError: "", passwordError: "" });
+
+ const submitLoginForm = (e: React.FormEvent) => {
+ e.preventDefault();
+ };
+
+ return (
+
+ 로그인
+
+ 이메일
+
+ {errorMessage.emailError && {errorMessage.emailError}}
+ 비밀번호
+
+ {errorMessage.passwordError && {errorMessage.passwordError}}
+ 로그인하기
+
+
+ 회원가입 | 비밀번호 재설정
+
+
+ );
+}
diff --git a/src/components/Login/LoginForm/style.ts b/src/components/Login/LoginForm/style.ts
new file mode 100644
index 00000000..8f0792fa
--- /dev/null
+++ b/src/components/Login/LoginForm/style.ts
@@ -0,0 +1,80 @@
+import styled from "styled-components";
+
+export const St = {
+ Section: styled.section`
+ padding: 0 1.2rem;
+ `,
+
+ Form: styled.form``,
+
+ Title: styled.h2`
+ margin-bottom: 2rem;
+
+ ${({ theme }) => theme.fonts.h1};
+ color: ${({ theme }) => theme.colors.bg};
+ `,
+
+ Label: styled.label`
+ display: block;
+
+ margin: 1.6rem 0 1.2rem;
+
+ ${({ theme }) => theme.fonts.body6};
+ color: ${({ theme }) => theme.colors.gray600};
+ `,
+
+ ErrorMessage: styled.strong`
+ display: block;
+
+ margin: 0.8rem 0 0 2rem;
+
+ ${({ theme }) => theme.fonts.caption5};
+ color: ${({ theme }) => theme.colors.red}; ;
+ `,
+
+ Input: styled.input`
+ width: 100%;
+ height: 4.4rem;
+
+ padding: 1.2rem 0 1.2rem 2.4rem;
+
+ border: 0.1rem solid ${({ theme }) => theme.colors.gray300};
+ border-radius: 4.9rem;
+
+ ${({ theme }) => theme.fonts.body6};
+ color: ${({ theme }) => theme.colors.gray400};
+ `,
+
+ LoginBtn: styled.button`
+ width: 100%;
+ height: 5rem;
+
+ display: flex;
+ justify-content: center;
+ align-items: center;
+
+ margin-top: 2.4rem;
+
+ background-color: ${({ theme }) => theme.colors.bg};
+ border-radius: 5rem;
+
+ ${({ theme }) => theme.fonts.btn2};
+ color: ${({ theme }) => theme.colors.white};
+ `,
+
+ LinkWrapper: styled.ul`
+ margin: 3.9rem 0 19.3rem;
+
+ display: flex;
+ justify-content: center;
+
+ ${({ theme }) => theme.fonts.body6};
+ color: ${({ theme }) => theme.colors.gray600};
+ `,
+
+ Link: styled.li``,
+
+ Delimeter: styled.span`
+ margin: 0 1rem;
+ `,
+};
diff --git a/src/components/Login/index.tsx b/src/components/Login/index.tsx
index ac070eaf..bac142af 100644
--- a/src/components/Login/index.tsx
+++ b/src/components/Login/index.tsx
@@ -1,9 +1,13 @@
import Header from "../common/Header";
+import Footer from "../Main/Footer";
+import LoginForm from "./LoginForm";
export default function Login() {
return (
+
+
);
}
diff --git a/src/components/Main/BestPiickle/BestPiickleCard/style.ts b/src/components/Main/BestPiickle/BestPiickleCard/style.ts
index b463c46e..fcafcce0 100644
--- a/src/components/Main/BestPiickle/BestPiickleCard/style.ts
+++ b/src/components/Main/BestPiickle/BestPiickleCard/style.ts
@@ -25,7 +25,7 @@ export const St = {
`,
Content: styled.p`
- ${({ theme }) => theme.fonts.caption1};
+ ${({ theme }) => theme.fonts.body1};
color: ${({ theme }) => theme.colors.black};
width: 17rem;
diff --git a/src/components/Main/CTABtn/index.tsx b/src/components/Main/CTABtn/index.tsx
index b6b967b0..964fd66f 100644
--- a/src/components/Main/CTABtn/index.tsx
+++ b/src/components/Main/CTABtn/index.tsx
@@ -1,5 +1,9 @@
import { St } from "./style";
export default function CTABtn() {
- return 대화주제 추천 바로가기;
+ return (
+
+ 대화주제 추천 바로가기
+
+ );
}
diff --git a/src/components/Main/Footer/style.ts b/src/components/Main/Footer/style.ts
index 3d858ca4..3f5b3f69 100644
--- a/src/components/Main/Footer/style.ts
+++ b/src/components/Main/Footer/style.ts
@@ -26,12 +26,9 @@ export const St = {
BasicInfoTitle: styled.li`
height: 1.7rem;
+ ${({ theme }) => theme.fonts.footer1};
+
font-family: "Pretendard";
- font-style: normal;
- font-weight: 600;
- font-size: 1.2rem;
- line-height: 140%;
- letter-spacing: -0.04rem;
color: ${({ theme }) => theme.colors.bg};
`,
@@ -51,12 +48,7 @@ export const St = {
height: 1.7rem;
margin-bottom: 0.3rem;
- font-family: "Pretendard";
- font-style: normal;
- font-weight: 600;
- font-size: 1.2rem;
- line-height: 140%;
- letter-spacing: -0.04rem;
+ ${({ theme }) => theme.fonts.footer1};
color: ${({ theme }) => theme.colors.bg};
`,
@@ -65,7 +57,7 @@ export const St = {
height: 1.7rem;
margin-bottom: 2rem;
- ${({ theme }) => theme.fonts.btn3};
+ ${({ theme }) => theme.fonts.footer2};
color: ${({ theme }) => theme.colors.gray600};
`,
};
diff --git a/src/components/Main/MenuBar/style.ts b/src/components/Main/MenuBar/style.ts
new file mode 100644
index 00000000..4c6a66ad
--- /dev/null
+++ b/src/components/Main/MenuBar/style.ts
@@ -0,0 +1,134 @@
+import styled from "styled-components";
+
+import { IcCloseBtn } from "../../../asset/icon";
+
+export const St = {
+ Root: styled.section`
+ background-color: ${({ theme }) => theme.colors.gray600};
+
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+
+ z-index: 10;
+ `,
+
+ ContentsContainer: styled.section`
+ width: 28.8rem;
+ height: 100vh;
+ float: right;
+
+ background-color: ${({ theme }) => theme.colors.white};
+
+ padding-top: 10.1rem;
+ padding-left: 1.8rem;
+ `,
+
+ CloseBtnContainer: styled.div`
+ float: right;
+ margin-right: 1.6rem;
+ `,
+
+ ProfileContainer: styled.article`
+ border-bottom: solid 0.2rem #f1f1f1;
+
+ padding-bottom: 3.6rem;
+ `,
+
+ WelcomeText: styled.h1`
+ ${({ theme }) => theme.fonts.body1};
+ font-size: 24px;
+ line-height: 3.36rem;
+
+ color: ${({ theme }) => theme.colors.bg};
+
+ margin-top: 1.6rem;
+ `,
+
+ DescriptText: styled.h2`
+ ${({ theme }) => theme.fonts.body12};
+ font-size: 16px;
+
+ color: ${({ theme }) => theme.colors.gray600};
+
+ margin-top: 0.4rem;
+ `,
+
+ BtnContainer: styled.div`
+ display: flex;
+ align-items: center;
+
+ color: ${({ theme }) => theme.colors.gray600};
+
+ margin-top: 3.6rem;
+ `,
+
+ MyProfileBtn: styled.button`
+ ${({ theme }) => theme.fonts.btn2};
+
+ color: ${({ theme }) => theme.colors.gray600};
+
+ border-right: solid 0.15rem #606060;
+
+ padding-right: 1rem;
+ `,
+
+ LogoutBtn: styled.button`
+ ${({ theme }) => theme.fonts.body12};
+ color: ${({ theme }) => theme.colors.gray600};
+
+ padding-left: 1rem;
+ `,
+
+ RecomendContainer: styled.article`
+ padding-top: 3.6rem;
+ `,
+
+ TitleText: styled.h1`
+ ${({ theme }) => theme.fonts.caption1};
+
+ color: ${({ theme }) => theme.colors.bg};
+ `,
+
+ MoodPiickleContainer: styled.div`
+ display: flex;
+
+ margin-top: 2.4rem;
+ `,
+
+ MoodPiickleText: styled.h2`
+ ${({ theme }) => theme.fonts.caption1};
+
+ color: ${({ theme }) => theme.colors.bg};
+
+ margin-right: 1.2rem;
+ `,
+
+ GoMoodPiickleBtn: styled.button`
+ ${({ theme }) => theme.fonts.body12};
+
+ color: ${({ theme }) => theme.colors.gray600};
+ `,
+
+ PiickleMeContainer: styled.div`
+ display: flex;
+
+ margin-top: 2.4rem;
+ `,
+
+ PiickleMeText: styled.h2`
+ ${({ theme }) => theme.fonts.caption1};
+
+ color: ${({ theme }) => theme.colors.bg};
+
+ margin-right: 1.2rem;
+ `,
+
+ GoPiickleMeBtn: styled.button`
+ ${({ theme }) => theme.fonts.body12};
+
+ color: ${({ theme }) => theme.colors.gray600};
+ `,
+};
diff --git a/src/components/Main/PiickleMe/index.tsx b/src/components/Main/PiickleMe/index.tsx
index 3c99c761..4e62ab10 100644
--- a/src/components/Main/PiickleMe/index.tsx
+++ b/src/components/Main/PiickleMe/index.tsx
@@ -37,8 +37,8 @@ export default function PiickleMe() {
- {representVoteData.contentText}
- {representVoteData.discription}
+ {representVoteData.contentText}
+ {representVoteData.discription}
투표하기
{voteData.map((element) => {
@@ -47,8 +47,7 @@ export default function PiickleMe() {
{element.profileImg}
- {element.contentText.slice(0, 18)}...
- {element.subText}
+ {element.contentText.slice(0, 18)}...
{element.voteBtn}
diff --git a/src/components/Main/PiickleMe/style.ts b/src/components/Main/PiickleMe/style.ts
index 06f94318..ff2e3eca 100644
--- a/src/components/Main/PiickleMe/style.ts
+++ b/src/components/Main/PiickleMe/style.ts
@@ -37,20 +37,29 @@ export const St = {
flex-direction: column;
`,
- VoteContentText: styled.p<{ isFirst: boolean }>`
+ RepresentVoteContentText: styled.p`
line-height: 1.4;
margin-bottom: 0.4rem;
- ${({ isFirst, theme }) => (isFirst ? theme.fonts.caption1 : theme.fonts.body2)};
+ ${({ theme }) => theme.fonts.body3};
+ color: ${({ theme }) => theme.colors.gray800};
`,
- VoteContentSubText: styled.p<{ isFirst: boolean }>`
- ${({ theme }) => theme.fonts.body2}
+ RepresentVoteContentSubText: styled.p`
+ ${({ theme }) => theme.fonts.caption3}
color: ${({ theme }) => theme.colors.gray600};
`,
+ VoteContentText: styled.p`
+ line-height: 1.4;
+
+ margin-bottom: 0.4rem;
+
+ ${({ theme }) => theme.fonts.body4};
+ `,
+
RepresentGoVoteBtn: styled.button`
width: 7.6rem;
height: 2.8rem;
diff --git a/src/components/Main/common/.keep b/src/components/Main/common/.keep
deleted file mode 100644
index e69de29b..00000000
diff --git a/src/components/common/Header/index.tsx b/src/components/common/Header/index.tsx
index 4bb047e9..bec71fe6 100644
--- a/src/components/common/Header/index.tsx
+++ b/src/components/common/Header/index.tsx
@@ -1,17 +1,31 @@
import { Link, useLocation } from "react-router-dom";
+import { useRecoilState } from "recoil";
import { IcHamburger, IcLogo } from "../../../asset/icon";
+import { activeState } from "../../../core/atom/menuBar";
+import MenuBar from "../MenuBar";
import { St } from "./style";
export default function Header() {
const { pathname } = useLocation();
+ const [isActive, setIsActive] = useRecoilState(activeState);
- return (
-
-
-
-
-
-
- );
+ const handleModal = () => {
+ setIsActive(!isActive);
+ };
+
+ if (isActive) {
+ return ;
+ } else {
+ return (
+
+
+
+
+
+
+
+
+ );
+ }
}
diff --git a/src/components/common/Header/style.ts b/src/components/common/Header/style.ts
index bb694102..8971e93c 100644
--- a/src/components/common/Header/style.ts
+++ b/src/components/common/Header/style.ts
@@ -18,6 +18,8 @@ export const St = {
z-index: 10;
`,
+ HamburgerContainer: styled.div<{ isClicked: boolean }>``,
+
LogoTitle: styled.h1`
${({ theme }) => theme.visually_hidden};
`,
diff --git a/src/components/common/MenuBar/index.tsx b/src/components/common/MenuBar/index.tsx
new file mode 100644
index 00000000..2d198bd4
--- /dev/null
+++ b/src/components/common/MenuBar/index.tsx
@@ -0,0 +1,49 @@
+import { useSetRecoilState } from "recoil";
+
+import { IcCloseBtn, IcMenuBarImg } from "../../../asset/icon";
+import { activeState } from "../../../core/atom/menuBar";
+import { St, StContentsContainer } from "./style";
+
+const MenuBarDummy = {
+ profileImg: ,
+ name: "윤지영",
+};
+
+export default function MenuBar() {
+ const setIsActive = useSetRecoilState(activeState);
+
+ return (
+
+
+ setIsActive((prevState) => !prevState)}>
+
+
+
+
+ {MenuBarDummy.profileImg}
+
+ {MenuBarDummy.name}님,
+ 안녕하세요
+
+ 오늘도 피클과 함께 대화 나눠요
+
+ My 프로필
+ 로그아웃
+
+
+
+ 대화 주제 추천 카드
+
+ Mood Piickles
+ 카테고리별 대화주제 추천
+
+
+ Piickle Me
+ 진행중인 투표
+
+
+
+
+
+ );
+}
diff --git a/src/components/common/MenuBar/style.ts b/src/components/common/MenuBar/style.ts
new file mode 100644
index 00000000..5e649cc3
--- /dev/null
+++ b/src/components/common/MenuBar/style.ts
@@ -0,0 +1,155 @@
+import styled, { keyframes } from "styled-components";
+
+export const St = {
+ Root: styled.section`
+ position: absolute;
+ top: 0;
+ right: 0;
+ left: 0;
+ height: 100vh;
+
+ background-color: ${({ theme }) => theme.colors.gray600};
+
+ z-index: 10;
+ `,
+
+ Contents: styled.div``,
+
+ CloseBtnContainer: styled.div`
+ position: absolute;
+ top: 1.9rem;
+ right: 1.6rem;
+ `,
+
+ ProfileContainer: styled.article`
+ border-bottom: solid 0.2rem #f1f1f1;
+
+ padding-bottom: 3.6rem;
+ `,
+
+ WelcomeText: styled.h1`
+ ${({ theme }) => theme.fonts.body1};
+ font-size: 24px;
+ line-height: 3.36rem;
+
+ color: ${({ theme }) => theme.colors.bg};
+
+ margin-top: 1.6rem;
+ `,
+
+ DescriptText: styled.h2`
+ ${({ theme }) => theme.fonts.body12};
+ font-size: 16px;
+
+ color: ${({ theme }) => theme.colors.gray600};
+
+ margin-top: 0.4rem;
+ `,
+
+ BtnContainer: styled.div`
+ display: flex;
+ align-items: center;
+
+ color: ${({ theme }) => theme.colors.gray600};
+
+ margin-top: 3.6rem;
+ `,
+
+ MyProfileBtn: styled.button`
+ ${({ theme }) => theme.fonts.btn2};
+
+ color: ${({ theme }) => theme.colors.gray600};
+
+ border-right: solid 0.15rem ${({ theme }) => theme.colors.gray600};
+
+ padding-right: 1rem;
+ `,
+
+ LogoutBtn: styled.button`
+ ${({ theme }) => theme.fonts.btn2};
+ color: ${({ theme }) => theme.colors.gray600};
+
+ padding-left: 1rem;
+ `,
+
+ RecomendContainer: styled.article`
+ padding-top: 3.6rem;
+ `,
+
+ TitleText: styled.h1`
+ ${({ theme }) => theme.fonts.body1};
+
+ color: ${({ theme }) => theme.colors.bg};
+ `,
+
+ MoodPiickleContainer: styled.div`
+ display: flex;
+
+ margin-top: 2.4rem;
+ `,
+
+ MoodPiickleText: styled.h2`
+ ${({ theme }) => theme.fonts.body1};
+
+ color: ${({ theme }) => theme.colors.bg};
+
+ margin-right: 1.2rem;
+ `,
+
+ GoMoodPiickleBtn: styled.button`
+ ${({ theme }) => theme.fonts.body4};
+
+ color: ${({ theme }) => theme.colors.gray600};
+ `,
+
+ PiickleMeContainer: styled.div`
+ display: flex;
+
+ margin-top: 2.4rem;
+ `,
+
+ PiickleMeText: styled.h2`
+ ${({ theme }) => theme.fonts.body1};
+
+ color: ${({ theme }) => theme.colors.bg};
+
+ margin-right: 1.2rem;
+ `,
+
+ GoPiickleMeBtn: styled.button`
+ ${({ theme }) => theme.fonts.body4};
+
+ color: ${({ theme }) => theme.colors.gray600};
+ `,
+};
+
+const ani = keyframes`
+ 0% {
+ width: 0;
+ opacity: 0;
+ }
+ 50% {
+ width: 28.8rem;
+ }
+ 100% {
+ opacity: 1;
+ }
+ `;
+
+export const StContentsContainer = styled.section`
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+
+ position: relative;
+
+ width: 28.8rem;
+ height: 100vh;
+ float: right;
+
+ background-color: ${({ theme }) => theme.colors.white};
+
+ padding-left: 1.8rem;
+
+ animation: ${ani} 0.8s ease-in-out;
+`;
diff --git a/src/core/atom/menuBar.ts b/src/core/atom/menuBar.ts
new file mode 100644
index 00000000..926c37d1
--- /dev/null
+++ b/src/core/atom/menuBar.ts
@@ -0,0 +1,10 @@
+import { atom } from "recoil";
+
+enum StateType {
+ ACTIVE_STATE = "activestate",
+}
+
+export const activeState = atom({
+ key: StateType.ACTIVE_STATE,
+ default: false,
+});
diff --git a/src/index.tsx b/src/index.tsx
index 90fa3617..516ceef1 100644
--- a/src/index.tsx
+++ b/src/index.tsx
@@ -1,5 +1,6 @@
import React from "react";
import ReactDOM from "react-dom/client";
+import { RecoilRoot } from "recoil";
import { ThemeProvider } from "styled-components";
import App from "./App";
@@ -14,9 +15,11 @@ if (process.env.NODE_ENV === "development") {
const root = ReactDOM.createRoot(document.getElementById("root") as HTMLElement);
root.render(
-
-
-
-
+
+
+
+
+
+
,
);
diff --git a/src/style/modalStyle.ts b/src/style/modalStyle.ts
new file mode 100644
index 00000000..5ba98228
--- /dev/null
+++ b/src/style/modalStyle.ts
@@ -0,0 +1,10 @@
+import { createGlobalStyle } from "styled-components";
+
+export const ModalStyle = createGlobalStyle`
+ body {
+ overflow: hidden;
+ }
+ body * {
+ touch-action: none;
+ }
+`;
diff --git a/src/style/theme.ts b/src/style/theme.ts
index 02e3c59e..b9524ffb 100644
--- a/src/style/theme.ts
+++ b/src/style/theme.ts
@@ -1,9 +1,13 @@
const colors = {
+ red: "#FF0000",
green: "#19BE7E",
sub_green: "#DBFFF1",
- sub_green1: "#B5F2DB",
- sub_green2: "#7DE0B9",
+ sub_green1: "#7DE0B9",
+ sub_green2: "#B5F2DB",
+ sub_green3: "#DBFFF1",
+ sub_green4: "rgba(181, 242, 219, 0.7)",
sub_green5: "#EEF5F3",
+ bg: "#2A2A2A",
black: "#000000",
white: "#FFFFFF",
gray100: "#F1F1F1",
@@ -15,7 +19,6 @@ const colors = {
gray700: "#404040",
gray800: "#202020",
caption2_color: "#575757",
- bg: "#2A2A2A",
sub1: "#F2F25A",
sub3: "#706E2B",
sub4: "#F2EFCE",
@@ -28,11 +31,12 @@ interface Font {
weight: 300 | 400 | 500 | 600 | 700;
size: number;
lineHeight: number;
+ notoSans?: boolean;
}
-function FONT({ weight, size, lineHeight }: Font): string {
+function FONT({ weight, size, lineHeight, notoSans }: Font): string {
return `
- font-family: "Pretendard";
+ font-family: ${notoSans ? "Noto Sans" : "Pretendard"};
font-weight: ${weight};
font-size: ${size}rem;
line-height: ${lineHeight}%;
@@ -42,7 +46,7 @@ function FONT({ weight, size, lineHeight }: Font): string {
const fonts = {
h1: FONT({ weight: 600, size: 2, lineHeight: 130 }),
- h2: FONT({ weight: 400, size: 1.4, lineHeight: 130 }),
+ h2: FONT({ weight: 400, size: 1.2, lineHeight: 140 }),
body1: FONT({ weight: 600, size: 1.6, lineHeight: 140 }),
body2: FONT({ weight: 400, size: 1.2, lineHeight: 140 }),
body3: FONT({ weight: 700, size: 2.4, lineHeight: 140 }),
@@ -54,6 +58,28 @@ const fonts = {
btn1: FONT({ weight: 400, size: 1.4, lineHeight: 140 }),
btn2: FONT({ weight: 400, size: 1.2, lineHeight: 150 }),
btn3: FONT({ weight: 300, size: 1.6, lineHeight: 224 }),
+ body2: FONT({ weight: 700, size: 2.4, lineHeight: 140 }),
+ body3: FONT({ weight: 600, size: 1.5, lineHeight: 140 }),
+ body4: FONT({ weight: 400, size: 1.2, lineHeight: 140 }),
+ body5: FONT({ weight: 700, size: 2.4, lineHeight: 140 }),
+ body6: FONT({ weight: 400, size: 1.4, lineHeight: 140 }),
+ body7: FONT({ weight: 500, size: 1.6, lineHeight: 140 }),
+ body8: FONT({ weight: 400, size: 1.2, lineHeight: 140, notoSans: true }),
+ body9: FONT({ weight: 600, size: 2, lineHeight: 130 }),
+ body10: FONT({ weight: 600, size: 2.4, lineHeight: 130 }),
+ body11: FONT({ weight: 400, size: 1.5, lineHeight: 140 }),
+ body12: FONT({ weight: 400, size: 1.6, lineHeight: 140 }),
+ caption1: FONT({ weight: 400, size: 1, lineHeight: 80 }),
+ caption2: FONT({ weight: 400, size: 1, lineHeight: 130 }),
+ caption3: FONT({ weight: 400, size: 1.2, lineHeight: 140 }),
+ caption4: FONT({ weight: 400, size: 1.2, lineHeight: 140 }),
+ caption5: FONT({ weight: 400, size: 1.1, lineHeight: 140 }),
+ btn1: FONT({ weight: 400, size: 1.4, lineHeight: 140 }),
+ btn2: FONT({ weight: 400, size: 1.2, lineHeight: 130 }),
+ btn3: FONT({ weight: 300, size: 1.6, lineHeight: 140 }),
+ btn4: FONT({ weight: 300, size: 1, lineHeight: 140 }),
+ footer1: FONT({ weight: 600, size: 1.2, lineHeight: 140 }),
+ footer2: FONT({ weight: 400, size: 1.2, lineHeight: 140 }),
} as const;
const theme = {
diff --git a/yarn.lock b/yarn.lock
index a33fa899..895e9fda 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -7916,6 +7916,11 @@ gzip-size@^6.0.0:
dependencies:
duplexer "^0.1.2"
+hamt_plus@1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/hamt_plus/-/hamt_plus-1.0.2.tgz#e21c252968c7e33b20f6a1b094cd85787a265601"
+ integrity sha512-t2JXKaehnMb9paaYA7J0BX8QQAY8lwfQ9Gjf4pg/mk4krt+cmwmU652HOoWonf+7+EQV97ARPMhhVgU1ra2GhA==
+
handle-thing@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e"
@@ -12666,6 +12671,13 @@ readdirp@~3.6.0:
dependencies:
picomatch "^2.2.1"
+recoil@^0.7.4:
+ version "0.7.4"
+ resolved "https://registry.yarnpkg.com/recoil/-/recoil-0.7.4.tgz#d6508fa656d9c93e66fdf334e1f723a9e98801cf"
+ integrity sha512-sCXvQGMfSprkNU4ZRkJV4B0qFQSURJMgsICqY1952WRlg66NMwYqi6n67vhnhn0qw4zHU1gHXJuMvRDaiRNFZw==
+ dependencies:
+ hamt_plus "1.0.2"
+
recursive-readdir@^2.2.2:
version "2.2.2"
resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f"