digraph MushroomHikeApp { rankdir=LR; fontsize=10; node [shape=rectangle, style=rounded, fontsize=10]; // --- Основные состояния участников похода (a–m) --- a [label="a) Начальное состояние\n(главный экран)"]; b [label="b) Планирование похода\n(маршрут, точки, погода, офлайн-карты)"]; c [label="c) Управление участниками\n(приглашения, роли, доверенные контакты)"]; d [label="d) Чек-лист снаряжения\n(шаблон, распределение, контроль сборов)"]; e [label="e) Активная навигация\n(карта, GPS, режимы отображения)"]; f [label="f) Фиксация находки\n(фото, координаты, заметки)"]; g [label="g) Семейная корзина\n(все находки группы)"]; h [label="h) Семейный чат\n(сообщения, фото, геолокация)"]; i [label="i) Справочник грибов\n(виды, съедобность, двойники)"]; k [label="k) Панель организатора\n(мониторинг, управление маршрутом)"]; l [label="l) Архив походов\n(список завершённых походов)"]; m [label="m) Детальный просмотр похода\n(трек, события, статистика)"]; // --- SOS (красный, отдельный) --- j [label="j) Экстренный режим (SOS)", color="red", fontcolor="red", style="rounded,bold", penwidth=2]; // --- Технические невидимые точки для "стрелок из ниоткуда" --- fromAnywhereToA [shape=point, width=0, height=0, style=invis]; fromAnywhereToSOS [shape=point, width=0, height=0, style=invis]; // Стрелки "из ниоткуда" fromAnywhereToA -> a [label="25. Переход\nна главный экран", style=dashed]; fromAnywhereToSOS -> j [label="24. SOS\n(из любого состояния)", style=dashed, color="red", fontcolor="red"]; // --- Переходы (кроме SOS и возврата на главный) --- a -> b [label="1. Создать поход"]; a -> e [label="2. Присоединиться (день похода)"]; a -> d [label="3. Присоединиться (подготовка)"]; b -> c [label="4. Управление\nучастниками"]; c -> d [label="5. Чек-лист"]; b -> d [label="6. Чек-лист"]; d -> e [label="7. Начать поход"]; b -> e [label="8. Начать поход"]; e -> f [label="9. Фиксировать\nнаходку"]; f -> e [label="10. Сохранить\nи вернуться"]; e -> g [label="11. Открыть корзину"]; g -> e [label="12. Назад к\nнавигации"]; e -> h [label="13. Открыть чат"]; h -> e [label="14. Назад к\nнавигации"]; f -> i [label="15. Открыть\nсправочник"]; g -> i [label="16. Открыть\nсправочник"]; i -> f [label="17. Назад\nк фиксации"]; i -> g [label="18. Назад\nк корзине"]; e -> k [label="19. Панель\nорганизатора"]; k -> e [label="20. Назад к\nнавигации"]; e -> l [label="21. Завершить\nпоход"]; a -> l [label="22. Открыть\nархив"]; l -> m [label="23. Открыть\nпоход"]; }