Vision_Meta0 / EnergySimulation.css
lattmamb's picture
Upload 32 files
b33d337 verified
/* 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;
}
}