{ "schemaVersion": 2, "figma": { "fileKey": "OTOg5cwbhVNWxkImGmzTJl", "canvas": { "id": "721:2016", "name": "Fami运营" }, "entryFrames": { "history": { "id": "837:4472", "name": "历史前三", "width": 1080, "height": 2651 }, "current": { "id": "837:4545", "name": "历史前三", "width": 1080, "height": 2460 }, "rewards": { "id": "837:4615", "name": "历史前三", "width": 1080, "height": 3532 } }, "references": { "hero": { "groupNode": "837:4721", "maskNode": "837:4722", "imageNode": "837:4723", "bounds": { "x": 0, "y": 0, "width": 1080, "height": 1080 }, "runtimeExported": false, "purpose": "Trace the Figma hero and bottom fade only. The runtime header is decomposed into the body watermark plus DOM/CSS title, date, note, and controls." } } }, "policy": { "rule": "Only isolated single visual nodes are shippable assets. Root canvases, complete state frames, multi-element regions, text, controls, leaderboard rows, reward grids, and dynamic business media are never runtime screenshots.", "forbiddenAggregateNodes": [ "721:2016", "837:4472", "837:4545", "837:4615", "837:4475", "837:4491", "837:4507", "837:4548", "837:4564", "837:4579", "837:4618", "837:4634", "837:4649", "837:4721" ], "allowedSourceTypes": ["RECTANGLE"], "forbiddenRuntimeNamePatterns": [ "hero", "header", "full-page", "whole-page", "leaderboard", "reward-grid", "frame-837" ] }, "compositions": { "pageBackground": { "layers": ["body-watermark.webp"], "dynamicSlots": [] }, "giftCard": { "layers": ["gift-frame.webp", "gift-glow.webp"], "dynamicSlots": ["gift.media"] }, "tabs": { "layers": ["tab-active.webp", "tab-inactive.webp"], "dynamicSlots": ["tab.label", "tab.state"] }, "leaderboard": { "layers": ["medal-1.webp", "medal-2.webp", "medal-3.webp"], "dynamicSlots": [ "user.avatar.top", "user.avatar", "user.displayName", "user.score" ] }, "rewardPanel": { "layers": [ "reward-panel.webp", "reward-heading.webp", "gift-frame.webp", "gift-glow.webp" ], "dynamicSlots": [ "reward.rank", "reward.giftMedia", "reward.duration" ] } }, "fixtureBindings": [ { "slot": "gift.media", "file": "../fixtures/mock-gift.webp", "mockOnly": true }, { "slot": "user.avatar.top", "file": "../fixtures/mock-avatar-top.webp", "mockOnly": true }, { "slot": "user.avatar", "file": "../fixtures/mock-avatar-user.webp", "mockOnly": true } ], "assets": [ { "file": "body-watermark.webp", "scope": "runtime", "kind": "single-raster-image-fill", "sourceNode": "837:4544", "equivalentNodes": ["837:4614", "837:4718"], "sourceName": "image 5022", "sourceType": "RECTANGLE", "purpose": "Text-free palace background reused by the decomposed Hero and as a low-opacity watermark behind DOM leaderboard and reward content", "bounds": { "relativeTo": "837:4472", "x": -65, "y": 987, "width": 1210, "height": 2689 }, "original": { "width": 841, "height": 1870 }, "exported": { "width": 841, "height": 1870 }, "figmaOpacity": 0.1, "exportFormat": "webp-lossy", "quality": 88, "alphaQuality": null, "hasAlpha": false, "bytes": 605038, "sha256": "b09813ba3587478745f587dd2f7c599cf7e35abf8ca957525d7c1e8fbb8f9e8b", "dependencies": [], "containsText": false, "containsControls": false, "containsDynamicMedia": false, "mockOnly": false, "dynamic": false }, { "file": "gift-frame.webp", "scope": "runtime", "kind": "single-raster-ornamental-frame", "sourceNode": "837:4479", "equivalentNodes": ["837:4661"], "sourceName": "058 1", "sourceType": "RECTANGLE", "purpose": "Green-gold gift frame under live gift media", "bounds": { "relativeTo": "837:4472", "x": 61, "y": 1247, "width": 257, "height": 258 }, "original": { "width": 1169, "height": 1175 }, "exported": { "width": 514, "height": 516 }, "figmaOpacity": 1, "exportFormat": "webp-lossy", "quality": 86, "alphaQuality": 100, "hasAlpha": true, "bytes": 40204, "sha256": "37842036b84402bb1b43a091b023a00a4221a442c0b0b9c882f864dc034af980", "dependencies": [], "containsText": false, "containsControls": false, "containsDynamicMedia": false, "mockOnly": false, "dynamic": false }, { "file": "gift-glow.webp", "scope": "runtime", "kind": "single-raster-ornamental-overlay", "sourceNode": "837:4662", "equivalentNodes": [], "sourceName": "电商双十一通用弹窗广告_设计页-稿定设计 1", "sourceType": "RECTANGLE", "purpose": "Soft radial glow layered between the gift frame and live gift media", "bounds": { "relativeTo": "837:4615", "x": 153.5, "y": 2041, "width": 219, "height": 219 }, "original": { "width": 1183, "height": 1183 }, "exported": { "width": 438, "height": 438 }, "figmaOpacity": 0.34, "exportFormat": "webp-lossy", "quality": 84, "alphaQuality": 100, "hasAlpha": true, "bytes": 33306, "sha256": "06a7cb9da121e77a8e938c98c35ccfacdf5542cac92ec64dcc32bd2eec729c16", "dependencies": ["gift-frame.webp"], "containsText": false, "containsControls": false, "containsDynamicMedia": false, "mockOnly": false, "dynamic": false }, { "file": "tab-active.webp", "scope": "runtime", "kind": "single-raster-tab-skin", "sourceNode": "837:4493", "equivalentNodes": ["837:4569", "837:4642"], "sourceName": "图层 0 36", "sourceType": "RECTANGLE", "purpose": "Selected tab skin; tab labels and click targets remain DOM", "bounds": { "relativeTo": "837:4472", "x": 21, "y": 1557, "width": 335, "height": 149 }, "original": { "width": 1567, "height": 697 }, "exported": { "width": 672, "height": 298 }, "figmaOpacity": 1, "exportFormat": "webp-lossy", "quality": 86, "alphaQuality": 100, "hasAlpha": true, "bytes": 32938, "sha256": "34d4346275416d33c5cf670245f873f710d120531bd9a94d773cca43f3d79a97", "dependencies": [], "containsText": false, "containsControls": false, "containsDynamicMedia": false, "mockOnly": false, "dynamic": false }, { "file": "tab-inactive.webp", "scope": "runtime", "kind": "single-raster-tab-skin", "sourceNode": "837:4496", "equivalentNodes": [ "837:4499", "837:4566", "837:4572", "837:4636", "837:4639" ], "sourceName": "二二 1", "sourceType": "RECTANGLE", "purpose": "Unselected tab skin; tab labels and click targets remain DOM", "bounds": { "relativeTo": "837:4472", "x": 374, "y": 1559, "width": 336, "height": 149 }, "original": { "width": 1024, "height": 455 }, "exported": { "width": 672, "height": 298 }, "figmaOpacity": 1, "paintAdjustments": { "saturation": -0.49 }, "exportFormat": "webp-lossy", "quality": 86, "alphaQuality": 100, "hasAlpha": true, "bytes": 22864, "sha256": "07603c2c22b4fdc22efe1554049928de593f47ccd0cfb0c78b3d268e4c190b9e", "dependencies": [], "containsText": false, "containsControls": false, "containsDynamicMedia": false, "mockOnly": false, "dynamic": false }, { "file": "medal-1.webp", "scope": "runtime", "kind": "single-raster-rank-medal", "sourceNode": "837:4519", "equivalentNodes": ["837:4589"], "sourceName": "图层 2 1", "sourceType": "RECTANGLE", "purpose": "Rank-one medal beside live leaderboard identity data", "bounds": { "relativeTo": "837:4472", "x": 45, "y": 1939, "width": 69, "height": 61 }, "original": { "width": 625, "height": 553 }, "exported": { "width": 207, "height": 183 }, "figmaOpacity": 1, "exportFormat": "webp-lossy", "quality": 90, "alphaQuality": 100, "hasAlpha": true, "bytes": 11526, "sha256": "16122fdee746330822feeb64abe143100c25ccb706e50eb6cbea5a0c197fb87a", "dependencies": [], "containsText": false, "containsControls": false, "containsDynamicMedia": false, "mockOnly": false, "dynamic": false }, { "file": "medal-2.webp", "scope": "runtime", "kind": "single-raster-rank-medal", "sourceNode": "837:4524", "equivalentNodes": ["837:4594"], "sourceName": "图层 2 2", "sourceType": "RECTANGLE", "purpose": "Rank-two medal beside live leaderboard identity data", "bounds": { "relativeTo": "837:4472", "x": 45, "y": 2079, "width": 69, "height": 61 }, "original": { "width": 642, "height": 582 }, "exported": { "width": 207, "height": 188 }, "figmaOpacity": 1, "exportFormat": "webp-lossy", "quality": 90, "alphaQuality": 100, "hasAlpha": true, "bytes": 10310, "sha256": "6fd3956dcace1ff7646a3207ac68a23a33dd095ca597e7b62df5b60be07552b7", "dependencies": [], "containsText": false, "containsControls": false, "containsDynamicMedia": false, "mockOnly": false, "dynamic": false }, { "file": "medal-3.webp", "scope": "runtime", "kind": "single-raster-rank-medal", "sourceNode": "837:4531", "equivalentNodes": [], "sourceName": "图层 4 1", "sourceType": "RECTANGLE", "purpose": "Rank-three medal beside live leaderboard identity data", "bounds": { "relativeTo": "837:4472", "x": 47, "y": 2219, "width": 63, "height": 61 }, "original": { "width": 619, "height": 595 }, "exported": { "width": 207, "height": 199 }, "figmaOpacity": 1, "exportFormat": "webp-lossy", "quality": 90, "alphaQuality": 100, "hasAlpha": true, "bytes": 11086, "sha256": "2a5984f4166e0b832b74f4753db52b5e6dd59061a16698710e10aa9f020876c1", "dependencies": [], "containsText": false, "containsControls": false, "containsDynamicMedia": false, "mockOnly": false, "dynamic": false }, { "file": "reward-panel.webp", "scope": "runtime", "kind": "single-raster-panel-skin", "sourceNode": "837:4650", "equivalentNodes": [], "sourceName": "图层 0 37", "sourceType": "RECTANGLE", "purpose": "Empty reward panel skin behind DOM reward groups", "bounds": { "relativeTo": "837:4615", "x": 24, "y": 1760, "width": 1033, "height": 1689 }, "original": { "width": 931, "height": 1522 }, "exported": { "width": 931, "height": 1522 }, "figmaOpacity": 1, "exportFormat": "webp-lossy", "quality": 85, "alphaQuality": 100, "hasAlpha": true, "bytes": 98298, "sha256": "96f8029823e50297c46cec97809ec255ae040879df58a32c9d5a6f28acd56983", "dependencies": [], "containsText": false, "containsControls": false, "containsDynamicMedia": false, "mockOnly": false, "dynamic": false }, { "file": "reward-heading.webp", "scope": "runtime", "kind": "single-raster-node-crop", "sourceNode": "837:4653", "equivalentNodes": ["837:4675", "837:4697"], "sourceName": "2323a16b-9cbe-4acd-b676-8fd51cd1db70 1", "sourceType": "RECTANGLE", "purpose": "Cropped empty reward rank heading bar; TOP labels remain DOM text", "bounds": { "relativeTo": "837:4615", "x": 225, "y": 1876, "width": 632, "height": 98 }, "original": { "width": 632, "height": 98 }, "exported": { "width": 632, "height": 98 }, "figmaOpacity": 1, "exportFormat": "webp-lossy", "quality": 90, "alphaQuality": 100, "hasAlpha": true, "bytes": 11798, "sha256": "41fb59bae1e6800e95a712772179c49697129590fc99bb9a43f7e781a8c5c9de", "dependencies": ["reward-panel.webp"], "containsText": false, "containsControls": false, "containsDynamicMedia": false, "mockOnly": false, "dynamic": false }, { "file": "../fixtures/mock-gift.webp", "scope": "fixture", "kind": "single-dynamic-media-fixture", "sourceNode": "837:4480", "equivalentNodes": ["837:4663"], "sourceName": "10", "sourceType": "RECTANGLE", "purpose": "Figma sample gift used only by an explicit mock or visual-QA mode", "bounds": { "relativeTo": "837:4472", "x": 96, "y": 1288, "width": 188, "height": 188 }, "original": { "width": 144, "height": 144 }, "exported": { "width": 144, "height": 144 }, "figmaOpacity": 1, "exportFormat": "webp-lossless", "quality": null, "alphaQuality": null, "hasAlpha": true, "bytes": 16014, "sha256": "6c222a35801df12a90627e69eaf3945e268003be34b745d81357f22b1cf98c75", "dependencies": [], "containsText": false, "containsControls": false, "containsDynamicMedia": true, "mockOnly": true, "dynamic": true }, { "file": "../fixtures/mock-avatar-top.webp", "scope": "fixture", "kind": "single-dynamic-media-fixture", "sourceNode": "837:4518", "equivalentNodes": [], "sourceName": "Rectangle 34", "sourceType": "RECTANGLE", "purpose": "Figma first-place avatar used only by an explicit mock or visual-QA mode", "bounds": { "relativeTo": "837:4472", "x": 160, "y": 1913, "width": 113, "height": 113 }, "original": { "width": 1200, "height": 1200 }, "exported": { "width": 1200, "height": 1200 }, "figmaOpacity": 1, "exportFormat": "webp-lossless", "quality": null, "alphaQuality": null, "hasAlpha": false, "bytes": 1476722, "sha256": "3740a7decc5288288b1b1e52393ea7a76a633ac7832764a06dab36cd44d66af0", "dependencies": [], "containsText": false, "containsControls": false, "containsDynamicMedia": true, "mockOnly": true, "dynamic": true }, { "file": "../fixtures/mock-avatar-user.webp", "scope": "fixture", "kind": "single-dynamic-media-fixture", "sourceNode": "837:4523", "equivalentNodes": [], "sourceName": "Rectangle 35", "sourceType": "RECTANGLE", "purpose": "Figma leaderboard avatar used only by an explicit mock or visual-QA mode", "bounds": { "relativeTo": "837:4472", "x": 160, "y": 2053, "width": 113, "height": 113 }, "original": { "width": 768, "height": 1024 }, "exported": { "width": 768, "height": 1024 }, "figmaOpacity": 1, "exportFormat": "webp-lossless", "quality": null, "alphaQuality": null, "hasAlpha": false, "bytes": 911586, "sha256": "b23c230ada8cbc217ae6b238dd2df2efb9d46d79ea4b9b7e8a36e7f4230eaf3b", "dependencies": [], "containsText": false, "containsControls": false, "containsDynamicMedia": true, "mockOnly": true, "dynamic": true } ] }