# 카드뉴스 밝은 테마 텍스트 가시성 수정

## 목표
밝은 배경 테마(GreenWhite, OrangeCream)에서 하드코딩된 `#FFFFFF` 텍스트가 안 보이는 버그 수정.

## 프로젝트 경로
- `/home/jay/projects/ThreadAuto`

## 수정 대상 파일
- `renderer/cardnews.py`

## 버그 위치 (2곳)

### 1. `_draw_pill_badge()` — Line 408
```python
# 현재: filled pill badge에서 accent 배경 + 무조건 흰색 텍스트
text_color = "#FFFFFF"
```
- GreenWhite accent = `#A8E6CF` (밝은 민트) → 흰색 텍스트 안 보임
- OrangeCream accent = `#FFD166` (밝은 옐로우) → 흰색 텍스트 안 보임

### 2. `_draw_cta_banner()` — Line 692
```python
# 현재: CTA 배너에서 accent 배경 + 무조건 흰색 텍스트
self.draw.text((tx, ty), cta_text, fill="#FFFFFF", font=font)
```
- 같은 문제

## 수정 방법
accent 색의 **상대 휘도(relative luminance)**를 계산하여, 밝으면 어두운 텍스트, 어두우면 흰색 텍스트 사용.

### 헬퍼 함수 추가
```python
def _contrast_text_color(bg_hex: str) -> str:
    """배경색의 밝기에 따라 텍스트 색상 반환 (흰색 또는 어두운색)."""
    r, g, b = hex_to_rgb(bg_hex)
    # ITU-R BT.601 가중 평균
    luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255
    return "#FFFFFF" if luminance < 0.5 else "#1A1A1A"
```

### 적용
1. Line 408: `text_color = "#FFFFFF"` → `text_color = _contrast_text_color(theme.accent)`
2. Line 692: `fill="#FFFFFF"` → `fill=_contrast_text_color(theme.accent)`

## 검증 방법
1. 기존 테스트 통과 확인: `cd /home/jay/projects/ThreadAuto && python3 -m pytest tests/ -x`
2. 5개 테마 각각으로 샘플 렌더링하여 텍스트 가시성 확인:
```python
from renderer.themes import THEMES
from renderer.cardnews import CardNewsRenderer
# 각 테마로 커버 + CTA 슬라이드 렌더링, output/ 에 저장
```
3. 특히 GreenWhite, OrangeCream에서 pill badge와 CTA 텍스트가 잘 보이는지 확인

## 주의사항
- 다크 테마(NavyGold, BlackRed, PurplePink)는 기존과 동일하게 흰색 유지되어야 함
- `_contrast_text_color` 위치: 모듈 상단 유틸리티 함수 또는 클래스 내부 static method
- number badge (Line 480)는 number_bg 위에 그리므로 별도 확인 필요 (GreenWhite number_bg="#1E7A4E" → 어두우므로 흰색 OK)