root = Card([header, healthSummary, activeProjectsList, overdueMilestonesList, budgetTable, teamUtilChart, risksList, upcomingDeadlinesList, deliveryPaceChart, blockedItemsList, quarterSwitchButton, requestPeopleButton, exportButton, archiveButton])
header = CardHeader("Project Portfolio Review", "Q3 2024")
healthSummary = TextCallout("info", "Portfolio Health", "Overall status: Green (on track)")
projectAlpha = ListItem("Project Alpha", "Owner: Alice\nDeadline: 2024-10-15\nHealth: Good")
projectBeta = ListItem("Project Beta", "Owner: Bob\nDeadline: 2024-11-01\nHealth: Warning")
projectGamma = ListItem("Project Gamma", "Owner: Charlie\nDeadline: 2024-12-20\nHealth: Critical")
activeProjectsList = ListBlock(items: [projectAlpha, projectBeta, projectGamma])
milestone1 = ListItem("Milestone A", "Due: 2024-09-30\nStatus: Overdue")
milestone2 = ListItem("Milestone B", "Due: 2024-09-20\nStatus: Overdue")
milestone3 = ListItem("Milestone C", "Due: 2024-10-05\nStatus: On track")
overdueMilestonesList = ListBlock(items: [milestone1, milestone2, milestone3])
colProject = Col("Project", ["Alpha", "Beta", "Gamma"], "string")
colAllocation = Col("Allocation", [100000, 150000, 200000], "number")
colSpent = Col("Spent", [80000, 120000, 110000], "number")
colRemaining = Col("Remaining", [20000, 30000, 90000], "number")
budgetTable = Table(columns: [colProject, colAllocation, colSpent, colRemaining])
teamLabels = ["Alice", "Bob", "Charlie", "Dana"]
teamSeries = Series("Utilization", [80, 75, 90, 60])
teamUtilChart = HorizontalBarChart(labels: teamLabels, series: [teamSeries], "grouped", "Utilization %", "Team Member")
risk1 = ListItem("Supply chain delay", "Severity: High")
risk2 = ListItem("Key resource unavailable", "Severity: Medium")
risk3 = ListItem("Regulatory change", "Severity: Low")
risksList = ListBlock(items: [risk1, risk2, risk3])
upcoming1 = ListItem("Client demo", "2024-10-02")
upcoming2 = ListItem("Sprint review", "2024-10-09")
upcoming3 = ListItem("Release candidate", "2024-10-16")
upcomingDeadlinesList = ListBlock(items: [upcoming1, upcoming2, upcoming3])
labels = ["Sprint 1", "Sprint 2", "Sprint 3", "Sprint 4", "Sprint 5", "Sprint 6"]
series = Series("Velocity", [30, 35, 28, 40, 38, 42])
deliveryPaceChart = LineChart(labels: labels, series: [series], "natural", "Sprint", "Story Points")
blocked1 = ListItem("API integration", "Blocked due to missing specs")
blocked2 = ListItem("UI redesign", "Blocked by resource constraints")
blocked3 = ListItem("Database migration", "Blocked by approvals")
blockedItemsList = ListBlock(items: [blocked1, blocked2, blocked3])
quarterSwitchButton = Button("View Q2", null, "secondary")
requestPeopleButton = Button("Request more people", null, "primary")
exportButton = Button("Export Review", null, "secondary")
archiveButton = Button("Archive Project", null, "tertiary")