# task-327.1 완료 보고서
## ThreadAuto 렌더러 레이아웃 개선 — 텍스트박스 묶음 아래정렬 + CTA 줄바꿈

### 작업 내용

#### 수정 1. 텍스트박스 묶음 아래 정렬 (CARD_LIST, DETAIL)
- `WATERMARK_SAFE_MARGIN = 60` 상수 추출
- `render_card_list()`: 카드 묶음의 총 높이 계산 후 bottom-align으로 시작 y좌표 산출. CTA 또는 워터마크 안전영역 기준으로 아래 정렬하되, 헤더와 겹침 방지.
- `render_detail()`: 인포박스 묶음 사전 높이 계산 → bottom-align 적용. TIP 영역 포함하여 워터마크 안전영역 확보.
- 결과: CARD_LIST 2박스 슬라이드에서 상단 여백 생기고 박스가 하단 정렬됨.

#### 수정 2. SUMMARY_CTA CTA 줄바꿈 개선
- `render_summary_cta()` 내 CTA 텍스트 렌더링에 쉼표 기반 줄바꿈 보정 로직 추가
- wrap_text 결과를 후처리: 쉼표 위치에서 줄바꿈하여 의미 단위가 쪼개지지 않도록 함
- "확인하시거나, 편하게" → "확인하시거나," / "편하게 문의 주세요." 로 정상 분리 확인

#### 수정 3. 3개 박스 슬라이드 높이 조정 (DETAIL)
- 3개 인포박스가 가용 공간을 초과할 때 단계적 축소:
  - Step 1: 간격 축소 (32px → 12px)
  - Step 2: 패딩 축소 (32px → 20px)
  - Step 3: description 폰트 축소 (36pt → 30pt)
- 최후 수단: 아이템 수 3→2 줄이기 (기존 로직 유지)
- `_draw_info_box()`에 `pad_override`, `desc_font_size` 파라미터 추가 (하위 호환성 유지)

### 생성/수정 파일 목록
- **수정**: `/home/jay/projects/ThreadAuto/renderer/cardnews.py` (핵심 렌더러)
- **생성**: `/home/jay/projects/ThreadAuto/test_task327.py` (테스트 스크립트)
- **생성**: `/home/jay/projects/ThreadAuto/output/task327/` (렌더링 이미지 4장)

### 테스트 결과
- [PASS] A. CARD_LIST 2개 박스 하단 정렬 — content_start_y=666, cards_top=278, 하단 정렬 동작
- [PASS] B. DETAIL 3개 박스 — gap 축소 발동(12px), TIP 포함 모든 요소 워터마크 안전영역 내
- [PASS] C. SUMMARY_CTA — "편하게 문의 주세요." 한 줄 표기 확인
- [PASS] D. DETAIL 긴 3박스 — gap/pad/font 단계 축소 동작, 워터마크 침범 없음
- pyright: 0 errors (프로젝트 내 실행 기준)
- black + isort: OK

### QC 결과
- pyright_check: WARN (프로젝트 외부 실행 시 import 경로 미해석 — 프로젝트 내에서는 0 에러)
- style_check: PASS
- data_integrity: PASS

### 버그 유무
없음

### 비고
- `watermark_space` 변수를 40에서 `WATERMARK_SAFE_MARGIN` (60)으로 변경. render_body()는 변경하지 않음 (작업 범위 외).
- `_draw_info_box` 시그니처에 optional 파라미터 추가하여 하위 호환성 유지.
