diff --git a/.pans/v2.pen b/.pans/v2.pen new file mode 100644 index 0000000..c660472 --- /dev/null +++ b/.pans/v2.pen @@ -0,0 +1,9080 @@ +{ + "version": "2.6", + "children": [ + { + "type": "frame", + "id": "jF3SD", + "x": -983, + "y": 369, + "name": "Statistics", + "clip": true, + "width": 402, + "fill": "#FFFFFF", + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "AMTax", + "name": "contentWrapper", + "width": "fill_container", + "layout": "vertical", + "gap": 24, + "padding": 24, + "children": [ + { + "type": "frame", + "id": "vfuYD", + "name": "periodSection", + "width": "fill_container", + "layout": "vertical", + "gap": 16, + "children": [ + { + "type": "frame", + "id": "oTdXY", + "name": "segmentControl", + "width": "fill_container", + "height": 44, + "fill": "#F0F0F0", + "cornerRadius": 8, + "gap": 4, + "padding": 4, + "children": [ + { + "type": "frame", + "id": "wmlqF", + "name": "daySegment", + "width": "fill_container", + "height": "fill_container", + "fill": "#FFFFFF", + "cornerRadius": 6, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "H0yK4", + "name": "dayLabel", + "fill": "#1A1A1A", + "content": "日", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "600" + } + ] + }, + { + "type": "frame", + "id": "R5SrL", + "name": "weekSegment", + "width": "fill_container", + "height": "fill_container", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "qMr9M", + "name": "weekLabel", + "fill": "#888888", + "content": "周", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "1yyvY", + "name": "monthSegment", + "width": "fill_container", + "height": "fill_container", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "NJAly", + "name": "monthLabel", + "fill": "#888888", + "content": "月", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "500" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "wxhYu", + "name": "metricsSection", + "width": "fill_container", + "layout": "vertical", + "gap": 16, + "children": [ + { + "type": "text", + "id": "uRrgm", + "name": "metricsHeader", + "fill": "#888888", + "content": "核心指标", + "fontFamily": "JetBrains Mono", + "fontSize": 11, + "fontWeight": "600", + "letterSpacing": 2 + }, + { + "type": "frame", + "id": "29VOa", + "name": "metricsRow", + "width": "fill_container", + "gap": 16, + "children": [ + { + "type": "frame", + "id": "uI5xe", + "name": "card1", + "width": "fill_container", + "height": 146, + "fill": "#FFFFFF", + "cornerRadius": 12, + "stroke": { + "thickness": 1, + "fill": "#E5E5E5" + }, + "layout": "vertical", + "gap": 12, + "padding": 20, + "justifyContent": "space_between", + "children": [ + { + "type": "frame", + "id": "FmWfR", + "name": "card1Top", + "width": "fill_container", + "layout": "vertical", + "gap": 12, + "children": [ + { + "type": "frame", + "id": "fAZoH", + "name": "card1Header", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "hxA0w", + "name": "card1Label", + "fill": "#888888", + "content": "总支出", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "500" + }, + { + "type": "text", + "id": "GcqI5", + "name": "card1Badge", + "fill": "#E07B54", + "content": "-15%", + "fontFamily": "JetBrains Mono", + "fontSize": 10, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "LzO5o", + "name": "card1Value", + "fill": "#1A1A1A", + "content": "¥1,248.50", + "lineHeight": 0.85, + "fontFamily": "JetBrains Mono", + "fontSize": 32, + "fontWeight": "700" + } + ] + }, + { + "type": "text", + "id": "pYHqx", + "name": "card1Bottom", + "fill": "#666666", + "content": "较上期减少", + "fontFamily": "Newsreader", + "fontSize": 13, + "fontWeight": "normal", + "fontStyle": "italic" + } + ] + }, + { + "type": "frame", + "id": "hJgnc", + "name": "card2", + "width": "fill_container", + "height": 146, + "fill": "#FFFFFF", + "cornerRadius": 12, + "stroke": { + "thickness": 1, + "fill": "#E5E5E5" + }, + "layout": "vertical", + "gap": 12, + "padding": 20, + "justifyContent": "space_between", + "children": [ + { + "type": "frame", + "id": "8McqI", + "name": "card2Top", + "width": "fill_container", + "layout": "vertical", + "gap": 12, + "children": [ + { + "type": "frame", + "id": "pdjzv", + "name": "card2Header", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "blBHp", + "name": "card2Label", + "fill": "#888888", + "content": "交易笔数", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "500" + }, + { + "type": "text", + "id": "pR4il", + "name": "card2Badge", + "fill": "#0D6E6E", + "content": "+8", + "fontFamily": "JetBrains Mono", + "fontSize": 10, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "jBKa6", + "name": "card2Value", + "fill": "#1A1A1A", + "content": "127", + "lineHeight": 0.85, + "fontFamily": "JetBrains Mono", + "fontSize": 32, + "fontWeight": "700" + } + ] + }, + { + "type": "frame", + "id": "DEuSA", + "name": "card2Bottom", + "width": "fill_container", + "height": 24, + "gap": 3, + "alignItems": "end", + "children": [ + { + "type": "rectangle", + "cornerRadius": 2, + "id": "Bbiv4", + "name": "bar1", + "fill": "#E5E5E5", + "width": "fill_container", + "height": 8 + }, + { + "type": "rectangle", + "cornerRadius": 2, + "id": "6wkI0", + "name": "bar2", + "fill": "#E5E5E5", + "width": "fill_container", + "height": 12 + }, + { + "type": "rectangle", + "cornerRadius": 2, + "id": "Orujn", + "name": "bar3", + "fill": "#E5E5E5", + "width": "fill_container", + "height": 16 + }, + { + "type": "rectangle", + "cornerRadius": 2, + "id": "JLpTY", + "name": "bar4", + "fill": "#E5E5E5", + "width": "fill_container", + "height": 14 + }, + { + "type": "rectangle", + "cornerRadius": 2, + "id": "hjMuU", + "name": "bar5", + "fill": "#E5E5E5", + "width": "fill_container", + "height": 20 + }, + { + "type": "rectangle", + "cornerRadius": 2, + "id": "OQWag", + "name": "bar6", + "fill": "#E5E5E5", + "width": "fill_container", + "height": 18 + }, + { + "type": "rectangle", + "cornerRadius": 2, + "id": "5bqxw", + "name": "bar7", + "fill": "#0D6E6E", + "width": "fill_container", + "height": 24 + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "Pq97G", + "name": "incomeRow", + "width": "fill_container", + "gap": 16, + "children": [ + { + "type": "frame", + "id": "L3XxO", + "name": "incomeCard", + "width": "fill_container", + "height": 146, + "fill": "#FFFFFF", + "cornerRadius": 12, + "stroke": { + "thickness": 1, + "fill": "#E5E5E5" + }, + "layout": "vertical", + "gap": 12, + "padding": 20, + "justifyContent": "space_between", + "children": [ + { + "type": "frame", + "id": "V83CL", + "name": "incomeTop", + "width": "fill_container", + "layout": "vertical", + "gap": 12, + "children": [ + { + "type": "frame", + "id": "bzN0J", + "name": "incomeHeader", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "feyMh", + "name": "incomeLabel", + "fill": "#888888", + "content": "总收入", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "500" + }, + { + "type": "text", + "id": "LiGoC", + "name": "incomeBadge", + "fill": "#0D6E6E", + "content": "+2", + "fontFamily": "JetBrains Mono", + "fontSize": 10, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "FiPju", + "name": "incomeValue", + "fill": "#0D6E6E", + "content": "¥3,200", + "lineHeight": 0.85, + "fontFamily": "JetBrains Mono", + "fontSize": 32, + "fontWeight": "700" + } + ] + }, + { + "type": "text", + "id": "J0zG7", + "name": "incomeBottom", + "fill": "#666666", + "content": "工资、红包等", + "fontFamily": "Newsreader", + "fontSize": 13, + "fontWeight": "normal", + "fontStyle": "italic" + } + ] + }, + { + "type": "frame", + "id": "XICsc", + "name": "balanceCard", + "width": "fill_container", + "height": 146, + "fill": "#FFFFFF", + "cornerRadius": 12, + "stroke": { + "thickness": 1, + "fill": "#E5E5E5" + }, + "layout": "vertical", + "gap": 12, + "padding": 20, + "justifyContent": "space_between", + "children": [ + { + "type": "frame", + "id": "lNqoA", + "name": "balanceTop", + "width": "fill_container", + "layout": "vertical", + "gap": 12, + "children": [ + { + "type": "frame", + "id": "j1gDj", + "name": "balanceHeader", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "w3hrq", + "name": "balanceLabel", + "fill": "#888888", + "content": "净收支", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "500" + }, + { + "type": "icon_font", + "id": "ZBAuV", + "name": "balanceIcon", + "width": 16, + "height": 16, + "iconFontName": "trending-up", + "iconFontFamily": "lucide", + "fill": "#0D6E6E" + } + ] + }, + { + "type": "text", + "id": "OpVvd", + "name": "balanceValue", + "fill": "#0D6E6E", + "content": "+¥1,951.50", + "lineHeight": 0.85, + "fontFamily": "JetBrains Mono", + "fontSize": 32, + "fontWeight": "700" + } + ] + }, + { + "type": "frame", + "id": "ZIv4a", + "name": "balanceBottom", + "width": "fill_container", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "ellipse", + "id": "gSAEu", + "name": "balanceCircle", + "fill": "#0D6E6E", + "width": 8, + "height": 8 + }, + { + "type": "text", + "id": "U9nHM", + "name": "balanceDesc", + "fill": "#666666", + "content": "收入大于支出", + "fontFamily": "Newsreader", + "fontSize": 13, + "fontWeight": "normal", + "fontStyle": "italic" + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "6u89w", + "name": "categorySection", + "width": "fill_container", + "layout": "vertical", + "gap": 16, + "children": [ + { + "type": "frame", + "id": "CFPdk", + "name": "categoryHeader", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "9xSWi", + "name": "categoryLabel", + "fill": "#888888", + "content": "分类支出", + "fontFamily": "JetBrains Mono", + "fontSize": 11, + "fontWeight": "600", + "letterSpacing": 2 + }, + { + "type": "frame", + "id": "qiiAk", + "name": "categoryLink", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "wbNMw", + "name": "linkText", + "fill": "#0D6E6E", + "content": "查看全部", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "500" + }, + { + "type": "icon_font", + "id": "Sp6J9", + "name": "linkIcon", + "width": 16, + "height": 16, + "iconFontName": "arrow-right", + "iconFontFamily": "lucide", + "fill": "#0D6E6E" + } + ] + } + ] + }, + { + "type": "frame", + "id": "MWFx7", + "name": "categoryCard", + "width": "fill_container", + "fill": "#FFFFFF", + "cornerRadius": 12, + "stroke": { + "thickness": 1, + "fill": "#E5E5E5" + }, + "layout": "vertical", + "gap": 16, + "padding": 20, + "children": [ + { + "type": "frame", + "id": "M1LpC", + "name": "catRow1", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "dQLhW", + "name": "cat1Left", + "gap": 12, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "2W5IT", + "name": "cat1Icon", + "width": 40, + "height": 40, + "fill": "#0D6E6E15", + "cornerRadius": 10, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "2PlOJ", + "name": "cat1IconSym", + "width": 20, + "height": 20, + "iconFontName": "utensils", + "iconFontFamily": "lucide", + "fill": "#0D6E6E" + } + ] + }, + { + "type": "frame", + "id": "ICEQX", + "name": "cat1Info", + "layout": "vertical", + "gap": 2, + "children": [ + { + "type": "text", + "id": "rYGlx", + "name": "cat1Name", + "fill": "#1A1A1A", + "content": "餐饮美食", + "fontFamily": "Newsreader", + "fontSize": 16, + "fontWeight": "500" + }, + { + "type": "text", + "id": "wi8W4", + "name": "cat1Count", + "fill": "#888888", + "content": "32笔交易", + "fontFamily": "JetBrains Mono", + "fontSize": 11, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "text", + "id": "pEJ93", + "name": "cat1Amount", + "fill": "#1A1A1A", + "content": "¥486.50", + "fontFamily": "JetBrains Mono", + "fontSize": 16, + "fontWeight": "600" + } + ] + }, + { + "type": "rectangle", + "id": "xFr2V", + "name": "divider1", + "fill": "#F0F0F0", + "width": "fill_container", + "height": 1 + }, + { + "type": "frame", + "id": "ejkcy", + "name": "catRow2", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "CBW2D", + "name": "cat2Left", + "gap": 12, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "a97fQ", + "name": "cat2Icon", + "width": 40, + "height": 40, + "fill": "#E07B5415", + "cornerRadius": 10, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "jsVbp", + "name": "cat2IconSym", + "width": 20, + "height": 20, + "iconFontName": "shopping-cart", + "iconFontFamily": "lucide", + "fill": "#E07B54" + } + ] + }, + { + "type": "frame", + "id": "N9z8c", + "name": "cat2Info", + "layout": "vertical", + "gap": 2, + "children": [ + { + "type": "text", + "id": "wnAL4", + "name": "cat2Name", + "fill": "#1A1A1A", + "content": "购物消费", + "fontFamily": "Newsreader", + "fontSize": 16, + "fontWeight": "500" + }, + { + "type": "text", + "id": "avPO2", + "name": "cat2Count", + "fill": "#888888", + "content": "18笔交易", + "fontFamily": "JetBrains Mono", + "fontSize": 11, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "text", + "id": "aazVN", + "name": "cat2Amount", + "fill": "#1A1A1A", + "content": "¥324.80", + "fontFamily": "JetBrains Mono", + "fontSize": 16, + "fontWeight": "600" + } + ] + }, + { + "type": "rectangle", + "id": "bnSr4", + "name": "divider2", + "fill": "#F0F0F0", + "width": "fill_container", + "height": 1 + }, + { + "type": "frame", + "id": "mmlYG", + "name": "catRow3", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "vrfgt", + "name": "cat3Left", + "gap": 12, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "rZ4xo", + "name": "cat3Icon", + "width": 40, + "height": 40, + "fill": "#88888815", + "cornerRadius": 10, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "szqRZ", + "name": "cat3IconSym", + "width": 20, + "height": 20, + "iconFontName": "car", + "iconFontFamily": "lucide", + "fill": "#888888" + } + ] + }, + { + "type": "frame", + "id": "2KvA5", + "name": "cat3Info", + "layout": "vertical", + "gap": 2, + "children": [ + { + "type": "text", + "id": "NI2Nw", + "name": "cat3Name", + "fill": "#1A1A1A", + "content": "交通出行", + "fontFamily": "Newsreader", + "fontSize": 16, + "fontWeight": "500" + }, + { + "type": "text", + "id": "PdHJV", + "name": "cat3Count", + "fill": "#888888", + "content": "24笔交易", + "fontFamily": "JetBrains Mono", + "fontSize": 11, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "text", + "id": "YPa77", + "name": "cat3Amount", + "fill": "#1A1A1A", + "content": "¥187.20", + "fontFamily": "JetBrains Mono", + "fontSize": 16, + "fontWeight": "600" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "5Cssz", + "name": "trendSection", + "width": "fill_container", + "layout": "vertical", + "gap": 16, + "children": [ + { + "type": "frame", + "id": "UtABZ", + "name": "trendHeader", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "Cokqp", + "name": "trendLabel", + "fill": "#888888", + "content": "支出趋势", + "fontFamily": "JetBrains Mono", + "fontSize": 11, + "fontWeight": "600", + "letterSpacing": 2 + }, + { + "type": "frame", + "id": "JjJFZ", + "name": "trendPercent", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "wrTCS", + "name": "percentValue", + "fill": "#1A1A1A", + "content": "86", + "fontFamily": "JetBrains Mono", + "fontSize": 28, + "fontWeight": "700" + }, + { + "type": "text", + "id": "nI76B", + "name": "percentSign", + "fill": "#888888", + "content": "%", + "fontFamily": "JetBrains Mono", + "fontSize": 14, + "fontWeight": "500" + } + ] + } + ] + }, + { + "type": "rectangle", + "id": "d1Wpj", + "name": "hrLine", + "fill": "#E5E5E5", + "width": "fill_container", + "height": 1 + }, + { + "type": "frame", + "id": "ZAt9z", + "name": "trendCard", + "width": "fill_container", + "fill": "#FFFFFF", + "cornerRadius": 12, + "stroke": { + "thickness": 1, + "fill": "#E5E5E5" + }, + "layout": "vertical", + "gap": 16, + "padding": 20, + "children": [ + { + "type": "frame", + "id": "oQN8p", + "name": "weekChart", + "width": "fill_container", + "height": 80, + "justifyContent": "space_between", + "alignItems": "end", + "children": [ + { + "type": "frame", + "id": "rGmYG", + "name": "day1Col", + "layout": "vertical", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "VBLqg", + "name": "day1Bar", + "width": 32, + "height": 60, + "fill": "#F0F0F0", + "cornerRadius": 4, + "justifyContent": "end", + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": 4, + "id": "giaMe", + "name": "day1Fill", + "fill": "#0D6E6E", + "width": "fill_container", + "height": 42 + } + ] + }, + { + "type": "text", + "id": "8V2aH", + "name": "day1Label", + "fill": "#888888", + "content": "一", + "fontFamily": "JetBrains Mono", + "fontSize": 11, + "fontWeight": "600" + } + ] + }, + { + "type": "frame", + "id": "2SPdd", + "name": "day2Col", + "layout": "vertical", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "o698c", + "name": "day2Bar", + "width": 32, + "height": 60, + "fill": "#F0F0F0", + "cornerRadius": 4, + "justifyContent": "end", + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": 4, + "id": "OvCvr", + "name": "day2Fill", + "fill": "#0D6E6E", + "width": "fill_container", + "height": 48 + } + ] + }, + { + "type": "text", + "id": "AC1au", + "name": "day2Label", + "fill": "#888888", + "content": "二", + "fontFamily": "JetBrains Mono", + "fontSize": 11, + "fontWeight": "600" + } + ] + }, + { + "type": "frame", + "id": "IxwaU", + "name": "day3Col", + "layout": "vertical", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "Oo15B", + "name": "day3Bar", + "width": 32, + "height": 60, + "fill": "#F0F0F0", + "cornerRadius": 4, + "justifyContent": "end", + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": 4, + "id": "G7nXy", + "name": "day3Fill", + "fill": "#0D6E6E", + "width": "fill_container", + "height": 36 + } + ] + }, + { + "type": "text", + "id": "frOgm", + "name": "day3Label", + "fill": "#888888", + "content": "三", + "fontFamily": "JetBrains Mono", + "fontSize": 11, + "fontWeight": "600" + } + ] + }, + { + "type": "frame", + "id": "RyQhQ", + "name": "day4Col", + "layout": "vertical", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "KFgWz", + "name": "day4Bar", + "width": 32, + "height": 60, + "fill": "#F0F0F0", + "cornerRadius": 4, + "justifyContent": "end", + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": 4, + "id": "caHh7", + "name": "day4Fill", + "fill": "#0D6E6E", + "width": "fill_container", + "height": 52 + } + ] + }, + { + "type": "text", + "id": "UIVDa", + "name": "day4Label", + "fill": "#888888", + "content": "四", + "fontFamily": "JetBrains Mono", + "fontSize": 11, + "fontWeight": "600" + } + ] + }, + { + "type": "frame", + "id": "AgoKW", + "name": "day5Col", + "layout": "vertical", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "3n3r3", + "name": "day5Bar", + "width": 32, + "height": 60, + "fill": "#F0F0F0", + "cornerRadius": 4, + "justifyContent": "end", + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": 4, + "id": "9JowQ", + "name": "day5Fill", + "fill": "#0D6E6E", + "width": "fill_container", + "height": 44 + } + ] + }, + { + "type": "text", + "id": "x8QUC", + "name": "day5Label", + "fill": "#888888", + "content": "五", + "fontFamily": "JetBrains Mono", + "fontSize": 11, + "fontWeight": "600" + } + ] + }, + { + "type": "frame", + "id": "uur3l", + "name": "day6Col", + "layout": "vertical", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "0GTEq", + "name": "day6Bar", + "width": 32, + "height": 60, + "fill": "#F0F0F0", + "cornerRadius": 4, + "justifyContent": "end", + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": 4, + "id": "VPwIR", + "name": "day6Fill", + "fill": "#E07B54", + "width": "fill_container", + "height": 56 + } + ] + }, + { + "type": "text", + "id": "D9aGt", + "name": "day6Label", + "fill": "#E07B54", + "content": "六", + "fontFamily": "JetBrains Mono", + "fontSize": 11, + "fontWeight": "700" + } + ] + }, + { + "type": "frame", + "id": "maBOK", + "name": "day7Col", + "layout": "vertical", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "xEqwT", + "name": "day7Bar", + "width": 32, + "height": 60, + "fill": "#F0F0F0", + "cornerRadius": 4, + "justifyContent": "end", + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": 4, + "id": "rXtYK", + "name": "day7Fill", + "fill": "#CCCCCC", + "width": "fill_container", + "height": 0 + } + ] + }, + { + "type": "text", + "id": "zEcGr", + "name": "day7Label", + "fill": "#CCCCCC", + "content": "日", + "fontFamily": "JetBrains Mono", + "fontSize": 11, + "fontWeight": "600" + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "1aLmf", + "name": "budgetSection", + "width": "fill_container", + "layout": "vertical", + "gap": 16, + "children": [ + { + "type": "frame", + "id": "oXx0E", + "name": "budgetHeader", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "iQUv1", + "name": "budgetLabel", + "fill": "#888888", + "content": "预算使用", + "fontFamily": "JetBrains Mono", + "fontSize": 11, + "fontWeight": "600", + "letterSpacing": 2 + }, + { + "type": "frame", + "id": "BNyDN", + "name": "budgetLink", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "4nB71", + "name": "budgetLinkText", + "fill": "#0D6E6E", + "content": "管理预算", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "500" + }, + { + "type": "icon_font", + "id": "TP5CO", + "name": "budgetLinkIcon", + "width": 16, + "height": 16, + "iconFontName": "arrow-right", + "iconFontFamily": "lucide", + "fill": "#0D6E6E" + } + ] + } + ] + }, + { + "type": "frame", + "id": "dcxOW", + "name": "budgetCard", + "width": "fill_container", + "fill": "#FFFFFF", + "cornerRadius": 12, + "stroke": { + "thickness": 1, + "fill": "#E5E5E5" + }, + "layout": "vertical", + "gap": 16, + "padding": 20, + "children": [ + { + "type": "frame", + "id": "9vWpI", + "name": "budgetRow1", + "width": "fill_container", + "layout": "vertical", + "gap": 8, + "children": [ + { + "type": "frame", + "id": "h2xbA", + "name": "budget1Header", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "a8xDa", + "name": "budget1Name", + "fill": "#1A1A1A", + "content": "餐饮预算", + "fontFamily": "Newsreader", + "fontSize": 16, + "fontWeight": "500" + }, + { + "type": "frame", + "id": "wOn5D", + "name": "budget1Stats", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "9OAb6", + "name": "budget1Current", + "fill": "#1A1A1A", + "content": "¥486.50", + "fontFamily": "JetBrains Mono", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "text", + "id": "wyfo4", + "name": "budget1Separator", + "fill": "#CCCCCC", + "content": "/", + "fontFamily": "JetBrains Mono", + "fontSize": 14, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "9LJg4", + "name": "budget1Limit", + "fill": "#888888", + "content": "¥800", + "fontFamily": "JetBrains Mono", + "fontSize": 14, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "Qpq8z", + "name": "budget1Progress", + "width": "fill_container", + "height": 8, + "fill": "#F0F0F0", + "cornerRadius": 4, + "children": [ + { + "type": "rectangle", + "cornerRadius": 4, + "id": "FevR2", + "name": "budget1Fill", + "fill": "#0D6E6E", + "width": "fit_content(0)", + "height": "fill_container" + } + ] + } + ] + }, + { + "type": "rectangle", + "id": "2Mhkm", + "name": "dividerBudget1", + "fill": "#F0F0F0", + "width": "fill_container", + "height": 1 + }, + { + "type": "frame", + "id": "Zmsql", + "name": "budgetRow2", + "width": "fill_container", + "layout": "vertical", + "gap": 8, + "children": [ + { + "type": "frame", + "id": "wMpH4", + "name": "budget2Header", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "c3G6O", + "name": "budget2Name", + "fill": "#1A1A1A", + "content": "购物预算", + "fontFamily": "Newsreader", + "fontSize": 16, + "fontWeight": "500" + }, + { + "type": "frame", + "id": "zvFPU", + "name": "budget2Stats", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "bIdRZ", + "name": "budget2Current", + "fill": "#1A1A1A", + "content": "¥324.80", + "fontFamily": "JetBrains Mono", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "text", + "id": "4UWiB", + "name": "budget2Separator", + "fill": "#CCCCCC", + "content": "/", + "fontFamily": "JetBrains Mono", + "fontSize": 14, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "mI9U4", + "name": "budget2Limit", + "fill": "#888888", + "content": "¥500", + "fontFamily": "JetBrains Mono", + "fontSize": 14, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "brX2g", + "name": "budget2Progress", + "width": "fill_container", + "height": 8, + "fill": "#F0F0F0", + "cornerRadius": 4, + "children": [ + { + "type": "rectangle", + "cornerRadius": 4, + "id": "GroRL", + "name": "budget2Fill", + "fill": "#0D6E6E", + "width": "fit_content(0)", + "height": "fill_container" + } + ] + } + ] + }, + { + "type": "rectangle", + "id": "3XhJP", + "name": "dividerBudget2", + "fill": "#F0F0F0", + "width": "fill_container", + "height": 1 + }, + { + "type": "frame", + "id": "3xCe8", + "name": "budgetRow3", + "width": "fill_container", + "layout": "vertical", + "gap": 8, + "children": [ + { + "type": "frame", + "id": "heXyN", + "name": "budget3Header", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "AyvRg", + "name": "budget3Name", + "fill": "#1A1A1A", + "content": "交通预算", + "fontFamily": "Newsreader", + "fontSize": 16, + "fontWeight": "500" + }, + { + "type": "frame", + "id": "tiM8M", + "name": "budget3Stats", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "kfSvd", + "name": "budget3Current", + "fill": "#1A1A1A", + "content": "¥187.20", + "fontFamily": "JetBrains Mono", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "text", + "id": "ErldM", + "name": "budget3Separator", + "fill": "#CCCCCC", + "content": "/", + "fontFamily": "JetBrains Mono", + "fontSize": 14, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "RedAa", + "name": "budget3Limit", + "fill": "#888888", + "content": "¥300", + "fontFamily": "JetBrains Mono", + "fontSize": 14, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "5V1SC", + "name": "budget3Progress", + "width": "fill_container", + "height": 8, + "fill": "#F0F0F0", + "cornerRadius": 4, + "children": [ + { + "type": "rectangle", + "cornerRadius": 4, + "id": "UwJJ5", + "name": "budget3Fill", + "fill": "#0D6E6E", + "width": "fit_content(0)", + "height": "fill_container" + } + ] + } + ] + }, + { + "type": "rectangle", + "id": "9BN3m", + "name": "dividerBudget3", + "fill": "#F0F0F0", + "width": "fill_container", + "height": 1 + }, + { + "type": "frame", + "id": "bSH2j", + "name": "budgetRow4", + "width": "fill_container", + "layout": "vertical", + "gap": 8, + "children": [ + { + "type": "frame", + "id": "9wyNg", + "name": "budget4Header", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "zm8sI", + "name": "budget4Name", + "fill": "#1A1A1A", + "content": "月度总预算", + "fontFamily": "Newsreader", + "fontSize": 16, + "fontWeight": "500" + }, + { + "type": "frame", + "id": "SkudG", + "name": "budget4Stats", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "TFK8I", + "name": "budget4Current", + "fill": "#E07B54", + "content": "¥1,248.50", + "fontFamily": "JetBrains Mono", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "text", + "id": "uhqb0", + "name": "budget4Separator", + "fill": "#CCCCCC", + "content": "/", + "fontFamily": "JetBrains Mono", + "fontSize": 14, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "ahL7W", + "name": "budget4Limit", + "fill": "#888888", + "content": "¥2,500", + "fontFamily": "JetBrains Mono", + "fontSize": 14, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "xDskg", + "name": "budget4Progress", + "width": "fill_container", + "height": 8, + "fill": "#F0F0F0", + "cornerRadius": 4, + "children": [ + { + "type": "rectangle", + "cornerRadius": 4, + "id": "W56Qb", + "name": "budget4Fill", + "fill": "#0D6E6E", + "width": "fit_content(0)", + "height": "fill_container" + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "PlVHb", + "x": -1413, + "y": 369, + "name": "Calendar (Dark)", + "width": 402, + "fill": "#09090B", + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "gZpES", + "name": "header", + "width": "fill_container", + "gap": 4, + "padding": [ + 8, + 24 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "KchUY", + "name": "headerContent", + "width": 142, + "height": 39, + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "text", + "id": "y8X8F", + "name": "subtitle", + "fill": "#a1a1aa", + "content": "2026年1月", + "fontFamily": "DM Sans", + "fontSize": 24, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "f1LMO", + "name": "notifBtn", + "width": 44, + "height": 44, + "fill": "#27272a", + "cornerRadius": 22, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "UMWrV", + "name": "icon", + "width": 20, + "height": 20, + "iconFontName": "bell", + "iconFontFamily": "lucide", + "fill": "#f4f4f5" + } + ] + } + ] + }, + { + "type": "frame", + "id": "2f9Lt", + "name": "calContainer", + "width": "fill_container", + "layout": "vertical", + "gap": 16, + "padding": 24, + "children": [ + { + "type": "frame", + "id": "9uhuL", + "name": "weekDays", + "width": "fill_container", + "justifyContent": "space_between", + "children": [ + { + "type": "text", + "id": "bM7Rv", + "name": "dayMon", + "fill": "#71717a", + "content": "一", + "textAlign": "center", + "fontFamily": "DM Sans", + "fontSize": 12, + "fontWeight": "600" + }, + { + "type": "text", + "id": "Yq6GF", + "name": "dayTue", + "fill": "#71717a", + "content": "二", + "textAlign": "center", + "fontFamily": "DM Sans", + "fontSize": 12, + "fontWeight": "600" + }, + { + "type": "text", + "id": "CmxXJ", + "name": "dayWed", + "fill": "#71717a", + "content": "三", + "textAlign": "center", + "fontFamily": "DM Sans", + "fontSize": 12, + "fontWeight": "600" + }, + { + "type": "text", + "id": "mtCPr", + "name": "dayThu", + "fill": "#71717a", + "content": "四", + "textAlign": "center", + "fontFamily": "DM Sans", + "fontSize": 12, + "fontWeight": "600" + }, + { + "type": "text", + "id": "OrNBC", + "name": "dayFri", + "fill": "#71717a", + "content": "五", + "textAlign": "center", + "fontFamily": "DM Sans", + "fontSize": 12, + "fontWeight": "600" + }, + { + "type": "text", + "id": "wr9aj", + "name": "daySat", + "fill": "#71717a", + "content": "六", + "textAlign": "center", + "fontFamily": "DM Sans", + "fontSize": 12, + "fontWeight": "600" + }, + { + "type": "text", + "id": "vkGTs", + "name": "daySun", + "fill": "#71717a", + "content": "日", + "textAlign": "center", + "fontFamily": "DM Sans", + "fontSize": 12, + "fontWeight": "600" + } + ] + }, + { + "type": "frame", + "id": "8OVHm", + "name": "calGrid", + "width": "fill_container", + "layout": "vertical", + "gap": 12, + "children": [ + { + "type": "frame", + "id": "PoZdj", + "name": "weekRow1", + "width": "fill_container", + "justifyContent": "space_between", + "children": [ + { + "type": "frame", + "id": "dbYbN", + "name": "d1", + "width": 44, + "layout": "vertical", + "gap": 2, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "KRJ9P", + "name": "dc1", + "width": 32, + "height": 32, + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "5Wsnk", + "name": "t1", + "fill": "#52525b", + "content": "29", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "text", + "id": "IjHl0", + "name": "am1", + "fill": "#71717a", + "content": " ", + "fontFamily": "DM Sans", + "fontSize": 9, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "cBULU", + "name": "d2", + "width": 44, + "layout": "vertical", + "gap": 2, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "PRMhS", + "name": "dc2", + "width": 32, + "height": 32, + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "GyZ9e", + "name": "t2", + "fill": "#52525b", + "content": "30", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "text", + "id": "K7WwK", + "name": "am2", + "fill": "#71717a", + "content": " ", + "fontFamily": "DM Sans", + "fontSize": 9, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "vN0jc", + "name": "d3", + "width": 44, + "layout": "vertical", + "gap": 2, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "pb3in", + "name": "dc3", + "width": 32, + "height": 32, + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "owoDO", + "name": "t3", + "fill": "#52525b", + "content": "31", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "text", + "id": "zRuua", + "name": "am3", + "fill": "#71717a", + "content": " ", + "fontFamily": "DM Sans", + "fontSize": 9, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "y4VZo", + "name": "d4", + "width": 44, + "layout": "vertical", + "gap": 2, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "UOMXP", + "name": "dc4", + "width": 32, + "height": 32, + "fill": "#27272a", + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "R3LzE", + "name": "t4", + "fill": "#f4f4f5", + "content": "1", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "U63Y9", + "name": "am4", + "fill": "#71717a", + "content": "128", + "fontFamily": "DM Sans", + "fontSize": 9, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "yaSMg", + "name": "d5", + "width": 44, + "layout": "vertical", + "gap": 2, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "c6drb", + "name": "dc5", + "width": 32, + "height": 32, + "fill": "#27272a", + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "dKXbg", + "name": "t5", + "fill": "#f4f4f5", + "content": "2", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "UoLQr", + "name": "am5", + "fill": "#71717a", + "content": "45", + "fontFamily": "DM Sans", + "fontSize": 9, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "qaMDR", + "name": "d6", + "width": 44, + "layout": "vertical", + "gap": 2, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "gUgyM", + "name": "dc6", + "width": 32, + "height": 32, + "fill": "#27272a", + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "tCNCN", + "name": "t6", + "fill": "#f4f4f5", + "content": "3", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "RWZ6K", + "name": "am6", + "fill": "#71717a", + "content": "230", + "fontFamily": "DM Sans", + "fontSize": 9, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "1VQYS", + "name": "d7", + "width": 44, + "layout": "vertical", + "gap": 2, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "oAc5u", + "name": "dc7", + "width": 32, + "height": 32, + "fill": "#27272a", + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "FSZDz", + "name": "t7", + "fill": "#f4f4f5", + "content": "4", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "Ya1v0", + "name": "am7", + "fill": "#71717a", + "content": "12", + "fontFamily": "DM Sans", + "fontSize": 9, + "fontWeight": "500" + } + ] + } + ] + }, + { + "type": "frame", + "id": "B9B0z", + "name": "weekRow2", + "width": "fill_container", + "justifyContent": "space_between", + "children": [ + { + "type": "frame", + "id": "NXFJE", + "name": "d8", + "width": 44, + "layout": "vertical", + "gap": 2, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "GcXgt", + "name": "dc8", + "width": 32, + "height": 32, + "fill": "#27272a", + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "tWHpg", + "name": "t8", + "fill": "#f4f4f5", + "content": "5", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "8hc20", + "name": "am8", + "fill": "#71717a", + "content": "88", + "fontFamily": "DM Sans", + "fontSize": 9, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "YL5R1", + "name": "d9", + "width": 44, + "layout": "vertical", + "gap": 2, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "QVmej", + "name": "dc9", + "width": 32, + "height": 32, + "fill": "#27272a", + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "uH1vo", + "name": "t9", + "fill": "#f4f4f5", + "content": "6", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "1sMYh", + "name": "am9", + "fill": "#f87171", + "content": "223", + "fontFamily": "DM Sans", + "fontSize": 9, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "lb4DB", + "name": "d10", + "width": 44, + "layout": "vertical", + "gap": 2, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "5B45F", + "name": "dc10", + "width": 32, + "height": 32, + "fill": "#27272a", + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "c6QXz", + "name": "t10", + "fill": "#f4f4f5", + "content": "7", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "uuanY", + "name": "am10", + "fill": "#71717a", + "content": "15", + "fontFamily": "DM Sans", + "fontSize": 9, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "Zy1uP", + "name": "d11", + "width": 44, + "layout": "vertical", + "gap": 2, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "plRut", + "name": "dc11", + "width": 32, + "height": 32, + "fill": "#27272a", + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "WjwqP", + "name": "t11", + "fill": "#f4f4f5", + "content": "8", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "jTBmH", + "name": "am11", + "fill": "#71717a", + "content": "34", + "fontFamily": "DM Sans", + "fontSize": 9, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "pxQYa", + "name": "d12", + "width": 44, + "layout": "vertical", + "gap": 2, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "N43l5", + "name": "dc12", + "width": 32, + "height": 32, + "fill": "#27272a", + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "z4Be0", + "name": "t12", + "fill": "#f4f4f5", + "content": "9", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "oMqUr", + "name": "am12", + "fill": "#71717a", + "content": "120", + "fontFamily": "DM Sans", + "fontSize": 9, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "4Izh9", + "name": "d13", + "width": 44, + "layout": "vertical", + "gap": 2, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "T2eDU", + "name": "dc13", + "width": 32, + "height": 32, + "fill": "#27272a", + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "SFJdY", + "name": "t13", + "fill": "#f4f4f5", + "content": "10", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "Ka4QA", + "name": "am13", + "fill": "#71717a", + "content": "56", + "fontFamily": "DM Sans", + "fontSize": 9, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "3jd1g", + "name": "d14", + "width": 44, + "layout": "vertical", + "gap": 2, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "GzO0j", + "name": "dc14", + "width": 32, + "height": 32, + "fill": "#27272a", + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "Cbwzh", + "name": "t14", + "fill": "#f4f4f5", + "content": "11", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "Oj9rX", + "name": "am14", + "fill": "#f87171", + "content": "442", + "fontFamily": "DM Sans", + "fontSize": 9, + "fontWeight": "500" + } + ] + } + ] + }, + { + "type": "frame", + "id": "2G5FH", + "name": "weekRow3", + "width": "fill_container", + "justifyContent": "space_between", + "children": [ + { + "type": "frame", + "id": "IiGDk", + "name": "d15", + "width": 44, + "layout": "vertical", + "gap": 2, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "QSwXv", + "name": "dc15", + "width": 32, + "height": 32, + "fill": "#FF6B6B", + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "MEoRp", + "name": "t15", + "fill": "#FFFFFF", + "content": "12", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "700" + } + ] + }, + { + "type": "text", + "id": "UA6Uw", + "name": "am15", + "fill": "#FF6B6B", + "content": "88", + "fontFamily": "DM Sans", + "fontSize": 9, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "5cuAY", + "name": "d16", + "width": 44, + "layout": "vertical", + "gap": 2, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "6BPm7", + "name": "dc16", + "width": 32, + "height": 32, + "fill": "#27272a", + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "IXOUv", + "name": "t16", + "fill": "#f4f4f5", + "content": "13", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "ZpAVN", + "name": "am16", + "fill": "#71717a", + "content": "12", + "fontFamily": "DM Sans", + "fontSize": 9, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "oKVGz", + "name": "d17", + "width": 44, + "layout": "vertical", + "gap": 2, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "2If3g", + "name": "dc17", + "width": 32, + "height": 32, + "fill": "#27272a", + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "xsR3f", + "name": "t17", + "fill": "#f4f4f5", + "content": "14", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "tqpv6", + "name": "am17", + "fill": "#71717a", + "content": " ", + "fontFamily": "DM Sans", + "fontSize": 9, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "GwHZ1", + "name": "d18", + "width": 44, + "layout": "vertical", + "gap": 2, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "DcFj1", + "name": "dc18", + "width": 32, + "height": 32, + "fill": "#27272a", + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "vKyRP", + "name": "t18", + "fill": "#f4f4f5", + "content": "15", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "wN52j", + "name": "am18", + "fill": "#71717a", + "content": " ", + "fontFamily": "DM Sans", + "fontSize": 9, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "TUJJ0", + "name": "d19", + "width": 44, + "layout": "vertical", + "gap": 2, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "EVFSp", + "name": "dc19", + "width": 32, + "height": 32, + "fill": "#27272a", + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "CTLn4", + "name": "t19", + "fill": "#f4f4f5", + "content": "16", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "NFNmG", + "name": "am19", + "fill": "#f87171", + "content": "542", + "fontFamily": "DM Sans", + "fontSize": 9, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "c96XU", + "name": "d20", + "width": 44, + "layout": "vertical", + "gap": 2, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "lkItC", + "name": "dc20", + "width": 32, + "height": 32, + "fill": "#27272a", + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "RChCK", + "name": "t20", + "fill": "#f4f4f5", + "content": "17", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "3JM0X", + "name": "am20", + "fill": "#71717a", + "content": " ", + "fontFamily": "DM Sans", + "fontSize": 9, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "dPyYV", + "name": "d21", + "width": 44, + "layout": "vertical", + "gap": 2, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "PejUl", + "name": "dc21", + "width": 32, + "height": 32, + "fill": "#27272a", + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "zssXc", + "name": "t21", + "fill": "#f4f4f5", + "content": "18", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "B5z1P", + "name": "am21", + "fill": "#71717a", + "content": "56", + "fontFamily": "DM Sans", + "fontSize": 9, + "fontWeight": "500" + } + ] + } + ] + }, + { + "type": "frame", + "id": "A88XH", + "name": "weekRow4", + "width": "fill_container", + "justifyContent": "space_between", + "children": [ + { + "type": "frame", + "id": "G6LcR", + "name": "d22", + "width": 44, + "layout": "vertical", + "gap": 2, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "1hBSX", + "name": "dc22", + "width": 32, + "height": 32, + "fill": "#27272a", + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "ZrJQh", + "name": "t22", + "fill": "#f4f4f5", + "content": "19", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "ehhJi", + "name": "am22", + "fill": "#71717a", + "content": " ", + "fontFamily": "DM Sans", + "fontSize": 9, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "y8YpI", + "name": "d23", + "width": 44, + "layout": "vertical", + "gap": 2, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "i1JSh", + "name": "dc23", + "width": 32, + "height": 32, + "fill": "#27272a", + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "zQzCM", + "name": "t23", + "fill": "#f4f4f5", + "content": "20", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "wysQz", + "name": "am23", + "fill": "#71717a", + "content": " ", + "fontFamily": "DM Sans", + "fontSize": 9, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "frJ4V", + "name": "d24", + "width": 44, + "layout": "vertical", + "gap": 2, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "t4m6z", + "name": "dc24", + "width": 32, + "height": 32, + "fill": "#27272a", + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "rs2zW", + "name": "t24", + "fill": "#f4f4f5", + "content": "21", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "IbwTE", + "name": "am24", + "fill": "#71717a", + "content": " ", + "fontFamily": "DM Sans", + "fontSize": 9, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "gFbFw", + "name": "d25", + "width": 44, + "layout": "vertical", + "gap": 2, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "8RX85", + "name": "dc25", + "width": 32, + "height": 32, + "fill": "#27272a", + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "gUEjR", + "name": "t25", + "fill": "#f4f4f5", + "content": "22", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "MiEIb", + "name": "am25", + "fill": "#71717a", + "content": "125", + "fontFamily": "DM Sans", + "fontSize": 9, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "mTHMU", + "name": "d26", + "width": 44, + "layout": "vertical", + "gap": 2, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "OMJpQ", + "name": "dc26", + "width": 32, + "height": 32, + "fill": "#27272a", + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "H4pzG", + "name": "t26", + "fill": "#f4f4f5", + "content": "23", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "2p2Tu", + "name": "am26", + "fill": "#71717a", + "content": " ", + "fontFamily": "DM Sans", + "fontSize": 9, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "tLtM7", + "name": "d27", + "width": 44, + "layout": "vertical", + "gap": 2, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "78SmJ", + "name": "dc27", + "width": 32, + "height": 32, + "fill": "#27272a", + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "l4IJO", + "name": "t27", + "fill": "#f4f4f5", + "content": "24", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "lFzIc", + "name": "am27", + "fill": "#71717a", + "content": " ", + "fontFamily": "DM Sans", + "fontSize": 9, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "iVLMS", + "name": "d28", + "width": 44, + "layout": "vertical", + "gap": 2, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "IPzvR", + "name": "dc28", + "width": 32, + "height": 32, + "fill": "#27272a", + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "YQW7p", + "name": "t28", + "fill": "#f4f4f5", + "content": "25", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "2reDd", + "name": "am28", + "fill": "#71717a", + "content": " ", + "fontFamily": "DM Sans", + "fontSize": 9, + "fontWeight": "500" + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "Xm1yI", + "name": "stats", + "width": "fill_container", + "layout": "vertical", + "gap": 16, + "padding": 24, + "children": [ + { + "type": "frame", + "id": "WDuPW", + "name": "statsHeader", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "KQpEH", + "name": "statsTitle", + "fill": "#f4f4f5", + "content": "每日统计", + "fontFamily": "Bricolage Grotesque", + "fontSize": 18, + "fontWeight": "700" + }, + { + "type": "text", + "id": "pCjJG", + "name": "statsDate", + "fill": "#a1a1aa", + "content": "2026年1月12日", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "UeZs3", + "name": "statsCard", + "width": "fill_container", + "fill": "#18181b", + "cornerRadius": 20, + "layout": "vertical", + "gap": 12, + "padding": 20, + "children": [ + { + "type": "frame", + "id": "OfF2p", + "name": "statsRow", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "sCMmg", + "name": "statsLabel", + "fill": "#a1a1aa", + "content": "Total Spent", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "500" + }, + { + "type": "frame", + "id": "0M3qd", + "name": "b1", + "fill": "#451a03", + "cornerRadius": 12, + "padding": [ + 6, + 10 + ], + "children": [ + { + "type": "text", + "id": "SLQhU", + "name": "t29", + "fill": "#fbbf24", + "content": "Daily Limit: 2500", + "fontFamily": "DM Sans", + "fontSize": 11, + "fontWeight": "600" + } + ] + } + ] + }, + { + "type": "text", + "id": "Bigj4", + "name": "statsVal", + "fill": "#f4f4f5", + "content": "¥ 1,248.50", + "fontFamily": "Bricolage Grotesque", + "fontSize": 32, + "fontWeight": "800" + } + ] + } + ] + }, + { + "type": "frame", + "id": "rINjA", + "name": "txnList", + "width": "fill_container", + "layout": "vertical", + "gap": 12, + "padding": 24, + "children": [ + { + "type": "frame", + "id": "YJSsM", + "name": "txnHeader", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "enDNe", + "name": "txnTitle", + "fill": "#f4f4f5", + "content": "交易记录", + "fontFamily": "Bricolage Grotesque", + "fontSize": 18, + "fontWeight": "700" + }, + { + "type": "frame", + "id": "Z5Pf4", + "name": "rightActions", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "qR22i", + "name": "b2", + "fill": "#064e3b", + "cornerRadius": 12, + "padding": [ + 6, + 12 + ], + "children": [ + { + "type": "text", + "id": "z9Gyq", + "name": "t30", + "fill": "#4ade80", + "content": "3 Items", + "fontFamily": "DM Sans", + "fontSize": 12, + "fontWeight": "600" + } + ] + }, + { + "type": "frame", + "id": "xB6Pm", + "name": "smartBtn", + "fill": "#312e81", + "cornerRadius": 12, + "gap": 6, + "padding": [ + 6, + 12 + ], + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "U9fdo", + "name": "iconSmart", + "width": 14, + "height": 14, + "iconFontName": "sparkles", + "iconFontFamily": "lucide", + "fill": "#6366F1" + }, + { + "type": "text", + "id": "mAvBq", + "name": "labelSmart", + "fill": "#818cf8", + "content": "Smart", + "fontFamily": "DM Sans", + "fontSize": 12, + "fontWeight": "600" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "8wsnb", + "name": "tCard1", + "width": "fill_container", + "fill": "#18181b", + "cornerRadius": 16, + "gap": 14, + "padding": 16, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "D468k", + "name": "tCat1", + "width": 44, + "height": 44, + "fill": "#27272a", + "cornerRadius": 22, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "uyr5m", + "name": "icon2", + "width": 20, + "height": 20, + "iconFontName": "star", + "iconFontFamily": "lucide", + "fill": "#FF6B6B" + } + ] + }, + { + "type": "frame", + "id": "b1hWR", + "name": "tContent1", + "width": "fill_container", + "layout": "vertical", + "gap": 2, + "children": [ + { + "type": "text", + "id": "iEA77", + "name": "tName1", + "fill": "#f4f4f5", + "content": "Lunch", + "fontFamily": "DM Sans", + "fontSize": 15, + "fontWeight": "600" + }, + { + "type": "text", + "id": "dUUKV", + "name": "tTime1", + "fill": "#71717a", + "content": "12:30 PM", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "text", + "id": "rQZsd", + "name": "tAmount1", + "fill": "#f4f4f5", + "content": "-58.00", + "fontFamily": "DM Sans", + "fontSize": 15, + "fontWeight": "700" + } + ] + }, + { + "type": "frame", + "id": "B65gq", + "name": "tCard2", + "width": "fill_container", + "fill": "#18181b", + "cornerRadius": 16, + "gap": 14, + "padding": 16, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "Y9qhs", + "name": "tCat2", + "width": 44, + "height": 44, + "fill": "#27272a", + "cornerRadius": 22, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "pCURs", + "name": "icon3", + "width": 20, + "height": 20, + "iconFontName": "coffee", + "iconFontFamily": "lucide", + "fill": "#FCD34D" + } + ] + }, + { + "type": "frame", + "id": "bmO5H", + "name": "tContent2", + "width": "fill_container", + "layout": "vertical", + "gap": 2, + "children": [ + { + "type": "text", + "id": "MfTBA", + "name": "tName2", + "fill": "#f4f4f5", + "content": "Coffee", + "fontFamily": "DM Sans", + "fontSize": 15, + "fontWeight": "600" + }, + { + "type": "text", + "id": "VENve", + "name": "tTime2", + "fill": "#71717a", + "content": "08:15 AM", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "text", + "id": "mnUuS", + "name": "tAmount2", + "fill": "#f4f4f5", + "content": "-24.50", + "fontFamily": "DM Sans", + "fontSize": 15, + "fontWeight": "700" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "uxvyO", + "x": -1841, + "y": 369, + "name": "Calendar", + "width": 402, + "fill": "#FFFFFF", + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "MegAe", + "name": "header", + "rotation": 0.0027546259757699116, + "width": "fill_container", + "gap": 4, + "padding": [ + 8, + 24 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "lIUUB", + "name": "headerContent", + "width": 142, + "height": 39, + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "text", + "id": "TRl09", + "name": "subtitle", + "fill": "#1a1a1a", + "content": "2026年1月", + "fontFamily": "DM Sans", + "fontSize": 24, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "nHzgV", + "name": "notifBtn", + "width": 44, + "height": 44, + "fill": "#F5F5F5", + "cornerRadius": 22, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "agodm", + "name": "icon", + "width": 20, + "height": 20, + "iconFontName": "bell", + "iconFontFamily": "lucide", + "fill": "#1A1A1A" + } + ] + } + ] + }, + { + "type": "frame", + "id": "9YwOQ", + "name": "calContainer", + "width": "fill_container", + "layout": "vertical", + "gap": 16, + "padding": 24, + "children": [ + { + "type": "frame", + "id": "Enjcs", + "name": "weekDays", + "width": "fill_container", + "justifyContent": "space_between", + "children": [ + { + "type": "text", + "id": "aezRw", + "name": "dayMon", + "fill": "#9CA3AF", + "content": "一", + "textAlign": "center", + "fontFamily": "DM Sans", + "fontSize": 12, + "fontWeight": "600" + }, + { + "type": "text", + "id": "N2dL2", + "name": "dayTue", + "fill": "#9CA3AF", + "content": "二", + "textAlign": "center", + "fontFamily": "DM Sans", + "fontSize": 12, + "fontWeight": "600" + }, + { + "type": "text", + "id": "Ke1I4", + "name": "dayWed", + "fill": "#9CA3AF", + "content": "三", + "textAlign": "center", + "fontFamily": "DM Sans", + "fontSize": 12, + "fontWeight": "600" + }, + { + "type": "text", + "id": "3dtCH", + "name": "dayThu", + "fill": "#9CA3AF", + "content": "四", + "textAlign": "center", + "fontFamily": "DM Sans", + "fontSize": 12, + "fontWeight": "600" + }, + { + "type": "text", + "id": "LZt56", + "name": "dayFri", + "fill": "#9CA3AF", + "content": "五", + "textAlign": "center", + "fontFamily": "DM Sans", + "fontSize": 12, + "fontWeight": "600" + }, + { + "type": "text", + "id": "Hx4gg", + "name": "daySat", + "fill": "#9CA3AF", + "content": "六", + "textAlign": "center", + "fontFamily": "DM Sans", + "fontSize": 12, + "fontWeight": "600" + }, + { + "type": "text", + "id": "XOxOU", + "name": "daySun", + "fill": "#9CA3AF", + "content": "日", + "textAlign": "center", + "fontFamily": "DM Sans", + "fontSize": 12, + "fontWeight": "600" + } + ] + }, + { + "type": "frame", + "id": "MzWmb", + "name": "calGrid", + "width": "fill_container", + "layout": "vertical", + "gap": 12, + "children": [ + { + "type": "frame", + "id": "XgyNi", + "name": "weekRow1", + "width": "fill_container", + "justifyContent": "space_between", + "children": [ + { + "type": "frame", + "id": "JBD2B", + "name": "d1", + "width": 44, + "layout": "vertical", + "gap": 2, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "XhOQb", + "name": "dc1", + "width": 32, + "height": 32, + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "dWILj", + "name": "t1", + "fill": "#E5E7EB", + "content": "29", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "text", + "id": "QbkMj", + "name": "am1", + "fill": "#9CA3AF", + "content": " ", + "fontFamily": "DM Sans", + "fontSize": 9, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "QtOsX", + "name": "d2", + "width": 44, + "layout": "vertical", + "gap": 2, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "RPQpK", + "name": "dc2", + "width": 32, + "height": 32, + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "CBkej", + "name": "t2", + "fill": "#E5E7EB", + "content": "30", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "text", + "id": "YJFdL", + "name": "am2", + "fill": "#9CA3AF", + "content": " ", + "fontFamily": "DM Sans", + "fontSize": 9, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "Pii3V", + "name": "d3", + "width": 44, + "layout": "vertical", + "gap": 2, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "ue39l", + "name": "dc3", + "width": 32, + "height": 32, + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "CHPSF", + "name": "t3", + "fill": "#E5E7EB", + "content": "31", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "text", + "id": "7Or04", + "name": "am3", + "fill": "#9CA3AF", + "content": " ", + "fontFamily": "DM Sans", + "fontSize": 9, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "I7lCG", + "name": "d4", + "width": 44, + "layout": "vertical", + "gap": 2, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "JQoG1", + "name": "dc4", + "width": 32, + "height": 32, + "fill": "#F3F4F6", + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "RPCCr", + "name": "t4", + "fill": "#1A1A1A", + "content": "1", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "gpAZh", + "name": "am4", + "fill": "#9CA3AF", + "content": "128", + "fontFamily": "DM Sans", + "fontSize": 9, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "mXGeX", + "name": "d5", + "width": 44, + "layout": "vertical", + "gap": 2, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "URBQs", + "name": "dc5", + "width": 32, + "height": 32, + "fill": "#F3F4F6", + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "S9S3w", + "name": "t5", + "fill": "#1A1A1A", + "content": "2", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "N52TS", + "name": "am5", + "fill": "#9CA3AF", + "content": "45", + "fontFamily": "DM Sans", + "fontSize": 9, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "loEBf", + "name": "d6", + "width": 44, + "layout": "vertical", + "gap": 2, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "ON05s", + "name": "dc6", + "width": 32, + "height": 32, + "fill": "#F3F4F6", + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "6FPhN", + "name": "t6", + "fill": "#1A1A1A", + "content": "3", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "2UghI", + "name": "am6", + "fill": "#9CA3AF", + "content": "230", + "fontFamily": "DM Sans", + "fontSize": 9, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "1PGUK", + "name": "d7", + "width": 44, + "layout": "vertical", + "gap": 2, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "ned05", + "name": "dc7", + "width": 32, + "height": 32, + "fill": "#F3F4F6", + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "CIR5a", + "name": "t7", + "fill": "#1A1A1A", + "content": "4", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "7BADs", + "name": "am7", + "fill": "#9CA3AF", + "content": "12", + "fontFamily": "DM Sans", + "fontSize": 9, + "fontWeight": "500" + } + ] + } + ] + }, + { + "type": "frame", + "id": "Tz6sw", + "name": "weekRow2", + "width": "fill_container", + "justifyContent": "space_between", + "children": [ + { + "type": "frame", + "id": "v6FYA", + "name": "d8", + "width": 44, + "layout": "vertical", + "gap": 2, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "WrZZI", + "name": "dc8", + "width": 32, + "height": 32, + "fill": "#F3F4F6", + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "UdO3y", + "name": "t8", + "fill": "#1A1A1A", + "content": "5", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "fy2Yh", + "name": "am8", + "fill": "#9CA3AF", + "content": "88", + "fontFamily": "DM Sans", + "fontSize": 9, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "1Oq9t", + "name": "d9", + "width": 44, + "layout": "vertical", + "gap": 2, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "AjEZ8", + "name": "dc9", + "width": 32, + "height": 32, + "fill": "#F3F4F6", + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "qLQsc", + "name": "t9", + "fill": "#1A1A1A", + "content": "6", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "3F9fG", + "name": "am9", + "fill": "#EF4444", + "content": "223", + "fontFamily": "DM Sans", + "fontSize": 9, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "srFBq", + "name": "d10", + "width": 44, + "layout": "vertical", + "gap": 2, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "enmB7", + "name": "dc10", + "width": 32, + "height": 32, + "fill": "#F3F4F6", + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "TfE49", + "name": "t10", + "fill": "#1A1A1A", + "content": "7", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "jCZPU", + "name": "am10", + "fill": "#9CA3AF", + "content": "15", + "fontFamily": "DM Sans", + "fontSize": 9, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "kS4Kf", + "name": "d11", + "width": 44, + "layout": "vertical", + "gap": 2, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "9qTqV", + "name": "dc11", + "width": 32, + "height": 32, + "fill": "#F3F4F6", + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "Wjqtw", + "name": "t11", + "fill": "#1A1A1A", + "content": "8", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "fxn2U", + "name": "am11", + "fill": "#9CA3AF", + "content": "34", + "fontFamily": "DM Sans", + "fontSize": 9, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "f1EBM", + "name": "d12", + "width": 44, + "layout": "vertical", + "gap": 2, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "InU2S", + "name": "dc12", + "width": 32, + "height": 32, + "fill": "#F3F4F6", + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "CSPDo", + "name": "t12", + "fill": "#1A1A1A", + "content": "9", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "NrqQD", + "name": "am12", + "fill": "#9CA3AF", + "content": "120", + "fontFamily": "DM Sans", + "fontSize": 9, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "I1fba", + "name": "d13", + "width": 44, + "layout": "vertical", + "gap": 2, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "EAgBn", + "name": "dc13", + "width": 32, + "height": 32, + "fill": "#F3F4F6", + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "scRqy", + "name": "t13", + "fill": "#1A1A1A", + "content": "10", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "JOjx8", + "name": "am13", + "fill": "#9CA3AF", + "content": "56", + "fontFamily": "DM Sans", + "fontSize": 9, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "JzeYH", + "name": "d14", + "width": 44, + "layout": "vertical", + "gap": 2, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "kk5e3", + "name": "dc14", + "width": 32, + "height": 32, + "fill": "#F3F4F6", + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "451de", + "name": "t14", + "fill": "#1A1A1A", + "content": "11", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "FcKGz", + "name": "am14", + "fill": "#EF4444", + "content": "442", + "fontFamily": "DM Sans", + "fontSize": 9, + "fontWeight": "500" + } + ] + } + ] + }, + { + "type": "frame", + "id": "qeTBg", + "name": "weekRow3", + "width": "fill_container", + "justifyContent": "space_between", + "children": [ + { + "type": "frame", + "id": "QBeoF", + "name": "d15", + "width": 44, + "layout": "vertical", + "gap": 2, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "Y4Kg7", + "name": "dc15", + "width": 32, + "height": 32, + "fill": "#FF6B6B", + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "8SaXC", + "name": "t15", + "fill": "#FFFFFF", + "content": "12", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "700" + } + ] + }, + { + "type": "text", + "id": "uB5CO", + "name": "am15", + "fill": "#FF6B6B", + "content": "88", + "fontFamily": "DM Sans", + "fontSize": 9, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "heNOl", + "name": "d16", + "width": 44, + "layout": "vertical", + "gap": 2, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "CKGtu", + "name": "dc16", + "width": 32, + "height": 32, + "fill": "#F3F4F6", + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "PgD7j", + "name": "t16", + "fill": "#1A1A1A", + "content": "13", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "Ycdcs", + "name": "am16", + "fill": "#9CA3AF", + "content": "12", + "fontFamily": "DM Sans", + "fontSize": 9, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "hFEQc", + "name": "d17", + "width": 44, + "layout": "vertical", + "gap": 2, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "mXxIa", + "name": "dc17", + "width": 32, + "height": 32, + "fill": "#F3F4F6", + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "tCINE", + "name": "t17", + "fill": "#1A1A1A", + "content": "14", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "Lj583", + "name": "am17", + "fill": "#9CA3AF", + "content": " ", + "fontFamily": "DM Sans", + "fontSize": 9, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "XJVek", + "name": "d18", + "width": 44, + "layout": "vertical", + "gap": 2, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "IxLqo", + "name": "dc18", + "width": 32, + "height": 32, + "fill": "#F3F4F6", + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "gwmL4", + "name": "t18", + "fill": "#1A1A1A", + "content": "15", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "bNCuc", + "name": "am18", + "fill": "#9CA3AF", + "content": " ", + "fontFamily": "DM Sans", + "fontSize": 9, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "FPohm", + "name": "d19", + "width": 44, + "layout": "vertical", + "gap": 2, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "TVF3v", + "name": "dc19", + "width": 32, + "height": 32, + "fill": "#F3F4F6", + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "63eTB", + "name": "t19", + "fill": "#1A1A1A", + "content": "16", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "xhfrp", + "name": "am19", + "fill": "#EF4444", + "content": "542", + "fontFamily": "DM Sans", + "fontSize": 9, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "qFLHx", + "name": "d20", + "width": 44, + "layout": "vertical", + "gap": 2, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "wGsmZ", + "name": "dc20", + "width": 32, + "height": 32, + "fill": "#F3F4F6", + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "wNBoF", + "name": "t20", + "fill": "#1A1A1A", + "content": "17", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "dkPzp", + "name": "am20", + "fill": "#9CA3AF", + "content": " ", + "fontFamily": "DM Sans", + "fontSize": 9, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "GTesZ", + "name": "d21", + "width": 44, + "layout": "vertical", + "gap": 2, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "3ophX", + "name": "dc21", + "width": 32, + "height": 32, + "fill": "#F3F4F6", + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "JWTIJ", + "name": "t21", + "fill": "#1A1A1A", + "content": "18", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "N2f1o", + "name": "am21", + "fill": "#9CA3AF", + "content": "56", + "fontFamily": "DM Sans", + "fontSize": 9, + "fontWeight": "500" + } + ] + } + ] + }, + { + "type": "frame", + "id": "BL0GO", + "name": "weekRow4", + "width": "fill_container", + "justifyContent": "space_between", + "children": [ + { + "type": "frame", + "id": "raA89", + "name": "d22", + "width": 44, + "layout": "vertical", + "gap": 2, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "QGMW6", + "name": "dc22", + "width": 32, + "height": 32, + "fill": "#F3F4F6", + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "OX8Sq", + "name": "t22", + "fill": "#1A1A1A", + "content": "19", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "MmNjH", + "name": "am22", + "fill": "#9CA3AF", + "content": " ", + "fontFamily": "DM Sans", + "fontSize": 9, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "3fEct", + "name": "d23", + "width": 44, + "layout": "vertical", + "gap": 2, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "JFV6n", + "name": "dc23", + "width": 32, + "height": 32, + "fill": "#F3F4F6", + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "A4z3Z", + "name": "t23", + "fill": "#1A1A1A", + "content": "20", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "75jXV", + "name": "am23", + "fill": "#9CA3AF", + "content": " ", + "fontFamily": "DM Sans", + "fontSize": 9, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "YhsCg", + "name": "d24", + "width": 44, + "layout": "vertical", + "gap": 2, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "4bAao", + "name": "dc24", + "width": 32, + "height": 32, + "fill": "#F3F4F6", + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "JtMNu", + "name": "t24", + "fill": "#1A1A1A", + "content": "21", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "uK3E1", + "name": "am24", + "fill": "#9CA3AF", + "content": " ", + "fontFamily": "DM Sans", + "fontSize": 9, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "f8Paa", + "name": "d25", + "width": 44, + "layout": "vertical", + "gap": 2, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "0ePSV", + "name": "dc25", + "width": 32, + "height": 32, + "fill": "#F3F4F6", + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "ObCLU", + "name": "t25", + "fill": "#1A1A1A", + "content": "22", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "kC1um", + "name": "am25", + "fill": "#9CA3AF", + "content": "125", + "fontFamily": "DM Sans", + "fontSize": 9, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "XVmli", + "name": "d26", + "width": 44, + "layout": "vertical", + "gap": 2, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "XCBcY", + "name": "dc26", + "width": 32, + "height": 32, + "fill": "#F3F4F6", + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "kP95q", + "name": "t26", + "fill": "#1A1A1A", + "content": "23", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "RK4Ry", + "name": "am26", + "fill": "#9CA3AF", + "content": " ", + "fontFamily": "DM Sans", + "fontSize": 9, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "vL4sE", + "name": "d27", + "width": 44, + "layout": "vertical", + "gap": 2, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "tP6nn", + "name": "dc27", + "width": 32, + "height": 32, + "fill": "#F3F4F6", + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "VrxS3", + "name": "t27", + "fill": "#1A1A1A", + "content": "24", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "mvwdI", + "name": "am27", + "fill": "#9CA3AF", + "content": " ", + "fontFamily": "DM Sans", + "fontSize": 9, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "nx6xt", + "name": "d28", + "width": 44, + "layout": "vertical", + "gap": 2, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "gUQjY", + "name": "dc28", + "width": 32, + "height": 32, + "fill": "#F3F4F6", + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "ro5rV", + "name": "t28", + "fill": "#1A1A1A", + "content": "25", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "xXWh0", + "name": "am28", + "fill": "#9CA3AF", + "content": " ", + "fontFamily": "DM Sans", + "fontSize": 9, + "fontWeight": "500" + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "vfW2m", + "name": "stats", + "width": "fill_container", + "layout": "vertical", + "gap": 16, + "padding": 24, + "children": [ + { + "type": "frame", + "id": "ycEV7", + "name": "statsHeader", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "LMdOg", + "name": "statsTitle", + "fill": "#1A1A1A", + "content": "每日统计", + "fontFamily": "Bricolage Grotesque", + "fontSize": 18, + "fontWeight": "700" + }, + { + "type": "text", + "id": "1TSK3", + "name": "statsDate", + "fill": "#6B7280", + "content": "2026年1月12日", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "JY4Fd", + "name": "statsCard", + "width": "fill_container", + "fill": "#F6F7F8", + "cornerRadius": 20, + "layout": "vertical", + "gap": 12, + "padding": 20, + "children": [ + { + "type": "frame", + "id": "UiJYD", + "name": "statsRow", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "QBHWG", + "name": "statsLabel", + "fill": "#6B7280", + "content": "Total Spent", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "500" + }, + { + "type": "frame", + "id": "6TcZ1", + "name": "b1", + "fill": "#FFFBEB", + "cornerRadius": 12, + "padding": [ + 6, + 10 + ], + "children": [ + { + "type": "text", + "id": "znYtx", + "name": "t29", + "fill": "#D97706", + "content": "Daily Limit: 2500", + "fontFamily": "DM Sans", + "fontSize": 11, + "fontWeight": "600" + } + ] + } + ] + }, + { + "type": "text", + "id": "nNirO", + "name": "statsVal", + "fill": "#1A1A1A", + "content": "¥ 1,248.50", + "fontFamily": "Bricolage Grotesque", + "fontSize": 32, + "fontWeight": "800" + } + ] + } + ] + }, + { + "type": "frame", + "id": "zIeUQ", + "name": "txnList", + "width": "fill_container", + "layout": "vertical", + "gap": 12, + "padding": 24, + "children": [ + { + "type": "frame", + "id": "eL4ER", + "name": "txnHeader", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "78oRL", + "name": "txnTitle", + "fill": "#1A1A1A", + "content": "交易记录", + "fontFamily": "Bricolage Grotesque", + "fontSize": 18, + "fontWeight": "700" + }, + { + "type": "frame", + "id": "QEbB1", + "name": "rightActions", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "2qH3a", + "name": "b2", + "fill": "#F0FDF4", + "cornerRadius": 12, + "padding": [ + 6, + 12 + ], + "children": [ + { + "type": "text", + "id": "DkXPS", + "name": "t30", + "fill": "#22C55E", + "content": "3 Items", + "fontFamily": "DM Sans", + "fontSize": 12, + "fontWeight": "600" + } + ] + }, + { + "type": "frame", + "id": "NnlVI", + "name": "smartBtn", + "fill": "#E0E7FF", + "cornerRadius": 12, + "gap": 6, + "padding": [ + 6, + 12 + ], + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "3soq6", + "name": "iconSmart", + "width": 14, + "height": 14, + "iconFontName": "sparkles", + "iconFontFamily": "lucide", + "fill": "#6366F1" + }, + { + "type": "text", + "id": "nbGbR", + "name": "labelSmart", + "fill": "#6366F1", + "content": "Smart", + "fontFamily": "DM Sans", + "fontSize": 12, + "fontWeight": "600" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "5H1y6", + "name": "tCard1", + "width": "fill_container", + "fill": "#F6F7F8", + "cornerRadius": 16, + "gap": 14, + "padding": 16, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "jJBQ3", + "name": "tCat1", + "width": 44, + "height": 44, + "fill": "#FFFFFF", + "cornerRadius": 22, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "99rCw", + "name": "icon2", + "width": 20, + "height": 20, + "iconFontName": "star", + "iconFontFamily": "lucide", + "fill": "#FF6B6B" + } + ] + }, + { + "type": "frame", + "id": "1R9if", + "name": "tContent1", + "width": "fill_container", + "layout": "vertical", + "gap": 2, + "children": [ + { + "type": "text", + "id": "tD6vR", + "name": "tName1", + "fill": "#1A1A1A", + "content": "Lunch", + "fontFamily": "DM Sans", + "fontSize": 15, + "fontWeight": "600" + }, + { + "type": "text", + "id": "PmzGy", + "name": "tTime1", + "fill": "#9CA3AF", + "content": "12:30 PM", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "text", + "id": "0u2rh", + "name": "tAmount1", + "fill": "#1A1A1A", + "content": "-58.00", + "fontFamily": "DM Sans", + "fontSize": 15, + "fontWeight": "700" + } + ] + }, + { + "type": "frame", + "id": "GgQ7u", + "name": "tCard2", + "width": "fill_container", + "fill": "#F6F7F8", + "cornerRadius": 16, + "gap": 14, + "padding": 16, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "HVEFt", + "name": "tCat2", + "width": 44, + "height": 44, + "fill": "#FFFFFF", + "cornerRadius": 22, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "CiSSG", + "name": "icon3", + "width": 20, + "height": 20, + "iconFontName": "coffee", + "iconFontFamily": "lucide", + "fill": "#FCD34D" + } + ] + }, + { + "type": "frame", + "id": "4Bu2K", + "name": "tContent2", + "width": "fill_container", + "layout": "vertical", + "gap": 2, + "children": [ + { + "type": "text", + "id": "WeLFp", + "name": "tName2", + "fill": "#1A1A1A", + "content": "Coffee", + "fontFamily": "DM Sans", + "fontSize": 15, + "fontWeight": "600" + }, + { + "type": "text", + "id": "MpyeL", + "name": "tTime2", + "fill": "#9CA3AF", + "content": "08:15 AM", + "fontFamily": "DM Sans", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "text", + "id": "jUaEO", + "name": "tAmount2", + "fill": "#1A1A1A", + "content": "-24.50", + "fontFamily": "DM Sans", + "fontSize": 15, + "fontWeight": "700" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "SNGbj", + "x": -538, + "y": 369, + "name": "Statistics Dark", + "clip": true, + "width": 402, + "fill": "#0F0F0F", + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "Ne4V3", + "name": "contentWrapper", + "width": "fill_container", + "layout": "vertical", + "gap": 24, + "padding": 24, + "children": [ + { + "type": "frame", + "id": "S2B4K", + "name": "periodSection", + "width": "fill_container", + "layout": "vertical", + "gap": 16, + "children": [ + { + "type": "frame", + "id": "aMTNG", + "name": "segmentControl", + "width": "fill_container", + "height": 44, + "fill": "#1A1A1A", + "cornerRadius": 8, + "gap": 4, + "padding": 4, + "children": [ + { + "type": "frame", + "id": "GcWPV", + "name": "daySegment", + "width": "fill_container", + "height": "fill_container", + "fill": "#2A2A2A", + "cornerRadius": 6, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "yjM7I", + "name": "dayLabel", + "fill": "#1A1A1A", + "content": "日", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "600" + } + ] + }, + { + "type": "frame", + "id": "iXgdY", + "name": "weekSegment", + "width": "fill_container", + "height": "fill_container", + "fill": "#1A1A1A", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "KSuk0", + "name": "weekLabel", + "fill": "#888888", + "content": "周", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "sVB0J", + "name": "monthSegment", + "width": "fill_container", + "height": "fill_container", + "fill": "#1A1A1A", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "2PpIp", + "name": "monthLabel", + "fill": "#888888", + "content": "月", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "500" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "eRNCW", + "name": "metricsSection", + "width": "fill_container", + "layout": "vertical", + "gap": 16, + "children": [ + { + "type": "text", + "id": "REhdK", + "name": "metricsHeader", + "fill": "#888888", + "content": "核心指标", + "fontFamily": "JetBrains Mono", + "fontSize": 11, + "fontWeight": "600", + "letterSpacing": 2 + }, + { + "type": "frame", + "id": "rRNpr", + "name": "metricsRow", + "width": "fill_container", + "gap": 16, + "children": [ + { + "type": "frame", + "id": "gzLwV", + "name": "card1", + "width": "fill_container", + "height": 146, + "fill": "#1A1A1A", + "cornerRadius": 12, + "stroke": { + "thickness": 1, + "fill": "#2A2A2A" + }, + "layout": "vertical", + "gap": 12, + "padding": 20, + "justifyContent": "space_between", + "children": [ + { + "type": "frame", + "id": "blVoz", + "name": "card1Top", + "width": "fill_container", + "layout": "vertical", + "gap": 12, + "children": [ + { + "type": "frame", + "id": "9MqCU", + "name": "card1Header", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "MbMbz", + "name": "card1Label", + "fill": "#888888", + "content": "总支出", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "500" + }, + { + "type": "text", + "id": "8ceLw", + "name": "card1Badge", + "fill": "#E07B54", + "content": "-15%", + "fontFamily": "JetBrains Mono", + "fontSize": 10, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "yAPmi", + "name": "card1Value", + "fill": "#1A1A1A", + "content": "¥1,248.50", + "lineHeight": 0.85, + "fontFamily": "JetBrains Mono", + "fontSize": 32, + "fontWeight": "700" + } + ] + }, + { + "type": "text", + "id": "N1Qt4", + "name": "card1Bottom", + "fill": "#666666", + "content": "较上期减少", + "fontFamily": "Newsreader", + "fontSize": 13, + "fontWeight": "normal", + "fontStyle": "italic" + } + ] + }, + { + "type": "frame", + "id": "eiGbX", + "name": "card2", + "width": "fill_container", + "height": 146, + "fill": "#1A1A1A", + "cornerRadius": 12, + "stroke": { + "thickness": 1, + "fill": "#2A2A2A" + }, + "layout": "vertical", + "gap": 12, + "padding": 20, + "justifyContent": "space_between", + "children": [ + { + "type": "frame", + "id": "2LWDK", + "name": "card2Top", + "width": "fill_container", + "layout": "vertical", + "gap": 12, + "children": [ + { + "type": "frame", + "id": "LEFHn", + "name": "card2Header", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "cpuUR", + "name": "card2Label", + "fill": "#888888", + "content": "交易笔数", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "500" + }, + { + "type": "text", + "id": "Kaya5", + "name": "card2Badge", + "fill": "#0D6E6E", + "content": "+8", + "fontFamily": "JetBrains Mono", + "fontSize": 10, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "cwcBx", + "name": "card2Value", + "fill": "#1A1A1A", + "content": "127", + "lineHeight": 0.85, + "fontFamily": "JetBrains Mono", + "fontSize": 32, + "fontWeight": "700" + } + ] + }, + { + "type": "frame", + "id": "Ps49o", + "name": "card2Bottom", + "width": "fill_container", + "height": 24, + "gap": 3, + "alignItems": "end", + "children": [ + { + "type": "rectangle", + "cornerRadius": 2, + "id": "BJ6jY", + "name": "bar1", + "fill": "#E5E5E5", + "width": "fill_container", + "height": 8 + }, + { + "type": "rectangle", + "cornerRadius": 2, + "id": "nRTiE", + "name": "bar2", + "fill": "#E5E5E5", + "width": "fill_container", + "height": 12 + }, + { + "type": "rectangle", + "cornerRadius": 2, + "id": "xGdPL", + "name": "bar3", + "fill": "#E5E5E5", + "width": "fill_container", + "height": 16 + }, + { + "type": "rectangle", + "cornerRadius": 2, + "id": "Ui6Yh", + "name": "bar4", + "fill": "#E5E5E5", + "width": "fill_container", + "height": 14 + }, + { + "type": "rectangle", + "cornerRadius": 2, + "id": "W6JsE", + "name": "bar5", + "fill": "#E5E5E5", + "width": "fill_container", + "height": 20 + }, + { + "type": "rectangle", + "cornerRadius": 2, + "id": "jey1R", + "name": "bar6", + "fill": "#E5E5E5", + "width": "fill_container", + "height": 18 + }, + { + "type": "rectangle", + "cornerRadius": 2, + "id": "9qTWP", + "name": "bar7", + "fill": "#0D6E6E", + "width": "fill_container", + "height": 24 + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "kuG9h", + "name": "incomeRow", + "width": "fill_container", + "gap": 16, + "children": [ + { + "type": "frame", + "id": "0JHPv", + "name": "incomeCard", + "width": "fill_container", + "height": 146, + "fill": "#1A1A1A", + "cornerRadius": 12, + "stroke": { + "thickness": 1, + "fill": "#2A2A2A" + }, + "layout": "vertical", + "gap": 12, + "padding": 20, + "justifyContent": "space_between", + "children": [ + { + "type": "frame", + "id": "d6TLE", + "name": "incomeTop", + "width": "fill_container", + "layout": "vertical", + "gap": 12, + "children": [ + { + "type": "frame", + "id": "N1n4g", + "name": "incomeHeader", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "CuedQ", + "name": "incomeLabel", + "fill": "#888888", + "content": "总收入", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "500" + }, + { + "type": "text", + "id": "i3Mpg", + "name": "incomeBadge", + "fill": "#0D6E6E", + "content": "+2", + "fontFamily": "JetBrains Mono", + "fontSize": 10, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "Vk4jR", + "name": "incomeValue", + "fill": "#0D6E6E", + "content": "¥3,200", + "lineHeight": 0.85, + "fontFamily": "JetBrains Mono", + "fontSize": 32, + "fontWeight": "700" + } + ] + }, + { + "type": "text", + "id": "hKOg2", + "name": "incomeBottom", + "fill": "#666666", + "content": "工资、红包等", + "fontFamily": "Newsreader", + "fontSize": 13, + "fontWeight": "normal", + "fontStyle": "italic" + } + ] + }, + { + "type": "frame", + "id": "DwFMn", + "name": "balanceCard", + "width": "fill_container", + "height": 146, + "fill": "#1A1A1A", + "cornerRadius": 12, + "stroke": { + "thickness": 1, + "fill": "#2A2A2A" + }, + "layout": "vertical", + "gap": 12, + "padding": 20, + "justifyContent": "space_between", + "children": [ + { + "type": "frame", + "id": "hZw8Y", + "name": "balanceTop", + "width": "fill_container", + "layout": "vertical", + "gap": 12, + "children": [ + { + "type": "frame", + "id": "If37j", + "name": "balanceHeader", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "MbbIn", + "name": "balanceLabel", + "fill": "#888888", + "content": "净收支", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "500" + }, + { + "type": "icon_font", + "id": "Up2rP", + "name": "balanceIcon", + "width": 16, + "height": 16, + "iconFontName": "trending-up", + "iconFontFamily": "lucide", + "fill": "#0D6E6E" + } + ] + }, + { + "type": "text", + "id": "pV54w", + "name": "balanceValue", + "fill": "#0D6E6E", + "content": "+¥1,951.50", + "lineHeight": 0.85, + "fontFamily": "JetBrains Mono", + "fontSize": 32, + "fontWeight": "700" + } + ] + }, + { + "type": "frame", + "id": "tDVfb", + "name": "balanceBottom", + "width": "fill_container", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "ellipse", + "id": "Cog7D", + "name": "balanceCircle", + "fill": "#0D6E6E", + "width": 8, + "height": 8 + }, + { + "type": "text", + "id": "4FyE8", + "name": "balanceDesc", + "fill": "#666666", + "content": "收入大于支出", + "fontFamily": "Newsreader", + "fontSize": 13, + "fontWeight": "normal", + "fontStyle": "italic" + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "WlDc7", + "name": "categorySection", + "width": "fill_container", + "layout": "vertical", + "gap": 16, + "children": [ + { + "type": "frame", + "id": "lB56E", + "name": "categoryHeader", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "PGCma", + "name": "categoryLabel", + "fill": "#888888", + "content": "分类支出", + "fontFamily": "JetBrains Mono", + "fontSize": 11, + "fontWeight": "600", + "letterSpacing": 2 + }, + { + "type": "frame", + "id": "Buslb", + "name": "categoryLink", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "DSq5h", + "name": "linkText", + "fill": "#0D6E6E", + "content": "查看全部", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "500" + }, + { + "type": "icon_font", + "id": "LCRZw", + "name": "linkIcon", + "width": 16, + "height": 16, + "iconFontName": "arrow-right", + "iconFontFamily": "lucide", + "fill": "#0D6E6E" + } + ] + } + ] + }, + { + "type": "frame", + "id": "YCfml", + "name": "categoryCard", + "width": "fill_container", + "fill": "#1A1A1A", + "cornerRadius": 12, + "stroke": { + "thickness": 1, + "fill": "#2A2A2A" + }, + "layout": "vertical", + "gap": 16, + "padding": 20, + "children": [ + { + "type": "frame", + "id": "smukQ", + "name": "catRow1", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "BOwbE", + "name": "cat1Left", + "gap": 12, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "xzE05", + "name": "cat1Icon", + "width": 40, + "height": 40, + "fill": "#0D6E6E15", + "cornerRadius": 10, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "GN2eX", + "name": "cat1IconSym", + "width": 20, + "height": 20, + "iconFontName": "utensils", + "iconFontFamily": "lucide", + "fill": "#0D6E6E" + } + ] + }, + { + "type": "frame", + "id": "sood7", + "name": "cat1Info", + "layout": "vertical", + "gap": 2, + "children": [ + { + "type": "text", + "id": "PwM2t", + "name": "cat1Name", + "fill": "#1A1A1A", + "content": "餐饮美食", + "fontFamily": "Newsreader", + "fontSize": 16, + "fontWeight": "500" + }, + { + "type": "text", + "id": "FYYrX", + "name": "cat1Count", + "fill": "#888888", + "content": "32笔交易", + "fontFamily": "JetBrains Mono", + "fontSize": 11, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "text", + "id": "cHFM8", + "name": "cat1Amount", + "fill": "#1A1A1A", + "content": "¥486.50", + "fontFamily": "JetBrains Mono", + "fontSize": 16, + "fontWeight": "600" + } + ] + }, + { + "type": "rectangle", + "id": "03fSF", + "name": "divider1", + "fill": "#2A2A2A", + "width": "fill_container", + "height": 1 + }, + { + "type": "frame", + "id": "F7dYQ", + "name": "catRow2", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "c7YYD", + "name": "cat2Left", + "gap": 12, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "iD8Sn", + "name": "cat2Icon", + "width": 40, + "height": 40, + "fill": "#E07B5415", + "cornerRadius": 10, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "y30Px", + "name": "cat2IconSym", + "width": 20, + "height": 20, + "iconFontName": "shopping-cart", + "iconFontFamily": "lucide", + "fill": "#E07B54" + } + ] + }, + { + "type": "frame", + "id": "9D72D", + "name": "cat2Info", + "layout": "vertical", + "gap": 2, + "children": [ + { + "type": "text", + "id": "eYYED", + "name": "cat2Name", + "fill": "#1A1A1A", + "content": "购物消费", + "fontFamily": "Newsreader", + "fontSize": 16, + "fontWeight": "500" + }, + { + "type": "text", + "id": "diPzi", + "name": "cat2Count", + "fill": "#888888", + "content": "18笔交易", + "fontFamily": "JetBrains Mono", + "fontSize": 11, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "text", + "id": "Mv7iS", + "name": "cat2Amount", + "fill": "#1A1A1A", + "content": "¥324.80", + "fontFamily": "JetBrains Mono", + "fontSize": 16, + "fontWeight": "600" + } + ] + }, + { + "type": "rectangle", + "id": "GkSAw", + "name": "divider2", + "fill": "#2A2A2A", + "width": "fill_container", + "height": 1 + }, + { + "type": "frame", + "id": "AIgT8", + "name": "catRow3", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "9jWrK", + "name": "cat3Left", + "gap": 12, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "wAJ8N", + "name": "cat3Icon", + "width": 40, + "height": 40, + "fill": "#88888815", + "cornerRadius": 10, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "Rw9Zw", + "name": "cat3IconSym", + "width": 20, + "height": 20, + "iconFontName": "car", + "iconFontFamily": "lucide", + "fill": "#888888" + } + ] + }, + { + "type": "frame", + "id": "pwPQl", + "name": "cat3Info", + "layout": "vertical", + "gap": 2, + "children": [ + { + "type": "text", + "id": "ImCqZ", + "name": "cat3Name", + "fill": "#1A1A1A", + "content": "交通出行", + "fontFamily": "Newsreader", + "fontSize": 16, + "fontWeight": "500" + }, + { + "type": "text", + "id": "D4LiL", + "name": "cat3Count", + "fill": "#888888", + "content": "24笔交易", + "fontFamily": "JetBrains Mono", + "fontSize": 11, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "text", + "id": "3wuUv", + "name": "cat3Amount", + "fill": "#1A1A1A", + "content": "¥187.20", + "fontFamily": "JetBrains Mono", + "fontSize": 16, + "fontWeight": "600" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "5Y9IO", + "name": "trendSection", + "width": "fill_container", + "layout": "vertical", + "gap": 16, + "children": [ + { + "type": "frame", + "id": "RUR1j", + "name": "trendHeader", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "2rRGK", + "name": "trendLabel", + "fill": "#888888", + "content": "支出趋势", + "fontFamily": "JetBrains Mono", + "fontSize": 11, + "fontWeight": "600", + "letterSpacing": 2 + }, + { + "type": "frame", + "id": "DoySY", + "name": "trendPercent", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "owHq2", + "name": "percentValue", + "fill": "#1A1A1A", + "content": "86", + "fontFamily": "JetBrains Mono", + "fontSize": 28, + "fontWeight": "700" + }, + { + "type": "text", + "id": "RHN2S", + "name": "percentSign", + "fill": "#888888", + "content": "%", + "fontFamily": "JetBrains Mono", + "fontSize": 14, + "fontWeight": "500" + } + ] + } + ] + }, + { + "type": "rectangle", + "id": "jseUG", + "name": "hrLine", + "fill": "#2A2A2A", + "width": "fill_container", + "height": 1 + }, + { + "type": "frame", + "id": "4xrJ0", + "name": "trendCard", + "width": "fill_container", + "fill": "#1A1A1A", + "cornerRadius": 12, + "stroke": { + "thickness": 1, + "fill": "#2A2A2A" + }, + "layout": "vertical", + "gap": 16, + "padding": 20, + "children": [ + { + "type": "frame", + "id": "pBKSz", + "name": "weekChart", + "width": "fill_container", + "height": 80, + "justifyContent": "space_between", + "alignItems": "end", + "children": [ + { + "type": "frame", + "id": "eX19l", + "name": "day1Col", + "layout": "vertical", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "j1Gsc", + "name": "day1Bar", + "width": 32, + "height": 60, + "fill": "#F0F0F0", + "cornerRadius": 4, + "justifyContent": "end", + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": 4, + "id": "icOhJ", + "name": "day1Fill", + "fill": "#0D6E6E", + "width": "fill_container", + "height": 42 + } + ] + }, + { + "type": "text", + "id": "3o3SE", + "name": "day1Label", + "fill": "#888888", + "content": "一", + "fontFamily": "JetBrains Mono", + "fontSize": 11, + "fontWeight": "600" + } + ] + }, + { + "type": "frame", + "id": "dSWac", + "name": "day2Col", + "layout": "vertical", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "HfP3M", + "name": "day2Bar", + "width": 32, + "height": 60, + "fill": "#F0F0F0", + "cornerRadius": 4, + "justifyContent": "end", + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": 4, + "id": "HOFPd", + "name": "day2Fill", + "fill": "#0D6E6E", + "width": "fill_container", + "height": 48 + } + ] + }, + { + "type": "text", + "id": "owYO0", + "name": "day2Label", + "fill": "#888888", + "content": "二", + "fontFamily": "JetBrains Mono", + "fontSize": 11, + "fontWeight": "600" + } + ] + }, + { + "type": "frame", + "id": "RiZ7L", + "name": "day3Col", + "layout": "vertical", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "mFjvc", + "name": "day3Bar", + "width": 32, + "height": 60, + "fill": "#F0F0F0", + "cornerRadius": 4, + "justifyContent": "end", + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": 4, + "id": "ZT5zP", + "name": "day3Fill", + "fill": "#0D6E6E", + "width": "fill_container", + "height": 36 + } + ] + }, + { + "type": "text", + "id": "gnymK", + "name": "day3Label", + "fill": "#888888", + "content": "三", + "fontFamily": "JetBrains Mono", + "fontSize": 11, + "fontWeight": "600" + } + ] + }, + { + "type": "frame", + "id": "kikrs", + "name": "day4Col", + "layout": "vertical", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "o8Ops", + "name": "day4Bar", + "width": 32, + "height": 60, + "fill": "#F0F0F0", + "cornerRadius": 4, + "justifyContent": "end", + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": 4, + "id": "an8NN", + "name": "day4Fill", + "fill": "#0D6E6E", + "width": "fill_container", + "height": 52 + } + ] + }, + { + "type": "text", + "id": "JUkjU", + "name": "day4Label", + "fill": "#888888", + "content": "四", + "fontFamily": "JetBrains Mono", + "fontSize": 11, + "fontWeight": "600" + } + ] + }, + { + "type": "frame", + "id": "VLzOR", + "name": "day5Col", + "layout": "vertical", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "bQgJe", + "name": "day5Bar", + "width": 32, + "height": 60, + "fill": "#F0F0F0", + "cornerRadius": 4, + "justifyContent": "end", + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": 4, + "id": "2AgUH", + "name": "day5Fill", + "fill": "#0D6E6E", + "width": "fill_container", + "height": 44 + } + ] + }, + { + "type": "text", + "id": "qOQ4p", + "name": "day5Label", + "fill": "#888888", + "content": "五", + "fontFamily": "JetBrains Mono", + "fontSize": 11, + "fontWeight": "600" + } + ] + }, + { + "type": "frame", + "id": "MPgAT", + "name": "day6Col", + "layout": "vertical", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "7G3ar", + "name": "day6Bar", + "width": 32, + "height": 60, + "fill": "#F0F0F0", + "cornerRadius": 4, + "justifyContent": "end", + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": 4, + "id": "fzBSL", + "name": "day6Fill", + "fill": "#E07B54", + "width": "fill_container", + "height": 56 + } + ] + }, + { + "type": "text", + "id": "gGSUR", + "name": "day6Label", + "fill": "#E07B54", + "content": "六", + "fontFamily": "JetBrains Mono", + "fontSize": 11, + "fontWeight": "700" + } + ] + }, + { + "type": "frame", + "id": "TeAAb", + "name": "day7Col", + "layout": "vertical", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "nczaG", + "name": "day7Bar", + "width": 32, + "height": 60, + "fill": "#F0F0F0", + "cornerRadius": 4, + "justifyContent": "end", + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": 4, + "id": "lQQkB", + "name": "day7Fill", + "fill": "#CCCCCC", + "width": "fill_container", + "height": 0 + } + ] + }, + { + "type": "text", + "id": "6A1gG", + "name": "day7Label", + "fill": "#CCCCCC", + "content": "日", + "fontFamily": "JetBrains Mono", + "fontSize": 11, + "fontWeight": "600" + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "o7KQR", + "name": "budgetSection", + "width": "fill_container", + "layout": "vertical", + "gap": 16, + "children": [ + { + "type": "frame", + "id": "qyU0F", + "name": "budgetHeader", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "TNee1", + "name": "budgetLabel", + "fill": "#888888", + "content": "预算使用", + "fontFamily": "JetBrains Mono", + "fontSize": 11, + "fontWeight": "600", + "letterSpacing": 2 + }, + { + "type": "frame", + "id": "xDdF3", + "name": "budgetLink", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "hsFsL", + "name": "budgetLinkText", + "fill": "#0D6E6E", + "content": "管理预算", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "500" + }, + { + "type": "icon_font", + "id": "X3FVP", + "name": "budgetLinkIcon", + "width": 16, + "height": 16, + "iconFontName": "arrow-right", + "iconFontFamily": "lucide", + "fill": "#0D6E6E" + } + ] + } + ] + }, + { + "type": "frame", + "id": "lTC30", + "name": "budgetCard", + "width": "fill_container", + "fill": "#1A1A1A", + "cornerRadius": 12, + "stroke": { + "thickness": 1, + "fill": "#2A2A2A" + }, + "layout": "vertical", + "gap": 16, + "padding": 20, + "children": [ + { + "type": "frame", + "id": "yGTsJ", + "name": "budgetRow1", + "width": "fill_container", + "layout": "vertical", + "gap": 8, + "children": [ + { + "type": "frame", + "id": "hGg0o", + "name": "budget1Header", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "lahdF", + "name": "budget1Name", + "fill": "#1A1A1A", + "content": "餐饮预算", + "fontFamily": "Newsreader", + "fontSize": 16, + "fontWeight": "500" + }, + { + "type": "frame", + "id": "sFvuo", + "name": "budget1Stats", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "PlfTc", + "name": "budget1Current", + "fill": "#1A1A1A", + "content": "¥486.50", + "fontFamily": "JetBrains Mono", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "text", + "id": "EEz17", + "name": "budget1Separator", + "fill": "#CCCCCC", + "content": "/", + "fontFamily": "JetBrains Mono", + "fontSize": 14, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "vjUSm", + "name": "budget1Limit", + "fill": "#888888", + "content": "¥800", + "fontFamily": "JetBrains Mono", + "fontSize": 14, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "9OO3J", + "name": "budget1Progress", + "width": "fill_container", + "height": 8, + "fill": "#F0F0F0", + "cornerRadius": 4, + "children": [ + { + "type": "rectangle", + "cornerRadius": 4, + "id": "cP0JF", + "name": "budget1Fill", + "fill": "#0D6E6E", + "width": "fit_content(0)", + "height": "fill_container" + } + ] + } + ] + }, + { + "type": "rectangle", + "id": "hosNk", + "name": "dividerBudget1", + "fill": "#2A2A2A", + "width": "fill_container", + "height": 1 + }, + { + "type": "frame", + "id": "SWb0B", + "name": "budgetRow2", + "width": "fill_container", + "layout": "vertical", + "gap": 8, + "children": [ + { + "type": "frame", + "id": "fUy3x", + "name": "budget2Header", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "9kPuT", + "name": "budget2Name", + "fill": "#1A1A1A", + "content": "购物预算", + "fontFamily": "Newsreader", + "fontSize": 16, + "fontWeight": "500" + }, + { + "type": "frame", + "id": "TA08z", + "name": "budget2Stats", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "vcOPi", + "name": "budget2Current", + "fill": "#1A1A1A", + "content": "¥324.80", + "fontFamily": "JetBrains Mono", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "text", + "id": "OtoDw", + "name": "budget2Separator", + "fill": "#CCCCCC", + "content": "/", + "fontFamily": "JetBrains Mono", + "fontSize": 14, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "pvuCY", + "name": "budget2Limit", + "fill": "#888888", + "content": "¥500", + "fontFamily": "JetBrains Mono", + "fontSize": 14, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "UHVdS", + "name": "budget2Progress", + "width": "fill_container", + "height": 8, + "fill": "#F0F0F0", + "cornerRadius": 4, + "children": [ + { + "type": "rectangle", + "cornerRadius": 4, + "id": "brzAn", + "name": "budget2Fill", + "fill": "#0D6E6E", + "width": "fit_content(0)", + "height": "fill_container" + } + ] + } + ] + }, + { + "type": "rectangle", + "id": "Smd3M", + "name": "dividerBudget2", + "fill": "#2A2A2A", + "width": "fill_container", + "height": 1 + }, + { + "type": "frame", + "id": "oesDd", + "name": "budgetRow3", + "width": "fill_container", + "layout": "vertical", + "gap": 8, + "children": [ + { + "type": "frame", + "id": "luQLm", + "name": "budget3Header", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "vLrts", + "name": "budget3Name", + "fill": "#1A1A1A", + "content": "交通预算", + "fontFamily": "Newsreader", + "fontSize": 16, + "fontWeight": "500" + }, + { + "type": "frame", + "id": "h6em3", + "name": "budget3Stats", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "Rd3K0", + "name": "budget3Current", + "fill": "#1A1A1A", + "content": "¥187.20", + "fontFamily": "JetBrains Mono", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "text", + "id": "w41uC", + "name": "budget3Separator", + "fill": "#CCCCCC", + "content": "/", + "fontFamily": "JetBrains Mono", + "fontSize": 14, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "FO1ni", + "name": "budget3Limit", + "fill": "#888888", + "content": "¥300", + "fontFamily": "JetBrains Mono", + "fontSize": 14, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "i69zI", + "name": "budget3Progress", + "width": "fill_container", + "height": 8, + "fill": "#F0F0F0", + "cornerRadius": 4, + "children": [ + { + "type": "rectangle", + "cornerRadius": 4, + "id": "7Wqfo", + "name": "budget3Fill", + "fill": "#0D6E6E", + "width": "fit_content(0)", + "height": "fill_container" + } + ] + } + ] + }, + { + "type": "rectangle", + "id": "QVVZp", + "name": "dividerBudget3", + "fill": "#2A2A2A", + "width": "fill_container", + "height": 1 + }, + { + "type": "frame", + "id": "2lMDf", + "name": "budgetRow4", + "width": "fill_container", + "layout": "vertical", + "gap": 8, + "children": [ + { + "type": "frame", + "id": "fLjAV", + "name": "budget4Header", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "aV4TW", + "name": "budget4Name", + "fill": "#1A1A1A", + "content": "月度总预算", + "fontFamily": "Newsreader", + "fontSize": 16, + "fontWeight": "500" + }, + { + "type": "frame", + "id": "HU972", + "name": "budget4Stats", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "MVaQV", + "name": "budget4Current", + "fill": "#E07B54", + "content": "¥1,248.50", + "fontFamily": "JetBrains Mono", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "text", + "id": "QBuB5", + "name": "budget4Separator", + "fill": "#CCCCCC", + "content": "/", + "fontFamily": "JetBrains Mono", + "fontSize": 14, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "KF5Xu", + "name": "budget4Limit", + "fill": "#888888", + "content": "¥2,500", + "fontFamily": "JetBrains Mono", + "fontSize": 14, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "ZCnLU", + "name": "budget4Progress", + "width": "fill_container", + "height": 8, + "fill": "#F0F0F0", + "cornerRadius": 4, + "children": [ + { + "type": "rectangle", + "cornerRadius": 4, + "id": "8bKDB", + "name": "budget4Fill", + "fill": "#0D6E6E", + "width": "fit_content(0)", + "height": "fill_container" + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "BCxxA", + "x": -36, + "y": 369, + "name": "Budget Stats (Light)", + "width": 402, + "fill": "#FFFFFF", + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "LXM6A", + "name": "navbar", + "width": "fill_container", + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "4R8MH", + "name": "navTop", + "width": "fill_container", + "padding": [ + 12, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "5kBJY", + "name": "dateBtn", + "fill": "#F5F5F5", + "cornerRadius": 8, + "gap": 4, + "padding": [ + 6, + 12 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "N6BSi", + "name": "dateText", + "fill": "#18181B", + "content": "2026年1月", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "500" + }, + { + "type": "icon_font", + "id": "wSRWZ", + "name": "dateIcon", + "width": 16, + "height": 16, + "iconFontName": "chevron-down", + "iconFontFamily": "lucide", + "fill": "#71717A" + } + ] + } + ] + }, + { + "type": "frame", + "id": "SRWHt", + "name": "tabs", + "width": "fill_container", + "fill": "#F0F0F0", + "cornerRadius": 8, + "gap": 4, + "padding": 4, + "children": [ + { + "type": "frame", + "id": "3NS3r", + "name": "tab1", + "width": "fill_container", + "fill": "#FFFFFF", + "cornerRadius": 6, + "padding": [ + 8, + 16 + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "gTGQU", + "name": "tab1Text", + "fill": "#1A1A1A", + "content": "支出", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "600" + } + ] + }, + { + "type": "frame", + "id": "0rM11", + "name": "tab2", + "width": "fill_container", + "fill": "transparent", + "padding": [ + 8, + 16 + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "WXb0h", + "name": "tab2Text", + "fill": "#888888", + "content": "收入", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "xHs0t", + "name": "tab3", + "width": "fill_container", + "fill": "transparent", + "padding": [ + 8, + 16 + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "Kjbjx", + "name": "tab3Text", + "fill": "#888888", + "content": "计划", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "500" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "ijHRX", + "name": "content", + "width": "fill_container", + "layout": "vertical", + "gap": 16, + "padding": 16, + "children": [ + { + "type": "frame", + "id": "1KJTP", + "name": "overallCard", + "width": "fill_container", + "fill": "#F6F7F8", + "cornerRadius": 16, + "layout": "vertical", + "gap": 16, + "padding": 20, + "children": [ + { + "type": "text", + "id": "vjNOX", + "name": "overallTitle", + "fill": "#71717A", + "content": "本月预算", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "normal" + }, + { + "type": "frame", + "id": "qxXwx", + "name": "overallAmount", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "hIESL", + "name": "overallLeft", + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "text", + "id": "D5K0P", + "name": "overallCurrent", + "fill": "#18181B", + "content": "¥8,523", + "fontFamily": "Inter", + "fontSize": 28, + "fontWeight": "700" + }, + { + "type": "text", + "id": "0qnF1", + "name": "overallLimit", + "fill": "#71717A", + "content": "/ ¥15,000", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "normal" + } + ] + }, + { + "type": "text", + "id": "tGKF4", + "name": "overallPercent", + "fill": "#18181B", + "content": "56.8%", + "fontFamily": "Inter", + "fontSize": 24, + "fontWeight": "600" + } + ] + }, + { + "type": "frame", + "id": "EQZGM", + "name": "progressBar", + "width": "fill_container", + "height": 8, + "fill": "#E5E7EB", + "cornerRadius": 4, + "children": [ + { + "type": "rectangle", + "cornerRadius": 4, + "id": "7tGdo", + "name": "progressFill", + "fill": "#3B82F6", + "width": 213, + "height": 8 + } + ] + } + ] + }, + { + "type": "frame", + "id": "9jYaf", + "name": "budgetList", + "width": "fill_container", + "layout": "vertical", + "gap": 12, + "children": [ + { + "type": "frame", + "id": "Kxe0g", + "name": "card1", + "width": "fill_container", + "fill": "#F6F7F8", + "cornerRadius": 16, + "layout": "vertical", + "gap": 12, + "padding": 16, + "children": [ + { + "type": "frame", + "id": "7yVaP", + "name": "cardHeader1", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "FgKnu", + "name": "cardTitle1", + "fill": "#18181B", + "content": "餐饮美食", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "600" + }, + { + "type": "frame", + "id": "bGgcT", + "name": "cardBadge1", + "fill": "#DBEAFE", + "cornerRadius": 12, + "padding": [ + 4, + 12 + ], + "children": [ + { + "type": "text", + "id": "xnmMK", + "name": "cardBadgeText1", + "fill": "#3B82F6", + "content": "月度", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "fDVpP", + "name": "cardProgress1", + "width": "fill_container", + "height": 6, + "fill": "#E5E7EB", + "cornerRadius": 3, + "children": [ + { + "type": "rectangle", + "cornerRadius": 3, + "id": "Vm6T4", + "name": "cardProgressFill1", + "fill": "#EF4444", + "width": 243, + "height": 6 + } + ] + }, + { + "type": "frame", + "id": "pGt5L", + "name": "cardInfo1", + "width": "fill_container", + "justifyContent": "space_between", + "children": [ + { + "type": "frame", + "id": "hQrSj", + "name": "cardLeft1", + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "text", + "id": "tOSb6", + "name": "cardLabel1", + "fill": "#71717A", + "content": "已支出", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "IqTXx", + "name": "cardAmount1", + "fill": "#EF4444", + "content": "¥2,456", + "fontFamily": "Inter", + "fontSize": 18, + "fontWeight": "600" + } + ] + }, + { + "type": "frame", + "id": "vgDBH", + "name": "cardRight1", + "layout": "vertical", + "gap": 4, + "alignItems": "end", + "children": [ + { + "type": "text", + "id": "VDt6P", + "name": "cardLabel2", + "fill": "#71717A", + "content": "余额", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "OkeZ1", + "name": "cardAmount2", + "fill": "#10B981", + "content": "¥544", + "fontFamily": "Inter", + "fontSize": 18, + "fontWeight": "600" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "sMUQr", + "name": "card2", + "width": "fill_container", + "fill": "#F6F7F8", + "cornerRadius": 16, + "layout": "vertical", + "gap": 12, + "padding": 16, + "children": [ + { + "type": "frame", + "id": "wLy7P", + "name": "cardHeader2", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "vkYqi", + "name": "cardTitle2", + "fill": "#18181B", + "content": "交通出行", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "600" + }, + { + "type": "frame", + "id": "cPTG6", + "name": "cardBadge2", + "fill": "#FEF3C7", + "cornerRadius": 12, + "padding": [ + 4, + 12 + ], + "children": [ + { + "type": "text", + "id": "ZuZPD", + "name": "cardBadgeText2", + "fill": "#F59E0B", + "content": "年度", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "X5vjX", + "name": "cardProgress2", + "width": "fill_container", + "height": 6, + "fill": "#E5E7EB", + "cornerRadius": 3, + "children": [ + { + "type": "rectangle", + "cornerRadius": 3, + "id": "h0qT6", + "name": "cardProgressFill2", + "fill": "#10B981", + "width": 150, + "height": 6 + } + ] + }, + { + "type": "frame", + "id": "UD9xG", + "name": "cardInfo2", + "width": "fill_container", + "justifyContent": "space_between", + "children": [ + { + "type": "frame", + "id": "8iZa6", + "name": "cardLeft2", + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "text", + "id": "vixYd", + "name": "cardLabel3", + "fill": "#71717A", + "content": "已支出", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "0vzMF", + "name": "cardAmount3", + "fill": "#EF4444", + "content": "¥1,280", + "fontFamily": "Inter", + "fontSize": 18, + "fontWeight": "600" + } + ] + }, + { + "type": "frame", + "id": "V53Pn", + "name": "cardRight2", + "layout": "vertical", + "gap": 4, + "alignItems": "end", + "children": [ + { + "type": "text", + "id": "iIrVf", + "name": "cardLabel4", + "fill": "#71717A", + "content": "余额", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "2sPht", + "name": "cardAmount4", + "fill": "#10B981", + "content": "¥3,720", + "fontFamily": "Inter", + "fontSize": 18, + "fontWeight": "600" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "JXSeL", + "name": "card3", + "width": "fill_container", + "fill": "#F6F7F8", + "cornerRadius": 16, + "layout": "vertical", + "gap": 12, + "padding": 16, + "children": [ + { + "type": "frame", + "id": "YpvwO", + "name": "cardHeader3", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "2toIA", + "name": "cardTitle3", + "fill": "#18181B", + "content": "购物消费", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "600" + }, + { + "type": "frame", + "id": "BYZaj", + "name": "cardBadge3", + "fill": "#DBEAFE", + "cornerRadius": 12, + "padding": [ + 4, + 12 + ], + "children": [ + { + "type": "text", + "id": "4cJ7S", + "name": "cardBadgeText3", + "fill": "#3B82F6", + "content": "月度", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "RCpe6", + "name": "cardProgress3", + "width": "fill_container", + "height": 6, + "fill": "#E5E7EB", + "cornerRadius": 3, + "children": [ + { + "type": "rectangle", + "cornerRadius": 3, + "id": "lWE88", + "name": "cardProgressFill3", + "fill": "#F59E0B", + "width": 280, + "height": 6 + } + ] + }, + { + "type": "frame", + "id": "rgPwW", + "name": "cardInfo3", + "width": "fill_container", + "justifyContent": "space_between", + "children": [ + { + "type": "frame", + "id": "qPicR", + "name": "cardLeft3", + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "text", + "id": "yLFQq", + "name": "cardLabel5", + "fill": "#71717A", + "content": "已支出", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "833pE", + "name": "cardAmount5", + "fill": "#EF4444", + "content": "¥1,850", + "fontFamily": "Inter", + "fontSize": 18, + "fontWeight": "600" + } + ] + }, + { + "type": "frame", + "id": "c4S9v", + "name": "cardRight3", + "layout": "vertical", + "gap": 4, + "alignItems": "end", + "children": [ + { + "type": "text", + "id": "syI2C", + "name": "cardLabel6", + "fill": "#71717A", + "content": "余额", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "AXTAE", + "name": "cardAmount6", + "fill": "#10B981", + "content": "¥650", + "fontFamily": "Inter", + "fontSize": 18, + "fontWeight": "600" + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "hzxw1", + "name": "fab", + "width": 56, + "height": 56, + "fill": "#3B82F6", + "cornerRadius": 28, + "stroke": { + "align": "outside", + "thickness": 4, + "fill": "#FFFFFF" + }, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "VDoNM", + "name": "fabIcon", + "width": 24, + "height": 24, + "iconFontName": "pencil", + "iconFontFamily": "lucide", + "fill": "#FFFFFF" + } + ] + } + ] + }, + { + "type": "frame", + "id": "zYTEk", + "x": 466, + "y": 369, + "name": "Budget Stats (Dark)", + "width": 402, + "fill": "#0F0F0F", + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "UcVry", + "name": "navbar", + "width": "fill_container", + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "yKDZC", + "name": "navTop", + "width": "fill_container", + "padding": [ + 12, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "QTSlc", + "name": "dateBtn", + "fill": "#27272A", + "cornerRadius": 8, + "gap": 4, + "padding": [ + 6, + 12 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "hEsJE", + "name": "dateText", + "fill": "#FAFAFA", + "content": "2026年1月", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "500" + }, + { + "type": "icon_font", + "id": "SrQTT", + "name": "dateIcon", + "width": 16, + "height": 16, + "iconFontName": "chevron-down", + "iconFontFamily": "lucide", + "fill": "#A1A1AA" + } + ] + } + ] + }, + { + "type": "frame", + "id": "TmjqN", + "name": "tabs", + "width": "fill_container", + "fill": "#1A1A1A", + "cornerRadius": 8, + "gap": 4, + "padding": 4, + "children": [ + { + "type": "frame", + "id": "C7JdO", + "name": "tab1", + "width": "fill_container", + "fill": "#2A2A2A", + "cornerRadius": 6, + "padding": [ + 8, + 16 + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "P0UrT", + "name": "tab1Text", + "fill": "#FFFFFF", + "content": "支出", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "600" + } + ] + }, + { + "type": "frame", + "id": "JEEJO", + "name": "tab2", + "width": "fill_container", + "fill": "transparent", + "padding": [ + 8, + 16 + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "eXJme", + "name": "tab2Text", + "fill": "#888888", + "content": "收入", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "5IBt7", + "name": "tab3", + "width": "fill_container", + "fill": "transparent", + "padding": [ + 8, + 16 + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "OXd9d", + "name": "tab3Text", + "fill": "#888888", + "content": "计划", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "500" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "nSkwQ", + "name": "content", + "width": "fill_container", + "layout": "vertical", + "gap": 16, + "padding": 16, + "children": [ + { + "type": "frame", + "id": "aGMhW", + "name": "overallCard", + "width": "fill_container", + "fill": "#18181B", + "cornerRadius": 16, + "layout": "vertical", + "gap": 16, + "padding": 20, + "children": [ + { + "type": "text", + "id": "K5cvF", + "name": "overallTitle", + "fill": "#A1A1AA", + "content": "本月预算", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "normal" + }, + { + "type": "frame", + "id": "Jadr2", + "name": "overallAmount", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "a9J0e", + "name": "overallLeft", + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "text", + "id": "4xkoW", + "name": "overallCurrent", + "fill": "#FAFAFA", + "content": "¥8,523", + "fontFamily": "Inter", + "fontSize": 28, + "fontWeight": "700" + }, + { + "type": "text", + "id": "4TscQ", + "name": "overallLimit", + "fill": "#A1A1AA", + "content": "/ ¥15,000", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "normal" + } + ] + }, + { + "type": "text", + "id": "9NVyM", + "name": "overallPercent", + "fill": "#FAFAFA", + "content": "56.8%", + "fontFamily": "Inter", + "fontSize": 24, + "fontWeight": "600" + } + ] + }, + { + "type": "frame", + "id": "cwd7i", + "name": "progressBar", + "width": "fill_container", + "height": 8, + "fill": "#27272A", + "cornerRadius": 4, + "children": [ + { + "type": "rectangle", + "cornerRadius": 4, + "id": "nsG9r", + "name": "progressFill", + "fill": "#3B82F6", + "width": 213, + "height": 8 + } + ] + } + ] + }, + { + "type": "frame", + "id": "gdyAB", + "name": "budgetList", + "width": "fill_container", + "layout": "vertical", + "gap": 12, + "children": [ + { + "type": "frame", + "id": "I6ghu", + "name": "card1", + "width": "fill_container", + "fill": "#18181B", + "cornerRadius": 16, + "layout": "vertical", + "gap": 12, + "padding": 16, + "children": [ + { + "type": "frame", + "id": "a4Nmj", + "name": "cardHeader1", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "bM4Ya", + "name": "cardTitle1", + "fill": "#FAFAFA", + "content": "餐饮美食", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "600" + }, + { + "type": "frame", + "id": "Yc78t", + "name": "cardBadge1", + "fill": "#1E3A8A", + "cornerRadius": 12, + "padding": [ + 4, + 12 + ], + "children": [ + { + "type": "text", + "id": "u4nWW", + "name": "cardBadgeText1", + "fill": "#60A5FA", + "content": "月度", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "dZutK", + "name": "cardProgress1", + "width": "fill_container", + "height": 6, + "fill": "#27272A", + "cornerRadius": 3, + "children": [ + { + "type": "rectangle", + "cornerRadius": 3, + "id": "h9gGM", + "name": "cardProgressFill1", + "fill": "#EF4444", + "width": 243, + "height": 6 + } + ] + }, + { + "type": "frame", + "id": "8QFZK", + "name": "cardInfo1", + "width": "fill_container", + "justifyContent": "space_between", + "children": [ + { + "type": "frame", + "id": "oq7HH", + "name": "cardLeft1", + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "text", + "id": "q7ncv", + "name": "cardLabel1", + "fill": "#A1A1AA", + "content": "已支出", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "OnWIK", + "name": "cardAmount1", + "fill": "#EF4444", + "content": "¥2,456", + "fontFamily": "Inter", + "fontSize": 18, + "fontWeight": "600" + } + ] + }, + { + "type": "frame", + "id": "v6EKH", + "name": "cardRight1", + "layout": "vertical", + "gap": 4, + "alignItems": "end", + "children": [ + { + "type": "text", + "id": "zUjxT", + "name": "cardLabel2", + "fill": "#A1A1AA", + "content": "余额", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "txCP6", + "name": "cardAmount2", + "fill": "#10B981", + "content": "¥544", + "fontFamily": "Inter", + "fontSize": 18, + "fontWeight": "600" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "DXlJt", + "name": "card2", + "width": "fill_container", + "fill": "#18181B", + "cornerRadius": 16, + "layout": "vertical", + "gap": 12, + "padding": 16, + "children": [ + { + "type": "frame", + "id": "T7ozA", + "name": "cardHeader2", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "F5AoP", + "name": "cardTitle2", + "fill": "#FAFAFA", + "content": "交通出行", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "600" + }, + { + "type": "frame", + "id": "MbkXg", + "name": "cardBadge2", + "fill": "#78350F", + "cornerRadius": 12, + "padding": [ + 4, + 12 + ], + "children": [ + { + "type": "text", + "id": "AZvQ9", + "name": "cardBadgeText2", + "fill": "#FCD34D", + "content": "年度", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "C4B6A", + "name": "cardProgress2", + "width": "fill_container", + "height": 6, + "fill": "#27272A", + "cornerRadius": 3, + "children": [ + { + "type": "rectangle", + "cornerRadius": 3, + "id": "5velO", + "name": "cardProgressFill2", + "fill": "#10B981", + "width": 150, + "height": 6 + } + ] + }, + { + "type": "frame", + "id": "OJuXL", + "name": "cardInfo2", + "width": "fill_container", + "justifyContent": "space_between", + "children": [ + { + "type": "frame", + "id": "aS0rL", + "name": "cardLeft2", + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "text", + "id": "7hZe7", + "name": "cardLabel3", + "fill": "#A1A1AA", + "content": "已支出", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "aNOYV", + "name": "cardAmount3", + "fill": "#EF4444", + "content": "¥1,280", + "fontFamily": "Inter", + "fontSize": 18, + "fontWeight": "600" + } + ] + }, + { + "type": "frame", + "id": "qqfZK", + "name": "cardRight2", + "layout": "vertical", + "gap": 4, + "alignItems": "end", + "children": [ + { + "type": "text", + "id": "WmkCh", + "name": "cardLabel4", + "fill": "#A1A1AA", + "content": "余额", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "yzLpr", + "name": "cardAmount4", + "fill": "#10B981", + "content": "¥3,720", + "fontFamily": "Inter", + "fontSize": 18, + "fontWeight": "600" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "Hq7B3", + "name": "card3", + "width": "fill_container", + "fill": "#18181B", + "cornerRadius": 16, + "layout": "vertical", + "gap": 12, + "padding": 16, + "children": [ + { + "type": "frame", + "id": "HVGmg", + "name": "cardHeader3", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "6ssRH", + "name": "cardTitle3", + "fill": "#FAFAFA", + "content": "购物消费", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "600" + }, + { + "type": "frame", + "id": "sujfh", + "name": "cardBadge3", + "fill": "#1E3A8A", + "cornerRadius": 12, + "padding": [ + 4, + 12 + ], + "children": [ + { + "type": "text", + "id": "wRv58", + "name": "cardBadgeText3", + "fill": "#60A5FA", + "content": "月度", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "OnHhB", + "name": "cardProgress3", + "width": "fill_container", + "height": 6, + "fill": "#27272A", + "cornerRadius": 3, + "children": [ + { + "type": "rectangle", + "cornerRadius": 3, + "id": "bd4VL", + "name": "cardProgressFill3", + "fill": "#F59E0B", + "width": 280, + "height": 6 + } + ] + }, + { + "type": "frame", + "id": "Sd4ny", + "name": "cardInfo3", + "width": "fill_container", + "justifyContent": "space_between", + "children": [ + { + "type": "frame", + "id": "bkP14", + "name": "cardLeft3", + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "text", + "id": "crUvx", + "name": "cardLabel5", + "fill": "#A1A1AA", + "content": "已支出", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "RxoOl", + "name": "cardAmount5", + "fill": "#EF4444", + "content": "¥1,850", + "fontFamily": "Inter", + "fontSize": 18, + "fontWeight": "600" + } + ] + }, + { + "type": "frame", + "id": "UPf5R", + "name": "cardRight3", + "layout": "vertical", + "gap": 4, + "alignItems": "end", + "children": [ + { + "type": "text", + "id": "h51tP", + "name": "cardLabel6", + "fill": "#A1A1AA", + "content": "余额", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "04f8k", + "name": "cardAmount6", + "fill": "#10B981", + "content": "¥650", + "fontFamily": "Inter", + "fontSize": 18, + "fontWeight": "600" + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "Euc04", + "name": "fab", + "width": 56, + "height": 56, + "fill": "#3B82F6", + "cornerRadius": 28, + "stroke": { + "align": "outside", + "thickness": 4, + "fill": "#FFFFFF" + }, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "zKjKJ", + "name": "fabIcon", + "width": 24, + "height": 24, + "iconFontName": "pencil", + "iconFontFamily": "lucide", + "fill": "#FFFFFF" + } + ] + } + ] + }, + { + "type": "frame", + "id": "Rg59j", + "x": 900, + "y": 369, + "name": "Budget Analytics", + "width": 402, + "fill": "#F5F7FA", + "layout": "vertical", + "gap": 16, + "padding": 20, + "children": [ + { + "type": "frame", + "id": "Nq8k9", + "name": "header", + "width": "fill_container", + "layout": "vertical", + "gap": 8, + "children": [ + { + "type": "text", + "id": "j7M8v", + "name": "titleText", + "fill": "#1A1A1A", + "content": "预算分析", + "fontFamily": "Inter", + "fontSize": 24, + "fontWeight": "700" + }, + { + "type": "text", + "id": "Dj7FE", + "name": "dateText", + "fill": "#6B7280", + "content": "2026年1月", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "rUUNa", + "name": "remainCard", + "width": "fill_container", + "fill": "#FFFFFF", + "cornerRadius": 12, + "layout": "vertical", + "gap": 12, + "padding": 16, + "children": [ + { + "type": "text", + "id": "Lsb2n", + "name": "remainTitle", + "fill": "#6B7280", + "content": "预算剩余", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "500" + }, + { + "type": "text", + "id": "FPMMo", + "name": "remainAmount", + "fill": "#10B981", + "content": "¥3,250", + "fontFamily": "Inter", + "fontSize": 32, + "fontWeight": "700" + }, + { + "type": "text", + "id": "lMDn7", + "name": "remainDesc", + "fill": "#9CA3AF", + "content": "总预算 ¥10,000 | 已使用 68%", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "12oX3", + "name": "burndownCard", + "width": "fill_container", + "fill": "#FFFFFF", + "cornerRadius": 12, + "layout": "vertical", + "gap": 12, + "padding": 16, + "children": [ + { + "type": "text", + "id": "XIsI0", + "name": "burnTitle", + "fill": "#1A1A1A", + "content": "预算燃尽图", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "600" + }, + { + "type": "frame", + "id": "ryx65", + "name": "chartArea1", + "width": "fill_container", + "height": 200, + "fill": "#F9FAFB", + "cornerRadius": 8, + "layout": "none", + "children": [ + { + "type": "line", + "id": "h85XX", + "x": 20, + "y": 20, + "name": "idealLine", + "width": 310, + "height": 160, + "stroke": { + "thickness": 2, + "fill": "#D1D5DB" + } + }, + { + "type": "path", + "id": "c6Bys", + "x": 20, + "y": 20, + "name": "actualLine", + "geometry": "M0 0l100 40 100 60 110 40", + "width": 310, + "height": 160, + "stroke": { + "thickness": 3, + "fill": "#3B82F6" + } + }, + { + "type": "ellipse", + "id": "RQY2V", + "x": 15, + "y": 15, + "name": "point1", + "fill": "#3B82F6", + "width": 10, + "height": 10 + }, + { + "type": "ellipse", + "id": "SE4dr", + "x": 115, + "y": 55, + "name": "point2", + "fill": "#3B82F6", + "width": 10, + "height": 10 + }, + { + "type": "ellipse", + "id": "9fGPC", + "x": 215, + "y": 115, + "name": "point3", + "fill": "#3B82F6", + "width": 10, + "height": 10 + }, + { + "type": "ellipse", + "id": "7HZDX", + "x": 315, + "y": 155, + "name": "point4", + "fill": "#3B82F6", + "width": 10, + "height": 10 + } + ] + }, + { + "type": "frame", + "id": "maILp", + "name": "legend1", + "width": "fill_container", + "gap": 16, + "justifyContent": "center", + "children": [ + { + "type": "frame", + "id": "VyDB0", + "name": "ideal", + "gap": 6, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "id": "RkZ6D", + "name": "idealDot", + "fill": "#D1D5DB", + "width": 12, + "height": 2 + }, + { + "type": "text", + "id": "tpHGY", + "name": "idealLabel", + "fill": "#6B7280", + "content": "理想消耗", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "7yVCB", + "name": "actual", + "gap": 6, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "id": "sBgPG", + "name": "actualDot", + "fill": "#3B82F6", + "width": 12, + "height": 2 + }, + { + "type": "text", + "id": "XkLVA", + "name": "actualLabel", + "fill": "#6B7280", + "content": "实际消耗", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "GiIWx", + "name": "varianceCard", + "width": "fill_container", + "fill": "#FFFFFF", + "cornerRadius": 12, + "layout": "vertical", + "gap": 12, + "padding": 16, + "children": [ + { + "type": "text", + "id": "6Kket", + "name": "varTitle", + "fill": "#1A1A1A", + "content": "预算偏差分析", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "600" + }, + { + "type": "frame", + "id": "i5z6p", + "name": "chartArea2", + "width": "fill_container", + "height": 240, + "fill": "#F9FAFB", + "cornerRadius": 8, + "layout": "none", + "children": [ + { + "type": "frame", + "id": "TFE88", + "x": 30, + "y": 180, + "name": "bar1Frame", + "width": 50, + "height": 80, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": 4, + "id": "uWXEp", + "name": "bar1", + "fill": "#EF4444", + "width": 40, + "height": 60 + }, + { + "type": "text", + "id": "b1CKO", + "name": "label1", + "fill": "#6B7280", + "content": "餐饮", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "lHkYX", + "x": 100, + "y": 140, + "name": "bar2Frame", + "width": 50, + "height": 120, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": 4, + "id": "UCaPk", + "name": "bar2", + "fill": "#F59E0B", + "width": 40, + "height": 100 + }, + { + "type": "text", + "id": "qpX6L", + "name": "label2", + "fill": "#6B7280", + "content": "交通", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "XzvK2", + "x": 170, + "y": 160, + "name": "bar3Frame", + "width": 50, + "height": 100, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": 4, + "id": "IJypN", + "name": "bar3", + "fill": "#10B981", + "width": 40, + "height": 80 + }, + { + "type": "text", + "id": "inAFN", + "name": "label3", + "fill": "#6B7280", + "content": "购物", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "mwQeE", + "x": 240, + "y": 150, + "name": "bar4Frame", + "width": 50, + "height": 110, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": 4, + "id": "jgJBQ", + "name": "bar4", + "fill": "#3B82F6", + "width": 40, + "height": 90 + }, + { + "type": "text", + "id": "hweUc", + "name": "label4", + "fill": "#6B7280", + "content": "娱乐", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "o1uNO", + "x": 310, + "y": 190, + "name": "bar5Frame", + "width": 50, + "height": 70, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": 4, + "id": "0MwYg", + "name": "bar5", + "fill": "#8B5CF6", + "width": 40, + "height": 50 + }, + { + "type": "text", + "id": "9iXy6", + "name": "label5", + "fill": "#6B7280", + "content": "其他", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "line", + "id": "98osi", + "x": 20, + "y": 200, + "name": "axisLine", + "width": 350, + "height": 0, + "stroke": { + "thickness": 1, + "fill": "#E5E7EB" + } + } + ] + }, + { + "type": "frame", + "id": "aOAnk", + "name": "legend2", + "width": "fill_container", + "gap": 12, + "justifyContent": "center", + "children": [ + { + "type": "frame", + "id": "yKfLI", + "name": "over", + "gap": 6, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": 2, + "id": "tsGkr", + "name": "overDot", + "fill": "#EF4444", + "width": 8, + "height": 8 + }, + { + "type": "text", + "id": "cMKm7", + "name": "overLabel", + "fill": "#6B7280", + "content": "超支", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "BL57C", + "name": "normal", + "gap": 6, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": 2, + "id": "1Vkqa", + "name": "normalDot", + "fill": "#10B981", + "width": 8, + "height": 8 + }, + { + "type": "text", + "id": "MSLKe", + "name": "normalLabel", + "fill": "#6B7280", + "content": "正常", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + } + ] + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/Entity/TransactionCategory.cs b/Entity/TransactionCategory.cs index dca3517..d012f78 100644 --- a/Entity/TransactionCategory.cs +++ b/Entity/TransactionCategory.cs @@ -14,4 +14,11 @@ public class TransactionCategory : BaseEntity /// 交易类型(支出/收入) /// public TransactionType Type { get; set; } + + /// + /// 图标(SVG格式,JSON数组存储5个图标供选择) + /// 示例:["...", "...", ...] + /// + [Column(StringLength = -1)] + public string? Icon { get; set; } } diff --git a/Service/AI/OpenAiService.cs b/Service/AI/OpenAiService.cs index 347fdb5..297e2b3 100644 --- a/Service/AI/OpenAiService.cs +++ b/Service/AI/OpenAiService.cs @@ -4,8 +4,8 @@ namespace Service.AI; public interface IOpenAiService { - Task ChatAsync(string systemPrompt, string userPrompt); - Task ChatAsync(string prompt); + Task ChatAsync(string systemPrompt, string userPrompt, int timeoutSeconds = 15); + Task ChatAsync(string prompt, int timeoutSeconds = 15); IAsyncEnumerable ChatStreamAsync(string systemPrompt, string userPrompt); IAsyncEnumerable ChatStreamAsync(string prompt); } @@ -15,7 +15,7 @@ public class OpenAiService( ILogger logger ) : IOpenAiService { - public async Task ChatAsync(string systemPrompt, string userPrompt) + public async Task ChatAsync(string systemPrompt, string userPrompt, int timeoutSeconds = 15) { var cfg = aiSettings.Value; if (string.IsNullOrWhiteSpace(cfg.Endpoint) || @@ -27,7 +27,7 @@ public class OpenAiService( } using var http = new HttpClient(); - http.Timeout = TimeSpan.FromSeconds(15); + http.Timeout = TimeSpan.FromSeconds(timeoutSeconds); http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", cfg.Key); var payload = new @@ -72,7 +72,7 @@ public class OpenAiService( } } - public async Task ChatAsync(string prompt) + public async Task ChatAsync(string prompt, int timeoutSeconds = 15) { var cfg = aiSettings.Value; if (string.IsNullOrWhiteSpace(cfg.Endpoint) || @@ -84,7 +84,7 @@ public class OpenAiService( } using var http = new HttpClient(); - http.Timeout = TimeSpan.FromSeconds(60 * 5); + http.Timeout = TimeSpan.FromSeconds(timeoutSeconds); http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", cfg.Key); var payload = new diff --git a/Service/Jobs/CategoryIconGenerationJob.cs b/Service/Jobs/CategoryIconGenerationJob.cs new file mode 100644 index 0000000..2d5b905 --- /dev/null +++ b/Service/Jobs/CategoryIconGenerationJob.cs @@ -0,0 +1,150 @@ +using Quartz; +using Service.AI; + +namespace Service.Jobs; + +/// +/// 分类图标生成定时任务 +/// 每10分钟扫描一次,为没有图标的分类生成 5 个 SVG 图标 +/// +public class CategoryIconGenerationJob( + ITransactionCategoryRepository categoryRepository, + IOpenAiService openAiService, + ILogger logger) : IJob +{ + private static readonly SemaphoreSlim _semaphore = new(1, 1); + + public async Task Execute(IJobExecutionContext context) + { + // 尝试获取锁,如果失败则跳过本次执行 + if (!await _semaphore.WaitAsync(0)) + { + logger.LogInformation("上一个分类图标生成任务尚未完成,跳过本次执行"); + return; + } + + try + { + + logger.LogInformation("开始执行分类图标生成任务"); + + // 查询所有分类,然后过滤出没有图标的 + var allCategories = await categoryRepository.GetAllAsync(); + var categoriesWithoutIcon = allCategories + .Where(c => string.IsNullOrEmpty(c.Icon)) + .ToList(); + + if (categoriesWithoutIcon.Count == 0) + { + logger.LogInformation("所有分类都已有图标,跳过本次任务"); + return; + } + + logger.LogInformation("发现 {Count} 个分类没有图标,开始生成", categoriesWithoutIcon.Count); + + // 为每个分类生成图标 + foreach (var category in categoriesWithoutIcon) + { + try + { + await GenerateIconsForCategoryAsync(category); + } + catch (Exception ex) + { + logger.LogError(ex, "为分类 {CategoryName}(ID:{CategoryId}) 生成图标失败", + category.Name, category.Id); + } + } + + logger.LogInformation("分类图标生成任务执行完成"); + } + catch (Exception ex) + { + logger.LogError(ex, "分类图标生成任务执行出错"); + throw; + } + finally + { + _semaphore.Release(); + } + } + + /// + /// 为单个分类生成 5 个 SVG 图标 + /// + private async Task GenerateIconsForCategoryAsync(TransactionCategory category) + { + logger.LogInformation("正在为分类 {CategoryName}(ID:{CategoryId}) 生成图标", + category.Name, category.Id); + + var typeText = category.Type == TransactionType.Expense ? "支出" : "收入"; + + var systemPrompt = """ + 你是一个专业的 SVG 图标设计师,擅长创作精美、富有表现力的图标。 + 请根据分类名称和类型,生成 5 个风格迥异、视觉效果突出的 SVG 图标。 + + 设计要求: + 1. 尺寸:24x24,viewBox="0 0 24 24" + 2. 色彩:使用丰富的渐变色和多色搭配,让图标更有吸引力和辨识度 + - 可以使用 或 创建渐变效果 + - 不同元素使用不同颜色,增加层次感 + - 根据分类含义选择合适的配色方案(如餐饮用暖色系、交通用蓝色系等) + 3. 设计风格:5 个图标必须风格明显不同,避免雷同 + - 第1个:扁平化风格,色彩鲜明,使用渐变 + - 第2个:线性风格,多色描边,细节丰富 + - 第3个:3D立体风格,使用阴影和高光效果 + - 第4个:卡通可爱风格,圆润造型,活泼配色 + - 第5个:现代简约风格,几何与曲线结合,优雅配色 + 4. 细节丰富:不要只用简单的几何图形,添加特征性的细节元素 + - 例如:餐饮可以加刀叉、蒸汽、食材纹理等 + - 交通可以加轮胎、车窗、尾气等 + - 每个图标要有独特的视觉记忆点 + 5. 图标要直观表达分类含义,让人一眼就能识别 + 6. 只返回 JSON 数组格式,包含 5 个完整的 SVG 字符串,不要有任何其他文字说明 + + 重要:每个 SVG 必须是自包含的完整代码,包含所有必要的 gradient 定义。 + """; + + var userPrompt = $""" + 分类名称:{category.Name} + 分类类型:{typeText} + + 请为这个分类生成 5 个精美的、风格各异的彩色 SVG 图标。 + 确保每个图标都有独特的视觉特征,不会与其他图标混淆。 + + 返回格式(纯 JSON 数组,无其他内容): + ["...", "...", "...", "...", "..."] + """; + + var response = await openAiService.ChatAsync(systemPrompt, userPrompt, timeoutSeconds: 60 * 10); + + if (string.IsNullOrWhiteSpace(response)) + { + logger.LogWarning("AI 未返回有效的图标数据,分类: {CategoryName}", category.Name); + return; + } + + // 验证返回的是有效的 JSON 数组 + try + { + var icons = JsonSerializer.Deserialize>(response); + if (icons == null || icons.Count != 5) + { + logger.LogWarning("AI 返回的图标数量不正确(期望5个),分类: {CategoryName}", category.Name); + return; + } + + // 保存图标到数据库 + category.Icon = response; + await categoryRepository.UpdateAsync(category); + + logger.LogInformation("成功为分类 {CategoryName}(ID:{CategoryId}) 生成并保存了 5 个图标", + category.Name, category.Id); + } + catch (JsonException ex) + { + logger.LogError(ex, "解析 AI 返回的图标数据失败,分类: {CategoryName},响应内容: {Response}", + category.Name, response); + } + } +} diff --git a/Web/src/api/transactionCategory.js b/Web/src/api/transactionCategory.js index 4736c33..742a68d 100644 --- a/Web/src/api/transactionCategory.js +++ b/Web/src/api/transactionCategory.js @@ -76,3 +76,30 @@ export const batchCreateCategories = (dataList) => { data: dataList }) } + +/** + * 为指定分类生成新的SVG图标 + * @param {number} categoryId - 分类ID + * @returns {Promise<{success: boolean, data: string}>} 返回生成的SVG内容 + */ +export const generateIcon = (categoryId) => { + return request({ + url: '/TransactionCategory/GenerateIcon', + method: 'post', + data: { categoryId } + }) +} + +/** + * 更新分类的选中图标索引 + * @param {number} categoryId - 分类ID + * @param {number} selectedIndex - 选中的图标索引 + * @returns {Promise<{success: boolean}>} + */ +export const updateSelectedIcon = (categoryId, selectedIndex) => { + return request({ + url: '/TransactionCategory/UpdateSelectedIcon', + method: 'post', + data: { categoryId, selectedIndex } + }) +} diff --git a/Web/src/views/ClassificationEdit.vue b/Web/src/views/ClassificationEdit.vue index e21aad5..cc61edf 100644 --- a/Web/src/views/ClassificationEdit.vue +++ b/Web/src/views/ClassificationEdit.vue @@ -56,11 +56,33 @@ v-for="category in categories" :key="category.id" > - + + + + + + + + 选择图标 + + + 编辑 + + + + + + + + + + + + + + + + + + + + {{ isGeneratingIcon ? 'AI生成中...' : '生成新图标' }} + + + + @@ -143,7 +211,9 @@ import { getCategoryList, createCategory, deleteCategory, - updateCategory + updateCategory, + generateIcon, + updateSelectedIcon } from '@/api/transactionCategory' const router = useRouter() @@ -185,6 +255,12 @@ const editForm = ref({ name: '' }) +// 图标选择对话框 +const showIconDialog = ref(false) +const currentCategory = ref(null) // 当前正在编辑图标的分类 +const selectedIconIndex = ref(0) +const isGeneratingIcon = ref(false) + // 计算导航栏标题 const navTitle = computed(() => { if (currentLevel.value === 0) { @@ -309,6 +385,97 @@ const handleEdit = (category) => { showEditDialog.value = true } +/** + * 打开图标选择器 + */ +const handleIconSelect = (category) => { + currentCategory.value = category + selectedIconIndex.value = 0 + showIconDialog.value = true +} + +/** + * 生成新图标 + */ +const handleGenerateIcon = async () => { + if (!currentCategory.value) return + + try { + isGeneratingIcon.value = true + showLoadingToast({ + message: 'AI正在生成图标...', + forbidClick: true, + duration: 0 + }) + + const { success, data, message } = await generateIcon(currentCategory.value.id) + + if (success) { + showSuccessToast('图标生成成功') + // 重新加载分类列表以获取最新的图标 + await loadCategories() + // 更新当前分类引用 + const updated = categories.value.find((c) => c.id === currentCategory.value.id) + if (updated) { + currentCategory.value = updated + } + } else { + showToast(message || '生成图标失败') + } + } catch (error) { + console.error('生成图标失败:', error) + showToast('生成图标失败: ' + (error.message || '未知错误')) + } finally { + isGeneratingIcon.value = false + closeToast() + } +} + +/** + * 确认选择图标 + */ +const handleConfirmIconSelect = async () => { + if (!currentCategory.value) return + + try { + showLoadingToast({ + message: '保存中...', + forbidClick: true, + duration: 0 + }) + + const { success, message } = await updateSelectedIcon( + currentCategory.value.id, + selectedIconIndex.value + ) + + if (success) { + showSuccessToast('图标保存成功') + showIconDialog.value = false + await loadCategories() + } else { + showToast(message || '保存失败') + } + } catch (error) { + console.error('保存图标失败:', error) + showToast('保存图标失败: ' + (error.message || '未知错误')) + } finally { + closeToast() + } +} + +/** + * 编辑分类 + */ +const handleEditOld = (category) => { + editForm.value = { + id: category.id, + name: category.name + } + showEditDialog.value = true +} + + /** * 确认编辑 */ @@ -392,6 +559,32 @@ const resetAddForm = () => { } } +/** + * 解析图标数组(第一个图标为当前选中的) + */ +const parseIcon = (iconJson) => { + if (!iconJson) return '' + try { + const icons = JSON.parse(iconJson) + return Array.isArray(icons) && icons.length > 0 ? icons[0] : '' + } catch { + return '' + } +} + +/** + * 解析图标数组为完整数组 + */ +const parseIconArray = (iconJson) => { + if (!iconJson) return [] + try { + const icons = JSON.parse(iconJson) + return Array.isArray(icons) ? icons : [] + } catch { + return [] + } +} + onMounted(() => { // 初始化时显示类型选择 currentLevel.value = 0 @@ -412,6 +605,85 @@ onMounted(() => { cursor: pointer; } +.category-icon { + width: 24px; + height: 24px; + margin-right: 12px; + display: inline-flex; + align-items: center; + justify-content: center; +} + +.category-icon :deep(svg) { + width: 100%; + height: 100%; + fill: currentColor; +} + +.category-actions { + display: flex; + gap: 8px; +} + +.icon-selector { + padding: 16px; +} + +.icon-list { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(60px, 1fr)); + gap: 12px; + margin-bottom: 16px; +} + +.icon-item { + width: 60px; + height: 60px; + border: 2px solid var(--van-border-color); + border-radius: 8px; + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + transition: all 0.2s; +} + +.icon-item:hover { + border-color: var(--van-primary-color); + background-color: var(--van-primary-color-light); +} + +.icon-item.active { + border-color: var(--van-primary-color); + background-color: var(--van-primary-color-light); + box-shadow: 0 2px 8px rgba(25, 137, 250, 0.3); +} + +.icon-preview { + width: 32px; + height: 32px; + display: flex; + align-items: center; + justify-content: center; +} + +.icon-preview :deep(svg) { + width: 100%; + height: 100%; + fill: currentColor; +} + +.empty-icons { + padding: 20px 0; +} + +.icon-actions { + padding-top: 16px; + border-top: 1px solid var(--van-border-color); + display: flex; + justify-content: center; +} + /* 深色模式 */ /* @media (prefers-color-scheme: dark) { .level-container { diff --git a/WebApi/Controllers/TransactionCategoryController.cs b/WebApi/Controllers/TransactionCategoryController.cs index 18e2be7..e7e4510 100644 --- a/WebApi/Controllers/TransactionCategoryController.cs +++ b/WebApi/Controllers/TransactionCategoryController.cs @@ -6,7 +6,8 @@ public class TransactionCategoryController( ITransactionCategoryRepository categoryRepository, ITransactionRecordRepository transactionRecordRepository, ILogger logger, - IBudgetRepository budgetRepository + IBudgetRepository budgetRepository, + IOpenAiService openAiService ) : ControllerBase { /// @@ -199,6 +200,125 @@ public class TransactionCategoryController( return $"批量创建分类失败: {ex.Message}".Fail(); } } + + /// + /// 为指定分类生成新的SVG图标 + /// + [HttpPost] + public async Task> GenerateIconAsync([FromBody] GenerateIconDto dto) + { + try + { + var category = await categoryRepository.GetByIdAsync(dto.CategoryId); + if (category == null) + { + return "分类不存在".Fail(); + } + + // 使用AI生成简洁的SVG图标 + var systemPrompt = @"你是一个SVG图标生成专家。请生成简洁、现代的单色SVG图标。 +要求: +1. 只返回标签及其内容,不要其他说明文字 +2. viewBox=""0 0 24 24"" +3. 尺寸为24x24 +4. 使用单色,fill=""currentColor"" +5. 简洁的设计,适合作为应用图标"; + + var userPrompt = $"为分类"{category.Name}"({(category.Type == TransactionType.Expense ? "支出" : category.Type == TransactionType.Income ? "收入" : "不计收支")})生成一个SVG图标"; + + var svgContent = await openAiService.ChatAsync(systemPrompt, userPrompt, timeoutSeconds: 30); + if (string.IsNullOrWhiteSpace(svgContent)) + { + return "AI生成图标失败".Fail(); + } + + // 提取SVG标签内容 + var svgMatch = System.Text.RegularExpressions.Regex.Match(svgContent, @"]*>.*?", + System.Text.RegularExpressions.RegexOptions.Singleline); + + if (!svgMatch.Success) + { + return "生成的内容不包含有效的SVG标签".Fail(); + } + + var svg = svgMatch.Value; + + // 解析现有图标数组 + var icons = string.IsNullOrWhiteSpace(category.Icon) + ? new List() + : JsonSerializer.Deserialize>(category.Icon) ?? new List(); + + // 添加新图标 + icons.Add(svg); + + // 更新数据库 + category.Icon = JsonSerializer.Serialize(icons); + category.UpdateTime = DateTime.Now; + + var success = await categoryRepository.UpdateAsync(category); + if (!success) + { + return "更新分类图标失败".Fail(); + } + + return svg.Ok(); + } + catch (Exception ex) + { + logger.LogError(ex, "生成图标失败, CategoryId: {CategoryId}", dto.CategoryId); + return $"生成图标失败: {ex.Message}".Fail(); + } + } + + /// + /// 更新分类的选中图标索引 + /// + [HttpPost] + public async Task UpdateSelectedIconAsync([FromBody] UpdateSelectedIconDto dto) + { + try + { + var category = await categoryRepository.GetByIdAsync(dto.CategoryId); + if (category == null) + { + return "分类不存在".Fail(); + } + + // 验证索引有效性 + if (string.IsNullOrWhiteSpace(category.Icon)) + { + return "该分类没有可用图标".Fail(); + } + + var icons = JsonSerializer.Deserialize>(category.Icon); + if (icons == null || dto.SelectedIndex < 0 || dto.SelectedIndex >= icons.Count) + { + return "无效的图标索引".Fail(); + } + + // 这里可以添加一个SelectedIconIndex字段到实体中,或者将选中的图标移到数组第一位 + // 暂时采用移动到第一位的方式 + var selectedIcon = icons[dto.SelectedIndex]; + icons.RemoveAt(dto.SelectedIndex); + icons.Insert(0, selectedIcon); + + category.Icon = JsonSerializer.Serialize(icons); + category.UpdateTime = DateTime.Now; + + var success = await categoryRepository.UpdateAsync(category); + if (success) + { + return "更新图标成功".Ok(); + } + + return "更新图标失败".Fail(); + } + catch (Exception ex) + { + logger.LogError(ex, "更新选中图标失败, Dto: {@Dto}", dto); + return $"更新选中图标失败: {ex.Message}".Fail(); + } + } } /// @@ -216,3 +336,18 @@ public record UpdateCategoryDto( long Id, string Name ); + +/// +/// 生成图标DTO +/// +public record GenerateIconDto( + long CategoryId +); + +/// +/// 更新选中图标DTO +/// +public record UpdateSelectedIconDto( + long CategoryId, + int SelectedIndex +); diff --git a/WebApi/Expand.cs b/WebApi/Expand.cs index 472649d..680f18e 100644 --- a/WebApi/Expand.cs +++ b/WebApi/Expand.cs @@ -66,6 +66,17 @@ public static class Expand .WithIdentity("LogCleanupTrigger") .WithCronSchedule("0 0 2 * * ?") // 每天凌晨2点执行 .WithDescription("每天凌晨2点执行日志清理(保留30天)")); + + // 配置分类图标生成任务 - 每24小时执行一次 + var categoryIconJobKey = new JobKey("CategoryIconGenerationJob"); + q.AddJob(opts => opts + .WithIdentity(categoryIconJobKey) + .WithDescription("分类图标生成任务")); + q.AddTrigger(opts => opts + .ForJob(categoryIconJobKey) + .WithIdentity("CategoryIconGenerationTrigger") + .WithCronSchedule("0 0 0 * * ?") // 每24小时执行一次 + .WithDescription("每24小时扫描并为无图标分类生成SVG图标")); }); // 添加 Quartz Hosted Service diff --git a/v2.pen b/v2.pen deleted file mode 100644 index 34176e0..0000000 --- a/v2.pen +++ /dev/null @@ -1,4954 +0,0 @@ -{ - "version": "2.6", - "children": [ - { - "type": "frame", - "id": "bi8Au", - "x": -1331, - "y": 369, - "name": "Frame", - "clip": true, - "width": 2770, - "height": 1217, - "fill": "#a2a2a2ff", - "layout": "none", - "children": [ - { - "type": "frame", - "id": "PlVHb", - "x": 440, - "y": 14, - "name": "Calendar (Dark)", - "width": 402, - "fill": "#09090B", - "layout": "vertical", - "children": [ - { - "type": "frame", - "id": "gZpES", - "name": "header", - "width": "fill_container", - "gap": 4, - "padding": [ - 8, - 24 - ], - "justifyContent": "space_between", - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "KchUY", - "name": "headerContent", - "width": 142, - "height": 39, - "layout": "vertical", - "gap": 4, - "children": [ - { - "type": "text", - "id": "y8X8F", - "name": "subtitle", - "fill": "#a1a1aa", - "content": "January 2026", - "fontFamily": "DM Sans", - "fontSize": 24, - "fontWeight": "500" - } - ] - }, - { - "type": "frame", - "id": "f1LMO", - "name": "notifBtn", - "width": 44, - "height": 44, - "fill": "#27272a", - "cornerRadius": 22, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "icon_font", - "id": "UMWrV", - "name": "icon", - "width": 20, - "height": 20, - "iconFontName": "bell", - "iconFontFamily": "lucide", - "fill": "#f4f4f5" - } - ] - } - ] - }, - { - "type": "frame", - "id": "2f9Lt", - "name": "calContainer", - "width": "fill_container", - "layout": "vertical", - "gap": 16, - "padding": 24, - "children": [ - { - "type": "frame", - "id": "9uhuL", - "name": "weekDays", - "width": "fill_container", - "justifyContent": "space_between", - "children": [ - { - "type": "text", - "id": "bM7Rv", - "name": "dayMon", - "fill": "#71717a", - "content": "M", - "textAlign": "center", - "fontFamily": "DM Sans", - "fontSize": 12, - "fontWeight": "600" - }, - { - "type": "text", - "id": "Yq6GF", - "name": "dayTue", - "fill": "#71717a", - "content": "T", - "textAlign": "center", - "fontFamily": "DM Sans", - "fontSize": 12, - "fontWeight": "600" - }, - { - "type": "text", - "id": "CmxXJ", - "name": "dayWed", - "fill": "#71717a", - "content": "W", - "textAlign": "center", - "fontFamily": "DM Sans", - "fontSize": 12, - "fontWeight": "600" - }, - { - "type": "text", - "id": "mtCPr", - "name": "dayThu", - "fill": "#71717a", - "content": "T", - "textAlign": "center", - "fontFamily": "DM Sans", - "fontSize": 12, - "fontWeight": "600" - }, - { - "type": "text", - "id": "OrNBC", - "name": "dayFri", - "fill": "#71717a", - "content": "F", - "textAlign": "center", - "fontFamily": "DM Sans", - "fontSize": 12, - "fontWeight": "600" - }, - { - "type": "text", - "id": "wr9aj", - "name": "daySat", - "fill": "#71717a", - "content": "S", - "textAlign": "center", - "fontFamily": "DM Sans", - "fontSize": 12, - "fontWeight": "600" - }, - { - "type": "text", - "id": "vkGTs", - "name": "daySun", - "fill": "#71717a", - "content": "S", - "textAlign": "center", - "fontFamily": "DM Sans", - "fontSize": 12, - "fontWeight": "600" - } - ] - }, - { - "type": "frame", - "id": "8OVHm", - "name": "calGrid", - "width": "fill_container", - "layout": "vertical", - "gap": 12, - "children": [ - { - "type": "frame", - "id": "PoZdj", - "name": "weekRow1", - "width": "fill_container", - "justifyContent": "space_between", - "children": [ - { - "type": "frame", - "id": "dbYbN", - "name": "d1", - "width": 44, - "layout": "vertical", - "gap": 2, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "KRJ9P", - "name": "dc1", - "width": 32, - "height": 32, - "cornerRadius": 16, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "5Wsnk", - "name": "t1", - "fill": "#52525b", - "content": "29", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "500" - } - ] - }, - { - "type": "text", - "id": "IjHl0", - "name": "am1", - "fill": "#71717a", - "content": " ", - "fontFamily": "DM Sans", - "fontSize": 9, - "fontWeight": "500" - } - ] - }, - { - "type": "frame", - "id": "cBULU", - "name": "d2", - "width": 44, - "layout": "vertical", - "gap": 2, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "PRMhS", - "name": "dc2", - "width": 32, - "height": 32, - "cornerRadius": 16, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "GyZ9e", - "name": "t2", - "fill": "#52525b", - "content": "30", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "500" - } - ] - }, - { - "type": "text", - "id": "K7WwK", - "name": "am2", - "fill": "#71717a", - "content": " ", - "fontFamily": "DM Sans", - "fontSize": 9, - "fontWeight": "500" - } - ] - }, - { - "type": "frame", - "id": "vN0jc", - "name": "d3", - "width": 44, - "layout": "vertical", - "gap": 2, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "pb3in", - "name": "dc3", - "width": 32, - "height": 32, - "cornerRadius": 16, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "owoDO", - "name": "t3", - "fill": "#52525b", - "content": "31", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "500" - } - ] - }, - { - "type": "text", - "id": "zRuua", - "name": "am3", - "fill": "#71717a", - "content": " ", - "fontFamily": "DM Sans", - "fontSize": 9, - "fontWeight": "500" - } - ] - }, - { - "type": "frame", - "id": "y4VZo", - "name": "d4", - "width": 44, - "layout": "vertical", - "gap": 2, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "UOMXP", - "name": "dc4", - "width": 32, - "height": 32, - "fill": "#27272a", - "cornerRadius": 16, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "R3LzE", - "name": "t4", - "fill": "#f4f4f5", - "content": "1", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "600" - } - ] - }, - { - "type": "text", - "id": "U63Y9", - "name": "am4", - "fill": "#71717a", - "content": "128", - "fontFamily": "DM Sans", - "fontSize": 9, - "fontWeight": "500" - } - ] - }, - { - "type": "frame", - "id": "yaSMg", - "name": "d5", - "width": 44, - "layout": "vertical", - "gap": 2, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "c6drb", - "name": "dc5", - "width": 32, - "height": 32, - "fill": "#27272a", - "cornerRadius": 16, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "dKXbg", - "name": "t5", - "fill": "#f4f4f5", - "content": "2", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "600" - } - ] - }, - { - "type": "text", - "id": "UoLQr", - "name": "am5", - "fill": "#71717a", - "content": "45", - "fontFamily": "DM Sans", - "fontSize": 9, - "fontWeight": "500" - } - ] - }, - { - "type": "frame", - "id": "qaMDR", - "name": "d6", - "width": 44, - "layout": "vertical", - "gap": 2, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "gUgyM", - "name": "dc6", - "width": 32, - "height": 32, - "fill": "#27272a", - "cornerRadius": 16, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "tCNCN", - "name": "t6", - "fill": "#f4f4f5", - "content": "3", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "600" - } - ] - }, - { - "type": "text", - "id": "RWZ6K", - "name": "am6", - "fill": "#71717a", - "content": "230", - "fontFamily": "DM Sans", - "fontSize": 9, - "fontWeight": "500" - } - ] - }, - { - "type": "frame", - "id": "1VQYS", - "name": "d7", - "width": 44, - "layout": "vertical", - "gap": 2, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "oAc5u", - "name": "dc7", - "width": 32, - "height": 32, - "fill": "#27272a", - "cornerRadius": 16, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "FSZDz", - "name": "t7", - "fill": "#f4f4f5", - "content": "4", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "600" - } - ] - }, - { - "type": "text", - "id": "Ya1v0", - "name": "am7", - "fill": "#71717a", - "content": "12", - "fontFamily": "DM Sans", - "fontSize": 9, - "fontWeight": "500" - } - ] - } - ] - }, - { - "type": "frame", - "id": "B9B0z", - "name": "weekRow2", - "width": "fill_container", - "justifyContent": "space_between", - "children": [ - { - "type": "frame", - "id": "NXFJE", - "name": "d8", - "width": 44, - "layout": "vertical", - "gap": 2, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "GcXgt", - "name": "dc8", - "width": 32, - "height": 32, - "fill": "#27272a", - "cornerRadius": 16, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "tWHpg", - "name": "t8", - "fill": "#f4f4f5", - "content": "5", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "600" - } - ] - }, - { - "type": "text", - "id": "8hc20", - "name": "am8", - "fill": "#71717a", - "content": "88", - "fontFamily": "DM Sans", - "fontSize": 9, - "fontWeight": "500" - } - ] - }, - { - "type": "frame", - "id": "YL5R1", - "name": "d9", - "width": 44, - "layout": "vertical", - "gap": 2, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "QVmej", - "name": "dc9", - "width": 32, - "height": 32, - "fill": "#27272a", - "cornerRadius": 16, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "uH1vo", - "name": "t9", - "fill": "#f4f4f5", - "content": "6", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "600" - } - ] - }, - { - "type": "text", - "id": "1sMYh", - "name": "am9", - "fill": "#f87171", - "content": "223", - "fontFamily": "DM Sans", - "fontSize": 9, - "fontWeight": "500" - } - ] - }, - { - "type": "frame", - "id": "lb4DB", - "name": "d10", - "width": 44, - "layout": "vertical", - "gap": 2, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "5B45F", - "name": "dc10", - "width": 32, - "height": 32, - "fill": "#27272a", - "cornerRadius": 16, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "c6QXz", - "name": "t10", - "fill": "#f4f4f5", - "content": "7", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "600" - } - ] - }, - { - "type": "text", - "id": "uuanY", - "name": "am10", - "fill": "#71717a", - "content": "15", - "fontFamily": "DM Sans", - "fontSize": 9, - "fontWeight": "500" - } - ] - }, - { - "type": "frame", - "id": "Zy1uP", - "name": "d11", - "width": 44, - "layout": "vertical", - "gap": 2, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "plRut", - "name": "dc11", - "width": 32, - "height": 32, - "fill": "#27272a", - "cornerRadius": 16, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "WjwqP", - "name": "t11", - "fill": "#f4f4f5", - "content": "8", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "600" - } - ] - }, - { - "type": "text", - "id": "jTBmH", - "name": "am11", - "fill": "#71717a", - "content": "34", - "fontFamily": "DM Sans", - "fontSize": 9, - "fontWeight": "500" - } - ] - }, - { - "type": "frame", - "id": "pxQYa", - "name": "d12", - "width": 44, - "layout": "vertical", - "gap": 2, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "N43l5", - "name": "dc12", - "width": 32, - "height": 32, - "fill": "#27272a", - "cornerRadius": 16, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "z4Be0", - "name": "t12", - "fill": "#f4f4f5", - "content": "9", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "600" - } - ] - }, - { - "type": "text", - "id": "oMqUr", - "name": "am12", - "fill": "#71717a", - "content": "120", - "fontFamily": "DM Sans", - "fontSize": 9, - "fontWeight": "500" - } - ] - }, - { - "type": "frame", - "id": "4Izh9", - "name": "d13", - "width": 44, - "layout": "vertical", - "gap": 2, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "T2eDU", - "name": "dc13", - "width": 32, - "height": 32, - "fill": "#27272a", - "cornerRadius": 16, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "SFJdY", - "name": "t13", - "fill": "#f4f4f5", - "content": "10", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "600" - } - ] - }, - { - "type": "text", - "id": "Ka4QA", - "name": "am13", - "fill": "#71717a", - "content": "56", - "fontFamily": "DM Sans", - "fontSize": 9, - "fontWeight": "500" - } - ] - }, - { - "type": "frame", - "id": "3jd1g", - "name": "d14", - "width": 44, - "layout": "vertical", - "gap": 2, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "GzO0j", - "name": "dc14", - "width": 32, - "height": 32, - "fill": "#27272a", - "cornerRadius": 16, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "Cbwzh", - "name": "t14", - "fill": "#f4f4f5", - "content": "11", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "600" - } - ] - }, - { - "type": "text", - "id": "Oj9rX", - "name": "am14", - "fill": "#f87171", - "content": "442", - "fontFamily": "DM Sans", - "fontSize": 9, - "fontWeight": "500" - } - ] - } - ] - }, - { - "type": "frame", - "id": "2G5FH", - "name": "weekRow3", - "width": "fill_container", - "justifyContent": "space_between", - "children": [ - { - "type": "frame", - "id": "IiGDk", - "name": "d15", - "width": 44, - "layout": "vertical", - "gap": 2, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "QSwXv", - "name": "dc15", - "width": 32, - "height": 32, - "fill": "#FF6B6B", - "cornerRadius": 16, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "MEoRp", - "name": "t15", - "fill": "#FFFFFF", - "content": "12", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "700" - } - ] - }, - { - "type": "text", - "id": "UA6Uw", - "name": "am15", - "fill": "#FF6B6B", - "content": "88", - "fontFamily": "DM Sans", - "fontSize": 9, - "fontWeight": "500" - } - ] - }, - { - "type": "frame", - "id": "5cuAY", - "name": "d16", - "width": 44, - "layout": "vertical", - "gap": 2, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "6BPm7", - "name": "dc16", - "width": 32, - "height": 32, - "fill": "#27272a", - "cornerRadius": 16, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "IXOUv", - "name": "t16", - "fill": "#f4f4f5", - "content": "13", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "600" - } - ] - }, - { - "type": "text", - "id": "ZpAVN", - "name": "am16", - "fill": "#71717a", - "content": "12", - "fontFamily": "DM Sans", - "fontSize": 9, - "fontWeight": "500" - } - ] - }, - { - "type": "frame", - "id": "oKVGz", - "name": "d17", - "width": 44, - "layout": "vertical", - "gap": 2, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "2If3g", - "name": "dc17", - "width": 32, - "height": 32, - "fill": "#27272a", - "cornerRadius": 16, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "xsR3f", - "name": "t17", - "fill": "#f4f4f5", - "content": "14", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "600" - } - ] - }, - { - "type": "text", - "id": "tqpv6", - "name": "am17", - "fill": "#71717a", - "content": " ", - "fontFamily": "DM Sans", - "fontSize": 9, - "fontWeight": "500" - } - ] - }, - { - "type": "frame", - "id": "GwHZ1", - "name": "d18", - "width": 44, - "layout": "vertical", - "gap": 2, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "DcFj1", - "name": "dc18", - "width": 32, - "height": 32, - "fill": "#27272a", - "cornerRadius": 16, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "vKyRP", - "name": "t18", - "fill": "#f4f4f5", - "content": "15", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "600" - } - ] - }, - { - "type": "text", - "id": "wN52j", - "name": "am18", - "fill": "#71717a", - "content": " ", - "fontFamily": "DM Sans", - "fontSize": 9, - "fontWeight": "500" - } - ] - }, - { - "type": "frame", - "id": "TUJJ0", - "name": "d19", - "width": 44, - "layout": "vertical", - "gap": 2, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "EVFSp", - "name": "dc19", - "width": 32, - "height": 32, - "fill": "#27272a", - "cornerRadius": 16, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "CTLn4", - "name": "t19", - "fill": "#f4f4f5", - "content": "16", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "600" - } - ] - }, - { - "type": "text", - "id": "NFNmG", - "name": "am19", - "fill": "#f87171", - "content": "542", - "fontFamily": "DM Sans", - "fontSize": 9, - "fontWeight": "500" - } - ] - }, - { - "type": "frame", - "id": "c96XU", - "name": "d20", - "width": 44, - "layout": "vertical", - "gap": 2, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "lkItC", - "name": "dc20", - "width": 32, - "height": 32, - "fill": "#27272a", - "cornerRadius": 16, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "RChCK", - "name": "t20", - "fill": "#f4f4f5", - "content": "17", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "600" - } - ] - }, - { - "type": "text", - "id": "3JM0X", - "name": "am20", - "fill": "#71717a", - "content": " ", - "fontFamily": "DM Sans", - "fontSize": 9, - "fontWeight": "500" - } - ] - }, - { - "type": "frame", - "id": "dPyYV", - "name": "d21", - "width": 44, - "layout": "vertical", - "gap": 2, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "PejUl", - "name": "dc21", - "width": 32, - "height": 32, - "fill": "#27272a", - "cornerRadius": 16, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "zssXc", - "name": "t21", - "fill": "#f4f4f5", - "content": "18", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "600" - } - ] - }, - { - "type": "text", - "id": "B5z1P", - "name": "am21", - "fill": "#71717a", - "content": "56", - "fontFamily": "DM Sans", - "fontSize": 9, - "fontWeight": "500" - } - ] - } - ] - }, - { - "type": "frame", - "id": "A88XH", - "name": "weekRow4", - "width": "fill_container", - "justifyContent": "space_between", - "children": [ - { - "type": "frame", - "id": "G6LcR", - "name": "d22", - "width": 44, - "layout": "vertical", - "gap": 2, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "1hBSX", - "name": "dc22", - "width": 32, - "height": 32, - "fill": "#27272a", - "cornerRadius": 16, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "ZrJQh", - "name": "t22", - "fill": "#f4f4f5", - "content": "19", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "600" - } - ] - }, - { - "type": "text", - "id": "ehhJi", - "name": "am22", - "fill": "#71717a", - "content": " ", - "fontFamily": "DM Sans", - "fontSize": 9, - "fontWeight": "500" - } - ] - }, - { - "type": "frame", - "id": "y8YpI", - "name": "d23", - "width": 44, - "layout": "vertical", - "gap": 2, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "i1JSh", - "name": "dc23", - "width": 32, - "height": 32, - "fill": "#27272a", - "cornerRadius": 16, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "zQzCM", - "name": "t23", - "fill": "#f4f4f5", - "content": "20", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "600" - } - ] - }, - { - "type": "text", - "id": "wysQz", - "name": "am23", - "fill": "#71717a", - "content": " ", - "fontFamily": "DM Sans", - "fontSize": 9, - "fontWeight": "500" - } - ] - }, - { - "type": "frame", - "id": "frJ4V", - "name": "d24", - "width": 44, - "layout": "vertical", - "gap": 2, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "t4m6z", - "name": "dc24", - "width": 32, - "height": 32, - "fill": "#27272a", - "cornerRadius": 16, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "rs2zW", - "name": "t24", - "fill": "#f4f4f5", - "content": "21", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "600" - } - ] - }, - { - "type": "text", - "id": "IbwTE", - "name": "am24", - "fill": "#71717a", - "content": " ", - "fontFamily": "DM Sans", - "fontSize": 9, - "fontWeight": "500" - } - ] - }, - { - "type": "frame", - "id": "gFbFw", - "name": "d25", - "width": 44, - "layout": "vertical", - "gap": 2, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "8RX85", - "name": "dc25", - "width": 32, - "height": 32, - "fill": "#27272a", - "cornerRadius": 16, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "gUEjR", - "name": "t25", - "fill": "#f4f4f5", - "content": "22", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "600" - } - ] - }, - { - "type": "text", - "id": "MiEIb", - "name": "am25", - "fill": "#71717a", - "content": "125", - "fontFamily": "DM Sans", - "fontSize": 9, - "fontWeight": "500" - } - ] - }, - { - "type": "frame", - "id": "mTHMU", - "name": "d26", - "width": 44, - "layout": "vertical", - "gap": 2, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "OMJpQ", - "name": "dc26", - "width": 32, - "height": 32, - "fill": "#27272a", - "cornerRadius": 16, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "H4pzG", - "name": "t26", - "fill": "#f4f4f5", - "content": "23", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "600" - } - ] - }, - { - "type": "text", - "id": "2p2Tu", - "name": "am26", - "fill": "#71717a", - "content": " ", - "fontFamily": "DM Sans", - "fontSize": 9, - "fontWeight": "500" - } - ] - }, - { - "type": "frame", - "id": "tLtM7", - "name": "d27", - "width": 44, - "layout": "vertical", - "gap": 2, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "78SmJ", - "name": "dc27", - "width": 32, - "height": 32, - "fill": "#27272a", - "cornerRadius": 16, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "l4IJO", - "name": "t27", - "fill": "#f4f4f5", - "content": "24", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "600" - } - ] - }, - { - "type": "text", - "id": "lFzIc", - "name": "am27", - "fill": "#71717a", - "content": " ", - "fontFamily": "DM Sans", - "fontSize": 9, - "fontWeight": "500" - } - ] - }, - { - "type": "frame", - "id": "iVLMS", - "name": "d28", - "width": 44, - "layout": "vertical", - "gap": 2, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "IPzvR", - "name": "dc28", - "width": 32, - "height": 32, - "fill": "#27272a", - "cornerRadius": 16, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "YQW7p", - "name": "t28", - "fill": "#f4f4f5", - "content": "25", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "600" - } - ] - }, - { - "type": "text", - "id": "2reDd", - "name": "am28", - "fill": "#71717a", - "content": " ", - "fontFamily": "DM Sans", - "fontSize": 9, - "fontWeight": "500" - } - ] - } - ] - } - ] - } - ] - }, - { - "type": "frame", - "id": "Xm1yI", - "name": "stats", - "width": "fill_container", - "layout": "vertical", - "gap": 16, - "padding": 24, - "children": [ - { - "type": "frame", - "id": "WDuPW", - "name": "statsHeader", - "width": "fill_container", - "justifyContent": "space_between", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "KQpEH", - "name": "statsTitle", - "fill": "#f4f4f5", - "content": "Daily Stats", - "fontFamily": "Bricolage Grotesque", - "fontSize": 18, - "fontWeight": "700" - }, - { - "type": "text", - "id": "pCjJG", - "name": "statsDate", - "fill": "#a1a1aa", - "content": "Jan 12, 2026", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "500" - } - ] - }, - { - "type": "frame", - "id": "UeZs3", - "name": "statsCard", - "width": "fill_container", - "fill": "#18181b", - "cornerRadius": 20, - "layout": "vertical", - "gap": 12, - "padding": 20, - "children": [ - { - "type": "frame", - "id": "OfF2p", - "name": "statsRow", - "width": "fill_container", - "justifyContent": "space_between", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "sCMmg", - "name": "statsLabel", - "fill": "#a1a1aa", - "content": "Total Spent", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "500" - }, - { - "type": "frame", - "id": "0M3qd", - "name": "b1", - "fill": "#451a03", - "cornerRadius": 12, - "padding": [ - 6, - 10 - ], - "children": [ - { - "type": "text", - "id": "SLQhU", - "name": "t29", - "fill": "#fbbf24", - "content": "Daily Limit: 2500", - "fontFamily": "DM Sans", - "fontSize": 11, - "fontWeight": "600" - } - ] - } - ] - }, - { - "type": "text", - "id": "Bigj4", - "name": "statsVal", - "fill": "#f4f4f5", - "content": "¥ 1,248.50", - "fontFamily": "Bricolage Grotesque", - "fontSize": 32, - "fontWeight": "800" - } - ] - } - ] - }, - { - "type": "frame", - "id": "rINjA", - "name": "txnList", - "width": "fill_container", - "layout": "vertical", - "gap": 12, - "padding": 24, - "children": [ - { - "type": "frame", - "id": "YJSsM", - "name": "txnHeader", - "width": "fill_container", - "justifyContent": "space_between", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "enDNe", - "name": "txnTitle", - "fill": "#f4f4f5", - "content": "Transactions", - "fontFamily": "Bricolage Grotesque", - "fontSize": 18, - "fontWeight": "700" - }, - { - "type": "frame", - "id": "Z5Pf4", - "name": "rightActions", - "gap": 8, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "qR22i", - "name": "b2", - "fill": "#064e3b", - "cornerRadius": 12, - "padding": [ - 6, - 12 - ], - "children": [ - { - "type": "text", - "id": "z9Gyq", - "name": "t30", - "fill": "#4ade80", - "content": "3 Items", - "fontFamily": "DM Sans", - "fontSize": 12, - "fontWeight": "600" - } - ] - }, - { - "type": "frame", - "id": "xB6Pm", - "name": "smartBtn", - "fill": "#312e81", - "cornerRadius": 12, - "gap": 6, - "padding": [ - 6, - 12 - ], - "alignItems": "center", - "children": [ - { - "type": "icon_font", - "id": "U9fdo", - "name": "iconSmart", - "width": 14, - "height": 14, - "iconFontName": "sparkles", - "iconFontFamily": "lucide", - "fill": "#6366F1" - }, - { - "type": "text", - "id": "mAvBq", - "name": "labelSmart", - "fill": "#818cf8", - "content": "Smart", - "fontFamily": "DM Sans", - "fontSize": 12, - "fontWeight": "600" - } - ] - } - ] - } - ] - }, - { - "type": "frame", - "id": "8wsnb", - "name": "tCard1", - "width": "fill_container", - "fill": "#18181b", - "cornerRadius": 16, - "gap": 14, - "padding": 16, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "D468k", - "name": "tCat1", - "width": 44, - "height": 44, - "fill": "#27272a", - "cornerRadius": 22, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "icon_font", - "id": "uyr5m", - "name": "icon2", - "width": 20, - "height": 20, - "iconFontName": "star", - "iconFontFamily": "lucide", - "fill": "#FF6B6B" - } - ] - }, - { - "type": "frame", - "id": "b1hWR", - "name": "tContent1", - "width": "fill_container", - "layout": "vertical", - "gap": 2, - "children": [ - { - "type": "text", - "id": "iEA77", - "name": "tName1", - "fill": "#f4f4f5", - "content": "Lunch", - "fontFamily": "DM Sans", - "fontSize": 15, - "fontWeight": "600" - }, - { - "type": "text", - "id": "dUUKV", - "name": "tTime1", - "fill": "#71717a", - "content": "12:30 PM", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "500" - } - ] - }, - { - "type": "text", - "id": "rQZsd", - "name": "tAmount1", - "fill": "#f4f4f5", - "content": "-58.00", - "fontFamily": "DM Sans", - "fontSize": 15, - "fontWeight": "700" - } - ] - }, - { - "type": "frame", - "id": "B65gq", - "name": "tCard2", - "width": "fill_container", - "fill": "#18181b", - "cornerRadius": 16, - "gap": 14, - "padding": 16, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "Y9qhs", - "name": "tCat2", - "width": 44, - "height": 44, - "fill": "#27272a", - "cornerRadius": 22, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "icon_font", - "id": "pCURs", - "name": "icon3", - "width": 20, - "height": 20, - "iconFontName": "coffee", - "iconFontFamily": "lucide", - "fill": "#FCD34D" - } - ] - }, - { - "type": "frame", - "id": "bmO5H", - "name": "tContent2", - "width": "fill_container", - "layout": "vertical", - "gap": 2, - "children": [ - { - "type": "text", - "id": "MfTBA", - "name": "tName2", - "fill": "#f4f4f5", - "content": "Coffee", - "fontFamily": "DM Sans", - "fontSize": 15, - "fontWeight": "600" - }, - { - "type": "text", - "id": "VENve", - "name": "tTime2", - "fill": "#71717a", - "content": "08:15 AM", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "500" - } - ] - }, - { - "type": "text", - "id": "mnUuS", - "name": "tAmount2", - "fill": "#f4f4f5", - "content": "-24.50", - "fontFamily": "DM Sans", - "fontSize": 15, - "fontWeight": "700" - } - ] - } - ] - } - ] - }, - { - "type": "frame", - "id": "uxvyO", - "x": 12, - "y": 14, - "name": "Calendar", - "width": 402, - "fill": "#FFFFFF", - "layout": "vertical", - "children": [ - { - "type": "frame", - "id": "MegAe", - "name": "header", - "rotation": 0.0027546259757699116, - "width": "fill_container", - "gap": 4, - "padding": [ - 8, - 24 - ], - "justifyContent": "space_between", - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "lIUUB", - "name": "headerContent", - "width": 142, - "height": 39, - "layout": "vertical", - "gap": 4, - "children": [ - { - "type": "text", - "id": "TRl09", - "name": "subtitle", - "fill": "#1a1a1a", - "content": "January 2026", - "fontFamily": "DM Sans", - "fontSize": 24, - "fontWeight": "500" - } - ] - }, - { - "type": "frame", - "id": "nHzgV", - "name": "notifBtn", - "width": 44, - "height": 44, - "fill": "#F5F5F5", - "cornerRadius": 22, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "icon_font", - "id": "agodm", - "name": "icon", - "width": 20, - "height": 20, - "iconFontName": "bell", - "iconFontFamily": "lucide", - "fill": "#1A1A1A" - } - ] - } - ] - }, - { - "type": "frame", - "id": "9YwOQ", - "name": "calContainer", - "width": "fill_container", - "layout": "vertical", - "gap": 16, - "padding": 24, - "children": [ - { - "type": "frame", - "id": "Enjcs", - "name": "weekDays", - "width": "fill_container", - "justifyContent": "space_between", - "children": [ - { - "type": "text", - "id": "aezRw", - "name": "dayMon", - "fill": "#9CA3AF", - "content": "M", - "textAlign": "center", - "fontFamily": "DM Sans", - "fontSize": 12, - "fontWeight": "600" - }, - { - "type": "text", - "id": "N2dL2", - "name": "dayTue", - "fill": "#9CA3AF", - "content": "T", - "textAlign": "center", - "fontFamily": "DM Sans", - "fontSize": 12, - "fontWeight": "600" - }, - { - "type": "text", - "id": "Ke1I4", - "name": "dayWed", - "fill": "#9CA3AF", - "content": "W", - "textAlign": "center", - "fontFamily": "DM Sans", - "fontSize": 12, - "fontWeight": "600" - }, - { - "type": "text", - "id": "3dtCH", - "name": "dayThu", - "fill": "#9CA3AF", - "content": "T", - "textAlign": "center", - "fontFamily": "DM Sans", - "fontSize": 12, - "fontWeight": "600" - }, - { - "type": "text", - "id": "LZt56", - "name": "dayFri", - "fill": "#9CA3AF", - "content": "F", - "textAlign": "center", - "fontFamily": "DM Sans", - "fontSize": 12, - "fontWeight": "600" - }, - { - "type": "text", - "id": "Hx4gg", - "name": "daySat", - "fill": "#9CA3AF", - "content": "S", - "textAlign": "center", - "fontFamily": "DM Sans", - "fontSize": 12, - "fontWeight": "600" - }, - { - "type": "text", - "id": "XOxOU", - "name": "daySun", - "fill": "#9CA3AF", - "content": "S", - "textAlign": "center", - "fontFamily": "DM Sans", - "fontSize": 12, - "fontWeight": "600" - } - ] - }, - { - "type": "frame", - "id": "MzWmb", - "name": "calGrid", - "width": "fill_container", - "layout": "vertical", - "gap": 12, - "children": [ - { - "type": "frame", - "id": "XgyNi", - "name": "weekRow1", - "width": "fill_container", - "justifyContent": "space_between", - "children": [ - { - "type": "frame", - "id": "JBD2B", - "name": "d1", - "width": 44, - "layout": "vertical", - "gap": 2, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "XhOQb", - "name": "dc1", - "width": 32, - "height": 32, - "cornerRadius": 16, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "dWILj", - "name": "t1", - "fill": "#E5E7EB", - "content": "29", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "500" - } - ] - }, - { - "type": "text", - "id": "QbkMj", - "name": "am1", - "fill": "#9CA3AF", - "content": " ", - "fontFamily": "DM Sans", - "fontSize": 9, - "fontWeight": "500" - } - ] - }, - { - "type": "frame", - "id": "QtOsX", - "name": "d2", - "width": 44, - "layout": "vertical", - "gap": 2, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "RPQpK", - "name": "dc2", - "width": 32, - "height": 32, - "cornerRadius": 16, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "CBkej", - "name": "t2", - "fill": "#E5E7EB", - "content": "30", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "500" - } - ] - }, - { - "type": "text", - "id": "YJFdL", - "name": "am2", - "fill": "#9CA3AF", - "content": " ", - "fontFamily": "DM Sans", - "fontSize": 9, - "fontWeight": "500" - } - ] - }, - { - "type": "frame", - "id": "Pii3V", - "name": "d3", - "width": 44, - "layout": "vertical", - "gap": 2, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "ue39l", - "name": "dc3", - "width": 32, - "height": 32, - "cornerRadius": 16, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "CHPSF", - "name": "t3", - "fill": "#E5E7EB", - "content": "31", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "500" - } - ] - }, - { - "type": "text", - "id": "7Or04", - "name": "am3", - "fill": "#9CA3AF", - "content": " ", - "fontFamily": "DM Sans", - "fontSize": 9, - "fontWeight": "500" - } - ] - }, - { - "type": "frame", - "id": "I7lCG", - "name": "d4", - "width": 44, - "layout": "vertical", - "gap": 2, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "JQoG1", - "name": "dc4", - "width": 32, - "height": 32, - "fill": "#F3F4F6", - "cornerRadius": 16, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "RPCCr", - "name": "t4", - "fill": "#1A1A1A", - "content": "1", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "600" - } - ] - }, - { - "type": "text", - "id": "gpAZh", - "name": "am4", - "fill": "#9CA3AF", - "content": "128", - "fontFamily": "DM Sans", - "fontSize": 9, - "fontWeight": "500" - } - ] - }, - { - "type": "frame", - "id": "mXGeX", - "name": "d5", - "width": 44, - "layout": "vertical", - "gap": 2, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "URBQs", - "name": "dc5", - "width": 32, - "height": 32, - "fill": "#F3F4F6", - "cornerRadius": 16, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "S9S3w", - "name": "t5", - "fill": "#1A1A1A", - "content": "2", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "600" - } - ] - }, - { - "type": "text", - "id": "N52TS", - "name": "am5", - "fill": "#9CA3AF", - "content": "45", - "fontFamily": "DM Sans", - "fontSize": 9, - "fontWeight": "500" - } - ] - }, - { - "type": "frame", - "id": "loEBf", - "name": "d6", - "width": 44, - "layout": "vertical", - "gap": 2, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "ON05s", - "name": "dc6", - "width": 32, - "height": 32, - "fill": "#F3F4F6", - "cornerRadius": 16, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "6FPhN", - "name": "t6", - "fill": "#1A1A1A", - "content": "3", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "600" - } - ] - }, - { - "type": "text", - "id": "2UghI", - "name": "am6", - "fill": "#9CA3AF", - "content": "230", - "fontFamily": "DM Sans", - "fontSize": 9, - "fontWeight": "500" - } - ] - }, - { - "type": "frame", - "id": "1PGUK", - "name": "d7", - "width": 44, - "layout": "vertical", - "gap": 2, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "ned05", - "name": "dc7", - "width": 32, - "height": 32, - "fill": "#F3F4F6", - "cornerRadius": 16, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "CIR5a", - "name": "t7", - "fill": "#1A1A1A", - "content": "4", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "600" - } - ] - }, - { - "type": "text", - "id": "7BADs", - "name": "am7", - "fill": "#9CA3AF", - "content": "12", - "fontFamily": "DM Sans", - "fontSize": 9, - "fontWeight": "500" - } - ] - } - ] - }, - { - "type": "frame", - "id": "Tz6sw", - "name": "weekRow2", - "width": "fill_container", - "justifyContent": "space_between", - "children": [ - { - "type": "frame", - "id": "v6FYA", - "name": "d8", - "width": 44, - "layout": "vertical", - "gap": 2, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "WrZZI", - "name": "dc8", - "width": 32, - "height": 32, - "fill": "#F3F4F6", - "cornerRadius": 16, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "UdO3y", - "name": "t8", - "fill": "#1A1A1A", - "content": "5", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "600" - } - ] - }, - { - "type": "text", - "id": "fy2Yh", - "name": "am8", - "fill": "#9CA3AF", - "content": "88", - "fontFamily": "DM Sans", - "fontSize": 9, - "fontWeight": "500" - } - ] - }, - { - "type": "frame", - "id": "1Oq9t", - "name": "d9", - "width": 44, - "layout": "vertical", - "gap": 2, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "AjEZ8", - "name": "dc9", - "width": 32, - "height": 32, - "fill": "#F3F4F6", - "cornerRadius": 16, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "qLQsc", - "name": "t9", - "fill": "#1A1A1A", - "content": "6", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "600" - } - ] - }, - { - "type": "text", - "id": "3F9fG", - "name": "am9", - "fill": "#EF4444", - "content": "223", - "fontFamily": "DM Sans", - "fontSize": 9, - "fontWeight": "500" - } - ] - }, - { - "type": "frame", - "id": "srFBq", - "name": "d10", - "width": 44, - "layout": "vertical", - "gap": 2, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "enmB7", - "name": "dc10", - "width": 32, - "height": 32, - "fill": "#F3F4F6", - "cornerRadius": 16, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "TfE49", - "name": "t10", - "fill": "#1A1A1A", - "content": "7", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "600" - } - ] - }, - { - "type": "text", - "id": "jCZPU", - "name": "am10", - "fill": "#9CA3AF", - "content": "15", - "fontFamily": "DM Sans", - "fontSize": 9, - "fontWeight": "500" - } - ] - }, - { - "type": "frame", - "id": "kS4Kf", - "name": "d11", - "width": 44, - "layout": "vertical", - "gap": 2, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "9qTqV", - "name": "dc11", - "width": 32, - "height": 32, - "fill": "#F3F4F6", - "cornerRadius": 16, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "Wjqtw", - "name": "t11", - "fill": "#1A1A1A", - "content": "8", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "600" - } - ] - }, - { - "type": "text", - "id": "fxn2U", - "name": "am11", - "fill": "#9CA3AF", - "content": "34", - "fontFamily": "DM Sans", - "fontSize": 9, - "fontWeight": "500" - } - ] - }, - { - "type": "frame", - "id": "f1EBM", - "name": "d12", - "width": 44, - "layout": "vertical", - "gap": 2, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "InU2S", - "name": "dc12", - "width": 32, - "height": 32, - "fill": "#F3F4F6", - "cornerRadius": 16, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "CSPDo", - "name": "t12", - "fill": "#1A1A1A", - "content": "9", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "600" - } - ] - }, - { - "type": "text", - "id": "NrqQD", - "name": "am12", - "fill": "#9CA3AF", - "content": "120", - "fontFamily": "DM Sans", - "fontSize": 9, - "fontWeight": "500" - } - ] - }, - { - "type": "frame", - "id": "I1fba", - "name": "d13", - "width": 44, - "layout": "vertical", - "gap": 2, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "EAgBn", - "name": "dc13", - "width": 32, - "height": 32, - "fill": "#F3F4F6", - "cornerRadius": 16, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "scRqy", - "name": "t13", - "fill": "#1A1A1A", - "content": "10", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "600" - } - ] - }, - { - "type": "text", - "id": "JOjx8", - "name": "am13", - "fill": "#9CA3AF", - "content": "56", - "fontFamily": "DM Sans", - "fontSize": 9, - "fontWeight": "500" - } - ] - }, - { - "type": "frame", - "id": "JzeYH", - "name": "d14", - "width": 44, - "layout": "vertical", - "gap": 2, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "kk5e3", - "name": "dc14", - "width": 32, - "height": 32, - "fill": "#F3F4F6", - "cornerRadius": 16, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "451de", - "name": "t14", - "fill": "#1A1A1A", - "content": "11", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "600" - } - ] - }, - { - "type": "text", - "id": "FcKGz", - "name": "am14", - "fill": "#EF4444", - "content": "442", - "fontFamily": "DM Sans", - "fontSize": 9, - "fontWeight": "500" - } - ] - } - ] - }, - { - "type": "frame", - "id": "qeTBg", - "name": "weekRow3", - "width": "fill_container", - "justifyContent": "space_between", - "children": [ - { - "type": "frame", - "id": "QBeoF", - "name": "d15", - "width": 44, - "layout": "vertical", - "gap": 2, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "Y4Kg7", - "name": "dc15", - "width": 32, - "height": 32, - "fill": "#FF6B6B", - "cornerRadius": 16, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "8SaXC", - "name": "t15", - "fill": "#FFFFFF", - "content": "12", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "700" - } - ] - }, - { - "type": "text", - "id": "uB5CO", - "name": "am15", - "fill": "#FF6B6B", - "content": "88", - "fontFamily": "DM Sans", - "fontSize": 9, - "fontWeight": "500" - } - ] - }, - { - "type": "frame", - "id": "heNOl", - "name": "d16", - "width": 44, - "layout": "vertical", - "gap": 2, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "CKGtu", - "name": "dc16", - "width": 32, - "height": 32, - "fill": "#F3F4F6", - "cornerRadius": 16, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "PgD7j", - "name": "t16", - "fill": "#1A1A1A", - "content": "13", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "600" - } - ] - }, - { - "type": "text", - "id": "Ycdcs", - "name": "am16", - "fill": "#9CA3AF", - "content": "12", - "fontFamily": "DM Sans", - "fontSize": 9, - "fontWeight": "500" - } - ] - }, - { - "type": "frame", - "id": "hFEQc", - "name": "d17", - "width": 44, - "layout": "vertical", - "gap": 2, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "mXxIa", - "name": "dc17", - "width": 32, - "height": 32, - "fill": "#F3F4F6", - "cornerRadius": 16, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "tCINE", - "name": "t17", - "fill": "#1A1A1A", - "content": "14", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "600" - } - ] - }, - { - "type": "text", - "id": "Lj583", - "name": "am17", - "fill": "#9CA3AF", - "content": " ", - "fontFamily": "DM Sans", - "fontSize": 9, - "fontWeight": "500" - } - ] - }, - { - "type": "frame", - "id": "XJVek", - "name": "d18", - "width": 44, - "layout": "vertical", - "gap": 2, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "IxLqo", - "name": "dc18", - "width": 32, - "height": 32, - "fill": "#F3F4F6", - "cornerRadius": 16, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "gwmL4", - "name": "t18", - "fill": "#1A1A1A", - "content": "15", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "600" - } - ] - }, - { - "type": "text", - "id": "bNCuc", - "name": "am18", - "fill": "#9CA3AF", - "content": " ", - "fontFamily": "DM Sans", - "fontSize": 9, - "fontWeight": "500" - } - ] - }, - { - "type": "frame", - "id": "FPohm", - "name": "d19", - "width": 44, - "layout": "vertical", - "gap": 2, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "TVF3v", - "name": "dc19", - "width": 32, - "height": 32, - "fill": "#F3F4F6", - "cornerRadius": 16, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "63eTB", - "name": "t19", - "fill": "#1A1A1A", - "content": "16", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "600" - } - ] - }, - { - "type": "text", - "id": "xhfrp", - "name": "am19", - "fill": "#EF4444", - "content": "542", - "fontFamily": "DM Sans", - "fontSize": 9, - "fontWeight": "500" - } - ] - }, - { - "type": "frame", - "id": "qFLHx", - "name": "d20", - "width": 44, - "layout": "vertical", - "gap": 2, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "wGsmZ", - "name": "dc20", - "width": 32, - "height": 32, - "fill": "#F3F4F6", - "cornerRadius": 16, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "wNBoF", - "name": "t20", - "fill": "#1A1A1A", - "content": "17", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "600" - } - ] - }, - { - "type": "text", - "id": "dkPzp", - "name": "am20", - "fill": "#9CA3AF", - "content": " ", - "fontFamily": "DM Sans", - "fontSize": 9, - "fontWeight": "500" - } - ] - }, - { - "type": "frame", - "id": "GTesZ", - "name": "d21", - "width": 44, - "layout": "vertical", - "gap": 2, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "3ophX", - "name": "dc21", - "width": 32, - "height": 32, - "fill": "#F3F4F6", - "cornerRadius": 16, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "JWTIJ", - "name": "t21", - "fill": "#1A1A1A", - "content": "18", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "600" - } - ] - }, - { - "type": "text", - "id": "N2f1o", - "name": "am21", - "fill": "#9CA3AF", - "content": "56", - "fontFamily": "DM Sans", - "fontSize": 9, - "fontWeight": "500" - } - ] - } - ] - }, - { - "type": "frame", - "id": "BL0GO", - "name": "weekRow4", - "width": "fill_container", - "justifyContent": "space_between", - "children": [ - { - "type": "frame", - "id": "raA89", - "name": "d22", - "width": 44, - "layout": "vertical", - "gap": 2, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "QGMW6", - "name": "dc22", - "width": 32, - "height": 32, - "fill": "#F3F4F6", - "cornerRadius": 16, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "OX8Sq", - "name": "t22", - "fill": "#1A1A1A", - "content": "19", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "600" - } - ] - }, - { - "type": "text", - "id": "MmNjH", - "name": "am22", - "fill": "#9CA3AF", - "content": " ", - "fontFamily": "DM Sans", - "fontSize": 9, - "fontWeight": "500" - } - ] - }, - { - "type": "frame", - "id": "3fEct", - "name": "d23", - "width": 44, - "layout": "vertical", - "gap": 2, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "JFV6n", - "name": "dc23", - "width": 32, - "height": 32, - "fill": "#F3F4F6", - "cornerRadius": 16, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "A4z3Z", - "name": "t23", - "fill": "#1A1A1A", - "content": "20", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "600" - } - ] - }, - { - "type": "text", - "id": "75jXV", - "name": "am23", - "fill": "#9CA3AF", - "content": " ", - "fontFamily": "DM Sans", - "fontSize": 9, - "fontWeight": "500" - } - ] - }, - { - "type": "frame", - "id": "YhsCg", - "name": "d24", - "width": 44, - "layout": "vertical", - "gap": 2, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "4bAao", - "name": "dc24", - "width": 32, - "height": 32, - "fill": "#F3F4F6", - "cornerRadius": 16, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "JtMNu", - "name": "t24", - "fill": "#1A1A1A", - "content": "21", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "600" - } - ] - }, - { - "type": "text", - "id": "uK3E1", - "name": "am24", - "fill": "#9CA3AF", - "content": " ", - "fontFamily": "DM Sans", - "fontSize": 9, - "fontWeight": "500" - } - ] - }, - { - "type": "frame", - "id": "f8Paa", - "name": "d25", - "width": 44, - "layout": "vertical", - "gap": 2, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "0ePSV", - "name": "dc25", - "width": 32, - "height": 32, - "fill": "#F3F4F6", - "cornerRadius": 16, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "ObCLU", - "name": "t25", - "fill": "#1A1A1A", - "content": "22", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "600" - } - ] - }, - { - "type": "text", - "id": "kC1um", - "name": "am25", - "fill": "#9CA3AF", - "content": "125", - "fontFamily": "DM Sans", - "fontSize": 9, - "fontWeight": "500" - } - ] - }, - { - "type": "frame", - "id": "XVmli", - "name": "d26", - "width": 44, - "layout": "vertical", - "gap": 2, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "XCBcY", - "name": "dc26", - "width": 32, - "height": 32, - "fill": "#F3F4F6", - "cornerRadius": 16, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "kP95q", - "name": "t26", - "fill": "#1A1A1A", - "content": "23", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "600" - } - ] - }, - { - "type": "text", - "id": "RK4Ry", - "name": "am26", - "fill": "#9CA3AF", - "content": " ", - "fontFamily": "DM Sans", - "fontSize": 9, - "fontWeight": "500" - } - ] - }, - { - "type": "frame", - "id": "vL4sE", - "name": "d27", - "width": 44, - "layout": "vertical", - "gap": 2, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "tP6nn", - "name": "dc27", - "width": 32, - "height": 32, - "fill": "#F3F4F6", - "cornerRadius": 16, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "VrxS3", - "name": "t27", - "fill": "#1A1A1A", - "content": "24", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "600" - } - ] - }, - { - "type": "text", - "id": "mvwdI", - "name": "am27", - "fill": "#9CA3AF", - "content": " ", - "fontFamily": "DM Sans", - "fontSize": 9, - "fontWeight": "500" - } - ] - }, - { - "type": "frame", - "id": "nx6xt", - "name": "d28", - "width": 44, - "layout": "vertical", - "gap": 2, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "gUQjY", - "name": "dc28", - "width": 32, - "height": 32, - "fill": "#F3F4F6", - "cornerRadius": 16, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "ro5rV", - "name": "t28", - "fill": "#1A1A1A", - "content": "25", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "600" - } - ] - }, - { - "type": "text", - "id": "xXWh0", - "name": "am28", - "fill": "#9CA3AF", - "content": " ", - "fontFamily": "DM Sans", - "fontSize": 9, - "fontWeight": "500" - } - ] - } - ] - } - ] - } - ] - }, - { - "type": "frame", - "id": "vfW2m", - "name": "stats", - "width": "fill_container", - "layout": "vertical", - "gap": 16, - "padding": 24, - "children": [ - { - "type": "frame", - "id": "ycEV7", - "name": "statsHeader", - "width": "fill_container", - "justifyContent": "space_between", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "LMdOg", - "name": "statsTitle", - "fill": "#1A1A1A", - "content": "Daily Stats", - "fontFamily": "Bricolage Grotesque", - "fontSize": 18, - "fontWeight": "700" - }, - { - "type": "text", - "id": "1TSK3", - "name": "statsDate", - "fill": "#6B7280", - "content": "Jan 12, 2026", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "500" - } - ] - }, - { - "type": "frame", - "id": "JY4Fd", - "name": "statsCard", - "width": "fill_container", - "fill": "#F6F7F8", - "cornerRadius": 20, - "layout": "vertical", - "gap": 12, - "padding": 20, - "children": [ - { - "type": "frame", - "id": "UiJYD", - "name": "statsRow", - "width": "fill_container", - "justifyContent": "space_between", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "QBHWG", - "name": "statsLabel", - "fill": "#6B7280", - "content": "Total Spent", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "500" - }, - { - "type": "frame", - "id": "6TcZ1", - "name": "b1", - "fill": "#FFFBEB", - "cornerRadius": 12, - "padding": [ - 6, - 10 - ], - "children": [ - { - "type": "text", - "id": "znYtx", - "name": "t29", - "fill": "#D97706", - "content": "Daily Limit: 2500", - "fontFamily": "DM Sans", - "fontSize": 11, - "fontWeight": "600" - } - ] - } - ] - }, - { - "type": "text", - "id": "nNirO", - "name": "statsVal", - "fill": "#1A1A1A", - "content": "¥ 1,248.50", - "fontFamily": "Bricolage Grotesque", - "fontSize": 32, - "fontWeight": "800" - } - ] - } - ] - }, - { - "type": "frame", - "id": "zIeUQ", - "name": "txnList", - "width": "fill_container", - "layout": "vertical", - "gap": 12, - "padding": 24, - "children": [ - { - "type": "frame", - "id": "eL4ER", - "name": "txnHeader", - "width": "fill_container", - "justifyContent": "space_between", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "78oRL", - "name": "txnTitle", - "fill": "#1A1A1A", - "content": "Transactions", - "fontFamily": "Bricolage Grotesque", - "fontSize": 18, - "fontWeight": "700" - }, - { - "type": "frame", - "id": "QEbB1", - "name": "rightActions", - "gap": 8, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "2qH3a", - "name": "b2", - "fill": "#F0FDF4", - "cornerRadius": 12, - "padding": [ - 6, - 12 - ], - "children": [ - { - "type": "text", - "id": "DkXPS", - "name": "t30", - "fill": "#22C55E", - "content": "3 Items", - "fontFamily": "DM Sans", - "fontSize": 12, - "fontWeight": "600" - } - ] - }, - { - "type": "frame", - "id": "NnlVI", - "name": "smartBtn", - "fill": "#E0E7FF", - "cornerRadius": 12, - "gap": 6, - "padding": [ - 6, - 12 - ], - "alignItems": "center", - "children": [ - { - "type": "icon_font", - "id": "3soq6", - "name": "iconSmart", - "width": 14, - "height": 14, - "iconFontName": "sparkles", - "iconFontFamily": "lucide", - "fill": "#6366F1" - }, - { - "type": "text", - "id": "nbGbR", - "name": "labelSmart", - "fill": "#6366F1", - "content": "Smart", - "fontFamily": "DM Sans", - "fontSize": 12, - "fontWeight": "600" - } - ] - } - ] - } - ] - }, - { - "type": "frame", - "id": "5H1y6", - "name": "tCard1", - "width": "fill_container", - "fill": "#F6F7F8", - "cornerRadius": 16, - "gap": 14, - "padding": 16, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "jJBQ3", - "name": "tCat1", - "width": 44, - "height": 44, - "fill": "#FFFFFF", - "cornerRadius": 22, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "icon_font", - "id": "99rCw", - "name": "icon2", - "width": 20, - "height": 20, - "iconFontName": "star", - "iconFontFamily": "lucide", - "fill": "#FF6B6B" - } - ] - }, - { - "type": "frame", - "id": "1R9if", - "name": "tContent1", - "width": "fill_container", - "layout": "vertical", - "gap": 2, - "children": [ - { - "type": "text", - "id": "tD6vR", - "name": "tName1", - "fill": "#1A1A1A", - "content": "Lunch", - "fontFamily": "DM Sans", - "fontSize": 15, - "fontWeight": "600" - }, - { - "type": "text", - "id": "PmzGy", - "name": "tTime1", - "fill": "#9CA3AF", - "content": "12:30 PM", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "500" - } - ] - }, - { - "type": "text", - "id": "0u2rh", - "name": "tAmount1", - "fill": "#1A1A1A", - "content": "-58.00", - "fontFamily": "DM Sans", - "fontSize": 15, - "fontWeight": "700" - } - ] - }, - { - "type": "frame", - "id": "GgQ7u", - "name": "tCard2", - "width": "fill_container", - "fill": "#F6F7F8", - "cornerRadius": 16, - "gap": 14, - "padding": 16, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "HVEFt", - "name": "tCat2", - "width": 44, - "height": 44, - "fill": "#FFFFFF", - "cornerRadius": 22, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "icon_font", - "id": "CiSSG", - "name": "icon3", - "width": 20, - "height": 20, - "iconFontName": "coffee", - "iconFontFamily": "lucide", - "fill": "#FCD34D" - } - ] - }, - { - "type": "frame", - "id": "4Bu2K", - "name": "tContent2", - "width": "fill_container", - "layout": "vertical", - "gap": 2, - "children": [ - { - "type": "text", - "id": "WeLFp", - "name": "tName2", - "fill": "#1A1A1A", - "content": "Coffee", - "fontFamily": "DM Sans", - "fontSize": 15, - "fontWeight": "600" - }, - { - "type": "text", - "id": "MpyeL", - "name": "tTime2", - "fill": "#9CA3AF", - "content": "08:15 AM", - "fontFamily": "DM Sans", - "fontSize": 13, - "fontWeight": "500" - } - ] - }, - { - "type": "text", - "id": "jUaEO", - "name": "tAmount2", - "fill": "#1A1A1A", - "content": "-24.50", - "fontFamily": "DM Sans", - "fontSize": 15, - "fontWeight": "700" - } - ] - } - ] - } - ] - } - ] - }, - { - "type": "frame", - "id": "5SxtQ", - "x": -464, - "y": 381, - "name": "Stats V4 (SVG Fixed)", - "width": 446, - "height": 1521, - "fill": "#0C0C0C", - "cornerRadius": 16, - "layout": "vertical", - "gap": 24, - "padding": [ - 32, - 24 - ], - "justifyContent": "space_between", - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "AgxRj", - "name": "headerSection", - "width": "fill_container", - "justifyContent": "space_between", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "zhPfk", - "name": "headerTitle", - "fill": "#FFFFFF", - "content": "January 2026", - "fontFamily": "Sora", - "fontSize": 18, - "fontWeight": "normal" - }, - { - "type": "text", - "id": "9P4uj", - "name": "headerSubtitle", - "fill": "#8A8A8A", - "content": "Expenses", - "fontFamily": "Inter", - "fontSize": 14, - "fontWeight": "normal" - } - ] - }, - { - "type": "frame", - "id": "mtdwX", - "name": "totalArea", - "width": "fill_container", - "layout": "vertical", - "gap": 8, - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "uQiaE", - "name": "totalLabel", - "fill": "#8A8A8A", - "content": "Total Expenses", - "textAlign": "center", - "fontFamily": "Inter", - "fontSize": 13, - "fontWeight": "normal", - "letterSpacing": 1.5 - }, - { - "type": "text", - "id": "S4Fs3", - "name": "totalValue", - "fill": "#FFFFFF", - "content": "¥4,030", - "textAlign": "center", - "fontFamily": "Sora", - "fontSize": 56, - "fontWeight": "normal", - "letterSpacing": -2.5 - } - ] - }, - { - "type": "frame", - "id": "AUnCh", - "name": "header", - "width": "fill_container", - "height": 70, - "padding": [ - 20, - 24 - ], - "justifyContent": "space_between", - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "OgWZe", - "name": "dateWrap", - "gap": 6, - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "WGpyI", - "name": "dateTxt", - "fill": "#f4f4f5", - "content": "January 2026", - "fontFamily": "Bricolage Grotesque", - "fontSize": 20, - "fontWeight": "700" - }, - { - "type": "path", - "id": "nKPIO", - "name": "dateIcon", - "width": 16, - "height": 16 - } - ] - }, - { - "type": "path", - "id": "53ZP5", - "name": "chatIcon", - "width": 24, - "height": 24 - } - ] - }, - { - "type": "frame", - "id": "6top3", - "name": "statCards", - "width": "fill_container", - "gap": 12, - "children": [ - { - "type": "frame", - "id": "BkvW7", - "name": "avgCard", - "width": "fill_container", - "fill": "#1A1A1A", - "cornerRadius": 12, - "layout": "vertical", - "gap": 8, - "padding": 16, - "children": [ - { - "type": "text", - "id": "LWquF", - "name": "avgValue", - "fill": "#FFFFFF", - "content": "¥1,343", - "fontFamily": "Sora", - "fontSize": 24, - "fontWeight": "normal" - }, - { - "type": "text", - "id": "85Pqz", - "name": "avgLabel", - "fill": "#8A8A8A", - "content": "Daily Average", - "fontFamily": "Inter", - "fontSize": 12, - "fontWeight": "normal" - } - ] - }, - { - "type": "frame", - "id": "64JhR", - "name": "itemCard", - "width": "fill_container", - "fill": "#1A1A1A", - "cornerRadius": 12, - "layout": "vertical", - "gap": 8, - "padding": 16, - "children": [ - { - "type": "text", - "id": "hd4i6", - "name": "itemValue", - "fill": "#FFFFFF", - "content": "25", - "fontFamily": "Sora", - "fontSize": 24, - "fontWeight": "normal" - }, - { - "type": "text", - "id": "s7zBo", - "name": "itemLabel", - "fill": "#8A8A8A", - "content": "Total Items", - "fontFamily": "Inter", - "fontSize": 12, - "fontWeight": "normal" - } - ] - } - ] - }, - { - "type": "frame", - "id": "1LyRk", - "name": "finalDivider", - "width": "fill_container", - "height": 1, - "fill": "#2A2A2A" - }, - { - "type": "frame", - "id": "E8Pl1", - "name": "progressSection", - "width": "fill_container", - "layout": "vertical", - "gap": 16, - "children": [ - { - "type": "frame", - "id": "tlLKR", - "name": "progressBar", - "clip": true, - "width": "fill_container", - "height": 6, - "cornerRadius": 3, - "children": [ - { - "type": "frame", - "id": "d8iv1", - "name": "foodProgress", - "width": 120, - "height": "fill_container", - "fill": "#FF3B30" - }, - { - "type": "frame", - "id": "QKEEF", - "name": "transportProgress", - "width": 120, - "height": "fill_container", - "fill": "#3B82F6" - }, - { - "type": "frame", - "id": "A9PpK", - "name": "shoppingProgress", - "width": 118, - "height": "fill_container", - "fill": "#8B5CF6" - } - ] - }, - { - "type": "frame", - "id": "G97sN", - "name": "legendRow", - "width": "fill_container", - "gap": 16, - "justifyContent": "center", - "children": [ - { - "type": "frame", - "id": "B5u2r", - "name": "foodLegend", - "gap": 6, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "JXt6W", - "name": "foodDot", - "width": 8, - "height": 8, - "fill": "#FF3B30", - "cornerRadius": 4 - }, - { - "type": "text", - "id": "cQYfJ", - "name": "foodText", - "fill": "#8A8A8A", - "content": "Food", - "fontFamily": "Inter", - "fontSize": 11, - "fontWeight": "normal" - } - ] - }, - { - "type": "frame", - "id": "zNx0h", - "name": "transportLegend", - "gap": 6, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "YbZIK", - "name": "transportDot", - "width": 8, - "height": 8, - "fill": "#3B82F6", - "cornerRadius": 4 - }, - { - "type": "text", - "id": "zNN1M", - "name": "transportText", - "fill": "#8A8A8A", - "content": "Transport", - "fontFamily": "Inter", - "fontSize": 11, - "fontWeight": "normal" - } - ] - }, - { - "type": "frame", - "id": "CBwOl", - "name": "shoppingLegend", - "gap": 6, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "fJaZb", - "name": "shoppingDot", - "width": 8, - "height": 8, - "fill": "#8B5CF6", - "cornerRadius": 4 - }, - { - "type": "text", - "id": "InVQ4", - "name": "shoppingText", - "fill": "#8A8A8A", - "content": "Shopping", - "fontFamily": "Inter", - "fontSize": 11, - "fontWeight": "normal" - } - ] - } - ] - } - ] - }, - { - "type": "frame", - "id": "JuK2m", - "name": "categorySection", - "width": "fill_container", - "layout": "vertical", - "gap": 16, - "children": [ - { - "type": "frame", - "id": "FF8uc", - "name": "categoryHeader", - "gap": 12, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "LjVs8", - "name": "categoryLine", - "width": 24, - "height": 2, - "fill": "#FF3B30" - }, - { - "type": "text", - "id": "AC0ei", - "name": "categoryLabel", - "fill": "#8A8A8A", - "content": "CATEGORIES", - "fontFamily": "Inter", - "fontSize": 11, - "fontWeight": "normal", - "letterSpacing": 2 - } - ] - }, - { - "type": "frame", - "id": "ytvad", - "name": "listSection", - "width": "fill_container", - "layout": "vertical", - "gap": 12, - "children": [ - { - "type": "frame", - "id": "1GHZJ", - "name": "card1", - "width": "fill_container", - "fill": "#1A1A1A", - "cornerRadius": 12, - "gap": 16, - "padding": 16, - "justifyContent": "space_between", - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "0L649", - "name": "card1Left", - "gap": 12, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "81DZv", - "name": "card1Icon", - "metadata": { - "type": "unsplash", - "username": "maartenvnmlct", - "link": "https://unsplash.com/@maartenvnmlct", - "author": "Maarten" - }, - "width": 40, - "height": 40, - "fill": { - "type": "image", - "enabled": true, - "url": "https://images.unsplash.com/photo-1761245193924-53a5a4bed9ef?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w4NDM0ODN8MHwxfHJhbmRvbXx8fHx8fHx8fDE3Njk2NjY5ODF8&ixlib=rb-4.1.0&q=80&w=1080", - "mode": "fill" - }, - "cornerRadius": 20, - "layout": "none" - }, - { - "type": "frame", - "id": "0k8Or", - "name": "card1Text", - "layout": "vertical", - "gap": 4, - "children": [ - { - "type": "text", - "id": "tC3eF", - "name": "card1Title", - "fill": "#FFFFFF", - "content": "Food & Dining", - "fontFamily": "Inter", - "fontSize": 14, - "fontWeight": "normal" - }, - { - "type": "text", - "id": "mD5ou", - "name": "card1Sub", - "fill": "#8A8A8A", - "content": "12 items", - "fontFamily": "Inter", - "fontSize": 12, - "fontWeight": "normal" - } - ] - } - ] - }, - { - "type": "text", - "id": "hvR91", - "name": "card1Right", - "fill": "#FFFFFF", - "content": "-¥840", - "fontFamily": "Sora", - "fontSize": 16, - "fontWeight": "normal" - } - ] - }, - { - "type": "frame", - "id": "EziPa", - "name": "card2", - "width": "fill_container", - "fill": "#1A1A1A", - "cornerRadius": 12, - "gap": 16, - "padding": 16, - "justifyContent": "space_between", - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "ddTYH", - "name": "card2Left", - "gap": 12, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "Fvpdk", - "name": "card2Icon", - "metadata": { - "type": "unsplash", - "username": "raphaelrousseauphotography", - "link": "https://unsplash.com/@raphaelrousseauphotography", - "author": "Raphael Rousseau" - }, - "width": 40, - "height": 40, - "fill": { - "type": "image", - "enabled": true, - "url": "https://images.unsplash.com/photo-1768839898435-d685ae66331c?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w4NDM0ODN8MHwxfHJhbmRvbXx8fHx8fHx8fDE3Njk2NjY5ODF8&ixlib=rb-4.1.0&q=80&w=1080", - "mode": "fill" - }, - "cornerRadius": 20, - "layout": "none" - }, - { - "type": "frame", - "id": "NsbZA", - "name": "card2Text", - "layout": "vertical", - "gap": 4, - "children": [ - { - "type": "text", - "id": "m22ip", - "name": "card2Title", - "fill": "#FFFFFF", - "content": "Transport", - "fontFamily": "Inter", - "fontSize": 14, - "fontWeight": "normal" - }, - { - "type": "text", - "id": "6Qww5", - "name": "card2Sub", - "fill": "#8A8A8A", - "content": "8 trips", - "fontFamily": "Inter", - "fontSize": 12, - "fontWeight": "normal" - } - ] - } - ] - }, - { - "type": "text", - "id": "6V8v3", - "name": "card2Right", - "fill": "#FFFFFF", - "content": "-¥620", - "fontFamily": "Sora", - "fontSize": 16, - "fontWeight": "normal" - } - ] - }, - { - "type": "frame", - "id": "yVthk", - "name": "card3", - "width": "fill_container", - "fill": "#1A1A1A", - "cornerRadius": 12, - "gap": 16, - "padding": 16, - "justifyContent": "space_between", - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "SdQDB", - "name": "card3Left", - "gap": 12, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "7TbFz", - "name": "card3Icon", - "metadata": { - "type": "unsplash", - "username": "silverkblack", - "link": "https://unsplash.com/@silverkblack", - "author": "Vitaly Gariev" - }, - "width": 40, - "height": 40, - "fill": { - "type": "image", - "enabled": true, - "url": "https://images.unsplash.com/photo-1758525223453-06095a7459ce?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w4NDM0ODN8MHwxfHJhbmRvbXx8fHx8fHx8fDE3Njk2NjY5ODJ8&ixlib=rb-4.1.0&q=80&w=1080", - "mode": "fill" - }, - "cornerRadius": 20, - "layout": "none" - }, - { - "type": "frame", - "id": "yixKH", - "name": "card3Text", - "layout": "vertical", - "gap": 4, - "children": [ - { - "type": "text", - "id": "eHVkB", - "name": "card3Title", - "fill": "#FFFFFF", - "content": "Shopping", - "fontFamily": "Inter", - "fontSize": 14, - "fontWeight": "normal" - }, - { - "type": "text", - "id": "ILEMU", - "name": "card3Sub", - "fill": "#8A8A8A", - "content": "5 items", - "fontFamily": "Inter", - "fontSize": 12, - "fontWeight": "normal" - } - ] - } - ] - }, - { - "type": "text", - "id": "xl30n", - "name": "card3Right", - "fill": "#FFFFFF", - "content": "-¥650", - "fontFamily": "Sora", - "fontSize": 16, - "fontWeight": "normal" - } - ] - } - ] - } - ] - }, - { - "type": "frame", - "id": "KIXMB", - "name": "content", - "width": "fill_container", - "height": "fill_container", - "layout": "vertical", - "gap": 16, - "padding": [ - 0, - 24, - 24, - 24 - ], - "children": [ - { - "type": "frame", - "id": "8XMYQ", - "name": "chartCard", - "width": "fill_container", - "fill": "#18181b", - "cornerRadius": 24, - "layout": "vertical", - "gap": 24, - "padding": 24, - "children": [ - { - "type": "frame", - "id": "ce8uZ", - "name": "ccHeader", - "width": "fill_container", - "justifyContent": "space_between", - "children": [ - { - "type": "text", - "id": "CUB0A", - "name": "ccTitle", - "fill": "#f4f4f5", - "content": "Expenses", - "fontFamily": "DM Sans", - "fontSize": 16, - "fontWeight": "600" - }, - { - "type": "text", - "id": "LRlb5", - "name": "ccAmt", - "fill": "#a1a1aa", - "content": "¥ 2,520", - "fontFamily": "Bricolage Grotesque", - "fontSize": 16, - "fontWeight": "600" - } - ] - }, - { - "type": "frame", - "id": "X9Vx2", - "name": "chartRow", - "width": "fill_container", - "gap": 24, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "JmTXA", - "name": "svgBox", - "width": 160, - "height": 160, - "layout": "none", - "children": [ - { - "type": "path", - "id": "OABrB", - "x": 0, - "y": 0, - "name": "slice1", - "fill": "#f59e0b", - "width": 160, - "height": 160 - }, - { - "type": "path", - "id": "jYhTp", - "x": 0, - "y": 0, - "name": "slice2", - "fill": "#3b82f6", - "width": 160, - "height": 160 - }, - { - "type": "path", - "id": "FlwfN", - "x": 0, - "y": 0, - "name": "slice3", - "fill": "#ec4899", - "width": 160, - "height": 160 - }, - { - "type": "ellipse", - "id": "GdBes", - "x": 30, - "y": 30, - "name": "hole", - "fill": "#18181b", - "width": 100, - "height": 100 - }, - { - "type": "frame", - "id": "YmYtY", - "x": 0, - "y": 0, - "name": "centerFrame", - "width": 160, - "height": 160, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "bk1NG", - "name": "centerTxt", - "fill": "#71717a", - "content": "Total", - "fontFamily": "DM Sans", - "fontSize": 12, - "fontWeight": "normal" - } - ] - } - ] - } - ] - }, - { - "type": "frame", - "id": "iQy2O", - "name": "legendRow", - "width": "fill_container", - "padding": [ - 0, - 12 - ], - "justifyContent": "space_between", - "children": [ - { - "type": "frame", - "id": "fSyOk", - "name": "l1", - "layout": "vertical", - "gap": 4, - "alignItems": "center", - "children": [ - { - "type": "ellipse", - "id": "briMI", - "name": "l1Dot", - "fill": "#f59e0b", - "width": 8, - "height": 8 - }, - { - "type": "text", - "id": "TWYYu", - "name": "l1Txt", - "fill": "#f4f4f5", - "content": "Food", - "fontFamily": "DM Sans", - "fontSize": 12, - "fontWeight": "normal" - }, - { - "type": "text", - "id": "EZcAF", - "name": "l1Pct", - "fill": "#71717a", - "content": "33%", - "fontFamily": "Inter", - "fontSize": 12, - "fontWeight": "normal" - } - ] - }, - { - "type": "frame", - "id": "Ehjk4", - "name": "l2", - "layout": "vertical", - "gap": 4, - "alignItems": "center", - "children": [ - { - "type": "ellipse", - "id": "w1Qb8", - "name": "l2Dot", - "fill": "#3b82f6", - "width": 8, - "height": 8 - }, - { - "type": "text", - "id": "4DosX", - "name": "l2Txt", - "fill": "#f4f4f5", - "content": "Transport", - "fontFamily": "DM Sans", - "fontSize": 12, - "fontWeight": "normal" - }, - { - "type": "text", - "id": "pK1dD", - "name": "l2Pct", - "fill": "#71717a", - "content": "33%", - "fontFamily": "Inter", - "fontSize": 12, - "fontWeight": "normal" - } - ] - }, - { - "type": "frame", - "id": "wu9Cc", - "name": "l3", - "layout": "vertical", - "gap": 4, - "alignItems": "center", - "children": [ - { - "type": "ellipse", - "id": "t0vBe", - "name": "l3Dot", - "fill": "#ec4899", - "width": 8, - "height": 8 - }, - { - "type": "text", - "id": "UdWlw", - "name": "l3Txt", - "fill": "#f4f4f5", - "content": "Shopping", - "fontFamily": "DM Sans", - "fontSize": 12, - "fontWeight": "normal" - }, - { - "type": "text", - "id": "nAMYg", - "name": "l3Pct", - "fill": "#71717a", - "content": "33%", - "fontFamily": "Inter", - "fontSize": 12, - "fontWeight": "normal" - } - ] - } - ] - } - ] - }, - { - "type": "frame", - "id": "HU4yM", - "name": "CategoryGrid", - "width": "fill_container", - "layout": "vertical", - "gap": 12, - "children": [ - { - "type": "frame", - "id": "tmAdW", - "name": "ci1", - "width": "fill_container", - "height": 72, - "fill": "#18181b", - "cornerRadius": 16, - "padding": [ - 0, - 16 - ], - "justifyContent": "space_between", - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "5gmc6", - "name": "ci1Left", - "gap": 12, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "UMsdW", - "name": "ci1Icon", - "width": 40, - "height": 40, - "fill": "#27272a", - "cornerRadius": 10, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "jdOef", - "name": "ci1Emoji", - "content": "🍔", - "fontFamily": "Inter", - "fontSize": 18, - "fontWeight": "normal" - } - ] - }, - { - "type": "frame", - "id": "bugbO", - "name": "ci1Text", - "layout": "vertical", - "gap": 2, - "children": [ - { - "type": "text", - "id": "Z0h6e", - "name": "ci1Name", - "fill": "#f4f4f5", - "content": "Food & Dining", - "fontFamily": "DM Sans", - "fontSize": 14, - "fontWeight": "500" - }, - { - "type": "text", - "id": "gwJsz", - "name": "ci1Sub", - "fill": "#71717a", - "content": "12 txns", - "fontFamily": "Inter", - "fontSize": 12, - "fontWeight": "normal" - } - ] - } - ] - }, - { - "type": "text", - "id": "g58W4", - "name": "ci1Right", - "fill": "#f4f4f5", - "content": "- ¥840", - "fontFamily": "Bricolage Grotesque", - "fontSize": 14, - "fontWeight": "600" - } - ] - }, - { - "type": "frame", - "id": "h1g4Q", - "name": "ci2", - "width": "fill_container", - "height": 72, - "fill": "#18181b", - "cornerRadius": 16, - "padding": [ - 0, - 16 - ], - "justifyContent": "space_between", - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "IwdqZ", - "name": "ci2Left", - "gap": 12, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "FRUpc", - "name": "ci2Icon", - "width": 40, - "height": 40, - "fill": "#27272a", - "cornerRadius": 10, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "hyt7m", - "name": "ci2Emoji", - "content": "🚇", - "fontFamily": "Inter", - "fontSize": 18, - "fontWeight": "normal" - } - ] - }, - { - "type": "frame", - "id": "RjBVz", - "name": "ci2Text", - "layout": "vertical", - "gap": 2, - "children": [ - { - "type": "text", - "id": "SAZBV", - "name": "ci2Name", - "fill": "#f4f4f5", - "content": "Transport", - "fontFamily": "DM Sans", - "fontSize": 14, - "fontWeight": "500" - }, - { - "type": "text", - "id": "pN7Du", - "name": "ci2Sub", - "fill": "#71717a", - "content": "8 txns", - "fontFamily": "Inter", - "fontSize": 12, - "fontWeight": "normal" - } - ] - } - ] - }, - { - "type": "text", - "id": "T8Gqv", - "name": "ci2Right", - "fill": "#f4f4f5", - "content": "- ¥620", - "fontFamily": "Bricolage Grotesque", - "fontSize": 14, - "fontWeight": "600" - } - ] - }, - { - "type": "frame", - "id": "VHheL", - "name": "ci3", - "width": "fill_container", - "height": 72, - "fill": "#18181b", - "cornerRadius": 16, - "padding": [ - 0, - 16 - ], - "justifyContent": "space_between", - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "kYgLv", - "name": "ci3Left", - "gap": 12, - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "6pj68", - "name": "ci3Icon", - "width": 40, - "height": 40, - "fill": "#27272a", - "cornerRadius": 10, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "text", - "id": "BpZke", - "name": "ci3Emoji", - "content": "🛍️", - "fontFamily": "Inter", - "fontSize": 18, - "fontWeight": "normal" - } - ] - }, - { - "type": "frame", - "id": "AmZVA", - "name": "ci3Text", - "layout": "vertical", - "gap": 2, - "children": [ - { - "type": "text", - "id": "Lzb3y", - "name": "ci3Name", - "fill": "#f4f4f5", - "content": "Shopping", - "fontFamily": "DM Sans", - "fontSize": 14, - "fontWeight": "500" - }, - { - "type": "text", - "id": "q5Tfg", - "name": "ci3Sub", - "fill": "#71717a", - "content": "4 txns", - "fontFamily": "Inter", - "fontSize": 12, - "fontWeight": "normal" - } - ] - } - ] - }, - { - "type": "text", - "id": "ckZ4L", - "name": "ci3Right", - "fill": "#f4f4f5", - "content": "- ¥450", - "fontFamily": "Bricolage Grotesque", - "fontSize": 14, - "fontWeight": "600" - } - ] - } - ] - } - ] - }, - { - "type": "frame", - "id": "t0wmE", - "name": "navigation", - "width": "fill_container", - "height": 83, - "fill": "#09090B", - "justifyContent": "space_around", - "alignItems": "center", - "children": [ - { - "type": "frame", - "id": "N4EkI", - "name": "nav1", - "layout": "vertical", - "gap": 4, - "alignItems": "center", - "children": [ - { - "type": "path", - "id": "AXq3Q", - "name": "nav1Icon", - "width": 24, - "height": 24 - }, - { - "type": "text", - "id": "NitpS", - "name": "nav1Txt", - "fill": "#71717a", - "content": "Home", - "fontFamily": "DM Sans", - "fontSize": 10, - "fontWeight": "normal" - } - ] - }, - { - "type": "frame", - "id": "wYYDU", - "name": "nav2", - "layout": "vertical", - "gap": 4, - "alignItems": "center", - "children": [ - { - "type": "path", - "id": "BPGEq", - "name": "nav2Icon", - "width": 24, - "height": 24 - }, - { - "type": "text", - "id": "9q0Tg", - "name": "nav2Txt", - "fill": "#71717a", - "content": "Chat", - "fontFamily": "DM Sans", - "fontSize": 10, - "fontWeight": "normal" - } - ] - }, - { - "type": "frame", - "id": "Z1RTB", - "name": "nav3", - "width": 48, - "height": 48, - "fill": "#f4f4f5", - "cornerRadius": 24, - "justifyContent": "center", - "alignItems": "center", - "children": [ - { - "type": "path", - "id": "nbDqm", - "name": "nav3Icon", - "width": 24, - "height": 24 - } - ] - }, - { - "type": "frame", - "id": "U5Na8", - "name": "nav4", - "layout": "vertical", - "gap": 4, - "alignItems": "center", - "children": [ - { - "type": "path", - "id": "J7U2k", - "name": "nav4Icon", - "width": 24, - "height": 24 - }, - { - "type": "text", - "id": "Fxphz", - "name": "nav4Txt", - "fill": "#f4f4f5", - "content": "Stats", - "fontFamily": "DM Sans", - "fontSize": 10, - "fontWeight": "700" - } - ] - }, - { - "type": "frame", - "id": "3ZAKT", - "name": "nav5", - "layout": "vertical", - "gap": 4, - "alignItems": "center", - "children": [ - { - "type": "path", - "id": "rnT5I", - "name": "nav5Icon", - "width": 24, - "height": 24 - }, - { - "type": "text", - "id": "pzUFj", - "name": "nav5Txt", - "fill": "#71717a", - "content": "Profile", - "fontFamily": "DM Sans", - "fontSize": 10, - "fontWeight": "normal" - } - ] - } - ] - } - ] - } - ] -} \ No newline at end of file