# task-702.1: detail 렌더러 bottom-align — TIP 없을 때 하단 정렬

## 문제
detail 슬라이드에서 `tip_text`가 없으면 아이템 카드들이 화면 중간에 떠 있고, 하단에 빈 공간이 크게 남는다.
card_list는 task-698.1에서 bottom-align을 수정해서 "아래가 비어있는 것보다 제목과 카드 사이가 비어있는 게 낫다"로 처리했으나, detail 렌더러에는 같은 처리가 안 되어 있다.

## 기대 동작
- TIP 박스가 있는 경우: 현재대로 (카드 + TIP이 하단에 붙음) — 변경 없음
- **TIP 박스가 없는 경우**: 아이템 카드들이 **하단(워터마크 위)에 붙고**, 빈 공간은 **제목과 카드 사이**에 배치
- card_list의 bottom-align 동작과 동일한 원칙

## 수정 대상
- `/home/jay/projects/ThreadAuto/renderer/cardnews.py`
  - `render_detail()` 메서드 내 bottom-align 로직 (line 1578~1583 부근)

## 현재 코드 (line 1578~1583)
```python
# Bottom-align: 인포박스 묶음을 하단 정렬
max_boxes_bottom = safe_bottom - watermark_space
tip_reserve = tip_h + (32 if tip_text else 0)
available_bottom = max_boxes_bottom - tip_reserve
content_start_y = available_bottom - total_h
content_start_y = max(content_start_y, boxes_top)  # 헤더와 겹침 방지
```

## 디버깅 포인트
- `content_start_y`가 올바르게 계산되고 있는지 확인
- `boxes_top` 값이 너무 높아서 `max()` 클램핑이 bottom-align을 무효화하고 있는지 확인
- `total_h` 계산이 실제 렌더링된 카드 높이와 일치하는지 확인
- TIP 없을 때 `available_bottom`이 충분히 아래까지 확장되는지 확인

## 검증 방법
1. 기존 테스트 통과: `cd /home/jay/projects/ThreadAuto && python3 -m pytest tests/test_cardnews_renderer.py -x -q`
2. 수동 확인용 테스트 렌더링:
   - detail 슬라이드 tip_text 있는 경우 / 없는 경우 각각 렌더링
   - 렌더링 결과 이미지를 `/home/jay/projects/ThreadAuto/output/test_detail_align/` 에 저장
   - TIP 없는 경우: 카드가 하단에 붙어있고 제목과 카드 사이에 빈 공간이 있는지 확인

## 제약사항
- prompts_v2.py 수정 금지
- five_stage_pipeline.py 수정 금지
- content_generator_v2.py 수정 금지
- render_card_list() 수정 금지 (이미 정상 동작 중)
- 기존 테스트 깨뜨리지 말 것
