mirror of
https://github.com/hwanny1128/HGZero.git
synced 2025-12-06 16:06:23 +00:00
548 lines
11 KiB
Markdown
548 lines
11 KiB
Markdown
# 회의록 서비스 스타일 가이드
|
|
|
|
## 1. 디자인 철학
|
|
|
|
### 핵심 원칙
|
|
- **Mobile First**: 모바일 환경 우선 설계
|
|
- **깔끔한 미니멀리즘**: 정보의 명확한 계층 구조와 여백 활용
|
|
- **직관적 UX**: 사용자가 생각 없이 사용 가능한 인터페이스
|
|
- **일관성**: 모든 화면에서 동일한 디자인 패턴 적용
|
|
|
|
---
|
|
|
|
## 2. 컬러 시스템
|
|
|
|
### Primary Colors (주요 색상)
|
|
```css
|
|
--primary: #4DD5A7; /* 민트 그린 - 메인 액션, CTA */
|
|
--primary-dark: #3DBD95; /* 민트 그린 (진하게) - 호버, 액티브 */
|
|
--primary-light: #E8F9F3; /* 민트 그린 (연하게) - 배경, 하이라이트 */
|
|
```
|
|
|
|
### Semantic Colors (의미 색상)
|
|
```css
|
|
--success: #4DD5A7; /* 성공, 완료 */
|
|
--warning: #FFB74D; /* 경고, 임박 */
|
|
--error: #FF6B6B; /* 에러, 긴급 */
|
|
--info: #64B5F6; /* 정보, 알림 */
|
|
--ongoing: #FF9800; /* 진행 중 (주황) */
|
|
```
|
|
|
|
### Neutral Colors (중립 색상)
|
|
```css
|
|
--gray-900: #212121; /* 제목, 강조 텍스트 */
|
|
--gray-700: #616161; /* 본문 텍스트 */
|
|
--gray-500: #9E9E9E; /* 보조 텍스트 */
|
|
--gray-300: #E0E0E0; /* 구분선, 테두리 */
|
|
--gray-100: #F5F5F5; /* 배경 (연한 회색) */
|
|
--white: #FFFFFF; /* 카드, 모달 배경 */
|
|
```
|
|
|
|
### 색상 사용 가이드
|
|
- **Primary**: 주요 액션 버튼, 활성 탭, FAB
|
|
- **Success**: 완료 상태, 체크박스 체크됨
|
|
- **Warning**: 마감 임박 Todo, 경고 배지
|
|
- **Error**: 에러 메시지, 마감 지연 Todo
|
|
- **Gray**: 텍스트, 구분선, 비활성 요소
|
|
|
|
---
|
|
|
|
## 3. 타이포그래피
|
|
|
|
### 폰트 패밀리
|
|
```css
|
|
--font-family: -apple-system, BlinkMacSystemFont, "Segoe UI",
|
|
"Noto Sans KR", "Roboto", sans-serif;
|
|
```
|
|
|
|
### 폰트 크기 (Mobile First)
|
|
```css
|
|
/* Mobile (320px~768px) */
|
|
--font-h1: 24px; /* 페이지 제목 */
|
|
--font-h2: 20px; /* 섹션 제목 */
|
|
--font-h3: 18px; /* 서브 타이틀 */
|
|
--font-body: 16px; /* 본문 */
|
|
--font-small: 14px; /* 보조 정보 */
|
|
--font-caption: 12px; /* 캡션, 메타 정보 */
|
|
|
|
/* Tablet/Desktop (768px+) */
|
|
--font-h1-desktop: 32px;
|
|
--font-h2-desktop: 24px;
|
|
--font-h3-desktop: 20px;
|
|
--font-body-desktop: 16px;
|
|
```
|
|
|
|
### 폰트 굵기
|
|
```css
|
|
--font-weight-regular: 400;
|
|
--font-weight-medium: 500;
|
|
--font-weight-bold: 700;
|
|
```
|
|
|
|
### 사용 예시
|
|
- **제목 (H1)**: font-size: 24px, font-weight: 700, color: --gray-900
|
|
- **본문 (Body)**: font-size: 16px, font-weight: 400, color: --gray-700, line-height: 1.6
|
|
- **보조 정보 (Small)**: font-size: 14px, font-weight: 400, color: --gray-500
|
|
|
|
---
|
|
|
|
## 4. 간격 시스템 (Spacing)
|
|
|
|
### 기본 단위 (8px 그리드 시스템)
|
|
```css
|
|
--space-xs: 4px;
|
|
--space-sm: 8px;
|
|
--space-md: 16px;
|
|
--space-lg: 24px;
|
|
--space-xl: 32px;
|
|
--space-xxl: 48px;
|
|
```
|
|
|
|
### 사용 가이드
|
|
- **컴포넌트 내부 패딩**: 16px (--space-md)
|
|
- **카드 간격**: 16px (--space-md)
|
|
- **섹션 간격**: 24px (--space-lg)
|
|
- **페이지 여백**: 16px (Mobile), 24px (Tablet/Desktop)
|
|
|
|
---
|
|
|
|
## 5. 레이아웃 & 그리드
|
|
|
|
### 브레이크포인트
|
|
```css
|
|
--breakpoint-mobile: 320px;
|
|
--breakpoint-tablet: 768px;
|
|
--breakpoint-desktop: 1024px;
|
|
```
|
|
|
|
### 컨테이너 Max-Width
|
|
```css
|
|
--container-mobile: 100%;
|
|
--container-tablet: 768px;
|
|
--container-desktop: 1200px;
|
|
```
|
|
|
|
### 그리드 시스템
|
|
- **Mobile**: 4 columns (16px gutter)
|
|
- **Tablet**: 8 columns (16px gutter)
|
|
- **Desktop**: 12 columns (24px gutter)
|
|
|
|
---
|
|
|
|
## 6. 카드 디자인
|
|
|
|
### 카드 스타일
|
|
```css
|
|
.card {
|
|
background: var(--white);
|
|
border-radius: 12px;
|
|
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
|
|
padding: 16px;
|
|
transition: box-shadow 0.2s ease;
|
|
}
|
|
|
|
.card:hover {
|
|
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);
|
|
}
|
|
```
|
|
|
|
### 카드 변형
|
|
- **기본 카드**: 배경 흰색, 그림자 있음
|
|
- **강조 카드**: 배경 primary-light, 좌측 4px primary 보더
|
|
- **진행 중 카드**: 배경 흰색, 좌측 4px ongoing 보더
|
|
|
|
---
|
|
|
|
## 7. 버튼 디자인
|
|
|
|
### Primary Button (주요 액션)
|
|
```css
|
|
.btn-primary {
|
|
background: var(--primary);
|
|
color: var(--white);
|
|
padding: 12px 24px;
|
|
border-radius: 8px;
|
|
font-size: 16px;
|
|
font-weight: 500;
|
|
border: none;
|
|
transition: background 0.2s ease;
|
|
}
|
|
|
|
.btn-primary:hover {
|
|
background: var(--primary-dark);
|
|
}
|
|
```
|
|
|
|
### Secondary Button (보조 액션)
|
|
```css
|
|
.btn-secondary {
|
|
background: transparent;
|
|
color: var(--primary);
|
|
padding: 12px 24px;
|
|
border-radius: 8px;
|
|
font-size: 16px;
|
|
font-weight: 500;
|
|
border: 1px solid var(--primary);
|
|
}
|
|
|
|
.btn-secondary:hover {
|
|
background: var(--primary-light);
|
|
}
|
|
```
|
|
|
|
### Ghost Button (최소 강조)
|
|
```css
|
|
.btn-ghost {
|
|
background: transparent;
|
|
color: var(--gray-700);
|
|
padding: 8px 16px;
|
|
border-radius: 8px;
|
|
font-size: 14px;
|
|
border: none;
|
|
}
|
|
|
|
.btn-ghost:hover {
|
|
background: var(--gray-100);
|
|
}
|
|
```
|
|
|
|
### FAB (Floating Action Button)
|
|
```css
|
|
.fab {
|
|
width: 56px;
|
|
height: 56px;
|
|
background: var(--primary);
|
|
color: var(--white);
|
|
border-radius: 50%;
|
|
box-shadow: 0 4px 12px rgba(77, 213, 167, 0.4);
|
|
position: fixed;
|
|
bottom: 24px;
|
|
right: 24px;
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## 8. 배지 (Badges)
|
|
|
|
### 상태 배지
|
|
```css
|
|
/* 완료 */
|
|
.badge-complete {
|
|
background: var(--success);
|
|
color: var(--white);
|
|
padding: 4px 8px;
|
|
border-radius: 12px;
|
|
font-size: 12px;
|
|
}
|
|
|
|
/* 진행중 */
|
|
.badge-ongoing {
|
|
background: var(--ongoing);
|
|
color: var(--white);
|
|
padding: 4px 8px;
|
|
border-radius: 12px;
|
|
font-size: 12px;
|
|
animation: pulse 1.5s ease-in-out infinite;
|
|
}
|
|
|
|
/* 예정 */
|
|
.badge-scheduled {
|
|
background: var(--info);
|
|
color: var(--white);
|
|
padding: 4px 8px;
|
|
border-radius: 12px;
|
|
font-size: 12px;
|
|
}
|
|
|
|
/* 지연 */
|
|
.badge-overdue {
|
|
background: var(--error);
|
|
color: var(--white);
|
|
padding: 4px 8px;
|
|
border-radius: 12px;
|
|
font-size: 12px;
|
|
}
|
|
```
|
|
|
|
### 우선순위 배지
|
|
```css
|
|
/* 높음 */
|
|
.badge-high {
|
|
background: #FFEBEE;
|
|
color: #D32F2F;
|
|
border: 1px solid #EF9A9A;
|
|
}
|
|
|
|
/* 보통 */
|
|
.badge-medium {
|
|
background: #FFF3E0;
|
|
color: #F57C00;
|
|
border: 1px solid #FFCC80;
|
|
}
|
|
|
|
/* 낮음 */
|
|
.badge-low {
|
|
background: #E8F5E9;
|
|
color: #388E3C;
|
|
border: 1px solid #A5D6A7;
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## 9. 아이콘
|
|
|
|
### 아이콘 라이브러리
|
|
- **Material Icons** 또는 **Feather Icons** 권장
|
|
- 일관된 스타일 유지 (Outlined 또는 Rounded)
|
|
|
|
### 아이콘 크기
|
|
```css
|
|
--icon-sm: 16px; /* 인라인 아이콘 */
|
|
--icon-md: 24px; /* 기본 아이콘 */
|
|
--icon-lg: 32px; /* 강조 아이콘 */
|
|
```
|
|
|
|
### 주요 아이콘 매핑
|
|
- **회의**: 📅 calendar
|
|
- **Todo**: ✅ check-circle
|
|
- **녹음**: 🎙️ mic
|
|
- **참석자**: 👤 user
|
|
- **설정**: ⚙️ settings
|
|
- **검색**: 🔍 search
|
|
- **알림**: 🔔 bell
|
|
- **링크**: 🔗 link
|
|
|
|
---
|
|
|
|
## 10. 네비게이션
|
|
|
|
### 하단 네비게이션 (Mobile)
|
|
```css
|
|
.bottom-nav {
|
|
height: 64px;
|
|
background: var(--white);
|
|
border-top: 1px solid var(--gray-300);
|
|
box-shadow: 0 -2px 8px rgba(0, 0, 0, 0.08);
|
|
}
|
|
|
|
.nav-item {
|
|
flex: 1;
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
gap: 4px;
|
|
color: var(--gray-500);
|
|
}
|
|
|
|
.nav-item.active {
|
|
color: var(--primary);
|
|
}
|
|
```
|
|
|
|
### 탭 네비게이션
|
|
```css
|
|
.tab {
|
|
padding: 12px 16px;
|
|
color: var(--gray-500);
|
|
border-bottom: 2px solid transparent;
|
|
transition: all 0.2s ease;
|
|
}
|
|
|
|
.tab.active {
|
|
color: var(--primary);
|
|
border-bottom: 2px solid var(--primary);
|
|
font-weight: 500;
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## 11. 폼 요소
|
|
|
|
### Input Field
|
|
```css
|
|
.input {
|
|
width: 100%;
|
|
padding: 12px 16px;
|
|
border: 1px solid var(--gray-300);
|
|
border-radius: 8px;
|
|
font-size: 16px;
|
|
background: var(--white);
|
|
transition: border-color 0.2s ease;
|
|
}
|
|
|
|
.input:focus {
|
|
border-color: var(--primary);
|
|
outline: none;
|
|
box-shadow: 0 0 0 3px rgba(77, 213, 167, 0.1);
|
|
}
|
|
|
|
.input::placeholder {
|
|
color: var(--gray-500);
|
|
}
|
|
```
|
|
|
|
### Checkbox
|
|
```css
|
|
.checkbox {
|
|
width: 20px;
|
|
height: 20px;
|
|
border: 2px solid var(--gray-300);
|
|
border-radius: 4px;
|
|
transition: all 0.2s ease;
|
|
}
|
|
|
|
.checkbox:checked {
|
|
background: var(--primary);
|
|
border-color: var(--primary);
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## 12. 모달 & 다이얼로그
|
|
|
|
### 모달 오버레이
|
|
```css
|
|
.modal-overlay {
|
|
position: fixed;
|
|
top: 0;
|
|
left: 0;
|
|
width: 100%;
|
|
height: 100%;
|
|
background: rgba(0, 0, 0, 0.5);
|
|
backdrop-filter: blur(4px);
|
|
z-index: 1000;
|
|
}
|
|
```
|
|
|
|
### 모달 콘텐츠
|
|
```css
|
|
.modal {
|
|
background: var(--white);
|
|
border-radius: 16px 16px 0 0; /* Mobile: Bottom Sheet */
|
|
max-width: 480px;
|
|
padding: 24px;
|
|
box-shadow: 0 -4px 16px rgba(0, 0, 0, 0.16);
|
|
}
|
|
|
|
/* Desktop: Centered Modal */
|
|
@media (min-width: 768px) {
|
|
.modal {
|
|
border-radius: 16px;
|
|
margin: auto;
|
|
position: absolute;
|
|
top: 50%;
|
|
left: 50%;
|
|
transform: translate(-50%, -50%);
|
|
}
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## 13. 애니메이션
|
|
|
|
### 트랜지션
|
|
```css
|
|
--transition-fast: 0.15s ease;
|
|
--transition-normal: 0.2s ease;
|
|
--transition-slow: 0.3s ease;
|
|
```
|
|
|
|
### 주요 애니메이션
|
|
|
|
#### Fade In
|
|
```css
|
|
@keyframes fadeIn {
|
|
from { opacity: 0; }
|
|
to { opacity: 1; }
|
|
}
|
|
```
|
|
|
|
#### Slide Up (Bottom Sheet)
|
|
```css
|
|
@keyframes slideUp {
|
|
from { transform: translateY(100%); }
|
|
to { transform: translateY(0); }
|
|
}
|
|
```
|
|
|
|
#### Pulse (진행 중 배지)
|
|
```css
|
|
@keyframes pulse {
|
|
0%, 100% { opacity: 1; }
|
|
50% { opacity: 0.7; }
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## 14. 접근성 (Accessibility)
|
|
|
|
### 색상 대비
|
|
- **WCAG 2.1 Level AA** 준수
|
|
- 텍스트와 배경 대비율: 최소 4.5:1
|
|
- 큰 텍스트(18px+) 대비율: 최소 3:1
|
|
|
|
### 포커스 스타일
|
|
```css
|
|
:focus-visible {
|
|
outline: 2px solid var(--primary);
|
|
outline-offset: 2px;
|
|
}
|
|
```
|
|
|
|
### 터치 타겟
|
|
- 최소 크기: 44x44px (iOS), 48x48px (Android)
|
|
- 터치 타겟 간 최소 간격: 8px
|
|
|
|
---
|
|
|
|
## 15. 반응형 디자인
|
|
|
|
### Mobile First 접근
|
|
```css
|
|
/* Mobile (기본) */
|
|
.container {
|
|
padding: 16px;
|
|
}
|
|
|
|
/* Tablet (768px+) */
|
|
@media (min-width: 768px) {
|
|
.container {
|
|
padding: 24px;
|
|
}
|
|
}
|
|
|
|
/* Desktop (1024px+) */
|
|
@media (min-width: 1024px) {
|
|
.container {
|
|
padding: 32px;
|
|
}
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## 참조 이미지 분석 결과
|
|
|
|
### 확인된 디자인 특징 (reference/sampleimg 기반)
|
|
1. **Primary Color**: #4DD5A7 (민트 그린) - 모든 액션 버튼과 강조 요소에 사용
|
|
2. **카드 디자인**: 흰색 배경, 12px 둥근 모서리, 미세한 그림자
|
|
3. **타이포그래피**: 명확한 계층 구조, 충분한 여백
|
|
4. **아바타**: 원형, 다양한 색상 배경 (팀원 구분)
|
|
5. **배지**: 둥근 모서리, 명확한 색상 코딩 (진행 중=주황, 완료=민트)
|
|
6. **간격**: 16px 기본 간격 일관 적용
|
|
7. **섹션 구분**: 미세한 구분선 또는 배경색 차이로 구분
|
|
|
|
---
|
|
|
|
## 변경 이력
|
|
|
|
| 버전 | 날짜 | 작성자 | 변경 내용 |
|
|
|------|------|--------|----------|
|
|
| 1.0 | 2025-10-21 | 최유진 | 최초 작성 - reference/sampleimg 샘플 이미지 기반 스타일 가이드 작성 |
|