Spaces:
Running
Running
/* Energy Simulation Styles */ | |
.energy-simulation { | |
font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif; | |
max-width: 1200px; | |
margin: 0 auto; | |
background-color: #0B0B0F; | |
color: #ffffff; | |
min-height: 100vh; | |
position: relative; | |
} | |
/* Loading Screen */ | |
.energy-simulation.loading { | |
display: flex; | |
flex-direction: column; | |
justify-content: center; | |
align-items: center; | |
height: 100vh; | |
} | |
.loading-logo { | |
width: 150px; | |
height: 150px; | |
margin-bottom: 20px; | |
position: relative; | |
} | |
.loading-logo img { | |
width: 100%; | |
height: 100%; | |
object-fit: contain; | |
} | |
.loading-pulse { | |
position: absolute; | |
top: 0; | |
left: 0; | |
right: 0; | |
bottom: 0; | |
border-radius: 50%; | |
border: 2px solid #00E0FF; | |
animation: pulse 1.5s infinite ease-in-out; | |
} | |
@keyframes pulse { | |
0% { | |
transform: scale(0.95); | |
opacity: 1; | |
} | |
70% { | |
transform: scale(1.2); | |
opacity: 0; | |
} | |
100% { | |
transform: scale(0.95); | |
opacity: 0; | |
} | |
} | |
/* Header */ | |
.simulation-header { | |
display: flex; | |
justify-content: space-between; | |
align-items: center; | |
padding: 20px; | |
background-color: rgba(20, 20, 30, 0.8); | |
backdrop-filter: blur(10px); | |
position: sticky; | |
top: 0; | |
z-index: 100; | |
border-bottom: 1px solid rgba(255, 255, 255, 0.1); | |
flex-wrap: wrap; | |
} | |
.simulation-title { | |
display: flex; | |
flex-direction: column; | |
} | |
.simulation-title h1 { | |
margin: 0; | |
font-size: 28px; | |
font-weight: 700; | |
background: linear-gradient(90deg, #00E0FF, #35F2DB); | |
-webkit-background-clip: text; | |
background-clip: text; | |
-webkit-text-fill-color: transparent; | |
letter-spacing: 1px; | |
} | |
.simulation-subtitle { | |
font-size: 14px; | |
opacity: 0.7; | |
} | |
.simulation-controls { | |
display: flex; | |
align-items: center; | |
gap: 20px; | |
flex-wrap: wrap; | |
} | |
.time-display { | |
display: flex; | |
align-items: center; | |
gap: 8px; | |
background-color: rgba(255, 255, 255, 0.05); | |
padding: 8px 12px; | |
border-radius: 8px; | |
border: 1px solid rgba(0, 224, 255, 0.2); | |
} | |
.time-label { | |
font-size: 14px; | |
opacity: 0.7; | |
} | |
.time-value { | |
font-size: 16px; | |
font-weight: 600; | |
color: #00E0FF; | |
} | |
.control-buttons { | |
display: flex; | |
gap: 10px; | |
} | |
.control-button { | |
background-color: rgba(255, 255, 255, 0.05); | |
border: 1px solid rgba(0, 224, 255, 0.2); | |
border-radius: 8px; | |
padding: 8px 12px; | |
color: white; | |
font-size: 14px; | |
cursor: pointer; | |
transition: all 0.2s ease; | |
} | |
.control-button:hover { | |
background-color: rgba(0, 224, 255, 0.1); | |
} | |
.control-button.active { | |
background-color: rgba(0, 224, 255, 0.2); | |
border-color: #00E0FF; | |
color: #00E0FF; | |
} | |
.speed-control { | |
display: flex; | |
align-items: center; | |
gap: 8px; | |
} | |
.speed-label { | |
font-size: 14px; | |
opacity: 0.7; | |
} | |
.speed-buttons { | |
display: flex; | |
gap: 2px; | |
} | |
.speed-button { | |
background-color: rgba(255, 255, 255, 0.05); | |
border: 1px solid rgba(255, 255, 255, 0.1); | |
border-radius: 4px; | |
padding: 4px 8px; | |
color: white; | |
font-size: 12px; | |
cursor: pointer; | |
transition: all 0.2s ease; | |
} | |
.speed-button:hover { | |
background-color: rgba(0, 224, 255, 0.1); | |
} | |
.speed-button.active { | |
background-color: rgba(0, 224, 255, 0.2); | |
border-color: #00E0FF; | |
color: #00E0FF; | |
} | |
/* Navigation */ | |
.simulation-navigation { | |
display: flex; | |
gap: 2px; | |
background-color: rgba(20, 20, 30, 0.5); | |
padding: 0 20px; | |
overflow-x: auto; | |
scrollbar-width: none; | |
} | |
.simulation-navigation::-webkit-scrollbar { | |
display: none; | |
} | |
.nav-button { | |
padding: 16px 20px; | |
background: transparent; | |
border: none; | |
color: white; | |
font-size: 16px; | |
cursor: pointer; | |
position: relative; | |
white-space: nowrap; | |
} | |
.nav-button.active { | |
color: #00E0FF; | |
} | |
.nav-button.active::after { | |
content: ''; | |
position: absolute; | |
bottom: 0; | |
left: 0; | |
right: 0; | |
height: 3px; | |
background: linear-gradient(90deg, #00E0FF, #35F2DB); | |
border-radius: 3px 3px 0 0; | |
} | |
/* Main Content */ | |
.simulation-content { | |
padding: 20px; | |
min-height: calc(100vh - 200px); | |
} | |
/* Overview Tab */ | |
.overview-tab { | |
display: flex; | |
flex-direction: column; | |
gap: 30px; | |
} | |
.energy-summary { | |
display: grid; | |
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); | |
gap: 20px; | |
} | |
.summary-card { | |
background: rgba(255, 255, 255, 0.05); | |
border-radius: 16px; | |
padding: 20px; | |
border: 1px solid rgba(0, 224, 255, 0.1); | |
} | |
.summary-card h3 { | |
margin-top: 0; | |
margin-bottom: 16px; | |
font-size: 18px; | |
font-weight: 600; | |
} | |
.balance-metrics { | |
display: grid; | |
grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); | |
gap: 16px; | |
} | |
.metric { | |
display: flex; | |
flex-direction: column; | |
gap: 4px; | |
} | |
.metric-label { | |
font-size: 14px; | |
opacity: 0.7; | |
} | |
.metric-value { | |
font-size: 18px; | |
font-weight: 600; | |
} | |
.metric-value.positive { | |
color: #35F2DB; | |
} | |
.metric-value.negative { | |
color: #FF5555; | |
} | |
/* Energy Flow Diagram */ | |
.energy-flow-diagram { | |
background: rgba(255, 255, 255, 0.05); | |
border-radius: 16px; | |
padding: 30px; | |
border: 1px solid rgba(0, 224, 255, 0.1); | |
display: flex; | |
flex-direction: column; | |
gap: 30px; | |
position: relative; | |
} | |
.energy-sources { | |
display: flex; | |
justify-content: space-between; | |
gap: 20px; | |
} | |
.energy-source { | |
flex: 1; | |
display: flex; | |
flex-direction: column; | |
align-items: center; | |
text-align: center; | |
padding: 15px; | |
background: rgba(255, 255, 255, 0.05); | |
border-radius: 12px; | |
border: 1px solid rgba(255, 255, 255, 0.1); | |
} | |
.energy-source.solar { | |
border-color: rgba(255, 215, 0, 0.3); | |
} | |
.energy-source.grid { | |
border-color: rgba(255, 85, 85, 0.3); | |
} | |
.source-icon { | |
font-size: 24px; | |
margin-bottom: 10px; | |
} | |
.source-label { | |
font-size: 14px; | |
opacity: 0.7; | |
margin-bottom: 5px; | |
} | |
.source-value { | |
font-size: 18px; | |
font-weight: 600; | |
} | |
.energy-flows { | |
display: flex; | |
justify-content: space-between; | |
gap: 20px; | |
position: relative; | |
height: 40px; | |
} | |
.flow { | |
height: 10px; | |
background: linear-gradient(90deg, #00E0FF, #35F2DB); | |
border-radius: 5px; | |
position: relative; | |
animation: flowPulse 2s infinite; | |
} | |
@keyframes flowPulse { | |
0% { | |
opacity: 0.7; | |
} | |
50% { | |
opacity: 1; | |
} | |
100% { | |
opacity: 0.7; | |
} | |
} | |
.solar-flow { | |
background: linear-gradient(90deg, #FFD700, #FFA500); | |
} | |
.grid-flow { | |
background: linear-gradient(90deg, #FF5555, #FF8888); | |
} | |
.battery-flow { | |
background: linear-gradient(90deg, #00E0FF, #35F2DB); | |
} | |
.energy-storage { | |
align-self: center; | |
display: flex; | |
flex-direction: column; | |
align-items: center; | |
text-align: center; | |
padding: 20px; | |
background: rgba(255, 255, 255, 0.05); | |
border-radius: 12px; | |
border: 1px solid rgba(0, 224, 255, 0.3); | |
width: 200px; | |
} | |
.storage-icon { | |
font-size: 24px; | |
margin-bottom: 10px; | |
} | |
.storage-label { | |
font-size: 14px; | |
opacity: 0.7; | |
margin-bottom: 5px; | |
} | |
.storage-value { | |
font-size: 24px; | |
font-weight: 600; | |
color: #00E0FF; | |
margin-bottom: 5px; | |
} | |
.storage-capacity { | |
font-size: 12px; | |
opacity: 0.7; | |
} | |
.energy-demand { | |
align-self: center; | |
display: flex; | |
flex-direction: column; | |
align-items: center; | |
text-align: center; | |
padding: 20px; | |
background: rgba(255, 255, 255, 0.05); | |
border-radius: 12px; | |
border: 1px solid rgba(53, 242, 219, 0.3); | |
width: 200px; | |
} | |
.demand-icon { | |
font-size: 24px; | |
margin-bottom: 10px; | |
} | |
.demand-label { | |
font-size: 14px; | |
opacity: 0.7; | |
margin-bottom: 5px; | |
} | |
.demand-value { | |
font-size: 24px; | |
font-weight: 600; | |
color: #35F2DB; | |
margin-bottom: 5px; | |
} | |
.demand-details { | |
font-size: 12px; | |
opacity: 0.7; | |
} | |
/* Optimization Summary */ | |
.optimization-summary { | |
background: rgba(255, 255, 255, 0.05); | |
border-radius: 16px; | |
padding: 20px; | |
border: 1px solid rgba(0, 224, 255, 0.1); | |
} | |
.optimization-summary h3 { | |
margin-top: 0; | |
margin-bottom: 16px; | |
font-size: 18px; | |
font-weight: 600; | |
} | |
.optimization-metrics { | |
display: grid; | |
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); | |
gap: 20px; | |
} | |
.metric-bar-container { | |
height: 8px; | |
background-color: rgba(255, 255, 255, 0.1); | |
border-radius: 4px; | |
overflow: hidden; | |
margin-top: 8px; | |
} | |
.metric-bar { | |
height: 100%; | |
border-radius: 4px; | |
transition: width 0.5s ease; | |
} | |
/* Gauge Component */ | |
.gauge-container { | |
display: flex; | |
flex-direction: column; | |
align-items: center; | |
margin-bottom: 10px; | |
} | |
.gauge { | |
width: 150px; | |
height: 150px; | |
position: relative; | |
} | |
.gauge-body { | |
width: 100%; | |
height: 100%; | |
border-radius: 50%; | |
position: relative; | |
overflow: hidden; | |
background-color: rgba(255, 255, 255, 0.05); | |
border: 1px solid rgba(255, 255, 255, 0.1); | |
} | |
.gauge-fill { | |
position: absolute; | |
top: 0; | |
left: 0; | |
width: 100%; | |
height: 100%; | |
transform-origin: center bottom; | |
transition: transform 1s ease; | |
} | |
.gauge-cover { | |
position: absolute; | |
top: 15%; | |
left: 15%; | |
width: 70%; | |
height: 70%; | |
background-color: #0B0B0F; | |
border-radius: 50%; | |
display: flex; | |
flex-direction: column; | |
justify-content: center; | |
align-items: center; | |
} | |
.gauge-value { | |
font-size: 24px; | |
font-weight: 600; | |
} | |
.gauge-label { | |
font-size: 12px; | |
opacity: 0.7; | |
} | |
.gauge-max { | |
font-size: 12px; | |
opacity: 0.7; | |
margin-top: 5px; | |
} | |
/* Bar Chart Component */ | |
.bar-chart { | |
display: flex; | |
flex-direction: column; | |
gap: 8px; | |
} | |
.bar-container { | |
display: flex; | |
align-items: center; | |
gap: 10px; | |
} | |
.bar-label { | |
width: 60px; | |
font-size: 12px; | |
text-align: right; | |
} | |
.bar-wrapper { | |
flex: 1; | |
height: 20px; | |
background-color: rgba(255, 255, 255, 0.05); | |
border-radius: 4px; | |
overflow: hidden; | |
position: relative; | |
} | |
.bar { | |
height: 100%; | |
transition: width 0.5s ease; | |
} | |
.bar-value { | |
position: absolute; | |
right: 8px; | |
top: 50%; | |
transform: translateY(-50%); | |
font-size: 12px; | |
font-weight: 600; | |
} | |
/* Solar Tab */ | |
.solar-tab { | |
display: flex; | |
flex-direction: column; | |
gap: 30px; | |
} | |
.solar-metrics { | |
display: grid; | |
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); | |
gap: 20px; | |
} | |
.metric-card { | |
background: rgba(255, 255, 255, 0.05); | |
border-radius: 16px; | |
padding: 20px; | |
border: 1px solid rgba(0, 224, 255, 0.1); | |
display: flex; | |
flex-direction: column; | |
align-items: center; | |
} | |
.metric-card h3 { | |
margin: 10px 0 0 0; | |
font-size: 18px; | |
font-weight: 600; | |
text-align: center; | |
} | |
.daily-production { | |
width: 100%; | |
} | |
.daily-production h3 { | |
margin-top: 0; | |
margin-bottom: 16px; | |
font-size: 18px; | |
font-weight: 600; | |
text-align: left; | |
} | |
.solar-details { | |
display: grid; | |
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); | |
gap: 20px; | |
} | |
.detail-card { | |
background: rgba(255, 255, 255, 0.05); | |
border-radius: 16px; | |
padding: 20px; | |
border: 1px solid rgba(0, 224, 255, 0.1); | |
} | |
.detail-card h3 { | |
margin-top: 0; | |
margin-bottom: 16px; | |
font-size: 18px; | |
font-weight: 600; | |
} | |
.detail-grid { | |
display: grid; | |
grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); | |
gap: 16px; | |
} | |
.detail-item { | |
display: flex; | |
flex-direction: column; | |
gap: 4px; | |
} | |
.detail-label { | |
font-size: 14px; | |
opacity: 0.7; | |
} | |
.detail-value { | |
font-size: 16px; | |
font-weight: 600; | |
} | |
.weather-forecast { | |
display: flex; | |
justify-content: space-between; | |
gap: 10px; | |
} | |
.weather-item { | |
flex: 1; | |
display: flex; | |
flex-direction: column; | |
align-items: center; | |
text-align: center; | |
padding: 10px; | |
background: rgba(255, 255, 255, 0.05); | |
border-radius: 8px; | |
} | |
.weather-icon { | |
font-size: 24px; | |
margin-bottom: 5px; | |
} | |
.weather-day { | |
font-size: 12px; | |
opacity: 0.7; | |
margin-bottom: 5px; | |
} | |
.weather-impact { | |
font-size: 14px; | |
font-weight: 600; | |
} | |
.weather-impact.positive { | |
color: #35F2DB; | |
} | |
.weather-impact.neutral { | |
color: #FFC107; | |
} | |
.weather-impact.negative { | |
color: #FF5555; | |
} | |
/* Battery Tab */ | |
.battery-tab { | |
display: flex; | |
flex-direction: column; | |
gap: 30px; | |
} | |
.battery-metrics { | |
display: grid; | |
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); | |
gap: 20px; | |
} | |
.battery-status { | |
width: 100%; | |
} | |
.battery-status h3 { | |
margin-top: 0; | |
margin-bottom: 16px; | |
font-size: 18px; | |
font-weight: 600; | |
} | |
.status-grid { | |
display: grid; | |
grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); | |
gap: 16px; | |
} | |
.status-item { | |
display: flex; | |
flex-direction: column; | |
gap: 4px; | |
} | |
.status-label { | |
font-size: 14px; | |
opacity: 0.7; | |
} | |
.status-value { | |
font-size: 16px; | |
font-weight: 600; | |
} | |
.status-value.positive { | |
color: #35F2DB; | |
} | |
.status-value.negative { | |
color: #FF5555; | |
} | |
.status-value.status-active { | |
color: #35F2DB; | |
} | |
.status-value.status-stable { | |
color: #35F2DB; | |
} | |
.battery-history { | |
background: rgba(255, 255, 255, 0.05); | |
border-radius: 16px; | |
padding: 20px; | |
border: 1px solid rgba(0, 224, 255, 0.1); | |
} | |
.battery-history h3 { | |
margin-top: 0; | |
margin-bottom: 16px; | |
font-size: 18px; | |
font-weight: 600; | |
} | |
.battery-controls { | |
background: rgba(255, 255, 255, 0.05); | |
border-radius: 16px; | |
padding: 20px; | |
border: 1px solid rgba(0, 224, 255, 0.1); | |
} | |
.battery-controls h3 { | |
margin-top: 0; | |
margin-bottom: 16px; | |
font-size: 18px; | |
font-weight: 600; | |
} | |
.control-grid { | |
display: grid; | |
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); | |
gap: 20px; | |
} | |
.control-item { | |
display: flex; | |
flex-direction: column; | |
gap: 10px; | |
} | |
.control-label { | |
font-size: 14px; | |
opacity: 0.7; | |
} | |
.control-slider-container { | |
display: flex; | |
align-items: center; | |
gap: 10px; | |
} | |
.control-slider { | |
flex: 1; | |
height: 4px; | |
-webkit-appearance: none; | |
appearance: none; | |
background: rgba(255, 255, 255, 0.1); | |
border-radius: 2px; | |
outline: none; | |
} | |
.control-slider::-webkit-slider-thumb { | |
-webkit-appearance: none; | |
appearance: none; | |
width: 16px; | |
height: 16px; | |
border-radius: 50%; | |
background: #00E0FF; | |
cursor: pointer; | |
} | |
.control-slider::-moz-range-thumb { | |
width: 16px; | |
height: 16px; | |
border-radius: 50%; | |
background: #00E0FF; | |
cursor: pointer; | |
} | |
.slider-value { | |
font-size: 14px; | |
font-weight: 600; | |
min-width: 50px; | |
} | |
.control-buttons { | |
display: flex; | |
gap: 5px; | |
} | |
.mode-button { | |
flex: 1; | |
background-color: rgba(255, 255, 255, 0.05); | |
border: 1px solid rgba(255, 255, 255, 0.1); | |
border-radius: 4px; | |
padding: 6px 10px; | |
color: white; | |
font-size: 12px; | |
cursor: pointer; | |
transition: all 0.2s ease; | |
} | |
.mode-button:hover { | |
background-color: rgba(0, 224, 255, 0.1); | |
} | |
.mode-button.active { | |
background-color: rgba(0, 224, 255, 0.2); | |
border-color: #00E0FF; | |
color: #00E0FF; | |
} | |
/* Toggle Switch */ | |
.toggle-switch { | |
position: relative; | |
display: inline-block; | |
width: 50px; | |
height: 24px; | |
} | |
.toggle-input { | |
opacity: 0; | |
width: 0; | |
height: 0; | |
} | |
.toggle-label { | |
position: absolute; | |
cursor: pointer; | |
top: 0; | |
left: 0; | |
right: 0; | |
bottom: 0; | |
background-color: rgba(255, 255, 255, 0.1); | |
transition: .4s; | |
border-radius: 24px; | |
} | |
.toggle-label:before { | |
position: absolute; | |
content: ""; | |
height: 16px; | |
width: 16px; | |
left: 4px; | |
bottom: 4px; | |
background-color: white; | |
transition: .4s; | |
border-radius: 50%; | |
} | |
.toggle-input:checked + .toggle-label { | |
background-color: rgba(0, 224, 255, 0.5); | |
} | |
.toggle-input:checked + .toggle-label:before { | |
transform: translateX(26px); | |
background-color: #00E0FF; | |
} | |
/* Grid Tab */ | |
.grid-tab { | |
display: flex; | |
flex-direction: column; | |
gap: 30px; | |
} | |
.grid-metrics { | |
display: grid; | |
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); | |
gap: 20px; | |
} | |
.grid-status { | |
width: 100%; | |
} | |
.grid-status h3 { | |
margin-top: 0; | |
margin-bottom: 16px; | |
font-size: 18px; | |
font-weight: 600; | |
} | |
.grid-history { | |
background: rgba(255, 255, 255, 0.05); | |
border-radius: 16px; | |
padding: 20px; | |
border: 1px solid rgba(0, 224, 255, 0.1); | |
} | |
.grid-history h3 { | |
margin-top: 0; | |
margin-bottom: 16px; | |
font-size: 18px; | |
font-weight: 600; | |
} | |
.grid-controls { | |
background: rgba(255, 255, 255, 0.05); | |
border-radius: 16px; | |
padding: 20px; | |
border: 1px solid rgba(0, 224, 255, 0.1); | |
} | |
.grid-controls h3 { | |
margin-top: 0; | |
margin-bottom: 16px; | |
font-size: 18px; | |
font-weight: 600; | |
} | |
/* Demand Tab */ | |
.demand-tab { | |
display: flex; | |
flex-direction: column; | |
gap: 30px; | |
} | |
.demand-metrics { | |
display: grid; | |
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); | |
gap: 20px; | |
} | |
.charger-status { | |
width: 100%; | |
} | |
.charger-status h3 { | |
margin-top: 0; | |
margin-bottom: 16px; | |
font-size: 18px; | |
font-weight: 600; | |
} | |
.charger-types { | |
background: rgba(255, 255, 255, 0.05); | |
border-radius: 16px; | |
padding: 20px; | |
border: 1px solid rgba(0, 224, 255, 0.1); | |
} | |
.charger-types h3 { | |
margin-top: 0; | |
margin-bottom: 16px; | |
font-size: 18px; | |
font-weight: 600; | |
} | |
.charger-type-grid { | |
display: grid; | |
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); | |
gap: 20px; | |
} | |
.charger-type-card { | |
background: rgba(255, 255, 255, 0.05); | |
border-radius: 12px; | |
padding: 15px; | |
border: 1px solid rgba(255, 255, 255, 0.1); | |
} | |
.type-header { | |
display: flex; | |
justify-content: space-between; | |
align-items: center; | |
margin-bottom: 10px; | |
} | |
.type-header h4 { | |
margin: 0; | |
font-size: 16px; | |
font-weight: 600; | |
} | |
.type-power { | |
font-size: 14px; | |
opacity: 0.7; | |
} | |
.type-count { | |
display: flex; | |
flex-direction: column; | |
align-items: center; | |
margin-bottom: 15px; | |
} | |
.count-value { | |
font-size: 24px; | |
font-weight: 600; | |
color: #35F2DB; | |
} | |
.count-label { | |
font-size: 12px; | |
opacity: 0.7; | |
} | |
.type-usage, .type-power-share { | |
margin-bottom: 10px; | |
} | |
.usage-bar-container, .power-bar-container { | |
height: 8px; | |
background-color: rgba(255, 255, 255, 0.1); | |
border-radius: 4px; | |
overflow: hidden; | |
margin-bottom: 5px; | |
} | |
.usage-bar, .power-bar { | |
height: 100%; | |
border-radius: 4px; | |
transition: width 0.5s ease; | |
} | |
.usage-label, .power-label { | |
font-size: 12px; | |
opacity: 0.7; | |
} | |
.demand-forecast { | |
background: rgba(255, 255, 255, 0.05); | |
border-radius: 16px; | |
padding: 20px; | |
border: 1px solid rgba(0, 224, 255, 0.1); | |
} | |
.demand-forecast h3 { | |
margin-top: 0; | |
margin-bottom: 16px; | |
font-size: 18px; | |
font-weight: 600; | |
} | |
/* Optimization Tab */ | |
.optimization-tab { | |
display: flex; | |
flex-direction: column; | |
gap: 30px; | |
} | |
.optimization-modes { | |
background: rgba(255, 255, 255, 0.05); | |
border-radius: 16px; | |
padding: 20px; | |
border: 1px solid rgba(0, 224, 255, 0.1); | |
} | |
.optimization-modes h3 { | |
margin-top: 0; | |
margin-bottom: 16px; | |
font-size: 18px; | |
font-weight: 600; | |
} | |
.mode-cards { | |
display: grid; | |
grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); | |
gap: 20px; | |
} | |
.mode-card { | |
background: rgba(255, 255, 255, 0.05); | |
border-radius: 12px; | |
padding: 20px; | |
border: 1px solid rgba(255, 255, 255, 0.1); | |
cursor: pointer; | |
transition: all 0.3s ease; | |
} | |
.mode-card:hover { | |
transform: translateY(-5px); | |
background: rgba(255, 255, 255, 0.08); | |
} | |
.mode-card.active { | |
border-color: #00E0FF; | |
background: rgba(0, 224, 255, 0.1); | |
} | |
.mode-icon { | |
font-size: 24px; | |
margin-bottom: 10px; | |
} | |
.mode-card h4 { | |
margin: 0 0 10px 0; | |
font-size: 16px; | |
font-weight: 600; | |
} | |
.mode-card p { | |
font-size: 14px; | |
opacity: 0.7; | |
margin-bottom: 15px; | |
} | |
.mode-benefits { | |
padding-left: 20px; | |
margin: 0; | |
} | |
.mode-benefits li { | |
font-size: 12px; | |
margin-bottom: 5px; | |
} | |
.optimization-results { | |
background: rgba(255, 255, 255, 0.05); | |
border-radius: 16px; | |
padding: 20px; | |
border: 1px solid rgba(0, 224, 255, 0.1); | |
} | |
.optimization-results h3 { | |
margin-top: 0; | |
margin-bottom: 16px; | |
font-size: 18px; | |
font-weight: 600; | |
} | |
.results-grid { | |
display: grid; | |
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); | |
gap: 20px; | |
} | |
.result-card { | |
background: rgba(255, 255, 255, 0.05); | |
border-radius: 12px; | |
padding: 15px; | |
border: 1px solid rgba(255, 255, 255, 0.1); | |
} | |
.result-card h4 { | |
margin: 0 0 15px 0; | |
font-size: 16px; | |
font-weight: 600; | |
} | |
.result-comparison { | |
display: flex; | |
flex-direction: column; | |
gap: 10px; | |
} | |
.comparison-item { | |
display: flex; | |
justify-content: space-between; | |
align-items: center; | |
} | |
.comparison-label { | |
font-size: 14px; | |
opacity: 0.7; | |
} | |
.comparison-value { | |
font-size: 14px; | |
font-weight: 600; | |
} | |
.comparison-value.optimized { | |
color: #00E0FF; | |
} | |
.comparison-value.savings { | |
color: #35F2DB; | |
} | |
.optimization-actions { | |
display: flex; | |
justify-content: center; | |
gap: 15px; | |
flex-wrap: wrap; | |
} | |
.action-button { | |
background-color: rgba(0, 224, 255, 0.1); | |
border: 1px solid rgba(0, 224, 255, 0.3); | |
border-radius: 8px; | |
padding: 10px 20px; | |
color: white; | |
font-size: 14px; | |
cursor: pointer; | |
transition: all 0.2s ease; | |
} | |
.action-button:hover { | |
background-color: rgba(0, 224, 255, 0.2); | |
transform: translateY(-2px); | |
} | |
.action-button.apply { | |
background-color: rgba(0, 224, 255, 0.2); | |
border-color: #00E0FF; | |
color: #00E0FF; | |
} | |
/* Footer */ | |
.simulation-footer { | |
display: flex; | |
justify-content: space-between; | |
align-items: center; | |
padding: 20px; | |
background-color: rgba(20, 20, 30, 0.8); | |
border-top: 1px solid rgba(255, 255, 255, 0.1); | |
margin-top: 30px; | |
} | |
.footer-info { | |
display: flex; | |
flex-direction: column; | |
gap: 5px; | |
} | |
.footer-info span { | |
font-size: 12px; | |
opacity: 0.7; | |
} | |
.footer-actions { | |
display: flex; | |
gap: 10px; | |
} | |
.footer-button { | |
background-color: rgba(255, 255, 255, 0.05); | |
border: 1px solid rgba(0, 224, 255, 0.2); | |
border-radius: 6px; | |
padding: 8px 12px; | |
color: white; | |
font-size: 12px; | |
cursor: pointer; | |
transition: all 0.2s ease; | |
} | |
.footer-button:hover { | |
background-color: rgba(0, 224, 255, 0.1); | |
} | |
/* Responsive Adjustments */ | |
@media (max-width: 768px) { | |
.simulation-header { | |
flex-direction: column; | |
align-items: flex-start; | |
gap: 15px; | |
} | |
.simulation-controls { | |
width: 100%; | |
justify-content: space-between; | |
} | |
.time-display { | |
width: 100%; | |
} | |
.control-buttons, .speed-control { | |
width: 100%; | |
justify-content: space-between; | |
} | |
.mode-cards, .results-grid { | |
grid-template-columns: 1fr; | |
} | |
.solar-metrics, .battery-metrics, .grid-metrics, .demand-metrics { | |
grid-template-columns: 1fr; | |
} | |
.weather-forecast { | |
flex-wrap: wrap; | |
} | |
.weather-item { | |
min-width: 80px; | |
} | |
.simulation-footer { | |
flex-direction: column; | |
gap: 15px; | |
} | |
.footer-actions { | |
width: 100%; | |
justify-content: space-between; | |
} | |
} | |