/* Специфичные стили для экрана навигации */ /* Главный контейнер для навигационного экрана */ .navigation-main { padding: 0; position: relative; } /* Полноэкранная карта */ .map-full { width: 100%; height: 100%; position: relative; background: #E8F5E9; } .map-image { width: 100%; height: 100%; object-fit: cover; } /* Маркеры на карте */ .map-marker { position: absolute; transform: translate(-50%, -50%); } /* Маркер текущего пользователя */ .user-marker { width: 40px; height: 40px; position: relative; } .marker-pulse { position: absolute; width: 40px; height: 40px; border-radius: 50%; background: rgba(52, 152, 219, 0.3); animation: pulse-ring 2s ease-out infinite; } @keyframes pulse-ring { 0% { transform: scale(1); opacity: 1; } 100% { transform: scale(2); opacity: 0; } } .marker-dot { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 16px; height: 16px; background: var(--color-info); border: 3px solid var(--color-bg-card); border-radius: 50%; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3); } /* Маркеры других участников */ .participant-marker { z-index: 10; } .participant-dot { font-size: 24px; width: 32px; height: 32px; display: flex; align-items: center; justify-content: center; background: var(--color-bg-card); border: 2px solid var(--color-success); border-radius: 50%; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.25); } /* Маркер контрольной точки */ .checkpoint-marker { z-index: 5; } .checkpoint-icon { font-size: 32px; width: 45px; height: 45px; line-height: 33px; display: flex; align-items: center; justify-content: center; background: var(--color-bg-card); border: 3px solid var(--color-accent); border-radius: 50%; box-shadow: 0 3px 10px rgba(0, 0, 0, 0.3); } /* Панель состояния */ .status-panel { position: absolute; top: var(--spacing-md); left: var(--spacing-md); right: var(--spacing-md); display: flex; gap: var(--spacing-sm); z-index: 20; } .status-item { display: flex; align-items: center; gap: var(--spacing-xs); padding: var(--spacing-xs) var(--spacing-md); background: rgba(255, 255, 255, 0.95); border-radius: var(--radius-sm); font-size: var(--font-size-small); font-weight: var(--font-weight-semibold); box-shadow: var(--shadow-md); } .status-icon { font-size: 16px; line-height: 1; } .status-value { color: var(--color-text-dark); } /* Компас-навигатор */ .compass-card { position: absolute; bottom: calc(var(--nav-height) + var(--spacing-xl)); left: var(--spacing-md); background: var(--color-bg-card); border-radius: var(--radius-md); padding: var(--spacing-lg); box-shadow: var(--shadow-lg); display: flex; gap: var(--spacing-lg); align-items: center; z-index: 20; } .compass-container { flex-shrink: 0; } .compass-circle { width: 64px; height: 64px; border-radius: 50%; background: linear-gradient(135deg, var(--color-primary) 0%, var(--color-primary-light) 100%); position: relative; display: flex; align-items: center; justify-content: center; } .compass-arrow { width: 0; height: 0; border-left: 8px solid transparent; border-right: 8px solid transparent; border-bottom: 24px solid var(--color-bg-card); position: absolute; top: 12px; transform: rotate(45deg); } .compass-direction { position: absolute; bottom: 8px; font-size: var(--font-size-small); font-weight: var(--font-weight-bold); color: var(--color-bg-card); } .compass-info { flex: 1; } .compass-target { font-size: var(--font-size-base); font-weight: var(--font-weight-semibold); color: var(--color-text-dark); margin-bottom: var(--spacing-xs); } .compass-distance { display: flex; align-items: baseline; gap: var(--spacing-sm); } .distance-value { font-size: var(--font-size-large); font-weight: var(--font-weight-bold); color: var(--color-primary); } .distance-time { font-size: var(--font-size-small); color: var(--color-text-medium); } /* Карточка группы */ .group-card { position: absolute; bottom: calc(var(--nav-height) + var(--spacing-xxxl) * 2 + var(--spacing-md)); left: var(--spacing-md); right: var(--spacing-md); background: var(--color-bg-card); border-radius: var(--radius-md); padding: var(--spacing-lg); box-shadow: var(--shadow-lg); z-index: 20; } .group-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: var(--spacing-md); } .group-title { font-size: var(--font-size-base); font-weight: var(--font-weight-semibold); color: var(--color-text-dark); } .group-count { font-size: var(--font-size-small); color: var(--color-text-medium); background: var(--color-bg-secondary); padding: 2px var(--spacing-sm); border-radius: 12px; } .group-members { display: flex; flex-direction: column; gap: var(--spacing-sm); } .group-member { display: flex; align-items: center; gap: var(--spacing-md); } .member-avatar { font-size: 24px; width: 36px; height: 36px; display: flex; align-items: center; justify-content: center; background: var(--color-bg-secondary); border-radius: 50%; flex-shrink: 0; } .member-info { flex: 1; display: flex; justify-content: space-between; align-items: center; } .member-name { font-size: var(--font-size-base); font-weight: var(--font-weight-medium); color: var(--color-text-dark); } .member-distance { font-size: var(--font-size-small); color: var(--color-text-medium); } .member-status { width: 24px; height: 24px; display: flex; align-items: center; justify-content: center; border-radius: 50%; font-size: 14px; font-weight: var(--font-weight-bold); flex-shrink: 0; } .status-ok { background: #D5F4E6; color: var(--color-success); } /* Быстрые действия */ .quick-actions { position: absolute; top: 20px; right: var(--spacing-md); display: flex; flex-direction: column; gap: var(--spacing-sm); z-index: 25; } .action-btn { width: 90px; height: 90px; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 2px; background: var(--color-bg-card); border: none; border-radius: 50%; box-shadow: var(--shadow-md); cursor: pointer; transition: transform var(--transition-fast) ease; } .action-btn:active { transform: scale(0.95); } .action-icon { font-size: 36px; line-height: 1; } .action-label { font-size: 16px; font-weight: var(--font-weight-semibold); color: var(--color-text-dark); } .action-camera { background: var(--color-accent); } .action-camera .action-label { color: var(--color-bg-card); }