diff --git a/.github/workflows/delete-merged-branch-config.yml b/.github/workflows/delete-merged-branch-config.yml
new file mode 100644
index 000000000..d54933615
--- /dev/null
+++ b/.github/workflows/delete-merged-branch-config.yml
@@ -0,0 +1,14 @@
+name: delete branch on close pr
+
+on:
+ pull_request:
+ types: [closed]
+
+jobs:
+ delete-branch:
+ runs-on: ubuntu-latest
+ steps:
+ - name: delete branch
+ uses: SvanBoxel/delete-merged-branch@main
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/2-Weekly-Mission/.gitignore b/2-Weekly-Mission/.gitignore
new file mode 100644
index 000000000..722d5e71d
--- /dev/null
+++ b/2-Weekly-Mission/.gitignore
@@ -0,0 +1 @@
+.vscode
diff --git a/2-Weekly-Mission/faq.html b/2-Weekly-Mission/faq.html
new file mode 100644
index 000000000..6612ae103
--- /dev/null
+++ b/2-Weekly-Mission/faq.html
@@ -0,0 +1,7 @@
+
+
+
+
+ FAQ
+
+
diff --git a/2-Weekly-Mission/folder.html b/2-Weekly-Mission/folder.html
new file mode 100644
index 000000000..e69de29bb
diff --git a/2-Weekly-Mission/images/99FE484C5C3451F218 1.svg b/2-Weekly-Mission/images/99FE484C5C3451F218 1.svg
new file mode 100644
index 000000000..7a6062bc6
--- /dev/null
+++ b/2-Weekly-Mission/images/99FE484C5C3451F218 1.svg
@@ -0,0 +1,13 @@
+
diff --git a/2-Weekly-Mission/images/Linkbrary.png b/2-Weekly-Mission/images/Linkbrary.png
new file mode 100644
index 000000000..a43c2cc9d
Binary files /dev/null and b/2-Weekly-Mission/images/Linkbrary.png differ
diff --git a/2-Weekly-Mission/images/eye-off.png b/2-Weekly-Mission/images/eye-off.png
new file mode 100644
index 000000000..82183b351
Binary files /dev/null and b/2-Weekly-Mission/images/eye-off.png differ
diff --git a/2-Weekly-Mission/images/eye-off.svg b/2-Weekly-Mission/images/eye-off.svg
new file mode 100644
index 000000000..bec50d66f
--- /dev/null
+++ b/2-Weekly-Mission/images/eye-off.svg
@@ -0,0 +1,6 @@
+
diff --git a/2-Weekly-Mission/images/eye-on.png b/2-Weekly-Mission/images/eye-on.png
new file mode 100644
index 000000000..c74e06a94
Binary files /dev/null and b/2-Weekly-Mission/images/eye-on.png differ
diff --git a/2-Weekly-Mission/images/facebook.svg b/2-Weekly-Mission/images/facebook.svg
new file mode 100644
index 000000000..b9c9d4939
--- /dev/null
+++ b/2-Weekly-Mission/images/facebook.svg
@@ -0,0 +1,3 @@
+
diff --git a/2-Weekly-Mission/images/google.png b/2-Weekly-Mission/images/google.png
new file mode 100644
index 000000000..e49ff34a3
Binary files /dev/null and b/2-Weekly-Mission/images/google.png differ
diff --git a/2-Weekly-Mission/images/hero.png b/2-Weekly-Mission/images/hero.png
new file mode 100644
index 000000000..11dc528fb
Binary files /dev/null and b/2-Weekly-Mission/images/hero.png differ
diff --git a/2-Weekly-Mission/images/image1.png b/2-Weekly-Mission/images/image1.png
new file mode 100644
index 000000000..f6355852b
Binary files /dev/null and b/2-Weekly-Mission/images/image1.png differ
diff --git a/2-Weekly-Mission/images/image2.png b/2-Weekly-Mission/images/image2.png
new file mode 100644
index 000000000..b9a3c674a
Binary files /dev/null and b/2-Weekly-Mission/images/image2.png differ
diff --git a/2-Weekly-Mission/images/image3.png b/2-Weekly-Mission/images/image3.png
new file mode 100644
index 000000000..986a39679
Binary files /dev/null and b/2-Weekly-Mission/images/image3.png differ
diff --git a/2-Weekly-Mission/images/image4.png b/2-Weekly-Mission/images/image4.png
new file mode 100644
index 000000000..762bdc960
Binary files /dev/null and b/2-Weekly-Mission/images/image4.png differ
diff --git a/2-Weekly-Mission/images/instagram.svg b/2-Weekly-Mission/images/instagram.svg
new file mode 100644
index 000000000..0b9337b07
--- /dev/null
+++ b/2-Weekly-Mission/images/instagram.svg
@@ -0,0 +1,3 @@
+
diff --git a/2-Weekly-Mission/images/kakao.svg b/2-Weekly-Mission/images/kakao.svg
new file mode 100644
index 000000000..778fe9461
--- /dev/null
+++ b/2-Weekly-Mission/images/kakao.svg
@@ -0,0 +1,13 @@
+
diff --git a/2-Weekly-Mission/images/logo.svg b/2-Weekly-Mission/images/logo.svg
new file mode 100644
index 000000000..282022090
--- /dev/null
+++ b/2-Weekly-Mission/images/logo.svg
@@ -0,0 +1,11 @@
+
diff --git a/2-Weekly-Mission/images/twitter.svg b/2-Weekly-Mission/images/twitter.svg
new file mode 100644
index 000000000..14a6069a1
--- /dev/null
+++ b/2-Weekly-Mission/images/twitter.svg
@@ -0,0 +1,3 @@
+
diff --git a/2-Weekly-Mission/images/youtube.svg b/2-Weekly-Mission/images/youtube.svg
new file mode 100644
index 000000000..28ed0e8ba
--- /dev/null
+++ b/2-Weekly-Mission/images/youtube.svg
@@ -0,0 +1,10 @@
+
diff --git a/2-Weekly-Mission/index.html b/2-Weekly-Mission/index.html
new file mode 100644
index 000000000..e8019fb11
--- /dev/null
+++ b/2-Weekly-Mission/index.html
@@ -0,0 +1,131 @@
+
+
+
+
+ Linkbrary
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 원하는 링크를 저장하세요
+
+
+ 나중에 읽고 싶은 글, 다시 보고 싶은 영상,
+
+ 사고 싶은 옷, 기억하고 싶은 모든 것을
+
+ 한 공간에 저장하세요.
+
+
+
+
+
+ 링크를 폴더로
+ 관리하세요
+
+
+ 나만의 폴더를 무제한으로 만들고
+
+ 다양하게 활용할 수 있습니다.
+
+
+
+
+
+ 저장한 링크를
+ 공유해 보세요
+
+
+ 여러 링크를 폴더에 담고 공유할 수 있습니다. 가족, 친구, 동료들에게 쉽고 빠르게 링크를
+ 공유해 보세요.
+
+
+
+
+
+ 저장한 링크를
+ 검색해 보세요
+
+ 중요한 정보들을 검색으로 쉽게 찾아보세요.
+
+
+
+
+
+
diff --git a/2-Weekly-Mission/privacy.html b/2-Weekly-Mission/privacy.html
new file mode 100644
index 000000000..abf71aaaf
--- /dev/null
+++ b/2-Weekly-Mission/privacy.html
@@ -0,0 +1,7 @@
+
+
+
+
+ Privacy
+
+
diff --git a/2-Weekly-Mission/signin.html b/2-Weekly-Mission/signin.html
new file mode 100644
index 000000000..e317d7ca9
--- /dev/null
+++ b/2-Weekly-Mission/signin.html
@@ -0,0 +1,65 @@
+
+
+
+
+ 로그인
+
+
+
+
+
+
+
+
+
+
diff --git a/2-Weekly-Mission/signin.js b/2-Weekly-Mission/signin.js
new file mode 100644
index 000000000..1c4ec740f
--- /dev/null
+++ b/2-Weekly-Mission/signin.js
@@ -0,0 +1,63 @@
+/** 이메일 */
+const signInputBox = document.querySelector(".sign-input-box");
+const inputUserEmail = document.querySelector("#sign-email");
+const errorMessageEmail = document.querySelector(".error-message-email");
+
+function validateEmail() {
+ const userEmail = inputUserEmail.value;
+ if (userEmail === "") {
+ errorMessageEmail.textContent = "이메일을 입력해주세요.";
+ errorMessageEmail.style.color = "red";
+ errorMessageEmail.style.display = "block";
+ inputUserEmail.style.border = "1px solid var(--linkbrary-red, #FF5B56)";
+ } else if (!isValidEmail()) {
+ errorMessageEmail.textContent = "올바른 이메일 주소가 아닙니다.";
+ errorMessageEmail.style.color = "red";
+ errorMessageEmail.style.display = "block";
+ inputUserEmail.style.border = "1px solid var(--linkbrary-red, #FF5B56)";
+ } else {
+ errorMessageEmail.style.display = "none";
+ inputUserEmail.style.border = "1px solid var(--gray20)";
+ }
+}
+
+function isValidEmail() {
+ const regExp =
+ /^[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*\.[a-zA-Z]{2,3}$/i;
+ return regExp.test(inputUserEmail.value);
+}
+
+inputUserEmail.addEventListener("focusout", validateEmail);
+
+/** 비밀번호 */
+const inputUserPassword = document.querySelector("#sign-password");
+const errorMessagePassword = document.querySelector(".error-message-password");
+const eyeButton = document.querySelector(".eye-button");
+
+function validatePassword() {
+ const userPassword = inputUserPassword.value;
+ if (userPassword === "") {
+ errorMessagePassword.textContent = "비밀번호를 입력해주세요.";
+ errorMessagePassword.style.color = "red";
+ errorMessagePassword.style.display = "block";
+ inputUserPassword.style.border = "1px solid var(--linkbrary-red, #FF5B56)";
+ eyeButton.style.height = "6.1rem";
+ } else if (!strongPassword(userPassword)) {
+ errorMessagePassword.textContent =
+ "비밀번호는 영문, 숫자 조합 8자 이상 입력해 주세요.";
+ errorMessagePassword.style.color = "red";
+ errorMessagePassword.style.display = "block";
+ inputUserPassword.style.border = "1px solid var(--linkbrary-red, #FF5B56)";
+ eyeButton.style.height = "6.1rem";
+ } else {
+ errorMessagePassword.style.display = "none";
+ eyeButton.style.height = "1.6rem";
+ inputUserPassword.style.border = "1px solid var(--gray20)";
+ }
+}
+
+function strongPassword(str) {
+ return /^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d@$!%*#?&]{8,}$/.test(str);
+}
+
+inputUserPassword.addEventListener("focusout", validatePassword);
diff --git a/2-Weekly-Mission/signup.html b/2-Weekly-Mission/signup.html
new file mode 100644
index 000000000..e6587b46b
--- /dev/null
+++ b/2-Weekly-Mission/signup.html
@@ -0,0 +1,73 @@
+
+
+
+
+ 회원가입
+
+
+
+
+
+
+
+
+
+
diff --git a/2-Weekly-Mission/signup.js b/2-Weekly-Mission/signup.js
new file mode 100644
index 000000000..8b1fbc0a1
--- /dev/null
+++ b/2-Weekly-Mission/signup.js
@@ -0,0 +1,94 @@
+/** 이메일 */
+const signInputBox = document.querySelector(".sign-input-box");
+const inputUserEmail = document.querySelector("#sign-email");
+const errorMessageEmail = document.querySelector(".error-message-email");
+
+function validateEmail() {
+ const userEmail = inputUserEmail.value;
+ if (userEmail === "") {
+ errorMessageEmail.textContent = "이메일을 입력해주세요.";
+ errorMessageEmail.style.color = "red";
+ errorMessageEmail.style.display = "block";
+ inputUserEmail.style.border = "1px solid var(--linkbrary-red, #FF5B56)";
+ return noneMessageEmail;
+ } else if (!isValidEmail()) {
+ errorMessageEmail.textContent = "올바른 이메일 주소가 아닙니다.";
+ errorMessageEmail.style.color = "red";
+ errorMessageEmail.style.display = "block";
+ inputUserEmail.style.border = "1px solid var(--linkbrary-red, #FF5B56)";
+ return wrongMessageEmail;
+ } else if (userEmail === "test@codeit.com") {
+ errorMessageEmail.textContent = "이미 사용 중인 이메일입니다.";
+ errorMessageEmail.style.color = "red";
+ errorMessageEmail.style.display = "block";
+ inputUserEmail.style.border = "1px solid var(--linkbrary-red, #FF5B56)";
+ } else {
+ errorMessageEmail.style.display = "none";
+ inputUserEmail.style.border = "1px solid var(--gray20)";
+ }
+}
+
+function isValidEmail() {
+ const regExp =
+ /^[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*\.[a-zA-Z]{2,3}$/i;
+ return regExp.test(inputUserEmail.value);
+}
+
+inputUserEmail.addEventListener("focusout", validateEmail);
+
+/** 비밀번호 */
+const inputUserPassword = document.querySelector("#sign-password");
+const errorMessagePassword = document.querySelector(".error-message-password");
+const eyeButton = document.querySelector(".eye-button");
+
+function validatePassword() {
+ const userPassword = inputUserPassword.value;
+ if (userPassword === "") {
+ errorMessagePassword.textContent = "비밀번호를 입력해주세요.";
+ errorMessagePassword.style.color = "red";
+ errorMessagePassword.style.display = "block";
+ inputUserPassword.style.border = "1px solid var(--linkbrary-red, #FF5B56)";
+ } else if (!strongPassword(userPassword)) {
+ errorMessagePassword.textContent =
+ "비밀번호는 영문, 숫자 조합 8자 이상 입력해 주세요.";
+ errorMessagePassword.style.color = "red";
+ errorMessagePassword.style.display = "block";
+ inputUserPassword.style.border = "1px solid var(--linkbrary-red, #FF5B56)";
+ } else {
+ errorMessagePassword.style.display = "none";
+ inputUserPassword.style.border = "1px solid var(--gray20)";
+ }
+}
+
+function strongPassword(str) {
+ return /^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d@$!%*#?&]{8,}$/.test(str);
+}
+
+inputUserPassword.addEventListener("focusout", validatePassword);
+
+/** 비밀번호 확인 */
+const inputUserPasswordAgain = document.querySelector("#sign-password-again");
+const errorMessagePasswordAgain = document.querySelector(
+ ".error-message-password-again"
+);
+
+function validatePasswordAgain() {
+ const userPasswordAgain = inputUserPasswordAgain.value;
+ if (userPasswordAgain === "") {
+ errorMessagePasswordAgain.textContent = "비밀번호를 입력해주세요.";
+ errorMessagePasswordAgain.style.color = "red";
+ errorMessagePasswordAgain.style.display = "block";
+ inputUserPassword.style.border = "1px solid var(--linkbrary-red, #FF5B56)";
+ } else if (userPasswordAgain !== inputUserPassword.value) {
+ errorMessagePasswordAgain.textContent = "비밀번호가 일치하지 않아요.";
+ errorMessagePasswordAgain.style.color = "red";
+ errorMessagePasswordAgain.style.display = "block";
+ } else {
+ errorMessagePasswordAgain.style.display = "none";
+ inputUserPasswordAgain.style.border = "1px solid var(--gray20)";
+ }
+}
+
+inputUserPasswordAgain.addEventListener("focusout", validatePasswordAgain);
+
+/** 회원가입 버튼 */
diff --git a/2-Weekly-Mission/src/colors.css b/2-Weekly-Mission/src/colors.css
new file mode 100644
index 000000000..e13967247
--- /dev/null
+++ b/2-Weekly-Mission/src/colors.css
@@ -0,0 +1,13 @@
+:root {
+ --primary: #6d6afe;
+ --red: #ff5b56;
+ --black: #111322;
+ --white: #ffffff;
+
+ --gray100: #373740;
+ --gray60: #9fa6b2;
+ --gray20: #ccd5e3;
+ --gray10: #e7effb;
+
+ --background: #f0f6ff;
+}
diff --git a/2-Weekly-Mission/src/global.css b/2-Weekly-Mission/src/global.css
new file mode 100644
index 000000000..f20ab4ae7
--- /dev/null
+++ b/2-Weekly-Mission/src/global.css
@@ -0,0 +1,2 @@
+@import "./colors.css";
+@import "./reset.css";
diff --git a/2-Weekly-Mission/src/landing.css b/2-Weekly-Mission/src/landing.css
new file mode 100644
index 000000000..5521d673c
--- /dev/null
+++ b/2-Weekly-Mission/src/landing.css
@@ -0,0 +1,337 @@
+@import "./global.css";
+
+body {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+}
+
+nav {
+ display: flex;
+ justify-content: center;
+ position: sticky;
+ top: 0;
+ width: 100%;
+ background-color: #edf7ff;
+}
+
+.gnb {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ width: 100%;
+ height: 6.3rem;
+ padding: 0 3.2rem;
+
+ @media (min-width: 768px) {
+ height: 9.4rem;
+ max-width: 86.3rem;
+ }
+
+ @media (min-width: 1200px) {
+ height: 9.4rem;
+ max-width: 192rem;
+ padding: 0 20rem;
+ }
+}
+
+.logo {
+ height: 1.6rem;
+
+ @media (min-width: 768px) {
+ height: 2.4rem;
+ }
+}
+
+header {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ width: 100%;
+ background-color: #edf7ff;
+}
+
+.hero-header {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ row-gap: 2.4rem;
+ padding: 2.8rem 3.2rem 0;
+
+ @media (min-width: 768px) {
+ padding: 3.9rem 0 0;
+ row-gap: 4rem;
+ }
+
+ @media (min-width: 1200px) {
+ padding: 7rem 0 0;
+ }
+}
+
+.cta {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ height: 3.7rem;
+ cursor: pointer;
+ background-image: linear-gradient(135deg, var(--primary) 0%, #6ae3fe 100%);
+ border-radius: 0.8rem;
+ color: #f5f5f5;
+ font-size: 1.4rem;
+ font-weight: 600;
+
+ @media (min-width: 768px) {
+ height: 5.4rem;
+ border-radius: 0.8rem;
+ font-size: 1.8rem;
+ }
+}
+
+.cta-short {
+ width: 8rem;
+
+ @media (min-width: 768px) {
+ width: 12.8rem;
+ }
+}
+
+.cta-long {
+ width: 20rem;
+
+ @media (min-width: 768px) {
+ width: 35rem;
+ }
+}
+
+.slogan {
+ width: 24rem;
+ text-align: center;
+ font-size: 3.2rem;
+ line-height: 131.25%;
+ font-weight: 700;
+
+ @media (min-width: 768px) {
+ width: 48rem;
+ font-size: 6.4rem;
+ line-height: 125%;
+ }
+
+ @media (min-width: 1200px) {
+ width: 80rem;
+ }
+}
+
+.slogan-gradient {
+ background-image: linear-gradient(119deg, var(--primary) 0%, #ff9f9f 100%);
+}
+
+.background-clip-text {
+ background-clip: text;
+ -webkit-background-clip: text;
+ color: transparent;
+}
+
+.hero-image {
+ width: 100%;
+ height: fit-content;
+ @media (min-width: 768px) {
+ width: 69.8rem;
+ height: 34.3rem;
+ }
+
+ @media (min-width: 1200px) {
+ width: 120rem;
+ height: 59rem;
+ }
+}
+
+article {
+ padding-bottom: 4rem;
+
+ @media (min-width: 768px) {
+ padding-top: 3rem;
+ padding-bottom: 12rem;
+ }
+
+ @media (min-width: 1200px) {
+ padding-top: 7rem;
+ }
+}
+
+section {
+ display: grid;
+ justify-content: center;
+ row-gap: 1.6rem;
+ width: 100%;
+ height: fit-content;
+ padding: 4rem 3.2rem;
+
+ @media (min-width: 768px) {
+ height: 41.5rem;
+ column-gap: 5.1rem;
+ row-gap: 1rem;
+ padding: 5rem 0;
+ }
+
+ @media (min-width: 1200px) {
+ height: 55rem;
+ column-gap: 15.7rem;
+ }
+}
+
+section:nth-of-type(odd) {
+ grid-template-areas:
+ "title"
+ "image"
+ "description";
+
+ @media (min-width: 768px) {
+ grid-template-areas:
+ ". image"
+ "title image"
+ "description image"
+ ". image";
+ grid-template-columns: 26.2rem 38.5rem;
+ }
+
+ @media (min-width: 1200px) {
+ grid-template-columns: 29.1rem 55rem;
+ }
+}
+
+section:nth-of-type(even) {
+ grid-template:
+ "title"
+ "image"
+ "description";
+
+ @media (min-width: 768px) {
+ grid-template-areas:
+ "image ."
+ "image title"
+ "image description"
+ "image .";
+ grid-template-columns: 38.5rem 26.2rem;
+ }
+
+ @media (min-width: 1200px) {
+ grid-template-columns: 55rem 29.1rem;
+ }
+}
+
+.title {
+ grid-area: title;
+ font-weight: 700;
+ letter-spacing: -0.03rem;
+ font-size: 2.4rem;
+
+ @media (min-width: 768px) {
+ font-size: 4.8rem;
+ line-height: 5.8rem;
+ }
+}
+
+.title-1-gradient {
+ background-image: linear-gradient(117deg, #fe8a8a 2.29%, #a4ceff 100%);
+}
+.title-2-gradient {
+ background-image: linear-gradient(304deg, #6fbaff 0%, #ffd88b 100%);
+}
+.title-3-gradient {
+ background-image: linear-gradient(133deg, #2945c7 0%, #dbe1f8 100%);
+}
+.title-4-gradient {
+ background-image: linear-gradient(310deg, #fe578f 0%, #68e8f9 100%);
+}
+
+.description {
+ grid-area: description;
+ font-size: 1.5rem;
+ font-weight: 500;
+ color: #6b6b6b;
+ line-height: 150%;
+
+ @media (min-width: 768px) {
+ font-size: 1.6rem;
+ }
+}
+
+.line-break-tablet-desktop {
+ display: none;
+
+ @media (min-width: 768px) {
+ display: inline;
+ }
+}
+
+.content-image {
+ grid-area: image;
+ width: 100%;
+ padding-top: 0.4rem;
+
+ @media (min-width: 768px) {
+ width: 38.5rem;
+ height: 31.5rem;
+ padding-top: 0;
+ }
+
+ @media (min-width: 1200px) {
+ width: 55rem;
+ height: 45rem;
+ }
+}
+
+footer {
+ display: flex;
+ justify-content: center;
+ width: 100%;
+ height: 16rem;
+ background-color: var(--black);
+}
+
+.footer-box {
+ display: grid;
+ justify-content: space-between;
+ grid-template:
+ "footer-links sns"
+ ". ." 1fr
+ "copyright .";
+ width: 100%;
+ padding: 3.2rem;
+
+ @media (min-width: 768px) {
+ display: flex;
+ justify-content: space-between;
+ grid-template: "copyright footer-links sns";
+ height: fit-content;
+ max-width: 192rem;
+ padding: 3.2rem 10.4rem 0;
+ }
+}
+
+.copyright {
+ grid-area: copyright;
+ color: #676767;
+ font-family: Arial;
+ font-size: 1.6rem;
+}
+
+.footer-links {
+ grid-area: footer-links;
+ display: flex;
+ column-gap: 3rem;
+ padding-right: 1.8rem;
+}
+
+.footer-link {
+ color: #cfcfcf;
+ font-family: Arial;
+ font-size: 1.6rem;
+}
+
+.sns {
+ grid-area: sns;
+ display: flex;
+ column-gap: 1.2rem;
+ height: 2rem;
+}
diff --git a/2-Weekly-Mission/src/reset.css b/2-Weekly-Mission/src/reset.css
new file mode 100644
index 000000000..830b517e4
--- /dev/null
+++ b/2-Weekly-Mission/src/reset.css
@@ -0,0 +1,30 @@
+/* user agent stylesheet 초기화 */
+
+* {
+ box-sizing: border-box;
+ margin: 0;
+ font-family: "Pretendard";
+ word-break: keep-all;
+}
+
+html,
+body {
+ font-size: 62.5%;
+}
+
+a {
+ color: inherit;
+ text-decoration: none;
+ cursor: pointer;
+}
+
+input:focus {
+ outline: none;
+}
+
+button {
+ border: none;
+ padding: unset;
+ background-color: unset;
+ cursor: pointer;
+}
diff --git a/2-Weekly-Mission/src/sign.css b/2-Weekly-Mission/src/sign.css
new file mode 100644
index 000000000..d28f20af2
--- /dev/null
+++ b/2-Weekly-Mission/src/sign.css
@@ -0,0 +1,179 @@
+@import "./global.css";
+
+body {
+ background-color: var(--background);
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ row-gap: 3rem;
+ padding: 12rem 3.2rem 0;
+
+ @media (min-width: 768px) {
+ padding: 20rem 0 0;
+ }
+
+ @media (min-width: 1200px) {
+ padding: 23.8rem 0 0;
+ }
+}
+
+header {
+ display: flex;
+ flex-direction: column;
+ row-gap: 1.6rem;
+}
+
+.logo-link {
+ display: flex;
+ justify-content: center;
+}
+
+.header-logo {
+ height: 3.8rem;
+}
+
+.header-message {
+ display: flex;
+ column-gap: 0.8rem;
+ font-size: 1.6rem;
+ font-weight: 400;
+ line-height: 150%;
+}
+
+.header-link {
+ height: fit-content;
+ font-size: 1.6rem;
+ font-weight: 600;
+ line-height: normal;
+ color: var(--primary);
+ border-bottom: 0.1rem solid var(--primary);
+}
+
+.sign-box {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ row-gap: 3.2rem;
+ width: 100%;
+ max-width: 40rem;
+
+ @media (min-width: 768px) {
+ width: 40rem;
+ }
+}
+
+.sign-form {
+ display: flex;
+ flex-direction: column;
+ row-gap: 3rem;
+ width: 100%;
+}
+
+.sign-inputs {
+ display: flex;
+ flex-direction: column;
+ row-gap: 2.4rem;
+}
+
+input:focus {
+ outline: 1px solid #6d6afe;
+}
+
+.sign-input-box {
+ display: flex;
+ flex-direction: column;
+ row-gap: 1.2rem;
+}
+
+.sign-password,
+#sign-password-again {
+ position: relative;
+}
+
+#sign-email,
+#sign-password {
+ font-size: 1.4rem;
+ font-weight: 400;
+}
+
+#sign-email,
+#sign-password,
+#sign-password-again {
+ padding: 1.8rem 1.5rem;
+ border-radius: 0.8rem;
+ border: 0.1rem solid var(--gray20);
+ font-size: 1.6rem;
+ line-height: 150%;
+}
+
+.error-message-email,
+.error-message-password,
+.error-message-password-again {
+ display: none;
+}
+
+.sign-input:focus {
+ border-color: var(--primary);
+}
+
+.eye-button {
+ position: absolute;
+ bottom: 2.2rem;
+ right: 1.5rem;
+ width: 1.6rem;
+ height: 1.6rem;
+}
+
+.cta {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ width: 100%;
+ height: 5.4rem;
+ background-image: linear-gradient(135deg, var(--primary) 0%, #6ae3fe 100%);
+ border-radius: 0.8rem;
+ color: #f5f5f5;
+ font-size: 1.8rem;
+ font-weight: 600;
+}
+
+.sns-box {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ width: 100%;
+ padding: 1.2rem 2.4rem;
+ border-radius: 0.8rem;
+ border: 0.1rem solid var(--gray20);
+ background-color: var(--gray10);
+}
+
+.sns-links {
+ display: flex;
+ column-gap: 1.6rem;
+}
+
+.sns-link {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ width: 4.2rem;
+ height: 4.2rem;
+ border-radius: 50%;
+}
+
+.sns-text {
+ font-size: 1.4rem;
+ font-weight: 400;
+ color: var(--gray100);
+}
+
+.google-link {
+ background-color: var(--white);
+ border: 0.1rem solid #d3d4dd;
+}
+
+.kakao-link {
+ padding-top: 0.2rem;
+ background-color: #f5e14b;
+}
diff --git a/2-Weekly-Mission/src/style.css b/2-Weekly-Mission/src/style.css
new file mode 100644
index 000000000..9a2514322
--- /dev/null
+++ b/2-Weekly-Mission/src/style.css
@@ -0,0 +1,385 @@
+* {
+ margin: 0;
+ font-family: Pretendard;
+ box-sizing: border-box;
+}
+
+
+:root {
+ --linkbrary-primary-color: #6d6afe;
+ --linkbrary-red: #ff5b56;
+ --linkbrary-black: #111322;
+ --linkbrary-white: #ffffff;
+ --linkbrary-gray-1: #3e3e43;
+ --lingkbrary-gray-2: #9fa6b2;
+ --linkbrary-gray-20: #ccd5e3;
+ --linkbrary-gray-104: #e7effb;
+ --linkbrary-bg: #f0f6ff;
+}
+
+header {
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ width: 100%;
+ background-color: #edf7ff;
+}
+
+nav {
+ display: flex;
+ justify-content: center;
+ position: fixed;
+ z-index: 1;
+ top: 0;
+ background-color: #edf7ff;
+ width: 100%;
+ max-width: 192rem;
+ height: 9.4rem;
+}
+
+.navbar {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ width: 100%;
+ padding: 2rem 20rem;
+ gap: 8px;
+}
+
+
+.hero-header {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ row-gap: 4rem;
+ padding-top: 7rem;
+ margin-top: 9.4rem;
+}
+
+.break {
+ display: none;
+}
+
+.cta {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ height: 5.4rem;
+ cursor: pointer;
+ background-image: linear-gradient(135deg, #6d6afe 0%, #6ae3fe 100%);
+ border-radius: 0.8rem;
+ color: #f5f5f5;
+ font-size: 1.8rem;
+ font-weight: 600;
+}
+
+.cta-short {
+ width: 12.8rem;
+}
+
+.cta-long {
+ width: 35rem;
+}
+
+.slogan {
+ text-align: center;
+ font-size: 6.4rem;
+ font-weight: 700;
+ line-height: 8rem;
+}
+
+.slogan-gradient {
+ background-image: linear-gradient(119deg, #6d6afe 0%, #ff9f9f 100%);
+}
+
+.background-clip-text {
+ background-clip: text;
+ -webkit-background-clip: text;
+ color: transparent;
+}
+
+.hero-image {
+ width: 120rem;
+ height: 59rem;
+}
+
+article {
+ padding-top: 7rem;
+ padding-bottom: 12rem;
+}
+
+section {
+ display: grid;
+ justify-content: center;
+ column-gap: 15.7rem;
+ row-gap: 1rem;
+ width: 100%;
+ height: 55rem;
+ padding: 50px 0;
+}
+
+
+section:nth-of-type(odd) {
+ grid-template:
+ ". image"
+ "title image"
+ "description image"
+ ". image"
+ /291px 55rem;
+}
+
+section:nth-of-type(even) {
+ grid-template:
+ "image ."
+ "image title"
+ "image description"
+ "image ."
+ /550px 29.1rem;
+}
+
+.title {
+ grid-area: title;
+ font-size: 48px;
+ font-weight: 700;
+ line-height: 5.8rem;
+ letter-spacing: -0.03rem;
+}
+
+.title-1-gradient {
+ background-image: linear-gradient(117deg, #fe8a8a 2.29%, #a4ceff 100%);
+}
+
+.title-2-gradient {
+ background-image: linear-gradient(304deg, #6fbaff 0%, #ffd88b 100%);
+}
+
+.title-3-gradient {
+ background-image: linear-gradient(133deg, #2945c7 0%, #dbe1f8 100%);
+}
+
+.title-4-gradient {
+ background-image: linear-gradient(310deg, #fe578f 0%, #68e8f9 100%);
+}
+
+.description {
+ grid-area: description;
+ font-size: 16px;
+ font-weight: 500;
+ color: #6b6b6b;
+ line-height: 150%;
+}
+
+.content-image {
+ grid-area: image;
+ width: 55rem;
+ height: 45rem;
+}
+
+footer {
+ display: flex;
+ justify-content: center;
+ width: 100%;
+ height: 16rem;
+ padding-top: 3.2rem;
+ background-color: #111322;
+}
+
+.footer-box {
+ display: flex;
+ justify-content: space-between;
+ width: 100%;
+ max-width: 192rem;
+ height: fit-content;
+ padding: 0 10.4rem;
+}
+
+.copyright {
+ color: #676767;
+ font-family: Arial;
+ font-size: 1.6rem;
+}
+
+.footer-links {
+ display: flex;
+ column-gap: 3rem;
+ padding-right: 1.8rem;
+}
+
+.footer-link {
+ color: #cfcfcf;
+ font-family: Arial;
+ font-size: 1.6rem;
+}
+
+.sns {
+ display: flex;
+ column-gap: 1.2rem;
+ height: 2rem;
+}
+
+
+
+
+/* Tablet */
+@media (max-width: 1200px) {
+
+ .navbar {
+ width: 799px;
+ padding: 13px 32px;
+ }
+
+ .hero-header {
+ width: 100%;
+ height: auto;
+ /* padding: 0 32px; */
+ }
+
+ .hero-header>img {
+ width: 100%;
+ height: 100%;
+ padding: 0 32px;
+ }
+
+ article {
+ padding-top: 0;
+ padding-bottom: 4rem;
+ }
+
+ .content-image {
+ width: 100%;
+ height: 100%;
+ }
+
+ .footer-box {
+ padding: 0 3.2rem;
+ height: 100%;
+ }
+
+ .break-section {
+ display: none;
+ }
+
+}
+
+/* Mobile */
+@media (max-width: 768px) {
+
+ nav {
+ height: 64px;
+ }
+
+ .navbar {
+ width: 100%;
+ padding: 0 32px;
+ }
+
+ .navbar img {
+ width: 88.66px;
+ }
+
+ .hero-header {
+ padding-top: 3rem;
+ }
+
+
+ .cta-short {
+ display: flex;
+ width: 80px;
+ height: 37px;
+ padding: 10px 16px;
+ justify-content: center;
+ align-items: center;
+ gap: 10px;
+ }
+
+ .cta-short span {
+ font-size: 14px;
+ }
+
+ .cta-long {
+ display: flex;
+ width: 200px;
+ padding: 10px 16px;
+ justify-content: center;
+ align-items: center;
+ gap: 10px;
+ }
+
+ .cta-long span {
+ font-size: 14px;
+ }
+
+
+ .slogan {
+ text-align: center;
+ font-size: 32px;
+ font-style: normal;
+ font-weight: 700;
+ line-height: 42px;
+ }
+
+ .hero-header {
+ width: 100%;
+ height: auto;
+ }
+
+ .break {
+ display: inline;
+ }
+
+ .hero-header>img {
+ width: 100%;
+ height: 100%;
+ padding: 0 32px;
+ }
+
+ section {
+ display: flex;
+ flex-direction: column;
+ gap: 1rem;
+ height: auto;
+ padding: 4rem 3.2rem;
+ }
+
+ .section-break {
+ display: none;
+ }
+
+ article {
+ padding-top: 0;
+ padding-bottom: 4rem;
+ }
+
+ .title {
+ font-size: 2.4rem;
+ line-height: 1.5;
+ }
+
+ .description {
+ font-size: 1.5rem;
+ margin-bottom: 2.4rem;
+ }
+
+ .content-image {
+ width: 100%;
+ height: 100%;
+ }
+
+ .break-section {
+ display: none;
+ }
+
+ .footer-box {
+ position: relative;
+ padding: 0 3.2rem;
+ height: 100%;
+ }
+
+ .copyright {
+ position: absolute;
+ left: 3.2rem;
+ bottom: 3.2rem;
+ }
+
+}
\ No newline at end of file
diff --git a/README.md b/README.md
new file mode 100644
index 000000000..a9535aef7
--- /dev/null
+++ b/README.md
@@ -0,0 +1 @@
+# weekly-mission