# task-299.1: 렌더러 피드백 5건 적용 (전체 미팅 후 구현)

## 개요
제이회장님의 카드뉴스 렌더러 피드백 5건을 적용한다.
**반드시 전체 미팅(팀원 전원 참여)을 먼저 진행**하여 구현 방안을 확정한 후 코딩에 들어갈 것.
시행착오 없이 한 번에 완성하는 것이 목표.

## 피드백 항목 (5건)

### FB-1. 제목 Bold체 변경
- **대상**: 카드뉴스 제목(커버 타이틀), 블록 제목(card_list/detail 슬라이드 상단 타이틀) 모두
- **현재 문제**: `NotoSansCJKkr-Bold.otf`가 없어서 `.bold()` 호출이 Regular로 폴백되고 있었음
- **해결**: Bold 폰트 파일이 이미 설치됨 (`~/.local/share/fonts/NotoSansCJKkr-Bold.otf`)
- **구현**: `renderer/fonts.py`의 `_find_font(bold=True)` 경로가 이제 정상 동작함을 확인하고, 커버 타이틀과 블록 타이틀에 `.bold()` 적용 확인
- **확인 포인트**: `fonts.py` line 18의 `NotoSansCJKkr-Bold.otf` 경로, `cardnews.py`에서 제목 렌더링 시 bold=True 사용 여부

### FB-2. 동그라미 숫자를 블록 제목 왼쪽에 배치
- **현재**: 동그라미 숫자 ①②③이 **카드 내부**에서 각 아이템 옆에 배치됨 (세로중앙, 카드 안)
- **요청**: 동그라미 숫자를 **블록 제목** (슬라이드 상단 대제목) 왼쪽에 배치
  - 예: `②  퇴직금 계산 방법` 처럼, 슬라이드 번호를 나타내는 동그라미가 제목 왼쪽에 오는 형태
- **구현 방안**:
  - `render_card_list()`에서: 상단 타이틀 영역에 슬라이드 순번 동그라미를 제목 왼쪽에 그린다
  - `render_detail()`에서: 마찬가지로 상단 타이틀 왼쪽에 동그라미 배치
  - 카드 내부 아이템 앞의 동그라미는 제거하거나, 작은 bullet(·)로 대체
  - 슬라이드 순번은 cover(0) 제외, 실제 콘텐츠 슬라이드 순서대로 1, 2, 3...
  - `render_from_slides()`에서 content_index를 각 렌더 함수에 전달

### FB-3. 내용 오버플로우 방지 (캔버스 경계 하드클립)
- **현재 문제**: 카드 단위 클리핑은 있지만, 전체 캔버스(1080x1350) 경계를 넘는 것에 대한 하드클립이 없음
  - 내용이 많으면 이미지 밖으로 벗어나거나 짤릴 수 있음
- **구현 방안**:
  - 모든 render_*() 메서드에서 최종 렌더링 전 `safe_bottom = HEIGHT - MARGIN` 경계 체크
  - 텍스트/카드가 safe_bottom을 초과하면 렌더링 중단 + "..." 표시
  - 아이템 수가 많을 때: 들어갈 수 있는 만큼만 렌더링하고 나머지는 잘라냄
  - 추가 안전장치: 최종 이미지를 `img.crop((0, 0, 1080, 1350))`으로 강제 크롭

### FB-4. 표지 좌측 상단 텍스트 변경
- **현재**: 표지 좌측 상단에 "카드뉴스" 또는 카테고리 텍스트 표시
- **변경**: "서울대보험크루" 로 변경
- **구현**: `render_cover()` 메서드에서 좌측 상단 카테고리/라벨 텍스트를 하드코딩 또는 상수로 "서울대보험크루" 설정
- **참고**: themes.py의 `BRAND_NAME_SECONDARY`와는 별개 상수

### FB-5. 표지 하단 "서울대보험쌤" 중복 제거
- **현재 문제**: 커버 슬라이드에서:
  1. 본문 영역 하단에 `BRAND_NAME_SECONDARY` ("서울대보험쌤") 48pt accent색 (line ~754)
  2. 우하단 워터마크 `_draw_watermark()`로 "서울대보험쌤" 24pt 반투명 (line ~488)
  → 같은 텍스트가 두 번 나옴
- **해결**: 커버 슬라이드에서는 워터마크를 생략하거나, 본문 하단 브랜드를 제거하여 1회만 표시
  - 추천: 본문 하단 브랜드(48pt accent)는 유지, 워터마크는 커버에서만 스킵
  - 또는: 워터마크를 커버가 아닌 슬라이드에서만 렌더링하도록 조건 분기

## 파일 범위
- `renderer/cardnews.py` — 메인 수정 대상
- `renderer/fonts.py` — Bold 폰트 로딩 확인
- `renderer/themes.py` — 상수 추가 필요시

## 진행 방법
1. **전체 미팅 진행** (팀원 전원: 불칸, 이리스, 아테나, 아르고스)
   - 5건 피드백 각각에 대해 구현 방안 논의
   - 특히 FB-2 (동그라미 배치)와 FB-3 (오버플로우)은 레이아웃 영향이 크므로 충분히 논의
   - 미팅 기록: `memory/meetings/2026-03-06-renderer-feedback-v3.md`
2. **구현**: 미팅에서 합의된 방안대로 코딩
3. **테스트**: 5개 테마 전부 파이프라인 테스트, 오버플로우 엣지케이스 테스트
4. **샘플 이미지 저장**: `output/feedback_v3/` 하위에 테마별 저장
5. **보고서**: `memory/reports/task-299.1.md`

## 완료 기준
- [ ] Bold체가 실제로 적용되어 Regular과 시각적으로 구분됨
- [ ] 동그라미 숫자가 블록 제목 왼쪽에 정확히 배치
- [ ] 캔버스 1080x1350 바운더리를 넘는 내용 없음 (하드클립)
- [ ] 표지 좌측 상단에 "서울대보험크루" 표시
- [ ] 표지 하단 "서울대보험쌤" 1회만 표시 (중복 제거)
- [ ] 5개 테마 전부 정상 렌더링
- [ ] 기존 테스트 전체 PASS

## task-timer
- task_id: task-299.1
- 완료 시: `python3 /home/jay/workspace/memory/task-timer.py end task-299.1`