diff --git a/public/images/16th/about/about.png b/public/images/16th/about/about.png new file mode 100644 index 00000000..d0438469 Binary files /dev/null and b/public/images/16th/about/about.png differ diff --git a/public/images/16th/about/about_m.png b/public/images/16th/about/about_m.png new file mode 100644 index 00000000..8eec7a86 Binary files /dev/null and b/public/images/16th/about/about_m.png differ diff --git a/public/images/16th/about/emphasis.png b/public/images/16th/about/emphasis.png new file mode 100644 index 00000000..bd9f1723 Binary files /dev/null and b/public/images/16th/about/emphasis.png differ diff --git a/public/sitemap-0.xml b/public/sitemap-0.xml index a095a61a..5a66077f 100644 --- a/public/sitemap-0.xml +++ b/public/sitemap-0.xml @@ -1,9 +1,9 @@ -https://www.depromeet.com2024-06-10T14:25:51.284Zdaily0.7 -https://www.depromeet.com/about2024-06-10T14:25:51.284Zdaily0.7 -https://www.depromeet.com/apply2024-06-10T14:25:51.284Zdaily0.7 -https://www.depromeet.com/blog2024-06-10T14:25:51.284Zdaily0.7 -https://www.depromeet.com/project2024-06-10T14:25:51.284Zdaily0.7 -https://www.depromeet.com/recruit2024-06-10T14:25:51.284Zdaily0.7 +https://www.depromeet.com2024-11-17T07:04:27.144Zdaily0.7 +https://www.depromeet.com/about2024-11-17T07:04:27.144Zdaily0.7 +https://www.depromeet.com/apply2024-11-17T07:04:27.144Zdaily0.7 +https://www.depromeet.com/blog2024-11-17T07:04:27.144Zdaily0.7 +https://www.depromeet.com/project2024-11-17T07:04:27.144Zdaily0.7 +https://www.depromeet.com/recruit2024-11-17T07:04:27.144Zdaily0.7 \ No newline at end of file diff --git a/src/components/Icons/NarrowArrowIcon.tsx b/src/components/Icons/NarrowArrowIcon.tsx index 97b088b7..b0acb265 100644 --- a/src/components/Icons/NarrowArrowIcon.tsx +++ b/src/components/Icons/NarrowArrowIcon.tsx @@ -22,9 +22,8 @@ export function NarrowArrowIcon({ {...props} > ); diff --git a/src/components/Intro/Intro.tsx b/src/components/Intro/Intro.tsx index 7df57f65..3aa5bbdd 100644 --- a/src/components/Intro/Intro.tsx +++ b/src/components/Intro/Intro.tsx @@ -1,29 +1,38 @@ import Image from 'next/image'; import { css } from '@emotion/react'; -import { ColorType } from '~/constant/color'; +import { colors } from '~/styles/colors'; import { mediaQuery } from '~/styles/media'; -import { theme } from '~/styles/theme'; type IntroProps = { imageUrl: string; title: string; width: number; height: number; - color: ColorType; + color: keyof typeof colors | string; }; -type ImageSize = { - width: number; - height: number; -}; +export function Intro({ imageUrl, title, width, height, color }: IntroProps) { + const getColor = (color: string) => { + const keys = color.split('.'); + let current: any = colors; -const MAX_WIDTH = 1024; + for (const key of keys) { + if (!current[key]) { + throw new Error(`Invalid color key: ${color}`); + } + current = current[key]; + } -export function Intro({ imageUrl, title, width, height, color }: IntroProps) { + if (typeof current !== 'string') { + throw new Error(`Color key '${color}' points to a nested object, not a string.`); + } + + return current; + }; return ( -
-
+
+
{title}
@@ -42,17 +51,21 @@ const containerCss = ({ color }: { color: string }) => css` } `; -const bgImageCss = (props: ImageSize) => css` +const bgImageCss = () => css` top: 20px; + width: 100%; + overflow: hidden; + display: flex; + justify-content: center; + align-items: center; img { - width: ${props.width}px; - height: ${props.height}px; - vertical-align: bottom; + object-fit: cover; - @media screen and (max-width: ${MAX_WIDTH}px) { + ${mediaQuery('mobile')} { width: 100%; height: auto; + object-fit: contain; } } diff --git a/src/components/Journey/Journey.tsx b/src/components/Journey/Journey.tsx index 0fc6195f..f5e8d6ad 100644 --- a/src/components/Journey/Journey.tsx +++ b/src/components/Journey/Journey.tsx @@ -24,14 +24,23 @@ export function Journey() { } function DepromeetInformation() { + // NOTE: 빌드 에러 수정을 위해 임시 주석처리 return (
- {QUANTIFIED_INFO.map(({ label, text }, idx) => ( -
- {text} -

{label}

-
- ))} + {QUANTIFIED_INFO.map( + ( + { + label, + // text + }, + idx + ) => ( +
+ {/* {text} */} +

{label}

+
+ ) + )}
); } diff --git a/src/components/Supports/SupportThumbnail.tsx b/src/components/Supports/SupportThumbnail.tsx index c9dc8eaf..21b0077d 100644 --- a/src/components/Supports/SupportThumbnail.tsx +++ b/src/components/Supports/SupportThumbnail.tsx @@ -68,7 +68,7 @@ const articleCss = css` padding: 24px; width: 100%; overflow: hidden; - background-color: black; + background-color: ${colors.gray[900]}; &:hover { cursor: pointer; diff --git a/src/constant/aboutInfo.ts b/src/constant/aboutInfo.ts index 58ed3054..0fed3c75 100644 --- a/src/constant/aboutInfo.ts +++ b/src/constant/aboutInfo.ts @@ -21,8 +21,8 @@ export const ABOUT_INFO = [ ]; export const QUANTIFIED_INFO = [ - { label: '탄생한지', text: '8YEARS' }, - { label: '10-14기 런칭 성공률', text: '100%' }, - { label: '5-14기 런칭 서비스', text: '50+' }, - { label: '누적 멤버 수', text: '900+' }, + { label: '디프만이 탄생한지', number: 8, unit: '년' }, + { label: '10-15기 런칭 성공률', number: 100, unit: '%' }, + { label: '런칭 서비스', number: 60, unit: '개' }, + { label: '누적 멤버수', number: 1009, unit: '명' }, ]; diff --git a/src/constant/contactInfo.ts b/src/constant/contactInfo.ts index c9d2e999..ef162e91 100644 --- a/src/constant/contactInfo.ts +++ b/src/constant/contactInfo.ts @@ -22,6 +22,6 @@ export const SECOND_ROW_FOOTER_INFOS = [ ]; export const CONTACT_INFO = [ - { name: 'Kakao channel', detail: '@depromeet', href: DEPROMEET_KAKAO_PLUS_FRIEND }, - { name: 'E-mail', detail: 'depromeet@gmail.com', href: DEPROMEET_EMAIL }, + { name: '카카오톡 문의', detail: '@depromeet', href: DEPROMEET_KAKAO_PLUS_FRIEND }, + { name: '이메일 문의', detail: 'depromeet@gmail.com', href: DEPROMEET_EMAIL }, ]; diff --git a/src/constant/supports.ts b/src/constant/supports.ts index 5f1e9498..3f1ae148 100644 --- a/src/constant/supports.ts +++ b/src/constant/supports.ts @@ -6,6 +6,7 @@ export type Support = { link: string; }; +/* TODO: 16기 후원사 image export */ export const SUPPORTS: Support[] = [ { title: '팀스파르타', diff --git a/src/features/About/components/Result.tsx b/src/features/About/components/Result.tsx new file mode 100644 index 00000000..38c2f48b --- /dev/null +++ b/src/features/About/components/Result.tsx @@ -0,0 +1,78 @@ +import Image from 'next/image'; +import { css } from '@emotion/react'; + +import { useCheckWindowSize } from '~/hooks/useCheckWindowSize'; +import { theme } from '~/styles/theme'; + +import { ResultCardList } from './ResultCardList'; + +// TODO: 공통 컴포넌트 분리 / 반응형 작업 +export const Result = () => { + const { isTargetSize: isMobileSize } = useCheckWindowSize('mobile'); + return ( +
+
+

+ 디프만은 디자이너와 개발자가 + {isMobileSize &&
} + 기획, 릴리즈, 이후 개선까지 +

+

+ 모든 과정을 경험하는 + {isMobileSize &&
} + +
+ 성장추구형 강조 +
+
+ 성장추구형 + 커뮤니티입니다. +

+
+ + +
+ ); +}; + +const layoutCss = () => css` + width: 100%; + display: flex; + flex-direction: column; + align-items: center; + gap: 84px; + color: black; +`; + +const title = { + wrapper: css` + h1 { + ${theme.typosV2.pretendard.semibold24}; + line-height: 150%; + text-align: center; + height: fit-content; + } + `, +}; + +const emphasis = { + leftText: css` + margin-right: 13px; + `, + rightText: css` + margin-left: 14px; + `, + text: css` + position: relative; + `, + imageWrapper: css` + position: absolute; + left: -11px; + top: -3px; + `, +}; diff --git a/src/features/About/components/ResultCardList.tsx b/src/features/About/components/ResultCardList.tsx new file mode 100644 index 00000000..bb4898f1 --- /dev/null +++ b/src/features/About/components/ResultCardList.tsx @@ -0,0 +1,82 @@ +import { css } from '@emotion/react'; + +import { QUANTIFIED_INFO } from '~/constant/aboutInfo'; +import { colors } from '~/styles/colors'; +import { mediaQuery } from '~/styles/media'; +import { theme } from '~/styles/theme'; + +export const ResultCardList = () => { + return ( +
+ {QUANTIFIED_INFO.map(({ label, number, unit }, idx) => ( +
+

{label}

+

+ {number} + {unit} +

+
+ ))} +
+ ); +}; + +const containerCss = css` + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 16px; + width: 1040px; + height: 240px; + + ${mediaQuery('mobile')} { + grid-template-columns: repeat(2, 1fr); + width: 100%; + height: auto; + padding: 0 24px; + } +`; + +const cardCss = css` + display: flex; + flex-direction: column; + gap: 30px; + justify-content: center; + align-items: center; + aspect-ratio: 1/1; + background-color: ${colors.grey[100]}; + border-radius: 20px; + + ${mediaQuery('mobile')} { + gap: 18px; + } +`; + +const textCss = { + wrapper: css` + display: flex; + align-items: center; + `, + label: css` + color: ${colors.grey[600]}; + ${theme.typosV2.pretendard.semibold20}; + + ${mediaQuery('mobile')} { + ${theme.typosV2.pretendard.semibold15}; + line-height: 150%; + } + `, + number: css` + ${theme.typosV2.pretendard.bold62}; + + ${mediaQuery('mobile')} { + ${theme.typosV2.pretendard.bold32}; + } + `, + unit: css` + ${theme.typosV2.pretendard.semibold48}; + + ${mediaQuery('mobile')} { + ${theme.typosV2.pretendard.semibold24}; + } + `, +}; diff --git a/src/features/About/sections/AboutActivitiesSection.tsx b/src/features/About/sections/AboutActivitiesSection.tsx new file mode 100644 index 00000000..c02b35c8 --- /dev/null +++ b/src/features/About/sections/AboutActivitiesSection.tsx @@ -0,0 +1,90 @@ +import { css } from '@emotion/react'; + +import { useCheckWindowSize } from '~/hooks/useCheckWindowSize'; +import { mediaQuery } from '~/styles/media'; +import { theme } from '~/styles/theme'; + +export const AboutActivitiesSection = () => { + const { isTargetSize: isMobileSize } = useCheckWindowSize('mobile'); + + return ( +
+
+

오프라인 세션

+

+ 정규 오프라인 세션을 통해 + {isMobileSize &&
} + 성공적인 프로젝트 런칭에 더 가까워 집니다 +

+ + {/* NOTE: OfflineSwipeList 개발 예정 */} + {/*
    + {OFFLINE_SESSIONS.map(session => ( + + ))} +
*/} +
+
+

오프라인 세션

+

+ 디프만에는 정기 세션 외에도 + {isMobileSize &&
} + 친목 및 성장할 수 있는 다양한 활동들이 있습니다 +

+ + {/* NOTE: OfflineSwipeList 개발 예정 */} + {/*
    + {OFFLINE_SESSIONS.map(session => ( + + ))} +
*/} +
+
+ ); +}; + +const containerCss = css` + display: flex; + flex-direction: column; + background-color: ${theme.colors.white}; + padding-bottom: 40px; +`; + +const wrapperCss = css` + padding: 80px 0 82px; + display: flex; + flex-direction: column; + align-items: center; +`; + +const introCss = { + headline: css` + ${theme.typosV2.pretendard.bold32} + line-height: 150%; + + ${mediaQuery('mobile')} { + ${theme.typosV2.pretendard.bold28} + line-height: 150%; + } + `, + description: css` + ${theme.typosV2.pretendard.medium18} + line-height: 150%; + margin-top: 18px; + text-align: center; + + ${mediaQuery('mobile')} { + ${theme.typosV2.pretendard.semibold18} + } + `, +}; + +// const activitiesContainerCss = css` +// display: grid; +// width: 100%; +// max-width: 960px; +// grid-template-columns: repeat(3, 1fr); +// row-gap: 20px; +// column-gap: 12px; +// margin-top: 72px; +// `; diff --git a/src/features/About/sections/AboutContactSection.tsx b/src/features/About/sections/AboutContactSection.tsx new file mode 100644 index 00000000..121db15d --- /dev/null +++ b/src/features/About/sections/AboutContactSection.tsx @@ -0,0 +1,81 @@ +import Link from 'next/link'; +import { css, Theme } from '@emotion/react'; + +import { CONTACT_INFO } from '~/constant/contactInfo'; +import { mediaQuery } from '~/styles/media'; +import { theme } from '~/styles/theme'; + +export const AboutContactSection = () => { + return ( +
+

궁금한 점이 있으신가요?

+ +
    + {CONTACT_INFO.map(footer => ( +
  • + + {footer.name} + {footer.detail} + +
  • + ))} +
+
+ ); +}; + +const layoutCss = css` + padding: 120px 0; + background-color: ${theme.colors.grey[100]}; + + display: flex; + flex-direction: column; + align-items: center; + gap: 36px; +`; + +const titleCss = (theme: Theme) => css` + ${theme.typosV2.pretendard.bold32} + margin-bottom: 12px; + + ${mediaQuery('mobile')} { + ${theme.typosV2.pretendard.bold28} + line-height: 150%; + } +`; + +const infoListCss = css` + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 20px; + width: 100%; + max-width: 960px; + margin-top: 36px; + + ${mediaQuery('mobile')} { + grid-template-columns: repeat(1, 1fr); + gap: 16px; + padding: 0 20px; + } +`; + +const infoCss = { + wrapper: css` + ${theme.typosV2.pretendard.medium18}; + background-color: ${theme.colors.white}; + color: black; + width: 100%; + height: 172px; + padding: 48px 36px; + display: flex; + flex-direction: column; + justify-content: space-between; + align-items: flex-start; + gap: 20px; + border-radius: 12px; + `, + name: css` + ${theme.typosV2.pretendard.bold20}; + color: black; + `, +}; diff --git a/src/features/About/sections/AboutIntroSection.tsx b/src/features/About/sections/AboutIntroSection.tsx new file mode 100644 index 00000000..bc68fa42 --- /dev/null +++ b/src/features/About/sections/AboutIntroSection.tsx @@ -0,0 +1,27 @@ +import { Intro } from '~/components/Intro'; +import { useCheckWindowSize } from '~/hooks/useCheckWindowSize'; + +export const AboutIntroSection = () => { + const { isTargetSize: isMobileSize } = useCheckWindowSize('mobile'); + return ( + <> + {isMobileSize ? ( + + ) : ( + + )} + + ); +}; diff --git a/src/features/About/sections/AboutResultSection.tsx b/src/features/About/sections/AboutResultSection.tsx new file mode 100644 index 00000000..81c35f59 --- /dev/null +++ b/src/features/About/sections/AboutResultSection.tsx @@ -0,0 +1,49 @@ +import { css, SerializedStyles, Theme } from '@emotion/react'; + +import { NarrowArrowIcon } from '~/components/Icons'; +import { LinkWrapper } from '~/components/Main/LinkWrapper'; + +import { Result } from '../components/Result'; + +interface AbountResultSection { + hasLinkButton?: boolean; + style?: SerializedStyles; +} + +export const AboutResultSection = ({ hasLinkButton, style }: AbountResultSection) => { + return ( +
+ + + {/* NOTE: 개발 예정 */} + {hasLinkButton && ( + + 디프만 소개 보기 + + + + + )} +
+ ); +}; + +const layoutCss = (theme: Theme) => css` + padding: 120px 0 134px; + width: 100%; + display: flex; + flex-direction: column; + gap: 80px; + align-items: center; + background-color: ${theme.colors.white}; +`; + +const arrowImgContainerCss = css` + width: 24px; + height: 24px; + display: flex; + align-items: center; + justify-content: center; + border-radius: 400px; + background-color: white; +`; diff --git a/src/features/About/sections/AboutSupportsSection.tsx b/src/features/About/sections/AboutSupportsSection.tsx new file mode 100644 index 00000000..588350bb --- /dev/null +++ b/src/features/About/sections/AboutSupportsSection.tsx @@ -0,0 +1,111 @@ +import Image from 'next/image'; +import { css } from '@emotion/react'; + +import { SupportThumbnail } from '~/components/Supports/SupportThumbnail'; +import { SUPPORTS } from '~/constant/supports'; +import { useCheckWindowSize } from '~/hooks/useCheckWindowSize'; +import { colors } from '~/styles/colors'; +import { mediaQuery } from '~/styles/media'; +import { theme } from '~/styles/theme'; + +export const AboutSupportsSection = () => { + const { isTargetSize: isMobileSize } = useCheckWindowSize('mobile'); + + return ( +
+

후원사

+

+ 디프만은 IT비영리단체로 후원을 통해 + {isMobileSize &&
}더 많은 교육 기회에 도움을 받고 있습니다. +

+ +
    + {SUPPORTS.map(support => ( + + ))} +
    + what's next? +
    +
+ + +
+ ); +}; + +const layoutCss = css` + padding: 120px 0; + display: flex; + flex-direction: column; + align-items: center; + background-color: ${theme.colors.black}; +`; + +const introCss = { + headline: css` + ${theme.typosV2.pretendard.bold32} + line-height: 150%; + color: ${theme.colors.white}; + + ${mediaQuery('mobile')} { + ${theme.typosV2.pretendard.bold28} + line-height: 150%; + } + `, + description: css` + ${theme.typosV2.pretendard.semibold20} + line-height: 150%; + margin-top: 42px; + text-align: center; + color: ${theme.colors.white}; + + ${mediaQuery('mobile')} { + ${theme.typosV2.pretendard.semibold18} + } + `, +}; + +const supportContainerCss = css` + margin-top: 88px; + display: grid; + width: 100%; + max-width: 960px; + grid-template-columns: repeat(3, 1fr); + row-gap: 20px; + column-gap: 12px; + justify-items: center; + justify-content: center; + padding: 0 20px; + + ${mediaQuery('mobile')} { + grid-template-columns: repeat(2, 1fr); + } +`; + +const imageContainerCss = css` + position: relative; + width: 100%; + height: 208px; + + ${mediaQuery('mobile')} { + max-width: 450px; + padding: 18px; + height: 180px; + } +`; + +const supportButtonCss = css` + padding: 12px 38px; + margin-top: 92px; + border-radius: 50px; + color: ${colors.grey['00']}; + background-color: ${colors.grey[500]}; + ${theme.typosV2.pretendard.semibold20} + + ${mediaQuery('mobile')} { + padding: 16px 28px; + margin-top: 62px; + border-radius: 50px; + ${theme.typosV2.pretendard.bold16} + } +`; diff --git a/src/features/About/sections/index.ts b/src/features/About/sections/index.ts new file mode 100644 index 00000000..c3702617 --- /dev/null +++ b/src/features/About/sections/index.ts @@ -0,0 +1,4 @@ +export * from './AboutActivitiesSection'; +export * from './AboutContactSection'; +export * from './AboutResultSection'; +export * from './AboutSupportsSection'; diff --git a/src/pages/about.tsx b/src/pages/about.tsx index b4031602..3719feae 100644 --- a/src/pages/about.tsx +++ b/src/pages/about.tsx @@ -1,24 +1,22 @@ -import AboutDepromeeet from '~/components/AboutInfo/AboutDepromeeet'; -import { Contact } from '~/components/Contact'; -import { Intro } from '~/components/Intro'; import { SEO } from '~/components/SEO'; -import { Supports } from '~/components/Supports'; +import { + AboutActivitiesSection, + AboutContactSection, + AboutResultSection, + AboutSupportsSection, +} from '~/features/About/sections'; +import { AboutIntroSection } from '~/features/About/sections/AboutIntroSection'; export default function About() { return ( <>
- - - - + + + + +
); diff --git a/src/styles/colors.ts b/src/styles/colors.ts index 631a00e8..406bce24 100644 --- a/src/styles/colors.ts +++ b/src/styles/colors.ts @@ -1,4 +1,5 @@ export const colors = { + black: '#000000', black800: '#070814', black400: '#1D1F2C', gray300: '#343744', @@ -21,4 +22,28 @@ export const colors = { lightGray: '#F4F4F4', gray: '#999999', mint: '#A0EEE9', + + // NOTE: 16th + grey: { + '00': '#FFFFFF', + '100': '#F4F4F5', + '300': '#999999', + '500': '#323232', + '600': '#232323', + '900': '#000000', + }, + + primary: { + pink: '#FF90FF', + blue: '#006AFE', + }, + + sub: { + sky: '#48A4FF', + darkMint: '#00CEBA', + lightPink: '#FF97FF', + purple: '#877BFF', + yellow: '#FFEC87', + lightMint: '#A0EEE9', + }, } as const; diff --git a/src/styles/typo.ts b/src/styles/typo.ts index e063b63d..a59d4b7f 100644 --- a/src/styles/typo.ts +++ b/src/styles/typo.ts @@ -148,60 +148,117 @@ export const typosV2 = { `, }, pretendard: { + bold62: css` + font-size: ${pxToRem(62)}; + font-style: normal; + font-weight: 700; + line-height: ${pxToRem(74)}; + letter-spacing: -0.04em; + `, + bold32: css` + font-size: ${pxToRem(32)}; + font-style: normal; + font-weight: 700; + line-height: ${pxToRem(38)}; + letter-spacing: -0.04em; + `, + bold28: css` + font-size: ${pxToRem(28)}; + font-style: normal; + font-weight: 700; + line-height: ${pxToRem(33)}; + letter-spacing: -0.04em; + `, + bold20: css` + font-size: ${pxToRem(20)}; + font-style: normal; + font-weight: 700; + line-height: ${pxToRem(24)}; + letter-spacing: -0.04em; + `, + bold16: css` + font-size: ${pxToRem(16)}; + font-style: normal; + font-weight: 700; + line-height: ${pxToRem(19)}; + letter-spacing: -0.04em; + `, + semibold48: css` + font-size: ${pxToRem(48)}; + font-style: normal; + font-weight: 600; + line-height: ${pxToRem(57)}; + letter-spacing: -0.04em; + `, semibold32: css` font-size: ${pxToRem(32)}; font-style: normal; font-weight: 600; line-height: ${pxToRem(48)}; - letter-spacing: -4%; + letter-spacing: -0.04em; `, semibold28: css` font-size: ${pxToRem(28)}; font-style: normal; font-weight: 600; line-height: ${pxToRem(40)}; - letter-spacing: -4%; + letter-spacing: -0.04em; `, semibold26: css` font-size: ${pxToRem(26)}; font-style: normal; line-height: ${pxToRem(40)}; font-weight: 600; + letter-spacing: -0.04em; `, semibold24: css` font-size: ${pxToRem(24)}; font-style: normal; font-weight: 600; line-height: ${pxToRem(36)}; - letter-spacing: -4%; + letter-spacing: -0.04em; `, semibold20: css` font-size: ${pxToRem(20)}; font-style: normal; font-weight: 600; line-height: ${pxToRem(30)}; - letter-spacing: -4%; + letter-spacing: -0.04em; `, semibold18: css` font-size: ${pxToRem(18)}; font-style: normal; font-weight: 600; line-height: ${pxToRem(32)}; - letter-spacing: -4%; + letter-spacing: -0.04em; `, semibold16: css` font-size: ${pxToRem(16)}; font-style: normal; font-weight: 600; line-height: ${pxToRem(24)}; - letter-spacing: -4%; + letter-spacing: -0.04em; + `, + semibold15: css` + font-size: ${pxToRem(15)}; + font-style: normal; + font-weight: 600; + line-height: ${pxToRem(18)}; + letter-spacing: -0.04em; `, semibold14: css` font-size: ${pxToRem(14)}; font-style: normal; font-weight: 600; line-height: ${pxToRem(21)}; - letter-spacing: -4%; + letter-spacing: -0.04em; + `, + medium18: css` + font-size: ${pxToRem(18)}; + font-style: normal; + font-weight: 500; + line-height: ${pxToRem(21)}; + letter-spacing: -5%; `, regular20: css` font-size: ${pxToRem(20)};