# task-697.1: 카드뉴스 레이아웃 통일 + TIP 박스 수정 + 부제목 필수화

## 목표
_01~_03 슬라이드 레이아웃을 _03 기준으로 통일하고, TIP 박스 내부 여백을 자연스럽게 줄이고, 제목/부제목 모두 출력을 필수로 강제한다.

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

### 1. _01~_03 레이아웃 통일 (_03 기준)
> "_01~_03 은 디자인이 일치해야 함. 내용에 따라 동적으로 글박스 크기만 달라져야 해. 지금 렌더링을 보면 _03을 기준으로 통일화하자."

**현상**:
- _03 (detail, 3 items + TIP): 콘텐츠가 상단부터 시작해서 꽉 차있음 → 좋음 ✅
- _01 (card_list, 2 items): 상단에 빈 공간이 너무 많고, 글박스가 하단에 쏠려있음 → 나쁨 ❌
- _02 (card_list, 2 items): 마찬가지로 상단 빈 공간 과다 → 나쁨 ❌

**해결 방향**:
- card_list 렌더러도 detail처럼 제목 영역 바로 아래부터 글박스가 시작되도록 수정
- 내용 양에 따라 글박스 세로 크기만 동적으로 조절
- 제목 영역 → (적절한 간격) → 글박스 시작. 상단 빈 공간 과다 현상 제거

### 2. TIP 박스 내부 여백
> "tip 글박스는 아직도 글박스 세로높이 대비 내부 내용이 부족해보여(아래 여백이 너무 많음). 이 부분 자연스럽게 보일 수 있도록 로직을 추가해야 할거 같아."

**현상**: TIP 박스의 세로 높이가 고정되어 있어서, 짧은 텍스트일 때 아래 패딩이 과도함

**해결 방향**:
- TIP 박스의 세로 높이를 내용(텍스트 렌더링 높이)에 맞게 동적으로 결정
- 텍스트 높이 + 적절한 상하 패딩(예: 위 16px, 아래 16px)으로 박스 크기 산출
- 고정 높이가 아닌, 내용 기반 높이 계산

### 3. 제목/부제목 필수 출력
> "제목/부제목 모두 출력을 필수조건으로 강제해야 함. (이번 샘플에서는 _02, _03 은 부제목이 없음)"

**현상**:
- _01: 제목 "GA 이직의 핵심" + 부제목 "전속 vs GA 비교 분석" → 있음 ✅
- _02: 제목 "성공적인 이직 전략" + 부제목 없음 → 없음 ❌
- _03: 제목 "이직 체크리스트" + 부제목 없음 → 없음 ❌

**해결 방향 (프롬프트)**:
- `prompts_v2.py`에 subtitle 필수 규칙 추가
- "모든 콘텐츠 슬라이드(card_list, detail)에 subtitle 필수. 빈 값("") 금지."
- subtitle은 해당 슬라이드의 핵심을 한 줄로 요약하는 보조 설명

## 수정 대상 파일

### 렌더러
- `/home/jay/projects/ThreadAuto/renderer/cardnews.py`
  - `render_card_list()` (line 935~1281): 상단 빈 공간 제거. 제목 영역 바로 아래에서 글박스 시작. _03 레이아웃 기준 통일.
  - `render_detail()` (line 1282~1760): TIP 박스 세로 높이를 내용 기반 동적 계산으로 변경.

### 프롬프트
- `/home/jay/projects/ThreadAuto/content/prompts_v2.py`
  - `_OUTPUT_FORMAT_BLOCK`의 슬라이드 구성 규칙 섹션에 subtitle 필수 규칙 추가:
    - "모든 콘텐츠 슬라이드(card_list, detail, body)에 subtitle 필수. 빈 subtitle("") 금지."
    - "subtitle은 해당 슬라이드의 핵심을 15자 이내로 한 줄 요약한 보조 설명."

## 검증 방법
1. 수정 후 카드뉴스 1건 재생성 (ContentGeneratorV2 → CardNewsRenderer)
2. 렌더링된 이미지에서:
   - _01~_03: 글박스 시작 위치가 동일한 패턴 (제목 아래 일정 간격 후 시작)
   - _01~_03: 상단 과도한 빈 공간 없음
   - detail 슬라이드: TIP 박스 높이가 내용에 맞게 축소되어 자연스러움
   - 모든 콘텐츠 슬라이드: subtitle 출력 확인
3. 이미지를 `cokacdir --sendfile`로 전송

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

## 참고 이미지 (비교용)
- 좋은 레이아웃 (_03): `/home/jay/projects/ThreadAuto/output/cardnews_20260318_195647_03.png`
- 나쁜 레이아웃 (_01): `/home/jay/projects/ThreadAuto/output/cardnews_20260318_195647_01.png`
- 나쁜 레이아웃 (_02): `/home/jay/projects/ThreadAuto/output/cardnews_20260318_195647_02.png`
