root = Card([header, zoneSelector, incidentsSection, severitySummary, resourcesSection, sheltersSection, routesSection, weatherSection, casualtiesSection, volunteersSection, donationsSection, aidRequestsSection, commsSection, roadsSection, hospitalsSection, tasksSection, requestResourcesForm, broadcastForm, sitrepForm])
header = CardHeader("Emergency Response Coordination Center", "Real-time situational awareness — all zones")
zoneSelector = Select("focus_zone", zoneOptions, "Select zone to focus", null, null, "medium")
zoneOptions = [zoneAll, zoneNorth, zoneSouth, zoneEast, zoneWest, zoneCentral]
zoneAll = SelectItem("all", "All Zones")
zoneNorth = SelectItem("north", "North Zone")
zoneSouth = SelectItem("south", "South Zone")
zoneEast = SelectItem("east", "East Zone")
zoneWest = SelectItem("west", "West Zone")
zoneCentral = SelectItem("central", "Central Zone")
incidentsSection = SectionBlock([incidentsSectionItem], true)
incidentsSectionItem = SectionItem("incidents", "Active Incidents by Zone", [incidentsTable])
incidentsTable = Table([incidentZone, incidentType, incidentSeverity, incidentStatus, incidentAssigned])
incidentZone = Col("Zone", ["North", "South", "East", "West", "Central", "North", "East"])
incidentType = Col("Type", ["Flood", "Fire", "Landslide", "Flood", "Building Collapse", "Hazmat", "Fire"])
incidentSeverity = Col("Severity", ["Critical", "High", "Medium", "Critical", "High", "Critical", "Medium"])
incidentStatus = Col("Status", ["Active", "Contained", "Active", "Active", "Active", "Active", "Contained"])
incidentAssigned = Col("Assigned Units", ["E-12, M-4", "E-7, L-3", "R-2", "E-15, M-8, B-1", "USAR-1, E-9", "Hazmat-1, E-11", "E-5, L-2"])
severitySummary = SectionBlock([severitySummaryItem], true)
severitySummaryItem = SectionItem("severity", "Overall Severity Summary", [severityCards, severityChart])
severityCards = Card([criticalCard, highCard, mediumCard, lowCard], "clear", "row", "m", "stretch", "center")
criticalCard = Card([criticalLabel, criticalValue], "sunk", "column", "s", "center")
criticalLabel = TextContent("CRITICAL", "small-heavy")
criticalValue = TextContent("3", "large-heavy")
highCard = Card([highLabel, highValue], "sunk", "column", "s", "center")
highLabel = TextContent("HIGH", "small-heavy")
highValue = TextContent("4", "large-heavy")
mediumCard = Card([mediumLabel, mediumValue], "sunk", "column", "s", "center")
mediumLabel = TextContent("MEDIUM", "small-heavy")
mediumValue = TextContent("2", "large-heavy")
lowCard = Card([lowLabel, lowValue], "sunk", "column", "s", "center")
lowLabel = TextContent("LOW", "small-heavy")
lowValue = TextContent("1", "large-heavy")
severityChart = PieChart(["Critical", "High", "Medium", "Low"], [3, 4, 2, 1], "donut")
resourcesSection = SectionBlock([resourcesSectionItem], true)
resourcesSectionItem = SectionItem("resources", "Vehicles, Personnel & Supplies Available", [vehiclesTable, personnelTable, suppliesTable])
vehiclesTable = Table([vehicleType, vehicleAvailable, vehicleDeployed, vehicleTotal])
vehicleType = Col("Type", ["Engine", "Ladder", "Rescue", "Medic", "Battalion", "Hazmat", "USAR", "Boat", "Drone"])
vehicleAvailable = Col("Available", [8, 4, 3, 6, 2, 2, 1, 4, 6])
vehicleDeployed = Col("Deployed", [12, 5, 2, 8, 1, 1, 1, 2, 2])
vehicleTotal = Col("Total", [20, 9, 5, 14, 3, 3, 2, 6, 8])
personnelTable = Table([personnelRole, personnelAvailable, personnelDeployed, personnelTotal])
personnelRole = Col("Role", ["Firefighter", "Paramedic", "EMT", "Officer", "Hazmat Tech", "USAR Specialist", "Dispatch", "Support"])
personnelAvailable = Col("Available", [45, 18, 22, 8, 6, 4, 5, 12])
personnelDeployed = Col("Deployed", [78, 32, 28, 12, 8, 6, 3, 8])
personnelTotal = Col("Total", [123, 50, 50, 20, 14, 10, 8, 20])
suppliesTable = Table([supplyItem, supplyQty, supplyUnit, supplyStatus])
supplyItem = Col("Item", ["Water (L)", "MREs", "Blankets", "Medical Kits", "O2 Tanks", "Generators", "Fuel (Gal)", "Comms Radios", "PPE Kits"])
supplyQty = Col("Quantity", [12000, 8500, 3200, 450, 180, 12, 5000, 85, 600])
supplyUnit = Col("Unit", ["L", "Meals", "Each", "Kits", "Tanks", "Units", "Gal", "Each", "Kits"])
supplyStatus = Col("Status", ["Adequate", "Adequate", "Low", "Adequate", "Critical", "Adequate", "Adequate", "Low", "Adequate"])
sheltersSection = SectionBlock([sheltersSectionItem], true)
sheltersSectionItem = SectionItem("shelters", "Shelters — Capacity & Occupancy", [sheltersTable])
sheltersTable = Table([shelterName, shelterZone, shelterCapacity, shelterOccupancy, shelterAvailable, shelterStatus])
shelterName = Col("Shelter", ["North Community Center", "South High School", "East Recreation Center", "West Convention Hall", "Central Arena", "North Church", "South Library", "East Middle School"])
shelterZone = Col("Zone", ["North", "South", "East", "West", "Central", "North", "South", "East"])
shelterCapacity = Col("Capacity", [300, 500, 250, 800, 1200, 150, 200, 300])
shelterOccupancy = Col("Occupancy", [285, 420, 180, 650, 980, 120, 150, 210])
shelterAvailable = Col("Available", [15, 80, 70, 150, 220, 30, 50, 90])
shelterStatus = Col("Status", ["Near Full", "Moderate", "Moderate", "Moderate", "Moderate", "Moderate", "Moderate", "Moderate"])
routesSection = SectionBlock([routesSectionItem], true)
routesSectionItem = SectionItem("routes", "Evacuation Route Status", [routesTable])
routesTable = Table([routeName, routeZone, routeStatus, routeCapacity, routeNotes])
routeName = Col("Route", ["I-95 North", "I-95 South", "Hwy 101 East", "Hwy 101 West", "Route 66 Central", "Coastal Rd North", "Mountain Pass East", "River Crossing West"])
routeZone = Col("Zone", ["North", "South", "East", "West", "Central", "North", "East", "West"])
routeStatus = Col("Status", ["Open", "Open", "Partial", "Closed", "Open", "Open", "Partial", "Closed"])
routeCapacity = Col("Capacity %", [85, 70, 45, 0, 90, 60, 30, 0])
routeNotes = Col("Notes", ["Heavy traffic", "Normal flow", "Landslide debris", "Bridge out", "Clear", "Slow moving", "Rockfall risk", "Flooded"])
weatherSection = SectionBlock([weatherSectionItem], true)
weatherSectionItem = SectionItem("weather", "Weather Forecast — Next 48 Hours", [weatherTable])
weatherTable = Table([weatherTime, weatherCondition, weatherTemp, weatherWind, weatherPrecip, weatherAlert])
weatherTime = Col("Time", ["Now", "+6h", "+12h", "+18h", "+24h", "+30h", "+36h", "+42h", "+48h"])
weatherCondition = Col("Condition", ["Heavy Rain", "Heavy Rain", "Thunderstorms", "Rain", "Cloudy", "Partly Cloudy", "Clear", "Clear", "Clear"])
weatherTemp = Col("Temp (°F)", [58, 56, 54, 55, 57, 60, 62, 64, 66])
weatherWind = Col("Wind", ["SE 25 mph", "SE 30 mph", "S 35 mph", "SW 20 mph", "W 15 mph", "NW 10 mph", "NW 8 mph", "N 5 mph", "N 5 mph"])
weatherPrecip = Col("Precip %", [95, 100, 80, 60, 20, 10, 0, 0, 0])
weatherAlert = Col("Alert", ["Flash Flood Warning", "Flash Flood Warning", "Severe Thunderstorm Watch", "Flood Watch", "None", "None", "None", "None", "None"])
casualtiesSection = SectionBlock([casualtiesSectionItem], true)
casualtiesSectionItem = SectionItem("casualties", "People Rescued & Casualties", [casualtyCards, casualtyTrend])
casualtyCards = Card([rescuedCard, injuredCard, fatalitiesCard, missingCard], "clear", "row", "m", "stretch", "center")
rescuedCard = Card([rescuedLabel, rescuedValue], "sunk", "column", "s", "center")
rescuedLabel = TextContent("RESCUED", "small-heavy")
rescuedValue = TextContent("1,247", "large-heavy")
injuredCard = Card([injuredLabel, injuredValue], "sunk", "column", "s", "center")
injuredLabel = TextContent("INJURED", "small-heavy")
injuredValue = TextContent("89", "large-heavy")
fatalitiesCard = Card([fatalitiesLabel, fatalitiesValue], "sunk", "column", "s", "center")
fatalitiesLabel = TextContent("FATALITIES", "small-heavy")
fatalitiesValue = TextContent("12", "large-heavy")
missingCard = Card([missingLabel, missingValue], "sunk", "column", "s", "center")
missingLabel = TextContent("MISSING", "small-heavy")
missingValue = TextContent("23", "large-heavy")
casualtyTrend = LineChart(["Day 1", "Day 2", "Day 3", "Day 4", "Day 5", "Day 6", "Day 7"], [rescuedSeries, injuredSeries, fatalitiesSeries], "natural", "Day", "Count")
rescuedSeries = Series("Rescued", [120, 280, 520, 750, 920, 1100, 1247])
injuredSeries = Series("Injured", [15, 28, 42, 55, 68, 78, 89])
fatalitiesSeries = Series("Fatalities", [2, 4, 6, 8, 10, 11, 12])
volunteersSection = SectionBlock([volunteersSectionItem], true)
volunteersSectionItem = SectionItem("volunteers", "Volunteers On Duty — Assignments", [volunteersTable])
volunteersTable = Table([volunteerName, volunteerRole, volunteerZone, volunteerAssignment, volunteerShift])
volunteerName = Col("Name", ["M. Rodriguez", "J. Chen", "A. Patel", "K. Williams", "R. Thompson", "S. Garcia", "D. Kim", "L. Davis", "P. Martinez", "T. Johnson"])
volunteerRole = Col("Role", ["Medical", "Logistics", "Comms", "Shelter Ops", "Search & Rescue", "Distribution", "Admin", "Transport", "Medical", "Logistics"])
volunteerZone = Col("Zone", ["North", "South", "Central", "West", "East", "North", "Central", "West", "South", "East"])
volunteerAssignment = Col("Assignment", ["Triage North Shelter", "Supply Distribution South", "Radio Relay Central", "Shelter Mgmt West Hall", "SAR East Zone", "Food Distribution North", "Data Entry Central", "Patient Transport West", "First Aid South Shelter", "Fuel Logistics East"])
volunteerShift = Col("Shift Ends", ["06:00", "06:00", "08:00", "06:00", "10:00", "06:00", "08:00", "06:00", "06:00", "10:00"])
donationsSection = SectionBlock([donationsSectionItem], true)
donationsSectionItem = SectionItem("donations", "Donations Received", [donationsTable])
donationsTable = Table([donationType, donationQty, donationUnit, donationSource, donationStatus])
donationType = Col("Type", ["Water", "Food", "Clothing", "Medical Supplies", "Blankets", "Hygiene Kits", "Baby Supplies", "Pet Food", "Building Materials", "Cash"])
donationQty = Col("Quantity", [50000, 25000, 12000, 800, 5000, 3000, 1500, 2000, 100, 125000])
donationUnit = Col("Unit", ["Bottles", "Meals", "Items", "Kits", "Each", "Kits", "Kits", "Bags", "Pallets", "USD"])
donationSource = Col("Source", ["Red Cross", "Local Businesses", "Community Drive", "Hospital Network", "National Guard", "NGO Partners", "Parent Groups", "Pet Stores", "Construction Co.", "Public Donations"])
donationStatus = Col("Status", ["Received", "Received", "Received", "Received", "In Transit", "Received", "Received", "Received", "Pending", "Received"])
aidRequestsSection = SectionBlock([aidRequestsSectionItem], true)
aidRequestsSectionItem = SectionItem("aidrequests", "Aid Requests Awaiting Action", [aidRequestsTable])
aidRequestsTable = Table([requestId, requestZone, requestType, requestPriority, requestDetails, requestTime])
requestId = Col("ID", ["REQ-001", "REQ-002", "REQ-003", "REQ-004", "REQ-005", "REQ-006", "REQ-007", "REQ-008"])
requestZone = Col("Zone", ["North", "South", "East", "West", "Central", "North", "South", "East"])
requestType = Col("Type", ["Medical", "Evacuation", "Shelter", "Food/Water", "Rescue", "Medical", "Comms", "Transport"])
requestPriority = Col("Priority", ["Critical", "High", "High", "Critical", "Critical", "High", "Medium", "High"])
requestDetails = Col("Details", ["50 insulin units needed", "200 residents need transport", "Shelter at capacity", "500 meals + water", "Family trapped 2nd floor", "O2 tanks for shelter", "Radio comms down", "Wheelchair transport x5"])
requestTime = Col("Time", ["14:22", "14:35", "14:41", "14:48", "14:52", "15:01", "15:08", "15:15"])
commsSection = SectionBlock([commsSectionItem], true)
commsSectionItem = SectionItem("comms", "Communication Channels Status", [commsTable])
commsTable = Table([channelName, channelType, channelZone, channelStatus, channelNotes])
channelName = Col("Channel", ["Primary Radio", "Secondary Radio", "Cell Network", "Satellite Phone", "Mesh Network", "Emergency Alert", "Ham Radio Net", "Internet/VoIP"])
channelType = Col("Type", ["VHF", "UHF", "LTE/5G", "Iridium", "LoRa Mesh", "EAS/IPAWS", "HF/VHF", "Fiber/Starlink"])
channelZone = Col("Coverage", ["All Zones", "All Zones", "Partial", "All Zones", "North/Central", "All Zones", "All Zones", "Central/West"])
channelStatus = Col("Status", ["Operational", "Degraded", "Down", "Operational", "Operational", "Operational", "Operational", "Degraded"])
channelNotes = Col("Notes", ["Clear", "Interference South", "Tower damage East", "Backup active", "Good coverage", "Tested 14:00", "Net active", "High latency"])
roadsSection = SectionBlock([roadsSectionItem], true)
roadsSectionItem = SectionItem("roads", "Roads Closed", [roadsList])
roadsList = ListBlock([road1, road2, road3, road4, road5, road6, road7, road8], "number")
road1 = ListItem("I-95 at Mile 42 (North)", "Bridge structural damage — indefinite closure", null, null)
road2 = ListItem("Hwy 101 West (West Zone)", "Major landslide — clearance ETA 48h", null, null)
road3 = ListItem("River Crossing Bridge (West)", "Flooded — water level 12ft above deck", null, null)
road4 = ListItem("Mountain Pass Rd (East)", "Rockfall — one lane open with escort", null, null)
road5 = ListItem("Coastal Highway 1 (North)", "Debris flow — closed both directions", null, null)
road6 = ListItem("Main St & 5th Ave (Central)", "Building collapse debris — detour active", null, null)
road7 = ListItem("Railroad Crossing (South)", "Signal failure — manual control only", null, null)
road8 = ListItem("Industrial Blvd (East)", "Hazmat spill — containment in progress", null, null)
hospitalsSection = SectionBlock([hospitalsSectionItem], true)
hospitalsSectionItem = SectionItem("hospitals", "Nearby Hospitals — Free Beds", [hospitalsTable])
hospitalsTable = Table([hospitalName, hospitalZone, hospitalTotalBeds, hospitalFreeBeds, hospitalICUFree, hospitalTraumaLevel, hospitalStatus])
hospitalName = Col("Hospital", ["North Regional Medical", "South County Hospital", "East Community Health", "West Trauma Center", "Central University Hospital", "North VA Clinic", "South Pediatric Center"])
hospitalZone = Col("Zone", ["North", "South", "East", "West", "Central", "North", "South"])
hospitalTotalBeds = Col("Total Beds", [450, 380, 220, 520, 680, 150, 180])
hospitalFreeBeds = Col("Free Beds", [23, 45, 18, 67, 89, 12, 8])
hospitalICUFree = Col("Free ICU", [2, 4, 1, 8, 12, 0, 2])
hospitalTraumaLevel = Col("Trauma Level", ["Level II", "Level III", "Level III", "Level I", "Level I", "Level III", "Level II Peds"])
hospitalStatus = Col("Status", ["Accepting", "Accepting", "Divert Critical", "Accepting", "Accepting", "Accepting", "Accepting"])
tasksSection = SectionBlock([tasksSectionItem], true)
tasksSectionItem = SectionItem("tasks", "Open Tasks with Assignees", [tasksTable])
tasksTable = Table([taskId, taskDescription, taskAssignee, taskZone, taskPriority, taskDue, taskStatus])
taskId = Col("ID", ["TASK-001", "TASK-002", "TASK-003", "TASK-004", "TASK-005", "TASK-006", "TASK-007", "TASK-008", "TASK-009", "TASK-010"])
taskDescription = Col("Description", ["Establish comms relay North", "Evacuate South nursing home", "Clear debris East Hwy 101", "Set up field hospital West", "Restore power Central grid", "Distribute water North shelters", "Coordinate SAR East zone", "Manage volunteer check-in", "Update situation map", "Brief incoming shift"])
taskAssignee = Col("Assignee", ["Capt. Morales", "Lt. Chen", "Sgt. Patel", "Capt. Williams", "Chief Thompson", "Lt. Garcia", "Sgt. Kim", "Capt. Davis", "Analyst Martinez", "Deputy Johnson"])
taskZone = Col("Zone", ["North", "South", "East", "West", "Central", "North", "East", "Central", "All", "All"])
taskPriority = Col("Priority", ["Critical", "Critical", "High", "High", "High", "Medium", "Critical", "Medium", "Medium", "Low"])
taskDue = Col("Due", ["15:00", "15:30", "16:00", "16:00", "17:00", "16:30", "15:00", "18:00", "15:30", "18:00"])
taskStatus = Col("Status", ["In Progress", "In Progress", "Pending", "In Progress", "Pending", "In Progress", "In Progress", "In Progress", "Pending", "Pending"])
requestResourcesForm = SectionBlock([requestResourcesFormItem], true)
requestResourcesFormItem = SectionItem("requestresources", "Request Additional Resources", [requestResourcesFormInner])
requestResourcesFormInner = Form("resource-request", requestResourcesButtons, [resourceTypeField, resourceQtyField, resourceZoneField, resourceJustificationField])
resourceTypeField = FormControl("Resource Type", resourceTypeSelect, "Select the type of resource needed")
resourceTypeSelect = Select("resource_type", resourceTypeOptions, "Choose resource type", null, null, "medium")
resourceTypeOptions = [resEngines, resLadders, resRescues, resMedics, resBattalions, resHazmat, resUSAR, resBoats, resDrones, resPersonnel, resWater, resFood, resMedical, resBlankets, resGenerators, resFuel, resRadios, resPPE]
resEngines = SelectItem("engine", "Fire Engines")
resLadders = SelectItem("ladder", "Ladder Trucks")
resRescues = SelectItem("rescue", "Rescue Units")
resMedics = SelectItem("medic", "Medic Units")
resBattalions = SelectItem("battalion", "Battalion Chiefs")
resHazmat = SelectItem("hazmat", "Hazmat Units")
resUSAR = SelectItem("usar", "USAR Teams")
resBoats = SelectItem("boat", "Rescue Boats")
resDrones = SelectItem("drone", "Drones")
resPersonnel = SelectItem("personnel", "Personnel (specify role in justification)")
resWater = SelectItem("water", "Water (Liters)")
resFood = SelectItem("food", "MREs / Meals")
resMedical = SelectItem("medical", "Medical Kits / Supplies")
resBlankets = SelectItem("blankets", "Blankets")
resGenerators = SelectItem("generators", "Generators")
resFuel = SelectItem("fuel", "Fuel (Gallons)")
resRadios = SelectItem("radios", "Communications Radios")
resPPE = SelectItem("ppe", "PPE Kits")
resourceQtyField = FormControl("Quantity", resourceQtyInput, "Number of units requested")
resourceQtyInput = Input("quantity", "1", "number", null, null)
resourceZoneField = FormControl("Zone", resourceZoneSelect, "Zone where resources will be deployed")
resourceZoneSelect = Select("zone", resourceZoneOptions, "Select zone", null, null, "medium")
resourceZoneOptions = [resZoneNorth, resZoneSouth, resZoneEast, resZoneWest, resZoneCentral, resZoneAll]
resZoneNorth = SelectItem("north", "North Zone")
resZoneSouth = SelectItem("south", "South Zone")
resZoneEast = SelectItem("east", "East Zone")
resZoneWest = SelectItem("west", "West Zone")
resZoneCentral = SelectItem("central", "Central Zone")
resZoneAll = SelectItem("all", "Multiple / All Zones")
resourceJustificationField = FormControl("Justification", resourceJustificationArea, "Operational justification for this request")
resourceJustificationArea = TextArea("justification", "Describe the operational need...", 3, null, null)
requestResourcesButtons = Buttons([requestSubmitBtn, requestCancelBtn])
requestSubmitBtn = Button("Submit Request", null, "primary")
requestCancelBtn = Button("Cancel", null, "tertiary")
broadcastForm = SectionBlock([broadcastFormItem], true)
broadcastFormItem = SectionItem("broadcast", "Broadcast Update", [broadcastFormInner])
broadcastFormInner = Form("broadcast-update", broadcastButtons, [broadcastZoneField, broadcastMessageField, broadcastUrgencyField])
broadcastZoneField = FormControl("Target Zones", broadcastZoneSelect, "Select zones to receive this broadcast")
broadcastZoneSelect = Select("broadcast_zones", broadcastZoneOptions, "All Zones", null, null, "medium")
broadcastZoneOptions = [bcastAll, bcastNorth, bcastSouth, bcastEast, bcastWest, bcastCentral, bcastCustom]
bcastAll = SelectItem("all", "All Zones")
bcastNorth = SelectItem("north", "North Zone")
bcastSouth = SelectItem("south", "South Zone")
bcastEast = SelectItem("east", "East Zone")
bcastWest = SelectItem("west", "West Zone")
bcastCentral = SelectItem("central", "Central Zone")
bcastCustom = SelectItem("custom", "Custom Selection")
broadcastMessageField = FormControl("Message", broadcastMessageArea, "Message will be sent via all active channels")
broadcastMessageArea = TextArea("message", "Enter broadcast message...", 4, null, null)
broadcastUrgencyField = FormControl("Urgency", broadcastUrgencySelect, "Determines channel priority and alert tone")
broadcastUrgencySelect = Select("urgency", broadcastUrgencyOptions, "Standard", null, null, "medium")
broadcastUrgencyOptions = [urgencyStandard, urgencyUrgent, urgencyEmergency, urgencyEvacuation]
urgencyStandard = SelectItem("standard", "Standard — Routine update")
urgencyUrgent = SelectItem("urgent", "Urgent — Immediate attention needed")
urgencyEmergency = SelectItem("emergency", "Emergency — Life safety threat")
urgencyEvacuation = SelectItem("evacuation", "Evacuation Order — Mandatory action required")
broadcastButtons = Buttons([broadcastSendBtn, broadcastPreviewBtn, broadcastCancelBtn])
broadcastSendBtn = Button("Send Broadcast", null, "primary")
broadcastPreviewBtn = Button("Preview", null, "secondary")
broadcastCancelBtn = Button("Cancel", null, "tertiary")
sitrepForm = SectionBlock([sitrepFormItem], true)
sitrepFormItem = SectionItem("sitrep", "File Situation Report", [sitrepFormInner])
sitrepFormInner = Form("situation-report", sitrepButtons, [sitrepZoneField, sitrepPeriodField, sitrepNarrativeField, sitrepActionsField, sitrepNeedsField])
sitrepZoneField = FormControl("Zone", sitrepZoneSelect, "Zone this report covers")
sitrepZoneSelect = Select("sitrep_zone", sitrepZoneOptions, "Select zone", null, null, "medium")
sitrepZoneOptions = [sitrepAll, sitrepNorth, sitrepSouth, sitrepEast, sitrepWest, sitrepCentral]
sitrepAll = SelectItem("all", "All Zones / Consolidated")
sitrepNorth = SelectItem("north", "North Zone")
sitrepSouth = SelectItem("south", "South Zone")
sitrepEast = SelectItem("east", "East Zone")
sitrepWest = SelectItem("west", "West Zone")
sitrepCentral = SelectItem("central", "Central Zone")
sitrepPeriodField = FormControl("Reporting Period", sitrepPeriodSelect, "Time period covered by this report")
sitrepPeriodSelect = Select("period", sitrepPeriodOptions, "Last 6 hours", null, null, "medium")
sitrepPeriodOptions = [period1h, period3h, period6h, period12h, period24h, periodCustom]
period1h = SelectItem("1h", "Last 1 Hour")
period3h = SelectItem("3h", "Last 3 Hours")
period6h = SelectItem("6h", "Last 6 Hours")
period12h = SelectItem("12h", "Last 12 Hours")
period24h = SelectItem("24h", "Last 24 Hours")
periodCustom = SelectItem("custom", "Custom Period")
sitrepNarrativeField = FormControl("Narrative Summary", sitrepNarrativeArea, "Operational summary — significant events, decisions, outcomes")
sitrepNarrativeArea = TextArea("narrative", "Summarize operations for this period...", 5, null, null)
sitrepActionsField = FormControl("Actions Taken", sitrepActionsArea, "Key actions, deployments, rescues, evacuations completed")
sitrepActionsArea = TextArea("actions", "List actions taken...", 4, null, null)
sitrepNeedsField = FormControl("Critical Needs", sitrepNeedsArea, "Resource gaps, unmet requests, escalation requirements")
sitrepNeedsArea = TextArea("needs", "Identify critical needs...", 3, null, null)
sitrepButtons = Buttons([sitrepSubmitBtn, sitrepSaveDraftBtn, sitrepCancelBtn])
sitrepSubmitBtn = Button("Submit Report", null, "primary")
sitrepSaveDraftBtn = Button("Save Draft", null, "secondary")
sitrepCancelBtn = Button("Cancel", null, "tertiary")