QuantFortune Chatbot Widget

Overview
- Frontend-only chat widget with deterministic replies.
- Uses a fixed Q&A map in `src/components/chat/qaMap.ts`.
- No backend or AI calls.

How to extend later with AI
1) Replace `matchAnswer()` in `qaMap.ts` with a backend call.
2) Keep `outOfScopeAnswer` as a fallback.
3) Add streaming responses if needed (SSE / WebSocket).
4) Store chat history server-side if needed.

Files
- `src/components/chat/ChatWidget.tsx`
- `src/components/chat/ChatButton.tsx`
- `src/components/chat/MessageBubble.tsx`
- `src/components/chat/qaMap.ts`

Notes
- Suggested question chips are derived from the Q&A map.
- Exact match or keyword match only.
- Typing delay is simulated (500–800ms).
