# 카드뉴스 렌더러 텍스트박스 디자인 통일 + CTA 슬라이드 수정

## 대상 파일
- `/home/jay/projects/ThreadAuto/renderer/cardnews.py`

## 참고 이미지 (현재 렌더링 결과)
- 슬라이드 02: `/home/jay/projects/ThreadAuto/output/cardnews_20260319_134432_01.png`
- 슬라이드 03: `/home/jay/projects/ThreadAuto/output/cardnews_20260319_134432_02.png`
- 슬라이드 04: `/home/jay/projects/ThreadAuto/output/cardnews_20260319_134432_03.png`
- 슬라이드 05: `/home/jay/projects/ThreadAuto/output/cardnews_20260319_134432_04.png`
- 슬라이드 06 (CTA): `/home/jay/projects/ThreadAuto/output/cardnews_20260319_134432_05.png`

반드시 이미지를 직접 눈으로 확인하고 작업할 것!

---

## 수정 A: 슬라이드 02/03 텍스트박스를 04/05 스타일로 통일

### 현상
- 슬라이드 02/03과 04/05의 텍스트박스(glass card) 디자인이 서로 다르게 보임
- 유저가 원하는 기준: **04/05 스타일**

### 작업
1. 이미지 파일을 직접 Read하여 02/03과 04/05의 차이를 시각적으로 파악
2. 렌더링 코드에서 차이 원인 파악:
   - 슬라이드 타입이 다른지 확인 (body vs card_list vs detail)
   - render_body(), render_card_list(), render_detail() 함수 간 텍스트박스 스타일 차이 확인
   - 동일 함수라면 콘텐츠 길이에 의한 동적 크기/간격 차이인지 확인
3. **모든 body 슬라이드의 텍스트박스가 일관된 디자인**이 되도록 수정
   - 카드 간 간격, 패딩, 라운드 코너, 배경 투명도 등 통일
   - 04/05 스타일을 기준으로 02/03을 맞출 것

---

## 수정 B: 슬라이드 06 (CTA/마지막 장) 골드 텍스트 수정

### 현상 (슬라이드 06 이미지 확인)
- 골드색 텍스트 줄바꿈이 어색함 (예: "대화가\n달라집니다", "바로\n연결됩니다")
- 3개 문장이 구분 없이 붙어있어 가독성 떨어짐

### 수정 사항
1. **줄바꿈 개선**: 의미 단위로 줄바꿈. 단어 중간에서 끊기지 않도록.
   - 현재 `render_summary_cta()` 함수의 줄바꿈 로직 확인 (콤마/마침표/접속사 기반)
   - 문장 끝(마침표) 기준으로 줄바꿈하되, 줄 길이가 적절하게 유지

2. **문장 간 세로 간격 추가**: 3개 문장(마침표로 구분) 사이에 추가 간격
   - 현재 line_height: 52 + 16 = 68px
   - 문장 간(마침표 뒤 줄바꿈) 간격을 일반 줄바꿈보다 크게 (예: +30~40px 추가)

3. **큰 제목 ↔ 골드 텍스트 간격 > 골드 문장 간 간격**:
   - 현재 `gap_title_cta = 70px` (제목~본문 간격)
   - 문장 간 간격(30~40px) < 제목~본문 간격(70px 이상) 유지
   - 필요 시 gap_title_cta를 더 키울 것

4. **전체 텍스트 블록 위아래 가운데정렬**:
   - 제목(큰 글씨) + 골드 본문을 하나의 블록으로 묶어서
   - 슬라이드 높이 기준 수직 가운데 배치 (현재 37% 위치에서 → 50% 중앙으로)
   - 상하 여백이 동일하게 느껴지는 안정감 있는 레이아웃

---

## 검증 방법
수정 후 아래 명령으로 테스트 렌더링 실행:

```python
cd /home/jay/projects/ThreadAuto
python3 -c "
from renderer.cardnews import CardNewsRenderer
renderer = CardNewsRenderer()
# 6장 슬라이드 테스트 데이터
slides = [
    {'type': 'cover', 'title': '테스트 커버', 'subtitle': '부제목', 'category': '테스트', 'keywords': ['키워드1']},
    {'type': 'body', 'title': '첫번째 본문 슬라이드', 'items': [
        {'label': '항목 A', 'desc': '설명 텍스트 1번 항목입니다. 두 줄 정도의 설명.'},
        {'label': '항목 B', 'desc': '설명 텍스트 2번 항목입니다. 역시 두 줄.'},
        {'label': '항목 C', 'desc': '설명 텍스트 3번 항목입니다.'}
    ]},
    {'type': 'body', 'title': '두번째 본문 슬라이드', 'items': [
        {'label': '포인트 1', 'desc': '더 긴 설명. 세 줄이 될 수도 있는 긴 텍스트를 넣어서 테스트합니다.'},
        {'label': '포인트 2', 'desc': '중간 길이 설명입니다.'},
        {'label': '포인트 3', 'desc': '짧은 설명.'}
    ]},
    {'type': 'body', 'title': '세번째 본문 슬라이드', 'items': [
        {'label': '데이터 1', 'desc': '수치와 함께 제시하는 설명입니다. 1,863% 증가.'},
        {'label': '데이터 2', 'desc': '비교 데이터를 포함한 설명. 482명에서 5,500명으로.'},
        {'label': '데이터 3', 'desc': '결론적 수치 설명입니다.'}
    ]},
    {'type': 'body', 'title': '네번째 본문 슬라이드', 'items': [
        {'label': '시장 선점', 'desc': '제도가 완성되기 전에 먼저 안착한 설계사가 유리한 위치를 차지합니다.'},
        {'label': '글로벌 표준', 'desc': '30개사 제휴, AI 마케팅 자동화, 사무실 전액 지원.'},
        {'label': '전문가 시각', 'desc': '제도가 늦게 오는 시장일수록, 먼저 움직인 사람이 승자가 됩니다.'}
    ]},
    {'type': 'cta', 'title': '세계 흐름이 궁금하다면', 'cta_text': '동료 설계사분 한 명에게 공유해 보세요. 같은 정보를 가진 사람이 많을수록 대화가 달라집니다. DM으로 GA수련 — 1:1 상담 바로 연결됩니다.'}
]
paths = renderer.render_from_slides(slides)
for p in paths:
    print(p)
"
```

생성된 이미지를 Read로 직접 확인하여:
- 모든 body 슬라이드(02-05)의 텍스트박스 디자인이 동일한지 확인
- CTA 슬라이드(06)의 골드 텍스트가 가독성 있게 배치됐는지 확인

## 기존 테스트
```bash
cd /home/jay/projects/ThreadAuto && python3 -m pytest tests/ -x -q 2>&1 | tail -5
```
기존 테스트가 깨지지 않는지 확인.