/* Основные стили */ * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); min-height: 100vh; } .section { animation: fadeIn 0.3s ease-in; } @keyframes fadeIn { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } /* Навигация */ .nav-btn { padding: 0.5rem 1rem; border-radius: 0.5rem; transition: all 0.3s; background: transparent; color: #cbd5e1; border: none; cursor: pointer; font-size: 0.95rem; } .nav-btn:hover { background: rgba(255, 255, 255, 0.1); color: white; } .nav-btn.active { background: #0ea5e9; color: white; } /* Карточки объектов */ .object-card { background: white; border-radius: 1rem; padding: 1.5rem; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); transition: all 0.3s; cursor: pointer; border-left: 4px solid #1e40af; } .object-card:hover { transform: translateY(-4px); box-shadow: 0 10px 25px rgba(0, 0, 0, 0.15); } .object-card.status-план { border-left-color: #6b7280; } .object-card.status-обследование { border-left-color: #f59e0b; } .object-card.status-смр { border-left-color: #0ea5e9; } .object-card.status-проблема { border-left-color: #ef4444; } .object-card.status-готов { border-left-color: #10b981; } .object-card.status-сдан { border-left-color: #10b981; } .object-card.overdue { background: linear-gradient(135deg, #fef2f2 0%, white 100%); border-left-color: #ef4444; animation: pulse 2s infinite; } @keyframes pulse { 0%, 100% { box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); } 50% { box-shadow: 0 4px 20px rgba(239, 68, 68, 0.3); } } .object-card.approaching { border-left-color: #f59e0b; background: linear-gradient(135deg, #fffbeb 0%, white 100%); } /* Статусы */ .status-badge { display: inline-block; padding: 0.25rem 0.75rem; border-radius: 9999px; font-size: 0.75rem; font-weight: 600; text-transform: uppercase; } .status-badge.план { background: #f3f4f6; color: #6b7280; } .status-badge.обследование { background: #fef3c7; color: #92400e; } .status-badge.смр { background: #dbeafe; color: #1e40af; } .status-badge.проблема { background: #fee2e2; color: #991b1b; } .status-badge.готов { background: #d1fae5; color: #065f46; } .status-badge.сдан { background: #d1fae5; color: #065f46; } /* Карта */ #map { z-index: 1; } .leaflet-popup-content-wrapper { border-radius: 1rem; padding: 0; overflow: hidden; } .leaflet-popup-content { margin: 0; width: 280px !important; } .popup-content { padding: 1rem; } .popup-content h3 { font-weight: bold; margin-bottom: 0.5rem; color: #1e293b; } .popup-content p { margin-bottom: 0.25rem; font-size: 0.875rem; color: #64748b; } /* Уведомления */ .notif-item { padding: 0.75rem; border-bottom: 1px solid #e2e8f0; border-radius: 0.5rem; margin-bottom: 0.5rem; background: #f8fafc; } .notif-item.danger { background: #fef2f2; border-left: 3px solid #ef4444; } .notif-item.warning { background: #fffbeb; border-left: 3px solid #f59e0b; } .notif-item.success { background: #f0fdf4; border-left: 3px solid #10b981; } /* Адаптивность */ @media (max-width: 768px) { .nav-btn { font-size: 0.8rem; padding: 0.4rem 0.6rem; } .grid.grid-cols-1.md\:grid-cols-2.lg\:grid-cols-3 { grid-template-columns: 1fr; } .grid.grid-cols-1.md\:grid-cols-4 { grid-template-columns: 1fr; } } /* Scrollbar */ ::-webkit-scrollbar { width: 8px; height: 8px; } ::-webkit-scrollbar-track { background: #f1f1f1; border-radius: 4px; } ::-webkit-scrollbar-thumb { background: #c1c1c1; border-radius: 4px; } ::-webkit-scrollbar-thumb:hover { background: #a1a1a1; } /* Modal animations */ #object-modal { transition: opacity 0.3s ease; } #object-modal.hidden { opacity: 0; pointer-events: none; } /* Chart containers */ canvas { max-height: 400px; }