=================================================================== ComSync Pro - Professional Styles ========================================================================== */ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap'); /* Root Variables */ :root { --primary-blue: #3b82f6; --primary-purple: #8b5cf6; --primary-green: #10b981; --primary-red: #ef4444; --primary-yellow: #f59e0b; --gray-50: #f9fafb; --gray-100: #f3f4f6; --gray-200: #e5e7eb; --gray-300: #d1d5db; --gray-400: #9ca3af; --gray-500: #6b7280; --gray-600: #4b5563; --gray-700: #374151; --gray-800: #1f2937; --gray-900: #111827; } /* Base Styles */ * { box-sizing: border-box; } body { font-family: 'Inter', sans-serif; background: var(--gray-900); color: var(--gray-100); line-height: 1.6; } /* Animations */ @keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } } @keyframes typing { 0%, 60%, 100% { transform: translateY(0); } 30% { transform: translateY(-5px); } } @keyframes slideIn { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } @keyframes bounce { 0%, 20%, 53%, 80%, 100% { transform: translateY(0); } 40%, 43% { transform: translateY(-10px); } 70% { transform: translateY(-5px); } 90% { transform: translateY(-2px); } } /* Utility Classes */ .animate-pulse { animation: pulse 1.5s cubic-bezier(0.4, 0, 0.6, 1) infinite; } .animate-typing { animation: typing 1.4s infinite ease-in-out; } .animate-slide-in { animation: slideIn 0.3s ease-out; } .animate-fade-in { animation: fadeIn 0.5s ease-out; } .animate-bounce { animation: bounce 1s; } .scrollbar-hide::-webkit-scrollbar { display: none; } .scrollbar-hide { -ms-overflow-style: none; scrollbar-width: none; } /* Gradient Text */ .gradient-text-blue { background: linear-gradient(135deg, var(--primary-blue), var(--primary-purple)); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } .gradient-text-purple { background: linear-gradient(135deg, var(--primary-purple), var(--primary-blue)); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } /* Signal Bars */ .signal-bar { width: 4px; margin: 0 1px; transition: all 0.3s ease; } /* Glass Effect */ .glass-effect { background: rgba(31, 41, 55, 0.8); backdrop-filter: blur(10px); border: 1px solid rgba(75, 85, 99, 0.5); } /* Status Indicators */ .status-online { color: var(--primary-green); } .status-offline { color: var(--primary-red); } .status-warning { color: var(--primary-yellow); } .status-info { color: var(--primary-blue); } /* Button Styles */ .btn-primary { background: var(--primary-blue); color: white; padding: 0.75rem 1.5rem; border-radius: 0.5rem; font-weight: 500; transition: all 0.2s; border: none; cursor: pointer; } .btn-primary:hover { background: #2563eb; transform: translateY(-1px); box-shadow: 0 4px 12px rgba(59, 130, 246, 0.4); } .btn-secondary { background: var(--gray-700); color: var(--gray-100); padding: 0.75rem 1.5rem; border-radius: 0.5rem; font-weight: 500; transition: all 0.2s; border: 1px solid var(--gray-600); cursor: pointer; } .btn-secondary:hover { background: var(--gray-600); transform: translateY(-1px); } .btn-danger { background: var(--primary-red); color: white; padding: 0.75rem 1.5rem; border-radius: 0.5rem; font-weight: 500; transition: all 0.2s; border: none; cursor: pointer; } .btn-danger:hover { background: #dc2626; transform: translateY(-1px); } /* Card Styles */ .card { background: var(--glass-effect); backdrop-filter: blur(10px); border-radius: 0.75rem; border: 1px solid rgba(75, 85, 99, 0.5); box-shadow: 0 10px 25px rgba(0, 0, 0, 0.1); transition: all 0.3s ease; } .card:hover { transform: translateY(-2px); box-shadow: 0 20px 40px rgba(0, 0, 0, 0.2); } /* Form Styles */ .form-input { width: 100%; background: rgba(55, 65, 81, 0.5); border: 1px solid var(--gray-600); border-radius: 0.5rem; padding: 0.75rem 1rem; color: var(--gray-100); transition: all 0.2s; } .form-input:focus { outline: none; border-color: var(--primary-blue); box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1); } .form-input::placeholder { color: var(--gray-400); } /* Navigation */ .nav-link { color: var(--gray-400); text-decoration: none; font-weight: 500; transition: all 0.2s; display: flex; align-items: center; gap: 0.5rem; padding: 0.5rem 1rem; border-radius: 0.5rem; } .nav-link:hover { color: var(--gray-100); background: rgba(55, 65, 81, 0.5); } .nav-link.active { color: var(--primary-blue); background: rgba(59, 130, 246, 0.1); } .nav-link.active i { color: var(--primary-blue); } /* Chat Styles */ .message-user { background: linear-gradient(135deg, var(--primary-blue), var(--primary-purple)); border-radius: 12px 12px 0 12px; align-self: flex-end; animation: slideIn 0.3s ease-out; } .message-ai { background: rgba(55, 65, 81, 0.8); border-radius: 12px 12px 12px 0; align-self: flex-start; animation: slideIn 0.3s ease-out; } .typing-indicator span { animation: typing 1.4s infinite ease-in-out; } .typing-indicator span:nth-child(1) { animation-delay: 0s; } .typing-indicator span:nth-child(2) { animation-delay: 0.2s; } .typing-indicator span:nth-child(3) { animation-delay: 0.4s; } /* Loading States */ .loading-spinner { border: 2px solid var(--gray-600); border-top: 2px solid var(--primary-blue); border-radius: 50%; width: 20px; height: 20px; animation: spin 1s linear infinite; } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } /* Responsive Design */ @media (max-width: 768px) { .grid-responsive { grid-template-columns: 1fr; } .nav-container { flex-direction: column; gap: 1rem; } .nav-links { flex-wrap: wrap; justify-content: center; } .card { margin-bottom: 1rem; } } /* Security Styles */ .security-level-critical { color: var(--primary-red); } .security-level-high { color: var(--primary-yellow); } .security-level-medium { color: var(--primary-blue); } .security-level-low { color: var(--primary-green); } .security-level-info { color: var(--gray-500); } /* FM Status Styles */ .fm-available { color: var(--primary-green); } .fm-listening { color: var(--primary-yellow); } .fm-unavailable { color: var(--primary-red); } /* Bluetooth Status Styles */ .bluetooth-connected { color: var(--primary-green); } .bluetooth-connecting { color: var(--primary-yellow); } .bluetooth-disconnected { color: var(--primary-red); } .bluetooth-available { color: var(--primary-blue); } /* Walkie Talkie Styles */ .walkie-card { transition: all 0.3s ease; } .walkie-card:hover { transform: translateY(-2px); box-shadow: 0 10px 25px rgba(0, 0, 0, 0.3); } .bluetooth-wave { position: relative; overflow: hidden; } .bluetooth-wave::before { content: ''; position: absolute; top: 50%; left: 50%; width: 100%; height: 100%; background: radial-gradient(circle, rgba(59, 130, 246, 0.3) 0%, transparent 70%); border-radius: 50%; transform: translate(-50%, -50%); animation: bluetoothPulse 2s infinite; } @keyframes bluetoothPulse { 0% { width: 0%; height: 0%; opacity: 1; } 100% { width: 100%; height: 100%; opacity: 0; } } /* AI Insight Cards */ .ai-insight-card { background: rgba(139, 92, 246, 0.1); border: 1px solid rgba(139, 92, 246, 0.3); } .prediction-badge { background: rgba(16, 185, 129, 0.1); border: 1px solid rgba(16, 185, 129, 0.3); } .anomaly-badge { background: rgba(239, 68, 68, 0.1); border: 1px solid rgba(239, 68, 68, 0.3); } /* Map Gradient */ .gradient-map { background: linear-gradient(135deg, #e0f7fa 0%, #b2ebf2 50%, #80deea 100%); } /* Professional Shadows */ .shadow-professional { box-shadow: 0 10px 25px rgba(0, 0, 0, 0.1), 0 4px 6px rgba(0, 0, 0, 0.05); } .shadow-professional-hover:hover { box-shadow: 0 20px 40px rgba(0, 0, 0, 0.15), 0 8px 16px rgba(0, 0, 0, 0.1); } /* Print Styles */ @media print { .no-print { display: none !important; } body { background: white !important; color: black !important; } } ========================================================================== ComSync Pro - Professional Styles ========================================================================== */ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap'); /* Root Variables */ :root { --primary-blue: #3b82f6; --primary-purple: #8b5cf6; --primary-green: #10b981; --primary-red: #ef4444; --primary-yellow: #f59e0b; --gray-50: #f9fafb; --gray-100: #f3f4f6; --gray-200: #e5e7eb; --gray-300: #d1d5db; --gray-400: #9ca3af; --gray-500: #6b7280; --gray-600: #4b5563; --gray-700: #374151; --gray-800: #1f2937; --gray-900: #111827; } /* Base Styles */ * { box-sizing: border-box; } body { font-family: 'Inter', sans-serif; background: var(--gray-900); color: var(--gray-100); line-height: 1.6; } /* Animations */ @keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } } @keyframes typing { 0%, 60%, 100% { transform: translateY(0); } 30% { transform: translateY(-5px); } } @keyframes slideIn { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } @keyframes bounce { 0%, 20%, 53%, 80%, 100% { transform: translateY(0); } 40%, 43% { transform: translateY(-10px); } 70% { transform: translateY(-5px); } 90% { transform: translateY(-2px); } } /* Utility Classes */ .animate-pulse { animation: pulse 1.5s cubic-bezier(0.4, 0, 0.6, 1) infinite; } .animate-typing { animation: typing 1.4s infinite ease-in-out; } .animate-slide-in { animation: slideIn 0.3s ease-out; } .animate-fade-in { animation: fadeIn 0.5s ease-out; } .animate-bounce { animation: bounce 1s; } .scrollbar-hide::-webkit-scrollbar { display: none; } .scrollbar-hide { -ms-overflow-style: none; scrollbar-width: none; } /* Gradient Text */ .gradient-text-blue { background: linear-gradient(135deg, var(--primary-blue), var(--primary-purple)); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } .gradient-text-purple { background: linear-gradient(135deg, var(--primary-purple), var(--primary-blue)); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } /* Signal Bars */ .signal-bar { width: 4px; margin: 0 1px; transition: all 0.3s ease; } /* Glass Effect */ .glass-effect { background: rgba(31, 41, 55, 0.8); backdrop-filter: blur(10px); border: 1px solid rgba(75, 85, 99, 0.5); } /* Status Indicators */ .status-online { color: var(--primary-green); } .status-offline { color: var(--primary-red); } .status-warning { color: var(--primary-yellow); } .status-info { color: var(--primary-blue); } /* Button Styles */ .btn-primary { background: var(--primary-blue); color: white; padding: 0.75rem 1.5rem; border-radius: 0.5rem; font-weight: 500; transition: all 0.2s; border: none; cursor: pointer; } .btn-primary:hover { background: #2563eb; transform: translateY(-1px); box-shadow: 0 4px 12px rgba(59, 130, 246, 0.4); } .btn-secondary { background: var(--gray-700); color: var(--gray-100); padding: 0.75rem 1.5rem; border-radius: 0.5rem; font-weight: 500; transition: all 0.2s; border: 1px solid var(--gray-600); cursor: pointer; } .btn-secondary:hover { background: var(--gray-600); transform: translateY(-1px); } .btn-danger { background: var(--primary-red); color: white; padding: 0.75rem 1.5rem; border-radius: 0.5rem; font-weight: 500; transition: all 0.2s; border: none; cursor: pointer; } .btn-danger:hover { background: #dc2626; transform: translateY(-1px); } /* Card Styles */ .card { background: var(--glass-effect); backdrop-filter: blur(10px); border-radius: 0.75rem; border: 1px solid rgba(75, 85, 99, 0.5); box-shadow: 0 10px 25px rgba(0, 0, 0, 0.1); transition: all 0.3s ease; } .card:hover { transform: translateY(-2px); box-shadow: 0 20px 40px rgba(0, 0, 0, 0.2); } /* Form Styles */ .form-input { width: 100%; background: rgba(55, 65, 81, 0.5); border: 1px solid var(--gray-600); border-radius: 0.5rem; padding: 0.75rem 1rem; color: var(--gray-100); transition: all 0.2s; } .form-input:focus { outline: none; border-color: var(--primary-blue); box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1); } .form-input::placeholder { color: var(--gray-400); } /* Navigation */ .nav-link { color: var(--gray-400); text-decoration: none; font-weight: 500; transition: all 0.2s; display: flex; align-items: center; gap: 0.5rem; padding: 0.5rem 1rem; border-radius: 0.5rem; } .nav-link:hover { color: var(--gray-100); background: rgba(55, 65, 81, 0.5); } .nav-link.active { color: var(--primary-blue); background: rgba(59, 130, 246, 0.1); } .nav-link.active i { color: var(--primary-blue); } /* Chat Styles */ .message-user { background: linear-gradient(135deg, var(--primary-blue), var(--primary-purple)); border-radius: 12px 12px 0 12px; align-self: flex-end; animation: slideIn 0.3s ease-out; } .message-ai { background: rgba(55, 65, 81, 0.8); border-radius: 12px 12px 12px 0; align-self: flex-start; animation: slideIn 0.3s ease-out; } .typing-indicator span { animation: typing 1.4s infinite ease-in-out; } .typing-indicator span:nth-child(1) { animation-delay: 0s; } .typing-indicator span:nth-child(2) { animation-delay: 0.2s; } .typing-indicator span:nth-child(3) { animation-delay: 0.4s; } /* Loading States */ .loading-spinner { border: 2px solid var(--gray-600); border-top: 2px solid var(--primary-blue); border-radius: 50%; width: 20px; height: 20px; animation: spin 1s linear infinite; } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } /* Responsive Design */ @media (max-width: 768px) { .grid-responsive { grid-template-columns: 1fr; } .nav-container { flex-direction: column; gap: 1rem; } .nav-links { flex-wrap: wrap; justify-content: center; } .card { margin-bottom: 1rem; } } /* Security Styles */ .security-level-critical { color: var(--primary-red); } .security-level-high { color: var(--primary-yellow); } .security-level-medium { color: var(--primary-blue); } .security-level-low { color: var(--primary-green); } .security-level-info { color: var(--gray-500); } /* FM Status Styles */ .fm-available { color: var(--primary-green); } .fm-listening { color: var(--primary-yellow); } .fm-unavailable { color: var(--primary-red); } /* Bluetooth Status Styles */ .bluetooth-connected { color: var(--primary-green); } .bluetooth-connecting { color: var(--primary-yellow); } .bluetooth-disconnected { color: var(--primary-red); } .bluetooth-available { color: var(--primary-blue); } /* Walkie Talkie Styles */ .walkie-card { transition: all 0.3s ease; } .walkie-card:hover { transform: translateY(-2px); box-shadow: 0 10px 25px rgba(0, 0, 0, 0.3); } .bluetooth-wave { position: relative; overflow: hidden; } .bluetooth-wave::before { content: ''; position: absolute; top: 50%; left: 50%; width: 100%; height: 100%; background: radial-gradient(circle, rgba(59, 130, 246, 0.3) 0%, transparent 70%); border-radius: 50%; transform: translate(-50%, -50%); animation: bluetoothPulse 2s infinite; } @keyframes bluetoothPulse { 0% { width: 0%; height: 0%; opacity: 1; } 100% { width: 100%; height: 100%; opacity: 0; } } /* AI Insight Cards */ .ai-insight-card { background: rgba(139, 92, 246, 0.1); border: 1px solid rgba(139, 92, 246, 0.3); } .prediction-badge { background: rgba(16, 185, 129, 0.1); border: 1px solid rgba(16, 185, 129, 0.3); } .anomaly-badge { background: rgba(239, 68, 68, 0.1); border: 1px solid rgba(239, 68, 68, 0.3); } /* Map Gradient */ .gradient-map { background: linear-gradient(135deg, #e0f7fa 0%, #b2ebf2 50%, #80deea 100%); } /* Professional Shadows */ .shadow-professional { box-shadow: 0 10px 25px rgba(0, 0, 0, 0.1), 0 4px 6px rgba(0, 0, 0, 0.05); } .shadow-professional-hover:hover { box-shadow: 0 20px 40px rgba(0, 0, 0, 0.15), 0 8px 16px rgba(0, 0, 0, 0.1); } /* Print Styles */ @media print { .no-print { display: none !important; } body { background: white !important; color: black !important; } }