diff --git a/docs/work-items/ET-002/00-business-request.md b/docs/work-items/ET-002/00-business-request.md
new file mode 100644
index 0000000..afeb911
--- /dev/null
+++ b/docs/work-items/ET-002/00-business-request.md
@@ -0,0 +1,20 @@
+---
+type: business-request
+work_item_id: ET-002
+title: "Чекбокс показа/скрытия POI на карте"
+created_at: 2026-05-20
+source: telegram
+requester: Слава
+---
+
+# Исходный запрос — ET-002
+
+## Формулировка заказчика
+
+> На карте сейчас всегда отражаются маркеры POI. Нужен в кнопке рельефа добавить чекбокс показывать/не показывать POI.
+
+## Контекст
+
+- Канал: Telegram
+- Дата: 2026-05-19
+- Приоритет: не указан (обычный)
diff --git a/docs/work-items/ET-002/01-brd.md b/docs/work-items/ET-002/01-brd.md
new file mode 100644
index 0000000..d154e4b
--- /dev/null
+++ b/docs/work-items/ET-002/01-brd.md
@@ -0,0 +1,61 @@
+---
+type: brd
+work_item_id: ET-002
+title: "BRD: Чекбокс показа/скрытия POI в попапе рельефа"
+version: 1
+status: draft
+created_at: 2026-05-20
+authors:
+ - "agent:analyst"
+---
+
+# BRD — ET-002: Чекбокс показа/скрытия POI в попапе рельефа
+
+## 1. Цель
+
+Дать пользователю возможность скрывать маркеры POI на карте, чтобы они не загромождали обзор при планировании маршрута. Управление — через чекбокс в существующем попапе кнопки «Рельеф».
+
+## 2. Контекст
+
+- Сейчас POI (слои `poi-circles`, `poi-labels`) отображаются всегда при загрузке карты.
+- Попап кнопки «Рельеф» (`terrain-popup`) уже содержит чекбоксы: Тени рельефа, Перепады, Грунтовки, Тропы.
+- Механизм `toggleLayer('poi')` уже реализован в коде, но не привязан к UI в попапе.
+
+## 3. Scope
+
+### In scope
+
+- Добавить чекбокс «POI» в попап кнопки «Рельеф» (после секции «Тропы»)
+- POI включены по умолчанию (checked)
+- Состояние чекбокса сохраняется в localStorage (ключ `poi-visible`)
+- При загрузке страницы — восстанавливать состояние из localStorage
+- Скрытие/показ слоёв `poi-circles` и `poi-labels` через MapLibre `setLayoutProperty`
+
+### Out of scope
+
+- Фильтрация POI по типу (кафе, заправки, и т.д.)
+- Отдельная кнопка для POI вне попапа рельефа
+- Изменение иконок или стилей POI
+- Backend-изменения
+
+## 4. Метрики успеха
+
+| Метрика | Критерий |
+|---------|----------|
+| Чекбокс отображается в попапе | Визуально присутствует после «Тропы» |
+| Снятие чекбокса скрывает POI | Слои `poi-circles` и `poi-labels` получают visibility: none |
+| Установка чекбокса показывает POI | Слои получают visibility: visible |
+| Состояние сохраняется | После перезагрузки страницы чекбокс и видимость POI соответствуют последнему выбору |
+| Не ломает существующий функционал | Грунтовки, тропы, рельеф, роутинг работают как прежде |
+
+## 5. Риски
+
+| Риск | Вероятность | Митигация |
+|------|-------------|-----------|
+| Конфликт с существующим toggleLayer('poi') | Низкая | Использовать тот же механизм layerState, не дублировать логику |
+| Попап становится слишком длинным на мобильных | Низкая | Один чекбокс — минимальное увеличение высоты |
+
+## 6. Зависимости
+
+- Нет внешних зависимостей
+- Только фронтенд (vanilla JS + HTML)
diff --git a/docs/work-items/ET-002/02-trz.md b/docs/work-items/ET-002/02-trz.md
new file mode 100644
index 0000000..a6316a7
--- /dev/null
+++ b/docs/work-items/ET-002/02-trz.md
@@ -0,0 +1,98 @@
+---
+type: trz
+work_item_id: ET-002
+title: "ТЗ: Чекбокс показа/скрытия POI в попапе рельефа"
+version: 1
+status: draft
+created_at: 2026-05-20
+authors:
+ - "agent:analyst"
+---
+
+# ТЗ — ET-002: Чекбокс показа/скрытия POI в попапе рельефа
+
+## 1. Функциональные требования
+
+### REQ-F-01: Чекбокс POI в попапе рельефа
+
+Система должна отображать чекбокс «POI» в попапе кнопки «Рельеф» (`terrain-popup`), расположенный после чекбокса «Тропы» (`trails-path-cb`), отделённый горизонтальной линией (`
`).
+
+### REQ-F-02: Состояние по умолчанию
+
+При первом посещении (отсутствие ключа в localStorage) чекбокс POI должен быть включён (checked), маркеры POI видимы.
+
+### REQ-F-03: Скрытие POI
+
+При снятии чекбокса система должна установить `visibility: 'none'` для слоёв `poi-circles` и `poi-labels` через `map.setLayoutProperty()`.
+
+### REQ-F-04: Показ POI
+
+При установке чекбокса система должна установить `visibility: 'visible'` для слоёв `poi-circles` и `poi-labels`.
+
+### REQ-F-05: Сохранение состояния
+
+Система должна сохранять состояние чекбокса в `localStorage` под ключом `poi-visible` (значения: `'1'` — показывать, `'0'` — скрывать).
+
+### REQ-F-06: Восстановление состояния при загрузке
+
+При загрузке страницы система должна:
+1. Прочитать значение `localStorage.getItem('poi-visible')`
+2. Если значение `'0'` — снять чекбокс и скрыть слои POI
+3. Если значение `'1'` или отсутствует (null) — установить чекбокс и показать слои POI
+
+### REQ-F-07: Синхронизация с layerState
+
+Изменение чекбокса должно обновлять `layerState.poi` (true/false), чтобы состояние было консистентно с внутренней моделью приложения.
+
+## 2. Нефункциональные требования
+
+### REQ-NF-01: Производительность
+
+Переключение видимости POI должно происходить мгновенно (< 50 мс), без перезагрузки тайлов.
+
+### REQ-NF-02: Совместимость
+
+Решение должно работать во всех браузерах, поддерживающих MapLibre GL JS (Chrome 80+, Firefox 78+, Safari 14+, Edge 80+).
+
+### REQ-NF-03: Мобильная адаптация
+
+Чекбокс должен быть доступен и нажимаем на мобильных устройствах (touch target ≥ 44px).
+
+### REQ-NF-04: Отсутствие регрессий
+
+Существующие чекбоксы (Тени рельефа, Перепады, Грунтовки, Тропы) должны продолжать работать без изменений.
+
+## 3. UI-спецификация
+
+### Расположение в HTML
+
+```html
+
+
+
+```
+
+### Стилизация
+
+Использовать существующий класс `terrain-checkbox` — единообразие с остальными чекбоксами в попапе.
+
+## 4. Данные
+
+- localStorage ключ: `poi-visible`
+- Значения: `'1'` (показывать) | `'0'` (скрывать)
+- MapLibre слои: `poi-circles`, `poi-labels`
+- Состояние в JS: `layerState.poi`
+
+## 5. API
+
+Нет изменений в backend API. Вся логика — клиентская.
+
+## 6. Затрагиваемые файлы
+
+| Файл | Изменение |
+|------|-----------|
+| `src/web/index.html` | Добавить чекбокс в `terrain-popup` |
+| `src/web/app.js` | Добавить функцию `onPoiCheckbox()`, логику восстановления состояния при загрузке |
diff --git a/docs/work-items/ET-002/03-acceptance-criteria.md b/docs/work-items/ET-002/03-acceptance-criteria.md
new file mode 100644
index 0000000..37d38ca
--- /dev/null
+++ b/docs/work-items/ET-002/03-acceptance-criteria.md
@@ -0,0 +1,85 @@
+---
+type: acceptance-criteria
+work_item_id: ET-002
+title: "Acceptance Criteria: Чекбокс POI"
+version: 1
+status: draft
+created_at: 2026-05-20
+authors:
+ - "agent:analyst"
+---
+
+# Acceptance Criteria — ET-002
+
+## AC-01: Чекбокс отображается в попапе
+
+```gherkin
+Given пользователь открыл карту
+When пользователь нажимает кнопку «Рельеф»
+Then в попапе отображается чекбокс «POI» после секции «Тропы»
+And чекбокс отделён горизонтальной линией от секции выше
+```
+
+## AC-02: POI включены по умолчанию
+
+```gherkin
+Given пользователь открыл карту впервые (нет ключа poi-visible в localStorage)
+When попап рельефа открыт
+Then чекбокс «POI» установлен (checked)
+And маркеры POI видны на карте
+```
+
+## AC-03: Скрытие POI
+
+```gherkin
+Given чекбокс «POI» установлен
+And маркеры POI видны на карте
+When пользователь снимает чекбокс «POI»
+Then маркеры POI исчезают с карты
+And слои poi-circles и poi-labels имеют visibility: none
+```
+
+## AC-04: Показ POI
+
+```gherkin
+Given чекбокс «POI» снят
+And маркеры POI скрыты
+When пользователь устанавливает чекбокс «POI»
+Then маркеры POI появляются на карте
+And слои poi-circles и poi-labels имеют visibility: visible
+```
+
+## AC-05: Состояние сохраняется после перезагрузки
+
+```gherkin
+Given пользователь снял чекбокс «POI»
+When пользователь перезагружает страницу
+Then чекбокс «POI» снят
+And маркеры POI скрыты
+```
+
+## AC-06: Восстановление включённого состояния
+
+```gherkin
+Given пользователь установил чекбокс «POI»
+When пользователь перезагружает страницу
+Then чекбокс «POI» установлен
+And маркеры POI видны
+```
+
+## AC-07: Не ломает существующие чекбоксы
+
+```gherkin
+Given попап рельефа открыт
+When пользователь переключает чекбоксы «Тени рельефа», «Перепады», «Грунтовки», «Тропы»
+Then каждый чекбокс работает как прежде
+And чекбокс «POI» не влияет на их поведение
+```
+
+## AC-08: Синхронизация с layerState
+
+```gherkin
+Given чекбокс «POI» снят
+When внешний код читает layerState.poi
+Then значение равно false
+```
diff --git a/docs/work-items/ET-002/04-test-plan.yaml b/docs/work-items/ET-002/04-test-plan.yaml
new file mode 100644
index 0000000..f3b79bf
--- /dev/null
+++ b/docs/work-items/ET-002/04-test-plan.yaml
@@ -0,0 +1,116 @@
+---
+type: test-plan
+work_item_id: ET-002
+title: "Test Plan: Чекбокс POI"
+version: 1
+status: draft
+created_at: 2026-05-20
+authors:
+ - "agent:analyst"
+---
+
+tests:
+ - id: TP-01
+ type: unit
+ description: "onPoiCheckbox() устанавливает visibility слоёв"
+ steps:
+ - "Mock map.getLayer() → true"
+ - "Mock map.setLayoutProperty()"
+ - "Установить checkbox.checked = false"
+ - "Вызвать onPoiCheckbox()"
+ expected:
+ - "setLayoutProperty('poi-circles', 'visibility', 'none') вызван"
+ - "setLayoutProperty('poi-labels', 'visibility', 'none') вызван"
+ - "localStorage.setItem('poi-visible', '0') вызван"
+ - "layerState.poi === false"
+
+ - id: TP-02
+ type: unit
+ description: "onPoiCheckbox() показывает слои при checked=true"
+ steps:
+ - "Mock map.getLayer() → true"
+ - "Установить checkbox.checked = true"
+ - "Вызвать onPoiCheckbox()"
+ expected:
+ - "setLayoutProperty('poi-circles', 'visibility', 'visible') вызван"
+ - "setLayoutProperty('poi-labels', 'visibility', 'visible') вызван"
+ - "localStorage.setItem('poi-visible', '1') вызван"
+ - "layerState.poi === true"
+
+ - id: TP-03
+ type: unit
+ description: "Восстановление состояния при загрузке — POI скрыты"
+ steps:
+ - "localStorage.setItem('poi-visible', '0')"
+ - "Вызвать функцию инициализации POI"
+ expected:
+ - "checkbox.checked === false"
+ - "layerState.poi === false"
+ - "Слои скрыты"
+
+ - id: TP-04
+ type: unit
+ description: "Восстановление состояния при загрузке — POI видны (default)"
+ steps:
+ - "localStorage не содержит ключ poi-visible"
+ - "Вызвать функцию инициализации POI"
+ expected:
+ - "checkbox.checked === true"
+ - "layerState.poi === true"
+
+ - id: TP-05
+ type: e2e
+ description: "Чекбокс POI виден в попапе рельефа"
+ steps:
+ - "Открыть карту в браузере"
+ - "Нажать кнопку «Рельеф»"
+ expected:
+ - "В попапе виден чекбокс с текстом «POI»"
+ - "Чекбокс расположен после «Тропы», отделён линией"
+
+ - id: TP-06
+ type: e2e
+ description: "Переключение POI скрывает/показывает маркеры"
+ steps:
+ - "Открыть карту, дождаться загрузки POI"
+ - "Открыть попап рельефа"
+ - "Снять чекбокс POI"
+ - "Убедиться что маркеры исчезли"
+ - "Установить чекбокс POI"
+ - "Убедиться что маркеры появились"
+ expected:
+ - "Маркеры POI скрываются и появляются в соответствии с чекбоксом"
+
+ - id: TP-07
+ type: e2e
+ description: "Состояние POI сохраняется после перезагрузки"
+ steps:
+ - "Открыть карту"
+ - "Снять чекбокс POI"
+ - "Перезагрузить страницу"
+ - "Открыть попап рельефа"
+ expected:
+ - "Чекбокс POI снят"
+ - "Маркеры POI не отображаются"
+
+ - id: TP-08
+ type: integration
+ description: "Чекбокс POI не влияет на другие слои"
+ steps:
+ - "Включить Тени рельефа и Грунтовки"
+ - "Снять чекбокс POI"
+ expected:
+ - "Тени рельефа остаются видимыми"
+ - "Грунтовки остаются видимыми"
+ - "Только POI скрыты"
+
+ - id: TP-09
+ type: e2e
+ description: "Мобильная доступность чекбокса"
+ steps:
+ - "Открыть карту на мобильном viewport (375px)"
+ - "Открыть попап рельефа"
+ - "Тапнуть чекбокс POI"
+ expected:
+ - "Чекбокс нажимается без проблем"
+ - "Touch target достаточный (≥ 44px)"