# task-696.1: 카드뉴스 렌더러 레이아웃 보완 + 프롬프트 조정

## 목표
제이회장님 피드백 기반으로 카드뉴스 렌더러(`cardnews.py`)의 레이아웃과 프롬프트(`prompts_v2.py`) 규칙을 보완한다.

## 피드백 상세 (제이회장님 원문)

### 1. _03.png (detail 슬라이드) TIP 박스 하단 여백
> "tip 글박스는 아래 여백이 많이 남아보여서 안정감이 없어보임"
- TIP 박스가 위에 붙어있고 아래 공간이 넓어 떠있는 느낌
- TIP 박스 하단 여백을 줄이거나, 전체 콘텐츠를 수직 중앙 정렬하여 안정감 확보

### 2. _01~_03.png 글박스 줄 수
> "한 글박스 안에는 Max 4줄까지 들어가도 괜찮을 듯. 다만, 절대 페이지 가장 아래 여백을 침범하는 일은 없어야 함"
- 현재 description 프롬프트 상한이 80자 → 100자로 올려 4줄 허용
- **렌더러에서 하단 여백(서울대보험쌤 워터마크 영역) 침범 방지 safety guard 필수**
- 콘텐츠가 넘칠 경우: 폰트 축소 or 텍스트 truncation (... 처리)

### 3. _04.png CTA(마무리) 카드
> "마지막 wrap up 카드인데 너무 여백이 많아서 비어보이지 않았으면 좋겠음"
> "CTA카드 글자크기를 조금만 더 키워서 임팩트있게 해보는건 어떨까?"
> "글자크기를 키운다고 가정하면 글자들이 겹치지 않는 안전장치까지 고려해야 함"

**해결 방향 (2가지 병행):**
- **프롬프트**: CTA items에 짧은 description(20~40자) 추가 규칙. 현재 title만 있고 description 비어있음.
- **렌더러**: CTA 카드의 글자 크기를 확대하여 임팩트 강화 + **글자 겹침 방지 안전장치**
  - 각 요소(title, items, cta_text) 간 간격이 글자 크기에 따라 동적으로 조절되어야 함
  - 글자가 겹치거나 박스 밖으로 넘치면 자동으로 폰트 축소하는 fallback 로직

## 수정 대상 파일

### 렌더러 (핵심)
- `/home/jay/projects/ThreadAuto/renderer/cardnews.py` (2412줄)
  - `render_detail()` (line 1282~1760): TIP 박스 하단 여백 조정
  - `render_card_list()` (line 935~1281): 글박스 4줄 허용 + 하단 침범 방지
  - `render_body()` (line 2079~2200): 글박스 4줄 허용 + 하단 침범 방지
  - `render_summary_cta()` (line 1761~2078): 글자 크기 확대 + 겹침 방지 안전장치

### 프롬프트
- `/home/jay/projects/ThreadAuto/content/prompts_v2.py`
  - `_OUTPUT_FORMAT_BLOCK` line 141: description 상한 80→100자, "최대 4줄" 명시
  - `_OUTPUT_FORMAT_BLOCK` line 89~94: CTA items에 description 규칙 추가
    - 현재: `{"title": "요약1", "description": ""}` (description 비어있음)
    - 변경: `{"title": "요약1", "description": "짧은 설명 20~40자"}` + 규칙 추가
  - line 149도 동일하게 상한 100자로 수정

## 렌더러 안전장치 요구사항 (필수)

### 하단 여백 침범 방지
- 워터마크("서울대보험쌤") 영역은 고정 (대략 하단 60px)
- 모든 콘텐츠는 이 영역 위에서 끝나야 함
- 콘텐츠 높이가 넘칠 경우 자동 대응:
  1. 폰트 크기 축소 (최소 크기 하한 설정)
  2. 그래도 넘치면 텍스트 말줄임 (...)

### 글자 겹침 방지 (CTA 카드)
- 글자 크기를 키울 때 요소 간 간격을 동적으로 계산
- 각 텍스트 블록의 실제 렌더링 높이를 측정한 후 다음 블록 y좌표 결정
- 겹침 발생 시 자동 폰트 축소 fallback

## 검증 방법
1. 수정 후 카드뉴스 1건 재생성 (ContentGeneratorV2 → CardNewsRenderer)
2. 렌더링된 이미지에서:
   - detail 슬라이드: TIP 박스와 하단 간 여백이 균형 있게 배치됨
   - card_list 슬라이드: 4줄 description이 텍스트박스 내에 정상 표시
   - CTA 슬라이드: 글자 크기가 커져 임팩트 있고, 겹침 없음
   - 모든 슬라이드: 하단 워터마크 영역 침범 없음
3. 이미지를 `cokacdir --sendfile`로 전송

## 산출물
- 수정된 cardnews.py diff 요약
- 수정된 prompts_v2.py diff 요약
- 렌더링된 카드뉴스 이미지 5~7장 (sendfile 전송)