@import url("https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&family=Outfit:wght@300;400;500;600;700;800&family=Plus+Jakarta+Sans:wght@300;400;500;600;700;800&display=swap"); @import "tailwindcss"; :root { /* Ultra-Premium Frosted Glassmorphism Theme Tokens */ --glass-bg: rgba(255, 255, 255, 0.035); --glass-bg-hover: rgba(255, 255, 255, 0.07); --glass-border: rgba(255, 255, 255, 0.09); --glass-border-hover: rgba(255, 255, 255, 0.20); --glass-shadow: 0 16px 48px 0 rgba(0, 0, 0, 0.55), inset 0 1px 0 0 rgba(255, 255, 255, 0.16); --glass-blur: 28px; /* Harmonized Accent Colors (Completely Blue/Indigo Free) */ --accent-blue: #10b981; /* High-end Emerald Green */ --accent-purple: #14b8a6; /* Clean Teal highlight */ --accent-pink: #f43f5e; --accent-amber: #f59e0b; --accent-emerald: #10b981; /* Subtle Glowing Shadows */ --glow-blue: 0 0 24px rgba(16, 185, 129, 0.25); --glow-purple: 0 0 24px rgba(20, 184, 166, 0.25); --glow-pink: 0 0 24px rgba(244, 63, 94, 0.25); --glow-emerald: 0 0 24px rgba(16, 185, 129, 0.25); /* Obsidian Pitch Black backgrounds */ --bg-primary: #000000; --bg-secondary: #05050a; --text-primary: #f8fafc; --text-secondary: #cbd5e1; --text-muted: #64748b; --sidebar-width: 270px; --sidebar-collapsed: 76px; --header-height: 72px; --radius-sm: 8px; --radius-md: 12px; --radius-lg: 16px; --radius-xl: 20px; --radius-2xl: 24px; } *, *::before, *::after { box-sizing: border-box; } html { scroll-behavior: smooth; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } body { margin: 0; padding: 0; font-family: "Plus Jakarta Sans", "Outfit", "Inter", system-ui, -apple-system, sans-serif; background: var(--bg-primary); color: var(--text-primary); min-height: 100vh; overflow-x: hidden; } h1, h2, h3, h4, h5, h6 { font-family: "Outfit", "Plus Jakarta Sans", sans-serif; letter-spacing: -0.025em; } /* Animated Colored Gradient Dark Theme */ .animated-bg { position: fixed; inset: 0; z-index: 0; overflow: hidden; background: radial-gradient(circle at 50% 50%, rgba(16, 185, 129, 0.08) 0%, transparent 65%), #000000; } .animated-bg::before, .animated-bg::after { content: ""; position: absolute; border-radius: 50%; filter: blur(120px); mix-blend-mode: screen; pointer-events: none; } /* Deep Violet Orb */ .animated-bg::before { width: 80vw; height: 80vh; background: radial-gradient(circle, rgba(139, 92, 246, 0.22) 0%, transparent 65%); top: -10%; left: -10%; animation: float-orb-1 28s infinite alternate ease-in-out; } /* Ocean Blue Orb */ .animated-bg::after { width: 85vw; height: 85vh; background: radial-gradient(circle, rgba(56, 189, 248, 0.2) 0%, transparent 65%); bottom: -10%; right: -10%; animation: float-orb-2 32s infinite alternate-reverse ease-in-out; } @keyframes float-orb-1 { 0% { transform: translate(0, 0) scale(1); } 100% { transform: translate(15vw, 15vh) scale(1.15); } } @keyframes float-orb-2 { 0% { transform: translate(0, 0) scale(1); } 100% { transform: translate(-15vw, -15vh) scale(1.1); } } /* Tactile Specular Liquid Glass Panel */ .glass-panel { background: rgba(255, 255, 255, 0.015); backdrop-filter: blur(var(--glass-blur)) saturate(150%); -webkit-backdrop-filter: blur(var(--glass-blur)) saturate(150%); border: 1px solid rgba(255, 255, 255, 0.08); box-shadow: 0 16px 40px rgba(0, 0, 0, 0.4), inset 0 1px 1px rgba(255, 255, 255, 0.2), inset 0 -1px 1px rgba(255, 255, 255, 0.03); border-radius: var(--radius-xl); transition: all 0.4s cubic-bezier(0.16, 1, 0.3, 1); position: relative; overflow: hidden; } .glass-panel::after { content: ""; position: absolute; inset: 0; border-radius: inherit; border: 1px solid transparent; background: linear-gradient(135deg, rgba(255, 255, 255, 0.25) 0%, transparent 40%, rgba(255, 255, 255, 0.05) 100%) border-box; -webkit-mask: linear-gradient(#fff 0 0) padding-box, linear-gradient(#fff 0 0); -webkit-mask-composite: destination-out; mask-composite: exclude; pointer-events: none; opacity: 0.8; transition: opacity 0.4s ease; } .glass-panel:hover { background: rgba(255, 255, 255, 0.03); border-color: rgba(255, 255, 255, 0.2); transform: translateY(-4px); box-shadow: 0 24px 48px rgba(0, 0, 0, 0.5), inset 0 2px 2px rgba(255, 255, 255, 0.3), inset 0 -1px 1px rgba(255, 255, 255, 0.05); } .glass-panel:hover::after { opacity: 1; } .glass-panel-static { background: rgba(255, 255, 255, 0.015); backdrop-filter: blur(var(--glass-blur)) saturate(150%); -webkit-backdrop-filter: blur(var(--glass-blur)) saturate(150%); border: 1px solid rgba(255, 255, 255, 0.08); box-shadow: 0 16px 40px rgba(0, 0, 0, 0.4), inset 0 1px 1px rgba(255, 255, 255, 0.2), inset 0 -1px 1px rgba(255, 255, 255, 0.03); border-radius: var(--radius-xl); position: relative; overflow: hidden; } .glass-panel-static::after { content: ""; position: absolute; inset: 0; border-radius: inherit; border: 1px solid transparent; background: linear-gradient(135deg, rgba(255, 255, 255, 0.15) 0%, transparent 50%) border-box; -webkit-mask: linear-gradient(#fff 0 0) padding-box, linear-gradient(#fff 0 0); -webkit-mask-composite: destination-out; mask-composite: exclude; pointer-events: none; } /* Glass Inputs */ .glass-input { width: 100%; padding: 14px 18px; background: rgba(3, 4, 12, 0.5); border: 1px solid rgba(255, 255, 255, 0.06); border-radius: var(--radius-md); color: var(--text-primary); font-family: inherit; font-size: 16px; line-height: 1.5; outline: none; box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.4); transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .glass-input-with-icon { padding-left: 46px !important; } /* Custom Webkit Calendar indicator styling */ .glass-input[type="date"]::-webkit-calendar-picker-indicator { cursor: pointer; filter: invert(1) opacity(0.55); transition: all 0.2s ease; } .glass-input[type="date"]::-webkit-calendar-picker-indicator:hover { filter: invert(1) opacity(0.85); } .glass-input::placeholder { color: var(--text-muted); } .glass-input:focus { border-color: rgba(255, 255, 255, 0.3); box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.6), 0 0 0 3px rgba(255, 255, 255, 0.05), 0 4px 15px rgba(255, 255, 255, 0.05); background: rgba(3, 4, 12, 0.7); } .glass-input:disabled { opacity: 0.4; cursor: not-allowed; } .glass-input-error { border-color: rgba(244, 63, 94, 0.5) !important; box-shadow: 0 0 0 3px rgba(244, 63, 94, 0.12) !important; } /* Tactical Glass Buttons */ .glass-btn { display: inline-flex; align-items: center; justify-content: center; gap: 8px; padding: 12px 24px; font-family: inherit; font-size: 15px; font-weight: 600; border-radius: var(--radius-md); border: 1px solid transparent; cursor: pointer; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); white-space: nowrap; outline: none; text-decoration: none; user-select: none; } .glass-btn:active:not(:disabled) { transform: scale(0.96); } .glass-btn:disabled { opacity: 0.45; cursor: not-allowed; transform: none !important; box-shadow: none !important; } .glass-btn-primary { background: rgba(255, 255, 255, 0.1); color: #fff; border: 1px solid rgba(255, 255, 255, 0.2); box-shadow: 0 4px 18px rgba(0, 0, 0, 0.5), inset 0 1px 0 rgba(255, 255, 255, 0.15); } .glass-btn-primary:hover:not(:disabled) { background: rgba(255, 255, 255, 0.15); box-shadow: 0 6px 24px rgba(0, 0, 0, 0.6), 0 0 0 2px rgba(255, 255, 255, 0.15); filter: brightness(1.1); } .glass-btn-secondary { background: var(--glass-bg); color: var(--text-primary); border: 1px solid var(--glass-border); backdrop-filter: blur(8px); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.05); } .glass-btn-secondary:hover:not(:disabled) { background: var(--glass-bg-hover); border-color: var(--glass-border-hover); box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2); } .glass-btn-danger { background: rgba(244, 63, 94, 0.15); color: #fff; border: 1px solid rgba(244, 63, 94, 0.4); box-shadow: 0 4px 18px rgba(0, 0, 0, 0.5), inset 0 1px 0 rgba(244, 63, 94, 0.2); } .glass-btn-danger:hover:not(:disabled) { background: rgba(244, 63, 94, 0.25); box-shadow: 0 6px 24px rgba(0, 0, 0, 0.6), 0 0 0 2px rgba(244, 63, 94, 0.2); filter: brightness(1.1); } .glass-btn-ghost { background: transparent; color: var(--text-secondary); border-color: transparent; } .glass-btn-ghost:hover:not(:disabled) { background: rgba(255, 255, 255, 0.05); color: var(--text-primary); } .glass-btn-sm { padding: 6px 12px; font-size: 12px; border-radius: var(--radius-sm); } .glass-btn-lg { padding: 14px 28px; font-size: 16px; border-radius: var(--radius-lg); } /* Animations */ .animate-fade-in-up { animation: fadeInUp 0.45s cubic-bezier(0.16, 1, 0.3, 1); } @keyframes fadeInUp { from { opacity: 0; transform: translateY(16px); } to { opacity: 1; transform: translateY(0); } } .animate-pulse-glow { animation: pulseGlow 2.5s infinite ease-in-out; } @keyframes pulseGlow { 0%, 100% { box-shadow: 0 0 20px rgba(56, 189, 248, 0.25); } 50% { box-shadow: 0 0 35px rgba(56, 189, 248, 0.45); } } .animate-radar-pulse { animation: radarPulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite; } @keyframes radarPulse { 0%, 100% { transform: scale(1); opacity: 0.8; } 50% { transform: scale(1.35); opacity: 0.15; } } .animate-glow-green { animation: glowGreen 1.8s infinite alternate ease-in-out; } @keyframes glowGreen { from { box-shadow: 0 0 4px rgba(16, 185, 129, 0.4); border-color: rgba(16, 185, 129, 0.4); } to { box-shadow: 0 0 16px rgba(16, 185, 129, 0.8); border-color: rgba(16, 185, 129, 0.8); } } .animate-shimmer { background: linear-gradient( 90deg, rgba(255, 255, 255, 0.01) 0%, rgba(255, 255, 255, 0.06) 50%, rgba(255, 255, 255, 0.01) 100% ); background-size: 200% 100%; animation: shimmer 1.8s infinite; } @keyframes shimmer { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } } /* Custom Scrollbars */ ::-webkit-scrollbar { width: 6px; height: 6px; } ::-webkit-scrollbar-track { background: transparent; } ::-webkit-scrollbar-thumb { background: rgba(255, 255, 255, 0.08); border-radius: 3px; } ::-webkit-scrollbar-thumb:hover { background: rgba(255, 255, 255, 0.16); } ::selection { background: rgba(255, 255, 255, 0.2); color: #fff; } /* Floating Sidebar Navigation */ .sidebar { position: fixed; left: 16px; top: 16px; bottom: 16px; width: var(--sidebar-width); background: rgba(10, 11, 28, 0.45); backdrop-filter: blur(var(--glass-blur)); -webkit-backdrop-filter: blur(var(--glass-blur)); border: 1px solid var(--glass-border); box-shadow: var(--glass-shadow); border-radius: var(--radius-2xl); z-index: 40; display: flex; flex-direction: column; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .sidebar::after { content: ""; position: absolute; inset: 0; border-radius: inherit; border: 1px solid transparent; background: linear-gradient(135deg, rgba(255, 255, 255, 0.08) 0%, transparent 40%) border-box; -webkit-mask: linear-gradient(#fff 0 0) padding-box, linear-gradient(#fff 0 0); -webkit-mask-composite: destination-out; mask-composite: exclude; pointer-events: none; } .sidebar-link { display: flex; align-items: center; gap: 12px; padding: 10px 16px; margin: 4px 16px; border-radius: var(--radius-md); color: var(--text-secondary); font-size: 14px; font-weight: 500; transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1); text-decoration: none; cursor: pointer; border: 1px solid transparent; } .sidebar-link:hover { background: rgba(255, 255, 255, 0.04); color: var(--text-primary); border-color: rgba(255, 255, 255, 0.03); } .sidebar-link-active { background: rgba(255, 255, 255, 0.08) !important; color: #ffffff !important; border: 1px solid rgba(255, 255, 255, 0.15) !important; box-shadow: 0 4px 15px rgba(0, 0, 0, 0.5); } /* Glass Table design */ .glass-table { width: 100%; border-collapse: separate; border-spacing: 0; } .glass-table th { padding: 14px 16px; text-align: left; font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.08em; color: var(--text-muted); border-bottom: 1px solid rgba(255, 255, 255, 0.08); white-space: nowrap; } .glass-table td { padding: 14px 16px; font-size: 14px; color: var(--text-primary); border-bottom: 1px solid rgba(255, 255, 255, 0.03); vertical-align: middle; } .glass-table tbody tr { transition: background 0.25s ease; } .glass-table tbody tr:hover { background: rgba(255, 255, 255, 0.03); } /* Badges */ .badge { display: inline-flex; align-items: center; padding: 4px 12px; border-radius: 9999px; font-size: 11px; font-weight: 600; letter-spacing: 0.03em; text-transform: uppercase; } .badge-success { background: rgba(52, 211, 153, 0.1); color: #34d399; border: 1px solid rgba(52, 211, 153, 0.22); box-shadow: 0 0 10px rgba(52, 211, 153, 0.05); } .badge-warning { background: rgba(251, 146, 60, 0.1); color: #fb923c; border: 1px solid rgba(251, 146, 60, 0.22); } .badge-danger { background: rgba(244, 63, 94, 0.1); color: #fb7185; border: 1px solid rgba(244, 63, 94, 0.22); } .badge-info { background: rgba(56, 189, 248, 0.1); color: #38bdf8; border: 1px solid rgba(56, 189, 248, 0.22); box-shadow: 0 0 10px rgba(56, 189, 248, 0.05); } .badge-neutral { background: rgba(148, 163, 184, 0.1); color: #cbd5e1; border: 1px solid rgba(148, 163, 184, 0.2); } /* Stat Cards */ .stat-card { padding: 24px; background-color: var(--glass-bg); backdrop-filter: blur(var(--glass-blur)); -webkit-backdrop-filter: blur(var(--glass-blur)); border: 1px solid var(--glass-border); border-radius: var(--radius-xl); box-shadow: var(--glass-shadow); transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); position: relative; } .stat-card::after { content: ""; position: absolute; inset: 0; border-radius: inherit; border: 1px solid transparent; background: linear-gradient(135deg, rgba(255, 255, 255, 0.12) 0%, transparent 45%) border-box; -webkit-mask: linear-gradient(#fff 0 0) padding-box, linear-gradient(#fff 0 0); -webkit-mask-composite: destination-out; mask-composite: exclude; pointer-events: none; } .stat-card:hover { background-color: var(--glass-bg-hover); border-color: var(--glass-border-hover); transform: translateY(-6px); box-shadow: 0 24px 50px rgba(0, 0, 0, 0.65), inset 0 1px 0 rgba(255, 255, 255, 0.25); } /* Modal overlays */ .overlay { position: fixed; inset: 0; background: rgba(3, 4, 12, 0.7); backdrop-filter: blur(6px); z-index: 50; display: flex; align-items: center; justify-content: center; animation: overlayIn 0.25s cubic-bezier(0.16, 1, 0.3, 1); } @keyframes overlayIn { from { opacity: 0; } to { opacity: 1; } } .modal-panel { background: rgba(10, 11, 28, 0.95); backdrop-filter: blur(28px); border: 1px solid rgba(255, 255, 255, 0.1); border-radius: var(--radius-xl); box-shadow: 0 32px 80px rgba(0, 0, 0, 0.65), inset 0 1px 0 rgba(255, 255, 255, 0.1); padding: 32px; width: 100%; max-width: 480px; animation: modalIn 0.3s cubic-bezier(0.16, 1, 0.3, 1); } @keyframes modalIn { from { opacity: 0; transform: scale(0.94) translateY(12px); } to { opacity: 1; transform: scale(1) translateY(0); } } .leaflet-container { background: #060714 !important; border-radius: var(--radius-lg); } .leaflet-control-zoom a { background: rgba(10, 11, 28, 0.9) !important; color: #f8fafc !important; border-color: rgba(255, 255, 255, 0.08) !important; } .leaflet-control-attribution { background: rgba(10, 11, 28, 0.8) !important; color: var(--text-muted) !important; font-size: 10px !important; } .leaflet-control-attribution a { color: var(--text-secondary) !important; } .recharts-default-tooltip { background: rgba(10, 11, 28, 0.96) !important; border: 1px solid rgba(255, 255, 255, 0.08) !important; border-radius: var(--radius-md) !important; box-shadow: var(--glass-shadow) !important; } .recharts-tooltip-label { color: var(--text-primary) !important; font-weight: 600 !important; } .recharts-tooltip-item { color: var(--text-secondary) !important; } .spinner { width: 20px; height: 20px; border: 2.5px solid rgba(255, 255, 255, 0.15); border-top-color: var(--accent-blue); border-radius: 50%; animation: spin 0.75s linear infinite; } @keyframes spin { to { transform: rotate(360deg); } } .score-ring { transition: stroke-dashoffset 0.85s cubic-bezier(0.16, 1, 0.3, 1); } @media (max-width: 768px) { .sidebar { transform: translateX(-110%); left: 0; top: 0; bottom: 0; margin: 0; border-radius: 0; height: 100vh; } .sidebar.open { transform: translateX(0); } :root { --sidebar-width: 260px; } } /* Premium Breadcrumbs System */ .breadcrumb { display: flex !important; flex-direction: row !important; flex-wrap: wrap !important; align-items: center !important; gap: 8px !important; padding: 0 !important; margin: 0 0 24px 0 !important; list-style: none !important; } .breadcrumb li { display: inline-flex !important; align-items: center !important; list-style: none !important; } .breadcrumb-item { color: var(--text-muted) !important; font-size: 14.5px !important; font-weight: 550 !important; text-decoration: none !important; transition: color 0.25s ease !important; } .breadcrumb-item:hover { color: var(--text-primary) !important; } .breadcrumb-item-active { color: var(--text-primary) !important; font-size: 14.5px !important; font-weight: 650 !important; } .breadcrumb-separator { color: var(--text-muted) !important; opacity: 0.6 !important; }