root = Card([header, regionSelector, metricsRow, generationSplit, demandForecast, plantsSection, outagesSection, maintenanceSection, alertsSection, curtailmentSection, emissionsSection], "card", "column", "l")

header = CardHeader("Power Network Operations Console", "Real-time grid monitoring & control • Last updated: 14:32 UTC")

regionSelector = Form("region-focus", regionButtons, [regionField])
regionField = FormControl("Focus Region", regionSelect, "Filter all views to a specific region")
regionSelect = Select("region", regionOptions, "All Regions", [], "medium")
regionOptions = [optAll, optNorth, optSouth, optEast, optWest, optCentral]
optAll = SelectItem("all", "All Regions")
optNorth = SelectItem("north", "Northern Grid")
optSouth = SelectItem("south", "Southern Grid")
optEast = SelectItem("east", "Eastern Interconnect")
optWest = SelectItem("west", "Western Interconnect")
optCentral = SelectItem("central", "Central Hub")
regionButtons = Buttons([regionApplyBtn])
regionApplyBtn = Button("Apply Filter", null, "primary")

metricsRow = Card([loadCard, capacityCard, priceCard, emissionsCard], "clear", "row", "l", "stretch", "start", true)

loadCard = Card([loadHeader, loadValue, loadTrend], "card", "column", "m")
loadHeader = Heading("Current Load", "h3")
loadValue = TextContent("42,850 MW", "large-heavy")
loadTrend = TextContent("▲ +2.3% vs 1hr ago • Peak today: 45,200 MW", "small")

capacityCard = Card([capacityHeader, capacityProgress, capacityDetail], "card", "column", "m")
capacityHeader = Heading("Network Capacity", "h3")
capacityProgress = Progress(78, "78% utilized • 12,150 MW headroom")
capacityDetail = TextContent("Total: 55,000 MW • Available: 55,000 MW • Reserve margin: 22%", "small")

priceCard = Card([priceHeader, priceValue, priceTrend], "card", "column", "m")
priceHeader = Heading("Current Price", "h3")
priceValue = TextContent("$87.50 / MWh", "large-heavy")
priceTrend = TextContent("▼ -$4.20 vs 1hr ago • Day-ahead: $82.10", "small")

emissionsCard = Card([emissionsHeader, emissionsValue, emissionsDetail], "card", "column", "m")
emissionsHeader = Heading("Emissions Today", "h3")
emissionsValue = TextContent("1,240 tCO₂", "large-heavy")
emissionsDetail = TextContent("Intensity: 289 gCO₂/kWh • Renewable share: 42%", "small")

generationSplit = Card([genHeader, genChart, genLegend], "card", "column", "m")
genHeader = Heading("Generation Split by Source", "h3")
genChart = PieChart(genLabels, genValues, "donut", "circular")
genLabels = ["Natural Gas", "Wind", "Solar", "Nuclear", "Hydro", "Coal", "Battery", "Other"]
genValues = [14200, 11800, 8900, 5200, 3100, 2800, 1500, 350]
genLegend = TagBlock(genTags)
genTags = ["Gas 33%", "Wind 28%", "Solar 21%", "Nuclear 12%", "Hydro 7%", "Coal 7%", "Battery 4%", "Other 1%"]

demandForecast = Card([forecastHeader, forecastChart, forecastSummary], "card", "column", "m")
forecastHeader = Heading("24-Hour Demand Forecast", "h3")
forecastChart = AreaChart(forecastLabels, [forecastActual, forecastPredicted], "natural", "Hour", "MW")
forecastLabels = ["00:00", "02:00", "04:00", "06:00", "08:00", "10:00", "12:00", "14:00", "16:00", "18:00", "20:00", "22:00", "00:00"]
forecastActual = Series("Actual", [38200, 36800, 35400, 36100, 39800, 41200, 42850, null, null, null, null, null, null])
forecastPredicted = Series("Forecast", [null, null, null, null, null, null, 42850, 44100, 45200, 46800, 45900, 43200, 39800])
forecastSummary = TextContent("Peak forecast: 46,800 MW at 18:00 • Valley: 35,400 MW at 04:00 • Ramp rate: 1,200 MW/hr", "small")

plantsSection = Card([plantsHeader, plantsTable], "card", "column", "m")
plantsHeader = Heading("Plant Output & Status", "h3")
plantsTable = Table([plantNameCol, plantRegionCol, plantSourceCol, plantOutputCol, plantCapacityCol, plantStatusCol])
plantNameCol = Col("Plant", ["Northridge CCGT", "Westwind Farm", "Solar Valley PV", "Atom Peak Nuclear", "Riverbend Hydro", "Coal Creek", "GridStore Battery", "Eastport CCGT", "Highland Wind", "Desert Sun PV"])
plantRegionCol = Col("Region", ["North", "West", "Central", "Central", "South", "East", "Central", "East", "North", "West"])
plantSourceCol = Col("Source", ["Gas", "Wind", "Solar", "Nuclear", "Hydro", "Coal", "Battery", "Gas", "Wind", "Solar"])
plantOutputCol = Col("Output (MW)", [4200, 3800, 2900, 5200, 1800, 2800, 1500, 3500, 3200, 2400])
plantCapacityCol = Col("Capacity (MW)", [4500, 4200, 3200, 5200, 2100, 3000, 2000, 3800, 3500, 2800])
plantStatusCol = Col("Status", ["Online", "Online", "Online", "Online", "Online", "Online", "Charging", "Online", "Curtailed", "Online"])

outagesSection = Card([outagesHeader, outagesTable], "card", "column", "m")
outagesHeader = Heading("Active Outages", "h3")
outagesTable = Table([outageIdCol, outageRegionCol, outageCauseCol, outageCustomersCol, outageSinceCol, outageETRCol])
outageIdCol = Col("Outage ID", ["OUT-2024-0847", "OUT-2024-0852", "OUT-2024-0855", "OUT-2024-0858"])
outageRegionCol = Col("Region", ["Northern Grid", "Eastern Interconnect", "Western Interconnect", "Central Hub"])
outageCauseCol = Col("Cause", ["Transformer failure", "Storm damage", "Equipment fault", "Planned maintenance"])
outageCustomersCol = Col("Customers", [12400, 8700, 3200, 0])
outageSinceCol = Col("Since", ["13:15 UTC", "11:42 UTC", "14:08 UTC", "06:00 UTC"])
outageETRCol = Col("Est. Restore", ["16:30 UTC", "18:00 UTC", "15:45 UTC", "14:00 UTC"])

maintenanceSection = Card([maintHeader, maintList], "card", "column", "m")
maintHeader = Heading("Planned Maintenance This Month", "h3")
maintList = ListBlock(maintItems, "number")
maintItems = [maint1, maint2, maint3, maint4, maint5, maint6]
maint1 = ListItem("Northridge CCGT Unit 3", "Combustor inspection • 2024-01-15 to 2024-01-19 • -1,500 MW", null, "View Details")
maint2 = ListItem("Atom Peak Nuclear Refueling", "Full refuel outage • 2024-01-22 to 2024-02-12 • -5,200 MW", null, "View Details")
maint3 = ListItem("Riverbend Hydro Turbine 2", "Bearing replacement • 2024-01-10 to 2024-01-14 • -300 MW", null, "View Details")
maint4 = ListItem("Eastport CCGT HRSG Cleaning", "Heat recovery steam generator • 2024-01-18 to 2024-01-20 • -800 MW", null, "View Details")
maint5 = ListItem("GridStore Battery BMS Upgrade", "Battery management system • 2024-01-25 to 2024-01-26 • -2,000 MW", null, "View Details")
maint6 = ListItem("Transmission Corridor 400kV", "Line inspection & repair • 2024-01-08 to 2024-01-12 • Capacity reduced 40%", null, "View Details")

alertsSection = Card([alertsHeader, alertsList], "card", "column", "m")
alertsHeader = Heading("Live Alerts", "h3")
alertsList = Card([alert1, alert2, alert3, alert4], "clear", "column", "s")
alert1 = Callout("warning", "Frequency Deviation", "Grid frequency at 59.97 Hz (−0.03 Hz). Primary response activated. Monitoring.")
alert2 = Callout("info", "Wind Ramp Event", "Westwind Farm output dropping 800 MW/hr. Forecast update issued. Reserves dispatched.")
alert3 = Callout("error", "Transmission Constraint", "Path 15 (North→Central) at 98% thermal limit. Re-dispatch initiated. Curtailment may be required.")
alert4 = Callout("success", "Battery Deployment", "GridStore Battery discharged 1,200 MW for frequency regulation. SOC now at 45%.")

curtailmentSection = Card([curtailHeader, curtailForm], "card", "column", "m")
curtailHeader = Heading("Order Curtailment", "h3")
curtailForm = Form("curtailment-order", curtailButtons, [curtailPlantField, curtailAmountField, curtailReasonField, curtailDurationField])
curtailPlantField = FormControl("Plant", curtailPlantSelect, "Select plant to curtail")
curtailPlantSelect = Select("curtail_plant", curtailPlantOptions, "Choose plant...", [], "medium")
curtailPlantOptions = [curtailOpt1, curtailOpt2, curtailOpt3, curtailOpt4, curtailOpt5]
curtailOpt1 = SelectItem("northridge_ccgt", "Northridge CCGT (Gas, 4,500 MW)")
curtailOpt2 = SelectItem("westwind_farm", "Westwind Farm (Wind, 4,200 MW)")
curtailOpt3 = SelectItem("coal_creek", "Coal Creek (Coal, 3,000 MW)")
curtailOpt4 = SelectItem("eastport_ccgt", "Eastport CCGT (Gas, 3,800 MW)")
curtailOpt5 = SelectItem("highland_wind", "Highland Wind (Wind, 3,500 MW)")
curtailAmountField = FormControl("Curtailment Amount (MW)", curtailAmountInput, "Must not exceed current output")
curtailAmountInput = Input("curtail_mw", "Enter MW amount", "number")
curtailReasonField = FormControl("Reason", curtailReasonSelect, "")
curtailReasonSelect = Select("curtail_reason", curtailReasonOptions, "Select reason...", [], "medium")
curtailReasonOptions = [reason1, reason2, reason3, reason4]
reason1 = SelectItem("transmission_constraint", "Transmission constraint")
reason2 = SelectItem("frequency_response", "Frequency response")
reason3 = SelectItem("economic_dispatch", "Economic dispatch")
reason4 = SelectItem("emergency", "System emergency")
curtailDurationField = FormControl("Estimated Duration", curtailDurationInput, "Expected curtailment window")
curtailDurationInput = Input("curtail_duration", "e.g., 2 hours", "text")
curtailButtons = Buttons([curtailSubmitBtn, curtailCancelBtn], "row")
curtailSubmitBtn = Button("Issue Curtailment Order", null, "primary", "destructive")
curtailCancelBtn = Button("Cancel", null, "tertiary")

emissionsSection = Card([emissionsDetailHeader, emissionsBreakdown, emissionsTrend], "card", "column", "m")
emissionsDetailHeader = Heading("Emissions Detail", "h3")
emissionsBreakdown = Table([emisSourceCol, emisOutputCol, emisIntensityCol, emisTotalCol])
emisSourceCol = Col("Source", ["Natural Gas", "Coal", "Other Fossil"])
emisOutputCol = Col("Generation (MWh)", [142000, 28000, 15000])
emisIntensityCol = Col("Intensity (gCO₂/kWh)", [400, 820, 650])
emisTotalCol = Col("Emissions (tCO₂)", [56800, 22960, 9750])
emissionsTrend = TextContent("Daily total: 89,510 tCO₂ • vs. yesterday: -3.2% • vs. 7-day avg: -1.8% • Renewable avoidance: 64,200 tCO₂", "small")