nexu-io--open-design
162 行
8.5 KiB
Markdown
162 行
8.5 KiB
Markdown
# GitHub에서 영감을 받은 디자인 시스템
|
|
|
|
> Category: 개발자 도구
|
|
> 코드 중심 플랫폼. 기능적 밀도, 청백색 정밀함, Primer 기반.
|
|
|
|
## 1. 비주얼 테마 & 분위기
|
|
|
|
GitHub의 화면은 장식되지 않고 설계되어 있습니다. 모든 픽셀이 하나의 태도를 선언합니다: 이것은 diff, 빌드, pull request를 중시하는 사람들을 위한 도구라고. 페이지 배경은 깔끔한 `#ffffff`(라이트) 또는 `#0d1117`(다크)이며, 콘텐츠는 여백 대신 얇은 테두리로 구분된 촘촘한 직사각형 패널 위에 배치됩니다. 정보 밀도 자체가 브랜드입니다 — 목록 행, 코드 줄, 저장소 헤더, 알림 카드가 모두 촘촘하게 배치되어 있어 파워 유저가 스크롤 없이 수백 개의 항목을 스캔할 수 있습니다.
|
|
|
|
시그니처 강조색은 링크와 주요 액션을 위한 **Primer 블루**(`#0969da`)와 병합 상태, 성공, 그리고 병합 버튼 자체를 위한 **GitHub 그린**(`#1a7f37`)입니다. 두 색상 모두 소비자 제품의 블루·그린보다 약간 차분하게 느껴집니다 — 촘촘한 회색 텍스트 위에서 읽힐 만큼 충분히 채도가 있으면서도, 한 화면에 여러 개가 나타날 때 배경으로 사라질 만큼 절제되어 있습니다.
|
|
|
|
타이포그래피는 전 제품에 걸쳐 **system-ui** 스택을 사용해 모든 OS에서 텍스트가 선명하게 렌더링되며, 코드에는 **SFMono / Menlo / Consolas**를 함께 사용합니다. 편집용 디스플레이 폰트는 없습니다; GitHub의 목소리는 당신이 이미 사용 중인 시스템의 목소리입니다.
|
|
|
|
**주요 특징:**
|
|
- 진정한 흰 캔버스(`#ffffff`) 또는 깊은 네이비-블랙(`#0d1117`) — 따뜻함도 색조도 없음
|
|
- 얇은 회색 테두리(`#d0d7de`)로 모든 패인과 패널을 정의
|
|
- Primer 블루(`#0969da`) — 링크/주요 액션; GitHub 그린(`#1a7f37`) — 성공/병합
|
|
- 산문에는 system-ui; 코드에는 SFMono — 사용자 정의 서체 없음
|
|
- 최소 패딩의 촘촘한 목록 행; 여백은 희소
|
|
- 16px / 24px의 Octicon 아이콘 — 단선, 기하학적, 일관적
|
|
- 강한 색상 의미를 가진 알약형 상태 배지
|
|
|
|
## 2. 색상 팔레트 & 역할
|
|
|
|
### 주요 색상
|
|
- **Canvas Default** (`#ffffff`): 기본 페이지 배경, 라이트 테마.
|
|
- **Canvas Subtle** (`#f6f8fa`): 보조 서페이스, 사이드바, 입력 배경, 헤더 스트립.
|
|
- **Canvas Inset** (`#eaeef2`): 코드 블록 배경, 깊은 인셋 서페이스.
|
|
- **Fg Default** (`#1f2328`): 기본 텍스트, 헤드라인, 잉크.
|
|
- **Fg Muted** (`#656d76`): 보조 텍스트, 캡션, 파일 경로.
|
|
|
|
### 브랜드 강조색
|
|
- **Primer Blue** (`#0969da`): 링크, 주요 CTA, 포커스 링 기반 — 범용 인터랙티브 색상.
|
|
- **Primer Blue Hover** (`#0550ae`): 주요 블루의 호버/눌림 상태.
|
|
- **Accent Subtle** (`#ddf4ff`): 콜아웃, 정보 배너를 위한 소프트 블루 서페이스.
|
|
|
|
### 의미론적 색상
|
|
- **Success / Merge Green** (`#1a7f37`): 병합된 PR, 성공 배지, 병합 버튼.
|
|
- **Success Subtle** (`#dafbe1`): 성공 서페이스 틴트.
|
|
- **Open Green** (`#1a7f37`): "열린" 이슈/PR 상태.
|
|
- **Closed / Danger Red** (`#cf222e`): 닫힌 PR, 파괴적 액션, 유효성 검사 오류.
|
|
- **Danger Subtle** (`#ffebe9`): 오류 배너 서페이스.
|
|
- **Attention / Warning Yellow** (`#9a6700`): 황색 서페이스 위의 경고 텍스트.
|
|
- **Attention Subtle** (`#fff8c5`): 경고 배너 서페이스.
|
|
- **Done Purple** (`#8250df`): 병합 후 보관됨, "완료" 상태, 프리미엄 배지.
|
|
- **Sponsor Pink** (`#bf3989`): 스폰서 하트, GitHub 스폰서 브랜드.
|
|
|
|
### 테두리 & 구분선
|
|
- **Border Default** (`#d0d7de`): 표준 얇은 테두리, 패널 외곽선.
|
|
- **Border Muted** (`#d8dee4`): 패널 내부 구분선.
|
|
- **Border Subtle** (`#eaeef2`): 희미한 테이블 행 구분선.
|
|
|
|
### 다크 테마
|
|
- **Dark Canvas** (`#0d1117`): 다크 페이지 배경.
|
|
- **Dark Surface** (`#161b22`): 사이드바, 헤더, 보조 서페이스.
|
|
- **Dark Border** (`#30363d`): 표준 다크 모드 테두리.
|
|
- **Dark Fg** (`#e6edf3`): 다크 배경 위의 기본 텍스트.
|
|
|
|
## 3. 타이포그래피 규칙
|
|
|
|
### 폰트 패밀리
|
|
- **본문 / UI**: `-apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif`
|
|
- **코드 / 모노**: `ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace`
|
|
- **이모지**: `"Apple Color Emoji", "Segoe UI Emoji"`
|
|
|
|
### 계층 구조
|
|
|
|
| 역할 | 폰트 | 크기 | 굵기 | 행 높이 | 자간 | 비고 |
|
|
|------|------|------|--------|-------------|----------------|-------|
|
|
| Display | system-ui | 32px (2rem) | 600 | 1.25 | -0.01em | 저장소 헤더, 마케팅 히어로 |
|
|
| H1 | system-ui | 24px (1.5rem) | 600 | 1.25 | normal | 페이지 제목 |
|
|
| H2 | system-ui | 20px (1.25rem) | 600 | 1.25 | normal | 섹션 제목 |
|
|
| H3 | system-ui | 16px (1rem) | 600 | 1.25 | normal | 소섹션, 패널 헤더 |
|
|
| Body | system-ui | 14px (0.875rem) | 400 | 1.5 | normal | 기본 텍스트 크기 — 16px가 아님 |
|
|
| Body Small | system-ui | 12px (0.75rem) | 400 | 1.4 | normal | 캡션, 파일 메타데이터 |
|
|
| Code | SFMono | 12px (0.75rem) | 400 | 1.45 | normal | 코드 블록, diff |
|
|
| Code Inline | SFMono | 0.85em | 400 | inherit | normal | 인라인 `code` 스팬 |
|
|
|
|
### 원칙
|
|
- **14px 본문, 16px 아님**: GitHub의 산문 밀도는 그 정체성입니다. 하나의 뷰포트에 더 많은 행을 담기 위해 14px로 읽힙니다.
|
|
- **굵기 이진법**: 기본적으로 모든 것은 400; 헤드라인과 강조에는 600. 500도 700도 없음.
|
|
- **시스템 폰트 항상**: 크롬을 위해 웹폰트를 로드하지 않음 — 느린 연결에서도 텍스트가 즉시 렌더링되어야 함.
|
|
|
|
## 4. 컴포넌트 스타일링
|
|
|
|
### 버튼
|
|
|
|
**Primary (그린)**
|
|
- Background: `#1f883d`
|
|
- Text: `#ffffff`
|
|
- Border: 1px solid `rgba(31, 35, 40, 0.15)`
|
|
- Padding: 5px 16px
|
|
- Radius: 6px
|
|
- Shadow: `0 1px 0 rgba(31,35,40,0.1)`
|
|
- Hover: background `#1a7f37`
|
|
- 사용: "저장소 만들기", "Pull request 병합"
|
|
|
|
**Default**
|
|
- Background: `#f6f8fa`
|
|
- Text: `#1f2328`
|
|
- Border: 1px solid `#d0d7de`
|
|
- Padding: 5px 16px
|
|
- Radius: 6px
|
|
- Hover: background `#f3f4f6`, border `#d0d7de`
|
|
|
|
**Outline (블루 링크 스타일)**
|
|
- Background: `#ffffff`
|
|
- Text: `#0969da`
|
|
- Border: 1px solid `#d0d7de`
|
|
- Hover: background `#0969da`, text `#ffffff`
|
|
|
|
**Danger**
|
|
- Background: `#ffffff`
|
|
- Text: `#cf222e`
|
|
- Border: 1px solid `#d0d7de`
|
|
- Hover: background `#a40e26`, text `#ffffff`, border `#a40e26`
|
|
|
|
### 카드 / 박스
|
|
- Background: `#ffffff`
|
|
- Border: 1px solid `#d0d7de`
|
|
- Radius: 6px
|
|
- Padding: 16px (헤더) + 16px (본문)
|
|
- 헤더에는 하단 테두리가 있는 `#f6f8fa` 스트립이 있음.
|
|
|
|
### 입력 필드
|
|
- Background: `#ffffff`
|
|
- Border: 1px solid `#d0d7de`
|
|
- Radius: 6px
|
|
- Padding: 5px 12px
|
|
- Focus: border `#0969da`, ring `0 0 0 3px rgba(9,105,218,0.3)`
|
|
|
|
### 상태 알약 (이슈 / PR)
|
|
- **Open**: background `#1a7f37`, 흰 텍스트, padding 4px 10px, radius 9999px.
|
|
- **Closed**: background `#cf222e`, 흰 텍스트.
|
|
- **Merged**: background `#8250df`, 흰 텍스트.
|
|
- **Draft**: background `#6e7781`, 흰 텍스트.
|
|
|
|
### 레이블 (이슈/PR의 태그)
|
|
- Padding: 0 7px
|
|
- Radius: 9999px
|
|
- Font: 12px / 500
|
|
- 배경과 텍스트는 프로그래밍 방식으로 결정됨 (레이블 색상 → 대비를 위해 텍스트 색상 계산).
|
|
|
|
## 5. 간격 & 레이아웃
|
|
|
|
- **기본 단위**: 4px. 간격 스케일: 4, 8, 12, 16, 24, 32, 40, 48.
|
|
- **페이지 최대 너비**: 1280px (`Container-xl`).
|
|
- **사이드바**: 데스크탑에서 296px, 1012px 이하에서 접힘.
|
|
- **행 패딩**: 수평 16px, 수직 12px (목록은 의도적으로 촘촘하게 설계).
|
|
|
|
## 6. 모션
|
|
|
|
- **지속 시간**: 호버에 80ms; 메뉴/팝오버 열기에 200ms.
|
|
- **이징**: 열기에 `ease-out`, 닫기에 `ease-in`.
|
|
- **피해야 할 것**: 페이지 로드 애니메이션, 패럴랙스, 지속적인 마이크로 인터랙션. 요소는 나타나는 것이지, 퍼포먼스를 하지 않습니다.
|
|
|
|
## 7. 사용 가이드라인
|
|
|
|
- 촘촘한 목록, 테두리가 있는 박스, 시스템 타이포그래피를 함께 유지하십시오; 고립된 그린 버튼만으로는 GitHub 같은 제품 표면을 만들기에 충분하지 않습니다.
|
|
- 저장소 구축 액션에는 그린, 링크와 포커스에는 블루, 이슈·PR·워크플로 상태에만 레드/퍼플/그레이를 사용하십시오.
|
|
- 장식적인 그림자나 대형 마케팅 스타일 카드보다는 조용한 크롬, 명시적인 테두리, 컴팩트한 간격을 선호하십시오.
|