# ThreadAuto 렌더러 레이아웃 개선 — 텍스트박스 묶음 아래정렬 + CTA 줄바꿈

## 프로젝트 경로
- `/home/jay/projects/ThreadAuto/`
- 핵심 파일: `renderer/cardnews.py`

## 작업 개요
CARD_LIST/DETAIL 슬라이드의 텍스트박스 묶음을 "아래 정렬"하고, SUMMARY_CTA의 CTA 문구 줄바꿈을 개선한다.

---

## 수정 1. 텍스트박스 묶음 아래 정렬 (CARD_LIST, DETAIL 슬라이드)

### 현재 문제
- 텍스트박스 2개인 CARD_LIST 슬라이드(02, 03번): 박스가 상단에 몰려있고 아래 빈 공간이 과도함
- 텍스트박스 3개인 DETAIL 슬라이드(04, 05번): 박스가 맨 아래까지 꽉 차서 "서울대보험쌤" 워터마크와 겹침 위험

### 요구사항
- 텍스트박스들을 **1개 묶음(그룹)**으로 취급
- 그룹 전체를 **슬라이드 하단에 정렬** (bottom-align)
- **단, "서울대보험쌤" 워터마크 영역은 침범 금지** — 워터마크 위에 최소 여백(60~80px) 확보
- 구현 방법:
  1. 모든 텍스트박스의 총 높이(박스 높이 + 박스 간 간격) 합산 = `total_content_h`
  2. 사용 가능한 영역: `available_y` = 헤더(제목+부제+구분선) 아래부터 ~ 워터마크 상단(캔버스 높이 - MARGIN - 워터마크 여백)
  3. `content_start_y = available_bottom - total_content_h` (아래 정렬)
  4. `content_start_y = max(content_start_y, header_end_y + gap)` (헤더와 겹침 방지)
- CARD_LIST(2개 박스): 아래로 내려가서 빈 공간이 상단에 위치
- DETAIL(3개 박스): 박스 높이/간격이 줄어들어 워터마크 침범 방지

### 적용 대상 메서드
- `render_card_list()` — CARD_LIST 슬라이드 (보통 2~3개 텍스트박스)
- `render_detail()` — DETAIL 슬라이드 (보통 3개 텍스트박스)
- 각 슬라이드 타입에서 박스 그룹의 시작 y좌표를 bottom-align으로 계산

### 워터마크 안전 영역
- "서울대보험쌤" 텍스트는 우하단에 렌더링됨
- 워터마크 상단으로부터 최소 60px 여백 확보 필수
- 워터마크 y좌표 확인 후 `WATERMARK_SAFE_MARGIN` 상수 추출 권장

---

## 수정 2. SUMMARY_CTA 슬라이드 CTA 문구 줄바꿈 개선

### 현재 문제
- CTA 텍스트: "블로그에서 자세한 내용을 확인하시거나, 편하게 문의 주세요."
- 현재 렌더링: "...확인하시거나, 편하게" / "문의 주세요." → "편하게 문의 주세요"가 쪼개짐
- 어색한 줄바꿈

### 요구사항
- 줄바꿈 알고리즘 개선: "편하게 문의주세요"가 한 줄에 표기되도록
- 방법 1: CTA 텍스트 wrapping 시 **조사/어미 기반 줄바꿈 포인트** 우선 적용 (쉼표 뒤, 마침표 앞 등)
- 방법 2: 단어 단위 wrap 시 **마지막 줄이 너무 짧으면(3글자 이하) 이전 줄에서 단어를 당겨오는 로직**
- 어떤 방법이든, "편하게 문의 주세요." 또는 "편하게 문의주세요."가 한 줄로 나와야 함

### 적용 대상
- `render_summary_cta()` 메서드 내 CTA 텍스트 렌더링 부분
- 또는 공통 텍스트 래핑 유틸리티가 있다면 그곳

---

## 수정 3. 전체 내용 길이 조정 (3개 박스 슬라이드)

### 현재 문제
- DETAIL 슬라이드(3개 박스)에서 내용이 길 때 마지막 박스가 워터마크를 침범

### 요구사항
- 3개 박스가 있을 때, 전체 높이가 워터마크 안전 영역을 넘으면:
  - 박스 간 간격(gap) 축소
  - 박스 내부 패딩 축소
  - description 폰트 크기 축소 (최후 수단)
- 우선순위: 간격 축소 → 패딩 축소 → 폰트 축소
- 이 로직은 수정 1의 아래정렬과 함께 동작해야 함

---

## 검증
1. pyright 에러 0건
2. 테스트 렌더링: 2개 박스 슬라이드, 3개 박스 슬라이드 각각 확인
3. 풀 파이프라인 테스트 (업로드까지)
4. 렌더링 이미지 보존 (`output/` 디렉토리)

## 완료 조건
1. CARD_LIST 2개 박스: 상단 여백 있고, 박스 묶음이 하단 정렬
2. DETAIL 3개 박스: 워터마크 침범 없이 하단 정렬
3. SUMMARY_CTA: "편하게 문의주세요" 한 줄 표기
4. pyright 에러 0건
5. Threads 업로드 성공 + Post ID
