root = Card([header, kpiRow, trafficChart, bestSellersSection, stockAlert, shiftSection, basketReturnsRow, promoSection, registerSection, actionsRow, storeSwitcher, weekComparison], "card", "column", "l")
header = CardHeader("Store Manager Console", "Daily overview — Store #142")
kpiRow = Card([salesTarget, avgBasket, returnsWeek], "clear", "row", "m", "stretch", "between")
salesTarget = Card([salesLabel, salesValue, salesProgress], "sunk", "column", "s")
salesLabel = TextContent("Sales Today vs Target", "small-heavy")
salesValue = TextContent("$12,840 / $15,000", "large-heavy")
salesProgress = Progress(85.6, "85.6% of target")
avgBasket = Card([basketLabel, basketValue], "sunk", "column", "s", "center")
basketLabel = TextContent("Avg Basket Size", "small-heavy")
basketValue = TextContent("$47.20", "large-heavy")
returnsWeek = Card([returnsLabel, returnsValue], "sunk", "column", "s", "center")
returnsLabel = TextContent("Returns This Week", "small-heavy")
returnsValue = TextContent("23 items ($1,140)", "large-heavy")
trafficChart = Card([trafficHeading, trafficArea], "sunk", "column", "m")
trafficHeading = Heading("Foot Traffic Through the Day", "h3")
trafficArea = AreaChart(["6am", "8am", "10am", "12pm", "2pm", "4pm", "6pm", "8pm", "10pm"], [trafficSeries], "natural", "Hour", "Visitors")
trafficSeries = Series("Visitors", [12, 45, 78, 134, 156, 142, 167, 123, 54])
bestSellersSection = Card([bestSellersHeading, bestSellersTable], "sunk", "column", "m")
bestSellersHeading = Heading("Best Sellers (Units Today)", "h3")
bestSellersTable = Table([bsProduct, bsUnits, bsRevenue])
bsProduct = Col("Product", ["Organic Bananas", "Whole Milk 1L", "Sourdough Bread", "Free-Range Eggs 12ct", "Greek Yogurt 500g"])
bsUnits = Col("Units Sold", [87, 72, 54, 48, 41], "number")
bsRevenue = Col("Revenue", ["$174.00", "$216.00", "$216.00", "$288.00", "$205.00"])
stockAlert = Card([stockHeading, stockList], "sunk", "column", "m")
stockHeading = Heading("Items Out of Stock", "h3")
stockList = ListBlock([stock1, stock2, stock3, stock4], "image")
stock1 = ListItem("Almond Milk 1L", "Reorder pending — ETA 2 days", ["https://picsum.photos/seed/almond-milk/60/60"], "Reorder")
stock2 = ListItem("Gluten-Free Bread", "Supplier delay — no ETA", ["https://picsum.photos/seed/gf-bread/60/60"], "Reorder")
stock3 = ListItem("Organic Spinach 150g", "Quality hold — checking tomorrow", ["https://picsum.photos/seed/spinach/60/60"], "Reorder")
stock4 = ListItem("Cold Brew Coffee", "Seasonal — returns next month", ["https://picsum.photos/seed/cold-brew/60/60"], null)
shiftSection = Card([shiftHeading, shiftList], "sunk", "column", "m")
shiftHeading = Heading("On Shift Today", "h3")
shiftList = ListBlock([shift1, shift2, shift3, shift4, shift5], "image")
shift1 = ListItem("Maria Santos", "Register 1 • 7am–3pm", ["https://picsum.photos/seed/maria/60/60"], null)
shift2 = ListItem("James Chen", "Register 2 • 7am–3pm", ["https://picsum.photos/seed/james/60/60"], null)
shift3 = ListItem("Priya Patel", "Floor Lead • 9am–5pm", ["https://picsum.photos/seed/priya/60/60"], null)
shift4 = ListItem("Alex Rivera", "Register 3 • 11am–7pm", ["https://picsum.photos/seed/alex/60/60"], null)
shift5 = ListItem("Sam Okonkwo", "Stock/Backup • 11am–7pm", ["https://picsum.photos/seed/sam/60/60"], null)
basketReturnsRow = Card([basketDetail, returnsDetail], "clear", "row", "m", "stretch", "between")
basketDetail = Card([basketDetailLabel, basketDetailValue, basketTrend], "sunk", "column", "xs")
basketDetailLabel = TextContent("Avg Basket Size", "small-heavy")
basketDetailValue = TextContent("$47.20", "large-heavy")
basketTrend = TextContent("+$2.10 vs last week", "small")
returnsDetail = Card([returnsDetailLabel, returnsDetailValue, returnsTrend], "sunk", "column", "xs")
returnsDetailLabel = TextContent("Returns This Week", "small-heavy")
returnsDetailValue = TextContent("23 items", "large-heavy")
returnsTrend = TextContent("-4 vs last week", "small")
promoSection = Card([promoHeading, promoTable], "sunk", "column", "m")
promoHeading = Heading("Active Promotions Performance", "h3")
promoTable = Table([promoName, promoType, promoRedemptions, promoRevenue, promoStatus])
promoName = Col("Promotion", ["Buy 2 Get 1 Free - Snacks", "20% Off Dairy", "Loyalty Double Points", "Weekend Bundle Deal"])
promoType = Col("Type", ["BOGO", "Percentage", "Points", "Bundle"])
promoRedemptions = Col("Redemptions", [134, 89, 203, 67], "number")
promoRevenue = Col("Revenue", ["$2,680", "$1,780", "$4,060", "$2,010"])
promoStatus = Col("Status", ["On Track", "Behind", "Exceeding", "On Track"])
registerSection = Card([registerHeading, registerList], "sunk", "column", "m")
registerHeading = Heading("Register Status", "h3")
registerList = ListBlock([reg1, reg2, reg3, reg4], "number")
reg1 = ListItem("Register 1", "Open • Maria Santos • $3,240 processed", null, null)
reg2 = ListItem("Register 2", "Open • James Chen • $2,890 processed", null, null)
reg3 = ListItem("Register 3", "Open • Alex Rivera • $1,560 processed", null, null)
reg4 = ListItem("Register 4", "Closed • Maintenance scheduled", null, null)
actionsRow = Card([reorderForm, quickActions], "clear", "row", "m", "stretch", "between")
reorderForm = Form("reorder-item", reorderButtons, [reorderItemField, reorderQtyField, reorderReasonField])
reorderItemField = FormControl("Item to Reorder", reorderItemSelect, "Search or select from low-stock items")
reorderItemSelect = Select("reorder_item", [reorderOpt1, reorderOpt2, reorderOpt3, reorderOpt4], "Choose an item")
reorderOpt1 = SelectItem("almond-milk", "Almond Milk 1L — OUT OF STOCK")
reorderOpt2 = SelectItem("gf-bread", "Gluten-Free Bread — OUT OF STOCK")
reorderOpt3 = SelectItem("spinach", "Organic Spinach 150g — OUT OF STOCK")
reorderOpt4 = SelectItem("cold-brew", "Cold Brew Coffee — Seasonal")
reorderQtyField = FormControl("Quantity", reorderQtyInput, "Units to order")
reorderQtyInput = Input("reorder_qty", "24", "number")
reorderReasonField = FormControl("Reason", reorderReasonSelect, "Select primary reason")
reorderReasonSelect = Select("reorder_reason", [reasonOpt1, reasonOpt2, reasonOpt3], "Select reason")
reasonOpt1 = SelectItem("stockout", "Out of stock")
reasonOpt2 = SelectItem("low-stock", "Low stock (proactive)")
reasonOpt3 = SelectItem("promo-prep", "Upcoming promotion")
reorderButtons = Buttons([reorderSubmitBtn, reorderCancelBtn])
reorderSubmitBtn = Button("Place Reorder", null, "primary")
reorderCancelBtn = Button("Cancel", null, "tertiary")
quickActions = Card([quickLabel, quickButtons], "sunk", "column", "s")
quickLabel = TextContent("Quick Actions", "small-heavy")
quickButtons = Buttons([action1, action2, action3], "column")
action1 = Button("Open Register 4", null, "secondary")
action2 = Button("Call Staff Meeting", null, "secondary")
action3 = Button("Export Daily Report", null, "tertiary")
storeSwitcher = Card([storeLabel, storeSelect], "sunk", "row", "m")
storeLabel = TextContent("Switch Store:", "small-heavy")
storeSelect = Select("store_switch", [storeOpt1, storeOpt2, storeOpt3, storeOpt4], "Store #142 (Current)")
storeOpt1 = SelectItem("142", "Store #142 — Downtown (Current)")
storeOpt2 = SelectItem("143", "Store #143 — Westside Mall")
storeOpt3 = SelectItem("144", "Store #144 — Airport Terminal")
storeOpt4 = SelectItem("145", "Store #145 — University District")
weekComparison = Card([weekHeading, weekChart], "sunk", "column", "m")
weekHeading = Heading("This Week vs Last Week", "h3")
weekChart = BarChart(["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"], [thisWeekSeries, lastWeekSeries], "grouped", "Day", "Sales ($)")
thisWeekSeries = Series("This Week", [8200, 9100, 8900, 9400, 11200, 14500, 12800])
lastWeekSeries = Series("Last Week", [7800, 8500, 8700, 9000, 10800, 13900, 12100])