# Acceptance Criteria — ET-014

**Work Item:** ET-014
**Связаны:** BR-01…BR-06 (01-brd.md), REQ-F-01…REQ-F-07 (02-trz.md)

Формат: Given / When / Then.

---

## AC-01: Открытие фильтров на mobile — sheet полностью виден поверх
**Покрывает:** BR-01, BR-02, REQ-F-01, REQ-F-05

- **Given** мобильный viewport 390×844, тёмная тема, карта https://openclaw.mva154.duckdns.org/enduro/ загружена и стабилизирована (зум по умолчанию).
- **When** пользователь:
  1. Кликает кнопку `#terrain-toggle` («Рельеф»).
  2. Включает чекбокс `#public-tracks-cb` («Публичные треки»).
  3. Кликает кнопку `#public-tracks-filters-btn` («Фильтры…»).
- **Then**
  - `#sheet-gps-filters` имеет класс `open` (DOM-проверка).
  - Заголовок «Фильтры публичных треков», секция «ТИП АКТИВНОСТИ» и кнопка `✕` полностью видны в viewport и кликабельны (visible & in front, no element with higher stacking covers them).
  - Никакая часть `#terrain-popup` не визуально перекрывает `#sheet-gps-filters` в области sheet'а (скриншот-сравнение).

## AC-02: Открытие фильтров на desktop — sheet полностью виден поверх
**Покрывает:** BR-01, BR-02, REQ-F-01, REQ-NF-05

- **Given** desktop viewport 1440×900, любая тема.
- **When** те же шаги что в AC-01.
- **Then** sheet «Фильтры публичных треков» отображается слева (как другие sheets на desktop, ширина ≈ 380 px) и полностью видим. `#terrain-popup` не перекрывает sheet.

## AC-03: Кликабельность контролов внутри фильтров
**Покрывает:** BR-01, REQ-F-01

- **Given** AC-01 (фильтры открыты на mobile).
- **When** пользователь кликает на чекбоксы активностей внутри `#gps-activity-grid` и на сегментный переключатель «По источнику / По активности».
- **Then** клики срабатывают (визуальное состояние чекбокса/кнопки меняется). Никакой невидимый слой не «съедает» события.

## AC-04: Закрытие фильтров кнопкой ✕ — без артефактов
**Покрывает:** BR-03, REQ-F-03

- **Given** фильтры открыты (AC-01).
- **When** пользователь кликает кнопку `✕` в шапке `#sheet-gps-filters`.
- **Then**
  - `#sheet-gps-filters` теряет класс `open`, скрывается.
  - На viewport не остаётся видимых частей панели слоёв или sheet'а в полупрозрачном/частичном состоянии.
  - Карта полностью интерактивна (свободно скроллится, zoom работает).

## AC-05: Закрытие фильтров кликом по backdrop (mobile)
**Покрывает:** BR-03, REQ-F-03

- **Given** фильтры открыты на mobile (AC-01).
- **When** пользователь тапает по затемнённой области выше sheet'а (`#sheet-backdrop`).
- **Then** sheet закрывается. Возврат к карте без артефактов.

## AC-06: Повторное открытие фильтров работает
**Покрывает:** REQ-F-04

- **Given** пользователь только что закрыл фильтры (AC-04 или AC-05).
- **When** повторяет шаги AC-01 (Рельеф → Публичные треки → Фильтры…).
- **Then** sheet снова открывается полностью видимым. Никаких залипших состояний кнопок / классов.

## AC-07: Чекбоксы рельефа в terrain-popup продолжают работать
**Покрывает:** BR-05, REQ-F-05

- **Given** карта загружена, фильтры не открывались в этой сессии.
- **When** пользователь открывает `#terrain-popup` и переключает `#terrain-hillshade-cb`, `#terrain-tri-cb`, `#trails-track-cb`, `#trails-path-cb`, `#poi-visible-cb`, переключатели подложки и единиц.
- **Then** все чекбоксы реагируют как раньше, popup остаётся открытым до клика вне popup'а. Регрессий нет.

## AC-08: Закрытие terrain-popup кликом вне popup'а
**Покрывает:** REQ-F-05

- **Given** `#terrain-popup` открыт.
- **When** пользователь кликает по карте или любой области вне popup'а и вне `#terrain-toggle`.
- **Then** popup закрывается (existing `closeTerrainOnOutside`). Класс `.active` с кнопки снимается.

## AC-09: Остальные bottom-sheets не регрессируют
**Покрывает:** BR-04, REQ-F-06

- **Given** карта загружена.
- **When** пользователь поочерёдно открывает `#sheet-route`, `#sheet-recon`, `#sheet-scenic`, `#sheet-link`, `#sheet-gpx` через тулбар.
- **Then** каждый sheet открывается, виден полностью, кнопки внутри работают, закрывается ✕ / свайпом / backdrop'ом без артефактов.

## AC-10: Marker-dialog не регрессирует
**Покрывает:** REQ-NF-03

- **Given** карта загружена.
- **When** пользователь активирует «Метка» в тулбаре, тапает по карте.
- **Then** `#marker-dialog` (z=500) открывается поверх всего, кликабелен. После выбора типа — закрывается без артефактов.

## AC-11: Search-panel не регрессирует
**Покрывает:** REQ-NF-03

- **Given** карта загружена.
- **When** пользователь нажимает «Поиск» в тулбаре, вводит запрос.
- **Then** `#search-panel` (z=600) виден полностью, ввод работает, результаты подгружаются.

## AC-12: Ruler-info не регрессирует
**Покрывает:** REQ-NF-03

- **Given** карта загружена.
- **When** пользователь активирует «Линейка», ставит точки.
- **Then** `#ruler-info` (z=600) виден поверх всего и кликабелен.

## AC-13: Светлая тема
**Покрывает:** BR-06, REQ-F-07

- **Given** mobile viewport, светлая тема (включена кнопкой `#btn-theme`).
- **When** повторяются шаги AC-01.
- **Then** результат идентичен AC-01: sheet поверх, всё видно, кликабельно. Никаких theme-specific артефактов.

## AC-14: Сценарий из тикета (мобильный, z12 Москва)
**Покрывает:** BR-01, BR-02 (прямое воспроизведение бага)

- **Given** мобильный viewport (390×844), карта на зуме 12 в центре около Москвы (lng=37.6, lat=55.75).
- **When** Рельеф → ✓ Публичные треки → Фильтры…
- **Then** Скриншот после открытия фильтров сопоставим с эталонным «good»: панель «Фильтры публичных треков» полностью видна; ни одна часть terrain-popup не находится поверх sheet'а в его координатах.

---

## Definition of Done

- Все AC-01…AC-14 проходят на test-среде https://openclaw.mva154.duckdns.org/enduro/.
- `make test` и `make lint` зелёные.
- UI-тесты из `04b-ui-test-cases.md` зелёные на CI (или в локальном Playwright прогоне).
- Owner подтвердил визуальную приёмку по скриншотам AC-01, AC-02, AC-14.
