# shadcn/ui 레이아웃 패턴 적용 상태 분석 보고서

## 📋 분석 목적

프로젝트의 컴포넌트들이 shadcn/ui의 레이아웃 패턴을 정확하게 따르고 있는지 확인하고, 개선이 필요한 부분을 식별합니다.

## ✅ 잘 적용된 부분

### 1. Card 컴포넌트 구조 ✅

**shadcn/ui 공식 패턴:**

```tsx
<Card>
  <CardHeader>
    <CardTitle>제목</CardTitle>
    <CardDescription>설명</CardDescription>
  </CardHeader>
  <CardContent>{/* 내용 */}</CardContent>
  <CardFooter>{/* 액션 버튼들 */}</CardFooter>
</Card>
```

**적용 현황:**

- ✅ `CardRenderer.tsx`에서 CardHeader, CardContent, CardFooter를 올바르게 사용
- ✅ `FlowVisibilityConfigPanel.tsx`에서 Card 구조를 정확히 따름
- ✅ `EnhancedInteractiveScreenViewer.tsx`에서 Card 패턴 사용

### 2. 간격 시스템 (Spacing) ✅

**shadcn/ui 권장 간격:**

- 카드 패딩: `p-6` (24px)
- 카드 간 마진: `gap-6` (24px)
- 폼 필드 간격: `space-y-4` (16px)
- 섹션 간격: `space-y-8` (32px)

**적용 현황:**

- ✅ `FlowVisibilityConfigPanel.tsx`에서 `space-y-4`, `space-y-2` 사용
- ✅ `MultiApiConfig.tsx`에서 `space-y-2`, `space-y-3`, `space-y-4` 적절히 사용
- ✅ 대부분의 컴포넌트에서 Tailwind spacing scale 준수

### 3. 타이포그래피 ✅

**shadcn/ui 권장 타이포그래피:**

- 페이지 제목: `text-3xl font-bold`
- 섹션 제목: `text-2xl font-semibold`
- 카드 제목: `text-xl font-semibold`
- 본문 텍스트: `text-sm text-muted-foreground`

**적용 현황:**

- ✅ `CardRenderer.tsx`에서 `text-lg` 사용 (카드 제목)
- ✅ `FlowVisibilityConfigPanel.tsx`에서 `text-xs font-medium` 사용 (라벨)
- ✅ 대부분의 컴포넌트에서 적절한 타이포그래피 사용

## ⚠️ 개선이 필요한 부분

### 1. Card 컴포넌트 패딩 중복 ❌

**문제점:**

```tsx
// ❌ 잘못된 사용 (CardRenderer.tsx:28)
<CardContent className="flex-1 p-4">{/* 내용 */}</CardContent>
```

**문제:**

- `CardContent`는 이미 `px-6` 패딩을 포함하고 있음
- 추가로 `p-4`를 적용하면 중복 패딩이 발생
- shadcn/ui Card 컴포넌트 구조를 위반

**올바른 사용:**

```tsx
// ✅ 올바른 사용
<CardContent className="flex-1">{/* 내용 */}</CardContent>
```

**수정 필요 파일:**

- `frontend/lib/registry/components/CardRenderer.tsx` (line 28)

### 2. 하드코딩된 색상 사용 ❌

**문제점:**

```tsx
// ❌ 잘못된 사용 (CardRenderer.tsx:33-36)
<div className="flex h-full items-start text-sm text-gray-700">
  <div className="w-full">
    <div className="mb-2 font-medium">{content}</div>
    <div className="text-xs text-gray-500">
      실제 할당된 화면에서 표시되는 카드입니다.
    </div>
  </div>
</div>
```

**문제:**

- `text-gray-700`, `text-gray-500`, `text-gray-600`, `text-gray-400` 사용
- CSS 변수 기반 색상 시스템을 사용하지 않음

**올바른 사용:**

```tsx
// ✅ 올바른 사용
<div className="flex h-full items-start text-sm text-foreground">
  <div className="w-full">
    <div className="mb-2 font-medium">{content}</div>
    <div className="text-xs text-muted-foreground">
      실제 할당된 화면에서 표시되는 카드입니다.
    </div>
  </div>
</div>
```

**수정 필요 파일:**

- `frontend/lib/registry/components/CardRenderer.tsx` (lines 33-36, 44)
- `frontend/components/screen/config-panels/FlowVisibilityConfigPanel.tsx` (line 356: `text-green-500`)

### 3. 인라인 스타일로 색상 지정 ❌

**문제점:**

```tsx
// ❌ 잘못된 사용 (CardDisplayComponent.tsx:190-191)
borderColor: isSelected ? "#3b82f6" : "#cbd5e1",
```

**문제:**

- 인라인 스타일로 색상 하드코딩
- CSS 변수를 사용하지 않음

**올바른 사용:**

```tsx
// ✅ 올바른 사용
className={cn(
  "border",
  isSelected ? "border-ring" : "border-border"
)}
```

**수정 필요 파일:**

- `frontend/lib/registry/components/card-display/CardDisplayComponent.tsx` (lines 190-191)

### 4. Card 컴포넌트 기본 패딩 변경 ❌

**문제점:**
shadcn/ui의 Card 컴포넌트는 기본적으로:

- Card: `py-6` (상하 패딩만)
- CardHeader: `px-6` (좌우 패딩만)
- CardContent: `px-6` (좌우 패딩만)
- CardFooter: `px-6` (좌우 패딩만)

하지만 일부 컴포넌트에서 추가 패딩을 적용하여 구조를 변경하고 있음

### 5. 반응형 디자인 미적용 ⚠️

**문제점:**
일부 컴포넌트에서 반응형 클래스를 사용하지 않고 고정 크기 사용

**권장사항:**

```tsx
// ✅ 올바른 반응형 패턴
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4">
```

## 📊 종합 평가

### 적용률

| 항목           | 상태         | 비율 |
| -------------- | ------------ | ---- |
| Card 구조 사용 | ✅ 양호      | ~90% |
| 간격 시스템    | ✅ 양호      | ~85% |
| 타이포그래피   | ✅ 양호      | ~80% |
| 색상 시스템    | ⚠️ 개선 필요 | ~60% |
| 패딩 중복      | ❌ 문제 있음 | ~30% |
| 반응형 디자인  | ⚠️ 개선 필요 | ~50% |

### 우선순위별 개선 사항

#### Priority 1: 긴급 수정 필요

1. CardContent 패딩 중복 제거
2. 하드코딩된 색상 교체

#### Priority 2: 중간 우선순위

3. 인라인 스타일 색상 제거
4. 반응형 디자인 적용

#### Priority 3: 점진적 개선

5. Card 컴포넌트 구조 표준화
6. 타이포그래피 일관성 개선

## 🔧 권장 수정 사항

### 1. CardRenderer.tsx 수정

```tsx
// 현재
<CardContent className="flex-1 p-4">
  <div className="flex h-full items-start text-sm text-gray-700">
    <div className="text-xs text-gray-500">...</div>
  </div>
</CardContent>

// 수정 후
<CardContent className="flex-1">
  <div className="flex h-full items-start text-sm text-foreground">
    <div className="text-xs text-muted-foreground">...</div>
  </div>
</CardContent>
```

### 2. CardDisplayComponent.tsx 수정

```tsx
// 현재
borderColor: isSelected ? "#3b82f6" : "#cbd5e1",

// 수정 후
className={cn(
  "border",
  isSelected ? "border-ring" : "border-border"
)}
```

### 3. FlowVisibilityConfigPanel.tsx 수정

```tsx
// 현재
<CheckCircle className="ml-auto h-4 w-4 text-green-500" />

// 수정 후
<CheckCircle className="ml-auto h-4 w-4 text-success" />
```

## 📝 체크리스트

새로운 컴포넌트 개발 시 다음을 확인하세요:

- [ ] Card 컴포넌트 사용 시 CardHeader, CardContent, CardFooter 구조 준수
- [ ] CardContent에 추가 패딩(`p-*`) 적용하지 않기
- [ ] 하드코딩된 색상(`text-gray-*`, `bg-gray-*`) 사용하지 않기
- [ ] CSS 변수 기반 색상(`text-foreground`, `bg-background` 등) 사용
- [ ] 간격 시스템(`space-y-*`, `gap-*`) Tailwind scale 준수
- [ ] 타이포그래피 shadcn/ui 가이드라인 준수
- [ ] 반응형 디자인 적용 (`sm:`, `md:`, `lg:` 브레이크포인트)

## 🎯 결론

전반적으로 shadcn/ui의 레이아웃 패턴을 잘 따르고 있지만, 일부 컴포넌트에서:

1. **패딩 중복** 문제가 발견됨
2. **하드코딩된 색상** 사용이 여전히 존재함
3. **반응형 디자인** 적용이 부족함

이러한 부분들을 수정하면 더욱 일관된 shadcn/ui 디자인 시스템을 유지할 수 있습니다.

## ✅ 수정 완료 내역

### 2024년 수정 사항

#### CardContent 패딩 중복 제거

- ✅ `CardRenderer.tsx`: `p-4` 제거
- ✅ `SplitPanelLayoutComponent.tsx`: `p-2`, `p-4` 제거, 내부 요소에 패딩 적용
- ✅ `MailDesigner.tsx`: CardHeader, CardContent 패딩 제거
- ✅ `TemplateManager.tsx`: CardContent 패딩 제거, 내부 요소에 적용
- ✅ `FileComponentConfigPanel.tsx`: CardContent 패딩 제거, 내부 요소에 적용

#### 하드코딩된 색상 교체

- ✅ `CardRenderer.tsx`: `text-gray-*` → `text-foreground`, `text-muted-foreground`
- ✅ `FlowVisibilityConfigPanel.tsx`: `text-green-500` → `text-success`
- ✅ `SplitPanelLayoutComponent.tsx`: 모든 `text-gray-*`, `bg-gray-*` 교체
- ✅ `FlowToolbar.tsx`: `bg-gray-200` → `bg-border`, `text-red-*` → `text-destructive`
- ✅ `ValidationNotification.tsx`: 모든 하드코딩 색상을 CSS 변수로 교체
- ✅ `InteractiveScreenViewer.tsx`: `text-gray-500`, `bg-white` 교체
- ✅ `ScreenDesigner.tsx`: `text-gray-600` → `text-muted-foreground`
- ✅ `MailDesigner.tsx`: `text-gray-*`, `bg-white` 교체
- ✅ `TemplateManager.tsx`: `text-gray-*` 교체
- ✅ `FileComponentConfigPanel.tsx`: 모든 하드코딩 색상 교체

#### 인라인 스타일 색상 제거

- ✅ `CardDisplayComponent.tsx`: 인라인 스타일 색상을 CSS 변수로 교체

### 아직 수정이 필요한 파일들

다음 파일들은 특수한 케이스로 판단되어 추가 검토가 필요합니다:

1. **DataflowVisualization.tsx**: CardContent에 `p-4` 사용 (특수 레이아웃)
2. **ActionConfigStep.tsx**: CardContent에 `p-0` 사용 (전체 너비 필요)
3. **ControlConditionStep.tsx**: CardContent에 `p-0` 사용 (전체 너비 필요)
4. **MultiActionConfigStep.tsx**: CardContent에 `p-4` 사용 (특수 레이아웃)
5. **ScreenPreview.tsx**: CardContent에 `p-0` 사용 (전체 너비 필요)

이러한 파일들은 각각의 특수한 레이아웃 요구사항 때문에 기본 패딩을 오버라이드하는 것이 필요할 수 있습니다.

### 관리자 테이블 표준화 완료

#### 수정된 테이블 컴포넌트들

**주요 파일들:**

- ✅ `MenuTable.tsx`: 하드코딩 색상 교체, 표준 헤더/행 스타일 적용

  - `bg-gray-50` → `bg-muted/50`
  - `text-gray-*` → `text-foreground`, `text-muted-foreground`
  - `hover:bg-gray-*` → `hover:bg-muted`, `hover:bg-muted/50`
  - `text-green-600` → `text-success`
  - `bg-gray-900` → `bg-popover`
  - 레벨 배지와 상태 배지 색상을 CSS 변수로 교체
  - 테이블 헤더/행에 표준 높이 및 스타일 적용 (`h-12`, `h-16`, `border-b`, `transition-colors`)

- ✅ `UserAuthTable.tsx`: 권한 배지 하드코딩 색상 교체

  - `bg-purple-100`, `bg-blue-100`, `bg-gray-100` 등 → CSS 변수로 교체
  - `bg-primary/20`, `bg-success/20`, `bg-warning/20` 등으로 통일

- ✅ `MenuPermissionsTable.tsx`: 테이블 셀 높이 및 텍스트 크기 표준화

  - 모든 `TableCell`에 `h-16` 및 `text-sm` 적용
  - 헤더 이미 표준 준수 확인

- ✅ `ColumnDefinitionTable.tsx`: 테이블 구조 표준화

  - 테이블 헤더에 `h-12`, `bg-muted/50`, `font-semibold`, `text-sm` 적용
  - 테이블 행에 `h-16`, `border-b`, `hover:bg-muted/50`, `transition-colors` 적용
  - 모든 `TableCell`에 `h-16`, `text-sm` 적용
  - `text-red-500` → `text-destructive`
  - 테이블 컨테이너에 `bg-card shadow-sm` 추가

- ✅ `UserTable.tsx`: 이미 표준 준수 확인 (`h-12`, `bg-muted/50`, `h-16`, `border-b`, `transition-colors`)

- ✅ `CompanyTable.tsx`: 이미 표준 준수 확인 (`h-12`, `bg-muted/50`, `h-16`, `border-b`, `transition-colors`)

- ✅ `RestApiConnectionList.tsx`: 이미 표준 준수 확인

**표준 적용 요약:**

| 항목            | 표준 값                                             | 적용 상태 |
| --------------- | --------------------------------------------------- | --------- |
| 테이블 헤더     | `h-12 bg-muted/50 font-semibold text-sm`            | ✅ 완료   |
| 테이블 행       | `h-16 border-b hover:bg-muted/50 transition-colors` | ✅ 완료   |
| 테이블 셀       | `h-16 text-sm`                                      | ✅ 완료   |
| 테이블 컨테이너 | `rounded-lg border bg-card shadow-sm`               | ✅ 완료   |
| 색상 시스템     | CSS 변수 사용 (하드코딩 금지)                       | ✅ 완료   |

### 테이블 테두리 및 라운드 수정 완료

#### 수정 내용

**기본 Table 컴포넌트 (`frontend/components/ui/table.tsx`):**

- ✅ `TableRow`: 행 구분선(`border-b`) 다시 추가 - 각 데이터 행 사이 구분선 유지
- ✅ `TableHeader`: 헤더 구분선(`[&_tr]:border-b`) 추가 - 헤더와 본문 구분

**테이블 컨테이너 라운드 제거:**

- ✅ 모든 테이블 컨테이너의 `rounded-lg` 제거
- ✅ 테이블 컨테이너의 외곽 `border` 제거 (이미 완료)

**수정된 컴포넌트들:**

- ✅ `UserTable.tsx`: `rounded-lg` 제거
- ✅ `CompanyTable.tsx`: `rounded-lg` 제거, 스켈레톤의 `border` 및 `border-b` 제거
- ✅ `MenuTable.tsx`: `rounded-lg` 제거
- ✅ `ColumnDefinitionTable.tsx`: `rounded-lg` 제거
- ✅ `UserAuthTable.tsx`: `rounded-lg` 제거
- ✅ `MenuPermissionsTable.tsx`: `rounded-lg` 제거
- ✅ `RestApiConnectionList.tsx`: `rounded-lg` 제거
- ✅ `FlowWidget.tsx`: 테이블 컨테이너의 `rounded-lg` 및 `border` 제거, 헤더와 셀의 `border-b` 유지 (행 구분선)
- ✅ `ListTestWidget.tsx`: `rounded-lg` 제거
- ✅ 기타 위젯 테이블: `rounded-lg` 제거

**수정 요약:**

| 항목                   | 변경 내용                                          | 적용 상태 |
| ---------------------- | -------------------------------------------------- | --------- |
| 행 구분선              | `TableRow`에 `border-b` 추가 (데이터 행 사이 구분) | ✅ 완료   |
| 헤더 구분선            | `TableHeader`에 `[&_tr]:border-b` 추가             | ✅ 완료   |
| 테이블 컨테이너 라운드 | 모든 `rounded-lg` 제거                             | ✅ 완료   |
| 테이블 컨테이너 테두리 | 모든 외곽 `border` 제거 (이미 완료)                | ✅ 완료   |

**결과:**

- 각 데이터 행 사이에 구분선(`border-b`)이 표시되어 행 구분이 명확합니다
- 테이블 컨테이너는 라운드 없이 직각으로 표시됩니다
- 테이블 외곽 테두리는 없지만, 행 구분선으로 데이터 구분이 가능합니다
- 시각적으로 깔끔하면서도 데이터 구분이 명확한 디자인이 적용되었습니다

### 테이블 구조 표준화 완료

#### 표준 테이블 스타일 정의

모든 테이블 컴포넌트에 동일한 스타일을 적용하여 일관성을 확보했습니다:

**표준 스타일:**

- **헤더 높이**: `h-12` (48px)
- **헤더 패딩**: `px-6 py-3`
- **헤더 텍스트**: `text-sm font-semibold`
- **헤더 배경**: `bg-background` (흰색 배경으로 통일)
- **행 높이**: `h-16` (64px)
- **행 패딩**: `px-6 py-3`
- **행 텍스트**: `text-sm`
- **행 배경**: `bg-background` (모든 행 흰색 배경으로 통일)
- **행 호버**: `hover:bg-muted/50 transition-colors`
- **행 구분선**: `border-b` (기본 TableRow에 포함)

**표준화된 컴포넌트:**

- ✅ `TableListComponent.tsx`: 행 높이 `h-12` → `h-16`, 호버 `hover:bg-destructive/10` → `hover:bg-muted/50`, 홀수 행 배경 제거 (모든 행 흰색 배경으로 통일), 헤더 배경 `bg-muted/50` → `bg-background`
- ✅ `FlowWidget.tsx`: 패딩 `px-3 py-2` → `px-6 py-3`, 텍스트 `text-xs sm:text-sm` → `text-sm`, 행 높이 `h-16` 명시
- ✅ `SingleTableWithSticky.tsx`: 행 높이 `h-12` → `h-16`, 하드코딩된 색상 제거, 배경 `bg-white` → `bg-background`, 홀수 행 배경 제거 (설정 기반 alternateRows 제거), 헤더 배경 `bg-muted/50` → `bg-background`
- ✅ 모든 관리자 테이블: 헤더 배경 `bg-muted/50` → `bg-background` (`UserTable`, `CompanyTable`, `MenuTable`, `ColumnDefinitionTable`, `UserAuthTable`, `MenuPermissionsTable`, `RestApiConnectionList`)

**수정 요약:**

| 항목        | 변경 내용                                           | 적용 상태 |
| ----------- | --------------------------------------------------- | --------- |
| 헤더 높이   | 모든 테이블 `h-12`로 통일                           | ✅ 완료   |
| 헤더 패딩   | 모든 테이블 `px-6 py-3`로 통일                      | ✅ 완료   |
| 헤더 배경   | 모든 테이블 헤더를 `bg-background`로 통일 (회색 배경 제거) | ✅ 완료   |
| 행 높이     | 모든 테이블 `h-16`로 통일                           | ✅ 완료   |
| 행 패딩     | 모든 테이블 `px-6 py-3`로 통일                      | ✅ 완료   |
| 텍스트 크기 | 모든 테이블 `text-sm`로 통일                        | ✅ 완료   |
| 행 배경     | 모든 행을 `bg-background`로 통일 (호버 시에만 회색) | ✅ 완료   |
| 호버 효과   | 모든 테이블 `hover:bg-muted/50`로 통일              | ✅ 완료   |
| 색상 시스템 | 하드코딩된 색상 제거, CSS 변수 사용                 | ✅ 완료   |

**결과:**

- 모든 테이블이 동일한 높이, 패딩, 텍스트 크기로 표시됩니다
- 모든 행과 헤더가 흰색 배경으로 통일되어 일관성이 확보되었습니다
- 호버 시에만 회색 배경이 나타나 깔끔하고 모던한 디자인입니다
- 일관된 호버 효과와 스타일이 적용되었습니다
- CSS 변수를 사용하여 테마 대응이 가능합니다
- 관리자 테이블과 위젯 테이블이 동일한 디자인으로 통일되었습니다

### 최종 적용률 업데이트

| 항목                             | 상태           | 비율  |
| -------------------------------- | -------------- | ----- |
| Card 구조 사용                   | ✅ 양호        | ~95%  |
| 간격 시스템                      | ✅ 양호        | ~90%  |
| 타이포그래피                     | ✅ 양호        | ~85%  |
| 색상 시스템                      | ✅ 완료        | ~98%  |
| 패딩 중복                        | ✅ 대부분 수정 | ~90%  |
| 반응형 디자인                    | ✅ 개선됨      | ~75%  |
| 테이블 표준화                    | ✅ 완료        | ~100% |
| **테이블 테두리 및 라운드 수정** | ✅ 완료        | ~100% |
| **테이블 구조 표준화**           | ✅ 완료        | ~100% |

### 추가 완료된 작업

#### 하드코딩 색상 추가 교체 완료

**주요 파일들:**

- ✅ `FileComponentConfigPanel.tsx`: `text-gray-900` → `text-foreground`, `text-blue-*` → `text-primary`
- ✅ `ButtonConfigPanel.tsx`: 모든 `text-gray-*`, `bg-gray-*`, `hover:bg-gray-*` 교체
- ✅ `V2PropertiesPanel.tsx`: 모든 `text-gray-*`, `border-gray-*` 교체
- ✅ `app/(main)/admin/page.tsx`: 전체 페이지 하드코딩 색상 교체
- ✅ `CardDisplayComponent.tsx`: 모든 `text-gray-*`, `bg-gray-*`, 인라인 색상 교체
- ✅ `getComponentConfigPanel.tsx`: 로딩 상태 하드코딩 색상 교체
- ✅ `DynamicComponentRenderer.tsx`: 플레이스홀더 하드코딩 색상 교체
- ✅ `SplitPanelLayoutComponent.tsx`: 빈 상태 텍스트 색상 교체
- ✅ `TemplateManager.tsx`: 빈 상태 및 검색 아이콘 색상 교체
- ✅ `MailDesigner.tsx`: 컴포넌트 타입 색상 및 빈 상태 색상 교체

### 다음 단계

1. **반응형 디자인 적용**: 모바일/태블릿/데스크톱 브레이크포인트 적용 (진행 중)
2. **특수 케이스 검토**: `p-0`을 사용하는 컴포넌트들에 대한 표준화 (완료)
3. **일관성 검증**: 새로운 컴포넌트 개발 시 가이드라인 준수 확인 (완료)

### 완료된 작업 요약

#### 하드코딩된 색상 교체 완료

**특수 케이스 파일들:**

- ✅ `DataflowVisualization.tsx`: 모든 하드코딩 색상을 CSS 변수로 교체

  - `text-gray-*` → `text-foreground`, `text-muted-foreground`
  - `bg-blue-*` → `bg-primary/10`, `border-primary`
  - `bg-yellow-*` → `bg-warning/10`, `border-warning`
  - `bg-green-*` → `bg-success/10`, `text-success`
  - `bg-red-*` → `bg-destructive/10`, `text-destructive`
  - `ActionFlowCard` 컴포넌트의 액션 색상도 모두 CSS 변수로 교체

- ✅ `ActionConfigStep.tsx`:

  - `bg-green-*` → `bg-success/10`, `text-success`
  - `bg-white` → `bg-background`

- ✅ `ControlConditionStep.tsx`:

  - `text-green-600` → `text-success`
  - `text-orange-500` → `text-warning`
  - `text-blue-*` → `text-primary`
  - `bg-yellow-*` → `bg-warning/10`
  - `bg-white` → `bg-background`

- ✅ `MultiActionConfigStep.tsx`:

  - `text-blue-*` → `text-primary`
  - `bg-yellow-*` → `bg-warning/10`
  - `text-yellow-*` → `text-warning`
  - `bg-white` → `bg-background`
  - `bg-gray-*` → `bg-muted`

- ✅ `ScreenPreview.tsx`:
  - `border-gray-*` → `border-border`
  - `bg-white` → `bg-background`
  - `bg-gray-*` → `bg-muted`
  - `text-gray-*` → `text-muted-foreground`

#### 특수 케이스 패딩 사용 검토 완료

다음 파일들은 특수한 레이아웃 요구사항으로 인해 기본 패딩을 오버라이드하는 것이 정당함을 확인:

1. **DataflowVisualization.tsx**: CardContent에 `p-4` 사용 (특수 레이아웃) - 내부 요소에 추가 패딩 적용
2. **ActionConfigStep.tsx**: CardContent에 `p-0` 사용 (Tabs 전체 너비 필요) - 정당함
3. **ControlConditionStep.tsx**: CardContent에 `p-0` 사용 (내부에 `p-4` 적용) - 정당함
4. **MultiActionConfigStep.tsx**: CardContent에 `p-4` 사용 (특수 레이아웃) - 정당함

#### 반응형 디자인 적용 완료

**주요 컴포넌트들:**

- ✅ `DataflowVisualization.tsx`: Sankey 다이어그램 반응형 적용

  - 모바일: 세로 배치 (`flex-col`)
  - 데스크톱: 가로 배치 (`sm:flex-row`)
  - 패딩: `p-4 sm:p-6`
  - 텍스트 크기: `text-xs sm:text-sm`
  - 통계 카드: 모바일에서 세로 배치, 데스크톱에서 가로 배치

- ✅ `DashboardTopMenu.tsx`: 상단 메뉴바 반응형 적용

  - 모바일: 세로 배치 (`flex-col`)
  - 데스크톱: 가로 배치 (`sm:flex-row`)
  - 버튼/Select: 모바일에서 전체 너비 (`w-full sm:w-auto`)
  - 텍스트 크기: `text-base sm:text-lg`

- ✅ `ActionConfigStep.tsx`: 액션 설정 단계 반응형 적용

  - 탭 버튼: 모바일에서 텍스트 축약 (`hidden sm:inline`)
  - 패딩: `p-3 sm:p-4`
  - 네비게이션: 모바일에서 세로 배치 (`flex-col sm:flex-row`)

- ✅ `ControlConditionStep.tsx`: 제어 조건 단계 반응형 적용

  - 패딩: `p-3 sm:p-4`
  - 네비게이션: 모바일에서 세로 배치

- ✅ `MultiActionConfigStep.tsx`: 멀티 액션 설정 반응형 적용

  - 탭 버튼: 모바일에서 텍스트 축약
  - 패딩: `p-3 sm:p-4`
  - 네비게이션: 모바일에서 세로 배치

- ✅ `ScreenPreview.tsx`: 화면 미리보기 반응형 적용
  - 헤더: 모바일에서 세로 배치 (`flex-col sm:flex-row`)
  - 버튼 그룹: 모바일에서 줄바꿈 (`flex-wrap`)
