root = Card([header, budgetOverview, breakdown, largestExpense, monthSwitcherCard, addExpense], "card", "column", "l")
header = CardHeader("Budget Check", "June 2025 overview")
budgetOverview = Card([budgetHeading, spentRow, budgetProgress], "sunk")
budgetHeading = Heading("Spent this month", "h3")
spentRow = Card([spentAmount, budgetAmount], "clear", "row", "m", "center")
spentAmount = TextContent("$2,340", "large-heavy")
budgetAmount = TextContent("of $3,000 budget", "default")
budgetProgress = Progress(78, "78% of budget used")
breakdown = Card([breakdownHeading, categoryPie], "sunk")
breakdownHeading = Heading("Spending by category", "h3")
categoryPie = PieChart(["Housing", "Food", "Transport", "Entertainment", "Utilities"], [1200, 480, 260, 220, 180], "donut")
largestExpense = Callout("warning", "Largest expense", "Rent — $1,200 on Jun 1. That's 51% of this month's total spending.")
monthSwitcherCard = Card([monthLabel, monthSwitcher], "sunk")
monthLabel = Label("View month")
monthSwitcher = Select("month", [monthJune, monthMay, monthApril], "Choose a month", null, "June 2025")
monthJune = SelectItem("2025-06", "June 2025")
monthMay = SelectItem("2025-05", "May 2025")
monthApril = SelectItem("2025-04", "April 2025")
addExpense = DialogBlock("Add expense", "Add an expense", "Enter details for a new expense.", [expenseForm], "secondary")
expenseForm = Form("add-expense", formButtons, [amountField, categoryField, dateField, noteField])
formButtons = Buttons([saveBtn, cancelBtn])
saveBtn = Button("Add expense", null, "primary")
cancelBtn = Button("Cancel", null, "tertiary")
amountField = FormControl("Amount", amountInput)
amountInput = Input("amount", "0.00", "number")
categoryField = FormControl("Category", categorySelect)
categorySelect = Select("category", [catFood, catTransport, catHousing, catOther], "Select a category")
catFood = SelectItem("food", "Food & dining")
catTransport = SelectItem("transport", "Transport")
catHousing = SelectItem("housing", "Housing")
catOther = SelectItem("other", "Other")
dateField = FormControl("Date", dateInput)
dateInput = DatePicker("date", "single")
noteField = FormControl("Note (optional)", noteArea)
noteArea = TextArea("note", "What was this for?")