// 앱 글로벌 스타일 — 디자인 시스템 로드 + **이 앱에만 해당하는** 최소 베이스. // // 색·타이포·간격 같은 디자인 값은 여기에 두지 않는다. 전부 `@fox/styles/tokens/`가 // 소유하며, 이 파일은 "@fox를 켜고, 이 앱의 셸 구조를 잡는다"까지만 한다. // 화면·컴포넌트 스타일은 각자의 `.module.scss`로 간다. @use "@fox/styles"; // 공용 컴포넌트 스타일. CSS Modules가 아니라 전역 BEM이라 여기서 한 번 불러온다 — // 그래야 React 밖(다른 프레임워크·순수 SCSS)에서도 같은 방식으로 쓸 수 있다. @use "@fox/styles/components"; // Pretendard — @fox 토큰이 패밀리명을 **리터럴 `Pretendard`로** 지정하므로(`font.family.*`), // 앱은 정확히 그 이름의 폰트를 공급해야 한다. `next/font/local`은 패밀리명을 // 해시(`__Pretendard_xxxx`)로 바꿔 그 리터럴과 영영 만나지 못해 쓸 수 없다 — 토큰은 Figma // export 자동 생성이라 이름을 코드 쪽에 맞추는 반대 방향도 불가능하다. // weight는 토큰이 쓰는 400·600·800에 더해, 어떤 CSS도 굵기를 지정하지 않는 자리(제목·`th`· // `strong` 등 UA 기본값)가 쓰는 700을 포함한다 — 없으면 700이 800으로 올라가 굵어진다. @font-face { font-family: "Pretendard"; font-style: normal; font-weight: 400; font-display: swap; src: url("/fonts/pretendard-regular.woff2") format("woff2"); } @font-face { font-family: "Pretendard"; font-style: normal; font-weight: 600; font-display: swap; src: url("/fonts/pretendard-semibold.woff2") format("woff2"); } @font-face { font-family: "Pretendard"; font-style: normal; font-weight: 700; font-display: swap; src: url("/fonts/pretendard-bold.woff2") format("woff2"); } @font-face { font-family: "Pretendard"; font-style: normal; font-weight: 800; font-display: swap; src: url("/fonts/pretendard-extrabold.woff2") format("woff2"); } // 앱 기본 서체 — @fox README가 정의한 호스트 앱 계약(`--app-font-sans`)의 실제 주입 지점이다. // 폰트 파일을 next/font가 아니라 위 `@font-face`가 공급하므로 변수도 여기서 정의한다. // 이 값과 @fox 토큰(`font.family.*`)이 지금은 둘 다 Pretendard라 화면 전체가 한 서체다. :root { --app-font-sans: "Pretendard"; } // 앱 셸 — 루트 레이아웃이 뷰포트 높이를 채우고 세로로 쌓이는 구조. // 푸터를 바닥에 붙이거나 본문 영역만 스크롤시키는 화면들이 이 전제에 기댄다. html, body { block-size: 100%; } body { display: flex; flex-direction: column; min-block-size: 100%; // @fox 밖 텍스트의 서체. 계약 변수를 거쳐 꽂으므로 서체를 갈 때는 위 `--app-font-sans` // 한 줄만 고치면 된다. @fox 컴포넌트는 이 값이 아니라 토큰(`Pretendard` 리터럴)을 쓰지만, // 지금은 둘이 같은 서체를 가리킨다. font-family: var(--app-font-sans, system-ui), system-ui, sans-serif; }