root = Card([header, categoryRow, scheduleBtn, newDraftBtn, statsGrid, draftsSection, readershipSection, topArticleSection, commentsSection])
header = CardHeader("Content Studio", "Plan, publish, and manage your editorial pipeline")
categoryRow = Card([categoryLabel, categorySelect], "sunk", "row", "m")
categoryLabel = Label("Filter by category")
categorySelect = Select("category", [catAll, catNews, catFeatures, catOpinion, catTech], "All categories")
catAll = SelectItem("all", "All categories")
catNews = SelectItem("news", "News")
catFeatures = SelectItem("features", "Features")
catOpinion = SelectItem("opinion", "Opinion")
catTech = SelectItem("tech", "Technology")
scheduleBtn = Button("Schedule a piece")
newDraftBtn = Button("Start new draft", null, "secondary")
statsGrid = Card([publishedHeading, publishedChart, topHeading, topMetric], "card", "row", "l")
publishedHeading = Heading("Published this week", "h3")
publishedChart = BarChart(["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"], [publishedSeries])
publishedSeries = Series("Pieces", [3, 5, 2, 6, 4, 1, 2])
topHeading = Heading("Most-read article this month", "h3")
topMetric = Card([topTitle, topViews], "sunk")
topTitle = TextContent("**The Future of Local News**", "large-heavy")
topViews = TextContent("24,318 reads in October", "small")
draftsSection = Card([draftsHeading, draftsTable], "sunk")
draftsHeading = Heading("Drafts", "h2")
draftsTable = Table([draftTitle, draftStatus, draftUpdated])
draftTitle = Col("Title", ["Inside the Algorithm", "Why Subscriptions Fail", "A Day in the Newsroom", "The Rise of Audio"])
draftStatus = Col("Status", ["In review", "Ready to publish", "Editing", "Outline"])
draftUpdated = Col("Updated", ["2h ago", "Yesterday", "3d ago", "1w ago"])
readershipSection = Card([readershipHeading, readershipChart], "sunk")
readershipHeading = Heading("Readership — last 30 days", "h2")
readershipChart = AreaChart(["Oct 1", "Oct 5", "Oct 10", "Oct 15", "Oct 20", "Oct 25", "Oct 30"], [readershipSeries], "natural", "Date", "Readers")
readershipSeries = Series("Daily readers", [8100, 9400, 10200, 11800, 10900, 12400, 13900])
topArticleSection = Card([topArticleHeading, topArticleList], "clear")
topArticleHeading = Heading("Top articles this month", "h2")
topArticleList = ListBlock([topItem1, topItem2, topItem3], "number")
topItem1 = ListItem("The Future of Local News", "24,318 reads", null, "View")
topItem2 = ListItem("How Paywalls Evolve", "19,402 reads", null, "View")
topItem3 = ListItem("The Podcast Boom", "15,877 reads", null, "View")
commentsSection = Card([commentsHeading, commentsList, replyBtn], "sunk")
commentsHeading = Heading("Comments awaiting reply", "h2")
commentsList = ListBlock([comment1, comment2, comment3])
comment1 = ListItem("Marta K.", "\"Great piece — but what about ad revenue?\" • 1h ago")
comment2 = ListItem("Devon R.", "\"The data on subscriptions is misleading.\" • 4h ago")
comment3 = ListItem("Priya S.", "\"Would love a follow-up on audio.\" • 6h ago")
replyBtn = Button("Reply to comments", null, "secondary")