github-actions
Auto deploy
02cadf7
Raw
History Blame Contribute Delete
152 kB
/* Reset and Base Styles */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
/* InfraVision AI - White Theme & Enhanced Animations */
:root {
/* Primary Brand Colors - White Theme */
--primary: #2563eb;
--primary-dark: #1d4ed8;
--primary-light: #3b82f6;
--secondary: #64748b;
--secondary-light: #94a3b8;
--secondary-dark: #475569;
/* Creative Accent Colors */
--accent-purple: #8b5cf6;
--accent-blue: #3b82f6;
--accent-cyan: #06b6d4;
--accent-green: #10b981;
--accent-orange: #f59e0b;
--accent-pink: #ec4899;
--accent-indigo: #6366f1;
--accent-teal: #14b8a6;
/* Infrastructure Theme Colors */
--steel-blue: #1e40af;
--concrete-gray: #6b7280;
--construction-orange: #f97316;
--alert-red: #ef4444;
--success-green: #22c55e;
--warning-yellow: #eab308;
/* White Theme Background Colors */
--bg-primary: #ffffff;
--bg-secondary: #f8fafc;
--bg-tertiary: #f1f5f9;
--bg-quaternary: #e2e8f0;
--bg-light: #fefefe;
--bg-white: #ffffff;
--bg-gray-50: #f9fafb;
--bg-gray-100: #f3f4f6;
/* Text Colors for White Theme */
--text-primary: #0f172a;
--text-secondary: #475569;
--text-tertiary: #64748b;
--text-muted: #94a3b8;
--text-light: #cbd5e1;
/* Enhanced Glass-morphism for White Theme */
--glass-bg: rgba(255, 255, 255, 0.8);
--glass-bg-strong: rgba(255, 255, 255, 0.9);
--glass-bg-subtle: rgba(255, 255, 255, 0.6);
--glass-border: rgba(59, 130, 246, 0.15);
--glass-border-light: rgba(59, 130, 246, 0.1);
--glass-shadow: 0 8px 32px rgba(0, 0, 0, 0.1);
--glass-shadow-strong: 0 16px 40px rgba(0, 0, 0, 0.15);
--glass-shadow-subtle: 0 4px 16px rgba(0, 0, 0, 0.05);
/* Creative Gradients for White Theme */
--gradient-primary: linear-gradient(135deg, var(--primary), var(--accent-blue));
--gradient-hero: linear-gradient(135deg, #ffffff 0%, #f8fafc 50%, #f1f5f9 100%);
--gradient-infra: linear-gradient(135deg, var(--steel-blue), var(--accent-cyan));
--gradient-feature: linear-gradient(135deg, rgba(59, 130, 246, 0.1) 0%, rgba(139, 92, 246, 0.05) 100%);
--gradient-card: linear-gradient(135deg, rgba(255, 255, 255, 0.9) 0%, rgba(248, 250, 252, 0.8) 100%);
/* Animation Variables */
--animation-duration-fast: 0.2s;
--animation-duration-normal: 0.3s;
--animation-duration-slow: 0.5s;
--animation-duration-extra-slow: 0.8s;
--animation-easing: cubic-bezier(0.4, 0, 0.2, 1);
--animation-easing-bounce: cubic-bezier(0.68, -0.55, 0.265, 1.55);
--animation-easing-smooth: cubic-bezier(0.25, 0.46, 0.45, 0.94);
/* Floating Animation Variables */
--float-distance: 20px;
--float-duration: 6s;
--pulse-scale: 1.05;
--hover-scale: 1.02;
--hover-lift: -8px;
--gradient-ai: linear-gradient(135deg, var(--accent-purple), var(--accent-pink));
--gradient-overlay: linear-gradient(135deg, rgba(59, 130, 246, 0.1), rgba(139, 92, 246, 0.1));
/* Enhanced Border Radius */
--border-radius: 8px;
--border-radius-lg: 12px;
--border-radius-xl: 16px;
--border-radius-2xl: 24px;
--border-radius-full: 9999px;
/* Enhanced Transitions */
--transition-fast: 0.15s ease;
--transition-medium: 0.3s ease;
--transition-slow: 0.5s ease;
--transition-bounce: 0.3s cubic-bezier(0.68, -0.55, 0.265, 1.55);
}
/* ============================================ */
/* PROFESSIONAL ANIMATION KEYFRAMES */
/* ============================================ */
/* Subtle Professional Animations */
@keyframes fadeIn {
0% {
opacity: 0;
transform: translateY(20px);
}
100% {
opacity: 1;
transform: translateY(0);
}
}
@keyframes slideIn {
0% {
opacity: 0;
transform: translateX(-20px);
}
100% {
opacity: 1;
transform: translateX(0);
}
}
@keyframes subtleGlow {
0%, 100% {
box-shadow: 0 2px 8px rgba(59, 130, 246, 0.1);
}
50% {
box-shadow: 0 4px 16px rgba(59, 130, 246, 0.2);
}
}
@keyframes gradientShift {
0%, 100% {
background-position: 0% 50%;
}
50% {
background-position: 100% 50%;
}
}
/* ============================================ */
/* PROFESSIONAL UI ELEMENTS */
/* ============================================ */
.subtle-accent {
color: var(--accent-blue);
font-weight: 600;
opacity: 0.8;
}
/* ============================================ */
/* BASE STYLES - WHITE THEME */
/* ============================================ */
body {
font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', sans-serif;
background: var(--bg-primary);
color: var(--text-primary);
line-height: 1.6;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
overflow-x: hidden;
position: relative;
}
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background:
radial-gradient(circle at 20% 80%, rgba(59, 130, 246, 0.08) 0%, transparent 50%),
radial-gradient(circle at 80% 20%, rgba(139, 92, 246, 0.06) 0%, transparent 50%),
radial-gradient(circle at 40% 40%, rgba(16, 185, 129, 0.04) 0%, transparent 50%),
linear-gradient(135deg, rgba(255, 255, 255, 1) 0%, rgba(248, 250, 252, 0.8) 100%);
z-index: -2;
pointer-events: none;
}
body::after {
content: '';
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background:
url('data:image/svg+xml,<svg width="40" height="40" viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg"><defs><pattern id="smallGrid" width="8" height="8" patternUnits="userSpaceOnUse"><path d="M 8 0 L 0 0 0 8" fill="none" stroke="%233b82f6" stroke-width="0.5" opacity="0.1"/></pattern></defs><rect width="100%" height="100%" fill="url(%23smallGrid)" /></svg>');
z-index: -1;
pointer-events: none;
opacity: 0.3;
}
@keyframes shimmer {
0% { background-position: -1000px 0; }
100% { background-position: 1000px 0; }
}
@keyframes spin {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
@keyframes fadeInUp {
from {
opacity: 0;
transform: translateY(30px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
@keyframes gradientShift {
0%, 100% {
background:
radial-gradient(circle at 20% 20%, rgba(0, 212, 255, 0.1) 0%, transparent 40%),
radial-gradient(circle at 80% 80%, rgba(139, 92, 246, 0.1) 0%, transparent 40%);
}
33% {
background:
radial-gradient(circle at 60% 30%, rgba(0, 212, 255, 0.15) 0%, transparent 45%),
radial-gradient(circle at 40% 70%, rgba(139, 92, 246, 0.15) 0%, transparent 45%);
}
66% {
background:
radial-gradient(circle at 80% 60%, rgba(0, 212, 255, 0.12) 0%, transparent 42%),
radial-gradient(circle at 20% 40%, rgba(139, 92, 246, 0.12) 0%, transparent 42%);
}
}
@keyframes slideInLeft {
from {
opacity: 0;
transform: translateX(-50px);
}
to {
opacity: 1;
transform: translateX(0);
}
}
@keyframes slideIn {
0% {
opacity: 0;
transform: translateX(-20px);
}
100% {
opacity: 1;
transform: translateX(0);
}
}
@keyframes slideInUp {
from {
opacity: 0;
transform: translateY(30px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
/* Theme Variables */
:root {
/* Core Colors */
--primary: #3b82f6;
--primary-dark: #1d4ed8;
--secondary: #64748b;
--accent-blue: #60a5fa;
--accent-indigo: #818cf8;
--accent-cyan: #22d3ee;
--accent-azure: #38bdf8;
/* Semantic Colors */
--success: #22c55e;
--danger: #ef4444;
--warning: #f59e0b;
--info: #3b82f6;
/* Background Colors */
--bg-primary: #ffffff;
--bg-secondary: #f8fafc;
--bg-tertiary: #f1f5f9;
/* Glass Effects */
--glass-bg: rgba(255, 255, 255, 0.8);
--glass-border: rgba(255, 255, 255, 0.3);
--glass-shadow: 0 8px 32px rgba(0, 0, 0, 0.1);
/* Gradients */
--gradient-blue: linear-gradient(135deg, #60a5fa, #3b82f6);
--gradient-indigo: linear-gradient(135deg, #818cf8, #6366f1);
--gradient-cyan: linear-gradient(135deg, #22d3ee, #0ea5e9);
--gradient-azure: linear-gradient(135deg, #38bdf8, #0284c7);
/* Border Radius */
--border-radius: 0.5rem;
--border-radius-sm: 0.25rem;
--border-radius-lg: 0.75rem;
--border-radius-xl: 1rem;
--border-radius-2xl: 1.5rem;
/* Shadows */
--shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);
--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1);
--shadow-glass: 0 8px 32px rgba(59, 130, 246, 0.1);
/* Fonts */
--font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto;
/* Animation Speeds */
--transition-slow: 0.3s ease-in-out;
--transition-medium: 0.2s ease-in-out;
--transition-fast: 0.1s ease-in-out;
}
@keyframes fadeInScale {
from {
opacity: 0;
transform: scale(0.95);
}
to {
opacity: 1;
transform: scale(1);
}
}
@keyframes shimmer {
0% {
background-position: -200% 0;
}
100% {
background-position: 200% 0;
}
}
:root {
/* Enhanced Color Palette */
--primary: #3b82f6;
--primary-dark: #1d4ed8;
--primary-light: #60a5fa;
--secondary: #64748b;
--success: #10b981;
--warning: #f59e0b;
--danger: #ef4444;
--info: #0ea5e9;
--light: #f8fafc;
--dark: #1e293b;
--darker: #0f172a;
--accent: #8b5cf6;
--accent-primary: #3b82f6;
--accent-secondary: #1d4ed8;
--glass: rgba(255, 255, 255, 0.1);
--glass-border: rgba(255, 255, 255, 0.2);
--nav-active-bg: rgba(59, 130, 246, 0.1);
--border-glass: 1px solid var(--glass-border);
--card-bg: rgba(255, 255, 255, 0.05);
--shadow-glass: 0 8px 32px rgba(0, 0, 0, 0.1);
--shadow-glass-hover: 0 12px 40px rgba(0, 0, 0, 0.15);
/* Standardized Font Sizes */
--font-size-xs: 0.75rem; /* 12px */
--font-size-sm: 0.875rem; /* 14px */
--font-size-base: 1rem; /* 16px */
--font-size-lg: 1.125rem; /* 18px */
--font-size-xl: 1.25rem; /* 20px */
--font-size-2xl: 1.5rem; /* 24px */
--font-size-3xl: 1.875rem; /* 30px */
--font-size-4xl: 2.25rem; /* 36px */
--font-size-5xl: 3rem; /* 48px */
--font-size-6xl: 3.75rem; /* 60px */
--font-size-7xl: 4.5rem; /* 72px */
/* Font Weights */
--font-weight-light: 300;
--font-weight-normal: 400;
--font-weight-medium: 500;
--font-weight-semibold: 600;
--font-weight-bold: 700;
--font-weight-extrabold: 800;
/* Line Heights */
--line-height-tight: 1.25;
--line-height-snug: 1.375;
--line-height-normal: 1.5;
--line-height-relaxed: 1.625;
--line-height-loose: 2;
/* Advanced Gradients */
--primary-gradient: linear-gradient(135deg, #3b82f6 0%, #1d4ed8 50%, #1e40af 100%);
--success-gradient: linear-gradient(135deg, #10b981 0%, #059669 100%);
--warning-gradient: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);
--danger-gradient: linear-gradient(135deg, #ef4444 0%, #dc2626 100%);
--info-gradient: linear-gradient(135deg, #0ea5e9 0%, #0284c7 100%);
--accent-gradient: linear-gradient(135deg, #8b5cf6 0%, #7c3aed 100%);
--glass-gradient: linear-gradient(135deg, rgba(255, 255, 255, 0.1) 0%, rgba(255, 255, 255, 0.05) 100%);
--hero-gradient: linear-gradient(135deg, rgba(30, 41, 59, 0.9) 0%, rgba(15, 23, 42, 0.95) 100%);
--background-gradient: linear-gradient(180deg, #f8fafc 0%, #e2e8f0 50%, #cbd5e1 100%);
/* Enhanced Shadows */
--shadow-sm: 0 2px 4px rgba(0, 0, 0, 0.05);
--shadow-md: 0 4px 6px rgba(0, 0, 0, 0.1);
--shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.1);
--shadow-xl: 0 20px 25px rgba(0, 0, 0, 0.15);
--shadow-2xl: 0 25px 50px rgba(0, 0, 0, 0.25);
--shadow-glow: 0 0 30px rgba(59, 130, 246, 0.3);
--shadow-glass: 0 8px 32px rgba(0, 0, 0, 0.1);
/* Borders and Radius */
--border-radius-sm: 0.375rem;
--border-radius: 0.5rem;
--border-radius-lg: 0.75rem;
--border-radius-xl: 1rem;
--border-radius-2xl: 1.5rem;
--border-glass: 1px solid var(--glass-border);
}
/* Base Styles */
body {
font-family: 'Inter', system-ui, -apple-system, sans-serif;
background: var(--background-gradient);
background-attachment: fixed;
color: var(--dark);
margin: 0;
padding: 0;
overflow-x: hidden;
}
/* Force all headers to be black for visibility */
h1, h2, h3, h4, h5, h6 {
color: black !important;
}
/* Layout */
.app-container {
min-height: 100vh;
display: flex;
flex-direction: column;
position: relative;
background: var(--bg-primary);
color: var(--text-primary);
}
/* Enhanced Hero Section - White Theme */
.hero-section {
position: relative;
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
background:
/* Professional Blue-Purple Gradient */
linear-gradient(135deg, rgba(59, 130, 246, 0.95) 0%, rgba(99, 102, 241, 0.95) 25%, rgba(139, 92, 246, 0.95) 50%, rgba(168, 85, 247, 0.95) 75%, rgba(139, 92, 246, 0.95) 100%),
/* Infrastructure Grid Pattern */
linear-gradient(45deg, rgba(255, 255, 255, 0.08) 25%, transparent 25%),
linear-gradient(-45deg, rgba(255, 255, 255, 0.06) 25%, transparent 25%),
linear-gradient(45deg, transparent 75%, rgba(255, 255, 255, 0.08) 75%),
linear-gradient(-45deg, transparent 75%, rgba(255, 255, 255, 0.06) 75%),
/* Subtle Accent Gradients */
radial-gradient(circle at 30% 20%, rgba(255, 255, 255, 0.15) 0%, transparent 50%),
radial-gradient(circle at 70% 80%, rgba(139, 92, 246, 0.12) 0%, transparent 50%),
radial-gradient(circle at 50% 50%, rgba(16, 185, 129, 0.08) 0%, transparent 50%);
background-size:
cover,
30px 30px,
30px 30px,
20px 20px,
20px 20px,
100% 100%,
100% 100%;
background-position:
center,
0 0,
0 0,
10px 10px,
10px 10px,
center,
center;
color: white;
overflow: hidden;
animation: fadeInScale 1s ease-out;
}
.hero-overlay {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
radial-gradient(circle at 20% 20%, rgba(255, 255, 255, 0.08) 0%, transparent 40%),
radial-gradient(circle at 80% 80%, rgba(139, 92, 246, 0.1) 0%, transparent 40%),
linear-gradient(135deg, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0.02));
z-index: 1;
animation: gradientShift 8s ease-in-out infinite;
}
.hero-content {
position: relative;
z-index: 2;
max-width: 1400px;
margin: 0 auto;
padding: 2rem;
display: grid;
grid-template-columns: 1fr 1fr;
gap: 4rem;
align-items: center;
animation: fadeInUp 1s ease-out;
}
@media (max-width: 768px) {
.hero-content {
grid-template-columns: 1fr;
gap: 1.5rem;
padding: 1rem;
}
.hero-section {
padding: 1rem;
min-height: auto;
}
.floating-elements {
position: relative !important;
display: flex;
flex-direction: column;
gap: 0.8rem;
height: auto !important;
width: 100%;
align-items: center;
margin-top: 1rem;
}
.card-1, .card-2, .card-3 {
position: static !important;
animation: none !important;
transform: none !important;
margin: 0 !important;
width: 90%;
max-width: 300px;
}
}
.hero-text {
animation: slideInLeft 1s ease-out 0.2s both;
}
.hero-title {
font-size: 4.5rem;
font-weight: 900;
margin-bottom: 0.5rem; /* Minimized margin */
display: flex;
align-items: center;
gap: 1rem;
color: #FFFFFF !important; /* White text */
text-shadow:
-3px -3px 0 #000000,
3px -3px 0 #000000,
-3px 3px 0 #000000,
3px 3px 0 #000000,
-3px 0px 0 #000000,
3px 0px 0 #000000,
0px -3px 0 #000000,
0px 3px 0 #000000;
filter: drop-shadow(0 0 15px rgba(255, 255, 255, 0.5));
position: relative;
letter-spacing: -2px;
animation: fadeInUp 1s ease-out 0.2s both;
word-break: break-word;
}
/* Hero Title Responsive Breakpoints */
@media (max-width: 1024px) {
.hero-title {
font-size: 3.5rem;
}
}
@media (max-width: 768px) {
.hero-title {
font-size: 2.5rem;
margin-bottom: 1rem;
gap: 0.75rem;
}
}
@media (max-width: 480px) {
.hero-title {
font-size: 1.8rem;
margin-bottom: 0.75rem;
gap: 0.5rem;
}
}
@keyframes whiteGlow {
0%, 100% { filter: drop-shadow(0 0 20px rgba(255, 255, 255, 0.6)) drop-shadow(0 0 30px rgba(59, 130, 246, 0.3)); }
50% { filter: drop-shadow(0 0 30px rgba(255, 255, 255, 0.9)) drop-shadow(0 0 50px rgba(59, 130, 246, 0.5)); }
}
.hero-title::after {
content: '';
position: absolute;
bottom: -4px;
left: 0;
width: 100%;
height: 4px;
background: linear-gradient(135deg, var(--accent-blue), var(--accent-purple), var(--accent-cyan));
border-radius: 2px;
background-size: 200% 200%;
animation: gradientShift 8s ease-in-out infinite;
}
.hero-icon {
filter: drop-shadow(0 0 15px rgba(255, 255, 255, 0.4));
color: #ffffff;
transition: all 0.3s ease;
}
.hero-icon:hover {
filter: drop-shadow(0 0 20px rgba(255, 255, 255, 0.6));
transform: scale(1.05);
}
/* Explicit White Text for All Hero Subtitles */
.hero-subtitle {
font-size: 1.5rem;
margin-bottom: 2rem;
opacity: 1;
line-height: 1.6;
color: #ffffff !important;
text-shadow: 0 2px 10px rgba(0, 0, 0, 0.4);
font-weight: 300;
letter-spacing: 0.5px;
}
/* Explicit White Text Class for InfraVision AI Text */
.infravision-title {
color: #ffffff !important;
text-shadow: 0 4px 20px rgba(59, 130, 246, 0.5), 0 0 40px rgba(139, 92, 246, 0.3);
font-weight: 900;
}
/* Explicit White Text for All Subtitles */
.white-text-subtitle {
color: #ffffff !important;
text-shadow: 0 2px 10px rgba(0, 0, 0, 0.4);
}
.hero-features {
display: grid;
gap: 1.5rem;
}
.hero-feature {
display: flex;
align-items: center;
gap: 1rem;
padding: 1rem;
background: var(--glass-gradient);
backdrop-filter: blur(20px);
border: var(--border-glass);
border-radius: var(--border-radius-lg);
transition: all 0.3s ease;
}
.hero-feature:hover {
transform: translateY(-2px);
box-shadow: var(--shadow-glow);
}
.hero-feature h3 {
font-size: 1.1rem;
margin-bottom: 0.25rem;
color: #ffffff !important;
font-weight: 700;
text-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
}
.hero-feature p {
opacity: 1;
font-size: 0.9rem;
color: #ffffff !important;
text-shadow: 0 1px 4px rgba(0, 0, 0, 0.2);
}
.feature-icon {
color: var(--primary-light);
flex-shrink: 0;
}
.hero-visual {
position: relative;
flex: 1;
min-height: 400px;
}
.floating-elements {
position: absolute;
width: 100%;
height: 100%;
top: 0;
right: 0;
z-index: 5;
}
.floating-card {
position: absolute;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 0.75rem;
padding: 2.5rem 2rem;
background: var(--glass-gradient);
backdrop-filter: blur(20px);
border: var(--border-glass);
border-radius: var(--border-radius-xl);
box-shadow: var(--shadow-glass);
transition: all 0.3s ease;
color: #ffffff !important;
font-weight: 600;
text-align: center;
min-width: 180px;
text-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
font-size: 1rem;
}
.floating-card::before {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(37, 99, 235, 0.1), transparent);
transition: left 0.6s ease;
}
.floating-card:hover::before {
left: 100%;
}
.floating-card:hover {
transform: scale(1.05) translateY(-4px);
box-shadow: var(--shadow-glow);
}
.floating-card svg {
color: var(--primary-light);
margin-bottom: 0.25rem;
width: 28px;
height: 28px;
}
.floating-card span {
font-size: 0.8rem;
line-height: 1.2;
}
@media (max-width: 768px) {
.floating-elements {
height: auto !important;
display: flex;
flex-direction: column;
gap: 1rem;
animation: none !important;
}
.card-1, .card-2, .card-3, .card-4 {
position: static !important;
top: auto !important;
right: auto !important;
bottom: auto !important;
left: auto !important;
animation: none !important;
margin: 0;
width: 100%;
}
}
.card-1 {
top: 55%; /* Pulled down */
right: 5%;
transform: translateY(-130%) scale(0.9); /* Reduced size */
}
.card-2 {
top: 55%; /* Pulled down */
right: 18%; /* Pulled closer to text */
transform: translateY(-50%) scale(0.9); /* Reduced size */
}
.card-3 {
top: 55%; /* Pulled down */
right: 5%;
transform: translateY(30%) scale(0.9); /* Reduced size */
}
/* Base floating elements common styles */
.card-1, .card-2, .card-3 {
position: absolute;
animation: float-base 8s ease-in-out infinite;
}
@keyframes float-base {
0%, 100% { margin-top: 0px; }
50% { margin-top: -20px; }
}
@media (max-width: 768px) {
.card-1, .card-2, .card-3 {
position: static !important;
animation: none !important;
transform: none !important;
margin: 1rem auto;
}
.floating-elements {
position: relative !important;
display: flex;
flex-direction: column;
gap: 1rem;
height: auto !important;
width: 100%;
align-items: center;
}
}
.card-4 {
bottom: 15%;
right: 12%;
animation: float-slow 7.5s ease-in-out infinite;
}
@keyframes float-fast {
0%, 100% { transform: translateY(0px); }
50% { transform: translateY(-30px); }
}
/* Logo Badge - Static Position */
.logo-badge-static {
position: absolute;
top: 1rem;
right: 1rem;
width: 110px;
height: 110px;
background: linear-gradient(135deg, rgba(255, 255, 255, 0.98) 0%, rgba(248, 250, 252, 0.95) 100%);
border-radius: 16px;
padding: 1rem;
box-shadow: 0 12px 40px rgba(0, 0, 0, 0.25), 0 0 30px rgba(37, 99, 235, 0.2);
display: flex;
align-items: center;
justify-content: center;
z-index: 15;
border: 4px solid #000000;
backdrop-filter: blur(10px);
font-weight: 800;
text-align: center;
overflow: hidden;
transition: all 0.3s ease;
}
.logo-badge-static::before {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.4), transparent);
transition: left 0.6s ease;
}
.logo-badge-static:hover::before {
left: 100%;
}
.logo-badge-static:hover {
transform: scale(1.08);
box-shadow: 0 16px 50px rgba(0, 0, 0, 0.3), 0 0 40px rgba(37, 99, 235, 0.35);
border-color: rgba(37, 99, 235, 0.5);
}
.logo-badge-static svg {
width: 95%;
height: 95%;
object-fit: contain;
}
@media (max-width: 768px) {
.logo-badge-static {
width: 75px;
height: 75px;
bottom: 1rem;
right: 1rem;
border-radius: 12px;
padding: 0.5rem;
box-shadow: 0 8px 25px rgba(0, 0, 0, 0.2), 0 0 20px rgba(37, 99, 235, 0.15);
}
}
/* Remove old floating logo badge */
.logo-badge {
display: none;
}
/* Dashboard Container */
.dashboard-container {
position: relative;
background: var(--background-gradient);
min-height: calc(100vh - 100px);
padding: 2rem;
margin-top: 0;
border-radius: var(--border-radius-2xl) var(--border-radius-2xl) 0 0;
box-shadow: var(--shadow-2xl);
backdrop-filter: blur(10px);
}
/* Navigation */
.nav-tabs-container {
margin-bottom: 2rem;
position: relative;
}
.nav-tabs {
display: flex;
gap: 1rem;
background: var(--glass-gradient);
backdrop-filter: blur(20px);
border: var(--border-glass);
border-radius: var(--border-radius-xl);
padding: 1.5rem;
box-shadow: var(--shadow-glass);
justify-content: center;
flex-wrap: wrap;
}
/* Enhanced Navigation Tabs - InfraVision AI */
.nav-tab {
display: flex;
flex-direction: column;
align-items: center;
gap: 0.75rem;
padding: 1.75rem 2.25rem;
border-radius: var(--border-radius-xl);
cursor: pointer;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
background: rgba(255, 255, 255, 0.6);
border: 1.5px solid rgba(37, 99, 235, 0.1);
color: var(--text-secondary);
position: relative;
overflow: hidden;
min-width: 160px;
backdrop-filter: blur(10px);
font-weight: 600;
box-shadow: 0 4px 12px rgba(37, 99, 235, 0.05);
}
.nav-tab::before {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(6, 182, 212, 0.15), transparent);
transition: left 0.6s ease;
}
.nav-tab:hover::before {
left: 100%;
}
.nav-tab:hover {
background: rgba(248, 250, 252, 0.9);
transform: translateY(-4px) scale(1.02);
box-shadow:
0 12px 30px rgba(37, 99, 235, 0.12),
0 0 20px rgba(6, 182, 212, 0.08);
color: #2563eb;
border-color: rgba(37, 99, 235, 0.25);
}
.nav-tab.active {
background: linear-gradient(135deg, #2563eb 0%, #1e40af 100%);
color: white;
box-shadow:
0 15px 35px rgba(37, 99, 235, 0.3),
0 0 30px rgba(6, 182, 212, 0.2),
inset 0 1px 0 rgba(255, 255, 255, 0.2);
animation: navGlow 3s ease-in-out infinite;
border-color: rgba(255, 255, 255, 0.3);
transform: translateY(-2px);
}
@keyframes navGlow {
0%, 100% {
box-shadow:
0 15px 35px rgba(37, 99, 235, 0.3),
0 0 30px rgba(6, 182, 212, 0.2),
inset 0 1px 0 rgba(255, 255, 255, 0.2);
}
50% {
box-shadow:
0 18px 40px rgba(37, 99, 235, 0.4),
0 0 40px rgba(6, 182, 212, 0.3),
inset 0 1px 0 rgba(255, 255, 255, 0.3);
}
}
.nav-tab.active svg {
filter: drop-shadow(0 0 8px rgba(255, 255, 255, 0.8));
}
.nav-label {
font-weight: 600;
font-size: 0.9rem;
}
.nav-desc {
font-size: 0.75rem;
opacity: 0.8;
text-align: center;
line-height: 1.2;
}
.nav-tab svg {
transition: all 0.3s ease;
filter: drop-shadow(0 0 5px rgba(59, 130, 246, 0.3));
}
/* Main Content Frame */
.main-content-frame {
position: relative;
}
.content-frame {
background: var(--glass-gradient);
backdrop-filter: blur(20px);
border: var(--border-glass);
border-radius: var(--border-radius-2xl);
padding: 2rem;
box-shadow: var(--shadow-glass);
min-height: 600px;
position: relative;
overflow: hidden;
}
.content-frame::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 4px;
background: var(--primary-gradient);
border-radius: var(--border-radius-2xl) var(--border-radius-2xl) 0 0;
}
/* Navbar mobile toggle and header actions */
.nav-toggle {
display: none;
background: var(--surface-secondary);
color: var(--text-primary);
border: 1px solid var(--border-color);
font-size: 1.25rem;
padding: 0.25rem 0.5rem;
border-radius: var(--border-radius);
cursor: pointer;
transition: all 0.3s ease;
}
.nav-toggle:hover {
background: var(--surface-hover);
transform: scale(1.05);
}
.nav-label {
display: inline-block;
font-weight: 500;
}
.header-actions {
display: flex;
gap: 0.5rem;
align-items: center;
}
.brand h1 {
margin: 0;
font-size: 1.5rem;
color: #ffffff !important;
text-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
font-weight: 700;
}
/* Navigation */
.nav-tabs {
display: flex;
gap: 0.25rem;
background: var(--surface-secondary);
padding: 0.5rem;
border-radius: var(--border-radius-lg);
border: 1px solid var(--border-color);
backdrop-filter: blur(10px);
margin: 0;
}
/* responsive nav open state */
.nav-tabs.open { display: flex; }
.nav-item {
display: flex;
align-items: center;
gap: 0.5rem;
padding: 0.75rem 1rem;
border-radius: var(--border-radius);
cursor: pointer;
transition: all 0.3s ease;
white-space: nowrap;
font-size: 0.875rem;
color: var(--text-secondary);
font-weight: 500;
border: none;
background: transparent;
text-decoration: none;
position: relative;
overflow: hidden;
}
.nav-item::before {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(59, 130, 246, 0.1), transparent);
transition: left 0.5s ease;
}
.nav-item:hover::before {
left: 100%;
}
.nav-item:hover {
background: rgba(59, 130, 246, 0.08);
color: var(--accent-blue);
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(59, 130, 246, 0.15);
}
.nav-item.active {
background: linear-gradient(135deg, var(--accent-blue), var(--accent-purple));
color: white;
transform: translateY(-1px);
box-shadow: 0 6px 20px rgba(59, 130, 246, 0.3);
}
.nav-item.active:hover {
transform: translateY(-3px);
box-shadow: 0 8px 25px rgba(59, 130, 246, 0.4);
}
.nav-item svg {
width: 18px;
height: 18px;
transition: all 0.3s ease;
}
/* Header */
.header {
background: var(--surface-primary);
border-bottom: 1px solid var(--border-color);
backdrop-filter: blur(20px);
position: sticky;
top: 0;
z-index: 100;
box-shadow: var(--shadow-soft);
}
.header-content {
display: flex;
align-items: center;
justify-content: space-between;
padding: 1rem 2rem;
max-width: 1400px;
margin: 0 auto;
gap: 1rem;
}
.brand {
flex-shrink: 0;
}
/* Main Content */
.main-content {
flex: 1;
padding: 2rem;
max-width: 1400px;
margin: 0 auto;
width: 100%;
}
/* Content Area - Standardized for all pages */
.content-area {
max-width: 1400px;
margin: 0 auto;
padding: 2rem;
width: 100%;
position: relative;
z-index: 1;
}
/* Page Headers */
.page-header {
margin-bottom: 2rem;
text-align: center;
}
.page-header h1 {
font-size: 2.5rem;
font-weight: 700;
color: #000000;
margin-bottom: 0.5rem;
display: flex;
align-items: center;
justify-content: center;
gap: 1rem;
}
.page-header p {
font-size: 1.1rem;
color: var(--secondary);
max-width: 600px;
margin: 0 auto;
}
/* Cards */
.card {
background: linear-gradient(135deg, rgba(255, 255, 255, 0.95) 0%, rgba(248, 250, 252, 0.8) 100%);
backdrop-filter: blur(20px);
border: 1.5px solid var(--glass-border);
border-radius: var(--border-radius-xl);
box-shadow:
0 10px 30px rgba(59, 130, 246, 0.08),
0 4px 15px rgba(59, 130, 246, 0.04),
inset 0 1px 1px rgba(255, 255, 255, 0.8);
padding: 2rem;
margin-bottom: 2rem;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
position: relative;
overflow: hidden;
animation: fadeInScale 0.6s ease-out;
}
.card::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 4px;
background: linear-gradient(90deg, #2563eb, #06b6d4, #2563eb);
background-size: 200% 100%;
border-radius: var(--border-radius-xl) var(--border-radius-xl) 0 0;
animation: gradientShift 3s ease-in-out infinite;
}
.card::after {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: radial-gradient(circle at 20% 20%, rgba(37, 99, 235, 0.03) 0%, transparent 50%);
pointer-events: none;
border-radius: var(--border-radius-xl);
}
.card:hover {
transform: translateY(-8px) scale(1.02);
box-shadow:
0 20px 40px rgba(59, 130, 246, 0.15),
0 8px 25px rgba(59, 130, 246, 0.08),
inset 0 1px 1px rgba(255, 255, 255, 0.9);
border-color: rgba(59, 130, 246, 0.3);
}
.card-header {
padding-bottom: 1rem;
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
margin-bottom: 1.5rem;
position: relative;
}
.card-header h2, .card-header h3 {
margin: 0;
color: #000000;
font-weight: 700;
display: flex;
align-items: center;
gap: 0.75rem;
}
.card-body {
padding-top: 0.5rem;
color: var(--dark);
}
/* Upload Zone */
.upload-zone {
border: 2.5px dashed rgba(37, 99, 235, 0.3);
border-radius: var(--border-radius-xl);
padding: 3rem;
text-align: center;
cursor: pointer;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
background: linear-gradient(135deg, rgba(248, 250, 252, 0.8) 0%, rgba(241, 245, 249, 0.6) 100%);
position: relative;
overflow: hidden;
box-shadow:
0 8px 20px rgba(37, 99, 235, 0.08),
inset 0 1px 2px rgba(255, 255, 255, 0.8);
}
.upload-zone::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: radial-gradient(circle at 20% 50%, rgba(37, 99, 235, 0.04) 0%, transparent 50%);
pointer-events: none;
}
.upload-zone:hover {
border-color: #2563eb;
background: linear-gradient(135deg, rgba(241, 245, 249, 1) 0%, rgba(226, 232, 240, 0.8) 100%);
box-shadow:
0 12px 30px rgba(37, 99, 235, 0.15),
inset 0 1px 2px rgba(255, 255, 255, 0.9);
transform: scale(1.01);
}
/* Results Display */
.results-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 1.5rem;
}
.result-card {
background: white;
border-radius: var(--border-radius);
padding: 1.5rem;
box-shadow: var(--shadow-sm);
}
/* Analysis Section */
.analysis-section {
background: white;
border-radius: var(--border-radius);
margin-top: 1.5rem;
overflow: hidden;
}
.analysis-header {
background: var(--primary-gradient);
color: white;
padding: 1rem 1.5rem;
}
.analysis-content {
padding: 1.5rem;
}
/* Image Preview */
.image-preview {
max-width: 100%;
border-radius: var(--border-radius);
}
/* Buttons */
.btn {
padding: 0.5rem 1rem;
border-radius: var(--border-radius);
border: none;
cursor: pointer;
transition: all 0.2s;
}
.btn-primary {
background: linear-gradient(135deg, #2563eb 0%, #1e40af 100%);
border: 1.5px solid rgba(37, 99, 235, 0.3);
color: white;
padding: 1rem 2.5rem;
border-radius: var(--border-radius-xl);
font-weight: 700;
font-size: 1rem;
cursor: pointer;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
position: relative;
overflow: hidden;
box-shadow:
0 8px 20px rgba(37, 99, 235, 0.3),
inset 0 1px 0 rgba(255, 255, 255, 0.2);
text-transform: uppercase;
letter-spacing: 0.5px;
}
.btn-primary::before {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.3), transparent);
transition: left 0.5s;
}
.btn-primary:hover::before {
left: 100%;
}
.btn-primary:hover {
transform: translateY(-3px);
box-shadow:
0 15px 35px rgba(37, 99, 235, 0.4),
0 0 25px rgba(6, 182, 212, 0.2),
inset 0 1px 0 rgba(255, 255, 255, 0.3);
border-color: rgba(37, 99, 235, 0.6);
background: linear-gradient(135deg, #1e40af 0%, #1d4ed8 100%);
}
.btn-primary:active {
transform: translateY(-1px) scale(0.98);
box-shadow:
0 5px 15px rgba(37, 99, 235, 0.2),
inset 0 2px 4px rgba(0, 0, 0, 0.1);
}
.btn-secondary {
background: var(--secondary);
color: white;
}
/* Forms */
.form-group {
margin-bottom: 1.5rem;
}
.form-label {
display: block;
margin-bottom: 0.75rem;
color: #000000;
font-weight: 600;
font-size: 0.9rem;
letter-spacing: 0.3px;
}
.form-control {
width: 100%;
padding: 0.875rem 1.25rem;
border: 1.5px solid rgba(37, 99, 235, 0.15);
border-radius: var(--border-radius-lg);
background: rgba(255, 255, 255, 0.95);
color: #000000;
font-size: 1rem;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
box-shadow:
0 4px 12px rgba(37, 99, 235, 0.04),
inset 0 1px 2px rgba(37, 99, 235, 0.05);
}
.form-control:focus {
outline: none;
border-color: #2563eb;
box-shadow:
0 6px 20px rgba(37, 99, 235, 0.12),
inset 0 1px 2px rgba(37, 99, 235, 0.08),
0 0 0 3px rgba(37, 99, 235, 0.1);
transform: translateY(-2px);
background: rgba(255, 255, 255, 1);
}
.form-control::placeholder {
color: rgba(100, 116, 139, 0.6);
font-weight: 400;
}
/* Progress */
.progress {
height: 0.5rem;
background: #e5e7eb;
border-radius: 1rem;
overflow: hidden;
}
.progress-bar-container {
height: 28px;
background: linear-gradient(90deg, #f0f4f8, #e2e8f0);
border-radius: var(--border-radius-lg);
overflow: hidden;
border: 1px solid rgba(37, 99, 235, 0.1);
position: relative;
box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.05);
}
.progress-bar {
height: 100%;
background: linear-gradient(90deg, #2563eb 0%, #06b6d4 50%, #2563eb 100%);
background-size: 200% 100%;
animation: progressGradient 2s ease infinite;
transition: width 0.4s cubic-bezier(0.4, 0, 0.2, 1);
position: relative;
box-shadow:
0 0 10px rgba(37, 99, 235, 0.5),
inset 0 1px 1px rgba(255, 255, 255, 0.3);
}
.progress-bar::after {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.3), transparent);
animation: shimmer 2s ease infinite;
}
@keyframes progressGradient {
0% { background-position: 0% center; }
50% { background-position: 100% center; }
100% { background-position: 0% center; }
}
@keyframes shimmer {
0% { transform: translateX(-100%); }
100% { transform: translateX(100%); }
}
/* Utilities */
.text-center { text-align: center; }
.mb-1 { margin-bottom: 0.5rem; }
.mb-2 { margin-bottom: 1rem; }
.mb-3 { margin-bottom: 1.5rem; }
.mt-1 { margin-top: 0.5rem; }
.mt-2 { margin-top: 1rem; }
.mt-3 { margin-top: 1.5rem; }
/* Visualization Components */
.visualization {
background: linear-gradient(135deg, rgba(255, 255, 255, 0.95) 0%, rgba(248, 250, 252, 0.85) 100%);
border-radius: var(--border-radius-lg);
padding: 2rem;
margin-bottom: 2rem;
box-shadow:
0 8px 20px rgba(37, 99, 235, 0.1),
0 2px 8px rgba(37, 99, 235, 0.05),
inset 0 1px 1px rgba(255, 255, 255, 0.8);
border: 1.5px solid rgba(37, 99, 235, 0.12);
position: relative;
overflow: hidden;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
.visualization::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 3px;
background: linear-gradient(90deg, #2563eb, #06b6d4, #2563eb);
animation: gradientShift 3s ease infinite;
}
.visualization:hover {
box-shadow:
0 12px 30px rgba(37, 99, 235, 0.15),
0 4px 12px rgba(37, 99, 235, 0.08),
inset 0 1px 1px rgba(255, 255, 255, 0.9);
border-color: rgba(37, 99, 235, 0.25);
}
.chart-container {
width: 100%;
height: 400px;
position: relative;
border-radius: var(--border-radius-lg);
overflow: hidden;
background: linear-gradient(135deg, rgba(240, 244, 248, 0.5), rgba(226, 232, 240, 0.5));
}
/* Processed Images Tab Styles */
.processed-images-container {
padding: 2rem 0;
}
.main-image-container {
position: relative;
min-height: 400px;
}
.main-image-card {
height: 100%;
}
.main-preview-image {
width: 100%;
max-height: 600px;
object-fit: contain;
}
.image-type-button {
width: 100%;
text-align: left;
padding: 1.25rem;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
background: linear-gradient(135deg, rgba(255, 255, 255, 0.8) 0%, rgba(248, 250, 252, 0.7) 100%);
border: 1.5px solid rgba(37, 99, 235, 0.15);
border-radius: var(--border-radius-lg);
cursor: pointer;
position: relative;
overflow: hidden;
box-shadow: 0 4px 12px rgba(37, 99, 235, 0.08);
}
.image-type-button::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 2px;
background: linear-gradient(90deg, transparent, #2563eb, transparent);
opacity: 0;
transition: opacity 0.3s ease;
}
.image-type-button:hover::before {
opacity: 1;
}
.image-type-button:hover {
transform: translateY(-4px);
box-shadow: 0 12px 30px rgba(37, 99, 235, 0.15);
border-color: rgba(37, 99, 235, 0.3);
background: linear-gradient(135deg, rgba(255, 255, 255, 0.95) 0%, rgba(248, 250, 252, 0.85) 100%);
}
.no-image-placeholder {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
height: 400px;
color: var(--secondary);
background: var(--light);
border-radius: var(--border-radius);
}
.no-image-placeholder i {
font-size: 3rem;
margin-bottom: 1rem;
}
/* Environmental Impact Tab Styles */
.environmental-impact-container {
padding: 2rem 0;
}
.impact-summary-card {
background: white;
border-radius: var(--border-radius-lg);
margin-bottom: 2rem;
}
.impact-metric {
text-align: center;
padding: 1.5rem;
}
.impact-metric i {
font-size: 2rem;
margin-bottom: 0.5rem;
}
.chart-card {
position: relative;
overflow: hidden;
}
.chart-card::before {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.1), transparent);
animation: shimmer 3s infinite;
z-index: 1;
pointer-events: none;
}
.environmental-chart {
width: 100%;
height: 100%;
object-fit: contain;
}
.chart-selector {
background: white;
border-radius: var(--border-radius);
padding: 1rem;
}
.chart-selector-item {
padding: 1rem;
margin-bottom: 0.5rem;
border-radius: var(--border-radius);
transition: all 0.3s ease;
}
.chart-selector-item:hover {
background: var(--light);
}
.chart-selector-item.active {
background: var(--primary-gradient);
color: white;
}
.recommendations-list {
padding-left: 1.5rem;
}
.recommendations-list li {
margin-bottom: 0.75rem;
}
/* Real-time Monitoring and Video Analysis Styles */
.realtime-monitoring-container,
.video-grid {
padding: 2rem 0;
display: grid;
grid-template-columns: 2fr 1fr;
gap: 2rem;
}
.stream-card {
background: white;
border-radius: var(--border-radius-lg);
overflow: hidden;
box-shadow: var(--shadow-md);
}
.stream-header {
padding: 1.5rem;
display: flex;
justify-content: space-between;
align-items: center;
border-bottom: 1px solid #e5e7eb;
}
.stream-header h3 {
margin: 0;
font-size: 1.2rem;
color: var(--dark);
}
.stream-controls {
display: flex;
gap: 1rem;
}
.btn-primary svg,
.btn-danger svg,
.btn-secondary svg {
margin-right: 0.5rem;
vertical-align: middle;
}
.stream-content {
position: relative;
aspect-ratio: 16/9;
background: var(--dark);
overflow: hidden;
display: flex;
align-items: center;
justify-content: center;
}
.stream-placeholder {
text-align: center;
color: var(--light);
}
.stream-placeholder svg {
opacity: 0.5;
margin-bottom: 1rem;
}
.results-sidebar {
display: flex;
flex-direction: column;
gap: 1rem;
}
.results-card {
background: white;
border-radius: var(--border-radius);
padding: 1.5rem;
box-shadow: var(--shadow-md);
}
.results-card h3 {
margin: 0 0 1rem 0;
font-size: 1.1rem;
color: var(--dark);
}
.analysis-metrics {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
gap: 1rem;
margin-bottom: 1.5rem;
}
.metric {
text-align: center;
}
.metric h4 {
margin: 0;
font-size: 0.875rem;
color: var(--secondary);
}
.metric p {
margin: 0.5rem 0 0 0;
font-size: 1.25rem;
font-weight: 600;
color: var(--dark);
}
.detection-card {
background: white;
border-radius: var(--border-radius);
padding: 1rem;
box-shadow: var(--shadow-sm);
transition: transform 0.2s ease-in-out;
}
.detection-card:hover {
transform: translateY(-2px);
box-shadow: var(--shadow-md);
}
.detection-card h4 {
margin: 0 0 0.5rem 0;
font-size: 1rem;
color: var(--dark);
}
.detection-card p {
margin: 0.25rem 0;
font-size: 0.875rem;
color: var(--secondary);
}
.stream-container {
position: relative;
aspect-ratio: 16/9;
background: var(--dark);
border-radius: var(--border-radius) var(--border-radius) 0 0;
overflow: hidden;
}
.stream-feed {
width: 100%;
height: 100%;
object-fit: cover;
}
.stream-placeholder {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
text-align: center;
color: var(--light);
display: flex;
flex-direction: column;
align-items: center;
gap: 1rem;
}
.stream-placeholder svg {
width: 48px;
height: 48px;
opacity: 0.5;
}
.stream-controls {
display: flex;
align-items: center;
justify-content: space-between;
padding: 1rem;
background: white;
border-radius: 0 0 var(--border-radius) var(--border-radius);
border-top: 1px solid #e5e7eb;
}
.metrics-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
gap: 0.75rem;
margin-bottom: 1.5rem;
}
.metric-card {
background: linear-gradient(135deg, rgba(255, 255, 255, 0.95) 0%, rgba(248, 250, 252, 0.85) 100%);
padding: 1.5rem;
border-radius: var(--border-radius-lg);
display: flex;
align-items: center;
gap: 1rem;
box-shadow:
0 8px 20px rgba(37, 99, 235, 0.04),
0 2px 8px rgba(37, 99, 235, 0.02),
inset 0 1px 1px rgba(255, 255, 255, 0.8);
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
position: relative;
overflow: hidden;
border: 1.5px solid rgba(37, 99, 235, 0.08);
}
.metric-card::before {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(37, 99, 235, 0.1), transparent);
transition: left 0.6s ease;
}
.metric-card:hover::before {
left: 100%;
}
.metric-card:hover {
transform: translateY(-4px) scale(1.02);
box-shadow:
0 12px 30px rgba(37, 99, 235, 0.15),
0 4px 12px rgba(37, 99, 235, 0.08),
inset 0 1px 1px rgba(255, 255, 255, 0.9);
border-color: rgba(37, 99, 235, 0.25);
background: linear-gradient(135deg, rgba(255, 255, 255, 1) 0%, rgba(248, 250, 252, 0.95) 100%);
}
.metric-icon {
width: 48px;
height: 48px;
border-radius: var(--border-radius-lg);
display: flex;
align-items: center;
justify-content: center;
color: white;
flex-shrink: 0;
box-shadow: 0 4px 12px rgba(37, 99, 235, 0.25);
position: relative;
overflow: hidden;
}
.metric-icon::after {
content: '';
position: absolute;
top: -50%;
left: -50%;
width: 200%;
height: 200%;
background: radial-gradient(circle, rgba(255, 255, 255, 0.3) 0%, transparent 70%);
animation: shine 3s infinite;
}
@keyframes shine {
0% { transform: translate(0, 0); }
50% { transform: translate(10px, 10px); }
100% { transform: translate(0, 0); }
}
.metric-content {
flex: 1;
min-width: 0;
}
.metric-title {
font-size: 0.875rem;
color: var(--text-secondary);
margin-bottom: 0.25rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.3px;
}
.metric-value {
font-size: 1.1rem;
font-weight: 700;
color: #000000;
line-height: 1.2;
-webkit-background-clip: unset;
-webkit-text-fill-color: initial;
background-clip: unset;
background: none;
}
.metric-subtitle {
font-size: 0.75rem;
color: #000000;
margin-top: 0.25rem;
font-weight: 500;
}
.monitoring-grid {
display: grid;
grid-template-columns: 2fr 1fr;
gap: 2rem;
margin-top: 2rem;
}
.chart-card {
background: var(--glass-bg);
backdrop-filter: blur(12px);
border: 1px solid var(--glass-border);
border-radius: var(--border-radius-xl);
padding: 1.5rem;
box-shadow: var(--shadow-glass);
height: 100%;
display: flex;
flex-direction: column;
}
.chart-card .card-header {
margin-bottom: 1.5rem;
}
.chart-card .card-header h3 {
display: flex;
align-items: center;
gap: 0.75rem;
font-size: 1.1rem;
margin: 0;
color: var(--dark);
}
.chart-card .card-body {
flex: 1;
min-height: 300px;
display: flex;
align-items: center;
justify-content: center;
}
.chart-placeholder {
color: var(--secondary);
text-align: center;
padding: 2rem;
background: rgba(255, 255, 255, 0.5);
border-radius: var(--border-radius);
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
}
.chart-card h3 {
margin: 0 0 1rem 0;
font-size: 1.1rem;
color: var(--dark);
}
.alerts-card {
background: linear-gradient(135deg, rgba(255, 255, 255, 0.95) 0%, rgba(248, 250, 252, 0.85) 100%);
border-radius: var(--border-radius-lg);
padding: 2rem;
box-shadow:
0 8px 20px rgba(37, 99, 235, 0.1),
0 2px 8px rgba(37, 99, 235, 0.05),
inset 0 1px 1px rgba(255, 255, 255, 0.8);
border: 1.5px solid rgba(37, 99, 235, 0.12);
display: flex;
flex-direction: column;
position: relative;
overflow: hidden;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
.alerts-card::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 3px;
background: linear-gradient(90deg, #2563eb, #06b6d4, #2563eb);
animation: gradientShift 3s ease infinite;
}
.alerts-card:hover {
box-shadow:
0 12px 30px rgba(37, 99, 235, 0.15),
0 4px 12px rgba(37, 99, 235, 0.08),
inset 0 1px 1px rgba(255, 255, 255, 0.9);
border-color: rgba(37, 99, 235, 0.25);
}
.alerts-card h3 {
margin: 0 0 1.5rem 0;
font-size: 1.25rem;
color: #2563eb;
display: flex;
align-items: center;
gap: 0.75rem;
font-weight: 800;
text-transform: uppercase;
letter-spacing: 0.3px;
}
.alerts-list {
flex: 1;
overflow-y: auto;
padding-right: 0.5rem;
}
/* Analytics Styles */
.filters-bar {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 2rem;
gap: 1rem;
flex-wrap: wrap;
}
.time-range-selector {
display: flex;
gap: 0.5rem;
flex-wrap: wrap;
}
.filter-btn {
padding: 0.5rem 1rem;
border: 1px solid #e5e7eb;
background: white;
border-radius: var(--border-radius);
font-size: 0.875rem;
color: var(--secondary);
cursor: pointer;
transition: all 0.2s ease-in-out;
}
.filter-btn:hover {
border-color: var(--primary);
color: var(--primary);
}
.filter-btn.active {
background: var(--primary-gradient);
border-color: transparent;
color: white;
}
.charts-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(350px, 1fr));
gap: 1.5rem;
margin-bottom: 2rem;
width: 100%;
}
.loading-state {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 4rem;
color: var(--text-secondary);
background: linear-gradient(135deg, rgba(255, 255, 255, 0.5), rgba(248, 250, 252, 0.3));
border-radius: var(--border-radius-lg);
border: 1px solid rgba(37, 99, 235, 0.08);
min-height: 300px;
}
.spinner {
width: 50px;
height: 50px;
border: 3px solid rgba(37, 99, 235, 0.1);
border-top: 3px solid #2563eb;
border-right: 3px solid #06b6d4;
border-radius: 50%;
animation: spin 1.5s linear infinite;
margin-bottom: 1.5rem;
box-shadow: 0 0 20px rgba(37, 99, 235, 0.3);
}
.summary-cards {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 2rem;
margin-top: 2rem;
}
.summary-card {
background: linear-gradient(135deg, rgba(255, 255, 255, 0.95) 0%, rgba(248, 250, 252, 0.85) 100%);
border-radius: var(--border-radius-lg);
padding: 1.75rem;
box-shadow:
0 8px 20px rgba(37, 99, 235, 0.1),
0 2px 8px rgba(37, 99, 235, 0.05),
inset 0 1px 1px rgba(255, 255, 255, 0.8);
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
border: 1.5px solid rgba(37, 99, 235, 0.12);
position: relative;
overflow: hidden;
}
.summary-card::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 3px;
background: linear-gradient(90deg, #2563eb, #06b6d4, #2563eb);
animation: gradientShift 3s ease infinite;
}
.summary-card:hover {
transform: translateY(-6px) scale(1.02);
box-shadow:
0 16px 40px rgba(37, 99, 235, 0.2),
0 4px 12px rgba(6, 182, 212, 0.1),
inset 0 1px 1px rgba(255, 255, 255, 0.9);
border-color: rgba(37, 99, 235, 0.3);
background: linear-gradient(135deg, rgba(255, 255, 255, 1) 0%, rgba(248, 250, 252, 0.95) 100%);
}
.summary-card h3 {
margin: 0 0 1.25rem 0;
font-size: 1.25rem;
color: #2563eb;
font-weight: 800;
text-transform: uppercase;
letter-spacing: 0.3px;
}
.summary-card ul {
margin: 0;
padding-left: 1.5rem;
list-style: none;
}
.summary-card li {
margin-bottom: 0.75rem;
font-size: 0.9rem;
color: var(--text-secondary);
line-height: 1.6;
font-weight: 500;
position: relative;
padding-left: 1rem;
}
.summary-card li::before {
content: '→';
position: absolute;
left: 0;
color: #06b6d4;
font-weight: 700;
}
.alert-item {
padding: 1.25rem;
border-radius: var(--border-radius-lg);
margin-bottom: 1rem;
border: 1.5px solid #e5e7eb;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
position: relative;
background: linear-gradient(135deg, rgba(255, 255, 255, 0.95) 0%, rgba(248, 250, 252, 0.85) 100%);
overflow: hidden;
box-shadow:
0 4px 12px rgba(0, 0, 0, 0.05),
inset 0 1px 1px rgba(255, 255, 255, 0.8);
}
.alert-item::before {
content: '';
position: absolute;
left: 0;
top: 0;
bottom: 0;
width: 4px;
background: linear-gradient(180deg, transparent, #2563eb, transparent);
opacity: 0;
transition: opacity 0.3s ease;
}
.alert-item:hover::before {
opacity: 1;
}
.alert-item:hover {
transform: translateY(-4px);
box-shadow:
0 8px 24px rgba(37, 99, 235, 0.15),
inset 0 1px 1px rgba(255, 255, 255, 0.8);
border-color: rgba(37, 99, 235, 0.25);
}
.alert-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 0.75rem;
gap: 1rem;
}
.alert-time {
font-size: 0.75rem;
color: var(--text-secondary);
font-weight: 500;
letter-spacing: 0.1px;
}
.alert-severity {
font-size: 0.7rem;
font-weight: 700;
padding: 0.35rem 0.65rem;
border-radius: 999px;
text-transform: uppercase;
letter-spacing: 0.5px;
border: 1px solid;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}
.alert-message {
margin: 0;
font-size: 0.875rem;
color: var(--text-dark);
line-height: 1.5;
font-weight: 500;
}
.severity-critical {
background: linear-gradient(135deg, rgba(239, 68, 68, 0.95), rgba(220, 38, 38, 0.95));
color: white;
border-color: #dc2626;
box-shadow: 0 4px 12px rgba(239, 68, 68, 0.3);
}
.severity-warning {
background: linear-gradient(135deg, rgba(251, 146, 60, 0.95), rgba(234, 88, 12, 0.95));
color: white;
border-color: #ea580c;
box-shadow: 0 4px 12px rgba(251, 146, 60, 0.3);
}
.severity-info {
background: linear-gradient(135deg, rgba(59, 130, 246, 0.95), rgba(37, 99, 235, 0.95));
color: white;
border-color: #2563eb;
box-shadow: 0 4px 12px rgba(37, 99, 235, 0.3);
}
.alert-critical {
border-color: rgba(239, 68, 68, 0.3);
background: linear-gradient(135deg, rgba(239, 68, 68, 0.08), rgba(220, 38, 38, 0.05));
}
.alert-warning {
border-color: var(--warning);
background: rgba(245, 158, 11, 0.1);
}
.alert-info {
border-color: var(--info);
background: rgba(14, 165, 233, 0.1);
}
.no-alerts {
text-align: center;
color: var(--secondary);
font-size: 0.875rem;
margin: 2rem 0;
}
.image-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 1.5rem;
padding: 1.5rem 0;
}
.image-grid-item {
background: white;
border-radius: var(--border-radius-lg);
overflow: hidden;
box-shadow:
0 8px 20px rgba(37, 99, 235, 0.1),
0 2px 8px rgba(37, 99, 235, 0.05),
inset 0 1px 1px rgba(255, 255, 255, 0.8);
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
position: relative;
border: 1.5px solid rgba(37, 99, 235, 0.12);
display: flex;
flex-direction: column;
}
.image-grid-item::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 3px;
background: linear-gradient(90deg, #2563eb, #06b6d4, #2563eb);
animation: gradientShift 3s ease infinite;
z-index: 1;
}
.image-grid-item:hover {
transform: translateY(-8px) scale(1.02);
box-shadow:
0 16px 40px rgba(37, 99, 235, 0.2),
0 4px 12px rgba(6, 182, 212, 0.1),
inset 0 1px 1px rgba(255, 255, 255, 0.9);
border-color: rgba(37, 99, 235, 0.3);
background: linear-gradient(135deg, rgba(255, 255, 255, 1) 0%, rgba(248, 250, 252, 0.95) 100%);
}
.image-grid-image-container {
position: relative;
width: 100%;
overflow: auto;
background: linear-gradient(135deg, #f0f4f8, #e2e8f0);
display: flex;
align-items: center;
justify-content: center;
padding: 1rem;
flex: 1;
min-height: 320px;
}
.image-grid-item img {
width: 100%;
height: auto;
object-fit: contain;
transition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1);
max-height: 100%;
}
.image-grid-item:hover img {
transform: scale(1.08);
filter: brightness(1.1);
}
.image-grid-title {
font-size: 0.875rem;
font-weight: 700;
color: #000000;
padding: 1rem;
background: white;
text-align: center;
border-top: 1px solid rgba(37, 99, 235, 0.1);
letter-spacing: 0.2px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.chart-placeholder {
background: var(--light);
border-radius: var(--border-radius);
padding: 2rem;
text-align: center;
color: var(--secondary);
min-height: 200px;
display: flex;
align-items: center;
justify-content: center;
font-size: 0.875rem;
}
.metrics-card {
background: white;
border-radius: var(--border-radius);
padding: 1.5rem;
display: flex;
align-items: center;
gap: 1rem;
box-shadow: var(--shadow-sm);
}
/* Environmental Page Styles */
.environmental-page {
min-height: 100vh;
background: linear-gradient(135deg, var(--bg-secondary), var(--bg-primary));
}
.environmental-content {
max-width: 1400px;
margin: 0 auto;
padding: 0 2rem;
display: flex;
flex-direction: column;
gap: 2rem;
margin-top: 2rem;
position: relative;
z-index: 1;
}
.metrics-frame {
padding: 2.5rem;
background: linear-gradient(135deg, rgba(255, 255, 255, 0.5) 0%, rgba(248, 250, 252, 0.3) 100%);
border-radius: var(--border-radius-lg);
border: 1px solid rgba(37, 99, 235, 0.08);
position: relative;
overflow: hidden;
}
.metrics-frame::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(45deg, rgba(37, 99, 235, 0.02) 25%, transparent 25%),
linear-gradient(-45deg, rgba(37, 99, 235, 0.02) 25%, transparent 25%),
linear-gradient(45deg, transparent 75%, rgba(37, 99, 235, 0.02) 75%),
linear-gradient(-45deg, transparent 75%, rgba(37, 99, 235, 0.02) 75%);
background-size: 20px 20px;
background-position: 0 0, 0 10px, 10px -10px, -10px 0;
pointer-events: none;
}
.metrics-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 1rem;
}
.metric-card {
display: flex;
align-items: center;
gap: 0.75rem;
padding: 1rem;
background: rgba(255, 255, 255, 0.5);
border-radius: var(--border-radius);
transition: var(--transition-medium);
}
.metric-card:hover {
background: rgba(255, 255, 255, 0.8);
transform: translateY(-2px);
}
.metric-icon {
width: 40px;
height: 40px;
display: flex;
align-items: center;
justify-content: center;
border-radius: var(--border-radius);
color: white;
flex-shrink: 0;
}
.bg-blue { background: var(--gradient-blue); }
.bg-azure { background: var(--gradient-azure); }
.bg-indigo { background: var(--gradient-indigo); }
.bg-cyan { background: var(--gradient-cyan); }
.metric-content {
flex: 1;
min-width: 0;
}
.metric-title {
font-size: 0.75rem;
color: var(--secondary);
margin-bottom: 0.2rem;
font-weight: 500;
line-height: 1.2;
}
.metric-value {
font-size: 1.1rem;
font-weight: 700;
color: var(--primary-dark);
line-height: 1.2;
}
.metric-subtitle {
font-size: 0.65rem;
color: var(--secondary);
margin-top: 0.2rem;
line-height: 1.2;
}
.recommendations-section {
padding: 2rem;
}
.recommendations-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 1.5rem;
margin-top: 1.5rem;
}
.recommendation-card {
display: flex;
align-items: flex-start;
gap: 1rem;
padding: 1.25rem;
transition: var(--transition-medium);
animation: fadeInUp 0.5s ease-out forwards;
opacity: 0;
transform: translateY(20px);
}
.recommendation-card:hover {
transform: translateY(-2px) translateX(5px);
}
.recommendation-card:nth-child(1) { animation-delay: 0.1s; }
.recommendation-card:nth-child(2) { animation-delay: 0.2s; }
.recommendation-card:nth-child(3) { animation-delay: 0.3s; }
.recommendation-card:nth-child(4) { animation-delay: 0.4s; }
.recommendation-icon {
font-size: 1.5rem;
min-width: 40px;
height: 40px;
display: flex;
align-items: center;
justify-content: center;
background: var(--gradient-blue);
border-radius: var(--border-radius);
box-shadow: 0 4px 12px rgba(59, 130, 246, 0.2);
}
.recommendation-text {
font-size: 0.95rem;
color: var(--secondary);
line-height: 1.5;
}
.charts-frame {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(400px, 1fr));
gap: 2rem;
margin-bottom: 2rem;
}
.chart-panel {
min-height: 400px;
display: flex;
flex-direction: column;
background: linear-gradient(135deg, rgba(255, 255, 255, 0.5) 0%, rgba(248, 250, 252, 0.3) 100%);
border-radius: var(--border-radius-lg);
border: 1px solid rgba(37, 99, 235, 0.08);
padding: 2rem;
position: relative;
overflow: hidden;
}
.chart-panel::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 2px;
background: linear-gradient(90deg, #2563eb, #06b6d4, #2563eb);
animation: gradientShift 3s ease infinite;
}
.panel-header {
margin-bottom: 1.5rem;
padding-bottom: 1.5rem;
border-bottom: 1px solid rgba(37, 99, 235, 0.1);
position: relative;
}
.panel-header::after {
content: '';
position: absolute;
bottom: -1px;
left: 0;
width: 40px;
height: 2px;
background: linear-gradient(90deg, #2563eb, #06b6d4);
border-radius: 1px;
}
.panel-header h3 {
display: flex;
align-items: center;
gap: 0.75rem;
margin: 0;
color: #2563eb;
font-size: 1.25rem;
font-weight: 800;
text-transform: uppercase;
letter-spacing: 0.2px;
}
.panel-body {
flex: 1;
display: flex;
flex-direction: column;
}
/* Enhanced Chart Container */
.chart-container {
flex: 1;
display: flex;
align-items: center;
justify-content: center;
color: #e5e7eb;
font-size: 0.9rem;
background: linear-gradient(135deg, rgba(17, 24, 39, 0.95) 0%, rgba(31, 41, 55, 0.90) 100%);
border-radius: 20px;
padding: 1.5rem;
border: 1px solid rgba(59, 130, 246, 0.2);
backdrop-filter: blur(20px);
box-shadow:
0 20px 25px -5px rgba(0, 0, 0, 0.3),
0 10px 10px -5px rgba(0, 0, 0, 0.2),
inset 0 1px 0 rgba(255, 255, 255, 0.1);
transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
position: relative;
overflow: hidden;
font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
}
.chart-container::before {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(59, 130, 246, 0.1), transparent);
transition: left 0.8s ease-in-out;
z-index: 1;
}
.chart-container:hover::before {
left: 100%;
}
.chart-container:hover {
transform: translateY(-4px) scale(1.01);
border-color: rgba(59, 130, 246, 0.4);
box-shadow:
0 32px 64px -12px rgba(59, 130, 246, 0.25),
0 20px 25px -5px rgba(0, 0, 0, 0.4),
0 10px 10px -5px rgba(0, 0, 0, 0.3),
inset 0 1px 0 rgba(255, 255, 255, 0.2);
}
.chart-container.with-gradient {
background: linear-gradient(135deg, rgba(59, 130, 246, 0.1) 0%, rgba(139, 92, 246, 0.08) 50%, rgba(16, 185, 129, 0.06) 100%);
}
.metric-icon {
width: 48px;
height: 48px;
border-radius: var(--border-radius-sm);
display: flex;
align-items: center;
justify-content: center;
color: white;
}
.metric-details {
flex: 1;
}
.metric-title {
font-size: 0.875rem;
color: var(--secondary);
margin-bottom: 0.25rem;
}
.metric-value {
font-size: 1.25rem;
font-weight: 600;
color: var(--dark);
}
/* Material Analysis Styles */
.material-analysis-section {
padding: 2rem;
}
.material-metrics {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 1.5rem;
margin-top: 1.5rem;
}
/* Sustainability Score Styles */
.sustainability-score {
padding: 2rem;
}
.score-display {
display: flex;
align-items: center;
gap: 2rem;
justify-content: center;
}
.score-circle {
width: 120px;
height: 120px;
border-radius: 50%;
background: conic-gradient(var(--primary) 0% 78%, #e5e7eb 78% 100%);
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
position: relative;
}
.score-circle::before {
content: '';
position: absolute;
width: 90px;
height: 90px;
border-radius: 50%;
background: white;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
.score-value {
font-size: 2rem;
font-weight: 700;
color: var(--primary);
position: relative;
z-index: 1;
}
.score-label {
font-size: 0.875rem;
color: var(--secondary);
position: relative;
z-index: 1;
}
.score-description {
flex: 1;
background: linear-gradient(135deg, rgba(255, 255, 255, 0.6), rgba(248, 250, 252, 0.4));
padding: 1rem;
border-radius: var(--border-radius-lg);
border: 1px solid rgba(37, 99, 235, 0.08);
transition: all 0.3s ease;
}
.score-description:hover {
background: linear-gradient(135deg, rgba(255, 255, 255, 0.8), rgba(248, 250, 252, 0.6));
border-color: rgba(37, 99, 235, 0.15);
}
.score-description h3 {
margin: 0 0 0.5rem 0;
color: #2563eb;
font-weight: 700;
font-size: 1rem;
}
.score-description p {
margin: 0;
color: var(--text-secondary);
line-height: 1.6;
font-size: 0.9rem;
}
/* Alert Styles */
.alerts-section {
padding: 2rem;
}
.alerts-list {
display: flex;
flex-direction: column;
gap: 1rem;
}
.alert-card {
display: flex;
align-items: center;
gap: 1rem;
padding: 1rem;
border-radius: var(--border-radius);
border-left: 4px solid;
}
.alert-card.warning {
background: rgba(245, 158, 11, 0.1);
border-left-color: var(--warning);
}
.alert-card.success {
background: rgba(16, 185, 129, 0.1);
border-left-color: var(--success);
}
.alert-content {
flex: 1;
}
.alert-message {
font-weight: 500;
color: var(--dark);
margin-bottom: 0.25rem;
}
.alert-severity {
font-size: 0.75rem;
text-transform: uppercase;
font-weight: 600;
}
.alert-card.warning .alert-severity {
color: var(--warning);
}
.alert-card.success .alert-severity {
color: var(--success);
}
/* Trend Styles */
.trend {
display: flex;
align-items: center;
gap: 0.25rem;
font-size: 0.75rem;
font-weight: 600;
margin-top: 0.5rem;
}
.trend.positive {
color: var(--danger);
}
.trend.negative {
color: var(--success);
}
/* Metric icon backgrounds */
.bg-primary { background: var(--primary-gradient); }
.bg-success { background: var(--success-gradient); }
.bg-warning { background: var(--warning-gradient); }
.bg-danger { background: var(--danger-gradient); }
.bg-info { background: var(--info-gradient); }
.detection-history {
max-height: 300px;
overflow-y: auto;
}
/* Enhanced Professional Glass UI Components */
.glass-panel {
background: var(--glass-bg);
backdrop-filter: blur(20px);
-webkit-backdrop-filter: blur(20px);
border: 1px solid var(--glass-border);
border-radius: var(--border-radius-xl);
box-shadow:
var(--glass-shadow),
inset 0 1px 0 rgba(255, 255, 255, 0.1);
padding: 2rem;
transition: all var(--transition-medium);
position: relative;
overflow: hidden;
}
.glass-panel::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 1px;
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.4), transparent);
}
.glass-panel:hover {
transform: translateY(-4px);
box-shadow:
0 16px 50px rgba(59, 130, 246, 0.15),
inset 0 1px 0 rgba(255, 255, 255, 0.2);
border-color: rgba(59, 130, 246, 0.3);
}
/* Professional Metric Cards */
.metric-card {
background: linear-gradient(135deg, rgba(255, 255, 255, 0.9), rgba(255, 255, 255, 0.7));
backdrop-filter: blur(15px);
border: 1px solid rgba(255, 255, 255, 0.2);
border-radius: var(--border-radius-lg);
padding: 1rem;
display: flex;
align-items: center;
gap: 0.75rem;
transition: all var(--transition-medium);
position: relative;
overflow: hidden;
box-shadow:
0 8px 25px rgba(0, 0, 0, 0.08),
inset 0 1px 0 rgba(255, 255, 255, 0.4);
}
.metric-card::before {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent);
transition: left 0.6s ease;
}
.metric-card:hover::before {
left: 100%;
}
.metric-card:hover {
transform: translateY(-3px) scale(1.02);
box-shadow:
0 12px 35px rgba(0, 0, 0, 0.12),
0 0 25px rgba(59, 130, 246, 0.1),
inset 0 1px 0 rgba(255, 255, 255, 0.5);
border-color: rgba(59, 130, 246, 0.3);
}
/* Enhanced Navigation */
.nav-tab {
background: linear-gradient(135deg, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0.6));
backdrop-filter: blur(12px);
border: 1px solid rgba(255, 255, 255, 0.3);
border-radius: var(--border-radius-lg);
transition: all var(--transition-medium);
position: relative;
overflow: hidden;
}
.nav-tab::after {
content: '';
position: absolute;
bottom: 0;
left: 50%;
width: 0;
height: 2px;
background: var(--primary-gradient);
transition: all var(--transition-medium);
transform: translateX(-50%);
}
.nav-tab:hover::after,
.nav-tab.active::after {
width: 100%;
}
.nav-tab.active {
background: var(--primary-gradient);
color: white;
box-shadow:
0 8px 25px rgba(59, 130, 246, 0.3),
inset 0 1px 0 rgba(255, 255, 255, 0.2);
animation: pulse-glow 2s infinite;
}
@keyframes pulse-glow {
0%, 100% {
box-shadow:
0 8px 25px rgba(59, 130, 246, 0.3),
inset 0 1px 0 rgba(255, 255, 255, 0.2);
}
50% {
box-shadow:
0 12px 35px rgba(59, 130, 246, 0.5),
inset 0 1px 0 rgba(255, 255, 255, 0.3);
}
}
/* Professional Card Styling */
.card {
background: linear-gradient(135deg, rgba(255, 255, 255, 0.95), rgba(255, 255, 255, 0.85));
backdrop-filter: blur(20px);
border: 1px solid rgba(255, 255, 255, 0.3);
border-radius: var(--border-radius-xl);
box-shadow:
0 10px 30px rgba(0, 0, 0, 0.08),
inset 0 1px 0 rgba(255, 255, 255, 0.4);
padding: 2rem;
margin-bottom: 2rem;
transition: all var(--transition-medium);
position: relative;
overflow: hidden;
}
.card::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 3px;
background: var(--primary-gradient);
border-radius: var(--border-radius-xl) var(--border-radius-xl) 0 0;
}
.card:hover {
transform: translateY(-5px) scale(1.01);
box-shadow:
0 20px 50px rgba(0, 0, 0, 0.12),
0 0 30px rgba(59, 130, 246, 0.1),
inset 0 1px 0 rgba(255, 255, 255, 0.5);
border-color: rgba(59, 130, 246, 0.4);
}
/* Enhanced Buttons - InfraVision AI Theme */
.btn-primary {
background: linear-gradient(135deg, var(--primary), var(--accent-blue));
border: none;
color: white;
padding: 1rem 2.5rem;
border-radius: var(--border-radius-xl);
font-weight: 700;
font-size: 1rem;
cursor: pointer;
transition: all var(--transition-medium);
position: relative;
overflow: hidden;
box-shadow:
0 8px 25px rgba(0, 212, 255, 0.4),
inset 0 1px 0 rgba(255, 255, 255, 0.2);
text-transform: uppercase;
letter-spacing: 1px;
border: 1px solid rgba(0, 212, 255, 0.3);
}
.btn-primary::before {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.4), transparent);
transition: left 0.6s;
}
.btn-primary:hover::before {
left: 100%;
}
.btn-primary:hover {
transform: translateY(-2px) scale(1.05);
box-shadow:
0 15px 35px rgba(0, 212, 255, 0.6),
0 0 40px rgba(139, 92, 246, 0.3),
inset 0 1px 0 rgba(255, 255, 255, 0.3);
border-color: rgba(0, 212, 255, 0.6);
}
.btn-primary:active {
transform: translateY(-1px) scale(1.02);
}
.btn-secondary {
background: rgba(255, 255, 255, 0.1);
border: 1px solid rgba(255, 255, 255, 0.2);
color: white;
padding: 1rem 2rem;
border-radius: var(--border-radius-lg);
font-weight: 600;
cursor: pointer;
transition: all var(--transition-medium);
backdrop-filter: blur(10px);
}
.btn-secondary:hover {
background: rgba(255, 255, 255, 0.2);
border-color: rgba(0, 212, 255, 0.5);
box-shadow: 0 8px 25px rgba(0, 212, 255, 0.2);
transform: translateY(-2px);
}
/* Enhanced Loading States */
.loading-state {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 4rem;
color: var(--secondary);
background: linear-gradient(135deg, rgba(255, 255, 255, 0.9), rgba(255, 255, 255, 0.7));
border-radius: var(--border-radius-xl);
backdrop-filter: blur(15px);
}
.pulse-loader {
width: 50px;
height: 50px;
border-radius: 50%;
background: var(--primary-gradient);
animation: pulse-scale 1.5s ease-in-out infinite;
margin-bottom: 1.5rem;
position: relative;
}
.pulse-loader::before {
content: '';
position: absolute;
top: -10px;
left: -10px;
right: -10px;
bottom: -10px;
border-radius: 50%;
border: 2px solid var(--primary);
opacity: 0.3;
animation: pulse-ring 1.5s ease-in-out infinite;
}
@keyframes pulse-scale {
0%, 100% { transform: scale(1); }
50% { transform: scale(1.1); }
}
@keyframes pulse-ring {
0% { transform: scale(0.8); opacity: 0.7; }
100% { transform: scale(1.2); opacity: 0; }
}
/* Professional Status Bar */
.status-bar {
background: linear-gradient(135deg, rgba(0, 0, 0, 0.8), rgba(0, 0, 0, 0.9));
backdrop-filter: blur(20px);
border-top: 1px solid rgba(255, 255, 255, 0.1);
padding: 1rem 2rem;
display: flex;
justify-content: space-between;
align-items: center;
gap: 2rem;
color: white;
font-size: 0.875rem;
position: relative;
overflow: hidden;
}
.status-bar::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 1px;
background: linear-gradient(90deg, transparent, rgba(59, 130, 246, 0.6), transparent);
}
.status-item {
display: flex;
align-items: center;
gap: 0.5rem;
opacity: 0.9;
transition: opacity var(--transition-fast);
}
.status-item:hover {
opacity: 1;
}
.status-icon.connected {
color: var(--success);
animation: pulse 2s infinite;
}
.status-icon.disconnected {
color: var(--danger);
}
.status-icon.alert {
color: var(--warning);
animation: blink 1s infinite;
}
@keyframes blink {
0%, 50% { opacity: 1; }
51%, 100% { opacity: 0.5; }
}
/* Enhanced Hero Section */
.hero-section {
background-image:
linear-gradient(135deg, rgba(15, 23, 42, 0.95), rgba(30, 41, 59, 0.9)),
url('https://images.unsplash.com/photo-1518005068251-37900150dfca?ixlib=rb-4.0.3&auto=format&fit=crop&w=2070&q=80');
background-size: cover;
background-position: center;
background-attachment: fixed;
position: relative;
overflow: hidden;
}
.hero-section::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
radial-gradient(circle at 30% 20%, rgba(59, 130, 246, 0.2) 0%, transparent 50%),
radial-gradient(circle at 70% 80%, rgba(139, 92, 246, 0.2) 0%, transparent 50%);
z-index: 1;
}
.hero-content {
position: relative;
z-index: 2;
}
/* Professional Footer */
.app-footer {
background: linear-gradient(135deg, rgba(15, 23, 42, 0.95), rgba(30, 41, 59, 0.9));
color: white;
padding: 3rem 2rem 1rem;
margin-top: auto;
position: relative;
overflow: hidden;
}
.app-footer::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 1px;
background: linear-gradient(90deg, transparent, rgba(59, 130, 246, 0.6), transparent);
}
.footer-content {
max-width: 1400px;
margin: 0 auto;
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 2rem;
}
.footer-section h4 {
color: white !important;
margin-bottom: 1rem;
font-size: 1.25rem;
font-weight: 600;
}
.tech-badge {
display: inline-block;
background: var(--primary-gradient);
color: white;
padding: 0.25rem 0.75rem;
border-radius: var(--border-radius);
font-size: 0.75rem;
font-weight: 500;
margin: 0.25rem 0.25rem 0.25rem 0;
transition: all var(--transition-fast);
}
.tech-badge:hover {
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(59, 130, 246, 0.3);
}
.social-link {
display: inline-block;
color: rgba(255, 255, 255, 0.8);
text-decoration: none;
margin-right: 1rem;
transition: all var(--transition-fast);
position: relative;
}
.social-link:hover {
color: var(--primary-light);
transform: translateY(-2px);
}
.social-link::after {
content: '';
position: absolute;
bottom: -2px;
left: 0;
width: 0;
height: 1px;
background: var(--primary-light);
transition: width var(--transition-medium);
}
.social-link:hover::after {
width: 100%;
}
/* Professional Form Controls */
.form-control {
background: rgba(255, 255, 255, 0.9);
border: 1px solid rgba(255, 255, 255, 0.3);
border-radius: var(--border-radius);
padding: 0.75rem;
font-size: 0.95rem;
transition: all var(--transition-medium);
backdrop-filter: blur(10px);
}
.form-control:focus {
outline: none;
border-color: var(--primary);
box-shadow:
0 0 0 3px rgba(59, 130, 246, 0.1),
0 4px 12px rgba(59, 130, 246, 0.15);
background: rgba(255, 255, 255, 0.95);
}
/* Enhanced Progress Bar */
.progress-bar-wrapper {
width: 100%;
height: 8px;
background: rgba(255, 255, 255, 0.2);
border-radius: 4px;
overflow: hidden;
position: relative;
}
.progress-bar-fill {
height: 100%;
background: var(--primary-gradient);
border-radius: 4px;
transition: width 0.5s ease;
position: relative;
overflow: hidden;
}
.progress-bar-fill::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.3), transparent);
animation: shimmer 2s infinite;
}
/* Responsive Design Enhancements */
@media (max-width: 768px) {
.hero-content {
grid-template-columns: 1fr;
text-align: center;
gap: 2rem;
}
.hero-title {
font-size: 2.5rem;
}
.nav-tabs {
flex-direction: column;
gap: 0.5rem;
}
.nav-tab {
text-align: center;
}
.metrics-grid {
grid-template-columns: 1fr;
}
.dashboard-container {
padding: 1rem;
min-height: auto;
margin-top: 0;
}
.nav-tabs-container {
margin-bottom: 1rem;
}
.card {
margin-bottom: 1rem;
}
}
@media (max-width: 480px) {
.hero-title {
font-size: 2rem;
}
.hero-subtitle {
font-size: 1rem;
}
.card {
padding: 1.5rem;
}
.status-bar {
flex-direction: column;
gap: 1rem;
text-align: center;
}
}
/* Analytics Page Styles */
.analytics-page .glass-header {
background: var(--gradient-indigo);
}
.header-main {
margin-bottom: 1.5rem;
}
.header-controls {
display: flex;
gap: 1rem;
align-items: center;
flex-wrap: wrap;
margin-top: 1rem;
}
.header-content {
display: flex;
flex-direction: column;
gap: 1rem;
max-width: 1400px;
margin: 0 auto;
width: 100%;
}
@media (min-width: 768px) {
.header-content {
flex-direction: row;
justify-content: space-between;
align-items: center;
}
.header-controls {
margin-top: 0;
}
}
.glass-controls {
background: rgba(255, 255, 255, 0.2);
backdrop-filter: blur(8px);
border-radius: var(--border-radius-lg);
padding: 0.5rem;
display: flex;
gap: 0.5rem;
}
.time-btn {
background: transparent;
border: none;
color: white;
padding: 0.5rem 1rem;
border-radius: var(--border-radius);
cursor: pointer;
transition: var(--transition-fast);
font-weight: 500;
}
.time-btn:hover {
background: rgba(255, 255, 255, 0.1);
}
.time-btn.active {
background: white;
color: var(--primary-dark);
}
.btn-glass {
background: rgba(255, 255, 255, 0.2);
backdrop-filter: blur(8px);
border: 1px solid rgba(255, 255, 255, 0.3);
color: white;
padding: 0.75rem 1.25rem;
border-radius: var(--border-radius-lg);
display: flex;
align-items: center;
gap: 0.5rem;
transition: var(--transition-medium);
cursor: pointer;
}
.btn-glass:hover {
background: rgba(255, 255, 255, 0.3);
transform: translateY(-2px);
}
.analytics-content {
margin-top: 2rem;
position: relative;
z-index: 1;
display: flex;
flex-direction: column;
gap: 2rem;
max-width: 1400px;
margin-left: auto;
margin-right: auto;
padding: 0 1rem;
}
.pulse-loader {
width: 50px;
height: 50px;
border-radius: 50%;
background: var(--gradient-blue);
animation: pulse 1.5s ease-in-out infinite;
}
.insights-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(350px, 1fr));
gap: 1.5rem;
margin-top: 2rem;
width: 100%;
}
.findings-list {
display: flex;
flex-direction: column;
gap: 1rem;
}
.finding-item {
display: flex;
gap: 1rem;
align-items: flex-start;
padding: 1rem;
background: rgba(255, 255, 255, 0.5);
border-radius: var(--border-radius);
transition: var(--transition-medium);
}
.finding-item:hover {
background: rgba(255, 255, 255, 0.8);
transform: translateX(5px);
}
.finding-number {
background: var(--gradient-indigo);
color: white;
width: 24px;
height: 24px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-weight: 600;
font-size: 0.875rem;
}
.finding-content {
color: var(--secondary);
line-height: 1.5;
}
.recommendations-list {
display: flex;
flex-direction: column;
gap: 1rem;
}
.recommendation-item {
display: flex;
gap: 1rem;
align-items: flex-start;
padding: 1rem;
background: rgba(255, 255, 255, 0.5);
border-radius: var(--border-radius);
transition: var(--transition-medium);
}
.recommendation-item:hover {
background: rgba(255, 255, 255, 0.8);
transform: translateX(5px);
}
.recommendation-icon {
width: 32px;
height: 32px;
display: flex;
align-items: center;
justify-content: center;
background: var(--gradient-blue);
border-radius: var(--border-radius);
color: white;
font-size: 1.25rem;
}
.recommendation-content {
color: var(--secondary);
line-height: 1.5;
}
/* Responsive Design */
@media (max-width: 768px) {
.glass-header {
padding: 1.5rem;
text-align: center;
}
.header-controls {
flex-direction: column;
align-items: stretch;
}
.metrics-grid {
grid-template-columns: 1fr;
}
.charts-frame {
grid-template-columns: 1fr;
}
.chart-panel {
min-height: 350px;
}
.recommendation-card {
flex-direction: column;
text-align: center;
}
.recommendation-icon {
margin: 0 auto;
}
.insights-grid {
grid-template-columns: 1fr;
}
.finding-item,
.recommendation-item {
flex-direction: column;
align-items: center;
text-align: center;
}
.finding-number,
.recommendation-icon {
margin-bottom: 0.5rem;
}
}
/* Alert Styles */
.alert {
padding: 1rem 1.5rem;
border-radius: var(--border-radius);
margin-bottom: 1rem;
display: flex;
align-items: center;
gap: 0.5rem;
font-weight: 500;
}
.alert-error {
background: rgba(239, 68, 68, 0.1);
border: 1px solid rgba(239, 68, 68, 0.2);
color: var(--danger);
}
.alert-success {
background: rgba(16, 185, 129, 0.1);
border: 1px solid rgba(16, 185, 129, 0.2);
color: var(--success);
}
.alert-warning {
background: rgba(245, 158, 11, 0.1);
border: 1px solid rgba(245, 158, 11, 0.2);
color: var(--warning);
}
.alert-info {
background: rgba(14, 165, 233, 0.1);
border: 1px solid rgba(14, 165, 233, 0.2);
color: var(--info);
}
/* Progress Container */
.progress-container {
background: white;
border-radius: var(--border-radius);
padding: 2rem;
text-align: center;
box-shadow: var(--shadow-sm);
border: 1px solid #e5e7eb;
}
.progress-bar-wrapper {
width: 100%;
height: 8px;
background: #e5e7eb;
border-radius: 4px;
overflow: hidden;
margin-bottom: 1rem;
}
.progress-bar-fill {
height: 100%;
background: var(--primary-gradient);
border-radius: 4px;
transition: width 0.3s ease;
}
.progress-text {
color: var(--secondary);
font-size: 0.875rem;
}
/* Preview Image */
.preview-image {
width: 100%;
max-height: 600px;
object-fit: contain;
border-radius: var(--border-radius);
border: 1px solid #e5e7eb;
box-shadow: var(--shadow-sm);
}
/* Badge Styles */
.badge {
display: inline-block;
padding: 0.4rem 0.75rem;
border-radius: 999px;
font-size: 0.7rem;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.5px;
border: 1px solid;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
position: relative;
overflow: hidden;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}
.badge::before {
content: '';
position: absolute;
top: -50%;
left: -50%;
width: 200%;
height: 200%;
background: radial-gradient(circle, rgba(255, 255, 255, 0.2) 0%, transparent 70%);
animation: badgeShine 3s infinite;
opacity: 0;
}
.badge:hover::before {
opacity: 1;
}
@keyframes badgeShine {
0% { transform: translate(0, 0); }
50% { transform: translate(5px, 5px); }
100% { transform: translate(0, 0); }
}
.bg-success {
background: linear-gradient(135deg, #10b981, #059669);
color: white;
border-color: #047857;
box-shadow: 0 4px 12px rgba(16, 185, 129, 0.3);
}
.bg-warning {
background: linear-gradient(135deg, #f59e0b, #d97706);
color: white;
border-color: #b45309;
box-shadow: 0 4px 12px rgba(245, 158, 11, 0.3);
}
.bg-danger {
background: linear-gradient(135deg, #ef4444, #dc2626);
color: white;
border-color: #991b1b;
box-shadow: 0 4px 12px rgba(239, 68, 68, 0.3);
}
.bg-info {
background: linear-gradient(135deg, #3b82f6, #2563eb);
color: white;
border-color: #1e40af;
box-shadow: 0 4px 12px rgba(37, 99, 235, 0.3);
}
.bg-primary {
background: linear-gradient(135deg, #2563eb, #1e40af);
color: white;
border-color: #1e3a8a;
box-shadow: 0 4px 12px rgba(37, 99, 235, 0.3);
}
.bg-secondary {
background: linear-gradient(135deg, #64748b, #475569);
color: white;
border-color: #334155;
box-shadow: 0 4px 12px rgba(100, 116, 139, 0.3);
}
/* Probability Bar Styles */
.probability-item {
margin-bottom: 1rem;
}
.probability-header {
display: flex;
justify-content: space-between;
margin-bottom: 0.5rem;
}
.probability-label {
font-weight: 600;
color: var(--dark);
}
.probability-value {
color: var(--secondary);
}
.probability-bar-container {
width: 100%;
height: 8px;
background: #e5e7eb;
border-radius: 4px;
overflow: hidden;
}
.probability-bar {
height: 100%;
background: var(--primary);
border-radius: 4px;
transition: width 0.3s ease;
}
/* Crack Item Styles */
.crack-item {
padding: 1rem;
background: var(--light);
border-radius: var(--border-radius);
border: 1px solid #e5e7eb;
margin-bottom: 1rem;
display: flex;
justify-content: space-between;
align-items: center;
}
.crack-item span {
font-weight: 600;
color: var(--dark);
}
/* Section Title */
.section-title {
display: flex;
align-items: center;
gap: 1rem;
font-size: 1.5rem;
font-weight: 800;
color: #000000;
margin-bottom: 1.5rem;
position: relative;
padding-bottom: 1rem;
}
.section-title::before {
content: '';
position: absolute;
bottom: 0;
left: 0;
width: 60px;
height: 4px;
background: linear-gradient(90deg, #2563eb, #06b6d4);
border-radius: 2px;
box-shadow: 0 0 12px rgba(37, 99, 235, 0.4);
}
.section-title::after {
content: '';
position: absolute;
bottom: 0;
left: 70px;
right: 0;
height: 1px;
background: linear-gradient(90deg, rgba(37, 99, 235, 0.2), transparent);
}
/* Upload Area Large */
.upload-area-large {
border: 2px dashed #e5e7eb;
border-radius: var(--border-radius);
padding: 3rem;
text-align: center;
cursor: pointer;
transition: all 0.3s ease;
background: var(--light);
}
.upload-area-large:hover {
border-color: var(--primary);
background: rgba(59, 130, 246, 0.05);
}
/* Spinning Animation */
.spinning {
animation: spin 1s linear infinite;
}
/* Close Button */
.close-btn {
background: none;
border: none;
font-size: 1.5rem;
cursor: pointer;
color: var(--secondary);
margin-left: auto;
padding: 0;
width: 24px;
height: 24px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 50%;
transition: all 0.2s ease;
}
.close-btn:hover {
background: rgba(0, 0, 0, 0.1);
color: var(--dark);
}
/* Material Classification Styles */
.material-color-section {
padding: 1.5rem;
background: rgba(255, 255, 255, 0.8);
border-radius: var(--border-radius);
border: 1px solid var(--glass-border);
}
.color-display {
display: flex;
align-items: center;
gap: 1rem;
padding: 1rem;
background: var(--bg-secondary);
border-radius: var(--border-radius);
}
.color-swatch {
width: 60px;
height: 60px;
border-radius: 50%;
border: 3px solid var(--glass-border);
box-shadow: 0 4px 12px rgba(0,0,0,0.1);
}
.color-info {
flex: 1;
}
.bar-chart-container {
display: flex;
flex-direction: column;
gap: 1rem;
}
.bar-chart-item {
padding: 1rem;
background: rgba(255, 255, 255, 0.6);
border-radius: var(--border-radius);
border: 1px solid var(--glass-border);
transition: var(--transition-medium);
}
.bar-chart-item:hover {
background: rgba(255, 255, 255, 0.9);
transform: translateY(-2px);
}
.bar-chart-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 0.75rem;
}
.bar-chart-label {
font-weight: 600;
color: var(--dark);
font-size: 1rem;
}
.bar-chart-value {
color: var(--secondary);
font-size: 0.875rem;
font-weight: 500;
}
.bar-chart-bar-container {
width: 100%;
height: 14px;
background: rgba(0,0,0,0.1);
border-radius: 7px;
overflow: hidden;
position: relative;
}
.bar-chart-bar {
height: 100%;
border-radius: 7px;
transition: width 0.8s cubic-bezier(0.4, 0, 0.2, 1);
}
.properties-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 1rem;
}
.property-item {
padding: 1rem;
background: rgba(255, 255, 255, 0.7);
border-radius: var(--border-radius);
border: 1px solid var(--glass-border);
transition: var(--transition-medium);
}
.property-item:hover {
background: rgba(255, 255, 255, 0.9);
transform: translateY(-1px);
}
/* Settings Styles */
.settings-section {
padding: 2rem;
background: linear-gradient(135deg, rgba(255, 255, 255, 0.95) 0%, rgba(248, 250, 252, 0.85) 100%);
border-radius: var(--border-radius-lg);
border: 1.5px solid rgba(37, 99, 235, 0.12);
box-shadow:
0 8px 20px rgba(37, 99, 235, 0.1),
0 2px 8px rgba(37, 99, 235, 0.05),
inset 0 1px 1px rgba(255, 255, 255, 0.8);
position: relative;
overflow: hidden;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
.settings-section::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 3px;
background: linear-gradient(90deg, #2563eb, #06b6d4, #2563eb);
animation: gradientShift 3s ease infinite;
}
.settings-section:hover {
box-shadow:
0 12px 30px rgba(37, 99, 235, 0.15),
0 4px 12px rgba(37, 99, 235, 0.08),
inset 0 1px 1px rgba(255, 255, 255, 0.9);
}
.settings-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 2rem;
}
.setting-item {
padding: 1.5rem;
background: linear-gradient(135deg, rgba(255, 255, 255, 0.8) 0%, rgba(248, 250, 252, 0.6) 100%);
border-radius: var(--border-radius-lg);
border: 1px solid rgba(37, 99, 235, 0.1);
box-shadow: 0 4px 12px rgba(37, 99, 235, 0.05);
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
position: relative;
}
.setting-item:hover {
transform: translateY(-2px);
box-shadow: 0 8px 24px rgba(37, 99, 235, 0.12);
border-color: rgba(37, 99, 235, 0.2);
background: linear-gradient(135deg, rgba(255, 255, 255, 0.95) 0%, rgba(248, 250, 252, 0.8) 100%);
}
.setting-item label {
display: block;
font-weight: 600;
color: var(--dark);
margin-bottom: 0.75rem;
font-size: 0.95rem;
}
.setting-item input[type="range"] {
-webkit-appearance: none;
appearance: none;
width: 100%;
height: 6px;
border-radius: 3px;
background: var(--glass-border);
outline: none;
margin-bottom: 0.5rem;
}
.setting-item input[type="range"]::-webkit-slider-thumb {
-webkit-appearance: none;
appearance: none;
width: 20px;
height: 20px;
border-radius: 50%;
background: var(--primary);
cursor: pointer;
box-shadow: 0 2px 6px rgba(59, 130, 246, 0.3);
}
.setting-item input[type="range"]::-moz-range-thumb {
width: 20px;
height: 20px;
border-radius: 50%;
background: var(--primary);
cursor: pointer;
border: none;
box-shadow: 0 2px 6px rgba(59, 130, 246, 0.3);
}
/* Footer Styles */
.app-footer {
background: linear-gradient(135deg, #ffffff 0%, #f8fafc 50%, #f1f5f9 100%);
border-top: 2px solid #2563eb;
margin-top: 4rem;
padding: 3rem 0 1.5rem 0;
position: relative;
overflow: hidden;
box-shadow: 0 -4px 20px rgba(37, 99, 235, 0.1);
}
.app-footer::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 3px;
background: linear-gradient(90deg, transparent, #2563eb, #06b6d4, #2563eb, transparent);
box-shadow: 0 0 20px rgba(37, 99, 235, 0.5);
}
.app-footer::after {
content: '';
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 1px;
background: linear-gradient(90deg, transparent, rgba(37, 99, 235, 0.2), transparent);
}
.footer-content {
max-width: 1400px;
margin: 0 auto;
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 3rem;
padding: 0 2rem;
margin-bottom: 2rem;
}
.footer-section h4 {
color: #2563eb;
margin-bottom: 1rem;
font-size: 1.1rem;
font-weight: 800;
text-transform: uppercase;
letter-spacing: 0.3px;
position: relative;
padding-bottom: 0.75rem;
}
.footer-section h4::after {
content: '';
position: absolute;
bottom: 0;
left: 0;
width: 40px;
height: 2px;
background: linear-gradient(90deg, #2563eb, #06b6d4);
border-radius: 1px;
}
.footer-section p {
color: #64748b;
line-height: 1.7;
margin-bottom: 1rem;
font-weight: 500;
}
.footer-links {
display: flex;
flex-direction: column;
gap: 0.75rem;
}
.footer-links a {
color: #64748b;
text-decoration: none;
transition: all 0.3s ease;
font-size: 0.9rem;
font-weight: 500;
position: relative;
padding-left: 0.5rem;
}
.footer-links a::before {
content: '→';
position: absolute;
left: -1rem;
color: #06b6d4;
opacity: 0;
transition: all 0.3s ease;
}
.footer-links a:hover {
color: #2563eb;
padding-left: 1rem;
}
.footer-links a:hover::before {
opacity: 1;
left: 0;
}
.tech-stack {
display: flex;
flex-wrap: wrap;
gap: 0.5rem;
}
.tech-badge {
background: linear-gradient(135deg, rgba(37, 99, 235, 0.15), rgba(6, 182, 212, 0.08));
color: #2563eb;
padding: 0.4rem 0.9rem;
border-radius: 999px;
font-size: 0.8rem;
font-weight: 700;
border: 1.5px solid rgba(37, 99, 235, 0.25);
transition: all 0.3s ease;
box-shadow: 0 2px 8px rgba(37, 99, 235, 0.1);
text-transform: uppercase;
letter-spacing: 0.2px;
}
.tech-badge:hover {
background: linear-gradient(135deg, rgba(37, 99, 235, 0.25), rgba(6, 182, 212, 0.15));
box-shadow: 0 4px 12px rgba(37, 99, 235, 0.2);
border-color: rgba(37, 99, 235, 0.4);
transform: translateY(-2px);
}
.social-links {
display: flex;
gap: 1rem;
}
.social-link {
color: var(--primary);
text-decoration: none;
font-weight: 500;
transition: var(--transition-fast);
padding: 0.5rem 1rem;
border-radius: var(--border-radius);
background: rgba(59, 130, 246, 0.1);
border: 1px solid rgba(59, 130, 246, 0.2);
}
.social-link:hover {
background: var(--primary);
color: white;
transform: translateY(-1px);
}
.footer-bottom {
border-top: 2px solid rgba(37, 99, 235, 0.2);
padding-top: 2.5rem;
text-align: center;
background: linear-gradient(180deg, rgba(37, 99, 235, 0.02), transparent);
margin: 2rem 2rem 0 2rem;
padding-bottom: 1.5rem;
position: relative;
overflow: hidden;
}
.footer-bottom::before {
content: '';
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 1px;
background: linear-gradient(90deg, transparent, rgba(37, 99, 235, 0.2), transparent);
}
.footer-bottom p {
color: #475569;
font-size: 0.95rem;
margin: 0.75rem 0 1rem 0;
font-weight: 600;
letter-spacing: 0.3px;
position: relative;
z-index: 1;
}
/* SDG Badges Styles */
.sdg-badges {
display: flex;
justify-content: center;
align-items: center;
gap: 1.5rem;
margin: 1.5rem 0;
flex-wrap: wrap;
position: relative;
z-index: 2;
}
.sdg-badge {
display: flex;
align-items: center;
justify-content: center;
width: 70px;
height: 70px;
border-radius: 8px;
background: linear-gradient(135deg, rgba(37, 99, 235, 0.1), rgba(6, 182, 212, 0.08));
border: 2px solid rgba(37, 99, 235, 0.3);
transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
position: relative;
overflow: hidden;
cursor: pointer;
box-shadow: 0 4px 15px rgba(37, 99, 235, 0.15);
}
.sdg-badge::before {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.3), transparent);
transition: left 0.6s ease;
}
.sdg-badge:hover::before {
left: 100%;
}
.sdg-badge:hover {
transform: translateY(-8px) scale(1.1);
border-color: rgba(37, 99, 235, 0.6);
box-shadow: 0 12px 35px rgba(37, 99, 235, 0.3), 0 0 30px rgba(6, 182, 212, 0.2);
background: linear-gradient(135deg, rgba(37, 99, 235, 0.2), rgba(6, 182, 212, 0.15));
}
.sdg-badge svg {
width: 100%;
height: 100%;
object-fit: contain;
padding: 4px;
}
.sdg-badge span {
position: absolute;
bottom: -25px;
font-size: 0.65rem;
font-weight: 700;
color: #2563eb;
white-space: nowrap;
opacity: 0;
transition: all 0.3s ease;
}
.sdg-badge:hover span {
bottom: -45px;
opacity: 1;
}
/* Responsive Footer */
@media (max-width: 768px) {
.app-footer {
padding: 2rem 0 1rem 0;
}
.footer-content {
grid-template-columns: 1fr;
gap: 1.5rem;
padding: 0 1rem;
}
.footer-section {
text-align: center;
}
.tech-stack {
justify-content: center;
}
.social-links {
justify-content: center;
}
.footer-bottom p {
font-size: 0.8rem;
}
}
/* Video Analysis Styles */
.video-grid {
display: grid;
grid-template-columns: 2fr 1fr;
gap: 2rem;
margin-top: 2rem;
}
.video-preview-section {
text-align: center;
}
.processing-section {
text-align: center;
padding: 2rem;
}
.video-results {
margin-top: 2rem;
}
.frame-grid {
margin-top: 1rem;
}
.frame-card {
transition: var(--transition-medium);
}
.frame-card:hover {
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(0,0,0,0.1);
}
.results-sidebar {
display: flex;
flex-direction: column;
gap: 1rem;
}
.detection-card {
transition: var(--transition-medium);
}
.detection-card:hover {
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(0,0,0,0.1);
}
.stream-placeholder {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 4rem 2rem;
background: var(--light);
border-radius: var(--border-radius);
border: 2px dashed #e5e7eb;
color: var(--secondary);
text-align: center;
}
.stream-placeholder svg {
margin-bottom: 1rem;
opacity: 0.5;
}
.stream-content {
position: relative;
}
/* Responsive adjustments for video analysis */
@media (max-width: 768px) {
.video-grid {
grid-template-columns: 1fr;
}
.frame-grid {
grid-template-columns: 1fr;
}
}
/* Status Bar Styles */
.status-bar {
position: absolute;
bottom: 0;
left: 0;
right: 0;
background: rgba(0, 0, 0, 0.8);
backdrop-filter: blur(10px);
border-top: 1px solid rgba(255, 255, 255, 0.1);
padding: 0.75rem 2rem;
display: flex;
justify-content: center;
gap: 2rem;
flex-wrap: wrap;
}
.status-item {
display: flex;
align-items: center;
gap: 0.5rem;
color: rgba(255, 255, 255, 0.9);
font-size: 0.9rem;
}
.status-icon {
transition: all 0.3s ease;
}
.status-icon.connected {
color: #10b981;
}
.status-icon.disconnected {
color: #ef4444;
}
.status-icon.alert {
color: #f59e0b;
animation: pulse 2s infinite;
}
.status-text {
font-weight: 500;
}
@keyframes pulse {
0%, 100% {
opacity: 1;
}
50% {
opacity: 0.5;
}
}
/* Professional Analytics Dashboard Styles */
.professional-analytics-dashboard {
display: flex;
flex-direction: column;
gap: 2rem;
padding: 0;
font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
}
/* Executive Summary Section */
.executive-summary {
background: linear-gradient(135deg, rgba(255, 255, 255, 0.95), rgba(248, 250, 252, 0.9));
border-radius: 20px;
padding: 2rem;
border: 1px solid rgba(226, 232, 240, 0.5);
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.08), 0 4px 16px rgba(0, 0, 0, 0.04);
backdrop-filter: blur(20px);
margin-bottom: 1rem;
}
.summary-header {
text-align: center;
margin-bottom: 2rem;
}
.summary-header h2 {
display: flex;
align-items: center;
justify-content: center;
gap: 0.75rem;
font-size: 2rem;
font-weight: 700;
color: #1e293b;
margin-bottom: 0.5rem;
letter-spacing: -0.025em;
}
.summary-header p {
font-size: 1.1rem;
color: #64748b;
font-weight: 500;
margin: 0;
}
/* KPI Grid */
.kpi-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 1.5rem;
}
.kpi-card {
display: flex;
align-items: center;
gap: 1rem;
padding: 1.5rem;
border-radius: 16px;
background: linear-gradient(135deg, rgba(255, 255, 255, 0.9), rgba(248, 250, 252, 0.7));
border: 1px solid rgba(226, 232, 240, 0.6);
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.06), 0 2px 8px rgba(0, 0, 0, 0.04);
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
position: relative;
overflow: hidden;
}
.kpi-card::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 4px;
background: var(--accent-color);
transition: height 0.3s ease;
}
.kpi-card:hover {
transform: translateY(-2px);
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12), 0 4px 12px rgba(0, 0, 0, 0.06);
}
.kpi-card:hover::before {
height: 6px;
}
.kpi-card.primary {
--accent-color: #10b981;
}
.kpi-card.warning {
--accent-color: #f59e0b;
}
.kpi-card.success {
--accent-color: #3b82f6;
}
.kpi-card.info {
--accent-color: #8b5cf6;
}
.kpi-icon {
display: flex;
align-items: center;
justify-content: center;
width: 56px;
height: 56px;
border-radius: 14px;
background: linear-gradient(135deg, var(--accent-color), rgba(var(--accent-color), 0.8));
color: white;
box-shadow: 0 4px 12px rgba(var(--accent-color), 0.3);
}
.kpi-content {
flex: 1;
display: flex;
flex-direction: column;
gap: 0.25rem;
}
.kpi-value {
font-size: 2rem;
font-weight: 800;
color: #1e293b;
line-height: 1;
letter-spacing: -0.025em;
}
.kpi-label {
font-size: 0.875rem;
font-weight: 600;
color: #64748b;
text-transform: uppercase;
letter-spacing: 0.05em;
}
.kpi-unit {
font-size: 0.75rem;
color: #94a3b8;
font-weight: 500;
}
.kpi-trend {
display: flex;
align-items: center;
gap: 0.25rem;
font-size: 0.75rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.05em;
padding: 0.25rem 0.5rem;
border-radius: 8px;
white-space: nowrap;
}
.kpi-trend.positive {
color: #10b981;
background: rgba(16, 185, 129, 0.1);
}
.kpi-trend.negative {
color: #ef4444;
background: rgba(239, 68, 68, 0.1);
}
.kpi-trend.neutral {
color: #64748b;
background: rgba(100, 116, 139, 0.1);
}
/* Analytics Grid */
.analytics-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(400px, 1fr));
gap: 1.5rem;
}
.chart-panel {
background: linear-gradient(135deg, rgba(255, 255, 255, 0.95), rgba(248, 250, 252, 0.9));
border-radius: 20px;
border: 1px solid rgba(226, 232, 240, 0.5);
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.08), 0 4px 16px rgba(0, 0, 0, 0.04);
backdrop-filter: blur(20px);
overflow: hidden;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
.chart-panel:hover {
transform: translateY(-2px);
box-shadow: 0 12px 40px rgba(0, 0, 0, 0.12), 0 6px 20px rgba(0, 0, 0, 0.06);
}
.chart-panel.large {
grid-column: span 2;
}
@media (max-width: 1200px) {
.chart-panel.large {
grid-column: span 1;
}
}
.panel-header {
display: flex;
justify-content: space-between;
align-items: flex-start;
padding: 1.5rem 1.5rem 1rem;
border-bottom: 1px solid rgba(226, 232, 240, 0.5);
}
.header-content h3 {
display: flex;
align-items: center;
gap: 0.5rem;
font-size: 1.25rem;
font-weight: 700;
color: #1e293b;
margin: 0 0 0.25rem;
letter-spacing: -0.025em;
}
.header-content p {
font-size: 0.875rem;
color: #64748b;
font-weight: 500;
margin: 0;
}
.chart-controls {
display: flex;
gap: 0.5rem;
}
.control-btn {
padding: 0.375rem 0.75rem;
font-size: 0.75rem;
font-weight: 600;
border-radius: 8px;
background: rgba(248, 250, 252, 0.8);
color: #64748b;
border: 1px solid rgba(226, 232, 240, 0.6);
cursor: pointer;
transition: all 0.2s ease;
text-transform: uppercase;
letter-spacing: 0.05em;
}
.control-btn:hover {
background: rgba(241, 245, 249, 0.9);
color: #475569;
}
.control-btn.active {
background: #3b82f6;
color: white;
border-color: #3b82f6;
box-shadow: 0 2px 8px rgba(59, 130, 246, 0.3);
}
.panel-body {
padding: 1.5rem;
height: 350px;
}
.panel-body > div {
height: 100%;
}
/* Statistical Analysis Styles */
.stats-container {
display: grid;
grid-template-columns: 1fr;
gap: 1.5rem;
height: 100%;
overflow-y: auto;
}
.stat-group {
padding: 1rem;
background: rgba(248, 250, 252, 0.5);
border-radius: 12px;
border: 1px solid rgba(226, 232, 240, 0.5);
}
.stat-group h4 {
font-size: 1rem;
font-weight: 700;
color: #1e293b;
margin: 0 0 1rem;
letter-spacing: -0.025em;
}
.stat-row {
display: flex;
justify-content: space-between;
align-items: center;
padding: 0.5rem 0;
border-bottom: 1px solid rgba(226, 232, 240, 0.3);
}
.stat-row:last-child {
border-bottom: none;
}
.stat-label {
font-size: 0.875rem;
color: #64748b;
font-weight: 500;
}
.stat-value {
font-size: 0.875rem;
font-weight: 700;
color: #1e293b;
}
.decision-reject {
color: #ef4444 !important;
background: rgba(239, 68, 68, 0.1);
padding: 0.25rem 0.5rem;
border-radius: 6px;
font-size: 0.75rem;
}
/* Confidence Interval Visualization */
.ci-visualization {
margin-top: 1rem;
}
.ci-bar {
position: relative;
height: 8px;
background: rgba(226, 232, 240, 0.5);
border-radius: 4px;
margin-bottom: 0.5rem;
}
.ci-range {
position: absolute;
height: 100%;
background: linear-gradient(90deg, #3b82f6, #10b981);
border-radius: 4px;
box-shadow: 0 2px 4px rgba(59, 130, 246, 0.3);
}
.ci-point {
position: absolute;
top: -2px;
width: 12px;
height: 12px;
background: #ef4444;
border-radius: 50%;
border: 2px solid white;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
transform: translateX(-50%);
}
.ci-labels {
display: flex;
justify-content: space-between;
font-size: 0.75rem;
font-weight: 600;
color: #64748b;
}
/* ANOVA Table */
.anova-table {
margin-top: 1.5rem;
background: linear-gradient(135deg, rgba(255, 255, 255, 0.8) 0%, rgba(248, 250, 252, 0.6) 100%);
border-radius: var(--border-radius-lg);
border: 1px solid rgba(37, 99, 235, 0.1);
overflow: hidden;
box-shadow: 0 4px 12px rgba(37, 99, 235, 0.05);
}
.anova-row {
display: grid;
grid-template-columns: 1fr 80px 80px 80px;
gap: 1rem;
padding: 0.75rem 1rem;
border-bottom: 1px solid rgba(37, 99, 235, 0.08);
font-size: 0.875rem;
align-items: center;
transition: all 0.2s ease;
}
.anova-row:hover {
background: rgba(37, 99, 235, 0.03);
}
.anova-row.header {
font-weight: 800;
color: #2563eb;
background: linear-gradient(135deg, rgba(37, 99, 235, 0.08), rgba(6, 182, 212, 0.05));
padding: 1rem;
border-radius: 0;
margin-bottom: 0;
border: none;
border-bottom: 2px solid rgba(37, 99, 235, 0.2);
text-transform: uppercase;
letter-spacing: 0.3px;
}
.anova-row span {
display: flex;
align-items: center;
}
.significant {
color: #10b981;
font-weight: 600;
background: rgba(16, 185, 129, 0.1);
padding: 0.25rem 0.5rem;
border-radius: 4px;
text-align: center;
}
/* Dynamic Analytics Dashboard Styles */
.dynamic-analytics-dashboard {
padding: 2rem 0;
}
.analytics-nav {
display: flex;
gap: 1rem;
margin-bottom: 2rem;
background: var(--glass-gradient);
backdrop-filter: blur(20px);
border: var(--border-glass);
border-radius: var(--border-radius-xl);
padding: 1rem;
box-shadow: var(--shadow-glass);
justify-content: center;
flex-wrap: wrap;
}
.nav-btn {
display: flex;
align-items: center;
gap: 0.5rem;
padding: 1rem 1.5rem;
border: none;
background: rgba(255, 255, 255, 0.1);
color: var(--text-secondary);
border-radius: var(--border-radius-lg);
cursor: pointer;
transition: all 0.3s ease;
font-weight: 500;
font-size: 0.9rem;
position: relative;
overflow: hidden;
}
.nav-btn::before {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent);
transition: left 0.6s ease;
}
.nav-btn:hover::before {
left: 100%;
}
.nav-btn:hover {
background: var(--glass-bg-strong);
transform: translateY(-2px);
color: var(--primary);
}
.nav-btn.active {
background: var(--gradient-primary);
color: white;
box-shadow: 0 8px 25px rgba(59, 130, 246, 0.4);
}
/* Overview Section Styles */
.overview-section {
padding: 2rem 0;
}
.metrics-hero {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 2rem;
margin-bottom: 3rem;
}
.hero-metric {
display: flex;
align-items: center;
gap: 1.5rem;
padding: 2rem;
background: var(--glass-gradient);
backdrop-filter: blur(20px);
border: var(--border-glass);
border-radius: var(--border-radius-xl);
box-shadow: var(--shadow-glass);
transition: all 0.3s ease;
position: relative;
overflow: hidden;
}
.hero-metric::before {
content: '';
position: absolute;
top: 0;
left: 0;
width: 4px;
height: 100%;
background: var(--primary);
transition: all 0.3s ease;
}
.hero-metric.primary::before { background: var(--primary); }
.hero-metric.warning::before { background: var(--warning); }
.hero-metric.success::before { background: var(--success); }
.hero-metric.info::before { background: var(--info); }
.hero-metric:hover {
transform: translateY(-5px);
box-shadow: var(--shadow-glass-hover);
}
.hero-metric:hover::before {
width: 8px;
}
.metric-icon {
width: 60px;
height: 60px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
color: white;
flex-shrink: 0;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
}
.hero-metric.primary .metric-icon { background: var(--gradient-primary); }
.hero-metric.warning .metric-icon { background: var(--warning-gradient); }
.hero-metric.success .metric-icon { background: var(--success-gradient); }
.hero-metric.info .metric-icon { background: var(--info-gradient); }
.metric-content {
flex: 1;
}
.metric-value {
font-size: 2.5rem;
font-weight: 700;
color: var(--dark);
margin-bottom: 0.25rem;
line-height: 1;
}
.metric-label {
font-size: 1rem;
color: var(--secondary);
margin-bottom: 0.5rem;
font-weight: 500;
}
.metric-trend {
font-size: 0.875rem;
font-weight: 500;
padding: 0.25rem 0.5rem;
border-radius: var(--border-radius-sm);
display: inline-block;
}
.metric-trend.positive {
background: rgba(16, 185, 129, 0.1);
color: var(--success);
}
.metric-trend.negative {
background: rgba(239, 68, 68, 0.1);
color: var(--danger);
}
.metric-trend.neutral {
background: rgba(100, 116, 139, 0.1);
color: var(--secondary);
}
/* Enhanced Chart Card Styles */
.chart-card {
background: var(--glass-gradient);
backdrop-filter: blur(20px);
border: var(--border-glass);
border-radius: var(--border-radius-xl);
box-shadow: var(--shadow-glass);
overflow: hidden;
transition: all 0.3s ease;
height: 100%;
display: flex;
flex-direction: column;
}
.chart-card:hover {
transform: translateY(-3px);
box-shadow: var(--shadow-glass-hover);
}
.chart-card.large {
grid-column: span 2;
}
.card-header {
padding: 1.5rem 2rem 1rem 2rem;
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
display: flex;
justify-content: space-between;
align-items: center;
}
.card-header h3 {
margin: 0;
color: var(--dark);
font-size: 1.1rem;
font-weight: 600;
display: flex;
align-items: center;
gap: 0.5rem;
}
.chart-controls {
display: flex;
gap: 0.5rem;
}
.time-range {
padding: 0.25rem 0.75rem;
border-radius: var(--border-radius-sm);
font-size: 0.75rem;
font-weight: 500;
cursor: pointer;
transition: all 0.2s ease;
background: rgba(255, 255, 255, 0.1);
color: var(--secondary);
}
.time-range:hover {
background: rgba(255, 255, 255, 0.2);
color: var(--primary);
}
.time-range.active {
background: var(--primary);
color: white;
}
.card-body {
padding: 1.5rem 2rem 2rem 2rem;
flex: 1;
display: flex;
flex-direction: column;
}
/* Metrics Grid for Circular Progress */
.metrics-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 2rem;
padding: 2rem 0;
}
.metric-item {
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
}
.metric-circle {
width: 80px;
height: 80px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 1.2rem;
font-weight: 700;
color: var(--primary);
margin-bottom: 0.75rem;
background: conic-gradient(var(--primary) 0% var(--percentage), rgba(0, 0, 0, 0.1) var(--percentage) 100%);
position: relative;
}
.metric-circle::before {
content: '';
position: absolute;
width: 60px;
height: 60px;
border-radius: 50%;
background: white;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
.metric-circle span {
position: relative;
z-index: 1;
}
.metric-name {
font-size: 0.875rem;
color: var(--secondary);
font-weight: 500;
}
/* Risk Assessment Matrix */
.risk-matrix {
display: flex;
flex-direction: column;
gap: 1rem;
padding: 1rem 0;
}
.risk-item {
display: flex;
justify-content: space-between;
align-items: center;
padding: 1rem;
border-radius: var(--border-radius);
transition: all 0.3s ease;
}
.risk-item.high {
background: linear-gradient(135deg, rgba(239, 68, 68, 0.1), rgba(239, 68, 68, 0.05));
border-left: 4px solid var(--danger);
}
.risk-item.medium {
background: linear-gradient(135deg, rgba(245, 158, 11, 0.1), rgba(245, 158, 11, 0.05));
border-left: 4px solid var(--warning);
}
.risk-item.low {
background: linear-gradient(135deg, rgba(16, 185, 129, 0.1), rgba(16, 185, 129, 0.05));
border-left: 4px solid var(--success);
}
.risk-label {
font-weight: 600;
color: var(--dark);
}
.risk-value {
font-size: 1.5rem;
font-weight: 700;
color: var(--primary);
}
/* Section Headers */
.section-header {
text-align: center;
margin-bottom: 3rem;
padding: 2rem;
background: var(--glass-gradient);
backdrop-filter: blur(20px);
border: var(--border-glass);
border-radius: var(--border-radius-xl);
box-shadow: var(--shadow-glass);
}
.section-header h2 {
color: var(--dark);
font-size: 2rem;
margin-bottom: 0.5rem;
display: flex;
align-items: center;
justify-content: center;
gap: 0.75rem;
}
.section-header p {
color: var(--secondary);
font-size: 1.1rem;
margin: 0;
max-width: 600px;
margin: 0 auto;
}
/* Charts Grid */
.charts-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(400px, 1fr));
gap: 2rem;
margin-bottom: 2rem;
}
/* Responsive Design */
@media (max-width: 768px) {
.analytics-nav {
flex-direction: column;
gap: 0.5rem;
}
.nav-btn {
justify-content: center;
}
.metrics-hero {
grid-template-columns: 1fr;
}
.hero-metric {
flex-direction: column;
text-align: center;
gap: 1rem;
}
.charts-grid {
grid-template-columns: 1fr;
}
.chart-card.large {
grid-column: span 1;
}
.metrics-grid {
grid-template-columns: 1fr;
gap: 1rem;
}
.section-header h2 {
font-size: 1.5rem;
flex-direction: column;
gap: 0.5rem;
}
}
/* Chart Error Handling */
.chart-error {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 2rem;
background: rgba(239, 68, 68, 0.1);
border: 1px solid rgba(239, 68, 68, 0.3);
border-radius: 12px;
color: #fca5a5;
font-size: 0.875rem;
text-align: center;
min-height: 200px;
backdrop-filter: blur(10px);
}
/* Analytics Dashboard Ultra-Professional Styling */
.analytics-page {
background: linear-gradient(135deg, #0a0e27 0%, #1a1b3a 25%, #2d1b69 50%, #0f172a 75%, #1e293b 100%);
min-height: 100vh;
padding: 2.5rem;
position: relative;
overflow-x: hidden;
font-family: 'Inter', 'SF Pro Display', 'Segoe UI', 'Helvetica Neue', 'Arial', system-ui, sans-serif;
color: #ffffff;
line-height: 1.6;
letter-spacing: -0.01em;
/* Advanced backdrop effects */
&::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
radial-gradient(circle at 20% 30%, rgba(59, 130, 246, 0.18) 0%, transparent 50%),
radial-gradient(circle at 80% 70%, rgba(139, 92, 246, 0.15) 0%, transparent 50%),
radial-gradient(circle at 40% 90%, rgba(16, 185, 129, 0.12) 0%, transparent 50%),
radial-gradient(circle at 70% 20%, rgba(245, 158, 11, 0.08) 0%, transparent 50%);
pointer-events: none;
z-index: -1;
animation: gradient-shift 15s ease-in-out infinite;
}
/* Animated background particles */
&::after {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-image:
radial-gradient(2px 2px at 20px 30px, rgba(255,255,255,0.15), transparent),
radial-gradient(2px 2px at 40px 70px, rgba(255,255,255,0.1), transparent),
radial-gradient(1px 1px at 90px 40px, rgba(255,255,255,0.2), transparent),
radial-gradient(1px 1px at 130px 80px, rgba(255,255,255,0.08), transparent),
radial-gradient(3px 3px at 200px 120px, rgba(59, 130, 246, 0.1), transparent);
background-repeat: repeat;
background-size: 200px 200px;
animation: float-particles 25s linear infinite;
pointer-events: none;
z-index: -1;
}
}
@keyframes gradient-shift {
0%, 100% { opacity: 1; }
25% { opacity: 0.8; }
50% { opacity: 0.9; }
75% { opacity: 0.85; }
}
@keyframes float-particles {
0% { transform: translateY(0px) translateX(0px) rotate(0deg); }
25% { transform: translateY(-50px) translateX(25px) rotate(90deg); }
50% { transform: translateY(-100px) translateX(50px) rotate(180deg); }
75% { transform: translateY(-150px) translateX(75px) rotate(270deg); }
100% { transform: translateY(-200px) translateX(100px) rotate(360deg); }
}
.glass-header {
background: rgba(15, 23, 42, 0.8);
backdrop-filter: blur(20px);
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
padding: 2rem 0;
position: relative;
overflow: hidden;
}
.glass-header::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: linear-gradient(45deg, rgba(59, 130, 246, 0.1) 0%, rgba(147, 197, 253, 0.05) 100%);
animation: shimmer 3s ease-in-out infinite;
}
@keyframes shimmer {
0%, 100% { opacity: 0.5; }
50% { opacity: 1; }
}
.header-content {
max-width: 1200px;
margin: 0 auto;
padding: 0 2rem;
position: relative;
z-index: 1;
}
.header-main h1 {
font-size: 2.5rem;
font-weight: 800;
background: linear-gradient(135deg, #ffffff 0%, #60a5fa 50%, #3b82f6 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
margin-bottom: 0.5rem;
animation: fadeInUp 1s ease-out;
}
.header-main p {
font-size: 1.125rem;
color: rgba(255, 255, 255, 0.8);
margin: 0;
animation: fadeInUp 1s ease-out 0.2s both;
}
@keyframes fadeInUp {
from {
opacity: 0;
transform: translateY(30px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.professional-analytics-dashboard {
max-width: 1400px;
margin: 0 auto;
padding: 2rem;
animation: fadeIn 1.5s ease-out;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
/* Executive Summary */
.executive-summary {
margin-bottom: 3rem;
animation: slideInLeft 1s ease-out;
}
@keyframes slideInLeft {
from {
opacity: 0;
transform: translateX(-50px);
}
to {
opacity: 1;
transform: translateX(0);
}
}
.summary-header {
text-align: center;
margin-bottom: 2rem;
}
.summary-header h2 {
font-size: 2rem;
font-weight: 700;
color: #ffffff;
margin-bottom: 0.5rem;
display: flex;
align-items: center;
justify-content: center;
gap: 0.75rem;
}
.summary-header p {
font-size: 1.1rem;
color: rgba(255, 255, 255, 0.7);
margin: 0;
}
.kpi-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 1.5rem;
margin-bottom: 2rem;
}
.kpi-card {
background: rgba(255, 255, 255, 0.05);
backdrop-filter: blur(10px);
border: 1px solid rgba(255, 255, 255, 0.1);
border-radius: 16px;
padding: 1.5rem;
position: relative;
overflow: hidden;
transition: all 0.3s ease;
animation: floatUp 2s ease-out infinite;
}
@keyframes floatUp {
0%, 100% { transform: translateY(0px); }
50% { transform: translateY(-5px); }
}
.kpi-card:hover {
transform: translateY(-8px);
box-shadow: 0 20px 40px rgba(59, 130, 246, 0.3);
border-color: rgba(59, 130, 246, 0.5);
}
.kpi-card::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 3px;
background: linear-gradient(90deg, #3b82f6, #60a5fa, #93c5fd);
animation: pulse 2s ease-in-out infinite;
}
@keyframes pulse {
0%, 100% { opacity: 0.5; }
50% { opacity: 1; }
}
.kpi-icon {
width: 60px;
height: 60px;
border-radius: 12px;
display: flex;
align-items: center;
justify-content: center;
margin-bottom: 1rem;
background: linear-gradient(135deg, rgba(59, 130, 246, 0.8), rgba(147, 197, 253, 0.6));
color: #ffffff;
animation: rotate 4s linear infinite;
}
@keyframes rotate {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
.kpi-content {
flex: 1;
}
.kpi-value {
font-size: 2.5rem;
font-weight: 800;
color: #ffffff;
line-height: 1;
margin-bottom: 0.5rem;
text-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
}
.kpi-label {
font-size: 0.875rem;
font-weight: 600;
color: rgba(255, 255, 255, 0.8);
text-transform: uppercase;
letter-spacing: 0.05em;
margin-bottom: 0.25rem;
}
.kpi-unit {
font-size: 0.75rem;
color: rgba(255, 255, 255, 0.6);
font-weight: 500;
}
.kpi-trend {
position: absolute;
top: 1rem;
right: 1rem;
display: flex;
align-items: center;
gap: 0.25rem;
font-size: 0.75rem;
font-weight: 600;
padding: 0.25rem 0.5rem;
border-radius: 20px;
background: rgba(255, 255, 255, 0.1);
backdrop-filter: blur(5px);
}
.kpi-trend.positive {
color: #10b981;
}
.kpi-trend.neutral {
color: #f59e0b;
}
.kpi-trend.negative {
color: #ef4444;
}
/* Analytics Grid */
.analytics-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(400px, 1fr));
gap: 2rem;
margin-bottom: 2rem;
}
.chart-panel {
background: rgba(255, 255, 255, 0.05);
backdrop-filter: blur(15px);
border: 1px solid rgba(255, 255, 255, 0.1);
border-radius: 16px;
overflow: hidden;
transition: all 0.3s ease;
animation: slideInUp 1s ease-out;
animation-fill-mode: both;
}
@keyframes slideInUp {
from {
opacity: 0;
transform: translateY(30px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.chart-panel:nth-child(1) { animation-delay: 0.1s; }
.chart-panel:nth-child(2) { animation-delay: 0.2s; }
.chart-panel:nth-child(3) { animation-delay: 0.3s; }
.chart-panel:nth-child(4) { animation-delay: 0.4s; }
.chart-panel:nth-child(5) { animation-delay: 0.5s; }
.chart-panel:nth-child(6) { animation-delay: 0.6s; }
.chart-panel.large {
grid-column: span 2;
}
.chart-panel:hover {
transform: translateY(-5px);
box-shadow: 0 15px 30px rgba(59, 130, 246, 0.2);
border-color: rgba(59, 130, 246, 0.4);
}
.panel-header {
padding: 1.5rem;
background: rgba(255, 255, 255, 0.02);
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
display: flex;
justify-content: space-between;
align-items: center;
}
.header-content h3 {
font-size: 1.25rem;
font-weight: 700;
color: #ffffff;
margin: 0;
display: flex;
align-items: center;
gap: 0.5rem;
}
.header-content p {
font-size: 0.875rem;
color: rgba(255, 255, 255, 0.6);
margin: 0.25rem 0 0 0;
}
.panel-body {
padding: 1.5rem;
min-height: 300px;
display: flex;
align-items: center;
justify-content: center;
}
/* Chart Controls */
.chart-controls {
display: flex;
gap: 0.5rem;
}
.control-btn {
padding: 0.5rem 1rem;
font-size: 0.75rem;
font-weight: 600;
border-radius: 20px;
background: rgba(255, 255, 255, 0.1);
color: rgba(255, 255, 255, 0.7);
cursor: pointer;
transition: all 0.3s ease;
border: 1px solid rgba(255, 255, 255, 0.1);
}
.control-btn:hover,
.control-btn.active {
background: rgba(59, 130, 246, 0.8);
color: #ffffff;
border-color: rgba(59, 130, 246, 1);
}
/* Statistics Container */
.stats-container {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 1.5rem;
width: 100%;
}
.stat-group {
background: rgba(255, 255, 255, 0.05);
border-radius: 12px;
padding: 1.5rem;
border: 1px solid rgba(255, 255, 255, 0.1);
}
.stat-group h4 {
color: #ffffff;
font-size: 1.1rem;
font-weight: 700;
margin-bottom: 1rem;
}
.stat-row {
display: flex;
justify-content: space-between;
align-items: center;
padding: 0.75rem 0;
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}
.stat-label {
color: rgba(255, 255, 255, 0.8);
font-size: 0.875rem;
font-weight: 500;
}
.stat-value {
color: #ffffff;
font-weight: 700;
font-size: 0.875rem;
}
.decision-reject {
color: #ef4444;
}
.significant {
color: #10b981;
}
/* Floating Animation Elements */
.floating-element {
position: fixed;
pointer-events: none;
z-index: 0;
opacity: 0.1;
}
.floating-element-1 {
top: 10%;
right: 10%;
animation: float 6s ease-in-out infinite;
}
.floating-element-2 {
bottom: 20%;
left: 15%;
animation: float 8s ease-in-out infinite reverse;
}
@keyframes float {
0%, 100% { transform: translateY(0px) rotate(0deg); }
50% { transform: translateY(-20px) rotate(180deg); }
}
/* Analytics Dashboard - Enhanced Styling */
.analytics-page {
min-height: 100vh;
background: linear-gradient(135deg, #0f172a 0%, #1e293b 50%, #334155 100%);
color: #ffffff;
padding: 0;
position: relative;
overflow-x: hidden;
}
/* Floating Elements */
.floating-element {
position: fixed;
z-index: 1;
pointer-events: none;
opacity: 0.6;
filter: blur(1px);
}
.floating-element-1 {
top: 20%;
right: 5%;
animation: float-slow 8s ease-in-out infinite;
}
.floating-element-2 {
bottom: 30%;
left: 5%;
animation: float-medium 6s ease-in-out infinite;
}
.floating-element-3 {
top: 60%;
right: 20%;
animation: float-fast 10s ease-in-out infinite;
}
@keyframes float-slow {
0%, 100% { transform: translateY(0px) rotate(0deg); }
33% { transform: translateY(-15px) rotate(2deg); }
66% { transform: translateY(10px) rotate(-1deg); }
}
@keyframes float-medium {
0%, 100% { transform: translateY(0px) rotate(0deg); }
50% { transform: translateY(-20px) rotate(3deg); }
}
@keyframes float-fast {
0%, 100% { transform: translateY(0px) rotate(0deg); }
25% { transform: translateY(-12px) rotate(1deg); }
75% { transform: translateY(12px) rotate(-2deg); }
}
/* Glass Header */
.glass-header {
position: relative;
background: rgba(255, 255, 255, 0.1);
backdrop-filter: blur(20px);
border: 1px solid rgba(255, 255, 255, 0.2);
margin: 1rem;
border-radius: 20px;
padding: 2rem;
box-shadow: 0 15px 35px rgba(0, 0, 0, 0.1);
overflow: hidden;
}
.glass-header::before {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent);
animation: shimmer 3s infinite;
z-index: 1;
}
.header-content {
position: relative;
z-index: 2;
}
.header-main h1 {
font-size: 3rem;
font-weight: 800;
color: #ffffff !important;
margin-bottom: 0.5rem;
display: flex;
align-items: center;
gap: 1rem;
font-family: 'Inter', sans-serif;
letter-spacing: -0.02em;
}
.header-main p {
font-size: 1.1rem;
color: rgba(255, 255, 255, 0.8);
margin: 0;
font-weight: 400;
line-height: 1.6;
}
.glow-icon {
filter: drop-shadow(0 0 20px rgba(59, 130, 246, 0.7));
animation: iconGlow 2s ease-in-out infinite;
}
@keyframes iconGlow {
0%, 100% { filter: drop-shadow(0 0 20px rgba(59, 130, 246, 0.7)); }
50% { filter: drop-shadow(0 0 30px rgba(59, 130, 246, 1)); }
}
/* Professional Analytics Dashboard */
.professional-analytics-dashboard {
padding: 1rem;
font-family: 'Inter', sans-serif;
}
/* Executive Summary */
.executive-summary {
margin-bottom: 2rem;
}
.summary-header {
text-align: center;
margin-bottom: 2rem;
}
.summary-header h2 {
font-size: 2.5rem;
font-weight: 700;
color: #ffffff !important;
margin-bottom: 0.5rem;
display: flex;
align-items: center;
justify-content: center;
gap: 1rem;
}
.summary-header p {
font-size: 1.1rem;
color: rgba(255, 255, 255, 0.8);
margin: 0;
}
/* KPI Grid */
.kpi-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 1.5rem;
margin-bottom: 2rem;
}
.kpi-card {
background: rgba(255, 255, 255, 0.12);
backdrop-filter: blur(25px);
border: 1px solid rgba(255, 255, 255, 0.25);
border-radius: 20px;
padding: 2.5rem;
display: flex;
align-items: center;
gap: 2rem;
transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
position: relative;
overflow: hidden;
animation: fadeInUp 0.8s ease-out;
box-shadow:
0 8px 32px rgba(0, 0, 0, 0.2),
inset 0 1px 0 rgba(255, 255, 255, 0.2);
}
.kpi-card::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 5px;
border-radius: 20px 20px 0 0;
background: linear-gradient(90deg, transparent 0%, currentColor 50%, transparent 100%);
animation: shimmer-glow 3s ease-in-out infinite;
}
@keyframes shimmer-glow {
0%, 100% { opacity: 0.6; }
50% { opacity: 1; }
}
.kpi-card.primary::before {
background: linear-gradient(90deg, #1e3a8a 0%, #3b82f6 25%, #60a5fa 50%, #3b82f6 75%, #1e3a8a 100%);
}
.kpi-card.warning::before {
background: linear-gradient(90deg, #92400e 0%, #f59e0b 25%, #fbbf24 50%, #f59e0b 75%, #92400e 100%);
}
.kpi-card.success::before {
background: linear-gradient(90deg, #065f46 0%, #10b981 25%, #34d399 50%, #10b981 75%, #065f46 100%);
}
.kpi-card.info::before {
background: linear-gradient(90deg, #0e7490 0%, #06b6d4 25%, #67e8f9 50%, #06b6d4 75%, #0e7490 100%);
}
.kpi-card:hover {
transform: translateY(-12px) scale(1.03);
box-shadow:
0 25px 50px rgba(0, 0, 0, 0.35),
0 0 0 1px rgba(255, 255, 255, 0.3),
inset 0 1px 0 rgba(255, 255, 255, 0.3);
border-color: rgba(255, 255, 255, 0.4);
background: rgba(255, 255, 255, 0.15);
}
.kpi-card:hover .kpi-icon {
transform: rotate(5deg) scale(1.1);
background: rgba(255, 255, 255, 0.2);
box-shadow: 0 8px 16px rgba(0, 0, 0, 0.2);
}
.kpi-icon {
width: 72px;
height: 72px;
border-radius: 16px;
display: flex;
align-items: center;
justify-content: center;
background: rgba(255, 255, 255, 0.15);
color: #ffffff;
transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
box-shadow:
0 4px 16px rgba(0, 0, 0, 0.1),
inset 0 1px 0 rgba(255, 255, 255, 0.2);
backdrop-filter: blur(10px);
}
.kpi-content {
flex: 1;
min-width: 0;
}
.kpi-value {
font-size: 3rem;
font-weight: 900;
color: #ffffff;
line-height: 0.9;
margin-bottom: 0.5rem;
background: linear-gradient(135deg, #ffffff 0%, rgba(255, 255, 255, 0.8) 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
letter-spacing: -0.02em;
text-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}
.kpi-label {
font-size: 1rem;
color: rgba(255, 255, 255, 0.9);
font-weight: 600;
margin-bottom: 0.25rem;
letter-spacing: 0.025em;
text-transform: uppercase;
font-size: 0.85rem;
}
.kpi-unit {
font-size: 0.9rem;
color: rgba(255, 255, 255, 0.7);
font-weight: 500;
letter-spacing: 0.01em;
}
.kpi-trend {
display: flex;
align-items: center;
gap: 0.75rem;
font-size: 0.9rem;
font-weight: 700;
padding: 0.5rem 1rem;
border-radius: 12px;
backdrop-filter: blur(10px);
transition: all 0.3s ease;
letter-spacing: 0.025em;
text-transform: uppercase;
font-size: 0.75rem;
}
.kpi-trend.positive {
background: rgba(16, 185, 129, 0.25);
color: #34d399;
border: 1px solid rgba(16, 185, 129, 0.3);
box-shadow: 0 2px 8px rgba(16, 185, 129, 0.2);
}
.kpi-trend.neutral {
background: rgba(245, 158, 11, 0.25);
color: #fbbf24;
border: 1px solid rgba(245, 158, 11, 0.3);
box-shadow: 0 2px 8px rgba(245, 158, 11, 0.2);
}
.kpi-trend.negative {
background: rgba(239, 68, 68, 0.25);
color: #f87171;
border: 1px solid rgba(239, 68, 68, 0.3);
box-shadow: 0 2px 8px rgba(239, 68, 68, 0.2);
}
/* Analytics Grid */
.analytics-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(400px, 1fr));
gap: 1.5rem;
margin-bottom: 2rem;
}
.chart-panel {
background: rgba(255, 255, 255, 0.08);
backdrop-filter: blur(25px);
border: 1px solid rgba(255, 255, 255, 0.2);
border-radius: 20px;
padding: 2.5rem;
transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
min-height: 500px;
display: flex;
flex-direction: column;
position: relative;
overflow: hidden;
box-shadow:
0 8px 32px rgba(0, 0, 0, 0.15),
inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
.chart-panel::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: linear-gradient(135deg, rgba(255, 255, 255, 0.1) 0%, rgba(255, 255, 255, 0.05) 100%);
pointer-events: none;
border-radius: 20px;
}
.chart-panel::after {
content: '';
position: absolute;
top: -2px;
left: -2px;
right: -2px;
bottom: -2px;
background: linear-gradient(
45deg,
transparent,
rgba(59, 130, 246, 0.3),
transparent,
rgba(139, 92, 246, 0.3),
transparent
);
border-radius: 22px;
opacity: 0;
animation: rotate-border 4s linear infinite;
z-index: -1;
}
@keyframes rotate-border {
0% { transform: rotate(0deg); opacity: 0; }
50% { opacity: 0.6; }
100% { transform: rotate(360deg); opacity: 0; }
}
.chart-panel.large {
grid-column: span 2;
min-height: 600px;
padding: 3rem;
}
.chart-panel:hover {
transform: translateY(-10px) scale(1.02);
box-shadow:
0 25px 60px rgba(0, 0, 0, 0.25),
0 0 0 1px rgba(255, 255, 255, 0.3),
inset 0 1px 0 rgba(255, 255, 255, 0.2);
border-color: rgba(255, 255, 255, 0.35);
background: rgba(255, 255, 255, 0.12);
}
.chart-panel:hover::after {
opacity: 0.8;
}
.panel-header {
display: flex;
justify-content: space-between;
align-items: flex-start;
margin-bottom: 2rem;
padding-bottom: 1.5rem;
border-bottom: 1px solid rgba(255, 255, 255, 0.15);
position: relative;
z-index: 1;
}
.header-content h3 {
font-size: 1.5rem;
font-weight: 800;
color: #ffffff !important;
margin: 0 0 0.75rem 0;
display: flex;
align-items: center;
gap: 1rem;
letter-spacing: -0.025em;
background: linear-gradient(135deg, #ffffff 0%, rgba(255, 255, 255, 0.8) 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.header-content h3 svg {
color: #60a5fa;
filter: drop-shadow(0 2px 4px rgba(96, 165, 250, 0.3));
}
.header-content p {
font-size: 1rem;
color: rgba(255, 255, 255, 0.8);
margin: 0;
font-weight: 500;
letter-spacing: 0.01em;
line-height: 1.4;
}
.chart-controls {
display: flex;
gap: 0.5rem;
}
.control-btn {
padding: 0.5rem 1rem;
border-radius: 8px;
font-size: 0.8rem;
font-weight: 600;
cursor: pointer;
transition: all 0.2s ease;
background: rgba(255, 255, 255, 0.1);
color: rgba(255, 255, 255, 0.7);
border: 1px solid rgba(255, 255, 255, 0.2);
}
.control-btn.active {
background: #3b82f6;
color: #ffffff;
border-color: #3b82f6;
}
/* Enhanced Floating Animation Elements */
.floating-element {
position: absolute;
pointer-events: none;
z-index: 1;
background: linear-gradient(135deg, rgba(59, 130, 246, 0.15) 0%, rgba(139, 92, 246, 0.1) 100%);
backdrop-filter: blur(20px);
border: 1px solid rgba(255, 255, 255, 0.1);
}
.floating-element.element-1 {
width: 120px;
height: 120px;
border-radius: 50%;
top: 10%;
left: 5%;
animation: float-complex-1 20s ease-in-out infinite;
background: linear-gradient(135deg, rgba(59, 130, 246, 0.2) 0%, rgba(16, 185, 129, 0.15) 100%);
box-shadow: 0 8px 32px rgba(59, 130, 246, 0.3);
}
.floating-element.element-2 {
width: 80px;
height: 80px;
border-radius: 30% 70% 70% 30% / 30% 30% 70% 70%;
top: 60%;
right: 8%;
animation: float-complex-2 25s ease-in-out infinite;
background: linear-gradient(135deg, rgba(139, 92, 246, 0.2) 0%, rgba(245, 158, 11, 0.15) 100%);
box-shadow: 0 8px 32px rgba(139, 92, 246, 0.3);
}
.floating-element.element-3 {
width: 100px;
height: 100px;
border-radius: 20px;
bottom: 15%;
left: 50%;
animation: float-complex-3 18s ease-in-out infinite;
background: linear-gradient(135deg, rgba(16, 185, 129, 0.2) 0%, rgba(59, 130, 246, 0.15) 100%);
box-shadow: 0 8px 32px rgba(16, 185, 129, 0.3);
transform: rotate(45deg);
}
.floating-element.element-4 {
width: 60px;
height: 60px;
border-radius: 50%;
top: 30%;
right: 25%;
animation: float-complex-4 22s ease-in-out infinite;
background: linear-gradient(135deg, rgba(245, 158, 11, 0.25) 0%, rgba(239, 68, 68, 0.15) 100%);
box-shadow: 0 8px 32px rgba(245, 158, 11, 0.3);
}
@keyframes float-complex-1 {
0%, 100% {
transform: translateX(0px) translateY(0px) rotate(0deg) scale(1);
border-radius: 50%;
}
25% {
transform: translateX(50px) translateY(-30px) rotate(90deg) scale(1.1);
border-radius: 30% 70% 70% 30% / 30% 30% 70% 70%;
}
50% {
transform: translateX(100px) translateY(20px) rotate(180deg) scale(0.9);
border-radius: 20px;
}
75% {
transform: translateX(30px) translateY(50px) rotate(270deg) scale(1.05);
border-radius: 30% 70% 70% 30% / 30% 30% 70% 70%;
}
}
@keyframes float-complex-2 {
0%, 100% {
transform: translateX(0px) translateY(0px) rotate(0deg) scale(1);
border-radius: 30% 70% 70% 30% / 30% 30% 70% 70%;
}
20% {
transform: translateX(-40px) translateY(30px) rotate(72deg) scale(1.15);
border-radius: 50%;
}
40% {
transform: translateX(-80px) translateY(-20px) rotate(144deg) scale(0.85);
border-radius: 20px;
}
60% {
transform: translateX(-30px) translateY(-60px) rotate(216deg) scale(1.1);
border-radius: 40% 60% 60% 40% / 40% 40% 60% 60%;
}
80% {
transform: translateX(20px) translateY(-30px) rotate(288deg) scale(0.95);
border-radius: 50%;
}
}
@keyframes float-complex-3 {
0%, 100% {
transform: translateX(0px) translateY(0px) rotate(45deg) scale(1);
}
33% {
transform: translateX(-60px) translateY(-40px) rotate(165deg) scale(1.2);
}
66% {
transform: translateX(40px) translateY(-80px) rotate(285deg) scale(0.8);
}
}
@keyframes float-complex-4 {
0%, 100% {
transform: translateX(0px) translateY(0px) rotate(0deg) scale(1);
opacity: 0.8;
}
25% {
transform: translateX(-30px) translateY(40px) rotate(90deg) scale(1.3);
opacity: 0.6;
}
50% {
transform: translateX(50px) translateY(80px) rotate(180deg) scale(0.7);
opacity: 1;
}
75% {
transform: translateX(80px) translateY(20px) rotate(270deg) scale(1.1);
opacity: 0.7;
}
}
/* Enhanced Panel Body */
.panel-body {
flex: 1;
display: flex;
align-items: center;
justify-content: center;
position: relative;
z-index: 2;
padding: 1rem;
min-height: 300px;
}
/* Stats Container */
.stats-container {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 1.5rem;
width: 100%;
}
.stat-group {
background: rgba(255, 255, 255, 0.05);
border-radius: 12px;
padding: 1.5rem;
border: 1px solid rgba(255, 255, 255, 0.1);
}
.stat-group h4 {
font-size: 1.1rem;
font-weight: 700;
color: #ffffff !important;
margin: 0 0 1rem 0;
text-align: center;
}
.stat-row {
display: flex;
justify-content: space-between;
align-items: center;
padding: 0.75rem 0;
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
font-size: 0.9rem;
}
.stat-row:last-child {
border-bottom: none;
}
.stat-label {
color: rgba(255, 255, 255, 0.8);
font-weight: 500;
}
.stat-value {
color: #ffffff;
font-weight: 700;
}
.stat-value.significant {
color: #10b981;
}
.stat-value.decision-reject {
color: #ef4444;
}
/* Chart Error */
.chart-error {
display: flex;
align-items: center;
justify-content: center;
padding: 2rem;
color: rgba(255, 255, 255, 0.6);
font-size: 0.9rem;
text-align: center;
background: rgba(239, 68, 68, 0.1);
border: 1px solid rgba(239, 68, 68, 0.3);
border-radius: 8px;
}
/* Loading State */
.loading-state {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 4rem;
color: rgba(255, 255, 255, 0.8);
}
.pulse-loader {
width: 40px;
height: 40px;
background: #3b82f6;
border-radius: 50%;
animation: pulse 1.5s ease-in-out infinite;
margin-bottom: 1rem;
}
@keyframes pulse {
0% { transform: scale(0); opacity: 1; }
100% { transform: scale(1); opacity: 0; }
}
/* No Data State */
.no-data-state {
text-align: center;
padding: 4rem 2rem;
color: rgba(255, 255, 255, 0.8);
}
.no-data-state h3 {
color: #ffffff !important;
margin-bottom: 1rem;
font-size: 1.5rem;
font-weight: 700;
}
.no-data-state p {
color: rgba(255, 255, 255, 0.6);
margin-bottom: 2rem;
line-height: 1.6;
}
/* Enhanced Typography */
.analytics-page * {
font-family: 'Inter', system-ui, -apple-system, sans-serif;
}
.analytics-page h1,
.analytics-page h2,
.analytics-page h3,
.analytics-page h4,
.analytics-page h5,
.analytics-page h6 {
color: #ffffff !important;
font-weight: 700;
letter-spacing: -0.025em;
}
.analytics-page p,
.analytics-page span,
.analytics-page div {
color: rgba(255, 255, 255, 0.9);
}
/* Glass Panel */
.glass-panel {
background: rgba(255, 255, 255, 0.05);
backdrop-filter: blur(20px);
border: 1px solid rgba(255, 255, 255, 0.1);
border-radius: 20px;
padding: 2rem;
margin: 1rem;
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.1);
}
/* Confidence Intervals Visualization */
.ci-visualization {
margin: 1rem 0;
}
.ci-bar {
height: 20px;
background: rgba(255, 255, 255, 0.1);
border-radius: 10px;
position: relative;
margin-bottom: 0.5rem;
}
.ci-range {
position: absolute;
height: 100%;
background: linear-gradient(90deg, #3b82f6, #1e40af);
border-radius: 10px;
}
.ci-point {
position: absolute;
width: 4px;
height: 100%;
background: #ffffff;
border-radius: 2px;
transform: translateX(-50%);
}
.ci-labels {
display: flex;
justify-content: space-between;
font-size: 0.8rem;
color: rgba(255, 255, 255, 0.8);
font-weight: 600;
}
/* ANOVA Table */
.anova-table {
width: 100%;
}
.anova-row {
display: grid;
grid-template-columns: 2fr 1fr 1fr 1fr;
gap: 1rem;
padding: 0.75rem 0;
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
font-size: 0.9rem;
}
.anova-row.header {
font-weight: 700;
color: #ffffff;
border-bottom: 2px solid rgba(255, 255, 255, 0.2);
}
.anova-row span {
color: rgba(255, 255, 255, 0.9);
}
.anova-row .significant {
color: #10b981;
font-weight: 700;
}
/* Responsive Design */
@media (max-width: 1200px) {
.chart-panel.large {
grid-column: span 1;
}
.analytics-grid {
grid-template-columns: 1fr;
}
.kpi-grid {
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
}
}
@media (max-width: 768px) {
.header-main h1 {
font-size: 2rem;
}
.summary-header h2 {
font-size: 1.8rem;
}
.kpi-card {
padding: 1.5rem;
}
.kpi-value {
font-size: 2rem;
}
.chart-panel {
padding: 1rem;
min-height: 300px;
}
.panel-header {
flex-direction: column;
align-items: flex-start;
gap: 1rem;
}
}
/* Perfect spacing adjustments */
.analytics-page .content-area {
padding: 1rem;
}
.analytics-grid {
gap: 1rem;
}
.chart-panel {
margin-bottom: 0;
}
.kpi-grid {
gap: 1rem;
margin-bottom: 1.5rem;
}
/* ============================================ */
/* ENHANCED ANT DESIGN CHARTS */
/* ============================================ */
/* Ant Design Card Enhancement */
.ant-card {
background: linear-gradient(135deg, rgba(17, 24, 39, 0.95) 0%, rgba(31, 41, 55, 0.90) 100%) !important;
border: 1px solid rgba(59, 130, 246, 0.2) !important;
border-radius: 20px !important;
backdrop-filter: blur(20px) !important;
box-shadow:
0 20px 25px -5px rgba(0, 0, 0, 0.3),
0 10px 10px -5px rgba(0, 0, 0, 0.2),
inset 0 1px 0 rgba(255, 255, 255, 0.1) !important;
transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1) !important;
position: relative;
overflow: hidden;
font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
}
.ant-card::before {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(59, 130, 246, 0.1), transparent);
transition: left 0.8s ease-in-out;
z-index: 1;
}
.ant-card:hover::before {
left: 100%;
}
.ant-card:hover {
transform: translateY(-8px) scale(1.02) !important;
border-color: rgba(59, 130, 246, 0.4) !important;
box-shadow:
0 32px 64px -12px rgba(59, 130, 246, 0.25),
0 20px 25px -5px rgba(0, 0, 0, 0.4),
0 10px 10px -5px rgba(0, 0, 0, 0.3),
inset 0 1px 0 rgba(255, 255, 255, 0.2) !important;
}
.ant-card-head {
background: linear-gradient(135deg, rgba(59, 130, 246, 0.1) 0%, rgba(139, 92, 246, 0.05) 100%) !important;
border-bottom: 1px solid rgba(59, 130, 246, 0.2) !important;
border-radius: 20px 20px 0 0 !important;
position: relative;
z-index: 2;
padding: 1rem 1.5rem !important;
}
.ant-card-head-title {
color: #e5e7eb !important;
font-size: 1.25rem !important;
font-weight: 700 !important;
font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif !important;
text-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
background: linear-gradient(135deg, #3b82f6 0%, #8b5cf6 50%, #10b981 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
position: relative;
z-index: 2;
margin: 0 !important;
}
.ant-card-body {
background: transparent !important;
padding: 1.5rem !important;
position: relative;
z-index: 2;
}
/* Professional Chart Text Styling */
.ant-card text {
font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif !important;
font-weight: 500 !important;
fill: #e5e7eb !important;
}
.ant-card .ant-typography {
color: #e5e7eb !important;
font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif !important;
}
/* Enhanced Chart Legends */
.ant-card .recharts-legend-wrapper {
color: #e5e7eb !important;
}
.ant-card .recharts-legend-item-text {
color: #e5e7eb !important;
font-weight: 600 !important;
font-size: 0.875rem !important;
}
/* Chart Axis Styling */
.ant-card .recharts-cartesian-axis-tick text {
fill: #9ca3af !important;
font-size: 0.75rem !important;
font-weight: 500 !important;
}
.ant-card .recharts-cartesian-axis-line {
stroke: rgba(59, 130, 246, 0.3) !important;
stroke-width: 2;
}
.ant-card .recharts-cartesian-grid-horizontal line,
.ant-card .recharts-cartesian-grid-vertical line {
stroke: rgba(59, 130, 246, 0.1) !important;
stroke-width: 1;
}
/* Chart Loading Animation */
.chart-loading {
display: flex;
justify-content: center;
align-items: center;
height: 300px;
position: relative;
}
.chart-loading::before {
content: '';
width: 50px;
height: 50px;
border: 3px solid rgba(59, 130, 246, 0.3);
border-top: 3px solid #3b82f6;
border-radius: 50%;
animation: professional-spin 1s linear infinite;
}
@keyframes professional-spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
/* Enhanced Typography for Charts */
.chart-title {
font-size: 1.125rem !important;
font-weight: 700 !important;
color: #e5e7eb !important;
margin-bottom: 0.75rem !important;
font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif !important;
text-align: center;
background: linear-gradient(135deg, #3b82f6 0%, #8b5cf6 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.chart-subtitle {
font-size: 0.875rem !important;
font-weight: 500 !important;
color: #9ca3af !important;
margin-bottom: 1rem !important;
font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif !important;
text-align: center;
}
/* Chart Value Labels */
.chart-value-label {
font-size: 0.75rem !important;
font-weight: 600 !important;
fill: #e5e7eb !important;
font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif !important;
}
/* Enhanced Statistical Tables */
.ant-table {
background: linear-gradient(135deg, rgba(17, 24, 39, 0.95) 0%, rgba(31, 41, 55, 0.90) 100%) !important;
border-radius: 16px !important;
overflow: hidden;
backdrop-filter: blur(20px);
border: 1px solid rgba(59, 130, 246, 0.2);
}
.ant-table-thead > tr > th {
background: linear-gradient(135deg, rgba(59, 130, 246, 0.1) 0%, rgba(139, 92, 246, 0.05) 100%) !important;
color: #e5e7eb !important;
font-weight: 700 !important;
font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif !important;
border-bottom: 1px solid rgba(59, 130, 246, 0.2) !important;
padding: 1rem !important;
}
.ant-table-tbody > tr > td {
background: transparent !important;
color: #d1d5db !important;
font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif !important;
border-bottom: 1px solid rgba(59, 130, 246, 0.1) !important;
padding: 0.75rem 1rem !important;
}
.ant-table-tbody > tr:hover > td {
background: rgba(59, 130, 246, 0.05) !important;
}
/* Enhanced Input Controls */
.ant-input {
background: rgba(17, 24, 39, 0.8) !important;
border: 1px solid rgba(59, 130, 246, 0.3) !important;
border-radius: 12px !important;
color: #e5e7eb !important;
font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif !important;
padding: 0.75rem 1rem !important;
transition: all 0.3s ease !important;
}
.ant-input:focus {
border-color: rgba(59, 130, 246, 0.6) !important;
box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1) !important;
}
.ant-select-selector {
background: rgba(17, 24, 39, 0.8) !important;
border: 1px solid rgba(59, 130, 246, 0.3) !important;
border-radius: 12px !important;
color: #e5e7eb !important;
font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif !important;
}
.ant-select-focused .ant-select-selector {
border-color: rgba(59, 130, 246, 0.6) !important;
box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1) !important;
}
/* Enhanced Buttons */
.ant-btn-primary {
background: linear-gradient(135deg, #3b82f6 0%, #8b5cf6 100%) !important;
border: none !important;
border-radius: 12px !important;
font-weight: 600 !important;
font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif !important;
padding: 0.75rem 1.5rem !important;
height: auto !important;
transition: all 0.3s ease !important;
}
.ant-btn-primary:hover {
transform: translateY(-2px) !important;
box-shadow: 0 10px 25px rgba(59, 130, 246, 0.3) !important;
background: linear-gradient(135deg, #2563eb 0%, #7c3aed 100%) !important;
}