root = Card([header, current, outlook, sunTimes, footer])
header = CardHeader("Morning Weather Brief", "Bengaluru • Updated 6:30 AM")
current = Card([currentTemp, currentDetails, currentDesc], "sunk", "row", "l", "center")
currentTemp = Heading("24°C", "h1")
currentDetails = Card([conditionTag, feelsLike, humidity, wind], "clear", "row", "m", "center")
conditionTag = Tag("Partly Cloudy", "cloud", "md", "info")
feelsLike = TextContent("Feels like 25°C", "small")
humidity = TextContent("Humidity 68%", "small")
wind = TextContent("Wind SW 12 km/h", "small")
currentDesc = TextContent("A pleasant start to the day with scattered clouds. Light breeze from the southwest.", "default")
outlook = Card([outlookHeader, day1, day2, day3], "card", "column", "m")
outlookHeader = Heading("3-Day Outlook", "h3")
day1 = Card([day1Label, day1Icon, day1Temps, day1Desc], "clear", "row", "m", "center")
day1Label = TextContent("Today", "large-heavy")
day1Icon = Tag("☀️ Sunny", "sun", "md", "success")
day1Temps = TextContent("31° / 22°", "large")
day1Desc = TextContent("Mostly sunny, low chance of rain", "small")
day2 = Card([day2Label, day2Icon, day2Temps, day2Desc], "clear", "row", "m", "center")
day2Label = TextContent("Tomorrow", "large-heavy")
day2Icon = Tag("🌤️ Partly Cloudy", "cloud", "md", "info")
day2Temps = TextContent("29° / 21°", "large")
day2Desc = TextContent("Increasing clouds, isolated evening showers possible", "small")
day3 = Card([day3Label, day3Icon, day3Temps, day3Desc], "clear", "row", "m", "center")
day3Label = TextContent("Day 3", "large-heavy")
day3Icon = Tag("🌧️ Light Rain", "cloud-rain", "md", "warning")
day3Temps = TextContent("27° / 20°", "large")
day3Desc = TextContent("Overcast with light rain likely, cooler temperatures", "small")
sunTimes = Card([sunHeader, sunriseCard, sunsetCard], "sunk", "column", "m")
sunHeader = Heading("Sun & Moon", "h3")
sunriseCard = Card([sunriseIcon, sunriseLabel, sunriseTime], "clear", "row", "m", "center")
sunriseIcon = Tag("🌅", null, "lg", "neutral")
sunriseLabel = TextContent("Sunrise", "large-heavy")
sunriseTime = TextContent("6:12 AM", "large")
sunsetCard = Card([sunsetIcon, sunsetLabel, sunsetTime], "clear", "row", "m", "center")
sunsetIcon = Tag("🌇", null, "lg", "neutral")
sunsetLabel = TextContent("Sunset", "large-heavy")
sunsetTime = TextContent("6:28 PM", "large")
footer = TextContent("Data source: IMD • Next update: 12:30 PM", "small")