# T812 — inbox card detail and actions

> Status: `done`
> Milestone: `M1`
> Est. change: `~190 lines`

## Goal

完成後卡片首層只呈現問題、主推產品、主要證據、分數／時間與完成／移除；完整理由、回覆、CRM 位於詳情層。

## Depends on

- T810、T811

## Inputs

- `apps/web/src/pages/RadarOpportunitiesPage.tsx`
- `apps/web/src/components/radar/**`
- Spec §6.1–§6.2、驗收 #2–#5

## Outputs

### 程式變更（預期路徑）

| 路徑 | 動作 | 說明 |
|------|------|------|
| `apps/web/src/components/radar/OpportunityInboxCard.tsx` | add | 首層卡片與 actions |
| `apps/web/src/components/radar/OpportunityDetailDrawer.tsx` | add | 證據、風險、產品匹配與既有操作 |
| `apps/web/src/pages/RadarOpportunitiesPage.tsx` | edit | 接 card、drawer、狀態更新 |
| `apps/web/src/styles/radar.css` | edit | 卡片層級與 mobile 操作區 |

### 行為變更

- 完成不建立 Contact；accept 成功才走既有 CRM binding 並同步完成。
- 移除需要原因，成功後提供復原。

### API / 契約（若有）

- 所有 action 透過 RadarRepo；錯誤時保留原卡片狀態。

## Out of scope

- 不改 CRM backend、不新增 reply meter。

## Acceptance

- [x] 首層無需展開即可完成或移除。
- [x] 詳情可看到原文、產品依據、風險與原始連結。
- [ ] 指令：

```bash
cd apps/web && npm run test -- RadarOpportunitiesPage
```

## Notes

- 2026-08-12 首次使用回饋修訂：卡片主動作改成「加入名單並追蹤」，另保留「只標示已處理」與「不適合」；完整判定抽屜同步提供正向處理動作。
- 加入名單成功必須同時把 ReviewState 設為 `completed`，並顯示前往 Contact 的下一步；不能只顯示含糊的「完成」。
- 首層只呈現一個推薦分數、產品與最強證據；英文 priority enum 不直接暴露給使用者。

不要把所有 ProductMatch 四維理由直接塞進首層卡片。
