-
Notifications
You must be signed in to change notification settings - Fork 1
Feat/sw 66 - 랜딩·로그인 페이지 UI/UX 고도화 및 브랜드 비주얼 업데이트 #40
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
d5a9765
d6c8104
946f232
2aeaaaa
d6c208e
6e33268
b117194
fef0109
bd768c7
103f23e
d4caf4e
45c4e7a
840b445
75ffd85
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,171 @@ | ||
| # SearchWeb DESIGN SYSTEM | ||
|
|
||
| 이 문서는 SearchWeb 프로젝트의 시각적 일관성을 유지하고, AI 에이전트가 새로운 UI를 생성할 때 참조하는 디자인 가이드라인입니다. | ||
| Apple의 Human Interface Guidelines를 기반으로 light/dark 모드를 모두 지원합니다. | ||
|
|
||
| --- | ||
|
|
||
| ## 1. 핵심 정체성 (Core Identity) | ||
| SearchWeb은 **"효율적이고 현대적인 링크 관리 플랫폼"**입니다. | ||
| - **깔끔함(Minimalism)**: 불필요한 장식을 배제하고 핵심 기능을 강조합니다. | ||
| - **전문성(Efficiency)**: 정보의 가독성을 높이고 빠른 탐색을 지원합니다. | ||
| - **부드러움(Soft Edges)**: 라운드된 모서리(`rounded-xl`)와 부드러운 호버 효과를 사용합니다. | ||
| - **적응형(Adaptive)**: Light/Dark 모드에서 동일한 명도 대비와 가독성을 보장합니다. | ||
|
|
||
| ## 2. 컬러 팔레트 (Color Palette) | ||
| Apple의 다크모드 원칙(semantic color + opacity-based hierarchy)을 따릅니다. | ||
|
|
||
| ### Light Mode - 핵심 브랜드 컬러 | ||
| - **Primary (Violet)**:  `#7c3aed` (Tailwind `violet-600`) - 주요 액션 버튼, 활성화된 상태 강조. | ||
| - **Primary-Light**:  `#ede9fe` (Tailwind `violet-100`) - 버튼 배경, 하이라이트 영역. | ||
| - **Primary-Dark**:  `#6d28d9` (Tailwind `violet-700`) - 클릭 시 상태(Active). | ||
|
|
||
| ### Dark Mode - 시맨틱 컬러 (보라색 포인트 컬러) | ||
| - **Interactive**:  `#7c3aed` (Violet) - 모든 인터랙티브 요소(버튼, 링크, 활성 상태)만 사용. | ||
| - **Interactive-Hover**:  `#8b5cf6` (Bright Violet) - 호버 상태, 강조 필요 시. | ||
|
|
||
| ### 강조 및 그라디언트 (Accent & Gradients) | ||
| - **Light Mode Gradient**: `linear-gradient(135deg, #7c3aed 0%, #a855f7 100%)` | ||
| - 주요 강조 버튼(Save, 가입 등)에 사용합니다. | ||
| - Tailwind 클래스: `bg-linear-to-br from-violet-600 to-purple-500` (또는 커스텀 클래스) | ||
| - **Dark Mode**: 단색 보라색(`#7c3aed`)만 사용 (미니멀리즘 유지, 그라디언트 지양) | ||
| - **Dark Mode Hover**: `#8b5cf6` (Bright Violet) 하이라이트. | ||
|
|
||
| ### Light Mode - 배경 및 표면 (Background & Surface) | ||
| - **Background**:  `#f6f6f8` - 전체 페이지 배경. | ||
| - **Surface/Card**:  `#FFFFFF` (Pure White) - 폴더 카드, 리스트 패널 등 정보가 담기는 영역. | ||
| - **Glassmorphism**: `bg-white/50 backdrop-blur-md` - 상단 헤더, 플로팅 메뉴 등에 적용. | ||
|
|
||
| ### Dark Mode - 배경 및 표면 (Background & Surface) | ||
| Apple HIG의 오파시티 기반 계층 시스템 사용: | ||
| - **Background (Primary)**:  `#000000` (Pure Black) - 페이지 전체 배경, 콘텐츠 영역. | ||
| - **Surface Level 1**:  `#1c1c1e` (approx) - 카드, 패널 최상위 레이어 (`bg-slate-950` / `bg-neutral-950`). | ||
| - **Surface Level 2**:  `#2a2a2d` (approx) - 중첩된 컨테이너, 모달 내부 요소 (`bg-slate-900`). | ||
| - **Glassmorphism**: `bg-slate-950/80 backdrop-blur-md` - 헤더, 플로팅 메뉴 (오파시티로 깊이 표현). | ||
|
|
||
| ### Light Mode - 타이포그래피 컬러 (Typography Colors) | ||
| - **Text Main**:  `#121118` (Near Black) - 제목, 주요 텍스트. | ||
| - **Text Sub**:  `#686189` (Muted Purple/Slate) - 부연 설명, 메타 데이터, 태그 등. | ||
| - **Border**:  `rgba(226, 232, 240, 0.6)` (Gray-200/60) - 구분선, 입력창 테두리. | ||
|
|
||
| ### Dark Mode - 타이포그래피 컬러 (Typography Colors) | ||
| Apple HIG 원칙: "단색 흰색 텍스트"로 높은 명도 대비 유지: | ||
| - **Text Main**:  `#ffffff` (White) - 제목, 주요 텍스트, 모든 활성 컨텐츠. | ||
| - **Text Sub**:  `rgba(255, 255, 255, 0.64)` (White 64%) - 부연 설명, 메타 데이터, 태그 등. | ||
| - **Text Tertiary**:  `rgba(255, 255, 255, 0.32)` (White 32%) - 비활성 요소, 플레이스홀더, 약한 힌트. | ||
| - **Border**: `rgba(255, 255, 255, 0.08)` (White 8%) - 구분선, 컨테이너 테두리 (오파시티로 깊이 표현). | ||
|
|
||
| ## 3. 타이포그래피 (Typography) | ||
| 서비스의 가독성과 정보 밀도를 결정하는 타이포그래피 규칙입니다. | ||
|
|
||
| ### 기본 폰트 | ||
| - **Sans-serif**: `Inter`, `sans-serif` (Next.js `next/font/google` 사용) | ||
| - **Icon**: `Material Symbols Outlined` (Google Fonts) | ||
|
|
||
| ### 텍스트 스타일 (Text Styles) | ||
| SearchWeb은 높은 정보 밀도를 위해 비교적 작은 크기의 폰트를 정교하게 사용합니다. | ||
| - **Title (Large)**: `font-bold`, `text-lg` ~ `text-xl` - 페이지 헤더, 강조 타이틀. | ||
| - **Title (Medium)**: `font-semibold`, `text-sm` - 폴더 이름, 다이얼로그 제목. | ||
| - **Body / Label**: `font-medium`, `text-[11px]` ~ `text-[13px]` - 일반 텍스트, 메뉴 항목. | ||
| - **Caption / Meta**: `text-[10px]`, `text-text-sub` - 태그, 날짜, 보조 정보. | ||
|
|
||
| ### 아이콘 규칙 (Icon Rules) | ||
| - **Default Size**: `18px` ~ `20px` (컨텐츠와 함께 쓰일 때) | ||
| - **Small Size**: `14px` ~ `16px` (좁은 버튼이나 리스트 내부) | ||
| - **Icon Settings**: `font-variation-settings: 'FILL' 0, 'wght' 400, 'GRAD' 0, 'opsz' 24` | ||
|
|
||
| ## 4. 기본 도형 및 간격 (Shapes & Spacing) | ||
| 일관된 리듬과 구조를 만드는 시각적 기초 규칙입니다. | ||
|
|
||
| ### 테두리 곡률 (Border Radius) | ||
| SearchWeb은 부드럽고 현대적인 느낌을 위해 라운드 값을 적극적으로 사용합니다. | ||
| - **XL (12px / `rounded-xl`)**: 주요 카드(`FolderCard`), 패널 및 모달의 본체. | ||
| - **LG (8px / `rounded-lg`)**: 일반 버튼, 큰 입력창, 서브 패널. | ||
| - **MD (6px / `rounded-md`)**: 작은 정렬 드롭다운, 태그 필터, 입력창 내부 요소. | ||
|
|
||
| ### 간격 및 패딩 (Spacing & Padding) | ||
| 8px(Tailwind 2단위)를 기본 디자인 유닛으로 사용합니다. | ||
| - **Inner Spacing**: 요소 내부 간격은 보통 `p-3`(12px) 또는 `p-4`(16px)를 사용합니다. | ||
| - **Gap**: 버튼 그룹이나 리스트 간격은 `gap-2`(8px) 또는 `gap-3`(12px)를 선호합니다. | ||
| - **Container Path**: 사이드바와 메인 패널 사이의 간격은 `gap-4`(16px). | ||
|
|
||
| ### 구분선 및 그림자 (Shadows & Borders) | ||
| - **Borders**: 강력한 테두리보다는 은은한 `border-gray-200/60`을 사용하여 섹션을 구분합니다. | ||
| - **Shadows**: 드롭다운이나 모달의 경우 `shadow-[0_8px_30px_rgb(0,0,0,0.08)]`와 같은 깊이감 있는 섀도우를 사용합니다. | ||
|
|
||
| ## 5. 컴포넌트 스타일 (Component Styles) | ||
| 실제 개발 시 적용할 표준 클래스 조합과 코드 패턴입니다. | ||
|
|
||
| ### Light Mode - 버튼 및 액션 (Buttons & Actions) | ||
| - **Primary Button**: `rounded-full` 또는 `rounded-lg` + **Primary Gradient** | ||
| - 스타일: `text-white font-bold shadow-md shadow-violet-500/20 hover:brightness-105 active:scale-95 transition-all` | ||
| - **Secondary Button**: `bg-slate-100 text-slate-600 hover:bg-slate-200 rounded-lg` | ||
| - **Ghost Button**: `text-slate-400 hover:text-slate-600 hover:bg-slate-50 rounded-lg` | ||
|
|
||
| ### Dark Mode - 버튼 및 액션 (Buttons & Actions) | ||
| 보라색(Violet)으로 인터랙티브 요소 통일: | ||
| - **Primary Button**: `rounded-lg` + Violet 600 | ||
| - 스타일: `bg-violet-600 text-white font-semibold hover:bg-violet-500 active:bg-violet-700 active:scale-95 transition-all` | ||
| - **Secondary Button**: `bg-slate-800 text-white hover:bg-slate-700 rounded-lg` | ||
| - **Ghost Button**: `text-violet-400 hover:text-violet-300 hover:bg-slate-900/50 rounded-lg` | ||
| - **Destructive Button**: `bg-red-600 text-white hover:bg-red-500 rounded-lg` (위험한 액션만 별색 사용) | ||
|
|
||
| ### Light Mode - 카드 (Cards) | ||
| 폴더 카드나 개별 링크 항목에 공통으로 적용되는 스타일입니다. | ||
| - **Base**: `bg-white/50 backdrop-blur-sm border border-slate-100 shadow-sm transition-all` | ||
| - **Active/Hover**: `hover:bg-slate-100/80 hover:border-slate-200` | ||
| - **Structure**: 아이콘(`material-symbols-outlined`), 타이틀, 그리고 우측 상단의 `more_horiz` 메뉴 버튼. | ||
|
|
||
| ### Dark Mode - 카드 (Cards) | ||
| 오파시티 기반 계층화: | ||
| - **Base**: `bg-slate-900/50 backdrop-blur-sm border border-white/8 shadow-sm transition-all` | ||
| - **Hover**: `hover:bg-slate-800/60 hover:border-white/12` | ||
| - **Active**: `bg-slate-800/80 border-violet-500/30` (활성 상태는 보라색 테두리로 표현) | ||
| - **Structure**: Light Mode와 동일 구조, 텍스트는 흰색 계열 | ||
|
|
||
| ### Light Mode - 드롭다운 및 메뉴 (Dropdowns & Menus) | ||
| - **Container**: `bg-white/95 backdrop-blur-md rounded-xl border border-gray-100/50 shadow-lg` | ||
| - **Items**: `flex items-center gap-2.5 px-3 py-2 text-[11px] font-medium transition-colors` | ||
| - **Item Hover**: `hover:bg-purple-50 text-gray-700` | ||
| - **Destructive Item**: `text-rose-500 hover:bg-rose-50` (삭제 등 위험한 액션) | ||
|
|
||
| ### Dark Mode - 드롭다운 및 메뉴 (Dropdowns & Menus) | ||
| 오파시티 기반 설계: | ||
| - **Container**: `bg-slate-950/95 backdrop-blur-md rounded-xl border border-white/8 shadow-xl` | ||
| - **Items**: `flex items-center gap-2.5 px-3 py-2 text-[11px] font-medium text-white transition-colors` | ||
| - **Item Hover**: `hover:bg-violet-600/20 text-white` (보라색 배경으로 호버 표현) | ||
| - **Destructive Item**: `text-red-400 hover:bg-red-600/20` (위험한 액션은 빨간색) | ||
|
|
||
| ### Light Mode - 필터 및 정렬 버튼 (Filter/Sort Triggers) | ||
| - **Base**: `group flex items-center gap-1.5 px-2.5 py-1.5 border border-gray-200/60 rounded-md bg-white/50 text-[11px] font-medium transition-all` | ||
| - **Active State**: `bg-purple-50/50 border-purple-200/50 text-purple-700 shadow-sm` | ||
|
|
||
| ### Dark Mode - 필터 및 정렬 버튼 (Filter/Sort Triggers) | ||
| - **Base**: `group flex items-center gap-1.5 px-2.5 py-1.5 border border-white/8 rounded-md bg-slate-900/50 text-white text-[11px] font-medium transition-all` | ||
| - **Active State**: `bg-violet-600/20 border-violet-500/30 text-violet-400 shadow-sm` | ||
|
|
||
| ### Light Mode - 사이드바 (Sidebar) | ||
| - **Left Sidebar**: `w-[280px] border-r border-slate-100 bg-white/40` | ||
| - **Tree Item**: `h-10 px-4 flex items-center gap-3 rounded-lg hover:bg-slate-100 transition-colors` | ||
|
|
||
| ### Dark Mode - 사이드바 (Sidebar) | ||
| - **Left Sidebar**: `w-[280px] border-r border-white/8 bg-slate-950/40` | ||
| - **Tree Item**: `h-10 px-4 flex items-center gap-3 rounded-lg text-white hover:bg-slate-900/60 transition-colors` | ||
| - **Active Item**: `bg-violet-600/20 border-l-2 border-violet-500 text-white` | ||
|
|
||
| --- | ||
| ## 작업 규칙 (Maintenance Rules) | ||
|
|
||
| ### Light/Dark 모드 공통 규칙 | ||
| 1. **임의의 색상 지양**: 반드시 정의된 토큰만 사용합니다. | ||
| 2. **반응형 고려**: 모바일 대응을 위해 간격과 폰트 크기를 유연하게 조정합니다. | ||
| 3. **일관성 및 AI 제안**: 모든 UI 기능은 일관된 디자인 시스템을 상속받아 구현합니다. 다만, 특정 상황에서 더 어울리거나 사용자 경험(UX)을 향상시킬 수 있는 대안적인 스타일이나 컬러가 있다고 AI가 판단할 경우, 적극적으로 사용자에게 제안하고 소통합니다. | ||
|
|
||
| ### Dark Mode 특화 규칙 (SearchWeb Purple 포인트) | ||
| 4. **시맨틱 색상 엄격성**: Dark Mode에서는 인터랙티브 요소(버튼, 링크, 활성 상태)에만 보라색(`#7c3aed`)을 사용합니다. 장식적 컬러나 배경에 보라색 사용 지양. | ||
| 5. **오파시티 기반 계층**: 다크 배경에서는 테두리보다 오파시티(`rgba(255,255,255, x%)`)를 우선하여 깊이 표현합니다. | ||
| - Level 1 Surface: `bg-slate-950` (주 컨텐츠) | ||
| - Level 2 Surface: `bg-slate-900` (중첩 요소) | ||
| - 구분선: `border-white/8` ~ `border-white/12` | ||
| 6. **텍스트 명도 대비**: Dark Mode의 모든 텍스트는 흰색 계열(`#ffffff` 또는 `rgba(255,255,255, x%)`)만 사용하여 WCAG AA 이상의 명도 대비 확보. | ||
| 7. **그라디언트 지양**: Dark Mode에서는 단색만 사용 (세련된 미니멀리즘 유지). | ||
|
Comment on lines
+8
to
+171
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 문서 lint 경고를 먼저 정리해 주세요. 현재 헤딩 앞뒤 공백(MD022)과 순서 목록 번호(MD029) 경고가 문서 전반에 반복됩니다. 문서 lint가 CI에 걸려 있으면 이 파일 하나로 파이프라인이 계속 실패할 수 있으니, 헤딩 사이 빈 줄을 추가하고 목록 번호를 순차적으로 맞추는 편이 좋습니다. 🧰 Tools🪛 markdownlint-cli2 (0.22.0)[warning] 8-8: Headings should be surrounded by blank lines (MD022, blanks-around-headings) [warning] 15-15: Headings should be surrounded by blank lines (MD022, blanks-around-headings) [warning] 18-18: Headings should be surrounded by blank lines (MD022, blanks-around-headings) [warning] 19-19: Images should have alternate text (alt text) (MD045, no-alt-text) [warning] 20-20: Images should have alternate text (alt text) (MD045, no-alt-text) [warning] 21-21: Images should have alternate text (alt text) (MD045, no-alt-text) [warning] 23-23: Headings should be surrounded by blank lines (MD022, blanks-around-headings) [warning] 24-24: Images should have alternate text (alt text) (MD045, no-alt-text) [warning] 25-25: Images should have alternate text (alt text) (MD045, no-alt-text) [warning] 27-27: Headings should be surrounded by blank lines (MD022, blanks-around-headings) [warning] 34-34: Headings should be surrounded by blank lines (MD022, blanks-around-headings) [warning] 35-35: Images should have alternate text (alt text) (MD045, no-alt-text) [warning] 36-36: Images should have alternate text (alt text) (MD045, no-alt-text) [warning] 39-39: Headings should be surrounded by blank lines (MD022, blanks-around-headings) [warning] 41-41: Images should have alternate text (alt text) (MD045, no-alt-text) [warning] 42-42: Images should have alternate text (alt text) (MD045, no-alt-text) [warning] 43-43: Images should have alternate text (alt text) (MD045, no-alt-text) [warning] 46-46: Headings should be surrounded by blank lines (MD022, blanks-around-headings) [warning] 47-47: Images should have alternate text (alt text) (MD045, no-alt-text) [warning] 48-48: Images should have alternate text (alt text) (MD045, no-alt-text) [warning] 49-49: Images should have alternate text (alt text) (MD045, no-alt-text) [warning] 51-51: Headings should be surrounded by blank lines (MD022, blanks-around-headings) [warning] 53-53: Images should have alternate text (alt text) (MD045, no-alt-text) [warning] 54-54: Images should have alternate text (alt text) (MD045, no-alt-text) [warning] 55-55: Images should have alternate text (alt text) (MD045, no-alt-text) [warning] 58-58: Headings should be surrounded by blank lines (MD022, blanks-around-headings) [warning] 61-61: Headings should be surrounded by blank lines (MD022, blanks-around-headings) [warning] 65-65: Headings should be surrounded by blank lines (MD022, blanks-around-headings) [warning] 72-72: Headings should be surrounded by blank lines (MD022, blanks-around-headings) [warning] 77-77: Headings should be surrounded by blank lines (MD022, blanks-around-headings) [warning] 80-80: Headings should be surrounded by blank lines (MD022, blanks-around-headings) [warning] 86-86: Headings should be surrounded by blank lines (MD022, blanks-around-headings) [warning] 92-92: Headings should be surrounded by blank lines (MD022, blanks-around-headings) [warning] 96-96: Headings should be surrounded by blank lines (MD022, blanks-around-headings) [warning] 99-99: Headings should be surrounded by blank lines (MD022, blanks-around-headings) [warning] 105-105: Headings should be surrounded by blank lines (MD022, blanks-around-headings) [warning] 113-113: Headings should be surrounded by blank lines (MD022, blanks-around-headings) [warning] 119-119: Headings should be surrounded by blank lines (MD022, blanks-around-headings) [warning] 126-126: Headings should be surrounded by blank lines (MD022, blanks-around-headings) [warning] 132-132: Headings should be surrounded by blank lines (MD022, blanks-around-headings) [warning] 139-139: Headings should be surrounded by blank lines (MD022, blanks-around-headings) [warning] 143-143: Headings should be surrounded by blank lines (MD022, blanks-around-headings) [warning] 147-147: Headings should be surrounded by blank lines (MD022, blanks-around-headings) [warning] 151-151: Headings should be surrounded by blank lines (MD022, blanks-around-headings) [warning] 157-157: Headings should be surrounded by blank lines (MD022, blanks-around-headings) [warning] 159-159: Headings should be surrounded by blank lines (MD022, blanks-around-headings) [warning] 164-164: Headings should be surrounded by blank lines (MD022, blanks-around-headings) [warning] 165-165: Ordered list item prefix (MD029, ol-prefix) [warning] 166-166: Ordered list item prefix (MD029, ol-prefix) [warning] 170-170: Ordered list item prefix (MD029, ol-prefix) [warning] 171-171: Ordered list item prefix (MD029, ol-prefix) 🤖 Prompt for AI Agents |
||
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
색상 샘플 이미지에 대체 텍스트가 없습니다.
지금 형태는 MD045 경고가 반복되고, 스크린리더에는 각 색상 칩의 의미가 전달되지 않습니다. alt 텍스트를 넣거나, 가능하면 이미지를 제거하고 색상명/hex 값을 표나 코드 스팬으로 표현해 주세요.
🧰 Tools
🪛 markdownlint-cli2 (0.22.0)
[warning] 19-19: Images should have alternate text (alt text)
(MD045, no-alt-text)
[warning] 20-20: Images should have alternate text (alt text)
(MD045, no-alt-text)
[warning] 21-21: Images should have alternate text (alt text)
(MD045, no-alt-text)
[warning] 23-23: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
[warning] 24-24: Images should have alternate text (alt text)
(MD045, no-alt-text)
[warning] 25-25: Images should have alternate text (alt text)
(MD045, no-alt-text)
[warning] 27-27: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
[warning] 34-34: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
[warning] 35-35: Images should have alternate text (alt text)
(MD045, no-alt-text)
[warning] 36-36: Images should have alternate text (alt text)
(MD045, no-alt-text)
[warning] 39-39: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
[warning] 41-41: Images should have alternate text (alt text)
(MD045, no-alt-text)
[warning] 42-42: Images should have alternate text (alt text)
(MD045, no-alt-text)
[warning] 43-43: Images should have alternate text (alt text)
(MD045, no-alt-text)
[warning] 46-46: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
[warning] 47-47: Images should have alternate text (alt text)
(MD045, no-alt-text)
[warning] 48-48: Images should have alternate text (alt text)
(MD045, no-alt-text)
[warning] 49-49: Images should have alternate text (alt text)
(MD045, no-alt-text)
[warning] 51-51: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
[warning] 53-53: Images should have alternate text (alt text)
(MD045, no-alt-text)
[warning] 54-54: Images should have alternate text (alt text)
(MD045, no-alt-text)
[warning] 55-55: Images should have alternate text (alt text)
(MD045, no-alt-text)
🤖 Prompt for AI Agents