hgzero/design/style-guide.md

1185 lines
29 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 회의록 작성 및 공유 개선 서비스 - 스타일 가이드
**버전**: 1.0
**작성일**: 2025-10-15
**작성자**: 유진 (Frontend Developer)
**레퍼런스**: 클로바노트 (Naver)
---
## 목차
1. [브랜드 아이덴티티](#1-브랜드-아이덴티티)
2. [디자인 원칙](#2-디자인-원칙)
3. [컬러 시스템](#3-컬러-시스템)
4. [타이포그래피](#4-타이포그래피)
5. [간격 시스템](#5-간격-시스템)
6. [컴포넌트 스타일](#6-컴포넌트-스타일)
7. [반응형 브레이크포인트](#7-반응형-브레이크포인트)
8. [회의록 서비스 특화 컴포넌트](#8-회의록-서비스-특화-컴포넌트)
9. [인터랙션 패턴](#9-인터랙션-패턴)
10. [변경 이력](#10-변경-이력)
---
## 1. 브랜드 아이덴티티
### 1.1 디자인 컨셉
**"Smart Collaboration"** - 스마트한 협업 도구
회의록 작성 및 공유 서비스는 AI 기반의 자동화와 실시간 협업을 통해 업무 효율을 극대화하는 스마트한 협업 플랫폼입니다.
### 1.2 핵심 가치
| 가치 | 설명 | 디자인 반영 |
|------|------|------------|
| **정확성** | 누락 없이 정확하게 기록 | 명확한 시각적 위계, 검증 상태 표시 |
| **효율성** | AI 자동화로 작성 부담 감소 | AI 제안 영역, 자동 완성 패턴 |
| **협업** | 실시간 동기화 및 공유 | 협업 인디케이터, 커서 표시 |
| **접근성** | 업무 지식 없이도 사용 가능 | 전문용어 설명, 친근한 일러스트레이션 |
### 1.3 브랜드 성격
- **전문적이면서도 친근한**: 업무용 도구이지만 사용하기 쉬운
- **신뢰감 + 혁신성**: AI 기능의 정확성과 미래지향적 이미지
- **협업 중심**: 개인이 아닌 팀의 성공을 지원
### 1.4 비주얼 무드
- **색상**: 밝고 활기찬 청록색 (혁신, 성장, 활력)
- **형태**: 둥근 모서리, 부드러운 곡선 (친근함, 접근성)
- **일러스트레이션**: 캐릭터 기반, 간결하고 현대적 (클로바노트 스타일 참조)
---
## 2. 디자인 원칙
### 2.1 명확성 (Clarity)
**사용자가 무엇을 해야 하는지 즉시 이해 가능해야 합니다.**
- 명확한 시각적 위계 유지
- 혼란스러운 요소 최소화
- 액션 버튼의 목적을 분명히 표현
- 에러 메시지는 문제와 해결 방법을 함께 제시
**예시**:
- ✅ "회의록을 저장하지 못했습니다. 네트워크 연결을 확인하고 다시 시도해주세요."
- ❌ "오류가 발생했습니다."
### 2.2 효율성 (Efficiency)
**최소한의 클릭으로 목표를 달성할 수 있어야 합니다.**
- 자주 사용하는 기능은 빠른 접근 제공 (FAB, 단축키)
- 불필요한 단계 제거
- 자동 완성 및 제안 기능 활용
- 키보드 단축키 지원
**예시**:
- Ctrl+N: 새 회의 예약
- Ctrl+S: 회의록 저장
- Ctrl+F: 검색
### 2.3 일관성 (Consistency)
**동일한 패턴과 예측 가능한 동작을 유지해야 합니다.**
- 동일한 기능은 동일한 아이콘과 레이블 사용
- 색상, 타이포그래피, 간격의 일관된 적용
- 네비게이션 구조 일관성 유지
- 브랜드 아이덴티티 유지
### 2.4 피드백 (Feedback)
**모든 액션에 즉각적이고 명확한 피드백을 제공해야 합니다.**
- 버튼 클릭 시 시각적 피드백 (호버, 액티브 상태)
- 로딩 상태 명확히 표시 (스켈레톤 UI, 스피너)
- 성공/실패 토스트 알림
- 실시간 저장 상태 표시 ("저장됨", "저장 중...")
### 2.5 접근성 (Accessibility)
**모든 사용자가 서비스를 쉽게 이용할 수 있어야 합니다.**
- WCAG 2.1 Level AA 준수
- 키보드 네비게이션 지원
- 스크린 리더 호환
- 충분한 색상 대비 (4.5:1 이상)
- 터치 영역 최소 44x44px
### 2.6 협업 중심 (Collaboration-First)
**실시간 협업이 핵심 경험이 되어야 합니다.**
- 다른 사용자의 활동을 명확히 표시 (커서, 아바타)
- 실시간 변경 사항 즉시 반영
- 충돌 방지 및 해결 메커니즘
- 버전 관리 및 변경 이력 추적
---
## 3. 컬러 시스템
### 3.1 Primary Color (주요 액션, 브랜드)
**Teal/Emerald** - 혁신, 성장, 활력을 상징
| 이름 | HEX | RGB | 사용처 |
|------|-----|-----|--------|
| Primary-Light | `#4DFFDB` | rgb(77, 255, 219) | 호버, 비활성화 상태 |
| **Primary-Main** | **`#00D9B1`** | **rgb(0, 217, 177)** | **주요 버튼, 링크, 강조** |
| Primary-Dark | `#00A88A` | rgb(0, 168, 138) | 눌림 상태, 강조 |
**사용 예시**:
- Primary 버튼 배경
- 링크 텍스트
- 체크박스, 라디오 버튼 선택 상태
- 진행률 바
- FAB (Floating Action Button)
### 3.2 Secondary Color (보조, 협업 강조)
**Indigo** - 협업, 신뢰, 전문성을 상징
| 이름 | HEX | RGB | 사용처 |
|------|-----|-----|--------|
| Secondary-Light | `#A5B4FC` | rgb(165, 180, 252) | 배경, 비활성화 |
| **Secondary-Main** | **`#6366F1`** | **rgb(99, 102, 241)** | **보조 버튼, 협업 요소** |
| Secondary-Dark | `#4F46E5` | rgb(79, 70, 229) | 강조 |
**사용 예시**:
- 협업 인디케이터 (다른 사용자 커서)
- 보조 버튼
- 배지 (검증 중 상태)
- 알림 아이콘
### 3.3 Semantic Colors (상태 표현)
#### Success (성공, 완료)
| 이름 | HEX | RGB | 사용처 |
|------|-----|-----|--------|
| Success-Light | `#6EE7B7` | rgb(110, 231, 183) | 배경 |
| **Success-Main** | **`#10B981`** | **rgb(16, 185, 129)** | **완료, 검증 완료** |
| Success-Dark | `#059669` | rgb(5, 150, 105) | 강조 |
#### Warning (경고, 주의)
| 이름 | HEX | RGB | 사용처 |
|------|-----|-----|--------|
| Warning-Light | `#FCD34D` | rgb(252, 211, 77) | 배경 |
| **Warning-Main** | **`#F59E0B`** | **rgb(245, 158, 11)** | **경고, 작성 중** |
| Warning-Dark | `#D97706` | rgb(217, 119, 6) | 강조 |
#### Error (오류, 실패)
| 이름 | HEX | RGB | 사용처 |
|------|-----|-----|--------|
| Error-Light | `#FCA5A5` | rgb(252, 165, 165) | 배경 |
| **Error-Main** | **`#EF4444`** | **rgb(239, 68, 68)** | **오류, 긴급** |
| Error-Dark | `#DC2626` | rgb(220, 38, 38) | 강조 |
#### Info (정보, 알림)
| 이름 | HEX | RGB | 사용처 |
|------|-----|-----|--------|
| Info-Light | `#93C5FD` | rgb(147, 197, 253) | 배경 |
| **Info-Main** | **`#3B82F6`** | **rgb(59, 130, 246)** | **정보, 알림** |
| Info-Dark | `#2563EB` | rgb(37, 99, 235) | 강조 |
### 3.4 Neutral Colors (배경, 텍스트, 테두리)
| 이름 | HEX | RGB | 사용처 |
|------|-----|-----|--------|
| Gray-50 | `#F9FAFB` | rgb(249, 250, 251) | 페이지 배경 |
| Gray-100 | `#F3F4F6` | rgb(243, 244, 246) | 카드 배경, 호버 |
| Gray-200 | `#E5E7EB` | rgb(229, 231, 235) | 테두리 |
| Gray-300 | `#D1D5DB` | rgb(209, 213, 219) | 비활성화 테두리 |
| Gray-400 | `#9CA3AF` | rgb(156, 163, 175) | 플레이스홀더 |
| Gray-500 | `#6B7280` | rgb(107, 114, 128) | 보조 텍스트 |
| Gray-600 | `#4B5563` | rgb(75, 85, 99) | 본문 텍스트 |
| Gray-700 | `#374151` | rgb(55, 65, 81) | 제목 |
| Gray-800 | `#1F2937` | rgb(31, 41, 55) | 강조 제목 |
| Gray-900 | `#111827` | rgb(17, 24, 39) | 최고 강조 |
| White | `#FFFFFF` | rgb(255, 255, 255) | 카드, 모달 배경 |
| Black | `#000000` | rgb(0, 0, 0) | 절대 검정 (거의 사용 안 함) |
### 3.5 다크모드 (선택적)
다크모드를 지원하는 경우 다음 색상을 사용합니다.
| 요소 | 라이트모드 | 다크모드 |
|------|-----------|---------|
| 페이지 배경 | Gray-50 | Gray-900 |
| 카드 배경 | White | Gray-800 |
| 본문 텍스트 | Gray-600 | Gray-100 |
| 제목 | Gray-900 | Gray-50 |
| 테두리 | Gray-200 | Gray-700 |
| Primary | #00D9B1 | #22D3B0 (밝기 조정) |
### 3.6 색상 사용 가이드
#### 텍스트 색상
- **제목**: Gray-900 (라이트), Gray-50 (다크)
- **본문**: Gray-600 (라이트), Gray-100 (다크)
- **보조 텍스트**: Gray-500
- **플레이스홀더**: Gray-400
- **링크**: Primary-Main (호버 시 Primary-Dark)
- **에러 텍스트**: Error-Main
#### 배경 색상
- **페이지**: Gray-50 (라이트), Gray-900 (다크)
- **카드**: White (라이트), Gray-800 (다크)
- **호버**: Gray-100
- **선택**: Primary-Light (투명도 20%)
#### 테두리 색상
- **기본**: Gray-200
- **호버**: Gray-300
- **포커스**: Primary-Main (2px)
- **에러**: Error-Main
---
## 4. 타이포그래피
### 4.1 폰트 패밀리
#### Primary Font (본문 및 UI)
**한글**: Pretendard
- 깔끔한 고딕 계열
- 뛰어난 가독성
- 다양한 굵기 지원 (100~900)
- 시스템 폰트와 유사한 렌더링
**영문/숫자**: Inter
- 웹 환경 최적화
- 명확한 문자 구분 (l, I, 1 등)
- Pretendard와 조화로운 조합
**폰트 스택**:
```css
font-family: 'Pretendard', 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Apple SD Gothic Neo', sans-serif;
```
#### Monospace Font (코드, 데이터)
**Fira Code, Consolas**
- 코드 스니펫
- API 응답
- 로그, 에러 메시지
**폰트 스택**:
```css
font-family: 'Fira Code', 'Consolas', 'Monaco', 'Courier New', monospace;
```
### 4.2 폰트 크기 스케일
**1.25 배율 기반**
| 레벨 | 이름 | 크기 (px / rem) | 사용처 |
|------|------|----------------|--------|
| 1 | Display | 48px / 3rem | 랜딩 페이지 메인 제목 |
| 2 | H1 | 36px / 2.25rem | 페이지 제목 |
| 3 | H2 | 30px / 1.875rem | 주요 섹션 제목 |
| 4 | H3 | 24px / 1.5rem | 서브 섹션 제목 |
| 5 | H4 | 20px / 1.25rem | 카드 제목, 작은 섹션 |
| 6 | Body-Large | 18px / 1.125rem | 강조 본문, 리드 텍스트 |
| 7 | **Body** | **16px / 1rem** | **기본 본문 (기준점)** |
| 8 | Body-Small | 14px / 0.875rem | 보조 정보, 캡션 |
| 9 | Caption | 12px / 0.75rem | 작은 라벨, 타임스탬프 |
### 4.3 폰트 굵기 (Font Weight)
| 레벨 | 값 | 사용처 |
|------|---|--------|
| Light | 300 | 보조 정보, 긴 본문 (선택적) |
| **Regular** | **400** | **기본 본문** |
| Medium | 500 | 강조 본문, 버튼 텍스트 |
| SemiBold | 600 | 제목 (H3, H4), 중요 정보 |
| Bold | 700 | 큰 제목 (H1, H2), 최고 강조 |
### 4.4 행간 (Line Height)
| 이름 | 값 | 사용처 |
|------|---|--------|
| Tight | 1.25 | 큰 제목 (Display, H1, H2) |
| **Normal** | **1.5** | **본문 텍스트 (기본)** |
| Relaxed | 1.75 | 긴 본문, 읽기 편안함 필요 시 |
### 4.5 자간 (Letter Spacing)
| 이름 | 값 | 사용처 |
|------|---|--------|
| Tight | -0.02em | 큰 제목 (Display, H1) |
| **Normal** | **0** | **본문 (기본)** |
| Wide | 0.02em | 작은 캡션, 레이블 (대문자) |
### 4.6 텍스트 스타일 예시
#### Display
```css
font-size: 48px;
font-weight: 700;
line-height: 1.25;
letter-spacing: -0.02em;
```
#### H1
```css
font-size: 36px;
font-weight: 700;
line-height: 1.25;
letter-spacing: -0.02em;
```
#### H2
```css
font-size: 30px;
font-weight: 600;
line-height: 1.25;
letter-spacing: 0;
```
#### H3
```css
font-size: 24px;
font-weight: 600;
line-height: 1.5;
letter-spacing: 0;
```
#### Body (기본)
```css
font-size: 16px;
font-weight: 400;
line-height: 1.5;
letter-spacing: 0;
```
#### Caption
```css
font-size: 12px;
font-weight: 400;
line-height: 1.5;
letter-spacing: 0.02em;
```
---
## 5. 간격 시스템
### 5.1 기본 단위
**8px 기반 시스템**
모든 간격은 8의 배수를 사용하여 일관성과 시각적 리듬을 유지합니다.
### 5.2 스케일
| 레벨 | 값 (px / rem) | 사용처 |
|------|--------------|--------|
| 0 | 0px / 0 | 간격 없음 |
| 1 | 4px / 0.25rem | 최소 간격 (아이콘-텍스트) |
| 2 | 8px / 0.5rem | 작은 간격 (인라인 요소) |
| 3 | 12px / 0.75rem | 밀접한 요소 (버튼 내부) |
| **4** | **16px / 1rem** | **기본 간격** |
| 5 | 20px / 1.25rem | 적당한 간격 |
| 6 | 24px / 1.5rem | 컴포넌트 간 |
| 8 | 32px / 2rem | 섹션 내부 |
| 10 | 40px / 2.5rem | 섹션 간 |
| 12 | 48px / 3rem | 큰 섹션 간 |
| 16 | 64px / 4rem | 페이지 여백 |
| 20 | 80px / 5rem | 대형 섹션 |
### 5.3 컴포넌트별 간격
#### 버튼
- **패딩**: 12px (상하) × 24px (좌우) - 중형
- **패딩 (소형)**: 8px (상하) × 16px (좌우)
- **패딩 (대형)**: 16px (상하) × 32px (좌우)
- **아이콘-텍스트 간격**: 8px
#### 입력 필드
- **패딩**: 12px (상하) × 16px (좌우)
- **레이블-필드 간격**: 8px
#### 카드
- **패딩**: 24px
- **카드 간 간격**: 16px (그리드), 24px (리스트)
#### 모달
- **패딩**: 32px
- **헤더-본문 간격**: 24px
- **본문-푸터 간격**: 32px
#### 페이지 여백
- **데스크탑**: 64px (좌우)
- **태블릿**: 32px (좌우)
- **모바일**: 24px (좌우)
### 5.4 컨테이너 최대 너비
| 크기 | 최대 너비 | 사용처 |
|------|---------|--------|
| Small | 640px | 폼, 로그인 화면 |
| Medium | 768px | 템플릿 선택 |
| Large | 1024px | 회의 예약 |
| XLarge | 1280px | 대시보드 |
| 2XLarge | 1536px | 회의 진행 (에디터) |
| Full | 100% | 풀 레이아웃 |
---
## 6. 컴포넌트 스타일
### 6.1 버튼 (Button)
#### Primary Button (주요 액션)
**스타일**:
- 배경: Primary-Main (#00D9B1)
- 텍스트: White
- 패딩: 12px (상하) × 24px (좌우)
- 테두리 반경: 8px
- 폰트: Medium (500), 16px
- 그림자: 없음 (기본), 0 2px 4px rgba(0, 0, 0, 0.1) (호버)
**상태**:
- **Hover**: 배경 Primary-Light + transform: translateY(-1px) + 그림자 증가
- **Active**: 배경 Primary-Dark + transform: scale(0.98)
- **Disabled**: 배경 Gray-300 + 텍스트 Gray-500 + 커서 not-allowed
**코드 예시**:
```css
.btn-primary {
background-color: #00D9B1;
color: white;
padding: 12px 24px;
border-radius: 8px;
font-weight: 500;
font-size: 16px;
transition: all 150ms ease-out;
}
.btn-primary:hover {
background-color: #4DFFDB;
transform: translateY(-1px);
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}
.btn-primary:active {
background-color: #00A88A;
transform: scale(0.98);
}
.btn-primary:disabled {
background-color: #D1D5DB;
color: #6B7280;
cursor: not-allowed;
}
```
#### Secondary Button (보조 액션)
**스타일**:
- 배경: Transparent
- 텍스트: Primary-Main
- 테두리: 1px solid Primary-Main
- 패딩: 12px × 24px
- 테두리 반경: 8px
**상태**:
- **Hover**: 배경 Primary-Main (투명도 10%)
- **Active**: 배경 Primary-Main (투명도 20%)
- **Disabled**: 테두리 Gray-300 + 텍스트 Gray-400
#### Text Button (덜 중요한 액션)
**스타일**:
- 배경: Transparent
- 텍스트: Gray-700
- 패딩: 8px × 16px
- 테두리 반경: 8px
**상태**:
- **Hover**: 배경 Gray-100
- **Active**: 배경 Gray-200
#### Icon Button
**스타일**:
- 크기: 40×40px (중형), 32×32px (소형), 48×48px (대형)
- 테두리 반경: 50% (원형) 또는 8px (사각형)
- 아이콘 크기: 20px (중형), 16px (소형), 24px (대형)
- 배경: Transparent
**상태**:
- **Hover**: 배경 Gray-100
- **Active**: 배경 Gray-200
#### Floating Action Button (FAB)
**스타일**:
- 크기: 56×56px
- 테두리 반경: 50% (완전 원형)
- 배경: Primary-Main
- 아이콘: White, 24px
- 그림자: 0 4px 12px rgba(0, 0, 0, 0.15)
- 위치: 우측 하단 고정 (16px 여백)
**상태**:
- **Hover**: 그림자 0 6px 16px rgba(0, 0, 0, 0.2) + transform: translateY(-2px)
- **Active**: transform: scale(0.95)
### 6.2 입력 필드 (Input Field)
#### Text Input
**스타일**:
- 높이: 48px
- 패딩: 12px (상하) × 16px (좌우)
- 테두리: 1px solid Gray-300
- 테두리 반경: 8px
- 배경: White
- 폰트: Regular, 16px
- 플레이스홀더: Gray-400
**상태**:
- **Focus**: 테두리 Primary-Main 2px + outline 4px Primary-Main (투명도 20%)
- **Error**: 테두리 Error-Main + 하단 에러 메시지 (Error-Main, 14px)
- **Disabled**: 배경 Gray-100 + 텍스트 Gray-400 + 커서 not-allowed
- **Success**: 테두리 Success-Main (선택적)
**코드 예시**:
```css
.input {
height: 48px;
padding: 12px 16px;
border: 1px solid #D1D5DB;
border-radius: 8px;
font-size: 16px;
transition: all 150ms ease-out;
}
.input:focus {
border-color: #00D9B1;
border-width: 2px;
outline: 4px solid rgba(0, 217, 177, 0.2);
}
.input.error {
border-color: #EF4444;
}
.input:disabled {
background-color: #F3F4F6;
color: #9CA3AF;
cursor: not-allowed;
}
```
#### Textarea
**스타일**:
- 최소 높이: 120px
- 패딩: 12px × 16px
- 나머지는 Text Input과 동일
- resize: vertical (세로 크기 조절 가능)
#### Select / Dropdown
**스타일**:
- Input과 동일
- 우측 아이콘: Chevron Down, 16px, Gray-500
### 6.3 카드 (Card)
**스타일**:
- 배경: White
- 테두리: 1px solid Gray-200 (선택적, 없을 수도 있음)
- 테두리 반경: 12px
- 패딩: 24px
- 그림자: 0 1px 3px rgba(0, 0, 0, 0.1) (기본)
**상태 (인터랙티브 카드)**:
- **Hover**: 그림자 0 4px 12px rgba(0, 0, 0, 0.15) + transform: translateY(-2px)
- **Active**: 그림자 0 1px 2px rgba(0, 0, 0, 0.1) + transform: scale(0.99)
**코드 예시**:
```css
.card {
background-color: white;
border: 1px solid #E5E7EB;
border-radius: 12px;
padding: 24px;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
transition: all 200ms ease-out;
}
.card.interactive:hover {
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
transform: translateY(-2px);
}
```
### 6.4 모달 (Modal)
**스타일**:
- 배경: White
- 테두리 반경: 16px
- 패딩: 32px
- 최대 너비: 600px (중형), 800px (대형), 480px (소형)
- 그림자: 0 20px 25px rgba(0, 0, 0, 0.15)
**백드롭 (Backdrop)**:
- 배경: rgba(0, 0, 0, 0.5)
- 클릭 시 모달 닫기 (선택적)
**애니메이션**:
- 등장: Fade In (200ms) + Scale (0.95 → 1.0)
- 사라짐: Fade Out (150ms) + Scale (1.0 → 0.95)
### 6.5 토스트 알림 (Toast)
**스타일**:
- 배경: White
- 테두리 반경: 8px
- 패딩: 16px × 20px
- 최대 너비: 400px
- 그림자: 0 4px 12px rgba(0, 0, 0, 0.15)
- 위치: 우측 상단 (16px 여백)
**타입별 색상**:
- **Success**: 좌측 테두리 4px Success-Main + Success 아이콘
- **Error**: 좌측 테두리 4px Error-Main + Error 아이콘
- **Warning**: 좌측 테두리 4px Warning-Main + Warning 아이콘
- **Info**: 좌측 테두리 4px Info-Main + Info 아이콘
**동작**:
- 자동 사라짐: 4초 후
- 닫기 버튼: 우측 상단 X 아이콘
- 애니메이션: 우측에서 슬라이드 인
### 6.6 배지 (Badge)
**스타일**:
- 패딩: 4px (상하) × 12px (좌우)
- 테두리 반경: 12px (완전 둥근 형태)
- 폰트: Medium, 12px
**타입별 색상**:
- **Primary**: 배경 Primary-Light, 텍스트 Primary-Dark
- **Success**: 배경 Success-Light, 텍스트 Success-Dark
- **Warning**: 배경 Warning-Light, 텍스트 Warning-Dark
- **Error**: 배경 Error-Light, 텍스트 Error-Dark
- **Neutral**: 배경 Gray-200, 텍스트 Gray-700
**사용 예시**:
- 상태 표시: "작성 중", "검증 중", "확정됨"
- 카운트: "3개의 알림", "5명 참석"
---
## 7. 반응형 브레이크포인트
### 7.1 브레이크포인트 정의
| 디바이스 | 범위 | 레이아웃 | 주요 조정 |
|---------|------|---------|----------|
| **Mobile** | 320px ~ 767px | 단일 컬럼 | 햄버거 메뉴, 하단 탭, 스택 레이아웃 |
| **Tablet** | 768px ~ 1023px | 2단 레이아웃 | 토글 사이드바, 터치 최적화 |
| **Desktop** | 1024px ~ 1439px | 3단 레이아웃 | 고정 사이드바, 키보드 단축키 |
| **Large Desktop** | 1440px 이상 | 확장 레이아웃 | 더 넓은 중앙 패널, 4단 가능 |
### 7.2 디바이스별 UI 조정
#### Mobile (320px ~ 767px)
**네비게이션**:
- 햄버거 메뉴로 사이드바 숨김
- 하단 탭 네비게이션 (대시보드, 회의, Todo, 더보기)
- 상단 헤더 고정
**레이아웃**:
- 1단 스택 레이아웃
- 카드/위젯을 세로로 배치
- 패딩 감소 (24px → 16px)
**인터랙션**:
- 최소 터치 영역: 44×44px
- 버튼 크기 증가
- 스와이프 제스처 지원
**05-회의진행 화면**:
- 탭으로 패널 전환 (회의록 / 참석자 / AI 제안 / 용어 설명)
- 툴바를 하단 고정 (터치 용이성)
**09-Todo관리 화면**:
- 칸반 보드 대신 리스트 뷰 권장
- 상태 변경은 드롭다운으로
#### Tablet (768px ~ 1023px)
**네비게이션**:
- 사이드바 토글 가능 (기본 숨김)
- 상단 헤더에 메뉴 아이콘
**레이아웃**:
- 2단 그리드 레이아웃 (2×2 또는 2×3)
- 적절한 여백 유지
**05-회의진행 화면**:
- 2단 레이아웃 (에디터 + AI 제안 패널)
- 참석자 목록은 드로어로 표시
**터치 최적화**:
- 버튼 크기: 최소 44×44px
- 간격: 최소 8px
#### Desktop (1024px 이상)
**네비게이션**:
- 전체 사이드바 항상 표시
- 호버 효과 및 툴팁
**레이아웃**:
- 3단 그리드 레이아웃 (3×2)
- 더 많은 위젯 동시 표시
**05-회의진행 화면**:
- 3단 레이아웃 (참석자 + 에디터 + AI 제안)
- 모든 패널 동시 표시
**키보드 단축키**:
- Ctrl+N: 새 회의
- Ctrl+S: 저장
- Ctrl+F: 검색
- Ctrl+/: 단축키 가이드
### 7.3 미디어 쿼리 예시
```css
/* Mobile First 접근 */
.container {
padding: 16px;
}
/* Tablet */
@media (min-width: 768px) {
.container {
padding: 32px;
}
}
/* Desktop */
@media (min-width: 1024px) {
.container {
padding: 64px;
}
}
/* Large Desktop */
@media (min-width: 1440px) {
.container {
max-width: 1536px;
margin: 0 auto;
}
}
```
---
## 8. 회의록 서비스 특화 컴포넌트
### 8.1 실시간 협업 인디케이터
#### 사용자 커서
**스타일**:
- 사용자별 색상 코드:
- User 1: Primary-Main (#00D9B1)
- User 2: Secondary-Main (#6366F1)
- User 3: Warning-Main (#F59E0B)
- User 4: Info-Main (#3B82F6)
- User 5: Error-Main (#EF4444)
- 커서 크기: 2px (너비) × 20px (높이)
- 커서 상단에 아바타 + 이름 레이블
- 레이블 배경: 사용자 색상, 텍스트: White
- 레이블 패딩: 4px × 8px, 테두리 반경: 4px
#### 편집 중 하이라이트
**스타일**:
- 배경: 사용자 색상 (투명도 20%)
- 지속 시간: 사용자가 편집하는 동안 유지
- 애니메이션: 부드러운 페이드인
#### 변경 하이라이트
**스타일**:
- 배경: Warning-Light (노란색)
- 지속 시간: 3초
- 애니메이션: 3초 동안 페이드아웃
### 8.2 상태 배지
#### 작성 중
**스타일**:
- 배경: Warning-Light (#FCD34D)
- 텍스트: Warning-Dark (#D97706)
- 아이콘: Edit 아이콘 (선택적)
#### 검증 중
**스타일**:
- 배경: Info-Light (#93C5FD)
- 텍스트: Info-Dark (#2563EB)
- 아이콘: Clock 아이콘 (선택적)
#### 확정됨
**스타일**:
- 배경: Success-Light (#6EE7B7)
- 텍스트: Success-Dark (#059669)
- 아이콘: Check 아이콘 (선택적)
### 8.3 전문용어 하이라이트
**스타일**:
- 밑줄: 2px dotted Primary-Main
- 커서: pointer
**호버 상태**:
- 툴팁 표시
- 배경: Gray-800
- 텍스트: White
- 패딩: 8px × 12px
- 테두리 반경: 6px
- 최대 너비: 300px
- 화살표 표시
**클릭 상태**:
- 우측 패널의 "용어 설명" 탭으로 전환
- 해당 용어 상세 설명 표시
### 8.4 AI 제안 영역
**스타일**:
- 배경: Gray-50
- 테두리: 1px dashed Primary-Main
- 테두리 반경: 8px
- 패딩: 16px
- 아이콘: AI Sparkle 아이콘 (Primary-Main)
**액션 버튼**:
- 적용: Primary 버튼 (소형, 패딩 8px × 16px)
- 무시: Text 버튼
**애니메이션**:
- 등장: 페이드인 + 약간의 상승 (translateY)
- 업데이트: 부드러운 전환 (200ms)
### 8.5 Todo 카드
**레이아웃**:
- 카드 형태
- 패딩: 16px
- 테두리 반경: 8px
- 그림자: 0 1px 3px rgba(0, 0, 0, 0.1)
**우선순위 표시**:
- 높음: 좌측 테두리 4px Error-Main + Error 점 (8px 원)
- 보통: 테두리 없음, Gray 점
- 낮음: 표시 없음
**진행률 바**:
- 높이: 4px
- 배경: Gray-200
- 채워진 부분: Primary-Main
- 테두리 반경: 2px
- 위치: 하단
**마감일 표시**:
- D-day 형식: "D-3", "오늘", "D+2 (지남)"
- 색상:
- 지남: Error-Main
- 오늘: Warning-Main
- 여유: Gray-500
**드래그 핸들**:
- 아이콘: 점 6개 (2×3)
- 색상: Gray-400
- 위치: 좌측 상단
**호버 상태**:
- 그림자 증가
- 드래그 핸들 색상 변경 (Gray-600)
### 8.6 타임라인
**스타일**:
- 세로 라인: 2px solid Gray-300
- 위치: 좌측 고정
**이벤트 점**:
- 크기: 12px 원
- 배경: Primary-Main
- 테두리: 2px solid White
- 위치: 라인 중앙
**타임스탬프**:
- 폰트: Caption (12px), Gray-500
- 위치: 이벤트 점 우측
**이벤트 내용**:
- 폰트: Body-Small (14px), Gray-700
- 위치: 타임스탬프 하단
---
## 9. 인터랙션 패턴
### 9.1 버튼 인터랙션
**Hover**:
```css
transition: all 150ms ease-out;
transform: translateY(-1px);
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
```
**Active (클릭)**:
```css
transform: scale(0.98);
```
**Disabled**:
```css
cursor: not-allowed;
opacity: 0.6;
```
### 9.2 카드 인터랙션 (인터랙티브 카드)
**Hover**:
```css
transition: all 200ms ease-out;
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
```
**클릭**:
```css
transform: scale(0.99);
```
### 9.3 모달 애니메이션
**등장**:
```css
/* Backdrop */
opacity: 0 1;
transition: opacity 200ms ease-out;
/* Modal */
opacity: 0 1;
transform: scale(0.95) scale(1.0);
transition: all 200ms ease-out;
```
**사라짐**:
```css
opacity: 1 0;
transform: scale(1.0) scale(0.95);
transition: all 150ms ease-in;
```
### 9.4 토스트 알림 애니메이션
**등장**:
```css
transform: translateX(400px) translateX(0);
opacity: 0 1;
transition: all 200ms ease-out;
```
**사라짐**:
```css
transform: translateX(0) translateX(400px);
opacity: 1 0;
transition: all 150ms ease-in;
```
**자동 사라짐**: 4초 후
### 9.5 로딩 상태
#### 스켈레톤 UI
**스타일**:
- 배경: Gray-200
- 테두리 반경: 4px
- 애니메이션: 펄스 (밝기 변화)
```css
@keyframes pulse {
0%, 100% { opacity: 1; }
50% { opacity: 0.5; }
}
.skeleton {
animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
}
```
#### 스피너
**스타일**:
- 색상: Primary-Main
- 크기: 24px (소형), 40px (중형), 56px (대형)
- 애니메이션: 회전
```css
@keyframes spin {
to { transform: rotate(360deg); }
}
.spinner {
animation: spin 1s linear infinite;
}
```
### 9.6 드래그 앤 드롭
**드래그 시작**:
```css
opacity: 0.5;
cursor: grabbing;
```
**드롭 영역 (유효)**:
```css
border: 2px dashed #00D9B1;
background-color: rgba(0, 217, 177, 0.05);
```
**드롭 영역 (무효)**:
```css
border: 2px dashed #EF4444;
background-color: rgba(239, 68, 68, 0.05);
```
**드롭 완료**:
```css
transition: all 300ms ease-out;
transform: translate(newX, newY);
```
### 9.7 포커스 스타일
**인풋/버튼 포커스**:
```css
outline: 4px solid rgba(0, 217, 177, 0.2);
outline-offset: 0;
border-color: #00D9B1;
```
**키보드 네비게이션 포커스**:
```css
/* 마우스 클릭 시에는 outline 숨김 */
.js-focus-visible :focus:not(.focus-visible) {
outline: none;
}
/* 키보드 탐색 시에만 outline 표시 */
.focus-visible {
outline: 2px solid #00D9B1;
outline-offset: 2px;
}
```
### 9.8 페이지 전환 애니메이션
**페이드 전환**:
```css
/* 나가는 페이지 */
opacity: 1 0;
transition: opacity 150ms ease-out;
/* 들어오는 페이지 */
opacity: 0 1;
transition: opacity 200ms ease-in;
```
---
## 10. 변경 이력
| 버전 | 날짜 | 작성자 | 변경 내용 |
|------|------|--------|----------|
| 1.0 | 2025-10-15 | 유진 | 초안 작성 - 레퍼런스 클로바노트 기반 스타일 가이드 설계 완료 |
---
## 부록
### A. 색상 접근성 체크리스트
- [ ] Primary-Main (#00D9B1) + White: 대비율 3.5:1 (AA Large) ✅
- [ ] Gray-600 (#4B5563) + White: 대비율 8.6:1 (AAA) ✅
- [ ] Primary-Main + Gray-900: 대비율 4.8:1 (AA) ✅
- [ ] 모든 상태 색상 (Success, Warning, Error, Info) + White: AA 이상 ✅
### B. 디자인 도구 및 에셋
**권장 디자인 도구**:
- Figma (프로토타입 및 디자인 시스템)
- Adobe XD (대안)
**아이콘 라이브러리**:
- Heroicons (추천)
- Feather Icons
- Lucide Icons
**일러스트레이션**:
- unDraw (무료, 색상 커스터마이징 가능)
- Storyset (Freepik)
- 자체 제작 (브랜드 일관성)
### C. 프론트엔드 구현 권장사항
**CSS 프레임워크**:
- Tailwind CSS (유틸리티 우선, 빠른 개발)
- Emotion / styled-components (CSS-in-JS)
**컴포넌트 라이브러리**:
- Headless UI (접근성 우수)
- Radix UI (무스타일 프리미티브)
- 자체 제작 (완전한 커스터마이징)
**애니메이션**:
- Framer Motion (React)
- GSAP (고급 애니메이션)
- CSS Transitions (단순 애니메이션)
### D. 참고 자료
- **WCAG 2.1 가이드라인**: https://www.w3.org/WAI/WCAG21/quickref/
- **클로바노트**: https://clovanote.naver.com/
- **Pretendard 폰트**: https://cactus.tistory.com/306
- **Tailwind CSS 컬러 팔레트**: https://tailwindcss.com/docs/customizing-colors
---
**문서 끝**