E
EcoPulse
main
.gradient-bg::before {
content: "";
position: absolute;
top: -2px;
left: -2px;
right: -2px;
bottom: -2px;
background: linear-gradient(45deg, #5c77ff, #845cff, #5c77ff);
border-radius: 1.2rem;
z-index: -1;
animation: border-animation 3s ease-in-out infinite;
}
@keyframes border-animation {
0% {
opacity: 0.3;
}
50% {
opacity: 0.6;
}
100% {
opacity: 0.3;
}
}
.chart-container {
position: relative;
height: 400px;
background: rgba(0, 0, 0, 0.3);
border-radius: 0.75rem;
padding: 1.5rem;
margin: 1rem 0;
border: 1px solid rgba(92, 119, 255, 0.2);
}
.stat-card {
background: linear-gradient(135deg, rgba(92, 119, 255, 0.15) 0%, rgba(132, 92, 255, 0.1) 100%);
border: 1px solid rgba(92, 119, 255, 0.3);
border-radius: 0.75rem;
padding: 1.5rem;
transition: all 0.3s ease;
position: relative;
overflow: hidden;
}
.stat-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);
transition: left 0.5s;
}
.stat-card:hover::before {
left: 100%;
}
.stat-card:hover {
transform: translateY(-5px);
box-shadow: 0 10px 30px rgba(92, 119, 255, 0.3);
}
.upload-zone {
border: 2px dashed rgba(92, 119, 255, 0.5);
border-radius: 1rem;
padding: 2rem;
text-align: center;
cursor: pointer;
transition: all 0.3s ease;
background: rgba(0, 0, 0, 0.2);
}
.upload-zone:hover {
border-color: rgba(92, 119, 255, 0.8);
background: rgba(92, 119, 255, 0.05);
}
.btn-ai {
background: linear-gradient(135deg, #5c77ff 0%, #845cff 100%);
color: white;
padding: 0.75rem 1.5rem;
border-radius: 0.5rem;
border: none;
font-weight: 600;
cursor: pointer;
transition: all 0.3s ease;
font-size: 0.9rem;
position: relative;
overflow: hidden;
}
.btn-ai::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.5s;
}
.btn-ai:hover::before {
left: 100%;
}
.btn-ai:hover {
transform: scale(1.05);
box-shadow: 0 10px 25px rgba(92, 119, 255, 0.4);
}
.btn-ai:disabled {
opacity: 0.5;
cursor: not-allowed;
}
.loading-spinner {
border: 3px solid rgba(92, 119, 255, 0.3);
border-top: 3px solid #5c77ff;
border-radius: 50%;
width: 40px;
height: 40px;
animation: spin 1s linear infinite;
}
@keyframes spin {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
.progress-bar {
width: 100%;
height: 8px;
background: rgba(92, 119, 255, 0.2);
border-radius: 4px;
overflow: hidden;
}
.progress-fill {
height: 100%;
background: linear-gradient(90deg, #5c77ff 0%, #845cff 100%);
transition: width 0.3s ease;
}
.map-container {
width: 100%;
height: 500px;
background: rgba(0, 0, 0, 0.3);
border-radius: 0.75rem;
position: relative;
overflow: hidden;
border: 1px solid rgba(92, 119, 255, 0.2);
}
.city-marker {
position: absolute;
width: 20px;
height: 20px;
border-radius: 50%;
cursor: pointer;
transition: all 0.3s ease;
background: rgba(92, 119, 255, 0.7);
box-shadow: 0 0 10px rgba(92, 119, 255, 0.8);
}
.city-marker:hover {
transform: scale(1.5);
box-shadow: 0 0 20px rgba(92, 119, 255, 1);
}
.tooltip {
position: absolute;
background: rgba(0, 0, 0, 0.9);
color: white;
padding: 0.5rem 1rem;
border-radius: 0.5rem;
pointer-events: none;
opacity: 0;
transition: opacity 0.3s ease;
border: 1px solid rgba(92, 119, 255, 0.5);
}
/* Fancy animations */
@keyframes fadeInUp {
from {
opacity: 0;
transform: translateY(30px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
@keyframes scaleIn {
from {
opacity: 0;
transform: scale(0.8);
}
to {
opacity: 1;
transform: scale(1);
}
}
@keyframes slideInLeft {
from {
opacity: 0;
transform: translateX(-50px);
}
to {
opacity: 1;
transform: translateX(0);
}
}
@keyframes pulse {
0%,
100% {
transform: scale(1);
}
50% {
transform: scale(1.05);
}
}
.animate-in {
animation: fadeInUp 0.6s ease-out forwards;
}
.animate-scale {
animation: scaleIn 0.5s ease-out forwards;
}
.animate-slide {
animation: slideInLeft 0.7s ease-out forwards;
}
.stat-card:hover {
animation: pulse 0.5s ease-in-out;
}
.gradient-bg {
animation: fadeInUp 0.8s ease-out forwards;
}
/* Staggered animation delays */
.gradient-bg:nth-child(1) {
animation-delay: 0.1s;
opacity: 0;
}
.gradient-bg:nth-child(2) {
animation-delay: 0.2s;
opacity: 0;
}
.gradient-bg:nth-child(3) {
animation-delay: 0.3s;
opacity: 0;
}
.gradient-bg:nth-child(4) {
animation-delay: 0.4s;
opacity: 0;
}
.gradient-bg:nth-child(5) {
animation-delay: 0.5s;
opacity: 0;
}
.gradient-bg:nth-child(6) {
animation-delay: 0.6s;
opacity: 0;
}
.gradient-bg:nth-child(7) {
animation-delay: 0.7s;
opacity: 0;
}
/* Dataset selection styling */
.dataset-selector {
display: flex;
gap: 1rem;
flex-wrap: wrap;
align-items: center;
margin-bottom: 1.5rem;
}
.dataset-dropdown {
flex: 1;
min-width: 250px;
background: rgba(31, 41, 55, 0.8);
border: 1px solid rgba(92, 119, 255, 0.3);
border-radius: 0.5rem;
padding: 0.75rem 1rem;
color: white;
font-size: 1rem;
}
.dataset-dropdown:focus {
outline: none;
border-color: #5c77ff;
box-shadow: 0 0 0 3px rgba(92, 119, 255, 0.3);
}
.upload-small {
background: rgba(92, 119, 255, 0.15);
border: 1px dashed rgba(92, 119, 255, 0.5);
border-radius: 0.5rem;
padding: 0.5rem 1rem;
cursor: pointer;
transition: all 0.3s ease;
display: inline-flex;
align-items: center;
gap: 0.5rem;
font-size: 0.9rem;
}
.upload-small:hover {
background: rgba(92, 119, 255, 0.3);
border-color: rgba(92, 119, 255, 0.8);
}
.section-title {
font-size: 1.5rem;
margin-bottom: 1rem;
background: linear-gradient(135deg, #5c77ff 0%, #845cff 100%);
-webkit-background-clip: text;
background-clip: text;
-webkit-text-fill-color: transparent;
font-weight: 700;
}
.section-divider {
height: 1px;
background: linear-gradient(90deg, transparent, rgba(92, 119, 255, 0.5), transparent);
margin: 2rem 0;
}
/* Glowing effect for important elements */
.glow {
box-shadow: 0 0 15px rgba(92, 119, 255, 0.5);
}
/* Floating animation for cards */
@keyframes floatAnimation {
0% {
transform: translateY(0px);
}
50% {
transform: translateY(-10px);
}
100% {
transform: translateY(0px);
}
}
.floating {
animation: floatAnimation 3s ease-in-out infinite;
}
.gradient-text {
background: linear-gradient(135deg, #5c77ff 0%, #845cff 100%);
-webkit-background-clip: text;
background-clip: text;
-webkit-text-fill-color: transparent;
}
You are back online
E
EcoPulse
AI Pollution Prediction
Analyze historical data and predict future pollution trends with machine learning
๐ Load Dataset
Load Selected Dataset
๐ Pollution Trends Over Time
๐ฌ Pollutant Levels Comparison
๐๏ธ Seasonal Patterns Heatmap
๐บ๏ธ Pollution Hotspots by Location
๐ค Train AI Model
Target Variable
PM2.5 Concentration
PM10 Concentration
NO2 Concentration
Air Quality Index
main