root = Card([header, kpis, trafficTrend, sources, campaigns, subscriberGrowth, dateChange, export])
header = CardHeader("Marketing Dashboard", "Weekly performance overview")
kpis = Card([kpiHeading, kpiTable], "sunk")
kpiHeading = Heading("Key metrics", "h3")
kpiTable = Table([metricCol, valueCol])
metricCol = Col("Metric", ["Site visitors (30d)", "Conversion rate", "Email subscribers (this month)"])
valueCol = Col("Value", ["48,210", "3.4%", "+1,240"])
trafficTrend = Card([trafficHeading, trendChart], "sunk")
trafficHeading = Heading("Site visitors — last 30 days", "h3")
trendChart = LineChart(["D1", "D5", "D10", "D15", "D20", "D25", "D30"], [visitorSeries], "natural", "Day", "Visitors")
visitorSeries = Series("Visitors", [1200, 1450, 1380, 1620, 1580, 1720, 1890])
sources = Card([sourcesHeading, sourcesTable], "sunk")
sourcesHeading = Heading("Top 5 traffic sources", "h3")
sourcesTable = Table([sourceCol, shareCol])
sourceCol = Col("Source", ["Organic search", "Paid ads", "Social media", "Email", "Referral"])
shareCol = Col("Share", ["42%", "28%", "15%", "10%", "5%"])
campaigns = Card([campaignsHeading, campaignsTable, bestCallout], "sunk")
campaignsHeading = Heading("Running campaigns", "h3")
campaignsTable = Table([campaignName, campaignSpend])
campaignName = Col("Campaign", ["Spring Launch", "Summer Sale", "Retargeting", "Brand Awareness", "Newsletter Boost"])
campaignSpend = Col("Spend", ["$8,400", "$6,200", "$4,800", "$3,100", "$1,900"])
bestCallout = Callout("success", "Best performer", "Spring Launch has the highest ROI at 6.2x — keep budget allocated.")
subscriberGrowth = Card([subHeading, subChart], "sunk")
subHeading = Heading("Email subscriber growth — this month", "h3")
subChart = AreaChart(["W1", "W2", "W3", "W4"], [subSeries], "linear", "Week", "Subscribers")
subSeries = Series("Subscribers", [120, 260, 410, 540])
dateChange = Card([dateHeading, dateForm], "sunk")
dateHeading = Heading("Select date range", "h3")
dateForm = Form("date-range", dateButtons, [startField, endField])
startField = FormControl("Start date", startPicker)
startPicker = DatePicker("start_date", "single")
endField = FormControl("End date", endPicker)
endPicker = DatePicker("end_date", "single")
dateButtons = Buttons([applyBtn])
applyBtn = Button("Apply range", null, "primary")
export = Buttons([exportBtn])
exportBtn = Button("Export report", null, "secondary")