hgzero/design-last/uiux/style-guide.md
djeon 084b0085fa 스타일 가이드 추가
- design-last/uiux/style-guide.md 파일 추가
- UI/UX 설계를 위한 스타일 가이드 문서

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-20 15:33:10 +09:00

35 KiB
Raw Blame History

회의록 작성 및 공유 개선 서비스 - 스타일 가이드

목차


개요

문서 목적

회의록 작성 및 공유 개선 서비스의 시각적 일관성을 보장하고, 디자이너와 개발자 간 효율적인 협업을 위한 스타일 가이드를 제공합니다.

적용 범위

  • Web (모든 브라우저)
  • Mobile (iOS, Android)
  • Tablet
  • Desktop

관련 문서


브랜드 아이덴티티

디자인 컨셉

"Smart Meeting Assistant" - 스마트한 회의 도우미

회의록 작성의 번거로움을 해결하고, AI 기반 자동화를 통해 효율적인 협업을 지원하는 전문 업무 도구

브랜드 핵심 가치

1. 전문성 (Professionalism)

  • 업무용 도구로서의 신뢰성과 정확성
  • 깔끔하고 정돈된 인터페이스
  • 일관된 시각적 언어

2. 효율성 (Efficiency)

  • 빠르고 직관적인 사용자 경험
  • 필요한 정보에 즉시 접근
  • 불필요한 단계 제거

3. 지능성 (Intelligence)

  • AI 기반 자동화 및 분석
  • 맥락을 이해하는 스마트한 기능
  • 사용자 패턴 학습 및 추천

4. 협업성 (Collaboration)

  • 실시간 동기화 및 공유
  • 투명한 변경 이력
  • 팀원 간 원활한 소통

브랜드 톤 & 매너

Visual (시각적)

  • 모던 (Modern): 최신 디자인 트렌드 반영
  • 클린 (Clean): 여백과 계층 구조 명확
  • 프로페셔널 (Professional): 업무 환경에 적합

Voice (언어적)

  • 친절하지만 간결함
  • 업무 중심의 명확한 표현
  • 전문 용어는 설명 제공

Emotion (감성적)

  • 신뢰감: 안정적이고 정확한 서비스
  • 효율성: 시간을 절약해주는 도구
  • 똑똑함: AI가 도와주는 스마트 어시스턴트

디자인 원칙

1. Mobile First

모바일 환경을 우선 설계하고 점진적으로 확장

  • 핵심 기능에 집중
  • 터치 최적화 (최소 44x44px)
  • 세로 스크롤 우선

2. 정보 계층 구조

중요한 정보를 명확하게 구분

  • 타이포그래피 스케일 활용
  • 색상과 크기로 우선순위 표현
  • 시각적 가중치 일관성 유지

3. 일관성 (Consistency)

모든 화면에서 동일한 패턴 사용

  • 컴포넌트 재사용
  • 인터랙션 패턴 통일
  • 용어 및 아이콘 일관성

4. 접근성 (Accessibility)

WCAG 2.1 Level AA 준수

  • 색상 대비 4.5:1 이상
  • 키보드 네비게이션 지원
  • 스크린 리더 호환

5. 성능 최적화

빠른 로딩과 부드러운 인터랙션

  • 이미지 최적화 (WebP)
  • 코드 스플리팅
  • Lazy Loading

컬러 시스템

Primary Palette

Light Mode (기본)

Primary - 신뢰감, 전문성

Primary:        #1976D2 (Material Blue 700)
Primary Light:  #42A5F5 (Blue 400) - Hover 상태
Primary Dark:   #1565C0 (Blue 800) - Active 상태

Secondary - 강조, 알림

Secondary:       #FFC107 (Amber 500)
Secondary Light: #FFD54F (Amber 300)
Secondary Dark:  #FFA000 (Amber 700)

Semantic Colors - 의미 전달

Success:  #4CAF50 (Green 500)  - 완료, 성공
Error:    #F44336 (Red 500)    - 오류, 위험
Warning:  #FF9800 (Orange 500) - 주의, 경고
Info:     #2196F3 (Blue 500)   - 정보, 안내

Neutral Colors - 텍스트 및 배경

Gray 50:  #FAFAFA  (Background light)
Gray 100: #F5F5F5  (Surface)
Gray 200: #EEEEEE  (Border light)
Gray 300: #E0E0E0  (Border)
Gray 400: #BDBDBD  (Disabled)
Gray 500: #9E9E9E  (Disabled text)
Gray 600: #757575  (Hint text)
Gray 700: #616161  (Secondary text)
Gray 800: #424242  (Primary text variant)
Gray 900: #212121  (Primary text)

Background & Text

Background: #FFFFFF (흰색)
Surface:    #F5F5F5 (연한 회색)

Text Primary:   #212121 (검은색)
Text Secondary: #616161 (중간 회색)
Text Disabled:  #9E9E9E (연한 회색)
Text Hint:      #757575 (힌트)

Dark Mode

Primary Palette

Primary:   #64B5F6 (Blue 300)
Secondary: #FFD54F (Amber 300)
Success:   #81C784 (Green 300)
Error:     #E57373 (Red 300)
Warning:   #FFB74D (Orange 300)
Info:      #4FC3F7 (Light Blue 300)

Neutral Colors

Gray 50:  #303030  (Surface variant)
Gray 100: #1E1E1E  (Surface)
Gray 200: #2C2C2C  (Border light)
Gray 300: #3A3A3A  (Border)
Gray 400: #4A4A4A  (Disabled)
Gray 500: #6E6E6E  (Disabled text)
Gray 600: #9E9E9E  (Hint text)
Gray 700: #B0B0B0  (Secondary text)
Gray 800: #E0E0E0  (Primary text variant)
Gray 900: #FFFFFF  (Primary text)

Background & Text

Background: #121212 (어두운 검은색)
Surface:    #1E1E1E (어두운 회색)

Text Primary:   #FFFFFF (흰색)
Text Secondary: #B0B0B0 (밝은 회색)
Text Disabled:  #6E6E6E (어두운 회색)
Text Hint:      #9E9E9E (힌트)

차별화 기능별 컬러

전문용어 하이라이트

Text Color:      #1976D2 (Primary)
Underline:       1px dotted #1976D2
Hover Background: rgba(25, 118, 210, 0.05)

Todo 뱃지

Background: #FF9800 (Warning)
Text:       #FFFFFF (White)
Badge:      원형 또는 라운드 사각형

AI 처리 중

Progress Bar: #2196F3 (Info)
Background:   #E3F2FD (Info Light)
Icon:         🤖 또는 AI 아이콘

관련 회의록

Background: rgba(100, 181, 246, 0.05)
Border:     1px solid rgba(100, 181, 246, 0.2)
Accent:     3px solid #64B5F6 (좌측)

색상 사용 가이드

Primary Color 사용

  • 주요 CTA 버튼
  • 링크
  • 선택된 탭/메뉴
  • 프로그레스 바
  • 전문용어 하이라이트

Secondary Color 사용

  • 보조 CTA
  • 배지
  • 강조 표시
  • 알림

Semantic Colors 사용

  • Success: 완료 상태, 성공 메시지
  • Error: 오류 메시지, 필수 필드 누락
  • Warning: 주의 사항, 마감 임박
  • Info: 정보 안내, 팁

Neutral Colors 사용

  • Gray 900: 본문 텍스트
  • Gray 700: 부가 정보
  • Gray 500: Disabled 상태
  • Gray 300: 테두리
  • Gray 100: 배경 (Surface)

접근성 검증

색상 대비율 (WCAG 2.1 AA 준수)

Primary (#1976D2) on White (#FFFFFF):     8.59:1 ✓ (AAA)
Text Primary (#212121) on White:         16.10:1 ✓ (AAA)
Text Secondary (#616161) on White:       7.23:1 ✓ (AAA)
Gray 500 (#9E9E9E) on White:            3.95:1 ✗ (본문 사용 금지)

검증 도구

  • Chrome DevTools: Lighthouse Accessibility Audit
  • WebAIM Contrast Checker
  • Axe DevTools

타이포그래피

폰트 패밀리

Primary Font

font-family: 'Pretendard', 'Apple SD Gothic Neo', -apple-system, BlinkMacSystemFont, sans-serif;

Code/Monospace (타임스탬프용)

font-family: 'JetBrains Mono', 'Fira Code', 'Courier New', monospace;

폰트 선택 이유

Pretendard

  • 한글 가독성 우수
  • 무료 오픈소스
  • 9가지 굵기 지원 (Thin ~ Black)
  • 가변 폰트 지원
  • 웹/모바일 최적화

JetBrains Mono

  • 코드 및 숫자 가독성
  • 타임스탬프 [14:05] 표시에 최적
  • Monospace 특성으로 정렬 용이

타입 스케일

Desktop / Tablet / Mobile 공통

Display
  Size:            32px
  Line Height:     40px
  Font Weight:     700 (Bold)
  Letter Spacing:  -0.5px
  용도:            온보딩, 빈 상태 메시지, 랜딩

Heading 1
  Size:            24px
  Line Height:     32px
  Font Weight:     700 (Bold)
  Letter Spacing:  -0.3px
  용도:            페이지 제목

Heading 2
  Size:            20px
  Line Height:     28px
  Font Weight:     700 (Bold)
  Letter Spacing:  -0.2px
  용도:            섹션 제목

Heading 3
  Size:            18px
  Line Height:     24px
  Font Weight:     600 (SemiBold)
  Letter Spacing:  -0.1px
  용도:            카드 제목, 서브 섹션

Body Large
  Size:            16px
  Line Height:     24px
  Font Weight:     400 (Regular)
  Letter Spacing:  0px
  용도:            본문, 회의록 내용

Body
  Size:            14px
  Line Height:     20px
  Font Weight:     400 (Regular)
  Letter Spacing:  0px
  용도:            설명 텍스트, 부가 정보

Caption
  Size:            12px
  Line Height:     16px
  Font Weight:     400 (Regular)
  Letter Spacing:  0.1px
  용도:            레이블, 타임스탬프, 메타 정보

Label
  Size:            11px
  Line Height:     14px
  Font Weight:     500 (Medium)
  Letter Spacing:  0.2px
  용도:            버튼 텍스트, 배지, 태그

폰트 굵기 (Font Weight)

Regular:   400  - 본문, 일반 텍스트
Medium:    500  - 강조, 레이블, 버튼
SemiBold:  600  - 서브 헤딩
Bold:      700  - 주요 헤딩, 강한 강조

회의록 특화 타이포그래피

타임스탬프

Font:            JetBrains Mono, 12px
Color:           Gray 500
Background:      Gray 100 (선택)
Padding:         2px 6px
Border Radius:   4px
Format:          [14:05] 또는 14:05

화자명

Font:            Pretendard, 14px
Weight:          500 (Medium)
Color:           Gray 900
Format:          "김민준:"

발언 내용

Font:            Pretendard, 14px
Weight:          400 (Regular)
Color:           Gray 900
Line Height:     22px

회의록 예시

[14:05] 김민준:
프로젝트 일정을 검토했습니다. RAG 시스템 구현은 다음 주까지 완료 예정입니다.

텍스트 색상 사용

Primary Text (Gray 900):
  - 제목
  - 본문
  - 중요 정보

Secondary Text (Gray 700):
  - 부가 설명
  - 메타 정보
  - 날짜/시간

Disabled Text (Gray 500):
  - 비활성 상태
  - Placeholder
  - 힌트 텍스트

Link Text (Primary):
  - 링크
  - 클릭 가능한 텍스트
  - Hover 시 Primary Dark

행간 및 자간

Line Height (행간)

  • Heading: 1.33 (예: 24px / 32px)
  • Body: 1.5 (예: 16px / 24px)
  • Caption: 1.33 (예: 12px / 16px)

Letter Spacing (자간)

  • Heading: 음수 (-0.5px ~ -0.1px) - 밀착감
  • Body: 0px - 기본
  • Caption/Label: 양수 (0.1px ~ 0.2px) - 가독성

텍스트 정렬

Left Align:   기본 (본문, 제목)
Center Align: 빈 상태, 모달 타이틀
Right Align:  숫자, 메타 정보 (날짜/시간)
Justify:      사용 금지 (가독성 저하)

반응형 타이포그래피

Mobile (320-767px)

  • 기본 스케일 사용
  • 최소 폰트 크기: 11px (Label)
  • 터치 영역 고려: 버튼 텍스트 최소 14px

Tablet (768-1023px)

  • 기본 스케일 유지
  • Line Height 약간 증가 가능 (선택)

Desktop (1024px+)

  • Display: 36px (선택적 확대)
  • Heading 1: 28px (선택적 확대)
  • 나머지 기본 스케일 유지

간격 시스템

8px 기반 시스템

Material Design 및 iOS Human Interface Guidelines를 따르는 8px 단위 간격 시스템

spacing-0:   0px    (없음)
spacing-1:   4px    (xs - 매우 작은 여백)
spacing-2:   8px    (sm - 작은 여백)
spacing-3:   12px   (md- - 중간-작은 여백)
spacing-4:   16px   (md - 기본 여백)
spacing-5:   20px   (md+ - 중간-큰 여백)
spacing-6:   24px   (lg - 큰 여백)
spacing-8:   32px   (xl - 매우 큰 여백)
spacing-10:  40px   (xxl - 초대형 여백)
spacing-12:  48px   (3xl - 페이지 구분)
spacing-16:  64px   (4xl - 섹션 구분)

컴포넌트별 간격 가이드

버튼

내부 패딩:     12px (상하) × 24px (좌우)
버튼 간 간격:  8px (수평) / 12px (수직)
최소 높이:     44px (Mobile) / 40px (Desktop)

카드

내부 패딩:     16px
카드 간 간격:  12px (Mobile) / 16px (Tablet) / 20px (Desktop)
제목-내용:     12px
내용-액션:     16px

입력 필드

내부 패딩:     12px (상하) × 16px (좌우)
레이블-필드:   8px
필드-에러:     4px
필드 간 간격:  16px

섹션

섹션 간 간격:  24px (Mobile) / 32px (Tablet) / 40px (Desktop)
제목-내용:     16px

페이지 여백

Mobile:    16px (좌우)
Tablet:    24px (좌우)
Desktop:   32px (좌우) 또는 중앙 정렬 (최대 1200px)

레이아웃 그리드

Mobile (320-767px)

Columns:     4
Gutter:      16px
Margin:      16px
Column Width: Auto

Tablet (768-1023px)

Columns:     8
Gutter:      20px
Margin:      24px
Column Width: Auto

Desktop (1024px+)

Columns:     12
Gutter:      24px
Margin:      32px 또는 중앙 정렬
Max Width:   1200px (선택)

Z-Index 레이어

z-base:       0    (기본 콘텐츠)
z-dropdown:   100  (드롭다운, 메뉴)
z-sticky:     200  (고정 헤더, 하단 탭)
z-overlay:    300  (모달 배경, Backdrop)
z-modal:      400  (모달 콘텐츠, Dialog)
z-popover:    500  (툴팁, 팝오버, 전문용어 패널)
z-toast:      600  (알림 토스트, 스낵바)

간격 사용 원칙

  1. 일관성 유지: 항상 8px 배수 사용
  2. 계층 구조: 큰 간격 → 중요한 구분
  3. 숨쉬는 공간: 여백 충분히 확보
  4. 터치 영역: 최소 44x44px 보장 (8px 여백 포함)

컴포넌트 스타일

1. 버튼 (Button)

Primary Button

배경:              Primary (#1976D2)
텍스트:            White (#FFFFFF)
폰트:              14px / Medium (500)
패딩:              12px 24px
높이:              44px (Mobile) / 40px (Desktop)
모서리:            8px 둥글게 (border-radius)
그림자:            0 2px 4px rgba(25, 118, 210, 0.2)
최소 너비:         120px (Desktop) / 100% (Mobile)

States:
  Hover:     배경 #1565C0, 그림자 0 4px 8px rgba(25, 118, 210, 0.3)
  Active:    배경 #0D47A1, 그림자 제거
  Disabled:  배경 Gray 300, 텍스트 Gray 500, 그림자 제거
  Loading:   배경 유지, 스피너 표시, 텍스트 숨김

Secondary Button

배경:              Transparent
테두리:            1px solid Primary
텍스트:            Primary
패딩:              12px 24px
높이:              44px (Mobile) / 40px (Desktop)
모서리:            8px

States:
  Hover:     배경 rgba(25, 118, 210, 0.1)
  Active:    배경 rgba(25, 118, 210, 0.2)
  Disabled:  테두리 Gray 300, 텍스트 Gray 500

Text Button

배경:              Transparent
텍스트:            Primary
패딩:              8px 16px
높이:              Auto
모서리:            4px

States:
  Hover:     배경 Gray 100
  Active:    배경 Gray 200
  Disabled:  텍스트 Gray 500

버튼 크기 변형

Small:
  높이:      32px
  패딩:      8px 16px
  폰트:      12px

Medium (기본):
  높이:      44px (Mobile) / 40px (Desktop)
  패딩:      12px 24px
  폰트:      14px

Large:
  높이:      56px
  패딩:      16px 32px
  폰트:      16px

아이콘 버튼

크기:              44px × 44px (원형 또는 사각형)
아이콘 크기:       24px
배경:              Transparent
Hover:             배경 Gray 100
Active:            배경 Gray 200

2. 카드 (Card)

배경:              White (Light) / Surface (#1E1E1E, Dark)
테두리:            1px solid Gray 300 (선택)
모서리:            12px
그림자:            0 2px 8px rgba(0, 0, 0, 0.08)
패딩:              16px
최소 높이:         없음 (콘텐츠에 따라)

구조:
  Header (선택):   제목 + 액션
  Content:         본문
  Footer (선택):   버튼, 메타 정보

States:
  Hover:     그림자 0 4px 12px rgba(0, 0, 0, 0.12)
  Active:    그림자 0 1px 4px rgba(0, 0, 0, 0.06)
  Disabled:  배경 Gray 100, 그림자 제거

3. 입력 필드 (Input Field)

Text Input

배경:              White
테두리:            1px solid Gray 300
모서리:            8px
높이:              44px
패딩:              12px 16px
폰트:              14px Regular
Placeholder:       Gray 500

States:
  Focus:     테두리 2px solid Primary
             아웃라인 4px rgba(25, 118, 210, 0.1)
  Error:     테두리 1px solid Error
             하단 메시지 12px Error color
  Disabled:  배경 Gray 100, 텍스트 Gray 500

레이블 및 헬퍼 텍스트

Label:
  폰트:            12px Medium
  색상:            Gray 700
  위치:            입력 필드 상단 8px 간격

Helper Text:
  폰트:            12px Regular
  색상:            Gray 600
  위치:            입력 필드 하단 4px 간격

Error Message:
  폰트:            12px Regular
  색상:            Error (#F44336)
  아이콘:          ⚠️ 포함

4. 체크박스 / 라디오

체크박스

크기:              20px × 20px
모서리:            4px
테두리:            2px solid Gray 500
배경 (선택 시):    Primary
체크마크:          White, 2px stroke

States:
  Hover:     테두리 Primary
  Disabled:  테두리 Gray 300, 배경 Gray 100

라디오 버튼

크기:              20px × 20px
모서리:            50% (원형)
테두리:            2px solid Gray 500
배경 (선택 시):    Primary
내부 점:           8px × 8px White 원

States:
  Hover:     테두리 Primary
  Disabled:  테두리 Gray 300

5. 스위치 (Toggle)

크기:              44px × 24px
모서리:            12px (완전히 둥글게)
배경 (Off):        Gray 300
배경 (On):         Primary
핸들:              20px × 20px 원형, White
                   그림자 0 2px 4px rgba(0, 0, 0, 0.2)

Animation:
  전환:            300ms cubic-bezier(0.4, 0.0, 0.2, 1)

6. 드롭다운 (Dropdown)

버튼:
  배경:            White
  테두리:          1px solid Gray 300
  모서리:          8px
  높이:            44px
  패딩:            12px 16px
  아이콘:          화살표 (▼) 우측

메뉴:
  배경:            White
  테두리:          1px solid Gray 300
  모서리:          8px
  그림자:          0 4px 12px rgba(0, 0, 0, 0.15)
  최대 높이:       300px (스크롤)

옵션:
  패딩:            12px 16px
  Hover:           배경 Gray 100
  Selected:        배경 Primary 5% 투명도

7. 탭 (Tab)

컨테이너:
  배경:            Transparent
  하단 테두리:     1px solid Gray 300

탭 아이템:
  패딩:            12px 16px
  폰트:            14px Medium

States:
  Default:         텍스트 Gray 700
  Hover:           텍스트 Gray 900
  Selected:        텍스트 Primary
                   하단 선 2px solid Primary

인디케이터:
  높이:            2px
  배경:            Primary
  애니메이션:      슬라이드 300ms

8. 모달 (Modal)

Backdrop:
  배경:            rgba(0, 0, 0, 0.5)
  애니메이션:      Fade In 200ms

Dialog:
  배경:            White
  모서리:          12px (상단) / 0px (하단, Mobile)
  그림자:          0 8px 16px rgba(0, 0, 0, 0.16)
  최대 너비:       600px (Desktop)
  최대 높이:       80vh
  패딩:            20px

Header:
  패딩:            20px 20px 16px
  닫기 버튼:       우측 상단

Content:
  패딩:            0 20px
  스크롤:          세로 스크롤 (필요 시)

Footer:
  패딩:            16px 20px 20px
  버튼 정렬:       우측 (Cancel / Confirm)

9. 프로그레스 바 (Progress Bar)

Linear:
  배경:            Gray 200
  진행:            Primary gradient
  높이:            4px
  모서리:          2px
  애니메이션:      부드러운 진행 (0.3s ease)

Circular:
  배경:            Gray 200
  진행:            Primary
  두께:            4px
  크기:            24px (Small) / 32px (Medium) / 48px (Large)
  애니메이션:      회전 (1s linear infinite)

10. 배지 (Badge)

크기:              20px × 20px (원형) 또는 Auto × 20px (라운드)
배경:              Warning (#FF9800) 또는 Error (#F44336)
텍스트:            White, 11px Bold
패딩:              0 (원형) / 4px 8px (라운드)
위치:              우측 상단 절대 위치 (상위 요소 기준)
그림자:            0 2px 4px rgba(255, 152, 0, 0.3)

11. 툴팁 (Tooltip)

배경:              rgba(33, 33, 33, 0.9)
텍스트:            White, 12px Regular
패딩:              8px 12px
모서리:            6px
화살표:            6px 삼각형
최대 너비:         280px
그림자:            0 2px 8px rgba(0, 0, 0, 0.15)
애니메이션:        Fade In 200ms

반응형 브레이크포인트

브레이크포인트 정의

Mobile:     320px - 767px    (기본, 우선 설계)
Tablet:     768px - 1023px   (점진적 향상)
Desktop:    1024px+          (점진적 향상)

CSS 미디어 쿼리

/* Mobile First (기본) */
.component {
  width: 100%;
  padding: 16px;
}

/* Tablet */
@media (min-width: 768px) {
  .component {
    width: calc(50% - 8px);
    padding: 20px;
  }
}

/* Desktop */
@media (min-width: 1024px) {
  .component {
    width: calc(33.33% - 12px);
    padding: 24px;
  }
}

반응형 전략

Mobile (320-767px)

  • 전체 너비 사용
  • 세로 스크롤 우선
  • 하단 탭 네비게이션
  • FAB (Floating Action Button)
  • 카드 1열 배치

Tablet (768-1023px)

  • 카드 2열 배치
  • 사이드 패널 추가 (선택)
  • 하단 탭 유지

Desktop (1024px+)

  • 카드 2-3열 배치
  • 좌측 사이드바 네비게이션
  • 우측 패널 (Todo, 알림 등)
  • 3단 레이아웃

컴포넌트별 반응형

버튼

  • Mobile: 전체 너비 (width: 100%)
  • Tablet+: Auto 너비 (min-width: 120px)

카드

  • Mobile: 1열 (width: 100%)
  • Tablet: 2열 (width: calc(50% - 8px))
  • Desktop: 3열 (width: calc(33.33% - 12px))

입력 필드

  • Mobile: 전체 너비
  • Desktop: 최대 너비 제한 (max-width: 400px)

모달

  • Mobile: 전체 너비, 하단 슬라이드 업
  • Desktop: 중앙 정렬, 최대 너비 600px

회의록 서비스 특화 컴포넌트

1. 전문용어 하이라이트 (차별화 포인트)

인라인 하이라이트

텍스트 색상:       Primary (#1976D2)
밑줄:              1px dotted Primary
커서:              pointer
배경 (Hover):      rgba(25, 118, 210, 0.05)
애니메이션:        배경 Fade In 200ms

툴팁 (간단한 설명)

배경:              rgba(33, 33, 33, 0.9)
텍스트:            White, 12px Regular
패딩:              8px 12px
모서리:            6px
화살표:            포함 (하단 중앙)
최대 너비:         280px
그림자:            0 2px 8px rgba(0, 0, 0, 0.15)
애니메이션:        Fade In 200ms
Z-Index:           500 (z-popover)

내용:
  - 간단한 정의 (1-2문장)
  - "더보기" 링크 (클릭 시 상세 패널)

상세 패널 (맥락 기반 설명)

배경:              White
그림자:            0 -4px 20px rgba(0, 0, 0, 0.15)
패딩:              20px
모서리:            12px 12px 0 0 (상단만)
최대 높이:         60vh
스크롤:            세로 스크롤
애니메이션:        Slide Up 300ms
Z-Index:           500 (z-popover)

구조:
  Header:
    - 용어명 (18px Bold)
    - 닫기 버튼 (×)

  Content:
    - 간단한 정의
    - 맥락 기반 설명
    - 실제 사용 사례
    - 관련 프로젝트/이슈
    - 과거 회의록 링크 (최대 3개)
    - 사내 문서 링크

사용 예시

프로젝트 일정을 검토했습니다. RAG 시스템 구현은...
                                  ^^^
                                  (점선 밑줄, Primary 색상)

2. Todo 뱃지 (차별화 포인트)

원형 뱃지 (숫자 표시)

크기:              20px × 20px (원형)
배경:              Warning (#FF9800)
텍스트:            White, 11px Bold
위치:              우측 상단 절대 위치
그림자:            0 2px 4px rgba(255, 152, 0, 0.3)
Z-Index:           10 (상위 요소 기준)

내용:              숫자 (1-99, 100+ → "99+")

인라인 뱃지 (할당 상태 표시)

배경:              rgba(255, 152, 0, 0.1)
텍스트:            Warning (#FF9800), 12px Medium
패딩:              2px 8px
모서리:            4px
아이콘:            🔵 또는 ✅
내용:              "(2) 할당됨" 또는 "(5/12) 완료"

Todo 모달 (카드 클릭 시)

배경:              White
모서리:            12px
그림자:            0 8px 16px rgba(0, 0, 0, 0.16)
패딩:              20px
최대 너비:         400px

구조:
  - Todo 내용 (14px Regular)
  - 담당자 (12px Gray 700, 👤 아이콘)
  - 마감일 (12px Gray 700, 📅 아이콘)
  - 우선순위 (배지)
  - 관련 회의록 링크 (Primary 링크)
  - [완료] 버튼 (Primary)

사용 예시

## Todo                 (Todo 섹션 제목)
🔵 (2) 할당됨            (인라인 뱃지)

## 논의 내용
- 다음 주까지 완료      (우측 상단에 원형 뱃지 "2")

3. AI 처리 인디케이터

AI 회의록 생성 로딩

컨테이너:
  배경:              rgba(33, 150, 243, 0.05)
  테두리:            1px solid rgba(33, 150, 243, 0.2)
  모서리:            8px
  패딩:              16px

헤더:
  아이콘:            🤖 또는 AI 아이콘
  텍스트:            "AI 회의록 생성 중", 14px Medium

프로그레스 바:
  배경:              Gray 200
  진행:              Info (#2196F3) gradient
  높이:              4px
  모서리:            2px
  퍼센트:            우측 표시 (60%)

상태 텍스트:
  폰트:              12px Regular
  색상:              Gray 700
  내용:              단계별 메시지
    - "음성 데이터 분석 중..." (0-20%)
    - "발언 내용 분류 중..." (20-40%)
    - "논의 내용 정리 중..." (40-60%)
    - "결정 사항 추출 중..." (60-80%)
    - "회의록 생성 중..." (80-100%)

AI Todo 추출 로딩

컨테이너:
  배경:              rgba(33, 150, 243, 0.05)
  패딩:              16px
  모서리:            8px

헤더:
  아이콘:            🤖
  텍스트:            "Todo 자동 추출 중", 14px Medium

스피너:
  색상:              Info (#2196F3)
  크기:              32px
  애니메이션:        Pulse (3개 점 펄스)

상태 텍스트:
  내용:              "액션 아이템 분석 중..."

STT 정확도 표시

배경:              Gray 100 (선택)
패딩:              4px 8px
모서리:            4px
폰트:              11px Regular

정확도별 색상:
  90-100%:   Success (#4CAF50) + ✓ 아이콘
  70-89%:    Warning (#FF9800) + ⚠️ 아이콘
  0-69%:     Error (#F44336) + ⚠️ 아이콘 + "수동 확인 필요"

예시:
  [정확도: 95% ✓]
  [정확도: 45% ⚠️ 수동 확인 필요]

4. 관련 회의록 카드

배경:              rgba(100, 181, 246, 0.05)
테두리:            1px solid rgba(100, 181, 246, 0.2)
좌측 액센트:       3px solid #64B5F6
모서리:            8px
패딩:              12px
그림자 (Hover):    0 4px 8px rgba(100, 181, 246, 0.2)

구조:
  - 아이콘: 📝
  - 제목: 14px Medium Gray 900
  - 날짜: 12px Gray 600
  - 참석자: 12px Gray 600, 최대 3명 표시
  - 관련도 프로그레스: 4px 높이
  - 관련도 라벨: "관련도: 85%", 12px Primary
  - 연관 키워드: 태그 형식 (#RAG시스템, #성능최적화)

관련도 점수별 스타일

90-100%:  Primary Dark (#1565C0)
70-89%:   Primary (#1976D2)
50-69%:   Primary Light (#42A5F5)
30-49%:   표시 안 함 (관련도 낮음)

5. 타임스탬프

폰트:              JetBrains Mono, 12px
색상:              Gray 500
배경:              Gray 100 (선택)
패딩:              2px 6px (선택)
모서리:            4px (선택)

형식:
  - [14:05] (브래킷 포함)
  - 14:05 (브래킷 없음)
  - [14:05:32] (초 포함, 선택)

사용 예시:
  [14:05] 김민준:
  프로젝트 일정을 검토...

6. 화자 표시

폰트:              Pretendard, 14px Medium
색상:              Gray 900
형식:              "김민준:" (콜론 포함)
패딩 (우측):       4px (발언 내용과 간격)

프로필 이미지 (선택):
  크기:            24px × 24px 원형
  위치:            화자명 좌측
  기본 이미지:     이니셜 (예: "김" → "김")

7. 프롬프팅 가이드 UI

컨테이너:
  배경:            White
  테두리:          1px solid Gray 300
  모서리:          12px
  패딩:            20px
  그림자:          0 4px 12px rgba(0, 0, 0, 0.12)

헤더:
  아이콘:          🤖
  텍스트:          "회의록 개선", 18px Bold

사전 정의 프롬프트:
  레이아웃:        라디오 버튼 목록
  패딩:            12px
  Hover:           배경 Gray 100
  Selected:        배경 Primary 5% 투명도

프롬프트 아이템:
  - 제목: 14px Medium
  - 설명: 12px Gray 700
  - 예상 시간: 12px Gray 600 (선택)

커스텀 프롬프트:
  - 텍스트 영역: 최소 높이 100px
  - Placeholder: "직접 입력..."

팁 섹션:
  - 아이콘: 💡
  - 배경: rgba(255, 193, 7, 0.1)
  - 패딩: 12px
  - 모서리: 8px
  - 예시: "간결하게 요약해줘", "전문용어 설명 포함"

CTA 버튼:
  - [생성하기] 버튼 (Primary)
  - 전체 너비

인터랙션 패턴

1. 터치/클릭 피드백

Ripple Effect (Material Design)

색상:              rgba(25, 118, 210, 0.2) (Primary 20% 투명도)
시작:              클릭/터치 위치
크기:              원형, 중심에서 확산
지속 시간:         600ms
Easing:            cubic-bezier(0.4, 0.0, 0.2, 1)
적용 대상:         버튼, 카드, 리스트 아이템, 탭

Press State

배경 변화:         10% 어두워짐 (darken)
지속 시간:         100ms (Instant)
Easing:            linear
적용 대상:         모든 클릭 가능 요소

2. 애니메이션 토큰

Duration (지속 시간)

instant:  100ms   - 즉각적 피드백 (Press, Toggle)
fast:     200ms   - 빠른 전환 (Fade, Tooltip)
normal:   300ms   - 기본 전환 (Slide, Modal)
slow:     500ms   - 강조 전환 (Page Transition)

Easing (이징 함수)

standard:     cubic-bezier(0.4, 0.0, 0.2, 1)  - 기본, 대부분 사용
decelerate:   cubic-bezier(0.0, 0.0, 0.2, 1)  - 진입 (Fade In, Slide In)
accelerate:   cubic-bezier(0.4, 0.0, 1, 1)    - 퇴장 (Fade Out, Slide Out)
sharp:        cubic-bezier(0.4, 0.0, 0.6, 1)  - 날카로운 (Snap)

3. 화면 전환 애니메이션

Push (앞으로 이동)

/* 진입 */
.screen-push-enter {
  transform: translateX(100%);
  opacity: 1;
}
.screen-push-enter-active {
  transform: translateX(0);
  transition: transform 300ms cubic-bezier(0.4, 0.0, 0.2, 1);
}

/* 퇴장 */
.screen-push-exit {
  transform: translateX(0);
}
.screen-push-exit-active {
  transform: translateX(-30%);
  opacity: 0.8;
  transition: all 300ms cubic-bezier(0.4, 0.0, 0.2, 1);
}

Pop (뒤로 이동)

.screen-pop-enter {
  transform: translateX(-30%);
  opacity: 0.8;
}
.screen-pop-enter-active {
  transform: translateX(0);
  opacity: 1;
  transition: all 300ms cubic-bezier(0.4, 0.0, 0.2, 1);
}

.screen-pop-exit {
  transform: translateX(0);
}
.screen-pop-exit-active {
  transform: translateX(100%);
  transition: transform 300ms cubic-bezier(0.4, 0.0, 0.2, 1);
}

Modal (모달 표시)

/* Backdrop */
.modal-backdrop-enter {
  opacity: 0;
}
.modal-backdrop-enter-active {
  opacity: 1;
  transition: opacity 200ms cubic-bezier(0.0, 0.0, 0.2, 1);
}

/* Content (Bottom Sheet - Mobile) */
.modal-enter-mobile {
  transform: translateY(100%);
}
.modal-enter-active-mobile {
  transform: translateY(0);
  transition: transform 300ms cubic-bezier(0.0, 0.0, 0.2, 1);
}

/* Content (Dialog - Desktop) */
.modal-enter-desktop {
  transform: scale(0.9);
  opacity: 0;
}
.modal-enter-active-desktop {
  transform: scale(1);
  opacity: 1;
  transition: all 200ms cubic-bezier(0.0, 0.0, 0.2, 1);
}

Fade (페이드 인/아웃)

.fade-enter {
  opacity: 0;
}
.fade-enter-active {
  opacity: 1;
  transition: opacity 200ms cubic-bezier(0.4, 0.0, 0.2, 1);
}

.fade-exit {
  opacity: 1;
}
.fade-exit-active {
  opacity: 0;
  transition: opacity 200ms cubic-bezier(0.4, 0.0, 1, 1);
}

4. 로딩 상태

Skeleton UI

.skeleton {
  background: linear-gradient(
    90deg,
    #f0f0f0 0px,
    #e0e0e0 40px,
    #f0f0f0 80px
  );
  background-size: 200px 100%;
  animation: skeleton-loading 1.5s infinite;
  border-radius: 4px;
}

@keyframes skeleton-loading {
  0% {
    background-position: -200px 0;
  }
  100% {
    background-position: calc(200px + 100%) 0;
  }
}

Spinner (원형)

.spinner {
  width: 32px;
  height: 32px;
  border: 3px solid rgba(25, 118, 210, 0.2);
  border-top-color: #1976D2;
  border-radius: 50%;
  animation: spinner-rotate 1s linear infinite;
}

@keyframes spinner-rotate {
  to {
    transform: rotate(360deg);
  }
}

Pulse (3개 점)

.pulse {
  display: flex;
  gap: 8px;
}

.pulse-dot {
  width: 8px;
  height: 8px;
  background: #1976D2;
  border-radius: 50%;
  animation: pulse-scale 1.5s ease-in-out infinite;
}

.pulse-dot:nth-child(2) {
  animation-delay: 0.2s;
}

.pulse-dot:nth-child(3) {
  animation-delay: 0.4s;
}

@keyframes pulse-scale {
  0%, 100% {
    transform: scale(1);
    opacity: 1;
  }
  50% {
    transform: scale(1.5);
    opacity: 0.5;
  }
}

5. 스크롤 인터랙션

Pull to Refresh

상태:
  - Idle: 기본
  - Pulling: 아래로 당기는 중 (화살표 ↓)
  - Release: 임계점 도달 (화살표 ↑)
  - Refreshing: 새로고침 중 (스피너)

임계점:            80px
스피너 크기:       24px
애니메이션:        300ms

Infinite Scroll

트리거 위치:       하단 200px 전
로딩 인디케이터:   하단 중앙, 스피너
로딩 메시지:       "더 불러오는 중..." (12px Gray 700)
종료 메시지:       "모든 항목을 불러왔습니다" (12px Gray 600)

6. 제스처

Swipe (스와이프)

방향:              좌우 (수평)
최소 거리:         50px
최소 속도:         0.3px/ms
적용 대상:         카드, 리스트 아이템, 탭

액션:
  - 좌측 스와이프: 삭제, 보관
  - 우측 스와이프: 완료, 즐겨찾기

Long Press (롱프레스)

지속 시간:         500ms
피드백:            햅틱 (모바일), 배경 변화
적용 대상:         리스트 아이템, 카드

액션:
  - 컨텍스트 메뉴 표시
  - 다중 선택 모드 진입

7. 포커스 관리

Focus Ring

아웃라인:          2px solid Primary
오프셋:            2px
모서리:            4px
애니메이션:        200ms

적용 조건:
  - :focus-visible (키보드 네비게이션만)
  - 마우스 클릭 시 표시 안 함

Tab 순서

순서:              논리적 흐름 (좌→우, 상→하)
Skip Link:         "본문으로 건너뛰기" (접근성)
Tab Index:         -1 (프로그래밍 방식) / 0 (자연 순서)

8. 에러 상태 애니메이션

Shake (흔들림)

@keyframes shake {
  0%, 100% {
    transform: translateX(0);
  }
  10%, 30%, 50%, 70%, 90% {
    transform: translateX(-10px);
  }
  20%, 40%, 60%, 80% {
    transform: translateX(10px);
  }
}

.error-shake {
  animation: shake 0.5s;
}

적용 대상: 입력 필드 오류, 필수 항목 누락


변경 이력

버전 날짜 변경 내용 작성자
1.0 2025-01-20 초기 스타일 가이드 작성 이미준

문서 끝