/* 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 */ --intel-darkest: #0A0E27; --intel-dark: #131937; --intel-medium: #1E2749; --intel-accent: #00D9FF; --intel-warning: #FFB800; --intel-danger: #FF3366; --intel-success: #00FF88; --intel-grid: rgba(0, 217, 255, 0.1); /* Text Colors with proper contrast */ --text-primary: #FFFFFF; --text-secondary: #E4E8F1; --text-tertiary: #B8C5D9; --text-muted: #8A98B0; } body { background-color: #0A0E27; color: #E4E8F1; 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(0, 217, 255, 0.03) 1px, transparent 1px), linear-gradient(90deg, rgba(0, 217, 255, 0.03) 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(0, 217, 255, 0.3); } .glow-border::before { content: ''; position: absolute; top: -1px; left: -1px; right: -1px; bottom: -1px; background: linear-gradient(45deg, transparent, rgba(0, 217, 255, 0.1), 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(0, 217, 255, 0.8), 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 STRONG depth */ .intel-card { background: linear-gradient(135deg, rgba(19, 25, 55, 1) 0%, rgba(30, 39, 73, 0.95) 50%, rgba(19, 25, 55, 1) 100%); border: 2px solid rgba(0, 217, 255, 0.4); transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); position: relative; overflow: hidden; box-shadow: 0 8px 16px rgba(0, 0, 0, 0.6), 0 4px 8px rgba(0, 0, 0, 0.4), inset 0 2px 0 rgba(0, 217, 255, 0.15), inset 0 -2px 0 rgba(0, 217, 255, 0.05); } .intel-card::after { content: ''; position: absolute; top: 0; left: -100%; width: 100%; height: 100%; background: linear-gradient(90deg, transparent, rgba(0, 217, 255, 0.15), transparent ); transition: left 0.5s; pointer-events: none; } .intel-card:hover { border-color: rgba(0, 217, 255, 0.8); transform: translateY(-3px); box-shadow: 0 16px 32px rgba(0, 217, 255, 0.3), 0 8px 16px rgba(0, 0, 0, 0.5), inset 0 2px 0 rgba(0, 217, 255, 0.3), 0 0 40px rgba(0, 217, 255, 0.2); } .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(255, 51, 102, 0.3) 0%, rgba(255, 51, 102, 0.2) 100%); border-color: rgba(255, 51, 102, 0.8); color: #FF6B94; text-shadow: 0 0 10px rgba(255, 51, 102, 0.8); } .status-critical::before { background: #FF3366; box-shadow: 0 0 16px #FF3366, 0 0 8px #FF3366; } .status-high { background: linear-gradient(135deg, rgba(255, 184, 0, 0.3) 0%, rgba(255, 184, 0, 0.2) 100%); border-color: rgba(255, 184, 0, 0.8); color: #FFD966; text-shadow: 0 0 10px rgba(255, 184, 0, 0.8); } .status-high::before { background: #FFB800; box-shadow: 0 0 16px #FFB800, 0 0 8px #FFB800; } .status-medium { background: linear-gradient(135deg, rgba(0, 217, 255, 0.3) 0%, rgba(0, 217, 255, 0.2) 100%); border-color: rgba(0, 217, 255, 0.8); color: #66E5FF; text-shadow: 0 0 10px rgba(0, 217, 255, 0.8); } .status-medium::before { background: #00D9FF; box-shadow: 0 0 16px #00D9FF, 0 0 8px #00D9FF; } .status-low { background: linear-gradient(135deg, rgba(0, 255, 136, 0.3) 0%, rgba(0, 255, 136, 0.2) 100%); border-color: rgba(0, 255, 136, 0.8); color: #66FFB3; text-shadow: 0 0 10px rgba(0, 255, 136, 0.8); } .status-low::before { background: #00FF88; box-shadow: 0 0 16px #00FF88, 0 0 8px #00FF88; } /* 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(0, 217, 255, 0.2) 0%, rgba(0, 217, 255, 0.15) 100%); border-color: #00D9FF; color: #00D9FF; text-shadow: 0 0 10px rgba(0, 217, 255, 0.3); } .intel-button-primary:hover { background: linear-gradient(135deg, rgba(0, 217, 255, 0.3) 0%, rgba(0, 217, 255, 0.25) 100%); box-shadow: 0 0 25px rgba(0, 217, 255, 0.4), 0 4px 12px rgba(0, 0, 0, 0.4), inset 0 1px 0 rgba(255, 255, 255, 0.15); transform: translateY(-1px); } .intel-button-danger { background: linear-gradient(135deg, rgba(255, 51, 102, 0.2) 0%, rgba(255, 51, 102, 0.15) 100%); border-color: #FF3366; color: #FF3366; text-shadow: 0 0 10px rgba(255, 51, 102, 0.3); } .intel-button-danger:hover { background: linear-gradient(135deg, rgba(255, 51, 102, 0.3) 0%, rgba(255, 51, 102, 0.25) 100%); box-shadow: 0 0 25px rgba(255, 51, 102, 0.4), 0 4px 12px rgba(0, 0, 0, 0.4), inset 0 1px 0 rgba(255, 255, 255, 0.15); transform: translateY(-1px); } .intel-button-success { background: linear-gradient(135deg, rgba(0, 255, 136, 0.2) 0%, rgba(0, 255, 136, 0.15) 100%); border-color: #00FF88; color: #00FF88; text-shadow: 0 0 10px rgba(0, 255, 136, 0.3); } .intel-button-success:hover { background: linear-gradient(135deg, rgba(0, 255, 136, 0.3) 0%, rgba(0, 255, 136, 0.25) 100%); box-shadow: 0 0 25px rgba(0, 255, 136, 0.4), 0 4px 12px rgba(0, 0, 0, 0.4), inset 0 1px 0 rgba(255, 255, 255, 0.15); transform: translateY(-1px); } /* Input fields with better contrast */ .intel-input { background: rgba(19, 25, 55, 0.7); border: 1px solid rgba(0, 217, 255, 0.3); color: #FFFFFF; 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.3), 0 1px 0 rgba(255, 255, 255, 0.05); } .intel-input:focus { outline: none; border-color: #00D9FF; box-shadow: 0 0 0 2px rgba(0, 217, 255, 0.2), inset 0 2px 4px rgba(0, 0, 0, 0.2), 0 4px 12px rgba(0, 217, 255, 0.15); background: rgba(19, 25, 55, 0.9); } .intel-input::placeholder { color: rgba(228, 232, 241, 0.4); } /* Stat cards with STRONG depth and glow */ .stat-card { background: linear-gradient(135deg, rgba(19, 25, 55, 1) 0%, rgba(30, 39, 73, 0.95) 100%); border: 2px solid rgba(0, 217, 255, 0.5); border-radius: 0.5rem; padding: 1rem; position: relative; overflow: hidden; box-shadow: 0 6px 16px rgba(0, 0, 0, 0.5), 0 3px 8px rgba(0, 0, 0, 0.3), inset 0 2px 0 rgba(0, 217, 255, 0.2); transition: all 0.3s ease; } .stat-card:hover { transform: translateY(-3px); border-color: rgba(0, 217, 255, 0.8); box-shadow: 0 12px 28px rgba(0, 217, 255, 0.25), 0 6px 16px rgba(0, 0, 0, 0.5), inset 0 2px 0 rgba(0, 217, 255, 0.3), 0 0 30px rgba(0, 217, 255, 0.2); } .stat-card::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: linear-gradient(90deg, transparent, #00D9FF, transparent); opacity: 0.9; box-shadow: 0 0 12px rgba(0, 217, 255, 0.7); } /* 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: #131937; } ::-webkit-scrollbar-thumb { background: rgba(0, 217, 255, 0.3); border-radius: 4px; } ::-webkit-scrollbar-thumb:hover { background: rgba(0, 217, 255, 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(0, 217, 255, 0.1); border-top-color: #00D9FF; 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, #1E2749 0%, #2A3458 100%); border: 1px solid rgba(0, 217, 255, 0.4); 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: #FFFFFF; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4), 0 0 20px rgba(0, 217, 255, 0.2); } .tooltip:hover::after { opacity: 1; } /* Enhanced heading glow */ h1.text-intel-accent, h2.text-intel-accent, h3.text-intel-accent { text-shadow: 0 0 20px rgba(0, 217, 255, 0.4), 0 0 40px rgba(0, 217, 255, 0.2); } /* Enhanced border glow for featured cards */ .border-intel-accent { box-shadow: 0 0 15px rgba(0, 217, 255, 0.15); } .border-intel-warning { box-shadow: 0 0 15px rgba(255, 184, 0, 0.15); } .border-intel-danger { box-shadow: 0 0 15px rgba(255, 51, 102, 0.15); } /* 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(10, 14, 39, 0.95) 0%, rgba(19, 25, 55, 0.9) 100%); border: 2px solid rgba(0, 217, 255, 0.3); border-radius: 0.5rem; padding: 1rem; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.5), inset 0 1px 0 rgba(0, 217, 255, 0.1); transition: all 0.3s ease; } .vendor-card:hover { border-color: rgba(0, 217, 255, 0.6); box-shadow: 0 8px 20px rgba(0, 217, 255, 0.2), 0 4px 12px rgba(0, 0, 0, 0.6), inset 0 1px 0 rgba(0, 217, 255, 0.2); transform: translateX(4px); } /* Document items - recessed appearance */ .document-item { background: linear-gradient(135deg, rgba(10, 14, 39, 1) 0%, rgba(13, 17, 43, 0.98) 100%); border: 1px solid rgba(0, 217, 255, 0.25); border-radius: 0.375rem; padding: 0.75rem; box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.4), 0 1px 2px rgba(0, 0, 0, 0.3); transition: all 0.2s ease; } .document-item:hover { border-color: rgba(0, 217, 255, 0.5); background: linear-gradient(135deg, rgba(13, 17, 43, 1) 0%, rgba(19, 25, 55, 0.95) 100%); box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.3), 0 2px 8px rgba(0, 217, 255, 0.15); }