root = Card([header, statsRow, filterSection, ticketsTable, actions])
header = CardHeader("Support Morning View", "Monday, June 10 · 8:00 AM")
statsRow = Card([openTickets, avgResponse], "card", "row", "m")
openTickets = Card([openCount, openLabel], "sunk", "column", "none")
openCount = TextContent("24", "large")
openLabel = TextContent("Open tickets", "small")
avgResponse = Card([avgCount, avgLabel], "sunk", "column", "none")
avgCount = TextContent("1h 42m", "large")
avgLabel = TextContent("Avg first response", "small")
filterSection = Card([filterHeader, filterRadio], "clear", "column", "s")
filterHeader = Heading("Filter", "h3")
filterRadio = RadioGroup("priority_filter", [allTickets, highPriorityOnly], "all")
allTickets = RadioItem("All tickets", "Show every open ticket", "all")
highPriorityOnly = RadioItem("High priority only", "Narrow to P1 and P2", "high")
ticketsTable = Card([tableTitle, table], "clear", "column", "s")
tableTitle = Heading("Recent tickets", "h3")
table = Table([idCol, subjectCol, priorityCol, statusCol])
idCol = Col("#", ["T-1042", "T-1041", "T-1040", "T-1039", "T-1038"])
subjectCol = Col("Subject", ["Billing export failing", "Login timeout on mobile", "Cannot reset password", "API rate limit errors", "UI broken in Safari"])
priorityCol = Col("Priority", ["High", "Medium", "High", "Low", "Medium"])
statusCol = Col("Status", ["Open", "Open", "Open", "Open", "Open"])
actions = Buttons([newTicketBtn])
newTicketBtn = Button("Open new ticket", null, "primary")