Spaces:
Running
Running
| /* Global styles */ | |
| * { | |
| box-sizing: border-box; | |
| } | |
| body { | |
| font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; | |
| line-height: 1.6; | |
| } | |
| /* Smooth scrolling */ | |
| html { | |
| scroll-behavior: smooth; | |
| } | |
| /* Custom animations */ | |
| @keyframes fadeInUp { | |
| from { | |
| opacity: 0; | |
| transform: translateY(20px); | |
| } | |
| to { | |
| opacity: 1; | |
| transform: translateY(0); | |
| } | |
| } | |
| .animate-fade-in-up { | |
| animation: fadeInUp 0.6s ease-out; | |
| } | |
| /* Live feed animation */ | |
| @keyframes pulse { | |
| 0%, 100% { | |
| opacity: 1; | |
| } | |
| 50% { | |
| opacity: 0.5; | |
| } | |
| } | |
| .live-indicator { | |
| animation: pulse 2s infinite; | |
| } | |
| /* Custom scrollbar */ | |
| ::-webkit-scrollbar { | |
| width: 6px; | |
| } | |
| ::-webkit-scrollbar-track { | |
| background: #f1f1f1; | |
| } | |
| ::-webkit-scrollbar-thumb { | |
| background: #c1c1c1; | |
| border-radius: 3px; | |
| } | |
| ::-webkit-scrollbar-thumb:hover { | |
| background: #a8a8a8; | |
| } | |
| /* Loading spinner */ | |
| .spinner { | |
| border: 2px solid #f3f3f3; | |
| border-top: 2px solid #3b82f6; | |
| border-radius: 50%; | |
| width: 20px; | |
| height: 20px; | |
| animation: spin 1s linear infinite; | |
| } | |
| @keyframes spin { | |
| 0% { transform: rotate(0deg); } | |
| 100% { transform: rotate(360deg); } | |
| } | |
| /* File drop zone styles */ | |
| .drop-zone { | |
| border: 2px dashed #d1d5db; | |
| transition: all 0.3s ease; | |
| } | |
| .drop-zone.dragover { | |
| border-color: #3b82f6; | |
| background-color: #eff6ff; | |
| } | |
| .drop-zone.processing { | |
| border-color: #10b981; | |
| background-color: #ecfdf5; | |
| } | |
| /* Status indicators */ | |
| .status-completed { | |
| color: #10b981; | |
| } | |
| .status-processing { | |
| color: #f59e0b; | |
| } | |
| .status-failed { | |
| color: #ef4444; | |
| } | |
| /* Threat highlighting */ | |
| .threat-zero-width { | |
| background-color: #fee2e2; | |
| color: #dc2626; | |
| padding: 1px 2px; | |
| border-radius: 2px; | |
| } | |
| .threat-js { | |
| background-color: #fef3c7; | |
| color: #d97706; | |
| padding: 1px 2px; | |
| border-radius: 2px; | |
| } | |
| .threat-stego { | |
| background-color: #e0e7ff; | |
| color: #6366f1; | |
| padding: 1px 2px; | |
| border-radius: 2px; | |
| } | |
| /* Sparkline styles */ | |
| .sparkline { | |
| width: 100%; | |
| height: 40px; | |
| } | |
| /* Responsive adjustments */ | |
| @media (max-width: 768px) { | |
| .hero h1 { | |
| font-size: 2.5rem; | |
| } | |
| .pricing-grid { | |
| grid-template-columns: 1fr; | |
| } | |
| .dashboard-layout { | |
| flex-direction: column; | |
| } | |
| .sidebar { | |
| width: 100%; | |
| order: 2; | |
| } | |
| .main-panel { | |
| order: 1; | |
| } | |
| } | |
| /* Print styles */ | |
| @media print { | |
| .no-print { | |
| display: none ; | |
| } | |
| } | |
| /* Focus styles for accessibility */ | |
| button:focus, | |
| a:focus, | |
| input:focus, | |
| textarea:focus { | |
| outline: 2px solid #3b82f6; | |
| outline-offset: 2px; | |
| } | |
| /* Custom button hover effects */ | |
| .btn-primary { | |
| background: linear-gradient(135deg, #3b82f6 0%, #2563eb 100%); | |
| transition: all 0.3s ease; | |
| } | |
| .btn-primary:hover { | |
| transform: translateY(-1px); | |
| box-shadow: 0 10px 25px rgba(59, 130, 246, 0.3); | |
| } | |
| /* Table row hover effects */ | |
| .table-row:hover { | |
| background-color: #f9fafb; | |
| } | |
| /* Modal styles */ | |
| .modal-overlay { | |
| background-color: rgba(0, 0, 0, 0.5); | |
| backdrop-filter: blur(4px); | |
| } | |
| .modal-content { | |
| max-height: 90vh; | |
| overflow-y: auto; | |
| } | |
| /* Notification styles */ | |
| .notification { | |
| animation: slideInRight 0.3s ease-out; | |
| } | |
| @keyframes slideInRight { | |
| from { | |
| transform: translateX(100%); | |
| opacity: 0; | |
| } | |
| to { | |
| transform: translateX(0); | |
| opacity: 1; | |
| } | |
| } | |
| /* Loading state styles */ | |
| .skeleton { | |
| background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%); | |
| background-size: 200% 100%; | |
| animation: loading 1.5s infinite; | |
| } | |
| @keyframes loading { | |
| 0% { | |
| background-position: 200% 0; | |
| } | |
| 100% { | |
| background-position: -200% 0; | |
| } | |
| } |