/* Tactical Intelligence Dashboard Styles */ /* IMPORTANT: This file MUST be imported in App.js */ * { font-family: 'Outfit', system-ui, sans-serif; } /* Pulse animation for glowing dots - used by inline styles */ @keyframes pulse { 0%, 100% { opacity: 1; transform: scale(1); } 50% { opacity: 0.7; transform: scale(1.2); } } :root { /* Base Colors - Modern Slate Foundation */ --intel-darkest: #0F172A; --intel-dark: #1E293B; --intel-medium: #334155; --intel-accent: #0EA5E9; /* Sky Blue - professional cyan */ --intel-warning: #F59E0B; /* Amber - sophisticated warning */ --intel-danger: #EF4444; /* Modern Red - urgent but refined */ --intel-success: #10B981; /* Emerald - professional green */ --intel-grid: rgba(14, 165, 233, 0.08); /* Text Colors with proper contrast */ --text-primary: #F8FAFC; --text-secondary: #E2E8F0; --text-tertiary: #CBD5E1; --text-muted: #94A3B8; } body { background-color: #0F172A; color: #E2E8F0; overflow-x: hidden; } /* Utility Classes for Tailwind-style usage */ .bg-intel-darkest { background-color: var(--intel-darkest); } .bg-intel-dark { background-color: var(--intel-dark); } .bg-intel-medium { background-color: var(--intel-medium); } .text-intel-accent { color: var(--intel-accent); } .text-intel-warning { color: var(--intel-warning); } .text-intel-danger { color: var(--intel-danger); } .text-intel-success { color: var(--intel-success); } .border-intel-accent { border-color: var(--intel-accent); } .border-intel-warning { border-color: var(--intel-warning); } .border-intel-danger { border-color: var(--intel-danger); } .border-intel-grid { border-color: var(--intel-grid); } /* Grid background effect */ .grid-bg { background-image: linear-gradient(rgba(14, 165, 233, 0.025) 1px, transparent 1px), linear-gradient(90deg, rgba(14, 165, 233, 0.025) 1px, transparent 1px); background-size: 20px 20px; } /* Monospace font for technical data */ .mono { font-family: 'JetBrains Mono', monospace; } /* Glowing border effect */ .glow-border { position: relative; border: 1px solid rgba(14, 165, 233, 0.3); } .glow-border::before { content: ''; position: absolute; top: -1px; left: -1px; right: -1px; bottom: -1px; background: linear-gradient(45deg, transparent, rgba(14, 165, 233, 0.08), transparent); border-radius: inherit; opacity: 0; transition: opacity 0.3s; pointer-events: none; z-index: -1; } .glow-border:hover::before { opacity: 1; } /* Scanning line animation */ .scan-line { position: absolute; top: 0; left: 0; right: 0; height: 2px; background: linear-gradient(90deg, transparent, rgba(14, 165, 233, 0.6), transparent ); animation: scan 3s ease-in-out infinite; pointer-events: none; } @keyframes scan { 0%, 100% { transform: translateY(-100%); opacity: 0; } 50% { transform: translateY(2000%); opacity: 0.5; } } /* Card hover effects with refined depth */ .intel-card { background: linear-gradient(135deg, rgba(30, 41, 59, 0.95) 0%, rgba(51, 65, 85, 0.9) 50%, rgba(30, 41, 59, 0.95) 100%); border: 1.5px solid rgba(14, 165, 233, 0.3); transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); position: relative; overflow: hidden; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4), 0 2px 6px rgba(0, 0, 0, 0.3), inset 0 1px 0 rgba(14, 165, 233, 0.1), inset 0 -1px 0 rgba(14, 165, 233, 0.05); } .intel-card::after { content: ''; position: absolute; top: 0; left: -100%; width: 100%; height: 100%; background: linear-gradient(90deg, transparent, rgba(14, 165, 233, 0.08), transparent ); transition: left 0.5s; pointer-events: none; } .intel-card:hover { border-color: rgba(14, 165, 233, 0.5); transform: translateY(-2px); box-shadow: 0 8px 24px rgba(14, 165, 233, 0.15), 0 4px 12px rgba(0, 0, 0, 0.4), inset 0 1px 0 rgba(14, 165, 233, 0.2), 0 0 30px rgba(14, 165, 233, 0.1); } .intel-card:hover::after { left: 100%; } /* Status badges with STRONG glow and contrast */ .status-badge { position: relative; font-family: 'JetBrains Mono', monospace; font-size: 0.75rem; font-weight: 700; letter-spacing: 0.5px; text-transform: uppercase; padding: 0.375rem 0.875rem; border-radius: 0.375rem; border: 2px solid; display: inline-flex; align-items: center; gap: 0.5rem; box-shadow: 0 4px 8px rgba(0, 0, 0, 0.4); } .status-badge::before { content: ''; width: 8px; height: 8px; border-radius: 50%; animation: pulse-glow 2s ease-in-out infinite; } .status-critical { background: linear-gradient(135deg, rgba(239, 68, 68, 0.2) 0%, rgba(239, 68, 68, 0.15) 100%); border-color: rgba(239, 68, 68, 0.6); color: #FCA5A5; text-shadow: 0 0 8px rgba(239, 68, 68, 0.4); } .status-critical::before { background: #EF4444; box-shadow: 0 0 12px rgba(239, 68, 68, 0.6), 0 0 6px rgba(239, 68, 68, 0.4); } .status-high { background: linear-gradient(135deg, rgba(245, 158, 11, 0.2) 0%, rgba(245, 158, 11, 0.15) 100%); border-color: rgba(245, 158, 11, 0.6); color: #FCD34D; text-shadow: 0 0 8px rgba(245, 158, 11, 0.4); } .status-high::before { background: #F59E0B; box-shadow: 0 0 12px rgba(245, 158, 11, 0.6), 0 0 6px rgba(245, 158, 11, 0.4); } .status-medium { background: linear-gradient(135deg, rgba(14, 165, 233, 0.2) 0%, rgba(14, 165, 233, 0.15) 100%); border-color: rgba(14, 165, 233, 0.6); color: #7DD3FC; text-shadow: 0 0 8px rgba(14, 165, 233, 0.4); } .status-medium::before { background: #0EA5E9; box-shadow: 0 0 12px rgba(14, 165, 233, 0.6), 0 0 6px rgba(14, 165, 233, 0.4); } .status-low { background: linear-gradient(135deg, rgba(16, 185, 129, 0.2) 0%, rgba(16, 185, 129, 0.15) 100%); border-color: rgba(16, 185, 129, 0.6); color: #6EE7B7; text-shadow: 0 0 8px rgba(16, 185, 129, 0.4); } .status-low::before { background: #10B981; box-shadow: 0 0 12px rgba(16, 185, 129, 0.6), 0 0 6px rgba(16, 185, 129, 0.4); } /* Button styles with depth and glow */ .intel-button { position: relative; font-family: 'JetBrains Mono', monospace; font-weight: 600; letter-spacing: 0.5px; text-transform: uppercase; font-size: 0.875rem; padding: 0.625rem 1.25rem; border-radius: 0.375rem; transition: all 0.3s; border: 1px solid; overflow: hidden; box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.1); } .intel-button::before { content: ''; position: absolute; top: 50%; left: 50%; width: 0; height: 0; border-radius: 50%; background: rgba(255, 255, 255, 0.15); transform: translate(-50%, -50%); transition: width 0.5s, height 0.5s; } .intel-button:hover::before { width: 300px; height: 300px; } .intel-button-primary { background: linear-gradient(135deg, rgba(14, 165, 233, 0.15) 0%, rgba(14, 165, 233, 0.1) 100%); border-color: #0EA5E9; color: #38BDF8; text-shadow: 0 0 6px rgba(14, 165, 233, 0.2); } .intel-button-primary:hover { background: linear-gradient(135deg, rgba(14, 165, 233, 0.25) 0%, rgba(14, 165, 233, 0.2) 100%); box-shadow: 0 0 20px rgba(14, 165, 233, 0.25), 0 4px 12px rgba(0, 0, 0, 0.4), inset 0 1px 0 rgba(255, 255, 255, 0.1); transform: translateY(-1px); } .intel-button-danger { background: linear-gradient(135deg, rgba(239, 68, 68, 0.15) 0%, rgba(239, 68, 68, 0.1) 100%); border-color: #EF4444; color: #F87171; text-shadow: 0 0 6px rgba(239, 68, 68, 0.2); } .intel-button-danger:hover { background: linear-gradient(135deg, rgba(239, 68, 68, 0.25) 0%, rgba(239, 68, 68, 0.2) 100%); box-shadow: 0 0 20px rgba(239, 68, 68, 0.25), 0 4px 12px rgba(0, 0, 0, 0.4), inset 0 1px 0 rgba(255, 255, 255, 0.1); transform: translateY(-1px); } .intel-button-success { background: linear-gradient(135deg, rgba(16, 185, 129, 0.15) 0%, rgba(16, 185, 129, 0.1) 100%); border-color: #10B981; color: #34D399; text-shadow: 0 0 6px rgba(16, 185, 129, 0.2); } .intel-button-success:hover { background: linear-gradient(135deg, rgba(16, 185, 129, 0.25) 0%, rgba(16, 185, 129, 0.2) 100%); box-shadow: 0 0 20px rgba(16, 185, 129, 0.25), 0 4px 12px rgba(0, 0, 0, 0.4), inset 0 1px 0 rgba(255, 255, 255, 0.1); transform: translateY(-1px); } /* Input fields with better contrast */ .intel-input { background: rgba(30, 41, 59, 0.6); border: 1px solid rgba(14, 165, 233, 0.25); color: #F8FAFC; padding: 0.625rem 1rem; border-radius: 0.375rem; font-family: 'JetBrains Mono', monospace; font-size: 0.875rem; transition: all 0.3s; box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.2), 0 1px 0 rgba(255, 255, 255, 0.03); } .intel-input:focus { outline: none; border-color: #0EA5E9; box-shadow: 0 0 0 2px rgba(14, 165, 233, 0.15), inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 4px 12px rgba(14, 165, 233, 0.1); background: rgba(30, 41, 59, 0.8); } .intel-input::placeholder { color: rgba(226, 232, 240, 0.35); } /* Stat cards with refined depth */ .stat-card { background: linear-gradient(135deg, rgba(30, 41, 59, 0.95) 0%, rgba(51, 65, 85, 0.9) 100%); border: 1.5px solid rgba(14, 165, 233, 0.35); border-radius: 0.5rem; padding: 1rem; position: relative; overflow: hidden; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4), 0 2px 6px rgba(0, 0, 0, 0.3), inset 0 1px 0 rgba(14, 165, 233, 0.15); transition: all 0.3s ease; } .stat-card:hover { transform: translateY(-2px); border-color: rgba(14, 165, 233, 0.5); box-shadow: 0 8px 20px rgba(14, 165, 233, 0.15), 0 4px 12px rgba(0, 0, 0, 0.4), inset 0 1px 0 rgba(14, 165, 233, 0.2), 0 0 24px rgba(14, 165, 233, 0.1); } .stat-card::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 2px; background: linear-gradient(90deg, transparent, #0EA5E9, transparent); opacity: 0.8; box-shadow: 0 0 8px rgba(14, 165, 233, 0.5); } /* Modal overlay with proper backdrop */ .modal-overlay { background: rgba(10, 14, 39, 0.97); backdrop-filter: blur(12px); } /* Modal card enhancements */ .intel-card.modal-card { box-shadow: 0 20px 60px rgba(0, 0, 0, 0.6), 0 10px 30px rgba(0, 217, 255, 0.1), inset 0 1px 0 rgba(255, 255, 255, 0.1); } /* Scrollbar styling */ ::-webkit-scrollbar { width: 8px; height: 8px; } ::-webkit-scrollbar-track { background: #1E293B; } ::-webkit-scrollbar-thumb { background: rgba(14, 165, 233, 0.3); border-radius: 4px; } ::-webkit-scrollbar-thumb:hover { background: rgba(14, 165, 233, 0.5); } /* Fade in animation */ .fade-in { animation: fade-in 0.5s ease-out; } @keyframes fade-in { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } /* Pulse glow animation */ @keyframes pulse-glow { 0%, 100% { box-shadow: 0 0 5px currentColor; } 50% { box-shadow: 0 0 15px currentColor; } } /* Data table styling */ .data-row { border-bottom: 1px solid rgba(0, 217, 255, 0.1); transition: all 0.2s; } .data-row:hover { background: rgba(0, 217, 255, 0.06); border-bottom-color: rgba(0, 217, 255, 0.3); box-shadow: 0 2px 8px rgba(0, 217, 255, 0.1); } /* Vendor entry cards - high contrast and depth */ .vendor-card { background: linear-gradient(135deg, rgba(19, 25, 55, 0.9) 0%, rgba(30, 39, 73, 0.8) 100%); border: 1px solid rgba(0, 217, 255, 0.25); border-radius: 0.5rem; padding: 1rem; transition: all 0.3s ease; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.05); } .vendor-card:hover { background: linear-gradient(135deg, rgba(19, 25, 55, 0.95) 0%, rgba(30, 39, 73, 0.9) 100%); border-color: rgba(0, 217, 255, 0.4); box-shadow: 0 4px 16px rgba(0, 217, 255, 0.15), 0 2px 8px rgba(0, 0, 0, 0.4), inset 0 1px 0 rgba(255, 255, 255, 0.08); transform: translateY(-2px); } /* Document list items with depth */ .document-item { background: linear-gradient(135deg, rgba(10, 14, 39, 0.9) 0%, rgba(19, 25, 55, 0.8) 100%); border: 1px solid rgba(0, 217, 255, 0.15); border-radius: 0.375rem; padding: 0.75rem; transition: all 0.3s ease; box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.03); } .document-item:hover { background: linear-gradient(135deg, rgba(10, 14, 39, 0.95) 0%, rgba(30, 39, 73, 0.9) 100%); border-color: rgba(0, 217, 255, 0.3); box-shadow: 0 4px 12px rgba(0, 217, 255, 0.12), 0 2px 6px rgba(0, 0, 0, 0.4), inset 0 1px 0 rgba(255, 255, 255, 0.06); transform: translateY(-1px); } /* JIRA ticket items with proper contrast */ .jira-ticket-item { background: linear-gradient(135deg, rgba(19, 25, 55, 0.85) 0%, rgba(30, 39, 73, 0.75) 100%); border: 1px solid rgba(255, 184, 0, 0.2); border-radius: 0.375rem; padding: 0.75rem; transition: all 0.3s ease; box-shadow: 0 2px 6px rgba(0, 0, 0, 0.25), inset 0 1px 0 rgba(255, 255, 255, 0.04); } .jira-ticket-item:hover { background: linear-gradient(135deg, rgba(19, 25, 55, 0.95) 0%, rgba(30, 39, 73, 0.85) 100%); border-color: rgba(255, 184, 0, 0.35); box-shadow: 0 4px 12px rgba(255, 184, 0, 0.15), 0 2px 6px rgba(0, 0, 0, 0.35), inset 0 1px 0 rgba(255, 255, 255, 0.06); } /* CVE Header card with depth */ .cve-header { background: linear-gradient(135deg, rgba(19, 25, 55, 0.95) 0%, rgba(30, 39, 73, 0.9) 100%); transition: all 0.3s ease; } .cve-header:hover { background: linear-gradient(135deg, rgba(30, 39, 73, 0.95) 0%, rgba(42, 52, 88, 0.9) 100%); } /* Loading spinner */ .loading-spinner { border: 2px solid rgba(14, 165, 233, 0.1); border-top-color: #0EA5E9; border-radius: 50%; animation: spin 1s linear infinite; } @keyframes spin { to { transform: rotate(360deg); } } /* Tooltip with enhanced styling */ .tooltip { position: relative; } .tooltip::after { content: attr(data-tooltip); position: absolute; bottom: 100%; left: 50%; transform: translateX(-50%); padding: 0.5rem 0.75rem; background: linear-gradient(135deg, #334155 0%, #475569 100%); border: 1px solid rgba(14, 165, 233, 0.3); border-radius: 0.25rem; font-size: 0.75rem; white-space: nowrap; opacity: 0; pointer-events: none; transition: opacity 0.3s; margin-bottom: 0.5rem; font-family: 'JetBrains Mono', monospace; color: #F8FAFC; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4), 0 0 16px rgba(14, 165, 233, 0.15); } .tooltip:hover::after { opacity: 1; } /* Enhanced heading glow */ h1.text-intel-accent, h2.text-intel-accent, h3.text-intel-accent { text-shadow: 0 0 16px rgba(14, 165, 233, 0.3), 0 0 32px rgba(14, 165, 233, 0.15); } /* Enhanced border glow for featured cards */ .border-intel-accent { box-shadow: 0 0 12px rgba(14, 165, 233, 0.12); } .border-intel-warning { box-shadow: 0 0 12px rgba(245, 158, 11, 0.12); } .border-intel-danger { box-shadow: 0 0 12px rgba(239, 68, 68, 0.12); } /* Quick lookup section enhancement */ .quick-lookup-card { background: linear-gradient(135deg, rgba(19, 25, 55, 0.95) 0%, rgba(30, 39, 73, 0.9) 100%); box-shadow: 0 4px 16px rgba(0, 0, 0, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.05), 0 0 40px rgba(0, 217, 255, 0.1); } /* Vendor Cards - nested depth */ .vendor-card { background: linear-gradient(135deg, rgba(15, 23, 42, 0.95) 0%, rgba(30, 41, 59, 0.9) 100%); border: 1.5px solid rgba(14, 165, 233, 0.25); border-radius: 0.5rem; padding: 1rem; box-shadow: 0 3px 10px rgba(0, 0, 0, 0.4), inset 0 1px 0 rgba(14, 165, 233, 0.08); transition: all 0.3s ease; } .vendor-card:hover { border-color: rgba(14, 165, 233, 0.4); box-shadow: 0 6px 16px rgba(14, 165, 233, 0.12), 0 3px 10px rgba(0, 0, 0, 0.5), inset 0 1px 0 rgba(14, 165, 233, 0.15); transform: translateX(4px); } /* Document items - recessed appearance */ .document-item { background: linear-gradient(135deg, rgba(15, 23, 42, 1) 0%, rgba(20, 28, 48, 0.98) 100%); border: 1px solid rgba(14, 165, 233, 0.2); border-radius: 0.375rem; padding: 0.75rem; box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.3), 0 1px 2px rgba(0, 0, 0, 0.25); transition: all 0.2s ease; } .document-item:hover { border-color: rgba(14, 165, 233, 0.35); background: linear-gradient(135deg, rgba(20, 28, 48, 1) 0%, rgba(30, 41, 59, 0.95) 100%); box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.25), 0 2px 8px rgba(14, 165, 233, 0.1); }