2026-07-17 11:54:43 +08:00

113 lines
5.0 KiB
JSON

{
"schemaVersion": 1,
"figma": {
"fileKey": "OTOg5cwbhVNWxkImGmzTJl",
"frameNode": "822:2775",
"frameName": "room reward event",
"designSize": [1080, 1985]
},
"policy": {
"forbiddenNodes": ["822:2775", "822:2783"],
"forbiddenRuntimeAssets": [".audit/figma-default.png"],
"rule": "Only single visual layers are assets. Text, table rows, state, controls, and dynamic media are DOM/CSS/API driven."
},
"assets": [
{
"file": "hero-room-reward.webp",
"nodes": ["822:2778"],
"role": "hero illustration",
"kind": "single-raster-illustration",
"design": [1080, 810],
"note": "Single Figma image-fill artwork; dynamic page content is not embedded.",
"sha256": "e26e31a04e42a1562aecd7671c8c3d59f54e3b462b1b16d73dcc075f4ce89653",
"sourceSha256": "f8236a4fe58aadc228993f415146eb70832e7edfa9291e31736731d7cf8ab8ae",
"pixelSize": [1080, 810],
"sourceFile": "hero-source.bin"
},
{
"file": "hero-fade-mask.svg",
"nodes": ["822:2777"],
"role": "hero bottom fade mask",
"kind": "single-mask",
"design": [1080, 810],
"note": "Mask for the hero illustration only.",
"sha256": "a2f81f0beaabab653ba390bfa0d8f0fa3bfcc7ad01a0c3e9744d727163c069b6",
"sourceSha256": "a2f81f0beaabab653ba390bfa0d8f0fa3bfcc7ad01a0c3e9744d727163c069b6",
"pixelSize": [1080, 810],
"sourceFile": "hero-mask.bin"
},
{
"file": "frame-purple-gold.webp",
"nodes": ["822:2779", "822:2911"],
"role": "target and active value ornamental frame",
"kind": "single-ornamental-frame",
"design": [900, 289],
"note": "Reused at 215x69 for the value pill; all numbers remain DOM text.",
"sha256": "3e4dbc62c88914cf7dd9b06daf67afd8a9fcbb7af12cd40f4fbaacd88eac53bb",
"sourceSha256": "98c9dfbea98bca32e7cf97cf4f6e62185f472b7ca7bcfa4ff494aab7695b1994",
"pixelSize": [900, 289],
"sourceFile": "purple-frame.bin"
},
{
"file": "table-border-ornament.webp",
"nodes": ["822:2789", "822:2795", "822:2830"],
"role": "table top and side border ornament",
"kind": "single-ornamental-border-source",
"design": [1008, 1003],
"note": "CSS clips one source into top/left/right decorative rails; rows and labels remain DOM.",
"sha256": "912ab4da6b606cbe75c618e37123c30538e87302d1d9e137690f4c0ef57fdf17",
"sourceSha256": "3d854ee220f85b25a7525f2e4255e9f741f7aaf100853f5661b6dce58128572c",
"pixelSize": [1008, 1003],
"sourceFile": "border-source.bin"
},
{
"file": "coin-target.webp",
"nodes": ["822:2782"],
"role": "target currency icon",
"kind": "single-icon",
"design": [44, 44],
"note": "Decorative currency icon beside a DOM value.",
"sha256": "3c78529eaf1c85ccb56ceb5af17ed7b1ba95f61229d7d085e10ed11e2941a0b9",
"sourceSha256": "28f2737ecf85a13858b02b45b447c132ea2bee6cc32d6eceec95f17c85ac0d0c",
"pixelSize": [44, 44],
"sourceFile": "coin-large.bin"
},
{
"file": "coin-tier.webp",
"nodes": ["822:2869"],
"role": "tier reward currency icon",
"kind": "single-icon",
"design": [38, 38],
"note": "Repeated icon only; reward values remain DOM text.",
"sha256": "796d13d982fd4d96f30312a61eddc65a683d6d32a508db766df00298f3364009",
"sourceSha256": "f0ac90be6a9dc4fb471d6b6fe9a03a0e465b8ddcb11b932f6e7cd10b5d1a0251",
"pixelSize": [38, 38],
"sourceFile": "coin-small.bin"
},
{
"file": "pill-disabled.webp",
"nodes": ["822:2913"],
"role": "disabled reward value ornamental frame",
"kind": "single-ornamental-frame",
"design": [215, 69],
"note": "Display frame only; not a claim control.",
"sha256": "a6caf2d3311b4d99d32fbd9ff63eb6debe1bb9d208ad45ec9551cf69190b221e",
"sourceSha256": "d93927d705a527ba7528d1399fed3eac3afc649530c3fda024f8b6e994e7bf46",
"pixelSize": [215, 69],
"sourceFile": "button-disabled.bin"
},
{
"file": "avatar-mock.webp",
"nodes": ["822:2904"],
"role": "Figma QA mock avatar",
"kind": "single-dynamic-media-fixture",
"design": [119, 119],
"note": "Used only when ?mock=1; production uses API user.avatar/room.cover_url.",
"sha256": "6297d792db71672c9eb39103ebc1cad51257f6243ce115bd2a11bb51ad57dc7f",
"sourceSha256": "42f8c005b3c77796b55dac4cfe5096fbe2773d46c9d78d1114b59a41c45b5a68",
"pixelSize": [384, 512],
"sourceFile": "avatar-source.bin"
}
]
}