## 2026-10-01T11:34:29Z

You are the Project Orchestrator for the FreeExile gameplay features upgrade.

## Your Identity & Workspace
- Identity: Project Orchestrator (teamwork_preview_orchestrator)
- Working Directory: `c:\Projects\FreeExile\.agents\teamwork\orchestrator_10`
- User Request File: `c:\Projects\FreeExile\.agents\teamwork\ORIGINAL_REQUEST.md` (Refer to the latest section under `## 2026-10-01T11:33:27Z`)
- Project Root: `c:\Projects\FreeExile`

## Objective & Requirements
Upgrade 3 core gameplay features for FreeExile WebApp:
1. **R1. Mở rộng diện tích bản đồ wilderness**:
   - Double `bounds_width` and `bounds_height` for all wilderness zones (non-hideout/non-sanctuary) in `server/world/zone_catalog.py`.
   - First zone `zone_tang_kiem_nhai` (currently 800x800) must be expanded to at least 1600x1600.
   - Update client-side systems using bounds so camera, minimap, and boundary clamp function correctly.
2. **R2. Vùng bất tử Safe Radius quanh Waypoint/Checkpoint (PoE2 Standard)**:
   - Safe zone with `safe_radius` (default 8.0 world units) around each waypoint in all wilderness zones.
   - Server (`server/world/zone_engine.py`): `validate_monster_spawn()` rejects monster spawn inside waypoint safe radius.
   - Client (`client/webapp/js/engine/monster_system.js`): `initZoneMonsters()` ensures initial spawns are outside safe radius. Add `isInWaypointSafeRadius(wx, wy)`.
   - Client (`monster_system.js`): Monsters cannot aggro or attack player in safe radius. Chasing monsters leash back when player enters safe radius.
   - Client (`client/webapp/js/engine/world_renderer.js`): Gentle visual indicator (faint yellow/green circle or glowing floor rune) around waypoint, visible when nearby, fades out when far.
   - Client: Automatic HP regen (e.g. 2% maxHp/sec) for player inside waypoint safe radius.
   - Server (`server/world/zone_catalog.py`): `Waypoint` dataclass includes `safe_radius: float = 8.0`.
3. **R3. Pause Game khi nhấn ESC hoặc mở Settings**:
   - Pause triggers: Desktop `Escape` key toggles pause. Mobile/Desktop clicking `#btn-open-settings` pauses when modal opens, unpauses when modal closes.
   - State `window.isGamePaused = false`. When paused:
     - `renderLoop` in `client/webapp/js/engine/canvas_renderer.js` continues rendering static scene, but skips updates (movement, monster AI tick, combat, skill cooldowns, timers).
     - Monster AI does not tick, combat damage does not occur, player movement ignored.
   - Pause overlay in `client/webapp/index.html`: Semi-transparent backdrop with "TẠM DỪNG / PAUSED" centered, hides on unpause, does not obscure settings modal.
   - Unpause: ESC again (if no modal open) or closing settings modal.
   - Consistent across desktop and mobile.

## Acceptance Criteria
Review all acceptance criteria in `ORIGINAL_REQUEST.md` under `## 2026-10-01T11:33:27Z`.
Ensure all existing and new tests pass (pytest, lint, hygiene, security).
Follow project directives in `GEMINI.md` and `AGENTS.md` (e.g., line limits: logic <= 350 soft cap / 500 hard cap, catalogs <= 700 / 1000).

When finished and verified, write your final handoff and notify me (Sentinel).
