diff --git a/.gitignore b/.gitignore index f99f737..2f8a4ac 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ node_modules/ dist/ .DS_Store *.local +.mcp.json diff --git a/doc/디자인0624.fig b/doc/디자인0624.fig new file mode 100644 index 0000000..6ffb6cd Binary files /dev/null and b/doc/디자인0624.fig differ diff --git a/doc/미완료.md b/doc/미완료.md new file mode 100644 index 0000000..a601a7a --- /dev/null +++ b/doc/미완료.md @@ -0,0 +1,69 @@ +# 미완료 / 확인 필요 항목 + +Figma MCP(`figma-mcp`)로 확인이 안 되거나 추출이 안 되는 항목을 섹션별로 기록한다. 추측해서 임의로 채운 값이 아니라, 실제로 막힌 지점만 기록한다. + +--- + +## 다음 세션 인수인계 (작업 중단 시점 기록) + +사용자가 자리를 비워야 해서 PROJECT 섹션 작업 중 중단됨. 아래 순서대로 이어서 진행하면 된다. + +### 완료된 섹션 +- HOME, ABOUT US(+EXPERTISE), HISTORY, VISION — 마크업(`src/index.html`)·스타일(`src/scss/page/*.scss`)·필요 JS(`src/js/main.js`) 모두 반영, `npm run build` 통과 확인됨. + +### 남은 작업 (순서대로) +1. **PROJECT 섹션** — 작업 중 Figma 이미지 렌더 API가 429(Rate Limit)를 계속 반환해서 멈춤. 노드 ID는 이미 확보됨 (아래 "Figma 노드 ID 모음" 참고). `mcp__figma__view_node`로 PC(`2247:2202`)와 모바일(`2319:4231`) 다시 렌더 시도부터 시작. 429가 계속되면 5~10분 정도 기다린 후 재시도하거나, 이미 위에서 확보한 PC 전체 컴포지트 이미지(`2247:2093` 렌더 결과, 이 문서/대화 로그에는 없고 이전 대화 컨텍스트에만 있었음 — 새 세션이면 `2247:2093`을 다시 view_node로 떠야 함)로 대략적인 카피/태그만 추정하고 정확한 카피는 "확인 필요"로 명시. +2. **CONTACT/FOOTER 섹션** — 아직 Figma 노드 ID조차 확보 못함. 사용자에게 PC/모바일 프레임 "Copy link to selection" 링크 요청부터 시작해야 함. 옛 디자인(`src/index.html`에 남아있던 구버전 구조 참고용으로 git log/old commit에서 확인 가능)에는 Head Office 주소, Contact 폼(회사명/담당자/연락처/이메일/문의내용/개인정보동의/SEND), Recruitment 태그(Planner & Consulting/Designer/Publisher/Scripter), footer(브랜드/연락처/copyright)가 있었음 — 새 디자인 렌더(PC 전체 컴포지트, `2247:2093`)에서도 "WELCOME BODA LAB", Head Office, Contact Us 폼, Recruitment 태그, footer가 보였으므로 큰 구조는 유사할 것으로 추정되나 정확한 카피/배치는 미확인. +3. **GNB 마무리** — HOME 작업 때 1차로 완성했음(데스크톱 6개 메뉴, 모바일 풀스크린 드로어 + 닫기 X). 전체 섹션이 다 만들어진 뒤 스크롤 시 활성 메뉴(`isActive`) 동작, 반응형 폭(좁은 노트북 화면에서 6개 메뉴 안 깨지는지) 최종 점검 필요. +4. **최종 정리** + - `src/scss/index.scss`의 `@use "page/..."` 목록은 이미 `gnb, intro, about, vision, projects, contact` 로 되어 있음. PROJECT/CONTACT 작업 후 파일명을 새 섹션에 맞게 정리할지 결정(`_projects.scss`→`_project.scss` 등 네이밍 통일 여부는 미정). + - 안 쓰는 이미지 정리: `about-hand.jpg`는 이미 HTML에서 참조 제거됨(파일 자체는 아직 디스크에 남아있을 수 있음, 삭제 필요). `vision-1/2/3.jpg`도 더 이상 참조 안 됨 — 삭제 검토. `history-1.jpg`는 HISTORY 좌측 사진 placeholder로 재사용 중(삭제하면 안 됨). + - `npm run build`, `npm run format` 최종 실행. + +### Figma 노드 ID 모음 (file_key: `MnwN1Uzg5F6ks9Clr1brLW`) +- PC 전체 페이지(컴포지트, 모든 섹션 한눈에 보임): `2247:2093` +- 01_HOME (PC): `2247:2094` +- 02_ABOUT US (PC, EXPERTISE 포함): `2247:2230` +- 03_HISTORY (PC): `2247:2121` +- VISION PC: `2247:2183` / VISION 모바일: `2319:4183` +- PROJECT PC: `2247:2202` / PROJECT 모바일: `2319:4231` — **아직 렌더 못 받음(429)** +- CONTACT/FOOTER — **노드 ID 미확보**, 사용자에게 요청 필요 +- 모바일 전체 페이지(컴포지트): `2319:5243` +- 모바일 GNB 드로어(열린 상태): `2319:5998` + +### Figma MCP 연결 관련 메모 (재현/트러블슈팅용) +- 이 프로젝트(`d:/repository/boda-lab`)의 figma MCP 서버는 프로젝트 루트 `.mcp.json`에 등록되어 있음 (전역 `~/.claude.json`이 아니라 **프로젝트 단위 `.mcp.json` 파일** 방식). +- 서버 설정: stdio 방식, `command`는 nvm4w 심볼릭링크(`C:\nvm4w\nodejs\npx.cmd`)가 아니라 **실제 경로**(`C:\Users\HeeDesktop\AppData\Local\nvm\v24.16.0\npx.cmd`)로 지정해야 동작함 — Windows에서 VSCode 확장이 스폰하는 프로세스는 심볼릭링크/PATH를 못 찾는 경우가 있어서 절대경로로 우회한 것. `args: ["-y", "figma-mcp"]`, `env.FIGMA_API_KEY`로 키 전달. +- 도구: `mcp__figma__add_figma_file(url)` — 파일 전체를 JSON으로 덤프하는데, 파일이 커서 약 25k 토큰 근처(`01_HOME`~`03_HISTORY` 중반)에서 항상 잘림. `node-id` 쿼리 파라미터를 URL에 넣어도 무시되고 항상 전체 문서 기준으로 덤프됨 — 범위 제한 불가. +- 도구: `mcp__figma__view_node(file_key, node_id)` — 특정 노드를 PNG로 렌더해서 보여줌(파일로 저장은 안 됨, 대화창에만 표시). 섹션별 정밀 확인에 주력 도구로 사용 중. **오늘 PROJECT 섹션 작업 중 이 API가 429를 반환하기 시작했고, 5분+ 대기해도 풀리지 않았음.** 다음 세션에서도 재현되면 더 오래(10분+) 기다리거나, 사용자에게 Figma API 키/요금제 쪽 rate limit 상태를 확인해달라고 요청할 것. +- 이미지 에셋(사진/목업) 자체는 이 MCP로 export/저장이 안 됨 — 필요한 이미지는 Figma에서 사용자가 직접 Export 해서 `src/images/`에 넣어줘야 함. + +--- + +## 공통 / 도구 제약 + +- `add_figma_file`이 파일 전체를 한 번에 JSON 덤프하는 방식이라 토큰 한도에 걸려 `01_HOME` ~ `03_HISTORY` 중반 이후 노드는 JSON으로 못 받았다. `view_node(file_key, node_id)`로 노드 ID를 알 때만 PNG 렌더로 확인 가능. VISION/PROJECT/CONTACT 등 이후 섹션은 작업 시점에 사용자에게 "Copy link to selection" 링크를 요청해서 진행한다. +- `view_node`는 이미지를 대화창에 렌더만 해줄 뿐, 파일로 저장(export)하는 기능이 없다. 따라서 Figma 안의 사진/목업 이미지 에셋(배경 텍스처, 프로젝트 카드 스크린샷 등)은 이 MCP로 직접 추출이 불가능하다. 실제 자산은 Figma에서 직접 "Export" 해서 `src/images/`에 받아와야 한다. + +## HOME + +- 배경의 원형 동심원 패턴 이미지(`unsplash:-cKXtsJWU-I`, opacity 0.2)는 에셋 추출이 안 돼서 반영하지 못했다. 사용자 결정에 따라 기존 GSAP blob 애니메이션(`introAnimation.js`)을 그대로 유지하기로 함 — 동심원 패턴 이미지를 쓰고 싶다면 Figma에서 해당 이미지를 export해서 전달 필요. + +## GNB (모바일 드로어) + +- 모바일 메뉴 항목 폰트가 Figma 렌더에서는 업라이트(정체) 세리프로 보이는데, 프로젝트에 있는 폰트 파일은 `DM Serif Display Italic`(이탤릭)뿐이라 정확히 매칭되는 폰트가 없다. 일단 이탤릭으로 대체 적용했다. 업라이트 세리프 폰트 파일을 구해서 교체할지 확인 필요. + +## HISTORY + +- 좌측 세로 사진(나선형 건축물 텍스처)은 에셋 추출이 안 돼서 기존 `images/history-1.jpg`를 임시로 대체 사용했다. 실제 Figma 이미지로 교체 필요. +- 2024/2023/2022/2021년 그룹은 Figma 렌더에서 아코디언이 collapsed 상태로 보여서 항목이 1개씩만 보인다(2024: 우리은행 로보어드바이저 구축, 2023: 신한은행 슈퍼SOL 운영 계약, 2022: 한화금융 서비스앱 플러스 리뉴얼 2차 계약, 2021: 롯데 렌터카 차세대 구축 계약). 펼쳤을 때 추가 항목이 더 있는지는 정적 렌더로 확인이 안 돼서, 일단 보이는 1개씩만 반영했다. 펼침 상태의 전체 목록 확인 필요. +- HISTORY 섹션의 모바일 레이아웃은 별도 figma 크롭을 못 받아서, 좌측 사진을 숨기고 타임라인만 세로로 쌓는 형태로 추정 구현했다. 실제 모바일 디자인 확인 필요. + +## VISION + +- 배경의 별빛/우주 텍스처 이미지는 ABOUT US와 마찬가지로 에셋 추출이 안 돼서 단색 `$color-bg`로 대체했다. +- 인용구("Flawless execution...") 텍스트의 Figma 렌더 폰트가 라운드체 산세리프로 보이는데, 프로젝트에 등록된 폰트(SUIT, DM Serif Display Italic) 중 일치하는 게 없다. Figma 쪽에서 폰트가 누락되어 대체 렌더링된 것일 수도 있어 원래 의도된 폰트를 특정하기 어렵다. 일단 기본 폰트(SUIT)로 대체했다. + +--- + +## (이후 섹션 작업하면서 추가) diff --git a/src/index.html b/src/index.html index 7dde23b..d6ba416 100644 --- a/src/index.html +++ b/src/index.html @@ -18,10 +18,12 @@ @@ -52,7 +60,7 @@
-

Creative Development Company

+

Our Company

THE BODA LAB

@@ -62,269 +70,246 @@ - +
-
+

ABOUT US

-

- The BODA LAB은 디지털시대에 발맞춰 클라이언트의 비즈니스를 위한
- 다양한 기술적 노하우로 완성된 경험을 제공합니다.
- 우리의 활동은 웹, 앱, 모바일을 넘나들며 세상의 모든 비즈니스 활동에 강한 영향력을 전달합니다. +

+ 디지털 시대에 발맞춰, 차별화된 기술적 노하우로 클라이언트의 비즈니스에 완벽한 디지털 경험을 선사합니다.
+ 우리의 스펙트럼은 웹과 앱을 넘어 세상의 모든 비즈니스에 강력한 영향력을 전합니다.

-
-
- 스케치하는 손 -
-
-
- Creative Development Company BODA.Lab - Creative Development Company BODA.Lab - Creative Development Company BODA.Lab - Creative Development Company BODA.Lab +
+ +

Creative Development Company
BODA.Lab

-
+
+
    +
  • + 01 +

    UX
    Consulting

    +

    UX 컨설팅

    +
  • +
  • + 02 +

    Plarform
    Building

    +

    웹사이트 구축

    +
  • +
  • + 03 +

    Mobile
    App & Web

    +

    모바일 앱 & 웹

    +
  • +
  • + 04 +

    Service
    Management

    +

    서비스 운영

    +
  • +
-
-

HISTORY

+
+

HISTORY

+
+ +
- -
- 2024 -
    +
    + +
    • - 12.01 - 신한은행 슈퍼소울 운영 계약 +
      +

      한국전자기술연구원 대쉬보드 구축

      +

      + 유체기기 위험 운전 알고리즘 모니터링 프로그램 / 송풍 제어 모듈 비정상 운전 상태 진단 프로그램
      + 윈도우 프로그래밍 개발, 대시보드 UX UI 기획/디자인 +

      +
      + 25.12 - 26.02
    • - 09.01 - 한화금융통합 서비스 구축 계약 +
      +

      현대차 판매시스템 구축

      +

      React.Js, F/E, B/E 개발

      +
      + 25.08 - 26.06
    • - 05.30 - 신한은행 슈퍼소울 구축 계약 +
      +

      LG 개인정보삭제 프로그램개발

      +

      React.Js, F/E, B/E 개발

      +
      + 25.08 - 25.12
    • - 05.01 - 롯데 렌터카 오토리스 구축 계약 +
      +

      신한투자증권_New 슈퍼SOL 통합 프로젝트 Finance

      +

      Vue.Js, Publishing

      +
      + 25.07 - 26.07 +
    • +
    • +
      +

      신한은행_New 슈퍼SOL 통합 프로젝트 Finance

      +

      React.Js, Purescript, Publishing

      +
      + 25.07 - 26.06 +
    • +
    • +
      +

      한화생명 신탁시스템 재구축 Finance

      +

      React.Js, Pblishing, UX UI 기획, F/E 개발

      +
      + 25.06 - 26.06 +
    • +
    • +
      +

      SK매직 운영 개발

      +

      React.Js, Vue.Js, F/E, B/E 개발

      +
      + 25.07 - 25.12 +
    • +
    • +
      +

      롯데카드 외국인 선불카드 연계플랫폼 구축대행 Finance

      +

      Vue.Js, Next.Js, Publishing, F/E 개발

      +
      + 25.04 - 25.11 +
    • +
    • +
      +

      LG전자 홈스타일(리빙) 서비스 구축 프로젝트

      +

      UX UI 기획

      +
      + 25.04 - 25.08 +
    • +
    • +
      +

      에어인천 ERP 구축 프로젝트

      +

      UX UI 디자인, Publishing

      +
      + 25.03 - 25.04 +
    • +
    • +
      +

      하나캐피탈 자산관리시스템 재구축 프로젝트 Finance

      +

      Vue.Js, Nuxt.Js, Publishing, F/E 개발

      +
      + 25.03 - 25.08 +
    • +
    • +
      +

      현대해상 고도화 구축 Finance

      +

      React, Typescript, Scss

      +
      + 25.02 - 26.01 +
    • +
    • +
      +

      우리은행 전자지갑 구축 Finance

      +

      React, Typescript, Recoil, Spring Boot

      +
      + 25.01 - 25.07
    - 2023 -
      + + -
    - -
    - 2022 -
      -
    • - 11.01 - 한화금융 서비스앱 플러스 리뉴얼 2차 계약 -
    • -
    • - 09.01 - 한화금융 서비스앱 플러스 리뉴얼 1차 계약 -
    • -
    • - 08.01 - 밀레 쇼핑몰 리뉴얼 구축 계약 -
    • -
    • - 07.01 - 오뚜기 쇼핑몰 리뉴얼 구축 계약 -
    • -
    • - 05.01 - 캐나다구스 코리아 쇼핑몰 구축 계약 +
      +

      우리은행 로보어드바이저 구축 Finance

      +

      React, Typescript, Recoil

      +
      + 24.11 - 25.07
    - 2023 -
      + +
    - 2022 -
      + + -
    - -
    - 2021 -
      -
    • - 11.22 - 롯데 렌터카 차세대 구축 계약 -
    • -
    • - 11.01 - LSN MALL 구축 계약 -
    • -
    • - 7.29 - (주)보다랩 설립 -
    • -
    • - 5.15 - 현대홈쇼핑 리뉴얼 구축 계약 -
    • -
    • - 01.11 - KONA I 헬스케어 구축 계약 -
    • -
    • - 01.11 - 유아이팩토리 설립 +
      +

      한화금융 서비스앱 플러스 리뉴얼 2차 계약 Finance

      +
      + 22.11
    +
    + + +
-
- - - -
- -
-
- -

BODA Lab Co., Ltd.

-

- accurately identifies customer needs to
- achieve the best completeness and satisfaction.
- We are working on a project with talented
- people with high technology. -

- -
- - -
- - +
-
-
- Perspective -

- 클라이언트의 고유한 가치를 발견하고 -
- 차별화된 디지털 경험을 설계합니다. -

-
-
- Uniqueness -
+
+

VISION

+

우리는 고객사의 니즈를 정확히 파악하고, 우수한 기술력을 가진 인재들을 투입하여 프로젝트의 완성도와 만족도를 극대화합니다.

-
-
- Expertise -
-
- Expertise -

- 10년 이상의 기술 노하우를 기반으로 -
- 최적의 솔루션을 제공합니다. -

-
-
-
-
- Satisfaction -

- 고객의 만족을 최우선 가치로 삼아 -
- 완성도 높은 결과물을 만듭니다. -

-
-
- Satisfaction -
+
+ +

Flawless execution, absolute satisfaction. BODA Lab delivers excellence through advanced tech talent.

+
    +
  • +

    PERSPECTIVE

    +

    고객사의 눈으로 관점을 바라봅니다.

    +
  • +
  • +

    EXPERTISE

    +

    다양한 기술력을 가진 인재들을 보유하고 있습니다.

    +
  • +
  • +

    SATISFACTION

    +

    타사보다 높은 만족도와 완성도를 갖추고 있습니다.

    +
  • +
diff --git a/src/js/main.js b/src/js/main.js index 4e13ea9..dc4ec76 100644 --- a/src/js/main.js +++ b/src/js/main.js @@ -10,16 +10,15 @@ $(function () { const $gnb = $("#gnb"); const $hamburger = $(".gnb__hamburger"); const $mobileNav = $(".gnb__mobileNav"); + const $mobileNavClose = $(".gnb__mobileNavClose"); // 섹션 → nav 귀속 맵 const sectionToNav = { intro: "intro", about: "about", - history: "about", - "boda-intro": "about", - vision: "about", + history: "history", + vision: "vision", project: "project", - expertise: "project", contact: "contact", }; @@ -76,6 +75,28 @@ $(function () { $mobileNav.removeClass("isOpen"); }); + // 모바일 메뉴 닫기 버튼 + $mobileNavClose.on("click", function () { + $hamburger.removeClass("isOpen").attr("aria-expanded", false); + $mobileNav.removeClass("isOpen"); + }); + + // History 아코디언 + $(".history__yearToggle").on("click", function () { + const $group = $(this).closest(".history__yearGroup"); + const $list = $("#" + $(this).attr("aria-controls")); + const isOpen = $group.hasClass("isOpen"); + + $group.toggleClass("isOpen", !isOpen); + $(this).attr("aria-expanded", !isOpen); + + if (isOpen) { + $list.attr("hidden", ""); + } else { + $list.removeAttr("hidden"); + } + }); + // Contact 아코디언 $(".contactAccordion__header").on("click", function () { const $item = $(this).closest(".contactAccordion__item"); diff --git a/src/scss/base/_variable.scss b/src/scss/base/_variable.scss index 20aaa21..7fe703f 100644 --- a/src/scss/base/_variable.scss +++ b/src/scss/base/_variable.scss @@ -3,6 +3,7 @@ $color-bg-light: #e5e5e5; $color-cyan: #00f0ff; $color-purple: #8f00ff; $color-blue: #7796ff; +$color-badge-blue: #0071f2; $color-white: #ffffff; $color-dark: #0d0d0d; $color-gray: #999; diff --git a/src/scss/index.scss b/src/scss/index.scss index d0012bf..1b949fc 100644 --- a/src/scss/index.scss +++ b/src/scss/index.scss @@ -9,6 +9,7 @@ @use "page/gnb"; @use "page/intro"; @use "page/about"; +@use "page/vision"; @use "page/projects"; @use "page/contact"; diff --git a/src/scss/page/_about.scss b/src/scss/page/_about.scss index f7eb3de..10530fe 100644 --- a/src/scss/page/_about.scss +++ b/src/scss/page/_about.scss @@ -1,360 +1,290 @@ @use "../base/variable" as *; @use "../base/mixin" as *; -// About +// About + Expertise .about { - height: 956px; + min-height: 100vh; background: $color-bg; - align-items: stretch; + display: flex; + flex-direction: column; + justify-content: center; + padding: clamp(80px, 6.25vw, 120px) clamp(24px, 6.25vw, 120px); } .about__inner { - position: relative; - height: 100%; + display: flex; + flex-direction: column; + gap: clamp(60px, 10.4vw, 200px); } -.about__text { - padding: 120px 16.7% 60px; +.about__head { + display: flex; + flex-direction: column; + gap: clamp(30px, 3.1vw, 60px); .sectionTitle { - margin: 0 0 70px; - } - - .desc { - padding: 0 0 0 80px; - font-size: clamp(13px, 1.1vw, 16px); - font-weight: 300; - line-height: 1.8; - color: $color-white; - opacity: 0.9; + margin: 0; } } -.about__image { - position: absolute; - top: 229px; - right: 0; - width: 42%; -} - -.about__imageThumb { - width: 100%; - height: 100%; - object-fit: cover; - object-position: center; -} - -.about__caption { - position: absolute; - bottom: 120px; - left: 0; - right: 0; - padding: 0; - background: linear-gradient(to top, rgba($color-bg, 0.7) 0%, transparent 100%); - overflow: hidden; -} - -.about__captionTrack { - display: flex; - width: max-content; - animation: marquee 18s linear infinite; -} - -.about__captionText { - font-size: clamp(18px, 2.5vw, 36px); - font-weight: 400; +.about__desc { + font-size: clamp(13px, 1.1vw, 16px); + font-weight: 300; + line-height: 1.8; color: $color-white; - white-space: nowrap; - padding-right: 80px; + opacity: 0.9; } -@keyframes marquee { - from { - transform: translateX(0); +.about__quote { + display: flex; + align-items: flex-end; + gap: 10px; +} + +.about__quoteMark { + font-size: clamp(60px, 7.6vw, 146px); + font-weight: 600; + line-height: 1; + color: $color-white; +} + +.about__quoteText { + font-size: clamp(22px, 2.4vw, 46px); + font-weight: 100; + line-height: 1.2; + color: $color-white; +} + +.about__expertiseList { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + gap: clamp(24px, 3vw, 60px); + list-style: none; +} + +.about__expertiseItem { + display: flex; + flex-direction: column; + gap: 8px; + + .num { + font-size: clamp(14px, 0.85vw, 16px); + font-weight: 800; + color: $color-blue; } - to { - transform: translateX(-25%); + + .name { + font-size: clamp(24px, 2.1vw, 40px); + font-weight: 800; + text-transform: uppercase; + line-height: 1.2; + color: $color-white; + } + + .text { + font-size: clamp(12px, 0.75vw, 14px); + font-weight: 300; + color: $color-white; } } // History .history { background: $color-bg-light; - padding: 0 0 0; + padding: clamp(60px, 6.25vw, 120px) clamp(24px, 6.25vw, 120px); } -.history__top { - max-width: 1280px; - padding: 120px 40px 120px; - margin: 0 auto; +.history__inner { + position: relative; + display: flex; + align-items: flex-start; + gap: clamp(40px, 6.25vw, 120px); } -.history__top .sectionTitleDark { - margin-bottom: 88px; +.history__photo { + position: relative; + flex: 0 0 clamp(220px, 26vw, 500px); + align-self: stretch; + overflow: hidden; + background: $color-dark; + + .img { + width: 100%; + height: 100%; + object-fit: cover; + } +} + +.history__title { + position: absolute; + top: clamp(16px, 2vw, 32px); + left: clamp(16px, 2vw, 32px); + z-index: 1; + color: $color-white; } .history__timeline { - display: grid; - grid-template-columns: repeat(3, 1fr); - gap: 60px 24px; + flex: 1; + min-width: 0; } .history__yearGroup { + border-top: 1px solid rgba($color-dark, 0.15); + + &:last-child { + border-bottom: 1px solid rgba($color-dark, 0.15); + } +} + +.history__yearToggle { display: flex; - flex-direction: column; + align-items: center; + justify-content: space-between; + width: 100%; + padding: clamp(16px, 1.8vw, 24px) 0; + background: none; + border: none; + cursor: pointer; + + .icon { + position: relative; + width: 28px; + height: 28px; + border: 1px solid $color-dark; + border-radius: 50%; + flex-shrink: 0; + + &::before, + &::after { + content: ""; + position: absolute; + top: 50%; + left: 50%; + width: 10px; + height: 1px; + background: $color-dark; + transform: translate(-50%, -50%); + } + + &::after { + transform: translate(-50%, -50%) rotate(90deg); + transition: opacity 0.2s; + } + } +} + +.history__yearGroup.isOpen .history__yearToggle .icon::after { + opacity: 0; } .history__year { - font-size: clamp(24px, 2.5vw, 32px); + font-size: clamp(28px, 2.5vw, 40px); font-weight: 100; color: $color-dark; - margin-bottom: 32px; line-height: 1; } .history__list { display: flex; flex-direction: column; - gap: 12px; - border-left: 1px solid #0d0d0d; - padding: 0 0 0 23px; } .history__listItem { display: flex; - flex-direction: column; - gap: 4px; -} + align-items: flex-start; + justify-content: space-between; + gap: 24px; + padding: clamp(12px, 1.2vw, 16px) 0; + border-top: 1px solid rgba($color-dark, 0.08); -.history__listDate { - font-size: 14px; - font-weight: 700; - color: $color-dark; - line-height: 1.6; -} - -.history__listText { - font-size: clamp(12px, 1vw, 16px); - font-weight: 300; - color: $color-dark; - line-height: 1.6; -} - -.history__bottom { - position: relative; - background: $color-bg; - height: 480px; -} - -.history__img { - position: absolute; - object-fit: cover; - - &.history__img--1 { - width: 16.67%; - top: 0px; - left: 0; + &:first-child { + border-top: none; } - &.history__img--2 { - width: 27.1%; - left: 50%; - transform: translateX(-50%); - top: -60px; + .main { + display: flex; + flex-direction: column; + gap: 4px; } - &.history__img--3 { - width: 18.23%; - top: 0px; - left: 0; + .title { + font-size: clamp(14px, 1vw, 16px); + font-weight: 400; + color: $color-dark; } -} -// Boda Intro -.bodaIntro { - position: relative; - padding: 120px 0 210px; - background: $color-bg; - display: flex; - align-items: center; - justify-content: center; - text-align: center; - - .scrollDown { - position: absolute; - left: 50%; - bottom: 0; - transform: translateX(-50%); + .badge { + display: inline-block; + margin-left: 6px; + padding: 2px 8px; + font-size: 10px; + font-weight: 700; + color: $color-badge-blue; + border: 1px solid $color-badge-blue; + border-radius: 4px; + vertical-align: middle; } -} -.bodaIntro__content { - display: flex; - flex-direction: column; - align-items: center; - text-align: center; + .sub { + font-size: clamp(11px, 0.8vw, 13px); + font-weight: 300; + color: rgba($color-dark, 0.55); + line-height: 1.6; + } - font-size: clamp(20px, 3vw, 56px); - line-height: 1.5; - font-weight: 600; -} - -.bodaIntro__desc { - color: rgba($color-white, 0.3); -} - -// Vision -.vision { - background: $color-bg; -} - -.vision__inner { - display: flex; - flex-direction: column; -} - -.vision__item { - display: flex; - align-items: stretch; - height: 33.333vh; - min-height: 280px; -} - -.vision__itemReverse { - flex-direction: row-reverse; -} - -.vision__text { - display: flex; - flex-direction: column; - justify-content: center; - width: 50%; - padding: 40px 80px; - gap: 20px; -} - -.vision__keyword { - font-family: $font-serif; - font-style: italic; - font-size: clamp(32px, 4vw, 56px); - color: $color-white; - line-height: 1; -} - -.vision__textDesc { - font-size: clamp(13px, 1vw, 15px); - font-weight: 300; - line-height: 1.8; - color: rgba($color-white, 0.75); -} - -.vision__image { - width: 50%; - overflow: hidden; -} - -.vision__imageThumb { - width: 100%; - height: 100%; - object-fit: cover; - transition: transform 0.6s ease; -} - -.vision__image:hover .vision__imageThumb { - transform: scale(1.04); + .date { + flex-shrink: 0; + font-size: clamp(12px, 0.85vw, 14px); + font-weight: 400; + color: rgba($color-dark, 0.65); + white-space: nowrap; + } } @include mo { .about { height: auto; - min-height: 100vh; + min-height: auto; + padding: calc(#{$gnb-height-mo} + 40px) 24px 60px; + } + + .about__quote { flex-direction: column; + align-items: flex-start; + gap: 4px; } - .about__inner { + .about__expertiseList { flex-direction: column; - } - - .about__text { - width: 100%; - padding: calc(#{$gnb-height-mo} + 40px) 24px 40px; - gap: 40px; - } - - .about__image { - width: 100%; - height: 56vw; - min-height: 260px; - } - - .about__caption { - font-size: 16px; - padding: 16px; + gap: 32px; } .breakLine { display: none; } - .history__top { - padding: 60px 24px 40px; + .history { + padding: 60px 24px; } - .history__top .sectionTitleDark { + .history__inner { + flex-direction: column; + } + + .history__title { + position: static; margin-bottom: 32px; + color: $color-dark; } - .history__timeline { - grid-template-columns: 1fr 1fr; - gap: 40px 20px; + .history__photo { + display: none; } - .history__bottom { - padding: 0 24px 60px; + .history__listItem { + flex-direction: column; + gap: 6px; } - .history__images { - height: 260px; - margin-top: -40px; - } - - .history__img1 { - width: 120px; - height: 80px; - } - - .history__img2 { - width: 180px; - height: 200px; - left: 50%; - } - - .history__img3 { - width: 130px; - height: 90px; - bottom: 20px; - } - - .bodaIntro { - min-height: 100vh; - height: auto; - padding: 80px 24px; - } - - .vision__item { - flex-direction: column !important; - height: auto; - min-height: unset; - } - - .vision__text { - width: 100%; - padding: 32px 24px; - } - - .vision__image { - width: 100%; - height: 56vw; - min-height: 220px; - } } diff --git a/src/scss/page/_gnb.scss b/src/scss/page/_gnb.scss index 767c9af..046f9a7 100644 --- a/src/scss/page/_gnb.scss +++ b/src/scss/page/_gnb.scss @@ -51,20 +51,20 @@ .gnb__navLink { display: block; - padding: 24px 32px; - font-size: 16px; + padding: 24px clamp(14px, 1.7vw, 32px); + font-size: clamp(13px, 0.85vw, 16px); font-weight: 400; letter-spacing: 0.05em; color: $color-white; transition: color 0.2s; &:hover { - color: $color-cyan; + color: $color-blue; } } .gnb__navLink.isActive { - color: $color-cyan; + color: $color-blue; } .gnb__hamburger { @@ -102,37 +102,67 @@ .gnb__mobileNav { display: none; - position: absolute; - top: $gnb-height-mo; - left: 0; - width: 100%; - background: rgba($color-bg, 0.97); - backdrop-filter: blur(16px); - padding: 16px 0 24px; - transform: translateY(-100%); + position: fixed; + inset: 0; + z-index: 200; + background: $color-bg; + padding: 32px 32px 40px; opacity: 0; - transition: - transform 0.35s ease, - opacity 0.35s ease; pointer-events: none; + transition: opacity 0.35s ease; &.isOpen { - transform: translateY(0); opacity: 1; pointer-events: auto; } } +.gnb__mobileNavClose { + position: absolute; + top: 28px; + right: 28px; + width: 28px; + height: 28px; + background: none; + border: none; + padding: 0; + cursor: pointer; +} + +.gnb__mobileNavCloseLine { + position: absolute; + top: 50%; + left: 0; + width: 100%; + height: 1px; + background: $color-white; + + &:nth-child(1) { + transform: rotate(45deg); + } + &:nth-child(2) { + transform: rotate(-45deg); + } +} + .gnb__mobileNavList { display: flex; flex-direction: column; + justify-content: center; + height: 100%; + gap: clamp(20px, 6vh, 36px); } .gnb__mobileNavLink { display: block; - padding: 14px 24px; - font-size: 18px; + font-family: $font-serif; + font-style: italic; + font-size: clamp(28px, 8vw, 36px); font-weight: 400; - letter-spacing: 0.05em; + letter-spacing: 0.02em; color: $color-white; } + +.gnb__mobileNavLink.isActive { + color: $color-blue; +} diff --git a/src/scss/page/_intro.scss b/src/scss/page/_intro.scss index 8f687cc..d874a24 100644 --- a/src/scss/page/_intro.scss +++ b/src/scss/page/_intro.scss @@ -58,7 +58,7 @@ } .intro__sub { - font-size: clamp(16px, 2.5vw, 36px); + font-size: clamp(18px, 2.6vw, 50px); font-weight: 100; letter-spacing: 0.02em; color: $color-white; @@ -67,11 +67,12 @@ } .intro__title { - font-size: clamp(12px, 1.5vw, 20px); + font-size: clamp(32px, 5.2vw, 100px); font-weight: 700; - letter-spacing: 0.03em; + letter-spacing: 0.01em; text-transform: uppercase; color: $color-white; + line-height: 1.2; } @include mo { diff --git a/src/scss/page/_vision.scss b/src/scss/page/_vision.scss new file mode 100644 index 0000000..2a4d167 --- /dev/null +++ b/src/scss/page/_vision.scss @@ -0,0 +1,99 @@ +@use "../base/variable" as *; +@use "../base/mixin" as *; + +// Vision +.vision { + background: $color-bg; + padding: clamp(80px, 6.25vw, 120px) clamp(24px, 6.25vw, 120px); +} + +.vision__inner { + display: flex; + flex-direction: column; + gap: clamp(60px, 8vw, 140px); +} + +.vision__head { + display: flex; + flex-direction: column; + gap: clamp(16px, 1.5vw, 24px); + + .sectionTitle { + margin: 0; + } +} + +.vision__desc { + max-width: 560px; + font-size: clamp(13px, 1.1vw, 16px); + font-weight: 300; + line-height: 1.8; + color: $color-white; + opacity: 0.9; +} + +.vision__quote { + display: flex; + align-items: flex-start; + gap: 12px; + align-self: flex-end; + max-width: 640px; + + .mark { + font-size: clamp(40px, 4.2vw, 80px); + font-weight: 700; + line-height: 1; + color: $color-white; + } + + .text { + font-size: clamp(18px, 1.9vw, 32px); + font-weight: 300; + line-height: 1.4; + color: $color-white; + } +} + +.vision__keywordList { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + gap: clamp(24px, 3vw, 60px); + list-style: none; +} + +.vision__keywordItem { + display: flex; + flex-direction: column; + gap: 12px; + + .keyword { + font-size: clamp(28px, 3.1vw, 60px); + font-weight: 800; + letter-spacing: 0.01em; + color: $color-white; + line-height: 1; + } + + .desc { + font-size: clamp(12px, 0.8vw, 14px); + font-weight: 300; + color: rgba($color-white, 0.75); + } +} + +@include mo { + .vision { + padding: 60px 24px; + } + + .vision__quote { + align-self: stretch; + max-width: none; + } + + .vision__keywordList { + flex-direction: column; + gap: 40px; + } +}